summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Documentation/ABI/testing/sysfs-fs-f2fs21
-rw-r--r--Documentation/conf.py62
-rw-r--r--Documentation/devicetree/bindings/clock/amlogic,gxbb-aoclkc.txt22
-rw-r--r--Documentation/devicetree/bindings/clock/at91-clock.txt10
-rw-r--r--Documentation/devicetree/bindings/clock/idt,versaclock5.txt30
-rw-r--r--Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt3
-rw-r--r--Documentation/devicetree/bindings/clock/renesas,rcar-usb2-clock-sel.txt55
-rw-r--r--Documentation/devicetree/bindings/clock/rockchip,rk3128-cru.txt8
-rw-r--r--Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt28
-rw-r--r--Documentation/devicetree/bindings/clock/snps,pll-clock.txt28
-rw-r--r--Documentation/devicetree/bindings/clock/st,stm32h7-rcc.txt71
-rw-r--r--Documentation/devicetree/bindings/clock/sunxi-ccu.txt6
-rw-r--r--Documentation/devicetree/bindings/clock/uniphier-clock.txt8
-rw-r--r--Documentation/devicetree/bindings/i2c/i2c-altera.txt39
-rw-r--r--Documentation/devicetree/bindings/i2c/i2c-stm32.txt29
-rw-r--r--Documentation/devicetree/bindings/input/pwm-vibrator.txt66
-rw-r--r--Documentation/devicetree/bindings/mips/lantiq/fpi-bus.txt31
-rw-r--r--Documentation/devicetree/bindings/mips/lantiq/rcu-gphy.txt36
-rw-r--r--Documentation/devicetree/bindings/mips/lantiq/rcu.txt89
-rw-r--r--Documentation/devicetree/bindings/mips/ni.txt7
-rw-r--r--Documentation/devicetree/bindings/mips/ralink.txt1
-rw-r--r--Documentation/devicetree/bindings/phy/phy-lantiq-rcu-usb2.txt40
-rw-r--r--Documentation/devicetree/bindings/power/wakeup-source.txt9
-rw-r--r--Documentation/devicetree/bindings/reset/lantiq,reset.txt30
-rw-r--r--Documentation/devicetree/bindings/rtc/google,goldfish-rtc.txt17
-rw-r--r--Documentation/devicetree/bindings/rtc/isil,isl12057.txt1
-rw-r--r--Documentation/devicetree/bindings/rtc/realtek,rtd119x.txt16
-rw-r--r--Documentation/devicetree/bindings/rtc/sun6i-rtc.txt4
-rw-r--r--Documentation/devicetree/bindings/sound/atmel-classd.txt9
-rw-r--r--Documentation/devicetree/bindings/vendor-prefixes.txt1
-rw-r--r--Documentation/devicetree/bindings/watchdog/aspeed-wdt.txt40
-rw-r--r--Documentation/devicetree/bindings/watchdog/lantiq-wdt.txt24
-rw-r--r--Documentation/devicetree/bindings/watchdog/meson-wdt.txt6
-rw-r--r--Documentation/devicetree/bindings/watchdog/mtk-wdt.txt2
-rw-r--r--Documentation/devicetree/bindings/watchdog/renesas-wdt.txt1
-rw-r--r--Documentation/fb/fbcon.txt7
-rw-r--r--Documentation/filesystems/Locking2
-rw-r--r--Documentation/filesystems/f2fs.txt19
-rw-r--r--Documentation/filesystems/orangefs.txt14
-rw-r--r--Documentation/filesystems/porting2
-rw-r--r--Documentation/filesystems/vfs.txt2
-rw-r--r--Documentation/networking/filter.txt2
-rw-r--r--Documentation/translations/ko_KR/memory-barriers.txt132
-rw-r--r--Documentation/watchdog/watchdog-parameters.txt2
-rw-r--r--MAINTAINERS160
-rw-r--r--Makefile30
-rw-r--r--arch/arc/kernel/setup.c2
-rw-r--r--arch/arc/kernel/troubleshoot.c2
-rw-r--r--arch/arm/mach-at91/Kconfig4
-rw-r--r--arch/arm64/kernel/stacktrace.c18
-rw-r--r--arch/ia64/Kconfig.debug5
-rw-r--r--arch/mips/Kconfig21
-rw-r--r--arch/mips/Makefile31
-rw-r--r--arch/mips/alchemy/devboards/db1200.c64
-rw-r--r--arch/mips/alchemy/devboards/db1300.c31
-rw-r--r--arch/mips/alchemy/devboards/db1xxx.c2
-rw-r--r--arch/mips/ar7/clock.c3
-rw-r--r--arch/mips/ath79/clock.c9
-rw-r--r--arch/mips/bcm63xx/clk.c3
-rw-r--r--arch/mips/boot/Makefile16
-rw-r--r--arch/mips/boot/dts/Makefile1
-rw-r--r--arch/mips/boot/dts/ingenic/ci20.dts37
-rw-r--r--arch/mips/boot/dts/ingenic/jz4780.dtsi11
-rw-r--r--arch/mips/boot/dts/ni/169445.dts100
-rw-r--r--arch/mips/boot/dts/ni/Makefile7
-rw-r--r--arch/mips/boot/dts/ralink/Makefile2
-rw-r--r--arch/mips/boot/dts/ralink/mt7628a.dtsi126
-rw-r--r--arch/mips/boot/dts/ralink/omega2p.dts18
-rw-r--r--arch/mips/boot/dts/ralink/vocore2.dts18
-rw-r--r--arch/mips/cavium-octeon/executive/Makefile2
-rw-r--r--arch/mips/cavium-octeon/executive/cvmx-boot-vector.c167
-rw-r--r--arch/mips/cavium-octeon/executive/cvmx-bootmem.c85
-rw-r--r--arch/mips/cavium-octeon/octeon-irq.c9
-rw-r--r--arch/mips/cavium-octeon/smp.c14
-rw-r--r--arch/mips/configs/cavium_octeon_defconfig25
-rw-r--r--arch/mips/configs/ci20_defconfig3
-rw-r--r--arch/mips/configs/generic/board-ni169445.config30
-rw-r--r--arch/mips/configs/generic/board-sead-3.config2
-rw-r--r--arch/mips/configs/generic_defconfig3
-rw-r--r--arch/mips/configs/gpr_defconfig4
-rw-r--r--arch/mips/configs/lemote2f_defconfig1
-rw-r--r--arch/mips/configs/malta_defconfig1
-rw-r--r--arch/mips/configs/malta_kvm_defconfig1
-rw-r--r--arch/mips/configs/malta_kvm_guest_defconfig1
-rw-r--r--arch/mips/configs/maltasmvp_defconfig1
-rw-r--r--arch/mips/configs/maltasmvp_eva_defconfig1
-rw-r--r--arch/mips/configs/mtx1_defconfig4
-rw-r--r--arch/mips/configs/nlm_xlp_defconfig1
-rw-r--r--arch/mips/configs/nlm_xlr_defconfig4
-rw-r--r--arch/mips/configs/omega2p_defconfig129
-rw-r--r--arch/mips/configs/pistachio_defconfig5
-rw-r--r--arch/mips/configs/vocore2_defconfig129
-rw-r--r--arch/mips/fw/arc/init.c2
-rw-r--r--arch/mips/generic/Kconfig6
-rw-r--r--arch/mips/generic/Platform4
-rw-r--r--arch/mips/generic/board-boston.its.S22
-rw-r--r--arch/mips/generic/board-ni169445.its.S22
-rw-r--r--arch/mips/generic/init.c5
-rw-r--r--arch/mips/generic/irq.c9
-rw-r--r--arch/mips/generic/vmlinux.its.S25
-rw-r--r--arch/mips/include/asm/asm.h3
-rw-r--r--arch/mips/include/asm/bmips.h4
-rw-r--r--arch/mips/include/asm/cpu-info.h62
-rw-r--r--arch/mips/include/asm/cpu-type.h5
-rw-r--r--arch/mips/include/asm/cpu.h5
-rw-r--r--arch/mips/include/asm/floppy.h4
-rw-r--r--arch/mips/include/asm/fpu_emulator.h118
-rw-r--r--arch/mips/include/asm/io.h2
-rw-r--r--arch/mips/include/asm/mach-au1x00/cpu-feature-overrides.h26
-rw-r--r--arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h2
-rw-r--r--arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h6
-rw-r--r--arch/mips/include/asm/mach-ip27/topology.h1
-rw-r--r--arch/mips/include/asm/mach-lantiq/lantiq.h2
-rw-r--r--arch/mips/include/asm/mach-loongson64/loongson.h2
-rw-r--r--arch/mips/include/asm/mach-loongson64/topology.h1
-rw-r--r--arch/mips/include/asm/mips-boards/maltaint.h5
-rw-r--r--arch/mips/include/asm/mips-cm.h567
-rw-r--r--arch/mips/include/asm/mips-cpc.h177
-rw-r--r--arch/mips/include/asm/mips-cps.h240
-rw-r--r--arch/mips/include/asm/mips-gic.h347
-rw-r--r--arch/mips/include/asm/mipsregs.h13
-rw-r--r--arch/mips/include/asm/module.h2
-rw-r--r--arch/mips/include/asm/netlogic/common.h2
-rw-r--r--arch/mips/include/asm/octeon/cvmx-boot-vector.h53
-rw-r--r--arch/mips/include/asm/octeon/cvmx-bootmem.h28
-rw-r--r--arch/mips/include/asm/octeon/cvmx-ciu-defs.h10
-rw-r--r--arch/mips/include/asm/octeon/cvmx.h28
-rw-r--r--arch/mips/include/asm/octeon/octeon.h2
-rw-r--r--arch/mips/include/asm/smp-ops.h16
-rw-r--r--arch/mips/include/asm/smp.h10
-rw-r--r--arch/mips/include/asm/stackframe.h280
-rw-r--r--arch/mips/include/asm/stacktrace.h64
-rw-r--r--arch/mips/include/asm/topology.h2
-rw-r--r--arch/mips/include/uapi/asm/inst.h2
-rw-r--r--arch/mips/kernel/Makefile14
-rw-r--r--arch/mips/kernel/cps-vec.S4
-rw-r--r--arch/mips/kernel/cpu-probe.c59
-rw-r--r--arch/mips/kernel/elf.c12
-rw-r--r--arch/mips/kernel/genex.S13
-rw-r--r--arch/mips/kernel/idle.c1
-rw-r--r--arch/mips/kernel/mips-cm.c94
-rw-r--r--arch/mips/kernel/mips-cpc.c17
-rw-r--r--arch/mips/kernel/mips-r2-to-r6-emul.c16
-rw-r--r--arch/mips/kernel/octeon_switch.S11
-rw-r--r--arch/mips/kernel/pm-cps.c17
-rw-r--r--arch/mips/kernel/proc.c6
-rw-r--r--arch/mips/kernel/process.c102
-rw-r--r--arch/mips/kernel/r2300_fpu.S80
-rw-r--r--arch/mips/kernel/r2300_switch.S81
-rw-r--r--arch/mips/kernel/r4k_fpu.S196
-rw-r--r--arch/mips/kernel/r4k_switch.S203
-rw-r--r--arch/mips/kernel/r6000_fpu.S99
-rw-r--r--arch/mips/kernel/smp-bmips.c10
-rw-r--r--arch/mips/kernel/smp-cmp.c6
-rw-r--r--arch/mips/kernel/smp-cps.c152
-rw-r--r--arch/mips/kernel/smp-mt.c14
-rw-r--r--arch/mips/kernel/smp-up.c5
-rw-r--r--arch/mips/kernel/smp.c24
-rw-r--r--arch/mips/kernel/time.c14
-rw-r--r--arch/mips/kernel/traps.c29
-rw-r--r--arch/mips/kernel/unaligned.c2
-rw-r--r--arch/mips/kernel/vdso.c15
-rw-r--r--arch/mips/kvm/mips.c4
-rw-r--r--arch/mips/lantiq/Kconfig2
-rw-r--r--arch/mips/lantiq/falcon/reset.c23
-rw-r--r--arch/mips/lantiq/irq.c4
-rw-r--r--arch/mips/lantiq/prom.c2
-rw-r--r--arch/mips/lantiq/xway/Makefile4
-rw-r--r--arch/mips/lantiq/xway/reset.c387
-rw-r--r--arch/mips/lantiq/xway/sysctrl.c83
-rw-r--r--arch/mips/lantiq/xway/xrx200_phy_fw.c113
-rw-r--r--arch/mips/lib/Makefile2
-rw-r--r--arch/mips/lib/delay.c1
-rw-r--r--arch/mips/lib/iomap_copy.c42
-rw-r--r--arch/mips/loongson64/lemote-2f/clock.c3
-rw-r--r--arch/mips/loongson64/loongson-3/smp.c16
-rw-r--r--arch/mips/math-emu/Makefile6
-rw-r--r--arch/mips/math-emu/cp1emu.c284
-rw-r--r--arch/mips/math-emu/dp_fmax.c84
-rw-r--r--arch/mips/math-emu/dp_fmin.c86
-rw-r--r--arch/mips/math-emu/dp_maddf.c246
-rw-r--r--arch/mips/math-emu/dp_rint.c89
-rw-r--r--arch/mips/math-emu/ieee754.h2
-rw-r--r--arch/mips/math-emu/ieee754int.h4
-rw-r--r--arch/mips/math-emu/ieee754sp.h4
-rw-r--r--arch/mips/math-emu/me-debugfs.c318
-rw-r--r--arch/mips/math-emu/sp_fmax.c84
-rw-r--r--arch/mips/math-emu/sp_fmin.c86
-rw-r--r--arch/mips/math-emu/sp_maddf.c229
-rw-r--r--arch/mips/math-emu/sp_rint.c90
-rw-r--r--arch/mips/mm/c-r4k.c2
-rw-r--r--arch/mips/mm/cache.c2
-rw-r--r--arch/mips/mm/dma-default.c46
-rw-r--r--arch/mips/mm/init.c1
-rw-r--r--arch/mips/mm/mmap.c1
-rw-r--r--arch/mips/mm/sc-mips.c47
-rw-r--r--arch/mips/mm/tlbex-fault.S7
-rw-r--r--arch/mips/mm/tlbex.c5
-rw-r--r--arch/mips/mti-malta/malta-dtshim.c4
-rw-r--r--arch/mips/mti-malta/malta-init.c3
-rw-r--r--arch/mips/mti-malta/malta-int.c5
-rw-r--r--arch/mips/mti-malta/malta-setup.c4
-rw-r--r--arch/mips/mti-malta/malta-time.c26
-rw-r--r--arch/mips/netlogic/common/smp.c8
-rw-r--r--arch/mips/oprofile/op_model_mipsxx.c4
-rw-r--r--arch/mips/paravirt/paravirt-smp.c5
-rw-r--r--arch/mips/paravirt/setup.c2
-rw-r--r--arch/mips/pci/pci-legacy.c2
-rw-r--r--arch/mips/pci/pci-malta.c6
-rw-r--r--arch/mips/pci/pci-mt7620.c2
-rw-r--r--arch/mips/pci/pci-rt3883.c11
-rw-r--r--arch/mips/pistachio/init.c3
-rw-r--r--arch/mips/pistachio/irq.c1
-rw-r--r--arch/mips/pistachio/time.c2
-rw-r--r--arch/mips/ralink/Kconfig10
-rw-r--r--arch/mips/ralink/clk.c3
-rw-r--r--arch/mips/ralink/irq-gic.c2
-rw-r--r--arch/mips/ralink/mt7621.c5
-rw-r--r--arch/mips/sgi-ip27/ip27-smp.c5
-rw-r--r--arch/mips/sibyte/bcm1480/smp.c5
-rw-r--r--arch/mips/sibyte/common/cfe.c4
-rw-r--r--arch/mips/sibyte/sb1250/smp.c5
-rwxr-xr-xarch/mips/tools/generic-board-config.sh90
-rw-r--r--arch/mips/vdso/gettimeofday.c8
-rw-r--r--arch/mips/vdso/sigreturn.S10
-rw-r--r--arch/nios2/boot/dts/3c120_devboard.dts3
-rw-r--r--arch/nios2/kernel/time.c5
-rw-r--r--arch/openrisc/include/asm/pgtable.h2
-rw-r--r--arch/powerpc/kernel/align.c2
-rw-r--r--arch/powerpc/kernel/rtas.c4
-rw-r--r--arch/powerpc/kvm/book3s_hv.c4
-rw-r--r--arch/powerpc/kvm/book3s_hv_rm_xive.c1
-rw-r--r--arch/powerpc/kvm/book3s_hv_rmhandlers.S17
-rw-r--r--arch/powerpc/kvm/book3s_xive.c1
-rw-r--r--arch/powerpc/kvm/book3s_xive_template.c7
-rw-r--r--arch/powerpc/platforms/pseries/suspend.c2
-rw-r--r--arch/um/Kconfig.um1
-rw-r--r--arch/um/Makefile2
-rw-r--r--arch/um/configs/i386_defconfig1
-rw-r--r--arch/um/configs/x86_64_defconfig1
-rw-r--r--arch/um/drivers/mconsole_kern.c7
-rw-r--r--arch/um/include/asm/thread_info.h3
-rw-r--r--arch/um/include/shared/os.h2
-rw-r--r--arch/um/kernel/gmon_syms.c7
-rw-r--r--arch/um/kernel/process.c4
-rw-r--r--arch/um/os-Linux/drivers/tuntap_user.c2
-rw-r--r--arch/um/os-Linux/skas/process.c17
-rw-r--r--arch/um/os-Linux/start_up.c6
-rw-r--r--arch/x86/ia32/ia32_aout.c4
-rw-r--r--arch/x86/include/asm/desc.h3
-rw-r--r--arch/x86/include/asm/kvm_host.h3
-rw-r--r--arch/x86/include/asm/paravirt.h37
-rw-r--r--arch/x86/include/asm/paravirt_types.h9
-rw-r--r--arch/x86/include/asm/pgtable.h27
-rw-r--r--arch/x86/include/asm/special_insns.h10
-rw-r--r--arch/x86/include/uapi/asm/hyperv.h6
-rw-r--r--arch/x86/kernel/acpi/boot.c4
-rw-r--r--arch/x86/kernel/apm_32.c2
-rw-r--r--arch/x86/kernel/cpu/amd.c11
-rw-r--r--arch/x86/kernel/cpu/common.c49
-rw-r--r--arch/x86/kernel/cpu/mshyperv.c4
-rw-r--r--arch/x86/kernel/io_delay.c2
-rw-r--r--arch/x86/kernel/kvm.c2
-rw-r--r--arch/x86/kernel/paravirt.c5
-rw-r--r--arch/x86/kernel/reboot.c2
-rw-r--r--arch/x86/kernel/setup.c5
-rw-r--r--arch/x86/kernel/smpboot.c8
-rw-r--r--arch/x86/kvm/cpuid.h1
-rw-r--r--arch/x86/kvm/lapic.c4
-rw-r--r--arch/x86/kvm/svm.c38
-rw-r--r--arch/x86/kvm/vmx.c164
-rw-r--r--arch/x86/kvm/x86.c51
-rw-r--r--arch/x86/mm/init.c34
-rw-r--r--arch/x86/mm/pgtable.c7
-rw-r--r--arch/x86/mm/tlb.c22
-rw-r--r--arch/x86/pci/irq.c2
-rw-r--r--arch/x86/power/cpu.c2
-rw-r--r--arch/x86/power/hibernate_64.c21
-rw-r--r--arch/x86/um/os-Linux/registers.c18
-rw-r--r--arch/x86/um/os-Linux/tls.c2
-rw-r--r--arch/x86/um/user-offsets.c2
-rw-r--r--arch/x86/xen/enlighten_pv.c2
-rw-r--r--arch/x86/xen/mmu_pv.c2
-rw-r--r--block/blk-core.c7
-rw-r--r--block/blk-lib.c4
-rw-r--r--block/blk-mq.c16
-rw-r--r--block/blk-mq.h1
-rw-r--r--block/opal_proto.h1
-rw-r--r--block/sed-opal.c32
-rw-r--r--drivers/acpi/acpi_video.c2
-rw-r--r--drivers/acpi/blacklist.c4
-rw-r--r--drivers/acpi/bus.c4
-rw-r--r--drivers/acpi/ec.c2
-rw-r--r--drivers/acpi/osi.c2
-rw-r--r--drivers/acpi/pci_slot.c2
-rw-r--r--drivers/acpi/processor_pdc.c2
-rw-r--r--drivers/acpi/sleep.c2
-rw-r--r--drivers/acpi/thermal.c2
-rw-r--r--drivers/base/Kconfig5
-rw-r--r--drivers/block/rbd.c2
-rw-r--r--drivers/char/sonypi.c2
-rw-r--r--drivers/clk/Kconfig17
-rw-r--r--drivers/clk/Makefile3
-rw-r--r--drivers/clk/at91/Makefile1
-rw-r--r--drivers/clk/at91/clk-audio-pll.c536
-rw-r--r--drivers/clk/at91/clk-generated.c101
-rw-r--r--drivers/clk/axs10x/Makefile1
-rw-r--r--drivers/clk/axs10x/pll_clock.c346
-rw-r--r--drivers/clk/berlin/bg2.c3
-rw-r--r--drivers/clk/berlin/bg2q.c7
-rw-r--r--drivers/clk/clk-asm9260.c4
-rw-r--r--drivers/clk/clk-conf.c16
-rw-r--r--drivers/clk/clk-cs2000-cp.c14
-rw-r--r--drivers/clk/clk-divider.c6
-rw-r--r--drivers/clk/clk-fractional-divider.c28
-rw-r--r--drivers/clk/clk-gate.c3
-rw-r--r--drivers/clk/clk-gemini.c7
-rw-r--r--drivers/clk/clk-hsdk-pll.c431
-rw-r--r--drivers/clk/clk-mb86s7x.c390
-rw-r--r--drivers/clk/clk-moxart.c16
-rw-r--r--drivers/clk/clk-qoriq.c26
-rw-r--r--drivers/clk/clk-si5351.c12
-rw-r--r--drivers/clk/clk-stm32f4.c4
-rw-r--r--drivers/clk/clk-stm32h7.c1410
-rw-r--r--drivers/clk/clk-versaclock5.c172
-rw-r--r--drivers/clk/clk-xgene.c15
-rw-r--r--drivers/clk/clk.c4
-rw-r--r--drivers/clk/clkdev.c4
-rw-r--r--drivers/clk/hisilicon/clk-hi6220.c6
-rw-r--r--drivers/clk/imx/clk-imx51-imx53.c8
-rw-r--r--drivers/clk/imx/clk-imx6sl.c6
-rw-r--r--drivers/clk/imx/clk-imx6sx.c6
-rw-r--r--drivers/clk/imx/clk-imx6ul.c6
-rw-r--r--drivers/clk/imx/clk-imx7d.c4
-rw-r--r--drivers/clk/imx/clk-vf610.c2
-rw-r--r--drivers/clk/mediatek/clk-cpumux.c6
-rw-r--r--drivers/clk/mediatek/clk-mtk.c2
-rw-r--r--drivers/clk/mediatek/reset.c2
-rw-r--r--drivers/clk/meson/Kconfig1
-rw-r--r--drivers/clk/meson/Makefile2
-rw-r--r--drivers/clk/meson/gxbb-aoclk-32k.c194
-rw-r--r--drivers/clk/meson/gxbb-aoclk-regmap.c46
-rw-r--r--drivers/clk/meson/gxbb-aoclk.c65
-rw-r--r--drivers/clk/meson/gxbb-aoclk.h42
-rw-r--r--drivers/clk/meson/gxbb.c187
-rw-r--r--drivers/clk/meson/meson8b.c159
-rw-r--r--drivers/clk/meson/meson8b.h9
-rw-r--r--drivers/clk/mmp/clk.c2
-rw-r--r--drivers/clk/nxp/clk-lpc32xx.c12
-rw-r--r--drivers/clk/qcom/clk-smd-rpm.c2
-rw-r--r--drivers/clk/qcom/gcc-msm8916.c2
-rw-r--r--drivers/clk/qcom/gcc-msm8996.c28
-rw-r--r--drivers/clk/renesas/Kconfig48
-rw-r--r--drivers/clk/renesas/Makefile2
-rw-r--r--drivers/clk/renesas/clk-div6.c3
-rw-r--r--drivers/clk/renesas/clk-mstp.c2
-rw-r--r--drivers/clk/renesas/clk-rcar-gen2.c3
-rw-r--r--drivers/clk/renesas/r8a7792-cpg-mssr.c7
-rw-r--r--drivers/clk/renesas/r8a7795-cpg-mssr.c34
-rw-r--r--drivers/clk/renesas/r8a7796-cpg-mssr.c35
-rw-r--r--drivers/clk/renesas/r8a77995-cpg-mssr.c236
-rw-r--r--drivers/clk/renesas/rcar-gen3-cpg.c69
-rw-r--r--drivers/clk/renesas/rcar-gen3-cpg.h15
-rw-r--r--drivers/clk/renesas/rcar-usb2-clock-sel.c188
-rw-r--r--drivers/clk/renesas/renesas-cpg-mssr.c6
-rw-r--r--drivers/clk/renesas/renesas-cpg-mssr.h1
-rw-r--r--drivers/clk/rockchip/clk-rk3128.c69
-rw-r--r--drivers/clk/rockchip/clk-rk3228.c2
-rw-r--r--drivers/clk/rockchip/clk-rv1108.c462
-rw-r--r--drivers/clk/rockchip/clk.c36
-rw-r--r--drivers/clk/samsung/clk-exynos-audss.c8
-rw-r--r--drivers/clk/samsung/clk-exynos5420.c23
-rw-r--r--drivers/clk/sunxi-ng/Kconfig18
-rw-r--r--drivers/clk/sunxi-ng/Makefile2
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun4i-a10.c1456
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun4i-a10.h61
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun5i.c3
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun6i-a31.c3
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-a23.c3
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-a33.c3
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-h3.c16
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-r.c3
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-r.h2
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-r40.c1290
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-r40.h69
-rw-r--r--drivers/clk/sunxi-ng/ccu-sun8i-v3s.c3
-rw-r--r--drivers/clk/sunxi-ng/ccu_div.c22
-rw-r--r--drivers/clk/sunxi-ng/ccu_div.h3
-rw-r--r--drivers/clk/sunxi-ng/ccu_frac.c14
-rw-r--r--drivers/clk/sunxi-ng/ccu_frac.h2
-rw-r--r--drivers/clk/sunxi-ng/ccu_mult.c10
-rw-r--r--drivers/clk/sunxi-ng/ccu_nkm.c22
-rw-r--r--drivers/clk/sunxi-ng/ccu_nkm.h2
-rw-r--r--drivers/clk/sunxi-ng/ccu_nm.c19
-rw-r--r--drivers/clk/sunxi/clk-sun8i-bus-gates.c4
-rw-r--r--drivers/clk/sunxi/clk-sunxi.c17
-rw-r--r--drivers/clk/tegra/clk-emc.c12
-rw-r--r--drivers/clk/tegra/clk-pll.c159
-rw-r--r--drivers/clk/tegra/clk-tegra-periph.c3
-rw-r--r--drivers/clk/tegra/clk-tegra-super-gen4.c11
-rw-r--r--drivers/clk/tegra/clk-tegra210.c32
-rw-r--r--drivers/clk/tegra/clk.h6
-rw-r--r--drivers/clk/ti/adpll.c4
-rw-r--r--drivers/clk/ti/apll.c2
-rw-r--r--drivers/clk/ti/clockdomain.c4
-rw-r--r--drivers/clk/ti/fapll.c4
-rw-r--r--drivers/clk/uniphier/clk-uniphier-core.c26
-rw-r--r--drivers/clk/uniphier/clk-uniphier-mio.c4
-rw-r--r--drivers/clk/uniphier/clk-uniphier-sys.c98
-rw-r--r--drivers/clk/uniphier/clk-uniphier.h4
-rw-r--r--drivers/clk/ux500/clk-prcc.c6
-rw-r--r--drivers/clk/ux500/clk-prcmu.c14
-rw-r--r--drivers/clk/ux500/clk-sysctrl.c8
-rw-r--r--drivers/clk/versatile/clk-vexpress-osc.c2
-rw-r--r--drivers/clk/zte/clk-zx296718.c6
-rw-r--r--drivers/clocksource/mips-gic-timer.c37
-rw-r--r--drivers/cpufreq/powernow-k7.c2
-rw-r--r--drivers/cpuidle/cpuidle-cps.c2
-rw-r--r--drivers/dax/super.c21
-rw-r--r--drivers/firmware/google/gsmi.c2
-rw-r--r--drivers/firmware/google/memconsole-x86-legacy.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu.h2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c7
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_device.c10
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c12
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c14
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_object.c46
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c16
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c76
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c46
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c12
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c19
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c22
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c21
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c16
-rw-r--r--drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c5
-rw-r--r--drivers/gpu/drm/amd/include/vi_structs.h4
-rw-r--r--drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c11
-rw-r--r--drivers/gpu/drm/amd/powerplay/inc/smu9_driver_if.h6
-rw-r--r--drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c3
-rw-r--r--drivers/gpu/drm/amd/scheduler/gpu_scheduler.c23
-rw-r--r--drivers/gpu/drm/drm_blend.c2
-rw-r--r--drivers/gpu/drm/drm_dp_dual_mode_helper.c2
-rw-r--r--drivers/gpu/drm/drm_scdc_helper.c2
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c12
-rw-r--r--drivers/gpu/drm/i915/i915_gem_gtt.c2
-rw-r--r--drivers/gpu/drm/i915/i915_gem_userptr.c4
-rw-r--r--drivers/gpu/drm/i915/i915_gpu_error.c6
-rw-r--r--drivers/gpu/drm/i915/selftests/i915_random.c2
-rw-r--r--drivers/gpu/drm/i915/selftests/intel_breadcrumbs.c10
-rw-r--r--drivers/gpu/drm/i915/selftests/intel_uncore.c2
-rw-r--r--drivers/gpu/drm/lib/drm_random.c2
-rw-r--r--drivers/gpu/drm/msm/msm_gem_submit.c2
-rw-r--r--drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c2
-rw-r--r--drivers/gpu/drm/selftests/test-drm_mm.c4
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo.c4
-rw-r--r--drivers/gpu/drm/ttm/ttm_bo_util.c1
-rw-r--r--drivers/hwmon/acpi_power_meter.c2
-rw-r--r--drivers/hwmon/applesmc.c2
-rw-r--r--drivers/hwmon/dell-smm-hwmon.c4
-rw-r--r--drivers/i2c/busses/Kconfig20
-rw-r--r--drivers/i2c/busses/Makefile2
-rw-r--r--drivers/i2c/busses/i2c-altera.c511
-rw-r--r--drivers/i2c/busses/i2c-stm32.h20
-rw-r--r--drivers/i2c/busses/i2c-stm32f4.c18
-rw-r--r--drivers/i2c/busses/i2c-stm32f7.c972
-rw-r--r--drivers/infiniband/hw/mlx4/sysfs.c2
-rw-r--r--drivers/input/joystick/adi.c2
-rw-r--r--drivers/input/joystick/xpad.c10
-rw-r--r--drivers/input/misc/Kconfig12
-rw-r--r--drivers/input/misc/Makefile1
-rw-r--r--drivers/input/misc/pwm-vibra.c267
-rw-r--r--drivers/input/mouse/elantech.c8
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h7
-rw-r--r--drivers/input/touchscreen/edt-ft5x06.c3
-rw-r--r--drivers/input/touchscreen/goodix.c9
-rw-r--r--drivers/input/touchscreen/htcpen.c2
-rw-r--r--drivers/input/touchscreen/surface3_spi.c2
-rw-r--r--drivers/input/touchscreen/ucb1400_ts.c4
-rw-r--r--drivers/irqchip/irq-mips-cpu.c2
-rw-r--r--drivers/irqchip/irq-mips-gic.c616
-rw-r--r--drivers/leds/leds-clevo-mail.c2
-rw-r--r--drivers/leds/leds-ss4200.c2
-rw-r--r--drivers/md/dm-bufio.c95
-rw-r--r--drivers/md/dm-bufio.h9
-rw-r--r--drivers/md/dm-cache-target.c4
-rw-r--r--drivers/md/dm-crypt.c2
-rw-r--r--drivers/md/dm-flakey.c4
-rw-r--r--drivers/md/dm-integrity.c42
-rw-r--r--drivers/md/dm-ioctl.c2
-rw-r--r--drivers/md/dm-linear.c15
-rw-r--r--drivers/md/dm-log-writes.c44
-rw-r--r--drivers/md/dm-mpath.c15
-rw-r--r--drivers/md/dm-rq.c27
-rw-r--r--drivers/md/dm-rq.h1
-rw-r--r--drivers/md/dm-stripe.c20
-rw-r--r--drivers/md/dm-switch.c2
-rw-r--r--drivers/md/dm-table.c7
-rw-r--r--drivers/md/dm-thin.c2
-rw-r--r--drivers/md/dm-verity-target.c2
-rw-r--r--drivers/md/dm.c19
-rw-r--r--drivers/media/cec/cec-adap.c5
-rw-r--r--drivers/media/pci/cx25821/cx25821-audio-upstream.c13
-rw-r--r--drivers/mfd/kempld-core.c2
-rw-r--r--drivers/misc/cxl/pci.c2
-rw-r--r--drivers/mmc/core/queue.c7
-rw-r--r--drivers/mmc/host/Kconfig2
-rw-r--r--drivers/mmc/host/cavium-thunderx.c6
-rw-r--r--drivers/mtd/maps/lantiq-flash.c6
-rw-r--r--drivers/mtd/nand/nandsim.c4
-rw-r--r--drivers/mtd/ubi/block.c6
-rw-r--r--drivers/mtd/ubi/build.c20
-rw-r--r--drivers/mtd/ubi/fastmap.c2
-rw-r--r--drivers/mtd/ubi/ubi-media.h4
-rw-r--r--drivers/net/bonding/bond_main.c17
-rw-r--r--drivers/net/bonding/bond_options.c3
-rw-r--r--drivers/net/ethernet/broadcom/bcmsysport.c3
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c4
-rw-r--r--drivers/net/ethernet/emulex/benet/be.h8
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c14
-rw-r--r--drivers/net/ethernet/marvell/skge.c2
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum.c38
-rw-r--r--drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c3
-rw-r--r--drivers/net/ethernet/netronome/nfp/flower/offload.c13
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_main.c47
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_net_main.c23
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfpcore/nfp.h2
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c45
-rw-r--r--drivers/net/ethernet/nuvoton/w90p910_ether.c1
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_dcbx.c1
-rw-r--r--drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c10
-rw-r--r--drivers/net/ethernet/smsc/smsc911x.c15
-rw-r--r--drivers/net/ethernet/via/via-rhine.c2
-rw-r--r--drivers/net/hyperv/hyperv_net.h3
-rw-r--r--drivers/net/hyperv/netvsc.c3
-rw-r--r--drivers/net/hyperv/netvsc_drv.c13
-rw-r--r--drivers/net/hyperv/rndis_filter.c126
-rw-r--r--drivers/net/usb/smsc95xx.c11
-rw-r--r--drivers/net/vrf.c6
-rw-r--r--drivers/nvdimm/pmem.c7
-rw-r--r--drivers/nvme/host/core.c11
-rw-r--r--drivers/nvme/host/lightnvm.c26
-rw-r--r--drivers/nvme/host/nvme.h13
-rw-r--r--drivers/nvme/host/pci.c74
-rw-r--r--drivers/pci/pci.c13
-rw-r--r--drivers/pci/pcie/portdrv_pci.c2
-rw-r--r--drivers/pci/quirks.c2
-rw-r--r--drivers/pcmcia/db1xxx_ss.c33
-rw-r--r--drivers/phy/Kconfig1
-rw-r--r--drivers/phy/Makefile2
-rw-r--r--drivers/phy/lantiq/Kconfig9
-rw-r--r--drivers/phy/lantiq/Makefile1
-rw-r--r--drivers/phy/lantiq/phy-lantiq-rcu-usb2.c254
-rw-r--r--drivers/pinctrl/mvebu/pinctrl-armada-37xx.c41
-rw-r--r--drivers/pinctrl/pinctrl-amd.c75
-rw-r--r--drivers/pinctrl/pinctrl-amd.h1
-rw-r--r--drivers/pinctrl/sprd/Kconfig3
-rw-r--r--drivers/pinctrl/sprd/pinctrl-sprd.c32
-rw-r--r--drivers/pinctrl/uniphier/pinctrl-uniphier.h2
-rw-r--r--drivers/platform/chrome/chromeos_laptop.c2
-rw-r--r--drivers/platform/chrome/chromeos_pstore.c2
-rw-r--r--drivers/platform/chrome/cros_ec_lpc.c2
-rw-r--r--drivers/platform/x86/compal-laptop.c2
-rw-r--r--drivers/platform/x86/hdaps.c2
-rw-r--r--drivers/platform/x86/ibm_rtl.c2
-rw-r--r--drivers/platform/x86/intel_oaktrail.c2
-rw-r--r--drivers/platform/x86/mlx-platform.c2
-rw-r--r--drivers/platform/x86/msi-laptop.c2
-rw-r--r--drivers/platform/x86/samsung-laptop.c2
-rw-r--r--drivers/platform/x86/samsung-q10.c2
-rw-r--r--drivers/platform/x86/sony-laptop.c2
-rw-r--r--drivers/platform/x86/toshiba-wmi.c2
-rw-r--r--drivers/pnp/pnpbios/core.c2
-rw-r--r--drivers/reset/Kconfig6
-rw-r--r--drivers/reset/Makefile1
-rw-r--r--drivers/reset/reset-lantiq.c212
-rw-r--r--drivers/rtc/Kconfig30
-rw-r--r--drivers/rtc/Makefile2
-rw-r--r--drivers/rtc/rtc-dev.c20
-rw-r--r--drivers/rtc/rtc-ds1307.c457
-rw-r--r--drivers/rtc/rtc-ds1672.c2
-rw-r--r--drivers/rtc/rtc-em3027.c2
-rw-r--r--drivers/rtc/rtc-goldfish.c237
-rw-r--r--drivers/rtc/rtc-m41t80.c67
-rw-r--r--drivers/rtc/rtc-max6900.c2
-rw-r--r--drivers/rtc/rtc-max8925.c2
-rw-r--r--drivers/rtc/rtc-mxc.c21
-rw-r--r--drivers/rtc/rtc-puv3.c72
-rw-r--r--drivers/rtc/rtc-pxa.c4
-rw-r--r--drivers/rtc/rtc-rtd119x.c242
-rw-r--r--drivers/rtc/rtc-rv3029c2.c2
-rw-r--r--drivers/rtc/rtc-s35390a.c104
-rw-r--r--drivers/rtc/rtc-sa1100.c65
-rw-r--r--drivers/rtc/rtc-sun6i.c34
-rw-r--r--drivers/rtc/rtc-vr41xx.c18
-rw-r--r--drivers/scsi/Kconfig2
-rw-r--r--drivers/scsi/hosts.c8
-rw-r--r--drivers/soc/Makefile1
-rw-r--r--drivers/soc/lantiq/Makefile2
-rw-r--r--drivers/soc/lantiq/fpi-bus.c87
-rw-r--r--drivers/soc/lantiq/gphy.c260
-rw-r--r--drivers/staging/android/ashmem.c29
-rw-r--r--drivers/staging/comedi/drivers/serial2002.c24
-rw-r--r--drivers/staging/lustre/lnet/libcfs/tracefile.c10
-rw-r--r--drivers/staging/lustre/lustre/llite/llite_lib.c4
-rw-r--r--drivers/staging/lustre/lustre/llite/namei.c3
-rw-r--r--drivers/staging/lustre/lustre/obdclass/kernelcomm.c7
-rw-r--r--drivers/target/target_core_alua.c3
-rw-r--r--drivers/target/target_core_file.c2
-rw-r--r--drivers/target/target_core_pr.c3
-rw-r--r--drivers/tty/serial/pch_uart.c2
-rw-r--r--drivers/usb/gadget/function/f_mass_storage.c21
-rw-r--r--drivers/video/backlight/kb3886_bl.c2
-rw-r--r--drivers/video/console/Kconfig2
-rw-r--r--drivers/video/console/Makefile8
-rw-r--r--drivers/video/console/vgacon.c5
-rw-r--r--drivers/video/fbdev/68328fb.c2
-rw-r--r--drivers/video/fbdev/Kconfig2
-rw-r--r--drivers/video/fbdev/amba-clcd.c2
-rw-r--r--drivers/video/fbdev/arkfb.c2
-rw-r--r--drivers/video/fbdev/asiliantfb.c2
-rw-r--r--drivers/video/fbdev/atmel_lcdfb.c2
-rw-r--r--drivers/video/fbdev/aty/aty128fb.c4
-rw-r--r--drivers/video/fbdev/aty/atyfb_base.c6
-rw-r--r--drivers/video/fbdev/aty/radeon_base.c6
-rw-r--r--drivers/video/fbdev/bfin-lq035q1-fb.c2
-rw-r--r--drivers/video/fbdev/bw2.c4
-rw-r--r--drivers/video/fbdev/cg14.c4
-rw-r--r--drivers/video/fbdev/cg3.c4
-rw-r--r--drivers/video/fbdev/cg6.c4
-rw-r--r--drivers/video/fbdev/chipsfb.c4
-rw-r--r--drivers/video/fbdev/cobalt_lcdfb.c2
-rw-r--r--drivers/video/fbdev/core/Makefile14
-rw-r--r--drivers/video/fbdev/core/bitblit.c (renamed from drivers/video/console/bitblit.c)8
-rw-r--r--drivers/video/fbdev/core/fbcon.c (renamed from drivers/video/console/fbcon.c)37
-rw-r--r--drivers/video/fbdev/core/fbcon.h (renamed from drivers/video/console/fbcon.h)9
-rw-r--r--drivers/video/fbdev/core/fbcon_ccw.c (renamed from drivers/video/console/fbcon_ccw.c)8
-rw-r--r--drivers/video/fbdev/core/fbcon_cw.c (renamed from drivers/video/console/fbcon_cw.c)8
-rw-r--r--drivers/video/fbdev/core/fbcon_dmi_quirks.c145
-rw-r--r--drivers/video/fbdev/core/fbcon_rotate.c (renamed from drivers/video/console/fbcon_rotate.c)4
-rw-r--r--drivers/video/fbdev/core/fbcon_rotate.h (renamed from drivers/video/console/fbcon_rotate.h)0
-rw-r--r--drivers/video/fbdev/core/fbcon_ud.c (renamed from drivers/video/console/fbcon_ud.c)8
-rw-r--r--drivers/video/fbdev/core/fbmem.c12
-rw-r--r--drivers/video/fbdev/core/fbmon.c4
-rw-r--r--drivers/video/fbdev/core/softcursor.c (renamed from drivers/video/console/softcursor.c)4
-rw-r--r--drivers/video/fbdev/core/tileblit.c (renamed from drivers/video/console/tileblit.c)7
-rw-r--r--drivers/video/fbdev/cyber2000fb.c2
-rw-r--r--drivers/video/fbdev/da8xx-fb.c2
-rw-r--r--drivers/video/fbdev/dnfb.c2
-rw-r--r--drivers/video/fbdev/fb-puv3.c2
-rw-r--r--drivers/video/fbdev/ffb.c4
-rw-r--r--drivers/video/fbdev/fm2fb.c2
-rw-r--r--drivers/video/fbdev/geode/gxfb_core.c2
-rw-r--r--drivers/video/fbdev/grvga.c2
-rw-r--r--drivers/video/fbdev/i810/i810_main.c4
-rw-r--r--drivers/video/fbdev/imsttfb.c2
-rw-r--r--drivers/video/fbdev/intelfb/intelfbdrv.c2
-rw-r--r--drivers/video/fbdev/kyro/fbdev.c2
-rw-r--r--drivers/video/fbdev/leo.c4
-rw-r--r--drivers/video/fbdev/matrox/matroxfb_base.c14
-rw-r--r--drivers/video/fbdev/maxinefb.c2
-rw-r--r--drivers/video/fbdev/mb862xx/mb862xxfbdrv.c2
-rw-r--r--drivers/video/fbdev/mbx/mbxfb.c4
-rw-r--r--drivers/video/fbdev/neofb.c2
-rw-r--r--drivers/video/fbdev/nvidia/nvidia.c2
-rw-r--r--drivers/video/fbdev/offb.c10
-rw-r--r--drivers/video/fbdev/omap/lcd_mipid.c2
-rw-r--r--drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c2
-rw-r--r--drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c2
-rw-r--r--drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td028ttec1.c2
-rw-r--r--drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c2
-rw-r--r--drivers/video/fbdev/omap2/omapfb/dss/dss-of.c3
-rw-r--r--drivers/video/fbdev/p9100.c4
-rw-r--r--drivers/video/fbdev/pm2fb.c2
-rw-r--r--drivers/video/fbdev/pm3fb.c2
-rw-r--r--drivers/video/fbdev/pmag-aa-fb.c4
-rw-r--r--drivers/video/fbdev/pmag-ba-fb.c4
-rw-r--r--drivers/video/fbdev/pmagb-b-fb.c4
-rw-r--r--drivers/video/fbdev/ps3fb.c2
-rw-r--r--drivers/video/fbdev/pvr2fb.c4
-rw-r--r--drivers/video/fbdev/pxa3xx-gcu.c4
-rw-r--r--drivers/video/fbdev/q40fb.c2
-rw-r--r--drivers/video/fbdev/riva/fbdev.c2
-rw-r--r--drivers/video/fbdev/s3fb.c2
-rw-r--r--drivers/video/fbdev/savage/savagefb_driver.c2
-rw-r--r--drivers/video/fbdev/sis/init301.c15
-rw-r--r--drivers/video/fbdev/skeletonfb.c4
-rw-r--r--drivers/video/fbdev/sm501fb.c2
-rw-r--r--drivers/video/fbdev/sm712fb.c17
-rw-r--r--drivers/video/fbdev/smscufx.c2
-rw-r--r--drivers/video/fbdev/sunxvr1000.c10
-rw-r--r--drivers/video/fbdev/sunxvr2500.c2
-rw-r--r--drivers/video/fbdev/sunxvr500.c2
-rw-r--r--drivers/video/fbdev/tcx.c4
-rw-r--r--drivers/video/fbdev/tdfxfb.c2
-rw-r--r--drivers/video/fbdev/tridentfb.c2
-rw-r--r--drivers/video/fbdev/udlfb.c5
-rw-r--r--drivers/video/fbdev/uvesafb.c2
-rw-r--r--drivers/video/fbdev/vermilion/vermilion.c4
-rw-r--r--drivers/video/fbdev/via/via-core.c2
-rw-r--r--drivers/video/fbdev/vt8623fb.c4
-rw-r--r--drivers/video/fbdev/xilinxfb.c62
-rw-r--r--drivers/video/of_display_timing.c41
-rw-r--r--drivers/video/of_videomode.c2
-rw-r--r--drivers/watchdog/asm9260_wdt.c4
-rw-r--r--drivers/watchdog/aspeed_wdt.c132
-rw-r--r--drivers/watchdog/bcm7038_wdt.c4
-rw-r--r--drivers/watchdog/cadence_wdt.c6
-rw-r--r--drivers/watchdog/coh901327_wdt.c2
-rw-r--r--drivers/watchdog/da9063_wdt.c67
-rw-r--r--drivers/watchdog/diag288_wdt.c2
-rw-r--r--drivers/watchdog/iTCO_wdt.c22
-rw-r--r--drivers/watchdog/it87_wdt.c2
-rw-r--r--drivers/watchdog/lantiq_wdt.c74
-rw-r--r--drivers/watchdog/max77620_wdt.c2
-rw-r--r--drivers/watchdog/mei_wdt.c2
-rw-r--r--drivers/watchdog/meson_wdt.c2
-rw-r--r--drivers/watchdog/mt7621_wdt.c4
-rw-r--r--drivers/watchdog/octeon-wdt-main.c354
-rw-r--r--drivers/watchdog/octeon-wdt-nmi.S42
-rw-r--r--drivers/watchdog/of_xilinx_wdt.c83
-rw-r--r--drivers/watchdog/pcwd_usb.c2
-rw-r--r--drivers/watchdog/qcom-wdt.c2
-rw-r--r--drivers/watchdog/renesas_wdt.c80
-rw-r--r--drivers/watchdog/rt2880_wdt.c4
-rw-r--r--drivers/watchdog/sc1200wdt.c2
-rw-r--r--drivers/watchdog/sp805_wdt.c2
-rw-r--r--drivers/watchdog/stm32_iwdg.c2
-rw-r--r--drivers/watchdog/ts72xx_wdt.c2
-rw-r--r--drivers/watchdog/w83627hf_wdt.c2
-rw-r--r--drivers/watchdog/ziirave_wdt.c2
-rw-r--r--drivers/watchdog/zx2967_wdt.c2
-rw-r--r--drivers/xen/gntalloc.c2
-rw-r--r--firmware/3com/typhoon.bin.ihex2819
-rw-r--r--firmware/Makefile179
-rw-r--r--firmware/README.AddingFirmware45
-rw-r--r--firmware/WHENCE854
-rw-r--r--firmware/acenic/tg1.bin.ihex4573
-rw-r--r--firmware/acenic/tg2.bin.ihex4844
-rw-r--r--firmware/adaptec/starfire_rx.bin.ihex53
-rw-r--r--firmware/adaptec/starfire_tx.bin.ihex53
-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/atmsar11.HEX204
-rw-r--r--firmware/av7110/Boot.S109
-rw-r--r--firmware/av7110/bootcode.bin.ihex15
-rw-r--r--firmware/bnx2/bnx2-mips-06-6.2.1.fw.ihex5818
-rw-r--r--firmware/bnx2/bnx2-mips-09-6.2.1a.fw.ihex6512
-rw-r--r--firmware/bnx2/bnx2-rv2p-06-6.0.15.fw.ihex366
-rw-r--r--firmware/bnx2/bnx2-rv2p-09-6.0.17.fw.ihex392
-rw-r--r--firmware/bnx2/bnx2-rv2p-09ax-6.0.17.fw.ihex425
-rw-r--r--firmware/bnx2x/bnx2x-e1-6.2.9.0.fw.ihex9484
-rw-r--r--firmware/bnx2x/bnx2x-e1h-6.2.9.0.fw.ihex13192
-rw-r--r--firmware/bnx2x/bnx2x-e2-6.2.9.0.fw.ihex15473
-rw-r--r--firmware/cis/.gitignore1
-rw-r--r--firmware/cis/3CCFEM556.cis.ihex13
-rw-r--r--firmware/cis/3CXEM556.cis.ihex13
-rw-r--r--firmware/cis/COMpad2.cis.ihex11
-rw-r--r--firmware/cis/COMpad4.cis.ihex9
-rw-r--r--firmware/cis/DP83903.cis.ihex14
-rw-r--r--firmware/cis/LA-PCM.cis.ihex20
-rw-r--r--firmware/cis/MT5634ZLX.cis.ihex11
-rw-r--r--firmware/cis/NE2K.cis.ihex8
-rw-r--r--firmware/cis/PCMLM28.cis.ihex18
-rw-r--r--firmware/cis/PE-200.cis.ihex9
-rw-r--r--firmware/cis/PE520.cis.ihex9
-rw-r--r--firmware/cis/RS-COM-2P.cis.ihex10
-rw-r--r--firmware/cis/SW_555_SER.cis.ihex12
-rw-r--r--firmware/cis/SW_7xx_SER.cis.ihex13
-rw-r--r--firmware/cis/SW_8xx_SER.cis.ihex13
-rw-r--r--firmware/cis/tamarack.cis.ihex10
-rw-r--r--firmware/cpia2/stv0672_vp4.bin.ihex73
-rw-r--r--firmware/cxgb3/ael2005_opt_edc.bin.ihex69
-rw-r--r--firmware/cxgb3/ael2005_twx_edc.bin.ihex93
-rw-r--r--firmware/cxgb3/ael2020_twx_edc.bin.ihex100
-rw-r--r--firmware/cxgb3/t3b_psram-1.1.0.bin.ihex162
-rw-r--r--firmware/cxgb3/t3c_psram-1.1.0.bin.ihex162
-rw-r--r--firmware/dsp56k/bootstrap.asm98
-rw-r--r--firmware/dsp56k/bootstrap.bin.ihex26
-rw-r--r--firmware/e100/d101m_ucode.bin.ihex38
-rw-r--r--firmware/e100/d101s_ucode.bin.ihex38
-rw-r--r--firmware/e100/d102e_ucode.bin.ihex38
-rw-r--r--firmware/edgeport/boot.H1629
-rw-r--r--firmware/edgeport/boot2.H1628
-rw-r--r--firmware/edgeport/down.H1629
-rw-r--r--firmware/edgeport/down2.H1629
-rw-r--r--firmware/edgeport/down3.bin.ihex815
-rw-r--r--firmware/emi26/bitstream.HEX4391
-rw-r--r--firmware/emi26/firmware.HEX1261
-rw-r--r--firmware/emi26/loader.HEX116
-rw-r--r--firmware/emi62/bitstream.HEX6107
-rw-r--r--firmware/emi62/loader.HEX107
-rw-r--r--firmware/emi62/midi.HEX1266
-rw-r--r--firmware/emi62/spdif.HEX1257
-rw-r--r--firmware/ess/maestro3_assp_kernel.fw.ihex120
-rw-r--r--firmware/ess/maestro3_assp_minisrc.fw.ihex51
-rw-r--r--firmware/ihex2fw.c281
-rw-r--r--firmware/kaweth/new_code.bin.ihex206
-rw-r--r--firmware/kaweth/new_code_fix.bin.ihex40
-rw-r--r--firmware/kaweth/trigger_code.bin.ihex13
-rw-r--r--firmware/kaweth/trigger_code_fix.bin.ihex3
-rw-r--r--firmware/keyspan/mpr.HEX104
-rw-r--r--firmware/keyspan/usa18x.HEX141
-rw-r--r--firmware/keyspan/usa19.HEX101
-rw-r--r--firmware/keyspan/usa19qi.HEX101
-rw-r--r--firmware/keyspan/usa19qw.HEX142
-rw-r--r--firmware/keyspan/usa19w.HEX141
-rw-r--r--firmware/keyspan/usa28.HEX148
-rw-r--r--firmware/keyspan/usa28x.HEX141
-rw-r--r--firmware/keyspan/usa28xa.HEX141
-rw-r--r--firmware/keyspan/usa28xb.HEX142
-rw-r--r--firmware/keyspan/usa49w.HEX145
-rw-r--r--firmware/keyspan/usa49wlc.HEX153
-rw-r--r--firmware/keyspan_pda/keyspan_pda.HEX83
-rw-r--r--firmware/keyspan_pda/keyspan_pda.S1124
-rw-r--r--firmware/keyspan_pda/xircom_pgs.HEX87
-rw-r--r--firmware/keyspan_pda/xircom_pgs.S1192
-rw-r--r--firmware/korg/k1212.dsp.ihex987
-rw-r--r--firmware/matrox/g200_warp.H1628
-rw-r--r--firmware/matrox/g400_warp.H1644
-rw-r--r--firmware/mts_cdma.fw.ihex867
-rw-r--r--firmware/mts_edge.fw.ihex881
-rw-r--r--firmware/mts_gsm.fw.ihex867
-rw-r--r--firmware/myricom/lanai.bin.ihex4771
-rw-r--r--firmware/ositech/Xilinx7OD.bin.ihex177
-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--firmware/qlogic/sd7220.fw.ihex513
-rw-r--r--firmware/r128/r128_cce.bin.ihex129
-rw-r--r--firmware/radeon/R100_cp.bin.ihex130
-rw-r--r--firmware/radeon/R200_cp.bin.ihex130
-rw-r--r--firmware/radeon/R300_cp.bin.ihex130
-rw-r--r--firmware/radeon/R420_cp.bin.ihex130
-rw-r--r--firmware/radeon/R520_cp.bin.ihex130
-rw-r--r--firmware/radeon/R600_me.bin.ihex1345
-rw-r--r--firmware/radeon/R600_pfp.bin.ihex145
-rw-r--r--firmware/radeon/RS600_cp.bin.ihex130
-rw-r--r--firmware/radeon/RS690_cp.bin.ihex130
-rw-r--r--firmware/radeon/RS780_me.bin.ihex1345
-rw-r--r--firmware/radeon/RS780_pfp.bin.ihex145
-rw-r--r--firmware/radeon/RV610_me.bin.ihex1345
-rw-r--r--firmware/radeon/RV610_pfp.bin.ihex145
-rw-r--r--firmware/radeon/RV620_me.bin.ihex1345
-rw-r--r--firmware/radeon/RV620_pfp.bin.ihex145
-rw-r--r--firmware/radeon/RV630_me.bin.ihex1345
-rw-r--r--firmware/radeon/RV630_pfp.bin.ihex145
-rw-r--r--firmware/radeon/RV635_me.bin.ihex1345
-rw-r--r--firmware/radeon/RV635_pfp.bin.ihex145
-rw-r--r--firmware/radeon/RV670_me.bin.ihex1345
-rw-r--r--firmware/radeon/RV670_pfp.bin.ihex145
-rw-r--r--firmware/radeon/RV710_me.bin.ihex341
-rw-r--r--firmware/radeon/RV710_pfp.bin.ihex213
-rw-r--r--firmware/radeon/RV730_me.bin.ihex341
-rw-r--r--firmware/radeon/RV730_pfp.bin.ihex213
-rw-r--r--firmware/radeon/RV770_me.bin.ihex341
-rw-r--r--firmware/radeon/RV770_pfp.bin.ihex213
-rw-r--r--firmware/sb16/alaw_main.csp.ihex87
-rw-r--r--firmware/sb16/ima_adpcm_capture.csp.ihex121
-rw-r--r--firmware/sb16/ima_adpcm_init.csp.ihex70
-rw-r--r--firmware/sb16/ima_adpcm_playback.csp.ihex122
-rw-r--r--firmware/sb16/mulaw_main.csp.ihex84
-rw-r--r--firmware/sun/cassini.bin.ihex143
-rw-r--r--firmware/tehuti/bdx.bin.ihex2678
-rw-r--r--firmware/ti_3410.fw.ihex862
-rw-r--r--firmware/ti_5052.fw.ihex862
-rw-r--r--firmware/tigon/tg3.bin.ihex175
-rw-r--r--firmware/tigon/tg3_tso.bin.ihex446
-rw-r--r--firmware/tigon/tg3_tso5.bin.ihex252
-rw-r--r--firmware/ttusb-budget/dspbootcode.bin.ihex820
-rw-r--r--firmware/vicam/firmware.H167
-rw-r--r--firmware/whiteheat.HEX1097
-rw-r--r--firmware/whiteheat_loader.HEX314
-rw-r--r--firmware/whiteheat_loader_debug.HEX403
-rw-r--r--firmware/yam/1200.bin.ihex342
-rw-r--r--firmware/yam/9600.bin.ihex342
-rw-r--r--firmware/yamaha/ds1_ctrl.fw.ihex769
-rw-r--r--firmware/yamaha/ds1_dsp.fw.ihex9
-rw-r--r--firmware/yamaha/ds1e_ctrl.fw.ihex769
-rw-r--r--firmware/yamaha/yss225_registers.bin.ihex998
-rw-r--r--fs/affs/amigaffs.c2
-rw-r--r--fs/affs/bitmap.c2
-rw-r--r--fs/affs/super.c6
-rw-r--r--fs/aio.c6
-rw-r--r--fs/autofs4/waitq.c9
-rw-r--r--fs/befs/linuxvfs.c2
-rw-r--r--fs/binfmt_aout.c3
-rw-r--r--fs/binfmt_elf.c23
-rw-r--r--fs/binfmt_elf_fdpic.c17
-rw-r--r--fs/binfmt_flat.c18
-rw-r--r--fs/binfmt_misc.c5
-rw-r--r--fs/block_dev.c5
-rw-r--r--fs/btrfs/Kconfig2
-rw-r--r--fs/btrfs/Makefile2
-rw-r--r--fs/btrfs/compression.c1
-rw-r--r--fs/btrfs/compression.h4
-rw-r--r--fs/btrfs/ctree.h1
-rw-r--r--fs/btrfs/dev-replace.c2
-rw-r--r--fs/btrfs/disk-io.c14
-rw-r--r--fs/btrfs/extent_io.c4
-rw-r--r--fs/btrfs/file.c6
-rw-r--r--fs/btrfs/inode.c2
-rw-r--r--fs/btrfs/ioctl.c8
-rw-r--r--fs/btrfs/props.c6
-rw-r--r--fs/btrfs/root-tree.c2
-rw-r--r--fs/btrfs/send.c18
-rw-r--r--fs/btrfs/super.c23
-rw-r--r--fs/btrfs/sysfs.c6
-rw-r--r--fs/btrfs/volumes.c4
-rw-r--r--fs/btrfs/zstd.c432
-rw-r--r--fs/cachefiles/bind.c2
-rw-r--r--fs/ceph/addr.c403
-rw-r--r--fs/ceph/cache.c2
-rw-r--r--fs/ceph/caps.c40
-rw-r--r--fs/ceph/debugfs.c2
-rw-r--r--fs/ceph/dir.c6
-rw-r--r--fs/ceph/file.c50
-rw-r--r--fs/ceph/inode.c53
-rw-r--r--fs/ceph/mds_client.c37
-rw-r--r--fs/ceph/mdsmap.c6
-rw-r--r--fs/ceph/snap.c37
-rw-r--r--fs/ceph/super.c78
-rw-r--r--fs/ceph/super.h16
-rw-r--r--fs/ceph/xattr.c8
-rw-r--r--fs/coda/dir.c5
-rw-r--r--fs/coredump.c2
-rw-r--r--fs/dax.c4
-rw-r--r--fs/ecryptfs/main.c3
-rw-r--r--fs/ecryptfs/read_write.c4
-rw-r--r--fs/efs/super.c2
-rw-r--r--fs/exec.c30
-rw-r--r--fs/ext2/super.c13
-rw-r--r--fs/ext4/ext4_jbd2.c2
-rw-r--r--fs/ext4/file.c8
-rw-r--r--fs/ext4/fsync.c2
-rw-r--r--fs/ext4/ialloc.c2
-rw-r--r--fs/ext4/mmp.c2
-rw-r--r--fs/ext4/super.c53
-rw-r--r--fs/f2fs/acl.c5
-rw-r--r--fs/f2fs/checkpoint.c60
-rw-r--r--fs/f2fs/data.c177
-rw-r--r--fs/f2fs/dir.c7
-rw-r--r--fs/f2fs/f2fs.h285
-rw-r--r--fs/f2fs/file.c360
-rw-r--r--fs/f2fs/gc.c115
-rw-r--r--fs/f2fs/gc.h27
-rw-r--r--fs/f2fs/inline.c142
-rw-r--r--fs/f2fs/inode.c132
-rw-r--r--fs/f2fs/namei.c43
-rw-r--r--fs/f2fs/node.c79
-rw-r--r--fs/f2fs/recovery.c83
-rw-r--r--fs/f2fs/segment.c292
-rw-r--r--fs/f2fs/segment.h47
-rw-r--r--fs/f2fs/super.c433
-rw-r--r--fs/f2fs/sysfs.c251
-rw-r--r--fs/f2fs/xattr.c8
-rw-r--r--fs/fat/fatent.c2
-rw-r--r--fs/fat/inode.c4
-rw-r--r--fs/fat/misc.c2
-rw-r--r--fs/file_table.c12
-rw-r--r--fs/fscache/object-list.c3
-rw-r--r--fs/fuse/cuse.c4
-rw-r--r--fs/fuse/dev.c13
-rw-r--r--fs/fuse/dir.c30
-rw-r--r--fs/fuse/file.c52
-rw-r--r--fs/fuse/fuse_i.h8
-rw-r--r--fs/gfs2/glops.c2
-rw-r--r--fs/gfs2/ops_fstype.c4
-rw-r--r--fs/gfs2/quota.c2
-rw-r--r--fs/gfs2/recovery.c2
-rw-r--r--fs/gfs2/super.c4
-rw-r--r--fs/gfs2/sys.c2
-rw-r--r--fs/hfs/mdb.c6
-rw-r--r--fs/hfs/super.c4
-rw-r--r--fs/hfsplus/super.c10
-rw-r--r--fs/hpfs/alloc.c4
-rw-r--r--fs/hpfs/dir.c2
-rw-r--r--fs/hpfs/super.c13
-rw-r--r--fs/inode.c21
-rw-r--r--fs/internal.h2
-rw-r--r--fs/isofs/inode.c2
-rw-r--r--fs/jffs2/fs.c6
-rw-r--r--fs/jffs2/super.c2
-rw-r--r--fs/jffs2/wbuf.c4
-rw-r--r--fs/jfs/jfs_mount.c2
-rw-r--r--fs/jfs/super.c16
-rw-r--r--fs/minix/inode.c6
-rw-r--r--fs/namei.c3
-rw-r--r--fs/namespace.c134
-rw-r--r--fs/nfs/file.c16
-rw-r--r--fs/nfs/internal.h7
-rw-r--r--fs/nfs/nfstrace.h248
-rw-r--r--fs/nfs/pagelist.c4
-rw-r--r--fs/nfs/pnfs.c14
-rw-r--r--fs/nfs/read.c4
-rw-r--r--fs/nfs/super.c2
-rw-r--r--fs/nfs/write.c14
-rw-r--r--fs/nilfs2/inode.c4
-rw-r--r--fs/nilfs2/mdt.c2
-rw-r--r--fs/nilfs2/super.c19
-rw-r--r--fs/ntfs/super.c31
-rw-r--r--fs/ocfs2/super.c15
-rw-r--r--fs/open.c8
-rw-r--r--fs/orangefs/acl.c63
-rw-r--r--fs/orangefs/devorangefs-req.c9
-rw-r--r--fs/orangefs/file.c5
-rw-r--r--fs/orangefs/orangefs-bufmap.c10
-rw-r--r--fs/orangefs/orangefs-debugfs.c5
-rw-r--r--fs/orangefs/orangefs-mod.c1
-rw-r--r--fs/orangefs/super.c4
-rw-r--r--fs/orangefs/xattr.c12
-rw-r--r--fs/overlayfs/copy_up.c2
-rw-r--r--fs/overlayfs/dir.c13
-rw-r--r--fs/overlayfs/inode.c14
-rw-r--r--fs/overlayfs/namei.c12
-rw-r--r--fs/overlayfs/overlayfs.h8
-rw-r--r--fs/overlayfs/readdir.c383
-rw-r--r--fs/overlayfs/super.c13
-rw-r--r--fs/overlayfs/util.c24
-rw-r--r--fs/proc/array.c9
-rw-r--r--fs/proc/base.c8
-rw-r--r--fs/proc/task_mmu.c2
-rw-r--r--fs/proc/task_nommu.c1
-rw-r--r--fs/proc_namespace.c2
-rw-r--r--fs/quota/quota.c2
-rw-r--r--fs/read_write.c43
-rw-r--r--fs/reiserfs/inode.c2
-rw-r--r--fs/reiserfs/journal.c2
-rw-r--r--fs/reiserfs/prints.c2
-rw-r--r--fs/reiserfs/super.c18
-rw-r--r--fs/splice.c16
-rw-r--r--fs/squashfs/Kconfig14
-rw-r--r--fs/squashfs/Makefile1
-rw-r--r--fs/squashfs/decompressor.c7
-rw-r--r--fs/squashfs/decompressor.h4
-rw-r--r--fs/squashfs/squashfs_fs.h1
-rw-r--r--fs/squashfs/zstd_wrapper.c151
-rw-r--r--fs/super.c74
-rw-r--r--fs/sync.c6
-rw-r--r--fs/sysv/balloc.c2
-rw-r--r--fs/sysv/ialloc.c2
-rw-r--r--fs/sysv/inode.c2
-rw-r--r--fs/sysv/super.c2
-rw-r--r--fs/ubifs/super.c2
-rw-r--r--fs/udf/super.c14
-rw-r--r--fs/ufs/super.c24
-rw-r--r--fs/utimes.c23
-rw-r--r--fs/xattr.c9
-rw-r--r--fs/xfs/xfs_file.c11
-rw-r--r--fs/xfs/xfs_linux.h9
-rw-r--r--fs/xfs/xfs_quotaops.c10
-rw-r--r--fs/xfs/xfs_super.c2
-rw-r--r--include/asm-generic/uaccess.h8
-rw-r--r--include/dt-bindings/clock/qcom,gcc-msm8996.h2
-rw-r--r--include/dt-bindings/clock/r8a77995-cpg-mssr.h57
-rw-r--r--include/dt-bindings/clock/rk3228-cru.h1
-rw-r--r--include/dt-bindings/clock/rv1108-cru.h8
-rw-r--r--include/dt-bindings/clock/stm32h7-clks.h165
-rw-r--r--include/dt-bindings/clock/sun4i-a10-ccu.h200
-rw-r--r--include/dt-bindings/clock/sun7i-a20-ccu.h53
-rw-r--r--include/dt-bindings/clock/sun8i-r40-ccu.h187
-rw-r--r--include/dt-bindings/mfd/stm32h7-rcc.h136
-rw-r--r--include/dt-bindings/mips/lantiq_rcu_gphy.h15
-rw-r--r--include/dt-bindings/reset/sun4i-a10-ccu.h69
-rw-r--r--include/dt-bindings/reset/sun8i-r40-ccu.h130
-rw-r--r--include/linux/audit.h6
-rw-r--r--include/linux/ceph/ceph_fs.h6
-rw-r--r--include/linux/ceph/libceph.h11
-rw-r--r--include/linux/ceph/mon_client.h4
-rw-r--r--include/linux/ceph/rados.h1
-rw-r--r--include/linux/clk-provider.h4
-rw-r--r--include/linux/clk/at91_pmc.h25
-rw-r--r--include/linux/compat.h9
-rw-r--r--include/linux/dax.h5
-rw-r--r--include/linux/dcache.h14
-rw-r--r--include/linux/device-mapper.h7
-rw-r--r--include/linux/f2fs_fs.h40
-rw-r--r--include/linux/fb.h10
-rw-r--r--include/linux/fbcon.h12
-rw-r--r--include/linux/fs.h67
-rw-r--r--include/linux/gfp.h2
-rw-r--r--include/linux/irqchip/mips-gic.h297
-rw-r--r--include/linux/module.h2
-rw-r--r--include/linux/msg.h15
-rw-r--r--include/linux/nvme.h4
-rw-r--r--include/linux/rtc.h2
-rw-r--r--include/linux/sem.h3
-rw-r--r--include/linux/shm.h6
-rw-r--r--include/linux/string.h15
-rw-r--r--include/linux/swait.h58
-rw-r--r--include/linux/syscalls.h2
-rw-r--r--include/linux/time.h2
-rw-r--r--include/linux/wait.h3
-rw-r--r--include/linux/xxhash.h236
-rw-r--r--include/linux/zstd.h1157
-rw-r--r--include/net/act_api.h2
-rw-r--r--include/net/sctp/sctp.h3
-rw-r--r--include/net/sctp/ulpevent.h6
-rw-r--r--include/scsi/scsi_host.h6
-rw-r--r--include/trace/events/block.h5
-rw-r--r--include/trace/events/f2fs.h113
-rw-r--r--include/trace/events/kvm.h4
-rw-r--r--include/trace/events/mmflags.h1
-rw-r--r--include/trace/events/xdp.h4
-rw-r--r--include/uapi/linux/btrfs.h8
-rw-r--r--init/do_mounts.c6
-rw-r--r--init/initramfs.c2
-rw-r--r--ipc/compat.c740
-rw-r--r--ipc/mqueue.c28
-rw-r--r--ipc/msg.c366
-rw-r--r--ipc/sem.c344
-rw-r--r--ipc/shm.c533
-rw-r--r--ipc/syscall.c90
-rw-r--r--ipc/util.h30
-rw-r--r--kernel/acct.c2
-rw-r--r--kernel/audit.h2
-rw-r--r--kernel/auditsc.c12
-rw-r--r--kernel/bpf/verifier.c3
-rw-r--r--kernel/compat.c23
-rw-r--r--kernel/irq/chip.c2
-rw-r--r--kernel/locking/test-ww_mutex.c2
-rw-r--r--kernel/module.c12
-rw-r--r--kernel/sched/core.c4
-rw-r--r--kernel/sched/debug.c5
-rw-r--r--kernel/sched/fair.c13
-rw-r--r--kernel/sched/sched.h2
-rw-r--r--kernel/sched/topology.c4
-rw-r--r--kernel/sched/wait.c85
-rw-r--r--kernel/sysctl_binary.c21
-rw-r--r--kernel/trace/trace_events_filter.c2
-rw-r--r--kernel/trace/trace_syscalls.c2
-rw-r--r--lib/Kconfig11
-rw-r--r--lib/Makefile3
-rw-r--r--lib/idr.c2
-rw-r--r--lib/string_helpers.c4
-rw-r--r--lib/test_bitmap.c8
-rw-r--r--lib/xxhash.c500
-rw-r--r--lib/zstd/Makefile18
-rw-r--r--lib/zstd/bitstream.h374
-rw-r--r--lib/zstd/compress.c3484
-rw-r--r--lib/zstd/decompress.c2528
-rw-r--r--lib/zstd/entropy_common.c243
-rw-r--r--lib/zstd/error_private.h53
-rw-r--r--lib/zstd/fse.h575
-rw-r--r--lib/zstd/fse_compress.c795
-rw-r--r--lib/zstd/fse_decompress.c332
-rw-r--r--lib/zstd/huf.h212
-rw-r--r--lib/zstd/huf_compress.c770
-rw-r--r--lib/zstd/huf_decompress.c960
-rw-r--r--lib/zstd/mem.h151
-rw-r--r--lib/zstd/zstd_common.c75
-rw-r--r--lib/zstd/zstd_internal.h263
-rw-r--r--lib/zstd/zstd_opt.h1014
-rw-r--r--mm/backing-dev.c6
-rw-r--r--mm/filemap.c46
-rw-r--r--mm/nommu.c7
-rw-r--r--mm/page_owner.c2
-rw-r--r--mm/shmem.c2
-rw-r--r--mm/slub.c2
-rw-r--r--net/9p/trans_fd.c14
-rw-r--r--net/ceph/mon_client.c6
-rw-r--r--net/ceph/osd_client.c5
-rw-r--r--net/core/filter.c38
-rw-r--r--net/core/gen_estimator.c4
-rw-r--r--net/ipv4/inet_connection_sock.c2
-rw-r--r--net/ipv4/ip_sockglue.c8
-rw-r--r--net/ipv4/ip_tunnel.c2
-rw-r--r--net/ipv4/tcp_output.c24
-rw-r--r--net/ipv6/ip6_tunnel.c2
-rw-r--r--net/ipv6/seg6_local.c4
-rw-r--r--net/openvswitch/datapath.c3
-rw-r--r--net/sched/act_api.c23
-rw-r--r--net/sched/cls_api.c63
-rw-r--r--net/sched/cls_rsvp.h2
-rw-r--r--net/sctp/sctp_diag.c33
-rw-r--r--net/sctp/socket.c40
-rw-r--r--net/tls/tls_sw.c2
-rw-r--r--scripts/Makefile.extrawarn1
-rw-r--r--scripts/Makefile.fwinst70
-rw-r--r--scripts/gdb/linux/Makefile2
-rw-r--r--scripts/mod/modpost.c29
-rwxr-xr-xscripts/package/buildtar36
-rwxr-xr-xscripts/sphinx-pre-install1
-rw-r--r--security/keys/big_key.c6
-rw-r--r--sound/core/device.c4
-rw-r--r--sound/core/seq_device.c3
-rw-r--r--sound/firewire/motu/motu-stream.c16
-rw-r--r--sound/oss/sound_firmware.h2
-rw-r--r--sound/pci/asihpi/asihpi.c6
-rw-r--r--sound/pci/maestro3.c57
-rw-r--r--sound/pci/rme9652/hdsp.c26
-rw-r--r--sound/pci/rme9652/hdspm.c16
-rw-r--r--sound/pci/ymfpci/ymfpci.c62
-rw-r--r--sound/pci/ymfpci/ymfpci_main.c41
-rw-r--r--sound/soc/atmel/atmel-classd.c47
-rw-r--r--sound/soc/codecs/rt5645.c2
-rw-r--r--sound/usb/6fire/chip.c31
-rw-r--r--sound/usb/usx2y/us122l.c10
-rw-r--r--sound/usb/usx2y/usb_stream.c18
-rw-r--r--tools/include/linux/compiler-gcc.h9
-rw-r--r--tools/lib/api/Makefile8
-rw-r--r--tools/objtool/elf.c33
-rw-r--r--tools/perf/builtin-config.c2
-rw-r--r--tools/perf/builtin-kmem.c1
-rw-r--r--tools/perf/builtin-stat.c2
-rw-r--r--tools/perf/perf.c14
-rw-r--r--tools/perf/tests/dwarf-unwind.c2
-rw-r--r--tools/perf/ui/progress.c9
-rw-r--r--tools/perf/util/data.c13
-rw-r--r--tools/power/cpupower/Makefile2
-rw-r--r--tools/scripts/Makefile.include6
-rw-r--r--tools/testing/selftests/bpf/test_verifier.c16
-rw-r--r--virt/kvm/async_pf.c6
-rw-r--r--virt/kvm/eventfd.c2
-rw-r--r--virt/kvm/kvm_main.c3
1226 files changed, 41224 insertions, 138957 deletions
diff --git a/Documentation/ABI/testing/sysfs-fs-f2fs b/Documentation/ABI/testing/sysfs-fs-f2fs
index 84c606fb3ca4..11b7f4ebea7c 100644
--- a/Documentation/ABI/testing/sysfs-fs-f2fs
+++ b/Documentation/ABI/testing/sysfs-fs-f2fs
@@ -57,6 +57,15 @@ Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com>
Description:
Controls the issue rate of small discard commands.
+What: /sys/fs/f2fs/<disk>/discard_granularity
+Date: July 2017
+Contact: "Chao Yu" <yuchao0@huawei.com>
+Description:
+ Controls discard granularity of inner discard thread, inner thread
+ will not issue discards with size that is smaller than granularity.
+ The unit size is one block, now only support configuring in range
+ of [1, 512].
+
What: /sys/fs/f2fs/<disk>/max_victim_search
Date: January 2014
Contact: "Jaegeuk Kim" <jaegeuk.kim@samsung.com>
@@ -130,3 +139,15 @@ Date: June 2017
Contact: "Chao Yu" <yuchao0@huawei.com>
Description:
Controls current reserved blocks in system.
+
+What: /sys/fs/f2fs/<disk>/gc_urgent
+Date: August 2017
+Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:
+ Do background GC agressively
+
+What: /sys/fs/f2fs/<disk>/gc_urgent_sleep_time
+Date: August 2017
+Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
+Description:
+ Controls sleep time of GC urgent mode
diff --git a/Documentation/conf.py b/Documentation/conf.py
index f9054ab60cb1..63857d33778c 100644
--- a/Documentation/conf.py
+++ b/Documentation/conf.py
@@ -271,10 +271,29 @@ latex_elements = {
# Additional stuff for the LaTeX preamble.
'preamble': '''
- \\usepackage{ifthen}
+ % Use some font with UTF-8 support with XeLaTeX
+ \\usepackage{fontspec}
+ \\setsansfont{DejaVu Serif}
+ \\setromanfont{DejaVu Sans}
+ \\setmonofont{DejaVu Sans Mono}
+
+ '''
+}
+
+# Fix reference escape troubles with Sphinx 1.4.x
+if major == 1 and minor > 3:
+ latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n'
+
+if major == 1 and minor <= 4:
+ latex_elements['preamble'] += '\\usepackage[margin=0.5in, top=1in, bottom=1in]{geometry}'
+elif major == 1 and (minor > 5 or (minor == 5 and patch >= 3)):
+ latex_elements['sphinxsetup'] = 'hmargin=0.5in, vmargin=1in'
+ latex_elements['preamble'] += '\\fvset{fontsize=auto}\n'
- % Allow generate some pages in landscape
- \\usepackage{lscape}
+# Customize notice background colors on Sphinx < 1.6:
+if major == 1 and minor < 6:
+ latex_elements['preamble'] += '''
+ \\usepackage{ifthen}
% Put notes in color and let them be inside a table
\\definecolor{NoteColor}{RGB}{204,255,255}
@@ -325,27 +344,26 @@ latex_elements = {
}
\\makeatother
- % Use some font with UTF-8 support with XeLaTeX
- \\usepackage{fontspec}
- \\setsansfont{DejaVu Serif}
- \\setromanfont{DejaVu Sans}
- \\setmonofont{DejaVu Sans Mono}
-
- % To allow adjusting table sizes
- \\usepackage{adjustbox}
-
'''
-}
-
-# Fix reference escape troubles with Sphinx 1.4.x
-if major == 1 and minor > 3:
- latex_elements['preamble'] += '\\renewcommand*{\\DUrole}[2]{ #2 }\n'
-if major == 1 and minor <= 4:
- latex_elements['preamble'] += '\\usepackage[margin=0.5in, top=1in, bottom=1in]{geometry}'
-elif major == 1 and (minor > 5 or (minor == 5 and patch >= 3)):
- latex_elements['sphinxsetup'] = 'hmargin=0.5in, vmargin=1in'
- latex_elements['preamble'] += '\\fvset{fontsize=auto}\n'
+# With Sphinx 1.6, it is possible to change the Bg color directly
+# by using:
+# \definecolor{sphinxnoteBgColor}{RGB}{204,255,255}
+# \definecolor{sphinxwarningBgColor}{RGB}{255,204,204}
+# \definecolor{sphinxattentionBgColor}{RGB}{255,255,204}
+# \definecolor{sphinximportantBgColor}{RGB}{192,255,204}
+#
+# However, it require to use sphinx heavy box with:
+#
+# \renewenvironment{sphinxlightbox} {%
+# \\begin{sphinxheavybox}
+# }
+# \\end{sphinxheavybox}
+# }
+#
+# Unfortunately, the implementation is buggy: if a note is inside a
+# table, it isn't displayed well. So, for now, let's use boring
+# black and white notes.
# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title,
diff --git a/Documentation/devicetree/bindings/clock/amlogic,gxbb-aoclkc.txt b/Documentation/devicetree/bindings/clock/amlogic,gxbb-aoclkc.txt
index faa6d8ac5834..786dc39ca904 100644
--- a/Documentation/devicetree/bindings/clock/amlogic,gxbb-aoclkc.txt
+++ b/Documentation/devicetree/bindings/clock/amlogic,gxbb-aoclkc.txt
@@ -5,9 +5,11 @@ controllers within the Always-On part of the SoC.
Required Properties:
-- compatible: should be "amlogic,gxbb-aoclkc"
-- reg: physical base address of the clock controller and length of memory
- mapped region.
+- compatible: value should be different for each SoC family as :
+ - GXBB (S905) : "amlogic,meson-gxbb-aoclkc"
+ - GXL (S905X, S905D) : "amlogic,meson-gxl-aoclkc"
+ - GXM (S912) : "amlogic,meson-gxm-aoclkc"
+ followed by the common "amlogic,meson-gx-aoclkc"
- #clock-cells: should be 1.
@@ -23,14 +25,22 @@ to specify the reset which they consume. All available resets are defined as
preprocessor macros in the dt-bindings/reset/gxbb-aoclkc.h header and can be
used in device tree sources.
+Parent node should have the following properties :
+- compatible: "amlogic,meson-gx-ao-sysctrl", "syscon", "simple-mfd"
+- reg: base address and size of the AO system control register space.
+
Example: AO Clock controller node:
- clkc_AO: clock-controller@040 {
- compatible = "amlogic,gxbb-aoclkc";
- reg = <0x0 0x040 0x0 0x4>;
+ao_sysctrl: sys-ctrl@0 {
+ compatible = "amlogic,meson-gx-ao-sysctrl", "syscon", "simple-mfd";
+ reg = <0x0 0x0 0x0 0x100>;
+
+ clkc_AO: clock-controller {
+ compatible = "amlogic,meson-gxbb-aoclkc", "amlogic,meson-gx-aoclkc";
#clock-cells = <1>;
#reset-cells = <1>;
};
+};
Example: UART controller node that consumes the clock and reset generated
by the clock controller:
diff --git a/Documentation/devicetree/bindings/clock/at91-clock.txt b/Documentation/devicetree/bindings/clock/at91-clock.txt
index 5f3ad65daf69..51c259a92d02 100644
--- a/Documentation/devicetree/bindings/clock/at91-clock.txt
+++ b/Documentation/devicetree/bindings/clock/at91-clock.txt
@@ -81,6 +81,16 @@ Required properties:
"atmel,sama5d2-clk-generated":
at91 generated clock
+ "atmel,sama5d2-clk-audio-pll-frac":
+ at91 audio fractional pll
+
+ "atmel,sama5d2-clk-audio-pll-pad":
+ at91 audio pll CLK_AUDIO output pin
+
+ "atmel,sama5d2-clk-audio-pll-pmc"
+ at91 audio pll output on AUDIOPLLCLK that feeds the PMC
+ and can be used by peripheral clock or generic clock
+
Required properties for SCKC node:
- reg : defines the IO memory reserved for the SCKC.
- #size-cells : shall be 0 (reg is used to encode clk id).
diff --git a/Documentation/devicetree/bindings/clock/idt,versaclock5.txt b/Documentation/devicetree/bindings/clock/idt,versaclock5.txt
index 53d7e50ed875..05a245c9df08 100644
--- a/Documentation/devicetree/bindings/clock/idt,versaclock5.txt
+++ b/Documentation/devicetree/bindings/clock/idt,versaclock5.txt
@@ -1,24 +1,32 @@
-Binding for IDT VersaClock5 programmable i2c clock generator.
+Binding for IDT VersaClock 5,6 programmable i2c clock generators.
-The IDT VersaClock5 are programmable i2c clock generators providing
-from 3 to 12 output clocks.
+The IDT VersaClock 5 and VersaClock 6 are programmable i2c clock
+generators providing from 3 to 12 output clocks.
==I2C device node==
Required properties:
-- compatible: shall be one of "idt,5p49v5923" , "idt,5p49v5933" ,
- "idt,5p49v5935".
+- compatible: shall be one of
+ "idt,5p49v5923"
+ "idt,5p49v5925"
+ "idt,5p49v5933"
+ "idt,5p49v5935"
+ "idt,5p49v6901"
- reg: i2c device address, shall be 0x68 or 0x6a.
- #clock-cells: from common clock binding; shall be set to 1.
- clocks: from common clock binding; list of parent clock handles,
- - 5p49v5923: (required) either or both of XTAL or CLKIN
+ - 5p49v5923 and
+ 5p49v5925 and
+ 5p49v6901: (required) either or both of XTAL or CLKIN
reference clock.
- 5p49v5933 and
- 5p49v5935: (optional) property not present (internal
Xtal used) or CLKIN reference
clock.
- clock-names: from common clock binding; clock input names, can be
- - 5p49v5923: (required) either or both of "xin", "clkin".
+ - 5p49v5923 and
+ 5p49v5925 and
+ 5p49v6901: (required) either or both of "xin", "clkin".
- 5p49v5933 and
- 5p49v5935: (optional) property not present or "clkin".
@@ -37,6 +45,7 @@ clock specifier, the following mapping applies:
1 -- OUT1
2 -- OUT4
+5P49V5925 and
5P49V5935:
0 -- OUT0_SEL_I2CB
1 -- OUT1
@@ -44,6 +53,13 @@ clock specifier, the following mapping applies:
3 -- OUT3
4 -- OUT4
+5P49V6901:
+ 0 -- OUT0_SEL_I2CB
+ 1 -- OUT1
+ 2 -- OUT2
+ 3 -- OUT3
+ 4 -- OUT4
+
==Example==
/* 25MHz reference crystal */
diff --git a/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt b/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt
index 707a686d8d3e..316e13686568 100644
--- a/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt
+++ b/Documentation/devicetree/bindings/clock/renesas,cpg-mssr.txt
@@ -22,6 +22,7 @@ Required Properties:
- "renesas,r8a7794-cpg-mssr" for the r8a7794 SoC (R-Car E2)
- "renesas,r8a7795-cpg-mssr" for the r8a7795 SoC (R-Car H3)
- "renesas,r8a7796-cpg-mssr" for the r8a7796 SoC (R-Car M3-W)
+ - "renesas,r8a77995-cpg-mssr" for the r8a77995 SoC (R-Car D3)
- reg: Base address and length of the memory resource used by the CPG/MSSR
block
@@ -30,7 +31,7 @@ Required Properties:
clock-names
- clock-names: List of external parent clock names. Valid names are:
- "extal" (r8a7743, r8a7745, r8a7790, r8a7791, r8a7792, r8a7793, r8a7794,
- r8a7795, r8a7796)
+ r8a7795, r8a7796, r8a77995)
- "extalr" (r8a7795, r8a7796)
- "usb_extal" (r8a7743, r8a7745, r8a7790, r8a7791, r8a7793, r8a7794)
diff --git a/Documentation/devicetree/bindings/clock/renesas,rcar-usb2-clock-sel.txt b/Documentation/devicetree/bindings/clock/renesas,rcar-usb2-clock-sel.txt
new file mode 100644
index 000000000000..e96e085271c1
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/renesas,rcar-usb2-clock-sel.txt
@@ -0,0 +1,55 @@
+* Renesas R-Car USB 2.0 clock selector
+
+This file provides information on what the device node for the R-Car USB 2.0
+clock selector.
+
+If you connect an external clock to the USB_EXTAL pin only, you should set
+the clock rate to "usb_extal" node only.
+If you connect an oscillator to both the USB_XTAL and USB_EXTAL, this module
+is not needed because this is default setting. (Of course, you can set the
+clock rates to both "usb_extal" and "usb_xtal" nodes.
+
+Case 1: An external clock connects to R-Car SoC
+ +----------+ +--- R-Car ---------------------+
+ |External |---|USB_EXTAL ---> all usb channels|
+ |clock | |USB_XTAL |
+ +----------+ +-------------------------------+
+In this case, we need this driver with "usb_extal" clock.
+
+Case 2: An oscillator connects to R-Car SoC
+ +----------+ +--- R-Car ---------------------+
+ |Oscillator|---|USB_EXTAL -+-> all usb channels|
+ | |---|USB_XTAL --+ |
+ +----------+ +-------------------------------+
+In this case, we don't need this selector.
+
+Required properties:
+- compatible: "renesas,r8a7795-rcar-usb2-clock-sel" if the device is a part of
+ an R8A7795 SoC.
+ "renesas,r8a7796-rcar-usb2-clock-sel" if the device if a part of
+ an R8A7796 SoC.
+ "renesas,rcar-gen3-usb2-clock-sel" for a generic R-Car Gen3
+ compatible device.
+
+ When compatible with the generic version, nodes must list the
+ SoC-specific version corresponding to the platform first
+ followed by the generic version.
+
+- reg: offset and length of the USB 2.0 clock selector register block.
+- clocks: A list of phandles and specifier pairs.
+- clock-names: Name of the clocks.
+ - The functional clock must be "ehci_ohci"
+ - The USB_EXTAL clock pin must be "usb_extal"
+ - The USB_XTAL clock pin must be "usb_xtal"
+- #clock-cells: Must be 0
+
+Example (R-Car H3):
+
+ usb2_clksel: clock-controller@e6590630 {
+ compatible = "renesas,r8a77950-rcar-usb2-clock-sel",
+ "renesas,rcar-gen3-usb2-clock-sel";
+ reg = <0 0xe6590630 0 0x02>;
+ clocks = <&cpg CPG_MOD 703>, <&usb_extal>, <&usb_xtal>;
+ clock-names = "ehci_ohci", "usb_extal", "usb_xtal";
+ #clock-cells = <0>;
+ };
diff --git a/Documentation/devicetree/bindings/clock/rockchip,rk3128-cru.txt b/Documentation/devicetree/bindings/clock/rockchip,rk3128-cru.txt
index 455a9a00a623..6f8744fd301b 100644
--- a/Documentation/devicetree/bindings/clock/rockchip,rk3128-cru.txt
+++ b/Documentation/devicetree/bindings/clock/rockchip,rk3128-cru.txt
@@ -1,12 +1,14 @@
-* Rockchip RK3128 Clock and Reset Unit
+* Rockchip RK3126/RK3128 Clock and Reset Unit
-The RK3128 clock controller generates and supplies clock to various
+The RK3126/RK3128 clock controller generates and supplies clock to various
controllers within the SoC and also implements a reset controller for SoC
peripherals.
Required Properties:
-- compatible: should be "rockchip,rk3128-cru"
+- compatible: should be "rockchip,rk3126-cru" or "rockchip,rk3128-cru"
+ "rockchip,rk3126-cru" - controller compatible with RK3126 SoC.
+ "rockchip,rk3128-cru" - controller compatible with RK3128 SoC.
- reg: physical base address of the controller and length of memory mapped
region.
- #clock-cells: should be 1.
diff --git a/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt
new file mode 100644
index 000000000000..c56c7553c730
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt
@@ -0,0 +1,28 @@
+Binding for the HSDK Generic PLL clock
+
+This binding uses the common clock binding[1].
+
+[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
+
+Required properties:
+- compatible: should be "snps,hsdk-<name>-pll-clock"
+ "snps,hsdk-core-pll-clock"
+ "snps,hsdk-gp-pll-clock"
+ "snps,hsdk-hdmi-pll-clock"
+- reg : should contain base register location and length.
+- clocks: shall be the input parent clock phandle for the PLL.
+- #clock-cells: from common clock binding; Should always be set to 0.
+
+Example:
+ input_clk: input-clk {
+ clock-frequency = <33333333>;
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ };
+
+ cpu_clk: cpu-clk@0 {
+ compatible = "snps,hsdk-core-pll-clock";
+ reg = <0x00 0x10>;
+ #clock-cells = <0>;
+ clocks = <&input_clk>;
+ };
diff --git a/Documentation/devicetree/bindings/clock/snps,pll-clock.txt b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt
new file mode 100644
index 000000000000..11fe4876612c
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/snps,pll-clock.txt
@@ -0,0 +1,28 @@
+Binding for the AXS10X Generic PLL clock
+
+This binding uses the common clock binding[1].
+
+[1] Documentation/devicetree/bindings/clock/clock-bindings.txt
+
+Required properties:
+- compatible: should be "snps,axs10x-<name>-pll-clock"
+ "snps,axs10x-arc-pll-clock"
+ "snps,axs10x-pgu-pll-clock"
+- reg: should always contain 2 pairs address - length: first for PLL config
+registers and second for corresponding LOCK CGU register.
+- clocks: shall be the input parent clock phandle for the PLL.
+- #clock-cells: from common clock binding; Should always be set to 0.
+
+Example:
+ input-clk: input-clk {
+ clock-frequency = <33333333>;
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ };
+
+ core-clk: core-clk@80 {
+ compatible = "snps,axs10x-arc-pll-clock";
+ reg = <0x80 0x10>, <0x100 0x10>;
+ #clock-cells = <0>;
+ clocks = <&input-clk>;
+ };
diff --git a/Documentation/devicetree/bindings/clock/st,stm32h7-rcc.txt b/Documentation/devicetree/bindings/clock/st,stm32h7-rcc.txt
new file mode 100644
index 000000000000..a135504c7d57
--- /dev/null
+++ b/Documentation/devicetree/bindings/clock/st,stm32h7-rcc.txt
@@ -0,0 +1,71 @@
+STMicroelectronics STM32H7 Reset and Clock Controller
+=====================================================
+
+The RCC IP is both a reset and a clock controller.
+
+Please refer to clock-bindings.txt for common clock controller binding usage.
+Please also refer to reset.txt for common reset controller binding usage.
+
+Required properties:
+- compatible: Should be:
+ "st,stm32h743-rcc"
+
+- reg: should be register base and length as documented in the
+ datasheet
+
+- #reset-cells: 1, see below
+
+- #clock-cells : from common clock binding; shall be set to 1
+
+- clocks: External oscillator clock phandle
+ - high speed external clock signal (HSE)
+ - low speed external clock signal (LSE)
+ - external I2S clock (I2S_CKIN)
+
+Optional properties:
+- st,syscfg: phandle for pwrcfg, mandatory to disable/enable backup domain
+ write protection (RTC clock).
+
+Example:
+
+ rcc: reset-clock-controller@58024400 {
+ compatible = "st,stm32h743-rcc", "st,stm32-rcc";
+ reg = <0x58024400 0x400>;
+ #reset-cells = <1>;
+ #clock-cells = <2>;
+ clocks = <&clk_hse>, <&clk_lse>, <&clk_i2s_ckin>;
+
+ st,syscfg = <&pwrcfg>;
+};
+
+The peripheral clock consumer should specify the desired clock by
+having the clock ID in its "clocks" phandle cell.
+
+Example:
+
+ timer5: timer@40000c00 {
+ compatible = "st,stm32-timer";
+ reg = <0x40000c00 0x400>;
+ interrupts = <50>;
+ clocks = <&rcc TIM5_CK>;
+ };
+
+Specifying softreset control of devices
+=======================================
+
+Device nodes should specify the reset channel required in their "resets"
+property, containing a phandle to the reset device node and an index specifying
+which channel to use.
+The index is the bit number within the RCC registers bank, starting from RCC
+base address.
+It is calculated as: index = register_offset / 4 * 32 + bit_offset.
+Where bit_offset is the bit offset within the register.
+
+For example, for CRC reset:
+ crc = AHB4RSTR_offset / 4 * 32 + CRCRST_bit_offset = 0x88 / 4 * 32 + 19 = 1107
+
+Example:
+
+ timer2 {
+ resets = <&rcc STM32H7_APB1L_RESET(TIM2)>;
+ };
diff --git a/Documentation/devicetree/bindings/clock/sunxi-ccu.txt b/Documentation/devicetree/bindings/clock/sunxi-ccu.txt
index df9fad58facd..7eda08eb8a1e 100644
--- a/Documentation/devicetree/bindings/clock/sunxi-ccu.txt
+++ b/Documentation/devicetree/bindings/clock/sunxi-ccu.txt
@@ -3,18 +3,24 @@ Allwinner Clock Control Unit Binding
Required properties :
- compatible: must contain one of the following compatibles:
+ - "allwinner,sun4i-a10-ccu"
+ - "allwinner,sun5i-a10s-ccu"
+ - "allwinner,sun5i-a13-ccu"
- "allwinner,sun6i-a31-ccu"
+ - "allwinner,sun7i-a20-ccu"
- "allwinner,sun8i-a23-ccu"
- "allwinner,sun8i-a33-ccu"
- "allwinner,sun8i-a83t-ccu"
- "allwinner,sun8i-a83t-r-ccu"
- "allwinner,sun8i-h3-ccu"
- "allwinner,sun8i-h3-r-ccu"
++ - "allwinner,sun8i-r40-ccu"
- "allwinner,sun8i-v3s-ccu"
- "allwinner,sun9i-a80-ccu"
- "allwinner,sun50i-a64-ccu"
- "allwinner,sun50i-a64-r-ccu"
- "allwinner,sun50i-h5-ccu"
+ - "nextthing,gr8-ccu"
- reg: Must contain the registers base address and length
- clocks: phandle to the oscillators feeding the CCU. Two are needed:
diff --git a/Documentation/devicetree/bindings/clock/uniphier-clock.txt b/Documentation/devicetree/bindings/clock/uniphier-clock.txt
index 812163060fa3..7b5f602765fe 100644
--- a/Documentation/devicetree/bindings/clock/uniphier-clock.txt
+++ b/Documentation/devicetree/bindings/clock/uniphier-clock.txt
@@ -6,7 +6,6 @@ System clock
Required properties:
- compatible: should be one of the following:
- "socionext,uniphier-sld3-clock" - for sLD3 SoC.
"socionext,uniphier-ld4-clock" - for LD4 SoC.
"socionext,uniphier-pro4-clock" - for Pro4 SoC.
"socionext,uniphier-sld8-clock" - for sLD8 SoC.
@@ -14,6 +13,7 @@ Required properties:
"socionext,uniphier-pxs2-clock" - for PXs2/LD6b SoC.
"socionext,uniphier-ld11-clock" - for LD11 SoC.
"socionext,uniphier-ld20-clock" - for LD20 SoC.
+ "socionext,uniphier-pxs3-clock" - for PXs3 SoC
- #clock-cells: should be 1.
Example:
@@ -48,7 +48,6 @@ Media I/O (MIO) clock, SD clock
Required properties:
- compatible: should be one of the following:
- "socionext,uniphier-sld3-mio-clock" - for sLD3 SoC.
"socionext,uniphier-ld4-mio-clock" - for LD4 SoC.
"socionext,uniphier-pro4-mio-clock" - for Pro4 SoC.
"socionext,uniphier-sld8-mio-clock" - for sLD8 SoC.
@@ -56,6 +55,7 @@ Required properties:
"socionext,uniphier-pxs2-sd-clock" - for PXs2/LD6b SoC.
"socionext,uniphier-ld11-mio-clock" - for LD11 SoC.
"socionext,uniphier-ld20-sd-clock" - for LD20 SoC.
+ "socionext,uniphier-pxs3-sd-clock" - for PXs3 SoC
- #clock-cells: should be 1.
Example:
@@ -82,11 +82,9 @@ Provided clocks:
8: USB2 ch0 host
9: USB2 ch1 host
10: USB2 ch2 host
-11: USB2 ch3 host
12: USB2 ch0 PHY
13: USB2 ch1 PHY
14: USB2 ch2 PHY
-15: USB2 ch3 PHY
Peripheral clock
@@ -94,7 +92,6 @@ Peripheral clock
Required properties:
- compatible: should be one of the following:
- "socionext,uniphier-sld3-peri-clock" - for sLD3 SoC.
"socionext,uniphier-ld4-peri-clock" - for LD4 SoC.
"socionext,uniphier-pro4-peri-clock" - for Pro4 SoC.
"socionext,uniphier-sld8-peri-clock" - for sLD8 SoC.
@@ -102,6 +99,7 @@ Required properties:
"socionext,uniphier-pxs2-peri-clock" - for PXs2/LD6b SoC.
"socionext,uniphier-ld11-peri-clock" - for LD11 SoC.
"socionext,uniphier-ld20-peri-clock" - for LD20 SoC.
+ "socionext,uniphier-pxs3-peri-clock" - for PXs3 SoC
- #clock-cells: should be 1.
Example:
diff --git a/Documentation/devicetree/bindings/i2c/i2c-altera.txt b/Documentation/devicetree/bindings/i2c/i2c-altera.txt
new file mode 100644
index 000000000000..767664f448ec
--- /dev/null
+++ b/Documentation/devicetree/bindings/i2c/i2c-altera.txt
@@ -0,0 +1,39 @@
+* Altera I2C Controller
+* This is Altera's synthesizable logic block I2C Controller for use
+* in Altera's FPGAs.
+
+Required properties :
+ - compatible : should be "altr,softip-i2c-v1.0"
+ - reg : Offset and length of the register set for the device
+ - interrupts : <IRQ> where IRQ is the interrupt number.
+ - clocks : phandle to input clock.
+ - #address-cells = <1>;
+ - #size-cells = <0>;
+
+Recommended properties :
+ - clock-frequency : desired I2C bus clock frequency in Hz.
+
+Optional properties :
+ - fifo-size : Size of the RX and TX FIFOs in bytes.
+ - Child nodes conforming to i2c bus binding
+
+Example :
+
+ i2c@100080000 {
+ compatible = "altr,softip-i2c-v1.0";
+ reg = <0x00000001 0x00080000 0x00000040>;
+ interrupt-parent = <&intc>;
+ interrupts = <0 43 4>;
+ clocks = <&clk_0>;
+ clock-frequency = <100000>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ fifo-size = <4>;
+
+ eeprom@51 {
+ compatible = "atmel,24c32";
+ reg = <0x51>;
+ pagesize = <32>;
+ };
+ };
+
diff --git a/Documentation/devicetree/bindings/i2c/i2c-stm32.txt b/Documentation/devicetree/bindings/i2c/i2c-stm32.txt
index 78eaf7b718ed..3b5489966634 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-stm32.txt
+++ b/Documentation/devicetree/bindings/i2c/i2c-stm32.txt
@@ -1,7 +1,9 @@
* I2C controller embedded in STMicroelectronics STM32 I2C platform
Required properties :
-- compatible : Must be "st,stm32f4-i2c"
+- compatible : Must be one of the following
+ - "st,stm32f4-i2c"
+ - "st,stm32f7-i2c"
- reg : Offset and length of the register set for the device
- interrupts : Must contain the interrupt id for I2C event and then the
interrupt id for I2C error.
@@ -14,8 +16,16 @@ Required properties :
Optional properties :
- clock-frequency : Desired I2C bus clock frequency in Hz. If not specified,
- the default 100 kHz frequency will be used. As only Normal and Fast modes
- are supported, possible values are 100000 and 400000.
+ the default 100 kHz frequency will be used.
+ For STM32F4 SoC Standard-mode and Fast-mode are supported, possible values are
+ 100000 and 400000.
+ For STM32F7 SoC, Standard-mode, Fast-mode and Fast-mode Plus are supported,
+ possible values are 100000, 400000 and 1000000.
+- i2c-scl-rising-time-ns : Only for STM32F7, I2C SCL Rising time for the board
+ (default: 25)
+- i2c-scl-falling-time-ns : Only for STM32F7, I2C SCL Falling time for the board
+ (default: 10)
+ I2C Timings are derived from these 2 values
Example :
@@ -31,3 +41,16 @@ Example :
pinctrl-0 = <&i2c1_sda_pin>, <&i2c1_scl_pin>;
pinctrl-names = "default";
};
+
+ i2c@40005400 {
+ compatible = "st,stm32f7-i2c";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0x40005400 0x400>;
+ interrupts = <31>,
+ <32>;
+ resets = <&rcc STM32F7_APB1_RESET(I2C1)>;
+ clocks = <&rcc 1 CLK_I2C1>;
+ pinctrl-0 = <&i2c1_sda_pin>, <&i2c1_scl_pin>;
+ pinctrl-names = "default";
+ };
diff --git a/Documentation/devicetree/bindings/input/pwm-vibrator.txt b/Documentation/devicetree/bindings/input/pwm-vibrator.txt
new file mode 100644
index 000000000000..09145d18491d
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/pwm-vibrator.txt
@@ -0,0 +1,66 @@
+* PWM vibrator device tree bindings
+
+Registers a PWM device as vibrator. It is expected, that the vibrator's
+strength increases based on the duty cycle of the enable PWM channel
+(100% duty cycle meaning strongest vibration, 0% meaning no vibration).
+
+The binding supports an optional direction PWM channel, that can be
+driven at fixed duty cycle. If available this is can be used to increase
+the vibration effect of some devices.
+
+Required properties:
+- compatible: should contain "pwm-vibrator"
+- pwm-names: Should contain "enable" and optionally "direction"
+- pwms: Should contain a PWM handle for each entry in pwm-names
+
+Optional properties:
+- vcc-supply: Phandle for the regulator supplying power
+- direction-duty-cycle-ns: Duty cycle of the direction PWM channel in
+ nanoseconds, defaults to 50% of the channel's
+ period.
+
+Example from Motorola Droid 4:
+
+&omap4_pmx_core {
+ vibrator_direction_pin: pinmux_vibrator_direction_pin {
+ pinctrl-single,pins = <
+ OMAP4_IOPAD(0x1ce, PIN_OUTPUT | MUX_MODE1) /* dmtimer8_pwm_evt (gpio_27) */
+ >;
+ };
+
+ vibrator_enable_pin: pinmux_vibrator_enable_pin {
+ pinctrl-single,pins = <
+ OMAP4_IOPAD(0X1d0, PIN_OUTPUT | MUX_MODE1) /* dmtimer9_pwm_evt (gpio_28) */
+ >;
+ };
+};
+
+/ {
+ pwm8: dmtimer-pwm {
+ pinctrl-names = "default";
+ pinctrl-0 = <&vibrator_direction_pin>;
+
+ compatible = "ti,omap-dmtimer-pwm";
+ #pwm-cells = <3>;
+ ti,timers = <&timer8>;
+ ti,clock-source = <0x01>;
+ };
+
+ pwm9: dmtimer-pwm {
+ pinctrl-names = "default";
+ pinctrl-0 = <&vibrator_enable_pin>;
+
+ compatible = "ti,omap-dmtimer-pwm";
+ #pwm-cells = <3>;
+ ti,timers = <&timer9>;
+ ti,clock-source = <0x01>;
+ };
+
+ vibrator {
+ compatible = "pwm-vibrator";
+ pwms = <&pwm8 0 1000000000 0>,
+ <&pwm9 0 1000000000 0>;
+ pwm-names = "enable", "direction";
+ direction-duty-cycle-ns = <1000000000>;
+ };
+};
diff --git a/Documentation/devicetree/bindings/mips/lantiq/fpi-bus.txt b/Documentation/devicetree/bindings/mips/lantiq/fpi-bus.txt
new file mode 100644
index 000000000000..0a2df4338332
--- /dev/null
+++ b/Documentation/devicetree/bindings/mips/lantiq/fpi-bus.txt
@@ -0,0 +1,31 @@
+Lantiq XWAY SoC FPI BUS binding
+============================
+
+
+-------------------------------------------------------------------------------
+Required properties:
+- compatible : Should be one of
+ "lantiq,xrx200-fpi"
+- reg : The address and length of the XBAR
+ configuration register.
+ Address and length of the FPI bus itself.
+- lantiq,rcu : A phandle to the RCU syscon
+- lantiq,offset-endianness : Offset of the endianness configuration
+ register
+
+-------------------------------------------------------------------------------
+Example for the FPI on the xrx200 SoCs:
+ fpi@10000000 {
+ compatible = "lantiq,xrx200-fpi";
+ ranges = <0x0 0x10000000 0xf000000>;
+ reg = <0x1f400000 0x1000>,
+ <0x10000000 0xf000000>;
+ lantiq,rcu = <&rcu0>;
+ lantiq,offset-endianness = <0x4c>;
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ gptu@e100a00 {
+ ......
+ };
+ };
diff --git a/Documentation/devicetree/bindings/mips/lantiq/rcu-gphy.txt b/Documentation/devicetree/bindings/mips/lantiq/rcu-gphy.txt
new file mode 100644
index 000000000000..a0c19bd1ce66
--- /dev/null
+++ b/Documentation/devicetree/bindings/mips/lantiq/rcu-gphy.txt
@@ -0,0 +1,36 @@
+Lantiq XWAY SoC GPHY binding
+============================
+
+This binding describes a software-defined ethernet PHY, provided by the RCU
+module on newer Lantiq XWAY SoCs (xRX200 and newer).
+
+-------------------------------------------------------------------------------
+Required properties:
+- compatible : Should be one of
+ "lantiq,xrx200a1x-gphy"
+ "lantiq,xrx200a2x-gphy"
+ "lantiq,xrx300-gphy"
+ "lantiq,xrx330-gphy"
+- reg : Addrress of the GPHY FW load address register
+- resets : Must reference the RCU GPHY reset bit
+- reset-names : One entry, value must be "gphy" or optional "gphy2"
+- clocks : A reference to the (PMU) GPHY clock gate
+
+Optional properties:
+- lantiq,gphy-mode : GPHY_MODE_GE (default) or GPHY_MODE_FE as defined in
+ <dt-bindings/mips/lantiq_xway_gphy.h>
+
+
+-------------------------------------------------------------------------------
+Example for the GPHys on the xRX200 SoCs:
+
+#include <dt-bindings/mips/lantiq_rcu_gphy.h>
+ gphy0: gphy@20 {
+ compatible = "lantiq,xrx200a2x-gphy";
+ reg = <0x20 0x4>;
+
+ resets = <&reset0 31 30>, <&reset1 7 7>;
+ reset-names = "gphy", "gphy2";
+ clocks = <&pmu0 XRX200_PMU_GATE_GPHY>;
+ lantiq,gphy-mode = <GPHY_MODE_GE>;
+ };
diff --git a/Documentation/devicetree/bindings/mips/lantiq/rcu.txt b/Documentation/devicetree/bindings/mips/lantiq/rcu.txt
new file mode 100644
index 000000000000..a086f1e1cdd7
--- /dev/null
+++ b/Documentation/devicetree/bindings/mips/lantiq/rcu.txt
@@ -0,0 +1,89 @@
+Lantiq XWAY SoC RCU binding
+===========================
+
+This binding describes the RCU (reset controller unit) multifunction device,
+where each sub-device has it's own set of registers.
+
+The RCU register range is used for multiple purposes. Mostly one device
+uses one or multiple register exclusively, but for some registers some
+bits are for one driver and some other bits are for a different driver.
+With this patch all accesses to the RCU registers will go through
+syscon.
+
+
+-------------------------------------------------------------------------------
+Required properties:
+- compatible : The first and second values must be:
+ "lantiq,xrx200-rcu", "simple-mfd", "syscon"
+- reg : The address and length of the system control registers
+
+
+-------------------------------------------------------------------------------
+Example of the RCU bindings on a xRX200 SoC:
+ rcu0: rcu@203000 {
+ compatible = "lantiq,xrx200-rcu", "simple-mfd", "syscon";
+ reg = <0x203000 0x100>;
+ ranges = <0x0 0x203000 0x100>;
+ big-endian;
+
+ gphy0: gphy@20 {
+ compatible = "lantiq,xrx200a2x-gphy";
+ reg = <0x20 0x4>;
+
+ resets = <&reset0 31 30>, <&reset1 7 7>;
+ reset-names = "gphy", "gphy2";
+ lantiq,gphy-mode = <GPHY_MODE_GE>;
+ };
+
+ gphy1: gphy@68 {
+ compatible = "lantiq,xrx200a2x-gphy";
+ reg = <0x68 0x4>;
+
+ resets = <&reset0 29 28>, <&reset1 6 6>;
+ reset-names = "gphy", "gphy2";
+ lantiq,gphy-mode = <GPHY_MODE_GE>;
+ };
+
+ reset0: reset-controller@10 {
+ compatible = "lantiq,xrx200-reset";
+ reg = <0x10 4>, <0x14 4>;
+
+ #reset-cells = <2>;
+ };
+
+ reset1: reset-controller@48 {
+ compatible = "lantiq,xrx200-reset";
+ reg = <0x48 4>, <0x24 4>;
+
+ #reset-cells = <2>;
+ };
+
+ usb_phy0: usb2-phy@18 {
+ compatible = "lantiq,xrx200-usb2-phy";
+ reg = <0x18 4>, <0x38 4>;
+ status = "disabled";
+
+ resets = <&reset1 4 4>, <&reset0 4 4>;
+ reset-names = "phy", "ctrl";
+ #phy-cells = <0>;
+ };
+
+ usb_phy1: usb2-phy@34 {
+ compatible = "lantiq,xrx200-usb2-phy";
+ reg = <0x34 4>, <0x3C 4>;
+ status = "disabled";
+
+ resets = <&reset1 5 4>, <&reset0 4 4>;
+ reset-names = "phy", "ctrl";
+ #phy-cells = <0>;
+ };
+
+ reboot@10 {
+ compatible = "syscon-reboot";
+ reg = <0x10 4>;
+
+ regmap = <&rcu0>;
+ offset = <0x10>;
+ mask = <0x40000000>;
+ };
+ };
diff --git a/Documentation/devicetree/bindings/mips/ni.txt b/Documentation/devicetree/bindings/mips/ni.txt
new file mode 100644
index 000000000000..722bf2d62da9
--- /dev/null
+++ b/Documentation/devicetree/bindings/mips/ni.txt
@@ -0,0 +1,7 @@
+National Instruments MIPS platforms
+
+required root node properties:
+ - compatible: must be "ni,169445"
+
+CPU Nodes
+ - compatible: must be "mti,mips14KEc"
diff --git a/Documentation/devicetree/bindings/mips/ralink.txt b/Documentation/devicetree/bindings/mips/ralink.txt
index b35a8d04f8b6..a16e8d7fe56c 100644
--- a/Documentation/devicetree/bindings/mips/ralink.txt
+++ b/Documentation/devicetree/bindings/mips/ralink.txt
@@ -15,3 +15,4 @@ value must be one of the following values:
ralink,rt5350-soc
ralink,mt7620a-soc
ralink,mt7620n-soc
+ ralink,mt7628a-soc
diff --git a/Documentation/devicetree/bindings/phy/phy-lantiq-rcu-usb2.txt b/Documentation/devicetree/bindings/phy/phy-lantiq-rcu-usb2.txt
new file mode 100644
index 000000000000..643948b6b576
--- /dev/null
+++ b/Documentation/devicetree/bindings/phy/phy-lantiq-rcu-usb2.txt
@@ -0,0 +1,40 @@
+Lantiq XWAY SoC RCU USB 1.1/2.0 PHY binding
+===========================================
+
+This binding describes the USB PHY hardware provided by the RCU module on the
+Lantiq XWAY SoCs.
+
+This node has to be a sub node of the Lantiq RCU block.
+
+-------------------------------------------------------------------------------
+Required properties (controller (parent) node):
+- compatible : Should be one of
+ "lantiq,ase-usb2-phy"
+ "lantiq,danube-usb2-phy"
+ "lantiq,xrx100-usb2-phy"
+ "lantiq,xrx200-usb2-phy"
+ "lantiq,xrx300-usb2-phy"
+- reg : Defines the following sets of registers in the parent
+ syscon device
+ - Offset of the USB PHY configuration register
+ - Offset of the USB Analog configuration
+ register (only for xrx200 and xrx200)
+- clocks : References to the (PMU) "phy" clk gate.
+- clock-names : Must be "phy"
+- resets : References to the RCU USB configuration reset bits.
+- reset-names : Must be one of the following:
+ "phy" (optional)
+ "ctrl" (shared)
+
+-------------------------------------------------------------------------------
+Example for the USB PHYs on an xRX200 SoC:
+ usb_phy0: usb2-phy@18 {
+ compatible = "lantiq,xrx200-usb2-phy";
+ reg = <0x18 4>, <0x38 4>;
+
+ clocks = <&pmu PMU_GATE_USB0_PHY>;
+ clock-names = "phy";
+ resets = <&reset1 4 4>, <&reset0 4 4>;
+ reset-names = "phy", "ctrl";
+ #phy-cells = <0>;
+ };
diff --git a/Documentation/devicetree/bindings/power/wakeup-source.txt b/Documentation/devicetree/bindings/power/wakeup-source.txt
index 963c6dfd484d..3c81f78b5c27 100644
--- a/Documentation/devicetree/bindings/power/wakeup-source.txt
+++ b/Documentation/devicetree/bindings/power/wakeup-source.txt
@@ -20,13 +20,12 @@ List of legacy properties and respective binding document
1. "enable-sdio-wakeup" Documentation/devicetree/bindings/mmc/mmc.txt
2. "gpio-key,wakeup" Documentation/devicetree/bindings/input/gpio-keys{,-polled}.txt
3. "has-tpo" Documentation/devicetree/bindings/rtc/rtc-opal.txt
-4. "isil,irq2-can-wakeup-machine" Documentation/devicetree/bindings/rtc/isil,isl12057.txt
-5. "linux,wakeup" Documentation/devicetree/bindings/input/gpio-matrix-keypad.txt
+4. "linux,wakeup" Documentation/devicetree/bindings/input/gpio-matrix-keypad.txt
Documentation/devicetree/bindings/mfd/tc3589x.txt
Documentation/devicetree/bindings/input/ads7846.txt
-6. "linux,keypad-wakeup" Documentation/devicetree/bindings/input/qcom,pm8xxx-keypad.txt
-7. "linux,input-wakeup" Documentation/devicetree/bindings/input/samsung-keypad.txt
-8. "nvidia,wakeup-source" Documentation/devicetree/bindings/input/nvidia,tegra20-kbc.txt
+5. "linux,keypad-wakeup" Documentation/devicetree/bindings/input/qcom,pm8xxx-keypad.txt
+6. "linux,input-wakeup" Documentation/devicetree/bindings/input/samsung-keypad.txt
+7. "nvidia,wakeup-source" Documentation/devicetree/bindings/input/nvidia,tegra20-kbc.txt
Examples
--------
diff --git a/Documentation/devicetree/bindings/reset/lantiq,reset.txt b/Documentation/devicetree/bindings/reset/lantiq,reset.txt
new file mode 100644
index 000000000000..c6aef36b7d15
--- /dev/null
+++ b/Documentation/devicetree/bindings/reset/lantiq,reset.txt
@@ -0,0 +1,30 @@
+Lantiq XWAY SoC RCU reset controller binding
+============================================
+
+This binding describes a reset-controller found on the RCU module on Lantiq
+XWAY SoCs.
+
+This node has to be a sub node of the Lantiq RCU block.
+
+-------------------------------------------------------------------------------
+Required properties:
+- compatible : Should be one of
+ "lantiq,danube-reset"
+ "lantiq,xrx200-reset"
+- reg : Defines the following sets of registers in the parent
+ syscon device
+ - Offset of the reset set register
+ - Offset of the reset status register
+- #reset-cells : Specifies the number of cells needed to encode the
+ reset line, should be 2.
+ The first cell takes the reset set bit and the
+ second cell takes the status bit.
+
+-------------------------------------------------------------------------------
+Example for the reset-controllers on the xRX200 SoCs:
+ reset0: reset-controller@10 {
+ compatible = "lantiq,xrx200-reset";
+ reg <0x10 0x04>, <0x14 0x04>;
+
+ #reset-cells = <2>;
+ };
diff --git a/Documentation/devicetree/bindings/rtc/google,goldfish-rtc.txt b/Documentation/devicetree/bindings/rtc/google,goldfish-rtc.txt
new file mode 100644
index 000000000000..634312dd95ca
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/google,goldfish-rtc.txt
@@ -0,0 +1,17 @@
+Android Goldfish RTC
+
+Android Goldfish RTC device used by Android emulator.
+
+Required properties:
+
+- compatible : should contain "google,goldfish-rtc"
+- reg : <registers mapping>
+- interrupts : <interrupt mapping>
+
+Example:
+
+ goldfish_timer@9020000 {
+ compatible = "google,goldfish-rtc";
+ reg = <0x9020000 0x1000>;
+ interrupts = <0x3>;
+ };
diff --git a/Documentation/devicetree/bindings/rtc/isil,isl12057.txt b/Documentation/devicetree/bindings/rtc/isil,isl12057.txt
index cf83e0940302..fbbdd92e5af9 100644
--- a/Documentation/devicetree/bindings/rtc/isil,isl12057.txt
+++ b/Documentation/devicetree/bindings/rtc/isil,isl12057.txt
@@ -24,7 +24,6 @@ Optional properties:
- "wakeup-source": mark the chip as a wakeup source, independently of
the availability of an IRQ line connected to the SoC.
- (Legacy property supported: "isil,irq2-can-wakeup-machine")
- "interrupt-parent", "interrupts": for passing the interrupt line
of the SoC connected to IRQ#2 of the RTC chip.
diff --git a/Documentation/devicetree/bindings/rtc/realtek,rtd119x.txt b/Documentation/devicetree/bindings/rtc/realtek,rtd119x.txt
new file mode 100644
index 000000000000..bbf1ccb5df31
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/realtek,rtd119x.txt
@@ -0,0 +1,16 @@
+Realtek RTD129x Real-Time Clock
+===============================
+
+Required properties:
+- compatible : Should be "realtek,rtd1295-rtc"
+- reg : Specifies the physical base address and size
+- clocks : Specifies the clock gate
+
+
+Example:
+
+ rtc@9801b600 {
+ compatible = "realtek,rtd1295-clk";
+ reg = <0x9801b600 0x100>;
+ clocks = <&clkc RTD1295_CLK_EN_MISC_RTC>;
+ };
diff --git a/Documentation/devicetree/bindings/rtc/sun6i-rtc.txt b/Documentation/devicetree/bindings/rtc/sun6i-rtc.txt
index 945934918b71..d5e26d313f62 100644
--- a/Documentation/devicetree/bindings/rtc/sun6i-rtc.txt
+++ b/Documentation/devicetree/bindings/rtc/sun6i-rtc.txt
@@ -10,7 +10,7 @@ Required properties:
Required properties for new device trees
- clocks : phandle to the 32kHz external oscillator
-- clock-output-names : name of the LOSC clock created
+- clock-output-names : names of the LOSC and its external output clocks created
- #clock-cells : must be equals to 1. The RTC provides two clocks: the
LOSC and its external output, with index 0 and 1
respectively.
@@ -21,7 +21,7 @@ rtc: rtc@01f00000 {
compatible = "allwinner,sun6i-a31-rtc";
reg = <0x01f00000 0x54>;
interrupts = <0 40 4>, <0 41 4>;
- clock-output-names = "osc32k";
+ clock-output-names = "osc32k", "osc32k-out";
clocks = <&ext_osc32k>;
#clock-cells = <1>;
};
diff --git a/Documentation/devicetree/bindings/sound/atmel-classd.txt b/Documentation/devicetree/bindings/sound/atmel-classd.txt
index 549e701cb7a1..898551076382 100644
--- a/Documentation/devicetree/bindings/sound/atmel-classd.txt
+++ b/Documentation/devicetree/bindings/sound/atmel-classd.txt
@@ -13,13 +13,11 @@ Required properties:
Must be "tx".
- clock-names
Tuple listing input clock names.
- Required elements: "pclk", "gclk" and "aclk".
+ Required elements: "pclk" and "gclk".
- clocks
Please refer to clock-bindings.txt.
- assigned-clocks
Should be <&classd_gclk>.
-- assigned-clock-parents
- Should be <&audio_pll_pmc>.
Optional properties:
- pinctrl-names, pinctrl-0
@@ -45,10 +43,9 @@ classd: classd@fc048000 {
(AT91_XDMAC_DT_MEM_IF(0) | AT91_XDMAC_DT_PER_IF(1)
| AT91_XDMAC_DT_PERID(47))>;
dma-names = "tx";
- clocks = <&classd_clk>, <&classd_gclk>, <&audio_pll_pmc>;
- clock-names = "pclk", "gclk", "aclk";
+ clocks = <&classd_clk>, <&classd_gclk>;
+ clock-names = "pclk", "gclk";
assigned-clocks = <&classd_gclk>;
- assigned-clock-parents = <&audio_pll_pmc>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_classd_default>;
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.txt b/Documentation/devicetree/bindings/vendor-prefixes.txt
index 69183f0fbc78..1ea1fd4232ab 100644
--- a/Documentation/devicetree/bindings/vendor-prefixes.txt
+++ b/Documentation/devicetree/bindings/vendor-prefixes.txt
@@ -361,6 +361,7 @@ variscite Variscite Ltd.
via VIA Technologies, Inc.
virtio Virtual I/O Device Specification, developed by the OASIS consortium
vivante Vivante Corporation
+vocore VoCore Studio
voipac Voipac Technologies s.r.o.
wd Western Digital Corp.
wetek WeTek Electronics, limited.
diff --git a/Documentation/devicetree/bindings/watchdog/aspeed-wdt.txt b/Documentation/devicetree/bindings/watchdog/aspeed-wdt.txt
index c5e74d7b4406..c5077a1f5cb3 100644
--- a/Documentation/devicetree/bindings/watchdog/aspeed-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/aspeed-wdt.txt
@@ -8,9 +8,49 @@ Required properties:
- reg: physical base address of the controller and length of memory mapped
region
+Optional properties:
+
+ - aspeed,reset-type = "cpu|soc|system|none"
+
+ Reset behavior - Whenever a timeout occurs the watchdog can be programmed
+ to generate one of three different, mutually exclusive, types of resets.
+
+ Type "none" can be specified to indicate that no resets are to be done.
+ This is useful in situations where another watchdog engine on chip is
+ to perform the reset.
+
+ If 'aspeed,reset-type=' is not specfied the default is to enable system
+ reset.
+
+ Reset types:
+
+ - cpu: Reset CPU on watchdog timeout
+
+ - soc: Reset 'System on Chip' on watchdog timeout
+
+ - system: Reset system on watchdog timeout
+
+ - none: No reset is performed on timeout. Assumes another watchdog
+ engine is responsible for this.
+
+ - aspeed,alt-boot: If property is present then boot from alternate block.
+ - aspeed,external-signal: If property is present then signal is sent to
+ external reset counter (only WDT1 and WDT2). If not
+ specified no external signal is sent.
+ - aspeed,ext-pulse-duration: External signal pulse duration in microseconds
+
+Optional properties for AST2500-compatible watchdogs:
+ - aspeed,ext-push-pull: If aspeed,external-signal is present, set the pin's
+ drive type to push-pull. The default is open-drain.
+ - aspeed,ext-active-high: If aspeed,external-signal is present and and the pin
+ is configured as push-pull, then set the pulse
+ polarity to active-high. The default is active-low.
+
Example:
wdt1: watchdog@1e785000 {
compatible = "aspeed,ast2400-wdt";
reg = <0x1e785000 0x1c>;
+ aspeed,reset-type = "system";
+ aspeed,external-signal;
};
diff --git a/Documentation/devicetree/bindings/watchdog/lantiq-wdt.txt b/Documentation/devicetree/bindings/watchdog/lantiq-wdt.txt
new file mode 100644
index 000000000000..18d4d8302702
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/lantiq-wdt.txt
@@ -0,0 +1,24 @@
+Lantiq WTD watchdog binding
+============================
+
+This describes the binding of the Lantiq watchdog driver.
+
+-------------------------------------------------------------------------------
+Required properties:
+- compatible : Should be one of
+ "lantiq,wdt"
+ "lantiq,xrx100-wdt"
+ "lantiq,xrx200-wdt", "lantiq,xrx100-wdt"
+ "lantiq,falcon-wdt"
+- reg : Address of the watchdog block
+- lantiq,rcu : A phandle to the RCU syscon (required for
+ "lantiq,falcon-wdt" and "lantiq,xrx100-wdt")
+
+-------------------------------------------------------------------------------
+Example for the watchdog on the xRX200 SoCs:
+ watchdog@803f0 {
+ compatible = "lantiq,xrx200-wdt", "lantiq,xrx100-wdt";
+ reg = <0x803f0 0x10>;
+
+ lantiq,rcu = <&rcu0>;
+ };
diff --git a/Documentation/devicetree/bindings/watchdog/meson-wdt.txt b/Documentation/devicetree/bindings/watchdog/meson-wdt.txt
index ae70185d96e6..8a6d84cb36c9 100644
--- a/Documentation/devicetree/bindings/watchdog/meson-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/meson-wdt.txt
@@ -2,7 +2,11 @@ Meson SoCs Watchdog timer
Required properties:
-- compatible : should be "amlogic,meson6-wdt" or "amlogic,meson8b-wdt"
+- compatible : depending on the SoC this should be one of:
+ "amlogic,meson6-wdt" on Meson6 SoCs
+ "amlogic,meson8-wdt" and "amlogic,meson6-wdt" on Meson8 SoCs
+ "amlogic,meson8b-wdt" on Meson8b SoCs
+ "amlogic,meson8m2-wdt" and "amlogic,meson8b-wdt" on Meson8m2 SoCs
- reg : Specifies base physical address and size of the registers.
Example:
diff --git a/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt b/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
index 20ada673ab0c..235de0683bb6 100644
--- a/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/mtk-wdt.txt
@@ -6,6 +6,8 @@ Required properties:
"mediatek,mt2701-wdt", "mediatek,mt6589-wdt": for MT2701
"mediatek,mt6589-wdt": for MT6589
"mediatek,mt6797-wdt", "mediatek,mt6589-wdt": for MT6797
+ "mediatek,mt7622-wdt", "mediatek,mt6589-wdt": for MT7622
+ "mediatek,mt7623-wdt", "mediatek,mt6589-wdt": for MT7623
- reg : Specifies base physical address and size of the registers.
diff --git a/Documentation/devicetree/bindings/watchdog/renesas-wdt.txt b/Documentation/devicetree/bindings/watchdog/renesas-wdt.txt
index 9e306afbbd49..bf6d1ca58af7 100644
--- a/Documentation/devicetree/bindings/watchdog/renesas-wdt.txt
+++ b/Documentation/devicetree/bindings/watchdog/renesas-wdt.txt
@@ -6,6 +6,7 @@ Required properties:
Examples with soctypes are:
- "renesas,r8a7795-wdt" (R-Car H3)
- "renesas,r8a7796-wdt" (R-Car M3-W)
+ - "renesas,r8a77995-wdt" (R-Car D3)
- "renesas,r7s72100-wdt" (RZ/A1)
When compatible with the generic version, nodes must list the SoC-specific
diff --git a/Documentation/fb/fbcon.txt b/Documentation/fb/fbcon.txt
index 4a9739abc860..a38d3aa4d189 100644
--- a/Documentation/fb/fbcon.txt
+++ b/Documentation/fb/fbcon.txt
@@ -148,6 +148,13 @@ C. Boot options
Actually, the underlying fb driver is totally ignorant of console
rotation.
+5. fbcon=margin:<color>
+
+ This option specifies the color of the margins. The margins are the
+ leftover area at the right and the bottom of the screen that are not
+ used by text. By default, this area will be black. The 'color' value
+ is an integer number that depends on the framebuffer driver being used.
+
C. Attaching, Detaching and Unloading
Before going on how to attach, detach and unload the framebuffer console, an
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking
index fe25787ff6d4..75d2d57e2c44 100644
--- a/Documentation/filesystems/Locking
+++ b/Documentation/filesystems/Locking
@@ -22,7 +22,7 @@ prototypes:
struct vfsmount *(*d_automount)(struct path *path);
int (*d_manage)(const struct path *, bool);
struct dentry *(*d_real)(struct dentry *, const struct inode *,
- unsigned int);
+ unsigned int, unsigned int);
locking rules:
rename_lock ->d_lock may block rcu-walk
diff --git a/Documentation/filesystems/f2fs.txt b/Documentation/filesystems/f2fs.txt
index 273ccb26885e..13c2ff034348 100644
--- a/Documentation/filesystems/f2fs.txt
+++ b/Documentation/filesystems/f2fs.txt
@@ -164,6 +164,16 @@ io_bits=%u Set the bit size of write IO requests. It should be set
with "mode=lfs".
usrquota Enable plain user disk quota accounting.
grpquota Enable plain group disk quota accounting.
+prjquota Enable plain project quota accounting.
+usrjquota=<file> Appoint specified file and type during mount, so that quota
+grpjquota=<file> information can be properly updated during recovery flow,
+prjjquota=<file> <quota file>: must be in root directory;
+jqfmt=<quota type> <quota type>: [vfsold,vfsv0,vfsv1].
+offusrjquota Turn off user journelled quota.
+offgrpjquota Turn off group journelled quota.
+offprjjquota Turn off project journelled quota.
+quota Enable plain user disk quota accounting.
+noquota Disable all plain disk quota option.
================================================================================
DEBUGFS ENTRIES
@@ -209,6 +219,15 @@ Files in /sys/fs/f2fs/<devname>
gc_idle = 1 will select the Cost Benefit approach
& setting gc_idle = 2 will select the greedy approach.
+ gc_urgent This parameter controls triggering background GCs
+ urgently or not. Setting gc_urgent = 0 [default]
+ makes back to default behavior, while if it is set
+ to 1, background thread starts to do GC by given
+ gc_urgent_sleep_time interval.
+
+ gc_urgent_sleep_time This parameter controls sleep time for gc_urgent.
+ 500 ms is set by default. See above gc_urgent.
+
reclaim_segments This parameter controls the number of prefree
segments to be reclaimed. If the number of prefree
segments is larger than the number of segments
diff --git a/Documentation/filesystems/orangefs.txt b/Documentation/filesystems/orangefs.txt
index 1dfdec790946..e2818b60a5c2 100644
--- a/Documentation/filesystems/orangefs.txt
+++ b/Documentation/filesystems/orangefs.txt
@@ -45,14 +45,11 @@ upstream version of the kernel client.
BUILDING THE USERSPACE FILESYSTEM ON A SINGLE SERVER
====================================================
-When Orangefs is upstream, "--with-kernel" shouldn't be needed, but
-until then the path to where the kernel with the Orangefs kernel client
-patch was built is needed to ensure that pvfs2-client-core (the bridge
-between kernel space and user space) will build properly. You can omit
---prefix if you don't care that things are sprinkled around in
-/usr/local.
+You can omit --prefix if you don't care that things are sprinkled around in
+/usr/local. As of version 2.9.6, Orangefs uses Berkeley DB by default, we
+will probably be changing the default to lmdb soon.
-./configure --prefix=/opt/ofs --with-kernel=/path/to/orangefs/kernel
+./configure --prefix=/opt/ofs --with-db-backend=lmdb
make
@@ -82,9 +79,6 @@ prove things are working with:
/opt/osf/bin/pvfs2-ls /mymountpoint
-You might not want to enforce selinux, it doesn't seem to matter by
-linux 3.11...
-
If stuff seems to be working, turn on the client core:
/opt/osf/sbin/pvfs2-client -p /opt/osf/sbin/pvfs2-client-core
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting
index 5fb17f49f7a2..93e0a2404532 100644
--- a/Documentation/filesystems/porting
+++ b/Documentation/filesystems/porting
@@ -228,7 +228,7 @@ anything from oops to silent memory corruption.
---
[mandatory]
- FS_NOMOUNT is gone. If you use it - just set MS_NOUSER in flags
+ FS_NOMOUNT is gone. If you use it - just set SB_NOUSER in flags
(see rootfs for one kind of solution and bdev/socket/pipe for another).
---
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt
index 405a3df759b3..5fd325df59e2 100644
--- a/Documentation/filesystems/vfs.txt
+++ b/Documentation/filesystems/vfs.txt
@@ -988,7 +988,7 @@ struct dentry_operations {
struct vfsmount *(*d_automount)(struct path *);
int (*d_manage)(const struct path *, bool);
struct dentry *(*d_real)(struct dentry *, const struct inode *,
- unsigned int);
+ unsigned int, unsigned int);
};
d_revalidate: called when the VFS needs to revalidate a dentry. This
diff --git a/Documentation/networking/filter.txt b/Documentation/networking/filter.txt
index e5e33bac2068..789b74dbe1d9 100644
--- a/Documentation/networking/filter.txt
+++ b/Documentation/networking/filter.txt
@@ -45,7 +45,7 @@ in many more places. There's xt_bpf for netfilter, cls_bpf in the kernel
qdisc layer, SECCOMP-BPF (SECure COMPuting [1]), and lots of other places
such as team driver, PTP code, etc where BPF is being used.
- [1] Documentation/prctl/seccomp_filter.txt
+ [1] Documentation/userspace-api/seccomp_filter.rst
Original BPF paper:
diff --git a/Documentation/translations/ko_KR/memory-barriers.txt b/Documentation/translations/ko_KR/memory-barriers.txt
index bc80fc0e210f..a7a813258013 100644
--- a/Documentation/translations/ko_KR/memory-barriers.txt
+++ b/Documentation/translations/ko_KR/memory-barriers.txt
@@ -523,11 +523,11 @@ CPU ì—게 기대할 수 있는 ìµœì†Œí•œì˜ ë³´ìž¥ì‚¬í•­ 몇가지가 있습니
즉, ACQUIRE 는 ìµœì†Œí•œì˜ "ì·¨ë“" ë™ìž‘처럼, 그리고 RELEASE 는 ìµœì†Œí•œì˜ "공개"
처럼 ë™ìž‘한다는 ì˜ë¯¸ìž…니다.
-core-api/atomic_ops.rst ì—서 설명ë˜ëŠ” 어토믹 오í¼ë ˆì´ì…˜ë“¤ 중ì—는 완전히
-순서잡힌 것들과 (배리어를 사용하지 않는) ì™„í™”ëœ ìˆœì„œì˜ ê²ƒë“¤ ì™¸ì— ACQUIRE 와
-RELEASE ë¶€ë¥˜ì˜ ê²ƒë“¤ë„ ì¡´ìž¬í•©ë‹ˆë‹¤. 로드와 스토어를 ëª¨ë‘ ìˆ˜í–‰í•˜ëŠ” ì¡°í•©ëœ ì–´í† ë¯¹
-오í¼ë ˆì´ì…˜ì—서, ACQUIRE 는 해당 오í¼ë ˆì´ì…˜ì˜ 로드 부분ì—ë§Œ ì ìš©ë˜ê³  RELEASE 는
-해당 오í¼ë ˆì´ì…˜ì˜ 스토어 부분ì—ë§Œ ì ìš©ë©ë‹ˆë‹¤.
+atomic_t.txt ì— ì„¤ëª…ëœ ì–´í† ë¯¹ 오í¼ë ˆì´ì…˜ë“¤ 중 ì¼ë¶€ëŠ” 완전히 순서잡힌 것들과
+(배리어를 사용하지 않는) ì™„í™”ëœ ìˆœì„œì˜ ê²ƒë“¤ ì™¸ì— ACQUIRE 와 RELEASE 부류ì˜
+ê²ƒë“¤ë„ ì¡´ìž¬í•©ë‹ˆë‹¤. 로드와 스토어를 ëª¨ë‘ ìˆ˜í–‰í•˜ëŠ” ì¡°í•©ëœ ì–´í† ë¯¹ 오í¼ë ˆì´ì…˜ì—서,
+ACQUIRE 는 해당 오í¼ë ˆì´ì…˜ì˜ 로드 부분ì—ë§Œ ì ìš©ë˜ê³  RELEASE 는 해당
+오í¼ë ˆì´ì…˜ì˜ 스토어 부분ì—ë§Œ ì ìš©ë©ë‹ˆë‹¤.
메모리 ë°°ë¦¬ì–´ë“¤ì€ ë‘ CPU ê°„, ë˜ëŠ” CPU 와 디바ì´ìФ ê°„ì— ìƒí˜¸ìž‘ìš©ì˜ ê°€ëŠ¥ì„±ì´ ìžˆì„
때ì—ë§Œ 필요합니다. 만약 ì–´ë–¤ ì½”ë“œì— ê·¸ëŸ° ìƒí˜¸ìž‘ìš©ì´ ì—†ì„ ê²ƒì´ ë³´ìž¥ëœë‹¤ë©´, 해당
@@ -617,7 +617,22 @@ RELEASE ë¶€ë¥˜ì˜ ê²ƒë“¤ë„ ì¡´ìž¬í•©ë‹ˆë‹¤. 로드와 스토어를 ëª¨ë‘ ìˆ˜í
ì´ ë³€ê²½ì€ ì•žì˜ ì²˜ìŒ ë‘가지 ê²°ê³¼ 중 í•˜ë‚˜ë§Œì´ ë°œìƒí•  수 있고, ì„¸ë²ˆì§¸ì˜ ê²°ê³¼ëŠ”
ë°œìƒí•  수 ì—†ë„ë¡ í•©ë‹ˆë‹¤.
-ë°ì´í„° ì˜ì¡´ì„± 배리어는 ì˜ì¡´ì  ì“°ê¸°ì— ëŒ€í•´ì„œë„ ìˆœì„œë¥¼ 잡아ì¤ë‹ˆë‹¤:
+
+[!] ì´ ìƒë‹¹ížˆ ë°˜ì§ê´€ì ì¸ ìƒí™©ì€ ë¶„ë¦¬ëœ ìºì‹œë¥¼ 가지는 기계들ì—서 가장 잘
+ë°œìƒí•˜ëŠ”ë°, 예를 들면 한 ìºì‹œ ë±…í¬ëŠ” ì§ìˆ˜ ë²ˆí˜¸ì˜ ìºì‹œ ë¼ì¸ë“¤ì„ 처리하고, 다른
+ë±…í¬ëŠ” 홀수 ë²ˆí˜¸ì˜ ìºì‹œ ë¼ì¸ë“¤ì„ 처리하는 ê²½ìš°ìž„ì„ ì•Œì•„ë‘시기 ë°”ëžë‹ˆë‹¤. í¬ì¸í„°
+P 는 ì§ìˆ˜ 번호 ìºì‹œ ë¼ì¸ì— 저장ë˜ì–´ 있고, 변수 B 는 홀수 번호 ìºì‹œ ë¼ì¸ì—
+저장ë˜ì–´ ìžˆì„ ìˆ˜ 있습니다. 여기서 ê°’ì„ ì½ì–´ì˜¤ëŠ” CPU ì˜ ìºì‹œì˜ 홀수 번호 처리
+ë±…í¬ëŠ” 열심히 ì¼ê°ì„ ì²˜ë¦¬ì¤‘ì¸ ë°˜ë©´ 홀수 번호 처리 ë±…í¬ëŠ” í•  ì¼ ì—†ì´ í•œê°€í•œ
+중ì´ë¼ë©´ í¬ì¸í„° P (&B) ì˜ ìƒˆë¡œìš´ ê°’ê³¼ 변수 B ì˜ ê¸°ì¡´ ê°’ (2) 를 ë³¼ 수 있습니다.
+
+
+ì˜ì¡´ì  ì“°ê¸°ë“¤ì˜ ìˆœì„œë¥¼ 맞추는ë°ì—는 ë°ì´í„° ì˜ì¡´ì„± 배리어가 필요치 않ì€ë°, ì´ëŠ”
+리눅스 커ë„ì´ ì§€ì›í•˜ëŠ” CPU ë“¤ì€ (1) 쓰기가 ì •ë§ë¡œ ì¼ì–´ë‚ ì§€, (2) 쓰기가 ì–´ë””ì—
+ì´ë£¨ì–´ì§ˆì§€, 그리고 (3) 쓰여질 ê°’ì„ í™•ì‹¤ížˆ 알기 전까지는 쓰기를 수행하지 않기
+때문입니다. 하지만 "컨트롤 ì˜ì¡´ì„±" 섹션과
+Documentation/RCU/rcu_dereference.txt 파ì¼ì„ ì£¼ì˜ ê¹Šê²Œ ì½ì–´ 주시기 ë°”ëžë‹ˆë‹¤:
+컴파ì¼ëŸ¬ëŠ” 매우 ì°½ì˜ì ì¸ ë§Žì€ ë°©ë²•ìœ¼ë¡œ 종ì†ì„±ì„ ê¹° 수 있습니다.
CPU 1 CPU 2
=============== ===============
@@ -626,28 +641,19 @@ RELEASE ë¶€ë¥˜ì˜ ê²ƒë“¤ë„ ì¡´ìž¬í•©ë‹ˆë‹¤. 로드와 스토어를 ëª¨ë‘ ìˆ˜í
<쓰기 배리어>
WRITE_ONCE(P, &B);
Q = READ_ONCE(P);
- <ë°ì´í„° ì˜ì¡´ì„± 배리어>
- *Q = 5;
+ WRITE_ONCE(*Q, 5);
-ì´ ë°ì´í„° ì˜ì¡´ì„± 배리어는 Q ë¡œì˜ ì½ê¸°ê°€ *Q ë¡œì˜ ìŠ¤í† ì–´ì™€ 순서를 맞추게
-í•´ì¤ë‹ˆë‹¤. ì´ëŠ” 다ìŒê³¼ ê°™ì€ ê²°ê³¼ë¥¼ 막습니다:
+ë”°ë¼ì„œ, Q ë¡œì˜ ì½ê¸°ì™€ *Q ë¡œì˜ ì“°ê¸° 사ì´ì—는 ë°ì´í„° 종ì†ì„± 배리어가 필요치
+않습니다. 달리 ë§í•˜ë©´, ë°ì´í„° 종ì†ì„± 배리어가 ì—†ë”ë¼ë„ ë‹¤ìŒ ê²°ê³¼ëŠ” ìƒê¸°ì§€
+않습니다:
(Q == &B) && (B == 4)
ì´ëŸ° íŒ¨í„´ì€ ë“œë¬¼ê²Œ 사용ë˜ì–´ì•¼ í•¨ì„ ì•Œì•„ ë‘시기 ë°”ëžë‹ˆë‹¤. 무엇보다ë„, ì˜ì¡´ì„±
순서 ê·œì¹™ì˜ ì˜ë„는 쓰기 ìž‘ì—…ì„ -예방- 해서 그로 ì¸í•´ ë°œìƒí•˜ëŠ” 비싼 ìºì‹œ 미스ë„
없애려는 것입니다. ì´ íŒ¨í„´ì€ ë“œë¬¼ê²Œ ë°œìƒí•˜ëŠ” ì—러 ì¡°ê±´ ê°™ì€ê²ƒë“¤ì„ 기ë¡í•˜ëŠ”ë°
-ì‚¬ìš©ë  ìˆ˜ 있고, ì´ë ‡ê²Œ 배리어를 사용해 순서를 지키게 í•¨ìœ¼ë¡œì¨ ê·¸ëŸ° 기ë¡ì´
-사ë¼ì§€ëŠ” ê²ƒì„ ë§‰ìŠµë‹ˆë‹¤.
-
-
-[!] ìƒë‹¹ížˆ 비ì§ê´€ì ì¸ ì´ ìƒí™©ì€ ë¶„ë¦¬ëœ ìºì‹œë¥¼ 가진 기계, 예를 들어 한 ìºì‹œ
-ë±…í¬ê°€ ì§ìˆ˜ë²ˆ ìºì‹œ ë¼ì¸ì„ 처리하고 다른 ë±…í¬ëŠ” 홀수번 ìºì‹œ ë¼ì¸ì„ 처리하는 기계
-등ì—서 가장 잘 ë°œìƒí•©ë‹ˆë‹¤. í¬ì¸í„° P 는 홀수 ë²ˆí˜¸ì˜ ìºì‹œ ë¼ì¸ì— 있고, 변수 B 는
-ì§ìˆ˜ 번호 ìºì‹œ ë¼ì¸ì— 있다고 ìƒê°í•´ 봅시다. 그런 ìƒíƒœì—서 ì½ê¸° ìž‘ì—…ì„ í•˜ëŠ” CPU
-ì˜ ì§ìˆ˜ë²ˆ ë±…í¬ëŠ” í•  ì¼ì´ 쌓여 매우 ë°”ì˜ì§€ë§Œ 홀수번 ë±…í¬ëŠ” í•  ì¼ì´ 없어 아무
-ì¼ë„ 하지 않고 있었다면, í¬ì¸í„° P 는 새 ê°’ (&B) ì„, 그리고 변수 B 는 옛날 ê°’
-(2) ì„ ê°€ì§€ê³  있는 ìƒíƒœê°€ 보여질 ìˆ˜ë„ ìžˆìŠµë‹ˆë‹¤.
+ì‚¬ìš©ë  ìˆ˜ 있으며, CPUì˜ ìžì—°ì ì¸ 순서 ë³´ìž¥ì´ ê·¸ëŸ° 기ë¡ë“¤ì„ 사ë¼ì§€ì§€ 않게
+í•´ì¤ë‹ˆë‹¤.
ë°ì´í„° ì˜ì¡´ì„± 배리어는 매우 중요한ë°, 예를 들어 RCU 시스템ì—서 그렇습니다.
@@ -1848,8 +1854,7 @@ Mandatory ë°°ë¦¬ì–´ë“¤ì€ SMP 시스템ì—ì„œë„ UP 시스템ì—ì„œë„ SMP 효ê³
ì´ ì½”ë“œëŠ” ê°ì²´ì˜ ì—…ë°ì´íŠ¸ëœ death 마í¬ê°€ ë ˆí¼ëŸ°ìФ ì¹´ìš´í„° ê°ì†Œ ë™ìž‘
*ì „ì—* ë³´ì¼ ê²ƒì„ ë³´ìž¥í•©ë‹ˆë‹¤.
- ë” ë§Žì€ ì •ë³´ë¥¼ 위해선 Documentation/core-api/atomic_ops.rst 문서를 참고하세요.
- 어디서 ì´ê²ƒë“¤ì„ 사용해야 í• ì§€ ê¶ê¸ˆí•˜ë‹¤ë©´ "어토믹 오í¼ë ˆì´ì…˜" 서브섹션ì„
+ ë” ë§Žì€ ì •ë³´ë¥¼ 위해선 Documentation/atomic_{t,bitops}.txt 문서를
참고하세요.
@@ -2468,86 +2473,7 @@ _않습니다_.
ì „ì²´ 메모리 배리어를 ë‚´í¬í•˜ê³  ë˜ ì¼ë¶€ëŠ” ë‚´í¬í•˜ì§€ 않지만, 커ë„ì—서 ìƒë‹¹ížˆ
ì˜ì¡´ì ìœ¼ë¡œ 사용하는 기능 중 하나입니다.
-ë©”ëª¨ë¦¬ì˜ ì–´ë–¤ ìƒíƒœë¥¼ 수정하고 해당 ìƒíƒœì— 대한 (ì˜ˆì „ì˜ ë˜ëŠ” 최신ì˜) 정보를
-리턴하는 어토믹 오í¼ë ˆì´ì…˜ì€ ëª¨ë‘ SMP-ì¡°ê±´ì  ë²”ìš© 메모리 배리어(smp_mb())를
-실제 오í¼ë ˆì´ì…˜ì˜ 앞과 ë’¤ì— ë‚´í¬í•©ë‹ˆë‹¤. ì´ëŸ° 오í¼ë ˆì´ì…˜ì€ 다ìŒì˜ 것들ì„
-í¬í•¨í•©ë‹ˆë‹¤:
-
- xchg();
- atomic_xchg(); atomic_long_xchg();
- atomic_inc_return(); atomic_long_inc_return();
- atomic_dec_return(); atomic_long_dec_return();
- atomic_add_return(); atomic_long_add_return();
- atomic_sub_return(); atomic_long_sub_return();
- atomic_inc_and_test(); atomic_long_inc_and_test();
- atomic_dec_and_test(); atomic_long_dec_and_test();
- atomic_sub_and_test(); atomic_long_sub_and_test();
- atomic_add_negative(); atomic_long_add_negative();
- test_and_set_bit();
- test_and_clear_bit();
- test_and_change_bit();
-
- /* exchange ì¡°ê±´ì´ ì„±ê³µí•  때 */
- cmpxchg();
- atomic_cmpxchg(); atomic_long_cmpxchg();
- atomic_add_unless(); atomic_long_add_unless();
-
-ì´ê²ƒë“¤ì€ 메모리 배리어 효과가 필요한 ACQUIRE 부류와 RELEASE 부류 오í¼ë ˆì´ì…˜ë“¤ì„
-구현할 때, 그리고 ê°ì²´ 해제를 위해 ë ˆí¼ëŸ°ìФ 카운터를 ì¡°ì •í•  때, ì•”ë¬µì  ë©”ëª¨ë¦¬
-배리어 효과가 필요한 ê³³ ë“±ì— ì‚¬ìš©ë©ë‹ˆë‹¤.
-
-
-다ìŒì˜ 오í¼ë ˆì´ì…˜ë“¤ì€ 메모리 배리어를 ë‚´í¬í•˜ì§€ _않기_ ë•Œë¬¸ì— ë¬¸ì œê°€ ë  ìˆ˜
-있지만, RELEASE ë¶€ë¥˜ì˜ ì˜¤í¼ë ˆì´ì…˜ë“¤ê³¼ ê°™ì€ ê²ƒë“¤ì„ êµ¬í˜„í•  때 ì‚¬ìš©ë  ìˆ˜ë„
-있습니다:
-
- atomic_set();
- set_bit();
- clear_bit();
- change_bit();
-
-ì´ê²ƒë“¤ì„ 사용할 때ì—는 필요하다면 ì ì ˆí•œ (예를 들면 smp_mb__before_atomic()
-ê°™ì€) 메모리 배리어가 명시ì ìœ¼ë¡œ 함께 사용ë˜ì–´ì•¼ 합니다.
-
-
-ì•„ëž˜ì˜ ê²ƒë“¤ë„ ë©”ëª¨ë¦¬ 배리어를 ë‚´í¬í•˜ì§€ _않기_ 때문ì—, ì¼ë¶€ 환경ì—서는 (예를
-들면 smp_mb__before_atomic() ê³¼ ê°™ì€) 명시ì ì¸ 메모리 배리어 ì‚¬ìš©ì´ í•„ìš”í•©ë‹ˆë‹¤.
-
- atomic_add();
- atomic_sub();
- atomic_inc();
- atomic_dec();
-
-ì´ê²ƒë“¤ì´ 통계 ìƒì„±ì„ 위해 사용ëœë‹¤ë©´, 그리고 통계 ë°ì´í„° 사ì´ì— 관계가 존재하지
-않는다면 메모리 배리어는 필요치 ì•Šì„ ê²ë‹ˆë‹¤.
-
-ê°ì²´ì˜ ìˆ˜ëª…ì„ ê´€ë¦¬í•˜ê¸° 위해 ë ˆí¼ëŸ°ìФ 카운팅 목ì ìœ¼ë¡œ 사용ëœë‹¤ë©´, ë ˆí¼ëŸ°ìФ
-카운터는 ë½ìœ¼ë¡œ 보호ë˜ëŠ” 섹션ì—서만 ì¡°ì •ë˜ê±°ë‚˜ 호출하는 ìª½ì´ ì´ë¯¸ 충분한
-ë ˆí¼ëŸ°ìŠ¤ë¥¼ 잡고 ìžˆì„ ê²ƒì´ê¸° ë•Œë¬¸ì— ë©”ëª¨ë¦¬ 배리어는 아마 í•„ìš” ì—†ì„ ê²ë‹ˆë‹¤.
-
-만약 ì–´ë–¤ ë½ì„ 구성하기 위해 사용ëœë‹¤ë©´, ë½ ê´€ë ¨ ë™ìž‘ì€ ì¼ë°˜ì ìœ¼ë¡œ ìž‘ì—…ì„ íŠ¹ì •
-순서대로 진행해야 하므로 메모리 배리어가 필요할 수 있습니다.
-
-기본ì ìœ¼ë¡œ, ê° ì‚¬ìš©ì²˜ì—서는 메모리 배리어가 필요한지 아닌지 충분히 고려해야
-합니다.
-
-ì•„ëž˜ì˜ ì˜¤í¼ë ˆì´ì…˜ë“¤ì€ 특별한 ë½ ê´€ë ¨ ë™ìž‘들입니다:
-
- test_and_set_bit_lock();
- clear_bit_unlock();
- __clear_bit_unlock();
-
-ì´ê²ƒë“¤ì€ ACQUIRE 류와 RELEASE ë¥˜ì˜ ì˜¤í¼ë ˆì´ì…˜ë“¤ì„ 구현합니다. ë½ ê´€ë ¨ ë„구를
-구현할 때ì—는 ì´ê²ƒë“¤ì„ 좀 ë” ì„ í˜¸í•˜ëŠ” íŽ¸ì´ ë‚˜ì€ë°, ì´ê²ƒë“¤ì˜ êµ¬í˜„ì€ ë§Žì€
-아키í…ì³ì—서 최ì í™” ë  ìˆ˜ 있기 때문입니다.
-
-[!] ì´ëŸ° ìƒí™©ì— 사용할 수 있는 특수한 메모리 배리어 ë„êµ¬ë“¤ì´ ìžˆìŠµë‹ˆë‹¤ë§Œ, ì¼ë¶€
-CPU ì—서는 사용ë˜ëŠ” 어토믹 ì¸ìŠ¤íŠ¸ëŸ­ì…˜ ìžì²´ì— 메모리 배리어가 ë‚´í¬ë˜ì–´ 있어서
-어토믹 오í¼ë ˆì´ì…˜ê³¼ 메모리 배리어를 함께 사용하는 게 불필요한 ì¼ì´ ë  ìˆ˜
-있는ë°, 그런 ê²½ìš°ì— ì´ íŠ¹ìˆ˜ 메모리 배리어 ë„êµ¬ë“¤ì€ no-op ì´ ë˜ì–´ 실질ì ìœ¼ë¡œ
-아무ì¼ë„ 하지 않습니다.
-
-ë” ë§Žì€ ë‚´ìš©ì„ ìœ„í•´ì„  Documentation/core-api/atomic_ops.rst 를 참고하세요.
+ë” ë§Žì€ ë‚´ìš©ì„ ìœ„í•´ì„  Documentation/atomic_t.txt 를 참고하세요.
디바ì´ìФ 액세스
diff --git a/Documentation/watchdog/watchdog-parameters.txt b/Documentation/watchdog/watchdog-parameters.txt
index b3526365ea8e..6f9d7b418917 100644
--- a/Documentation/watchdog/watchdog-parameters.txt
+++ b/Documentation/watchdog/watchdog-parameters.txt
@@ -117,7 +117,7 @@ nowayout: Watchdog cannot be stopped once started
-------------------------------------------------
iTCO_wdt:
heartbeat: Watchdog heartbeat in seconds.
- (5<=heartbeat<=74 (TCO v1) or 1226 (TCO v2), default=30)
+ (2<heartbeat<39 (TCO v1) or 613 (TCO v2), default=30)
nowayout: Watchdog cannot be stopped once started
(default=kernel config parameter)
-------------------------------------------------
diff --git a/MAINTAINERS b/MAINTAINERS
index f46a3225e398..2281af4b41b6 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -644,6 +644,11 @@ ALPS PS/2 TOUCHPAD DRIVER
R: Pali Rohár <pali.rohar@gmail.com>
F: drivers/input/mouse/alps.*
+ALTERA I2C CONTROLLER DRIVER
+M: Thor Thayer <thor.thayer@linux.intel.com>
+S: Maintained
+F: drivers/i2c/busses/i2c-altera.c
+
ALTERA MAILBOX DRIVER
M: Ley Foon Tan <lftan@altera.com>
L: nios2-dev@lists.rocketboards.org (moderated for non-subscribers)
@@ -855,6 +860,12 @@ S: Supported
F: drivers/android/
F: drivers/staging/android/
+ANDROID GOLDFISH RTC DRIVER
+M: Miodrag Dinic <miodrag.dinic@imgtec.com>
+S: Supported
+F: Documentation/devicetree/bindings/rtc/google,goldfish-rtc.txt
+F: drivers/rtc/rtc-goldfish.c
+
ANDROID ION DRIVER
M: Laura Abbott <labbott@redhat.com>
M: Sumit Semwal <sumit.semwal@linaro.org>
@@ -4385,6 +4396,12 @@ S: Supported
F: drivers/gpu/drm/nouveau/
F: include/uapi/drm/nouveau_drm.h
+DRM DRIVER FOR PERVASIVE DISPLAYS REPAPER PANELS
+M: Noralf Trønnes <noralf@tronnes.org>
+S: Maintained
+F: drivers/gpu/drm/tinydrm/repaper.c
+F: Documentation/devicetree/bindings/display/repaper.txt
+
DRM DRIVER FOR QEMU'S CIRRUS DEVICE
M: Dave Airlie <airlied@redhat.com>
M: Gerd Hoffmann <kraxel@redhat.com>
@@ -4403,12 +4420,6 @@ S: Maintained
F: drivers/gpu/drm/qxl/
F: include/uapi/drm/qxl_drm.h
-DRM DRIVER FOR PERVASIVE DISPLAYS REPAPER PANELS
-M: Noralf Trønnes <noralf@tronnes.org>
-S: Maintained
-F: drivers/gpu/drm/tinydrm/repaper.c
-F: Documentation/devicetree/bindings/display/repaper.txt
-
DRM DRIVER FOR RAGE 128 VIDEO CARDS
S: Orphan / Obsolete
F: drivers/gpu/drm/r128/
@@ -6202,22 +6213,22 @@ F: include/uapi/linux/if_hippi.h
F: net/802/hippi.c
F: drivers/net/hippi/
-HISILICON NETWORK SUBSYSTEM DRIVER
+HISILICON NETWORK SUBSYSTEM 3 DRIVER (HNS3)
M: Yisen Zhuang <yisen.zhuang@huawei.com>
M: Salil Mehta <salil.mehta@huawei.com>
L: netdev@vger.kernel.org
W: http://www.hisilicon.com
S: Maintained
-F: drivers/net/ethernet/hisilicon/
-F: Documentation/devicetree/bindings/net/hisilicon*.txt
+F: drivers/net/ethernet/hisilicon/hns3/
-HISILICON NETWORK SUBSYSTEM 3 DRIVER (HNS3)
+HISILICON NETWORK SUBSYSTEM DRIVER
M: Yisen Zhuang <yisen.zhuang@huawei.com>
M: Salil Mehta <salil.mehta@huawei.com>
L: netdev@vger.kernel.org
W: http://www.hisilicon.com
S: Maintained
-F: drivers/net/ethernet/hisilicon/hns3/
+F: drivers/net/ethernet/hisilicon/
+F: Documentation/devicetree/bindings/net/hisilicon*.txt
HISILICON ROCE DRIVER
M: Lijun Ou <oulijun@huawei.com>
@@ -6234,6 +6245,13 @@ S: Supported
F: drivers/scsi/hisi_sas/
F: Documentation/devicetree/bindings/scsi/hisilicon-sas.txt
+HMM - Heterogeneous Memory Management
+M: Jérôme Glisse <jglisse@redhat.com>
+L: linux-mm@kvack.org
+S: Maintained
+F: mm/hmm*
+F: include/linux/hmm*
+
HOST AP DRIVER
M: Jouni Malinen <j@w1.fi>
L: linux-wireless@vger.kernel.org
@@ -7500,19 +7518,6 @@ F: include/kvm/iodev.h
F: virt/kvm/*
F: tools/kvm/
-KERNEL VIRTUAL MACHINE FOR X86 (KVM/x86)
-M: Paolo Bonzini <pbonzini@redhat.com>
-M: Radim KrÄmář <rkrcmar@redhat.com>
-L: kvm@vger.kernel.org
-W: http://www.linux-kvm.org
-T: git git://git.kernel.org/pub/scm/virt/kvm/kvm.git
-S: Supported
-F: arch/x86/kvm/
-F: arch/x86/include/uapi/asm/kvm*
-F: arch/x86/include/asm/kvm*
-F: arch/x86/kernel/kvm.c
-F: arch/x86/kernel/kvmclock.c
-
KERNEL VIRTUAL MACHINE FOR AMD-V (KVM/amd)
M: Joerg Roedel <joro@8bytes.org>
L: kvm@vger.kernel.org
@@ -7535,17 +7540,6 @@ F: arch/arm/kvm/
F: virt/kvm/arm/
F: include/kvm/arm_*
-KERNEL VIRTUAL MACHINE FOR POWERPC (KVM/powerpc)
-M: Alexander Graf <agraf@suse.com>
-L: kvm-ppc@vger.kernel.org
-W: http://www.linux-kvm.org/
-T: git git://github.com/agraf/linux-2.6.git
-S: Supported
-F: arch/powerpc/include/uapi/asm/kvm*
-F: arch/powerpc/include/asm/kvm*
-F: arch/powerpc/kvm/
-F: arch/powerpc/kernel/kvm*
-
KERNEL VIRTUAL MACHINE FOR ARM64 (KVM/arm64)
M: Christoffer Dall <christoffer.dall@linaro.org>
M: Marc Zyngier <marc.zyngier@arm.com>
@@ -7564,6 +7558,17 @@ F: arch/mips/include/uapi/asm/kvm*
F: arch/mips/include/asm/kvm*
F: arch/mips/kvm/
+KERNEL VIRTUAL MACHINE FOR POWERPC (KVM/powerpc)
+M: Alexander Graf <agraf@suse.com>
+L: kvm-ppc@vger.kernel.org
+W: http://www.linux-kvm.org/
+T: git git://github.com/agraf/linux-2.6.git
+S: Supported
+F: arch/powerpc/include/uapi/asm/kvm*
+F: arch/powerpc/include/asm/kvm*
+F: arch/powerpc/kvm/
+F: arch/powerpc/kernel/kvm*
+
KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
M: Christian Borntraeger <borntraeger@de.ibm.com>
M: Cornelia Huck <cohuck@redhat.com>
@@ -7577,6 +7582,19 @@ F: arch/s390/include/asm/kvm*
F: arch/s390/kvm/
F: arch/s390/mm/gmap.c
+KERNEL VIRTUAL MACHINE FOR X86 (KVM/x86)
+M: Paolo Bonzini <pbonzini@redhat.com>
+M: Radim KrÄmář <rkrcmar@redhat.com>
+L: kvm@vger.kernel.org
+W: http://www.linux-kvm.org
+T: git git://git.kernel.org/pub/scm/virt/kvm/kvm.git
+S: Supported
+F: arch/x86/kvm/
+F: arch/x86/include/uapi/asm/kvm*
+F: arch/x86/include/asm/kvm*
+F: arch/x86/kernel/kvm.c
+F: arch/x86/kernel/kvmclock.c
+
KERNFS
M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
M: Tejun Heo <tj@kernel.org>
@@ -7699,6 +7717,7 @@ M: John Crispin <john@phrozen.org>
L: linux-mips@linux-mips.org
S: Maintained
F: arch/mips/lantiq
+F: drivers/soc/lantiq
LAPB module
L: linux-x25@vger.kernel.org
@@ -7816,13 +7835,6 @@ M: Sasha Levin <alexander.levin@verizon.com>
S: Maintained
F: tools/lib/lockdep/
-HMM - Heterogeneous Memory Management
-M: Jérôme Glisse <jglisse@redhat.com>
-L: linux-mm@kvack.org
-S: Maintained
-F: mm/hmm*
-F: include/linux/hmm*
-
LIBNVDIMM BLK: MMIO-APERTURE DRIVER
M: Ross Zwisler <ross.zwisler@linux.intel.com>
L: linux-nvdimm@lists.01.org
@@ -8417,6 +8429,14 @@ T: git git://linuxtv.org/media_tree.git
S: Supported
F: drivers/media/dvb-frontends/cxd2841er*
+MEDIA DRIVERS FOR DIGITAL DEVICES PCIE DEVICES
+M: Daniel Scheller <d.scheller.oss@gmail.com>
+L: linux-media@vger.kernel.org
+W: https://linuxtv.org
+T: git git://linuxtv.org/media_tree.git
+S: Maintained
+F: drivers/media/pci/ddbridge/*
+
MEDIA DRIVERS FOR FREESCALE IMX
M: Steve Longerbeam <slongerbeam@gmail.com>
M: Philipp Zabel <p.zabel@pengutronix.de>
@@ -8538,14 +8558,6 @@ T: git git://linuxtv.org/media_tree.git
S: Maintained
F: drivers/media/dvb-frontends/stv6111*
-MEDIA DRIVERS FOR DIGITAL DEVICES PCIE DEVICES
-M: Daniel Scheller <d.scheller.oss@gmail.com>
-L: linux-media@vger.kernel.org
-W: https://linuxtv.org
-T: git git://linuxtv.org/media_tree.git
-S: Maintained
-F: drivers/media/pci/ddbridge/*
-
MEDIA INPUT INFRASTRUCTURE (V4L/DVB)
M: Mauro Carvalho Chehab <mchehab@s-opensource.com>
M: Mauro Carvalho Chehab <mchehab@kernel.org>
@@ -8569,6 +8581,11 @@ F: include/uapi/linux/meye.h
F: include/uapi/linux/ivtv*
F: include/uapi/linux/uvcvideo.h
+MEDIATEK CIR DRIVER
+M: Sean Wang <sean.wang@mediatek.com>
+S: Maintained
+F: drivers/media/rc/mtk-cir.c
+
MEDIATEK ETHERNET DRIVER
M: Felix Fietkau <nbd@openwrt.org>
M: John Crispin <john@phrozen.org>
@@ -8609,11 +8626,6 @@ L: linux-wireless@vger.kernel.org
S: Maintained
F: drivers/net/wireless/mediatek/mt7601u/
-MEDIATEK CIR DRIVER
-M: Sean Wang <sean.wang@mediatek.com>
-S: Maintained
-F: drivers/media/rc/mtk-cir.c
-
MEDIATEK RANDOM NUMBER GENERATOR SUPPORT
M: Sean Wang <sean.wang@mediatek.com>
S: Maintained
@@ -8971,6 +8983,7 @@ M: Paul Burton <paul.burton@imgtec.com>
L: linux-mips@linux-mips.org
S: Supported
F: arch/mips/generic/
+F: arch/mips/tools/generic-board-config.sh
MIPS/LOONGSON1 ARCHITECTURE
M: Keguang Zhang <keguang.zhang@gmail.com>
@@ -8981,6 +8994,13 @@ F: arch/mips/include/asm/mach-loongson32/
F: drivers/*/*loongson1*
F: drivers/*/*/*loongson1*
+MIPS RINT INSTRUCTION EMULATION
+M: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
+L: linux-mips@linux-mips.org
+S: Supported
+F: arch/mips/math-emu/sp_rint.c
+F: arch/mips/math-emu/dp_rint.c
+
MIROSOUND PCM20 FM RADIO RECEIVER DRIVER
M: Hans Verkuil <hverkuil@xs4all.nl>
L: linux-media@vger.kernel.org
@@ -9858,6 +9878,12 @@ F: drivers/regulator/twl-regulator.c
F: drivers/regulator/twl6030-regulator.c
F: include/linux/i2c-omap.h
+ONION OMEGA2+ BOARD
+M: Harvey Hunt <harveyhuntnexus@gmail.com>
+L: linux-mips@linux-mips.org
+S: Maintained
+F: arch/mips/boot/dts/ralink/omega2p.dts
+
OMFS FILESYSTEM
M: Bob Copeland <me@bobcopeland.com>
L: linux-karma-devel@lists.sourceforge.net
@@ -10129,7 +10155,7 @@ F: include/uapi/linux/ppdev.h
F: Documentation/parport*.txt
PARAVIRT_OPS INTERFACE
-M: Jeremy Fitzhardinge <jeremy@goop.org>
+M: Juergen Gross <jgross@suse.com>
M: Chris Wright <chrisw@sous-sol.org>
M: Alok Kataria <akataria@vmware.com>
M: Rusty Russell <rusty@rustcorp.com.au>
@@ -10137,7 +10163,7 @@ L: virtualization@lists.linux-foundation.org
S: Supported
F: Documentation/virtual/paravirt_ops.txt
F: arch/*/kernel/paravirt*
-F: arch/*/include/asm/paravirt.h
+F: arch/*/include/asm/paravirt*.h
F: include/linux/hypervisor.h
PARIDE DRIVERS FOR PARALLEL PORT IDE DEVICES
@@ -11409,6 +11435,8 @@ RENESAS ETHERNET DRIVERS
R: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
L: netdev@vger.kernel.org
L: linux-renesas-soc@vger.kernel.org
+F: Documentation/devicetree/bindings/net/renesas,*.txt
+F: Documentation/devicetree/bindings/net/sh_eth.txt
F: drivers/net/ethernet/renesas/
F: include/linux/sh_eth.h
@@ -12836,6 +12864,18 @@ F: drivers/clocksource/arc_timer.c
F: drivers/tty/serial/arc_uart.c
T: git git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc.git
+SYNOPSYS ARC HSDK SDP pll clock driver
+M: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
+S: Supported
+F: drivers/clk/clk-hsdk-pll.c
+F: Documentation/devicetree/bindings/clock/snps,hsdk-pll-clock.txt
+
+SYNOPSYS ARC SDP clock driver
+M: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
+S: Supported
+F: drivers/clk/axs10x/*
+F: Documentation/devicetree/bindings/clock/snps,pll-clock.txt
+
SYNOPSYS ARC SDP platform support
M: Alexey Brodkin <abrodkin@synopsys.com>
S: Supported
@@ -14367,6 +14407,12 @@ L: netdev@vger.kernel.org
S: Maintained
F: drivers/net/vmxnet3/
+VOCORE VOCORE2 BOARD
+M: Harvey Hunt <harveyhuntnexus@gmail.com>
+L: linux-mips@linux-mips.org
+S: Maintained
+F: arch/mips/boot/dts/ralink/vocore2.dts
+
VOLTAGE AND CURRENT REGULATOR FRAMEWORK
M: Liam Girdwood <lgirdwood@gmail.com>
M: Mark Brown <broonie@kernel.org>
diff --git a/Makefile b/Makefile
index ab067d51ddf1..64cbc66cebca 100644
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
VERSION = 4
-PATCHLEVEL = 13
+PATCHLEVEL = 14
SUBLEVEL = 0
-EXTRAVERSION =
+EXTRAVERSION = -rc1
NAME = Fearless Coyote
# *DOCUMENTATION*
@@ -130,8 +130,8 @@ endif
ifneq ($(KBUILD_OUTPUT),)
# check that the output directory actually exists
saved-output := $(KBUILD_OUTPUT)
-KBUILD_OUTPUT := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) \
- && /bin/pwd)
+$(shell [ -d $(KBUILD_OUTPUT) ] || mkdir -p $(KBUILD_OUTPUT))
+KBUILD_OUTPUT := $(realpath $(KBUILD_OUTPUT))
$(if $(KBUILD_OUTPUT),, \
$(error failed to create output directory "$(saved-output)"))
@@ -978,7 +978,7 @@ ifdef CONFIG_HEADERS_CHECK
$(Q)$(MAKE) -f $(srctree)/Makefile headers_check
endif
ifdef CONFIG_GDB_SCRIPTS
- $(Q)ln -fsn `cd $(srctree) && /bin/pwd`/scripts/gdb/vmlinux-gdb.py
+ $(Q)ln -fsn $(abspath $(srctree)/scripts/gdb/vmlinux-gdb.py)
endif
ifdef CONFIG_TRIM_UNUSED_KSYMS
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh \
@@ -1129,16 +1129,6 @@ headerdep:
$(srctree)/scripts/headerdep.pl -I$(srctree)/include
# ---------------------------------------------------------------------------
-# Firmware install
-INSTALL_FW_PATH=$(INSTALL_MOD_PATH)/lib/firmware
-export INSTALL_FW_PATH
-
-PHONY += firmware_install
-firmware_install:
- @mkdir -p $(objtree)/firmware
- $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_install
-
-# ---------------------------------------------------------------------------
# Kernel headers
#Default location for installed headers
@@ -1216,7 +1206,6 @@ modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin
$(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order
@$(kecho) ' Building modules, stage 2.';
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
- $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modbuild
modules.builtin: $(vmlinux-dirs:%=%/modules.builtin)
$(Q)$(AWK) '!x[$$0]++' $^ > $(objtree)/modules.builtin
@@ -1238,7 +1227,7 @@ _modinst_:
@rm -rf $(MODLIB)/kernel
@rm -f $(MODLIB)/source
@mkdir -p $(MODLIB)/kernel
- @ln -s `cd $(srctree) && /bin/pwd` $(MODLIB)/source
+ @ln -s $(abspath $(srctree)) $(MODLIB)/source
@if [ ! $(objtree) -ef $(MODLIB)/build ]; then \
rm -f $(MODLIB)/build ; \
ln -s $(CURDIR) $(MODLIB)/build ; \
@@ -1252,7 +1241,6 @@ _modinst_:
# boot script depmod is the master version.
PHONY += _modinst_post
_modinst_post: _modinst_
- $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.fwinst obj=firmware __fw_modinst
$(call cmd,depmod)
ifeq ($(CONFIG_MODULE_SIG), y)
@@ -1375,8 +1363,6 @@ help:
@echo '* vmlinux - Build the bare kernel'
@echo '* modules - Build all modules'
@echo ' modules_install - Install all modules to INSTALL_MOD_PATH (default: /)'
- @echo ' firmware_install- Install all firmware to INSTALL_FW_PATH'
- @echo ' (default: $$(INSTALL_MOD_PATH)/lib/firmware)'
@echo ' dir/ - Build all files in dir and below'
@echo ' dir/file.[ois] - Build specified target only'
@echo ' dir/file.ll - Build the LLVM assembly file'
@@ -1630,11 +1616,11 @@ image_name:
# Clear a bunch of variables before executing the submake
tools/: FORCE
$(Q)mkdir -p $(objtree)/tools
- $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/
+ $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(src)/tools/
tools/%: FORCE
$(Q)mkdir -p $(objtree)/tools
- $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(shell cd $(objtree) && /bin/pwd) subdir=tools -C $(src)/tools/ $*
+ $(Q)$(MAKE) LDFLAGS= MAKEFLAGS="$(tools_silent) $(filter --j% -j,$(MAKEFLAGS))" O=$(abspath $(objtree)) subdir=tools -C $(src)/tools/ $*
# Single targets
# ---------------------------------------------------------------------------
diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c
index c4ffb441716c..877cec8f5ea2 100644
--- a/arch/arc/kernel/setup.c
+++ b/arch/arc/kernel/setup.c
@@ -510,7 +510,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
goto done;
}
- str = (char *)__get_free_page(GFP_TEMPORARY);
+ str = (char *)__get_free_page(GFP_KERNEL);
if (!str)
goto done;
diff --git a/arch/arc/kernel/troubleshoot.c b/arch/arc/kernel/troubleshoot.c
index 7e94476f3994..7d8c1d6c2f60 100644
--- a/arch/arc/kernel/troubleshoot.c
+++ b/arch/arc/kernel/troubleshoot.c
@@ -178,7 +178,7 @@ void show_regs(struct pt_regs *regs)
struct callee_regs *cregs;
char *buf;
- buf = (char *)__get_free_page(GFP_TEMPORARY);
+ buf = (char *)__get_free_page(GFP_KERNEL);
if (!buf)
return;
diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
index 195da38cb9a2..6d870421a7a6 100644
--- a/arch/arm/mach-at91/Kconfig
+++ b/arch/arm/mach-at91/Kconfig
@@ -26,6 +26,7 @@ config SOC_SAMA5D2
select HAVE_AT91_USB_CLK
select HAVE_AT91_H32MX
select HAVE_AT91_GENERATED_CLK
+ select HAVE_AT91_AUDIO_PLL
select PINCTRL_AT91PIO4
help
Select this if ou are using one of Atmel's SAMA5D2 family SoC.
@@ -125,6 +126,9 @@ config HAVE_AT91_H32MX
config HAVE_AT91_GENERATED_CLK
bool
+config HAVE_AT91_AUDIO_PLL
+ bool
+
config SOC_SAM_V4_V5
bool
diff --git a/arch/arm64/kernel/stacktrace.c b/arch/arm64/kernel/stacktrace.c
index 3144584617e7..76809ccd309c 100644
--- a/arch/arm64/kernel/stacktrace.c
+++ b/arch/arm64/kernel/stacktrace.c
@@ -140,7 +140,8 @@ void save_stack_trace_regs(struct pt_regs *regs, struct stack_trace *trace)
trace->entries[trace->nr_entries++] = ULONG_MAX;
}
-void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
+static noinline void __save_stack_trace(struct task_struct *tsk,
+ struct stack_trace *trace, unsigned int nosched)
{
struct stack_trace_data data;
struct stackframe frame;
@@ -150,15 +151,16 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
data.trace = trace;
data.skip = trace->skip;
+ data.no_sched_functions = nosched;
if (tsk != current) {
- data.no_sched_functions = 1;
frame.fp = thread_saved_fp(tsk);
frame.pc = thread_saved_pc(tsk);
} else {
- data.no_sched_functions = 0;
+ /* We don't want this function nor the caller */
+ data.skip += 2;
frame.fp = (unsigned long)__builtin_frame_address(0);
- frame.pc = (unsigned long)save_stack_trace_tsk;
+ frame.pc = (unsigned long)__save_stack_trace;
}
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
frame.graph = tsk->curr_ret_stack;
@@ -172,9 +174,15 @@ void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
}
EXPORT_SYMBOL_GPL(save_stack_trace_tsk);
+void save_stack_trace_tsk(struct task_struct *tsk, struct stack_trace *trace)
+{
+ __save_stack_trace(tsk, trace, 1);
+}
+
void save_stack_trace(struct stack_trace *trace)
{
- save_stack_trace_tsk(current, trace);
+ __save_stack_trace(current, trace, 0);
}
+
EXPORT_SYMBOL_GPL(save_stack_trace);
#endif
diff --git a/arch/ia64/Kconfig.debug b/arch/ia64/Kconfig.debug
index de9d507ba0fd..4763887ba368 100644
--- a/arch/ia64/Kconfig.debug
+++ b/arch/ia64/Kconfig.debug
@@ -56,9 +56,4 @@ config IA64_DEBUG_IRQ
and restore instructions. It's useful for tracking down spinlock
problems, but slow! If you're unsure, select N.
-config SYSVIPC_COMPAT
- bool
- depends on COMPAT && SYSVIPC
- default y
-
endmenu
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 48d91d5be4e9..cb7fcc4216fd 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -1627,14 +1627,6 @@ config CPU_R5500
NEC VR5500 and VR5500A series processors implement 64-bit MIPS IV
instruction set.
-config CPU_R6000
- bool "R6000"
- depends on SYS_HAS_CPU_R6000
- select CPU_SUPPORTS_32BIT_KERNEL
- help
- MIPS Technologies R6000 and R6000A series processors. Note these
- processors are extremely rare and the support for them is incomplete.
-
config CPU_NEVADA
bool "RM52xx"
depends on SYS_HAS_CPU_NEVADA
@@ -1950,9 +1942,6 @@ config SYS_HAS_CPU_R5432
config SYS_HAS_CPU_R5500
bool
-config SYS_HAS_CPU_R6000
- bool
-
config SYS_HAS_CPU_NEVADA
bool
@@ -2180,7 +2169,7 @@ config PAGE_SIZE_32KB
config PAGE_SIZE_64KB
bool "64kB"
- depends on !CPU_R3000 && !CPU_TX39XX && !CPU_R6000
+ depends on !CPU_R3000 && !CPU_TX39XX
help
Using 64kB page size will result in higher performance kernel at
the price of higher memory consumption. This option is available on
@@ -2248,11 +2237,11 @@ config CPU_HAS_PREFETCH
config CPU_GENERIC_DUMP_TLB
bool
- default y if !(CPU_R3000 || CPU_R6000 || CPU_R8000 || CPU_TX39XX)
+ default y if !(CPU_R3000 || CPU_R8000 || CPU_TX39XX)
config CPU_R4K_FPU
bool
- default y if !(CPU_R3000 || CPU_R6000 || CPU_TX39XX || CPU_CAVIUM_OCTEON)
+ default y if !(CPU_R3000 || CPU_TX39XX)
config CPU_R4K_CACHE_TLB
bool
@@ -2260,6 +2249,7 @@ config CPU_R4K_CACHE_TLB
config MIPS_MT_SMP
bool "MIPS MT SMP support (1 TC on each available VPE)"
+ default y
depends on SYS_SUPPORTS_MULTITHREADING && !CPU_MIPSR6 && !CPU_MICROMIPS
select CPU_MIPSR2_IRQ_VI
select CPU_MIPSR2_IRQ_EI
@@ -2376,7 +2366,6 @@ config MIPS_CPS
bool "MIPS Coherent Processing System support"
depends on SYS_SUPPORTS_MIPS_CPS
select MIPS_CM
- select MIPS_CPC
select MIPS_CPS_PM if HOTPLUG_CPU
select SMP
select SYNC_R4K if (CEVT_R4K || CSRC_R4K)
@@ -2393,11 +2382,11 @@ config MIPS_CPS
config MIPS_CPS_PM
depends on MIPS_CPS
- select MIPS_CPC
bool
config MIPS_CM
bool
+ select MIPS_CPC
config MIPS_CPC
bool
diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index bc2708c9ada4..a96d97a806c9 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -151,7 +151,6 @@ cflags-y += -fno-stack-check
#
cflags-$(CONFIG_CPU_R3000) += -march=r3000
cflags-$(CONFIG_CPU_TX39XX) += -march=r3900
-cflags-$(CONFIG_CPU_R6000) += -march=r6000 -Wa,--trap
cflags-$(CONFIG_CPU_R4300) += -march=r4300 -Wa,--trap
cflags-$(CONFIG_CPU_VR41XX) += -march=r4100 -Wa,--trap
cflags-$(CONFIG_CPU_R4X00) += -march=r4600 -Wa,--trap
@@ -291,7 +290,8 @@ KBUILD_CPPFLAGS += -DDATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0)
bootvars-y = VMLINUX_LOAD_ADDRESS=$(load-y) \
VMLINUX_ENTRY_ADDRESS=$(entry-y) \
- PLATFORM="$(platform-y)"
+ PLATFORM="$(platform-y)" \
+ ITS_INPUTS="$(its-y)"
ifdef CONFIG_32BIT
bootvars-y += ADDR_BITS=32
endif
@@ -299,6 +299,10 @@ ifdef CONFIG_64BIT
bootvars-y += ADDR_BITS=64
endif
+# This is required to get dwarf unwinding tables into .debug_frame
+# instead of .eh_frame so we don't discard them.
+KBUILD_CFLAGS += -fno-asynchronous-unwind-tables
+
LDFLAGS += -m $(ld-emul)
ifdef CONFIG_MIPS
@@ -500,8 +504,14 @@ $(eval $(call gen_generic_defconfigs,micro32,r2,eb el))
.PHONY: $(generic_defconfigs)
$(generic_defconfigs):
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/kconfig/merge_config.sh \
- -m -O $(objtree) $(srctree)/arch/$(ARCH)/configs/generic_defconfig $^ \
- $(foreach board,$(BOARDS),$(generic_config_dir)/board-$(board).config)
+ -m -O $(objtree) $(srctree)/arch/$(ARCH)/configs/generic_defconfig $^ | \
+ grep -Ev '^#'
+ $(Q)cp $(KCONFIG_CONFIG) $(objtree)/.config.$@
+ $(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig \
+ KCONFIG_CONFIG=$(objtree)/.config.$@ >/dev/null
+ $(Q)$(CONFIG_SHELL) $(srctree)/arch/$(ARCH)/tools/generic-board-config.sh \
+ $(srctree) $(objtree) $(objtree)/.config.$@ $(KCONFIG_CONFIG) \
+ "$(origin BOARDS)" $(BOARDS)
$(Q)$(MAKE) -f $(srctree)/Makefile olddefconfig
#
@@ -510,6 +520,19 @@ $(generic_defconfigs):
$(generic_config_dir)/%.config: ;
#
+# Prevent direct use of generic_defconfig, which is intended to be used as the
+# basis of the various ISA-specific targets generated above.
+#
+.PHONY: generic_defconfig
+generic_defconfig:
+ $(Q)echo "generic_defconfig is not intended for direct use, but should instead be"
+ $(Q)echo "used via an ISA-specific target from the following list:"
+ $(Q)echo
+ $(Q)for cfg in $(generic_defconfigs); do echo " $${cfg}"; done
+ $(Q)echo
+ $(Q)false
+
+#
# Legacy defconfig compatibility - these targets used to be real defconfigs but
# now that the boards have been converted to use the generic kernel they are
# wrappers around the generic rules above.
diff --git a/arch/mips/alchemy/devboards/db1200.c b/arch/mips/alchemy/devboards/db1200.c
index 83831002c832..da7663770425 100644
--- a/arch/mips/alchemy/devboards/db1200.c
+++ b/arch/mips/alchemy/devboards/db1200.c
@@ -344,28 +344,32 @@ static struct platform_device db1200_ide_dev = {
/* SD carddetects: they're supposed to be edge-triggered, but ack
* doesn't seem to work (CPLD Rev 2). Instead, the screaming one
- * is disabled and its counterpart enabled. The 500ms timeout is
- * because the carddetect isn't debounced in hardware.
+ * is disabled and its counterpart enabled. The 200ms timeout is
+ * because the carddetect usually triggers twice, after debounce.
*/
static irqreturn_t db1200_mmc_cd(int irq, void *ptr)
{
- void(*mmc_cd)(struct mmc_host *, unsigned long);
+ disable_irq_nosync(irq);
+ return IRQ_WAKE_THREAD;
+}
- if (irq == DB1200_SD0_INSERT_INT) {
- disable_irq_nosync(DB1200_SD0_INSERT_INT);
- enable_irq(DB1200_SD0_EJECT_INT);
- } else {
- disable_irq_nosync(DB1200_SD0_EJECT_INT);
- enable_irq(DB1200_SD0_INSERT_INT);
- }
+static irqreturn_t db1200_mmc_cdfn(int irq, void *ptr)
+{
+ void (*mmc_cd)(struct mmc_host *, unsigned long);
/* link against CONFIG_MMC=m */
mmc_cd = symbol_get(mmc_detect_change);
if (mmc_cd) {
- mmc_cd(ptr, msecs_to_jiffies(500));
+ mmc_cd(ptr, msecs_to_jiffies(200));
symbol_put(mmc_detect_change);
}
+ msleep(100); /* debounce */
+ if (irq == DB1200_SD0_INSERT_INT)
+ enable_irq(DB1200_SD0_EJECT_INT);
+ else
+ enable_irq(DB1200_SD0_INSERT_INT);
+
return IRQ_HANDLED;
}
@@ -374,13 +378,13 @@ static int db1200_mmc_cd_setup(void *mmc_host, int en)
int ret;
if (en) {
- ret = request_irq(DB1200_SD0_INSERT_INT, db1200_mmc_cd,
- 0, "sd_insert", mmc_host);
+ ret = request_threaded_irq(DB1200_SD0_INSERT_INT, db1200_mmc_cd,
+ db1200_mmc_cdfn, 0, "sd_insert", mmc_host);
if (ret)
goto out;
- ret = request_irq(DB1200_SD0_EJECT_INT, db1200_mmc_cd,
- 0, "sd_eject", mmc_host);
+ ret = request_threaded_irq(DB1200_SD0_EJECT_INT, db1200_mmc_cd,
+ db1200_mmc_cdfn, 0, "sd_eject", mmc_host);
if (ret) {
free_irq(DB1200_SD0_INSERT_INT, mmc_host);
goto out;
@@ -436,23 +440,27 @@ static struct led_classdev db1200_mmc_led = {
static irqreturn_t pb1200_mmc1_cd(int irq, void *ptr)
{
- void(*mmc_cd)(struct mmc_host *, unsigned long);
+ disable_irq_nosync(irq);
+ return IRQ_WAKE_THREAD;
+}
- if (irq == PB1200_SD1_INSERT_INT) {
- disable_irq_nosync(PB1200_SD1_INSERT_INT);
- enable_irq(PB1200_SD1_EJECT_INT);
- } else {
- disable_irq_nosync(PB1200_SD1_EJECT_INT);
- enable_irq(PB1200_SD1_INSERT_INT);
- }
+static irqreturn_t pb1200_mmc1_cdfn(int irq, void *ptr)
+{
+ void (*mmc_cd)(struct mmc_host *, unsigned long);
/* link against CONFIG_MMC=m */
mmc_cd = symbol_get(mmc_detect_change);
if (mmc_cd) {
- mmc_cd(ptr, msecs_to_jiffies(500));
+ mmc_cd(ptr, msecs_to_jiffies(200));
symbol_put(mmc_detect_change);
}
+ msleep(100); /* debounce */
+ if (irq == PB1200_SD1_INSERT_INT)
+ enable_irq(PB1200_SD1_EJECT_INT);
+ else
+ enable_irq(PB1200_SD1_INSERT_INT);
+
return IRQ_HANDLED;
}
@@ -461,13 +469,13 @@ static int pb1200_mmc1_cd_setup(void *mmc_host, int en)
int ret;
if (en) {
- ret = request_irq(PB1200_SD1_INSERT_INT, pb1200_mmc1_cd, 0,
- "sd1_insert", mmc_host);
+ ret = request_threaded_irq(PB1200_SD1_INSERT_INT, pb1200_mmc1_cd,
+ pb1200_mmc1_cdfn, 0, "sd1_insert", mmc_host);
if (ret)
goto out;
- ret = request_irq(PB1200_SD1_EJECT_INT, pb1200_mmc1_cd, 0,
- "sd1_eject", mmc_host);
+ ret = request_threaded_irq(PB1200_SD1_EJECT_INT, pb1200_mmc1_cd,
+ pb1200_mmc1_cdfn, 0, "sd1_eject", mmc_host);
if (ret) {
free_irq(PB1200_SD1_INSERT_INT, mmc_host);
goto out;
diff --git a/arch/mips/alchemy/devboards/db1300.c b/arch/mips/alchemy/devboards/db1300.c
index 3e7fbdbdb3c4..cd1ae29f95a3 100644
--- a/arch/mips/alchemy/devboards/db1300.c
+++ b/arch/mips/alchemy/devboards/db1300.c
@@ -450,24 +450,27 @@ static struct platform_device db1300_ide_dev = {
static irqreturn_t db1300_mmc_cd(int irq, void *ptr)
{
- void(*mmc_cd)(struct mmc_host *, unsigned long);
+ disable_irq_nosync(irq);
+ return IRQ_WAKE_THREAD;
+}
- /* disable the one currently screaming. No other way to shut it up */
- if (irq == DB1300_SD1_INSERT_INT) {
- disable_irq_nosync(DB1300_SD1_INSERT_INT);
- enable_irq(DB1300_SD1_EJECT_INT);
- } else {
- disable_irq_nosync(DB1300_SD1_EJECT_INT);
- enable_irq(DB1300_SD1_INSERT_INT);
- }
+static irqreturn_t db1300_mmc_cdfn(int irq, void *ptr)
+{
+ void (*mmc_cd)(struct mmc_host *, unsigned long);
/* link against CONFIG_MMC=m. We can only be called once MMC core has
* initialized the controller, so symbol_get() should always succeed.
*/
mmc_cd = symbol_get(mmc_detect_change);
- mmc_cd(ptr, msecs_to_jiffies(500));
+ mmc_cd(ptr, msecs_to_jiffies(200));
symbol_put(mmc_detect_change);
+ msleep(100); /* debounce */
+ if (irq == DB1300_SD1_INSERT_INT)
+ enable_irq(DB1300_SD1_EJECT_INT);
+ else
+ enable_irq(DB1300_SD1_INSERT_INT);
+
return IRQ_HANDLED;
}
@@ -487,13 +490,13 @@ static int db1300_mmc_cd_setup(void *mmc_host, int en)
int ret;
if (en) {
- ret = request_irq(DB1300_SD1_INSERT_INT, db1300_mmc_cd, 0,
- "sd_insert", mmc_host);
+ ret = request_threaded_irq(DB1300_SD1_INSERT_INT, db1300_mmc_cd,
+ db1300_mmc_cdfn, 0, "sd_insert", mmc_host);
if (ret)
goto out;
- ret = request_irq(DB1300_SD1_EJECT_INT, db1300_mmc_cd, 0,
- "sd_eject", mmc_host);
+ ret = request_threaded_irq(DB1300_SD1_EJECT_INT, db1300_mmc_cd,
+ db1300_mmc_cdfn, 0, "sd_eject", mmc_host);
if (ret) {
free_irq(DB1300_SD1_INSERT_INT, mmc_host);
goto out;
diff --git a/arch/mips/alchemy/devboards/db1xxx.c b/arch/mips/alchemy/devboards/db1xxx.c
index 2d47f951121a..c9ad28995cd2 100644
--- a/arch/mips/alchemy/devboards/db1xxx.c
+++ b/arch/mips/alchemy/devboards/db1xxx.c
@@ -2,6 +2,7 @@
* Alchemy DB/PB1xxx board support.
*/
+#include <asm/prom.h>
#include <asm/mach-au1x00/au1000.h>
#include <asm/mach-db1x00/bcsr.h>
@@ -97,6 +98,7 @@ arch_initcall(db1xxx_arch_init);
static int __init db1xxx_dev_init(void)
{
+ mips_set_machine_name(board_type_str());
switch (BCSR_WHOAMI_BOARD(bcsr_read(BCSR_WHOAMI))) {
case BCSR_WHOAMI_DB1000:
case BCSR_WHOAMI_DB1500:
diff --git a/arch/mips/ar7/clock.c b/arch/mips/ar7/clock.c
index dda422a0f36c..0137656107a9 100644
--- a/arch/mips/ar7/clock.c
+++ b/arch/mips/ar7/clock.c
@@ -430,6 +430,9 @@ EXPORT_SYMBOL(clk_disable);
unsigned long clk_get_rate(struct clk *clk)
{
+ if (!clk)
+ return 0;
+
return clk->rate;
}
EXPORT_SYMBOL(clk_get_rate);
diff --git a/arch/mips/ath79/clock.c b/arch/mips/ath79/clock.c
index fa845953f736..6b1000b6a6a6 100644
--- a/arch/mips/ath79/clock.c
+++ b/arch/mips/ath79/clock.c
@@ -487,17 +487,16 @@ static void __init ath79_clocks_init_dt_ng(struct device_node *np)
{
struct clk *ref_clk;
void __iomem *pll_base;
- const char *dnfn = of_node_full_name(np);
ref_clk = of_clk_get(np, 0);
if (IS_ERR(ref_clk)) {
- pr_err("%s: of_clk_get failed\n", dnfn);
+ pr_err("%pOF: of_clk_get failed\n", np);
goto err;
}
pll_base = of_iomap(np, 0);
if (!pll_base) {
- pr_err("%s: can't map pll registers\n", dnfn);
+ pr_err("%pOF: can't map pll registers\n", np);
goto err_clk;
}
@@ -506,12 +505,12 @@ static void __init ath79_clocks_init_dt_ng(struct device_node *np)
else if (of_device_is_compatible(np, "qca,ar9330-pll"))
ar9330_clk_init(ref_clk, pll_base);
else {
- pr_err("%s: could not find any appropriate clk_init()\n", dnfn);
+ pr_err("%pOF: could not find any appropriate clk_init()\n", np);
goto err_iounmap;
}
if (of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data)) {
- pr_err("%s: could not register clk provider\n", dnfn);
+ pr_err("%pOF: could not register clk provider\n", np);
goto err_iounmap;
}
diff --git a/arch/mips/bcm63xx/clk.c b/arch/mips/bcm63xx/clk.c
index 73626040e4d6..19577f771c1f 100644
--- a/arch/mips/bcm63xx/clk.c
+++ b/arch/mips/bcm63xx/clk.c
@@ -339,6 +339,9 @@ EXPORT_SYMBOL(clk_disable);
unsigned long clk_get_rate(struct clk *clk)
{
+ if (!clk)
+ return 0;
+
return clk->rate;
}
diff --git a/arch/mips/boot/Makefile b/arch/mips/boot/Makefile
index 145b5ce8eb7e..1bd5c4f00d19 100644
--- a/arch/mips/boot/Makefile
+++ b/arch/mips/boot/Makefile
@@ -118,6 +118,12 @@ ifeq ($(ADDR_BITS),64)
itb_addr_cells = 2
endif
+quiet_cmd_its_cat = CAT $@
+ cmd_its_cat = cat $^ >$@
+
+$(obj)/vmlinux.its.S: $(addprefix $(srctree)/arch/mips/$(PLATFORM)/,$(ITS_INPUTS))
+ $(call if_changed,its_cat)
+
quiet_cmd_cpp_its_S = ITS $@
cmd_cpp_its_S = $(CPP) $(cpp_flags) -P -C -o $@ $< \
-DKERNEL_NAME="\"Linux $(KERNELRELEASE)\"" \
@@ -128,19 +134,19 @@ quiet_cmd_cpp_its_S = ITS $@
-DADDR_BITS=$(ADDR_BITS) \
-DADDR_CELLS=$(itb_addr_cells)
-$(obj)/vmlinux.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
+$(obj)/vmlinux.its: $(obj)/vmlinux.its.S $(VMLINUX) FORCE
$(call if_changed_dep,cpp_its_S,none,vmlinux.bin)
-$(obj)/vmlinux.gz.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
+$(obj)/vmlinux.gz.its: $(obj)/vmlinux.its.S $(VMLINUX) FORCE
$(call if_changed_dep,cpp_its_S,gzip,vmlinux.bin.gz)
-$(obj)/vmlinux.bz2.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
+$(obj)/vmlinux.bz2.its: $(obj)/vmlinux.its.S $(VMLINUX) FORCE
$(call if_changed_dep,cpp_its_S,bzip2,vmlinux.bin.bz2)
-$(obj)/vmlinux.lzma.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
+$(obj)/vmlinux.lzma.its: $(obj)/vmlinux.its.S $(VMLINUX) FORCE
$(call if_changed_dep,cpp_its_S,lzma,vmlinux.bin.lzma)
-$(obj)/vmlinux.lzo.its: $(srctree)/arch/mips/$(PLATFORM)/vmlinux.its.S $(VMLINUX) FORCE
+$(obj)/vmlinux.lzo.its: $(obj)/vmlinux.its.S $(VMLINUX) FORCE
$(call if_changed_dep,cpp_its_S,lzo,vmlinux.bin.lzo)
quiet_cmd_itb-image = ITB $@
diff --git a/arch/mips/boot/dts/Makefile b/arch/mips/boot/dts/Makefile
index b9db49203e0c..cbac26ce063e 100644
--- a/arch/mips/boot/dts/Makefile
+++ b/arch/mips/boot/dts/Makefile
@@ -5,6 +5,7 @@ dts-dirs += ingenic
dts-dirs += lantiq
dts-dirs += mti
dts-dirs += netlogic
+dts-dirs += ni
dts-dirs += pic32
dts-dirs += qca
dts-dirs += ralink
diff --git a/arch/mips/boot/dts/ingenic/ci20.dts b/arch/mips/boot/dts/ingenic/ci20.dts
index fd138d9978c1..6c381844929c 100644
--- a/arch/mips/boot/dts/ingenic/ci20.dts
+++ b/arch/mips/boot/dts/ingenic/ci20.dts
@@ -1,6 +1,7 @@
/dts-v1/;
#include "jz4780.dtsi"
+#include <dt-bindings/gpio/gpio.h>
/ {
compatible = "img,ci20", "ingenic,jz4780";
@@ -21,6 +22,13 @@
reg = <0x0 0x10000000
0x30000000 0x30000000>;
};
+
+ eth0_power: fixedregulator@0 {
+ compatible = "regulator-fixed";
+ regulator-name = "eth0_power";
+ gpio = <&gpb 25 GPIO_ACTIVE_LOW>;
+ enable-active-high;
+ };
};
&ext {
@@ -123,6 +131,29 @@
};
};
};
+
+ dm9000@6 {
+ compatible = "davicom,dm9000";
+ davicom,no-eeprom;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&pins_nemc_cs6>;
+
+ reg = <6 0 1 /* addr */
+ 6 2 1>; /* data */
+
+ ingenic,nemc-tAS = <15>;
+ ingenic,nemc-tAH = <10>;
+ ingenic,nemc-tBP = <20>;
+ ingenic,nemc-tAW = <50>;
+ ingenic,nemc-tSTRV = <100>;
+
+ reset-gpios = <&gpf 12 GPIO_ACTIVE_HIGH>;
+ vcc-supply = <&eth0_power>;
+
+ interrupt-parent = <&gpe>;
+ interrupts = <19 4>;
+ };
};
&bch {
@@ -165,4 +196,10 @@
groups = "nemc-cs1";
bias-disable;
};
+
+ pins_nemc_cs6: nemc-cs6 {
+ function = "nemc-cs6";
+ groups = "nemc-cs6";
+ bias-disable;
+ };
};
diff --git a/arch/mips/boot/dts/ingenic/jz4780.dtsi b/arch/mips/boot/dts/ingenic/jz4780.dtsi
index 4853ef67b3ab..e906134ecaef 100644
--- a/arch/mips/boot/dts/ingenic/jz4780.dtsi
+++ b/arch/mips/boot/dts/ingenic/jz4780.dtsi
@@ -44,6 +44,17 @@
#clock-cells = <1>;
};
+ rtc_dev: rtc@10003000 {
+ compatible = "ingenic,jz4780-rtc";
+ reg = <0x10003000 0x4c>;
+
+ interrupt-parent = <&intc>;
+ interrupts = <32>;
+
+ clocks = <&cgu JZ4780_CLK_RTCLK>;
+ clock-names = "rtc";
+ };
+
pinctrl: pin-controller@10010000 {
compatible = "ingenic,jz4780-pinctrl";
reg = <0x10010000 0x600>;
diff --git a/arch/mips/boot/dts/ni/169445.dts b/arch/mips/boot/dts/ni/169445.dts
new file mode 100644
index 000000000000..5389ef46c480
--- /dev/null
+++ b/arch/mips/boot/dts/ni/169445.dts
@@ -0,0 +1,100 @@
+/dts-v1/;
+
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "ni,169445";
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cpu@0 {
+ device_type = "cpu";
+ compatible = "mti,mips14KEc";
+ clocks = <&baseclk>;
+ reg = <0>;
+ };
+ };
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x10000000>;
+ };
+
+ baseclk: baseclock {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <50000000>;
+ };
+
+ cpu_intc: interrupt-controller {
+ #address-cells = <0>;
+ compatible = "mti,cpu-interrupt-controller";
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ };
+
+ ahb@1f300000 {
+ compatible = "simple-bus";
+ #address-cells = <1>;
+ #size-cells = <1>;
+ ranges = <0x0 0x1f300000 0x80FFF>;
+
+ gpio1: gpio@10 {
+ compatible = "ni,169445-nand-gpio";
+ reg = <0x10 0x4>;
+ reg-names = "dat";
+ gpio-controller;
+ #gpio-cells = <2>;
+ };
+
+ gpio2: gpio@14 {
+ compatible = "ni,169445-nand-gpio";
+ reg = <0x14 0x4>;
+ reg-names = "dat";
+ gpio-controller;
+ #gpio-cells = <2>;
+ no-output;
+ };
+
+ nand@0 {
+ compatible = "gpio-control-nand";
+ nand-on-flash-bbt;
+ nand-ecc-mode = "soft_bch";
+ nand-ecc-step-size = <512>;
+ nand-ecc-strength = <4>;
+ reg = <0x0 4>;
+ gpios = <&gpio2 0 0>, /* rdy */
+ <&gpio1 1 0>, /* nce */
+ <&gpio1 2 0>, /* ale */
+ <&gpio1 3 0>, /* cle */
+ <&gpio1 4 0>; /* nwp */
+ };
+
+ serial@80000 {
+ compatible = "ns16550a";
+ reg = <0x80000 0x1000>;
+ interrupt-parent = <&cpu_intc>;
+ interrupts = <6>;
+ clocks = <&baseclk>;
+ reg-shift = <0>;
+ };
+
+ ethernet@40000 {
+ compatible = "snps,dwmac-4.10a";
+ interrupt-parent = <&cpu_intc>;
+ interrupts = <5>;
+ interrupt-names = "macirq";
+ reg = <0x40000 0x2000>;
+ clock-names = "stmmaceth", "pclk";
+ clocks = <&baseclk>, <&baseclk>;
+
+ phy-mode = "rgmii";
+
+ fixed-link {
+ speed = <1000>;
+ full-duplex;
+ };
+ };
+ };
+};
diff --git a/arch/mips/boot/dts/ni/Makefile b/arch/mips/boot/dts/ni/Makefile
new file mode 100644
index 000000000000..66cfdffc51c2
--- /dev/null
+++ b/arch/mips/boot/dts/ni/Makefile
@@ -0,0 +1,7 @@
+dtb-$(CONFIG_FIT_IMAGE_FDT_NI169445) += 169445.dtb
+
+# Force kbuild to make empty built-in.o if necessary
+obj- += dummy.o
+
+always := $(dtb-y)
+clean-files := *.dtb *.dtb.S
diff --git a/arch/mips/boot/dts/ralink/Makefile b/arch/mips/boot/dts/ralink/Makefile
index 2a7225954bf6..55e2937b61f3 100644
--- a/arch/mips/boot/dts/ralink/Makefile
+++ b/arch/mips/boot/dts/ralink/Makefile
@@ -2,6 +2,8 @@ dtb-$(CONFIG_DTB_RT2880_EVAL) += rt2880_eval.dtb
dtb-$(CONFIG_DTB_RT305X_EVAL) += rt3052_eval.dtb
dtb-$(CONFIG_DTB_RT3883_EVAL) += rt3883_eval.dtb
dtb-$(CONFIG_DTB_MT7620A_EVAL) += mt7620a_eval.dtb
+dtb-$(CONFIG_DTB_OMEGA2P) += omega2p.dtb
+dtb-$(CONFIG_DTB_VOCORE2) += vocore2.dtb
obj-y += $(patsubst %.dtb, %.dtb.o, $(dtb-y))
diff --git a/arch/mips/boot/dts/ralink/mt7628a.dtsi b/arch/mips/boot/dts/ralink/mt7628a.dtsi
new file mode 100644
index 000000000000..9ff7e8faaecc
--- /dev/null
+++ b/arch/mips/boot/dts/ralink/mt7628a.dtsi
@@ -0,0 +1,126 @@
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "ralink,mt7628a-soc";
+
+ cpus {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ cpu@0 {
+ compatible = "mti,mips24KEc";
+ device_type = "cpu";
+ reg = <0>;
+ };
+ };
+
+ resetc: reset-controller {
+ compatible = "ralink,rt2880-reset";
+ #reset-cells = <1>;
+ };
+
+ cpuintc: interrupt-controller {
+ #address-cells = <0>;
+ #interrupt-cells = <1>;
+ interrupt-controller;
+ compatible = "mti,cpu-interrupt-controller";
+ };
+
+ palmbus@10000000 {
+ compatible = "palmbus";
+ reg = <0x10000000 0x200000>;
+ ranges = <0x0 0x10000000 0x1FFFFF>;
+
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ sysc: system-controller@0 {
+ compatible = "ralink,mt7620a-sysc", "syscon";
+ reg = <0x0 0x100>;
+ };
+
+ intc: interrupt-controller@200 {
+ compatible = "ralink,rt2880-intc";
+ reg = <0x200 0x100>;
+
+ interrupt-controller;
+ #interrupt-cells = <1>;
+
+ resets = <&resetc 9>;
+ reset-names = "intc";
+
+ interrupt-parent = <&cpuintc>;
+ interrupts = <2>;
+
+ ralink,intc-registers = <0x9c 0xa0
+ 0x6c 0xa4
+ 0x80 0x78>;
+ };
+
+ memory-controller@300 {
+ compatible = "ralink,mt7620a-memc";
+ reg = <0x300 0x100>;
+ };
+
+ uart0: uartlite@c00 {
+ compatible = "ns16550a";
+ reg = <0xc00 0x100>;
+
+ resets = <&resetc 12>;
+ reset-names = "uart0";
+
+ interrupt-parent = <&intc>;
+ interrupts = <20>;
+
+ reg-shift = <2>;
+ };
+
+ uart1: uart1@d00 {
+ compatible = "ns16550a";
+ reg = <0xd00 0x100>;
+
+ resets = <&resetc 19>;
+ reset-names = "uart1";
+
+ interrupt-parent = <&intc>;
+ interrupts = <21>;
+
+ reg-shift = <2>;
+ };
+
+ uart2: uart2@e00 {
+ compatible = "ns16550a";
+ reg = <0xe00 0x100>;
+
+ resets = <&resetc 20>;
+ reset-names = "uart2";
+
+ interrupt-parent = <&intc>;
+ interrupts = <22>;
+
+ reg-shift = <2>;
+ };
+ };
+
+ usb_phy: usb-phy@10120000 {
+ compatible = "mediatek,mt7628-usbphy";
+ reg = <0x10120000 0x1000>;
+
+ #phy-cells = <0>;
+
+ ralink,sysctl = <&sysc>;
+ resets = <&resetc 22 &resetc 25>;
+ reset-names = "host", "device";
+ };
+
+ ehci@101c0000 {
+ compatible = "generic-ehci";
+ reg = <0x101c0000 0x1000>;
+
+ phys = <&usb_phy>;
+ phy-names = "usb";
+
+ interrupt-parent = <&intc>;
+ interrupts = <18>;
+ };
+};
diff --git a/arch/mips/boot/dts/ralink/omega2p.dts b/arch/mips/boot/dts/ralink/omega2p.dts
new file mode 100644
index 000000000000..5884fd48f59a
--- /dev/null
+++ b/arch/mips/boot/dts/ralink/omega2p.dts
@@ -0,0 +1,18 @@
+/dts-v1/;
+
+/include/ "mt7628a.dtsi"
+
+/ {
+ compatible = "onion,omega2+", "ralink,mt7688a-soc", "ralink,mt7628a-soc";
+ model = "Onion Omega2+";
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x8000000>;
+ };
+
+ chosen {
+ bootargs = "console=ttyS0,115200";
+ stdout-path = &uart0;
+ };
+};
diff --git a/arch/mips/boot/dts/ralink/vocore2.dts b/arch/mips/boot/dts/ralink/vocore2.dts
new file mode 100644
index 000000000000..fa8a5f8f236a
--- /dev/null
+++ b/arch/mips/boot/dts/ralink/vocore2.dts
@@ -0,0 +1,18 @@
+/dts-v1/;
+
+#include "mt7628a.dtsi"
+
+/ {
+ compatible = "vocore,vocore2", "ralink,mt7628a-soc";
+ model = "VoCore2";
+
+ memory@0 {
+ device_type = "memory";
+ reg = <0x0 0x8000000>;
+ };
+
+ chosen {
+ bootargs = "console=ttyS2,115200";
+ stdout-path = &uart2;
+ };
+};
diff --git a/arch/mips/cavium-octeon/executive/Makefile b/arch/mips/cavium-octeon/executive/Makefile
index b6d6e841a984..50b427879465 100644
--- a/arch/mips/cavium-octeon/executive/Makefile
+++ b/arch/mips/cavium-octeon/executive/Makefile
@@ -16,4 +16,4 @@ obj-y += cvmx-pko.o cvmx-spi.o cvmx-cmd-queue.o \
cvmx-helper-loop.o cvmx-helper-spi.o cvmx-helper-util.o \
cvmx-interrupt-decodes.o cvmx-interrupt-rsl.o
-obj-y += cvmx-helper-errata.o cvmx-helper-jtag.o
+obj-y += cvmx-helper-errata.o cvmx-helper-jtag.o cvmx-boot-vector.o
diff --git a/arch/mips/cavium-octeon/executive/cvmx-boot-vector.c b/arch/mips/cavium-octeon/executive/cvmx-boot-vector.c
new file mode 100644
index 000000000000..b7019d21808e
--- /dev/null
+++ b/arch/mips/cavium-octeon/executive/cvmx-boot-vector.c
@@ -0,0 +1,167 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2004-2017 Cavium, Inc.
+ */
+
+
+/*
+ We install this program at the bootvector:
+------------------------------------
+ .set noreorder
+ .set nomacro
+ .set noat
+reset_vector:
+ dmtc0 $k0, $31, 0 # Save $k0 to DESAVE
+ dmtc0 $k1, $31, 3 # Save $k1 to KScratch2
+
+ mfc0 $k0, $12, 0 # Status
+ mfc0 $k1, $15, 1 # Ebase
+
+ ori $k0, 0x84 # Enable 64-bit addressing, set
+ # ERL (should already be set)
+ andi $k1, 0x3ff # mask out core ID
+
+ mtc0 $k0, $12, 0 # Status
+ sll $k1, 5
+
+ lui $k0, 0xbfc0
+ cache 17, 0($0) # Core-14345, clear L1 Dcache virtual
+ # tags if the core hit an NMI
+
+ ld $k0, 0x78($k0) # k0 <- (bfc00078) pointer to the reset vector
+ synci 0($0) # Invalidate ICache to get coherent
+ # view of target code.
+
+ daddu $k0, $k0, $k1
+ nop
+
+ ld $k0, 0($k0) # k0 <- core specific target address
+ dmfc0 $k1, $31, 3 # Restore $k1 from KScratch2
+
+ beqz $k0, wait_loop # Spin in wait loop
+ nop
+
+ jr $k0
+ nop
+
+ nop # NOPs needed here to fill delay slots
+ nop # on endian reversal of previous instructions
+
+wait_loop:
+ wait
+ nop
+
+ b wait_loop
+ nop
+
+ nop
+ nop
+------------------------------------
+
+0000000000000000 <reset_vector>:
+ 0: 40baf800 dmtc0 k0,c0_desave
+ 4: 40bbf803 dmtc0 k1,c0_kscratch2
+
+ 8: 401a6000 mfc0 k0,c0_status
+ c: 401b7801 mfc0 k1,c0_ebase
+
+ 10: 375a0084 ori k0,k0,0x84
+ 14: 337b03ff andi k1,k1,0x3ff
+
+ 18: 409a6000 mtc0 k0,c0_status
+ 1c: 001bd940 sll k1,k1,0x5
+
+ 20: 3c1abfc0 lui k0,0xbfc0
+ 24: bc110000 cache 0x11,0(zero)
+
+ 28: df5a0078 ld k0,120(k0)
+ 2c: 041f0000 synci 0(zero)
+
+ 30: 035bd02d daddu k0,k0,k1
+ 34: 00000000 nop
+
+ 38: df5a0000 ld k0,0(k0)
+ 3c: 403bf803 dmfc0 k1,c0_kscratch2
+
+ 40: 13400005 beqz k0,58 <wait_loop>
+ 44: 00000000 nop
+
+ 48: 03400008 jr k0
+ 4c: 00000000 nop
+
+ 50: 00000000 nop
+ 54: 00000000 nop
+
+0000000000000058 <wait_loop>:
+ 58: 42000020 wait
+ 5c: 00000000 nop
+
+ 60: 1000fffd b 58 <wait_loop>
+ 64: 00000000 nop
+
+ 68: 00000000 nop
+ 6c: 00000000 nop
+
+ */
+
+#include <asm/octeon/cvmx-boot-vector.h>
+
+static unsigned long long _cvmx_bootvector_data[16] = {
+ 0x40baf80040bbf803ull, /* patch low order 8-bits if no KScratch*/
+ 0x401a6000401b7801ull,
+ 0x375a0084337b03ffull,
+ 0x409a6000001bd940ull,
+ 0x3c1abfc0bc110000ull,
+ 0xdf5a0078041f0000ull,
+ 0x035bd02d00000000ull,
+ 0xdf5a0000403bf803ull, /* patch low order 8-bits if no KScratch*/
+ 0x1340000500000000ull,
+ 0x0340000800000000ull,
+ 0x0000000000000000ull,
+ 0x4200002000000000ull,
+ 0x1000fffd00000000ull,
+ 0x0000000000000000ull,
+ OCTEON_BOOT_MOVEABLE_MAGIC1,
+ 0 /* To be filled in with address of vector block*/
+};
+
+/* 2^10 CPUs */
+#define VECTOR_TABLE_SIZE (1024 * sizeof(struct cvmx_boot_vector_element))
+
+static void cvmx_boot_vector_init(void *mem)
+{
+ uint64_t kseg0_mem;
+ int i;
+
+ memset(mem, 0, VECTOR_TABLE_SIZE);
+ kseg0_mem = cvmx_ptr_to_phys(mem) | 0x8000000000000000ull;
+
+ for (i = 0; i < 15; i++) {
+ uint64_t v = _cvmx_bootvector_data[i];
+
+ if (OCTEON_IS_OCTEON1PLUS() && (i == 0 || i == 7))
+ v &= 0xffffffff00000000ull; /* KScratch not availble. */
+ cvmx_write_csr(CVMX_MIO_BOOT_LOC_ADR, i * 8);
+ cvmx_write_csr(CVMX_MIO_BOOT_LOC_DAT, v);
+ }
+ cvmx_write_csr(CVMX_MIO_BOOT_LOC_ADR, 15 * 8);
+ cvmx_write_csr(CVMX_MIO_BOOT_LOC_DAT, kseg0_mem);
+ cvmx_write_csr(CVMX_MIO_BOOT_LOC_CFGX(0), 0x81fc0000);
+}
+
+/**
+ * Get a pointer to the per-core table of reset vector pointers
+ *
+ */
+struct cvmx_boot_vector_element *cvmx_boot_vector_get(void)
+{
+ struct cvmx_boot_vector_element *ret;
+
+ ret = cvmx_bootmem_alloc_named_range_once(VECTOR_TABLE_SIZE, 0,
+ (1ull << 32) - 1, 8, "__boot_vector1__", cvmx_boot_vector_init);
+ return ret;
+}
+EXPORT_SYMBOL(cvmx_boot_vector_get);
diff --git a/arch/mips/cavium-octeon/executive/cvmx-bootmem.c b/arch/mips/cavium-octeon/executive/cvmx-bootmem.c
index 8d54d774933c..94d97ebfa036 100644
--- a/arch/mips/cavium-octeon/executive/cvmx-bootmem.c
+++ b/arch/mips/cavium-octeon/executive/cvmx-bootmem.c
@@ -44,6 +44,55 @@ static struct cvmx_bootmem_desc *cvmx_bootmem_desc;
/* See header file for descriptions of functions */
+/**
+ * This macro returns the size of a member of a structure.
+ * Logically it is the same as "sizeof(s::field)" in C++, but
+ * C lacks the "::" operator.
+ */
+#define SIZEOF_FIELD(s, field) sizeof(((s *)NULL)->field)
+
+/**
+ * This macro returns a member of the
+ * cvmx_bootmem_named_block_desc_t structure. These members can't
+ * be directly addressed as they might be in memory not directly
+ * reachable. In the case where bootmem is compiled with
+ * LINUX_HOST, the structure itself might be located on a remote
+ * Octeon. The argument "field" is the member name of the
+ * cvmx_bootmem_named_block_desc_t to read. Regardless of the type
+ * of the field, the return type is always a uint64_t. The "addr"
+ * parameter is the physical address of the structure.
+ */
+#define CVMX_BOOTMEM_NAMED_GET_FIELD(addr, field) \
+ __cvmx_bootmem_desc_get(addr, \
+ offsetof(struct cvmx_bootmem_named_block_desc, field), \
+ SIZEOF_FIELD(struct cvmx_bootmem_named_block_desc, field))
+
+/**
+ * This function is the implementation of the get macros defined
+ * for individual structure members. The argument are generated
+ * by the macros inorder to read only the needed memory.
+ *
+ * @param base 64bit physical address of the complete structure
+ * @param offset Offset from the beginning of the structure to the member being
+ * accessed.
+ * @param size Size of the structure member.
+ *
+ * @return Value of the structure member promoted into a uint64_t.
+ */
+static inline uint64_t __cvmx_bootmem_desc_get(uint64_t base, int offset,
+ int size)
+{
+ base = (1ull << 63) | (base + offset);
+ switch (size) {
+ case 4:
+ return cvmx_read64_uint32(base);
+ case 8:
+ return cvmx_read64_uint64(base);
+ default:
+ return 0;
+ }
+}
+
/*
* Wrapper functions are provided for reading/writing the size and
* next block values as these may not be directly addressible (in 32
@@ -98,6 +147,42 @@ void *cvmx_bootmem_alloc(uint64_t size, uint64_t alignment)
return cvmx_bootmem_alloc_range(size, alignment, 0, 0);
}
+void *cvmx_bootmem_alloc_named_range_once(uint64_t size, uint64_t min_addr,
+ uint64_t max_addr, uint64_t align,
+ char *name,
+ void (*init) (void *))
+{
+ int64_t addr;
+ void *ptr;
+ uint64_t named_block_desc_addr;
+
+ named_block_desc_addr = (uint64_t)
+ cvmx_bootmem_phy_named_block_find(name,
+ (uint32_t)CVMX_BOOTMEM_FLAG_NO_LOCKING);
+
+ if (named_block_desc_addr) {
+ addr = CVMX_BOOTMEM_NAMED_GET_FIELD(named_block_desc_addr,
+ base_addr);
+ return cvmx_phys_to_ptr(addr);
+ }
+
+ addr = cvmx_bootmem_phy_named_block_alloc(size, min_addr, max_addr,
+ align, name,
+ (uint32_t)CVMX_BOOTMEM_FLAG_NO_LOCKING);
+
+ if (addr < 0)
+ return NULL;
+ ptr = cvmx_phys_to_ptr(addr);
+
+ if (init)
+ init(ptr);
+ else
+ memset(ptr, 0, size);
+
+ return ptr;
+}
+EXPORT_SYMBOL(cvmx_bootmem_alloc_named_range_once);
+
void *cvmx_bootmem_alloc_named_range(uint64_t size, uint64_t min_addr,
uint64_t max_addr, uint64_t align,
char *name)
diff --git a/arch/mips/cavium-octeon/octeon-irq.c b/arch/mips/cavium-octeon/octeon-irq.c
index c1eb1ff7c800..5b3a3f6a9ad3 100644
--- a/arch/mips/cavium-octeon/octeon-irq.c
+++ b/arch/mips/cavium-octeon/octeon-irq.c
@@ -2963,3 +2963,12 @@ void octeon_fixup_irqs(void)
}
#endif /* CONFIG_HOTPLUG_CPU */
+
+struct irq_domain *octeon_irq_get_block_domain(int node, uint8_t block)
+{
+ struct octeon_ciu3_info *ciu3_info;
+
+ ciu3_info = octeon_ciu3_info_per_node[node & CVMX_NODE_MASK];
+ return ciu3_info->domain[block];
+}
+EXPORT_SYMBOL(octeon_irq_get_block_domain);
diff --git a/arch/mips/cavium-octeon/smp.c b/arch/mips/cavium-octeon/smp.c
index 3de786545ded..75e7c8625659 100644
--- a/arch/mips/cavium-octeon/smp.c
+++ b/arch/mips/cavium-octeon/smp.c
@@ -205,7 +205,7 @@ int plat_post_relocation(long offset)
* Firmware CPU startup hook
*
*/
-static void octeon_boot_secondary(int cpu, struct task_struct *idle)
+static int octeon_boot_secondary(int cpu, struct task_struct *idle)
{
int count;
@@ -223,8 +223,12 @@ static void octeon_boot_secondary(int cpu, struct task_struct *idle)
udelay(1);
count--;
}
- if (count == 0)
+ if (count == 0) {
pr_err("Secondary boot timeout\n");
+ return -ETIMEDOUT;
+ }
+
+ return 0;
}
/**
@@ -408,7 +412,7 @@ late_initcall(register_cavium_notifier);
#endif /* CONFIG_HOTPLUG_CPU */
-struct plat_smp_ops octeon_smp_ops = {
+const struct plat_smp_ops octeon_smp_ops = {
.send_ipi_single = octeon_send_ipi_single,
.send_ipi_mask = octeon_send_ipi_mask,
.init_secondary = octeon_init_secondary,
@@ -485,7 +489,7 @@ static void octeon_78xx_send_ipi_mask(const struct cpumask *mask,
octeon_78xx_send_ipi_single(cpu, action);
}
-static struct plat_smp_ops octeon_78xx_smp_ops = {
+static const struct plat_smp_ops octeon_78xx_smp_ops = {
.send_ipi_single = octeon_78xx_send_ipi_single,
.send_ipi_mask = octeon_78xx_send_ipi_mask,
.init_secondary = octeon_init_secondary,
@@ -501,7 +505,7 @@ static struct plat_smp_ops octeon_78xx_smp_ops = {
void __init octeon_setup_smp(void)
{
- struct plat_smp_ops *ops;
+ const struct plat_smp_ops *ops;
if (octeon_has_feature(OCTEON_FEATURE_CIU3))
ops = &octeon_78xx_smp_ops;
diff --git a/arch/mips/configs/cavium_octeon_defconfig b/arch/mips/configs/cavium_octeon_defconfig
index e5b18f1a31a0..490b12af103c 100644
--- a/arch/mips/configs/cavium_octeon_defconfig
+++ b/arch/mips/configs/cavium_octeon_defconfig
@@ -60,11 +60,8 @@ CONFIG_BLK_DEV_SD=y
CONFIG_ATA=y
CONFIG_SATA_AHCI=y
CONFIG_SATA_AHCI_PLATFORM=y
-CONFIG_AHCI_OCTEON=y
CONFIG_PATA_OCTEON_CF=y
-CONFIG_SATA_SIL=y
CONFIG_NETDEVICES=y
-CONFIG_MII=y
# CONFIG_NET_VENDOR_3COM is not set
# CONFIG_NET_VENDOR_ADAPTEC is not set
# CONFIG_NET_VENDOR_ALTEON is not set
@@ -121,22 +118,30 @@ CONFIG_SPI=y
CONFIG_SPI_OCTEON=y
# CONFIG_HWMON is not set
CONFIG_WATCHDOG=y
-CONFIG_USB=m
-CONFIG_USB_EHCI_HCD=m
-CONFIG_USB_EHCI_HCD_PLATFORM=m
-CONFIG_USB_OHCI_HCD=m
-CONFIG_USB_OHCI_HCD_PLATFORM=m
+CONFIG_USB=y
+# CONFIG_USB_PCI is not set
+CONFIG_USB_XHCI_HCD=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_USB_STORAGE=y
+CONFIG_USB_DWC3=y
CONFIG_MMC=y
# CONFIG_PWRSEQ_EMMC is not set
# CONFIG_PWRSEQ_SIMPLE is not set
-# CONFIG_MMC_BLOCK_BOUNCE is not set
CONFIG_MMC_CAVIUM_OCTEON=y
+CONFIG_EDAC=y
+CONFIG_EDAC_OCTEON_PC=y
+CONFIG_EDAC_OCTEON_L2C=y
+CONFIG_EDAC_OCTEON_LMC=y
+CONFIG_EDAC_OCTEON_PCI=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_DS1307=y
CONFIG_STAGING=y
CONFIG_OCTEON_ETHERNET=y
-CONFIG_OCTEON_USB=m
# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_RAS=y
CONFIG_EXT4_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_EXT4_FS_SECURITY=y
diff --git a/arch/mips/configs/ci20_defconfig b/arch/mips/configs/ci20_defconfig
index b42cfa7865f9..5ea3104a3aca 100644
--- a/arch/mips/configs/ci20_defconfig
+++ b/arch/mips/configs/ci20_defconfig
@@ -91,6 +91,7 @@ CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_I2C=y
CONFIG_I2C_JZ4780=y
CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_INGENIC=y
# CONFIG_HWMON is not set
CONFIG_REGULATOR=y
CONFIG_REGULATOR_DEBUG=y
@@ -99,6 +100,8 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
# CONFIG_HID is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_MMC=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_DRV_JZ4740=y
# CONFIG_IOMMU_SUPPORT is not set
CONFIG_MEMORY=y
# CONFIG_DNOTIFY is not set
diff --git a/arch/mips/configs/generic/board-ni169445.config b/arch/mips/configs/generic/board-ni169445.config
new file mode 100644
index 000000000000..f72223b366ca
--- /dev/null
+++ b/arch/mips/configs/generic/board-ni169445.config
@@ -0,0 +1,30 @@
+# require CONFIG_CPU_MIPS32_R2=y
+# require CONFIG_CPU_LITTLE_ENDIAN=y
+
+CONFIG_FIT_IMAGE_FDT_NI169445=y
+
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_OF_PLATFORM=y
+
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_GENERIC_PLATFORM=y
+
+CONFIG_MTD=y
+CONFIG_MTD_BLOCK=y
+CONFIG_MTD_CMDLINE_PARTS=y
+
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_ECC_BCH=y
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_GPIO=y
+CONFIG_MTD_NAND_IDS=y
+
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_BLOCK=y
+
+CONFIG_NETDEVICES=y
+CONFIG_STMMAC_ETH=y
+CONFIG_STMMAC_PLATFORM=y
+CONFIG_DWMAC_GENERIC=y
diff --git a/arch/mips/configs/generic/board-sead-3.config b/arch/mips/configs/generic/board-sead-3.config
index 3b5e1ac579eb..df49a592dbb5 100644
--- a/arch/mips/configs/generic/board-sead-3.config
+++ b/arch/mips/configs/generic/board-sead-3.config
@@ -1,3 +1,5 @@
+# require CONFIG_32BIT=y
+
CONFIG_LEGACY_BOARD_SEAD3=y
CONFIG_AUXDISPLAY=y
diff --git a/arch/mips/configs/generic_defconfig b/arch/mips/configs/generic_defconfig
index 91aacf2ef26d..26b1cd5ffbf5 100644
--- a/arch/mips/configs/generic_defconfig
+++ b/arch/mips/configs/generic_defconfig
@@ -3,7 +3,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_MIPS_CPS=y
CONFIG_CPU_HAS_MSA=y
CONFIG_HIGHMEM=y
-CONFIG_NR_CPUS=2
+CONFIG_NR_CPUS=16
CONFIG_MIPS_O32_FP64_SUPPORT=y
CONFIG_SYSVIPC=y
CONFIG_NO_HZ_IDLE=y
@@ -61,7 +61,6 @@ CONFIG_HID_KENSINGTON=y
CONFIG_HID_LOGITECH=y
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
-# CONFIG_USB_SUPPORT is not set
# CONFIG_MIPS_PLATFORM_DEVICES is not set
# CONFIG_IOMMU_SUPPORT is not set
CONFIG_EXT4_FS=y
diff --git a/arch/mips/configs/gpr_defconfig b/arch/mips/configs/gpr_defconfig
index b1911816337c..55438fc9991e 100644
--- a/arch/mips/configs/gpr_defconfig
+++ b/arch/mips/configs/gpr_defconfig
@@ -111,12 +111,8 @@ CONFIG_ATALK=m
CONFIG_DEV_APPLETALK=m
CONFIG_IPDDP=m
CONFIG_IPDDP_ENCAP=y
-CONFIG_IPDDP_DECAP=y
CONFIG_X25=m
CONFIG_LAPB=m
-CONFIG_ECONET=m
-CONFIG_ECONET_AUNUDP=y
-CONFIG_ECONET_NATIVE=y
CONFIG_WAN_ROUTER=m
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_CBQ=m
diff --git a/arch/mips/configs/lemote2f_defconfig b/arch/mips/configs/lemote2f_defconfig
index 1ec8ed8d05d1..02be95c1b712 100644
--- a/arch/mips/configs/lemote2f_defconfig
+++ b/arch/mips/configs/lemote2f_defconfig
@@ -37,7 +37,6 @@ CONFIG_PM=y
CONFIG_HIBERNATION=y
CONFIG_PM_STD_PARTITION="/dev/hda3"
CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_DEBUG=y
CONFIG_CPU_FREQ_STAT=y
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
diff --git a/arch/mips/configs/malta_defconfig b/arch/mips/configs/malta_defconfig
index 078ecac071ab..396408404487 100644
--- a/arch/mips/configs/malta_defconfig
+++ b/arch/mips/configs/malta_defconfig
@@ -2,7 +2,6 @@ CONFIG_MIPS_MALTA=y
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPU_MIPS32_R2=y
CONFIG_PAGE_SIZE_16KB=y
-CONFIG_MIPS_MT_SMP=y
CONFIG_NR_CPUS=8
CONFIG_HZ_100=y
CONFIG_SYSVIPC=y
diff --git a/arch/mips/configs/malta_kvm_defconfig b/arch/mips/configs/malta_kvm_defconfig
index 80ecd94ed126..5691673a3327 100644
--- a/arch/mips/configs/malta_kvm_defconfig
+++ b/arch/mips/configs/malta_kvm_defconfig
@@ -2,7 +2,6 @@ CONFIG_MIPS_MALTA=y
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPU_MIPS32_R2=y
CONFIG_PAGE_SIZE_16KB=y
-CONFIG_MIPS_MT_SMP=y
CONFIG_NR_CPUS=8
CONFIG_HZ_100=y
CONFIG_SYSVIPC=y
diff --git a/arch/mips/configs/malta_kvm_guest_defconfig b/arch/mips/configs/malta_kvm_guest_defconfig
index 35ad1f8d1a79..e9cadb37d684 100644
--- a/arch/mips/configs/malta_kvm_guest_defconfig
+++ b/arch/mips/configs/malta_kvm_guest_defconfig
@@ -3,6 +3,7 @@ CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPU_MIPS32_R2=y
CONFIG_KVM_GUEST=y
CONFIG_PAGE_SIZE_16KB=y
+# CONFIG_MIPS_MT_SMP is not set
CONFIG_HZ_100=y
CONFIG_SYSVIPC=y
CONFIG_NO_HZ=y
diff --git a/arch/mips/configs/maltasmvp_defconfig b/arch/mips/configs/maltasmvp_defconfig
index 55b68b981b05..d8c8f5fb8918 100644
--- a/arch/mips/configs/maltasmvp_defconfig
+++ b/arch/mips/configs/maltasmvp_defconfig
@@ -2,7 +2,6 @@ CONFIG_MIPS_MALTA=y
CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPU_MIPS32_R2=y
CONFIG_PAGE_SIZE_16KB=y
-CONFIG_MIPS_MT_SMP=y
CONFIG_SCHED_SMT=y
CONFIG_MIPS_CPS=y
CONFIG_NR_CPUS=8
diff --git a/arch/mips/configs/maltasmvp_eva_defconfig b/arch/mips/configs/maltasmvp_eva_defconfig
index 5ca590cf1635..04827bc9f87f 100644
--- a/arch/mips/configs/maltasmvp_eva_defconfig
+++ b/arch/mips/configs/maltasmvp_eva_defconfig
@@ -3,7 +3,6 @@ CONFIG_CPU_LITTLE_ENDIAN=y
CONFIG_CPU_MIPS32_R2=y
CONFIG_CPU_MIPS32_3_5_FEATURES=y
CONFIG_PAGE_SIZE_16KB=y
-CONFIG_MIPS_MT_SMP=y
CONFIG_SCHED_SMT=y
CONFIG_MIPS_CPS=y
CONFIG_NR_CPUS=8
diff --git a/arch/mips/configs/mtx1_defconfig b/arch/mips/configs/mtx1_defconfig
index 4011f1869e72..c3d0d0a6e044 100644
--- a/arch/mips/configs/mtx1_defconfig
+++ b/arch/mips/configs/mtx1_defconfig
@@ -146,12 +146,8 @@ CONFIG_ATALK=m
CONFIG_DEV_APPLETALK=m
CONFIG_IPDDP=m
CONFIG_IPDDP_ENCAP=y
-CONFIG_IPDDP_DECAP=y
CONFIG_X25=m
CONFIG_LAPB=m
-CONFIG_ECONET=m
-CONFIG_ECONET_AUNUDP=y
-CONFIG_ECONET_NATIVE=y
CONFIG_WAN_ROUTER=m
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_CBQ=m
diff --git a/arch/mips/configs/nlm_xlp_defconfig b/arch/mips/configs/nlm_xlp_defconfig
index 5720ce23e9aa..7357248b3d7a 100644
--- a/arch/mips/configs/nlm_xlp_defconfig
+++ b/arch/mips/configs/nlm_xlp_defconfig
@@ -259,7 +259,6 @@ CONFIG_ATALK=m
CONFIG_DEV_APPLETALK=m
CONFIG_IPDDP=m
CONFIG_IPDDP_ENCAP=y
-CONFIG_IPDDP_DECAP=y
CONFIG_X25=m
CONFIG_LAPB=m
CONFIG_WAN_ROUTER=m
diff --git a/arch/mips/configs/nlm_xlr_defconfig b/arch/mips/configs/nlm_xlr_defconfig
index fea56c535d92..1e18fd7de209 100644
--- a/arch/mips/configs/nlm_xlr_defconfig
+++ b/arch/mips/configs/nlm_xlr_defconfig
@@ -240,12 +240,8 @@ CONFIG_ATALK=m
CONFIG_DEV_APPLETALK=m
CONFIG_IPDDP=m
CONFIG_IPDDP_ENCAP=y
-CONFIG_IPDDP_DECAP=y
CONFIG_X25=m
CONFIG_LAPB=m
-CONFIG_ECONET=m
-CONFIG_ECONET_AUNUDP=y
-CONFIG_ECONET_NATIVE=y
CONFIG_WAN_ROUTER=m
CONFIG_PHONET=m
CONFIG_IEEE802154=m
diff --git a/arch/mips/configs/omega2p_defconfig b/arch/mips/configs/omega2p_defconfig
new file mode 100644
index 000000000000..e2731c3cc7e7
--- /dev/null
+++ b/arch/mips/configs/omega2p_defconfig
@@ -0,0 +1,129 @@
+CONFIG_RALINK=y
+CONFIG_SOC_MT7620=y
+CONFIG_DTB_OMEGA2P=y
+CONFIG_CPU_MIPS32_R2=y
+# CONFIG_COMPACTION is not set
+CONFIG_HZ_100=y
+CONFIG_PREEMPT=y
+# CONFIG_SECCOMP is not set
+CONFIG_MIPS_CMDLINE_FROM_BOOTLOADER=y
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_CGROUPS=y
+CONFIG_MEMCG=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_EMBEDDED=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_SUSPEND is not set
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_WIRELESS is not set
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+CONFIG_NETDEVICES=y
+# CONFIG_ETHERNET is not set
+# CONFIG_WLAN is not set
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_SERIO is not set
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_LEGACY_PTY_COUNT=2
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=3
+CONFIG_SERIAL_8250_RUNTIME_UARTS=3
+CONFIG_SERIAL_OF_PLATFORM=y
+# CONFIG_HW_RANDOM is not set
+# CONFIG_HWMON is not set
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_MMC=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_MEMORY=y
+CONFIG_PHY_RALINK_USB=y
+# CONFIG_DNOTIFY is not set
+CONFIG_PROC_KCORE=y
+# CONFIG_PROC_PAGE_MONITOR is not set
+CONFIG_TMPFS=y
+CONFIG_CONFIGFS_FS=y
+# CONFIG_NETWORK_FILESYSTEMS is not set
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=y
+CONFIG_NLS_CODEPAGE_775=y
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+CONFIG_NLS_CODEPAGE_855=y
+CONFIG_NLS_CODEPAGE_857=y
+CONFIG_NLS_CODEPAGE_860=y
+CONFIG_NLS_CODEPAGE_861=y
+CONFIG_NLS_CODEPAGE_862=y
+CONFIG_NLS_CODEPAGE_863=y
+CONFIG_NLS_CODEPAGE_864=y
+CONFIG_NLS_CODEPAGE_865=y
+CONFIG_NLS_CODEPAGE_866=y
+CONFIG_NLS_CODEPAGE_869=y
+CONFIG_NLS_CODEPAGE_936=y
+CONFIG_NLS_CODEPAGE_950=y
+CONFIG_NLS_CODEPAGE_932=y
+CONFIG_NLS_CODEPAGE_949=y
+CONFIG_NLS_CODEPAGE_874=y
+CONFIG_NLS_ISO8859_8=y
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_ISO8859_3=y
+CONFIG_NLS_ISO8859_4=y
+CONFIG_NLS_ISO8859_5=y
+CONFIG_NLS_ISO8859_6=y
+CONFIG_NLS_ISO8859_7=y
+CONFIG_NLS_ISO8859_9=y
+CONFIG_NLS_ISO8859_13=y
+CONFIG_NLS_ISO8859_14=y
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_KOI8_R=y
+CONFIG_NLS_KOI8_U=y
+CONFIG_NLS_UTF8=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DEBUG_INFO=y
+CONFIG_STRIP_ASM_SYMS=y
+CONFIG_DEBUG_FS=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_PANIC_TIMEOUT=10
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_DEBUG_PREEMPT is not set
+CONFIG_STACKTRACE=y
+# CONFIG_FTRACE is not set
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_LZO=y
+CONFIG_CRC16=y
+CONFIG_XZ_DEC=y
diff --git a/arch/mips/configs/pistachio_defconfig b/arch/mips/configs/pistachio_defconfig
index 3598d58aac30..b22a3cf149b6 100644
--- a/arch/mips/configs/pistachio_defconfig
+++ b/arch/mips/configs/pistachio_defconfig
@@ -47,6 +47,8 @@ CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_MULTIPATH=y
CONFIG_IP_ROUTE_VERBOSE=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
@@ -292,7 +294,8 @@ CONFIG_SQUASHFS_LZO=y
CONFIG_PSTORE=y
CONFIG_PSTORE_CONSOLE=y
CONFIG_PSTORE_RAM=y
-# CONFIG_NETWORK_FILESYSTEMS is not set
+CONFIG_NFS_FS=y
+CONFIG_ROOT_NFS=y
CONFIG_NLS_DEFAULT="utf8"
CONFIG_NLS_CODEPAGE_437=m
CONFIG_NLS_ASCII=m
diff --git a/arch/mips/configs/vocore2_defconfig b/arch/mips/configs/vocore2_defconfig
new file mode 100644
index 000000000000..9121e4194a63
--- /dev/null
+++ b/arch/mips/configs/vocore2_defconfig
@@ -0,0 +1,129 @@
+CONFIG_RALINK=y
+CONFIG_SOC_MT7620=y
+CONFIG_DTB_VOCORE2=y
+CONFIG_CPU_MIPS32_R2=y
+# CONFIG_COMPACTION is not set
+CONFIG_HZ_100=y
+CONFIG_PREEMPT=y
+# CONFIG_SECCOMP is not set
+CONFIG_MIPS_CMDLINE_FROM_BOOTLOADER=y
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_NO_HZ_IDLE=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_CGROUPS=y
+CONFIG_MEMCG=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_NAMESPACES=y
+CONFIG_USER_NS=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_EMBEDDED=y
+# CONFIG_VM_EVENT_COUNTERS is not set
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+# CONFIG_SUSPEND is not set
+CONFIG_NET=y
+CONFIG_PACKET=y
+CONFIG_UNIX=y
+CONFIG_INET=y
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_DIAG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_WIRELESS is not set
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_DEVTMPFS=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_ALLOW_DEV_COREDUMP is not set
+CONFIG_NETDEVICES=y
+# CONFIG_ETHERNET is not set
+# CONFIG_WLAN is not set
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_SERIO is not set
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_LEGACY_PTY_COUNT=2
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=3
+CONFIG_SERIAL_8250_RUNTIME_UARTS=3
+CONFIG_SERIAL_OF_PLATFORM=y
+# CONFIG_HW_RANDOM is not set
+# CONFIG_HWMON is not set
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_USB=y
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_MMC=y
+# CONFIG_IOMMU_SUPPORT is not set
+CONFIG_MEMORY=y
+CONFIG_PHY_RALINK_USB=y
+# CONFIG_DNOTIFY is not set
+CONFIG_PROC_KCORE=y
+# CONFIG_PROC_PAGE_MONITOR is not set
+CONFIG_TMPFS=y
+CONFIG_CONFIGFS_FS=y
+# CONFIG_NETWORK_FILESYSTEMS is not set
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=y
+CONFIG_NLS_CODEPAGE_775=y
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+CONFIG_NLS_CODEPAGE_855=y
+CONFIG_NLS_CODEPAGE_857=y
+CONFIG_NLS_CODEPAGE_860=y
+CONFIG_NLS_CODEPAGE_861=y
+CONFIG_NLS_CODEPAGE_862=y
+CONFIG_NLS_CODEPAGE_863=y
+CONFIG_NLS_CODEPAGE_864=y
+CONFIG_NLS_CODEPAGE_865=y
+CONFIG_NLS_CODEPAGE_866=y
+CONFIG_NLS_CODEPAGE_869=y
+CONFIG_NLS_CODEPAGE_936=y
+CONFIG_NLS_CODEPAGE_950=y
+CONFIG_NLS_CODEPAGE_932=y
+CONFIG_NLS_CODEPAGE_949=y
+CONFIG_NLS_CODEPAGE_874=y
+CONFIG_NLS_ISO8859_8=y
+CONFIG_NLS_CODEPAGE_1250=y
+CONFIG_NLS_CODEPAGE_1251=y
+CONFIG_NLS_ASCII=y
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_ISO8859_3=y
+CONFIG_NLS_ISO8859_4=y
+CONFIG_NLS_ISO8859_5=y
+CONFIG_NLS_ISO8859_6=y
+CONFIG_NLS_ISO8859_7=y
+CONFIG_NLS_ISO8859_9=y
+CONFIG_NLS_ISO8859_13=y
+CONFIG_NLS_ISO8859_14=y
+CONFIG_NLS_ISO8859_15=y
+CONFIG_NLS_KOI8_R=y
+CONFIG_NLS_KOI8_U=y
+CONFIG_NLS_UTF8=y
+CONFIG_PRINTK_TIME=y
+CONFIG_DEBUG_INFO=y
+CONFIG_STRIP_ASM_SYMS=y
+CONFIG_DEBUG_FS=y
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_PANIC_TIMEOUT=10
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_DEBUG_PREEMPT is not set
+CONFIG_STACKTRACE=y
+# CONFIG_FTRACE is not set
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_LZO=y
+CONFIG_CRC16=y
+CONFIG_XZ_DEC=y
diff --git a/arch/mips/fw/arc/init.c b/arch/mips/fw/arc/init.c
index 629b24db0d3a..008555969534 100644
--- a/arch/mips/fw/arc/init.c
+++ b/arch/mips/fw/arc/init.c
@@ -51,7 +51,7 @@ void __init prom_init(void)
#endif
#ifdef CONFIG_SGI_IP27
{
- extern struct plat_smp_ops ip27_smp_ops;
+ extern const struct plat_smp_ops ip27_smp_ops;
register_smp_ops(&ip27_smp_ops);
}
diff --git a/arch/mips/generic/Kconfig b/arch/mips/generic/Kconfig
index 51ffbbaddee2..e0436aaf7f38 100644
--- a/arch/mips/generic/Kconfig
+++ b/arch/mips/generic/Kconfig
@@ -36,4 +36,10 @@ config FIT_IMAGE_FDT_BOSTON
enable this if you wish to boot on a MIPS Boston board, as it is
expected by the bootloader.
+config FIT_IMAGE_FDT_NI169445
+ bool "Include FDT for NI 169445"
+ help
+ Enable this to include the FDT for the 169445 platform from
+ National Instruments in the FIT kernel image.
+
endif
diff --git a/arch/mips/generic/Platform b/arch/mips/generic/Platform
index 9a30d69e2281..f5312dfa8184 100644
--- a/arch/mips/generic/Platform
+++ b/arch/mips/generic/Platform
@@ -12,3 +12,7 @@ platform-$(CONFIG_MIPS_GENERIC) += generic/
cflags-$(CONFIG_MIPS_GENERIC) += -I$(srctree)/arch/mips/include/asm/mach-generic
load-$(CONFIG_MIPS_GENERIC) += 0xffffffff80100000
all-$(CONFIG_MIPS_GENERIC) := vmlinux.gz.itb
+
+its-y := vmlinux.its.S
+its-$(CONFIG_FIT_IMAGE_FDT_BOSTON) += board-boston.its.S
+its-$(CONFIG_FIT_IMAGE_FDT_NI169445) += board-ni169445.its.S
diff --git a/arch/mips/generic/board-boston.its.S b/arch/mips/generic/board-boston.its.S
new file mode 100644
index 000000000000..a7f51f97b910
--- /dev/null
+++ b/arch/mips/generic/board-boston.its.S
@@ -0,0 +1,22 @@
+/ {
+ images {
+ fdt@boston {
+ description = "img,boston Device Tree";
+ data = /incbin/("boot/dts/img/boston.dtb");
+ type = "flat_dt";
+ arch = "mips";
+ compression = "none";
+ hash@0 {
+ algo = "sha1";
+ };
+ };
+ };
+
+ configurations {
+ conf@boston {
+ description = "Boston Linux kernel";
+ kernel = "kernel@0";
+ fdt = "fdt@boston";
+ };
+ };
+};
diff --git a/arch/mips/generic/board-ni169445.its.S b/arch/mips/generic/board-ni169445.its.S
new file mode 100644
index 000000000000..d12e12fe90be
--- /dev/null
+++ b/arch/mips/generic/board-ni169445.its.S
@@ -0,0 +1,22 @@
+{
+ images {
+ fdt@ni169445 {
+ description = "NI 169445 device tree";
+ data = /incbin/("boot/dts/ni/169445.dtb");
+ type = "flat_dt";
+ arch = "mips";
+ compression = "none";
+ hash@0 {
+ algo = "sha1";
+ };
+ };
+ };
+
+ configurations {
+ conf@ni169445 {
+ description = "NI 169445 Linux Kernel";
+ kernel = "kernel@0";
+ fdt = "fdt@ni169445";
+ };
+ };
+};
diff --git a/arch/mips/generic/init.c b/arch/mips/generic/init.c
index 3f32b376d30e..15a7fb8e2a2e 100644
--- a/arch/mips/generic/init.c
+++ b/arch/mips/generic/init.c
@@ -16,6 +16,7 @@
#include <linux/of_fdt.h>
#include <linux/of_platform.h>
+#include <asm/bootinfo.h>
#include <asm/fw/fw.h>
#include <asm/irq_cpu.h>
#include <asm/machine.h>
@@ -88,6 +89,8 @@ void __init *plat_get_fdt(void)
return (void *)fdt;
}
+#ifdef CONFIG_RELOCATABLE
+
void __init plat_fdt_relocated(void *new_location)
{
/*
@@ -101,6 +104,8 @@ void __init plat_fdt_relocated(void *new_location)
fw_arg1 = (unsigned long)new_location;
}
+#endif /* CONFIG_RELOCATABLE */
+
void __init plat_mem_setup(void)
{
if (mach && mach->fixup_fdt)
diff --git a/arch/mips/generic/irq.c b/arch/mips/generic/irq.c
index 14064bdd91dd..5322d09dd51b 100644
--- a/arch/mips/generic/irq.c
+++ b/arch/mips/generic/irq.c
@@ -12,10 +12,11 @@
#include <linux/clk-provider.h>
#include <linux/clocksource.h>
#include <linux/init.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/types.h>
#include <asm/irq.h>
+#include <asm/mips-cps.h>
+#include <asm/time.h>
int get_c0_fdc_int(void)
{
@@ -23,7 +24,7 @@ int get_c0_fdc_int(void)
if (cpu_has_veic)
panic("Unimplemented!");
- else if (gic_present)
+ else if (mips_gic_present())
mips_cpu_fdc_irq = gic_get_c0_fdc_int();
else if (cp0_fdc_irq >= 0)
mips_cpu_fdc_irq = MIPS_CPU_IRQ_BASE + cp0_fdc_irq;
@@ -39,7 +40,7 @@ int get_c0_perfcount_int(void)
if (cpu_has_veic)
panic("Unimplemented!");
- else if (gic_present)
+ else if (mips_gic_present())
mips_cpu_perf_irq = gic_get_c0_perfcount_int();
else if (cp0_perfcount_irq >= 0)
mips_cpu_perf_irq = MIPS_CPU_IRQ_BASE + cp0_perfcount_irq;
@@ -55,7 +56,7 @@ unsigned int get_c0_compare_int(void)
if (cpu_has_veic)
panic("Unimplemented!");
- else if (gic_present)
+ else if (mips_gic_present())
mips_cpu_timer_irq = gic_get_c0_compare_int();
else
mips_cpu_timer_irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
diff --git a/arch/mips/generic/vmlinux.its.S b/arch/mips/generic/vmlinux.its.S
index 3390e2f80b80..f67fbf1c8541 100644
--- a/arch/mips/generic/vmlinux.its.S
+++ b/arch/mips/generic/vmlinux.its.S
@@ -29,28 +29,3 @@
};
};
};
-
-#ifdef CONFIG_FIT_IMAGE_FDT_BOSTON
-/ {
- images {
- fdt@boston {
- description = "img,boston Device Tree";
- data = /incbin/("boot/dts/img/boston.dtb");
- type = "flat_dt";
- arch = "mips";
- compression = "none";
- hash@0 {
- algo = "sha1";
- };
- };
- };
-
- configurations {
- conf@boston {
- description = "Boston Linux kernel";
- kernel = "kernel@0";
- fdt = "fdt@boston";
- };
- };
-};
-#endif /* CONFIG_FIT_IMAGE_FDT_BOSTON */
diff --git a/arch/mips/include/asm/asm.h b/arch/mips/include/asm/asm.h
index 859cf7048347..81fae23ce7cd 100644
--- a/arch/mips/include/asm/asm.h
+++ b/arch/mips/include/asm/asm.h
@@ -55,6 +55,7 @@
.type symbol, @function; \
.ent symbol, 0; \
symbol: .frame sp, 0, ra; \
+ .cfi_startproc; \
.insn
/*
@@ -66,12 +67,14 @@ symbol: .frame sp, 0, ra; \
.type symbol, @function; \
.ent symbol, 0; \
symbol: .frame sp, framesize, rpc; \
+ .cfi_startproc; \
.insn
/*
* END - mark end of function
*/
#define END(function) \
+ .cfi_endproc; \
.end function; \
.size function, .-function
diff --git a/arch/mips/include/asm/bmips.h b/arch/mips/include/asm/bmips.h
index a92aee7b977a..b3e2975f83d3 100644
--- a/arch/mips/include/asm/bmips.h
+++ b/arch/mips/include/asm/bmips.h
@@ -48,8 +48,8 @@
#include <asm/r4kcache.h>
#include <asm/smp-ops.h>
-extern struct plat_smp_ops bmips43xx_smp_ops;
-extern struct plat_smp_ops bmips5000_smp_ops;
+extern const struct plat_smp_ops bmips43xx_smp_ops;
+extern const struct plat_smp_ops bmips5000_smp_ops;
static inline int register_bmips_smp_ops(void)
{
diff --git a/arch/mips/include/asm/cpu-info.h b/arch/mips/include/asm/cpu-info.h
index cd6efb07c980..a41059d47d31 100644
--- a/arch/mips/include/asm/cpu-info.h
+++ b/arch/mips/include/asm/cpu-info.h
@@ -15,6 +15,8 @@
#include <linux/cache.h>
#include <linux/types.h>
+#include <asm/mipsregs.h>
+
/*
* Descriptor for a cache
*/
@@ -77,17 +79,10 @@ struct cpuinfo_mips {
struct cache_desc tcache; /* Tertiary/split secondary cache */
int srsets; /* Shadow register sets */
int package;/* physical package number */
- int core; /* physical core number */
+ unsigned int globalnumber;
#ifdef CONFIG_64BIT
int vmbits; /* Virtual memory size in bits */
#endif
-#if defined(CONFIG_MIPS_MT_SMP) || defined(CONFIG_CPU_MIPSR6)
- /*
- * There is not necessarily a 1:1 mapping of VPE num to CPU number
- * in particular on multi-core systems.
- */
- int vpe_id; /* Virtual Processor number */
-#endif
void *data; /* Additional data */
unsigned int watch_reg_count; /* Number that exist */
unsigned int watch_reg_use_cnt; /* Usable by ptrace */
@@ -144,11 +139,52 @@ struct proc_cpuinfo_notifier_args {
unsigned long n;
};
-#if defined(CONFIG_MIPS_MT_SMP) || defined(CONFIG_CPU_MIPSR6)
-# define cpu_vpe_id(cpuinfo) ((cpuinfo)->vpe_id)
-#else
-# define cpu_vpe_id(cpuinfo) ({ (void)cpuinfo; 0; })
-#endif
+static inline unsigned int cpu_cluster(struct cpuinfo_mips *cpuinfo)
+{
+ /* Optimisation for systems where multiple clusters aren't used */
+ if (!IS_ENABLED(CONFIG_CPU_MIPSR6))
+ return 0;
+
+ return (cpuinfo->globalnumber & MIPS_GLOBALNUMBER_CLUSTER) >>
+ MIPS_GLOBALNUMBER_CLUSTER_SHF;
+}
+
+static inline unsigned int cpu_core(struct cpuinfo_mips *cpuinfo)
+{
+ return (cpuinfo->globalnumber & MIPS_GLOBALNUMBER_CORE) >>
+ MIPS_GLOBALNUMBER_CORE_SHF;
+}
+
+static inline unsigned int cpu_vpe_id(struct cpuinfo_mips *cpuinfo)
+{
+ /* Optimisation for systems where VP(E)s aren't used */
+ if (!IS_ENABLED(CONFIG_MIPS_MT_SMP) && !IS_ENABLED(CONFIG_CPU_MIPSR6))
+ return 0;
+
+ return (cpuinfo->globalnumber & MIPS_GLOBALNUMBER_VP) >>
+ MIPS_GLOBALNUMBER_VP_SHF;
+}
+
+extern void cpu_set_cluster(struct cpuinfo_mips *cpuinfo, unsigned int cluster);
+extern void cpu_set_core(struct cpuinfo_mips *cpuinfo, unsigned int core);
+extern void cpu_set_vpe_id(struct cpuinfo_mips *cpuinfo, unsigned int vpe);
+
+static inline bool cpus_are_siblings(int cpua, int cpub)
+{
+ struct cpuinfo_mips *infoa = &cpu_data[cpua];
+ struct cpuinfo_mips *infob = &cpu_data[cpub];
+ unsigned int gnuma, gnumb;
+
+ if (infoa->package != infob->package)
+ return false;
+
+ gnuma = infoa->globalnumber & ~MIPS_GLOBALNUMBER_VP;
+ gnumb = infob->globalnumber & ~MIPS_GLOBALNUMBER_VP;
+ if (gnuma != gnumb)
+ return false;
+
+ return true;
+}
static inline unsigned long cpu_asid_inc(void)
{
diff --git a/arch/mips/include/asm/cpu-type.h b/arch/mips/include/asm/cpu-type.h
index 175fe565f4e1..a45af3de075d 100644
--- a/arch/mips/include/asm/cpu-type.h
+++ b/arch/mips/include/asm/cpu-type.h
@@ -151,11 +151,6 @@ static inline int __pure __get_cpu_type(const int cpu_type)
case CPU_R5500:
#endif
-#ifdef CONFIG_SYS_HAS_CPU_R6000
- case CPU_R6000:
- case CPU_R6000A:
-#endif
-
#ifdef CONFIG_SYS_HAS_CPU_NEVADA
case CPU_NEVADA:
#endif
diff --git a/arch/mips/include/asm/cpu.h b/arch/mips/include/asm/cpu.h
index d0c152b989f8..ece9b84f3bcb 100644
--- a/arch/mips/include/asm/cpu.h
+++ b/arch/mips/include/asm/cpu.h
@@ -286,11 +286,6 @@ enum cpu_type_enum {
CPU_R3081, CPU_R3081E,
/*
- * R6000 class processors
- */
- CPU_R6000, CPU_R6000A,
-
- /*
* R4000 class processors
*/
CPU_R4000PC, CPU_R4000SC, CPU_R4000MC, CPU_R4200, CPU_R4300, CPU_R4310,
diff --git a/arch/mips/include/asm/floppy.h b/arch/mips/include/asm/floppy.h
index d75aed36480a..021d09ae5670 100644
--- a/arch/mips/include/asm/floppy.h
+++ b/arch/mips/include/asm/floppy.h
@@ -10,11 +10,11 @@
#ifndef _ASM_FLOPPY_H
#define _ASM_FLOPPY_H
-#include <linux/dma-mapping.h>
+#include <asm/io.h>
static inline void fd_cacheflush(char * addr, long size)
{
- dma_cache_sync(NULL, addr, size, DMA_BIDIRECTIONAL);
+ dma_cache_wback_inv((unsigned long)addr, size);
}
#define MAX_BUFFER_SECTORS 24
diff --git a/arch/mips/include/asm/fpu_emulator.h b/arch/mips/include/asm/fpu_emulator.h
index c05369e0b8d6..b36097d3cbf4 100644
--- a/arch/mips/include/asm/fpu_emulator.h
+++ b/arch/mips/include/asm/fpu_emulator.h
@@ -36,6 +36,7 @@ struct mips_fpu_emulator_stats {
unsigned long emulated;
unsigned long loads;
unsigned long stores;
+ unsigned long branches;
unsigned long cp1ops;
unsigned long cp1xops;
unsigned long errors;
@@ -45,6 +46,121 @@ struct mips_fpu_emulator_stats {
unsigned long ieee754_zerodiv;
unsigned long ieee754_invalidop;
unsigned long ds_emul;
+
+ unsigned long abs_s;
+ unsigned long abs_d;
+ unsigned long add_s;
+ unsigned long add_d;
+ unsigned long bc1eqz;
+ unsigned long bc1nez;
+ unsigned long ceil_w_s;
+ unsigned long ceil_w_d;
+ unsigned long ceil_l_s;
+ unsigned long ceil_l_d;
+ unsigned long class_s;
+ unsigned long class_d;
+ unsigned long cmp_af_s;
+ unsigned long cmp_af_d;
+ unsigned long cmp_eq_s;
+ unsigned long cmp_eq_d;
+ unsigned long cmp_le_s;
+ unsigned long cmp_le_d;
+ unsigned long cmp_lt_s;
+ unsigned long cmp_lt_d;
+ unsigned long cmp_ne_s;
+ unsigned long cmp_ne_d;
+ unsigned long cmp_or_s;
+ unsigned long cmp_or_d;
+ unsigned long cmp_ueq_s;
+ unsigned long cmp_ueq_d;
+ unsigned long cmp_ule_s;
+ unsigned long cmp_ule_d;
+ unsigned long cmp_ult_s;
+ unsigned long cmp_ult_d;
+ unsigned long cmp_un_s;
+ unsigned long cmp_un_d;
+ unsigned long cmp_une_s;
+ unsigned long cmp_une_d;
+ unsigned long cmp_saf_s;
+ unsigned long cmp_saf_d;
+ unsigned long cmp_seq_s;
+ unsigned long cmp_seq_d;
+ unsigned long cmp_sle_s;
+ unsigned long cmp_sle_d;
+ unsigned long cmp_slt_s;
+ unsigned long cmp_slt_d;
+ unsigned long cmp_sne_s;
+ unsigned long cmp_sne_d;
+ unsigned long cmp_sor_s;
+ unsigned long cmp_sor_d;
+ unsigned long cmp_sueq_s;
+ unsigned long cmp_sueq_d;
+ unsigned long cmp_sule_s;
+ unsigned long cmp_sule_d;
+ unsigned long cmp_sult_s;
+ unsigned long cmp_sult_d;
+ unsigned long cmp_sun_s;
+ unsigned long cmp_sun_d;
+ unsigned long cmp_sune_s;
+ unsigned long cmp_sune_d;
+ unsigned long cvt_d_l;
+ unsigned long cvt_d_s;
+ unsigned long cvt_d_w;
+ unsigned long cvt_l_s;
+ unsigned long cvt_l_d;
+ unsigned long cvt_s_d;
+ unsigned long cvt_s_l;
+ unsigned long cvt_s_w;
+ unsigned long cvt_w_s;
+ unsigned long cvt_w_d;
+ unsigned long div_s;
+ unsigned long div_d;
+ unsigned long floor_w_s;
+ unsigned long floor_w_d;
+ unsigned long floor_l_s;
+ unsigned long floor_l_d;
+ unsigned long maddf_s;
+ unsigned long maddf_d;
+ unsigned long max_s;
+ unsigned long max_d;
+ unsigned long maxa_s;
+ unsigned long maxa_d;
+ unsigned long min_s;
+ unsigned long min_d;
+ unsigned long mina_s;
+ unsigned long mina_d;
+ unsigned long mov_s;
+ unsigned long mov_d;
+ unsigned long msubf_s;
+ unsigned long msubf_d;
+ unsigned long mul_s;
+ unsigned long mul_d;
+ unsigned long neg_s;
+ unsigned long neg_d;
+ unsigned long recip_s;
+ unsigned long recip_d;
+ unsigned long rint_s;
+ unsigned long rint_d;
+ unsigned long round_w_s;
+ unsigned long round_w_d;
+ unsigned long round_l_s;
+ unsigned long round_l_d;
+ unsigned long rsqrt_s;
+ unsigned long rsqrt_d;
+ unsigned long sel_s;
+ unsigned long sel_d;
+ unsigned long seleqz_s;
+ unsigned long seleqz_d;
+ unsigned long selnez_s;
+ unsigned long selnez_d;
+ unsigned long sqrt_s;
+ unsigned long sqrt_d;
+ unsigned long sub_s;
+ unsigned long sub_d;
+ unsigned long trunc_w_s;
+ unsigned long trunc_w_d;
+ unsigned long trunc_l_s;
+ unsigned long trunc_l_d;
};
DECLARE_PER_CPU(struct mips_fpu_emulator_stats, fpuemustats);
@@ -62,7 +178,7 @@ do { \
extern int fpu_emulator_cop1Handler(struct pt_regs *xcp,
struct mips_fpu_struct *ctx, int has_fpu,
- void *__user *fault_addr);
+ void __user **fault_addr);
void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr,
struct task_struct *tsk);
int process_fpemu_return(int sig, void __user *fault_addr,
diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
index ecabc00c1e66..0cbf3af37eca 100644
--- a/arch/mips/include/asm/io.h
+++ b/arch/mips/include/asm/io.h
@@ -632,4 +632,6 @@ extern void (*_dma_cache_inv)(unsigned long start, unsigned long size);
*/
#define xlate_dev_kmem_ptr(p) p
+void __ioread64_copy(void *to, const void __iomem *from, size_t count);
+
#endif /* _ASM_IO_H */
diff --git a/arch/mips/include/asm/mach-au1x00/cpu-feature-overrides.h b/arch/mips/include/asm/mach-au1x00/cpu-feature-overrides.h
index bace5b9ae4df..f439cf9cf9d1 100644
--- a/arch/mips/include/asm/mach-au1x00/cpu-feature-overrides.h
+++ b/arch/mips/include/asm/mach-au1x00/cpu-feature-overrides.h
@@ -8,12 +8,16 @@
#define __ASM_MACH_AU1X00_CPU_FEATURE_OVERRIDES_H
#define cpu_has_tlb 1
+#define cpu_has_ftlb 0
#define cpu_has_tlbinv 0
#define cpu_has_segments 0
#define cpu_has_eva 0
#define cpu_has_htw 0
+#define cpu_has_ldpte 0
#define cpu_has_rixiex 0
#define cpu_has_maar 0
+#define cpu_has_rw_llb 0
+#define cpu_has_3kex 0
#define cpu_has_4kex 1
#define cpu_has_3k_cache 0
#define cpu_has_4k_cache 1
@@ -30,6 +34,12 @@
#define cpu_has_mcheck 1
#define cpu_has_ejtag 1
#define cpu_has_llsc 1
+#define cpu_has_guestctl0ext 0
+#define cpu_has_guestctl1 0
+#define cpu_has_guestctl2 0
+#define cpu_has_guestid 0
+#define cpu_has_drg 0
+#define cpu_has_bp_ghist 0
#define cpu_has_mips16 0
#define cpu_has_mips16e2 0
#define cpu_has_mdmx 0
@@ -37,17 +47,23 @@
#define cpu_has_smartmips 0
#define cpu_has_rixi 0
#define cpu_has_mmips 0
+#define cpu_has_lpa 0
+#define cpu_has_mhv 0
#define cpu_has_vtag_icache 0
#define cpu_has_dc_aliases 0
#define cpu_has_ic_fills_f_dc 1
#define cpu_has_pindexed_dcache 0
#define cpu_has_mips32r1 1
#define cpu_has_mips32r2 0
+#define cpu_has_mips32r6 0
#define cpu_has_mips64r1 0
#define cpu_has_mips64r2 0
+#define cpu_has_mips64r6 0
#define cpu_has_dsp 0
#define cpu_has_dsp2 0
+#define cpu_has_dsp3 0
#define cpu_has_mipsmt 0
+#define cpu_has_vp 0
#define cpu_has_userlocal 0
#define cpu_has_nofpuex 0
#define cpu_has_64bits 0
@@ -58,9 +74,19 @@
#define cpu_dcache_line_size() 32
#define cpu_icache_line_size() 32
+#define cpu_scache_line_size() 0
#define cpu_has_perf_cntr_intr_bit 0
#define cpu_has_vz 0
#define cpu_has_msa 0
+#define cpu_has_fre 0
+#define cpu_has_cdmm 0
+#define cpu_has_small_pages 0
+#define cpu_has_nan_legacy 1
+#define cpu_has_nan_2008 1
+#define cpu_has_ebase_wg 0
+#define cpu_has_badinstr 0
+#define cpu_has_badinstrp 0
+#define cpu_has_contextconfig 0
#endif /* __ASM_MACH_AU1X00_CPU_FEATURE_OVERRIDES_H */
diff --git a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
index 5035f09c5427..24080af570f9 100644
--- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_regs.h
@@ -710,7 +710,7 @@
/* Broadcom 6345 ENET DMA definitions */
#define ENETDMA_6345_CHANCFG_REG (0x00)
-#define ENETDMA_6345_MAXBURST_REG (0x40)
+#define ENETDMA_6345_MAXBURST_REG (0x04)
#define ENETDMA_6345_RSTART_REG (0x08)
diff --git a/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h b/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h
index bd8b9bbe1771..a4f798629c3d 100644
--- a/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h
+++ b/arch/mips/include/asm/mach-cavium-octeon/cpu-feature-overrides.h
@@ -46,9 +46,9 @@
#define cpu_has_64bits 1
#define cpu_has_octeon_cache 1
#define cpu_has_saa octeon_has_saa()
-#define cpu_has_mips32r1 0
-#define cpu_has_mips32r2 0
-#define cpu_has_mips64r1 0
+#define cpu_has_mips32r1 1
+#define cpu_has_mips32r2 1
+#define cpu_has_mips64r1 1
#define cpu_has_mips64r2 1
#define cpu_has_dsp 0
#define cpu_has_dsp2 0
diff --git a/arch/mips/include/asm/mach-ip27/topology.h b/arch/mips/include/asm/mach-ip27/topology.h
index defd135e7ac8..3fb7a0e09494 100644
--- a/arch/mips/include/asm/mach-ip27/topology.h
+++ b/arch/mips/include/asm/mach-ip27/topology.h
@@ -23,7 +23,6 @@ struct cpuinfo_ip27 {
extern struct cpuinfo_ip27 sn_cpu_info[NR_CPUS];
#define cpu_to_node(cpu) (sn_cpu_info[(cpu)].p_nodeid)
-#define parent_node(node) (node)
#define cpumask_of_node(node) ((node) == -1 ? \
cpu_all_mask : \
&hub_data(node)->h_cpus)
diff --git a/arch/mips/include/asm/mach-lantiq/lantiq.h b/arch/mips/include/asm/mach-lantiq/lantiq.h
index 8064d7a4b33d..d750f93232e4 100644
--- a/arch/mips/include/asm/mach-lantiq/lantiq.h
+++ b/arch/mips/include/asm/mach-lantiq/lantiq.h
@@ -46,8 +46,6 @@ extern struct clk *clk_get_ppe(void);
/* find out what bootsource we have */
extern unsigned char ltq_boot_select(void);
-/* find out what caused the last cpu reset */
-extern int ltq_reset_cause(void);
/* find out the soc type */
extern int ltq_soc_type(void);
diff --git a/arch/mips/include/asm/mach-loongson64/loongson.h b/arch/mips/include/asm/mach-loongson64/loongson.h
index c68c0cc879c6..d0ae5d55413b 100644
--- a/arch/mips/include/asm/mach-loongson64/loongson.h
+++ b/arch/mips/include/asm/mach-loongson64/loongson.h
@@ -26,7 +26,7 @@ extern void mach_prepare_shutdown(void);
/* environment arguments from bootloader */
extern u32 cpu_clock_freq;
extern u32 memsize, highmemsize;
-extern struct plat_smp_ops loongson3_smp_ops;
+extern const struct plat_smp_ops loongson3_smp_ops;
/* loongson-specific command line, env and memory initialization */
extern void __init prom_init_memory(void);
diff --git a/arch/mips/include/asm/mach-loongson64/topology.h b/arch/mips/include/asm/mach-loongson64/topology.h
index 0d8f3b55bdbc..bcb885615fca 100644
--- a/arch/mips/include/asm/mach-loongson64/topology.h
+++ b/arch/mips/include/asm/mach-loongson64/topology.h
@@ -4,7 +4,6 @@
#ifdef CONFIG_NUMA
#define cpu_to_node(cpu) (cpu_logical_map(cpu) >> 2)
-#define parent_node(node) (node)
#define cpumask_of_node(node) (&__node_data[(node)]->cpumask)
struct pci_bus;
diff --git a/arch/mips/include/asm/mips-boards/maltaint.h b/arch/mips/include/asm/mips-boards/maltaint.h
index 987ff580466b..817698abf2eb 100644
--- a/arch/mips/include/asm/mips-boards/maltaint.h
+++ b/arch/mips/include/asm/mips-boards/maltaint.h
@@ -10,8 +10,6 @@
#ifndef _MIPS_MALTAINT_H
#define _MIPS_MALTAINT_H
-#include <linux/irqchip/mips-gic.h>
-
/*
* Interrupts 0..15 are used for Malta ISA compatible interrupts
*/
@@ -62,7 +60,4 @@
#define MSC01E_INT_PERFCTR 10
#define MSC01E_INT_CPUCTR 11
-/* GIC external interrupts */
-#define GIC_INT_I8259A GIC_SHARED_TO_HWIRQ(3)
-
#endif /* !(_MIPS_MALTAINT_H) */
diff --git a/arch/mips/include/asm/mips-cm.h b/arch/mips/include/asm/mips-cm.h
index cfdbab015769..f6231b91b724 100644
--- a/arch/mips/include/asm/mips-cm.h
+++ b/arch/mips/include/asm/mips-cm.h
@@ -8,16 +8,18 @@
* option) any later version.
*/
+#ifndef __MIPS_ASM_MIPS_CPS_H__
+# error Please include asm/mips-cps.h rather than asm/mips-cm.h
+#endif
+
#ifndef __MIPS_ASM_MIPS_CM_H__
#define __MIPS_ASM_MIPS_CM_H__
#include <linux/bitops.h>
#include <linux/errno.h>
-#include <linux/io.h>
-#include <linux/types.h>
/* The base address of the CM GCR block */
-extern void __iomem *mips_cm_base;
+extern void __iomem *mips_gcr_base;
/* The base address of the CM L2-only sync region */
extern void __iomem *mips_cm_l2sync_base;
@@ -80,7 +82,7 @@ static inline int mips_cm_probe(void)
static inline bool mips_cm_present(void)
{
#ifdef CONFIG_MIPS_CM
- return mips_cm_base != NULL;
+ return mips_gcr_base != NULL;
#else
return false;
#endif
@@ -112,321 +114,219 @@ static inline bool mips_cm_has_l2sync(void)
/* Size of the L2-only sync region */
#define MIPS_CM_L2SYNC_SIZE 0x1000
-/* Macros to ease the creation of register access functions */
-#define BUILD_CM_R_(name, off) \
-static inline unsigned long __iomem *addr_gcr_##name(void) \
-{ \
- return (unsigned long __iomem *)(mips_cm_base + (off)); \
-} \
- \
-static inline u32 read32_gcr_##name(void) \
-{ \
- return __raw_readl(addr_gcr_##name()); \
-} \
- \
-static inline u64 read64_gcr_##name(void) \
-{ \
- void __iomem *addr = addr_gcr_##name(); \
- u64 ret; \
- \
- if (mips_cm_is64) { \
- ret = __raw_readq(addr); \
- } else { \
- ret = __raw_readl(addr); \
- ret |= (u64)__raw_readl(addr + 0x4) << 32; \
- } \
- \
- return ret; \
-} \
- \
-static inline unsigned long read_gcr_##name(void) \
-{ \
- if (mips_cm_is64) \
- return read64_gcr_##name(); \
- else \
- return read32_gcr_##name(); \
-}
-
-#define BUILD_CM__W(name, off) \
-static inline void write32_gcr_##name(u32 value) \
-{ \
- __raw_writel(value, addr_gcr_##name()); \
-} \
- \
-static inline void write64_gcr_##name(u64 value) \
-{ \
- __raw_writeq(value, addr_gcr_##name()); \
-} \
- \
-static inline void write_gcr_##name(unsigned long value) \
-{ \
- if (mips_cm_is64) \
- write64_gcr_##name(value); \
- else \
- write32_gcr_##name(value); \
-}
-
-#define BUILD_CM_RW(name, off) \
- BUILD_CM_R_(name, off) \
- BUILD_CM__W(name, off)
-
-#define BUILD_CM_Cx_R_(name, off) \
- BUILD_CM_R_(cl_##name, MIPS_CM_CLCB_OFS + (off)) \
- BUILD_CM_R_(co_##name, MIPS_CM_COCB_OFS + (off))
-
-#define BUILD_CM_Cx__W(name, off) \
- BUILD_CM__W(cl_##name, MIPS_CM_CLCB_OFS + (off)) \
- BUILD_CM__W(co_##name, MIPS_CM_COCB_OFS + (off))
-
-#define BUILD_CM_Cx_RW(name, off) \
- BUILD_CM_Cx_R_(name, off) \
- BUILD_CM_Cx__W(name, off)
-
-/* GCB register accessor functions */
-BUILD_CM_R_(config, MIPS_CM_GCB_OFS + 0x00)
-BUILD_CM_RW(base, MIPS_CM_GCB_OFS + 0x08)
-BUILD_CM_RW(access, MIPS_CM_GCB_OFS + 0x20)
-BUILD_CM_R_(rev, MIPS_CM_GCB_OFS + 0x30)
-BUILD_CM_RW(err_control, MIPS_CM_GCB_OFS + 0x38)
-BUILD_CM_RW(error_mask, MIPS_CM_GCB_OFS + 0x40)
-BUILD_CM_RW(error_cause, MIPS_CM_GCB_OFS + 0x48)
-BUILD_CM_RW(error_addr, MIPS_CM_GCB_OFS + 0x50)
-BUILD_CM_RW(error_mult, MIPS_CM_GCB_OFS + 0x58)
-BUILD_CM_RW(l2_only_sync_base, MIPS_CM_GCB_OFS + 0x70)
-BUILD_CM_RW(gic_base, MIPS_CM_GCB_OFS + 0x80)
-BUILD_CM_RW(cpc_base, MIPS_CM_GCB_OFS + 0x88)
-BUILD_CM_RW(reg0_base, MIPS_CM_GCB_OFS + 0x90)
-BUILD_CM_RW(reg0_mask, MIPS_CM_GCB_OFS + 0x98)
-BUILD_CM_RW(reg1_base, MIPS_CM_GCB_OFS + 0xa0)
-BUILD_CM_RW(reg1_mask, MIPS_CM_GCB_OFS + 0xa8)
-BUILD_CM_RW(reg2_base, MIPS_CM_GCB_OFS + 0xb0)
-BUILD_CM_RW(reg2_mask, MIPS_CM_GCB_OFS + 0xb8)
-BUILD_CM_RW(reg3_base, MIPS_CM_GCB_OFS + 0xc0)
-BUILD_CM_RW(reg3_mask, MIPS_CM_GCB_OFS + 0xc8)
-BUILD_CM_R_(gic_status, MIPS_CM_GCB_OFS + 0xd0)
-BUILD_CM_R_(cpc_status, MIPS_CM_GCB_OFS + 0xf0)
-BUILD_CM_RW(l2_config, MIPS_CM_GCB_OFS + 0x130)
-BUILD_CM_RW(sys_config2, MIPS_CM_GCB_OFS + 0x150)
-BUILD_CM_RW(l2_pft_control, MIPS_CM_GCB_OFS + 0x300)
-BUILD_CM_RW(l2_pft_control_b, MIPS_CM_GCB_OFS + 0x308)
-BUILD_CM_RW(bev_base, MIPS_CM_GCB_OFS + 0x680)
-
-/* Core Local & Core Other register accessor functions */
-BUILD_CM_Cx_RW(reset_release, 0x00)
-BUILD_CM_Cx_RW(coherence, 0x08)
-BUILD_CM_Cx_R_(config, 0x10)
-BUILD_CM_Cx_RW(other, 0x18)
-BUILD_CM_Cx_RW(reset_base, 0x20)
-BUILD_CM_Cx_R_(id, 0x28)
-BUILD_CM_Cx_RW(reset_ext_base, 0x30)
-BUILD_CM_Cx_R_(tcid_0_priority, 0x40)
-BUILD_CM_Cx_R_(tcid_1_priority, 0x48)
-BUILD_CM_Cx_R_(tcid_2_priority, 0x50)
-BUILD_CM_Cx_R_(tcid_3_priority, 0x58)
-BUILD_CM_Cx_R_(tcid_4_priority, 0x60)
-BUILD_CM_Cx_R_(tcid_5_priority, 0x68)
-BUILD_CM_Cx_R_(tcid_6_priority, 0x70)
-BUILD_CM_Cx_R_(tcid_7_priority, 0x78)
-BUILD_CM_Cx_R_(tcid_8_priority, 0x80)
-
-/* GCR_CONFIG register fields */
-#define CM_GCR_CONFIG_NUMIOCU_SHF 8
-#define CM_GCR_CONFIG_NUMIOCU_MSK (_ULCAST_(0xf) << 8)
-#define CM_GCR_CONFIG_PCORES_SHF 0
-#define CM_GCR_CONFIG_PCORES_MSK (_ULCAST_(0xff) << 0)
-
-/* GCR_BASE register fields */
-#define CM_GCR_BASE_GCRBASE_SHF 15
-#define CM_GCR_BASE_GCRBASE_MSK (_ULCAST_(0x1ffff) << 15)
-#define CM_GCR_BASE_CMDEFTGT_SHF 0
-#define CM_GCR_BASE_CMDEFTGT_MSK (_ULCAST_(0x3) << 0)
+#define GCR_ACCESSOR_RO(sz, off, name) \
+ CPS_ACCESSOR_RO(gcr, sz, MIPS_CM_GCB_OFS + off, name) \
+ CPS_ACCESSOR_RO(gcr, sz, MIPS_CM_COCB_OFS + off, redir_##name)
+
+#define GCR_ACCESSOR_RW(sz, off, name) \
+ CPS_ACCESSOR_RW(gcr, sz, MIPS_CM_GCB_OFS + off, name) \
+ CPS_ACCESSOR_RW(gcr, sz, MIPS_CM_COCB_OFS + off, redir_##name)
+
+#define GCR_CX_ACCESSOR_RO(sz, off, name) \
+ CPS_ACCESSOR_RO(gcr, sz, MIPS_CM_CLCB_OFS + off, cl_##name) \
+ CPS_ACCESSOR_RO(gcr, sz, MIPS_CM_COCB_OFS + off, co_##name)
+
+#define GCR_CX_ACCESSOR_RW(sz, off, name) \
+ CPS_ACCESSOR_RW(gcr, sz, MIPS_CM_CLCB_OFS + off, cl_##name) \
+ CPS_ACCESSOR_RW(gcr, sz, MIPS_CM_COCB_OFS + off, co_##name)
+
+/* GCR_CONFIG - Information about the system */
+GCR_ACCESSOR_RO(64, 0x000, config)
+#define CM_GCR_CONFIG_CLUSTER_COH_CAPABLE BIT_ULL(43)
+#define CM_GCR_CONFIG_CLUSTER_ID GENMASK_ULL(39, 32)
+#define CM_GCR_CONFIG_NUM_CLUSTERS GENMASK(29, 23)
+#define CM_GCR_CONFIG_NUMIOCU GENMASK(15, 8)
+#define CM_GCR_CONFIG_PCORES GENMASK(7, 0)
+
+/* GCR_BASE - Base address of the Global Configuration Registers (GCRs) */
+GCR_ACCESSOR_RW(64, 0x008, base)
+#define CM_GCR_BASE_GCRBASE GENMASK_ULL(47, 15)
+#define CM_GCR_BASE_CMDEFTGT GENMASK(1, 0)
#define CM_GCR_BASE_CMDEFTGT_DISABLED 0
#define CM_GCR_BASE_CMDEFTGT_MEM 1
#define CM_GCR_BASE_CMDEFTGT_IOCU0 2
#define CM_GCR_BASE_CMDEFTGT_IOCU1 3
-/* GCR_RESET_EXT_BASE register fields */
-#define CM_GCR_RESET_EXT_BASE_EVARESET BIT(31)
-#define CM_GCR_RESET_EXT_BASE_UEB BIT(30)
-
-/* GCR_ACCESS register fields */
-#define CM_GCR_ACCESS_ACCESSEN_SHF 0
-#define CM_GCR_ACCESS_ACCESSEN_MSK (_ULCAST_(0xff) << 0)
+/* GCR_ACCESS - Controls core/IOCU access to GCRs */
+GCR_ACCESSOR_RW(32, 0x020, access)
+#define CM_GCR_ACCESS_ACCESSEN GENMASK(7, 0)
-/* GCR_REV register fields */
-#define CM_GCR_REV_MAJOR_SHF 8
-#define CM_GCR_REV_MAJOR_MSK (_ULCAST_(0xff) << 8)
-#define CM_GCR_REV_MINOR_SHF 0
-#define CM_GCR_REV_MINOR_MSK (_ULCAST_(0xff) << 0)
+/* GCR_REV - Indicates the Coherence Manager revision */
+GCR_ACCESSOR_RO(32, 0x030, rev)
+#define CM_GCR_REV_MAJOR GENMASK(15, 8)
+#define CM_GCR_REV_MINOR GENMASK(7, 0)
#define CM_ENCODE_REV(major, minor) \
- (((major) << CM_GCR_REV_MAJOR_SHF) | \
- ((minor) << CM_GCR_REV_MINOR_SHF))
+ (((major) << __ffs(CM_GCR_REV_MAJOR)) | \
+ ((minor) << __ffs(CM_GCR_REV_MINOR)))
#define CM_REV_CM2 CM_ENCODE_REV(6, 0)
#define CM_REV_CM2_5 CM_ENCODE_REV(7, 0)
#define CM_REV_CM3 CM_ENCODE_REV(8, 0)
-
-/* GCR_ERR_CONTROL register fields */
-#define CM_GCR_ERR_CONTROL_L2_ECC_EN_SHF 1
-#define CM_GCR_ERR_CONTROL_L2_ECC_EN_MSK (_ULCAST_(0x1) << 1)
-#define CM_GCR_ERR_CONTROL_L2_ECC_SUPPORT_SHF 0
-#define CM_GCR_ERR_CONTROL_L2_ECC_SUPPORT_MSK (_ULCAST_(0x1) << 0)
-
-/* GCR_ERROR_CAUSE register fields */
-#define CM_GCR_ERROR_CAUSE_ERRTYPE_SHF 27
-#define CM_GCR_ERROR_CAUSE_ERRTYPE_MSK (_ULCAST_(0x1f) << 27)
-#define CM3_GCR_ERROR_CAUSE_ERRTYPE_SHF 58
-#define CM3_GCR_ERROR_CAUSE_ERRTYPE_MSK GENMASK_ULL(63, 58)
-#define CM_GCR_ERROR_CAUSE_ERRINFO_SHF 0
-#define CM_GCR_ERROR_CAUSE_ERRINGO_MSK (_ULCAST_(0x7ffffff) << 0)
-
-/* GCR_ERROR_MULT register fields */
-#define CM_GCR_ERROR_MULT_ERR2ND_SHF 0
-#define CM_GCR_ERROR_MULT_ERR2ND_MSK (_ULCAST_(0x1f) << 0)
-
-/* GCR_L2_ONLY_SYNC_BASE register fields */
-#define CM_GCR_L2_ONLY_SYNC_BASE_SYNCBASE_SHF 12
-#define CM_GCR_L2_ONLY_SYNC_BASE_SYNCBASE_MSK (_ULCAST_(0xfffff) << 12)
-#define CM_GCR_L2_ONLY_SYNC_BASE_SYNCEN_SHF 0
-#define CM_GCR_L2_ONLY_SYNC_BASE_SYNCEN_MSK (_ULCAST_(0x1) << 0)
-
-/* GCR_GIC_BASE register fields */
-#define CM_GCR_GIC_BASE_GICBASE_SHF 17
-#define CM_GCR_GIC_BASE_GICBASE_MSK (_ULCAST_(0x7fff) << 17)
-#define CM_GCR_GIC_BASE_GICEN_SHF 0
-#define CM_GCR_GIC_BASE_GICEN_MSK (_ULCAST_(0x1) << 0)
-
-/* GCR_CPC_BASE register fields */
-#define CM_GCR_CPC_BASE_CPCBASE_SHF 15
-#define CM_GCR_CPC_BASE_CPCBASE_MSK (_ULCAST_(0x1ffff) << 15)
-#define CM_GCR_CPC_BASE_CPCEN_SHF 0
-#define CM_GCR_CPC_BASE_CPCEN_MSK (_ULCAST_(0x1) << 0)
-
-/* GCR_GIC_STATUS register fields */
-#define CM_GCR_GIC_STATUS_GICEX_SHF 0
-#define CM_GCR_GIC_STATUS_GICEX_MSK (_ULCAST_(0x1) << 0)
-
-/* GCR_REGn_BASE register fields */
-#define CM_GCR_REGn_BASE_BASEADDR_SHF 16
-#define CM_GCR_REGn_BASE_BASEADDR_MSK (_ULCAST_(0xffff) << 16)
-
-/* GCR_REGn_MASK register fields */
-#define CM_GCR_REGn_MASK_ADDRMASK_SHF 16
-#define CM_GCR_REGn_MASK_ADDRMASK_MSK (_ULCAST_(0xffff) << 16)
-#define CM_GCR_REGn_MASK_CCAOVR_SHF 5
-#define CM_GCR_REGn_MASK_CCAOVR_MSK (_ULCAST_(0x3) << 5)
-#define CM_GCR_REGn_MASK_CCAOVREN_SHF 4
-#define CM_GCR_REGn_MASK_CCAOVREN_MSK (_ULCAST_(0x1) << 4)
-#define CM_GCR_REGn_MASK_DROPL2_SHF 2
-#define CM_GCR_REGn_MASK_DROPL2_MSK (_ULCAST_(0x1) << 2)
-#define CM_GCR_REGn_MASK_CMTGT_SHF 0
-#define CM_GCR_REGn_MASK_CMTGT_MSK (_ULCAST_(0x3) << 0)
-#define CM_GCR_REGn_MASK_CMTGT_DISABLED (_ULCAST_(0x0) << 0)
-#define CM_GCR_REGn_MASK_CMTGT_MEM (_ULCAST_(0x1) << 0)
-#define CM_GCR_REGn_MASK_CMTGT_IOCU0 (_ULCAST_(0x2) << 0)
-#define CM_GCR_REGn_MASK_CMTGT_IOCU1 (_ULCAST_(0x3) << 0)
-
-/* GCR_GIC_STATUS register fields */
-#define CM_GCR_GIC_STATUS_EX_SHF 0
-#define CM_GCR_GIC_STATUS_EX_MSK (_ULCAST_(0x1) << 0)
-
-/* GCR_CPC_STATUS register fields */
-#define CM_GCR_CPC_STATUS_EX_SHF 0
-#define CM_GCR_CPC_STATUS_EX_MSK (_ULCAST_(0x1) << 0)
-
-/* GCR_L2_CONFIG register fields */
-#define CM_GCR_L2_CONFIG_BYPASS_SHF 20
-#define CM_GCR_L2_CONFIG_BYPASS_MSK (_ULCAST_(0x1) << 20)
-#define CM_GCR_L2_CONFIG_SET_SIZE_SHF 12
-#define CM_GCR_L2_CONFIG_SET_SIZE_MSK (_ULCAST_(0xf) << 12)
-#define CM_GCR_L2_CONFIG_LINE_SIZE_SHF 8
-#define CM_GCR_L2_CONFIG_LINE_SIZE_MSK (_ULCAST_(0xf) << 8)
-#define CM_GCR_L2_CONFIG_ASSOC_SHF 0
-#define CM_GCR_L2_CONFIG_ASSOC_MSK (_ULCAST_(0xff) << 0)
-
-/* GCR_SYS_CONFIG2 register fields */
-#define CM_GCR_SYS_CONFIG2_MAXVPW_SHF 0
-#define CM_GCR_SYS_CONFIG2_MAXVPW_MSK (_ULCAST_(0xf) << 0)
-
-/* GCR_L2_PFT_CONTROL register fields */
-#define CM_GCR_L2_PFT_CONTROL_PAGEMASK_SHF 12
-#define CM_GCR_L2_PFT_CONTROL_PAGEMASK_MSK (_ULCAST_(0xfffff) << 12)
-#define CM_GCR_L2_PFT_CONTROL_PFTEN_SHF 8
-#define CM_GCR_L2_PFT_CONTROL_PFTEN_MSK (_ULCAST_(0x1) << 8)
-#define CM_GCR_L2_PFT_CONTROL_NPFT_SHF 0
-#define CM_GCR_L2_PFT_CONTROL_NPFT_MSK (_ULCAST_(0xff) << 0)
-
-/* GCR_L2_PFT_CONTROL_B register fields */
-#define CM_GCR_L2_PFT_CONTROL_B_CEN_SHF 8
-#define CM_GCR_L2_PFT_CONTROL_B_CEN_MSK (_ULCAST_(0x1) << 8)
-#define CM_GCR_L2_PFT_CONTROL_B_PORTID_SHF 0
-#define CM_GCR_L2_PFT_CONTROL_B_PORTID_MSK (_ULCAST_(0xff) << 0)
-
-/* GCR_Cx_COHERENCE register fields */
-#define CM_GCR_Cx_COHERENCE_COHDOMAINEN_SHF 0
-#define CM_GCR_Cx_COHERENCE_COHDOMAINEN_MSK (_ULCAST_(0xff) << 0)
-#define CM3_GCR_Cx_COHERENCE_COHEN_MSK (_ULCAST_(0x1) << 0)
-
-/* GCR_Cx_CONFIG register fields */
-#define CM_GCR_Cx_CONFIG_IOCUTYPE_SHF 10
-#define CM_GCR_Cx_CONFIG_IOCUTYPE_MSK (_ULCAST_(0x3) << 10)
-#define CM_GCR_Cx_CONFIG_PVPE_SHF 0
-#define CM_GCR_Cx_CONFIG_PVPE_MSK (_ULCAST_(0x3ff) << 0)
-
-/* GCR_Cx_OTHER register fields */
-#define CM_GCR_Cx_OTHER_CORENUM_SHF 16
-#define CM_GCR_Cx_OTHER_CORENUM_MSK (_ULCAST_(0xffff) << 16)
-#define CM3_GCR_Cx_OTHER_CORE_SHF 8
-#define CM3_GCR_Cx_OTHER_CORE_MSK (_ULCAST_(0x3f) << 8)
-#define CM3_GCR_Cx_OTHER_VP_SHF 0
-#define CM3_GCR_Cx_OTHER_VP_MSK (_ULCAST_(0x7) << 0)
-
-/* GCR_Cx_RESET_BASE register fields */
-#define CM_GCR_Cx_RESET_BASE_BEVEXCBASE_SHF 12
-#define CM_GCR_Cx_RESET_BASE_BEVEXCBASE_MSK (_ULCAST_(0xfffff) << 12)
-
-/* GCR_Cx_RESET_EXT_BASE register fields */
-#define CM_GCR_Cx_RESET_EXT_BASE_EVARESET_SHF 31
-#define CM_GCR_Cx_RESET_EXT_BASE_EVARESET_MSK (_ULCAST_(0x1) << 31)
-#define CM_GCR_Cx_RESET_EXT_BASE_UEB_SHF 30
-#define CM_GCR_Cx_RESET_EXT_BASE_UEB_MSK (_ULCAST_(0x1) << 30)
-#define CM_GCR_Cx_RESET_EXT_BASE_BEVEXCMASK_SHF 20
-#define CM_GCR_Cx_RESET_EXT_BASE_BEVEXCMASK_MSK (_ULCAST_(0xff) << 20)
-#define CM_GCR_Cx_RESET_EXT_BASE_BEVEXCPA_SHF 1
-#define CM_GCR_Cx_RESET_EXT_BASE_BEVEXCPA_MSK (_ULCAST_(0x7f) << 1)
-#define CM_GCR_Cx_RESET_EXT_BASE_PRESENT_SHF 0
-#define CM_GCR_Cx_RESET_EXT_BASE_PRESENT_MSK (_ULCAST_(0x1) << 0)
-
-/**
- * mips_cm_numcores - return the number of cores present in the system
- *
- * Returns the value of the PCORES field of the GCR_CONFIG register plus 1, or
- * zero if no Coherence Manager is present.
- */
-static inline unsigned mips_cm_numcores(void)
-{
- if (!mips_cm_present())
- return 0;
-
- return ((read_gcr_config() & CM_GCR_CONFIG_PCORES_MSK)
- >> CM_GCR_CONFIG_PCORES_SHF) + 1;
-}
-
-/**
- * mips_cm_numiocu - return the number of IOCUs present in the system
- *
- * Returns the value of the NUMIOCU field of the GCR_CONFIG register, or zero
- * if no Coherence Manager is present.
- */
-static inline unsigned mips_cm_numiocu(void)
-{
- if (!mips_cm_present())
- return 0;
-
- return (read_gcr_config() & CM_GCR_CONFIG_NUMIOCU_MSK)
- >> CM_GCR_CONFIG_NUMIOCU_SHF;
-}
+#define CM_REV_CM3_5 CM_ENCODE_REV(9, 0)
+
+/* GCR_ERR_CONTROL - Control error checking logic */
+GCR_ACCESSOR_RW(32, 0x038, err_control)
+#define CM_GCR_ERR_CONTROL_L2_ECC_EN BIT(1)
+#define CM_GCR_ERR_CONTROL_L2_ECC_SUPPORT BIT(0)
+
+/* GCR_ERR_MASK - Control which errors are reported as interrupts */
+GCR_ACCESSOR_RW(64, 0x040, error_mask)
+
+/* GCR_ERR_CAUSE - Indicates the type of error that occurred */
+GCR_ACCESSOR_RW(64, 0x048, error_cause)
+#define CM_GCR_ERROR_CAUSE_ERRTYPE GENMASK(31, 27)
+#define CM3_GCR_ERROR_CAUSE_ERRTYPE GENMASK_ULL(63, 58)
+#define CM_GCR_ERROR_CAUSE_ERRINFO GENMASK(26, 0)
+
+/* GCR_ERR_ADDR - Indicates the address associated with an error */
+GCR_ACCESSOR_RW(64, 0x050, error_addr)
+
+/* GCR_ERR_MULT - Indicates when multiple errors have occurred */
+GCR_ACCESSOR_RW(64, 0x058, error_mult)
+#define CM_GCR_ERROR_MULT_ERR2ND GENMASK(4, 0)
+
+/* GCR_L2_ONLY_SYNC_BASE - Base address of the L2 cache-only sync region */
+GCR_ACCESSOR_RW(64, 0x070, l2_only_sync_base)
+#define CM_GCR_L2_ONLY_SYNC_BASE_SYNCBASE GENMASK(31, 12)
+#define CM_GCR_L2_ONLY_SYNC_BASE_SYNCEN BIT(0)
+
+/* GCR_GIC_BASE - Base address of the Global Interrupt Controller (GIC) */
+GCR_ACCESSOR_RW(64, 0x080, gic_base)
+#define CM_GCR_GIC_BASE_GICBASE GENMASK(31, 17)
+#define CM_GCR_GIC_BASE_GICEN BIT(0)
+
+/* GCR_CPC_BASE - Base address of the Cluster Power Controller (CPC) */
+GCR_ACCESSOR_RW(64, 0x088, cpc_base)
+#define CM_GCR_CPC_BASE_CPCBASE GENMASK(31, 15)
+#define CM_GCR_CPC_BASE_CPCEN BIT(0)
+
+/* GCR_REGn_BASE - Base addresses of CM address regions */
+GCR_ACCESSOR_RW(64, 0x090, reg0_base)
+GCR_ACCESSOR_RW(64, 0x0a0, reg1_base)
+GCR_ACCESSOR_RW(64, 0x0b0, reg2_base)
+GCR_ACCESSOR_RW(64, 0x0c0, reg3_base)
+#define CM_GCR_REGn_BASE_BASEADDR GENMASK(31, 16)
+
+/* GCR_REGn_MASK - Size & destination of CM address regions */
+GCR_ACCESSOR_RW(64, 0x098, reg0_mask)
+GCR_ACCESSOR_RW(64, 0x0a8, reg1_mask)
+GCR_ACCESSOR_RW(64, 0x0b8, reg2_mask)
+GCR_ACCESSOR_RW(64, 0x0c8, reg3_mask)
+#define CM_GCR_REGn_MASK_ADDRMASK GENMASK(31, 16)
+#define CM_GCR_REGn_MASK_CCAOVR GENMASK(7, 5)
+#define CM_GCR_REGn_MASK_CCAOVREN BIT(4)
+#define CM_GCR_REGn_MASK_DROPL2 BIT(2)
+#define CM_GCR_REGn_MASK_CMTGT GENMASK(1, 0)
+#define CM_GCR_REGn_MASK_CMTGT_DISABLED 0x0
+#define CM_GCR_REGn_MASK_CMTGT_MEM 0x1
+#define CM_GCR_REGn_MASK_CMTGT_IOCU0 0x2
+#define CM_GCR_REGn_MASK_CMTGT_IOCU1 0x3
+
+/* GCR_GIC_STATUS - Indicates presence of a Global Interrupt Controller (GIC) */
+GCR_ACCESSOR_RO(32, 0x0d0, gic_status)
+#define CM_GCR_GIC_STATUS_EX BIT(0)
+
+/* GCR_CPC_STATUS - Indicates presence of a Cluster Power Controller (CPC) */
+GCR_ACCESSOR_RO(32, 0x0f0, cpc_status)
+#define CM_GCR_CPC_STATUS_EX BIT(0)
+
+/* GCR_L2_CONFIG - Indicates L2 cache configuration when Config5.L2C=1 */
+GCR_ACCESSOR_RW(32, 0x130, l2_config)
+#define CM_GCR_L2_CONFIG_BYPASS BIT(20)
+#define CM_GCR_L2_CONFIG_SET_SIZE GENMASK(15, 12)
+#define CM_GCR_L2_CONFIG_LINE_SIZE GENMASK(11, 8)
+#define CM_GCR_L2_CONFIG_ASSOC GENMASK(7, 0)
+
+/* GCR_SYS_CONFIG2 - Further information about the system */
+GCR_ACCESSOR_RO(32, 0x150, sys_config2)
+#define CM_GCR_SYS_CONFIG2_MAXVPW GENMASK(3, 0)
+
+/* GCR_L2_PFT_CONTROL - Controls hardware L2 prefetching */
+GCR_ACCESSOR_RW(32, 0x300, l2_pft_control)
+#define CM_GCR_L2_PFT_CONTROL_PAGEMASK GENMASK(31, 12)
+#define CM_GCR_L2_PFT_CONTROL_PFTEN BIT(8)
+#define CM_GCR_L2_PFT_CONTROL_NPFT GENMASK(7, 0)
+
+/* GCR_L2_PFT_CONTROL_B - Controls hardware L2 prefetching */
+GCR_ACCESSOR_RW(32, 0x308, l2_pft_control_b)
+#define CM_GCR_L2_PFT_CONTROL_B_CEN BIT(8)
+#define CM_GCR_L2_PFT_CONTROL_B_PORTID GENMASK(7, 0)
+
+/* GCR_L2SM_COP - L2 cache op state machine control */
+GCR_ACCESSOR_RW(32, 0x620, l2sm_cop)
+#define CM_GCR_L2SM_COP_PRESENT BIT(31)
+#define CM_GCR_L2SM_COP_RESULT GENMASK(8, 6)
+#define CM_GCR_L2SM_COP_RESULT_DONTCARE 0
+#define CM_GCR_L2SM_COP_RESULT_DONE_OK 1
+#define CM_GCR_L2SM_COP_RESULT_DONE_ERROR 2
+#define CM_GCR_L2SM_COP_RESULT_ABORT_OK 3
+#define CM_GCR_L2SM_COP_RESULT_ABORT_ERROR 4
+#define CM_GCR_L2SM_COP_RUNNING BIT(5)
+#define CM_GCR_L2SM_COP_TYPE GENMASK(4, 2)
+#define CM_GCR_L2SM_COP_TYPE_IDX_WBINV 0
+#define CM_GCR_L2SM_COP_TYPE_IDX_STORETAG 1
+#define CM_GCR_L2SM_COP_TYPE_IDX_STORETAGDATA 2
+#define CM_GCR_L2SM_COP_TYPE_HIT_INV 4
+#define CM_GCR_L2SM_COP_TYPE_HIT_WBINV 5
+#define CM_GCR_L2SM_COP_TYPE_HIT_WB 6
+#define CM_GCR_L2SM_COP_TYPE_FETCHLOCK 7
+#define CM_GCR_L2SM_COP_CMD GENMASK(1, 0)
+#define CM_GCR_L2SM_COP_CMD_START 1 /* only when idle */
+#define CM_GCR_L2SM_COP_CMD_ABORT 3 /* only when running */
+
+/* GCR_L2SM_TAG_ADDR_COP - L2 cache op state machine address control */
+GCR_ACCESSOR_RW(64, 0x628, l2sm_tag_addr_cop)
+#define CM_GCR_L2SM_TAG_ADDR_COP_NUM_LINES GENMASK_ULL(63, 48)
+#define CM_GCR_L2SM_TAG_ADDR_COP_START_TAG GENMASK_ULL(47, 6)
+
+/* GCR_BEV_BASE - Controls the location of the BEV for powered up cores */
+GCR_ACCESSOR_RW(64, 0x680, bev_base)
+
+/* GCR_Cx_RESET_RELEASE - Controls core reset for CM 1.x */
+GCR_CX_ACCESSOR_RW(32, 0x000, reset_release)
+
+/* GCR_Cx_COHERENCE - Controls core coherence */
+GCR_CX_ACCESSOR_RW(32, 0x008, coherence)
+#define CM_GCR_Cx_COHERENCE_COHDOMAINEN GENMASK(7, 0)
+#define CM3_GCR_Cx_COHERENCE_COHEN BIT(0)
+
+/* GCR_Cx_CONFIG - Information about a core's configuration */
+GCR_CX_ACCESSOR_RO(32, 0x010, config)
+#define CM_GCR_Cx_CONFIG_IOCUTYPE GENMASK(11, 10)
+#define CM_GCR_Cx_CONFIG_PVPE GENMASK(9, 0)
+
+/* GCR_Cx_OTHER - Configure the core-other/redirect GCR block */
+GCR_CX_ACCESSOR_RW(32, 0x018, other)
+#define CM_GCR_Cx_OTHER_CORENUM GENMASK(31, 16) /* CM < 3 */
+#define CM_GCR_Cx_OTHER_CLUSTER_EN BIT(31) /* CM >= 3.5 */
+#define CM_GCR_Cx_OTHER_GIC_EN BIT(30) /* CM >= 3.5 */
+#define CM_GCR_Cx_OTHER_BLOCK GENMASK(25, 24) /* CM >= 3.5 */
+#define CM_GCR_Cx_OTHER_BLOCK_LOCAL 0
+#define CM_GCR_Cx_OTHER_BLOCK_GLOBAL 1
+#define CM_GCR_Cx_OTHER_BLOCK_USER 2
+#define CM_GCR_Cx_OTHER_BLOCK_GLOBAL_HIGH 3
+#define CM_GCR_Cx_OTHER_CLUSTER GENMASK(21, 16) /* CM >= 3.5 */
+#define CM3_GCR_Cx_OTHER_CORE GENMASK(13, 8) /* CM >= 3 */
+#define CM_GCR_Cx_OTHER_CORE_CM 32
+#define CM3_GCR_Cx_OTHER_VP GENMASK(2, 0) /* CM >= 3 */
+
+/* GCR_Cx_RESET_BASE - Configure where powered up cores will fetch from */
+GCR_CX_ACCESSOR_RW(32, 0x020, reset_base)
+#define CM_GCR_Cx_RESET_BASE_BEVEXCBASE GENMASK(31, 12)
+
+/* GCR_Cx_ID - Identify the current core */
+GCR_CX_ACCESSOR_RO(32, 0x028, id)
+#define CM_GCR_Cx_ID_CLUSTER GENMASK(15, 8)
+#define CM_GCR_Cx_ID_CORE GENMASK(7, 0)
+
+/* GCR_Cx_RESET_EXT_BASE - Configure behaviour when cores reset or power up */
+GCR_CX_ACCESSOR_RW(32, 0x030, reset_ext_base)
+#define CM_GCR_Cx_RESET_EXT_BASE_EVARESET BIT(31)
+#define CM_GCR_Cx_RESET_EXT_BASE_UEB BIT(30)
+#define CM_GCR_Cx_RESET_EXT_BASE_BEVEXCMASK GENMASK(27, 20)
+#define CM_GCR_Cx_RESET_EXT_BASE_BEVEXCPA GENMASK(7, 1)
+#define CM_GCR_Cx_RESET_EXT_BASE_PRESENT BIT(0)
/**
* mips_cm_l2sync - perform an L2-only sync operation
@@ -469,7 +369,7 @@ static inline unsigned int mips_cm_max_vp_width(void)
uint32_t cfg;
if (mips_cm_revision() >= CM_REV_CM3)
- return read_gcr_sys_config2() & CM_GCR_SYS_CONFIG2_MAXVPW_MSK;
+ return read_gcr_sys_config2() & CM_GCR_SYS_CONFIG2_MAXVPW;
if (mips_cm_present()) {
/*
@@ -477,8 +377,8 @@ static inline unsigned int mips_cm_max_vp_width(void)
* number of VP(E)s, and if that ever changes then this will
* need revisiting.
*/
- cfg = read_gcr_cl_config() & CM_GCR_Cx_CONFIG_PVPE_MSK;
- return (cfg >> CM_GCR_Cx_CONFIG_PVPE_SHF) + 1;
+ cfg = read_gcr_cl_config() & CM_GCR_Cx_CONFIG_PVPE;
+ return (cfg >> __ffs(CM_GCR_Cx_CONFIG_PVPE)) + 1;
}
if (IS_ENABLED(CONFIG_SMP))
@@ -499,7 +399,7 @@ static inline unsigned int mips_cm_max_vp_width(void)
*/
static inline unsigned int mips_cm_vp_id(unsigned int cpu)
{
- unsigned int core = cpu_data[cpu].core;
+ unsigned int core = cpu_core(&cpu_data[cpu]);
unsigned int vp = cpu_vpe_id(&cpu_data[cpu]);
return (core * mips_cm_max_vp_width()) + vp;
@@ -508,29 +408,56 @@ static inline unsigned int mips_cm_vp_id(unsigned int cpu)
#ifdef CONFIG_MIPS_CM
/**
- * mips_cm_lock_other - lock access to another core
+ * mips_cm_lock_other - lock access to redirect/other region
+ * @cluster: the other cluster to be accessed
* @core: the other core to be accessed
* @vp: the VP within the other core to be accessed
+ * @block: the register block to be accessed
*
- * Call before operating upon a core via the 'other' register region in
- * order to prevent the region being moved during access. Must be followed
- * by a call to mips_cm_unlock_other.
+ * Configure the redirect/other region for the local core/VP (depending upon
+ * the CM revision) to target the specified @cluster, @core, @vp & register
+ * @block. Must be called before using the redirect/other region, and followed
+ * by a call to mips_cm_unlock_other() when access to the redirect/other region
+ * is complete.
+ *
+ * This function acquires a spinlock such that code between it &
+ * mips_cm_unlock_other() calls cannot be pre-empted by anything which may
+ * reconfigure the redirect/other region, and cannot be interfered with by
+ * another VP in the core. As such calls to this function should not be nested.
*/
-extern void mips_cm_lock_other(unsigned int core, unsigned int vp);
+extern void mips_cm_lock_other(unsigned int cluster, unsigned int core,
+ unsigned int vp, unsigned int block);
/**
- * mips_cm_unlock_other - unlock access to another core
+ * mips_cm_unlock_other - unlock access to redirect/other region
*
- * Call after operating upon another core via the 'other' register region.
- * Must be called after mips_cm_lock_other.
+ * Must be called after mips_cm_lock_other() once all required access to the
+ * redirect/other region has been completed.
*/
extern void mips_cm_unlock_other(void);
#else /* !CONFIG_MIPS_CM */
-static inline void mips_cm_lock_other(unsigned int core, unsigned int vp) { }
+static inline void mips_cm_lock_other(unsigned int cluster, unsigned int core,
+ unsigned int vp, unsigned int block) { }
static inline void mips_cm_unlock_other(void) { }
#endif /* !CONFIG_MIPS_CM */
+/**
+ * mips_cm_lock_other_cpu - lock access to redirect/other region
+ * @cpu: the other CPU whose register we want to access
+ *
+ * Configure the redirect/other region for the local core/VP (depending upon
+ * the CM revision) to target the specified @cpu & register @block. This is
+ * equivalent to calling mips_cm_lock_other() but accepts a Linux CPU number
+ * for convenience.
+ */
+static inline void mips_cm_lock_other_cpu(unsigned int cpu, unsigned int block)
+{
+ struct cpuinfo_mips *d = &cpu_data[cpu];
+
+ mips_cm_lock_other(cpu_cluster(d), cpu_core(d), cpu_vpe_id(d), block);
+}
+
#endif /* __MIPS_ASM_MIPS_CM_H__ */
diff --git a/arch/mips/include/asm/mips-cpc.h b/arch/mips/include/asm/mips-cpc.h
index 8c519f9827a3..f885051a8378 100644
--- a/arch/mips/include/asm/mips-cpc.h
+++ b/arch/mips/include/asm/mips-cpc.h
@@ -8,11 +8,15 @@
* option) any later version.
*/
+#ifndef __MIPS_ASM_MIPS_CPS_H__
+# error Please include asm/mips-cps.h rather than asm/mips-cpc.h
+#endif
+
#ifndef __MIPS_ASM_MIPS_CPC_H__
#define __MIPS_ASM_MIPS_CPC_H__
-#include <linux/io.h>
-#include <linux/types.h>
+#include <linux/bitops.h>
+#include <linux/errno.h>
/* The base address of the CPC registers */
extern void __iomem *mips_cpc_base;
@@ -61,89 +65,92 @@ static inline bool mips_cpc_present(void)
#define MIPS_CPC_CLCB_OFS 0x2000
#define MIPS_CPC_COCB_OFS 0x4000
-/* Macros to ease the creation of register access functions */
-#define BUILD_CPC_R_(name, off) \
-static inline u32 *addr_cpc_##name(void) \
-{ \
- return (u32 *)(mips_cpc_base + (off)); \
-} \
- \
-static inline u32 read_cpc_##name(void) \
-{ \
- return __raw_readl(mips_cpc_base + (off)); \
-}
-
-#define BUILD_CPC__W(name, off) \
-static inline void write_cpc_##name(u32 value) \
-{ \
- __raw_writel(value, mips_cpc_base + (off)); \
-}
-
-#define BUILD_CPC_RW(name, off) \
- BUILD_CPC_R_(name, off) \
- BUILD_CPC__W(name, off)
-
-#define BUILD_CPC_Cx_R_(name, off) \
- BUILD_CPC_R_(cl_##name, MIPS_CPC_CLCB_OFS + (off)) \
- BUILD_CPC_R_(co_##name, MIPS_CPC_COCB_OFS + (off))
-
-#define BUILD_CPC_Cx__W(name, off) \
- BUILD_CPC__W(cl_##name, MIPS_CPC_CLCB_OFS + (off)) \
- BUILD_CPC__W(co_##name, MIPS_CPC_COCB_OFS + (off))
-
-#define BUILD_CPC_Cx_RW(name, off) \
- BUILD_CPC_Cx_R_(name, off) \
- BUILD_CPC_Cx__W(name, off)
-
-/* GCB register accessor functions */
-BUILD_CPC_RW(access, MIPS_CPC_GCB_OFS + 0x00)
-BUILD_CPC_RW(seqdel, MIPS_CPC_GCB_OFS + 0x08)
-BUILD_CPC_RW(rail, MIPS_CPC_GCB_OFS + 0x10)
-BUILD_CPC_RW(resetlen, MIPS_CPC_GCB_OFS + 0x18)
-BUILD_CPC_R_(revision, MIPS_CPC_GCB_OFS + 0x20)
-
-/* Core Local & Core Other accessor functions */
-BUILD_CPC_Cx_RW(cmd, 0x00)
-BUILD_CPC_Cx_RW(stat_conf, 0x08)
-BUILD_CPC_Cx_RW(other, 0x10)
-BUILD_CPC_Cx_RW(vp_stop, 0x20)
-BUILD_CPC_Cx_RW(vp_run, 0x28)
-BUILD_CPC_Cx_RW(vp_running, 0x30)
-
-/* CPC_Cx_CMD register fields */
-#define CPC_Cx_CMD_SHF 0
-#define CPC_Cx_CMD_MSK (_ULCAST_(0xf) << 0)
-#define CPC_Cx_CMD_CLOCKOFF (_ULCAST_(0x1) << 0)
-#define CPC_Cx_CMD_PWRDOWN (_ULCAST_(0x2) << 0)
-#define CPC_Cx_CMD_PWRUP (_ULCAST_(0x3) << 0)
-#define CPC_Cx_CMD_RESET (_ULCAST_(0x4) << 0)
-
-/* CPC_Cx_STAT_CONF register fields */
-#define CPC_Cx_STAT_CONF_PWRUPE_SHF 23
-#define CPC_Cx_STAT_CONF_PWRUPE_MSK (_ULCAST_(0x1) << 23)
-#define CPC_Cx_STAT_CONF_SEQSTATE_SHF 19
-#define CPC_Cx_STAT_CONF_SEQSTATE_MSK (_ULCAST_(0xf) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_D0 (_ULCAST_(0x0) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_U0 (_ULCAST_(0x1) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_U1 (_ULCAST_(0x2) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_U2 (_ULCAST_(0x3) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_U3 (_ULCAST_(0x4) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_U4 (_ULCAST_(0x5) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_U5 (_ULCAST_(0x6) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_U6 (_ULCAST_(0x7) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_D1 (_ULCAST_(0x8) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_D3 (_ULCAST_(0x9) << 19)
-#define CPC_Cx_STAT_CONF_SEQSTATE_D2 (_ULCAST_(0xa) << 19)
-#define CPC_Cx_STAT_CONF_CLKGAT_IMPL_SHF 17
-#define CPC_Cx_STAT_CONF_CLKGAT_IMPL_MSK (_ULCAST_(0x1) << 17)
-#define CPC_Cx_STAT_CONF_PWRDN_IMPL_SHF 16
-#define CPC_Cx_STAT_CONF_PWRDN_IMPL_MSK (_ULCAST_(0x1) << 16)
-#define CPC_Cx_STAT_CONF_EJTAG_PROBE_SHF 15
-#define CPC_Cx_STAT_CONF_EJTAG_PROBE_MSK (_ULCAST_(0x1) << 15)
-
-/* CPC_Cx_OTHER register fields */
-#define CPC_Cx_OTHER_CORENUM_SHF 16
-#define CPC_Cx_OTHER_CORENUM_MSK (_ULCAST_(0xff) << 16)
+#define CPC_ACCESSOR_RO(sz, off, name) \
+ CPS_ACCESSOR_RO(cpc, sz, MIPS_CPC_GCB_OFS + off, name) \
+ CPS_ACCESSOR_RO(cpc, sz, MIPS_CPC_COCB_OFS + off, redir_##name)
+
+#define CPC_ACCESSOR_RW(sz, off, name) \
+ CPS_ACCESSOR_RW(cpc, sz, MIPS_CPC_GCB_OFS + off, name) \
+ CPS_ACCESSOR_RW(cpc, sz, MIPS_CPC_COCB_OFS + off, redir_##name)
+
+#define CPC_CX_ACCESSOR_RO(sz, off, name) \
+ CPS_ACCESSOR_RO(cpc, sz, MIPS_CPC_CLCB_OFS + off, cl_##name) \
+ CPS_ACCESSOR_RO(cpc, sz, MIPS_CPC_COCB_OFS + off, co_##name)
+
+#define CPC_CX_ACCESSOR_RW(sz, off, name) \
+ CPS_ACCESSOR_RW(cpc, sz, MIPS_CPC_CLCB_OFS + off, cl_##name) \
+ CPS_ACCESSOR_RW(cpc, sz, MIPS_CPC_COCB_OFS + off, co_##name)
+
+/* CPC_ACCESS - Control core/IOCU access to CPC registers prior to CM 3 */
+CPC_ACCESSOR_RW(32, 0x000, access)
+
+/* CPC_SEQDEL - Configure delays between command sequencer steps */
+CPC_ACCESSOR_RW(32, 0x008, seqdel)
+
+/* CPC_RAIL - Configure the delay from rail power-up to stability */
+CPC_ACCESSOR_RW(32, 0x010, rail)
+
+/* CPC_RESETLEN - Configure the length of reset sequences */
+CPC_ACCESSOR_RW(32, 0x018, resetlen)
+
+/* CPC_REVISION - Indicates the revisison of the CPC */
+CPC_ACCESSOR_RO(32, 0x020, revision)
+
+/* CPC_PWRUP_CTL - Control power to the Coherence Manager (CM) */
+CPC_ACCESSOR_RW(32, 0x030, pwrup_ctl)
+#define CPC_PWRUP_CTL_CM_PWRUP BIT(0)
+
+/* CPC_CONFIG - Mirrors GCR_CONFIG */
+CPC_ACCESSOR_RW(64, 0x138, config)
+
+/* CPC_SYS_CONFIG - Control cluster endianness */
+CPC_ACCESSOR_RW(32, 0x140, sys_config)
+#define CPC_SYS_CONFIG_BE_IMMEDIATE BIT(2)
+#define CPC_SYS_CONFIG_BE_STATUS BIT(1)
+#define CPC_SYS_CONFIG_BE BIT(0)
+
+/* CPC_Cx_CMD - Instruct the CPC to take action on a core */
+CPC_CX_ACCESSOR_RW(32, 0x000, cmd)
+#define CPC_Cx_CMD GENMASK(3, 0)
+#define CPC_Cx_CMD_CLOCKOFF 0x1
+#define CPC_Cx_CMD_PWRDOWN 0x2
+#define CPC_Cx_CMD_PWRUP 0x3
+#define CPC_Cx_CMD_RESET 0x4
+
+/* CPC_Cx_STAT_CONF - Indicates core configuration & state */
+CPC_CX_ACCESSOR_RW(32, 0x008, stat_conf)
+#define CPC_Cx_STAT_CONF_PWRUPE BIT(23)
+#define CPC_Cx_STAT_CONF_SEQSTATE GENMASK(22, 19)
+#define CPC_Cx_STAT_CONF_SEQSTATE_D0 0x0
+#define CPC_Cx_STAT_CONF_SEQSTATE_U0 0x1
+#define CPC_Cx_STAT_CONF_SEQSTATE_U1 0x2
+#define CPC_Cx_STAT_CONF_SEQSTATE_U2 0x3
+#define CPC_Cx_STAT_CONF_SEQSTATE_U3 0x4
+#define CPC_Cx_STAT_CONF_SEQSTATE_U4 0x5
+#define CPC_Cx_STAT_CONF_SEQSTATE_U5 0x6
+#define CPC_Cx_STAT_CONF_SEQSTATE_U6 0x7
+#define CPC_Cx_STAT_CONF_SEQSTATE_D1 0x8
+#define CPC_Cx_STAT_CONF_SEQSTATE_D3 0x9
+#define CPC_Cx_STAT_CONF_SEQSTATE_D2 0xa
+#define CPC_Cx_STAT_CONF_CLKGAT_IMPL BIT(17)
+#define CPC_Cx_STAT_CONF_PWRDN_IMPL BIT(16)
+#define CPC_Cx_STAT_CONF_EJTAG_PROBE BIT(15)
+
+/* CPC_Cx_OTHER - Configure the core-other register block prior to CM 3 */
+CPC_CX_ACCESSOR_RW(32, 0x010, other)
+#define CPC_Cx_OTHER_CORENUM GENMASK(23, 16)
+
+/* CPC_Cx_VP_STOP - Stop Virtual Processors (VPs) within a core from running */
+CPC_CX_ACCESSOR_RW(32, 0x020, vp_stop)
+
+/* CPC_Cx_VP_START - Start Virtual Processors (VPs) within a core running */
+CPC_CX_ACCESSOR_RW(32, 0x028, vp_run)
+
+/* CPC_Cx_VP_RUNNING - Indicate which Virtual Processors (VPs) are running */
+CPC_CX_ACCESSOR_RW(32, 0x030, vp_running)
+
+/* CPC_Cx_CONFIG - Mirrors GCR_Cx_CONFIG */
+CPC_CX_ACCESSOR_RW(32, 0x090, config)
#ifdef CONFIG_MIPS_CPC
diff --git a/arch/mips/include/asm/mips-cps.h b/arch/mips/include/asm/mips-cps.h
new file mode 100644
index 000000000000..bf02b5070a98
--- /dev/null
+++ b/arch/mips/include/asm/mips-cps.h
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2017 Imagination Technologies
+ * Author: Paul Burton <paul.burton@imgtec.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ */
+
+#ifndef __MIPS_ASM_MIPS_CPS_H__
+#define __MIPS_ASM_MIPS_CPS_H__
+
+#include <linux/io.h>
+#include <linux/types.h>
+
+extern unsigned long __cps_access_bad_size(void)
+ __compiletime_error("Bad size for CPS accessor");
+
+#define CPS_ACCESSOR_A(unit, off, name) \
+static inline void *addr_##unit##_##name(void) \
+{ \
+ return mips_##unit##_base + (off); \
+}
+
+#define CPS_ACCESSOR_R(unit, sz, name) \
+static inline uint##sz##_t read_##unit##_##name(void) \
+{ \
+ uint64_t val64; \
+ \
+ switch (sz) { \
+ case 32: \
+ return __raw_readl(addr_##unit##_##name()); \
+ \
+ case 64: \
+ if (mips_cm_is64) \
+ return __raw_readq(addr_##unit##_##name()); \
+ \
+ val64 = __raw_readl(addr_##unit##_##name() + 4); \
+ val64 <<= 32; \
+ val64 |= __raw_readl(addr_##unit##_##name()); \
+ return val64; \
+ \
+ default: \
+ return __cps_access_bad_size(); \
+ } \
+}
+
+#define CPS_ACCESSOR_W(unit, sz, name) \
+static inline void write_##unit##_##name(uint##sz##_t val) \
+{ \
+ switch (sz) { \
+ case 32: \
+ __raw_writel(val, addr_##unit##_##name()); \
+ break; \
+ \
+ case 64: \
+ if (mips_cm_is64) { \
+ __raw_writeq(val, addr_##unit##_##name()); \
+ break; \
+ } \
+ \
+ __raw_writel((uint64_t)val >> 32, \
+ addr_##unit##_##name() + 4); \
+ __raw_writel(val, addr_##unit##_##name()); \
+ break; \
+ \
+ default: \
+ __cps_access_bad_size(); \
+ break; \
+ } \
+}
+
+#define CPS_ACCESSOR_M(unit, sz, name) \
+static inline void change_##unit##_##name(uint##sz##_t mask, \
+ uint##sz##_t val) \
+{ \
+ uint##sz##_t reg_val = read_##unit##_##name(); \
+ reg_val &= ~mask; \
+ reg_val |= val; \
+ write_##unit##_##name(reg_val); \
+} \
+ \
+static inline void set_##unit##_##name(uint##sz##_t val) \
+{ \
+ change_##unit##_##name(val, val); \
+} \
+ \
+static inline void clear_##unit##_##name(uint##sz##_t val) \
+{ \
+ change_##unit##_##name(val, 0); \
+}
+
+#define CPS_ACCESSOR_RO(unit, sz, off, name) \
+ CPS_ACCESSOR_A(unit, off, name) \
+ CPS_ACCESSOR_R(unit, sz, name)
+
+#define CPS_ACCESSOR_WO(unit, sz, off, name) \
+ CPS_ACCESSOR_A(unit, off, name) \
+ CPS_ACCESSOR_W(unit, sz, name)
+
+#define CPS_ACCESSOR_RW(unit, sz, off, name) \
+ CPS_ACCESSOR_A(unit, off, name) \
+ CPS_ACCESSOR_R(unit, sz, name) \
+ CPS_ACCESSOR_W(unit, sz, name) \
+ CPS_ACCESSOR_M(unit, sz, name)
+
+#include <asm/mips-cm.h>
+#include <asm/mips-cpc.h>
+#include <asm/mips-gic.h>
+
+/**
+ * mips_cps_numclusters - return the number of clusters present in the system
+ *
+ * Returns the number of clusters in the system.
+ */
+static inline unsigned int mips_cps_numclusters(void)
+{
+ unsigned int num_clusters;
+
+ if (mips_cm_revision() < CM_REV_CM3_5)
+ return 1;
+
+ num_clusters = read_gcr_config() & CM_GCR_CONFIG_NUM_CLUSTERS;
+ num_clusters >>= __ffs(CM_GCR_CONFIG_NUM_CLUSTERS);
+ return num_clusters;
+}
+
+/**
+ * mips_cps_cluster_config - return (GCR|CPC)_CONFIG from a cluster
+ * @cluster: the ID of the cluster whose config we want
+ *
+ * Read the value of GCR_CONFIG (or its CPC_CONFIG mirror) from a @cluster.
+ *
+ * Returns the value of GCR_CONFIG.
+ */
+static inline uint64_t mips_cps_cluster_config(unsigned int cluster)
+{
+ uint64_t config;
+
+ if (mips_cm_revision() < CM_REV_CM3_5) {
+ /*
+ * Prior to CM 3.5 we don't have the notion of multiple
+ * clusters so we can trivially read the GCR_CONFIG register
+ * within this cluster.
+ */
+ WARN_ON(cluster != 0);
+ config = read_gcr_config();
+ } else {
+ /*
+ * From CM 3.5 onwards we read the CPC_CONFIG mirror of
+ * GCR_CONFIG via the redirect region, since the CPC is always
+ * powered up allowing us not to need to power up the CM.
+ */
+ mips_cm_lock_other(cluster, 0, 0, CM_GCR_Cx_OTHER_BLOCK_GLOBAL);
+ config = read_cpc_redir_config();
+ mips_cm_unlock_other();
+ }
+
+ return config;
+}
+
+/**
+ * mips_cps_numcores - return the number of cores present in a cluster
+ * @cluster: the ID of the cluster whose core count we want
+ *
+ * Returns the value of the PCORES field of the GCR_CONFIG register plus 1, or
+ * zero if no Coherence Manager is present.
+ */
+static inline unsigned int mips_cps_numcores(unsigned int cluster)
+{
+ if (!mips_cm_present())
+ return 0;
+
+ /* Add one before masking to handle 0xff indicating no cores */
+ return (mips_cps_cluster_config(cluster) + 1) & CM_GCR_CONFIG_PCORES;
+}
+
+/**
+ * mips_cps_numiocu - return the number of IOCUs present in a cluster
+ * @cluster: the ID of the cluster whose IOCU count we want
+ *
+ * Returns the value of the NUMIOCU field of the GCR_CONFIG register, or zero
+ * if no Coherence Manager is present.
+ */
+static inline unsigned int mips_cps_numiocu(unsigned int cluster)
+{
+ unsigned int num_iocu;
+
+ if (!mips_cm_present())
+ return 0;
+
+ num_iocu = mips_cps_cluster_config(cluster) & CM_GCR_CONFIG_NUMIOCU;
+ num_iocu >>= __ffs(CM_GCR_CONFIG_NUMIOCU);
+ return num_iocu;
+}
+
+/**
+ * mips_cps_numvps - return the number of VPs (threads) supported by a core
+ * @cluster: the ID of the cluster containing the core we want to examine
+ * @core: the ID of the core whose VP count we want
+ *
+ * Returns the number of Virtual Processors (VPs, ie. hardware threads) that
+ * are supported by the given @core in the given @cluster. If the core or the
+ * kernel do not support hardware mutlti-threading this returns 1.
+ */
+static inline unsigned int mips_cps_numvps(unsigned int cluster, unsigned int core)
+{
+ unsigned int cfg;
+
+ if (!mips_cm_present())
+ return 1;
+
+ if ((!IS_ENABLED(CONFIG_MIPS_MT_SMP) || !cpu_has_mipsmt)
+ && (!IS_ENABLED(CONFIG_CPU_MIPSR6) || !cpu_has_vp))
+ return 1;
+
+ mips_cm_lock_other(cluster, core, 0, CM_GCR_Cx_OTHER_BLOCK_LOCAL);
+
+ if (mips_cm_revision() < CM_REV_CM3_5) {
+ /*
+ * Prior to CM 3.5 we can only have one cluster & don't have
+ * CPC_Cx_CONFIG, so we read GCR_Cx_CONFIG.
+ */
+ cfg = read_gcr_co_config();
+ } else {
+ /*
+ * From CM 3.5 onwards we read CPC_Cx_CONFIG because the CPC is
+ * always powered, which allows us to not worry about powering
+ * up the cluster's CM here.
+ */
+ cfg = read_cpc_co_config();
+ }
+
+ mips_cm_unlock_other();
+
+ return (cfg + 1) & CM_GCR_Cx_CONFIG_PVPE;
+}
+
+#endif /* __MIPS_ASM_MIPS_CPS_H__ */
diff --git a/arch/mips/include/asm/mips-gic.h b/arch/mips/include/asm/mips-gic.h
new file mode 100644
index 000000000000..a2badf572632
--- /dev/null
+++ b/arch/mips/include/asm/mips-gic.h
@@ -0,0 +1,347 @@
+/*
+ * Copyright (C) 2017 Imagination Technologies
+ * Author: Paul Burton <paul.burton@imgtec.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ */
+
+#ifndef __MIPS_ASM_MIPS_CPS_H__
+# error Please include asm/mips-cps.h rather than asm/mips-gic.h
+#endif
+
+#ifndef __MIPS_ASM_MIPS_GIC_H__
+#define __MIPS_ASM_MIPS_GIC_H__
+
+#include <linux/bitops.h>
+
+/* The base address of the GIC registers */
+extern void __iomem *mips_gic_base;
+
+/* Offsets from the GIC base address to various control blocks */
+#define MIPS_GIC_SHARED_OFS 0x00000
+#define MIPS_GIC_SHARED_SZ 0x08000
+#define MIPS_GIC_LOCAL_OFS 0x08000
+#define MIPS_GIC_LOCAL_SZ 0x04000
+#define MIPS_GIC_REDIR_OFS 0x0c000
+#define MIPS_GIC_REDIR_SZ 0x04000
+#define MIPS_GIC_USER_OFS 0x10000
+#define MIPS_GIC_USER_SZ 0x10000
+
+/* For read-only shared registers */
+#define GIC_ACCESSOR_RO(sz, off, name) \
+ CPS_ACCESSOR_RO(gic, sz, MIPS_GIC_SHARED_OFS + off, name)
+
+/* For read-write shared registers */
+#define GIC_ACCESSOR_RW(sz, off, name) \
+ CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_SHARED_OFS + off, name)
+
+/* For read-only local registers */
+#define GIC_VX_ACCESSOR_RO(sz, off, name) \
+ CPS_ACCESSOR_RO(gic, sz, MIPS_GIC_LOCAL_OFS + off, vl_##name) \
+ CPS_ACCESSOR_RO(gic, sz, MIPS_GIC_REDIR_OFS + off, vo_##name)
+
+/* For read-write local registers */
+#define GIC_VX_ACCESSOR_RW(sz, off, name) \
+ CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_LOCAL_OFS + off, vl_##name) \
+ CPS_ACCESSOR_RW(gic, sz, MIPS_GIC_REDIR_OFS + off, vo_##name)
+
+/* For read-only shared per-interrupt registers */
+#define GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \
+static inline void __iomem *addr_gic_##name(unsigned int intr) \
+{ \
+ return mips_gic_base + (off) + (intr * (stride)); \
+} \
+ \
+static inline unsigned int read_gic_##name(unsigned int intr) \
+{ \
+ BUILD_BUG_ON(sz != 32); \
+ return __raw_readl(addr_gic_##name(intr)); \
+}
+
+/* For read-write shared per-interrupt registers */
+#define GIC_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \
+ GIC_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \
+ \
+static inline void write_gic_##name(unsigned int intr, \
+ unsigned int val) \
+{ \
+ BUILD_BUG_ON(sz != 32); \
+ __raw_writel(val, addr_gic_##name(intr)); \
+}
+
+/* For read-only local per-interrupt registers */
+#define GIC_VX_ACCESSOR_RO_INTR_REG(sz, off, stride, name) \
+ GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \
+ stride, vl_##name) \
+ GIC_ACCESSOR_RO_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \
+ stride, vo_##name)
+
+/* For read-write local per-interrupt registers */
+#define GIC_VX_ACCESSOR_RW_INTR_REG(sz, off, stride, name) \
+ GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_LOCAL_OFS + off, \
+ stride, vl_##name) \
+ GIC_ACCESSOR_RW_INTR_REG(sz, MIPS_GIC_REDIR_OFS + off, \
+ stride, vo_##name)
+
+/* For read-only shared bit-per-interrupt registers */
+#define GIC_ACCESSOR_RO_INTR_BIT(off, name) \
+static inline void __iomem *addr_gic_##name(void) \
+{ \
+ return mips_gic_base + (off); \
+} \
+ \
+static inline unsigned int read_gic_##name(unsigned int intr) \
+{ \
+ void __iomem *addr = addr_gic_##name(); \
+ unsigned int val; \
+ \
+ if (mips_cm_is64) { \
+ addr += (intr / 64) * sizeof(uint64_t); \
+ val = __raw_readq(addr) >> intr % 64; \
+ } else { \
+ addr += (intr / 32) * sizeof(uint32_t); \
+ val = __raw_readl(addr) >> intr % 32; \
+ } \
+ \
+ return val & 0x1; \
+}
+
+/* For read-write shared bit-per-interrupt registers */
+#define GIC_ACCESSOR_RW_INTR_BIT(off, name) \
+ GIC_ACCESSOR_RO_INTR_BIT(off, name) \
+ \
+static inline void write_gic_##name(unsigned int intr) \
+{ \
+ void __iomem *addr = addr_gic_##name(); \
+ \
+ if (mips_cm_is64) { \
+ addr += (intr / 64) * sizeof(uint64_t); \
+ __raw_writeq(BIT(intr % 64), addr); \
+ } else { \
+ addr += (intr / 32) * sizeof(uint32_t); \
+ __raw_writel(BIT(intr % 32), addr); \
+ } \
+} \
+ \
+static inline void change_gic_##name(unsigned int intr, \
+ unsigned int val) \
+{ \
+ void __iomem *addr = addr_gic_##name(); \
+ \
+ if (mips_cm_is64) { \
+ uint64_t _val; \
+ \
+ addr += (intr / 64) * sizeof(uint64_t); \
+ _val = __raw_readq(addr); \
+ _val &= ~BIT_ULL(intr % 64); \
+ _val |= (uint64_t)val << (intr % 64); \
+ __raw_writeq(_val, addr); \
+ } else { \
+ uint32_t _val; \
+ \
+ addr += (intr / 32) * sizeof(uint32_t); \
+ _val = __raw_readl(addr); \
+ _val &= ~BIT(intr % 32); \
+ _val |= val << (intr % 32); \
+ __raw_writel(_val, addr); \
+ } \
+}
+
+/* For read-only local bit-per-interrupt registers */
+#define GIC_VX_ACCESSOR_RO_INTR_BIT(sz, off, name) \
+ GIC_ACCESSOR_RO_INTR_BIT(sz, MIPS_GIC_LOCAL_OFS + off, \
+ vl_##name) \
+ GIC_ACCESSOR_RO_INTR_BIT(sz, MIPS_GIC_REDIR_OFS + off, \
+ vo_##name)
+
+/* For read-write local bit-per-interrupt registers */
+#define GIC_VX_ACCESSOR_RW_INTR_BIT(sz, off, name) \
+ GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_LOCAL_OFS + off, \
+ vl_##name) \
+ GIC_ACCESSOR_RW_INTR_BIT(sz, MIPS_GIC_REDIR_OFS + off, \
+ vo_##name)
+
+/* GIC_SH_CONFIG - Information about the GIC configuration */
+GIC_ACCESSOR_RW(32, 0x000, config)
+#define GIC_CONFIG_COUNTSTOP BIT(28)
+#define GIC_CONFIG_COUNTBITS GENMASK(27, 24)
+#define GIC_CONFIG_NUMINTERRUPTS GENMASK(23, 16)
+#define GIC_CONFIG_PVPS GENMASK(6, 0)
+
+/* GIC_SH_COUNTER - Shared global counter value */
+GIC_ACCESSOR_RW(64, 0x010, counter)
+GIC_ACCESSOR_RW(32, 0x010, counter_32l)
+GIC_ACCESSOR_RW(32, 0x014, counter_32h)
+
+/* GIC_SH_POL_* - Configures interrupt polarity */
+GIC_ACCESSOR_RW_INTR_BIT(0x100, pol)
+#define GIC_POL_ACTIVE_LOW 0 /* when level triggered */
+#define GIC_POL_ACTIVE_HIGH 1 /* when level triggered */
+#define GIC_POL_FALLING_EDGE 0 /* when single-edge triggered */
+#define GIC_POL_RISING_EDGE 1 /* when single-edge triggered */
+
+/* GIC_SH_TRIG_* - Configures interrupts to be edge or level triggered */
+GIC_ACCESSOR_RW_INTR_BIT(0x180, trig)
+#define GIC_TRIG_LEVEL 0
+#define GIC_TRIG_EDGE 1
+
+/* GIC_SH_DUAL_* - Configures whether interrupts trigger on both edges */
+GIC_ACCESSOR_RW_INTR_BIT(0x200, dual)
+#define GIC_DUAL_SINGLE 0 /* when edge-triggered */
+#define GIC_DUAL_DUAL 1 /* when edge-triggered */
+
+/* GIC_SH_WEDGE - Write an 'edge', ie. trigger an interrupt */
+GIC_ACCESSOR_RW(32, 0x280, wedge)
+#define GIC_WEDGE_RW BIT(31)
+#define GIC_WEDGE_INTR GENMASK(7, 0)
+
+/* GIC_SH_RMASK_* - Reset/clear shared interrupt mask bits */
+GIC_ACCESSOR_RW_INTR_BIT(0x300, rmask)
+
+/* GIC_SH_SMASK_* - Set shared interrupt mask bits */
+GIC_ACCESSOR_RW_INTR_BIT(0x380, smask)
+
+/* GIC_SH_MASK_* - Read the current shared interrupt mask */
+GIC_ACCESSOR_RO_INTR_BIT(0x400, mask)
+
+/* GIC_SH_PEND_* - Read currently pending shared interrupts */
+GIC_ACCESSOR_RO_INTR_BIT(0x480, pend)
+
+/* GIC_SH_MAPx_PIN - Map shared interrupts to a particular CPU pin */
+GIC_ACCESSOR_RW_INTR_REG(32, 0x500, 0x4, map_pin)
+#define GIC_MAP_PIN_MAP_TO_PIN BIT(31)
+#define GIC_MAP_PIN_MAP_TO_NMI BIT(30)
+#define GIC_MAP_PIN_MAP GENMASK(5, 0)
+
+/* GIC_SH_MAPx_VP - Map shared interrupts to a particular Virtual Processor */
+GIC_ACCESSOR_RW_INTR_REG(32, 0x2000, 0x20, map_vp)
+
+/* GIC_Vx_CTL - VP-level interrupt control */
+GIC_VX_ACCESSOR_RW(32, 0x000, ctl)
+#define GIC_VX_CTL_FDC_ROUTABLE BIT(4)
+#define GIC_VX_CTL_SWINT_ROUTABLE BIT(3)
+#define GIC_VX_CTL_PERFCNT_ROUTABLE BIT(2)
+#define GIC_VX_CTL_TIMER_ROUTABLE BIT(1)
+#define GIC_VX_CTL_EIC BIT(0)
+
+/* GIC_Vx_PEND - Read currently pending local interrupts */
+GIC_VX_ACCESSOR_RO(32, 0x004, pend)
+
+/* GIC_Vx_MASK - Read the current local interrupt mask */
+GIC_VX_ACCESSOR_RO(32, 0x008, mask)
+
+/* GIC_Vx_RMASK - Reset/clear local interrupt mask bits */
+GIC_VX_ACCESSOR_RW(32, 0x00c, rmask)
+
+/* GIC_Vx_SMASK - Set local interrupt mask bits */
+GIC_VX_ACCESSOR_RW(32, 0x010, smask)
+
+/* GIC_Vx_*_MAP - Route local interrupts to the desired pins */
+GIC_VX_ACCESSOR_RW_INTR_REG(32, 0x040, 0x4, map)
+
+/* GIC_Vx_WD_MAP - Route the local watchdog timer interrupt */
+GIC_VX_ACCESSOR_RW(32, 0x040, wd_map)
+
+/* GIC_Vx_COMPARE_MAP - Route the local count/compare interrupt */
+GIC_VX_ACCESSOR_RW(32, 0x044, compare_map)
+
+/* GIC_Vx_TIMER_MAP - Route the local CPU timer (cp0 count/compare) interrupt */
+GIC_VX_ACCESSOR_RW(32, 0x048, timer_map)
+
+/* GIC_Vx_FDC_MAP - Route the local fast debug channel interrupt */
+GIC_VX_ACCESSOR_RW(32, 0x04c, fdc_map)
+
+/* GIC_Vx_PERFCTR_MAP - Route the local performance counter interrupt */
+GIC_VX_ACCESSOR_RW(32, 0x050, perfctr_map)
+
+/* GIC_Vx_SWINT0_MAP - Route the local software interrupt 0 */
+GIC_VX_ACCESSOR_RW(32, 0x054, swint0_map)
+
+/* GIC_Vx_SWINT1_MAP - Route the local software interrupt 1 */
+GIC_VX_ACCESSOR_RW(32, 0x058, swint1_map)
+
+/* GIC_Vx_OTHER - Configure access to other Virtual Processor registers */
+GIC_VX_ACCESSOR_RW(32, 0x080, other)
+#define GIC_VX_OTHER_VPNUM GENMASK(5, 0)
+
+/* GIC_Vx_IDENT - Retrieve the local Virtual Processor's ID */
+GIC_VX_ACCESSOR_RO(32, 0x088, ident)
+#define GIC_VX_IDENT_VPNUM GENMASK(5, 0)
+
+/* GIC_Vx_COMPARE - Value to compare with GIC_SH_COUNTER */
+GIC_VX_ACCESSOR_RW(64, 0x0a0, compare)
+
+/* GIC_Vx_EIC_SHADOW_SET_BASE - Set shadow register set for each interrupt */
+GIC_VX_ACCESSOR_RW_INTR_REG(32, 0x100, 0x4, eic_shadow_set)
+
+/**
+ * enum mips_gic_local_interrupt - GIC local interrupts
+ * @GIC_LOCAL_INT_WD: GIC watchdog timer interrupt
+ * @GIC_LOCAL_INT_COMPARE: GIC count/compare interrupt
+ * @GIC_LOCAL_INT_TIMER: CP0 count/compare interrupt
+ * @GIC_LOCAL_INT_PERFCTR: Performance counter interrupt
+ * @GIC_LOCAL_INT_SWINT0: Software interrupt 0
+ * @GIC_LOCAL_INT_SWINT1: Software interrupt 1
+ * @GIC_LOCAL_INT_FDC: Fast debug channel interrupt
+ * @GIC_NUM_LOCAL_INTRS: The number of local interrupts
+ *
+ * Enumerates interrupts provided by the GIC that are local to a VP.
+ */
+enum mips_gic_local_interrupt {
+ GIC_LOCAL_INT_WD,
+ GIC_LOCAL_INT_COMPARE,
+ GIC_LOCAL_INT_TIMER,
+ GIC_LOCAL_INT_PERFCTR,
+ GIC_LOCAL_INT_SWINT0,
+ GIC_LOCAL_INT_SWINT1,
+ GIC_LOCAL_INT_FDC,
+ GIC_NUM_LOCAL_INTRS
+};
+
+/**
+ * mips_gic_present() - Determine whether a GIC is present
+ *
+ * Determines whether a MIPS Global Interrupt Controller (GIC) is present in
+ * the system that the kernel is running on.
+ *
+ * Return true if a GIC is present, else false.
+ */
+static inline bool mips_gic_present(void)
+{
+ return IS_ENABLED(CONFIG_MIPS_GIC) && mips_gic_base;
+}
+
+/**
+ * gic_get_c0_compare_int() - Return cp0 count/compare interrupt virq
+ *
+ * Determine the virq number to use for the coprocessor 0 count/compare
+ * interrupt, which may be routed via the GIC.
+ *
+ * Returns the virq number or a negative error number.
+ */
+extern int gic_get_c0_compare_int(void);
+
+/**
+ * gic_get_c0_perfcount_int() - Return performance counter interrupt virq
+ *
+ * Determine the virq number to use for CPU performance counter interrupts,
+ * which may be routed via the GIC.
+ *
+ * Returns the virq number or a negative error number.
+ */
+extern int gic_get_c0_perfcount_int(void);
+
+/**
+ * gic_get_c0_fdc_int() - Return fast debug channel interrupt virq
+ *
+ * Determine the virq number to use for fast debug channel (FDC) interrupts,
+ * which may be routed via the GIC.
+ *
+ * Returns the virq number or a negative error number.
+ */
+extern int gic_get_c0_fdc_int(void);
+
+#endif /* __MIPS_ASM_MIPS_CPS_H__ */
diff --git a/arch/mips/include/asm/mipsregs.h b/arch/mips/include/asm/mipsregs.h
index dbb0eceda2c6..e4ed1bc9a734 100644
--- a/arch/mips/include/asm/mipsregs.h
+++ b/arch/mips/include/asm/mipsregs.h
@@ -48,6 +48,7 @@
#define CP0_ENTRYLO0 $2
#define CP0_ENTRYLO1 $3
#define CP0_CONF $3
+#define CP0_GLOBALNUMBER $3, 1
#define CP0_CONTEXT $4
#define CP0_PAGEMASK $5
#define CP0_SEGCTL0 $5, 2
@@ -148,6 +149,16 @@
#define MIPS_ENTRYLO_RI (_ULCAST_(1) << (BITS_PER_LONG - 1))
/*
+ * MIPSr6+ GlobalNumber register definitions
+ */
+#define MIPS_GLOBALNUMBER_VP_SHF 0
+#define MIPS_GLOBALNUMBER_VP (_ULCAST_(0xff) << MIPS_GLOBALNUMBER_VP_SHF)
+#define MIPS_GLOBALNUMBER_CORE_SHF 8
+#define MIPS_GLOBALNUMBER_CORE (_ULCAST_(0xff) << MIPS_GLOBALNUMBER_CORE_SHF)
+#define MIPS_GLOBALNUMBER_CLUSTER_SHF 16
+#define MIPS_GLOBALNUMBER_CLUSTER (_ULCAST_(0xf) << MIPS_GLOBALNUMBER_CLUSTER_SHF)
+
+/*
* Values for PageMask register
*/
#ifdef CONFIG_CPU_VR41XX
@@ -1446,6 +1457,8 @@ do { \
#define read_c0_conf() __read_32bit_c0_register($3, 0)
#define write_c0_conf(val) __write_32bit_c0_register($3, 0, val)
+#define read_c0_globalnumber() __read_32bit_c0_register($3, 1)
+
#define read_c0_context() __read_ulong_c0_register($4, 0)
#define write_c0_context(val) __write_ulong_c0_register($4, 0, val)
diff --git a/arch/mips/include/asm/module.h b/arch/mips/include/asm/module.h
index e51add184717..06552a965cf4 100644
--- a/arch/mips/include/asm/module.h
+++ b/arch/mips/include/asm/module.h
@@ -114,8 +114,6 @@ search_module_dbetables(unsigned long addr)
#define MODULE_PROC_FAMILY "R5432 "
#elif defined CONFIG_CPU_R5500
#define MODULE_PROC_FAMILY "R5500 "
-#elif defined CONFIG_CPU_R6000
-#define MODULE_PROC_FAMILY "R6000 "
#elif defined CONFIG_CPU_NEVADA
#define MODULE_PROC_FAMILY "NEVADA "
#elif defined CONFIG_CPU_R8000
diff --git a/arch/mips/include/asm/netlogic/common.h b/arch/mips/include/asm/netlogic/common.h
index e0717d10e650..a6e6cbebe046 100644
--- a/arch/mips/include/asm/netlogic/common.h
+++ b/arch/mips/include/asm/netlogic/common.h
@@ -84,7 +84,7 @@ nlm_set_nmi_handler(void *handler)
*/
void nlm_init_boot_cpu(void);
unsigned int nlm_get_cpu_frequency(void);
-extern struct plat_smp_ops nlm_smp_ops;
+extern const struct plat_smp_ops nlm_smp_ops;
extern char nlm_reset_entry[], nlm_reset_entry_end[];
/* SWIOTLB */
diff --git a/arch/mips/include/asm/octeon/cvmx-boot-vector.h b/arch/mips/include/asm/octeon/cvmx-boot-vector.h
new file mode 100644
index 000000000000..8db08241d53c
--- /dev/null
+++ b/arch/mips/include/asm/octeon/cvmx-boot-vector.h
@@ -0,0 +1,53 @@
+/*
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright (C) 2003-2017 Cavium, Inc.
+ */
+
+#ifndef __CVMX_BOOT_VECTOR_H__
+#define __CVMX_BOOT_VECTOR_H__
+
+#include <asm/octeon/octeon.h>
+
+/*
+ * The boot vector table is made up of an array of 1024 elements of
+ * struct cvmx_boot_vector_element. There is one entry for each
+ * possible MIPS CPUNum, indexed by the CPUNum.
+ *
+ * Once cvmx_boot_vector_get() returns a non-NULL value (indicating
+ * success), NMI to a core will cause execution to transfer to the
+ * target_ptr location for that core's entry in the vector table.
+ *
+ * The struct cvmx_boot_vector_element fields app0, app1, and app2 can
+ * be used by the application that has set the target_ptr in any
+ * application specific manner, they are not touched by the vectoring
+ * code.
+ *
+ * The boot vector code clobbers the CP0_DESAVE register, and on
+ * OCTEON II and later CPUs also clobbers CP0_KScratch2. All GP
+ * registers are preserved, except on pre-OCTEON II CPUs, where k1 is
+ * clobbered.
+ *
+ */
+
+
+/*
+ * Applications install the boot bus code in cvmx-boot-vector.c, which
+ * uses this magic:
+ */
+#define OCTEON_BOOT_MOVEABLE_MAGIC1 0xdb00110ad358eacdull
+
+struct cvmx_boot_vector_element {
+ /* kseg0 or xkphys address of target code. */
+ uint64_t target_ptr;
+ /* Three application specific arguments. */
+ uint64_t app0;
+ uint64_t app1;
+ uint64_t app2;
+};
+
+struct cvmx_boot_vector_element *cvmx_boot_vector_get(void);
+
+#endif /* __CVMX_BOOT_VECTOR_H__ */
diff --git a/arch/mips/include/asm/octeon/cvmx-bootmem.h b/arch/mips/include/asm/octeon/cvmx-bootmem.h
index 374562507d0b..72d2e403a6e4 100644
--- a/arch/mips/include/asm/octeon/cvmx-bootmem.h
+++ b/arch/mips/include/asm/octeon/cvmx-bootmem.h
@@ -255,6 +255,34 @@ extern void *cvmx_bootmem_alloc_named_range(uint64_t size, uint64_t min_addr,
uint64_t max_addr, uint64_t align,
char *name);
+/**
+ * Allocate if needed a block of memory from a specific range of the
+ * free list that was passed to the application by the bootloader, and
+ * assign it a name in the global named block table. (part of the
+ * cvmx_bootmem_descriptor_t structure) Named blocks can later be
+ * freed. If the requested name block is already allocated, return
+ * the pointer to block of memory. If request cannot be satisfied
+ * within the address range specified, NULL is returned
+ *
+ * @param size Size in bytes of block to allocate
+ * @param min_addr minimum address of range
+ * @param max_addr maximum address of range
+ * @param align Alignment of memory to be allocated. (must be a power of 2)
+ * @param name name of block - must be less than CVMX_BOOTMEM_NAME_LEN bytes
+ * @param init Initialization function
+ *
+ * The initialization function is optional, if omitted the named block
+ * is initialized to all zeros when it is created, i.e. once.
+ *
+ * @return pointer to block of memory, NULL on error
+ */
+void *cvmx_bootmem_alloc_named_range_once(uint64_t size,
+ uint64_t min_addr,
+ uint64_t max_addr,
+ uint64_t align,
+ char *name,
+ void (*init) (void *));
+
extern int cvmx_bootmem_free_named(char *name);
/**
diff --git a/arch/mips/include/asm/octeon/cvmx-ciu-defs.h b/arch/mips/include/asm/octeon/cvmx-ciu-defs.h
index 0dd0e40c96d4..6e61792d9248 100644
--- a/arch/mips/include/asm/octeon/cvmx-ciu-defs.h
+++ b/arch/mips/include/asm/octeon/cvmx-ciu-defs.h
@@ -128,6 +128,7 @@ static inline uint64_t CVMX_CIU_PP_POKEX(unsigned long offset)
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+ case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
return CVMX_ADD_IO_SEG(0x0001070000000580ull) + (offset) * 8;
case OCTEON_CN31XX & OCTEON_FAMILY_MASK:
case OCTEON_CN50XX & OCTEON_FAMILY_MASK:
@@ -143,6 +144,10 @@ static inline uint64_t CVMX_CIU_PP_POKEX(unsigned long offset)
return CVMX_ADD_IO_SEG(0x0001070000000580ull) + (offset) * 8;
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
return CVMX_ADD_IO_SEG(0x0001070100100200ull) + (offset) * 8;
+ case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+ case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+ case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+ return CVMX_ADD_IO_SEG(0x0001010000030000ull) + (offset) * 8;
}
return CVMX_ADD_IO_SEG(0x0001070000000580ull) + (offset) * 8;
}
@@ -180,6 +185,7 @@ static inline uint64_t CVMX_CIU_WDOGX(unsigned long offset)
case OCTEON_CN52XX & OCTEON_FAMILY_MASK:
case OCTEON_CNF71XX & OCTEON_FAMILY_MASK:
case OCTEON_CN61XX & OCTEON_FAMILY_MASK:
+ case OCTEON_CN70XX & OCTEON_FAMILY_MASK:
return CVMX_ADD_IO_SEG(0x0001070000000500ull) + (offset) * 8;
case OCTEON_CN31XX & OCTEON_FAMILY_MASK:
case OCTEON_CN50XX & OCTEON_FAMILY_MASK:
@@ -195,6 +201,10 @@ static inline uint64_t CVMX_CIU_WDOGX(unsigned long offset)
return CVMX_ADD_IO_SEG(0x0001070000000500ull) + (offset) * 8;
case OCTEON_CN68XX & OCTEON_FAMILY_MASK:
return CVMX_ADD_IO_SEG(0x0001070100100000ull) + (offset) * 8;
+ case OCTEON_CNF75XX & OCTEON_FAMILY_MASK:
+ case OCTEON_CN73XX & OCTEON_FAMILY_MASK:
+ case OCTEON_CN78XX & OCTEON_FAMILY_MASK:
+ return CVMX_ADD_IO_SEG(0x0001010000020000ull) + (offset) * 8;
}
return CVMX_ADD_IO_SEG(0x0001070000000500ull) + (offset) * 8;
}
diff --git a/arch/mips/include/asm/octeon/cvmx.h b/arch/mips/include/asm/octeon/cvmx.h
index e638735cc3ac..205ab2ce10f8 100644
--- a/arch/mips/include/asm/octeon/cvmx.h
+++ b/arch/mips/include/asm/octeon/cvmx.h
@@ -357,6 +357,34 @@ static inline unsigned int cvmx_get_local_core_num(void)
return cvmx_get_core_num() & ((1 << CVMX_NODE_NO_SHIFT) - 1);
}
+#define CVMX_NODE_BITS (2) /* Number of bits to define a node */
+#define CVMX_MAX_NODES (1 << CVMX_NODE_BITS)
+#define CVMX_NODE_IO_SHIFT (36)
+#define CVMX_NODE_MEM_SHIFT (40)
+#define CVMX_NODE_IO_MASK ((uint64_t)CVMX_NODE_MASK << CVMX_NODE_IO_SHIFT)
+
+static inline void cvmx_write_csr_node(uint64_t node, uint64_t csr_addr,
+ uint64_t val)
+{
+ uint64_t composite_csr_addr, node_addr;
+
+ node_addr = (node & CVMX_NODE_MASK) << CVMX_NODE_IO_SHIFT;
+ composite_csr_addr = (csr_addr & ~CVMX_NODE_IO_MASK) | node_addr;
+
+ cvmx_write64_uint64(composite_csr_addr, val);
+ if (((csr_addr >> 40) & 0x7ffff) == (0x118))
+ cvmx_read64_uint64(CVMX_MIO_BOOT_BIST_STAT | node_addr);
+}
+
+static inline uint64_t cvmx_read_csr_node(uint64_t node, uint64_t csr_addr)
+{
+ uint64_t node_addr;
+
+ node_addr = (csr_addr & ~CVMX_NODE_IO_MASK) |
+ (node & CVMX_NODE_MASK) << CVMX_NODE_IO_SHIFT;
+ return cvmx_read_csr(node_addr);
+}
+
/**
* Returns the number of bits set in the provided value.
* Simple wrapper for POP instruction.
diff --git a/arch/mips/include/asm/octeon/octeon.h b/arch/mips/include/asm/octeon/octeon.h
index 07c0516ef4d5..c99c4b6a79f4 100644
--- a/arch/mips/include/asm/octeon/octeon.h
+++ b/arch/mips/include/asm/octeon/octeon.h
@@ -362,4 +362,6 @@ extern void octeon_fixup_irqs(void);
extern struct semaphore octeon_bootbus_sem;
+struct irq_domain *octeon_irq_get_block_domain(int node, uint8_t block);
+
#endif /* __ASM_OCTEON_OCTEON_H */
diff --git a/arch/mips/include/asm/smp-ops.h b/arch/mips/include/asm/smp-ops.h
index db7c322f057f..53b2cb8e5966 100644
--- a/arch/mips/include/asm/smp-ops.h
+++ b/arch/mips/include/asm/smp-ops.h
@@ -13,7 +13,7 @@
#include <linux/errno.h>
-#include <asm/mips-cm.h>
+#include <asm/mips-cps.h>
#ifdef CONFIG_SMP
@@ -26,7 +26,7 @@ struct plat_smp_ops {
void (*send_ipi_mask)(const struct cpumask *mask, unsigned int action);
void (*init_secondary)(void);
void (*smp_finish)(void);
- void (*boot_secondary)(int cpu, struct task_struct *idle);
+ int (*boot_secondary)(int cpu, struct task_struct *idle);
void (*smp_setup)(void);
void (*prepare_cpus)(unsigned int max_cpus);
#ifdef CONFIG_HOTPLUG_CPU
@@ -35,11 +35,11 @@ struct plat_smp_ops {
#endif
};
-extern void register_smp_ops(struct plat_smp_ops *ops);
+extern void register_smp_ops(const struct plat_smp_ops *ops);
static inline void plat_smp_setup(void)
{
- extern struct plat_smp_ops *mp_ops; /* private */
+ extern const struct plat_smp_ops *mp_ops; /* private */
mp_ops->smp_setup();
}
@@ -57,7 +57,7 @@ static inline void plat_smp_setup(void)
/* UP, nothing to do ... */
}
-static inline void register_smp_ops(struct plat_smp_ops *ops)
+static inline void register_smp_ops(const struct plat_smp_ops *ops)
{
}
@@ -66,7 +66,7 @@ static inline void register_smp_ops(struct plat_smp_ops *ops)
static inline int register_up_smp_ops(void)
{
#ifdef CONFIG_SMP_UP
- extern struct plat_smp_ops up_smp_ops;
+ extern const struct plat_smp_ops up_smp_ops;
register_smp_ops(&up_smp_ops);
@@ -79,7 +79,7 @@ static inline int register_up_smp_ops(void)
static inline int register_cmp_smp_ops(void)
{
#ifdef CONFIG_MIPS_CMP
- extern struct plat_smp_ops cmp_smp_ops;
+ extern const struct plat_smp_ops cmp_smp_ops;
if (!mips_cm_present())
return -ENODEV;
@@ -95,7 +95,7 @@ static inline int register_cmp_smp_ops(void)
static inline int register_vsmp_smp_ops(void)
{
#ifdef CONFIG_MIPS_MT_SMP
- extern struct plat_smp_ops vsmp_smp_ops;
+ extern const struct plat_smp_ops vsmp_smp_ops;
register_smp_ops(&vsmp_smp_ops);
diff --git a/arch/mips/include/asm/smp.h b/arch/mips/include/asm/smp.h
index bab3d41e5987..9e494f8d9c03 100644
--- a/arch/mips/include/asm/smp.h
+++ b/arch/mips/include/asm/smp.h
@@ -58,7 +58,7 @@ extern void calculate_cpu_foreign_map(void);
*/
static inline void smp_send_reschedule(int cpu)
{
- extern struct plat_smp_ops *mp_ops; /* private */
+ extern const struct plat_smp_ops *mp_ops; /* private */
mp_ops->send_ipi_single(cpu, SMP_RESCHEDULE_YOURSELF);
}
@@ -66,14 +66,14 @@ static inline void smp_send_reschedule(int cpu)
#ifdef CONFIG_HOTPLUG_CPU
static inline int __cpu_disable(void)
{
- extern struct plat_smp_ops *mp_ops; /* private */
+ extern const struct plat_smp_ops *mp_ops; /* private */
return mp_ops->cpu_disable();
}
static inline void __cpu_die(unsigned int cpu)
{
- extern struct plat_smp_ops *mp_ops; /* private */
+ extern const struct plat_smp_ops *mp_ops; /* private */
mp_ops->cpu_die(cpu);
}
@@ -97,14 +97,14 @@ int mips_smp_ipi_free(const struct cpumask *mask);
static inline void arch_send_call_function_single_ipi(int cpu)
{
- extern struct plat_smp_ops *mp_ops; /* private */
+ extern const struct plat_smp_ops *mp_ops; /* private */
mp_ops->send_ipi_mask(cpumask_of(cpu), SMP_CALL_FUNCTION);
}
static inline void arch_send_call_function_ipi_mask(const struct cpumask *mask)
{
- extern struct plat_smp_ops *mp_ops; /* private */
+ extern const struct plat_smp_ops *mp_ops; /* private */
mp_ops->send_ipi_mask(mask, SMP_CALL_FUNCTION);
}
diff --git a/arch/mips/include/asm/stackframe.h b/arch/mips/include/asm/stackframe.h
index eaa5a4d7d5e5..5d3563c55e0c 100644
--- a/arch/mips/include/asm/stackframe.h
+++ b/arch/mips/include/asm/stackframe.h
@@ -19,20 +19,43 @@
#include <asm/asm-offsets.h>
#include <asm/thread_info.h>
+/* Make the addition of cfi info a little easier. */
+ .macro cfi_rel_offset reg offset=0 docfi=0
+ .if \docfi
+ .cfi_rel_offset \reg, \offset
+ .endif
+ .endm
+
+ .macro cfi_st reg offset=0 docfi=0
+ LONG_S \reg, \offset(sp)
+ cfi_rel_offset \reg, \offset, \docfi
+ .endm
+
+ .macro cfi_restore reg offset=0 docfi=0
+ .if \docfi
+ .cfi_restore \reg
+ .endif
+ .endm
+
+ .macro cfi_ld reg offset=0 docfi=0
+ LONG_L \reg, \offset(sp)
+ cfi_restore \reg \offset \docfi
+ .endm
+
#if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX)
#define STATMASK 0x3f
#else
#define STATMASK 0x1f
#endif
- .macro SAVE_AT
+ .macro SAVE_AT docfi=0
.set push
.set noat
- LONG_S $1, PT_R1(sp)
+ cfi_st $1, PT_R1, \docfi
.set pop
.endm
- .macro SAVE_TEMP
+ .macro SAVE_TEMP docfi=0
#ifdef CONFIG_CPU_HAS_SMARTMIPS
mflhxu v1
LONG_S v1, PT_LO(sp)
@@ -44,20 +67,20 @@
mfhi v1
#endif
#ifdef CONFIG_32BIT
- LONG_S $8, PT_R8(sp)
- LONG_S $9, PT_R9(sp)
+ cfi_st $8, PT_R8, \docfi
+ cfi_st $9, PT_R9, \docfi
#endif
- LONG_S $10, PT_R10(sp)
- LONG_S $11, PT_R11(sp)
- LONG_S $12, PT_R12(sp)
+ cfi_st $10, PT_R10, \docfi
+ cfi_st $11, PT_R11, \docfi
+ cfi_st $12, PT_R12, \docfi
#if !defined(CONFIG_CPU_HAS_SMARTMIPS) && !defined(CONFIG_CPU_MIPSR6)
LONG_S v1, PT_HI(sp)
mflo v1
#endif
- LONG_S $13, PT_R13(sp)
- LONG_S $14, PT_R14(sp)
- LONG_S $15, PT_R15(sp)
- LONG_S $24, PT_R24(sp)
+ cfi_st $13, PT_R13, \docfi
+ cfi_st $14, PT_R14, \docfi
+ cfi_st $15, PT_R15, \docfi
+ cfi_st $24, PT_R24, \docfi
#if !defined(CONFIG_CPU_HAS_SMARTMIPS) && !defined(CONFIG_CPU_MIPSR6)
LONG_S v1, PT_LO(sp)
#endif
@@ -71,20 +94,28 @@
#endif
.endm
- .macro SAVE_STATIC
- LONG_S $16, PT_R16(sp)
- LONG_S $17, PT_R17(sp)
- LONG_S $18, PT_R18(sp)
- LONG_S $19, PT_R19(sp)
- LONG_S $20, PT_R20(sp)
- LONG_S $21, PT_R21(sp)
- LONG_S $22, PT_R22(sp)
- LONG_S $23, PT_R23(sp)
- LONG_S $30, PT_R30(sp)
+ .macro SAVE_STATIC docfi=0
+ cfi_st $16, PT_R16, \docfi
+ cfi_st $17, PT_R17, \docfi
+ cfi_st $18, PT_R18, \docfi
+ cfi_st $19, PT_R19, \docfi
+ cfi_st $20, PT_R20, \docfi
+ cfi_st $21, PT_R21, \docfi
+ cfi_st $22, PT_R22, \docfi
+ cfi_st $23, PT_R23, \docfi
+ cfi_st $30, PT_R30, \docfi
.endm
+/*
+ * get_saved_sp returns the SP for the current CPU by looking in the
+ * kernelsp array for it. If tosp is set, it stores the current sp in
+ * k0 and loads the new value in sp. If not, it clobbers k0 and
+ * stores the new value in k1, leaving sp unaffected.
+ */
#ifdef CONFIG_SMP
- .macro get_saved_sp /* SMP variation */
+
+ /* SMP variation */
+ .macro get_saved_sp docfi=0 tosp=0
ASM_CPUID_MFC0 k0, ASM_SMP_CPUID_REG
#if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32)
lui k1, %hi(kernelsp)
@@ -97,7 +128,15 @@
#endif
LONG_SRL k0, SMP_CPUID_PTRSHIFT
LONG_ADDU k1, k0
+ .if \tosp
+ move k0, sp
+ .if \docfi
+ .cfi_register sp, k0
+ .endif
+ LONG_L sp, %lo(kernelsp)(k1)
+ .else
LONG_L k1, %lo(kernelsp)(k1)
+ .endif
.endm
.macro set_saved_sp stackp temp temp2
@@ -106,7 +145,8 @@
LONG_S \stackp, kernelsp(\temp)
.endm
#else /* !CONFIG_SMP */
- .macro get_saved_sp /* Uniprocessor variation */
+ /* Uniprocessor variation */
+ .macro get_saved_sp docfi=0 tosp=0
#ifdef CONFIG_CPU_JUMP_WORKAROUNDS
/*
* Clear BTB (branch target buffer), forbid RAS (return address
@@ -135,7 +175,15 @@
daddiu k1, %hi(kernelsp)
dsll k1, k1, 16
#endif
+ .if \tosp
+ move k0, sp
+ .if \docfi
+ .cfi_register sp, k0
+ .endif
+ LONG_L sp, %lo(kernelsp)(k1)
+ .else
LONG_L k1, %lo(kernelsp)(k1)
+ .endif
.endm
.macro set_saved_sp stackp temp temp2
@@ -143,7 +191,7 @@
.endm
#endif
- .macro SAVE_SOME
+ .macro SAVE_SOME docfi=0
.set push
.set noat
.set reorder
@@ -151,7 +199,6 @@
sll k0, 3 /* extract cu0 bit */
.set noreorder
bltz k0, 8f
- move k1, sp
#ifdef CONFIG_EVA
/*
* Flush interAptiv's Return Prediction Stack (RPS) by writing
@@ -178,20 +225,26 @@
MTC0 k0, CP0_ENTRYHI
#endif
.set reorder
+ move k0, sp
+ .if \docfi
+ .cfi_register sp, k0
+ .endif
/* Called from user mode, new stack. */
- get_saved_sp
-#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
-8: move k0, sp
- PTR_SUBU sp, k1, PT_SIZE
-#else
- .set at=k0
-8: PTR_SUBU k1, PT_SIZE
+ get_saved_sp docfi=\docfi tosp=1
+8:
+#ifdef CONFIG_CPU_DADDI_WORKAROUNDS
+ .set at=k1
+#endif
+ PTR_SUBU sp, PT_SIZE
+#ifdef CONFIG_CPU_DADDI_WORKAROUNDS
.set noat
- move k0, sp
- move sp, k1
#endif
- LONG_S k0, PT_R29(sp)
- LONG_S $3, PT_R3(sp)
+ .if \docfi
+ .cfi_def_cfa sp,0
+ .endif
+ cfi_st k0, PT_R29, \docfi
+ cfi_rel_offset sp, PT_R29, \docfi
+ cfi_st v1, PT_R3, \docfi
/*
* You might think that you don't need to save $0,
* but the FPU emulator and gdb remote debug stub
@@ -199,23 +252,26 @@
*/
LONG_S $0, PT_R0(sp)
mfc0 v1, CP0_STATUS
- LONG_S $2, PT_R2(sp)
+ cfi_st v0, PT_R2, \docfi
LONG_S v1, PT_STATUS(sp)
- LONG_S $4, PT_R4(sp)
+ cfi_st $4, PT_R4, \docfi
mfc0 v1, CP0_CAUSE
- LONG_S $5, PT_R5(sp)
+ cfi_st $5, PT_R5, \docfi
LONG_S v1, PT_CAUSE(sp)
- LONG_S $6, PT_R6(sp)
- MFC0 v1, CP0_EPC
- LONG_S $7, PT_R7(sp)
+ cfi_st $6, PT_R6, \docfi
+ cfi_st ra, PT_R31, \docfi
+ MFC0 ra, CP0_EPC
+ cfi_st $7, PT_R7, \docfi
#ifdef CONFIG_64BIT
- LONG_S $8, PT_R8(sp)
- LONG_S $9, PT_R9(sp)
+ cfi_st $8, PT_R8, \docfi
+ cfi_st $9, PT_R9, \docfi
#endif
- LONG_S v1, PT_EPC(sp)
- LONG_S $25, PT_R25(sp)
- LONG_S $28, PT_R28(sp)
- LONG_S $31, PT_R31(sp)
+ LONG_S ra, PT_EPC(sp)
+ .if \docfi
+ .cfi_rel_offset ra, PT_EPC
+ .endif
+ cfi_st $25, PT_R25, \docfi
+ cfi_st $28, PT_R28, \docfi
/* Set thread_info if we're coming from user mode */
mfc0 k0, CP0_STATUS
@@ -232,21 +288,21 @@
.set pop
.endm
- .macro SAVE_ALL
- SAVE_SOME
- SAVE_AT
- SAVE_TEMP
- SAVE_STATIC
+ .macro SAVE_ALL docfi=0
+ SAVE_SOME \docfi
+ SAVE_AT \docfi
+ SAVE_TEMP \docfi
+ SAVE_STATIC \docfi
.endm
- .macro RESTORE_AT
+ .macro RESTORE_AT docfi=0
.set push
.set noat
- LONG_L $1, PT_R1(sp)
+ cfi_ld $1, PT_R1, \docfi
.set pop
.endm
- .macro RESTORE_TEMP
+ .macro RESTORE_TEMP docfi=0
#ifdef CONFIG_CPU_CAVIUM_OCTEON
/* Restore the Octeon multiplier state */
jal octeon_mult_restore
@@ -265,33 +321,37 @@
mthi $24
#endif
#ifdef CONFIG_32BIT
- LONG_L $8, PT_R8(sp)
- LONG_L $9, PT_R9(sp)
+ cfi_ld $8, PT_R8, \docfi
+ cfi_ld $9, PT_R9, \docfi
#endif
- LONG_L $10, PT_R10(sp)
- LONG_L $11, PT_R11(sp)
- LONG_L $12, PT_R12(sp)
- LONG_L $13, PT_R13(sp)
- LONG_L $14, PT_R14(sp)
- LONG_L $15, PT_R15(sp)
- LONG_L $24, PT_R24(sp)
+ cfi_ld $10, PT_R10, \docfi
+ cfi_ld $11, PT_R11, \docfi
+ cfi_ld $12, PT_R12, \docfi
+ cfi_ld $13, PT_R13, \docfi
+ cfi_ld $14, PT_R14, \docfi
+ cfi_ld $15, PT_R15, \docfi
+ cfi_ld $24, PT_R24, \docfi
.endm
- .macro RESTORE_STATIC
- LONG_L $16, PT_R16(sp)
- LONG_L $17, PT_R17(sp)
- LONG_L $18, PT_R18(sp)
- LONG_L $19, PT_R19(sp)
- LONG_L $20, PT_R20(sp)
- LONG_L $21, PT_R21(sp)
- LONG_L $22, PT_R22(sp)
- LONG_L $23, PT_R23(sp)
- LONG_L $30, PT_R30(sp)
+ .macro RESTORE_STATIC docfi=0
+ cfi_ld $16, PT_R16, \docfi
+ cfi_ld $17, PT_R17, \docfi
+ cfi_ld $18, PT_R18, \docfi
+ cfi_ld $19, PT_R19, \docfi
+ cfi_ld $20, PT_R20, \docfi
+ cfi_ld $21, PT_R21, \docfi
+ cfi_ld $22, PT_R22, \docfi
+ cfi_ld $23, PT_R23, \docfi
+ cfi_ld $30, PT_R30, \docfi
+ .endm
+
+ .macro RESTORE_SP docfi=0
+ cfi_ld sp, PT_R29, \docfi
.endm
#if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX)
- .macro RESTORE_SOME
+ .macro RESTORE_SOME docfi=0
.set push
.set reorder
.set noat
@@ -306,30 +366,30 @@
and v0, v1
or v0, a0
mtc0 v0, CP0_STATUS
- LONG_L $31, PT_R31(sp)
- LONG_L $28, PT_R28(sp)
- LONG_L $25, PT_R25(sp)
- LONG_L $7, PT_R7(sp)
- LONG_L $6, PT_R6(sp)
- LONG_L $5, PT_R5(sp)
- LONG_L $4, PT_R4(sp)
- LONG_L $3, PT_R3(sp)
- LONG_L $2, PT_R2(sp)
+ cfi_ld $31, PT_R31, \docfi
+ cfi_ld $28, PT_R28, \docfi
+ cfi_ld $25, PT_R25, \docfi
+ cfi_ld $7, PT_R7, \docfi
+ cfi_ld $6, PT_R6, \docfi
+ cfi_ld $5, PT_R5, \docfi
+ cfi_ld $4, PT_R4, \docfi
+ cfi_ld $3, PT_R3, \docfi
+ cfi_ld $2, PT_R2, \docfi
.set pop
.endm
- .macro RESTORE_SP_AND_RET
+ .macro RESTORE_SP_AND_RET docfi=0
.set push
.set noreorder
LONG_L k0, PT_EPC(sp)
- LONG_L sp, PT_R29(sp)
+ RESTORE_SP \docfi
jr k0
rfe
.set pop
.endm
#else
- .macro RESTORE_SOME
+ .macro RESTORE_SOME docfi=0
.set push
.set reorder
.set noat
@@ -346,24 +406,24 @@
mtc0 v0, CP0_STATUS
LONG_L v1, PT_EPC(sp)
MTC0 v1, CP0_EPC
- LONG_L $31, PT_R31(sp)
- LONG_L $28, PT_R28(sp)
- LONG_L $25, PT_R25(sp)
+ cfi_ld $31, PT_R31, \docfi
+ cfi_ld $28, PT_R28, \docfi
+ cfi_ld $25, PT_R25, \docfi
#ifdef CONFIG_64BIT
- LONG_L $8, PT_R8(sp)
- LONG_L $9, PT_R9(sp)
+ cfi_ld $8, PT_R8, \docfi
+ cfi_ld $9, PT_R9, \docfi
#endif
- LONG_L $7, PT_R7(sp)
- LONG_L $6, PT_R6(sp)
- LONG_L $5, PT_R5(sp)
- LONG_L $4, PT_R4(sp)
- LONG_L $3, PT_R3(sp)
- LONG_L $2, PT_R2(sp)
+ cfi_ld $7, PT_R7, \docfi
+ cfi_ld $6, PT_R6, \docfi
+ cfi_ld $5, PT_R5, \docfi
+ cfi_ld $4, PT_R4, \docfi
+ cfi_ld $3, PT_R3, \docfi
+ cfi_ld $2, PT_R2, \docfi
.set pop
.endm
- .macro RESTORE_SP_AND_RET
- LONG_L sp, PT_R29(sp)
+ .macro RESTORE_SP_AND_RET docfi=0
+ RESTORE_SP \docfi
#ifdef CONFIG_CPU_MIPSR6
eretnc
#else
@@ -375,16 +435,12 @@
#endif
- .macro RESTORE_SP
- LONG_L sp, PT_R29(sp)
- .endm
-
- .macro RESTORE_ALL
- RESTORE_TEMP
- RESTORE_STATIC
- RESTORE_AT
- RESTORE_SOME
- RESTORE_SP
+ .macro RESTORE_ALL docfi=0
+ RESTORE_TEMP \docfi
+ RESTORE_STATIC \docfi
+ RESTORE_AT \docfi
+ RESTORE_SOME \docfi
+ RESTORE_SP \docfi
.endm
/*
diff --git a/arch/mips/include/asm/stacktrace.h b/arch/mips/include/asm/stacktrace.h
index 780ee2c2a2ac..10c4e9c84448 100644
--- a/arch/mips/include/asm/stacktrace.h
+++ b/arch/mips/include/asm/stacktrace.h
@@ -2,6 +2,8 @@
#define _ASM_STACKTRACE_H
#include <asm/ptrace.h>
+#include <asm/asm.h>
+#include <linux/stringify.h>
#ifdef CONFIG_KALLSYMS
extern int raw_show_trace;
@@ -20,6 +22,14 @@ static inline unsigned long unwind_stack(struct task_struct *task,
}
#endif
+#define STR_PTR_LA __stringify(PTR_LA)
+#define STR_LONG_S __stringify(LONG_S)
+#define STR_LONG_L __stringify(LONG_L)
+#define STR_LONGSIZE __stringify(LONGSIZE)
+
+#define STORE_ONE_REG(r) \
+ STR_LONG_S " $" __stringify(r)",("STR_LONGSIZE"*"__stringify(r)")(%1)\n\t"
+
static __always_inline void prepare_frametrace(struct pt_regs *regs)
{
#ifndef CONFIG_KALLSYMS
@@ -32,21 +42,47 @@ static __always_inline void prepare_frametrace(struct pt_regs *regs)
__asm__ __volatile__(
".set push\n\t"
".set noat\n\t"
-#ifdef CONFIG_64BIT
- "1: dla $1, 1b\n\t"
- "sd $1, %0\n\t"
- "sd $29, %1\n\t"
- "sd $31, %2\n\t"
-#else
- "1: la $1, 1b\n\t"
- "sw $1, %0\n\t"
- "sw $29, %1\n\t"
- "sw $31, %2\n\t"
-#endif
+ /* Store $1 so we can use it */
+ STR_LONG_S " $1,"STR_LONGSIZE"(%1)\n\t"
+ /* Store the PC */
+ "1: " STR_PTR_LA " $1, 1b\n\t"
+ STR_LONG_S " $1,%0\n\t"
+ STORE_ONE_REG(2)
+ STORE_ONE_REG(3)
+ STORE_ONE_REG(4)
+ STORE_ONE_REG(5)
+ STORE_ONE_REG(6)
+ STORE_ONE_REG(7)
+ STORE_ONE_REG(8)
+ STORE_ONE_REG(9)
+ STORE_ONE_REG(10)
+ STORE_ONE_REG(11)
+ STORE_ONE_REG(12)
+ STORE_ONE_REG(13)
+ STORE_ONE_REG(14)
+ STORE_ONE_REG(15)
+ STORE_ONE_REG(16)
+ STORE_ONE_REG(17)
+ STORE_ONE_REG(18)
+ STORE_ONE_REG(19)
+ STORE_ONE_REG(20)
+ STORE_ONE_REG(21)
+ STORE_ONE_REG(22)
+ STORE_ONE_REG(23)
+ STORE_ONE_REG(24)
+ STORE_ONE_REG(25)
+ STORE_ONE_REG(26)
+ STORE_ONE_REG(27)
+ STORE_ONE_REG(28)
+ STORE_ONE_REG(29)
+ STORE_ONE_REG(30)
+ STORE_ONE_REG(31)
+ /* Restore $1 */
+ STR_LONG_L " $1,"STR_LONGSIZE"(%1)\n\t"
".set pop\n\t"
- : "=m" (regs->cp0_epc),
- "=m" (regs->regs[29]), "=m" (regs->regs[31])
- : : "memory");
+ : "=m" (regs->cp0_epc)
+ : "r" (regs->regs)
+ : "memory");
}
#endif /* _ASM_STACKTRACE_H */
diff --git a/arch/mips/include/asm/topology.h b/arch/mips/include/asm/topology.h
index 7afda4150a59..0673d2d0f2e6 100644
--- a/arch/mips/include/asm/topology.h
+++ b/arch/mips/include/asm/topology.h
@@ -13,7 +13,7 @@
#ifdef CONFIG_SMP
#define topology_physical_package_id(cpu) (cpu_data[cpu].package)
-#define topology_core_id(cpu) (cpu_data[cpu].core)
+#define topology_core_id(cpu) (cpu_core(&cpu_data[cpu]))
#define topology_core_cpumask(cpu) (&cpu_core_map[cpu])
#define topology_sibling_cpumask(cpu) (&cpu_sibling_map[cpu])
#endif
diff --git a/arch/mips/include/uapi/asm/inst.h b/arch/mips/include/uapi/asm/inst.h
index d61897535926..6abea5183d7c 100644
--- a/arch/mips/include/uapi/asm/inst.h
+++ b/arch/mips/include/uapi/asm/inst.h
@@ -981,7 +981,7 @@ struct mm16_r3_format { /* Load from global pointer format */
struct mm16_r5_format { /* Load/store from stack pointer format */
__BITFIELD_FIELD(unsigned int opcode : 6,
__BITFIELD_FIELD(unsigned int rt : 5,
- __BITFIELD_FIELD(signed int simmediate : 5,
+ __BITFIELD_FIELD(unsigned int imm : 5,
__BITFIELD_FIELD(unsigned int : 16, /* Ignored */
;))))
};
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile
index 46c0581256f1..07f0f4a4b562 100644
--- a/arch/mips/kernel/Makefile
+++ b/arch/mips/kernel/Makefile
@@ -35,11 +35,15 @@ obj-$(CONFIG_MODULES) += module.o
obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o
obj-$(CONFIG_FUNCTION_TRACER) += mcount.o ftrace.o
-obj-$(CONFIG_CPU_R4K_FPU) += r4k_fpu.o r4k_switch.o
-obj-$(CONFIG_CPU_R3000) += r2300_fpu.o r2300_switch.o
-obj-$(CONFIG_CPU_R6000) += r6000_fpu.o r4k_switch.o
-obj-$(CONFIG_CPU_TX39XX) += r2300_fpu.o r2300_switch.o
-obj-$(CONFIG_CPU_CAVIUM_OCTEON) += r4k_fpu.o octeon_switch.o
+sw-y := r4k_switch.o
+sw-$(CONFIG_CPU_R3000) := r2300_switch.o
+sw-$(CONFIG_CPU_TX39XX) := r2300_switch.o
+sw-$(CONFIG_CPU_CAVIUM_OCTEON) := octeon_switch.o
+obj-y += $(sw-y)
+
+obj-$(CONFIG_CPU_R4K_FPU) += r4k_fpu.o
+obj-$(CONFIG_CPU_R3000) += r2300_fpu.o
+obj-$(CONFIG_CPU_TX39XX) += r2300_fpu.o
obj-$(CONFIG_SMP) += smp.o
obj-$(CONFIG_SMP_UP) += smp-up.o
diff --git a/arch/mips/kernel/cps-vec.S b/arch/mips/kernel/cps-vec.S
index b849fe6aad94..d173b49f212d 100644
--- a/arch/mips/kernel/cps-vec.S
+++ b/arch/mips/kernel/cps-vec.S
@@ -327,8 +327,8 @@ LEAF(mips_cps_get_bootcfg)
* to handle contiguous VP numbering, but no such systems yet
* exist.
*/
- mfc0 t9, $3, 1
- andi t9, t9, 0xff
+ mfc0 t9, CP0_GLOBALNUMBER
+ andi t9, t9, MIPS_GLOBALNUMBER_VP
#elif defined(CONFIG_MIPS_MT_SMP)
has_mt ta2, 1f
diff --git a/arch/mips/kernel/cpu-probe.c b/arch/mips/kernel/cpu-probe.c
index d08afc7dc507..cf3fd549e16d 100644
--- a/arch/mips/kernel/cpu-probe.c
+++ b/arch/mips/kernel/cpu-probe.c
@@ -326,7 +326,7 @@ static int __init fpu_disable(char *s)
__setup("nofpu", fpu_disable);
-int mips_dsp_disabled;
+static int mips_dsp_disabled;
static int __init dsp_disable(char *s)
{
@@ -919,9 +919,12 @@ static void decode_configs(struct cpuinfo_mips *c)
#ifndef CONFIG_MIPS_CPS
if (cpu_has_mips_r2_r6) {
- c->core = get_ebase_cpunum();
+ unsigned int core;
+
+ core = get_ebase_cpunum();
if (cpu_has_mipsmt)
- c->core >>= fls(core_nvpes()) - 1;
+ core >>= fls(core_nvpes()) - 1;
+ cpu_set_core(c, core);
}
#endif
}
@@ -1394,24 +1397,6 @@ static inline void cpu_probe_legacy(struct cpuinfo_mips *c, unsigned int cpu)
MIPS_CPU_DIVEC | MIPS_CPU_LLSC;
c->tlbsize = 48;
break;
- case PRID_IMP_R6000:
- c->cputype = CPU_R6000;
- __cpu_name[cpu] = "R6000";
- set_isa(c, MIPS_CPU_ISA_II);
- c->fpu_msk31 |= FPU_CSR_CONDX | FPU_CSR_FS;
- c->options = MIPS_CPU_TLB | MIPS_CPU_FPU |
- MIPS_CPU_LLSC;
- c->tlbsize = 32;
- break;
- case PRID_IMP_R6000A:
- c->cputype = CPU_R6000A;
- __cpu_name[cpu] = "R6000A";
- set_isa(c, MIPS_CPU_ISA_II);
- c->fpu_msk31 |= FPU_CSR_CONDX | FPU_CSR_FS;
- c->options = MIPS_CPU_TLB | MIPS_CPU_FPU |
- MIPS_CPU_LLSC;
- c->tlbsize = 32;
- break;
case PRID_IMP_RM7000:
c->cputype = CPU_RM7000;
__cpu_name[cpu] = "RM7000";
@@ -2113,3 +2098,35 @@ void cpu_report(void)
if (cpu_has_msa)
pr_info("MSA revision is: %08x\n", c->msa_id);
}
+
+void cpu_set_cluster(struct cpuinfo_mips *cpuinfo, unsigned int cluster)
+{
+ /* Ensure the core number fits in the field */
+ WARN_ON(cluster > (MIPS_GLOBALNUMBER_CLUSTER >>
+ MIPS_GLOBALNUMBER_CLUSTER_SHF));
+
+ cpuinfo->globalnumber &= ~MIPS_GLOBALNUMBER_CLUSTER;
+ cpuinfo->globalnumber |= cluster << MIPS_GLOBALNUMBER_CLUSTER_SHF;
+}
+
+void cpu_set_core(struct cpuinfo_mips *cpuinfo, unsigned int core)
+{
+ /* Ensure the core number fits in the field */
+ WARN_ON(core > (MIPS_GLOBALNUMBER_CORE >> MIPS_GLOBALNUMBER_CORE_SHF));
+
+ cpuinfo->globalnumber &= ~MIPS_GLOBALNUMBER_CORE;
+ cpuinfo->globalnumber |= core << MIPS_GLOBALNUMBER_CORE_SHF;
+}
+
+void cpu_set_vpe_id(struct cpuinfo_mips *cpuinfo, unsigned int vpe)
+{
+ /* Ensure the VP(E) ID fits in the field */
+ WARN_ON(vpe > (MIPS_GLOBALNUMBER_VP >> MIPS_GLOBALNUMBER_VP_SHF));
+
+ /* Ensure we're not using VP(E)s without support */
+ WARN_ON(vpe && !IS_ENABLED(CONFIG_MIPS_MT_SMP) &&
+ !IS_ENABLED(CONFIG_CPU_MIPSR6));
+
+ cpuinfo->globalnumber &= ~MIPS_GLOBALNUMBER_VP;
+ cpuinfo->globalnumber |= vpe << MIPS_GLOBALNUMBER_VP_SHF;
+}
diff --git a/arch/mips/kernel/elf.c b/arch/mips/kernel/elf.c
index 5c429d70e17f..0828d6d963b7 100644
--- a/arch/mips/kernel/elf.c
+++ b/arch/mips/kernel/elf.c
@@ -87,6 +87,7 @@ int arch_elf_pt_proc(void *_ehdr, void *_phdr, struct file *elf,
bool elf32;
u32 flags;
int ret;
+ loff_t pos;
elf32 = ehdr->e32.e_ident[EI_CLASS] == ELFCLASS32;
flags = elf32 ? ehdr->e32.e_flags : ehdr->e64.e_flags;
@@ -108,21 +109,16 @@ int arch_elf_pt_proc(void *_ehdr, void *_phdr, struct file *elf,
if (phdr32->p_filesz < sizeof(abiflags))
return -EINVAL;
-
- ret = kernel_read(elf, phdr32->p_offset,
- (char *)&abiflags,
- sizeof(abiflags));
+ pos = phdr32->p_offset;
} else {
if (phdr64->p_type != PT_MIPS_ABIFLAGS)
return 0;
if (phdr64->p_filesz < sizeof(abiflags))
return -EINVAL;
-
- ret = kernel_read(elf, phdr64->p_offset,
- (char *)&abiflags,
- sizeof(abiflags));
+ pos = phdr64->p_offset;
}
+ ret = kernel_read(elf, &abiflags, sizeof(abiflags), &pos);
if (ret < 0)
return ret;
if (ret != sizeof(abiflags))
diff --git a/arch/mips/kernel/genex.S b/arch/mips/kernel/genex.S
index ae810da4d499..37b9383eacd3 100644
--- a/arch/mips/kernel/genex.S
+++ b/arch/mips/kernel/genex.S
@@ -150,6 +150,7 @@ LEAF(__r4k_wait)
.align 5
BUILD_ROLLBACK_PROLOGUE handle_int
NESTED(handle_int, PT_SIZE, sp)
+ .cfi_signal_frame
#ifdef CONFIG_TRACE_IRQFLAGS
/*
* Check to see if the interrupted code has just disabled
@@ -181,7 +182,7 @@ NESTED(handle_int, PT_SIZE, sp)
1:
.set pop
#endif
- SAVE_ALL
+ SAVE_ALL docfi=1
CLI
TRACE_IRQS_OFF
@@ -269,8 +270,8 @@ NESTED(except_vec_ejtag_debug, 0, sp)
*/
BUILD_ROLLBACK_PROLOGUE except_vec_vi
NESTED(except_vec_vi, 0, sp)
- SAVE_SOME
- SAVE_AT
+ SAVE_SOME docfi=1
+ SAVE_AT docfi=1
.set push
.set noreorder
PTR_LA v1, except_vec_vi_handler
@@ -396,6 +397,7 @@ NESTED(except_vec_nmi, 0, sp)
__FINIT
NESTED(nmi_handler, PT_SIZE, sp)
+ .cfi_signal_frame
.set push
.set noat
/*
@@ -478,6 +480,7 @@ NESTED(nmi_handler, PT_SIZE, sp)
.macro __BUILD_HANDLER exception handler clear verbose ext
.align 5
NESTED(handle_\exception, PT_SIZE, sp)
+ .cfi_signal_frame
.set noat
SAVE_ALL
FEXPORT(handle_\exception\ext)
@@ -485,8 +488,8 @@ NESTED(nmi_handler, PT_SIZE, sp)
.set at
__BUILD_\verbose \exception
move a0, sp
- PTR_LA ra, ret_from_exception
- j do_\handler
+ jal do_\handler
+ j ret_from_exception
END(handle_\exception)
.endm
diff --git a/arch/mips/kernel/idle.c b/arch/mips/kernel/idle.c
index 60ab4c44d305..7c246b69c545 100644
--- a/arch/mips/kernel/idle.c
+++ b/arch/mips/kernel/idle.c
@@ -11,6 +11,7 @@
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
*/
+#include <linux/cpu.h>
#include <linux/export.h>
#include <linux/init.h>
#include <linux/irqflags.h>
diff --git a/arch/mips/kernel/mips-cm.c b/arch/mips/kernel/mips-cm.c
index cb0c57f860d4..e91c8c4e2eb5 100644
--- a/arch/mips/kernel/mips-cm.c
+++ b/arch/mips/kernel/mips-cm.c
@@ -12,10 +12,10 @@
#include <linux/percpu.h>
#include <linux/spinlock.h>
-#include <asm/mips-cm.h>
+#include <asm/mips-cps.h>
#include <asm/mipsregs.h>
-void __iomem *mips_cm_base;
+void __iomem *mips_gcr_base;
void __iomem *mips_cm_l2sync_base;
int mips_cm_is64;
@@ -167,8 +167,8 @@ phys_addr_t __mips_cm_l2sync_phys_base(void)
* current location.
*/
base_reg = read_gcr_l2_only_sync_base();
- if (base_reg & CM_GCR_L2_ONLY_SYNC_BASE_SYNCEN_MSK)
- return base_reg & CM_GCR_L2_ONLY_SYNC_BASE_SYNCBASE_MSK;
+ if (base_reg & CM_GCR_L2_ONLY_SYNC_BASE_SYNCEN)
+ return base_reg & CM_GCR_L2_ONLY_SYNC_BASE_SYNCBASE;
/* Default to following the CM */
return mips_cm_phys_base() + MIPS_CM_GCR_SIZE;
@@ -183,19 +183,19 @@ static void mips_cm_probe_l2sync(void)
phys_addr_t addr;
/* L2-only sync was introduced with CM major revision 6 */
- major_rev = (read_gcr_rev() & CM_GCR_REV_MAJOR_MSK) >>
- CM_GCR_REV_MAJOR_SHF;
+ major_rev = (read_gcr_rev() & CM_GCR_REV_MAJOR) >>
+ __ffs(CM_GCR_REV_MAJOR);
if (major_rev < 6)
return;
/* Find a location for the L2 sync region */
addr = mips_cm_l2sync_phys_base();
- BUG_ON((addr & CM_GCR_L2_ONLY_SYNC_BASE_SYNCBASE_MSK) != addr);
+ BUG_ON((addr & CM_GCR_L2_ONLY_SYNC_BASE_SYNCBASE) != addr);
if (!addr)
return;
/* Set the region base address & enable it */
- write_gcr_l2_only_sync_base(addr | CM_GCR_L2_ONLY_SYNC_BASE_SYNCEN_MSK);
+ write_gcr_l2_only_sync_base(addr | CM_GCR_L2_ONLY_SYNC_BASE_SYNCEN);
/* Map the region */
mips_cm_l2sync_base = ioremap_nocache(addr, MIPS_CM_L2SYNC_SIZE);
@@ -211,41 +211,39 @@ int mips_cm_probe(void)
* No need to probe again if we have already been
* here before.
*/
- if (mips_cm_base)
+ if (mips_gcr_base)
return 0;
addr = mips_cm_phys_base();
- BUG_ON((addr & CM_GCR_BASE_GCRBASE_MSK) != addr);
+ BUG_ON((addr & CM_GCR_BASE_GCRBASE) != addr);
if (!addr)
return -ENODEV;
- mips_cm_base = ioremap_nocache(addr, MIPS_CM_GCR_SIZE);
- if (!mips_cm_base)
+ mips_gcr_base = ioremap_nocache(addr, MIPS_CM_GCR_SIZE);
+ if (!mips_gcr_base)
return -ENXIO;
/* sanity check that we're looking at a CM */
base_reg = read_gcr_base();
- if ((base_reg & CM_GCR_BASE_GCRBASE_MSK) != addr) {
+ if ((base_reg & CM_GCR_BASE_GCRBASE) != addr) {
pr_err("GCRs appear to have been moved (expected them at 0x%08lx)!\n",
(unsigned long)addr);
- mips_cm_base = NULL;
+ mips_gcr_base = NULL;
return -ENODEV;
}
/* set default target to memory */
- base_reg &= ~CM_GCR_BASE_CMDEFTGT_MSK;
- base_reg |= CM_GCR_BASE_CMDEFTGT_MEM;
- write_gcr_base(base_reg);
+ change_gcr_base(CM_GCR_BASE_CMDEFTGT, CM_GCR_BASE_CMDEFTGT_MEM);
/* disable CM regions */
- write_gcr_reg0_base(CM_GCR_REGn_BASE_BASEADDR_MSK);
- write_gcr_reg0_mask(CM_GCR_REGn_MASK_ADDRMASK_MSK);
- write_gcr_reg1_base(CM_GCR_REGn_BASE_BASEADDR_MSK);
- write_gcr_reg1_mask(CM_GCR_REGn_MASK_ADDRMASK_MSK);
- write_gcr_reg2_base(CM_GCR_REGn_BASE_BASEADDR_MSK);
- write_gcr_reg2_mask(CM_GCR_REGn_MASK_ADDRMASK_MSK);
- write_gcr_reg3_base(CM_GCR_REGn_BASE_BASEADDR_MSK);
- write_gcr_reg3_mask(CM_GCR_REGn_MASK_ADDRMASK_MSK);
+ write_gcr_reg0_base(CM_GCR_REGn_BASE_BASEADDR);
+ write_gcr_reg0_mask(CM_GCR_REGn_MASK_ADDRMASK);
+ write_gcr_reg1_base(CM_GCR_REGn_BASE_BASEADDR);
+ write_gcr_reg1_mask(CM_GCR_REGn_MASK_ADDRMASK);
+ write_gcr_reg2_base(CM_GCR_REGn_BASE_BASEADDR);
+ write_gcr_reg2_mask(CM_GCR_REGn_MASK_ADDRMASK);
+ write_gcr_reg3_base(CM_GCR_REGn_BASE_BASEADDR);
+ write_gcr_reg3_mask(CM_GCR_REGn_MASK_ADDRMASK);
/* probe for an L2-only sync region */
mips_cm_probe_l2sync();
@@ -259,16 +257,27 @@ int mips_cm_probe(void)
return 0;
}
-void mips_cm_lock_other(unsigned int core, unsigned int vp)
+void mips_cm_lock_other(unsigned int cluster, unsigned int core,
+ unsigned int vp, unsigned int block)
{
- unsigned curr_core;
+ unsigned int curr_core, cm_rev;
u32 val;
+ cm_rev = mips_cm_revision();
preempt_disable();
- if (mips_cm_revision() >= CM_REV_CM3) {
- val = core << CM3_GCR_Cx_OTHER_CORE_SHF;
- val |= vp << CM3_GCR_Cx_OTHER_VP_SHF;
+ if (cm_rev >= CM_REV_CM3) {
+ val = core << __ffs(CM3_GCR_Cx_OTHER_CORE);
+ val |= vp << __ffs(CM3_GCR_Cx_OTHER_VP);
+
+ if (cm_rev >= CM_REV_CM3_5) {
+ val |= CM_GCR_Cx_OTHER_CLUSTER_EN;
+ val |= cluster << __ffs(CM_GCR_Cx_OTHER_CLUSTER);
+ val |= block << __ffs(CM_GCR_Cx_OTHER_BLOCK);
+ } else {
+ WARN_ON(cluster != 0);
+ WARN_ON(block != CM_GCR_Cx_OTHER_BLOCK_LOCAL);
+ }
/*
* We need to disable interrupts in SMP systems in order to
@@ -282,18 +291,20 @@ void mips_cm_lock_other(unsigned int core, unsigned int vp)
spin_lock_irqsave(this_cpu_ptr(&cm_core_lock),
*this_cpu_ptr(&cm_core_lock_flags));
} else {
+ WARN_ON(cluster != 0);
WARN_ON(vp != 0);
+ WARN_ON(block != CM_GCR_Cx_OTHER_BLOCK_LOCAL);
/*
* We only have a GCR_CL_OTHER per core in systems with
* CM 2.5 & older, so have to ensure other VP(E)s don't
* race with us.
*/
- curr_core = current_cpu_data.core;
+ curr_core = cpu_core(&current_cpu_data);
spin_lock_irqsave(&per_cpu(cm_core_lock, curr_core),
per_cpu(cm_core_lock_flags, curr_core));
- val = core << CM_GCR_Cx_OTHER_CORENUM_SHF;
+ val = core << __ffs(CM_GCR_Cx_OTHER_CORENUM);
}
write_gcr_cl_other(val);
@@ -310,7 +321,7 @@ void mips_cm_unlock_other(void)
unsigned int curr_core;
if (mips_cm_revision() < CM_REV_CM3) {
- curr_core = current_cpu_data.core;
+ curr_core = cpu_core(&current_cpu_data);
spin_unlock_irqrestore(&per_cpu(cm_core_lock, curr_core),
per_cpu(cm_core_lock_flags, curr_core));
} else {
@@ -332,13 +343,13 @@ void mips_cm_error_report(void)
return;
revision = mips_cm_revision();
+ cm_error = read_gcr_error_cause();
+ cm_addr = read_gcr_error_addr();
+ cm_other = read_gcr_error_mult();
if (revision < CM_REV_CM3) { /* CM2 */
- cm_error = read_gcr_error_cause();
- cm_addr = read_gcr_error_addr();
- cm_other = read_gcr_error_mult();
- cause = cm_error >> CM_GCR_ERROR_CAUSE_ERRTYPE_SHF;
- ocause = cm_other >> CM_GCR_ERROR_MULT_ERR2ND_SHF;
+ cause = cm_error >> __ffs(CM_GCR_ERROR_CAUSE_ERRTYPE);
+ ocause = cm_other >> __ffs(CM_GCR_ERROR_MULT_ERR2ND);
if (!cause)
return;
@@ -380,11 +391,8 @@ void mips_cm_error_report(void)
ulong core_id_bits, vp_id_bits, cmd_bits, cmd_group_bits;
ulong cm3_cca_bits, mcp_bits, cm3_tr_bits, sched_bit;
- cm_error = read64_gcr_error_cause();
- cm_addr = read64_gcr_error_addr();
- cm_other = read64_gcr_error_mult();
- cause = cm_error >> CM3_GCR_ERROR_CAUSE_ERRTYPE_SHF;
- ocause = cm_other >> CM_GCR_ERROR_MULT_ERR2ND_SHF;
+ cause = cm_error >> __ffs64(CM3_GCR_ERROR_CAUSE_ERRTYPE);
+ ocause = cm_other >> __ffs(CM_GCR_ERROR_MULT_ERR2ND);
if (!cause)
return;
diff --git a/arch/mips/kernel/mips-cpc.c b/arch/mips/kernel/mips-cpc.c
index a4964c334cab..f66b05ebf637 100644
--- a/arch/mips/kernel/mips-cpc.c
+++ b/arch/mips/kernel/mips-cpc.c
@@ -12,8 +12,7 @@
#include <linux/percpu.h>
#include <linux/spinlock.h>
-#include <asm/mips-cm.h>
-#include <asm/mips-cpc.h>
+#include <asm/mips-cps.h>
void __iomem *mips_cpc_base;
@@ -40,13 +39,13 @@ static phys_addr_t mips_cpc_phys_base(void)
if (!mips_cm_present())
return 0;
- if (!(read_gcr_cpc_status() & CM_GCR_CPC_STATUS_EX_MSK))
+ if (!(read_gcr_cpc_status() & CM_GCR_CPC_STATUS_EX))
return 0;
/* If the CPC is already enabled, leave it so */
cpc_base = read_gcr_cpc_base();
- if (cpc_base & CM_GCR_CPC_BASE_CPCEN_MSK)
- return cpc_base & CM_GCR_CPC_BASE_CPCBASE_MSK;
+ if (cpc_base & CM_GCR_CPC_BASE_CPCEN)
+ return cpc_base & CM_GCR_CPC_BASE_CPCBASE;
/* Otherwise, use the default address */
cpc_base = mips_cpc_default_phys_base();
@@ -54,7 +53,7 @@ static phys_addr_t mips_cpc_phys_base(void)
return cpc_base;
/* Enable the CPC, mapped at the default address */
- write_gcr_cpc_base(cpc_base | CM_GCR_CPC_BASE_CPCEN_MSK);
+ write_gcr_cpc_base(cpc_base | CM_GCR_CPC_BASE_CPCEN);
return cpc_base;
}
@@ -86,10 +85,10 @@ void mips_cpc_lock_other(unsigned int core)
return;
preempt_disable();
- curr_core = current_cpu_data.core;
+ curr_core = cpu_core(&current_cpu_data);
spin_lock_irqsave(&per_cpu(cpc_core_lock, curr_core),
per_cpu(cpc_core_lock_flags, curr_core));
- write_cpc_cl_other(core << CPC_Cx_OTHER_CORENUM_SHF);
+ write_cpc_cl_other(core << __ffs(CPC_Cx_OTHER_CORENUM));
/*
* Ensure the core-other region reflects the appropriate core &
@@ -106,7 +105,7 @@ void mips_cpc_unlock_other(void)
/* Systems with CM >= 3 lock the CPC via mips_cm_lock_other */
return;
- curr_core = current_cpu_data.core;
+ curr_core = cpu_core(&current_cpu_data);
spin_unlock_irqrestore(&per_cpu(cpc_core_lock, curr_core),
per_cpu(cpc_core_lock_flags, curr_core));
preempt_enable();
diff --git a/arch/mips/kernel/mips-r2-to-r6-emul.c b/arch/mips/kernel/mips-r2-to-r6-emul.c
index ae64c8f56a8c..eb18b186e858 100644
--- a/arch/mips/kernel/mips-r2-to-r6-emul.c
+++ b/arch/mips/kernel/mips-r2-to-r6-emul.c
@@ -46,9 +46,11 @@
#define LL "ll "
#define SC "sc "
-DEFINE_PER_CPU(struct mips_r2_emulator_stats, mipsr2emustats);
-DEFINE_PER_CPU(struct mips_r2_emulator_stats, mipsr2bdemustats);
-DEFINE_PER_CPU(struct mips_r2br_emulator_stats, mipsr2bremustats);
+#ifdef CONFIG_DEBUG_FS
+static DEFINE_PER_CPU(struct mips_r2_emulator_stats, mipsr2emustats);
+static DEFINE_PER_CPU(struct mips_r2_emulator_stats, mipsr2bdemustats);
+static DEFINE_PER_CPU(struct mips_r2br_emulator_stats, mipsr2bremustats);
+#endif
extern const unsigned int fpucondbit[8];
@@ -600,7 +602,7 @@ static int ddivu_func(struct pt_regs *regs, u32 ir)
}
/* R6 removed instructions for the SPECIAL opcode */
-static struct r2_decoder_table spec_op_table[] = {
+static const struct r2_decoder_table spec_op_table[] = {
{ 0xfc1ff83f, 0x00000008, jr_func },
{ 0xfc00ffff, 0x00000018, mult_func },
{ 0xfc00ffff, 0x00000019, multu_func },
@@ -867,7 +869,7 @@ static int dclo_func(struct pt_regs *regs, u32 ir)
}
/* R6 removed instructions for the SPECIAL2 opcode */
-static struct r2_decoder_table spec2_op_table[] = {
+static const struct r2_decoder_table spec2_op_table[] = {
{ 0xfc00ffff, 0x70000000, madd_func },
{ 0xfc00ffff, 0x70000001, maddu_func },
{ 0xfc0007ff, 0x70000002, mul_func },
@@ -881,9 +883,9 @@ static struct r2_decoder_table spec2_op_table[] = {
};
static inline int mipsr2_find_op_func(struct pt_regs *regs, u32 inst,
- struct r2_decoder_table *table)
+ const struct r2_decoder_table *table)
{
- struct r2_decoder_table *p;
+ const struct r2_decoder_table *p;
int err;
for (p = table; p->func; p++) {
diff --git a/arch/mips/kernel/octeon_switch.S b/arch/mips/kernel/octeon_switch.S
index 3375745b9198..e42113fe2762 100644
--- a/arch/mips/kernel/octeon_switch.S
+++ b/arch/mips/kernel/octeon_switch.S
@@ -10,12 +10,13 @@
* Copyright (C) 2000 MIPS Technologies, Inc.
* written by Carsten Langgaard, carstenl@mips.com
*/
+#include <asm/asm.h>
+#include <asm/export.h>
+#include <asm/asm-offsets.h>
+#include <asm/mipsregs.h>
+#include <asm/regdef.h>
+#include <asm/stackframe.h>
-#define USE_ALTERNATE_RESUME_IMPL 1
- .set push
- .set arch=mips64r2
-#include "r4k_switch.S"
- .set pop
/*
* task_struct *resume(task_struct *prev, task_struct *next,
* struct thread_info *next_ti)
diff --git a/arch/mips/kernel/pm-cps.c b/arch/mips/kernel/pm-cps.c
index d99416094ba9..4655017f2377 100644
--- a/arch/mips/kernel/pm-cps.c
+++ b/arch/mips/kernel/pm-cps.c
@@ -17,8 +17,7 @@
#include <asm/cacheflush.h>
#include <asm/cacheops.h>
#include <asm/idle.h>
-#include <asm/mips-cm.h>
-#include <asm/mips-cpc.h>
+#include <asm/mips-cps.h>
#include <asm/mipsmtregs.h>
#include <asm/pm.h>
#include <asm/pm-cps.h>
@@ -49,7 +48,7 @@ static DEFINE_PER_CPU_READ_MOSTLY(cps_nc_entry_fn[CPS_PM_STATE_COUNT],
nc_asm_enter);
/* Bitmap indicating which states are supported by the system */
-DECLARE_BITMAP(state_support, CPS_PM_STATE_COUNT);
+static DECLARE_BITMAP(state_support, CPS_PM_STATE_COUNT);
/*
* Indicates the number of coupled VPEs ready to operate in a non-coherent
@@ -114,7 +113,7 @@ static void coupled_barrier(atomic_t *a, unsigned online)
int cps_pm_enter_state(enum cps_pm_state state)
{
unsigned cpu = smp_processor_id();
- unsigned core = current_cpu_data.core;
+ unsigned core = cpu_core(&current_cpu_data);
unsigned online, left;
cpumask_t *coupled_mask = this_cpu_ptr(&online_coupled);
u32 *core_ready_count, *nc_core_ready_count;
@@ -486,7 +485,7 @@ static void *cps_gen_entry_code(unsigned cpu, enum cps_pm_state state)
* defined by the interAptiv & proAptiv SUMs as ensuring that the
* operation resulting from the preceding store is complete.
*/
- uasm_i_addiu(&p, t0, zero, 1 << cpu_data[cpu].core);
+ uasm_i_addiu(&p, t0, zero, 1 << cpu_core(&cpu_data[cpu]));
uasm_i_sw(&p, t0, 0, r_pcohctl);
uasm_i_lw(&p, t0, 0, r_pcohctl);
@@ -569,8 +568,8 @@ static void *cps_gen_entry_code(unsigned cpu, enum cps_pm_state state)
* rest will just be performing a rather unusual nop.
*/
uasm_i_addiu(&p, t0, zero, mips_cm_revision() < CM_REV_CM3
- ? CM_GCR_Cx_COHERENCE_COHDOMAINEN_MSK
- : CM3_GCR_Cx_COHERENCE_COHEN_MSK);
+ ? CM_GCR_Cx_COHERENCE_COHDOMAINEN
+ : CM3_GCR_Cx_COHERENCE_COHEN);
uasm_i_sw(&p, t0, 0, r_pcohctl);
uasm_i_lw(&p, t0, 0, r_pcohctl);
@@ -640,7 +639,7 @@ out_err:
static int cps_pm_online_cpu(unsigned int cpu)
{
enum cps_pm_state state;
- unsigned core = cpu_data[cpu].core;
+ unsigned core = cpu_core(&cpu_data[cpu]);
void *entry_fn, *core_rc;
for (state = CPS_PM_NC_WAIT; state < CPS_PM_STATE_COUNT; state++) {
@@ -692,7 +691,7 @@ static int __init cps_pm_init(void)
/* Detect whether a CPC is present */
if (mips_cpc_present()) {
/* Detect whether clock gating is implemented */
- if (read_cpc_cl_stat_conf() & CPC_Cx_STAT_CONF_CLKGAT_IMPL_MSK)
+ if (read_cpc_cl_stat_conf() & CPC_Cx_STAT_CONF_CLKGAT_IMPL)
set_bit(CPS_PM_CLOCK_GATED, state_support);
else
pr_warn("pm-cps: CPC does not support clock gating\n");
diff --git a/arch/mips/kernel/proc.c b/arch/mips/kernel/proc.c
index 70604c753aa4..bd9bf528f19b 100644
--- a/arch/mips/kernel/proc.c
+++ b/arch/mips/kernel/proc.c
@@ -134,13 +134,13 @@ static int show_cpuinfo(struct seq_file *m, void *v)
seq_printf(m, "kscratch registers\t: %d\n",
hweight8(cpu_data[n].kscratch_mask));
seq_printf(m, "package\t\t\t: %d\n", cpu_data[n].package);
- seq_printf(m, "core\t\t\t: %d\n", cpu_data[n].core);
+ seq_printf(m, "core\t\t\t: %d\n", cpu_core(&cpu_data[n]));
#if defined(CONFIG_MIPS_MT_SMP) || defined(CONFIG_CPU_MIPSR6)
if (cpu_has_mipsmt)
- seq_printf(m, "VPE\t\t\t: %d\n", cpu_data[n].vpe_id);
+ seq_printf(m, "VPE\t\t\t: %d\n", cpu_vpe_id(&cpu_data[n]));
else if (cpu_has_vp)
- seq_printf(m, "VP\t\t\t: %d\n", cpu_data[n].vpe_id);
+ seq_printf(m, "VP\t\t\t: %d\n", cpu_vpe_id(&cpu_data[n]));
#endif
sprintf(fmt, "VCE%%c exceptions\t\t: %s\n",
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index 5351e1f3950d..c5ff6bfe2825 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -208,13 +208,13 @@ static inline int is_ra_save_ins(union mips_instruction *ip, int *poff)
*
* microMIPS is way more fun...
*/
- if (mm_insn_16bit(ip->halfword[1])) {
+ if (mm_insn_16bit(ip->word >> 16)) {
switch (ip->mm16_r5_format.opcode) {
case mm_swsp16_op:
if (ip->mm16_r5_format.rt != 31)
return 0;
- *poff = ip->mm16_r5_format.simmediate;
+ *poff = ip->mm16_r5_format.imm;
*poff = (*poff << 2) / sizeof(ulong);
return 1;
@@ -287,7 +287,7 @@ static inline int is_jump_ins(union mips_instruction *ip)
*
* microMIPS is kind of more fun...
*/
- if (mm_insn_16bit(ip->halfword[1])) {
+ if (mm_insn_16bit(ip->word >> 16)) {
if ((ip->mm16_r5_format.opcode == mm_pool16c_op &&
(ip->mm16_r5_format.rt & mm_jr16_op) == mm_jr16_op))
return 1;
@@ -313,9 +313,11 @@ static inline int is_jump_ins(union mips_instruction *ip)
#endif
}
-static inline int is_sp_move_ins(union mips_instruction *ip)
+static inline int is_sp_move_ins(union mips_instruction *ip, int *frame_size)
{
#ifdef CONFIG_CPU_MICROMIPS
+ unsigned short tmp;
+
/*
* addiusp -imm
* addius5 sp,-imm
@@ -324,21 +326,40 @@ static inline int is_sp_move_ins(union mips_instruction *ip)
*
* microMIPS is not more fun...
*/
- if (mm_insn_16bit(ip->halfword[1])) {
- return (ip->mm16_r3_format.opcode == mm_pool16d_op &&
- ip->mm16_r3_format.simmediate && mm_addiusp_func) ||
- (ip->mm16_r5_format.opcode == mm_pool16d_op &&
- ip->mm16_r5_format.rt == 29);
+ if (mm_insn_16bit(ip->word >> 16)) {
+ if (ip->mm16_r3_format.opcode == mm_pool16d_op &&
+ ip->mm16_r3_format.simmediate & mm_addiusp_func) {
+ tmp = ip->mm_b0_format.simmediate >> 1;
+ tmp = ((tmp & 0x1ff) ^ 0x100) - 0x100;
+ if ((tmp + 2) < 4) /* 0x0,0x1,0x1fe,0x1ff are special */
+ tmp ^= 0x100;
+ *frame_size = -(signed short)(tmp << 2);
+ return 1;
+ }
+ if (ip->mm16_r5_format.opcode == mm_pool16d_op &&
+ ip->mm16_r5_format.rt == 29) {
+ tmp = ip->mm16_r5_format.imm >> 1;
+ *frame_size = -(signed short)(tmp & 0xf);
+ return 1;
+ }
+ return 0;
}
- return ip->mm_i_format.opcode == mm_addiu32_op &&
- ip->mm_i_format.rt == 29 && ip->mm_i_format.rs == 29;
+ if (ip->mm_i_format.opcode == mm_addiu32_op &&
+ ip->mm_i_format.rt == 29 && ip->mm_i_format.rs == 29) {
+ *frame_size = -ip->i_format.simmediate;
+ return 1;
+ }
#else
/* addiu/daddiu sp,sp,-imm */
if (ip->i_format.rs != 29 || ip->i_format.rt != 29)
return 0;
- if (ip->i_format.opcode == addiu_op || ip->i_format.opcode == daddiu_op)
+
+ if (ip->i_format.opcode == addiu_op ||
+ ip->i_format.opcode == daddiu_op) {
+ *frame_size = -ip->i_format.simmediate;
return 1;
+ }
#endif
return 0;
}
@@ -348,7 +369,9 @@ static int get_frame_info(struct mips_frame_info *info)
bool is_mmips = IS_ENABLED(CONFIG_CPU_MICROMIPS);
union mips_instruction insn, *ip, *ip_end;
const unsigned int max_insns = 128;
+ unsigned int last_insn_size = 0;
unsigned int i;
+ bool saw_jump = false;
info->pc_offset = -1;
info->frame_size = 0;
@@ -359,47 +382,44 @@ static int get_frame_info(struct mips_frame_info *info)
ip_end = (void *)ip + info->func_size;
- for (i = 0; i < max_insns && ip < ip_end; i++, ip++) {
+ for (i = 0; i < max_insns && ip < ip_end; i++) {
+ ip = (void *)ip + last_insn_size;
if (is_mmips && mm_insn_16bit(ip->halfword[0])) {
- insn.halfword[0] = 0;
- insn.halfword[1] = ip->halfword[0];
+ insn.word = ip->halfword[0] << 16;
+ last_insn_size = 2;
} else if (is_mmips) {
- insn.halfword[0] = ip->halfword[1];
- insn.halfword[1] = ip->halfword[0];
+ insn.word = ip->halfword[0] << 16 | ip->halfword[1];
+ last_insn_size = 4;
} else {
insn.word = ip->word;
+ last_insn_size = 4;
}
- if (is_jump_ins(&insn))
- break;
-
if (!info->frame_size) {
- if (is_sp_move_ins(&insn))
- {
-#ifdef CONFIG_CPU_MICROMIPS
- if (mm_insn_16bit(ip->halfword[0]))
- {
- unsigned short tmp;
-
- if (ip->halfword[0] & mm_addiusp_func)
- {
- tmp = (((ip->halfword[0] >> 1) & 0x1ff) << 2);
- info->frame_size = -(signed short)(tmp | ((tmp & 0x100) ? 0xfe00 : 0));
- } else {
- tmp = (ip->halfword[0] >> 1);
- info->frame_size = -(signed short)(tmp & 0xf);
- }
- ip = (void *) &ip->halfword[1];
- ip--;
- } else
-#endif
- info->frame_size = - ip->i_format.simmediate;
- }
+ is_sp_move_ins(&insn, &info->frame_size);
+ continue;
+ } else if (!saw_jump && is_jump_ins(ip)) {
+ /*
+ * If we see a jump instruction, we are finished
+ * with the frame save.
+ *
+ * Some functions can have a shortcut return at
+ * the beginning of the function, so don't start
+ * looking for jump instruction until we see the
+ * frame setup.
+ *
+ * The RA save instruction can get put into the
+ * delay slot of the jump instruction, so look
+ * at the next instruction, too.
+ */
+ saw_jump = true;
continue;
}
if (info->pc_offset == -1 &&
is_ra_save_ins(&insn, &info->pc_offset))
break;
+ if (saw_jump)
+ break;
}
if (info->frame_size && info->pc_offset >= 0) /* nested */
return 0;
diff --git a/arch/mips/kernel/r2300_fpu.S b/arch/mips/kernel/r2300_fpu.S
index 918f2f6d3861..3062ba66c563 100644
--- a/arch/mips/kernel/r2300_fpu.S
+++ b/arch/mips/kernel/r2300_fpu.S
@@ -12,7 +12,9 @@
* Copyright (c) 1998 Harald Koerfgen
*/
#include <asm/asm.h>
+#include <asm/asmmacro.h>
#include <asm/errno.h>
+#include <asm/export.h>
#include <asm/fpregdef.h>
#include <asm/mipsregs.h>
#include <asm/asm-offsets.h>
@@ -31,9 +33,85 @@
PTR 9b+4,bad_stack; \
.previous
- .set noreorder
.set mips1
+/*
+ * Save a thread's fp context.
+ */
+LEAF(_save_fp)
+EXPORT_SYMBOL(_save_fp)
+ fpu_save_single a0, t1 # clobbers t1
+ jr ra
+ END(_save_fp)
+
+/*
+ * Restore a thread's fp context.
+ */
+LEAF(_restore_fp)
+ fpu_restore_single a0, t1 # clobbers t1
+ jr ra
+ END(_restore_fp)
+
+/*
+ * Load the FPU with signalling NANS. This bit pattern we're using has
+ * the property that no matter whether considered as single or as double
+ * precision represents signaling NANS.
+ *
+ * The value to initialize fcr31 to comes in $a0.
+ */
+
+ .set push
+ SET_HARDFLOAT
+
+LEAF(_init_fpu)
+ mfc0 t0, CP0_STATUS
+ li t1, ST0_CU1
+ or t0, t1
+ mtc0 t0, CP0_STATUS
+
+ ctc1 a0, fcr31
+
+ li t0, -1
+
+ mtc1 t0, $f0
+ mtc1 t0, $f1
+ mtc1 t0, $f2
+ mtc1 t0, $f3
+ mtc1 t0, $f4
+ mtc1 t0, $f5
+ mtc1 t0, $f6
+ mtc1 t0, $f7
+ mtc1 t0, $f8
+ mtc1 t0, $f9
+ mtc1 t0, $f10
+ mtc1 t0, $f11
+ mtc1 t0, $f12
+ mtc1 t0, $f13
+ mtc1 t0, $f14
+ mtc1 t0, $f15
+ mtc1 t0, $f16
+ mtc1 t0, $f17
+ mtc1 t0, $f18
+ mtc1 t0, $f19
+ mtc1 t0, $f20
+ mtc1 t0, $f21
+ mtc1 t0, $f22
+ mtc1 t0, $f23
+ mtc1 t0, $f24
+ mtc1 t0, $f25
+ mtc1 t0, $f26
+ mtc1 t0, $f27
+ mtc1 t0, $f28
+ mtc1 t0, $f29
+ mtc1 t0, $f30
+ mtc1 t0, $f31
+ jr ra
+ END(_init_fpu)
+
+ .set pop
+
+ .set noreorder
+
/**
* _save_fp_context() - save FP context from the FPU
* @a0 - pointer to fpregs field of sigcontext
diff --git a/arch/mips/kernel/r2300_switch.S b/arch/mips/kernel/r2300_switch.S
index 1049eeafd97d..e57703b1de50 100644
--- a/arch/mips/kernel/r2300_switch.S
+++ b/arch/mips/kernel/r2300_switch.S
@@ -26,12 +26,6 @@
.align 5
/*
- * Offset to the current process status flags, the first 32 bytes of the
- * stack are not used.
- */
-#define ST_OFF (_THREAD_SIZE - 32 - PT_SIZE + PT_STATUS)
-
-/*
* task_struct *resume(task_struct *prev, task_struct *next,
* struct thread_info *next_ti)
*/
@@ -68,78 +62,3 @@ LEAF(resume)
move v0, a0
jr ra
END(resume)
-
-/*
- * Save a thread's fp context.
- */
-LEAF(_save_fp)
-EXPORT_SYMBOL(_save_fp)
- fpu_save_single a0, t1 # clobbers t1
- jr ra
- END(_save_fp)
-
-/*
- * Restore a thread's fp context.
- */
-LEAF(_restore_fp)
- fpu_restore_single a0, t1 # clobbers t1
- jr ra
- END(_restore_fp)
-
-/*
- * Load the FPU with signalling NANS. This bit pattern we're using has
- * the property that no matter whether considered as single or as double
- * precision represents signaling NANS.
- *
- * The value to initialize fcr31 to comes in $a0.
- */
-
- .set push
- SET_HARDFLOAT
-
-LEAF(_init_fpu)
- mfc0 t0, CP0_STATUS
- li t1, ST0_CU1
- or t0, t1
- mtc0 t0, CP0_STATUS
-
- ctc1 a0, fcr31
-
- li t0, -1
-
- mtc1 t0, $f0
- mtc1 t0, $f1
- mtc1 t0, $f2
- mtc1 t0, $f3
- mtc1 t0, $f4
- mtc1 t0, $f5
- mtc1 t0, $f6
- mtc1 t0, $f7
- mtc1 t0, $f8
- mtc1 t0, $f9
- mtc1 t0, $f10
- mtc1 t0, $f11
- mtc1 t0, $f12
- mtc1 t0, $f13
- mtc1 t0, $f14
- mtc1 t0, $f15
- mtc1 t0, $f16
- mtc1 t0, $f17
- mtc1 t0, $f18
- mtc1 t0, $f19
- mtc1 t0, $f20
- mtc1 t0, $f21
- mtc1 t0, $f22
- mtc1 t0, $f23
- mtc1 t0, $f24
- mtc1 t0, $f25
- mtc1 t0, $f26
- mtc1 t0, $f27
- mtc1 t0, $f28
- mtc1 t0, $f29
- mtc1 t0, $f30
- mtc1 t0, $f31
- jr ra
- END(_init_fpu)
-
- .set pop
diff --git a/arch/mips/kernel/r4k_fpu.S b/arch/mips/kernel/r4k_fpu.S
index 56d86b09c917..0a83b1708b3c 100644
--- a/arch/mips/kernel/r4k_fpu.S
+++ b/arch/mips/kernel/r4k_fpu.S
@@ -15,6 +15,7 @@
#include <asm/asm.h>
#include <asm/asmmacro.h>
#include <asm/errno.h>
+#include <asm/export.h>
#include <asm/fpregdef.h>
#include <asm/mipsregs.h>
#include <asm/asm-offsets.h>
@@ -34,6 +35,201 @@
.previous
.endm
+/*
+ * Save a thread's fp context.
+ */
+LEAF(_save_fp)
+EXPORT_SYMBOL(_save_fp)
+#if defined(CONFIG_64BIT) || defined(CONFIG_CPU_MIPS32_R2) || \
+ defined(CONFIG_CPU_MIPS32_R6)
+ mfc0 t0, CP0_STATUS
+#endif
+ fpu_save_double a0 t0 t1 # clobbers t1
+ jr ra
+ END(_save_fp)
+
+/*
+ * Restore a thread's fp context.
+ */
+LEAF(_restore_fp)
+#if defined(CONFIG_64BIT) || defined(CONFIG_CPU_MIPS32_R2) || \
+ defined(CONFIG_CPU_MIPS32_R6)
+ mfc0 t0, CP0_STATUS
+#endif
+ fpu_restore_double a0 t0 t1 # clobbers t1
+ jr ra
+ END(_restore_fp)
+
+#ifdef CONFIG_CPU_HAS_MSA
+
+/*
+ * Save a thread's MSA vector context.
+ */
+LEAF(_save_msa)
+EXPORT_SYMBOL(_save_msa)
+ msa_save_all a0
+ jr ra
+ END(_save_msa)
+
+/*
+ * Restore a thread's MSA vector context.
+ */
+LEAF(_restore_msa)
+ msa_restore_all a0
+ jr ra
+ END(_restore_msa)
+
+LEAF(_init_msa_upper)
+ msa_init_all_upper
+ jr ra
+ END(_init_msa_upper)
+
+#endif
+
+/*
+ * Load the FPU with signalling NANS. This bit pattern we're using has
+ * the property that no matter whether considered as single or as double
+ * precision represents signaling NANS.
+ *
+ * The value to initialize fcr31 to comes in $a0.
+ */
+
+ .set push
+ SET_HARDFLOAT
+
+LEAF(_init_fpu)
+ mfc0 t0, CP0_STATUS
+ li t1, ST0_CU1
+ or t0, t1
+ mtc0 t0, CP0_STATUS
+ enable_fpu_hazard
+
+ ctc1 a0, fcr31
+
+ li t1, -1 # SNaN
+
+#ifdef CONFIG_64BIT
+ sll t0, t0, 5
+ bgez t0, 1f # 16 / 32 register mode?
+
+ dmtc1 t1, $f1
+ dmtc1 t1, $f3
+ dmtc1 t1, $f5
+ dmtc1 t1, $f7
+ dmtc1 t1, $f9
+ dmtc1 t1, $f11
+ dmtc1 t1, $f13
+ dmtc1 t1, $f15
+ dmtc1 t1, $f17
+ dmtc1 t1, $f19
+ dmtc1 t1, $f21
+ dmtc1 t1, $f23
+ dmtc1 t1, $f25
+ dmtc1 t1, $f27
+ dmtc1 t1, $f29
+ dmtc1 t1, $f31
+1:
+#endif
+
+#ifdef CONFIG_CPU_MIPS32
+ mtc1 t1, $f0
+ mtc1 t1, $f1
+ mtc1 t1, $f2
+ mtc1 t1, $f3
+ mtc1 t1, $f4
+ mtc1 t1, $f5
+ mtc1 t1, $f6
+ mtc1 t1, $f7
+ mtc1 t1, $f8
+ mtc1 t1, $f9
+ mtc1 t1, $f10
+ mtc1 t1, $f11
+ mtc1 t1, $f12
+ mtc1 t1, $f13
+ mtc1 t1, $f14
+ mtc1 t1, $f15
+ mtc1 t1, $f16
+ mtc1 t1, $f17
+ mtc1 t1, $f18
+ mtc1 t1, $f19
+ mtc1 t1, $f20
+ mtc1 t1, $f21
+ mtc1 t1, $f22
+ mtc1 t1, $f23
+ mtc1 t1, $f24
+ mtc1 t1, $f25
+ mtc1 t1, $f26
+ mtc1 t1, $f27
+ mtc1 t1, $f28
+ mtc1 t1, $f29
+ mtc1 t1, $f30
+ mtc1 t1, $f31
+
+#if defined(CONFIG_CPU_MIPS32_R2) || defined(CONFIG_CPU_MIPS32_R6)
+ .set push
+ .set MIPS_ISA_LEVEL_RAW
+ .set fp=64
+ sll t0, t0, 5 # is Status.FR set?
+ bgez t0, 1f # no: skip setting upper 32b
+
+ mthc1 t1, $f0
+ mthc1 t1, $f1
+ mthc1 t1, $f2
+ mthc1 t1, $f3
+ mthc1 t1, $f4
+ mthc1 t1, $f5
+ mthc1 t1, $f6
+ mthc1 t1, $f7
+ mthc1 t1, $f8
+ mthc1 t1, $f9
+ mthc1 t1, $f10
+ mthc1 t1, $f11
+ mthc1 t1, $f12
+ mthc1 t1, $f13
+ mthc1 t1, $f14
+ mthc1 t1, $f15
+ mthc1 t1, $f16
+ mthc1 t1, $f17
+ mthc1 t1, $f18
+ mthc1 t1, $f19
+ mthc1 t1, $f20
+ mthc1 t1, $f21
+ mthc1 t1, $f22
+ mthc1 t1, $f23
+ mthc1 t1, $f24
+ mthc1 t1, $f25
+ mthc1 t1, $f26
+ mthc1 t1, $f27
+ mthc1 t1, $f28
+ mthc1 t1, $f29
+ mthc1 t1, $f30
+ mthc1 t1, $f31
+1: .set pop
+#endif /* CONFIG_CPU_MIPS32_R2 || CONFIG_CPU_MIPS32_R6 */
+#else
+ .set MIPS_ISA_ARCH_LEVEL_RAW
+ dmtc1 t1, $f0
+ dmtc1 t1, $f2
+ dmtc1 t1, $f4
+ dmtc1 t1, $f6
+ dmtc1 t1, $f8
+ dmtc1 t1, $f10
+ dmtc1 t1, $f12
+ dmtc1 t1, $f14
+ dmtc1 t1, $f16
+ dmtc1 t1, $f18
+ dmtc1 t1, $f20
+ dmtc1 t1, $f22
+ dmtc1 t1, $f24
+ dmtc1 t1, $f26
+ dmtc1 t1, $f28
+ dmtc1 t1, $f30
+#endif
+ jr ra
+ END(_init_fpu)
+
+ .set pop /* SET_HARDFLOAT */
+
.set noreorder
/**
diff --git a/arch/mips/kernel/r4k_switch.S b/arch/mips/kernel/r4k_switch.S
index 7b386d54fd65..17cf9341c1cf 100644
--- a/arch/mips/kernel/r4k_switch.S
+++ b/arch/mips/kernel/r4k_switch.S
@@ -12,8 +12,6 @@
*/
#include <asm/asm.h>
#include <asm/cachectl.h>
-#include <asm/export.h>
-#include <asm/fpregdef.h>
#include <asm/mipsregs.h>
#include <asm/asm-offsets.h>
#include <asm/regdef.h>
@@ -22,10 +20,6 @@
#include <asm/asmmacro.h>
-/* preprocessor replaces the fp in ".set fp=64" with $30 otherwise */
-#undef fp
-
-#ifndef USE_ALTERNATE_RESUME_IMPL
/*
* task_struct *resume(task_struct *prev, task_struct *next,
* struct thread_info *next_ti)
@@ -63,200 +57,3 @@
move v0, a0
jr ra
END(resume)
-
-#endif /* USE_ALTERNATE_RESUME_IMPL */
-
-/*
- * Save a thread's fp context.
- */
-LEAF(_save_fp)
-EXPORT_SYMBOL(_save_fp)
-#if defined(CONFIG_64BIT) || defined(CONFIG_CPU_MIPS32_R2) || \
- defined(CONFIG_CPU_MIPS32_R6)
- mfc0 t0, CP0_STATUS
-#endif
- fpu_save_double a0 t0 t1 # clobbers t1
- jr ra
- END(_save_fp)
-
-/*
- * Restore a thread's fp context.
- */
-LEAF(_restore_fp)
-#if defined(CONFIG_64BIT) || defined(CONFIG_CPU_MIPS32_R2) || \
- defined(CONFIG_CPU_MIPS32_R6)
- mfc0 t0, CP0_STATUS
-#endif
- fpu_restore_double a0 t0 t1 # clobbers t1
- jr ra
- END(_restore_fp)
-
-#ifdef CONFIG_CPU_HAS_MSA
-
-/*
- * Save a thread's MSA vector context.
- */
-LEAF(_save_msa)
-EXPORT_SYMBOL(_save_msa)
- msa_save_all a0
- jr ra
- END(_save_msa)
-
-/*
- * Restore a thread's MSA vector context.
- */
-LEAF(_restore_msa)
- msa_restore_all a0
- jr ra
- END(_restore_msa)
-
-LEAF(_init_msa_upper)
- msa_init_all_upper
- jr ra
- END(_init_msa_upper)
-
-#endif
-
-/*
- * Load the FPU with signalling NANS. This bit pattern we're using has
- * the property that no matter whether considered as single or as double
- * precision represents signaling NANS.
- *
- * The value to initialize fcr31 to comes in $a0.
- */
-
- .set push
- SET_HARDFLOAT
-
-LEAF(_init_fpu)
- mfc0 t0, CP0_STATUS
- li t1, ST0_CU1
- or t0, t1
- mtc0 t0, CP0_STATUS
- enable_fpu_hazard
-
- ctc1 a0, fcr31
-
- li t1, -1 # SNaN
-
-#ifdef CONFIG_64BIT
- sll t0, t0, 5
- bgez t0, 1f # 16 / 32 register mode?
-
- dmtc1 t1, $f1
- dmtc1 t1, $f3
- dmtc1 t1, $f5
- dmtc1 t1, $f7
- dmtc1 t1, $f9
- dmtc1 t1, $f11
- dmtc1 t1, $f13
- dmtc1 t1, $f15
- dmtc1 t1, $f17
- dmtc1 t1, $f19
- dmtc1 t1, $f21
- dmtc1 t1, $f23
- dmtc1 t1, $f25
- dmtc1 t1, $f27
- dmtc1 t1, $f29
- dmtc1 t1, $f31
-1:
-#endif
-
-#ifdef CONFIG_CPU_MIPS32
- mtc1 t1, $f0
- mtc1 t1, $f1
- mtc1 t1, $f2
- mtc1 t1, $f3
- mtc1 t1, $f4
- mtc1 t1, $f5
- mtc1 t1, $f6
- mtc1 t1, $f7
- mtc1 t1, $f8
- mtc1 t1, $f9
- mtc1 t1, $f10
- mtc1 t1, $f11
- mtc1 t1, $f12
- mtc1 t1, $f13
- mtc1 t1, $f14
- mtc1 t1, $f15
- mtc1 t1, $f16
- mtc1 t1, $f17
- mtc1 t1, $f18
- mtc1 t1, $f19
- mtc1 t1, $f20
- mtc1 t1, $f21
- mtc1 t1, $f22
- mtc1 t1, $f23
- mtc1 t1, $f24
- mtc1 t1, $f25
- mtc1 t1, $f26
- mtc1 t1, $f27
- mtc1 t1, $f28
- mtc1 t1, $f29
- mtc1 t1, $f30
- mtc1 t1, $f31
-
-#if defined(CONFIG_CPU_MIPS32_R2) || defined(CONFIG_CPU_MIPS32_R6)
- .set push
- .set MIPS_ISA_LEVEL_RAW
- .set fp=64
- sll t0, t0, 5 # is Status.FR set?
- bgez t0, 1f # no: skip setting upper 32b
-
- mthc1 t1, $f0
- mthc1 t1, $f1
- mthc1 t1, $f2
- mthc1 t1, $f3
- mthc1 t1, $f4
- mthc1 t1, $f5
- mthc1 t1, $f6
- mthc1 t1, $f7
- mthc1 t1, $f8
- mthc1 t1, $f9
- mthc1 t1, $f10
- mthc1 t1, $f11
- mthc1 t1, $f12
- mthc1 t1, $f13
- mthc1 t1, $f14
- mthc1 t1, $f15
- mthc1 t1, $f16
- mthc1 t1, $f17
- mthc1 t1, $f18
- mthc1 t1, $f19
- mthc1 t1, $f20
- mthc1 t1, $f21
- mthc1 t1, $f22
- mthc1 t1, $f23
- mthc1 t1, $f24
- mthc1 t1, $f25
- mthc1 t1, $f26
- mthc1 t1, $f27
- mthc1 t1, $f28
- mthc1 t1, $f29
- mthc1 t1, $f30
- mthc1 t1, $f31
-1: .set pop
-#endif /* CONFIG_CPU_MIPS32_R2 || CONFIG_CPU_MIPS32_R6 */
-#else
- .set MIPS_ISA_ARCH_LEVEL_RAW
- dmtc1 t1, $f0
- dmtc1 t1, $f2
- dmtc1 t1, $f4
- dmtc1 t1, $f6
- dmtc1 t1, $f8
- dmtc1 t1, $f10
- dmtc1 t1, $f12
- dmtc1 t1, $f14
- dmtc1 t1, $f16
- dmtc1 t1, $f18
- dmtc1 t1, $f20
- dmtc1 t1, $f22
- dmtc1 t1, $f24
- dmtc1 t1, $f26
- dmtc1 t1, $f28
- dmtc1 t1, $f30
-#endif
- jr ra
- END(_init_fpu)
-
- .set pop /* SET_HARDFLOAT */
diff --git a/arch/mips/kernel/r6000_fpu.S b/arch/mips/kernel/r6000_fpu.S
deleted file mode 100644
index 9cc7bfab3419..000000000000
--- a/arch/mips/kernel/r6000_fpu.S
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * r6000_fpu.S: Save/restore floating point context for signal handlers.
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 1996 by Ralf Baechle
- *
- * Multi-arch abstraction and asm macros for easier reading:
- * Copyright (C) 1996 David S. Miller (davem@davemloft.net)
- */
-#include <asm/asm.h>
-#include <asm/fpregdef.h>
-#include <asm/mipsregs.h>
-#include <asm/asm-offsets.h>
-#include <asm/regdef.h>
-
- .set noreorder
- .set mips2
- .set push
- SET_HARDFLOAT
-
-/**
- * _save_fp_context() - save FP context from the FPU
- * @a0 - pointer to fpregs field of sigcontext
- * @a1 - pointer to fpc_csr field of sigcontext
- *
- * Save FP context, including the 32 FP data registers and the FP
- * control & status register, from the FPU to signal context.
- */
- LEAF(_save_fp_context)
- mfc0 t0,CP0_STATUS
- sll t0,t0,2
- bgez t0,1f
- nop
-
- cfc1 t1,fcr31
- /* Store the 16 double precision registers */
- sdc1 $f0,0(a0)
- sdc1 $f2,16(a0)
- sdc1 $f4,32(a0)
- sdc1 $f6,48(a0)
- sdc1 $f8,64(a0)
- sdc1 $f10,80(a0)
- sdc1 $f12,96(a0)
- sdc1 $f14,112(a0)
- sdc1 $f16,128(a0)
- sdc1 $f18,144(a0)
- sdc1 $f20,160(a0)
- sdc1 $f22,176(a0)
- sdc1 $f24,192(a0)
- sdc1 $f26,208(a0)
- sdc1 $f28,224(a0)
- sdc1 $f30,240(a0)
- jr ra
- sw t0,(a1)
-1: jr ra
- nop
- END(_save_fp_context)
-
-/**
- * _restore_fp_context() - restore FP context to the FPU
- * @a0 - pointer to fpregs field of sigcontext
- * @a1 - pointer to fpc_csr field of sigcontext
- *
- * Restore FP context, including the 32 FP data registers and the FP
- * control & status register, from signal context to the FPU.
- */
- LEAF(_restore_fp_context)
- mfc0 t0,CP0_STATUS
- sll t0,t0,2
-
- bgez t0,1f
- lw t0,(a1)
- /* Restore the 16 double precision registers */
- ldc1 $f0,0(a0)
- ldc1 $f2,16(a0)
- ldc1 $f4,32(a0)
- ldc1 $f6,48(a0)
- ldc1 $f8,64(a0)
- ldc1 $f10,80(a0)
- ldc1 $f12,96(a0)
- ldc1 $f14,112(a0)
- ldc1 $f16,128(a0)
- ldc1 $f18,144(a0)
- ldc1 $f20,160(a0)
- ldc1 $f22,176(a0)
- ldc1 $f24,192(a0)
- ldc1 $f26,208(a0)
- ldc1 $f28,224(a0)
- ldc1 $f30,240(a0)
- jr ra
- ctc1 t0,fcr31
-1: jr ra
- nop
- END(_restore_fp_context)
-
- .set pop /* SET_HARDFLOAT */
diff --git a/arch/mips/kernel/smp-bmips.c b/arch/mips/kernel/smp-bmips.c
index 1b070a76fcdd..406072e26752 100644
--- a/arch/mips/kernel/smp-bmips.c
+++ b/arch/mips/kernel/smp-bmips.c
@@ -179,7 +179,7 @@ static void bmips_prepare_cpus(unsigned int max_cpus)
/*
* Tell the hardware to boot CPUx - runs on CPU0
*/
-static void bmips_boot_secondary(int cpu, struct task_struct *idle)
+static int bmips_boot_secondary(int cpu, struct task_struct *idle)
{
bmips_smp_boot_sp = __KSTK_TOS(idle);
bmips_smp_boot_gp = (unsigned long)task_thread_info(idle);
@@ -231,6 +231,8 @@ static void bmips_boot_secondary(int cpu, struct task_struct *idle)
}
cpumask_set_cpu(cpu, &bmips_booted_mask);
}
+
+ return 0;
}
/*
@@ -245,7 +247,7 @@ static void bmips_init_secondary(void)
break;
case CPU_BMIPS5000:
write_c0_brcm_action(ACTION_CLR_IPI(smp_processor_id(), 0));
- current_cpu_data.core = (read_c0_brcm_config() >> 25) & 3;
+ cpu_set_core(&current_cpu_data, (read_c0_brcm_config() >> 25) & 3);
break;
}
}
@@ -409,7 +411,7 @@ void __ref play_dead(void)
#endif /* CONFIG_HOTPLUG_CPU */
-struct plat_smp_ops bmips43xx_smp_ops = {
+const struct plat_smp_ops bmips43xx_smp_ops = {
.smp_setup = bmips_smp_setup,
.prepare_cpus = bmips_prepare_cpus,
.boot_secondary = bmips_boot_secondary,
@@ -423,7 +425,7 @@ struct plat_smp_ops bmips43xx_smp_ops = {
#endif
};
-struct plat_smp_ops bmips5000_smp_ops = {
+const struct plat_smp_ops bmips5000_smp_ops = {
.smp_setup = bmips_smp_setup,
.prepare_cpus = bmips_prepare_cpus,
.boot_secondary = bmips_boot_secondary,
diff --git a/arch/mips/kernel/smp-cmp.c b/arch/mips/kernel/smp-cmp.c
index 76923349b4fe..05295a4909f1 100644
--- a/arch/mips/kernel/smp-cmp.c
+++ b/arch/mips/kernel/smp-cmp.c
@@ -24,7 +24,6 @@
#include <linux/cpumask.h>
#include <linux/interrupt.h>
#include <linux/compiler.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/atomic.h>
#include <asm/cacheflush.h>
@@ -78,7 +77,7 @@ static void cmp_smp_finish(void)
* __KSTK_TOS(idle) is apparently the stack pointer
* (unsigned long)idle->thread_info the gp
*/
-static void cmp_boot_secondary(int cpu, struct task_struct *idle)
+static int cmp_boot_secondary(int cpu, struct task_struct *idle)
{
struct thread_info *gp = task_thread_info(idle);
unsigned long sp = __KSTK_TOS(idle);
@@ -95,6 +94,7 @@ static void cmp_boot_secondary(int cpu, struct task_struct *idle)
#endif
amon_cpu_start(cpu, pc, sp, (unsigned long)gp, a0);
+ return 0;
}
/*
@@ -148,7 +148,7 @@ void __init cmp_prepare_cpus(unsigned int max_cpus)
}
-struct plat_smp_ops cmp_smp_ops = {
+const struct plat_smp_ops cmp_smp_ops = {
.send_ipi_single = mips_smp_send_ipi_single,
.send_ipi_mask = mips_smp_send_ipi_mask,
.init_secondary = cmp_init_secondary,
diff --git a/arch/mips/kernel/smp-cps.c b/arch/mips/kernel/smp-cps.c
index f832e99ad4c3..0063122c85da 100644
--- a/arch/mips/kernel/smp-cps.c
+++ b/arch/mips/kernel/smp-cps.c
@@ -11,7 +11,6 @@
#include <linux/cpu.h>
#include <linux/delay.h>
#include <linux/io.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/sched/task_stack.h>
#include <linux/sched/hotplug.h>
#include <linux/slab.h>
@@ -19,8 +18,7 @@
#include <linux/types.h>
#include <asm/bcache.h>
-#include <asm/mips-cm.h>
-#include <asm/mips-cpc.h>
+#include <asm/mips-cps.h>
#include <asm/mips_mt.h>
#include <asm/mipsregs.h>
#include <asm/pm-cps.h>
@@ -41,55 +39,58 @@ static int __init setup_nothreads(char *s)
}
early_param("nothreads", setup_nothreads);
-static unsigned core_vpe_count(unsigned core)
+static unsigned core_vpe_count(unsigned int cluster, unsigned core)
{
- unsigned cfg;
-
if (threads_disabled)
return 1;
- if ((!IS_ENABLED(CONFIG_MIPS_MT_SMP) || !cpu_has_mipsmt)
- && (!IS_ENABLED(CONFIG_CPU_MIPSR6) || !cpu_has_vp))
- return 1;
-
- mips_cm_lock_other(core, 0);
- cfg = read_gcr_co_config() & CM_GCR_Cx_CONFIG_PVPE_MSK;
- mips_cm_unlock_other();
- return (cfg >> CM_GCR_Cx_CONFIG_PVPE_SHF) + 1;
+ return mips_cps_numvps(cluster, core);
}
static void __init cps_smp_setup(void)
{
- unsigned int ncores, nvpes, core_vpes;
+ unsigned int nclusters, ncores, nvpes, core_vpes;
unsigned long core_entry;
- int c, v;
+ int cl, c, v;
/* Detect & record VPE topology */
- ncores = mips_cm_numcores();
+ nvpes = 0;
+ nclusters = mips_cps_numclusters();
pr_info("%s topology ", cpu_has_mips_r6 ? "VP" : "VPE");
- for (c = nvpes = 0; c < ncores; c++) {
- core_vpes = core_vpe_count(c);
- pr_cont("%c%u", c ? ',' : '{', core_vpes);
-
- /* Use the number of VPEs in core 0 for smp_num_siblings */
- if (!c)
- smp_num_siblings = core_vpes;
-
- for (v = 0; v < min_t(int, core_vpes, NR_CPUS - nvpes); v++) {
- cpu_data[nvpes + v].core = c;
-#if defined(CONFIG_MIPS_MT_SMP) || defined(CONFIG_CPU_MIPSR6)
- cpu_data[nvpes + v].vpe_id = v;
-#endif
+ for (cl = 0; cl < nclusters; cl++) {
+ if (cl > 0)
+ pr_cont(",");
+ pr_cont("{");
+
+ ncores = mips_cps_numcores(cl);
+ for (c = 0; c < ncores; c++) {
+ core_vpes = core_vpe_count(cl, c);
+
+ if (c > 0)
+ pr_cont(",");
+ pr_cont("%u", core_vpes);
+
+ /* Use the number of VPEs in cluster 0 core 0 for smp_num_siblings */
+ if (!cl && !c)
+ smp_num_siblings = core_vpes;
+
+ for (v = 0; v < min_t(int, core_vpes, NR_CPUS - nvpes); v++) {
+ cpu_set_cluster(&cpu_data[nvpes + v], cl);
+ cpu_set_core(&cpu_data[nvpes + v], c);
+ cpu_set_vpe_id(&cpu_data[nvpes + v], v);
+ }
+
+ nvpes += core_vpes;
}
- nvpes += core_vpes;
+ pr_cont("}");
}
- pr_cont("} total %u\n", nvpes);
+ pr_cont(" total %u\n", nvpes);
/* Indicate present CPUs (CPU being synonymous with VPE) */
for (v = 0; v < min_t(unsigned, nvpes, NR_CPUS); v++) {
- set_cpu_possible(v, true);
- set_cpu_present(v, true);
+ set_cpu_possible(v, cpu_cluster(&cpu_data[v]) == 0);
+ set_cpu_present(v, cpu_cluster(&cpu_data[v]) == 0);
__cpu_number_map[v] = v;
__cpu_logical_map[v] = v;
}
@@ -121,7 +122,7 @@ static void __init cps_smp_setup(void)
static void __init cps_prepare_cpus(unsigned int max_cpus)
{
unsigned ncores, core_vpes, c, cca;
- bool cca_unsuitable;
+ bool cca_unsuitable, cores_limited;
u32 *entry_code;
mips_mt_set_cpuoptions();
@@ -141,19 +142,22 @@ static void __init cps_prepare_cpus(unsigned int max_cpus)
}
/* Warn the user if the CCA prevents multi-core */
- ncores = mips_cm_numcores();
- if ((cca_unsuitable || cpu_has_dc_aliases) && ncores > 1) {
+ cores_limited = false;
+ if (cca_unsuitable || cpu_has_dc_aliases) {
+ for_each_present_cpu(c) {
+ if (cpus_are_siblings(smp_processor_id(), c))
+ continue;
+
+ set_cpu_present(c, false);
+ cores_limited = true;
+ }
+ }
+ if (cores_limited)
pr_warn("Using only one core due to %s%s%s\n",
cca_unsuitable ? "unsuitable CCA" : "",
(cca_unsuitable && cpu_has_dc_aliases) ? " & " : "",
cpu_has_dc_aliases ? "dcache aliasing" : "");
- for_each_present_cpu(c) {
- if (cpu_data[c].core)
- set_cpu_present(c, false);
- }
- }
-
/*
* Patch the start of mips_cps_core_entry to provide:
*
@@ -168,6 +172,7 @@ static void __init cps_prepare_cpus(unsigned int max_cpus)
__sync();
/* Allocate core boot configuration structs */
+ ncores = mips_cps_numcores(0);
mips_cps_core_bootcfg = kcalloc(ncores, sizeof(*mips_cps_core_bootcfg),
GFP_KERNEL);
if (!mips_cps_core_bootcfg) {
@@ -177,7 +182,7 @@ static void __init cps_prepare_cpus(unsigned int max_cpus)
/* Allocate VPE boot configuration structs */
for (c = 0; c < ncores; c++) {
- core_vpes = core_vpe_count(c);
+ core_vpes = core_vpe_count(0, c);
mips_cps_core_bootcfg[c].vpe_config = kcalloc(core_vpes,
sizeof(*mips_cps_core_bootcfg[c].vpe_config),
GFP_KERNEL);
@@ -189,7 +194,7 @@ static void __init cps_prepare_cpus(unsigned int max_cpus)
}
/* Mark this CPU as booted */
- atomic_set(&mips_cps_core_bootcfg[current_cpu_data.core].vpe_mask,
+ atomic_set(&mips_cps_core_bootcfg[cpu_core(&current_cpu_data)].vpe_mask,
1 << cpu_vpe_id(&current_cpu_data));
return;
@@ -212,11 +217,11 @@ err_out:
static void boot_core(unsigned int core, unsigned int vpe_id)
{
- u32 access, stat, seq_state;
+ u32 stat, seq_state;
unsigned timeout;
/* Select the appropriate core */
- mips_cm_lock_other(core, 0);
+ mips_cm_lock_other(0, core, 0, CM_GCR_Cx_OTHER_BLOCK_LOCAL);
/* Set its reset vector */
write_gcr_co_reset_base(CKSEG1ADDR((unsigned long)mips_cps_core_entry));
@@ -225,12 +230,10 @@ static void boot_core(unsigned int core, unsigned int vpe_id)
write_gcr_co_coherence(0);
/* Start it with the legacy memory map and exception base */
- write_gcr_co_reset_ext_base(CM_GCR_RESET_EXT_BASE_UEB);
+ write_gcr_co_reset_ext_base(CM_GCR_Cx_RESET_EXT_BASE_UEB);
/* Ensure the core can access the GCRs */
- access = read_gcr_access();
- access |= 1 << (CM_GCR_ACCESS_ACCESSEN_SHF + core);
- write_gcr_access(access);
+ set_gcr_access(1 << core);
if (mips_cpc_present()) {
/* Reset the core */
@@ -253,7 +256,8 @@ static void boot_core(unsigned int core, unsigned int vpe_id)
timeout = 100;
while (true) {
stat = read_cpc_co_stat_conf();
- seq_state = stat & CPC_Cx_STAT_CONF_SEQSTATE_MSK;
+ seq_state = stat & CPC_Cx_STAT_CONF_SEQSTATE;
+ seq_state >>= __ffs(CPC_Cx_STAT_CONF_SEQSTATE);
/* U6 == coherent execution, ie. the core is up */
if (seq_state == CPC_Cx_STAT_CONF_SEQSTATE_U6)
@@ -285,15 +289,15 @@ static void boot_core(unsigned int core, unsigned int vpe_id)
static void remote_vpe_boot(void *dummy)
{
- unsigned core = current_cpu_data.core;
+ unsigned core = cpu_core(&current_cpu_data);
struct core_boot_config *core_cfg = &mips_cps_core_bootcfg[core];
mips_cps_boot_vpes(core_cfg, cpu_vpe_id(&current_cpu_data));
}
-static void cps_boot_secondary(int cpu, struct task_struct *idle)
+static int cps_boot_secondary(int cpu, struct task_struct *idle)
{
- unsigned core = cpu_data[cpu].core;
+ unsigned core = cpu_core(&cpu_data[cpu]);
unsigned vpe_id = cpu_vpe_id(&cpu_data[cpu]);
struct core_boot_config *core_cfg = &mips_cps_core_bootcfg[core];
struct vpe_boot_config *vpe_cfg = &core_cfg->vpe_config[vpe_id];
@@ -301,6 +305,10 @@ static void cps_boot_secondary(int cpu, struct task_struct *idle)
unsigned int remote;
int err;
+ /* We don't yet support booting CPUs in other clusters */
+ if (cpu_cluster(&cpu_data[cpu]) != cpu_cluster(&current_cpu_data))
+ return -ENOSYS;
+
vpe_cfg->pc = (unsigned long)&smp_bootstrap;
vpe_cfg->sp = __KSTK_TOS(idle);
vpe_cfg->gp = (unsigned long)task_thread_info(idle);
@@ -316,16 +324,16 @@ static void cps_boot_secondary(int cpu, struct task_struct *idle)
}
if (cpu_has_vp) {
- mips_cm_lock_other(core, vpe_id);
+ mips_cm_lock_other(0, core, vpe_id, CM_GCR_Cx_OTHER_BLOCK_LOCAL);
core_entry = CKSEG1ADDR((unsigned long)mips_cps_core_entry);
write_gcr_co_reset_base(core_entry);
mips_cm_unlock_other();
}
- if (core != current_cpu_data.core) {
+ if (!cpus_are_siblings(cpu, smp_processor_id())) {
/* Boot a VPE on another powered up core */
for (remote = 0; remote < NR_CPUS; remote++) {
- if (cpu_data[remote].core != core)
+ if (!cpus_are_siblings(cpu, remote))
continue;
if (cpu_online(remote))
break;
@@ -349,6 +357,7 @@ static void cps_boot_secondary(int cpu, struct task_struct *idle)
mips_cps_boot_vpes(core_cfg, vpe_id);
out:
preempt_enable();
+ return 0;
}
static void cps_init_secondary(void)
@@ -358,7 +367,7 @@ static void cps_init_secondary(void)
dmt();
if (mips_cm_revision() >= CM_REV_CM3) {
- unsigned ident = gic_read_local_vp_id();
+ unsigned int ident = read_gic_vl_ident();
/*
* Ensure that our calculation of the VP ID matches up with
@@ -402,7 +411,7 @@ static int cps_cpu_disable(void)
if (!cps_pm_support_state(CPS_PM_POWER_GATED))
return -EINVAL;
- core_cfg = &mips_cps_core_bootcfg[current_cpu_data.core];
+ core_cfg = &mips_cps_core_bootcfg[cpu_core(&current_cpu_data)];
atomic_sub(1 << cpu_vpe_id(&current_cpu_data), &core_cfg->vpe_mask);
smp_mb__after_atomic();
set_cpu_online(cpu, false);
@@ -424,15 +433,17 @@ void play_dead(void)
local_irq_disable();
idle_task_exit();
cpu = smp_processor_id();
- core = cpu_data[cpu].core;
+ core = cpu_core(&cpu_data[cpu]);
cpu_death = CPU_DEATH_POWER;
pr_debug("CPU%d going offline\n", cpu);
if (cpu_has_mipsmt || cpu_has_vp) {
+ core = cpu_core(&cpu_data[cpu]);
+
/* Look for another online VPE within the core */
for_each_online_cpu(cpu_death_sibling) {
- if (cpu_data[cpu_death_sibling].core != core)
+ if (!cpus_are_siblings(cpu, cpu_death_sibling))
continue;
/*
@@ -488,7 +499,7 @@ static void wait_for_sibling_halt(void *ptr_cpu)
static void cps_cpu_die(unsigned int cpu)
{
- unsigned core = cpu_data[cpu].core;
+ unsigned core = cpu_core(&cpu_data[cpu]);
unsigned int vpe_id = cpu_vpe_id(&cpu_data[cpu]);
ktime_t fail_time;
unsigned stat;
@@ -519,10 +530,11 @@ static void cps_cpu_die(unsigned int cpu)
*/
fail_time = ktime_add_ms(ktime_get(), 2000);
do {
- mips_cm_lock_other(core, 0);
+ mips_cm_lock_other(0, core, 0, CM_GCR_Cx_OTHER_BLOCK_LOCAL);
mips_cpc_lock_other(core);
stat = read_cpc_co_stat_conf();
- stat &= CPC_Cx_STAT_CONF_SEQSTATE_MSK;
+ stat &= CPC_Cx_STAT_CONF_SEQSTATE;
+ stat >>= __ffs(CPC_Cx_STAT_CONF_SEQSTATE);
mips_cpc_unlock_other();
mips_cm_unlock_other();
@@ -544,7 +556,7 @@ static void cps_cpu_die(unsigned int cpu)
*/
if (WARN(ktime_after(ktime_get(), fail_time),
"CPU%u hasn't powered down, seq. state %u\n",
- cpu, stat >> CPC_Cx_STAT_CONF_SEQSTATE_SHF))
+ cpu, stat))
break;
} while (1);
@@ -562,7 +574,7 @@ static void cps_cpu_die(unsigned int cpu)
panic("Failed to call remote sibling CPU\n");
} else if (cpu_has_vp) {
do {
- mips_cm_lock_other(core, vpe_id);
+ mips_cm_lock_other(0, core, vpe_id, CM_GCR_Cx_OTHER_BLOCK_LOCAL);
stat = read_cpc_co_vp_running();
mips_cm_unlock_other();
} while (stat & (1 << vpe_id));
@@ -571,7 +583,7 @@ static void cps_cpu_die(unsigned int cpu)
#endif /* CONFIG_HOTPLUG_CPU */
-static struct plat_smp_ops cps_smp_ops = {
+static const struct plat_smp_ops cps_smp_ops = {
.smp_setup = cps_smp_setup,
.prepare_cpus = cps_prepare_cpus,
.boot_secondary = cps_boot_secondary,
@@ -587,7 +599,7 @@ static struct plat_smp_ops cps_smp_ops = {
bool mips_cps_smp_in_use(void)
{
- extern struct plat_smp_ops *mp_ops;
+ extern const struct plat_smp_ops *mp_ops;
return mp_ops == &cps_smp_ops;
}
@@ -599,7 +611,7 @@ int register_cps_smp_ops(void)
}
/* check we have a GIC - we need one for IPIs */
- if (!(read_gcr_gic_status() & CM_GCR_GIC_STATUS_EX_MSK)) {
+ if (!(read_gcr_gic_status() & CM_GCR_GIC_STATUS_EX)) {
pr_warn("MIPS CPS SMP unable to proceed without a GIC\n");
return -ENODEV;
}
diff --git a/arch/mips/kernel/smp-mt.c b/arch/mips/kernel/smp-mt.c
index ed6b4df583ea..94ab3276b48c 100644
--- a/arch/mips/kernel/smp-mt.c
+++ b/arch/mips/kernel/smp-mt.c
@@ -21,7 +21,6 @@
#include <linux/sched.h>
#include <linux/cpumask.h>
#include <linux/interrupt.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/compiler.h>
#include <linux/sched/task_stack.h>
#include <linux/smp.h>
@@ -36,6 +35,7 @@
#include <asm/mipsregs.h>
#include <asm/mipsmtregs.h>
#include <asm/mips_mt.h>
+#include <asm/mips-cps.h>
static void __init smvp_copy_vpe_config(void)
{
@@ -83,7 +83,7 @@ static unsigned int __init smvp_vpe_init(unsigned int tc, unsigned int mvpconf0,
if (tc != 0)
smvp_copy_vpe_config();
- cpu_data[ncpu].vpe_id = tc;
+ cpu_set_vpe_id(&cpu_data[ncpu], tc);
return ncpu;
}
@@ -118,14 +118,12 @@ static void __init smvp_tc_init(unsigned int tc, unsigned int mvpconf0)
static void vsmp_init_secondary(void)
{
-#ifdef CONFIG_MIPS_GIC
/* This is Malta specific: IPI,performance and timer interrupts */
- if (gic_present)
+ if (mips_gic_present())
change_c0_status(ST0_IM, STATUSF_IP2 | STATUSF_IP3 |
STATUSF_IP4 | STATUSF_IP5 |
STATUSF_IP6 | STATUSF_IP7);
else
-#endif
change_c0_status(ST0_IM, STATUSF_IP0 | STATUSF_IP1 |
STATUSF_IP6 | STATUSF_IP7);
}
@@ -152,7 +150,7 @@ static void vsmp_smp_finish(void)
* (unsigned long)idle->thread_info the gp
* assumes a 1:1 mapping of TC => VPE
*/
-static void vsmp_boot_secondary(int cpu, struct task_struct *idle)
+static int vsmp_boot_secondary(int cpu, struct task_struct *idle)
{
struct thread_info *gp = task_thread_info(idle);
dvpe();
@@ -184,6 +182,8 @@ static void vsmp_boot_secondary(int cpu, struct task_struct *idle)
clear_c0_mvpcontrol(MVPCONTROL_VPC);
evpe(EVPE_ENABLE);
+
+ return 0;
}
/*
@@ -239,7 +239,7 @@ static void __init vsmp_prepare_cpus(unsigned int max_cpus)
mips_mt_set_cpuoptions();
}
-struct plat_smp_ops vsmp_smp_ops = {
+const struct plat_smp_ops vsmp_smp_ops = {
.send_ipi_single = mips_smp_send_ipi_single,
.send_ipi_mask = mips_smp_send_ipi_mask,
.init_secondary = vsmp_init_secondary,
diff --git a/arch/mips/kernel/smp-up.c b/arch/mips/kernel/smp-up.c
index 17878d71ef2b..525d3196f793 100644
--- a/arch/mips/kernel/smp-up.c
+++ b/arch/mips/kernel/smp-up.c
@@ -39,8 +39,9 @@ static void up_smp_finish(void)
/*
* Firmware CPU startup hook
*/
-static void up_boot_secondary(int cpu, struct task_struct *idle)
+static int up_boot_secondary(int cpu, struct task_struct *idle)
{
+ return 0;
}
static void __init up_smp_setup(void)
@@ -63,7 +64,7 @@ static void up_cpu_die(unsigned int cpu)
}
#endif
-struct plat_smp_ops up_smp_ops = {
+const struct plat_smp_ops up_smp_ops = {
.send_ipi_single = up_send_ipi_single,
.send_ipi_mask = up_send_ipi_mask,
.init_secondary = up_init_secondary,
diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c
index c7cbddfcdc3b..bbe19b64def5 100644
--- a/arch/mips/kernel/smp.c
+++ b/arch/mips/kernel/smp.c
@@ -96,8 +96,7 @@ static inline void set_cpu_sibling_map(int cpu)
if (smp_num_siblings > 1) {
for_each_cpu(i, &cpu_sibling_setup_map) {
- if (cpu_data[cpu].package == cpu_data[i].package &&
- cpu_data[cpu].core == cpu_data[i].core) {
+ if (cpus_are_siblings(cpu, i)) {
cpumask_set_cpu(i, &cpu_sibling_map[cpu]);
cpumask_set_cpu(cpu, &cpu_sibling_map[i]);
}
@@ -134,8 +133,7 @@ void calculate_cpu_foreign_map(void)
for_each_online_cpu(i) {
core_present = 0;
for_each_cpu(k, &temp_foreign_map)
- if (cpu_data[i].package == cpu_data[k].package &&
- cpu_data[i].core == cpu_data[k].core)
+ if (cpus_are_siblings(i, k))
core_present = 1;
if (!core_present)
cpumask_set_cpu(i, &temp_foreign_map);
@@ -146,10 +144,10 @@ void calculate_cpu_foreign_map(void)
&temp_foreign_map, &cpu_sibling_map[i]);
}
-struct plat_smp_ops *mp_ops;
+const struct plat_smp_ops *mp_ops;
EXPORT_SYMBOL(mp_ops);
-void register_smp_ops(struct plat_smp_ops *ops)
+void register_smp_ops(const struct plat_smp_ops *ops)
{
if (mp_ops)
printk(KERN_WARNING "Overriding previously set SMP ops\n");
@@ -186,13 +184,13 @@ void mips_smp_send_ipi_mask(const struct cpumask *mask, unsigned int action)
if (mips_cpc_present()) {
for_each_cpu(cpu, mask) {
- core = cpu_data[cpu].core;
-
- if (core == current_cpu_data.core)
+ if (cpus_are_siblings(cpu, smp_processor_id()))
continue;
+ core = cpu_core(&cpu_data[cpu]);
+
while (!cpumask_test_cpu(cpu, &cpu_coherent_mask)) {
- mips_cm_lock_other(core, 0);
+ mips_cm_lock_other_cpu(cpu, CM_GCR_Cx_OTHER_BLOCK_LOCAL);
mips_cpc_lock_other(core);
write_cpc_co_cmd(CPC_Cx_CMD_PWRUP);
mips_cpc_unlock_other();
@@ -441,7 +439,11 @@ void smp_prepare_boot_cpu(void)
int __cpu_up(unsigned int cpu, struct task_struct *tidle)
{
- mp_ops->boot_secondary(cpu, tidle);
+ int err;
+
+ err = mp_ops->boot_secondary(cpu, tidle);
+ if (err)
+ return err;
/*
* We must check for timeout here, as the CPU will not be marked
diff --git a/arch/mips/kernel/time.c b/arch/mips/kernel/time.c
index c036157fb891..a6ebc8135112 100644
--- a/arch/mips/kernel/time.c
+++ b/arch/mips/kernel/time.c
@@ -72,20 +72,6 @@ EXPORT_SYMBOL(perf_irq);
unsigned int mips_hpt_frequency;
EXPORT_SYMBOL_GPL(mips_hpt_frequency);
-/*
- * This function exists in order to cause an error due to a duplicate
- * definition if platform code should have its own implementation. The hook
- * to use instead is plat_time_init. plat_time_init does not receive the
- * irqaction pointer argument anymore. This is because any function which
- * initializes an interrupt timer now takes care of its own request_irq rsp.
- * setup_irq calls and each clock_event_device should use its own
- * struct irqrequest.
- */
-void __init plat_timer_setup(void)
-{
- BUG();
-}
-
static __init int cpu_has_mfc0_count_bug(void)
{
switch (current_cpu_type()) {
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c
index 2bf414993347..5669d3b8bd38 100644
--- a/arch/mips/kernel/traps.c
+++ b/arch/mips/kernel/traps.c
@@ -50,9 +50,8 @@
#include <asm/fpu.h>
#include <asm/fpu_emulator.h>
#include <asm/idle.h>
-#include <asm/mips-cm.h>
+#include <asm/mips-cps.h>
#include <asm/mips-r2-to-r6-emul.h>
-#include <asm/mips-cm.h>
#include <asm/mipsregs.h>
#include <asm/mipsmtregs.h>
#include <asm/module.h>
@@ -734,8 +733,7 @@ void force_fcr31_sig(unsigned long fcr31, void __user *fault_addr,
si.si_code = FPE_FLTUND;
else if (fcr31 & FPU_CSR_INE_X)
si.si_code = FPE_FLTRES;
- else
- return; /* Broken hardware? */
+
force_sig_info(SIGFPE, &si, tsk);
}
@@ -1673,7 +1671,7 @@ static inline void parity_protection_init(void)
/* Probe L2 ECC support */
gcr_ectl = read_gcr_err_control();
- if (!(gcr_ectl & CM_GCR_ERR_CONTROL_L2_ECC_SUPPORT_MSK) ||
+ if (!(gcr_ectl & CM_GCR_ERR_CONTROL_L2_ECC_SUPPORT) ||
!(cp0_ectl & ERRCTL_PE)) {
/*
* One of L1 or L2 ECC checking isn't supported,
@@ -1693,12 +1691,12 @@ static inline void parity_protection_init(void)
/* Configure L2 ECC checking */
if (l2parity)
- gcr_ectl |= CM_GCR_ERR_CONTROL_L2_ECC_EN_MSK;
+ gcr_ectl |= CM_GCR_ERR_CONTROL_L2_ECC_EN;
else
- gcr_ectl &= ~CM_GCR_ERR_CONTROL_L2_ECC_EN_MSK;
+ gcr_ectl &= ~CM_GCR_ERR_CONTROL_L2_ECC_EN;
write_gcr_err_control(gcr_ectl);
gcr_ectl = read_gcr_err_control();
- gcr_ectl &= CM_GCR_ERR_CONTROL_L2_ECC_EN_MSK;
+ gcr_ectl &= CM_GCR_ERR_CONTROL_L2_ECC_EN;
WARN_ON(!!gcr_ectl != l2parity);
pr_info("Cache parity protection %sabled\n",
@@ -2428,21 +2426,6 @@ void __init trap_init(void)
set_except_vector(EXCCODE_TR, handle_tr);
set_except_vector(EXCCODE_MSAFPE, handle_msa_fpe);
- if (current_cpu_type() == CPU_R6000 ||
- current_cpu_type() == CPU_R6000A) {
- /*
- * The R6000 is the only R-series CPU that features a machine
- * check exception (similar to the R4000 cache error) and
- * unaligned ldc1/sdc1 exception. The handlers have not been
- * written yet. Well, anyway there is no R6000 machine on the
- * current list of targets for Linux/MIPS.
- * (Duh, crap, there is someone with a triple R6k machine)
- */
- //set_except_vector(14, handle_mc);
- //set_except_vector(15, handle_ndc);
- }
-
-
if (board_nmi_handler_setup)
board_nmi_handler_setup();
diff --git a/arch/mips/kernel/unaligned.c b/arch/mips/kernel/unaligned.c
index 5eaf2578ac04..2d0b912f9e3e 100644
--- a/arch/mips/kernel/unaligned.c
+++ b/arch/mips/kernel/unaligned.c
@@ -1378,7 +1378,7 @@ sigill:
const int reg16to32[] = { 16, 17, 2, 3, 4, 5, 6, 7 };
/* Recode table from 16-bit STORE register notation to 32-bit GPR. */
-const int reg16to32st[] = { 0, 17, 2, 3, 4, 5, 6, 7 };
+static const int reg16to32st[] = { 0, 17, 2, 3, 4, 5, 6, 7 };
static void emulate_load_store_microMIPS(struct pt_regs *regs,
void __user *addr)
diff --git a/arch/mips/kernel/vdso.c b/arch/mips/kernel/vdso.c
index 093517e85a6c..019035d7225c 100644
--- a/arch/mips/kernel/vdso.c
+++ b/arch/mips/kernel/vdso.c
@@ -13,13 +13,13 @@
#include <linux/err.h>
#include <linux/init.h>
#include <linux/ioport.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/mm.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/timekeeper_internal.h>
#include <asm/abi.h>
+#include <asm/mips-cps.h>
#include <asm/vdso.h>
/* Kernel-provided data used by the VDSO. */
@@ -99,9 +99,8 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
{
struct mips_vdso_image *image = current->thread.abi->vdso;
struct mm_struct *mm = current->mm;
- unsigned long gic_size, vvar_size, size, base, data_addr, vdso_addr;
+ unsigned long gic_size, vvar_size, size, base, data_addr, vdso_addr, gic_pfn;
struct vm_area_struct *vma;
- struct resource gic_res;
int ret;
if (down_write_killable(&mm->mmap_sem))
@@ -125,7 +124,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
* only map a page even though the total area is 64K, as we only need
* the counter registers at the start.
*/
- gic_size = gic_present ? PAGE_SIZE : 0;
+ gic_size = mips_gic_present() ? PAGE_SIZE : 0;
vvar_size = gic_size + PAGE_SIZE;
size = vvar_size + image->size;
@@ -148,13 +147,9 @@ int arch_setup_additional_pages(struct linux_binprm *bprm, int uses_interp)
/* Map GIC user page. */
if (gic_size) {
- ret = gic_get_usm_range(&gic_res);
- if (ret)
- goto out;
+ gic_pfn = virt_to_phys(mips_gic_base + MIPS_GIC_USER_OFS) >> PAGE_SHIFT;
- ret = io_remap_pfn_range(vma, base,
- gic_res.start >> PAGE_SHIFT,
- gic_size,
+ ret = io_remap_pfn_range(vma, base, gic_pfn, gic_size,
pgprot_noncached(PAGE_READONLY));
if (ret)
goto out;
diff --git a/arch/mips/kvm/mips.c b/arch/mips/kvm/mips.c
index bce2a6431430..d535edc01434 100644
--- a/arch/mips/kvm/mips.c
+++ b/arch/mips/kvm/mips.c
@@ -514,7 +514,7 @@ int kvm_vcpu_ioctl_interrupt(struct kvm_vcpu *vcpu,
dvcpu->arch.wait = 0;
- if (swait_active(&dvcpu->wq))
+ if (swq_has_sleeper(&dvcpu->wq))
swake_up(&dvcpu->wq);
return 0;
@@ -1179,7 +1179,7 @@ static void kvm_mips_comparecount_func(unsigned long data)
kvm_mips_callbacks->queue_timer_int(vcpu);
vcpu->arch.wait = 0;
- if (swait_active(&vcpu->wq))
+ if (swq_has_sleeper(&vcpu->wq))
swake_up(&vcpu->wq);
}
diff --git a/arch/mips/lantiq/Kconfig b/arch/mips/lantiq/Kconfig
index 177769dbb0e8..35bc69b78268 100644
--- a/arch/mips/lantiq/Kconfig
+++ b/arch/mips/lantiq/Kconfig
@@ -17,6 +17,8 @@ config SOC_XWAY
bool "XWAY"
select SOC_TYPE_XWAY
select HW_HAS_PCI
+ select MFD_SYSCON
+ select MFD_CORE
config SOC_FALCON
bool "FALCON"
diff --git a/arch/mips/lantiq/falcon/reset.c b/arch/mips/lantiq/falcon/reset.c
index 7a535d72f541..058b85578cf7 100644
--- a/arch/mips/lantiq/falcon/reset.c
+++ b/arch/mips/lantiq/falcon/reset.c
@@ -15,27 +15,14 @@
#include <lantiq_soc.h>
-/* CPU0 Reset Source Register */
-#define SYS1_CPU0RS 0x0040
-/* reset cause mask */
-#define CPU0RS_MASK 0x0003
-/* CPU0 Boot Mode Register */
-#define SYS1_BM 0x00a0
-/* boot mode mask */
-#define BM_MASK 0x0005
-
-/* allow platform code to find out what surce we booted from */
+/*
+ * Dummy implementation. Used to allow platform code to find out what
+ * source was booted from
+ */
unsigned char ltq_boot_select(void)
{
- return ltq_sys1_r32(SYS1_BM) & BM_MASK;
-}
-
-/* allow the watchdog driver to find out what the boot reason was */
-int ltq_reset_cause(void)
-{
- return ltq_sys1_r32(SYS1_CPU0RS) & CPU0RS_MASK;
+ return BS_SPI;
}
-EXPORT_SYMBOL_GPL(ltq_reset_cause);
#define BOOT_REG_BASE (KSEG1 | 0x1F200000)
#define BOOT_PW1_REG (BOOT_REG_BASE | 0x20)
diff --git a/arch/mips/lantiq/irq.c b/arch/mips/lantiq/irq.c
index 33728b7af426..f0bc3312ed11 100644
--- a/arch/mips/lantiq/irq.c
+++ b/arch/mips/lantiq/irq.c
@@ -61,10 +61,6 @@
/* we have a cascade of 8 irqs */
#define MIPS_CPU_IRQ_CASCADE 8
-#ifdef CONFIG_MIPS_MT_SMP
-int gic_present;
-#endif
-
static int exin_avail;
static u32 ltq_eiu_irq[MAX_EIU];
static void __iomem *ltq_icu_membase[MAX_IM];
diff --git a/arch/mips/lantiq/prom.c b/arch/mips/lantiq/prom.c
index 96773bed8a8a..9ff7ccde9de0 100644
--- a/arch/mips/lantiq/prom.c
+++ b/arch/mips/lantiq/prom.c
@@ -117,7 +117,7 @@ void __init prom_init(void)
int __init plat_of_setup(void)
{
- return __dt_register_buses(soc_info.compatible, "simple-bus");
+ return of_platform_default_populate(NULL, NULL, NULL);
}
arch_initcall(plat_of_setup);
diff --git a/arch/mips/lantiq/xway/Makefile b/arch/mips/lantiq/xway/Makefile
index a2edc538f477..fbb0747c70b7 100644
--- a/arch/mips/lantiq/xway/Makefile
+++ b/arch/mips/lantiq/xway/Makefile
@@ -1,5 +1,3 @@
-obj-y := prom.o sysctrl.o clk.o reset.o dma.o gptu.o dcdc.o
+obj-y := prom.o sysctrl.o clk.o dma.o gptu.o dcdc.o
obj-y += vmmc.o
-
-obj-$(CONFIG_XRX200_PHY_FW) += xrx200_phy_fw.o
diff --git a/arch/mips/lantiq/xway/reset.c b/arch/mips/lantiq/xway/reset.c
deleted file mode 100644
index 83fd65d76e81..000000000000
--- a/arch/mips/lantiq/xway/reset.c
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
- * Copyright (C) 2010 John Crispin <john@phrozen.org>
- * Copyright (C) 2013-2015 Lantiq Beteiligungs-GmbH & Co.KG
- */
-
-#include <linux/init.h>
-#include <linux/io.h>
-#include <linux/ioport.h>
-#include <linux/pm.h>
-#include <linux/export.h>
-#include <linux/delay.h>
-#include <linux/of_address.h>
-#include <linux/of_platform.h>
-#include <linux/reset-controller.h>
-
-#include <asm/reboot.h>
-
-#include <lantiq_soc.h>
-
-#include "../prom.h"
-
-/* reset request register */
-#define RCU_RST_REQ 0x0010
-/* reset status register */
-#define RCU_RST_STAT 0x0014
-/* vr9 gphy registers */
-#define RCU_GFS_ADD0_XRX200 0x0020
-#define RCU_GFS_ADD1_XRX200 0x0068
-/* xRX300 gphy registers */
-#define RCU_GFS_ADD0_XRX300 0x0020
-#define RCU_GFS_ADD1_XRX300 0x0058
-#define RCU_GFS_ADD2_XRX300 0x00AC
-/* xRX330 gphy registers */
-#define RCU_GFS_ADD0_XRX330 0x0020
-#define RCU_GFS_ADD1_XRX330 0x0058
-#define RCU_GFS_ADD2_XRX330 0x00AC
-#define RCU_GFS_ADD3_XRX330 0x0264
-
-/* xbar BE flag */
-#define RCU_AHB_ENDIAN 0x004C
-#define RCU_VR9_BE_AHB1S 0x00000008
-
-/* reboot bit */
-#define RCU_RD_GPHY0_XRX200 BIT(31)
-#define RCU_RD_SRST BIT(30)
-#define RCU_RD_GPHY1_XRX200 BIT(29)
-/* xRX300 bits */
-#define RCU_RD_GPHY0_XRX300 BIT(31)
-#define RCU_RD_GPHY1_XRX300 BIT(29)
-#define RCU_RD_GPHY2_XRX300 BIT(28)
-/* xRX330 bits */
-#define RCU_RD_GPHY0_XRX330 BIT(31)
-#define RCU_RD_GPHY1_XRX330 BIT(29)
-#define RCU_RD_GPHY2_XRX330 BIT(28)
-#define RCU_RD_GPHY3_XRX330 BIT(10)
-
-/* reset cause */
-#define RCU_STAT_SHIFT 26
-/* boot selection */
-#define RCU_BOOT_SEL(x) ((x >> 18) & 0x7)
-#define RCU_BOOT_SEL_XRX200(x) (((x >> 17) & 0xf) | ((x >> 8) & 0x10))
-
-/* dwc2 USB configuration registers */
-#define RCU_USB1CFG 0x0018
-#define RCU_USB2CFG 0x0034
-
-/* USB DMA endianness bits */
-#define RCU_USBCFG_HDSEL_BIT BIT(11)
-#define RCU_USBCFG_HOST_END_BIT BIT(10)
-#define RCU_USBCFG_SLV_END_BIT BIT(9)
-
-/* USB reset bits */
-#define RCU_USBRESET 0x0010
-
-#define USBRESET_BIT BIT(4)
-
-#define RCU_USBRESET2 0x0048
-
-#define USB1RESET_BIT BIT(4)
-#define USB2RESET_BIT BIT(5)
-
-#define RCU_CFG1A 0x0038
-#define RCU_CFG1B 0x003C
-
-/* USB PMU devices */
-#define PMU_AHBM BIT(15)
-#define PMU_USB0 BIT(6)
-#define PMU_USB1 BIT(27)
-
-/* USB PHY PMU devices */
-#define PMU_USB0_P BIT(0)
-#define PMU_USB1_P BIT(26)
-
-/* remapped base addr of the reset control unit */
-static void __iomem *ltq_rcu_membase;
-static struct device_node *ltq_rcu_np;
-static DEFINE_SPINLOCK(ltq_rcu_lock);
-
-static void ltq_rcu_w32(uint32_t val, uint32_t reg_off)
-{
- ltq_w32(val, ltq_rcu_membase + reg_off);
-}
-
-static uint32_t ltq_rcu_r32(uint32_t reg_off)
-{
- return ltq_r32(ltq_rcu_membase + reg_off);
-}
-
-static void ltq_rcu_w32_mask(uint32_t clr, uint32_t set, uint32_t reg_off)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&ltq_rcu_lock, flags);
- ltq_rcu_w32((ltq_rcu_r32(reg_off) & ~(clr)) | (set), reg_off);
- spin_unlock_irqrestore(&ltq_rcu_lock, flags);
-}
-
-/* This function is used by the watchdog driver */
-int ltq_reset_cause(void)
-{
- u32 val = ltq_rcu_r32(RCU_RST_STAT);
- return val >> RCU_STAT_SHIFT;
-}
-EXPORT_SYMBOL_GPL(ltq_reset_cause);
-
-/* allow platform code to find out what source we booted from */
-unsigned char ltq_boot_select(void)
-{
- u32 val = ltq_rcu_r32(RCU_RST_STAT);
-
- if (of_device_is_compatible(ltq_rcu_np, "lantiq,rcu-xrx200"))
- return RCU_BOOT_SEL_XRX200(val);
-
- return RCU_BOOT_SEL(val);
-}
-
-struct ltq_gphy_reset {
- u32 rd;
- u32 addr;
-};
-
-/* reset / boot a gphy */
-static struct ltq_gphy_reset xrx200_gphy[] = {
- {RCU_RD_GPHY0_XRX200, RCU_GFS_ADD0_XRX200},
- {RCU_RD_GPHY1_XRX200, RCU_GFS_ADD1_XRX200},
-};
-
-/* reset / boot a gphy */
-static struct ltq_gphy_reset xrx300_gphy[] = {
- {RCU_RD_GPHY0_XRX300, RCU_GFS_ADD0_XRX300},
- {RCU_RD_GPHY1_XRX300, RCU_GFS_ADD1_XRX300},
- {RCU_RD_GPHY2_XRX300, RCU_GFS_ADD2_XRX300},
-};
-
-/* reset / boot a gphy */
-static struct ltq_gphy_reset xrx330_gphy[] = {
- {RCU_RD_GPHY0_XRX330, RCU_GFS_ADD0_XRX330},
- {RCU_RD_GPHY1_XRX330, RCU_GFS_ADD1_XRX330},
- {RCU_RD_GPHY2_XRX330, RCU_GFS_ADD2_XRX330},
- {RCU_RD_GPHY3_XRX330, RCU_GFS_ADD3_XRX330},
-};
-
-static void xrx200_gphy_boot_addr(struct ltq_gphy_reset *phy_regs,
- dma_addr_t dev_addr)
-{
- ltq_rcu_w32_mask(0, phy_regs->rd, RCU_RST_REQ);
- ltq_rcu_w32(dev_addr, phy_regs->addr);
- ltq_rcu_w32_mask(phy_regs->rd, 0, RCU_RST_REQ);
-}
-
-/* reset and boot a gphy. these phys only exist on xrx200 SoC */
-int xrx200_gphy_boot(struct device *dev, unsigned int id, dma_addr_t dev_addr)
-{
- struct clk *clk;
-
- if (!of_device_is_compatible(ltq_rcu_np, "lantiq,rcu-xrx200")) {
- dev_err(dev, "this SoC has no GPHY\n");
- return -EINVAL;
- }
-
- if (of_machine_is_compatible("lantiq,vr9")) {
- clk = clk_get_sys("1f203000.rcu", "gphy");
- if (IS_ERR(clk))
- return PTR_ERR(clk);
- clk_enable(clk);
- }
-
- dev_info(dev, "booting GPHY%u firmware at %X\n", id, dev_addr);
-
- if (of_machine_is_compatible("lantiq,vr9")) {
- if (id >= ARRAY_SIZE(xrx200_gphy)) {
- dev_err(dev, "%u is an invalid gphy id\n", id);
- return -EINVAL;
- }
- xrx200_gphy_boot_addr(&xrx200_gphy[id], dev_addr);
- } else if (of_machine_is_compatible("lantiq,ar10")) {
- if (id >= ARRAY_SIZE(xrx300_gphy)) {
- dev_err(dev, "%u is an invalid gphy id\n", id);
- return -EINVAL;
- }
- xrx200_gphy_boot_addr(&xrx300_gphy[id], dev_addr);
- } else if (of_machine_is_compatible("lantiq,grx390")) {
- if (id >= ARRAY_SIZE(xrx330_gphy)) {
- dev_err(dev, "%u is an invalid gphy id\n", id);
- return -EINVAL;
- }
- xrx200_gphy_boot_addr(&xrx330_gphy[id], dev_addr);
- }
- return 0;
-}
-
-/* reset a io domain for u micro seconds */
-void ltq_reset_once(unsigned int module, ulong u)
-{
- ltq_rcu_w32(ltq_rcu_r32(RCU_RST_REQ) | module, RCU_RST_REQ);
- udelay(u);
- ltq_rcu_w32(ltq_rcu_r32(RCU_RST_REQ) & ~module, RCU_RST_REQ);
-}
-
-static int ltq_assert_device(struct reset_controller_dev *rcdev,
- unsigned long id)
-{
- u32 val;
-
- if (id < 8)
- return -1;
-
- val = ltq_rcu_r32(RCU_RST_REQ);
- val |= BIT(id);
- ltq_rcu_w32(val, RCU_RST_REQ);
-
- return 0;
-}
-
-static int ltq_deassert_device(struct reset_controller_dev *rcdev,
- unsigned long id)
-{
- u32 val;
-
- if (id < 8)
- return -1;
-
- val = ltq_rcu_r32(RCU_RST_REQ);
- val &= ~BIT(id);
- ltq_rcu_w32(val, RCU_RST_REQ);
-
- return 0;
-}
-
-static int ltq_reset_device(struct reset_controller_dev *rcdev,
- unsigned long id)
-{
- ltq_assert_device(rcdev, id);
- return ltq_deassert_device(rcdev, id);
-}
-
-static const struct reset_control_ops reset_ops = {
- .reset = ltq_reset_device,
- .assert = ltq_assert_device,
- .deassert = ltq_deassert_device,
-};
-
-static struct reset_controller_dev reset_dev = {
- .ops = &reset_ops,
- .owner = THIS_MODULE,
- .nr_resets = 32,
- .of_reset_n_cells = 1,
-};
-
-void ltq_rst_init(void)
-{
- reset_dev.of_node = of_find_compatible_node(NULL, NULL,
- "lantiq,xway-reset");
- if (!reset_dev.of_node)
- pr_err("Failed to find reset controller node");
- else
- reset_controller_register(&reset_dev);
-}
-
-static void ltq_machine_restart(char *command)
-{
- u32 val = ltq_rcu_r32(RCU_RST_REQ);
-
- if (of_device_is_compatible(ltq_rcu_np, "lantiq,rcu-xrx200"))
- val |= RCU_RD_GPHY1_XRX200 | RCU_RD_GPHY0_XRX200;
-
- val |= RCU_RD_SRST;
-
- local_irq_disable();
- ltq_rcu_w32(val, RCU_RST_REQ);
- unreachable();
-}
-
-static void ltq_machine_halt(void)
-{
- local_irq_disable();
- unreachable();
-}
-
-static void ltq_machine_power_off(void)
-{
- local_irq_disable();
- unreachable();
-}
-
-static void ltq_usb_init(void)
-{
- /* Power for USB cores 1 & 2 */
- ltq_pmu_enable(PMU_AHBM);
- ltq_pmu_enable(PMU_USB0);
- ltq_pmu_enable(PMU_USB1);
-
- ltq_rcu_w32(ltq_rcu_r32(RCU_CFG1A) | BIT(0), RCU_CFG1A);
- ltq_rcu_w32(ltq_rcu_r32(RCU_CFG1B) | BIT(0), RCU_CFG1B);
-
- /* Enable USB PHY power for cores 1 & 2 */
- ltq_pmu_enable(PMU_USB0_P);
- ltq_pmu_enable(PMU_USB1_P);
-
- /* Configure cores to host mode */
- ltq_rcu_w32(ltq_rcu_r32(RCU_USB1CFG) & ~RCU_USBCFG_HDSEL_BIT,
- RCU_USB1CFG);
- ltq_rcu_w32(ltq_rcu_r32(RCU_USB2CFG) & ~RCU_USBCFG_HDSEL_BIT,
- RCU_USB2CFG);
-
- /* Select DMA endianness (Host-endian: big-endian) */
- ltq_rcu_w32((ltq_rcu_r32(RCU_USB1CFG) & ~RCU_USBCFG_SLV_END_BIT)
- | RCU_USBCFG_HOST_END_BIT, RCU_USB1CFG);
- ltq_rcu_w32(ltq_rcu_r32((RCU_USB2CFG) & ~RCU_USBCFG_SLV_END_BIT)
- | RCU_USBCFG_HOST_END_BIT, RCU_USB2CFG);
-
- /* Hard reset USB state machines */
- ltq_rcu_w32(ltq_rcu_r32(RCU_USBRESET) | USBRESET_BIT, RCU_USBRESET);
- udelay(50 * 1000);
- ltq_rcu_w32(ltq_rcu_r32(RCU_USBRESET) & ~USBRESET_BIT, RCU_USBRESET);
-
- /* Soft reset USB state machines */
- ltq_rcu_w32(ltq_rcu_r32(RCU_USBRESET2)
- | USB1RESET_BIT | USB2RESET_BIT, RCU_USBRESET2);
- udelay(50 * 1000);
- ltq_rcu_w32(ltq_rcu_r32(RCU_USBRESET2)
- & ~(USB1RESET_BIT | USB2RESET_BIT), RCU_USBRESET2);
-}
-
-static int __init mips_reboot_setup(void)
-{
- struct resource res;
-
- ltq_rcu_np = of_find_compatible_node(NULL, NULL, "lantiq,rcu-xway");
- if (!ltq_rcu_np)
- ltq_rcu_np = of_find_compatible_node(NULL, NULL,
- "lantiq,rcu-xrx200");
-
- /* check if all the reset register range is available */
- if (!ltq_rcu_np)
- panic("Failed to load reset resources from devicetree");
-
- if (of_address_to_resource(ltq_rcu_np, 0, &res))
- panic("Failed to get rcu memory range");
-
- if (!request_mem_region(res.start, resource_size(&res), res.name))
- pr_err("Failed to request rcu memory");
-
- ltq_rcu_membase = ioremap_nocache(res.start, resource_size(&res));
- if (!ltq_rcu_membase)
- panic("Failed to remap core memory");
-
- if (of_machine_is_compatible("lantiq,ar9") ||
- of_machine_is_compatible("lantiq,vr9"))
- ltq_usb_init();
-
- if (of_machine_is_compatible("lantiq,vr9"))
- ltq_rcu_w32(ltq_rcu_r32(RCU_AHB_ENDIAN) | RCU_VR9_BE_AHB1S,
- RCU_AHB_ENDIAN);
-
- _machine_restart = ltq_machine_restart;
- _machine_halt = ltq_machine_halt;
- pm_power_off = ltq_machine_power_off;
-
- return 0;
-}
-
-arch_initcall(mips_reboot_setup);
diff --git a/arch/mips/lantiq/xway/sysctrl.c b/arch/mips/lantiq/xway/sysctrl.c
index 95bec460b651..7611c3013793 100644
--- a/arch/mips/lantiq/xway/sysctrl.c
+++ b/arch/mips/lantiq/xway/sysctrl.c
@@ -145,15 +145,7 @@ static u32 pmu_clk_cr_b[] = {
#define pmu_w32(x, y) ltq_w32((x), pmu_membase + (y))
#define pmu_r32(x) ltq_r32(pmu_membase + (x))
-#define XBAR_ALWAYS_LAST 0x430
-#define XBAR_FPI_BURST_EN BIT(1)
-#define XBAR_AHB_BURST_EN BIT(2)
-
-#define xbar_w32(x, y) ltq_w32((x), ltq_xbar_membase + (y))
-#define xbar_r32(x) ltq_r32(ltq_xbar_membase + (x))
-
static void __iomem *pmu_membase;
-static void __iomem *ltq_xbar_membase;
void __iomem *ltq_cgu_membase;
void __iomem *ltq_ebu_membase;
@@ -293,16 +285,6 @@ static void pci_ext_disable(struct clk *clk)
ltq_cgu_w32((1 << 31) | (1 << 30), pcicr);
}
-static void xbar_fpi_burst_disable(void)
-{
- u32 reg;
-
- /* bit 1 as 1 --burst; bit 1 as 0 -- single */
- reg = xbar_r32(XBAR_ALWAYS_LAST);
- reg &= ~XBAR_FPI_BURST_EN;
- xbar_w32(reg, XBAR_ALWAYS_LAST);
-}
-
/* enable a clockout source */
static int clkout_enable(struct clk *clk)
{
@@ -459,26 +441,6 @@ void __init ltq_soc_init(void)
if (!pmu_membase || !ltq_cgu_membase || !ltq_ebu_membase)
panic("Failed to remap core resources");
- if (of_machine_is_compatible("lantiq,vr9")) {
- struct resource res_xbar;
- struct device_node *np_xbar =
- of_find_compatible_node(NULL, NULL,
- "lantiq,xbar-xway");
-
- if (!np_xbar)
- panic("Failed to load xbar nodes from devicetree");
- if (of_address_to_resource(np_xbar, 0, &res_xbar))
- panic("Failed to get xbar resources");
- if (!request_mem_region(res_xbar.start, resource_size(&res_xbar),
- res_xbar.name))
- panic("Failed to get xbar resources");
-
- ltq_xbar_membase = ioremap_nocache(res_xbar.start,
- resource_size(&res_xbar));
- if (!ltq_xbar_membase)
- panic("Failed to remap xbar resources");
- }
-
/* make sure to unprotect the memory region where flash is located */
ltq_ebu_w32(ltq_ebu_r32(LTQ_EBU_BUSCON0) & ~EBU_WRDIS, LTQ_EBU_BUSCON0);
@@ -507,8 +469,8 @@ void __init ltq_soc_init(void)
if (of_machine_is_compatible("lantiq,grx390") ||
of_machine_is_compatible("lantiq,ar10")) {
- clkdev_add_pmu("1e101000.usb", "phy", 1, 2, PMU_ANALOG_USB0_P);
- clkdev_add_pmu("1e106000.usb", "phy", 1, 2, PMU_ANALOG_USB1_P);
+ clkdev_add_pmu("1f203018.usb2-phy", "phy", 1, 2, PMU_ANALOG_USB0_P);
+ clkdev_add_pmu("1f203034.usb2-phy", "phy", 1, 2, PMU_ANALOG_USB1_P);
/* rc 0 */
clkdev_add_pmu("1d900000.pcie", "phy", 1, 2, PMU_ANALOG_PCIE0_P);
clkdev_add_pmu("1d900000.pcie", "msi", 1, 1, PMU1_PCIE_MSI);
@@ -528,8 +490,8 @@ void __init ltq_soc_init(void)
else
clkdev_add_static(CLOCK_133M, CLOCK_133M,
CLOCK_133M, CLOCK_133M);
- clkdev_add_pmu("1e101000.usb", "ctl", 1, 0, PMU_USB0);
- clkdev_add_pmu("1e101000.usb", "phy", 1, 0, PMU_USB0_P);
+ clkdev_add_pmu("1e101000.usb", "otg", 1, 0, PMU_USB0);
+ clkdev_add_pmu("1f203018.usb2-phy", "phy", 1, 0, PMU_USB0_P);
clkdev_add_pmu("1e180000.etop", "ppe", 1, 0, PMU_PPE);
clkdev_add_cgu("1e180000.etop", "ephycgu", CGU_EPHY);
clkdev_add_pmu("1e180000.etop", "ephy", 1, 0, PMU_EPHY);
@@ -538,8 +500,8 @@ void __init ltq_soc_init(void)
} else if (of_machine_is_compatible("lantiq,grx390")) {
clkdev_add_static(ltq_grx390_cpu_hz(), ltq_grx390_fpi_hz(),
ltq_grx390_fpi_hz(), ltq_grx390_pp32_hz());
- clkdev_add_pmu("1e101000.usb", "ctl", 1, 0, PMU_USB0);
- clkdev_add_pmu("1e106000.usb", "ctl", 1, 0, PMU_USB1);
+ clkdev_add_pmu("1e101000.usb", "otg", 1, 0, PMU_USB0);
+ clkdev_add_pmu("1e106000.usb", "otg", 1, 0, PMU_USB1);
/* rc 2 */
clkdev_add_pmu("1a800000.pcie", "phy", 1, 2, PMU_ANALOG_PCIE2_P);
clkdev_add_pmu("1a800000.pcie", "msi", 1, 1, PMU1_PCIE2_MSI);
@@ -551,22 +513,23 @@ void __init ltq_soc_init(void)
} else if (of_machine_is_compatible("lantiq,ar10")) {
clkdev_add_static(ltq_ar10_cpu_hz(), ltq_ar10_fpi_hz(),
ltq_ar10_fpi_hz(), ltq_ar10_pp32_hz());
- clkdev_add_pmu("1e101000.usb", "ctl", 1, 0, PMU_USB0);
- clkdev_add_pmu("1e106000.usb", "ctl", 1, 0, PMU_USB1);
+ clkdev_add_pmu("1e101000.usb", "otg", 1, 0, PMU_USB0);
+ clkdev_add_pmu("1e106000.usb", "otg", 1, 0, PMU_USB1);
clkdev_add_pmu("1e108000.eth", NULL, 0, 0, PMU_SWITCH |
PMU_PPE_DP | PMU_PPE_TC);
clkdev_add_pmu("1da00000.usif", "NULL", 1, 0, PMU_USIF);
- clkdev_add_pmu("1f203000.rcu", "gphy", 1, 0, PMU_GPHY);
+ clkdev_add_pmu("1f203020.gphy", NULL, 1, 0, PMU_GPHY);
+ clkdev_add_pmu("1f203068.gphy", NULL, 1, 0, PMU_GPHY);
clkdev_add_pmu("1e103100.deu", NULL, 1, 0, PMU_DEU);
clkdev_add_pmu("1e116000.mei", "afe", 1, 2, PMU_ANALOG_DSL_AFE);
clkdev_add_pmu("1e116000.mei", "dfe", 1, 0, PMU_DFE);
} else if (of_machine_is_compatible("lantiq,vr9")) {
clkdev_add_static(ltq_vr9_cpu_hz(), ltq_vr9_fpi_hz(),
ltq_vr9_fpi_hz(), ltq_vr9_pp32_hz());
- clkdev_add_pmu("1e101000.usb", "phy", 1, 0, PMU_USB0_P);
- clkdev_add_pmu("1e101000.usb", "ctl", 1, 0, PMU_USB0 | PMU_AHBM);
- clkdev_add_pmu("1e106000.usb", "phy", 1, 0, PMU_USB1_P);
- clkdev_add_pmu("1e106000.usb", "ctl", 1, 0, PMU_USB1 | PMU_AHBM);
+ clkdev_add_pmu("1f203018.usb2-phy", "phy", 1, 0, PMU_USB0_P);
+ clkdev_add_pmu("1e101000.usb", "otg", 1, 0, PMU_USB0 | PMU_AHBM);
+ clkdev_add_pmu("1f203034.usb2-phy", "phy", 1, 0, PMU_USB1_P);
+ clkdev_add_pmu("1e106000.usb", "otg", 1, 0, PMU_USB1 | PMU_AHBM);
clkdev_add_pmu("1d900000.pcie", "phy", 1, 1, PMU1_PCIE_PHY);
clkdev_add_pmu("1d900000.pcie", "bus", 1, 0, PMU_PCIE_CLK);
clkdev_add_pmu("1d900000.pcie", "msi", 1, 1, PMU1_PCIE_MSI);
@@ -579,17 +542,18 @@ void __init ltq_soc_init(void)
PMU_SWITCH | PMU_PPE_DPLUS | PMU_PPE_DPLUM |
PMU_PPE_EMA | PMU_PPE_TC | PMU_PPE_SLL01 |
PMU_PPE_QSB | PMU_PPE_TOP);
- clkdev_add_pmu("1f203000.rcu", "gphy", 0, 0, PMU_GPHY);
+ clkdev_add_pmu("1f203020.gphy", NULL, 0, 0, PMU_GPHY);
+ clkdev_add_pmu("1f203068.gphy", NULL, 0, 0, PMU_GPHY);
clkdev_add_pmu("1e103000.sdio", NULL, 1, 0, PMU_SDIO);
clkdev_add_pmu("1e103100.deu", NULL, 1, 0, PMU_DEU);
clkdev_add_pmu("1e116000.mei", "dfe", 1, 0, PMU_DFE);
} else if (of_machine_is_compatible("lantiq,ar9")) {
clkdev_add_static(ltq_ar9_cpu_hz(), ltq_ar9_fpi_hz(),
ltq_ar9_fpi_hz(), CLOCK_250M);
- clkdev_add_pmu("1e101000.usb", "ctl", 1, 0, PMU_USB0);
- clkdev_add_pmu("1e101000.usb", "phy", 1, 0, PMU_USB0_P);
- clkdev_add_pmu("1e106000.usb", "ctl", 1, 0, PMU_USB1);
- clkdev_add_pmu("1e106000.usb", "phy", 1, 0, PMU_USB1_P);
+ clkdev_add_pmu("1f203018.usb2-phy", "phy", 1, 0, PMU_USB0_P);
+ clkdev_add_pmu("1e101000.usb", "otg", 1, 0, PMU_USB0);
+ clkdev_add_pmu("1f203034.usb2-phy", "phy", 1, 0, PMU_USB1_P);
+ clkdev_add_pmu("1e106000.usb", "otg", 1, 0, PMU_USB1);
clkdev_add_pmu("1e180000.etop", "switch", 1, 0, PMU_SWITCH);
clkdev_add_pmu("1e103000.sdio", NULL, 1, 0, PMU_SDIO);
clkdev_add_pmu("1e103100.deu", NULL, 1, 0, PMU_DEU);
@@ -598,14 +562,11 @@ void __init ltq_soc_init(void)
} else {
clkdev_add_static(ltq_danube_cpu_hz(), ltq_danube_fpi_hz(),
ltq_danube_fpi_hz(), ltq_danube_pp32_hz());
- clkdev_add_pmu("1e101000.usb", "ctl", 1, 0, PMU_USB0);
- clkdev_add_pmu("1e101000.usb", "phy", 1, 0, PMU_USB0_P);
+ clkdev_add_pmu("1f203018.usb2-phy", "ctrl", 1, 0, PMU_USB0);
+ clkdev_add_pmu("1f203018.usb2-phy", "phy", 1, 0, PMU_USB0_P);
clkdev_add_pmu("1e103000.sdio", NULL, 1, 0, PMU_SDIO);
clkdev_add_pmu("1e103100.deu", NULL, 1, 0, PMU_DEU);
clkdev_add_pmu("1e116000.mei", "dfe", 1, 0, PMU_DFE);
clkdev_add_pmu("1e100400.serial", NULL, 1, 0, PMU_ASC0);
}
-
- if (of_machine_is_compatible("lantiq,vr9"))
- xbar_fpi_burst_disable();
}
diff --git a/arch/mips/lantiq/xway/xrx200_phy_fw.c b/arch/mips/lantiq/xway/xrx200_phy_fw.c
deleted file mode 100644
index f0a0f2d431b2..000000000000
--- a/arch/mips/lantiq/xway/xrx200_phy_fw.c
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Lantiq XRX200 PHY Firmware Loader
- * Author: John Crispin
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License version 2 as published
- * by the Free Software Foundation.
- *
- * Copyright (C) 2012 John Crispin <john@phrozen.org>
- */
-
-#include <linux/delay.h>
-#include <linux/dma-mapping.h>
-#include <linux/firmware.h>
-#include <linux/of_platform.h>
-
-#include <lantiq_soc.h>
-
-#define XRX200_GPHY_FW_ALIGN (16 * 1024)
-
-static dma_addr_t xway_gphy_load(struct platform_device *pdev)
-{
- const struct firmware *fw;
- dma_addr_t dev_addr = 0;
- const char *fw_name;
- void *fw_addr;
- size_t size;
-
- if (of_get_property(pdev->dev.of_node, "firmware1", NULL) ||
- of_get_property(pdev->dev.of_node, "firmware2", NULL)) {
- switch (ltq_soc_type()) {
- case SOC_TYPE_VR9:
- if (of_property_read_string(pdev->dev.of_node,
- "firmware1", &fw_name)) {
- dev_err(&pdev->dev,
- "failed to load firmware filename\n");
- return 0;
- }
- break;
- case SOC_TYPE_VR9_2:
- if (of_property_read_string(pdev->dev.of_node,
- "firmware2", &fw_name)) {
- dev_err(&pdev->dev,
- "failed to load firmware filename\n");
- return 0;
- }
- break;
- }
- } else if (of_property_read_string(pdev->dev.of_node,
- "firmware", &fw_name)) {
- dev_err(&pdev->dev, "failed to load firmware filename\n");
- return 0;
- }
-
- dev_info(&pdev->dev, "requesting %s\n", fw_name);
- if (request_firmware(&fw, fw_name, &pdev->dev)) {
- dev_err(&pdev->dev, "failed to load firmware: %s\n", fw_name);
- return 0;
- }
-
- /*
- * GPHY cores need the firmware code in a persistent and contiguous
- * memory area with a 16 kB boundary aligned start address
- */
- size = fw->size + XRX200_GPHY_FW_ALIGN;
-
- fw_addr = dma_alloc_coherent(&pdev->dev, size, &dev_addr, GFP_KERNEL);
- if (fw_addr) {
- fw_addr = PTR_ALIGN(fw_addr, XRX200_GPHY_FW_ALIGN);
- dev_addr = ALIGN(dev_addr, XRX200_GPHY_FW_ALIGN);
- memcpy(fw_addr, fw->data, fw->size);
- } else {
- dev_err(&pdev->dev, "failed to alloc firmware memory\n");
- }
-
- release_firmware(fw);
- return dev_addr;
-}
-
-static int xway_phy_fw_probe(struct platform_device *pdev)
-{
- dma_addr_t fw_addr;
- struct property *pp;
- unsigned char *phyids;
- int i, ret = 0;
-
- fw_addr = xway_gphy_load(pdev);
- if (!fw_addr)
- return -EINVAL;
- pp = of_find_property(pdev->dev.of_node, "phys", NULL);
- if (!pp)
- return -ENOENT;
- phyids = pp->value;
- for (i = 0; i < pp->length && !ret; i++)
- ret = xrx200_gphy_boot(&pdev->dev, phyids[i], fw_addr);
- if (!ret)
- mdelay(100);
- return ret;
-}
-
-static const struct of_device_id xway_phy_match[] = {
- { .compatible = "lantiq,phy-xrx200" },
- {},
-};
-
-static struct platform_driver xway_phy_driver = {
- .probe = xway_phy_fw_probe,
- .driver = {
- .name = "phy-xrx200",
- .of_match_table = xway_phy_match,
- },
-};
-builtin_platform_driver(xway_phy_driver);
diff --git a/arch/mips/lib/Makefile b/arch/mips/lib/Makefile
index a37fe3d1ee2f..6ab430d24575 100644
--- a/arch/mips/lib/Makefile
+++ b/arch/mips/lib/Makefile
@@ -6,7 +6,7 @@ lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \
mips-atomic.o strncpy_user.o \
strnlen_user.o uncached.o
-obj-y += iomap.o
+obj-y += iomap.o iomap_copy.o
obj-$(CONFIG_PCI) += iomap-pci.o
lib-$(CONFIG_GENERIC_CSUM) := $(filter-out csum_partial.o, $(lib-y))
diff --git a/arch/mips/lib/delay.c b/arch/mips/lib/delay.c
index 2307a3cb2714..68c495ed71e3 100644
--- a/arch/mips/lib/delay.c
+++ b/arch/mips/lib/delay.c
@@ -8,6 +8,7 @@
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
* Copyright (C) 2007, 2014 Maciej W. Rozycki
*/
+#include <linux/delay.h>
#include <linux/export.h>
#include <linux/param.h>
#include <linux/smp.h>
diff --git a/arch/mips/lib/iomap_copy.c b/arch/mips/lib/iomap_copy.c
new file mode 100644
index 000000000000..368bb38267c5
--- /dev/null
+++ b/arch/mips/lib/iomap_copy.c
@@ -0,0 +1,42 @@
+/*
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of version 2 of the GNU General Public License
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include <linux/export.h>
+#include <linux/io.h>
+
+/**
+ * __ioread64_copy - copy data from MMIO space, in 64-bit units
+ * @to: destination (must be 64-bit aligned)
+ * @from: source, in MMIO space (must be 64-bit aligned)
+ * @count: number of 64-bit quantities to copy
+ *
+ * Copy data from MMIO space to kernel space, in units of 32 or 64 bits at a
+ * time. Order of access is not guaranteed, nor is a memory barrier
+ * performed afterwards.
+ */
+void __ioread64_copy(void *to, const void __iomem *from, size_t count)
+{
+#ifdef CONFIG_64BIT
+ u64 *dst = to;
+ const u64 __iomem *src = from;
+ const u64 __iomem *end = src + count;
+
+ while (src < end)
+ *dst++ = __raw_readq(src++);
+#else
+ __ioread32_copy(to, from, count * 2);
+#endif
+}
+EXPORT_SYMBOL_GPL(__ioread64_copy);
diff --git a/arch/mips/loongson64/lemote-2f/clock.c b/arch/mips/loongson64/lemote-2f/clock.c
index a78fb657068c..8281334df9c8 100644
--- a/arch/mips/loongson64/lemote-2f/clock.c
+++ b/arch/mips/loongson64/lemote-2f/clock.c
@@ -80,6 +80,9 @@ EXPORT_SYMBOL(clk_disable);
unsigned long clk_get_rate(struct clk *clk)
{
+ if (!clk)
+ return 0;
+
return (unsigned long)clk->rate;
}
EXPORT_SYMBOL(clk_get_rate);
diff --git a/arch/mips/loongson64/loongson-3/smp.c b/arch/mips/loongson64/loongson-3/smp.c
index b7a355c3c408..8501109bb0f0 100644
--- a/arch/mips/loongson64/loongson-3/smp.c
+++ b/arch/mips/loongson64/loongson-3/smp.c
@@ -319,8 +319,8 @@ static void loongson3_init_secondary(void)
loongson3_ipi_write32(0xffffffff, ipi_en0_regs[cpu_logical_map(i)]);
per_cpu(cpu_state, cpu) = CPU_ONLINE;
- cpu_data[cpu].core =
- cpu_logical_map(cpu) % loongson_sysconf.cores_per_package;
+ cpu_set_core(&cpu_data[cpu],
+ cpu_logical_map(cpu) % loongson_sysconf.cores_per_package);
cpu_data[cpu].package =
cpu_logical_map(cpu) / loongson_sysconf.cores_per_package;
@@ -386,7 +386,8 @@ static void __init loongson3_smp_setup(void)
ipi_status0_regs_init();
ipi_en0_regs_init();
ipi_mailbox_buf_init();
- cpu_data[0].core = cpu_logical_map(0) % loongson_sysconf.cores_per_package;
+ cpu_set_core(&cpu_data[0],
+ cpu_logical_map(0) % loongson_sysconf.cores_per_package);
cpu_data[0].package = cpu_logical_map(0) / loongson_sysconf.cores_per_package;
}
@@ -399,7 +400,7 @@ static void __init loongson3_prepare_cpus(unsigned int max_cpus)
/*
* Setup the PC, SP, and GP of a secondary processor and start it runing!
*/
-static void loongson3_boot_secondary(int cpu, struct task_struct *idle)
+static int loongson3_boot_secondary(int cpu, struct task_struct *idle)
{
unsigned long startargs[4];
@@ -422,6 +423,7 @@ static void loongson3_boot_secondary(int cpu, struct task_struct *idle)
(void *)(ipi_mailbox_buf[cpu_logical_map(cpu)]+0x8));
loongson3_ipi_write64(startargs[0],
(void *)(ipi_mailbox_buf[cpu_logical_map(cpu)]+0x0));
+ return 0;
}
#ifdef CONFIG_HOTPLUG_CPU
@@ -697,7 +699,7 @@ void play_dead(void)
static int loongson3_disable_clock(unsigned int cpu)
{
- uint64_t core_id = cpu_data[cpu].core;
+ uint64_t core_id = cpu_core(&cpu_data[cpu]);
uint64_t package_id = cpu_data[cpu].package;
if ((read_c0_prid() & PRID_REV_MASK) == PRID_REV_LOONGSON3A_R1) {
@@ -711,7 +713,7 @@ static int loongson3_disable_clock(unsigned int cpu)
static int loongson3_enable_clock(unsigned int cpu)
{
- uint64_t core_id = cpu_data[cpu].core;
+ uint64_t core_id = cpu_core(&cpu_data[cpu]);
uint64_t package_id = cpu_data[cpu].package;
if ((read_c0_prid() & PRID_REV_MASK) == PRID_REV_LOONGSON3A_R1) {
@@ -734,7 +736,7 @@ early_initcall(register_loongson3_notifier);
#endif
-struct plat_smp_ops loongson3_smp_ops = {
+const struct plat_smp_ops loongson3_smp_ops = {
.send_ipi_single = loongson3_send_ipi_single,
.send_ipi_mask = loongson3_send_ipi_mask,
.init_secondary = loongson3_init_secondary,
diff --git a/arch/mips/math-emu/Makefile b/arch/mips/math-emu/Makefile
index e9bbc2a6526f..e9f10b88b695 100644
--- a/arch/mips/math-emu/Makefile
+++ b/arch/mips/math-emu/Makefile
@@ -4,9 +4,11 @@
obj-y += cp1emu.o ieee754dp.o ieee754sp.o ieee754.o \
dp_div.o dp_mul.o dp_sub.o dp_add.o dp_fsp.o dp_cmp.o dp_simple.o \
- dp_tint.o dp_fint.o dp_maddf.o dp_2008class.o dp_fmin.o dp_fmax.o \
+ dp_tint.o dp_fint.o dp_rint.o dp_maddf.o dp_2008class.o dp_fmin.o \
+ dp_fmax.o \
sp_div.o sp_mul.o sp_sub.o sp_add.o sp_fdp.o sp_cmp.o sp_simple.o \
- sp_tint.o sp_fint.o sp_maddf.o sp_2008class.o sp_fmin.o sp_fmax.o \
+ sp_tint.o sp_fint.o sp_rint.o sp_maddf.o sp_2008class.o sp_fmin.o \
+ sp_fmax.o \
dsemul.o
lib-y += ieee754d.o \
diff --git a/arch/mips/math-emu/cp1emu.c b/arch/mips/math-emu/cp1emu.c
index f08a7b4facb9..192542dbd972 100644
--- a/arch/mips/math-emu/cp1emu.c
+++ b/arch/mips/math-emu/cp1emu.c
@@ -58,7 +58,7 @@ static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *,
mips_instruction);
static int fpux_emu(struct pt_regs *,
- struct mips_fpu_struct *, mips_instruction, void *__user *);
+ struct mips_fpu_struct *, mips_instruction, void __user **);
/* Control registers */
@@ -830,12 +830,12 @@ do { \
} while (0)
#define DIFROMREG(di, x) \
- ((di) = get_fpr64(&ctx->fpr[(x) & ~(cop1_64bit(xcp) == 0)], 0))
+ ((di) = get_fpr64(&ctx->fpr[(x) & ~(cop1_64bit(xcp) ^ 1)], 0))
#define DITOREG(di, x) \
do { \
unsigned fpr, i; \
- fpr = (x) & ~(cop1_64bit(xcp) == 0); \
+ fpr = (x) & ~(cop1_64bit(xcp) ^ 1); \
set_fpr64(&ctx->fpr[fpr], 0, di); \
for (i = 1; i < ARRAY_SIZE(ctx->fpr[x].val64); i++) \
set_fpr64(&ctx->fpr[fpr], i, 0); \
@@ -973,7 +973,7 @@ static inline void cop1_ctc(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
*/
static int cop1Emulate(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
- struct mm_decoded_insn dec_insn, void *__user *fault_addr)
+ struct mm_decoded_insn dec_insn, void __user **fault_addr)
{
unsigned long contpc = xcp->cp0_epc + dec_insn.pc_inc;
unsigned int cond, cbit, bit0;
@@ -1195,9 +1195,11 @@ emul:
bit0 = get_fpr32(fpr, 0) & 0x1;
switch (MIPSInst_RS(ir)) {
case bc1eqz_op:
+ MIPS_FPU_EMU_INC_STATS(bc1eqz);
cond = bit0 == 0;
break;
case bc1nez_op:
+ MIPS_FPU_EMU_INC_STATS(bc1nez);
cond = bit0 != 0;
break;
}
@@ -1230,6 +1232,7 @@ emul:
break;
}
branch_common:
+ MIPS_FPU_EMU_INC_STATS(branches);
set_delay_slot(xcp);
if (cond) {
/*
@@ -1460,7 +1463,7 @@ DEF3OP(nmadd, dp, ieee754dp_mul, ieee754dp_add, ieee754dp_neg);
DEF3OP(nmsub, dp, ieee754dp_mul, ieee754dp_sub, ieee754dp_neg);
static int fpux_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
- mips_instruction ir, void *__user *fault_addr)
+ mips_instruction ir, void __user **fault_addr)
{
unsigned rcsr = 0; /* resulting csr */
@@ -1682,15 +1685,19 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
switch (MIPSInst_FUNC(ir)) {
/* binary ops */
case fadd_op:
+ MIPS_FPU_EMU_INC_STATS(add_s);
handler.b = ieee754sp_add;
goto scopbop;
case fsub_op:
+ MIPS_FPU_EMU_INC_STATS(sub_s);
handler.b = ieee754sp_sub;
goto scopbop;
case fmul_op:
+ MIPS_FPU_EMU_INC_STATS(mul_s);
handler.b = ieee754sp_mul;
goto scopbop;
case fdiv_op:
+ MIPS_FPU_EMU_INC_STATS(div_s);
handler.b = ieee754sp_div;
goto scopbop;
@@ -1699,6 +1706,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_2_3_4_5_r)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(sqrt_s);
handler.u = ieee754sp_sqrt;
goto scopuop;
@@ -1711,6 +1719,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_4_5_64_r2_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(rsqrt_s);
handler.u = fpemu_sp_rsqrt;
goto scopuop;
@@ -1718,6 +1727,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_4_5_64_r2_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(recip_s);
handler.u = fpemu_sp_recip;
goto scopuop;
@@ -1754,6 +1764,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(seleqz_s);
SPFROMREG(rv.s, MIPSInst_FT(ir));
if (rv.w & 0x1)
rv.w = 0;
@@ -1765,6 +1776,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(selnez_s);
SPFROMREG(rv.s, MIPSInst_FT(ir));
if (rv.w & 0x1)
SPFROMREG(rv.s, MIPSInst_FS(ir));
@@ -1778,6 +1790,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(maddf_s);
SPFROMREG(ft, MIPSInst_FT(ir));
SPFROMREG(fs, MIPSInst_FS(ir));
SPFROMREG(fd, MIPSInst_FD(ir));
@@ -1791,6 +1804,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(msubf_s);
SPFROMREG(ft, MIPSInst_FT(ir));
SPFROMREG(fs, MIPSInst_FS(ir));
SPFROMREG(fd, MIPSInst_FD(ir));
@@ -1804,9 +1818,9 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(rint_s);
SPFROMREG(fs, MIPSInst_FS(ir));
- rv.l = ieee754sp_tlong(fs);
- rv.s = ieee754sp_flong(rv.l);
+ rv.s = ieee754sp_rint(fs);
goto copcsr;
}
@@ -1816,6 +1830,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(class_s);
SPFROMREG(fs, MIPSInst_FS(ir));
rv.w = ieee754sp_2008class(fs);
rfmt = w_fmt;
@@ -1828,6 +1843,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(min_s);
SPFROMREG(ft, MIPSInst_FT(ir));
SPFROMREG(fs, MIPSInst_FS(ir));
rv.s = ieee754sp_fmin(fs, ft);
@@ -1840,6 +1856,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(mina_s);
SPFROMREG(ft, MIPSInst_FT(ir));
SPFROMREG(fs, MIPSInst_FS(ir));
rv.s = ieee754sp_fmina(fs, ft);
@@ -1852,6 +1869,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(max_s);
SPFROMREG(ft, MIPSInst_FT(ir));
SPFROMREG(fs, MIPSInst_FS(ir));
rv.s = ieee754sp_fmax(fs, ft);
@@ -1864,6 +1882,7 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(maxa_s);
SPFROMREG(ft, MIPSInst_FT(ir));
SPFROMREG(fs, MIPSInst_FS(ir));
rv.s = ieee754sp_fmaxa(fs, ft);
@@ -1871,15 +1890,18 @@ static int fpu_emu(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
}
case fabs_op:
+ MIPS_FPU_EMU_INC_STATS(abs_s);
handler.u = ieee754sp_abs;
goto scopuop;
case fneg_op:
+ MIPS_FPU_EMU_INC_STATS(neg_s);
handler.u = ieee754sp_neg;
goto scopuop;
case fmov_op:
/* an easy one */
+ MIPS_FPU_EMU_INC_STATS(mov_s);
SPFROMREG(rv.s, MIPSInst_FS(ir));
goto copcsr;
@@ -1922,12 +1944,14 @@ copcsr:
return SIGILL; /* not defined */
case fcvtd_op:
+ MIPS_FPU_EMU_INC_STATS(cvt_d_s);
SPFROMREG(fs, MIPSInst_FS(ir));
rv.d = ieee754dp_fsp(fs);
rfmt = d_fmt;
goto copcsr;
case fcvtw_op:
+ MIPS_FPU_EMU_INC_STATS(cvt_w_s);
SPFROMREG(fs, MIPSInst_FS(ir));
rv.w = ieee754sp_tint(fs);
rfmt = w_fmt;
@@ -1940,6 +1964,15 @@ copcsr:
if (!cpu_has_mips_2_3_4_5_r)
return SIGILL;
+ if (MIPSInst_FUNC(ir) == fceil_op)
+ MIPS_FPU_EMU_INC_STATS(ceil_w_s);
+ if (MIPSInst_FUNC(ir) == ffloor_op)
+ MIPS_FPU_EMU_INC_STATS(floor_w_s);
+ if (MIPSInst_FUNC(ir) == fround_op)
+ MIPS_FPU_EMU_INC_STATS(round_w_s);
+ if (MIPSInst_FUNC(ir) == ftrunc_op)
+ MIPS_FPU_EMU_INC_STATS(trunc_w_s);
+
oldrm = ieee754_csr.rm;
SPFROMREG(fs, MIPSInst_FS(ir));
ieee754_csr.rm = MIPSInst_FUNC(ir);
@@ -1952,6 +1985,7 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(sel_s);
SPFROMREG(fd, MIPSInst_FD(ir));
if (fd.bits & 0x1)
SPFROMREG(rv.s, MIPSInst_FT(ir));
@@ -1963,6 +1997,7 @@ copcsr:
if (!cpu_has_mips_3_4_5_64_r2_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(cvt_l_s);
SPFROMREG(fs, MIPSInst_FS(ir));
rv.l = ieee754sp_tlong(fs);
rfmt = l_fmt;
@@ -1975,6 +2010,15 @@ copcsr:
if (!cpu_has_mips_3_4_5_64_r2_r6)
return SIGILL;
+ if (MIPSInst_FUNC(ir) == fceill_op)
+ MIPS_FPU_EMU_INC_STATS(ceil_l_s);
+ if (MIPSInst_FUNC(ir) == ffloorl_op)
+ MIPS_FPU_EMU_INC_STATS(floor_l_s);
+ if (MIPSInst_FUNC(ir) == froundl_op)
+ MIPS_FPU_EMU_INC_STATS(round_l_s);
+ if (MIPSInst_FUNC(ir) == ftruncl_op)
+ MIPS_FPU_EMU_INC_STATS(trunc_l_s);
+
oldrm = ieee754_csr.rm;
SPFROMREG(fs, MIPSInst_FS(ir));
ieee754_csr.rm = MIPSInst_FUNC(ir);
@@ -2016,15 +2060,19 @@ copcsr:
switch (MIPSInst_FUNC(ir)) {
/* binary ops */
case fadd_op:
+ MIPS_FPU_EMU_INC_STATS(add_d);
handler.b = ieee754dp_add;
goto dcopbop;
case fsub_op:
+ MIPS_FPU_EMU_INC_STATS(sub_d);
handler.b = ieee754dp_sub;
goto dcopbop;
case fmul_op:
+ MIPS_FPU_EMU_INC_STATS(mul_d);
handler.b = ieee754dp_mul;
goto dcopbop;
case fdiv_op:
+ MIPS_FPU_EMU_INC_STATS(div_d);
handler.b = ieee754dp_div;
goto dcopbop;
@@ -2033,6 +2081,7 @@ copcsr:
if (!cpu_has_mips_2_3_4_5_r)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(sqrt_d);
handler.u = ieee754dp_sqrt;
goto dcopuop;
/*
@@ -2044,12 +2093,14 @@ copcsr:
if (!cpu_has_mips_4_5_64_r2_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(rsqrt_d);
handler.u = fpemu_dp_rsqrt;
goto dcopuop;
case frecip_op:
if (!cpu_has_mips_4_5_64_r2_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(recip_d);
handler.u = fpemu_dp_recip;
goto dcopuop;
case fmovc_op:
@@ -2083,6 +2134,7 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(seleqz_d);
DPFROMREG(rv.d, MIPSInst_FT(ir));
if (rv.l & 0x1)
rv.l = 0;
@@ -2094,6 +2146,7 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(selnez_d);
DPFROMREG(rv.d, MIPSInst_FT(ir));
if (rv.l & 0x1)
DPFROMREG(rv.d, MIPSInst_FS(ir));
@@ -2107,6 +2160,7 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(maddf_d);
DPFROMREG(ft, MIPSInst_FT(ir));
DPFROMREG(fs, MIPSInst_FS(ir));
DPFROMREG(fd, MIPSInst_FD(ir));
@@ -2120,6 +2174,7 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(msubf_d);
DPFROMREG(ft, MIPSInst_FT(ir));
DPFROMREG(fs, MIPSInst_FS(ir));
DPFROMREG(fd, MIPSInst_FD(ir));
@@ -2133,9 +2188,9 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(rint_d);
DPFROMREG(fs, MIPSInst_FS(ir));
- rv.l = ieee754dp_tlong(fs);
- rv.d = ieee754dp_flong(rv.l);
+ rv.d = ieee754dp_rint(fs);
goto copcsr;
}
@@ -2145,9 +2200,10 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(class_d);
DPFROMREG(fs, MIPSInst_FS(ir));
- rv.w = ieee754dp_2008class(fs);
- rfmt = w_fmt;
+ rv.l = ieee754dp_2008class(fs);
+ rfmt = l_fmt;
break;
}
@@ -2157,6 +2213,7 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(min_d);
DPFROMREG(ft, MIPSInst_FT(ir));
DPFROMREG(fs, MIPSInst_FS(ir));
rv.d = ieee754dp_fmin(fs, ft);
@@ -2169,6 +2226,7 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(mina_d);
DPFROMREG(ft, MIPSInst_FT(ir));
DPFROMREG(fs, MIPSInst_FS(ir));
rv.d = ieee754dp_fmina(fs, ft);
@@ -2181,6 +2239,7 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(max_d);
DPFROMREG(ft, MIPSInst_FT(ir));
DPFROMREG(fs, MIPSInst_FS(ir));
rv.d = ieee754dp_fmax(fs, ft);
@@ -2193,6 +2252,7 @@ copcsr:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(maxa_d);
DPFROMREG(ft, MIPSInst_FT(ir));
DPFROMREG(fs, MIPSInst_FS(ir));
rv.d = ieee754dp_fmaxa(fs, ft);
@@ -2200,15 +2260,18 @@ copcsr:
}
case fabs_op:
+ MIPS_FPU_EMU_INC_STATS(abs_d);
handler.u = ieee754dp_abs;
goto dcopuop;
case fneg_op:
+ MIPS_FPU_EMU_INC_STATS(neg_d);
handler.u = ieee754dp_neg;
goto dcopuop;
case fmov_op:
/* an easy one */
+ MIPS_FPU_EMU_INC_STATS(mov_d);
DPFROMREG(rv.d, MIPSInst_FS(ir));
goto copcsr;
@@ -2228,6 +2291,7 @@ dcopuop:
* unary conv ops
*/
case fcvts_op:
+ MIPS_FPU_EMU_INC_STATS(cvt_s_d);
DPFROMREG(fs, MIPSInst_FS(ir));
rv.s = ieee754sp_fdp(fs);
rfmt = s_fmt;
@@ -2237,6 +2301,7 @@ dcopuop:
return SIGILL; /* not defined */
case fcvtw_op:
+ MIPS_FPU_EMU_INC_STATS(cvt_w_d);
DPFROMREG(fs, MIPSInst_FS(ir));
rv.w = ieee754dp_tint(fs); /* wrong */
rfmt = w_fmt;
@@ -2249,6 +2314,15 @@ dcopuop:
if (!cpu_has_mips_2_3_4_5_r)
return SIGILL;
+ if (MIPSInst_FUNC(ir) == fceil_op)
+ MIPS_FPU_EMU_INC_STATS(ceil_w_d);
+ if (MIPSInst_FUNC(ir) == ffloor_op)
+ MIPS_FPU_EMU_INC_STATS(floor_w_d);
+ if (MIPSInst_FUNC(ir) == fround_op)
+ MIPS_FPU_EMU_INC_STATS(round_w_d);
+ if (MIPSInst_FUNC(ir) == ftrunc_op)
+ MIPS_FPU_EMU_INC_STATS(trunc_w_d);
+
oldrm = ieee754_csr.rm;
DPFROMREG(fs, MIPSInst_FS(ir));
ieee754_csr.rm = MIPSInst_FUNC(ir);
@@ -2261,6 +2335,7 @@ dcopuop:
if (!cpu_has_mips_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(sel_d);
DPFROMREG(fd, MIPSInst_FD(ir));
if (fd.bits & 0x1)
DPFROMREG(rv.d, MIPSInst_FT(ir));
@@ -2272,6 +2347,7 @@ dcopuop:
if (!cpu_has_mips_3_4_5_64_r2_r6)
return SIGILL;
+ MIPS_FPU_EMU_INC_STATS(cvt_l_d);
DPFROMREG(fs, MIPSInst_FS(ir));
rv.l = ieee754dp_tlong(fs);
rfmt = l_fmt;
@@ -2284,6 +2360,15 @@ dcopuop:
if (!cpu_has_mips_3_4_5_64_r2_r6)
return SIGILL;
+ if (MIPSInst_FUNC(ir) == fceill_op)
+ MIPS_FPU_EMU_INC_STATS(ceil_l_d);
+ if (MIPSInst_FUNC(ir) == ffloorl_op)
+ MIPS_FPU_EMU_INC_STATS(floor_l_d);
+ if (MIPSInst_FUNC(ir) == froundl_op)
+ MIPS_FPU_EMU_INC_STATS(round_l_d);
+ if (MIPSInst_FUNC(ir) == ftruncl_op)
+ MIPS_FPU_EMU_INC_STATS(trunc_l_d);
+
oldrm = ieee754_csr.rm;
DPFROMREG(fs, MIPSInst_FS(ir));
ieee754_csr.rm = MIPSInst_FUNC(ir);
@@ -2325,12 +2410,14 @@ dcopuop:
switch (MIPSInst_FUNC(ir)) {
case fcvts_op:
/* convert word to single precision real */
+ MIPS_FPU_EMU_INC_STATS(cvt_s_w);
SPFROMREG(fs, MIPSInst_FS(ir));
rv.s = ieee754sp_fint(fs.bits);
rfmt = s_fmt;
goto copcsr;
case fcvtd_op:
/* convert word to double precision real */
+ MIPS_FPU_EMU_INC_STATS(cvt_d_w);
SPFROMREG(fs, MIPSInst_FS(ir));
rv.d = ieee754dp_fint(fs.bits);
rfmt = d_fmt;
@@ -2350,6 +2437,90 @@ dcopuop:
(MIPSInst_FUNC(ir) & 0x20))
return SIGILL;
+ if (!sig) {
+ if (!(MIPSInst_FUNC(ir) & PREDICATE_BIT)) {
+ switch (cmpop) {
+ case 0:
+ MIPS_FPU_EMU_INC_STATS(cmp_af_s);
+ break;
+ case 1:
+ MIPS_FPU_EMU_INC_STATS(cmp_un_s);
+ break;
+ case 2:
+ MIPS_FPU_EMU_INC_STATS(cmp_eq_s);
+ break;
+ case 3:
+ MIPS_FPU_EMU_INC_STATS(cmp_ueq_s);
+ break;
+ case 4:
+ MIPS_FPU_EMU_INC_STATS(cmp_lt_s);
+ break;
+ case 5:
+ MIPS_FPU_EMU_INC_STATS(cmp_ult_s);
+ break;
+ case 6:
+ MIPS_FPU_EMU_INC_STATS(cmp_le_s);
+ break;
+ case 7:
+ MIPS_FPU_EMU_INC_STATS(cmp_ule_s);
+ break;
+ }
+ } else {
+ switch (cmpop) {
+ case 1:
+ MIPS_FPU_EMU_INC_STATS(cmp_or_s);
+ break;
+ case 2:
+ MIPS_FPU_EMU_INC_STATS(cmp_une_s);
+ break;
+ case 3:
+ MIPS_FPU_EMU_INC_STATS(cmp_ne_s);
+ break;
+ }
+ }
+ } else {
+ if (!(MIPSInst_FUNC(ir) & PREDICATE_BIT)) {
+ switch (cmpop) {
+ case 0:
+ MIPS_FPU_EMU_INC_STATS(cmp_saf_s);
+ break;
+ case 1:
+ MIPS_FPU_EMU_INC_STATS(cmp_sun_s);
+ break;
+ case 2:
+ MIPS_FPU_EMU_INC_STATS(cmp_seq_s);
+ break;
+ case 3:
+ MIPS_FPU_EMU_INC_STATS(cmp_sueq_s);
+ break;
+ case 4:
+ MIPS_FPU_EMU_INC_STATS(cmp_slt_s);
+ break;
+ case 5:
+ MIPS_FPU_EMU_INC_STATS(cmp_sult_s);
+ break;
+ case 6:
+ MIPS_FPU_EMU_INC_STATS(cmp_sle_s);
+ break;
+ case 7:
+ MIPS_FPU_EMU_INC_STATS(cmp_sule_s);
+ break;
+ }
+ } else {
+ switch (cmpop) {
+ case 1:
+ MIPS_FPU_EMU_INC_STATS(cmp_sor_s);
+ break;
+ case 2:
+ MIPS_FPU_EMU_INC_STATS(cmp_sune_s);
+ break;
+ case 3:
+ MIPS_FPU_EMU_INC_STATS(cmp_sne_s);
+ break;
+ }
+ }
+ }
+
/* fmt is w_fmt for single precision so fix it */
rfmt = s_fmt;
/* default to false */
@@ -2394,6 +2565,7 @@ dcopuop:
break;
}
}
+ break;
}
case l_fmt:
@@ -2406,11 +2578,13 @@ dcopuop:
switch (MIPSInst_FUNC(ir)) {
case fcvts_op:
/* convert long to single precision real */
+ MIPS_FPU_EMU_INC_STATS(cvt_s_l);
rv.s = ieee754sp_flong(bits);
rfmt = s_fmt;
goto copcsr;
case fcvtd_op:
/* convert long to double precision real */
+ MIPS_FPU_EMU_INC_STATS(cvt_d_l);
rv.d = ieee754dp_flong(bits);
rfmt = d_fmt;
goto copcsr;
@@ -2424,6 +2598,90 @@ dcopuop:
(MIPSInst_FUNC(ir) & 0x20))
return SIGILL;
+ if (!sig) {
+ if (!(MIPSInst_FUNC(ir) & PREDICATE_BIT)) {
+ switch (cmpop) {
+ case 0:
+ MIPS_FPU_EMU_INC_STATS(cmp_af_d);
+ break;
+ case 1:
+ MIPS_FPU_EMU_INC_STATS(cmp_un_d);
+ break;
+ case 2:
+ MIPS_FPU_EMU_INC_STATS(cmp_eq_d);
+ break;
+ case 3:
+ MIPS_FPU_EMU_INC_STATS(cmp_ueq_d);
+ break;
+ case 4:
+ MIPS_FPU_EMU_INC_STATS(cmp_lt_d);
+ break;
+ case 5:
+ MIPS_FPU_EMU_INC_STATS(cmp_ult_d);
+ break;
+ case 6:
+ MIPS_FPU_EMU_INC_STATS(cmp_le_d);
+ break;
+ case 7:
+ MIPS_FPU_EMU_INC_STATS(cmp_ule_d);
+ break;
+ }
+ } else {
+ switch (cmpop) {
+ case 1:
+ MIPS_FPU_EMU_INC_STATS(cmp_or_d);
+ break;
+ case 2:
+ MIPS_FPU_EMU_INC_STATS(cmp_une_d);
+ break;
+ case 3:
+ MIPS_FPU_EMU_INC_STATS(cmp_ne_d);
+ break;
+ }
+ }
+ } else {
+ if (!(MIPSInst_FUNC(ir) & PREDICATE_BIT)) {
+ switch (cmpop) {
+ case 0:
+ MIPS_FPU_EMU_INC_STATS(cmp_saf_d);
+ break;
+ case 1:
+ MIPS_FPU_EMU_INC_STATS(cmp_sun_d);
+ break;
+ case 2:
+ MIPS_FPU_EMU_INC_STATS(cmp_seq_d);
+ break;
+ case 3:
+ MIPS_FPU_EMU_INC_STATS(cmp_sueq_d);
+ break;
+ case 4:
+ MIPS_FPU_EMU_INC_STATS(cmp_slt_d);
+ break;
+ case 5:
+ MIPS_FPU_EMU_INC_STATS(cmp_sult_d);
+ break;
+ case 6:
+ MIPS_FPU_EMU_INC_STATS(cmp_sle_d);
+ break;
+ case 7:
+ MIPS_FPU_EMU_INC_STATS(cmp_sule_d);
+ break;
+ }
+ } else {
+ switch (cmpop) {
+ case 1:
+ MIPS_FPU_EMU_INC_STATS(cmp_sor_d);
+ break;
+ case 2:
+ MIPS_FPU_EMU_INC_STATS(cmp_sune_d);
+ break;
+ case 3:
+ MIPS_FPU_EMU_INC_STATS(cmp_sne_d);
+ break;
+ }
+ }
+ }
+
/* fmt is l_fmt for double precision so fix it */
rfmt = d_fmt;
/* default to false */
@@ -2468,6 +2726,8 @@ dcopuop:
break;
}
}
+ break;
+
default:
return SIGILL;
}
@@ -2553,7 +2813,7 @@ dcopuop:
* For simplicity we always terminate upon an ISA mode switch.
*/
int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
- int has_fpu, void *__user *fault_addr)
+ int has_fpu, void __user **fault_addr)
{
unsigned long oldepc, prevepc;
struct mm_decoded_insn dec_insn;
diff --git a/arch/mips/math-emu/dp_fmax.c b/arch/mips/math-emu/dp_fmax.c
index fd71b8daaaf2..5bec64f2884e 100644
--- a/arch/mips/math-emu/dp_fmax.c
+++ b/arch/mips/math-emu/dp_fmax.c
@@ -47,14 +47,26 @@ union ieee754dp ieee754dp_fmax(union ieee754dp x, union ieee754dp y)
case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
return ieee754dp_nanxcpt(x);
- /* numbers are preferred to NaNs */
+ /*
+ * Quiet NaN handling
+ */
+
+ /*
+ * The case of both inputs quiet NaNs
+ */
+ case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
+ return x;
+
+ /*
+ * The cases of exactly one input quiet NaN (numbers
+ * are here preferred as returned values to NaNs)
+ */
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
return x;
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
@@ -80,9 +92,7 @@ union ieee754dp ieee754dp_fmax(union ieee754dp x, union ieee754dp y)
return ys ? x : y;
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
- if (xs == ys)
- return x;
- return ieee754dp_zero(1);
+ return ieee754dp_zero(xs & ys);
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
DPDNORMX;
@@ -106,16 +116,32 @@ union ieee754dp ieee754dp_fmax(union ieee754dp x, union ieee754dp y)
else if (xs < ys)
return x;
- /* Compare exponent */
- if (xe > ye)
- return x;
- else if (xe < ye)
- return y;
+ /* Signs of inputs are equal, let's compare exponents */
+ if (xs == 0) {
+ /* Inputs are both positive */
+ if (xe > ye)
+ return x;
+ else if (xe < ye)
+ return y;
+ } else {
+ /* Inputs are both negative */
+ if (xe > ye)
+ return y;
+ else if (xe < ye)
+ return x;
+ }
- /* Compare mantissa */
+ /* Signs and exponents of inputs are equal, let's compare mantissas */
+ if (xs == 0) {
+ /* Inputs are both positive, with equal signs and exponents */
+ if (xm <= ym)
+ return y;
+ return x;
+ }
+ /* Inputs are both negative, with equal signs and exponents */
if (xm <= ym)
- return y;
- return x;
+ return x;
+ return y;
}
union ieee754dp ieee754dp_fmaxa(union ieee754dp x, union ieee754dp y)
@@ -147,14 +173,26 @@ union ieee754dp ieee754dp_fmaxa(union ieee754dp x, union ieee754dp y)
case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
return ieee754dp_nanxcpt(x);
- /* numbers are preferred to NaNs */
+ /*
+ * Quiet NaN handling
+ */
+
+ /*
+ * The case of both inputs quiet NaNs
+ */
+ case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
+ return x;
+
+ /*
+ * The cases of exactly one input quiet NaN (numbers
+ * are here preferred as returned values to NaNs)
+ */
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
return x;
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
@@ -164,6 +202,9 @@ union ieee754dp ieee754dp_fmaxa(union ieee754dp x, union ieee754dp y)
/*
* Infinity and zero handling
*/
+ case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
+ return ieee754dp_inf(xs & ys);
+
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
@@ -171,7 +212,6 @@ union ieee754dp ieee754dp_fmaxa(union ieee754dp x, union ieee754dp y)
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
return x;
- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
@@ -180,9 +220,7 @@ union ieee754dp ieee754dp_fmaxa(union ieee754dp x, union ieee754dp y)
return y;
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
- if (xs == ys)
- return x;
- return ieee754dp_zero(1);
+ return ieee754dp_zero(xs & ys);
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
DPDNORMX;
@@ -207,7 +245,11 @@ union ieee754dp ieee754dp_fmaxa(union ieee754dp x, union ieee754dp y)
return y;
/* Compare mantissa */
- if (xm <= ym)
+ if (xm < ym)
return y;
- return x;
+ else if (xm > ym)
+ return x;
+ else if (xs == 0)
+ return x;
+ return y;
}
diff --git a/arch/mips/math-emu/dp_fmin.c b/arch/mips/math-emu/dp_fmin.c
index c1072b0dfb95..a287b23818d8 100644
--- a/arch/mips/math-emu/dp_fmin.c
+++ b/arch/mips/math-emu/dp_fmin.c
@@ -47,14 +47,26 @@ union ieee754dp ieee754dp_fmin(union ieee754dp x, union ieee754dp y)
case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
return ieee754dp_nanxcpt(x);
- /* numbers are preferred to NaNs */
+ /*
+ * Quiet NaN handling
+ */
+
+ /*
+ * The case of both inputs quiet NaNs
+ */
+ case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
+ return x;
+
+ /*
+ * The cases of exactly one input quiet NaN (numbers
+ * are here preferred as returned values to NaNs)
+ */
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
return x;
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
@@ -80,9 +92,7 @@ union ieee754dp ieee754dp_fmin(union ieee754dp x, union ieee754dp y)
return ys ? y : x;
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
- if (xs == ys)
- return x;
- return ieee754dp_zero(1);
+ return ieee754dp_zero(xs | ys);
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
DPDNORMX;
@@ -106,16 +116,32 @@ union ieee754dp ieee754dp_fmin(union ieee754dp x, union ieee754dp y)
else if (xs < ys)
return y;
- /* Compare exponent */
- if (xe > ye)
- return y;
- else if (xe < ye)
- return x;
+ /* Signs of inputs are the same, let's compare exponents */
+ if (xs == 0) {
+ /* Inputs are both positive */
+ if (xe > ye)
+ return y;
+ else if (xe < ye)
+ return x;
+ } else {
+ /* Inputs are both negative */
+ if (xe > ye)
+ return x;
+ else if (xe < ye)
+ return y;
+ }
- /* Compare mantissa */
+ /* Signs and exponents of inputs are equal, let's compare mantissas */
+ if (xs == 0) {
+ /* Inputs are both positive, with equal signs and exponents */
+ if (xm <= ym)
+ return x;
+ return y;
+ }
+ /* Inputs are both negative, with equal signs and exponents */
if (xm <= ym)
- return x;
- return y;
+ return y;
+ return x;
}
union ieee754dp ieee754dp_fmina(union ieee754dp x, union ieee754dp y)
@@ -147,14 +173,26 @@ union ieee754dp ieee754dp_fmina(union ieee754dp x, union ieee754dp y)
case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
return ieee754dp_nanxcpt(x);
- /* numbers are preferred to NaNs */
+ /*
+ * Quiet NaN handling
+ */
+
+ /*
+ * The case of both inputs quiet NaNs
+ */
+ case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
+ return x;
+
+ /*
+ * The cases of exactly one input quiet NaN (numbers
+ * are here preferred as returned values to NaNs)
+ */
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
return x;
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
@@ -164,25 +202,25 @@ union ieee754dp ieee754dp_fmina(union ieee754dp x, union ieee754dp y)
/*
* Infinity and zero handling
*/
+ case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
+ return ieee754dp_inf(xs | ys);
+
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
- return x;
+ return y;
- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_DNORM):
- return y;
+ return x;
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
- if (xs == ys)
- return x;
- return ieee754dp_zero(1);
+ return ieee754dp_zero(xs | ys);
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
DPDNORMX;
@@ -207,7 +245,11 @@ union ieee754dp ieee754dp_fmina(union ieee754dp x, union ieee754dp y)
return x;
/* Compare mantissa */
- if (xm <= ym)
+ if (xm < ym)
+ return x;
+ else if (xm > ym)
+ return y;
+ else if (xs == 1)
return x;
return y;
}
diff --git a/arch/mips/math-emu/dp_maddf.c b/arch/mips/math-emu/dp_maddf.c
index caa62f20a888..e0d9be5fbf4c 100644
--- a/arch/mips/math-emu/dp_maddf.c
+++ b/arch/mips/math-emu/dp_maddf.c
@@ -14,22 +14,45 @@
#include "ieee754dp.h"
-enum maddf_flags {
- maddf_negate_product = 1 << 0,
-};
+
+/* 128 bits shift right logical with rounding. */
+void srl128(u64 *hptr, u64 *lptr, int count)
+{
+ u64 low;
+
+ if (count >= 128) {
+ *lptr = *hptr != 0 || *lptr != 0;
+ *hptr = 0;
+ } else if (count >= 64) {
+ if (count == 64) {
+ *lptr = *hptr | (*lptr != 0);
+ } else {
+ low = *lptr;
+ *lptr = *hptr >> (count - 64);
+ *lptr |= (*hptr << (128 - count)) != 0 || low != 0;
+ }
+ *hptr = 0;
+ } else {
+ low = *lptr;
+ *lptr = low >> count | *hptr << (64 - count);
+ *lptr |= (low << (64 - count)) != 0;
+ *hptr = *hptr >> count;
+ }
+}
static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
union ieee754dp y, enum maddf_flags flags)
{
int re;
int rs;
- u64 rm;
unsigned lxm;
unsigned hxm;
unsigned lym;
unsigned hym;
u64 lrm;
u64 hrm;
+ u64 lzm;
+ u64 hzm;
u64 t;
u64 at;
int s;
@@ -48,52 +71,34 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
ieee754_clearcx();
- switch (zc) {
- case IEEE754_CLASS_SNAN:
- ieee754_setcx(IEEE754_INVALID_OPERATION);
+ /*
+ * Handle the cases when at least one of x, y or z is a NaN.
+ * Order of precedence is sNaN, qNaN and z, x, y.
+ */
+ if (zc == IEEE754_CLASS_SNAN)
return ieee754dp_nanxcpt(z);
- case IEEE754_CLASS_DNORM:
- DPDNORMZ;
- /* QNAN and ZERO cases are handled separately below */
- }
-
- switch (CLPAIR(xc, yc)) {
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_SNAN):
- return ieee754dp_nanxcpt(y);
-
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_ZERO):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_NORM):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
+ if (xc == IEEE754_CLASS_SNAN)
return ieee754dp_nanxcpt(x);
-
- case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
+ if (yc == IEEE754_CLASS_SNAN)
+ return ieee754dp_nanxcpt(y);
+ if (zc == IEEE754_CLASS_QNAN)
+ return z;
+ if (xc == IEEE754_CLASS_QNAN)
+ return x;
+ if (yc == IEEE754_CLASS_QNAN)
return y;
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_INF):
- return x;
+ if (zc == IEEE754_CLASS_DNORM)
+ DPDNORMZ;
+ /* ZERO z cases are handled separately below */
+ switch (CLPAIR(xc, yc)) {
/*
* Infinity handling
*/
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
ieee754_setcx(IEEE754_INVALID_OPERATION);
return ieee754dp_indef();
@@ -102,9 +107,27 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
- return ieee754dp_inf(xs ^ ys);
+ if ((zc == IEEE754_CLASS_INF) &&
+ ((!(flags & MADDF_NEGATE_PRODUCT) && (zs != (xs ^ ys))) ||
+ ((flags & MADDF_NEGATE_PRODUCT) && (zs == (xs ^ ys))))) {
+ /*
+ * Cases of addition of infinities with opposite signs
+ * or subtraction of infinities with same signs.
+ */
+ ieee754_setcx(IEEE754_INVALID_OPERATION);
+ return ieee754dp_indef();
+ }
+ /*
+ * z is here either not an infinity, or an infinity having the
+ * same sign as product (x*y) (in case of MADDF.D instruction)
+ * or product -(x*y) (in MSUBF.D case). The result must be an
+ * infinity, and its sign is determined only by the value of
+ * (flags & MADDF_NEGATE_PRODUCT) and the signs of x and y.
+ */
+ if (flags & MADDF_NEGATE_PRODUCT)
+ return ieee754dp_inf(1 ^ (xs ^ ys));
+ else
+ return ieee754dp_inf(xs ^ ys);
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
@@ -113,32 +136,42 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
if (zc == IEEE754_CLASS_INF)
return ieee754dp_inf(zs);
- /* Multiplication is 0 so just return z */
+ if (zc == IEEE754_CLASS_ZERO) {
+ /* Handle cases +0 + (-0) and similar ones. */
+ if ((!(flags & MADDF_NEGATE_PRODUCT)
+ && (zs == (xs ^ ys))) ||
+ ((flags & MADDF_NEGATE_PRODUCT)
+ && (zs != (xs ^ ys))))
+ /*
+ * Cases of addition of zeros of equal signs
+ * or subtraction of zeroes of opposite signs.
+ * The sign of the resulting zero is in any
+ * such case determined only by the sign of z.
+ */
+ return z;
+
+ return ieee754dp_zero(ieee754_csr.rm == FPU_CSR_RD);
+ }
+ /* x*y is here 0, and z is not 0, so just return z */
return z;
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
DPDNORMX;
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_DNORM):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
- else if (zc == IEEE754_CLASS_INF)
+ if (zc == IEEE754_CLASS_INF)
return ieee754dp_inf(zs);
DPDNORMY;
break;
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_NORM):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
- else if (zc == IEEE754_CLASS_INF)
+ if (zc == IEEE754_CLASS_INF)
return ieee754dp_inf(zs);
DPDNORMX;
break;
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_NORM):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
- else if (zc == IEEE754_CLASS_INF)
+ if (zc == IEEE754_CLASS_INF)
return ieee754dp_inf(zs);
/* fall through to real computations */
}
@@ -157,7 +190,7 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
re = xe + ye;
rs = xs ^ ys;
- if (flags & maddf_negate_product)
+ if (flags & MADDF_NEGATE_PRODUCT)
rs ^= 1;
/* shunt to top of word */
@@ -165,7 +198,7 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
ym <<= 64 - (DP_FBITS + 1);
/*
- * Multiply 64 bits xm, ym to give high 64 bits rm with stickness.
+ * Multiply 64 bits xm and ym to give 128 bits result in hrm:lrm.
*/
/* 32 * 32 => 64 */
@@ -195,81 +228,110 @@ static union ieee754dp _dp_maddf(union ieee754dp z, union ieee754dp x,
hrm = hrm + (t >> 32);
- rm = hrm | (lrm != 0);
-
- /*
- * Sticky shift down to normal rounding precision.
- */
- if ((s64) rm < 0) {
- rm = (rm >> (64 - (DP_FBITS + 1 + 3))) |
- ((rm << (DP_FBITS + 1 + 3)) != 0);
+ /* Put explicit bit at bit 126 if necessary */
+ if ((int64_t)hrm < 0) {
+ lrm = (hrm << 63) | (lrm >> 1);
+ hrm = hrm >> 1;
re++;
- } else {
- rm = (rm >> (64 - (DP_FBITS + 1 + 3 + 1))) |
- ((rm << (DP_FBITS + 1 + 3 + 1)) != 0);
}
- assert(rm & (DP_HIDDEN_BIT << 3));
- if (zc == IEEE754_CLASS_ZERO)
- return ieee754dp_format(rs, re, rm);
+ assert(hrm & (1 << 62));
- /* And now the addition */
- assert(zm & DP_HIDDEN_BIT);
+ if (zc == IEEE754_CLASS_ZERO) {
+ /*
+ * Move explicit bit from bit 126 to bit 55 since the
+ * ieee754dp_format code expects the mantissa to be
+ * 56 bits wide (53 + 3 rounding bits).
+ */
+ srl128(&hrm, &lrm, (126 - 55));
+ return ieee754dp_format(rs, re, lrm);
+ }
- /*
- * Provide guard,round and stick bit space.
- */
- zm <<= 3;
+ /* Move explicit bit from bit 52 to bit 126 */
+ lzm = 0;
+ hzm = zm << 10;
+ assert(hzm & (1 << 62));
+ /* Make the exponents the same */
if (ze > re) {
/*
* Have to shift y fraction right to align.
*/
s = ze - re;
- rm = XDPSRS(rm, s);
+ srl128(&hrm, &lrm, s);
re += s;
} else if (re > ze) {
/*
* Have to shift x fraction right to align.
*/
s = re - ze;
- zm = XDPSRS(zm, s);
+ srl128(&hzm, &lzm, s);
ze += s;
}
assert(ze == re);
assert(ze <= DP_EMAX);
+ /* Do the addition */
if (zs == rs) {
/*
- * Generate 28 bit result of adding two 27 bit numbers
- * leaving result in xm, xs and xe.
+ * Generate 128 bit result by adding two 127 bit numbers
+ * leaving result in hzm:lzm, zs and ze.
*/
- zm = zm + rm;
-
- if (zm >> (DP_FBITS + 1 + 3)) { /* carry out */
- zm = XDPSRS1(zm);
+ hzm = hzm + hrm + (lzm > (lzm + lrm));
+ lzm = lzm + lrm;
+ if ((int64_t)hzm < 0) { /* carry out */
+ srl128(&hzm, &lzm, 1);
ze++;
}
} else {
- if (zm >= rm) {
- zm = zm - rm;
+ if (hzm > hrm || (hzm == hrm && lzm >= lrm)) {
+ hzm = hzm - hrm - (lzm < lrm);
+ lzm = lzm - lrm;
} else {
- zm = rm - zm;
+ hzm = hrm - hzm - (lrm < lzm);
+ lzm = lrm - lzm;
zs = rs;
}
- if (zm == 0)
+ if (lzm == 0 && hzm == 0)
return ieee754dp_zero(ieee754_csr.rm == FPU_CSR_RD);
/*
- * Normalize to rounding precision.
+ * Put explicit bit at bit 126 if necessary.
*/
- while ((zm >> (DP_FBITS + 3)) == 0) {
- zm <<= 1;
- ze--;
+ if (hzm == 0) {
+ /* left shift by 63 or 64 bits */
+ if ((int64_t)lzm < 0) {
+ /* MSB of lzm is the explicit bit */
+ hzm = lzm >> 1;
+ lzm = lzm << 63;
+ ze -= 63;
+ } else {
+ hzm = lzm;
+ lzm = 0;
+ ze -= 64;
+ }
+ }
+
+ t = 0;
+ while ((hzm >> (62 - t)) == 0)
+ t++;
+
+ assert(t <= 62);
+ if (t) {
+ hzm = hzm << t | lzm >> (64 - t);
+ lzm = lzm << t;
+ ze -= t;
}
}
- return ieee754dp_format(zs, ze, zm);
+ /*
+ * Move explicit bit from bit 126 to bit 55 since the
+ * ieee754dp_format code expects the mantissa to be
+ * 56 bits wide (53 + 3 rounding bits).
+ */
+ srl128(&hzm, &lzm, (126 - 55));
+
+ return ieee754dp_format(zs, ze, lzm);
}
union ieee754dp ieee754dp_maddf(union ieee754dp z, union ieee754dp x,
@@ -281,5 +343,5 @@ union ieee754dp ieee754dp_maddf(union ieee754dp z, union ieee754dp x,
union ieee754dp ieee754dp_msubf(union ieee754dp z, union ieee754dp x,
union ieee754dp y)
{
- return _dp_maddf(z, x, y, maddf_negate_product);
+ return _dp_maddf(z, x, y, MADDF_NEGATE_PRODUCT);
}
diff --git a/arch/mips/math-emu/dp_rint.c b/arch/mips/math-emu/dp_rint.c
new file mode 100644
index 000000000000..c3b9077ff357
--- /dev/null
+++ b/arch/mips/math-emu/dp_rint.c
@@ -0,0 +1,89 @@
+/* IEEE754 floating point arithmetic
+ * double precision: common utilities
+ */
+/*
+ * MIPS floating point support
+ * Copyright (C) 1994-2000 Algorithmics Ltd.
+ * Copyright (C) 2017 Imagination Technologies, Ltd.
+ * Author: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
+ *
+ * This program is free software; you can distribute it and/or modify it
+ * under the terms of the GNU General Public License (Version 2) as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.
+ */
+
+#include "ieee754dp.h"
+
+union ieee754dp ieee754dp_rint(union ieee754dp x)
+{
+ union ieee754dp ret;
+ u64 residue;
+ int sticky;
+ int round;
+ int odd;
+
+ COMPXDP;
+
+ ieee754_clearcx();
+
+ EXPLODEXDP;
+ FLUSHXDP;
+
+ if (xc == IEEE754_CLASS_SNAN)
+ return ieee754dp_nanxcpt(x);
+
+ if ((xc == IEEE754_CLASS_QNAN) ||
+ (xc == IEEE754_CLASS_INF) ||
+ (xc == IEEE754_CLASS_ZERO))
+ return x;
+
+ if (xe >= DP_FBITS)
+ return x;
+
+ if (xe < -1) {
+ residue = xm;
+ round = 0;
+ sticky = residue != 0;
+ xm = 0;
+ } else {
+ residue = xm << (64 - DP_FBITS + xe);
+ round = (residue >> 63) != 0;
+ sticky = (residue << 1) != 0;
+ xm >>= DP_FBITS - xe;
+ }
+
+ odd = (xm & 0x1) != 0x0;
+
+ switch (ieee754_csr.rm) {
+ case FPU_CSR_RN: /* toward nearest */
+ if (round && (sticky || odd))
+ xm++;
+ break;
+ case FPU_CSR_RZ: /* toward zero */
+ break;
+ case FPU_CSR_RU: /* toward +infinity */
+ if ((round || sticky) && !xs)
+ xm++;
+ break;
+ case FPU_CSR_RD: /* toward -infinity */
+ if ((round || sticky) && xs)
+ xm++;
+ break;
+ }
+
+ if (round || sticky)
+ ieee754_setcx(IEEE754_INEXACT);
+
+ ret = ieee754dp_flong(xm);
+ DPSIGN(ret) = xs;
+
+ return ret;
+}
diff --git a/arch/mips/math-emu/ieee754.h b/arch/mips/math-emu/ieee754.h
index d3be351aed15..92dc8fa565cb 100644
--- a/arch/mips/math-emu/ieee754.h
+++ b/arch/mips/math-emu/ieee754.h
@@ -67,6 +67,7 @@ union ieee754sp ieee754sp_div(union ieee754sp x, union ieee754sp y);
union ieee754sp ieee754sp_fint(int x);
union ieee754sp ieee754sp_flong(s64 x);
union ieee754sp ieee754sp_fdp(union ieee754dp x);
+union ieee754sp ieee754sp_rint(union ieee754sp x);
int ieee754sp_tint(union ieee754sp x);
s64 ieee754sp_tlong(union ieee754sp x);
@@ -101,6 +102,7 @@ union ieee754dp ieee754dp_neg(union ieee754dp x);
union ieee754dp ieee754dp_fint(int x);
union ieee754dp ieee754dp_flong(s64 x);
union ieee754dp ieee754dp_fsp(union ieee754sp x);
+union ieee754dp ieee754dp_rint(union ieee754dp x);
int ieee754dp_tint(union ieee754dp x);
s64 ieee754dp_tlong(union ieee754dp x);
diff --git a/arch/mips/math-emu/ieee754int.h b/arch/mips/math-emu/ieee754int.h
index 8bc2f6963324..dd2071f430e0 100644
--- a/arch/mips/math-emu/ieee754int.h
+++ b/arch/mips/math-emu/ieee754int.h
@@ -26,6 +26,10 @@
#define CLPAIR(x, y) ((x)*6+(y))
+enum maddf_flags {
+ MADDF_NEGATE_PRODUCT = 1 << 0,
+};
+
static inline void ieee754_clearcx(void)
{
ieee754_csr.cx = 0;
diff --git a/arch/mips/math-emu/ieee754sp.h b/arch/mips/math-emu/ieee754sp.h
index 8476067075fe..0f63e4202cff 100644
--- a/arch/mips/math-emu/ieee754sp.h
+++ b/arch/mips/math-emu/ieee754sp.h
@@ -45,6 +45,10 @@ static inline int ieee754sp_finite(union ieee754sp x)
return SPBEXP(x) != SP_EMAX + 1 + SP_EBIAS;
}
+/* 64 bit right shift with rounding */
+#define XSPSRS64(v, rs) \
+ (((rs) >= 64) ? ((v) != 0) : ((v) >> (rs)) | ((v) << (64-(rs)) != 0))
+
/* 3bit extended single precision sticky right shift */
#define XSPSRS(v, rs) \
((rs > (SP_FBITS+3))?1:((v) >> (rs)) | ((v) << (32-(rs)) != 0))
diff --git a/arch/mips/math-emu/me-debugfs.c b/arch/mips/math-emu/me-debugfs.c
index be650ed7db59..8c0ec154aecc 100644
--- a/arch/mips/math-emu/me-debugfs.c
+++ b/arch/mips/math-emu/me-debugfs.c
@@ -28,14 +28,190 @@ static int fpuemu_stat_get(void *data, u64 *val)
}
DEFINE_SIMPLE_ATTRIBUTE(fops_fpuemu_stat, fpuemu_stat_get, NULL, "%llu\n");
+/*
+ * Used to obtain names for a debugfs instruction counter, given field name
+ * in fpuemustats structure. For example, for input "cmp_sueq_d", the output
+ * would be "cmp.sueq.d". This is needed since dots are not allowed to be
+ * used in structure field names, and are, on the other hand, desired to be
+ * used in debugfs item names to be clearly associated to corresponding
+ * MIPS FPU instructions.
+ */
+static void adjust_instruction_counter_name(char *out_name, char *in_name)
+{
+ int i = 0;
+
+ strcpy(out_name, in_name);
+ while (in_name[i] != '\0') {
+ if (out_name[i] == '_')
+ out_name[i] = '.';
+ i++;
+ }
+}
+
+static int fpuemustats_clear_show(struct seq_file *s, void *unused)
+{
+ __this_cpu_write((fpuemustats).emulated, 0);
+ __this_cpu_write((fpuemustats).loads, 0);
+ __this_cpu_write((fpuemustats).stores, 0);
+ __this_cpu_write((fpuemustats).branches, 0);
+ __this_cpu_write((fpuemustats).cp1ops, 0);
+ __this_cpu_write((fpuemustats).cp1xops, 0);
+ __this_cpu_write((fpuemustats).errors, 0);
+ __this_cpu_write((fpuemustats).ieee754_inexact, 0);
+ __this_cpu_write((fpuemustats).ieee754_underflow, 0);
+ __this_cpu_write((fpuemustats).ieee754_overflow, 0);
+ __this_cpu_write((fpuemustats).ieee754_zerodiv, 0);
+ __this_cpu_write((fpuemustats).ieee754_invalidop, 0);
+ __this_cpu_write((fpuemustats).ds_emul, 0);
+
+ __this_cpu_write((fpuemustats).abs_s, 0);
+ __this_cpu_write((fpuemustats).abs_d, 0);
+ __this_cpu_write((fpuemustats).add_s, 0);
+ __this_cpu_write((fpuemustats).add_d, 0);
+ __this_cpu_write((fpuemustats).bc1eqz, 0);
+ __this_cpu_write((fpuemustats).bc1nez, 0);
+ __this_cpu_write((fpuemustats).ceil_w_s, 0);
+ __this_cpu_write((fpuemustats).ceil_w_d, 0);
+ __this_cpu_write((fpuemustats).ceil_l_s, 0);
+ __this_cpu_write((fpuemustats).ceil_l_d, 0);
+ __this_cpu_write((fpuemustats).class_s, 0);
+ __this_cpu_write((fpuemustats).class_d, 0);
+ __this_cpu_write((fpuemustats).cmp_af_s, 0);
+ __this_cpu_write((fpuemustats).cmp_af_d, 0);
+ __this_cpu_write((fpuemustats).cmp_eq_s, 0);
+ __this_cpu_write((fpuemustats).cmp_eq_d, 0);
+ __this_cpu_write((fpuemustats).cmp_le_s, 0);
+ __this_cpu_write((fpuemustats).cmp_le_d, 0);
+ __this_cpu_write((fpuemustats).cmp_lt_s, 0);
+ __this_cpu_write((fpuemustats).cmp_lt_d, 0);
+ __this_cpu_write((fpuemustats).cmp_ne_s, 0);
+ __this_cpu_write((fpuemustats).cmp_ne_d, 0);
+ __this_cpu_write((fpuemustats).cmp_or_s, 0);
+ __this_cpu_write((fpuemustats).cmp_or_d, 0);
+ __this_cpu_write((fpuemustats).cmp_ueq_s, 0);
+ __this_cpu_write((fpuemustats).cmp_ueq_d, 0);
+ __this_cpu_write((fpuemustats).cmp_ule_s, 0);
+ __this_cpu_write((fpuemustats).cmp_ule_d, 0);
+ __this_cpu_write((fpuemustats).cmp_ult_s, 0);
+ __this_cpu_write((fpuemustats).cmp_ult_d, 0);
+ __this_cpu_write((fpuemustats).cmp_un_s, 0);
+ __this_cpu_write((fpuemustats).cmp_un_d, 0);
+ __this_cpu_write((fpuemustats).cmp_une_s, 0);
+ __this_cpu_write((fpuemustats).cmp_une_d, 0);
+ __this_cpu_write((fpuemustats).cmp_saf_s, 0);
+ __this_cpu_write((fpuemustats).cmp_saf_d, 0);
+ __this_cpu_write((fpuemustats).cmp_seq_s, 0);
+ __this_cpu_write((fpuemustats).cmp_seq_d, 0);
+ __this_cpu_write((fpuemustats).cmp_sle_s, 0);
+ __this_cpu_write((fpuemustats).cmp_sle_d, 0);
+ __this_cpu_write((fpuemustats).cmp_slt_s, 0);
+ __this_cpu_write((fpuemustats).cmp_slt_d, 0);
+ __this_cpu_write((fpuemustats).cmp_sne_s, 0);
+ __this_cpu_write((fpuemustats).cmp_sne_d, 0);
+ __this_cpu_write((fpuemustats).cmp_sor_s, 0);
+ __this_cpu_write((fpuemustats).cmp_sor_d, 0);
+ __this_cpu_write((fpuemustats).cmp_sueq_s, 0);
+ __this_cpu_write((fpuemustats).cmp_sueq_d, 0);
+ __this_cpu_write((fpuemustats).cmp_sule_s, 0);
+ __this_cpu_write((fpuemustats).cmp_sule_d, 0);
+ __this_cpu_write((fpuemustats).cmp_sult_s, 0);
+ __this_cpu_write((fpuemustats).cmp_sult_d, 0);
+ __this_cpu_write((fpuemustats).cmp_sun_s, 0);
+ __this_cpu_write((fpuemustats).cmp_sun_d, 0);
+ __this_cpu_write((fpuemustats).cmp_sune_s, 0);
+ __this_cpu_write((fpuemustats).cmp_sune_d, 0);
+ __this_cpu_write((fpuemustats).cvt_d_l, 0);
+ __this_cpu_write((fpuemustats).cvt_d_s, 0);
+ __this_cpu_write((fpuemustats).cvt_d_w, 0);
+ __this_cpu_write((fpuemustats).cvt_l_s, 0);
+ __this_cpu_write((fpuemustats).cvt_l_d, 0);
+ __this_cpu_write((fpuemustats).cvt_s_d, 0);
+ __this_cpu_write((fpuemustats).cvt_s_l, 0);
+ __this_cpu_write((fpuemustats).cvt_s_w, 0);
+ __this_cpu_write((fpuemustats).cvt_w_s, 0);
+ __this_cpu_write((fpuemustats).cvt_w_d, 0);
+ __this_cpu_write((fpuemustats).div_s, 0);
+ __this_cpu_write((fpuemustats).div_d, 0);
+ __this_cpu_write((fpuemustats).floor_w_s, 0);
+ __this_cpu_write((fpuemustats).floor_w_d, 0);
+ __this_cpu_write((fpuemustats).floor_l_s, 0);
+ __this_cpu_write((fpuemustats).floor_l_d, 0);
+ __this_cpu_write((fpuemustats).maddf_s, 0);
+ __this_cpu_write((fpuemustats).maddf_d, 0);
+ __this_cpu_write((fpuemustats).max_s, 0);
+ __this_cpu_write((fpuemustats).max_d, 0);
+ __this_cpu_write((fpuemustats).maxa_s, 0);
+ __this_cpu_write((fpuemustats).maxa_d, 0);
+ __this_cpu_write((fpuemustats).min_s, 0);
+ __this_cpu_write((fpuemustats).min_d, 0);
+ __this_cpu_write((fpuemustats).mina_s, 0);
+ __this_cpu_write((fpuemustats).mina_d, 0);
+ __this_cpu_write((fpuemustats).mov_s, 0);
+ __this_cpu_write((fpuemustats).mov_d, 0);
+ __this_cpu_write((fpuemustats).msubf_s, 0);
+ __this_cpu_write((fpuemustats).msubf_d, 0);
+ __this_cpu_write((fpuemustats).mul_s, 0);
+ __this_cpu_write((fpuemustats).mul_d, 0);
+ __this_cpu_write((fpuemustats).neg_s, 0);
+ __this_cpu_write((fpuemustats).neg_d, 0);
+ __this_cpu_write((fpuemustats).recip_s, 0);
+ __this_cpu_write((fpuemustats).recip_d, 0);
+ __this_cpu_write((fpuemustats).rint_s, 0);
+ __this_cpu_write((fpuemustats).rint_d, 0);
+ __this_cpu_write((fpuemustats).round_w_s, 0);
+ __this_cpu_write((fpuemustats).round_w_d, 0);
+ __this_cpu_write((fpuemustats).round_l_s, 0);
+ __this_cpu_write((fpuemustats).round_l_d, 0);
+ __this_cpu_write((fpuemustats).rsqrt_s, 0);
+ __this_cpu_write((fpuemustats).rsqrt_d, 0);
+ __this_cpu_write((fpuemustats).sel_s, 0);
+ __this_cpu_write((fpuemustats).sel_d, 0);
+ __this_cpu_write((fpuemustats).seleqz_s, 0);
+ __this_cpu_write((fpuemustats).seleqz_d, 0);
+ __this_cpu_write((fpuemustats).selnez_s, 0);
+ __this_cpu_write((fpuemustats).selnez_d, 0);
+ __this_cpu_write((fpuemustats).sqrt_s, 0);
+ __this_cpu_write((fpuemustats).sqrt_d, 0);
+ __this_cpu_write((fpuemustats).sub_s, 0);
+ __this_cpu_write((fpuemustats).sub_d, 0);
+ __this_cpu_write((fpuemustats).trunc_w_s, 0);
+ __this_cpu_write((fpuemustats).trunc_w_d, 0);
+ __this_cpu_write((fpuemustats).trunc_l_s, 0);
+ __this_cpu_write((fpuemustats).trunc_l_d, 0);
+
+ return 0;
+}
+
+static int fpuemustats_clear_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, fpuemustats_clear_show, inode->i_private);
+}
+
+static const struct file_operations fpuemustats_clear_fops = {
+ .open = fpuemustats_clear_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+};
+
static int __init debugfs_fpuemu(void)
{
- struct dentry *d, *dir;
+ struct dentry *fpuemu_debugfs_base_dir;
+ struct dentry *fpuemu_debugfs_inst_dir;
+ struct dentry *d, *reset_file;
if (!mips_debugfs_dir)
return -ENODEV;
- dir = debugfs_create_dir("fpuemustats", mips_debugfs_dir);
- if (!dir)
+
+ fpuemu_debugfs_base_dir = debugfs_create_dir("fpuemustats",
+ mips_debugfs_dir);
+ if (!fpuemu_debugfs_base_dir)
+ return -ENOMEM;
+
+ reset_file = debugfs_create_file("fpuemustats_clear", 0444,
+ mips_debugfs_dir, NULL,
+ &fpuemustats_clear_fops);
+ if (!reset_file)
return -ENOMEM;
#define FPU_EMU_STAT_OFFSET(m) \
@@ -43,7 +219,7 @@ static int __init debugfs_fpuemu(void)
#define FPU_STAT_CREATE(m) \
do { \
- d = debugfs_create_file(#m , S_IRUGO, dir, \
+ d = debugfs_create_file(#m, 0444, fpuemu_debugfs_base_dir, \
(void *)FPU_EMU_STAT_OFFSET(m), \
&fops_fpuemu_stat); \
if (!d) \
@@ -53,6 +229,7 @@ do { \
FPU_STAT_CREATE(emulated);
FPU_STAT_CREATE(loads);
FPU_STAT_CREATE(stores);
+ FPU_STAT_CREATE(branches);
FPU_STAT_CREATE(cp1ops);
FPU_STAT_CREATE(cp1xops);
FPU_STAT_CREATE(errors);
@@ -63,6 +240,139 @@ do { \
FPU_STAT_CREATE(ieee754_invalidop);
FPU_STAT_CREATE(ds_emul);
+ fpuemu_debugfs_inst_dir = debugfs_create_dir("instructions",
+ fpuemu_debugfs_base_dir);
+ if (!fpuemu_debugfs_inst_dir)
+ return -ENOMEM;
+
+#define FPU_STAT_CREATE_EX(m) \
+do { \
+ char name[32]; \
+ \
+ adjust_instruction_counter_name(name, #m); \
+ \
+ d = debugfs_create_file(name, 0444, fpuemu_debugfs_inst_dir, \
+ (void *)FPU_EMU_STAT_OFFSET(m), \
+ &fops_fpuemu_stat); \
+ if (!d) \
+ return -ENOMEM; \
+} while (0)
+
+ FPU_STAT_CREATE_EX(abs_s);
+ FPU_STAT_CREATE_EX(abs_d);
+ FPU_STAT_CREATE_EX(add_s);
+ FPU_STAT_CREATE_EX(add_d);
+ FPU_STAT_CREATE_EX(bc1eqz);
+ FPU_STAT_CREATE_EX(bc1nez);
+ FPU_STAT_CREATE_EX(ceil_w_s);
+ FPU_STAT_CREATE_EX(ceil_w_d);
+ FPU_STAT_CREATE_EX(ceil_l_s);
+ FPU_STAT_CREATE_EX(ceil_l_d);
+ FPU_STAT_CREATE_EX(class_s);
+ FPU_STAT_CREATE_EX(class_d);
+ FPU_STAT_CREATE_EX(cmp_af_s);
+ FPU_STAT_CREATE_EX(cmp_af_d);
+ FPU_STAT_CREATE_EX(cmp_eq_s);
+ FPU_STAT_CREATE_EX(cmp_eq_d);
+ FPU_STAT_CREATE_EX(cmp_le_s);
+ FPU_STAT_CREATE_EX(cmp_le_d);
+ FPU_STAT_CREATE_EX(cmp_lt_s);
+ FPU_STAT_CREATE_EX(cmp_lt_d);
+ FPU_STAT_CREATE_EX(cmp_ne_s);
+ FPU_STAT_CREATE_EX(cmp_ne_d);
+ FPU_STAT_CREATE_EX(cmp_or_s);
+ FPU_STAT_CREATE_EX(cmp_or_d);
+ FPU_STAT_CREATE_EX(cmp_ueq_s);
+ FPU_STAT_CREATE_EX(cmp_ueq_d);
+ FPU_STAT_CREATE_EX(cmp_ule_s);
+ FPU_STAT_CREATE_EX(cmp_ule_d);
+ FPU_STAT_CREATE_EX(cmp_ult_s);
+ FPU_STAT_CREATE_EX(cmp_ult_d);
+ FPU_STAT_CREATE_EX(cmp_un_s);
+ FPU_STAT_CREATE_EX(cmp_un_d);
+ FPU_STAT_CREATE_EX(cmp_une_s);
+ FPU_STAT_CREATE_EX(cmp_une_d);
+ FPU_STAT_CREATE_EX(cmp_saf_s);
+ FPU_STAT_CREATE_EX(cmp_saf_d);
+ FPU_STAT_CREATE_EX(cmp_seq_s);
+ FPU_STAT_CREATE_EX(cmp_seq_d);
+ FPU_STAT_CREATE_EX(cmp_sle_s);
+ FPU_STAT_CREATE_EX(cmp_sle_d);
+ FPU_STAT_CREATE_EX(cmp_slt_s);
+ FPU_STAT_CREATE_EX(cmp_slt_d);
+ FPU_STAT_CREATE_EX(cmp_sne_s);
+ FPU_STAT_CREATE_EX(cmp_sne_d);
+ FPU_STAT_CREATE_EX(cmp_sor_s);
+ FPU_STAT_CREATE_EX(cmp_sor_d);
+ FPU_STAT_CREATE_EX(cmp_sueq_s);
+ FPU_STAT_CREATE_EX(cmp_sueq_d);
+ FPU_STAT_CREATE_EX(cmp_sule_s);
+ FPU_STAT_CREATE_EX(cmp_sule_d);
+ FPU_STAT_CREATE_EX(cmp_sult_s);
+ FPU_STAT_CREATE_EX(cmp_sult_d);
+ FPU_STAT_CREATE_EX(cmp_sun_s);
+ FPU_STAT_CREATE_EX(cmp_sun_d);
+ FPU_STAT_CREATE_EX(cmp_sune_s);
+ FPU_STAT_CREATE_EX(cmp_sune_d);
+ FPU_STAT_CREATE_EX(cvt_d_l);
+ FPU_STAT_CREATE_EX(cvt_d_s);
+ FPU_STAT_CREATE_EX(cvt_d_w);
+ FPU_STAT_CREATE_EX(cvt_l_s);
+ FPU_STAT_CREATE_EX(cvt_l_d);
+ FPU_STAT_CREATE_EX(cvt_s_d);
+ FPU_STAT_CREATE_EX(cvt_s_l);
+ FPU_STAT_CREATE_EX(cvt_s_w);
+ FPU_STAT_CREATE_EX(cvt_w_s);
+ FPU_STAT_CREATE_EX(cvt_w_d);
+ FPU_STAT_CREATE_EX(div_s);
+ FPU_STAT_CREATE_EX(div_d);
+ FPU_STAT_CREATE_EX(floor_w_s);
+ FPU_STAT_CREATE_EX(floor_w_d);
+ FPU_STAT_CREATE_EX(floor_l_s);
+ FPU_STAT_CREATE_EX(floor_l_d);
+ FPU_STAT_CREATE_EX(maddf_s);
+ FPU_STAT_CREATE_EX(maddf_d);
+ FPU_STAT_CREATE_EX(max_s);
+ FPU_STAT_CREATE_EX(max_d);
+ FPU_STAT_CREATE_EX(maxa_s);
+ FPU_STAT_CREATE_EX(maxa_d);
+ FPU_STAT_CREATE_EX(min_s);
+ FPU_STAT_CREATE_EX(min_d);
+ FPU_STAT_CREATE_EX(mina_s);
+ FPU_STAT_CREATE_EX(mina_d);
+ FPU_STAT_CREATE_EX(mov_s);
+ FPU_STAT_CREATE_EX(mov_d);
+ FPU_STAT_CREATE_EX(msubf_s);
+ FPU_STAT_CREATE_EX(msubf_d);
+ FPU_STAT_CREATE_EX(mul_s);
+ FPU_STAT_CREATE_EX(mul_d);
+ FPU_STAT_CREATE_EX(neg_s);
+ FPU_STAT_CREATE_EX(neg_d);
+ FPU_STAT_CREATE_EX(recip_s);
+ FPU_STAT_CREATE_EX(recip_d);
+ FPU_STAT_CREATE_EX(rint_s);
+ FPU_STAT_CREATE_EX(rint_d);
+ FPU_STAT_CREATE_EX(round_w_s);
+ FPU_STAT_CREATE_EX(round_w_d);
+ FPU_STAT_CREATE_EX(round_l_s);
+ FPU_STAT_CREATE_EX(round_l_d);
+ FPU_STAT_CREATE_EX(rsqrt_s);
+ FPU_STAT_CREATE_EX(rsqrt_d);
+ FPU_STAT_CREATE_EX(sel_s);
+ FPU_STAT_CREATE_EX(sel_d);
+ FPU_STAT_CREATE_EX(seleqz_s);
+ FPU_STAT_CREATE_EX(seleqz_d);
+ FPU_STAT_CREATE_EX(selnez_s);
+ FPU_STAT_CREATE_EX(selnez_d);
+ FPU_STAT_CREATE_EX(sqrt_s);
+ FPU_STAT_CREATE_EX(sqrt_d);
+ FPU_STAT_CREATE_EX(sub_s);
+ FPU_STAT_CREATE_EX(sub_d);
+ FPU_STAT_CREATE_EX(trunc_w_s);
+ FPU_STAT_CREATE_EX(trunc_w_d);
+ FPU_STAT_CREATE_EX(trunc_l_s);
+ FPU_STAT_CREATE_EX(trunc_l_d);
+
return 0;
}
arch_initcall(debugfs_fpuemu);
diff --git a/arch/mips/math-emu/sp_fmax.c b/arch/mips/math-emu/sp_fmax.c
index 4d000844e48e..74a5a00d2f22 100644
--- a/arch/mips/math-emu/sp_fmax.c
+++ b/arch/mips/math-emu/sp_fmax.c
@@ -47,14 +47,26 @@ union ieee754sp ieee754sp_fmax(union ieee754sp x, union ieee754sp y)
case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
return ieee754sp_nanxcpt(x);
- /* numbers are preferred to NaNs */
+ /*
+ * Quiet NaN handling
+ */
+
+ /*
+ * The case of both inputs quiet NaNs
+ */
+ case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
+ return x;
+
+ /*
+ * The cases of exactly one input quiet NaN (numbers
+ * are here preferred as returned values to NaNs)
+ */
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
return x;
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
@@ -80,9 +92,7 @@ union ieee754sp ieee754sp_fmax(union ieee754sp x, union ieee754sp y)
return ys ? x : y;
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
- if (xs == ys)
- return x;
- return ieee754sp_zero(1);
+ return ieee754sp_zero(xs & ys);
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
SPDNORMX;
@@ -106,16 +116,32 @@ union ieee754sp ieee754sp_fmax(union ieee754sp x, union ieee754sp y)
else if (xs < ys)
return x;
- /* Compare exponent */
- if (xe > ye)
- return x;
- else if (xe < ye)
- return y;
+ /* Signs of inputs are equal, let's compare exponents */
+ if (xs == 0) {
+ /* Inputs are both positive */
+ if (xe > ye)
+ return x;
+ else if (xe < ye)
+ return y;
+ } else {
+ /* Inputs are both negative */
+ if (xe > ye)
+ return y;
+ else if (xe < ye)
+ return x;
+ }
- /* Compare mantissa */
+ /* Signs and exponents of inputs are equal, let's compare mantissas */
+ if (xs == 0) {
+ /* Inputs are both positive, with equal signs and exponents */
+ if (xm <= ym)
+ return y;
+ return x;
+ }
+ /* Inputs are both negative, with equal signs and exponents */
if (xm <= ym)
- return y;
- return x;
+ return x;
+ return y;
}
union ieee754sp ieee754sp_fmaxa(union ieee754sp x, union ieee754sp y)
@@ -147,14 +173,26 @@ union ieee754sp ieee754sp_fmaxa(union ieee754sp x, union ieee754sp y)
case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
return ieee754sp_nanxcpt(x);
- /* numbers are preferred to NaNs */
+ /*
+ * Quiet NaN handling
+ */
+
+ /*
+ * The case of both inputs quiet NaNs
+ */
+ case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
+ return x;
+
+ /*
+ * The cases of exactly one input quiet NaN (numbers
+ * are here preferred as returned values to NaNs)
+ */
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
return x;
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
@@ -164,6 +202,9 @@ union ieee754sp ieee754sp_fmaxa(union ieee754sp x, union ieee754sp y)
/*
* Infinity and zero handling
*/
+ case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
+ return ieee754sp_inf(xs & ys);
+
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
@@ -171,7 +212,6 @@ union ieee754sp ieee754sp_fmaxa(union ieee754sp x, union ieee754sp y)
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
return x;
- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
@@ -180,9 +220,7 @@ union ieee754sp ieee754sp_fmaxa(union ieee754sp x, union ieee754sp y)
return y;
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
- if (xs == ys)
- return x;
- return ieee754sp_zero(1);
+ return ieee754sp_zero(xs & ys);
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
SPDNORMX;
@@ -207,7 +245,11 @@ union ieee754sp ieee754sp_fmaxa(union ieee754sp x, union ieee754sp y)
return y;
/* Compare mantissa */
- if (xm <= ym)
+ if (xm < ym)
return y;
- return x;
+ else if (xm > ym)
+ return x;
+ else if (xs == 0)
+ return x;
+ return y;
}
diff --git a/arch/mips/math-emu/sp_fmin.c b/arch/mips/math-emu/sp_fmin.c
index 4eb1bb9e9dec..c51385f46b09 100644
--- a/arch/mips/math-emu/sp_fmin.c
+++ b/arch/mips/math-emu/sp_fmin.c
@@ -47,14 +47,26 @@ union ieee754sp ieee754sp_fmin(union ieee754sp x, union ieee754sp y)
case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
return ieee754sp_nanxcpt(x);
- /* numbers are preferred to NaNs */
+ /*
+ * Quiet NaN handling
+ */
+
+ /*
+ * The case of both inputs quiet NaNs
+ */
+ case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
+ return x;
+
+ /*
+ * The cases of exactly one input quiet NaN (numbers
+ * are here preferred as returned values to NaNs)
+ */
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
return x;
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
@@ -80,9 +92,7 @@ union ieee754sp ieee754sp_fmin(union ieee754sp x, union ieee754sp y)
return ys ? y : x;
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
- if (xs == ys)
- return x;
- return ieee754sp_zero(1);
+ return ieee754sp_zero(xs | ys);
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
SPDNORMX;
@@ -106,16 +116,32 @@ union ieee754sp ieee754sp_fmin(union ieee754sp x, union ieee754sp y)
else if (xs < ys)
return y;
- /* Compare exponent */
- if (xe > ye)
- return y;
- else if (xe < ye)
- return x;
+ /* Signs of inputs are the same, let's compare exponents */
+ if (xs == 0) {
+ /* Inputs are both positive */
+ if (xe > ye)
+ return y;
+ else if (xe < ye)
+ return x;
+ } else {
+ /* Inputs are both negative */
+ if (xe > ye)
+ return x;
+ else if (xe < ye)
+ return y;
+ }
- /* Compare mantissa */
+ /* Signs and exponents of inputs are equal, let's compare mantissas */
+ if (xs == 0) {
+ /* Inputs are both positive, with equal signs and exponents */
+ if (xm <= ym)
+ return x;
+ return y;
+ }
+ /* Inputs are both negative, with equal signs and exponents */
if (xm <= ym)
- return x;
- return y;
+ return y;
+ return x;
}
union ieee754sp ieee754sp_fmina(union ieee754sp x, union ieee754sp y)
@@ -147,14 +173,26 @@ union ieee754sp ieee754sp_fmina(union ieee754sp x, union ieee754sp y)
case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
return ieee754sp_nanxcpt(x);
- /* numbers are preferred to NaNs */
+ /*
+ * Quiet NaN handling
+ */
+
+ /*
+ * The case of both inputs quiet NaNs
+ */
+ case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
+ return x;
+
+ /*
+ * The cases of exactly one input quiet NaN (numbers
+ * are here preferred as returned values to NaNs)
+ */
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
return x;
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
@@ -164,25 +202,25 @@ union ieee754sp ieee754sp_fmina(union ieee754sp x, union ieee754sp y)
/*
* Infinity and zero handling
*/
+ case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
+ return ieee754sp_inf(xs | ys);
+
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
- return x;
+ return y;
- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_DNORM):
- return y;
+ return x;
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
- if (xs == ys)
- return x;
- return ieee754sp_zero(1);
+ return ieee754sp_zero(xs | ys);
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
SPDNORMX;
@@ -207,7 +245,11 @@ union ieee754sp ieee754sp_fmina(union ieee754sp x, union ieee754sp y)
return x;
/* Compare mantissa */
- if (xm <= ym)
+ if (xm < ym)
+ return x;
+ else if (xm > ym)
+ return y;
+ else if (xs == 1)
return x;
return y;
}
diff --git a/arch/mips/math-emu/sp_maddf.c b/arch/mips/math-emu/sp_maddf.c
index c91d5e5d9b5f..7195fe785d81 100644
--- a/arch/mips/math-emu/sp_maddf.c
+++ b/arch/mips/math-emu/sp_maddf.c
@@ -14,9 +14,6 @@
#include "ieee754sp.h"
-enum maddf_flags {
- maddf_negate_product = 1 << 0,
-};
static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
union ieee754sp y, enum maddf_flags flags)
@@ -24,14 +21,8 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
int re;
int rs;
unsigned rm;
- unsigned short lxm;
- unsigned short hxm;
- unsigned short lym;
- unsigned short hym;
- unsigned lrm;
- unsigned hrm;
- unsigned t;
- unsigned at;
+ uint64_t rm64;
+ uint64_t zm64;
int s;
COMPXSP;
@@ -48,51 +39,35 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
ieee754_clearcx();
- switch (zc) {
- case IEEE754_CLASS_SNAN:
- ieee754_setcx(IEEE754_INVALID_OPERATION);
+ /*
+ * Handle the cases when at least one of x, y or z is a NaN.
+ * Order of precedence is sNaN, qNaN and z, x, y.
+ */
+ if (zc == IEEE754_CLASS_SNAN)
return ieee754sp_nanxcpt(z);
- case IEEE754_CLASS_DNORM:
- SPDNORMZ;
- /* QNAN and ZERO cases are handled separately below */
- }
-
- switch (CLPAIR(xc, yc)) {
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_SNAN):
+ if (xc == IEEE754_CLASS_SNAN)
+ return ieee754sp_nanxcpt(x);
+ if (yc == IEEE754_CLASS_SNAN)
return ieee754sp_nanxcpt(y);
+ if (zc == IEEE754_CLASS_QNAN)
+ return z;
+ if (xc == IEEE754_CLASS_QNAN)
+ return x;
+ if (yc == IEEE754_CLASS_QNAN)
+ return y;
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_SNAN):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_ZERO):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_NORM):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_DNORM):
- case CLPAIR(IEEE754_CLASS_SNAN, IEEE754_CLASS_INF):
- return ieee754sp_nanxcpt(x);
+ if (zc == IEEE754_CLASS_DNORM)
+ SPDNORMZ;
+ /* ZERO z cases are handled separately below */
- case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_QNAN):
- return y;
+ switch (CLPAIR(xc, yc)) {
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_QNAN):
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_ZERO):
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_NORM):
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_DNORM):
- case CLPAIR(IEEE754_CLASS_QNAN, IEEE754_CLASS_INF):
- return x;
/*
* Infinity handling
*/
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_INF):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
ieee754_setcx(IEEE754_INVALID_OPERATION);
return ieee754sp_indef();
@@ -101,9 +76,27 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_NORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_DNORM):
case CLPAIR(IEEE754_CLASS_INF, IEEE754_CLASS_INF):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
- return ieee754sp_inf(xs ^ ys);
+ if ((zc == IEEE754_CLASS_INF) &&
+ ((!(flags & MADDF_NEGATE_PRODUCT) && (zs != (xs ^ ys))) ||
+ ((flags & MADDF_NEGATE_PRODUCT) && (zs == (xs ^ ys))))) {
+ /*
+ * Cases of addition of infinities with opposite signs
+ * or subtraction of infinities with same signs.
+ */
+ ieee754_setcx(IEEE754_INVALID_OPERATION);
+ return ieee754sp_indef();
+ }
+ /*
+ * z is here either not an infinity, or an infinity having the
+ * same sign as product (x*y) (in case of MADDF.D instruction)
+ * or product -(x*y) (in MSUBF.D case). The result must be an
+ * infinity, and its sign is determined only by the value of
+ * (flags & MADDF_NEGATE_PRODUCT) and the signs of x and y.
+ */
+ if (flags & MADDF_NEGATE_PRODUCT)
+ return ieee754sp_inf(1 ^ (xs ^ ys));
+ else
+ return ieee754sp_inf(xs ^ ys);
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_ZERO):
case CLPAIR(IEEE754_CLASS_ZERO, IEEE754_CLASS_NORM):
@@ -112,32 +105,42 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_ZERO):
if (zc == IEEE754_CLASS_INF)
return ieee754sp_inf(zs);
- /* Multiplication is 0 so just return z */
+ if (zc == IEEE754_CLASS_ZERO) {
+ /* Handle cases +0 + (-0) and similar ones. */
+ if ((!(flags & MADDF_NEGATE_PRODUCT)
+ && (zs == (xs ^ ys))) ||
+ ((flags & MADDF_NEGATE_PRODUCT)
+ && (zs != (xs ^ ys))))
+ /*
+ * Cases of addition of zeros of equal signs
+ * or subtraction of zeroes of opposite signs.
+ * The sign of the resulting zero is in any
+ * such case determined only by the sign of z.
+ */
+ return z;
+
+ return ieee754sp_zero(ieee754_csr.rm == FPU_CSR_RD);
+ }
+ /* x*y is here 0, and z is not 0, so just return z */
return z;
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_DNORM):
SPDNORMX;
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_DNORM):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
- else if (zc == IEEE754_CLASS_INF)
+ if (zc == IEEE754_CLASS_INF)
return ieee754sp_inf(zs);
SPDNORMY;
break;
case CLPAIR(IEEE754_CLASS_DNORM, IEEE754_CLASS_NORM):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
- else if (zc == IEEE754_CLASS_INF)
+ if (zc == IEEE754_CLASS_INF)
return ieee754sp_inf(zs);
SPDNORMX;
break;
case CLPAIR(IEEE754_CLASS_NORM, IEEE754_CLASS_NORM):
- if (zc == IEEE754_CLASS_QNAN)
- return z;
- else if (zc == IEEE754_CLASS_INF)
+ if (zc == IEEE754_CLASS_INF)
return ieee754sp_inf(zs);
/* fall through to real computations */
}
@@ -158,111 +161,93 @@ static union ieee754sp _sp_maddf(union ieee754sp z, union ieee754sp x,
re = xe + ye;
rs = xs ^ ys;
- if (flags & maddf_negate_product)
+ if (flags & MADDF_NEGATE_PRODUCT)
rs ^= 1;
- /* shunt to top of word */
- xm <<= 32 - (SP_FBITS + 1);
- ym <<= 32 - (SP_FBITS + 1);
-
- /*
- * Multiply 32 bits xm, ym to give high 32 bits rm with stickness.
- */
- lxm = xm & 0xffff;
- hxm = xm >> 16;
- lym = ym & 0xffff;
- hym = ym >> 16;
-
- lrm = lxm * lym; /* 16 * 16 => 32 */
- hrm = hxm * hym; /* 16 * 16 => 32 */
-
- t = lxm * hym; /* 16 * 16 => 32 */
- at = lrm + (t << 16);
- hrm += at < lrm;
- lrm = at;
- hrm = hrm + (t >> 16);
+ /* Multiple 24 bit xm and ym to give 48 bit results */
+ rm64 = (uint64_t)xm * ym;
- t = hxm * lym; /* 16 * 16 => 32 */
- at = lrm + (t << 16);
- hrm += at < lrm;
- lrm = at;
- hrm = hrm + (t >> 16);
+ /* Shunt to top of word */
+ rm64 = rm64 << 16;
- rm = hrm | (lrm != 0);
-
- /*
- * Sticky shift down to normal rounding precision.
- */
- if ((int) rm < 0) {
- rm = (rm >> (32 - (SP_FBITS + 1 + 3))) |
- ((rm << (SP_FBITS + 1 + 3)) != 0);
+ /* Put explicit bit at bit 62 if necessary */
+ if ((int64_t) rm64 < 0) {
+ rm64 = rm64 >> 1;
re++;
- } else {
- rm = (rm >> (32 - (SP_FBITS + 1 + 3 + 1))) |
- ((rm << (SP_FBITS + 1 + 3 + 1)) != 0);
}
- assert(rm & (SP_HIDDEN_BIT << 3));
-
- if (zc == IEEE754_CLASS_ZERO)
- return ieee754sp_format(rs, re, rm);
- /* And now the addition */
+ assert(rm64 & (1 << 62));
- assert(zm & SP_HIDDEN_BIT);
+ if (zc == IEEE754_CLASS_ZERO) {
+ /*
+ * Move explicit bit from bit 62 to bit 26 since the
+ * ieee754sp_format code expects the mantissa to be
+ * 27 bits wide (24 + 3 rounding bits).
+ */
+ rm = XSPSRS64(rm64, (62 - 26));
+ return ieee754sp_format(rs, re, rm);
+ }
- /*
- * Provide guard,round and stick bit space.
- */
- zm <<= 3;
+ /* Move explicit bit from bit 23 to bit 62 */
+ zm64 = (uint64_t)zm << (62 - 23);
+ assert(zm64 & (1 << 62));
+ /* Make the exponents the same */
if (ze > re) {
/*
* Have to shift r fraction right to align.
*/
s = ze - re;
- rm = XSPSRS(rm, s);
+ rm64 = XSPSRS64(rm64, s);
re += s;
} else if (re > ze) {
/*
* Have to shift z fraction right to align.
*/
s = re - ze;
- zm = XSPSRS(zm, s);
+ zm64 = XSPSRS64(zm64, s);
ze += s;
}
assert(ze == re);
assert(ze <= SP_EMAX);
+ /* Do the addition */
if (zs == rs) {
/*
- * Generate 28 bit result of adding two 27 bit numbers
- * leaving result in zm, zs and ze.
+ * Generate 64 bit result by adding two 63 bit numbers
+ * leaving result in zm64, zs and ze.
*/
- zm = zm + rm;
-
- if (zm >> (SP_FBITS + 1 + 3)) { /* carry out */
- zm = XSPSRS1(zm);
+ zm64 = zm64 + rm64;
+ if ((int64_t)zm64 < 0) { /* carry out */
+ zm64 = XSPSRS1(zm64);
ze++;
}
} else {
- if (zm >= rm) {
- zm = zm - rm;
+ if (zm64 >= rm64) {
+ zm64 = zm64 - rm64;
} else {
- zm = rm - zm;
+ zm64 = rm64 - zm64;
zs = rs;
}
- if (zm == 0)
+ if (zm64 == 0)
return ieee754sp_zero(ieee754_csr.rm == FPU_CSR_RD);
/*
- * Normalize in extended single precision
+ * Put explicit bit at bit 62 if necessary.
*/
- while ((zm >> (SP_MBITS + 3)) == 0) {
- zm <<= 1;
+ while ((zm64 >> 62) == 0) {
+ zm64 <<= 1;
ze--;
}
-
}
+
+ /*
+ * Move explicit bit from bit 62 to bit 26 since the
+ * ieee754sp_format code expects the mantissa to be
+ * 27 bits wide (24 + 3 rounding bits).
+ */
+ zm = XSPSRS64(zm64, (62 - 26));
+
return ieee754sp_format(zs, ze, zm);
}
@@ -275,5 +260,5 @@ union ieee754sp ieee754sp_maddf(union ieee754sp z, union ieee754sp x,
union ieee754sp ieee754sp_msubf(union ieee754sp z, union ieee754sp x,
union ieee754sp y)
{
- return _sp_maddf(z, x, y, maddf_negate_product);
+ return _sp_maddf(z, x, y, MADDF_NEGATE_PRODUCT);
}
diff --git a/arch/mips/math-emu/sp_rint.c b/arch/mips/math-emu/sp_rint.c
new file mode 100644
index 000000000000..70765b17e196
--- /dev/null
+++ b/arch/mips/math-emu/sp_rint.c
@@ -0,0 +1,90 @@
+/* IEEE754 floating point arithmetic
+ * single precision
+ */
+/*
+ * MIPS floating point support
+ * Copyright (C) 1994-2000 Algorithmics Ltd.
+ * Copyright (C) 2017 Imagination Technologies, Ltd.
+ * Author: Aleksandar Markovic <aleksandar.markovic@imgtec.com>
+ *
+ * This program is free software; you can distribute it and/or modify it
+ * under the terms of the GNU General Public License (Version 2) as
+ * published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program.
+ */
+
+#include "ieee754sp.h"
+
+union ieee754sp ieee754sp_rint(union ieee754sp x)
+{
+ union ieee754sp ret;
+ u32 residue;
+ int sticky;
+ int round;
+ int odd;
+
+ COMPXDP; /* <-- DP needed for 64-bit mantissa tmp */
+
+ ieee754_clearcx();
+
+ EXPLODEXSP;
+ FLUSHXSP;
+
+ if (xc == IEEE754_CLASS_SNAN)
+ return ieee754sp_nanxcpt(x);
+
+ if ((xc == IEEE754_CLASS_QNAN) ||
+ (xc == IEEE754_CLASS_INF) ||
+ (xc == IEEE754_CLASS_ZERO))
+ return x;
+
+ if (xe >= SP_FBITS)
+ return x;
+
+ if (xe < -1) {
+ residue = xm;
+ round = 0;
+ sticky = residue != 0;
+ xm = 0;
+ } else {
+ residue = xm << (xe + 1);
+ residue <<= 31 - SP_FBITS;
+ round = (residue >> 31) != 0;
+ sticky = (residue << 1) != 0;
+ xm >>= SP_FBITS - xe;
+ }
+
+ odd = (xm & 0x1) != 0x0;
+
+ switch (ieee754_csr.rm) {
+ case FPU_CSR_RN: /* toward nearest */
+ if (round && (sticky || odd))
+ xm++;
+ break;
+ case FPU_CSR_RZ: /* toward zero */
+ break;
+ case FPU_CSR_RU: /* toward +infinity */
+ if ((round || sticky) && !xs)
+ xm++;
+ break;
+ case FPU_CSR_RD: /* toward -infinity */
+ if ((round || sticky) && xs)
+ xm++;
+ break;
+ }
+
+ if (round || sticky)
+ ieee754_setcx(IEEE754_INEXACT);
+
+ ret = ieee754sp_flong(xm);
+ SPSIGN(ret) = xs;
+
+ return ret;
+}
diff --git a/arch/mips/mm/c-r4k.c b/arch/mips/mm/c-r4k.c
index 81d6a15c93d0..6f534b209971 100644
--- a/arch/mips/mm/c-r4k.c
+++ b/arch/mips/mm/c-r4k.c
@@ -37,7 +37,7 @@
#include <asm/cacheflush.h> /* for run_uncached() */
#include <asm/traps.h>
#include <asm/dma-coherence.h>
-#include <asm/mips-cm.h>
+#include <asm/mips-cps.h>
/*
* Bits describing what cache ops an SMP callback function may perform.
diff --git a/arch/mips/mm/cache.c b/arch/mips/mm/cache.c
index 899e46279902..44ac64d51827 100644
--- a/arch/mips/mm/cache.c
+++ b/arch/mips/mm/cache.c
@@ -20,6 +20,7 @@
#include <asm/processor.h>
#include <asm/cpu.h>
#include <asm/cpu-features.h>
+#include <asm/setup.h>
/* Cache operations. */
void (*flush_cache_all)(void);
@@ -44,7 +45,6 @@ void (*__flush_cache_vunmap)(void);
void (*__flush_kernel_vmap_range)(unsigned long vaddr, int size);
EXPORT_SYMBOL_GPL(__flush_kernel_vmap_range);
-void (*__invalidate_kernel_vmap_range)(unsigned long vaddr, int size);
/* MIPS specific cache operations */
void (*flush_cache_sigtramp)(unsigned long addr);
diff --git a/arch/mips/mm/dma-default.c b/arch/mips/mm/dma-default.c
index 8e78251eccc2..c01bd20d0208 100644
--- a/arch/mips/mm/dma-default.c
+++ b/arch/mips/mm/dma-default.c
@@ -127,23 +127,6 @@ static gfp_t massage_gfp_flags(const struct device *dev, gfp_t gfp)
return gfp | dma_flag;
}
-static void *mips_dma_alloc_noncoherent(struct device *dev, size_t size,
- dma_addr_t * dma_handle, gfp_t gfp)
-{
- void *ret;
-
- gfp = massage_gfp_flags(dev, gfp);
-
- ret = (void *) __get_free_pages(gfp, get_order(size));
-
- if (ret != NULL) {
- memset(ret, 0, size);
- *dma_handle = plat_map_dma_mem(dev, ret, size);
- }
-
- return ret;
-}
-
static void *mips_dma_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs)
{
@@ -151,13 +134,6 @@ static void *mips_dma_alloc_coherent(struct device *dev, size_t size,
struct page *page = NULL;
unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT;
- /*
- * XXX: seems like the coherent and non-coherent implementations could
- * be consolidated.
- */
- if (attrs & DMA_ATTR_NON_CONSISTENT)
- return mips_dma_alloc_noncoherent(dev, size, dma_handle, gfp);
-
gfp = massage_gfp_flags(dev, gfp);
if (IS_ENABLED(CONFIG_DMA_CMA) && gfpflags_allow_blocking(gfp))
@@ -172,7 +148,8 @@ static void *mips_dma_alloc_coherent(struct device *dev, size_t size,
ret = page_address(page);
memset(ret, 0, size);
*dma_handle = plat_map_dma_mem(dev, ret, size);
- if (!plat_device_is_coherent(dev)) {
+ if (!(attrs & DMA_ATTR_NON_CONSISTENT) &&
+ !plat_device_is_coherent(dev)) {
dma_cache_wback_inv((unsigned long) ret, size);
ret = UNCAC_ADDR(ret);
}
@@ -180,14 +157,6 @@ static void *mips_dma_alloc_coherent(struct device *dev, size_t size,
return ret;
}
-
-static void mips_dma_free_noncoherent(struct device *dev, size_t size,
- void *vaddr, dma_addr_t dma_handle)
-{
- plat_unmap_dma_mem(dev, dma_handle, size, DMA_BIDIRECTIONAL);
- free_pages((unsigned long) vaddr, get_order(size));
-}
-
static void mips_dma_free_coherent(struct device *dev, size_t size, void *vaddr,
dma_addr_t dma_handle, unsigned long attrs)
{
@@ -195,14 +164,9 @@ static void mips_dma_free_coherent(struct device *dev, size_t size, void *vaddr,
unsigned int count = PAGE_ALIGN(size) >> PAGE_SHIFT;
struct page *page = NULL;
- if (attrs & DMA_ATTR_NON_CONSISTENT) {
- mips_dma_free_noncoherent(dev, size, vaddr, dma_handle);
- return;
- }
-
plat_unmap_dma_mem(dev, dma_handle, size, DMA_BIDIRECTIONAL);
- if (!plat_device_is_coherent(dev))
+ if (!(attrs & DMA_ATTR_NON_CONSISTENT) && !plat_device_is_coherent(dev))
addr = CAC_ADDR(addr);
page = virt_to_page((void *) addr);
@@ -409,12 +373,12 @@ static void mips_dma_sync_sg_for_device(struct device *dev,
}
}
-int mips_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
+static int mips_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
{
return 0;
}
-int mips_dma_supported(struct device *dev, u64 mask)
+static int mips_dma_supported(struct device *dev, u64 mask)
{
return plat_dma_supported(dev, mask);
}
diff --git a/arch/mips/mm/init.c b/arch/mips/mm/init.c
index 8ce2983a7015..5f6ea7d746de 100644
--- a/arch/mips/mm/init.c
+++ b/arch/mips/mm/init.c
@@ -31,6 +31,7 @@
#include <linux/gfp.h>
#include <linux/kcore.h>
#include <linux/export.h>
+#include <linux/initrd.h>
#include <asm/asm-offsets.h>
#include <asm/bootinfo.h>
diff --git a/arch/mips/mm/mmap.c b/arch/mips/mm/mmap.c
index 28adeabe851f..33d3251ecd37 100644
--- a/arch/mips/mm/mmap.c
+++ b/arch/mips/mm/mmap.c
@@ -7,6 +7,7 @@
* written by Ralf Baechle <ralf@linux-mips.org>
*/
#include <linux/compiler.h>
+#include <linux/elf-randomize.h>
#include <linux/errno.h>
#include <linux/mm.h>
#include <linux/mman.h>
diff --git a/arch/mips/mm/sc-mips.c b/arch/mips/mm/sc-mips.c
index c909c3342729..acfb89273dad 100644
--- a/arch/mips/mm/sc-mips.c
+++ b/arch/mips/mm/sc-mips.c
@@ -14,7 +14,7 @@
#include <asm/pgtable.h>
#include <asm/mmu_context.h>
#include <asm/r4kcache.h>
-#include <asm/mips-cm.h>
+#include <asm/mips-cps.h>
/*
* MIPS32/MIPS64 L2 cache handling
@@ -63,34 +63,25 @@ static void mips_sc_prefetch_enable(void)
* prefetching for both code & data, for all ports.
*/
pftctl = read_gcr_l2_pft_control();
- if (pftctl & CM_GCR_L2_PFT_CONTROL_NPFT_MSK) {
- pftctl &= ~CM_GCR_L2_PFT_CONTROL_PAGEMASK_MSK;
- pftctl |= PAGE_MASK & CM_GCR_L2_PFT_CONTROL_PAGEMASK_MSK;
- pftctl |= CM_GCR_L2_PFT_CONTROL_PFTEN_MSK;
+ if (pftctl & CM_GCR_L2_PFT_CONTROL_NPFT) {
+ pftctl &= ~CM_GCR_L2_PFT_CONTROL_PAGEMASK;
+ pftctl |= PAGE_MASK & CM_GCR_L2_PFT_CONTROL_PAGEMASK;
+ pftctl |= CM_GCR_L2_PFT_CONTROL_PFTEN;
write_gcr_l2_pft_control(pftctl);
- pftctl = read_gcr_l2_pft_control_b();
- pftctl |= CM_GCR_L2_PFT_CONTROL_B_PORTID_MSK;
- pftctl |= CM_GCR_L2_PFT_CONTROL_B_CEN_MSK;
- write_gcr_l2_pft_control_b(pftctl);
+ set_gcr_l2_pft_control_b(CM_GCR_L2_PFT_CONTROL_B_PORTID |
+ CM_GCR_L2_PFT_CONTROL_B_CEN);
}
}
static void mips_sc_prefetch_disable(void)
{
- unsigned long pftctl;
-
if (mips_cm_revision() < CM_REV_CM2_5)
return;
- pftctl = read_gcr_l2_pft_control();
- pftctl &= ~CM_GCR_L2_PFT_CONTROL_PFTEN_MSK;
- write_gcr_l2_pft_control(pftctl);
-
- pftctl = read_gcr_l2_pft_control_b();
- pftctl &= ~CM_GCR_L2_PFT_CONTROL_B_PORTID_MSK;
- pftctl &= ~CM_GCR_L2_PFT_CONTROL_B_CEN_MSK;
- write_gcr_l2_pft_control_b(pftctl);
+ clear_gcr_l2_pft_control(CM_GCR_L2_PFT_CONTROL_PFTEN);
+ clear_gcr_l2_pft_control_b(CM_GCR_L2_PFT_CONTROL_B_PORTID |
+ CM_GCR_L2_PFT_CONTROL_B_CEN);
}
static bool mips_sc_prefetch_is_enabled(void)
@@ -101,9 +92,9 @@ static bool mips_sc_prefetch_is_enabled(void)
return false;
pftctl = read_gcr_l2_pft_control();
- if (!(pftctl & CM_GCR_L2_PFT_CONTROL_NPFT_MSK))
+ if (!(pftctl & CM_GCR_L2_PFT_CONTROL_NPFT))
return false;
- return !!(pftctl & CM_GCR_L2_PFT_CONTROL_PFTEN_MSK);
+ return !!(pftctl & CM_GCR_L2_PFT_CONTROL_PFTEN);
}
static struct bcache_ops mips_sc_ops = {
@@ -160,21 +151,21 @@ static int __init mips_sc_probe_cm3(void)
unsigned long cfg = read_gcr_l2_config();
unsigned long sets, line_sz, assoc;
- if (cfg & CM_GCR_L2_CONFIG_BYPASS_MSK)
+ if (cfg & CM_GCR_L2_CONFIG_BYPASS)
return 0;
- sets = cfg & CM_GCR_L2_CONFIG_SET_SIZE_MSK;
- sets >>= CM_GCR_L2_CONFIG_SET_SIZE_SHF;
+ sets = cfg & CM_GCR_L2_CONFIG_SET_SIZE;
+ sets >>= __ffs(CM_GCR_L2_CONFIG_SET_SIZE);
if (sets)
c->scache.sets = 64 << sets;
- line_sz = cfg & CM_GCR_L2_CONFIG_LINE_SIZE_MSK;
- line_sz >>= CM_GCR_L2_CONFIG_LINE_SIZE_SHF;
+ line_sz = cfg & CM_GCR_L2_CONFIG_LINE_SIZE;
+ line_sz >>= __ffs(CM_GCR_L2_CONFIG_LINE_SIZE);
if (line_sz)
c->scache.linesz = 2 << line_sz;
- assoc = cfg & CM_GCR_L2_CONFIG_ASSOC_MSK;
- assoc >>= CM_GCR_L2_CONFIG_ASSOC_SHF;
+ assoc = cfg & CM_GCR_L2_CONFIG_ASSOC;
+ assoc >>= __ffs(CM_GCR_L2_CONFIG_ASSOC);
c->scache.ways = assoc + 1;
c->scache.waysize = c->scache.sets * c->scache.linesz;
c->scache.waybit = __ffs(c->scache.waysize);
diff --git a/arch/mips/mm/tlbex-fault.S b/arch/mips/mm/tlbex-fault.S
index 318855eb5f80..77db401fc620 100644
--- a/arch/mips/mm/tlbex-fault.S
+++ b/arch/mips/mm/tlbex-fault.S
@@ -12,14 +12,15 @@
.macro tlb_do_page_fault, write
NESTED(tlb_do_page_fault_\write, PT_SIZE, sp)
- SAVE_ALL
+ .cfi_signal_frame
+ SAVE_ALL docfi=1
MFC0 a2, CP0_BADVADDR
KMODE
move a0, sp
REG_S a2, PT_BVADDR(sp)
li a1, \write
- PTR_LA ra, ret_from_exception
- j do_page_fault
+ jal do_page_fault
+ j ret_from_exception
END(tlb_do_page_fault_\write)
.endm
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c
index 5aadc69c8ce3..79b9f2ad3ff5 100644
--- a/arch/mips/mm/tlbex.c
+++ b/arch/mips/mm/tlbex.c
@@ -2634,11 +2634,6 @@ void build_tlb_refill_handler(void)
#endif
break;
- case CPU_R6000:
- case CPU_R6000A:
- panic("No R6000 TLB refill handler yet");
- break;
-
case CPU_R8000:
panic("No R8000 TLB refill handler yet");
break;
diff --git a/arch/mips/mti-malta/malta-dtshim.c b/arch/mips/mti-malta/malta-dtshim.c
index c398582c316f..a6699c15277d 100644
--- a/arch/mips/mti-malta/malta-dtshim.c
+++ b/arch/mips/mti-malta/malta-dtshim.c
@@ -18,7 +18,7 @@
#include <asm/fw/fw.h>
#include <asm/mips-boards/generic.h>
#include <asm/mips-boards/malta.h>
-#include <asm/mips-cm.h>
+#include <asm/mips-cps.h>
#include <asm/page.h>
#define ROCIT_REG_BASE 0x1f403000
@@ -236,7 +236,7 @@ static void __init remove_gic(void *fdt)
/* if we have a CM which reports a GIC is present, leave the DT alone */
err = mips_cm_probe();
- if (!err && (read_gcr_gic_status() & CM_GCR_GIC_STATUS_GICEX_MSK))
+ if (!err && (read_gcr_gic_status() & CM_GCR_GIC_STATUS_EX))
return;
if (malta_scon() == MIPS_REVISION_SCON_ROCIT) {
diff --git a/arch/mips/mti-malta/malta-init.c b/arch/mips/mti-malta/malta-init.c
index 0f3b881a3190..009f2918b320 100644
--- a/arch/mips/mti-malta/malta-init.c
+++ b/arch/mips/mti-malta/malta-init.c
@@ -21,8 +21,7 @@
#include <asm/smp-ops.h>
#include <asm/traps.h>
#include <asm/fw/fw.h>
-#include <asm/mips-cm.h>
-#include <asm/mips-cpc.h>
+#include <asm/mips-cps.h>
#include <asm/mips-boards/generic.h>
#include <asm/mips-boards/malta.h>
diff --git a/arch/mips/mti-malta/malta-int.c b/arch/mips/mti-malta/malta-int.c
index b0f9b188e833..a840e0c1642c 100644
--- a/arch/mips/mti-malta/malta-int.c
+++ b/arch/mips/mti-malta/malta-int.c
@@ -19,7 +19,6 @@
#include <linux/smp.h>
#include <linux/interrupt.h>
#include <linux/io.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/of_irq.h>
#include <linux/kernel_stat.h>
#include <linux/kernel.h>
@@ -29,9 +28,9 @@
#include <asm/i8259.h>
#include <asm/irq_cpu.h>
#include <asm/irq_regs.h>
-#include <asm/mips-cm.h>
#include <asm/mips-boards/malta.h>
#include <asm/mips-boards/maltaint.h>
+#include <asm/mips-cps.h>
#include <asm/gt64120.h>
#include <asm/mips-boards/generic.h>
#include <asm/mips-boards/msc01_pci.h>
@@ -215,7 +214,7 @@ void __init arch_init_irq(void)
msc_nr_irqs);
}
- if (gic_present) {
+ if (mips_gic_present()) {
corehi_irq = MIPS_CPU_IRQ_BASE + MIPSCPU_INT_COREHI;
} else if (cpu_has_veic) {
set_vi_handler(MSC01E_INT_COREHI, corehi_irqdispatch);
diff --git a/arch/mips/mti-malta/malta-setup.c b/arch/mips/mti-malta/malta-setup.c
index a01d5debfcaf..de34adb76157 100644
--- a/arch/mips/mti-malta/malta-setup.c
+++ b/arch/mips/mti-malta/malta-setup.c
@@ -28,7 +28,7 @@
#include <asm/fw/fw.h>
#include <asm/mach-malta/malta-dtshim.h>
-#include <asm/mips-cm.h>
+#include <asm/mips-cps.h>
#include <asm/mips-boards/generic.h>
#include <asm/mips-boards/malta.h>
#include <asm/mips-boards/maltaint.h>
@@ -128,7 +128,7 @@ static int __init plat_enable_iocoherency(void)
BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
pr_info("Enabled Bonito IOBC coherency\n");
}
- } else if (mips_cm_numiocu() != 0) {
+ } else if (mips_cps_numiocu(0) != 0) {
/* Nothing special needs to be done to enable coherency */
pr_info("CMP IOCU detected\n");
cfg = __raw_readl((u32 *)CKSEG1ADDR(ROCIT_CONFIG_GEN0));
diff --git a/arch/mips/mti-malta/malta-time.c b/arch/mips/mti-malta/malta-time.c
index cea4ec909806..66c866740ff2 100644
--- a/arch/mips/mti-malta/malta-time.c
+++ b/arch/mips/mti-malta/malta-time.c
@@ -26,7 +26,6 @@
#include <linux/sched.h>
#include <linux/spinlock.h>
#include <linux/interrupt.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/timex.h>
#include <linux/mc146818rtc.h>
@@ -40,6 +39,7 @@
#include <asm/time.h>
#include <asm/mc146818-time.h>
#include <asm/msc01_ic.h>
+#include <asm/mips-cps.h>
#include <asm/mips-boards/generic.h>
#include <asm/mips-boards/maltaint.h>
@@ -85,8 +85,8 @@ static void __init estimate_frequencies(void)
local_irq_save(flags);
- if (gic_present)
- gic_start_count();
+ if (mips_gic_present())
+ clear_gic_config(GIC_CONFIG_COUNTSTOP);
/*
* Read counters exactly on rising edge of update flag.
@@ -95,8 +95,8 @@ static void __init estimate_frequencies(void)
while (CMOS_READ(RTC_REG_A) & RTC_UIP);
while (!(CMOS_READ(RTC_REG_A) & RTC_UIP));
start = read_c0_count();
- if (gic_present)
- gicstart = gic_read_count();
+ if (mips_gic_present())
+ gicstart = read_gic_counter();
/* Wait for falling edge before reading RTC. */
while (CMOS_READ(RTC_REG_A) & RTC_UIP);
@@ -105,8 +105,8 @@ static void __init estimate_frequencies(void)
/* Read counters again exactly on rising edge of update flag. */
while (!(CMOS_READ(RTC_REG_A) & RTC_UIP));
count = read_c0_count();
- if (gic_present)
- giccount = gic_read_count();
+ if (mips_gic_present())
+ giccount = read_gic_counter();
/* Wait for falling edge before reading RTC again. */
while (CMOS_READ(RTC_REG_A) & RTC_UIP);
@@ -128,7 +128,7 @@ static void __init estimate_frequencies(void)
count /= secs;
mips_hpt_frequency = count;
- if (gic_present) {
+ if (mips_gic_present()) {
giccount = div_u64(giccount - gicstart, secs);
gic_frequency = giccount;
}
@@ -154,7 +154,7 @@ int get_c0_fdc_int(void)
if (cpu_has_veic)
return -1;
- else if (gic_present)
+ else if (mips_gic_present())
return gic_get_c0_fdc_int();
else if (cp0_fdc_irq >= 0)
return MIPS_CPU_IRQ_BASE + cp0_fdc_irq;
@@ -167,7 +167,7 @@ int get_c0_perfcount_int(void)
if (cpu_has_veic) {
set_vi_handler(MSC01E_INT_PERFCTR, mips_perf_dispatch);
mips_cpu_perf_irq = MSC01E_INT_BASE + MSC01E_INT_PERFCTR;
- } else if (gic_present) {
+ } else if (mips_gic_present()) {
mips_cpu_perf_irq = gic_get_c0_perfcount_int();
} else if (cp0_perfcount_irq >= 0) {
mips_cpu_perf_irq = MIPS_CPU_IRQ_BASE + cp0_perfcount_irq;
@@ -184,7 +184,7 @@ unsigned int get_c0_compare_int(void)
if (cpu_has_veic) {
set_vi_handler(MSC01E_INT_CPUCTR, mips_timer_dispatch);
mips_cpu_timer_irq = MSC01E_INT_BASE + MSC01E_INT_CPUCTR;
- } else if (gic_present) {
+ } else if (mips_gic_present()) {
mips_cpu_timer_irq = gic_get_c0_compare_int();
} else {
mips_cpu_timer_irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
@@ -258,8 +258,7 @@ void __init plat_time_init(void)
setup_pit_timer();
#endif
-#ifdef CONFIG_MIPS_GIC
- if (gic_present) {
+ if (mips_gic_present()) {
freq = freqround(gic_frequency, 5000);
printk("GIC frequency %d.%02d MHz\n", freq/1000000,
(freq%1000000)*100/1000000);
@@ -268,5 +267,4 @@ void __init plat_time_init(void)
timer_probe();
#endif
}
-#endif
}
diff --git a/arch/mips/netlogic/common/smp.c b/arch/mips/netlogic/common/smp.c
index bddf1ef553a4..39a300bd6cc2 100644
--- a/arch/mips/netlogic/common/smp.c
+++ b/arch/mips/netlogic/common/smp.c
@@ -122,7 +122,7 @@ static void nlm_init_secondary(void)
int hwtid;
hwtid = hard_smp_processor_id();
- current_cpu_data.core = hwtid / NLM_THREADS_PER_CORE;
+ cpu_set_core(&current_cpu_data, hwtid / NLM_THREADS_PER_CORE);
current_cpu_data.package = nlm_nodeid();
nlm_percpu_init(hwtid);
nlm_smp_irq_init(hwtid);
@@ -147,7 +147,7 @@ unsigned long nlm_next_gp;
unsigned long nlm_next_sp;
static cpumask_t phys_cpu_present_mask;
-void nlm_boot_secondary(int logical_cpu, struct task_struct *idle)
+int nlm_boot_secondary(int logical_cpu, struct task_struct *idle)
{
uint64_t picbase;
int hwtid;
@@ -161,6 +161,8 @@ void nlm_boot_secondary(int logical_cpu, struct task_struct *idle)
/* barrier for sp/gp store above */
__sync();
nlm_pic_send_ipi(picbase, hwtid, 1, 1); /* NMI */
+
+ return 0;
}
void __init nlm_smp_setup(void)
@@ -272,7 +274,7 @@ int nlm_wakeup_secondary_cpus(void)
return 0;
}
-struct plat_smp_ops nlm_smp_ops = {
+const struct plat_smp_ops nlm_smp_ops = {
.send_ipi_single = nlm_send_ipi_single,
.send_ipi_mask = nlm_send_ipi_mask,
.init_secondary = nlm_init_secondary,
diff --git a/arch/mips/oprofile/op_model_mipsxx.c b/arch/mips/oprofile/op_model_mipsxx.c
index c57da6f13929..c3e4c18ef8d4 100644
--- a/arch/mips/oprofile/op_model_mipsxx.c
+++ b/arch/mips/oprofile/op_model_mipsxx.c
@@ -38,9 +38,9 @@ static int perfcount_irq;
#ifdef CONFIG_MIPS_MT_SMP
static int cpu_has_mipsmt_pertccounters;
#define WHAT (MIPS_PERFCTRL_MT_EN_VPE | \
- M_PERFCTL_VPEID(cpu_data[smp_processor_id()].vpe_id))
+ M_PERFCTL_VPEID(cpu_vpe_id(&current_cpu_data)))
#define vpe_id() (cpu_has_mipsmt_pertccounters ? \
- 0 : cpu_data[smp_processor_id()].vpe_id)
+ 0 : cpu_vpe_id(&current_cpu_data))
/*
* The number of bits to shift to convert between counters per core and
diff --git a/arch/mips/paravirt/paravirt-smp.c b/arch/mips/paravirt/paravirt-smp.c
index 72eb1a56c645..107d9f90d668 100644
--- a/arch/mips/paravirt/paravirt-smp.c
+++ b/arch/mips/paravirt/paravirt-smp.c
@@ -100,11 +100,12 @@ static void paravirt_smp_finish(void)
local_irq_enable();
}
-static void paravirt_boot_secondary(int cpu, struct task_struct *idle)
+static int paravirt_boot_secondary(int cpu, struct task_struct *idle)
{
paravirt_smp_gp[cpu] = (unsigned long)task_thread_info(idle);
smp_wmb();
paravirt_smp_sp[cpu] = __KSTK_TOS(idle);
+ return 0;
}
static irqreturn_t paravirt_reched_interrupt(int irq, void *dev_id)
@@ -133,7 +134,7 @@ static void paravirt_prepare_cpus(unsigned int max_cpus)
}
}
-struct plat_smp_ops paravirt_smp_ops = {
+const struct plat_smp_ops paravirt_smp_ops = {
.send_ipi_single = paravirt_send_ipi_single,
.send_ipi_mask = paravirt_send_ipi_mask,
.init_secondary = paravirt_init_secondary,
diff --git a/arch/mips/paravirt/setup.c b/arch/mips/paravirt/setup.c
index cb8448b373a7..d2ffec1409a7 100644
--- a/arch/mips/paravirt/setup.c
+++ b/arch/mips/paravirt/setup.c
@@ -14,7 +14,7 @@
#include <asm/smp-ops.h>
#include <asm/time.h>
-extern struct plat_smp_ops paravirt_smp_ops;
+extern const struct plat_smp_ops paravirt_smp_ops;
const char *get_system_type(void)
{
diff --git a/arch/mips/pci/pci-legacy.c b/arch/mips/pci/pci-legacy.c
index fc7726088103..0c65c38e05d6 100644
--- a/arch/mips/pci/pci-legacy.c
+++ b/arch/mips/pci/pci-legacy.c
@@ -139,7 +139,7 @@ void pci_load_of_ranges(struct pci_controller *hose, struct device_node *node)
struct of_pci_range range;
struct of_pci_range_parser parser;
- pr_info("PCI host bridge %s ranges:\n", node->full_name);
+ pr_info("PCI host bridge %pOF ranges:\n", node);
hose->of_node = node;
if (of_pci_range_parser_init(&parser, node))
diff --git a/arch/mips/pci/pci-malta.c b/arch/mips/pci/pci-malta.c
index cfbbc3e3e914..88e625fb3a47 100644
--- a/arch/mips/pci/pci-malta.c
+++ b/arch/mips/pci/pci-malta.c
@@ -27,7 +27,7 @@
#include <linux/init.h>
#include <asm/gt64120.h>
-#include <asm/mips-cm.h>
+#include <asm/mips-cps.h>
#include <asm/mips-boards/generic.h>
#include <asm/mips-boards/bonito64.h>
#include <asm/mips-boards/msc01_pci.h>
@@ -201,7 +201,7 @@ void __init mips_pcibios_init(void)
msc_mem_resource.start = start & mask;
msc_mem_resource.end = (start & mask) | ~mask;
msc_controller.mem_offset = (start & mask) - (map & mask);
- if (mips_cm_numiocu()) {
+ if (mips_cps_numiocu(0)) {
write_gcr_reg0_base(start);
write_gcr_reg0_mask(mask |
CM_GCR_REGn_MASK_CMTGT_IOCU0);
@@ -213,7 +213,7 @@ void __init mips_pcibios_init(void)
msc_io_resource.end = (map & mask) | ~mask;
msc_controller.io_offset = 0;
ioport_resource.end = ~mask;
- if (mips_cm_numiocu()) {
+ if (mips_cps_numiocu(0)) {
write_gcr_reg1_base(start);
write_gcr_reg1_mask(mask |
CM_GCR_REGn_MASK_CMTGT_IOCU0);
diff --git a/arch/mips/pci/pci-mt7620.c b/arch/mips/pci/pci-mt7620.c
index 628c5132b3d8..4e633c1e7ff3 100644
--- a/arch/mips/pci/pci-mt7620.c
+++ b/arch/mips/pci/pci-mt7620.c
@@ -291,7 +291,7 @@ static int mt7620_pci_probe(struct platform_device *pdev)
IORESOURCE_MEM, 1);
u32 val = 0;
- rstpcie0 = devm_reset_control_get(&pdev->dev, "pcie0");
+ rstpcie0 = devm_reset_control_get_exclusive(&pdev->dev, "pcie0");
if (IS_ERR(rstpcie0))
return PTR_ERR(rstpcie0);
diff --git a/arch/mips/pci/pci-rt3883.c b/arch/mips/pci/pci-rt3883.c
index 3520e9b414e7..04f8ea953297 100644
--- a/arch/mips/pci/pci-rt3883.c
+++ b/arch/mips/pci/pci-rt3883.c
@@ -207,8 +207,7 @@ static int rt3883_pci_irq_init(struct device *dev,
irq = irq_of_parse_and_map(rpc->intc_of_node, 0);
if (irq == 0) {
- dev_err(dev, "%s has no IRQ",
- of_node_full_name(rpc->intc_of_node));
+ dev_err(dev, "%pOF has no IRQ", rpc->intc_of_node);
return -EINVAL;
}
@@ -438,8 +437,8 @@ static int rt3883_pci_probe(struct platform_device *pdev)
}
if (!rpc->intc_of_node) {
- dev_err(dev, "%s has no %s child node",
- of_node_full_name(rpc->intc_of_node),
+ dev_err(dev, "%pOF has no %s child node",
+ rpc->intc_of_node,
"interrupt controller");
return -EINVAL;
}
@@ -454,8 +453,8 @@ static int rt3883_pci_probe(struct platform_device *pdev)
}
if (!rpc->pci_controller.of_node) {
- dev_err(dev, "%s has no %s child node",
- of_node_full_name(rpc->intc_of_node),
+ dev_err(dev, "%pOF has no %s child node",
+ rpc->intc_of_node,
"PCI host bridge");
err = -EINVAL;
goto err_put_intc_node;
diff --git a/arch/mips/pistachio/init.c b/arch/mips/pistachio/init.c
index 1c91cad7988f..0b06c953d293 100644
--- a/arch/mips/pistachio/init.c
+++ b/arch/mips/pistachio/init.c
@@ -19,8 +19,7 @@
#include <asm/dma-coherence.h>
#include <asm/fw/fw.h>
#include <asm/mips-boards/generic.h>
-#include <asm/mips-cm.h>
-#include <asm/mips-cpc.h>
+#include <asm/mips-cps.h>
#include <asm/prom.h>
#include <asm/smp-ops.h>
#include <asm/traps.h>
diff --git a/arch/mips/pistachio/irq.c b/arch/mips/pistachio/irq.c
index 0a6b24c24652..709a8219073a 100644
--- a/arch/mips/pistachio/irq.c
+++ b/arch/mips/pistachio/irq.c
@@ -10,7 +10,6 @@
#include <linux/init.h>
#include <linux/irqchip.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/kernel.h>
#include <asm/cpu-features.h>
diff --git a/arch/mips/pistachio/time.c b/arch/mips/pistachio/time.c
index 17a0f1dec05b..8a6af9b76202 100644
--- a/arch/mips/pistachio/time.c
+++ b/arch/mips/pistachio/time.c
@@ -12,9 +12,9 @@
#include <linux/clk-provider.h>
#include <linux/clocksource.h>
#include <linux/init.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/of.h>
+#include <asm/mips-cps.h>
#include <asm/time.h>
unsigned int get_c0_compare_int(void)
diff --git a/arch/mips/ralink/Kconfig b/arch/mips/ralink/Kconfig
index 710b04cf4851..b4627080b828 100644
--- a/arch/mips/ralink/Kconfig
+++ b/arch/mips/ralink/Kconfig
@@ -82,6 +82,16 @@ choice
depends on SOC_MT7620
select BUILTIN_DTB
+ config DTB_OMEGA2P
+ bool "Onion Omega2+"
+ depends on SOC_MT7620
+ select BUILTIN_DTB
+
+ config DTB_VOCORE2
+ bool "VoCore2"
+ depends on SOC_MT7620
+ select BUILTIN_DTB
+
endchoice
endif
diff --git a/arch/mips/ralink/clk.c b/arch/mips/ralink/clk.c
index eb1c61917eb7..1b7df115eb60 100644
--- a/arch/mips/ralink/clk.c
+++ b/arch/mips/ralink/clk.c
@@ -53,6 +53,9 @@ EXPORT_SYMBOL_GPL(clk_disable);
unsigned long clk_get_rate(struct clk *clk)
{
+ if (!clk)
+ return 0;
+
return clk->rate;
}
EXPORT_SYMBOL_GPL(clk_get_rate);
diff --git a/arch/mips/ralink/irq-gic.c b/arch/mips/ralink/irq-gic.c
index 2058280450b5..bda576f2cad8 100644
--- a/arch/mips/ralink/irq-gic.c
+++ b/arch/mips/ralink/irq-gic.c
@@ -11,7 +11,7 @@
#include <linux/of.h>
#include <linux/irqchip.h>
-#include <linux/irqchip/mips-gic.h>
+#include <asm/mips-cps.h>
int get_c0_perfcount_int(void)
{
diff --git a/arch/mips/ralink/mt7621.c b/arch/mips/ralink/mt7621.c
index 0695c2d64e49..1b274742077d 100644
--- a/arch/mips/ralink/mt7621.c
+++ b/arch/mips/ralink/mt7621.c
@@ -12,8 +12,7 @@
#include <asm/mipsregs.h>
#include <asm/smp-ops.h>
-#include <asm/mips-cm.h>
-#include <asm/mips-cpc.h>
+#include <asm/mips-cps.h>
#include <asm/mach-ralink/ralink_regs.h>
#include <asm/mach-ralink/mt7621.h>
@@ -199,7 +198,7 @@ void prom_soc_init(struct ralink_soc_info *soc_info)
mips_cm_probe();
mips_cpc_probe();
- if (mips_cm_numiocu()) {
+ if (mips_cps_numiocu(0)) {
/*
* mips_cm_probe() wipes out bootloader
* config for CM regions and we have to configure them
diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c
index 4cd47d23d81a..545446dfe7fa 100644
--- a/arch/mips/sgi-ip27/ip27-smp.c
+++ b/arch/mips/sgi-ip27/ip27-smp.c
@@ -195,7 +195,7 @@ static void ip27_smp_finish(void)
* set sp to the kernel stack of the newly created idle process, gp to the proc
* struct so that current_thread_info() will work.
*/
-static void ip27_boot_secondary(int cpu, struct task_struct *idle)
+static int ip27_boot_secondary(int cpu, struct task_struct *idle)
{
unsigned long gp = (unsigned long)task_thread_info(idle);
unsigned long sp = __KSTK_TOS(idle);
@@ -203,6 +203,7 @@ static void ip27_boot_secondary(int cpu, struct task_struct *idle)
LAUNCH_SLAVE(cputonasid(cpu), cputoslice(cpu),
(launch_proc_t)MAPPED_KERN_RW_TO_K0(smp_bootstrap),
0, (void *) sp, (void *) gp);
+ return 0;
}
static void __init ip27_smp_setup(void)
@@ -231,7 +232,7 @@ static void __init ip27_prepare_cpus(unsigned int max_cpus)
/* We already did everything necessary earlier */
}
-struct plat_smp_ops ip27_smp_ops = {
+const struct plat_smp_ops ip27_smp_ops = {
.send_ipi_single = ip27_send_ipi_single,
.send_ipi_mask = ip27_send_ipi_mask,
.init_secondary = ip27_init_secondary,
diff --git a/arch/mips/sibyte/bcm1480/smp.c b/arch/mips/sibyte/bcm1480/smp.c
index d0e94ffcc1b8..90c9d1255ad7 100644
--- a/arch/mips/sibyte/bcm1480/smp.c
+++ b/arch/mips/sibyte/bcm1480/smp.c
@@ -117,7 +117,7 @@ static void bcm1480_smp_finish(void)
* Setup the PC, SP, and GP of a secondary processor and start it
* running!
*/
-static void bcm1480_boot_secondary(int cpu, struct task_struct *idle)
+static int bcm1480_boot_secondary(int cpu, struct task_struct *idle)
{
int retval;
@@ -126,6 +126,7 @@ static void bcm1480_boot_secondary(int cpu, struct task_struct *idle)
(unsigned long)task_thread_info(idle), 0);
if (retval != 0)
printk("cfe_start_cpu(%i) returned %i\n" , cpu, retval);
+ return retval;
}
/*
@@ -157,7 +158,7 @@ static void __init bcm1480_prepare_cpus(unsigned int max_cpus)
{
}
-struct plat_smp_ops bcm1480_smp_ops = {
+const struct plat_smp_ops bcm1480_smp_ops = {
.send_ipi_single = bcm1480_send_ipi_single,
.send_ipi_mask = bcm1480_send_ipi_mask,
.init_secondary = bcm1480_init_secondary,
diff --git a/arch/mips/sibyte/common/cfe.c b/arch/mips/sibyte/common/cfe.c
index c1a11a11db7f..115399202eab 100644
--- a/arch/mips/sibyte/common/cfe.c
+++ b/arch/mips/sibyte/common/cfe.c
@@ -229,8 +229,8 @@ static int __init initrd_setup(char *str)
#endif
-extern struct plat_smp_ops sb_smp_ops;
-extern struct plat_smp_ops bcm1480_smp_ops;
+extern const struct plat_smp_ops sb_smp_ops;
+extern const struct plat_smp_ops bcm1480_smp_ops;
/*
* prom_init is called just after the cpu type is determined, from setup_arch()
diff --git a/arch/mips/sibyte/sb1250/smp.c b/arch/mips/sibyte/sb1250/smp.c
index 0a4a2c3982d8..5baabca52f25 100644
--- a/arch/mips/sibyte/sb1250/smp.c
+++ b/arch/mips/sibyte/sb1250/smp.c
@@ -106,7 +106,7 @@ static void sb1250_smp_finish(void)
* Setup the PC, SP, and GP of a secondary processor and start it
* running!
*/
-static void sb1250_boot_secondary(int cpu, struct task_struct *idle)
+static int sb1250_boot_secondary(int cpu, struct task_struct *idle)
{
int retval;
@@ -115,6 +115,7 @@ static void sb1250_boot_secondary(int cpu, struct task_struct *idle)
(unsigned long)task_thread_info(idle), 0);
if (retval != 0)
printk("cfe_start_cpu(%i) returned %i\n" , cpu, retval);
+ return retval;
}
/*
@@ -146,7 +147,7 @@ static void __init sb1250_prepare_cpus(unsigned int max_cpus)
{
}
-struct plat_smp_ops sb_smp_ops = {
+const struct plat_smp_ops sb_smp_ops = {
.send_ipi_single = sb1250_send_ipi_single,
.send_ipi_mask = sb1250_send_ipi_mask,
.init_secondary = sb1250_init_secondary,
diff --git a/arch/mips/tools/generic-board-config.sh b/arch/mips/tools/generic-board-config.sh
new file mode 100755
index 000000000000..5c4f93687039
--- /dev/null
+++ b/arch/mips/tools/generic-board-config.sh
@@ -0,0 +1,90 @@
+#!/bin/sh
+#
+# Copyright (C) 2017 Imagination Technologies
+# Author: Paul Burton <paul.burton@imgtec.com>
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This script merges configuration fragments for boards supported by the
+# generic MIPS kernel. It checks each for requirements specified using
+# formatted comments, and then calls merge_config.sh to merge those
+# fragments which have no unmet requirements.
+#
+# An example of requirements in your board config fragment might be:
+#
+# # require CONFIG_CPU_MIPS32_R2=y
+# # require CONFIG_CPU_LITTLE_ENDIAN=y
+#
+# This would mean that your board is only included in kernels which are
+# configured for little endian MIPS32r2 CPUs, and not for example in kernels
+# configured for 64 bit or big endian systems.
+#
+
+srctree="$1"
+objtree="$2"
+ref_cfg="$3"
+cfg="$4"
+boards_origin="$5"
+shift 5
+
+cd "${srctree}"
+
+# Only print Skipping... lines if the user explicitly specified BOARDS=. In the
+# general case it only serves to obscure the useful output about what actually
+# was included.
+case ${boards_origin} in
+"command line")
+ print_skipped=1
+ ;;
+environment*)
+ print_skipped=1
+ ;;
+*)
+ print_skipped=0
+ ;;
+esac
+
+for board in $@; do
+ board_cfg="arch/mips/configs/generic/board-${board}.config"
+ if [ ! -f "${board_cfg}" ]; then
+ echo "WARNING: Board config '${board_cfg}' not found"
+ continue
+ fi
+
+ # For each line beginning with # require, cut out the field following
+ # it & search for that in the reference config file. If the requirement
+ # is not found then the subshell will exit with code 1, and we'll
+ # continue on to the next board.
+ grep -E '^# require ' "${board_cfg}" | \
+ cut -d' ' -f 3- | \
+ while read req; do
+ case ${req} in
+ *=y)
+ # If we require something =y then we check that a line
+ # containing it is present in the reference config.
+ grep -Eq "^${req}\$" "${ref_cfg}" && continue
+ ;;
+ *=n)
+ # If we require something =n then we just invert that
+ # check, considering the requirement met if there isn't
+ # a line containing the value =y in the reference
+ # config.
+ grep -Eq "^${req/%=n/=y}\$" "${ref_cfg}" || continue
+ ;;
+ *)
+ echo "WARNING: Unhandled requirement '${req}'"
+ ;;
+ esac
+
+ [ ${print_skipped} -eq 1 ] && echo "Skipping ${board_cfg}"
+ exit 1
+ done || continue
+
+ # Merge this board config fragment into our final config file
+ ./scripts/kconfig/merge_config.sh \
+ -m -O ${objtree} ${cfg} ${board_cfg} \
+ | grep -Ev '^(#|Using)'
+done
diff --git a/arch/mips/vdso/gettimeofday.c b/arch/mips/vdso/gettimeofday.c
index e2690d7ca4dd..e22b422f282c 100644
--- a/arch/mips/vdso/gettimeofday.c
+++ b/arch/mips/vdso/gettimeofday.c
@@ -11,12 +11,10 @@
#include "vdso.h"
#include <linux/compiler.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/time.h>
#include <asm/clocksource.h>
#include <asm/io.h>
-#include <asm/mips-cm.h>
#include <asm/unistd.h>
#include <asm/vdso.h>
@@ -126,9 +124,9 @@ static __always_inline u64 read_gic_count(const union mips_vdso_data *data)
u32 hi, hi2, lo;
do {
- hi = __raw_readl(gic + GIC_UMV_SH_COUNTER_63_32_OFS);
- lo = __raw_readl(gic + GIC_UMV_SH_COUNTER_31_00_OFS);
- hi2 = __raw_readl(gic + GIC_UMV_SH_COUNTER_63_32_OFS);
+ hi = __raw_readl(gic + sizeof(lo));
+ lo = __raw_readl(gic);
+ hi2 = __raw_readl(gic + sizeof(lo));
} while (hi2 != hi);
return (((u64)hi) << 32) + lo;
diff --git a/arch/mips/vdso/sigreturn.S b/arch/mips/vdso/sigreturn.S
index 715bf5993529..30c6219912ac 100644
--- a/arch/mips/vdso/sigreturn.S
+++ b/arch/mips/vdso/sigreturn.S
@@ -19,31 +19,21 @@
.cfi_sections .debug_frame
LEAF(__vdso_rt_sigreturn)
- .cfi_startproc
- .frame sp, 0, ra
- .mask 0x00000000, 0
- .fmask 0x00000000, 0
.cfi_signal_frame
li v0, __NR_rt_sigreturn
syscall
- .cfi_endproc
END(__vdso_rt_sigreturn)
#if _MIPS_SIM == _MIPS_SIM_ABI32
LEAF(__vdso_sigreturn)
- .cfi_startproc
- .frame sp, 0, ra
- .mask 0x00000000, 0
- .fmask 0x00000000, 0
.cfi_signal_frame
li v0, __NR_sigreturn
syscall
- .cfi_endproc
END(__vdso_sigreturn)
#endif
diff --git a/arch/nios2/boot/dts/3c120_devboard.dts b/arch/nios2/boot/dts/3c120_devboard.dts
index 31c51f9a2f09..36ccdf05837d 100644
--- a/arch/nios2/boot/dts/3c120_devboard.dts
+++ b/arch/nios2/boot/dts/3c120_devboard.dts
@@ -159,6 +159,7 @@
};
chosen {
- bootargs = "debug console=ttyJ0,115200";
+ bootargs = "debug earlycon console=ttyJ0,115200";
+ stdout-path = &jtag_uart;
};
};
diff --git a/arch/nios2/kernel/time.c b/arch/nios2/kernel/time.c
index 645129aaa9a0..20e86209ef2e 100644
--- a/arch/nios2/kernel/time.c
+++ b/arch/nios2/kernel/time.c
@@ -107,7 +107,10 @@ static struct nios2_clocksource nios2_cs = {
cycles_t get_cycles(void)
{
- return nios2_timer_read(&nios2_cs.cs);
+ /* Only read timer if it has been initialized */
+ if (nios2_cs.timer.base)
+ return nios2_timer_read(&nios2_cs.cs);
+ return 0;
}
EXPORT_SYMBOL(get_cycles);
diff --git a/arch/openrisc/include/asm/pgtable.h b/arch/openrisc/include/asm/pgtable.h
index ff97374ca069..71a6f08de8f2 100644
--- a/arch/openrisc/include/asm/pgtable.h
+++ b/arch/openrisc/include/asm/pgtable.h
@@ -414,6 +414,8 @@ static inline void pmd_set(pmd_t *pmdp, pte_t *ptep)
extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; /* defined in head.S */
+struct vm_area_struct;
+
/*
* or32 doesn't have any external MMU info: the kernel page
* tables contain all the necessary information.
diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c
index 26b9994d27ee..43ef25156480 100644
--- a/arch/powerpc/kernel/align.c
+++ b/arch/powerpc/kernel/align.c
@@ -341,7 +341,7 @@ int fix_alignment(struct pt_regs *regs)
type = op.type & INSTR_TYPE_MASK;
if (!OP_IS_LOAD_STORE(type)) {
- if (type != CACHEOP + DCBZ)
+ if (op.type != CACHEOP + DCBZ)
return -EINVAL;
PPC_WARN_ALIGNMENT(dcbz, regs);
r = emulate_dcbz(op.ea, regs);
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index b8a4987f58cf..1643e9e53655 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -914,7 +914,7 @@ int rtas_online_cpus_mask(cpumask_var_t cpus)
if (ret) {
cpumask_var_t tmp_mask;
- if (!alloc_cpumask_var(&tmp_mask, GFP_TEMPORARY))
+ if (!alloc_cpumask_var(&tmp_mask, GFP_KERNEL))
return ret;
/* Use tmp_mask to preserve cpus mask from first failure */
@@ -962,7 +962,7 @@ int rtas_ibm_suspend_me(u64 handle)
return -EIO;
}
- if (!alloc_cpumask_var(&offline_mask, GFP_TEMPORARY))
+ if (!alloc_cpumask_var(&offline_mask, GFP_KERNEL))
return -ENOMEM;
atomic_set(&data.working, 0);
diff --git a/arch/powerpc/kvm/book3s_hv.c b/arch/powerpc/kvm/book3s_hv.c
index 18e974a34fce..73bf1ebfa78f 100644
--- a/arch/powerpc/kvm/book3s_hv.c
+++ b/arch/powerpc/kvm/book3s_hv.c
@@ -181,7 +181,7 @@ static void kvmppc_fast_vcpu_kick_hv(struct kvm_vcpu *vcpu)
struct swait_queue_head *wqp;
wqp = kvm_arch_vcpu_wq(vcpu);
- if (swait_active(wqp)) {
+ if (swq_has_sleeper(wqp)) {
swake_up(wqp);
++vcpu->stat.halt_wakeup;
}
@@ -4212,11 +4212,13 @@ static int kvmhv_configure_mmu(struct kvm *kvm, struct kvm_ppc_mmuv3_cfg *cfg)
if ((cfg->process_table & PRTS_MASK) > 24)
return -EINVAL;
+ mutex_lock(&kvm->lock);
kvm->arch.process_table = cfg->process_table;
kvmppc_setup_partition_table(kvm);
lpcr = (cfg->flags & KVM_PPC_MMUV3_GTSE) ? LPCR_GTSE : 0;
kvmppc_update_lpcr(kvm, lpcr, LPCR_GTSE);
+ mutex_unlock(&kvm->lock);
return 0;
}
diff --git a/arch/powerpc/kvm/book3s_hv_rm_xive.c b/arch/powerpc/kvm/book3s_hv_rm_xive.c
index abf5f01b6eb1..5b81a807d742 100644
--- a/arch/powerpc/kvm/book3s_hv_rm_xive.c
+++ b/arch/powerpc/kvm/book3s_hv_rm_xive.c
@@ -38,7 +38,6 @@ static inline void __iomem *get_tima_phys(void)
#define __x_tima get_tima_phys()
#define __x_eoi_page(xd) ((void __iomem *)((xd)->eoi_page))
#define __x_trig_page(xd) ((void __iomem *)((xd)->trig_page))
-#define __x_readb __raw_rm_readb
#define __x_writeb __raw_rm_writeb
#define __x_readw __raw_rm_readw
#define __x_readq __raw_rm_readq
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
index 663a4a861e7f..17936f82d3c7 100644
--- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S
+++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S
@@ -771,6 +771,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_207S)
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION
+ /*
+ * NOTE THAT THIS TRASHES ALL NON-VOLATILE REGISTERS INCLUDING CR
+ */
bl kvmppc_restore_tm
END_FTR_SECTION_IFSET(CPU_FTR_TM)
#endif
@@ -1630,6 +1633,9 @@ END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION
+ /*
+ * NOTE THAT THIS TRASHES ALL NON-VOLATILE REGISTERS INCLUDING CR
+ */
bl kvmppc_save_tm
END_FTR_SECTION_IFSET(CPU_FTR_TM)
#endif
@@ -1749,7 +1755,10 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
/*
* Are we running hash or radix ?
*/
- beq cr2,3f
+ ld r5, VCPU_KVM(r9)
+ lbz r0, KVM_RADIX(r5)
+ cmpwi cr2, r0, 0
+ beq cr2, 3f
/* Radix: Handle the case where the guest used an illegal PID */
LOAD_REG_ADDR(r4, mmu_base_pid)
@@ -2466,6 +2475,9 @@ _GLOBAL(kvmppc_h_cede) /* r3 = vcpu pointer, r11 = msr, r13 = paca */
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION
+ /*
+ * NOTE THAT THIS TRASHES ALL NON-VOLATILE REGISTERS INCLUDING CR
+ */
ld r9, HSTATE_KVM_VCPU(r13)
bl kvmppc_save_tm
END_FTR_SECTION_IFSET(CPU_FTR_TM)
@@ -2578,6 +2590,9 @@ kvm_end_cede:
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
BEGIN_FTR_SECTION
+ /*
+ * NOTE THAT THIS TRASHES ALL NON-VOLATILE REGISTERS INCLUDING CR
+ */
bl kvmppc_restore_tm
END_FTR_SECTION_IFSET(CPU_FTR_TM)
#endif
diff --git a/arch/powerpc/kvm/book3s_xive.c b/arch/powerpc/kvm/book3s_xive.c
index 08b200a0bbce..13304622ab1c 100644
--- a/arch/powerpc/kvm/book3s_xive.c
+++ b/arch/powerpc/kvm/book3s_xive.c
@@ -48,7 +48,6 @@
#define __x_tima xive_tima
#define __x_eoi_page(xd) ((void __iomem *)((xd)->eoi_mmio))
#define __x_trig_page(xd) ((void __iomem *)((xd)->trig_mmio))
-#define __x_readb __raw_readb
#define __x_writeb __raw_writeb
#define __x_readw __raw_readw
#define __x_readq __raw_readq
diff --git a/arch/powerpc/kvm/book3s_xive_template.c b/arch/powerpc/kvm/book3s_xive_template.c
index d1ed2c41b5d2..c7a5deadd1cc 100644
--- a/arch/powerpc/kvm/book3s_xive_template.c
+++ b/arch/powerpc/kvm/book3s_xive_template.c
@@ -28,7 +28,8 @@ static void GLUE(X_PFX,ack_pending)(struct kvmppc_xive_vcpu *xc)
* bit.
*/
if (cpu_has_feature(CPU_FTR_POWER9_DD1)) {
- u8 pipr = __x_readb(__x_tima + TM_QW1_OS + TM_PIPR);
+ __be64 qw1 = __x_readq(__x_tima + TM_QW1_OS);
+ u8 pipr = be64_to_cpu(qw1) & 0xff;
if (pipr >= xc->hw_cppr)
return;
}
@@ -336,7 +337,6 @@ X_STATIC unsigned long GLUE(X_PFX,h_ipoll)(struct kvm_vcpu *vcpu, unsigned long
struct kvmppc_xive_vcpu *xc = vcpu->arch.xive_vcpu;
u8 pending = xc->pending;
u32 hirq;
- u8 pipr;
pr_devel("H_IPOLL(server=%ld)\n", server);
@@ -353,7 +353,8 @@ X_STATIC unsigned long GLUE(X_PFX,h_ipoll)(struct kvm_vcpu *vcpu, unsigned long
pending = 0xff;
} else {
/* Grab pending interrupt if any */
- pipr = __x_readb(__x_tima + TM_QW1_OS + TM_PIPR);
+ __be64 qw1 = __x_readq(__x_tima + TM_QW1_OS);
+ u8 pipr = be64_to_cpu(qw1) & 0xff;
if (pipr < 8)
pending |= 1 << pipr;
}
diff --git a/arch/powerpc/platforms/pseries/suspend.c b/arch/powerpc/platforms/pseries/suspend.c
index e76aefae2aa2..89726f07d249 100644
--- a/arch/powerpc/platforms/pseries/suspend.c
+++ b/arch/powerpc/platforms/pseries/suspend.c
@@ -151,7 +151,7 @@ static ssize_t store_hibernate(struct device *dev,
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
- if (!alloc_cpumask_var(&offline_mask, GFP_TEMPORARY))
+ if (!alloc_cpumask_var(&offline_mask, GFP_KERNEL))
return -ENOMEM;
stream_id = simple_strtoul(buf, NULL, 16);
diff --git a/arch/um/Kconfig.um b/arch/um/Kconfig.um
index 4b2ed5858b2e..e26376ab5452 100644
--- a/arch/um/Kconfig.um
+++ b/arch/um/Kconfig.um
@@ -20,6 +20,7 @@ config LD_SCRIPT_DYN
bool
default y
depends on !LD_SCRIPT_STATIC
+ select MODULE_REL_CRCS if MODVERSIONS
source "fs/Kconfig.binfmt"
diff --git a/arch/um/Makefile b/arch/um/Makefile
index 6ca4f66085c1..b76fcce397a1 100644
--- a/arch/um/Makefile
+++ b/arch/um/Makefile
@@ -121,7 +121,7 @@ archheaders:
archprepare: include/generated/user_constants.h
LINK-$(CONFIG_LD_SCRIPT_STATIC) += -static
-LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib
+LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib $(call cc-option, -no-pie)
CFLAGS_NO_HARDENING := $(call cc-option, -fno-PIC,) $(call cc-option, -fno-pic,) \
$(call cc-option, -fno-stack-protector,) \
diff --git a/arch/um/configs/i386_defconfig b/arch/um/configs/i386_defconfig
index 5636221b8785..8f114e3b0a7a 100644
--- a/arch/um/configs/i386_defconfig
+++ b/arch/um/configs/i386_defconfig
@@ -53,7 +53,6 @@ CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
-# CONFIG_INET_LRO is not set
# CONFIG_IPV6 is not set
CONFIG_UML_NET=y
CONFIG_UML_NET_ETHERTAP=y
diff --git a/arch/um/configs/x86_64_defconfig b/arch/um/configs/x86_64_defconfig
index 7a67b7ac1a7e..5d0875fc0db2 100644
--- a/arch/um/configs/x86_64_defconfig
+++ b/arch/um/configs/x86_64_defconfig
@@ -51,7 +51,6 @@ CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_INET=y
-# CONFIG_INET_LRO is not set
# CONFIG_IPV6 is not set
CONFIG_UML_NET=y
CONFIG_UML_NET_ETHERTAP=y
diff --git a/arch/um/drivers/mconsole_kern.c b/arch/um/drivers/mconsole_kern.c
index af326fb6510d..c4d162a94be9 100644
--- a/arch/um/drivers/mconsole_kern.c
+++ b/arch/um/drivers/mconsole_kern.c
@@ -148,12 +148,7 @@ void mconsole_proc(struct mc_request *req)
}
do {
- loff_t pos = file->f_pos;
- mm_segment_t old_fs = get_fs();
- set_fs(KERNEL_DS);
- len = vfs_read(file, buf, PAGE_SIZE - 1, &pos);
- set_fs(old_fs);
- file->f_pos = pos;
+ len = kernel_read(file, buf, PAGE_SIZE - 1, &file->f_pos);
if (len < 0) {
mconsole_reply(req, "Read of file failed", 1, 0);
goto out_free;
diff --git a/arch/um/include/asm/thread_info.h b/arch/um/include/asm/thread_info.h
index 053baff03674..9300f7630d2a 100644
--- a/arch/um/include/asm/thread_info.h
+++ b/arch/um/include/asm/thread_info.h
@@ -11,6 +11,7 @@
#include <asm/types.h>
#include <asm/page.h>
#include <asm/segment.h>
+#include <sysdep/ptrace_user.h>
struct thread_info {
struct task_struct *task; /* main task structure */
@@ -22,6 +23,8 @@ struct thread_info {
0-0xBFFFFFFF for user
0-0xFFFFFFFF for kernel */
struct thread_info *real_thread; /* Points to non-IRQ stack */
+ unsigned long aux_fp_regs[FP_SIZE]; /* auxiliary fp_regs to save/restore
+ them out-of-band */
};
#define INIT_THREAD_INFO(tsk) \
diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h
index 574e03fc7ba2..d8ddaf9790d2 100644
--- a/arch/um/include/shared/os.h
+++ b/arch/um/include/shared/os.h
@@ -278,7 +278,7 @@ extern int protect(struct mm_id * mm_idp, unsigned long addr,
extern int is_skas_winch(int pid, int fd, void *data);
extern int start_userspace(unsigned long stub_stack);
extern int copy_context_skas0(unsigned long stack, int pid);
-extern void userspace(struct uml_pt_regs *regs);
+extern void userspace(struct uml_pt_regs *regs, unsigned long *aux_fp_regs);
extern int map_stub_pages(int fd, unsigned long code, unsigned long data,
unsigned long stack);
extern void new_thread(void *stack, jmp_buf *buf, void (*handler)(void));
diff --git a/arch/um/kernel/gmon_syms.c b/arch/um/kernel/gmon_syms.c
index 1bf61266da8e..f138a4a0db99 100644
--- a/arch/um/kernel/gmon_syms.c
+++ b/arch/um/kernel/gmon_syms.c
@@ -7,3 +7,10 @@
extern void __bb_init_func(void *) __attribute__((weak));
EXPORT_SYMBOL(__bb_init_func);
+
+extern void __gcov_init(void *) __attribute__((weak));
+EXPORT_SYMBOL(__gcov_init);
+extern void __gcov_merge_add(void *, unsigned int) __attribute__((weak));
+EXPORT_SYMBOL(__gcov_merge_add);
+extern void __gcov_exit(void) __attribute__((weak));
+EXPORT_SYMBOL(__gcov_exit);
diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c
index 2c7f721eccbc..691b83b10649 100644
--- a/arch/um/kernel/process.c
+++ b/arch/um/kernel/process.c
@@ -131,7 +131,7 @@ void new_thread_handler(void)
* callback returns only if the kernel thread execs a process
*/
n = fn(arg);
- userspace(&current->thread.regs.regs);
+ userspace(&current->thread.regs.regs, current_thread_info()->aux_fp_regs);
}
/* Called magically, see new_thread_handler above */
@@ -150,7 +150,7 @@ void fork_handler(void)
current->thread.prev_sched = NULL;
- userspace(&current->thread.regs.regs);
+ userspace(&current->thread.regs.regs, current_thread_info()->aux_fp_regs);
}
int copy_thread(unsigned long clone_flags, unsigned long sp,
diff --git a/arch/um/os-Linux/drivers/tuntap_user.c b/arch/um/os-Linux/drivers/tuntap_user.c
index c2e6e1dad876..db24ce0d09a6 100644
--- a/arch/um/os-Linux/drivers/tuntap_user.c
+++ b/arch/um/os-Linux/drivers/tuntap_user.c
@@ -80,7 +80,7 @@ static int tuntap_open_tramp(char *gate, int *fd_out, int me, int remote,
pid = run_helper(tuntap_pre_exec, &data, argv);
if (pid < 0)
- return -pid;
+ return pid;
close(remote);
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c
index 819d68656673..c94c3bd70ccd 100644
--- a/arch/um/os-Linux/skas/process.c
+++ b/arch/um/os-Linux/skas/process.c
@@ -88,12 +88,11 @@ bad_wait:
extern unsigned long current_stub_stack(void);
-static void get_skas_faultinfo(int pid, struct faultinfo *fi)
+static void get_skas_faultinfo(int pid, struct faultinfo *fi, unsigned long *aux_fp_regs)
{
int err;
- unsigned long fpregs[FP_SIZE];
- err = get_fp_registers(pid, fpregs);
+ err = get_fp_registers(pid, aux_fp_regs);
if (err < 0) {
printk(UM_KERN_ERR "save_fp_registers returned %d\n",
err);
@@ -113,7 +112,7 @@ static void get_skas_faultinfo(int pid, struct faultinfo *fi)
*/
memcpy(fi, (void *)current_stub_stack(), sizeof(*fi));
- err = put_fp_registers(pid, fpregs);
+ err = put_fp_registers(pid, aux_fp_regs);
if (err < 0) {
printk(UM_KERN_ERR "put_fp_registers returned %d\n",
err);
@@ -121,9 +120,9 @@ static void get_skas_faultinfo(int pid, struct faultinfo *fi)
}
}
-static void handle_segv(int pid, struct uml_pt_regs * regs)
+static void handle_segv(int pid, struct uml_pt_regs *regs, unsigned long *aux_fp_regs)
{
- get_skas_faultinfo(pid, &regs->faultinfo);
+ get_skas_faultinfo(pid, &regs->faultinfo, aux_fp_regs);
segv(regs->faultinfo, 0, 1, NULL);
}
@@ -332,7 +331,7 @@ int start_userspace(unsigned long stub_stack)
return err;
}
-void userspace(struct uml_pt_regs *regs)
+void userspace(struct uml_pt_regs *regs, unsigned long *aux_fp_regs)
{
int err, status, op, pid = userspace_pid[0];
/* To prevent races if using_sysemu changes under us.*/
@@ -407,11 +406,11 @@ void userspace(struct uml_pt_regs *regs)
case SIGSEGV:
if (PTRACE_FULL_FAULTINFO) {
get_skas_faultinfo(pid,
- &regs->faultinfo);
+ &regs->faultinfo, aux_fp_regs);
(*sig_info[SIGSEGV])(SIGSEGV, (struct siginfo *)&si,
regs);
}
- else handle_segv(pid, regs);
+ else handle_segv(pid, regs, aux_fp_regs);
break;
case SIGTRAP + 0x80:
handle_trap(pid, regs, local_using_sysemu);
diff --git a/arch/um/os-Linux/start_up.c b/arch/um/os-Linux/start_up.c
index b1b6b75c5b17..82bf5f8442ba 100644
--- a/arch/um/os-Linux/start_up.c
+++ b/arch/um/os-Linux/start_up.c
@@ -154,10 +154,10 @@ static int __init nosysemu_cmd_param(char *str, int* add)
__uml_setup("nosysemu", nosysemu_cmd_param,
"nosysemu\n"
-" Turns off syscall emulation patch for ptrace (SYSEMU) on.\n"
+" Turns off syscall emulation patch for ptrace (SYSEMU).\n"
" SYSEMU is a performance-patch introduced by Laurent Vivier. It changes\n"
-" behaviour of ptrace() and helps reducing host context switch rate.\n"
-" To make it working, you need a kernel patch for your host, too.\n"
+" behaviour of ptrace() and helps reduce host context switch rates.\n"
+" To make it work, you need a kernel patch for your host, too.\n"
" See http://perso.wanadoo.fr/laurent.vivier/UML/ for further \n"
" information.\n\n");
diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c
index 8d0879f1d42c..8e02b30cf08e 100644
--- a/arch/x86/ia32/ia32_aout.c
+++ b/arch/x86/ia32/ia32_aout.c
@@ -407,10 +407,10 @@ static int load_aout_library(struct file *file)
unsigned long bss, start_addr, len, error;
int retval;
struct exec ex;
-
+ loff_t pos = 0;
retval = -ENOEXEC;
- error = kernel_read(file, 0, (char *) &ex, sizeof(ex));
+ error = kernel_read(file, &ex, sizeof(ex), &pos);
if (error != sizeof(ex))
goto out;
diff --git a/arch/x86/include/asm/desc.h b/arch/x86/include/asm/desc.h
index 1a2ba368da39..9d0e13738ed3 100644
--- a/arch/x86/include/asm/desc.h
+++ b/arch/x86/include/asm/desc.h
@@ -121,7 +121,6 @@ static inline int desc_empty(const void *ptr)
#define load_ldt(ldt) asm volatile("lldt %0"::"m" (ldt))
#define store_gdt(dtr) native_store_gdt(dtr)
-#define store_idt(dtr) native_store_idt(dtr)
#define store_tr(tr) (tr = native_store_tr())
#define load_TLS(t, cpu) native_load_tls(t, cpu)
@@ -228,7 +227,7 @@ static inline void native_store_gdt(struct desc_ptr *dtr)
asm volatile("sgdt %0":"=m" (*dtr));
}
-static inline void native_store_idt(struct desc_ptr *dtr)
+static inline void store_idt(struct desc_ptr *dtr)
{
asm volatile("sidt %0":"=m" (*dtr));
}
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 8844eee290b2..c73e493adf07 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -951,7 +951,6 @@ struct kvm_x86_ops {
void (*cache_reg)(struct kvm_vcpu *vcpu, enum kvm_reg reg);
unsigned long (*get_rflags)(struct kvm_vcpu *vcpu);
void (*set_rflags)(struct kvm_vcpu *vcpu, unsigned long rflags);
- u32 (*get_pkru)(struct kvm_vcpu *vcpu);
void (*tlb_flush)(struct kvm_vcpu *vcpu);
@@ -973,7 +972,7 @@ struct kvm_x86_ops {
void (*enable_nmi_window)(struct kvm_vcpu *vcpu);
void (*enable_irq_window)(struct kvm_vcpu *vcpu);
void (*update_cr8_intercept)(struct kvm_vcpu *vcpu, int tpr, int irr);
- bool (*get_enable_apicv)(void);
+ bool (*get_enable_apicv)(struct kvm_vcpu *vcpu);
void (*refresh_apicv_exec_ctrl)(struct kvm_vcpu *vcpu);
void (*hwapic_irr_update)(struct kvm_vcpu *vcpu, int max_irr);
void (*hwapic_isr_update)(struct kvm_vcpu *vcpu, int isr);
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
index c25dd22f7c70..12deec722cf0 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
@@ -71,11 +71,6 @@ static inline void write_cr3(unsigned long x)
PVOP_VCALL1(pv_mmu_ops.write_cr3, x);
}
-static inline unsigned long __read_cr4(void)
-{
- return PVOP_CALL0(unsigned long, pv_cpu_ops.read_cr4);
-}
-
static inline void __write_cr4(unsigned long x)
{
PVOP_VCALL1(pv_cpu_ops.write_cr4, x);
@@ -228,10 +223,6 @@ static inline void set_ldt(const void *addr, unsigned entries)
{
PVOP_VCALL2(pv_cpu_ops.set_ldt, addr, entries);
}
-static inline void store_idt(struct desc_ptr *dtr)
-{
- PVOP_VCALL1(pv_cpu_ops.store_idt, dtr);
-}
static inline unsigned long paravirt_store_tr(void)
{
return PVOP_CALL0(unsigned long, pv_cpu_ops.store_tr);
@@ -365,12 +356,6 @@ static inline void paravirt_release_p4d(unsigned long pfn)
PVOP_VCALL1(pv_mmu_ops.release_p4d, pfn);
}
-static inline void pte_update(struct mm_struct *mm, unsigned long addr,
- pte_t *ptep)
-{
- PVOP_VCALL3(pv_mmu_ops.pte_update, mm, addr, ptep);
-}
-
static inline pte_t __pte(pteval_t val)
{
pteval_t ret;
@@ -472,28 +457,6 @@ static inline void set_pte_at(struct mm_struct *mm, unsigned long addr,
PVOP_VCALL4(pv_mmu_ops.set_pte_at, mm, addr, ptep, pte.pte);
}
-static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr,
- pmd_t *pmdp, pmd_t pmd)
-{
- if (sizeof(pmdval_t) > sizeof(long))
- /* 5 arg words */
- pv_mmu_ops.set_pmd_at(mm, addr, pmdp, pmd);
- else
- PVOP_VCALL4(pv_mmu_ops.set_pmd_at, mm, addr, pmdp,
- native_pmd_val(pmd));
-}
-
-static inline void set_pud_at(struct mm_struct *mm, unsigned long addr,
- pud_t *pudp, pud_t pud)
-{
- if (sizeof(pudval_t) > sizeof(long))
- /* 5 arg words */
- pv_mmu_ops.set_pud_at(mm, addr, pudp, pud);
- else
- PVOP_VCALL4(pv_mmu_ops.set_pud_at, mm, addr, pudp,
- native_pud_val(pud));
-}
-
static inline void set_pmd(pmd_t *pmdp, pmd_t pmd)
{
pmdval_t val = native_pmd_val(pmd);
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
index 6b64fc6367f2..42873edd9f9d 100644
--- a/arch/x86/include/asm/paravirt_types.h
+++ b/arch/x86/include/asm/paravirt_types.h
@@ -107,7 +107,6 @@ struct pv_cpu_ops {
unsigned long (*read_cr0)(void);
void (*write_cr0)(unsigned long);
- unsigned long (*read_cr4)(void);
void (*write_cr4)(unsigned long);
#ifdef CONFIG_X86_64
@@ -119,8 +118,6 @@ struct pv_cpu_ops {
void (*load_tr_desc)(void);
void (*load_gdt)(const struct desc_ptr *);
void (*load_idt)(const struct desc_ptr *);
- /* store_gdt has been removed. */
- void (*store_idt)(struct desc_ptr *);
void (*set_ldt)(const void *desc, unsigned entries);
unsigned long (*store_tr)(void);
void (*load_tls)(struct thread_struct *t, unsigned int cpu);
@@ -245,12 +242,6 @@ struct pv_mmu_ops {
void (*set_pte_at)(struct mm_struct *mm, unsigned long addr,
pte_t *ptep, pte_t pteval);
void (*set_pmd)(pmd_t *pmdp, pmd_t pmdval);
- void (*set_pmd_at)(struct mm_struct *mm, unsigned long addr,
- pmd_t *pmdp, pmd_t pmdval);
- void (*set_pud_at)(struct mm_struct *mm, unsigned long addr,
- pud_t *pudp, pud_t pudval);
- void (*pte_update)(struct mm_struct *mm, unsigned long addr,
- pte_t *ptep);
pte_t (*ptep_modify_prot_start)(struct mm_struct *mm, unsigned long addr,
pte_t *ptep);
diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.h
index 5b4c44d419c5..b714934512b3 100644
--- a/arch/x86/include/asm/pgtable.h
+++ b/arch/x86/include/asm/pgtable.h
@@ -55,8 +55,6 @@ extern pmdval_t early_pmd_flags;
#else /* !CONFIG_PARAVIRT */
#define set_pte(ptep, pte) native_set_pte(ptep, pte)
#define set_pte_at(mm, addr, ptep, pte) native_set_pte_at(mm, addr, ptep, pte)
-#define set_pmd_at(mm, addr, pmdp, pmd) native_set_pmd_at(mm, addr, pmdp, pmd)
-#define set_pud_at(mm, addr, pudp, pud) native_set_pud_at(mm, addr, pudp, pud)
#define set_pte_atomic(ptep, pte) \
native_set_pte_atomic(ptep, pte)
@@ -87,8 +85,6 @@ extern pmdval_t early_pmd_flags;
#define pte_clear(mm, addr, ptep) native_pte_clear(mm, addr, ptep)
#define pmd_clear(pmd) native_pmd_clear(pmd)
-#define pte_update(mm, addr, ptep) do { } while (0)
-
#define pgd_val(x) native_pgd_val(x)
#define __pgd(x) native_make_pgd(x)
@@ -979,31 +975,18 @@ static inline void native_set_pte_at(struct mm_struct *mm, unsigned long addr,
native_set_pte(ptep, pte);
}
-static inline void native_set_pmd_at(struct mm_struct *mm, unsigned long addr,
- pmd_t *pmdp , pmd_t pmd)
+static inline void set_pmd_at(struct mm_struct *mm, unsigned long addr,
+ pmd_t *pmdp, pmd_t pmd)
{
native_set_pmd(pmdp, pmd);
}
-static inline void native_set_pud_at(struct mm_struct *mm, unsigned long addr,
- pud_t *pudp, pud_t pud)
+static inline void set_pud_at(struct mm_struct *mm, unsigned long addr,
+ pud_t *pudp, pud_t pud)
{
native_set_pud(pudp, pud);
}
-#ifndef CONFIG_PARAVIRT
-/*
- * Rules for using pte_update - it must be called after any PTE update which
- * has not been done using the set_pte / clear_pte interfaces. It is used by
- * shadow mode hypervisors to resynchronize the shadow page tables. Kernel PTE
- * updates should either be sets, clears, or set_pte_atomic for P->P
- * transitions, which means this hook should only be called for user PTEs.
- * This hook implies a P->P protection or access change has taken place, which
- * requires a subsequent TLB flush.
- */
-#define pte_update(mm, addr, ptep) do { } while (0)
-#endif
-
/*
* We only update the dirty/accessed state if we set
* the dirty bit by hand in the kernel, since the hardware
@@ -1031,7 +1014,6 @@ static inline pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
pte_t *ptep)
{
pte_t pte = native_ptep_get_and_clear(ptep);
- pte_update(mm, addr, ptep);
return pte;
}
@@ -1058,7 +1040,6 @@ static inline void ptep_set_wrprotect(struct mm_struct *mm,
unsigned long addr, pte_t *ptep)
{
clear_bit(_PAGE_BIT_RW, (unsigned long *)&ptep->pte);
- pte_update(mm, addr, ptep);
}
#define flush_tlb_fix_spurious_fault(vma, address) do { } while (0)
diff --git a/arch/x86/include/asm/special_insns.h b/arch/x86/include/asm/special_insns.h
index 9efaabf5b54b..a24dfcf79f4a 100644
--- a/arch/x86/include/asm/special_insns.h
+++ b/arch/x86/include/asm/special_insns.h
@@ -135,6 +135,11 @@ static inline void native_wbinvd(void)
extern asmlinkage void native_load_gs_index(unsigned);
+static inline unsigned long __read_cr4(void)
+{
+ return native_read_cr4();
+}
+
#ifdef CONFIG_PARAVIRT
#include <asm/paravirt.h>
#else
@@ -173,11 +178,6 @@ static inline void write_cr3(unsigned long x)
native_write_cr3(x);
}
-static inline unsigned long __read_cr4(void)
-{
- return native_read_cr4();
-}
-
static inline void __write_cr4(unsigned long x)
{
native_write_cr4(x);
diff --git a/arch/x86/include/uapi/asm/hyperv.h b/arch/x86/include/uapi/asm/hyperv.h
index 7032f4d8dff3..f65d12504e80 100644
--- a/arch/x86/include/uapi/asm/hyperv.h
+++ b/arch/x86/include/uapi/asm/hyperv.h
@@ -153,12 +153,6 @@
#define HV_X64_EX_PROCESSOR_MASKS_RECOMMENDED (1 << 11)
/*
- * HV_VP_SET available
- */
-#define HV_X64_EX_PROCESSOR_MASKS_RECOMMENDED (1 << 11)
-
-
-/*
* Crash notification flag.
*/
#define HV_CRASH_CTL_CRASH_NOTIFY (1ULL << 63)
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c
index f8ae286c1502..079535e53e2a 100644
--- a/arch/x86/kernel/acpi/boot.c
+++ b/arch/x86/kernel/acpi/boot.c
@@ -1373,7 +1373,7 @@ static void __init acpi_reduced_hw_init(void)
* If your system is blacklisted here, but you find that acpi=force
* works for you, please contact linux-acpi@vger.kernel.org
*/
-static struct dmi_system_id __initdata acpi_dmi_table[] = {
+static const struct dmi_system_id acpi_dmi_table[] __initconst = {
/*
* Boxes that need ACPI disabled
*/
@@ -1448,7 +1448,7 @@ static struct dmi_system_id __initdata acpi_dmi_table[] = {
};
/* second table for DMI checks that should run after early-quirks */
-static struct dmi_system_id __initdata acpi_dmi_table_late[] = {
+static const struct dmi_system_id acpi_dmi_table_late[] __initconst = {
/*
* HP laptops which use a DSDT reporting as HP/SB400/10000,
* which includes some code which overrides all temperature
diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c
index 446b0d3d4932..e4b0d92b3ae0 100644
--- a/arch/x86/kernel/apm_32.c
+++ b/arch/x86/kernel/apm_32.c
@@ -2043,7 +2043,7 @@ static int __init swab_apm_power_in_minutes(const struct dmi_system_id *d)
return 0;
}
-static struct dmi_system_id __initdata apm_dmi_table[] = {
+static const struct dmi_system_id apm_dmi_table[] __initconst = {
{
print_if_true,
KERN_WARNING "IBM T23 - BIOS 1.03b+ and controller firmware 1.02+ may be needed for Linux APM.",
diff --git a/arch/x86/kernel/cpu/amd.c b/arch/x86/kernel/cpu/amd.c
index 9862e2cd6d93..d58184b7cd44 100644
--- a/arch/x86/kernel/cpu/amd.c
+++ b/arch/x86/kernel/cpu/amd.c
@@ -763,6 +763,16 @@ static void init_amd_bd(struct cpuinfo_x86 *c)
}
}
+static void init_amd_zn(struct cpuinfo_x86 *c)
+{
+ /*
+ * Fix erratum 1076: CPB feature bit not being set in CPUID. It affects
+ * all up to and including B1.
+ */
+ if (c->x86_model <= 1 && c->x86_mask <= 1)
+ set_cpu_cap(c, X86_FEATURE_CPB);
+}
+
static void init_amd(struct cpuinfo_x86 *c)
{
early_init_amd(c);
@@ -791,6 +801,7 @@ static void init_amd(struct cpuinfo_x86 *c)
case 0x10: init_amd_gh(c); break;
case 0x12: init_amd_ln(c); break;
case 0x15: init_amd_bd(c); break;
+ case 0x17: init_amd_zn(c); break;
}
/* Enable workaround for FXSAVE leak */
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index fb1d3358a4af..775f10100d7f 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -169,21 +169,21 @@ static int __init x86_mpx_setup(char *s)
__setup("nompx", x86_mpx_setup);
#ifdef CONFIG_X86_64
-static int __init x86_pcid_setup(char *s)
+static int __init x86_nopcid_setup(char *s)
{
- /* require an exact match without trailing characters */
- if (strlen(s))
- return 0;
+ /* nopcid doesn't accept parameters */
+ if (s)
+ return -EINVAL;
/* do not emit a message if the feature is not present */
if (!boot_cpu_has(X86_FEATURE_PCID))
- return 1;
+ return 0;
setup_clear_cpu_cap(X86_FEATURE_PCID);
pr_info("nopcid: PCID feature disabled\n");
- return 1;
+ return 0;
}
-__setup("nopcid", x86_pcid_setup);
+early_param("nopcid", x86_nopcid_setup);
#endif
static int __init x86_noinvpcid_setup(char *s)
@@ -329,38 +329,6 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c)
}
}
-static void setup_pcid(struct cpuinfo_x86 *c)
-{
- if (cpu_has(c, X86_FEATURE_PCID)) {
- if (cpu_has(c, X86_FEATURE_PGE)) {
- /*
- * We'd like to use cr4_set_bits_and_update_boot(),
- * but we can't. CR4.PCIDE is special and can only
- * be set in long mode, and the early CPU init code
- * doesn't know this and would try to restore CR4.PCIDE
- * prior to entering long mode.
- *
- * Instead, we rely on the fact that hotplug, resume,
- * etc all fully restore CR4 before they write anything
- * that could have nonzero PCID bits to CR3. CR4.PCIDE
- * has no effect on the page tables themselves, so we
- * don't need it to be restored early.
- */
- cr4_set_bits(X86_CR4_PCIDE);
- } else {
- /*
- * flush_tlb_all(), as currently implemented, won't
- * work if PCID is on but PGE is not. Since that
- * combination doesn't exist on real hardware, there's
- * no reason to try to fully support it, but it's
- * polite to avoid corrupting data if we're on
- * an improperly configured VM.
- */
- clear_cpu_cap(c, X86_FEATURE_PCID);
- }
- }
-}
-
/*
* Protection Keys are not available in 32-bit mode.
*/
@@ -1175,9 +1143,6 @@ static void identify_cpu(struct cpuinfo_x86 *c)
setup_smep(c);
setup_smap(c);
- /* Set up PCID */
- setup_pcid(c);
-
/*
* The vendor-specific functions might have changed features.
* Now we do "generic changes."
diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
index 3b3f713e15e5..236324e83a3a 100644
--- a/arch/x86/kernel/cpu/mshyperv.c
+++ b/arch/x86/kernel/cpu/mshyperv.c
@@ -59,8 +59,6 @@ void hyperv_vector_handler(struct pt_regs *regs)
void hv_setup_vmbus_irq(void (*handler)(void))
{
vmbus_handler = handler;
- /* Setup the IDT for hypervisor callback */
- alloc_intr_gate(HYPERVISOR_CALLBACK_VECTOR, hyperv_callback_vector);
}
void hv_remove_vmbus_irq(void)
@@ -251,6 +249,8 @@ static void __init ms_hyperv_init_platform(void)
*/
x86_platform.apic_post_init = hyperv_init;
hyperv_setup_mmu_ops();
+ /* Setup the IDT for hypervisor callback */
+ alloc_intr_gate(HYPERVISOR_CALLBACK_VECTOR, hyperv_callback_vector);
#endif
}
diff --git a/arch/x86/kernel/io_delay.c b/arch/x86/kernel/io_delay.c
index 50c89e8a95f2..7ebcc4a74438 100644
--- a/arch/x86/kernel/io_delay.c
+++ b/arch/x86/kernel/io_delay.c
@@ -58,7 +58,7 @@ static int __init dmi_io_delay_0xed_port(const struct dmi_system_id *id)
* Quirk table for systems that misbehave (lock up, etc.) if port
* 0x80 is used:
*/
-static struct dmi_system_id __initdata io_delay_0xed_port_dmi_table[] = {
+static const struct dmi_system_id io_delay_0xed_port_dmi_table[] __initconst = {
{
.callback = dmi_io_delay_0xed_port,
.ident = "Compaq Presario V6000",
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 874827b0d7ca..aa60a08b65b1 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -180,7 +180,7 @@ static void apf_task_wake_one(struct kvm_task_sleep_node *n)
hlist_del_init(&n->link);
if (n->halted)
smp_send_reschedule(n->cpu);
- else if (swait_active(&n->wq))
+ else if (swq_has_sleeper(&n->wq))
swake_up(&n->wq);
}
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
index a14df9eecfed..19a3e8f961c7 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -327,7 +327,6 @@ __visible struct pv_cpu_ops pv_cpu_ops = {
.set_debugreg = native_set_debugreg,
.read_cr0 = native_read_cr0,
.write_cr0 = native_write_cr0,
- .read_cr4 = native_read_cr4,
.write_cr4 = native_write_cr4,
#ifdef CONFIG_X86_64
.read_cr8 = native_read_cr8,
@@ -343,7 +342,6 @@ __visible struct pv_cpu_ops pv_cpu_ops = {
.set_ldt = native_set_ldt,
.load_gdt = native_load_gdt,
.load_idt = native_load_idt,
- .store_idt = native_store_idt,
.store_tr = native_store_tr,
.load_tls = native_load_tls,
#ifdef CONFIG_X86_64
@@ -411,8 +409,6 @@ struct pv_mmu_ops pv_mmu_ops __ro_after_init = {
.set_pte = native_set_pte,
.set_pte_at = native_set_pte_at,
.set_pmd = native_set_pmd,
- .set_pmd_at = native_set_pmd_at,
- .pte_update = paravirt_nop,
.ptep_modify_prot_start = __ptep_modify_prot_start,
.ptep_modify_prot_commit = __ptep_modify_prot_commit,
@@ -424,7 +420,6 @@ struct pv_mmu_ops pv_mmu_ops __ro_after_init = {
.pmd_clear = native_pmd_clear,
#endif
.set_pud = native_set_pud,
- .set_pud_at = native_set_pud_at,
.pmd_val = PTE_IDENT,
.make_pmd = PTE_IDENT,
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
index 54984b142641..54180fa6f66f 100644
--- a/arch/x86/kernel/reboot.c
+++ b/arch/x86/kernel/reboot.c
@@ -150,7 +150,7 @@ static int __init set_kbd_reboot(const struct dmi_system_id *d)
/*
* This is a single dmi_table handling all reboot quirks.
*/
-static struct dmi_system_id __initdata reboot_dmi_table[] = {
+static const struct dmi_system_id reboot_dmi_table[] __initconst = {
/* Acer */
{ /* Handle reboot issue on Acer Aspire one */
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index d84afb0a322d..0957dd73d127 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -1178,8 +1178,11 @@ void __init setup_arch(char **cmdline_p)
* with the current CR4 value. This may not be necessary, but
* auditing all the early-boot CR4 manipulation would be needed to
* rule it out.
+ *
+ * Mask off features that don't work outside long mode (just
+ * PCIDE for now).
*/
- mmu_cr4_features = __read_cr4();
+ mmu_cr4_features = __read_cr4() & ~X86_CR4_PCIDE;
memblock_set_current_limit(get_max_mapped());
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index cd6622c3204e..0854ff169274 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -226,10 +226,12 @@ static int enable_start_cpu0;
static void notrace start_secondary(void *unused)
{
/*
- * Don't put *anything* before cpu_init(), SMP booting is too
- * fragile that we want to limit the things done here to the
- * most necessary things.
+ * Don't put *anything* except direct CPU state initialization
+ * before cpu_init(), SMP booting is too fragile that we want to
+ * limit the things done here to the most necessary things.
*/
+ if (boot_cpu_has(X86_FEATURE_PCID))
+ __write_cr4(__read_cr4() | X86_CR4_PCIDE);
cpu_init();
x86_cpuinit.early_percpu_clock_init();
preempt_disable();
diff --git a/arch/x86/kvm/cpuid.h b/arch/x86/kvm/cpuid.h
index 1ea3c0e1e3a9..0bc5c1315708 100644
--- a/arch/x86/kvm/cpuid.h
+++ b/arch/x86/kvm/cpuid.h
@@ -59,7 +59,6 @@ static __always_inline struct cpuid_reg x86_feature_cpuid(unsigned x86_feature)
{
unsigned x86_leaf = x86_feature / 32;
- BUILD_BUG_ON(!__builtin_constant_p(x86_leaf));
BUILD_BUG_ON(x86_leaf >= ARRAY_SIZE(reverse_cpuid));
BUILD_BUG_ON(reverse_cpuid[x86_leaf].function == 0);
diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index aaf10b6f5380..69c5612be786 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -1324,6 +1324,10 @@ static void apic_timer_expired(struct kvm_lapic *apic)
atomic_inc(&apic->lapic_timer.pending);
kvm_set_pending_timer(vcpu);
+ /*
+ * For x86, the atomic_inc() is serialized, thus
+ * using swait_active() is safe.
+ */
if (swait_active(q))
swake_up(q);
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 2c1cfe68a9af..0e68f0b3cbf7 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -1200,7 +1200,6 @@ static void avic_init_vmcb(struct vcpu_svm *svm)
vmcb->control.avic_physical_id = ppa & AVIC_HPA_MASK;
vmcb->control.avic_physical_id |= AVIC_MAX_PHYSICAL_ID_COUNT;
vmcb->control.int_ctl |= AVIC_ENABLE_MASK;
- svm->vcpu.arch.apicv_active = true;
}
static void init_vmcb(struct vcpu_svm *svm)
@@ -1316,7 +1315,7 @@ static void init_vmcb(struct vcpu_svm *svm)
set_intercept(svm, INTERCEPT_PAUSE);
}
- if (avic)
+ if (kvm_vcpu_apicv_active(&svm->vcpu))
avic_init_vmcb(svm);
/*
@@ -1600,6 +1599,23 @@ static void svm_vcpu_reset(struct kvm_vcpu *vcpu, bool init_event)
avic_update_vapic_bar(svm, APIC_DEFAULT_PHYS_BASE);
}
+static int avic_init_vcpu(struct vcpu_svm *svm)
+{
+ int ret;
+
+ if (!kvm_vcpu_apicv_active(&svm->vcpu))
+ return 0;
+
+ ret = avic_init_backing_page(&svm->vcpu);
+ if (ret)
+ return ret;
+
+ INIT_LIST_HEAD(&svm->ir_list);
+ spin_lock_init(&svm->ir_list_lock);
+
+ return ret;
+}
+
static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
{
struct vcpu_svm *svm;
@@ -1636,14 +1652,9 @@ static struct kvm_vcpu *svm_create_vcpu(struct kvm *kvm, unsigned int id)
if (!hsave_page)
goto free_page3;
- if (avic) {
- err = avic_init_backing_page(&svm->vcpu);
- if (err)
- goto free_page4;
-
- INIT_LIST_HEAD(&svm->ir_list);
- spin_lock_init(&svm->ir_list_lock);
- }
+ err = avic_init_vcpu(svm);
+ if (err)
+ goto free_page4;
/* We initialize this flag to true to make sure that the is_running
* bit would be set the first time the vcpu is loaded.
@@ -4395,9 +4406,9 @@ static void svm_set_virtual_x2apic_mode(struct kvm_vcpu *vcpu, bool set)
return;
}
-static bool svm_get_enable_apicv(void)
+static bool svm_get_enable_apicv(struct kvm_vcpu *vcpu)
{
- return avic;
+ return avic && irqchip_split(vcpu->kvm);
}
static void svm_hwapic_irr_update(struct kvm_vcpu *vcpu, int max_irr)
@@ -4414,7 +4425,7 @@ static void svm_refresh_apicv_exec_ctrl(struct kvm_vcpu *vcpu)
struct vcpu_svm *svm = to_svm(vcpu);
struct vmcb *vmcb = svm->vmcb;
- if (!avic)
+ if (!kvm_vcpu_apicv_active(&svm->vcpu))
return;
vmcb->control.int_ctl &= ~AVIC_ENABLE_MASK;
@@ -5302,6 +5313,7 @@ static int svm_check_intercept(struct kvm_vcpu *vcpu,
*/
if (info->rep_prefix != REPE_PREFIX)
goto out;
+ break;
case SVM_EXIT_IOIO: {
u64 exit_info;
u32 bytes;
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
index 4253adef9044..06c0c6d0541e 100644
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -5012,7 +5012,7 @@ static void vmx_disable_intercept_msr_x2apic(u32 msr, int type, bool apicv_activ
}
}
-static bool vmx_get_enable_apicv(void)
+static bool vmx_get_enable_apicv(struct kvm_vcpu *vcpu)
{
return enable_apicv;
}
@@ -5192,7 +5192,7 @@ static void vmx_set_constant_host_state(struct vcpu_vmx *vmx)
vmcs_write16(HOST_SS_SELECTOR, __KERNEL_DS); /* 22.2.4 */
vmcs_write16(HOST_TR_SELECTOR, GDT_ENTRY_TSS*8); /* 22.2.4 */
- native_store_idt(&dt);
+ store_idt(&dt);
vmcs_writel(HOST_IDTR_BASE, dt.address); /* 22.2.4 */
vmx->host_idt_base = dt.address;
@@ -8344,12 +8344,14 @@ static bool nested_vmx_exit_reflected(struct kvm_vcpu *vcpu, u32 exit_reason)
struct vcpu_vmx *vmx = to_vmx(vcpu);
struct vmcs12 *vmcs12 = get_vmcs12(vcpu);
- trace_kvm_nested_vmexit(kvm_rip_read(vcpu), exit_reason,
- vmcs_readl(EXIT_QUALIFICATION),
- vmx->idt_vectoring_info,
- intr_info,
- vmcs_read32(VM_EXIT_INTR_ERROR_CODE),
- KVM_ISA_VMX);
+ if (vmx->nested.nested_run_pending)
+ return false;
+
+ if (unlikely(vmx->fail)) {
+ pr_info_ratelimited("%s failed vm entry %x\n", __func__,
+ vmcs_read32(VM_INSTRUCTION_ERROR));
+ return true;
+ }
/*
* The host physical addresses of some pages of guest memory
@@ -8363,14 +8365,12 @@ static bool nested_vmx_exit_reflected(struct kvm_vcpu *vcpu, u32 exit_reason)
*/
nested_mark_vmcs12_pages_dirty(vcpu);
- if (vmx->nested.nested_run_pending)
- return false;
-
- if (unlikely(vmx->fail)) {
- pr_info_ratelimited("%s failed vm entry %x\n", __func__,
- vmcs_read32(VM_INSTRUCTION_ERROR));
- return true;
- }
+ trace_kvm_nested_vmexit(kvm_rip_read(vcpu), exit_reason,
+ vmcs_readl(EXIT_QUALIFICATION),
+ vmx->idt_vectoring_info,
+ intr_info,
+ vmcs_read32(VM_EXIT_INTR_ERROR_CODE),
+ KVM_ISA_VMX);
switch (exit_reason) {
case EXIT_REASON_EXCEPTION_NMI:
@@ -9424,12 +9424,6 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
| (1 << VCPU_EXREG_CR3));
vcpu->arch.regs_dirty = 0;
- vmx->idt_vectoring_info = vmcs_read32(IDT_VECTORING_INFO_FIELD);
-
- vmx->loaded_vmcs->launched = 1;
-
- vmx->exit_reason = vmcs_read32(VM_EXIT_REASON);
-
/*
* eager fpu is enabled if PKEY is supported and CR4 is switched
* back on host, so it is safe to read guest PKRU from current
@@ -9451,6 +9445,14 @@ static void __noclone vmx_vcpu_run(struct kvm_vcpu *vcpu)
kvm_make_request(KVM_REQ_EVENT, vcpu);
vmx->nested.nested_run_pending = 0;
+ vmx->idt_vectoring_info = 0;
+
+ vmx->exit_reason = vmx->fail ? 0xdead : vmcs_read32(VM_EXIT_REASON);
+ if (vmx->fail || (vmx->exit_reason & VMX_EXIT_REASONS_FAILED_VMENTRY))
+ return;
+
+ vmx->loaded_vmcs->launched = 1;
+ vmx->idt_vectoring_info = vmcs_read32(IDT_VECTORING_INFO_FIELD);
vmx_complete_atomic_exit(vmx);
vmx_recover_nmi_blocking(vmx);
@@ -10525,6 +10527,11 @@ static int prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
if (exec_control & CPU_BASED_TPR_SHADOW) {
vmcs_write64(VIRTUAL_APIC_PAGE_ADDR, -1ull);
vmcs_write32(TPR_THRESHOLD, vmcs12->tpr_threshold);
+ } else {
+#ifdef CONFIG_X86_64
+ exec_control |= CPU_BASED_CR8_LOAD_EXITING |
+ CPU_BASED_CR8_STORE_EXITING;
+#endif
}
/*
@@ -11388,46 +11395,30 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,
{
struct vcpu_vmx *vmx = to_vmx(vcpu);
struct vmcs12 *vmcs12 = get_vmcs12(vcpu);
- u32 vm_inst_error = 0;
/* trying to cancel vmlaunch/vmresume is a bug */
WARN_ON_ONCE(vmx->nested.nested_run_pending);
+ /*
+ * The only expected VM-instruction error is "VM entry with
+ * invalid control field(s)." Anything else indicates a
+ * problem with L0.
+ */
+ WARN_ON_ONCE(vmx->fail && (vmcs_read32(VM_INSTRUCTION_ERROR) !=
+ VMXERR_ENTRY_INVALID_CONTROL_FIELD));
+
leave_guest_mode(vcpu);
- prepare_vmcs12(vcpu, vmcs12, exit_reason, exit_intr_info,
- exit_qualification);
- if (nested_vmx_store_msr(vcpu, vmcs12->vm_exit_msr_store_addr,
- vmcs12->vm_exit_msr_store_count))
- nested_vmx_abort(vcpu, VMX_ABORT_SAVE_GUEST_MSR_FAIL);
+ if (likely(!vmx->fail)) {
+ prepare_vmcs12(vcpu, vmcs12, exit_reason, exit_intr_info,
+ exit_qualification);
- if (unlikely(vmx->fail))
- vm_inst_error = vmcs_read32(VM_INSTRUCTION_ERROR);
+ if (nested_vmx_store_msr(vcpu, vmcs12->vm_exit_msr_store_addr,
+ vmcs12->vm_exit_msr_store_count))
+ nested_vmx_abort(vcpu, VMX_ABORT_SAVE_GUEST_MSR_FAIL);
+ }
vmx_switch_vmcs(vcpu, &vmx->vmcs01);
-
- /*
- * TODO: SDM says that with acknowledge interrupt on exit, bit 31 of
- * the VM-exit interrupt information (valid interrupt) is always set to
- * 1 on EXIT_REASON_EXTERNAL_INTERRUPT, so we shouldn't need
- * kvm_cpu_has_interrupt(). See the commit message for details.
- */
- if (nested_exit_intr_ack_set(vcpu) &&
- exit_reason == EXIT_REASON_EXTERNAL_INTERRUPT &&
- kvm_cpu_has_interrupt(vcpu)) {
- int irq = kvm_cpu_get_interrupt(vcpu);
- WARN_ON(irq < 0);
- vmcs12->vm_exit_intr_info = irq |
- INTR_INFO_VALID_MASK | INTR_TYPE_EXT_INTR;
- }
-
- trace_kvm_nested_vmexit_inject(vmcs12->vm_exit_reason,
- vmcs12->exit_qualification,
- vmcs12->idt_vectoring_info_field,
- vmcs12->vm_exit_intr_info,
- vmcs12->vm_exit_intr_error_code,
- KVM_ISA_VMX);
-
vm_entry_controls_reset_shadow(vmx);
vm_exit_controls_reset_shadow(vmx);
vmx_segment_cache_clear(vmx);
@@ -11436,8 +11427,6 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,
if (VMCS02_POOL_SIZE == 0)
nested_free_vmcs02(vmx, vmx->nested.current_vmptr);
- load_vmcs12_host_state(vcpu, vmcs12);
-
/* Update any VMCS fields that might have changed while L2 ran */
vmcs_write32(VM_EXIT_MSR_LOAD_COUNT, vmx->msr_autoload.nr);
vmcs_write32(VM_ENTRY_MSR_LOAD_COUNT, vmx->msr_autoload.nr);
@@ -11486,21 +11475,57 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,
*/
kvm_make_request(KVM_REQ_APIC_PAGE_RELOAD, vcpu);
- /*
- * Exiting from L2 to L1, we're now back to L1 which thinks it just
- * finished a VMLAUNCH or VMRESUME instruction, so we need to set the
- * success or failure flag accordingly.
- */
- if (unlikely(vmx->fail)) {
- vmx->fail = 0;
- nested_vmx_failValid(vcpu, vm_inst_error);
- } else
- nested_vmx_succeed(vcpu);
if (enable_shadow_vmcs)
vmx->nested.sync_shadow_vmcs = true;
/* in case we halted in L2 */
vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;
+
+ if (likely(!vmx->fail)) {
+ /*
+ * TODO: SDM says that with acknowledge interrupt on
+ * exit, bit 31 of the VM-exit interrupt information
+ * (valid interrupt) is always set to 1 on
+ * EXIT_REASON_EXTERNAL_INTERRUPT, so we shouldn't
+ * need kvm_cpu_has_interrupt(). See the commit
+ * message for details.
+ */
+ if (nested_exit_intr_ack_set(vcpu) &&
+ exit_reason == EXIT_REASON_EXTERNAL_INTERRUPT &&
+ kvm_cpu_has_interrupt(vcpu)) {
+ int irq = kvm_cpu_get_interrupt(vcpu);
+ WARN_ON(irq < 0);
+ vmcs12->vm_exit_intr_info = irq |
+ INTR_INFO_VALID_MASK | INTR_TYPE_EXT_INTR;
+ }
+
+ trace_kvm_nested_vmexit_inject(vmcs12->vm_exit_reason,
+ vmcs12->exit_qualification,
+ vmcs12->idt_vectoring_info_field,
+ vmcs12->vm_exit_intr_info,
+ vmcs12->vm_exit_intr_error_code,
+ KVM_ISA_VMX);
+
+ load_vmcs12_host_state(vcpu, vmcs12);
+
+ return;
+ }
+
+ /*
+ * After an early L2 VM-entry failure, we're now back
+ * in L1 which thinks it just finished a VMLAUNCH or
+ * VMRESUME instruction, so we need to set the failure
+ * flag and the VM-instruction error field of the VMCS
+ * accordingly.
+ */
+ nested_vmx_failValid(vcpu, VMXERR_ENTRY_INVALID_CONTROL_FIELD);
+ /*
+ * The emulated instruction was already skipped in
+ * nested_vmx_run, but the updated RIP was never
+ * written back to the vmcs01.
+ */
+ skip_emulated_instruction(vcpu);
+ vmx->fail = 0;
}
/*
@@ -11829,7 +11854,7 @@ static int vmx_update_pi_irte(struct kvm *kvm, unsigned int host_irq,
struct kvm_lapic_irq irq;
struct kvm_vcpu *vcpu;
struct vcpu_data vcpu_info;
- int idx, ret = -EINVAL;
+ int idx, ret = 0;
if (!kvm_arch_has_assigned_device(kvm) ||
!irq_remapping_cap(IRQ_POSTING_CAP) ||
@@ -11838,7 +11863,12 @@ static int vmx_update_pi_irte(struct kvm *kvm, unsigned int host_irq,
idx = srcu_read_lock(&kvm->irq_srcu);
irq_rt = srcu_dereference(kvm->irq_routing, &kvm->irq_srcu);
- BUG_ON(guest_irq >= irq_rt->nr_rt_entries);
+ if (guest_irq >= irq_rt->nr_rt_entries ||
+ hlist_empty(&irq_rt->map[guest_irq])) {
+ pr_warn_once("no route for guest_irq %u/%u (broken user space?)\n",
+ guest_irq, irq_rt->nr_rt_entries);
+ goto out;
+ }
hlist_for_each_entry(e, &irq_rt->map[guest_irq], link) {
if (e->type != KVM_IRQ_ROUTING_MSI)
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 6069af86da3b..cd17b7d9a107 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -7231,10 +7231,19 @@ int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu, struct kvm_run *kvm_run)
sigprocmask(SIG_SETMASK, &vcpu->sigset, &sigsaved);
if (unlikely(vcpu->arch.mp_state == KVM_MP_STATE_UNINITIALIZED)) {
+ if (kvm_run->immediate_exit) {
+ r = -EINTR;
+ goto out;
+ }
kvm_vcpu_block(vcpu);
kvm_apic_accept_events(vcpu);
kvm_clear_request(KVM_REQ_UNHALT, vcpu);
r = -EAGAIN;
+ if (signal_pending(current)) {
+ r = -EINTR;
+ vcpu->run->exit_reason = KVM_EXIT_INTR;
+ ++vcpu->stat.signal_exits;
+ }
goto out;
}
@@ -7971,7 +7980,7 @@ int kvm_arch_vcpu_init(struct kvm_vcpu *vcpu)
BUG_ON(vcpu->kvm == NULL);
kvm = vcpu->kvm;
- vcpu->arch.apicv_active = kvm_x86_ops->get_enable_apicv();
+ vcpu->arch.apicv_active = kvm_x86_ops->get_enable_apicv(vcpu);
vcpu->arch.pv.pv_unhalted = false;
vcpu->arch.emulate_ctxt.ops = &emulate_ops;
if (!irqchip_in_kernel(kvm) || kvm_vcpu_is_reset_bsp(vcpu))
@@ -8452,6 +8461,9 @@ static inline bool kvm_vcpu_has_events(struct kvm_vcpu *vcpu)
if (vcpu->arch.pv.pv_unhalted)
return true;
+ if (vcpu->arch.exception.pending)
+ return true;
+
if (kvm_test_request(KVM_REQ_NMI, vcpu) ||
(vcpu->arch.nmi_pending &&
kvm_x86_ops->nmi_allowed(vcpu)))
@@ -8619,6 +8631,13 @@ static int apf_put_user(struct kvm_vcpu *vcpu, u32 val)
sizeof(val));
}
+static int apf_get_user(struct kvm_vcpu *vcpu, u32 *val)
+{
+
+ return kvm_read_guest_cached(vcpu->kvm, &vcpu->arch.apf.data, val,
+ sizeof(u32));
+}
+
void kvm_arch_async_page_not_present(struct kvm_vcpu *vcpu,
struct kvm_async_pf *work)
{
@@ -8646,6 +8665,7 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
struct kvm_async_pf *work)
{
struct x86_exception fault;
+ u32 val;
if (work->wakeup_all)
work->arch.token = ~0; /* broadcast wakeup */
@@ -8653,15 +8673,26 @@ void kvm_arch_async_page_present(struct kvm_vcpu *vcpu,
kvm_del_async_pf_gfn(vcpu, work->arch.gfn);
trace_kvm_async_pf_ready(work->arch.token, work->gva);
- if ((vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED) &&
- !apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
- fault.vector = PF_VECTOR;
- fault.error_code_valid = true;
- fault.error_code = 0;
- fault.nested_page_fault = false;
- fault.address = work->arch.token;
- fault.async_page_fault = true;
- kvm_inject_page_fault(vcpu, &fault);
+ if (vcpu->arch.apf.msr_val & KVM_ASYNC_PF_ENABLED &&
+ !apf_get_user(vcpu, &val)) {
+ if (val == KVM_PV_REASON_PAGE_NOT_PRESENT &&
+ vcpu->arch.exception.pending &&
+ vcpu->arch.exception.nr == PF_VECTOR &&
+ !apf_put_user(vcpu, 0)) {
+ vcpu->arch.exception.injected = false;
+ vcpu->arch.exception.pending = false;
+ vcpu->arch.exception.nr = 0;
+ vcpu->arch.exception.has_error_code = false;
+ vcpu->arch.exception.error_code = 0;
+ } else if (!apf_put_user(vcpu, KVM_PV_REASON_PAGE_READY)) {
+ fault.vector = PF_VECTOR;
+ fault.error_code_valid = true;
+ fault.error_code = 0;
+ fault.nested_page_fault = false;
+ fault.address = work->arch.token;
+ fault.async_page_fault = true;
+ kvm_inject_page_fault(vcpu, &fault);
+ }
}
vcpu->arch.apf.halted = false;
vcpu->arch.mp_state = KVM_MP_STATE_RUNNABLE;
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 7777ccc0e9f9..af5c1ed21d43 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -19,6 +19,7 @@
#include <asm/microcode.h>
#include <asm/kaslr.h>
#include <asm/hypervisor.h>
+#include <asm/cpufeature.h>
/*
* We need to define the tracepoints somewhere, and tlb.c
@@ -193,6 +194,38 @@ static void __init probe_page_size_mask(void)
}
}
+static void setup_pcid(void)
+{
+#ifdef CONFIG_X86_64
+ if (boot_cpu_has(X86_FEATURE_PCID)) {
+ if (boot_cpu_has(X86_FEATURE_PGE)) {
+ /*
+ * This can't be cr4_set_bits_and_update_boot() --
+ * the trampoline code can't handle CR4.PCIDE and
+ * it wouldn't do any good anyway. Despite the name,
+ * cr4_set_bits_and_update_boot() doesn't actually
+ * cause the bits in question to remain set all the
+ * way through the secondary boot asm.
+ *
+ * Instead, we brute-force it and set CR4.PCIDE
+ * manually in start_secondary().
+ */
+ cr4_set_bits(X86_CR4_PCIDE);
+ } else {
+ /*
+ * flush_tlb_all(), as currently implemented, won't
+ * work if PCID is on but PGE is not. Since that
+ * combination doesn't exist on real hardware, there's
+ * no reason to try to fully support it, but it's
+ * polite to avoid corrupting data if we're on
+ * an improperly configured VM.
+ */
+ setup_clear_cpu_cap(X86_FEATURE_PCID);
+ }
+ }
+#endif
+}
+
#ifdef CONFIG_X86_32
#define NR_RANGE_MR 3
#else /* CONFIG_X86_64 */
@@ -592,6 +625,7 @@ void __init init_mem_mapping(void)
unsigned long end;
probe_page_size_mask();
+ setup_pcid();
#ifdef CONFIG_X86_64
end = max_pfn << PAGE_SHIFT;
diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c
index 218834a3e9ad..b372f3442bbf 100644
--- a/arch/x86/mm/pgtable.c
+++ b/arch/x86/mm/pgtable.c
@@ -426,10 +426,8 @@ int ptep_set_access_flags(struct vm_area_struct *vma,
{
int changed = !pte_same(*ptep, entry);
- if (changed && dirty) {
+ if (changed && dirty)
*ptep = entry;
- pte_update(vma->vm_mm, address, ptep);
- }
return changed;
}
@@ -486,9 +484,6 @@ int ptep_test_and_clear_young(struct vm_area_struct *vma,
ret = test_and_clear_bit(_PAGE_BIT_ACCESSED,
(unsigned long *) &ptep->pte);
- if (ret)
- pte_update(vma->vm_mm, addr, ptep);
-
return ret;
}
diff --git a/arch/x86/mm/tlb.c b/arch/x86/mm/tlb.c
index 37689a7cc03b..1ab3821f9e26 100644
--- a/arch/x86/mm/tlb.c
+++ b/arch/x86/mm/tlb.c
@@ -121,8 +121,28 @@ void switch_mm_irqs_off(struct mm_struct *prev, struct mm_struct *next,
* hypothetical buggy code that directly switches to swapper_pg_dir
* without going through leave_mm() / switch_mm_irqs_off() or that
* does something like write_cr3(read_cr3_pa()).
+ *
+ * Only do this check if CONFIG_DEBUG_VM=y because __read_cr3()
+ * isn't free.
*/
- VM_BUG_ON(__read_cr3() != (__sme_pa(real_prev->pgd) | prev_asid));
+#ifdef CONFIG_DEBUG_VM
+ if (WARN_ON_ONCE(__read_cr3() !=
+ (__sme_pa(real_prev->pgd) | prev_asid))) {
+ /*
+ * If we were to BUG here, we'd be very likely to kill
+ * the system so hard that we don't see the call trace.
+ * Try to recover instead by ignoring the error and doing
+ * a global flush to minimize the chance of corruption.
+ *
+ * (This is far from being a fully correct recovery.
+ * Architecturally, the CPU could prefetch something
+ * back into an incorrect ASID slot and leave it there
+ * to cause trouble down the road. It's better than
+ * nothing, though.)
+ */
+ __flush_tlb_all();
+ }
+#endif
if (real_prev == next) {
VM_BUG_ON(this_cpu_read(cpu_tlbstate.ctxs[prev_asid].ctx_id) !=
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c
index 9bd115484745..0f5f60b14f48 100644
--- a/arch/x86/pci/irq.c
+++ b/arch/x86/pci/irq.c
@@ -1092,7 +1092,7 @@ static int __init fix_acer_tm360_irqrouting(const struct dmi_system_id *d)
return 0;
}
-static struct dmi_system_id __initdata pciirq_dmi_table[] = {
+static const struct dmi_system_id pciirq_dmi_table[] __initconst = {
{
.callback = fix_broken_hp_bios_irq9,
.ident = "HP Pavilion N5400 Series Laptop",
diff --git a/arch/x86/power/cpu.c b/arch/x86/power/cpu.c
index 4d68d59f457d..84fcfde53f8f 100644
--- a/arch/x86/power/cpu.c
+++ b/arch/x86/power/cpu.c
@@ -428,7 +428,7 @@ static int msr_initialize_bdw(const struct dmi_system_id *d)
return msr_init_context(bdw_msr_id, ARRAY_SIZE(bdw_msr_id));
}
-static struct dmi_system_id msr_save_dmi_table[] = {
+static const struct dmi_system_id msr_save_dmi_table[] = {
{
.callback = msr_initialize_bdw,
.ident = "BROADWELL BDX_EP",
diff --git a/arch/x86/power/hibernate_64.c b/arch/x86/power/hibernate_64.c
index f2598d81cd55..f910c514438f 100644
--- a/arch/x86/power/hibernate_64.c
+++ b/arch/x86/power/hibernate_64.c
@@ -295,7 +295,26 @@ int arch_hibernation_header_save(void *addr, unsigned int max_size)
return -EOVERFLOW;
rdr->jump_address = (unsigned long)restore_registers;
rdr->jump_address_phys = __pa_symbol(restore_registers);
- rdr->cr3 = restore_cr3;
+
+ /*
+ * The restore code fixes up CR3 and CR4 in the following sequence:
+ *
+ * [in hibernation asm]
+ * 1. CR3 <= temporary page tables
+ * 2. CR4 <= mmu_cr4_features (from the kernel that restores us)
+ * 3. CR3 <= rdr->cr3
+ * 4. CR4 <= mmu_cr4_features (from us, i.e. the image kernel)
+ * [in restore_processor_state()]
+ * 5. CR4 <= saved CR4
+ * 6. CR3 <= saved CR3
+ *
+ * Our mmu_cr4_features has CR4.PCIDE=0, and toggling
+ * CR4.PCIDE while CR3's PCID bits are nonzero is illegal, so
+ * rdr->cr3 needs to point to valid page tables but must not
+ * have any of the PCID bits set.
+ */
+ rdr->cr3 = restore_cr3 & ~CR3_PCID_MASK;
+
rdr->magic = RESTORE_MAGIC;
hibernation_e820_save(rdr->e820_digest);
diff --git a/arch/x86/um/os-Linux/registers.c b/arch/x86/um/os-Linux/registers.c
index 28775f55bde2..3c423dfcd78b 100644
--- a/arch/x86/um/os-Linux/registers.c
+++ b/arch/x86/um/os-Linux/registers.c
@@ -5,6 +5,7 @@
*/
#include <errno.h>
+#include <stdlib.h>
#include <sys/ptrace.h>
#ifdef __i386__
#include <sys/user.h>
@@ -31,7 +32,7 @@ int save_fp_registers(int pid, unsigned long *fp_regs)
if (have_xstate_support) {
iov.iov_base = fp_regs;
- iov.iov_len = sizeof(struct _xstate);
+ iov.iov_len = FP_SIZE * sizeof(unsigned long);
if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
return -errno;
return 0;
@@ -51,10 +52,9 @@ int restore_fp_registers(int pid, unsigned long *fp_regs)
{
#ifdef PTRACE_SETREGSET
struct iovec iov;
-
if (have_xstate_support) {
iov.iov_base = fp_regs;
- iov.iov_len = sizeof(struct _xstate);
+ iov.iov_len = FP_SIZE * sizeof(unsigned long);
if (ptrace(PTRACE_SETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
return -errno;
return 0;
@@ -125,13 +125,19 @@ int put_fp_registers(int pid, unsigned long *regs)
void arch_init_registers(int pid)
{
#ifdef PTRACE_GETREGSET
- struct _xstate fp_regs;
+ void * fp_regs;
struct iovec iov;
- iov.iov_base = &fp_regs;
- iov.iov_len = sizeof(struct _xstate);
+ fp_regs = malloc(FP_SIZE * sizeof(unsigned long));
+ if(fp_regs == NULL)
+ return;
+
+ iov.iov_base = fp_regs;
+ iov.iov_len = FP_SIZE * sizeof(unsigned long);
if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) == 0)
have_xstate_support = 1;
+
+ free(fp_regs);
#endif
}
#endif
diff --git a/arch/x86/um/os-Linux/tls.c b/arch/x86/um/os-Linux/tls.c
index 9d94b3b76c74..ed8ea90967dc 100644
--- a/arch/x86/um/os-Linux/tls.c
+++ b/arch/x86/um/os-Linux/tls.c
@@ -37,7 +37,7 @@ void check_host_supports_tls(int *supports_tls, int *tls_min)
continue;
else if (errno == ENOSYS)
*supports_tls = 0;
- return;
+ return;
}
}
diff --git a/arch/x86/um/user-offsets.c b/arch/x86/um/user-offsets.c
index 02250b2633b8..3099c209546f 100644
--- a/arch/x86/um/user-offsets.c
+++ b/arch/x86/um/user-offsets.c
@@ -51,7 +51,7 @@ void foo(void)
DEFINE(HOST_ORIG_AX, ORIG_EAX);
#else
#ifdef FP_XSTATE_MAGIC1
- DEFINE(HOST_FP_SIZE, sizeof(struct _xstate) / sizeof(unsigned long));
+ DEFINE_LONGS(HOST_FP_SIZE, 2696);
#else
DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));
#endif
diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c
index ae2a2e2d6362..69b9deff7e5c 100644
--- a/arch/x86/xen/enlighten_pv.c
+++ b/arch/x86/xen/enlighten_pv.c
@@ -1038,7 +1038,6 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
.read_cr0 = xen_read_cr0,
.write_cr0 = xen_write_cr0,
- .read_cr4 = native_read_cr4,
.write_cr4 = xen_write_cr4,
#ifdef CONFIG_X86_64
@@ -1073,7 +1072,6 @@ static const struct pv_cpu_ops xen_cpu_ops __initconst = {
.alloc_ldt = xen_alloc_ldt,
.free_ldt = xen_free_ldt,
- .store_idt = native_store_idt,
.store_tr = xen_store_tr,
.write_ldt_entry = xen_write_ldt_entry,
diff --git a/arch/x86/xen/mmu_pv.c b/arch/x86/xen/mmu_pv.c
index 6b983b300666..509f560bd0c6 100644
--- a/arch/x86/xen/mmu_pv.c
+++ b/arch/x86/xen/mmu_pv.c
@@ -2409,8 +2409,6 @@ static const struct pv_mmu_ops xen_mmu_ops __initconst = {
.flush_tlb_single = xen_flush_tlb_single,
.flush_tlb_others = xen_flush_tlb_others,
- .pte_update = paravirt_nop,
-
.pgd_alloc = xen_pgd_alloc,
.pgd_free = xen_pgd_free,
diff --git a/block/blk-core.c b/block/blk-core.c
index d709c0e3a2ac..aebe676225e6 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -2342,7 +2342,12 @@ blk_status_t blk_insert_cloned_request(struct request_queue *q, struct request *
if (q->mq_ops) {
if (blk_queue_io_stat(q))
blk_account_io_start(rq, true);
- blk_mq_sched_insert_request(rq, false, true, false, false);
+ /*
+ * Since we have a scheduler attached on the top device,
+ * bypass a potential scheduler on the bottom device for
+ * insert.
+ */
+ blk_mq_request_bypass_insert(rq);
return BLK_STS_OK;
}
diff --git a/block/blk-lib.c b/block/blk-lib.c
index e01adb5145b3..62240f8832ca 100644
--- a/block/blk-lib.c
+++ b/block/blk-lib.c
@@ -269,9 +269,9 @@ static int __blkdev_issue_write_zeroes(struct block_device *bdev,
*/
static unsigned int __blkdev_sectors_to_bio_pages(sector_t nr_sects)
{
- sector_t bytes = (nr_sects << 9) + PAGE_SIZE - 1;
+ sector_t pages = DIV_ROUND_UP_SECTOR_T(nr_sects, PAGE_SIZE / 512);
- return min(bytes >> PAGE_SHIFT, (sector_t)BIO_MAX_PAGES);
+ return min(pages, (sector_t)BIO_MAX_PAGES);
}
/**
diff --git a/block/blk-mq.c b/block/blk-mq.c
index 3f18cff80050..98a18609755e 100644
--- a/block/blk-mq.c
+++ b/block/blk-mq.c
@@ -1401,6 +1401,22 @@ void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
blk_mq_hctx_mark_pending(hctx, ctx);
}
+/*
+ * Should only be used carefully, when the caller knows we want to
+ * bypass a potential IO scheduler on the target device.
+ */
+void blk_mq_request_bypass_insert(struct request *rq)
+{
+ struct blk_mq_ctx *ctx = rq->mq_ctx;
+ struct blk_mq_hw_ctx *hctx = blk_mq_map_queue(rq->q, ctx->cpu);
+
+ spin_lock(&hctx->lock);
+ list_add_tail(&rq->queuelist, &hctx->dispatch);
+ spin_unlock(&hctx->lock);
+
+ blk_mq_run_hw_queue(hctx, false);
+}
+
void blk_mq_insert_requests(struct blk_mq_hw_ctx *hctx, struct blk_mq_ctx *ctx,
struct list_head *list)
diff --git a/block/blk-mq.h b/block/blk-mq.h
index 98252b79b80b..ef15b3414da5 100644
--- a/block/blk-mq.h
+++ b/block/blk-mq.h
@@ -54,6 +54,7 @@ int blk_mq_alloc_rqs(struct blk_mq_tag_set *set, struct blk_mq_tags *tags,
*/
void __blk_mq_insert_request(struct blk_mq_hw_ctx *hctx, struct request *rq,
bool at_head);
+void blk_mq_request_bypass_insert(struct request *rq);
void blk_mq_insert_requests(struct blk_mq_hw_ctx *hctx, struct blk_mq_ctx *ctx,
struct list_head *list);
diff --git a/block/opal_proto.h b/block/opal_proto.h
index f40c9acf8895..e20be8258854 100644
--- a/block/opal_proto.h
+++ b/block/opal_proto.h
@@ -46,6 +46,7 @@ enum opal_response_token {
#define GENERIC_HOST_SESSION_NUM 0x41
#define TPER_SYNC_SUPPORTED 0x01
+#define MBR_ENABLED_MASK 0x10
#define TINY_ATOM_DATA_MASK 0x3F
#define TINY_ATOM_SIGNED 0x40
diff --git a/block/sed-opal.c b/block/sed-opal.c
index 9b30ae5ab843..9ed51d0c6b1d 100644
--- a/block/sed-opal.c
+++ b/block/sed-opal.c
@@ -80,6 +80,7 @@ struct parsed_resp {
struct opal_dev {
bool supported;
+ bool mbr_enabled;
void *data;
sec_send_recv *send_recv;
@@ -283,6 +284,14 @@ static bool check_tper(const void *data)
return true;
}
+static bool check_mbrenabled(const void *data)
+{
+ const struct d0_locking_features *lfeat = data;
+ u8 sup_feat = lfeat->supported_features;
+
+ return !!(sup_feat & MBR_ENABLED_MASK);
+}
+
static bool check_sum(const void *data)
{
const struct d0_single_user_mode *sum = data;
@@ -417,6 +426,7 @@ static int opal_discovery0_end(struct opal_dev *dev)
u32 hlen = be32_to_cpu(hdr->length);
print_buffer(dev->resp, hlen);
+ dev->mbr_enabled = false;
if (hlen > IO_BUFFER_LENGTH - sizeof(*hdr)) {
pr_debug("Discovery length overflows buffer (%zu+%u)/%u\n",
@@ -442,6 +452,8 @@ static int opal_discovery0_end(struct opal_dev *dev)
check_geometry(dev, body);
break;
case FC_LOCKING:
+ dev->mbr_enabled = check_mbrenabled(body->features);
+ break;
case FC_ENTERPRISE:
case FC_DATASTORE:
/* some ignored properties */
@@ -2190,6 +2202,21 @@ static int __opal_lock_unlock(struct opal_dev *dev,
return next(dev);
}
+static int __opal_set_mbr_done(struct opal_dev *dev, struct opal_key *key)
+{
+ u8 mbr_done_tf = 1;
+ const struct opal_step mbrdone_step [] = {
+ { opal_discovery0, },
+ { start_admin1LSP_opal_session, key },
+ { set_mbr_done, &mbr_done_tf },
+ { end_opal_session, },
+ { NULL, }
+ };
+
+ dev->steps = mbrdone_step;
+ return next(dev);
+}
+
static int opal_lock_unlock(struct opal_dev *dev,
struct opal_lock_unlock *lk_unlk)
{
@@ -2345,6 +2372,11 @@ bool opal_unlock_from_suspend(struct opal_dev *dev)
suspend->unlk.session.sum);
was_failure = true;
}
+ if (dev->mbr_enabled) {
+ ret = __opal_set_mbr_done(dev, &suspend->unlk.session.opal_key);
+ if (ret)
+ pr_debug("Failed to set MBR Done in S3 resume\n");
+ }
}
mutex_unlock(&dev->dev_lock);
return was_failure;
diff --git a/drivers/acpi/acpi_video.c b/drivers/acpi/acpi_video.c
index e88fe3632dd6..0972ec0e2eb8 100644
--- a/drivers/acpi/acpi_video.c
+++ b/drivers/acpi/acpi_video.c
@@ -418,7 +418,7 @@ static int video_set_report_key_events(const struct dmi_system_id *id)
return 0;
}
-static struct dmi_system_id video_dmi_table[] = {
+static const struct dmi_system_id video_dmi_table[] = {
/*
* Broken _BQC workaround http://bugzilla.kernel.org/show_bug.cgi?id=13121
*/
diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
index 037fd537bbf6..995c4d8922b1 100644
--- a/drivers/acpi/blacklist.c
+++ b/drivers/acpi/blacklist.c
@@ -30,7 +30,7 @@
#include "internal.h"
-static struct dmi_system_id acpi_rev_dmi_table[] __initdata;
+static const struct dmi_system_id acpi_rev_dmi_table[] __initconst;
/*
* POLICY: If *anything* doesn't work, put it on the blacklist.
@@ -89,7 +89,7 @@ static int __init dmi_enable_rev_override(const struct dmi_system_id *d)
}
#endif
-static struct dmi_system_id acpi_rev_dmi_table[] __initdata = {
+static const struct dmi_system_id acpi_rev_dmi_table[] __initconst = {
#ifdef CONFIG_ACPI_REV_OVERRIDE_POSSIBLE
/*
* DELL XPS 13 (2015) switches sound between HDA and I2S
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index 59f2f96fdb7e..4d0979e02a28 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -67,7 +67,7 @@ static int set_copy_dsdt(const struct dmi_system_id *id)
}
#endif
-static struct dmi_system_id dsdt_dmi_table[] __initdata = {
+static const struct dmi_system_id dsdt_dmi_table[] __initconst = {
/*
* Invoke DSDT corruption work-around on all Toshiba Satellite.
* https://bugzilla.kernel.org/show_bug.cgi?id=14679
@@ -83,7 +83,7 @@ static struct dmi_system_id dsdt_dmi_table[] __initdata = {
{}
};
#else
-static struct dmi_system_id dsdt_dmi_table[] __initdata = {
+static const struct dmi_system_id dsdt_dmi_table[] __initconst = {
{}
};
#endif
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index fdfae6f3c0b1..236b14324780 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -1809,7 +1809,7 @@ static int ec_honor_ecdt_gpe(const struct dmi_system_id *id)
return 0;
}
-static struct dmi_system_id ec_dmi_table[] __initdata = {
+static const struct dmi_system_id ec_dmi_table[] __initconst = {
{
ec_correct_ecdt, "MSI MS-171F", {
DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star"),
diff --git a/drivers/acpi/osi.c b/drivers/acpi/osi.c
index 19cdd8a783a9..76998a51bf99 100644
--- a/drivers/acpi/osi.c
+++ b/drivers/acpi/osi.c
@@ -312,7 +312,7 @@ static int __init dmi_disable_osi_win8(const struct dmi_system_id *d)
* Note that _OSI("Linux")/_OSI("Darwin") determined here can be overridden
* by acpi_osi=!Linux/acpi_osi=!Darwin command line options.
*/
-static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
+static const struct dmi_system_id acpi_osi_dmi_table[] __initconst = {
{
.callback = dmi_disable_osi_vista,
.ident = "Fujitsu Siemens",
diff --git a/drivers/acpi/pci_slot.c b/drivers/acpi/pci_slot.c
index f62c68e24317..e90b61f7d2db 100644
--- a/drivers/acpi/pci_slot.c
+++ b/drivers/acpi/pci_slot.c
@@ -174,7 +174,7 @@ static int do_sta_before_sun(const struct dmi_system_id *d)
return 0;
}
-static struct dmi_system_id acpi_pci_slot_dmi_table[] __initdata = {
+static const struct dmi_system_id acpi_pci_slot_dmi_table[] __initconst = {
/*
* Fujitsu Primequest machines will return 1023 to indicate an
* error if the _SUN method is evaluated on SxFy objects that
diff --git a/drivers/acpi/processor_pdc.c b/drivers/acpi/processor_pdc.c
index 7cfbda4d7c51..74f738cb6073 100644
--- a/drivers/acpi/processor_pdc.c
+++ b/drivers/acpi/processor_pdc.c
@@ -173,7 +173,7 @@ static int __init set_no_mwait(const struct dmi_system_id *id)
return 0;
}
-static struct dmi_system_id processor_idle_dmi_table[] __initdata = {
+static const struct dmi_system_id processor_idle_dmi_table[] __initconst = {
{
set_no_mwait, "Extensa 5220", {
DMI_MATCH(DMI_BIOS_VENDOR, "Phoenix Technologies LTD"),
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index 9fdd014759f8..6804ddab3052 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -160,7 +160,7 @@ static int __init init_nvs_nosave(const struct dmi_system_id *d)
return 0;
}
-static struct dmi_system_id acpisleep_dmi_table[] __initdata = {
+static const struct dmi_system_id acpisleep_dmi_table[] __initconst = {
{
.callback = init_old_suspend_ordering,
.ident = "Abit KN9 (nForce4 variant)",
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index 1d0417b87cb7..551b71a24b85 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -1209,7 +1209,7 @@ static int thermal_psv(const struct dmi_system_id *d) {
return 0;
}
-static struct dmi_system_id thermal_dmi_table[] __initdata = {
+static const struct dmi_system_id thermal_dmi_table[] __initconst = {
/*
* Award BIOS on this AOpen makes thermal control almost worthless.
* http://bugzilla.kernel.org/show_bug.cgi?id=8842
diff --git a/drivers/base/Kconfig b/drivers/base/Kconfig
index f046d21de57d..1a5f6a157a57 100644
--- a/drivers/base/Kconfig
+++ b/drivers/base/Kconfig
@@ -140,13 +140,10 @@ config EXTRA_FIRMWARE
config EXTRA_FIRMWARE_DIR
string "Firmware blobs root directory"
depends on EXTRA_FIRMWARE != ""
- default "firmware"
+ default "/lib/firmware"
help
This option controls the directory in which the kernel build system
looks for the firmware files listed in the EXTRA_FIRMWARE option.
- The default is firmware/ in the kernel source tree, but by changing
- this option you can point it elsewhere, such as /lib/firmware/ or
- some other directory containing the firmware files.
config FW_LOADER_USER_HELPER
bool
diff --git a/drivers/block/rbd.c b/drivers/block/rbd.c
index b008b6a98098..b640ad8a6d20 100644
--- a/drivers/block/rbd.c
+++ b/drivers/block/rbd.c
@@ -3435,7 +3435,7 @@ static void rbd_acquire_lock(struct work_struct *work)
struct rbd_device *rbd_dev = container_of(to_delayed_work(work),
struct rbd_device, lock_dwork);
enum rbd_lock_state lock_state;
- int ret;
+ int ret = 0;
dout("%s rbd_dev %p\n", __func__, rbd_dev);
again:
diff --git a/drivers/char/sonypi.c b/drivers/char/sonypi.c
index f4f866ee54bc..d3a979e25724 100644
--- a/drivers/char/sonypi.c
+++ b/drivers/char/sonypi.c
@@ -1491,7 +1491,7 @@ static struct platform_driver sonypi_driver = {
static struct platform_device *sonypi_platform_device;
-static struct dmi_system_id __initdata sonypi_dmi_table[] = {
+static const struct dmi_system_id sonypi_dmi_table[] __initconst = {
{
.ident = "Sony Vaio",
.matches = {
diff --git a/drivers/clk/Kconfig b/drivers/clk/Kconfig
index 68ca2d9fcd73..1c4e1aa6767e 100644
--- a/drivers/clk/Kconfig
+++ b/drivers/clk/Kconfig
@@ -31,6 +31,13 @@ config COMMON_CLK_WM831X
source "drivers/clk/versatile/Kconfig"
+config CLK_HSDK
+ bool "PLL Driver for HSDK platform"
+ depends on OF || COMPILE_TEST
+ ---help---
+ This driver supports the HSDK core, system, ddr, tunnel and hdmi PLLs
+ control.
+
config COMMON_CLK_MAX77686
tristate "Clock driver for Maxim 77620/77686/77802 MFD"
depends on MFD_MAX77686 || MFD_MAX77620 || COMPILE_TEST
@@ -39,10 +46,10 @@ config COMMON_CLK_MAX77686
clock.
config COMMON_CLK_RK808
- tristate "Clock driver for RK808/RK818"
+ tristate "Clock driver for RK805/RK808/RK818"
depends on MFD_RK808
---help---
- This driver supports RK808 and RK818 crystal oscillator clock. These
+ This driver supports RK805, RK808 and RK818 crystal oscillator clock. These
multi-function devices have two fixed-rate oscillators,
clocked at 32KHz each. Clkout1 is always on, Clkout2 can off
by control register.
@@ -210,14 +217,14 @@ config COMMON_CLK_OXNAS
Support for the OXNAS SoC Family clocks.
config COMMON_CLK_VC5
- tristate "Clock driver for IDT VersaClock5 devices"
+ tristate "Clock driver for IDT VersaClock 5,6 devices"
depends on I2C
depends on OF
select REGMAP_I2C
help
---help---
- This driver supports the IDT VersaClock5 programmable clock
- generator.
+ This driver supports the IDT VersaClock 5 and VersaClock 6
+ programmable clock generators.
source "drivers/clk/bcm/Kconfig"
source "drivers/clk/hisilicon/Kconfig"
diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile
index cd376b3fb47a..c99f363826f0 100644
--- a/drivers/clk/Makefile
+++ b/drivers/clk/Makefile
@@ -27,8 +27,8 @@ obj-$(CONFIG_COMMON_CLK_CS2000_CP) += clk-cs2000-cp.o
obj-$(CONFIG_ARCH_EFM32) += clk-efm32gg.o
obj-$(CONFIG_COMMON_CLK_GEMINI) += clk-gemini.o
obj-$(CONFIG_ARCH_HIGHBANK) += clk-highbank.o
+obj-$(CONFIG_CLK_HSDK) += clk-hsdk-pll.o
obj-$(CONFIG_COMMON_CLK_MAX77686) += clk-max77686.o
-obj-$(CONFIG_ARCH_MB86S7X) += clk-mb86s7x.o
obj-$(CONFIG_ARCH_MOXART) += clk-moxart.o
obj-$(CONFIG_ARCH_NOMADIK) += clk-nomadik.o
obj-$(CONFIG_ARCH_NSPIRE) += clk-nspire.o
@@ -44,6 +44,7 @@ obj-$(CONFIG_COMMON_CLK_SI5351) += clk-si5351.o
obj-$(CONFIG_COMMON_CLK_SI514) += clk-si514.o
obj-$(CONFIG_COMMON_CLK_SI570) += clk-si570.o
obj-$(CONFIG_ARCH_STM32) += clk-stm32f4.o
+obj-$(CONFIG_ARCH_STM32) += clk-stm32h7.o
obj-$(CONFIG_ARCH_TANGO) += clk-tango4.o
obj-$(CONFIG_CLK_TWL6040) += clk-twl6040.o
obj-$(CONFIG_ARCH_U300) += clk-u300.o
diff --git a/drivers/clk/at91/Makefile b/drivers/clk/at91/Makefile
index 13e67bd35cff..c68947b65a4c 100644
--- a/drivers/clk/at91/Makefile
+++ b/drivers/clk/at91/Makefile
@@ -6,6 +6,7 @@ obj-y += pmc.o sckc.o
obj-y += clk-slow.o clk-main.o clk-pll.o clk-plldiv.o clk-master.o
obj-y += clk-system.o clk-peripheral.o clk-programmable.o
+obj-$(CONFIG_HAVE_AT91_AUDIO_PLL) += clk-audio-pll.o
obj-$(CONFIG_HAVE_AT91_UTMI) += clk-utmi.o
obj-$(CONFIG_HAVE_AT91_USB_CLK) += clk-usb.o
obj-$(CONFIG_HAVE_AT91_SMD) += clk-smd.o
diff --git a/drivers/clk/at91/clk-audio-pll.c b/drivers/clk/at91/clk-audio-pll.c
new file mode 100644
index 000000000000..da7bafcfbe70
--- /dev/null
+++ b/drivers/clk/at91/clk-audio-pll.c
@@ -0,0 +1,536 @@
+/*
+ * Copyright (C) 2016 Atmel Corporation,
+ * Songjun Wu <songjun.wu@atmel.com>,
+ * Nicolas Ferre <nicolas.ferre@atmel.com>
+ * Copyright (C) 2017 Free Electrons,
+ * Quentin Schulz <quentin.schulz@free-electrons.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * The Sama5d2 SoC has two audio PLLs (PMC and PAD) that shares the same parent
+ * (FRAC). FRAC can output between 620 and 700MHz and only multiply the rate of
+ * its own parent. PMC and PAD can then divide the FRAC rate to best match the
+ * asked rate.
+ *
+ * Traits of FRAC clock:
+ * enable - clk_enable writes nd, fracr parameters and enables PLL
+ * rate - rate is adjustable.
+ * clk->rate = parent->rate * ((nd + 1) + (fracr / 2^22))
+ * parent - fixed parent. No clk_set_parent support
+ *
+ * Traits of PMC clock:
+ * enable - clk_enable writes qdpmc, and enables PMC output
+ * rate - rate is adjustable.
+ * clk->rate = parent->rate / (qdpmc + 1)
+ * parent - fixed parent. No clk_set_parent support
+ *
+ * Traits of PAD clock:
+ * enable - clk_enable writes divisors and enables PAD output
+ * rate - rate is adjustable.
+ * clk->rate = parent->rate / (qdaudio * div))
+ * parent - fixed parent. No clk_set_parent support
+ *
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/clk/at91_pmc.h>
+#include <linux/of.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
+#include <linux/slab.h>
+
+#define AUDIO_PLL_DIV_FRAC BIT(22)
+#define AUDIO_PLL_ND_MAX (AT91_PMC_AUDIO_PLL_ND_MASK >> \
+ AT91_PMC_AUDIO_PLL_ND_OFFSET)
+
+#define AUDIO_PLL_QDPAD(qd, div) ((AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV(qd) & \
+ AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV_MASK) | \
+ (AT91_PMC_AUDIO_PLL_QDPAD_DIV(div) & \
+ AT91_PMC_AUDIO_PLL_QDPAD_DIV_MASK))
+
+#define AUDIO_PLL_QDPMC_MAX (AT91_PMC_AUDIO_PLL_QDPMC_MASK >> \
+ AT91_PMC_AUDIO_PLL_QDPMC_OFFSET)
+
+#define AUDIO_PLL_FOUT_MIN 620000000UL
+#define AUDIO_PLL_FOUT_MAX 700000000UL
+
+struct clk_audio_frac {
+ struct clk_hw hw;
+ struct regmap *regmap;
+ u32 fracr;
+ u8 nd;
+};
+
+struct clk_audio_pad {
+ struct clk_hw hw;
+ struct regmap *regmap;
+ u8 qdaudio;
+ u8 div;
+};
+
+struct clk_audio_pmc {
+ struct clk_hw hw;
+ struct regmap *regmap;
+ u8 qdpmc;
+};
+
+#define to_clk_audio_frac(hw) container_of(hw, struct clk_audio_frac, hw)
+#define to_clk_audio_pad(hw) container_of(hw, struct clk_audio_pad, hw)
+#define to_clk_audio_pmc(hw) container_of(hw, struct clk_audio_pmc, hw)
+
+static int clk_audio_pll_frac_enable(struct clk_hw *hw)
+{
+ struct clk_audio_frac *frac = to_clk_audio_frac(hw);
+
+ regmap_update_bits(frac->regmap, AT91_PMC_AUDIO_PLL0,
+ AT91_PMC_AUDIO_PLL_RESETN, 0);
+ regmap_update_bits(frac->regmap, AT91_PMC_AUDIO_PLL0,
+ AT91_PMC_AUDIO_PLL_RESETN,
+ AT91_PMC_AUDIO_PLL_RESETN);
+ regmap_update_bits(frac->regmap, AT91_PMC_AUDIO_PLL1,
+ AT91_PMC_AUDIO_PLL_FRACR_MASK, frac->fracr);
+
+ /*
+ * reset and enable have to be done in 2 separated writes
+ * for AT91_PMC_AUDIO_PLL0
+ */
+ regmap_update_bits(frac->regmap, AT91_PMC_AUDIO_PLL0,
+ AT91_PMC_AUDIO_PLL_PLLEN |
+ AT91_PMC_AUDIO_PLL_ND_MASK,
+ AT91_PMC_AUDIO_PLL_PLLEN |
+ AT91_PMC_AUDIO_PLL_ND(frac->nd));
+
+ return 0;
+}
+
+static int clk_audio_pll_pad_enable(struct clk_hw *hw)
+{
+ struct clk_audio_pad *apad_ck = to_clk_audio_pad(hw);
+
+ regmap_update_bits(apad_ck->regmap, AT91_PMC_AUDIO_PLL1,
+ AT91_PMC_AUDIO_PLL_QDPAD_MASK,
+ AUDIO_PLL_QDPAD(apad_ck->qdaudio, apad_ck->div));
+ regmap_update_bits(apad_ck->regmap, AT91_PMC_AUDIO_PLL0,
+ AT91_PMC_AUDIO_PLL_PADEN, AT91_PMC_AUDIO_PLL_PADEN);
+
+ return 0;
+}
+
+static int clk_audio_pll_pmc_enable(struct clk_hw *hw)
+{
+ struct clk_audio_pmc *apmc_ck = to_clk_audio_pmc(hw);
+
+ regmap_update_bits(apmc_ck->regmap, AT91_PMC_AUDIO_PLL0,
+ AT91_PMC_AUDIO_PLL_PMCEN |
+ AT91_PMC_AUDIO_PLL_QDPMC_MASK,
+ AT91_PMC_AUDIO_PLL_PMCEN |
+ AT91_PMC_AUDIO_PLL_QDPMC(apmc_ck->qdpmc));
+ return 0;
+}
+
+static void clk_audio_pll_frac_disable(struct clk_hw *hw)
+{
+ struct clk_audio_frac *frac = to_clk_audio_frac(hw);
+
+ regmap_update_bits(frac->regmap, AT91_PMC_AUDIO_PLL0,
+ AT91_PMC_AUDIO_PLL_PLLEN, 0);
+ /* do it in 2 separated writes */
+ regmap_update_bits(frac->regmap, AT91_PMC_AUDIO_PLL0,
+ AT91_PMC_AUDIO_PLL_RESETN, 0);
+}
+
+static void clk_audio_pll_pad_disable(struct clk_hw *hw)
+{
+ struct clk_audio_pad *apad_ck = to_clk_audio_pad(hw);
+
+ regmap_update_bits(apad_ck->regmap, AT91_PMC_AUDIO_PLL0,
+ AT91_PMC_AUDIO_PLL_PADEN, 0);
+}
+
+static void clk_audio_pll_pmc_disable(struct clk_hw *hw)
+{
+ struct clk_audio_pmc *apmc_ck = to_clk_audio_pmc(hw);
+
+ regmap_update_bits(apmc_ck->regmap, AT91_PMC_AUDIO_PLL0,
+ AT91_PMC_AUDIO_PLL_PMCEN, 0);
+}
+
+static unsigned long clk_audio_pll_fout(unsigned long parent_rate,
+ unsigned long nd, unsigned long fracr)
+{
+ unsigned long long fr = (unsigned long long)parent_rate * fracr;
+
+ pr_debug("A PLL: %s, fr = %llu\n", __func__, fr);
+
+ fr = DIV_ROUND_CLOSEST_ULL(fr, AUDIO_PLL_DIV_FRAC);
+
+ pr_debug("A PLL: %s, fr = %llu\n", __func__, fr);
+
+ return parent_rate * (nd + 1) + fr;
+}
+
+static unsigned long clk_audio_pll_frac_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ struct clk_audio_frac *frac = to_clk_audio_frac(hw);
+ unsigned long fout;
+
+ fout = clk_audio_pll_fout(parent_rate, frac->nd, frac->fracr);
+
+ pr_debug("A PLL: %s, fout = %lu (nd = %u, fracr = %lu)\n", __func__,
+ fout, frac->nd, (unsigned long)frac->fracr);
+
+ return fout;
+}
+
+static unsigned long clk_audio_pll_pad_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ struct clk_audio_pad *apad_ck = to_clk_audio_pad(hw);
+ unsigned long apad_rate = 0;
+
+ if (apad_ck->qdaudio && apad_ck->div)
+ apad_rate = parent_rate / (apad_ck->qdaudio * apad_ck->div);
+
+ pr_debug("A PLL/PAD: %s, apad_rate = %lu (div = %u, qdaudio = %u)\n",
+ __func__, apad_rate, apad_ck->div, apad_ck->qdaudio);
+
+ return apad_rate;
+}
+
+static unsigned long clk_audio_pll_pmc_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ struct clk_audio_pmc *apmc_ck = to_clk_audio_pmc(hw);
+ unsigned long apmc_rate = 0;
+
+ apmc_rate = parent_rate / (apmc_ck->qdpmc + 1);
+
+ pr_debug("A PLL/PMC: %s, apmc_rate = %lu (qdpmc = %u)\n", __func__,
+ apmc_rate, apmc_ck->qdpmc);
+
+ return apmc_rate;
+}
+
+static int clk_audio_pll_frac_compute_frac(unsigned long rate,
+ unsigned long parent_rate,
+ unsigned long *nd,
+ unsigned long *fracr)
+{
+ unsigned long long tmp, rem;
+
+ if (!rate)
+ return -EINVAL;
+
+ tmp = rate;
+ rem = do_div(tmp, parent_rate);
+ if (!tmp || tmp >= AUDIO_PLL_ND_MAX)
+ return -EINVAL;
+
+ *nd = tmp - 1;
+
+ tmp = rem * AUDIO_PLL_DIV_FRAC;
+ tmp = DIV_ROUND_CLOSEST_ULL(tmp, parent_rate);
+ if (tmp > AT91_PMC_AUDIO_PLL_FRACR_MASK)
+ return -EINVAL;
+
+ /* we can cast here as we verified the bounds just above */
+ *fracr = (unsigned long)tmp;
+
+ return 0;
+}
+
+static int clk_audio_pll_frac_determine_rate(struct clk_hw *hw,
+ struct clk_rate_request *req)
+{
+ unsigned long fracr, nd;
+ int ret;
+
+ pr_debug("A PLL: %s, rate = %lu (parent_rate = %lu)\n", __func__,
+ req->rate, req->best_parent_rate);
+
+ req->rate = clamp(req->rate, AUDIO_PLL_FOUT_MIN, AUDIO_PLL_FOUT_MAX);
+
+ req->min_rate = max(req->min_rate, AUDIO_PLL_FOUT_MIN);
+ req->max_rate = min(req->max_rate, AUDIO_PLL_FOUT_MAX);
+
+ ret = clk_audio_pll_frac_compute_frac(req->rate, req->best_parent_rate,
+ &nd, &fracr);
+ if (ret)
+ return ret;
+
+ req->rate = clk_audio_pll_fout(req->best_parent_rate, nd, fracr);
+
+ req->best_parent_hw = clk_hw_get_parent(hw);
+
+ pr_debug("A PLL: %s, best_rate = %lu (nd = %lu, fracr = %lu)\n",
+ __func__, req->rate, nd, fracr);
+
+ return 0;
+}
+
+static long clk_audio_pll_pad_round_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long *parent_rate)
+{
+ struct clk_hw *pclk = clk_hw_get_parent(hw);
+ long best_rate = -EINVAL;
+ unsigned long best_parent_rate;
+ unsigned long tmp_qd;
+ u32 div;
+ long tmp_rate;
+ int tmp_diff;
+ int best_diff = -1;
+
+ pr_debug("A PLL/PAD: %s, rate = %lu (parent_rate = %lu)\n", __func__,
+ rate, *parent_rate);
+
+ /*
+ * Rate divisor is actually made of two different divisors, multiplied
+ * between themselves before dividing the rate.
+ * tmp_qd goes from 1 to 31 and div is either 2 or 3.
+ * In order to avoid testing twice the rate divisor (e.g. divisor 12 can
+ * be found with (tmp_qd, div) = (2, 6) or (3, 4)), we remove any loop
+ * for a rate divisor when div is 2 and tmp_qd is a multiple of 3.
+ * We cannot inverse it (condition div is 3 and tmp_qd is even) or we
+ * would miss some rate divisor that aren't reachable with div being 2
+ * (e.g. rate divisor 90 is made with div = 3 and tmp_qd = 30, thus
+ * tmp_qd is even so we skip it because we think div 2 could make this
+ * rate divisor which isn't possible since tmp_qd has to be <= 31).
+ */
+ for (tmp_qd = 1; tmp_qd < AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV_MAX; tmp_qd++)
+ for (div = 2; div <= 3; div++) {
+ if (div == 2 && tmp_qd % 3 == 0)
+ continue;
+
+ best_parent_rate = clk_hw_round_rate(pclk,
+ rate * tmp_qd * div);
+ tmp_rate = best_parent_rate / (div * tmp_qd);
+ tmp_diff = abs(rate - tmp_rate);
+
+ if (best_diff < 0 || best_diff > tmp_diff) {
+ *parent_rate = best_parent_rate;
+ best_rate = tmp_rate;
+ best_diff = tmp_diff;
+ }
+ }
+
+ pr_debug("A PLL/PAD: %s, best_rate = %ld, best_parent_rate = %lu\n",
+ __func__, best_rate, best_parent_rate);
+
+ return best_rate;
+}
+
+static long clk_audio_pll_pmc_round_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long *parent_rate)
+{
+ struct clk_hw *pclk = clk_hw_get_parent(hw);
+ long best_rate = -EINVAL;
+ unsigned long best_parent_rate = 0;
+ u32 tmp_qd = 0, div;
+ long tmp_rate;
+ int tmp_diff;
+ int best_diff = -1;
+
+ pr_debug("A PLL/PMC: %s, rate = %lu (parent_rate = %lu)\n", __func__,
+ rate, *parent_rate);
+
+ for (div = 1; div <= AUDIO_PLL_QDPMC_MAX; div++) {
+ best_parent_rate = clk_round_rate(pclk->clk, rate * div);
+ tmp_rate = best_parent_rate / div;
+ tmp_diff = abs(rate - tmp_rate);
+
+ if (best_diff < 0 || best_diff > tmp_diff) {
+ *parent_rate = best_parent_rate;
+ best_rate = tmp_rate;
+ best_diff = tmp_diff;
+ tmp_qd = div;
+ }
+ }
+
+ pr_debug("A PLL/PMC: %s, best_rate = %ld, best_parent_rate = %lu (qd = %d)\n",
+ __func__, best_rate, *parent_rate, tmp_qd - 1);
+
+ return best_rate;
+}
+
+static int clk_audio_pll_frac_set_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long parent_rate)
+{
+ struct clk_audio_frac *frac = to_clk_audio_frac(hw);
+ unsigned long fracr, nd;
+ int ret;
+
+ pr_debug("A PLL: %s, rate = %lu (parent_rate = %lu)\n", __func__, rate,
+ parent_rate);
+
+ if (rate < AUDIO_PLL_FOUT_MIN || rate > AUDIO_PLL_FOUT_MAX)
+ return -EINVAL;
+
+ ret = clk_audio_pll_frac_compute_frac(rate, parent_rate, &nd, &fracr);
+ if (ret)
+ return ret;
+
+ frac->nd = nd;
+ frac->fracr = fracr;
+
+ return 0;
+}
+
+static int clk_audio_pll_pad_set_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long parent_rate)
+{
+ struct clk_audio_pad *apad_ck = to_clk_audio_pad(hw);
+ u8 tmp_div;
+
+ pr_debug("A PLL/PAD: %s, rate = %lu (parent_rate = %lu)\n", __func__,
+ rate, parent_rate);
+
+ if (!rate)
+ return -EINVAL;
+
+ tmp_div = parent_rate / rate;
+ if (tmp_div % 3 == 0) {
+ apad_ck->qdaudio = tmp_div / 3;
+ apad_ck->div = 3;
+ } else {
+ apad_ck->qdaudio = tmp_div / 2;
+ apad_ck->div = 2;
+ }
+
+ return 0;
+}
+
+static int clk_audio_pll_pmc_set_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long parent_rate)
+{
+ struct clk_audio_pmc *apmc_ck = to_clk_audio_pmc(hw);
+
+ if (!rate)
+ return -EINVAL;
+
+ pr_debug("A PLL/PMC: %s, rate = %lu (parent_rate = %lu)\n", __func__,
+ rate, parent_rate);
+
+ apmc_ck->qdpmc = parent_rate / rate - 1;
+
+ return 0;
+}
+
+static const struct clk_ops audio_pll_frac_ops = {
+ .enable = clk_audio_pll_frac_enable,
+ .disable = clk_audio_pll_frac_disable,
+ .recalc_rate = clk_audio_pll_frac_recalc_rate,
+ .determine_rate = clk_audio_pll_frac_determine_rate,
+ .set_rate = clk_audio_pll_frac_set_rate,
+};
+
+static const struct clk_ops audio_pll_pad_ops = {
+ .enable = clk_audio_pll_pad_enable,
+ .disable = clk_audio_pll_pad_disable,
+ .recalc_rate = clk_audio_pll_pad_recalc_rate,
+ .round_rate = clk_audio_pll_pad_round_rate,
+ .set_rate = clk_audio_pll_pad_set_rate,
+};
+
+static const struct clk_ops audio_pll_pmc_ops = {
+ .enable = clk_audio_pll_pmc_enable,
+ .disable = clk_audio_pll_pmc_disable,
+ .recalc_rate = clk_audio_pll_pmc_recalc_rate,
+ .round_rate = clk_audio_pll_pmc_round_rate,
+ .set_rate = clk_audio_pll_pmc_set_rate,
+};
+
+static int of_sama5d2_clk_audio_pll_setup(struct device_node *np,
+ struct clk_init_data *init,
+ struct clk_hw *hw,
+ struct regmap **clk_audio_regmap)
+{
+ struct regmap *regmap;
+ const char *parent_names[1];
+ int ret;
+
+ regmap = syscon_node_to_regmap(of_get_parent(np));
+ if (IS_ERR(regmap))
+ return PTR_ERR(regmap);
+
+ init->name = np->name;
+ of_clk_parent_fill(np, parent_names, 1);
+ init->parent_names = parent_names;
+ init->num_parents = 1;
+
+ hw->init = init;
+ *clk_audio_regmap = regmap;
+
+ ret = clk_hw_register(NULL, hw);
+ if (ret)
+ return ret;
+
+ return of_clk_add_hw_provider(np, of_clk_hw_simple_get, hw);
+}
+
+static void __init of_sama5d2_clk_audio_pll_frac_setup(struct device_node *np)
+{
+ struct clk_audio_frac *frac_ck;
+ struct clk_init_data init = {};
+
+ frac_ck = kzalloc(sizeof(*frac_ck), GFP_KERNEL);
+ if (!frac_ck)
+ return;
+
+ init.ops = &audio_pll_frac_ops;
+ init.flags = CLK_SET_RATE_GATE;
+
+ if (of_sama5d2_clk_audio_pll_setup(np, &init, &frac_ck->hw,
+ &frac_ck->regmap))
+ kfree(frac_ck);
+}
+
+static void __init of_sama5d2_clk_audio_pll_pad_setup(struct device_node *np)
+{
+ struct clk_audio_pad *apad_ck;
+ struct clk_init_data init = {};
+
+ apad_ck = kzalloc(sizeof(*apad_ck), GFP_KERNEL);
+ if (!apad_ck)
+ return;
+
+ init.ops = &audio_pll_pad_ops;
+ init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE |
+ CLK_SET_RATE_PARENT;
+
+ if (of_sama5d2_clk_audio_pll_setup(np, &init, &apad_ck->hw,
+ &apad_ck->regmap))
+ kfree(apad_ck);
+}
+
+static void __init of_sama5d2_clk_audio_pll_pmc_setup(struct device_node *np)
+{
+ struct clk_audio_pad *apmc_ck;
+ struct clk_init_data init = {};
+
+ apmc_ck = kzalloc(sizeof(*apmc_ck), GFP_KERNEL);
+ if (!apmc_ck)
+ return;
+
+ init.ops = &audio_pll_pmc_ops;
+ init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE |
+ CLK_SET_RATE_PARENT;
+
+ if (of_sama5d2_clk_audio_pll_setup(np, &init, &apmc_ck->hw,
+ &apmc_ck->regmap))
+ kfree(apmc_ck);
+}
+
+CLK_OF_DECLARE(of_sama5d2_clk_audio_pll_frac_setup,
+ "atmel,sama5d2-clk-audio-pll-frac",
+ of_sama5d2_clk_audio_pll_frac_setup);
+CLK_OF_DECLARE(of_sama5d2_clk_audio_pll_pad_setup,
+ "atmel,sama5d2-clk-audio-pll-pad",
+ of_sama5d2_clk_audio_pll_pad_setup);
+CLK_OF_DECLARE(of_sama5d2_clk_audio_pll_pmc_setup,
+ "atmel,sama5d2-clk-audio-pll-pmc",
+ of_sama5d2_clk_audio_pll_pmc_setup);
diff --git a/drivers/clk/at91/clk-generated.c b/drivers/clk/at91/clk-generated.c
index f0b7ae904ce2..33481368740e 100644
--- a/drivers/clk/at91/clk-generated.c
+++ b/drivers/clk/at91/clk-generated.c
@@ -26,6 +26,13 @@
#define GENERATED_SOURCE_MAX 6
#define GENERATED_MAX_DIV 255
+#define GCK_ID_SSC0 43
+#define GCK_ID_SSC1 44
+#define GCK_ID_I2S0 54
+#define GCK_ID_I2S1 55
+#define GCK_ID_CLASSD 59
+#define GCK_INDEX_DT_AUDIO_PLL 5
+
struct clk_generated {
struct clk_hw hw;
struct regmap *regmap;
@@ -34,6 +41,7 @@ struct clk_generated {
u32 id;
u32 gckdiv;
u8 parent_id;
+ bool audio_pll_allowed;
};
#define to_clk_generated(hw) \
@@ -99,21 +107,41 @@ clk_generated_recalc_rate(struct clk_hw *hw,
return DIV_ROUND_CLOSEST(parent_rate, gck->gckdiv + 1);
}
+static void clk_generated_best_diff(struct clk_rate_request *req,
+ struct clk_hw *parent,
+ unsigned long parent_rate, u32 div,
+ int *best_diff, long *best_rate)
+{
+ unsigned long tmp_rate;
+ int tmp_diff;
+
+ if (!div)
+ tmp_rate = parent_rate;
+ else
+ tmp_rate = parent_rate / div;
+ tmp_diff = abs(req->rate - tmp_rate);
+
+ if (*best_diff < 0 || *best_diff > tmp_diff) {
+ *best_rate = tmp_rate;
+ *best_diff = tmp_diff;
+ req->best_parent_rate = parent_rate;
+ req->best_parent_hw = parent;
+ }
+}
+
static int clk_generated_determine_rate(struct clk_hw *hw,
struct clk_rate_request *req)
{
struct clk_generated *gck = to_clk_generated(hw);
struct clk_hw *parent = NULL;
+ struct clk_rate_request req_parent = *req;
long best_rate = -EINVAL;
- unsigned long tmp_rate, min_rate;
+ unsigned long min_rate, parent_rate;
int best_diff = -1;
- int tmp_diff;
int i;
+ u32 div;
- for (i = 0; i < clk_hw_get_num_parents(hw); i++) {
- u32 div;
- unsigned long parent_rate;
-
+ for (i = 0; i < clk_hw_get_num_parents(hw) - 1; i++) {
parent = clk_hw_get_parent_by_index(hw, i);
if (!parent)
continue;
@@ -124,25 +152,43 @@ static int clk_generated_determine_rate(struct clk_hw *hw,
(gck->range.max && min_rate > gck->range.max))
continue;
- for (div = 1; div < GENERATED_MAX_DIV + 2; div++) {
- tmp_rate = DIV_ROUND_CLOSEST(parent_rate, div);
- tmp_diff = abs(req->rate - tmp_rate);
+ div = DIV_ROUND_CLOSEST(parent_rate, req->rate);
- if (best_diff < 0 || best_diff > tmp_diff) {
- best_rate = tmp_rate;
- best_diff = tmp_diff;
- req->best_parent_rate = parent_rate;
- req->best_parent_hw = parent;
- }
+ clk_generated_best_diff(req, parent, parent_rate, div,
+ &best_diff, &best_rate);
- if (!best_diff || tmp_rate < req->rate)
- break;
- }
+ if (!best_diff)
+ break;
+ }
+
+ /*
+ * The audio_pll rate can be modified, unlike the five others clocks
+ * that should never be altered.
+ * The audio_pll can technically be used by multiple consumers. However,
+ * with the rate locking, the first consumer to enable to clock will be
+ * the one definitely setting the rate of the clock.
+ * Since audio IPs are most likely to request the same rate, we enforce
+ * that the only clks able to modify gck rate are those of audio IPs.
+ */
+
+ if (!gck->audio_pll_allowed)
+ goto end;
+
+ parent = clk_hw_get_parent_by_index(hw, GCK_INDEX_DT_AUDIO_PLL);
+ if (!parent)
+ goto end;
+
+ for (div = 1; div < GENERATED_MAX_DIV + 2; div++) {
+ req_parent.rate = req->rate * div;
+ __clk_determine_rate(parent, &req_parent);
+ clk_generated_best_diff(req, parent, req_parent.rate, div,
+ &best_diff, &best_rate);
if (!best_diff)
break;
}
+end:
pr_debug("GCLK: %s, best_rate = %ld, parent clk: %s @ %ld\n",
__func__, best_rate,
__clk_get_name((req->best_parent_hw)->clk),
@@ -252,7 +298,8 @@ at91_clk_register_generated(struct regmap *regmap, spinlock_t *lock,
init.ops = &generated_ops;
init.parent_names = parent_names;
init.num_parents = num_parents;
- init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE;
+ init.flags = CLK_SET_RATE_GATE | CLK_SET_PARENT_GATE |
+ CLK_SET_RATE_PARENT;
gck->id = id;
gck->hw.init = &init;
@@ -284,6 +331,7 @@ static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
struct device_node *gcknp;
struct clk_range range = CLK_RANGE(0, 0);
struct regmap *regmap;
+ struct clk_generated *gck;
num_parents = of_clk_get_parent_count(np);
if (num_parents == 0 || num_parents > GENERATED_SOURCE_MAX)
@@ -315,6 +363,21 @@ static void __init of_sama5d2_clk_generated_setup(struct device_node *np)
hw = at91_clk_register_generated(regmap, &pmc_pcr_lock, name,
parent_names, num_parents,
id, &range);
+
+ gck = to_clk_generated(hw);
+
+ if (of_device_is_compatible(np,
+ "atmel,sama5d2-clk-generated")) {
+ if (gck->id == GCK_ID_SSC0 || gck->id == GCK_ID_SSC1 ||
+ gck->id == GCK_ID_I2S0 || gck->id == GCK_ID_I2S1 ||
+ gck->id == GCK_ID_CLASSD)
+ gck->audio_pll_allowed = true;
+ else
+ gck->audio_pll_allowed = false;
+ } else {
+ gck->audio_pll_allowed = false;
+ }
+
if (IS_ERR(hw))
continue;
diff --git a/drivers/clk/axs10x/Makefile b/drivers/clk/axs10x/Makefile
index 01996b871b06..d747deafbf1e 100644
--- a/drivers/clk/axs10x/Makefile
+++ b/drivers/clk/axs10x/Makefile
@@ -1 +1,2 @@
obj-y += i2s_pll_clock.o
+obj-y += pll_clock.o
diff --git a/drivers/clk/axs10x/pll_clock.c b/drivers/clk/axs10x/pll_clock.c
new file mode 100644
index 000000000000..25d8c240ddfb
--- /dev/null
+++ b/drivers/clk/axs10x/pll_clock.c
@@ -0,0 +1,346 @@
+/*
+ * Synopsys AXS10X SDP Generic PLL clock driver
+ *
+ * Copyright (C) 2017 Synopsys
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/platform_device.h>
+#include <linux/module.h>
+#include <linux/clk-provider.h>
+#include <linux/delay.h>
+#include <linux/err.h>
+#include <linux/device.h>
+#include <linux/of_address.h>
+#include <linux/of_device.h>
+#include <linux/slab.h>
+#include <linux/of.h>
+
+/* PLL registers addresses */
+#define PLL_REG_IDIV 0x0
+#define PLL_REG_FBDIV 0x4
+#define PLL_REG_ODIV 0x8
+
+/*
+ * Bit fields of the PLL IDIV/FBDIV/ODIV registers:
+ * ________________________________________________________________________
+ * |31 15| 14 | 13 | 12 |11 6|5 0|
+ * |-------RESRVED------|-NOUPDATE-|-BYPASS-|-EDGE-|--HIGHTIME--|--LOWTIME--|
+ * |____________________|__________|________|______|____________|___________|
+ *
+ * Following macros determine the way of access to these registers
+ * They should be set up only using the macros.
+ * reg should be an u32 variable.
+ */
+
+#define PLL_REG_GET_LOW(reg) \
+ (((reg) & (0x3F << 0)) >> 0)
+#define PLL_REG_GET_HIGH(reg) \
+ (((reg) & (0x3F << 6)) >> 6)
+#define PLL_REG_GET_EDGE(reg) \
+ (((reg) & (BIT(12))) ? 1 : 0)
+#define PLL_REG_GET_BYPASS(reg) \
+ (((reg) & (BIT(13))) ? 1 : 0)
+#define PLL_REG_GET_NOUPD(reg) \
+ (((reg) & (BIT(14))) ? 1 : 0)
+#define PLL_REG_GET_PAD(reg) \
+ (((reg) & (0x1FFFF << 15)) >> 15)
+
+#define PLL_REG_SET_LOW(reg, value) \
+ { reg |= (((value) & 0x3F) << 0); }
+#define PLL_REG_SET_HIGH(reg, value) \
+ { reg |= (((value) & 0x3F) << 6); }
+#define PLL_REG_SET_EDGE(reg, value) \
+ { reg |= (((value) & 0x01) << 12); }
+#define PLL_REG_SET_BYPASS(reg, value) \
+ { reg |= (((value) & 0x01) << 13); }
+#define PLL_REG_SET_NOUPD(reg, value) \
+ { reg |= (((value) & 0x01) << 14); }
+#define PLL_REG_SET_PAD(reg, value) \
+ { reg |= (((value) & 0x1FFFF) << 15); }
+
+#define PLL_LOCK BIT(0)
+#define PLL_ERROR BIT(1)
+#define PLL_MAX_LOCK_TIME 100 /* 100 us */
+
+struct axs10x_pll_cfg {
+ u32 rate;
+ u32 idiv;
+ u32 fbdiv;
+ u32 odiv;
+};
+
+static const struct axs10x_pll_cfg arc_pll_cfg[] = {
+ { 33333333, 1, 1, 1 },
+ { 50000000, 1, 30, 20 },
+ { 75000000, 2, 45, 10 },
+ { 90000000, 2, 54, 10 },
+ { 100000000, 1, 30, 10 },
+ { 125000000, 2, 45, 6 },
+ {}
+};
+
+static const struct axs10x_pll_cfg pgu_pll_cfg[] = {
+ { 25200000, 1, 84, 90 },
+ { 50000000, 1, 100, 54 },
+ { 74250000, 1, 44, 16 },
+ {}
+};
+
+struct axs10x_pll_clk {
+ struct clk_hw hw;
+ void __iomem *base;
+ void __iomem *lock;
+ const struct axs10x_pll_cfg *pll_cfg;
+ struct device *dev;
+};
+
+static inline void axs10x_pll_write(struct axs10x_pll_clk *clk, u32 reg,
+ u32 val)
+{
+ iowrite32(val, clk->base + reg);
+}
+
+static inline u32 axs10x_pll_read(struct axs10x_pll_clk *clk, u32 reg)
+{
+ return ioread32(clk->base + reg);
+}
+
+static inline struct axs10x_pll_clk *to_axs10x_pll_clk(struct clk_hw *hw)
+{
+ return container_of(hw, struct axs10x_pll_clk, hw);
+}
+
+static inline u32 axs10x_div_get_value(u32 reg)
+{
+ if (PLL_REG_GET_BYPASS(reg))
+ return 1;
+
+ return PLL_REG_GET_HIGH(reg) + PLL_REG_GET_LOW(reg);
+}
+
+static inline u32 axs10x_encode_div(unsigned int id, int upd)
+{
+ u32 div = 0;
+
+ PLL_REG_SET_LOW(div, (id % 2 == 0) ? id >> 1 : (id >> 1) + 1);
+ PLL_REG_SET_HIGH(div, id >> 1);
+ PLL_REG_SET_EDGE(div, id % 2);
+ PLL_REG_SET_BYPASS(div, id == 1 ? 1 : 0);
+ PLL_REG_SET_NOUPD(div, upd == 0 ? 1 : 0);
+
+ return div;
+}
+
+static unsigned long axs10x_pll_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ u64 rate;
+ u32 idiv, fbdiv, odiv;
+ struct axs10x_pll_clk *clk = to_axs10x_pll_clk(hw);
+
+ idiv = axs10x_div_get_value(axs10x_pll_read(clk, PLL_REG_IDIV));
+ fbdiv = axs10x_div_get_value(axs10x_pll_read(clk, PLL_REG_FBDIV));
+ odiv = axs10x_div_get_value(axs10x_pll_read(clk, PLL_REG_ODIV));
+
+ rate = (u64)parent_rate * fbdiv;
+ do_div(rate, idiv * odiv);
+
+ return rate;
+}
+
+static long axs10x_pll_round_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long *prate)
+{
+ int i;
+ long best_rate;
+ struct axs10x_pll_clk *clk = to_axs10x_pll_clk(hw);
+ const struct axs10x_pll_cfg *pll_cfg = clk->pll_cfg;
+
+ if (pll_cfg[0].rate == 0)
+ return -EINVAL;
+
+ best_rate = pll_cfg[0].rate;
+
+ for (i = 1; pll_cfg[i].rate != 0; i++) {
+ if (abs(rate - pll_cfg[i].rate) < abs(rate - best_rate))
+ best_rate = pll_cfg[i].rate;
+ }
+
+ return best_rate;
+}
+
+static int axs10x_pll_set_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long parent_rate)
+{
+ int i;
+ struct axs10x_pll_clk *clk = to_axs10x_pll_clk(hw);
+ const struct axs10x_pll_cfg *pll_cfg = clk->pll_cfg;
+
+ for (i = 0; pll_cfg[i].rate != 0; i++) {
+ if (pll_cfg[i].rate == rate) {
+ axs10x_pll_write(clk, PLL_REG_IDIV,
+ axs10x_encode_div(pll_cfg[i].idiv, 0));
+ axs10x_pll_write(clk, PLL_REG_FBDIV,
+ axs10x_encode_div(pll_cfg[i].fbdiv, 0));
+ axs10x_pll_write(clk, PLL_REG_ODIV,
+ axs10x_encode_div(pll_cfg[i].odiv, 1));
+
+ /*
+ * Wait until CGU relocks and check error status.
+ * If after timeout CGU is unlocked yet return error
+ */
+ udelay(PLL_MAX_LOCK_TIME);
+ if (!(ioread32(clk->lock) & PLL_LOCK))
+ return -ETIMEDOUT;
+
+ if (ioread32(clk->lock) & PLL_ERROR)
+ return -EINVAL;
+
+ return 0;
+ }
+ }
+
+ dev_err(clk->dev, "invalid rate=%ld, parent_rate=%ld\n", rate,
+ parent_rate);
+ return -EINVAL;
+}
+
+static const struct clk_ops axs10x_pll_ops = {
+ .recalc_rate = axs10x_pll_recalc_rate,
+ .round_rate = axs10x_pll_round_rate,
+ .set_rate = axs10x_pll_set_rate,
+};
+
+static int axs10x_pll_clk_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ const char *parent_name;
+ struct axs10x_pll_clk *pll_clk;
+ struct resource *mem;
+ struct clk_init_data init = { };
+ int ret;
+
+ pll_clk = devm_kzalloc(dev, sizeof(*pll_clk), GFP_KERNEL);
+ if (!pll_clk)
+ return -ENOMEM;
+
+ mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ pll_clk->base = devm_ioremap_resource(dev, mem);
+ if (IS_ERR(pll_clk->base))
+ return PTR_ERR(pll_clk->base);
+
+ mem = platform_get_resource(pdev, IORESOURCE_MEM, 1);
+ pll_clk->lock = devm_ioremap_resource(dev, mem);
+ if (IS_ERR(pll_clk->lock))
+ return PTR_ERR(pll_clk->lock);
+
+ init.name = dev->of_node->name;
+ init.ops = &axs10x_pll_ops;
+ parent_name = of_clk_get_parent_name(dev->of_node, 0);
+ init.parent_names = &parent_name;
+ init.num_parents = 1;
+ pll_clk->hw.init = &init;
+ pll_clk->dev = dev;
+ pll_clk->pll_cfg = of_device_get_match_data(dev);
+
+ if (!pll_clk->pll_cfg) {
+ dev_err(dev, "No OF match data provided\n");
+ return -EINVAL;
+ }
+
+ ret = devm_clk_hw_register(dev, &pll_clk->hw);
+ if (ret) {
+ dev_err(dev, "failed to register %s clock\n", init.name);
+ return ret;
+ }
+
+ return of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+ &pll_clk->hw);
+}
+
+static int axs10x_pll_clk_remove(struct platform_device *pdev)
+{
+ of_clk_del_provider(pdev->dev.of_node);
+ return 0;
+}
+
+static void __init of_axs10x_pll_clk_setup(struct device_node *node)
+{
+ const char *parent_name;
+ struct axs10x_pll_clk *pll_clk;
+ struct clk_init_data init = { };
+ int ret;
+
+ pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+ if (!pll_clk)
+ return;
+
+ pll_clk->base = of_iomap(node, 0);
+ if (!pll_clk->base) {
+ pr_err("failed to map pll div registers\n");
+ goto err_free_pll_clk;
+ }
+
+ pll_clk->lock = of_iomap(node, 1);
+ if (!pll_clk->lock) {
+ pr_err("failed to map pll lock register\n");
+ goto err_unmap_base;
+ }
+
+ init.name = node->name;
+ init.ops = &axs10x_pll_ops;
+ parent_name = of_clk_get_parent_name(node, 0);
+ init.parent_names = &parent_name;
+ init.num_parents = parent_name ? 1 : 0;
+ pll_clk->hw.init = &init;
+ pll_clk->pll_cfg = arc_pll_cfg;
+
+ ret = clk_hw_register(NULL, &pll_clk->hw);
+ if (ret) {
+ pr_err("failed to register %s clock\n", node->name);
+ goto err_unmap_lock;
+ }
+
+ ret = of_clk_add_hw_provider(node, of_clk_hw_simple_get, &pll_clk->hw);
+ if (ret) {
+ pr_err("failed to add hw provider for %s clock\n", node->name);
+ goto err_unregister_clk;
+ }
+
+ return;
+
+err_unregister_clk:
+ clk_hw_unregister(&pll_clk->hw);
+err_unmap_lock:
+ iounmap(pll_clk->lock);
+err_unmap_base:
+ iounmap(pll_clk->base);
+err_free_pll_clk:
+ kfree(pll_clk);
+}
+CLK_OF_DECLARE(axs10x_pll_clock, "snps,axs10x-arc-pll-clock",
+ of_axs10x_pll_clk_setup);
+
+static const struct of_device_id axs10x_pll_clk_id[] = {
+ { .compatible = "snps,axs10x-pgu-pll-clock", .data = &pgu_pll_cfg},
+ { }
+};
+MODULE_DEVICE_TABLE(of, axs10x_pll_clk_id);
+
+static struct platform_driver axs10x_pll_clk_driver = {
+ .driver = {
+ .name = "axs10x-pll-clock",
+ .of_match_table = axs10x_pll_clk_id,
+ },
+ .probe = axs10x_pll_clk_probe,
+ .remove = axs10x_pll_clk_remove,
+};
+builtin_platform_driver(axs10x_pll_clk_driver);
+
+MODULE_AUTHOR("Vlad Zakharov <vzakhar@synopsys.com>");
+MODULE_DESCRIPTION("Synopsys AXS10X SDP Generic PLL Clock Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/berlin/bg2.c b/drivers/clk/berlin/bg2.c
index 1d99292e2039..e7331ace0337 100644
--- a/drivers/clk/berlin/bg2.c
+++ b/drivers/clk/berlin/bg2.c
@@ -679,8 +679,7 @@ static void __init berlin2_clock_setup(struct device_node *np)
if (!IS_ERR(hws[n]))
continue;
- pr_err("%s: Unable to register leaf clock %d\n",
- np->full_name, n);
+ pr_err("%pOF: Unable to register leaf clock %d\n", np, n);
goto bg2_fail;
}
diff --git a/drivers/clk/berlin/bg2q.c b/drivers/clk/berlin/bg2q.c
index 3b784b593afd..67c270b143f7 100644
--- a/drivers/clk/berlin/bg2q.c
+++ b/drivers/clk/berlin/bg2q.c
@@ -304,14 +304,14 @@ static void __init berlin2q_clock_setup(struct device_node *np)
gbase = of_iomap(parent_np, 0);
if (!gbase) {
- pr_err("%s: Unable to map global base\n", np->full_name);
+ pr_err("%pOF: Unable to map global base\n", np);
return;
}
/* BG2Q CPU PLL is not part of global registers */
cpupll_base = of_iomap(parent_np, 1);
if (!cpupll_base) {
- pr_err("%s: Unable to map cpupll base\n", np->full_name);
+ pr_err("%pOF: Unable to map cpupll base\n", np);
iounmap(gbase);
return;
}
@@ -376,8 +376,7 @@ static void __init berlin2q_clock_setup(struct device_node *np)
if (!IS_ERR(hws[n]))
continue;
- pr_err("%s: Unable to register leaf clock %d\n",
- np->full_name, n);
+ pr_err("%pOF: Unable to register leaf clock %d\n", np, n);
goto bg2q_fail;
}
diff --git a/drivers/clk/clk-asm9260.c b/drivers/clk/clk-asm9260.c
index ea8568536193..bf0582cbbf38 100644
--- a/drivers/clk/clk-asm9260.c
+++ b/drivers/clk/clk-asm9260.c
@@ -338,8 +338,8 @@ static void __init asm9260_acc_init(struct device_node *np)
if (!IS_ERR(hws[n]))
continue;
- pr_err("%s: Unable to register leaf clock %d\n",
- np->full_name, n);
+ pr_err("%pOF: Unable to register leaf clock %d\n",
+ np, n);
goto fail;
}
diff --git a/drivers/clk/clk-conf.c b/drivers/clk/clk-conf.c
index 7ec36722f8ab..49819b546134 100644
--- a/drivers/clk/clk-conf.c
+++ b/drivers/clk/clk-conf.c
@@ -23,8 +23,8 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier)
num_parents = of_count_phandle_with_args(node, "assigned-clock-parents",
"#clock-cells");
if (num_parents == -EINVAL)
- pr_err("clk: invalid value of clock-parents property at %s\n",
- node->full_name);
+ pr_err("clk: invalid value of clock-parents property at %pOF\n",
+ node);
for (index = 0; index < num_parents; index++) {
rc = of_parse_phandle_with_args(node, "assigned-clock-parents",
@@ -41,8 +41,8 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier)
pclk = of_clk_get_from_provider(&clkspec);
if (IS_ERR(pclk)) {
if (PTR_ERR(pclk) != -EPROBE_DEFER)
- pr_warn("clk: couldn't get parent clock %d for %s\n",
- index, node->full_name);
+ pr_warn("clk: couldn't get parent clock %d for %pOF\n",
+ index, node);
return PTR_ERR(pclk);
}
@@ -57,8 +57,8 @@ static int __set_clk_parents(struct device_node *node, bool clk_supplier)
clk = of_clk_get_from_provider(&clkspec);
if (IS_ERR(clk)) {
if (PTR_ERR(clk) != -EPROBE_DEFER)
- pr_warn("clk: couldn't get assigned clock %d for %s\n",
- index, node->full_name);
+ pr_warn("clk: couldn't get assigned clock %d for %pOF\n",
+ index, node);
rc = PTR_ERR(clk);
goto err;
}
@@ -102,8 +102,8 @@ static int __set_clk_rates(struct device_node *node, bool clk_supplier)
clk = of_clk_get_from_provider(&clkspec);
if (IS_ERR(clk)) {
if (PTR_ERR(clk) != -EPROBE_DEFER)
- pr_warn("clk: couldn't get clock %d for %s\n",
- index, node->full_name);
+ pr_warn("clk: couldn't get clock %d for %pOF\n",
+ index, node);
return PTR_ERR(clk);
}
diff --git a/drivers/clk/clk-cs2000-cp.c b/drivers/clk/clk-cs2000-cp.c
index c54baede4d68..e8ea81c30f0c 100644
--- a/drivers/clk/clk-cs2000-cp.c
+++ b/drivers/clk/clk-cs2000-cp.c
@@ -343,6 +343,15 @@ static int cs2000_set_rate(struct clk_hw *hw,
return __cs2000_set_rate(priv, ch, rate, parent_rate);
}
+static int cs2000_set_saved_rate(struct cs2000_priv *priv)
+{
+ int ch = 0; /* it uses ch0 only at this point */
+
+ return __cs2000_set_rate(priv, ch,
+ priv->saved_rate,
+ priv->saved_parent_rate);
+}
+
static int cs2000_enable(struct clk_hw *hw)
{
struct cs2000_priv *priv = hw_to_priv(hw);
@@ -535,11 +544,8 @@ probe_err:
static int cs2000_resume(struct device *dev)
{
struct cs2000_priv *priv = dev_get_drvdata(dev);
- int ch = 0; /* it uses ch0 only at this point */
- return __cs2000_set_rate(priv, ch,
- priv->saved_rate,
- priv->saved_parent_rate);
+ return cs2000_set_saved_rate(priv);
}
static const struct dev_pm_ops cs2000_pm_ops = {
diff --git a/drivers/clk/clk-divider.c b/drivers/clk/clk-divider.c
index 9bb472cccca6..4ed516cb7276 100644
--- a/drivers/clk/clk-divider.c
+++ b/drivers/clk/clk-divider.c
@@ -385,12 +385,14 @@ static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long parent_rate)
{
struct clk_divider *divider = to_clk_divider(hw);
- unsigned int value;
+ int value;
unsigned long flags = 0;
u32 val;
value = divider_get_val(rate, parent_rate, divider->table,
divider->width, divider->flags);
+ if (value < 0)
+ return value;
if (divider->lock)
spin_lock_irqsave(divider->lock, flags);
@@ -403,7 +405,7 @@ static int clk_divider_set_rate(struct clk_hw *hw, unsigned long rate,
val = clk_readl(divider->reg);
val &= ~(div_mask(divider->width) << divider->shift);
}
- val |= value << divider->shift;
+ val |= (u32)value << divider->shift;
clk_writel(val, divider->reg);
if (divider->lock)
diff --git a/drivers/clk/clk-fractional-divider.c b/drivers/clk/clk-fractional-divider.c
index aab904618eb6..fdf625fb10fa 100644
--- a/drivers/clk/clk-fractional-divider.c
+++ b/drivers/clk/clk-fractional-divider.c
@@ -49,16 +49,12 @@ static unsigned long clk_fd_recalc_rate(struct clk_hw *hw,
return ret;
}
-static long clk_fd_round_rate(struct clk_hw *hw, unsigned long rate,
- unsigned long *parent_rate)
+static void clk_fd_general_approximation(struct clk_hw *hw, unsigned long rate,
+ unsigned long *parent_rate,
+ unsigned long *m, unsigned long *n)
{
struct clk_fractional_divider *fd = to_clk_fd(hw);
unsigned long scale;
- unsigned long m, n;
- u64 ret;
-
- if (!rate || rate >= *parent_rate)
- return *parent_rate;
/*
* Get rate closer to *parent_rate to guarantee there is no overflow
@@ -71,7 +67,23 @@ static long clk_fd_round_rate(struct clk_hw *hw, unsigned long rate,
rational_best_approximation(rate, *parent_rate,
GENMASK(fd->mwidth - 1, 0), GENMASK(fd->nwidth - 1, 0),
- &m, &n);
+ m, n);
+}
+
+static long clk_fd_round_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long *parent_rate)
+{
+ struct clk_fractional_divider *fd = to_clk_fd(hw);
+ unsigned long m, n;
+ u64 ret;
+
+ if (!rate || rate >= *parent_rate)
+ return *parent_rate;
+
+ if (fd->approximation)
+ fd->approximation(hw, rate, parent_rate, &m, &n);
+ else
+ clk_fd_general_approximation(hw, rate, parent_rate, &m, &n);
ret = (u64)*parent_rate * m;
do_div(ret, n);
diff --git a/drivers/clk/clk-gate.c b/drivers/clk/clk-gate.c
index 4e0c054a787c..dd82485e09a1 100644
--- a/drivers/clk/clk-gate.c
+++ b/drivers/clk/clk-gate.c
@@ -86,7 +86,7 @@ static void clk_gate_disable(struct clk_hw *hw)
clk_gate_endisable(hw, 0);
}
-static int clk_gate_is_enabled(struct clk_hw *hw)
+int clk_gate_is_enabled(struct clk_hw *hw)
{
u32 reg;
struct clk_gate *gate = to_clk_gate(hw);
@@ -101,6 +101,7 @@ static int clk_gate_is_enabled(struct clk_hw *hw)
return reg ? 1 : 0;
}
+EXPORT_SYMBOL_GPL(clk_gate_is_enabled);
const struct clk_ops clk_gate_ops = {
.enable = clk_gate_enable,
diff --git a/drivers/clk/clk-gemini.c b/drivers/clk/clk-gemini.c
index b4cf2f699a21..f940e5af845b 100644
--- a/drivers/clk/clk-gemini.c
+++ b/drivers/clk/clk-gemini.c
@@ -37,7 +37,6 @@ static DEFINE_SPINLOCK(gemini_clk_lock);
#define GEMINI_GLOBAL_MISC_CONTROL 0x30
#define PCI_CLK_66MHZ BIT(18)
-#define PCI_CLK_OE BIT(17)
#define GEMINI_GLOBAL_CLOCK_CONTROL 0x34
#define PCI_CLKRUN_EN BIT(16)
@@ -159,9 +158,6 @@ static int gemini_pci_enable(struct clk_hw *hw)
regmap_update_bits(pciclk->map, GEMINI_GLOBAL_CLOCK_CONTROL,
0, PCI_CLKRUN_EN);
- regmap_update_bits(pciclk->map,
- GEMINI_GLOBAL_MISC_CONTROL,
- 0, PCI_CLK_OE);
return 0;
}
@@ -169,9 +165,6 @@ static void gemini_pci_disable(struct clk_hw *hw)
{
struct clk_gemini_pci *pciclk = to_pciclk(hw);
- regmap_update_bits(pciclk->map,
- GEMINI_GLOBAL_MISC_CONTROL,
- PCI_CLK_OE, 0);
regmap_update_bits(pciclk->map, GEMINI_GLOBAL_CLOCK_CONTROL,
PCI_CLKRUN_EN, 0);
}
diff --git a/drivers/clk/clk-hsdk-pll.c b/drivers/clk/clk-hsdk-pll.c
new file mode 100644
index 000000000000..bbf237173b37
--- /dev/null
+++ b/drivers/clk/clk-hsdk-pll.c
@@ -0,0 +1,431 @@
+/*
+ * Synopsys HSDK SDP Generic PLL clock driver
+ *
+ * Copyright (C) 2017 Synopsys
+ *
+ * This file is licensed under the terms of the GNU General Public
+ * License version 2. This program is licensed "as is" without any
+ * warranty of any kind, whether express or implied.
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/delay.h>
+#include <linux/device.h>
+#include <linux/err.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/slab.h>
+
+#define CGU_PLL_CTRL 0x000 /* ARC PLL control register */
+#define CGU_PLL_STATUS 0x004 /* ARC PLL status register */
+#define CGU_PLL_FMEAS 0x008 /* ARC PLL frequency measurement register */
+#define CGU_PLL_MON 0x00C /* ARC PLL monitor register */
+
+#define CGU_PLL_CTRL_ODIV_SHIFT 2
+#define CGU_PLL_CTRL_IDIV_SHIFT 4
+#define CGU_PLL_CTRL_FBDIV_SHIFT 9
+#define CGU_PLL_CTRL_BAND_SHIFT 20
+
+#define CGU_PLL_CTRL_ODIV_MASK GENMASK(3, CGU_PLL_CTRL_ODIV_SHIFT)
+#define CGU_PLL_CTRL_IDIV_MASK GENMASK(8, CGU_PLL_CTRL_IDIV_SHIFT)
+#define CGU_PLL_CTRL_FBDIV_MASK GENMASK(15, CGU_PLL_CTRL_FBDIV_SHIFT)
+
+#define CGU_PLL_CTRL_PD BIT(0)
+#define CGU_PLL_CTRL_BYPASS BIT(1)
+
+#define CGU_PLL_STATUS_LOCK BIT(0)
+#define CGU_PLL_STATUS_ERR BIT(1)
+
+#define HSDK_PLL_MAX_LOCK_TIME 100 /* 100 us */
+
+#define CGU_PLL_SOURCE_MAX 1
+
+#define CORE_IF_CLK_THRESHOLD_HZ 500000000
+#define CREG_CORE_IF_CLK_DIV_1 0x0
+#define CREG_CORE_IF_CLK_DIV_2 0x1
+
+struct hsdk_pll_cfg {
+ u32 rate;
+ u32 idiv;
+ u32 fbdiv;
+ u32 odiv;
+ u32 band;
+};
+
+static const struct hsdk_pll_cfg asdt_pll_cfg[] = {
+ { 100000000, 0, 11, 3, 0 },
+ { 133000000, 0, 15, 3, 0 },
+ { 200000000, 1, 47, 3, 0 },
+ { 233000000, 1, 27, 2, 0 },
+ { 300000000, 1, 35, 2, 0 },
+ { 333000000, 1, 39, 2, 0 },
+ { 400000000, 1, 47, 2, 0 },
+ { 500000000, 0, 14, 1, 0 },
+ { 600000000, 0, 17, 1, 0 },
+ { 700000000, 0, 20, 1, 0 },
+ { 800000000, 0, 23, 1, 0 },
+ { 900000000, 1, 26, 0, 0 },
+ { 1000000000, 1, 29, 0, 0 },
+ { 1100000000, 1, 32, 0, 0 },
+ { 1200000000, 1, 35, 0, 0 },
+ { 1300000000, 1, 38, 0, 0 },
+ { 1400000000, 1, 41, 0, 0 },
+ { 1500000000, 1, 44, 0, 0 },
+ { 1600000000, 1, 47, 0, 0 },
+ {}
+};
+
+static const struct hsdk_pll_cfg hdmi_pll_cfg[] = {
+ { 297000000, 0, 21, 2, 0 },
+ { 540000000, 0, 19, 1, 0 },
+ { 594000000, 0, 21, 1, 0 },
+ {}
+};
+
+struct hsdk_pll_clk {
+ struct clk_hw hw;
+ void __iomem *regs;
+ void __iomem *spec_regs;
+ const struct hsdk_pll_devdata *pll_devdata;
+ struct device *dev;
+};
+
+struct hsdk_pll_devdata {
+ const struct hsdk_pll_cfg *pll_cfg;
+ int (*update_rate)(struct hsdk_pll_clk *clk, unsigned long rate,
+ const struct hsdk_pll_cfg *cfg);
+};
+
+static int hsdk_pll_core_update_rate(struct hsdk_pll_clk *, unsigned long,
+ const struct hsdk_pll_cfg *);
+static int hsdk_pll_comm_update_rate(struct hsdk_pll_clk *, unsigned long,
+ const struct hsdk_pll_cfg *);
+
+static const struct hsdk_pll_devdata core_pll_devdata = {
+ .pll_cfg = asdt_pll_cfg,
+ .update_rate = hsdk_pll_core_update_rate,
+};
+
+static const struct hsdk_pll_devdata sdt_pll_devdata = {
+ .pll_cfg = asdt_pll_cfg,
+ .update_rate = hsdk_pll_comm_update_rate,
+};
+
+static const struct hsdk_pll_devdata hdmi_pll_devdata = {
+ .pll_cfg = hdmi_pll_cfg,
+ .update_rate = hsdk_pll_comm_update_rate,
+};
+
+static inline void hsdk_pll_write(struct hsdk_pll_clk *clk, u32 reg, u32 val)
+{
+ iowrite32(val, clk->regs + reg);
+}
+
+static inline u32 hsdk_pll_read(struct hsdk_pll_clk *clk, u32 reg)
+{
+ return ioread32(clk->regs + reg);
+}
+
+static inline void hsdk_pll_set_cfg(struct hsdk_pll_clk *clk,
+ const struct hsdk_pll_cfg *cfg)
+{
+ u32 val = 0;
+
+ /* Powerdown and Bypass bits should be cleared */
+ val |= cfg->idiv << CGU_PLL_CTRL_IDIV_SHIFT;
+ val |= cfg->fbdiv << CGU_PLL_CTRL_FBDIV_SHIFT;
+ val |= cfg->odiv << CGU_PLL_CTRL_ODIV_SHIFT;
+ val |= cfg->band << CGU_PLL_CTRL_BAND_SHIFT;
+
+ dev_dbg(clk->dev, "write configurarion: %#x\n", val);
+
+ hsdk_pll_write(clk, CGU_PLL_CTRL, val);
+}
+
+static inline bool hsdk_pll_is_locked(struct hsdk_pll_clk *clk)
+{
+ return !!(hsdk_pll_read(clk, CGU_PLL_STATUS) & CGU_PLL_STATUS_LOCK);
+}
+
+static inline bool hsdk_pll_is_err(struct hsdk_pll_clk *clk)
+{
+ return !!(hsdk_pll_read(clk, CGU_PLL_STATUS) & CGU_PLL_STATUS_ERR);
+}
+
+static inline struct hsdk_pll_clk *to_hsdk_pll_clk(struct clk_hw *hw)
+{
+ return container_of(hw, struct hsdk_pll_clk, hw);
+}
+
+static unsigned long hsdk_pll_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ u32 val;
+ u64 rate;
+ u32 idiv, fbdiv, odiv;
+ struct hsdk_pll_clk *clk = to_hsdk_pll_clk(hw);
+
+ val = hsdk_pll_read(clk, CGU_PLL_CTRL);
+
+ dev_dbg(clk->dev, "current configurarion: %#x\n", val);
+
+ /* Check if PLL is disabled */
+ if (val & CGU_PLL_CTRL_PD)
+ return 0;
+
+ /* Check if PLL is bypassed */
+ if (val & CGU_PLL_CTRL_BYPASS)
+ return parent_rate;
+
+ /* input divider = reg.idiv + 1 */
+ idiv = 1 + ((val & CGU_PLL_CTRL_IDIV_MASK) >> CGU_PLL_CTRL_IDIV_SHIFT);
+ /* fb divider = 2*(reg.fbdiv + 1) */
+ fbdiv = 2 * (1 + ((val & CGU_PLL_CTRL_FBDIV_MASK) >> CGU_PLL_CTRL_FBDIV_SHIFT));
+ /* output divider = 2^(reg.odiv) */
+ odiv = 1 << ((val & CGU_PLL_CTRL_ODIV_MASK) >> CGU_PLL_CTRL_ODIV_SHIFT);
+
+ rate = (u64)parent_rate * fbdiv;
+ do_div(rate, idiv * odiv);
+
+ return rate;
+}
+
+static long hsdk_pll_round_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long *prate)
+{
+ int i;
+ unsigned long best_rate;
+ struct hsdk_pll_clk *clk = to_hsdk_pll_clk(hw);
+ const struct hsdk_pll_cfg *pll_cfg = clk->pll_devdata->pll_cfg;
+
+ if (pll_cfg[0].rate == 0)
+ return -EINVAL;
+
+ best_rate = pll_cfg[0].rate;
+
+ for (i = 1; pll_cfg[i].rate != 0; i++) {
+ if (abs(rate - pll_cfg[i].rate) < abs(rate - best_rate))
+ best_rate = pll_cfg[i].rate;
+ }
+
+ dev_dbg(clk->dev, "chosen best rate: %lu\n", best_rate);
+
+ return best_rate;
+}
+
+static int hsdk_pll_comm_update_rate(struct hsdk_pll_clk *clk,
+ unsigned long rate,
+ const struct hsdk_pll_cfg *cfg)
+{
+ hsdk_pll_set_cfg(clk, cfg);
+
+ /*
+ * Wait until CGU relocks and check error status.
+ * If after timeout CGU is unlocked yet return error.
+ */
+ udelay(HSDK_PLL_MAX_LOCK_TIME);
+ if (!hsdk_pll_is_locked(clk))
+ return -ETIMEDOUT;
+
+ if (hsdk_pll_is_err(clk))
+ return -EINVAL;
+
+ return 0;
+}
+
+static int hsdk_pll_core_update_rate(struct hsdk_pll_clk *clk,
+ unsigned long rate,
+ const struct hsdk_pll_cfg *cfg)
+{
+ /*
+ * When core clock exceeds 500MHz, the divider for the interface
+ * clock must be programmed to div-by-2.
+ */
+ if (rate > CORE_IF_CLK_THRESHOLD_HZ)
+ iowrite32(CREG_CORE_IF_CLK_DIV_2, clk->spec_regs);
+
+ hsdk_pll_set_cfg(clk, cfg);
+
+ /*
+ * Wait until CGU relocks and check error status.
+ * If after timeout CGU is unlocked yet return error.
+ */
+ udelay(HSDK_PLL_MAX_LOCK_TIME);
+ if (!hsdk_pll_is_locked(clk))
+ return -ETIMEDOUT;
+
+ if (hsdk_pll_is_err(clk))
+ return -EINVAL;
+
+ /*
+ * Program divider to div-by-1 if we succesfuly set core clock below
+ * 500MHz threshold.
+ */
+ if (rate <= CORE_IF_CLK_THRESHOLD_HZ)
+ iowrite32(CREG_CORE_IF_CLK_DIV_1, clk->spec_regs);
+
+ return 0;
+}
+
+static int hsdk_pll_set_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long parent_rate)
+{
+ int i;
+ struct hsdk_pll_clk *clk = to_hsdk_pll_clk(hw);
+ const struct hsdk_pll_cfg *pll_cfg = clk->pll_devdata->pll_cfg;
+
+ for (i = 0; pll_cfg[i].rate != 0; i++) {
+ if (pll_cfg[i].rate == rate) {
+ return clk->pll_devdata->update_rate(clk, rate,
+ &pll_cfg[i]);
+ }
+ }
+
+ dev_err(clk->dev, "invalid rate=%ld, parent_rate=%ld\n", rate,
+ parent_rate);
+
+ return -EINVAL;
+}
+
+static const struct clk_ops hsdk_pll_ops = {
+ .recalc_rate = hsdk_pll_recalc_rate,
+ .round_rate = hsdk_pll_round_rate,
+ .set_rate = hsdk_pll_set_rate,
+};
+
+static int hsdk_pll_clk_probe(struct platform_device *pdev)
+{
+ int ret;
+ struct resource *mem;
+ const char *parent_name;
+ unsigned int num_parents;
+ struct hsdk_pll_clk *pll_clk;
+ struct clk_init_data init = { };
+ struct device *dev = &pdev->dev;
+
+ pll_clk = devm_kzalloc(dev, sizeof(*pll_clk), GFP_KERNEL);
+ if (!pll_clk)
+ return -ENOMEM;
+
+ mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ pll_clk->regs = devm_ioremap_resource(dev, mem);
+ if (IS_ERR(pll_clk->regs))
+ return PTR_ERR(pll_clk->regs);
+
+ init.name = dev->of_node->name;
+ init.ops = &hsdk_pll_ops;
+ parent_name = of_clk_get_parent_name(dev->of_node, 0);
+ init.parent_names = &parent_name;
+ num_parents = of_clk_get_parent_count(dev->of_node);
+ if (num_parents == 0 || num_parents > CGU_PLL_SOURCE_MAX) {
+ dev_err(dev, "wrong clock parents number: %u\n", num_parents);
+ return -EINVAL;
+ }
+ init.num_parents = num_parents;
+
+ pll_clk->hw.init = &init;
+ pll_clk->dev = dev;
+ pll_clk->pll_devdata = of_device_get_match_data(dev);
+
+ if (!pll_clk->pll_devdata) {
+ dev_err(dev, "No OF match data provided\n");
+ return -EINVAL;
+ }
+
+ ret = devm_clk_hw_register(dev, &pll_clk->hw);
+ if (ret) {
+ dev_err(dev, "failed to register %s clock\n", init.name);
+ return ret;
+ }
+
+ return of_clk_add_hw_provider(dev->of_node, of_clk_hw_simple_get,
+ &pll_clk->hw);
+}
+
+static int hsdk_pll_clk_remove(struct platform_device *pdev)
+{
+ of_clk_del_provider(pdev->dev.of_node);
+ return 0;
+}
+
+static void __init of_hsdk_pll_clk_setup(struct device_node *node)
+{
+ int ret;
+ const char *parent_name;
+ unsigned int num_parents;
+ struct hsdk_pll_clk *pll_clk;
+ struct clk_init_data init = { };
+
+ pll_clk = kzalloc(sizeof(*pll_clk), GFP_KERNEL);
+ if (!pll_clk)
+ return;
+
+ pll_clk->regs = of_iomap(node, 0);
+ if (!pll_clk->regs) {
+ pr_err("failed to map pll registers\n");
+ goto err_free_pll_clk;
+ }
+
+ pll_clk->spec_regs = of_iomap(node, 1);
+ if (!pll_clk->spec_regs) {
+ pr_err("failed to map pll registers\n");
+ goto err_unmap_comm_regs;
+ }
+
+ init.name = node->name;
+ init.ops = &hsdk_pll_ops;
+ parent_name = of_clk_get_parent_name(node, 0);
+ init.parent_names = &parent_name;
+ num_parents = of_clk_get_parent_count(node);
+ if (num_parents > CGU_PLL_SOURCE_MAX) {
+ pr_err("too much clock parents: %u\n", num_parents);
+ goto err_unmap_spec_regs;
+ }
+ init.num_parents = num_parents;
+
+ pll_clk->hw.init = &init;
+ pll_clk->pll_devdata = &core_pll_devdata;
+
+ ret = clk_hw_register(NULL, &pll_clk->hw);
+ if (ret) {
+ pr_err("failed to register %s clock\n", node->name);
+ goto err_unmap_spec_regs;
+ }
+
+ ret = of_clk_add_hw_provider(node, of_clk_hw_simple_get, &pll_clk->hw);
+ if (ret) {
+ pr_err("failed to add hw provider for %s clock\n", node->name);
+ goto err_unmap_spec_regs;
+ }
+
+ return;
+
+err_unmap_spec_regs:
+ iounmap(pll_clk->spec_regs);
+err_unmap_comm_regs:
+ iounmap(pll_clk->regs);
+err_free_pll_clk:
+ kfree(pll_clk);
+}
+
+/* Core PLL needed early for ARC cpus timers */
+CLK_OF_DECLARE(hsdk_pll_clock, "snps,hsdk-core-pll-clock",
+of_hsdk_pll_clk_setup);
+
+static const struct of_device_id hsdk_pll_clk_id[] = {
+ { .compatible = "snps,hsdk-gp-pll-clock", .data = &sdt_pll_devdata},
+ { .compatible = "snps,hsdk-hdmi-pll-clock", .data = &hdmi_pll_devdata},
+ { }
+};
+
+static struct platform_driver hsdk_pll_clk_driver = {
+ .driver = {
+ .name = "hsdk-gp-pll-clock",
+ .of_match_table = hsdk_pll_clk_id,
+ },
+ .probe = hsdk_pll_clk_probe,
+ .remove = hsdk_pll_clk_remove,
+};
+builtin_platform_driver(hsdk_pll_clk_driver);
diff --git a/drivers/clk/clk-mb86s7x.c b/drivers/clk/clk-mb86s7x.c
deleted file mode 100644
index 2a83a3ff1d09..000000000000
--- a/drivers/clk/clk-mb86s7x.c
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Copyright (C) 2013-2015 FUJITSU SEMICONDUCTOR LIMITED
- * Copyright (C) 2015 Linaro Ltd.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#include <linux/clkdev.h>
-#include <linux/err.h>
-#include <linux/io.h>
-#include <linux/of.h>
-#include <linux/cpu.h>
-#include <linux/clk-provider.h>
-#include <linux/spinlock.h>
-#include <linux/module.h>
-#include <linux/topology.h>
-#include <linux/mailbox_client.h>
-#include <linux/platform_device.h>
-
-#include <soc/mb86s7x/scb_mhu.h>
-
-#define to_crg_clk(p) container_of(p, struct crg_clk, hw)
-#define to_clc_clk(p) container_of(p, struct cl_clk, hw)
-
-struct mb86s7x_peri_clk {
- u32 payload_size;
- u32 cntrlr;
- u32 domain;
- u32 port;
- u32 en;
- u64 frequency;
-} __packed __aligned(4);
-
-struct hack_rate {
- unsigned clk_id;
- unsigned long rate;
- int gated;
-};
-
-struct crg_clk {
- struct clk_hw hw;
- u8 cntrlr, domain, port;
-};
-
-static int crg_gate_control(struct clk_hw *hw, int en)
-{
- struct crg_clk *crgclk = to_crg_clk(hw);
- struct mb86s7x_peri_clk cmd;
- int ret;
-
- cmd.payload_size = sizeof(cmd);
- cmd.cntrlr = crgclk->cntrlr;
- cmd.domain = crgclk->domain;
- cmd.port = crgclk->port;
- cmd.en = en;
-
- /* Port is UngatedCLK */
- if (cmd.port == 8)
- return en ? 0 : -EINVAL;
-
- pr_debug("%s:%d CMD Cntrlr-%u Dom-%u Port-%u En-%u}\n",
- __func__, __LINE__, cmd.cntrlr,
- cmd.domain, cmd.port, cmd.en);
-
- ret = mb86s7x_send_packet(CMD_PERI_CLOCK_GATE_SET_REQ,
- &cmd, sizeof(cmd));
- if (ret < 0) {
- pr_err("%s:%d failed!\n", __func__, __LINE__);
- return ret;
- }
-
- pr_debug("%s:%d REP Cntrlr-%u Dom-%u Port-%u En-%u}\n",
- __func__, __LINE__, cmd.cntrlr,
- cmd.domain, cmd.port, cmd.en);
-
- /* If the request was rejected */
- if (cmd.en != en)
- ret = -EINVAL;
- else
- ret = 0;
-
- return ret;
-}
-
-static int crg_port_prepare(struct clk_hw *hw)
-{
- return crg_gate_control(hw, 1);
-}
-
-static void crg_port_unprepare(struct clk_hw *hw)
-{
- crg_gate_control(hw, 0);
-}
-
-static int
-crg_rate_control(struct clk_hw *hw, int set, unsigned long *rate)
-{
- struct crg_clk *crgclk = to_crg_clk(hw);
- struct mb86s7x_peri_clk cmd;
- int code, ret;
-
- cmd.payload_size = sizeof(cmd);
- cmd.cntrlr = crgclk->cntrlr;
- cmd.domain = crgclk->domain;
- cmd.port = crgclk->port;
- cmd.frequency = *rate;
-
- if (set) {
- code = CMD_PERI_CLOCK_RATE_SET_REQ;
- pr_debug("%s:%d CMD Cntrlr-%u Dom-%u Port-%u Rate-SET %lluHz}\n",
- __func__, __LINE__, cmd.cntrlr,
- cmd.domain, cmd.port, cmd.frequency);
- } else {
- code = CMD_PERI_CLOCK_RATE_GET_REQ;
- pr_debug("%s:%d CMD Cntrlr-%u Dom-%u Port-%u Rate-GET}\n",
- __func__, __LINE__, cmd.cntrlr,
- cmd.domain, cmd.port);
- }
-
- ret = mb86s7x_send_packet(code, &cmd, sizeof(cmd));
- if (ret < 0) {
- pr_err("%s:%d failed!\n", __func__, __LINE__);
- return ret;
- }
-
- if (set)
- pr_debug("%s:%d REP Cntrlr-%u Dom-%u Port-%u Rate-SET %lluHz}\n",
- __func__, __LINE__, cmd.cntrlr,
- cmd.domain, cmd.port, cmd.frequency);
- else
- pr_debug("%s:%d REP Cntrlr-%u Dom-%u Port-%u Rate-GOT %lluHz}\n",
- __func__, __LINE__, cmd.cntrlr,
- cmd.domain, cmd.port, cmd.frequency);
-
- *rate = cmd.frequency;
- return 0;
-}
-
-static unsigned long
-crg_port_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
-{
- unsigned long rate;
-
- crg_rate_control(hw, 0, &rate);
-
- return rate;
-}
-
-static long
-crg_port_round_rate(struct clk_hw *hw,
- unsigned long rate, unsigned long *pr)
-{
- return rate;
-}
-
-static int
-crg_port_set_rate(struct clk_hw *hw,
- unsigned long rate, unsigned long parent_rate)
-{
- return crg_rate_control(hw, 1, &rate);
-}
-
-const struct clk_ops crg_port_ops = {
- .prepare = crg_port_prepare,
- .unprepare = crg_port_unprepare,
- .recalc_rate = crg_port_recalc_rate,
- .round_rate = crg_port_round_rate,
- .set_rate = crg_port_set_rate,
-};
-
-struct mb86s70_crg11 {
- struct mutex lock; /* protects CLK populating and searching */
-};
-
-static struct clk *crg11_get(struct of_phandle_args *clkspec, void *data)
-{
- struct mb86s70_crg11 *crg11 = data;
- struct clk_init_data init;
- u32 cntrlr, domain, port;
- struct crg_clk *crgclk;
- struct clk *clk;
- char clkp[20];
-
- if (clkspec->args_count != 3)
- return ERR_PTR(-EINVAL);
-
- cntrlr = clkspec->args[0];
- domain = clkspec->args[1];
- port = clkspec->args[2];
-
- if (port > 7)
- snprintf(clkp, 20, "UngatedCLK%d_%X", cntrlr, domain);
- else
- snprintf(clkp, 20, "CLK%d_%X_%d", cntrlr, domain, port);
-
- mutex_lock(&crg11->lock);
-
- clk = __clk_lookup(clkp);
- if (clk) {
- mutex_unlock(&crg11->lock);
- return clk;
- }
-
- crgclk = kzalloc(sizeof(*crgclk), GFP_KERNEL);
- if (!crgclk) {
- mutex_unlock(&crg11->lock);
- return ERR_PTR(-ENOMEM);
- }
-
- init.name = clkp;
- init.num_parents = 0;
- init.ops = &crg_port_ops;
- init.flags = 0;
- crgclk->hw.init = &init;
- crgclk->cntrlr = cntrlr;
- crgclk->domain = domain;
- crgclk->port = port;
- clk = clk_register(NULL, &crgclk->hw);
- if (IS_ERR(clk))
- pr_err("%s:%d Error!\n", __func__, __LINE__);
- else
- pr_debug("Registered %s\n", clkp);
-
- clk_register_clkdev(clk, clkp, NULL);
- mutex_unlock(&crg11->lock);
- return clk;
-}
-
-static void __init crg_port_init(struct device_node *node)
-{
- struct mb86s70_crg11 *crg11;
-
- crg11 = kzalloc(sizeof(*crg11), GFP_KERNEL);
- if (!crg11)
- return;
-
- mutex_init(&crg11->lock);
-
- of_clk_add_provider(node, crg11_get, crg11);
-}
-CLK_OF_DECLARE(crg11_gate, "fujitsu,mb86s70-crg11", crg_port_init);
-
-struct cl_clk {
- struct clk_hw hw;
- int cluster;
-};
-
-struct mb86s7x_cpu_freq {
- u32 payload_size;
- u32 cluster_class;
- u32 cluster_id;
- u32 cpu_id;
- u64 frequency;
-};
-
-static void mhu_cluster_rate(struct clk_hw *hw, unsigned long *rate, int get)
-{
- struct cl_clk *clc = to_clc_clk(hw);
- struct mb86s7x_cpu_freq cmd;
- int code, ret;
-
- cmd.payload_size = sizeof(cmd);
- cmd.cluster_class = 0;
- cmd.cluster_id = clc->cluster;
- cmd.cpu_id = 0;
- cmd.frequency = *rate;
-
- if (get)
- code = CMD_CPU_CLOCK_RATE_GET_REQ;
- else
- code = CMD_CPU_CLOCK_RATE_SET_REQ;
-
- pr_debug("%s:%d CMD Cl_Class-%u CL_ID-%u CPU_ID-%u Freq-%llu}\n",
- __func__, __LINE__, cmd.cluster_class,
- cmd.cluster_id, cmd.cpu_id, cmd.frequency);
-
- ret = mb86s7x_send_packet(code, &cmd, sizeof(cmd));
- if (ret < 0) {
- pr_err("%s:%d failed!\n", __func__, __LINE__);
- return;
- }
-
- pr_debug("%s:%d REP Cl_Class-%u CL_ID-%u CPU_ID-%u Freq-%llu}\n",
- __func__, __LINE__, cmd.cluster_class,
- cmd.cluster_id, cmd.cpu_id, cmd.frequency);
-
- *rate = cmd.frequency;
-}
-
-static unsigned long
-clc_recalc_rate(struct clk_hw *hw, unsigned long unused)
-{
- unsigned long rate;
-
- mhu_cluster_rate(hw, &rate, 1);
- return rate;
-}
-
-static long
-clc_round_rate(struct clk_hw *hw, unsigned long rate,
- unsigned long *unused)
-{
- return rate;
-}
-
-static int
-clc_set_rate(struct clk_hw *hw, unsigned long rate,
- unsigned long unused)
-{
- unsigned long res = rate;
-
- mhu_cluster_rate(hw, &res, 0);
-
- return (res == rate) ? 0 : -EINVAL;
-}
-
-static struct clk_ops clk_clc_ops = {
- .recalc_rate = clc_recalc_rate,
- .round_rate = clc_round_rate,
- .set_rate = clc_set_rate,
-};
-
-static struct clk_hw *mb86s7x_clclk_register(struct device *cpu_dev)
-{
- struct clk_init_data init;
- struct cl_clk *clc;
- int ret;
-
- clc = kzalloc(sizeof(*clc), GFP_KERNEL);
- if (!clc)
- return ERR_PTR(-ENOMEM);
-
- clc->hw.init = &init;
- clc->cluster = topology_physical_package_id(cpu_dev->id);
-
- init.name = dev_name(cpu_dev);
- init.ops = &clk_clc_ops;
- init.flags = CLK_GET_RATE_NOCACHE;
- init.num_parents = 0;
-
- ret = devm_clk_hw_register(cpu_dev, &clc->hw);
- if (ret)
- return ERR_PTR(ret);
- return &clc->hw;
-}
-
-static int mb86s7x_clclk_of_init(void)
-{
- int cpu, ret = -ENODEV;
- struct device_node *np;
- struct clk_hw *hw;
-
- np = of_find_compatible_node(NULL, NULL, "fujitsu,mb86s70-scb-1.0");
- if (!np || !of_device_is_available(np))
- goto exit;
-
- for_each_possible_cpu(cpu) {
- struct device *cpu_dev = get_cpu_device(cpu);
-
- if (!cpu_dev) {
- pr_err("failed to get cpu%d device\n", cpu);
- continue;
- }
-
- hw = mb86s7x_clclk_register(cpu_dev);
- if (IS_ERR(hw)) {
- pr_err("failed to register cpu%d clock\n", cpu);
- continue;
- }
- if (clk_hw_register_clkdev(hw, NULL, dev_name(cpu_dev))) {
- pr_err("failed to register cpu%d clock lookup\n", cpu);
- continue;
- }
- pr_debug("registered clk for %s\n", dev_name(cpu_dev));
- }
- ret = 0;
-
- platform_device_register_simple("arm-bL-cpufreq-dt", -1, NULL, 0);
-exit:
- of_node_put(np);
- return ret;
-}
-module_init(mb86s7x_clclk_of_init);
diff --git a/drivers/clk/clk-moxart.c b/drivers/clk/clk-moxart.c
index b86dac851116..58428d0043fd 100644
--- a/drivers/clk/clk-moxart.c
+++ b/drivers/clk/clk-moxart.c
@@ -18,7 +18,7 @@
static void __init moxart_of_pll_clk_init(struct device_node *node)
{
- static void __iomem *base;
+ void __iomem *base;
struct clk_hw *hw;
struct clk *ref_clk;
unsigned int mul;
@@ -30,7 +30,7 @@ static void __init moxart_of_pll_clk_init(struct device_node *node)
base = of_iomap(node, 0);
if (!base) {
- pr_err("%s: of_iomap failed\n", node->full_name);
+ pr_err("%pOF: of_iomap failed\n", node);
return;
}
@@ -39,13 +39,13 @@ static void __init moxart_of_pll_clk_init(struct device_node *node)
ref_clk = of_clk_get(node, 0);
if (IS_ERR(ref_clk)) {
- pr_err("%s: of_clk_get failed\n", node->full_name);
+ pr_err("%pOF: of_clk_get failed\n", node);
return;
}
hw = clk_hw_register_fixed_factor(NULL, name, parent_name, 0, mul, 1);
if (IS_ERR(hw)) {
- pr_err("%s: failed to register clock\n", node->full_name);
+ pr_err("%pOF: failed to register clock\n", node);
return;
}
@@ -57,7 +57,7 @@ CLK_OF_DECLARE(moxart_pll_clock, "moxa,moxart-pll-clock",
static void __init moxart_of_apb_clk_init(struct device_node *node)
{
- static void __iomem *base;
+ void __iomem *base;
struct clk_hw *hw;
struct clk *pll_clk;
unsigned int div, val;
@@ -70,7 +70,7 @@ static void __init moxart_of_apb_clk_init(struct device_node *node)
base = of_iomap(node, 0);
if (!base) {
- pr_err("%s: of_iomap failed\n", node->full_name);
+ pr_err("%pOF: of_iomap failed\n", node);
return;
}
@@ -83,13 +83,13 @@ static void __init moxart_of_apb_clk_init(struct device_node *node)
pll_clk = of_clk_get(node, 0);
if (IS_ERR(pll_clk)) {
- pr_err("%s: of_clk_get failed\n", node->full_name);
+ pr_err("%pOF: of_clk_get failed\n", node);
return;
}
hw = clk_hw_register_fixed_factor(NULL, name, parent_name, 0, 1, div);
if (IS_ERR(hw)) {
- pr_err("%s: failed to register clock\n", node->full_name);
+ pr_err("%pOF: failed to register clock\n", node);
return;
}
diff --git a/drivers/clk/clk-qoriq.c b/drivers/clk/clk-qoriq.c
index f3931e38fac0..b0ea753b8709 100644
--- a/drivers/clk/clk-qoriq.c
+++ b/drivers/clk/clk-qoriq.c
@@ -12,6 +12,7 @@
#include <linux/clk.h>
#include <linux/clk-provider.h>
+#include <linux/clkdev.h>
#include <linux/fsl/guts.h>
#include <linux/io.h>
#include <linux/kernel.h>
@@ -537,6 +538,17 @@ static const struct clockgen_chipinfo chipinfo[] = {
.flags = CG_PLL_8BIT,
},
{
+ .compat = "fsl,ls1088a-clockgen",
+ .cmux_groups = {
+ &clockgen2_cmux_cga12
+ },
+ .cmux_to_group = {
+ 0, 0, -1
+ },
+ .pll_mask = 0x07,
+ .flags = CG_VER3 | CG_LITTLE_ENDIAN,
+ },
+ {
.compat = "fsl,ls1012a-clockgen",
.cmux_groups = {
&ls1012a_cmux
@@ -1113,6 +1125,7 @@ static void __init create_one_pll(struct clockgen *cg, int idx)
for (i = 0; i < ARRAY_SIZE(pll->div); i++) {
struct clk *clk;
+ int ret;
snprintf(pll->div[i].name, sizeof(pll->div[i].name),
"cg-pll%d-div%d", idx, i + 1);
@@ -1126,6 +1139,11 @@ static void __init create_one_pll(struct clockgen *cg, int idx)
}
pll->div[i].clk = clk;
+ ret = clk_register_clkdev(clk, pll->div[i].name, NULL);
+ if (ret != 0)
+ pr_err("%s: %s: register to lookup table failed %ld\n",
+ __func__, pll->div[i].name, PTR_ERR(clk));
+
}
}
@@ -1348,8 +1366,7 @@ static void __init clockgen_init(struct device_node *np)
}
if (i == ARRAY_SIZE(chipinfo)) {
- pr_err("%s: unknown clockgen node %s\n", __func__,
- np->full_name);
+ pr_err("%s: unknown clockgen node %pOF\n", __func__, np);
goto err;
}
clockgen.info = chipinfo[i];
@@ -1362,8 +1379,8 @@ static void __init clockgen_init(struct device_node *np)
if (guts) {
clockgen.guts = of_iomap(guts, 0);
if (!clockgen.guts) {
- pr_err("%s: Couldn't map %s regs\n", __func__,
- guts->full_name);
+ pr_err("%s: Couldn't map %pOF regs\n", __func__,
+ guts);
}
}
@@ -1398,6 +1415,7 @@ CLK_OF_DECLARE(qoriq_clockgen_ls1012a, "fsl,ls1012a-clockgen", clockgen_init);
CLK_OF_DECLARE(qoriq_clockgen_ls1021a, "fsl,ls1021a-clockgen", clockgen_init);
CLK_OF_DECLARE(qoriq_clockgen_ls1043a, "fsl,ls1043a-clockgen", clockgen_init);
CLK_OF_DECLARE(qoriq_clockgen_ls1046a, "fsl,ls1046a-clockgen", clockgen_init);
+CLK_OF_DECLARE(qoriq_clockgen_ls1088a, "fsl,ls1088a-clockgen", clockgen_init);
CLK_OF_DECLARE(qoriq_clockgen_ls2080a, "fsl,ls2080a-clockgen", clockgen_init);
/* Legacy nodes */
diff --git a/drivers/clk/clk-si5351.c b/drivers/clk/clk-si5351.c
index 2492442eea77..20d90769cced 100644
--- a/drivers/clk/clk-si5351.c
+++ b/drivers/clk/clk-si5351.c
@@ -519,6 +519,11 @@ static int si5351_pll_set_rate(struct clk_hw *hw, unsigned long rate,
SI5351_CLK_INTEGER_MODE,
(hwdata->params.p2 == 0) ? SI5351_CLK_INTEGER_MODE : 0);
+ /* Do a pll soft reset on the affected pll */
+ si5351_reg_write(hwdata->drvdata, SI5351_PLL_RESET,
+ hwdata->num == 0 ? SI5351_PLL_RESET_A :
+ SI5351_PLL_RESET_B);
+
dev_dbg(&hwdata->drvdata->client->dev,
"%s - %s: p1 = %lu, p2 = %lu, p3 = %lu, parent_rate = %lu, rate = %lu\n",
__func__, clk_hw_get_name(hw),
@@ -1091,13 +1096,6 @@ static int si5351_clkout_set_rate(struct clk_hw *hw, unsigned long rate,
si5351_set_bits(hwdata->drvdata, SI5351_CLK0_CTRL + hwdata->num,
SI5351_CLK_POWERDOWN, 0);
- /*
- * Do a pll soft reset on both plls, needed in some cases to get
- * all outputs running.
- */
- si5351_reg_write(hwdata->drvdata, SI5351_PLL_RESET,
- SI5351_PLL_RESET_A | SI5351_PLL_RESET_B);
-
dev_dbg(&hwdata->drvdata->client->dev,
"%s - %s: rdiv = %u, parent_rate = %lu, rate = %lu\n",
__func__, clk_hw_get_name(hw), (1 << rdiv),
diff --git a/drivers/clk/clk-stm32f4.c b/drivers/clk/clk-stm32f4.c
index 68e2a4e499f1..96c6b6bc8f0e 100644
--- a/drivers/clk/clk-stm32f4.c
+++ b/drivers/clk/clk-stm32f4.c
@@ -1541,8 +1541,8 @@ static void __init stm32f4_rcc_init(struct device_node *np)
base + gd->offset, gd->bit_idx, 0, &stm32f4_clk_lock);
if (IS_ERR(clks[idx])) {
- pr_err("%s: Unable to register leaf clock %s\n",
- np->full_name, gd->name);
+ pr_err("%pOF: Unable to register leaf clock %s\n",
+ np, gd->name);
goto fail;
}
}
diff --git a/drivers/clk/clk-stm32h7.c b/drivers/clk/clk-stm32h7.c
new file mode 100644
index 000000000000..a94c3f56c590
--- /dev/null
+++ b/drivers/clk/clk-stm32h7.c
@@ -0,0 +1,1410 @@
+/*
+ * Copyright (C) Gabriel Fernandez 2017
+ * Author: Gabriel Fernandez <gabriel.fernandez@st.com>
+ *
+ * License terms: GPL V2.0.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/err.h>
+#include <linux/io.h>
+#include <linux/mfd/syscon.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/slab.h>
+#include <linux/spinlock.h>
+#include <linux/regmap.h>
+
+#include <dt-bindings/clock/stm32h7-clks.h>
+
+/* Reset Clock Control Registers */
+#define RCC_CR 0x00
+#define RCC_CFGR 0x10
+#define RCC_D1CFGR 0x18
+#define RCC_D2CFGR 0x1C
+#define RCC_D3CFGR 0x20
+#define RCC_PLLCKSELR 0x28
+#define RCC_PLLCFGR 0x2C
+#define RCC_PLL1DIVR 0x30
+#define RCC_PLL1FRACR 0x34
+#define RCC_PLL2DIVR 0x38
+#define RCC_PLL2FRACR 0x3C
+#define RCC_PLL3DIVR 0x40
+#define RCC_PLL3FRACR 0x44
+#define RCC_D1CCIPR 0x4C
+#define RCC_D2CCIP1R 0x50
+#define RCC_D2CCIP2R 0x54
+#define RCC_D3CCIPR 0x58
+#define RCC_BDCR 0x70
+#define RCC_CSR 0x74
+#define RCC_AHB3ENR 0xD4
+#define RCC_AHB1ENR 0xD8
+#define RCC_AHB2ENR 0xDC
+#define RCC_AHB4ENR 0xE0
+#define RCC_APB3ENR 0xE4
+#define RCC_APB1LENR 0xE8
+#define RCC_APB1HENR 0xEC
+#define RCC_APB2ENR 0xF0
+#define RCC_APB4ENR 0xF4
+
+static DEFINE_SPINLOCK(stm32rcc_lock);
+
+static void __iomem *base;
+static struct clk_hw **hws;
+
+/* System clock parent */
+static const char * const sys_src[] = {
+ "hsi_ck", "csi_ck", "hse_ck", "pll1_p" };
+
+static const char * const tracein_src[] = {
+ "hsi_ck", "csi_ck", "hse_ck", "pll1_r" };
+
+static const char * const per_src[] = {
+ "hsi_ker", "csi_ker", "hse_ck", "disabled" };
+
+static const char * const pll_src[] = {
+ "hsi_ck", "csi_ck", "hse_ck", "no clock" };
+
+static const char * const sdmmc_src[] = { "pll1_q", "pll2_r" };
+
+static const char * const dsi_src[] = { "ck_dsi_phy", "pll2_q" };
+
+static const char * const qspi_src[] = {
+ "hclk", "pll1_q", "pll2_r", "per_ck" };
+
+static const char * const fmc_src[] = {
+ "hclk", "pll1_q", "pll2_r", "per_ck" };
+
+/* Kernel clock parent */
+static const char * const swp_src[] = { "pclk1", "hsi_ker" };
+
+static const char * const fdcan_src[] = { "hse_ck", "pll1_q", "pll2_q" };
+
+static const char * const dfsdm1_src[] = { "pclk2", "sys_ck" };
+
+static const char * const spdifrx_src[] = {
+ "pll1_q", "pll2_r", "pll3_r", "hsi_ker" };
+
+static const char *spi_src1[5] = {
+ "pll1_q", "pll2_p", "pll3_p", NULL, "per_ck" };
+
+static const char * const spi_src2[] = {
+ "pclk2", "pll2_q", "pll3_q", "hsi_ker", "csi_ker", "hse_ck" };
+
+static const char * const spi_src3[] = {
+ "pclk4", "pll2_q", "pll3_q", "hsi_ker", "csi_ker", "hse_ck" };
+
+static const char * const lptim_src1[] = {
+ "pclk1", "pll2_p", "pll3_r", "lse_ck", "lsi_ck", "per_ck" };
+
+static const char * const lptim_src2[] = {
+ "pclk4", "pll2_p", "pll3_r", "lse_ck", "lsi_ck", "per_ck" };
+
+static const char * const cec_src[] = {"lse_ck", "lsi_ck", "csi_ker_div122" };
+
+static const char * const usbotg_src[] = {"pll1_q", "pll3_q", "rc48_ck" };
+
+/* i2c 1,2,3 src */
+static const char * const i2c_src1[] = {
+ "pclk1", "pll3_r", "hsi_ker", "csi_ker" };
+
+static const char * const i2c_src2[] = {
+ "pclk4", "pll3_r", "hsi_ker", "csi_ker" };
+
+static const char * const rng_src[] = {
+ "rc48_ck", "pll1_q", "lse_ck", "lsi_ck" };
+
+/* usart 1,6 src */
+static const char * const usart_src1[] = {
+ "pclk2", "pll2_q", "pll3_q", "hsi_ker", "csi_ker", "lse_ck" };
+
+/* usart 2,3,4,5,7,8 src */
+static const char * const usart_src2[] = {
+ "pclk1", "pll2_q", "pll3_q", "hsi_ker", "csi_ker", "lse_ck" };
+
+static const char *sai_src[5] = {
+ "pll1_q", "pll2_p", "pll3_p", NULL, "per_ck" };
+
+static const char * const adc_src[] = { "pll2_p", "pll3_r", "per_ck" };
+
+/* lptim 2,3,4,5 src */
+static const char * const lpuart1_src[] = {
+ "pclk3", "pll2_q", "pll3_q", "csi_ker", "lse_ck" };
+
+static const char * const hrtim_src[] = { "tim2_ker", "d1cpre" };
+
+/* RTC clock parent */
+static const char * const rtc_src[] = { "off", "lse_ck", "lsi_ck", "hse_1M" };
+
+/* Micro-controller output clock parent */
+static const char * const mco_src1[] = {
+ "hsi_ck", "lse_ck", "hse_ck", "pll1_q", "rc48_ck" };
+
+static const char * const mco_src2[] = {
+ "sys_ck", "pll2_p", "hse_ck", "pll1_p", "csi_ck", "lsi_ck" };
+
+/* LCD clock */
+static const char * const ltdc_src[] = {"pll3_r"};
+
+/* Gate clock with ready bit and backup domain management */
+struct stm32_ready_gate {
+ struct clk_gate gate;
+ u8 bit_rdy;
+};
+
+#define to_ready_gate_clk(_rgate) container_of(_rgate, struct stm32_ready_gate,\
+ gate)
+
+#define RGATE_TIMEOUT 10000
+
+static int ready_gate_clk_enable(struct clk_hw *hw)
+{
+ struct clk_gate *gate = to_clk_gate(hw);
+ struct stm32_ready_gate *rgate = to_ready_gate_clk(gate);
+ int bit_status;
+ unsigned int timeout = RGATE_TIMEOUT;
+
+ if (clk_gate_ops.is_enabled(hw))
+ return 0;
+
+ clk_gate_ops.enable(hw);
+
+ /* We can't use readl_poll_timeout() because we can blocked if
+ * someone enables this clock before clocksource changes.
+ * Only jiffies counter is available. Jiffies are incremented by
+ * interruptions and enable op does not allow to be interrupted.
+ */
+ do {
+ bit_status = !(readl(gate->reg) & BIT(rgate->bit_rdy));
+
+ if (bit_status)
+ udelay(100);
+
+ } while (bit_status && --timeout);
+
+ return bit_status;
+}
+
+static void ready_gate_clk_disable(struct clk_hw *hw)
+{
+ struct clk_gate *gate = to_clk_gate(hw);
+ struct stm32_ready_gate *rgate = to_ready_gate_clk(gate);
+ int bit_status;
+ unsigned int timeout = RGATE_TIMEOUT;
+
+ if (!clk_gate_ops.is_enabled(hw))
+ return;
+
+ clk_gate_ops.disable(hw);
+
+ do {
+ bit_status = !!(readl(gate->reg) & BIT(rgate->bit_rdy));
+
+ if (bit_status)
+ udelay(100);
+
+ } while (bit_status && --timeout);
+}
+
+static const struct clk_ops ready_gate_clk_ops = {
+ .enable = ready_gate_clk_enable,
+ .disable = ready_gate_clk_disable,
+ .is_enabled = clk_gate_is_enabled,
+};
+
+static struct clk_hw *clk_register_ready_gate(struct device *dev,
+ const char *name, const char *parent_name,
+ void __iomem *reg, u8 bit_idx, u8 bit_rdy,
+ unsigned long flags, spinlock_t *lock)
+{
+ struct stm32_ready_gate *rgate;
+ struct clk_init_data init = { NULL };
+ struct clk_hw *hw;
+ int ret;
+
+ rgate = kzalloc(sizeof(*rgate), GFP_KERNEL);
+ if (!rgate)
+ return ERR_PTR(-ENOMEM);
+
+ init.name = name;
+ init.ops = &ready_gate_clk_ops;
+ init.flags = flags;
+ init.parent_names = &parent_name;
+ init.num_parents = 1;
+
+ rgate->bit_rdy = bit_rdy;
+ rgate->gate.lock = lock;
+ rgate->gate.reg = reg;
+ rgate->gate.bit_idx = bit_idx;
+ rgate->gate.hw.init = &init;
+
+ hw = &rgate->gate.hw;
+ ret = clk_hw_register(dev, hw);
+ if (ret) {
+ kfree(rgate);
+ hw = ERR_PTR(ret);
+ }
+
+ return hw;
+}
+
+struct gate_cfg {
+ u32 offset;
+ u8 bit_idx;
+};
+
+struct muxdiv_cfg {
+ u32 offset;
+ u8 shift;
+ u8 width;
+};
+
+struct composite_clk_cfg {
+ struct gate_cfg *gate;
+ struct muxdiv_cfg *mux;
+ struct muxdiv_cfg *div;
+ const char *name;
+ const char * const *parent_name;
+ int num_parents;
+ u32 flags;
+};
+
+struct composite_clk_gcfg_t {
+ u8 flags;
+ const struct clk_ops *ops;
+};
+
+/*
+ * General config definition of a composite clock (only clock diviser for rate)
+ */
+struct composite_clk_gcfg {
+ struct composite_clk_gcfg_t *mux;
+ struct composite_clk_gcfg_t *div;
+ struct composite_clk_gcfg_t *gate;
+};
+
+#define M_CFG_MUX(_mux_ops, _mux_flags)\
+ .mux = &(struct composite_clk_gcfg_t) { _mux_flags, _mux_ops}
+
+#define M_CFG_DIV(_rate_ops, _rate_flags)\
+ .div = &(struct composite_clk_gcfg_t) {_rate_flags, _rate_ops}
+
+#define M_CFG_GATE(_gate_ops, _gate_flags)\
+ .gate = &(struct composite_clk_gcfg_t) { _gate_flags, _gate_ops}
+
+static struct clk_mux *_get_cmux(void __iomem *reg, u8 shift, u8 width,
+ u32 flags, spinlock_t *lock)
+{
+ struct clk_mux *mux;
+
+ mux = kzalloc(sizeof(*mux), GFP_KERNEL);
+ if (!mux)
+ return ERR_PTR(-ENOMEM);
+
+ mux->reg = reg;
+ mux->shift = shift;
+ mux->mask = (1 << width) - 1;
+ mux->flags = flags;
+ mux->lock = lock;
+
+ return mux;
+}
+
+static struct clk_divider *_get_cdiv(void __iomem *reg, u8 shift, u8 width,
+ u32 flags, spinlock_t *lock)
+{
+ struct clk_divider *div;
+
+ div = kzalloc(sizeof(*div), GFP_KERNEL);
+
+ if (!div)
+ return ERR_PTR(-ENOMEM);
+
+ div->reg = reg;
+ div->shift = shift;
+ div->width = width;
+ div->flags = flags;
+ div->lock = lock;
+
+ return div;
+}
+
+static struct clk_gate *_get_cgate(void __iomem *reg, u8 bit_idx, u32 flags,
+ spinlock_t *lock)
+{
+ struct clk_gate *gate;
+
+ gate = kzalloc(sizeof(*gate), GFP_KERNEL);
+ if (!gate)
+ return ERR_PTR(-ENOMEM);
+
+ gate->reg = reg;
+ gate->bit_idx = bit_idx;
+ gate->flags = flags;
+ gate->lock = lock;
+
+ return gate;
+}
+
+struct composite_cfg {
+ struct clk_hw *mux_hw;
+ struct clk_hw *div_hw;
+ struct clk_hw *gate_hw;
+
+ const struct clk_ops *mux_ops;
+ const struct clk_ops *div_ops;
+ const struct clk_ops *gate_ops;
+};
+
+static void get_cfg_composite_div(const struct composite_clk_gcfg *gcfg,
+ const struct composite_clk_cfg *cfg,
+ struct composite_cfg *composite, spinlock_t *lock)
+{
+ struct clk_mux *mux = NULL;
+ struct clk_divider *div = NULL;
+ struct clk_gate *gate = NULL;
+ const struct clk_ops *mux_ops, *div_ops, *gate_ops;
+ struct clk_hw *mux_hw;
+ struct clk_hw *div_hw;
+ struct clk_hw *gate_hw;
+
+ mux_ops = div_ops = gate_ops = NULL;
+ mux_hw = div_hw = gate_hw = NULL;
+
+ if (gcfg->mux && gcfg->mux) {
+ mux = _get_cmux(base + cfg->mux->offset,
+ cfg->mux->shift,
+ cfg->mux->width,
+ gcfg->mux->flags, lock);
+
+ if (!IS_ERR(mux)) {
+ mux_hw = &mux->hw;
+ mux_ops = gcfg->mux->ops ?
+ gcfg->mux->ops : &clk_mux_ops;
+ }
+ }
+
+ if (gcfg->div && cfg->div) {
+ div = _get_cdiv(base + cfg->div->offset,
+ cfg->div->shift,
+ cfg->div->width,
+ gcfg->div->flags, lock);
+
+ if (!IS_ERR(div)) {
+ div_hw = &div->hw;
+ div_ops = gcfg->div->ops ?
+ gcfg->div->ops : &clk_divider_ops;
+ }
+ }
+
+ if (gcfg->gate && gcfg->gate) {
+ gate = _get_cgate(base + cfg->gate->offset,
+ cfg->gate->bit_idx,
+ gcfg->gate->flags, lock);
+
+ if (!IS_ERR(gate)) {
+ gate_hw = &gate->hw;
+ gate_ops = gcfg->gate->ops ?
+ gcfg->gate->ops : &clk_gate_ops;
+ }
+ }
+
+ composite->mux_hw = mux_hw;
+ composite->mux_ops = mux_ops;
+
+ composite->div_hw = div_hw;
+ composite->div_ops = div_ops;
+
+ composite->gate_hw = gate_hw;
+ composite->gate_ops = gate_ops;
+}
+
+/* Kernel Timer */
+struct timer_ker {
+ u8 dppre_shift;
+ struct clk_hw hw;
+ spinlock_t *lock;
+};
+
+#define to_timer_ker(_hw) container_of(_hw, struct timer_ker, hw)
+
+static unsigned long timer_ker_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ struct timer_ker *clk_elem = to_timer_ker(hw);
+ u32 timpre;
+ u32 dppre_shift = clk_elem->dppre_shift;
+ u32 prescaler;
+ u32 mul;
+
+ timpre = (readl(base + RCC_CFGR) >> 15) & 0x01;
+
+ prescaler = (readl(base + RCC_D2CFGR) >> dppre_shift) & 0x03;
+
+ mul = 2;
+
+ if (prescaler < 4)
+ mul = 1;
+
+ else if (timpre && prescaler > 4)
+ mul = 4;
+
+ return parent_rate * mul;
+}
+
+static const struct clk_ops timer_ker_ops = {
+ .recalc_rate = timer_ker_recalc_rate,
+};
+
+static struct clk_hw *clk_register_stm32_timer_ker(struct device *dev,
+ const char *name, const char *parent_name,
+ unsigned long flags,
+ u8 dppre_shift,
+ spinlock_t *lock)
+{
+ struct timer_ker *element;
+ struct clk_init_data init;
+ struct clk_hw *hw;
+ int err;
+
+ element = kzalloc(sizeof(*element), GFP_KERNEL);
+ if (!element)
+ return ERR_PTR(-ENOMEM);
+
+ init.name = name;
+ init.ops = &timer_ker_ops;
+ init.flags = flags;
+ init.parent_names = &parent_name;
+ init.num_parents = 1;
+
+ element->hw.init = &init;
+ element->lock = lock;
+ element->dppre_shift = dppre_shift;
+
+ hw = &element->hw;
+ err = clk_hw_register(dev, hw);
+
+ if (err) {
+ kfree(element);
+ return ERR_PTR(err);
+ }
+
+ return hw;
+}
+
+static const struct clk_div_table d1cpre_div_table[] = {
+ { 0, 1 }, { 1, 1 }, { 2, 1 }, { 3, 1},
+ { 4, 1 }, { 5, 1 }, { 6, 1 }, { 7, 1},
+ { 8, 2 }, { 9, 4 }, { 10, 8 }, { 11, 16 },
+ { 12, 64 }, { 13, 128 }, { 14, 256 },
+ { 15, 512 },
+ { 0 },
+};
+
+static const struct clk_div_table ppre_div_table[] = {
+ { 0, 1 }, { 1, 1 }, { 2, 1 }, { 3, 1},
+ { 4, 2 }, { 5, 4 }, { 6, 8 }, { 7, 16 },
+ { 0 },
+};
+
+static void register_core_and_bus_clocks(void)
+{
+ /* CORE AND BUS */
+ hws[SYS_D1CPRE] = clk_hw_register_divider_table(NULL, "d1cpre",
+ "sys_ck", CLK_IGNORE_UNUSED, base + RCC_D1CFGR, 8, 4, 0,
+ d1cpre_div_table, &stm32rcc_lock);
+
+ hws[HCLK] = clk_hw_register_divider_table(NULL, "hclk", "d1cpre",
+ CLK_IGNORE_UNUSED, base + RCC_D1CFGR, 0, 4, 0,
+ d1cpre_div_table, &stm32rcc_lock);
+
+ /* D1 DOMAIN */
+ /* * CPU Systick */
+ hws[CPU_SYSTICK] = clk_hw_register_fixed_factor(NULL, "systick",
+ "d1cpre", 0, 1, 8);
+
+ /* * APB3 peripheral */
+ hws[PCLK3] = clk_hw_register_divider_table(NULL, "pclk3", "hclk", 0,
+ base + RCC_D1CFGR, 4, 3, 0,
+ ppre_div_table, &stm32rcc_lock);
+
+ /* D2 DOMAIN */
+ /* * APB1 peripheral */
+ hws[PCLK1] = clk_hw_register_divider_table(NULL, "pclk1", "hclk", 0,
+ base + RCC_D2CFGR, 4, 3, 0,
+ ppre_div_table, &stm32rcc_lock);
+
+ /* Timers prescaler clocks */
+ clk_register_stm32_timer_ker(NULL, "tim1_ker", "pclk1", 0,
+ 4, &stm32rcc_lock);
+
+ /* * APB2 peripheral */
+ hws[PCLK2] = clk_hw_register_divider_table(NULL, "pclk2", "hclk", 0,
+ base + RCC_D2CFGR, 8, 3, 0, ppre_div_table,
+ &stm32rcc_lock);
+
+ clk_register_stm32_timer_ker(NULL, "tim2_ker", "pclk2", 0, 8,
+ &stm32rcc_lock);
+
+ /* D3 DOMAIN */
+ /* * APB4 peripheral */
+ hws[PCLK4] = clk_hw_register_divider_table(NULL, "pclk4", "hclk", 0,
+ base + RCC_D3CFGR, 4, 3, 0,
+ ppre_div_table, &stm32rcc_lock);
+}
+
+/* MUX clock configuration */
+struct stm32_mux_clk {
+ const char *name;
+ const char * const *parents;
+ u8 num_parents;
+ u32 offset;
+ u8 shift;
+ u8 width;
+ u32 flags;
+};
+
+#define M_MCLOCF(_name, _parents, _mux_offset, _mux_shift, _mux_width, _flags)\
+{\
+ .name = _name,\
+ .parents = _parents,\
+ .num_parents = ARRAY_SIZE(_parents),\
+ .offset = _mux_offset,\
+ .shift = _mux_shift,\
+ .width = _mux_width,\
+ .flags = _flags,\
+}
+
+#define M_MCLOC(_name, _parents, _mux_offset, _mux_shift, _mux_width)\
+ M_MCLOCF(_name, _parents, _mux_offset, _mux_shift, _mux_width, 0)\
+
+static const struct stm32_mux_clk stm32_mclk[] __initconst = {
+ M_MCLOC("per_ck", per_src, RCC_D1CCIPR, 28, 3),
+ M_MCLOC("pllsrc", pll_src, RCC_PLLCKSELR, 0, 3),
+ M_MCLOC("sys_ck", sys_src, RCC_CFGR, 0, 3),
+ M_MCLOC("tracein_ck", tracein_src, RCC_CFGR, 0, 3),
+};
+
+/* Oscillary clock configuration */
+struct stm32_osc_clk {
+ const char *name;
+ const char *parent;
+ u32 gate_offset;
+ u8 bit_idx;
+ u8 bit_rdy;
+ u32 flags;
+};
+
+#define OSC_CLKF(_name, _parent, _gate_offset, _bit_idx, _bit_rdy, _flags)\
+{\
+ .name = _name,\
+ .parent = _parent,\
+ .gate_offset = _gate_offset,\
+ .bit_idx = _bit_idx,\
+ .bit_rdy = _bit_rdy,\
+ .flags = _flags,\
+}
+
+#define OSC_CLK(_name, _parent, _gate_offset, _bit_idx, _bit_rdy)\
+ OSC_CLKF(_name, _parent, _gate_offset, _bit_idx, _bit_rdy, 0)
+
+static const struct stm32_osc_clk stm32_oclk[] __initconst = {
+ OSC_CLKF("hsi_ck", "hsidiv", RCC_CR, 0, 2, CLK_IGNORE_UNUSED),
+ OSC_CLKF("hsi_ker", "hsidiv", RCC_CR, 1, 2, CLK_IGNORE_UNUSED),
+ OSC_CLKF("csi_ck", "clk-csi", RCC_CR, 7, 8, CLK_IGNORE_UNUSED),
+ OSC_CLKF("csi_ker", "clk-csi", RCC_CR, 9, 8, CLK_IGNORE_UNUSED),
+ OSC_CLKF("rc48_ck", "clk-rc48", RCC_CR, 12, 13, CLK_IGNORE_UNUSED),
+ OSC_CLKF("lsi_ck", "clk-lsi", RCC_CSR, 0, 1, CLK_IGNORE_UNUSED),
+};
+
+/* PLL configuration */
+struct st32h7_pll_cfg {
+ u8 bit_idx;
+ u32 offset_divr;
+ u8 bit_frac_en;
+ u32 offset_frac;
+ u8 divm;
+};
+
+struct stm32_pll_data {
+ const char *name;
+ const char *parent_name;
+ unsigned long flags;
+ const struct st32h7_pll_cfg *cfg;
+};
+
+static const struct st32h7_pll_cfg stm32h7_pll1 = {
+ .bit_idx = 24,
+ .offset_divr = RCC_PLL1DIVR,
+ .bit_frac_en = 0,
+ .offset_frac = RCC_PLL1FRACR,
+ .divm = 4,
+};
+
+static const struct st32h7_pll_cfg stm32h7_pll2 = {
+ .bit_idx = 26,
+ .offset_divr = RCC_PLL2DIVR,
+ .bit_frac_en = 4,
+ .offset_frac = RCC_PLL2FRACR,
+ .divm = 12,
+};
+
+static const struct st32h7_pll_cfg stm32h7_pll3 = {
+ .bit_idx = 28,
+ .offset_divr = RCC_PLL3DIVR,
+ .bit_frac_en = 8,
+ .offset_frac = RCC_PLL3FRACR,
+ .divm = 20,
+};
+
+static const struct stm32_pll_data stm32_pll[] = {
+ { "vco1", "pllsrc", CLK_IGNORE_UNUSED, &stm32h7_pll1 },
+ { "vco2", "pllsrc", 0, &stm32h7_pll2 },
+ { "vco3", "pllsrc", 0, &stm32h7_pll3 },
+};
+
+struct stm32_fractional_divider {
+ void __iomem *mreg;
+ u8 mshift;
+ u8 mwidth;
+ u32 mmask;
+
+ void __iomem *nreg;
+ u8 nshift;
+ u8 nwidth;
+
+ void __iomem *freg_status;
+ u8 freg_bit;
+ void __iomem *freg_value;
+ u8 fshift;
+ u8 fwidth;
+
+ u8 flags;
+ struct clk_hw hw;
+ spinlock_t *lock;
+};
+
+struct stm32_pll_obj {
+ spinlock_t *lock;
+ struct stm32_fractional_divider div;
+ struct stm32_ready_gate rgate;
+ struct clk_hw hw;
+};
+
+#define to_pll(_hw) container_of(_hw, struct stm32_pll_obj, hw)
+
+static int pll_is_enabled(struct clk_hw *hw)
+{
+ struct stm32_pll_obj *clk_elem = to_pll(hw);
+ struct clk_hw *_hw = &clk_elem->rgate.gate.hw;
+
+ __clk_hw_set_clk(_hw, hw);
+
+ return ready_gate_clk_ops.is_enabled(_hw);
+}
+
+static int pll_enable(struct clk_hw *hw)
+{
+ struct stm32_pll_obj *clk_elem = to_pll(hw);
+ struct clk_hw *_hw = &clk_elem->rgate.gate.hw;
+
+ __clk_hw_set_clk(_hw, hw);
+
+ return ready_gate_clk_ops.enable(_hw);
+}
+
+static void pll_disable(struct clk_hw *hw)
+{
+ struct stm32_pll_obj *clk_elem = to_pll(hw);
+ struct clk_hw *_hw = &clk_elem->rgate.gate.hw;
+
+ __clk_hw_set_clk(_hw, hw);
+
+ ready_gate_clk_ops.disable(_hw);
+}
+
+static int pll_frac_is_enabled(struct clk_hw *hw)
+{
+ struct stm32_pll_obj *clk_elem = to_pll(hw);
+ struct stm32_fractional_divider *fd = &clk_elem->div;
+
+ return (readl(fd->freg_status) >> fd->freg_bit) & 0x01;
+}
+
+static unsigned long pll_read_frac(struct clk_hw *hw)
+{
+ struct stm32_pll_obj *clk_elem = to_pll(hw);
+ struct stm32_fractional_divider *fd = &clk_elem->div;
+
+ return (readl(fd->freg_value) >> fd->fshift) &
+ GENMASK(fd->fwidth - 1, 0);
+}
+
+static unsigned long pll_fd_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ struct stm32_pll_obj *clk_elem = to_pll(hw);
+ struct stm32_fractional_divider *fd = &clk_elem->div;
+ unsigned long m, n;
+ u32 val, mask;
+ u64 rate, rate1 = 0;
+
+ val = readl(fd->mreg);
+ mask = GENMASK(fd->mwidth - 1, 0) << fd->mshift;
+ m = (val & mask) >> fd->mshift;
+
+ val = readl(fd->nreg);
+ mask = GENMASK(fd->nwidth - 1, 0) << fd->nshift;
+ n = ((val & mask) >> fd->nshift) + 1;
+
+ if (!n || !m)
+ return parent_rate;
+
+ rate = (u64)parent_rate * n;
+ do_div(rate, m);
+
+ if (pll_frac_is_enabled(hw)) {
+ val = pll_read_frac(hw);
+ rate1 = (u64)parent_rate * (u64)val;
+ do_div(rate1, (m * 8191));
+ }
+
+ return rate + rate1;
+}
+
+static const struct clk_ops pll_ops = {
+ .enable = pll_enable,
+ .disable = pll_disable,
+ .is_enabled = pll_is_enabled,
+ .recalc_rate = pll_fd_recalc_rate,
+};
+
+static struct clk_hw *clk_register_stm32_pll(struct device *dev,
+ const char *name,
+ const char *parent,
+ unsigned long flags,
+ const struct st32h7_pll_cfg *cfg,
+ spinlock_t *lock)
+{
+ struct stm32_pll_obj *pll;
+ struct clk_init_data init = { NULL };
+ struct clk_hw *hw;
+ int ret;
+ struct stm32_fractional_divider *div = NULL;
+ struct stm32_ready_gate *rgate;
+
+ pll = kzalloc(sizeof(*pll), GFP_KERNEL);
+ if (!pll)
+ return ERR_PTR(-ENOMEM);
+
+ init.name = name;
+ init.ops = &pll_ops;
+ init.flags = flags;
+ init.parent_names = &parent;
+ init.num_parents = 1;
+ pll->hw.init = &init;
+
+ hw = &pll->hw;
+ rgate = &pll->rgate;
+
+ rgate->bit_rdy = cfg->bit_idx + 1;
+ rgate->gate.lock = lock;
+ rgate->gate.reg = base + RCC_CR;
+ rgate->gate.bit_idx = cfg->bit_idx;
+
+ div = &pll->div;
+ div->flags = 0;
+ div->mreg = base + RCC_PLLCKSELR;
+ div->mshift = cfg->divm;
+ div->mwidth = 6;
+ div->nreg = base + cfg->offset_divr;
+ div->nshift = 0;
+ div->nwidth = 9;
+
+ div->freg_status = base + RCC_PLLCFGR;
+ div->freg_bit = cfg->bit_frac_en;
+ div->freg_value = base + cfg->offset_frac;
+ div->fshift = 3;
+ div->fwidth = 13;
+
+ div->lock = lock;
+
+ ret = clk_hw_register(dev, hw);
+ if (ret) {
+ kfree(pll);
+ hw = ERR_PTR(ret);
+ }
+
+ return hw;
+}
+
+/* ODF CLOCKS */
+static unsigned long odf_divider_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ return clk_divider_ops.recalc_rate(hw, parent_rate);
+}
+
+static long odf_divider_round_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long *prate)
+{
+ return clk_divider_ops.round_rate(hw, rate, prate);
+}
+
+static int odf_divider_set_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long parent_rate)
+{
+ struct clk_hw *hwp;
+ int pll_status;
+ int ret;
+
+ hwp = clk_hw_get_parent(hw);
+
+ pll_status = pll_is_enabled(hwp);
+
+ if (pll_status)
+ pll_disable(hwp);
+
+ ret = clk_divider_ops.set_rate(hw, rate, parent_rate);
+
+ if (pll_status)
+ pll_enable(hwp);
+
+ return ret;
+}
+
+static const struct clk_ops odf_divider_ops = {
+ .recalc_rate = odf_divider_recalc_rate,
+ .round_rate = odf_divider_round_rate,
+ .set_rate = odf_divider_set_rate,
+};
+
+static int odf_gate_enable(struct clk_hw *hw)
+{
+ struct clk_hw *hwp;
+ int pll_status;
+ int ret;
+
+ if (clk_gate_ops.is_enabled(hw))
+ return 0;
+
+ hwp = clk_hw_get_parent(hw);
+
+ pll_status = pll_is_enabled(hwp);
+
+ if (pll_status)
+ pll_disable(hwp);
+
+ ret = clk_gate_ops.enable(hw);
+
+ if (pll_status)
+ pll_enable(hwp);
+
+ return ret;
+}
+
+static void odf_gate_disable(struct clk_hw *hw)
+{
+ struct clk_hw *hwp;
+ int pll_status;
+
+ if (!clk_gate_ops.is_enabled(hw))
+ return;
+
+ hwp = clk_hw_get_parent(hw);
+
+ pll_status = pll_is_enabled(hwp);
+
+ if (pll_status)
+ pll_disable(hwp);
+
+ clk_gate_ops.disable(hw);
+
+ if (pll_status)
+ pll_enable(hwp);
+}
+
+static const struct clk_ops odf_gate_ops = {
+ .enable = odf_gate_enable,
+ .disable = odf_gate_disable,
+ .is_enabled = clk_gate_is_enabled,
+};
+
+static struct composite_clk_gcfg odf_clk_gcfg = {
+ M_CFG_DIV(&odf_divider_ops, 0),
+ M_CFG_GATE(&odf_gate_ops, 0),
+};
+
+#define M_ODF_F(_name, _parent, _gate_offset, _bit_idx, _rate_offset,\
+ _rate_shift, _rate_width, _flags)\
+{\
+ .mux = NULL,\
+ .div = &(struct muxdiv_cfg) {_rate_offset, _rate_shift, _rate_width},\
+ .gate = &(struct gate_cfg) {_gate_offset, _bit_idx },\
+ .name = _name,\
+ .parent_name = &(const char *) {_parent},\
+ .num_parents = 1,\
+ .flags = _flags,\
+}
+
+#define M_ODF(_name, _parent, _gate_offset, _bit_idx, _rate_offset,\
+ _rate_shift, _rate_width)\
+M_ODF_F(_name, _parent, _gate_offset, _bit_idx, _rate_offset,\
+ _rate_shift, _rate_width, 0)\
+
+static const struct composite_clk_cfg stm32_odf[3][3] = {
+ {
+ M_ODF_F("pll1_p", "vco1", RCC_PLLCFGR, 16, RCC_PLL1DIVR, 9, 7,
+ CLK_IGNORE_UNUSED),
+ M_ODF_F("pll1_q", "vco1", RCC_PLLCFGR, 17, RCC_PLL1DIVR, 16, 7,
+ CLK_IGNORE_UNUSED),
+ M_ODF_F("pll1_r", "vco1", RCC_PLLCFGR, 18, RCC_PLL1DIVR, 24, 7,
+ CLK_IGNORE_UNUSED),
+ },
+
+ {
+ M_ODF("pll2_p", "vco2", RCC_PLLCFGR, 19, RCC_PLL2DIVR, 9, 7),
+ M_ODF("pll2_q", "vco2", RCC_PLLCFGR, 20, RCC_PLL2DIVR, 16, 7),
+ M_ODF("pll2_r", "vco2", RCC_PLLCFGR, 21, RCC_PLL2DIVR, 24, 7),
+ },
+ {
+ M_ODF("pll3_p", "vco3", RCC_PLLCFGR, 22, RCC_PLL3DIVR, 9, 7),
+ M_ODF("pll3_q", "vco3", RCC_PLLCFGR, 23, RCC_PLL3DIVR, 16, 7),
+ M_ODF("pll3_r", "vco3", RCC_PLLCFGR, 24, RCC_PLL3DIVR, 24, 7),
+ }
+};
+
+/* PERIF CLOCKS */
+struct pclk_t {
+ u32 gate_offset;
+ u8 bit_idx;
+ const char *name;
+ const char *parent;
+ u32 flags;
+};
+
+#define PER_CLKF(_gate_offset, _bit_idx, _name, _parent, _flags)\
+{\
+ .gate_offset = _gate_offset,\
+ .bit_idx = _bit_idx,\
+ .name = _name,\
+ .parent = _parent,\
+ .flags = _flags,\
+}
+
+#define PER_CLK(_gate_offset, _bit_idx, _name, _parent)\
+ PER_CLKF(_gate_offset, _bit_idx, _name, _parent, 0)
+
+static const struct pclk_t pclk[] = {
+ PER_CLK(RCC_AHB3ENR, 31, "d1sram1", "hclk"),
+ PER_CLK(RCC_AHB3ENR, 30, "itcm", "hclk"),
+ PER_CLK(RCC_AHB3ENR, 29, "dtcm2", "hclk"),
+ PER_CLK(RCC_AHB3ENR, 28, "dtcm1", "hclk"),
+ PER_CLK(RCC_AHB3ENR, 8, "flitf", "hclk"),
+ PER_CLK(RCC_AHB3ENR, 5, "jpgdec", "hclk"),
+ PER_CLK(RCC_AHB3ENR, 4, "dma2d", "hclk"),
+ PER_CLK(RCC_AHB3ENR, 0, "mdma", "hclk"),
+ PER_CLK(RCC_AHB1ENR, 28, "usb2ulpi", "hclk"),
+ PER_CLK(RCC_AHB1ENR, 26, "usb1ulpi", "hclk"),
+ PER_CLK(RCC_AHB1ENR, 17, "eth1rx", "hclk"),
+ PER_CLK(RCC_AHB1ENR, 16, "eth1tx", "hclk"),
+ PER_CLK(RCC_AHB1ENR, 15, "eth1mac", "hclk"),
+ PER_CLK(RCC_AHB1ENR, 14, "art", "hclk"),
+ PER_CLK(RCC_AHB1ENR, 1, "dma2", "hclk"),
+ PER_CLK(RCC_AHB1ENR, 0, "dma1", "hclk"),
+ PER_CLK(RCC_AHB2ENR, 31, "d2sram3", "hclk"),
+ PER_CLK(RCC_AHB2ENR, 30, "d2sram2", "hclk"),
+ PER_CLK(RCC_AHB2ENR, 29, "d2sram1", "hclk"),
+ PER_CLK(RCC_AHB2ENR, 5, "hash", "hclk"),
+ PER_CLK(RCC_AHB2ENR, 4, "crypt", "hclk"),
+ PER_CLK(RCC_AHB2ENR, 0, "camitf", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 28, "bkpram", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 25, "hsem", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 21, "bdma", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 19, "crc", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 10, "gpiok", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 9, "gpioj", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 8, "gpioi", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 7, "gpioh", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 6, "gpiog", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 5, "gpiof", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 4, "gpioe", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 3, "gpiod", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 2, "gpioc", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 1, "gpiob", "hclk"),
+ PER_CLK(RCC_AHB4ENR, 0, "gpioa", "hclk"),
+ PER_CLK(RCC_APB3ENR, 6, "wwdg1", "pclk3"),
+ PER_CLK(RCC_APB1LENR, 29, "dac12", "pclk1"),
+ PER_CLK(RCC_APB1LENR, 11, "wwdg2", "pclk1"),
+ PER_CLK(RCC_APB1LENR, 8, "tim14", "tim1_ker"),
+ PER_CLK(RCC_APB1LENR, 7, "tim13", "tim1_ker"),
+ PER_CLK(RCC_APB1LENR, 6, "tim12", "tim1_ker"),
+ PER_CLK(RCC_APB1LENR, 5, "tim7", "tim1_ker"),
+ PER_CLK(RCC_APB1LENR, 4, "tim6", "tim1_ker"),
+ PER_CLK(RCC_APB1LENR, 3, "tim5", "tim1_ker"),
+ PER_CLK(RCC_APB1LENR, 2, "tim4", "tim1_ker"),
+ PER_CLK(RCC_APB1LENR, 1, "tim3", "tim1_ker"),
+ PER_CLK(RCC_APB1LENR, 0, "tim2", "tim1_ker"),
+ PER_CLK(RCC_APB1HENR, 5, "mdios", "pclk1"),
+ PER_CLK(RCC_APB1HENR, 4, "opamp", "pclk1"),
+ PER_CLK(RCC_APB1HENR, 1, "crs", "pclk1"),
+ PER_CLK(RCC_APB2ENR, 18, "tim17", "tim2_ker"),
+ PER_CLK(RCC_APB2ENR, 17, "tim16", "tim2_ker"),
+ PER_CLK(RCC_APB2ENR, 16, "tim15", "tim2_ker"),
+ PER_CLK(RCC_APB2ENR, 1, "tim8", "tim2_ker"),
+ PER_CLK(RCC_APB2ENR, 0, "tim1", "tim2_ker"),
+ PER_CLK(RCC_APB4ENR, 26, "tmpsens", "pclk4"),
+ PER_CLK(RCC_APB4ENR, 16, "rtcapb", "pclk4"),
+ PER_CLK(RCC_APB4ENR, 15, "vref", "pclk4"),
+ PER_CLK(RCC_APB4ENR, 14, "comp12", "pclk4"),
+ PER_CLK(RCC_APB4ENR, 1, "syscfg", "pclk4"),
+};
+
+/* KERNEL CLOCKS */
+#define KER_CLKF(_gate_offset, _bit_idx,\
+ _mux_offset, _mux_shift, _mux_width,\
+ _name, _parent_name,\
+ _flags) \
+{ \
+ .gate = &(struct gate_cfg) {_gate_offset, _bit_idx},\
+ .mux = &(struct muxdiv_cfg) {_mux_offset, _mux_shift, _mux_width },\
+ .name = _name, \
+ .parent_name = _parent_name, \
+ .num_parents = ARRAY_SIZE(_parent_name),\
+ .flags = _flags,\
+}
+
+#define KER_CLK(_gate_offset, _bit_idx, _mux_offset, _mux_shift, _mux_width,\
+ _name, _parent_name) \
+KER_CLKF(_gate_offset, _bit_idx, _mux_offset, _mux_shift, _mux_width,\
+ _name, _parent_name, 0)\
+
+#define KER_CLKF_NOMUX(_gate_offset, _bit_idx,\
+ _name, _parent_name,\
+ _flags) \
+{ \
+ .gate = &(struct gate_cfg) {_gate_offset, _bit_idx},\
+ .mux = NULL,\
+ .name = _name, \
+ .parent_name = _parent_name, \
+ .num_parents = 1,\
+ .flags = _flags,\
+}
+
+static const struct composite_clk_cfg kclk[] = {
+ KER_CLK(RCC_AHB3ENR, 16, RCC_D1CCIPR, 16, 1, "sdmmc1", sdmmc_src),
+ KER_CLKF(RCC_AHB3ENR, 14, RCC_D1CCIPR, 4, 2, "quadspi", qspi_src,
+ CLK_IGNORE_UNUSED),
+ KER_CLKF(RCC_AHB3ENR, 12, RCC_D1CCIPR, 0, 2, "fmc", fmc_src,
+ CLK_IGNORE_UNUSED),
+ KER_CLK(RCC_AHB1ENR, 27, RCC_D2CCIP2R, 20, 2, "usb2otg", usbotg_src),
+ KER_CLK(RCC_AHB1ENR, 25, RCC_D2CCIP2R, 20, 2, "usb1otg", usbotg_src),
+ KER_CLK(RCC_AHB1ENR, 5, RCC_D3CCIPR, 16, 2, "adc12", adc_src),
+ KER_CLK(RCC_AHB2ENR, 9, RCC_D1CCIPR, 16, 1, "sdmmc2", sdmmc_src),
+ KER_CLK(RCC_AHB2ENR, 6, RCC_D2CCIP2R, 8, 2, "rng", rng_src),
+ KER_CLK(RCC_AHB4ENR, 24, RCC_D3CCIPR, 16, 2, "adc3", adc_src),
+ KER_CLKF(RCC_APB3ENR, 4, RCC_D1CCIPR, 8, 1, "dsi", dsi_src,
+ CLK_SET_RATE_PARENT),
+ KER_CLKF_NOMUX(RCC_APB3ENR, 3, "ltdc", ltdc_src, CLK_SET_RATE_PARENT),
+ KER_CLK(RCC_APB1LENR, 31, RCC_D2CCIP2R, 0, 3, "usart8", usart_src2),
+ KER_CLK(RCC_APB1LENR, 30, RCC_D2CCIP2R, 0, 3, "usart7", usart_src2),
+ KER_CLK(RCC_APB1LENR, 27, RCC_D2CCIP2R, 22, 2, "hdmicec", cec_src),
+ KER_CLK(RCC_APB1LENR, 23, RCC_D2CCIP2R, 12, 2, "i2c3", i2c_src1),
+ KER_CLK(RCC_APB1LENR, 22, RCC_D2CCIP2R, 12, 2, "i2c2", i2c_src1),
+ KER_CLK(RCC_APB1LENR, 21, RCC_D2CCIP2R, 12, 2, "i2c1", i2c_src1),
+ KER_CLK(RCC_APB1LENR, 20, RCC_D2CCIP2R, 0, 3, "uart5", usart_src2),
+ KER_CLK(RCC_APB1LENR, 19, RCC_D2CCIP2R, 0, 3, "uart4", usart_src2),
+ KER_CLK(RCC_APB1LENR, 18, RCC_D2CCIP2R, 0, 3, "usart3", usart_src2),
+ KER_CLK(RCC_APB1LENR, 17, RCC_D2CCIP2R, 0, 3, "usart2", usart_src2),
+ KER_CLK(RCC_APB1LENR, 16, RCC_D2CCIP1R, 20, 2, "spdifrx", spdifrx_src),
+ KER_CLK(RCC_APB1LENR, 15, RCC_D2CCIP1R, 16, 3, "spi3", spi_src1),
+ KER_CLK(RCC_APB1LENR, 14, RCC_D2CCIP1R, 16, 3, "spi2", spi_src1),
+ KER_CLK(RCC_APB1LENR, 9, RCC_D2CCIP2R, 28, 3, "lptim1", lptim_src1),
+ KER_CLK(RCC_APB1HENR, 8, RCC_D2CCIP1R, 28, 2, "fdcan", fdcan_src),
+ KER_CLK(RCC_APB1HENR, 2, RCC_D2CCIP1R, 31, 1, "swp", swp_src),
+ KER_CLK(RCC_APB2ENR, 29, RCC_CFGR, 14, 1, "hrtim", hrtim_src),
+ KER_CLK(RCC_APB2ENR, 28, RCC_D2CCIP1R, 24, 1, "dfsdm1", dfsdm1_src),
+ KER_CLKF(RCC_APB2ENR, 24, RCC_D2CCIP1R, 6, 3, "sai3", sai_src,
+ CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT),
+ KER_CLKF(RCC_APB2ENR, 23, RCC_D2CCIP1R, 6, 3, "sai2", sai_src,
+ CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT),
+ KER_CLKF(RCC_APB2ENR, 22, RCC_D2CCIP1R, 0, 3, "sai1", sai_src,
+ CLK_SET_RATE_PARENT | CLK_SET_RATE_NO_REPARENT),
+ KER_CLK(RCC_APB2ENR, 20, RCC_D2CCIP1R, 16, 3, "spi5", spi_src2),
+ KER_CLK(RCC_APB2ENR, 13, RCC_D2CCIP1R, 16, 3, "spi4", spi_src2),
+ KER_CLK(RCC_APB2ENR, 12, RCC_D2CCIP1R, 16, 3, "spi1", spi_src1),
+ KER_CLK(RCC_APB2ENR, 5, RCC_D2CCIP2R, 3, 3, "usart6", usart_src1),
+ KER_CLK(RCC_APB2ENR, 4, RCC_D2CCIP2R, 3, 3, "usart1", usart_src1),
+ KER_CLK(RCC_APB4ENR, 21, RCC_D3CCIPR, 24, 3, "sai4b", sai_src),
+ KER_CLK(RCC_APB4ENR, 21, RCC_D3CCIPR, 21, 3, "sai4a", sai_src),
+ KER_CLK(RCC_APB4ENR, 12, RCC_D3CCIPR, 13, 3, "lptim5", lptim_src2),
+ KER_CLK(RCC_APB4ENR, 11, RCC_D3CCIPR, 13, 3, "lptim4", lptim_src2),
+ KER_CLK(RCC_APB4ENR, 10, RCC_D3CCIPR, 13, 3, "lptim3", lptim_src2),
+ KER_CLK(RCC_APB4ENR, 9, RCC_D3CCIPR, 10, 3, "lptim2", lptim_src2),
+ KER_CLK(RCC_APB4ENR, 7, RCC_D3CCIPR, 8, 2, "i2c4", i2c_src2),
+ KER_CLK(RCC_APB4ENR, 5, RCC_D3CCIPR, 28, 3, "spi6", spi_src3),
+ KER_CLK(RCC_APB4ENR, 3, RCC_D3CCIPR, 0, 3, "lpuart1", lpuart1_src),
+};
+
+static struct composite_clk_gcfg kernel_clk_cfg = {
+ M_CFG_MUX(NULL, 0),
+ M_CFG_GATE(NULL, 0),
+};
+
+/* RTC clock */
+/*
+ * RTC & LSE registers are protected against parasitic write access.
+ * PWR_CR_DBP bit must be set to enable write access to RTC registers.
+ */
+/* STM32_PWR_CR */
+#define PWR_CR 0x00
+/* STM32_PWR_CR bit field */
+#define PWR_CR_DBP BIT(8)
+
+static struct composite_clk_gcfg rtc_clk_cfg = {
+ M_CFG_MUX(NULL, 0),
+ M_CFG_GATE(NULL, 0),
+};
+
+static const struct composite_clk_cfg rtc_clk =
+ KER_CLK(RCC_BDCR, 15, RCC_BDCR, 8, 2, "rtc_ck", rtc_src);
+
+/* Micro-controller output clock */
+static struct composite_clk_gcfg mco_clk_cfg = {
+ M_CFG_MUX(NULL, 0),
+ M_CFG_DIV(NULL, CLK_DIVIDER_ONE_BASED | CLK_DIVIDER_ALLOW_ZERO),
+};
+
+#define M_MCO_F(_name, _parents, _mux_offset, _mux_shift, _mux_width,\
+ _rate_offset, _rate_shift, _rate_width,\
+ _flags)\
+{\
+ .mux = &(struct muxdiv_cfg) {_mux_offset, _mux_shift, _mux_width },\
+ .div = &(struct muxdiv_cfg) {_rate_offset, _rate_shift, _rate_width},\
+ .gate = NULL,\
+ .name = _name,\
+ .parent_name = _parents,\
+ .num_parents = ARRAY_SIZE(_parents),\
+ .flags = _flags,\
+}
+
+static const struct composite_clk_cfg mco_clk[] = {
+ M_MCO_F("mco1", mco_src1, RCC_CFGR, 22, 4, RCC_CFGR, 18, 4, 0),
+ M_MCO_F("mco2", mco_src2, RCC_CFGR, 29, 3, RCC_CFGR, 25, 4, 0),
+};
+
+static void __init stm32h7_rcc_init(struct device_node *np)
+{
+ struct clk_hw_onecell_data *clk_data;
+ struct composite_cfg c_cfg;
+ int n;
+ const char *hse_clk, *lse_clk, *i2s_clk;
+ struct regmap *pdrm;
+
+ clk_data = kzalloc(sizeof(*clk_data) +
+ sizeof(*clk_data->hws) * STM32H7_MAX_CLKS,
+ GFP_KERNEL);
+ if (!clk_data)
+ return;
+
+ clk_data->num = STM32H7_MAX_CLKS;
+
+ hws = clk_data->hws;
+
+ for (n = 0; n < STM32H7_MAX_CLKS; n++)
+ hws[n] = ERR_PTR(-ENOENT);
+
+ /* get RCC base @ from DT */
+ base = of_iomap(np, 0);
+ if (!base) {
+ pr_err("%s: unable to map resource", np->name);
+ goto err_free_clks;
+ }
+
+ pdrm = syscon_regmap_lookup_by_phandle(np, "st,syscfg");
+ if (IS_ERR(pdrm))
+ pr_warn("%s: Unable to get syscfg\n", __func__);
+ else
+ /* In any case disable backup domain write protection
+ * and will never be enabled.
+ * Needed by LSE & RTC clocks.
+ */
+ regmap_update_bits(pdrm, PWR_CR, PWR_CR_DBP, PWR_CR_DBP);
+
+ /* Put parent names from DT */
+ hse_clk = of_clk_get_parent_name(np, 0);
+ lse_clk = of_clk_get_parent_name(np, 1);
+ i2s_clk = of_clk_get_parent_name(np, 2);
+
+ sai_src[3] = i2s_clk;
+ spi_src1[3] = i2s_clk;
+
+ /* Register Internal oscillators */
+ clk_hw_register_fixed_rate(NULL, "clk-hsi", NULL, 0, 64000000);
+ clk_hw_register_fixed_rate(NULL, "clk-csi", NULL, 0, 4000000);
+ clk_hw_register_fixed_rate(NULL, "clk-lsi", NULL, 0, 32000);
+ clk_hw_register_fixed_rate(NULL, "clk-rc48", NULL, 0, 48000);
+
+ /* This clock is coming from outside. Frequencies unknown */
+ hws[CK_DSI_PHY] = clk_hw_register_fixed_rate(NULL, "ck_dsi_phy", NULL,
+ 0, 0);
+
+ hws[HSI_DIV] = clk_hw_register_divider(NULL, "hsidiv", "clk-hsi", 0,
+ base + RCC_CR, 3, 2, CLK_DIVIDER_POWER_OF_TWO,
+ &stm32rcc_lock);
+
+ hws[HSE_1M] = clk_hw_register_divider(NULL, "hse_1M", "hse_ck", 0,
+ base + RCC_CFGR, 8, 6, CLK_DIVIDER_ONE_BASED |
+ CLK_DIVIDER_ALLOW_ZERO,
+ &stm32rcc_lock);
+
+ /* Mux system clocks */
+ for (n = 0; n < ARRAY_SIZE(stm32_mclk); n++)
+ hws[MCLK_BANK + n] = clk_hw_register_mux(NULL,
+ stm32_mclk[n].name,
+ stm32_mclk[n].parents,
+ stm32_mclk[n].num_parents,
+ stm32_mclk[n].flags,
+ stm32_mclk[n].offset + base,
+ stm32_mclk[n].shift,
+ stm32_mclk[n].width,
+ 0,
+ &stm32rcc_lock);
+
+ register_core_and_bus_clocks();
+
+ /* Oscillary clocks */
+ for (n = 0; n < ARRAY_SIZE(stm32_oclk); n++)
+ hws[OSC_BANK + n] = clk_register_ready_gate(NULL,
+ stm32_oclk[n].name,
+ stm32_oclk[n].parent,
+ stm32_oclk[n].gate_offset + base,
+ stm32_oclk[n].bit_idx,
+ stm32_oclk[n].bit_rdy,
+ stm32_oclk[n].flags,
+ &stm32rcc_lock);
+
+ hws[HSE_CK] = clk_register_ready_gate(NULL,
+ "hse_ck",
+ hse_clk,
+ RCC_CR + base,
+ 16, 17,
+ 0,
+ &stm32rcc_lock);
+
+ hws[LSE_CK] = clk_register_ready_gate(NULL,
+ "lse_ck",
+ lse_clk,
+ RCC_BDCR + base,
+ 0, 1,
+ 0,
+ &stm32rcc_lock);
+
+ hws[CSI_KER_DIV122 + n] = clk_hw_register_fixed_factor(NULL,
+ "csi_ker_div122", "csi_ker", 0, 1, 122);
+
+ /* PLLs */
+ for (n = 0; n < ARRAY_SIZE(stm32_pll); n++) {
+ int odf;
+
+ /* Register the VCO */
+ clk_register_stm32_pll(NULL, stm32_pll[n].name,
+ stm32_pll[n].parent_name, stm32_pll[n].flags,
+ stm32_pll[n].cfg,
+ &stm32rcc_lock);
+
+ /* Register the 3 output dividers */
+ for (odf = 0; odf < 3; odf++) {
+ int idx = n * 3 + odf;
+
+ get_cfg_composite_div(&odf_clk_gcfg, &stm32_odf[n][odf],
+ &c_cfg, &stm32rcc_lock);
+
+ hws[ODF_BANK + idx] = clk_hw_register_composite(NULL,
+ stm32_odf[n][odf].name,
+ stm32_odf[n][odf].parent_name,
+ stm32_odf[n][odf].num_parents,
+ c_cfg.mux_hw, c_cfg.mux_ops,
+ c_cfg.div_hw, c_cfg.div_ops,
+ c_cfg.gate_hw, c_cfg.gate_ops,
+ stm32_odf[n][odf].flags);
+ }
+ }
+
+ /* Peripheral clocks */
+ for (n = 0; n < ARRAY_SIZE(pclk); n++)
+ hws[PERIF_BANK + n] = clk_hw_register_gate(NULL, pclk[n].name,
+ pclk[n].parent,
+ pclk[n].flags, base + pclk[n].gate_offset,
+ pclk[n].bit_idx, pclk[n].flags, &stm32rcc_lock);
+
+ /* Kernel clocks */
+ for (n = 0; n < ARRAY_SIZE(kclk); n++) {
+ get_cfg_composite_div(&kernel_clk_cfg, &kclk[n], &c_cfg,
+ &stm32rcc_lock);
+
+ hws[KERN_BANK + n] = clk_hw_register_composite(NULL,
+ kclk[n].name,
+ kclk[n].parent_name,
+ kclk[n].num_parents,
+ c_cfg.mux_hw, c_cfg.mux_ops,
+ c_cfg.div_hw, c_cfg.div_ops,
+ c_cfg.gate_hw, c_cfg.gate_ops,
+ kclk[n].flags);
+ }
+
+ /* RTC clock (default state is off) */
+ clk_hw_register_fixed_rate(NULL, "off", NULL, 0, 0);
+
+ get_cfg_composite_div(&rtc_clk_cfg, &rtc_clk, &c_cfg, &stm32rcc_lock);
+
+ hws[RTC_CK] = clk_hw_register_composite(NULL,
+ rtc_clk.name,
+ rtc_clk.parent_name,
+ rtc_clk.num_parents,
+ c_cfg.mux_hw, c_cfg.mux_ops,
+ c_cfg.div_hw, c_cfg.div_ops,
+ c_cfg.gate_hw, c_cfg.gate_ops,
+ rtc_clk.flags);
+
+ /* Micro-controller clocks */
+ for (n = 0; n < ARRAY_SIZE(mco_clk); n++) {
+ get_cfg_composite_div(&mco_clk_cfg, &mco_clk[n], &c_cfg,
+ &stm32rcc_lock);
+
+ hws[MCO_BANK + n] = clk_hw_register_composite(NULL,
+ mco_clk[n].name,
+ mco_clk[n].parent_name,
+ mco_clk[n].num_parents,
+ c_cfg.mux_hw, c_cfg.mux_ops,
+ c_cfg.div_hw, c_cfg.div_ops,
+ c_cfg.gate_hw, c_cfg.gate_ops,
+ mco_clk[n].flags);
+ }
+
+ of_clk_add_hw_provider(np, of_clk_hw_onecell_get, clk_data);
+
+ return;
+
+err_free_clks:
+ kfree(clk_data);
+}
+
+/* The RCC node is a clock and reset controller, and these
+ * functionalities are supported by different drivers that
+ * matches the same compatible strings.
+ */
+CLK_OF_DECLARE_DRIVER(stm32h7_rcc, "st,stm32h743-rcc", stm32h7_rcc_init);
diff --git a/drivers/clk/clk-versaclock5.c b/drivers/clk/clk-versaclock5.c
index ea7d552a2f2b..decffb3826ec 100644
--- a/drivers/clk/clk-versaclock5.c
+++ b/drivers/clk/clk-versaclock5.c
@@ -57,6 +57,7 @@
#define VC5_PRIM_SRC_SHDN 0x10
#define VC5_PRIM_SRC_SHDN_EN_XTAL BIT(7)
#define VC5_PRIM_SRC_SHDN_EN_CLKIN BIT(6)
+#define VC5_PRIM_SRC_SHDN_EN_DOUBLE_XTAL_FREQ BIT(3)
#define VC5_PRIM_SRC_SHDN_SP BIT(1)
#define VC5_PRIM_SRC_SHDN_EN_GBL_SHDN BIT(0)
@@ -122,12 +123,16 @@
/* flags to describe chip features */
/* chip has built-in oscilator */
#define VC5_HAS_INTERNAL_XTAL BIT(0)
+/* chip has PFD requency doubler */
+#define VC5_HAS_PFD_FREQ_DBL BIT(1)
/* Supported IDT VC5 models. */
enum vc5_model {
IDT_VC5_5P49V5923,
+ IDT_VC5_5P49V5925,
IDT_VC5_5P49V5933,
IDT_VC5_5P49V5935,
+ IDT_VC6_5P49V6901,
};
/* Structure to describe features of a particular VC5 model */
@@ -157,6 +162,8 @@ struct vc5_driver_data {
struct clk *pin_clkin;
unsigned char clk_mux_ins;
struct clk_hw clk_mux;
+ struct clk_hw clk_mul;
+ struct clk_hw clk_pfd;
struct vc5_hw_data clk_pll;
struct vc5_hw_data clk_fod[VC5_MAX_FOD_NUM];
struct vc5_hw_data clk_out[VC5_MAX_CLK_OUT_NUM];
@@ -166,6 +173,14 @@ static const char * const vc5_mux_names[] = {
"mux"
};
+static const char * const vc5_dbl_names[] = {
+ "dbl"
+};
+
+static const char * const vc5_pfd_names[] = {
+ "pfd"
+};
+
static const char * const vc5_pll_names[] = {
"pll"
};
@@ -254,11 +269,64 @@ static int vc5_mux_set_parent(struct clk_hw *hw, u8 index)
return regmap_update_bits(vc5->regmap, VC5_PRIM_SRC_SHDN, mask, src);
}
-static unsigned long vc5_mux_recalc_rate(struct clk_hw *hw,
+static const struct clk_ops vc5_mux_ops = {
+ .set_parent = vc5_mux_set_parent,
+ .get_parent = vc5_mux_get_parent,
+};
+
+static unsigned long vc5_dbl_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{
struct vc5_driver_data *vc5 =
- container_of(hw, struct vc5_driver_data, clk_mux);
+ container_of(hw, struct vc5_driver_data, clk_mul);
+ unsigned int premul;
+
+ regmap_read(vc5->regmap, VC5_PRIM_SRC_SHDN, &premul);
+ if (premul & VC5_PRIM_SRC_SHDN_EN_DOUBLE_XTAL_FREQ)
+ parent_rate *= 2;
+
+ return parent_rate;
+}
+
+static long vc5_dbl_round_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long *parent_rate)
+{
+ if ((*parent_rate == rate) || ((*parent_rate * 2) == rate))
+ return rate;
+ else
+ return -EINVAL;
+}
+
+static int vc5_dbl_set_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long parent_rate)
+{
+ struct vc5_driver_data *vc5 =
+ container_of(hw, struct vc5_driver_data, clk_mul);
+ u32 mask;
+
+ if ((parent_rate * 2) == rate)
+ mask = VC5_PRIM_SRC_SHDN_EN_DOUBLE_XTAL_FREQ;
+ else
+ mask = 0;
+
+ regmap_update_bits(vc5->regmap, VC5_PRIM_SRC_SHDN,
+ VC5_PRIM_SRC_SHDN_EN_DOUBLE_XTAL_FREQ,
+ mask);
+
+ return 0;
+}
+
+static const struct clk_ops vc5_dbl_ops = {
+ .recalc_rate = vc5_dbl_recalc_rate,
+ .round_rate = vc5_dbl_round_rate,
+ .set_rate = vc5_dbl_set_rate,
+};
+
+static unsigned long vc5_pfd_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ struct vc5_driver_data *vc5 =
+ container_of(hw, struct vc5_driver_data, clk_pfd);
unsigned int prediv, div;
regmap_read(vc5->regmap, VC5_VCO_CTRL_AND_PREDIV, &prediv);
@@ -276,7 +344,7 @@ static unsigned long vc5_mux_recalc_rate(struct clk_hw *hw,
return parent_rate / VC5_REF_DIVIDER_REF_DIV(div);
}
-static long vc5_mux_round_rate(struct clk_hw *hw, unsigned long rate,
+static long vc5_pfd_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *parent_rate)
{
unsigned long idiv;
@@ -296,11 +364,11 @@ static long vc5_mux_round_rate(struct clk_hw *hw, unsigned long rate,
return *parent_rate / idiv;
}
-static int vc5_mux_set_rate(struct clk_hw *hw, unsigned long rate,
+static int vc5_pfd_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long parent_rate)
{
struct vc5_driver_data *vc5 =
- container_of(hw, struct vc5_driver_data, clk_mux);
+ container_of(hw, struct vc5_driver_data, clk_pfd);
unsigned long idiv;
u8 div;
@@ -328,12 +396,10 @@ static int vc5_mux_set_rate(struct clk_hw *hw, unsigned long rate,
return 0;
}
-static const struct clk_ops vc5_mux_ops = {
- .set_parent = vc5_mux_set_parent,
- .get_parent = vc5_mux_get_parent,
- .recalc_rate = vc5_mux_recalc_rate,
- .round_rate = vc5_mux_round_rate,
- .set_rate = vc5_mux_set_rate,
+static const struct clk_ops vc5_pfd_ops = {
+ .recalc_rate = vc5_pfd_recalc_rate,
+ .round_rate = vc5_pfd_round_rate,
+ .set_rate = vc5_pfd_set_rate,
};
/*
@@ -426,6 +492,10 @@ static unsigned long vc5_fod_recalc_rate(struct clk_hw *hw,
div_frc = (od_frc[0] << 22) | (od_frc[1] << 14) |
(od_frc[2] << 6) | (od_frc[3] >> 2);
+ /* Avoid division by zero if the output is not configured. */
+ if (div_int == 0 && div_frc == 0)
+ return 0;
+
/* The PLL divider has 12 integer bits and 30 fractional bits */
return div64_u64((u64)f_in << 24ULL, ((u64)div_int << 24ULL) + div_frc);
}
@@ -503,6 +573,25 @@ static int vc5_clk_out_prepare(struct clk_hw *hw)
{
struct vc5_hw_data *hwdata = container_of(hw, struct vc5_hw_data, hw);
struct vc5_driver_data *vc5 = hwdata->vc5;
+ const u8 mask = VC5_OUT_DIV_CONTROL_SELB_NORM |
+ VC5_OUT_DIV_CONTROL_SEL_EXT |
+ VC5_OUT_DIV_CONTROL_EN_FOD;
+ unsigned int src;
+ int ret;
+
+ /*
+ * If the input mux is disabled, enable it first and
+ * select source from matching FOD.
+ */
+ regmap_read(vc5->regmap, VC5_OUT_DIV_CONTROL(hwdata->num), &src);
+ if ((src & mask) == 0) {
+ src = VC5_OUT_DIV_CONTROL_RESET | VC5_OUT_DIV_CONTROL_EN_FOD;
+ ret = regmap_update_bits(vc5->regmap,
+ VC5_OUT_DIV_CONTROL(hwdata->num),
+ mask | VC5_OUT_DIV_CONTROL_RESET, src);
+ if (ret)
+ return ret;
+ }
/* Enable the clock buffer */
regmap_update_bits(vc5->regmap, VC5_CLK_OUTPUT_CFG(hwdata->num, 1),
@@ -516,7 +605,7 @@ static void vc5_clk_out_unprepare(struct clk_hw *hw)
struct vc5_hw_data *hwdata = container_of(hw, struct vc5_hw_data, hw);
struct vc5_driver_data *vc5 = hwdata->vc5;
- /* Enable the clock buffer */
+ /* Disable the clock buffer */
regmap_update_bits(vc5->regmap, VC5_CLK_OUTPUT_CFG(hwdata->num, 1),
VC5_CLK_OUTPUT_CFG1_EN_CLKBUF, 0);
}
@@ -537,6 +626,9 @@ static unsigned char vc5_clk_out_get_parent(struct clk_hw *hw)
regmap_read(vc5->regmap, VC5_OUT_DIV_CONTROL(hwdata->num), &src);
src &= mask;
+ if (src == 0) /* Input mux set to DISABLED */
+ return 0;
+
if ((src & fodclkmask) == VC5_OUT_DIV_CONTROL_EN_FOD)
return 0;
@@ -595,7 +687,9 @@ static int vc5_map_index_to_output(const enum vc5_model model,
case IDT_VC5_5P49V5933:
return (n == 0) ? 0 : 3;
case IDT_VC5_5P49V5923:
+ case IDT_VC5_5P49V5925:
case IDT_VC5_5P49V5935:
+ case IDT_VC6_5P49V6901:
default:
return n;
}
@@ -672,12 +766,46 @@ static int vc5_probe(struct i2c_client *client,
goto err_clk;
}
+ if (vc5->chip_info->flags & VC5_HAS_PFD_FREQ_DBL) {
+ /* Register frequency doubler */
+ memset(&init, 0, sizeof(init));
+ init.name = vc5_dbl_names[0];
+ init.ops = &vc5_dbl_ops;
+ init.flags = CLK_SET_RATE_PARENT;
+ init.parent_names = vc5_mux_names;
+ init.num_parents = 1;
+ vc5->clk_mul.init = &init;
+ ret = devm_clk_hw_register(&client->dev, &vc5->clk_mul);
+ if (ret) {
+ dev_err(&client->dev, "unable to register %s\n",
+ init.name);
+ goto err_clk;
+ }
+ }
+
+ /* Register PFD */
+ memset(&init, 0, sizeof(init));
+ init.name = vc5_pfd_names[0];
+ init.ops = &vc5_pfd_ops;
+ init.flags = CLK_SET_RATE_PARENT;
+ if (vc5->chip_info->flags & VC5_HAS_PFD_FREQ_DBL)
+ init.parent_names = vc5_dbl_names;
+ else
+ init.parent_names = vc5_mux_names;
+ init.num_parents = 1;
+ vc5->clk_pfd.init = &init;
+ ret = devm_clk_hw_register(&client->dev, &vc5->clk_pfd);
+ if (ret) {
+ dev_err(&client->dev, "unable to register %s\n", init.name);
+ goto err_clk;
+ }
+
/* Register PLL */
memset(&init, 0, sizeof(init));
init.name = vc5_pll_names[0];
init.ops = &vc5_pll_ops;
init.flags = CLK_SET_RATE_PARENT;
- init.parent_names = vc5_mux_names;
+ init.parent_names = vc5_pfd_names;
init.num_parents = 1;
vc5->clk_pll.num = 0;
vc5->clk_pll.vc5 = vc5;
@@ -785,6 +913,13 @@ static const struct vc5_chip_info idt_5p49v5923_info = {
.flags = 0,
};
+static const struct vc5_chip_info idt_5p49v5925_info = {
+ .model = IDT_VC5_5P49V5925,
+ .clk_fod_cnt = 4,
+ .clk_out_cnt = 5,
+ .flags = 0,
+};
+
static const struct vc5_chip_info idt_5p49v5933_info = {
.model = IDT_VC5_5P49V5933,
.clk_fod_cnt = 2,
@@ -799,18 +934,29 @@ static const struct vc5_chip_info idt_5p49v5935_info = {
.flags = VC5_HAS_INTERNAL_XTAL,
};
+static const struct vc5_chip_info idt_5p49v6901_info = {
+ .model = IDT_VC6_5P49V6901,
+ .clk_fod_cnt = 4,
+ .clk_out_cnt = 5,
+ .flags = VC5_HAS_PFD_FREQ_DBL,
+};
+
static const struct i2c_device_id vc5_id[] = {
{ "5p49v5923", .driver_data = IDT_VC5_5P49V5923 },
+ { "5p49v5925", .driver_data = IDT_VC5_5P49V5925 },
{ "5p49v5933", .driver_data = IDT_VC5_5P49V5933 },
{ "5p49v5935", .driver_data = IDT_VC5_5P49V5935 },
+ { "5p49v6901", .driver_data = IDT_VC6_5P49V6901 },
{ }
};
MODULE_DEVICE_TABLE(i2c, vc5_id);
static const struct of_device_id clk_vc5_of_match[] = {
{ .compatible = "idt,5p49v5923", .data = &idt_5p49v5923_info },
+ { .compatible = "idt,5p49v5925", .data = &idt_5p49v5925_info },
{ .compatible = "idt,5p49v5933", .data = &idt_5p49v5933_info },
{ .compatible = "idt,5p49v5935", .data = &idt_5p49v5935_info },
+ { .compatible = "idt,5p49v6901", .data = &idt_5p49v6901_info },
{ },
};
MODULE_DEVICE_TABLE(of, clk_vc5_of_match);
diff --git a/drivers/clk/clk-xgene.c b/drivers/clk/clk-xgene.c
index bc37030e38ba..4c75821a3933 100644
--- a/drivers/clk/clk-xgene.c
+++ b/drivers/clk/clk-xgene.c
@@ -192,7 +192,7 @@ static void xgene_pllclk_init(struct device_node *np, enum xgene_pll_type pll_ty
reg = of_iomap(np, 0);
if (reg == NULL) {
- pr_err("Unable to map CSR register for %s\n", np->full_name);
+ pr_err("Unable to map CSR register for %pOF\n", np);
return;
}
of_property_read_string(np, "clock-output-names", &clk_name);
@@ -409,12 +409,12 @@ static void xgene_pmdclk_init(struct device_node *np)
/* Parse the DTS register for resource */
rc = of_address_to_resource(np, 0, &res);
if (rc != 0) {
- pr_err("no DTS register for %s\n", np->full_name);
+ pr_err("no DTS register for %pOF\n", np);
return;
}
csr_reg = of_iomap(np, 0);
if (!csr_reg) {
- pr_err("Unable to map resource for %s\n", np->full_name);
+ pr_err("Unable to map resource for %pOF\n", np);
return;
}
of_property_read_string(np, "clock-output-names", &clk_name);
@@ -703,16 +703,14 @@ static void __init xgene_devclk_init(struct device_node *np)
rc = of_address_to_resource(np, i, &res);
if (rc != 0) {
if (i == 0) {
- pr_err("no DTS register for %s\n",
- np->full_name);
+ pr_err("no DTS register for %pOF\n", np);
return;
}
break;
}
map_res = of_iomap(np, i);
if (map_res == NULL) {
- pr_err("Unable to map resource %d for %s\n",
- i, np->full_name);
+ pr_err("Unable to map resource %d for %pOF\n", i, np);
goto err;
}
if (strcmp(res.name, "div-reg") == 0)
@@ -747,8 +745,7 @@ static void __init xgene_devclk_init(struct device_node *np)
pr_debug("Add %s clock\n", clk_name);
rc = of_clk_add_provider(np, of_clk_src_simple_get, clk);
if (rc != 0)
- pr_err("%s: could register provider clk %s\n", __func__,
- np->full_name);
+ pr_err("%s: could register provider clk %pOF\n", __func__, np);
return;
diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c
index fc58c52a26b4..c8d83acda006 100644
--- a/drivers/clk/clk.c
+++ b/drivers/clk/clk.c
@@ -3132,7 +3132,7 @@ int of_clk_add_provider(struct device_node *np,
mutex_lock(&of_clk_mutex);
list_add(&cp->link, &of_clk_providers);
mutex_unlock(&of_clk_mutex);
- pr_debug("Added clock from %s\n", np->full_name);
+ pr_debug("Added clock from %pOF\n", np);
ret = of_clk_set_defaults(np, true);
if (ret < 0)
@@ -3167,7 +3167,7 @@ int of_clk_add_hw_provider(struct device_node *np,
mutex_lock(&of_clk_mutex);
list_add(&cp->link, &of_clk_providers);
mutex_unlock(&of_clk_mutex);
- pr_debug("Added clk_hw provider from %s\n", np->full_name);
+ pr_debug("Added clk_hw provider from %pOF\n", np);
ret = of_clk_set_defaults(np, true);
if (ret < 0)
diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c
index bb8a77a5985f..6b2f29df3f70 100644
--- a/drivers/clk/clkdev.c
+++ b/drivers/clk/clkdev.c
@@ -77,8 +77,8 @@ static struct clk *__of_clk_get_by_name(struct device_node *np,
break;
} else if (name && index >= 0) {
if (PTR_ERR(clk) != -EPROBE_DEFER)
- pr_err("ERROR: could not get clock %s:%s(%i)\n",
- np->full_name, name ? name : "", index);
+ pr_err("ERROR: could not get clock %pOF:%s(%i)\n",
+ np, name ? name : "", index);
return clk;
}
diff --git a/drivers/clk/hisilicon/clk-hi6220.c b/drivers/clk/hisilicon/clk-hi6220.c
index 4181b6808545..e786d717f75d 100644
--- a/drivers/clk/hisilicon/clk-hi6220.c
+++ b/drivers/clk/hisilicon/clk-hi6220.c
@@ -55,9 +55,9 @@ static struct hisi_fixed_factor_clock hi6220_fixed_factor_clks[] __initdata = {
};
static struct hisi_gate_clock hi6220_separated_gate_clks_ao[] __initdata = {
- { HI6220_WDT0_PCLK, "wdt0_pclk", "clk_tcxo", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x630, 12, 0, },
- { HI6220_WDT1_PCLK, "wdt1_pclk", "clk_tcxo", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x630, 13, 0, },
- { HI6220_WDT2_PCLK, "wdt2_pclk", "clk_tcxo", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x630, 14, 0, },
+ { HI6220_WDT0_PCLK, "wdt0_pclk", "ref32k", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x630, 12, 0, },
+ { HI6220_WDT1_PCLK, "wdt1_pclk", "ref32k", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x630, 13, 0, },
+ { HI6220_WDT2_PCLK, "wdt2_pclk", "ref32k", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x630, 14, 0, },
{ HI6220_TIMER0_PCLK, "timer0_pclk", "clk_tcxo", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x630, 15, 0, },
{ HI6220_TIMER1_PCLK, "timer1_pclk", "clk_tcxo", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x630, 16, 0, },
{ HI6220_TIMER2_PCLK, "timer2_pclk", "clk_tcxo", CLK_SET_RATE_PARENT|CLK_IGNORE_UNUSED, 0x630, 17, 0, },
diff --git a/drivers/clk/imx/clk-imx51-imx53.c b/drivers/clk/imx/clk-imx51-imx53.c
index 1e3c9ea5f9dc..7bcaf270db11 100644
--- a/drivers/clk/imx/clk-imx51-imx53.c
+++ b/drivers/clk/imx/clk-imx51-imx53.c
@@ -416,10 +416,10 @@ static void __init mx51_clocks_init(struct device_node *np)
clk[IMX5_CLK_LP_APM] = imx_clk_mux("lp_apm", MXC_CCM_CCSR, 9, 1,
lp_apm_sel, ARRAY_SIZE(lp_apm_sel));
- clk[IMX5_CLK_IPU_DI0_SEL] = imx_clk_mux("ipu_di0_sel", MXC_CCM_CSCMR2, 26, 3,
- mx51_ipu_di0_sel, ARRAY_SIZE(mx51_ipu_di0_sel));
- clk[IMX5_CLK_IPU_DI1_SEL] = imx_clk_mux("ipu_di1_sel", MXC_CCM_CSCMR2, 29, 3,
- mx51_ipu_di1_sel, ARRAY_SIZE(mx51_ipu_di1_sel));
+ clk[IMX5_CLK_IPU_DI0_SEL] = imx_clk_mux_flags("ipu_di0_sel", MXC_CCM_CSCMR2, 26, 3,
+ mx51_ipu_di0_sel, ARRAY_SIZE(mx51_ipu_di0_sel), CLK_SET_RATE_PARENT);
+ clk[IMX5_CLK_IPU_DI1_SEL] = imx_clk_mux_flags("ipu_di1_sel", MXC_CCM_CSCMR2, 29, 3,
+ mx51_ipu_di1_sel, ARRAY_SIZE(mx51_ipu_di1_sel), CLK_SET_RATE_PARENT);
clk[IMX5_CLK_TVE_EXT_SEL] = imx_clk_mux_flags("tve_ext_sel", MXC_CCM_CSCMR1, 6, 1,
mx51_tve_ext_sel, ARRAY_SIZE(mx51_tve_ext_sel), CLK_SET_RATE_PARENT);
clk[IMX5_CLK_TVE_SEL] = imx_clk_mux("tve_sel", MXC_CCM_CSCMR1, 7, 1,
diff --git a/drivers/clk/imx/clk-imx6sl.c b/drivers/clk/imx/clk-imx6sl.c
index 5fd4ddac1bf1..9642cdf0fb88 100644
--- a/drivers/clk/imx/clk-imx6sl.c
+++ b/drivers/clk/imx/clk-imx6sl.c
@@ -71,7 +71,7 @@ static const char *pll5_bypass_sels[] = { "pll5", "pll5_bypass_src", };
static const char *pll6_bypass_sels[] = { "pll6", "pll6_bypass_src", };
static const char *pll7_bypass_sels[] = { "pll7", "pll7_bypass_src", };
-static struct clk_div_table clk_enet_ref_table[] = {
+static const struct clk_div_table clk_enet_ref_table[] = {
{ .val = 0, .div = 20, },
{ .val = 1, .div = 10, },
{ .val = 2, .div = 5, },
@@ -79,14 +79,14 @@ static struct clk_div_table clk_enet_ref_table[] = {
{ }
};
-static struct clk_div_table post_div_table[] = {
+static const struct clk_div_table post_div_table[] = {
{ .val = 2, .div = 1, },
{ .val = 1, .div = 2, },
{ .val = 0, .div = 4, },
{ }
};
-static struct clk_div_table video_div_table[] = {
+static const struct clk_div_table video_div_table[] = {
{ .val = 0, .div = 1, },
{ .val = 1, .div = 2, },
{ .val = 2, .div = 1, },
diff --git a/drivers/clk/imx/clk-imx6sx.c b/drivers/clk/imx/clk-imx6sx.c
index b5c96de41ccf..e6d389e333d7 100644
--- a/drivers/clk/imx/clk-imx6sx.c
+++ b/drivers/clk/imx/clk-imx6sx.c
@@ -105,7 +105,7 @@ static int const clks_init_on[] __initconst = {
IMX6SX_CLK_EPIT2,
};
-static struct clk_div_table clk_enet_ref_table[] = {
+static const struct clk_div_table clk_enet_ref_table[] = {
{ .val = 0, .div = 20, },
{ .val = 1, .div = 10, },
{ .val = 2, .div = 5, },
@@ -113,14 +113,14 @@ static struct clk_div_table clk_enet_ref_table[] = {
{ }
};
-static struct clk_div_table post_div_table[] = {
+static const struct clk_div_table post_div_table[] = {
{ .val = 2, .div = 1, },
{ .val = 1, .div = 2, },
{ .val = 0, .div = 4, },
{ }
};
-static struct clk_div_table video_div_table[] = {
+static const struct clk_div_table video_div_table[] = {
{ .val = 0, .div = 1, },
{ .val = 1, .div = 2, },
{ .val = 2, .div = 1, },
diff --git a/drivers/clk/imx/clk-imx6ul.c b/drivers/clk/imx/clk-imx6ul.c
index b4e0dff3c8c2..5e8c18afce9a 100644
--- a/drivers/clk/imx/clk-imx6ul.c
+++ b/drivers/clk/imx/clk-imx6ul.c
@@ -78,7 +78,7 @@ static int const clks_init_on[] __initconst = {
IMX6UL_CLK_MMDC_P0_FAST, IMX6UL_CLK_MMDC_P0_IPG,
};
-static struct clk_div_table clk_enet_ref_table[] = {
+static const struct clk_div_table clk_enet_ref_table[] = {
{ .val = 0, .div = 20, },
{ .val = 1, .div = 10, },
{ .val = 2, .div = 5, },
@@ -86,14 +86,14 @@ static struct clk_div_table clk_enet_ref_table[] = {
{ }
};
-static struct clk_div_table post_div_table[] = {
+static const struct clk_div_table post_div_table[] = {
{ .val = 2, .div = 1, },
{ .val = 1, .div = 2, },
{ .val = 0, .div = 4, },
{ }
};
-static struct clk_div_table video_div_table[] = {
+static const struct clk_div_table video_div_table[] = {
{ .val = 0, .div = 1, },
{ .val = 1, .div = 2, },
{ .val = 2, .div = 1, },
diff --git a/drivers/clk/imx/clk-imx7d.c b/drivers/clk/imx/clk-imx7d.c
index 3da121826b1b..2305699db467 100644
--- a/drivers/clk/imx/clk-imx7d.c
+++ b/drivers/clk/imx/clk-imx7d.c
@@ -27,7 +27,7 @@ static u32 share_count_sai2;
static u32 share_count_sai3;
static u32 share_count_nand;
-static struct clk_div_table test_div_table[] = {
+static const struct clk_div_table test_div_table[] = {
{ .val = 3, .div = 1, },
{ .val = 2, .div = 1, },
{ .val = 1, .div = 2, },
@@ -35,7 +35,7 @@ static struct clk_div_table test_div_table[] = {
{ }
};
-static struct clk_div_table post_div_table[] = {
+static const struct clk_div_table post_div_table[] = {
{ .val = 3, .div = 4, },
{ .val = 2, .div = 1, },
{ .val = 1, .div = 2, },
diff --git a/drivers/clk/imx/clk-vf610.c b/drivers/clk/imx/clk-vf610.c
index 59b1863deb88..6dae54325a91 100644
--- a/drivers/clk/imx/clk-vf610.c
+++ b/drivers/clk/imx/clk-vf610.c
@@ -102,7 +102,7 @@ static const char *ftm_ext_sels[] = {"sirc_128k", "sxosc", "fxosc_half", "audio_
static const char *ftm_fix_sels[] = { "sxosc", "ipg_bus", };
-static struct clk_div_table pll4_audio_div_table[] = {
+static const struct clk_div_table pll4_audio_div_table[] = {
{ .val = 0, .div = 1 },
{ .val = 1, .div = 2 },
{ .val = 2, .div = 6 },
diff --git a/drivers/clk/mediatek/clk-cpumux.c b/drivers/clk/mediatek/clk-cpumux.c
index edd8e6918050..16e56772d280 100644
--- a/drivers/clk/mediatek/clk-cpumux.c
+++ b/drivers/clk/mediatek/clk-cpumux.c
@@ -27,7 +27,6 @@ static inline struct mtk_clk_cpumux *to_mtk_clk_cpumux(struct clk_hw *_hw)
static u8 clk_cpumux_get_parent(struct clk_hw *hw)
{
struct mtk_clk_cpumux *mux = to_mtk_clk_cpumux(hw);
- int num_parents = clk_hw_get_num_parents(hw);
unsigned int val;
regmap_read(mux->regmap, mux->reg, &val);
@@ -35,9 +34,6 @@ static u8 clk_cpumux_get_parent(struct clk_hw *hw)
val >>= mux->shift;
val &= mux->mask;
- if (val >= num_parents)
- return -EINVAL;
-
return val;
}
@@ -98,7 +94,7 @@ int __init mtk_clk_register_cpumuxes(struct device_node *node,
regmap = syscon_node_to_regmap(node);
if (IS_ERR(regmap)) {
- pr_err("Cannot find regmap for %s: %ld\n", node->full_name,
+ pr_err("Cannot find regmap for %pOF: %ld\n", node,
PTR_ERR(regmap));
return PTR_ERR(regmap);
}
diff --git a/drivers/clk/mediatek/clk-mtk.c b/drivers/clk/mediatek/clk-mtk.c
index 0541df78141c..9c0ae4278a94 100644
--- a/drivers/clk/mediatek/clk-mtk.c
+++ b/drivers/clk/mediatek/clk-mtk.c
@@ -114,7 +114,7 @@ int mtk_clk_register_gates(struct device_node *node,
regmap = syscon_node_to_regmap(node);
if (IS_ERR(regmap)) {
- pr_err("Cannot find regmap for %s: %ld\n", node->full_name,
+ pr_err("Cannot find regmap for %pOF: %ld\n", node,
PTR_ERR(regmap));
return PTR_ERR(regmap);
}
diff --git a/drivers/clk/mediatek/reset.c b/drivers/clk/mediatek/reset.c
index 309049d41f1b..d3551d5efef2 100644
--- a/drivers/clk/mediatek/reset.c
+++ b/drivers/clk/mediatek/reset.c
@@ -72,7 +72,7 @@ void mtk_register_reset_controller(struct device_node *np,
regmap = syscon_node_to_regmap(np);
if (IS_ERR(regmap)) {
- pr_err("Cannot find regmap for %s: %ld\n", np->full_name,
+ pr_err("Cannot find regmap for %pOF: %ld\n", np,
PTR_ERR(regmap));
return;
}
diff --git a/drivers/clk/meson/Kconfig b/drivers/clk/meson/Kconfig
index 5588f75a8414..d2d0174a6eca 100644
--- a/drivers/clk/meson/Kconfig
+++ b/drivers/clk/meson/Kconfig
@@ -6,6 +6,7 @@ config COMMON_CLK_AMLOGIC
config COMMON_CLK_MESON8B
bool
depends on COMMON_CLK_AMLOGIC
+ select RESET_CONTROLLER
help
Support for the clock controller on AmLogic S802 (Meson8),
S805 (Meson8b) and S812 (Meson8m2) devices. Say Y if you
diff --git a/drivers/clk/meson/Makefile b/drivers/clk/meson/Makefile
index 83b6d9d65aa1..b139d41b25da 100644
--- a/drivers/clk/meson/Makefile
+++ b/drivers/clk/meson/Makefile
@@ -4,4 +4,4 @@
obj-$(CONFIG_COMMON_CLK_AMLOGIC) += clk-pll.o clk-cpu.o clk-mpll.o clk-audio-divider.o
obj-$(CONFIG_COMMON_CLK_MESON8B) += meson8b.o
-obj-$(CONFIG_COMMON_CLK_GXBB) += gxbb.o gxbb-aoclk.o
+obj-$(CONFIG_COMMON_CLK_GXBB) += gxbb.o gxbb-aoclk.o gxbb-aoclk-regmap.o gxbb-aoclk-32k.o
diff --git a/drivers/clk/meson/gxbb-aoclk-32k.c b/drivers/clk/meson/gxbb-aoclk-32k.c
new file mode 100644
index 000000000000..491634dbc985
--- /dev/null
+++ b/drivers/clk/meson/gxbb-aoclk-32k.c
@@ -0,0 +1,194 @@
+/*
+ * Copyright (c) 2017 BayLibre, SAS.
+ * Author: Neil Armstrong <narmstrong@baylibre.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/bitfield.h>
+#include <linux/regmap.h>
+#include "gxbb-aoclk.h"
+
+/*
+ * The AO Domain embeds a dual/divider to generate a more precise
+ * 32,768KHz clock for low-power suspend mode and CEC.
+ * ______ ______
+ * | | | |
+ * ______ | Div1 |-| Cnt1 | ______
+ * | | /|______| |______|\ | |
+ * Xtal-->| Gate |---| ______ ______ X-X--| Gate |-->
+ * |______| | \| | | |/ | |______|
+ * | | Div2 |-| Cnt2 | |
+ * | |______| |______| |
+ * |_______________________|
+ *
+ * The dividing can be switched to single or dual, with a counter
+ * for each divider to set when the switching is done.
+ * The entire dividing mechanism can be also bypassed.
+ */
+
+#define CLK_CNTL0_N1_MASK GENMASK(11, 0)
+#define CLK_CNTL0_N2_MASK GENMASK(23, 12)
+#define CLK_CNTL0_DUALDIV_EN BIT(28)
+#define CLK_CNTL0_OUT_GATE_EN BIT(30)
+#define CLK_CNTL0_IN_GATE_EN BIT(31)
+
+#define CLK_CNTL1_M1_MASK GENMASK(11, 0)
+#define CLK_CNTL1_M2_MASK GENMASK(23, 12)
+#define CLK_CNTL1_BYPASS_EN BIT(24)
+#define CLK_CNTL1_SELECT_OSC BIT(27)
+
+#define PWR_CNTL_ALT_32K_SEL GENMASK(13, 10)
+
+struct cec_32k_freq_table {
+ unsigned long parent_rate;
+ unsigned long target_rate;
+ bool dualdiv;
+ unsigned int n1;
+ unsigned int n2;
+ unsigned int m1;
+ unsigned int m2;
+};
+
+static const struct cec_32k_freq_table aoclk_cec_32k_table[] = {
+ [0] = {
+ .parent_rate = 24000000,
+ .target_rate = 32768,
+ .dualdiv = true,
+ .n1 = 733,
+ .n2 = 732,
+ .m1 = 8,
+ .m2 = 11,
+ },
+};
+
+/*
+ * If CLK_CNTL0_DUALDIV_EN == 0
+ * - will use N1 divider only
+ * If CLK_CNTL0_DUALDIV_EN == 1
+ * - hold M1 cycles of N1 divider then changes to N2
+ * - hold M2 cycles of N2 divider then changes to N1
+ * Then we can get more accurate division.
+ */
+static unsigned long aoclk_cec_32k_recalc_rate(struct clk_hw *hw,
+ unsigned long parent_rate)
+{
+ struct aoclk_cec_32k *cec_32k = to_aoclk_cec_32k(hw);
+ unsigned long n1;
+ u32 reg0, reg1;
+
+ regmap_read(cec_32k->regmap, AO_RTC_ALT_CLK_CNTL0, &reg0);
+ regmap_read(cec_32k->regmap, AO_RTC_ALT_CLK_CNTL1, &reg1);
+
+ if (reg1 & CLK_CNTL1_BYPASS_EN)
+ return parent_rate;
+
+ if (reg0 & CLK_CNTL0_DUALDIV_EN) {
+ unsigned long n2, m1, m2, f1, f2, p1, p2;
+
+ n1 = FIELD_GET(CLK_CNTL0_N1_MASK, reg0) + 1;
+ n2 = FIELD_GET(CLK_CNTL0_N2_MASK, reg0) + 1;
+
+ m1 = FIELD_GET(CLK_CNTL1_M1_MASK, reg1) + 1;
+ m2 = FIELD_GET(CLK_CNTL1_M2_MASK, reg1) + 1;
+
+ f1 = DIV_ROUND_CLOSEST(parent_rate, n1);
+ f2 = DIV_ROUND_CLOSEST(parent_rate, n2);
+
+ p1 = DIV_ROUND_CLOSEST(100000000 * m1, f1 * (m1 + m2));
+ p2 = DIV_ROUND_CLOSEST(100000000 * m2, f2 * (m1 + m2));
+
+ return DIV_ROUND_UP(100000000, p1 + p2);
+ }
+
+ n1 = FIELD_GET(CLK_CNTL0_N1_MASK, reg0) + 1;
+
+ return DIV_ROUND_CLOSEST(parent_rate, n1);
+}
+
+static const struct cec_32k_freq_table *find_cec_32k_freq(unsigned long rate,
+ unsigned long prate)
+{
+ int i;
+
+ for (i = 0 ; i < ARRAY_SIZE(aoclk_cec_32k_table) ; ++i)
+ if (aoclk_cec_32k_table[i].parent_rate == prate &&
+ aoclk_cec_32k_table[i].target_rate == rate)
+ return &aoclk_cec_32k_table[i];
+
+ return NULL;
+}
+
+static long aoclk_cec_32k_round_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long *prate)
+{
+ const struct cec_32k_freq_table *freq = find_cec_32k_freq(rate,
+ *prate);
+
+ /* If invalid return first one */
+ if (!freq)
+ return aoclk_cec_32k_table[0].target_rate;
+
+ return freq->target_rate;
+}
+
+/*
+ * From the Amlogic init procedure, the IN and OUT gates needs to be handled
+ * in the init procedure to avoid any glitches.
+ */
+
+static int aoclk_cec_32k_set_rate(struct clk_hw *hw, unsigned long rate,
+ unsigned long parent_rate)
+{
+ const struct cec_32k_freq_table *freq = find_cec_32k_freq(rate,
+ parent_rate);
+ struct aoclk_cec_32k *cec_32k = to_aoclk_cec_32k(hw);
+ u32 reg = 0;
+
+ if (!freq)
+ return -EINVAL;
+
+ /* Disable clock */
+ regmap_update_bits(cec_32k->regmap, AO_RTC_ALT_CLK_CNTL0,
+ CLK_CNTL0_IN_GATE_EN | CLK_CNTL0_OUT_GATE_EN, 0);
+
+ reg = FIELD_PREP(CLK_CNTL0_N1_MASK, freq->n1 - 1);
+ if (freq->dualdiv)
+ reg |= CLK_CNTL0_DUALDIV_EN |
+ FIELD_PREP(CLK_CNTL0_N2_MASK, freq->n2 - 1);
+
+ regmap_write(cec_32k->regmap, AO_RTC_ALT_CLK_CNTL0, reg);
+
+ reg = FIELD_PREP(CLK_CNTL1_M1_MASK, freq->m1 - 1);
+ if (freq->dualdiv)
+ reg |= FIELD_PREP(CLK_CNTL1_M2_MASK, freq->m2 - 1);
+
+ regmap_write(cec_32k->regmap, AO_RTC_ALT_CLK_CNTL1, reg);
+
+ /* Enable clock */
+ regmap_update_bits(cec_32k->regmap, AO_RTC_ALT_CLK_CNTL0,
+ CLK_CNTL0_IN_GATE_EN, CLK_CNTL0_IN_GATE_EN);
+
+ udelay(200);
+
+ regmap_update_bits(cec_32k->regmap, AO_RTC_ALT_CLK_CNTL0,
+ CLK_CNTL0_OUT_GATE_EN, CLK_CNTL0_OUT_GATE_EN);
+
+ regmap_update_bits(cec_32k->regmap, AO_CRT_CLK_CNTL1,
+ CLK_CNTL1_SELECT_OSC, CLK_CNTL1_SELECT_OSC);
+
+ /* Select 32k from XTAL */
+ regmap_update_bits(cec_32k->regmap,
+ AO_RTI_PWR_CNTL_REG0,
+ PWR_CNTL_ALT_32K_SEL,
+ FIELD_PREP(PWR_CNTL_ALT_32K_SEL, 4));
+
+ return 0;
+}
+
+const struct clk_ops meson_aoclk_cec_32k_ops = {
+ .recalc_rate = aoclk_cec_32k_recalc_rate,
+ .round_rate = aoclk_cec_32k_round_rate,
+ .set_rate = aoclk_cec_32k_set_rate,
+};
diff --git a/drivers/clk/meson/gxbb-aoclk-regmap.c b/drivers/clk/meson/gxbb-aoclk-regmap.c
new file mode 100644
index 000000000000..2515fbfa0467
--- /dev/null
+++ b/drivers/clk/meson/gxbb-aoclk-regmap.c
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2017 BayLibre, SAS.
+ * Author: Neil Armstrong <narmstrong@baylibre.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/bitfield.h>
+#include <linux/regmap.h>
+#include "gxbb-aoclk.h"
+
+static int aoclk_gate_regmap_enable(struct clk_hw *hw)
+{
+ struct aoclk_gate_regmap *gate = to_aoclk_gate_regmap(hw);
+
+ return regmap_update_bits(gate->regmap, AO_RTI_GEN_CNTL_REG0,
+ BIT(gate->bit_idx), BIT(gate->bit_idx));
+}
+
+static void aoclk_gate_regmap_disable(struct clk_hw *hw)
+{
+ struct aoclk_gate_regmap *gate = to_aoclk_gate_regmap(hw);
+
+ regmap_update_bits(gate->regmap, AO_RTI_GEN_CNTL_REG0,
+ BIT(gate->bit_idx), 0);
+}
+
+static int aoclk_gate_regmap_is_enabled(struct clk_hw *hw)
+{
+ struct aoclk_gate_regmap *gate = to_aoclk_gate_regmap(hw);
+ unsigned int val;
+ int ret;
+
+ ret = regmap_read(gate->regmap, AO_RTI_GEN_CNTL_REG0, &val);
+ if (ret)
+ return ret;
+
+ return (val & BIT(gate->bit_idx)) != 0;
+}
+
+const struct clk_ops meson_aoclk_gate_regmap_ops = {
+ .enable = aoclk_gate_regmap_enable,
+ .disable = aoclk_gate_regmap_disable,
+ .is_enabled = aoclk_gate_regmap_is_enabled,
+};
diff --git a/drivers/clk/meson/gxbb-aoclk.c b/drivers/clk/meson/gxbb-aoclk.c
index b45c5fba7e35..6c161e0a8e59 100644
--- a/drivers/clk/meson/gxbb-aoclk.c
+++ b/drivers/clk/meson/gxbb-aoclk.c
@@ -56,16 +56,20 @@
#include <linux/of_address.h>
#include <linux/platform_device.h>
#include <linux/reset-controller.h>
+#include <linux/mfd/syscon.h>
+#include <linux/regmap.h>
#include <linux/init.h>
+#include <linux/delay.h>
#include <dt-bindings/clock/gxbb-aoclkc.h>
#include <dt-bindings/reset/gxbb-aoclkc.h>
+#include "gxbb-aoclk.h"
static DEFINE_SPINLOCK(gxbb_aoclk_lock);
struct gxbb_aoclk_reset_controller {
struct reset_controller_dev reset;
unsigned int *data;
- void __iomem *base;
+ struct regmap *regmap;
};
static int gxbb_aoclk_do_reset(struct reset_controller_dev *rcdev,
@@ -74,9 +78,8 @@ static int gxbb_aoclk_do_reset(struct reset_controller_dev *rcdev,
struct gxbb_aoclk_reset_controller *reset =
container_of(rcdev, struct gxbb_aoclk_reset_controller, reset);
- writel(BIT(reset->data[id]), reset->base);
-
- return 0;
+ return regmap_write(reset->regmap, AO_RTI_GEN_CNTL_REG0,
+ BIT(reset->data[id]));
}
static const struct reset_control_ops gxbb_aoclk_reset_ops = {
@@ -84,13 +87,12 @@ static const struct reset_control_ops gxbb_aoclk_reset_ops = {
};
#define GXBB_AO_GATE(_name, _bit) \
-static struct clk_gate _name##_ao = { \
- .reg = (void __iomem *)0, \
+static struct aoclk_gate_regmap _name##_ao = { \
.bit_idx = (_bit), \
.lock = &gxbb_aoclk_lock, \
.hw.init = &(struct clk_init_data) { \
.name = #_name "_ao", \
- .ops = &clk_gate_ops, \
+ .ops = &meson_aoclk_gate_regmap_ops, \
.parent_names = (const char *[]){ "clk81" }, \
.num_parents = 1, \
.flags = (CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED), \
@@ -104,6 +106,17 @@ GXBB_AO_GATE(uart1, 3);
GXBB_AO_GATE(uart2, 5);
GXBB_AO_GATE(ir_blaster, 6);
+static struct aoclk_cec_32k cec_32k_ao = {
+ .lock = &gxbb_aoclk_lock,
+ .hw.init = &(struct clk_init_data) {
+ .name = "cec_32k_ao",
+ .ops = &meson_aoclk_cec_32k_ops,
+ .parent_names = (const char *[]){ "xtal" },
+ .num_parents = 1,
+ .flags = CLK_IGNORE_UNUSED,
+ },
+};
+
static unsigned int gxbb_aoclk_reset[] = {
[RESET_AO_REMOTE] = 16,
[RESET_AO_I2C_MASTER] = 18,
@@ -113,7 +126,7 @@ static unsigned int gxbb_aoclk_reset[] = {
[RESET_AO_IR_BLASTER] = 23,
};
-static struct clk_gate *gxbb_aoclk_gate[] = {
+static struct aoclk_gate_regmap *gxbb_aoclk_gate[] = {
[CLKID_AO_REMOTE] = &remote_ao,
[CLKID_AO_I2C_MASTER] = &i2c_master_ao,
[CLKID_AO_I2C_SLAVE] = &i2c_slave_ao,
@@ -130,30 +143,30 @@ static struct clk_hw_onecell_data gxbb_aoclk_onecell_data = {
[CLKID_AO_UART1] = &uart1_ao.hw,
[CLKID_AO_UART2] = &uart2_ao.hw,
[CLKID_AO_IR_BLASTER] = &ir_blaster_ao.hw,
+ [CLKID_AO_CEC_32K] = &cec_32k_ao.hw,
},
- .num = ARRAY_SIZE(gxbb_aoclk_gate),
+ .num = 7,
};
static int gxbb_aoclkc_probe(struct platform_device *pdev)
{
- struct resource *res;
- void __iomem *base;
- int ret, clkid;
- struct device *dev = &pdev->dev;
struct gxbb_aoclk_reset_controller *rstc;
+ struct device *dev = &pdev->dev;
+ struct regmap *regmap;
+ int ret, clkid;
rstc = devm_kzalloc(dev, sizeof(*rstc), GFP_KERNEL);
if (!rstc)
return -ENOMEM;
- /* Generic clocks */
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
- base = devm_ioremap_resource(dev, res);
- if (IS_ERR(base))
- return PTR_ERR(base);
+ regmap = syscon_node_to_regmap(of_get_parent(dev->of_node));
+ if (IS_ERR(regmap)) {
+ dev_err(dev, "failed to get regmap\n");
+ return -ENODEV;
+ }
/* Reset Controller */
- rstc->base = base;
+ rstc->regmap = regmap;
rstc->data = gxbb_aoclk_reset;
rstc->reset.ops = &gxbb_aoclk_reset_ops;
rstc->reset.nr_resets = ARRAY_SIZE(gxbb_aoclk_reset);
@@ -161,10 +174,10 @@ static int gxbb_aoclkc_probe(struct platform_device *pdev)
ret = devm_reset_controller_register(dev, &rstc->reset);
/*
- * Populate base address and register all clks
+ * Populate regmap and register all clks
*/
- for (clkid = 0; clkid < gxbb_aoclk_onecell_data.num; clkid++) {
- gxbb_aoclk_gate[clkid]->reg = base;
+ for (clkid = 0; clkid < ARRAY_SIZE(gxbb_aoclk_gate); clkid++) {
+ gxbb_aoclk_gate[clkid]->regmap = regmap;
ret = devm_clk_hw_register(dev,
gxbb_aoclk_onecell_data.hws[clkid]);
@@ -172,12 +185,18 @@ static int gxbb_aoclkc_probe(struct platform_device *pdev)
return ret;
}
+ /* Specific clocks */
+ cec_32k_ao.regmap = regmap;
+ ret = devm_clk_hw_register(dev, &cec_32k_ao.hw);
+ if (ret)
+ return ret;
+
return of_clk_add_hw_provider(dev->of_node, of_clk_hw_onecell_get,
&gxbb_aoclk_onecell_data);
}
static const struct of_device_id gxbb_aoclkc_match_table[] = {
- { .compatible = "amlogic,gxbb-aoclkc" },
+ { .compatible = "amlogic,meson-gx-aoclkc" },
{ }
};
diff --git a/drivers/clk/meson/gxbb-aoclk.h b/drivers/clk/meson/gxbb-aoclk.h
new file mode 100644
index 000000000000..e8604c8f7eee
--- /dev/null
+++ b/drivers/clk/meson/gxbb-aoclk.h
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2017 BayLibre, SAS
+ * Author: Neil Armstrong <narmstrong@baylibre.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#ifndef __GXBB_AOCLKC_H
+#define __GXBB_AOCLKC_H
+
+/* AO Configuration Clock registers offsets */
+#define AO_RTI_PWR_CNTL_REG1 0x0c
+#define AO_RTI_PWR_CNTL_REG0 0x10
+#define AO_RTI_GEN_CNTL_REG0 0x40
+#define AO_OSCIN_CNTL 0x58
+#define AO_CRT_CLK_CNTL1 0x68
+#define AO_RTC_ALT_CLK_CNTL0 0x94
+#define AO_RTC_ALT_CLK_CNTL1 0x98
+
+struct aoclk_gate_regmap {
+ struct clk_hw hw;
+ unsigned bit_idx;
+ struct regmap *regmap;
+ spinlock_t *lock;
+};
+
+#define to_aoclk_gate_regmap(_hw) \
+ container_of(_hw, struct aoclk_gate_regmap, hw)
+
+extern const struct clk_ops meson_aoclk_gate_regmap_ops;
+
+struct aoclk_cec_32k {
+ struct clk_hw hw;
+ struct regmap *regmap;
+ spinlock_t *lock;
+};
+
+#define to_aoclk_cec_32k(_hw) container_of(_hw, struct aoclk_cec_32k, hw)
+
+extern const struct clk_ops meson_aoclk_cec_32k_ops;
+
+#endif /* __GXBB_AOCLKC_H */
diff --git a/drivers/clk/meson/gxbb.c b/drivers/clk/meson/gxbb.c
index 964489b39f6a..b2d1e8ed7152 100644
--- a/drivers/clk/meson/gxbb.c
+++ b/drivers/clk/meson/gxbb.c
@@ -850,13 +850,14 @@ static struct meson_clk_audio_divider gxbb_cts_amclk_div = {
.shift = 0,
.width = 8,
},
+ .flags = CLK_DIVIDER_ROUND_CLOSEST,
.lock = &clk_lock,
.hw.init = &(struct clk_init_data){
.name = "cts_amclk_div",
.ops = &meson_clk_audio_divider_ops,
.parent_names = (const char *[]){ "cts_amclk_sel" },
.num_parents = 1,
- .flags = CLK_SET_RATE_PARENT | CLK_DIVIDER_ROUND_CLOSEST,
+ .flags = CLK_SET_RATE_PARENT,
},
};
@@ -880,7 +881,7 @@ static struct clk_mux gxbb_cts_mclk_i958_sel = {
/* Default parent unknown (register reset value: 0) */
.table = (u32[]){ 1, 2, 3 },
.lock = &clk_lock,
- .hw.init = &(struct clk_init_data){
+ .hw.init = &(struct clk_init_data) {
.name = "cts_mclk_i958_sel",
.ops = &clk_mux_ops,
.parent_names = (const char *[]){ "mpll0", "mpll1", "mpll2" },
@@ -894,12 +895,13 @@ static struct clk_divider gxbb_cts_mclk_i958_div = {
.shift = 16,
.width = 8,
.lock = &clk_lock,
- .hw.init = &(struct clk_init_data){
+ .flags = CLK_DIVIDER_ROUND_CLOSEST,
+ .hw.init = &(struct clk_init_data) {
.name = "cts_mclk_i958_div",
.ops = &clk_divider_ops,
.parent_names = (const char *[]){ "cts_mclk_i958_sel" },
.num_parents = 1,
- .flags = CLK_SET_RATE_PARENT | CLK_DIVIDER_ROUND_CLOSEST,
+ .flags = CLK_SET_RATE_PARENT,
},
};
@@ -979,6 +981,156 @@ static struct clk_mux gxbb_32k_clk_sel = {
},
};
+static const char * const gxbb_sd_emmc_clk0_parent_names[] = {
+ "xtal", "fclk_div2", "fclk_div3", "fclk_div5", "fclk_div7",
+
+ /*
+ * Following these parent clocks, we should also have had mpll2, mpll3
+ * and gp0_pll but these clocks are too precious to be used here. All
+ * the necessary rates for MMC and NAND operation can be acheived using
+ * xtal or fclk_div clocks
+ */
+};
+
+/* SDIO clock */
+static struct clk_mux gxbb_sd_emmc_a_clk0_sel = {
+ .reg = (void *)HHI_SD_EMMC_CLK_CNTL,
+ .mask = 0x7,
+ .shift = 9,
+ .lock = &clk_lock,
+ .hw.init = &(struct clk_init_data) {
+ .name = "sd_emmc_a_clk0_sel",
+ .ops = &clk_mux_ops,
+ .parent_names = gxbb_sd_emmc_clk0_parent_names,
+ .num_parents = ARRAY_SIZE(gxbb_sd_emmc_clk0_parent_names),
+ .flags = CLK_SET_RATE_PARENT,
+ },
+};
+
+static struct clk_divider gxbb_sd_emmc_a_clk0_div = {
+ .reg = (void *)HHI_SD_EMMC_CLK_CNTL,
+ .shift = 0,
+ .width = 7,
+ .lock = &clk_lock,
+ .flags = CLK_DIVIDER_ROUND_CLOSEST,
+ .hw.init = &(struct clk_init_data) {
+ .name = "sd_emmc_a_clk0_div",
+ .ops = &clk_divider_ops,
+ .parent_names = (const char *[]){ "sd_emmc_a_clk0_sel" },
+ .num_parents = 1,
+ .flags = CLK_SET_RATE_PARENT,
+ },
+};
+
+static struct clk_gate gxbb_sd_emmc_a_clk0 = {
+ .reg = (void *)HHI_SD_EMMC_CLK_CNTL,
+ .bit_idx = 7,
+ .lock = &clk_lock,
+ .hw.init = &(struct clk_init_data){
+ .name = "sd_emmc_a_clk0",
+ .ops = &clk_gate_ops,
+ .parent_names = (const char *[]){ "sd_emmc_a_clk0_div" },
+ .num_parents = 1,
+
+ /*
+ * FIXME:
+ * We need CLK_IGNORE_UNUSED because mmc DT node point to xtal
+ * instead of this clock. CCF would gate this on boot, killing
+ * the mmc controller. Please remove this flag once DT properly
+ * point to this clock instead of xtal
+ *
+ * Same goes for emmc B and C clocks
+ */
+ .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
+ },
+};
+
+/* SDcard clock */
+static struct clk_mux gxbb_sd_emmc_b_clk0_sel = {
+ .reg = (void *)HHI_SD_EMMC_CLK_CNTL,
+ .mask = 0x7,
+ .shift = 25,
+ .lock = &clk_lock,
+ .hw.init = &(struct clk_init_data) {
+ .name = "sd_emmc_b_clk0_sel",
+ .ops = &clk_mux_ops,
+ .parent_names = gxbb_sd_emmc_clk0_parent_names,
+ .num_parents = ARRAY_SIZE(gxbb_sd_emmc_clk0_parent_names),
+ .flags = CLK_SET_RATE_PARENT,
+ },
+};
+
+static struct clk_divider gxbb_sd_emmc_b_clk0_div = {
+ .reg = (void *)HHI_SD_EMMC_CLK_CNTL,
+ .shift = 16,
+ .width = 7,
+ .lock = &clk_lock,
+ .flags = CLK_DIVIDER_ROUND_CLOSEST,
+ .hw.init = &(struct clk_init_data) {
+ .name = "sd_emmc_b_clk0_div",
+ .ops = &clk_divider_ops,
+ .parent_names = (const char *[]){ "sd_emmc_b_clk0_sel" },
+ .num_parents = 1,
+ .flags = CLK_SET_RATE_PARENT,
+ },
+};
+
+static struct clk_gate gxbb_sd_emmc_b_clk0 = {
+ .reg = (void *)HHI_SD_EMMC_CLK_CNTL,
+ .bit_idx = 23,
+ .lock = &clk_lock,
+ .hw.init = &(struct clk_init_data){
+ .name = "sd_emmc_b_clk0",
+ .ops = &clk_gate_ops,
+ .parent_names = (const char *[]){ "sd_emmc_b_clk0_div" },
+ .num_parents = 1,
+ .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
+ },
+};
+
+/* EMMC/NAND clock */
+static struct clk_mux gxbb_sd_emmc_c_clk0_sel = {
+ .reg = (void *)HHI_NAND_CLK_CNTL,
+ .mask = 0x7,
+ .shift = 9,
+ .lock = &clk_lock,
+ .hw.init = &(struct clk_init_data) {
+ .name = "sd_emmc_c_clk0_sel",
+ .ops = &clk_mux_ops,
+ .parent_names = gxbb_sd_emmc_clk0_parent_names,
+ .num_parents = ARRAY_SIZE(gxbb_sd_emmc_clk0_parent_names),
+ .flags = CLK_SET_RATE_PARENT,
+ },
+};
+
+static struct clk_divider gxbb_sd_emmc_c_clk0_div = {
+ .reg = (void *)HHI_NAND_CLK_CNTL,
+ .shift = 0,
+ .width = 7,
+ .lock = &clk_lock,
+ .flags = CLK_DIVIDER_ROUND_CLOSEST,
+ .hw.init = &(struct clk_init_data) {
+ .name = "sd_emmc_c_clk0_div",
+ .ops = &clk_divider_ops,
+ .parent_names = (const char *[]){ "sd_emmc_c_clk0_sel" },
+ .num_parents = 1,
+ .flags = CLK_SET_RATE_PARENT,
+ },
+};
+
+static struct clk_gate gxbb_sd_emmc_c_clk0 = {
+ .reg = (void *)HHI_NAND_CLK_CNTL,
+ .bit_idx = 7,
+ .lock = &clk_lock,
+ .hw.init = &(struct clk_init_data){
+ .name = "sd_emmc_c_clk0",
+ .ops = &clk_gate_ops,
+ .parent_names = (const char *[]){ "sd_emmc_c_clk0_div" },
+ .num_parents = 1,
+ .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
+ },
+};
+
/* Everything Else (EE) domain gates */
static MESON_GATE(gxbb_ddr, HHI_GCLK_MPEG0, 0);
static MESON_GATE(gxbb_dos, HHI_GCLK_MPEG0, 1);
@@ -1188,6 +1340,15 @@ static struct clk_hw_onecell_data gxbb_hw_onecell_data = {
[CLKID_32K_CLK] = &gxbb_32k_clk.hw,
[CLKID_32K_CLK_SEL] = &gxbb_32k_clk_sel.hw,
[CLKID_32K_CLK_DIV] = &gxbb_32k_clk_div.hw,
+ [CLKID_SD_EMMC_A_CLK0_SEL] = &gxbb_sd_emmc_a_clk0_sel.hw,
+ [CLKID_SD_EMMC_A_CLK0_DIV] = &gxbb_sd_emmc_a_clk0_div.hw,
+ [CLKID_SD_EMMC_A_CLK0] = &gxbb_sd_emmc_a_clk0.hw,
+ [CLKID_SD_EMMC_B_CLK0_SEL] = &gxbb_sd_emmc_b_clk0_sel.hw,
+ [CLKID_SD_EMMC_B_CLK0_DIV] = &gxbb_sd_emmc_b_clk0_div.hw,
+ [CLKID_SD_EMMC_B_CLK0] = &gxbb_sd_emmc_b_clk0.hw,
+ [CLKID_SD_EMMC_C_CLK0_SEL] = &gxbb_sd_emmc_c_clk0_sel.hw,
+ [CLKID_SD_EMMC_C_CLK0_DIV] = &gxbb_sd_emmc_c_clk0_div.hw,
+ [CLKID_SD_EMMC_C_CLK0] = &gxbb_sd_emmc_c_clk0.hw,
[NR_CLKS] = NULL,
},
.num = NR_CLKS,
@@ -1311,6 +1472,15 @@ static struct clk_hw_onecell_data gxl_hw_onecell_data = {
[CLKID_32K_CLK] = &gxbb_32k_clk.hw,
[CLKID_32K_CLK_SEL] = &gxbb_32k_clk_sel.hw,
[CLKID_32K_CLK_DIV] = &gxbb_32k_clk_div.hw,
+ [CLKID_SD_EMMC_A_CLK0_SEL] = &gxbb_sd_emmc_a_clk0_sel.hw,
+ [CLKID_SD_EMMC_A_CLK0_DIV] = &gxbb_sd_emmc_a_clk0_div.hw,
+ [CLKID_SD_EMMC_A_CLK0] = &gxbb_sd_emmc_a_clk0.hw,
+ [CLKID_SD_EMMC_B_CLK0_SEL] = &gxbb_sd_emmc_b_clk0_sel.hw,
+ [CLKID_SD_EMMC_B_CLK0_DIV] = &gxbb_sd_emmc_b_clk0_div.hw,
+ [CLKID_SD_EMMC_B_CLK0] = &gxbb_sd_emmc_b_clk0.hw,
+ [CLKID_SD_EMMC_C_CLK0_SEL] = &gxbb_sd_emmc_c_clk0_sel.hw,
+ [CLKID_SD_EMMC_C_CLK0_DIV] = &gxbb_sd_emmc_c_clk0_div.hw,
+ [CLKID_SD_EMMC_C_CLK0] = &gxbb_sd_emmc_c_clk0.hw,
[NR_CLKS] = NULL,
},
.num = NR_CLKS,
@@ -1427,6 +1597,9 @@ static struct clk_gate *const gxbb_clk_gates[] = {
&gxbb_cts_amclk,
&gxbb_cts_mclk_i958,
&gxbb_32k_clk,
+ &gxbb_sd_emmc_a_clk0,
+ &gxbb_sd_emmc_b_clk0,
+ &gxbb_sd_emmc_c_clk0,
};
static struct clk_mux *const gxbb_clk_muxes[] = {
@@ -1439,6 +1612,9 @@ static struct clk_mux *const gxbb_clk_muxes[] = {
&gxbb_cts_mclk_i958_sel,
&gxbb_cts_i958,
&gxbb_32k_clk_sel,
+ &gxbb_sd_emmc_a_clk0_sel,
+ &gxbb_sd_emmc_b_clk0_sel,
+ &gxbb_sd_emmc_c_clk0_sel,
};
static struct clk_divider *const gxbb_clk_dividers[] = {
@@ -1448,6 +1624,9 @@ static struct clk_divider *const gxbb_clk_dividers[] = {
&gxbb_mali_1_div,
&gxbb_cts_mclk_i958_div,
&gxbb_32k_clk_div,
+ &gxbb_sd_emmc_a_clk0_div,
+ &gxbb_sd_emmc_b_clk0_div,
+ &gxbb_sd_emmc_c_clk0_div,
};
static struct meson_clk_audio_divider *const gxbb_audio_dividers[] = {
diff --git a/drivers/clk/meson/meson8b.c b/drivers/clk/meson/meson8b.c
index cb60a516ca82..20ab7190d328 100644
--- a/drivers/clk/meson/meson8b.c
+++ b/drivers/clk/meson/meson8b.c
@@ -25,6 +25,8 @@
#include <linux/clk-provider.h>
#include <linux/of_address.h>
#include <linux/platform_device.h>
+#include <linux/reset-controller.h>
+#include <linux/slab.h>
#include <linux/init.h>
#include "clkc.h"
@@ -32,6 +34,13 @@
static DEFINE_SPINLOCK(clk_lock);
+static void __iomem *clk_base;
+
+struct meson8b_clk_reset {
+ struct reset_controller_dev reset;
+ void __iomem *base;
+};
+
static const struct pll_rate_table sys_pll_rate_table[] = {
PLL_RATE(312000000, 52, 1, 2),
PLL_RATE(336000000, 56, 1, 2),
@@ -696,20 +705,114 @@ static struct clk_divider *const meson8b_clk_dividers[] = {
&meson8b_mpeg_clk_div,
};
+static const struct meson8b_clk_reset_line {
+ u32 reg;
+ u8 bit_idx;
+} meson8b_clk_reset_bits[] = {
+ [CLKC_RESET_L2_CACHE_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 30
+ },
+ [CLKC_RESET_AXI_64_TO_128_BRIDGE_A5_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 29
+ },
+ [CLKC_RESET_SCU_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 28
+ },
+ [CLKC_RESET_CPU3_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 27
+ },
+ [CLKC_RESET_CPU2_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 26
+ },
+ [CLKC_RESET_CPU1_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 25
+ },
+ [CLKC_RESET_CPU0_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 24
+ },
+ [CLKC_RESET_A5_GLOBAL_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 18
+ },
+ [CLKC_RESET_A5_AXI_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 17
+ },
+ [CLKC_RESET_A5_ABP_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL0, .bit_idx = 16
+ },
+ [CLKC_RESET_AXI_64_TO_128_BRIDGE_MMC_SOFT_RESET] = {
+ .reg = HHI_SYS_CPU_CLK_CNTL1, .bit_idx = 30
+ },
+ [CLKC_RESET_VID_CLK_CNTL_SOFT_RESET] = {
+ .reg = HHI_VID_CLK_CNTL, .bit_idx = 15
+ },
+ [CLKC_RESET_VID_DIVIDER_CNTL_SOFT_RESET_POST] = {
+ .reg = HHI_VID_DIVIDER_CNTL, .bit_idx = 7
+ },
+ [CLKC_RESET_VID_DIVIDER_CNTL_SOFT_RESET_PRE] = {
+ .reg = HHI_VID_DIVIDER_CNTL, .bit_idx = 3
+ },
+ [CLKC_RESET_VID_DIVIDER_CNTL_RESET_N_POST] = {
+ .reg = HHI_VID_DIVIDER_CNTL, .bit_idx = 1
+ },
+ [CLKC_RESET_VID_DIVIDER_CNTL_RESET_N_PRE] = {
+ .reg = HHI_VID_DIVIDER_CNTL, .bit_idx = 0
+ },
+};
+
+static int meson8b_clk_reset_update(struct reset_controller_dev *rcdev,
+ unsigned long id, bool assert)
+{
+ struct meson8b_clk_reset *meson8b_clk_reset =
+ container_of(rcdev, struct meson8b_clk_reset, reset);
+ unsigned long flags;
+ const struct meson8b_clk_reset_line *reset;
+ u32 val;
+
+ if (id >= ARRAY_SIZE(meson8b_clk_reset_bits))
+ return -EINVAL;
+
+ reset = &meson8b_clk_reset_bits[id];
+
+ spin_lock_irqsave(&clk_lock, flags);
+
+ val = readl(meson8b_clk_reset->base + reset->reg);
+ if (assert)
+ val |= BIT(reset->bit_idx);
+ else
+ val &= ~BIT(reset->bit_idx);
+ writel(val, meson8b_clk_reset->base + reset->reg);
+
+ spin_unlock_irqrestore(&clk_lock, flags);
+
+ return 0;
+}
+
+static int meson8b_clk_reset_assert(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+ return meson8b_clk_reset_update(rcdev, id, true);
+}
+
+static int meson8b_clk_reset_deassert(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+ return meson8b_clk_reset_update(rcdev, id, false);
+}
+
+static const struct reset_control_ops meson8b_clk_reset_ops = {
+ .assert = meson8b_clk_reset_assert,
+ .deassert = meson8b_clk_reset_deassert,
+};
+
static int meson8b_clkc_probe(struct platform_device *pdev)
{
- void __iomem *clk_base;
int ret, clkid, i;
struct clk_hw *parent_hw;
struct clk *parent_clk;
struct device *dev = &pdev->dev;
- /* Generic clocks and PLLs */
- clk_base = of_iomap(dev->of_node, 1);
- if (!clk_base) {
- pr_err("%s: Unable to map clk base\n", __func__);
+ if (!clk_base)
return -ENXIO;
- }
/* Populate base address for PLLs */
for (i = 0; i < ARRAY_SIZE(meson8b_clk_plls); i++)
@@ -749,7 +852,7 @@ static int meson8b_clkc_probe(struct platform_device *pdev)
/* FIXME convert to devm_clk_register */
ret = devm_clk_hw_register(dev, meson8b_hw_onecell_data.hws[clkid]);
if (ret)
- goto iounmap;
+ return ret;
}
/*
@@ -772,15 +875,11 @@ static int meson8b_clkc_probe(struct platform_device *pdev)
if (ret) {
pr_err("%s: failed to register clock notifier for cpu_clk\n",
__func__);
- goto iounmap;
+ return ret;
}
return of_clk_add_hw_provider(dev->of_node, of_clk_hw_onecell_get,
&meson8b_hw_onecell_data);
-
-iounmap:
- iounmap(clk_base);
- return ret;
}
static const struct of_device_id meson8b_clkc_match_table[] = {
@@ -799,3 +898,39 @@ static struct platform_driver meson8b_driver = {
};
builtin_platform_driver(meson8b_driver);
+
+static void __init meson8b_clkc_reset_init(struct device_node *np)
+{
+ struct meson8b_clk_reset *rstc;
+ int ret;
+
+ /* Generic clocks, PLLs and some of the reset-bits */
+ clk_base = of_iomap(np, 1);
+ if (!clk_base) {
+ pr_err("%s: Unable to map clk base\n", __func__);
+ return;
+ }
+
+ rstc = kzalloc(sizeof(*rstc), GFP_KERNEL);
+ if (!rstc)
+ return;
+
+ /* Reset Controller */
+ rstc->base = clk_base;
+ rstc->reset.ops = &meson8b_clk_reset_ops;
+ rstc->reset.nr_resets = ARRAY_SIZE(meson8b_clk_reset_bits);
+ rstc->reset.of_node = np;
+ ret = reset_controller_register(&rstc->reset);
+ if (ret) {
+ pr_err("%s: Failed to register clkc reset controller: %d\n",
+ __func__, ret);
+ return;
+ }
+}
+
+CLK_OF_DECLARE_DRIVER(meson8_clkc, "amlogic,meson8-clkc",
+ meson8b_clkc_reset_init);
+CLK_OF_DECLARE_DRIVER(meson8b_clkc, "amlogic,meson8b-clkc",
+ meson8b_clkc_reset_init);
+CLK_OF_DECLARE_DRIVER(meson8m2_clkc, "amlogic,meson8m2-clkc",
+ meson8b_clkc_reset_init);
diff --git a/drivers/clk/meson/meson8b.h b/drivers/clk/meson/meson8b.h
index c139bb3273ca..2eaf8a52e7dd 100644
--- a/drivers/clk/meson/meson8b.h
+++ b/drivers/clk/meson/meson8b.h
@@ -37,6 +37,9 @@
#define HHI_GCLK_AO 0x154 /* 0x55 offset in data sheet */
#define HHI_SYS_CPU_CLK_CNTL1 0x15c /* 0x57 offset in data sheet */
#define HHI_MPEG_CLK_CNTL 0x174 /* 0x5d offset in data sheet */
+#define HHI_VID_CLK_CNTL 0x17c /* 0x5f offset in data sheet */
+#define HHI_VID_DIVIDER_CNTL 0x198 /* 0x66 offset in data sheet */
+#define HHI_SYS_CPU_CLK_CNTL0 0x19c /* 0x67 offset in data sheet */
#define HHI_MPLL_CNTL 0x280 /* 0xa0 offset in data sheet */
#define HHI_SYS_PLL_CNTL 0x300 /* 0xc0 offset in data sheet */
#define HHI_VID_PLL_CNTL 0x320 /* 0xc8 offset in data sheet */
@@ -68,7 +71,11 @@
#define CLK_NR_CLKS 96
-/* include the CLKIDs that have been made part of the stable DT binding */
+/*
+ * include the CLKID and RESETID that have
+ * been made part of the stable DT binding
+ */
#include <dt-bindings/clock/meson8b-clkc.h>
+#include <dt-bindings/reset/amlogic,meson8b-clkc-reset.h>
#endif /* __MESON8B_H */
diff --git a/drivers/clk/mmp/clk.c b/drivers/clk/mmp/clk.c
index 61893fe73251..089927e4cda2 100644
--- a/drivers/clk/mmp/clk.c
+++ b/drivers/clk/mmp/clk.c
@@ -9,7 +9,7 @@
void mmp_clk_init(struct device_node *np, struct mmp_clk_unit *unit,
int nr_clks)
{
- static struct clk **clk_table;
+ struct clk **clk_table;
clk_table = kcalloc(nr_clks, sizeof(struct clk *), GFP_KERNEL);
if (!clk_table)
diff --git a/drivers/clk/nxp/clk-lpc32xx.c b/drivers/clk/nxp/clk-lpc32xx.c
index 5b98ff9076f3..7b359afd620e 100644
--- a/drivers/clk/nxp/clk-lpc32xx.c
+++ b/drivers/clk/nxp/clk-lpc32xx.c
@@ -885,7 +885,7 @@ static const struct clk_ops clk_usb_i2c_ops = {
.recalc_rate = clk_usb_i2c_recalc_rate,
};
-static int clk_gate_enable(struct clk_hw *hw)
+static int lpc32xx_clk_gate_enable(struct clk_hw *hw)
{
struct lpc32xx_clk_gate *clk = to_lpc32xx_gate(hw);
u32 mask = BIT(clk->bit_idx);
@@ -894,7 +894,7 @@ static int clk_gate_enable(struct clk_hw *hw)
return regmap_update_bits(clk_regmap, clk->reg, mask, val);
}
-static void clk_gate_disable(struct clk_hw *hw)
+static void lpc32xx_clk_gate_disable(struct clk_hw *hw)
{
struct lpc32xx_clk_gate *clk = to_lpc32xx_gate(hw);
u32 mask = BIT(clk->bit_idx);
@@ -903,7 +903,7 @@ static void clk_gate_disable(struct clk_hw *hw)
regmap_update_bits(clk_regmap, clk->reg, mask, val);
}
-static int clk_gate_is_enabled(struct clk_hw *hw)
+static int lpc32xx_clk_gate_is_enabled(struct clk_hw *hw)
{
struct lpc32xx_clk_gate *clk = to_lpc32xx_gate(hw);
u32 val;
@@ -916,9 +916,9 @@ static int clk_gate_is_enabled(struct clk_hw *hw)
}
static const struct clk_ops lpc32xx_clk_gate_ops = {
- .enable = clk_gate_enable,
- .disable = clk_gate_disable,
- .is_enabled = clk_gate_is_enabled,
+ .enable = lpc32xx_clk_gate_enable,
+ .disable = lpc32xx_clk_gate_disable,
+ .is_enabled = lpc32xx_clk_gate_is_enabled,
};
#define div_mask(width) ((1 << (width)) - 1)
diff --git a/drivers/clk/qcom/clk-smd-rpm.c b/drivers/clk/qcom/clk-smd-rpm.c
index d990fe44aef3..cc03d5508627 100644
--- a/drivers/clk/qcom/clk-smd-rpm.c
+++ b/drivers/clk/qcom/clk-smd-rpm.c
@@ -412,8 +412,6 @@ static const struct clk_ops clk_smd_rpm_ops = {
static const struct clk_ops clk_smd_rpm_branch_ops = {
.prepare = clk_smd_rpm_prepare,
.unprepare = clk_smd_rpm_unprepare,
- .round_rate = clk_smd_rpm_round_rate,
- .recalc_rate = clk_smd_rpm_recalc_rate,
};
/* msm8916 */
diff --git a/drivers/clk/qcom/gcc-msm8916.c b/drivers/clk/qcom/gcc-msm8916.c
index 2cfe7000fc60..3410ee68d4bc 100644
--- a/drivers/clk/qcom/gcc-msm8916.c
+++ b/drivers/clk/qcom/gcc-msm8916.c
@@ -1176,7 +1176,7 @@ static struct clk_rcg2 bimc_gpu_clk_src = {
.parent_names = gcc_xo_gpll0_bimc,
.num_parents = 3,
.flags = CLK_GET_RATE_NOCACHE,
- .ops = &clk_rcg2_shared_ops,
+ .ops = &clk_rcg2_ops,
},
};
diff --git a/drivers/clk/qcom/gcc-msm8996.c b/drivers/clk/qcom/gcc-msm8996.c
index 8abc200d4fd3..7ddec886fcd3 100644
--- a/drivers/clk/qcom/gcc-msm8996.c
+++ b/drivers/clk/qcom/gcc-msm8996.c
@@ -2730,6 +2730,32 @@ static struct clk_fixed_factor ufs_rx_cfg_clk_src = {
},
};
+static struct clk_branch gcc_hlos1_vote_lpass_core_smmu_clk = {
+ .halt_reg = 0x7d010,
+ .halt_check = BRANCH_HALT_VOTED,
+ .clkr = {
+ .enable_reg = 0x7d010,
+ .enable_mask = BIT(0),
+ .hw.init = &(struct clk_init_data){
+ .name = "hlos1_vote_lpass_core_smmu_clk",
+ .ops = &clk_branch2_ops,
+ },
+ },
+};
+
+static struct clk_branch gcc_hlos1_vote_lpass_adsp_smmu_clk = {
+ .halt_reg = 0x7d014,
+ .halt_check = BRANCH_HALT_VOTED,
+ .clkr = {
+ .enable_reg = 0x7d014,
+ .enable_mask = BIT(0),
+ .hw.init = &(struct clk_init_data){
+ .name = "hlos1_vote_lpass_adsp_smmu_clk",
+ .ops = &clk_branch2_ops,
+ },
+ },
+};
+
static struct clk_branch gcc_ufs_rx_cfg_clk = {
.halt_reg = 0x75014,
.clkr = {
@@ -3307,6 +3333,8 @@ static struct clk_regmap *gcc_msm8996_clocks[] = {
[GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
[GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
[GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
+ [GCC_HLOS1_VOTE_LPASS_CORE_SMMU_CLK] = &gcc_hlos1_vote_lpass_core_smmu_clk.clkr,
+ [GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK] = &gcc_hlos1_vote_lpass_adsp_smmu_clk.clkr,
[GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
[GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
[GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
diff --git a/drivers/clk/renesas/Kconfig b/drivers/clk/renesas/Kconfig
index 78d1df9112ba..acbb38151ba1 100644
--- a/drivers/clk/renesas/Kconfig
+++ b/drivers/clk/renesas/Kconfig
@@ -15,6 +15,7 @@ config CLK_RENESAS
select CLK_R8A7794 if ARCH_R8A7794
select CLK_R8A7795 if ARCH_R8A7795
select CLK_R8A7796 if ARCH_R8A7796
+ select CLK_R8A77995 if ARCH_R8A77995
select CLK_SH73A0 if ARCH_SH73A0
if CLK_RENESAS
@@ -34,94 +35,103 @@ config CLK_EMEV2
bool "Emma Mobile EV2 clock support" if COMPILE_TEST
config CLK_RZA1
- bool
+ bool "RZ/A1H clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSTP
config CLK_R8A73A4
- bool
+ bool "R-Mobile APE6 clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSTP
select CLK_RENESAS_DIV6
config CLK_R8A7740
- bool
+ bool "R-Mobile A1 clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSTP
select CLK_RENESAS_DIV6
config CLK_R8A7743
- bool
+ bool "RZ/G1M clock support" if COMPILE_TEST
select CLK_RCAR_GEN2_CPG
config CLK_R8A7745
- bool
+ bool "RZ/G1E clock support" if COMPILE_TEST
select CLK_RCAR_GEN2_CPG
config CLK_R8A7778
- bool
+ bool "R-Car M1A clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSTP
config CLK_R8A7779
- bool
+ bool "R-Car H1 clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSTP
config CLK_R8A7790
- bool
+ bool "R-Car H2 clock support" if COMPILE_TEST
select CLK_RCAR_GEN2 if CLK_RENESAS_LEGACY
select CLK_RCAR_GEN2_CPG
select CLK_RENESAS_DIV6
config CLK_R8A7791
- bool
+ bool "R-Car M2-W/N clock support" if COMPILE_TEST
select CLK_RCAR_GEN2 if CLK_RENESAS_LEGACY
select CLK_RCAR_GEN2_CPG
select CLK_RENESAS_DIV6
config CLK_R8A7792
- bool
+ bool "R-Car V2H clock support" if COMPILE_TEST
select CLK_RCAR_GEN2 if CLK_RENESAS_LEGACY
select CLK_RCAR_GEN2_CPG
config CLK_R8A7794
- bool
+ bool "R-Car E2 clock support" if COMPILE_TEST
select CLK_RCAR_GEN2 if CLK_RENESAS_LEGACY
select CLK_RCAR_GEN2_CPG
select CLK_RENESAS_DIV6
config CLK_R8A7795
- bool
+ bool "R-Car H3 clock support" if COMPILE_TEST
select CLK_RCAR_GEN3_CPG
config CLK_R8A7796
- bool
+ bool "R-Car M3-W clock support" if COMPILE_TEST
+ select CLK_RCAR_GEN3_CPG
+
+config CLK_R8A77995
+ bool "R-Car D3 clock support" if COMPILE_TEST
select CLK_RCAR_GEN3_CPG
config CLK_SH73A0
- bool
+ bool "SH-Mobile AG5 clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSTP
select CLK_RENESAS_DIV6
# Family
config CLK_RCAR_GEN2
- bool
+ bool "R-Car Gen2 legacy clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSTP
select CLK_RENESAS_DIV6
config CLK_RCAR_GEN2_CPG
- bool
+ bool "R-Car Gen2 CPG clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSSR
config CLK_RCAR_GEN3_CPG
- bool
+ bool "R-Car Gen3 CPG clock support" if COMPILE_TEST
select CLK_RENESAS_CPG_MSSR
+config CLK_RCAR_USB2_CLOCK_SEL
+ bool "Renesas R-Car USB2 clock selector support"
+ depends on ARCH_RENESAS || COMPILE_TEST
+ help
+ This is a driver for R-Car USB2 clock selector
# Generic
config CLK_RENESAS_CPG_MSSR
- bool
+ bool "CPG/MSSR clock support" if COMPILE_TEST
select CLK_RENESAS_DIV6
config CLK_RENESAS_CPG_MSTP
- bool
+ bool "MSTP clock support" if COMPILE_TEST
config CLK_RENESAS_DIV6
bool "DIV6 clock support" if COMPILE_TEST
diff --git a/drivers/clk/renesas/Makefile b/drivers/clk/renesas/Makefile
index 02d04124371f..9bda3ec5b199 100644
--- a/drivers/clk/renesas/Makefile
+++ b/drivers/clk/renesas/Makefile
@@ -13,12 +13,14 @@ obj-$(CONFIG_CLK_R8A7792) += r8a7792-cpg-mssr.o
obj-$(CONFIG_CLK_R8A7794) += r8a7794-cpg-mssr.o
obj-$(CONFIG_CLK_R8A7795) += r8a7795-cpg-mssr.o
obj-$(CONFIG_CLK_R8A7796) += r8a7796-cpg-mssr.o
+obj-$(CONFIG_CLK_R8A77995) += r8a77995-cpg-mssr.o
obj-$(CONFIG_CLK_SH73A0) += clk-sh73a0.o
# Family
obj-$(CONFIG_CLK_RCAR_GEN2) += clk-rcar-gen2.o
obj-$(CONFIG_CLK_RCAR_GEN2_CPG) += rcar-gen2-cpg.o
obj-$(CONFIG_CLK_RCAR_GEN3_CPG) += rcar-gen3-cpg.o
+obj-$(CONFIG_CLK_RCAR_USB2_CLOCK_SEL) += rcar-usb2-clock-sel.o
# Generic
obj-$(CONFIG_CLK_RENESAS_CPG_MSSR) += renesas-cpg-mssr.o
diff --git a/drivers/clk/renesas/clk-div6.c b/drivers/clk/renesas/clk-div6.c
index 0627860233cb..3e0040c0ac87 100644
--- a/drivers/clk/renesas/clk-div6.c
+++ b/drivers/clk/renesas/clk-div6.c
@@ -29,6 +29,9 @@
* @hw: handle between common and hardware-specific interfaces
* @reg: IO-remapped register
* @div: divisor value (1-64)
+ * @src_shift: Shift to access the register bits to select the parent clock
+ * @src_width: Number of register bits to select the parent clock (may be 0)
+ * @parents: Array to map from valid parent clocks indices to hardware indices
*/
struct div6_clock {
struct clk_hw hw;
diff --git a/drivers/clk/renesas/clk-mstp.c b/drivers/clk/renesas/clk-mstp.c
index f1617dd044cb..500a9e4e03c4 100644
--- a/drivers/clk/renesas/clk-mstp.c
+++ b/drivers/clk/renesas/clk-mstp.c
@@ -335,7 +335,7 @@ void __init cpg_mstp_add_clk_domain(struct device_node *np)
u32 ncells;
if (of_property_read_u32(np, "#power-domain-cells", &ncells)) {
- pr_warn("%s lacks #power-domain-cells\n", np->full_name);
+ pr_warn("%pOF lacks #power-domain-cells\n", np);
return;
}
diff --git a/drivers/clk/renesas/clk-rcar-gen2.c b/drivers/clk/renesas/clk-rcar-gen2.c
index 51a2479ed5d7..0b2e56d0d94b 100644
--- a/drivers/clk/renesas/clk-rcar-gen2.c
+++ b/drivers/clk/renesas/clk-rcar-gen2.c
@@ -407,8 +407,7 @@ static void __init rcar_gen2_cpg_clocks_init(struct device_node *np)
if (rcar_rst_read_mode_pins(&cpg_mode)) {
/* Backward-compatibility with old DT */
- pr_warn("%s: failed to obtain mode pins from RST\n",
- np->full_name);
+ pr_warn("%pOF: failed to obtain mode pins from RST\n", np);
cpg_mode = rcar_gen2_read_mode_pins();
}
diff --git a/drivers/clk/renesas/r8a7792-cpg-mssr.c b/drivers/clk/renesas/r8a7792-cpg-mssr.c
index a832b9b6f7b0..7f85bbf20bf7 100644
--- a/drivers/clk/renesas/r8a7792-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7792-cpg-mssr.c
@@ -118,6 +118,13 @@ static const struct mssr_mod_clk r8a7792_mod_clks[] __initconst = {
DEF_MOD("vin1", 810, R8A7792_CLK_ZG),
DEF_MOD("vin0", 811, R8A7792_CLK_ZG),
DEF_MOD("etheravb", 812, R8A7792_CLK_HP),
+ DEF_MOD("imr-lx3", 821, R8A7792_CLK_ZG),
+ DEF_MOD("imr-lsx3-1", 822, R8A7792_CLK_ZG),
+ DEF_MOD("imr-lsx3-0", 823, R8A7792_CLK_ZG),
+ DEF_MOD("imr-lsx3-5", 825, R8A7792_CLK_ZG),
+ DEF_MOD("imr-lsx3-4", 826, R8A7792_CLK_ZG),
+ DEF_MOD("imr-lsx3-3", 827, R8A7792_CLK_ZG),
+ DEF_MOD("imr-lsx3-2", 828, R8A7792_CLK_ZG),
DEF_MOD("gyro-adc", 901, R8A7792_CLK_P),
DEF_MOD("gpio7", 904, R8A7792_CLK_CP),
DEF_MOD("gpio6", 905, R8A7792_CLK_CP),
diff --git a/drivers/clk/renesas/r8a7795-cpg-mssr.c b/drivers/clk/renesas/r8a7795-cpg-mssr.c
index c091a8e024b8..762b2f8824f1 100644
--- a/drivers/clk/renesas/r8a7795-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7795-cpg-mssr.c
@@ -305,23 +305,23 @@ static const unsigned int r8a7795_crit_mod_clks[] __initconst = {
(((md) & BIT(17)) >> 17))
static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[16] __initconst = {
- /* EXTAL div PLL1 mult PLL3 mult */
- { 1, 192, 192, },
- { 1, 192, 128, },
- { 0, /* Prohibited setting */ },
- { 1, 192, 192, },
- { 1, 160, 160, },
- { 1, 160, 106, },
- { 0, /* Prohibited setting */ },
- { 1, 160, 160, },
- { 1, 128, 128, },
- { 1, 128, 84, },
- { 0, /* Prohibited setting */ },
- { 1, 128, 128, },
- { 2, 192, 192, },
- { 2, 192, 128, },
- { 0, /* Prohibited setting */ },
- { 2, 192, 192, },
+ /* EXTAL div PLL1 mult/div PLL3 mult/div */
+ { 1, 192, 1, 192, 1, },
+ { 1, 192, 1, 128, 1, },
+ { 0, /* Prohibited setting */ },
+ { 1, 192, 1, 192, 1, },
+ { 1, 160, 1, 160, 1, },
+ { 1, 160, 1, 106, 1, },
+ { 0, /* Prohibited setting */ },
+ { 1, 160, 1, 160, 1, },
+ { 1, 128, 1, 128, 1, },
+ { 1, 128, 1, 84, 1, },
+ { 0, /* Prohibited setting */ },
+ { 1, 128, 1, 128, 1, },
+ { 2, 192, 1, 192, 1, },
+ { 2, 192, 1, 128, 1, },
+ { 0, /* Prohibited setting */ },
+ { 2, 192, 1, 192, 1, },
};
static const struct soc_device_attribute r8a7795es1[] __initconst = {
diff --git a/drivers/clk/renesas/r8a7796-cpg-mssr.c b/drivers/clk/renesas/r8a7796-cpg-mssr.c
index acc6d0f153e1..e5e7fb212288 100644
--- a/drivers/clk/renesas/r8a7796-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c
@@ -138,6 +138,7 @@ static const struct mssr_mod_clk r8a7796_mod_clks[] __initconst = {
DEF_MOD("sdif0", 314, R8A7796_CLK_SD0),
DEF_MOD("pcie1", 318, R8A7796_CLK_S3D1),
DEF_MOD("pcie0", 319, R8A7796_CLK_S3D1),
+ DEF_MOD("usb3-if0", 328, R8A7796_CLK_S3D1),
DEF_MOD("usb-dmac0", 330, R8A7796_CLK_S3D1),
DEF_MOD("usb-dmac1", 331, R8A7796_CLK_S3D1),
DEF_MOD("rwdt", 402, R8A7796_CLK_R),
@@ -277,23 +278,23 @@ static const unsigned int r8a7796_crit_mod_clks[] __initconst = {
(((md) & BIT(17)) >> 17))
static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[16] __initconst = {
- /* EXTAL div PLL1 mult PLL3 mult */
- { 1, 192, 192, },
- { 1, 192, 128, },
- { 0, /* Prohibited setting */ },
- { 1, 192, 192, },
- { 1, 160, 160, },
- { 1, 160, 106, },
- { 0, /* Prohibited setting */ },
- { 1, 160, 160, },
- { 1, 128, 128, },
- { 1, 128, 84, },
- { 0, /* Prohibited setting */ },
- { 1, 128, 128, },
- { 2, 192, 192, },
- { 2, 192, 128, },
- { 0, /* Prohibited setting */ },
- { 2, 192, 192, },
+ /* EXTAL div PLL1 mult/div PLL3 mult/div */
+ { 1, 192, 1, 192, 1, },
+ { 1, 192, 1, 128, 1, },
+ { 0, /* Prohibited setting */ },
+ { 1, 192, 1, 192, 1, },
+ { 1, 160, 1, 160, 1, },
+ { 1, 160, 1, 106, 1, },
+ { 0, /* Prohibited setting */ },
+ { 1, 160, 1, 160, 1, },
+ { 1, 128, 1, 128, 1, },
+ { 1, 128, 1, 84, 1, },
+ { 0, /* Prohibited setting */ },
+ { 1, 128, 1, 128, 1, },
+ { 2, 192, 1, 192, 1, },
+ { 2, 192, 1, 128, 1, },
+ { 0, /* Prohibited setting */ },
+ { 2, 192, 1, 192, 1, },
};
static int __init r8a7796_cpg_mssr_init(struct device *dev)
diff --git a/drivers/clk/renesas/r8a77995-cpg-mssr.c b/drivers/clk/renesas/r8a77995-cpg-mssr.c
new file mode 100644
index 000000000000..e594cf8ee63b
--- /dev/null
+++ b/drivers/clk/renesas/r8a77995-cpg-mssr.c
@@ -0,0 +1,236 @@
+/*
+ * r8a77995 Clock Pulse Generator / Module Standby and Software Reset
+ *
+ * Copyright (C) 2017 Glider bvba
+ *
+ * Based on r8a7795-cpg-mssr.c
+ *
+ * Copyright (C) 2015 Glider bvba
+ * Copyright (C) 2015 Renesas Electronics Corp.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ */
+
+#include <linux/device.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/soc/renesas/rcar-rst.h>
+
+#include <dt-bindings/clock/r8a77995-cpg-mssr.h>
+
+#include "renesas-cpg-mssr.h"
+#include "rcar-gen3-cpg.h"
+
+enum clk_ids {
+ /* Core Clock Outputs exported to DT */
+ LAST_DT_CORE_CLK = R8A77995_CLK_CP,
+
+ /* External Input Clocks */
+ CLK_EXTAL,
+
+ /* Internal Core Clocks */
+ CLK_MAIN,
+ CLK_PLL0,
+ CLK_PLL1,
+ CLK_PLL3,
+ CLK_PLL0D2,
+ CLK_PLL0D3,
+ CLK_PLL0D5,
+ CLK_PLL1D2,
+ CLK_PE,
+ CLK_S0,
+ CLK_S1,
+ CLK_S2,
+ CLK_S3,
+ CLK_SDSRC,
+ CLK_SSPSRC,
+
+ /* Module Clocks */
+ MOD_CLK_BASE
+};
+
+static const struct cpg_core_clk r8a77995_core_clks[] __initconst = {
+ /* External Clock Inputs */
+ DEF_INPUT("extal", CLK_EXTAL),
+
+ /* Internal Core Clocks */
+ DEF_BASE(".main", CLK_MAIN, CLK_TYPE_GEN3_MAIN, CLK_EXTAL),
+ DEF_BASE(".pll1", CLK_PLL1, CLK_TYPE_GEN3_PLL1, CLK_MAIN),
+ DEF_BASE(".pll3", CLK_PLL3, CLK_TYPE_GEN3_PLL3, CLK_MAIN),
+
+ DEF_FIXED(".pll0", CLK_PLL0, CLK_MAIN, 4, 250),
+ DEF_FIXED(".pll0d2", CLK_PLL0D2, CLK_PLL0, 2, 1),
+ DEF_FIXED(".pll0d3", CLK_PLL0D3, CLK_PLL0, 3, 1),
+ DEF_FIXED(".pll0d5", CLK_PLL0D5, CLK_PLL0, 5, 1),
+ DEF_FIXED(".pll1d2", CLK_PLL1D2, CLK_PLL1, 2, 1),
+ DEF_FIXED(".pe", CLK_PE, CLK_PLL0D3, 4, 1),
+ DEF_FIXED(".s0", CLK_S0, CLK_PLL1, 2, 1),
+ DEF_FIXED(".s1", CLK_S1, CLK_PLL1, 3, 1),
+ DEF_FIXED(".s2", CLK_S2, CLK_PLL1, 4, 1),
+ DEF_FIXED(".s3", CLK_S3, CLK_PLL1, 6, 1),
+ DEF_FIXED(".sdsrc", CLK_SDSRC, CLK_PLL1, 2, 1),
+
+ /* Core Clock Outputs */
+ DEF_FIXED("z2", R8A77995_CLK_Z2, CLK_PLL0D3, 1, 1),
+ DEF_FIXED("ztr", R8A77995_CLK_ZTR, CLK_PLL1, 6, 1),
+ DEF_FIXED("zt", R8A77995_CLK_ZT, CLK_PLL1, 4, 1),
+ DEF_FIXED("zx", R8A77995_CLK_ZX, CLK_PLL1, 3, 1),
+ DEF_FIXED("s0d1", R8A77995_CLK_S0D1, CLK_S0, 1, 1),
+ DEF_FIXED("s1d1", R8A77995_CLK_S1D1, CLK_S1, 1, 1),
+ DEF_FIXED("s1d2", R8A77995_CLK_S1D2, CLK_S1, 2, 1),
+ DEF_FIXED("s1d4", R8A77995_CLK_S1D4, CLK_S1, 4, 1),
+ DEF_FIXED("s2d1", R8A77995_CLK_S2D1, CLK_S2, 1, 1),
+ DEF_FIXED("s2d2", R8A77995_CLK_S2D2, CLK_S2, 2, 1),
+ DEF_FIXED("s2d4", R8A77995_CLK_S2D4, CLK_S2, 4, 1),
+ DEF_FIXED("s3d1", R8A77995_CLK_S3D1, CLK_S3, 1, 1),
+ DEF_FIXED("s3d2", R8A77995_CLK_S3D2, CLK_S3, 2, 1),
+ DEF_FIXED("s3d4", R8A77995_CLK_S3D4, CLK_S3, 4, 1),
+
+ DEF_FIXED("cl", R8A77995_CLK_CL, CLK_PLL1, 48, 1),
+ DEF_FIXED("cp", R8A77995_CLK_CP, CLK_EXTAL, 2, 1),
+ DEF_FIXED("osc", R8A77995_CLK_OSC, CLK_EXTAL, 384, 1),
+ DEF_FIXED("r", R8A77995_CLK_R, CLK_EXTAL, 1536, 1),
+
+ DEF_GEN3_PE("s1d4c", R8A77995_CLK_S1D4C, CLK_S1, 4, CLK_PE, 2),
+ DEF_GEN3_PE("s3d1c", R8A77995_CLK_S3D1C, CLK_S3, 1, CLK_PE, 1),
+ DEF_GEN3_PE("s3d2c", R8A77995_CLK_S3D2C, CLK_S3, 2, CLK_PE, 2),
+ DEF_GEN3_PE("s3d4c", R8A77995_CLK_S3D4C, CLK_S3, 4, CLK_PE, 4),
+
+ DEF_GEN3_SD("sd0", R8A77995_CLK_SD0, CLK_SDSRC, 0x268),
+
+ DEF_DIV6P1("canfd", R8A77995_CLK_CANFD, CLK_PLL0D3, 0x244),
+ DEF_DIV6P1("mso", R8A77995_CLK_MSO, CLK_PLL1D2, 0x014),
+};
+
+static const struct mssr_mod_clk r8a77995_mod_clks[] __initconst = {
+ DEF_MOD("scif5", 202, R8A77995_CLK_S3D4C),
+ DEF_MOD("scif4", 203, R8A77995_CLK_S3D4C),
+ DEF_MOD("scif3", 204, R8A77995_CLK_S3D4C),
+ DEF_MOD("scif1", 206, R8A77995_CLK_S3D4C),
+ DEF_MOD("scif0", 207, R8A77995_CLK_S3D4C),
+ DEF_MOD("msiof3", 208, R8A77995_CLK_MSO),
+ DEF_MOD("msiof2", 209, R8A77995_CLK_MSO),
+ DEF_MOD("msiof1", 210, R8A77995_CLK_MSO),
+ DEF_MOD("msiof0", 211, R8A77995_CLK_MSO),
+ DEF_MOD("sys-dmac2", 217, R8A77995_CLK_S3D1),
+ DEF_MOD("sys-dmac1", 218, R8A77995_CLK_S3D1),
+ DEF_MOD("sys-dmac0", 219, R8A77995_CLK_S3D1),
+ DEF_MOD("cmt3", 300, R8A77995_CLK_R),
+ DEF_MOD("cmt2", 301, R8A77995_CLK_R),
+ DEF_MOD("cmt1", 302, R8A77995_CLK_R),
+ DEF_MOD("cmt0", 303, R8A77995_CLK_R),
+ DEF_MOD("scif2", 310, R8A77995_CLK_S3D4C),
+ DEF_MOD("emmc0", 312, R8A77995_CLK_SD0),
+ DEF_MOD("usb-dmac0", 330, R8A77995_CLK_S3D1),
+ DEF_MOD("usb-dmac1", 331, R8A77995_CLK_S3D1),
+ DEF_MOD("rwdt", 402, R8A77995_CLK_R),
+ DEF_MOD("intc-ex", 407, R8A77995_CLK_CP),
+ DEF_MOD("intc-ap", 408, R8A77995_CLK_S3D1),
+ DEF_MOD("audmac0", 502, R8A77995_CLK_S3D1),
+ DEF_MOD("hscif3", 517, R8A77995_CLK_S3D1C),
+ DEF_MOD("hscif0", 520, R8A77995_CLK_S3D1C),
+ DEF_MOD("thermal", 522, R8A77995_CLK_CP),
+ DEF_MOD("pwm", 523, R8A77995_CLK_S3D4C),
+ DEF_MOD("fcpvd1", 602, R8A77995_CLK_S1D2),
+ DEF_MOD("fcpvd0", 603, R8A77995_CLK_S1D2),
+ DEF_MOD("fcpvbs", 607, R8A77995_CLK_S0D1),
+ DEF_MOD("vspd1", 622, R8A77995_CLK_S1D2),
+ DEF_MOD("vspd0", 623, R8A77995_CLK_S1D2),
+ DEF_MOD("vspbs", 627, R8A77995_CLK_S0D1),
+ DEF_MOD("ehci0", 703, R8A77995_CLK_S3D2),
+ DEF_MOD("hsusb", 704, R8A77995_CLK_S3D2),
+ DEF_MOD("du1", 723, R8A77995_CLK_S2D1),
+ DEF_MOD("du0", 724, R8A77995_CLK_S2D1),
+ DEF_MOD("lvds", 727, R8A77995_CLK_S2D1),
+ DEF_MOD("vin7", 804, R8A77995_CLK_S1D2),
+ DEF_MOD("vin6", 805, R8A77995_CLK_S1D2),
+ DEF_MOD("vin5", 806, R8A77995_CLK_S1D2),
+ DEF_MOD("vin4", 807, R8A77995_CLK_S1D2),
+ DEF_MOD("etheravb", 812, R8A77995_CLK_S3D2),
+ DEF_MOD("imr0", 823, R8A77995_CLK_S1D2),
+ DEF_MOD("gpio6", 906, R8A77995_CLK_S3D4),
+ DEF_MOD("gpio5", 907, R8A77995_CLK_S3D4),
+ DEF_MOD("gpio4", 908, R8A77995_CLK_S3D4),
+ DEF_MOD("gpio3", 909, R8A77995_CLK_S3D4),
+ DEF_MOD("gpio2", 910, R8A77995_CLK_S3D4),
+ DEF_MOD("gpio1", 911, R8A77995_CLK_S3D4),
+ DEF_MOD("gpio0", 912, R8A77995_CLK_S3D4),
+ DEF_MOD("can-fd", 914, R8A77995_CLK_S3D2),
+ DEF_MOD("can-if1", 915, R8A77995_CLK_S3D4),
+ DEF_MOD("can-if0", 916, R8A77995_CLK_S3D4),
+ DEF_MOD("i2c3", 928, R8A77995_CLK_S3D2),
+ DEF_MOD("i2c2", 929, R8A77995_CLK_S3D2),
+ DEF_MOD("i2c1", 930, R8A77995_CLK_S3D2),
+ DEF_MOD("i2c0", 931, R8A77995_CLK_S3D2),
+ DEF_MOD("ssi-all", 1005, R8A77995_CLK_S3D4),
+ DEF_MOD("ssi4", 1011, MOD_CLK_ID(1005)),
+ DEF_MOD("ssi3", 1012, MOD_CLK_ID(1005)),
+ DEF_MOD("scu-all", 1017, R8A77995_CLK_S3D4),
+ DEF_MOD("scu-dvc1", 1018, MOD_CLK_ID(1017)),
+ DEF_MOD("scu-dvc0", 1019, MOD_CLK_ID(1017)),
+ DEF_MOD("scu-ctu1-mix1", 1020, MOD_CLK_ID(1017)),
+ DEF_MOD("scu-ctu0-mix0", 1021, MOD_CLK_ID(1017)),
+ DEF_MOD("scu-src6", 1025, MOD_CLK_ID(1017)),
+ DEF_MOD("scu-src5", 1026, MOD_CLK_ID(1017)),
+};
+
+static const unsigned int r8a77995_crit_mod_clks[] __initconst = {
+ MOD_CLK_ID(408), /* INTC-AP (GIC) */
+};
+
+
+/*
+ * CPG Clock Data
+ */
+
+/*
+ * MD19 EXTAL (MHz) PLL0 PLL1 PLL3
+ *--------------------------------------------------------------------
+ * 0 48 x 1 x250/4 x100/3 x100/3
+ * 1 48 x 1 x250/4 x100/3 x116/6
+ */
+#define CPG_PLL_CONFIG_INDEX(md) (((md) & BIT(19)) >> 19)
+
+static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[2] __initconst = {
+ /* EXTAL div PLL1 mult/div PLL3 mult/div */
+ { 1, 100, 3, 100, 3, },
+ { 1, 100, 3, 116, 6, },
+};
+
+static int __init r8a77995_cpg_mssr_init(struct device *dev)
+{
+ const struct rcar_gen3_cpg_pll_config *cpg_pll_config;
+ u32 cpg_mode;
+ int error;
+
+ error = rcar_rst_read_mode_pins(&cpg_mode);
+ if (error)
+ return error;
+
+ cpg_pll_config = &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)];
+
+ return rcar_gen3_cpg_init(cpg_pll_config, 0, cpg_mode);
+}
+
+const struct cpg_mssr_info r8a77995_cpg_mssr_info __initconst = {
+ /* Core Clocks */
+ .core_clks = r8a77995_core_clks,
+ .num_core_clks = ARRAY_SIZE(r8a77995_core_clks),
+ .last_dt_core_clk = LAST_DT_CORE_CLK,
+ .num_total_core_clks = MOD_CLK_BASE,
+
+ /* Module Clocks */
+ .mod_clks = r8a77995_mod_clks,
+ .num_mod_clks = ARRAY_SIZE(r8a77995_mod_clks),
+ .num_hw_mod_clks = 12 * 32,
+
+ /* Critical Module Clocks */
+ .crit_mod_clks = r8a77995_crit_mod_clks,
+ .num_crit_mod_clks = ARRAY_SIZE(r8a77995_crit_mod_clks),
+
+ /* Callbacks */
+ .init = r8a77995_cpg_mssr_init,
+ .cpg_clk_register = rcar_gen3_cpg_clk_register,
+};
diff --git a/drivers/clk/renesas/rcar-gen3-cpg.c b/drivers/clk/renesas/rcar-gen3-cpg.c
index 3dee900522b7..951105816547 100644
--- a/drivers/clk/renesas/rcar-gen3-cpg.c
+++ b/drivers/clk/renesas/rcar-gen3-cpg.c
@@ -60,6 +60,7 @@ struct sd_clock {
unsigned int div_num;
unsigned int div_min;
unsigned int div_max;
+ unsigned int cur_div_idx;
};
/* SDn divider
@@ -96,21 +97,10 @@ static const struct sd_div_table cpg_sd_div_table[] = {
static int cpg_sd_clock_enable(struct clk_hw *hw)
{
struct sd_clock *clock = to_sd_clock(hw);
- u32 val, sd_fc;
- unsigned int i;
-
- val = readl(clock->reg);
-
- sd_fc = val & CPG_SD_FC_MASK;
- for (i = 0; i < clock->div_num; i++)
- if (sd_fc == (clock->div_table[i].val & CPG_SD_FC_MASK))
- break;
-
- if (i >= clock->div_num)
- return -EINVAL;
+ u32 val = readl(clock->reg);
val &= ~(CPG_SD_STP_MASK);
- val |= clock->div_table[i].val & CPG_SD_STP_MASK;
+ val |= clock->div_table[clock->cur_div_idx].val & CPG_SD_STP_MASK;
writel(val, clock->reg);
@@ -135,21 +125,9 @@ static unsigned long cpg_sd_clock_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{
struct sd_clock *clock = to_sd_clock(hw);
- unsigned long rate = parent_rate;
- u32 val, sd_fc;
- unsigned int i;
- val = readl(clock->reg);
-
- sd_fc = val & CPG_SD_FC_MASK;
- for (i = 0; i < clock->div_num; i++)
- if (sd_fc == (clock->div_table[i].val & CPG_SD_FC_MASK))
- break;
-
- if (i >= clock->div_num)
- return -EINVAL;
-
- return DIV_ROUND_CLOSEST(rate, clock->div_table[i].div);
+ return DIV_ROUND_CLOSEST(parent_rate,
+ clock->div_table[clock->cur_div_idx].div);
}
static unsigned int cpg_sd_clock_calc_div(struct sd_clock *clock,
@@ -190,6 +168,8 @@ static int cpg_sd_clock_set_rate(struct clk_hw *hw, unsigned long rate,
if (i >= clock->div_num)
return -EINVAL;
+ clock->cur_div_idx = i;
+
val = readl(clock->reg);
val &= ~(CPG_SD_STP_MASK | CPG_SD_FC_MASK);
val |= clock->div_table[i].val & (CPG_SD_STP_MASK | CPG_SD_FC_MASK);
@@ -215,6 +195,7 @@ static struct clk * __init cpg_sd_clk_register(const struct cpg_core_clk *core,
struct sd_clock *clock;
struct clk *clk;
unsigned int i;
+ u32 sd_fc;
clock = kzalloc(sizeof(*clock), GFP_KERNEL);
if (!clock)
@@ -231,6 +212,18 @@ static struct clk * __init cpg_sd_clk_register(const struct cpg_core_clk *core,
clock->div_table = cpg_sd_div_table;
clock->div_num = ARRAY_SIZE(cpg_sd_div_table);
+ sd_fc = readl(clock->reg) & CPG_SD_FC_MASK;
+ for (i = 0; i < clock->div_num; i++)
+ if (sd_fc == (clock->div_table[i].val & CPG_SD_FC_MASK))
+ break;
+
+ if (WARN_ON(i >= clock->div_num)) {
+ kfree(clock);
+ return ERR_PTR(-EINVAL);
+ }
+
+ clock->cur_div_idx = i;
+
clock->div_max = clock->div_table[0].div;
clock->div_min = clock->div_max;
for (i = 1; i < clock->div_num; i++) {
@@ -279,7 +272,7 @@ struct clk * __init rcar_gen3_cpg_clk_register(struct device *dev,
unsigned int div = 1;
u32 value;
- parent = clks[core->parent];
+ parent = clks[core->parent & 0xffff]; /* CLK_TYPE_PE uses high bits */
if (IS_ERR(parent))
return ERR_CAST(parent);
@@ -303,6 +296,7 @@ struct clk * __init rcar_gen3_cpg_clk_register(struct device *dev,
case CLK_TYPE_GEN3_PLL1:
mult = cpg_pll_config->pll1_mult;
+ div = cpg_pll_config->pll1_div;
break;
case CLK_TYPE_GEN3_PLL2:
@@ -320,6 +314,7 @@ struct clk * __init rcar_gen3_cpg_clk_register(struct device *dev,
case CLK_TYPE_GEN3_PLL3:
mult = cpg_pll_config->pll3_mult;
+ div = cpg_pll_config->pll3_div;
break;
case CLK_TYPE_GEN3_PLL4:
@@ -360,6 +355,24 @@ struct clk * __init rcar_gen3_cpg_clk_register(struct device *dev,
parent = clks[cpg_clk_extalr];
break;
+ case CLK_TYPE_GEN3_PE:
+ /*
+ * Peripheral clock with a fixed divider, selectable between
+ * clean and spread spectrum parents using MD12
+ */
+ if (cpg_mode & BIT(12)) {
+ /* Clean */
+ div = core->div & 0xffff;
+ } else {
+ /* SCCG */
+ parent = clks[core->parent >> 16];
+ if (IS_ERR(parent))
+ return ERR_CAST(parent);
+ div = core->div >> 16;
+ }
+ mult = 1;
+ break;
+
default:
return ERR_PTR(-EINVAL);
}
diff --git a/drivers/clk/renesas/rcar-gen3-cpg.h b/drivers/clk/renesas/rcar-gen3-cpg.h
index 073be54b5d03..d756ef8b78eb 100644
--- a/drivers/clk/renesas/rcar-gen3-cpg.h
+++ b/drivers/clk/renesas/rcar-gen3-cpg.h
@@ -20,15 +20,24 @@ enum rcar_gen3_clk_types {
CLK_TYPE_GEN3_PLL4,
CLK_TYPE_GEN3_SD,
CLK_TYPE_GEN3_R,
+ CLK_TYPE_GEN3_PE,
};
#define DEF_GEN3_SD(_name, _id, _parent, _offset) \
DEF_BASE(_name, _id, CLK_TYPE_GEN3_SD, _parent, .offset = _offset)
+#define DEF_GEN3_PE(_name, _id, _parent_sscg, _div_sscg, _parent_clean, \
+ _div_clean) \
+ DEF_BASE(_name, _id, CLK_TYPE_GEN3_PE, \
+ (_parent_sscg) << 16 | (_parent_clean), \
+ .div = (_div_sscg) << 16 | (_div_clean))
+
struct rcar_gen3_cpg_pll_config {
- unsigned int extal_div;
- unsigned int pll1_mult;
- unsigned int pll3_mult;
+ u8 extal_div;
+ u8 pll1_mult;
+ u8 pll1_div;
+ u8 pll3_mult;
+ u8 pll3_div;
};
#define CPG_RCKCR 0x240
diff --git a/drivers/clk/renesas/rcar-usb2-clock-sel.c b/drivers/clk/renesas/rcar-usb2-clock-sel.c
new file mode 100644
index 000000000000..6cd030a58964
--- /dev/null
+++ b/drivers/clk/renesas/rcar-usb2-clock-sel.c
@@ -0,0 +1,188 @@
+/*
+ * Renesas R-Car USB2.0 clock selector
+ *
+ * Copyright (C) 2017 Renesas Electronics Corp.
+ *
+ * Based on renesas-cpg-mssr.c
+ *
+ * Copyright (C) 2015 Glider bvba
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ */
+
+#include <linux/clk.h>
+#include <linux/clk-provider.h>
+#include <linux/device.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/pm.h>
+#include <linux/pm_runtime.h>
+#include <linux/slab.h>
+
+#define USB20_CLKSET0 0x00
+#define CLKSET0_INTCLK_EN BIT(11)
+#define CLKSET0_PRIVATE BIT(0)
+#define CLKSET0_EXTAL_ONLY (CLKSET0_INTCLK_EN | CLKSET0_PRIVATE)
+
+struct usb2_clock_sel_priv {
+ void __iomem *base;
+ struct clk_hw hw;
+ bool extal;
+ bool xtal;
+};
+#define to_priv(_hw) container_of(_hw, struct usb2_clock_sel_priv, hw)
+
+static void usb2_clock_sel_enable_extal_only(struct usb2_clock_sel_priv *priv)
+{
+ u16 val = readw(priv->base + USB20_CLKSET0);
+
+ pr_debug("%s: enter %d %d %x\n", __func__,
+ priv->extal, priv->xtal, val);
+
+ if (priv->extal && !priv->xtal && val != CLKSET0_EXTAL_ONLY)
+ writew(CLKSET0_EXTAL_ONLY, priv->base + USB20_CLKSET0);
+}
+
+static void usb2_clock_sel_disable_extal_only(struct usb2_clock_sel_priv *priv)
+{
+ if (priv->extal && !priv->xtal)
+ writew(CLKSET0_PRIVATE, priv->base + USB20_CLKSET0);
+}
+
+static int usb2_clock_sel_enable(struct clk_hw *hw)
+{
+ usb2_clock_sel_enable_extal_only(to_priv(hw));
+
+ return 0;
+}
+
+static void usb2_clock_sel_disable(struct clk_hw *hw)
+{
+ usb2_clock_sel_disable_extal_only(to_priv(hw));
+}
+
+/*
+ * This module seems a mux, but this driver assumes a gate because
+ * ehci/ohci platform drivers don't support clk_set_parent() for now.
+ * If this driver acts as a gate, ehci/ohci-platform drivers don't need
+ * any modification.
+ */
+static const struct clk_ops usb2_clock_sel_clock_ops = {
+ .enable = usb2_clock_sel_enable,
+ .disable = usb2_clock_sel_disable,
+};
+
+static const struct of_device_id rcar_usb2_clock_sel_match[] = {
+ { .compatible = "renesas,rcar-gen3-usb2-clock-sel" },
+ { }
+};
+
+static int rcar_usb2_clock_sel_suspend(struct device *dev)
+{
+ struct usb2_clock_sel_priv *priv = dev_get_drvdata(dev);
+
+ usb2_clock_sel_disable_extal_only(priv);
+ pm_runtime_put(dev);
+
+ return 0;
+}
+
+static int rcar_usb2_clock_sel_resume(struct device *dev)
+{
+ struct usb2_clock_sel_priv *priv = dev_get_drvdata(dev);
+
+ pm_runtime_get_sync(dev);
+ usb2_clock_sel_enable_extal_only(priv);
+
+ return 0;
+}
+
+static int rcar_usb2_clock_sel_remove(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct usb2_clock_sel_priv *priv = platform_get_drvdata(pdev);
+
+ of_clk_del_provider(dev->of_node);
+ clk_hw_unregister(&priv->hw);
+ pm_runtime_put(dev);
+ pm_runtime_disable(dev);
+
+ return 0;
+}
+
+static int rcar_usb2_clock_sel_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct device_node *np = dev->of_node;
+ struct usb2_clock_sel_priv *priv;
+ struct resource *res;
+ struct clk *clk;
+ struct clk_init_data init;
+
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ priv->base = devm_ioremap_resource(dev, res);
+ if (IS_ERR(priv->base))
+ return PTR_ERR(priv->base);
+
+ pm_runtime_enable(dev);
+ pm_runtime_get_sync(dev);
+
+ clk = devm_clk_get(dev, "usb_extal");
+ if (!IS_ERR(clk) && !clk_prepare_enable(clk)) {
+ priv->extal = !!clk_get_rate(clk);
+ clk_disable_unprepare(clk);
+ }
+ clk = devm_clk_get(dev, "usb_xtal");
+ if (!IS_ERR(clk) && !clk_prepare_enable(clk)) {
+ priv->xtal = !!clk_get_rate(clk);
+ clk_disable_unprepare(clk);
+ }
+
+ if (!priv->extal && !priv->xtal) {
+ dev_err(dev, "This driver needs usb_extal or usb_xtal\n");
+ return -ENOENT;
+ }
+
+ platform_set_drvdata(pdev, priv);
+ dev_set_drvdata(dev, priv);
+
+ init.name = "rcar_usb2_clock_sel";
+ init.ops = &usb2_clock_sel_clock_ops;
+ init.flags = 0;
+ init.parent_names = NULL;
+ init.num_parents = 0;
+ priv->hw.init = &init;
+
+ clk = clk_register(NULL, &priv->hw);
+ if (IS_ERR(clk))
+ return PTR_ERR(clk);
+
+ return of_clk_add_hw_provider(np, of_clk_hw_simple_get, &priv->hw);
+}
+
+static const struct dev_pm_ops rcar_usb2_clock_sel_pm_ops = {
+ .suspend = rcar_usb2_clock_sel_suspend,
+ .resume = rcar_usb2_clock_sel_resume,
+};
+
+static struct platform_driver rcar_usb2_clock_sel_driver = {
+ .driver = {
+ .name = "rcar-usb2-clock-sel",
+ .of_match_table = rcar_usb2_clock_sel_match,
+ .pm = &rcar_usb2_clock_sel_pm_ops,
+ },
+ .probe = rcar_usb2_clock_sel_probe,
+ .remove = rcar_usb2_clock_sel_remove,
+};
+builtin_platform_driver(rcar_usb2_clock_sel_driver);
+
+MODULE_DESCRIPTION("Renesas R-Car USB2 clock selector Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
index 1f607c806f9b..e580a5e6346c 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.c
+++ b/drivers/clk/renesas/renesas-cpg-mssr.c
@@ -680,6 +680,12 @@ static const struct of_device_id cpg_mssr_match[] = {
.data = &r8a7796_cpg_mssr_info,
},
#endif
+#ifdef CONFIG_CLK_R8A77995
+ {
+ .compatible = "renesas,r8a77995-cpg-mssr",
+ .data = &r8a77995_cpg_mssr_info,
+ },
+#endif
{ /* sentinel */ }
};
diff --git a/drivers/clk/renesas/renesas-cpg-mssr.h b/drivers/clk/renesas/renesas-cpg-mssr.h
index 43d7c7f6832d..94b9071d1061 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.h
+++ b/drivers/clk/renesas/renesas-cpg-mssr.h
@@ -138,6 +138,7 @@ extern const struct cpg_mssr_info r8a7792_cpg_mssr_info;
extern const struct cpg_mssr_info r8a7794_cpg_mssr_info;
extern const struct cpg_mssr_info r8a7795_cpg_mssr_info;
extern const struct cpg_mssr_info r8a7796_cpg_mssr_info;
+extern const struct cpg_mssr_info r8a77995_cpg_mssr_info;
/*
diff --git a/drivers/clk/rockchip/clk-rk3128.c b/drivers/clk/rockchip/clk-rk3128.c
index e243f2eae68f..62d7854e4b87 100644
--- a/drivers/clk/rockchip/clk-rk3128.c
+++ b/drivers/clk/rockchip/clk-rk3128.c
@@ -201,7 +201,7 @@ static struct rockchip_clk_branch rk3128_uart2_fracmux __initdata =
MUX(SCLK_UART2, "sclk_uart2", mux_uart2_p, CLK_SET_RATE_PARENT,
RK2928_CLKSEL_CON(15), 8, 2, MFLAGS);
-static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
+static struct rockchip_clk_branch common_clk_branches[] __initdata = {
/*
* Clock-Architecture Diagram 1
*/
@@ -459,10 +459,6 @@ static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
RK2928_CLKSEL_CON(2), 14, 2, MFLAGS, 8, 5, DFLAGS,
RK2928_CLKGATE_CON(10), 15, GFLAGS),
- COMPOSITE(SCLK_SFC, "sclk_sfc", mux_sclk_sfc_src_p, 0,
- RK2928_CLKSEL_CON(11), 14, 2, MFLAGS, 8, 5, DFLAGS,
- RK2928_CLKGATE_CON(3), 15, GFLAGS),
-
COMPOSITE_NOMUX(PCLK_PMU_PRE, "pclk_pmu_pre", "cpll", 0,
RK2928_CLKSEL_CON(29), 8, 6, DFLAGS,
RK2928_CLKGATE_CON(1), 0, GFLAGS),
@@ -495,7 +491,6 @@ static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
GATE(ACLK_DMAC, "aclk_dmac", "aclk_peri", 0, RK2928_CLKGATE_CON(5), 1, GFLAGS),
GATE(0, "aclk_peri_niu", "aclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(9), 15, GFLAGS),
GATE(0, "aclk_cpu_to_peri", "aclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(4), 2, GFLAGS),
- GATE(HCLK_GPS, "hclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(3), 14, GFLAGS),
GATE(HCLK_I2S_8CH, "hclk_i2s_8ch", "hclk_peri", 0, RK2928_CLKGATE_CON(7), 4, GFLAGS),
GATE(0, "hclk_peri_matrix", "hclk_peri", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(4), 0, GFLAGS),
@@ -541,7 +536,6 @@ static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
GATE(0, "hclk_rom", "hclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 6, GFLAGS),
GATE(HCLK_CRYPTO, "hclk_crypto", "hclk_cpu", 0, RK2928_CLKGATE_CON(3), 5, GFLAGS),
- GATE(PCLK_HDMI, "pclk_hdmi", "pclk_cpu", 0, RK2928_CLKGATE_CON(3), 8, GFLAGS),
GATE(PCLK_ACODEC, "pclk_acodec", "pclk_cpu", 0, RK2928_CLKGATE_CON(5), 14, GFLAGS),
GATE(0, "pclk_ddrupctl", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 7, GFLAGS),
GATE(0, "pclk_grf", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(5), 4, GFLAGS),
@@ -561,6 +555,21 @@ static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
MMC(SCLK_EMMC_SAMPLE, "emmc_sample", "sclk_emmc", RK3228_EMMC_CON1, 0),
};
+static struct rockchip_clk_branch rk3126_clk_branches[] __initdata = {
+ GATE(0, "pclk_stimer", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(3), 15, GFLAGS),
+ GATE(0, "pclk_s_efuse", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(3), 14, GFLAGS),
+ GATE(0, "pclk_sgrf", "pclk_cpu", CLK_IGNORE_UNUSED, RK2928_CLKGATE_CON(3), 8, GFLAGS),
+};
+
+static struct rockchip_clk_branch rk3128_clk_branches[] __initdata = {
+ COMPOSITE(SCLK_SFC, "sclk_sfc", mux_sclk_sfc_src_p, 0,
+ RK2928_CLKSEL_CON(11), 14, 2, MFLAGS, 8, 5, DFLAGS,
+ RK2928_CLKGATE_CON(3), 15, GFLAGS),
+
+ GATE(HCLK_GPS, "hclk_gps", "aclk_peri", 0, RK2928_CLKGATE_CON(3), 14, GFLAGS),
+ GATE(PCLK_HDMI, "pclk_hdmi", "pclk_cpu", 0, RK2928_CLKGATE_CON(3), 8, GFLAGS),
+};
+
static const char *const rk3128_critical_clocks[] __initconst = {
"aclk_cpu",
"hclk_cpu",
@@ -570,7 +579,7 @@ static const char *const rk3128_critical_clocks[] __initconst = {
"pclk_peri",
};
-static void __init rk3128_clk_init(struct device_node *np)
+static struct rockchip_clk_provider *__init rk3128_common_clk_init(struct device_node *np)
{
struct rockchip_clk_provider *ctx;
void __iomem *reg_base;
@@ -578,23 +587,21 @@ static void __init rk3128_clk_init(struct device_node *np)
reg_base = of_iomap(np, 0);
if (!reg_base) {
pr_err("%s: could not map cru region\n", __func__);
- return;
+ return ERR_PTR(-ENOMEM);
}
ctx = rockchip_clk_init(np, reg_base, CLK_NR_CLKS);
if (IS_ERR(ctx)) {
pr_err("%s: rockchip clk init failed\n", __func__);
iounmap(reg_base);
- return;
+ return ERR_PTR(-ENOMEM);
}
rockchip_clk_register_plls(ctx, rk3128_pll_clks,
ARRAY_SIZE(rk3128_pll_clks),
RK3128_GRF_SOC_STATUS0);
- rockchip_clk_register_branches(ctx, rk3128_clk_branches,
- ARRAY_SIZE(rk3128_clk_branches));
- rockchip_clk_protect_critical(rk3128_critical_clocks,
- ARRAY_SIZE(rk3128_critical_clocks));
+ rockchip_clk_register_branches(ctx, common_clk_branches,
+ ARRAY_SIZE(common_clk_branches));
rockchip_clk_register_armclk(ctx, ARMCLK, "armclk",
mux_armclk_p, ARRAY_SIZE(mux_armclk_p),
@@ -606,6 +613,40 @@ static void __init rk3128_clk_init(struct device_node *np)
rockchip_register_restart_notifier(ctx, RK2928_GLB_SRST_FST, NULL);
+ return ctx;
+}
+
+static void __init rk3126_clk_init(struct device_node *np)
+{
+ struct rockchip_clk_provider *ctx;
+
+ ctx = rk3128_common_clk_init(np);
+ if (IS_ERR(ctx))
+ return;
+
+ rockchip_clk_register_branches(ctx, rk3126_clk_branches,
+ ARRAY_SIZE(rk3126_clk_branches));
+ rockchip_clk_protect_critical(rk3128_critical_clocks,
+ ARRAY_SIZE(rk3128_critical_clocks));
+
+ rockchip_clk_of_add_provider(np, ctx);
+}
+
+CLK_OF_DECLARE(rk3126_cru, "rockchip,rk3126-cru", rk3126_clk_init);
+
+static void __init rk3128_clk_init(struct device_node *np)
+{
+ struct rockchip_clk_provider *ctx;
+
+ ctx = rk3128_common_clk_init(np);
+ if (IS_ERR(ctx))
+ return;
+
+ rockchip_clk_register_branches(ctx, rk3128_clk_branches,
+ ARRAY_SIZE(rk3128_clk_branches));
+ rockchip_clk_protect_critical(rk3128_critical_clocks,
+ ARRAY_SIZE(rk3128_critical_clocks));
+
rockchip_clk_of_add_provider(np, ctx);
}
diff --git a/drivers/clk/rockchip/clk-rk3228.c b/drivers/clk/rockchip/clk-rk3228.c
index bb405d9044a3..11e7f2d1c054 100644
--- a/drivers/clk/rockchip/clk-rk3228.c
+++ b/drivers/clk/rockchip/clk-rk3228.c
@@ -391,7 +391,7 @@ static struct rockchip_clk_branch rk3228_clk_branches[] __initdata = {
RK2928_CLKSEL_CON(11), 8, 2, MFLAGS, 0, 8, DFLAGS,
RK2928_CLKGATE_CON(2), 11, GFLAGS),
- COMPOSITE_NODIV(0, "sclk_sdio_src", mux_mmc_src_p, 0,
+ COMPOSITE_NODIV(SCLK_SDIO_SRC, "sclk_sdio_src", mux_mmc_src_p, 0,
RK2928_CLKSEL_CON(11), 10, 2, MFLAGS,
RK2928_CLKGATE_CON(2), 13, GFLAGS),
DIV(SCLK_SDIO, "sclk_sdio", "sclk_sdio_src", 0,
diff --git a/drivers/clk/rockchip/clk-rv1108.c b/drivers/clk/rockchip/clk-rv1108.c
index 7c05ab366348..089cb17925e5 100644
--- a/drivers/clk/rockchip/clk-rv1108.c
+++ b/drivers/clk/rockchip/clk-rv1108.c
@@ -93,9 +93,24 @@ static struct rockchip_pll_rate_table rv1108_pll_rates[] = {
}
static struct rockchip_cpuclk_rate_table rv1108_cpuclk_rates[] __initdata = {
- RV1108_CPUCLK_RATE(816000000, 4),
- RV1108_CPUCLK_RATE(600000000, 4),
- RV1108_CPUCLK_RATE(312000000, 4),
+ RV1108_CPUCLK_RATE(1608000000, 7),
+ RV1108_CPUCLK_RATE(1512000000, 7),
+ RV1108_CPUCLK_RATE(1488000000, 5),
+ RV1108_CPUCLK_RATE(1416000000, 5),
+ RV1108_CPUCLK_RATE(1392000000, 5),
+ RV1108_CPUCLK_RATE(1296000000, 5),
+ RV1108_CPUCLK_RATE(1200000000, 5),
+ RV1108_CPUCLK_RATE(1104000000, 5),
+ RV1108_CPUCLK_RATE(1008000000, 5),
+ RV1108_CPUCLK_RATE(912000000, 5),
+ RV1108_CPUCLK_RATE(816000000, 3),
+ RV1108_CPUCLK_RATE(696000000, 3),
+ RV1108_CPUCLK_RATE(600000000, 3),
+ RV1108_CPUCLK_RATE(500000000, 3),
+ RV1108_CPUCLK_RATE(408000000, 1),
+ RV1108_CPUCLK_RATE(312000000, 1),
+ RV1108_CPUCLK_RATE(216000000, 1),
+ RV1108_CPUCLK_RATE(96000000, 1),
};
static const struct rockchip_cpuclk_reg_data rv1108_cpuclk_data = {
@@ -105,7 +120,7 @@ static const struct rockchip_cpuclk_reg_data rv1108_cpuclk_data = {
.mux_core_alt = 1,
.mux_core_main = 0,
.mux_core_shift = 8,
- .mux_core_mask = 0x1,
+ .mux_core_mask = 0x3,
};
PNAME(mux_pll_p) = { "xin24m", "xin24m"};
@@ -114,30 +129,42 @@ PNAME(mux_armclk_p) = { "apll_core", "gpll_core", "dpll_core" };
PNAME(mux_usb480m_pre_p) = { "usbphy", "xin24m" };
PNAME(mux_hdmiphy_phy_p) = { "hdmiphy", "xin24m" };
PNAME(mux_dclk_hdmiphy_pre_p) = { "dclk_hdmiphy_src_gpll", "dclk_hdmiphy_src_dpll" };
-PNAME(mux_pll_src_4plls_p) = { "dpll", "hdmiphy", "gpll", "usb480m" };
+PNAME(mux_pll_src_4plls_p) = { "dpll", "gpll", "hdmiphy", "usb480m" };
PNAME(mux_pll_src_3plls_p) = { "apll", "gpll", "dpll" };
PNAME(mux_pll_src_2plls_p) = { "dpll", "gpll" };
PNAME(mux_pll_src_apll_gpll_p) = { "apll", "gpll" };
-PNAME(mux_aclk_peri_src_p) = { "aclk_peri_src_dpll", "aclk_peri_src_gpll" };
+PNAME(mux_aclk_peri_src_p) = { "aclk_peri_src_gpll", "aclk_peri_src_dpll" };
PNAME(mux_aclk_bus_src_p) = { "aclk_bus_src_gpll", "aclk_bus_src_apll", "aclk_bus_src_dpll" };
PNAME(mux_mmc_src_p) = { "dpll", "gpll", "xin24m", "usb480m" };
PNAME(mux_pll_src_dpll_gpll_usb480m_p) = { "dpll", "gpll", "usb480m" };
PNAME(mux_uart0_p) = { "uart0_src", "uart0_frac", "xin24m" };
PNAME(mux_uart1_p) = { "uart1_src", "uart1_frac", "xin24m" };
PNAME(mux_uart2_p) = { "uart2_src", "uart2_frac", "xin24m" };
-PNAME(mux_sclk_macphy_p) = { "sclk_macphy_pre", "ext_gmac" };
+PNAME(mux_sclk_mac_p) = { "sclk_mac_pre", "ext_gmac" };
PNAME(mux_i2s0_pre_p) = { "i2s0_src", "i2s0_frac", "ext_i2s", "xin12m" };
PNAME(mux_i2s_out_p) = { "i2s0_pre", "xin12m" };
-PNAME(mux_i2s1_p) = { "i2s1_src", "i2s1_frac", "xin12m" };
-PNAME(mux_i2s2_p) = { "i2s2_src", "i2s2_frac", "xin12m" };
+PNAME(mux_i2s1_p) = { "i2s1_src", "i2s1_frac", "dummy", "xin12m" };
+PNAME(mux_i2s2_p) = { "i2s2_src", "i2s2_frac", "dummy", "xin12m" };
+PNAME(mux_wifi_src_p) = { "gpll", "xin24m" };
+PNAME(mux_cifout_src_p) = { "hdmiphy", "gpll" };
+PNAME(mux_cifout_p) = { "sclk_cifout_src", "xin24m" };
+PNAME(mux_sclk_cif0_src_p) = { "pclk_vip", "clk_cif0_chn_out", "pclkin_cvbs2cif" };
+PNAME(mux_sclk_cif1_src_p) = { "pclk_vip", "clk_cif1_chn_out", "pclkin_cvbs2cif" };
+PNAME(mux_sclk_cif2_src_p) = { "pclk_vip", "clk_cif2_chn_out", "pclkin_cvbs2cif" };
+PNAME(mux_sclk_cif3_src_p) = { "pclk_vip", "clk_cif3_chn_out", "pclkin_cvbs2cif" };
+PNAME(mux_dsp_src_p) = { "dpll", "gpll", "apll", "usb480m" };
+PNAME(mux_dclk_hdmiphy_p) = { "hdmiphy", "xin24m" };
+PNAME(mux_dclk_vop_p) = { "dclk_hdmiphy", "dclk_vop_src" };
+PNAME(mux_hdmi_cec_src_p) = { "dpll", "gpll", "xin24m" };
+PNAME(mux_cvbs_src_p) = { "apll", "io_cvbs_clkin", "hdmiphy", "gpll" };
static struct rockchip_pll_clock rv1108_pll_clks[] __initdata = {
[apll] = PLL(pll_rk3399, PLL_APLL, "apll", mux_pll_p, 0, RV1108_PLL_CON(0),
- RV1108_PLL_CON(3), 8, 31, 0, rv1108_pll_rates),
+ RV1108_PLL_CON(3), 8, 0, 0, rv1108_pll_rates),
[dpll] = PLL(pll_rk3399, PLL_DPLL, "dpll", mux_pll_p, 0, RV1108_PLL_CON(8),
- RV1108_PLL_CON(11), 8, 31, 0, NULL),
+ RV1108_PLL_CON(11), 8, 1, 0, NULL),
[gpll] = PLL(pll_rk3399, PLL_GPLL, "gpll", mux_pll_p, 0, RV1108_PLL_CON(16),
- RV1108_PLL_CON(19), 8, 31, ROCKCHIP_PLL_SYNC_RATE, rv1108_pll_rates),
+ RV1108_PLL_CON(19), 8, 2, 0, rv1108_pll_rates),
};
#define MFLAGS CLK_MUX_HIWORD_MASK
@@ -170,10 +197,10 @@ static struct rockchip_clk_branch rv1108_i2s2_fracmux __initdata =
RV1108_CLKSEL_CON(7), 12, 2, MFLAGS);
static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
- MUX(0, "hdmi_phy", mux_hdmiphy_phy_p, CLK_SET_RATE_PARENT,
- RV1108_MISC_CON, 13, 2, MFLAGS),
+ MUX(0, "hdmiphy", mux_hdmiphy_phy_p, CLK_SET_RATE_PARENT,
+ RV1108_MISC_CON, 13, 1, MFLAGS),
MUX(0, "usb480m", mux_usb480m_pre_p, CLK_SET_RATE_PARENT,
- RV1108_MISC_CON, 15, 2, MFLAGS),
+ RV1108_MISC_CON, 15, 1, MFLAGS),
/*
* Clock-Architecture Diagram 2
*/
@@ -197,50 +224,212 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
RV1108_CLKGATE_CON(11), 1, GFLAGS),
/* PD_RKVENC */
+ COMPOSITE(0, "aclk_rkvenc_pre", mux_pll_src_4plls_p, 0,
+ RV1108_CLKSEL_CON(37), 6, 2, MFLAGS, 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(8), 8, GFLAGS),
+ FACTOR_GATE(0, "hclk_rkvenc_pre", "aclk_rkvenc_pre", 0, 1, 4,
+ RV1108_CLKGATE_CON(8), 10, GFLAGS),
+ COMPOSITE(SCLK_VENC_CORE, "clk_venc_core", mux_pll_src_4plls_p, 0,
+ RV1108_CLKSEL_CON(37), 14, 2, MFLAGS, 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(8), 9, GFLAGS),
+ GATE(ACLK_RKVENC, "aclk_rkvenc", "aclk_rkvenc_pre", 0,
+ RV1108_CLKGATE_CON(19), 8, GFLAGS),
+ GATE(HCLK_RKVENC, "hclk_rkvenc", "hclk_rkvenc_pre", 0,
+ RV1108_CLKGATE_CON(19), 9, GFLAGS),
+ GATE(0, "aclk_rkvenc_niu", "aclk_rkvenc_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(19), 11, GFLAGS),
+ GATE(0, "hclk_rkvenc_niu", "hclk_rkvenc_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(19), 10, GFLAGS),
/* PD_RKVDEC */
+ COMPOSITE(SCLK_HEVC_CORE, "sclk_hevc_core", mux_pll_src_4plls_p, 0,
+ RV1108_CLKSEL_CON(36), 6, 2, MFLAGS, 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(8), 2, GFLAGS),
+ FACTOR_GATE(0, "hclk_rkvdec_pre", "sclk_hevc_core", 0, 1, 4,
+ RV1108_CLKGATE_CON(8), 10, GFLAGS),
+ COMPOSITE(SCLK_HEVC_CABAC, "clk_hevc_cabac", mux_pll_src_4plls_p, 0,
+ RV1108_CLKSEL_CON(35), 14, 2, MFLAGS, 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(8), 1, GFLAGS),
+
+ COMPOSITE(0, "aclk_rkvdec_pre", mux_pll_src_4plls_p, 0,
+ RV1108_CLKSEL_CON(35), 6, 2, MFLAGS, 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(8), 0, GFLAGS),
+ COMPOSITE(0, "aclk_vpu_pre", mux_pll_src_4plls_p, 0,
+ RV1108_CLKSEL_CON(36), 14, 2, MFLAGS, 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(8), 3, GFLAGS),
+ GATE(ACLK_RKVDEC, "aclk_rkvdec", "aclk_rkvdec_pre", 0,
+ RV1108_CLKGATE_CON(19), 0, GFLAGS),
+ GATE(ACLK_VPU, "aclk_vpu", "aclk_vpu_pre", 0,
+ RV1108_CLKGATE_CON(19), 1, GFLAGS),
+ GATE(HCLK_RKVDEC, "hclk_rkvdec", "hclk_rkvdec_pre", 0,
+ RV1108_CLKGATE_CON(19), 2, GFLAGS),
+ GATE(HCLK_VPU, "hclk_vpu", "hclk_rkvdec_pre", 0,
+ RV1108_CLKGATE_CON(19), 3, GFLAGS),
+ GATE(0, "aclk_rkvdec_niu", "aclk_rkvdec_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(19), 4, GFLAGS),
+ GATE(0, "hclk_rkvdec_niu", "hclk_rkvdec_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(19), 5, GFLAGS),
+ GATE(0, "aclk_vpu_niu", "aclk_vpu_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(19), 6, GFLAGS),
/* PD_PMU_wrapper */
COMPOSITE_NOMUX(0, "pmu_24m_ena", "gpll", CLK_IGNORE_UNUSED,
RV1108_CLKSEL_CON(38), 0, 5, DFLAGS,
RV1108_CLKGATE_CON(8), 12, GFLAGS),
- GATE(0, "pmu", "pmu_24m_ena", CLK_IGNORE_UNUSED,
+ GATE(0, "pclk_pmu", "pmu_24m_ena", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(10), 0, GFLAGS),
- GATE(0, "intmem1", "pmu_24m_ena", CLK_IGNORE_UNUSED,
+ GATE(0, "pclk_intmem1", "pmu_24m_ena", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(10), 1, GFLAGS),
- GATE(0, "gpio0_pmu", "pmu_24m_ena", CLK_IGNORE_UNUSED,
+ GATE(PCLK_GPIO0_PMU, "pclk_gpio0_pmu", "pmu_24m_ena", 0,
RV1108_CLKGATE_CON(10), 2, GFLAGS),
- GATE(0, "pmugrf", "pmu_24m_ena", CLK_IGNORE_UNUSED,
+ GATE(0, "pclk_pmugrf", "pmu_24m_ena", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(10), 3, GFLAGS),
- GATE(0, "pmu_noc", "pmu_24m_ena", CLK_IGNORE_UNUSED,
+ GATE(0, "pclk_pmu_niu", "pmu_24m_ena", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(10), 4, GFLAGS),
- GATE(0, "i2c0_pmu_pclk", "pmu_24m_ena", CLK_IGNORE_UNUSED,
+ GATE(PCLK_I2C0_PMU, "pclk_i2c0_pmu", "pmu_24m_ena", 0,
RV1108_CLKGATE_CON(10), 5, GFLAGS),
- GATE(0, "pwm0_pmu_pclk", "pmu_24m_ena", CLK_IGNORE_UNUSED,
+ GATE(PCLK_PWM0_PMU, "pclk_pwm0_pmu", "pmu_24m_ena", 0,
RV1108_CLKGATE_CON(10), 6, GFLAGS),
- COMPOSITE(0, "pwm0_pmu_clk", mux_pll_src_2plls_p, CLK_IGNORE_UNUSED,
+ COMPOSITE(SCLK_PWM0_PMU, "sclk_pwm0_pmu", mux_pll_src_2plls_p, 0,
RV1108_CLKSEL_CON(12), 7, 1, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(8), 15, GFLAGS),
- COMPOSITE(0, "i2c0_pmu_clk", mux_pll_src_2plls_p, CLK_IGNORE_UNUSED,
+ COMPOSITE(SCLK_I2C0_PMU, "sclk_i2c0_pmu", mux_pll_src_2plls_p, 0,
RV1108_CLKSEL_CON(19), 7, 1, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(8), 14, GFLAGS),
GATE(0, "pvtm_pmu", "xin24m", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(8), 13, GFLAGS),
/*
+ * Clock-Architecture Diagram 3
+ */
+ COMPOSITE(SCLK_WIFI, "sclk_wifi", mux_wifi_src_p, 0,
+ RV1108_CLKSEL_CON(28), 15, 1, MFLAGS, 8, 6, DFLAGS,
+ RV1108_CLKGATE_CON(9), 8, GFLAGS),
+ COMPOSITE_NODIV(0, "sclk_cifout_src", mux_cifout_src_p, 0,
+ RV1108_CLKSEL_CON(40), 8, 1, MFLAGS,
+ RV1108_CLKGATE_CON(9), 11, GFLAGS),
+ COMPOSITE_NOGATE(SCLK_CIFOUT, "sclk_cifout", mux_cifout_p, 0,
+ RV1108_CLKSEL_CON(40), 12, 1, MFLAGS, 0, 5, DFLAGS),
+ COMPOSITE_NOMUX(SCLK_MIPI_CSI_OUT, "sclk_mipi_csi_out", "xin24m", 0,
+ RV1108_CLKSEL_CON(41), 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(9), 12, GFLAGS),
+
+ GATE(0, "pclk_acodecphy", "pclk_top_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(14), 6, GFLAGS),
+ GATE(0, "pclk_usbgrf", "pclk_top_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(14), 14, GFLAGS),
+
+ GATE(ACLK_CIF0, "aclk_cif0", "aclk_vio1_pre", 0,
+ RV1108_CLKGATE_CON(18), 10, GFLAGS),
+ GATE(HCLK_CIF0, "hclk_cif0", "hclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(18), 10, GFLAGS),
+ COMPOSITE_NODIV(SCLK_CIF0, "sclk_cif0", mux_sclk_cif0_src_p, 0,
+ RV1108_CLKSEL_CON(31), 0, 2, MFLAGS,
+ RV1108_CLKGATE_CON(7), 9, GFLAGS),
+ GATE(ACLK_CIF1, "aclk_cif1", "aclk_vio1_pre", 0,
+ RV1108_CLKGATE_CON(17), 6, GFLAGS),
+ GATE(HCLK_CIF1, "hclk_cif1", "hclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(17), 7, GFLAGS),
+ COMPOSITE_NODIV(SCLK_CIF1, "sclk_cif1", mux_sclk_cif1_src_p, 0,
+ RV1108_CLKSEL_CON(31), 2, 2, MFLAGS,
+ RV1108_CLKGATE_CON(7), 10, GFLAGS),
+ GATE(ACLK_CIF2, "aclk_cif2", "aclk_vio1_pre", 0,
+ RV1108_CLKGATE_CON(17), 8, GFLAGS),
+ GATE(HCLK_CIF2, "hclk_cif2", "hclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(17), 9, GFLAGS),
+ COMPOSITE_NODIV(SCLK_CIF2, "sclk_cif2", mux_sclk_cif2_src_p, 0,
+ RV1108_CLKSEL_CON(31), 4, 2, MFLAGS,
+ RV1108_CLKGATE_CON(7), 11, GFLAGS),
+ GATE(ACLK_CIF3, "aclk_cif3", "aclk_vio1_pre", 0,
+ RV1108_CLKGATE_CON(17), 10, GFLAGS),
+ GATE(HCLK_CIF3, "hclk_cif3", "hclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(17), 11, GFLAGS),
+ COMPOSITE_NODIV(SCLK_CIF3, "sclk_cif3", mux_sclk_cif3_src_p, 0,
+ RV1108_CLKSEL_CON(31), 6, 2, MFLAGS,
+ RV1108_CLKGATE_CON(7), 12, GFLAGS),
+ GATE(0, "pclk_cif1to4", "pclk_vip", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(7), 8, GFLAGS),
+
+ /* PD_DSP_wrapper */
+ COMPOSITE(SCLK_DSP, "sclk_dsp", mux_dsp_src_p, 0,
+ RV1108_CLKSEL_CON(42), 8, 2, MFLAGS, 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(9), 0, GFLAGS),
+ GATE(0, "clk_dsp_sys_wd", "sclk_dsp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 0, GFLAGS),
+ GATE(0, "clk_dsp_epp_wd", "sclk_dsp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 1, GFLAGS),
+ GATE(0, "clk_dsp_edp_wd", "sclk_dsp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 2, GFLAGS),
+ GATE(0, "clk_dsp_iop_wd", "sclk_dsp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 3, GFLAGS),
+ GATE(0, "clk_dsp_free", "sclk_dsp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 13, GFLAGS),
+ COMPOSITE_NOMUX(SCLK_DSP_IOP, "sclk_dsp_iop", "sclk_dsp", 0,
+ RV1108_CLKSEL_CON(44), 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(9), 1, GFLAGS),
+ COMPOSITE_NOMUX(SCLK_DSP_EPP, "sclk_dsp_epp", "sclk_dsp", 0,
+ RV1108_CLKSEL_CON(44), 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(9), 2, GFLAGS),
+ COMPOSITE_NOMUX(SCLK_DSP_EDP, "sclk_dsp_edp", "sclk_dsp", 0,
+ RV1108_CLKSEL_CON(45), 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(9), 3, GFLAGS),
+ COMPOSITE_NOMUX(SCLK_DSP_EDAP, "sclk_dsp_edap", "sclk_dsp", 0,
+ RV1108_CLKSEL_CON(45), 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(9), 4, GFLAGS),
+ GATE(0, "pclk_dsp_iop_niu", "sclk_dsp_iop", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 4, GFLAGS),
+ GATE(0, "aclk_dsp_epp_niu", "sclk_dsp_epp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 5, GFLAGS),
+ GATE(0, "aclk_dsp_edp_niu", "sclk_dsp_edp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 6, GFLAGS),
+ GATE(0, "pclk_dsp_dbg_niu", "sclk_dsp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 7, GFLAGS),
+ GATE(0, "aclk_dsp_edap_niu", "sclk_dsp_edap", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 14, GFLAGS),
+ COMPOSITE_NOMUX(SCLK_DSP_PFM, "sclk_dsp_pfm", "sclk_dsp", 0,
+ RV1108_CLKSEL_CON(43), 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(9), 5, GFLAGS),
+ COMPOSITE_NOMUX(PCLK_DSP_CFG, "pclk_dsp_cfg", "sclk_dsp", 0,
+ RV1108_CLKSEL_CON(43), 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(9), 6, GFLAGS),
+ GATE(0, "pclk_dsp_cfg_niu", "pclk_dsp_cfg", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 8, GFLAGS),
+ GATE(0, "pclk_dsp_pfm_mon", "pclk_dsp_cfg", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 9, GFLAGS),
+ GATE(0, "pclk_intc", "pclk_dsp_cfg", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 10, GFLAGS),
+ GATE(0, "pclk_dsp_grf", "pclk_dsp_cfg", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 11, GFLAGS),
+ GATE(0, "pclk_mailbox", "pclk_dsp_cfg", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 12, GFLAGS),
+ GATE(0, "aclk_dsp_epp_perf", "sclk_dsp_epp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(16), 15, GFLAGS),
+ GATE(0, "aclk_dsp_edp_perf", "sclk_dsp_edp", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(11), 8, GFLAGS),
+
+ /*
* Clock-Architecture Diagram 4
*/
- COMPOSITE(0, "aclk_vio0_2wrap_occ", mux_pll_src_4plls_p, CLK_IGNORE_UNUSED,
+ COMPOSITE(0, "aclk_vio0_pre", mux_pll_src_4plls_p, CLK_IGNORE_UNUSED,
RV1108_CLKSEL_CON(28), 6, 2, MFLAGS, 0, 5, DFLAGS,
RV1108_CLKGATE_CON(6), 0, GFLAGS),
- GATE(0, "aclk_vio0_pre", "aclk_vio0_2wrap_occ", CLK_IGNORE_UNUSED,
+ GATE(ACLK_VIO0, "aclk_vio0", "aclk_vio0_pre", 0,
RV1108_CLKGATE_CON(17), 0, GFLAGS),
COMPOSITE_NOMUX(0, "hclk_vio_pre", "aclk_vio0_pre", 0,
RV1108_CLKSEL_CON(29), 0, 5, DFLAGS,
RV1108_CLKGATE_CON(7), 2, GFLAGS),
+ GATE(HCLK_VIO, "hclk_vio", "hclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(17), 2, GFLAGS),
COMPOSITE_NOMUX(0, "pclk_vio_pre", "aclk_vio0_pre", 0,
RV1108_CLKSEL_CON(29), 8, 5, DFLAGS,
RV1108_CLKGATE_CON(7), 3, GFLAGS),
+ GATE(PCLK_VIO, "pclk_vio", "pclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(17), 3, GFLAGS),
+ COMPOSITE(0, "aclk_vio1_pre", mux_pll_src_4plls_p, CLK_IGNORE_UNUSED,
+ RV1108_CLKSEL_CON(28), 14, 2, MFLAGS, 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(6), 1, GFLAGS),
+ GATE(ACLK_VIO1, "aclk_vio1", "aclk_vio1_pre", 0,
+ RV1108_CLKGATE_CON(17), 1, GFLAGS),
INVERTER(0, "pclk_vip", "ext_vip",
RV1108_CLKSEL_CON(31), 8, IFLAGS),
@@ -252,8 +441,63 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
RV1108_CLKGATE_CON(6), 5, GFLAGS),
GATE(0, "dclk_hdmiphy_src_dpll", "dpll", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(6), 4, GFLAGS),
- COMPOSITE_NOGATE(0, "dclk_hdmiphy", mux_dclk_hdmiphy_pre_p, 0,
- RV1108_CLKSEL_CON(32), 6, 2, MFLAGS, 8, 6, DFLAGS),
+ COMPOSITE_NOGATE(0, "dclk_hdmiphy_pre", mux_dclk_hdmiphy_pre_p, 0,
+ RV1108_CLKSEL_CON(32), 6, 1, MFLAGS, 8, 6, DFLAGS),
+ COMPOSITE_NOGATE(DCLK_VOP_SRC, "dclk_vop_src", mux_dclk_hdmiphy_pre_p, 0,
+ RV1108_CLKSEL_CON(32), 6, 1, MFLAGS, 0, 6, DFLAGS),
+ MUX(DCLK_HDMIPHY, "dclk_hdmiphy", mux_dclk_hdmiphy_p, CLK_SET_RATE_PARENT,
+ RV1108_CLKSEL_CON(32), 15, 1, MFLAGS),
+ MUX(DCLK_VOP, "dclk_vop", mux_dclk_vop_p, CLK_SET_RATE_PARENT,
+ RV1108_CLKSEL_CON(32), 7, 1, MFLAGS),
+ GATE(ACLK_VOP, "aclk_vop", "aclk_vio0_pre", 0,
+ RV1108_CLKGATE_CON(18), 0, GFLAGS),
+ GATE(HCLK_VOP, "hclk_vop", "hclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(18), 1, GFLAGS),
+ GATE(ACLK_IEP, "aclk_iep", "aclk_vio0_pre", 0,
+ RV1108_CLKGATE_CON(18), 2, GFLAGS),
+ GATE(HCLK_IEP, "hclk_iep", "hclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(18), 3, GFLAGS),
+
+ GATE(ACLK_RGA, "aclk_rga", "aclk_vio1_pre", 0,
+ RV1108_CLKGATE_CON(18), 4, GFLAGS),
+ GATE(HCLK_RGA, "hclk_rga", "hclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(18), 5, GFLAGS),
+ COMPOSITE(SCLK_RGA, "sclk_rga", mux_pll_src_4plls_p, 0,
+ RV1108_CLKSEL_CON(33), 6, 2, MFLAGS, 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(6), 6, GFLAGS),
+
+ COMPOSITE(SCLK_CVBS_HOST, "sclk_cvbs_host", mux_cvbs_src_p, 0,
+ RV1108_CLKSEL_CON(33), 13, 2, MFLAGS, 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(6), 7, GFLAGS),
+ FACTOR(0, "sclk_cvbs_27m", "sclk_cvbs_host", 0, 1, 2),
+
+ GATE(SCLK_HDMI_SFR, "sclk_hdmi_sfr", "xin24m", 0,
+ RV1108_CLKGATE_CON(6), 8, GFLAGS),
+
+ COMPOSITE(SCLK_HDMI_CEC, "sclk_hdmi_cec", mux_hdmi_cec_src_p, 0,
+ RV1108_CLKSEL_CON(34), 14, 2, MFLAGS, 0, 14, DFLAGS,
+ RV1108_CLKGATE_CON(6), 9, GFLAGS),
+ GATE(PCLK_MIPI_DSI, "pclk_mipi_dsi", "pclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(18), 8, GFLAGS),
+ GATE(PCLK_HDMI_CTRL, "pclk_hdmi_ctrl", "pclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(18), 9, GFLAGS),
+
+ GATE(ACLK_ISP, "aclk_isp", "aclk_vio1_pre", 0,
+ RV1108_CLKGATE_CON(18), 12, GFLAGS),
+ GATE(HCLK_ISP, "hclk_isp", "hclk_vio_pre", 0,
+ RV1108_CLKGATE_CON(18), 11, GFLAGS),
+ COMPOSITE(SCLK_ISP, "sclk_isp", mux_pll_src_4plls_p, 0,
+ RV1108_CLKSEL_CON(30), 14, 2, MFLAGS, 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(6), 3, GFLAGS),
+
+ GATE(0, "clk_dsiphy24m", "xin24m", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(9), 10, GFLAGS),
+ GATE(0, "pclk_vdacphy", "pclk_top_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(14), 9, GFLAGS),
+ GATE(0, "pclk_mipi_dsiphy", "pclk_top_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(14), 11, GFLAGS),
+ GATE(0, "pclk_mipi_csiphy", "pclk_top_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(14), 12, GFLAGS),
/*
* Clock-Architecture Diagram 5
@@ -261,10 +505,11 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
FACTOR(0, "xin12m", "xin24m", 0, 1, 2),
- COMPOSITE(0, "i2s0_src", mux_pll_src_2plls_p, 0,
+
+ COMPOSITE(SCLK_I2S0_SRC, "i2s0_src", mux_pll_src_2plls_p, 0,
RV1108_CLKSEL_CON(5), 8, 1, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(2), 0, GFLAGS),
- COMPOSITE_FRACMUX(0, "i2s1_frac", "i2s1_src", CLK_SET_RATE_PARENT,
+ COMPOSITE_FRACMUX(0, "i2s0_frac", "i2s0_src", CLK_SET_RATE_PARENT,
RV1108_CLKSEL_CON(8), 0,
RV1108_CLKGATE_CON(2), 1, GFLAGS,
&rv1108_i2s0_fracmux),
@@ -274,7 +519,7 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
RV1108_CLKSEL_CON(5), 15, 1, MFLAGS,
RV1108_CLKGATE_CON(2), 3, GFLAGS),
- COMPOSITE(0, "i2s1_src", mux_pll_src_2plls_p, 0,
+ COMPOSITE(SCLK_I2S1_SRC, "i2s1_src", mux_pll_src_2plls_p, 0,
RV1108_CLKSEL_CON(6), 8, 1, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(2), 4, GFLAGS),
COMPOSITE_FRACMUX(0, "i2s1_frac", "i2s1_src", CLK_SET_RATE_PARENT,
@@ -284,7 +529,7 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
GATE(SCLK_I2S1, "sclk_i2s1", "i2s1_pre", CLK_SET_RATE_PARENT,
RV1108_CLKGATE_CON(2), 6, GFLAGS),
- COMPOSITE(0, "i2s2_src", mux_pll_src_2plls_p, 0,
+ COMPOSITE(SCLK_I2S2_SRC, "i2s2_src", mux_pll_src_2plls_p, 0,
RV1108_CLKSEL_CON(7), 8, 1, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(3), 8, GFLAGS),
COMPOSITE_FRACMUX(0, "i2s2_frac", "i2s2_src", CLK_SET_RATE_PARENT,
@@ -303,32 +548,53 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
RV1108_CLKGATE_CON(1), 2, GFLAGS),
COMPOSITE_NOGATE(ACLK_PRE, "aclk_bus_pre", mux_aclk_bus_src_p, 0,
RV1108_CLKSEL_CON(2), 8, 2, MFLAGS, 0, 5, DFLAGS),
- COMPOSITE_NOMUX(0, "hclk_bus_pre", "aclk_bus_2wrap_occ", 0,
+ COMPOSITE_NOMUX(HCLK_BUS, "hclk_bus_pre", "aclk_bus_pre", 0,
RV1108_CLKSEL_CON(3), 0, 5, DFLAGS,
RV1108_CLKGATE_CON(1), 4, GFLAGS),
- COMPOSITE_NOMUX(0, "pclken_bus", "aclk_bus_2wrap_occ", 0,
+ COMPOSITE_NOMUX(0, "pclk_bus_pre", "aclk_bus_pre", 0,
RV1108_CLKSEL_CON(3), 8, 5, DFLAGS,
RV1108_CLKGATE_CON(1), 5, GFLAGS),
- GATE(0, "pclk_bus_pre", "pclken_bus", CLK_IGNORE_UNUSED,
+ GATE(PCLK_BUS, "pclk_bus", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(1), 6, GFLAGS),
- GATE(0, "pclk_top_pre", "pclken_bus", CLK_IGNORE_UNUSED,
+ GATE(0, "pclk_top_pre", "pclk_bus_pre", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(1), 7, GFLAGS),
- GATE(0, "pclk_ddr_pre", "pclken_bus", CLK_IGNORE_UNUSED,
+ GATE(0, "pclk_ddr_pre", "pclk_bus_pre", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(1), 8, GFLAGS),
- GATE(0, "clk_timer0", "mux_pll_p", CLK_IGNORE_UNUSED,
+ GATE(SCLK_TIMER0, "clk_timer0", "xin24m", 0,
RV1108_CLKGATE_CON(1), 9, GFLAGS),
- GATE(0, "clk_timer1", "mux_pll_p", CLK_IGNORE_UNUSED,
+ GATE(SCLK_TIMER1, "clk_timer1", "xin24m", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(1), 10, GFLAGS),
- GATE(0, "pclk_timer", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_TIMER, "pclk_timer", "pclk_bus_pre", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(13), 4, GFLAGS),
- COMPOSITE(0, "uart0_src", mux_pll_src_dpll_gpll_usb480m_p, CLK_IGNORE_UNUSED,
+ GATE(HCLK_I2S0_8CH, "hclk_i2s0_8ch", "hclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(12), 7, GFLAGS),
+ GATE(HCLK_I2S1_2CH, "hclk_i2s1_2ch", "hclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(12), 8, GFLAGS),
+ GATE(HCLK_I2S2_2CH, "hclk_i2s2_2ch", "hclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(12), 9, GFLAGS),
+
+ GATE(HCLK_CRYPTO_MST, "hclk_crypto_mst", "hclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(12), 10, GFLAGS),
+ GATE(HCLK_CRYPTO_SLV, "hclk_crypto_slv", "hclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(12), 11, GFLAGS),
+ COMPOSITE(SCLK_CRYPTO, "sclk_crypto", mux_pll_src_2plls_p, 0,
+ RV1108_CLKSEL_CON(11), 7, 1, MFLAGS, 0, 5, DFLAGS,
+ RV1108_CLKGATE_CON(2), 12, GFLAGS),
+
+ COMPOSITE(SCLK_SPI, "sclk_spi", mux_pll_src_2plls_p, 0,
+ RV1108_CLKSEL_CON(11), 15, 1, MFLAGS, 8, 5, DFLAGS,
+ RV1108_CLKGATE_CON(3), 0, GFLAGS),
+ GATE(PCLK_SPI, "pclk_spi", "pclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(13), 5, GFLAGS),
+
+ COMPOSITE(SCLK_UART0_SRC, "uart0_src", mux_pll_src_dpll_gpll_usb480m_p, CLK_IGNORE_UNUSED,
RV1108_CLKSEL_CON(13), 12, 2, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(3), 1, GFLAGS),
- COMPOSITE(0, "uart1_src", mux_pll_src_dpll_gpll_usb480m_p, CLK_IGNORE_UNUSED,
+ COMPOSITE(SCLK_UART1_SRC, "uart1_src", mux_pll_src_dpll_gpll_usb480m_p, CLK_IGNORE_UNUSED,
RV1108_CLKSEL_CON(14), 12, 2, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(3), 3, GFLAGS),
- COMPOSITE(0, "uart21_src", mux_pll_src_dpll_gpll_usb480m_p, CLK_IGNORE_UNUSED,
+ COMPOSITE(SCLK_UART2_SRC, "uart2_src", mux_pll_src_dpll_gpll_usb480m_p, CLK_IGNORE_UNUSED,
RV1108_CLKSEL_CON(15), 12, 2, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(3), 5, GFLAGS),
@@ -344,44 +610,58 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
RV1108_CLKSEL_CON(18), 0,
RV1108_CLKGATE_CON(3), 6, GFLAGS,
&rv1108_uart2_fracmux),
- GATE(PCLK_UART0, "pclk_uart0", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_UART0, "pclk_uart0", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 10, GFLAGS),
- GATE(PCLK_UART1, "pclk_uart1", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_UART1, "pclk_uart1", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 11, GFLAGS),
- GATE(PCLK_UART2, "pclk_uart2", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_UART2, "pclk_uart2", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 12, GFLAGS),
- COMPOSITE(0, "clk_i2c1", mux_pll_src_2plls_p, CLK_IGNORE_UNUSED,
- RV1108_CLKSEL_CON(19), 15, 2, MFLAGS, 8, 7, DFLAGS,
+ COMPOSITE(SCLK_I2C1, "clk_i2c1", mux_pll_src_2plls_p, 0,
+ RV1108_CLKSEL_CON(19), 15, 1, MFLAGS, 8, 7, DFLAGS,
RV1108_CLKGATE_CON(3), 7, GFLAGS),
- COMPOSITE(0, "clk_i2c2", mux_pll_src_2plls_p, CLK_IGNORE_UNUSED,
- RV1108_CLKSEL_CON(20), 7, 2, MFLAGS, 0, 7, DFLAGS,
+ COMPOSITE(SCLK_I2C2, "clk_i2c2", mux_pll_src_2plls_p, 0,
+ RV1108_CLKSEL_CON(20), 7, 1, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(3), 8, GFLAGS),
- COMPOSITE(0, "clk_i2c3", mux_pll_src_2plls_p, CLK_IGNORE_UNUSED,
- RV1108_CLKSEL_CON(20), 15, 2, MFLAGS, 8, 7, DFLAGS,
+ COMPOSITE(SCLK_I2C3, "clk_i2c3", mux_pll_src_2plls_p, 0,
+ RV1108_CLKSEL_CON(20), 15, 1, MFLAGS, 8, 7, DFLAGS,
RV1108_CLKGATE_CON(3), 9, GFLAGS),
- GATE(0, "pclk_i2c1", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_I2C1, "pclk_i2c1", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 0, GFLAGS),
- GATE(0, "pclk_i2c2", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_I2C2, "pclk_i2c2", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 1, GFLAGS),
- GATE(0, "pclk_i2c3", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_I2C3, "pclk_i2c3", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 2, GFLAGS),
- COMPOSITE(0, "clk_pwm1", mux_pll_src_2plls_p, CLK_IGNORE_UNUSED,
+ COMPOSITE(SCLK_PWM, "clk_pwm", mux_pll_src_2plls_p, 0,
RV1108_CLKSEL_CON(12), 15, 2, MFLAGS, 8, 7, DFLAGS,
RV1108_CLKGATE_CON(3), 10, GFLAGS),
- GATE(0, "pclk_pwm1", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_PWM, "pclk_pwm", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 6, GFLAGS),
- GATE(0, "pclk_wdt", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_WDT, "pclk_wdt", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 3, GFLAGS),
- GATE(0, "pclk_gpio1", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_GPIO1, "pclk_gpio1", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 7, GFLAGS),
- GATE(0, "pclk_gpio2", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_GPIO2, "pclk_gpio2", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 8, GFLAGS),
- GATE(0, "pclk_gpio3", "pclk_bus_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_GPIO3, "pclk_gpio3", "pclk_bus_pre", 0,
RV1108_CLKGATE_CON(13), 9, GFLAGS),
GATE(0, "pclk_grf", "pclk_bus_pre", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(14), 0, GFLAGS),
+ GATE(PCLK_EFUSE0, "pclk_efuse0", "pclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(12), 12, GFLAGS),
+ GATE(PCLK_EFUSE1, "pclk_efuse1", "pclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(12), 13, GFLAGS),
+ GATE(PCLK_TSADC, "pclk_tsadc", "pclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(13), 13, GFLAGS),
+ COMPOSITE_NOMUX(SCLK_TSADC, "sclk_tsadc", "xin24m", 0,
+ RV1108_CLKSEL_CON(21), 0, 10, DFLAGS,
+ RV1108_CLKGATE_CON(3), 11, GFLAGS),
+ GATE(PCLK_SARADC, "pclk_saradc", "pclk_bus_pre", 0,
+ RV1108_CLKGATE_CON(13), 14, GFLAGS),
+ COMPOSITE_NOMUX(SCLK_SARADC, "sclk_saradc", "xin24m", 0,
+ RV1108_CLKSEL_CON(22), 0, 10, DFLAGS,
+ RV1108_CLKGATE_CON(3), 12, GFLAGS),
GATE(ACLK_DMAC, "aclk_dmac", "aclk_bus_pre", 0,
RV1108_CLKGATE_CON(12), 2, GFLAGS),
@@ -397,18 +677,24 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
RV1108_CLKGATE_CON(0), 9, GFLAGS),
GATE(0, "gpll_ddr", "gpll", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(0), 10, GFLAGS),
- COMPOSITE(0, "ddrphy4x", mux_ddrphy_p, CLK_IGNORE_UNUSED,
+ COMPOSITE_NOGATE(0, "clk_ddrphy_src", mux_ddrphy_p, CLK_IGNORE_UNUSED,
RV1108_CLKSEL_CON(4), 8, 2, MFLAGS, 0, 3,
- DFLAGS | CLK_DIVIDER_POWER_OF_TWO,
+ DFLAGS | CLK_DIVIDER_POWER_OF_TWO),
+ FACTOR(0, "clk_ddr", "clk_ddrphy_src", 0, 1, 2),
+ GATE(0, "clk_ddrphy4x", "clk_ddr", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(10), 9, GFLAGS),
- GATE(0, "ddrupctl", "ddrphy_pre", CLK_IGNORE_UNUSED,
+ GATE(0, "pclk_ddrupctl", "pclk_ddr_pre", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(12), 4, GFLAGS),
- GATE(0, "ddrc", "ddrphy", CLK_IGNORE_UNUSED,
+ GATE(0, "nclk_ddrupctl", "clk_ddr", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(12), 5, GFLAGS),
- GATE(0, "ddrmon", "ddrphy_pre", CLK_IGNORE_UNUSED,
+ GATE(0, "pclk_ddrmon", "pclk_ddr_pre", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(12), 6, GFLAGS),
GATE(0, "timer_clk", "xin24m", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(0), 11, GFLAGS),
+ GATE(0, "pclk_mschniu", "pclk_ddr_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(14), 2, GFLAGS),
+ GATE(0, "pclk_ddrphy", "pclk_ddr_pre", CLK_IGNORE_UNUSED,
+ RV1108_CLKGATE_CON(14), 4, GFLAGS),
/*
* Clock-Architecture Diagram 6
@@ -418,23 +704,23 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
COMPOSITE_NOMUX(0, "pclk_periph_pre", "gpll", 0,
RV1108_CLKSEL_CON(23), 10, 5, DFLAGS,
RV1108_CLKGATE_CON(4), 5, GFLAGS),
- GATE(0, "pclk_periph", "pclk_periph_pre", CLK_IGNORE_UNUSED,
+ GATE(PCLK_PERI, "pclk_periph", "pclk_periph_pre", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(15), 13, GFLAGS),
COMPOSITE_NOMUX(0, "hclk_periph_pre", "gpll", 0,
RV1108_CLKSEL_CON(23), 5, 5, DFLAGS,
RV1108_CLKGATE_CON(4), 4, GFLAGS),
- GATE(0, "hclk_periph", "hclk_periph_pre", CLK_IGNORE_UNUSED,
+ GATE(HCLK_PERI, "hclk_periph", "hclk_periph_pre", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(15), 12, GFLAGS),
GATE(0, "aclk_peri_src_dpll", "dpll", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(4), 1, GFLAGS),
GATE(0, "aclk_peri_src_gpll", "gpll", CLK_IGNORE_UNUSED,
RV1108_CLKGATE_CON(4), 2, GFLAGS),
- COMPOSITE(0, "aclk_periph", mux_aclk_peri_src_p, CLK_IGNORE_UNUSED,
- RV1108_CLKSEL_CON(23), 15, 2, MFLAGS, 0, 5, DFLAGS,
+ COMPOSITE(ACLK_PERI, "aclk_periph", mux_aclk_peri_src_p, 0,
+ RV1108_CLKSEL_CON(23), 15, 1, MFLAGS, 0, 5, DFLAGS,
RV1108_CLKGATE_CON(15), 11, GFLAGS),
- COMPOSITE(SCLK_SDMMC, "sclk_sdmmc0", mux_mmc_src_p, 0,
+ COMPOSITE(SCLK_SDMMC, "sclk_sdmmc", mux_mmc_src_p, 0,
RV1108_CLKSEL_CON(25), 8, 2, MFLAGS, 0, 8, DFLAGS,
RV1108_CLKGATE_CON(5), 0, GFLAGS),
@@ -454,23 +740,31 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
GATE(HCLK_EMMC, "hclk_emmc", "hclk_periph", 0, RV1108_CLKGATE_CON(15), 2, GFLAGS),
COMPOSITE(SCLK_NANDC, "sclk_nandc", mux_pll_src_2plls_p, 0,
- RV1108_CLKSEL_CON(27), 14, 2, MFLAGS, 8, 5, DFLAGS,
+ RV1108_CLKSEL_CON(27), 14, 1, MFLAGS, 8, 5, DFLAGS,
RV1108_CLKGATE_CON(5), 3, GFLAGS),
GATE(HCLK_NANDC, "hclk_nandc", "hclk_periph", 0, RV1108_CLKGATE_CON(15), 3, GFLAGS),
+ GATE(HCLK_HOST0, "hclk_host0", "hclk_periph", 0, RV1108_CLKGATE_CON(15), 6, GFLAGS),
+ GATE(0, "hclk_host0_arb", "hclk_periph", CLK_IGNORE_UNUSED, RV1108_CLKGATE_CON(15), 7, GFLAGS),
+ GATE(HCLK_OTG, "hclk_otg", "hclk_periph", 0, RV1108_CLKGATE_CON(15), 8, GFLAGS),
+ GATE(0, "hclk_otg_pmu", "hclk_periph", CLK_IGNORE_UNUSED, RV1108_CLKGATE_CON(15), 9, GFLAGS),
+ GATE(SCLK_USBPHY, "clk_usbphy", "xin24m", CLK_IGNORE_UNUSED, RV1108_CLKGATE_CON(5), 5, GFLAGS),
+
COMPOSITE(SCLK_SFC, "sclk_sfc", mux_pll_src_2plls_p, 0,
- RV1108_CLKSEL_CON(27), 7, 2, MFLAGS, 0, 7, DFLAGS,
+ RV1108_CLKSEL_CON(27), 7, 1, MFLAGS, 0, 7, DFLAGS,
RV1108_CLKGATE_CON(5), 4, GFLAGS),
GATE(HCLK_SFC, "hclk_sfc", "hclk_periph", 0, RV1108_CLKGATE_CON(15), 10, GFLAGS),
- COMPOSITE(0, "sclk_macphy_pre", mux_pll_src_apll_gpll_p, 0,
- RV1108_CLKSEL_CON(24), 12, 2, MFLAGS, 0, 5, DFLAGS,
+ COMPOSITE(SCLK_MAC_PRE, "sclk_mac_pre", mux_pll_src_apll_gpll_p, 0,
+ RV1108_CLKSEL_CON(24), 12, 1, MFLAGS, 0, 5, DFLAGS,
RV1108_CLKGATE_CON(4), 10, GFLAGS),
- MUX(0, "sclk_macphy", mux_sclk_macphy_p, CLK_SET_RATE_PARENT,
- RV1108_CLKSEL_CON(24), 8, 2, MFLAGS),
- GATE(0, "sclk_macphy_rx", "sclk_macphy", 0, RV1108_CLKGATE_CON(4), 8, GFLAGS),
- GATE(0, "sclk_mac_ref", "sclk_macphy", 0, RV1108_CLKGATE_CON(4), 6, GFLAGS),
- GATE(0, "sclk_mac_refout", "sclk_macphy", 0, RV1108_CLKGATE_CON(4), 7, GFLAGS),
+ MUX(SCLK_MAC, "sclk_mac", mux_sclk_mac_p, CLK_SET_RATE_PARENT,
+ RV1108_CLKSEL_CON(24), 8, 1, MFLAGS),
+ GATE(SCLK_MAC_RX, "sclk_mac_rx", "sclk_mac", 0, RV1108_CLKGATE_CON(4), 8, GFLAGS),
+ GATE(SCLK_MAC_REF, "sclk_mac_ref", "sclk_mac", 0, RV1108_CLKGATE_CON(4), 6, GFLAGS),
+ GATE(SCLK_MAC_REFOUT, "sclk_mac_refout", "sclk_mac", 0, RV1108_CLKGATE_CON(4), 7, GFLAGS),
+ GATE(ACLK_GMAC, "aclk_gmac", "aclk_periph", 0, RV1108_CLKGATE_CON(15), 4, GFLAGS),
+ GATE(PCLK_GMAC, "pclk_gmac", "pclk_periph", 0, RV1108_CLKGATE_CON(15), 5, GFLAGS),
MMC(SCLK_SDMMC_DRV, "sdmmc_drv", "sclk_sdmmc", RV1108_SDMMC_CON0, 1),
MMC(SCLK_SDMMC_SAMPLE, "sdmmc_sample", "sclk_sdmmc", RV1108_SDMMC_CON1, 1),
@@ -484,10 +778,16 @@ static struct rockchip_clk_branch rv1108_clk_branches[] __initdata = {
static const char *const rv1108_critical_clocks[] __initconst = {
"aclk_core",
- "aclk_bus_src_gpll",
+ "aclk_bus",
+ "hclk_bus",
+ "pclk_bus",
"aclk_periph",
"hclk_periph",
"pclk_periph",
+ "nclk_ddrupctl",
+ "pclk_ddrmon",
+ "pclk_acodecphy",
+ "pclk_pmu",
};
static void __init rv1108_clk_init(struct device_node *np)
diff --git a/drivers/clk/rockchip/clk.c b/drivers/clk/rockchip/clk.c
index fe1d393cf678..35dbd63c2f49 100644
--- a/drivers/clk/rockchip/clk.c
+++ b/drivers/clk/rockchip/clk.c
@@ -29,6 +29,7 @@
#include <linux/mfd/syscon.h>
#include <linux/regmap.h>
#include <linux/reboot.h>
+#include <linux/rational.h>
#include "clk.h"
/**
@@ -164,6 +165,40 @@ static int rockchip_clk_frac_notifier_cb(struct notifier_block *nb,
return notifier_from_errno(ret);
}
+/**
+ * fractional divider must set that denominator is 20 times larger than
+ * numerator to generate precise clock frequency.
+ */
+static void rockchip_fractional_approximation(struct clk_hw *hw,
+ unsigned long rate, unsigned long *parent_rate,
+ unsigned long *m, unsigned long *n)
+{
+ struct clk_fractional_divider *fd = to_clk_fd(hw);
+ unsigned long p_rate, p_parent_rate;
+ struct clk_hw *p_parent;
+ unsigned long scale;
+
+ p_rate = clk_hw_get_rate(clk_hw_get_parent(hw));
+ if ((rate * 20 > p_rate) && (p_rate % rate != 0)) {
+ p_parent = clk_hw_get_parent(clk_hw_get_parent(hw));
+ p_parent_rate = clk_hw_get_rate(p_parent);
+ *parent_rate = p_parent_rate;
+ }
+
+ /*
+ * Get rate closer to *parent_rate to guarantee there is no overflow
+ * for m and n. In the result it will be the nearest rate left shifted
+ * by (scale - fd->nwidth) bits.
+ */
+ scale = fls_long(*parent_rate / rate - 1);
+ if (scale > fd->nwidth)
+ rate <<= scale - fd->nwidth;
+
+ rational_best_approximation(rate, *parent_rate,
+ GENMASK(fd->mwidth - 1, 0), GENMASK(fd->nwidth - 1, 0),
+ m, n);
+}
+
static struct clk *rockchip_clk_register_frac_branch(
struct rockchip_clk_provider *ctx, const char *name,
const char *const *parent_names, u8 num_parents,
@@ -210,6 +245,7 @@ static struct clk *rockchip_clk_register_frac_branch(
div->nwidth = 16;
div->nmask = GENMASK(div->nwidth - 1, 0) << div->nshift;
div->lock = lock;
+ div->approximation = rockchip_fractional_approximation;
div_ops = &clk_fractional_divider_ops;
clk = clk_register_composite(NULL, name, parent_names, num_parents,
diff --git a/drivers/clk/samsung/clk-exynos-audss.c b/drivers/clk/samsung/clk-exynos-audss.c
index 1fab56f396d4..b117783ed404 100644
--- a/drivers/clk/samsung/clk-exynos-audss.c
+++ b/drivers/clk/samsung/clk-exynos-audss.c
@@ -180,7 +180,7 @@ static int exynos_audss_clk_probe(struct platform_device *pdev)
}
clk_table[EXYNOS_MOUT_AUDSS] = clk_hw_register_mux(NULL, "mout_audss",
mout_audss_p, ARRAY_SIZE(mout_audss_p),
- CLK_SET_RATE_NO_REPARENT,
+ CLK_SET_RATE_NO_REPARENT | CLK_SET_RATE_PARENT,
reg_base + ASS_CLK_SRC, 0, 1, 0, &lock);
cdclk = devm_clk_get(&pdev->dev, "cdclk");
@@ -195,11 +195,11 @@ static int exynos_audss_clk_probe(struct platform_device *pdev)
reg_base + ASS_CLK_SRC, 2, 2, 0, &lock);
clk_table[EXYNOS_DOUT_SRP] = clk_hw_register_divider(NULL, "dout_srp",
- "mout_audss", 0, reg_base + ASS_CLK_DIV, 0, 4,
- 0, &lock);
+ "mout_audss", CLK_SET_RATE_PARENT,
+ reg_base + ASS_CLK_DIV, 0, 4, 0, &lock);
clk_table[EXYNOS_DOUT_AUD_BUS] = clk_hw_register_divider(NULL,
- "dout_aud_bus", "dout_srp", 0,
+ "dout_aud_bus", "dout_srp", CLK_SET_RATE_PARENT,
reg_base + ASS_CLK_DIV, 4, 4, 0, &lock);
clk_table[EXYNOS_DOUT_I2S] = clk_hw_register_divider(NULL, "dout_i2s",
diff --git a/drivers/clk/samsung/clk-exynos5420.c b/drivers/clk/samsung/clk-exynos5420.c
index 9a6476aa7d81..25601967d1cd 100644
--- a/drivers/clk/samsung/clk-exynos5420.c
+++ b/drivers/clk/samsung/clk-exynos5420.c
@@ -537,8 +537,8 @@ static const struct samsung_mux_clock exynos5800_mux_clks[] __initconst = {
MUX(CLK_MOUT_MX_MSPLL_CCORE, "mout_mx_mspll_ccore",
mout_mx_mspll_ccore_p, SRC_TOP7, 16, 2),
- MUX(CLK_MOUT_MAU_EPLL, "mout_mau_epll_clk", mout_mau_epll_clk_5800_p,
- SRC_TOP7, 20, 2),
+ MUX_F(CLK_MOUT_MAU_EPLL, "mout_mau_epll_clk", mout_mau_epll_clk_5800_p,
+ SRC_TOP7, 20, 2, CLK_SET_RATE_PARENT, 0),
MUX(0, "sclk_bpll", mout_bpll_p, SRC_TOP7, 24, 1),
MUX(0, "mout_epll2", mout_epll2_5800_p, SRC_TOP7, 28, 1),
@@ -547,8 +547,8 @@ static const struct samsung_mux_clock exynos5800_mux_clks[] __initconst = {
MUX(0, "mout_aclk432_cam", mout_group6_5800_p, SRC_TOP8, 24, 2),
MUX(0, "mout_aclk432_scaler", mout_group6_5800_p, SRC_TOP8, 28, 2),
- MUX(CLK_MOUT_USER_MAU_EPLL, "mout_user_mau_epll", mout_group16_5800_p,
- SRC_TOP9, 8, 1),
+ MUX_F(CLK_MOUT_USER_MAU_EPLL, "mout_user_mau_epll", mout_group16_5800_p,
+ SRC_TOP9, 8, 1, CLK_SET_RATE_PARENT, 0),
MUX(0, "mout_user_aclk550_cam", mout_group15_5800_p,
SRC_TOP9, 16, 1),
MUX(0, "mout_user_aclkfl1_550_cam", mout_group13_5800_p,
@@ -590,6 +590,8 @@ static const struct samsung_gate_clock exynos5800_gate_clks[] __initconst = {
GATE_BUS_TOP, 24, 0, 0),
GATE(CLK_ACLK432_SCALER, "aclk432_scaler", "mout_user_aclk432_scaler",
GATE_BUS_TOP, 27, CLK_IS_CRITICAL, 0),
+ GATE(CLK_MAU_EPLL, "mau_epll", "mout_user_mau_epll",
+ SRC_MASK_TOP7, 20, CLK_SET_RATE_PARENT, 0),
};
static const struct samsung_mux_clock exynos5420_mux_clks[] __initconst = {
@@ -629,6 +631,11 @@ static const struct samsung_div_clock exynos5420_div_clks[] __initconst = {
"mout_aclk400_wcore_bpll", DIV_TOP0, 16, 3),
};
+static const struct samsung_gate_clock exynos5420_gate_clks[] __initconst = {
+ GATE(CLK_MAU_EPLL, "mau_epll", "mout_mau_epll_clk",
+ SRC_MASK_TOP7, 20, CLK_SET_RATE_PARENT, 0),
+};
+
static const struct samsung_mux_clock exynos5x_mux_clks[] __initconst = {
MUX(0, "mout_user_pclk66_gpio", mout_user_pclk66_gpio_p,
SRC_TOP7, 4, 1),
@@ -706,7 +713,8 @@ static const struct samsung_mux_clock exynos5x_mux_clks[] __initconst = {
MUX(0, "mout_sclk_spll", mout_spll_p, SRC_TOP6, 8, 1),
MUX(0, "mout_sclk_ipll", mout_ipll_p, SRC_TOP6, 12, 1),
MUX(0, "mout_sclk_rpll", mout_rpll_p, SRC_TOP6, 16, 1),
- MUX(CLK_MOUT_EPLL, "mout_sclk_epll", mout_epll_p, SRC_TOP6, 20, 1),
+ MUX_F(CLK_MOUT_EPLL, "mout_sclk_epll", mout_epll_p, SRC_TOP6, 20, 1,
+ CLK_SET_RATE_PARENT, 0),
MUX(0, "mout_sclk_dpll", mout_dpll_p, SRC_TOP6, 24, 1),
MUX(0, "mout_sclk_cpll", mout_cpll_p, SRC_TOP6, 28, 1),
@@ -1001,9 +1009,6 @@ static const struct samsung_gate_clock exynos5x_gate_clks[] __initconst = {
GATE(0, "aclk300_disp1", "mout_user_aclk300_disp1",
SRC_MASK_TOP2, 24, CLK_IS_CRITICAL, 0),
- GATE(CLK_MAU_EPLL, "mau_epll", "mout_mau_epll_clk",
- SRC_MASK_TOP7, 20, 0, 0),
-
/* sclk */
GATE(CLK_SCLK_UART0, "sclk_uart0", "dout_uart0",
GATE_TOP_SCLK_PERIC, 0, CLK_SET_RATE_PARENT, 0),
@@ -1440,6 +1445,8 @@ static void __init exynos5x_clk_init(struct device_node *np,
ARRAY_SIZE(exynos5420_mux_clks));
samsung_clk_register_div(ctx, exynos5420_div_clks,
ARRAY_SIZE(exynos5420_div_clks));
+ samsung_clk_register_gate(ctx, exynos5420_gate_clks,
+ ARRAY_SIZE(exynos5420_gate_clks));
} else {
samsung_clk_register_fixed_factor(
ctx, exynos5800_fixed_factor_clks,
diff --git a/drivers/clk/sunxi-ng/Kconfig b/drivers/clk/sunxi-ng/Kconfig
index 7342928c35cd..6427d0ebe2de 100644
--- a/drivers/clk/sunxi-ng/Kconfig
+++ b/drivers/clk/sunxi-ng/Kconfig
@@ -11,6 +11,19 @@ config SUN50I_A64_CCU
default ARM64 && ARCH_SUNXI
depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
+config SUN4I_A10_CCU
+ bool "Support for the Allwinner A10/A20 CCU"
+ select SUNXI_CCU_DIV
+ select SUNXI_CCU_MULT
+ select SUNXI_CCU_NK
+ select SUNXI_CCU_NKM
+ select SUNXI_CCU_NM
+ select SUNXI_CCU_MP
+ select SUNXI_CCU_PHASE
+ default MACH_SUN4I
+ default MACH_SUN7I
+ depends on MACH_SUN4I || MACH_SUN7I || COMPILE_TEST
+
config SUN5I_CCU
bool "Support for the Allwinner sun5i family CCM"
default MACH_SUN5I
@@ -48,6 +61,11 @@ config SUN8I_V3S_CCU
config SUN8I_DE2_CCU
bool "Support for the Allwinner SoCs DE2 CCU"
+config SUN8I_R40_CCU
+ bool "Support for the Allwinner R40 CCU"
+ default MACH_SUN8I
+ depends on MACH_SUN8I || COMPILE_TEST
+
config SUN9I_A80_CCU
bool "Support for the Allwinner A80 CCU"
default MACH_SUN9I
diff --git a/drivers/clk/sunxi-ng/Makefile b/drivers/clk/sunxi-ng/Makefile
index 45a5910379a5..85a0633c1eac 100644
--- a/drivers/clk/sunxi-ng/Makefile
+++ b/drivers/clk/sunxi-ng/Makefile
@@ -20,6 +20,7 @@ lib-$(CONFIG_SUNXI_CCU) += ccu_mp.o
# SoC support
obj-$(CONFIG_SUN50I_A64_CCU) += ccu-sun50i-a64.o
+obj-$(CONFIG_SUN4I_A10_CCU) += ccu-sun4i-a10.o
obj-$(CONFIG_SUN5I_CCU) += ccu-sun5i.o
obj-$(CONFIG_SUN6I_A31_CCU) += ccu-sun6i-a31.o
obj-$(CONFIG_SUN8I_A23_CCU) += ccu-sun8i-a23.o
@@ -29,6 +30,7 @@ obj-$(CONFIG_SUN8I_H3_CCU) += ccu-sun8i-h3.o
obj-$(CONFIG_SUN8I_V3S_CCU) += ccu-sun8i-v3s.o
obj-$(CONFIG_SUN8I_DE2_CCU) += ccu-sun8i-de2.o
obj-$(CONFIG_SUN8I_R_CCU) += ccu-sun8i-r.o
+obj-$(CONFIG_SUN8I_R40_CCU) += ccu-sun8i-r40.o
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80.o
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80-de.o
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80-usb.o
diff --git a/drivers/clk/sunxi-ng/ccu-sun4i-a10.c b/drivers/clk/sunxi-ng/ccu-sun4i-a10.c
new file mode 100644
index 000000000000..286b0049b7b6
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun4i-a10.c
@@ -0,0 +1,1456 @@
+/*
+ * Copyright (c) 2017 Priit Laes <plaes@plaes.org>.
+ * Copyright (c) 2017 Maxime Ripard.
+ * Copyright (c) 2017 Jonathan Liu.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/of_address.h>
+
+#include "ccu_common.h"
+#include "ccu_reset.h"
+
+#include "ccu_div.h"
+#include "ccu_gate.h"
+#include "ccu_mp.h"
+#include "ccu_mult.h"
+#include "ccu_nk.h"
+#include "ccu_nkm.h"
+#include "ccu_nkmp.h"
+#include "ccu_nm.h"
+#include "ccu_phase.h"
+
+#include "ccu-sun4i-a10.h"
+
+static struct ccu_nkmp pll_core_clk = {
+ .enable = BIT(31),
+ .n = _SUNXI_CCU_MULT_OFFSET(8, 5, 0),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .m = _SUNXI_CCU_DIV(0, 2),
+ .p = _SUNXI_CCU_DIV(16, 2),
+ .common = {
+ .reg = 0x000,
+ .hw.init = CLK_HW_INIT("pll-core",
+ "hosc",
+ &ccu_nkmp_ops,
+ 0),
+ },
+};
+
+/*
+ * The Audio PLL is supposed to have 4 outputs: 3 fixed factors from
+ * the base (2x, 4x and 8x), and one variable divider (the one true
+ * pll audio).
+ *
+ * We don't have any need for the variable divider for now, so we just
+ * hardcode it to match with the clock names.
+ */
+#define SUN4I_PLL_AUDIO_REG 0x008
+static struct ccu_nm pll_audio_base_clk = {
+ .enable = BIT(31),
+ .n = _SUNXI_CCU_MULT_OFFSET(8, 7, 0),
+ .m = _SUNXI_CCU_DIV_OFFSET(0, 5, 0),
+ .common = {
+ .reg = 0x008,
+ .hw.init = CLK_HW_INIT("pll-audio-base",
+ "hosc",
+ &ccu_nm_ops,
+ 0),
+ },
+
+};
+
+static struct ccu_mult pll_video0_clk = {
+ .enable = BIT(31),
+ .mult = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(0, 7, 0, 9, 127),
+ .frac = _SUNXI_CCU_FRAC(BIT(15), BIT(14),
+ 270000000, 297000000),
+ .common = {
+ .reg = 0x010,
+ .features = (CCU_FEATURE_FRACTIONAL |
+ CCU_FEATURE_ALL_PREDIV),
+ .prediv = 8,
+ .hw.init = CLK_HW_INIT("pll-video0",
+ "hosc",
+ &ccu_mult_ops,
+ 0),
+ },
+};
+
+static struct ccu_nkmp pll_ve_sun4i_clk = {
+ .enable = BIT(31),
+ .n = _SUNXI_CCU_MULT_OFFSET(8, 5, 0),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .m = _SUNXI_CCU_DIV(0, 2),
+ .p = _SUNXI_CCU_DIV(16, 2),
+ .common = {
+ .reg = 0x018,
+ .hw.init = CLK_HW_INIT("pll-ve",
+ "hosc",
+ &ccu_nkmp_ops,
+ 0),
+ },
+};
+
+static struct ccu_nk pll_ve_sun7i_clk = {
+ .enable = BIT(31),
+ .n = _SUNXI_CCU_MULT_OFFSET(8, 5, 0),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .common = {
+ .reg = 0x018,
+ .hw.init = CLK_HW_INIT("pll-ve",
+ "hosc",
+ &ccu_nk_ops,
+ 0),
+ },
+};
+
+static struct ccu_nk pll_ddr_base_clk = {
+ .enable = BIT(31),
+ .n = _SUNXI_CCU_MULT_OFFSET(8, 5, 0),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .common = {
+ .reg = 0x020,
+ .hw.init = CLK_HW_INIT("pll-ddr-base",
+ "hosc",
+ &ccu_nk_ops,
+ 0),
+ },
+};
+
+static SUNXI_CCU_M(pll_ddr_clk, "pll-ddr", "pll-ddr-base", 0x020, 0, 2,
+ CLK_IS_CRITICAL);
+
+static struct ccu_div pll_ddr_other_clk = {
+ .div = _SUNXI_CCU_DIV_FLAGS(16, 2, CLK_DIVIDER_POWER_OF_TWO),
+ .common = {
+ .reg = 0x020,
+ .hw.init = CLK_HW_INIT("pll-ddr-other", "pll-ddr-base",
+ &ccu_div_ops,
+ 0),
+ },
+};
+
+static struct ccu_nk pll_periph_base_clk = {
+ .enable = BIT(31),
+ .n = _SUNXI_CCU_MULT_OFFSET(8, 5, 0),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .common = {
+ .reg = 0x028,
+ .hw.init = CLK_HW_INIT("pll-periph-base",
+ "hosc",
+ &ccu_nk_ops,
+ 0),
+ },
+};
+
+static CLK_FIXED_FACTOR(pll_periph_clk, "pll-periph", "pll-periph-base",
+ 2, 1, CLK_SET_RATE_PARENT);
+
+/* Not documented on A10 */
+static struct ccu_div pll_periph_sata_clk = {
+ .enable = BIT(14),
+ .div = _SUNXI_CCU_DIV(0, 2),
+ .fixed_post_div = 6,
+ .common = {
+ .reg = 0x028,
+ .features = CCU_FEATURE_FIXED_POSTDIV,
+ .hw.init = CLK_HW_INIT("pll-periph-sata",
+ "pll-periph-base",
+ &ccu_div_ops, 0),
+ },
+};
+
+static struct ccu_mult pll_video1_clk = {
+ .enable = BIT(31),
+ .mult = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(0, 7, 0, 9, 127),
+ .frac = _SUNXI_CCU_FRAC(BIT(15), BIT(14),
+ 270000000, 297000000),
+ .common = {
+ .reg = 0x030,
+ .features = (CCU_FEATURE_FRACTIONAL |
+ CCU_FEATURE_ALL_PREDIV),
+ .prediv = 8,
+ .hw.init = CLK_HW_INIT("pll-video1",
+ "hosc",
+ &ccu_mult_ops,
+ 0),
+ },
+};
+
+/* Not present on A10 */
+static struct ccu_nk pll_gpu_clk = {
+ .enable = BIT(31),
+ .n = _SUNXI_CCU_MULT_OFFSET(8, 5, 0),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .common = {
+ .reg = 0x040,
+ .hw.init = CLK_HW_INIT("pll-gpu",
+ "hosc",
+ &ccu_nk_ops,
+ 0),
+ },
+};
+
+static SUNXI_CCU_GATE(hosc_clk, "hosc", "osc24M", 0x050, BIT(0), 0);
+
+static const char *const cpu_parents[] = { "osc32k", "hosc",
+ "pll-core", "pll-periph" };
+static const struct ccu_mux_fixed_prediv cpu_predivs[] = {
+ { .index = 3, .div = 3, },
+};
+
+#define SUN4I_AHB_REG 0x054
+static struct ccu_mux cpu_clk = {
+ .mux = {
+ .shift = 16,
+ .width = 2,
+ .fixed_predivs = cpu_predivs,
+ .n_predivs = ARRAY_SIZE(cpu_predivs),
+ },
+ .common = {
+ .reg = 0x054,
+ .features = CCU_FEATURE_FIXED_PREDIV,
+ .hw.init = CLK_HW_INIT_PARENTS("cpu",
+ cpu_parents,
+ &ccu_mux_ops,
+ CLK_IS_CRITICAL),
+ }
+};
+
+static SUNXI_CCU_M(axi_clk, "axi", "cpu", 0x054, 0, 2, 0);
+
+static struct ccu_div ahb_sun4i_clk = {
+ .div = _SUNXI_CCU_DIV_FLAGS(4, 2, CLK_DIVIDER_POWER_OF_TWO),
+ .common = {
+ .reg = 0x054,
+ .hw.init = CLK_HW_INIT("ahb", "axi", &ccu_div_ops, 0),
+ },
+};
+
+static const char *const ahb_sun7i_parents[] = { "axi", "pll-periph",
+ "pll-periph" };
+static const struct ccu_mux_fixed_prediv ahb_sun7i_predivs[] = {
+ { .index = 1, .div = 2, },
+ { /* Sentinel */ },
+};
+static struct ccu_div ahb_sun7i_clk = {
+ .div = _SUNXI_CCU_DIV_FLAGS(4, 2, CLK_DIVIDER_POWER_OF_TWO),
+ .mux = {
+ .shift = 6,
+ .width = 2,
+ .fixed_predivs = ahb_sun7i_predivs,
+ .n_predivs = ARRAY_SIZE(ahb_sun7i_predivs),
+ },
+
+ .common = {
+ .reg = 0x054,
+ .hw.init = CLK_HW_INIT_PARENTS("ahb",
+ ahb_sun7i_parents,
+ &ccu_div_ops,
+ 0),
+ },
+};
+
+static struct clk_div_table apb0_div_table[] = {
+ { .val = 0, .div = 2 },
+ { .val = 1, .div = 2 },
+ { .val = 2, .div = 4 },
+ { .val = 3, .div = 8 },
+ { /* Sentinel */ },
+};
+static SUNXI_CCU_DIV_TABLE(apb0_clk, "apb0", "ahb",
+ 0x054, 8, 2, apb0_div_table, 0);
+
+static const char *const apb1_parents[] = { "hosc", "pll-periph", "osc32k" };
+static SUNXI_CCU_MP_WITH_MUX(apb1_clk, "apb1", apb1_parents, 0x058,
+ 0, 5, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ 0);
+
+/* Not present on A20 */
+static SUNXI_CCU_GATE(axi_dram_clk, "axi-dram", "ahb",
+ 0x05c, BIT(31), 0);
+
+static SUNXI_CCU_GATE(ahb_otg_clk, "ahb-otg", "ahb",
+ 0x060, BIT(0), 0);
+static SUNXI_CCU_GATE(ahb_ehci0_clk, "ahb-ehci0", "ahb",
+ 0x060, BIT(1), 0);
+static SUNXI_CCU_GATE(ahb_ohci0_clk, "ahb-ohci0", "ahb",
+ 0x060, BIT(2), 0);
+static SUNXI_CCU_GATE(ahb_ehci1_clk, "ahb-ehci1", "ahb",
+ 0x060, BIT(3), 0);
+static SUNXI_CCU_GATE(ahb_ohci1_clk, "ahb-ohci1", "ahb",
+ 0x060, BIT(4), 0);
+static SUNXI_CCU_GATE(ahb_ss_clk, "ahb-ss", "ahb",
+ 0x060, BIT(5), 0);
+static SUNXI_CCU_GATE(ahb_dma_clk, "ahb-dma", "ahb",
+ 0x060, BIT(6), 0);
+static SUNXI_CCU_GATE(ahb_bist_clk, "ahb-bist", "ahb",
+ 0x060, BIT(7), 0);
+static SUNXI_CCU_GATE(ahb_mmc0_clk, "ahb-mmc0", "ahb",
+ 0x060, BIT(8), 0);
+static SUNXI_CCU_GATE(ahb_mmc1_clk, "ahb-mmc1", "ahb",
+ 0x060, BIT(9), 0);
+static SUNXI_CCU_GATE(ahb_mmc2_clk, "ahb-mmc2", "ahb",
+ 0x060, BIT(10), 0);
+static SUNXI_CCU_GATE(ahb_mmc3_clk, "ahb-mmc3", "ahb",
+ 0x060, BIT(11), 0);
+static SUNXI_CCU_GATE(ahb_ms_clk, "ahb-ms", "ahb",
+ 0x060, BIT(12), 0);
+static SUNXI_CCU_GATE(ahb_nand_clk, "ahb-nand", "ahb",
+ 0x060, BIT(13), 0);
+static SUNXI_CCU_GATE(ahb_sdram_clk, "ahb-sdram", "ahb",
+ 0x060, BIT(14), CLK_IS_CRITICAL);
+
+static SUNXI_CCU_GATE(ahb_ace_clk, "ahb-ace", "ahb",
+ 0x060, BIT(16), 0);
+static SUNXI_CCU_GATE(ahb_emac_clk, "ahb-emac", "ahb",
+ 0x060, BIT(17), 0);
+static SUNXI_CCU_GATE(ahb_ts_clk, "ahb-ts", "ahb",
+ 0x060, BIT(18), 0);
+static SUNXI_CCU_GATE(ahb_spi0_clk, "ahb-spi0", "ahb",
+ 0x060, BIT(20), 0);
+static SUNXI_CCU_GATE(ahb_spi1_clk, "ahb-spi1", "ahb",
+ 0x060, BIT(21), 0);
+static SUNXI_CCU_GATE(ahb_spi2_clk, "ahb-spi2", "ahb",
+ 0x060, BIT(22), 0);
+static SUNXI_CCU_GATE(ahb_spi3_clk, "ahb-spi3", "ahb",
+ 0x060, BIT(23), 0);
+static SUNXI_CCU_GATE(ahb_pata_clk, "ahb-pata", "ahb",
+ 0x060, BIT(24), 0);
+/* Not documented on A20 */
+static SUNXI_CCU_GATE(ahb_sata_clk, "ahb-sata", "ahb",
+ 0x060, BIT(25), 0);
+/* Not present on A20 */
+static SUNXI_CCU_GATE(ahb_gps_clk, "ahb-gps", "ahb",
+ 0x060, BIT(26), 0);
+/* Not present on A10 */
+static SUNXI_CCU_GATE(ahb_hstimer_clk, "ahb-hstimer", "ahb",
+ 0x060, BIT(28), 0);
+
+static SUNXI_CCU_GATE(ahb_ve_clk, "ahb-ve", "ahb",
+ 0x064, BIT(0), 0);
+static SUNXI_CCU_GATE(ahb_tvd_clk, "ahb-tvd", "ahb",
+ 0x064, BIT(1), 0);
+static SUNXI_CCU_GATE(ahb_tve0_clk, "ahb-tve0", "ahb",
+ 0x064, BIT(2), 0);
+static SUNXI_CCU_GATE(ahb_tve1_clk, "ahb-tve1", "ahb",
+ 0x064, BIT(3), 0);
+static SUNXI_CCU_GATE(ahb_lcd0_clk, "ahb-lcd0", "ahb",
+ 0x064, BIT(4), 0);
+static SUNXI_CCU_GATE(ahb_lcd1_clk, "ahb-lcd1", "ahb",
+ 0x064, BIT(5), 0);
+static SUNXI_CCU_GATE(ahb_csi0_clk, "ahb-csi0", "ahb",
+ 0x064, BIT(8), 0);
+static SUNXI_CCU_GATE(ahb_csi1_clk, "ahb-csi1", "ahb",
+ 0x064, BIT(9), 0);
+/* Not present on A10 */
+static SUNXI_CCU_GATE(ahb_hdmi1_clk, "ahb-hdmi1", "ahb",
+ 0x064, BIT(10), 0);
+static SUNXI_CCU_GATE(ahb_hdmi0_clk, "ahb-hdmi0", "ahb",
+ 0x064, BIT(11), 0);
+static SUNXI_CCU_GATE(ahb_de_be0_clk, "ahb-de-be0", "ahb",
+ 0x064, BIT(12), 0);
+static SUNXI_CCU_GATE(ahb_de_be1_clk, "ahb-de-be1", "ahb",
+ 0x064, BIT(13), 0);
+static SUNXI_CCU_GATE(ahb_de_fe0_clk, "ahb-de-fe0", "ahb",
+ 0x064, BIT(14), 0);
+static SUNXI_CCU_GATE(ahb_de_fe1_clk, "ahb-de-fe1", "ahb",
+ 0x064, BIT(15), 0);
+/* Not present on A10 */
+static SUNXI_CCU_GATE(ahb_gmac_clk, "ahb-gmac", "ahb",
+ 0x064, BIT(17), 0);
+static SUNXI_CCU_GATE(ahb_mp_clk, "ahb-mp", "ahb",
+ 0x064, BIT(18), 0);
+static SUNXI_CCU_GATE(ahb_gpu_clk, "ahb-gpu", "ahb",
+ 0x064, BIT(20), 0);
+
+static SUNXI_CCU_GATE(apb0_codec_clk, "apb0-codec", "apb0",
+ 0x068, BIT(0), 0);
+static SUNXI_CCU_GATE(apb0_spdif_clk, "apb0-spdif", "apb0",
+ 0x068, BIT(1), 0);
+static SUNXI_CCU_GATE(apb0_ac97_clk, "apb0-ac97", "apb0",
+ 0x068, BIT(2), 0);
+static SUNXI_CCU_GATE(apb0_i2s0_clk, "apb0-i2s0", "apb0",
+ 0x068, BIT(3), 0);
+/* Not present on A10 */
+static SUNXI_CCU_GATE(apb0_i2s1_clk, "apb0-i2s1", "apb0",
+ 0x068, BIT(4), 0);
+static SUNXI_CCU_GATE(apb0_pio_clk, "apb0-pio", "apb0",
+ 0x068, BIT(5), 0);
+static SUNXI_CCU_GATE(apb0_ir0_clk, "apb0-ir0", "apb0",
+ 0x068, BIT(6), 0);
+static SUNXI_CCU_GATE(apb0_ir1_clk, "apb0-ir1", "apb0",
+ 0x068, BIT(7), 0);
+/* Not present on A10 */
+static SUNXI_CCU_GATE(apb0_i2s2_clk, "apb0-i2s2", "apb0",
+ 0x068, BIT(8), 0);
+static SUNXI_CCU_GATE(apb0_keypad_clk, "apb0-keypad", "apb0",
+ 0x068, BIT(10), 0);
+
+static SUNXI_CCU_GATE(apb1_i2c0_clk, "apb1-i2c0", "apb1",
+ 0x06c, BIT(0), 0);
+static SUNXI_CCU_GATE(apb1_i2c1_clk, "apb1-i2c1", "apb1",
+ 0x06c, BIT(1), 0);
+static SUNXI_CCU_GATE(apb1_i2c2_clk, "apb1-i2c2", "apb1",
+ 0x06c, BIT(2), 0);
+/* Not present on A10 */
+static SUNXI_CCU_GATE(apb1_i2c3_clk, "apb1-i2c3", "apb1",
+ 0x06c, BIT(3), 0);
+static SUNXI_CCU_GATE(apb1_can_clk, "apb1-can", "apb1",
+ 0x06c, BIT(4), 0);
+static SUNXI_CCU_GATE(apb1_scr_clk, "apb1-scr", "apb1",
+ 0x06c, BIT(5), 0);
+static SUNXI_CCU_GATE(apb1_ps20_clk, "apb1-ps20", "apb1",
+ 0x06c, BIT(6), 0);
+static SUNXI_CCU_GATE(apb1_ps21_clk, "apb1-ps21", "apb1",
+ 0x06c, BIT(7), 0);
+/* Not present on A10 */
+static SUNXI_CCU_GATE(apb1_i2c4_clk, "apb1-i2c4", "apb1",
+ 0x06c, BIT(15), 0);
+static SUNXI_CCU_GATE(apb1_uart0_clk, "apb1-uart0", "apb1",
+ 0x06c, BIT(16), 0);
+static SUNXI_CCU_GATE(apb1_uart1_clk, "apb1-uart1", "apb1",
+ 0x06c, BIT(17), 0);
+static SUNXI_CCU_GATE(apb1_uart2_clk, "apb1-uart2", "apb1",
+ 0x06c, BIT(18), 0);
+static SUNXI_CCU_GATE(apb1_uart3_clk, "apb1-uart3", "apb1",
+ 0x06c, BIT(19), 0);
+static SUNXI_CCU_GATE(apb1_uart4_clk, "apb1-uart4", "apb1",
+ 0x06c, BIT(20), 0);
+static SUNXI_CCU_GATE(apb1_uart5_clk, "apb1-uart5", "apb1",
+ 0x06c, BIT(21), 0);
+static SUNXI_CCU_GATE(apb1_uart6_clk, "apb1-uart6", "apb1",
+ 0x06c, BIT(22), 0);
+static SUNXI_CCU_GATE(apb1_uart7_clk, "apb1-uart7", "apb1",
+ 0x06c, BIT(23), 0);
+
+static const char *const mod0_default_parents[] = { "hosc", "pll-periph",
+ "pll-ddr-other" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(nand_clk, "nand", mod0_default_parents, 0x080,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+/* Undocumented on A10 */
+static SUNXI_CCU_MP_WITH_MUX_GATE(ms_clk, "ms", mod0_default_parents, 0x084,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(mmc0_clk, "mmc0", mod0_default_parents, 0x088,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+/* MMC output and sample clocks are not present on A10 */
+static SUNXI_CCU_PHASE(mmc0_output_clk, "mmc0_output", "mmc0",
+ 0x088, 8, 3, 0);
+static SUNXI_CCU_PHASE(mmc0_sample_clk, "mmc0_sample", "mmc0",
+ 0x088, 20, 3, 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(mmc1_clk, "mmc1", mod0_default_parents, 0x08c,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+/* MMC output and sample clocks are not present on A10 */
+static SUNXI_CCU_PHASE(mmc1_output_clk, "mmc1_output", "mmc1",
+ 0x08c, 8, 3, 0);
+static SUNXI_CCU_PHASE(mmc1_sample_clk, "mmc1_sample", "mmc1",
+ 0x08c, 20, 3, 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(mmc2_clk, "mmc2", mod0_default_parents, 0x090,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+/* MMC output and sample clocks are not present on A10 */
+static SUNXI_CCU_PHASE(mmc2_output_clk, "mmc2_output", "mmc2",
+ 0x090, 8, 3, 0);
+static SUNXI_CCU_PHASE(mmc2_sample_clk, "mmc2_sample", "mmc2",
+ 0x090, 20, 3, 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(mmc3_clk, "mmc3", mod0_default_parents, 0x094,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+/* MMC output and sample clocks are not present on A10 */
+static SUNXI_CCU_PHASE(mmc3_output_clk, "mmc3_output", "mmc3",
+ 0x094, 8, 3, 0);
+static SUNXI_CCU_PHASE(mmc3_sample_clk, "mmc3_sample", "mmc3",
+ 0x094, 20, 3, 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(ts_clk, "ts", mod0_default_parents, 0x098,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(ss_clk, "ss", mod0_default_parents, 0x09c,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi0_clk, "spi0", mod0_default_parents, 0x0a0,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi1_clk, "spi1", mod0_default_parents, 0x0a4,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi2_clk, "spi2", mod0_default_parents, 0x0a8,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+/* Undocumented on A10 */
+static SUNXI_CCU_MP_WITH_MUX_GATE(pata_clk, "pata", mod0_default_parents, 0x0ac,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+/* TODO: Check whether A10 actually supports osc32k as 4th parent? */
+static const char *const ir_parents_sun4i[] = { "hosc", "pll-periph",
+ "pll-ddr-other" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir0_sun4i_clk, "ir0", ir_parents_sun4i, 0x0b0,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir1_sun4i_clk, "ir1", ir_parents_sun4i, 0x0b4,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+static const char *const ir_parents_sun7i[] = { "hosc", "pll-periph",
+ "pll-ddr-other", "osc32k" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir0_sun7i_clk, "ir0", ir_parents_sun7i, 0x0b0,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir1_sun7i_clk, "ir1", ir_parents_sun7i, 0x0b4,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static const char *const audio_parents[] = { "pll-audio-8x", "pll-audio-4x",
+ "pll-audio-2x", "pll-audio" };
+static SUNXI_CCU_MUX_WITH_GATE(i2s0_clk, "i2s0", audio_parents,
+ 0x0b8, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_MUX_WITH_GATE(ac97_clk, "ac97", audio_parents,
+ 0x0bc, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+/* Undocumented on A10 */
+static SUNXI_CCU_MUX_WITH_GATE(spdif_clk, "spdif", audio_parents,
+ 0x0c0, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+static const char *const keypad_parents[] = { "hosc", "losc"};
+static const u8 keypad_table[] = { 0, 2 };
+static struct ccu_mp keypad_clk = {
+ .enable = BIT(31),
+ .m = _SUNXI_CCU_DIV(0, 5),
+ .p = _SUNXI_CCU_DIV(16, 2),
+ .mux = _SUNXI_CCU_MUX_TABLE(24, 2, keypad_table),
+ .common = {
+ .reg = 0x0c4,
+ .hw.init = CLK_HW_INIT_PARENTS("keypad",
+ keypad_parents,
+ &ccu_mp_ops,
+ 0),
+ },
+};
+
+/*
+ * SATA supports external clock as parent via BIT(24) and is probably an
+ * optional crystal or oscillator that can be connected to the
+ * SATA-CLKM / SATA-CLKP pins.
+ */
+static const char *const sata_parents[] = {"pll-periph-sata", "sata-ext"};
+static SUNXI_CCU_MUX_WITH_GATE(sata_clk, "sata", sata_parents,
+ 0x0c8, 24, 1, BIT(31), CLK_SET_RATE_PARENT);
+
+
+static SUNXI_CCU_GATE(usb_ohci0_clk, "usb-ohci0", "pll-periph",
+ 0x0cc, BIT(6), 0);
+static SUNXI_CCU_GATE(usb_ohci1_clk, "usb-ohci1", "pll-periph",
+ 0x0cc, BIT(7), 0);
+static SUNXI_CCU_GATE(usb_phy_clk, "usb-phy", "pll-periph",
+ 0x0cc, BIT(8), 0);
+
+/* TODO: GPS CLK 0x0d0 */
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi3_clk, "spi3", mod0_default_parents, 0x0d4,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+/* Not present on A10 */
+static SUNXI_CCU_MUX_WITH_GATE(i2s1_clk, "i2s1", audio_parents,
+ 0x0d8, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+/* Not present on A10 */
+static SUNXI_CCU_MUX_WITH_GATE(i2s2_clk, "i2s2", audio_parents,
+ 0x0dc, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_GATE(dram_ve_clk, "dram-ve", "pll-ddr",
+ 0x100, BIT(0), 0);
+static SUNXI_CCU_GATE(dram_csi0_clk, "dram-csi0", "pll-ddr",
+ 0x100, BIT(1), 0);
+static SUNXI_CCU_GATE(dram_csi1_clk, "dram-csi1", "pll-ddr",
+ 0x100, BIT(2), 0);
+static SUNXI_CCU_GATE(dram_ts_clk, "dram-ts", "pll-ddr",
+ 0x100, BIT(3), 0);
+static SUNXI_CCU_GATE(dram_tvd_clk, "dram-tvd", "pll-ddr",
+ 0x100, BIT(4), 0);
+static SUNXI_CCU_GATE(dram_tve0_clk, "dram-tve0", "pll-ddr",
+ 0x100, BIT(5), 0);
+static SUNXI_CCU_GATE(dram_tve1_clk, "dram-tve1", "pll-ddr",
+ 0x100, BIT(6), 0);
+
+/* Clock seems to be critical only on sun4i */
+static SUNXI_CCU_GATE(dram_out_clk, "dram-out", "pll-ddr",
+ 0x100, BIT(15), CLK_IS_CRITICAL);
+static SUNXI_CCU_GATE(dram_de_fe1_clk, "dram-de-fe1", "pll-ddr",
+ 0x100, BIT(24), 0);
+static SUNXI_CCU_GATE(dram_de_fe0_clk, "dram-de-fe0", "pll-ddr",
+ 0x100, BIT(25), 0);
+static SUNXI_CCU_GATE(dram_de_be0_clk, "dram-de-be0", "pll-ddr",
+ 0x100, BIT(26), 0);
+static SUNXI_CCU_GATE(dram_de_be1_clk, "dram-de-be1", "pll-ddr",
+ 0x100, BIT(27), 0);
+static SUNXI_CCU_GATE(dram_mp_clk, "dram-mp", "pll-ddr",
+ 0x100, BIT(28), 0);
+static SUNXI_CCU_GATE(dram_ace_clk, "dram-ace", "pll-ddr",
+ 0x100, BIT(29), 0);
+
+static const char *const de_parents[] = { "pll-video0", "pll-video1",
+ "pll-ddr-other" };
+static SUNXI_CCU_M_WITH_MUX_GATE(de_be0_clk, "de-be0", de_parents,
+ 0x104, 0, 4, 24, 2, BIT(31), 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(de_be1_clk, "de-be1", de_parents,
+ 0x108, 0, 4, 24, 2, BIT(31), 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(de_fe0_clk, "de-fe0", de_parents,
+ 0x10c, 0, 4, 24, 2, BIT(31), 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(de_fe1_clk, "de-fe1", de_parents,
+ 0x110, 0, 4, 24, 2, BIT(31), 0);
+
+/* Undocumented on A10 */
+static SUNXI_CCU_M_WITH_MUX_GATE(de_mp_clk, "de-mp", de_parents,
+ 0x114, 0, 4, 24, 2, BIT(31), 0);
+
+static const char *const disp_parents[] = { "pll-video0", "pll-video1",
+ "pll-video0-2x", "pll-video1-2x" };
+static SUNXI_CCU_MUX_WITH_GATE(tcon0_ch0_clk, "tcon0-ch0-sclk", disp_parents,
+ 0x118, 24, 2, BIT(31), CLK_SET_RATE_PARENT);
+static SUNXI_CCU_MUX_WITH_GATE(tcon1_ch0_clk, "tcon1-ch0-sclk", disp_parents,
+ 0x11c, 24, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+static const char *const csi_sclk_parents[] = { "pll-video0", "pll-ve",
+ "pll-ddr-other", "pll-periph" };
+
+static SUNXI_CCU_M_WITH_MUX_GATE(csi_sclk_clk, "csi-sclk",
+ csi_sclk_parents,
+ 0x120, 0, 4, 24, 2, BIT(31), 0);
+
+/* TVD clock setup for A10 */
+static const char *const tvd_parents[] = { "pll-video0", "pll-video1" };
+static SUNXI_CCU_MUX_WITH_GATE(tvd_sun4i_clk, "tvd", tvd_parents,
+ 0x128, 24, 1, BIT(31), 0);
+
+/* TVD clock setup for A20 */
+static SUNXI_CCU_MP_WITH_MUX_GATE(tvd_sclk2_sun7i_clk,
+ "tvd-sclk2", tvd_parents,
+ 0x128,
+ 0, 4, /* M */
+ 16, 4, /* P */
+ 8, 1, /* mux */
+ BIT(15), /* gate */
+ 0);
+
+static SUNXI_CCU_M_WITH_GATE(tvd_sclk1_sun7i_clk, "tvd-sclk1", "tvd-sclk2",
+ 0x128, 0, 4, BIT(31), 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(tcon0_ch1_sclk2_clk, "tcon0-ch1-sclk2",
+ disp_parents,
+ 0x12c, 0, 4, 24, 2, BIT(31),
+ CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_M_WITH_GATE(tcon0_ch1_clk,
+ "tcon0-ch1-sclk1", "tcon0-ch1-sclk2",
+ 0x12c, 11, 1, BIT(15),
+ CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(tcon1_ch1_sclk2_clk, "tcon1-ch1-sclk2",
+ disp_parents,
+ 0x130, 0, 4, 24, 2, BIT(31),
+ CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_M_WITH_GATE(tcon1_ch1_clk,
+ "tcon1-ch1-sclk1", "tcon1-ch1-sclk2",
+ 0x130, 11, 1, BIT(15),
+ CLK_SET_RATE_PARENT);
+
+static const char *const csi_parents[] = { "hosc", "pll-video0", "pll-video1",
+ "pll-video0-2x", "pll-video1-2x"};
+static const u8 csi_table[] = { 0, 1, 2, 5, 6};
+static SUNXI_CCU_M_WITH_MUX_TABLE_GATE(csi0_clk, "csi0",
+ csi_parents, csi_table,
+ 0x134, 0, 5, 24, 3, BIT(31), 0);
+
+static SUNXI_CCU_M_WITH_MUX_TABLE_GATE(csi1_clk, "csi1",
+ csi_parents, csi_table,
+ 0x138, 0, 5, 24, 3, BIT(31), 0);
+
+static SUNXI_CCU_M_WITH_GATE(ve_clk, "ve", "pll-ve", 0x13c, 16, 8, BIT(31), 0);
+
+static SUNXI_CCU_GATE(codec_clk, "codec", "pll-audio",
+ 0x140, BIT(31), CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_GATE(avs_clk, "avs", "hosc", 0x144, BIT(31), 0);
+
+static const char *const ace_parents[] = { "pll-ve", "pll-ddr-other" };
+static SUNXI_CCU_M_WITH_MUX_GATE(ace_clk, "ace", ace_parents,
+ 0x148, 0, 4, 24, 1, BIT(31), 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(hdmi_clk, "hdmi", disp_parents,
+ 0x150, 0, 4, 24, 2, BIT(31),
+ CLK_SET_RATE_PARENT);
+
+static const char *const gpu_parents_sun4i[] = { "pll-video0", "pll-ve",
+ "pll-ddr-other",
+ "pll-video1" };
+static SUNXI_CCU_M_WITH_MUX_GATE(gpu_sun4i_clk, "gpu", gpu_parents_sun4i,
+ 0x154, 0, 4, 24, 2, BIT(31),
+ CLK_SET_RATE_PARENT);
+
+static const char *const gpu_parents_sun7i[] = { "pll-video0", "pll-ve",
+ "pll-ddr-other", "pll-video1",
+ "pll-gpu" };
+static const u8 gpu_table_sun7i[] = { 0, 1, 2, 3, 4 };
+static SUNXI_CCU_M_WITH_MUX_TABLE_GATE(gpu_sun7i_clk, "gpu",
+ gpu_parents_sun7i, gpu_table_sun7i,
+ 0x154, 0, 4, 24, 3, BIT(31),
+ CLK_SET_RATE_PARENT);
+
+static const char *const mbus_sun4i_parents[] = { "hosc", "pll-periph",
+ "pll-ddr-other" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(mbus_sun4i_clk, "mbus", mbus_sun4i_parents,
+ 0x15c, 0, 4, 16, 2, 24, 2, BIT(31),
+ 0);
+static const char *const mbus_sun7i_parents[] = { "hosc", "pll-periph-base",
+ "pll-ddr-other" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(mbus_sun7i_clk, "mbus", mbus_sun7i_parents,
+ 0x15c, 0, 4, 16, 2, 24, 2, BIT(31),
+ CLK_IS_CRITICAL);
+
+static SUNXI_CCU_GATE(hdmi1_slow_clk, "hdmi1-slow", "hosc", 0x178, BIT(31), 0);
+
+static const char *const hdmi1_parents[] = { "pll-video0", "pll-video1" };
+static const u8 hdmi1_table[] = { 0, 1};
+static SUNXI_CCU_M_WITH_MUX_TABLE_GATE(hdmi1_clk, "hdmi1",
+ hdmi1_parents, hdmi1_table,
+ 0x17c, 0, 4, 24, 2, BIT(31),
+ CLK_SET_RATE_PARENT);
+
+static const char *const out_parents[] = { "hosc", "osc32k", "hosc" };
+static const struct ccu_mux_fixed_prediv clk_out_predivs[] = {
+ { .index = 0, .div = 750, },
+};
+
+static struct ccu_mp out_a_clk = {
+ .enable = BIT(31),
+ .m = _SUNXI_CCU_DIV(8, 5),
+ .p = _SUNXI_CCU_DIV(20, 2),
+ .mux = {
+ .shift = 24,
+ .width = 2,
+ .fixed_predivs = clk_out_predivs,
+ .n_predivs = ARRAY_SIZE(clk_out_predivs),
+ },
+ .common = {
+ .reg = 0x1f0,
+ .features = CCU_FEATURE_FIXED_PREDIV,
+ .hw.init = CLK_HW_INIT_PARENTS("out-a",
+ out_parents,
+ &ccu_mp_ops,
+ 0),
+ },
+};
+static struct ccu_mp out_b_clk = {
+ .enable = BIT(31),
+ .m = _SUNXI_CCU_DIV(8, 5),
+ .p = _SUNXI_CCU_DIV(20, 2),
+ .mux = {
+ .shift = 24,
+ .width = 2,
+ .fixed_predivs = clk_out_predivs,
+ .n_predivs = ARRAY_SIZE(clk_out_predivs),
+ },
+ .common = {
+ .reg = 0x1f4,
+ .features = CCU_FEATURE_FIXED_PREDIV,
+ .hw.init = CLK_HW_INIT_PARENTS("out-b",
+ out_parents,
+ &ccu_mp_ops,
+ 0),
+ },
+};
+
+static struct ccu_common *sun4i_sun7i_ccu_clks[] = {
+ &hosc_clk.common,
+ &pll_core_clk.common,
+ &pll_audio_base_clk.common,
+ &pll_video0_clk.common,
+ &pll_ve_sun4i_clk.common,
+ &pll_ve_sun7i_clk.common,
+ &pll_ddr_base_clk.common,
+ &pll_ddr_clk.common,
+ &pll_ddr_other_clk.common,
+ &pll_periph_base_clk.common,
+ &pll_periph_sata_clk.common,
+ &pll_video1_clk.common,
+ &pll_gpu_clk.common,
+ &cpu_clk.common,
+ &axi_clk.common,
+ &axi_dram_clk.common,
+ &ahb_sun4i_clk.common,
+ &ahb_sun7i_clk.common,
+ &apb0_clk.common,
+ &apb1_clk.common,
+ &ahb_otg_clk.common,
+ &ahb_ehci0_clk.common,
+ &ahb_ohci0_clk.common,
+ &ahb_ehci1_clk.common,
+ &ahb_ohci1_clk.common,
+ &ahb_ss_clk.common,
+ &ahb_dma_clk.common,
+ &ahb_bist_clk.common,
+ &ahb_mmc0_clk.common,
+ &ahb_mmc1_clk.common,
+ &ahb_mmc2_clk.common,
+ &ahb_mmc3_clk.common,
+ &ahb_ms_clk.common,
+ &ahb_nand_clk.common,
+ &ahb_sdram_clk.common,
+ &ahb_ace_clk.common,
+ &ahb_emac_clk.common,
+ &ahb_ts_clk.common,
+ &ahb_spi0_clk.common,
+ &ahb_spi1_clk.common,
+ &ahb_spi2_clk.common,
+ &ahb_spi3_clk.common,
+ &ahb_pata_clk.common,
+ &ahb_sata_clk.common,
+ &ahb_gps_clk.common,
+ &ahb_hstimer_clk.common,
+ &ahb_ve_clk.common,
+ &ahb_tvd_clk.common,
+ &ahb_tve0_clk.common,
+ &ahb_tve1_clk.common,
+ &ahb_lcd0_clk.common,
+ &ahb_lcd1_clk.common,
+ &ahb_csi0_clk.common,
+ &ahb_csi1_clk.common,
+ &ahb_hdmi1_clk.common,
+ &ahb_hdmi0_clk.common,
+ &ahb_de_be0_clk.common,
+ &ahb_de_be1_clk.common,
+ &ahb_de_fe0_clk.common,
+ &ahb_de_fe1_clk.common,
+ &ahb_gmac_clk.common,
+ &ahb_mp_clk.common,
+ &ahb_gpu_clk.common,
+ &apb0_codec_clk.common,
+ &apb0_spdif_clk.common,
+ &apb0_ac97_clk.common,
+ &apb0_i2s0_clk.common,
+ &apb0_i2s1_clk.common,
+ &apb0_pio_clk.common,
+ &apb0_ir0_clk.common,
+ &apb0_ir1_clk.common,
+ &apb0_i2s2_clk.common,
+ &apb0_keypad_clk.common,
+ &apb1_i2c0_clk.common,
+ &apb1_i2c1_clk.common,
+ &apb1_i2c2_clk.common,
+ &apb1_i2c3_clk.common,
+ &apb1_can_clk.common,
+ &apb1_scr_clk.common,
+ &apb1_ps20_clk.common,
+ &apb1_ps21_clk.common,
+ &apb1_i2c4_clk.common,
+ &apb1_uart0_clk.common,
+ &apb1_uart1_clk.common,
+ &apb1_uart2_clk.common,
+ &apb1_uart3_clk.common,
+ &apb1_uart4_clk.common,
+ &apb1_uart5_clk.common,
+ &apb1_uart6_clk.common,
+ &apb1_uart7_clk.common,
+ &nand_clk.common,
+ &ms_clk.common,
+ &mmc0_clk.common,
+ &mmc0_output_clk.common,
+ &mmc0_sample_clk.common,
+ &mmc1_clk.common,
+ &mmc1_output_clk.common,
+ &mmc1_sample_clk.common,
+ &mmc2_clk.common,
+ &mmc2_output_clk.common,
+ &mmc2_sample_clk.common,
+ &mmc3_clk.common,
+ &mmc3_output_clk.common,
+ &mmc3_sample_clk.common,
+ &ts_clk.common,
+ &ss_clk.common,
+ &spi0_clk.common,
+ &spi1_clk.common,
+ &spi2_clk.common,
+ &pata_clk.common,
+ &ir0_sun4i_clk.common,
+ &ir1_sun4i_clk.common,
+ &ir0_sun7i_clk.common,
+ &ir1_sun7i_clk.common,
+ &i2s0_clk.common,
+ &ac97_clk.common,
+ &spdif_clk.common,
+ &keypad_clk.common,
+ &sata_clk.common,
+ &usb_ohci0_clk.common,
+ &usb_ohci1_clk.common,
+ &usb_phy_clk.common,
+ &spi3_clk.common,
+ &i2s1_clk.common,
+ &i2s2_clk.common,
+ &dram_ve_clk.common,
+ &dram_csi0_clk.common,
+ &dram_csi1_clk.common,
+ &dram_ts_clk.common,
+ &dram_tvd_clk.common,
+ &dram_tve0_clk.common,
+ &dram_tve1_clk.common,
+ &dram_out_clk.common,
+ &dram_de_fe1_clk.common,
+ &dram_de_fe0_clk.common,
+ &dram_de_be0_clk.common,
+ &dram_de_be1_clk.common,
+ &dram_mp_clk.common,
+ &dram_ace_clk.common,
+ &de_be0_clk.common,
+ &de_be1_clk.common,
+ &de_fe0_clk.common,
+ &de_fe1_clk.common,
+ &de_mp_clk.common,
+ &tcon0_ch0_clk.common,
+ &tcon1_ch0_clk.common,
+ &csi_sclk_clk.common,
+ &tvd_sun4i_clk.common,
+ &tvd_sclk1_sun7i_clk.common,
+ &tvd_sclk2_sun7i_clk.common,
+ &tcon0_ch1_sclk2_clk.common,
+ &tcon0_ch1_clk.common,
+ &tcon1_ch1_sclk2_clk.common,
+ &tcon1_ch1_clk.common,
+ &csi0_clk.common,
+ &csi1_clk.common,
+ &ve_clk.common,
+ &codec_clk.common,
+ &avs_clk.common,
+ &ace_clk.common,
+ &hdmi_clk.common,
+ &gpu_sun4i_clk.common,
+ &gpu_sun7i_clk.common,
+ &mbus_sun4i_clk.common,
+ &mbus_sun7i_clk.common,
+ &hdmi1_slow_clk.common,
+ &hdmi1_clk.common,
+ &out_a_clk.common,
+ &out_b_clk.common
+};
+
+/* Post-divider for pll-audio is hardcoded to 4 */
+static CLK_FIXED_FACTOR(pll_audio_clk, "pll-audio",
+ "pll-audio-base", 4, 1, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR(pll_audio_2x_clk, "pll-audio-2x",
+ "pll-audio-base", 2, 1, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR(pll_audio_4x_clk, "pll-audio-4x",
+ "pll-audio-base", 1, 1, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR(pll_audio_8x_clk, "pll-audio-8x",
+ "pll-audio-base", 1, 2, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR(pll_video0_2x_clk, "pll-video0-2x",
+ "pll-video0", 1, 2, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR(pll_video1_2x_clk, "pll-video1-2x",
+ "pll-video1", 1, 2, CLK_SET_RATE_PARENT);
+
+
+static struct clk_hw_onecell_data sun4i_a10_hw_clks = {
+ .hws = {
+ [CLK_HOSC] = &hosc_clk.common.hw,
+ [CLK_PLL_CORE] = &pll_core_clk.common.hw,
+ [CLK_PLL_AUDIO_BASE] = &pll_audio_base_clk.common.hw,
+ [CLK_PLL_AUDIO] = &pll_audio_clk.hw,
+ [CLK_PLL_AUDIO_2X] = &pll_audio_2x_clk.hw,
+ [CLK_PLL_AUDIO_4X] = &pll_audio_4x_clk.hw,
+ [CLK_PLL_AUDIO_8X] = &pll_audio_8x_clk.hw,
+ [CLK_PLL_VIDEO0] = &pll_video0_clk.common.hw,
+ [CLK_PLL_VIDEO0_2X] = &pll_video0_2x_clk.hw,
+ [CLK_PLL_VE] = &pll_ve_sun4i_clk.common.hw,
+ [CLK_PLL_DDR_BASE] = &pll_ddr_base_clk.common.hw,
+ [CLK_PLL_DDR] = &pll_ddr_clk.common.hw,
+ [CLK_PLL_DDR_OTHER] = &pll_ddr_other_clk.common.hw,
+ [CLK_PLL_PERIPH_BASE] = &pll_periph_base_clk.common.hw,
+ [CLK_PLL_PERIPH] = &pll_periph_clk.hw,
+ [CLK_PLL_PERIPH_SATA] = &pll_periph_sata_clk.common.hw,
+ [CLK_PLL_VIDEO1] = &pll_video1_clk.common.hw,
+ [CLK_PLL_VIDEO1_2X] = &pll_video1_2x_clk.hw,
+ [CLK_CPU] = &cpu_clk.common.hw,
+ [CLK_AXI] = &axi_clk.common.hw,
+ [CLK_AXI_DRAM] = &axi_dram_clk.common.hw,
+ [CLK_AHB] = &ahb_sun4i_clk.common.hw,
+ [CLK_APB0] = &apb0_clk.common.hw,
+ [CLK_APB1] = &apb1_clk.common.hw,
+ [CLK_AHB_OTG] = &ahb_otg_clk.common.hw,
+ [CLK_AHB_EHCI0] = &ahb_ehci0_clk.common.hw,
+ [CLK_AHB_OHCI0] = &ahb_ohci0_clk.common.hw,
+ [CLK_AHB_EHCI1] = &ahb_ehci1_clk.common.hw,
+ [CLK_AHB_OHCI1] = &ahb_ohci1_clk.common.hw,
+ [CLK_AHB_SS] = &ahb_ss_clk.common.hw,
+ [CLK_AHB_DMA] = &ahb_dma_clk.common.hw,
+ [CLK_AHB_BIST] = &ahb_bist_clk.common.hw,
+ [CLK_AHB_MMC0] = &ahb_mmc0_clk.common.hw,
+ [CLK_AHB_MMC1] = &ahb_mmc1_clk.common.hw,
+ [CLK_AHB_MMC2] = &ahb_mmc2_clk.common.hw,
+ [CLK_AHB_MMC3] = &ahb_mmc3_clk.common.hw,
+ [CLK_AHB_MS] = &ahb_ms_clk.common.hw,
+ [CLK_AHB_NAND] = &ahb_nand_clk.common.hw,
+ [CLK_AHB_SDRAM] = &ahb_sdram_clk.common.hw,
+ [CLK_AHB_ACE] = &ahb_ace_clk.common.hw,
+ [CLK_AHB_EMAC] = &ahb_emac_clk.common.hw,
+ [CLK_AHB_TS] = &ahb_ts_clk.common.hw,
+ [CLK_AHB_SPI0] = &ahb_spi0_clk.common.hw,
+ [CLK_AHB_SPI1] = &ahb_spi1_clk.common.hw,
+ [CLK_AHB_SPI2] = &ahb_spi2_clk.common.hw,
+ [CLK_AHB_SPI3] = &ahb_spi3_clk.common.hw,
+ [CLK_AHB_PATA] = &ahb_pata_clk.common.hw,
+ [CLK_AHB_SATA] = &ahb_sata_clk.common.hw,
+ [CLK_AHB_GPS] = &ahb_gps_clk.common.hw,
+ [CLK_AHB_VE] = &ahb_ve_clk.common.hw,
+ [CLK_AHB_TVD] = &ahb_tvd_clk.common.hw,
+ [CLK_AHB_TVE0] = &ahb_tve0_clk.common.hw,
+ [CLK_AHB_TVE1] = &ahb_tve1_clk.common.hw,
+ [CLK_AHB_LCD0] = &ahb_lcd0_clk.common.hw,
+ [CLK_AHB_LCD1] = &ahb_lcd1_clk.common.hw,
+ [CLK_AHB_CSI0] = &ahb_csi0_clk.common.hw,
+ [CLK_AHB_CSI1] = &ahb_csi1_clk.common.hw,
+ [CLK_AHB_HDMI0] = &ahb_hdmi0_clk.common.hw,
+ [CLK_AHB_DE_BE0] = &ahb_de_be0_clk.common.hw,
+ [CLK_AHB_DE_BE1] = &ahb_de_be1_clk.common.hw,
+ [CLK_AHB_DE_FE0] = &ahb_de_fe0_clk.common.hw,
+ [CLK_AHB_DE_FE1] = &ahb_de_fe1_clk.common.hw,
+ [CLK_AHB_MP] = &ahb_mp_clk.common.hw,
+ [CLK_AHB_GPU] = &ahb_gpu_clk.common.hw,
+ [CLK_APB0_CODEC] = &apb0_codec_clk.common.hw,
+ [CLK_APB0_SPDIF] = &apb0_spdif_clk.common.hw,
+ [CLK_APB0_AC97] = &apb0_ac97_clk.common.hw,
+ [CLK_APB0_I2S0] = &apb0_i2s0_clk.common.hw,
+ [CLK_APB0_PIO] = &apb0_pio_clk.common.hw,
+ [CLK_APB0_IR0] = &apb0_ir0_clk.common.hw,
+ [CLK_APB0_IR1] = &apb0_ir1_clk.common.hw,
+ [CLK_APB0_KEYPAD] = &apb0_keypad_clk.common.hw,
+ [CLK_APB1_I2C0] = &apb1_i2c0_clk.common.hw,
+ [CLK_APB1_I2C1] = &apb1_i2c1_clk.common.hw,
+ [CLK_APB1_I2C2] = &apb1_i2c2_clk.common.hw,
+ [CLK_APB1_CAN] = &apb1_can_clk.common.hw,
+ [CLK_APB1_SCR] = &apb1_scr_clk.common.hw,
+ [CLK_APB1_PS20] = &apb1_ps20_clk.common.hw,
+ [CLK_APB1_PS21] = &apb1_ps21_clk.common.hw,
+ [CLK_APB1_UART0] = &apb1_uart0_clk.common.hw,
+ [CLK_APB1_UART1] = &apb1_uart1_clk.common.hw,
+ [CLK_APB1_UART2] = &apb1_uart2_clk.common.hw,
+ [CLK_APB1_UART3] = &apb1_uart3_clk.common.hw,
+ [CLK_APB1_UART4] = &apb1_uart4_clk.common.hw,
+ [CLK_APB1_UART5] = &apb1_uart5_clk.common.hw,
+ [CLK_APB1_UART6] = &apb1_uart6_clk.common.hw,
+ [CLK_APB1_UART7] = &apb1_uart7_clk.common.hw,
+ [CLK_NAND] = &nand_clk.common.hw,
+ [CLK_MS] = &ms_clk.common.hw,
+ [CLK_MMC0] = &mmc0_clk.common.hw,
+ [CLK_MMC1] = &mmc1_clk.common.hw,
+ [CLK_MMC2] = &mmc2_clk.common.hw,
+ [CLK_MMC3] = &mmc3_clk.common.hw,
+ [CLK_TS] = &ts_clk.common.hw,
+ [CLK_SS] = &ss_clk.common.hw,
+ [CLK_SPI0] = &spi0_clk.common.hw,
+ [CLK_SPI1] = &spi1_clk.common.hw,
+ [CLK_SPI2] = &spi2_clk.common.hw,
+ [CLK_PATA] = &pata_clk.common.hw,
+ [CLK_IR0] = &ir0_sun4i_clk.common.hw,
+ [CLK_IR1] = &ir1_sun4i_clk.common.hw,
+ [CLK_I2S0] = &i2s0_clk.common.hw,
+ [CLK_AC97] = &ac97_clk.common.hw,
+ [CLK_SPDIF] = &spdif_clk.common.hw,
+ [CLK_KEYPAD] = &keypad_clk.common.hw,
+ [CLK_SATA] = &sata_clk.common.hw,
+ [CLK_USB_OHCI0] = &usb_ohci0_clk.common.hw,
+ [CLK_USB_OHCI1] = &usb_ohci1_clk.common.hw,
+ [CLK_USB_PHY] = &usb_phy_clk.common.hw,
+ /* CLK_GPS is unimplemented */
+ [CLK_SPI3] = &spi3_clk.common.hw,
+ [CLK_DRAM_VE] = &dram_ve_clk.common.hw,
+ [CLK_DRAM_CSI0] = &dram_csi0_clk.common.hw,
+ [CLK_DRAM_CSI1] = &dram_csi1_clk.common.hw,
+ [CLK_DRAM_TS] = &dram_ts_clk.common.hw,
+ [CLK_DRAM_TVD] = &dram_tvd_clk.common.hw,
+ [CLK_DRAM_TVE0] = &dram_tve0_clk.common.hw,
+ [CLK_DRAM_TVE1] = &dram_tve1_clk.common.hw,
+ [CLK_DRAM_OUT] = &dram_out_clk.common.hw,
+ [CLK_DRAM_DE_FE1] = &dram_de_fe1_clk.common.hw,
+ [CLK_DRAM_DE_FE0] = &dram_de_fe0_clk.common.hw,
+ [CLK_DRAM_DE_BE0] = &dram_de_be0_clk.common.hw,
+ [CLK_DRAM_DE_BE1] = &dram_de_be1_clk.common.hw,
+ [CLK_DRAM_MP] = &dram_mp_clk.common.hw,
+ [CLK_DRAM_ACE] = &dram_ace_clk.common.hw,
+ [CLK_DE_BE0] = &de_be0_clk.common.hw,
+ [CLK_DE_BE1] = &de_be1_clk.common.hw,
+ [CLK_DE_FE0] = &de_fe0_clk.common.hw,
+ [CLK_DE_FE1] = &de_fe1_clk.common.hw,
+ [CLK_DE_MP] = &de_mp_clk.common.hw,
+ [CLK_TCON0_CH0] = &tcon0_ch0_clk.common.hw,
+ [CLK_TCON1_CH0] = &tcon1_ch0_clk.common.hw,
+ [CLK_CSI_SCLK] = &csi_sclk_clk.common.hw,
+ [CLK_TVD] = &tvd_sun4i_clk.common.hw,
+ [CLK_TCON0_CH1_SCLK2] = &tcon0_ch1_sclk2_clk.common.hw,
+ [CLK_TCON0_CH1] = &tcon0_ch1_clk.common.hw,
+ [CLK_TCON1_CH1_SCLK2] = &tcon1_ch1_sclk2_clk.common.hw,
+ [CLK_TCON1_CH1] = &tcon1_ch1_clk.common.hw,
+ [CLK_CSI0] = &csi0_clk.common.hw,
+ [CLK_CSI1] = &csi1_clk.common.hw,
+ [CLK_VE] = &ve_clk.common.hw,
+ [CLK_CODEC] = &codec_clk.common.hw,
+ [CLK_AVS] = &avs_clk.common.hw,
+ [CLK_ACE] = &ace_clk.common.hw,
+ [CLK_HDMI] = &hdmi_clk.common.hw,
+ [CLK_GPU] = &gpu_sun7i_clk.common.hw,
+ [CLK_MBUS] = &mbus_sun4i_clk.common.hw,
+ },
+ .num = CLK_NUMBER_SUN4I,
+};
+static struct clk_hw_onecell_data sun7i_a20_hw_clks = {
+ .hws = {
+ [CLK_HOSC] = &hosc_clk.common.hw,
+ [CLK_PLL_CORE] = &pll_core_clk.common.hw,
+ [CLK_PLL_AUDIO_BASE] = &pll_audio_base_clk.common.hw,
+ [CLK_PLL_AUDIO] = &pll_audio_clk.hw,
+ [CLK_PLL_AUDIO_2X] = &pll_audio_2x_clk.hw,
+ [CLK_PLL_AUDIO_4X] = &pll_audio_4x_clk.hw,
+ [CLK_PLL_AUDIO_8X] = &pll_audio_8x_clk.hw,
+ [CLK_PLL_VIDEO0] = &pll_video0_clk.common.hw,
+ [CLK_PLL_VIDEO0_2X] = &pll_video0_2x_clk.hw,
+ [CLK_PLL_VE] = &pll_ve_sun7i_clk.common.hw,
+ [CLK_PLL_DDR_BASE] = &pll_ddr_base_clk.common.hw,
+ [CLK_PLL_DDR] = &pll_ddr_clk.common.hw,
+ [CLK_PLL_DDR_OTHER] = &pll_ddr_other_clk.common.hw,
+ [CLK_PLL_PERIPH_BASE] = &pll_periph_base_clk.common.hw,
+ [CLK_PLL_PERIPH] = &pll_periph_clk.hw,
+ [CLK_PLL_PERIPH_SATA] = &pll_periph_sata_clk.common.hw,
+ [CLK_PLL_VIDEO1] = &pll_video1_clk.common.hw,
+ [CLK_PLL_VIDEO1_2X] = &pll_video1_2x_clk.hw,
+ [CLK_PLL_GPU] = &pll_gpu_clk.common.hw,
+ [CLK_CPU] = &cpu_clk.common.hw,
+ [CLK_AXI] = &axi_clk.common.hw,
+ [CLK_AHB] = &ahb_sun7i_clk.common.hw,
+ [CLK_APB0] = &apb0_clk.common.hw,
+ [CLK_APB1] = &apb1_clk.common.hw,
+ [CLK_AHB_OTG] = &ahb_otg_clk.common.hw,
+ [CLK_AHB_EHCI0] = &ahb_ehci0_clk.common.hw,
+ [CLK_AHB_OHCI0] = &ahb_ohci0_clk.common.hw,
+ [CLK_AHB_EHCI1] = &ahb_ehci1_clk.common.hw,
+ [CLK_AHB_OHCI1] = &ahb_ohci1_clk.common.hw,
+ [CLK_AHB_SS] = &ahb_ss_clk.common.hw,
+ [CLK_AHB_DMA] = &ahb_dma_clk.common.hw,
+ [CLK_AHB_BIST] = &ahb_bist_clk.common.hw,
+ [CLK_AHB_MMC0] = &ahb_mmc0_clk.common.hw,
+ [CLK_AHB_MMC1] = &ahb_mmc1_clk.common.hw,
+ [CLK_AHB_MMC2] = &ahb_mmc2_clk.common.hw,
+ [CLK_AHB_MMC3] = &ahb_mmc3_clk.common.hw,
+ [CLK_AHB_MS] = &ahb_ms_clk.common.hw,
+ [CLK_AHB_NAND] = &ahb_nand_clk.common.hw,
+ [CLK_AHB_SDRAM] = &ahb_sdram_clk.common.hw,
+ [CLK_AHB_ACE] = &ahb_ace_clk.common.hw,
+ [CLK_AHB_EMAC] = &ahb_emac_clk.common.hw,
+ [CLK_AHB_TS] = &ahb_ts_clk.common.hw,
+ [CLK_AHB_SPI0] = &ahb_spi0_clk.common.hw,
+ [CLK_AHB_SPI1] = &ahb_spi1_clk.common.hw,
+ [CLK_AHB_SPI2] = &ahb_spi2_clk.common.hw,
+ [CLK_AHB_SPI3] = &ahb_spi3_clk.common.hw,
+ [CLK_AHB_PATA] = &ahb_pata_clk.common.hw,
+ [CLK_AHB_SATA] = &ahb_sata_clk.common.hw,
+ [CLK_AHB_HSTIMER] = &ahb_hstimer_clk.common.hw,
+ [CLK_AHB_VE] = &ahb_ve_clk.common.hw,
+ [CLK_AHB_TVD] = &ahb_tvd_clk.common.hw,
+ [CLK_AHB_TVE0] = &ahb_tve0_clk.common.hw,
+ [CLK_AHB_TVE1] = &ahb_tve1_clk.common.hw,
+ [CLK_AHB_LCD0] = &ahb_lcd0_clk.common.hw,
+ [CLK_AHB_LCD1] = &ahb_lcd1_clk.common.hw,
+ [CLK_AHB_CSI0] = &ahb_csi0_clk.common.hw,
+ [CLK_AHB_CSI1] = &ahb_csi1_clk.common.hw,
+ [CLK_AHB_HDMI1] = &ahb_hdmi1_clk.common.hw,
+ [CLK_AHB_HDMI0] = &ahb_hdmi0_clk.common.hw,
+ [CLK_AHB_DE_BE0] = &ahb_de_be0_clk.common.hw,
+ [CLK_AHB_DE_BE1] = &ahb_de_be1_clk.common.hw,
+ [CLK_AHB_DE_FE0] = &ahb_de_fe0_clk.common.hw,
+ [CLK_AHB_DE_FE1] = &ahb_de_fe1_clk.common.hw,
+ [CLK_AHB_GMAC] = &ahb_gmac_clk.common.hw,
+ [CLK_AHB_MP] = &ahb_mp_clk.common.hw,
+ [CLK_AHB_GPU] = &ahb_gpu_clk.common.hw,
+ [CLK_APB0_CODEC] = &apb0_codec_clk.common.hw,
+ [CLK_APB0_SPDIF] = &apb0_spdif_clk.common.hw,
+ [CLK_APB0_AC97] = &apb0_ac97_clk.common.hw,
+ [CLK_APB0_I2S0] = &apb0_i2s0_clk.common.hw,
+ [CLK_APB0_I2S1] = &apb0_i2s1_clk.common.hw,
+ [CLK_APB0_PIO] = &apb0_pio_clk.common.hw,
+ [CLK_APB0_IR0] = &apb0_ir0_clk.common.hw,
+ [CLK_APB0_IR1] = &apb0_ir1_clk.common.hw,
+ [CLK_APB0_I2S2] = &apb0_i2s2_clk.common.hw,
+ [CLK_APB0_KEYPAD] = &apb0_keypad_clk.common.hw,
+ [CLK_APB1_I2C0] = &apb1_i2c0_clk.common.hw,
+ [CLK_APB1_I2C1] = &apb1_i2c1_clk.common.hw,
+ [CLK_APB1_I2C2] = &apb1_i2c2_clk.common.hw,
+ [CLK_APB1_I2C3] = &apb1_i2c3_clk.common.hw,
+ [CLK_APB1_CAN] = &apb1_can_clk.common.hw,
+ [CLK_APB1_SCR] = &apb1_scr_clk.common.hw,
+ [CLK_APB1_PS20] = &apb1_ps20_clk.common.hw,
+ [CLK_APB1_PS21] = &apb1_ps21_clk.common.hw,
+ [CLK_APB1_I2C4] = &apb1_i2c4_clk.common.hw,
+ [CLK_APB1_UART0] = &apb1_uart0_clk.common.hw,
+ [CLK_APB1_UART1] = &apb1_uart1_clk.common.hw,
+ [CLK_APB1_UART2] = &apb1_uart2_clk.common.hw,
+ [CLK_APB1_UART3] = &apb1_uart3_clk.common.hw,
+ [CLK_APB1_UART4] = &apb1_uart4_clk.common.hw,
+ [CLK_APB1_UART5] = &apb1_uart5_clk.common.hw,
+ [CLK_APB1_UART6] = &apb1_uart6_clk.common.hw,
+ [CLK_APB1_UART7] = &apb1_uart7_clk.common.hw,
+ [CLK_NAND] = &nand_clk.common.hw,
+ [CLK_MS] = &ms_clk.common.hw,
+ [CLK_MMC0] = &mmc0_clk.common.hw,
+ [CLK_MMC0_OUTPUT] = &mmc0_output_clk.common.hw,
+ [CLK_MMC0_SAMPLE] = &mmc0_sample_clk.common.hw,
+ [CLK_MMC1] = &mmc1_clk.common.hw,
+ [CLK_MMC1_OUTPUT] = &mmc1_output_clk.common.hw,
+ [CLK_MMC1_SAMPLE] = &mmc1_sample_clk.common.hw,
+ [CLK_MMC2] = &mmc2_clk.common.hw,
+ [CLK_MMC2_OUTPUT] = &mmc2_output_clk.common.hw,
+ [CLK_MMC2_SAMPLE] = &mmc2_sample_clk.common.hw,
+ [CLK_MMC3] = &mmc3_clk.common.hw,
+ [CLK_MMC3_OUTPUT] = &mmc3_output_clk.common.hw,
+ [CLK_MMC3_SAMPLE] = &mmc3_sample_clk.common.hw,
+ [CLK_TS] = &ts_clk.common.hw,
+ [CLK_SS] = &ss_clk.common.hw,
+ [CLK_SPI0] = &spi0_clk.common.hw,
+ [CLK_SPI1] = &spi1_clk.common.hw,
+ [CLK_SPI2] = &spi2_clk.common.hw,
+ [CLK_PATA] = &pata_clk.common.hw,
+ [CLK_IR0] = &ir0_sun7i_clk.common.hw,
+ [CLK_IR1] = &ir1_sun7i_clk.common.hw,
+ [CLK_I2S0] = &i2s0_clk.common.hw,
+ [CLK_AC97] = &ac97_clk.common.hw,
+ [CLK_SPDIF] = &spdif_clk.common.hw,
+ [CLK_KEYPAD] = &keypad_clk.common.hw,
+ [CLK_SATA] = &sata_clk.common.hw,
+ [CLK_USB_OHCI0] = &usb_ohci0_clk.common.hw,
+ [CLK_USB_OHCI1] = &usb_ohci1_clk.common.hw,
+ [CLK_USB_PHY] = &usb_phy_clk.common.hw,
+ /* CLK_GPS is unimplemented */
+ [CLK_SPI3] = &spi3_clk.common.hw,
+ [CLK_I2S1] = &i2s1_clk.common.hw,
+ [CLK_I2S2] = &i2s2_clk.common.hw,
+ [CLK_DRAM_VE] = &dram_ve_clk.common.hw,
+ [CLK_DRAM_CSI0] = &dram_csi0_clk.common.hw,
+ [CLK_DRAM_CSI1] = &dram_csi1_clk.common.hw,
+ [CLK_DRAM_TS] = &dram_ts_clk.common.hw,
+ [CLK_DRAM_TVD] = &dram_tvd_clk.common.hw,
+ [CLK_DRAM_TVE0] = &dram_tve0_clk.common.hw,
+ [CLK_DRAM_TVE1] = &dram_tve1_clk.common.hw,
+ [CLK_DRAM_OUT] = &dram_out_clk.common.hw,
+ [CLK_DRAM_DE_FE1] = &dram_de_fe1_clk.common.hw,
+ [CLK_DRAM_DE_FE0] = &dram_de_fe0_clk.common.hw,
+ [CLK_DRAM_DE_BE0] = &dram_de_be0_clk.common.hw,
+ [CLK_DRAM_DE_BE1] = &dram_de_be1_clk.common.hw,
+ [CLK_DRAM_MP] = &dram_mp_clk.common.hw,
+ [CLK_DRAM_ACE] = &dram_ace_clk.common.hw,
+ [CLK_DE_BE0] = &de_be0_clk.common.hw,
+ [CLK_DE_BE1] = &de_be1_clk.common.hw,
+ [CLK_DE_FE0] = &de_fe0_clk.common.hw,
+ [CLK_DE_FE1] = &de_fe1_clk.common.hw,
+ [CLK_DE_MP] = &de_mp_clk.common.hw,
+ [CLK_TCON0_CH0] = &tcon0_ch0_clk.common.hw,
+ [CLK_TCON1_CH0] = &tcon1_ch0_clk.common.hw,
+ [CLK_CSI_SCLK] = &csi_sclk_clk.common.hw,
+ [CLK_TVD_SCLK2] = &tvd_sclk2_sun7i_clk.common.hw,
+ [CLK_TVD] = &tvd_sclk1_sun7i_clk.common.hw,
+ [CLK_TCON0_CH1_SCLK2] = &tcon0_ch1_sclk2_clk.common.hw,
+ [CLK_TCON0_CH1] = &tcon0_ch1_clk.common.hw,
+ [CLK_TCON1_CH1_SCLK2] = &tcon1_ch1_sclk2_clk.common.hw,
+ [CLK_TCON1_CH1] = &tcon1_ch1_clk.common.hw,
+ [CLK_CSI0] = &csi0_clk.common.hw,
+ [CLK_CSI1] = &csi1_clk.common.hw,
+ [CLK_VE] = &ve_clk.common.hw,
+ [CLK_CODEC] = &codec_clk.common.hw,
+ [CLK_AVS] = &avs_clk.common.hw,
+ [CLK_ACE] = &ace_clk.common.hw,
+ [CLK_HDMI] = &hdmi_clk.common.hw,
+ [CLK_GPU] = &gpu_sun7i_clk.common.hw,
+ [CLK_MBUS] = &mbus_sun7i_clk.common.hw,
+ [CLK_HDMI1_SLOW] = &hdmi1_slow_clk.common.hw,
+ [CLK_HDMI1] = &hdmi1_clk.common.hw,
+ [CLK_OUT_A] = &out_a_clk.common.hw,
+ [CLK_OUT_B] = &out_b_clk.common.hw,
+ },
+ .num = CLK_NUMBER_SUN7I,
+};
+
+static struct ccu_reset_map sunxi_a10_a20_ccu_resets[] = {
+ [RST_USB_PHY0] = { 0x0cc, BIT(0) },
+ [RST_USB_PHY1] = { 0x0cc, BIT(1) },
+ [RST_USB_PHY2] = { 0x0cc, BIT(2) },
+ [RST_GPS] = { 0x0d0, BIT(0) },
+ [RST_DE_BE0] = { 0x104, BIT(30) },
+ [RST_DE_BE1] = { 0x108, BIT(30) },
+ [RST_DE_FE0] = { 0x10c, BIT(30) },
+ [RST_DE_FE1] = { 0x110, BIT(30) },
+ [RST_DE_MP] = { 0x114, BIT(30) },
+ [RST_TVE0] = { 0x118, BIT(29) },
+ [RST_TCON0] = { 0x118, BIT(30) },
+ [RST_TVE1] = { 0x11c, BIT(29) },
+ [RST_TCON1] = { 0x11c, BIT(30) },
+ [RST_CSI0] = { 0x134, BIT(30) },
+ [RST_CSI1] = { 0x138, BIT(30) },
+ [RST_VE] = { 0x13c, BIT(0) },
+ [RST_ACE] = { 0x148, BIT(16) },
+ [RST_LVDS] = { 0x14c, BIT(0) },
+ [RST_GPU] = { 0x154, BIT(30) },
+ [RST_HDMI_H] = { 0x170, BIT(0) },
+ [RST_HDMI_SYS] = { 0x170, BIT(1) },
+ [RST_HDMI_AUDIO_DMA] = { 0x170, BIT(2) },
+};
+
+static const struct sunxi_ccu_desc sun4i_a10_ccu_desc = {
+ .ccu_clks = sun4i_sun7i_ccu_clks,
+ .num_ccu_clks = ARRAY_SIZE(sun4i_sun7i_ccu_clks),
+
+ .hw_clks = &sun4i_a10_hw_clks,
+
+ .resets = sunxi_a10_a20_ccu_resets,
+ .num_resets = ARRAY_SIZE(sunxi_a10_a20_ccu_resets),
+};
+
+static const struct sunxi_ccu_desc sun7i_a20_ccu_desc = {
+ .ccu_clks = sun4i_sun7i_ccu_clks,
+ .num_ccu_clks = ARRAY_SIZE(sun4i_sun7i_ccu_clks),
+
+ .hw_clks = &sun7i_a20_hw_clks,
+
+ .resets = sunxi_a10_a20_ccu_resets,
+ .num_resets = ARRAY_SIZE(sunxi_a10_a20_ccu_resets),
+};
+
+static void __init sun4i_ccu_init(struct device_node *node,
+ const struct sunxi_ccu_desc *desc)
+{
+ void __iomem *reg;
+ u32 val;
+
+ reg = of_io_request_and_map(node, 0, of_node_full_name(node));
+ if (IS_ERR(reg)) {
+ pr_err("%s: Could not map the clock registers\n",
+ of_node_full_name(node));
+ return;
+ }
+
+ /* Force the PLL-Audio-1x divider to 4 */
+ val = readl(reg + SUN4I_PLL_AUDIO_REG);
+ val &= ~GENMASK(29, 26);
+ writel(val | (4 << 26), reg + SUN4I_PLL_AUDIO_REG);
+
+ /*
+ * Use the peripheral PLL6 as the AHB parent, instead of CPU /
+ * AXI which have rate changes due to cpufreq.
+ *
+ * This is especially a big deal for the HS timer whose parent
+ * clock is AHB.
+ *
+ * NB! These bits are undocumented in A10 manual.
+ */
+ val = readl(reg + SUN4I_AHB_REG);
+ val &= ~GENMASK(7, 6);
+ writel(val | (2 << 6), reg + SUN4I_AHB_REG);
+
+ sunxi_ccu_probe(node, reg, desc);
+}
+
+static void __init sun4i_a10_ccu_setup(struct device_node *node)
+{
+ sun4i_ccu_init(node, &sun4i_a10_ccu_desc);
+}
+CLK_OF_DECLARE(sun4i_a10_ccu, "allwinner,sun4i-a10-ccu",
+ sun4i_a10_ccu_setup);
+
+static void __init sun7i_a20_ccu_setup(struct device_node *node)
+{
+ sun4i_ccu_init(node, &sun7i_a20_ccu_desc);
+}
+CLK_OF_DECLARE(sun7i_a20_ccu, "allwinner,sun7i-a20-ccu",
+ sun7i_a20_ccu_setup);
diff --git a/drivers/clk/sunxi-ng/ccu-sun4i-a10.h b/drivers/clk/sunxi-ng/ccu-sun4i-a10.h
new file mode 100644
index 000000000000..c5947c7c050e
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun4i-a10.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2017 Priit Laes
+ *
+ * Priit Laes <plaes@plaes.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _CCU_SUN4I_A10_H_
+#define _CCU_SUN4I_A10_H_
+
+#include <dt-bindings/clock/sun4i-a10-ccu.h>
+#include <dt-bindings/clock/sun7i-a20-ccu.h>
+#include <dt-bindings/reset/sun4i-a10-ccu.h>
+
+/* The HOSC is exported */
+#define CLK_PLL_CORE 2
+#define CLK_PLL_AUDIO_BASE 3
+#define CLK_PLL_AUDIO 4
+#define CLK_PLL_AUDIO_2X 5
+#define CLK_PLL_AUDIO_4X 6
+#define CLK_PLL_AUDIO_8X 7
+#define CLK_PLL_VIDEO0 8
+#define CLK_PLL_VIDEO0_2X 9
+#define CLK_PLL_VE 10
+#define CLK_PLL_DDR_BASE 11
+#define CLK_PLL_DDR 12
+#define CLK_PLL_DDR_OTHER 13
+#define CLK_PLL_PERIPH_BASE 14
+#define CLK_PLL_PERIPH 15
+#define CLK_PLL_PERIPH_SATA 16
+#define CLK_PLL_VIDEO1 17
+#define CLK_PLL_VIDEO1_2X 18
+#define CLK_PLL_GPU 19
+
+/* The CPU clock is exported */
+#define CLK_AXI 21
+#define CLK_AXI_DRAM 22
+#define CLK_AHB 23
+#define CLK_APB0 24
+#define CLK_APB1 25
+
+/* AHB gates are exported (23..68) */
+/* APB0 gates are exported (69..78) */
+/* APB1 gates are exported (79..95) */
+/* IP module clocks are exported (96..128) */
+/* DRAM gates are exported (129..142)*/
+/* Media (display engine clocks & etc) are exported (143..169) */
+
+#define CLK_NUMBER_SUN4I (CLK_MBUS + 1)
+#define CLK_NUMBER_SUN7I (CLK_OUT_B + 1)
+
+#endif /* _CCU_SUN4I_A10_H_ */
diff --git a/drivers/clk/sunxi-ng/ccu-sun5i.c b/drivers/clk/sunxi-ng/ccu-sun5i.c
index 31d7ffda9aab..ab9e850b3707 100644
--- a/drivers/clk/sunxi-ng/ccu-sun5i.c
+++ b/drivers/clk/sunxi-ng/ccu-sun5i.c
@@ -976,8 +976,7 @@ static void __init sun5i_ccu_init(struct device_node *node,
reg = of_io_request_and_map(node, 0, of_node_full_name(node));
if (IS_ERR(reg)) {
- pr_err("%s: Could not map the clock registers\n",
- of_node_full_name(node));
+ pr_err("%pOF: Could not map the clock registers\n", node);
return;
}
diff --git a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
index 4d6078fca9ac..8af434815fba 100644
--- a/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
+++ b/drivers/clk/sunxi-ng/ccu-sun6i-a31.c
@@ -1217,8 +1217,7 @@ static void __init sun6i_a31_ccu_setup(struct device_node *node)
reg = of_io_request_and_map(node, 0, of_node_full_name(node));
if (IS_ERR(reg)) {
- pr_err("%s: Could not map the clock registers\n",
- of_node_full_name(node));
+ pr_err("%pOF: Could not map the clock registers\n", node);
return;
}
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-a23.c b/drivers/clk/sunxi-ng/ccu-sun8i-a23.c
index 8a753ed0426d..d93b452f0df9 100644
--- a/drivers/clk/sunxi-ng/ccu-sun8i-a23.c
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-a23.c
@@ -716,8 +716,7 @@ static void __init sun8i_a23_ccu_setup(struct device_node *node)
reg = of_io_request_and_map(node, 0, of_node_full_name(node));
if (IS_ERR(reg)) {
- pr_err("%s: Could not map the clock registers\n",
- of_node_full_name(node));
+ pr_err("%pOF: Could not map the clock registers\n", node);
return;
}
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-a33.c b/drivers/clk/sunxi-ng/ccu-sun8i-a33.c
index 10b38dc46f75..13eb5b23c5e7 100644
--- a/drivers/clk/sunxi-ng/ccu-sun8i-a33.c
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-a33.c
@@ -777,8 +777,7 @@ static void __init sun8i_a33_ccu_setup(struct device_node *node)
reg = of_io_request_and_map(node, 0, of_node_full_name(node));
if (IS_ERR(reg)) {
- pr_err("%s: Could not map the clock registers\n",
- of_node_full_name(node));
+ pr_err("%pOF: Could not map the clock registers\n", node);
return;
}
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-h3.c b/drivers/clk/sunxi-ng/ccu-sun8i-h3.c
index 62e4f0d2b2fc..1729ff6a5aae 100644
--- a/drivers/clk/sunxi-ng/ccu-sun8i-h3.c
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-h3.c
@@ -135,7 +135,7 @@ static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_de_clk, "pll-de",
static const char * const cpux_parents[] = { "osc32k", "osc24M",
"pll-cpux" , "pll-cpux" };
static SUNXI_CCU_MUX(cpux_clk, "cpux", cpux_parents,
- 0x050, 16, 2, CLK_IS_CRITICAL);
+ 0x050, 16, 2, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT);
static SUNXI_CCU_M(axi_clk, "axi", "cpux", 0x050, 0, 2, 0);
@@ -1103,6 +1103,13 @@ static const struct sunxi_ccu_desc sun50i_h5_ccu_desc = {
.num_resets = ARRAY_SIZE(sun50i_h5_ccu_resets),
};
+static struct ccu_pll_nb sun8i_h3_pll_cpu_nb = {
+ .common = &pll_cpux_clk.common,
+ /* copy from pll_cpux_clk */
+ .enable = BIT(31),
+ .lock = BIT(28),
+};
+
static struct ccu_mux_nb sun8i_h3_cpu_nb = {
.common = &cpux_clk.common,
.cm = &cpux_clk.mux,
@@ -1118,8 +1125,7 @@ static void __init sunxi_h3_h5_ccu_init(struct device_node *node,
reg = of_io_request_and_map(node, 0, of_node_full_name(node));
if (IS_ERR(reg)) {
- pr_err("%s: Could not map the clock registers\n",
- of_node_full_name(node));
+ pr_err("%pOF: Could not map the clock registers\n", node);
return;
}
@@ -1130,6 +1136,10 @@ static void __init sunxi_h3_h5_ccu_init(struct device_node *node,
sunxi_ccu_probe(node, reg, desc);
+ /* Gate then ungate PLL CPU after any rate changes */
+ ccu_pll_notifier_register(&sun8i_h3_pll_cpu_nb);
+
+ /* Reparent CPU during PLL CPU rate changes */
ccu_mux_notifier_register(pll_cpux_clk.common.hw.clk,
&sun8i_h3_cpu_nb);
}
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-r.c b/drivers/clk/sunxi-ng/ccu-sun8i-r.c
index e54816ec1dbe..71feb7b24e8a 100644
--- a/drivers/clk/sunxi-ng/ccu-sun8i-r.c
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-r.c
@@ -290,8 +290,7 @@ static void __init sunxi_r_ccu_init(struct device_node *node,
reg = of_io_request_and_map(node, 0, of_node_full_name(node));
if (IS_ERR(reg)) {
- pr_err("%s: Could not map the clock registers\n",
- of_node_full_name(node));
+ pr_err("%pOF: Could not map the clock registers\n", node);
return;
}
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-r.h b/drivers/clk/sunxi-ng/ccu-sun8i-r.h
index a7a407f12b56..fb01bffb929d 100644
--- a/drivers/clk/sunxi-ng/ccu-sun8i-r.h
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-r.h
@@ -13,7 +13,7 @@
*/
#ifndef _CCU_SUN8I_R_H
-#define _CCU_SUN8I_R_H_
+#define _CCU_SUN8I_R_H
#include <dt-bindings/clock/sun8i-r-ccu.h>
#include <dt-bindings/reset/sun8i-r-ccu.h>
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-r40.c b/drivers/clk/sunxi-ng/ccu-sun8i-r40.c
new file mode 100644
index 000000000000..933f2e68f42a
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-r40.c
@@ -0,0 +1,1290 @@
+/*
+ * Copyright (c) 2017 Icenowy Zheng <icenowy@aosc.io>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/of_address.h>
+
+#include "ccu_common.h"
+#include "ccu_reset.h"
+
+#include "ccu_div.h"
+#include "ccu_gate.h"
+#include "ccu_mp.h"
+#include "ccu_mult.h"
+#include "ccu_nk.h"
+#include "ccu_nkm.h"
+#include "ccu_nkmp.h"
+#include "ccu_nm.h"
+#include "ccu_phase.h"
+
+#include "ccu-sun8i-r40.h"
+
+/* TODO: The result of N*K is required to be in [10, 88] range. */
+static struct ccu_nkmp pll_cpu_clk = {
+ .enable = BIT(31),
+ .lock = BIT(28),
+ .n = _SUNXI_CCU_MULT(8, 5),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .m = _SUNXI_CCU_DIV(0, 2),
+ .p = _SUNXI_CCU_DIV_MAX(16, 2, 4),
+ .common = {
+ .reg = 0x000,
+ .hw.init = CLK_HW_INIT("pll-cpu",
+ "osc24M",
+ &ccu_nkmp_ops,
+ CLK_SET_RATE_UNGATE),
+ },
+};
+
+/*
+ * The Audio PLL is supposed to have 4 outputs: 3 fixed factors from
+ * the base (2x, 4x and 8x), and one variable divider (the one true
+ * pll audio).
+ *
+ * We don't have any need for the variable divider for now, so we just
+ * hardcode it to match with the clock names
+ */
+#define SUN8I_R40_PLL_AUDIO_REG 0x008
+
+static SUNXI_CCU_NM_WITH_GATE_LOCK(pll_audio_base_clk, "pll-audio-base",
+ "osc24M", 0x008,
+ 8, 7, /* N */
+ 0, 5, /* M */
+ BIT(31), /* gate */
+ BIT(28), /* lock */
+ CLK_SET_RATE_UNGATE);
+
+/* TODO: The result of N/M is required to be in [8, 25] range. */
+static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_video0_clk, "pll-video0",
+ "osc24M", 0x0010,
+ 8, 7, /* N */
+ 0, 4, /* M */
+ BIT(24), /* frac enable */
+ BIT(25), /* frac select */
+ 270000000, /* frac rate 0 */
+ 297000000, /* frac rate 1 */
+ BIT(31), /* gate */
+ BIT(28), /* lock */
+ CLK_SET_RATE_UNGATE);
+
+/* TODO: The result of N/M is required to be in [8, 25] range. */
+static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_ve_clk, "pll-ve",
+ "osc24M", 0x0018,
+ 8, 7, /* N */
+ 0, 4, /* M */
+ BIT(24), /* frac enable */
+ BIT(25), /* frac select */
+ 270000000, /* frac rate 0 */
+ 297000000, /* frac rate 1 */
+ BIT(31), /* gate */
+ BIT(28), /* lock */
+ CLK_SET_RATE_UNGATE);
+
+/* TODO: The result of N*K is required to be in [10, 77] range. */
+static SUNXI_CCU_NKM_WITH_GATE_LOCK(pll_ddr0_clk, "pll-ddr0",
+ "osc24M", 0x020,
+ 8, 5, /* N */
+ 4, 2, /* K */
+ 0, 2, /* M */
+ BIT(31), /* gate */
+ BIT(28), /* lock */
+ CLK_SET_RATE_UNGATE);
+
+/* TODO: The result of N*K is required to be in [21, 58] range. */
+static struct ccu_nk pll_periph0_clk = {
+ .enable = BIT(31),
+ .lock = BIT(28),
+ .n = _SUNXI_CCU_MULT(8, 5),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .fixed_post_div = 2,
+ .common = {
+ .reg = 0x028,
+ .features = CCU_FEATURE_FIXED_POSTDIV,
+ .hw.init = CLK_HW_INIT("pll-periph0", "osc24M",
+ &ccu_nk_ops,
+ CLK_SET_RATE_UNGATE),
+ },
+};
+
+static struct ccu_div pll_periph0_sata_clk = {
+ .enable = BIT(24),
+ .div = _SUNXI_CCU_DIV(0, 2),
+ /*
+ * The formula of pll-periph0 (1x) is 24MHz*N*K/2, and the formula
+ * of pll-periph0-sata is 24MHz*N*K/M/6, so the postdiv here is
+ * 6/2 = 3.
+ */
+ .fixed_post_div = 3,
+ .common = {
+ .reg = 0x028,
+ .features = CCU_FEATURE_FIXED_POSTDIV,
+ .hw.init = CLK_HW_INIT("pll-periph0-sata",
+ "pll-periph0",
+ &ccu_div_ops, 0),
+ },
+};
+
+/* TODO: The result of N*K is required to be in [21, 58] range. */
+static struct ccu_nk pll_periph1_clk = {
+ .enable = BIT(31),
+ .lock = BIT(28),
+ .n = _SUNXI_CCU_MULT(8, 5),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .fixed_post_div = 2,
+ .common = {
+ .reg = 0x02c,
+ .features = CCU_FEATURE_FIXED_POSTDIV,
+ .hw.init = CLK_HW_INIT("pll-periph1", "osc24M",
+ &ccu_nk_ops,
+ CLK_SET_RATE_UNGATE),
+ },
+};
+
+/* TODO: The result of N/M is required to be in [8, 25] range. */
+static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_video1_clk, "pll-video1",
+ "osc24M", 0x030,
+ 8, 7, /* N */
+ 0, 4, /* M */
+ BIT(24), /* frac enable */
+ BIT(25), /* frac select */
+ 270000000, /* frac rate 0 */
+ 297000000, /* frac rate 1 */
+ BIT(31), /* gate */
+ BIT(28), /* lock */
+ CLK_SET_RATE_UNGATE);
+
+static struct ccu_nkm pll_sata_clk = {
+ .enable = BIT(31),
+ .lock = BIT(28),
+ .n = _SUNXI_CCU_MULT(8, 5),
+ .k = _SUNXI_CCU_MULT(4, 2),
+ .m = _SUNXI_CCU_DIV(0, 2),
+ .fixed_post_div = 6,
+ .common = {
+ .reg = 0x034,
+ .features = CCU_FEATURE_FIXED_POSTDIV,
+ .hw.init = CLK_HW_INIT("pll-sata", "osc24M",
+ &ccu_nkm_ops,
+ CLK_SET_RATE_UNGATE),
+ },
+};
+
+static const char * const pll_sata_out_parents[] = { "pll-sata",
+ "pll-periph0-sata" };
+static SUNXI_CCU_MUX_WITH_GATE(pll_sata_out_clk, "pll-sata-out",
+ pll_sata_out_parents, 0x034,
+ 30, 1, /* mux */
+ BIT(14), /* gate */
+ CLK_SET_RATE_PARENT);
+
+/* TODO: The result of N/M is required to be in [8, 25] range. */
+static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_gpu_clk, "pll-gpu",
+ "osc24M", 0x038,
+ 8, 7, /* N */
+ 0, 4, /* M */
+ BIT(24), /* frac enable */
+ BIT(25), /* frac select */
+ 270000000, /* frac rate 0 */
+ 297000000, /* frac rate 1 */
+ BIT(31), /* gate */
+ BIT(28), /* lock */
+ CLK_SET_RATE_UNGATE);
+
+/*
+ * The MIPI PLL has 2 modes: "MIPI" and "HDMI".
+ *
+ * The MIPI mode is a standard NKM-style clock. The HDMI mode is an
+ * integer / fractional clock with switchable multipliers and dividers.
+ * This is not supported here. We hardcode the PLL to MIPI mode.
+ *
+ * TODO: In the MIPI mode, M/N is required to be equal or lesser than 3,
+ * which cannot be implemented now.
+ */
+#define SUN8I_R40_PLL_MIPI_REG 0x040
+
+static const char * const pll_mipi_parents[] = { "pll-video0" };
+static struct ccu_nkm pll_mipi_clk = {
+ .enable = BIT(31) | BIT(23) | BIT(22),
+ .lock = BIT(28),
+ .n = _SUNXI_CCU_MULT(8, 4),
+ .k = _SUNXI_CCU_MULT_MIN(4, 2, 2),
+ .m = _SUNXI_CCU_DIV(0, 4),
+ .mux = _SUNXI_CCU_MUX(21, 1),
+ .common = {
+ .reg = 0x040,
+ .hw.init = CLK_HW_INIT_PARENTS("pll-mipi",
+ pll_mipi_parents,
+ &ccu_nkm_ops,
+ CLK_SET_RATE_UNGATE)
+ },
+};
+
+/* TODO: The result of N/M is required to be in [8, 25] range. */
+static SUNXI_CCU_NM_WITH_FRAC_GATE_LOCK(pll_de_clk, "pll-de",
+ "osc24M", 0x048,
+ 8, 7, /* N */
+ 0, 4, /* M */
+ BIT(24), /* frac enable */
+ BIT(25), /* frac select */
+ 270000000, /* frac rate 0 */
+ 297000000, /* frac rate 1 */
+ BIT(31), /* gate */
+ BIT(28), /* lock */
+ CLK_SET_RATE_UNGATE);
+
+/* TODO: The N factor is required to be in [16, 75] range. */
+static SUNXI_CCU_NM_WITH_GATE_LOCK(pll_ddr1_clk, "pll-ddr1",
+ "osc24M", 0x04c,
+ 8, 7, /* N */
+ 0, 2, /* M */
+ BIT(31), /* gate */
+ BIT(28), /* lock */
+ CLK_SET_RATE_UNGATE);
+
+static const char * const cpu_parents[] = { "osc32k", "osc24M",
+ "pll-cpu", "pll-cpu" };
+static SUNXI_CCU_MUX(cpu_clk, "cpu", cpu_parents,
+ 0x050, 16, 2, CLK_IS_CRITICAL | CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_M(axi_clk, "axi", "cpu", 0x050, 0, 2, 0);
+
+static const char * const ahb1_parents[] = { "osc32k", "osc24M",
+ "axi", "pll-periph0" };
+static const struct ccu_mux_var_prediv ahb1_predivs[] = {
+ { .index = 3, .shift = 6, .width = 2 },
+};
+static struct ccu_div ahb1_clk = {
+ .div = _SUNXI_CCU_DIV_FLAGS(4, 2, CLK_DIVIDER_POWER_OF_TWO),
+
+ .mux = {
+ .shift = 12,
+ .width = 2,
+
+ .var_predivs = ahb1_predivs,
+ .n_var_predivs = ARRAY_SIZE(ahb1_predivs),
+ },
+
+ .common = {
+ .reg = 0x054,
+ .features = CCU_FEATURE_VARIABLE_PREDIV,
+ .hw.init = CLK_HW_INIT_PARENTS("ahb1",
+ ahb1_parents,
+ &ccu_div_ops,
+ 0),
+ },
+};
+
+static struct clk_div_table apb1_div_table[] = {
+ { .val = 0, .div = 2 },
+ { .val = 1, .div = 2 },
+ { .val = 2, .div = 4 },
+ { .val = 3, .div = 8 },
+ { /* Sentinel */ },
+};
+static SUNXI_CCU_DIV_TABLE(apb1_clk, "apb1", "ahb1",
+ 0x054, 8, 2, apb1_div_table, 0);
+
+static const char * const apb2_parents[] = { "osc32k", "osc24M",
+ "pll-periph0-2x",
+ "pll-periph0-2x" };
+static SUNXI_CCU_MP_WITH_MUX(apb2_clk, "apb2", apb2_parents, 0x058,
+ 0, 5, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ 0);
+
+static SUNXI_CCU_GATE(bus_mipi_dsi_clk, "bus-mipi-dsi", "ahb1",
+ 0x060, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_ce_clk, "bus-ce", "ahb1",
+ 0x060, BIT(5), 0);
+static SUNXI_CCU_GATE(bus_dma_clk, "bus-dma", "ahb1",
+ 0x060, BIT(6), 0);
+static SUNXI_CCU_GATE(bus_mmc0_clk, "bus-mmc0", "ahb1",
+ 0x060, BIT(8), 0);
+static SUNXI_CCU_GATE(bus_mmc1_clk, "bus-mmc1", "ahb1",
+ 0x060, BIT(9), 0);
+static SUNXI_CCU_GATE(bus_mmc2_clk, "bus-mmc2", "ahb1",
+ 0x060, BIT(10), 0);
+static SUNXI_CCU_GATE(bus_mmc3_clk, "bus-mmc3", "ahb1",
+ 0x060, BIT(11), 0);
+static SUNXI_CCU_GATE(bus_nand_clk, "bus-nand", "ahb1",
+ 0x060, BIT(13), 0);
+static SUNXI_CCU_GATE(bus_dram_clk, "bus-dram", "ahb1",
+ 0x060, BIT(14), 0);
+static SUNXI_CCU_GATE(bus_emac_clk, "bus-emac", "ahb1",
+ 0x060, BIT(17), 0);
+static SUNXI_CCU_GATE(bus_ts_clk, "bus-ts", "ahb1",
+ 0x060, BIT(18), 0);
+static SUNXI_CCU_GATE(bus_hstimer_clk, "bus-hstimer", "ahb1",
+ 0x060, BIT(19), 0);
+static SUNXI_CCU_GATE(bus_spi0_clk, "bus-spi0", "ahb1",
+ 0x060, BIT(20), 0);
+static SUNXI_CCU_GATE(bus_spi1_clk, "bus-spi1", "ahb1",
+ 0x060, BIT(21), 0);
+static SUNXI_CCU_GATE(bus_spi2_clk, "bus-spi2", "ahb1",
+ 0x060, BIT(22), 0);
+static SUNXI_CCU_GATE(bus_spi3_clk, "bus-spi3", "ahb1",
+ 0x060, BIT(23), 0);
+static SUNXI_CCU_GATE(bus_sata_clk, "bus-sata", "ahb1",
+ 0x060, BIT(24), 0);
+static SUNXI_CCU_GATE(bus_otg_clk, "bus-otg", "ahb1",
+ 0x060, BIT(25), 0);
+static SUNXI_CCU_GATE(bus_ehci0_clk, "bus-ehci0", "ahb1",
+ 0x060, BIT(26), 0);
+static SUNXI_CCU_GATE(bus_ehci1_clk, "bus-ehci1", "ahb1",
+ 0x060, BIT(27), 0);
+static SUNXI_CCU_GATE(bus_ehci2_clk, "bus-ehci2", "ahb1",
+ 0x060, BIT(28), 0);
+static SUNXI_CCU_GATE(bus_ohci0_clk, "bus-ohci0", "ahb1",
+ 0x060, BIT(29), 0);
+static SUNXI_CCU_GATE(bus_ohci1_clk, "bus-ohci1", "ahb1",
+ 0x060, BIT(30), 0);
+static SUNXI_CCU_GATE(bus_ohci2_clk, "bus-ohci2", "ahb1",
+ 0x060, BIT(31), 0);
+
+static SUNXI_CCU_GATE(bus_ve_clk, "bus-ve", "ahb1",
+ 0x064, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_mp_clk, "bus-mp", "ahb1",
+ 0x064, BIT(2), 0);
+static SUNXI_CCU_GATE(bus_deinterlace_clk, "bus-deinterlace", "ahb1",
+ 0x064, BIT(5), 0);
+static SUNXI_CCU_GATE(bus_csi0_clk, "bus-csi0", "ahb1",
+ 0x064, BIT(8), 0);
+static SUNXI_CCU_GATE(bus_csi1_clk, "bus-csi1", "ahb1",
+ 0x064, BIT(9), 0);
+static SUNXI_CCU_GATE(bus_hdmi0_clk, "bus-hdmi0", "ahb1",
+ 0x064, BIT(10), 0);
+static SUNXI_CCU_GATE(bus_hdmi1_clk, "bus-hdmi1", "ahb1",
+ 0x064, BIT(11), 0);
+static SUNXI_CCU_GATE(bus_de_clk, "bus-de", "ahb1",
+ 0x064, BIT(12), 0);
+static SUNXI_CCU_GATE(bus_tve0_clk, "bus-tve0", "ahb1",
+ 0x064, BIT(13), 0);
+static SUNXI_CCU_GATE(bus_tve1_clk, "bus-tve1", "ahb1",
+ 0x064, BIT(14), 0);
+static SUNXI_CCU_GATE(bus_tve_top_clk, "bus-tve-top", "ahb1",
+ 0x064, BIT(15), 0);
+static SUNXI_CCU_GATE(bus_gmac_clk, "bus-gmac", "ahb1",
+ 0x064, BIT(17), 0);
+static SUNXI_CCU_GATE(bus_gpu_clk, "bus-gpu", "ahb1",
+ 0x064, BIT(20), 0);
+static SUNXI_CCU_GATE(bus_tvd0_clk, "bus-tvd0", "ahb1",
+ 0x064, BIT(21), 0);
+static SUNXI_CCU_GATE(bus_tvd1_clk, "bus-tvd1", "ahb1",
+ 0x064, BIT(22), 0);
+static SUNXI_CCU_GATE(bus_tvd2_clk, "bus-tvd2", "ahb1",
+ 0x064, BIT(23), 0);
+static SUNXI_CCU_GATE(bus_tvd3_clk, "bus-tvd3", "ahb1",
+ 0x064, BIT(24), 0);
+static SUNXI_CCU_GATE(bus_tvd_top_clk, "bus-tvd-top", "ahb1",
+ 0x064, BIT(25), 0);
+static SUNXI_CCU_GATE(bus_tcon_lcd0_clk, "bus-tcon-lcd0", "ahb1",
+ 0x064, BIT(26), 0);
+static SUNXI_CCU_GATE(bus_tcon_lcd1_clk, "bus-tcon-lcd1", "ahb1",
+ 0x064, BIT(27), 0);
+static SUNXI_CCU_GATE(bus_tcon_tv0_clk, "bus-tcon-tv0", "ahb1",
+ 0x064, BIT(28), 0);
+static SUNXI_CCU_GATE(bus_tcon_tv1_clk, "bus-tcon-tv1", "ahb1",
+ 0x064, BIT(29), 0);
+static SUNXI_CCU_GATE(bus_tcon_top_clk, "bus-tcon-top", "ahb1",
+ 0x064, BIT(30), 0);
+
+static SUNXI_CCU_GATE(bus_codec_clk, "bus-codec", "apb1",
+ 0x068, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_spdif_clk, "bus-spdif", "apb1",
+ 0x068, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_ac97_clk, "bus-ac97", "apb1",
+ 0x068, BIT(2), 0);
+static SUNXI_CCU_GATE(bus_pio_clk, "bus-pio", "apb1",
+ 0x068, BIT(5), 0);
+static SUNXI_CCU_GATE(bus_ir0_clk, "bus-ir0", "apb1",
+ 0x068, BIT(6), 0);
+static SUNXI_CCU_GATE(bus_ir1_clk, "bus-ir1", "apb1",
+ 0x068, BIT(7), 0);
+static SUNXI_CCU_GATE(bus_ths_clk, "bus-ths", "apb1",
+ 0x068, BIT(8), 0);
+static SUNXI_CCU_GATE(bus_keypad_clk, "bus-keypad", "apb1",
+ 0x068, BIT(10), 0);
+static SUNXI_CCU_GATE(bus_i2s0_clk, "bus-i2s0", "apb1",
+ 0x068, BIT(12), 0);
+static SUNXI_CCU_GATE(bus_i2s1_clk, "bus-i2s1", "apb1",
+ 0x068, BIT(13), 0);
+static SUNXI_CCU_GATE(bus_i2s2_clk, "bus-i2s2", "apb1",
+ 0x068, BIT(14), 0);
+
+static SUNXI_CCU_GATE(bus_i2c0_clk, "bus-i2c0", "apb2",
+ 0x06c, BIT(0), 0);
+static SUNXI_CCU_GATE(bus_i2c1_clk, "bus-i2c1", "apb2",
+ 0x06c, BIT(1), 0);
+static SUNXI_CCU_GATE(bus_i2c2_clk, "bus-i2c2", "apb2",
+ 0x06c, BIT(2), 0);
+static SUNXI_CCU_GATE(bus_i2c3_clk, "bus-i2c3", "apb2",
+ 0x06c, BIT(3), 0);
+/*
+ * In datasheet here's "Reserved", however the gate exists in BSP soucre
+ * code.
+ */
+static SUNXI_CCU_GATE(bus_can_clk, "bus-can", "apb2",
+ 0x06c, BIT(4), 0);
+static SUNXI_CCU_GATE(bus_scr_clk, "bus-scr", "apb2",
+ 0x06c, BIT(5), 0);
+static SUNXI_CCU_GATE(bus_ps20_clk, "bus-ps20", "apb2",
+ 0x06c, BIT(6), 0);
+static SUNXI_CCU_GATE(bus_ps21_clk, "bus-ps21", "apb2",
+ 0x06c, BIT(7), 0);
+static SUNXI_CCU_GATE(bus_i2c4_clk, "bus-i2c4", "apb2",
+ 0x06c, BIT(15), 0);
+static SUNXI_CCU_GATE(bus_uart0_clk, "bus-uart0", "apb2",
+ 0x06c, BIT(16), 0);
+static SUNXI_CCU_GATE(bus_uart1_clk, "bus-uart1", "apb2",
+ 0x06c, BIT(17), 0);
+static SUNXI_CCU_GATE(bus_uart2_clk, "bus-uart2", "apb2",
+ 0x06c, BIT(18), 0);
+static SUNXI_CCU_GATE(bus_uart3_clk, "bus-uart3", "apb2",
+ 0x06c, BIT(19), 0);
+static SUNXI_CCU_GATE(bus_uart4_clk, "bus-uart4", "apb2",
+ 0x06c, BIT(20), 0);
+static SUNXI_CCU_GATE(bus_uart5_clk, "bus-uart5", "apb2",
+ 0x06c, BIT(21), 0);
+static SUNXI_CCU_GATE(bus_uart6_clk, "bus-uart6", "apb2",
+ 0x06c, BIT(22), 0);
+static SUNXI_CCU_GATE(bus_uart7_clk, "bus-uart7", "apb2",
+ 0x06c, BIT(23), 0);
+
+static SUNXI_CCU_GATE(bus_dbg_clk, "bus-dbg", "ahb1",
+ 0x070, BIT(7), 0);
+
+static const char * const ths_parents[] = { "osc24M" };
+static struct ccu_div ths_clk = {
+ .enable = BIT(31),
+ .div = _SUNXI_CCU_DIV_FLAGS(0, 2, CLK_DIVIDER_POWER_OF_TWO),
+ .mux = _SUNXI_CCU_MUX(24, 2),
+ .common = {
+ .reg = 0x074,
+ .hw.init = CLK_HW_INIT_PARENTS("ths",
+ ths_parents,
+ &ccu_div_ops,
+ 0),
+ },
+};
+
+static const char * const mod0_default_parents[] = { "osc24M", "pll-periph0",
+ "pll-periph1" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(nand_clk, "nand", mod0_default_parents, 0x080,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(mmc0_clk, "mmc0", mod0_default_parents, 0x088,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(mmc1_clk, "mmc1", mod0_default_parents, 0x08c,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(mmc2_clk, "mmc2", mod0_default_parents, 0x090,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(mmc3_clk, "mmc3", mod0_default_parents, 0x094,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static const char * const ts_parents[] = { "osc24M", "pll-periph0", };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ts_clk, "ts", ts_parents, 0x098,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 4, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static const char * const ce_parents[] = { "osc24M", "pll-periph0-2x",
+ "pll-periph1-2x" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ce_clk, "ce", ce_parents, 0x09c,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi0_clk, "spi0", mod0_default_parents, 0x0a0,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi1_clk, "spi1", mod0_default_parents, 0x0a4,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi2_clk, "spi2", mod0_default_parents, 0x0a8,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(spi3_clk, "spi3", mod0_default_parents, 0x0ac,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static const char * const i2s_parents[] = { "pll-audio-8x", "pll-audio-4x",
+ "pll-audio-2x", "pll-audio" };
+static SUNXI_CCU_MUX_WITH_GATE(i2s0_clk, "i2s0", i2s_parents,
+ 0x0b0, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_MUX_WITH_GATE(i2s1_clk, "i2s1", i2s_parents,
+ 0x0b4, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_MUX_WITH_GATE(i2s2_clk, "i2s2", i2s_parents,
+ 0x0b8, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_MUX_WITH_GATE(ac97_clk, "ac97", i2s_parents,
+ 0x0bc, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_MUX_WITH_GATE(spdif_clk, "spdif", i2s_parents,
+ 0x0c0, 16, 2, BIT(31), CLK_SET_RATE_PARENT);
+
+static const char * const keypad_parents[] = { "osc24M", "osc32k" };
+static const u8 keypad_table[] = { 0, 2 };
+static struct ccu_mp keypad_clk = {
+ .enable = BIT(31),
+ .m = _SUNXI_CCU_DIV(0, 5),
+ .p = _SUNXI_CCU_DIV(16, 2),
+ .mux = _SUNXI_CCU_MUX_TABLE(24, 2, keypad_table),
+ .common = {
+ .reg = 0x0c4,
+ .hw.init = CLK_HW_INIT_PARENTS("keypad",
+ keypad_parents,
+ &ccu_mp_ops,
+ 0),
+ }
+};
+
+static const char * const sata_parents[] = { "pll-sata-out", "sata-ext" };
+static SUNXI_CCU_MUX_WITH_GATE(sata_clk, "sata", sata_parents,
+ 0x0c8, 24, 1, BIT(31), CLK_SET_RATE_PARENT);
+
+/*
+ * There are 3 OHCI 12M clock source selection bits in this register.
+ * We will force them to 0 (12M divided from 48M).
+ */
+#define SUN8I_R40_USB_CLK_REG 0x0cc
+
+static SUNXI_CCU_GATE(usb_phy0_clk, "usb-phy0", "osc24M",
+ 0x0cc, BIT(8), 0);
+static SUNXI_CCU_GATE(usb_phy1_clk, "usb-phy1", "osc24M",
+ 0x0cc, BIT(9), 0);
+static SUNXI_CCU_GATE(usb_phy2_clk, "usb-phy2", "osc24M",
+ 0x0cc, BIT(10), 0);
+static SUNXI_CCU_GATE(usb_ohci0_clk, "usb-ohci0", "osc12M",
+ 0x0cc, BIT(16), 0);
+static SUNXI_CCU_GATE(usb_ohci1_clk, "usb-ohci1", "osc12M",
+ 0x0cc, BIT(17), 0);
+static SUNXI_CCU_GATE(usb_ohci2_clk, "usb-ohci2", "osc12M",
+ 0x0cc, BIT(18), 0);
+
+static const char * const ir_parents[] = { "osc24M", "pll-periph0",
+ "pll-periph1", "osc32k" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir0_clk, "ir0", ir_parents, 0x0d0,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static SUNXI_CCU_MP_WITH_MUX_GATE(ir1_clk, "ir1", ir_parents, 0x0d4,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ 0);
+
+static const char * const dram_parents[] = { "pll-ddr0", "pll-ddr1" };
+static SUNXI_CCU_M_WITH_MUX(dram_clk, "dram", dram_parents,
+ 0x0f4, 0, 2, 20, 2, CLK_IS_CRITICAL);
+
+static SUNXI_CCU_GATE(dram_ve_clk, "dram-ve", "dram",
+ 0x100, BIT(0), 0);
+static SUNXI_CCU_GATE(dram_csi0_clk, "dram-csi0", "dram",
+ 0x100, BIT(1), 0);
+static SUNXI_CCU_GATE(dram_csi1_clk, "dram-csi1", "dram",
+ 0x100, BIT(2), 0);
+static SUNXI_CCU_GATE(dram_ts_clk, "dram-ts", "dram",
+ 0x100, BIT(3), 0);
+static SUNXI_CCU_GATE(dram_tvd_clk, "dram-tvd", "dram",
+ 0x100, BIT(4), 0);
+static SUNXI_CCU_GATE(dram_mp_clk, "dram-mp", "dram",
+ 0x100, BIT(5), 0);
+static SUNXI_CCU_GATE(dram_deinterlace_clk, "dram-deinterlace", "dram",
+ 0x100, BIT(6), 0);
+
+static const char * const de_parents[] = { "pll-periph0-2x", "pll-de" };
+static SUNXI_CCU_M_WITH_MUX_GATE(de_clk, "de", de_parents,
+ 0x104, 0, 4, 24, 3, BIT(31), 0);
+static SUNXI_CCU_M_WITH_MUX_GATE(mp_clk, "mp", de_parents,
+ 0x108, 0, 4, 24, 3, BIT(31), 0);
+
+static const char * const tcon_parents[] = { "pll-video0", "pll-video1",
+ "pll-video0-2x", "pll-video1-2x",
+ "pll-mipi" };
+static SUNXI_CCU_MUX_WITH_GATE(tcon_lcd0_clk, "tcon-lcd0", tcon_parents,
+ 0x110, 24, 3, BIT(31), CLK_SET_RATE_PARENT);
+static SUNXI_CCU_MUX_WITH_GATE(tcon_lcd1_clk, "tcon-lcd1", tcon_parents,
+ 0x114, 24, 3, BIT(31), CLK_SET_RATE_PARENT);
+static SUNXI_CCU_M_WITH_MUX_GATE(tcon_tv0_clk, "tcon-tv0", tcon_parents,
+ 0x118, 0, 4, 24, 3, BIT(31), 0);
+static SUNXI_CCU_M_WITH_MUX_GATE(tcon_tv1_clk, "tcon-tv1", tcon_parents,
+ 0x11c, 0, 4, 24, 3, BIT(31), 0);
+
+static const char * const deinterlace_parents[] = { "pll-periph0",
+ "pll-periph1" };
+static SUNXI_CCU_M_WITH_MUX_GATE(deinterlace_clk, "deinterlace",
+ deinterlace_parents, 0x124, 0, 4, 24, 3,
+ BIT(31), 0);
+
+static const char * const csi_mclk_parents[] = { "osc24M", "pll-video1",
+ "pll-periph1" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi1_mclk_clk, "csi1-mclk", csi_mclk_parents,
+ 0x130, 0, 5, 8, 3, BIT(15), 0);
+
+static const char * const csi_sclk_parents[] = { "pll-periph0", "pll-periph1" };
+static SUNXI_CCU_M_WITH_MUX_GATE(csi_sclk_clk, "csi-sclk", csi_sclk_parents,
+ 0x134, 16, 4, 24, 3, BIT(31), 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(csi0_mclk_clk, "csi0-mclk", csi_mclk_parents,
+ 0x134, 0, 5, 8, 3, BIT(15), 0);
+
+static SUNXI_CCU_M_WITH_GATE(ve_clk, "ve", "pll-ve",
+ 0x13c, 16, 3, BIT(31), CLK_SET_RATE_PARENT);
+
+static SUNXI_CCU_GATE(codec_clk, "codec", "pll-audio",
+ 0x140, BIT(31), CLK_SET_RATE_PARENT);
+static SUNXI_CCU_GATE(avs_clk, "avs", "osc24M",
+ 0x144, BIT(31), 0);
+
+static const char * const hdmi_parents[] = { "pll-video0", "pll-video1" };
+static SUNXI_CCU_M_WITH_MUX_GATE(hdmi_clk, "hdmi", hdmi_parents,
+ 0x150, 0, 4, 24, 2, BIT(31), 0);
+
+static SUNXI_CCU_GATE(hdmi_slow_clk, "hdmi-slow", "osc24M",
+ 0x154, BIT(31), 0);
+
+/*
+ * In the SoC's user manual, the P factor is mentioned, but not used in
+ * the frequency formula.
+ *
+ * Here the factor is included, according to the BSP kernel source,
+ * which contains the P factor of this clock.
+ */
+static const char * const mbus_parents[] = { "osc24M", "pll-periph0-2x",
+ "pll-ddr0" };
+static SUNXI_CCU_MP_WITH_MUX_GATE(mbus_clk, "mbus", mbus_parents, 0x15c,
+ 0, 4, /* M */
+ 16, 2, /* P */
+ 24, 2, /* mux */
+ BIT(31), /* gate */
+ CLK_IS_CRITICAL);
+
+static const char * const dsi_dphy_parents[] = { "pll-video0", "pll-video1",
+ "pll-periph0" };
+static SUNXI_CCU_M_WITH_MUX_GATE(dsi_dphy_clk, "dsi-dphy", dsi_dphy_parents,
+ 0x168, 0, 4, 8, 2, BIT(15), 0);
+
+static SUNXI_CCU_M_WITH_MUX_GATE(tve0_clk, "tve0", tcon_parents,
+ 0x180, 0, 4, 24, 3, BIT(31), 0);
+static SUNXI_CCU_M_WITH_MUX_GATE(tve1_clk, "tve1", tcon_parents,
+ 0x184, 0, 4, 24, 3, BIT(31), 0);
+
+static const char * const tvd_parents[] = { "pll-video0", "pll-video1",
+ "pll-video0-2x", "pll-video1-2x" };
+static SUNXI_CCU_M_WITH_MUX_GATE(tvd0_clk, "tvd0", tvd_parents,
+ 0x188, 0, 4, 24, 3, BIT(31), 0);
+static SUNXI_CCU_M_WITH_MUX_GATE(tvd1_clk, "tvd1", tvd_parents,
+ 0x18c, 0, 4, 24, 3, BIT(31), 0);
+static SUNXI_CCU_M_WITH_MUX_GATE(tvd2_clk, "tvd2", tvd_parents,
+ 0x190, 0, 4, 24, 3, BIT(31), 0);
+static SUNXI_CCU_M_WITH_MUX_GATE(tvd3_clk, "tvd3", tvd_parents,
+ 0x194, 0, 4, 24, 3, BIT(31), 0);
+
+static SUNXI_CCU_M_WITH_GATE(gpu_clk, "gpu", "pll-gpu",
+ 0x1a0, 0, 3, BIT(31), CLK_SET_RATE_PARENT);
+
+static const char * const out_parents[] = { "osc24M", "osc32k", "osc24M" };
+static const struct ccu_mux_fixed_prediv out_predivs[] = {
+ { .index = 0, .div = 750, },
+};
+
+static struct ccu_mp outa_clk = {
+ .enable = BIT(31),
+ .m = _SUNXI_CCU_DIV(8, 5),
+ .p = _SUNXI_CCU_DIV(20, 2),
+ .mux = {
+ .shift = 24,
+ .width = 2,
+ .fixed_predivs = out_predivs,
+ .n_predivs = ARRAY_SIZE(out_predivs),
+ },
+ .common = {
+ .reg = 0x1f0,
+ .features = CCU_FEATURE_FIXED_PREDIV,
+ .hw.init = CLK_HW_INIT_PARENTS("outa", out_parents,
+ &ccu_mp_ops, 0),
+ }
+};
+
+static struct ccu_mp outb_clk = {
+ .enable = BIT(31),
+ .m = _SUNXI_CCU_DIV(8, 5),
+ .p = _SUNXI_CCU_DIV(20, 2),
+ .mux = {
+ .shift = 24,
+ .width = 2,
+ .fixed_predivs = out_predivs,
+ .n_predivs = ARRAY_SIZE(out_predivs),
+ },
+ .common = {
+ .reg = 0x1f4,
+ .features = CCU_FEATURE_FIXED_PREDIV,
+ .hw.init = CLK_HW_INIT_PARENTS("outb", out_parents,
+ &ccu_mp_ops, 0),
+ }
+};
+
+static struct ccu_common *sun8i_r40_ccu_clks[] = {
+ &pll_cpu_clk.common,
+ &pll_audio_base_clk.common,
+ &pll_video0_clk.common,
+ &pll_ve_clk.common,
+ &pll_ddr0_clk.common,
+ &pll_periph0_clk.common,
+ &pll_periph0_sata_clk.common,
+ &pll_periph1_clk.common,
+ &pll_video1_clk.common,
+ &pll_sata_clk.common,
+ &pll_sata_out_clk.common,
+ &pll_gpu_clk.common,
+ &pll_mipi_clk.common,
+ &pll_de_clk.common,
+ &pll_ddr1_clk.common,
+ &cpu_clk.common,
+ &axi_clk.common,
+ &ahb1_clk.common,
+ &apb1_clk.common,
+ &apb2_clk.common,
+ &bus_mipi_dsi_clk.common,
+ &bus_ce_clk.common,
+ &bus_dma_clk.common,
+ &bus_mmc0_clk.common,
+ &bus_mmc1_clk.common,
+ &bus_mmc2_clk.common,
+ &bus_mmc3_clk.common,
+ &bus_nand_clk.common,
+ &bus_dram_clk.common,
+ &bus_emac_clk.common,
+ &bus_ts_clk.common,
+ &bus_hstimer_clk.common,
+ &bus_spi0_clk.common,
+ &bus_spi1_clk.common,
+ &bus_spi2_clk.common,
+ &bus_spi3_clk.common,
+ &bus_sata_clk.common,
+ &bus_otg_clk.common,
+ &bus_ehci0_clk.common,
+ &bus_ehci1_clk.common,
+ &bus_ehci2_clk.common,
+ &bus_ohci0_clk.common,
+ &bus_ohci1_clk.common,
+ &bus_ohci2_clk.common,
+ &bus_ve_clk.common,
+ &bus_mp_clk.common,
+ &bus_deinterlace_clk.common,
+ &bus_csi0_clk.common,
+ &bus_csi1_clk.common,
+ &bus_hdmi0_clk.common,
+ &bus_hdmi1_clk.common,
+ &bus_de_clk.common,
+ &bus_tve0_clk.common,
+ &bus_tve1_clk.common,
+ &bus_tve_top_clk.common,
+ &bus_gmac_clk.common,
+ &bus_gpu_clk.common,
+ &bus_tvd0_clk.common,
+ &bus_tvd1_clk.common,
+ &bus_tvd2_clk.common,
+ &bus_tvd3_clk.common,
+ &bus_tvd_top_clk.common,
+ &bus_tcon_lcd0_clk.common,
+ &bus_tcon_lcd1_clk.common,
+ &bus_tcon_tv0_clk.common,
+ &bus_tcon_tv1_clk.common,
+ &bus_tcon_top_clk.common,
+ &bus_codec_clk.common,
+ &bus_spdif_clk.common,
+ &bus_ac97_clk.common,
+ &bus_pio_clk.common,
+ &bus_ir0_clk.common,
+ &bus_ir1_clk.common,
+ &bus_ths_clk.common,
+ &bus_keypad_clk.common,
+ &bus_i2s0_clk.common,
+ &bus_i2s1_clk.common,
+ &bus_i2s2_clk.common,
+ &bus_i2c0_clk.common,
+ &bus_i2c1_clk.common,
+ &bus_i2c2_clk.common,
+ &bus_i2c3_clk.common,
+ &bus_can_clk.common,
+ &bus_scr_clk.common,
+ &bus_ps20_clk.common,
+ &bus_ps21_clk.common,
+ &bus_i2c4_clk.common,
+ &bus_uart0_clk.common,
+ &bus_uart1_clk.common,
+ &bus_uart2_clk.common,
+ &bus_uart3_clk.common,
+ &bus_uart4_clk.common,
+ &bus_uart5_clk.common,
+ &bus_uart6_clk.common,
+ &bus_uart7_clk.common,
+ &bus_dbg_clk.common,
+ &ths_clk.common,
+ &nand_clk.common,
+ &mmc0_clk.common,
+ &mmc1_clk.common,
+ &mmc2_clk.common,
+ &mmc3_clk.common,
+ &ts_clk.common,
+ &ce_clk.common,
+ &spi0_clk.common,
+ &spi1_clk.common,
+ &spi2_clk.common,
+ &spi3_clk.common,
+ &i2s0_clk.common,
+ &i2s1_clk.common,
+ &i2s2_clk.common,
+ &ac97_clk.common,
+ &spdif_clk.common,
+ &keypad_clk.common,
+ &sata_clk.common,
+ &usb_phy0_clk.common,
+ &usb_phy1_clk.common,
+ &usb_phy2_clk.common,
+ &usb_ohci0_clk.common,
+ &usb_ohci1_clk.common,
+ &usb_ohci2_clk.common,
+ &ir0_clk.common,
+ &ir1_clk.common,
+ &dram_clk.common,
+ &dram_ve_clk.common,
+ &dram_csi0_clk.common,
+ &dram_csi1_clk.common,
+ &dram_ts_clk.common,
+ &dram_tvd_clk.common,
+ &dram_mp_clk.common,
+ &dram_deinterlace_clk.common,
+ &de_clk.common,
+ &mp_clk.common,
+ &tcon_lcd0_clk.common,
+ &tcon_lcd1_clk.common,
+ &tcon_tv0_clk.common,
+ &tcon_tv1_clk.common,
+ &deinterlace_clk.common,
+ &csi1_mclk_clk.common,
+ &csi_sclk_clk.common,
+ &csi0_mclk_clk.common,
+ &ve_clk.common,
+ &codec_clk.common,
+ &avs_clk.common,
+ &hdmi_clk.common,
+ &hdmi_slow_clk.common,
+ &mbus_clk.common,
+ &dsi_dphy_clk.common,
+ &tve0_clk.common,
+ &tve1_clk.common,
+ &tvd0_clk.common,
+ &tvd1_clk.common,
+ &tvd2_clk.common,
+ &tvd3_clk.common,
+ &gpu_clk.common,
+ &outa_clk.common,
+ &outb_clk.common,
+};
+
+/* Fixed Factor clocks */
+static CLK_FIXED_FACTOR(osc12M_clk, "osc12M", "osc24M", 2, 1, 0);
+
+/* We hardcode the divider to 4 for now */
+static CLK_FIXED_FACTOR(pll_audio_clk, "pll-audio",
+ "pll-audio-base", 4, 1, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR(pll_audio_2x_clk, "pll-audio-2x",
+ "pll-audio-base", 2, 1, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR(pll_audio_4x_clk, "pll-audio-4x",
+ "pll-audio-base", 1, 1, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR(pll_audio_8x_clk, "pll-audio-8x",
+ "pll-audio-base", 1, 2, CLK_SET_RATE_PARENT);
+static CLK_FIXED_FACTOR(pll_periph0_2x_clk, "pll-periph0-2x",
+ "pll-periph0", 1, 2, 0);
+static CLK_FIXED_FACTOR(pll_periph1_2x_clk, "pll-periph1-2x",
+ "pll-periph1", 1, 2, 0);
+static CLK_FIXED_FACTOR(pll_video0_2x_clk, "pll-video0-2x",
+ "pll-video0", 1, 2, 0);
+static CLK_FIXED_FACTOR(pll_video1_2x_clk, "pll-video1-2x",
+ "pll-video1", 1, 2, 0);
+
+static struct clk_hw_onecell_data sun8i_r40_hw_clks = {
+ .hws = {
+ [CLK_OSC_12M] = &osc12M_clk.hw,
+ [CLK_PLL_CPU] = &pll_cpu_clk.common.hw,
+ [CLK_PLL_AUDIO_BASE] = &pll_audio_base_clk.common.hw,
+ [CLK_PLL_AUDIO] = &pll_audio_clk.hw,
+ [CLK_PLL_AUDIO_2X] = &pll_audio_2x_clk.hw,
+ [CLK_PLL_AUDIO_4X] = &pll_audio_4x_clk.hw,
+ [CLK_PLL_AUDIO_8X] = &pll_audio_8x_clk.hw,
+ [CLK_PLL_VIDEO0] = &pll_video0_clk.common.hw,
+ [CLK_PLL_VIDEO0_2X] = &pll_video0_2x_clk.hw,
+ [CLK_PLL_VE] = &pll_ve_clk.common.hw,
+ [CLK_PLL_DDR0] = &pll_ddr0_clk.common.hw,
+ [CLK_PLL_PERIPH0] = &pll_periph0_clk.common.hw,
+ [CLK_PLL_PERIPH0_SATA] = &pll_periph0_sata_clk.common.hw,
+ [CLK_PLL_PERIPH0_2X] = &pll_periph0_2x_clk.hw,
+ [CLK_PLL_PERIPH1] = &pll_periph1_clk.common.hw,
+ [CLK_PLL_PERIPH1_2X] = &pll_periph1_2x_clk.hw,
+ [CLK_PLL_VIDEO1] = &pll_video1_clk.common.hw,
+ [CLK_PLL_VIDEO1_2X] = &pll_video1_2x_clk.hw,
+ [CLK_PLL_SATA] = &pll_sata_clk.common.hw,
+ [CLK_PLL_SATA_OUT] = &pll_sata_out_clk.common.hw,
+ [CLK_PLL_GPU] = &pll_gpu_clk.common.hw,
+ [CLK_PLL_MIPI] = &pll_mipi_clk.common.hw,
+ [CLK_PLL_DE] = &pll_de_clk.common.hw,
+ [CLK_PLL_DDR1] = &pll_ddr1_clk.common.hw,
+ [CLK_CPU] = &cpu_clk.common.hw,
+ [CLK_AXI] = &axi_clk.common.hw,
+ [CLK_AHB1] = &ahb1_clk.common.hw,
+ [CLK_APB1] = &apb1_clk.common.hw,
+ [CLK_APB2] = &apb2_clk.common.hw,
+ [CLK_BUS_MIPI_DSI] = &bus_mipi_dsi_clk.common.hw,
+ [CLK_BUS_CE] = &bus_ce_clk.common.hw,
+ [CLK_BUS_DMA] = &bus_dma_clk.common.hw,
+ [CLK_BUS_MMC0] = &bus_mmc0_clk.common.hw,
+ [CLK_BUS_MMC1] = &bus_mmc1_clk.common.hw,
+ [CLK_BUS_MMC2] = &bus_mmc2_clk.common.hw,
+ [CLK_BUS_MMC3] = &bus_mmc3_clk.common.hw,
+ [CLK_BUS_NAND] = &bus_nand_clk.common.hw,
+ [CLK_BUS_DRAM] = &bus_dram_clk.common.hw,
+ [CLK_BUS_EMAC] = &bus_emac_clk.common.hw,
+ [CLK_BUS_TS] = &bus_ts_clk.common.hw,
+ [CLK_BUS_HSTIMER] = &bus_hstimer_clk.common.hw,
+ [CLK_BUS_SPI0] = &bus_spi0_clk.common.hw,
+ [CLK_BUS_SPI1] = &bus_spi1_clk.common.hw,
+ [CLK_BUS_SPI2] = &bus_spi2_clk.common.hw,
+ [CLK_BUS_SPI3] = &bus_spi3_clk.common.hw,
+ [CLK_BUS_SATA] = &bus_sata_clk.common.hw,
+ [CLK_BUS_OTG] = &bus_otg_clk.common.hw,
+ [CLK_BUS_EHCI0] = &bus_ehci0_clk.common.hw,
+ [CLK_BUS_EHCI1] = &bus_ehci1_clk.common.hw,
+ [CLK_BUS_EHCI2] = &bus_ehci2_clk.common.hw,
+ [CLK_BUS_OHCI0] = &bus_ohci0_clk.common.hw,
+ [CLK_BUS_OHCI1] = &bus_ohci1_clk.common.hw,
+ [CLK_BUS_OHCI2] = &bus_ohci2_clk.common.hw,
+ [CLK_BUS_VE] = &bus_ve_clk.common.hw,
+ [CLK_BUS_MP] = &bus_mp_clk.common.hw,
+ [CLK_BUS_DEINTERLACE] = &bus_deinterlace_clk.common.hw,
+ [CLK_BUS_CSI0] = &bus_csi0_clk.common.hw,
+ [CLK_BUS_CSI1] = &bus_csi1_clk.common.hw,
+ [CLK_BUS_HDMI0] = &bus_hdmi0_clk.common.hw,
+ [CLK_BUS_HDMI1] = &bus_hdmi1_clk.common.hw,
+ [CLK_BUS_DE] = &bus_de_clk.common.hw,
+ [CLK_BUS_TVE0] = &bus_tve0_clk.common.hw,
+ [CLK_BUS_TVE1] = &bus_tve1_clk.common.hw,
+ [CLK_BUS_TVE_TOP] = &bus_tve_top_clk.common.hw,
+ [CLK_BUS_GMAC] = &bus_gmac_clk.common.hw,
+ [CLK_BUS_GPU] = &bus_gpu_clk.common.hw,
+ [CLK_BUS_TVD0] = &bus_tvd0_clk.common.hw,
+ [CLK_BUS_TVD1] = &bus_tvd1_clk.common.hw,
+ [CLK_BUS_TVD2] = &bus_tvd2_clk.common.hw,
+ [CLK_BUS_TVD3] = &bus_tvd3_clk.common.hw,
+ [CLK_BUS_TVD_TOP] = &bus_tvd_top_clk.common.hw,
+ [CLK_BUS_TCON_LCD0] = &bus_tcon_lcd0_clk.common.hw,
+ [CLK_BUS_TCON_LCD1] = &bus_tcon_lcd1_clk.common.hw,
+ [CLK_BUS_TCON_TV0] = &bus_tcon_tv0_clk.common.hw,
+ [CLK_BUS_TCON_TV1] = &bus_tcon_tv1_clk.common.hw,
+ [CLK_BUS_TCON_TOP] = &bus_tcon_top_clk.common.hw,
+ [CLK_BUS_CODEC] = &bus_codec_clk.common.hw,
+ [CLK_BUS_SPDIF] = &bus_spdif_clk.common.hw,
+ [CLK_BUS_AC97] = &bus_ac97_clk.common.hw,
+ [CLK_BUS_PIO] = &bus_pio_clk.common.hw,
+ [CLK_BUS_IR0] = &bus_ir0_clk.common.hw,
+ [CLK_BUS_IR1] = &bus_ir1_clk.common.hw,
+ [CLK_BUS_THS] = &bus_ths_clk.common.hw,
+ [CLK_BUS_KEYPAD] = &bus_keypad_clk.common.hw,
+ [CLK_BUS_I2S0] = &bus_i2s0_clk.common.hw,
+ [CLK_BUS_I2S1] = &bus_i2s1_clk.common.hw,
+ [CLK_BUS_I2S2] = &bus_i2s2_clk.common.hw,
+ [CLK_BUS_I2C0] = &bus_i2c0_clk.common.hw,
+ [CLK_BUS_I2C1] = &bus_i2c1_clk.common.hw,
+ [CLK_BUS_I2C2] = &bus_i2c2_clk.common.hw,
+ [CLK_BUS_I2C3] = &bus_i2c3_clk.common.hw,
+ [CLK_BUS_CAN] = &bus_can_clk.common.hw,
+ [CLK_BUS_SCR] = &bus_scr_clk.common.hw,
+ [CLK_BUS_PS20] = &bus_ps20_clk.common.hw,
+ [CLK_BUS_PS21] = &bus_ps21_clk.common.hw,
+ [CLK_BUS_I2C4] = &bus_i2c4_clk.common.hw,
+ [CLK_BUS_UART0] = &bus_uart0_clk.common.hw,
+ [CLK_BUS_UART1] = &bus_uart1_clk.common.hw,
+ [CLK_BUS_UART2] = &bus_uart2_clk.common.hw,
+ [CLK_BUS_UART3] = &bus_uart3_clk.common.hw,
+ [CLK_BUS_UART4] = &bus_uart4_clk.common.hw,
+ [CLK_BUS_UART5] = &bus_uart5_clk.common.hw,
+ [CLK_BUS_UART6] = &bus_uart6_clk.common.hw,
+ [CLK_BUS_UART7] = &bus_uart7_clk.common.hw,
+ [CLK_BUS_DBG] = &bus_dbg_clk.common.hw,
+ [CLK_THS] = &ths_clk.common.hw,
+ [CLK_NAND] = &nand_clk.common.hw,
+ [CLK_MMC0] = &mmc0_clk.common.hw,
+ [CLK_MMC1] = &mmc1_clk.common.hw,
+ [CLK_MMC2] = &mmc2_clk.common.hw,
+ [CLK_MMC3] = &mmc3_clk.common.hw,
+ [CLK_TS] = &ts_clk.common.hw,
+ [CLK_CE] = &ce_clk.common.hw,
+ [CLK_SPI0] = &spi0_clk.common.hw,
+ [CLK_SPI1] = &spi1_clk.common.hw,
+ [CLK_SPI2] = &spi2_clk.common.hw,
+ [CLK_SPI3] = &spi3_clk.common.hw,
+ [CLK_I2S0] = &i2s0_clk.common.hw,
+ [CLK_I2S1] = &i2s1_clk.common.hw,
+ [CLK_I2S2] = &i2s2_clk.common.hw,
+ [CLK_AC97] = &ac97_clk.common.hw,
+ [CLK_SPDIF] = &spdif_clk.common.hw,
+ [CLK_KEYPAD] = &keypad_clk.common.hw,
+ [CLK_SATA] = &sata_clk.common.hw,
+ [CLK_USB_PHY0] = &usb_phy0_clk.common.hw,
+ [CLK_USB_PHY1] = &usb_phy1_clk.common.hw,
+ [CLK_USB_PHY2] = &usb_phy2_clk.common.hw,
+ [CLK_USB_OHCI0] = &usb_ohci0_clk.common.hw,
+ [CLK_USB_OHCI1] = &usb_ohci1_clk.common.hw,
+ [CLK_USB_OHCI2] = &usb_ohci2_clk.common.hw,
+ [CLK_IR0] = &ir0_clk.common.hw,
+ [CLK_IR1] = &ir1_clk.common.hw,
+ [CLK_DRAM] = &dram_clk.common.hw,
+ [CLK_DRAM_VE] = &dram_ve_clk.common.hw,
+ [CLK_DRAM_CSI0] = &dram_csi0_clk.common.hw,
+ [CLK_DRAM_CSI1] = &dram_csi1_clk.common.hw,
+ [CLK_DRAM_TS] = &dram_ts_clk.common.hw,
+ [CLK_DRAM_TVD] = &dram_tvd_clk.common.hw,
+ [CLK_DRAM_MP] = &dram_mp_clk.common.hw,
+ [CLK_DRAM_DEINTERLACE] = &dram_deinterlace_clk.common.hw,
+ [CLK_DE] = &de_clk.common.hw,
+ [CLK_MP] = &mp_clk.common.hw,
+ [CLK_TCON_LCD0] = &tcon_lcd0_clk.common.hw,
+ [CLK_TCON_LCD1] = &tcon_lcd1_clk.common.hw,
+ [CLK_TCON_TV0] = &tcon_tv0_clk.common.hw,
+ [CLK_TCON_TV1] = &tcon_tv1_clk.common.hw,
+ [CLK_DEINTERLACE] = &deinterlace_clk.common.hw,
+ [CLK_CSI1_MCLK] = &csi1_mclk_clk.common.hw,
+ [CLK_CSI_SCLK] = &csi_sclk_clk.common.hw,
+ [CLK_CSI0_MCLK] = &csi0_mclk_clk.common.hw,
+ [CLK_VE] = &ve_clk.common.hw,
+ [CLK_CODEC] = &codec_clk.common.hw,
+ [CLK_AVS] = &avs_clk.common.hw,
+ [CLK_HDMI] = &hdmi_clk.common.hw,
+ [CLK_HDMI_SLOW] = &hdmi_slow_clk.common.hw,
+ [CLK_MBUS] = &mbus_clk.common.hw,
+ [CLK_DSI_DPHY] = &dsi_dphy_clk.common.hw,
+ [CLK_TVE0] = &tve0_clk.common.hw,
+ [CLK_TVE1] = &tve1_clk.common.hw,
+ [CLK_TVD0] = &tvd0_clk.common.hw,
+ [CLK_TVD1] = &tvd1_clk.common.hw,
+ [CLK_TVD2] = &tvd2_clk.common.hw,
+ [CLK_TVD3] = &tvd3_clk.common.hw,
+ [CLK_GPU] = &gpu_clk.common.hw,
+ [CLK_OUTA] = &outa_clk.common.hw,
+ [CLK_OUTB] = &outb_clk.common.hw,
+ },
+ .num = CLK_NUMBER,
+};
+
+static struct ccu_reset_map sun8i_r40_ccu_resets[] = {
+ [RST_USB_PHY0] = { 0x0cc, BIT(0) },
+ [RST_USB_PHY1] = { 0x0cc, BIT(1) },
+ [RST_USB_PHY2] = { 0x0cc, BIT(2) },
+
+ [RST_DRAM] = { 0x0f4, BIT(31) },
+ [RST_MBUS] = { 0x0fc, BIT(31) },
+
+ [RST_BUS_MIPI_DSI] = { 0x2c0, BIT(1) },
+ [RST_BUS_CE] = { 0x2c0, BIT(5) },
+ [RST_BUS_DMA] = { 0x2c0, BIT(6) },
+ [RST_BUS_MMC0] = { 0x2c0, BIT(8) },
+ [RST_BUS_MMC1] = { 0x2c0, BIT(9) },
+ [RST_BUS_MMC2] = { 0x2c0, BIT(10) },
+ [RST_BUS_MMC3] = { 0x2c0, BIT(11) },
+ [RST_BUS_NAND] = { 0x2c0, BIT(13) },
+ [RST_BUS_DRAM] = { 0x2c0, BIT(14) },
+ [RST_BUS_EMAC] = { 0x2c0, BIT(17) },
+ [RST_BUS_TS] = { 0x2c0, BIT(18) },
+ [RST_BUS_HSTIMER] = { 0x2c0, BIT(19) },
+ [RST_BUS_SPI0] = { 0x2c0, BIT(20) },
+ [RST_BUS_SPI1] = { 0x2c0, BIT(21) },
+ [RST_BUS_SPI2] = { 0x2c0, BIT(22) },
+ [RST_BUS_SPI3] = { 0x2c0, BIT(23) },
+ [RST_BUS_SATA] = { 0x2c0, BIT(24) },
+ [RST_BUS_OTG] = { 0x2c0, BIT(25) },
+ [RST_BUS_EHCI0] = { 0x2c0, BIT(26) },
+ [RST_BUS_EHCI1] = { 0x2c0, BIT(27) },
+ [RST_BUS_EHCI2] = { 0x2c0, BIT(28) },
+ [RST_BUS_OHCI0] = { 0x2c0, BIT(29) },
+ [RST_BUS_OHCI1] = { 0x2c0, BIT(30) },
+ [RST_BUS_OHCI2] = { 0x2c0, BIT(31) },
+
+ [RST_BUS_VE] = { 0x2c4, BIT(0) },
+ [RST_BUS_MP] = { 0x2c4, BIT(2) },
+ [RST_BUS_DEINTERLACE] = { 0x2c4, BIT(5) },
+ [RST_BUS_CSI0] = { 0x2c4, BIT(8) },
+ [RST_BUS_CSI1] = { 0x2c4, BIT(9) },
+ [RST_BUS_HDMI0] = { 0x2c4, BIT(10) },
+ [RST_BUS_HDMI1] = { 0x2c4, BIT(11) },
+ [RST_BUS_DE] = { 0x2c4, BIT(12) },
+ [RST_BUS_TVE0] = { 0x2c4, BIT(13) },
+ [RST_BUS_TVE1] = { 0x2c4, BIT(14) },
+ [RST_BUS_TVE_TOP] = { 0x2c4, BIT(15) },
+ [RST_BUS_GMAC] = { 0x2c4, BIT(17) },
+ [RST_BUS_GPU] = { 0x2c4, BIT(20) },
+ [RST_BUS_TVD0] = { 0x2c4, BIT(21) },
+ [RST_BUS_TVD1] = { 0x2c4, BIT(22) },
+ [RST_BUS_TVD2] = { 0x2c4, BIT(23) },
+ [RST_BUS_TVD3] = { 0x2c4, BIT(24) },
+ [RST_BUS_TVD_TOP] = { 0x2c4, BIT(25) },
+ [RST_BUS_TCON_LCD0] = { 0x2c4, BIT(26) },
+ [RST_BUS_TCON_LCD1] = { 0x2c4, BIT(27) },
+ [RST_BUS_TCON_TV0] = { 0x2c4, BIT(28) },
+ [RST_BUS_TCON_TV1] = { 0x2c4, BIT(29) },
+ [RST_BUS_TCON_TOP] = { 0x2c4, BIT(30) },
+ [RST_BUS_DBG] = { 0x2c4, BIT(31) },
+
+ [RST_BUS_LVDS] = { 0x2c8, BIT(0) },
+
+ [RST_BUS_CODEC] = { 0x2d0, BIT(0) },
+ [RST_BUS_SPDIF] = { 0x2d0, BIT(1) },
+ [RST_BUS_AC97] = { 0x2d0, BIT(2) },
+ [RST_BUS_IR0] = { 0x2d0, BIT(6) },
+ [RST_BUS_IR1] = { 0x2d0, BIT(7) },
+ [RST_BUS_THS] = { 0x2d0, BIT(8) },
+ [RST_BUS_KEYPAD] = { 0x2d0, BIT(10) },
+ [RST_BUS_I2S0] = { 0x2d0, BIT(12) },
+ [RST_BUS_I2S1] = { 0x2d0, BIT(13) },
+ [RST_BUS_I2S2] = { 0x2d0, BIT(14) },
+
+ [RST_BUS_I2C0] = { 0x2d8, BIT(0) },
+ [RST_BUS_I2C1] = { 0x2d8, BIT(1) },
+ [RST_BUS_I2C2] = { 0x2d8, BIT(2) },
+ [RST_BUS_I2C3] = { 0x2d8, BIT(3) },
+ [RST_BUS_CAN] = { 0x2d8, BIT(4) },
+ [RST_BUS_SCR] = { 0x2d8, BIT(5) },
+ [RST_BUS_PS20] = { 0x2d8, BIT(6) },
+ [RST_BUS_PS21] = { 0x2d8, BIT(7) },
+ [RST_BUS_I2C4] = { 0x2d8, BIT(15) },
+ [RST_BUS_UART0] = { 0x2d8, BIT(16) },
+ [RST_BUS_UART1] = { 0x2d8, BIT(17) },
+ [RST_BUS_UART2] = { 0x2d8, BIT(18) },
+ [RST_BUS_UART3] = { 0x2d8, BIT(19) },
+ [RST_BUS_UART4] = { 0x2d8, BIT(20) },
+ [RST_BUS_UART5] = { 0x2d8, BIT(21) },
+ [RST_BUS_UART6] = { 0x2d8, BIT(22) },
+ [RST_BUS_UART7] = { 0x2d8, BIT(23) },
+};
+
+static const struct sunxi_ccu_desc sun8i_r40_ccu_desc = {
+ .ccu_clks = sun8i_r40_ccu_clks,
+ .num_ccu_clks = ARRAY_SIZE(sun8i_r40_ccu_clks),
+
+ .hw_clks = &sun8i_r40_hw_clks,
+
+ .resets = sun8i_r40_ccu_resets,
+ .num_resets = ARRAY_SIZE(sun8i_r40_ccu_resets),
+};
+
+static struct ccu_pll_nb sun8i_r40_pll_cpu_nb = {
+ .common = &pll_cpu_clk.common,
+ /* copy from pll_cpu_clk */
+ .enable = BIT(31),
+ .lock = BIT(28),
+};
+
+static struct ccu_mux_nb sun8i_r40_cpu_nb = {
+ .common = &cpu_clk.common,
+ .cm = &cpu_clk.mux,
+ .delay_us = 1, /* > 8 clock cycles at 24 MHz */
+ .bypass_index = 1, /* index of 24 MHz oscillator */
+};
+
+static void __init sun8i_r40_ccu_setup(struct device_node *node)
+{
+ void __iomem *reg;
+ u32 val;
+
+ reg = of_io_request_and_map(node, 0, of_node_full_name(node));
+ if (IS_ERR(reg)) {
+ pr_err("%s: Could not map the clock registers\n",
+ of_node_full_name(node));
+ return;
+ }
+
+ /* Force the PLL-Audio-1x divider to 4 */
+ val = readl(reg + SUN8I_R40_PLL_AUDIO_REG);
+ val &= ~GENMASK(19, 16);
+ writel(val | (3 << 16), reg + SUN8I_R40_PLL_AUDIO_REG);
+
+ /* Force PLL-MIPI to MIPI mode */
+ val = readl(reg + SUN8I_R40_PLL_MIPI_REG);
+ val &= ~BIT(16);
+ writel(val, reg + SUN8I_R40_PLL_MIPI_REG);
+
+ /* Force OHCI 12M parent to 12M divided from 48M */
+ val = readl(reg + SUN8I_R40_USB_CLK_REG);
+ val &= ~GENMASK(25, 20);
+ writel(val, reg + SUN8I_R40_USB_CLK_REG);
+
+ sunxi_ccu_probe(node, reg, &sun8i_r40_ccu_desc);
+
+ /* Gate then ungate PLL CPU after any rate changes */
+ ccu_pll_notifier_register(&sun8i_r40_pll_cpu_nb);
+
+ /* Reparent CPU during PLL CPU rate changes */
+ ccu_mux_notifier_register(pll_cpu_clk.common.hw.clk,
+ &sun8i_r40_cpu_nb);
+}
+CLK_OF_DECLARE(sun8i_r40_ccu, "allwinner,sun8i-r40-ccu",
+ sun8i_r40_ccu_setup);
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-r40.h b/drivers/clk/sunxi-ng/ccu-sun8i-r40.h
new file mode 100644
index 000000000000..0db8e1e97af8
--- /dev/null
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-r40.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright 2017 Icenowy Zheng <icenowy@aosc.io>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef _CCU_SUN8I_R40_H_
+#define _CCU_SUN8I_R40_H_
+
+#include <dt-bindings/clock/sun8i-r40-ccu.h>
+#include <dt-bindings/reset/sun8i-r40-ccu.h>
+
+#define CLK_OSC_12M 0
+#define CLK_PLL_CPU 1
+#define CLK_PLL_AUDIO_BASE 2
+#define CLK_PLL_AUDIO 3
+#define CLK_PLL_AUDIO_2X 4
+#define CLK_PLL_AUDIO_4X 5
+#define CLK_PLL_AUDIO_8X 6
+#define CLK_PLL_VIDEO0 7
+#define CLK_PLL_VIDEO0_2X 8
+#define CLK_PLL_VE 9
+#define CLK_PLL_DDR0 10
+#define CLK_PLL_PERIPH0 11
+#define CLK_PLL_PERIPH0_SATA 12
+#define CLK_PLL_PERIPH0_2X 13
+#define CLK_PLL_PERIPH1 14
+#define CLK_PLL_PERIPH1_2X 15
+#define CLK_PLL_VIDEO1 16
+#define CLK_PLL_VIDEO1_2X 17
+#define CLK_PLL_SATA 18
+#define CLK_PLL_SATA_OUT 19
+#define CLK_PLL_GPU 20
+#define CLK_PLL_MIPI 21
+#define CLK_PLL_DE 22
+#define CLK_PLL_DDR1 23
+
+/* The CPU clock is exported */
+
+#define CLK_AXI 25
+#define CLK_AHB1 26
+#define CLK_APB1 27
+#define CLK_APB2 28
+
+/* All the bus gates are exported */
+
+/* The first bunch of module clocks are exported */
+
+#define CLK_DRAM 132
+
+/* All the DRAM gates are exported */
+
+/* Some more module clocks are exported */
+
+#define CLK_MBUS 155
+
+/* Another bunch of module clocks are exported */
+
+#define CLK_NUMBER (CLK_OUTB + 1)
+
+#endif /* _CCU_SUN8I_R40_H_ */
diff --git a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
index a34a78d7fb28..621b1cd996db 100644
--- a/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
+++ b/drivers/clk/sunxi-ng/ccu-sun8i-v3s.c
@@ -575,8 +575,7 @@ static void __init sun8i_v3s_ccu_setup(struct device_node *node)
reg = of_io_request_and_map(node, 0, of_node_full_name(node));
if (IS_ERR(reg)) {
- pr_err("%s: Could not map the clock registers\n",
- of_node_full_name(node));
+ pr_err("%pOF: Could not map the clock registers\n", node);
return;
}
diff --git a/drivers/clk/sunxi-ng/ccu_div.c b/drivers/clk/sunxi-ng/ccu_div.c
index c0e5c10d0091..baa3cf96507b 100644
--- a/drivers/clk/sunxi-ng/ccu_div.c
+++ b/drivers/clk/sunxi-ng/ccu_div.c
@@ -21,10 +21,18 @@ static unsigned long ccu_div_round_rate(struct ccu_mux_internal *mux,
{
struct ccu_div *cd = data;
- return divider_round_rate_parent(&cd->common.hw, parent,
+ if (cd->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ rate *= cd->fixed_post_div;
+
+ rate = divider_round_rate_parent(&cd->common.hw, parent,
rate, parent_rate,
cd->div.table, cd->div.width,
cd->div.flags);
+
+ if (cd->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ rate /= cd->fixed_post_div;
+
+ return rate;
}
static void ccu_div_disable(struct clk_hw *hw)
@@ -62,8 +70,13 @@ static unsigned long ccu_div_recalc_rate(struct clk_hw *hw,
parent_rate = ccu_mux_helper_apply_prediv(&cd->common, &cd->mux, -1,
parent_rate);
- return divider_recalc_rate(hw, parent_rate, val, cd->div.table,
- cd->div.flags);
+ val = divider_recalc_rate(hw, parent_rate, val, cd->div.table,
+ cd->div.flags);
+
+ if (cd->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ val /= cd->fixed_post_div;
+
+ return val;
}
static int ccu_div_determine_rate(struct clk_hw *hw,
@@ -86,6 +99,9 @@ static int ccu_div_set_rate(struct clk_hw *hw, unsigned long rate,
parent_rate = ccu_mux_helper_apply_prediv(&cd->common, &cd->mux, -1,
parent_rate);
+ if (cd->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ rate *= cd->fixed_post_div;
+
val = divider_get_val(rate, parent_rate, cd->div.table, cd->div.width,
cd->div.flags);
diff --git a/drivers/clk/sunxi-ng/ccu_div.h b/drivers/clk/sunxi-ng/ccu_div.h
index 08d074451204..f3a5028dcd14 100644
--- a/drivers/clk/sunxi-ng/ccu_div.h
+++ b/drivers/clk/sunxi-ng/ccu_div.h
@@ -86,9 +86,10 @@ struct ccu_div_internal {
struct ccu_div {
u32 enable;
- struct ccu_div_internal div;
+ struct ccu_div_internal div;
struct ccu_mux_internal mux;
struct ccu_common common;
+ unsigned int fixed_post_div;
};
#define SUNXI_CCU_DIV_TABLE_WITH_GATE(_struct, _name, _parent, _reg, \
diff --git a/drivers/clk/sunxi-ng/ccu_frac.c b/drivers/clk/sunxi-ng/ccu_frac.c
index 8b5eb7756bf7..d1d168d4c4f0 100644
--- a/drivers/clk/sunxi-ng/ccu_frac.c
+++ b/drivers/clk/sunxi-ng/ccu_frac.c
@@ -67,25 +67,25 @@ unsigned long ccu_frac_helper_read_rate(struct ccu_common *common,
{
u32 reg;
- printk("%s: Read fractional\n", clk_hw_get_name(&common->hw));
+ pr_debug("%s: Read fractional\n", clk_hw_get_name(&common->hw));
if (!(common->features & CCU_FEATURE_FRACTIONAL))
return 0;
- printk("%s: clock is fractional (rates %lu and %lu)\n",
- clk_hw_get_name(&common->hw), cf->rates[0], cf->rates[1]);
+ pr_debug("%s: clock is fractional (rates %lu and %lu)\n",
+ clk_hw_get_name(&common->hw), cf->rates[0], cf->rates[1]);
reg = readl(common->base + common->reg);
- printk("%s: clock reg is 0x%x (select is 0x%x)\n",
- clk_hw_get_name(&common->hw), reg, cf->select);
+ pr_debug("%s: clock reg is 0x%x (select is 0x%x)\n",
+ clk_hw_get_name(&common->hw), reg, cf->select);
return (reg & cf->select) ? cf->rates[1] : cf->rates[0];
}
int ccu_frac_helper_set_rate(struct ccu_common *common,
struct ccu_frac_internal *cf,
- unsigned long rate)
+ unsigned long rate, u32 lock)
{
unsigned long flags;
u32 reg, sel;
@@ -106,5 +106,7 @@ int ccu_frac_helper_set_rate(struct ccu_common *common,
writel(reg | sel, common->base + common->reg);
spin_unlock_irqrestore(common->lock, flags);
+ ccu_helper_wait_for_lock(common, lock);
+
return 0;
}
diff --git a/drivers/clk/sunxi-ng/ccu_frac.h b/drivers/clk/sunxi-ng/ccu_frac.h
index 7b1ee380156f..efe2dd6bac01 100644
--- a/drivers/clk/sunxi-ng/ccu_frac.h
+++ b/drivers/clk/sunxi-ng/ccu_frac.h
@@ -48,6 +48,6 @@ unsigned long ccu_frac_helper_read_rate(struct ccu_common *common,
int ccu_frac_helper_set_rate(struct ccu_common *common,
struct ccu_frac_internal *cf,
- unsigned long rate);
+ unsigned long rate, u32 lock);
#endif /* _CCU_FRAC_H_ */
diff --git a/drivers/clk/sunxi-ng/ccu_mult.c b/drivers/clk/sunxi-ng/ccu_mult.c
index 20d0300867f2..12e0783caee6 100644
--- a/drivers/clk/sunxi-ng/ccu_mult.c
+++ b/drivers/clk/sunxi-ng/ccu_mult.c
@@ -111,10 +111,14 @@ static int ccu_mult_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long flags;
u32 reg;
- if (ccu_frac_helper_has_rate(&cm->common, &cm->frac, rate))
- return ccu_frac_helper_set_rate(&cm->common, &cm->frac, rate);
- else
+ if (ccu_frac_helper_has_rate(&cm->common, &cm->frac, rate)) {
+ ccu_frac_helper_enable(&cm->common, &cm->frac);
+
+ return ccu_frac_helper_set_rate(&cm->common, &cm->frac,
+ rate, cm->lock);
+ } else {
ccu_frac_helper_disable(&cm->common, &cm->frac);
+ }
parent_rate = ccu_mux_helper_apply_prediv(&cm->common, &cm->mux, -1,
parent_rate);
diff --git a/drivers/clk/sunxi-ng/ccu_nkm.c b/drivers/clk/sunxi-ng/ccu_nkm.c
index 44b16dc8fea6..841840e35e61 100644
--- a/drivers/clk/sunxi-ng/ccu_nkm.c
+++ b/drivers/clk/sunxi-ng/ccu_nkm.c
@@ -75,7 +75,7 @@ static unsigned long ccu_nkm_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{
struct ccu_nkm *nkm = hw_to_ccu_nkm(hw);
- unsigned long n, m, k;
+ unsigned long n, m, k, rate;
u32 reg;
reg = readl(nkm->common.base + nkm->common.reg);
@@ -98,7 +98,12 @@ static unsigned long ccu_nkm_recalc_rate(struct clk_hw *hw,
if (!m)
m++;
- return parent_rate * n * k / m;
+ rate = parent_rate * n * k / m;
+
+ if (nkm->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ rate /= nkm->fixed_post_div;
+
+ return rate;
}
static unsigned long ccu_nkm_round_rate(struct ccu_mux_internal *mux,
@@ -117,9 +122,17 @@ static unsigned long ccu_nkm_round_rate(struct ccu_mux_internal *mux,
_nkm.min_m = 1;
_nkm.max_m = nkm->m.max ?: 1 << nkm->m.width;
+ if (nkm->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ rate *= nkm->fixed_post_div;
+
ccu_nkm_find_best(*parent_rate, rate, &_nkm);
- return *parent_rate * _nkm.n * _nkm.k / _nkm.m;
+ rate = *parent_rate * _nkm.n * _nkm.k / _nkm.m;
+
+ if (nkm->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ rate /= nkm->fixed_post_div;
+
+ return rate;
}
static int ccu_nkm_determine_rate(struct clk_hw *hw,
@@ -139,6 +152,9 @@ static int ccu_nkm_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long flags;
u32 reg;
+ if (nkm->common.features & CCU_FEATURE_FIXED_POSTDIV)
+ rate *= nkm->fixed_post_div;
+
_nkm.min_n = nkm->n.min ?: 1;
_nkm.max_n = nkm->n.max ?: 1 << nkm->n.width;
_nkm.min_k = nkm->k.min ?: 1;
diff --git a/drivers/clk/sunxi-ng/ccu_nkm.h b/drivers/clk/sunxi-ng/ccu_nkm.h
index 34580894f4d1..cc6efb70a102 100644
--- a/drivers/clk/sunxi-ng/ccu_nkm.h
+++ b/drivers/clk/sunxi-ng/ccu_nkm.h
@@ -34,6 +34,8 @@ struct ccu_nkm {
struct ccu_div_internal m;
struct ccu_mux_internal mux;
+ unsigned int fixed_post_div;
+
struct ccu_common common;
};
diff --git a/drivers/clk/sunxi-ng/ccu_nm.c b/drivers/clk/sunxi-ng/ccu_nm.c
index 5e5e90a4a50c..a32158e8f2e3 100644
--- a/drivers/clk/sunxi-ng/ccu_nm.c
+++ b/drivers/clk/sunxi-ng/ccu_nm.c
@@ -117,10 +117,23 @@ static int ccu_nm_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long flags;
u32 reg;
- if (ccu_frac_helper_has_rate(&nm->common, &nm->frac, rate))
- return ccu_frac_helper_set_rate(&nm->common, &nm->frac, rate);
- else
+ if (ccu_frac_helper_has_rate(&nm->common, &nm->frac, rate)) {
+ spin_lock_irqsave(nm->common.lock, flags);
+
+ /* most SoCs require M to be 0 if fractional mode is used */
+ reg = readl(nm->common.base + nm->common.reg);
+ reg &= ~GENMASK(nm->m.width + nm->m.shift - 1, nm->m.shift);
+ writel(reg, nm->common.base + nm->common.reg);
+
+ spin_unlock_irqrestore(nm->common.lock, flags);
+
+ ccu_frac_helper_enable(&nm->common, &nm->frac);
+
+ return ccu_frac_helper_set_rate(&nm->common, &nm->frac,
+ rate, nm->lock);
+ } else {
ccu_frac_helper_disable(&nm->common, &nm->frac);
+ }
_nm.min_n = nm->n.min ?: 1;
_nm.max_n = nm->n.max ?: 1 << nm->n.width;
diff --git a/drivers/clk/sunxi/clk-sun8i-bus-gates.c b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
index 63fdb790df29..bee305bdddbe 100644
--- a/drivers/clk/sunxi/clk-sun8i-bus-gates.c
+++ b/drivers/clk/sunxi/clk-sun8i-bus-gates.c
@@ -78,6 +78,10 @@ static void __init sun8i_h3_bus_gates_init(struct device_node *node)
clk_parent = APB1;
else if (index >= 96 && index <= 127)
clk_parent = APB2;
+ else {
+ WARN_ON(true);
+ continue;
+ }
clk_reg = reg + 4 * (index / 32);
clk_bit = index % 32;
diff --git a/drivers/clk/sunxi/clk-sunxi.c b/drivers/clk/sunxi/clk-sunxi.c
index f2c9274b8bd5..aa4add580516 100644
--- a/drivers/clk/sunxi/clk-sunxi.c
+++ b/drivers/clk/sunxi/clk-sunxi.c
@@ -666,15 +666,14 @@ static struct clk * __init sunxi_mux_clk_setup(struct device_node *node,
reg = of_iomap(node, 0);
if (!reg) {
- pr_err("Could not map registers for mux-clk: %s\n",
- of_node_full_name(node));
+ pr_err("Could not map registers for mux-clk: %pOF\n", node);
return NULL;
}
i = of_clk_parent_fill(node, parents, SUNXI_MAX_PARENTS);
if (of_property_read_string(node, "clock-output-names", &clk_name)) {
- pr_err("%s: could not read clock-output-names from \"%s\"\n",
- __func__, of_node_full_name(node));
+ pr_err("%s: could not read clock-output-names from \"%pOF\"\n",
+ __func__, node);
goto out_unmap;
}
@@ -797,16 +796,15 @@ static void __init sunxi_divider_clk_setup(struct device_node *node,
reg = of_iomap(node, 0);
if (!reg) {
- pr_err("Could not map registers for mux-clk: %s\n",
- of_node_full_name(node));
+ pr_err("Could not map registers for mux-clk: %pOF\n", node);
return;
}
clk_parent = of_clk_get_parent_name(node, 0);
if (of_property_read_string(node, "clock-output-names", &clk_name)) {
- pr_err("%s: could not read clock-output-names from \"%s\"\n",
- __func__, of_node_full_name(node));
+ pr_err("%s: could not read clock-output-names from \"%pOF\"\n",
+ __func__, node);
goto out_unmap;
}
@@ -1010,8 +1008,7 @@ static struct clk ** __init sunxi_divs_clk_setup(struct device_node *node,
reg = of_iomap(node, 0);
if (!reg) {
- pr_err("Could not map registers for divs-clk: %s\n",
- of_node_full_name(node));
+ pr_err("Could not map registers for divs-clk: %pOF\n", node);
return NULL;
}
diff --git a/drivers/clk/tegra/clk-emc.c b/drivers/clk/tegra/clk-emc.c
index 74e7544f861b..11a5066e5c27 100644
--- a/drivers/clk/tegra/clk-emc.c
+++ b/drivers/clk/tegra/clk-emc.c
@@ -378,7 +378,7 @@ static int load_one_timing_from_dt(struct tegra_clk_emc *tegra,
err = of_property_read_u32(node, "clock-frequency", &tmp);
if (err) {
- pr_err("timing %s: failed to read rate\n", node->full_name);
+ pr_err("timing %pOF: failed to read rate\n", node);
return err;
}
@@ -386,8 +386,7 @@ static int load_one_timing_from_dt(struct tegra_clk_emc *tegra,
err = of_property_read_u32(node, "nvidia,parent-clock-frequency", &tmp);
if (err) {
- pr_err("timing %s: failed to read parent rate\n",
- node->full_name);
+ pr_err("timing %pOF: failed to read parent rate\n", node);
return err;
}
@@ -395,8 +394,7 @@ static int load_one_timing_from_dt(struct tegra_clk_emc *tegra,
timing->parent = of_clk_get_by_name(node, "emc-parent");
if (IS_ERR(timing->parent)) {
- pr_err("timing %s: failed to get parent clock\n",
- node->full_name);
+ pr_err("timing %pOF: failed to get parent clock\n", node);
return PTR_ERR(timing->parent);
}
@@ -409,8 +407,8 @@ static int load_one_timing_from_dt(struct tegra_clk_emc *tegra,
}
}
if (timing->parent_index == 0xff) {
- pr_err("timing %s: %s is not a valid parent\n",
- node->full_name, __clk_get_name(timing->parent));
+ pr_err("timing %pOF: %s is not a valid parent\n",
+ node, __clk_get_name(timing->parent));
clk_put(timing->parent);
return -EINVAL;
}
diff --git a/drivers/clk/tegra/clk-pll.c b/drivers/clk/tegra/clk-pll.c
index 159a854779e6..7c369e21c91c 100644
--- a/drivers/clk/tegra/clk-pll.c
+++ b/drivers/clk/tegra/clk-pll.c
@@ -363,7 +363,7 @@ static void _clk_pll_enable(struct clk_hw *hw)
val = pll_readl(pll->params->iddq_reg, pll);
val &= ~BIT(pll->params->iddq_bit_idx);
pll_writel(val, pll->params->iddq_reg, pll);
- udelay(2);
+ udelay(5);
}
if (pll->params->reset_reg) {
@@ -418,6 +418,26 @@ static void _clk_pll_disable(struct clk_hw *hw)
}
}
+static void pll_clk_start_ss(struct tegra_clk_pll *pll)
+{
+ if (pll->params->defaults_set && pll->params->ssc_ctrl_reg) {
+ u32 val = pll_readl(pll->params->ssc_ctrl_reg, pll);
+
+ val |= pll->params->ssc_ctrl_en_mask;
+ pll_writel(val, pll->params->ssc_ctrl_reg, pll);
+ }
+}
+
+static void pll_clk_stop_ss(struct tegra_clk_pll *pll)
+{
+ if (pll->params->defaults_set && pll->params->ssc_ctrl_reg) {
+ u32 val = pll_readl(pll->params->ssc_ctrl_reg, pll);
+
+ val &= ~pll->params->ssc_ctrl_en_mask;
+ pll_writel(val, pll->params->ssc_ctrl_reg, pll);
+ }
+}
+
static int clk_pll_enable(struct clk_hw *hw)
{
struct tegra_clk_pll *pll = to_clk_pll(hw);
@@ -431,6 +451,8 @@ static int clk_pll_enable(struct clk_hw *hw)
ret = clk_pll_wait_for_lock(pll);
+ pll_clk_start_ss(pll);
+
if (pll->lock)
spin_unlock_irqrestore(pll->lock, flags);
@@ -445,6 +467,8 @@ static void clk_pll_disable(struct clk_hw *hw)
if (pll->lock)
spin_lock_irqsave(pll->lock, flags);
+ pll_clk_stop_ss(pll);
+
_clk_pll_disable(hw);
if (pll->lock)
@@ -666,6 +690,8 @@ static void _get_pll_mnp(struct tegra_clk_pll *pll,
struct tegra_clk_pll_params *params = pll->params;
struct div_nmp *div_nmp = params->div_nmp;
+ *cfg = (struct tegra_clk_pll_freq_table) { };
+
if ((params->flags & (TEGRA_PLLM | TEGRA_PLLMB)) &&
(pll_override_readl(PMC_PLLP_WB0_OVERRIDE, pll) &
PMC_PLLP_WB0_OVERRIDE_PLLM_OVERRIDE)) {
@@ -716,26 +742,6 @@ static void _update_pll_cpcon(struct tegra_clk_pll *pll,
pll_writel_misc(val, pll);
}
-static void pll_clk_start_ss(struct tegra_clk_pll *pll)
-{
- if (pll->params->defaults_set && pll->params->ssc_ctrl_reg) {
- u32 val = pll_readl(pll->params->ssc_ctrl_reg, pll);
-
- val |= pll->params->ssc_ctrl_en_mask;
- pll_writel(val, pll->params->ssc_ctrl_reg, pll);
- }
-}
-
-static void pll_clk_stop_ss(struct tegra_clk_pll *pll)
-{
- if (pll->params->defaults_set && pll->params->ssc_ctrl_reg) {
- u32 val = pll_readl(pll->params->ssc_ctrl_reg, pll);
-
- val &= ~pll->params->ssc_ctrl_en_mask;
- pll_writel(val, pll->params->ssc_ctrl_reg, pll);
- }
-}
-
static int _program_pll(struct clk_hw *hw, struct tegra_clk_pll_freq_table *cfg,
unsigned long rate)
{
@@ -2251,7 +2257,7 @@ tegra_clk_register_pllu_tegra114(const char *name, const char *parent_name,
}
#endif
-#if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC)
+#if defined(CONFIG_ARCH_TEGRA_124_SOC) || defined(CONFIG_ARCH_TEGRA_132_SOC) || defined(CONFIG_ARCH_TEGRA_210_SOC)
static const struct clk_ops tegra_clk_pllss_ops = {
.is_enabled = clk_pll_is_enabled,
.enable = clk_pll_enable,
@@ -2349,7 +2355,6 @@ struct clk *tegra_clk_register_pllre_tegra210(const char *name,
struct tegra_clk_pll_params *pll_params,
spinlock_t *lock, unsigned long parent_rate)
{
- u32 val;
struct tegra_clk_pll *pll;
struct clk *clk;
@@ -2363,26 +2368,8 @@ struct clk *tegra_clk_register_pllre_tegra210(const char *name,
if (IS_ERR(pll))
return ERR_CAST(pll);
- /* program minimum rate by default */
-
- val = pll_readl_base(pll);
- if (val & PLL_BASE_ENABLE)
- WARN_ON(readl_relaxed(clk_base + pll_params->iddq_reg) &
- BIT(pll_params->iddq_bit_idx));
- else {
- val = 0x4 << divm_shift(pll);
- val |= 0x41 << divn_shift(pll);
- pll_writel_base(val, pll);
- }
-
- /* disable lock override */
-
- val = pll_readl_misc(pll);
- val &= ~BIT(29);
- pll_writel_misc(val, pll);
-
clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
- &tegra_clk_pllre_ops);
+ &tegra_clk_pll_ops);
if (IS_ERR(clk))
kfree(pll);
@@ -2604,46 +2591,6 @@ struct clk *tegra_clk_register_pllc_tegra210(const char *name,
return clk;
}
-struct clk *tegra_clk_register_pllxc_tegra210(const char *name,
- const char *parent_name, void __iomem *clk_base,
- void __iomem *pmc, unsigned long flags,
- struct tegra_clk_pll_params *pll_params,
- spinlock_t *lock)
-{
- struct tegra_clk_pll *pll;
- struct clk *clk, *parent;
- unsigned long parent_rate;
-
- parent = __clk_lookup(parent_name);
- if (!parent) {
- WARN(1, "parent clk %s of %s must be registered first\n",
- name, parent_name);
- return ERR_PTR(-EINVAL);
- }
-
- if (!pll_params->pdiv_tohw)
- return ERR_PTR(-EINVAL);
-
- parent_rate = clk_get_rate(parent);
-
- pll_params->vco_min = _clip_vco_min(pll_params->vco_min, parent_rate);
-
- if (pll_params->adjust_vco)
- pll_params->vco_min = pll_params->adjust_vco(pll_params,
- parent_rate);
-
- pll = _tegra_init_pll(clk_base, pmc, pll_params, lock);
- if (IS_ERR(pll))
- return ERR_CAST(pll);
-
- clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
- &tegra_clk_pll_ops);
- if (IS_ERR(clk))
- kfree(pll);
-
- return clk;
-}
-
struct clk *tegra_clk_register_pllss_tegra210(const char *name,
const char *parent_name, void __iomem *clk_base,
unsigned long flags,
@@ -2652,10 +2599,8 @@ struct clk *tegra_clk_register_pllss_tegra210(const char *name,
{
struct tegra_clk_pll *pll;
struct clk *clk, *parent;
- struct tegra_clk_pll_freq_table cfg;
unsigned long parent_rate;
u32 val;
- int i;
if (!pll_params->div_nmp)
return ERR_PTR(-EINVAL);
@@ -2667,13 +2612,11 @@ struct clk *tegra_clk_register_pllss_tegra210(const char *name,
return ERR_PTR(-EINVAL);
}
- pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
- if (IS_ERR(pll))
- return ERR_CAST(pll);
-
- val = pll_readl_base(pll);
- val &= ~PLLSS_REF_SRC_SEL_MASK;
- pll_writel_base(val, pll);
+ val = readl_relaxed(clk_base + pll_params->base_reg);
+ if (val & PLLSS_REF_SRC_SEL_MASK) {
+ WARN(1, "not supported reference clock for %s\n", name);
+ return ERR_PTR(-EINVAL);
+ }
parent_rate = clk_get_rate(parent);
@@ -2683,36 +2626,10 @@ struct clk *tegra_clk_register_pllss_tegra210(const char *name,
pll_params->vco_min = pll_params->adjust_vco(pll_params,
parent_rate);
- /* initialize PLL to minimum rate */
-
- cfg.m = _pll_fixed_mdiv(pll_params, parent_rate);
- cfg.n = cfg.m * pll_params->vco_min / parent_rate;
-
- for (i = 0; pll_params->pdiv_tohw[i].pdiv; i++)
- ;
- if (!i) {
- kfree(pll);
- return ERR_PTR(-EINVAL);
- }
-
- cfg.p = pll_params->pdiv_tohw[i-1].hw_val;
-
- _update_pll_mnp(pll, &cfg);
-
- pll_writel_misc(PLLSS_MISC_DEFAULT, pll);
-
- val = pll_readl_base(pll);
- if (val & PLL_BASE_ENABLE) {
- if (val & BIT(pll_params->iddq_bit_idx)) {
- WARN(1, "%s is on but IDDQ set\n", name);
- kfree(pll);
- return ERR_PTR(-EINVAL);
- }
- } else
- val |= BIT(pll_params->iddq_bit_idx);
-
- val &= ~PLLSS_LOCK_OVERRIDE;
- pll_writel_base(val, pll);
+ pll_params->flags |= TEGRA_PLL_BYPASS;
+ pll = _tegra_init_pll(clk_base, NULL, pll_params, lock);
+ if (IS_ERR(pll))
+ return ERR_CAST(pll);
clk = _tegra_clk_register_pll(pll, name, parent_name, flags,
&tegra_clk_pll_ops);
diff --git a/drivers/clk/tegra/clk-tegra-periph.c b/drivers/clk/tegra/clk-tegra-periph.c
index 294bfe40a4f5..848255cc0209 100644
--- a/drivers/clk/tegra/clk-tegra-periph.c
+++ b/drivers/clk/tegra/clk-tegra-periph.c
@@ -216,7 +216,8 @@
_clk_num, _clk_id) \
TEGRA_INIT_DATA_TABLE(_name, NULL, NULL, _parents, _offset,\
30, MASK(2), 0, 0, 16, 0, TEGRA_DIVIDER_ROUND_UP,\
- _clk_num, 0, _clk_id, _parents##_idx, 0, NULL)
+ _clk_num, TEGRA_PERIPH_ON_APB, _clk_id, \
+ _parents##_idx, 0, NULL)
#define XUSB(_name, _parents, _offset, \
_clk_num, _gate_flags, _clk_id) \
diff --git a/drivers/clk/tegra/clk-tegra-super-gen4.c b/drivers/clk/tegra/clk-tegra-super-gen4.c
index 474de0f0c26d..4f6fd307cb70 100644
--- a/drivers/clk/tegra/clk-tegra-super-gen4.c
+++ b/drivers/clk/tegra/clk-tegra-super-gen4.c
@@ -232,8 +232,15 @@ static void __init tegra_super_clk_init(void __iomem *clk_base,
if (!dt_clk)
return;
- clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base,
- pmc_base, CLK_IGNORE_UNUSED, params, NULL);
+#if defined(CONFIG_ARCH_TEGRA_210_SOC)
+ if (gen_info->gen == gen5)
+ clk = tegra_clk_register_pllc_tegra210("pll_x", "pll_ref",
+ clk_base, pmc_base, CLK_IGNORE_UNUSED, params, NULL);
+ else
+#endif
+ clk = tegra_clk_register_pllxc("pll_x", "pll_ref", clk_base,
+ pmc_base, CLK_IGNORE_UNUSED, params, NULL);
+
*dt_clk = clk;
/* PLLX_OUT0 */
diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra210.c
index 1024e853ea65..6d7a613f2656 100644
--- a/drivers/clk/tegra/clk-tegra210.c
+++ b/drivers/clk/tegra/clk-tegra210.c
@@ -146,7 +146,7 @@
#define PLLD_SDM_EN_MASK BIT(16)
#define PLLD2_SDM_EN_MASK BIT(31)
-#define PLLD2_SSC_EN_MASK BIT(30)
+#define PLLD2_SSC_EN_MASK 0
#define PLLDP_SS_CFG 0x598
#define PLLDP_SDM_EN_MASK BIT(31)
@@ -241,6 +241,9 @@
#define PLL_SDM_COEFF BIT(13)
#define sdin_din_to_data(din) ((u16)((din) ? : 0xFFFFU))
#define sdin_data_to_din(dat) (((dat) == 0xFFFFU) ? 0 : (s16)dat)
+/* This macro returns ndiv effective scaled to SDM range */
+#define sdin_get_n_eff(cfg) ((cfg)->n * PLL_SDM_COEFF + ((cfg)->sdm_data ? \
+ (PLL_SDM_COEFF/2 + sdin_data_to_din((cfg)->sdm_data)) : 0))
/* Tegra CPU clock and reset control regs */
#define CLK_RST_CONTROLLER_CPU_CMPLX_STATUS 0x470
@@ -715,8 +718,6 @@ static void plldss_defaults(const char *pll_name, struct tegra_clk_pll *plldss,
plldss->params->defaults_set = true;
if (val & PLL_ENABLE) {
- pr_warn("%s already enabled. Postponing set full defaults\n",
- pll_name);
/*
* PLL is ON: check if defaults already set, then set those
@@ -755,6 +756,10 @@ static void plldss_defaults(const char *pll_name, struct tegra_clk_pll *plldss,
(~PLLDSS_MISC1_CFG_EN_SDM));
}
+ if (!plldss->params->defaults_set)
+ pr_warn("%s already enabled. Postponing set full defaults\n",
+ pll_name);
+
/* Enable lock detect */
if (val & PLLDSS_BASE_LOCK_OVERRIDE) {
val &= ~PLLDSS_BASE_LOCK_OVERRIDE;
@@ -1288,8 +1293,7 @@ static int tegra210_pll_fixed_mdiv_cfg(struct clk_hw *hw,
s -= PLL_SDM_COEFF / 2;
cfg->sdm_data = sdin_din_to_data(s);
}
- cfg->output_rate *= cfg->n * PLL_SDM_COEFF + PLL_SDM_COEFF/2 +
- sdin_data_to_din(cfg->sdm_data);
+ cfg->output_rate *= sdin_get_n_eff(cfg);
cfg->output_rate /= p * cfg->m * PLL_SDM_COEFF;
} else {
cfg->output_rate *= cfg->n;
@@ -1314,8 +1318,7 @@ static int tegra210_pll_fixed_mdiv_cfg(struct clk_hw *hw,
*/
static void tegra210_clk_pll_set_gain(struct tegra_clk_pll_freq_table *cfg)
{
- cfg->n = cfg->n * PLL_SDM_COEFF + PLL_SDM_COEFF/2 +
- sdin_data_to_din(cfg->sdm_data);
+ cfg->n = sdin_get_n_eff(cfg);
cfg->m *= PLL_SDM_COEFF;
}
@@ -2204,7 +2207,6 @@ static struct tegra_clk tegra210_clks[tegra_clk_max] __initdata = {
[tegra_clk_gpu] = { .dt_id = TEGRA210_CLK_GPU, .present = true },
[tegra_clk_pll_g_ref] = { .dt_id = TEGRA210_CLK_PLL_G_REF, .present = true, },
[tegra_clk_uartb_8] = { .dt_id = TEGRA210_CLK_UARTB, .present = true },
- [tegra_clk_vfir] = { .dt_id = TEGRA210_CLK_VFIR, .present = true },
[tegra_clk_spdif_in_8] = { .dt_id = TEGRA210_CLK_SPDIF_IN, .present = true },
[tegra_clk_spdif_out] = { .dt_id = TEGRA210_CLK_SPDIF_OUT, .present = true },
[tegra_clk_vi_10] = { .dt_id = TEGRA210_CLK_VI, .present = true },
@@ -2470,15 +2472,14 @@ static void tegra210_utmi_param_configure(void)
reg |= UTMIP_PLL_CFG2_STABLE_COUNT(utmi_parameters[i].stable_count);
reg &= ~UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(~0);
-
reg |=
UTMIP_PLL_CFG2_ACTIVE_DLY_COUNT(utmi_parameters[i].active_delay_count);
writel_relaxed(reg, clk_base + UTMIP_PLL_CFG2);
/* Program UTMIP PLL delay and oscillator frequency counts */
reg = readl_relaxed(clk_base + UTMIP_PLL_CFG1);
- reg &= ~UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(~0);
+ reg &= ~UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(~0);
reg |=
UTMIP_PLL_CFG1_ENABLE_DLY_COUNT(utmi_parameters[i].enable_delay_count);
@@ -2494,7 +2495,8 @@ static void tegra210_utmi_param_configure(void)
reg &= ~UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERDOWN;
reg |= UTMIP_PLL_CFG1_FORCE_PLL_ENABLE_POWERUP;
writel_relaxed(reg, clk_base + UTMIP_PLL_CFG1);
- udelay(1);
+
+ udelay(20);
/* Enable samplers for SNPS, XUSB_HOST, XUSB_DEV */
reg = readl_relaxed(clk_base + UTMIP_PLL_CFG2);
@@ -2552,6 +2554,7 @@ static int tegra210_enable_pllu(void)
reg = readl_relaxed(clk_base + pllu.params->ext_misc_reg[0]);
reg &= ~BIT(pllu.params->iddq_bit_idx);
writel_relaxed(reg, clk_base + pllu.params->ext_misc_reg[0]);
+ udelay(5);
reg = readl_relaxed(clk_base + PLLU_BASE);
reg &= ~GENMASK(20, 0);
@@ -2559,6 +2562,7 @@ static int tegra210_enable_pllu(void)
reg |= fentry->n << 8;
reg |= fentry->p << 16;
writel(reg, clk_base + PLLU_BASE);
+ udelay(1);
reg |= PLL_ENABLE;
writel(reg, clk_base + PLLU_BASE);
@@ -2699,7 +2703,7 @@ static void __init tegra210_pll_init(void __iomem *clk_base,
struct clk *clk;
/* PLLC */
- clk = tegra_clk_register_pllxc_tegra210("pll_c", "pll_ref", clk_base,
+ clk = tegra_clk_register_pllc_tegra210("pll_c", "pll_ref", clk_base,
pmc, 0, &pll_c_params, NULL);
if (!WARN_ON(IS_ERR(clk)))
clk_register_clkdev(clk, "pll_c", NULL);
@@ -2798,14 +2802,14 @@ static void __init tegra210_pll_init(void __iomem *clk_base,
/* PLLU_60M */
clk = clk_register_gate(NULL, "pll_u_60M", "pll_u_out2",
CLK_SET_RATE_PARENT, clk_base + PLLU_BASE,
- 23, 0, NULL);
+ 23, 0, &pll_u_lock);
clk_register_clkdev(clk, "pll_u_60M", NULL);
clks[TEGRA210_CLK_PLL_U_60M] = clk;
/* PLLU_48M */
clk = clk_register_gate(NULL, "pll_u_48M", "pll_u_out1",
CLK_SET_RATE_PARENT, clk_base + PLLU_BASE,
- 25, 0, NULL);
+ 25, 0, &pll_u_lock);
clk_register_clkdev(clk, "pll_u_48M", NULL);
clks[TEGRA210_CLK_PLL_U_48M] = clk;
diff --git a/drivers/clk/tegra/clk.h b/drivers/clk/tegra/clk.h
index 945b07093afa..872f1189ad7f 100644
--- a/drivers/clk/tegra/clk.h
+++ b/drivers/clk/tegra/clk.h
@@ -362,12 +362,6 @@ struct clk *tegra_clk_register_pllxc(const char *name, const char *parent_name,
struct tegra_clk_pll_params *pll_params,
spinlock_t *lock);
-struct clk *tegra_clk_register_pllxc_tegra210(const char *name,
- const char *parent_name, void __iomem *clk_base,
- void __iomem *pmc, unsigned long flags,
- struct tegra_clk_pll_params *pll_params,
- spinlock_t *lock);
-
struct clk *tegra_clk_register_pllm(const char *name, const char *parent_name,
void __iomem *clk_base, void __iomem *pmc,
unsigned long flags,
diff --git a/drivers/clk/ti/adpll.c b/drivers/clk/ti/adpll.c
index 255cafb18336..d6036c788fab 100644
--- a/drivers/clk/ti/adpll.c
+++ b/drivers/clk/ti/adpll.c
@@ -222,7 +222,7 @@ static int ti_adpll_setup_clock(struct ti_adpll_data *d, struct clk *clock,
/* Separate con_id in format "pll040dcoclkldo" to fit MAX_CON_ID */
postfix = strrchr(name, '.');
- if (strlen(postfix) > 1) {
+ if (postfix && strlen(postfix) > 1) {
if (strlen(postfix) > ADPLL_MAX_CON_ID)
dev_warn(d->dev, "clock %s con_id lookup may fail\n",
name);
@@ -486,7 +486,7 @@ static u8 ti_adpll_get_parent(struct clk_hw *hw)
return 0;
}
-static struct clk_ops ti_adpll_ops = {
+static const struct clk_ops ti_adpll_ops = {
.prepare = ti_adpll_prepare,
.unprepare = ti_adpll_unprepare,
.is_prepared = ti_adpll_is_prepared,
diff --git a/drivers/clk/ti/apll.c b/drivers/clk/ti/apll.c
index 06f486b3488c..83b148f8037c 100644
--- a/drivers/clk/ti/apll.c
+++ b/drivers/clk/ti/apll.c
@@ -304,7 +304,7 @@ static void omap2_apll_disable(struct clk_hw *hw)
ti_clk_ll_ops->clk_writel(v, &ad->control_reg);
}
-static struct clk_ops omap2_apll_ops = {
+static const struct clk_ops omap2_apll_ops = {
.enable = &omap2_apll_enable,
.disable = &omap2_apll_disable,
.is_enabled = &omap2_apll_is_enabled,
diff --git a/drivers/clk/ti/clockdomain.c b/drivers/clk/ti/clockdomain.c
index fbedc6a9fed0..07a805125e98 100644
--- a/drivers/clk/ti/clockdomain.c
+++ b/drivers/clk/ti/clockdomain.c
@@ -138,8 +138,8 @@ static void __init of_ti_clockdomain_setup(struct device_node *node)
for (i = 0; i < num_clks; i++) {
clk = of_clk_get(node, i);
if (IS_ERR(clk)) {
- pr_err("%s: Failed get %s' clock nr %d (%ld)\n",
- __func__, node->full_name, i, PTR_ERR(clk));
+ pr_err("%s: Failed get %pOF' clock nr %d (%ld)\n",
+ __func__, node, i, PTR_ERR(clk));
continue;
}
clk_hw = __clk_get_hw(clk);
diff --git a/drivers/clk/ti/fapll.c b/drivers/clk/ti/fapll.c
index 66a0d0ed8b55..071af44b1ba8 100644
--- a/drivers/clk/ti/fapll.c
+++ b/drivers/clk/ti/fapll.c
@@ -268,7 +268,7 @@ static int ti_fapll_set_rate(struct clk_hw *hw, unsigned long rate,
return 0;
}
-static struct clk_ops ti_fapll_ops = {
+static const struct clk_ops ti_fapll_ops = {
.enable = ti_fapll_enable,
.disable = ti_fapll_disable,
.is_enabled = ti_fapll_is_enabled,
@@ -478,7 +478,7 @@ static int ti_fapll_synth_set_rate(struct clk_hw *hw, unsigned long rate,
return 0;
}
-static struct clk_ops ti_fapll_synt_ops = {
+static const struct clk_ops ti_fapll_synt_ops = {
.enable = ti_fapll_synth_enable,
.disable = ti_fapll_synth_disable,
.is_enabled = ti_fapll_synth_is_enabled,
diff --git a/drivers/clk/uniphier/clk-uniphier-core.c b/drivers/clk/uniphier/clk-uniphier-core.c
index 2cf386347f0c..e09f3dd46318 100644
--- a/drivers/clk/uniphier/clk-uniphier-core.c
+++ b/drivers/clk/uniphier/clk-uniphier-core.c
@@ -111,10 +111,6 @@ static int uniphier_clk_remove(struct platform_device *pdev)
static const struct of_device_id uniphier_clk_match[] = {
/* System clock */
{
- .compatible = "socionext,uniphier-sld3-clock",
- .data = uniphier_sld3_sys_clk_data,
- },
- {
.compatible = "socionext,uniphier-ld4-clock",
.data = uniphier_ld4_sys_clk_data,
},
@@ -142,22 +138,22 @@ static const struct of_device_id uniphier_clk_match[] = {
.compatible = "socionext,uniphier-ld20-clock",
.data = uniphier_ld20_sys_clk_data,
},
- /* Media I/O clock, SD clock */
{
- .compatible = "socionext,uniphier-sld3-mio-clock",
- .data = uniphier_sld3_mio_clk_data,
+ .compatible = "socionext,uniphier-pxs3-clock",
+ .data = uniphier_pxs3_sys_clk_data,
},
+ /* Media I/O clock, SD clock */
{
.compatible = "socionext,uniphier-ld4-mio-clock",
- .data = uniphier_sld3_mio_clk_data,
+ .data = uniphier_ld4_mio_clk_data,
},
{
.compatible = "socionext,uniphier-pro4-mio-clock",
- .data = uniphier_sld3_mio_clk_data,
+ .data = uniphier_ld4_mio_clk_data,
},
{
.compatible = "socionext,uniphier-sld8-mio-clock",
- .data = uniphier_sld3_mio_clk_data,
+ .data = uniphier_ld4_mio_clk_data,
},
{
.compatible = "socionext,uniphier-pro5-sd-clock",
@@ -169,12 +165,16 @@ static const struct of_device_id uniphier_clk_match[] = {
},
{
.compatible = "socionext,uniphier-ld11-mio-clock",
- .data = uniphier_sld3_mio_clk_data,
+ .data = uniphier_ld4_mio_clk_data,
},
{
.compatible = "socionext,uniphier-ld20-sd-clock",
.data = uniphier_pro5_sd_clk_data,
},
+ {
+ .compatible = "socionext,uniphier-pxs3-sd-clock",
+ .data = uniphier_pro5_sd_clk_data,
+ },
/* Peripheral clock */
{
.compatible = "socionext,uniphier-ld4-peri-clock",
@@ -204,6 +204,10 @@ static const struct of_device_id uniphier_clk_match[] = {
.compatible = "socionext,uniphier-ld20-peri-clock",
.data = uniphier_pro4_peri_clk_data,
},
+ {
+ .compatible = "socionext,uniphier-pxs3-peri-clock",
+ .data = uniphier_pro4_peri_clk_data,
+ },
{ /* sentinel */ }
};
diff --git a/drivers/clk/uniphier/clk-uniphier-mio.c b/drivers/clk/uniphier/clk-uniphier-mio.c
index 218d20f099ce..16e4d303f535 100644
--- a/drivers/clk/uniphier/clk-uniphier-mio.c
+++ b/drivers/clk/uniphier/clk-uniphier-mio.c
@@ -76,7 +76,7 @@
#define UNIPHIER_MIO_CLK_DMAC(idx) \
UNIPHIER_CLK_GATE("miodmac", (idx), "stdmac", 0x20, 25)
-const struct uniphier_clk_data uniphier_sld3_mio_clk_data[] = {
+const struct uniphier_clk_data uniphier_ld4_mio_clk_data[] = {
UNIPHIER_MIO_CLK_SD_FIXED,
UNIPHIER_MIO_CLK_SD(0, 0),
UNIPHIER_MIO_CLK_SD(1, 1),
@@ -85,11 +85,9 @@ const struct uniphier_clk_data uniphier_sld3_mio_clk_data[] = {
UNIPHIER_MIO_CLK_USB2(8, 0),
UNIPHIER_MIO_CLK_USB2(9, 1),
UNIPHIER_MIO_CLK_USB2(10, 2),
- UNIPHIER_MIO_CLK_USB2(11, 3),
UNIPHIER_MIO_CLK_USB2_PHY(12, 0),
UNIPHIER_MIO_CLK_USB2_PHY(13, 1),
UNIPHIER_MIO_CLK_USB2_PHY(14, 2),
- UNIPHIER_MIO_CLK_USB2_PHY(15, 3),
{ /* sentinel */ }
};
diff --git a/drivers/clk/uniphier/clk-uniphier-sys.c b/drivers/clk/uniphier/clk-uniphier-sys.c
index ad0218182a9f..0e396f3da526 100644
--- a/drivers/clk/uniphier/clk-uniphier-sys.c
+++ b/drivers/clk/uniphier/clk-uniphier-sys.c
@@ -17,7 +17,7 @@
#include "clk-uniphier.h"
-#define UNIPHIER_SLD3_SYS_CLK_SD \
+#define UNIPHIER_LD4_SYS_CLK_SD \
UNIPHIER_CLK_FACTOR("sd-200m", -1, "spll", 1, 8), \
UNIPHIER_CLK_FACTOR("sd-133m", -1, "vpll27a", 1, 2)
@@ -30,7 +30,7 @@
UNIPHIER_CLK_FACTOR("sd-133m", -1, "spll", 1, 15)
/* Denali driver requires clk_x rate (clk: 50MHz, clk_x & ecc_clk: 200MHz) */
-#define UNIPHIER_SLD3_SYS_CLK_NAND(idx) \
+#define UNIPHIER_LD4_SYS_CLK_NAND(idx) \
UNIPHIER_CLK_FACTOR("nand-200m", -1, "spll", 1, 8), \
UNIPHIER_CLK_GATE("nand", (idx), "nand-200m", 0x2104, 2)
@@ -45,7 +45,7 @@
#define UNIPHIER_LD11_SYS_CLK_EMMC(idx) \
UNIPHIER_CLK_GATE("emmc", (idx), NULL, 0x210c, 2)
-#define UNIPHIER_SLD3_SYS_CLK_STDMAC(idx) \
+#define UNIPHIER_LD4_SYS_CLK_STDMAC(idx) \
UNIPHIER_CLK_GATE("stdmac", (idx), NULL, 0x2104, 10)
#define UNIPHIER_LD11_SYS_CLK_STDMAC(idx) \
@@ -57,19 +57,23 @@
#define UNIPHIER_PRO4_SYS_CLK_USB3(idx, ch) \
UNIPHIER_CLK_GATE("usb3" #ch, (idx), NULL, 0x2104, 16 + (ch))
-const struct uniphier_clk_data uniphier_sld3_sys_clk_data[] = {
- UNIPHIER_CLK_FACTOR("spll", -1, "ref", 65, 1), /* 1597.44 MHz */
- UNIPHIER_CLK_FACTOR("upll", -1, "ref", 6000, 512), /* 288 MHz */
- UNIPHIER_CLK_FACTOR("a2pll", -1, "ref", 24, 1), /* 589.824 MHz */
- UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 5625, 512), /* 270 MHz */
- UNIPHIER_CLK_FACTOR("uart", 0, "a2pll", 1, 16),
- UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 16),
- UNIPHIER_SLD3_SYS_CLK_NAND(2),
- UNIPHIER_SLD3_SYS_CLK_SD,
- UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12),
- UNIPHIER_SLD3_SYS_CLK_STDMAC(8),
- { /* sentinel */ }
-};
+#define UNIPHIER_LD11_SYS_CLK_AIO(idx) \
+ UNIPHIER_CLK_FACTOR("aio-io200m", -1, "spll", 1, 10), \
+ UNIPHIER_CLK_GATE("aio", (idx), "aio-io200m", 0x2108, 0)
+
+#define UNIPHIER_LD11_SYS_CLK_EVEA(idx) \
+ UNIPHIER_CLK_FACTOR("evea-io100m", -1, "spll", 1, 20), \
+ UNIPHIER_CLK_GATE("evea", (idx), "evea-io100m", 0x2108, 1)
+
+#define UNIPHIER_LD11_SYS_CLK_EXIV(idx) \
+ UNIPHIER_CLK_FACTOR("exiv-io200m", -1, "spll", 1, 10), \
+ UNIPHIER_CLK_GATE("exiv", (idx), "exiv-io200m", 0x2110, 2)
+
+#define UNIPHIER_PRO4_SYS_CLK_ETHER(idx) \
+ UNIPHIER_CLK_GATE("ether", (idx), NULL, 0x2104, 12)
+
+#define UNIPHIER_LD11_SYS_CLK_ETHER(idx) \
+ UNIPHIER_CLK_GATE("ether", (idx), NULL, 0x210c, 6)
const struct uniphier_clk_data uniphier_ld4_sys_clk_data[] = {
UNIPHIER_CLK_FACTOR("spll", -1, "ref", 65, 1), /* 1597.44 MHz */
@@ -78,10 +82,10 @@ const struct uniphier_clk_data uniphier_ld4_sys_clk_data[] = {
UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 5625, 512), /* 270 MHz */
UNIPHIER_CLK_FACTOR("uart", 0, "a2pll", 1, 16),
UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 16),
- UNIPHIER_SLD3_SYS_CLK_NAND(2),
- UNIPHIER_SLD3_SYS_CLK_SD,
+ UNIPHIER_LD4_SYS_CLK_NAND(2),
+ UNIPHIER_LD4_SYS_CLK_SD,
UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12),
- UNIPHIER_SLD3_SYS_CLK_STDMAC(8), /* Ether, HSC, MIO */
+ UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* Ether, HSC, MIO */
{ /* sentinel */ }
};
@@ -92,10 +96,11 @@ const struct uniphier_clk_data uniphier_pro4_sys_clk_data[] = {
UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 270, 25), /* 270 MHz */
UNIPHIER_CLK_FACTOR("uart", 0, "a2pll", 1, 8),
UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 32),
- UNIPHIER_SLD3_SYS_CLK_NAND(2),
- UNIPHIER_SLD3_SYS_CLK_SD,
+ UNIPHIER_LD4_SYS_CLK_NAND(2),
+ UNIPHIER_LD4_SYS_CLK_SD,
UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12),
- UNIPHIER_SLD3_SYS_CLK_STDMAC(8), /* HSC, MIO, RLE */
+ UNIPHIER_PRO4_SYS_CLK_ETHER(6),
+ UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* HSC, MIO, RLE */
UNIPHIER_PRO4_SYS_CLK_GIO(12), /* Ether, SATA, USB3 */
UNIPHIER_PRO4_SYS_CLK_USB3(14, 0),
UNIPHIER_PRO4_SYS_CLK_USB3(15, 1),
@@ -108,10 +113,10 @@ const struct uniphier_clk_data uniphier_sld8_sys_clk_data[] = {
UNIPHIER_CLK_FACTOR("vpll27a", -1, "ref", 270, 25), /* 270 MHz */
UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 20),
UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 16),
- UNIPHIER_SLD3_SYS_CLK_NAND(2),
- UNIPHIER_SLD3_SYS_CLK_SD,
+ UNIPHIER_LD4_SYS_CLK_NAND(2),
+ UNIPHIER_LD4_SYS_CLK_SD,
UNIPHIER_CLK_FACTOR("usb2", -1, "upll", 1, 12),
- UNIPHIER_SLD3_SYS_CLK_STDMAC(8), /* Ether, HSC, MIO */
+ UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* Ether, HSC, MIO */
{ /* sentinel */ }
};
@@ -123,7 +128,7 @@ const struct uniphier_clk_data uniphier_pro5_sys_clk_data[] = {
UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 48),
UNIPHIER_PRO5_SYS_CLK_NAND(2),
UNIPHIER_PRO5_SYS_CLK_SD,
- UNIPHIER_SLD3_SYS_CLK_STDMAC(8), /* HSC */
+ UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* HSC */
UNIPHIER_PRO4_SYS_CLK_GIO(12), /* PCIe, USB3 */
UNIPHIER_PRO4_SYS_CLK_USB3(14, 0),
UNIPHIER_PRO4_SYS_CLK_USB3(15, 1),
@@ -136,7 +141,8 @@ const struct uniphier_clk_data uniphier_pxs2_sys_clk_data[] = {
UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 48),
UNIPHIER_PRO5_SYS_CLK_NAND(2),
UNIPHIER_PRO5_SYS_CLK_SD,
- UNIPHIER_SLD3_SYS_CLK_STDMAC(8), /* HSC, RLE */
+ UNIPHIER_PRO4_SYS_CLK_ETHER(6),
+ UNIPHIER_LD4_SYS_CLK_STDMAC(8), /* HSC, RLE */
/* GIO is always clock-enabled: no function for 0x2104 bit6 */
UNIPHIER_PRO4_SYS_CLK_USB3(14, 0),
UNIPHIER_PRO4_SYS_CLK_USB3(15, 1),
@@ -156,8 +162,12 @@ const struct uniphier_clk_data uniphier_ld11_sys_clk_data[] = {
UNIPHIER_LD11_SYS_CLK_NAND(2),
UNIPHIER_LD11_SYS_CLK_EMMC(4),
/* Index 5 reserved for eMMC PHY */
+ UNIPHIER_LD11_SYS_CLK_ETHER(6),
UNIPHIER_LD11_SYS_CLK_STDMAC(8), /* HSC, MIO */
UNIPHIER_CLK_FACTOR("usb2", -1, "ref", 24, 25),
+ UNIPHIER_LD11_SYS_CLK_AIO(40),
+ UNIPHIER_LD11_SYS_CLK_EVEA(41),
+ UNIPHIER_LD11_SYS_CLK_EXIV(42),
/* CPU gears */
UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8),
UNIPHIER_CLK_DIV4("mpll", 2, 3, 4, 8),
@@ -185,6 +195,7 @@ const struct uniphier_clk_data uniphier_ld20_sys_clk_data[] = {
UNIPHIER_LD11_SYS_CLK_EMMC(4),
/* Index 5 reserved for eMMC PHY */
UNIPHIER_LD20_SYS_CLK_SD,
+ UNIPHIER_LD11_SYS_CLK_ETHER(6),
UNIPHIER_LD11_SYS_CLK_STDMAC(8), /* HSC */
/* GIO is always clock-enabled: no function for 0x210c bit5 */
/*
@@ -194,6 +205,9 @@ const struct uniphier_clk_data uniphier_ld20_sys_clk_data[] = {
UNIPHIER_CLK_GATE("usb30", 14, NULL, 0x210c, 14),
UNIPHIER_CLK_GATE("usb30-phy0", 16, NULL, 0x210c, 12),
UNIPHIER_CLK_GATE("usb30-phy1", 17, NULL, 0x210c, 13),
+ UNIPHIER_LD11_SYS_CLK_AIO(40),
+ UNIPHIER_LD11_SYS_CLK_EVEA(41),
+ UNIPHIER_LD11_SYS_CLK_EXIV(42),
/* CPU gears */
UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8),
UNIPHIER_CLK_DIV4("spll", 2, 3, 4, 8),
@@ -209,3 +223,33 @@ const struct uniphier_clk_data uniphier_ld20_sys_clk_data[] = {
"spll/4", "spll/8", "s2pll/4", "s2pll/8"),
{ /* sentinel */ }
};
+
+const struct uniphier_clk_data uniphier_pxs3_sys_clk_data[] = {
+ UNIPHIER_CLK_FACTOR("cpll", -1, "ref", 104, 1), /* ARM: 2600 MHz */
+ UNIPHIER_CLK_FACTOR("spll", -1, "ref", 80, 1), /* 2000 MHz */
+ UNIPHIER_CLK_FACTOR("s2pll", -1, "ref", 88, 1), /* IPP: 2400 MHz */
+ UNIPHIER_CLK_FACTOR("uart", 0, "spll", 1, 34),
+ UNIPHIER_CLK_FACTOR("i2c", 1, "spll", 1, 40),
+ UNIPHIER_LD20_SYS_CLK_SD,
+ UNIPHIER_LD11_SYS_CLK_NAND(2),
+ UNIPHIER_LD11_SYS_CLK_EMMC(4),
+ UNIPHIER_CLK_GATE("usb30", 12, NULL, 0x2104, 4), /* =GIO0 */
+ UNIPHIER_CLK_GATE("usb31-0", 13, NULL, 0x2104, 5), /* =GIO1 */
+ UNIPHIER_CLK_GATE("usb31-1", 14, NULL, 0x2104, 6), /* =GIO1-1 */
+ UNIPHIER_CLK_GATE("usb30-phy0", 16, NULL, 0x210c, 16),
+ UNIPHIER_CLK_GATE("usb30-phy1", 17, NULL, 0x210c, 18),
+ UNIPHIER_CLK_GATE("usb30-phy2", 18, NULL, 0x210c, 20),
+ UNIPHIER_CLK_GATE("usb31-phy0", 20, NULL, 0x210c, 17),
+ UNIPHIER_CLK_GATE("usb31-phy1", 21, NULL, 0x210c, 19),
+ /* CPU gears */
+ UNIPHIER_CLK_DIV4("cpll", 2, 3, 4, 8),
+ UNIPHIER_CLK_DIV4("spll", 2, 3, 4, 8),
+ UNIPHIER_CLK_DIV4("s2pll", 2, 3, 4, 8),
+ UNIPHIER_CLK_CPUGEAR("cpu-ca53", 33, 0x8080, 0xf, 8,
+ "cpll/2", "spll/2", "cpll/3", "spll/3",
+ "spll/4", "spll/8", "cpll/4", "cpll/8"),
+ UNIPHIER_CLK_CPUGEAR("cpu-ipp", 34, 0x8100, 0xf, 8,
+ "s2pll/2", "spll/2", "s2pll/3", "spll/3",
+ "spll/4", "spll/8", "s2pll/4", "s2pll/8"),
+ { /* sentinel */ }
+};
diff --git a/drivers/clk/uniphier/clk-uniphier.h b/drivers/clk/uniphier/clk-uniphier.h
index 01c16ecec48f..d10a009ada96 100644
--- a/drivers/clk/uniphier/clk-uniphier.h
+++ b/drivers/clk/uniphier/clk-uniphier.h
@@ -147,7 +147,6 @@ struct clk_hw *uniphier_clk_register_mux(struct device *dev,
const char *name,
const struct uniphier_clk_mux_data *data);
-extern const struct uniphier_clk_data uniphier_sld3_sys_clk_data[];
extern const struct uniphier_clk_data uniphier_ld4_sys_clk_data[];
extern const struct uniphier_clk_data uniphier_pro4_sys_clk_data[];
extern const struct uniphier_clk_data uniphier_sld8_sys_clk_data[];
@@ -155,7 +154,8 @@ extern const struct uniphier_clk_data uniphier_pro5_sys_clk_data[];
extern const struct uniphier_clk_data uniphier_pxs2_sys_clk_data[];
extern const struct uniphier_clk_data uniphier_ld11_sys_clk_data[];
extern const struct uniphier_clk_data uniphier_ld20_sys_clk_data[];
-extern const struct uniphier_clk_data uniphier_sld3_mio_clk_data[];
+extern const struct uniphier_clk_data uniphier_pxs3_sys_clk_data[];
+extern const struct uniphier_clk_data uniphier_ld4_mio_clk_data[];
extern const struct uniphier_clk_data uniphier_pro5_sd_clk_data[];
extern const struct uniphier_clk_data uniphier_ld4_peri_clk_data[];
extern const struct uniphier_clk_data uniphier_pro4_peri_clk_data[];
diff --git a/drivers/clk/ux500/clk-prcc.c b/drivers/clk/ux500/clk-prcc.c
index 0e950769ed03..f50592775c9d 100644
--- a/drivers/clk/ux500/clk-prcc.c
+++ b/drivers/clk/ux500/clk-prcc.c
@@ -79,13 +79,13 @@ static int clk_prcc_is_enabled(struct clk_hw *hw)
return clk->is_enabled;
}
-static struct clk_ops clk_prcc_pclk_ops = {
+static const struct clk_ops clk_prcc_pclk_ops = {
.enable = clk_prcc_pclk_enable,
.disable = clk_prcc_pclk_disable,
.is_enabled = clk_prcc_is_enabled,
};
-static struct clk_ops clk_prcc_kclk_ops = {
+static const struct clk_ops clk_prcc_kclk_ops = {
.enable = clk_prcc_kclk_enable,
.disable = clk_prcc_kclk_disable,
.is_enabled = clk_prcc_is_enabled,
@@ -96,7 +96,7 @@ static struct clk *clk_reg_prcc(const char *name,
resource_size_t phy_base,
u32 cg_sel,
unsigned long flags,
- struct clk_ops *clk_prcc_ops)
+ const struct clk_ops *clk_prcc_ops)
{
struct clk_prcc *clk;
struct clk_init_data clk_prcc_init;
diff --git a/drivers/clk/ux500/clk-prcmu.c b/drivers/clk/ux500/clk-prcmu.c
index 7f343821f4e4..6e3e16b2e5ca 100644
--- a/drivers/clk/ux500/clk-prcmu.c
+++ b/drivers/clk/ux500/clk-prcmu.c
@@ -186,7 +186,7 @@ static void clk_prcmu_opp_volt_unprepare(struct clk_hw *hw)
clk->is_prepared = 0;
}
-static struct clk_ops clk_prcmu_scalable_ops = {
+static const struct clk_ops clk_prcmu_scalable_ops = {
.prepare = clk_prcmu_prepare,
.unprepare = clk_prcmu_unprepare,
.is_prepared = clk_prcmu_is_prepared,
@@ -198,7 +198,7 @@ static struct clk_ops clk_prcmu_scalable_ops = {
.set_rate = clk_prcmu_set_rate,
};
-static struct clk_ops clk_prcmu_gate_ops = {
+static const struct clk_ops clk_prcmu_gate_ops = {
.prepare = clk_prcmu_prepare,
.unprepare = clk_prcmu_unprepare,
.is_prepared = clk_prcmu_is_prepared,
@@ -208,19 +208,19 @@ static struct clk_ops clk_prcmu_gate_ops = {
.recalc_rate = clk_prcmu_recalc_rate,
};
-static struct clk_ops clk_prcmu_scalable_rate_ops = {
+static const struct clk_ops clk_prcmu_scalable_rate_ops = {
.is_enabled = clk_prcmu_is_enabled,
.recalc_rate = clk_prcmu_recalc_rate,
.round_rate = clk_prcmu_round_rate,
.set_rate = clk_prcmu_set_rate,
};
-static struct clk_ops clk_prcmu_rate_ops = {
+static const struct clk_ops clk_prcmu_rate_ops = {
.is_enabled = clk_prcmu_is_enabled,
.recalc_rate = clk_prcmu_recalc_rate,
};
-static struct clk_ops clk_prcmu_opp_gate_ops = {
+static const struct clk_ops clk_prcmu_opp_gate_ops = {
.prepare = clk_prcmu_opp_prepare,
.unprepare = clk_prcmu_opp_unprepare,
.is_prepared = clk_prcmu_is_prepared,
@@ -230,7 +230,7 @@ static struct clk_ops clk_prcmu_opp_gate_ops = {
.recalc_rate = clk_prcmu_recalc_rate,
};
-static struct clk_ops clk_prcmu_opp_volt_scalable_ops = {
+static const struct clk_ops clk_prcmu_opp_volt_scalable_ops = {
.prepare = clk_prcmu_opp_volt_prepare,
.unprepare = clk_prcmu_opp_volt_unprepare,
.is_prepared = clk_prcmu_is_prepared,
@@ -247,7 +247,7 @@ static struct clk *clk_reg_prcmu(const char *name,
u8 cg_sel,
unsigned long rate,
unsigned long flags,
- struct clk_ops *clk_prcmu_ops)
+ const struct clk_ops *clk_prcmu_ops)
{
struct clk_prcmu *clk;
struct clk_init_data clk_prcmu_init;
diff --git a/drivers/clk/ux500/clk-sysctrl.c b/drivers/clk/ux500/clk-sysctrl.c
index 266ddea630d2..8a4e93ce1e42 100644
--- a/drivers/clk/ux500/clk-sysctrl.c
+++ b/drivers/clk/ux500/clk-sysctrl.c
@@ -98,18 +98,18 @@ static u8 clk_sysctrl_get_parent(struct clk_hw *hw)
return clk->parent_index;
}
-static struct clk_ops clk_sysctrl_gate_ops = {
+static const struct clk_ops clk_sysctrl_gate_ops = {
.prepare = clk_sysctrl_prepare,
.unprepare = clk_sysctrl_unprepare,
};
-static struct clk_ops clk_sysctrl_gate_fixed_rate_ops = {
+static const struct clk_ops clk_sysctrl_gate_fixed_rate_ops = {
.prepare = clk_sysctrl_prepare,
.unprepare = clk_sysctrl_unprepare,
.recalc_rate = clk_sysctrl_recalc_rate,
};
-static struct clk_ops clk_sysctrl_set_parent_ops = {
+static const struct clk_ops clk_sysctrl_set_parent_ops = {
.set_parent = clk_sysctrl_set_parent,
.get_parent = clk_sysctrl_get_parent,
};
@@ -124,7 +124,7 @@ static struct clk *clk_reg_sysctrl(struct device *dev,
unsigned long rate,
unsigned long enable_delay_us,
unsigned long flags,
- struct clk_ops *clk_sysctrl_ops)
+ const struct clk_ops *clk_sysctrl_ops)
{
struct clk_sysctrl *clk;
struct clk_init_data clk_sysctrl_init;
diff --git a/drivers/clk/versatile/clk-vexpress-osc.c b/drivers/clk/versatile/clk-vexpress-osc.c
index 7e5add7d7752..e7a868b83fe5 100644
--- a/drivers/clk/versatile/clk-vexpress-osc.c
+++ b/drivers/clk/versatile/clk-vexpress-osc.c
@@ -61,7 +61,7 @@ static int vexpress_osc_set_rate(struct clk_hw *hw, unsigned long rate,
return regmap_write(osc->reg, 0, rate);
}
-static struct clk_ops vexpress_osc_ops = {
+static const struct clk_ops vexpress_osc_ops = {
.recalc_rate = vexpress_osc_recalc_rate,
.round_rate = vexpress_osc_round_rate,
.set_rate = vexpress_osc_set_rate,
diff --git a/drivers/clk/zte/clk-zx296718.c b/drivers/clk/zte/clk-zx296718.c
index 27f853d4c76b..354dd508c516 100644
--- a/drivers/clk/zte/clk-zx296718.c
+++ b/drivers/clk/zte/clk-zx296718.c
@@ -451,7 +451,7 @@ static struct zx_clk_fixed_factor top_ffactor_clk[] = {
FFACTOR(0, "emmc_mux_div2", "emmc_mux", 1, 2, CLK_SET_RATE_PARENT),
};
-static struct clk_div_table noc_div_table[] = {
+static const struct clk_div_table noc_div_table[] = {
{ .val = 1, .div = 2, },
{ .val = 3, .div = 4, },
};
@@ -644,7 +644,7 @@ static int __init top_clocks_init(struct device_node *np)
return 0;
}
-static struct clk_div_table common_even_div_table[] = {
+static const struct clk_div_table common_even_div_table[] = {
{ .val = 0, .div = 1, },
{ .val = 1, .div = 2, },
{ .val = 3, .div = 4, },
@@ -656,7 +656,7 @@ static struct clk_div_table common_even_div_table[] = {
{ .val = 15, .div = 16, },
};
-static struct clk_div_table common_div_table[] = {
+static const struct clk_div_table common_div_table[] = {
{ .val = 0, .div = 1, },
{ .val = 1, .div = 2, },
{ .val = 2, .div = 3, },
diff --git a/drivers/clocksource/mips-gic-timer.c b/drivers/clocksource/mips-gic-timer.c
index 17b861ea2626..ae3167c28b12 100644
--- a/drivers/clocksource/mips-gic-timer.c
+++ b/drivers/clocksource/mips-gic-timer.c
@@ -10,25 +10,45 @@
#include <linux/cpu.h>
#include <linux/init.h>
#include <linux/interrupt.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/notifier.h>
#include <linux/of_irq.h>
#include <linux/percpu.h>
#include <linux/smp.h>
#include <linux/time.h>
+#include <asm/mips-cps.h>
static DEFINE_PER_CPU(struct clock_event_device, gic_clockevent_device);
static int gic_timer_irq;
static unsigned int gic_frequency;
+static u64 notrace gic_read_count(void)
+{
+ unsigned int hi, hi2, lo;
+
+ if (mips_cm_is64)
+ return read_gic_counter();
+
+ do {
+ hi = read_gic_counter_32h();
+ lo = read_gic_counter_32l();
+ hi2 = read_gic_counter_32h();
+ } while (hi2 != hi);
+
+ return (((u64) hi) << 32) + lo;
+}
+
static int gic_next_event(unsigned long delta, struct clock_event_device *evt)
{
+ unsigned long flags;
u64 cnt;
int res;
cnt = gic_read_count();
cnt += (u64)delta;
- gic_write_cpu_compare(cnt, cpumask_first(evt->cpumask));
+ local_irq_save(flags);
+ write_gic_vl_other(mips_cm_vp_id(cpumask_first(evt->cpumask)));
+ write_gic_vo_compare(cnt);
+ local_irq_restore(flags);
res = ((int)(gic_read_count() - cnt) >= 0) ? -ETIME : 0;
return res;
}
@@ -37,7 +57,7 @@ static irqreturn_t gic_compare_interrupt(int irq, void *dev_id)
{
struct clock_event_device *cd = dev_id;
- gic_write_compare(gic_read_compare());
+ write_gic_vl_compare(read_gic_vl_compare());
cd->event_handler(cd);
return IRQ_HANDLED;
}
@@ -139,10 +159,15 @@ static struct clocksource gic_clocksource = {
static int __init __gic_clocksource_init(void)
{
+ unsigned int count_width;
int ret;
/* Set clocksource mask. */
- gic_clocksource.mask = CLOCKSOURCE_MASK(gic_get_count_width());
+ count_width = read_gic_config() & GIC_CONFIG_COUNTBITS;
+ count_width >>= __fls(GIC_CONFIG_COUNTBITS);
+ count_width *= 4;
+ count_width += 32;
+ gic_clocksource.mask = CLOCKSOURCE_MASK(count_width);
/* Calculate a somewhat reasonable rating value. */
gic_clocksource.rating = 200 + gic_frequency / 10000000;
@@ -159,7 +184,7 @@ static int __init gic_clocksource_of_init(struct device_node *node)
struct clk *clk;
int ret;
- if (!gic_present || !node->parent ||
+ if (!mips_gic_present() || !node->parent ||
!of_device_is_compatible(node->parent, "mti,gic")) {
pr_warn("No DT definition for the mips gic driver\n");
return -ENXIO;
@@ -197,7 +222,7 @@ static int __init gic_clocksource_of_init(struct device_node *node)
}
/* And finally start the counter */
- gic_start_count();
+ clear_gic_config(GIC_CONFIG_COUNTSTOP);
return 0;
}
diff --git a/drivers/cpufreq/powernow-k7.c b/drivers/cpufreq/powernow-k7.c
index 9f013ed42977..80ac313e6c59 100644
--- a/drivers/cpufreq/powernow-k7.c
+++ b/drivers/cpufreq/powernow-k7.c
@@ -578,7 +578,7 @@ static int acer_cpufreq_pst(const struct dmi_system_id *d)
* A BIOS update is all that can save them.
* Mention this, and disable cpufreq.
*/
-static struct dmi_system_id powernow_dmi_table[] = {
+static const struct dmi_system_id powernow_dmi_table[] = {
{
.callback = acer_cpufreq_pst,
.ident = "Acer Aspire",
diff --git a/drivers/cpuidle/cpuidle-cps.c b/drivers/cpuidle/cpuidle-cps.c
index 12b9145913de..72b5e47286b4 100644
--- a/drivers/cpuidle/cpuidle-cps.c
+++ b/drivers/cpuidle/cpuidle-cps.c
@@ -37,7 +37,7 @@ static int cps_nc_enter(struct cpuidle_device *dev,
* TODO: don't treat core 0 specially, just prevent the final core
* TODO: remap interrupt affinity temporarily
*/
- if (!cpu_data[dev->cpu].core && (index > STATE_NC_WAIT))
+ if (cpus_are_siblings(0, dev->cpu) && (index > STATE_NC_WAIT))
index = STATE_NC_WAIT;
/* Select the appropriate cps_pm_state */
diff --git a/drivers/dax/super.c b/drivers/dax/super.c
index 3600ff786646..557b93703532 100644
--- a/drivers/dax/super.c
+++ b/drivers/dax/super.c
@@ -201,8 +201,10 @@ static umode_t dax_visible(struct kobject *kobj, struct attribute *a, int n)
if (!dax_dev)
return 0;
- if (a == &dev_attr_write_cache.attr && !dax_dev->ops->flush)
+#ifndef CONFIG_ARCH_HAS_PMEM_API
+ if (a == &dev_attr_write_cache.attr)
return 0;
+#endif
return a->mode;
}
@@ -267,18 +269,23 @@ size_t dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
}
EXPORT_SYMBOL_GPL(dax_copy_from_iter);
-void dax_flush(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
- size_t size)
+#ifdef CONFIG_ARCH_HAS_PMEM_API
+void arch_wb_cache_pmem(void *addr, size_t size);
+void dax_flush(struct dax_device *dax_dev, void *addr, size_t size)
{
- if (!dax_alive(dax_dev))
+ if (unlikely(!dax_alive(dax_dev)))
return;
- if (!test_bit(DAXDEV_WRITE_CACHE, &dax_dev->flags))
+ if (unlikely(!test_bit(DAXDEV_WRITE_CACHE, &dax_dev->flags)))
return;
- if (dax_dev->ops->flush)
- dax_dev->ops->flush(dax_dev, pgoff, addr, size);
+ arch_wb_cache_pmem(addr, size);
}
+#else
+void dax_flush(struct dax_device *dax_dev, void *addr, size_t size)
+{
+}
+#endif
EXPORT_SYMBOL_GPL(dax_flush);
void dax_write_cache(struct dax_device *dax_dev, bool wc)
diff --git a/drivers/firmware/google/gsmi.c b/drivers/firmware/google/gsmi.c
index c46387160976..c8f169bf2e27 100644
--- a/drivers/firmware/google/gsmi.c
+++ b/drivers/firmware/google/gsmi.c
@@ -709,7 +709,7 @@ static u32 __init hash_oem_table_id(char s[8])
return local_hash_64(input, 32);
}
-static struct dmi_system_id gsmi_dmi_table[] __initdata = {
+static const struct dmi_system_id gsmi_dmi_table[] __initconst = {
{
.ident = "Google Board",
.matches = {
diff --git a/drivers/firmware/google/memconsole-x86-legacy.c b/drivers/firmware/google/memconsole-x86-legacy.c
index 8c1bf6dbdaa6..19bcbd10855b 100644
--- a/drivers/firmware/google/memconsole-x86-legacy.c
+++ b/drivers/firmware/google/memconsole-x86-legacy.c
@@ -126,7 +126,7 @@ static bool memconsole_ebda_init(void)
return false;
}
-static struct dmi_system_id memconsole_dmi_table[] __initdata = {
+static const struct dmi_system_id memconsole_dmi_table[] __initconst = {
{
.ident = "Google Board",
.matches = {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index 12e71bbfd222..103635ab784c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -76,7 +76,7 @@
extern int amdgpu_modeset;
extern int amdgpu_vram_limit;
extern int amdgpu_vis_vram_limit;
-extern unsigned amdgpu_gart_size;
+extern int amdgpu_gart_size;
extern int amdgpu_gtt_size;
extern int amdgpu_moverate;
extern int amdgpu_benchmarking;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
index fb6e5dbd5a03..309f2419c6d8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c
@@ -155,7 +155,6 @@ static const struct kfd2kgd_calls kfd2kgd = {
struct kfd2kgd_calls *amdgpu_amdkfd_gfx_8_0_get_functions(void)
{
return (struct kfd2kgd_calls *)&kfd2kgd;
- return (struct kfd2kgd_calls *)&kfd2kgd;
}
static inline struct amdgpu_device *get_amdgpu_device(struct kgd_dev *kgd)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 269b835571eb..60d8bedb694d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -1079,6 +1079,9 @@ static int amdgpu_cs_process_syncobj_out_dep(struct amdgpu_cs_parser *p,
GFP_KERNEL);
p->num_post_dep_syncobjs = 0;
+ if (!p->post_dep_syncobjs)
+ return -ENOMEM;
+
for (i = 0; i < num_deps; ++i) {
p->post_dep_syncobjs[i] = drm_syncobj_find(p->filp, deps[i].handle);
if (!p->post_dep_syncobjs[i])
@@ -1150,7 +1153,6 @@ static int amdgpu_cs_submit(struct amdgpu_cs_parser *p,
cs->out.handle = amdgpu_ctx_add_fence(p->ctx, ring, p->fence);
job->uf_sequence = cs->out.handle;
amdgpu_job_free_resources(job);
- amdgpu_cs_parser_fini(p, 0, true);
trace_amdgpu_cs_ioctl(job);
amd_sched_entity_push_job(&job->base);
@@ -1208,10 +1210,7 @@ int amdgpu_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
goto out;
r = amdgpu_cs_submit(&parser, cs);
- if (r)
- goto out;
- return 0;
out:
amdgpu_cs_parser_fini(&parser, r, reserved_buffers);
return r;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
index 1a459ac63df4..e630d918fefc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
@@ -1062,11 +1062,11 @@ static void amdgpu_check_arguments(struct amdgpu_device *adev)
amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs);
}
- if (amdgpu_gart_size < 32) {
+ if (amdgpu_gart_size != -1 && amdgpu_gart_size < 32) {
/* gart size must be greater or equal to 32M */
dev_warn(adev->dev, "gart size (%d) too small\n",
amdgpu_gart_size);
- amdgpu_gart_size = 32;
+ amdgpu_gart_size = -1;
}
if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) {
@@ -2622,12 +2622,6 @@ static int amdgpu_recover_vram_from_shadow(struct amdgpu_device *adev,
goto err;
}
- r = amdgpu_ttm_bind(&bo->shadow->tbo, &bo->shadow->tbo.mem);
- if (r) {
- DRM_ERROR("%p bind failed\n", bo->shadow);
- goto err;
- }
-
r = amdgpu_bo_restore_from_shadow(adev, ring, bo,
NULL, fence, true);
if (r) {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index e39ec981b11c..0f16986ec5bc 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -76,7 +76,7 @@
int amdgpu_vram_limit = 0;
int amdgpu_vis_vram_limit = 0;
-unsigned amdgpu_gart_size = 256;
+int amdgpu_gart_size = -1; /* auto */
int amdgpu_gtt_size = -1; /* auto */
int amdgpu_moverate = -1; /* auto */
int amdgpu_benchmarking = 0;
@@ -128,7 +128,7 @@ module_param_named(vramlimit, amdgpu_vram_limit, int, 0600);
MODULE_PARM_DESC(vis_vramlimit, "Restrict visible VRAM for testing, in megabytes");
module_param_named(vis_vramlimit, amdgpu_vis_vram_limit, int, 0444);
-MODULE_PARM_DESC(gartsize, "Size of PCIE/IGP gart to setup in megabytes (32, 64, etc.)");
+MODULE_PARM_DESC(gartsize, "Size of GART to setup in megabytes (32, 64, etc., -1=auto)");
module_param_named(gartsize, amdgpu_gart_size, uint, 0600);
MODULE_PARM_DESC(gttsize, "Size of the GTT domain in megabytes (-1 = auto)");
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
index 94c1e2e8e34c..f4370081f6e6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c
@@ -57,18 +57,6 @@
*/
/**
- * amdgpu_gart_set_defaults - set the default gart_size
- *
- * @adev: amdgpu_device pointer
- *
- * Set the default gart_size based on parameters and available VRAM.
- */
-void amdgpu_gart_set_defaults(struct amdgpu_device *adev)
-{
- adev->mc.gart_size = (uint64_t)amdgpu_gart_size << 20;
-}
-
-/**
* amdgpu_gart_table_ram_alloc - allocate system ram for gart page table
*
* @adev: amdgpu_device pointer
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h
index d4cce6936200..afbe803b1a13 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.h
@@ -56,7 +56,6 @@ struct amdgpu_gart {
const struct amdgpu_gart_funcs *gart_funcs;
};
-void amdgpu_gart_set_defaults(struct amdgpu_device *adev);
int amdgpu_gart_table_ram_alloc(struct amdgpu_device *adev);
void amdgpu_gart_table_ram_free(struct amdgpu_device *adev);
int amdgpu_gart_table_vram_alloc(struct amdgpu_device *adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
index 9e05e257729f..0d15eb7d31d7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
@@ -108,10 +108,10 @@ bool amdgpu_gtt_mgr_is_allocated(struct ttm_mem_reg *mem)
*
* Allocate the address space for a node.
*/
-int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
- struct ttm_buffer_object *tbo,
- const struct ttm_place *place,
- struct ttm_mem_reg *mem)
+static int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
+ struct ttm_buffer_object *tbo,
+ const struct ttm_place *place,
+ struct ttm_mem_reg *mem)
{
struct amdgpu_device *adev = amdgpu_ttm_adev(man->bdev);
struct amdgpu_gtt_mgr *mgr = man->priv;
@@ -143,12 +143,8 @@ int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
fpfn, lpfn, mode);
spin_unlock(&mgr->lock);
- if (!r) {
+ if (!r)
mem->start = node->start;
- if (&tbo->mem == mem)
- tbo->offset = (tbo->mem.start << PAGE_SHIFT) +
- tbo->bdev->man[tbo->mem.mem_type].gpu_offset;
- }
return r;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
index 4bdd851f56d0..538e5f27d120 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_irq.c
@@ -221,8 +221,9 @@ int amdgpu_irq_init(struct amdgpu_device *adev)
spin_lock_init(&adev->irq.lock);
- /* Disable vblank irqs aggressively for power-saving */
- adev->ddev->vblank_disable_immediate = true;
+ if (!adev->enable_virtual_display)
+ /* Disable vblank irqs aggressively for power-saving */
+ adev->ddev->vblank_disable_immediate = true;
r = drm_vblank_init(adev->ddev, adev->mode_info.num_crtc);
if (r) {
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index e7e899190bef..9e495da0bb03 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -91,7 +91,10 @@ static void amdgpu_ttm_placement_init(struct amdgpu_device *adev,
if (domain & AMDGPU_GEM_DOMAIN_GTT) {
places[c].fpfn = 0;
- places[c].lpfn = 0;
+ if (flags & AMDGPU_GEM_CREATE_SHADOW)
+ places[c].lpfn = adev->mc.gart_size >> PAGE_SHIFT;
+ else
+ places[c].lpfn = 0;
places[c].flags = TTM_PL_FLAG_TT;
if (flags & AMDGPU_GEM_CREATE_CPU_GTT_USWC)
places[c].flags |= TTM_PL_FLAG_WC |
@@ -446,17 +449,16 @@ static int amdgpu_bo_create_shadow(struct amdgpu_device *adev,
if (bo->shadow)
return 0;
- bo->flags |= AMDGPU_GEM_CREATE_SHADOW;
- memset(&placements, 0,
- (AMDGPU_GEM_DOMAIN_MAX + 1) * sizeof(struct ttm_place));
-
- amdgpu_ttm_placement_init(adev, &placement,
- placements, AMDGPU_GEM_DOMAIN_GTT,
- AMDGPU_GEM_CREATE_CPU_GTT_USWC);
+ memset(&placements, 0, sizeof(placements));
+ amdgpu_ttm_placement_init(adev, &placement, placements,
+ AMDGPU_GEM_DOMAIN_GTT,
+ AMDGPU_GEM_CREATE_CPU_GTT_USWC |
+ AMDGPU_GEM_CREATE_SHADOW);
r = amdgpu_bo_create_restricted(adev, size, byte_align, true,
AMDGPU_GEM_DOMAIN_GTT,
- AMDGPU_GEM_CREATE_CPU_GTT_USWC,
+ AMDGPU_GEM_CREATE_CPU_GTT_USWC |
+ AMDGPU_GEM_CREATE_SHADOW,
NULL, &placement,
bo->tbo.resv,
0,
@@ -484,30 +486,28 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
{
struct ttm_placement placement = {0};
struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1];
+ uint64_t parent_flags = flags & ~AMDGPU_GEM_CREATE_SHADOW;
int r;
- memset(&placements, 0,
- (AMDGPU_GEM_DOMAIN_MAX + 1) * sizeof(struct ttm_place));
+ memset(&placements, 0, sizeof(placements));
+ amdgpu_ttm_placement_init(adev, &placement, placements,
+ domain, parent_flags);
- amdgpu_ttm_placement_init(adev, &placement,
- placements, domain, flags);
-
- r = amdgpu_bo_create_restricted(adev, size, byte_align, kernel,
- domain, flags, sg, &placement,
- resv, init_value, bo_ptr);
+ r = amdgpu_bo_create_restricted(adev, size, byte_align, kernel, domain,
+ parent_flags, sg, &placement, resv,
+ init_value, bo_ptr);
if (r)
return r;
- if (amdgpu_need_backup(adev) && (flags & AMDGPU_GEM_CREATE_SHADOW)) {
- if (!resv) {
- r = ww_mutex_lock(&(*bo_ptr)->tbo.resv->lock, NULL);
- WARN_ON(r != 0);
- }
+ if ((flags & AMDGPU_GEM_CREATE_SHADOW) && amdgpu_need_backup(adev)) {
+ if (!resv)
+ WARN_ON(reservation_object_lock((*bo_ptr)->tbo.resv,
+ NULL));
r = amdgpu_bo_create_shadow(adev, size, byte_align, (*bo_ptr));
if (!resv)
- ww_mutex_unlock(&(*bo_ptr)->tbo.resv->lock);
+ reservation_object_unlock((*bo_ptr)->tbo.resv);
if (r)
amdgpu_bo_unref(bo_ptr);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
index 6c5646b48d1a..5ce65280b396 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
@@ -170,6 +170,16 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
unsigned irq_type)
{
int r;
+ int sched_hw_submission = amdgpu_sched_hw_submission;
+
+ /* Set the hw submission limit higher for KIQ because
+ * it's used for a number of gfx/compute tasks by both
+ * KFD and KGD which may have outstanding fences and
+ * it doesn't really use the gpu scheduler anyway;
+ * KIQ tasks get submitted directly to the ring.
+ */
+ if (ring->funcs->type == AMDGPU_RING_TYPE_KIQ)
+ sched_hw_submission = max(sched_hw_submission, 256);
if (ring->adev == NULL) {
if (adev->num_rings >= AMDGPU_MAX_RINGS)
@@ -178,8 +188,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
ring->adev = adev;
ring->idx = adev->num_rings++;
adev->rings[ring->idx] = ring;
- r = amdgpu_fence_driver_init_ring(ring,
- amdgpu_sched_hw_submission);
+ r = amdgpu_fence_driver_init_ring(ring, sched_hw_submission);
if (r)
return r;
}
@@ -218,8 +227,7 @@ int amdgpu_ring_init(struct amdgpu_device *adev, struct amdgpu_ring *ring,
return r;
}
- ring->ring_size = roundup_pow_of_two(max_dw * 4 *
- amdgpu_sched_hw_submission);
+ ring->ring_size = roundup_pow_of_two(max_dw * 4 * sched_hw_submission);
ring->buf_mask = (ring->ring_size / 4) - 1;
ring->ptr_mask = ring->funcs->support_64bit_ptrs ?
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 8b2c294f6f79..7ef6c28a34d9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -761,35 +761,11 @@ static void amdgpu_ttm_tt_unpin_userptr(struct ttm_tt *ttm)
sg_free_table(ttm->sg);
}
-static int amdgpu_ttm_do_bind(struct ttm_tt *ttm, struct ttm_mem_reg *mem)
-{
- struct amdgpu_ttm_tt *gtt = (void *)ttm;
- uint64_t flags;
- int r;
-
- spin_lock(&gtt->adev->gtt_list_lock);
- flags = amdgpu_ttm_tt_pte_flags(gtt->adev, ttm, mem);
- gtt->offset = (u64)mem->start << PAGE_SHIFT;
- r = amdgpu_gart_bind(gtt->adev, gtt->offset, ttm->num_pages,
- ttm->pages, gtt->ttm.dma_address, flags);
-
- if (r) {
- DRM_ERROR("failed to bind %lu pages at 0x%08llX\n",
- ttm->num_pages, gtt->offset);
- goto error_gart_bind;
- }
-
- list_add_tail(&gtt->list, &gtt->adev->gtt_list);
-error_gart_bind:
- spin_unlock(&gtt->adev->gtt_list_lock);
- return r;
-
-}
-
static int amdgpu_ttm_backend_bind(struct ttm_tt *ttm,
struct ttm_mem_reg *bo_mem)
{
struct amdgpu_ttm_tt *gtt = (void*)ttm;
+ uint64_t flags;
int r = 0;
if (gtt->userptr) {
@@ -809,9 +785,24 @@ static int amdgpu_ttm_backend_bind(struct ttm_tt *ttm,
bo_mem->mem_type == AMDGPU_PL_OA)
return -EINVAL;
- if (amdgpu_gtt_mgr_is_allocated(bo_mem))
- r = amdgpu_ttm_do_bind(ttm, bo_mem);
+ if (!amdgpu_gtt_mgr_is_allocated(bo_mem))
+ return 0;
+ spin_lock(&gtt->adev->gtt_list_lock);
+ flags = amdgpu_ttm_tt_pte_flags(gtt->adev, ttm, bo_mem);
+ gtt->offset = (u64)bo_mem->start << PAGE_SHIFT;
+ r = amdgpu_gart_bind(gtt->adev, gtt->offset, ttm->num_pages,
+ ttm->pages, gtt->ttm.dma_address, flags);
+
+ if (r) {
+ DRM_ERROR("failed to bind %lu pages at 0x%08llX\n",
+ ttm->num_pages, gtt->offset);
+ goto error_gart_bind;
+ }
+
+ list_add_tail(&gtt->list, &gtt->adev->gtt_list);
+error_gart_bind:
+ spin_unlock(&gtt->adev->gtt_list_lock);
return r;
}
@@ -824,20 +815,39 @@ bool amdgpu_ttm_is_bound(struct ttm_tt *ttm)
int amdgpu_ttm_bind(struct ttm_buffer_object *bo, struct ttm_mem_reg *bo_mem)
{
+ struct amdgpu_device *adev = amdgpu_ttm_adev(bo->bdev);
struct ttm_tt *ttm = bo->ttm;
+ struct ttm_mem_reg tmp;
+
+ struct ttm_placement placement;
+ struct ttm_place placements;
int r;
if (!ttm || amdgpu_ttm_is_bound(ttm))
return 0;
- r = amdgpu_gtt_mgr_alloc(&bo->bdev->man[TTM_PL_TT], bo,
- NULL, bo_mem);
- if (r) {
- DRM_ERROR("Failed to allocate GTT address space (%d)\n", r);
+ tmp = bo->mem;
+ tmp.mm_node = NULL;
+ placement.num_placement = 1;
+ placement.placement = &placements;
+ placement.num_busy_placement = 1;
+ placement.busy_placement = &placements;
+ placements.fpfn = 0;
+ placements.lpfn = adev->mc.gart_size >> PAGE_SHIFT;
+ placements.flags = TTM_PL_MASK_CACHING | TTM_PL_FLAG_TT;
+
+ r = ttm_bo_mem_space(bo, &placement, &tmp, true, false);
+ if (unlikely(r))
return r;
- }
- return amdgpu_ttm_do_bind(ttm, bo_mem);
+ r = ttm_bo_move_ttm(bo, true, false, &tmp);
+ if (unlikely(r))
+ ttm_bo_mem_put(bo, &tmp);
+ else
+ bo->offset = (bo->mem.start << PAGE_SHIFT) +
+ bo->bdev->man[bo->mem.mem_type].gpu_offset;
+
+ return r;
}
int amdgpu_ttm_recover_gart(struct amdgpu_device *adev)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
index f22a4758719d..43093bffa2cf 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
@@ -62,10 +62,6 @@ extern const struct ttm_mem_type_manager_func amdgpu_gtt_mgr_func;
extern const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func;
bool amdgpu_gtt_mgr_is_allocated(struct ttm_mem_reg *mem);
-int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man,
- struct ttm_buffer_object *tbo,
- const struct ttm_place *place,
- struct ttm_mem_reg *mem);
uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man);
uint64_t amdgpu_vram_mgr_usage(struct ttm_mem_type_manager *man);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index b9a5a77eedaf..bd20ff018512 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -165,14 +165,6 @@ static int amdgpu_vm_validate_level(struct amdgpu_vm_pt *parent,
unsigned i;
int r;
- if (parent->bo->shadow) {
- struct amdgpu_bo *shadow = parent->bo->shadow;
-
- r = amdgpu_ttm_bind(&shadow->tbo, &shadow->tbo.mem);
- if (r)
- return r;
- }
-
if (use_cpu_for_update) {
r = amdgpu_bo_kmap(parent->bo, NULL);
if (r)
@@ -1277,7 +1269,7 @@ static void amdgpu_vm_handle_huge_pages(struct amdgpu_pte_update_params *p,
/* In the case of a mixed PT the PDE must point to it*/
if (p->adev->asic_type < CHIP_VEGA10 ||
nptes != AMDGPU_VM_PTE_COUNT(p->adev) ||
- p->func == amdgpu_vm_do_copy_ptes ||
+ p->src ||
!(flags & AMDGPU_PTE_VALID)) {
dst = amdgpu_bo_gpu_offset(entry->bo);
@@ -1294,9 +1286,23 @@ static void amdgpu_vm_handle_huge_pages(struct amdgpu_pte_update_params *p,
entry->addr = (dst | flags);
if (use_cpu_update) {
+ /* In case a huge page is replaced with a system
+ * memory mapping, p->pages_addr != NULL and
+ * amdgpu_vm_cpu_set_ptes would try to translate dst
+ * through amdgpu_vm_map_gart. But dst is already a
+ * GPU address (of the page table). Disable
+ * amdgpu_vm_map_gart temporarily.
+ */
+ dma_addr_t *tmp;
+
+ tmp = p->pages_addr;
+ p->pages_addr = NULL;
+
pd_addr = (unsigned long)amdgpu_bo_kptr(parent->bo);
pde = pd_addr + (entry - parent->entries) * 8;
amdgpu_vm_cpu_set_ptes(p, pde, dst, 1, 0, flags);
+
+ p->pages_addr = tmp;
} else {
if (parent->bo->shadow) {
pd_addr = amdgpu_bo_gpu_offset(parent->bo->shadow);
@@ -1610,7 +1616,6 @@ error_free:
*
* @adev: amdgpu_device pointer
* @exclusive: fence we need to sync to
- * @gtt_flags: flags as they are used for GTT
* @pages_addr: DMA addresses to use for mapping
* @vm: requested vm
* @mapping: mapped range and flags to use for the update
@@ -1624,7 +1629,6 @@ error_free:
*/
static int amdgpu_vm_bo_split_mapping(struct amdgpu_device *adev,
struct dma_fence *exclusive,
- uint64_t gtt_flags,
dma_addr_t *pages_addr,
struct amdgpu_vm *vm,
struct amdgpu_bo_va_mapping *mapping,
@@ -1679,11 +1683,7 @@ static int amdgpu_vm_bo_split_mapping(struct amdgpu_device *adev,
}
if (pages_addr) {
- if (flags == gtt_flags)
- src = adev->gart.table_addr +
- (addr >> AMDGPU_GPU_PAGE_SHIFT) * 8;
- else
- max_entries = min(max_entries, 16ull * 1024ull);
+ max_entries = min(max_entries, 16ull * 1024ull);
addr = 0;
} else if (flags & AMDGPU_PTE_VALID) {
addr += adev->vm_manager.vram_base_offset;
@@ -1728,10 +1728,10 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev,
struct amdgpu_vm *vm = bo_va->base.vm;
struct amdgpu_bo_va_mapping *mapping;
dma_addr_t *pages_addr = NULL;
- uint64_t gtt_flags, flags;
struct ttm_mem_reg *mem;
struct drm_mm_node *nodes;
struct dma_fence *exclusive;
+ uint64_t flags;
int r;
if (clear || !bo_va->base.bo) {
@@ -1751,15 +1751,10 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev,
exclusive = reservation_object_get_excl(bo->tbo.resv);
}
- if (bo) {
+ if (bo)
flags = amdgpu_ttm_tt_pte_flags(adev, bo->tbo.ttm, mem);
- gtt_flags = (amdgpu_ttm_is_bound(bo->tbo.ttm) &&
- adev == amdgpu_ttm_adev(bo->tbo.bdev)) ?
- flags : 0;
- } else {
+ else
flags = 0x0;
- gtt_flags = ~0x0;
- }
spin_lock(&vm->status_lock);
if (!list_empty(&bo_va->base.vm_status))
@@ -1767,8 +1762,7 @@ int amdgpu_vm_bo_update(struct amdgpu_device *adev,
spin_unlock(&vm->status_lock);
list_for_each_entry(mapping, &bo_va->invalids, list) {
- r = amdgpu_vm_bo_split_mapping(adev, exclusive,
- gtt_flags, pages_addr, vm,
+ r = amdgpu_vm_bo_split_mapping(adev, exclusive, pages_addr, vm,
mapping, flags, nodes,
&bo_va->last_pt_update);
if (r)
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index 832e592fcd07..fc260c13b1da 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -4579,9 +4579,9 @@ static int gfx_v8_0_mqd_init(struct amdgpu_ring *ring)
mqd->compute_misc_reserved = 0x00000003;
if (!(adev->flags & AMD_IS_APU)) {
mqd->dynamic_cu_mask_addr_lo = lower_32_bits(ring->mqd_gpu_addr
- + offsetof(struct vi_mqd_allocation, dyamic_cu_mask));
+ + offsetof(struct vi_mqd_allocation, dynamic_cu_mask));
mqd->dynamic_cu_mask_addr_hi = upper_32_bits(ring->mqd_gpu_addr
- + offsetof(struct vi_mqd_allocation, dyamic_cu_mask));
+ + offsetof(struct vi_mqd_allocation, dynamic_cu_mask));
}
eop_base_addr = ring->eop_gpu_addr >> 8;
mqd->cp_hqd_eop_base_addr_lo = eop_base_addr;
@@ -4768,8 +4768,8 @@ static int gfx_v8_0_kiq_init_queue(struct amdgpu_ring *ring)
mutex_unlock(&adev->srbm_mutex);
} else {
memset((void *)mqd, 0, sizeof(struct vi_mqd_allocation));
- ((struct vi_mqd_allocation *)mqd)->dyamic_cu_mask = 0xFFFFFFFF;
- ((struct vi_mqd_allocation *)mqd)->dyamic_rb_mask = 0xFFFFFFFF;
+ ((struct vi_mqd_allocation *)mqd)->dynamic_cu_mask = 0xFFFFFFFF;
+ ((struct vi_mqd_allocation *)mqd)->dynamic_rb_mask = 0xFFFFFFFF;
mutex_lock(&adev->srbm_mutex);
vi_srbm_select(adev, ring->me, ring->pipe, ring->queue, 0);
gfx_v8_0_mqd_init(ring);
@@ -4792,8 +4792,8 @@ static int gfx_v8_0_kcq_init_queue(struct amdgpu_ring *ring)
if (!adev->gfx.in_reset && !adev->gfx.in_suspend) {
memset((void *)mqd, 0, sizeof(struct vi_mqd_allocation));
- ((struct vi_mqd_allocation *)mqd)->dyamic_cu_mask = 0xFFFFFFFF;
- ((struct vi_mqd_allocation *)mqd)->dyamic_rb_mask = 0xFFFFFFFF;
+ ((struct vi_mqd_allocation *)mqd)->dynamic_cu_mask = 0xFFFFFFFF;
+ ((struct vi_mqd_allocation *)mqd)->dynamic_rb_mask = 0xFFFFFFFF;
mutex_lock(&adev->srbm_mutex);
vi_srbm_select(adev, ring->me, ring->pipe, ring->queue, 0);
gfx_v8_0_mqd_init(ring);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
index 4f2788b61a08..6c8040e616c4 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfxhub_v1_0.c
@@ -124,7 +124,7 @@ static void gfxhub_v1_0_init_tlb_regs(struct amdgpu_device *adev)
static void gfxhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
{
- uint32_t tmp, field;
+ uint32_t tmp;
/* Setup L2 cache */
tmp = RREG32_SOC15(GC, 0, mmVM_L2_CNTL);
@@ -143,9 +143,8 @@ static void gfxhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1);
WREG32_SOC15(GC, 0, mmVM_L2_CNTL2, tmp);
- field = adev->vm_manager.fragment_size;
tmp = mmVM_L2_CNTL3_DEFAULT;
- tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, field);
+ tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 9);
tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, 6);
WREG32_SOC15(GC, 0, mmVM_L2_CNTL3, tmp);
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
index 12b0c4cd7a5a..5be9c83dfcf7 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
@@ -332,7 +332,24 @@ static int gmc_v6_0_mc_init(struct amdgpu_device *adev)
adev->mc.real_vram_size = RREG32(mmCONFIG_MEMSIZE) * 1024ULL * 1024ULL;
adev->mc.visible_vram_size = adev->mc.aper_size;
- amdgpu_gart_set_defaults(adev);
+ /* set the gart size */
+ if (amdgpu_gart_size == -1) {
+ switch (adev->asic_type) {
+ case CHIP_HAINAN: /* no MM engines */
+ default:
+ adev->mc.gart_size = 256ULL << 20;
+ break;
+ case CHIP_VERDE: /* UVD, VCE do not support GPUVM */
+ case CHIP_TAHITI: /* UVD, VCE do not support GPUVM */
+ case CHIP_PITCAIRN: /* UVD, VCE do not support GPUVM */
+ case CHIP_OLAND: /* UVD, VCE do not support GPUVM */
+ adev->mc.gart_size = 1024ULL << 20;
+ break;
+ }
+ } else {
+ adev->mc.gart_size = (u64)amdgpu_gart_size << 20;
+ }
+
gmc_v6_0_vram_gtt_location(adev, &adev->mc);
return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
index e42c1ad3af5e..eace9e7182c8 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
@@ -386,7 +386,27 @@ static int gmc_v7_0_mc_init(struct amdgpu_device *adev)
if (adev->mc.visible_vram_size > adev->mc.real_vram_size)
adev->mc.visible_vram_size = adev->mc.real_vram_size;
- amdgpu_gart_set_defaults(adev);
+ /* set the gart size */
+ if (amdgpu_gart_size == -1) {
+ switch (adev->asic_type) {
+ case CHIP_TOPAZ: /* no MM engines */
+ default:
+ adev->mc.gart_size = 256ULL << 20;
+ break;
+#ifdef CONFIG_DRM_AMDGPU_CIK
+ case CHIP_BONAIRE: /* UVD, VCE do not support GPUVM */
+ case CHIP_HAWAII: /* UVD, VCE do not support GPUVM */
+ case CHIP_KAVERI: /* UVD, VCE do not support GPUVM */
+ case CHIP_KABINI: /* UVD, VCE do not support GPUVM */
+ case CHIP_MULLINS: /* UVD, VCE do not support GPUVM */
+ adev->mc.gart_size = 1024ULL << 20;
+ break;
+#endif
+ }
+ } else {
+ adev->mc.gart_size = (u64)amdgpu_gart_size << 20;
+ }
+
gmc_v7_0_vram_gtt_location(adev, &adev->mc);
return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
index 7ca2dae8237a..3b3326daf32b 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
@@ -562,7 +562,26 @@ static int gmc_v8_0_mc_init(struct amdgpu_device *adev)
if (adev->mc.visible_vram_size > adev->mc.real_vram_size)
adev->mc.visible_vram_size = adev->mc.real_vram_size;
- amdgpu_gart_set_defaults(adev);
+ /* set the gart size */
+ if (amdgpu_gart_size == -1) {
+ switch (adev->asic_type) {
+ case CHIP_POLARIS11: /* all engines support GPUVM */
+ case CHIP_POLARIS10: /* all engines support GPUVM */
+ case CHIP_POLARIS12: /* all engines support GPUVM */
+ default:
+ adev->mc.gart_size = 256ULL << 20;
+ break;
+ case CHIP_TONGA: /* UVD, VCE do not support GPUVM */
+ case CHIP_FIJI: /* UVD, VCE do not support GPUVM */
+ case CHIP_CARRIZO: /* UVD, VCE do not support GPUVM, DCE SG support */
+ case CHIP_STONEY: /* UVD does not support GPUVM, DCE SG support */
+ adev->mc.gart_size = 1024ULL << 20;
+ break;
+ }
+ } else {
+ adev->mc.gart_size = (u64)amdgpu_gart_size << 20;
+ }
+
gmc_v8_0_vram_gtt_location(adev, &adev->mc);
return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
index 2769c2b3b56e..d04d0b123212 100644
--- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
@@ -499,7 +499,21 @@ static int gmc_v9_0_mc_init(struct amdgpu_device *adev)
if (adev->mc.visible_vram_size > adev->mc.real_vram_size)
adev->mc.visible_vram_size = adev->mc.real_vram_size;
- amdgpu_gart_set_defaults(adev);
+ /* set the gart size */
+ if (amdgpu_gart_size == -1) {
+ switch (adev->asic_type) {
+ case CHIP_VEGA10: /* all engines support GPUVM */
+ default:
+ adev->mc.gart_size = 256ULL << 20;
+ break;
+ case CHIP_RAVEN: /* DCE SG support */
+ adev->mc.gart_size = 1024ULL << 20;
+ break;
+ }
+ } else {
+ adev->mc.gart_size = (u64)amdgpu_gart_size << 20;
+ }
+
gmc_v9_0_vram_gtt_location(adev, &adev->mc);
return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
index 4395a4f12149..74cb647da30e 100644
--- a/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/mmhub_v1_0.c
@@ -138,7 +138,7 @@ static void mmhub_v1_0_init_tlb_regs(struct amdgpu_device *adev)
static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
{
- uint32_t tmp, field;
+ uint32_t tmp;
/* Setup L2 cache */
tmp = RREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL);
@@ -157,9 +157,8 @@ static void mmhub_v1_0_init_cache_regs(struct amdgpu_device *adev)
tmp = REG_SET_FIELD(tmp, VM_L2_CNTL2, INVALIDATE_L2_CACHE, 1);
WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL2, tmp);
- field = adev->vm_manager.fragment_size;
tmp = mmVM_L2_CNTL3_DEFAULT;
- tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, field);
+ tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, BANK_SELECT, 9);
tmp = REG_SET_FIELD(tmp, VM_L2_CNTL3, L2_CACHE_BIGK_FRAGMENT_SIZE, 6);
WREG32_SOC15(MMHUB, 0, mmVM_L2_CNTL3, tmp);
diff --git a/drivers/gpu/drm/amd/include/vi_structs.h b/drivers/gpu/drm/amd/include/vi_structs.h
index ca93b5160ba6..3e606a761d0e 100644
--- a/drivers/gpu/drm/amd/include/vi_structs.h
+++ b/drivers/gpu/drm/amd/include/vi_structs.h
@@ -419,8 +419,8 @@ struct vi_mqd_allocation {
struct vi_mqd mqd;
uint32_t wptr_poll_mem;
uint32_t rptr_report_mem;
- uint32_t dyamic_cu_mask;
- uint32_t dyamic_rb_mask;
+ uint32_t dynamic_cu_mask;
+ uint32_t dynamic_rb_mask;
};
struct cz_mqd {
diff --git a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
index 9d71a259d97d..f8f02e70b8bc 100644
--- a/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
+++ b/drivers/gpu/drm/amd/powerplay/hwmgr/vega10_hwmgr.c
@@ -1558,7 +1558,8 @@ static int vega10_populate_smc_link_levels(struct pp_hwmgr *hwmgr)
*/
static int vega10_populate_single_gfx_level(struct pp_hwmgr *hwmgr,
- uint32_t gfx_clock, PllSetting_t *current_gfxclk_level)
+ uint32_t gfx_clock, PllSetting_t *current_gfxclk_level,
+ uint32_t *acg_freq)
{
struct phm_ppt_v2_information *table_info =
(struct phm_ppt_v2_information *)(hwmgr->pptable);
@@ -1609,6 +1610,8 @@ static int vega10_populate_single_gfx_level(struct pp_hwmgr *hwmgr,
cpu_to_le16(dividers.usPll_ss_slew_frac);
current_gfxclk_level->Did = (uint8_t)(dividers.ulDid);
+ *acg_freq = gfx_clock / 100; /* 100 Khz to Mhz conversion */
+
return 0;
}
@@ -1689,7 +1692,8 @@ static int vega10_populate_all_graphic_levels(struct pp_hwmgr *hwmgr)
for (i = 0; i < dpm_table->count; i++) {
result = vega10_populate_single_gfx_level(hwmgr,
dpm_table->dpm_levels[i].value,
- &(pp_table->GfxclkLevel[i]));
+ &(pp_table->GfxclkLevel[i]),
+ &(pp_table->AcgFreqTable[i]));
if (result)
return result;
}
@@ -1698,7 +1702,8 @@ static int vega10_populate_all_graphic_levels(struct pp_hwmgr *hwmgr)
while (i < NUM_GFXCLK_DPM_LEVELS) {
result = vega10_populate_single_gfx_level(hwmgr,
dpm_table->dpm_levels[j].value,
- &(pp_table->GfxclkLevel[i]));
+ &(pp_table->GfxclkLevel[i]),
+ &(pp_table->AcgFreqTable[i]));
if (result)
return result;
i++;
diff --git a/drivers/gpu/drm/amd/powerplay/inc/smu9_driver_if.h b/drivers/gpu/drm/amd/powerplay/inc/smu9_driver_if.h
index f6d6c61f796a..2818c98ff5ca 100644
--- a/drivers/gpu/drm/amd/powerplay/inc/smu9_driver_if.h
+++ b/drivers/gpu/drm/amd/powerplay/inc/smu9_driver_if.h
@@ -315,10 +315,12 @@ typedef struct {
uint8_t AcgEnable[NUM_GFXCLK_DPM_LEVELS];
GbVdroopTable_t AcgBtcGbVdroopTable;
QuadraticInt_t AcgAvfsGb;
- uint32_t Reserved[4];
+
+ /* ACG Frequency Table, in Mhz */
+ uint32_t AcgFreqTable[NUM_GFXCLK_DPM_LEVELS];
/* Padding - ignore */
- uint32_t MmHubPadding[7]; /* SMU internal use */
+ uint32_t MmHubPadding[3]; /* SMU internal use */
} PPTable_t;
diff --git a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c
index 76347ff6d655..c49a6f22002f 100644
--- a/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c
+++ b/drivers/gpu/drm/amd/powerplay/smumgr/smu7_smumgr.c
@@ -380,7 +380,8 @@ static int smu7_populate_single_firmware_entry(struct pp_smumgr *smumgr,
entry->num_register_entries = 0;
}
- if (fw_type == UCODE_ID_RLC_G)
+ if ((fw_type == UCODE_ID_RLC_G)
+ || (fw_type == UCODE_ID_CP_MEC))
entry->flags = 1;
else
entry->flags = 0;
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
index 38cea6fb25a8..97c94f9683fa 100644
--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
@@ -205,17 +205,32 @@ void amd_sched_entity_fini(struct amd_gpu_scheduler *sched,
struct amd_sched_entity *entity)
{
struct amd_sched_rq *rq = entity->rq;
+ int r;
if (!amd_sched_entity_is_initialized(sched, entity))
return;
-
/**
* The client will not queue more IBs during this fini, consume existing
- * queued IBs
+ * queued IBs or discard them on SIGKILL
*/
- wait_event(sched->job_scheduled, amd_sched_entity_is_idle(entity));
-
+ if ((current->flags & PF_SIGNALED) && current->exit_code == SIGKILL)
+ r = -ERESTARTSYS;
+ else
+ r = wait_event_killable(sched->job_scheduled,
+ amd_sched_entity_is_idle(entity));
amd_sched_rq_remove_entity(rq, entity);
+ if (r) {
+ struct amd_sched_job *job;
+
+ /* Park the kernel for a moment to make sure it isn't processing
+ * our enity.
+ */
+ kthread_park(sched->thread);
+ kthread_unpark(sched->thread);
+ while (kfifo_out(&entity->job_queue, &job, sizeof(job)))
+ sched->ops->free_job(job);
+
+ }
kfifo_free(&entity->job_queue);
}
diff --git a/drivers/gpu/drm/drm_blend.c b/drivers/gpu/drm/drm_blend.c
index db6aeec50b82..2e5e089dd912 100644
--- a/drivers/gpu/drm/drm_blend.c
+++ b/drivers/gpu/drm/drm_blend.c
@@ -319,7 +319,7 @@ static int drm_atomic_helper_crtc_normalize_zpos(struct drm_crtc *crtc,
DRM_DEBUG_ATOMIC("[CRTC:%d:%s] calculating normalized zpos values\n",
crtc->base.id, crtc->name);
- states = kmalloc_array(total_planes, sizeof(*states), GFP_TEMPORARY);
+ states = kmalloc_array(total_planes, sizeof(*states), GFP_KERNEL);
if (!states)
return -ENOMEM;
diff --git a/drivers/gpu/drm/drm_dp_dual_mode_helper.c b/drivers/gpu/drm/drm_dp_dual_mode_helper.c
index 80e62f669321..0ef9011a1856 100644
--- a/drivers/gpu/drm/drm_dp_dual_mode_helper.c
+++ b/drivers/gpu/drm/drm_dp_dual_mode_helper.c
@@ -111,7 +111,7 @@ ssize_t drm_dp_dual_mode_write(struct i2c_adapter *adapter,
void *data;
int ret;
- data = kmalloc(msg.len, GFP_TEMPORARY);
+ data = kmalloc(msg.len, GFP_KERNEL);
if (!data)
return -ENOMEM;
diff --git a/drivers/gpu/drm/drm_scdc_helper.c b/drivers/gpu/drm/drm_scdc_helper.c
index 7d1b0f011d33..935653eb3616 100644
--- a/drivers/gpu/drm/drm_scdc_helper.c
+++ b/drivers/gpu/drm/drm_scdc_helper.c
@@ -102,7 +102,7 @@ ssize_t drm_scdc_write(struct i2c_adapter *adapter, u8 offset,
void *data;
int err;
- data = kmalloc(1 + size, GFP_TEMPORARY);
+ data = kmalloc(1 + size, GFP_KERNEL);
if (!data)
return -ENOMEM;
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
index a7ff2e4c00d2..026ef4e02f85 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
@@ -37,7 +37,7 @@ static struct etnaviv_gem_submit *submit_create(struct drm_device *dev,
struct etnaviv_gem_submit *submit;
size_t sz = size_vstruct(nr, sizeof(submit->bos[0]), sizeof(*submit));
- submit = kmalloc(sz, GFP_TEMPORARY | __GFP_NOWARN | __GFP_NORETRY);
+ submit = kmalloc(sz, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
if (submit) {
submit->dev = dev;
submit->gpu = gpu;
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 57317715977f..19404c96eeb1 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2540,7 +2540,7 @@ static void *i915_gem_object_map(const struct drm_i915_gem_object *obj,
if (n_pages > ARRAY_SIZE(stack_pages)) {
/* Too big for stack -- allocate temporary array instead */
- pages = kvmalloc_array(n_pages, sizeof(*pages), GFP_TEMPORARY);
+ pages = kvmalloc_array(n_pages, sizeof(*pages), GFP_KERNEL);
if (!pages)
return NULL;
}
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 50d5e24f91a9..92437f455b43 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -293,7 +293,7 @@ static int eb_create(struct i915_execbuffer *eb)
* as possible to perform the allocation and warn
* if it fails.
*/
- flags = GFP_TEMPORARY;
+ flags = GFP_KERNEL;
if (size > 1)
flags |= __GFP_NORETRY | __GFP_NOWARN;
@@ -1515,7 +1515,7 @@ static int eb_copy_relocations(const struct i915_execbuffer *eb)
urelocs = u64_to_user_ptr(eb->exec[i].relocs_ptr);
size = nreloc * sizeof(*relocs);
- relocs = kvmalloc_array(size, 1, GFP_TEMPORARY);
+ relocs = kvmalloc_array(size, 1, GFP_KERNEL);
if (!relocs) {
kvfree(relocs);
err = -ENOMEM;
@@ -2077,7 +2077,7 @@ get_fence_array(struct drm_i915_gem_execbuffer2 *args,
return ERR_PTR(-EFAULT);
fences = kvmalloc_array(args->num_cliprects, sizeof(*fences),
- __GFP_NOWARN | GFP_TEMPORARY);
+ __GFP_NOWARN | GFP_KERNEL);
if (!fences)
return ERR_PTR(-ENOMEM);
@@ -2463,9 +2463,9 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
/* Copy in the exec list from userland */
exec_list = kvmalloc_array(args->buffer_count, sizeof(*exec_list),
- __GFP_NOWARN | GFP_TEMPORARY);
+ __GFP_NOWARN | GFP_KERNEL);
exec2_list = kvmalloc_array(args->buffer_count + 1, sz,
- __GFP_NOWARN | GFP_TEMPORARY);
+ __GFP_NOWARN | GFP_KERNEL);
if (exec_list == NULL || exec2_list == NULL) {
DRM_DEBUG("Failed to allocate exec list for %d buffers\n",
args->buffer_count);
@@ -2543,7 +2543,7 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
/* Allocate an extra slot for use by the command parser */
exec2_list = kvmalloc_array(args->buffer_count + 1, sz,
- __GFP_NOWARN | GFP_TEMPORARY);
+ __GFP_NOWARN | GFP_KERNEL);
if (exec2_list == NULL) {
DRM_DEBUG("Failed to allocate exec list for %d buffers\n",
args->buffer_count);
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 0d5a988b3867..e2410eb5d96e 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -3231,7 +3231,7 @@ intel_rotate_pages(struct intel_rotation_info *rot_info,
/* Allocate a temporary list of source pages for random access. */
page_addr_list = kvmalloc_array(n_pages,
sizeof(dma_addr_t),
- GFP_TEMPORARY);
+ GFP_KERNEL);
if (!page_addr_list)
return ERR_PTR(ret);
diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c b/drivers/gpu/drm/i915/i915_gem_userptr.c
index 23fd18bd1b56..709efe2357ea 100644
--- a/drivers/gpu/drm/i915/i915_gem_userptr.c
+++ b/drivers/gpu/drm/i915/i915_gem_userptr.c
@@ -507,7 +507,7 @@ __i915_gem_userptr_get_pages_worker(struct work_struct *_work)
ret = -ENOMEM;
pinned = 0;
- pvec = kvmalloc_array(npages, sizeof(struct page *), GFP_TEMPORARY);
+ pvec = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
if (pvec != NULL) {
struct mm_struct *mm = obj->userptr.mm->mm;
unsigned int flags = 0;
@@ -643,7 +643,7 @@ i915_gem_userptr_get_pages(struct drm_i915_gem_object *obj)
if (mm == current->mm) {
pvec = kvmalloc_array(num_pages, sizeof(struct page *),
- GFP_TEMPORARY |
+ GFP_KERNEL |
__GFP_NORETRY |
__GFP_NOWARN);
if (pvec) /* defer to worker if malloc fails */
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index ed5a1eb839ad..0c779671fe2d 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -787,16 +787,16 @@ int i915_error_state_buf_init(struct drm_i915_error_state_buf *ebuf,
*/
ebuf->size = count + 1 > PAGE_SIZE ? count + 1 : PAGE_SIZE;
ebuf->buf = kmalloc(ebuf->size,
- GFP_TEMPORARY | __GFP_NORETRY | __GFP_NOWARN);
+ GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN);
if (ebuf->buf == NULL) {
ebuf->size = PAGE_SIZE;
- ebuf->buf = kmalloc(ebuf->size, GFP_TEMPORARY);
+ ebuf->buf = kmalloc(ebuf->size, GFP_KERNEL);
}
if (ebuf->buf == NULL) {
ebuf->size = 128;
- ebuf->buf = kmalloc(ebuf->size, GFP_TEMPORARY);
+ ebuf->buf = kmalloc(ebuf->size, GFP_KERNEL);
}
if (ebuf->buf == NULL)
diff --git a/drivers/gpu/drm/i915/selftests/i915_random.c b/drivers/gpu/drm/i915/selftests/i915_random.c
index d044bf9a6feb..222c511bea49 100644
--- a/drivers/gpu/drm/i915/selftests/i915_random.c
+++ b/drivers/gpu/drm/i915/selftests/i915_random.c
@@ -62,7 +62,7 @@ unsigned int *i915_random_order(unsigned int count, struct rnd_state *state)
{
unsigned int *order, i;
- order = kmalloc_array(count, sizeof(*order), GFP_TEMPORARY);
+ order = kmalloc_array(count, sizeof(*order), GFP_KERNEL);
if (!order)
return order;
diff --git a/drivers/gpu/drm/i915/selftests/intel_breadcrumbs.c b/drivers/gpu/drm/i915/selftests/intel_breadcrumbs.c
index 7276194c04f7..828904b7d468 100644
--- a/drivers/gpu/drm/i915/selftests/intel_breadcrumbs.c
+++ b/drivers/gpu/drm/i915/selftests/intel_breadcrumbs.c
@@ -117,12 +117,12 @@ static int igt_random_insert_remove(void *arg)
mock_engine_reset(engine);
- waiters = kvmalloc_array(count, sizeof(*waiters), GFP_TEMPORARY);
+ waiters = kvmalloc_array(count, sizeof(*waiters), GFP_KERNEL);
if (!waiters)
goto out_engines;
bitmap = kcalloc(DIV_ROUND_UP(count, BITS_PER_LONG), sizeof(*bitmap),
- GFP_TEMPORARY);
+ GFP_KERNEL);
if (!bitmap)
goto out_waiters;
@@ -187,12 +187,12 @@ static int igt_insert_complete(void *arg)
mock_engine_reset(engine);
- waiters = kvmalloc_array(count, sizeof(*waiters), GFP_TEMPORARY);
+ waiters = kvmalloc_array(count, sizeof(*waiters), GFP_KERNEL);
if (!waiters)
goto out_engines;
bitmap = kcalloc(DIV_ROUND_UP(count, BITS_PER_LONG), sizeof(*bitmap),
- GFP_TEMPORARY);
+ GFP_KERNEL);
if (!bitmap)
goto out_waiters;
@@ -368,7 +368,7 @@ static int igt_wakeup(void *arg)
mock_engine_reset(engine);
- waiters = kvmalloc_array(count, sizeof(*waiters), GFP_TEMPORARY);
+ waiters = kvmalloc_array(count, sizeof(*waiters), GFP_KERNEL);
if (!waiters)
goto out_engines;
diff --git a/drivers/gpu/drm/i915/selftests/intel_uncore.c b/drivers/gpu/drm/i915/selftests/intel_uncore.c
index 2d0fef2cfca6..3cac22eb47ce 100644
--- a/drivers/gpu/drm/i915/selftests/intel_uncore.c
+++ b/drivers/gpu/drm/i915/selftests/intel_uncore.c
@@ -127,7 +127,7 @@ static int intel_uncore_check_forcewake_domains(struct drm_i915_private *dev_pri
return 0;
valid = kzalloc(BITS_TO_LONGS(FW_RANGE) * sizeof(*valid),
- GFP_TEMPORARY);
+ GFP_KERNEL);
if (!valid)
return -ENOMEM;
diff --git a/drivers/gpu/drm/lib/drm_random.c b/drivers/gpu/drm/lib/drm_random.c
index 7b12a68c3b54..a78c4b483e8d 100644
--- a/drivers/gpu/drm/lib/drm_random.c
+++ b/drivers/gpu/drm/lib/drm_random.c
@@ -28,7 +28,7 @@ unsigned int *drm_random_order(unsigned int count, struct rnd_state *state)
{
unsigned int *order, i;
- order = kmalloc_array(count, sizeof(*order), GFP_TEMPORARY);
+ order = kmalloc_array(count, sizeof(*order), GFP_KERNEL);
if (!order)
return order;
diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
index 8a75c0bd8a78..5d0a75d4b249 100644
--- a/drivers/gpu/drm/msm/msm_gem_submit.c
+++ b/drivers/gpu/drm/msm/msm_gem_submit.c
@@ -40,7 +40,7 @@ static struct msm_gem_submit *submit_create(struct drm_device *dev,
if (sz > SIZE_MAX)
return NULL;
- submit = kmalloc(sz, GFP_TEMPORARY | __GFP_NOWARN | __GFP_NORETRY);
+ submit = kmalloc(sz, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY);
if (!submit)
return NULL;
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c
index 4a57defc99b3..1399d923d446 100644
--- a/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c
+++ b/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/base.c
@@ -171,7 +171,7 @@ nvkm_gpio_fini(struct nvkm_subdev *subdev, bool suspend)
return 0;
}
-static struct dmi_system_id gpio_reset_ids[] = {
+static const struct dmi_system_id gpio_reset_ids[] = {
{
.ident = "Apple Macbook 10,1",
.matches = {
diff --git a/drivers/gpu/drm/selftests/test-drm_mm.c b/drivers/gpu/drm/selftests/test-drm_mm.c
index dfdd858eda0a..86eb4c185a28 100644
--- a/drivers/gpu/drm/selftests/test-drm_mm.c
+++ b/drivers/gpu/drm/selftests/test-drm_mm.c
@@ -1627,7 +1627,7 @@ static int igt_topdown(void *ignored)
goto err;
bitmap = kzalloc(count / BITS_PER_LONG * sizeof(unsigned long),
- GFP_TEMPORARY);
+ GFP_KERNEL);
if (!bitmap)
goto err_nodes;
@@ -1741,7 +1741,7 @@ static int igt_bottomup(void *ignored)
goto err;
bitmap = kzalloc(count / BITS_PER_LONG * sizeof(unsigned long),
- GFP_TEMPORARY);
+ GFP_KERNEL);
if (!bitmap)
goto err_nodes;
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index cba11f13d994..180ce6296416 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -109,8 +109,8 @@ static ssize_t ttm_bo_global_show(struct kobject *kobj,
struct ttm_bo_global *glob =
container_of(kobj, struct ttm_bo_global, kobj);
- return snprintf(buffer, PAGE_SIZE, "%lu\n",
- (unsigned long) atomic_read(&glob->bo_count));
+ return snprintf(buffer, PAGE_SIZE, "%d\n",
+ atomic_read(&glob->bo_count));
}
static struct attribute *ttm_bo_global_attrs[] = {
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index d0459b392e5e..c934ad5b3903 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -469,6 +469,7 @@ static int ttm_buffer_object_transfer(struct ttm_buffer_object *bo,
* TODO: Explicit member copy would probably be better here.
*/
+ atomic_inc(&bo->glob->bo_count);
INIT_LIST_HEAD(&fbo->ddestroy);
INIT_LIST_HEAD(&fbo->lru);
INIT_LIST_HEAD(&fbo->swap);
diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c
index 579bdf93be43..14a94d90c028 100644
--- a/drivers/hwmon/acpi_power_meter.c
+++ b/drivers/hwmon/acpi_power_meter.c
@@ -973,7 +973,7 @@ static int __init enable_cap_knobs(const struct dmi_system_id *d)
return 0;
}
-static struct dmi_system_id __initdata pm_dmi_table[] = {
+static const struct dmi_system_id pm_dmi_table[] __initconst = {
{
enable_cap_knobs, "IBM Active Energy Manager",
{
diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c
index 76c34f4fde13..5c677ba44014 100644
--- a/drivers/hwmon/applesmc.c
+++ b/drivers/hwmon/applesmc.c
@@ -1247,7 +1247,7 @@ static int applesmc_dmi_match(const struct dmi_system_id *id)
* Note that DMI_MATCH(...,"MacBook") will match "MacBookPro1,1".
* So we need to put "Apple MacBook Pro" before "Apple MacBook".
*/
-static __initdata struct dmi_system_id applesmc_whitelist[] = {
+static const struct dmi_system_id applesmc_whitelist[] __initconst = {
{ applesmc_dmi_match, "Apple MacBook Air", {
DMI_MATCH(DMI_BOARD_VENDOR, "Apple"),
DMI_MATCH(DMI_PRODUCT_NAME, "MacBookAir") },
diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c
index 3189246302a6..c7c9e95e58a8 100644
--- a/drivers/hwmon/dell-smm-hwmon.c
+++ b/drivers/hwmon/dell-smm-hwmon.c
@@ -890,7 +890,7 @@ static const struct i8k_config_data i8k_config_data[] = {
},
};
-static struct dmi_system_id i8k_dmi_table[] __initdata = {
+static const struct dmi_system_id i8k_dmi_table[] __initconst = {
{
.ident = "Dell Inspiron",
.matches = {
@@ -1013,7 +1013,7 @@ MODULE_DEVICE_TABLE(dmi, i8k_dmi_table);
* of affected Dell machines for which we disallow I8K_SMM_GET_FAN_TYPE call.
* See bug: https://bugzilla.kernel.org/show_bug.cgi?id=100121
*/
-static struct dmi_system_id i8k_blacklist_fan_type_dmi_table[] __initdata = {
+static const struct dmi_system_id i8k_blacklist_fan_type_dmi_table[] __initconst = {
{
.ident = "Dell Studio XPS 8000",
.matches = {
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
index edc0cfb6fc1a..c06dce2c1da7 100644
--- a/drivers/i2c/busses/Kconfig
+++ b/drivers/i2c/busses/Kconfig
@@ -336,6 +336,16 @@ config I2C_POWERMAC
comment "I2C system bus drivers (mostly embedded / system-on-chip)"
+config I2C_ALTERA
+ tristate "Altera Soft IP I2C"
+ depends on (ARCH_SOCFPGA || NIOS2) && OF
+ help
+ If you say yes to this option, support will be included for the
+ Altera Soft IP I2C interfaces on SoCFPGA and Nios2 architectures.
+
+ This driver can also be built as a module. If so, the module
+ will be called i2c-altera.
+
config I2C_ASPEED
tristate "Aspeed I2C Controller"
depends on ARCH_ASPEED || COMPILE_TEST
@@ -935,6 +945,16 @@ config I2C_STM32F4
This driver can also be built as module. If so, the module
will be called i2c-stm32f4.
+config I2C_STM32F7
+ tristate "STMicroelectronics STM32F7 I2C support"
+ depends on ARCH_STM32 || COMPILE_TEST
+ help
+ Enable this option to add support for STM32 I2C controller embedded
+ in STM32F7 SoCs.
+
+ This driver can also be built as module. If so, the module
+ will be called i2c-stm32f7.
+
config I2C_STU300
tristate "ST Microelectronics DDC I2C interface"
depends on MACH_U300
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
index 562daf738048..47f3ac9a695a 100644
--- a/drivers/i2c/busses/Makefile
+++ b/drivers/i2c/busses/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_I2C_HYDRA) += i2c-hydra.o
obj-$(CONFIG_I2C_POWERMAC) += i2c-powermac.o
# Embedded system I2C/SMBus host controller drivers
+obj-$(CONFIG_I2C_ALTERA) += i2c-altera.o
obj-$(CONFIG_I2C_ASPEED) += i2c-aspeed.o
obj-$(CONFIG_I2C_AT91) += i2c-at91.o
obj-$(CONFIG_I2C_AU1550) += i2c-au1550.o
@@ -93,6 +94,7 @@ obj-$(CONFIG_I2C_SIRF) += i2c-sirf.o
obj-$(CONFIG_I2C_SPRD) += i2c-sprd.o
obj-$(CONFIG_I2C_ST) += i2c-st.o
obj-$(CONFIG_I2C_STM32F4) += i2c-stm32f4.o
+obj-$(CONFIG_I2C_STM32F7) += i2c-stm32f7.o
obj-$(CONFIG_I2C_STU300) += i2c-stu300.o
obj-$(CONFIG_I2C_SUN6I_P2WI) += i2c-sun6i-p2wi.o
obj-$(CONFIG_I2C_TEGRA) += i2c-tegra.o
diff --git a/drivers/i2c/busses/i2c-altera.c b/drivers/i2c/busses/i2c-altera.c
new file mode 100644
index 000000000000..f5e1941e65b5
--- /dev/null
+++ b/drivers/i2c/busses/i2c-altera.c
@@ -0,0 +1,511 @@
+/*
+ * Copyright Intel Corporation (C) 2017.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Based on the i2c-axxia.c driver.
+ */
+#include <linux/clk.h>
+#include <linux/clkdev.h>
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/iopoll.h>
+#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/io.h>
+#include <linux/kernel.h>
+#include <linux/platform_device.h>
+
+#define ALTR_I2C_TFR_CMD 0x00 /* Transfer Command register */
+#define ALTR_I2C_TFR_CMD_STA BIT(9) /* send START before byte */
+#define ALTR_I2C_TFR_CMD_STO BIT(8) /* send STOP after byte */
+#define ALTR_I2C_TFR_CMD_RW_D BIT(0) /* Direction of transfer */
+#define ALTR_I2C_RX_DATA 0x04 /* RX data FIFO register */
+#define ALTR_I2C_CTRL 0x08 /* Control register */
+#define ALTR_I2C_CTRL_RXT_SHFT 4 /* RX FIFO Threshold */
+#define ALTR_I2C_CTRL_TCT_SHFT 2 /* TFER CMD FIFO Threshold */
+#define ALTR_I2C_CTRL_BSPEED BIT(1) /* Bus Speed (1=Fast) */
+#define ALTR_I2C_CTRL_EN BIT(0) /* Enable Core (1=Enable) */
+#define ALTR_I2C_ISER 0x0C /* Interrupt Status Enable register */
+#define ALTR_I2C_ISER_RXOF_EN BIT(4) /* Enable RX OVERFLOW IRQ */
+#define ALTR_I2C_ISER_ARB_EN BIT(3) /* Enable ARB LOST IRQ */
+#define ALTR_I2C_ISER_NACK_EN BIT(2) /* Enable NACK DET IRQ */
+#define ALTR_I2C_ISER_RXRDY_EN BIT(1) /* Enable RX Ready IRQ */
+#define ALTR_I2C_ISER_TXRDY_EN BIT(0) /* Enable TX Ready IRQ */
+#define ALTR_I2C_ISR 0x10 /* Interrupt Status register */
+#define ALTR_I2C_ISR_RXOF BIT(4) /* RX OVERFLOW IRQ */
+#define ALTR_I2C_ISR_ARB BIT(3) /* ARB LOST IRQ */
+#define ALTR_I2C_ISR_NACK BIT(2) /* NACK DET IRQ */
+#define ALTR_I2C_ISR_RXRDY BIT(1) /* RX Ready IRQ */
+#define ALTR_I2C_ISR_TXRDY BIT(0) /* TX Ready IRQ */
+#define ALTR_I2C_STATUS 0x14 /* Status register */
+#define ALTR_I2C_STAT_CORE BIT(0) /* Core Status (0=idle) */
+#define ALTR_I2C_TC_FIFO_LVL 0x18 /* Transfer FIFO LVL register */
+#define ALTR_I2C_RX_FIFO_LVL 0x1C /* Receive FIFO LVL register */
+#define ALTR_I2C_SCL_LOW 0x20 /* SCL low count register */
+#define ALTR_I2C_SCL_HIGH 0x24 /* SCL high count register */
+#define ALTR_I2C_SDA_HOLD 0x28 /* SDA hold count register */
+
+#define ALTR_I2C_ALL_IRQ (ALTR_I2C_ISR_RXOF | ALTR_I2C_ISR_ARB | \
+ ALTR_I2C_ISR_NACK | ALTR_I2C_ISR_RXRDY | \
+ ALTR_I2C_ISR_TXRDY)
+
+#define ALTR_I2C_THRESHOLD 0 /* IRQ Threshold at 1 element */
+#define ALTR_I2C_DFLT_FIFO_SZ 4
+#define ALTR_I2C_TIMEOUT 100000 /* 100ms */
+#define ALTR_I2C_XFER_TIMEOUT (msecs_to_jiffies(250))
+
+/**
+ * altr_i2c_dev - I2C device context
+ * @base: pointer to register struct
+ * @msg: pointer to current message
+ * @msg_len: number of bytes transferred in msg
+ * @msg_err: error code for completed message
+ * @msg_complete: xfer completion object
+ * @dev: device reference
+ * @adapter: core i2c abstraction
+ * @i2c_clk: clock reference for i2c input clock
+ * @bus_clk_rate: current i2c bus clock rate
+ * @buf: ptr to msg buffer for easier use.
+ * @fifo_size: size of the FIFO passed in.
+ * @isr_mask: cached copy of local ISR enables.
+ * @isr_status: cached copy of local ISR status.
+ * @lock: spinlock for IRQ synchronization.
+ */
+struct altr_i2c_dev {
+ void __iomem *base;
+ struct i2c_msg *msg;
+ size_t msg_len;
+ int msg_err;
+ struct completion msg_complete;
+ struct device *dev;
+ struct i2c_adapter adapter;
+ struct clk *i2c_clk;
+ u32 bus_clk_rate;
+ u8 *buf;
+ u32 fifo_size;
+ u32 isr_mask;
+ u32 isr_status;
+ spinlock_t lock; /* IRQ synchronization */
+};
+
+static void
+altr_i2c_int_enable(struct altr_i2c_dev *idev, u32 mask, bool enable)
+{
+ unsigned long flags;
+ u32 int_en;
+
+ spin_lock_irqsave(&idev->lock, flags);
+
+ int_en = readl(idev->base + ALTR_I2C_ISER);
+ if (enable)
+ idev->isr_mask = int_en | mask;
+ else
+ idev->isr_mask = int_en & ~mask;
+
+ writel(idev->isr_mask, idev->base + ALTR_I2C_ISER);
+
+ spin_unlock_irqrestore(&idev->lock, flags);
+}
+
+static void altr_i2c_int_clear(struct altr_i2c_dev *idev, u32 mask)
+{
+ u32 int_en = readl(idev->base + ALTR_I2C_ISR);
+
+ writel(int_en | mask, idev->base + ALTR_I2C_ISR);
+}
+
+static void altr_i2c_core_disable(struct altr_i2c_dev *idev)
+{
+ u32 tmp = readl(idev->base + ALTR_I2C_CTRL);
+
+ writel(tmp & ~ALTR_I2C_CTRL_EN, idev->base + ALTR_I2C_CTRL);
+}
+
+static void altr_i2c_core_enable(struct altr_i2c_dev *idev)
+{
+ u32 tmp = readl(idev->base + ALTR_I2C_CTRL);
+
+ writel(tmp | ALTR_I2C_CTRL_EN, idev->base + ALTR_I2C_CTRL);
+}
+
+static void altr_i2c_reset(struct altr_i2c_dev *idev)
+{
+ altr_i2c_core_disable(idev);
+ altr_i2c_core_enable(idev);
+}
+
+static inline void altr_i2c_stop(struct altr_i2c_dev *idev)
+{
+ writel(ALTR_I2C_TFR_CMD_STO, idev->base + ALTR_I2C_TFR_CMD);
+}
+
+static void altr_i2c_init(struct altr_i2c_dev *idev)
+{
+ u32 divisor = clk_get_rate(idev->i2c_clk) / idev->bus_clk_rate;
+ u32 clk_mhz = clk_get_rate(idev->i2c_clk) / 1000000;
+ u32 tmp = (ALTR_I2C_THRESHOLD << ALTR_I2C_CTRL_RXT_SHFT) |
+ (ALTR_I2C_THRESHOLD << ALTR_I2C_CTRL_TCT_SHFT);
+ u32 t_high, t_low;
+
+ if (idev->bus_clk_rate <= 100000) {
+ tmp &= ~ALTR_I2C_CTRL_BSPEED;
+ /* Standard mode SCL 50/50 */
+ t_high = divisor * 1 / 2;
+ t_low = divisor * 1 / 2;
+ } else {
+ tmp |= ALTR_I2C_CTRL_BSPEED;
+ /* Fast mode SCL 33/66 */
+ t_high = divisor * 1 / 3;
+ t_low = divisor * 2 / 3;
+ }
+ writel(tmp, idev->base + ALTR_I2C_CTRL);
+
+ dev_dbg(idev->dev, "rate=%uHz per_clk=%uMHz -> ratio=1:%u\n",
+ idev->bus_clk_rate, clk_mhz, divisor);
+
+ /* Reset controller */
+ altr_i2c_reset(idev);
+
+ /* SCL High Time */
+ writel(t_high, idev->base + ALTR_I2C_SCL_HIGH);
+ /* SCL Low Time */
+ writel(t_low, idev->base + ALTR_I2C_SCL_LOW);
+ /* SDA Hold Time, 300ns */
+ writel(div_u64(300 * clk_mhz, 1000), idev->base + ALTR_I2C_SDA_HOLD);
+
+ /* Mask all master interrupt bits */
+ altr_i2c_int_enable(idev, ALTR_I2C_ALL_IRQ, false);
+}
+
+/**
+ * altr_i2c_transfer - On the last byte to be transmitted, send
+ * a Stop bit on the last byte.
+ */
+static void altr_i2c_transfer(struct altr_i2c_dev *idev, u32 data)
+{
+ /* On the last byte to be transmitted, send STOP */
+ if (idev->msg_len == 1)
+ data |= ALTR_I2C_TFR_CMD_STO;
+ if (idev->msg_len > 0)
+ writel(data, idev->base + ALTR_I2C_TFR_CMD);
+}
+
+/**
+ * altr_i2c_empty_rx_fifo - Fetch data from RX FIFO until end of
+ * transfer. Send a Stop bit on the last byte.
+ */
+static void altr_i2c_empty_rx_fifo(struct altr_i2c_dev *idev)
+{
+ size_t rx_fifo_avail = readl(idev->base + ALTR_I2C_RX_FIFO_LVL);
+ int bytes_to_transfer = min(rx_fifo_avail, idev->msg_len);
+
+ while (bytes_to_transfer-- > 0) {
+ *idev->buf++ = readl(idev->base + ALTR_I2C_RX_DATA);
+ idev->msg_len--;
+ altr_i2c_transfer(idev, 0);
+ }
+}
+
+/**
+ * altr_i2c_fill_tx_fifo - Fill TX FIFO from current message buffer.
+ * @return: Number of bytes left to transfer.
+ */
+static int altr_i2c_fill_tx_fifo(struct altr_i2c_dev *idev)
+{
+ size_t tx_fifo_avail = idev->fifo_size - readl(idev->base +
+ ALTR_I2C_TC_FIFO_LVL);
+ int bytes_to_transfer = min(tx_fifo_avail, idev->msg_len);
+ int ret = idev->msg_len - bytes_to_transfer;
+
+ while (bytes_to_transfer-- > 0) {
+ altr_i2c_transfer(idev, *idev->buf++);
+ idev->msg_len--;
+ }
+
+ return ret;
+}
+
+static irqreturn_t altr_i2c_isr_quick(int irq, void *_dev)
+{
+ struct altr_i2c_dev *idev = _dev;
+ irqreturn_t ret = IRQ_HANDLED;
+
+ /* Read IRQ status but only interested in Enabled IRQs. */
+ idev->isr_status = readl(idev->base + ALTR_I2C_ISR) & idev->isr_mask;
+ if (idev->isr_status)
+ ret = IRQ_WAKE_THREAD;
+
+ return ret;
+}
+
+static irqreturn_t altr_i2c_isr(int irq, void *_dev)
+{
+ int ret;
+ bool read, finish = false;
+ struct altr_i2c_dev *idev = _dev;
+ u32 status = idev->isr_status;
+
+ if (!idev->msg) {
+ dev_warn(idev->dev, "unexpected interrupt\n");
+ altr_i2c_int_clear(idev, ALTR_I2C_ALL_IRQ);
+ return IRQ_HANDLED;
+ }
+ read = (idev->msg->flags & I2C_M_RD) != 0;
+
+ /* handle Lost Arbitration */
+ if (unlikely(status & ALTR_I2C_ISR_ARB)) {
+ altr_i2c_int_clear(idev, ALTR_I2C_ISR_ARB);
+ idev->msg_err = -EAGAIN;
+ finish = true;
+ } else if (unlikely(status & ALTR_I2C_ISR_NACK)) {
+ dev_dbg(idev->dev, "Could not get ACK\n");
+ idev->msg_err = -ENXIO;
+ altr_i2c_int_clear(idev, ALTR_I2C_ISR_NACK);
+ altr_i2c_stop(idev);
+ finish = true;
+ } else if (read && unlikely(status & ALTR_I2C_ISR_RXOF)) {
+ /* handle RX FIFO Overflow */
+ altr_i2c_empty_rx_fifo(idev);
+ altr_i2c_int_clear(idev, ALTR_I2C_ISR_RXRDY);
+ altr_i2c_stop(idev);
+ dev_err(idev->dev, "RX FIFO Overflow\n");
+ finish = true;
+ } else if (read && (status & ALTR_I2C_ISR_RXRDY)) {
+ /* RX FIFO needs service? */
+ altr_i2c_empty_rx_fifo(idev);
+ altr_i2c_int_clear(idev, ALTR_I2C_ISR_RXRDY);
+ if (!idev->msg_len)
+ finish = true;
+ } else if (!read && (status & ALTR_I2C_ISR_TXRDY)) {
+ /* TX FIFO needs service? */
+ altr_i2c_int_clear(idev, ALTR_I2C_ISR_TXRDY);
+ if (idev->msg_len > 0)
+ altr_i2c_fill_tx_fifo(idev);
+ else
+ finish = true;
+ } else {
+ dev_warn(idev->dev, "Unexpected interrupt: 0x%x\n", status);
+ altr_i2c_int_clear(idev, ALTR_I2C_ALL_IRQ);
+ }
+
+ if (finish) {
+ /* Wait for the Core to finish */
+ ret = readl_poll_timeout_atomic(idev->base + ALTR_I2C_STATUS,
+ status,
+ !(status & ALTR_I2C_STAT_CORE),
+ 1, ALTR_I2C_TIMEOUT);
+ if (ret)
+ dev_err(idev->dev, "message timeout\n");
+ altr_i2c_int_enable(idev, ALTR_I2C_ALL_IRQ, false);
+ altr_i2c_int_clear(idev, ALTR_I2C_ALL_IRQ);
+ complete(&idev->msg_complete);
+ dev_dbg(idev->dev, "Message Complete\n");
+ }
+
+ return IRQ_HANDLED;
+}
+
+static int altr_i2c_xfer_msg(struct altr_i2c_dev *idev, struct i2c_msg *msg)
+{
+ u32 imask = ALTR_I2C_ISR_RXOF | ALTR_I2C_ISR_ARB | ALTR_I2C_ISR_NACK;
+ unsigned long time_left;
+ u32 value;
+ u8 addr = i2c_8bit_addr_from_msg(msg);
+
+ idev->msg = msg;
+ idev->msg_len = msg->len;
+ idev->buf = msg->buf;
+ idev->msg_err = 0;
+ reinit_completion(&idev->msg_complete);
+ altr_i2c_core_enable(idev);
+
+ /* Make sure RX FIFO is empty */
+ do {
+ readl(idev->base + ALTR_I2C_RX_DATA);
+ } while (readl(idev->base + ALTR_I2C_RX_FIFO_LVL));
+
+ writel(ALTR_I2C_TFR_CMD_STA | addr, idev->base + ALTR_I2C_TFR_CMD);
+
+ if ((msg->flags & I2C_M_RD) != 0) {
+ imask |= ALTR_I2C_ISER_RXOF_EN | ALTR_I2C_ISER_RXRDY_EN;
+ altr_i2c_int_enable(idev, imask, true);
+ /* write the first byte to start the RX */
+ altr_i2c_transfer(idev, 0);
+ } else {
+ imask |= ALTR_I2C_ISR_TXRDY;
+ altr_i2c_int_enable(idev, imask, true);
+ altr_i2c_fill_tx_fifo(idev);
+ }
+
+ time_left = wait_for_completion_timeout(&idev->msg_complete,
+ ALTR_I2C_XFER_TIMEOUT);
+ altr_i2c_int_enable(idev, imask, false);
+
+ value = readl(idev->base + ALTR_I2C_STATUS) & ALTR_I2C_STAT_CORE;
+ if (value)
+ dev_err(idev->dev, "Core Status not IDLE...\n");
+
+ if (time_left == 0) {
+ idev->msg_err = -ETIMEDOUT;
+ dev_dbg(idev->dev, "Transaction timed out.\n");
+ }
+
+ altr_i2c_core_disable(idev);
+
+ return idev->msg_err;
+}
+
+static int
+altr_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
+{
+ struct altr_i2c_dev *idev = i2c_get_adapdata(adap);
+ int i, ret;
+
+ for (i = 0; i < num; i++) {
+ ret = altr_i2c_xfer_msg(idev, msgs++);
+ if (ret)
+ return ret;
+ }
+ return num;
+}
+
+static u32 altr_i2c_func(struct i2c_adapter *adap)
+{
+ return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
+}
+
+static const struct i2c_algorithm altr_i2c_algo = {
+ .master_xfer = altr_i2c_xfer,
+ .functionality = altr_i2c_func,
+};
+
+static int altr_i2c_probe(struct platform_device *pdev)
+{
+ struct altr_i2c_dev *idev = NULL;
+ struct resource *res;
+ int irq, ret;
+ u32 val;
+
+ idev = devm_kzalloc(&pdev->dev, sizeof(*idev), GFP_KERNEL);
+ if (!idev)
+ return -ENOMEM;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ idev->base = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(idev->base))
+ return PTR_ERR(idev->base);
+
+ irq = platform_get_irq(pdev, 0);
+ if (irq < 0) {
+ dev_err(&pdev->dev, "missing interrupt resource\n");
+ return irq;
+ }
+
+ idev->i2c_clk = devm_clk_get(&pdev->dev, NULL);
+ if (IS_ERR(idev->i2c_clk)) {
+ dev_err(&pdev->dev, "missing clock\n");
+ return PTR_ERR(idev->i2c_clk);
+ }
+
+ idev->dev = &pdev->dev;
+ init_completion(&idev->msg_complete);
+ spin_lock_init(&idev->lock);
+
+ val = device_property_read_u32(idev->dev, "fifo-size",
+ &idev->fifo_size);
+ if (val) {
+ dev_err(&pdev->dev, "FIFO size set to default of %d\n",
+ ALTR_I2C_DFLT_FIFO_SZ);
+ idev->fifo_size = ALTR_I2C_DFLT_FIFO_SZ;
+ }
+
+ val = device_property_read_u32(idev->dev, "clock-frequency",
+ &idev->bus_clk_rate);
+ if (val) {
+ dev_err(&pdev->dev, "Default to 100kHz\n");
+ idev->bus_clk_rate = 100000; /* default clock rate */
+ }
+
+ if (idev->bus_clk_rate > 400000) {
+ dev_err(&pdev->dev, "invalid clock-frequency %d\n",
+ idev->bus_clk_rate);
+ return -EINVAL;
+ }
+
+ ret = devm_request_threaded_irq(&pdev->dev, irq, altr_i2c_isr_quick,
+ altr_i2c_isr, IRQF_ONESHOT,
+ pdev->name, idev);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to claim IRQ %d\n", irq);
+ return ret;
+ }
+
+ ret = clk_prepare_enable(idev->i2c_clk);
+ if (ret) {
+ dev_err(&pdev->dev, "failed to enable clock\n");
+ return ret;
+ }
+
+ altr_i2c_init(idev);
+
+ i2c_set_adapdata(&idev->adapter, idev);
+ strlcpy(idev->adapter.name, pdev->name, sizeof(idev->adapter.name));
+ idev->adapter.owner = THIS_MODULE;
+ idev->adapter.algo = &altr_i2c_algo;
+ idev->adapter.dev.parent = &pdev->dev;
+ idev->adapter.dev.of_node = pdev->dev.of_node;
+
+ platform_set_drvdata(pdev, idev);
+
+ ret = i2c_add_adapter(&idev->adapter);
+ if (ret) {
+ clk_disable_unprepare(idev->i2c_clk);
+ return ret;
+ }
+ dev_info(&pdev->dev, "Altera SoftIP I2C Probe Complete\n");
+
+ return 0;
+}
+
+static int altr_i2c_remove(struct platform_device *pdev)
+{
+ struct altr_i2c_dev *idev = platform_get_drvdata(pdev);
+
+ clk_disable_unprepare(idev->i2c_clk);
+ i2c_del_adapter(&idev->adapter);
+
+ return 0;
+}
+
+/* Match table for of_platform binding */
+static const struct of_device_id altr_i2c_of_match[] = {
+ { .compatible = "altr,softip-i2c-v1.0" },
+ {},
+};
+MODULE_DEVICE_TABLE(of, altr_i2c_of_match);
+
+static struct platform_driver altr_i2c_driver = {
+ .probe = altr_i2c_probe,
+ .remove = altr_i2c_remove,
+ .driver = {
+ .name = "altera-i2c",
+ .of_match_table = altr_i2c_of_match,
+ },
+};
+
+module_platform_driver(altr_i2c_driver);
+
+MODULE_DESCRIPTION("Altera Soft IP I2C bus driver");
+MODULE_AUTHOR("Thor Thayer <thor.thayer@linux.intel.com>");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/i2c/busses/i2c-stm32.h b/drivers/i2c/busses/i2c-stm32.h
new file mode 100644
index 000000000000..dab51761f8c5
--- /dev/null
+++ b/drivers/i2c/busses/i2c-stm32.h
@@ -0,0 +1,20 @@
+/*
+ * i2c-stm32.h
+ *
+ * Copyright (C) M'boumba Cedric Madianga 2017
+ * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com>
+ *
+ * License terms: GNU General Public License (GPL), version 2
+ */
+
+#ifndef _I2C_STM32_H
+#define _I2C_STM32_H
+
+enum stm32_i2c_speed {
+ STM32_I2C_SPEED_STANDARD, /* 100 kHz */
+ STM32_I2C_SPEED_FAST, /* 400 kHz */
+ STM32_I2C_SPEED_FAST_PLUS, /* 1 MHz */
+ STM32_I2C_SPEED_END,
+};
+
+#endif /* _I2C_STM32_H */
diff --git a/drivers/i2c/busses/i2c-stm32f4.c b/drivers/i2c/busses/i2c-stm32f4.c
index aceb6f788564..4ec108496f15 100644
--- a/drivers/i2c/busses/i2c-stm32f4.c
+++ b/drivers/i2c/busses/i2c-stm32f4.c
@@ -27,6 +27,8 @@
#include <linux/platform_device.h>
#include <linux/reset.h>
+#include "i2c-stm32.h"
+
/* STM32F4 I2C offset registers */
#define STM32F4_I2C_CR1 0x00
#define STM32F4_I2C_CR2 0x04
@@ -90,12 +92,6 @@
#define STM32F4_I2C_MAX_FREQ 46U
#define HZ_TO_MHZ 1000000
-enum stm32f4_i2c_speed {
- STM32F4_I2C_SPEED_STANDARD, /* 100 kHz */
- STM32F4_I2C_SPEED_FAST, /* 400 kHz */
- STM32F4_I2C_SPEED_END,
-};
-
/**
* struct stm32f4_i2c_msg - client specific data
* @addr: 8-bit slave addr, including r/w bit
@@ -159,7 +155,7 @@ static int stm32f4_i2c_set_periph_clk_freq(struct stm32f4_i2c_dev *i2c_dev)
i2c_dev->parent_rate = clk_get_rate(i2c_dev->clk);
freq = DIV_ROUND_UP(i2c_dev->parent_rate, HZ_TO_MHZ);
- if (i2c_dev->speed == STM32F4_I2C_SPEED_STANDARD) {
+ if (i2c_dev->speed == STM32_I2C_SPEED_STANDARD) {
/*
* To reach 100 kHz, the parent clk frequency should be between
* a minimum value of 2 MHz and a maximum value of 46 MHz due
@@ -216,7 +212,7 @@ static void stm32f4_i2c_set_rise_time(struct stm32f4_i2c_dev *i2c_dev)
* is not higher than 46 MHz . As a result trise is at most 4 bits wide
* and so fits into the TRISE bits [5:0].
*/
- if (i2c_dev->speed == STM32F4_I2C_SPEED_STANDARD)
+ if (i2c_dev->speed == STM32_I2C_SPEED_STANDARD)
trise = freq + 1;
else
trise = freq * 3 / 10 + 1;
@@ -230,7 +226,7 @@ static void stm32f4_i2c_set_speed_mode(struct stm32f4_i2c_dev *i2c_dev)
u32 val;
u32 ccr = 0;
- if (i2c_dev->speed == STM32F4_I2C_SPEED_STANDARD) {
+ if (i2c_dev->speed == STM32_I2C_SPEED_STANDARD) {
/*
* In standard mode:
* t_scl_high = t_scl_low = CCR * I2C parent clk period
@@ -808,10 +804,10 @@ static int stm32f4_i2c_probe(struct platform_device *pdev)
udelay(2);
reset_control_deassert(rst);
- i2c_dev->speed = STM32F4_I2C_SPEED_STANDARD;
+ i2c_dev->speed = STM32_I2C_SPEED_STANDARD;
ret = of_property_read_u32(np, "clock-frequency", &clk_rate);
if (!ret && clk_rate >= 400000)
- i2c_dev->speed = STM32F4_I2C_SPEED_FAST;
+ i2c_dev->speed = STM32_I2C_SPEED_FAST;
i2c_dev->dev = &pdev->dev;
diff --git a/drivers/i2c/busses/i2c-stm32f7.c b/drivers/i2c/busses/i2c-stm32f7.c
new file mode 100644
index 000000000000..47c67b0ca896
--- /dev/null
+++ b/drivers/i2c/busses/i2c-stm32f7.c
@@ -0,0 +1,972 @@
+/*
+ * Driver for STMicroelectronics STM32F7 I2C controller
+ *
+ * This I2C controller is described in the STM32F75xxx and STM32F74xxx Soc
+ * reference manual.
+ * Please see below a link to the documentation:
+ * http://www.st.com/resource/en/reference_manual/dm00124865.pdf
+ *
+ * Copyright (C) M'boumba Cedric Madianga 2017
+ * Author: M'boumba Cedric Madianga <cedric.madianga@gmail.com>
+ *
+ * This driver is based on i2c-stm32f4.c
+ *
+ * License terms: GNU General Public License (GPL), version 2
+ */
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/err.h>
+#include <linux/i2c.h>
+#include <linux/interrupt.h>
+#include <linux/io.h>
+#include <linux/iopoll.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+#include <linux/platform_device.h>
+#include <linux/reset.h>
+#include <linux/slab.h>
+
+#include "i2c-stm32.h"
+
+/* STM32F7 I2C registers */
+#define STM32F7_I2C_CR1 0x00
+#define STM32F7_I2C_CR2 0x04
+#define STM32F7_I2C_TIMINGR 0x10
+#define STM32F7_I2C_ISR 0x18
+#define STM32F7_I2C_ICR 0x1C
+#define STM32F7_I2C_RXDR 0x24
+#define STM32F7_I2C_TXDR 0x28
+
+/* STM32F7 I2C control 1 */
+#define STM32F7_I2C_CR1_ANFOFF BIT(12)
+#define STM32F7_I2C_CR1_ERRIE BIT(7)
+#define STM32F7_I2C_CR1_TCIE BIT(6)
+#define STM32F7_I2C_CR1_STOPIE BIT(5)
+#define STM32F7_I2C_CR1_NACKIE BIT(4)
+#define STM32F7_I2C_CR1_ADDRIE BIT(3)
+#define STM32F7_I2C_CR1_RXIE BIT(2)
+#define STM32F7_I2C_CR1_TXIE BIT(1)
+#define STM32F7_I2C_CR1_PE BIT(0)
+#define STM32F7_I2C_ALL_IRQ_MASK (STM32F7_I2C_CR1_ERRIE \
+ | STM32F7_I2C_CR1_TCIE \
+ | STM32F7_I2C_CR1_STOPIE \
+ | STM32F7_I2C_CR1_NACKIE \
+ | STM32F7_I2C_CR1_RXIE \
+ | STM32F7_I2C_CR1_TXIE)
+
+/* STM32F7 I2C control 2 */
+#define STM32F7_I2C_CR2_RELOAD BIT(24)
+#define STM32F7_I2C_CR2_NBYTES_MASK GENMASK(23, 16)
+#define STM32F7_I2C_CR2_NBYTES(n) (((n) & 0xff) << 16)
+#define STM32F7_I2C_CR2_NACK BIT(15)
+#define STM32F7_I2C_CR2_STOP BIT(14)
+#define STM32F7_I2C_CR2_START BIT(13)
+#define STM32F7_I2C_CR2_RD_WRN BIT(10)
+#define STM32F7_I2C_CR2_SADD7_MASK GENMASK(7, 1)
+#define STM32F7_I2C_CR2_SADD7(n) (((n) & 0x7f) << 1)
+
+/* STM32F7 I2C Interrupt Status */
+#define STM32F7_I2C_ISR_BUSY BIT(15)
+#define STM32F7_I2C_ISR_ARLO BIT(9)
+#define STM32F7_I2C_ISR_BERR BIT(8)
+#define STM32F7_I2C_ISR_TCR BIT(7)
+#define STM32F7_I2C_ISR_TC BIT(6)
+#define STM32F7_I2C_ISR_STOPF BIT(5)
+#define STM32F7_I2C_ISR_NACKF BIT(4)
+#define STM32F7_I2C_ISR_RXNE BIT(2)
+#define STM32F7_I2C_ISR_TXIS BIT(1)
+
+/* STM32F7 I2C Interrupt Clear */
+#define STM32F7_I2C_ICR_ARLOCF BIT(9)
+#define STM32F7_I2C_ICR_BERRCF BIT(8)
+#define STM32F7_I2C_ICR_STOPCF BIT(5)
+#define STM32F7_I2C_ICR_NACKCF BIT(4)
+
+/* STM32F7 I2C Timing */
+#define STM32F7_I2C_TIMINGR_PRESC(n) (((n) & 0xf) << 28)
+#define STM32F7_I2C_TIMINGR_SCLDEL(n) (((n) & 0xf) << 20)
+#define STM32F7_I2C_TIMINGR_SDADEL(n) (((n) & 0xf) << 16)
+#define STM32F7_I2C_TIMINGR_SCLH(n) (((n) & 0xff) << 8)
+#define STM32F7_I2C_TIMINGR_SCLL(n) ((n) & 0xff)
+
+#define STM32F7_I2C_MAX_LEN 0xff
+
+#define STM32F7_I2C_DNF_DEFAULT 0
+#define STM32F7_I2C_DNF_MAX 16
+
+#define STM32F7_I2C_ANALOG_FILTER_ENABLE 1
+#define STM32F7_I2C_ANALOG_FILTER_DELAY_MIN 50 /* ns */
+#define STM32F7_I2C_ANALOG_FILTER_DELAY_MAX 260 /* ns */
+
+#define STM32F7_I2C_RISE_TIME_DEFAULT 25 /* ns */
+#define STM32F7_I2C_FALL_TIME_DEFAULT 10 /* ns */
+
+#define STM32F7_PRESC_MAX BIT(4)
+#define STM32F7_SCLDEL_MAX BIT(4)
+#define STM32F7_SDADEL_MAX BIT(4)
+#define STM32F7_SCLH_MAX BIT(8)
+#define STM32F7_SCLL_MAX BIT(8)
+
+/**
+ * struct stm32f7_i2c_spec - private i2c specification timing
+ * @rate: I2C bus speed (Hz)
+ * @rate_min: 80% of I2C bus speed (Hz)
+ * @rate_max: 100% of I2C bus speed (Hz)
+ * @fall_max: Max fall time of both SDA and SCL signals (ns)
+ * @rise_max: Max rise time of both SDA and SCL signals (ns)
+ * @hddat_min: Min data hold time (ns)
+ * @vddat_max: Max data valid time (ns)
+ * @sudat_min: Min data setup time (ns)
+ * @l_min: Min low period of the SCL clock (ns)
+ * @h_min: Min high period of the SCL clock (ns)
+ */
+struct stm32f7_i2c_spec {
+ u32 rate;
+ u32 rate_min;
+ u32 rate_max;
+ u32 fall_max;
+ u32 rise_max;
+ u32 hddat_min;
+ u32 vddat_max;
+ u32 sudat_min;
+ u32 l_min;
+ u32 h_min;
+};
+
+/**
+ * struct stm32f7_i2c_setup - private I2C timing setup parameters
+ * @speed: I2C speed mode (standard, Fast Plus)
+ * @speed_freq: I2C speed frequency (Hz)
+ * @clock_src: I2C clock source frequency (Hz)
+ * @rise_time: Rise time (ns)
+ * @fall_time: Fall time (ns)
+ * @dnf: Digital filter coefficient (0-16)
+ * @analog_filter: Analog filter delay (On/Off)
+ */
+struct stm32f7_i2c_setup {
+ enum stm32_i2c_speed speed;
+ u32 speed_freq;
+ u32 clock_src;
+ u32 rise_time;
+ u32 fall_time;
+ u8 dnf;
+ bool analog_filter;
+};
+
+/**
+ * struct stm32f7_i2c_timings - private I2C output parameters
+ * @prec: Prescaler value
+ * @scldel: Data setup time
+ * @sdadel: Data hold time
+ * @sclh: SCL high period (master mode)
+ * @sclh: SCL low period (master mode)
+ */
+struct stm32f7_i2c_timings {
+ struct list_head node;
+ u8 presc;
+ u8 scldel;
+ u8 sdadel;
+ u8 sclh;
+ u8 scll;
+};
+
+/**
+ * struct stm32f7_i2c_msg - client specific data
+ * @addr: 8-bit slave addr, including r/w bit
+ * @count: number of bytes to be transferred
+ * @buf: data buffer
+ * @result: result of the transfer
+ * @stop: last I2C msg to be sent, i.e. STOP to be generated
+ */
+struct stm32f7_i2c_msg {
+ u8 addr;
+ u32 count;
+ u8 *buf;
+ int result;
+ bool stop;
+};
+
+/**
+ * struct stm32f7_i2c_dev - private data of the controller
+ * @adap: I2C adapter for this controller
+ * @dev: device for this controller
+ * @base: virtual memory area
+ * @complete: completion of I2C message
+ * @clk: hw i2c clock
+ * @speed: I2C clock frequency of the controller. Standard, Fast or Fast+
+ * @msg: Pointer to data to be written
+ * @msg_num: number of I2C messages to be executed
+ * @msg_id: message identifiant
+ * @f7_msg: customized i2c msg for driver usage
+ * @setup: I2C timing input setup
+ * @timing: I2C computed timings
+ */
+struct stm32f7_i2c_dev {
+ struct i2c_adapter adap;
+ struct device *dev;
+ void __iomem *base;
+ struct completion complete;
+ struct clk *clk;
+ int speed;
+ struct i2c_msg *msg;
+ unsigned int msg_num;
+ unsigned int msg_id;
+ struct stm32f7_i2c_msg f7_msg;
+ struct stm32f7_i2c_setup *setup;
+ struct stm32f7_i2c_timings timing;
+};
+
+/**
+ * All these values are coming from I2C Specification, Version 6.0, 4th of
+ * April 2014.
+ *
+ * Table10. Characteristics of the SDA and SCL bus lines for Standard, Fast,
+ * and Fast-mode Plus I2C-bus devices
+ */
+static struct stm32f7_i2c_spec i2c_specs[] = {
+ [STM32_I2C_SPEED_STANDARD] = {
+ .rate = 100000,
+ .rate_min = 80000,
+ .rate_max = 100000,
+ .fall_max = 300,
+ .rise_max = 1000,
+ .hddat_min = 0,
+ .vddat_max = 3450,
+ .sudat_min = 250,
+ .l_min = 4700,
+ .h_min = 4000,
+ },
+ [STM32_I2C_SPEED_FAST] = {
+ .rate = 400000,
+ .rate_min = 320000,
+ .rate_max = 400000,
+ .fall_max = 300,
+ .rise_max = 300,
+ .hddat_min = 0,
+ .vddat_max = 900,
+ .sudat_min = 100,
+ .l_min = 1300,
+ .h_min = 600,
+ },
+ [STM32_I2C_SPEED_FAST_PLUS] = {
+ .rate = 1000000,
+ .rate_min = 800000,
+ .rate_max = 1000000,
+ .fall_max = 100,
+ .rise_max = 120,
+ .hddat_min = 0,
+ .vddat_max = 450,
+ .sudat_min = 50,
+ .l_min = 500,
+ .h_min = 260,
+ },
+};
+
+struct stm32f7_i2c_setup stm32f7_setup = {
+ .rise_time = STM32F7_I2C_RISE_TIME_DEFAULT,
+ .fall_time = STM32F7_I2C_FALL_TIME_DEFAULT,
+ .dnf = STM32F7_I2C_DNF_DEFAULT,
+ .analog_filter = STM32F7_I2C_ANALOG_FILTER_ENABLE,
+};
+
+static inline void stm32f7_i2c_set_bits(void __iomem *reg, u32 mask)
+{
+ writel_relaxed(readl_relaxed(reg) | mask, reg);
+}
+
+static inline void stm32f7_i2c_clr_bits(void __iomem *reg, u32 mask)
+{
+ writel_relaxed(readl_relaxed(reg) & ~mask, reg);
+}
+
+static int stm32f7_i2c_compute_timing(struct stm32f7_i2c_dev *i2c_dev,
+ struct stm32f7_i2c_setup *setup,
+ struct stm32f7_i2c_timings *output)
+{
+ u32 p_prev = STM32F7_PRESC_MAX;
+ u32 i2cclk = DIV_ROUND_CLOSEST(NSEC_PER_SEC,
+ setup->clock_src);
+ u32 i2cbus = DIV_ROUND_CLOSEST(NSEC_PER_SEC,
+ setup->speed_freq);
+ u32 clk_error_prev = i2cbus;
+ u32 tsync;
+ u32 af_delay_min, af_delay_max;
+ u32 dnf_delay;
+ u32 clk_min, clk_max;
+ int sdadel_min, sdadel_max;
+ int scldel_min;
+ struct stm32f7_i2c_timings *v, *_v, *s;
+ struct list_head solutions;
+ u16 p, l, a, h;
+ int ret = 0;
+
+ if (setup->speed >= STM32_I2C_SPEED_END) {
+ dev_err(i2c_dev->dev, "speed out of bound {%d/%d}\n",
+ setup->speed, STM32_I2C_SPEED_END - 1);
+ return -EINVAL;
+ }
+
+ if ((setup->rise_time > i2c_specs[setup->speed].rise_max) ||
+ (setup->fall_time > i2c_specs[setup->speed].fall_max)) {
+ dev_err(i2c_dev->dev,
+ "timings out of bound Rise{%d>%d}/Fall{%d>%d}\n",
+ setup->rise_time, i2c_specs[setup->speed].rise_max,
+ setup->fall_time, i2c_specs[setup->speed].fall_max);
+ return -EINVAL;
+ }
+
+ if (setup->dnf > STM32F7_I2C_DNF_MAX) {
+ dev_err(i2c_dev->dev,
+ "DNF out of bound %d/%d\n",
+ setup->dnf, STM32F7_I2C_DNF_MAX);
+ return -EINVAL;
+ }
+
+ if (setup->speed_freq > i2c_specs[setup->speed].rate) {
+ dev_err(i2c_dev->dev, "ERROR: Freq {%d/%d}\n",
+ setup->speed_freq, i2c_specs[setup->speed].rate);
+ return -EINVAL;
+ }
+
+ /* Analog and Digital Filters */
+ af_delay_min =
+ (setup->analog_filter ?
+ STM32F7_I2C_ANALOG_FILTER_DELAY_MIN : 0);
+ af_delay_max =
+ (setup->analog_filter ?
+ STM32F7_I2C_ANALOG_FILTER_DELAY_MAX : 0);
+ dnf_delay = setup->dnf * i2cclk;
+
+ sdadel_min = setup->fall_time - i2c_specs[setup->speed].hddat_min -
+ af_delay_min - (setup->dnf + 3) * i2cclk;
+
+ sdadel_max = i2c_specs[setup->speed].vddat_max - setup->rise_time -
+ af_delay_max - (setup->dnf + 4) * i2cclk;
+
+ scldel_min = setup->rise_time + i2c_specs[setup->speed].sudat_min;
+
+ if (sdadel_min < 0)
+ sdadel_min = 0;
+ if (sdadel_max < 0)
+ sdadel_max = 0;
+
+ dev_dbg(i2c_dev->dev, "SDADEL(min/max): %i/%i, SCLDEL(Min): %i\n",
+ sdadel_min, sdadel_max, scldel_min);
+
+ INIT_LIST_HEAD(&solutions);
+ /* Compute possible values for PRESC, SCLDEL and SDADEL */
+ for (p = 0; p < STM32F7_PRESC_MAX; p++) {
+ for (l = 0; l < STM32F7_SCLDEL_MAX; l++) {
+ u32 scldel = (l + 1) * (p + 1) * i2cclk;
+
+ if (scldel < scldel_min)
+ continue;
+
+ for (a = 0; a < STM32F7_SDADEL_MAX; a++) {
+ u32 sdadel = (a * (p + 1) + 1) * i2cclk;
+
+ if (((sdadel >= sdadel_min) &&
+ (sdadel <= sdadel_max)) &&
+ (p != p_prev)) {
+ v = kmalloc(sizeof(*v), GFP_KERNEL);
+ if (!v) {
+ ret = -ENOMEM;
+ goto exit;
+ }
+
+ v->presc = p;
+ v->scldel = l;
+ v->sdadel = a;
+ p_prev = p;
+
+ list_add_tail(&v->node,
+ &solutions);
+ }
+ }
+ }
+ }
+
+ if (list_empty(&solutions)) {
+ dev_err(i2c_dev->dev, "no Prescaler solution\n");
+ ret = -EPERM;
+ goto exit;
+ }
+
+ tsync = af_delay_min + dnf_delay + (2 * i2cclk);
+ s = NULL;
+ clk_max = NSEC_PER_SEC / i2c_specs[setup->speed].rate_min;
+ clk_min = NSEC_PER_SEC / i2c_specs[setup->speed].rate_max;
+
+ /*
+ * Among Prescaler possibilities discovered above figures out SCL Low
+ * and High Period. Provided:
+ * - SCL Low Period has to be higher than SCL Clock Low Period
+ * defined by I2C Specification. I2C Clock has to be lower than
+ * (SCL Low Period - Analog/Digital filters) / 4.
+ * - SCL High Period has to be lower than SCL Clock High Period
+ * defined by I2C Specification
+ * - I2C Clock has to be lower than SCL High Period
+ */
+ list_for_each_entry(v, &solutions, node) {
+ u32 prescaler = (v->presc + 1) * i2cclk;
+
+ for (l = 0; l < STM32F7_SCLL_MAX; l++) {
+ u32 tscl_l = (l + 1) * prescaler + tsync;
+
+ if ((tscl_l < i2c_specs[setup->speed].l_min) ||
+ (i2cclk >=
+ ((tscl_l - af_delay_min - dnf_delay) / 4))) {
+ continue;
+ }
+
+ for (h = 0; h < STM32F7_SCLH_MAX; h++) {
+ u32 tscl_h = (h + 1) * prescaler + tsync;
+ u32 tscl = tscl_l + tscl_h +
+ setup->rise_time + setup->fall_time;
+
+ if ((tscl >= clk_min) && (tscl <= clk_max) &&
+ (tscl_h >= i2c_specs[setup->speed].h_min) &&
+ (i2cclk < tscl_h)) {
+ int clk_error = tscl - i2cbus;
+
+ if (clk_error < 0)
+ clk_error = -clk_error;
+
+ if (clk_error < clk_error_prev) {
+ clk_error_prev = clk_error;
+ v->scll = l;
+ v->sclh = h;
+ s = v;
+ }
+ }
+ }
+ }
+ }
+
+ if (!s) {
+ dev_err(i2c_dev->dev, "no solution at all\n");
+ ret = -EPERM;
+ goto exit;
+ }
+
+ output->presc = s->presc;
+ output->scldel = s->scldel;
+ output->sdadel = s->sdadel;
+ output->scll = s->scll;
+ output->sclh = s->sclh;
+
+ dev_dbg(i2c_dev->dev,
+ "Presc: %i, scldel: %i, sdadel: %i, scll: %i, sclh: %i\n",
+ output->presc,
+ output->scldel, output->sdadel,
+ output->scll, output->sclh);
+
+exit:
+ /* Release list and memory */
+ list_for_each_entry_safe(v, _v, &solutions, node) {
+ list_del(&v->node);
+ kfree(v);
+ }
+
+ return ret;
+}
+
+static int stm32f7_i2c_setup_timing(struct stm32f7_i2c_dev *i2c_dev,
+ struct stm32f7_i2c_setup *setup)
+{
+ int ret = 0;
+
+ setup->speed = i2c_dev->speed;
+ setup->speed_freq = i2c_specs[setup->speed].rate;
+ setup->clock_src = clk_get_rate(i2c_dev->clk);
+
+ if (!setup->clock_src) {
+ dev_err(i2c_dev->dev, "clock rate is 0\n");
+ return -EINVAL;
+ }
+
+ do {
+ ret = stm32f7_i2c_compute_timing(i2c_dev, setup,
+ &i2c_dev->timing);
+ if (ret) {
+ dev_err(i2c_dev->dev,
+ "failed to compute I2C timings.\n");
+ if (i2c_dev->speed > STM32_I2C_SPEED_STANDARD) {
+ i2c_dev->speed--;
+ setup->speed = i2c_dev->speed;
+ setup->speed_freq =
+ i2c_specs[setup->speed].rate;
+ dev_warn(i2c_dev->dev,
+ "downgrade I2C Speed Freq to (%i)\n",
+ i2c_specs[setup->speed].rate);
+ } else {
+ break;
+ }
+ }
+ } while (ret);
+
+ if (ret) {
+ dev_err(i2c_dev->dev, "Impossible to compute I2C timings.\n");
+ return ret;
+ }
+
+ dev_dbg(i2c_dev->dev, "I2C Speed(%i), Freq(%i), Clk Source(%i)\n",
+ setup->speed, setup->speed_freq, setup->clock_src);
+ dev_dbg(i2c_dev->dev, "I2C Rise(%i) and Fall(%i) Time\n",
+ setup->rise_time, setup->fall_time);
+ dev_dbg(i2c_dev->dev, "I2C Analog Filter(%s), DNF(%i)\n",
+ (setup->analog_filter ? "On" : "Off"), setup->dnf);
+
+ return 0;
+}
+
+static void stm32f7_i2c_hw_config(struct stm32f7_i2c_dev *i2c_dev)
+{
+ struct stm32f7_i2c_timings *t = &i2c_dev->timing;
+ u32 timing = 0;
+
+ /* Timing settings */
+ timing |= STM32F7_I2C_TIMINGR_PRESC(t->presc);
+ timing |= STM32F7_I2C_TIMINGR_SCLDEL(t->scldel);
+ timing |= STM32F7_I2C_TIMINGR_SDADEL(t->sdadel);
+ timing |= STM32F7_I2C_TIMINGR_SCLH(t->sclh);
+ timing |= STM32F7_I2C_TIMINGR_SCLL(t->scll);
+ writel_relaxed(timing, i2c_dev->base + STM32F7_I2C_TIMINGR);
+
+ /* Enable I2C */
+ if (i2c_dev->setup->analog_filter)
+ stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1,
+ STM32F7_I2C_CR1_ANFOFF);
+ else
+ stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
+ STM32F7_I2C_CR1_ANFOFF);
+ stm32f7_i2c_set_bits(i2c_dev->base + STM32F7_I2C_CR1,
+ STM32F7_I2C_CR1_PE);
+}
+
+static void stm32f7_i2c_write_tx_data(struct stm32f7_i2c_dev *i2c_dev)
+{
+ struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
+ void __iomem *base = i2c_dev->base;
+
+ if (f7_msg->count) {
+ writeb_relaxed(*f7_msg->buf++, base + STM32F7_I2C_TXDR);
+ f7_msg->count--;
+ }
+}
+
+static void stm32f7_i2c_read_rx_data(struct stm32f7_i2c_dev *i2c_dev)
+{
+ struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
+ void __iomem *base = i2c_dev->base;
+
+ if (f7_msg->count) {
+ *f7_msg->buf++ = readb_relaxed(base + STM32F7_I2C_RXDR);
+ f7_msg->count--;
+ }
+}
+
+static void stm32f7_i2c_reload(struct stm32f7_i2c_dev *i2c_dev)
+{
+ struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
+ u32 cr2;
+
+ cr2 = readl_relaxed(i2c_dev->base + STM32F7_I2C_CR2);
+
+ cr2 &= ~STM32F7_I2C_CR2_NBYTES_MASK;
+ if (f7_msg->count > STM32F7_I2C_MAX_LEN) {
+ cr2 |= STM32F7_I2C_CR2_NBYTES(STM32F7_I2C_MAX_LEN);
+ } else {
+ cr2 &= ~STM32F7_I2C_CR2_RELOAD;
+ cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
+ }
+
+ writel_relaxed(cr2, i2c_dev->base + STM32F7_I2C_CR2);
+}
+
+static int stm32f7_i2c_wait_free_bus(struct stm32f7_i2c_dev *i2c_dev)
+{
+ u32 status;
+ int ret;
+
+ ret = readl_relaxed_poll_timeout(i2c_dev->base + STM32F7_I2C_ISR,
+ status,
+ !(status & STM32F7_I2C_ISR_BUSY),
+ 10, 1000);
+ if (ret) {
+ dev_dbg(i2c_dev->dev, "bus busy\n");
+ ret = -EBUSY;
+ }
+
+ return ret;
+}
+
+static void stm32f7_i2c_xfer_msg(struct stm32f7_i2c_dev *i2c_dev,
+ struct i2c_msg *msg)
+{
+ struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
+ void __iomem *base = i2c_dev->base;
+ u32 cr1, cr2;
+
+ f7_msg->addr = msg->addr;
+ f7_msg->buf = msg->buf;
+ f7_msg->count = msg->len;
+ f7_msg->result = 0;
+ f7_msg->stop = (i2c_dev->msg_id >= i2c_dev->msg_num - 1);
+
+ reinit_completion(&i2c_dev->complete);
+
+ cr1 = readl_relaxed(base + STM32F7_I2C_CR1);
+ cr2 = readl_relaxed(base + STM32F7_I2C_CR2);
+
+ /* Set transfer direction */
+ cr2 &= ~STM32F7_I2C_CR2_RD_WRN;
+ if (msg->flags & I2C_M_RD)
+ cr2 |= STM32F7_I2C_CR2_RD_WRN;
+
+ /* Set slave address */
+ cr2 &= ~STM32F7_I2C_CR2_SADD7_MASK;
+ cr2 |= STM32F7_I2C_CR2_SADD7(f7_msg->addr);
+
+ /* Set nb bytes to transfer and reload if needed */
+ cr2 &= ~(STM32F7_I2C_CR2_NBYTES_MASK | STM32F7_I2C_CR2_RELOAD);
+ if (f7_msg->count > STM32F7_I2C_MAX_LEN) {
+ cr2 |= STM32F7_I2C_CR2_NBYTES(STM32F7_I2C_MAX_LEN);
+ cr2 |= STM32F7_I2C_CR2_RELOAD;
+ } else {
+ cr2 |= STM32F7_I2C_CR2_NBYTES(f7_msg->count);
+ }
+
+ /* Enable NACK, STOP, error and transfer complete interrupts */
+ cr1 |= STM32F7_I2C_CR1_ERRIE | STM32F7_I2C_CR1_TCIE |
+ STM32F7_I2C_CR1_STOPIE | STM32F7_I2C_CR1_NACKIE;
+
+ /* Clear TX/RX interrupt */
+ cr1 &= ~(STM32F7_I2C_CR1_RXIE | STM32F7_I2C_CR1_TXIE);
+
+ /* Enable RX/TX interrupt according to msg direction */
+ if (msg->flags & I2C_M_RD)
+ cr1 |= STM32F7_I2C_CR1_RXIE;
+ else
+ cr1 |= STM32F7_I2C_CR1_TXIE;
+
+ /* Configure Start/Repeated Start */
+ cr2 |= STM32F7_I2C_CR2_START;
+
+ /* Write configurations registers */
+ writel_relaxed(cr1, base + STM32F7_I2C_CR1);
+ writel_relaxed(cr2, base + STM32F7_I2C_CR2);
+}
+
+static void stm32f7_i2c_disable_irq(struct stm32f7_i2c_dev *i2c_dev, u32 mask)
+{
+ stm32f7_i2c_clr_bits(i2c_dev->base + STM32F7_I2C_CR1, mask);
+}
+
+static irqreturn_t stm32f7_i2c_isr_event(int irq, void *data)
+{
+ struct stm32f7_i2c_dev *i2c_dev = data;
+ struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
+ void __iomem *base = i2c_dev->base;
+ u32 status, mask;
+
+ status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
+
+ /* Tx empty */
+ if (status & STM32F7_I2C_ISR_TXIS)
+ stm32f7_i2c_write_tx_data(i2c_dev);
+
+ /* RX not empty */
+ if (status & STM32F7_I2C_ISR_RXNE)
+ stm32f7_i2c_read_rx_data(i2c_dev);
+
+ /* NACK received */
+ if (status & STM32F7_I2C_ISR_NACKF) {
+ dev_dbg(i2c_dev->dev, "<%s>: Receive NACK\n", __func__);
+ writel_relaxed(STM32F7_I2C_ICR_NACKCF, base + STM32F7_I2C_ICR);
+ f7_msg->result = -ENXIO;
+ }
+
+ /* STOP detection flag */
+ if (status & STM32F7_I2C_ISR_STOPF) {
+ /* Disable interrupts */
+ stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_ALL_IRQ_MASK);
+
+ /* Clear STOP flag */
+ writel_relaxed(STM32F7_I2C_ICR_STOPCF, base + STM32F7_I2C_ICR);
+
+ complete(&i2c_dev->complete);
+ }
+
+ /* Transfer complete */
+ if (status & STM32F7_I2C_ISR_TC) {
+ if (f7_msg->stop) {
+ mask = STM32F7_I2C_CR2_STOP;
+ stm32f7_i2c_set_bits(base + STM32F7_I2C_CR2, mask);
+ } else {
+ i2c_dev->msg_id++;
+ i2c_dev->msg++;
+ stm32f7_i2c_xfer_msg(i2c_dev, i2c_dev->msg);
+ }
+ }
+
+ /*
+ * Transfer Complete Reload: 255 data bytes have been transferred
+ * We have to prepare the I2C controller to transfer the remaining
+ * data.
+ */
+ if (status & STM32F7_I2C_ISR_TCR)
+ stm32f7_i2c_reload(i2c_dev);
+
+ return IRQ_HANDLED;
+}
+
+static irqreturn_t stm32f7_i2c_isr_error(int irq, void *data)
+{
+ struct stm32f7_i2c_dev *i2c_dev = data;
+ struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
+ void __iomem *base = i2c_dev->base;
+ struct device *dev = i2c_dev->dev;
+ u32 status;
+
+ status = readl_relaxed(i2c_dev->base + STM32F7_I2C_ISR);
+
+ /* Bus error */
+ if (status & STM32F7_I2C_ISR_BERR) {
+ dev_err(dev, "<%s>: Bus error\n", __func__);
+ writel_relaxed(STM32F7_I2C_ICR_BERRCF, base + STM32F7_I2C_ICR);
+ f7_msg->result = -EIO;
+ }
+
+ /* Arbitration loss */
+ if (status & STM32F7_I2C_ISR_ARLO) {
+ dev_dbg(dev, "<%s>: Arbitration loss\n", __func__);
+ writel_relaxed(STM32F7_I2C_ICR_ARLOCF, base + STM32F7_I2C_ICR);
+ f7_msg->result = -EAGAIN;
+ }
+
+ stm32f7_i2c_disable_irq(i2c_dev, STM32F7_I2C_ALL_IRQ_MASK);
+
+ complete(&i2c_dev->complete);
+
+ return IRQ_HANDLED;
+}
+
+static int stm32f7_i2c_xfer(struct i2c_adapter *i2c_adap,
+ struct i2c_msg msgs[], int num)
+{
+ struct stm32f7_i2c_dev *i2c_dev = i2c_get_adapdata(i2c_adap);
+ struct stm32f7_i2c_msg *f7_msg = &i2c_dev->f7_msg;
+ unsigned long time_left;
+ int ret;
+
+ i2c_dev->msg = msgs;
+ i2c_dev->msg_num = num;
+ i2c_dev->msg_id = 0;
+
+ ret = clk_enable(i2c_dev->clk);
+ if (ret) {
+ dev_err(i2c_dev->dev, "Failed to enable clock\n");
+ return ret;
+ }
+
+ ret = stm32f7_i2c_wait_free_bus(i2c_dev);
+ if (ret)
+ goto clk_free;
+
+ stm32f7_i2c_xfer_msg(i2c_dev, msgs);
+
+ time_left = wait_for_completion_timeout(&i2c_dev->complete,
+ i2c_dev->adap.timeout);
+ ret = f7_msg->result;
+
+ if (!time_left) {
+ dev_dbg(i2c_dev->dev, "Access to slave 0x%x timed out\n",
+ i2c_dev->msg->addr);
+ ret = -ETIMEDOUT;
+ }
+
+clk_free:
+ clk_disable(i2c_dev->clk);
+
+ return (ret < 0) ? ret : num;
+}
+
+static u32 stm32f7_i2c_func(struct i2c_adapter *adap)
+{
+ return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
+}
+
+static struct i2c_algorithm stm32f7_i2c_algo = {
+ .master_xfer = stm32f7_i2c_xfer,
+ .functionality = stm32f7_i2c_func,
+};
+
+static int stm32f7_i2c_probe(struct platform_device *pdev)
+{
+ struct device_node *np = pdev->dev.of_node;
+ struct stm32f7_i2c_dev *i2c_dev;
+ const struct stm32f7_i2c_setup *setup;
+ struct resource *res;
+ u32 irq_error, irq_event, clk_rate, rise_time, fall_time;
+ struct i2c_adapter *adap;
+ struct reset_control *rst;
+ int ret;
+
+ i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
+ if (!i2c_dev)
+ return -ENOMEM;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ i2c_dev->base = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(i2c_dev->base))
+ return PTR_ERR(i2c_dev->base);
+
+ irq_event = irq_of_parse_and_map(np, 0);
+ if (!irq_event) {
+ dev_err(&pdev->dev, "IRQ event missing or invalid\n");
+ return -EINVAL;
+ }
+
+ irq_error = irq_of_parse_and_map(np, 1);
+ if (!irq_error) {
+ dev_err(&pdev->dev, "IRQ error missing or invalid\n");
+ return -EINVAL;
+ }
+
+ i2c_dev->clk = devm_clk_get(&pdev->dev, NULL);
+ if (IS_ERR(i2c_dev->clk)) {
+ dev_err(&pdev->dev, "Error: Missing controller clock\n");
+ return PTR_ERR(i2c_dev->clk);
+ }
+ ret = clk_prepare_enable(i2c_dev->clk);
+ if (ret) {
+ dev_err(&pdev->dev, "Failed to prepare_enable clock\n");
+ return ret;
+ }
+
+ i2c_dev->speed = STM32_I2C_SPEED_STANDARD;
+ ret = device_property_read_u32(&pdev->dev, "clock-frequency",
+ &clk_rate);
+ if (!ret && clk_rate >= 1000000)
+ i2c_dev->speed = STM32_I2C_SPEED_FAST_PLUS;
+ else if (!ret && clk_rate >= 400000)
+ i2c_dev->speed = STM32_I2C_SPEED_FAST;
+ else if (!ret && clk_rate >= 100000)
+ i2c_dev->speed = STM32_I2C_SPEED_STANDARD;
+
+ rst = devm_reset_control_get(&pdev->dev, NULL);
+ if (IS_ERR(rst)) {
+ dev_err(&pdev->dev, "Error: Missing controller reset\n");
+ ret = PTR_ERR(rst);
+ goto clk_free;
+ }
+ reset_control_assert(rst);
+ udelay(2);
+ reset_control_deassert(rst);
+
+ i2c_dev->dev = &pdev->dev;
+
+ ret = devm_request_irq(&pdev->dev, irq_event, stm32f7_i2c_isr_event, 0,
+ pdev->name, i2c_dev);
+ if (ret) {
+ dev_err(&pdev->dev, "Failed to request irq event %i\n",
+ irq_event);
+ goto clk_free;
+ }
+
+ ret = devm_request_irq(&pdev->dev, irq_error, stm32f7_i2c_isr_error, 0,
+ pdev->name, i2c_dev);
+ if (ret) {
+ dev_err(&pdev->dev, "Failed to request irq error %i\n",
+ irq_error);
+ goto clk_free;
+ }
+
+ setup = of_device_get_match_data(&pdev->dev);
+ i2c_dev->setup->rise_time = setup->rise_time;
+ i2c_dev->setup->fall_time = setup->fall_time;
+ i2c_dev->setup->dnf = setup->dnf;
+ i2c_dev->setup->analog_filter = setup->analog_filter;
+
+ ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-rising-time-ns",
+ &rise_time);
+ if (!ret)
+ i2c_dev->setup->rise_time = rise_time;
+
+ ret = device_property_read_u32(i2c_dev->dev, "i2c-scl-falling-time-ns",
+ &fall_time);
+ if (!ret)
+ i2c_dev->setup->fall_time = fall_time;
+
+ ret = stm32f7_i2c_setup_timing(i2c_dev, i2c_dev->setup);
+ if (ret)
+ goto clk_free;
+
+ stm32f7_i2c_hw_config(i2c_dev);
+
+ adap = &i2c_dev->adap;
+ i2c_set_adapdata(adap, i2c_dev);
+ snprintf(adap->name, sizeof(adap->name), "STM32F7 I2C(%pa)",
+ &res->start);
+ adap->owner = THIS_MODULE;
+ adap->timeout = 2 * HZ;
+ adap->retries = 3;
+ adap->algo = &stm32f7_i2c_algo;
+ adap->dev.parent = &pdev->dev;
+ adap->dev.of_node = pdev->dev.of_node;
+
+ init_completion(&i2c_dev->complete);
+
+ ret = i2c_add_adapter(adap);
+ if (ret)
+ goto clk_free;
+
+ platform_set_drvdata(pdev, i2c_dev);
+
+ clk_disable(i2c_dev->clk);
+
+ dev_info(i2c_dev->dev, "STM32F7 I2C-%d bus adapter\n", adap->nr);
+
+ return 0;
+
+clk_free:
+ clk_disable_unprepare(i2c_dev->clk);
+
+ return ret;
+}
+
+static int stm32f7_i2c_remove(struct platform_device *pdev)
+{
+ struct stm32f7_i2c_dev *i2c_dev = platform_get_drvdata(pdev);
+
+ i2c_del_adapter(&i2c_dev->adap);
+
+ clk_unprepare(i2c_dev->clk);
+
+ return 0;
+}
+
+static const struct of_device_id stm32f7_i2c_match[] = {
+ { .compatible = "st,stm32f7-i2c", .data = &stm32f7_setup},
+ {},
+};
+MODULE_DEVICE_TABLE(of, stm32f7_i2c_match);
+
+static struct platform_driver stm32f7_i2c_driver = {
+ .driver = {
+ .name = "stm32f7-i2c",
+ .of_match_table = stm32f7_i2c_match,
+ },
+ .probe = stm32f7_i2c_probe,
+ .remove = stm32f7_i2c_remove,
+};
+
+module_platform_driver(stm32f7_i2c_driver);
+
+MODULE_AUTHOR("M'boumba Cedric Madianga <cedric.madianga@gmail.com>");
+MODULE_DESCRIPTION("STMicroelectronics STM32F7 I2C driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/infiniband/hw/mlx4/sysfs.c b/drivers/infiniband/hw/mlx4/sysfs.c
index 0ba5ba7540c8..e219093d2764 100644
--- a/drivers/infiniband/hw/mlx4/sysfs.c
+++ b/drivers/infiniband/hw/mlx4/sysfs.c
@@ -221,7 +221,7 @@ void del_sysfs_port_mcg_attr(struct mlx4_ib_dev *device, int port_num,
static int add_port_entries(struct mlx4_ib_dev *device, int port_num)
{
int i;
- char buff[10];
+ char buff[11];
struct mlx4_ib_iov_port *port = NULL;
int ret = 0 ;
struct ib_port_attr attr;
diff --git a/drivers/input/joystick/adi.c b/drivers/input/joystick/adi.c
index d09cefa37931..15a71acb6997 100644
--- a/drivers/input/joystick/adi.c
+++ b/drivers/input/joystick/adi.c
@@ -313,7 +313,7 @@ static void adi_close(struct input_dev *dev)
static void adi_init_digital(struct gameport *gameport)
{
- int seq[] = { 4, -2, -3, 10, -6, -11, -7, -9, 11, 0 };
+ static const int seq[] = { 4, -2, -3, 10, -6, -11, -7, -9, 11, 0 };
int i;
for (i = 0; seq[i]; i++) {
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index f8e34ef643c7..d86e59515b9c 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -1764,10 +1764,12 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
struct usb_endpoint_descriptor *ep =
&intf->cur_altsetting->endpoint[i].desc;
- if (usb_endpoint_dir_in(ep))
- ep_irq_in = ep;
- else
- ep_irq_out = ep;
+ if (usb_endpoint_xfer_int(ep)) {
+ if (usb_endpoint_dir_in(ep))
+ ep_irq_in = ep;
+ else
+ ep_irq_out = ep;
+ }
}
if (!ep_irq_in || !ep_irq_out) {
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index f47e836eaa0f..9f082a388388 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -581,6 +581,18 @@ config INPUT_PWM_BEEPER
To compile this driver as a module, choose M here: the module will be
called pwm-beeper.
+config INPUT_PWM_VIBRA
+ tristate "PWM vibrator support"
+ depends on PWM
+ select INPUT_FF_MEMLESS
+ help
+ Say Y here to get support for PWM based vibrator devices.
+
+ If unsure, say N.
+
+ To compile this driver as a module, choose M here: the module will be
+ called pwm-vibra.
+
config INPUT_RK805_PWRKEY
tristate "Rockchip RK805 PMIC power key support"
depends on MFD_RK808
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 1072e0760c19..03fd4262ada9 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -59,6 +59,7 @@ obj-$(CONFIG_INPUT_PM8XXX_VIBRATOR) += pm8xxx-vibrator.o
obj-$(CONFIG_INPUT_PMIC8XXX_PWRKEY) += pmic8xxx-pwrkey.o
obj-$(CONFIG_INPUT_POWERMATE) += powermate.o
obj-$(CONFIG_INPUT_PWM_BEEPER) += pwm-beeper.o
+obj-$(CONFIG_INPUT_PWM_VIBRA) += pwm-vibra.o
obj-$(CONFIG_INPUT_RB532_BUTTON) += rb532_button.o
obj-$(CONFIG_INPUT_REGULATOR_HAPTIC) += regulator-haptic.o
obj-$(CONFIG_INPUT_RETU_PWRBUTTON) += retu-pwrbutton.o
diff --git a/drivers/input/misc/pwm-vibra.c b/drivers/input/misc/pwm-vibra.c
new file mode 100644
index 000000000000..55da191ae550
--- /dev/null
+++ b/drivers/input/misc/pwm-vibra.c
@@ -0,0 +1,267 @@
+/*
+ * PWM vibrator driver
+ *
+ * Copyright (C) 2017 Collabora Ltd.
+ *
+ * Based on previous work from:
+ * Copyright (C) 2012 Dmitry Torokhov <dmitry.torokhov@gmail.com>
+ *
+ * Based on PWM beeper driver:
+ * Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/input.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+#include <linux/platform_device.h>
+#include <linux/property.h>
+#include <linux/pwm.h>
+#include <linux/regulator/consumer.h>
+#include <linux/slab.h>
+
+struct pwm_vibrator {
+ struct input_dev *input;
+ struct pwm_device *pwm;
+ struct pwm_device *pwm_dir;
+ struct regulator *vcc;
+
+ struct work_struct play_work;
+ u16 level;
+ u32 direction_duty_cycle;
+};
+
+static int pwm_vibrator_start(struct pwm_vibrator *vibrator)
+{
+ struct device *pdev = vibrator->input->dev.parent;
+ struct pwm_state state;
+ int err;
+
+ err = regulator_enable(vibrator->vcc);
+ if (err) {
+ dev_err(pdev, "failed to enable regulator: %d", err);
+ return err;
+ }
+
+ pwm_get_state(vibrator->pwm, &state);
+ pwm_set_relative_duty_cycle(&state, vibrator->level, 0xffff);
+ state.enabled = true;
+
+ err = pwm_apply_state(vibrator->pwm, &state);
+ if (err) {
+ dev_err(pdev, "failed to apply pwm state: %d", err);
+ return err;
+ }
+
+ if (vibrator->pwm_dir) {
+ pwm_get_state(vibrator->pwm_dir, &state);
+ state.duty_cycle = vibrator->direction_duty_cycle;
+ state.enabled = true;
+
+ err = pwm_apply_state(vibrator->pwm_dir, &state);
+ if (err) {
+ dev_err(pdev, "failed to apply dir-pwm state: %d", err);
+ pwm_disable(vibrator->pwm);
+ return err;
+ }
+ }
+
+ return 0;
+}
+
+static void pwm_vibrator_stop(struct pwm_vibrator *vibrator)
+{
+ regulator_disable(vibrator->vcc);
+
+ if (vibrator->pwm_dir)
+ pwm_disable(vibrator->pwm_dir);
+ pwm_disable(vibrator->pwm);
+}
+
+static void pwm_vibrator_play_work(struct work_struct *work)
+{
+ struct pwm_vibrator *vibrator = container_of(work,
+ struct pwm_vibrator, play_work);
+
+ if (vibrator->level)
+ pwm_vibrator_start(vibrator);
+ else
+ pwm_vibrator_stop(vibrator);
+}
+
+static int pwm_vibrator_play_effect(struct input_dev *dev, void *data,
+ struct ff_effect *effect)
+{
+ struct pwm_vibrator *vibrator = input_get_drvdata(dev);
+
+ vibrator->level = effect->u.rumble.strong_magnitude;
+ if (!vibrator->level)
+ vibrator->level = effect->u.rumble.weak_magnitude;
+
+ schedule_work(&vibrator->play_work);
+
+ return 0;
+}
+
+static void pwm_vibrator_close(struct input_dev *input)
+{
+ struct pwm_vibrator *vibrator = input_get_drvdata(input);
+
+ cancel_work_sync(&vibrator->play_work);
+ pwm_vibrator_stop(vibrator);
+}
+
+static int pwm_vibrator_probe(struct platform_device *pdev)
+{
+ struct pwm_vibrator *vibrator;
+ struct pwm_state state;
+ int err;
+
+ vibrator = devm_kzalloc(&pdev->dev, sizeof(*vibrator), GFP_KERNEL);
+ if (!vibrator)
+ return -ENOMEM;
+
+ vibrator->input = devm_input_allocate_device(&pdev->dev);
+ if (!vibrator->input)
+ return -ENOMEM;
+
+ vibrator->vcc = devm_regulator_get(&pdev->dev, "vcc");
+ err = PTR_ERR_OR_ZERO(vibrator->vcc);
+ if (err) {
+ if (err != -EPROBE_DEFER)
+ dev_err(&pdev->dev, "Failed to request regulator: %d",
+ err);
+ return err;
+ }
+
+ vibrator->pwm = devm_pwm_get(&pdev->dev, "enable");
+ err = PTR_ERR_OR_ZERO(vibrator->pwm);
+ if (err) {
+ if (err != -EPROBE_DEFER)
+ dev_err(&pdev->dev, "Failed to request main pwm: %d",
+ err);
+ return err;
+ }
+
+ INIT_WORK(&vibrator->play_work, pwm_vibrator_play_work);
+
+ /* Sync up PWM state and ensure it is off. */
+ pwm_init_state(vibrator->pwm, &state);
+ state.enabled = false;
+ err = pwm_apply_state(vibrator->pwm, &state);
+ if (err) {
+ dev_err(&pdev->dev, "failed to apply initial PWM state: %d",
+ err);
+ return err;
+ }
+
+ vibrator->pwm_dir = devm_pwm_get(&pdev->dev, "direction");
+ err = PTR_ERR_OR_ZERO(vibrator->pwm_dir);
+ switch (err) {
+ case 0:
+ /* Sync up PWM state and ensure it is off. */
+ pwm_init_state(vibrator->pwm_dir, &state);
+ state.enabled = false;
+ err = pwm_apply_state(vibrator->pwm_dir, &state);
+ if (err) {
+ dev_err(&pdev->dev, "failed to apply initial PWM state: %d",
+ err);
+ return err;
+ }
+
+ vibrator->direction_duty_cycle =
+ pwm_get_period(vibrator->pwm_dir) / 2;
+ device_property_read_u32(&pdev->dev, "direction-duty-cycle-ns",
+ &vibrator->direction_duty_cycle);
+ break;
+
+ case -ENODATA:
+ /* Direction PWM is optional */
+ vibrator->pwm_dir = NULL;
+ break;
+
+ default:
+ dev_err(&pdev->dev, "Failed to request direction pwm: %d", err);
+ /* Fall through */
+
+ case -EPROBE_DEFER:
+ return err;
+ }
+
+ vibrator->input->name = "pwm-vibrator";
+ vibrator->input->id.bustype = BUS_HOST;
+ vibrator->input->dev.parent = &pdev->dev;
+ vibrator->input->close = pwm_vibrator_close;
+
+ input_set_drvdata(vibrator->input, vibrator);
+ input_set_capability(vibrator->input, EV_FF, FF_RUMBLE);
+
+ err = input_ff_create_memless(vibrator->input, NULL,
+ pwm_vibrator_play_effect);
+ if (err) {
+ dev_err(&pdev->dev, "Couldn't create FF dev: %d", err);
+ return err;
+ }
+
+ err = input_register_device(vibrator->input);
+ if (err) {
+ dev_err(&pdev->dev, "Couldn't register input dev: %d", err);
+ return err;
+ }
+
+ platform_set_drvdata(pdev, vibrator);
+
+ return 0;
+}
+
+static int __maybe_unused pwm_vibrator_suspend(struct device *dev)
+{
+ struct pwm_vibrator *vibrator = dev_get_drvdata(dev);
+
+ cancel_work_sync(&vibrator->play_work);
+ if (vibrator->level)
+ pwm_vibrator_stop(vibrator);
+
+ return 0;
+}
+
+static int __maybe_unused pwm_vibrator_resume(struct device *dev)
+{
+ struct pwm_vibrator *vibrator = dev_get_drvdata(dev);
+
+ if (vibrator->level)
+ pwm_vibrator_start(vibrator);
+
+ return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(pwm_vibrator_pm_ops,
+ pwm_vibrator_suspend, pwm_vibrator_resume);
+
+#ifdef CONFIG_OF
+static const struct of_device_id pwm_vibra_dt_match_table[] = {
+ { .compatible = "pwm-vibrator" },
+ {},
+};
+MODULE_DEVICE_TABLE(of, pwm_vibra_dt_match_table);
+#endif
+
+static struct platform_driver pwm_vibrator_driver = {
+ .probe = pwm_vibrator_probe,
+ .driver = {
+ .name = "pwm-vibrator",
+ .pm = &pwm_vibrator_pm_ops,
+ .of_match_table = of_match_ptr(pwm_vibra_dt_match_table),
+ },
+};
+module_platform_driver(pwm_vibrator_driver);
+
+MODULE_AUTHOR("Sebastian Reichel <sre@kernel.org>");
+MODULE_DESCRIPTION("PWM vibrator driver");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS("platform:pwm-vibrator");
diff --git a/drivers/input/mouse/elantech.c b/drivers/input/mouse/elantech.c
index 6428d6f4d568..b84cd978fce2 100644
--- a/drivers/input/mouse/elantech.c
+++ b/drivers/input/mouse/elantech.c
@@ -700,7 +700,9 @@ static int elantech_debounce_check_v2(struct psmouse *psmouse)
* When we encounter packet that matches this exactly, it means the
* hardware is in debounce status. Just ignore the whole packet.
*/
- const u8 debounce_packet[] = { 0x84, 0xff, 0xff, 0x02, 0xff, 0xff };
+ static const u8 debounce_packet[] = {
+ 0x84, 0xff, 0xff, 0x02, 0xff, 0xff
+ };
unsigned char *packet = psmouse->packet;
return !memcmp(packet, debounce_packet, sizeof(debounce_packet));
@@ -741,7 +743,9 @@ static int elantech_packet_check_v2(struct psmouse *psmouse)
static int elantech_packet_check_v3(struct psmouse *psmouse)
{
struct elantech_data *etd = psmouse->private;
- const u8 debounce_packet[] = { 0xc4, 0xff, 0xff, 0x02, 0xff, 0xff };
+ static const u8 debounce_packet[] = {
+ 0xc4, 0xff, 0xff, 0x02, 0xff, 0xff
+ };
unsigned char *packet = psmouse->packet;
/*
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index ae81e57e13b9..6cbbdc6e9687 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -840,6 +840,13 @@ static const struct dmi_system_id __initconst i8042_dmi_kbdreset_table[] = {
},
},
{
+ /* Gigabyte P57 - Elantech touchpad */
+ .matches = {
+ DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
+ DMI_MATCH(DMI_PRODUCT_NAME, "P57"),
+ },
+ },
+ {
/* Schenker XMG C504 - Elantech touchpad */
.matches = {
DMI_MATCH(DMI_SYS_VENDOR, "XMG"),
diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c
index f872817e81e4..5bf63f76ddda 100644
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
@@ -593,7 +593,7 @@ static int edt_ft5x06_work_mode(struct edt_ft5x06_ts_data *tsdata)
tsdata->gain);
edt_ft5x06_register_write(tsdata, reg_addr->reg_offset,
tsdata->offset);
- if (reg_addr->reg_report_rate)
+ if (reg_addr->reg_report_rate != NO_REGISTER)
edt_ft5x06_register_write(tsdata, reg_addr->reg_report_rate,
tsdata->report_rate);
@@ -874,6 +874,7 @@ edt_ft5x06_ts_set_regs(struct edt_ft5x06_ts_data *tsdata)
case M09:
reg_addr->reg_threshold = M09_REGISTER_THRESHOLD;
+ reg_addr->reg_report_rate = NO_REGISTER;
reg_addr->reg_gain = M09_REGISTER_GAIN;
reg_addr->reg_offset = M09_REGISTER_OFFSET;
reg_addr->reg_num_x = M09_REGISTER_NUM_X;
diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
index 240b16f3ee97..32d2762448aa 100644
--- a/drivers/input/touchscreen/goodix.c
+++ b/drivers/input/touchscreen/goodix.c
@@ -267,6 +267,12 @@ static void goodix_process_events(struct goodix_ts_data *ts)
if (touch_num < 0)
return;
+ /*
+ * Bit 4 of the first byte reports the status of the capacitive
+ * Windows/Home button.
+ */
+ input_report_key(ts->input_dev, KEY_LEFTMETA, point_data[0] & BIT(4));
+
for (i = 0; i < touch_num; i++)
goodix_ts_report_touch(ts,
&point_data[1 + GOODIX_CONTACT_SIZE * i]);
@@ -612,6 +618,9 @@ static int goodix_request_input_dev(struct goodix_ts_data *ts)
ts->input_dev->id.product = ts->id;
ts->input_dev->id.version = ts->version;
+ /* Capacitive Windows/Home button on some devices */
+ input_set_capability(ts->input_dev, EV_KEY, KEY_LEFTMETA);
+
error = input_register_device(ts->input_dev);
if (error) {
dev_err(&ts->client->dev,
diff --git a/drivers/input/touchscreen/htcpen.c b/drivers/input/touchscreen/htcpen.c
index 92e2243fb77d..8fd909285877 100644
--- a/drivers/input/touchscreen/htcpen.c
+++ b/drivers/input/touchscreen/htcpen.c
@@ -219,7 +219,7 @@ static struct isa_driver htcpen_isa_driver = {
}
};
-static struct dmi_system_id htcshift_dmi_table[] __initdata = {
+static const struct dmi_system_id htcshift_dmi_table[] __initconst = {
{
.ident = "Shift",
.matches = {
diff --git a/drivers/input/touchscreen/surface3_spi.c b/drivers/input/touchscreen/surface3_spi.c
index e12fb9b63f31..5db0f1c4ef38 100644
--- a/drivers/input/touchscreen/surface3_spi.c
+++ b/drivers/input/touchscreen/surface3_spi.c
@@ -173,7 +173,7 @@ static void surface3_spi_process_pen(struct surface3_ts_data *ts_data, u8 *data)
static void surface3_spi_process(struct surface3_ts_data *ts_data)
{
- const char header[] = {
+ static const char header[] = {
0xff, 0xff, 0xff, 0xff, 0xa5, 0x5a, 0xe7, 0x7e, 0x01
};
u8 *data = ts_data->rd_buf;
diff --git a/drivers/input/touchscreen/ucb1400_ts.c b/drivers/input/touchscreen/ucb1400_ts.c
index c1e23cfc6155..1a86cbd9326f 100644
--- a/drivers/input/touchscreen/ucb1400_ts.c
+++ b/drivers/input/touchscreen/ucb1400_ts.c
@@ -414,7 +414,7 @@ static int __maybe_unused ucb1400_ts_suspend(struct device *dev)
mutex_lock(&idev->mutex);
if (idev->users)
- ucb1400_ts_start(ucb);
+ ucb1400_ts_stop(ucb);
mutex_unlock(&idev->mutex);
return 0;
@@ -428,7 +428,7 @@ static int __maybe_unused ucb1400_ts_resume(struct device *dev)
mutex_lock(&idev->mutex);
if (idev->users)
- ucb1400_ts_stop(ucb);
+ ucb1400_ts_start(ucb);
mutex_unlock(&idev->mutex);
return 0;
diff --git a/drivers/irqchip/irq-mips-cpu.c b/drivers/irqchip/irq-mips-cpu.c
index 14461cbfab2f..66f97fde13d8 100644
--- a/drivers/irqchip/irq-mips-cpu.c
+++ b/drivers/irqchip/irq-mips-cpu.c
@@ -101,7 +101,7 @@ static void mips_mt_send_ipi(struct irq_data *d, unsigned int cpu)
local_irq_save(flags);
/* We can only send IPIs to VPEs within the local core */
- WARN_ON(cpu_data[cpu].core != current_cpu_data.core);
+ WARN_ON(!cpus_are_siblings(smp_processor_id(), cpu));
vpflags = dvpe();
settc(cpu_vpe_id(&cpu_data[cpu]));
diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c
index b3a60da088db..6e52a88bbd9e 100644
--- a/drivers/irqchip/irq-mips-gic.c
+++ b/drivers/irqchip/irq-mips-gic.c
@@ -12,27 +12,38 @@
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqchip.h>
-#include <linux/irqchip/mips-gic.h>
#include <linux/of_address.h>
+#include <linux/percpu.h>
#include <linux/sched.h>
#include <linux/smp.h>
-#include <asm/mips-cm.h>
+#include <asm/mips-cps.h>
#include <asm/setup.h>
#include <asm/traps.h>
#include <dt-bindings/interrupt-controller/mips-gic.h>
-unsigned int gic_present;
+#define GIC_MAX_INTRS 256
+#define GIC_MAX_LONGS BITS_TO_LONGS(GIC_MAX_INTRS)
-struct gic_pcpu_mask {
- DECLARE_BITMAP(pcpu_mask, GIC_MAX_INTRS);
-};
+/* Add 2 to convert GIC CPU pin to core interrupt */
+#define GIC_CPU_PIN_OFFSET 2
+
+/* Mapped interrupt to pin X, then GIC will generate the vector (X+1). */
+#define GIC_PIN_TO_VEC_OFFSET 1
+
+/* Convert between local/shared IRQ number and GIC HW IRQ number. */
+#define GIC_LOCAL_HWIRQ_BASE 0
+#define GIC_LOCAL_TO_HWIRQ(x) (GIC_LOCAL_HWIRQ_BASE + (x))
+#define GIC_HWIRQ_TO_LOCAL(x) ((x) - GIC_LOCAL_HWIRQ_BASE)
+#define GIC_SHARED_HWIRQ_BASE GIC_NUM_LOCAL_INTRS
+#define GIC_SHARED_TO_HWIRQ(x) (GIC_SHARED_HWIRQ_BASE + (x))
+#define GIC_HWIRQ_TO_SHARED(x) ((x) - GIC_SHARED_HWIRQ_BASE)
+
+void __iomem *mips_gic_base;
-static unsigned long __gic_base_addr;
+DEFINE_PER_CPU_READ_MOSTLY(unsigned long[GIC_MAX_LONGS], pcpu_masks);
-static void __iomem *gic_base;
-static struct gic_pcpu_mask pcpu_masks[NR_CPUS];
static DEFINE_SPINLOCK(gic_lock);
static struct irq_domain *gic_irq_domain;
static struct irq_domain *gic_ipi_domain;
@@ -44,202 +55,13 @@ static struct irq_chip gic_level_irq_controller, gic_edge_irq_controller;
DECLARE_BITMAP(ipi_resrv, GIC_MAX_INTRS);
DECLARE_BITMAP(ipi_available, GIC_MAX_INTRS);
-static void __gic_irq_dispatch(void);
-
-static inline u32 gic_read32(unsigned int reg)
-{
- return __raw_readl(gic_base + reg);
-}
-
-static inline u64 gic_read64(unsigned int reg)
-{
- return __raw_readq(gic_base + reg);
-}
-
-static inline unsigned long gic_read(unsigned int reg)
-{
- if (!mips_cm_is64)
- return gic_read32(reg);
- else
- return gic_read64(reg);
-}
-
-static inline void gic_write32(unsigned int reg, u32 val)
-{
- return __raw_writel(val, gic_base + reg);
-}
-
-static inline void gic_write64(unsigned int reg, u64 val)
-{
- return __raw_writeq(val, gic_base + reg);
-}
-
-static inline void gic_write(unsigned int reg, unsigned long val)
-{
- if (!mips_cm_is64)
- return gic_write32(reg, (u32)val);
- else
- return gic_write64(reg, (u64)val);
-}
-
-static inline void gic_update_bits(unsigned int reg, unsigned long mask,
- unsigned long val)
-{
- unsigned long regval;
-
- regval = gic_read(reg);
- regval &= ~mask;
- regval |= val;
- gic_write(reg, regval);
-}
-
-static inline void gic_reset_mask(unsigned int intr)
-{
- gic_write(GIC_REG(SHARED, GIC_SH_RMASK) + GIC_INTR_OFS(intr),
- 1ul << GIC_INTR_BIT(intr));
-}
-
-static inline void gic_set_mask(unsigned int intr)
-{
- gic_write(GIC_REG(SHARED, GIC_SH_SMASK) + GIC_INTR_OFS(intr),
- 1ul << GIC_INTR_BIT(intr));
-}
-
-static inline void gic_set_polarity(unsigned int intr, unsigned int pol)
-{
- gic_update_bits(GIC_REG(SHARED, GIC_SH_SET_POLARITY) +
- GIC_INTR_OFS(intr), 1ul << GIC_INTR_BIT(intr),
- (unsigned long)pol << GIC_INTR_BIT(intr));
-}
-
-static inline void gic_set_trigger(unsigned int intr, unsigned int trig)
-{
- gic_update_bits(GIC_REG(SHARED, GIC_SH_SET_TRIGGER) +
- GIC_INTR_OFS(intr), 1ul << GIC_INTR_BIT(intr),
- (unsigned long)trig << GIC_INTR_BIT(intr));
-}
-
-static inline void gic_set_dual_edge(unsigned int intr, unsigned int dual)
-{
- gic_update_bits(GIC_REG(SHARED, GIC_SH_SET_DUAL) + GIC_INTR_OFS(intr),
- 1ul << GIC_INTR_BIT(intr),
- (unsigned long)dual << GIC_INTR_BIT(intr));
-}
-
-static inline void gic_map_to_pin(unsigned int intr, unsigned int pin)
-{
- gic_write32(GIC_REG(SHARED, GIC_SH_INTR_MAP_TO_PIN_BASE) +
- GIC_SH_MAP_TO_PIN(intr), GIC_MAP_TO_PIN_MSK | pin);
-}
-
-static inline void gic_map_to_vpe(unsigned int intr, unsigned int vpe)
-{
- gic_write(GIC_REG(SHARED, GIC_SH_INTR_MAP_TO_VPE_BASE) +
- GIC_SH_MAP_TO_VPE_REG_OFF(intr, vpe),
- GIC_SH_MAP_TO_VPE_REG_BIT(vpe));
-}
-
-#ifdef CONFIG_CLKSRC_MIPS_GIC
-u64 notrace gic_read_count(void)
-{
- unsigned int hi, hi2, lo;
-
- if (mips_cm_is64)
- return (u64)gic_read(GIC_REG(SHARED, GIC_SH_COUNTER));
-
- do {
- hi = gic_read32(GIC_REG(SHARED, GIC_SH_COUNTER_63_32));
- lo = gic_read32(GIC_REG(SHARED, GIC_SH_COUNTER_31_00));
- hi2 = gic_read32(GIC_REG(SHARED, GIC_SH_COUNTER_63_32));
- } while (hi2 != hi);
-
- return (((u64) hi) << 32) + lo;
-}
-
-unsigned int gic_get_count_width(void)
-{
- unsigned int bits, config;
-
- config = gic_read(GIC_REG(SHARED, GIC_SH_CONFIG));
- bits = 32 + 4 * ((config & GIC_SH_CONFIG_COUNTBITS_MSK) >>
- GIC_SH_CONFIG_COUNTBITS_SHF);
-
- return bits;
-}
-
-void notrace gic_write_compare(u64 cnt)
-{
- if (mips_cm_is64) {
- gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE), cnt);
- } else {
- gic_write32(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_HI),
- (int)(cnt >> 32));
- gic_write32(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_LO),
- (int)(cnt & 0xffffffff));
- }
-}
-
-void notrace gic_write_cpu_compare(u64 cnt, int cpu)
-{
- unsigned long flags;
-
- local_irq_save(flags);
-
- gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR), mips_cm_vp_id(cpu));
-
- if (mips_cm_is64) {
- gic_write(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE), cnt);
- } else {
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE_HI),
- (int)(cnt >> 32));
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE_LO),
- (int)(cnt & 0xffffffff));
- }
-
- local_irq_restore(flags);
-}
-
-u64 gic_read_compare(void)
-{
- unsigned int hi, lo;
-
- if (mips_cm_is64)
- return (u64)gic_read(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE));
-
- hi = gic_read32(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_HI));
- lo = gic_read32(GIC_REG(VPE_LOCAL, GIC_VPE_COMPARE_LO));
-
- return (((u64) hi) << 32) + lo;
-}
-
-void gic_start_count(void)
+static void gic_clear_pcpu_masks(unsigned int intr)
{
- u32 gicconfig;
-
- /* Start the counter */
- gicconfig = gic_read(GIC_REG(SHARED, GIC_SH_CONFIG));
- gicconfig &= ~(1 << GIC_SH_CONFIG_COUNTSTOP_SHF);
- gic_write(GIC_REG(SHARED, GIC_SH_CONFIG), gicconfig);
-}
-
-void gic_stop_count(void)
-{
- u32 gicconfig;
-
- /* Stop the counter */
- gicconfig = gic_read(GIC_REG(SHARED, GIC_SH_CONFIG));
- gicconfig |= 1 << GIC_SH_CONFIG_COUNTSTOP_SHF;
- gic_write(GIC_REG(SHARED, GIC_SH_CONFIG), gicconfig);
-}
-
-#endif
-
-unsigned gic_read_local_vp_id(void)
-{
- unsigned long ident;
+ unsigned int i;
- ident = gic_read(GIC_REG(VPE_LOCAL, GIC_VP_IDENT));
- return ident & GIC_VP_IDENT_VCNUM_MSK;
+ /* Clear the interrupt's bit in all pcpu_masks */
+ for_each_possible_cpu(i)
+ clear_bit(intr, per_cpu_ptr(pcpu_masks, i));
}
static bool gic_local_irq_is_routable(int intr)
@@ -250,17 +72,17 @@ static bool gic_local_irq_is_routable(int intr)
if (cpu_has_veic)
return true;
- vpe_ctl = gic_read32(GIC_REG(VPE_LOCAL, GIC_VPE_CTL));
+ vpe_ctl = read_gic_vl_ctl();
switch (intr) {
case GIC_LOCAL_INT_TIMER:
- return vpe_ctl & GIC_VPE_CTL_TIMER_RTBL_MSK;
+ return vpe_ctl & GIC_VX_CTL_TIMER_ROUTABLE;
case GIC_LOCAL_INT_PERFCTR:
- return vpe_ctl & GIC_VPE_CTL_PERFCNT_RTBL_MSK;
+ return vpe_ctl & GIC_VX_CTL_PERFCNT_ROUTABLE;
case GIC_LOCAL_INT_FDC:
- return vpe_ctl & GIC_VPE_CTL_FDC_RTBL_MSK;
+ return vpe_ctl & GIC_VX_CTL_FDC_ROUTABLE;
case GIC_LOCAL_INT_SWINT0:
case GIC_LOCAL_INT_SWINT1:
- return vpe_ctl & GIC_VPE_CTL_SWINT_RTBL_MSK;
+ return vpe_ctl & GIC_VX_CTL_SWINT_ROUTABLE;
default:
return true;
}
@@ -272,15 +94,14 @@ static void gic_bind_eic_interrupt(int irq, int set)
irq -= GIC_PIN_TO_VEC_OFFSET;
/* Set irq to use shadow set */
- gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_EIC_SHADOW_SET_BASE) +
- GIC_VPE_EIC_SS(irq), set);
+ write_gic_vl_eic_shadow_set(irq, set);
}
static void gic_send_ipi(struct irq_data *d, unsigned int cpu)
{
irq_hw_number_t hwirq = GIC_HWIRQ_TO_SHARED(irqd_to_hwirq(d));
- gic_write(GIC_REG(SHARED, GIC_SH_WEDGE), GIC_SH_WEDGE_SET(hwirq));
+ write_gic_wedge(GIC_WEDGE_RW | hwirq);
}
int gic_get_c0_compare_int(void)
@@ -316,47 +137,22 @@ int gic_get_c0_fdc_int(void)
GIC_LOCAL_TO_HWIRQ(GIC_LOCAL_INT_FDC));
}
-int gic_get_usm_range(struct resource *gic_usm_res)
-{
- if (!gic_present)
- return -1;
-
- gic_usm_res->start = __gic_base_addr + USM_VISIBLE_SECTION_OFS;
- gic_usm_res->end = gic_usm_res->start + (USM_VISIBLE_SECTION_SIZE - 1);
-
- return 0;
-}
-
static void gic_handle_shared_int(bool chained)
{
- unsigned int i, intr, virq, gic_reg_step = mips_cm_is64 ? 8 : 4;
+ unsigned int intr, virq;
unsigned long *pcpu_mask;
- unsigned long pending_reg, intrmask_reg;
DECLARE_BITMAP(pending, GIC_MAX_INTRS);
- DECLARE_BITMAP(intrmask, GIC_MAX_INTRS);
/* Get per-cpu bitmaps */
- pcpu_mask = pcpu_masks[smp_processor_id()].pcpu_mask;
-
- pending_reg = GIC_REG(SHARED, GIC_SH_PEND);
- intrmask_reg = GIC_REG(SHARED, GIC_SH_MASK);
-
- for (i = 0; i < BITS_TO_LONGS(gic_shared_intrs); i++) {
- pending[i] = gic_read(pending_reg);
- intrmask[i] = gic_read(intrmask_reg);
- pending_reg += gic_reg_step;
- intrmask_reg += gic_reg_step;
-
- if (!IS_ENABLED(CONFIG_64BIT) || mips_cm_is64)
- continue;
+ pcpu_mask = this_cpu_ptr(pcpu_masks);
- pending[i] |= (u64)gic_read(pending_reg) << 32;
- intrmask[i] |= (u64)gic_read(intrmask_reg) << 32;
- pending_reg += gic_reg_step;
- intrmask_reg += gic_reg_step;
- }
+ if (mips_cm_is64)
+ __ioread64_copy(pending, addr_gic_pend(),
+ DIV_ROUND_UP(gic_shared_intrs, 64));
+ else
+ __ioread32_copy(pending, addr_gic_pend(),
+ DIV_ROUND_UP(gic_shared_intrs, 32));
- bitmap_and(pending, pending, intrmask, gic_shared_intrs);
bitmap_and(pending, pending, pcpu_mask, gic_shared_intrs);
for_each_set_bit(intr, pending, gic_shared_intrs) {
@@ -371,19 +167,30 @@ static void gic_handle_shared_int(bool chained)
static void gic_mask_irq(struct irq_data *d)
{
- gic_reset_mask(GIC_HWIRQ_TO_SHARED(d->hwirq));
+ unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);
+
+ write_gic_rmask(BIT(intr));
+ gic_clear_pcpu_masks(intr);
}
static void gic_unmask_irq(struct irq_data *d)
{
- gic_set_mask(GIC_HWIRQ_TO_SHARED(d->hwirq));
+ struct cpumask *affinity = irq_data_get_affinity_mask(d);
+ unsigned int intr = GIC_HWIRQ_TO_SHARED(d->hwirq);
+ unsigned int cpu;
+
+ write_gic_smask(BIT(intr));
+
+ gic_clear_pcpu_masks(intr);
+ cpu = cpumask_first_and(affinity, cpu_online_mask);
+ set_bit(intr, per_cpu_ptr(pcpu_masks, cpu));
}
static void gic_ack_irq(struct irq_data *d)
{
unsigned int irq = GIC_HWIRQ_TO_SHARED(d->hwirq);
- gic_write(GIC_REG(SHARED, GIC_SH_WEDGE), GIC_SH_WEDGE_CLR(irq));
+ write_gic_wedge(irq);
}
static int gic_set_type(struct irq_data *d, unsigned int type)
@@ -395,34 +202,34 @@ static int gic_set_type(struct irq_data *d, unsigned int type)
spin_lock_irqsave(&gic_lock, flags);
switch (type & IRQ_TYPE_SENSE_MASK) {
case IRQ_TYPE_EDGE_FALLING:
- gic_set_polarity(irq, GIC_POL_NEG);
- gic_set_trigger(irq, GIC_TRIG_EDGE);
- gic_set_dual_edge(irq, GIC_TRIG_DUAL_DISABLE);
+ change_gic_pol(irq, GIC_POL_FALLING_EDGE);
+ change_gic_trig(irq, GIC_TRIG_EDGE);
+ change_gic_dual(irq, GIC_DUAL_SINGLE);
is_edge = true;
break;
case IRQ_TYPE_EDGE_RISING:
- gic_set_polarity(irq, GIC_POL_POS);
- gic_set_trigger(irq, GIC_TRIG_EDGE);
- gic_set_dual_edge(irq, GIC_TRIG_DUAL_DISABLE);
+ change_gic_pol(irq, GIC_POL_RISING_EDGE);
+ change_gic_trig(irq, GIC_TRIG_EDGE);
+ change_gic_dual(irq, GIC_DUAL_SINGLE);
is_edge = true;
break;
case IRQ_TYPE_EDGE_BOTH:
/* polarity is irrelevant in this case */
- gic_set_trigger(irq, GIC_TRIG_EDGE);
- gic_set_dual_edge(irq, GIC_TRIG_DUAL_ENABLE);
+ change_gic_trig(irq, GIC_TRIG_EDGE);
+ change_gic_dual(irq, GIC_DUAL_DUAL);
is_edge = true;
break;
case IRQ_TYPE_LEVEL_LOW:
- gic_set_polarity(irq, GIC_POL_NEG);
- gic_set_trigger(irq, GIC_TRIG_LEVEL);
- gic_set_dual_edge(irq, GIC_TRIG_DUAL_DISABLE);
+ change_gic_pol(irq, GIC_POL_ACTIVE_LOW);
+ change_gic_trig(irq, GIC_TRIG_LEVEL);
+ change_gic_dual(irq, GIC_DUAL_SINGLE);
is_edge = false;
break;
case IRQ_TYPE_LEVEL_HIGH:
default:
- gic_set_polarity(irq, GIC_POL_POS);
- gic_set_trigger(irq, GIC_TRIG_LEVEL);
- gic_set_dual_edge(irq, GIC_TRIG_DUAL_DISABLE);
+ change_gic_pol(irq, GIC_POL_ACTIVE_HIGH);
+ change_gic_trig(irq, GIC_TRIG_LEVEL);
+ change_gic_dual(irq, GIC_DUAL_SINGLE);
is_edge = false;
break;
}
@@ -443,32 +250,28 @@ static int gic_set_affinity(struct irq_data *d, const struct cpumask *cpumask,
bool force)
{
unsigned int irq = GIC_HWIRQ_TO_SHARED(d->hwirq);
- cpumask_t tmp = CPU_MASK_NONE;
- unsigned long flags;
- int i, cpu;
+ unsigned long flags;
+ unsigned int cpu;
- cpumask_and(&tmp, cpumask, cpu_online_mask);
- if (cpumask_empty(&tmp))
+ cpu = cpumask_first_and(cpumask, cpu_online_mask);
+ if (cpu >= NR_CPUS)
return -EINVAL;
- cpu = cpumask_first(&tmp);
-
/* Assumption : cpumask refers to a single CPU */
spin_lock_irqsave(&gic_lock, flags);
/* Re-route this IRQ */
- gic_map_to_vpe(irq, mips_cm_vp_id(cpu));
+ write_gic_map_vp(irq, BIT(mips_cm_vp_id(cpu)));
/* Update the pcpu_masks */
- for (i = 0; i < min(gic_vpes, NR_CPUS); i++)
- clear_bit(irq, pcpu_masks[i].pcpu_mask);
- set_bit(irq, pcpu_masks[cpu].pcpu_mask);
+ gic_clear_pcpu_masks(irq);
+ if (read_gic_mask(irq))
+ set_bit(irq, per_cpu_ptr(pcpu_masks, cpu));
- cpumask_copy(irq_data_get_affinity_mask(d), cpumask);
irq_data_update_effective_affinity(d, cpumask_of(cpu));
spin_unlock_irqrestore(&gic_lock, flags);
- return IRQ_SET_MASK_OK_NOCOPY;
+ return IRQ_SET_MASK_OK;
}
#endif
@@ -499,8 +302,8 @@ static void gic_handle_local_int(bool chained)
unsigned long pending, masked;
unsigned int intr, virq;
- pending = gic_read32(GIC_REG(VPE_LOCAL, GIC_VPE_PEND));
- masked = gic_read32(GIC_REG(VPE_LOCAL, GIC_VPE_MASK));
+ pending = read_gic_vl_pend();
+ masked = read_gic_vl_mask();
bitmap_and(&pending, &pending, &masked, GIC_NUM_LOCAL_INTRS);
@@ -518,14 +321,14 @@ static void gic_mask_local_irq(struct irq_data *d)
{
int intr = GIC_HWIRQ_TO_LOCAL(d->hwirq);
- gic_write32(GIC_REG(VPE_LOCAL, GIC_VPE_RMASK), 1 << intr);
+ write_gic_vl_rmask(BIT(intr));
}
static void gic_unmask_local_irq(struct irq_data *d)
{
int intr = GIC_HWIRQ_TO_LOCAL(d->hwirq);
- gic_write32(GIC_REG(VPE_LOCAL, GIC_VPE_SMASK), 1 << intr);
+ write_gic_vl_smask(BIT(intr));
}
static struct irq_chip gic_local_irq_controller = {
@@ -542,9 +345,8 @@ static void gic_mask_local_irq_all_vpes(struct irq_data *d)
spin_lock_irqsave(&gic_lock, flags);
for (i = 0; i < gic_vpes; i++) {
- gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR),
- mips_cm_vp_id(i));
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_RMASK), 1 << intr);
+ write_gic_vl_other(mips_cm_vp_id(i));
+ write_gic_vo_rmask(BIT(intr));
}
spin_unlock_irqrestore(&gic_lock, flags);
}
@@ -557,9 +359,8 @@ static void gic_unmask_local_irq_all_vpes(struct irq_data *d)
spin_lock_irqsave(&gic_lock, flags);
for (i = 0; i < gic_vpes; i++) {
- gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR),
- mips_cm_vp_id(i));
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_SMASK), 1 << intr);
+ write_gic_vl_other(mips_cm_vp_id(i));
+ write_gic_vo_smask(BIT(intr));
}
spin_unlock_irqrestore(&gic_lock, flags);
}
@@ -582,103 +383,50 @@ static void gic_irq_dispatch(struct irq_desc *desc)
gic_handle_shared_int(true);
}
-static void __init gic_basic_init(void)
-{
- unsigned int i;
-
- board_bind_eic_interrupt = &gic_bind_eic_interrupt;
-
- /* Setup defaults */
- for (i = 0; i < gic_shared_intrs; i++) {
- gic_set_polarity(i, GIC_POL_POS);
- gic_set_trigger(i, GIC_TRIG_LEVEL);
- gic_reset_mask(i);
- }
-
- for (i = 0; i < gic_vpes; i++) {
- unsigned int j;
-
- gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR),
- mips_cm_vp_id(i));
- for (j = 0; j < GIC_NUM_LOCAL_INTRS; j++) {
- if (!gic_local_irq_is_routable(j))
- continue;
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_RMASK), 1 << j);
- }
- }
-}
-
static int gic_local_irq_domain_map(struct irq_domain *d, unsigned int virq,
irq_hw_number_t hw)
{
int intr = GIC_HWIRQ_TO_LOCAL(hw);
- int ret = 0;
int i;
unsigned long flags;
+ u32 val;
if (!gic_local_irq_is_routable(intr))
return -EPERM;
+ if (intr > GIC_LOCAL_INT_FDC) {
+ pr_err("Invalid local IRQ %d\n", intr);
+ return -EINVAL;
+ }
+
+ if (intr == GIC_LOCAL_INT_TIMER) {
+ /* CONFIG_MIPS_CMP workaround (see __gic_init) */
+ val = GIC_MAP_PIN_MAP_TO_PIN | timer_cpu_pin;
+ } else {
+ val = GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin;
+ }
+
spin_lock_irqsave(&gic_lock, flags);
for (i = 0; i < gic_vpes; i++) {
- u32 val = GIC_MAP_TO_PIN_MSK | gic_cpu_pin;
-
- gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR),
- mips_cm_vp_id(i));
-
- switch (intr) {
- case GIC_LOCAL_INT_WD:
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_WD_MAP), val);
- break;
- case GIC_LOCAL_INT_COMPARE:
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_COMPARE_MAP),
- val);
- break;
- case GIC_LOCAL_INT_TIMER:
- /* CONFIG_MIPS_CMP workaround (see __gic_init) */
- val = GIC_MAP_TO_PIN_MSK | timer_cpu_pin;
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_TIMER_MAP),
- val);
- break;
- case GIC_LOCAL_INT_PERFCTR:
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_PERFCTR_MAP),
- val);
- break;
- case GIC_LOCAL_INT_SWINT0:
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_SWINT0_MAP),
- val);
- break;
- case GIC_LOCAL_INT_SWINT1:
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_SWINT1_MAP),
- val);
- break;
- case GIC_LOCAL_INT_FDC:
- gic_write32(GIC_REG(VPE_OTHER, GIC_VPE_FDC_MAP), val);
- break;
- default:
- pr_err("Invalid local IRQ %d\n", intr);
- ret = -EINVAL;
- break;
- }
+ write_gic_vl_other(mips_cm_vp_id(i));
+ write_gic_vo_map(intr, val);
}
spin_unlock_irqrestore(&gic_lock, flags);
- return ret;
+ return 0;
}
static int gic_shared_irq_domain_map(struct irq_domain *d, unsigned int virq,
- irq_hw_number_t hw, unsigned int vpe)
+ irq_hw_number_t hw, unsigned int cpu)
{
int intr = GIC_HWIRQ_TO_SHARED(hw);
unsigned long flags;
- int i;
spin_lock_irqsave(&gic_lock, flags);
- gic_map_to_pin(intr, gic_cpu_pin);
- gic_map_to_vpe(intr, mips_cm_vp_id(vpe));
- for (i = 0; i < min(gic_vpes, NR_CPUS); i++)
- clear_bit(intr, pcpu_masks[i].pcpu_mask);
- set_bit(intr, pcpu_masks[vpe].pcpu_mask);
+ write_gic_map_pin(intr, GIC_MAP_PIN_MAP_TO_PIN | gic_cpu_pin);
+ write_gic_map_vp(intr, BIT(mips_cm_vp_id(cpu)));
+ gic_clear_pcpu_masks(intr);
+ set_bit(intr, per_cpu_ptr(pcpu_masks, cpu));
spin_unlock_irqrestore(&gic_lock, flags);
return 0;
@@ -885,34 +633,69 @@ static const struct irq_domain_ops gic_ipi_domain_ops = {
.match = gic_ipi_domain_match,
};
-static void __init __gic_init(unsigned long gic_base_addr,
- unsigned long gic_addrspace_size,
- unsigned int cpu_vec, unsigned int irqbase,
- struct device_node *node)
+
+static int __init gic_of_init(struct device_node *node,
+ struct device_node *parent)
{
- unsigned int gicconfig, cpu;
- unsigned int v[2];
+ unsigned int cpu_vec, i, j, gicconfig, cpu, v[2];
+ unsigned long reserved;
+ phys_addr_t gic_base;
+ struct resource res;
+ size_t gic_len;
+
+ /* Find the first available CPU vector. */
+ i = 0;
+ reserved = (C_SW0 | C_SW1) >> __fls(C_SW0);
+ while (!of_property_read_u32_index(node, "mti,reserved-cpu-vectors",
+ i++, &cpu_vec))
+ reserved |= BIT(cpu_vec);
+
+ cpu_vec = find_first_zero_bit(&reserved, hweight_long(ST0_IM));
+ if (cpu_vec == hweight_long(ST0_IM)) {
+ pr_err("No CPU vectors available for GIC\n");
+ return -ENODEV;
+ }
+
+ if (of_address_to_resource(node, 0, &res)) {
+ /*
+ * Probe the CM for the GIC base address if not specified
+ * in the device-tree.
+ */
+ if (mips_cm_present()) {
+ gic_base = read_gcr_gic_base() &
+ ~CM_GCR_GIC_BASE_GICEN;
+ gic_len = 0x20000;
+ } else {
+ pr_err("Failed to get GIC memory range\n");
+ return -ENODEV;
+ }
+ } else {
+ gic_base = res.start;
+ gic_len = resource_size(&res);
+ }
- __gic_base_addr = gic_base_addr;
+ if (mips_cm_present()) {
+ write_gcr_gic_base(gic_base | CM_GCR_GIC_BASE_GICEN);
+ /* Ensure GIC region is enabled before trying to access it */
+ __sync();
+ }
- gic_base = ioremap_nocache(gic_base_addr, gic_addrspace_size);
+ mips_gic_base = ioremap_nocache(gic_base, gic_len);
- gicconfig = gic_read(GIC_REG(SHARED, GIC_SH_CONFIG));
- gic_shared_intrs = (gicconfig & GIC_SH_CONFIG_NUMINTRS_MSK) >>
- GIC_SH_CONFIG_NUMINTRS_SHF;
- gic_shared_intrs = ((gic_shared_intrs + 1) * 8);
+ gicconfig = read_gic_config();
+ gic_shared_intrs = gicconfig & GIC_CONFIG_NUMINTERRUPTS;
+ gic_shared_intrs >>= __fls(GIC_CONFIG_NUMINTERRUPTS);
+ gic_shared_intrs = (gic_shared_intrs + 1) * 8;
- gic_vpes = (gicconfig & GIC_SH_CONFIG_NUMVPES_MSK) >>
- GIC_SH_CONFIG_NUMVPES_SHF;
+ gic_vpes = gicconfig & GIC_CONFIG_PVPS;
+ gic_vpes >>= __fls(GIC_CONFIG_PVPS);
gic_vpes = gic_vpes + 1;
if (cpu_has_veic) {
/* Set EIC mode for all VPEs */
for_each_present_cpu(cpu) {
- gic_write(GIC_REG(VPE_LOCAL, GIC_VPE_OTHER_ADDR),
- mips_cm_vp_id(cpu));
- gic_write(GIC_REG(VPE_OTHER, GIC_VPE_CTL),
- GIC_VPE_CTL_EIC_MODE_MSK);
+ write_gic_vl_other(mips_cm_vp_id(cpu));
+ write_gic_vo_ctl(GIC_VX_CTL_EIC);
}
/* Always use vector 1 in EIC mode */
@@ -937,9 +720,7 @@ static void __init __gic_init(unsigned long gic_base_addr,
*/
if (IS_ENABLED(CONFIG_MIPS_CMP) &&
gic_local_irq_is_routable(GIC_LOCAL_INT_TIMER)) {
- timer_cpu_pin = gic_read32(GIC_REG(VPE_LOCAL,
- GIC_VPE_TIMER_MAP)) &
- GIC_MAP_MSK;
+ timer_cpu_pin = read_gic_vl_timer_map() & GIC_MAP_PIN_MAP;
irq_set_chained_handler(MIPS_CPU_IRQ_BASE +
GIC_CPU_PIN_OFFSET +
timer_cpu_pin,
@@ -950,17 +731,21 @@ static void __init __gic_init(unsigned long gic_base_addr,
}
gic_irq_domain = irq_domain_add_simple(node, GIC_NUM_LOCAL_INTRS +
- gic_shared_intrs, irqbase,
+ gic_shared_intrs, 0,
&gic_irq_domain_ops, NULL);
- if (!gic_irq_domain)
- panic("Failed to add GIC IRQ domain");
+ if (!gic_irq_domain) {
+ pr_err("Failed to add GIC IRQ domain");
+ return -ENXIO;
+ }
gic_ipi_domain = irq_domain_add_hierarchy(gic_irq_domain,
IRQ_DOMAIN_FLAG_IPI_PER_CPU,
GIC_NUM_LOCAL_INTRS + gic_shared_intrs,
node, &gic_ipi_domain_ops, NULL);
- if (!gic_ipi_domain)
- panic("Failed to add GIC IPI domain");
+ if (!gic_ipi_domain) {
+ pr_err("Failed to add GIC IPI domain");
+ return -ENXIO;
+ }
irq_domain_update_bus_token(gic_ipi_domain, DOMAIN_BUS_IPI);
@@ -975,64 +760,25 @@ static void __init __gic_init(unsigned long gic_base_addr,
}
bitmap_copy(ipi_available, ipi_resrv, GIC_MAX_INTRS);
- gic_basic_init();
-}
-
-void __init gic_init(unsigned long gic_base_addr,
- unsigned long gic_addrspace_size,
- unsigned int cpu_vec, unsigned int irqbase)
-{
- __gic_init(gic_base_addr, gic_addrspace_size, cpu_vec, irqbase, NULL);
-}
-static int __init gic_of_init(struct device_node *node,
- struct device_node *parent)
-{
- struct resource res;
- unsigned int cpu_vec, i = 0, reserved = 0;
- phys_addr_t gic_base;
- size_t gic_len;
+ board_bind_eic_interrupt = &gic_bind_eic_interrupt;
- /* Find the first available CPU vector. */
- while (!of_property_read_u32_index(node, "mti,reserved-cpu-vectors",
- i++, &cpu_vec))
- reserved |= BIT(cpu_vec);
- for (cpu_vec = 2; cpu_vec < 8; cpu_vec++) {
- if (!(reserved & BIT(cpu_vec)))
- break;
- }
- if (cpu_vec == 8) {
- pr_err("No CPU vectors available for GIC\n");
- return -ENODEV;
+ /* Setup defaults */
+ for (i = 0; i < gic_shared_intrs; i++) {
+ change_gic_pol(i, GIC_POL_ACTIVE_HIGH);
+ change_gic_trig(i, GIC_TRIG_LEVEL);
+ write_gic_rmask(BIT(i));
}
- if (of_address_to_resource(node, 0, &res)) {
- /*
- * Probe the CM for the GIC base address if not specified
- * in the device-tree.
- */
- if (mips_cm_present()) {
- gic_base = read_gcr_gic_base() &
- ~CM_GCR_GIC_BASE_GICEN_MSK;
- gic_len = 0x20000;
- } else {
- pr_err("Failed to get GIC memory range\n");
- return -ENODEV;
+ for (i = 0; i < gic_vpes; i++) {
+ write_gic_vl_other(mips_cm_vp_id(i));
+ for (j = 0; j < GIC_NUM_LOCAL_INTRS; j++) {
+ if (!gic_local_irq_is_routable(j))
+ continue;
+ write_gic_vo_rmask(BIT(j));
}
- } else {
- gic_base = res.start;
- gic_len = resource_size(&res);
}
- if (mips_cm_present()) {
- write_gcr_gic_base(gic_base | CM_GCR_GIC_BASE_GICEN_MSK);
- /* Ensure GIC region is enabled before trying to access it */
- __sync();
- }
- gic_present = true;
-
- __gic_init(gic_base, gic_len, cpu_vec, 0, node);
-
return 0;
}
IRQCHIP_DECLARE(mips_gic, "mti,gic", gic_of_init);
diff --git a/drivers/leds/leds-clevo-mail.c b/drivers/leds/leds-clevo-mail.c
index 0f9ed1ea0e89..492789f56896 100644
--- a/drivers/leds/leds-clevo-mail.c
+++ b/drivers/leds/leds-clevo-mail.c
@@ -40,7 +40,7 @@ static int __init clevo_mail_led_dmi_callback(const struct dmi_system_id *id)
* detected as working, but in reality it is not) as low as
* possible.
*/
-static struct dmi_system_id clevo_mail_led_dmi_table[] __initdata = {
+static const struct dmi_system_id clevo_mail_led_dmi_table[] __initconst = {
{
.callback = clevo_mail_led_dmi_callback,
.ident = "Clevo D410J",
diff --git a/drivers/leds/leds-ss4200.c b/drivers/leds/leds-ss4200.c
index 732eb86bc1a5..a9db8674cd02 100644
--- a/drivers/leds/leds-ss4200.c
+++ b/drivers/leds/leds-ss4200.c
@@ -91,7 +91,7 @@ MODULE_PARM_DESC(nodetect, "Skip DMI-based hardware detection");
* detected as working, but in reality it is not) as low as
* possible.
*/
-static struct dmi_system_id nas_led_whitelist[] __initdata = {
+static const struct dmi_system_id nas_led_whitelist[] __initconst = {
{
.callback = ss4200_led_dmi_callback,
.ident = "Intel SS4200-E",
diff --git a/drivers/md/dm-bufio.c b/drivers/md/dm-bufio.c
index 9601225e0ae9..d216a8f7bc22 100644
--- a/drivers/md/dm-bufio.c
+++ b/drivers/md/dm-bufio.c
@@ -64,6 +64,12 @@
#define DM_BUFIO_BLOCK_SIZE_GFP_LIMIT (PAGE_SIZE << (MAX_ORDER - 1))
/*
+ * Align buffer writes to this boundary.
+ * Tests show that SSDs have the highest IOPS when using 4k writes.
+ */
+#define DM_BUFIO_WRITE_ALIGN 4096
+
+/*
* dm_buffer->list_mode
*/
#define LIST_CLEAN 0
@@ -149,6 +155,10 @@ struct dm_buffer {
blk_status_t write_error;
unsigned long state;
unsigned long last_accessed;
+ unsigned dirty_start;
+ unsigned dirty_end;
+ unsigned write_start;
+ unsigned write_end;
struct dm_bufio_client *c;
struct list_head write_list;
struct bio bio;
@@ -560,7 +570,7 @@ static void dmio_complete(unsigned long error, void *context)
}
static void use_dmio(struct dm_buffer *b, int rw, sector_t sector,
- unsigned n_sectors, bio_end_io_t *end_io)
+ unsigned n_sectors, unsigned offset, bio_end_io_t *end_io)
{
int r;
struct dm_io_request io_req = {
@@ -578,10 +588,10 @@ static void use_dmio(struct dm_buffer *b, int rw, sector_t sector,
if (b->data_mode != DATA_MODE_VMALLOC) {
io_req.mem.type = DM_IO_KMEM;
- io_req.mem.ptr.addr = b->data;
+ io_req.mem.ptr.addr = (char *)b->data + offset;
} else {
io_req.mem.type = DM_IO_VMA;
- io_req.mem.ptr.vma = b->data;
+ io_req.mem.ptr.vma = (char *)b->data + offset;
}
b->bio.bi_end_io = end_io;
@@ -609,10 +619,10 @@ static void inline_endio(struct bio *bio)
}
static void use_inline_bio(struct dm_buffer *b, int rw, sector_t sector,
- unsigned n_sectors, bio_end_io_t *end_io)
+ unsigned n_sectors, unsigned offset, bio_end_io_t *end_io)
{
char *ptr;
- int len;
+ unsigned len;
bio_init(&b->bio, b->bio_vec, DM_BUFIO_INLINE_VECS);
b->bio.bi_iter.bi_sector = sector;
@@ -625,29 +635,20 @@ static void use_inline_bio(struct dm_buffer *b, int rw, sector_t sector,
b->bio.bi_private = end_io;
bio_set_op_attrs(&b->bio, rw, 0);
- /*
- * We assume that if len >= PAGE_SIZE ptr is page-aligned.
- * If len < PAGE_SIZE the buffer doesn't cross page boundary.
- */
- ptr = b->data;
+ ptr = (char *)b->data + offset;
len = n_sectors << SECTOR_SHIFT;
- if (len >= PAGE_SIZE)
- BUG_ON((unsigned long)ptr & (PAGE_SIZE - 1));
- else
- BUG_ON((unsigned long)ptr & (len - 1));
-
do {
- if (!bio_add_page(&b->bio, virt_to_page(ptr),
- len < PAGE_SIZE ? len : PAGE_SIZE,
+ unsigned this_step = min((unsigned)(PAGE_SIZE - offset_in_page(ptr)), len);
+ if (!bio_add_page(&b->bio, virt_to_page(ptr), this_step,
offset_in_page(ptr))) {
BUG_ON(b->c->block_size <= PAGE_SIZE);
- use_dmio(b, rw, sector, n_sectors, end_io);
+ use_dmio(b, rw, sector, n_sectors, offset, end_io);
return;
}
- len -= PAGE_SIZE;
- ptr += PAGE_SIZE;
+ len -= this_step;
+ ptr += this_step;
} while (len > 0);
submit_bio(&b->bio);
@@ -657,18 +658,33 @@ static void submit_io(struct dm_buffer *b, int rw, bio_end_io_t *end_io)
{
unsigned n_sectors;
sector_t sector;
-
- if (rw == WRITE && b->c->write_callback)
- b->c->write_callback(b);
+ unsigned offset, end;
sector = (b->block << b->c->sectors_per_block_bits) + b->c->start;
- n_sectors = 1 << b->c->sectors_per_block_bits;
+
+ if (rw != WRITE) {
+ n_sectors = 1 << b->c->sectors_per_block_bits;
+ offset = 0;
+ } else {
+ if (b->c->write_callback)
+ b->c->write_callback(b);
+ offset = b->write_start;
+ end = b->write_end;
+ offset &= -DM_BUFIO_WRITE_ALIGN;
+ end += DM_BUFIO_WRITE_ALIGN - 1;
+ end &= -DM_BUFIO_WRITE_ALIGN;
+ if (unlikely(end > b->c->block_size))
+ end = b->c->block_size;
+
+ sector += offset >> SECTOR_SHIFT;
+ n_sectors = (end - offset) >> SECTOR_SHIFT;
+ }
if (n_sectors <= ((DM_BUFIO_INLINE_VECS * PAGE_SIZE) >> SECTOR_SHIFT) &&
b->data_mode != DATA_MODE_VMALLOC)
- use_inline_bio(b, rw, sector, n_sectors, end_io);
+ use_inline_bio(b, rw, sector, n_sectors, offset, end_io);
else
- use_dmio(b, rw, sector, n_sectors, end_io);
+ use_dmio(b, rw, sector, n_sectors, offset, end_io);
}
/*----------------------------------------------------------------
@@ -720,6 +736,9 @@ static void __write_dirty_buffer(struct dm_buffer *b,
clear_bit(B_DIRTY, &b->state);
wait_on_bit_lock_io(&b->state, B_WRITING, TASK_UNINTERRUPTIBLE);
+ b->write_start = b->dirty_start;
+ b->write_end = b->dirty_end;
+
if (!write_list)
submit_io(b, WRITE, write_endio);
else
@@ -1221,19 +1240,37 @@ void dm_bufio_release(struct dm_buffer *b)
}
EXPORT_SYMBOL_GPL(dm_bufio_release);
-void dm_bufio_mark_buffer_dirty(struct dm_buffer *b)
+void dm_bufio_mark_partial_buffer_dirty(struct dm_buffer *b,
+ unsigned start, unsigned end)
{
struct dm_bufio_client *c = b->c;
+ BUG_ON(start >= end);
+ BUG_ON(end > b->c->block_size);
+
dm_bufio_lock(c);
BUG_ON(test_bit(B_READING, &b->state));
- if (!test_and_set_bit(B_DIRTY, &b->state))
+ if (!test_and_set_bit(B_DIRTY, &b->state)) {
+ b->dirty_start = start;
+ b->dirty_end = end;
__relink_lru(b, LIST_DIRTY);
+ } else {
+ if (start < b->dirty_start)
+ b->dirty_start = start;
+ if (end > b->dirty_end)
+ b->dirty_end = end;
+ }
dm_bufio_unlock(c);
}
+EXPORT_SYMBOL_GPL(dm_bufio_mark_partial_buffer_dirty);
+
+void dm_bufio_mark_buffer_dirty(struct dm_buffer *b)
+{
+ dm_bufio_mark_partial_buffer_dirty(b, 0, b->c->block_size);
+}
EXPORT_SYMBOL_GPL(dm_bufio_mark_buffer_dirty);
void dm_bufio_write_dirty_buffers_async(struct dm_bufio_client *c)
@@ -1398,6 +1435,8 @@ retry:
wait_on_bit_io(&b->state, B_WRITING,
TASK_UNINTERRUPTIBLE);
set_bit(B_DIRTY, &b->state);
+ b->dirty_start = 0;
+ b->dirty_end = c->block_size;
__unlink_buffer(b);
__link_buffer(b, new_block, LIST_DIRTY);
} else {
diff --git a/drivers/md/dm-bufio.h b/drivers/md/dm-bufio.h
index b6d8f53ec15b..be732d3f8611 100644
--- a/drivers/md/dm-bufio.h
+++ b/drivers/md/dm-bufio.h
@@ -94,6 +94,15 @@ void dm_bufio_release(struct dm_buffer *b);
void dm_bufio_mark_buffer_dirty(struct dm_buffer *b);
/*
+ * Mark a part of the buffer dirty.
+ *
+ * The specified part of the buffer is scheduled to be written. dm-bufio may
+ * write the specified part of the buffer or it may write a larger superset.
+ */
+void dm_bufio_mark_partial_buffer_dirty(struct dm_buffer *b,
+ unsigned start, unsigned end);
+
+/*
* Initiate writing of dirty buffers, without waiting for completion.
*/
void dm_bufio_write_dirty_buffers_async(struct dm_bufio_client *c);
diff --git a/drivers/md/dm-cache-target.c b/drivers/md/dm-cache-target.c
index dcac25c2be7a..8785134c9f1f 100644
--- a/drivers/md/dm-cache-target.c
+++ b/drivers/md/dm-cache-target.c
@@ -2306,7 +2306,7 @@ static void init_features(struct cache_features *cf)
static int parse_features(struct cache_args *ca, struct dm_arg_set *as,
char **error)
{
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 2, "Invalid number of cache feature arguments"},
};
@@ -2348,7 +2348,7 @@ static int parse_features(struct cache_args *ca, struct dm_arg_set *as,
static int parse_policy(struct cache_args *ca, struct dm_arg_set *as,
char **error)
{
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 1024, "Invalid number of policy arguments"},
};
diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
index 54aef8ed97db..a55ffd4f5933 100644
--- a/drivers/md/dm-crypt.c
+++ b/drivers/md/dm-crypt.c
@@ -2529,7 +2529,7 @@ static int crypt_ctr_optional(struct dm_target *ti, unsigned int argc, char **ar
{
struct crypt_config *cc = ti->private;
struct dm_arg_set as;
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 6, "Invalid number of feature args"},
};
unsigned int opt_params, val;
diff --git a/drivers/md/dm-flakey.c b/drivers/md/dm-flakey.c
index 7146c2d9762d..b82cb1ab1eaa 100644
--- a/drivers/md/dm-flakey.c
+++ b/drivers/md/dm-flakey.c
@@ -51,7 +51,7 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
unsigned argc;
const char *arg_name;
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 6, "Invalid number of feature args"},
{1, UINT_MAX, "Invalid corrupt bio byte"},
{0, 255, "Invalid corrupt value to write into bio byte (0-255)"},
@@ -178,7 +178,7 @@ static int parse_features(struct dm_arg_set *as, struct flakey_c *fc,
*/
static int flakey_ctr(struct dm_target *ti, unsigned int argc, char **argv)
{
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, UINT_MAX, "Invalid up interval"},
{0, UINT_MAX, "Invalid down interval"},
};
diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
index 27c0f223f8ea..096fe9b66c50 100644
--- a/drivers/md/dm-integrity.c
+++ b/drivers/md/dm-integrity.c
@@ -225,6 +225,8 @@ struct dm_integrity_c {
struct alg_spec internal_hash_alg;
struct alg_spec journal_crypt_alg;
struct alg_spec journal_mac_alg;
+
+ atomic64_t number_of_mismatches;
};
struct dm_integrity_range {
@@ -298,7 +300,7 @@ static void __DEBUG_bytes(__u8 *bytes, size_t len, const char *msg, ...)
/*
* DM Integrity profile, protection is performed layer above (dm-crypt)
*/
-static struct blk_integrity_profile dm_integrity_profile = {
+static const struct blk_integrity_profile dm_integrity_profile = {
.name = "DM-DIF-EXT-TAG",
.generate_fn = NULL,
.verify_fn = NULL,
@@ -310,6 +312,8 @@ static void dm_integrity_dtr(struct dm_target *ti);
static void dm_integrity_io_error(struct dm_integrity_c *ic, const char *msg, int err)
{
+ if (err == -EILSEQ)
+ atomic64_inc(&ic->number_of_mismatches);
if (!cmpxchg(&ic->failed, 0, err))
DMERR("Error on %s: %d", msg, err);
}
@@ -770,13 +774,13 @@ static void write_journal(struct dm_integrity_c *ic, unsigned commit_start, unsi
unsigned i;
io_comp.ic = ic;
- io_comp.comp = COMPLETION_INITIALIZER_ONSTACK(io_comp.comp);
+ init_completion(&io_comp.comp);
if (commit_start + commit_sections <= ic->journal_sections) {
io_comp.in_flight = (atomic_t)ATOMIC_INIT(1);
if (ic->journal_io) {
crypt_comp_1.ic = ic;
- crypt_comp_1.comp = COMPLETION_INITIALIZER_ONSTACK(crypt_comp_1.comp);
+ init_completion(&crypt_comp_1.comp);
crypt_comp_1.in_flight = (atomic_t)ATOMIC_INIT(0);
encrypt_journal(ic, true, commit_start, commit_sections, &crypt_comp_1);
wait_for_completion_io(&crypt_comp_1.comp);
@@ -792,18 +796,18 @@ static void write_journal(struct dm_integrity_c *ic, unsigned commit_start, unsi
to_end = ic->journal_sections - commit_start;
if (ic->journal_io) {
crypt_comp_1.ic = ic;
- crypt_comp_1.comp = COMPLETION_INITIALIZER_ONSTACK(crypt_comp_1.comp);
+ init_completion(&crypt_comp_1.comp);
crypt_comp_1.in_flight = (atomic_t)ATOMIC_INIT(0);
encrypt_journal(ic, true, commit_start, to_end, &crypt_comp_1);
if (try_wait_for_completion(&crypt_comp_1.comp)) {
rw_journal(ic, REQ_OP_WRITE, REQ_FUA, commit_start, to_end, &io_comp);
- crypt_comp_1.comp = COMPLETION_INITIALIZER_ONSTACK(crypt_comp_1.comp);
+ reinit_completion(&crypt_comp_1.comp);
crypt_comp_1.in_flight = (atomic_t)ATOMIC_INIT(0);
encrypt_journal(ic, true, 0, commit_sections - to_end, &crypt_comp_1);
wait_for_completion_io(&crypt_comp_1.comp);
} else {
crypt_comp_2.ic = ic;
- crypt_comp_2.comp = COMPLETION_INITIALIZER_ONSTACK(crypt_comp_2.comp);
+ init_completion(&crypt_comp_2.comp);
crypt_comp_2.in_flight = (atomic_t)ATOMIC_INIT(0);
encrypt_journal(ic, true, 0, commit_sections - to_end, &crypt_comp_2);
wait_for_completion_io(&crypt_comp_1.comp);
@@ -1041,7 +1045,7 @@ static int dm_integrity_rw_tag(struct dm_integrity_c *ic, unsigned char *tag, se
memcpy(tag, dp, to_copy);
} else if (op == TAG_WRITE) {
memcpy(dp, tag, to_copy);
- dm_bufio_mark_buffer_dirty(b);
+ dm_bufio_mark_partial_buffer_dirty(b, *metadata_offset, *metadata_offset + to_copy);
} else {
/* e.g.: op == TAG_CMP */
if (unlikely(memcmp(dp, tag, to_copy))) {
@@ -1275,6 +1279,7 @@ again:
DMERR("Checksum failed at sector 0x%llx",
(unsigned long long)(sector - ((r + ic->tag_size - 1) / ic->tag_size)));
r = -EILSEQ;
+ atomic64_inc(&ic->number_of_mismatches);
}
if (likely(checksums != checksums_onstack))
kfree(checksums);
@@ -1676,7 +1681,7 @@ sleep:
dio->in_flight = (atomic_t)ATOMIC_INIT(2);
if (need_sync_io) {
- read_comp = COMPLETION_INITIALIZER_ONSTACK(read_comp);
+ init_completion(&read_comp);
dio->completion = &read_comp;
} else
dio->completion = NULL;
@@ -1700,7 +1705,11 @@ sleep:
if (need_sync_io) {
wait_for_completion_io(&read_comp);
- integrity_metadata(&dio->work);
+ if (likely(!bio->bi_status))
+ integrity_metadata(&dio->work);
+ else
+ dec_in_flight(dio);
+
} else {
INIT_WORK(&dio->work, integrity_metadata);
queue_work(ic->metadata_wq, &dio->work);
@@ -1834,7 +1843,7 @@ static void do_journal_write(struct dm_integrity_c *ic, unsigned write_start,
comp.ic = ic;
comp.in_flight = (atomic_t)ATOMIC_INIT(1);
- comp.comp = COMPLETION_INITIALIZER_ONSTACK(comp.comp);
+ init_completion(&comp.comp);
i = write_start;
for (n = 0; n < write_sections; n++, i++, wraparound_section(ic, &i)) {
@@ -2061,7 +2070,7 @@ static void replay_journal(struct dm_integrity_c *ic)
if (ic->journal_io) {
struct journal_completion crypt_comp;
crypt_comp.ic = ic;
- crypt_comp.comp = COMPLETION_INITIALIZER_ONSTACK(crypt_comp.comp);
+ init_completion(&crypt_comp.comp);
crypt_comp.in_flight = (atomic_t)ATOMIC_INIT(0);
encrypt_journal(ic, false, 0, ic->journal_sections, &crypt_comp);
wait_for_completion(&crypt_comp.comp);
@@ -2233,7 +2242,7 @@ static void dm_integrity_status(struct dm_target *ti, status_type_t type,
switch (type) {
case STATUSTYPE_INFO:
- result[0] = '\0';
+ DMEMIT("%llu", (unsigned long long)atomic64_read(&ic->number_of_mismatches));
break;
case STATUSTYPE_TABLE: {
@@ -2634,7 +2643,7 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
memset(iv, 0x00, ivsize);
skcipher_request_set_crypt(req, sg, sg, PAGE_SIZE * ic->journal_pages + sizeof ic->commit_ids, iv);
- comp.comp = COMPLETION_INITIALIZER_ONSTACK(comp.comp);
+ init_completion(&comp.comp);
comp.in_flight = (atomic_t)ATOMIC_INIT(1);
if (do_crypt(true, req, &comp))
wait_for_completion(&comp.comp);
@@ -2691,7 +2700,7 @@ static int create_journal(struct dm_integrity_c *ic, char **error)
sg_init_one(&sg, crypt_data, crypt_len);
skcipher_request_set_crypt(req, &sg, &sg, crypt_len, iv);
- comp.comp = COMPLETION_INITIALIZER_ONSTACK(comp.comp);
+ init_completion(&comp.comp);
comp.in_flight = (atomic_t)ATOMIC_INIT(1);
if (do_crypt(true, req, &comp))
wait_for_completion(&comp.comp);
@@ -2778,7 +2787,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)
int r;
unsigned extra_args;
struct dm_arg_set as;
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 9, "Invalid number of feature args"},
};
unsigned journal_sectors, interleave_sectors, buffer_sectors, journal_watermark, sync_msec;
@@ -2806,6 +2815,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)
bio_list_init(&ic->flush_bio_list);
init_waitqueue_head(&ic->copy_to_journal_wait);
init_completion(&ic->crypto_backoff);
+ atomic64_set(&ic->number_of_mismatches, 0);
r = dm_get_device(ti, argv[0], dm_table_get_mode(ti->table), &ic->dev);
if (r) {
@@ -3202,7 +3212,7 @@ static void dm_integrity_dtr(struct dm_target *ti)
static struct target_type integrity_target = {
.name = "integrity",
- .version = {1, 0, 0},
+ .version = {1, 1, 0},
.module = THIS_MODULE,
.features = DM_TARGET_SINGLETON | DM_TARGET_INTEGRITY,
.ctr = dm_integrity_ctr,
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index e06f0ef7d2ec..8756a6850431 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -1629,7 +1629,7 @@ static int target_message(struct file *filp, struct dm_ioctl *param, size_t para
*---------------------------------------------------------------*/
static ioctl_fn lookup_ioctl(unsigned int cmd, int *ioctl_flags)
{
- static struct {
+ static const struct {
int cmd;
int flags;
ioctl_fn fn;
diff --git a/drivers/md/dm-linear.c b/drivers/md/dm-linear.c
index 405eca206d67..d5f8eff7c11d 100644
--- a/drivers/md/dm-linear.c
+++ b/drivers/md/dm-linear.c
@@ -184,20 +184,6 @@ static size_t linear_dax_copy_from_iter(struct dm_target *ti, pgoff_t pgoff,
return dax_copy_from_iter(dax_dev, pgoff, addr, bytes, i);
}
-static void linear_dax_flush(struct dm_target *ti, pgoff_t pgoff, void *addr,
- size_t size)
-{
- struct linear_c *lc = ti->private;
- struct block_device *bdev = lc->dev->bdev;
- struct dax_device *dax_dev = lc->dev->dax_dev;
- sector_t dev_sector, sector = pgoff * PAGE_SECTORS;
-
- dev_sector = linear_map_sector(ti, sector);
- if (bdev_dax_pgoff(bdev, dev_sector, ALIGN(size, PAGE_SIZE), &pgoff))
- return;
- dax_flush(dax_dev, pgoff, addr, size);
-}
-
static struct target_type linear_target = {
.name = "linear",
.version = {1, 4, 0},
@@ -212,7 +198,6 @@ static struct target_type linear_target = {
.iterate_devices = linear_iterate_devices,
.direct_access = linear_dax_direct_access,
.dax_copy_from_iter = linear_dax_copy_from_iter,
- .dax_flush = linear_dax_flush,
};
int __init dm_linear_init(void)
diff --git a/drivers/md/dm-log-writes.c b/drivers/md/dm-log-writes.c
index 534a254eb977..8b80a9ce9ea9 100644
--- a/drivers/md/dm-log-writes.c
+++ b/drivers/md/dm-log-writes.c
@@ -100,6 +100,7 @@ struct log_writes_c {
struct dm_dev *logdev;
u64 logged_entries;
u32 sectorsize;
+ u32 sectorshift;
atomic_t io_blocks;
atomic_t pending_blocks;
sector_t next_sector;
@@ -128,6 +129,18 @@ struct per_bio_data {
struct pending_block *block;
};
+static inline sector_t bio_to_dev_sectors(struct log_writes_c *lc,
+ sector_t sectors)
+{
+ return sectors >> (lc->sectorshift - SECTOR_SHIFT);
+}
+
+static inline sector_t dev_to_bio_sectors(struct log_writes_c *lc,
+ sector_t sectors)
+{
+ return sectors << (lc->sectorshift - SECTOR_SHIFT);
+}
+
static void put_pending_block(struct log_writes_c *lc)
{
if (atomic_dec_and_test(&lc->pending_blocks)) {
@@ -253,7 +266,7 @@ static int log_one_block(struct log_writes_c *lc,
if (!block->vec_cnt)
goto out;
- sector++;
+ sector += dev_to_bio_sectors(lc, 1);
atomic_inc(&lc->io_blocks);
bio = bio_alloc(GFP_KERNEL, min(block->vec_cnt, BIO_MAX_PAGES));
@@ -354,10 +367,9 @@ static int log_writes_kthread(void *arg)
goto next;
sector = lc->next_sector;
- if (block->flags & LOG_DISCARD_FLAG)
- lc->next_sector++;
- else
- lc->next_sector += block->nr_sectors + 1;
+ if (!(block->flags & LOG_DISCARD_FLAG))
+ lc->next_sector += dev_to_bio_sectors(lc, block->nr_sectors);
+ lc->next_sector += dev_to_bio_sectors(lc, 1);
/*
* Apparently the size of the device may not be known
@@ -399,7 +411,7 @@ next:
if (!try_to_freeze()) {
set_current_state(TASK_INTERRUPTIBLE);
if (!kthread_should_stop() &&
- !atomic_read(&lc->pending_blocks))
+ list_empty(&lc->logging_blocks))
schedule();
__set_current_state(TASK_RUNNING);
}
@@ -435,7 +447,6 @@ static int log_writes_ctr(struct dm_target *ti, unsigned int argc, char **argv)
INIT_LIST_HEAD(&lc->unflushed_blocks);
INIT_LIST_HEAD(&lc->logging_blocks);
init_waitqueue_head(&lc->wait);
- lc->sectorsize = 1 << SECTOR_SHIFT;
atomic_set(&lc->io_blocks, 0);
atomic_set(&lc->pending_blocks, 0);
@@ -455,6 +466,8 @@ static int log_writes_ctr(struct dm_target *ti, unsigned int argc, char **argv)
goto bad;
}
+ lc->sectorsize = bdev_logical_block_size(lc->dev->bdev);
+ lc->sectorshift = ilog2(lc->sectorsize);
lc->log_kthread = kthread_run(log_writes_kthread, lc, "log-write");
if (IS_ERR(lc->log_kthread)) {
ret = PTR_ERR(lc->log_kthread);
@@ -464,8 +477,12 @@ static int log_writes_ctr(struct dm_target *ti, unsigned int argc, char **argv)
goto bad;
}
- /* We put the super at sector 0, start logging at sector 1 */
- lc->next_sector = 1;
+ /*
+ * next_sector is in 512b sectors to correspond to what bi_sector expects.
+ * The super starts at sector 0, and the next_sector is the next logical
+ * one based on the sectorsize of the device.
+ */
+ lc->next_sector = lc->sectorsize >> SECTOR_SHIFT;
lc->logging_enabled = true;
lc->end_sector = logdev_last_sector(lc);
lc->device_supports_discard = true;
@@ -599,8 +616,8 @@ static int log_writes_map(struct dm_target *ti, struct bio *bio)
if (discard_bio)
block->flags |= LOG_DISCARD_FLAG;
- block->sector = bio->bi_iter.bi_sector;
- block->nr_sectors = bio_sectors(bio);
+ block->sector = bio_to_dev_sectors(lc, bio->bi_iter.bi_sector);
+ block->nr_sectors = bio_to_dev_sectors(lc, bio_sectors(bio));
/* We don't need the data, just submit */
if (discard_bio) {
@@ -767,9 +784,12 @@ static void log_writes_io_hints(struct dm_target *ti, struct queue_limits *limit
if (!q || !blk_queue_discard(q)) {
lc->device_supports_discard = false;
- limits->discard_granularity = 1 << SECTOR_SHIFT;
+ limits->discard_granularity = lc->sectorsize;
limits->max_discard_sectors = (UINT_MAX >> SECTOR_SHIFT);
}
+ limits->logical_block_size = bdev_logical_block_size(lc->dev->bdev);
+ limits->physical_block_size = bdev_physical_block_size(lc->dev->bdev);
+ limits->io_min = limits->physical_block_size;
}
static struct target_type log_writes_target = {
diff --git a/drivers/md/dm-mpath.c b/drivers/md/dm-mpath.c
index 96aedaac2c64..11f273d2f018 100644
--- a/drivers/md/dm-mpath.c
+++ b/drivers/md/dm-mpath.c
@@ -632,6 +632,10 @@ static void process_queued_bios(struct work_struct *work)
case DM_MAPIO_REMAPPED:
generic_make_request(bio);
break;
+ case 0:
+ break;
+ default:
+ WARN_ONCE(true, "__multipath_map_bio() returned %d\n", r);
}
}
blk_finish_plug(&plug);
@@ -698,7 +702,7 @@ static int parse_path_selector(struct dm_arg_set *as, struct priority_group *pg,
struct path_selector_type *pst;
unsigned ps_argc;
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 1024, "invalid number of path selector args"},
};
@@ -822,7 +826,7 @@ retain:
static struct priority_group *parse_priority_group(struct dm_arg_set *as,
struct multipath *m)
{
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{1, 1024, "invalid number of paths"},
{0, 1024, "invalid number of selector args"}
};
@@ -898,7 +902,7 @@ static int parse_hw_handler(struct dm_arg_set *as, struct multipath *m)
int ret;
struct dm_target *ti = m->ti;
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 1024, "invalid number of hardware handler args"},
};
@@ -950,7 +954,7 @@ static int parse_features(struct dm_arg_set *as, struct multipath *m)
struct dm_target *ti = m->ti;
const char *arg_name;
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 8, "invalid number of feature args"},
{1, 50, "pg_init_retries must be between 1 and 50"},
{0, 60000, "pg_init_delay_msecs must be between 0 and 60000"},
@@ -1019,7 +1023,7 @@ static int parse_features(struct dm_arg_set *as, struct multipath *m)
static int multipath_ctr(struct dm_target *ti, unsigned argc, char **argv)
{
/* target arguments */
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 1024, "invalid number of priority groups"},
{0, 1024, "invalid initial priority group number"},
};
@@ -1379,6 +1383,7 @@ static void pg_init_done(void *data, int errors)
case SCSI_DH_RETRY:
/* Wait before retrying. */
delay_retry = 1;
+ /* fall through */
case SCSI_DH_IMM_RETRY:
case SCSI_DH_RES_TEMP_UNAVAIL:
if (pg_init_limit_reached(m, pgpath))
diff --git a/drivers/md/dm-rq.c b/drivers/md/dm-rq.c
index c6ebc5b1e00e..eadfcfd106ff 100644
--- a/drivers/md/dm-rq.c
+++ b/drivers/md/dm-rq.c
@@ -117,9 +117,9 @@ static void end_clone_bio(struct bio *clone)
struct dm_rq_clone_bio_info *info =
container_of(clone, struct dm_rq_clone_bio_info, clone);
struct dm_rq_target_io *tio = info->tio;
- struct bio *bio = info->orig;
unsigned int nr_bytes = info->orig->bi_iter.bi_size;
blk_status_t error = clone->bi_status;
+ bool is_last = !clone->bi_next;
bio_put(clone);
@@ -137,28 +137,23 @@ static void end_clone_bio(struct bio *clone)
* when the request is completed.
*/
tio->error = error;
- return;
+ goto exit;
}
/*
* I/O for the bio successfully completed.
* Notice the data completion to the upper layer.
*/
-
- /*
- * bios are processed from the head of the list.
- * So the completing bio should always be rq->bio.
- * If it's not, something wrong is happening.
- */
- if (tio->orig->bio != bio)
- DMERR("bio completion is going in the middle of the request");
+ tio->completed += nr_bytes;
/*
* Update the original request.
* Do not use blk_end_request() here, because it may complete
* the original request before the clone, and break the ordering.
*/
- blk_update_request(tio->orig, BLK_STS_OK, nr_bytes);
+ if (is_last)
+ exit:
+ blk_update_request(tio->orig, BLK_STS_OK, tio->completed);
}
static struct dm_rq_target_io *tio_from_request(struct request *rq)
@@ -237,14 +232,14 @@ static void dm_end_request(struct request *clone, blk_status_t error)
/*
* Requeue the original request of a clone.
*/
-static void dm_old_requeue_request(struct request *rq)
+static void dm_old_requeue_request(struct request *rq, unsigned long delay_ms)
{
struct request_queue *q = rq->q;
unsigned long flags;
spin_lock_irqsave(q->queue_lock, flags);
blk_requeue_request(q, rq);
- blk_run_queue_async(q);
+ blk_delay_queue(q, delay_ms);
spin_unlock_irqrestore(q->queue_lock, flags);
}
@@ -270,6 +265,7 @@ static void dm_requeue_original_request(struct dm_rq_target_io *tio, bool delay_
struct mapped_device *md = tio->md;
struct request *rq = tio->orig;
int rw = rq_data_dir(rq);
+ unsigned long delay_ms = delay_requeue ? 100 : 0;
rq_end_stats(md, rq);
if (tio->clone) {
@@ -278,9 +274,9 @@ static void dm_requeue_original_request(struct dm_rq_target_io *tio, bool delay_
}
if (!rq->q->mq_ops)
- dm_old_requeue_request(rq);
+ dm_old_requeue_request(rq, delay_ms);
else
- dm_mq_delay_requeue_request(rq, delay_requeue ? 100/*ms*/ : 0);
+ dm_mq_delay_requeue_request(rq, delay_ms);
rq_completed(md, rw, false);
}
@@ -455,6 +451,7 @@ static void init_tio(struct dm_rq_target_io *tio, struct request *rq,
tio->clone = NULL;
tio->orig = rq;
tio->error = 0;
+ tio->completed = 0;
/*
* Avoid initializing info for blk-mq; it passes
* target-specific data through info.ptr
diff --git a/drivers/md/dm-rq.h b/drivers/md/dm-rq.h
index 9813922e4fe5..f43c45460aac 100644
--- a/drivers/md/dm-rq.h
+++ b/drivers/md/dm-rq.h
@@ -29,6 +29,7 @@ struct dm_rq_target_io {
struct dm_stats_aux stats_aux;
unsigned long duration_jiffies;
unsigned n_sectors;
+ unsigned completed;
};
/*
diff --git a/drivers/md/dm-stripe.c b/drivers/md/dm-stripe.c
index ab50d7c4377f..b5e892149c54 100644
--- a/drivers/md/dm-stripe.c
+++ b/drivers/md/dm-stripe.c
@@ -351,25 +351,6 @@ static size_t stripe_dax_copy_from_iter(struct dm_target *ti, pgoff_t pgoff,
return dax_copy_from_iter(dax_dev, pgoff, addr, bytes, i);
}
-static void stripe_dax_flush(struct dm_target *ti, pgoff_t pgoff, void *addr,
- size_t size)
-{
- sector_t dev_sector, sector = pgoff * PAGE_SECTORS;
- struct stripe_c *sc = ti->private;
- struct dax_device *dax_dev;
- struct block_device *bdev;
- uint32_t stripe;
-
- stripe_map_sector(sc, sector, &stripe, &dev_sector);
- dev_sector += sc->stripe[stripe].physical_start;
- dax_dev = sc->stripe[stripe].dev->dax_dev;
- bdev = sc->stripe[stripe].dev->bdev;
-
- if (bdev_dax_pgoff(bdev, dev_sector, ALIGN(size, PAGE_SIZE), &pgoff))
- return;
- dax_flush(dax_dev, pgoff, addr, size);
-}
-
/*
* Stripe status:
*
@@ -489,7 +470,6 @@ static struct target_type stripe_target = {
.io_hints = stripe_io_hints,
.direct_access = stripe_dax_direct_access,
.dax_copy_from_iter = stripe_dax_copy_from_iter,
- .dax_flush = stripe_dax_flush,
};
int __init dm_stripe_init(void)
diff --git a/drivers/md/dm-switch.c b/drivers/md/dm-switch.c
index 2dcea4c56f37..4c8de1ff78ca 100644
--- a/drivers/md/dm-switch.c
+++ b/drivers/md/dm-switch.c
@@ -251,7 +251,7 @@ static void switch_dtr(struct dm_target *ti)
*/
static int switch_ctr(struct dm_target *ti, unsigned argc, char **argv)
{
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{1, (KMALLOC_MAX_SIZE - sizeof(struct switch_ctx)) / sizeof(struct switch_path), "Invalid number of paths"},
{1, UINT_MAX, "Invalid region size"},
{0, 0, "Invalid number of optional args"},
diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c
index 28a4071cdf85..ef7b8f201f73 100644
--- a/drivers/md/dm-table.c
+++ b/drivers/md/dm-table.c
@@ -806,7 +806,8 @@ int dm_table_add_target(struct dm_table *t, const char *type,
/*
* Target argument parsing helpers.
*/
-static int validate_next_arg(struct dm_arg *arg, struct dm_arg_set *arg_set,
+static int validate_next_arg(const struct dm_arg *arg,
+ struct dm_arg_set *arg_set,
unsigned *value, char **error, unsigned grouped)
{
const char *arg_str = dm_shift_arg(arg_set);
@@ -824,14 +825,14 @@ static int validate_next_arg(struct dm_arg *arg, struct dm_arg_set *arg_set,
return 0;
}
-int dm_read_arg(struct dm_arg *arg, struct dm_arg_set *arg_set,
+int dm_read_arg(const struct dm_arg *arg, struct dm_arg_set *arg_set,
unsigned *value, char **error)
{
return validate_next_arg(arg, arg_set, value, error, 0);
}
EXPORT_SYMBOL(dm_read_arg);
-int dm_read_arg_group(struct dm_arg *arg, struct dm_arg_set *arg_set,
+int dm_read_arg_group(const struct dm_arg *arg, struct dm_arg_set *arg_set,
unsigned *value, char **error)
{
return validate_next_arg(arg, arg_set, value, error, 1);
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index 69d88aee3055..1e25705209c2 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -3041,7 +3041,7 @@ static int parse_pool_features(struct dm_arg_set *as, struct pool_features *pf,
unsigned argc;
const char *arg_name;
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, 4, "Invalid number of pool feature arguments"},
};
diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c
index 1c5b6185c79d..bda3caca23ca 100644
--- a/drivers/md/dm-verity-target.c
+++ b/drivers/md/dm-verity-target.c
@@ -839,7 +839,7 @@ static int verity_parse_opt_args(struct dm_arg_set *as, struct dm_verity *v)
struct dm_target *ti = v->ti;
const char *arg_name;
- static struct dm_arg _args[] = {
+ static const struct dm_arg _args[] = {
{0, DM_VERITY_OPTS_MAX, "Invalid number of feature args"},
};
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 04ae795e8a5f..6e54145969c5 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -987,24 +987,6 @@ static size_t dm_dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff,
return ret;
}
-static void dm_dax_flush(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
- size_t size)
-{
- struct mapped_device *md = dax_get_private(dax_dev);
- sector_t sector = pgoff * PAGE_SECTORS;
- struct dm_target *ti;
- int srcu_idx;
-
- ti = dm_dax_get_live_target(md, sector, &srcu_idx);
-
- if (!ti)
- goto out;
- if (ti->type->dax_flush)
- ti->type->dax_flush(ti, pgoff, addr, size);
- out:
- dm_put_live_table(md, srcu_idx);
-}
-
/*
* A target may call dm_accept_partial_bio only from the map routine. It is
* allowed for all bio types except REQ_PREFLUSH.
@@ -2992,7 +2974,6 @@ static const struct block_device_operations dm_blk_dops = {
static const struct dax_operations dm_dax_ops = {
.direct_access = dm_dax_direct_access,
.copy_from_iter = dm_dax_copy_from_iter,
- .flush = dm_dax_flush,
};
/*
diff --git a/drivers/media/cec/cec-adap.c b/drivers/media/cec/cec-adap.c
index dd769e40416f..eed6c397d840 100644
--- a/drivers/media/cec/cec-adap.c
+++ b/drivers/media/cec/cec-adap.c
@@ -181,7 +181,10 @@ static void cec_queue_msg_fh(struct cec_fh *fh, const struct cec_msg *msg)
{
static const struct cec_event ev_lost_msgs = {
.event = CEC_EVENT_LOST_MSGS,
- .lost_msgs.lost_msgs = 1,
+ .flags = 0,
+ {
+ .lost_msgs = { 1 },
+ },
};
struct cec_msg_entry *entry;
diff --git a/drivers/media/pci/cx25821/cx25821-audio-upstream.c b/drivers/media/pci/cx25821/cx25821-audio-upstream.c
index b94eb1c0023d..ada26d4acfb4 100644
--- a/drivers/media/pci/cx25821/cx25821-audio-upstream.c
+++ b/drivers/media/pci/cx25821/cx25821-audio-upstream.c
@@ -277,7 +277,7 @@ static int cx25821_get_audio_data(struct cx25821_dev *dev,
p = (char *)dev->_audiodata_buf_virt_addr + frame_offset;
for (i = 0; i < dev->_audio_lines_count; i++) {
- int n = kernel_read(file, file_offset, mybuf, AUDIO_LINE_SIZE);
+ int n = kernel_read(file, mybuf, AUDIO_LINE_SIZE, &file_offset);
if (n < AUDIO_LINE_SIZE) {
pr_info("Done: exit %s() since no more bytes to read from Audio file\n",
__func__);
@@ -290,7 +290,6 @@ static int cx25821_get_audio_data(struct cx25821_dev *dev,
memcpy(p, mybuf, n);
p += n;
}
- file_offset += n;
}
dev->_audioframe_count++;
fput(file);
@@ -318,7 +317,7 @@ static int cx25821_openfile_audio(struct cx25821_dev *dev,
{
char *p = (void *)dev->_audiodata_buf_virt_addr;
struct file *file;
- loff_t offset;
+ loff_t file_offset = 0;
int i, j;
file = filp_open(dev->_audiofilename, O_RDONLY | O_LARGEFILE, 0);
@@ -328,11 +327,11 @@ static int cx25821_openfile_audio(struct cx25821_dev *dev,
return PTR_ERR(file);
}
- for (j = 0, offset = 0; j < NUM_AUDIO_FRAMES; j++) {
+ for (j = 0; j < NUM_AUDIO_FRAMES; j++) {
for (i = 0; i < dev->_audio_lines_count; i++) {
char buf[AUDIO_LINE_SIZE];
- int n = kernel_read(file, offset, buf,
- AUDIO_LINE_SIZE);
+ loff_t offset = file_offset;
+ int n = kernel_read(file, buf, AUDIO_LINE_SIZE, &file_offset);
if (n < AUDIO_LINE_SIZE) {
pr_info("Done: exit %s() since no more bytes to read from Audio file\n",
@@ -344,8 +343,6 @@ static int cx25821_openfile_audio(struct cx25821_dev *dev,
if (p)
memcpy(p + offset, buf, n);
-
- offset += n;
}
dev->_audioframe_count++;
}
diff --git a/drivers/mfd/kempld-core.c b/drivers/mfd/kempld-core.c
index 895f655780a7..55d824b3a808 100644
--- a/drivers/mfd/kempld-core.c
+++ b/drivers/mfd/kempld-core.c
@@ -494,7 +494,7 @@ static struct platform_driver kempld_driver = {
.remove = kempld_remove,
};
-static struct dmi_system_id kempld_dmi_table[] __initdata = {
+static const struct dmi_system_id kempld_dmi_table[] __initconst = {
{
.ident = "BBD6",
.matches = {
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
index d18b3d9292fd..3ba04f371380 100644
--- a/drivers/misc/cxl/pci.c
+++ b/drivers/misc/cxl/pci.c
@@ -1279,7 +1279,7 @@ ssize_t cxl_pci_afu_read_err_buffer(struct cxl_afu *afu, char *buf,
}
/* use bounce buffer for copy */
- tbuf = (void *)__get_free_page(GFP_TEMPORARY);
+ tbuf = (void *)__get_free_page(GFP_KERNEL);
if (!tbuf)
return -ENOMEM;
diff --git a/drivers/mmc/core/queue.c b/drivers/mmc/core/queue.c
index affa7370ba82..74c663b1c0a7 100644
--- a/drivers/mmc/core/queue.c
+++ b/drivers/mmc/core/queue.c
@@ -242,6 +242,12 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card,
if (mmc_dev(host)->dma_mask && *mmc_dev(host)->dma_mask)
limit = (u64)dma_max_pfn(mmc_dev(host)) << PAGE_SHIFT;
+ /*
+ * mmc_init_request() depends on card->bouncesz so it must be calculated
+ * before blk_init_allocated_queue() starts allocating requests.
+ */
+ card->bouncesz = mmc_queue_calc_bouncesz(host);
+
mq->card = card;
mq->queue = blk_alloc_queue(GFP_KERNEL);
if (!mq->queue)
@@ -265,7 +271,6 @@ int mmc_init_queue(struct mmc_queue *mq, struct mmc_card *card,
if (mmc_can_erase(card))
mmc_queue_setup_discard(mq->queue, card);
- card->bouncesz = mmc_queue_calc_bouncesz(host);
if (card->bouncesz) {
blk_queue_max_hw_sectors(mq->queue, card->bouncesz / 512);
blk_queue_max_segments(mq->queue, card->bouncesz / 512);
diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
index 02179ed2a40d..8c15637178ff 100644
--- a/drivers/mmc/host/Kconfig
+++ b/drivers/mmc/host/Kconfig
@@ -5,7 +5,7 @@
comment "MMC/SD/SDIO Host Controller Drivers"
config MMC_DEBUG
- bool "MMC host drivers debugginG"
+ bool "MMC host drivers debugging"
depends on MMC != n
help
This is an option for use by developers; most people should
diff --git a/drivers/mmc/host/cavium-thunderx.c b/drivers/mmc/host/cavium-thunderx.c
index b9cc95998799..eee08d81b242 100644
--- a/drivers/mmc/host/cavium-thunderx.c
+++ b/drivers/mmc/host/cavium-thunderx.c
@@ -7,6 +7,7 @@
*
* Copyright (C) 2016 Cavium Inc.
*/
+#include <linux/device.h>
#include <linux/dma-mapping.h>
#include <linux/interrupt.h>
#include <linux/mmc/mmc.h>
@@ -149,8 +150,11 @@ error:
for (i = 0; i < CAVIUM_MAX_MMC; i++) {
if (host->slot[i])
cvm_mmc_of_slot_remove(host->slot[i]);
- if (host->slot_pdev[i])
+ if (host->slot_pdev[i]) {
+ get_device(&host->slot_pdev[i]->dev);
of_platform_device_destroy(&host->slot_pdev[i]->dev, NULL);
+ put_device(&host->slot_pdev[i]->dev);
+ }
}
clk_disable_unprepare(host->clk);
return ret;
diff --git a/drivers/mtd/maps/lantiq-flash.c b/drivers/mtd/maps/lantiq-flash.c
index 3e33ab66eb24..77b1d8013295 100644
--- a/drivers/mtd/maps/lantiq-flash.c
+++ b/drivers/mtd/maps/lantiq-flash.c
@@ -114,12 +114,6 @@ ltq_mtd_probe(struct platform_device *pdev)
struct cfi_private *cfi;
int err;
- if (of_machine_is_compatible("lantiq,falcon") &&
- (ltq_boot_select() != BS_FLASH)) {
- dev_err(&pdev->dev, "invalid bootstrap options\n");
- return -ENODEV;
- }
-
ltq_mtd = devm_kzalloc(&pdev->dev, sizeof(struct ltq_mtd), GFP_KERNEL);
if (!ltq_mtd)
return -ENOMEM;
diff --git a/drivers/mtd/nand/nandsim.c b/drivers/mtd/nand/nandsim.c
index fec613221958..246b4393118e 100644
--- a/drivers/mtd/nand/nandsim.c
+++ b/drivers/mtd/nand/nandsim.c
@@ -1356,7 +1356,7 @@ static ssize_t read_file(struct nandsim *ns, struct file *file, void *buf, size_
if (err)
return err;
noreclaim_flag = memalloc_noreclaim_save();
- tx = kernel_read(file, pos, buf, count);
+ tx = kernel_read(file, buf, count, &pos);
memalloc_noreclaim_restore(noreclaim_flag);
put_pages(ns);
return tx;
@@ -1372,7 +1372,7 @@ static ssize_t write_file(struct nandsim *ns, struct file *file, void *buf, size
if (err)
return err;
noreclaim_flag = memalloc_noreclaim_save();
- tx = kernel_write(file, buf, count, pos);
+ tx = kernel_write(file, buf, count, &pos);
memalloc_noreclaim_restore(noreclaim_flag);
put_pages(ns);
return tx;
diff --git a/drivers/mtd/ubi/block.c b/drivers/mtd/ubi/block.c
index c3963f880448..b210fdb31c98 100644
--- a/drivers/mtd/ubi/block.c
+++ b/drivers/mtd/ubi/block.c
@@ -383,7 +383,7 @@ int ubiblock_create(struct ubi_volume_info *vi)
/* Initialize the gendisk of this ubiblock device */
gd = alloc_disk(1);
if (!gd) {
- pr_err("UBI: block: alloc_disk failed");
+ pr_err("UBI: block: alloc_disk failed\n");
ret = -ENODEV;
goto out_free_dev;
}
@@ -607,7 +607,7 @@ static void __init ubiblock_create_from_param(void)
desc = open_volume_desc(p->name, p->ubi_num, p->vol_id);
if (IS_ERR(desc)) {
pr_err(
- "UBI: block: can't open volume on ubi%d_%d, err=%ld",
+ "UBI: block: can't open volume on ubi%d_%d, err=%ld\n",
p->ubi_num, p->vol_id, PTR_ERR(desc));
continue;
}
@@ -618,7 +618,7 @@ static void __init ubiblock_create_from_param(void)
ret = ubiblock_create(&vi);
if (ret) {
pr_err(
- "UBI: block: can't add '%s' volume on ubi%d_%d, err=%d",
+ "UBI: block: can't add '%s' volume on ubi%d_%d, err=%d\n",
vi.name, p->ubi_num, p->vol_id, ret);
continue;
}
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index d854521962ef..842550b5712a 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -825,7 +825,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
for (i = 0; i < UBI_MAX_DEVICES; i++) {
ubi = ubi_devices[i];
if (ubi && mtd->index == ubi->mtd->index) {
- pr_err("ubi: mtd%d is already attached to ubi%d",
+ pr_err("ubi: mtd%d is already attached to ubi%d\n",
mtd->index, i);
return -EEXIST;
}
@@ -840,7 +840,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
* no sense to attach emulated MTD devices, so we prohibit this.
*/
if (mtd->type == MTD_UBIVOLUME) {
- pr_err("ubi: refuse attaching mtd%d - it is already emulated on top of UBI",
+ pr_err("ubi: refuse attaching mtd%d - it is already emulated on top of UBI\n",
mtd->index);
return -EINVAL;
}
@@ -851,7 +851,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
if (!ubi_devices[ubi_num])
break;
if (ubi_num == UBI_MAX_DEVICES) {
- pr_err("ubi: only %d UBI devices may be created",
+ pr_err("ubi: only %d UBI devices may be created\n",
UBI_MAX_DEVICES);
return -ENFILE;
}
@@ -861,7 +861,7 @@ int ubi_attach_mtd_dev(struct mtd_info *mtd, int ubi_num,
/* Make sure ubi_num is not busy */
if (ubi_devices[ubi_num]) {
- pr_err("ubi: ubi%i already exists", ubi_num);
+ pr_err("ubi: ubi%i already exists\n", ubi_num);
return -EEXIST;
}
}
@@ -1166,7 +1166,7 @@ static int __init ubi_init(void)
BUILD_BUG_ON(sizeof(struct ubi_vid_hdr) != 64);
if (mtd_devs > UBI_MAX_DEVICES) {
- pr_err("UBI error: too many MTD devices, maximum is %d",
+ pr_err("UBI error: too many MTD devices, maximum is %d\n",
UBI_MAX_DEVICES);
return -EINVAL;
}
@@ -1178,7 +1178,7 @@ static int __init ubi_init(void)
err = misc_register(&ubi_ctrl_cdev);
if (err) {
- pr_err("UBI error: cannot register device");
+ pr_err("UBI error: cannot register device\n");
goto out;
}
@@ -1205,7 +1205,7 @@ static int __init ubi_init(void)
mtd = open_mtd_device(p->name);
if (IS_ERR(mtd)) {
err = PTR_ERR(mtd);
- pr_err("UBI error: cannot open mtd %s, error %d",
+ pr_err("UBI error: cannot open mtd %s, error %d\n",
p->name, err);
/* See comment below re-ubi_is_module(). */
if (ubi_is_module())
@@ -1218,7 +1218,7 @@ static int __init ubi_init(void)
p->vid_hdr_offs, p->max_beb_per1024);
mutex_unlock(&ubi_devices_mutex);
if (err < 0) {
- pr_err("UBI error: cannot attach mtd%d",
+ pr_err("UBI error: cannot attach mtd%d\n",
mtd->index);
put_mtd_device(mtd);
@@ -1242,7 +1242,7 @@ static int __init ubi_init(void)
err = ubiblock_init();
if (err) {
- pr_err("UBI error: block: cannot initialize, error %d", err);
+ pr_err("UBI error: block: cannot initialize, error %d\n", err);
/* See comment above re-ubi_is_module(). */
if (ubi_is_module())
@@ -1265,7 +1265,7 @@ out_dev_unreg:
misc_deregister(&ubi_ctrl_cdev);
out:
class_unregister(&ubi_class);
- pr_err("UBI error: cannot initialize UBI, error %d", err);
+ pr_err("UBI error: cannot initialize UBI, error %d\n", err);
return err;
}
late_initcall(ubi_init);
diff --git a/drivers/mtd/ubi/fastmap.c b/drivers/mtd/ubi/fastmap.c
index b44c8d348e78..5a832bc79b1b 100644
--- a/drivers/mtd/ubi/fastmap.c
+++ b/drivers/mtd/ubi/fastmap.c
@@ -1667,7 +1667,7 @@ err:
ret = invalidate_fastmap(ubi);
if (ret < 0) {
- ubi_err(ubi, "Unable to invalidiate current fastmap!");
+ ubi_err(ubi, "Unable to invalidate current fastmap!");
ubi_ro_mode(ubi);
} else {
return_fm_pebs(ubi, old_fm);
diff --git a/drivers/mtd/ubi/ubi-media.h b/drivers/mtd/ubi/ubi-media.h
index 22ed3f627506..bfceae5a890e 100644
--- a/drivers/mtd/ubi/ubi-media.h
+++ b/drivers/mtd/ubi/ubi-media.h
@@ -229,7 +229,7 @@ struct ubi_ec_hdr {
* copy. UBI also calculates data CRC when the data is moved and stores it at
* the @data_crc field of the copy (P1). So when UBI needs to pick one physical
* eraseblock of two (P or P1), the @copy_flag of the newer one (P1) is
- * examined. If it is cleared, the situation* is simple and the newer one is
+ * examined. If it is cleared, the situation is simple and the newer one is
* picked. If it is set, the data CRC of the copy (P1) is examined. If the CRC
* checksum is correct, this physical eraseblock is selected (P1). Otherwise
* the older one (P) is selected.
@@ -389,7 +389,7 @@ struct ubi_vtbl_record {
#define UBI_FM_POOL_MAGIC 0x67AF4D08
#define UBI_FM_EBA_MAGIC 0xf0c040a8
-/* A fastmap supber block can be located between PEB 0 and
+/* A fastmap super block can be located between PEB 0 and
* UBI_FM_MAX_START */
#define UBI_FM_MAX_START 64
diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index fc63992ab0e0..c99dc59d729b 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -4289,7 +4289,7 @@ static int bond_check_params(struct bond_params *params)
int bond_mode = BOND_MODE_ROUNDROBIN;
int xmit_hashtype = BOND_XMIT_POLICY_LAYER2;
int lacp_fast = 0;
- int tlb_dynamic_lb = 0;
+ int tlb_dynamic_lb;
/* Convert string parameters. */
if (mode) {
@@ -4601,16 +4601,13 @@ static int bond_check_params(struct bond_params *params)
}
ad_user_port_key = valptr->value;
- if ((bond_mode == BOND_MODE_TLB) || (bond_mode == BOND_MODE_ALB)) {
- bond_opt_initstr(&newval, "default");
- valptr = bond_opt_parse(bond_opt_get(BOND_OPT_TLB_DYNAMIC_LB),
- &newval);
- if (!valptr) {
- pr_err("Error: No tlb_dynamic_lb default value");
- return -EINVAL;
- }
- tlb_dynamic_lb = valptr->value;
+ bond_opt_initstr(&newval, "default");
+ valptr = bond_opt_parse(bond_opt_get(BOND_OPT_TLB_DYNAMIC_LB), &newval);
+ if (!valptr) {
+ pr_err("Error: No tlb_dynamic_lb default value");
+ return -EINVAL;
}
+ tlb_dynamic_lb = valptr->value;
if (lp_interval == 0) {
pr_warn("Warning: ip_interval must be between 1 and %d, so it was reset to %d\n",
diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
index a12d603d41c6..5931aa2fe997 100644
--- a/drivers/net/bonding/bond_options.c
+++ b/drivers/net/bonding/bond_options.c
@@ -754,6 +754,9 @@ static int bond_option_mode_set(struct bonding *bond,
bond->params.miimon);
}
+ if (newval->value == BOND_MODE_ALB)
+ bond->params.tlb_dynamic_lb = 1;
+
/* don't cache arp_validate between modes */
bond->params.arp_validate = BOND_ARP_VALIDATE_NONE;
bond->params.mode = newval->value;
diff --git a/drivers/net/ethernet/broadcom/bcmsysport.c b/drivers/net/ethernet/broadcom/bcmsysport.c
index a6572b51435a..c3c53f6cd9e6 100644
--- a/drivers/net/ethernet/broadcom/bcmsysport.c
+++ b/drivers/net/ethernet/broadcom/bcmsysport.c
@@ -1735,11 +1735,8 @@ static void bcm_sysport_get_stats64(struct net_device *dev,
stats->tx_packets += tx_packets;
}
- /* lockless update tx_bytes and tx_packets */
- u64_stats_update_begin(&priv->syncp);
stats64->tx_bytes = stats->tx_bytes;
stats64->tx_packets = stats->tx_packets;
- u64_stats_update_end(&priv->syncp);
do {
start = u64_stats_fetch_begin_irq(&priv->syncp);
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index af33dc15c55f..656e6af70f0a 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -11536,11 +11536,11 @@ static int tg3_start(struct tg3 *tp, bool reset_phy, bool test_irq,
tg3_napi_enable(tp);
for (i = 0; i < tp->irq_cnt; i++) {
- struct tg3_napi *tnapi = &tp->napi[i];
err = tg3_request_irq(tp, i);
if (err) {
for (i--; i >= 0; i--) {
- tnapi = &tp->napi[i];
+ struct tg3_napi *tnapi = &tp->napi[i];
+
free_irq(tnapi->irq_vec, tnapi);
}
goto out_napi_fini;
diff --git a/drivers/net/ethernet/emulex/benet/be.h b/drivers/net/ethernet/emulex/benet/be.h
index 674cf9d13b98..8984c4938881 100644
--- a/drivers/net/ethernet/emulex/benet/be.h
+++ b/drivers/net/ethernet/emulex/benet/be.h
@@ -930,6 +930,14 @@ static inline bool is_ipv4_pkt(struct sk_buff *skb)
return skb->protocol == htons(ETH_P_IP) && ip_hdr(skb)->version == 4;
}
+static inline bool is_ipv6_ext_hdr(struct sk_buff *skb)
+{
+ if (ip_hdr(skb)->version == 6)
+ return ipv6_ext_hdr(ipv6_hdr(skb)->nexthdr);
+ else
+ return false;
+}
+
#define be_error_recovering(adapter) \
(adapter->flags & BE_FLAGS_TRY_RECOVERY)
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 319eee36649b..0e3d9f39a807 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -5089,6 +5089,20 @@ static netdev_features_t be_features_check(struct sk_buff *skb,
struct be_adapter *adapter = netdev_priv(dev);
u8 l4_hdr = 0;
+ if (skb_is_gso(skb)) {
+ /* IPv6 TSO requests with extension hdrs are a problem
+ * to Lancer and BE3 HW. Disable TSO6 feature.
+ */
+ if (!skyhawk_chip(adapter) && is_ipv6_ext_hdr(skb))
+ features &= ~NETIF_F_TSO6;
+
+ /* Lancer cannot handle the packet with MSS less than 256.
+ * Disable the GSO support in such cases
+ */
+ if (lancer_chip(adapter) && skb_shinfo(skb)->gso_size < 256)
+ features &= ~NETIF_F_GSO_MASK;
+ }
+
/* The code below restricts offload features for some tunneled and
* Q-in-Q packets.
* Offload features for normal (non tunnel) packets are unchanged.
diff --git a/drivers/net/ethernet/marvell/skge.c b/drivers/net/ethernet/marvell/skge.c
index 8a835e82256a..eef35bf3e849 100644
--- a/drivers/net/ethernet/marvell/skge.c
+++ b/drivers/net/ethernet/marvell/skge.c
@@ -4193,7 +4193,7 @@ static struct pci_driver skge_driver = {
.driver.pm = SKGE_PM_OPS,
};
-static struct dmi_system_id skge_32bit_dma_boards[] = {
+static const struct dmi_system_id skge_32bit_dma_boards[] = {
{
.ident = "Gigabyte nForce boards",
.matches = {
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
index ed7cd6c48019..696b99e65a5a 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum.c
@@ -575,15 +575,14 @@ static void mlxsw_sp_span_entry_destroy(struct mlxsw_sp *mlxsw_sp,
}
static struct mlxsw_sp_span_entry *
-mlxsw_sp_span_entry_find(struct mlxsw_sp_port *port)
+mlxsw_sp_span_entry_find(struct mlxsw_sp *mlxsw_sp, u8 local_port)
{
- struct mlxsw_sp *mlxsw_sp = port->mlxsw_sp;
int i;
for (i = 0; i < mlxsw_sp->span.entries_count; i++) {
struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span.entries[i];
- if (curr->used && curr->local_port == port->local_port)
+ if (curr->used && curr->local_port == local_port)
return curr;
}
return NULL;
@@ -594,7 +593,8 @@ static struct mlxsw_sp_span_entry
{
struct mlxsw_sp_span_entry *span_entry;
- span_entry = mlxsw_sp_span_entry_find(port);
+ span_entry = mlxsw_sp_span_entry_find(port->mlxsw_sp,
+ port->local_port);
if (span_entry) {
/* Already exists, just take a reference */
span_entry->ref_count++;
@@ -783,12 +783,13 @@ err_port_bind:
}
static void mlxsw_sp_span_mirror_remove(struct mlxsw_sp_port *from,
- struct mlxsw_sp_port *to,
+ u8 destination_port,
enum mlxsw_sp_span_type type)
{
struct mlxsw_sp_span_entry *span_entry;
- span_entry = mlxsw_sp_span_entry_find(to);
+ span_entry = mlxsw_sp_span_entry_find(from->mlxsw_sp,
+ destination_port);
if (!span_entry) {
netdev_err(from->dev, "no span entry found\n");
return;
@@ -1563,14 +1564,12 @@ static void
mlxsw_sp_port_del_cls_matchall_mirror(struct mlxsw_sp_port *mlxsw_sp_port,
struct mlxsw_sp_port_mall_mirror_tc_entry *mirror)
{
- struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
enum mlxsw_sp_span_type span_type;
- struct mlxsw_sp_port *to_port;
- to_port = mlxsw_sp->ports[mirror->to_local_port];
span_type = mirror->ingress ?
MLXSW_SP_SPAN_INGRESS : MLXSW_SP_SPAN_EGRESS;
- mlxsw_sp_span_mirror_remove(mlxsw_sp_port, to_port, span_type);
+ mlxsw_sp_span_mirror_remove(mlxsw_sp_port, mirror->to_local_port,
+ span_type);
}
static int
@@ -2545,7 +2544,9 @@ out:
return err;
}
-#define MLXSW_SP_QSFP_I2C_ADDR 0x50
+#define MLXSW_SP_I2C_ADDR_LOW 0x50
+#define MLXSW_SP_I2C_ADDR_HIGH 0x51
+#define MLXSW_SP_EEPROM_PAGE_LENGTH 256
static int mlxsw_sp_query_module_eeprom(struct mlxsw_sp_port *mlxsw_sp_port,
u16 offset, u16 size, void *data,
@@ -2554,12 +2555,25 @@ static int mlxsw_sp_query_module_eeprom(struct mlxsw_sp_port *mlxsw_sp_port,
struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp;
char eeprom_tmp[MLXSW_SP_REG_MCIA_EEPROM_SIZE];
char mcia_pl[MLXSW_REG_MCIA_LEN];
+ u16 i2c_addr;
int status;
int err;
size = min_t(u16, size, MLXSW_SP_REG_MCIA_EEPROM_SIZE);
+
+ if (offset < MLXSW_SP_EEPROM_PAGE_LENGTH &&
+ offset + size > MLXSW_SP_EEPROM_PAGE_LENGTH)
+ /* Cross pages read, read until offset 256 in low page */
+ size = MLXSW_SP_EEPROM_PAGE_LENGTH - offset;
+
+ i2c_addr = MLXSW_SP_I2C_ADDR_LOW;
+ if (offset >= MLXSW_SP_EEPROM_PAGE_LENGTH) {
+ i2c_addr = MLXSW_SP_I2C_ADDR_HIGH;
+ offset -= MLXSW_SP_EEPROM_PAGE_LENGTH;
+ }
+
mlxsw_reg_mcia_pack(mcia_pl, mlxsw_sp_port->mapping.module,
- 0, 0, offset, size, MLXSW_SP_QSFP_I2C_ADDR);
+ 0, 0, offset, size, i2c_addr);
err = mlxsw_reg_query(mlxsw_sp->core, MLXSW_REG(mcia), mcia_pl);
if (err)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
index f0fb898533fb..2cfb3f5d092d 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c
@@ -4868,7 +4868,8 @@ static int mlxsw_sp_router_fib_event(struct notifier_block *nb,
struct fib_notifier_info *info = ptr;
struct mlxsw_sp_router *router;
- if (!net_eq(info->net, &init_net))
+ if (!net_eq(info->net, &init_net) ||
+ (info->family != AF_INET && info->family != AF_INET6))
return NOTIFY_DONE;
fib_work = kzalloc(sizeof(*fib_work), GFP_ATOMIC);
diff --git a/drivers/net/ethernet/netronome/nfp/flower/offload.c b/drivers/net/ethernet/netronome/nfp/flower/offload.c
index d396183108f7..a18b4d2b1d3e 100644
--- a/drivers/net/ethernet/netronome/nfp/flower/offload.c
+++ b/drivers/net/ethernet/netronome/nfp/flower/offload.c
@@ -44,6 +44,16 @@
#include "../nfp_net.h"
#include "../nfp_port.h"
+#define NFP_FLOWER_WHITELIST_DISSECTOR \
+ (BIT(FLOW_DISSECTOR_KEY_CONTROL) | \
+ BIT(FLOW_DISSECTOR_KEY_BASIC) | \
+ BIT(FLOW_DISSECTOR_KEY_IPV4_ADDRS) | \
+ BIT(FLOW_DISSECTOR_KEY_IPV6_ADDRS) | \
+ BIT(FLOW_DISSECTOR_KEY_PORTS) | \
+ BIT(FLOW_DISSECTOR_KEY_ETH_ADDRS) | \
+ BIT(FLOW_DISSECTOR_KEY_VLAN) | \
+ BIT(FLOW_DISSECTOR_KEY_IP))
+
static int
nfp_flower_xmit_flow(struct net_device *netdev,
struct nfp_fl_payload *nfp_flow, u8 mtype)
@@ -112,6 +122,9 @@ nfp_flower_calculate_key_layers(struct nfp_fl_key_ls *ret_key_ls,
u8 key_layer;
int key_size;
+ if (flow->dissector->used_keys & ~NFP_FLOWER_WHITELIST_DISSECTOR)
+ return -EOPNOTSUPP;
+
if (dissector_uses_key(flow->dissector,
FLOW_DISSECTOR_KEY_ENC_CONTROL)) {
struct flow_dissector_key_control *mask_enc_ctl =
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_main.c b/drivers/net/ethernet/netronome/nfp/nfp_main.c
index f055b1774d65..f8fa63b66739 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_main.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_main.c
@@ -74,6 +74,45 @@ static const struct pci_device_id nfp_pci_device_ids[] = {
};
MODULE_DEVICE_TABLE(pci, nfp_pci_device_ids);
+static bool nfp_board_ready(struct nfp_pf *pf)
+{
+ const char *cp;
+ long state;
+ int err;
+
+ cp = nfp_hwinfo_lookup(pf->hwinfo, "board.state");
+ if (!cp)
+ return false;
+
+ err = kstrtol(cp, 0, &state);
+ if (err < 0)
+ return false;
+
+ return state == 15;
+}
+
+static int nfp_pf_board_state_wait(struct nfp_pf *pf)
+{
+ const unsigned long wait_until = jiffies + 10 * HZ;
+
+ while (!nfp_board_ready(pf)) {
+ if (time_is_before_eq_jiffies(wait_until)) {
+ nfp_err(pf->cpp, "NFP board initialization timeout\n");
+ return -EINVAL;
+ }
+
+ nfp_info(pf->cpp, "waiting for board initialization\n");
+ if (msleep_interruptible(500))
+ return -ERESTARTSYS;
+
+ /* Refresh cached information */
+ kfree(pf->hwinfo);
+ pf->hwinfo = nfp_hwinfo_read(pf->cpp);
+ }
+
+ return 0;
+}
+
static int nfp_pcie_sriov_read_nfd_limit(struct nfp_pf *pf)
{
int err;
@@ -312,6 +351,10 @@ static int nfp_nsp_init(struct pci_dev *pdev, struct nfp_pf *pf)
struct nfp_nsp *nsp;
int err;
+ err = nfp_resource_wait(pf->cpp, NFP_RESOURCE_NSP, 30);
+ if (err)
+ return err;
+
nsp = nfp_nsp_open(pf->cpp);
if (IS_ERR(nsp)) {
err = PTR_ERR(nsp);
@@ -425,6 +468,10 @@ static int nfp_pci_probe(struct pci_dev *pdev,
nfp_hwinfo_lookup(pf->hwinfo, "assembly.revision"),
nfp_hwinfo_lookup(pf->hwinfo, "cpld.version"));
+ err = nfp_pf_board_state_wait(pf);
+ if (err)
+ goto err_hwinfo_free;
+
err = devlink_register(devlink, &pdev->dev);
if (err)
goto err_hwinfo_free;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
index 5abb9ba31e7d..ff373acd28f3 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_main.c
@@ -64,23 +64,6 @@
#define NFP_PF_CSR_SLICE_SIZE (32 * 1024)
-static int nfp_is_ready(struct nfp_pf *pf)
-{
- const char *cp;
- long state;
- int err;
-
- cp = nfp_hwinfo_lookup(pf->hwinfo, "board.state");
- if (!cp)
- return 0;
-
- err = kstrtol(cp, 0, &state);
- if (err < 0)
- return 0;
-
- return state == 15;
-}
-
/**
* nfp_net_get_mac_addr() - Get the MAC address.
* @pf: NFP PF handle
@@ -725,12 +708,6 @@ int nfp_net_pci_probe(struct nfp_pf *pf)
INIT_WORK(&pf->port_refresh_work, nfp_net_refresh_vnics);
- /* Verify that the board has completed initialization */
- if (!nfp_is_ready(pf)) {
- nfp_err(pf->cpp, "NFP is not ready for NIC operation.\n");
- return -EINVAL;
- }
-
if (!pf->rtbl) {
nfp_err(pf->cpp, "No %s, giving up.\n",
pf->fw_loaded ? "symbol table" : "firmware found");
diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp.h b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp.h
index 1a8d04a1e113..3ce51f03126f 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp.h
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp.h
@@ -97,6 +97,8 @@ nfp_resource_acquire(struct nfp_cpp *cpp, const char *name);
void nfp_resource_release(struct nfp_resource *res);
+int nfp_resource_wait(struct nfp_cpp *cpp, const char *name, unsigned int secs);
+
u32 nfp_resource_cpp_id(struct nfp_resource *res);
const char *nfp_resource_name(struct nfp_resource *res);
diff --git a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c
index 072612263dab..b1dd13ff282b 100644
--- a/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c
+++ b/drivers/net/ethernet/netronome/nfp/nfpcore/nfp_resource.c
@@ -250,6 +250,51 @@ void nfp_resource_release(struct nfp_resource *res)
}
/**
+ * nfp_resource_wait() - Wait for resource to appear
+ * @cpp: NFP CPP handle
+ * @name: Name of the resource
+ * @secs: Number of seconds to wait
+ *
+ * Wait for resource to appear in the resource table, grab and release
+ * its lock. The wait is jiffies-based, don't expect fine granularity.
+ *
+ * Return: 0 on success, errno otherwise.
+ */
+int nfp_resource_wait(struct nfp_cpp *cpp, const char *name, unsigned int secs)
+{
+ unsigned long warn_at = jiffies + NFP_MUTEX_WAIT_FIRST_WARN * HZ;
+ unsigned long err_at = jiffies + secs * HZ;
+ struct nfp_resource *res;
+
+ while (true) {
+ res = nfp_resource_acquire(cpp, name);
+ if (!IS_ERR(res)) {
+ nfp_resource_release(res);
+ return 0;
+ }
+
+ if (PTR_ERR(res) != -ENOENT) {
+ nfp_err(cpp, "error waiting for resource %s: %ld\n",
+ name, PTR_ERR(res));
+ return PTR_ERR(res);
+ }
+ if (time_is_before_eq_jiffies(err_at)) {
+ nfp_err(cpp, "timeout waiting for resource %s\n", name);
+ return -ETIMEDOUT;
+ }
+ if (time_is_before_eq_jiffies(warn_at)) {
+ warn_at = jiffies + NFP_MUTEX_WAIT_NEXT_WARN * HZ;
+ nfp_info(cpp, "waiting for NFP resource %s\n", name);
+ }
+ if (msleep_interruptible(10)) {
+ nfp_err(cpp, "wait for resource %s interrupted\n",
+ name);
+ return -ERESTARTSYS;
+ }
+ }
+}
+
+/**
* nfp_resource_cpp_id() - Return the cpp_id of a resource handle
* @res: NFP Resource handle
*
diff --git a/drivers/net/ethernet/nuvoton/w90p910_ether.c b/drivers/net/ethernet/nuvoton/w90p910_ether.c
index 89ab786da25f..4a67c55aa9f1 100644
--- a/drivers/net/ethernet/nuvoton/w90p910_ether.c
+++ b/drivers/net/ethernet/nuvoton/w90p910_ether.c
@@ -11,6 +11,7 @@
#include <linux/module.h>
#include <linux/init.h>
+#include <linux/interrupt.h>
#include <linux/mii.h>
#include <linux/netdevice.h>
#include <linux/etherdevice.h>
diff --git a/drivers/net/ethernet/qlogic/qed/qed_dcbx.c b/drivers/net/ethernet/qlogic/qed/qed_dcbx.c
index eaca4578435d..8f6ccc0c39e5 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_dcbx.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_dcbx.c
@@ -1244,7 +1244,6 @@ int qed_dcbx_get_config_params(struct qed_hwfn *p_hwfn,
if (!dcbx_info)
return -ENOMEM;
- memset(dcbx_info, 0, sizeof(*dcbx_info));
rc = qed_dcbx_query_params(p_hwfn, dcbx_info, QED_DCBX_OPERATIONAL_MIB);
if (rc) {
kfree(dcbx_info);
diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
index 557c9bf1a469..86b8c758f94e 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
@@ -84,6 +84,10 @@ struct sk_buff *rmnet_map_deaggregate(struct sk_buff *skb)
if (((int)skb->len - (int)packet_len) < 0)
return NULL;
+ /* Some hardware can send us empty frames. Catch them */
+ if (ntohs(maph->pkt_len) == 0)
+ return NULL;
+
skbn = alloc_skb(packet_len + RMNET_MAP_DEAGGR_SPACING, GFP_ATOMIC);
if (!skbn)
return NULL;
@@ -94,11 +98,5 @@ struct sk_buff *rmnet_map_deaggregate(struct sk_buff *skb)
memcpy(skbn->data, skb->data, packet_len);
skb_pull(skb, packet_len);
- /* Some hardware can send us empty frames. Catch them */
- if (ntohs(maph->pkt_len) == 0) {
- kfree_skb(skb);
- return NULL;
- }
-
return skbn;
}
diff --git a/drivers/net/ethernet/smsc/smsc911x.c b/drivers/net/ethernet/smsc/smsc911x.c
index 0b6a39b003a4..012fb66eed8d 100644
--- a/drivers/net/ethernet/smsc/smsc911x.c
+++ b/drivers/net/ethernet/smsc/smsc911x.c
@@ -2595,6 +2595,11 @@ static int smsc911x_suspend(struct device *dev)
struct net_device *ndev = dev_get_drvdata(dev);
struct smsc911x_data *pdata = netdev_priv(ndev);
+ if (netif_running(ndev)) {
+ netif_stop_queue(ndev);
+ netif_device_detach(ndev);
+ }
+
/* enable wake on LAN, energy detection and the external PME
* signal. */
smsc911x_reg_write(pdata, PMT_CTRL,
@@ -2628,7 +2633,15 @@ static int smsc911x_resume(struct device *dev)
while (!(smsc911x_reg_read(pdata, PMT_CTRL) & PMT_CTRL_READY_) && --to)
udelay(1000);
- return (to == 0) ? -EIO : 0;
+ if (to == 0)
+ return -EIO;
+
+ if (netif_running(ndev)) {
+ netif_device_attach(ndev);
+ netif_start_queue(ndev);
+ }
+
+ return 0;
}
static const struct dev_pm_ops smsc911x_pm_ops = {
diff --git a/drivers/net/ethernet/via/via-rhine.c b/drivers/net/ethernet/via/via-rhine.c
index acd29d60174a..83e6f76eb965 100644
--- a/drivers/net/ethernet/via/via-rhine.c
+++ b/drivers/net/ethernet/via/via-rhine.c
@@ -2598,7 +2598,7 @@ static struct platform_driver rhine_driver_platform = {
}
};
-static struct dmi_system_id rhine_dmi_table[] __initdata = {
+static const struct dmi_system_id rhine_dmi_table[] __initconst = {
{
.ident = "EPIA-M",
.matches = {
diff --git a/drivers/net/hyperv/hyperv_net.h b/drivers/net/hyperv/hyperv_net.h
index ec546da86683..d98cdfb1536b 100644
--- a/drivers/net/hyperv/hyperv_net.h
+++ b/drivers/net/hyperv/hyperv_net.h
@@ -204,6 +204,8 @@ int netvsc_recv_callback(struct net_device *net,
const struct ndis_pkt_8021q_info *vlan);
void netvsc_channel_cb(void *context);
int netvsc_poll(struct napi_struct *napi, int budget);
+
+void rndis_set_subchannel(struct work_struct *w);
bool rndis_filter_opened(const struct netvsc_device *nvdev);
int rndis_filter_open(struct netvsc_device *nvdev);
int rndis_filter_close(struct netvsc_device *nvdev);
@@ -782,6 +784,7 @@ struct netvsc_device {
u32 num_chn;
atomic_t open_chn;
+ struct work_struct subchan_work;
wait_queue_head_t subchan_open;
struct rndis_device *extension;
diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 0062b802676f..a5511b7326af 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -81,6 +81,7 @@ static struct netvsc_device *alloc_net_device(void)
init_completion(&net_device->channel_init_wait);
init_waitqueue_head(&net_device->subchan_open);
+ INIT_WORK(&net_device->subchan_work, rndis_set_subchannel);
return net_device;
}
@@ -557,6 +558,8 @@ void netvsc_device_remove(struct hv_device *device)
= rtnl_dereference(net_device_ctx->nvdev);
int i;
+ cancel_work_sync(&net_device->subchan_work);
+
netvsc_disconnect_vsp(device);
RCU_INIT_POINTER(net_device_ctx->nvdev, NULL);
diff --git a/drivers/net/hyperv/netvsc_drv.c b/drivers/net/hyperv/netvsc_drv.c
index 165ba4b3b423..d4902ee5f260 100644
--- a/drivers/net/hyperv/netvsc_drv.c
+++ b/drivers/net/hyperv/netvsc_drv.c
@@ -49,7 +49,7 @@
#define NETVSC_MIN_TX_SECTIONS 10
#define NETVSC_DEFAULT_TX 192 /* ~1M */
#define NETVSC_MIN_RX_SECTIONS 10 /* ~64K */
-#define NETVSC_DEFAULT_RX 2048 /* ~4M */
+#define NETVSC_DEFAULT_RX 10485 /* Max ~16M */
#define LINKCHANGE_INT (2 * HZ)
#define VF_TAKEOVER_INT (HZ / 10)
@@ -853,10 +853,7 @@ static int netvsc_set_channels(struct net_device *net,
rndis_filter_device_remove(dev, nvdev);
nvdev = rndis_filter_device_add(dev, &device_info);
- if (!IS_ERR(nvdev)) {
- netif_set_real_num_tx_queues(net, nvdev->num_chn);
- netif_set_real_num_rx_queues(net, nvdev->num_chn);
- } else {
+ if (IS_ERR(nvdev)) {
ret = PTR_ERR(nvdev);
device_info.num_chn = orig;
nvdev = rndis_filter_device_add(dev, &device_info);
@@ -1954,9 +1951,6 @@ static int netvsc_probe(struct hv_device *dev,
NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
net->vlan_features = net->features;
- netif_set_real_num_tx_queues(net, nvdev->num_chn);
- netif_set_real_num_rx_queues(net, nvdev->num_chn);
-
netdev_lockdep_set_classes(net);
/* MTU range: 68 - 1500 or 65521 */
@@ -2012,9 +2006,10 @@ static int netvsc_remove(struct hv_device *dev)
if (vf_netdev)
netvsc_unregister_vf(vf_netdev);
+ unregister_netdevice(net);
+
rndis_filter_device_remove(dev,
rtnl_dereference(ndev_ctx->nvdev));
- unregister_netdevice(net);
rtnl_unlock();
hv_set_drvdata(dev, NULL);
diff --git a/drivers/net/hyperv/rndis_filter.c b/drivers/net/hyperv/rndis_filter.c
index 69c40b8fccc3..065b204d8e17 100644
--- a/drivers/net/hyperv/rndis_filter.c
+++ b/drivers/net/hyperv/rndis_filter.c
@@ -1039,8 +1039,6 @@ static void netvsc_sc_open(struct vmbus_channel *new_sc)
/* Set the channel before opening.*/
nvchan->channel = new_sc;
- netif_napi_add(ndev, &nvchan->napi,
- netvsc_poll, NAPI_POLL_WEIGHT);
ret = vmbus_open(new_sc, nvscdev->ring_size * PAGE_SIZE,
nvscdev->ring_size * PAGE_SIZE, NULL, 0,
@@ -1048,10 +1046,86 @@ static void netvsc_sc_open(struct vmbus_channel *new_sc)
if (ret == 0)
napi_enable(&nvchan->napi);
else
- netif_napi_del(&nvchan->napi);
+ netdev_notice(ndev, "sub channel open failed: %d\n", ret);
- atomic_inc(&nvscdev->open_chn);
- wake_up(&nvscdev->subchan_open);
+ if (atomic_inc_return(&nvscdev->open_chn) == nvscdev->num_chn)
+ wake_up(&nvscdev->subchan_open);
+}
+
+/* Open sub-channels after completing the handling of the device probe.
+ * This breaks overlap of processing the host message for the
+ * new primary channel with the initialization of sub-channels.
+ */
+void rndis_set_subchannel(struct work_struct *w)
+{
+ struct netvsc_device *nvdev
+ = container_of(w, struct netvsc_device, subchan_work);
+ struct nvsp_message *init_packet = &nvdev->channel_init_pkt;
+ struct net_device_context *ndev_ctx;
+ struct rndis_device *rdev;
+ struct net_device *ndev;
+ struct hv_device *hv_dev;
+ int i, ret;
+
+ if (!rtnl_trylock()) {
+ schedule_work(w);
+ return;
+ }
+
+ rdev = nvdev->extension;
+ if (!rdev)
+ goto unlock; /* device was removed */
+
+ ndev = rdev->ndev;
+ ndev_ctx = netdev_priv(ndev);
+ hv_dev = ndev_ctx->device_ctx;
+
+ memset(init_packet, 0, sizeof(struct nvsp_message));
+ init_packet->hdr.msg_type = NVSP_MSG5_TYPE_SUBCHANNEL;
+ init_packet->msg.v5_msg.subchn_req.op = NVSP_SUBCHANNEL_ALLOCATE;
+ init_packet->msg.v5_msg.subchn_req.num_subchannels =
+ nvdev->num_chn - 1;
+ ret = vmbus_sendpacket(hv_dev->channel, init_packet,
+ sizeof(struct nvsp_message),
+ (unsigned long)init_packet,
+ VM_PKT_DATA_INBAND,
+ VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
+ if (ret) {
+ netdev_err(ndev, "sub channel allocate send failed: %d\n", ret);
+ goto failed;
+ }
+
+ wait_for_completion(&nvdev->channel_init_wait);
+ if (init_packet->msg.v5_msg.subchn_comp.status != NVSP_STAT_SUCCESS) {
+ netdev_err(ndev, "sub channel request failed\n");
+ goto failed;
+ }
+
+ nvdev->num_chn = 1 +
+ init_packet->msg.v5_msg.subchn_comp.num_subchannels;
+
+ /* wait for all sub channels to open */
+ wait_event(nvdev->subchan_open,
+ atomic_read(&nvdev->open_chn) == nvdev->num_chn);
+
+ /* ignore failues from setting rss parameters, still have channels */
+ rndis_filter_set_rss_param(rdev, netvsc_hash_key);
+
+ netif_set_real_num_tx_queues(ndev, nvdev->num_chn);
+ netif_set_real_num_rx_queues(ndev, nvdev->num_chn);
+
+ rtnl_unlock();
+ return;
+
+failed:
+ /* fallback to only primary channel */
+ for (i = 1; i < nvdev->num_chn; i++)
+ netif_napi_del(&nvdev->chan_table[i].napi);
+
+ nvdev->max_chn = 1;
+ nvdev->num_chn = 1;
+unlock:
+ rtnl_unlock();
}
struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
@@ -1063,7 +1137,6 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
struct rndis_device *rndis_device;
struct ndis_offload hwcaps;
struct ndis_offload_params offloads;
- struct nvsp_message *init_packet;
struct ndis_recv_scale_cap rsscap;
u32 rsscap_size = sizeof(struct ndis_recv_scale_cap);
unsigned int gso_max_size = GSO_MAX_SIZE;
@@ -1215,9 +1288,7 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
net_device->num_chn);
atomic_set(&net_device->open_chn, 1);
-
- if (net_device->num_chn == 1)
- return net_device;
+ vmbus_set_sc_create_callback(dev->channel, netvsc_sc_open);
for (i = 1; i < net_device->num_chn; i++) {
ret = netvsc_alloc_recv_comp_ring(net_device, i);
@@ -1228,38 +1299,15 @@ struct netvsc_device *rndis_filter_device_add(struct hv_device *dev,
}
}
- vmbus_set_sc_create_callback(dev->channel, netvsc_sc_open);
+ for (i = 1; i < net_device->num_chn; i++)
+ netif_napi_add(net, &net_device->chan_table[i].napi,
+ netvsc_poll, NAPI_POLL_WEIGHT);
- init_packet = &net_device->channel_init_pkt;
- memset(init_packet, 0, sizeof(struct nvsp_message));
- init_packet->hdr.msg_type = NVSP_MSG5_TYPE_SUBCHANNEL;
- init_packet->msg.v5_msg.subchn_req.op = NVSP_SUBCHANNEL_ALLOCATE;
- init_packet->msg.v5_msg.subchn_req.num_subchannels =
- net_device->num_chn - 1;
- ret = vmbus_sendpacket(dev->channel, init_packet,
- sizeof(struct nvsp_message),
- (unsigned long)init_packet,
- VM_PKT_DATA_INBAND,
- VMBUS_DATA_PACKET_FLAG_COMPLETION_REQUESTED);
- if (ret)
- goto out;
-
- wait_for_completion(&net_device->channel_init_wait);
- if (init_packet->msg.v5_msg.subchn_comp.status != NVSP_STAT_SUCCESS) {
- ret = -ENODEV;
- goto out;
- }
+ if (net_device->num_chn > 1)
+ schedule_work(&net_device->subchan_work);
- net_device->num_chn = 1 +
- init_packet->msg.v5_msg.subchn_comp.num_subchannels;
-
- /* wait for all sub channels to open */
- wait_event(net_device->subchan_open,
- atomic_read(&net_device->open_chn) == net_device->num_chn);
-
- /* ignore failues from setting rss parameters, still have channels */
- rndis_filter_set_rss_param(rndis_device, netvsc_hash_key);
out:
+ /* if unavailable, just proceed with one queue */
if (ret) {
net_device->max_chn = 1;
net_device->num_chn = 1;
@@ -1280,10 +1328,10 @@ void rndis_filter_device_remove(struct hv_device *dev,
/* Halt and release the rndis device */
rndis_filter_halt_device(rndis_dev);
- kfree(rndis_dev);
net_dev->extension = NULL;
netvsc_device_remove(dev);
+ kfree(rndis_dev);
}
int rndis_filter_open(struct netvsc_device *nvdev)
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
index 340c13484e5c..309b88acd3d0 100644
--- a/drivers/net/usb/smsc95xx.c
+++ b/drivers/net/usb/smsc95xx.c
@@ -526,7 +526,7 @@ static void smsc95xx_set_multicast(struct net_device *netdev)
static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
u16 lcladv, u16 rmtadv)
{
- u32 flow, afc_cfg = 0;
+ u32 flow = 0, afc_cfg;
int ret = smsc95xx_read_reg(dev, AFC_CFG, &afc_cfg);
if (ret < 0)
@@ -537,20 +537,19 @@ static int smsc95xx_phy_update_flowcontrol(struct usbnet *dev, u8 duplex,
if (cap & FLOW_CTRL_RX)
flow = 0xFFFF0002;
- else
- flow = 0;
- if (cap & FLOW_CTRL_TX)
+ if (cap & FLOW_CTRL_TX) {
afc_cfg |= 0xF;
- else
+ flow |= 0xFFFF0000;
+ } else {
afc_cfg &= ~0xF;
+ }
netif_dbg(dev, link, dev->net, "rx pause %s, tx pause %s\n",
cap & FLOW_CTRL_RX ? "enabled" : "disabled",
cap & FLOW_CTRL_TX ? "enabled" : "disabled");
} else {
netif_dbg(dev, link, dev->net, "half duplex\n");
- flow = 0;
afc_cfg |= 0xF;
}
diff --git a/drivers/net/vrf.c b/drivers/net/vrf.c
index 7e19051f3230..9b243e6f3008 100644
--- a/drivers/net/vrf.c
+++ b/drivers/net/vrf.c
@@ -957,12 +957,12 @@ static void vrf_ip6_input_dst(struct sk_buff *skb, struct net_device *vrf_dev,
{
const struct ipv6hdr *iph = ipv6_hdr(skb);
struct flowi6 fl6 = {
+ .flowi6_iif = ifindex,
+ .flowi6_mark = skb->mark,
+ .flowi6_proto = iph->nexthdr,
.daddr = iph->daddr,
.saddr = iph->saddr,
.flowlabel = ip6_flowinfo(iph),
- .flowi6_mark = skb->mark,
- .flowi6_proto = iph->nexthdr,
- .flowi6_iif = ifindex,
};
struct net *net = dev_net(vrf_dev);
struct rt6_info *rt6;
diff --git a/drivers/nvdimm/pmem.c b/drivers/nvdimm/pmem.c
index e9aa453da50c..39dfd7affa31 100644
--- a/drivers/nvdimm/pmem.c
+++ b/drivers/nvdimm/pmem.c
@@ -262,16 +262,9 @@ static size_t pmem_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff,
return copy_from_iter_flushcache(addr, bytes, i);
}
-static void pmem_dax_flush(struct dax_device *dax_dev, pgoff_t pgoff,
- void *addr, size_t size)
-{
- arch_wb_cache_pmem(addr, size);
-}
-
static const struct dax_operations pmem_dax_ops = {
.direct_access = pmem_dax_direct_access,
.copy_from_iter = pmem_copy_from_iter,
- .flush = pmem_dax_flush,
};
static const struct attribute_group *pmem_attribute_groups[] = {
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 277a7a02cba5..acc816b67582 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1897,6 +1897,8 @@ int nvme_init_identify(struct nvme_ctrl *ctrl)
ctrl->cntlid = le16_to_cpu(id->cntlid);
ctrl->hmpre = le32_to_cpu(id->hmpre);
ctrl->hmmin = le32_to_cpu(id->hmmin);
+ ctrl->hmminds = le32_to_cpu(id->hmminds);
+ ctrl->hmmaxd = le16_to_cpu(id->hmmaxd);
}
kfree(id);
@@ -2377,10 +2379,11 @@ static void nvme_alloc_ns(struct nvme_ctrl *ctrl, unsigned nsid)
nvme_report_ns_ids(ctrl, ns->ns_id, id, ns->eui, ns->nguid, &ns->uuid);
- if (nvme_nvm_ns_supported(ns, id) &&
- nvme_nvm_register(ns, disk_name, node)) {
- dev_warn(ctrl->device, "%s: LightNVM init failure\n", __func__);
- goto out_free_id;
+ if ((ctrl->quirks & NVME_QUIRK_LIGHTNVM) && id->vs[0] == 0x1) {
+ if (nvme_nvm_register(ns, disk_name, node)) {
+ dev_warn(ctrl->device, "LightNVM init failure\n");
+ goto out_free_id;
+ }
}
disk = alloc_disk_node(0, node);
diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
index c1a28569e843..1f79e3f141e6 100644
--- a/drivers/nvme/host/lightnvm.c
+++ b/drivers/nvme/host/lightnvm.c
@@ -955,29 +955,3 @@ void nvme_nvm_unregister_sysfs(struct nvme_ns *ns)
sysfs_remove_group(&disk_to_dev(ns->disk)->kobj,
&nvm_dev_attr_group);
}
-
-/* move to shared place when used in multiple places. */
-#define PCI_VENDOR_ID_CNEX 0x1d1d
-#define PCI_DEVICE_ID_CNEX_WL 0x2807
-#define PCI_DEVICE_ID_CNEX_QEMU 0x1f1f
-
-int nvme_nvm_ns_supported(struct nvme_ns *ns, struct nvme_id_ns *id)
-{
- struct nvme_ctrl *ctrl = ns->ctrl;
- /* XXX: this is poking into PCI structures from generic code! */
- struct pci_dev *pdev = to_pci_dev(ctrl->dev);
-
- /* QEMU NVMe simulator - PCI ID + Vendor specific bit */
- if (pdev->vendor == PCI_VENDOR_ID_CNEX &&
- pdev->device == PCI_DEVICE_ID_CNEX_QEMU &&
- id->vs[0] == 0x1)
- return 1;
-
- /* CNEX Labs - PCI ID + Vendor specific bit */
- if (pdev->vendor == PCI_VENDOR_ID_CNEX &&
- pdev->device == PCI_DEVICE_ID_CNEX_WL &&
- id->vs[0] == 0x1)
- return 1;
-
- return 0;
-}
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index a19a587d60ed..d3f3c4447515 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -75,6 +75,11 @@ enum nvme_quirks {
* The deepest sleep state should not be used.
*/
NVME_QUIRK_NO_DEEPEST_PS = (1 << 5),
+
+ /*
+ * Supports the LighNVM command set if indicated in vs[1].
+ */
+ NVME_QUIRK_LIGHTNVM = (1 << 6),
};
/*
@@ -176,8 +181,11 @@ struct nvme_ctrl {
u64 ps_max_latency_us;
bool apst_enabled;
+ /* PCIe only: */
u32 hmpre;
u32 hmmin;
+ u32 hmminds;
+ u16 hmmaxd;
/* Fabrics only */
u16 sqsize;
@@ -320,7 +328,6 @@ void nvme_stop_keep_alive(struct nvme_ctrl *ctrl);
int nvme_reset_ctrl(struct nvme_ctrl *ctrl);
#ifdef CONFIG_NVM
-int nvme_nvm_ns_supported(struct nvme_ns *ns, struct nvme_id_ns *id);
int nvme_nvm_register(struct nvme_ns *ns, char *disk_name, int node);
void nvme_nvm_unregister(struct nvme_ns *ns);
int nvme_nvm_register_sysfs(struct nvme_ns *ns);
@@ -339,10 +346,6 @@ static inline int nvme_nvm_register_sysfs(struct nvme_ns *ns)
return 0;
}
static inline void nvme_nvm_unregister_sysfs(struct nvme_ns *ns) {};
-static inline int nvme_nvm_ns_supported(struct nvme_ns *ns, struct nvme_id_ns *id)
-{
- return 0;
-}
static inline int nvme_nvm_ioctl(struct nvme_ns *ns, unsigned int cmd,
unsigned long arg)
{
diff --git a/drivers/nvme/host/pci.c b/drivers/nvme/host/pci.c
index 198245faba6b..4a2121335f48 100644
--- a/drivers/nvme/host/pci.c
+++ b/drivers/nvme/host/pci.c
@@ -1612,21 +1612,23 @@ static void nvme_free_host_mem(struct nvme_dev *dev)
dev->host_mem_descs = NULL;
}
-static int nvme_alloc_host_mem(struct nvme_dev *dev, u64 min, u64 preferred)
+static int __nvme_alloc_host_mem(struct nvme_dev *dev, u64 preferred,
+ u32 chunk_size)
{
struct nvme_host_mem_buf_desc *descs;
- u32 chunk_size, max_entries, len;
+ u32 max_entries, len;
dma_addr_t descs_dma;
int i = 0;
void **bufs;
u64 size = 0, tmp;
- /* start big and work our way down */
- chunk_size = min(preferred, (u64)PAGE_SIZE << MAX_ORDER);
-retry:
tmp = (preferred + chunk_size - 1);
do_div(tmp, chunk_size);
max_entries = tmp;
+
+ if (dev->ctrl.hmmaxd && dev->ctrl.hmmaxd < max_entries)
+ max_entries = dev->ctrl.hmmaxd;
+
descs = dma_zalloc_coherent(dev->dev, max_entries * sizeof(*descs),
&descs_dma, GFP_KERNEL);
if (!descs)
@@ -1650,15 +1652,9 @@ retry:
i++;
}
- if (!size || (min && size < min)) {
- dev_warn(dev->ctrl.device,
- "failed to allocate host memory buffer.\n");
+ if (!size)
goto out_free_bufs;
- }
- dev_info(dev->ctrl.device,
- "allocated %lld MiB host memory buffer.\n",
- size >> ilog2(SZ_1M));
dev->nr_host_mem_descs = i;
dev->host_mem_size = size;
dev->host_mem_descs = descs;
@@ -1679,21 +1675,35 @@ out_free_descs:
dma_free_coherent(dev->dev, max_entries * sizeof(*descs), descs,
descs_dma);
out:
- /* try a smaller chunk size if we failed early */
- if (chunk_size >= PAGE_SIZE * 2 && (i == 0 || size < min)) {
- chunk_size /= 2;
- goto retry;
- }
dev->host_mem_descs = NULL;
return -ENOMEM;
}
-static void nvme_setup_host_mem(struct nvme_dev *dev)
+static int nvme_alloc_host_mem(struct nvme_dev *dev, u64 min, u64 preferred)
+{
+ u32 chunk_size;
+
+ /* start big and work our way down */
+ for (chunk_size = min_t(u64, preferred, PAGE_SIZE * MAX_ORDER_NR_PAGES);
+ chunk_size >= max_t(u32, dev->ctrl.hmminds * 4096, PAGE_SIZE * 2);
+ chunk_size /= 2) {
+ if (!__nvme_alloc_host_mem(dev, preferred, chunk_size)) {
+ if (!min || dev->host_mem_size >= min)
+ return 0;
+ nvme_free_host_mem(dev);
+ }
+ }
+
+ return -ENOMEM;
+}
+
+static int nvme_setup_host_mem(struct nvme_dev *dev)
{
u64 max = (u64)max_host_mem_size_mb * SZ_1M;
u64 preferred = (u64)dev->ctrl.hmpre * 4096;
u64 min = (u64)dev->ctrl.hmmin * 4096;
u32 enable_bits = NVME_HOST_MEM_ENABLE;
+ int ret = 0;
preferred = min(preferred, max);
if (min > max) {
@@ -1701,7 +1711,7 @@ static void nvme_setup_host_mem(struct nvme_dev *dev)
"min host memory (%lld MiB) above limit (%d MiB).\n",
min >> ilog2(SZ_1M), max_host_mem_size_mb);
nvme_free_host_mem(dev);
- return;
+ return 0;
}
/*
@@ -1715,12 +1725,21 @@ static void nvme_setup_host_mem(struct nvme_dev *dev)
}
if (!dev->host_mem_descs) {
- if (nvme_alloc_host_mem(dev, min, preferred))
- return;
+ if (nvme_alloc_host_mem(dev, min, preferred)) {
+ dev_warn(dev->ctrl.device,
+ "failed to allocate host memory buffer.\n");
+ return 0; /* controller must work without HMB */
+ }
+
+ dev_info(dev->ctrl.device,
+ "allocated %lld MiB host memory buffer.\n",
+ dev->host_mem_size >> ilog2(SZ_1M));
}
- if (nvme_set_host_mem(dev, enable_bits))
+ ret = nvme_set_host_mem(dev, enable_bits);
+ if (ret)
nvme_free_host_mem(dev);
+ return ret;
}
static int nvme_setup_io_queues(struct nvme_dev *dev)
@@ -2164,8 +2183,11 @@ static void nvme_reset_work(struct work_struct *work)
"unable to allocate dma for dbbuf\n");
}
- if (dev->ctrl.hmpre)
- nvme_setup_host_mem(dev);
+ if (dev->ctrl.hmpre) {
+ result = nvme_setup_host_mem(dev);
+ if (result < 0)
+ goto out;
+ }
result = nvme_setup_io_queues(dev);
if (result)
@@ -2497,6 +2519,10 @@ static const struct pci_device_id nvme_id_table[] = {
.driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, },
{ PCI_DEVICE(0x144d, 0xa822), /* Samsung PM1725a */
.driver_data = NVME_QUIRK_DELAY_BEFORE_CHK_RDY, },
+ { PCI_DEVICE(0x1d1d, 0x1f1f), /* LighNVM qemu device */
+ .driver_data = NVME_QUIRK_LIGHTNVM, },
+ { PCI_DEVICE(0x1d1d, 0x2807), /* CNEX WL */
+ .driver_data = NVME_QUIRK_LIGHTNVM, },
{ PCI_DEVICE_CLASS(PCI_CLASS_STORAGE_EXPRESS, 0xffffff) },
{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2001) },
{ PCI_DEVICE(PCI_VENDOR_ID_APPLE, 0x2003) },
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index b0002daa50f3..6078dfc11b11 100644
--- a/drivers/pci/pci.c
+++ b/drivers/pci/pci.c
@@ -52,7 +52,6 @@ static void pci_pme_list_scan(struct work_struct *work);
static LIST_HEAD(pci_pme_list);
static DEFINE_MUTEX(pci_pme_list_mutex);
static DECLARE_DELAYED_WORK(pci_pme_work, pci_pme_list_scan);
-static DEFINE_MUTEX(pci_bridge_mutex);
struct pci_pme_device {
struct list_head list;
@@ -1351,16 +1350,10 @@ static void pci_enable_bridge(struct pci_dev *dev)
if (bridge)
pci_enable_bridge(bridge);
- /*
- * Hold pci_bridge_mutex to prevent a race when enabling two
- * devices below the bridge simultaneously. The race may cause a
- * PCI_COMMAND_MEMORY update to be lost (see changelog).
- */
- mutex_lock(&pci_bridge_mutex);
if (pci_is_enabled(dev)) {
if (!dev->is_busmaster)
pci_set_master(dev);
- goto end;
+ return;
}
retval = pci_enable_device(dev);
@@ -1368,8 +1361,6 @@ static void pci_enable_bridge(struct pci_dev *dev)
dev_err(&dev->dev, "Error enabling bridge (%d), continuing\n",
retval);
pci_set_master(dev);
-end:
- mutex_unlock(&pci_bridge_mutex);
}
static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
@@ -1394,7 +1385,7 @@ static int pci_enable_device_flags(struct pci_dev *dev, unsigned long flags)
return 0; /* already enabled */
bridge = pci_upstream_bridge(dev);
- if (bridge && !pci_is_enabled(bridge))
+ if (bridge)
pci_enable_bridge(bridge);
/* only skip sriov related */
diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c
index be635f017756..083276e03c38 100644
--- a/drivers/pci/pcie/portdrv_pci.c
+++ b/drivers/pci/pcie/portdrv_pci.c
@@ -260,7 +260,7 @@ static int __init dmi_pcie_pme_disable_msi(const struct dmi_system_id *d)
return 0;
}
-static struct dmi_system_id __initdata pcie_portdrv_dmi_table[] = {
+static const struct dmi_system_id pcie_portdrv_dmi_table[] __initconst = {
/*
* Boxes that should not use MSI for PCIe PME signaling.
*/
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index a2afb44fad10..a4d33619a7bb 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -1707,7 +1707,7 @@ static int dmi_disable_ioapicreroute(const struct dmi_system_id *d)
return 0;
}
-static struct dmi_system_id boot_interrupt_dmi_table[] = {
+static const struct dmi_system_id boot_interrupt_dmi_table[] = {
/*
* Systems to exclude from boot interrupt reroute quirks
*/
diff --git a/drivers/pcmcia/db1xxx_ss.c b/drivers/pcmcia/db1xxx_ss.c
index 944674ee3464..19e17829f515 100644
--- a/drivers/pcmcia/db1xxx_ss.c
+++ b/drivers/pcmcia/db1xxx_ss.c
@@ -131,22 +131,27 @@ static irqreturn_t db1000_pcmcia_stschgirq(int irq, void *data)
return IRQ_HANDLED;
}
+/* Db/Pb1200 have separate per-socket insertion and ejection
+ * interrupts which stay asserted as long as the card is
+ * inserted/missing. The one which caused us to be called
+ * needs to be disabled and the other one enabled.
+ */
static irqreturn_t db1200_pcmcia_cdirq(int irq, void *data)
{
+ disable_irq_nosync(irq);
+ return IRQ_WAKE_THREAD;
+}
+
+static irqreturn_t db1200_pcmcia_cdirq_fn(int irq, void *data)
+{
struct db1x_pcmcia_sock *sock = data;
- /* Db/Pb1200 have separate per-socket insertion and ejection
- * interrupts which stay asserted as long as the card is
- * inserted/missing. The one which caused us to be called
- * needs to be disabled and the other one enabled.
- */
- if (irq == sock->insert_irq) {
- disable_irq_nosync(sock->insert_irq);
+ /* Wait a bit for the signals to stop bouncing. */
+ msleep(100);
+ if (irq == sock->insert_irq)
enable_irq(sock->eject_irq);
- } else {
- disable_irq_nosync(sock->eject_irq);
+ else
enable_irq(sock->insert_irq);
- }
pcmcia_parse_events(&sock->socket, SS_DETECT);
@@ -172,13 +177,13 @@ static int db1x_pcmcia_setup_irqs(struct db1x_pcmcia_sock *sock)
*/
if ((sock->board_type == BOARD_TYPE_DB1200) ||
(sock->board_type == BOARD_TYPE_DB1300)) {
- ret = request_irq(sock->insert_irq, db1200_pcmcia_cdirq,
- 0, "pcmcia_insert", sock);
+ ret = request_threaded_irq(sock->insert_irq, db1200_pcmcia_cdirq,
+ db1200_pcmcia_cdirq_fn, 0, "pcmcia_insert", sock);
if (ret)
goto out1;
- ret = request_irq(sock->eject_irq, db1200_pcmcia_cdirq,
- 0, "pcmcia_eject", sock);
+ ret = request_threaded_irq(sock->eject_irq, db1200_pcmcia_cdirq,
+ db1200_pcmcia_cdirq_fn, 0, "pcmcia_eject", sock);
if (ret) {
free_irq(sock->insert_irq, sock);
goto out1;
diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig
index 441912c10b82..5c8d452e35e2 100644
--- a/drivers/phy/Kconfig
+++ b/drivers/phy/Kconfig
@@ -44,6 +44,7 @@ source "drivers/phy/allwinner/Kconfig"
source "drivers/phy/amlogic/Kconfig"
source "drivers/phy/broadcom/Kconfig"
source "drivers/phy/hisilicon/Kconfig"
+source "drivers/phy/lantiq/Kconfig"
source "drivers/phy/marvell/Kconfig"
source "drivers/phy/mediatek/Kconfig"
source "drivers/phy/motorola/Kconfig"
diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile
index 06f3c500030d..3a52dcb09566 100644
--- a/drivers/phy/Makefile
+++ b/drivers/phy/Makefile
@@ -6,9 +6,9 @@ obj-$(CONFIG_GENERIC_PHY) += phy-core.o
obj-$(CONFIG_PHY_LPC18XX_USB_OTG) += phy-lpc18xx-usb-otg.o
obj-$(CONFIG_PHY_XGENE) += phy-xgene.o
obj-$(CONFIG_PHY_PISTACHIO_USB) += phy-pistachio-usb.o
-
obj-$(CONFIG_ARCH_SUNXI) += allwinner/
obj-$(CONFIG_ARCH_MESON) += amlogic/
+obj-$(CONFIG_LANTIQ) += lantiq/
obj-$(CONFIG_ARCH_MEDIATEK) += mediatek/
obj-$(CONFIG_ARCH_RENESAS) += renesas/
obj-$(CONFIG_ARCH_ROCKCHIP) += rockchip/
diff --git a/drivers/phy/lantiq/Kconfig b/drivers/phy/lantiq/Kconfig
new file mode 100644
index 000000000000..326d88a6417d
--- /dev/null
+++ b/drivers/phy/lantiq/Kconfig
@@ -0,0 +1,9 @@
+#
+# Phy drivers for Lantiq / Intel platforms
+#
+config PHY_LANTIQ_RCU_USB2
+ tristate "Lantiq XWAY SoC RCU based USB PHY"
+ depends on OF && (SOC_TYPE_XWAY || COMPILE_TEST)
+ select GENERIC_PHY
+ help
+ Support for the USB PHY(s) on the Lantiq / Intel XWAY family SoCs.
diff --git a/drivers/phy/lantiq/Makefile b/drivers/phy/lantiq/Makefile
new file mode 100644
index 000000000000..f73eb56a5416
--- /dev/null
+++ b/drivers/phy/lantiq/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_PHY_LANTIQ_RCU_USB2) += phy-lantiq-rcu-usb2.o
diff --git a/drivers/phy/lantiq/phy-lantiq-rcu-usb2.c b/drivers/phy/lantiq/phy-lantiq-rcu-usb2.c
new file mode 100644
index 000000000000..986224fca9e9
--- /dev/null
+++ b/drivers/phy/lantiq/phy-lantiq-rcu-usb2.c
@@ -0,0 +1,254 @@
+/*
+ * Lantiq XWAY SoC RCU module based USB 1.1/2.0 PHY driver
+ *
+ * Copyright (C) 2016 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+ * Copyright (C) 2017 Hauke Mehrtens <hauke@hauke-m.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_device.h>
+#include <linux/phy/phy.h>
+#include <linux/platform_device.h>
+#include <linux/property.h>
+#include <linux/regmap.h>
+#include <linux/reset.h>
+
+/* Transmitter HS Pre-Emphasis Enable */
+#define RCU_CFG1_TX_PEE BIT(0)
+/* Disconnect Threshold */
+#define RCU_CFG1_DIS_THR_MASK 0x00038000
+#define RCU_CFG1_DIS_THR_SHIFT 15
+
+struct ltq_rcu_usb2_bits {
+ u8 hostmode;
+ u8 slave_endianness;
+ u8 host_endianness;
+ bool have_ana_cfg;
+};
+
+struct ltq_rcu_usb2_priv {
+ struct regmap *regmap;
+ unsigned int phy_reg_offset;
+ unsigned int ana_cfg1_reg_offset;
+ const struct ltq_rcu_usb2_bits *reg_bits;
+ struct device *dev;
+ struct phy *phy;
+ struct clk *phy_gate_clk;
+ struct reset_control *ctrl_reset;
+ struct reset_control *phy_reset;
+};
+
+static const struct ltq_rcu_usb2_bits xway_rcu_usb2_reg_bits = {
+ .hostmode = 11,
+ .slave_endianness = 9,
+ .host_endianness = 10,
+ .have_ana_cfg = false,
+};
+
+static const struct ltq_rcu_usb2_bits xrx100_rcu_usb2_reg_bits = {
+ .hostmode = 11,
+ .slave_endianness = 17,
+ .host_endianness = 10,
+ .have_ana_cfg = false,
+};
+
+static const struct ltq_rcu_usb2_bits xrx200_rcu_usb2_reg_bits = {
+ .hostmode = 11,
+ .slave_endianness = 9,
+ .host_endianness = 10,
+ .have_ana_cfg = true,
+};
+
+static const struct of_device_id ltq_rcu_usb2_phy_of_match[] = {
+ {
+ .compatible = "lantiq,ase-usb2-phy",
+ .data = &xway_rcu_usb2_reg_bits,
+ },
+ {
+ .compatible = "lantiq,danube-usb2-phy",
+ .data = &xway_rcu_usb2_reg_bits,
+ },
+ {
+ .compatible = "lantiq,xrx100-usb2-phy",
+ .data = &xrx100_rcu_usb2_reg_bits,
+ },
+ {
+ .compatible = "lantiq,xrx200-usb2-phy",
+ .data = &xrx200_rcu_usb2_reg_bits,
+ },
+ {
+ .compatible = "lantiq,xrx300-usb2-phy",
+ .data = &xrx200_rcu_usb2_reg_bits,
+ },
+ { },
+};
+MODULE_DEVICE_TABLE(of, ltq_rcu_usb2_phy_of_match);
+
+static int ltq_rcu_usb2_phy_init(struct phy *phy)
+{
+ struct ltq_rcu_usb2_priv *priv = phy_get_drvdata(phy);
+
+ if (priv->reg_bits->have_ana_cfg) {
+ regmap_update_bits(priv->regmap, priv->ana_cfg1_reg_offset,
+ RCU_CFG1_TX_PEE, RCU_CFG1_TX_PEE);
+ regmap_update_bits(priv->regmap, priv->ana_cfg1_reg_offset,
+ RCU_CFG1_DIS_THR_MASK, 7 << RCU_CFG1_DIS_THR_SHIFT);
+ }
+
+ /* Configure core to host mode */
+ regmap_update_bits(priv->regmap, priv->phy_reg_offset,
+ BIT(priv->reg_bits->hostmode), 0);
+
+ /* Select DMA endianness (Host-endian: big-endian) */
+ regmap_update_bits(priv->regmap, priv->phy_reg_offset,
+ BIT(priv->reg_bits->slave_endianness), 0);
+ regmap_update_bits(priv->regmap, priv->phy_reg_offset,
+ BIT(priv->reg_bits->host_endianness),
+ BIT(priv->reg_bits->host_endianness));
+
+ return 0;
+}
+
+static int ltq_rcu_usb2_phy_power_on(struct phy *phy)
+{
+ struct ltq_rcu_usb2_priv *priv = phy_get_drvdata(phy);
+ struct device *dev = priv->dev;
+ int ret;
+
+ reset_control_deassert(priv->phy_reset);
+
+ ret = clk_prepare_enable(priv->phy_gate_clk);
+ if (ret)
+ dev_err(dev, "failed to enable PHY gate\n");
+
+ return ret;
+}
+
+static int ltq_rcu_usb2_phy_power_off(struct phy *phy)
+{
+ struct ltq_rcu_usb2_priv *priv = phy_get_drvdata(phy);
+
+ reset_control_assert(priv->phy_reset);
+
+ clk_disable_unprepare(priv->phy_gate_clk);
+
+ return 0;
+}
+
+static struct phy_ops ltq_rcu_usb2_phy_ops = {
+ .init = ltq_rcu_usb2_phy_init,
+ .power_on = ltq_rcu_usb2_phy_power_on,
+ .power_off = ltq_rcu_usb2_phy_power_off,
+ .owner = THIS_MODULE,
+};
+
+static int ltq_rcu_usb2_of_parse(struct ltq_rcu_usb2_priv *priv,
+ struct platform_device *pdev)
+{
+ struct device *dev = priv->dev;
+ const __be32 *offset;
+ int ret;
+
+ priv->reg_bits = of_device_get_match_data(dev);
+
+ priv->regmap = syscon_node_to_regmap(dev->of_node->parent);
+ if (IS_ERR(priv->regmap)) {
+ dev_err(dev, "Failed to lookup RCU regmap\n");
+ return PTR_ERR(priv->regmap);
+ }
+
+ offset = of_get_address(dev->of_node, 0, NULL, NULL);
+ if (!offset) {
+ dev_err(dev, "Failed to get RCU PHY reg offset\n");
+ return -ENOENT;
+ }
+ priv->phy_reg_offset = __be32_to_cpu(*offset);
+
+ if (priv->reg_bits->have_ana_cfg) {
+ offset = of_get_address(dev->of_node, 1, NULL, NULL);
+ if (!offset) {
+ dev_err(dev, "Failed to get RCU ANA CFG1 reg offset\n");
+ return -ENOENT;
+ }
+ priv->ana_cfg1_reg_offset = __be32_to_cpu(*offset);
+ }
+
+ priv->phy_gate_clk = devm_clk_get(dev, "phy");
+ if (IS_ERR(priv->phy_gate_clk)) {
+ dev_err(dev, "Unable to get USB phy gate clk\n");
+ return PTR_ERR(priv->phy_gate_clk);
+ }
+
+ priv->ctrl_reset = devm_reset_control_get_shared(dev, "ctrl");
+ if (IS_ERR(priv->ctrl_reset)) {
+ if (PTR_ERR(priv->ctrl_reset) != -EPROBE_DEFER)
+ dev_err(dev, "failed to get 'ctrl' reset\n");
+ return PTR_ERR(priv->ctrl_reset);
+ }
+
+ priv->phy_reset = devm_reset_control_get_optional(dev, "phy");
+ if (IS_ERR(priv->phy_reset))
+ return PTR_ERR(priv->phy_reset);
+
+ return 0;
+}
+
+static int ltq_rcu_usb2_phy_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct ltq_rcu_usb2_priv *priv;
+ struct phy_provider *provider;
+ int ret;
+
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ priv->dev = dev;
+
+ ret = ltq_rcu_usb2_of_parse(priv, pdev);
+ if (ret)
+ return ret;
+
+ /* Reset USB core through reset controller */
+ reset_control_deassert(priv->ctrl_reset);
+
+ reset_control_assert(priv->phy_reset);
+
+ priv->phy = devm_phy_create(dev, dev->of_node, &ltq_rcu_usb2_phy_ops);
+ if (IS_ERR(priv->phy)) {
+ dev_err(dev, "failed to create PHY\n");
+ return PTR_ERR(priv->phy);
+ }
+
+ phy_set_drvdata(priv->phy, priv);
+
+ provider = devm_of_phy_provider_register(dev, of_phy_simple_xlate);
+ if (IS_ERR(provider))
+ return PTR_ERR(provider);
+
+ dev_set_drvdata(priv->dev, priv);
+ return 0;
+}
+
+static struct platform_driver ltq_rcu_usb2_phy_driver = {
+ .probe = ltq_rcu_usb2_phy_probe,
+ .driver = {
+ .name = "lantiq-rcu-usb2-phy",
+ .of_match_table = ltq_rcu_usb2_phy_of_match,
+ }
+};
+module_platform_driver(ltq_rcu_usb2_phy_driver);
+
+MODULE_AUTHOR("Martin Blumenstingl <martin.blumenstingl@googlemail.com>");
+MODULE_DESCRIPTION("Lantiq XWAY USB2 PHY driver");
+MODULE_LICENSE("GPL v2");
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index b8b6ab072cd0..71b944748304 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -550,9 +550,9 @@ static int armada_37xx_irq_set_wake(struct irq_data *d, unsigned int on)
spin_lock_irqsave(&info->irq_lock, flags);
val = readl(info->base + reg);
if (on)
- val |= d->mask;
+ val |= (BIT(d->hwirq % GPIO_PER_REG));
else
- val &= ~d->mask;
+ val &= ~(BIT(d->hwirq % GPIO_PER_REG));
writel(val, info->base + reg);
spin_unlock_irqrestore(&info->irq_lock, flags);
@@ -571,10 +571,10 @@ static int armada_37xx_irq_set_type(struct irq_data *d, unsigned int type)
val = readl(info->base + reg);
switch (type) {
case IRQ_TYPE_EDGE_RISING:
- val &= ~d->mask;
+ val &= ~(BIT(d->hwirq % GPIO_PER_REG));
break;
case IRQ_TYPE_EDGE_FALLING:
- val |= d->mask;
+ val |= (BIT(d->hwirq % GPIO_PER_REG));
break;
default:
spin_unlock_irqrestore(&info->irq_lock, flags);
@@ -624,11 +624,27 @@ static void armada_37xx_irq_handler(struct irq_desc *desc)
chained_irq_exit(chip, desc);
}
+static unsigned int armada_37xx_irq_startup(struct irq_data *d)
+{
+ struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
+ int irq = d->hwirq - chip->irq_base;
+ /*
+ * The mask field is a "precomputed bitmask for accessing the
+ * chip registers" which was introduced for the generic
+ * irqchip framework. As we don't use this framework, we can
+ * reuse this field for our own usage.
+ */
+ d->mask = BIT(irq % GPIO_PER_REG);
+
+ armada_37xx_irq_unmask(d);
+
+ return 0;
+}
+
static int armada_37xx_irqchip_register(struct platform_device *pdev,
struct armada_37xx_pinctrl *info)
{
struct device_node *np = info->dev->of_node;
- int nrirqs = info->data->nr_pins;
struct gpio_chip *gc = &info->gpio_chip;
struct irq_chip *irqchip = &info->irq_chip;
struct resource res;
@@ -666,8 +682,8 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
irqchip->irq_unmask = armada_37xx_irq_unmask;
irqchip->irq_set_wake = armada_37xx_irq_set_wake;
irqchip->irq_set_type = armada_37xx_irq_set_type;
+ irqchip->irq_startup = armada_37xx_irq_startup;
irqchip->name = info->data->name;
-
ret = gpiochip_irqchip_add(gc, irqchip, 0,
handle_edge_irq, IRQ_TYPE_NONE);
if (ret) {
@@ -680,19 +696,6 @@ static int armada_37xx_irqchip_register(struct platform_device *pdev,
* controller. But we do not take advantage of this and use
* the chained irq with all of them.
*/
- for (i = 0; i < nrirqs; i++) {
- struct irq_data *d = irq_get_irq_data(gc->irq_base + i);
-
- /*
- * The mask field is a "precomputed bitmask for
- * accessing the chip registers" which was introduced
- * for the generic irqchip framework. As we don't use
- * this framework, we can reuse this field for our own
- * usage.
- */
- d->mask = BIT(i % GPIO_PER_REG);
- }
-
for (i = 0; i < nr_irq_parent; i++) {
int irq = irq_of_parse_and_map(np, i);
diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
index 38af1ec2df0c..3f6b34febbf1 100644
--- a/drivers/pinctrl/pinctrl-amd.c
+++ b/drivers/pinctrl/pinctrl-amd.c
@@ -36,6 +36,7 @@
#include <linux/pinctrl/pinconf.h>
#include <linux/pinctrl/pinconf-generic.h>
+#include "core.h"
#include "pinctrl-utils.h"
#include "pinctrl-amd.h"
@@ -725,6 +726,69 @@ static const struct pinconf_ops amd_pinconf_ops = {
.pin_config_group_set = amd_pinconf_group_set,
};
+#ifdef CONFIG_PM_SLEEP
+static bool amd_gpio_should_save(struct amd_gpio *gpio_dev, unsigned int pin)
+{
+ const struct pin_desc *pd = pin_desc_get(gpio_dev->pctrl, pin);
+
+ if (!pd)
+ return false;
+
+ /*
+ * Only restore the pin if it is actually in use by the kernel (or
+ * by userspace).
+ */
+ if (pd->mux_owner || pd->gpio_owner ||
+ gpiochip_line_is_irq(&gpio_dev->gc, pin))
+ return true;
+
+ return false;
+}
+
+int amd_gpio_suspend(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct amd_gpio *gpio_dev = platform_get_drvdata(pdev);
+ struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
+ int i;
+
+ for (i = 0; i < desc->npins; i++) {
+ int pin = desc->pins[i].number;
+
+ if (!amd_gpio_should_save(gpio_dev, pin))
+ continue;
+
+ gpio_dev->saved_regs[i] = readl(gpio_dev->base + pin*4);
+ }
+
+ return 0;
+}
+
+int amd_gpio_resume(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct amd_gpio *gpio_dev = platform_get_drvdata(pdev);
+ struct pinctrl_desc *desc = gpio_dev->pctrl->desc;
+ int i;
+
+ for (i = 0; i < desc->npins; i++) {
+ int pin = desc->pins[i].number;
+
+ if (!amd_gpio_should_save(gpio_dev, pin))
+ continue;
+
+ writel(gpio_dev->saved_regs[i], gpio_dev->base + pin*4);
+ }
+
+ return 0;
+}
+
+static const struct dev_pm_ops amd_gpio_pm_ops = {
+ SET_LATE_SYSTEM_SLEEP_PM_OPS(amd_gpio_suspend,
+ amd_gpio_resume)
+};
+#endif
+
static struct pinctrl_desc amd_pinctrl_desc = {
.pins = kerncz_pins,
.npins = ARRAY_SIZE(kerncz_pins),
@@ -764,6 +828,14 @@ static int amd_gpio_probe(struct platform_device *pdev)
return irq_base;
}
+#ifdef CONFIG_PM_SLEEP
+ gpio_dev->saved_regs = devm_kcalloc(&pdev->dev, amd_pinctrl_desc.npins,
+ sizeof(*gpio_dev->saved_regs),
+ GFP_KERNEL);
+ if (!gpio_dev->saved_regs)
+ return -ENOMEM;
+#endif
+
gpio_dev->pdev = pdev;
gpio_dev->gc.direction_input = amd_gpio_direction_input;
gpio_dev->gc.direction_output = amd_gpio_direction_output;
@@ -853,6 +925,9 @@ static struct platform_driver amd_gpio_driver = {
.driver = {
.name = "amd_gpio",
.acpi_match_table = ACPI_PTR(amd_gpio_acpi_match),
+#ifdef CONFIG_PM_SLEEP
+ .pm = &amd_gpio_pm_ops,
+#endif
},
.probe = amd_gpio_probe,
.remove = amd_gpio_remove,
diff --git a/drivers/pinctrl/pinctrl-amd.h b/drivers/pinctrl/pinctrl-amd.h
index 5b1cb965c767..8fa453a59da5 100644
--- a/drivers/pinctrl/pinctrl-amd.h
+++ b/drivers/pinctrl/pinctrl-amd.h
@@ -97,6 +97,7 @@ struct amd_gpio {
unsigned int hwbank_num;
struct resource *res;
struct platform_device *pdev;
+ u32 *saved_regs;
};
/* KERNCZ configuration*/
diff --git a/drivers/pinctrl/sprd/Kconfig b/drivers/pinctrl/sprd/Kconfig
index 6f4a7f9ac6fd..bc7f3fab22f1 100644
--- a/drivers/pinctrl/sprd/Kconfig
+++ b/drivers/pinctrl/sprd/Kconfig
@@ -4,6 +4,8 @@
config PINCTRL_SPRD
bool "Spreadtrum pinctrl driver"
+ depends on OF
+ depends on ARCH_SPRD || COMPILE_TEST
select PINMUX
select PINCONF
select GENERIC_PINCONF
@@ -13,5 +15,6 @@ config PINCTRL_SPRD
config PINCTRL_SPRD_SC9860
bool "Spreadtrum SC9860 pinctrl driver"
+ depends on PINCTRL_SPRD
help
Say Y here to enable Spreadtrum SC9860 pinctrl driver
diff --git a/drivers/pinctrl/sprd/pinctrl-sprd.c b/drivers/pinctrl/sprd/pinctrl-sprd.c
index 7e7b9ac7e836..63529911445c 100644
--- a/drivers/pinctrl/sprd/pinctrl-sprd.c
+++ b/drivers/pinctrl/sprd/pinctrl-sprd.c
@@ -353,13 +353,13 @@ static const struct pinctrl_ops sprd_pctrl_ops = {
.dt_free_map = pinctrl_utils_free_map,
};
-int sprd_pmx_get_function_count(struct pinctrl_dev *pctldev)
+static int sprd_pmx_get_function_count(struct pinctrl_dev *pctldev)
{
return PIN_FUNC_MAX;
}
-const char *sprd_pmx_get_function_name(struct pinctrl_dev *pctldev,
- unsigned int selector)
+static const char *sprd_pmx_get_function_name(struct pinctrl_dev *pctldev,
+ unsigned int selector)
{
switch (selector) {
case PIN_FUNC_1:
@@ -375,10 +375,10 @@ const char *sprd_pmx_get_function_name(struct pinctrl_dev *pctldev,
}
}
-int sprd_pmx_get_function_groups(struct pinctrl_dev *pctldev,
- unsigned int selector,
- const char * const **groups,
- unsigned int * const num_groups)
+static int sprd_pmx_get_function_groups(struct pinctrl_dev *pctldev,
+ unsigned int selector,
+ const char * const **groups,
+ unsigned int * const num_groups)
{
struct sprd_pinctrl *pctl = pinctrl_dev_get_drvdata(pctldev);
struct sprd_pinctrl_soc_info *info = pctl->info;
@@ -400,7 +400,7 @@ static int sprd_pmx_set_mux(struct pinctrl_dev *pctldev,
unsigned long reg;
unsigned int val = 0;
- if (group_selector > info->ngroups)
+ if (group_selector >= info->ngroups)
return -EINVAL;
switch (func_selector) {
@@ -734,7 +734,7 @@ static int sprd_pinconf_group_get(struct pinctrl_dev *pctldev,
struct sprd_pin_group *grp;
unsigned int pin_id;
- if (selector > info->ngroups)
+ if (selector >= info->ngroups)
return -EINVAL;
grp = &info->groups[selector];
@@ -753,7 +753,7 @@ static int sprd_pinconf_group_set(struct pinctrl_dev *pctldev,
struct sprd_pin_group *grp;
int ret, i;
- if (selector > info->ngroups)
+ if (selector >= info->ngroups)
return -EINVAL;
grp = &info->groups[selector];
@@ -813,7 +813,7 @@ static void sprd_pinconf_group_dbg_show(struct pinctrl_dev *pctldev,
const char *name;
int i, ret;
- if (selector > info->ngroups)
+ if (selector >= info->ngroups)
return;
grp = &info->groups[selector];
@@ -1100,12 +1100,16 @@ int sprd_pinctrl_remove(struct platform_device *pdev)
void sprd_pinctrl_shutdown(struct platform_device *pdev)
{
- struct pinctrl *pinctl = devm_pinctrl_get(&pdev->dev);
+ struct pinctrl *pinctl;
struct pinctrl_state *state;
+ pinctl = devm_pinctrl_get(&pdev->dev);
+ if (IS_ERR(pinctl))
+ return;
state = pinctrl_lookup_state(pinctl, "shutdown");
- if (!IS_ERR(state))
- pinctrl_select_state(pinctl, state);
+ if (IS_ERR(state))
+ return;
+ pinctrl_select_state(pinctl, state);
}
MODULE_DESCRIPTION("SPREADTRUM Pin Controller Driver");
diff --git a/drivers/pinctrl/uniphier/pinctrl-uniphier.h b/drivers/pinctrl/uniphier/pinctrl-uniphier.h
index c075ecb8e5db..0a3d2ac27503 100644
--- a/drivers/pinctrl/uniphier/pinctrl-uniphier.h
+++ b/drivers/pinctrl/uniphier/pinctrl-uniphier.h
@@ -17,7 +17,7 @@
#define __PINCTRL_UNIPHIER_H__
#include <linux/bitops.h>
-#include <linux/bug.h>
+#include <linux/build_bug.h>
#include <linux/kernel.h>
#include <linux/types.h>
diff --git a/drivers/platform/chrome/chromeos_laptop.c b/drivers/platform/chrome/chromeos_laptop.c
index e8a44a9bc916..d8599736a41a 100644
--- a/drivers/platform/chrome/chromeos_laptop.c
+++ b/drivers/platform/chrome/chromeos_laptop.c
@@ -518,7 +518,7 @@ static struct chromeos_laptop cr48 = {
.callback = chromeos_laptop_dmi_matched, \
.driver_data = (void *)&board_
-static struct dmi_system_id chromeos_laptop_dmi_table[] __initdata = {
+static const struct dmi_system_id chromeos_laptop_dmi_table[] __initconst = {
{
.ident = "Samsung Series 5 550",
.matches = {
diff --git a/drivers/platform/chrome/chromeos_pstore.c b/drivers/platform/chrome/chromeos_pstore.c
index 308a853ac4f1..b0693fdec8c6 100644
--- a/drivers/platform/chrome/chromeos_pstore.c
+++ b/drivers/platform/chrome/chromeos_pstore.c
@@ -14,7 +14,7 @@
#include <linux/platform_device.h>
#include <linux/pstore_ram.h>
-static struct dmi_system_id chromeos_pstore_dmi_table[] __initdata = {
+static const struct dmi_system_id chromeos_pstore_dmi_table[] __initconst = {
{
/*
* Today all Chromebooks/boxes ship with Google_* as version and
diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c
index 2b6436d1b6a4..1baf720faf69 100644
--- a/drivers/platform/chrome/cros_ec_lpc.c
+++ b/drivers/platform/chrome/cros_ec_lpc.c
@@ -329,7 +329,7 @@ static const struct acpi_device_id cros_ec_lpc_acpi_device_ids[] = {
};
MODULE_DEVICE_TABLE(acpi, cros_ec_lpc_acpi_device_ids);
-static struct dmi_system_id cros_ec_lpc_dmi_table[] __initdata = {
+static const struct dmi_system_id cros_ec_lpc_dmi_table[] __initconst = {
{
/*
* Today all Chromebooks/boxes ship with Google_* as version and
diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c
index a8e4a539e704..6bcb750e1865 100644
--- a/drivers/platform/x86/compal-laptop.c
+++ b/drivers/platform/x86/compal-laptop.c
@@ -805,7 +805,7 @@ static int dmi_check_cb_extra(const struct dmi_system_id *id)
return 1;
}
-static struct dmi_system_id __initdata compal_dmi_table[] = {
+static const struct dmi_system_id compal_dmi_table[] __initconst = {
{
.ident = "FL90/IFL90",
.matches = {
diff --git a/drivers/platform/x86/hdaps.c b/drivers/platform/x86/hdaps.c
index 458e6c948c11..c26baf77938e 100644
--- a/drivers/platform/x86/hdaps.c
+++ b/drivers/platform/x86/hdaps.c
@@ -514,7 +514,7 @@ static int __init hdaps_dmi_match_invert(const struct dmi_system_id *id)
"ThinkPad T42p", so the order of the entries matters.
If your ThinkPad is not recognized, please update to latest
BIOS. This is especially the case for some R52 ThinkPads. */
-static struct dmi_system_id __initdata hdaps_whitelist[] = {
+static const struct dmi_system_id hdaps_whitelist[] __initconst = {
HDAPS_DMI_MATCH_INVERT("IBM", "ThinkPad R50p", HDAPS_BOTH_AXES),
HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad R50"),
HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad R51"),
diff --git a/drivers/platform/x86/ibm_rtl.c b/drivers/platform/x86/ibm_rtl.c
index 610ac8391caa..18d55cee5bcd 100644
--- a/drivers/platform/x86/ibm_rtl.c
+++ b/drivers/platform/x86/ibm_rtl.c
@@ -227,7 +227,7 @@ static void rtl_teardown_sysfs(void) {
}
-static struct dmi_system_id __initdata ibm_rtl_dmi_table[] = {
+static const struct dmi_system_id ibm_rtl_dmi_table[] __initconst = {
{ \
.matches = { \
DMI_MATCH(DMI_SYS_VENDOR, "IBM"), \
diff --git a/drivers/platform/x86/intel_oaktrail.c b/drivers/platform/x86/intel_oaktrail.c
index 6aa33c4a809f..5747f63c8d9f 100644
--- a/drivers/platform/x86/intel_oaktrail.c
+++ b/drivers/platform/x86/intel_oaktrail.c
@@ -299,7 +299,7 @@ static int dmi_check_cb(const struct dmi_system_id *id)
return 0;
}
-static struct dmi_system_id __initdata oaktrail_dmi_table[] = {
+static const struct dmi_system_id oaktrail_dmi_table[] __initconst = {
{
.ident = "OakTrail platform",
.matches = {
diff --git a/drivers/platform/x86/mlx-platform.c b/drivers/platform/x86/mlx-platform.c
index 8f98c211b440..4f3de2a8c4df 100644
--- a/drivers/platform/x86/mlx-platform.c
+++ b/drivers/platform/x86/mlx-platform.c
@@ -247,7 +247,7 @@ static int __init mlxplat_dmi_msn21xx_matched(const struct dmi_system_id *dmi)
return 1;
};
-static struct dmi_system_id mlxplat_dmi_table[] __initdata = {
+static const struct dmi_system_id mlxplat_dmi_table[] __initconst = {
{
.callback = mlxplat_dmi_default_matched,
.matches = {
diff --git a/drivers/platform/x86/msi-laptop.c b/drivers/platform/x86/msi-laptop.c
index 61b9014d2610..d5bfcc602090 100644
--- a/drivers/platform/x86/msi-laptop.c
+++ b/drivers/platform/x86/msi-laptop.c
@@ -605,7 +605,7 @@ static int dmi_check_cb(const struct dmi_system_id *dmi)
return 1;
}
-static struct dmi_system_id __initdata msi_dmi_table[] = {
+static const struct dmi_system_id msi_dmi_table[] __initconst = {
{
.ident = "MSI S270",
.matches = {
diff --git a/drivers/platform/x86/samsung-laptop.c b/drivers/platform/x86/samsung-laptop.c
index 0c703feaeb88..d3cb26f6df73 100644
--- a/drivers/platform/x86/samsung-laptop.c
+++ b/drivers/platform/x86/samsung-laptop.c
@@ -1567,7 +1567,7 @@ static int __init samsung_dmi_matched(const struct dmi_system_id *d)
return 0;
}
-static struct dmi_system_id __initdata samsung_dmi_table[] = {
+static const struct dmi_system_id samsung_dmi_table[] __initconst = {
{
.matches = {
DMI_MATCH(DMI_SYS_VENDOR,
diff --git a/drivers/platform/x86/samsung-q10.c b/drivers/platform/x86/samsung-q10.c
index e6aac725a0af..a2fb7fbc3273 100644
--- a/drivers/platform/x86/samsung-q10.c
+++ b/drivers/platform/x86/samsung-q10.c
@@ -95,7 +95,7 @@ static int __init dmi_check_callback(const struct dmi_system_id *id)
return 1;
}
-static struct dmi_system_id __initdata samsungq10_dmi_table[] = {
+static const struct dmi_system_id samsungq10_dmi_table[] __initconst = {
{
.ident = "Samsung Q10",
.matches = {
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
index bfae79534f44..a16cea2be9c3 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -4880,7 +4880,7 @@ static struct acpi_driver sony_pic_driver = {
.drv.pm = &sony_pic_pm,
};
-static struct dmi_system_id __initdata sonypi_dmi_table[] = {
+static const struct dmi_system_id sonypi_dmi_table[] __initconst = {
{
.ident = "Sony Vaio",
.matches = {
diff --git a/drivers/platform/x86/toshiba-wmi.c b/drivers/platform/x86/toshiba-wmi.c
index 440528676170..03d7620cd6d7 100644
--- a/drivers/platform/x86/toshiba-wmi.c
+++ b/drivers/platform/x86/toshiba-wmi.c
@@ -64,7 +64,7 @@ static void toshiba_wmi_notify(u32 value, void *context)
kfree(response.pointer);
}
-static struct dmi_system_id toshiba_wmi_dmi_table[] __initdata = {
+static const struct dmi_system_id toshiba_wmi_dmi_table[] __initconst = {
{
.ident = "Toshiba laptop",
.matches = {
diff --git a/drivers/pnp/pnpbios/core.c b/drivers/pnp/pnpbios/core.c
index 0ced908e7aa8..e681140b85d8 100644
--- a/drivers/pnp/pnpbios/core.c
+++ b/drivers/pnp/pnpbios/core.c
@@ -495,7 +495,7 @@ static int __init exploding_pnp_bios(const struct dmi_system_id *d)
return 0;
}
-static struct dmi_system_id pnpbios_dmi_table[] __initdata = {
+static const struct dmi_system_id pnpbios_dmi_table[] __initconst = {
{ /* PnPBIOS GPF on boot */
.callback = exploding_pnp_bios,
.ident = "Higraded P14H",
diff --git a/drivers/reset/Kconfig b/drivers/reset/Kconfig
index 52d5251660b9..e0c393214264 100644
--- a/drivers/reset/Kconfig
+++ b/drivers/reset/Kconfig
@@ -47,6 +47,12 @@ config RESET_IMX7
help
This enables the reset controller driver for i.MX7 SoCs.
+config RESET_LANTIQ
+ bool "Lantiq XWAY Reset Driver" if COMPILE_TEST
+ default SOC_TYPE_XWAY
+ help
+ This enables the reset controller driver for Lantiq / Intel XWAY SoCs.
+
config RESET_LPC18XX
bool "LPC18xx/43xx Reset Driver" if COMPILE_TEST
default ARCH_LPC18XX
diff --git a/drivers/reset/Makefile b/drivers/reset/Makefile
index b62783f50fe5..d368367110e5 100644
--- a/drivers/reset/Makefile
+++ b/drivers/reset/Makefile
@@ -7,6 +7,7 @@ obj-$(CONFIG_RESET_ATH79) += reset-ath79.o
obj-$(CONFIG_RESET_BERLIN) += reset-berlin.o
obj-$(CONFIG_RESET_HSDK_V1) += reset-hsdk-v1.o
obj-$(CONFIG_RESET_IMX7) += reset-imx7.o
+obj-$(CONFIG_RESET_LANTIQ) += reset-lantiq.o
obj-$(CONFIG_RESET_LPC18XX) += reset-lpc18xx.o
obj-$(CONFIG_RESET_MESON) += reset-meson.o
obj-$(CONFIG_RESET_OXNAS) += reset-oxnas.o
diff --git a/drivers/reset/reset-lantiq.c b/drivers/reset/reset-lantiq.c
new file mode 100644
index 000000000000..11a582e50d30
--- /dev/null
+++ b/drivers/reset/reset-lantiq.c
@@ -0,0 +1,212 @@
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ *
+ * Copyright (C) 2010 John Crispin <blogic@phrozen.org>
+ * Copyright (C) 2013-2015 Lantiq Beteiligungs-GmbH & Co.KG
+ * Copyright (C) 2016 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+ * Copyright (C) 2017 Hauke Mehrtens <hauke@hauke-m.de>
+ */
+
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/regmap.h>
+#include <linux/reset-controller.h>
+#include <linux/of_address.h>
+#include <linux/of_platform.h>
+#include <linux/platform_device.h>
+#include <linux/property.h>
+
+#define LANTIQ_RCU_RESET_TIMEOUT 10000
+
+struct lantiq_rcu_reset_priv {
+ struct reset_controller_dev rcdev;
+ struct device *dev;
+ struct regmap *regmap;
+ u32 reset_offset;
+ u32 status_offset;
+};
+
+static struct lantiq_rcu_reset_priv *to_lantiq_rcu_reset_priv(
+ struct reset_controller_dev *rcdev)
+{
+ return container_of(rcdev, struct lantiq_rcu_reset_priv, rcdev);
+}
+
+static int lantiq_rcu_reset_status(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+ struct lantiq_rcu_reset_priv *priv = to_lantiq_rcu_reset_priv(rcdev);
+ unsigned int status = (id >> 8) & 0x1f;
+ u32 val;
+ int ret;
+
+ ret = regmap_read(priv->regmap, priv->status_offset, &val);
+ if (ret)
+ return ret;
+
+ return !!(val & BIT(status));
+}
+
+static int lantiq_rcu_reset_status_timeout(struct reset_controller_dev *rcdev,
+ unsigned long id, bool assert)
+{
+ int ret;
+ int retry = LANTIQ_RCU_RESET_TIMEOUT;
+
+ do {
+ ret = lantiq_rcu_reset_status(rcdev, id);
+ if (ret < 0)
+ return ret;
+ if (ret == assert)
+ return 0;
+ usleep_range(20, 40);
+ } while (--retry);
+
+ return -ETIMEDOUT;
+}
+
+static int lantiq_rcu_reset_update(struct reset_controller_dev *rcdev,
+ unsigned long id, bool assert)
+{
+ struct lantiq_rcu_reset_priv *priv = to_lantiq_rcu_reset_priv(rcdev);
+ unsigned int set = id & 0x1f;
+ u32 val = assert ? BIT(set) : 0;
+ int ret;
+
+ ret = regmap_update_bits(priv->regmap, priv->reset_offset, BIT(set),
+ val);
+ if (ret) {
+ dev_err(priv->dev, "Failed to set reset bit %u\n", set);
+ return ret;
+ }
+
+
+ ret = lantiq_rcu_reset_status_timeout(rcdev, id, assert);
+ if (ret)
+ dev_err(priv->dev, "Failed to %s bit %u\n",
+ assert ? "assert" : "deassert", set);
+
+ return ret;
+}
+
+static int lantiq_rcu_reset_assert(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+ return lantiq_rcu_reset_update(rcdev, id, true);
+}
+
+static int lantiq_rcu_reset_deassert(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+ return lantiq_rcu_reset_update(rcdev, id, false);
+}
+
+static int lantiq_rcu_reset_reset(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+ int ret;
+
+ ret = lantiq_rcu_reset_assert(rcdev, id);
+ if (ret)
+ return ret;
+
+ return lantiq_rcu_reset_deassert(rcdev, id);
+}
+
+static const struct reset_control_ops lantiq_rcu_reset_ops = {
+ .assert = lantiq_rcu_reset_assert,
+ .deassert = lantiq_rcu_reset_deassert,
+ .status = lantiq_rcu_reset_status,
+ .reset = lantiq_rcu_reset_reset,
+};
+
+static int lantiq_rcu_reset_of_parse(struct platform_device *pdev,
+ struct lantiq_rcu_reset_priv *priv)
+{
+ struct device *dev = &pdev->dev;
+ const __be32 *offset;
+
+ priv->regmap = syscon_node_to_regmap(dev->of_node->parent);
+ if (IS_ERR(priv->regmap)) {
+ dev_err(&pdev->dev, "Failed to lookup RCU regmap\n");
+ return PTR_ERR(priv->regmap);
+ }
+
+ offset = of_get_address(dev->of_node, 0, NULL, NULL);
+ if (!offset) {
+ dev_err(&pdev->dev, "Failed to get RCU reset offset\n");
+ return -ENOENT;
+ }
+ priv->reset_offset = __be32_to_cpu(*offset);
+
+ offset = of_get_address(dev->of_node, 1, NULL, NULL);
+ if (!offset) {
+ dev_err(&pdev->dev, "Failed to get RCU status offset\n");
+ return -ENOENT;
+ }
+ priv->status_offset = __be32_to_cpu(*offset);
+
+ return 0;
+}
+
+static int lantiq_rcu_reset_xlate(struct reset_controller_dev *rcdev,
+ const struct of_phandle_args *reset_spec)
+{
+ unsigned int status, set;
+
+ set = reset_spec->args[0];
+ status = reset_spec->args[1];
+
+ if (set >= rcdev->nr_resets || status >= rcdev->nr_resets)
+ return -EINVAL;
+
+ return (status << 8) | set;
+}
+
+static int lantiq_rcu_reset_probe(struct platform_device *pdev)
+{
+ struct lantiq_rcu_reset_priv *priv;
+ int err;
+
+ priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ priv->dev = &pdev->dev;
+ platform_set_drvdata(pdev, priv);
+
+ err = lantiq_rcu_reset_of_parse(pdev, priv);
+ if (err)
+ return err;
+
+ priv->rcdev.ops = &lantiq_rcu_reset_ops;
+ priv->rcdev.owner = THIS_MODULE;
+ priv->rcdev.of_node = pdev->dev.of_node;
+ priv->rcdev.nr_resets = 32;
+ priv->rcdev.of_xlate = lantiq_rcu_reset_xlate;
+ priv->rcdev.of_reset_n_cells = 2;
+
+ return reset_controller_register(&priv->rcdev);
+}
+
+static const struct of_device_id lantiq_rcu_reset_dt_ids[] = {
+ { .compatible = "lantiq,danube-reset", },
+ { .compatible = "lantiq,xrx200-reset", },
+ { },
+};
+MODULE_DEVICE_TABLE(of, lantiq_rcu_reset_dt_ids);
+
+static struct platform_driver lantiq_rcu_reset_driver = {
+ .probe = lantiq_rcu_reset_probe,
+ .driver = {
+ .name = "lantiq-reset",
+ .of_match_table = lantiq_rcu_reset_dt_ids,
+ },
+};
+module_platform_driver(lantiq_rcu_reset_driver);
+
+MODULE_AUTHOR("Martin Blumenstingl <martin.blumenstingl@googlemail.com>");
+MODULE_DESCRIPTION("Lantiq XWAY RCU Reset Controller Driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 72419ac2c52a..e0e58f3b1420 100644
--- a/drivers/rtc/Kconfig
+++ b/drivers/rtc/Kconfig
@@ -227,14 +227,14 @@ config RTC_DRV_AS3722
will be called rtc-as3722.
config RTC_DRV_DS1307
- tristate "Dallas/Maxim DS1307/37/38/39/40, ST M41T00, EPSON RX-8025, ISL12057"
+ tristate "Dallas/Maxim DS1307/37/38/39/40/41, ST M41T00, EPSON RX-8025, ISL12057"
help
If you say yes here you get support for various compatible RTC
chips (often with battery backup) connected with I2C. This driver
- should handle DS1307, DS1337, DS1338, DS1339, DS1340, ST M41T00,
- EPSON RX-8025, Intersil ISL12057 and probably other chips. In some
- cases the RTC must already have been initialized (by manufacturing or
- a bootloader).
+ should handle DS1307, DS1337, DS1338, DS1339, DS1340, DS1341,
+ ST M41T00, EPSON RX-8025, Intersil ISL12057 and probably other chips.
+ In some cases the RTC must already have been initialized (by
+ manufacturing or a bootloader).
The first seven registers on these chips hold an RTC, and other
registers may add features such as NVRAM, a trickle charger for
@@ -371,11 +371,11 @@ config RTC_DRV_MAX77686
will be called rtc-max77686.
config RTC_DRV_RK808
- tristate "Rockchip RK808/RK818 RTC"
+ tristate "Rockchip RK805/RK808/RK818 RTC"
depends on MFD_RK808
help
If you say yes here you will get support for the
- RTC of RK808 and RK818 PMIC.
+ RTC of RK805, RK808 and RK818 PMIC.
This driver can also be built as a module. If so, the module
will be called rk808-rtc.
@@ -1765,6 +1765,14 @@ config RTC_DRV_CPCAP
Say y here for CPCAP rtc found on some Motorola phones
and tablets such as Droid 4.
+config RTC_DRV_RTD119X
+ bool "Realtek RTD129x RTC"
+ depends on ARCH_REALTEK || COMPILE_TEST
+ default ARCH_REALTEK
+ help
+ If you say yes here, you get support for the RTD1295 SoC
+ Real Time Clock.
+
comment "HID Sensor RTC drivers"
config RTC_DRV_HID_SENSOR_TIME
@@ -1780,5 +1788,13 @@ config RTC_DRV_HID_SENSOR_TIME
If this driver is compiled as a module, it will be named
rtc-hid-sensor-time.
+config RTC_DRV_GOLDFISH
+ tristate "Goldfish Real Time Clock"
+ depends on MIPS && (GOLDFISH || COMPILE_TEST)
+ help
+ Say yes to enable RTC driver for the Goldfish based virtual platform.
+
+ Goldfish is a code name for the virtual platform developed by Google
+ for Android emulation.
endif # RTC_CLASS
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index acd366b41c85..7230014c92af 100644
--- a/drivers/rtc/Makefile
+++ b/drivers/rtc/Makefile
@@ -131,6 +131,7 @@ obj-$(CONFIG_RTC_DRV_RP5C01) += rtc-rp5c01.o
obj-$(CONFIG_RTC_DRV_RS5C313) += rtc-rs5c313.o
obj-$(CONFIG_RTC_DRV_RS5C348) += rtc-rs5c348.o
obj-$(CONFIG_RTC_DRV_RS5C372) += rtc-rs5c372.o
+obj-$(CONFIG_RTC_DRV_RTD119X) += rtc-rtd119x.o
obj-$(CONFIG_RTC_DRV_RV3029C2) += rtc-rv3029c2.o
obj-$(CONFIG_RTC_DRV_RV8803) += rtc-rv8803.o
obj-$(CONFIG_RTC_DRV_RX4581) += rtc-rx4581.o
@@ -170,3 +171,4 @@ obj-$(CONFIG_RTC_DRV_WM8350) += rtc-wm8350.o
obj-$(CONFIG_RTC_DRV_X1205) += rtc-x1205.o
obj-$(CONFIG_RTC_DRV_XGENE) += rtc-xgene.o
obj-$(CONFIG_RTC_DRV_ZYNQMP) += rtc-zynqmp.o
+obj-$(CONFIG_RTC_DRV_GOLDFISH) += rtc-goldfish.o
diff --git a/drivers/rtc/rtc-dev.c b/drivers/rtc/rtc-dev.c
index 794bc4fa4937..00efe24a6063 100644
--- a/drivers/rtc/rtc-dev.c
+++ b/drivers/rtc/rtc-dev.c
@@ -24,28 +24,19 @@ static dev_t rtc_devt;
static int rtc_dev_open(struct inode *inode, struct file *file)
{
- int err;
struct rtc_device *rtc = container_of(inode->i_cdev,
struct rtc_device, char_dev);
- const struct rtc_class_ops *ops = rtc->ops;
if (test_and_set_bit_lock(RTC_DEV_BUSY, &rtc->flags))
return -EBUSY;
file->private_data = rtc;
- err = ops->open ? ops->open(rtc->dev.parent) : 0;
- if (err == 0) {
- spin_lock_irq(&rtc->irq_lock);
- rtc->irq_data = 0;
- spin_unlock_irq(&rtc->irq_lock);
-
- return 0;
- }
+ spin_lock_irq(&rtc->irq_lock);
+ rtc->irq_data = 0;
+ spin_unlock_irq(&rtc->irq_lock);
- /* something has gone wrong */
- clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags);
- return err;
+ return 0;
}
#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL
@@ -438,9 +429,6 @@ static int rtc_dev_release(struct inode *inode, struct file *file)
rtc_update_irq_enable(rtc, 0);
rtc_irq_set_state(rtc, NULL, 0);
- if (rtc->ops->release)
- rtc->ops->release(rtc->dev.parent);
-
clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags);
return 0;
}
diff --git a/drivers/rtc/rtc-ds1307.c b/drivers/rtc/rtc-ds1307.c
index 4b43aa62fbc7..e7d9215c9201 100644
--- a/drivers/rtc/rtc-ds1307.c
+++ b/drivers/rtc/rtc-ds1307.c
@@ -39,6 +39,7 @@ enum ds_type {
ds_1338,
ds_1339,
ds_1340,
+ ds_1341,
ds_1388,
ds_3231,
m41t0,
@@ -50,7 +51,6 @@ enum ds_type {
/* rs5c372 too? different address... */
};
-
/* RTC registers don't differ much, except for the century flag */
#define DS1307_REG_SECS 0x00 /* 00-59 */
# define DS1307_BIT_CH 0x80
@@ -113,11 +113,7 @@ enum ds_type {
# define RX8025_BIT_VDET 0x40
# define RX8025_BIT_XST 0x20
-
struct ds1307 {
- u8 offset; /* register's offset */
- u8 regs[11];
- u16 nvram_offset;
struct nvmem_config nvmem_cfg;
enum ds_type type;
unsigned long flags;
@@ -126,7 +122,6 @@ struct ds1307 {
struct device *dev;
struct regmap *regmap;
const char *name;
- int irq;
struct rtc_device *rtc;
#ifdef CONFIG_COMMON_CLK
struct clk_hw clks[2];
@@ -137,18 +132,47 @@ struct chip_desc {
unsigned alarm:1;
u16 nvram_offset;
u16 nvram_size;
+ u8 offset; /* register's offset */
u8 century_reg;
u8 century_enable_bit;
u8 century_bit;
+ u8 bbsqi_bit;
+ irq_handler_t irq_handler;
+ const struct rtc_class_ops *rtc_ops;
u16 trickle_charger_reg;
- u8 trickle_charger_setup;
- u8 (*do_trickle_setup)(struct ds1307 *, uint32_t,
+ u8 (*do_trickle_setup)(struct ds1307 *, u32,
bool);
};
-static u8 do_trickle_setup_ds1339(struct ds1307 *, uint32_t ohms, bool diode);
+static int ds1307_get_time(struct device *dev, struct rtc_time *t);
+static int ds1307_set_time(struct device *dev, struct rtc_time *t);
+static u8 do_trickle_setup_ds1339(struct ds1307 *, u32 ohms, bool diode);
+static irqreturn_t rx8130_irq(int irq, void *dev_id);
+static int rx8130_read_alarm(struct device *dev, struct rtc_wkalrm *t);
+static int rx8130_set_alarm(struct device *dev, struct rtc_wkalrm *t);
+static int rx8130_alarm_irq_enable(struct device *dev, unsigned int enabled);
+static irqreturn_t mcp794xx_irq(int irq, void *dev_id);
+static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t);
+static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t);
+static int mcp794xx_alarm_irq_enable(struct device *dev, unsigned int enabled);
-static struct chip_desc chips[last_ds_type] = {
+static const struct rtc_class_ops rx8130_rtc_ops = {
+ .read_time = ds1307_get_time,
+ .set_time = ds1307_set_time,
+ .read_alarm = rx8130_read_alarm,
+ .set_alarm = rx8130_set_alarm,
+ .alarm_irq_enable = rx8130_alarm_irq_enable,
+};
+
+static const struct rtc_class_ops mcp794xx_rtc_ops = {
+ .read_time = ds1307_get_time,
+ .set_time = ds1307_set_time,
+ .read_alarm = mcp794xx_read_alarm,
+ .set_alarm = mcp794xx_set_alarm,
+ .alarm_irq_enable = mcp794xx_alarm_irq_enable,
+};
+
+static const struct chip_desc chips[last_ds_type] = {
[ds_1307] = {
.nvram_offset = 8,
.nvram_size = 56,
@@ -170,6 +194,7 @@ static struct chip_desc chips[last_ds_type] = {
.alarm = 1,
.century_reg = DS1307_REG_MONTH,
.century_bit = DS1337_BIT_CENTURY,
+ .bbsqi_bit = DS1339_BIT_BBSQI,
.trickle_charger_reg = 0x10,
.do_trickle_setup = &do_trickle_setup_ds1339,
},
@@ -179,25 +204,36 @@ static struct chip_desc chips[last_ds_type] = {
.century_bit = DS1340_BIT_CENTURY,
.trickle_charger_reg = 0x08,
},
+ [ds_1341] = {
+ .century_reg = DS1307_REG_MONTH,
+ .century_bit = DS1337_BIT_CENTURY,
+ },
[ds_1388] = {
+ .offset = 1,
.trickle_charger_reg = 0x0a,
},
[ds_3231] = {
.alarm = 1,
.century_reg = DS1307_REG_MONTH,
.century_bit = DS1337_BIT_CENTURY,
+ .bbsqi_bit = DS3231_BIT_BBSQW,
},
[rx_8130] = {
.alarm = 1,
/* this is battery backed SRAM */
.nvram_offset = 0x20,
.nvram_size = 4, /* 32bit (4 word x 8 bit) */
+ .offset = 0x10,
+ .irq_handler = rx8130_irq,
+ .rtc_ops = &rx8130_rtc_ops,
},
[mcp794xx] = {
.alarm = 1,
/* this is battery backed SRAM */
.nvram_offset = 0x20,
.nvram_size = 0x40,
+ .irq_handler = mcp794xx_irq,
+ .rtc_ops = &mcp794xx_rtc_ops,
},
};
@@ -209,6 +245,7 @@ static const struct i2c_device_id ds1307_id[] = {
{ "ds1339", ds_1339 },
{ "ds1388", ds_1388 },
{ "ds1340", ds_1340 },
+ { "ds1341", ds_1341 },
{ "ds3231", ds_3231 },
{ "m41t0", m41t0 },
{ "m41t00", m41t00 },
@@ -253,6 +290,10 @@ static const struct of_device_id ds1307_of_match[] = {
.data = (void *)ds_1340
},
{
+ .compatible = "dallas,ds1341",
+ .data = (void *)ds_1341
+ },
+ {
.compatible = "maxim,ds3231",
.data = (void *)ds_3231
},
@@ -298,6 +339,7 @@ static const struct acpi_device_id ds1307_acpi_ids[] = {
{ .id = "DS1339", .driver_data = ds_1339 },
{ .id = "DS1388", .driver_data = ds_1388 },
{ .id = "DS1340", .driver_data = ds_1340 },
+ { .id = "DS1341", .driver_data = ds_1341 },
{ .id = "DS3231", .driver_data = ds_3231 },
{ .id = "M41T0", .driver_data = m41t0 },
{ .id = "M41T00", .driver_data = m41t00 },
@@ -352,34 +394,36 @@ static int ds1307_get_time(struct device *dev, struct rtc_time *t)
struct ds1307 *ds1307 = dev_get_drvdata(dev);
int tmp, ret;
const struct chip_desc *chip = &chips[ds1307->type];
+ u8 regs[7];
/* read the RTC date and time registers all at once */
- ret = regmap_bulk_read(ds1307->regmap, ds1307->offset, ds1307->regs, 7);
+ ret = regmap_bulk_read(ds1307->regmap, chip->offset, regs,
+ sizeof(regs));
if (ret) {
dev_err(dev, "%s error %d\n", "read", ret);
return ret;
}
- dev_dbg(dev, "%s: %7ph\n", "read", ds1307->regs);
+ dev_dbg(dev, "%s: %7ph\n", "read", regs);
/* if oscillator fail bit is set, no data can be trusted */
if (ds1307->type == m41t0 &&
- ds1307->regs[DS1307_REG_MIN] & M41T0_BIT_OF) {
+ regs[DS1307_REG_MIN] & M41T0_BIT_OF) {
dev_warn_once(dev, "oscillator failed, set time!\n");
return -EINVAL;
}
- t->tm_sec = bcd2bin(ds1307->regs[DS1307_REG_SECS] & 0x7f);
- t->tm_min = bcd2bin(ds1307->regs[DS1307_REG_MIN] & 0x7f);
- tmp = ds1307->regs[DS1307_REG_HOUR] & 0x3f;
+ t->tm_sec = bcd2bin(regs[DS1307_REG_SECS] & 0x7f);
+ t->tm_min = bcd2bin(regs[DS1307_REG_MIN] & 0x7f);
+ tmp = regs[DS1307_REG_HOUR] & 0x3f;
t->tm_hour = bcd2bin(tmp);
- t->tm_wday = bcd2bin(ds1307->regs[DS1307_REG_WDAY] & 0x07) - 1;
- t->tm_mday = bcd2bin(ds1307->regs[DS1307_REG_MDAY] & 0x3f);
- tmp = ds1307->regs[DS1307_REG_MONTH] & 0x1f;
+ t->tm_wday = bcd2bin(regs[DS1307_REG_WDAY] & 0x07) - 1;
+ t->tm_mday = bcd2bin(regs[DS1307_REG_MDAY] & 0x3f);
+ tmp = regs[DS1307_REG_MONTH] & 0x1f;
t->tm_mon = bcd2bin(tmp) - 1;
- t->tm_year = bcd2bin(ds1307->regs[DS1307_REG_YEAR]) + 100;
+ t->tm_year = bcd2bin(regs[DS1307_REG_YEAR]) + 100;
- if (ds1307->regs[chip->century_reg] & chip->century_bit &&
+ if (regs[chip->century_reg] & chip->century_bit &&
IS_ENABLED(CONFIG_RTC_DRV_DS1307_CENTURY))
t->tm_year += 100;
@@ -399,7 +443,7 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t)
const struct chip_desc *chip = &chips[ds1307->type];
int result;
int tmp;
- u8 *buf = ds1307->regs;
+ u8 regs[7];
dev_dbg(dev, "%s secs=%d, mins=%d, "
"hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n",
@@ -418,35 +462,36 @@ static int ds1307_set_time(struct device *dev, struct rtc_time *t)
return -EINVAL;
#endif
- buf[DS1307_REG_SECS] = bin2bcd(t->tm_sec);
- buf[DS1307_REG_MIN] = bin2bcd(t->tm_min);
- buf[DS1307_REG_HOUR] = bin2bcd(t->tm_hour);
- buf[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1);
- buf[DS1307_REG_MDAY] = bin2bcd(t->tm_mday);
- buf[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1);
+ regs[DS1307_REG_SECS] = bin2bcd(t->tm_sec);
+ regs[DS1307_REG_MIN] = bin2bcd(t->tm_min);
+ regs[DS1307_REG_HOUR] = bin2bcd(t->tm_hour);
+ regs[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1);
+ regs[DS1307_REG_MDAY] = bin2bcd(t->tm_mday);
+ regs[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1);
/* assume 20YY not 19YY */
tmp = t->tm_year - 100;
- buf[DS1307_REG_YEAR] = bin2bcd(tmp);
+ regs[DS1307_REG_YEAR] = bin2bcd(tmp);
if (chip->century_enable_bit)
- buf[chip->century_reg] |= chip->century_enable_bit;
+ regs[chip->century_reg] |= chip->century_enable_bit;
if (t->tm_year > 199 && chip->century_bit)
- buf[chip->century_reg] |= chip->century_bit;
+ regs[chip->century_reg] |= chip->century_bit;
if (ds1307->type == mcp794xx) {
/*
* these bits were cleared when preparing the date/time
* values and need to be set again before writing the
- * buffer out to the device.
+ * regsfer out to the device.
*/
- buf[DS1307_REG_SECS] |= MCP794XX_BIT_ST;
- buf[DS1307_REG_WDAY] |= MCP794XX_BIT_VBATEN;
+ regs[DS1307_REG_SECS] |= MCP794XX_BIT_ST;
+ regs[DS1307_REG_WDAY] |= MCP794XX_BIT_VBATEN;
}
- dev_dbg(dev, "%s: %7ph\n", "write", buf);
+ dev_dbg(dev, "%s: %7ph\n", "write", regs);
- result = regmap_bulk_write(ds1307->regmap, ds1307->offset, buf, 7);
+ result = regmap_bulk_write(ds1307->regmap, chip->offset, regs,
+ sizeof(regs));
if (result) {
dev_err(dev, "%s error %d\n", "write", result);
return result;
@@ -458,33 +503,34 @@ static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t)
{
struct ds1307 *ds1307 = dev_get_drvdata(dev);
int ret;
+ u8 regs[9];
if (!test_bit(HAS_ALARM, &ds1307->flags))
return -EINVAL;
/* read all ALARM1, ALARM2, and status registers at once */
ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS,
- ds1307->regs, 9);
+ regs, sizeof(regs));
if (ret) {
dev_err(dev, "%s error %d\n", "alarm read", ret);
return ret;
}
dev_dbg(dev, "%s: %4ph, %3ph, %2ph\n", "alarm read",
- &ds1307->regs[0], &ds1307->regs[4], &ds1307->regs[7]);
+ &regs[0], &regs[4], &regs[7]);
/*
* report alarm time (ALARM1); assume 24 hour and day-of-month modes,
* and that all four fields are checked matches
*/
- t->time.tm_sec = bcd2bin(ds1307->regs[0] & 0x7f);
- t->time.tm_min = bcd2bin(ds1307->regs[1] & 0x7f);
- t->time.tm_hour = bcd2bin(ds1307->regs[2] & 0x3f);
- t->time.tm_mday = bcd2bin(ds1307->regs[3] & 0x3f);
+ t->time.tm_sec = bcd2bin(regs[0] & 0x7f);
+ t->time.tm_min = bcd2bin(regs[1] & 0x7f);
+ t->time.tm_hour = bcd2bin(regs[2] & 0x3f);
+ t->time.tm_mday = bcd2bin(regs[3] & 0x3f);
/* ... and status */
- t->enabled = !!(ds1307->regs[7] & DS1337_BIT_A1IE);
- t->pending = !!(ds1307->regs[8] & DS1337_BIT_A1I);
+ t->enabled = !!(regs[7] & DS1337_BIT_A1IE);
+ t->pending = !!(regs[8] & DS1337_BIT_A1I);
dev_dbg(dev, "%s secs=%d, mins=%d, "
"hours=%d, mday=%d, enabled=%d, pending=%d\n",
@@ -498,7 +544,7 @@ static int ds1337_read_alarm(struct device *dev, struct rtc_wkalrm *t)
static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t)
{
struct ds1307 *ds1307 = dev_get_drvdata(dev);
- unsigned char *buf = ds1307->regs;
+ unsigned char regs[9];
u8 control, status;
int ret;
@@ -512,33 +558,35 @@ static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t)
t->enabled, t->pending);
/* read current status of both alarms and the chip */
- ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, buf, 9);
+ ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs,
+ sizeof(regs));
if (ret) {
dev_err(dev, "%s error %d\n", "alarm write", ret);
return ret;
}
- control = ds1307->regs[7];
- status = ds1307->regs[8];
+ control = regs[7];
+ status = regs[8];
dev_dbg(dev, "%s: %4ph, %3ph, %02x %02x\n", "alarm set (old status)",
- &ds1307->regs[0], &ds1307->regs[4], control, status);
+ &regs[0], &regs[4], control, status);
/* set ALARM1, using 24 hour and day-of-month modes */
- buf[0] = bin2bcd(t->time.tm_sec);
- buf[1] = bin2bcd(t->time.tm_min);
- buf[2] = bin2bcd(t->time.tm_hour);
- buf[3] = bin2bcd(t->time.tm_mday);
+ regs[0] = bin2bcd(t->time.tm_sec);
+ regs[1] = bin2bcd(t->time.tm_min);
+ regs[2] = bin2bcd(t->time.tm_hour);
+ regs[3] = bin2bcd(t->time.tm_mday);
/* set ALARM2 to non-garbage */
- buf[4] = 0;
- buf[5] = 0;
- buf[6] = 0;
+ regs[4] = 0;
+ regs[5] = 0;
+ regs[6] = 0;
/* disable alarms */
- buf[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE);
- buf[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I);
+ regs[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE);
+ regs[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I);
- ret = regmap_bulk_write(ds1307->regmap, DS1339_REG_ALARM1_SECS, buf, 9);
+ ret = regmap_bulk_write(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs,
+ sizeof(regs));
if (ret) {
dev_err(dev, "can't set alarm time\n");
return ret;
@@ -547,8 +595,8 @@ static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t)
/* optionally enable ALARM1 */
if (t->enabled) {
dev_dbg(dev, "alarm IRQ armed\n");
- buf[7] |= DS1337_BIT_A1IE; /* only ALARM1 is used */
- regmap_write(ds1307->regmap, DS1337_REG_CONTROL, buf[7]);
+ regs[7] |= DS1337_BIT_A1IE; /* only ALARM1 is used */
+ regmap_write(ds1307->regmap, DS1337_REG_CONTROL, regs[7]);
}
return 0;
@@ -584,11 +632,11 @@ static const struct rtc_class_ops ds13xx_rtc_ops = {
#define RX8130_REG_ALARM_HOUR 0x08
#define RX8130_REG_ALARM_WEEK_OR_DAY 0x09
#define RX8130_REG_EXTENSION 0x0c
-#define RX8130_REG_EXTENSION_WADA (1 << 3)
+#define RX8130_REG_EXTENSION_WADA BIT(3)
#define RX8130_REG_FLAG 0x0d
-#define RX8130_REG_FLAG_AF (1 << 3)
+#define RX8130_REG_FLAG_AF BIT(3)
#define RX8130_REG_CONTROL0 0x0e
-#define RX8130_REG_CONTROL0_AIE (1 << 3)
+#define RX8130_REG_CONTROL0_AIE BIT(3)
static irqreturn_t rx8130_irq(int irq, void *dev_id)
{
@@ -600,7 +648,8 @@ static irqreturn_t rx8130_irq(int irq, void *dev_id)
mutex_lock(lock);
/* Read control registers. */
- ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3);
+ ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
+ sizeof(ctl));
if (ret < 0)
goto out;
if (!(ctl[1] & RX8130_REG_FLAG_AF))
@@ -608,7 +657,8 @@ static irqreturn_t rx8130_irq(int irq, void *dev_id)
ctl[1] &= ~RX8130_REG_FLAG_AF;
ctl[2] &= ~RX8130_REG_CONTROL0_AIE;
- ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3);
+ ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
+ sizeof(ctl));
if (ret < 0)
goto out;
@@ -630,12 +680,14 @@ static int rx8130_read_alarm(struct device *dev, struct rtc_wkalrm *t)
return -EINVAL;
/* Read alarm registers. */
- ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, 3);
+ ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_ALARM_MIN, ald,
+ sizeof(ald));
if (ret < 0)
return ret;
/* Read control registers. */
- ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3);
+ ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
+ sizeof(ctl));
if (ret < 0)
return ret;
@@ -676,7 +728,8 @@ static int rx8130_set_alarm(struct device *dev, struct rtc_wkalrm *t)
t->enabled, t->pending);
/* Read control registers. */
- ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3);
+ ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
+ sizeof(ctl));
if (ret < 0)
return ret;
@@ -684,7 +737,8 @@ static int rx8130_set_alarm(struct device *dev, struct rtc_wkalrm *t)
ctl[1] |= RX8130_REG_FLAG_AF;
ctl[2] &= ~RX8130_REG_CONTROL0_AIE;
- ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3);
+ ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
+ sizeof(ctl));
if (ret < 0)
return ret;
@@ -693,7 +747,8 @@ static int rx8130_set_alarm(struct device *dev, struct rtc_wkalrm *t)
ald[1] = bin2bcd(t->time.tm_hour);
ald[2] = bin2bcd(t->time.tm_mday);
- ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, 3);
+ ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_ALARM_MIN, ald,
+ sizeof(ald));
if (ret < 0)
return ret;
@@ -702,7 +757,8 @@ static int rx8130_set_alarm(struct device *dev, struct rtc_wkalrm *t)
ctl[2] |= RX8130_REG_CONTROL0_AIE;
- return regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3);
+ return regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
+ sizeof(ctl));
}
static int rx8130_alarm_irq_enable(struct device *dev, unsigned int enabled)
@@ -725,14 +781,6 @@ static int rx8130_alarm_irq_enable(struct device *dev, unsigned int enabled)
return regmap_write(ds1307->regmap, RX8130_REG_CONTROL0, reg);
}
-static const struct rtc_class_ops rx8130_rtc_ops = {
- .read_time = ds1307_get_time,
- .set_time = ds1307_set_time,
- .read_alarm = rx8130_read_alarm,
- .set_alarm = rx8130_set_alarm,
- .alarm_irq_enable = rx8130_alarm_irq_enable,
-};
-
/*----------------------------------------------------------------------*/
/*
@@ -748,11 +796,11 @@ static const struct rtc_class_ops rx8130_rtc_ops = {
#define MCP794XX_REG_ALARM0_CTRL 0x0d
#define MCP794XX_REG_ALARM1_BASE 0x11
#define MCP794XX_REG_ALARM1_CTRL 0x14
-# define MCP794XX_BIT_ALMX_IF (1 << 3)
-# define MCP794XX_BIT_ALMX_C0 (1 << 4)
-# define MCP794XX_BIT_ALMX_C1 (1 << 5)
-# define MCP794XX_BIT_ALMX_C2 (1 << 6)
-# define MCP794XX_BIT_ALMX_POL (1 << 7)
+# define MCP794XX_BIT_ALMX_IF BIT(3)
+# define MCP794XX_BIT_ALMX_C0 BIT(4)
+# define MCP794XX_BIT_ALMX_C1 BIT(5)
+# define MCP794XX_BIT_ALMX_C2 BIT(6)
+# define MCP794XX_BIT_ALMX_POL BIT(7)
# define MCP794XX_MSK_ALMX_MATCH (MCP794XX_BIT_ALMX_C0 | \
MCP794XX_BIT_ALMX_C1 | \
MCP794XX_BIT_ALMX_C2)
@@ -793,37 +841,38 @@ out:
static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t)
{
struct ds1307 *ds1307 = dev_get_drvdata(dev);
- u8 *regs = ds1307->regs;
+ u8 regs[10];
int ret;
if (!test_bit(HAS_ALARM, &ds1307->flags))
return -EINVAL;
/* Read control and alarm 0 registers. */
- ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, 10);
+ ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs,
+ sizeof(regs));
if (ret)
return ret;
t->enabled = !!(regs[0] & MCP794XX_BIT_ALM0_EN);
/* Report alarm 0 time assuming 24-hour and day-of-month modes. */
- t->time.tm_sec = bcd2bin(ds1307->regs[3] & 0x7f);
- t->time.tm_min = bcd2bin(ds1307->regs[4] & 0x7f);
- t->time.tm_hour = bcd2bin(ds1307->regs[5] & 0x3f);
- t->time.tm_wday = bcd2bin(ds1307->regs[6] & 0x7) - 1;
- t->time.tm_mday = bcd2bin(ds1307->regs[7] & 0x3f);
- t->time.tm_mon = bcd2bin(ds1307->regs[8] & 0x1f) - 1;
+ t->time.tm_sec = bcd2bin(regs[3] & 0x7f);
+ t->time.tm_min = bcd2bin(regs[4] & 0x7f);
+ t->time.tm_hour = bcd2bin(regs[5] & 0x3f);
+ t->time.tm_wday = bcd2bin(regs[6] & 0x7) - 1;
+ t->time.tm_mday = bcd2bin(regs[7] & 0x3f);
+ t->time.tm_mon = bcd2bin(regs[8] & 0x1f) - 1;
t->time.tm_year = -1;
t->time.tm_yday = -1;
t->time.tm_isdst = -1;
dev_dbg(dev, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d "
- "enabled=%d polarity=%d irq=%d match=%d\n", __func__,
+ "enabled=%d polarity=%d irq=%d match=%lu\n", __func__,
t->time.tm_sec, t->time.tm_min, t->time.tm_hour,
t->time.tm_wday, t->time.tm_mday, t->time.tm_mon, t->enabled,
- !!(ds1307->regs[6] & MCP794XX_BIT_ALMX_POL),
- !!(ds1307->regs[6] & MCP794XX_BIT_ALMX_IF),
- (ds1307->regs[6] & MCP794XX_MSK_ALMX_MATCH) >> 4);
+ !!(regs[6] & MCP794XX_BIT_ALMX_POL),
+ !!(regs[6] & MCP794XX_BIT_ALMX_IF),
+ (regs[6] & MCP794XX_MSK_ALMX_MATCH) >> 4);
return 0;
}
@@ -831,7 +880,7 @@ static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t)
static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t)
{
struct ds1307 *ds1307 = dev_get_drvdata(dev);
- unsigned char *regs = ds1307->regs;
+ unsigned char regs[10];
int ret;
if (!test_bit(HAS_ALARM, &ds1307->flags))
@@ -844,7 +893,8 @@ static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t)
t->enabled, t->pending);
/* Read control and alarm 0 registers. */
- ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, 10);
+ ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs,
+ sizeof(regs));
if (ret)
return ret;
@@ -863,7 +913,8 @@ static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t)
/* Disable interrupt. We will not enable until completely programmed */
regs[0] &= ~MCP794XX_BIT_ALM0_EN;
- ret = regmap_bulk_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs, 10);
+ ret = regmap_bulk_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs,
+ sizeof(regs));
if (ret)
return ret;
@@ -885,22 +936,15 @@ static int mcp794xx_alarm_irq_enable(struct device *dev, unsigned int enabled)
enabled ? MCP794XX_BIT_ALM0_EN : 0);
}
-static const struct rtc_class_ops mcp794xx_rtc_ops = {
- .read_time = ds1307_get_time,
- .set_time = ds1307_set_time,
- .read_alarm = mcp794xx_read_alarm,
- .set_alarm = mcp794xx_set_alarm,
- .alarm_irq_enable = mcp794xx_alarm_irq_enable,
-};
-
/*----------------------------------------------------------------------*/
static int ds1307_nvram_read(void *priv, unsigned int offset, void *val,
size_t bytes)
{
struct ds1307 *ds1307 = priv;
+ const struct chip_desc *chip = &chips[ds1307->type];
- return regmap_bulk_read(ds1307->regmap, ds1307->nvram_offset + offset,
+ return regmap_bulk_read(ds1307->regmap, chip->nvram_offset + offset,
val, bytes);
}
@@ -908,15 +952,16 @@ static int ds1307_nvram_write(void *priv, unsigned int offset, void *val,
size_t bytes)
{
struct ds1307 *ds1307 = priv;
+ const struct chip_desc *chip = &chips[ds1307->type];
- return regmap_bulk_write(ds1307->regmap, ds1307->nvram_offset + offset,
+ return regmap_bulk_write(ds1307->regmap, chip->nvram_offset + offset,
val, bytes);
}
/*----------------------------------------------------------------------*/
static u8 do_trickle_setup_ds1339(struct ds1307 *ds1307,
- uint32_t ohms, bool diode)
+ u32 ohms, bool diode)
{
u8 setup = (diode) ? DS1307_TRICKLE_CHARGER_DIODE :
DS1307_TRICKLE_CHARGER_NO_DIODE;
@@ -939,23 +984,23 @@ static u8 do_trickle_setup_ds1339(struct ds1307 *ds1307,
return setup;
}
-static void ds1307_trickle_init(struct ds1307 *ds1307,
- struct chip_desc *chip)
+static u8 ds1307_trickle_init(struct ds1307 *ds1307,
+ const struct chip_desc *chip)
{
- uint32_t ohms = 0;
+ u32 ohms;
bool diode = true;
if (!chip->do_trickle_setup)
- goto out;
+ return 0;
+
if (device_property_read_u32(ds1307->dev, "trickle-resistor-ohms",
&ohms))
- goto out;
+ return 0;
+
if (device_property_read_bool(ds1307->dev, "trickle-diode-disable"))
diode = false;
- chip->trickle_charger_setup = chip->do_trickle_setup(ds1307,
- ohms, diode);
-out:
- return;
+
+ return chip->do_trickle_setup(ds1307, ohms, diode);
}
/*----------------------------------------------------------------------*/
@@ -995,7 +1040,7 @@ static int ds3231_hwmon_read_temp(struct device *dev, s32 *mC)
}
static ssize_t ds3231_hwmon_show_temp(struct device *dev,
- struct device_attribute *attr, char *buf)
+ struct device_attribute *attr, char *buf)
{
int ret;
s32 temp;
@@ -1006,8 +1051,8 @@ static ssize_t ds3231_hwmon_show_temp(struct device *dev,
return sprintf(buf, "%d\n", temp);
}
-static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, ds3231_hwmon_show_temp,
- NULL, 0);
+static SENSOR_DEVICE_ATTR(temp1_input, 0444, ds3231_hwmon_show_temp,
+ NULL, 0);
static struct attribute *ds3231_hwmon_attrs[] = {
&sensor_dev_attr_temp1_input.dev_attr.attr,
@@ -1023,7 +1068,8 @@ static void ds1307_hwmon_register(struct ds1307 *ds1307)
return;
dev = devm_hwmon_device_register_with_groups(ds1307->dev, ds1307->name,
- ds1307, ds3231_hwmon_groups);
+ ds1307,
+ ds3231_hwmon_groups);
if (IS_ERR(dev)) {
dev_warn(ds1307->dev, "unable to register hwmon device %ld\n",
PTR_ERR(dev));
@@ -1095,7 +1141,7 @@ static unsigned long ds3231_clk_sqw_recalc_rate(struct clk_hw *hw,
}
static long ds3231_clk_sqw_round_rate(struct clk_hw *hw, unsigned long rate,
- unsigned long *prate)
+ unsigned long *prate)
{
int i;
@@ -1108,7 +1154,7 @@ static long ds3231_clk_sqw_round_rate(struct clk_hw *hw, unsigned long rate,
}
static int ds3231_clk_sqw_set_rate(struct clk_hw *hw, unsigned long rate,
- unsigned long parent_rate)
+ unsigned long parent_rate)
{
struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw);
int control = 0;
@@ -1168,7 +1214,7 @@ static const struct clk_ops ds3231_clk_sqw_ops = {
};
static unsigned long ds3231_clk_32khz_recalc_rate(struct clk_hw *hw,
- unsigned long parent_rate)
+ unsigned long parent_rate)
{
return 32768;
}
@@ -1259,7 +1305,7 @@ static int ds3231_clks_register(struct ds1307 *ds1307)
/* optional override of the clockname */
of_property_read_string_index(node, "clock-output-names", i,
- &init.name);
+ &init.name);
ds1307->clks[i].init = &init;
onecell->clks[i] = devm_clk_register(ds1307->dev,
@@ -1309,22 +1355,14 @@ static int ds1307_probe(struct i2c_client *client,
struct ds1307 *ds1307;
int err = -ENODEV;
int tmp, wday;
- struct chip_desc *chip;
- bool want_irq = false;
+ const struct chip_desc *chip;
+ bool want_irq;
bool ds1307_can_wakeup_device = false;
- unsigned char *buf;
+ unsigned char regs[8];
struct ds1307_platform_data *pdata = dev_get_platdata(&client->dev);
struct rtc_time tm;
unsigned long timestamp;
-
- irq_handler_t irq_handler = ds1307_irq;
-
- static const int bbsqi_bitpos[] = {
- [ds_1337] = 0,
- [ds_1339] = DS1339_BIT_BBSQI,
- [ds_3231] = DS3231_BIT_BBSQW,
- };
- const struct rtc_class_ops *rtc_ops = &ds13xx_rtc_ops;
+ u8 trickle_charger_setup = 0;
ds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL);
if (!ds1307)
@@ -1333,7 +1371,6 @@ static int ds1307_probe(struct i2c_client *client,
dev_set_drvdata(&client->dev, ds1307);
ds1307->dev = &client->dev;
ds1307->name = client->name;
- ds1307->irq = client->irq;
ds1307->regmap = devm_regmap_init_i2c(client, &regmap_config);
if (IS_ERR(ds1307->regmap)) {
@@ -1361,23 +1398,22 @@ static int ds1307_probe(struct i2c_client *client,
ds1307->type = acpi_id->driver_data;
}
+ want_irq = client->irq > 0 && chip->alarm;
+
if (!pdata)
- ds1307_trickle_init(ds1307, chip);
+ trickle_charger_setup = ds1307_trickle_init(ds1307, chip);
else if (pdata->trickle_charger_setup)
- chip->trickle_charger_setup = pdata->trickle_charger_setup;
+ trickle_charger_setup = pdata->trickle_charger_setup;
- if (chip->trickle_charger_setup && chip->trickle_charger_reg) {
+ if (trickle_charger_setup && chip->trickle_charger_reg) {
+ trickle_charger_setup |= DS13XX_TRICKLE_CHARGER_MAGIC;
dev_dbg(ds1307->dev,
"writing trickle charger info 0x%x to 0x%x\n",
- DS13XX_TRICKLE_CHARGER_MAGIC | chip->trickle_charger_setup,
- chip->trickle_charger_reg);
+ trickle_charger_setup, chip->trickle_charger_reg);
regmap_write(ds1307->regmap, chip->trickle_charger_reg,
- DS13XX_TRICKLE_CHARGER_MAGIC |
- chip->trickle_charger_setup);
+ trickle_charger_setup);
}
- buf = ds1307->regs;
-
#ifdef CONFIG_OF
/*
* For devices with no IRQ directly connected to the SoC, the RTC chip
@@ -1387,31 +1423,27 @@ static int ds1307_probe(struct i2c_client *client,
* This will guarantee the 'wakealarm' sysfs entry is available on the device,
* if supported by the RTC.
*/
- if (of_property_read_bool(client->dev.of_node, "wakeup-source")) {
- ds1307_can_wakeup_device = true;
- }
- /* Intersil ISL12057 DT backward compatibility */
- if (of_property_read_bool(client->dev.of_node,
- "isil,irq2-can-wakeup-machine")) {
+ if (chip->alarm && of_property_read_bool(client->dev.of_node,
+ "wakeup-source"))
ds1307_can_wakeup_device = true;
- }
#endif
switch (ds1307->type) {
case ds_1337:
case ds_1339:
+ case ds_1341:
case ds_3231:
/* get registers that the "rtc" read below won't read... */
err = regmap_bulk_read(ds1307->regmap, DS1337_REG_CONTROL,
- buf, 2);
+ regs, 2);
if (err) {
dev_dbg(ds1307->dev, "read error %d\n", err);
goto exit;
}
/* oscillator off? turn it on, so clock can tick. */
- if (ds1307->regs[0] & DS1337_BIT_nEOSC)
- ds1307->regs[0] &= ~DS1337_BIT_nEOSC;
+ if (regs[0] & DS1337_BIT_nEOSC)
+ regs[0] &= ~DS1337_BIT_nEOSC;
/*
* Using IRQ or defined as wakeup-source?
@@ -1419,114 +1451,92 @@ static int ds1307_probe(struct i2c_client *client,
* For some variants, be sure alarms can trigger when we're
* running on Vbackup (BBSQI/BBSQW)
*/
- if (chip->alarm && (ds1307->irq > 0 ||
- ds1307_can_wakeup_device)) {
- ds1307->regs[0] |= DS1337_BIT_INTCN
- | bbsqi_bitpos[ds1307->type];
- ds1307->regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE);
-
- want_irq = true;
+ if (want_irq || ds1307_can_wakeup_device) {
+ regs[0] |= DS1337_BIT_INTCN | chip->bbsqi_bit;
+ regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE);
}
regmap_write(ds1307->regmap, DS1337_REG_CONTROL,
- ds1307->regs[0]);
+ regs[0]);
/* oscillator fault? clear flag, and warn */
- if (ds1307->regs[1] & DS1337_BIT_OSF) {
+ if (regs[1] & DS1337_BIT_OSF) {
regmap_write(ds1307->regmap, DS1337_REG_STATUS,
- ds1307->regs[1] & ~DS1337_BIT_OSF);
+ regs[1] & ~DS1337_BIT_OSF);
dev_warn(ds1307->dev, "SET TIME!\n");
}
break;
case rx_8025:
err = regmap_bulk_read(ds1307->regmap,
- RX8025_REG_CTRL1 << 4 | 0x08, buf, 2);
+ RX8025_REG_CTRL1 << 4 | 0x08, regs, 2);
if (err) {
dev_dbg(ds1307->dev, "read error %d\n", err);
goto exit;
}
/* oscillator off? turn it on, so clock can tick. */
- if (!(ds1307->regs[1] & RX8025_BIT_XST)) {
- ds1307->regs[1] |= RX8025_BIT_XST;
+ if (!(regs[1] & RX8025_BIT_XST)) {
+ regs[1] |= RX8025_BIT_XST;
regmap_write(ds1307->regmap,
RX8025_REG_CTRL2 << 4 | 0x08,
- ds1307->regs[1]);
+ regs[1]);
dev_warn(ds1307->dev,
"oscillator stop detected - SET TIME!\n");
}
- if (ds1307->regs[1] & RX8025_BIT_PON) {
- ds1307->regs[1] &= ~RX8025_BIT_PON;
+ if (regs[1] & RX8025_BIT_PON) {
+ regs[1] &= ~RX8025_BIT_PON;
regmap_write(ds1307->regmap,
RX8025_REG_CTRL2 << 4 | 0x08,
- ds1307->regs[1]);
+ regs[1]);
dev_warn(ds1307->dev, "power-on detected\n");
}
- if (ds1307->regs[1] & RX8025_BIT_VDET) {
- ds1307->regs[1] &= ~RX8025_BIT_VDET;
+ if (regs[1] & RX8025_BIT_VDET) {
+ regs[1] &= ~RX8025_BIT_VDET;
regmap_write(ds1307->regmap,
RX8025_REG_CTRL2 << 4 | 0x08,
- ds1307->regs[1]);
+ regs[1]);
dev_warn(ds1307->dev, "voltage drop detected\n");
}
/* make sure we are running in 24hour mode */
- if (!(ds1307->regs[0] & RX8025_BIT_2412)) {
+ if (!(regs[0] & RX8025_BIT_2412)) {
u8 hour;
/* switch to 24 hour mode */
regmap_write(ds1307->regmap,
RX8025_REG_CTRL1 << 4 | 0x08,
- ds1307->regs[0] | RX8025_BIT_2412);
+ regs[0] | RX8025_BIT_2412);
err = regmap_bulk_read(ds1307->regmap,
RX8025_REG_CTRL1 << 4 | 0x08,
- buf, 2);
+ regs, 2);
if (err) {
dev_dbg(ds1307->dev, "read error %d\n", err);
goto exit;
}
/* correct hour */
- hour = bcd2bin(ds1307->regs[DS1307_REG_HOUR]);
+ hour = bcd2bin(regs[DS1307_REG_HOUR]);
if (hour == 12)
hour = 0;
- if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
+ if (regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
hour += 12;
regmap_write(ds1307->regmap,
DS1307_REG_HOUR << 4 | 0x08, hour);
}
break;
- case rx_8130:
- ds1307->offset = 0x10; /* Seconds starts at 0x10 */
- rtc_ops = &rx8130_rtc_ops;
- if (chip->alarm && ds1307->irq > 0) {
- irq_handler = rx8130_irq;
- want_irq = true;
- }
- break;
- case ds_1388:
- ds1307->offset = 1; /* Seconds starts at 1 */
- break;
- case mcp794xx:
- rtc_ops = &mcp794xx_rtc_ops;
- if (chip->alarm && (ds1307->irq > 0 ||
- ds1307_can_wakeup_device)) {
- irq_handler = mcp794xx_irq;
- want_irq = true;
- }
- break;
default:
break;
}
read_rtc:
/* read RTC registers */
- err = regmap_bulk_read(ds1307->regmap, ds1307->offset, buf, 8);
+ err = regmap_bulk_read(ds1307->regmap, chip->offset, regs,
+ sizeof(regs));
if (err) {
dev_dbg(ds1307->dev, "read error %d\n", err);
goto exit;
@@ -1537,7 +1547,7 @@ read_rtc:
* specify the extra bits as must-be-zero, but there are
* still a few values that are clearly out-of-range.
*/
- tmp = ds1307->regs[DS1307_REG_SECS];
+ tmp = regs[DS1307_REG_SECS];
switch (ds1307->type) {
case ds_1307:
case m41t0:
@@ -1556,10 +1566,10 @@ read_rtc:
regmap_write(ds1307->regmap, DS1307_REG_SECS, 0);
/* oscillator fault? clear flag, and warn */
- if (ds1307->regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) {
+ if (regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) {
regmap_write(ds1307->regmap, DS1307_REG_CONTROL,
- ds1307->regs[DS1307_REG_CONTROL] &
- ~DS1338_BIT_OSF);
+ regs[DS1307_REG_CONTROL] &
+ ~DS1338_BIT_OSF);
dev_warn(ds1307->dev, "SET TIME!\n");
goto read_rtc;
}
@@ -1583,9 +1593,9 @@ read_rtc:
break;
case mcp794xx:
/* make sure that the backup battery is enabled */
- if (!(ds1307->regs[DS1307_REG_WDAY] & MCP794XX_BIT_VBATEN)) {
+ if (!(regs[DS1307_REG_WDAY] & MCP794XX_BIT_VBATEN)) {
regmap_write(ds1307->regmap, DS1307_REG_WDAY,
- ds1307->regs[DS1307_REG_WDAY] |
+ regs[DS1307_REG_WDAY] |
MCP794XX_BIT_VBATEN);
}
@@ -1602,7 +1612,7 @@ read_rtc:
break;
}
- tmp = ds1307->regs[DS1307_REG_HOUR];
+ tmp = regs[DS1307_REG_HOUR];
switch (ds1307->type) {
case ds_1340:
case m41t0:
@@ -1625,9 +1635,9 @@ read_rtc:
tmp = bcd2bin(tmp & 0x1f);
if (tmp == 12)
tmp = 0;
- if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
+ if (regs[DS1307_REG_HOUR] & DS1307_BIT_PM)
tmp += 12;
- regmap_write(ds1307->regmap, ds1307->offset + DS1307_REG_HOUR,
+ regmap_write(ds1307->regmap, chip->offset + DS1307_REG_HOUR,
bin2bcd(tmp));
}
@@ -1650,19 +1660,16 @@ read_rtc:
MCP794XX_REG_WEEKDAY_WDAY_MASK,
tm.tm_wday + 1);
- if (want_irq) {
+ if (want_irq || ds1307_can_wakeup_device) {
device_set_wakeup_capable(ds1307->dev, true);
set_bit(HAS_ALARM, &ds1307->flags);
}
ds1307->rtc = devm_rtc_allocate_device(ds1307->dev);
- if (IS_ERR(ds1307->rtc)) {
+ if (IS_ERR(ds1307->rtc))
return PTR_ERR(ds1307->rtc);
- }
- if (ds1307_can_wakeup_device && ds1307->irq <= 0) {
- /* Disable request for an IRQ */
- want_irq = false;
+ if (ds1307_can_wakeup_device && !want_irq) {
dev_info(ds1307->dev,
"'wakeup-source' is set, request for an IRQ is disabled!\n");
/* We cannot support UIE mode if we do not have an IRQ line */
@@ -1670,8 +1677,8 @@ read_rtc:
}
if (want_irq) {
- err = devm_request_threaded_irq(ds1307->dev,
- ds1307->irq, NULL, irq_handler,
+ err = devm_request_threaded_irq(ds1307->dev, client->irq, NULL,
+ chip->irq_handler ?: ds1307_irq,
IRQF_SHARED | IRQF_ONESHOT,
ds1307->name, ds1307);
if (err) {
@@ -1679,8 +1686,9 @@ read_rtc:
device_set_wakeup_capable(ds1307->dev, false);
clear_bit(HAS_ALARM, &ds1307->flags);
dev_err(ds1307->dev, "unable to request IRQ!\n");
- } else
+ } else {
dev_dbg(ds1307->dev, "got IRQ %d\n", client->irq);
+ }
}
if (chip->nvram_size) {
@@ -1691,13 +1699,12 @@ read_rtc:
ds1307->nvmem_cfg.reg_read = ds1307_nvram_read;
ds1307->nvmem_cfg.reg_write = ds1307_nvram_write;
ds1307->nvmem_cfg.priv = ds1307;
- ds1307->nvram_offset = chip->nvram_offset;
ds1307->rtc->nvmem_config = &ds1307->nvmem_cfg;
ds1307->rtc->nvram_old_abi = true;
}
- ds1307->rtc->ops = rtc_ops;
+ ds1307->rtc->ops = chip->rtc_ops ?: &ds13xx_rtc_ops;
err = rtc_register_device(ds1307->rtc);
if (err)
return err;
diff --git a/drivers/rtc/rtc-ds1672.c b/drivers/rtc/rtc-ds1672.c
index 7bf46bfe11a4..9caaccccaa57 100644
--- a/drivers/rtc/rtc-ds1672.c
+++ b/drivers/rtc/rtc-ds1672.c
@@ -190,7 +190,7 @@ static int ds1672_probe(struct i2c_client *client,
return 0;
}
-static struct i2c_device_id ds1672_id[] = {
+static const struct i2c_device_id ds1672_id[] = {
{ "ds1672", 0 },
{ }
};
diff --git a/drivers/rtc/rtc-em3027.c b/drivers/rtc/rtc-em3027.c
index 4f4930a2004c..b0ef8cfe742d 100644
--- a/drivers/rtc/rtc-em3027.c
+++ b/drivers/rtc/rtc-em3027.c
@@ -132,7 +132,7 @@ static int em3027_probe(struct i2c_client *client,
return 0;
}
-static struct i2c_device_id em3027_id[] = {
+static const struct i2c_device_id em3027_id[] = {
{ "em3027", 0 },
{ }
};
diff --git a/drivers/rtc/rtc-goldfish.c b/drivers/rtc/rtc-goldfish.c
new file mode 100644
index 000000000000..d67769265185
--- /dev/null
+++ b/drivers/rtc/rtc-goldfish.c
@@ -0,0 +1,237 @@
+/* drivers/rtc/rtc-goldfish.c
+ *
+ * Copyright (C) 2007 Google, Inc.
+ * Copyright (C) 2017 Imagination Technologies Ltd.
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <linux/rtc.h>
+#include <linux/io.h>
+
+#define TIMER_TIME_LOW 0x00 /* get low bits of current time */
+ /* and update TIMER_TIME_HIGH */
+#define TIMER_TIME_HIGH 0x04 /* get high bits of time at last */
+ /* TIMER_TIME_LOW read */
+#define TIMER_ALARM_LOW 0x08 /* set low bits of alarm and */
+ /* activate it */
+#define TIMER_ALARM_HIGH 0x0c /* set high bits of next alarm */
+#define TIMER_IRQ_ENABLED 0x10
+#define TIMER_CLEAR_ALARM 0x14
+#define TIMER_ALARM_STATUS 0x18
+#define TIMER_CLEAR_INTERRUPT 0x1c
+
+struct goldfish_rtc {
+ void __iomem *base;
+ int irq;
+ struct rtc_device *rtc;
+};
+
+static int goldfish_rtc_read_alarm(struct device *dev,
+ struct rtc_wkalrm *alrm)
+{
+ u64 rtc_alarm;
+ u64 rtc_alarm_low;
+ u64 rtc_alarm_high;
+ void __iomem *base;
+ struct goldfish_rtc *rtcdrv;
+
+ rtcdrv = dev_get_drvdata(dev);
+ base = rtcdrv->base;
+
+ rtc_alarm_low = readl(base + TIMER_ALARM_LOW);
+ rtc_alarm_high = readl(base + TIMER_ALARM_HIGH);
+ rtc_alarm = (rtc_alarm_high << 32) | rtc_alarm_low;
+
+ do_div(rtc_alarm, NSEC_PER_SEC);
+ memset(alrm, 0, sizeof(struct rtc_wkalrm));
+
+ rtc_time_to_tm(rtc_alarm, &alrm->time);
+
+ if (readl(base + TIMER_ALARM_STATUS))
+ alrm->enabled = 1;
+ else
+ alrm->enabled = 0;
+
+ return 0;
+}
+
+static int goldfish_rtc_set_alarm(struct device *dev,
+ struct rtc_wkalrm *alrm)
+{
+ struct goldfish_rtc *rtcdrv;
+ unsigned long rtc_alarm;
+ u64 rtc_alarm64;
+ u64 rtc_status_reg;
+ void __iomem *base;
+ int ret = 0;
+
+ rtcdrv = dev_get_drvdata(dev);
+ base = rtcdrv->base;
+
+ if (alrm->enabled) {
+ ret = rtc_tm_to_time(&alrm->time, &rtc_alarm);
+ if (ret != 0)
+ return ret;
+
+ rtc_alarm64 = rtc_alarm * NSEC_PER_SEC;
+ writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH);
+ writel(rtc_alarm64, base + TIMER_ALARM_LOW);
+ } else {
+ /*
+ * if this function was called with enabled=0
+ * then it could mean that the application is
+ * trying to cancel an ongoing alarm
+ */
+ rtc_status_reg = readl(base + TIMER_ALARM_STATUS);
+ if (rtc_status_reg)
+ writel(1, base + TIMER_CLEAR_ALARM);
+ }
+
+ return ret;
+}
+
+static int goldfish_rtc_alarm_irq_enable(struct device *dev,
+ unsigned int enabled)
+{
+ void __iomem *base;
+ struct goldfish_rtc *rtcdrv;
+
+ rtcdrv = dev_get_drvdata(dev);
+ base = rtcdrv->base;
+
+ if (enabled)
+ writel(1, base + TIMER_IRQ_ENABLED);
+ else
+ writel(0, base + TIMER_IRQ_ENABLED);
+
+ return 0;
+}
+
+static irqreturn_t goldfish_rtc_interrupt(int irq, void *dev_id)
+{
+ struct goldfish_rtc *rtcdrv = dev_id;
+ void __iomem *base = rtcdrv->base;
+
+ writel(1, base + TIMER_CLEAR_INTERRUPT);
+
+ rtc_update_irq(rtcdrv->rtc, 1, RTC_IRQF | RTC_AF);
+
+ return IRQ_HANDLED;
+}
+
+static int goldfish_rtc_read_time(struct device *dev, struct rtc_time *tm)
+{
+ struct goldfish_rtc *rtcdrv;
+ void __iomem *base;
+ u64 time_high;
+ u64 time_low;
+ u64 time;
+
+ rtcdrv = dev_get_drvdata(dev);
+ base = rtcdrv->base;
+
+ time_low = readl(base + TIMER_TIME_LOW);
+ time_high = readl(base + TIMER_TIME_HIGH);
+ time = (time_high << 32) | time_low;
+
+ do_div(time, NSEC_PER_SEC);
+
+ rtc_time_to_tm(time, tm);
+
+ return 0;
+}
+
+static int goldfish_rtc_set_time(struct device *dev, struct rtc_time *tm)
+{
+ struct goldfish_rtc *rtcdrv;
+ void __iomem *base;
+ unsigned long now;
+ u64 now64;
+ int ret;
+
+ rtcdrv = dev_get_drvdata(dev);
+ base = rtcdrv->base;
+
+ ret = rtc_tm_to_time(tm, &now);
+ if (ret == 0) {
+ now64 = now * NSEC_PER_SEC;
+ writel((now64 >> 32), base + TIMER_TIME_HIGH);
+ writel(now64, base + TIMER_TIME_LOW);
+ }
+
+ return ret;
+}
+
+static const struct rtc_class_ops goldfish_rtc_ops = {
+ .read_time = goldfish_rtc_read_time,
+ .set_time = goldfish_rtc_set_time,
+ .read_alarm = goldfish_rtc_read_alarm,
+ .set_alarm = goldfish_rtc_set_alarm,
+ .alarm_irq_enable = goldfish_rtc_alarm_irq_enable
+};
+
+static int goldfish_rtc_probe(struct platform_device *pdev)
+{
+ struct goldfish_rtc *rtcdrv;
+ struct resource *r;
+ int err;
+
+ rtcdrv = devm_kzalloc(&pdev->dev, sizeof(*rtcdrv), GFP_KERNEL);
+ if (!rtcdrv)
+ return -ENOMEM;
+
+ platform_set_drvdata(pdev, rtcdrv);
+
+ r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!r)
+ return -ENODEV;
+
+ rtcdrv->base = devm_ioremap_resource(&pdev->dev, r);
+ if (IS_ERR(rtcdrv->base))
+ return -ENODEV;
+
+ rtcdrv->irq = platform_get_irq(pdev, 0);
+ if (rtcdrv->irq < 0)
+ return -ENODEV;
+
+ rtcdrv->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
+ &goldfish_rtc_ops,
+ THIS_MODULE);
+ if (IS_ERR(rtcdrv->rtc))
+ return PTR_ERR(rtcdrv->rtc);
+
+ err = devm_request_irq(&pdev->dev, rtcdrv->irq,
+ goldfish_rtc_interrupt,
+ 0, pdev->name, rtcdrv);
+ if (err)
+ return err;
+
+ return 0;
+}
+
+static const struct of_device_id goldfish_rtc_of_match[] = {
+ { .compatible = "google,goldfish-rtc", },
+ {},
+};
+MODULE_DEVICE_TABLE(of, goldfish_rtc_of_match);
+
+static struct platform_driver goldfish_rtc = {
+ .probe = goldfish_rtc_probe,
+ .driver = {
+ .name = "goldfish_rtc",
+ .of_match_table = goldfish_rtc_of_match,
+ }
+};
+
+module_platform_driver(goldfish_rtc);
diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c
index 8940e9e43ea0..f4c070ea8384 100644
--- a/drivers/rtc/rtc-m41t80.c
+++ b/drivers/rtc/rtc-m41t80.c
@@ -440,28 +440,6 @@ static int m41t80_resume(struct device *dev)
static SIMPLE_DEV_PM_OPS(m41t80_pm, m41t80_suspend, m41t80_resume);
-static ssize_t flags_show(struct device *dev,
- struct device_attribute *attr, char *buf)
-{
- struct i2c_client *client = to_i2c_client(dev);
- int val;
-
- val = i2c_smbus_read_byte_data(client, M41T80_REG_FLAGS);
- if (val < 0)
- return val;
- return sprintf(buf, "%#x\n", val);
-}
-static DEVICE_ATTR_RO(flags);
-
-static struct attribute *attrs[] = {
- &dev_attr_flags.attr,
- NULL,
-};
-
-static struct attribute_group attr_group = {
- .attrs = attrs,
-};
-
#ifdef CONFIG_COMMON_CLK
#define sqw_to_m41t80_data(_hw) container_of(_hw, struct m41t80_data, sqw)
@@ -912,13 +890,6 @@ static struct notifier_block wdt_notifier = {
*****************************************************************************
*/
-static void m41t80_remove_sysfs_group(void *_dev)
-{
- struct device *dev = _dev;
-
- sysfs_remove_group(&dev->kobj, &attr_group);
-}
-
static int m41t80_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
@@ -927,6 +898,7 @@ static int m41t80_probe(struct i2c_client *client,
struct rtc_device *rtc = NULL;
struct rtc_time tm;
struct m41t80_data *m41t80_data = NULL;
+ bool wakeup_source = false;
if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK |
I2C_FUNC_SMBUS_BYTE_DATA)) {
@@ -947,6 +919,10 @@ static int m41t80_probe(struct i2c_client *client,
m41t80_data->features = id->driver_data;
i2c_set_clientdata(client, m41t80_data);
+#ifdef CONFIG_OF
+ wakeup_source = of_property_read_bool(client->dev.of_node,
+ "wakeup-source");
+#endif
if (client->irq > 0) {
rc = devm_request_threaded_irq(&client->dev, client->irq,
NULL, m41t80_handle_irq,
@@ -955,14 +931,16 @@ static int m41t80_probe(struct i2c_client *client,
if (rc) {
dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n");
client->irq = 0;
- } else {
- m41t80_rtc_ops.read_alarm = m41t80_read_alarm;
- m41t80_rtc_ops.set_alarm = m41t80_set_alarm;
- m41t80_rtc_ops.alarm_irq_enable = m41t80_alarm_irq_enable;
- /* Enable the wakealarm */
- device_init_wakeup(&client->dev, true);
+ wakeup_source = false;
}
}
+ if (client->irq > 0 || wakeup_source) {
+ m41t80_rtc_ops.read_alarm = m41t80_read_alarm;
+ m41t80_rtc_ops.set_alarm = m41t80_set_alarm;
+ m41t80_rtc_ops.alarm_irq_enable = m41t80_alarm_irq_enable;
+ /* Enable the wakealarm */
+ device_init_wakeup(&client->dev, true);
+ }
rtc = devm_rtc_device_register(&client->dev, client->name,
&m41t80_rtc_ops, THIS_MODULE);
@@ -970,6 +948,10 @@ static int m41t80_probe(struct i2c_client *client,
return PTR_ERR(rtc);
m41t80_data->rtc = rtc;
+ if (client->irq <= 0) {
+ /* We cannot support UIE mode if we do not have an IRQ line */
+ rtc->uie_unsupported = 1;
+ }
/* Make sure HT (Halt Update) bit is cleared */
rc = i2c_smbus_read_byte_data(client, M41T80_REG_ALARM_HOUR);
@@ -1004,21 +986,6 @@ static int m41t80_probe(struct i2c_client *client,
return rc;
}
- /* Export sysfs entries */
- rc = sysfs_create_group(&(&client->dev)->kobj, &attr_group);
- if (rc) {
- dev_err(&client->dev, "Failed to create sysfs group: %d\n", rc);
- return rc;
- }
-
- rc = devm_add_action_or_reset(&client->dev, m41t80_remove_sysfs_group,
- &client->dev);
- if (rc) {
- dev_err(&client->dev,
- "Failed to add sysfs cleanup action: %d\n", rc);
- return rc;
- }
-
#ifdef CONFIG_RTC_DRV_M41T80_WDT
if (m41t80_data->features & M41T80_FEATURE_HT) {
save_client = client;
diff --git a/drivers/rtc/rtc-max6900.c b/drivers/rtc/rtc-max6900.c
index 48b6b411f8b2..cbdc86a560ba 100644
--- a/drivers/rtc/rtc-max6900.c
+++ b/drivers/rtc/rtc-max6900.c
@@ -226,7 +226,7 @@ max6900_probe(struct i2c_client *client, const struct i2c_device_id *id)
return 0;
}
-static struct i2c_device_id max6900_id[] = {
+static const struct i2c_device_id max6900_id[] = {
{ "max6900", 0 },
{ }
};
diff --git a/drivers/rtc/rtc-max8925.c b/drivers/rtc/rtc-max8925.c
index 16d129a0bb3b..67d6fc2d23e6 100644
--- a/drivers/rtc/rtc-max8925.c
+++ b/drivers/rtc/rtc-max8925.c
@@ -234,8 +234,6 @@ static int max8925_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x77);
else
ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x0);
- if (ret < 0)
- goto out;
out:
return ret;
}
diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c
index 401f46d8f21b..bce427d202ee 100644
--- a/drivers/rtc/rtc-mxc.c
+++ b/drivers/rtc/rtc-mxc.c
@@ -238,26 +238,6 @@ static irqreturn_t mxc_rtc_interrupt(int irq, void *dev_id)
return IRQ_HANDLED;
}
-/*
- * Clear all interrupts and release the IRQ
- */
-static void mxc_rtc_release(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
- void __iomem *ioaddr = pdata->ioaddr;
-
- spin_lock_irq(&pdata->rtc->irq_lock);
-
- /* Disable all rtc interrupts */
- writew(0, ioaddr + RTC_RTCIENR);
-
- /* Clear all interrupt status */
- writew(0xffffffff, ioaddr + RTC_RTCISR);
-
- spin_unlock_irq(&pdata->rtc->irq_lock);
-}
-
static int mxc_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
{
mxc_rtc_irq_enable(dev, RTC_ALM_BIT, enabled);
@@ -343,7 +323,6 @@ static int mxc_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm)
/* RTC layer */
static const struct rtc_class_ops mxc_rtc_ops = {
- .release = mxc_rtc_release,
.read_time = mxc_rtc_read_time,
.set_mmss64 = mxc_rtc_set_mmss,
.read_alarm = mxc_rtc_read_alarm,
diff --git a/drivers/rtc/rtc-puv3.c b/drivers/rtc/rtc-puv3.c
index c0a6e638c672..9e83be32ff43 100644
--- a/drivers/rtc/rtc-puv3.c
+++ b/drivers/rtc/rtc-puv3.c
@@ -157,49 +157,7 @@ static int puv3_rtc_proc(struct device *dev, struct seq_file *seq)
return 0;
}
-static int puv3_rtc_open(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct rtc_device *rtc_dev = platform_get_drvdata(pdev);
- int ret;
-
- ret = request_irq(puv3_rtc_alarmno, puv3_rtc_alarmirq,
- 0, "pkunity-rtc alarm", rtc_dev);
-
- if (ret) {
- dev_err(dev, "IRQ%d error %d\n", puv3_rtc_alarmno, ret);
- return ret;
- }
-
- ret = request_irq(puv3_rtc_tickno, puv3_rtc_tickirq,
- 0, "pkunity-rtc tick", rtc_dev);
-
- if (ret) {
- dev_err(dev, "IRQ%d error %d\n", puv3_rtc_tickno, ret);
- goto tick_err;
- }
-
- return ret;
-
- tick_err:
- free_irq(puv3_rtc_alarmno, rtc_dev);
- return ret;
-}
-
-static void puv3_rtc_release(struct device *dev)
-{
- struct platform_device *pdev = to_platform_device(dev);
- struct rtc_device *rtc_dev = platform_get_drvdata(pdev);
-
- /* do not clear AIE here, it may be needed for wake */
- puv3_rtc_setpie(dev, 0);
- free_irq(puv3_rtc_alarmno, rtc_dev);
- free_irq(puv3_rtc_tickno, rtc_dev);
-}
-
static const struct rtc_class_ops puv3_rtcops = {
- .open = puv3_rtc_open,
- .release = puv3_rtc_release,
.read_time = puv3_rtc_gettime,
.set_time = puv3_rtc_settime,
.read_alarm = puv3_rtc_getalarm,
@@ -222,10 +180,6 @@ static void puv3_rtc_enable(struct device *dev, int en)
static int puv3_rtc_remove(struct platform_device *dev)
{
- struct rtc_device *rtc = platform_get_drvdata(dev);
-
- rtc_device_unregister(rtc);
-
puv3_rtc_setpie(&dev->dev, 0);
puv3_rtc_setaie(&dev->dev, 0);
@@ -259,6 +213,24 @@ static int puv3_rtc_probe(struct platform_device *pdev)
dev_dbg(&pdev->dev, "PKUnity_rtc: tick irq %d, alarm irq %d\n",
puv3_rtc_tickno, puv3_rtc_alarmno);
+ rtc = devm_rtc_allocate_device(&pdev->dev);
+ if (IS_ERR(rtc))
+ return PTR_ERR(rtc);
+
+ ret = devm_request_irq(&pdev->dev, puv3_rtc_alarmno, puv3_rtc_alarmirq,
+ 0, "pkunity-rtc alarm", rtc);
+ if (ret) {
+ dev_err(&pdev->dev, "IRQ%d error %d\n", puv3_rtc_alarmno, ret);
+ return ret;
+ }
+
+ ret = devm_request_irq(&pdev->dev, puv3_rtc_tickno, puv3_rtc_tickirq,
+ 0, "pkunity-rtc tick", rtc);
+ if (ret) {
+ dev_err(&pdev->dev, "IRQ%d error %d\n", puv3_rtc_tickno, ret);
+ return ret;
+ }
+
/* get the memory region */
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (res == NULL) {
@@ -278,12 +250,10 @@ static int puv3_rtc_probe(struct platform_device *pdev)
puv3_rtc_enable(&pdev->dev, 1);
/* register RTC and exit */
- rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops,
- THIS_MODULE);
-
- if (IS_ERR(rtc)) {
+ rtc->ops = &puv3_rtcops;
+ ret = rtc_register_device(rtc);
+ if (ret) {
dev_err(&pdev->dev, "cannot attach rtc\n");
- ret = PTR_ERR(rtc);
goto err_nortc;
}
diff --git a/drivers/rtc/rtc-pxa.c b/drivers/rtc/rtc-pxa.c
index fe4985b54608..47304f5664d8 100644
--- a/drivers/rtc/rtc-pxa.c
+++ b/drivers/rtc/rtc-pxa.c
@@ -348,7 +348,7 @@ static int __init pxa_rtc_probe(struct platform_device *pdev)
dev_err(dev, "No alarm IRQ resource defined\n");
return -ENXIO;
}
- pxa_rtc_open(dev);
+
pxa_rtc->base = devm_ioremap(dev, pxa_rtc->ress->start,
resource_size(pxa_rtc->ress));
if (!pxa_rtc->base) {
@@ -356,6 +356,8 @@ static int __init pxa_rtc_probe(struct platform_device *pdev)
return -ENOMEM;
}
+ pxa_rtc_open(dev);
+
sa1100_rtc->rcnr = pxa_rtc->base + 0x0;
sa1100_rtc->rtsr = pxa_rtc->base + 0x8;
sa1100_rtc->rtar = pxa_rtc->base + 0x4;
diff --git a/drivers/rtc/rtc-rtd119x.c b/drivers/rtc/rtc-rtd119x.c
new file mode 100644
index 000000000000..b233559d950b
--- /dev/null
+++ b/drivers/rtc/rtc-rtd119x.c
@@ -0,0 +1,242 @@
+/*
+ * Realtek RTD129x RTC
+ *
+ * Copyright (c) 2017 Andreas Färber
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <linux/clk.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+#include <linux/rtc.h>
+#include <linux/spinlock.h>
+
+#define RTD_RTCSEC 0x00
+#define RTD_RTCMIN 0x04
+#define RTD_RTCHR 0x08
+#define RTD_RTCDATE1 0x0c
+#define RTD_RTCDATE2 0x10
+#define RTD_RTCACR 0x28
+#define RTD_RTCEN 0x2c
+#define RTD_RTCCR 0x30
+
+#define RTD_RTCSEC_RTCSEC_MASK 0x7f
+
+#define RTD_RTCMIN_RTCMIN_MASK 0x3f
+
+#define RTD_RTCHR_RTCHR_MASK 0x1f
+
+#define RTD_RTCDATE1_RTCDATE1_MASK 0xff
+
+#define RTD_RTCDATE2_RTCDATE2_MASK 0x7f
+
+#define RTD_RTCACR_RTCPWR BIT(7)
+
+#define RTD_RTCEN_RTCEN_MASK 0xff
+
+#define RTD_RTCCR_RTCRST BIT(6)
+
+struct rtd119x_rtc {
+ void __iomem *base;
+ struct clk *clk;
+ struct rtc_device *rtcdev;
+ unsigned int base_year;
+};
+
+static inline int rtd119x_rtc_days_in_year(int year)
+{
+ return 365 + (is_leap_year(year) ? 1 : 0);
+}
+
+static void rtd119x_rtc_reset(struct device *dev)
+{
+ struct rtd119x_rtc *data = dev_get_drvdata(dev);
+ u32 val;
+
+ val = readl_relaxed(data->base + RTD_RTCCR);
+ val |= RTD_RTCCR_RTCRST;
+ writel_relaxed(val, data->base + RTD_RTCCR);
+
+ val &= ~RTD_RTCCR_RTCRST;
+ writel(val, data->base + RTD_RTCCR);
+}
+
+static void rtd119x_rtc_set_enabled(struct device *dev, bool enable)
+{
+ struct rtd119x_rtc *data = dev_get_drvdata(dev);
+ u32 val;
+
+ val = readl_relaxed(data->base + RTD_RTCEN);
+ if (enable) {
+ if ((val & RTD_RTCEN_RTCEN_MASK) == 0x5a)
+ return;
+ writel_relaxed(0x5a, data->base + RTD_RTCEN);
+ } else {
+ writel_relaxed(0, data->base + RTD_RTCEN);
+ }
+}
+
+static int rtd119x_rtc_read_time(struct device *dev, struct rtc_time *tm)
+{
+ struct rtd119x_rtc *data = dev_get_drvdata(dev);
+ s32 day;
+ u32 sec;
+ unsigned int year;
+ int tries = 0;
+
+ while (true) {
+ tm->tm_sec = (readl_relaxed(data->base + RTD_RTCSEC) & RTD_RTCSEC_RTCSEC_MASK) >> 1;
+ tm->tm_min = readl_relaxed(data->base + RTD_RTCMIN) & RTD_RTCMIN_RTCMIN_MASK;
+ tm->tm_hour = readl_relaxed(data->base + RTD_RTCHR) & RTD_RTCHR_RTCHR_MASK;
+ day = readl_relaxed(data->base + RTD_RTCDATE1) & RTD_RTCDATE1_RTCDATE1_MASK;
+ day |= (readl_relaxed(data->base + RTD_RTCDATE2) & RTD_RTCDATE2_RTCDATE2_MASK) << 8;
+ sec = (readl_relaxed(data->base + RTD_RTCSEC) & RTD_RTCSEC_RTCSEC_MASK) >> 1;
+ tries++;
+
+ if (sec == tm->tm_sec)
+ break;
+
+ if (tries >= 3)
+ return -EINVAL;
+ }
+ if (tries > 1)
+ dev_dbg(dev, "%s: needed %i tries\n", __func__, tries);
+
+ year = data->base_year;
+ while (day >= rtd119x_rtc_days_in_year(year)) {
+ day -= rtd119x_rtc_days_in_year(year);
+ year++;
+ }
+ tm->tm_year = year - 1900;
+ tm->tm_yday = day;
+
+ tm->tm_mon = 0;
+ while (day >= rtc_month_days(tm->tm_mon, year)) {
+ day -= rtc_month_days(tm->tm_mon, year);
+ tm->tm_mon++;
+ }
+ tm->tm_mday = day + 1;
+
+ return 0;
+}
+
+static int rtd119x_rtc_set_time(struct device *dev, struct rtc_time *tm)
+{
+ struct rtd119x_rtc *data = dev_get_drvdata(dev);
+ unsigned int day;
+ int i;
+
+ if (1900 + tm->tm_year < data->base_year)
+ return -EINVAL;
+
+ day = 0;
+ for (i = data->base_year; i < 1900 + tm->tm_year; i++)
+ day += rtd119x_rtc_days_in_year(i);
+
+ day += tm->tm_yday;
+ if (day > 0x7fff)
+ return -EINVAL;
+
+ rtd119x_rtc_set_enabled(dev, false);
+
+ writel_relaxed((tm->tm_sec << 1) & RTD_RTCSEC_RTCSEC_MASK, data->base + RTD_RTCSEC);
+ writel_relaxed(tm->tm_min & RTD_RTCMIN_RTCMIN_MASK, data->base + RTD_RTCMIN);
+ writel_relaxed(tm->tm_hour & RTD_RTCHR_RTCHR_MASK, data->base + RTD_RTCHR);
+ writel_relaxed(day & RTD_RTCDATE1_RTCDATE1_MASK, data->base + RTD_RTCDATE1);
+ writel_relaxed((day >> 8) & RTD_RTCDATE2_RTCDATE2_MASK, data->base + RTD_RTCDATE2);
+
+ rtd119x_rtc_set_enabled(dev, true);
+
+ return 0;
+}
+
+static const struct rtc_class_ops rtd119x_rtc_ops = {
+ .read_time = rtd119x_rtc_read_time,
+ .set_time = rtd119x_rtc_set_time,
+};
+
+static const struct of_device_id rtd119x_rtc_dt_ids[] = {
+ { .compatible = "realtek,rtd1295-rtc" },
+ { }
+};
+
+static int rtd119x_rtc_probe(struct platform_device *pdev)
+{
+ struct rtd119x_rtc *data;
+ struct resource *res;
+ u32 val;
+ int ret;
+
+ data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
+
+ platform_set_drvdata(pdev, data);
+ data->base_year = 2014;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ data->base = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(data->base))
+ return PTR_ERR(data->base);
+
+ data->clk = of_clk_get(pdev->dev.of_node, 0);
+ if (IS_ERR(data->clk))
+ return PTR_ERR(data->clk);
+
+ ret = clk_prepare_enable(data->clk);
+ if (ret) {
+ clk_put(data->clk);
+ return ret;
+ }
+
+ val = readl_relaxed(data->base + RTD_RTCACR);
+ if (!(val & RTD_RTCACR_RTCPWR)) {
+ writel_relaxed(RTD_RTCACR_RTCPWR, data->base + RTD_RTCACR);
+
+ rtd119x_rtc_reset(&pdev->dev);
+
+ writel_relaxed(0, data->base + RTD_RTCMIN);
+ writel_relaxed(0, data->base + RTD_RTCHR);
+ writel_relaxed(0, data->base + RTD_RTCDATE1);
+ writel_relaxed(0, data->base + RTD_RTCDATE2);
+ }
+
+ rtd119x_rtc_set_enabled(&pdev->dev, true);
+
+ data->rtcdev = devm_rtc_device_register(&pdev->dev, "rtc",
+ &rtd119x_rtc_ops, THIS_MODULE);
+ if (IS_ERR(data->rtcdev)) {
+ dev_err(&pdev->dev, "failed to register rtc device");
+ clk_disable_unprepare(data->clk);
+ clk_put(data->clk);
+ return PTR_ERR(data->rtcdev);
+ }
+
+ return 0;
+}
+
+static int rtd119x_rtc_remove(struct platform_device *pdev)
+{
+ struct rtd119x_rtc *data = platform_get_drvdata(pdev);
+
+ rtd119x_rtc_set_enabled(&pdev->dev, false);
+
+ clk_disable_unprepare(data->clk);
+ clk_put(data->clk);
+
+ return 0;
+}
+
+static struct platform_driver rtd119x_rtc_driver = {
+ .probe = rtd119x_rtc_probe,
+ .remove = rtd119x_rtc_remove,
+ .driver = {
+ .name = "rtd1295-rtc",
+ .of_match_table = rtd119x_rtc_dt_ids,
+ },
+};
+builtin_platform_driver(rtd119x_rtc_driver);
diff --git a/drivers/rtc/rtc-rv3029c2.c b/drivers/rtc/rtc-rv3029c2.c
index 85fa1da03762..aa09771de04f 100644
--- a/drivers/rtc/rtc-rv3029c2.c
+++ b/drivers/rtc/rtc-rv3029c2.c
@@ -868,7 +868,7 @@ static int rv3029_i2c_probe(struct i2c_client *client,
return rv3029_probe(&client->dev, regmap, client->irq, client->name);
}
-static struct i2c_device_id rv3029_id[] = {
+static const struct i2c_device_id rv3029_id[] = {
{ "rv3029", 0 },
{ "rv3029c2", 0 },
{ }
diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c
index 449820eeefe8..7067bca5c20d 100644
--- a/drivers/rtc/rtc-s35390a.c
+++ b/drivers/rtc/rtc-s35390a.c
@@ -106,33 +106,12 @@ static int s35390a_get_reg(struct s35390a *s35390a, int reg, char *buf, int len)
return 0;
}
-/*
- * Returns <0 on error, 0 if rtc is setup fine and 1 if the chip was reset.
- * To keep the information if an irq is pending, pass the value read from
- * STATUS1 to the caller.
- */
-static int s35390a_reset(struct s35390a *s35390a, char *status1)
+static int s35390a_init(struct s35390a *s35390a)
{
char buf;
int ret;
unsigned initcount = 0;
- ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, status1, 1);
- if (ret < 0)
- return ret;
-
- if (*status1 & S35390A_FLAG_POC)
- /*
- * Do not communicate for 0.5 seconds since the power-on
- * detection circuit is in operation.
- */
- msleep(500);
- else if (!(*status1 & S35390A_FLAG_BLD))
- /*
- * If both POC and BLD are unset everything is fine.
- */
- return 0;
-
/*
* At least one of POC and BLD are set, so reinitialise chip. Keeping
* this information in the hardware to know later that the time isn't
@@ -142,7 +121,6 @@ static int s35390a_reset(struct s35390a *s35390a, char *status1)
* The 24H bit is kept over reset, so set it already here.
*/
initialize:
- *status1 = S35390A_FLAG_24H;
buf = S35390A_FLAG_RESET | S35390A_FLAG_24H;
ret = s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1);
@@ -165,6 +143,34 @@ initialize:
return 1;
}
+/*
+ * Returns <0 on error, 0 if rtc is setup fine and 1 if the chip was reset.
+ * To keep the information if an irq is pending, pass the value read from
+ * STATUS1 to the caller.
+ */
+static int s35390a_read_status(struct s35390a *s35390a, char *status1)
+{
+ int ret;
+
+ ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, status1, 1);
+ if (ret < 0)
+ return ret;
+
+ if (*status1 & S35390A_FLAG_POC) {
+ /*
+ * Do not communicate for 0.5 seconds since the power-on
+ * detection circuit is in operation.
+ */
+ msleep(500);
+ return 1;
+ } else if (*status1 & S35390A_FLAG_BLD)
+ return 1;
+ /*
+ * If both POC and BLD are unset everything is fine.
+ */
+ return 0;
+}
+
static int s35390a_disable_test_mode(struct s35390a *s35390a)
{
char buf[1];
@@ -208,13 +214,16 @@ static int s35390a_set_datetime(struct i2c_client *client, struct rtc_time *tm)
{
struct s35390a *s35390a = i2c_get_clientdata(client);
int i, err;
- char buf[7];
+ char buf[7], status;
dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d mday=%d, "
"mon=%d, year=%d, wday=%d\n", __func__, tm->tm_sec,
tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year,
tm->tm_wday);
+ if (s35390a_read_status(s35390a, &status) == 1)
+ s35390a_init(s35390a);
+
buf[S35390A_BYTE_YEAR] = bin2bcd(tm->tm_year - 100);
buf[S35390A_BYTE_MONTH] = bin2bcd(tm->tm_mon + 1);
buf[S35390A_BYTE_DAY] = bin2bcd(tm->tm_mday);
@@ -235,9 +244,12 @@ static int s35390a_set_datetime(struct i2c_client *client, struct rtc_time *tm)
static int s35390a_get_datetime(struct i2c_client *client, struct rtc_time *tm)
{
struct s35390a *s35390a = i2c_get_clientdata(client);
- char buf[7];
+ char buf[7], status;
int i, err;
+ if (s35390a_read_status(s35390a, &status) == 1)
+ return -EINVAL;
+
err = s35390a_get_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf));
if (err < 0)
return err;
@@ -392,12 +404,42 @@ static int s35390a_rtc_set_time(struct device *dev, struct rtc_time *tm)
return s35390a_set_datetime(to_i2c_client(dev), tm);
}
+static int s35390a_rtc_ioctl(struct device *dev, unsigned int cmd,
+ unsigned long arg)
+{
+ struct i2c_client *client = to_i2c_client(dev);
+ struct s35390a *s35390a = i2c_get_clientdata(client);
+ char sts;
+ int err;
+
+ switch (cmd) {
+ case RTC_VL_READ:
+ /* s35390a_reset set lowvoltage flag and init RTC if needed */
+ err = s35390a_read_status(s35390a, &sts);
+ if (err < 0)
+ return err;
+ if (copy_to_user((void __user *)arg, &err, sizeof(int)))
+ return -EFAULT;
+ break;
+ case RTC_VL_CLR:
+ /* update flag and clear register */
+ err = s35390a_init(s35390a);
+ if (err < 0)
+ return err;
+ break;
+ default:
+ return -ENOIOCTLCMD;
+ }
+
+ return 0;
+}
+
static const struct rtc_class_ops s35390a_rtc_ops = {
.read_time = s35390a_rtc_read_time,
.set_time = s35390a_rtc_set_time,
.set_alarm = s35390a_rtc_set_alarm,
.read_alarm = s35390a_rtc_read_alarm,
-
+ .ioctl = s35390a_rtc_ioctl,
};
static struct i2c_driver s35390a_driver;
@@ -405,7 +447,7 @@ static struct i2c_driver s35390a_driver;
static int s35390a_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
- int err, err_reset;
+ int err, err_read;
unsigned int i;
struct s35390a *s35390a;
struct rtc_time tm;
@@ -438,9 +480,9 @@ static int s35390a_probe(struct i2c_client *client,
}
}
- err_reset = s35390a_reset(s35390a, &status1);
- if (err_reset < 0) {
- err = err_reset;
+ err_read = s35390a_read_status(s35390a, &status1);
+ if (err_read < 0) {
+ err = err_read;
dev_err(&client->dev, "error resetting chip\n");
goto exit_dummy;
}
@@ -466,7 +508,7 @@ static int s35390a_probe(struct i2c_client *client,
}
}
- if (err_reset > 0 || s35390a_get_datetime(client, &tm) < 0)
+ if (err_read > 0 || s35390a_get_datetime(client, &tm) < 0)
dev_warn(&client->dev, "clock needs to be set\n");
device_set_wakeup_capable(&client->dev, 1);
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c
index c2187bf6c7e4..ed71d1113627 100644
--- a/drivers/rtc/rtc-sa1100.c
+++ b/drivers/rtc/rtc-sa1100.c
@@ -95,46 +95,6 @@ static irqreturn_t sa1100_rtc_interrupt(int irq, void *dev_id)
return IRQ_HANDLED;
}
-static int sa1100_rtc_open(struct device *dev)
-{
- struct sa1100_rtc *info = dev_get_drvdata(dev);
- struct rtc_device *rtc = info->rtc;
- int ret;
-
- ret = request_irq(info->irq_1hz, sa1100_rtc_interrupt, 0, "rtc 1Hz", dev);
- if (ret) {
- dev_err(dev, "IRQ %d already in use.\n", info->irq_1hz);
- goto fail_ui;
- }
- ret = request_irq(info->irq_alarm, sa1100_rtc_interrupt, 0, "rtc Alrm", dev);
- if (ret) {
- dev_err(dev, "IRQ %d already in use.\n", info->irq_alarm);
- goto fail_ai;
- }
- rtc->max_user_freq = RTC_FREQ;
- rtc_irq_set_freq(rtc, NULL, RTC_FREQ);
-
- return 0;
-
- fail_ai:
- free_irq(info->irq_1hz, dev);
- fail_ui:
- clk_disable_unprepare(info->clk);
- return ret;
-}
-
-static void sa1100_rtc_release(struct device *dev)
-{
- struct sa1100_rtc *info = dev_get_drvdata(dev);
-
- spin_lock_irq(&info->lock);
- writel_relaxed(0, info->rtsr);
- spin_unlock_irq(&info->lock);
-
- free_irq(info->irq_alarm, dev);
- free_irq(info->irq_1hz, dev);
-}
-
static int sa1100_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)
{
u32 rtsr;
@@ -216,8 +176,6 @@ static int sa1100_rtc_proc(struct device *dev, struct seq_file *seq)
}
static const struct rtc_class_ops sa1100_rtc_ops = {
- .open = sa1100_rtc_open,
- .release = sa1100_rtc_release,
.read_time = sa1100_rtc_read_time,
.set_time = sa1100_rtc_set_time,
.read_alarm = sa1100_rtc_read_alarm,
@@ -265,6 +223,9 @@ int sa1100_rtc_init(struct platform_device *pdev, struct sa1100_rtc *info)
}
info->rtc = rtc;
+ rtc->max_user_freq = RTC_FREQ;
+ rtc_irq_set_freq(rtc, NULL, RTC_FREQ);
+
/* Fix for a nasty initialization problem the in SA11xx RTSR register.
* See also the comments in sa1100_rtc_interrupt().
*
@@ -299,6 +260,7 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
struct resource *iores;
void __iomem *base;
int irq_1hz, irq_alarm;
+ int ret;
irq_1hz = platform_get_irq_byname(pdev, "rtc 1Hz");
irq_alarm = platform_get_irq_byname(pdev, "rtc alarm");
@@ -311,6 +273,19 @@ static int sa1100_rtc_probe(struct platform_device *pdev)
info->irq_1hz = irq_1hz;
info->irq_alarm = irq_alarm;
+ ret = devm_request_irq(&pdev->dev, irq_1hz, sa1100_rtc_interrupt, 0,
+ "rtc 1Hz", &pdev->dev);
+ if (ret) {
+ dev_err(&pdev->dev, "IRQ %d already in use.\n", irq_1hz);
+ return ret;
+ }
+ ret = devm_request_irq(&pdev->dev, irq_alarm, sa1100_rtc_interrupt, 0,
+ "rtc Alrm", &pdev->dev);
+ if (ret) {
+ dev_err(&pdev->dev, "IRQ %d already in use.\n", irq_alarm);
+ return ret;
+ }
+
iores = platform_get_resource(pdev, IORESOURCE_MEM, 0);
base = devm_ioremap_resource(&pdev->dev, iores);
if (IS_ERR(base))
@@ -339,8 +314,12 @@ static int sa1100_rtc_remove(struct platform_device *pdev)
{
struct sa1100_rtc *info = platform_get_drvdata(pdev);
- if (info)
+ if (info) {
+ spin_lock_irq(&info->lock);
+ writel_relaxed(0, info->rtsr);
+ spin_unlock_irq(&info->lock);
clk_disable_unprepare(info->clk);
+ }
return 0;
}
diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c
index 39cbc1238b92..3d2216ccd860 100644
--- a/drivers/rtc/rtc-sun6i.c
+++ b/drivers/rtc/rtc-sun6i.c
@@ -73,6 +73,9 @@
#define SUN6I_ALARM_CONFIG 0x0050
#define SUN6I_ALARM_CONFIG_WAKEUP BIT(0)
+#define SUN6I_LOSC_OUT_GATING 0x0060
+#define SUN6I_LOSC_OUT_GATING_EN BIT(0)
+
/*
* Get date values
*/
@@ -125,6 +128,7 @@ struct sun6i_rtc_dev {
struct clk_hw hw;
struct clk_hw *int_osc;
struct clk *losc;
+ struct clk *ext_losc;
spinlock_t lock;
};
@@ -188,23 +192,24 @@ static void __init sun6i_rtc_clk_init(struct device_node *node)
struct clk_init_data init = {
.ops = &sun6i_rtc_osc_ops,
};
+ const char *clkout_name = "osc32k-out";
const char *parents[2];
rtc = kzalloc(sizeof(*rtc), GFP_KERNEL);
if (!rtc)
return;
- spin_lock_init(&rtc->lock);
- clk_data = kzalloc(sizeof(*clk_data) + sizeof(*clk_data->hws),
+ clk_data = kzalloc(sizeof(*clk_data) + (sizeof(*clk_data->hws) * 2),
GFP_KERNEL);
if (!clk_data)
return;
+
spin_lock_init(&rtc->lock);
rtc->base = of_io_request_and_map(node, 0, of_node_full_name(node));
if (IS_ERR(rtc->base)) {
pr_crit("Can't map RTC registers");
- return;
+ goto err;
}
/* Switch to the external, more precise, oscillator */
@@ -216,7 +221,7 @@ static void __init sun6i_rtc_clk_init(struct device_node *node)
/* Deal with old DTs */
if (!of_get_property(node, "clocks", NULL))
- return;
+ goto err;
rtc->int_osc = clk_hw_register_fixed_rate_with_accuracy(NULL,
"rtc-int-osc",
@@ -235,7 +240,8 @@ static void __init sun6i_rtc_clk_init(struct device_node *node)
init.parent_names = parents;
init.num_parents = of_clk_get_parent_count(node) + 1;
- of_property_read_string(node, "clock-output-names", &init.name);
+ of_property_read_string_index(node, "clock-output-names", 0,
+ &init.name);
rtc->losc = clk_register(NULL, &rtc->hw);
if (IS_ERR(rtc->losc)) {
@@ -243,9 +249,25 @@ static void __init sun6i_rtc_clk_init(struct device_node *node)
return;
}
- clk_data->num = 1;
+ of_property_read_string_index(node, "clock-output-names", 1,
+ &clkout_name);
+ rtc->ext_losc = clk_register_gate(NULL, clkout_name, rtc->hw.init->name,
+ 0, rtc->base + SUN6I_LOSC_OUT_GATING,
+ SUN6I_LOSC_OUT_GATING_EN, 0,
+ &rtc->lock);
+ if (IS_ERR(rtc->ext_losc)) {
+ pr_crit("Couldn't register the LOSC external gate\n");
+ return;
+ }
+
+ clk_data->num = 2;
clk_data->hws[0] = &rtc->hw;
+ clk_data->hws[1] = __clk_get_hw(rtc->ext_losc);
of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
+ return;
+
+err:
+ kfree(clk_data);
}
CLK_OF_DECLARE_DRIVER(sun6i_rtc_clk, "allwinner,sun6i-a31-rtc",
sun6i_rtc_clk_init);
diff --git a/drivers/rtc/rtc-vr41xx.c b/drivers/rtc/rtc-vr41xx.c
index e1b86bb01062..7ce22967fd16 100644
--- a/drivers/rtc/rtc-vr41xx.c
+++ b/drivers/rtc/rtc-vr41xx.c
@@ -119,23 +119,6 @@ static inline void write_elapsed_second(unsigned long sec)
spin_unlock_irq(&rtc_lock);
}
-static void vr41xx_rtc_release(struct device *dev)
-{
-
- spin_lock_irq(&rtc_lock);
-
- rtc1_write(ECMPLREG, 0);
- rtc1_write(ECMPMREG, 0);
- rtc1_write(ECMPHREG, 0);
- rtc1_write(RTCL1LREG, 0);
- rtc1_write(RTCL1HREG, 0);
-
- spin_unlock_irq(&rtc_lock);
-
- disable_irq(aie_irq);
- disable_irq(pie_irq);
-}
-
static int vr41xx_rtc_read_time(struct device *dev, struct rtc_time *time)
{
unsigned long epoch_sec, elapsed_sec;
@@ -272,7 +255,6 @@ static irqreturn_t rtclong1_interrupt(int irq, void *dev_id)
}
static const struct rtc_class_ops vr41xx_rtc_ops = {
- .release = vr41xx_rtc_release,
.ioctl = vr41xx_rtc_ioctl,
.read_time = vr41xx_rtc_read_time,
.set_time = vr41xx_rtc_set_time,
diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index d145e0d90227..41366339b950 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -283,7 +283,7 @@ config SCSI_ISCSI_ATTRS
config SCSI_SAS_ATTRS
tristate "SAS Transport Attributes"
depends on SCSI
- select BLK_DEV_BSG
+ select BLK_DEV_BSGLIB
help
If you wish to export transport-specific information about
each attached SAS device to sysfs, say Y.
diff --git a/drivers/scsi/hosts.c b/drivers/scsi/hosts.c
index 831a1c8b9f89..fe3a0da3ec97 100644
--- a/drivers/scsi/hosts.c
+++ b/drivers/scsi/hosts.c
@@ -315,8 +315,6 @@ static void scsi_host_dev_release(struct device *dev)
{
struct Scsi_Host *shost = dev_to_shost(dev);
struct device *parent = dev->parent;
- struct request_queue *q;
- void *queuedata;
scsi_proc_hostdir_rm(shost->hostt);
@@ -326,12 +324,6 @@ static void scsi_host_dev_release(struct device *dev)
kthread_stop(shost->ehandler);
if (shost->work_q)
destroy_workqueue(shost->work_q);
- q = shost->uspace_req_q;
- if (q) {
- queuedata = q->queuedata;
- blk_cleanup_queue(q);
- kfree(queuedata);
- }
if (shost->shost_state == SHOST_CREATED) {
/*
diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile
index 280a6a91a9e2..2fcaff864584 100644
--- a/drivers/soc/Makefile
+++ b/drivers/soc/Makefile
@@ -9,6 +9,7 @@ obj-$(CONFIG_ARCH_DOVE) += dove/
obj-$(CONFIG_MACH_DOVE) += dove/
obj-y += fsl/
obj-$(CONFIG_ARCH_MXC) += imx/
+obj-$(CONFIG_SOC_XWAY) += lantiq/
obj-$(CONFIG_ARCH_MEDIATEK) += mediatek/
obj-$(CONFIG_ARCH_MESON) += amlogic/
obj-$(CONFIG_ARCH_QCOM) += qcom/
diff --git a/drivers/soc/lantiq/Makefile b/drivers/soc/lantiq/Makefile
new file mode 100644
index 000000000000..be9e866d53e5
--- /dev/null
+++ b/drivers/soc/lantiq/Makefile
@@ -0,0 +1,2 @@
+obj-y += fpi-bus.o
+obj-$(CONFIG_XRX200_PHY_FW) += gphy.o
diff --git a/drivers/soc/lantiq/fpi-bus.c b/drivers/soc/lantiq/fpi-bus.c
new file mode 100644
index 000000000000..a671c9984c4c
--- /dev/null
+++ b/drivers/soc/lantiq/fpi-bus.c
@@ -0,0 +1,87 @@
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ *
+ * Copyright (C) 2011-2015 John Crispin <blogic@phrozen.org>
+ * Copyright (C) 2015 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+ * Copyright (C) 2017 Hauke Mehrtens <hauke@hauke-m.de>
+ */
+
+#include <linux/device.h>
+#include <linux/err.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <linux/platform_device.h>
+#include <linux/property.h>
+#include <linux/regmap.h>
+
+#include <lantiq_soc.h>
+
+#define XBAR_ALWAYS_LAST 0x430
+#define XBAR_FPI_BURST_EN BIT(1)
+#define XBAR_AHB_BURST_EN BIT(2)
+
+#define RCU_VR9_BE_AHB1S 0x00000008
+
+static int ltq_fpi_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct device_node *np = dev->of_node;
+ struct resource *res_xbar;
+ struct regmap *rcu_regmap;
+ void __iomem *xbar_membase;
+ u32 rcu_ahb_endianness_reg_offset;
+ int ret;
+
+ res_xbar = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ xbar_membase = devm_ioremap_resource(dev, res_xbar);
+ if (IS_ERR(xbar_membase))
+ return PTR_ERR(xbar_membase);
+
+ /* RCU configuration is optional */
+ rcu_regmap = syscon_regmap_lookup_by_phandle(np, "lantiq,rcu");
+ if (IS_ERR(rcu_regmap))
+ return PTR_ERR(rcu_regmap);
+
+ ret = device_property_read_u32(dev, "lantiq,offset-endianness",
+ &rcu_ahb_endianness_reg_offset);
+ if (ret) {
+ dev_err(&pdev->dev, "Failed to get RCU reg offset\n");
+ return ret;
+ }
+
+ ret = regmap_update_bits(rcu_regmap, rcu_ahb_endianness_reg_offset,
+ RCU_VR9_BE_AHB1S, RCU_VR9_BE_AHB1S);
+ if (ret) {
+ dev_warn(&pdev->dev,
+ "Failed to configure RCU AHB endianness\n");
+ return ret;
+ }
+
+ /* disable fpi burst */
+ ltq_w32_mask(XBAR_FPI_BURST_EN, 0, xbar_membase + XBAR_ALWAYS_LAST);
+
+ return of_platform_populate(dev->of_node, NULL, NULL, dev);
+}
+
+static const struct of_device_id ltq_fpi_match[] = {
+ { .compatible = "lantiq,xrx200-fpi" },
+ {},
+};
+MODULE_DEVICE_TABLE(of, ltq_fpi_match);
+
+static struct platform_driver ltq_fpi_driver = {
+ .probe = ltq_fpi_probe,
+ .driver = {
+ .name = "fpi-xway",
+ .of_match_table = ltq_fpi_match,
+ },
+};
+
+module_platform_driver(ltq_fpi_driver);
+
+MODULE_DESCRIPTION("Lantiq FPI bus driver");
+MODULE_LICENSE("GPL");
diff --git a/drivers/soc/lantiq/gphy.c b/drivers/soc/lantiq/gphy.c
new file mode 100644
index 000000000000..8d8659463b3e
--- /dev/null
+++ b/drivers/soc/lantiq/gphy.c
@@ -0,0 +1,260 @@
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ *
+ * Copyright (C) 2012 John Crispin <blogic@phrozen.org>
+ * Copyright (C) 2016 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+ * Copyright (C) 2017 Hauke Mehrtens <hauke@hauke-m.de>
+ */
+
+#include <linux/clk.h>
+#include <linux/delay.h>
+#include <linux/dma-mapping.h>
+#include <linux/firmware.h>
+#include <linux/mfd/syscon.h>
+#include <linux/module.h>
+#include <linux/reboot.h>
+#include <linux/regmap.h>
+#include <linux/reset.h>
+#include <linux/of_device.h>
+#include <linux/of_platform.h>
+#include <linux/property.h>
+#include <dt-bindings/mips/lantiq_rcu_gphy.h>
+
+#include <lantiq_soc.h>
+
+#define XRX200_GPHY_FW_ALIGN (16 * 1024)
+
+struct xway_gphy_priv {
+ struct clk *gphy_clk_gate;
+ struct reset_control *gphy_reset;
+ struct reset_control *gphy_reset2;
+ struct notifier_block gphy_reboot_nb;
+ void __iomem *membase;
+ char *fw_name;
+};
+
+struct xway_gphy_match_data {
+ char *fe_firmware_name;
+ char *ge_firmware_name;
+};
+
+static const struct xway_gphy_match_data xrx200a1x_gphy_data = {
+ .fe_firmware_name = "lantiq/xrx200_phy22f_a14.bin",
+ .ge_firmware_name = "lantiq/xrx200_phy11g_a14.bin",
+};
+
+static const struct xway_gphy_match_data xrx200a2x_gphy_data = {
+ .fe_firmware_name = "lantiq/xrx200_phy22f_a22.bin",
+ .ge_firmware_name = "lantiq/xrx200_phy11g_a22.bin",
+};
+
+static const struct xway_gphy_match_data xrx300_gphy_data = {
+ .fe_firmware_name = "lantiq/xrx300_phy22f_a21.bin",
+ .ge_firmware_name = "lantiq/xrx300_phy11g_a21.bin",
+};
+
+static const struct of_device_id xway_gphy_match[] = {
+ { .compatible = "lantiq,xrx200a1x-gphy", .data = &xrx200a1x_gphy_data },
+ { .compatible = "lantiq,xrx200a2x-gphy", .data = &xrx200a2x_gphy_data },
+ { .compatible = "lantiq,xrx300-gphy", .data = &xrx300_gphy_data },
+ { .compatible = "lantiq,xrx330-gphy", .data = &xrx300_gphy_data },
+ {},
+};
+MODULE_DEVICE_TABLE(of, xway_gphy_match);
+
+static struct xway_gphy_priv *to_xway_gphy_priv(struct notifier_block *nb)
+{
+ return container_of(nb, struct xway_gphy_priv, gphy_reboot_nb);
+}
+
+static int xway_gphy_reboot_notify(struct notifier_block *reboot_nb,
+ unsigned long code, void *unused)
+{
+ struct xway_gphy_priv *priv = to_xway_gphy_priv(reboot_nb);
+
+ if (priv) {
+ reset_control_assert(priv->gphy_reset);
+ reset_control_assert(priv->gphy_reset2);
+ }
+
+ return NOTIFY_DONE;
+}
+
+static int xway_gphy_load(struct device *dev, struct xway_gphy_priv *priv,
+ dma_addr_t *dev_addr)
+{
+ const struct firmware *fw;
+ void *fw_addr;
+ dma_addr_t dma_addr;
+ size_t size;
+ int ret;
+
+ ret = request_firmware(&fw, priv->fw_name, dev);
+ if (ret) {
+ dev_err(dev, "failed to load firmware: %s, error: %i\n",
+ priv->fw_name, ret);
+ return ret;
+ }
+
+ /*
+ * GPHY cores need the firmware code in a persistent and contiguous
+ * memory area with a 16 kB boundary aligned start address.
+ */
+ size = fw->size + XRX200_GPHY_FW_ALIGN;
+
+ fw_addr = dmam_alloc_coherent(dev, size, &dma_addr, GFP_KERNEL);
+ if (fw_addr) {
+ fw_addr = PTR_ALIGN(fw_addr, XRX200_GPHY_FW_ALIGN);
+ *dev_addr = ALIGN(dma_addr, XRX200_GPHY_FW_ALIGN);
+ memcpy(fw_addr, fw->data, fw->size);
+ } else {
+ dev_err(dev, "failed to alloc firmware memory\n");
+ ret = -ENOMEM;
+ }
+
+ release_firmware(fw);
+
+ return ret;
+}
+
+static int xway_gphy_of_probe(struct platform_device *pdev,
+ struct xway_gphy_priv *priv)
+{
+ struct device *dev = &pdev->dev;
+ const struct xway_gphy_match_data *gphy_fw_name_cfg;
+ u32 gphy_mode;
+ int ret;
+ struct resource *res_gphy;
+
+ gphy_fw_name_cfg = of_device_get_match_data(dev);
+
+ priv->gphy_clk_gate = devm_clk_get(dev, NULL);
+ if (IS_ERR(priv->gphy_clk_gate)) {
+ dev_err(dev, "Failed to lookup gate clock\n");
+ return PTR_ERR(priv->gphy_clk_gate);
+ }
+
+ res_gphy = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ priv->membase = devm_ioremap_resource(dev, res_gphy);
+ if (IS_ERR(priv->membase))
+ return PTR_ERR(priv->membase);
+
+ priv->gphy_reset = devm_reset_control_get(dev, "gphy");
+ if (IS_ERR(priv->gphy_reset)) {
+ if (PTR_ERR(priv->gphy_reset) != -EPROBE_DEFER)
+ dev_err(dev, "Failed to lookup gphy reset\n");
+ return PTR_ERR(priv->gphy_reset);
+ }
+
+ priv->gphy_reset2 = devm_reset_control_get_optional(dev, "gphy2");
+ if (IS_ERR(priv->gphy_reset2))
+ return PTR_ERR(priv->gphy_reset2);
+
+ ret = device_property_read_u32(dev, "lantiq,gphy-mode", &gphy_mode);
+ /* Default to GE mode */
+ if (ret)
+ gphy_mode = GPHY_MODE_GE;
+
+ switch (gphy_mode) {
+ case GPHY_MODE_FE:
+ priv->fw_name = gphy_fw_name_cfg->fe_firmware_name;
+ break;
+ case GPHY_MODE_GE:
+ priv->fw_name = gphy_fw_name_cfg->ge_firmware_name;
+ break;
+ default:
+ dev_err(dev, "Unknown GPHY mode %d\n", gphy_mode);
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+static int xway_gphy_probe(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct xway_gphy_priv *priv;
+ dma_addr_t fw_addr = 0;
+ int ret;
+
+ priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ ret = xway_gphy_of_probe(pdev, priv);
+ if (ret)
+ return ret;
+
+ ret = clk_prepare_enable(priv->gphy_clk_gate);
+ if (ret)
+ return ret;
+
+ ret = xway_gphy_load(dev, priv, &fw_addr);
+ if (ret) {
+ clk_disable_unprepare(priv->gphy_clk_gate);
+ return ret;
+ }
+
+ reset_control_assert(priv->gphy_reset);
+ reset_control_assert(priv->gphy_reset2);
+
+ iowrite32be(fw_addr, priv->membase);
+
+ reset_control_deassert(priv->gphy_reset);
+ reset_control_deassert(priv->gphy_reset2);
+
+ /* assert the gphy reset because it can hang after a reboot: */
+ priv->gphy_reboot_nb.notifier_call = xway_gphy_reboot_notify;
+ priv->gphy_reboot_nb.priority = -1;
+
+ ret = register_reboot_notifier(&priv->gphy_reboot_nb);
+ if (ret)
+ dev_warn(dev, "Failed to register reboot notifier\n");
+
+ platform_set_drvdata(pdev, priv);
+
+ return ret;
+}
+
+static int xway_gphy_remove(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct xway_gphy_priv *priv = platform_get_drvdata(pdev);
+ int ret;
+
+ reset_control_assert(priv->gphy_reset);
+ reset_control_assert(priv->gphy_reset2);
+
+ iowrite32be(0, priv->membase);
+
+ clk_disable_unprepare(priv->gphy_clk_gate);
+
+ ret = unregister_reboot_notifier(&priv->gphy_reboot_nb);
+ if (ret)
+ dev_warn(dev, "Failed to unregister reboot notifier\n");
+
+ return 0;
+}
+
+static struct platform_driver xway_gphy_driver = {
+ .probe = xway_gphy_probe,
+ .remove = xway_gphy_remove,
+ .driver = {
+ .name = "xway-rcu-gphy",
+ .of_match_table = xway_gphy_match,
+ },
+};
+
+module_platform_driver(xway_gphy_driver);
+
+MODULE_FIRMWARE("lantiq/xrx300_phy11g_a21.bin");
+MODULE_FIRMWARE("lantiq/xrx300_phy22f_a21.bin");
+MODULE_FIRMWARE("lantiq/xrx200_phy11g_a14.bin");
+MODULE_FIRMWARE("lantiq/xrx200_phy11g_a22.bin");
+MODULE_FIRMWARE("lantiq/xrx200_phy22f_a14.bin");
+MODULE_FIRMWARE("lantiq/xrx200_phy22f_a22.bin");
+MODULE_AUTHOR("Martin Blumenstingl <martin.blumenstingl@googlemail.com>");
+MODULE_DESCRIPTION("Lantiq XWAY GPHY Firmware Loader");
+MODULE_LICENSE("GPL");
diff --git a/drivers/staging/android/ashmem.c b/drivers/staging/android/ashmem.c
index 6ba270e0494d..0f695df14c9d 100644
--- a/drivers/staging/android/ashmem.c
+++ b/drivers/staging/android/ashmem.c
@@ -294,19 +294,9 @@ static int ashmem_release(struct inode *ignored, struct file *file)
return 0;
}
-/**
- * ashmem_read() - Reads a set of bytes from an Ashmem-enabled file
- * @file: The associated backing file.
- * @buf: The buffer of data being written to
- * @len: The number of bytes being read
- * @pos: The position of the first byte to read.
- *
- * Return: 0 if successful, or another return code if not.
- */
-static ssize_t ashmem_read(struct file *file, char __user *buf,
- size_t len, loff_t *pos)
+static ssize_t ashmem_read_iter(struct kiocb *iocb, struct iov_iter *iter)
{
- struct ashmem_area *asma = file->private_data;
+ struct ashmem_area *asma = iocb->ki_filp->private_data;
int ret = 0;
mutex_lock(&ashmem_mutex);
@@ -320,20 +310,17 @@ static ssize_t ashmem_read(struct file *file, char __user *buf,
goto out_unlock;
}
- mutex_unlock(&ashmem_mutex);
-
/*
* asma and asma->file are used outside the lock here. We assume
* once asma->file is set it will never be changed, and will not
* be destroyed until all references to the file are dropped and
* ashmem_release is called.
*/
- ret = __vfs_read(asma->file, buf, len, pos);
- if (ret >= 0)
- /** Update backing file pos, since f_ops->read() doesn't */
- asma->file->f_pos = *pos;
- return ret;
-
+ mutex_unlock(&ashmem_mutex);
+ ret = vfs_iter_read(asma->file, iter, &iocb->ki_pos, 0);
+ mutex_lock(&ashmem_mutex);
+ if (ret > 0)
+ asma->file->f_pos = iocb->ki_pos;
out_unlock:
mutex_unlock(&ashmem_mutex);
return ret;
@@ -834,7 +821,7 @@ static const struct file_operations ashmem_fops = {
.owner = THIS_MODULE,
.open = ashmem_open,
.release = ashmem_release,
- .read = ashmem_read,
+ .read_iter = ashmem_read_iter,
.llseek = ashmem_llseek,
.mmap = ashmem_mmap,
.unlocked_ioctl = ashmem_ioctl,
diff --git a/drivers/staging/comedi/drivers/serial2002.c b/drivers/staging/comedi/drivers/serial2002.c
index 0d33e520f635..cc18e25103ca 100644
--- a/drivers/staging/comedi/drivers/serial2002.c
+++ b/drivers/staging/comedi/drivers/serial2002.c
@@ -106,16 +106,8 @@ static long serial2002_tty_ioctl(struct file *f, unsigned int op,
static int serial2002_tty_write(struct file *f, unsigned char *buf, int count)
{
- const char __user *p = (__force const char __user *)buf;
- int result;
- loff_t offset = 0;
- mm_segment_t oldfs;
-
- oldfs = get_fs();
- set_fs(KERNEL_DS);
- result = __vfs_write(f, p, count, &offset);
- set_fs(oldfs);
- return result;
+ loff_t pos = 0;
+ return kernel_write(f, buf, count, &pos);
}
static void serial2002_tty_read_poll_wait(struct file *f, int timeout)
@@ -148,19 +140,14 @@ static int serial2002_tty_read(struct file *f, int timeout)
{
unsigned char ch;
int result;
+ loff_t pos = 0;
result = -1;
if (!IS_ERR(f)) {
- mm_segment_t oldfs;
- char __user *p = (__force char __user *)&ch;
- loff_t offset = 0;
-
- oldfs = get_fs();
- set_fs(KERNEL_DS);
if (f->f_op->poll) {
serial2002_tty_read_poll_wait(f, timeout);
- if (__vfs_read(f, p, 1, &offset) == 1)
+ if (kernel_read(f, &ch, 1, &pos) == 1)
result = ch;
} else {
/* Device does not support poll, busy wait */
@@ -171,14 +158,13 @@ static int serial2002_tty_read(struct file *f, int timeout)
if (retries >= timeout)
break;
- if (__vfs_read(f, p, 1, &offset) == 1) {
+ if (kernel_read(f, &ch, 1, &pos) == 1) {
result = ch;
break;
}
usleep_range(100, 1000);
}
}
- set_fs(oldfs);
}
return result;
}
diff --git a/drivers/staging/lustre/lnet/libcfs/tracefile.c b/drivers/staging/lustre/lnet/libcfs/tracefile.c
index 68f283a2744c..f916b475e767 100644
--- a/drivers/staging/lustre/lnet/libcfs/tracefile.c
+++ b/drivers/staging/lustre/lnet/libcfs/tracefile.c
@@ -731,8 +731,7 @@ int cfs_tracefile_dump_all_pages(char *filename)
__LASSERT_TAGE_INVARIANT(tage);
buf = kmap(tage->page);
- rc = vfs_write(filp, (__force const char __user *)buf,
- tage->used, &filp->f_pos);
+ rc = kernel_write(filp, buf, tage->used, &filp->f_pos);
kunmap(tage->page);
if (rc != (int)tage->used) {
@@ -976,7 +975,6 @@ static int tracefiled(void *arg)
struct tracefiled_ctl *tctl = arg;
struct cfs_trace_page *tage;
struct cfs_trace_page *tmp;
- mm_segment_t __oldfs;
struct file *filp;
char *buf;
int last_loop = 0;
@@ -1014,8 +1012,6 @@ static int tracefiled(void *arg)
__LASSERT(list_empty(&pc.pc_pages));
goto end_loop;
}
- __oldfs = get_fs();
- set_fs(get_ds());
list_for_each_entry_safe(tage, tmp, &pc.pc_pages, linkage) {
static loff_t f_pos;
@@ -1028,8 +1024,7 @@ static int tracefiled(void *arg)
f_pos = i_size_read(file_inode(filp));
buf = kmap(tage->page);
- rc = vfs_write(filp, (__force const char __user *)buf,
- tage->used, &f_pos);
+ rc = kernel_write(filp, buf, tage->used, &f_pos);
kunmap(tage->page);
if (rc != (int)tage->used) {
@@ -1040,7 +1035,6 @@ static int tracefiled(void *arg)
break;
}
}
- set_fs(__oldfs);
filp_close(filp, NULL);
put_pages_on_daemon_list(&pc);
diff --git a/drivers/staging/lustre/lustre/llite/llite_lib.c b/drivers/staging/lustre/lustre/llite/llite_lib.c
index d855129768f8..25393e3a0fe8 100644
--- a/drivers/staging/lustre/lustre/llite/llite_lib.c
+++ b/drivers/staging/lustre/lustre/llite/llite_lib.c
@@ -210,7 +210,7 @@ static int client_common_fill_super(struct super_block *sb, char *md, char *dt,
data->ocd_ibits_known = MDS_INODELOCK_FULL;
data->ocd_version = LUSTRE_VERSION_CODE;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
data->ocd_connect_flags |= OBD_CONNECT_RDONLY;
if (sbi->ll_flags & LL_SBI_USER_XATTR)
data->ocd_connect_flags |= OBD_CONNECT_XATTR;
@@ -2031,7 +2031,7 @@ int ll_remount_fs(struct super_block *sb, int *flags, char *data)
int err;
__u32 read_only;
- if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY)) {
+ if ((bool)(*flags & MS_RDONLY) != sb_rdonly(sb)) {
read_only = *flags & MS_RDONLY;
err = obd_set_info_async(NULL, sbi->ll_md_exp,
sizeof(KEY_READ_ONLY),
diff --git a/drivers/staging/lustre/lustre/llite/namei.c b/drivers/staging/lustre/lustre/llite/namei.c
index 4897dbd3286d..5cc2b3255207 100644
--- a/drivers/staging/lustre/lustre/llite/namei.c
+++ b/drivers/staging/lustre/lustre/llite/namei.c
@@ -561,8 +561,7 @@ static struct dentry *ll_lookup_it(struct inode *parent, struct dentry *dentry,
}
}
- if (it->it_op & IT_OPEN && it->it_flags & FMODE_WRITE &&
- dentry->d_sb->s_flags & MS_RDONLY)
+ if (it->it_op & IT_OPEN && it->it_flags & FMODE_WRITE && sb_rdonly(dentry->d_sb))
return ERR_PTR(-EROFS);
if (it->it_op & IT_CREAT)
diff --git a/drivers/staging/lustre/lustre/obdclass/kernelcomm.c b/drivers/staging/lustre/lustre/obdclass/kernelcomm.c
index 8f0707a27a83..4f0a42633d5a 100644
--- a/drivers/staging/lustre/lustre/obdclass/kernelcomm.c
+++ b/drivers/staging/lustre/lustre/obdclass/kernelcomm.c
@@ -52,7 +52,6 @@ int libcfs_kkuc_msg_put(struct file *filp, void *payload)
struct kuc_hdr *kuch = (struct kuc_hdr *)payload;
ssize_t count = kuch->kuc_msglen;
loff_t offset = 0;
- mm_segment_t fs;
int rc = -ENXIO;
if (IS_ERR_OR_NULL(filp))
@@ -63,18 +62,14 @@ int libcfs_kkuc_msg_put(struct file *filp, void *payload)
return rc;
}
- fs = get_fs();
- set_fs(KERNEL_DS);
while (count > 0) {
- rc = vfs_write(filp, (void __force __user *)payload,
- count, &offset);
+ rc = kernel_write(filp, payload, count, &offset);
if (rc < 0)
break;
count -= rc;
payload += rc;
rc = 0;
}
- set_fs(fs);
if (rc < 0)
CWARN("message send failed (%d)\n", rc);
diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c
index a91b7c25ffd4..928127642574 100644
--- a/drivers/target/target_core_alua.c
+++ b/drivers/target/target_core_alua.c
@@ -896,13 +896,14 @@ static int core_alua_write_tpg_metadata(
u32 md_buf_len)
{
struct file *file = filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600);
+ loff_t pos = 0;
int ret;
if (IS_ERR(file)) {
pr_err("filp_open(%s) for ALUA metadata failed\n", path);
return -ENODEV;
}
- ret = kernel_write(file, md_buf, md_buf_len, 0);
+ ret = kernel_write(file, md_buf, md_buf_len, &pos);
if (ret < 0)
pr_err("Error writing ALUA metadata file: %s\n", path);
fput(file);
diff --git a/drivers/target/target_core_file.c b/drivers/target/target_core_file.c
index 24cf11d9e50a..c629817a8854 100644
--- a/drivers/target/target_core_file.c
+++ b/drivers/target/target_core_file.c
@@ -443,7 +443,7 @@ fd_do_prot_fill(struct se_device *se_dev, sector_t lba, sector_t nolb,
for (prot = 0; prot < prot_length;) {
sector_t len = min_t(sector_t, bufsize, prot_length - prot);
- ssize_t ret = kernel_write(prot_fd, buf, len, pos + prot);
+ ssize_t ret = kernel_write(prot_fd, buf, len, &pos);
if (ret != len) {
pr_err("vfs_write to prot file failed: %zd\n", ret);
diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c
index 6d5def64db61..dd2cd8048582 100644
--- a/drivers/target/target_core_pr.c
+++ b/drivers/target/target_core_pr.c
@@ -1974,6 +1974,7 @@ static int __core_scsi3_write_aptpl_to_file(
char path[512];
u32 pr_aptpl_buf_len;
int ret;
+ loff_t pos = 0;
memset(path, 0, 512);
@@ -1993,7 +1994,7 @@ static int __core_scsi3_write_aptpl_to_file(
pr_aptpl_buf_len = (strlen(buf) + 1); /* Add extra for NULL */
- ret = kernel_write(file, buf, pr_aptpl_buf_len, 0);
+ ret = kernel_write(file, buf, pr_aptpl_buf_len, &pos);
if (ret < 0)
pr_debug("Error writing APTPL metadata file: %s\n", path);
diff --git a/drivers/tty/serial/pch_uart.c b/drivers/tty/serial/pch_uart.c
index ae8cfc81ffc5..d9123f995705 100644
--- a/drivers/tty/serial/pch_uart.c
+++ b/drivers/tty/serial/pch_uart.c
@@ -371,7 +371,7 @@ static const struct file_operations port_regs_ops = {
};
#endif /* CONFIG_DEBUG_FS */
-static struct dmi_system_id pch_uart_dmi_table[] = {
+static const struct dmi_system_id pch_uart_dmi_table[] = {
{
.ident = "CM-iTC",
{
diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
index f95bddd6513f..d6bd0244b008 100644
--- a/drivers/usb/gadget/function/f_mass_storage.c
+++ b/drivers/usb/gadget/function/f_mass_storage.c
@@ -686,9 +686,8 @@ static int do_read(struct fsg_common *common)
/* Perform the read */
file_offset_tmp = file_offset;
- nread = vfs_read(curlun->filp,
- (char __user *)bh->buf,
- amount, &file_offset_tmp);
+ nread = kernel_read(curlun->filp, bh->buf, amount,
+ &file_offset_tmp);
VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
(unsigned long long)file_offset, (int)nread);
if (signal_pending(current))
@@ -883,8 +882,8 @@ static int do_write(struct fsg_common *common)
/* Perform the write */
file_offset_tmp = file_offset;
- nwritten = vfs_write(curlun->filp, (char __user *)bh->buf,
- amount, &file_offset_tmp);
+ nwritten = kernel_write(curlun->filp, bh->buf, amount,
+ &file_offset_tmp);
VLDBG(curlun, "file write %u @ %llu -> %d\n", amount,
(unsigned long long)file_offset, (int)nwritten);
if (signal_pending(current))
@@ -1021,9 +1020,8 @@ static int do_verify(struct fsg_common *common)
/* Perform the read */
file_offset_tmp = file_offset;
- nread = vfs_read(curlun->filp,
- (char __user *) bh->buf,
- amount, &file_offset_tmp);
+ nread = kernel_read(curlun->filp, bh->buf, amount,
+ &file_offset_tmp);
VLDBG(curlun, "file read %u @ %llu -> %d\n", amount,
(unsigned long long) file_offset,
(int) nread);
@@ -2453,13 +2451,6 @@ static int fsg_main_thread(void *common_)
/* Allow the thread to be frozen */
set_freezable();
- /*
- * Arrange for userspace references to be interpreted as kernel
- * pointers. That way we can pass a kernel pointer to a routine
- * that expects a __user pointer and it will work okay.
- */
- set_fs(get_ds());
-
/* The main loop */
while (common->state != FSG_STATE_TERMINATED) {
if (exception_in_progress(common) || signal_pending(current)) {
diff --git a/drivers/video/backlight/kb3886_bl.c b/drivers/video/backlight/kb3886_bl.c
index 84a110a719cb..96312c3afc07 100644
--- a/drivers/video/backlight/kb3886_bl.c
+++ b/drivers/video/backlight/kb3886_bl.c
@@ -78,7 +78,7 @@ static struct kb3886bl_machinfo *bl_machinfo;
static unsigned long kb3886bl_flags;
#define KB3886BL_SUSPENDED 0x01
-static struct dmi_system_id kb3886bl_device_table[] __initdata = {
+static const struct dmi_system_id kb3886bl_device_table[] __initconst = {
{
.ident = "Sahara Touch-iT",
.matches = {
diff --git a/drivers/video/console/Kconfig b/drivers/video/console/Kconfig
index 2111d06f8c81..7f1f1fbcef9e 100644
--- a/drivers/video/console/Kconfig
+++ b/drivers/video/console/Kconfig
@@ -117,7 +117,7 @@ config DUMMY_CONSOLE_ROWS
Select 25 if you use a 640x480 resolution by default.
config FRAMEBUFFER_CONSOLE
- tristate "Framebuffer Console support"
+ bool "Framebuffer Console support"
depends on FB && !UML
select VT_HW_CONSOLE_BINDING
select CRC32
diff --git a/drivers/video/console/Makefile b/drivers/video/console/Makefile
index 43bfa485db96..eb2cbec52643 100644
--- a/drivers/video/console/Makefile
+++ b/drivers/video/console/Makefile
@@ -7,13 +7,5 @@ obj-$(CONFIG_SGI_NEWPORT_CONSOLE) += newport_con.o
obj-$(CONFIG_STI_CONSOLE) += sticon.o sticore.o
obj-$(CONFIG_VGA_CONSOLE) += vgacon.o
obj-$(CONFIG_MDA_CONSOLE) += mdacon.o
-obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o softcursor.o
-ifeq ($(CONFIG_FB_TILEBLITTING),y)
-obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += tileblit.o
-endif
-ifeq ($(CONFIG_FRAMEBUFFER_CONSOLE_ROTATION),y)
-obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon_rotate.o fbcon_cw.o fbcon_ud.o \
- fbcon_ccw.o
-endif
obj-$(CONFIG_FB_STI) += sticore.o
diff --git a/drivers/video/console/vgacon.c b/drivers/video/console/vgacon.c
index dc06cb6a15dc..445b1dc5d441 100644
--- a/drivers/video/console/vgacon.c
+++ b/drivers/video/console/vgacon.c
@@ -398,9 +398,8 @@ static const char *vgacon_startup(void)
#endif
}
- /* boot_params.screen_info initialized? */
- if ((screen_info.orig_video_mode == 0) &&
- (screen_info.orig_video_lines == 0) &&
+ /* boot_params.screen_info reasonably initialized? */
+ if ((screen_info.orig_video_lines == 0) ||
(screen_info.orig_video_cols == 0))
goto no_vga;
diff --git a/drivers/video/fbdev/68328fb.c b/drivers/video/fbdev/68328fb.c
index c0c6b88d3839..d48e96088f76 100644
--- a/drivers/video/fbdev/68328fb.c
+++ b/drivers/video/fbdev/68328fb.c
@@ -72,7 +72,7 @@ static struct fb_var_screeninfo mc68x328fb_default __initdata = {
.vmode = FB_VMODE_NONINTERLACED,
};
-static struct fb_fix_screeninfo mc68x328fb_fix __initdata = {
+static const struct fb_fix_screeninfo mc68x328fb_fix __initconst = {
.id = "68328fb",
.type = FB_TYPE_PACKED_PIXELS,
.xpanstep = 1,
diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
index 5c6696bb56da..5e58f5ec0a28 100644
--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -2173,7 +2173,7 @@ config FB_PS3_DEFAULT_SIZE_M
config FB_XILINX
tristate "Xilinx frame buffer support"
- depends on FB && (XILINX_VIRTEX || MICROBLAZE || ARCH_ZYNQ)
+ depends on FB && (XILINX_VIRTEX || MICROBLAZE || ARCH_ZYNQ || ARCH_ZYNQMP)
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
index ffc2c33c6cef..36d25190b48c 100644
--- a/drivers/video/fbdev/amba-clcd.c
+++ b/drivers/video/fbdev/amba-clcd.c
@@ -1035,7 +1035,7 @@ static struct clcd_vendor_data vendor_nomadik = {
.init_panel = nomadik_clcd_init_panel,
};
-static struct amba_id clcdfb_id_table[] = {
+static const struct amba_id clcdfb_id_table[] = {
{
.id = 0x00041110,
.mask = 0x000ffffe,
diff --git a/drivers/video/fbdev/arkfb.c b/drivers/video/fbdev/arkfb.c
index 6a317de7082c..13ba371e70aa 100644
--- a/drivers/video/fbdev/arkfb.c
+++ b/drivers/video/fbdev/arkfb.c
@@ -1157,7 +1157,7 @@ fail:
/* List of boards that we are trying to support */
-static struct pci_device_id ark_devices[] = {
+static const struct pci_device_id ark_devices[] = {
{PCI_DEVICE(0xEDD8, 0xA099)},
{0, 0, 0, 0, 0, 0, 0}
};
diff --git a/drivers/video/fbdev/asiliantfb.c b/drivers/video/fbdev/asiliantfb.c
index 91eea4583382..ea31054a28ca 100644
--- a/drivers/video/fbdev/asiliantfb.c
+++ b/drivers/video/fbdev/asiliantfb.c
@@ -592,7 +592,7 @@ static void asiliantfb_remove(struct pci_dev *dp)
framebuffer_release(p);
}
-static struct pci_device_id asiliantfb_pci_tbl[] = {
+static const struct pci_device_id asiliantfb_pci_tbl[] = {
{ PCI_VENDOR_ID_CT, PCI_DEVICE_ID_CT_69000, PCI_ANY_ID, PCI_ANY_ID },
{ 0 }
};
diff --git a/drivers/video/fbdev/atmel_lcdfb.c b/drivers/video/fbdev/atmel_lcdfb.c
index 669ecc755fa9..e06358da4b99 100644
--- a/drivers/video/fbdev/atmel_lcdfb.c
+++ b/drivers/video/fbdev/atmel_lcdfb.c
@@ -320,7 +320,7 @@ static inline void atmel_lcdfb_power_control(struct atmel_lcdfb_info *sinfo, int
}
}
-static struct fb_fix_screeninfo atmel_lcdfb_fix __initdata = {
+static const struct fb_fix_screeninfo atmel_lcdfb_fix __initconst = {
.type = FB_TYPE_PACKED_PIXELS,
.visual = FB_VISUAL_TRUECOLOR,
.xpanstep = 0,
diff --git a/drivers/video/fbdev/aty/aty128fb.c b/drivers/video/fbdev/aty/aty128fb.c
index fa07242a78d2..db18474607c9 100644
--- a/drivers/video/fbdev/aty/aty128fb.c
+++ b/drivers/video/fbdev/aty/aty128fb.c
@@ -116,7 +116,7 @@ static const struct fb_var_screeninfo default_var = {
/* default modedb mode */
/* 640x480, 60 Hz, Non-Interlaced (25.172 MHz dotclock) */
-static struct fb_videomode defaultmode = {
+static const struct fb_videomode defaultmode = {
.refresh = 60,
.xres = 640,
.yres = 480,
@@ -166,7 +166,7 @@ static int aty128_pci_resume(struct pci_dev *pdev);
static int aty128_do_resume(struct pci_dev *pdev);
/* supported Rage128 chipsets */
-static struct pci_device_id aty128_pci_tbl[] = {
+static const struct pci_device_id aty128_pci_tbl[] = {
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RAGE128_LE,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, rage_M3_pci },
{ PCI_VENDOR_ID_ATI, PCI_DEVICE_ID_ATI_RAGE128_LF,
diff --git a/drivers/video/fbdev/aty/atyfb_base.c b/drivers/video/fbdev/aty/atyfb_base.c
index b55fdac9c9f5..3ec72f19114b 100644
--- a/drivers/video/fbdev/aty/atyfb_base.c
+++ b/drivers/video/fbdev/aty/atyfb_base.c
@@ -274,7 +274,7 @@ static struct fb_var_screeninfo default_var = {
0, FB_VMODE_NONINTERLACED
};
-static struct fb_videomode defmode = {
+static const struct fb_videomode defmode = {
/* 640x480 @ 60 Hz, 31.5 kHz hsync */
NULL, 60, 640, 480, 39721, 40, 24, 32, 11, 96, 2,
0, FB_VMODE_NONINTERLACED
@@ -1855,7 +1855,7 @@ static int atyfb_ioctl(struct fb_info *info, u_int cmd, u_long arg)
#if defined(DEBUG) && defined(CONFIG_FB_ATY_CT)
case ATYIO_CLKR:
if (M64_HAS(INTEGRATED)) {
- struct atyclk clk;
+ struct atyclk clk = { 0 };
union aty_pll *pll = &par->pll;
u32 dsp_config = pll->ct.dsp_config;
u32 dsp_on_off = pll->ct.dsp_on_off;
@@ -3756,7 +3756,7 @@ static void atyfb_pci_remove(struct pci_dev *pdev)
atyfb_remove(info);
}
-static struct pci_device_id atyfb_pci_tbl[] = {
+static const struct pci_device_id atyfb_pci_tbl[] = {
#ifdef CONFIG_FB_ATY_GX
{ PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_CHIP_MACH64GX) },
{ PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_CHIP_MACH64CX) },
diff --git a/drivers/video/fbdev/aty/radeon_base.c b/drivers/video/fbdev/aty/radeon_base.c
index 6b4c7872b375..1e2ec360f8c1 100644
--- a/drivers/video/fbdev/aty/radeon_base.c
+++ b/drivers/video/fbdev/aty/radeon_base.c
@@ -96,7 +96,7 @@
#define CHIP_DEF(id, family, flags) \
{ PCI_VENDOR_ID_ATI, id, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (flags) | (CHIP_FAMILY_##family) }
-static struct pci_device_id radeonfb_pci_table[] = {
+static const struct pci_device_id radeonfb_pci_table[] = {
/* Radeon Xpress 200m */
CHIP_DEF(PCI_CHIP_RS480_5955, RS480, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY),
CHIP_DEF(PCI_CHIP_RS482_5975, RS480, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY),
@@ -2241,7 +2241,7 @@ static ssize_t radeon_show_edid2(struct file *filp, struct kobject *kobj,
return radeon_show_one_edid(buf, off, count, rinfo->mon2_EDID);
}
-static struct bin_attribute edid1_attr = {
+static const struct bin_attribute edid1_attr = {
.attr = {
.name = "edid1",
.mode = 0444,
@@ -2250,7 +2250,7 @@ static struct bin_attribute edid1_attr = {
.read = radeon_show_edid1,
};
-static struct bin_attribute edid2_attr = {
+static const struct bin_attribute edid2_attr = {
.attr = {
.name = "edid2",
.mode = 0444,
diff --git a/drivers/video/fbdev/bfin-lq035q1-fb.c b/drivers/video/fbdev/bfin-lq035q1-fb.c
index b594a58ff21d..b459354ad940 100644
--- a/drivers/video/fbdev/bfin-lq035q1-fb.c
+++ b/drivers/video/fbdev/bfin-lq035q1-fb.c
@@ -841,7 +841,7 @@ static int bfin_lq035q1_resume(struct device *dev)
return 0;
}
-static struct dev_pm_ops bfin_lq035q1_dev_pm_ops = {
+static const struct dev_pm_ops bfin_lq035q1_dev_pm_ops = {
.suspend = bfin_lq035q1_suspend,
.resume = bfin_lq035q1_resume,
};
diff --git a/drivers/video/fbdev/bw2.c b/drivers/video/fbdev/bw2.c
index 8c5b281f0b29..7aa972072357 100644
--- a/drivers/video/fbdev/bw2.c
+++ b/drivers/video/fbdev/bw2.c
@@ -333,8 +333,8 @@ static int bw2_probe(struct platform_device *op)
dev_set_drvdata(&op->dev, info);
- printk(KERN_INFO "%s: bwtwo at %lx:%lx\n",
- dp->full_name, par->which_io, info->fix.smem_start);
+ printk(KERN_INFO "%pOF: bwtwo at %lx:%lx\n",
+ dp, par->which_io, info->fix.smem_start);
return 0;
diff --git a/drivers/video/fbdev/cg14.c b/drivers/video/fbdev/cg14.c
index 43e915eaf606..8de88b129b62 100644
--- a/drivers/video/fbdev/cg14.c
+++ b/drivers/video/fbdev/cg14.c
@@ -553,8 +553,8 @@ static int cg14_probe(struct platform_device *op)
dev_set_drvdata(&op->dev, info);
- printk(KERN_INFO "%s: cgfourteen at %lx:%lx, %dMB\n",
- dp->full_name,
+ printk(KERN_INFO "%pOF: cgfourteen at %lx:%lx, %dMB\n",
+ dp,
par->iospace, info->fix.smem_start,
par->ramsize >> 20);
diff --git a/drivers/video/fbdev/cg3.c b/drivers/video/fbdev/cg3.c
index 716391f22e75..6c334260cf53 100644
--- a/drivers/video/fbdev/cg3.c
+++ b/drivers/video/fbdev/cg3.c
@@ -412,8 +412,8 @@ static int cg3_probe(struct platform_device *op)
dev_set_drvdata(&op->dev, info);
- printk(KERN_INFO "%s: cg3 at %lx:%lx\n",
- dp->full_name, par->which_io, info->fix.smem_start);
+ printk(KERN_INFO "%pOF: cg3 at %lx:%lx\n",
+ dp, par->which_io, info->fix.smem_start);
return 0;
diff --git a/drivers/video/fbdev/cg6.c b/drivers/video/fbdev/cg6.c
index bdf901ed5291..0296c21acc78 100644
--- a/drivers/video/fbdev/cg6.c
+++ b/drivers/video/fbdev/cg6.c
@@ -810,8 +810,8 @@ static int cg6_probe(struct platform_device *op)
dev_set_drvdata(&op->dev, info);
- printk(KERN_INFO "%s: CGsix [%s] at %lx:%lx\n",
- dp->full_name, info->fix.id,
+ printk(KERN_INFO "%pOF: CGsix [%s] at %lx:%lx\n",
+ dp, info->fix.id,
par->which_io, info->fix.smem_start);
return 0;
diff --git a/drivers/video/fbdev/chipsfb.c b/drivers/video/fbdev/chipsfb.c
index 59abdc6a97f6..f103665cad43 100644
--- a/drivers/video/fbdev/chipsfb.c
+++ b/drivers/video/fbdev/chipsfb.c
@@ -292,7 +292,7 @@ static void chips_hw_init(void)
write_fr(chips_init_fr[i].addr, chips_init_fr[i].data);
}
-static struct fb_fix_screeninfo chipsfb_fix = {
+static const struct fb_fix_screeninfo chipsfb_fix = {
.id = "C&T 65550",
.type = FB_TYPE_PACKED_PIXELS,
.visual = FB_VISUAL_PSEUDOCOLOR,
@@ -309,7 +309,7 @@ static struct fb_fix_screeninfo chipsfb_fix = {
.smem_len = 0x100000, /* 1MB */
};
-static struct fb_var_screeninfo chipsfb_var = {
+static const struct fb_var_screeninfo chipsfb_var = {
.xres = 800,
.yres = 600,
.xres_virtual = 800,
diff --git a/drivers/video/fbdev/cobalt_lcdfb.c b/drivers/video/fbdev/cobalt_lcdfb.c
index 9da90bd242f4..0ef633e278a1 100644
--- a/drivers/video/fbdev/cobalt_lcdfb.c
+++ b/drivers/video/fbdev/cobalt_lcdfb.c
@@ -126,7 +126,7 @@ static void lcd_clear(struct fb_info *info)
lcd_write_control(info, LCD_RESET);
}
-static struct fb_fix_screeninfo cobalt_lcdfb_fix = {
+static const struct fb_fix_screeninfo cobalt_lcdfb_fix = {
.id = "cobalt-lcd",
.type = FB_TYPE_TEXT,
.type_aux = FB_AUX_TEXT_MDA,
diff --git a/drivers/video/fbdev/core/Makefile b/drivers/video/fbdev/core/Makefile
index 9e3ddf225393..73493bbd7a15 100644
--- a/drivers/video/fbdev/core/Makefile
+++ b/drivers/video/fbdev/core/Makefile
@@ -4,6 +4,20 @@ obj-$(CONFIG_FB) += fb.o
fb-y := fbmem.o fbmon.o fbcmap.o fbsysfs.o \
modedb.o fbcvt.o
fb-$(CONFIG_FB_DEFERRED_IO) += fb_defio.o
+
+ifeq ($(CONFIG_FRAMEBUFFER_CONSOLE),y)
+fb-y += fbcon.o bitblit.o softcursor.o
+ifeq ($(CONFIG_FB_TILEBLITTING),y)
+fb-y += tileblit.o
+endif
+ifeq ($(CONFIG_FRAMEBUFFER_CONSOLE_ROTATION),y)
+fb-y += fbcon_rotate.o fbcon_cw.o fbcon_ud.o \
+ fbcon_ccw.o
+endif
+ifeq ($(CONFIG_DMI),y)
+fb-y += fbcon_dmi_quirks.o
+endif
+endif
fb-objs := $(fb-y)
obj-$(CONFIG_FB_CFB_FILLRECT) += cfbfillrect.o
diff --git a/drivers/video/console/bitblit.c b/drivers/video/fbdev/core/bitblit.c
index dbfe4eecf12e..790900d646c0 100644
--- a/drivers/video/console/bitblit.c
+++ b/drivers/video/fbdev/core/bitblit.c
@@ -203,7 +203,7 @@ static void bit_putcs(struct vc_data *vc, struct fb_info *info,
}
static void bit_clear_margins(struct vc_data *vc, struct fb_info *info,
- int bottom_only)
+ int color, int bottom_only)
{
unsigned int cw = vc->vc_font.width;
unsigned int ch = vc->vc_font.height;
@@ -213,7 +213,7 @@ static void bit_clear_margins(struct vc_data *vc, struct fb_info *info,
unsigned int bs = info->var.yres - bh;
struct fb_fillrect region;
- region.color = 0;
+ region.color = color;
region.rop = ROP_COPY;
if (rw && !bottom_only) {
@@ -416,7 +416,3 @@ void fbcon_set_bitops(struct fbcon_ops *ops)
EXPORT_SYMBOL(fbcon_set_bitops);
-MODULE_AUTHOR("Antonino Daplas <adaplas@pol.net>");
-MODULE_DESCRIPTION("Bit Blitting Operation");
-MODULE_LICENSE("GPL");
-
diff --git a/drivers/video/console/fbcon.c b/drivers/video/fbdev/core/fbcon.c
index 12ded23f1aaf..04612f938bab 100644
--- a/drivers/video/console/fbcon.c
+++ b/drivers/video/fbdev/core/fbcon.c
@@ -68,6 +68,7 @@
#include <linux/kd.h>
#include <linux/slab.h>
#include <linux/fb.h>
+#include <linux/fbcon.h>
#include <linux/vt_kern.h>
#include <linux/selection.h>
#include <linux/font.h>
@@ -135,8 +136,9 @@ static char fontname[40];
static int info_idx = -1;
/* console rotation */
-static int initial_rotation;
+static int initial_rotation = -1;
static int fbcon_has_sysfs;
+static int margin_color;
static const struct consw fb_con;
@@ -491,6 +493,13 @@ static int __init fb_console_setup(char *this_opt)
initial_rotation = 0;
continue;
}
+
+ if (!strncmp(options, "margin:", 7)) {
+ options += 7;
+ if (*options)
+ margin_color = simple_strtoul(options, &options, 0);
+ continue;
+ }
}
return 1;
}
@@ -563,7 +572,7 @@ static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
unsigned short *save = NULL, *r, *q;
int logo_height;
- if (info->flags & FBINFO_MODULE) {
+ if (info->fbops->owner) {
logo_shown = FBCON_LOGO_DONTSHOW;
return;
}
@@ -954,7 +963,10 @@ static const char *fbcon_startup(void)
ops->cur_rotate = -1;
ops->cur_blink_jiffies = HZ / 5;
info->fbcon_par = ops;
- p->con_rotate = initial_rotation;
+ if (initial_rotation != -1)
+ p->con_rotate = initial_rotation;
+ else
+ p->con_rotate = fbcon_platform_get_rotate(info);
set_blitting_type(vc, info);
if (info->fix.type != FB_TYPE_TEXT) {
@@ -1091,7 +1103,10 @@ static void fbcon_init(struct vc_data *vc, int init)
ops = info->fbcon_par;
ops->cur_blink_jiffies = msecs_to_jiffies(vc->vc_cur_blink_ms);
- p->con_rotate = initial_rotation;
+ if (initial_rotation != -1)
+ p->con_rotate = initial_rotation;
+ else
+ p->con_rotate = fbcon_platform_get_rotate(info);
set_blitting_type(vc, info);
cols = vc->vc_cols;
@@ -1299,7 +1314,7 @@ static void fbcon_clear_margins(struct vc_data *vc, int bottom_only)
struct fbcon_ops *ops = info->fbcon_par;
if (!fbcon_is_inactive(vc, info))
- ops->clear_margins(vc, info, bottom_only);
+ ops->clear_margins(vc, info, margin_color, bottom_only);
}
static void fbcon_cursor(struct vc_data *vc, int mode)
@@ -3606,7 +3621,7 @@ static void fbcon_exit(void)
fbcon_has_exited = 1;
}
-static int __init fb_console_init(void)
+void __init fb_console_init(void)
{
int i;
@@ -3628,11 +3643,8 @@ static int __init fb_console_init(void)
console_unlock();
fbcon_start();
- return 0;
}
-fs_initcall(fb_console_init);
-
#ifdef MODULE
static void __exit fbcon_deinit_device(void)
@@ -3647,7 +3659,7 @@ static void __exit fbcon_deinit_device(void)
}
}
-static void __exit fb_console_exit(void)
+void __exit fb_console_exit(void)
{
console_lock();
fb_unregister_client(&fbcon_event_notifier);
@@ -3657,9 +3669,4 @@ static void __exit fb_console_exit(void)
do_unregister_con_driver(&fb_con);
console_unlock();
}
-
-module_exit(fb_console_exit);
-
#endif
-
-MODULE_LICENSE("GPL");
diff --git a/drivers/video/console/fbcon.h b/drivers/video/fbdev/core/fbcon.h
index 7aaa4eabbba0..18f3ac144237 100644
--- a/drivers/video/console/fbcon.h
+++ b/drivers/video/fbdev/core/fbcon.h
@@ -60,7 +60,7 @@ struct fbcon_ops {
const unsigned short *s, int count, int yy, int xx,
int fg, int bg);
void (*clear_margins)(struct vc_data *vc, struct fb_info *info,
- int bottom_only);
+ int color, int bottom_only);
void (*cursor)(struct vc_data *vc, struct fb_info *info, int mode,
int softback_lines, int fg, int bg);
int (*update_start)(struct fb_info *info);
@@ -261,5 +261,10 @@ extern void fbcon_set_rotate(struct fbcon_ops *ops);
#define fbcon_set_rotate(x) do {} while(0)
#endif /* CONFIG_FRAMEBUFFER_CONSOLE_ROTATION */
-#endif /* _VIDEO_FBCON_H */
+#ifdef CONFIG_DMI
+int fbcon_platform_get_rotate(struct fb_info *info);
+#else
+#define fbcon_platform_get_rotate(i) FB_ROTATE_UR
+#endif /* CONFIG_DMI */
+#endif /* _VIDEO_FBCON_H */
diff --git a/drivers/video/console/fbcon_ccw.c b/drivers/video/fbdev/core/fbcon_ccw.c
index 5a3cbf6dff4d..37a8b0b22566 100644
--- a/drivers/video/console/fbcon_ccw.c
+++ b/drivers/video/fbdev/core/fbcon_ccw.c
@@ -189,7 +189,7 @@ static void ccw_putcs(struct vc_data *vc, struct fb_info *info,
}
static void ccw_clear_margins(struct vc_data *vc, struct fb_info *info,
- int bottom_only)
+ int color, int bottom_only)
{
unsigned int cw = vc->vc_font.width;
unsigned int ch = vc->vc_font.height;
@@ -198,7 +198,7 @@ static void ccw_clear_margins(struct vc_data *vc, struct fb_info *info,
unsigned int bs = vc->vc_rows*ch;
struct fb_fillrect region;
- region.color = 0;
+ region.color = color;
region.rop = ROP_COPY;
if (rw && !bottom_only) {
@@ -418,7 +418,3 @@ void fbcon_rotate_ccw(struct fbcon_ops *ops)
ops->update_start = ccw_update_start;
}
EXPORT_SYMBOL(fbcon_rotate_ccw);
-
-MODULE_AUTHOR("Antonino Daplas <adaplas@pol.net>");
-MODULE_DESCRIPTION("Console Rotation (270 degrees) Support");
-MODULE_LICENSE("GPL");
diff --git a/drivers/video/console/fbcon_cw.c b/drivers/video/fbdev/core/fbcon_cw.c
index e7ee44db4e98..1888f8c866e8 100644
--- a/drivers/video/console/fbcon_cw.c
+++ b/drivers/video/fbdev/core/fbcon_cw.c
@@ -172,7 +172,7 @@ static void cw_putcs(struct vc_data *vc, struct fb_info *info,
}
static void cw_clear_margins(struct vc_data *vc, struct fb_info *info,
- int bottom_only)
+ int color, int bottom_only)
{
unsigned int cw = vc->vc_font.width;
unsigned int ch = vc->vc_font.height;
@@ -181,7 +181,7 @@ static void cw_clear_margins(struct vc_data *vc, struct fb_info *info,
unsigned int rs = info->var.yres - rw;
struct fb_fillrect region;
- region.color = 0;
+ region.color = color;
region.rop = ROP_COPY;
if (rw && !bottom_only) {
@@ -401,7 +401,3 @@ void fbcon_rotate_cw(struct fbcon_ops *ops)
ops->update_start = cw_update_start;
}
EXPORT_SYMBOL(fbcon_rotate_cw);
-
-MODULE_AUTHOR("Antonino Daplas <adaplas@pol.net>");
-MODULE_DESCRIPTION("Console Rotation (90 degrees) Support");
-MODULE_LICENSE("GPL");
diff --git a/drivers/video/fbdev/core/fbcon_dmi_quirks.c b/drivers/video/fbdev/core/fbcon_dmi_quirks.c
new file mode 100644
index 000000000000..6904e47d1e51
--- /dev/null
+++ b/drivers/video/fbdev/core/fbcon_dmi_quirks.c
@@ -0,0 +1,145 @@
+/*
+ * fbcon_dmi_quirks.c -- DMI based quirk detection for fbcon
+ *
+ * Copyright (C) 2017 Hans de Goede <hdegoede@redhat.com>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License. See the file COPYING in the main directory of this archive for
+ * more details.
+ */
+
+#include <linux/dmi.h>
+#include <linux/fb.h>
+#include <linux/kernel.h>
+#include "fbcon.h"
+
+/*
+ * Some x86 clamshell design devices use portrait tablet screens and a display
+ * engine which cannot rotate in hardware, so we need to rotate the fbcon to
+ * compensate. Unfortunately these (cheap) devices also typically have quite
+ * generic DMI data, so we match on a combination of DMI data, screen resolution
+ * and a list of known BIOS dates to avoid false positives.
+ */
+
+struct fbcon_dmi_rotate_data {
+ int width;
+ int height;
+ const char * const *bios_dates;
+ int rotate;
+};
+
+static const struct fbcon_dmi_rotate_data rotate_data_asus_t100ha = {
+ .width = 800,
+ .height = 1280,
+ .rotate = FB_ROTATE_CCW,
+};
+
+static const struct fbcon_dmi_rotate_data rotate_data_gpd_pocket = {
+ .width = 1200,
+ .height = 1920,
+ .bios_dates = (const char * const []){ "05/26/2017", "06/28/2017",
+ "07/05/2017", "08/07/2017", NULL },
+ .rotate = FB_ROTATE_CW,
+};
+
+static const struct fbcon_dmi_rotate_data rotate_data_gpd_win = {
+ .width = 720,
+ .height = 1280,
+ .bios_dates = (const char * const []){
+ "10/25/2016", "11/18/2016", "12/23/2016", "12/26/2016",
+ "02/21/2017", "03/20/2017", "05/25/2017", NULL },
+ .rotate = FB_ROTATE_CW,
+};
+
+static const struct fbcon_dmi_rotate_data rotate_data_itworks_tw891 = {
+ .width = 800,
+ .height = 1280,
+ .bios_dates = (const char * const []){ "10/16/2015", NULL },
+ .rotate = FB_ROTATE_CW,
+};
+
+static const struct fbcon_dmi_rotate_data rotate_data_vios_lth17 = {
+ .width = 800,
+ .height = 1280,
+ .rotate = FB_ROTATE_CW,
+};
+
+static const struct dmi_system_id rotate_data[] = {
+ { /* Asus T100HA */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T100HAN"),
+ },
+ .driver_data = (void *)&rotate_data_asus_t100ha,
+ }, { /*
+ * GPD Pocket, note that the the DMI data is less generic then
+ * it seems, devices with a board-vendor of "AMI Corporation"
+ * are quite rare, as are devices which have both board- *and*
+ * product-id set to "Default String"
+ */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"),
+ DMI_EXACT_MATCH(DMI_BOARD_SERIAL, "Default string"),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"),
+ },
+ .driver_data = (void *)&rotate_data_gpd_pocket,
+ }, { /* GPD Win (same note on DMI match as GPD Pocket) */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"),
+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"),
+ DMI_EXACT_MATCH(DMI_BOARD_SERIAL, "Default string"),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Default string"),
+ },
+ .driver_data = (void *)&rotate_data_gpd_win,
+ }, { /* I.T.Works TW891 */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "TW891"),
+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "To be filled by O.E.M."),
+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "TW891"),
+ },
+ .driver_data = (void *)&rotate_data_itworks_tw891,
+ }, { /* VIOS LTH17 */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "VIOS"),
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "LTH17"),
+ DMI_EXACT_MATCH(DMI_BOARD_VENDOR, "VIOS"),
+ DMI_EXACT_MATCH(DMI_BOARD_NAME, "LTH17"),
+ },
+ .driver_data = (void *)&rotate_data_vios_lth17,
+ },
+ {}
+};
+
+int fbcon_platform_get_rotate(struct fb_info *info)
+{
+ const struct dmi_system_id *match;
+ const struct fbcon_dmi_rotate_data *data;
+ const char *bios_date;
+ int i;
+
+ for (match = dmi_first_match(rotate_data);
+ match;
+ match = dmi_first_match(match + 1)) {
+ data = match->driver_data;
+
+ if (data->width != info->var.xres ||
+ data->height != info->var.yres)
+ continue;
+
+ if (!data->bios_dates)
+ return data->rotate;
+
+ bios_date = dmi_get_system_info(DMI_BIOS_DATE);
+ if (!bios_date)
+ continue;
+
+ for (i = 0; data->bios_dates[i]; i++) {
+ if (!strcmp(data->bios_dates[i], bios_date))
+ return data->rotate;
+ }
+ }
+
+ return FB_ROTATE_UR;
+}
diff --git a/drivers/video/console/fbcon_rotate.c b/drivers/video/fbdev/core/fbcon_rotate.c
index db6528f2d3f2..8a51e4d95cc5 100644
--- a/drivers/video/console/fbcon_rotate.c
+++ b/drivers/video/fbdev/core/fbcon_rotate.c
@@ -110,7 +110,3 @@ void fbcon_set_rotate(struct fbcon_ops *ops)
}
}
EXPORT_SYMBOL(fbcon_set_rotate);
-
-MODULE_AUTHOR("Antonino Daplas <adaplas@pol.net>");
-MODULE_DESCRIPTION("Console Rotation Support");
-MODULE_LICENSE("GPL");
diff --git a/drivers/video/console/fbcon_rotate.h b/drivers/video/fbdev/core/fbcon_rotate.h
index e233444cda66..e233444cda66 100644
--- a/drivers/video/console/fbcon_rotate.h
+++ b/drivers/video/fbdev/core/fbcon_rotate.h
diff --git a/drivers/video/console/fbcon_ud.c b/drivers/video/fbdev/core/fbcon_ud.c
index 19e3714abfe8..f98eee263597 100644
--- a/drivers/video/console/fbcon_ud.c
+++ b/drivers/video/fbdev/core/fbcon_ud.c
@@ -220,7 +220,7 @@ static void ud_putcs(struct vc_data *vc, struct fb_info *info,
}
static void ud_clear_margins(struct vc_data *vc, struct fb_info *info,
- int bottom_only)
+ int color, int bottom_only)
{
unsigned int cw = vc->vc_font.width;
unsigned int ch = vc->vc_font.height;
@@ -228,7 +228,7 @@ static void ud_clear_margins(struct vc_data *vc, struct fb_info *info,
unsigned int bh = info->var.yres - (vc->vc_rows*ch);
struct fb_fillrect region;
- region.color = 0;
+ region.color = color;
region.rop = ROP_COPY;
if (rw && !bottom_only) {
@@ -446,7 +446,3 @@ void fbcon_rotate_ud(struct fbcon_ops *ops)
ops->update_start = ud_update_start;
}
EXPORT_SYMBOL(fbcon_rotate_ud);
-
-MODULE_AUTHOR("Antonino Daplas <adaplas@pol.net>");
-MODULE_DESCRIPTION("Console Rotation (180 degrees) Support");
-MODULE_LICENSE("GPL");
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
index 25e862c487f6..f741ba8df01b 100644
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
@@ -32,6 +32,7 @@
#include <linux/device.h>
#include <linux/efi.h>
#include <linux/fb.h>
+#include <linux/fbcon.h>
#include <linux/mem_encrypt.h>
#include <asm/fb.h>
@@ -316,7 +317,7 @@ static void fb_set_logo(struct fb_info *info,
for (i = 0; i < logo->height; i++) {
for (j = 0; j < logo->width; src++) {
d = *src ^ xor;
- for (k = 7; k >= 0; k--) {
+ for (k = 7; k >= 0 && j < logo->width; k--) {
*dst++ = ((d >> k) & 1) ? fg : 0;
j++;
}
@@ -463,7 +464,7 @@ static int fb_show_logo_line(struct fb_info *info, int rotate,
/* Return if the frame buffer is not mapped or suspended */
if (logo == NULL || info->state != FBINFO_STATE_RUNNING ||
- info->flags & FBINFO_MODULE)
+ info->fbops->owner)
return 0;
image.depth = 8;
@@ -601,7 +602,7 @@ int fb_prepare_logo(struct fb_info *info, int rotate)
memset(&fb_logo, 0, sizeof(struct logo_data));
if (info->flags & FBINFO_MISC_TILEBLITTING ||
- info->flags & FBINFO_MODULE)
+ info->fbops->owner)
return 0;
if (info->fix.visual == FB_VISUAL_DIRECTCOLOR) {
@@ -1892,6 +1893,9 @@ fbmem_init(void)
fb_class = NULL;
goto err_class;
}
+
+ fb_console_init();
+
return 0;
err_class:
@@ -1906,6 +1910,8 @@ module_init(fbmem_init);
static void __exit
fbmem_exit(void)
{
+ fb_console_exit();
+
remove_proc_entry("fb", NULL);
class_destroy(fb_class);
unregister_chrdev(FB_MAJOR, "fb");
diff --git a/drivers/video/fbdev/core/fbmon.c b/drivers/video/fbdev/core/fbmon.c
index 41d7979d81c5..2b2d67328514 100644
--- a/drivers/video/fbdev/core/fbmon.c
+++ b/drivers/video/fbdev/core/fbmon.c
@@ -1479,8 +1479,8 @@ int of_get_fb_videomode(struct device_node *np, struct fb_videomode *fb,
if (ret)
return ret;
- pr_debug("%s: got %dx%d display mode from %s\n",
- of_node_full_name(np), vm.hactive, vm.vactive, np->name);
+ pr_debug("%pOF: got %dx%d display mode from %s\n",
+ np, vm.hactive, vm.vactive, np->name);
dump_fb_videomode(fb);
return 0;
diff --git a/drivers/video/console/softcursor.c b/drivers/video/fbdev/core/softcursor.c
index 46dd8f5d2e9e..fc93f254498e 100644
--- a/drivers/video/console/softcursor.c
+++ b/drivers/video/fbdev/core/softcursor.c
@@ -76,7 +76,3 @@ int soft_cursor(struct fb_info *info, struct fb_cursor *cursor)
}
EXPORT_SYMBOL(soft_cursor);
-
-MODULE_AUTHOR("James Simmons <jsimmons@users.sf.net>");
-MODULE_DESCRIPTION("Generic software cursor");
-MODULE_LICENSE("GPL");
diff --git a/drivers/video/console/tileblit.c b/drivers/video/fbdev/core/tileblit.c
index 15e8e1a89c45..93390312957f 100644
--- a/drivers/video/console/tileblit.c
+++ b/drivers/video/fbdev/core/tileblit.c
@@ -74,7 +74,7 @@ static void tile_putcs(struct vc_data *vc, struct fb_info *info,
}
static void tile_clear_margins(struct vc_data *vc, struct fb_info *info,
- int bottom_only)
+ int color, int bottom_only)
{
return;
}
@@ -152,8 +152,3 @@ void fbcon_set_tileops(struct vc_data *vc, struct fb_info *info)
}
EXPORT_SYMBOL(fbcon_set_tileops);
-
-MODULE_AUTHOR("Antonino Daplas <adaplas@pol.net>");
-MODULE_DESCRIPTION("Tile Blitting Operation");
-MODULE_LICENSE("GPL");
-
diff --git a/drivers/video/fbdev/cyber2000fb.c b/drivers/video/fbdev/cyber2000fb.c
index 99acf538a8b8..9a5751cb4e16 100644
--- a/drivers/video/fbdev/cyber2000fb.c
+++ b/drivers/video/fbdev/cyber2000fb.c
@@ -1336,7 +1336,7 @@ static void cyber2000fb_i2c_unregister(struct cfb_info *cfb)
* These parameters give
* 640x480, hsync 31.5kHz, vsync 60Hz
*/
-static struct fb_videomode cyber2000fb_default_mode = {
+static const struct fb_videomode cyber2000fb_default_mode = {
.refresh = 60,
.xres = 640,
.yres = 480,
diff --git a/drivers/video/fbdev/da8xx-fb.c b/drivers/video/fbdev/da8xx-fb.c
index c229b1a0d13b..a74096c53cb5 100644
--- a/drivers/video/fbdev/da8xx-fb.c
+++ b/drivers/video/fbdev/da8xx-fb.c
@@ -1341,7 +1341,7 @@ static int fb_probe(struct platform_device *device)
{
struct da8xx_lcdc_platform_data *fb_pdata =
dev_get_platdata(&device->dev);
- static struct resource *lcdc_regs;
+ struct resource *lcdc_regs;
struct lcd_ctrl_config *lcd_cfg;
struct fb_videomode *lcdc_info;
struct fb_info *da8xx_fb_info;
diff --git a/drivers/video/fbdev/dnfb.c b/drivers/video/fbdev/dnfb.c
index 3526899da61b..7b1492d34e98 100644
--- a/drivers/video/fbdev/dnfb.c
+++ b/drivers/video/fbdev/dnfb.c
@@ -126,7 +126,7 @@ struct fb_var_screeninfo dnfb_var = {
.vmode = FB_VMODE_NONINTERLACED,
};
-static struct fb_fix_screeninfo dnfb_fix = {
+static const struct fb_fix_screeninfo dnfb_fix = {
.id = "Apollo Mono",
.smem_start = (FRAME_BUFFER_START + IO_BASE),
.smem_len = FRAME_BUFFER_LEN,
diff --git a/drivers/video/fbdev/fb-puv3.c b/drivers/video/fbdev/fb-puv3.c
index 88fa2e70a0bb..d9e816d53531 100644
--- a/drivers/video/fbdev/fb-puv3.c
+++ b/drivers/video/fbdev/fb-puv3.c
@@ -69,7 +69,7 @@ static const struct fb_videomode unifb_modes[] = {
0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
};
-static struct fb_var_screeninfo unifb_default = {
+static const struct fb_var_screeninfo unifb_default = {
.xres = 640,
.yres = 480,
.xres_virtual = 640,
diff --git a/drivers/video/fbdev/ffb.c b/drivers/video/fbdev/ffb.c
index dda31e0a45af..6b1915872af1 100644
--- a/drivers/video/fbdev/ffb.c
+++ b/drivers/video/fbdev/ffb.c
@@ -997,9 +997,9 @@ static int ffb_probe(struct platform_device *op)
dev_set_drvdata(&op->dev, info);
- printk(KERN_INFO "%s: %s at %016lx, type %d, "
+ printk(KERN_INFO "%pOF: %s at %016lx, type %d, "
"DAC pnum[%x] rev[%d] manuf_rev[%d]\n",
- dp->full_name,
+ dp,
((par->flags & FFB_FLAG_AFB) ? "AFB" : "FFB"),
par->physbase, par->board_type,
dac_pnum, dac_rev, dac_mrev);
diff --git a/drivers/video/fbdev/fm2fb.c b/drivers/video/fbdev/fm2fb.c
index e69d47af9932..ac7a4ebfd390 100644
--- a/drivers/video/fbdev/fm2fb.c
+++ b/drivers/video/fbdev/fm2fb.c
@@ -213,7 +213,7 @@ static int fm2fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
static int fm2fb_probe(struct zorro_dev *z, const struct zorro_device_id *id);
-static struct zorro_device_id fm2fb_devices[] = {
+static const struct zorro_device_id fm2fb_devices[] = {
{ ZORRO_PROD_BSC_FRAMEMASTER_II },
{ ZORRO_PROD_HELFRICH_RAINBOW_II },
{ 0 }
diff --git a/drivers/video/fbdev/geode/gxfb_core.c b/drivers/video/fbdev/geode/gxfb_core.c
index ec9fc9ac23de..f4f76373b2a8 100644
--- a/drivers/video/fbdev/geode/gxfb_core.c
+++ b/drivers/video/fbdev/geode/gxfb_core.c
@@ -474,7 +474,7 @@ static void gxfb_remove(struct pci_dev *pdev)
framebuffer_release(info);
}
-static struct pci_device_id gxfb_id_table[] = {
+static const struct pci_device_id gxfb_id_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_NS, PCI_DEVICE_ID_NS_GX_VIDEO) },
{ 0, }
};
diff --git a/drivers/video/fbdev/grvga.c b/drivers/video/fbdev/grvga.c
index b471f92969b1..8fc8f46dadeb 100644
--- a/drivers/video/fbdev/grvga.c
+++ b/drivers/video/fbdev/grvga.c
@@ -70,7 +70,7 @@ static const struct fb_videomode grvga_modedb[] = {
}
};
-static struct fb_fix_screeninfo grvga_fix = {
+static const struct fb_fix_screeninfo grvga_fix = {
.id = "AG SVGACTRL",
.type = FB_TYPE_PACKED_PIXELS,
.visual = FB_VISUAL_PSEUDOCOLOR,
diff --git a/drivers/video/fbdev/i810/i810_main.c b/drivers/video/fbdev/i810/i810_main.c
index 2488baab7c89..d18f7b31932c 100644
--- a/drivers/video/fbdev/i810/i810_main.c
+++ b/drivers/video/fbdev/i810/i810_main.c
@@ -107,7 +107,7 @@ static const char * const i810_pci_list[] = {
"Intel(R) 815 (Internal Graphics with AGP) Framebuffer Device"
};
-static struct pci_device_id i810fb_pci_tbl[] = {
+static const struct pci_device_id i810fb_pci_tbl[] = {
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG1,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82810_IG3,
@@ -1542,7 +1542,7 @@ static int i810fb_cursor(struct fb_info *info, struct fb_cursor *cursor)
return 0;
}
-static struct fb_ops i810fb_ops = {
+static const struct fb_ops i810fb_ops = {
.owner = THIS_MODULE,
.fb_open = i810fb_open,
.fb_release = i810fb_release,
diff --git a/drivers/video/fbdev/imsttfb.c b/drivers/video/fbdev/imsttfb.c
index 4363c64d74e8..ecdcf358ad5e 100644
--- a/drivers/video/fbdev/imsttfb.c
+++ b/drivers/video/fbdev/imsttfb.c
@@ -1318,7 +1318,7 @@ imsttfb_ioctl(struct fb_info *info, u_int cmd, u_long arg)
}
}
-static struct pci_device_id imsttfb_pci_tbl[] = {
+static const struct pci_device_id imsttfb_pci_tbl[] = {
{ PCI_VENDOR_ID_IMS, PCI_DEVICE_ID_IMS_TT128,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, IBM },
{ PCI_VENDOR_ID_IMS, PCI_DEVICE_ID_IMS_TT3D,
diff --git a/drivers/video/fbdev/intelfb/intelfbdrv.c b/drivers/video/fbdev/intelfb/intelfbdrv.c
index ffc391208b27..d7463a2a5d83 100644
--- a/drivers/video/fbdev/intelfb/intelfbdrv.c
+++ b/drivers/video/fbdev/intelfb/intelfbdrv.c
@@ -173,7 +173,7 @@ static int intelfb_set_fbinfo(struct intelfb_info *dinfo);
#define INTELFB_CLASS_MASK 0
#endif
-static struct pci_device_id intelfb_pci_table[] = {
+static const struct pci_device_id intelfb_pci_table[] = {
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_830M, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_830M },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_845G, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_845G },
{ PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_85XGM, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_DISPLAY_VGA << 8, INTELFB_CLASS_MASK, INTEL_85XGM },
diff --git a/drivers/video/fbdev/kyro/fbdev.c b/drivers/video/fbdev/kyro/fbdev.c
index f77478fb3d14..a7bd9f25911b 100644
--- a/drivers/video/fbdev/kyro/fbdev.c
+++ b/drivers/video/fbdev/kyro/fbdev.c
@@ -633,7 +633,7 @@ static int kyrofb_ioctl(struct fb_info *info,
return 0;
}
-static struct pci_device_id kyrofb_pci_tbl[] = {
+static const struct pci_device_id kyrofb_pci_tbl[] = {
{ PCI_VENDOR_ID_ST, PCI_DEVICE_ID_STG4000,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
{ 0, }
diff --git a/drivers/video/fbdev/leo.c b/drivers/video/fbdev/leo.c
index 62e59dc90ee6..71862188f528 100644
--- a/drivers/video/fbdev/leo.c
+++ b/drivers/video/fbdev/leo.c
@@ -619,8 +619,8 @@ static int leo_probe(struct platform_device *op)
dev_set_drvdata(&op->dev, info);
- printk(KERN_INFO "%s: leo at %lx:%lx\n",
- dp->full_name,
+ printk(KERN_INFO "%pOF: leo at %lx:%lx\n",
+ dp,
par->which_io, info->fix.smem_start);
return 0;
diff --git a/drivers/video/fbdev/matrox/matroxfb_base.c b/drivers/video/fbdev/matrox/matroxfb_base.c
index f6a0b9af97a9..b9b284d79631 100644
--- a/drivers/video/fbdev/matrox/matroxfb_base.c
+++ b/drivers/video/fbdev/matrox/matroxfb_base.c
@@ -1198,7 +1198,7 @@ static int matroxfb_blank(int blank, struct fb_info *info)
return 0;
}
-static struct fb_ops matroxfb_ops = {
+static const struct fb_ops matroxfb_ops = {
.owner = THIS_MODULE,
.fb_open = matroxfb_open,
.fb_release = matroxfb_release,
@@ -1573,14 +1573,14 @@ static struct board {
NULL}};
#ifndef MODULE
-static struct fb_videomode defaultmode = {
+static const struct fb_videomode defaultmode = {
/* 640x480 @ 60Hz, 31.5 kHz */
NULL, 60, 640, 480, 39721, 40, 24, 32, 11, 96, 2,
0, FB_VMODE_NONINTERLACED
};
-#endif /* !MODULE */
static int hotplug = 0;
+#endif /* !MODULE */
static void setDefaultOutputs(struct matrox_fb_info *minfo)
{
@@ -1623,7 +1623,7 @@ static int initMatrox2(struct matrox_fb_info *minfo, struct board *b)
unsigned int memsize;
int err;
- static struct pci_device_id intel_82437[] = {
+ static const struct pci_device_id intel_82437[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437) },
{ },
};
@@ -1794,9 +1794,7 @@ static int initMatrox2(struct matrox_fb_info *minfo, struct board *b)
minfo->fbops = matroxfb_ops;
minfo->fbcon.fbops = &minfo->fbops;
minfo->fbcon.pseudo_palette = minfo->cmap;
- /* after __init time we are like module... no logo */
- minfo->fbcon.flags = hotplug ? FBINFO_FLAG_MODULE : FBINFO_FLAG_DEFAULT;
- minfo->fbcon.flags |= FBINFO_PARTIAL_PAN_OK | /* Prefer panning for scroll under MC viewer/edit */
+ minfo->fbcon.flags = FBINFO_PARTIAL_PAN_OK | /* Prefer panning for scroll under MC viewer/edit */
FBINFO_HWACCEL_COPYAREA | /* We have hw-assisted bmove */
FBINFO_HWACCEL_FILLRECT | /* And fillrect */
FBINFO_HWACCEL_IMAGEBLIT | /* And imageblit */
@@ -2116,7 +2114,7 @@ static void pci_remove_matrox(struct pci_dev* pdev) {
matroxfb_remove(minfo, 1);
}
-static struct pci_device_id matroxfb_devices[] = {
+static const struct pci_device_id matroxfb_devices[] = {
#ifdef CONFIG_FB_MATROX_MILLENIUM
{PCI_VENDOR_ID_MATROX, PCI_DEVICE_ID_MATROX_MIL,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
diff --git a/drivers/video/fbdev/maxinefb.c b/drivers/video/fbdev/maxinefb.c
index cab7333208ea..5bb1b5c308a7 100644
--- a/drivers/video/fbdev/maxinefb.c
+++ b/drivers/video/fbdev/maxinefb.c
@@ -39,7 +39,7 @@
static struct fb_info fb_info;
-static struct fb_var_screeninfo maxinefb_defined = {
+static const struct fb_var_screeninfo maxinefb_defined = {
.xres = 1024,
.yres = 768,
.xres_virtual = 1024,
diff --git a/drivers/video/fbdev/mb862xx/mb862xxfbdrv.c b/drivers/video/fbdev/mb862xx/mb862xxfbdrv.c
index f9ec5c0484fa..cd372527c9e4 100644
--- a/drivers/video/fbdev/mb862xx/mb862xxfbdrv.c
+++ b/drivers/video/fbdev/mb862xx/mb862xxfbdrv.c
@@ -982,7 +982,7 @@ static inline int mb862xx_pci_gdc_init(struct mb862xxfb_par *par)
#define CHIP_ID(id) \
{ PCI_DEVICE(PCI_VENDOR_ID_FUJITSU_LIMITED, id) }
-static struct pci_device_id mb862xx_pci_tbl[] = {
+static const struct pci_device_id mb862xx_pci_tbl[] = {
/* MB86295/MB86296 */
CHIP_ID(PCI_DEVICE_ID_FUJITSU_CORALP),
CHIP_ID(PCI_DEVICE_ID_FUJITSU_CORALPA),
diff --git a/drivers/video/fbdev/mbx/mbxfb.c b/drivers/video/fbdev/mbx/mbxfb.c
index 698df9543e30..539b85da0897 100644
--- a/drivers/video/fbdev/mbx/mbxfb.c
+++ b/drivers/video/fbdev/mbx/mbxfb.c
@@ -79,7 +79,7 @@ struct mbxfb_info {
};
-static struct fb_var_screeninfo mbxfb_default = {
+static const struct fb_var_screeninfo mbxfb_default = {
.xres = 640,
.yres = 480,
.xres_virtual = 640,
@@ -102,7 +102,7 @@ static struct fb_var_screeninfo mbxfb_default = {
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
};
-static struct fb_fix_screeninfo mbxfb_fix = {
+static const struct fb_fix_screeninfo mbxfb_fix = {
.id = "MBX",
.type = FB_TYPE_PACKED_PIXELS,
.visual = FB_VISUAL_TRUECOLOR,
diff --git a/drivers/video/fbdev/neofb.c b/drivers/video/fbdev/neofb.c
index db023a97d1ea..5d3a444083f7 100644
--- a/drivers/video/fbdev/neofb.c
+++ b/drivers/video/fbdev/neofb.c
@@ -2138,7 +2138,7 @@ static void neofb_remove(struct pci_dev *dev)
}
}
-static struct pci_device_id neofb_devices[] = {
+static const struct pci_device_id neofb_devices[] = {
{PCI_VENDOR_ID_NEOMAGIC, PCI_CHIP_NM2070,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, FB_ACCEL_NEOMAGIC_NM2070},
diff --git a/drivers/video/fbdev/nvidia/nvidia.c b/drivers/video/fbdev/nvidia/nvidia.c
index ce7dab7299fe..418a2d0d06a9 100644
--- a/drivers/video/fbdev/nvidia/nvidia.c
+++ b/drivers/video/fbdev/nvidia/nvidia.c
@@ -55,7 +55,7 @@
/* HW cursor parameters */
#define MAX_CURS 32
-static struct pci_device_id nvidiafb_pci_tbl[] = {
+static const struct pci_device_id nvidiafb_pci_tbl[] = {
{PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
PCI_BASE_CLASS_DISPLAY << 16, 0xff0000, 0},
{ 0, }
diff --git a/drivers/video/fbdev/offb.c b/drivers/video/fbdev/offb.c
index 9be884b0c778..90d38de34479 100644
--- a/drivers/video/fbdev/offb.c
+++ b/drivers/video/fbdev/offb.c
@@ -383,7 +383,7 @@ static void offb_init_palette_hacks(struct fb_info *info, struct device_node *dp
FB_VISUAL_PSEUDOCOLOR : FB_VISUAL_STATIC_PSEUDOCOLOR;
}
-static void __init offb_init_fb(const char *name, const char *full_name,
+static void __init offb_init_fb(const char *name,
int width, int height, int depth,
int pitch, unsigned long address,
int foreign_endian, struct device_node *dp)
@@ -402,14 +402,13 @@ static void __init offb_init_fb(const char *name, const char *full_name,
"Using unsupported %dx%d %s at %lx, depth=%d, pitch=%d\n",
width, height, name, address, depth, pitch);
if (depth != 8 && depth != 15 && depth != 16 && depth != 32) {
- printk(KERN_ERR "%s: can't use depth = %d\n", full_name,
- depth);
+ printk(KERN_ERR "%pOF: can't use depth = %d\n", dp, depth);
release_mem_region(res_start, res_size);
return;
}
info = framebuffer_alloc(sizeof(u32) * 16, NULL);
-
+
if (info == 0) {
release_mem_region(res_start, res_size);
return;
@@ -515,7 +514,7 @@ static void __init offb_init_fb(const char *name, const char *full_name,
if (register_framebuffer(info) < 0)
goto out_err;
- fb_info(info, "Open Firmware frame buffer device on %s\n", full_name);
+ fb_info(info, "Open Firmware frame buffer device on %pOF\n", dp);
return;
out_err:
@@ -644,7 +643,6 @@ static void __init offb_init_nodriver(struct device_node *dp, int no_real_node)
if (strcmp(dp->name, "valkyrie") == 0)
address += 0x1000;
offb_init_fb(no_real_node ? "bootx" : dp->name,
- no_real_node ? "display" : dp->full_name,
width, height, depth, pitch, address,
foreign_endian, no_real_node ? NULL : dp);
}
diff --git a/drivers/video/fbdev/omap/lcd_mipid.c b/drivers/video/fbdev/omap/lcd_mipid.c
index df9e6ebcfad5..e3a85432f926 100644
--- a/drivers/video/fbdev/omap/lcd_mipid.c
+++ b/drivers/video/fbdev/omap/lcd_mipid.c
@@ -496,7 +496,7 @@ static void mipid_cleanup(struct lcd_panel *panel)
mipid_esd_stop_check(md);
}
-static struct lcd_panel mipid_panel = {
+static const struct lcd_panel mipid_panel = {
.config = OMAP_LCDC_PANEL_TFT,
.bpp = 16,
diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c
index f14691ce8d02..6cd759c01037 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-lgphilips-lb035q02.c
@@ -18,7 +18,7 @@
#include <video/omapfb_dss.h>
-static struct omap_video_timings lb035q02_timings = {
+static const struct omap_video_timings lb035q02_timings = {
.x_res = 320,
.y_res = 240,
diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c
index 468560a6daae..f2c2fef3db74 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-sony-acx565akm.c
@@ -509,7 +509,7 @@ static struct attribute *bldev_attrs[] = {
NULL,
};
-static struct attribute_group bldev_attr_group = {
+static const struct attribute_group bldev_attr_group = {
.attrs = bldev_attrs,
};
diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td028ttec1.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td028ttec1.c
index b529a8c2b652..57e9e146ff74 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td028ttec1.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td028ttec1.c
@@ -41,7 +41,7 @@ struct panel_drv_data {
struct spi_device *spi_dev;
};
-static struct omap_video_timings td028ttec1_panel_timings = {
+static const struct omap_video_timings td028ttec1_panel_timings = {
.x_res = 480,
.y_res = 640,
.pixelclock = 22153000,
diff --git a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c
index 51e628b85f4a..ea8c79a42b41 100644
--- a/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c
+++ b/drivers/video/fbdev/omap2/omapfb/displays/panel-tpo-td043mtea1.c
@@ -282,7 +282,7 @@ static struct attribute *tpo_td043_attrs[] = {
NULL,
};
-static struct attribute_group tpo_td043_attr_group = {
+static const struct attribute_group tpo_td043_attr_group = {
.attrs = tpo_td043_attrs,
};
diff --git a/drivers/video/fbdev/omap2/omapfb/dss/dss-of.c b/drivers/video/fbdev/omap2/omapfb/dss/dss-of.c
index d356a252ab4a..f1eb8b0f8a2a 100644
--- a/drivers/video/fbdev/omap2/omapfb/dss/dss-of.c
+++ b/drivers/video/fbdev/omap2/omapfb/dss/dss-of.c
@@ -16,6 +16,7 @@
#include <linux/err.h>
#include <linux/module.h>
#include <linux/of.h>
+#include <linux/of_graph.h>
#include <linux/seq_file.h>
#include <video/omapfb_dss.h>
@@ -128,7 +129,7 @@ static struct device_node *omapdss_of_get_remote_port(const struct device_node *
{
struct device_node *np;
- np = of_parse_phandle(node, "remote-endpoint", 0);
+ np = of_graph_get_remote_endpoint(node);
if (!np)
return NULL;
diff --git a/drivers/video/fbdev/p9100.c b/drivers/video/fbdev/p9100.c
index 1f6ee76af878..64de5cda541d 100644
--- a/drivers/video/fbdev/p9100.c
+++ b/drivers/video/fbdev/p9100.c
@@ -304,8 +304,8 @@ static int p9100_probe(struct platform_device *op)
dev_set_drvdata(&op->dev, info);
- printk(KERN_INFO "%s: p9100 at %lx:%lx\n",
- dp->full_name,
+ printk(KERN_INFO "%pOF: p9100 at %lx:%lx\n",
+ dp,
par->which_io, info->fix.smem_start);
return 0;
diff --git a/drivers/video/fbdev/pm2fb.c b/drivers/video/fbdev/pm2fb.c
index 1a4070f719c2..bd6c2f5f6095 100644
--- a/drivers/video/fbdev/pm2fb.c
+++ b/drivers/video/fbdev/pm2fb.c
@@ -1732,7 +1732,7 @@ static void pm2fb_remove(struct pci_dev *pdev)
framebuffer_release(info);
}
-static struct pci_device_id pm2fb_id_table[] = {
+static const struct pci_device_id pm2fb_id_table[] = {
{ PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_TVP4020,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
{ PCI_VENDOR_ID_3DLABS, PCI_DEVICE_ID_3DLABS_PERMEDIA2,
diff --git a/drivers/video/fbdev/pm3fb.c b/drivers/video/fbdev/pm3fb.c
index 6ff5077a2e15..6130aa56a1e9 100644
--- a/drivers/video/fbdev/pm3fb.c
+++ b/drivers/video/fbdev/pm3fb.c
@@ -1479,7 +1479,7 @@ static void pm3fb_remove(struct pci_dev *dev)
}
}
-static struct pci_device_id pm3fb_id_table[] = {
+static const struct pci_device_id pm3fb_id_table[] = {
{ PCI_VENDOR_ID_3DLABS, 0x0a,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
{ 0, }
diff --git a/drivers/video/fbdev/pmag-aa-fb.c b/drivers/video/fbdev/pmag-aa-fb.c
index 39922f072db4..ca7e9390d1e7 100644
--- a/drivers/video/fbdev/pmag-aa-fb.c
+++ b/drivers/video/fbdev/pmag-aa-fb.c
@@ -67,7 +67,7 @@ struct aafb_par {
struct bt431_regs __iomem *bt431;
};
-static struct fb_var_screeninfo aafb_defined = {
+static const struct fb_var_screeninfo aafb_defined = {
.xres = 1280,
.yres = 1024,
.xres_virtual = 2048,
@@ -90,7 +90,7 @@ static struct fb_var_screeninfo aafb_defined = {
.vmode = FB_VMODE_NONINTERLACED,
};
-static struct fb_fix_screeninfo aafb_fix = {
+static const struct fb_fix_screeninfo aafb_fix = {
.id = "PMAG-AA",
.smem_len = (2048 * 1024),
.type = FB_TYPE_PACKED_PIXELS,
diff --git a/drivers/video/fbdev/pmag-ba-fb.c b/drivers/video/fbdev/pmag-ba-fb.c
index 1fd02f40708e..3b9249449ea6 100644
--- a/drivers/video/fbdev/pmag-ba-fb.c
+++ b/drivers/video/fbdev/pmag-ba-fb.c
@@ -43,7 +43,7 @@ struct pmagbafb_par {
};
-static struct fb_var_screeninfo pmagbafb_defined = {
+static const struct fb_var_screeninfo pmagbafb_defined = {
.xres = 1024,
.yres = 864,
.xres_virtual = 1024,
@@ -67,7 +67,7 @@ static struct fb_var_screeninfo pmagbafb_defined = {
.vmode = FB_VMODE_NONINTERLACED,
};
-static struct fb_fix_screeninfo pmagbafb_fix = {
+static const struct fb_fix_screeninfo pmagbafb_fix = {
.id = "PMAG-BA",
.smem_len = (1024 * 1024),
.type = FB_TYPE_PACKED_PIXELS,
diff --git a/drivers/video/fbdev/pmagb-b-fb.c b/drivers/video/fbdev/pmagb-b-fb.c
index 46e96c451506..e58df36233c4 100644
--- a/drivers/video/fbdev/pmagb-b-fb.c
+++ b/drivers/video/fbdev/pmagb-b-fb.c
@@ -44,7 +44,7 @@ struct pmagbbfb_par {
};
-static struct fb_var_screeninfo pmagbbfb_defined = {
+static const struct fb_var_screeninfo pmagbbfb_defined = {
.bits_per_pixel = 8,
.red.length = 8,
.green.length = 8,
@@ -57,7 +57,7 @@ static struct fb_var_screeninfo pmagbbfb_defined = {
.vmode = FB_VMODE_NONINTERLACED,
};
-static struct fb_fix_screeninfo pmagbbfb_fix = {
+static const struct fb_fix_screeninfo pmagbbfb_fix = {
.id = "PMAGB-BA",
.smem_len = (2048 * 1024),
.type = FB_TYPE_PACKED_PIXELS,
diff --git a/drivers/video/fbdev/ps3fb.c b/drivers/video/fbdev/ps3fb.c
index b269abd932aa..5ed2db39d823 100644
--- a/drivers/video/fbdev/ps3fb.c
+++ b/drivers/video/fbdev/ps3fb.c
@@ -952,7 +952,7 @@ static struct fb_ops ps3fb_ops = {
.fb_compat_ioctl = ps3fb_ioctl
};
-static struct fb_fix_screeninfo ps3fb_fix = {
+static const struct fb_fix_screeninfo ps3fb_fix = {
.id = DEVICE_NAME,
.type = FB_TYPE_PACKED_PIXELS,
.visual = FB_VISUAL_TRUECOLOR,
diff --git a/drivers/video/fbdev/pvr2fb.c b/drivers/video/fbdev/pvr2fb.c
index a2564ab91e62..867c5218968f 100644
--- a/drivers/video/fbdev/pvr2fb.c
+++ b/drivers/video/fbdev/pvr2fb.c
@@ -154,7 +154,7 @@ static struct fb_fix_screeninfo pvr2_fix = {
.accel = FB_ACCEL_NONE,
};
-static struct fb_var_screeninfo pvr2_var = {
+static const struct fb_var_screeninfo pvr2_var = {
.xres = 640,
.yres = 480,
.xres_virtual = 640,
@@ -966,7 +966,7 @@ static void pvr2fb_pci_remove(struct pci_dev *pdev)
pci_release_regions(pdev);
}
-static struct pci_device_id pvr2fb_pci_tbl[] = {
+static const struct pci_device_id pvr2fb_pci_tbl[] = {
{ PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_NEON250,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
{ 0, },
diff --git a/drivers/video/fbdev/pxa3xx-gcu.c b/drivers/video/fbdev/pxa3xx-gcu.c
index 50bce45e7f3d..933619da1a94 100644
--- a/drivers/video/fbdev/pxa3xx-gcu.c
+++ b/drivers/video/fbdev/pxa3xx-gcu.c
@@ -626,8 +626,8 @@ static int pxa3xx_gcu_probe(struct platform_device *pdev)
/* request the IRQ */
irq = platform_get_irq(pdev, 0);
if (irq < 0) {
- dev_err(dev, "no IRQ defined\n");
- return -ENODEV;
+ dev_err(dev, "no IRQ defined: %d\n", irq);
+ return irq;
}
ret = devm_request_irq(dev, irq, pxa3xx_gcu_handle_irq,
diff --git a/drivers/video/fbdev/q40fb.c b/drivers/video/fbdev/q40fb.c
index 04ea330ccf5d..0b93aa964d43 100644
--- a/drivers/video/fbdev/q40fb.c
+++ b/drivers/video/fbdev/q40fb.c
@@ -36,7 +36,7 @@ static struct fb_fix_screeninfo q40fb_fix = {
.accel = FB_ACCEL_NONE,
};
-static struct fb_var_screeninfo q40fb_var = {
+static const struct fb_var_screeninfo q40fb_var = {
.xres = 1024,
.yres = 512,
.xres_virtual = 1024,
diff --git a/drivers/video/fbdev/riva/fbdev.c b/drivers/video/fbdev/riva/fbdev.c
index 2ef26ad99341..1ea78bb911fb 100644
--- a/drivers/video/fbdev/riva/fbdev.c
+++ b/drivers/video/fbdev/riva/fbdev.c
@@ -101,7 +101,7 @@ static int rivafb_blank(int blank, struct fb_info *info);
*
* ------------------------------------------------------------------------- */
-static struct pci_device_id rivafb_pci_tbl[] = {
+static const struct pci_device_id rivafb_pci_tbl[] = {
{ PCI_VENDOR_ID_NVIDIA_SGS, PCI_DEVICE_ID_NVIDIA_SGS_RIVA128,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_TNT,
diff --git a/drivers/video/fbdev/s3fb.c b/drivers/video/fbdev/s3fb.c
index 13b109073c63..d63f23e26f7d 100644
--- a/drivers/video/fbdev/s3fb.c
+++ b/drivers/video/fbdev/s3fb.c
@@ -1483,7 +1483,7 @@ static int s3_pci_resume(struct pci_dev* dev)
/* List of boards that we are trying to support */
-static struct pci_device_id s3_devices[] = {
+static const struct pci_device_id s3_devices[] = {
{PCI_DEVICE(PCI_VENDOR_ID_S3, 0x8810), .driver_data = CHIP_XXX_TRIO},
{PCI_DEVICE(PCI_VENDOR_ID_S3, 0x8811), .driver_data = CHIP_XXX_TRIO},
{PCI_DEVICE(PCI_VENDOR_ID_S3, 0x8812), .driver_data = CHIP_M65_AURORA64VP},
diff --git a/drivers/video/fbdev/savage/savagefb_driver.c b/drivers/video/fbdev/savage/savagefb_driver.c
index c30a91c1137c..c20468362f11 100644
--- a/drivers/video/fbdev/savage/savagefb_driver.c
+++ b/drivers/video/fbdev/savage/savagefb_driver.c
@@ -2429,7 +2429,7 @@ static int savagefb_resume(struct pci_dev* dev)
}
-static struct pci_device_id savagefb_devices[] = {
+static const struct pci_device_id savagefb_devices[] = {
{PCI_VENDOR_ID_S3, PCI_CHIP_SUPSAV_MX128,
PCI_ANY_ID, PCI_ANY_ID, 0, 0, FB_ACCEL_SUPERSAVAGE},
diff --git a/drivers/video/fbdev/sis/init301.c b/drivers/video/fbdev/sis/init301.c
index 20f7234e809e..1ec9c3e0e1d8 100644
--- a/drivers/video/fbdev/sis/init301.c
+++ b/drivers/video/fbdev/sis/init301.c
@@ -6848,8 +6848,6 @@ SiS_SetGroup2(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short
if(SiS_Pr->SiS_VGAHDE >= 1280) {
tempch = 20;
tempbx &= ~0x20;
- } else if(SiS_Pr->SiS_VGAHDE >= 1024) {
- tempch = 25;
} else {
tempch = 25; /* OK */
}
@@ -7964,14 +7962,9 @@ SiS_SetCHTVReg(struct SiS_Private *SiS_Pr, unsigned short ModeNo, unsigned short
}
}
} else { /* ---- PAL ---- */
- /* We don't play around with FSCI in PAL mode */
- if(resindex == 0x04) {
- SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
- SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE); /* ACIV on */
- } else {
- SiS_SetCH70xxANDOR(SiS_Pr,0x20,0x00,0xEF); /* loop filter off */
- SiS_SetCH70xxANDOR(SiS_Pr,0x21,0x01,0xFE); /* ACIV on */
- }
+ /* We don't play around with FSCI in PAL mode */
+ SiS_SetCH70xxANDOR(SiS_Pr, 0x20, 0x00, 0xEF); /* loop filter off */
+ SiS_SetCH70xxANDOR(SiS_Pr, 0x21, 0x01, 0xFE); /* ACIV on */
}
#endif /* 300 */
@@ -9657,8 +9650,6 @@ SetDelayComp(struct SiS_Private *SiS_Pr, unsigned short ModeNo)
delay = 0x0a;
} else if(IS_SIS740) {
delay = 0x00;
- } else if(SiS_Pr->ChipType < SIS_330) {
- delay = 0x0c;
} else {
delay = 0x0c;
}
diff --git a/drivers/video/fbdev/skeletonfb.c b/drivers/video/fbdev/skeletonfb.c
index e219a0a22077..7f4e908330bf 100644
--- a/drivers/video/fbdev/skeletonfb.c
+++ b/drivers/video/fbdev/skeletonfb.c
@@ -84,7 +84,7 @@ struct xxx_par;
* if we don't use modedb. If we do use modedb see xxxfb_init how to use it
* to get a fb_var_screeninfo. Otherwise define a default var as well.
*/
-static struct fb_fix_screeninfo xxxfb_fix = {
+static const struct fb_fix_screeninfo xxxfb_fix = {
.id = "FB's name",
.type = FB_TYPE_PACKED_PIXELS,
.visual = FB_VISUAL_PSEUDOCOLOR,
@@ -866,7 +866,7 @@ static int xxxfb_resume(struct pci_dev *dev)
#define xxxfb_resume NULL
#endif /* CONFIG_PM */
-static struct pci_device_id xxxfb_id_table[] = {
+static const struct pci_device_id xxxfb_id_table[] = {
{ PCI_VENDOR_ID_XXX, PCI_DEVICE_ID_XXX,
PCI_ANY_ID, PCI_ANY_ID, PCI_BASE_CLASS_DISPLAY << 16,
PCI_CLASS_MASK, 0 },
diff --git a/drivers/video/fbdev/sm501fb.c b/drivers/video/fbdev/sm501fb.c
index 67e314fdd947..076dd2711630 100644
--- a/drivers/video/fbdev/sm501fb.c
+++ b/drivers/video/fbdev/sm501fb.c
@@ -46,7 +46,7 @@
static char *fb_mode = "640x480-16@60";
static unsigned long default_bpp = 16;
-static struct fb_videomode sm501_default_mode = {
+static const struct fb_videomode sm501_default_mode = {
.refresh = 60,
.xres = 640,
.yres = 480,
diff --git a/drivers/video/fbdev/sm712fb.c b/drivers/video/fbdev/sm712fb.c
index 73cb4ffff3c5..502d0de2feec 100644
--- a/drivers/video/fbdev/sm712fb.c
+++ b/drivers/video/fbdev/sm712fb.c
@@ -33,8 +33,8 @@
#include "sm712.h"
/*
-* Private structure
-*/
+ * Private structure
+ */
struct smtcfb_info {
struct pci_dev *pdev;
struct fb_info *fb;
@@ -785,7 +785,7 @@ static void __init sm7xx_vga_setup(char *options)
smtc_scr_info.lfb_height = 0;
smtc_scr_info.lfb_depth = 0;
- pr_debug("sm7xx_vga_setup = %s\n", options);
+ pr_debug("%s = %s\n", __func__, options);
for (i = 0; i < ARRAY_SIZE(vesa_mode_table); i++) {
if (strstr(options, vesa_mode_table[i].index)) {
@@ -798,8 +798,8 @@ static void __init sm7xx_vga_setup(char *options)
}
}
-static void sm712_setpalette(int regno, unsigned red, unsigned green,
- unsigned blue, struct fb_info *info)
+static void sm712_setpalette(int regno, unsigned int red, unsigned int green,
+ unsigned int blue, struct fb_info *info)
{
/* set bit 5:4 = 01 (write LCD RAM only) */
smtc_seqw(0x66, (smtc_seqr(0x66) & 0xC3) | 0x10);
@@ -896,8 +896,9 @@ static int smtc_blank(int blank_mode, struct fb_info *info)
return 0;
}
-static int smtc_setcolreg(unsigned regno, unsigned red, unsigned green,
- unsigned blue, unsigned trans, struct fb_info *info)
+static int smtc_setcolreg(unsigned int regno, unsigned int red,
+ unsigned int green, unsigned int blue,
+ unsigned int trans, struct fb_info *info)
{
struct smtcfb_info *sfb;
u32 val;
@@ -1477,7 +1478,7 @@ static int smtcfb_pci_probe(struct pci_dev *pdev,
}
/* can support 32 bpp */
- if (15 == sfb->fb->var.bits_per_pixel)
+ if (sfb->fb->var.bits_per_pixel == 15)
sfb->fb->var.bits_per_pixel = 16;
sfb->fb->var.xres_virtual = sfb->fb->var.xres;
diff --git a/drivers/video/fbdev/smscufx.c b/drivers/video/fbdev/smscufx.c
index 449fceaf79d5..2275e80b5776 100644
--- a/drivers/video/fbdev/smscufx.c
+++ b/drivers/video/fbdev/smscufx.c
@@ -122,7 +122,7 @@ static const u32 smscufx_info_flags = FBINFO_DEFAULT | FBINFO_READS_FAST |
FBINFO_VIRTFB | FBINFO_HWACCEL_IMAGEBLIT | FBINFO_HWACCEL_FILLRECT |
FBINFO_HWACCEL_COPYAREA | FBINFO_MISC_ALWAYS_SETPAR;
-static struct usb_device_id id_table[] = {
+static const struct usb_device_id id_table[] = {
{USB_DEVICE(0x0424, 0x9d00),},
{USB_DEVICE(0x0424, 0x9d01),},
{},
diff --git a/drivers/video/fbdev/sunxvr1000.c b/drivers/video/fbdev/sunxvr1000.c
index fb37f6e05391..8fe37c0ef2f5 100644
--- a/drivers/video/fbdev/sunxvr1000.c
+++ b/drivers/video/fbdev/sunxvr1000.c
@@ -33,8 +33,8 @@ static int gfb_get_props(struct gfb_info *gp)
gp->depth = of_getintprop_default(gp->of_node, "depth", 32);
if (!gp->width || !gp->height) {
- printk(KERN_ERR "gfb: Critical properties missing for %s\n",
- gp->of_node->full_name);
+ printk(KERN_ERR "gfb: Critical properties missing for %pOF\n",
+ gp->of_node);
return -EINVAL;
}
@@ -151,12 +151,12 @@ static int gfb_probe(struct platform_device *op)
if (err)
goto err_unmap_fb;
- printk("gfb: Found device at %s\n", dp->full_name);
+ printk("gfb: Found device at %pOF\n", dp);
err = register_framebuffer(info);
if (err < 0) {
- printk(KERN_ERR "gfb: Could not register framebuffer %s\n",
- dp->full_name);
+ printk(KERN_ERR "gfb: Could not register framebuffer %pOF\n",
+ dp);
goto err_unmap_fb;
}
diff --git a/drivers/video/fbdev/sunxvr2500.c b/drivers/video/fbdev/sunxvr2500.c
index 1a053292f2eb..544465ba1dc0 100644
--- a/drivers/video/fbdev/sunxvr2500.c
+++ b/drivers/video/fbdev/sunxvr2500.c
@@ -220,7 +220,7 @@ err_out:
return err;
}
-static struct pci_device_id s3d_pci_table[] = {
+static const struct pci_device_id s3d_pci_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x002c), },
{ PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x002d), },
{ PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x002e), },
diff --git a/drivers/video/fbdev/sunxvr500.c b/drivers/video/fbdev/sunxvr500.c
index dc0d886e4e7e..bc595937df08 100644
--- a/drivers/video/fbdev/sunxvr500.c
+++ b/drivers/video/fbdev/sunxvr500.c
@@ -393,7 +393,7 @@ err_out:
return err;
}
-static struct pci_device_id e3d_pci_table[] = {
+static const struct pci_device_id e3d_pci_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a0), },
{ PCI_DEVICE(0x1091, 0x7a0), },
{ PCI_DEVICE(PCI_VENDOR_ID_3DLABS, 0x7a2), },
diff --git a/drivers/video/fbdev/tcx.c b/drivers/video/fbdev/tcx.c
index 54ad08854c94..c98d8a569ccd 100644
--- a/drivers/video/fbdev/tcx.c
+++ b/drivers/video/fbdev/tcx.c
@@ -467,8 +467,8 @@ static int tcx_probe(struct platform_device *op)
dev_set_drvdata(&op->dev, info);
- printk(KERN_INFO "%s: TCX at %lx:%lx, %s\n",
- dp->full_name,
+ printk(KERN_INFO "%pOF: TCX at %lx:%lx, %s\n",
+ dp,
par->which_io,
info->fix.smem_start,
par->lowdepth ? "8-bit only" : "24-bit depth");
diff --git a/drivers/video/fbdev/tdfxfb.c b/drivers/video/fbdev/tdfxfb.c
index d5fa313806fe..dec1fed9880e 100644
--- a/drivers/video/fbdev/tdfxfb.c
+++ b/drivers/video/fbdev/tdfxfb.c
@@ -120,7 +120,7 @@ static const struct fb_var_screeninfo tdfx_var = {
static int tdfxfb_probe(struct pci_dev *pdev, const struct pci_device_id *id);
static void tdfxfb_remove(struct pci_dev *pdev);
-static struct pci_device_id tdfxfb_id_table[] = {
+static const struct pci_device_id tdfxfb_id_table[] = {
{ PCI_VENDOR_ID_3DFX, PCI_DEVICE_ID_3DFX_BANSHEE,
PCI_ANY_ID, PCI_ANY_ID, PCI_BASE_CLASS_DISPLAY << 16,
0xff0000, 0 },
diff --git a/drivers/video/fbdev/tridentfb.c b/drivers/video/fbdev/tridentfb.c
index 8a5bbc13082e..284706184b1b 100644
--- a/drivers/video/fbdev/tridentfb.c
+++ b/drivers/video/fbdev/tridentfb.c
@@ -1737,7 +1737,7 @@ static void trident_pci_remove(struct pci_dev *dev)
}
/* List of boards that we are trying to support */
-static struct pci_device_id trident_devices[] = {
+static const struct pci_device_id trident_devices[] = {
{PCI_VENDOR_ID_TRIDENT, BLADE3D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{PCI_VENDOR_ID_TRIDENT, CYBERBLADEi7, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{PCI_VENDOR_ID_TRIDENT, CYBERBLADEi7D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
diff --git a/drivers/video/fbdev/udlfb.c b/drivers/video/fbdev/udlfb.c
index 05ef657235df..ef08a104fb42 100644
--- a/drivers/video/fbdev/udlfb.c
+++ b/drivers/video/fbdev/udlfb.c
@@ -54,7 +54,7 @@ static const u32 udlfb_info_flags = FBINFO_DEFAULT | FBINFO_READS_FAST |
* which is compatible with all known USB 2.0 era graphics chips and firmware,
* but allows DisplayLink to increment those for any future incompatible chips
*/
-static struct usb_device_id id_table[] = {
+static const struct usb_device_id id_table[] = {
{.idVendor = 0x17e9,
.bInterfaceClass = 0xff,
.bInterfaceSubClass = 0x00,
@@ -1465,7 +1465,7 @@ static ssize_t metrics_reset_store(struct device *fbdev,
return count;
}
-static struct bin_attribute edid_attr = {
+static const struct bin_attribute edid_attr = {
.attr.name = "edid",
.attr.mode = 0666,
.size = EDID_LENGTH,
@@ -1655,7 +1655,6 @@ static int dlfb_usb_probe(struct usb_interface *interface,
error:
if (dev) {
- kref_put(&dev->kref, dlfb_free); /* ref for framebuffer */
kref_put(&dev->kref, dlfb_free); /* last ref from kref_init */
/* dev has been deallocated. Do not dereference */
diff --git a/drivers/video/fbdev/uvesafb.c b/drivers/video/fbdev/uvesafb.c
index 6f8c0b9fc558..73676eb0244a 100644
--- a/drivers/video/fbdev/uvesafb.c
+++ b/drivers/video/fbdev/uvesafb.c
@@ -1666,7 +1666,7 @@ static struct attribute *uvesafb_dev_attrs[] = {
NULL,
};
-static struct attribute_group uvesafb_dev_attgrp = {
+static const struct attribute_group uvesafb_dev_attgrp = {
.name = NULL,
.attrs = uvesafb_dev_attrs,
};
diff --git a/drivers/video/fbdev/vermilion/vermilion.c b/drivers/video/fbdev/vermilion/vermilion.c
index ce4c4729a5e8..6f8d444eb0e3 100644
--- a/drivers/video/fbdev/vermilion/vermilion.c
+++ b/drivers/video/fbdev/vermilion/vermilion.c
@@ -55,7 +55,7 @@ static struct list_head global_has_mode;
static struct fb_ops vmlfb_ops;
static struct vml_sys *subsys = NULL;
static char *vml_default_mode = "1024x768@60";
-static struct fb_videomode defaultmode = {
+static const struct fb_videomode defaultmode = {
NULL, 60, 1024, 768, 12896, 144, 24, 29, 3, 136, 6,
0, FB_VMODE_NONINTERLACED
};
@@ -1044,7 +1044,7 @@ static struct fb_ops vmlfb_ops = {
.fb_setcolreg = vmlfb_setcolreg
};
-static struct pci_device_id vml_ids[] = {
+static const struct pci_device_id vml_ids[] = {
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, VML_DEVICE_VDC)},
{0}
};
diff --git a/drivers/video/fbdev/via/via-core.c b/drivers/video/fbdev/via/via-core.c
index 1d28e16888e9..77774d8abf94 100644
--- a/drivers/video/fbdev/via/via-core.c
+++ b/drivers/video/fbdev/via/via-core.c
@@ -724,7 +724,7 @@ static void via_pci_remove(struct pci_dev *pdev)
}
-static struct pci_device_id via_pci_table[] = {
+static const struct pci_device_id via_pci_table[] = {
{ PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CLE266_DID),
.driver_data = UNICHROME_CLE266 },
{ PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K400_DID),
diff --git a/drivers/video/fbdev/vt8623fb.c b/drivers/video/fbdev/vt8623fb.c
index dd0f18e42d3e..5cac871db3ee 100644
--- a/drivers/video/fbdev/vt8623fb.c
+++ b/drivers/video/fbdev/vt8623fb.c
@@ -81,7 +81,7 @@ static struct vga_regset vt8623_line_compare_regs[] = {{0x18, 0, 7}, {0x07, 4,
static struct vga_regset vt8623_fetch_count_regs[] = {{0x1C, 0, 7}, {0x1D, 0, 1}, VGA_REGSET_END};
static struct vga_regset vt8623_start_address_regs[] = {{0x0d, 0, 7}, {0x0c, 0, 7}, {0x34, 0, 7}, {0x48, 0, 1}, VGA_REGSET_END};
-static struct svga_timing_regs vt8623_timing_regs = {
+static const struct svga_timing_regs vt8623_timing_regs = {
vt8623_h_total_regs, vt8623_h_display_regs, vt8623_h_blank_start_regs,
vt8623_h_blank_end_regs, vt8623_h_sync_start_regs, vt8623_h_sync_end_regs,
vt8623_v_total_regs, vt8623_v_display_regs, vt8623_v_blank_start_regs,
@@ -888,7 +888,7 @@ fail:
/* List of boards that we are trying to support */
-static struct pci_device_id vt8623_devices[] = {
+static const struct pci_device_id vt8623_devices[] = {
{PCI_DEVICE(PCI_VENDOR_ID_VIA, 0x3122)},
{0, 0, 0, 0, 0, 0, 0}
};
diff --git a/drivers/video/fbdev/xilinxfb.c b/drivers/video/fbdev/xilinxfb.c
index 17dc119c7a98..8628829b470d 100644
--- a/drivers/video/fbdev/xilinxfb.c
+++ b/drivers/video/fbdev/xilinxfb.c
@@ -41,7 +41,6 @@
#define DRIVER_NAME "xilinxfb"
-
/*
* Xilinx calls it "TFT LCD Controller" though it can also be used for
* the VGA port on the Xilinx ML40x board. This is a hardware display
@@ -92,15 +91,16 @@ struct xilinxfb_platform_data {
u32 xvirt, yvirt; /* resolution of memory buffer */
/* Physical address of framebuffer memory; If non-zero, driver
- * will use provided memory address instead of allocating one from
- * the consistent pool. */
+ * will use provided memory address instead of allocating one from
+ * the consistent pool.
+ */
u32 fb_phys;
};
/*
* Default xilinxfb configuration
*/
-static struct xilinxfb_platform_data xilinx_fb_default_pdata = {
+static const struct xilinxfb_platform_data xilinx_fb_default_pdata = {
.xres = 640,
.yres = 480,
.xvirt = 1024,
@@ -110,14 +110,14 @@ static struct xilinxfb_platform_data xilinx_fb_default_pdata = {
/*
* Here are the default fb_fix_screeninfo and fb_var_screeninfo structures
*/
-static struct fb_fix_screeninfo xilinx_fb_fix = {
+static const struct fb_fix_screeninfo xilinx_fb_fix = {
.id = "Xilinx",
.type = FB_TYPE_PACKED_PIXELS,
.visual = FB_VISUAL_TRUECOLOR,
.accel = FB_ACCEL_NONE
};
-static struct fb_var_screeninfo xilinx_fb_var = {
+static const struct fb_var_screeninfo xilinx_fb_var = {
.bits_per_pixel = BITS_PER_PIXEL,
.red = { RED_SHIFT, 8, 0 },
@@ -128,18 +128,18 @@ static struct fb_var_screeninfo xilinx_fb_var = {
.activate = FB_ACTIVATE_NOW
};
-
#define BUS_ACCESS_FLAG 0x1 /* 1 = BUS, 0 = DCR */
#define LITTLE_ENDIAN_ACCESS 0x2 /* LITTLE ENDIAN IO functions */
struct xilinxfb_drvdata {
-
struct fb_info info; /* FB driver info record */
phys_addr_t regs_phys; /* phys. address of the control
- registers */
+ * registers
+ */
void __iomem *regs; /* virt. address of the control
- registers */
+ * registers
+ */
#ifdef CONFIG_PPC_DCR
dcr_host_t dcr_host;
unsigned int dcr_len;
@@ -148,7 +148,7 @@ struct xilinxfb_drvdata {
dma_addr_t fb_phys; /* phys. address of the frame buffer */
int fb_alloced; /* Flag, was the fb memory alloced? */
- u8 flags; /* features of the driver */
+ u8 flags; /* features of the driver */
u32 reg_ctrl_default;
@@ -165,7 +165,7 @@ struct xilinxfb_drvdata {
* which bus its connected and call the appropriate write API.
*/
static void xilinx_fb_out32(struct xilinxfb_drvdata *drvdata, u32 offset,
- u32 val)
+ u32 val)
{
if (drvdata->flags & BUS_ACCESS_FLAG) {
if (drvdata->flags & LITTLE_ENDIAN_ACCESS)
@@ -195,8 +195,8 @@ static u32 xilinx_fb_in32(struct xilinxfb_drvdata *drvdata, u32 offset)
}
static int
-xilinx_fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue,
- unsigned transp, struct fb_info *fbi)
+xilinx_fb_setcolreg(unsigned int regno, unsigned int red, unsigned int green,
+ unsigned int blue, unsigned int transp, struct fb_info *fbi)
{
u32 *palette = fbi->pseudo_palette;
@@ -205,9 +205,11 @@ xilinx_fb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue,
if (fbi->var.grayscale) {
/* Convert color to grayscale.
- * grayscale = 0.30*R + 0.59*G + 0.11*B */
- red = green = blue =
- (red * 77 + green * 151 + blue * 28 + 127) >> 8;
+ * grayscale = 0.30*R + 0.59*G + 0.11*B
+ */
+ blue = (red * 77 + green * 151 + blue * 28 + 127) >> 8;
+ green = blue;
+ red = green;
}
/* fbi->fix.visual is always FB_VISUAL_TRUECOLOR */
@@ -241,13 +243,11 @@ xilinx_fb_blank(int blank_mode, struct fb_info *fbi)
xilinx_fb_out32(drvdata, REG_CTRL, 0);
default:
break;
-
}
return 0; /* success */
}
-static struct fb_ops xilinxfb_ops =
-{
+static struct fb_ops xilinxfb_ops = {
.owner = THIS_MODULE,
.fb_setcolreg = xilinx_fb_setcolreg,
.fb_blank = xilinx_fb_blank,
@@ -286,7 +286,8 @@ static int xilinxfb_assign(struct platform_device *pdev,
} else {
drvdata->fb_alloced = 1;
drvdata->fb_virt = dma_alloc_coherent(dev, PAGE_ALIGN(fbsize),
- &drvdata->fb_phys, GFP_KERNEL);
+ &drvdata->fb_phys,
+ GFP_KERNEL);
}
if (!drvdata->fb_virt) {
@@ -300,7 +301,7 @@ static int xilinxfb_assign(struct platform_device *pdev,
/* Tell the hardware where the frame buffer is */
xilinx_fb_out32(drvdata, REG_FB_ADDR, drvdata->fb_phys);
rc = xilinx_fb_in32(drvdata, REG_FB_ADDR);
- /* Endianess detection */
+ /* Endianness detection */
if (rc != drvdata->fb_phys) {
drvdata->flags |= LITTLE_ENDIAN_ACCESS;
xilinx_fb_out32(drvdata, REG_FB_ADDR, drvdata->fb_phys);
@@ -310,8 +311,7 @@ static int xilinxfb_assign(struct platform_device *pdev,
drvdata->reg_ctrl_default = REG_CTRL_ENABLE;
if (pdata->rotate_screen)
drvdata->reg_ctrl_default |= REG_CTRL_ROTATE;
- xilinx_fb_out32(drvdata, REG_CTRL,
- drvdata->reg_ctrl_default);
+ xilinx_fb_out32(drvdata, REG_CTRL, drvdata->reg_ctrl_default);
/* Fill struct fb_info */
drvdata->info.device = dev;
@@ -364,7 +364,7 @@ err_regfb:
err_cmap:
if (drvdata->fb_alloced)
dma_free_coherent(dev, PAGE_ALIGN(fbsize), drvdata->fb_virt,
- drvdata->fb_phys);
+ drvdata->fb_phys);
else
iounmap(drvdata->fb_virt);
@@ -435,12 +435,12 @@ static int xilinxfb_of_probe(struct platform_device *pdev)
* Fill the resource structure if its direct BUS interface
* otherwise fill the dcr_host structure.
*/
- if (tft_access) {
+ if (tft_access)
drvdata->flags |= BUS_ACCESS_FLAG;
- }
#ifdef CONFIG_PPC_DCR
else {
int start;
+
start = dcr_resource_start(pdev->dev.of_node, 0);
drvdata->dcr_len = dcr_resource_len(pdev->dev.of_node, 0);
drvdata->dcr_host = dcr_map(pdev->dev.of_node, start, drvdata->dcr_len);
@@ -452,19 +452,19 @@ static int xilinxfb_of_probe(struct platform_device *pdev)
#endif
prop = of_get_property(pdev->dev.of_node, "phys-size", &size);
- if ((prop) && (size >= sizeof(u32)*2)) {
+ if ((prop) && (size >= sizeof(u32) * 2)) {
pdata.screen_width_mm = prop[0];
pdata.screen_height_mm = prop[1];
}
prop = of_get_property(pdev->dev.of_node, "resolution", &size);
- if ((prop) && (size >= sizeof(u32)*2)) {
+ if ((prop) && (size >= sizeof(u32) * 2)) {
pdata.xres = prop[0];
pdata.yres = prop[1];
}
prop = of_get_property(pdev->dev.of_node, "virtual-resolution", &size);
- if ((prop) && (size >= sizeof(u32)*2)) {
+ if ((prop) && (size >= sizeof(u32) * 2)) {
pdata.xvirt = prop[0];
pdata.yvirt = prop[1];
}
@@ -482,7 +482,7 @@ static int xilinxfb_of_remove(struct platform_device *op)
}
/* Match table for of_platform binding */
-static struct of_device_id xilinxfb_of_match[] = {
+static const struct of_device_id xilinxfb_of_match[] = {
{ .compatible = "xlnx,xps-tft-1.00.a", },
{ .compatible = "xlnx,xps-tft-2.00.a", },
{ .compatible = "xlnx,xps-tft-2.01.a", },
diff --git a/drivers/video/of_display_timing.c b/drivers/video/of_display_timing.c
index 32b0a7543433..8ce0a99bf17c 100644
--- a/drivers/video/of_display_timing.c
+++ b/drivers/video/of_display_timing.c
@@ -31,8 +31,7 @@ static int parse_timing_property(const struct device_node *np, const char *name,
prop = of_find_property(np, name, &length);
if (!prop) {
- pr_err("%s: could not find property %s\n",
- of_node_full_name(np), name);
+ pr_err("%pOF: could not find property %s\n", np, name);
return -EINVAL;
}
@@ -44,8 +43,7 @@ static int parse_timing_property(const struct device_node *np, const char *name,
} else if (cells == 3) {
ret = of_property_read_u32_array(np, name, &result->min, cells);
} else {
- pr_err("%s: illegal timing specification in %s\n",
- of_node_full_name(np), name);
+ pr_err("%pOF: illegal timing specification in %s\n", np, name);
return -EINVAL;
}
@@ -105,8 +103,7 @@ static int of_parse_display_timing(const struct device_node *np,
dt->flags |= DISPLAY_FLAGS_DOUBLECLK;
if (ret) {
- pr_err("%s: error reading timing properties\n",
- of_node_full_name(np));
+ pr_err("%pOF: error reading timing properties\n", np);
return -EINVAL;
}
@@ -129,8 +126,7 @@ int of_get_display_timing(const struct device_node *np, const char *name,
timing_np = of_get_child_by_name(np, name);
if (!timing_np) {
- pr_err("%s: could not find node '%s'\n",
- of_node_full_name(np), name);
+ pr_err("%pOF: could not find node '%s'\n", np, name);
return -ENOENT;
}
@@ -154,15 +150,13 @@ struct display_timings *of_get_display_timings(const struct device_node *np)
timings_np = of_get_child_by_name(np, "display-timings");
if (!timings_np) {
- pr_err("%s: could not find display-timings node\n",
- of_node_full_name(np));
+ pr_err("%pOF: could not find display-timings node\n", np);
return NULL;
}
disp = kzalloc(sizeof(*disp), GFP_KERNEL);
if (!disp) {
- pr_err("%s: could not allocate struct disp'\n",
- of_node_full_name(np));
+ pr_err("%pOF: could not allocate struct disp'\n", np);
goto dispfail;
}
@@ -172,28 +166,25 @@ struct display_timings *of_get_display_timings(const struct device_node *np)
entry = of_get_next_child(timings_np, NULL);
/* if there is no child, it is useless to go on */
if (!entry) {
- pr_err("%s: no timing specifications given\n",
- of_node_full_name(np));
+ pr_err("%pOF: no timing specifications given\n", np);
goto entryfail;
}
- pr_debug("%s: using %s as default timing\n",
- of_node_full_name(np), entry->name);
+ pr_debug("%pOF: using %s as default timing\n", np, entry->name);
native_mode = entry;
disp->num_timings = of_get_child_count(timings_np);
if (disp->num_timings == 0) {
/* should never happen, as entry was already found above */
- pr_err("%s: no timings specified\n", of_node_full_name(np));
+ pr_err("%pOF: no timings specified\n", np);
goto entryfail;
}
disp->timings = kzalloc(sizeof(struct display_timing *) *
disp->num_timings, GFP_KERNEL);
if (!disp->timings) {
- pr_err("%s: could not allocate timings array\n",
- of_node_full_name(np));
+ pr_err("%pOF: could not allocate timings array\n", np);
goto entryfail;
}
@@ -206,8 +197,8 @@ struct display_timings *of_get_display_timings(const struct device_node *np)
dt = kzalloc(sizeof(*dt), GFP_KERNEL);
if (!dt) {
- pr_err("%s: could not allocate display_timing struct\n",
- of_node_full_name(np));
+ pr_err("%pOF: could not allocate display_timing struct\n",
+ np);
goto timingfail;
}
@@ -217,8 +208,8 @@ struct display_timings *of_get_display_timings(const struct device_node *np)
* to not encourage wrong devicetrees, fail in case of
* an error
*/
- pr_err("%s: error in timing %d\n",
- of_node_full_name(np), disp->num_timings + 1);
+ pr_err("%pOF: error in timing %d\n",
+ np, disp->num_timings + 1);
kfree(dt);
goto timingfail;
}
@@ -236,8 +227,8 @@ struct display_timings *of_get_display_timings(const struct device_node *np)
*/
of_node_put(native_mode);
- pr_debug("%s: got %d timings. Using timing #%d as default\n",
- of_node_full_name(np), disp->num_timings,
+ pr_debug("%pOF: got %d timings. Using timing #%d as default\n",
+ np, disp->num_timings,
disp->native_mode + 1);
return disp;
diff --git a/drivers/video/of_videomode.c b/drivers/video/of_videomode.c
index b5102aa6090d..9b5f9de88fec 100644
--- a/drivers/video/of_videomode.c
+++ b/drivers/video/of_videomode.c
@@ -36,7 +36,7 @@ int of_get_videomode(struct device_node *np, struct videomode *vm,
disp = of_get_display_timings(np);
if (!disp) {
- pr_err("%s: no timings specified\n", of_node_full_name(np));
+ pr_err("%pOF: no timings specified\n", np);
return -EINVAL;
}
diff --git a/drivers/watchdog/asm9260_wdt.c b/drivers/watchdog/asm9260_wdt.c
index 53da001f0838..7dd0da644a7f 100644
--- a/drivers/watchdog/asm9260_wdt.c
+++ b/drivers/watchdog/asm9260_wdt.c
@@ -82,7 +82,7 @@ static unsigned int asm9260_wdt_gettimeleft(struct watchdog_device *wdd)
counter = ioread32(priv->iobase + HW_WDTV);
- return DIV_ROUND_CLOSEST(counter, priv->wdt_freq);
+ return counter / priv->wdt_freq;
}
static int asm9260_wdt_updatetimeout(struct watchdog_device *wdd)
@@ -296,7 +296,7 @@ static int asm9260_wdt_probe(struct platform_device *pdev)
if (ret)
return ret;
- priv->rst = devm_reset_control_get(&pdev->dev, "wdt_rst");
+ priv->rst = devm_reset_control_get_exclusive(&pdev->dev, "wdt_rst");
if (IS_ERR(priv->rst))
return PTR_ERR(priv->rst);
diff --git a/drivers/watchdog/aspeed_wdt.c b/drivers/watchdog/aspeed_wdt.c
index 1c652582de40..79cc766cd30f 100644
--- a/drivers/watchdog/aspeed_wdt.c
+++ b/drivers/watchdog/aspeed_wdt.c
@@ -23,9 +23,21 @@ struct aspeed_wdt {
u32 ctrl;
};
+struct aspeed_wdt_config {
+ u32 ext_pulse_width_mask;
+};
+
+static const struct aspeed_wdt_config ast2400_config = {
+ .ext_pulse_width_mask = 0xff,
+};
+
+static const struct aspeed_wdt_config ast2500_config = {
+ .ext_pulse_width_mask = 0xfffff,
+};
+
static const struct of_device_id aspeed_wdt_of_table[] = {
- { .compatible = "aspeed,ast2400-wdt" },
- { .compatible = "aspeed,ast2500-wdt" },
+ { .compatible = "aspeed,ast2400-wdt", .data = &ast2400_config },
+ { .compatible = "aspeed,ast2500-wdt", .data = &ast2500_config },
{ },
};
MODULE_DEVICE_TABLE(of, aspeed_wdt_of_table);
@@ -36,12 +48,45 @@ MODULE_DEVICE_TABLE(of, aspeed_wdt_of_table);
#define WDT_CTRL 0x0C
#define WDT_CTRL_RESET_MODE_SOC (0x00 << 5)
#define WDT_CTRL_RESET_MODE_FULL_CHIP (0x01 << 5)
+#define WDT_CTRL_RESET_MODE_ARM_CPU (0x10 << 5)
#define WDT_CTRL_1MHZ_CLK BIT(4)
#define WDT_CTRL_WDT_EXT BIT(3)
#define WDT_CTRL_WDT_INTR BIT(2)
#define WDT_CTRL_RESET_SYSTEM BIT(1)
#define WDT_CTRL_ENABLE BIT(0)
+/*
+ * WDT_RESET_WIDTH controls the characteristics of the external pulse (if
+ * enabled), specifically:
+ *
+ * * Pulse duration
+ * * Drive mode: push-pull vs open-drain
+ * * Polarity: Active high or active low
+ *
+ * Pulse duration configuration is available on both the AST2400 and AST2500,
+ * though the field changes between SoCs:
+ *
+ * AST2400: Bits 7:0
+ * AST2500: Bits 19:0
+ *
+ * This difference is captured in struct aspeed_wdt_config.
+ *
+ * The AST2500 exposes the drive mode and polarity options, but not in a
+ * regular fashion. For read purposes, bit 31 represents active high or low,
+ * and bit 30 represents push-pull or open-drain. With respect to write, magic
+ * values need to be written to the top byte to change the state of the drive
+ * mode and polarity bits. Any other value written to the top byte has no
+ * effect on the state of the drive mode or polarity bits. However, the pulse
+ * width value must be preserved (as desired) if written.
+ */
+#define WDT_RESET_WIDTH 0x18
+#define WDT_RESET_WIDTH_ACTIVE_HIGH BIT(31)
+#define WDT_ACTIVE_HIGH_MAGIC (0xA5 << 24)
+#define WDT_ACTIVE_LOW_MAGIC (0x5A << 24)
+#define WDT_RESET_WIDTH_PUSH_PULL BIT(30)
+#define WDT_PUSH_PULL_MAGIC (0xA8 << 24)
+#define WDT_OPEN_DRAIN_MAGIC (0x8A << 24)
+
#define WDT_RESTART_MAGIC 0x4755
/* 32 bits at 1MHz, in milliseconds */
@@ -138,8 +183,13 @@ static const struct watchdog_info aspeed_wdt_info = {
static int aspeed_wdt_probe(struct platform_device *pdev)
{
+ const struct aspeed_wdt_config *config;
+ const struct of_device_id *ofdid;
struct aspeed_wdt *wdt;
struct resource *res;
+ struct device_node *np;
+ const char *reset_type;
+ u32 duration;
int ret;
wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL);
@@ -164,20 +214,88 @@ static int aspeed_wdt_probe(struct platform_device *pdev)
wdt->wdd.timeout = WDT_DEFAULT_TIMEOUT;
watchdog_init_timeout(&wdt->wdd, 0, &pdev->dev);
+ np = pdev->dev.of_node;
+
+ ofdid = of_match_node(aspeed_wdt_of_table, np);
+ if (!ofdid)
+ return -EINVAL;
+ config = ofdid->data;
+
+ wdt->ctrl = WDT_CTRL_1MHZ_CLK;
+
/*
* Control reset on a per-device basis to ensure the
- * host is not affected by a BMC reboot, so only reset
- * the SOC and not the full chip
+ * host is not affected by a BMC reboot
*/
- wdt->ctrl = WDT_CTRL_RESET_MODE_SOC |
- WDT_CTRL_1MHZ_CLK |
- WDT_CTRL_RESET_SYSTEM;
+ ret = of_property_read_string(np, "aspeed,reset-type", &reset_type);
+ if (ret) {
+ wdt->ctrl |= WDT_CTRL_RESET_MODE_SOC | WDT_CTRL_RESET_SYSTEM;
+ } else {
+ if (!strcmp(reset_type, "cpu"))
+ wdt->ctrl |= WDT_CTRL_RESET_MODE_ARM_CPU;
+ else if (!strcmp(reset_type, "soc"))
+ wdt->ctrl |= WDT_CTRL_RESET_MODE_SOC;
+ else if (!strcmp(reset_type, "system"))
+ wdt->ctrl |= WDT_CTRL_RESET_SYSTEM;
+ else if (strcmp(reset_type, "none"))
+ return -EINVAL;
+ }
+ if (of_property_read_bool(np, "aspeed,external-signal"))
+ wdt->ctrl |= WDT_CTRL_WDT_EXT;
+
+ writel(wdt->ctrl, wdt->base + WDT_CTRL);
if (readl(wdt->base + WDT_CTRL) & WDT_CTRL_ENABLE) {
aspeed_wdt_start(&wdt->wdd);
set_bit(WDOG_HW_RUNNING, &wdt->wdd.status);
}
+ if (of_device_is_compatible(np, "aspeed,ast2500-wdt")) {
+ u32 reg = readl(wdt->base + WDT_RESET_WIDTH);
+
+ reg &= config->ext_pulse_width_mask;
+ if (of_property_read_bool(np, "aspeed,ext-push-pull"))
+ reg |= WDT_PUSH_PULL_MAGIC;
+ else
+ reg |= WDT_OPEN_DRAIN_MAGIC;
+
+ writel(reg, wdt->base + WDT_RESET_WIDTH);
+
+ reg &= config->ext_pulse_width_mask;
+ if (of_property_read_bool(np, "aspeed,ext-active-high"))
+ reg |= WDT_ACTIVE_HIGH_MAGIC;
+ else
+ reg |= WDT_ACTIVE_LOW_MAGIC;
+
+ writel(reg, wdt->base + WDT_RESET_WIDTH);
+ }
+
+ if (!of_property_read_u32(np, "aspeed,ext-pulse-duration", &duration)) {
+ u32 max_duration = config->ext_pulse_width_mask + 1;
+
+ if (duration == 0 || duration > max_duration) {
+ dev_err(&pdev->dev, "Invalid pulse duration: %uus\n",
+ duration);
+ duration = max(1U, min(max_duration, duration));
+ dev_info(&pdev->dev, "Pulse duration set to %uus\n",
+ duration);
+ }
+
+ /*
+ * The watchdog is always configured with a 1MHz source, so
+ * there is no need to scale the microsecond value. However we
+ * need to offset it - from the datasheet:
+ *
+ * "This register decides the asserting duration of wdt_ext and
+ * wdt_rstarm signal. The default value is 0xFF. It means the
+ * default asserting duration of wdt_ext and wdt_rstarm is
+ * 256us."
+ *
+ * This implies a value of 0 gives a 1us pulse.
+ */
+ writel(duration - 1, wdt->base + WDT_RESET_WIDTH);
+ }
+
ret = devm_watchdog_register_device(&pdev->dev, &wdt->wdd);
if (ret) {
dev_err(&pdev->dev, "failed to register\n");
diff --git a/drivers/watchdog/bcm7038_wdt.c b/drivers/watchdog/bcm7038_wdt.c
index c1b8e534fb55..f88f546e8050 100644
--- a/drivers/watchdog/bcm7038_wdt.c
+++ b/drivers/watchdog/bcm7038_wdt.c
@@ -136,7 +136,9 @@ static int bcm7038_wdt_probe(struct platform_device *pdev)
wdt->clk = devm_clk_get(dev, NULL);
/* If unable to get clock, use default frequency */
if (!IS_ERR(wdt->clk)) {
- clk_prepare_enable(wdt->clk);
+ err = clk_prepare_enable(wdt->clk);
+ if (err)
+ return err;
wdt->rate = clk_get_rate(wdt->clk);
/* Prevent divide-by-zero exception */
if (!wdt->rate)
diff --git a/drivers/watchdog/cadence_wdt.c b/drivers/watchdog/cadence_wdt.c
index 05c000081e9d..064cf7b6c1c5 100644
--- a/drivers/watchdog/cadence_wdt.c
+++ b/drivers/watchdog/cadence_wdt.c
@@ -52,12 +52,12 @@
static int wdt_timeout;
static int nowayout = WATCHDOG_NOWAYOUT;
-module_param(wdt_timeout, int, 0);
+module_param(wdt_timeout, int, 0644);
MODULE_PARM_DESC(wdt_timeout,
"Watchdog time in seconds. (default="
__MODULE_STRING(CDNS_WDT_DEFAULT_TIMEOUT) ")");
-module_param(nowayout, int, 0);
+module_param(nowayout, int, 0644);
MODULE_PARM_DESC(nowayout,
"Watchdog cannot be stopped once started (default="
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
@@ -368,7 +368,7 @@ static int cdns_wdt_probe(struct platform_device *pdev)
}
platform_set_drvdata(pdev, wdt);
- dev_dbg(&pdev->dev, "Xilinx Watchdog Timer at %p with timeout %ds%s\n",
+ dev_info(&pdev->dev, "Xilinx Watchdog Timer at %p with timeout %ds%s\n",
wdt->regs, cdns_wdt_device->timeout,
nowayout ? ", nowayout" : "");
diff --git a/drivers/watchdog/coh901327_wdt.c b/drivers/watchdog/coh901327_wdt.c
index 38dd60f0cfcc..4410337f4f7f 100644
--- a/drivers/watchdog/coh901327_wdt.c
+++ b/drivers/watchdog/coh901327_wdt.c
@@ -218,7 +218,7 @@ static const struct watchdog_info coh901327_ident = {
.identity = DRV_NAME,
};
-static struct watchdog_ops coh901327_ops = {
+static const struct watchdog_ops coh901327_ops = {
.owner = THIS_MODULE,
.start = coh901327_start,
.stop = coh901327_stop,
diff --git a/drivers/watchdog/da9063_wdt.c b/drivers/watchdog/da9063_wdt.c
index 4691c5509129..2a20fc163ed0 100644
--- a/drivers/watchdog/da9063_wdt.c
+++ b/drivers/watchdog/da9063_wdt.c
@@ -36,11 +36,6 @@ static const unsigned int wdt_timeout[] = { 0, 2, 4, 8, 16, 32, 65, 131 };
#define DA9063_WDG_TIMEOUT wdt_timeout[3]
#define DA9063_RESET_PROTECTION_MS 256
-struct da9063_watchdog {
- struct da9063 *da9063;
- struct watchdog_device wdtdev;
-};
-
static unsigned int da9063_wdt_timeout_to_sel(unsigned int secs)
{
unsigned int i;
@@ -61,14 +56,14 @@ static int _da9063_wdt_set_timeout(struct da9063 *da9063, unsigned int regval)
static int da9063_wdt_start(struct watchdog_device *wdd)
{
- struct da9063_watchdog *wdt = watchdog_get_drvdata(wdd);
+ struct da9063 *da9063 = watchdog_get_drvdata(wdd);
unsigned int selector;
int ret;
- selector = da9063_wdt_timeout_to_sel(wdt->wdtdev.timeout);
- ret = _da9063_wdt_set_timeout(wdt->da9063, selector);
+ selector = da9063_wdt_timeout_to_sel(wdd->timeout);
+ ret = _da9063_wdt_set_timeout(da9063, selector);
if (ret)
- dev_err(wdt->da9063->dev, "Watchdog failed to start (err = %d)\n",
+ dev_err(da9063->dev, "Watchdog failed to start (err = %d)\n",
ret);
return ret;
@@ -76,13 +71,13 @@ static int da9063_wdt_start(struct watchdog_device *wdd)
static int da9063_wdt_stop(struct watchdog_device *wdd)
{
- struct da9063_watchdog *wdt = watchdog_get_drvdata(wdd);
+ struct da9063 *da9063 = watchdog_get_drvdata(wdd);
int ret;
- ret = regmap_update_bits(wdt->da9063->regmap, DA9063_REG_CONTROL_D,
+ ret = regmap_update_bits(da9063->regmap, DA9063_REG_CONTROL_D,
DA9063_TWDSCALE_MASK, DA9063_TWDSCALE_DISABLE);
if (ret)
- dev_alert(wdt->da9063->dev, "Watchdog failed to stop (err = %d)\n",
+ dev_alert(da9063->dev, "Watchdog failed to stop (err = %d)\n",
ret);
return ret;
@@ -90,13 +85,13 @@ static int da9063_wdt_stop(struct watchdog_device *wdd)
static int da9063_wdt_ping(struct watchdog_device *wdd)
{
- struct da9063_watchdog *wdt = watchdog_get_drvdata(wdd);
+ struct da9063 *da9063 = watchdog_get_drvdata(wdd);
int ret;
- ret = regmap_write(wdt->da9063->regmap, DA9063_REG_CONTROL_F,
+ ret = regmap_write(da9063->regmap, DA9063_REG_CONTROL_F,
DA9063_WATCHDOG);
if (ret)
- dev_alert(wdt->da9063->dev, "Failed to ping the watchdog (err = %d)\n",
+ dev_alert(da9063->dev, "Failed to ping the watchdog (err = %d)\n",
ret);
return ret;
@@ -105,14 +100,14 @@ static int da9063_wdt_ping(struct watchdog_device *wdd)
static int da9063_wdt_set_timeout(struct watchdog_device *wdd,
unsigned int timeout)
{
- struct da9063_watchdog *wdt = watchdog_get_drvdata(wdd);
+ struct da9063 *da9063 = watchdog_get_drvdata(wdd);
unsigned int selector;
int ret;
selector = da9063_wdt_timeout_to_sel(timeout);
- ret = _da9063_wdt_set_timeout(wdt->da9063, selector);
+ ret = _da9063_wdt_set_timeout(da9063, selector);
if (ret)
- dev_err(wdt->da9063->dev, "Failed to set watchdog timeout (err = %d)\n",
+ dev_err(da9063->dev, "Failed to set watchdog timeout (err = %d)\n",
ret);
else
wdd->timeout = wdt_timeout[selector];
@@ -123,13 +118,13 @@ static int da9063_wdt_set_timeout(struct watchdog_device *wdd,
static int da9063_wdt_restart(struct watchdog_device *wdd, unsigned long action,
void *data)
{
- struct da9063_watchdog *wdt = watchdog_get_drvdata(wdd);
+ struct da9063 *da9063 = watchdog_get_drvdata(wdd);
int ret;
- ret = regmap_write(wdt->da9063->regmap, DA9063_REG_CONTROL_F,
+ ret = regmap_write(da9063->regmap, DA9063_REG_CONTROL_F,
DA9063_SHUTDOWN);
if (ret)
- dev_alert(wdt->da9063->dev, "Failed to shutdown (err = %d)\n",
+ dev_alert(da9063->dev, "Failed to shutdown (err = %d)\n",
ret);
return ret;
@@ -152,7 +147,7 @@ static const struct watchdog_ops da9063_watchdog_ops = {
static int da9063_wdt_probe(struct platform_device *pdev)
{
struct da9063 *da9063;
- struct da9063_watchdog *wdt;
+ struct watchdog_device *wdd;
if (!pdev->dev.parent)
return -EINVAL;
@@ -161,27 +156,25 @@ static int da9063_wdt_probe(struct platform_device *pdev)
if (!da9063)
return -EINVAL;
- wdt = devm_kzalloc(&pdev->dev, sizeof(*wdt), GFP_KERNEL);
- if (!wdt)
+ wdd = devm_kzalloc(&pdev->dev, sizeof(*wdd), GFP_KERNEL);
+ if (!wdd)
return -ENOMEM;
- wdt->da9063 = da9063;
-
- wdt->wdtdev.info = &da9063_watchdog_info;
- wdt->wdtdev.ops = &da9063_watchdog_ops;
- wdt->wdtdev.min_timeout = DA9063_WDT_MIN_TIMEOUT;
- wdt->wdtdev.max_timeout = DA9063_WDT_MAX_TIMEOUT;
- wdt->wdtdev.min_hw_heartbeat_ms = DA9063_RESET_PROTECTION_MS;
- wdt->wdtdev.timeout = DA9063_WDG_TIMEOUT;
- wdt->wdtdev.parent = &pdev->dev;
+ wdd->info = &da9063_watchdog_info;
+ wdd->ops = &da9063_watchdog_ops;
+ wdd->min_timeout = DA9063_WDT_MIN_TIMEOUT;
+ wdd->max_timeout = DA9063_WDT_MAX_TIMEOUT;
+ wdd->min_hw_heartbeat_ms = DA9063_RESET_PROTECTION_MS;
+ wdd->timeout = DA9063_WDG_TIMEOUT;
+ wdd->parent = &pdev->dev;
- wdt->wdtdev.status = WATCHDOG_NOWAYOUT_INIT_STATUS;
+ wdd->status = WATCHDOG_NOWAYOUT_INIT_STATUS;
- watchdog_set_restart_priority(&wdt->wdtdev, 128);
+ watchdog_set_restart_priority(wdd, 128);
- watchdog_set_drvdata(&wdt->wdtdev, wdt);
+ watchdog_set_drvdata(wdd, da9063);
- return devm_watchdog_register_device(&pdev->dev, &wdt->wdtdev);
+ return devm_watchdog_register_device(&pdev->dev, wdd);
}
static struct platform_driver da9063_wdt_driver = {
diff --git a/drivers/watchdog/diag288_wdt.c b/drivers/watchdog/diag288_wdt.c
index 6f591084bb7a..806a04a676b7 100644
--- a/drivers/watchdog/diag288_wdt.c
+++ b/drivers/watchdog/diag288_wdt.c
@@ -213,7 +213,7 @@ static const struct watchdog_ops wdt_ops = {
.set_timeout = wdt_set_timeout,
};
-static struct watchdog_info wdt_info = {
+static const struct watchdog_info wdt_info = {
.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
.firmware_version = 0,
.identity = "z Watchdog",
diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c
index c4f65873bfa4..347f0389b089 100644
--- a/drivers/watchdog/iTCO_wdt.c
+++ b/drivers/watchdog/iTCO_wdt.c
@@ -306,15 +306,16 @@ static int iTCO_wdt_ping(struct watchdog_device *wd_dev)
iTCO_vendor_pre_keepalive(p->smi_res, wd_dev->timeout);
- /* Reset the timeout status bit so that the timer
- * needs to count down twice again before rebooting */
- outw(0x0008, TCO1_STS(p)); /* write 1 to clear bit */
-
/* Reload the timer by writing to the TCO Timer Counter register */
- if (p->iTCO_version >= 2)
+ if (p->iTCO_version >= 2) {
outw(0x01, TCO_RLD(p));
- else if (p->iTCO_version == 1)
+ } else if (p->iTCO_version == 1) {
+ /* Reset the timeout status bit so that the timer
+ * needs to count down twice again before rebooting */
+ outw(0x0008, TCO1_STS(p)); /* write 1 to clear bit */
+
outb(0x01, TCO_RLD(p));
+ }
spin_unlock(&p->io_lock);
return 0;
@@ -327,8 +328,11 @@ static int iTCO_wdt_set_timeout(struct watchdog_device *wd_dev, unsigned int t)
unsigned char val8;
unsigned int tmrval;
- /* The timer counts down twice before rebooting */
- tmrval = seconds_to_ticks(p, t) / 2;
+ tmrval = seconds_to_ticks(p, t);
+
+ /* For TCO v1 the timer counts down twice before rebooting */
+ if (p->iTCO_version == 1)
+ tmrval /= 2;
/* from the specs: */
/* "Values of 0h-3h are ignored and should not be attempted" */
@@ -381,8 +385,6 @@ static unsigned int iTCO_wdt_get_timeleft(struct watchdog_device *wd_dev)
spin_lock(&p->io_lock);
val16 = inw(TCO_RLD(p));
val16 &= 0x3ff;
- if (!(inw(TCO1_STS(p)) & 0x0008))
- val16 += (inw(TCOv2_TMR(p)) & 0x3ff);
spin_unlock(&p->io_lock);
time_left = ticks_to_seconds(p, val16);
diff --git a/drivers/watchdog/it87_wdt.c b/drivers/watchdog/it87_wdt.c
index dd1e7eaef50f..e96faea24925 100644
--- a/drivers/watchdog/it87_wdt.c
+++ b/drivers/watchdog/it87_wdt.c
@@ -253,7 +253,7 @@ static const struct watchdog_info ident = {
.identity = WATCHDOG_NAME,
};
-static struct watchdog_ops wdt_ops = {
+static const struct watchdog_ops wdt_ops = {
.owner = THIS_MODULE,
.start = wdt_start,
.stop = wdt_stop,
diff --git a/drivers/watchdog/lantiq_wdt.c b/drivers/watchdog/lantiq_wdt.c
index e0823677d8c1..7f43cefa0eae 100644
--- a/drivers/watchdog/lantiq_wdt.c
+++ b/drivers/watchdog/lantiq_wdt.c
@@ -4,6 +4,7 @@
* by the Free Software Foundation.
*
* Copyright (C) 2010 John Crispin <john@phrozen.org>
+ * Copyright (C) 2017 Hauke Mehrtens <hauke@hauke-m.de>
* Based on EP93xx wdt driver
*/
@@ -17,9 +18,20 @@
#include <linux/uaccess.h>
#include <linux/clk.h>
#include <linux/io.h>
+#include <linux/regmap.h>
+#include <linux/mfd/syscon.h>
#include <lantiq_soc.h>
+#define LTQ_XRX_RCU_RST_STAT 0x0014
+#define LTQ_XRX_RCU_RST_STAT_WDT BIT(31)
+
+/* CPU0 Reset Source Register */
+#define LTQ_FALCON_SYS1_CPU0RS 0x0060
+/* reset cause mask */
+#define LTQ_FALCON_SYS1_CPU0RS_MASK 0x0007
+#define LTQ_FALCON_SYS1_CPU0RS_WDT 0x02
+
/*
* Section 3.4 of the datasheet
* The password sequence protects the WDT control register from unintended
@@ -186,16 +198,70 @@ static struct miscdevice ltq_wdt_miscdev = {
.fops = &ltq_wdt_fops,
};
+typedef int (*ltq_wdt_bootstatus_set)(struct platform_device *pdev);
+
+static int ltq_wdt_bootstatus_xrx(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct regmap *rcu_regmap;
+ u32 val;
+ int err;
+
+ rcu_regmap = syscon_regmap_lookup_by_phandle(dev->of_node, "regmap");
+ if (IS_ERR(rcu_regmap))
+ return PTR_ERR(rcu_regmap);
+
+ err = regmap_read(rcu_regmap, LTQ_XRX_RCU_RST_STAT, &val);
+ if (err)
+ return err;
+
+ if (val & LTQ_XRX_RCU_RST_STAT_WDT)
+ ltq_wdt_bootstatus = WDIOF_CARDRESET;
+
+ return 0;
+}
+
+static int ltq_wdt_bootstatus_falcon(struct platform_device *pdev)
+{
+ struct device *dev = &pdev->dev;
+ struct regmap *rcu_regmap;
+ u32 val;
+ int err;
+
+ rcu_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
+ "lantiq,rcu");
+ if (IS_ERR(rcu_regmap))
+ return PTR_ERR(rcu_regmap);
+
+ err = regmap_read(rcu_regmap, LTQ_FALCON_SYS1_CPU0RS, &val);
+ if (err)
+ return err;
+
+ if ((val & LTQ_FALCON_SYS1_CPU0RS_MASK) == LTQ_FALCON_SYS1_CPU0RS_WDT)
+ ltq_wdt_bootstatus = WDIOF_CARDRESET;
+
+ return 0;
+}
+
static int
ltq_wdt_probe(struct platform_device *pdev)
{
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
struct clk *clk;
+ ltq_wdt_bootstatus_set ltq_wdt_bootstatus_set;
+ int ret;
ltq_wdt_membase = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(ltq_wdt_membase))
return PTR_ERR(ltq_wdt_membase);
+ ltq_wdt_bootstatus_set = of_device_get_match_data(&pdev->dev);
+ if (ltq_wdt_bootstatus_set) {
+ ret = ltq_wdt_bootstatus_set(pdev);
+ if (ret)
+ return ret;
+ }
+
/* we do not need to enable the clock as it is always running */
clk = clk_get_io();
if (IS_ERR(clk)) {
@@ -205,10 +271,6 @@ ltq_wdt_probe(struct platform_device *pdev)
ltq_io_region_clk_rate = clk_get_rate(clk);
clk_put(clk);
- /* find out if the watchdog caused the last reboot */
- if (ltq_reset_cause() == LTQ_RST_CAUSE_WDTRST)
- ltq_wdt_bootstatus = WDIOF_CARDRESET;
-
dev_info(&pdev->dev, "Init done\n");
return misc_register(&ltq_wdt_miscdev);
}
@@ -222,7 +284,9 @@ ltq_wdt_remove(struct platform_device *pdev)
}
static const struct of_device_id ltq_wdt_match[] = {
- { .compatible = "lantiq,wdt" },
+ { .compatible = "lantiq,wdt", .data = NULL},
+ { .compatible = "lantiq,xrx100-wdt", .data = ltq_wdt_bootstatus_xrx },
+ { .compatible = "lantiq,falcon-wdt", .data = ltq_wdt_bootstatus_falcon },
{},
};
MODULE_DEVICE_TABLE(of, ltq_wdt_match);
diff --git a/drivers/watchdog/max77620_wdt.c b/drivers/watchdog/max77620_wdt.c
index 68c41fa2be27..2c9f53eaff4f 100644
--- a/drivers/watchdog/max77620_wdt.c
+++ b/drivers/watchdog/max77620_wdt.c
@@ -201,7 +201,7 @@ static int max77620_wdt_remove(struct platform_device *pdev)
return 0;
}
-static struct platform_device_id max77620_wdt_devtype[] = {
+static const struct platform_device_id max77620_wdt_devtype[] = {
{ .name = "max77620-watchdog", },
{ },
};
diff --git a/drivers/watchdog/mei_wdt.c b/drivers/watchdog/mei_wdt.c
index b29c6fde7473..ea60b29494fb 100644
--- a/drivers/watchdog/mei_wdt.c
+++ b/drivers/watchdog/mei_wdt.c
@@ -670,7 +670,7 @@ static int mei_wdt_remove(struct mei_cl_device *cldev)
#define MEI_UUID_WD UUID_LE(0x05B79A6F, 0x4628, 0x4D7F, \
0x89, 0x9D, 0xA9, 0x15, 0x14, 0xCB, 0x32, 0xAB)
-static struct mei_cl_device_id mei_wdt_tbl[] = {
+static const struct mei_cl_device_id mei_wdt_tbl[] = {
{ .uuid = MEI_UUID_WD, .version = MEI_CL_VERSION_ANY },
/* required last entry */
{ }
diff --git a/drivers/watchdog/meson_wdt.c b/drivers/watchdog/meson_wdt.c
index 491b9bf13d84..304274c67735 100644
--- a/drivers/watchdog/meson_wdt.c
+++ b/drivers/watchdog/meson_wdt.c
@@ -155,7 +155,9 @@ static const struct watchdog_ops meson_wdt_ops = {
static const struct of_device_id meson_wdt_dt_ids[] = {
{ .compatible = "amlogic,meson6-wdt", .data = &meson6_wdt_data },
+ { .compatible = "amlogic,meson8-wdt", .data = &meson6_wdt_data },
{ .compatible = "amlogic,meson8b-wdt", .data = &meson8b_wdt_data },
+ { .compatible = "amlogic,meson8m2-wdt", .data = &meson8b_wdt_data },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, meson_wdt_dt_ids);
diff --git a/drivers/watchdog/mt7621_wdt.c b/drivers/watchdog/mt7621_wdt.c
index 48a06067075d..db38f8017218 100644
--- a/drivers/watchdog/mt7621_wdt.c
+++ b/drivers/watchdog/mt7621_wdt.c
@@ -105,7 +105,7 @@ static int mt7621_wdt_bootcause(void)
return 0;
}
-static struct watchdog_info mt7621_wdt_info = {
+static const struct watchdog_info mt7621_wdt_info = {
.identity = "Mediatek Watchdog",
.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
};
@@ -135,7 +135,7 @@ static int mt7621_wdt_probe(struct platform_device *pdev)
if (IS_ERR(mt7621_wdt_base))
return PTR_ERR(mt7621_wdt_base);
- mt7621_wdt_reset = devm_reset_control_get(&pdev->dev, NULL);
+ mt7621_wdt_reset = devm_reset_control_get_exclusive(&pdev->dev, NULL);
if (!IS_ERR(mt7621_wdt_reset))
reset_control_deassert(mt7621_wdt_reset);
diff --git a/drivers/watchdog/octeon-wdt-main.c b/drivers/watchdog/octeon-wdt-main.c
index b5cdceb36cff..0ec419a3f7ed 100644
--- a/drivers/watchdog/octeon-wdt-main.c
+++ b/drivers/watchdog/octeon-wdt-main.c
@@ -1,7 +1,7 @@
/*
* Octeon Watchdog driver
*
- * Copyright (C) 2007, 2008, 2009, 2010 Cavium Networks
+ * Copyright (C) 2007-2017 Cavium, Inc.
*
* Converted to use WATCHDOG_CORE by Aaro Koskinen <aaro.koskinen@iki.fi>.
*
@@ -59,20 +59,23 @@
#include <linux/interrupt.h>
#include <linux/watchdog.h>
#include <linux/cpumask.h>
-#include <linux/bitops.h>
-#include <linux/kernel.h>
#include <linux/module.h>
-#include <linux/string.h>
#include <linux/delay.h>
#include <linux/cpu.h>
-#include <linux/smp.h>
-#include <linux/fs.h>
#include <linux/irq.h>
#include <asm/mipsregs.h>
#include <asm/uasm.h>
#include <asm/octeon/octeon.h>
+#include <asm/octeon/cvmx-boot-vector.h>
+#include <asm/octeon/cvmx-ciu2-defs.h>
+#include <asm/octeon/cvmx-rst-defs.h>
+
+/* Watchdog interrupt major block number (8 MSBs of intsn) */
+#define WD_BLOCK_NUMBER 0x01
+
+static int divisor;
/* The count needed to achieve timeout_sec. */
static unsigned int timeout_cnt;
@@ -84,7 +87,7 @@ static unsigned int max_timeout_sec;
static unsigned int timeout_sec;
/* Set to non-zero when userspace countdown mode active */
-static int do_coundown;
+static bool do_countdown;
static unsigned int countdown_reset;
static unsigned int per_cpu_countdown[NR_CPUS];
@@ -92,152 +95,38 @@ static cpumask_t irq_enabled_cpus;
#define WD_TIMO 60 /* Default heartbeat = 60 seconds */
+#define CVMX_GSERX_SCRATCH(offset) (CVMX_ADD_IO_SEG(0x0001180090000020ull) + ((offset) & 15) * 0x1000000ull)
+
static int heartbeat = WD_TIMO;
-module_param(heartbeat, int, S_IRUGO);
+module_param(heartbeat, int, 0444);
MODULE_PARM_DESC(heartbeat,
"Watchdog heartbeat in seconds. (0 < heartbeat, default="
__MODULE_STRING(WD_TIMO) ")");
static bool nowayout = WATCHDOG_NOWAYOUT;
-module_param(nowayout, bool, S_IRUGO);
+module_param(nowayout, bool, 0444);
MODULE_PARM_DESC(nowayout,
"Watchdog cannot be stopped once started (default="
__MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
-static u32 nmi_stage1_insns[64] __initdata;
-/* We need one branch and therefore one relocation per target label. */
-static struct uasm_label labels[5] __initdata;
-static struct uasm_reloc relocs[5] __initdata;
-
-enum lable_id {
- label_enter_bootloader = 1
-};
+static int disable;
+module_param(disable, int, 0444);
+MODULE_PARM_DESC(disable,
+ "Disable the watchdog entirely (default=0)");
-/* Some CP0 registers */
-#define K0 26
-#define C0_CVMMEMCTL 11, 7
-#define C0_STATUS 12, 0
-#define C0_EBASE 15, 1
-#define C0_DESAVE 31, 0
+static struct cvmx_boot_vector_element *octeon_wdt_bootvector;
void octeon_wdt_nmi_stage2(void);
-static void __init octeon_wdt_build_stage1(void)
-{
- int i;
- int len;
- u32 *p = nmi_stage1_insns;
-#ifdef CONFIG_HOTPLUG_CPU
- struct uasm_label *l = labels;
- struct uasm_reloc *r = relocs;
-#endif
-
- /*
- * For the next few instructions running the debugger may
- * cause corruption of k0 in the saved registers. Since we're
- * about to crash, nobody probably cares.
- *
- * Save K0 into the debug scratch register
- */
- uasm_i_dmtc0(&p, K0, C0_DESAVE);
-
- uasm_i_mfc0(&p, K0, C0_STATUS);
-#ifdef CONFIG_HOTPLUG_CPU
- if (octeon_bootloader_entry_addr)
- uasm_il_bbit0(&p, &r, K0, ilog2(ST0_NMI),
- label_enter_bootloader);
-#endif
- /* Force 64-bit addressing enabled */
- uasm_i_ori(&p, K0, K0, ST0_UX | ST0_SX | ST0_KX);
- uasm_i_mtc0(&p, K0, C0_STATUS);
-
-#ifdef CONFIG_HOTPLUG_CPU
- if (octeon_bootloader_entry_addr) {
- uasm_i_mfc0(&p, K0, C0_EBASE);
- /* Coreid number in K0 */
- uasm_i_andi(&p, K0, K0, 0xf);
- /* 8 * coreid in bits 16-31 */
- uasm_i_dsll_safe(&p, K0, K0, 3 + 16);
- uasm_i_ori(&p, K0, K0, 0x8001);
- uasm_i_dsll_safe(&p, K0, K0, 16);
- uasm_i_ori(&p, K0, K0, 0x0700);
- uasm_i_drotr_safe(&p, K0, K0, 32);
- /*
- * Should result in: 0x8001,0700,0000,8*coreid which is
- * CVMX_CIU_WDOGX(coreid) - 0x0500
- *
- * Now ld K0, CVMX_CIU_WDOGX(coreid)
- */
- uasm_i_ld(&p, K0, 0x500, K0);
- /*
- * If bit one set handle the NMI as a watchdog event.
- * otherwise transfer control to bootloader.
- */
- uasm_il_bbit0(&p, &r, K0, 1, label_enter_bootloader);
- uasm_i_nop(&p);
- }
-#endif
-
- /* Clear Dcache so cvmseg works right. */
- uasm_i_cache(&p, 1, 0, 0);
-
- /* Use K0 to do a read/modify/write of CVMMEMCTL */
- uasm_i_dmfc0(&p, K0, C0_CVMMEMCTL);
- /* Clear out the size of CVMSEG */
- uasm_i_dins(&p, K0, 0, 0, 6);
- /* Set CVMSEG to its largest value */
- uasm_i_ori(&p, K0, K0, 0x1c0 | 54);
- /* Store the CVMMEMCTL value */
- uasm_i_dmtc0(&p, K0, C0_CVMMEMCTL);
-
- /* Load the address of the second stage handler */
- UASM_i_LA(&p, K0, (long)octeon_wdt_nmi_stage2);
- uasm_i_jr(&p, K0);
- uasm_i_dmfc0(&p, K0, C0_DESAVE);
-
-#ifdef CONFIG_HOTPLUG_CPU
- if (octeon_bootloader_entry_addr) {
- uasm_build_label(&l, p, label_enter_bootloader);
- /* Jump to the bootloader and restore K0 */
- UASM_i_LA(&p, K0, (long)octeon_bootloader_entry_addr);
- uasm_i_jr(&p, K0);
- uasm_i_dmfc0(&p, K0, C0_DESAVE);
- }
-#endif
- uasm_resolve_relocs(relocs, labels);
-
- len = (int)(p - nmi_stage1_insns);
- pr_debug("Synthesized NMI stage 1 handler (%d instructions)\n", len);
-
- pr_debug("\t.set push\n");
- pr_debug("\t.set noreorder\n");
- for (i = 0; i < len; i++)
- pr_debug("\t.word 0x%08x\n", nmi_stage1_insns[i]);
- pr_debug("\t.set pop\n");
-
- if (len > 32)
- panic("NMI stage 1 handler exceeds 32 instructions, was %d\n",
- len);
-}
-
static int cpu2core(int cpu)
{
#ifdef CONFIG_SMP
- return cpu_logical_map(cpu);
+ return cpu_logical_map(cpu) & 0x3f;
#else
return cvmx_get_core_num();
#endif
}
-static int core2cpu(int coreid)
-{
-#ifdef CONFIG_SMP
- return cpu_number_map(coreid);
-#else
- return 0;
-#endif
-}
-
/**
* Poke the watchdog when an interrupt is received
*
@@ -248,13 +137,14 @@ static int core2cpu(int coreid)
*/
static irqreturn_t octeon_wdt_poke_irq(int cpl, void *dev_id)
{
- unsigned int core = cvmx_get_core_num();
- int cpu = core2cpu(core);
+ int cpu = raw_smp_processor_id();
+ unsigned int core = cpu2core(cpu);
+ int node = cpu_to_node(cpu);
- if (do_coundown) {
+ if (do_countdown) {
if (per_cpu_countdown[cpu] > 0) {
/* We're alive, poke the watchdog */
- cvmx_write_csr(CVMX_CIU_PP_POKEX(core), 1);
+ cvmx_write_csr_node(node, CVMX_CIU_PP_POKEX(core), 1);
per_cpu_countdown[cpu]--;
} else {
/* Bad news, you are about to reboot. */
@@ -263,7 +153,7 @@ static irqreturn_t octeon_wdt_poke_irq(int cpl, void *dev_id)
}
} else {
/* Not open, just ping away... */
- cvmx_write_csr(CVMX_CIU_PP_POKEX(core), 1);
+ cvmx_write_csr_node(node, CVMX_CIU_PP_POKEX(core), 1);
}
return IRQ_HANDLED;
}
@@ -338,10 +228,10 @@ void octeon_wdt_nmi_stage3(u64 reg[32])
u64 cp0_epc = read_c0_epc();
/* Delay so output from all cores output is not jumbled together. */
- __delay(100000000ull * coreid);
+ udelay(85000 * coreid);
octeon_wdt_write_string("\r\n*** NMI Watchdog interrupt on Core 0x");
- octeon_wdt_write_hex(coreid, 1);
+ octeon_wdt_write_hex(coreid, 2);
octeon_wdt_write_string(" ***\r\n");
for (i = 0; i < 32; i++) {
octeon_wdt_write_string("\t");
@@ -364,33 +254,98 @@ void octeon_wdt_nmi_stage3(u64 reg[32])
octeon_wdt_write_hex(cp0_cause, 16);
octeon_wdt_write_string("\r\n");
- octeon_wdt_write_string("\tsum0\t0x");
- octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU_INTX_SUM0(coreid * 2)), 16);
- octeon_wdt_write_string("\ten0\t0x");
- octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)), 16);
- octeon_wdt_write_string("\r\n");
+ /* The CIU register is different for each Octeon model. */
+ if (OCTEON_IS_MODEL(OCTEON_CN68XX)) {
+ octeon_wdt_write_string("\tsrc_wd\t0x");
+ octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU2_SRC_PPX_IP2_WDOG(coreid)), 16);
+ octeon_wdt_write_string("\ten_wd\t0x");
+ octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU2_EN_PPX_IP2_WDOG(coreid)), 16);
+ octeon_wdt_write_string("\r\n");
+ octeon_wdt_write_string("\tsrc_rml\t0x");
+ octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU2_SRC_PPX_IP2_RML(coreid)), 16);
+ octeon_wdt_write_string("\ten_rml\t0x");
+ octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU2_EN_PPX_IP2_RML(coreid)), 16);
+ octeon_wdt_write_string("\r\n");
+ octeon_wdt_write_string("\tsum\t0x");
+ octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU2_SUM_PPX_IP2(coreid)), 16);
+ octeon_wdt_write_string("\r\n");
+ } else if (!octeon_has_feature(OCTEON_FEATURE_CIU3)) {
+ octeon_wdt_write_string("\tsum0\t0x");
+ octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU_INTX_SUM0(coreid * 2)), 16);
+ octeon_wdt_write_string("\ten0\t0x");
+ octeon_wdt_write_hex(cvmx_read_csr(CVMX_CIU_INTX_EN0(coreid * 2)), 16);
+ octeon_wdt_write_string("\r\n");
+ }
octeon_wdt_write_string("*** Chip soft reset soon ***\r\n");
+
+ /*
+ * G-30204: We must trigger a soft reset before watchdog
+ * does an incomplete job of doing it.
+ */
+ if (OCTEON_IS_OCTEON3() && !OCTEON_IS_MODEL(OCTEON_CN70XX)) {
+ u64 scr;
+ unsigned int node = cvmx_get_node_num();
+ unsigned int lcore = cvmx_get_local_core_num();
+ union cvmx_ciu_wdogx ciu_wdog;
+
+ /*
+ * Wait for other cores to print out information, but
+ * not too long. Do the soft reset before watchdog
+ * can trigger it.
+ */
+ do {
+ ciu_wdog.u64 = cvmx_read_csr_node(node, CVMX_CIU_WDOGX(lcore));
+ } while (ciu_wdog.s.cnt > 0x10000);
+
+ scr = cvmx_read_csr_node(0, CVMX_GSERX_SCRATCH(0));
+ scr |= 1 << 11; /* Indicate watchdog in bit 11 */
+ cvmx_write_csr_node(0, CVMX_GSERX_SCRATCH(0), scr);
+ cvmx_write_csr_node(0, CVMX_RST_SOFT_RST, 1);
+ }
+}
+
+static int octeon_wdt_cpu_to_irq(int cpu)
+{
+ unsigned int coreid;
+ int node;
+ int irq;
+
+ coreid = cpu2core(cpu);
+ node = cpu_to_node(cpu);
+
+ if (octeon_has_feature(OCTEON_FEATURE_CIU3)) {
+ struct irq_domain *domain;
+ int hwirq;
+
+ domain = octeon_irq_get_block_domain(node,
+ WD_BLOCK_NUMBER);
+ hwirq = WD_BLOCK_NUMBER << 12 | 0x200 | coreid;
+ irq = irq_find_mapping(domain, hwirq);
+ } else {
+ irq = OCTEON_IRQ_WDOG0 + coreid;
+ }
+ return irq;
}
static int octeon_wdt_cpu_pre_down(unsigned int cpu)
{
unsigned int core;
- unsigned int irq;
+ int node;
union cvmx_ciu_wdogx ciu_wdog;
core = cpu2core(cpu);
- irq = OCTEON_IRQ_WDOG0 + core;
+ node = cpu_to_node(cpu);
/* Poke the watchdog to clear out its state */
- cvmx_write_csr(CVMX_CIU_PP_POKEX(core), 1);
+ cvmx_write_csr_node(node, CVMX_CIU_PP_POKEX(core), 1);
/* Disable the hardware. */
ciu_wdog.u64 = 0;
- cvmx_write_csr(CVMX_CIU_WDOGX(core), ciu_wdog.u64);
+ cvmx_write_csr_node(node, CVMX_CIU_WDOGX(core), ciu_wdog.u64);
- free_irq(irq, octeon_wdt_poke_irq);
+ free_irq(octeon_wdt_cpu_to_irq(cpu), octeon_wdt_poke_irq);
return 0;
}
@@ -399,31 +354,56 @@ static int octeon_wdt_cpu_online(unsigned int cpu)
unsigned int core;
unsigned int irq;
union cvmx_ciu_wdogx ciu_wdog;
+ int node;
+ struct irq_domain *domain;
+ int hwirq;
core = cpu2core(cpu);
+ node = cpu_to_node(cpu);
+
+ octeon_wdt_bootvector[core].target_ptr = (u64)octeon_wdt_nmi_stage2;
/* Disable it before doing anything with the interrupts. */
ciu_wdog.u64 = 0;
- cvmx_write_csr(CVMX_CIU_WDOGX(core), ciu_wdog.u64);
+ cvmx_write_csr_node(node, CVMX_CIU_WDOGX(core), ciu_wdog.u64);
per_cpu_countdown[cpu] = countdown_reset;
- irq = OCTEON_IRQ_WDOG0 + core;
+ if (octeon_has_feature(OCTEON_FEATURE_CIU3)) {
+ /* Must get the domain for the watchdog block */
+ domain = octeon_irq_get_block_domain(node, WD_BLOCK_NUMBER);
+
+ /* Get a irq for the wd intsn (hardware interrupt) */
+ hwirq = WD_BLOCK_NUMBER << 12 | 0x200 | core;
+ irq = irq_create_mapping(domain, hwirq);
+ irqd_set_trigger_type(irq_get_irq_data(irq),
+ IRQ_TYPE_EDGE_RISING);
+ } else
+ irq = OCTEON_IRQ_WDOG0 + core;
if (request_irq(irq, octeon_wdt_poke_irq,
IRQF_NO_THREAD, "octeon_wdt", octeon_wdt_poke_irq))
panic("octeon_wdt: Couldn't obtain irq %d", irq);
+ /* Must set the irq affinity here */
+ if (octeon_has_feature(OCTEON_FEATURE_CIU3)) {
+ cpumask_t mask;
+
+ cpumask_clear(&mask);
+ cpumask_set_cpu(cpu, &mask);
+ irq_set_affinity(irq, &mask);
+ }
+
cpumask_set_cpu(cpu, &irq_enabled_cpus);
/* Poke the watchdog to clear out its state */
- cvmx_write_csr(CVMX_CIU_PP_POKEX(core), 1);
+ cvmx_write_csr_node(node, CVMX_CIU_PP_POKEX(core), 1);
/* Finally enable the watchdog now that all handlers are installed */
ciu_wdog.u64 = 0;
ciu_wdog.s.len = timeout_cnt;
ciu_wdog.s.mode = 3; /* 3 = Interrupt + NMI + Soft-Reset */
- cvmx_write_csr(CVMX_CIU_WDOGX(core), ciu_wdog.u64);
+ cvmx_write_csr_node(node, CVMX_CIU_WDOGX(core), ciu_wdog.u64);
return 0;
}
@@ -432,17 +412,20 @@ static int octeon_wdt_ping(struct watchdog_device __always_unused *wdog)
{
int cpu;
int coreid;
+ int node;
+
+ if (disable)
+ return 0;
for_each_online_cpu(cpu) {
coreid = cpu2core(cpu);
- cvmx_write_csr(CVMX_CIU_PP_POKEX(coreid), 1);
+ node = cpu_to_node(cpu);
+ cvmx_write_csr_node(node, CVMX_CIU_PP_POKEX(coreid), 1);
per_cpu_countdown[cpu] = countdown_reset;
- if ((countdown_reset || !do_coundown) &&
+ if ((countdown_reset || !do_countdown) &&
!cpumask_test_cpu(cpu, &irq_enabled_cpus)) {
/* We have to enable the irq */
- int irq = OCTEON_IRQ_WDOG0 + coreid;
-
- enable_irq(irq);
+ enable_irq(octeon_wdt_cpu_to_irq(cpu));
cpumask_set_cpu(cpu, &irq_enabled_cpus);
}
}
@@ -472,7 +455,7 @@ static void octeon_wdt_calc_parameters(int t)
countdown_reset = periods > 2 ? periods - 2 : 0;
heartbeat = t;
- timeout_cnt = ((octeon_get_io_clock_rate() >> 8) * timeout_sec) >> 8;
+ timeout_cnt = ((octeon_get_io_clock_rate() / divisor) * timeout_sec) >> 8;
}
static int octeon_wdt_set_timeout(struct watchdog_device *wdog,
@@ -481,20 +464,25 @@ static int octeon_wdt_set_timeout(struct watchdog_device *wdog,
int cpu;
int coreid;
union cvmx_ciu_wdogx ciu_wdog;
+ int node;
if (t <= 0)
return -1;
octeon_wdt_calc_parameters(t);
+ if (disable)
+ return 0;
+
for_each_online_cpu(cpu) {
coreid = cpu2core(cpu);
- cvmx_write_csr(CVMX_CIU_PP_POKEX(coreid), 1);
+ node = cpu_to_node(cpu);
+ cvmx_write_csr_node(node, CVMX_CIU_PP_POKEX(coreid), 1);
ciu_wdog.u64 = 0;
ciu_wdog.s.len = timeout_cnt;
ciu_wdog.s.mode = 3; /* 3 = Interrupt + NMI + Soft-Reset */
- cvmx_write_csr(CVMX_CIU_WDOGX(coreid), ciu_wdog.u64);
- cvmx_write_csr(CVMX_CIU_PP_POKEX(coreid), 1);
+ cvmx_write_csr_node(node, CVMX_CIU_WDOGX(coreid), ciu_wdog.u64);
+ cvmx_write_csr_node(node, CVMX_CIU_PP_POKEX(coreid), 1);
}
octeon_wdt_ping(wdog); /* Get the irqs back on. */
return 0;
@@ -503,13 +491,13 @@ static int octeon_wdt_set_timeout(struct watchdog_device *wdog,
static int octeon_wdt_start(struct watchdog_device *wdog)
{
octeon_wdt_ping(wdog);
- do_coundown = 1;
+ do_countdown = 1;
return 0;
}
static int octeon_wdt_stop(struct watchdog_device *wdog)
{
- do_coundown = 0;
+ do_countdown = 0;
octeon_wdt_ping(wdog);
return 0;
}
@@ -540,14 +528,25 @@ static enum cpuhp_state octeon_wdt_online;
*/
static int __init octeon_wdt_init(void)
{
- int i;
int ret;
- u64 *ptr;
+
+ octeon_wdt_bootvector = cvmx_boot_vector_get();
+ if (!octeon_wdt_bootvector) {
+ pr_err("Error: Cannot allocate boot vector.\n");
+ return -ENOMEM;
+ }
+
+ if (OCTEON_IS_MODEL(OCTEON_CN68XX))
+ divisor = 0x200;
+ else if (OCTEON_IS_MODEL(OCTEON_CN78XX))
+ divisor = 0x400;
+ else
+ divisor = 0x100;
/*
* Watchdog time expiration length = The 16 bits of LEN
* represent the most significant bits of a 24 bit decrementer
- * that decrements every 256 cycles.
+ * that decrements every divisor cycle.
*
* Try for a timeout of 5 sec, if that fails a smaller number
* of even seconds,
@@ -555,8 +554,7 @@ static int __init octeon_wdt_init(void)
max_timeout_sec = 6;
do {
max_timeout_sec--;
- timeout_cnt = ((octeon_get_io_clock_rate() >> 8) *
- max_timeout_sec) >> 8;
+ timeout_cnt = ((octeon_get_io_clock_rate() / divisor) * max_timeout_sec) >> 8;
} while (timeout_cnt > 65535);
BUG_ON(timeout_cnt == 0);
@@ -576,16 +574,10 @@ static int __init octeon_wdt_init(void)
return ret;
}
- /* Build the NMI handler ... */
- octeon_wdt_build_stage1();
-
- /* ... and install it. */
- ptr = (u64 *) nmi_stage1_insns;
- for (i = 0; i < 16; i++) {
- cvmx_write_csr(CVMX_MIO_BOOT_LOC_ADR, i * 8);
- cvmx_write_csr(CVMX_MIO_BOOT_LOC_DAT, ptr[i]);
+ if (disable) {
+ pr_notice("disabled\n");
+ return 0;
}
- cvmx_write_csr(CVMX_MIO_BOOT_LOC_CFGX(0), 0x81fc0000);
cpumask_clear(&irq_enabled_cpus);
@@ -607,6 +599,10 @@ err:
static void __exit octeon_wdt_cleanup(void)
{
watchdog_unregister_device(&octeon_wdt);
+
+ if (disable)
+ return;
+
cpuhp_remove_state(octeon_wdt_online);
/*
@@ -617,7 +613,7 @@ static void __exit octeon_wdt_cleanup(void)
}
MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Cavium Networks <support@caviumnetworks.com>");
-MODULE_DESCRIPTION("Cavium Networks Octeon Watchdog driver.");
+MODULE_AUTHOR("Cavium Inc. <support@cavium.com>");
+MODULE_DESCRIPTION("Cavium Inc. OCTEON Watchdog driver.");
module_init(octeon_wdt_init);
module_exit(octeon_wdt_cleanup);
diff --git a/drivers/watchdog/octeon-wdt-nmi.S b/drivers/watchdog/octeon-wdt-nmi.S
index 8a900a5e3233..97f6eb7b5a8e 100644
--- a/drivers/watchdog/octeon-wdt-nmi.S
+++ b/drivers/watchdog/octeon-wdt-nmi.S
@@ -3,20 +3,40 @@
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
- * Copyright (C) 2007 Cavium Networks
+ * Copyright (C) 2007-2017 Cavium, Inc.
*/
#include <asm/asm.h>
#include <asm/regdef.h>
-#define SAVE_REG(r) sd $r, -32768+6912-(32-r)*8($0)
+#define CVMSEG_BASE -32768
+#define CVMSEG_SIZE 6912
+#define SAVE_REG(r) sd $r, CVMSEG_BASE + CVMSEG_SIZE - ((32 - r) * 8)($0)
NESTED(octeon_wdt_nmi_stage2, 0, sp)
.set push
.set noreorder
.set noat
- /* Save all registers to the top CVMSEG. This shouldn't
+ /* Clear Dcache so cvmseg works right. */
+ cache 1,0($0)
+ /* Use K0 to do a read/modify/write of CVMMEMCTL */
+ dmfc0 k0, $11, 7
+ /* Clear out the size of CVMSEG */
+ dins k0, $0, 0, 6
+ /* Set CVMSEG to its largest value */
+ ori k0, k0, 0x1c0 | 54
+ /* Store the CVMMEMCTL value */
+ dmtc0 k0, $11, 7
+ /*
+ * Restore K0 from the debug scratch register, it was saved in
+ * the boot-vector code.
+ */
+ dmfc0 k0, $31
+
+ /*
+ * Save all registers to the top CVMSEG. This shouldn't
* corrupt any state used by the kernel. Also all registers
- * should have the value right before the NMI. */
+ * should have the value right before the NMI.
+ */
SAVE_REG(0)
SAVE_REG(1)
SAVE_REG(2)
@@ -49,16 +69,22 @@
SAVE_REG(29)
SAVE_REG(30)
SAVE_REG(31)
+ /* Write zero to all CVMSEG locations per Core-15169 */
+ dli a0, CVMSEG_SIZE - (33 * 8)
+1: sd zero, CVMSEG_BASE(a0)
+ daddiu a0, a0, -8
+ bgez a0, 1b
+ nop
/* Set the stack to begin right below the registers */
- li sp, -32768+6912-32*8
+ dli sp, CVMSEG_BASE + CVMSEG_SIZE - (32 * 8)
/* Load the address of the third stage handler */
- dla a0, octeon_wdt_nmi_stage3
+ dla $25, octeon_wdt_nmi_stage3
/* Call the third stage handler */
- jal a0
+ jal $25
/* a0 is the address of the saved registers */
move a0, sp
/* Loop forvever if we get here. */
-1: b 1b
+2: b 2b
nop
.set pop
END(octeon_wdt_nmi_stage2)
diff --git a/drivers/watchdog/of_xilinx_wdt.c b/drivers/watchdog/of_xilinx_wdt.c
index fae7fe929ea3..1cf286945b7a 100644
--- a/drivers/watchdog/of_xilinx_wdt.c
+++ b/drivers/watchdog/of_xilinx_wdt.c
@@ -51,9 +51,16 @@ struct xwdt_device {
static int xilinx_wdt_start(struct watchdog_device *wdd)
{
+ int ret;
u32 control_status_reg;
struct xwdt_device *xdev = watchdog_get_drvdata(wdd);
+ ret = clk_enable(xdev->clk);
+ if (ret) {
+ dev_err(wdd->parent, "Failed to enable clock\n");
+ return ret;
+ }
+
spin_lock(&xdev->spinlock);
/* Clean previous status and enable the watchdog timer */
@@ -85,6 +92,9 @@ static int xilinx_wdt_stop(struct watchdog_device *wdd)
iowrite32(0, xdev->base + XWT_TWCSR1_OFFSET);
spin_unlock(&xdev->spinlock);
+
+ clk_disable(xdev->clk);
+
pr_info("Stopped!\n");
return 0;
@@ -167,11 +177,6 @@ static int xwdt_probe(struct platform_device *pdev)
if (IS_ERR(xdev->base))
return PTR_ERR(xdev->base);
- rc = of_property_read_u32(pdev->dev.of_node, "clock-frequency", &pfreq);
- if (rc)
- dev_warn(&pdev->dev,
- "The watchdog clock frequency cannot be obtained\n");
-
rc = of_property_read_u32(pdev->dev.of_node, "xlnx,wdt-interval",
&xdev->wdt_interval);
if (rc)
@@ -186,6 +191,26 @@ static int xwdt_probe(struct platform_device *pdev)
watchdog_set_nowayout(xilinx_wdt_wdd, enable_once);
+ xdev->clk = devm_clk_get(&pdev->dev, NULL);
+ if (IS_ERR(xdev->clk)) {
+ if (PTR_ERR(xdev->clk) != -ENOENT)
+ return PTR_ERR(xdev->clk);
+
+ /*
+ * Clock framework support is optional, continue on
+ * anyways if we don't find a matching clock.
+ */
+ xdev->clk = NULL;
+
+ rc = of_property_read_u32(pdev->dev.of_node, "clock-frequency",
+ &pfreq);
+ if (rc)
+ dev_warn(&pdev->dev,
+ "The watchdog clock freq cannot be obtained\n");
+ } else {
+ pfreq = clk_get_rate(xdev->clk);
+ }
+
/*
* Twice of the 2^wdt_interval / freq because the first wdt overflow is
* ignored (interrupt), reset is only generated at second wdt overflow
@@ -197,14 +222,6 @@ static int xwdt_probe(struct platform_device *pdev)
spin_lock_init(&xdev->spinlock);
watchdog_set_drvdata(xilinx_wdt_wdd, xdev);
- xdev->clk = devm_clk_get(&pdev->dev, NULL);
- if (IS_ERR(xdev->clk)) {
- if (PTR_ERR(xdev->clk) == -ENOENT)
- xdev->clk = NULL;
- else
- return PTR_ERR(xdev->clk);
- }
-
rc = clk_prepare_enable(xdev->clk);
if (rc) {
dev_err(&pdev->dev, "unable to enable clock\n");
@@ -223,6 +240,8 @@ static int xwdt_probe(struct platform_device *pdev)
goto err_clk_disable;
}
+ clk_disable(xdev->clk);
+
dev_info(&pdev->dev, "Xilinx Watchdog Timer at %p with timeout %ds\n",
xdev->base, xilinx_wdt_wdd->timeout);
@@ -245,6 +264,43 @@ static int xwdt_remove(struct platform_device *pdev)
return 0;
}
+/**
+ * xwdt_suspend - Suspend the device.
+ *
+ * @dev: handle to the device structure.
+ * Return: 0 always.
+ */
+static int __maybe_unused xwdt_suspend(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct xwdt_device *xdev = platform_get_drvdata(pdev);
+
+ if (watchdog_active(&xdev->xilinx_wdt_wdd))
+ xilinx_wdt_stop(&xdev->xilinx_wdt_wdd);
+
+ return 0;
+}
+
+/**
+ * xwdt_resume - Resume the device.
+ *
+ * @dev: handle to the device structure.
+ * Return: 0 on success, errno otherwise.
+ */
+static int __maybe_unused xwdt_resume(struct device *dev)
+{
+ struct platform_device *pdev = to_platform_device(dev);
+ struct xwdt_device *xdev = platform_get_drvdata(pdev);
+ int ret = 0;
+
+ if (watchdog_active(&xdev->xilinx_wdt_wdd))
+ ret = xilinx_wdt_start(&xdev->xilinx_wdt_wdd);
+
+ return ret;
+}
+
+static SIMPLE_DEV_PM_OPS(xwdt_pm_ops, xwdt_suspend, xwdt_resume);
+
/* Match table for of_platform binding */
static const struct of_device_id xwdt_of_match[] = {
{ .compatible = "xlnx,xps-timebase-wdt-1.00.a", },
@@ -259,6 +315,7 @@ static struct platform_driver xwdt_driver = {
.driver = {
.name = WATCHDOG_NAME,
.of_match_table = xwdt_of_match,
+ .pm = &xwdt_pm_ops,
},
};
diff --git a/drivers/watchdog/pcwd_usb.c b/drivers/watchdog/pcwd_usb.c
index 5615f4013924..b9e376c8e2e3 100644
--- a/drivers/watchdog/pcwd_usb.c
+++ b/drivers/watchdog/pcwd_usb.c
@@ -74,7 +74,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
#define USB_PCWD_PRODUCT_ID 0x1140
/* table of devices that work with this driver */
-static struct usb_device_id usb_pcwd_table[] = {
+static const struct usb_device_id usb_pcwd_table[] = {
{ USB_DEVICE(USB_PCWD_VENDOR_ID, USB_PCWD_PRODUCT_ID) },
{ } /* Terminating entry */
};
diff --git a/drivers/watchdog/qcom-wdt.c b/drivers/watchdog/qcom-wdt.c
index 4f47b5e90956..780971318810 100644
--- a/drivers/watchdog/qcom-wdt.c
+++ b/drivers/watchdog/qcom-wdt.c
@@ -162,6 +162,8 @@ static int qcom_wdt_probe(struct platform_device *pdev)
return -ENOMEM;
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (!res)
+ return -ENOMEM;
/* We use CPU0's DGT for the watchdog */
if (of_property_read_u32(np, "cpu-offset", &percpu_offset))
diff --git a/drivers/watchdog/renesas_wdt.c b/drivers/watchdog/renesas_wdt.c
index cf61c92f7ecd..831ef83f6de1 100644
--- a/drivers/watchdog/renesas_wdt.c
+++ b/drivers/watchdog/renesas_wdt.c
@@ -1,8 +1,8 @@
/*
* Watchdog driver for Renesas WDT watchdog
*
- * Copyright (C) 2015-16 Wolfram Sang, Sang Engineering <wsa@sang-engineering.com>
- * Copyright (C) 2015-16 Renesas Electronics Corporation
+ * Copyright (C) 2015-17 Wolfram Sang, Sang Engineering <wsa@sang-engineering.com>
+ * Copyright (C) 2015-17 Renesas Electronics Corporation
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 as published by
@@ -23,10 +23,22 @@
#define RWTCSRA_WOVF BIT(4)
#define RWTCSRA_WRFLG BIT(5)
#define RWTCSRA_TME BIT(7)
+#define RWTCSRB 8
#define RWDT_DEFAULT_TIMEOUT 60U
-static const unsigned int clk_divs[] = { 1, 4, 16, 32, 64, 128, 1024 };
+/*
+ * In probe, clk_rate is checked to be not more than 16 bit * biggest clock
+ * divider (12 bits). d is only a factor to fully utilize the WDT counter and
+ * will not exceed its 16 bits. Thus, no overflow, we stay below 32 bits.
+ */
+#define MUL_BY_CLKS_PER_SEC(p, d) \
+ DIV_ROUND_UP((d) * (p)->clk_rate, clk_divs[(p)->cks])
+
+/* d is 16 bit, clk_divs 12 bit -> no 32 bit overflow */
+#define DIV_BY_CLKS_PER_SEC(p, d) ((d) * clk_divs[(p)->cks] / (p)->clk_rate)
+
+static const unsigned int clk_divs[] = { 1, 4, 16, 32, 64, 128, 1024, 4096 };
static bool nowayout = WATCHDOG_NOWAYOUT;
module_param(nowayout, bool, 0);
@@ -36,8 +48,7 @@ MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
struct rwdt_priv {
void __iomem *base;
struct watchdog_device wdev;
- struct clk *clk;
- unsigned int clks_per_sec;
+ unsigned long clk_rate;
u8 cks;
};
@@ -55,7 +66,7 @@ static int rwdt_init_timeout(struct watchdog_device *wdev)
{
struct rwdt_priv *priv = watchdog_get_drvdata(wdev);
- rwdt_write(priv, 65536 - wdev->timeout * priv->clks_per_sec, RWTCNT);
+ rwdt_write(priv, 65536 - MUL_BY_CLKS_PER_SEC(priv, wdev->timeout), RWTCNT);
return 0;
}
@@ -64,8 +75,9 @@ static int rwdt_start(struct watchdog_device *wdev)
{
struct rwdt_priv *priv = watchdog_get_drvdata(wdev);
- clk_prepare_enable(priv->clk);
+ pm_runtime_get_sync(wdev->parent);
+ rwdt_write(priv, 0, RWTCSRB);
rwdt_write(priv, priv->cks, RWTCSRA);
rwdt_init_timeout(wdev);
@@ -82,7 +94,7 @@ static int rwdt_stop(struct watchdog_device *wdev)
struct rwdt_priv *priv = watchdog_get_drvdata(wdev);
rwdt_write(priv, priv->cks, RWTCSRA);
- clk_disable_unprepare(priv->clk);
+ pm_runtime_put(wdev->parent);
return 0;
}
@@ -92,7 +104,7 @@ static unsigned int rwdt_get_timeleft(struct watchdog_device *wdev)
struct rwdt_priv *priv = watchdog_get_drvdata(wdev);
u16 val = readw_relaxed(priv->base + RWTCNT);
- return DIV_ROUND_CLOSEST(65536 - val, priv->clks_per_sec);
+ return DIV_BY_CLKS_PER_SEC(priv, 65536 - val);
}
static const struct watchdog_info rwdt_ident = {
@@ -112,8 +124,8 @@ static int rwdt_probe(struct platform_device *pdev)
{
struct rwdt_priv *priv;
struct resource *res;
- unsigned long rate;
- unsigned int clks_per_sec;
+ struct clk *clk;
+ unsigned long clks_per_sec;
int ret, i;
priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL);
@@ -125,36 +137,40 @@ static int rwdt_probe(struct platform_device *pdev)
if (IS_ERR(priv->base))
return PTR_ERR(priv->base);
- priv->clk = devm_clk_get(&pdev->dev, NULL);
- if (IS_ERR(priv->clk))
- return PTR_ERR(priv->clk);
+ clk = devm_clk_get(&pdev->dev, NULL);
+ if (IS_ERR(clk))
+ return PTR_ERR(clk);
+
+ pm_runtime_enable(&pdev->dev);
- rate = clk_get_rate(priv->clk);
- if (!rate)
- return -ENOENT;
+ pm_runtime_get_sync(&pdev->dev);
+ priv->clk_rate = clk_get_rate(clk);
+ pm_runtime_put(&pdev->dev);
+
+ if (!priv->clk_rate) {
+ ret = -ENOENT;
+ goto out_pm_disable;
+ }
for (i = ARRAY_SIZE(clk_divs) - 1; i >= 0; i--) {
- clks_per_sec = DIV_ROUND_UP(rate, clk_divs[i]);
- if (clks_per_sec) {
- priv->clks_per_sec = clks_per_sec;
+ clks_per_sec = priv->clk_rate / clk_divs[i];
+ if (clks_per_sec && clks_per_sec < 65536) {
priv->cks = i;
break;
}
}
- if (!clks_per_sec) {
+ if (i < 0) {
dev_err(&pdev->dev, "Can't find suitable clock divider\n");
- return -ERANGE;
+ ret = -ERANGE;
+ goto out_pm_disable;
}
- pm_runtime_enable(&pdev->dev);
- pm_runtime_get_sync(&pdev->dev);
-
priv->wdev.info = &rwdt_ident,
priv->wdev.ops = &rwdt_ops,
priv->wdev.parent = &pdev->dev;
priv->wdev.min_timeout = 1;
- priv->wdev.max_timeout = 65536 / clks_per_sec;
+ priv->wdev.max_timeout = DIV_BY_CLKS_PER_SEC(priv, 65536);
priv->wdev.timeout = min(priv->wdev.max_timeout, RWDT_DEFAULT_TIMEOUT);
platform_set_drvdata(pdev, priv);
@@ -167,13 +183,14 @@ static int rwdt_probe(struct platform_device *pdev)
dev_warn(&pdev->dev, "Specified timeout value invalid, using default\n");
ret = watchdog_register_device(&priv->wdev);
- if (ret < 0) {
- pm_runtime_put(&pdev->dev);
- pm_runtime_disable(&pdev->dev);
- return ret;
- }
+ if (ret < 0)
+ goto out_pm_disable;
return 0;
+
+ out_pm_disable:
+ pm_runtime_disable(&pdev->dev);
+ return ret;
}
static int rwdt_remove(struct platform_device *pdev)
@@ -181,7 +198,6 @@ static int rwdt_remove(struct platform_device *pdev)
struct rwdt_priv *priv = platform_get_drvdata(pdev);
watchdog_unregister_device(&priv->wdev);
- pm_runtime_put(&pdev->dev);
pm_runtime_disable(&pdev->dev);
return 0;
diff --git a/drivers/watchdog/rt2880_wdt.c b/drivers/watchdog/rt2880_wdt.c
index 05524baf7dcc..98967f0a7d10 100644
--- a/drivers/watchdog/rt2880_wdt.c
+++ b/drivers/watchdog/rt2880_wdt.c
@@ -119,7 +119,7 @@ static int rt288x_wdt_bootcause(void)
return 0;
}
-static struct watchdog_info rt288x_wdt_info = {
+static const struct watchdog_info rt288x_wdt_info = {
.identity = "Ralink Watchdog",
.options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE,
};
@@ -152,7 +152,7 @@ static int rt288x_wdt_probe(struct platform_device *pdev)
if (IS_ERR(rt288x_wdt_clk))
return PTR_ERR(rt288x_wdt_clk);
- rt288x_wdt_reset = devm_reset_control_get(&pdev->dev, NULL);
+ rt288x_wdt_reset = devm_reset_control_get_exclusive(&pdev->dev, NULL);
if (!IS_ERR(rt288x_wdt_reset))
reset_control_deassert(rt288x_wdt_reset);
diff --git a/drivers/watchdog/sc1200wdt.c b/drivers/watchdog/sc1200wdt.c
index b34d3d5ba632..8e4e2fc13f87 100644
--- a/drivers/watchdog/sc1200wdt.c
+++ b/drivers/watchdog/sc1200wdt.c
@@ -342,7 +342,7 @@ static int __init sc1200wdt_probe(void)
#if defined CONFIG_PNP
-static struct pnp_device_id scl200wdt_pnp_devices[] = {
+static const struct pnp_device_id scl200wdt_pnp_devices[] = {
/* National Semiconductor PC87307/PC97307 watchdog component */
{.id = "NSC0800", .driver_data = 0},
{.id = ""},
diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c
index e7a715e82021..03805bc5d67a 100644
--- a/drivers/watchdog/sp805_wdt.c
+++ b/drivers/watchdog/sp805_wdt.c
@@ -281,7 +281,7 @@ static int __maybe_unused sp805_wdt_resume(struct device *dev)
static SIMPLE_DEV_PM_OPS(sp805_wdt_dev_pm_ops, sp805_wdt_suspend,
sp805_wdt_resume);
-static struct amba_id sp805_wdt_ids[] = {
+static const struct amba_id sp805_wdt_ids[] = {
{
.id = 0x00141805,
.mask = 0x00ffffff,
diff --git a/drivers/watchdog/stm32_iwdg.c b/drivers/watchdog/stm32_iwdg.c
index 6c501b7dba29..be64a8699de3 100644
--- a/drivers/watchdog/stm32_iwdg.c
+++ b/drivers/watchdog/stm32_iwdg.c
@@ -140,7 +140,7 @@ static const struct watchdog_info stm32_iwdg_info = {
.identity = "STM32 Independent Watchdog",
};
-static struct watchdog_ops stm32_iwdg_ops = {
+static const struct watchdog_ops stm32_iwdg_ops = {
.owner = THIS_MODULE,
.start = stm32_iwdg_start,
.ping = stm32_iwdg_ping,
diff --git a/drivers/watchdog/ts72xx_wdt.c b/drivers/watchdog/ts72xx_wdt.c
index 17c25daebcce..811e43c39ec4 100644
--- a/drivers/watchdog/ts72xx_wdt.c
+++ b/drivers/watchdog/ts72xx_wdt.c
@@ -112,7 +112,7 @@ static const struct watchdog_info ts72xx_wdt_ident = {
.identity = "TS-72XX WDT",
};
-static struct watchdog_ops ts72xx_wdt_ops = {
+static const struct watchdog_ops ts72xx_wdt_ops = {
.owner = THIS_MODULE,
.start = ts72xx_wdt_start,
.stop = ts72xx_wdt_stop,
diff --git a/drivers/watchdog/w83627hf_wdt.c b/drivers/watchdog/w83627hf_wdt.c
index d9ba0496713c..7817836bff55 100644
--- a/drivers/watchdog/w83627hf_wdt.c
+++ b/drivers/watchdog/w83627hf_wdt.c
@@ -429,7 +429,7 @@ static int __init wdt_init(void)
{
int ret;
int chip;
- const char * const chip_name[] = {
+ static const char * const chip_name[] = {
"W83627HF",
"W83627S",
"W83697HF",
diff --git a/drivers/watchdog/ziirave_wdt.c b/drivers/watchdog/ziirave_wdt.c
index b4e0cea5a64e..d3594aa3a374 100644
--- a/drivers/watchdog/ziirave_wdt.c
+++ b/drivers/watchdog/ziirave_wdt.c
@@ -737,7 +737,7 @@ static int ziirave_wdt_remove(struct i2c_client *client)
return 0;
}
-static struct i2c_device_id ziirave_wdt_id[] = {
+static const struct i2c_device_id ziirave_wdt_id[] = {
{ "rave-wdt", 0 },
{ }
};
diff --git a/drivers/watchdog/zx2967_wdt.c b/drivers/watchdog/zx2967_wdt.c
index 69ec5855584b..9261f7c77f6d 100644
--- a/drivers/watchdog/zx2967_wdt.c
+++ b/drivers/watchdog/zx2967_wdt.c
@@ -229,7 +229,7 @@ static int zx2967_wdt_probe(struct platform_device *pdev)
}
clk_set_rate(wdt->clock, ZX2967_WDT_CLK_FREQ);
- rstc = devm_reset_control_get(dev, NULL);
+ rstc = devm_reset_control_get_exclusive(dev, NULL);
if (IS_ERR(rstc)) {
dev_err(dev, "failed to get rstc");
ret = PTR_ERR(rstc);
diff --git a/drivers/xen/gntalloc.c b/drivers/xen/gntalloc.c
index 1bf55a32a4b3..3fa40c723e8e 100644
--- a/drivers/xen/gntalloc.c
+++ b/drivers/xen/gntalloc.c
@@ -294,7 +294,7 @@ static long gntalloc_ioctl_alloc(struct gntalloc_file_private_data *priv,
goto out;
}
- gref_ids = kcalloc(op.count, sizeof(gref_ids[0]), GFP_TEMPORARY);
+ gref_ids = kcalloc(op.count, sizeof(gref_ids[0]), GFP_KERNEL);
if (!gref_ids) {
rc = -ENOMEM;
goto out;
diff --git a/firmware/3com/typhoon.bin.ihex b/firmware/3com/typhoon.bin.ihex
deleted file mode 100644
index d7a83bea0c3b..000000000000
--- a/firmware/3com/typhoon.bin.ihex
+++ /dev/null
@@ -1,2819 +0,0 @@
-:10000000545950484F4F4E000200000009000000B4
-:100010000000FFFFCB99B1D44CB8D04B3202D4EEE4
-:10002000737E0B139BC0AEF440010000E8FC00009F
-:100030000000FFFF390000EA050000EA040000EAC2
-:10004000030000EA020000EA010000EA320200EACE
-:10005000C51400EA07002DE90E00A0E100100FE131
-:10006000D0209FE512FF2FE1FEFFFFEA010080E0B4
-:10007000042081E4010050E1FCFFFF1A0EF0A0E132
-:1000800000A0A0E10EB0A0E10000A0E3A8109FE551
-:10009000000081E5A4109FE5000081E50116A0E3C2
-:1000A000000091E5010080E3000081E5D700A0E3B6
-:1000B00000F021E188D09FE5DB00A0E300F021E122
-:1000C0007CD09FE5D200A0E300F021E174D09FE551
-:1000D000D100A0E300F021E16CD09FE59B1400EB80
-:1000E000D300A0E300F021E160D09FE560009FE530
-:1000F00060109FE560209FE5DBFFFFEB5C009FE564
-:100100005C109FE50020A0E3D7FFFFEB54009FE5C4
-:1001100054109FE5D4FFFFEB0A00A0E10BF0A0E133
-:10012000D310A0E301F021E1D4FFFFEB3CA09FE559
-:100130001AFF2FE1C6FFFFEA1521FFFF0C00100098
-:100140001C0010003C380080FC370080FC3F008021
-:100150007C340080800F000080300080ADDEADDE9A
-:10016000B0BB000024AB20404829000028050080D7
-:10017000BDBA214000000000FFFF000000000000A9
-:1001800000000000FFFF00000000000058570000C2
-:10019000864B00006001FFFFB0B5071C124D002424
-:1001A000286800281ED0381C104904F07BFD2968FF
-:1001B000C0460860002815D038010D4940181923A1
-:1001C000DB01C018416B80290CD2013141632868E2
-:1001D000C169C0462960390741600462C762B0BC8A
-:1001E00008BC1847201CFAE7E8170080EE0500005D
-:1001F000A01C008002490A68C046C26108607047BE
-:10020000E81700807047000070470000704700004A
-:1002100000000FE10010A0E1C01081E301F021E136
-:100220001EFF2FE100F021E11EFF2FE100000FE192
-:10023000C00080E300F021E11EFF2FE100000FE18C
-:10024000C000C0E300F021E11EFF2FE100000FE13C
-:10025000400080E300F021E11EFF2FE100000FE1EC
-:10026000800010E3800080E300F021E10000001234
-:100270001EFF2FE1000050E300000FE18000C013DB
-:1002800000F021E11EFF2FE100000FE18000C0E33C
-:1002900000F021E11EFF2FE1910000E01EFF2FE1A1
-:1002A000012080E0010080E01EFF2FE180B5084FB3
-:1002B000642804D3642038630020C04303E038631B
-:1002C000044905F001FB7863B86380BC08BC18479B
-:1002D000680E00808813000080B4104B00221F6B52
-:1002E000642F03D209680968490802D2101C80BC37
-:1002F0007047191CDB6B4F6BBB4205D24068000492
-:10030000000C1818C863F1E74168054B19434160B8
-:100310000448C16B0131C1630220E8E7680E008028
-:10032000000000800C2B008090B5071C154C0020AD
-:10033000216B64290BD2B96E490808D3216CA26BDA
-:10034000914207D2FA1D3932528B8918216490BC30
-:1003500008BC1847786A396BC0464862386B02F0AF
-:100360002DFE381C02F0E8FA0120BB231B01E11826
-:10037000C87305490A6C12180A6404498A6D121878
-:100380008A65E4E7680E00800C2B0080A42A0080B8
-:1003900080B40A48C06D02231840094A0021002891
-:1003A00003D0D163116480BC7047064807687B1C8A
-:1003B00003600A2FF7D30160F3E70000A42A00804E
-:1003C000680E0080E001008070470204120C000CEF
-:1003D00010180A04120C090C51180818010C05D049
-:1003E0000104090C000C0818010CF9D10004000CE0
-:1003F000704780B40022002918D04F087B1E002FC0
-:1004000006D00788BA1802301F1C013B002FF8D114
-:10041000490803D300880006000E8218100C05D08E
-:100420001004000C110C4218100CF9D11004000C2F
-:1004300080BC704780B58389C789FB18078AFB1881
-:10044000478AFB18407A0002C718380C05D03804D8
-:10045000000C3B0CC718380CF9D1081C111CFFF715
-:10046000C8FF011C381CFFF7B0FF80BC08BC184750
-:1004700090B5022382681A400027002A0FD00A4A4A
-:100480009369013393610A688B689A1800681C1895
-:1004900057810969101CFFF7ACFFC0436081381C0D
-:1004A00090BC08BC184700000C2B008090B50423BA
-:1004B00082681A400027002A11D04A6852090ED3D8
-:1004C000094A136A01331362CB6802689C1801233E
-:1004D0009B07083A1A43126800F02EF82082381C55
-:1004E00090BC08BC184700000C2B008090B58023FE
-:1004F00082681A400024002A15D04A68920912D353
-:100500000B4AD3690133D361CB6802689F1801237A
-:100510009B07083A1A43126800F00EF8002800D131
-:100520000448C046F880201C90BC08BC1847000056
-:100530000C2B0080FFFF0000B0B5141C051C0F1C25
-:100540003869B96841183868FFF753FFC0430104A0
-:10055000090C201CFFF739FF041CB86879694018A2
-:10056000696888420CD22A681218091A101C00F017
-:1005700005F9C0430104090C201CFFF726FF041CE9
-:10058000E0430004000CB0BC08BC184780B5071C51
-:10059000B86BC0081AD3B86AF96B4018796C00F0D0
-:1005A000EDF8C0430104090C0A4807D02023B969BB
-:1005B0001943B961016B0131016307E0FF23013386
-:1005C000B9691943B961416A01314162002080BCB7
-:1005D00008BC18470C2B008080B5071CB86B41097C
-:1005E0001CD3C0081AD3F81D3930007B062815D15A
-:1005F000381C00F053F8011C0A4807D04023B969A1
-:100600001943B961816B0131816307E001239B02CA
-:10061000B9691943B961C16A0131C162002080BC66
-:1006200008BC18470C2B0080B0B5071CB86B8109BB
-:100630002CD3C0082AD3F81D3930007B112825D1CE
-:10064000B86A396C401801239B07063018430068CC
-:1006500005042D0C0F4C11D0381C00F01FF8002899
-:100660000CD0A84202D10C4B984207D08023B86925
-:100670001843B861606B0130606307E001235B02DF
-:10068000B8691843B861A06A0130A0620020B0BC0C
-:1006900008BC18470C2B0080FFFF0000F0B5FFB02E
-:1006A00099B0041CE06B616C091803AA8518A36A51
-:1006B00000208A080132979207D082009F5803AE2B
-:1006C000B750979A01308242F7D8606A01239B079E
-:1006D000043018430068C046029002AF3F8803A868
-:1006E000FFF787FEC0430104090C381CFFF76DFEBD
-:1006F000071CE06BA16C4018616A01239B0708315D
-:1007000019430968C046019101A90988013188424D
-:100710000CD2A26A1218091A101C00F02FF8C0435C
-:100720000104090C381CFFF750FE071CA889E98951
-:100730000818298A0818698A0818697A09020818A5
-:10074000A16C626C891A0A04120C1102120A11437C
-:100750000904090C0918080C05D00804000C090C40
-:100760004118080CF9D1381CFFF72FFEC0430004D4
-:10077000000C7FB019B0F0BC08BC1847B0B4002220
-:1007800000292ED083079B0FDC0047180425EF1BA0
-:10079000BF07BF0FFF008008800059180331890888
-:1007A0004D1E02C8E140A1406B1E002D09D00C0473
-:1007B000240CA218090C8A1802C81C1C013B002C2E
-:1007C000F5D1B940081CF8400104090C8918000C47
-:1007D0004218100C05D01004000C110C4218100C1B
-:1007E000F9D11004000CB0BC7047000090B4002098
-:1007F0000127114942001218D20053189C680123A6
-:100800009B0723431B681B031B0B8A581203120B05
-:1008100093420CD101300428ECD30848C06A01038C
-:10082000090B0748006F0003000B814202D0381CFF
-:1008300090BC70470020FBE7A803008000401440F4
-:10084000680E008098B4144AC04600928300134892
-:10085000C05807033F0B1248C0580203120B11483F
-:10086000C0580003000B104CE45801239B0723439E
-:100870001B689B00CC000121984201D1081C09E0B3
-:10088000984203D9101ADA1B801800E0181A844223
-:10089000F4D3002098BC704755555555200400806E
-:1008A00028040080080400801804008080B4130429
-:1008B00000D0013A80000B1C13490F58C0463B6022
-:1008C0000B58C0465A600A580832104B1B589A42BF
-:1008D00001D30F4A12580F4B1F5801239B073B436C
-:1008E0001B689B0017033F0B9F4206D10A48C16853
-:1008F0000131C160012080BC7047084B1B58C046C5
-:100900001A600A500020F6E70804008028040080DE
-:100910002004008018040080A08220401004008081
-:10092000FF5F2DE948FEFFEB01B6A0E301B18BE2CA
-:10093000028AA0E3017AA0E301A9A0E30156A0E3A3
-:10094000C8609FE5C8909FE514409BE5000054E314
-:100950002C00000A030A14E31100000A0C0096E5BB
-:10096000000050E32100000A010A14E30500000A18
-:100970001C0096E5010AC0E31C0086E51C0085E525
-:10098000147085E5060000EA020A14E30400000A78
-:100990001C0096E5020AC0E31C0086E51C0085E504
-:1009A000148085E5010914E30400000A1C0096E5A3
-:1009B0000109C0E31C0086E51C0085E514A085E55F
-:1009C000020014E34000001B010014E35400001B6C
-:1009D000020B14E36700001B010B14E32000001B53
-:1009E000180099E5010080E2180089E5D5FFFFEACB
-:1009F0001C0096E5010AC0E31C0086E51C0085E5A5
-:100A0000147085E5E1FFFFEAFF5FBDE804F05EE2F8
-:100A1000680E00800883204010101FE5143091E517
-:100A20000020C3E1142081E50116A0E30C2081E53C
-:100A30000B12A0E3000081E518109FE5B024D1E17E
-:100A4000012082E2B024C1E13C2091E5000082E176
-:100A50003C0081E51EFF2FE1A0822040FFFFFFEA5E
-:100A6000FEFFFFEA010BA0E30116A0E3140081E5FD
-:100A7000001A81E1242091E570001FE500000000CC
-:100A8000242080E5281091E500000000281080E572
-:100A90002C2090E5012082E22C2080E53F0001E23D
-:100AA0003F0050E31EFF2F1118009FE5001090E556
-:100AB000011081E2001080E50218A0E30B02A0E320
-:100AC000001080E51EFF2FE1300400800106A0E346
-:100AD000010180E2001090E5010811E30B10A0E392
-:100AE000021981E20500001A002090E54228B0E1D9
-:100AF0000500001A000090E5020C10E30200000A55
-:100B00000607A0E34C1180E5030000EA0C009FE516
-:100B100000000000401080E5FFFFFFEAFEFFFFEA53
-:100B2000000000800106A0E3010180E2001090E5D2
-:100B3000010811E30C10A0E3021981E20500001A7C
-:100B4000002090E54228B0E10500001A000090E581
-:100B5000020C10E30200000A0607A0E34C1180E536
-:100B6000030000EA4C001FE500000000401080E593
-:100B7000FFFFFFEAFEFFFFEA021BA0E30106A0E37E
-:100B8000141080E51EFF2FE180211FE5143092E54F
-:100B900000000000003080E51C0092E5000000002D
-:100BA000000081E50010A0E3141082E50106A0E337
-:100BB0001C1082E50C1080E51C1092E5000000007E
-:100BC0001C1080E51EFF2FE1C0211FE50000000082
-:100BD0001C1082E50116A0E3140082E50C0081E5FB
-:100BE0001C0092E5000000001C0081E51EFF2FE1C3
-:100BF00080B50F1C381C00F017F8002802D0381CF4
-:100C000000F092F8002080BC08BC184780B50F1C8B
-:100C1000381C00F009F8002802D0381C00F084F8D5
-:100C2000002080BC08BC1847F0B407683A78D207A7
-:100C3000D20F0024002A03D0FF220132426000E0DC
-:100C400044603A7B7B7B1B021A43812A08D1012333
-:100C50005B0242681A4342600422BF18826000E0CF
-:100C600084603A7B7B7B1B021A43082A06D1062349
-:100C700041681943416081680E313CE0C123DB00CB
-:100C80009A4203D14168244B19433EE0234B9A42D8
-:100C900004D101231B034168194336E01302120AF1
-:100CA0001206120E1A431204120C2E3A1C4B9A42D0
-:100CB0002DD80125426815434560BA7BFB7B1B029A
-:100CC0001A43184B9A4222D1FB1D093344CB9B0790
-:100CD000DB0EDA405B4220339E401643032E18D1D0
-:100CE000397D7B7D1B021943082907D10421294343
-:100CF000416081681631816001210AE0C123DB0077
-:100D0000994204D1012189032943416000E08460B4
-:100D10000021081CF0BC70470240000081800000E8
-:100D2000AE050000AAAA000080B44268D1083FD3F3
-:100D300001688368591802398F783F073F0F052FE4
-:100D400003D1DA1D0D32C26005E0BF00DB19C360BC
-:100D500008231A4342608A781207120F9200026138
-:100D60000A794B791B021A431302120A1206120E59
-:100D70001A431204120C4261CA7A062A03D11023C4
-:100D800042681A4310E0112A03D1202342681A4313
-:100D90000AE0332A03D1402342681A4304E0322A8E
-:100DA00003D1802342681A434260C97AC046017663
-:100DB00080BC70470A78C04602604B781B021A4319
-:100DC00002608B781B041A430260C978090611433C
-:100DD0000160704780B5071C4868800926D3B86A4F
-:100DE000C968401801239B070230184300680004BB
-:100DF000000C11239B02984218D1786A396BC046C7
-:100E00004862386B02F0DAF8381C01F095FD0120D9
-:100E10000749C046C87307494A6C12184A64064914
-:100E20008A6D12188A6580BC08BC18470020FAE752
-:100E3000181A00800C2B0080A42A0080810719D08A
-:100E40008008800001239B07011D18430068194397
-:100E500009680202120E1206000AFF231B04184042
-:100E600010430A0A1206120E104309021B0A194007
-:100E70000843704701239B071843006801060202DC
-:100E8000FF231B041A401143020A1B0A1A40114394
-:100E9000000E0843EDE70000F0B50423816B194014
-:100EA0000022002946D0C71D3937397B332901D0AC
-:100EB00032293FD1016BC0464A65C41D2D34CD1D7A
-:100EC0002D3500229300E658C046EE500132072A25
-:100ED000F8D3826AC0464A63826AC0468A627A8BC5
-:100EE000CB1D39335A83406AC046486212480127F5
-:100EF0004268002A10D1C268002A13D14269002A30
-:100F00000DD10161C160016A022902D3203007714D
-:100F10000CE000F013F809E0C268002A02D1016178
-:100F2000C16003E00269C04651650161381CF0BC34
-:100F300008BC1847101CFAE76C06008080B51E49F3
-:100F40000022CB68002B34D0C81DF9308362CB68F7
-:100F50009B6AC046C362CF697B00DF197F02174BD3
-:100F6000FF18FF37653783630763CB1DFF335A33A1
-:100F70001A72CB69002B01D0CA6101E00123CB6159
-:100F80000F1CC968496A098901314163F81DFF30A6
-:100F90003A30426002828260C260381C00F0CEFAB1
-:100FA000386A01303862381C00F00AF880BC08BC8E
-:100FB0001847101CFAE700006C060080ACAB20401C
-:100FC000F0B5071CF91DF931886AC21D2D320123C5
-:100FD0009B0708321A43C86A12681204120C801860
-:100FE0008279C3791B021A431302120A1206120EE7
-:100FF0001A431204120C02389204920C0026254D5A
-:10100000EC1DFF343A34002A04D0208A01239B02CD
-:1010100018432BE001239B07C21D0D321A431268AF
-:1010200012041230184300680004000C1043031C23
-:10103000F81DFF304A308278C86B191C02F002F8A4
-:10104000002804DA208AFF23013318430EE0F91D3B
-:10105000FF313A3108600104090C381C00F01CF81B
-:10106000002814D1208A01235B0218432082218AA0
-:10107000381C00F0A2FBE86801239B07543018439A
-:101080000068C046E860301CF0BC08BC184701206E
-:10109000FAE700006C060080F8B5071CFC1DF93467
-:1010A000A06BA66AC51D0D353848C06A4B0059189B
-:1010B0004901421801208007104300680004000C19
-:1010C000009001239B07D01D053018430068381C91
-:1010D000291C00F0C2FAA888410701D0002051E085
-:1010E00029890918606B8142F8D86989EA888918CA
-:1010F0008142F3D80098012825D1E06AF16B4018AD
-:10110000716CFA1DCD3201F033F9FA1DFF323A321B
-:10111000E06A51694018C31D0333002081005E5806
-:10112000C919FF3101314E6101300428F6D3E06A5C
-:1011300051694018C11D0531002000224300CA52E8
-:1011400001300628FAD3291C114A0020FFF7AEFB14
-:1011500001225204606B02430120216BFFF7A6FBC2
-:1011600001225204606B02430020E16AFFF79EFBFC
-:10117000A16B084A0120FFF799FB03200649C046EE
-:1011800048620120F8BC08BC184700004C2A0080C7
-:101190005400030014000F006C070080F0B58DB000
-:1011A0000020B54AD51DF935686201200005B34914
-:1011B000C0460860A86AC41D2D34B148C06AD71D56
-:1011C000FF373A3739684B00591849014018012355
-:1011D0009B07C11D05311943096808301843006891
-:1011E000C0460990FF231B021840000A0A900A9883
-:1011F000A44E012859D1286BA2688018A24A2169FF
-:101200000904090C01F026F9286B79694018C11D01
-:10121000053100208200984BD318FF3301335B69FE
-:10122000C0468B5001300428F4D30020311C8200CA
-:10123000561801239B0733431B6804AEB35001309B
-:101240000328F4D300200890904942008B5AB25AE8
-:10125000934213D08E48C1890131C181B8680028FA
-:1012600003D1388A1023184371E0388A4023184389
-:101270006DE000F011F901F067FFF5E0013006289C
-:10128000E3D3089800280CD1B868411CB960002845
-:1012900003D1388A0123184302E0388A0423184313
-:1012A000388278680130786062E00A9802285FD15D
-:1012B0000998400C73D301239B07E01D01301843AC
-:1012C0000068E11D0D311943096840180C3800040D
-:1012D000000C00218A006B4BD61801239B07334377
-:1012E0001B6804AEB35001310329F3D30021831EE0
-:1012F0000C93684A166BC0460B968A000C9B9B1891
-:101300000B9E9E1901239B0733431B686E46B35007
-:1013100001310429F1D369468B1C07930021089100
-:1013200004AE4A00079B9B5AB25A934211D05848C8
-:10133000C1890131C181F868411CF960002803D1DD
-:10134000388A2023184302E0388A802318433882E1
-:101350008FE701310629E4D3089900290DD1F968F6
-:101360004A1CFA60002904D1398A0223194303E098
-:101370000CE0398A082319433982296B08180123A4
-:101380009B07013818430068C046207601239B075D
-:10139000E01D1130184300680106090E00E019E055
-:1013A00035482A6BC046EA6204294FD10121C61D87
-:1013B000FF365A3631720A9902291ED10999090E4F
-:1013C00049061AD1E11D0531194309680906090EBC
-:1013D00008391AE001239B07E01D0130184300681B
-:1013E000E11D0D311943096840180004000CF9682B
-:1013F0004A1CFA600029BCD1B6E701239B07E11D16
-:101400000531194309680906090EA160E86AC0465A
-:101410002060201CFFF788FC207E332801D0322872
-:1014200011D10121144CC046F960B960201C00F0B4
-:1014300085F8286BA96AC0468862201CFFF7C0FDAA
-:10144000002811D10EE00020307211E0332901D0C4
-:1014500032290DD1071C00F071F8381CFFF7B0FDE0
-:10146000002801D101F070FE0DB0F0BC08BC184797
-:1014700000F012F8F6E700006C060080000000B0F3
-:101480004C2A0080ACAB20404007008082070080DF
-:101490000C2B00806C070080F0B5254841680131B5
-:1014A0004160244FF91DF9310024886AFA68C0466A
-:1014B00094610422FB68C046DA601022FB68C046D3
-:1014C0009A61FA1DFF325A32137A1B4A002B0BD055
-:1014D000158A2E0A360233232B409B001E43CC2351
-:1014E0002B409B0833431382128AFB68C046DA8381
-:1014F0004A6BFB68C046DA810A6BC0468262C462EE
-:10150000C31D39334A6BC0465A83042302681A4309
-:101510000260886A01F032FAF86801239B075430B0
-:1015200018430068C046F860F0BC08BC18470000CB
-:101530000C2B00806C060080AC07008080B5C11DBC
-:10154000F9318A6A01239B07D11D45311943096886
-:101550000B061B0E0127C11DFF314A31332B05D16C
-:101560008B70011C101C00F00FF806E0322B08D124
-:101570008B70011C101C00F03CF8381C80BC08BCAF
-:10158000184700208870F9E790B4CA1DF932332754
-:10159000CC1DFF344A34D36AC046A770FF314131B5
-:1015A000076CC0464F61FB18391C9F1E01239B0727
-:1015B000FC1C23431B681B061B0E9B001B041B0CFF
-:1015C000C9180831016401239B07B91C1943096834
-:1015D00034300176F81D0130184300680004B91D4D
-:1015E0001943D06309680904090C0843D06390BC0F
-:1015F0007047B0B5CA1DF932C51D2D353220CF1D3B
-:10160000FF374A37D36AC046B870CC1DFF343A342E
-:10161000E868C04660611030E8606069C018871EE5
-:1016200001239B07381D184300680004B91C1943A7
-:10163000D06309680904090C0843D063F81D03301E
-:10164000FFF7FCFB2062F81D0730FFF7F7FB606235
-:1016500000202876B0BC08BC1847F7B581B00198C7
-:10166000C71DF937B86A01239B07D41D05342343EE
-:101670001C68FF23FE3323407F6B3F043B430B601A
-:1016800034301C1C80232340019FFF374137002B3F
-:101690003CD00C23009300239D00AE1836696D18D2
-:1016A0006E610133052BF7D300239D00AE18766AD7
-:1016B0006D18AE620133052BF7D3019BFF33513315
-:1016C0009B78332B0ED101239B07C51D01352B437E
-:1016D0001B68C0464B8101239B07C51D0D352B435D
-:1016E0001B6816E07B69C0464B8101239B07C51D23
-:1016F0000D352B431B687D695D1B01239B07C61DB0
-:10170000013633431B68EB180C3B02E000230093C7
-:101710004B81CB80630949D301239B07C41D05344A
-:1017200023431B68C0460B8101239B07C41D0D3456
-:1017300023431B680C891B1B009C1C1B01239B075C
-:1017400008301843006820188880386A040EFF2388
-:101750001B0403401B0A1C43FF231B0203401B0204
-:10176000234300061843C860786A070EFF231B0452
-:1017700003401B0A1F43FF231B0203401B023B4382
-:10178000000618430861D06BC046C863906BC04622
-:101790000864506CC0464864106CC0468864D06CC5
-:1017A000C046C864906CC046086502E000230B8107
-:1017B0008B8004B0F0BC08BC184700B50F4A938971
-:1017C00001339381C21DF9320423906AC046C3607D
-:1017D00010238361CB0A01D318238361C183516B2A
-:1017E000C046C181516BC21D393251830423016847
-:1017F0001943016001F0C2F808BC18470C2B0080A7
-:10180000B0B51B4C206A02281BD20020E71D1937F7
-:101810003871E168E01DF930002915D0426A002ACC
-:1018200012D101250AE0FFF789FB002809D1206ABF
-:10183000022800D33D71E068002802D038790028E2
-:10184000F1D0B0BC08BC1847406A0028F9D1002983
-:10185000F7D16069002804D00648006803F0A8FCAE
-:10186000EFE760680028ECD000F05AF8E9E70000E4
-:101870006C06008034040080B0B5071C2023B868D3
-:1018800018400124002500280BD1386A002803D114
-:10189000281CB0BC08BC18471F48016E0131016606
-:1018A00003E04868C423184003D1386A00F00CFCF8
-:1018B0002FE0381C00F01CFC381C00F07BFAB868E4
-:1018C000C00802D3386A00F0D1FBB868396AC04654
-:1018D0008860386AC046C56010484168002911D147
-:1018E000C168002909D14169002906D1396AC04679
-:1018F0008160416000F014F80BE0396AC0468160F5
-:10190000416006E0396A8268C046D160396AC046E3
-:101910008160201CBDE70000A42A00806C060080C6
-:1019200090B50B4C6768002F0FD0381C00F012F8F0
-:1019300000280AD16068C068C0466060381C00F0AA
-:10194000C3FB002090BC08BC18470120FAE7000048
-:101950006C060080F0B5071CFE1D4936307840004B
-:10196000C019858B334C344B9D423CD0381C211C14
-:101970002A1C00F01DF93148806A5821694340183B
-:1019800001239B07184300680004000C2C4D01281C
-:101990001AD13078C019C11D1931087A3A688018F7
-:1019A000097BEA1D213200F0E3FC3078C0192030B9
-:1019B000007939684018C11D05310020002342001C
-:1019C0008B5201300628FAD3A08841070BD1218918
-:1019D000091878680004000C814204D86189E28803
-:1019E0008918814203D90020F0BC08BC1847211C8B
-:1019F000144A0020FEF75AFF01225204786802437D
-:101A000001203968FEF752FF012252047868024330
-:101A100000203968FEF74AFF0B490C4A0120FEF707
-:101A200045FF0120E91D193148710221EA1DF932F3
-:101A30005162D9E728AC2040FFFF00004C2A00800B
-:101A40006C0600805400030014AC20401400070012
-:101A5000F0B583B000214F48C21DF9325162012117
-:101A6000C9044D4AC0461160C11D19314979002988
-:101A700004D14A48006803F09BFB87E0454847686B
-:101A8000FC1D493421784800C019808B444A926A71
-:101A900058235843151801239B07EA1D05321A43A2
-:101AA000126808352B431D68FF231B022B401B0ABD
-:101AB0003C4D012B24D1C819C11D1931087A3A684F
-:101AC0008018394A097B00F0C5FC2078C019203005
-:101AD0000079396841180020820053199B6E6E46C8
-:101AE000B35001300328F7D3CA1D053269460020E0
-:101AF0004300CD5AC046D55201300628F8D32DE018
-:101B0000022B2BD1110A29D300218A0053199B6E75
-:101B10006E46B35001310329F7D321784900C91922
-:101B2000098F3A688B186A4600214D00565BC04603
-:101B30005E5301310629F8D319498A6A13181A6DC0
-:101B4000009D5540194AD66875401D65896A081878
-:101B5000416D029B59409269514041652078411E78
-:101B6000217000280DD0381CFFF7F4FE00280DD19D
-:101B7000084A5068C068C0465060381C00F0A4FA9B
-:101B800002E0381C00F073FA01F0DEFA03B0F0BC9A
-:101B900008BC18476C060080000000B038040080C4
-:101BA0004C2A0080ACAB2040940600800883204083
-:101BB000F0B582B0694B9F6A58235A43BA18C31DC7
-:101BC00049331F7801239B07D41D013423431D682B
-:101BD00043681C0401239B07D61D053633431B684D
-:101BE0001C4342231C430C60FF2636022E40012377
-:101BF0005B029E4274D16B0C2BD3C31920331B792B
-:101C0000C0464B817B001B181B8F4C891B1BCB8054
-:101C10000024A6000196B318DE1D093601239B0798
-:101C200033431B68019E761873610134052CF0D391
-:101C30000024A6000096B318DE1D1D3601239B0765
-:101C400033431B68009E7618B3620134052CF0D331
-:101C500006E000234B81CB8040239C430C60231C77
-:101C60006B0E4AD3C31920331B7910330B817B00D1
-:101C70001B181B8F0F89DB1B8B8001239B07D41D37
-:101C8000353423431B68C046CB6301239B07D41D17
-:101C9000313423431B68C0460B64AB0E21D20123B1
-:101CA0009B07D41D3D3423431B68C0464B6401236E
-:101CB0009B07D41D393423431B68C0468B64012322
-:101CC0009B07D41D453423431B68C046CB640123C6
-:101CD0009B07D41D413423431B68C0460B6500E0BD
-:101CE0000FE0FB1F013B1B041B0C0768FF18036977
-:101CF000081C391C00F034F82CE000230B818B8089
-:101D000028E000238B800B81C31920331B7AC04647
-:101D10004B817B001818008EC046C88000208700C9
-:101D2000BB18DC1D093401239B0723431B687F1864
-:101D30007B6101300528F2D300208700BB18DC1D31
-:101D40001D3401239B0723431B687F18BB620130AE
-:101D50000528F2D302B0F0BC08BC18474C2A00801A
-:101D600080B41F1C3B0C18D2176D114BC046DF60AE
-:101D7000526DC0461A61C7601A69C0460261D868D0
-:101D8000C0460880D868000C48801869C046888022
-:101D90001869000CC88080BC70474A8812040B8800
-:101DA0001A43C2608A88C988090411430161F2E7B5
-:101DB0002C070080F1B588B000220898006A089BC3
-:101DC0009968490A02D30127FF0300E00027038B2B
-:101DD000002B19D0A349896A1C1C58236343C918D6
-:101DE00001239B075839194309680904090C022982
-:101DF00002D108231F4307E0418B002902D00C23A6
-:101E00001F4301E004231F43838A002B18D0954908
-:101E1000896A1C1C58236343C91801239B0758393E
-:101E2000194309680904090C022901D10F4307E08D
-:101E3000C18A002902D003231F4301E001231F436D
-:101E4000C11D393107914B890C891C192404240CBC
-:101E5000089D2D68C0460195C9887D081AD31A1CB3
-:101E6000C31D19331A72079A9289C0461A73079ACA
-:101E70001289C04602860487828A013A828301223F
-:101E80001971089B1B685B185B789B001B041B0C7B
-:101E900008335918BB0847D3079B5B8985180695FB
-:101EA00020352B72079B9B89C0462B73079B1B8990
-:101EB0002E1C55002D1805952B86002A01D0C38AAB
-:101EC00000E0838A013B059DC046AB833171654BC1
-:101ED0009D6A059B9E8B58237343EB18DD1D0135CE
-:101EE00001239B072B431D682B0E5B0601D1083194
-:101EF00000E0103181235B021D409D4203D1E31FAE
-:101F0000053B1C04240C059BC0461C87089B1B68D2
-:101F10001B19103B9B7B069D40352B702B780233A1
-:101F2000E31A1C04240C0132BB089B076DD08318F4
-:101F3000203304931972019B5D1801239B072B43E7
-:101F40001B681B071B0F9B00049EC0463373009544
-:101F50002B781B071B0F9B00049DC0462B73009D15
-:101F6000EB78AD781B021D432B022D0A2D062D0E9A
-:101F70002B4355002D182B86049BC0465972049B99
-:101F80001B7B2E1C049DC0466B73338EC04673862C
-:101F9000009D2B781B071B0F9B001B041B0C591863
-:101FA00004253D400ED03487038B013BB383131CC3
-:101FB0001B1820331971019B5B185B789B00591823
-:101FC000083101323B0937D3002D01D0438B00E0AB
-:101FD000038B55002D18013BAB83831803932033EB
-:101FE0001971204B9D6A53001B1802939E8B582336
-:101FF0007343EB18DD1D013501239B072B431D683F
-:102000002B0E5B0602D1083101E015E0103181236F
-:102010005B021D409D4203D1E31F053B1C04240CC1
-:10202000029BC0461C87089B1B681B19103B9B7BAF
-:10203000039C403423700132079BC046D980511E57
-:10204000C31D493319700761042A06D2064953009B
-:102050001B1899830132042AF9D309B0F0BC08BCDB
-:10206000184700004C2A0080FFFF0000704780B531
-:102070008CB0071C12480168013101603868C04605
-:1020800000907868C0460190B868C04602900D483C
-:102090004168C968C0464160381C00F04FF8B86814
-:1020A000400906D31023029818430290684602F0B4
-:1020B000E1FF684602F09AFE0CB080BC08BC1847ED
-:1020C0000C2B00806C06008000B58CB00168C04607
-:1020D00000914168054B1943019100F02FF86846C3
-:1020E00002F084FE0CB008BC18470000000000A0FD
-:1020F000026A0368C04613604068C04650604032C0
-:102100004868C0469080C868C046D0804869C046CC
-:1021100010818868C0465081087EC0469073086967
-:10212000C0469081704704490868002800D1704774
-:10213000C268C0460A60FAE76C06008002490A6875
-:10214000C046C260086070476C060080B0B40022D0
-:10215000124F7C7F01347C770323FC1D19343862D5
-:10216000796223720E4C25686B0C05D223681B0C18
-:1021700010D12468A30A0DD301230A4FC046FB6285
-:10218000094F0A4BC046DF6099605860101C186008
-:102190000132FBE7101C38640132FBE700000080CD
-:1021A00000001040C000180002810000400118002B
-:1021B000F0B5474F3868474E474D07235B02EC1890
-:1021C00000281DD1206B013020634449C0460860BF
-:1021D00043484169002913D0C11D6931097B002999
-:1021E0000ED001239B07016D19430968C046816128
-:1021F000C269914204D0F16C0131F16401F050FEEA
-:102200003868012817D137484169002913D0C11D0A
-:102210006931097B00290ED001239B07016D194309
-:102220000968C0468161C269914204D0F16C0131F4
-:10223000F16401F035FE386802282FD1BB231B0161
-:10224000EE18707B002803D00020707300F04AFD68
-:10225000307B002802D0786802F0AAFF1B23DB0144
-:10226000E818C08B04260640E06AB04214D0F86833
-:102270000130F860192811D31B48017B00290DD1CA
-:10228000FF3041304078002808D1B86802F090FF54
-:102290000020F860E66201E00020F860386803285A
-:1022A0000BD1EC1D7934E06B800802D3022002F0E0
-:1022B00007FC0223E06B9843E06338680130386024
-:1022C000032801D900203860F0BC08BC1847000082
-:1022D0003C040080A0822040680E0080400118006D
-:1022E000642D0080E42C008028050080B0B41D48D7
-:1022F000848A1D4A138AC11D093101279C4203D1DA
-:10230000438A548AA34210D00B78002B0DD04B780F
-:10231000002B0AD0448B938A9C4204DC134BC046AA
-:102320005F60978201E001339382C38B5C1CC4839E
-:10233000848BA3420EDB848A058B0023AC4205DA32
-:10234000448AC58AAC4201DA4B7000E04F70438288
-:102350008382C383418AC0465182808AC0461082EC
-:10236000B0BC7047E80E00803C04008040011800BB
-:10237000F7B591B06B46841E129914291AD9002022
-:1023800081006758C046575001300006000E1028E3
-:10239000F6D3002105208700D6594F1C3D062D0E8F
-:1023A0000F1CBF00DE51291C01300006000E102852
-:1023B000F1D309E0002081006358C046535001303A
-:1023C0000006000E0628F6D30020E070207260722E
-:1023D000A072207360731299142937D969468E1C34
-:1023E00091780907090F890014390D062D16002769
-:1023F000002D1BDDF01910A900F03DF800280ED0CB
-:10240000002010A90978002909DD0022391872542A
-:1024100001300006000E10A909788842F6DB10A8EA
-:102420000078381807063F0EAF42E3DB6846E21D2E
-:102430000D320021AB085F1C08D08B00C458C04689
-:10244000D45001310906090E8F42F6D814B0F0BC01
-:1024500008BC184790B4871E002089084B1C08D080
-:1024600081005458C0467C5001300006000E834263
-:10247000F6D890BC704780B40278D206D20E002302
-:102480000127012A01DC0F7011E04078C046087076
-:10249000142A04D10848017A0131017207E0022AA6
-:1024A00005D0052A03D0062A01D0152A02D1181C0E
-:1024B00080BC7047381CFBE7E082204000B50F4825
-:1024C00001231B06416999431A094161D16000212A
-:1024D000A12252039161191C094AC04611601B23B5
-:1024E000DB01C0188069002803D002F061FE08BC3F
-:1024F00018470448418801314180F8E7680E0080A0
-:10250000000000B0E082204070470000F0B586B0C7
-:10251000954AD068D71D7937012809D13889002814
-:1025200006D1D06F022301689943016014203881DD
-:102530008E4C616A8E48C36B5918C163A06A192317
-:10254000DB01D418A062216A0903090B814205D17D
-:10255000012040048749C0460860F3E0BB8A581C4C
-:10256000B8823D8B01200021AB4204DBD31D8933AF
-:102570005870B982F98333239B01D31805935B69A3
-:102580000F2B73D200217C4FC0463961216A8A68C3
-:102590001204120C4B681E0C3604FD1F093D002E60
-:1025A00005D13B2A03D30123DB029A4201D9A87348
-:1025B000C8E001239B07083119430968C04603910D
-:1025C00003A9098801310904090C798249090531F7
-:1025D0000906090E694EC04602966948436AC0461C
-:1025E0000193836AC0460093C21D113280690003C3
-:1025F000000B9268B3071A431268904201D1012080
-:102600000DE0904205D9009B181A019BD21A82183E
-:1026100000E0121A01200901914200D30020012894
-:1026200065D151492069002862D005994869013077
-:1026300048610220216AC046086000F0A7FC786368
-:10264000BE604949226AA36BD318666BB34200D9B6
-:10265000226BC046BA62BA6A0C32FA620022FA6190
-:1026600003AA5288D20903D3012200E07BE000E0F4
-:1026700000227A607A68C0460260788A414E6028FB
-:1026800004DCB083788AC046F08308E06020B08321
-:10269000798AF86A4218636B9A4203D8F183002260
-:1026A0003A6305E0216BC0463963616B081AF08319
-:1026B0002D49786B4268C046BA608268C046FA60AD
-:1026C0000269C0467A614069C046B8612E4BC8189D
-:1026D000049000F037F9049800F088F800F0F6FA5A
-:1026E000788AF18B884204D1F96A081804E038E04E
-:1026F00032E03A6B1018401A810702D0800880003F
-:102700000430616B091AA26B914200D2206BC04663
-:102710002062E87B002808D00022EA730599486906
-:1027200001384861786B00F073FA1848806A8006B7
-:10273000800E01280AD1206A0003000B0B4CA16A0D
-:10274000884203D006B0F0BC08BC18470120400402
-:102750000849C046086006E0E068002801D000F0A3
-:10276000B5FA0120A873EDE7680E00800040144020
-:10277000A42A0080000000B0281A00805555555545
-:10278000A8030080681A0080C40B000000001040FD
-:1027900080B5071C786A4089FF210131014010484B
-:1027A00002D1816C01318164796A4989490B02D275
-:1027B000416C013141640B48416A01314162786AE0
-:1027C000396BC0464862386B00F0F8FB381C00F0EB
-:1027D000B3F801200449C046C87380BC08BC184740
-:1027E000A42A0080A0822040181A0080F8B5071C97
-:1027F0000022F91D61310D1C786AC04600904089A5
-:10280000030C01D2400A03D2381CFFF7C1FF67E076
-:102810003548C06B00091FD3087840081CD200203F
-:102820004300CC5A314E9E1933239B01F3181B8869
-:102830009C420ED0B869396BC0468861F868396B24
-:10284000C046C860381C00F027F9381C00F074F846
-:1028500046E001300328E3DB022043005C18E488F3
-:10286000224E9E1933239B01F3181B889C4203D1EF
-:1028700001230138D842F0DC0123D842C4D01B4EDA
-:102880000B231B02F0184069002824D07D630098B8
-:102890004089000C1FD200242D239B01F018C06B2F
-:1028A000351C002817D0FE1D2D36A20052192D23ED
-:1028B0009B01D218D26B381C311C02F07BFC012822
-:1028C0000ED00134A00040192D239B01C018C06B0D
-:1028D0000028EAD101E0012A02D0381C00F008F8F3
-:1028E000F8BC08BC18470000E81A0080680E008099
-:1028F00080B5071CB869396BC0468861F868396BC8
-:10290000C046C860786A4089010C0ED2400A0CD3D8
-:102910003868400802D3381C02F00CFC381C00F068
-:10292000BBF8381C00F008F802E0381CFFF730FF55
-:10293000012080BC08BC18470121006B406AC046DA
-:1029400001607047B0B4C11D3931098B8908090491
-:10295000090C846AC21D6132002000290CDD870049
-:102960003D1901239B072B431B68C046D3510130FF
-:102970000004000C8842F2DBB0BC7047F0B5A0B098
-:1029800001239B07C11D213119430968C0460B91E2
-:10299000C11D533119431F91096801AFFA1D393226
-:1029A0001E9217AB59803A4901239B070A6A1343C9
-:1029B000CC1D113489690903090B2269E568C046F9
-:1029C0001D95FC1D3934648B640905342406240EDE
-:1029D0001C94561A1B961C9C2E4AC0460092012637
-:1029E0001D9D1A68914201D1321C0BE0914203D91E
-:1029F000521B1B9EB51800E0551A01222401AC425F
-:102A000000D30022012AE6D1910701430968C0469C
-:102A100039609307011D19430968C0467960C11DDB
-:102A2000013119430968C046B9601F9909681E9AA7
-:102A3000C0465183C11D1D3119430968C046386322
-:102A40007962C11D113119430968C046B961C11DC0
-:102A5000053119430968C046F960C11D1731194392
-:102A60000968C046F9830E3018430068C046F881F3
-:102A70003868400802D3381C02F05CFB381C00F0B8
-:102A80000BF8381CFFF758FF20B0F0BC08BC184703
-:102A9000A803008055555555F8B5071CF81D393069
-:102AA000418B394A914200DD4283428BC0460092FD
-:102AB00001203A1D06CABB6A02F00EFF334AC04627
-:102AC0000092334E306A334CE16D4118386BC31DB0
-:102AD00005330120726A02F0FBFEE06D183000251C
-:102AE000B16A814201D8E56500E0E0652F239B01D2
-:102AF000201CE16DE41822689200274BC0469950D3
-:102B00002648C16B4A0805D349084900C163012022
-:102B100001F0D6FF224A1F48C11D89310B78002BD6
-:102B200002D04978002900D11E4AC0460092206890
-:102B30008000194BC31805CEC11D1131012002F0D0
-:102B4000C7FE1448216801312160172900D3256090
-:102B5000396BC0460D65796A3A6BC04651623323C2
-:102B60009B01C0188168002903D1396BC046816080
-:102B700004E0396BC268C0461165396BC046C1605C
-:102B8000F8BC08BC18470000EA0500001800140251
-:102B90007C290080680E008044822040E80E00807E
-:102BA0000400000204000003F0B5114EFF250135BA
-:102BB000104FC0463560786901387861BC68002CD8
-:102BC00010D0206DC046B860201C00F021F8201CF9
-:102BD00000F004FA0848806A000C0007E9D1F0BC54
-:102BE00008BC18470548C1790131C171F7E70000F9
-:102BF000000000B0281B008000001040A082204090
-:102C0000012080030149C04608607047000000B001
-:102C100090B5071C3868C00809D31D48016A0139FE
-:102C2000016220300079002801D0FEF7E9FD012380
-:102C30009B07F81D1D3018430068164C616A8142DD
-:102C400021D1011C194309680904090C01291AD171
-:102C500000F022F86062606A216A884205D0012192
-:102C60008907014309680904F2D051218903626A86
-:102C7000236B9A4202D1606BA26B801A0438C86041
-:102C800090BC08BC18470020796AC0460860F7E786
-:102C90006C060080E81A008001239B07C11D0131EA
-:102CA000194309680904090C08180D30810702D07E
-:102CB00080088000043004498A6B12184B6B9A42DA
-:102CC00000D9086B70470000E81A008000B504487E
-:102CD000C068102801D300F005F808BC18470000B0
-:102CE000E81A008088B50C4F3879002811D10B49BB
-:102CF000102002F0F5FD00280BD001203871084AA1
-:102D0000C046009207484268074B0168002002F065
-:102D1000DFFD88BC08BC1847F81A0080F52CFFFFBF
-:102D2000100035027C2900804480204090B50120AD
-:102D300040021049C04608600F4F1021F81D3D3079
-:102D400002F04CFC1923DB01FC18E068002801D0DC
-:102D500000F014F80020C9231B01F9180871E0687D
-:102D6000102804D30120BB231B01F918487390BC21
-:102D700008BC1847000000B0680E0080F8B537485E
-:102D80001923DB01C118C968354D102900D910215C
-:102D900069623248C16C006E814207D9081A07097E
-:102DA0000024686AB84212D2071C10E081422AD27D
-:102DB0002C4A526B101A0709686AB84205D90C09E7
-:102DC0003919884203D2C41B01E00024071C3E19B4
-:102DD0003001254902F084FD00283DD02348002C15
-:102DE0001AD11E493A016F62096E8C181D4D6B6B2A
-:102DF000A34200D8E41A1E4B1A430092EA6A511803
-:102E00002A6B031C20E01B48016B01310163002089
-:102E10006862F8BC08BC1847104924013F01112220
-:102E200052053A436E6200920E4DEA6A096E5118DD
-:102E3000031C061C00202A6B02F04AFD0C4A2243A8
-:102E40000092BB19E96A2A6B002002F041FD034899
-:102E5000C046046600F010F80120DAE7680E008032
-:102E6000281B00807C2900805D2EFFFF44802040CD
-:102E700000003602A08220400448016E044A8030DF
-:102E8000D1600223C16B1943C1637047680E008093
-:102E900090EE2040F0B584B0012080021C49C0466D
-:102EA000086000271B4E33239B01F518686A002831
-:102EB0001DD9194C6846102102F090FB684600F0BD
-:102EC00033F8002804D015494869013048610AE008
-:102ED0001349607B01306073887901308871114833
-:102EE000006802F065F9686A0137B842E2D8BB238E
-:102EF0001B01F018817B002903D000218173FFF7AB
-:102F000005FBFFF7E3FE04B0F0BC08BC1847000067
-:102F1000000000B0680E0080B0822040088320408E
-:102F2000A08220405804008090B4174F1923DB0181
-:102F3000F9180022CB68002B23D0013BCB60332350
-:102F40009B01FF18BB691C6DC046BC610468C0468C
-:102F50005C604468C0469C608468C0461C61C06870
-:102F6000C04658611A650869421C0A61002803D0EE
-:102F7000386AC046036500E0FB613B62181C90BCE8
-:102F80007047101CFBE70000680E00800A4A3323DC
-:102F90009B01D118C8691923DB01D2181369002BD2
-:102FA00006D0013B1361CA69126DC046CA61704701
-:102FB00000211161FBE70000680E0080064A1169DC
-:102FC0004B1C13614032002901D0D16900E000217F
-:102FD0000165D06170470000E81A0080064AD16898
-:102FE0004B1CD3604032002901D0916900E00021E0
-:102FF0000165906170470000E81A008090B40021DC
-:103000000F4A9789926A4B001B189B8A002B12D09B
-:10301000BB4210DC1C1C58236343D318DC1F493C03
-:1030200001239B0723431B681B061B0E032B02D0A7
-:10303000002090BC704701310429E4D30120F8E757
-:103040004C2A0080F7B586B03D4A071CD1698F40F5
-:10305000031C146AE3405F40079E8E407740CF40D8
-:103060009469C0460594031CA34000251469C0461A
-:103070000494002C5DD91C1C324E26439469E64012
-:10308000331C0396536AC0460293D26AC04601922B
-:10309000BB00029AD258131C059CE340039CA34238
-:1030A0003ED18A40CA40141C63001B195B01019A7F
-:1030B000D21801239B07D61D013633431B681B061C
-:1030C0001B0E032B2CD101239B07D61D51363343F6
-:1030D0001B68079E1E40009601239B07D61D49369C
-:1030E00033431B6883421BD101239B07D61D4D36FA
-:1030F00033431B68009EB34212D101239B071A433E
-:1031000012681204120C089B322B04D1022A07D138
-:10311000200400140FE0089B332B01D1012AF7D0C3
-:10312000049A0137974200D30027049A0135AA4236
-:10313000AED80020C04309B0F0BC08BC184700005E
-:103140004C2A008000000080F0B5274D68690028F7
-:1031500006D02648006802F02BF8F0BC08BC1847DF
-:10316000234C0026A068234F002816D00FE0286AC1
-:10317000022802D3012038710FE0A660FDF7DEFEC1
-:103180000028EAD1286A022801D301203871E868B2
-:10319000002802D038790028E9D0686800281BD0C0
-:1031A0000120A060FEF7BCFB0028D6D1686800288B
-:1031B000F6D111E00028D0D1286A022802D30120DC
-:1031C0003871CAE7A660FDF7B9FE0028C5D1286AA4
-:1031D000022801D301203871E8680028BDD0387971
-:1031E0000028E7D0B9E700006C0600805C0400808E
-:1031F0004C2A00808C060080704700007047000059
-:103200007047000090B540201D49C046086001F09D
-:103210009DFC03231B07416819400C0F6101091B2A
-:103220008900184A8F1801213980816AC046796562
-:10323000416AC0467967B96CFA6C8918B964002193
-:10324000F964BA6B3B6DD218BA633965426A2032B1
-:103250005171796D7A6FD26DC0461160FCF7CAFF6B
-:103260002001094940181923DB01C018416B0139BD
-:103270004163786F01F0C6FB90BC08BC18470000A2
-:10328000000000B05C2B0080A01C0080F0B5402046
-:103290001249C046086001F059FC071C406803232E
-:1032A0001B071840060F7001801B80000C49441852
-:1032B000B86AC0466065786AC0466067806F051D61
-:1032C000E563B969281C02F089F9381C211C321CFD
-:1032D0002B1C00F020F8F0BC08BC1847000000B020
-:1032E0005C2B0080F0B54B6F9B6F1F1DCF63056893
-:1032F00000238469A40808D09C002E59C0463E5182
-:103300008469A40801339C42F6D83B1C00F003F802
-:10331000F0BC08BC1847FFB581B0041C1D1C0F1C75
-:103320004648016901310161F91D5131BD650091C6
-:10333000201CFDF75DFCF86D400936D2B86D067BA8
-:10334000437B1B021E431721490201730B0A43737F
-:103350000099201CFDF74CFCB86DC0460673330A7B
-:103360004373F86D400920D260680104090C03988A
-:1033700001F0CCFC6068324B18436060201C01F007
-:1033800035FD00257D60BD603D647D64201CFCF73B
-:1033900031FF38884023184338807D622948C04671
-:1033A000B862381C00F0A0FB44E0206801239B07B2
-:1033B000083818430068C046786460680204120C3C
-:1033C000786E0126C11D0D318A4202D23A64081C72
-:1033D0000EE041198989F023194009098900401834
-:1033E000F860F96161680904090C814216D23964F8
-:1033F00063681904090C401A033080088200A06138
-:10340000206809189B186360C31F053B381C00F037
-:10341000B6FA7E80201C00F0BFFB0BE0B968081AEA
-:1034200000257862BD62381C00F03CFC201C391C71
-:1034300000F064F805B0F0BC08BC18470C2B008005
-:1034400000000080010000C0F0B5041C0F1C386CA7
-:10345000F96B0D18216841180020A269002A0BD9C8
-:103460008200561801239B0733431B68C046AB50AC
-:10347000A26901308242F3D8786EF96B0918898904
-:10348000F0231940090989004018F860F9612068A3
-:1034900001239B07083818430168786CFCF795FFF7
-:1034A000786460680104090CF868814219D23964B3
-:1034B00063681904090C401A033080088200A06177
-:1034C000206809189B186360C31F053B381C00F077
-:1034D00056FA01207880201C00F05EFBF0BC08BC8E
-:1034E0001847B968081A78620020B862381C00F0E2
-:1034F000D9FB201C391C00F001F8EFE7F0B584B0CF
-:10350000041C0F1C8E4841690131416103200007F2
-:1035100061680840060F0A04120C20681118FB6845
-:10352000D21A7B689D1AC31F053B381C2A1C00F069
-:1035300026FA00207880201C00F02EFB60684019DD
-:103540000104090C6060301C01F0E0FB7D4E0B2390
-:103550001B02F0180069002819D000252D239B01BB
-:10356000F018C068002812D0AA0092192D239B01E0
-:10357000D218D268201C391C01F01CFE0135A800AD
-:1035800080192D239B01C018C0680028ECD1F86B6E
-:10359000011F8A1CFA63FA687D6C00F0BBF9C04316
-:1035A0000104090C281CFCF710FF0390F96B3A6E1C
-:1035B0008E182068121801927A6E8D1811180291D7
-:1035C000C81D0930E060B1880802090A0906090E21
-:1035D00008430004000C78616868010EFF221204A1
-:1035E0000240120A1143FF2212020240120211434A
-:1035F000000608433861A88909231B021840B861F6
-:10360000A8899843A881A8890299C046888100208A
-:103610007080B080708168602882B96E301CFCF7C1
-:10362000E8FE3886FA69301C291CFCF703FF78860F
-:103630003D8E788E0399FCF7C8FE00906068000408
-:10364000000C396E411A0904090C7A6E821A1304AF
-:103650001B0C1A021B0A1A431604360CBA68824263
-:1036600001D2002000E0101AB86008020912090611
-:10367000090E08430104090C0198C0464180281C2A
-:10368000FCF7A3FE051C0098311CFCF79EFE061CEF
-:1036900078690004000C0102000A08430104090CC7
-:1036A0000198C0468180281CFCF78FFE79690131A2
-:1036B000C0437961019AC04650813869010EFF22EA
-:1036C00012040240120A1143FF22120202401202A7
-:1036D000114300060143301CFCF777FE39697A6814
-:1036E00089183961B968002909D102998989BA69AB
-:1036F0001143029AC0469181B969FCF766FE2082A7
-:1037000000206082F86D410816D3800A0AD36068F1
-:1037100010380104090C0802090A08432168C04650
-:10372000088209E060680C380104090C0802090AE3
-:1037300008432168C046888104B0F0BC08BC184723
-:103740000C2B0080680E0080F1B584B06E4D2869A6
-:10375000012204998A409043286104984301181A71
-:103760008000161C69494418E06BC0460090A068B0
-:10377000002801D1002626E06548416901314161F8
-:103780000498FCF709FD071C03D128693043286120
-:10379000B5E0A0686568A84200D2051CA16CA942EA
-:1037A00016D2401A626A101A00266062A660A662EB
-:1037B00020884823184320800D1C09D1381CFCF7B1
-:1037C00019FD032060806660201C00F08DF996E0F2
-:1037D000E16838680918C31F053B201C02392A1C00
-:1037E00000F0CDF8381C00F0D7F9E0684619786889
-:1037F000304378600498311C01F088FA216E0098FB
-:1038000008180190701A0004000C616E711A0A0405
-:10381000120C1102120A11430904090C029101024F
-:10382000000A08430104090C0198C0464180208E1B
-:10383000FCF7CBFD061C608E0299FCF7C6FD0390D9
-:1038400060690104090C0802090A08430104090C13
-:103850000198C0468180301CFCF7B7FD61690131D9
-:10386000C04361610199C0464881606E0099461865
-:103870002069010EFF2212040240120A1143FF22A6
-:1038800012020240120211430006014371600398C4
-:10389000FCF79BFD216949192161A168491BA160C1
-:1038A00006D1B189A2691143B181A169FCF78DFDEF
-:1038B0003882616E386809180E31F960E268009943
-:1038C000043800F04CF802207882E06D410816D3ED
-:1038D000800A0AD3786810380104090C0802090A22
-:1038E00008433968C046C88109E078680C3801048B
-:1038F000090C0802090A08433968C046488105B026
-:10390000F0BC08BC18470000D02C00805C2B008065
-:103910000C2B0080F7B5031C0F1C00201C6826042C
-:10392000311C1D1DFCF751FD40C7029AD11C8908AE
-:1039300001394A1E029200290DD0210C10CD22041B
-:103940000A43111C161CFCF740FD40C702994A1E91
-:1039500002920029F1D103B0F0BC08BC18478008DE
-:10396000800089088900033293085A1E002B05D075
-:1039700008C908C0131C013A002BF9D17047FFB5E4
-:1039800086B0171C00260698806CC01B0699C0469E
-:1039900088640120C0050699896BC046019106998B
-:1039A0004C6B67E02168C04602916168C046039194
-:1039B000A168C046049102A94988B94208D202AD63
-:1039C0006D8802A949887F1A002102AB598019E04D
-:1039D00002A94988C91B02AB59803D1C002701215F
-:1039E0004906079B9A07920F0DD0EB06DB0E08D015
-:1039F0001E2B08D31E2B02D1032A04D101E0022A78
-:103A000001D301260021294301430A1C0091002013
-:103A10000399049A079B01F05BFF079949190791E5
-:103A2000002E0AD01D4AC04600921D48016D426D0D
-:103A30000020079B01F04CFF002602A840880028C8
-:103A40000CD00398401903900298C0462060039858
-:103A5000C04660600498C046A06003E00198013849
-:103A6000019010340698C046446301980699C046F8
-:103A700088630020002F02D00199002992D1094AC1
-:103A8000C04600920648016D426D0020099B01F07E
-:103A90001FFF0AB0F0BC08BC18470000010000027C
-:103AA0007C2900800400530290B50C1C071C386868
-:103AB00001239B07083818430168388AFCF785FC06
-:103AC000C043F968C0460880788A3968081A3860A7
-:103AD000381C01F08BF9381CFCF78CFB201CFFF71D
-:103AE00033FE90BC08BC184780B501888A0921D3F1
-:103AF000CA091FD28A081DD3002101804180476F67
-:103B0000406DFA1D19325171FA6DC04610603A6E5F
-:103B1000C04610600C48C0468163C16B490849002B
-:103B2000C163012000F0CCFF381C00F06BFF80BCAB
-:103B300008BC184780231943018001884909F6D23F
-:103B400000F0B0F8F3E70000E80E0080F0B5071CC5
-:103B5000101C0D1C00245E1E002B19D00168C046ED
-:103B6000396041880C194168C04679608168C04657
-:103B7000B960C168C046F96010301037E96A814207
-:103B800002D8281C00F0ECFF311C013E0029E5D1D1
-:103B9000201CF0BC08BC18470021C16105490A6817
-:103BA000002A01D1086002E04A68C046D06148603E
-:103BB00070470000D02C008003490868002802D01C
-:103BC000C269C0460A607047D02C0080002181671E
-:103BD00005498A68002A01D1886002E0CA68C046A7
-:103BE0009067C86070470000D02C00800349886847
-:103BF000002802D0826FC0468A607047D02C0080B7
-:103C000000B580201349C0460860FFF7D5FF0028A3
-:103C10001BD003231B07416819400A0F5101891A61
-:103C200089000D4BC9184B88002B04D1111CFFF7DC
-:103C30003BFF08BC1847012B02D1FFF705FCF8E752
-:103C4000022BF6D1FFF74EFBF3E70448016D01317B
-:103C50000165EEE7000000B05C2B0080A0822040F0
-:103C600000B520200D49C0460860FFF7BFFF0028BF
-:103C70000ED0018820231943018001881023994325
-:103C800001800188090A01D3FFF72EFF08BC1847FD
-:103C90000348016D01310165F8E70000000000B044
-:103CA000A082204098B5071C2248C04600902248B8
-:103CB000C31D4133416D826D806C0003000B9C6815
-:103CC00001239B0723431B68984200D10CE09842D4
-:103CD00003D9101A591A411800E0191A01201029A5
-:103CE00000D8002000281FD0786AF96AC046086012
-:103CF000B86AF96AC0464860104AC0460092FB6A3A
-:103D00000F48426D0320396A01F0E2FD3888102324
-:103D1000184338803888402398433880381CFFF790
-:103D200055FF98BC08BC1847388840231843388092
-:103D3000F7E7000055555555A8030080080011020B
-:103D40007C290080B0B540202C49C046086000F0B6
-:103D5000FDFE071C406803231B071840050F680180
-:103D6000401B8000264944182088022318432080E5
-:103D70002088410834D3400840002080A06CE16CCA
-:103D80004018A0640020E064A16B226D8918A16333
-:103D90002065B86AC046606503231B077868184031
-:103DA000786061683631942904D8382318437860E4
-:103DB000382003E09423184378609420B861396870
-:103DC00078680204120C201CCB1F053BFFF7D7FDBF
-:103DD00002206080381CFFF7DFFEB0BC08BC18472B
-:103DE000381CFCF707FA2801064940181923DB01A3
-:103DF000C018416B01394163EFE70000000000B0DB
-:103E00005C2B0080A01C008090B500270F4C0DE0BB
-:103E1000426B013A4263002A05DC026BC0464263F2
-:103E2000C06A01F0C6F901370B2F07D2380100191B
-:103E300033239B01C018816A0029E9D10120400683
-:103E40000349C046086090BC08BC1847680E008053
-:103E5000000000B01048C1680131C1600F49C86856
-:103E6000012817D1C81D79300289002A12D0013AE1
-:103E700002810289002A0DD14289002A08D1C96F26
-:103E800002230A681A430A6004210181012100E02B
-:103E9000002141817047000008832040680E0080A7
-:103EA000B0B5071C0123F81D693003731E48C21DFD
-:103EB0007932548A611C5182D58A0021AC4204DBDC
-:103EC000C41D893463705182D18301239B073A6DED
-:103ED0001A431268C046BA61FB699A4206D1F86C6F
-:103EE0001249C0460860B0BC08BC184779614169F6
-:103EF000FA6C9143416101200005C16038690228D4
-:103F0000F1D0B869F969411A01D5786D4118381CAA
-:103F100000F00EF8F9690918F961786D8142E2D371
-:103F2000081AF861DFE70000680E0080000000B0AA
-:103F3000F8B5041C0F1CFF2321339F4201D9FF2732
-:103F40002137E16E381C01F0CBFC2D4D002813D138
-:103F5000E01D4930017A012319430172294AC04604
-:103F600000922948016D426D00202B1C01F0B0FC2D
-:103F70000020F8BC08BC18472069013020612349A3
-:103F8000C81DB930026B92005118C0310F61016B2E
-:103F900001318907890F0163206BC219616D8A4263
-:103FA00003D8232212053A4305E0091A7E1A07D1E5
-:103FB000232212050A430092616E0918A26E10E0D6
-:103FC000112252050A430092616E09180020A26E68
-:103FD0002B1C01F07DFC2322120532430092616EFE
-:103FE000A26E00202B1C01F073FC206BC01900098D
-:103FF0000001616D814200D8401A2063381CB8E787
-:104000004480204004001B027C290080680E008050
-:1040100080B50120C0030D49C04608600C49C81D89
-:104020004930027A0027002A03D00772081CFFF7E4
-:1040300037FF0849C81D4930027A002A03D00772A9
-:10404000081CFFF72DFF80BC08BC1847000000B01B
-:10405000642D0080E42C008090B5071C10201849C6
-:10406000C0460860F8680130F8601648C41DB934CD
-:10407000616B89000918C03109697A689200D21908
-:104080005164616B89000818C0300169786880004C
-:10409000C019C06B01F0A2FA01237868584078601B
-:1040A000606B01308007800F6063F81D1930407924
-:1040B000002802D1381C00F007F890BC08BC184753
-:1040C000000000B0680E008090B5071C3948C06839
-:1040D000002805D0B86AC068800901D3022000E03A
-:1040E000786FFCF759F8041C06D10120F91D19312D
-:1040F000087190BC08BC1847F86C2F49C04608608E
-:10410000BA6A381C211C00F059F86762002803D1F4
-:10411000201C00F00BFDECE7F96D0968091809098E
-:1041200009017A6D8A4200D8891AA162B9688900AA
-:10413000C9194A6C002A07D04A6C121A4A648008CE
-:104140008000B96A0818B8623868B96A8000C01976
-:10415000426B91420ED300214164B86A39688900EC
-:10416000C919496B401AB862B9688900C919C96B85
-:104170004018B862B8688100C919496C0029B8D1E3
-:10418000B96AFA6B9142B4D03A6C9142B1D0012332
-:104190005840B8608000C019C06BC046B862F8686B
-:1041A000002801D00138F86038690028A1D0013812
-:1041B00038619EE768190080000000B0F7B590B044
-:1041C000041C0D1C00200590029000220192F94869
-:1041D000C06AC046A861A06881000919496BC04641
-:1041E0002060E162129AD068C046A860129A5178A5
-:1041F000C0460C91F048C0460390D71D0937E06ACD
-:10420000C11B0909E31D19330C9AC0460F93EB4BF0
-:10421000C0460E93914201D3B84221D8E1680229E9
-:104220001ED201200F99C04648710020039901F069
-:1042300057FB002803D10E9BD86B0130D8630120B7
-:10424000800600276860AF61DD4AC0460092DD4805
-:10425000016D426DDC4B002001F03AFB381C5CE341
-:10426000B84203D8201C00F07BFC071CD748C0686C
-:10427000002864D038784007400F032860D10598A3
-:1042800001300006000E05903878F023184058D110
-:10429000E06AC01B00090C99884202D2E06802283B
-:1042A00005D3CB49886800F083FF061C06D1039B29
-:1042B000281C391C221C00F08BFC16E12E62F868C9
-:1042C00000280DD0B889002803D0C149C96800F082
-:1042D00070FFF889002803D0BD49C96800F069FF64
-:1042E0007A68C0467261B968C046B161301CB8498D
-:1042F000096800F05EFF002817D1301CB4494968F6
-:1043000000F057FF1037E06AB84203D8201C00F0D5
-:1043100027FC071C6868AF4B184368600020A86141
-:10432000AC23A8689843A860B0E0A869A82801D287
-:10433000A820A8611037E06AB8426CD89CE0A5E0DC
-:10434000A4E0102868D103231B0768681840010FF8
-:104350004801401A8000A04A821801927888420BD6
-:1043600031D3820B2FD39D48C04603900220019A7F
-:10437000C046108078880005000D019AC046506044
-:10438000B868019AC04690607868019AC046106289
-:104390000020019AC0469064019AC046906388024A
-:1043A0008F494018019AC0465063019A50683630D0
-:1043B000942801D8382000E09420A8611037E06AE2
-:1043C000B84228D858E07A88920B03D38548C04673
-:1043D000039023E0012212030240834B1DD003937C
-:1043E0000005000D019AC0465060B868019AC046A9
-:1043F00090607868019AC04610620020019AC04619
-:104400009064019AC0469063880275494018019AE9
-:10441000C046506302E033E02AE0039301200F9985
-:10442000C0464871129A50780599431A0B93103779
-:10443000E06AB84203D8201C00F092FB071C019AE6
-:10444000506B916B090140180B9B211C3A1CFFF724
-:104450007DFB019AC046D064019A0B9BC046136550
-:1044600001235B066868184368600020A8610DE0BE
-:104470001037E06AB84203D8201C00F071FB071C1B
-:1044800038784007400F032800D1F8E6A86903995F
-:1044900001F026FA00282AD1381C211C00F079FBF3
-:1044A000A868800904D3301C4949496800F081FE9E
-:1044B0004149002001F014FA002804D10E9BD86B6A
-:1044C0000130D86311E001200F99C0464871800681
-:1044D00000276860AF613A4AC04600923948016DD2
-:1044E000426D394B002001F0F3F9002015E20598E8
-:1044F0000C99081A0004000C0C900B900C980028E2
-:1045000003D001200F99C04648712868C046049026
-:1045100000260020089000220A920C9801380D9085
-:10452000A3E078888A1B1204120C904205DD0792E2
-:10453000801A0004000C089000E0079008980028FA
-:1045400007D10D980A9A904207DD079830188842E3
-:1045500003D80120400506901CE01120400506907C
-:10456000A8688C23184002D12048C0460690B107A5
-:10457000890F0FD00798C006C00E08D01E2809DB8F
-:104580001E2802D1032905D101E0022902D301200E
-:104590000290DEE70A9A002A04D10123DB0506987F
-:1045A00018430690079806990843021C0090049847
-:1045B00083191DE0E80E00800149FFFF280F0080ED
-:1045C000040012027C290080448020406819008089
-:1045D00060040080000000805C2B00805532FFFFEB
-:1045E000AC5E21400D3DFFFFCD31FFFF00003202E8
-:1045F00000203A1D06CA01F06BF907983618029898
-:10460000002816D0A8688C23184004D109235B0425
-:104610000698184306900698C24A024300920498EE
-:104620008319C148016D426D002001F051F900204D
-:104630000290089800280BD10B9B013B0B9310377D
-:10464000E06AB8420CD8201C00F08AFA071C07E088
-:104650007868079A801878607888079A801A788036
-:104660000A9A501C0204120C0A920C980A9A82426E
-:1046700003DAA969B14200D953E7A869B0426BD106
-:10468000A868010969D2089A002A56D00C990A9A9A
-:104690008A423EDBB107890F0CD0089AD206D20EAF
-:1046A0000BD01E2A06DB1E2A02D1032905D001E009
-:1046B000022902D20299002921D0089AC04600920C
-:1046C0000498831900203A1D06CA01F001F90898E0
-:1046D0003618A8688C23184002D00120400600E05C
-:1046E0009248012202430092049883198E48016D7A
-:1046F000426D002001F0ECF80020029015E08C23C0
-:10470000184002D00120400600E08848089A024381
-:1047100000E0089AC04600920498831900203A1DD0
-:1047200006CA01F0D5F8089836181037E06AB84282
-:1047300003D8201C00F014FA071C6868800E6BD2A6
-:104740000A98C04609900C9988425CDA0D9809993C
-:10475000884203D07A881EE05FE05EE0788801221C
-:1047600052060243A9688C23194002D109235B0435
-:104770001A43B107890F0ED0C306DB0E08D01E2BDB
-:1047800009DB1E2B02D1032905D101E0022902D346
-:1047900001210291021C0998002802D10123DB05A6
-:1047A0001A4300920498831900203A1D06CA01F0AA
-:1047B0008FF87888861910370298002814D0A868D6
-:1047C0008C23184002D00120400600E05748012207
-:1047D00002430092049883195348016D426D0020F2
-:1047E00001F076F800200290E06AB84203D8201C5D
-:1047F00000F0B6F9071C099801300004000C09907C
-:104800000C998842A2DB686830430104090C686097
-:10481000E86A00F07BFA28E027E0A868000914D3D2
-:104820006868800E15D2019A002A12D0019A506B46
-:104830000B9B211C3A1CFFF789F9019AC046906432
-:10484000019A0B9BC046936303E0E86A311C00F0B9
-:104850005DFA686830436860A869B04205D9000411
-:10486000000C801B00F0EEF9AE61A8688C231840A4
-:104870000BD02F4AC04600920498C31F053B2A481C
-:10488000016D426D002001F023F801239B07206D8C
-:1048900018430068C046A061E169814212D02269D4
-:1048A000022A0FD2411A01D5606D4118201CFFF772
-:1048B0003FFBE1694018E061616D884224D3401AF2
-:1048C000E06121E081421FD1206902281CD2012031
-:1048D000606118484169E26C0A4342618169E36C96
-:1048E0009943816101210905CA608069C046086158
-:1048F0008B02206D18430068C046A061E1698142C7
-:1049000002D0201CFFF7CCFA281C00F00FF90C98FD
-:104910000599401800011030686113B0F0BC08BC64
-:1049200018470000010000027C29008000001202EC
-:1049300004005202680E0080F0B540202D49C046A8
-:10494000086000F003F9071C8169446AA06F00F059
-:1049500045FE0020E11D193148717968C90E09D35F
-:10496000F86A000124494018244BC0180168013935
-:10497000016036E0E16D0968226EC0461160204E8C
-:10498000F51D79350123E96B1943E963B96AE26DD5
-:10499000C0461160B96A226EC04611606169002983
-:1049A00004D1A96B0131A963082907D3A8630120A9
-:1049B00000F086F8E86B40084000E8637868810EF4
-:1049C0000FD20B231B02F118C968002906D000087A
-:1049D00004D2201C391C00F043F802E0381C00F01F
-:1049E00005FA381CFBF706FC201C00F00BF8F0BCA5
-:1049F00008BC1847000000B0A01C0080B40C0000E8
-:104A0000680E008080B5071CF81D19300179002957
-:104A100004D000210171381CFFF756FBF86802280A
-:104A20000DD0B8688000C219506C002811D0B86A47
-:104A3000417809011031526B101A884205D3381C95
-:104A4000FFF742FB80BC08BC1847381CFFF728FA68
-:104A5000F8E778688000C019C06BC046B862F1E71B
-:104A6000B0B587B00F1C806FC04600900024134D76
-:104A70000B231B02E8188069002817D06946A200A2
-:104A800052190B231B02D2189269381C00F092FBBA
-:104A9000002809D10134A00040190B231B02C018C3
-:104AA00080690028EAD101E0012802D0381C00F01A
-:104AB0009DF907B0B0BC08BC18470000680E008024
-:104AC000B8B5C207D20F164C164901D0082208E02B
-:104AD000820805D30C22A4180B68DF1D153703E0EC
-:104AE0001C220B68DF1D09370F4B1D78002D13D0DA
-:104AF0005B78002B10D001235B061A43002801D1FC
-:104B00005B081A4300924A680120391C231C00F0FC
-:104B1000DFFEB8BC08BC184703231B061A43F1E7A5
-:104B200090EE20407C290080F80E00800021C161B9
-:104B300005498A68002A01D1886002E0CA68C04637
-:104B4000D061C86070470000280F00800349886862
-:104B5000002802D0C269C0468A607047280F0080D2
-:104B6000011C0123886858408860CA68013ACA60FD
-:104B70000A69013A80000A614218D06B536BC04643
-:104B8000CB620B689B005918496C536CC91851646F
-:104B900070478A6892005218D36B834217D1D01D98
-:104BA0003D300A6892005218526C03689A1A0260EB
-:104BB0000123886858408860CA680132CA600A695F
-:104BC0000132800040180A61406BC046C8627047DD
-:104BD000B8B5041C1D1C171C081C391CFFF7D9FF95
-:104BE0000020291C00F07CFE0120F91D19314871BC
-:104BF000800660600020A061064AC0460092064818
-:104C0000016D426D054B002000F062FEB8BC08BC8F
-:104C100018470000040012027C29008044802040D4
-:104C200006490A681018086001235B02984203D9FC
-:104C300003490A7901320A7170470000E42D0080AF
-:104C4000A08220408008800006490A681018086089
-:104C500001235B02984203D903490A7901320A71A0
-:104C600070470000E42D0080A082204003308008BF
-:104C7000800006490A681018086001235B02984208
-:104C800003D903490A7901320A717047E42D008083
-:104C9000A0822040024841790131417170470000F3
-:104CA000A082204090B48200174B9A588B0702D004
-:104CB00089080B1D01E08908CB1C1169D768124CCB
-:104CC000800020584068B94203D1814219D9116847
-:104CD00017E00024B94209D9814212D91168781A23
-:104CE00000D50330801098420BD807E0814205D8E8
-:104CF000781A00D503308010984202D8201C90BC4E
-:104D00007047C81D0530FAE77004008080B5800048
-:104D10000F4A1758880702D08808043001E0880835
-:104D2000033039697A68914209D93968C0463961D6
-:104D3000F9687A68914202D93968C046F960810001
-:104D4000386900F0D1FD386180BC08BC184700000C
-:104D50007004008090B50321090701400C0F010485
-:104D6000090C012292070240A3001C4FFF5889073B
-:104D7000890F0004000C8008002900D00130002AAF
-:104D800001D0023000E00330F9687A68914202D91C
-:104D90003968C046F9608100F86800F0A5FDF86048
-:104DA0000F480069002805D00120A04002D0201C37
-:104DB000FEF7CAFC0B49C81D193003790022002BED
-:104DC00005D10949C81D19300379002B03D00271A0
-:104DD000081CFFF779F990BC08BC184770040080E4
-:104DE000D02C0080642D0080E42C0080B0B52B49CD
-:104DF0000979002903D14168294B19434160816831
-:104E0000490802D30921090401E00D2109040CC855
-:104E1000083819438768BB0A03D343685B0800D38B
-:104E20000131406803231B071840070FF8001D4C91
-:104E300000192368C01850300079012810D160682B
-:104E400001280DD0101C00F071F838010019192349
-:104E5000DB01C018416B01394163B0BC08BC184785
-:104E6000380100191923DB01C018036B5D1C0563B1
-:104E7000BD022D19DB00EB1880331963DA62816BF8
-:104E8000013181630121B940226811432160016B26
-:104E90008029E2D300210163DFE70000280F0080B2
-:104EA00000000080A01C0080F0B51F4E7068002834
-:104EB00036D10024B168481CC9008919B060326835
-:104EC000891860310D7B082800D3B460280180194F
-:104ED0001923DB01C018876B002F21D0C16A4B1C3E
-:104EE000AA029219C90051188031C362CA6A096BBB
-:104EF000013F8763802B00D3C462002F06D10127B6
-:104F0000AF403B1CDB4337683B403360436B013BA6
-:104F10004363101C371C00F009F878680028C9D0DA
-:104F2000F0BC08BC18470000A01C0080F0B5CD0FF5
-:104F3000ED07012400272E4B2E4A002D1DD0D86AE4
-:104F40000130D862101C5269002A12D00269531C29
-:104F50009200121803619161416901314161026956
-:104F60000F2A00D307610F2900D34460F0BC08BCAE
-:104F70001847081CFFF7EEFEF8E715696E1CAD0038
-:104F8000AD181661A96155690135556116690F2E75
-:104F900000D317610F2D00D354608C02A40A164F62
-:104FA0003A6FFD68F91D7931012D0CD1DB6D5B087D
-:104FB00009D30B89002B06D1FD6F033B2E683340CC
-:104FC0002B6014230B8110608007800A20430304A8
-:104FD00000D001385060096A0832914200D8074A6F
-:104FE000000D02D35120800382613A67BEE70000C2
-:104FF000A42A0080A01C0080680E008024A7204006
-:10500000B0B5002804D10120C0051649C04608608B
-:10501000154C00256769002F16D0E068411C800000
-:105020000019E1608069013FFFF794FEE0680F28F6
-:1050300000D3E560E068800000198069000801D3B2
-:10504000002FEAD1676103E00848016D0131016575
-:1050500065602068002801D0FFF726FFB0BC08BCBF
-:1050600018470000000000B0A01C0080A082204073
-:1050700000207047B0B41023826813400021002B39
-:1050800015D00C4B1A401201812414430268156894
-:10509000131D80CB1B68043A026020C280C208C284
-:1050A0001460426801239B0704321A434260081CC3
-:1050B000B0BC704700F0FF0FF0B48268530934D3DE
-:1050C0001B4B1A4012018126164303681D681F1DE1
-:1050D00010CF3F68043B036020C310C380C31E6031
-:1050E00043681F1D01239B073B434360CB6B181F85
-:1050F000C86380CB80C01C681F1D031D0460381C62
-:105100003F68C0461F601F1D43681C04240C812398
-:1051100023433B604068000C000410437860086E35
-:1051200004300866486E043048660020F0BC7047C2
-:1051300000F0FF0F80B4816A01239B07CA1D05326E
-:105140001A431268CF1D01373B431B68C046CB6032
-:1051500001239B070F1D3B431B68C0468B60012347
-:105160009B070B431B680CC10262016BC0460A62BD
-:105170000423816919438161026BC0469161816A90
-:1051800004318162026BC0469162C11D39314A8B84
-:10519000043A4A83498B026B40325183C1890439F6
-:1051A000C181C168006BC046C160002080BC7047EF
-:1051B00000470847104718472047284730473847D7
-:1051C00030402DE90CC09DE50C48A0E12448B0E139
-:1051D0001E00000A01C04CE21840A0E364519FE5A4
-:1051E000945020E0005090E5144090E5003085E5B3
-:1051F00004C085E5081085E50C2085E5101090E5D4
-:10520000105085E2010055E10C509055040055E125
-:105210000500000A041090E5005080E5005081E58B
-:105220000000A0E33040BDE81EFF2FE1003093E511
-:10523000082090E5013183E3023683E3030055E162
-:10524000143080E5F2FFFF1A0100A0E3F4FFFFEA4B
-:1052500001061CE3F1FFFF0AEC109FE502C6CCE358
-:10526000542091E5E4309FE5501091E5D9FFFFEA25
-:10527000F0472DE920C09DE50C68A0E12668B0E16B
-:105280002500000A1840A0E3B8509FE5940000E014
-:10529000050080E0084090E5048090E50070A0E300
-:1052A0001FC0A0E302C48CE3005090E5109090E58D
-:1052B00014A090E5003085E504C085E5081085E57B
-:1052C0000C2085E5105085E2090055E10C50905501
-:1052D0000A0055E11500000A037017E2201081E270
-:1052E000203083E20A00000A006096E2017087E243
-:1052F0000900000A206046E2200056E3ECFFFFCAE6
-:105300000070A0E301C046E202C48CE30060A0E3A9
-:10531000E7FFFFEA005088E5F2FFFFEA0010A0E394
-:10532000005080E50100A0E1F047BDE81EFF2FE13D
-:1053300000A094E50A0055E114A080E5E5FFFF1AFE
-:105340000110A0E3F5FFFFEAA80300807C2900809C
-:105350000080204068829FE50B92A0E364A29FE555
-:1053600058B09AE50EF0A0E154B09AE51EFF2FE187
-:105370003F402DE900004FE11F0000E2120050E322
-:105380005400000A00000FE18000C0E300F021E1BA
-:105390000450A0E3004099E5090000EA020014E38C
-:1053A0005300001B800014E35900001B200014E38D
-:1053B0005900001B020714E35900001B010614E307
-:1053C0005900001B080014E34500001B020514E30C
-:1053D0004A00001B020814E34B00001BE50E14E317
-:1053E0000700000A042098E50C1098E5043052E20A
-:1053F0003C30A0B3043088E5020091E70FE0A0E163
-:1054000010FF2FE1015055E20300000A004099E52A
-:105410000C009AE5000014E11BFF2F1108009AE52B
-:10542000000014E10B00000A010C14E398019F1521
-:105430000FE0A01110FF2F11020414E38C019F153F
-:105440000FE0A01110FF2F11010914E380019F1537
-:105450000FE0A01110FF2F1104009AE5000014E1E5
-:105460001600000A54E08FE2040014E340009A158D
-:1054700010FF2F11020A14E344009A1510FF2F1198
-:10548000020914E348009A1510FF2F11010214E3DA
-:105490004C009A1510FF2F11010414E350009A15C7
-:1054A00010FF2F11010A14E32100001B020014E376
-:1054B0000E00001B10009AE5000014E11C00001B08
-:1054C000004099E50450A0E3004094E21BFF2F1137
-:1054D0003F40BDE804F05EE2C00080E300F061E11F
-:1054E000FAFFFFEA18009AE51C109AE511FF2FE178
-:1054F00054B09AE51C109AE514009AE511FF2FE1CB
-:1055000020109AE50000A0E311FF2FE124109AE596
-:1055100011FF2FE128109AE511FF2FE12C109AE5D9
-:1055200011FF2FE130109AE511FF2FE134109AE5B9
-:1055300011FF2FE1FEFFFFEA38E09AE53C109AE503
-:1055400018009AE511FF2FE138E09AE53C109AE542
-:1055500014009AE511FF2FE164209FE5003092E5E9
-:10556000003053E00A0000BA003082E50C0092E5FA
-:10557000083092E5001091E20300000A031080E772
-:10558000043053E23C30A0B3083082E50100A0E3D0
-:105590001EFF2FE13C109FE5000091E5010080E235
-:1055A000000081E50000A0E3F8FFFFEA10009FE59E
-:1055B000081090E5041051E23C10A0B3081080E5FB
-:1055C0001EFF2FE1E42D0080CC040080712BFFFF33
-:1055D000D13DFFFFC92BFFFFA0822040C91C8908D5
-:1055E00089000123854A5B07184313685B18136021
-:1055F000001F81A35B1A18470420A0E50420A0E542
-:105600000420A0E50420A0E50420A0E50420A0E5F6
-:105610000420A0E50420A0E50420A0E50420A0E5E6
-:105620000420A0E50420A0E50420A0E50420A0E5D6
-:105630000420A0E50420A0E50420A0E50420A0E5C6
-:105640000420A0E50420A0E50420A0E50420A0E5B6
-:105650000420A0E50420A0E50420A0E50420A0E5A6
-:105660000420A0E50420A0E50420A0E50420A0E596
-:105670000420A0E50420A0E50420A0E50420A0E586
-:105680000420A0E50420A0E50420A0E50420A0E576
-:105690000420A0E50420A0E50420A0E50420A0E566
-:1056A0000420A0E50420A0E50420A0E50420A0E556
-:1056B0000420A0E50420A0E50420A0E50420A0E546
-:1056C0000420A0E50420A0E50420A0E50420A0E536
-:1056D0000420A0E50420A0E50420A0E50420A0E526
-:1056E0000420A0E50420A0E50420A0E50420A0E516
-:1056F0000420A0E50420A0E50420A0E50420A0E506
-:105700000420A0E50420A0E50420A0E50420A0E5F5
-:105710000420A0E50420A0E50420A0E50420A0E5E5
-:105720000420A0E50420A0E50420A0E50420A0E5D5
-:105730000420A0E50420A0E50420A0E50420A0E5C5
-:105740000420A0E50420A0E50420A0E50420A0E5B5
-:105750000420A0E50420A0E50420A0E50420A0E5A5
-:105760000420A0E50420A0E50420A0E50420A0E595
-:105770000420A0E50420A0E50420A0E50420A0E585
-:105780000420A0E50420A0E50420A0E50420A0E575
-:105790000420A0E50420A0E50420A0E50420A0E565
-:1057A0000420A0E50420A0E50420A0E50420A0E555
-:1057B0000420A0E50420A0E50420A0E50420A0E545
-:1057C0000420A0E50420A0E50420A0E50420A0E535
-:1057D0000420A0E50420A0E50420A0E50420A0E525
-:1057E0000420A0E50420A0E50420A0E50420A0E515
-:1057F0000420A0E50420A0E51EFF2FE1E42D008099
-:1058000098009FE598109FE5012040E094309FE5C7
-:10581000000091E5030050E10300001A041081E24A
-:10582000042052E20000000AF8FFFFEA78009FE53A
-:10583000002080E574009FE574109FE5012040E0A2
-:1058400060309FE5000091E5030050E10300001A7D
-:10585000041081E2042052E20000000AF8FFFFEA8F
-:1058600050009FE5002080E54C009FE54C109FE52F
-:10587000012040E02C309FE5000091E5030050E15D
-:105880000300001A041081E2042052E20000000A22
-:10589000F8FFFFEA28009FE5002080E51EFF2FE1CA
-:1058A0007C34008080300080ADDEADDEC00400803E
-:1058B000FC37008080340080C4040080FC3F0080FE
-:1058C00040380080C80400807847000071EAFFEA91
-:1058D0007847000039FEFFEA7847000063FEFFEAE0
-:1058E000784700001BFFFFEA784700006BEAFFEAF9
-:1058F00000000000FFFF00000000008028040000FE
-:10590000F83D00000001008000FF000000000000E2
-:10591000B90BFFFF00000000D50BFFFF03FF06548B
-:10592000030000007504FFFF00000000A105FFFF59
-:1059300004FF075403000000B504FFFF000000004F
-:10594000F105FFFF05FF0554030000003904FFFFC8
-:10595000000000005505FFFF01FF040003000000E8
-:105960004118FFFF00000000610EFFFF02FF020868
-:1059700000000000A102FFFF00000000F102FFFF95
-:10598000FFFF0144030000000000000000000000D1
-:105990009D0DFFFF0600FF00000000003D50FFFFCF
-:1059A0008150FFFF00000000FFFFFF00000000002B
-:1059B000000000000000000000000000FFFFFF00EA
-:1059C00000000000000000000000000000000000D7
-:1059D000FFFFFF00000000000000000000000000CA
-:1059E00000000000000000000000000048050080EA
-:1059F000117521401B7521403175214049752140A9
-:105A000055752140637521407D752140A975214060
-:105A10006D762140C5762140D3762140DD76214048
-:105A2000E776214099772140A7772140B57721403B
-:105A3000617821405F7C2140E97C2140897D2140C3
-:105A4000BD7E2140C97E2140297F21408D7F21409C
-:105A5000B97F2140DD7F21401D80214045802140CC
-:105A60008D8021409D802140C5802140D5802140EE
-:105A70001D8121405B812140B18121401182214063
-:105A80001B8221401F8221408D822140D9822140EA
-:105A9000318321406D832140D183214009842140FD
-:105AA0001984214051842140618421407584214022
-:105AB0009D842140A7842140B18421401585214047
-:105AC0004585214051852140C5852140CF85214014
-:105AD000D9852140E3852140ED852140F78521408E
-:105AE000018621400B8621401586214001892140F5
-:105AF0001F86214029862140338621403D86214052
-:105B0000658621406F862140D1862140DB86214079
-:105B1000E5862140EF862140F98621409D74214091
-:105B20000387214069872140B5872140F9872140BB
-:105B3000098821409D742140558821405988214081
-:105B40005D882140B5882140DD882140E9882140D9
-:105B5000ED882140F1882140F5882140F9882140D5
-:105B6000FD8821402D852140898521409D7421405B
-:105B70009D7421400D8921409D742140E174214094
-:105B80009D7421409D7421409D7421409D7421404D
-:105B90009D7421409D7421406B782140F57B21400C
-:105BA000317C2140000000000000000000000000E7
-:105BB000000000005C0118405801184024A3204058
-:105BC00024A7204000000000000000006C011840E5
-:105BD000680118402483204024A3204000000000D6
-:105BE000000000007C01184078011840000000000F
-:105BF0000000000000000000000000008C011840C0
-:105C00008801184024A9204024AB20400000000057
-:105C10000000000000000000080012001800120040
-:105C20000C0012001C00120024A82040A4A8204050
-:105C3000A4A8204024A9204000000000D1A82140B1
-:105C40002DAA21400000000089702140C9A12140F7
-:105C50000000000000000000010000000000000043
-:105C600057892140D1A82140C52FFFFF0521FFFF03
-:105C7000EF20FFFF59A72140342E0080482E0080DE
-:105C80005C2E008030333A31313A31310030372FD9
-:105C900032332F3031003030303031353639004337
-:105CA0006F707972696768742028632920323030F8
-:105CB000312033436F6D20436F72706F726174696E
-:105CC0006F6E0A00081000030000000000000000D2
-:105CD000000000008C53FFFF27F07DFD0001000253
-:105CE000DA0E820001406404642D0080E42C008000
-:105CF000693EFFFFC94FFFFFD524FFFFC93BFFFFF0
-:105D0000293CFFFF191AFFFF6511FFFFCC53FFFF6E
-:105D10002140FFFF8970214049722140D93FFFFF98
-:105D2000219A21408524FFFF6453FFFF8C53FFFF1E
-:105D300000000000FFFF0000803000800000000035
-:105D4000FFFF000000002040B05000007B0E00006C
-:105D5000006E21400000000000000000ED8921409D
-:105D60008B892140A58C2140058D2140CD8D21407E
-:105D70008B8B2140A98E2140158F2140698B2140BA
-:105D80000000000000000000000000000000000013
-:105D90000000000000000000000000000000000003
-:105DA0000000000059BD2140C1BD21402DBE214051
-:105DB00000200A4A0B231B02D1182D239B01D31864
-:105DC0008861D860D8638032C86008614861D06259
-:105DD0000348C0464860886070470000680E008035
-:105DE000FE030000F0B584B00C1C051C00230093DA
-:105DF000FFF7DEFF68490B231B02CF1878682840A5
-:105E00000022F8603A61BA6822407A610C1C4109AC
-:105E100003D2510901D2800A02D3604800F0C2F8CF
-:105E20000120F968490903D27969490900D20020A3
-:105E30000006000E03F0D4FAF868002870D00023A2
-:105E400002930193544A01231843F8600020D51DA2
-:105E500079350395012400214F4DFA68224039D04D
-:105E60008A00521892004E4B9B5C1E1C834204D049
-:105E70004B4BD3185B7883422CD1494BD218D37843
-:105E8000039DED6AAB4202D9039DC046EB625368A5
-:105E90005B0801D30123009386420AD19568029BD7
-:105EA0005E1C02969B003C4E9E190B231B02F318AE
-:105EB0009D61537883420DD1D268019B5D1C019591
-:105EC0009B00354D5D192D239B01EB18DA603A6973
-:105ED00001323A61640001310B29BDD30130092838
-:105EE000B8D30020029B99002B4A89180B231B0270
-:105EF000C9188861019B990089182D239B01C91835
-:105F0000C860009B002B0CD1810089180B231B0259
-:105F1000C918CB69C0468B6101300B28F4D308E067
-:105F200007E0039DE86A302803D23020039DC04675
-:105F3000E862194A786900282AD000210123184311
-:105F40007861002001240022134E7B69234010D089
-:105F500093009B189B00124D5B199D78854208D1D8
-:105F60001D690B1C9B009E192D239B01F318DD63FB
-:105F70000131640001320B2AE6D301300928E1D354
-:105F800000208900044A89182D239B01C918C86381
-:105F900004B0F0BC08BC1847680E00803053FFFF07
-:105FA0000001008000470847104718477847C0465F
-:105FB00018C09FE51CFF2FE17847C04610C09FE541
-:105FC0001CFF2FE17847C04608C09FE51CFF2FE16A
-:105FD0003852FFFF8851FFFFD5B02140F0B50420B3
-:105FE0001A49012508601A4FBB231B01F8180573D5
-:105FF0001848416B2C0500207A6E174B8A421DD041
-:10600000197B002917D1D91DFF313A3149781E1C5F
-:10601000002910D1B06010207060104A1049FFF7BD
-:10602000C3FF002807D035730423B8691843B8614B
-:10603000206100F017F8F0BC08BC1847187304235F
-:10604000B8699843B8612061F5E70000000000B02E
-:10605000680E008000011840280500802055FFFFD1
-:106060007D712140F8B5154F396C1548406E0C1AFA
-:10607000144E7168144DA14206D8144A0A43009286
-:10608000B96B0918FA6B11E01122520522430092F4
-:10609000B96B09180020FA6B2B1CFFF78DFF706895
-:1060A000001B0A4A02430092B96BFA6B00202B1CBA
-:1060B000FFF782FFF8BC08BC184700007C2900806D
-:1060C000680E0080280500804480204000003702D0
-:1060D000F0B52B4FB8687968C0192030294AFFF70E
-:1060E00063FF0120C0022849C0460860B968381C17
-:1060F000264D0024264EEF1D7937002931D1316815
-:106100000A78120A03D20473F0BC08BC1847497815
-:1061100000290CD1051C406800F03EF9306800F001
-:1061200067F8002826D12C73FFF758FF22E00901F9
-:10613000071C4160081C174A1749FFF735FF002864
-:1061400007D13C730423A86998439904A8610861A6
-:10615000DAE7102000F020F91020B860FFF782FF86
-:10616000D2E7051C406800F017F9306800F040F8ED
-:106170000028D8D00223F86B1843F863C4E7000066
-:1061800028050080A555FFFF000000B0680E0080C4
-:10619000E40100802055FFFF7D71214090B5012072
-:1061A00040031049002708600F4CE01DFF303A30D3
-:1061B0004770E06980000019006900F0D7F8E069D5
-:1061C000002801D0E76101E00120E06107480223D7
-:1061D000C16B1943C1632773FFF700FF90BC08BC74
-:1061E00018470000000000B028050080E80E00807D
-:1061F00080B584B0071C78886D2803DB381C00F05C
-:10620000F7F817E080000D490958381CFFF7CBFE5E
-:1062100000280FD13978C9090CD36946381C00F021
-:10622000CFF86846002100F00BF8002801D10120CA
-:1062300000E0002004B080BC08BC1847E8010080E2
-:10624000F0B582B0021C414BDD1DFF353A352F7889
-:10625000002F01D0002700E001272F702F78FB00CE
-:10626000DB195B013A4FDC1940780001C71D093783
-:1062700000208300D658C046E65001300428F8D3E9
-:1062800000290FD00022BB08019383420BD9131CB5
-:106290009B00CB588600A351019B01300132834201
-:1062A000F5D800E010272B48026D806E2A49824203
-:1062B00003D8821ACB6C9A1A00E0121ABA4205D897
-:1062C0002648816B01318163012037E0C319CA6C14
-:1062D000934208D8224A3A4300920A1C496C091892
-:1062E000926C231C12E0161A00961B49496C09187F
-:1062F0001948826C0320231CFFF75EFEB81B184A66
-:1063000002430092A3191448826C416C0320FFF7EA
-:1063100053FE01200D49C04668708A6992005218E8
-:1063200017618A69002A02D000278F6100E0886126
-:106330000C480223C16B1943C163002001270A499D
-:10634000C0464F7302B0F0BC08BC18472805008057
-:1063500050BA2040680E00807C290080A082204036
-:1063600000001902E80E0080181A008007498A6EA2
-:106370001018074AD26C13041B0C834200D8801AF1
-:106380008866886E0349C04648617047680E008081
-:106390007C29008090EE204006494A6E1018064A7B
-:1063A000126C824200D8801A4866486E0349C04683
-:1063B00008617047680E00807C29008090EE2040C4
-:1063C00005220A608288C0468A8000224A7040887E
-:1063D000C0464880CA808A60CA6070470522026051
-:1063E0000022828042704180C2808260C260704719
-:1063F00080B584B0071C0E48416B0131416369468A
-:10640000381CFFF7DDFF3868C0460090452000AB20
-:1064100018700127DF8068460021FFF711FF002870
-:1064200001D1381C00E0002004B080BC08BC184733
-:10643000A082204000B584B0C188094AC04691813D
-:106440006946FFF7BDFF0120400201AB5880684656
-:106450000021FFF7F5FE012004B008BC184700003A
-:10646000E80E008000B5FFF7C3FF08BC1847012005
-:106470000349C0460871A121490388600020704784
-:10648000280F008000200449C0460871FF21A12286
-:106490005203013191607047280F00800220A12132
-:1064A000490388600020704701204002A121490370
-:1064B000886000207047C088C006C00EA121490333
-:1064C00048610249C046C86300207047E81A00804E
-:1064D00080B584B008490F6B6946FFF771FFF80675
-:1064E000C00E01AB588068460021FFF7A9FE0120CD
-:1064F00004B080BC08BC18478000144080B585B04B
-:10650000071C6946381CFFF75BFFF88804A903F0F5
-:10651000C9FF01AB588001A8408800280FD001A80E
-:1065200040888008033880080130043B5870049884
-:106530000168C04602914068C046039005E000A88B
-:1065400000784023184300AB18700498C11D013136
-:106550006846FFF775FE012005B080BC08BC1847EF
-:1065600090B584B0144F397B002920D1F91DFF313B
-:106570003A31497800291AD110490522009208229F
-:1065800000AB5A809880062000AB58700024DC8055
-:106590000868C04602904868C046039001203873DE
-:1065A00068460831FFF74CFE002800D03C7304B069
-:1065B00090BC08BC1847000028050080A42A008071
-:1065C00090B584B0071C6946381CFFF7F9FEBA681D
-:1065D0000D4C0E48002A05D10D49FFF7E4FC0028B8
-:1065E0000CDA05E0B9880B4BFFF7DFFC002805DA71
-:1065F00001AB5C8068460021FFF722FE002004B05A
-:1066000090BC08BC18470000FFFF00000D76214039
-:10661000C1BD214059BD214000B5C08803F02EFF07
-:10662000002008BC184700B5FFF7E2FE08BC184779
-:1066300000B5FFF7DDFE08BC184700B5011C0220BD
-:1066400000F002F808BC1847B0B5C6B0071C081C1B
-:106650006946FFF7B5FE2148FFF7A4FC041C204A59
-:106660000021381CFFF7A0FC002827D004A91D4AF0
-:10667000381CFFF799FC04A80023012F06D10CAAAF
-:1066800002320021136001311029FBD30168042973
-:1066900004D9890803398908013100E0191C00ABCD
-:1066A000597006A90978C046D9800068C046029092
-:1066B0000798C0460390043308AD02E0452000ABC4
-:1066C00018700949201CFFF76EFC6846291CFFF76B
-:1066D000B7FD012046B0B0BC08BC18472402FFFF3C
-:1066E00059B121409DAF21403C02FFFF00B5011C84
-:1066F000022000F010F808BC184700B5011C01206A
-:10670000FFF7A2FF08BC184700B5011C012000F0EC
-:1067100002F808BC1847F0B5C7B0041C0F1C381CA1
-:1067200001A9FFF74DFE2148FFF73CFC0090787867
-:106730000001BA680430FC2A25D8FF2309339842A7
-:1067400021D8192C1FD8FD88F868C0460590F91D7E
-:10675000093106AB00207E78002E0DDD40C940C314
-:1067600040C940C340C940C340C940C301300004D0
-:10677000000C7E788642F1DC201C05A92B1CFFF75B
-:1067800021FC002805D001A800784023184301AB64
-:10679000187007490098FFF706FC002101A8FFF7D1
-:1067A0004FFD012047B0F0BC08BC18472402FFFF92
-:1067B0003C02FFFF00B5FFF71BFE08BC1847F0B511
-:1067C000C6B0071CFC88254D6868013069466860C2
-:1067D000381CFFF7F5FD102C08D300A800784023E3
-:1067E000184300AB18700220D88017E07878820038
-:1067F000FB1D09330020B968002A15D940CB0F1CB6
-:106800000131BE420DD000AA127840231A4300ABDA
-:106810001A700422DA800290039104336846002142
-:1068200015E001309042E9D300AB5C7002946968D6
-:10683000C0460391A20000201033002A05D90F1C86
-:1068400080C3013001319042F9D3684604A9FFF7B3
-:10685000F7FC012046B0F0BC08BC18479C03008040
-:1068600090B4234800680121420900D30021002789
-:106870003A1C430B00D2022211431E4A2024D36843
-:10688000012B2ED1800A00D200240C43201C1B2394
-:10689000DB01D118898B090B00D204273843D16F53
-:1068A0000968090A07D2D11D793109680968090AFE
-:1068B00001D308231843E3231B01D1188979032945
-:1068C00002D1FF23013318430B49096A10224B0AF6
-:1068D00000D2002210438907890F8901084390BC28
-:1068E0007047400C00D200240C43201CECE7000051
-:1068F00000001040680E0080C0001840F0B53A4C0F
-:10690000201C04F007FA3948E3231B01C718B979A2
-:10691000374EC51D7935062962D202A35B5C5B0048
-:106920009F44001C030E1E374E550120B8710020F5
-:10693000B060FFF795FF0523984300F06FF80CE077
-:10694000FFF78EFFC00806D3B068411CB1600A286B
-:1069500003D9042000E00220B8716422201C2BE03F
-:10696000061CC06F80230168194301600320B871C1
-:10697000201C204A002104F099F9F06F04230168DB
-:10698000994301602868016819430160F0BC08BCA4
-:1069900018470521B971296804230A689A430A60D7
-:1069A000C06F016819430160FFF75AFF08231843BD
-:1069B00000F034F8201C104A002104F077F9E5E7D4
-:1069C000FFF74EFF0423184300F028F8DEE700200D
-:1069D000296860230A689A430A60FFF7E3FAD5E75B
-:1069E0000620B871D2E70000A9792140680E008026
-:1069F0009C030080307500001027000000B50020C7
-:106A00000449C046887104480122002104F04EF96F
-:106A100008BC1847981C0080A979214090B5071C34
-:106A200031480068790803D31023011C994301E021
-:106A3000102101432D4CE268012A05D12279002A58
-:106A400002D001239B021943814202D0012000059C
-:106A50000160E068012820D11B23DB01E018808B56
-:106A6000F90804D30123DB02011C994301E0012151
-:106A7000C902814202D0002002F01AFB380907D374
-:106A8000E06F8023016899430160E018006800E02E
-:106A9000E06F80230168194301601548016A780995
-:106AA00003D3FF200130084303E0FF23081C013318
-:106AB000984380088000BA099207920F10438842D9
-:106AC00002D00C49C0460862E168012908D1790A60
-:106AD00006D3FF2304331840032801D1FFF78EFFAC
-:106AE00090BC08BC1847000000001040680E0080F1
-:106AF000C0001840C000180080B5FFF7B1FE800943
-:106B00001BD20F48E3231B01C1184A79002A14D174
-:106B100001224A7100278030006860230168994390
-:106B20000160084806E0022002F08CFC072002F019
-:106B30005BFC381CFFF736FAF5E780BC08BC184749
-:106B4000680E0080F401FFFF00B584B06946FFF7CE
-:106B500037FCFFF785FE01AB588008480068C04647
-:106B600002900748006AC046039068460021FFF77C
-:106B700067FB012004B008BC18470000000010406B
-:106B8000C000184080B584B0071C6946381CFFF768
-:106B900017FCF888FFF742FFFFF762FE01AB588051
-:106BA00068460021FFF74CFB012004B080BC08BC04
-:106BB0001847B0B5C6B0C7886946FFF701FC012485
-:106BC0001A4B9F420AD900A800784023184300AB13
-:106BD00018700220D8806846002120E01448FFF792
-:106BE000E1F9051C134A381C04A9FFF7DDF9124925
-:106BF000281CFFF7D8F9012F06D10CA9002000228C
-:106C00000A6001301028FBD3102000AB58700498A4
-:106C1000C04602900598C0460390684606A9FFF753
-:106C20000FFB201C46B0B0BC08BC1847FF01000099
-:106C30002402FFFF9DAF21403C02FFFFF0B5C6B02C
-:106C4000071C6946381CFFF7BBFBFC8878780125D8
-:106C5000102801D1192C09D900A800784023184325
-:106C600000AB18700220D880043327E0B868C04613
-:106C70000490F868C046059006AAFB1D0933002160
-:106C8000787800280DDD002040CB40C201300004A0
-:106C9000000C0428F8DB481C0104090C78788842B1
-:106CA000F1DC0B48FFF77EF9071C0A4A201C04A9F7
-:106CB000FFF77AF90849381CFFF775F96846002193
-:106CC000FFF7BEFA281C46B0F0BC08BC184700000D
-:106CD0002402FFFFC5AF21403C02FFFFF0B584B0A6
-:106CE000041C0027E688A26847490879002808D0D4
-:106CF000002E01D0012E01D1012701E0042E00D188
-:106D0000032601254148052E66D202A39B5D5B0048
-:106D10009F44001C0306080C10000580002303E0BC
-:106D2000058005E000230380438006E00023038004
-:106D3000458002E0FF2301330380CB1D79339E8918
-:106D400001235B029E4202DBD207D20F00E0012248
-:106D50006D235B01C9188988FF23E133994301231F
-:106D600019430688FF339E420DD1FF20E1300843CE
-:106D7000002A04D101239B029843011C20E0012139
-:106D8000890201431CE0012E0AD14088012804D168
-:106D900060231943002A13D00CE0202319430FE08D
-:106DA000002E0DD14088012808D1FF2381331943DB
-:106DB000002A05D001239B02194301E080231943D7
-:106DC000042002F075F909214902002002F070F94F
-:106DD000002F02D1002012E0FFE76946201CFFF7D8
-:106DE000EFFA00A800784023184300AB1870022087
-:106DF000D880684600210433FFF722FA281C04B02B
-:106E0000F0BC08BC18470000680E0080881C008099
-:106E1000C0885121890308620020704780B5164F51
-:106E2000F868012807D137239B01F818408A802190
-:106E300001431B2007E06D235B01F818808B0121C3
-:106E400049030143102002F033F9012071235B0153
-:106E5000F918088048801B23DB01F818808B012378
-:106E60001B039843412109020143002002F020F94D
-:106E7000002080BC08BC1847680E008080B5174F02
-:106E8000F868012808D137239B01F818408A80232D
-:106E90009843011C1B2008E06D235B01F818808BD0
-:106EA00001235B039843011C102002F001F9FF202D
-:106EB00071235B01F918013008801B23DB01F818EE
-:106EC000808B41231B029843092149020143002082
-:106ED00002F0EEF8002080BC08BC1847680E008065
-:106EE00080B584B00849CF6A6946FFF769FAB805EA
-:106EF000800D01AB588068460021FFF7A1F9012001
-:106F000004B080BC08BC184740001440C0889F23D0
-:106F100018400549C96A1B235B011940084303490E
-:106F2000C046C86200207047400014404000140072
-:106F300080B584B00D490F6A012F01D1FF0307E02E
-:106F4000022F01D13F0303E0002F01D10127FF02EF
-:106F50006946FFF735FA01AB5F8068460021FFF70D
-:106F60006FF9012004B080BC08BC18470020144011
-:106F7000C288A1204003002101235B039A4201D172
-:106F8000022204E00123DB039A4202D101220262C1
-:106F900000E00162081C704790B584B0071C02F045
-:106FA0009FF86946041C381CFFF70AFA01AB5C80A5
-:106FB000094FF86DC046029068460021FFF740F97E
-:106FC000F86DC007C00F0549C046C862012004B073
-:106FD00090BC08BC18470000A42A0080681C0080F0
-:106FE000C0880249C04648610020704780001400F4
-:106FF00000B584B06946FFF7E3F90648C06801AB05
-:10700000588068460021FFF71BF9012004B008BC36
-:107010001847000080001440C0880249C046C8607C
-:10702000002070478000140080B584B069468768EE
-:10703000FFF7C6F9202F07D278000C4940181B2310
-:10704000DB01C018808B06E000A8007840231843BD
-:1070500000AB1870022001AB588068460021FFF792
-:10706000EFF8012004B080BC08BC1847680E00800F
-:1070700000B584B0C1888268202A04D2101C02F0B6
-:1070800017F8002010E06946FFF79AF900A8007889
-:107090004023184300AB18700220D88068460021B6
-:1070A0000433FFF7CDF8012004B008BC184790B5B1
-:1070B00084B0C7886946FFF783F91048FEF772FF6E
-:1070C0000220391C02F0F2FF002806D00220391CF1
-:1070D00002F036FF01AB588002E0452000AB18708B
-:1070E0000749201CFEF75FFF68460021FFF7A8F85C
-:1070F000012004B090BC08BC184700002402FFFF28
-:107100003C02FFFFB0B584B0C78869468468FFF7CA
-:1071100057F91048FEF746FF0F4A0220391CFEF7C8
-:1071200043FF002806D00D4B0220391C221CFEF71D
-:107130003CFF02E0452000AB18700949281CFEF70F
-:1071400032FF68460021FFF77BF8012004B0B0BC95
-:1071500008BC18472402FFFF59B1214059B0214013
-:107160003C02FFFF00B5FFF743F908BC18470020B9
-:10717000704780B4C288194BA1214903002A03D16A
-:10718000186B1023984304E0012A04D1186B1023D4
-:10719000184348611FE0022A1DD1C2688768002099
-:1071A0003B1CC340DB07DB0F9B0203430B61013039
-:1071B0000004000C2028F3DB0020131CC340DB0775
-:1071C000DB0F9B02C71D19373B430B6101300004E5
-:1071D000000C2028F1DB002080BC704780001440A8
-:1071E00080B4C28881681002120A10430204120C93
-:1071F0000C48C04602600C4BC0461A800A0C1702AD
-:1072000012123A431204120C42605A800904090C0B
-:107210000A02090A11430904090C816099800020BF
-:1072200080BC704740001400281B0080B0B584B0BB
-:1072300013490A681204120C1302121213434A680B
-:107240001204120C1F1C1302121213438968090442
-:10725000090C0A02091211430C04240C69461D1C76
-:10726000FFF7AEF801AB5F80280420430290684628
-:107270000021FEF7E5FF012004B0B0BC08BC1847B0
-:1072800040001440C18882680802090A08430004CB
-:10729000000C0A49C046C860100C030200121843D3
-:1072A0000004000C08611004000C0202000A1043E4
-:1072B0000004000C486100207047000040001400EA
-:1072C00090B584B0164BD9680904090C0A0209125A
-:1072D00011431A691204120C170212123A435B6925
-:1072E0001B041B0C1F021B123B431F043F0C0523F6
-:1072F0000093848801AB1C800024043B5C704088B0
-:1073000000AB5880D980100438430290039468463B
-:107310000021FEF795FF012004B090BC08BC18477F
-:107320004000144000B584B00B498A6A05210091E1
-:10733000818801AB19800021043B5970408800AB63
-:107340005880DA80029103916846FEF779FF0120A8
-:1073500004B008BC18470000C0001440C0880249AF
-:10736000C046886200207047C000140000B584B099
-:107370000B490A6A05210091818801AB198000211F
-:10738000043B5970408800AB5880DA800291039129
-:107390006846FEF755FF012004B008BC18470000FE
-:1073A000C0001440C0880249C046086200207047EF
-:1073B000C000140000B5C0880249FEF7F4FD0020AB
-:1073C00008BC18477502FFFF00B584B06946FEF798
-:1073D000F7FF0648006B01AB588068460021FEF7B6
-:1073E0002FFF012004B008BC18470000680E008081
-:1073F00000B5FEF7FDFF08BC184700B5FEF7F8FF23
-:1074000008BC184700B5FEF7F3FF08BC184780B565
-:10741000071C1048FEF7C6FD01204002A1214903C8
-:10742000886000210C48C04601710C480268520C6B
-:1074300005D20268120C06D10068800A03D30848FE
-:10744000C046C76002E00748C0460764081C80BC0D
-:1074500008BC1847D5942140280F00800000104038
-:10746000400118000000008000B501200349C0461B
-:1074700008721220FFF7CBFF08BC1847881C008059
-:1074800000B501200349C04648721520FFF7BFFF31
-:1074900008BC1847881C008000B501F0F9FF0120E6
-:1074A00008BC184780B584B0071CF88802F0FEF8C5
-:1074B00000280CD16946381CFEF782FF064801AB54
-:1074C000588068460021FEF7BBFE012000E0002046
-:1074D00004B080BC08BC1847FFFF000080B584B032
-:1074E0006946FEF76DFF012701AB5F80094881897E
-:1074F0000904C2891143029181880904C0880843A4
-:10750000039068460021FEF79BFE381C04B080BC47
-:1075100008BC18474C2A008000B5FEF769FF08BC7C
-:10752000184700B5FEF764FF08BC184700B5FEF722
-:107530005FFF08BC184700B5FEF75AFF08BC1847A4
-:1075400000B5FEF755FF08BC184700B5FEF750FF21
-:1075500008BC184700B5FEF74BFF08BC184700B53C
-:10756000FEF746FF08BC184700B5FEF741FF08BC10
-:10757000184700B5FEF73CFF08BC184700B5FEF7FA
-:1075800037FF08BC184700B5FEF732FF08BC1847A4
-:1075900000B58CB008A9FEF713FF694608A802F0F1
-:1075A000A9FF022008AB5870694608A8FEF748FEFC
-:1075B00001200CB008BC184700B5FEF719FF08BC45
-:1075C000184790B584B0071C6946381CFEF7F8FED2
-:1075D000FA8812490124C81D8930002A0FD004708E
-:1075E0004470B868000C8031C882B868C04608830F
-:1075F000F868000C4883F868C046888302E00021E0
-:1076000001704170064801AB588068460021FEF7C2
-:1076100017FE201C04B090BC08BC1847680E008000
-:10762000FFFF000000B5FEF7E3FE08BC184700B5F9
-:10763000FEF7DEFE08BC184700B5FEF7D9FE08BC11
-:10764000184700B5FEF7D4FE08BC184700B5FEF792
-:10765000CFFE08BC184790B584B0071C6946381C9B
-:10766000FEF7AEFEF8880324E40404430323DB049E
-:107670009C4202D30F4B9C4206D90F4801AB588065
-:1076800068460021FEF7DCFD0120800720430068EA
-:10769000002100AB5970FA88C046DA80029003914D
-:1076A00068460433FEF7CCFD012004B090BC08BC52
-:1076B00018470000E0001800FFFF000080B584B00C
-:1076C000071C6946381CFEF77BFEF8880323DB04A1
-:1076D0001843984202D30A4B984208D9094801AB93
-:1076E000588068460021FEF7ABFD012003E0B96831
-:1076F000C0460160002004B080BC08BC18470000F0
-:10770000E0001800FFFF000080B586B002A9FEF778
-:1077100057FE012702AB5F700020D8800A484168FD
-:10772000C04604918168C0460591C168C046009179
-:107730004069C0460190694602A8FEF781FD381CE9
-:1077400006B080BC08BC18476819008000B5C16845
-:107750008068FEF747FB002008BC184700207047F0
-:1077600090B584B0041C0F1C68465021FEF736FE0D
-:1077700001AB5C80029768460021FEF761FD04B012
-:1077800090BC08BC184780B584B0071C68465121DE
-:10779000FEF724FE01AB5F8068460021FEF750FD36
-:1077A00004B080BC08BC1847002070470020704718
-:1077B00090B584B0002712490968124A126B102351
-:1077C0001A400124002A00D001278A0C03D33A046E
-:1077D000120C02271743C90C03D33904090C0427E0
-:1077E0000F436946FEF7ECFD01AB5F806846002160
-:1077F000FEF726FD201C04B090BC08BC1847000012
-:1078000000001040C000184000B584B06946FEF783
-:10781000D7FD0648C06D01AB588068460021FEF7D1
-:107820000FFD012004B008BC18470000A42A008006
-:1078300000B5FEF7DDFD08BC184770470020704713
-:1078400000207047002070470020704700207047DC
-:107850000020704700B5FEF7CBFD08BC18470000BC
-:1078600080B585B001A9FEF7ABFD002001AB5870D3
-:107870000C49C9680127012902D10397049701E047
-:1078800003970490684601F033FD02AB0098C046B0
-:107890005880002101A8FEF7D3FC381C05B080BC3D
-:1078A00008BC1847680E0080704704490020002279
-:1078B0000A70013001316828FAD37047A082204055
-:1078C0000022884203D3401A01328842FBD2101CA6
-:1078D0007047884202D3401A8842FCD2704790B465
-:1078E000011CFF27042927DA0020144A43001B1833
-:1078F000DB00D458630C1AD24B005918C9005758F2
-:1079000043001B18DB00D75089189A184F68C046EF
-:1079100057608B68C04693600B69C04613614B6922
-:10792000C0465361C968C046D16090BC7047013001
-:107930000006000E0428D9DB381CF6E740AB2040D7
-:10794000F7B5C4B0041C0020469A112111406ED036
-:1079500000277900C919C900574A5158490C03D268
-:1079600001300006000E04E0791C0F063F0E042FC4
-:10797000EFDB00285BD0002600220092402300218C
-:10798000002002AA00F088FA04A9002082008A5888
-:107990001206120EA24203D1721C1606360E04E025
-:1079A00001300006000E1028F0DB002E3DD0042C24
-:1079B0003ED1800008584001800D00220092102323
-:1079C000002102AA00F068FA0021019102A805999D
-:1079D000490C890529D0C1680A06120E459B9A42B6
-:1079E00011D1C0684001860D002200920C230021B5
-:1079F000301C02AA00F050FA0199029D481C0106B1
-:107A0000090E01910EE04801860D0022009210231C
-:107A10000021301C02AA00F03FFA02A80599490C87
-:107A20008905D8D1019900290FD1FF203DE040E020
-:107A3000800008584001860D002200920C2300218E
-:107A4000301C02AA00F028FA029D01200004469A88
-:107A500010437900C919C900174AC0465050301C5C
-:107A60008E1870601020042C00D00C20041CB06014
-:107A700000202021469A1140202900D0281C306186
-:107A80002819FF21FF3008300931FFF719FF4301A2
-:107A90001818C000001B706100205021469A114048
-:107AA000502900D1281CF060381C47B0F0BC08BC3D
-:107AB0001847FF20F9E7000040AB204080B40023C6
-:107AC0000022002906D9875C7B401B061B0E013271
-:107AD0008A42F8D3D8430006000E80BC7047F0B548
-:107AE000C6B0042807DA41000918C9004591414A87
-:107AF00051584B0C02D20020C04376E001235B04B6
-:107B0000194043001818C0003A4A1418002961D0DF
-:107B1000002102912069A168451830D0FF21681E1C
-:107B20000931FFF7CDFE616840180190019881424C
-:107B300002D1A668AF1B09E00026FF21281C0931ED
-:107B4000FFF7C7FE071C01D1FF270937002200926B
-:107B50000198311C03AA3B1C00F09EF903A8391CB4
-:107B6000FFF7ACFFC043029948400106090E02919D
-:107B7000ED1BA068A84200D10025002DCED80299A7
-:107B8000CF43002200920C230021606803AA00F07A
-:107B900083F92069C04603900598000A000239065F
-:107BA000090E08430590FF231B02984305900C2102
-:107BB00003A8FFF783FFFF231B02059999430006E3
-:107BC000000E0002084305900C230021606803AA00
-:107BD00000F0CAF900204599064AC0465050C143FA
-:107BE0006160A160E1602161616146B0F0BC08BCE8
-:107BF0001847000040AB2040B0B44C42002900DBE5
-:107C00000C1C0027FF43042821DA124D43001818EA
-:107C1000C0004019012A05D0022A09D0032A16D132
-:107C200001690BE0002912DB02698A420FD305E0EB
-:107C3000002907DAC168A14209D3091BC160C068E5
-:107C4000B0BC7047C168091902699142F6D9381C65
-:107C5000F6E7000040AB2040F0B584B0171C0D1CC7
-:107C60000021029142001218D2002C498B581B06A9
-:107C70001B0E01930023DB43042802DA019840081D
-:107C800001D2181C46E05418E068C21921698A42E2
-:107C900000D90F1A002F3CD9A068E1684018FF21D5
-:107CA0000931FFF70DFE61684618A068E1684018C9
-:107CB000FF210931FFF70DFEC219FF2109318A4268
-:107CC00014D9019AC04600920B1A0393011C301C70
-:107CD0002A1C00F0E1F8E068039BC018E060039BF9
-:107CE0005D19FF1A02981818029010E0019AC04618
-:107CF0000092011C301C2A1C3B1C00F0CDF8E068EF
-:107D0000C019ED19E0600298C01902900027002FF9
-:107D1000C2D8029804B0F0BC08BC184740AB204061
-:107D2000F0B583B0171C0D1C002101914200121800
-:107D3000D200029230498A581206120E0024E443FF
-:107D4000042801DA500901D2201C51E0029A54188B
-:107D5000E068C2196069824201D92269871A002F3E
-:107D600045D9254EA068E1684018FF210931FFF789
-:107D7000A7FD616840180090A068E1684018FF21E5
-:107D80000931FFF7A6FD029AB15801235B0419439C
-:107D9000B150C119FF220932914213D9131A011CA3
-:107DA00000982A1C1E1C00F0DFF8E0688019751985
-:107DB000E0602169884200D92061BF1B019830181A
-:107DC000019012E0011C009E301C2A1C3B1C00F09C
-:107DD000CBF8E068C019ED19E0602169884200D94C
-:107DE00020610198C01901900027002FB9D801988F
-:107DF00003B0F0BC08BC184740AB2040B0B5C3B0DE
-:107E00000C1C0027FA43042806DA41000918C900AF
-:107E1000144845586B0C04D2101C43B0B0BC08BCCD
-:107E2000184762091BD300220092081840680C23EF
-:107E3000002101AA00F030F8112C0DD0122C0DD029
-:107E4000132C05D0142C0AD103980004070E06E069
-:107E5000039807063F0E02E0019F00E0029F381CD6
-:107E6000DBE7000040AB20400349002000220A5419
-:107E700001306028FBD3704740AB204000B502F0D2
-:107E80006FFA572002F0CCF902F040F9000AFBD358
-:107E900002F04EFA08BC1847F0B582B0079D141CDA
-:107EA0001F1C304AD26F202316689E431660331C75
-:107EB000FF2201322A4040020843050A061C000C3A
-:107EC0000190002A20D002F04BFA532002F0A8F9CA
-:107ED0000198C046009002F0A3F9281C02F0A0F916
-:107EE000301C02F09DF902F023FAFFF7C7FF02F001
-:107EF00037FA542002F094F9009802F091F9281C06
-:107F000002F08EF9301C14E002F02AFA522002F03E
-:107F100087F9019802F084F9281C02F081F9301CDD
-:107F200002F07EF9002002F07BF9002002F078F9DF
-:107F3000002002F075F9002002F072F9002F05D937
-:107F400002F0E4F820700134013FF9D102F0F0F9B9
-:107F5000044AD06F202301681943016002B0F0BCCD
-:107F600008BC1847680E0080F0B582B0141C1F1CB6
-:107F700042020A43151C012854D02C49C86F202303
-:107F800002689A430260C86F402301681943016088
-:107F900002F0E6F9532002F043F9280C061C02F027
-:107FA0003FF9280A0190009002F03AF9281C02F0EB
-:107FB00037F902F0BDF9FFF761FF02F0D1F9842033
-:107FC00002F02EF9301C02F02BF9009802F028F98B
-:107FD000281C02F025F9002F05D92078013402F081
-:107FE0001FF9013FF9D102F0A3F902F0B9F983209A
-:107FF00002F016F9301C02F013F9019802F010F9A2
-:10800000281C02F00DF902F093F9FFF737FF07493A
-:10801000C86F402302689A430260C86F202301683A
-:108020001943016002B0F0BC08BC1847680E00801C
-:108030007047000080B501F08FF8064FC046F86029
-:1080400001F0F2F8788001F0B1F8387180BC08BC1A
-:1080500018470000680E008000B501F005F90249DC
-:10806000C046088008BC1847680E00800B48C168ED
-:10807000012911D1C16F02230A681A430A60C16F36
-:1080800080230A681A430A60C118086882230268BC
-:108090001A4302600020088170470000680E0080CB
-:1080A000F0B44A49CA1D9D32002000278300D750F2
-:1080B00001301728FAD3464C00208200A750013027
-:1080C0002028FAD3434A00208300D75001302028CB
-:1080D000FAD3A76197614F658F653F4DC0462F600A
-:1080E0006F60AF60AF61EF602F616F610020C10012
-:1080F00009184901354BC9188600CB1DF933344C9A
-:108100003419E36311235B01CB1863630D239B01D7
-:10811000CB18B418E36323235B01C91861630130F2
-:108120000228E4DB2948C11DF931294CC046A1626F
-:10813000616B0D239B01E162C1189162516BC046D6
-:10814000D1620821E1642549C046216524490B69B3
-:10815000C0466365C31D4D33E36525668B68C04625
-:108160006366CB68C046A3661E4BC046E3662767BE
-:108170000B23DB01C318A36767670126E31D69337F
-:108180006661E7611F730223D364174BC046136512
-:10819000CB69C0465365C31D5133D3652B1D136690
-:1081A0004B69C04653668969C04691660F49C0460F
-:1081B000D16616670F23DB01C01890675667D76139
-:1081C000D01D693056610773F0BC7047680E00809F
-:1081D000E42C0080642D008090EE204030011800D7
-:1081E0007C2900800055FFFF380118001055FFFF63
-:1081F00090B400211E4ABB231B01D718F973192321
-:10820000DB01D0180124CD231B01D318C1611C70E0
-:1082100033239B01D3189960B97359612F239B01B4
-:10822000D3181960134B5127BF0303633B60846964
-:10823000E4184463043C7C600124E40284630E4C33
-:10824000C046BC60046BC04644628469E4180B4BB2
-:10825000E318FB60036BC0468362436AC046036257
-:10826000C16351649164D165D16690BC70470000D0
-:10827000680E008000002040FC070000FCF7FFFFB4
-:1082800090B400221B49C9231B01C81802710120A8
-:10829000BB231B01CB1858731748031C0027DC1D98
-:1082A000C1341C65231C01373F2FF8D31A651923ED
-:1082B000DB01CF1833239B01CB183A619861402032
-:1082C000F860DA611A62CA640A660C48C046C26085
-:1082D0000B48006BC006C00EF8630A480168C04630
-:1082E00019804168C04659808068C046988090BC1B
-:1082F00070470000680E008090BC204090EE204047
-:10830000800014404000144000200A49C046087311
-:10831000CB1DFF333A338861C8611870064AC046E6
-:1083200010655066906608705870BB231B01D11809
-:108330000873704728050080680E0080F0B42F494C
-:108340002F4AC046116101239B02C81850612D4875
-:10835000C0461062DB00C3185362002313635363EB
-:10836000294A2A4FD41DFF34FA3414C7083F3B6111
-:108370001C1F7C61264FC0463960B8617961F86284
-:108380003B637B64BA64FA65224FFE1DF936224DC9
-:10839000EC1D793426625126B6033761246AC04643
-:1083A00074612F671D4D09277F04EC1D75347C60B7
-:1083B0003D601B4CC0463C61E61D75367E61194F21
-:1083C000C0467C603D600F1C0021FF2401341D1C51
-:1083D0008B00FD500131A142FAD3011C002001277E
-:1083E000FF028300CD500130B842FAD30020810053
-:1083F000555001308028FAD3F0BC704724A32040A8
-:10840000400118002483204024A920408001180046
-:10841000A803008024A72040680E008024A82040E4
-:10842000A4A8204008040080B8B52C48FDF7BAFD88
-:1084300001202B490A68520C06D20A68120C02D19C
-:108440000A68920A00D200200406240E254AD71D8D
-:108450000D37002300209D0078510133042BFAD3FF
-:1084600001273F055061F860D061F8610023DB43CC
-:1084700093613B6113623B6200271B4B8D68C046D2
-:1084800000958D69C0460095002C0BD0DD6BC04671
-:1084900000959D6BC04600955D6BC04600951D6BB9
-:1084A000C04600950137402FE8D300276C460123D2
-:1084B0005B071C4301E0206001370D682B0902D2E5
-:1084C000802FF8D301E0802F03D308494B6E01338E
-:1084D0004B66D062B8BC08BC18470000F401FFFF2F
-:1084E00000001040680E008000011840A08220406B
-:1084F00090B400210E4F0F4A00204C01641AA400D2
-:10850000A318586098601864586410535880CC00C1
-:10851000E4199867DC6201310329EED30649C046AD
-:10852000086048608860C860086190BC70470000BF
-:10853000AC6621405C2B0080D02C00806421054873
-:10854000C04601630021C943416381630021C163C7
-:1085500001647047680E008080B4012040020A491F
-:10856000C04608603C20486088600848C046C86033
-:108570000020074A8700CB68C046DA510130102836
-:10858000F8D380BC70470000E42D0080F42D0080FB
-:108590005D4CFFFF1249134867239B01CA1806C0B0
-:1085A0000838114BCA18C160826001610F49104838
-:1085B000A7239B01CA1806C008380E4BCA18C16011
-:1085C000826001610C480D4967239B01C21805C1F7
-:1085D0000839054BC218C8608A60086170470000FE
-:1085E000AC1E2140482E0080FC1F0000ACEE204055
-:1085F000342E0080FC2F0000AC3E21405C2E008019
-:1086000090B40021404C00200A0112191923DB010B
-:10861000D218D06210635063906301310329F3D301
-:108620003A49C04608634863886320600121E31D1E
-:108630005933606019711872987198725971587233
-:10864000D871D872E21D4932117319709073987005
-:1086500051735970D073D8701171117290719072FA
-:1086600050715072D071D07218730222E71D6937B1
-:108670003A709973BA7058737870D873F87039710A
-:108680003A72B971B97278717A72F971F972397393
-:10869000E31D79331A70B973997078735A70F9734E
-:1086A000D9701A711A7299719A7258715A72D97175
-:1086B000DA721973E71D89373A709973B970587374
-:1086C0007A70D973F97039713A72B971B972787177
-:1086D0007A72F971F9723A73E31D99331A70B973AA
-:1086E0009A7078735A70F973DA7019711A729971F5
-:1086F000997258715A72D971D9722061E0606061C3
-:10870000A06090BC70470000A01C0080E8190080A9
-:10871000812000020149C04688627047C0001400F1
-:1087200009490A4BC818043BC91808600021C21D3A
-:108730002932C261101C01310829F8D3C11F29391F
-:108740000020C86170470000680E008084090000A6
-:1087500006480749C0460880488000208880C880B5
-:1087600088600449C046486188617047FFFF000087
-:108770004C2A00806C06008000210648C21D193278
-:10878000C1600161C16101621171FF30013041625C
-:10879000704700006C06008009480A4BC04618600C
-:1087A0000021C21D4D32C260101C01311429F8D3C2
-:1087B000C11F4D390020C8605860986070470000A4
-:1087C000D80700806C06008000B50B490B48FDF708
-:1087D000EAFB0B48006A0123DB0398430949C046C2
-:1087E00008620948C168012904D1C06F802301686B
-:1087F0001943016008BC1847C1BD2140759821404C
-:10880000C0001840C0001800680E008000B50F4876
-:10881000C168012904D1C06F8023016899430160B8
-:108820000B4B0C480C4A0021FDF7BFFB0B48418D58
-:10883000013141850021C1850948006A0123DB031C
-:1088400018430849C046086208BC1847680E0080F3
-:1088500059BD214075982140B80B000000000080F0
-:10886000C0001840C0001800F0B51B4C1026E0688E
-:10887000012808D16088002805D12079002802D17C
-:108880001920A06700E0A667002007235B02E51817
-:10889000C143E86169625908A1277F0379600F210C
-:1088A0007960E11DB93108710120B8604002B860FB
-:1088B00000F04CFA00F0F0FA0420B860072078616C
-:1088C0007E601B23DB01E018C08B04231840E862A4
-:1088D000F0BC08BC18470000680E008090B4021C71
-:1088E0000020FF2301339A4208D0012900D1012042
-:1088F000002A01D10223184390BC70471B4AD76855
-:108900001A4B19791C1C37239B01E318012F0DD139
-:108910005788002F0AD100290AD1598B0A0900D3A0
-:1089200002204909E8D301231843E5E7002903D0D1
-:10893000988A8007800FDFE76D235B01D1188A8852
-:10894000FF27013717400A49C98803D04B0A01D3D2
-:108950000320D1E7130A03D30B0A01D30220CBE78C
-:10896000D209C9D3C909C7D30120C5E7680E008061
-:10897000081C0080F0B5C1B0012000075249C04674
-:10898000086052484269400DA1214903486050489F
-:10899000C06A504B1843002103031B0B4E4C276F3A
-:1089A0003D032D0BE71D7937AB421CD0E31D793316
-:1089B0001B6AC046409301239B0703431B68CC00FE
-:1089C0006E46335101239B07061D33431B686C44DD
-:1089D000636008300131409B834200D83F48030365
-:1089E0001B0BAB42E7D1002001231B0313403C4C7F
-:1089F00003D0636A0133636209E0130B03D3236A74
-:108A00000133236203E0374B5C6D01345C65002960
-:108A100009D0031CDC00231C6B445C680130230D6F
-:108A200001D28842F5D1304C25686B0C05D2236801
-:108A30001B0C08D12468A30A05D320242B4BC04665
-:108A40005C6200245C62254B234C5126B6032367ED
-:108A500033613D6AC04675610225A12676037560C3
-:108A60000125B560E61DB9363571884221D0251C37
-:108A7000C3006C46E4582E6F6B4434605B682C6F07
-:108A8000C04663602B6F08332B673C6AA34202D356
-:108A9000124BC0462B67031CDB006B445C68013043
-:108AA000230D04D35124A4032B6FC046A361884235
-:108AB000DED1100B03D30E490120FDF774FA41B04B
-:108AC000F0BC08BC18470000000000B000011440D2
-:108AD0000040144000002040680E008024A7204081
-:108AE000A42A0080A082204000001040C00018008E
-:108AF000C94FFFFFF0B40021002307220624474F8F
-:108B0000C0463C613A610133202BF9D304253D6115
-:108B100005233B613C613A613C613A613D613B61E7
-:108B20003F4DAB6FDE0802231E40042333433B61FD
-:108B3000052333433B61AB6F9E0802231E40042391
-:108B400033433B61052333433B61AB6F5E08022334
-:108B50001E40042333433B61052333433B6102231F
-:108B6000AE6F1E40042333433B61052333433B6117
-:108B7000AB6F5D0002231D4004232B433B610523A3
-:108B80002B433B61C50802231D4004232B433B615B
-:108B900005232B433B61850802231D4004232B43FF
-:108BA0003B6105232B433B61450802231D40042301
-:108BB0002B433B6105232B433B61022505400423E6
-:108BC0002B433B6105232B433B61400002231840AC
-:108BD000042303433B6105231843386100253D61AD
-:108BE00001233B613D613B6100203D610D4B1B69F1
-:108BF00049001E1C02233340194301233B6101300D
-:108C00001028F2D302203861032038613C613A61B8
-:108C10003C613A6138614808F0BC7047800014003C
-:108C2000680E008080001440F0B40024072306275B
-:108C3000444AC046176113610134202CF9D304263D
-:108C4000166105241461176107231361166114610D
-:108C5000176113613C4B9B6FDD0802231D402B1CE9
-:108C60003343136125431561374B9B6F9D080223E6
-:108C70001D402B1C3343136125431561324B9B6F01
-:108C80005D0802231D402B1C3343136125431561EE
-:108C90002D4B9D6F02231D402B1C33431361254335
-:108CA0001561294B9B6F5D0002231D402B1C334334
-:108CB000136125431561C50802231D402B1C334356
-:108CC000136125431561850802231D402B1C334386
-:108CD000136125431561450802231D402B1C3343B6
-:108CE000136125431561022505402B1C3343136195
-:108CF00025431561400002231840031C33431361D0
-:108D000020431061176107231361166114614C0041
-:108D100000200F21251CCD4002231D4004232B439E
-:108D2000136105232B431361013001391028F1D35E
-:108D30001761072313611761136103201061F0BCF1
-:108D40007047000080001400680E0080F0B54F4DA1
-:108D5000082102202A1CFDF727F94D4C71235B01E5
-:108D6000E71838801A2102202A1CFDF71DF97880A7
-:108D7000207900280BD000203880E068012810D12D
-:108D80004448006801239B02184399020860E06888
-:108D9000012806D16088002803D1F9211220FFF7AD
-:108DA00043FF0121C9030020FFF73EFF00257D2678
-:108DB000F60000E001350020FFF79CFE000C01D317
-:108DC000B542F7D3002505E0032109030020FFF792
-:108DD0002BFF01350020FFF78DFE400B01D2B5427D
-:108DE000F2D30420FFF786FEFF23E13398430121ED
-:108DF00001433888FF230133984203D12F235B01BD
-:108E0000194316E0012809D17888012803D12323CA
-:108E10005B0119430DE0202319430AE0002808D123
-:108E20007888012803D10B23DB01194301E080235B
-:108E300019430420FFF7F8FE092149020020FFF73B
-:108E4000F3FEE06800280CD100211B20FFF7ECFEA8
-:108E50001A20FFF74FFE0121C90301431A20FFF733
-:108E6000E3FE002703E0082F01D30F2F08D9381C99
-:108E7000FFF740FE790009191B23DB01C91888831D
-:108E80000137202FEFD3F0BC08BC1847EDAF2140CD
-:108E9000680E00800000104081B013480168C04691
-:108EA00000914168C04600918168C0460091C16848
-:108EB000C04600910169C04600914169C0460091D9
-:108EC0008169C0460091C169C0460091016AC046EF
-:108ED0000091416AC0460091816AC0460091C06A13
-:108EE000C046009001B0704700081440F0B583B050
-:108EF000684D1B23DB01EF18F88B0422024002921D
-:108F000071235B01E8180188C04601914088C04682
-:108F10000090002403E0082C01D30F2C08D9201C5A
-:108F2000FFF7E8FD610049191B23DB01C91888839D
-:108F30000134202CEFD3584CE069002815D0574E4F
-:108F40002025013D5349E06930400BD068004018AE
-:108F500037239B01C018818B281CFFF765FEE06951
-:108F6000B043E0617608002DEBD10120FFF7C2FD90
-:108F70004849C046F883F88BC20825D3CA68012A3D
-:108F800013D10A79002A1FD1498800291CD10199DF
-:108F9000434A002905D0012916D1518BC90813D2A3
-:108FA0000FE0518B09090FD20BE00A79002A0BD18F
-:108FB0006D235B01C9188A88C988114049090907CE
-:108FC00002D104239843F883F88B04210140029ACC
-:108FD0001FD0B98B4A0B27D3800925D3FF230198D3
-:108FE0000133984220D000250098012800D10502C5
-:108FF0000198002802D101235B031D43A94213D02D
-:109000000020291CFFF710FEBD830020C0436062D2
-:109010000AE0B88B400B07D2092149020020FFF774
-:1090200003FE09204002B883F88BC0082DD31D48E9
-:10903000C76A01980099FFF751FCC207D20F1A497D
-:1090400003D00423CD6D2B4303E00423CD6D9D435A
-:109050002B1CCB65830803D30223CD6D2B4303E088
-:109060000223CD6D9D432B1CCB65616A81420CD0E0
-:1090700060620E48002A03D0FF212131394303E00A
-:10908000FF2321339F43391CC16203B0F0BC08BCED
-:1090900018470000680E0080681C008000000080F7
-:1090A000281C008040001440A42A008040001400C6
-:1090B00090B4012220280FD243000F1C07495C18EE
-:1090C00037239B01E3189F83824007235B02C91863
-:1090D000101CCA691043C86190BC7047680E0080BC
-:1090E0000B4840690B49C98B04220A400A4906D043
-:1090F0000123DB0298430123CA6D1A4305E00123D3
-:10910000DB021843CA6D52085200CA65704700005E
-:1091100080001440E81B0080A42A008000B584B0C1
-:10912000FFF7DEFF011C05200090002001AB188036
-:10913000043B58701B2200AB5A80D9800549C96D89
-:10914000C0460291039068460021FDF779F804B00B
-:1091500008BC1847A42A00800F480168490C05D2B2
-:109160000168090C06D10068800A03D30B48006827
-:10917000000C01E00A48806C0004000C094B984286
-:1091800005D00233984202D0074B984201D101200A
-:1091900070470020FCE7000000001040000018406D
-:1091A00000000080049900000799000090B4012499
-:1091B000211C18480268520C06D20268120C02D117
-:1091C0000068800A00D200210906090E124F134AD6
-:1091D00002D03868000C00E0906C0004000C104BCA
-:1091E000984208D00233984205D00E4B984202D0E4
-:1091F000023B98420CD1002902D0F86A000C00E032
-:10920000D06C400A00D200242006000E90BC7047AB
-:109210000020FBE700001040000018400000008024
-:1092200004990000079900000C480168490C05D218
-:109230000168090C05D10068800A02D308488068DB
-:1092400001E00848406C0004000C0021032803D012
-:10925000400801D301207047081CFCE700001040C3
-:109260000000184000000080F0B501271A4C256866
-:10927000FFF772FF031C194A022101261848012B2F
-:109280001BD1CB041E605523036000234360066896
-:10929000552E1BD1AA26066043600368AA2B15D160
-:1092A0000923036005230F4FC0463B6003230E4F85
-:1092B000C0463B601160076808E008232360042370
-:1092C0000A4FC0463B60116006602768C0462560B3
-:1092D000381CF0BC08BC18470000204000002440A7
-:1092E0000000224000002A400000264000002840E4
-:1092F00080B5071CFFF730FF012805D11948006829
-:109300001949496B084022E018480168490C05D208
-:109310000168090C06D10068800A03D3144800686C
-:10932000000C01E01348806C0004000C124BC018C4
-:1093300008280BD201A31B5C5B009F4405030703B5
-:1093400007070503032002E0012000E000200121BF
-:109350003860800700D100210806000E80BC08BCE0
-:1093600018470000346E21400000114000001040FA
-:109370000000184000000080FE66FFFFF0B582B0DC
-:10938000071C01200190FFF7E7FE012813D1382FB9
-:1093900001D0A82F07D10026F643341CA82F02D1F4
-:1093A000301C0096351C1120000406624462856260
-:1093B0000099C046C16200210848C0460160382FAC
-:1093C00001D0A82F05D101210160A82F01D10321CF
-:1093D0000160019802B0F0BC08BC1847346E21400F
-:1093E000704700007047000090B5071C124C2168C0
-:1093F000124881420BD00023211CE21DC13200E043
-:1094000008C19142FCD32060C820A0806772380157
-:1094100000F018F827720A48C046E060092F00DB08
-:109420000027E019017D01310175E0880130E080FD
-:10943000012090BC08BC184700000080EEFFC0D09F
-:109440000810000380B4084AD11D89310B7A202B03
-:1094500001D300230B72071C087A431C0B7280187F
-:109460009030477280BC704700000080074901229D
-:109470001204086802400120002A06D10A68120C72
-:1094800002D10968890A00D200207047000010400C
-:1094900090B5071C094C381C211CFCF791FF381CA7
-:1094A00000F00EF80123D84201D1000CE080002129
-:1094B000201CFCF7C5FE90BC08BC1847C4662140C0
-:1094C000F8B5071C797A76480023764C01295DD1DE
-:1094D000A288C0460092A1898A4274DAFA7A002AE8
-:1094E00015D07A6C002A12D08A4210D8009A511CEA
-:1094F000A180A188C0464181786C6B4EC046F08047
-:10950000A06A5823796C59434018C11A28E0228870
-:1095100001321204120C22808A4200DB23800022D6
-:10952000002969DD5F4CA46A5E4B1D8858236B439C
-:10953000E318DE1D013601239B0733431B681B061E
-:1095400015D15849009A01328A808A88C0464281E2
-:1095500008880130544EC046F080582068432118D6
-:10956000381C00F039FBF0880004001495E04D4BE6
-:1095700001352D042D0C1D808D4201DB00251D8041
-:109580000132120412149142CEDC81E0E188E289BA
-:10959000914218DAF97A00292FD0796C4904490CE4
-:1095A00079642AD0E289914227D8E1880131E180AB
-:1095B000E188C04681810123DB03786C18433A4E71
-:1095C000C046F08000E063E0E06A796C4B00591817
-:1095D00049014018C11F5939381C00F00FFBE06ADF
-:1095E000796C4A0052185201801801390904090C9B
-:1095F000603800F089FBB6E74AE061880131090470
-:10960000090C6180E289914200DB63800021002A1D
-:109610003EDD244CE46A234B5D886B005B195B01E3
-:10962000E318DE1D013601239B0733431B681B062D
-:1096300020D11C4EF1880131F180F188C046818132
-:1096400070880123DB03013018431749C046C880E6
-:109650006800401940012118381C00F0CFFA7188C9
-:109660004A0052185201F06A801800F04DFB0E4972
-:10967000C88879E70B4B01352D042D0C5D80954290
-:1096800001DB00255D800131090409148A42C2DC36
-:109690000189013101810020C043F8BC08BC184792
-:1096A0004C2B00804C2A0080C4662140F0B4061C7C
-:1096B0000123DB0333400124444F0020444A454D3D
-:1096C000D11D3931002B41D0E303F31A73D0EE8959
-:1096D0009E4271D3EE88002E6DD0ED6A5E1E73003F
-:1096E0009B195B01ED18AE683606360E032E02D0CC
-:1096F000CE890136CE814035AD8BAD00354E766AD0
-:10970000C0467051558901355581324EF26AD218E2
-:109710009060F26AD2189063F26AD218D063F26A4B
-:10972000D2181064F26AD2185064F26AD2189064A7
-:10973000F26AD218D064F0880138F080F088C04610
-:1097400088812449002839D14F8037E0002E38D94C
-:10975000AB89B34230D3AB88002B2CD05389013373
-:1097600053812A1CAD6A5823013E7343ED18AE683D
-:109770003606360E032E02D0CE890136CE81A86081
-:10978000956AED18A863956AED18E863956AED1877
-:109790002864956AED186864956AED18A864956A5E
-:1097A000EB18D8649088013890809088C046488132
-:1097B000002803D101E004E003E01780201CF0BC86
-:1097C0007047CA890132CA81F9E70000FFFF000033
-:1097D0000C2B00804C2A008000B50021416010490C
-:1097E0004A68002A10D1CA68002A04D0CA1D19325A
-:1097F0001279002A08D04A69002A0BD18861486191
-:1098000000F010F808BC18474A69002A02D18861A4
-:109810004861F7E78A69C04650608861F2E7000056
-:109820006C060080B0B52A48406900284CD0082258
-:10983000C1680A400027274BD91DB931002A11D031
-:109840000422254CC0460C61244CC0464C62244C7A
-:10985000C0468C62234CC046CC62234CC0460C638D
-:109860004F6312E00522214CC0460C61204CC046DB
-:109870004C62204CC0468C621F4CC046CC621F4CD0
-:10988000C0460C631E4CC0464C634024CC824F83C0
-:109890001C4F0021002A0CD98C0005196D6A7D40EF
-:1098A000E418FF340134656201319142F4D3102988
-:1098B00007D28A00D218FF320132576201311029D3
-:1098C000F7D3114900F022F8B0BC08BC18470000DB
-:1098D0006C060080ACAB20402801400001234567A6
-:1098E00089ABCDEFFEDCBA987654321020014000EF
-:1098F00067452301EFCDAB8998BADCFE1032547670
-:10990000C3D2E1F03636363630802040B0B50F1C79
-:10991000154DE91DC931154C231C154A0020FCF7D3
-:1099200044FBE91DFF311E31231C0D1C114A01208F
-:10993000FCF73BFB291C231C0E4A0020FCF735FBDF
-:10994000391C231C0C4A0120FCF72FFB00210B487B
-:10995000C21D193251710121FF3001304162081CD2
-:10996000B0BC08BC18470000ACAB20407508FFFF36
-:109970002800030040000200140007006C0600806D
-:10998000F0B5374A506901239B0708301843006837
-:109990000106090E334B012949D11F68191C324BAE
-:1099A0009F4204D1FFF73EFFF0BC08BC18470023DC
-:1099B0009F00CC595569EF193C610133052BF7D352
-:1099C000000A0002022318435369C0469860506998
-:1099D0000823C2681340254FFA1DB932002B02D06C
-:1099E0000423234C01E00523224CC046146140248B
-:1099F000D48200245483204C0022002B0CD99500E3
-:109A00004619766A6640ED19FF3501356E620132FE
-:109A10009A42F4D3102A07D29300DB19FF330133A3
-:109A20005C620132102AF7D3FFF770FFBCE7002118
-:109A30008F00DC595569EF197C6201310529F7D394
-:109A4000000A0002032318435169C0468860506928
-:109A50004068C04650610948FCF7A4FAA4E700003A
-:109A60006C0600803080204067452301ACAB20406D
-:109A700028014000200140005C5C5C5C1131FFFF6C
-:109A8000F0B5071C3B483C4C08212060A180002019
-:109A90002081E18060813948C046E0603848C04696
-:109AA00020613848C04660613748C046A0613748E9
-:109AB000C046E0613648C04620623648C046606213
-:109AC0003548C046A0623548C046E0623448C046CA
-:109AD00020633448C04660633348C046A0633348BF
-:109AE000C046E0633248C04620643248C0466064E5
-:109AF0003148C046A0643148C046E0643048C046A2
-:109B000020653049C868020489694A40E31D7933F9
-:109B10000904C943C0434840E11DB931DA63086014
-:109B2000294D211C2B1C294A0020FCF73EFA284A0B
-:109B3000E11DB53101202B1C0E1CFCF736FA244A1E
-:109B40000020311C2B1CFCF730FAE11D4D312B1C81
-:109B5000204A0120FCF729FAE01D5D300168002948
-:109B6000FCD0606DC0463865206EC0467865F0BC9C
-:109B700008BC1847800008008CB92040818148BD8E
-:109B80007956238C930C82951D0E12CF9B3BC0E916
-:109B9000E6557C8299F67802D1D72573728C331002
-:109BA000F703F1426C9B4AA7828E23A990B1828E63
-:109BB000DC3FFB2900622245882BF1851261D173BD
-:109BC0006EB11116088320407508FFFF5400030092
-:109BD000080002001400030080B50F1C391C00F0BF
-:109BE00033F8381CFFF74CFF03480189013101812C
-:109BF00080BC08BC184700000C2B008090B5041CEA
-:109C00000F1C201C391C00F01FF8E068010EFF2219
-:109C100012040240120A1143FF22120202401202F1
-:109C200011430006084338652069C04678656069BD
-:109C3000C046B865034801890131018190BC08BC68
-:109C4000184700000C2B008090B5002293001F18CD
-:109C5000BF695B185F620132052AF7D3077AFB08F8
-:109C600003D30023920052181362076BC0468F6320
-:109C7000C76AC046CF63876BC0460F64476BC04658
-:109C80004F64076CC0468F64C26BC046CA64C2880A
-:109C9000C0460A80827A1206037A1B041A43C388DC
-:109CA0001B021A43437ADB071A438A60171C837A24
-:109CB0005A0805D314221C1CA30802D2152200E066
-:109CC0000022007A430810D3C00802D38820104332
-:109CD00001E0802010433A0A120201231A43C860AF
-:109CE0008A60081CFFF778FD05E0380A00020323AC
-:109CF00018438860CA60034801890131018190BC22
-:109D000008BC18470C2B0080F0B4026D144C151CD5
-:109D1000E769BD40131C266AF3405D402E1C456D6B
-:109D2000BD406E402B1C351CFD402F1CBB00656ADE
-:109D3000EB58002B08D0236901379F4200D300273E
-:109D4000BE00AE59002EF7D1A469A2401143054BC5
-:109D50001943BA00A95040308783F0BC7047000017
-:109D60004C2A00800000008080B4002200230029DB
-:109D700005D907787A40013001338B42F9D3D043BB
-:109D80000006000E80BC7047F0B5071C0024FF26BB
-:109D90000936201C00F09AF800F0B8F9051C00F014
-:109DA000C7FA3D70281C01370134B442F1D3F0BC2E
-:109DB00008BC184780B500F093F800F0A7F9071C1D
-:109DC00000F0B6FA380AF6D380BC08BC1847F3B5E1
-:109DD00082B002984102532000F064F800F0A8FA23
-:109DE000FFF7E8FF0024002001902E2000900025BE
-:109DF00000270298012804D10098844201D300264C
-:109E000009E00198411C019100F060F800F07EF932
-:109E1000061C00F08DFAF800864035430134013706
-:109E2000042FE6D3039920C10391FF2309339C42F9
-:109E3000DDD304B0F0BC08BC1847F0B5041C0F1CFF
-:109E4000012C2AD01648C06F4023016819430160D5
-:109E5000002620CFB100842000F024F8281C00F058
-:109E6000DFF9280A00F0DCF9280C00F0D9F9280EF7
-:109E700000F0D6F900F05CFA0136422EE9D3610217
-:109E8000832000F00FF800F053FAFFF793FF044827
-:109E9000C06F4023016899430160F0BC08BC1847BB
-:109EA000680E008090B5041C0F1C00F059FA201CAD
-:109EB00000F0B6F9380C00F0B3F9380A00F0B0F948
-:109EC000381C00F0ADF990BC08BC184700B5011C67
-:109ED0005420FFF7E7FF002000F0A2F908BC184764
-:109EE00000B500F03DFA572000F09AF908BC184779
-:109EF00090B5084FFA6F202314689C431460231C0C
-:109F0000FFF765FFF86F202301681943016090BCDB
-:109F100008BC1847680E008090B5084FFA6F2023E0
-:109F200014689C431460231CFFF787FFF86F2023FD
-:109F300001681943016090BC08BC1847680E008096
-:109F4000F0B5041C0F1C184EF06F202301689943D4
-:109F5000016061025320FFF7A5FF00F0E9F9FFF768
-:109F600029FFF81D0530012C03D1222F01D3002732
-:109F70000FE0441CFFF7AAFF00F0C8F8071C00F030
-:109F8000D7F9201CFFF7A2FF00F0C0F8051C00F075
-:109F9000CFF9F06F2023016819430160280238438C
-:109FA000F0BC08BC18470000680E0080F0B5C2B0D5
-:109FB000141C0D1C071C012F2FD07902194EF06FB5
-:109FC000202302689A4302605320FFF76BFF00F0E2
-:109FD000AFF9FFF7EFFE6846FFF7D6FE6A46E81DC9
-:109FE00005301454210A68444170684600990C30C9
-:109FF000FFF7BAFE02AB18700020587068460C21BB
-:10A00000FFF7B2FE02AB58706946381CFFF715FF28
-:10A01000F06F202301681943016042B0F0BC08BC16
-:10A0200018470000680E0080FFB5C2B0071C012F62
-:10A0300001D1012036E06B460020C44310C301303B
-:10A040004228FBD368460C30031C0024002A0AD99E
-:10A050000E88C04606700E883612467002300231F5
-:10A0600002349442F4D30092181C111CFFF77CFEBA
-:10A07000041C0020019002AB1C7058709D70684653
-:10A080000C21FFF771FE02AB5870459B1D062D0E8B
-:10A09000AC4203D16946381CFFF73EFF0120AC42B9
-:10A0A00000D1002046B0F0BC08BC1847B0B5C2B023
-:10A0B0000F1C4102144CE06F202302689A43026097
-:10A0C0005320FFF7EFFE00F033F9FFF773FE684609
-:10A0D000FFF75AFEE06F20230168194302AD0160CB
-:10A0E0006D78002402AB5C7068460C21FFF73CFEE3
-:10A0F000A84202D10098874201D3201C00E0012031
-:10A1000042B0B0BC08BC1847680E0080FC466047EF
-:10A110000000A0E3B4229FE5B4329FE50110A0E364
-:10A12000001082E5001082E50010A0E3001082E537
-:10A13000001082E5001093E5810380E10110A0E3A7
-:10A14000001082E5001082E50010A0E3001082E517
-:10A15000001082E5001093E5010380E10110A0E307
-:10A16000001082E5001082E50010A0E3001082E5F7
-:10A17000001082E5001093E5810280E10110A0E368
-:10A18000001082E5001082E50010A0E3001082E5D7
-:10A19000001082E5001093E5010280E10110A0E3C8
-:10A1A000001082E5001082E50010A0E3001082E5B7
-:10A1B000001082E5001093E5810180E10110A0E329
-:10A1C000001082E5001082E50010A0E3001082E597
-:10A1D000001082E5001093E5010180E10110A0E389
-:10A1E000001082E5001082E50010A0E3001082E577
-:10A1F000001082E5001093E5810080E10110A0E3EA
-:10A20000001082E5001082E50010A0E3001082E556
-:10A21000001082E5001093E5010080E11EFF2FE1B0
-:10A22000FC466047A4219FE5A8319FE5A013A0E16B
-:10A23000001083E50110A0E3001082E5001082E524
-:10A240000010A0E3001082E5001082E52013A0E1D9
-:10A25000001083E50110A0E3001082E5001082E504
-:10A260000010A0E3001082E5001082E5A012A0E13A
-:10A27000001083E50110A0E3001082E5001082E5E4
-:10A280000010A0E3001082E5001082E52012A0E19A
-:10A29000001083E50110A0E3001082E5001082E5C4
-:10A2A0000010A0E3001082E5001082E5A011A0E1FB
-:10A2B000001083E50110A0E3001082E5001082E5A4
-:10A2C0000010A0E3001082E5001082E52011A0E15B
-:10A2D000001083E50110A0E3001082E5001082E584
-:10A2E0000010A0E3001082E5001082E5A010A0E1BC
-:10A2F000001083E50110A0E3001082E5001082E564
-:10A300000010A0E3001082E5001082E50010A0E13B
-:10A31000001083E50110A0E3001082E5001082E543
-:10A320000010A0E3001082E5001082E51EFF2FE17F
-:10A33000FC466047A0309FE50110A0E3001083E5D4
-:10A34000001083E5001083E5001083E5001083E52D
-:10A35000001083E5001083E5001083E51EFF2FE168
-:10A36000FC46604770309FE50010A0E3001083E5D5
-:10A37000001083E5001083E5001083E5001083E5FD
-:10A38000001083E5001083E5001083E51EFF2FE138
-:10A39000FC46604734209FE53C309FE50010A0E379
-:10A3A000001082E5001082E50110A0E3001083E5B3
-:10A3B000001083E5001083E5001083E5001083E5BD
-:10A3C000001083E5001083E5001083E51EFF2FE1F8
-:10A3D000F80018400401184000011840FC00184023
-:10A3E00080B500F00CF80027381C00F047F8781C06
-:10A3F00007043F0C0C2FF7DD80BC08BC18471D4834
-:10A4000002681D498B69D218026002668A6A436835
-:10A410009B184360934202D2826801328260C26814
-:10A420000B6AD218C2604269CB68D2184261C26915
-:10A430008B68D218C26102690B69D2180261826905
-:10A440000B68D2188261026BCB69D21802634A6A28
-:10A45000436B9B184363934202D2826B0132826347
-:10A46000C26B4B69D218C263026CC96A511801648D
-:10A4700070470000A42A00800008144088B569468F
-:10A4800000F017F881080AD00020002907D900221F
-:10A490008300009FC046FA5001308842F8D388BC40
-:10A4A00008BC184700B500F004F80004000C08BC14
-:10A4B0001847002200280AD001280AD002280CD010
-:10A4C000032802D107481C220860101C7047064868
-:10A4D00004E0064850220860F7E705486822086053
-:10A4E000F3E7000008832040A42A00800C2B0080A2
-:10A4F000A082204080B40322C280154AC0468260F8
-:10A50000144A12880132C2600020134A135CC0460C
-:10A510000B70013001310828F8D320220A70013174
-:10A5200000200E4B1F5CC0460F700130013108281F
-:10A53000F8D30A7001310020094A135CC0460B7041
-:10A54000013001310828F8D30020087080BC704722
-:10A5500008100003680E00807C04008085040080E1
-:10A560008E04008000B501230A48C11D89314B705B
-:10A5700000220A7064218030C182018343837D21DF
-:10A58000C9008183C28304480122002100F08EFBB0
-:10A5900008BC1847680E0080B522FFFF00B5FFF722
-:10A5A000E1FF13480222002100F080FB0123D84282
-:10A5B0000AD11048C11D3931CA880132CA80817957
-:10A5C00001318171FDF770F90B48C068012805D190
-:10A5D0000A487D22D200002100F068FB0848FBF702
-:10A5E000E1FC08482822002100F060FB08BC184765
-:10A5F0007921FFFFA0822040680E0080A57B2140CA
-:10A60000952CFFFF5903FFFF00B510200F49C046EE
-:10A6100008600F4A0F486421FBF7C6FC0E48012270
-:10A62000120401680A400821002A05D10268120CB0
-:10A6300007D10068800A04D30848C046C16008BC3E
-:10A6400018470748C0460164F9E70000000000B061
-:10A65000A555FFFF7C290080000010404001180034
-:10A6600000000080F8B527480122120401680A4062
-:10A670000721002A05D10268120C06D10068800A61
-:10A6800003D32148C046C16002E02048C0460164AF
-:10A690001F48FBF787FC1F48C16BFF29FCD1816B6A
-:10A6A000426B161C0F1C1C4C102360691843606120
-:10A6B000A16999431D04A161E860A069C0462861B1
-:10A6C000164A17496420FBF76FFC164AC0460092F1
-:10A6D000154B0020391C321CFBF76EFC1348C16877
-:10A6E0000829FCD11248FBF75DFC102360699843F0
-:10A6F0006061E8600120E3231B01E118C871F8BC28
-:10A7000008BC1847000010404001180000000080FD
-:10A710000402FFFF00011840680E00802055FFFF73
-:10A72000B5B621406400300244802040400118400A
-:10A73000F401FFFF00B5FDF701FF0648FBF732FC0F
-:10A74000FDF7D6FEFEF704F8FEF716F8FEF724F83C
-:10A7500008BC18479103FFFF90B5FDF76BFC344F21
-:10A760000024F968F81D793001290FD13149C0461C
-:10A77000F9673149C04601603049C0460C604C6001
-:10A780008C60CC600C614C618C6104E0F91D7D3102
-:10A79000F96712C008380068602301681943016036
-:10A7A000F86F2023016819430160F86F40230168A6
-:10A7B0009943016000F054F8FDF74EFC00F05EF99B
-:10A7C000FDF773F8FFF70CFEFDF72EFEFDF7B6FD63
-:10A7D000FDF7C2FEFDF754FDFDF70AFDFDF794FD00
-:10A7E00000F01AFAFDF79CFFFDF70AFFFDF7D2FE15
-:10A7F000FDF73CFCFBF7DCFAFFF79CFF71235B01E4
-:10A80000F8180472447207235B02F8180463F868AE
-:10A81000012802D1A820FEF7B1FD0948C0464462D4
-:10A8200000F018FA0748FBF7BDFB90BC08BC1847BE
-:10A83000680E008000011140040111400001110068
-:10A84000C0001800158F214000B50448FBF7AAFB93
-:10A85000FDF75EFFFDF724FC08BC18471599214061
-:10A86000FA210348C046416240214162704700001E
-:10A87000C000180007484169074B194341618269CC
-:10A880009A43826101221205D1608069C04610613D
-:10A8900070470000680E0080FEAF9A1000B50248B5
-:10A8A000FBF780FB08BC1847C857FFFFF0B5244CE6
-:10A8B00001210904206801400920224E224D00296F
-:10A8C00005D12168090C04D12168890A01D3F060FF
-:10A8D00000E028641D48FBF765FB1D4F1D49886992
-:10A8E00001308861387A002802D1787A00281FD098
-:10A8F0001948FBF757FB1948FBF754FB0028FAD11E
-:10A90000387A002802D01648FBF74CFB01210904D5
-:10A91000206801401420002905D12168090C04D1C8
-:10A920002168890A01D3F06001E02864FFE7FEE7AF
-:10A93000FFF765FD0B48FBF735FBFFF7AFFFCDE7F2
-:10A940000000104040011800000000800402FFFFDA
-:10A95000881C008008832040F401FFFFB507FFFF3B
-:10A960000000FFFF999F21400020074A01210905AF
-:10A970005061C860D061C8610323DB04034A012130
-:10A98000D1635860FCE70000680E0080C00018002A
-:10A9900080B5C0B0012200210A20FCF7D1FF071CBE
-:10A9A000FF2F28D06946FF22381C0132FDF754F9E9
-:10A9B000FF23013398421BD10D98000918D3381C8E
-:10A9C000FDF78DF80E4901221204086802400D4877
-:10A9D00005D10A68120C06D10968890A03D30A490D
-:10A9E000C046C86002E00949C0460864FFF7BCFFE2
-:10A9F000381CFDF774F840B080BC08BC1847000054
-:10AA00000000104007800000400118000000008096
-:10AA100000B5174901221204086802400620002AE6
-:10AA200005D10A68120C06D10968890A03D31149B5
-:10AA3000C046C86002E01049C04608640320FEF723
-:10AA4000D3FCFBF70DFF01231843FBF7E7FFFFF7EC
-:10AA500083FEFFF79DFFFFF705FEFFF7F5FEFFF70B
-:10AA600009FFFFF79BFDFFF721FF08BC1847000017
-:10AA7000000010404001180000000080F0B4464A79
-:10AA80000121C903454D1923DB01EC18A161288878
-:10AA90004004434BC018871A0420AF60414EC046A3
-:10AAA000B0610820C8234343BB4221D941003D4E39
-:10AAB000C0463161B66920239B1B3A4EC046F36104
-:10AAC000103B33628B00FF1A4008814217D3B82332
-:10AAD0004343BB4208D9411E324BC0469981D981BC
-:10AAE0004000023858610AE001308142EFD206E0AE
-:10AAF0002C4EB3690133B36140008842D2D92A4950
-:10AB00000020A3699B0807D0284B8700CB51A76979
-:10AB1000BF0801308742F8D82249C0468A628C8932
-:10AB200058206043871800200022002C0ADD58239B
-:10AB300043438C6AE31801300004000C9A608B894F
-:10AB40008342F4DCCF62CC89600000194001C71950
-:10AB50000020002C0BDD43001B185B01CC6AE318BE
-:10AB600001300004000C9A60CB898342F3DC4F6211
-:10AB700000200B69002B07D987004B6AC046DA51C9
-:10AB80000B6901308342F7D8496A800008180438FD
-:10AB90002861F0BC70470000B0BE2140680E008004
-:10ABA000000020404C2A00800000204000ADDE0064
-:10ABB0000A4801231B06416999431A094161D16082
-:10ABC0000021A122520391611B23DB01C018816186
-:10ABD000012000065905086070470000680E0080DB
-:10ABE00080B4021C0B481B23DB01C3189A610123AC
-:10ABF0001B0642691A43426187699F4301231B0573
-:10AC00008761DA608069C0461861A12040038161D4
-:10AC100080BC7047680E008080B5FFF7C9FF002038
-:10AC200000F020F800200949002203015F183323B7
-:10AC30009B01FB189A6201300B28F6D304480122CD
-:10AC4000002100F033F880BC08BC1847680E008073
-:10AC50001D3EFFFF00B5024800F004F808BC18478D
-:10AC6000A861000080B4012212050F4BA121490305
-:10AC700000280ED0C861181C59695301194341615D
-:10AC800087699F438761D1608069C046106180BC3D
-:10AC90007047181C5F6901235B069F434761D760BB
-:10ACA0000020C861F3E70000680E0080B0B4071C04
-:10ACB0000020174C03011D1933239B01EB189D6ADB
-:10ACC000BD4205D11D6B954202D1DB6A8B421CD07F
-:10ACD00001300B28EED3002003011D1933239B0103
-:10ACE000EB189B6A002B09D103011C1933239B012C
-:10ACF000E3181A63D9625A639F6202E001300B289D
-:10AD0000EAD30B2801D10020C043B0BC704700003B
-:10AD1000680E008090B4011C00220120164F01E053
-:10AD2000002A07D10301DC1933239B01E3189B6937
-:10AD30008B4211D10201D21933239B01D218936A9D
-:10AD4000C0469361D36AC046D361136BC046136299
-:10AD5000536BC0465362012201300B28E0D3074BEE
-:10AD6000002A02D19A688A4203D10021996090BCDE
-:10AD700070470020C043FAE7680E0080E81B00809F
-:10AD80000B2817DA0C4901235B068A691343012259
-:10AD900012058B6113610001401833239B01C01819
-:10ADA000036BC0464363530188699843886110610F
-:10ADB000012070470020FCE7680E008090B4084A2C
-:10ADC000D0690021074FD369834202D9FC1A2018A9
-:10ADD00000E0C01A0918181CB942F4D990BC704799
-:10ADE00000201440A861000090B5071C0024002F2B
-:10ADF00004D3FFF7E3FF0134BC42FAD990BC08BC8E
-:04AE000018470000EF
-:00000001FF
-/* ver 03.001.008 */
-/*
- * Copyright 1999-2004 3Com Corporation. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms of the 3c990img.h
- * microcode software are permitted provided that the following conditions
- * are met:
- * 1. Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of 3Com may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY 3COM ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * USER ACKNOWLEDGES AND AGREES THAT PURCHASE OR USE OF THE 3c990img.h
- * MICROCODE SOFTWARE WILL NOT CREATE OR GIVE GROUNDS FOR A LICENSE BY
- * IMPLICATION, ESTOPPEL, OR OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS
- * (PATENT, COPYRIGHT, TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT)
- * EMBODIED IN ANY OTHER 3COM HARDWARE OR SOFTWARE EITHER SOLELY OR IN
- * COMBINATION WITH THE 3c990img.h MICROCODE SOFTWARE
- */
diff --git a/firmware/Makefile b/firmware/Makefile
index fa3e81c2a97b..fa0808853883 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -9,144 +9,6 @@ fwabs := $(addprefix $(srctree)/,$(filter-out /%,$(fwdir)))$(filter /%,$(fwdir))
fw-external-y := $(subst $(quote),,$(CONFIG_EXTRA_FIRMWARE))
-# There are three cases to care about:
-# 1. Building kernel with CONFIG_FIRMWARE_IN_KERNEL=y -- $(fw-shipped-y) should
-# include the firmware files to include, according to .config
-# 2. 'make modules_install', which will install firmware for modules, and
-# _also_ for the in-kernel drivers when CONFIG_FIRMWARE_IN_KERNEL=n
-# 3. 'make firmware_install', which installs all firmware, unconditionally.
-
-# For the former two cases we want $(fw-shipped-y) and $(fw-shipped-m) to be
-# accurate. In the latter case it doesn't matter -- it'll use $(fw-shipped-all).
-# But be aware that the config file might not be included at all.
-
-ifdef CONFIG_ACENIC_OMIT_TIGON_I
-acenic-objs := acenic/tg2.bin
-fw-shipped- += acenic/tg1.bin
-else
-acenic-objs := acenic/tg1.bin acenic/tg2.bin
-endif
-fw-shipped-$(CONFIG_ACENIC) += $(acenic-objs)
-fw-shipped-$(CONFIG_ADAPTEC_STARFIRE) += adaptec/starfire_rx.bin \
- adaptec/starfire_tx.bin
-fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin
-fw-shipped-$(CONFIG_ATM_AMBASSADOR) += atmsar11.fw
-fw-shipped-$(CONFIG_BNX2X) += bnx2x/bnx2x-e1-6.2.9.0.fw \
- bnx2x/bnx2x-e1h-6.2.9.0.fw \
- bnx2x/bnx2x-e2-6.2.9.0.fw
-fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-6.2.1a.fw \
- bnx2/bnx2-rv2p-09-6.0.17.fw \
- bnx2/bnx2-rv2p-09ax-6.0.17.fw \
- bnx2/bnx2-mips-06-6.2.1.fw \
- bnx2/bnx2-rv2p-06-6.0.15.fw
-fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin
-fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
- cxgb3/t3c_psram-1.1.0.bin \
- cxgb3/ael2005_opt_edc.bin \
- cxgb3/ael2005_twx_edc.bin \
- cxgb3/ael2020_twx_edc.bin
-fw-shipped-$(CONFIG_DRM_MGA) += matrox/g200_warp.fw matrox/g400_warp.fw
-fw-shipped-$(CONFIG_DRM_R128) += r128/r128_cce.bin
-fw-shipped-$(CONFIG_DRM_RADEON) += radeon/R100_cp.bin radeon/R200_cp.bin \
- radeon/R300_cp.bin radeon/R420_cp.bin \
- radeon/RS690_cp.bin radeon/RS600_cp.bin \
- radeon/R520_cp.bin \
- radeon/R600_pfp.bin radeon/R600_me.bin \
- radeon/RV610_pfp.bin radeon/RV610_me.bin \
- radeon/RV630_pfp.bin radeon/RV630_me.bin \
- radeon/RV620_pfp.bin radeon/RV620_me.bin \
- radeon/RV635_pfp.bin radeon/RV635_me.bin \
- radeon/RV670_pfp.bin radeon/RV670_me.bin \
- radeon/RS780_pfp.bin radeon/RS780_me.bin \
- radeon/RV770_pfp.bin radeon/RV770_me.bin \
- radeon/RV730_pfp.bin radeon/RV730_me.bin \
- radeon/RV710_pfp.bin radeon/RV710_me.bin
-fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin
-fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
-fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
- e100/d102e_ucode.bin
-fw-shipped-$(CONFIG_MYRI_SBUS) += myricom/lanai.bin
-fw-shipped-$(CONFIG_PCMCIA_PCNET) += cis/LA-PCM.cis cis/PCMLM28.cis \
- cis/DP83903.cis cis/NE2K.cis \
- cis/tamarack.cis cis/PE-200.cis \
- cis/PE520.cis
-fw-shipped-$(CONFIG_PCMCIA_3C589) += cis/3CXEM556.cis
-fw-shipped-$(CONFIG_PCMCIA_3C574) += cis/3CCFEM556.cis
-fw-shipped-$(CONFIG_SERIAL_8250_CS) += cis/MT5634ZLX.cis cis/RS-COM-2P.cis \
- cis/COMpad2.cis cis/COMpad4.cis \
- cis/SW_555_SER.cis cis/SW_7xx_SER.cis \
- cis/SW_8xx_SER.cis
-fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin
-fw-shipped-$(CONFIG_SCSI_ADVANSYS) += advansys/mcode.bin advansys/38C1600.bin \
- advansys/3550.bin advansys/38C0800.bin
-fw-shipped-$(CONFIG_SCSI_QLOGIC_1280) += qlogic/1040.bin qlogic/1280.bin \
- qlogic/12160.bin
-fw-shipped-$(CONFIG_SCSI_QLOGICPTI) += qlogic/isp1000.bin
-fw-shipped-$(CONFIG_INFINIBAND_QIB) += qlogic/sd7220.fw
-fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp
-fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \
- ess/maestro3_assp_minisrc.fw
-fw-shipped-$(CONFIG_SND_SB16_CSP) += sb16/mulaw_main.csp sb16/alaw_main.csp \
- sb16/ima_adpcm_init.csp \
- sb16/ima_adpcm_playback.csp \
- sb16/ima_adpcm_capture.csp
-fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \
- yamaha/ds1e_ctrl.fw
-fw-shipped-$(CONFIG_SND_WAVEFRONT) += yamaha/yss225_registers.bin
-fw-shipped-$(CONFIG_TEHUTI) += tehuti/bdx.bin
-fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \
- tigon/tg3_tso5.bin
-fw-shipped-$(CONFIG_TYPHOON) += 3com/typhoon.bin
-fw-shipped-$(CONFIG_USB_EMI26) += emi26/loader.fw emi26/firmware.fw \
- emi26/bitstream.fw
-fw-shipped-$(CONFIG_USB_EMI62) += emi62/loader.fw emi62/bitstream.fw \
- emi62/spdif.fw emi62/midi.fw
-fw-shipped-$(CONFIG_USB_KAWETH) += kaweth/new_code.bin kaweth/trigger_code.bin \
- kaweth/new_code_fix.bin \
- kaweth/trigger_code_fix.bin
-ifdef CONFIG_FIRMWARE_IN_KERNEL
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_MPR) += keyspan/mpr.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA18X) += keyspan/usa18x.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19) += keyspan/usa19.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19QI) += keyspan/usa19qi.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19QW) += keyspan/usa19qw.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA19W) += keyspan/usa19w.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28) += keyspan/usa28.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XA) += keyspan/usa28xa.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28XB) += keyspan/usa28xb.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA28X) += keyspan/usa28x.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49W) += keyspan/usa49w.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_USA49WLC) += keyspan/usa49wlc.fw
-else
-fw-shipped- += keyspan/mpr.fw keyspan/usa18x.fw keyspan/usa19.fw \
- keyspan/usa19qi.fw keyspan/usa19qw.fw keyspan/usa19w.fw \
- keyspan/usa28.fw keyspan/usa28xa.fw keyspan/usa28xb.fw \
- keyspan/usa28x.fw keyspan/usa49w.fw keyspan/usa49wlc.fw
-endif
-fw-shipped-$(CONFIG_USB_SERIAL_TI) += ti_3410.fw ti_5052.fw \
- mts_cdma.fw mts_gsm.fw mts_edge.fw
-fw-shipped-$(CONFIG_USB_SERIAL_EDGEPORT) += edgeport/boot.fw edgeport/boot2.fw \
- edgeport/down.fw edgeport/down2.fw
-fw-shipped-$(CONFIG_USB_SERIAL_EDGEPORT_TI) += edgeport/down3.bin
-fw-shipped-$(CONFIG_USB_SERIAL_WHITEHEAT) += whiteheat_loader.fw whiteheat.fw \
- # whiteheat_loader_debug.fw
-fw-shipped-$(CONFIG_USB_SERIAL_KEYSPAN_PDA) += keyspan_pda/keyspan_pda.fw
-fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda/xircom_pgs.fw
-fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw
-fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin
-fw-shipped-$(CONFIG_YAM) += yam/1200.bin yam/9600.bin
-
-fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-)
-
-quiet_cmd_ihex = IHEX $@
- cmd_ihex = $(OBJCOPY) -Iihex -Obinary $< $@
-
-quiet_cmd_ihex2fw = IHEX2FW $@
- cmd_ihex2fw = $(objtree)/$(obj)/ihex2fw $< $@
-
-quiet_cmd_h16tofw = H16TOFW $@
- cmd_h16tofw = $(objtree)/$(obj)/ihex2fw -w $< $@
-
quiet_cmd_fwbin = MK_FW $@
cmd_fwbin = FWNAME="$(patsubst firmware/%.gen.S,%,$@)"; \
FWSTR="$(subst /,_,$(subst .,_,$(subst -,_,$(patsubst \
@@ -179,46 +41,14 @@ wordsize_deps := $(wildcard include/config/64bit.h include/config/32bit.h \
include/config/x86_32.h include/config/x86_64.h \
firmware/Makefile)
-$(patsubst %,$(obj)/%.gen.S, $(fw-shipped-y)): %: $(wordsize_deps)
- $(call cmd,fwbin,$(patsubst %.gen.S,%,$@))
$(patsubst %,$(obj)/%.gen.S, $(fw-external-y)): %: $(wordsize_deps) \
include/config/extra/firmware/dir.h
$(call cmd,fwbin,$(fwabs)/$(patsubst $(obj)/%.gen.S,%,$@))
# The .o files depend on the binaries directly; the .S files don't.
-$(patsubst %,$(obj)/%.gen.o, $(fw-shipped-y)): %.gen.o: %
$(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/%
-# .ihex is used just as a simple way to hold binary files in a source tree
-# where binaries are frowned upon. They are directly converted with objcopy.
-$(obj)/%: $(obj)/%.ihex
- $(call cmd,ihex)
-
-# Don't depend on ihex2fw if we're installing and it already exists.
-# Putting it after | in the dependencies doesn't seem sufficient when
-# we're installing after a cross-compile, because ihex2fw has dependencies
-# on stuff like /usr/lib/gcc/ppc64-redhat-linux/4.3.0/include/stddef.h and
-# thus wants to be rebuilt. Which it can't be, if the prebuilt kernel tree
-# is exported read-only for someone to run 'make install'.
-ifeq ($(INSTALL):$(wildcard $(obj)/ihex2fw),install:$(obj)/ihex2fw)
-ihex2fw_dep :=
-else
-ihex2fw_dep := $(obj)/ihex2fw
-endif
-
-# .HEX is also Intel HEX, but where the offset and length in each record
-# is actually meaningful, because the firmware has to be loaded in a certain
-# order rather than as a single binary blob. Thus, we convert them into our
-# more compact binary representation of ihex records (<linux/ihex.h>)
-$(obj)/%.fw: $(obj)/%.HEX $(ihex2fw_dep)
- $(call cmd,ihex2fw)
-
-# .H16 is our own modified form of Intel HEX, with 16-bit length for records.
-$(obj)/%.fw: $(obj)/%.H16 $(ihex2fw_dep)
- $(call cmd,h16tofw)
-
obj-y += $(patsubst %,%.gen.o, $(fw-external-y))
-obj-$(CONFIG_FIRMWARE_IN_KERNEL) += $(patsubst %,%.gen.o, $(fw-shipped-y))
ifeq ($(KBUILD_SRC),)
# Makefile.build only creates subdirectories for O= builds, but external
@@ -226,13 +56,8 @@ ifeq ($(KBUILD_SRC),)
_dummy := $(foreach d,$(addprefix $(obj)/,$(dir $(fw-external-y))), $(shell [ -d $(d) ] || mkdir -p $(d)))
endif
-# Remove .S files and binaries created from ihex
-# (during 'make clean' .config isn't included so they're all in $(fw-shipped-))
-targets := $(fw-shipped-) $(patsubst $(obj)/%,%, \
- $(shell find $(obj) -name \*.gen.S 2>/dev/null))
-
+targets := $(patsubst $(obj)/%,%, \
+ $(shell find $(obj) -name \*.gen.S 2>/dev/null))
# Without this, built-in.o won't be created when it's empty, and the
# final vmlinux link will fail.
obj- := dummy
-
-hostprogs-y := ihex2fw
diff --git a/firmware/README.AddingFirmware b/firmware/README.AddingFirmware
deleted file mode 100644
index bcb5f46aff83..000000000000
--- a/firmware/README.AddingFirmware
+++ /dev/null
@@ -1,45 +0,0 @@
-
- DO NOT ADD FIRMWARE TO THIS DIRECTORY.
- ======================================
-
-This directory is only here to contain firmware images extracted from old
-device drivers which predate the common use of request_firmware().
-
-As we update those drivers to use request_firmware() and keep a clean
-separation between code and firmware, we put the extracted firmware
-here.
-
-This directory is _NOT_ for adding arbitrary new firmware images. The
-place to add those is the separate linux-firmware repository:
-
- git://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
-
-That repository contains all these firmware images which have been
-extracted from older drivers, as well various new firmware images which
-we were never permitted to include in a GPL'd work, but which we _have_
-been permitted to redistribute under separate cover.
-
-To submit firmware to that repository, please send either a git binary
-diff or preferably a git pull request to:
- linux-firmware@kernel.org
-and also cc: to related mailing lists.
-
-Your commit should include an update to the WHENCE file clearly
-identifying the licence under which the firmware is available, and
-that it is redistributable. If the licence is long and involved, it's
-permitted to include it in a separate file and refer to it from the
-WHENCE file.
-And if it were possible, a changelog of the firmware itself.
-
-Ideally, your commit should contain a Signed-Off-By: from someone
-authoritative on the licensing of the firmware in question (i.e. from
-within the company that owns the code).
-
-
-WARNING:
-=======
-
-Don't send any "CONFIDENTIALITY STATEMENT" in your e-mail, patch or
-request. Otherwise your firmware _will never be accepted_.
-
-Maintainers are really busy, so don't expect a prompt reply.
diff --git a/firmware/WHENCE b/firmware/WHENCE
deleted file mode 100644
index de6f22e008f1..000000000000
--- a/firmware/WHENCE
+++ /dev/null
@@ -1,854 +0,0 @@
- **********
- * WHENCE *
- **********
-
-This file attempts to document the origin and licensing information,
-if known, for each piece of firmware distributed for use with the Linux
-kernel.
-
---------------------------------------------------------------------------
-
-Driver: ambassador -- Madge Ambassador (Collage PCI 155 Server) ATM NIC.
-
-File: firmware/atmsar11.fw
-
-Licence: Allegedly GPLv2+, but no source visible. Marked:
-
- Madge Ambassador ATM Adapter microcode.
- Copyright (C) 1995-1999 Madge Networks Ltd.
-
- This microcode data is placed under the terms of the GNU General
- Public License. The GPL is contained in /usr/doc/copyright/GPL on a
- Debian system and in the file COPYING in the Linux kernel source.
-
- We would prefer you not to distribute modified versions without
- consultation and not to ask for assembly/other microcode source.
-
---------------------------------------------------------------------------
-
-Driver: korg1212 -- Korg 1212 IO audio device
-
-File: korg/k1212.dsp
-
-Licence: Unknown
-
-Found in alsa-firmware package in hex form; no licensing information.
-
---------------------------------------------------------------------------
-
-Driver: maestro3 -- ESS Allegro Maestro3 audio device
-
-File: ess/maestro3_assp_kernel.fw
-File: ess/maestro3_assp_minisrc.fw
-
-Licence: Unknown
-
-Found in alsa-firmware package in hex form with a comment claiming to
-be GPLv2+, but without source -- and with another comment saying "ESS
-drops binary dsp code images on our heads, but we don't get to see
-specs on the dsp."
-
---------------------------------------------------------------------------
-
-Driver: ymfpci -- Yamaha YMF724/740/744/754 audio devices
-
-File: yamaha/ds1_ctrl.fw
-File: yamaha/ds1_dsp.fw
-File: yamaha/ds1e_ctrl.fw
-
-Licence: Unknown
-
-Found alsa-firmware package in hex form, with the following comment:
- Copyright (c) 1997-1999 Yamaha Corporation. All Rights Reserved.
-
---------------------------------------------------------------------------
-
-Driver: SCSI_ADVANSYS - AdvanSys SCSI
-
-File: advansys/mcode.bin
-File: advansys/3550.bin
-File: advansys/38C0800.bin
-File: advansys/38C1600.bin
-
-Licence: BSD, no source available.
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: SCSI_QLOGIC_1280 - Qlogic QLA 1240/1x80/1x160 SCSI support
-
-File: qlogic/1040.bin
-File: qlogic/1280.bin
-File: qlogic/12160.bin
-
-Licence: Allegedly GPLv2+, but no source visible. Marked:
-
- QLOGIC LINUX SOFTWARE
- QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x
- Copyright (C) 2001 Qlogic Corporation (www.qlogic.com)
-
---------------------------------------------------------------------------
-
-Driver: kaweth -- USB KLSI KL5USB101-based Ethernet device
-
-File: kaweth/new_code.bin
-File: kaweth/new_code_fix.bin
-File: kaweth/trigger_code.bin
-File: kaweth/trigger_code_fix.bin
-
-Licence: Unknown
-
-Found in hex form in the kernel source.
-
---------------------------------------------------------------------------
-
-Driver: ttusb-budget -- Technotrend/Hauppauge Nova-USB devices
-
-File: ttusb-budget/dspbootcode.bin
-
-Licence: Unknown
-
-Found in hex form in the kernel source.
-
---------------------------------------------------------------------------
-
-Driver: keyspan -- USB Keyspan USA-xxx serial device
-
-File: keyspan/mpr.fw
-File: keyspan/usa18x.fw
-File: keyspan/usa19.fw
-File: keyspan/usa19qi.fw
-File: keyspan/usa19qw.fw
-File: keyspan/usa19w.fw
-File: keyspan/usa28.fw
-File: keyspan/usa28xa.fw
-File: keyspan/usa28xb.fw
-File: keyspan/usa28x.fw
-File: keyspan/usa49w.fw
-File: keyspan/usa49wlc.fw
-
-Converted from Intel HEX files, used in our binary representation of ihex.
-
-Original licence information:
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
-
---------------------------------------------------------------------------
-
-Driver: keyspan_pda -- USB Keyspan PDA single-port serial device
-
-File: keyspan_pda/keyspan_pda.fw
-Source: keyspan_pda/keyspan_pda.S
-
-File: keyspan_pda/xircom_pgs.fw
-Source: keyspan_pda/xircom_pgs.S
-
-Licence: GPLv2+
-
-Compiled from original 8051 source into Intel HEX, used in our binary ihex form.
-
---------------------------------------------------------------------------
-
-Driver: emi26 -- EMI 2|6 USB Audio interface
-
-File: emi26/bitstream.fw
-Info: VERSION=1.1.1.131 DATE=2001dec06
-
-File: emi26/firmware.fw
-Info: VERSION=1.0.2.916 DATE=12.02.2002
-
-File: emi26/loader.fw
-
-Converted from Intel HEX files, used in our binary representation of ihex.
-
-Original licence information:
-/*
- * This firmware is for the Emagic EMI 2|6 Audio Interface
- *
- * The firmware contained herein is Copyright (c) 1999-2002 Emagic
- * as an unpublished work. This notice does not imply unrestricted
- * or public access to this firmware which is a trade secret of Emagic,
- * and which may not be reproduced, used, sold or transferred to
- * any third party without Emagic's written consent. All Rights Reserved.
- *
- * Permission is hereby granted for the distribution of this firmware
- * image as part of a Linux or other Open Source operating system kernel
- * in text or binary form as required.
- *
- * This firmware may not be modified and may only be used with the
- * Emagic EMI 2|6 Audio Interface. Distribution and/or Modification of
- * any driver which includes this firmware, in whole or in part,
- * requires the inclusion of this statement.
- */
-
---------------------------------------------------------------------------
-
-Driver: emi62 -- EMI 6|2m USB Audio interface
-
-File: emi62/bitstream.fw
-Info: VERSION=1.0.0.191 DATE= 2002oct28
-
-File: emi62/loader.fw
-Source: EMILOAD.HEX
-Info: VERSION=1.0.2.002 DATE=10.01.2002
-
-File: emi62/midi.fw
-Source: EMI62MFW.HEX
-Info: VERSION=1.04.062 DATE=16.10.2002
-
-File: emi62/spdif.fw
-Source: EMI62SFW.HEX
-Info: VERSION=1.04.062 DATE=16.10.2002
-
-Converted from Intel HEX files, used in our binary representation of ihex.
-
-Original licence information: None
-
---------------------------------------------------------------------------
-
-Driver: ti_usb_3410_5052 -- USB TI 3410/5052 serial device
-
-File: ti_3410.fw
-Info: firmware 9/10/04 FW3410_Special_StartWdogOnStartPort
-
-File: ti_5052.fw
-Info: firmware 9/18/04
-
-Licence: Allegedly GPLv2+, but no source visible. Marked:
- Copyright (C) 2004 Texas Instruments
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: ti_usb_3410_5052 -- Multi-Tech USB cell modems
-
-File: mts_cdma.fw
-File: mts_gsm.fw
-File: mts_edge.fw
-
-Licence: "all firmware components are redistributable in binary form"
- per support@multitech.com
- Copyright (C) 2005 Multi-Tech Systems, Inc.
-
-Found in hex form in ftp://ftp.multitech.com/wireless/wireless_linux.zip
-
---------------------------------------------------------------------------
-
-Driver: whiteheat -- USB ConnectTech WhiteHEAT serial device
-
-File: whiteheat.fw
-Version: 4.06
-
-File: whiteheat_loader.fw
-File: whiteheat_loader_debug.fw
-
-Licence: Allegedly GPLv2, but no source visible. Marked:
- Copyright (C) 2000-2002 ConnectTech Inc
-
-Debug loader claims the following behaviour:
- Port 1 LED flashes when the vend_ax program is running
- Port 2 LED flashes when any SETUP command arrives
- Port 3 LED flashes when any valid VENDOR request occurs
- Port 4 LED flashes when the EXTERNAL RAM DOWNLOAD request occurs
-
-Converted from Intel HEX files, used in our binary representation of ihex.
-
---------------------------------------------------------------------------
-
-Driver: CPiA2 -- cameras based on Vision's CPiA2
-
-File: cpia2/stv0672_vp4.bin
-
-Licence: Allegedly GPLv2+, but no source visible. Marked:
- Copyright (C) 2001 STMicroelectronics, Inc.
- Contact: steve.miller@st.com
- Description: This file contains patch data for the CPiA2 (stv0672) VP4.
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: DABUSB -- Digital Audio Broadcasting (DAB) Receiver for USB and Linux
-
-File: dabusb/firmware.fw
-File: dabusb/bitstream.bin
-
-Licence: Distributable
-
- * Copyright (C) 1999 BayCom GmbH
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that redistributions of source
- * code retain the above copyright notice and this comment without
- * modification.
-
---------------------------------------------------------------------------
-
-Driver: USB_VICAM -- USB 3com HomeConnect (aka vicam)
-
-File: vicam/firmware.fw
-
-Licence: Unknown
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: USB_SERIAL_EDGEPORT - USB Inside Out Edgeport Serial Driver
-
-File: edgeport/boot.fw
-File: edgeport/boot2.fw
-File: edgeport/down.fw
-File: edgeport/down2.fw
-
-Licence: Allegedly GPLv2+, but no source visible. Marked:
-//**************************************************************
-//* Edgeport/4 Binary Image
-//* Generated by HEX2C v1.06
-//* Copyright (C) 1998 Inside Out Networks, All rights reserved.
-//**************************************************************
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: USB_SERIAL_EDGEPORT_TI - USB Inside Out Edgeport Serial Driver
-(TI Devices)
-
-File: edgeport/down3.bin
-
-Licence:
-//**************************************************************
-//* Edgeport Binary Image (for TI based products)
-//* Generated by TIBin2C v2.00 (watchport)
-//* Copyright (C) 2001 Inside Out Networks, All rights reserved.
-//**************************************************************
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: ATARI_DSP56K - Atari DSP56k support
-
-File: dsp56k/bootstrap.bin
-Source: dsp56k/bootstrap.asm
-
-Licence: GPLv2 or later
-
-DSP56001 assembler, possibly buildable with a56 from
-http://www.zdomain.com/a56.html
-
---------------------------------------------------------------------------
-
-Driver: SND_SB16_CSP - Sound Blaster 16/AWE CSP support
-
-File: sb16/mulaw_main.csp
-File: sb16/alaw_main.csp
-File: sb16/ima_adpcm_init.csp
-File: sb16/ima_adpcm_playback.csp
-File: sb16/ima_adpcm_capture.csp
-
-Licence: Allegedly GPLv2+, but no source visible. Marked:
-/*
- * Copyright (c) 1994 Creative Technology Ltd.
- * Microcode files for SB16 Advanced Signal Processor
- */
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: CASSINI - Sun Cassini
-
-File: sun/cassini.bin
-
-Licence: Unknown
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter
-
-File: cxgb3/t3b_psram-1.1.0.bin.ihex
-File: cxgb3/t3c_psram-1.1.0.bin.ihex
-file: cxgb3/t3fw-7.4.0.bin.ihex
-
-License: GPLv2 or OpenIB.org BSD license, no source visible
-
---------------------------------------------------------------------------
-
-Driver: cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter
-
-File: cxgb3/ael2005_opt_edc.bin.ihex
-File: cxgb3/ael2005_twx_edc.bin.ihex
-File: cxgb3/ael2020_twx_edc.bin.ihex
-
-Licence:
- * Copyright (c) 2007-2009 NetLogic Microsystems, Inc.
- *
- * Permission is hereby granted for the distribution of this firmware
- * data in hexadecimal or equivalent format, provided this copyright
- * notice is accompanying it.
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: e100 -- Intel PRO/100 Ethernet NIC
-
-File: e100/d101m_ucode.bin
-File: e100/d101s_ucode.bin
-File: e100/d102e_ucode.bin
-
-Licence: Unknown
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: acenic -- Alteon AceNIC Gigabit Ethernet card
-
-File: acenic/tg1.bin
-File: acenic/tg2.bin
-
-Licence: Unknown
-
-Found in hex form in kernel source, but source allegedly available at
-http://alteon.shareable.org/
-
---------------------------------------------------------------------------
-
-Driver: tigon3 -- Broadcom Tigon3 based gigabit Ethernet cards
-
-File: tigon/tg3.bin
-File: tigon/tg3_tso.bin
-File: tigon/tg3_tso5.bin
-
-Licence:
- * Firmware is:
- * Derived from proprietary unpublished source code,
- * Copyright (C) 2000-2003 Broadcom Corporation.
- *
- * Permission is hereby granted for the distribution of this firmware
- * data in hexadecimal or equivalent format, provided this copyright
- * notice is accompanying it.
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: ADAPTEC_STARFIRE - Adaptec Starfire/DuraLAN support
-
-File: adaptec/starfire_rx.bin
-File: adaptec/starfire_tx.bin
-
-Licence: Allegedly GPLv2, but no source visible.
-
-Found in hex form in kernel source, with the following notice:
-
- BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE IT IS LICENSED "AS IS" AND
- THERE IS NO WARRANTY FOR THE PROGRAM, INCLUDING BUT NOT LIMITED TO THE
- IMPLIED WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR A PARTICULAR PURPOSE
- (TO THE EXTENT PERMITTED BY APPLICABLE LAW). USE OF THE PROGRAM IS AT YOUR
- OWN RISK. IN NO EVENT WILL ADAPTEC OR ITS LICENSORS BE LIABLE TO YOU FOR
- DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES
- ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM.
-
---------------------------------------------------------------------------
-
-Driver: TEHUTI - Tehuti Networks 10G Ethernet
-
-File: tehuti/bdx.bin
-
-Licence:
-
- Copyright (C) 2007 Tehuti Networks Ltd.
-
- Permission is hereby granted for the distribution of this firmware data
- in hexadecimal or equivalent format, provided this copyright notice is
- accompanying it.
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: TYPHOON - 3cr990 series Typhoon
-
-File: 3com/typhoon.bin
-
-Licence:
-/*
- * Copyright 1999-2004 3Com Corporation. All Rights Reserved.
- *
- * Redistribution and use in source and binary forms of the 3c990img.h
- * microcode software are permitted provided that the following conditions
- * are met:
- * 1. Redistribution of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistribution in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of 3Com may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY 3COM ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * USER ACKNOWLEDGES AND AGREES THAT PURCHASE OR USE OF THE 3c990img.h
- * MICROCODE SOFTWARE WILL NOT CREATE OR GIVE GROUNDS FOR A LICENSE BY
- * IMPLICATION, ESTOPPEL, OR OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS
- * (PATENT, COPYRIGHT, TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT)
- * EMBODIED IN ANY OTHER 3COM HARDWARE OR SOFTWARE EITHER SOLELY OR IN
- * COMBINATION WITH THE 3c990img.h MICROCODE SOFTWARE
- */
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: YAM - YAM driver for AX.25
-
-File: yam/1200.bin
-File: yam/9600.bin
-
-Licence:
- * (C) F6FBB 1998
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: PCMCIA_PCNET - NE2000 compatible PCMCIA adapter
-
-File: cis/LA-PCM.cis
- cis/PCMLM28.cis
- cis/DP83903.cis
- cis/NE2K.cis
- cis/tamarack.cis
- cis/PE-200.cis
- cis/PE520.cis
-
-Licence: GPL
-
-Originally developed by the pcmcia-cs project
-
---------------------------------------------------------------------------
-
-Driver: PCMCIA_3C589 - 3Com PCMCIA adapter
-
-File: cis/3CXEM556.cis
-
-Licence: GPL
-
-Originally developed by the pcmcia-cs project
-
---------------------------------------------------------------------------
-
-Driver: PCMCIA_3C574 - 3Com PCMCIA adapter
-
-File: cis/3CCFEM556.cis
-
-Licence: GPL
-
-Originally developed by the pcmcia-cs project
-
---------------------------------------------------------------------------
-
-Driver: SERIAL_8250_CS - Serial PCMCIA adapter
-
-File: cis/MT5634ZLX.cis
- cis/RS-COM-2P.cis
- cis/COMpad2.cis
- cis/COMpad4.cis
- cis/SW_555_SER.cis
- cis/SW_7xx_SER.cis
- cis/SW_8xx_SER.cis
-
-Licence: GPL
-
-Originally developed by the pcmcia-cs project
-
---------------------------------------------------------------------------
-
-Driver: PCMCIA_SMC91C92 - SMC 91Cxx PCMCIA
-
-File: ositech/Xilinx7OD.bin
-
-Licence: Allegedly GPL, but no source visible. Marked:
- This file contains the firmware of Seven of Diamonds from OSITECH.
- (Special thanks to Kevin MacPherson of OSITECH)
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: SCSI_QLOGICPTI - PTI Qlogic, ISP Driver
-
-File: qlogic/isp1000.bin
-
-Licence: Unknown
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: MYRI_SBUS - MyriCOM Gigabit Ethernet
-
-File: myricom/lanai.bin
-
-Licence: Unknown
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: bnx2x: Broadcom Everest
-
-File: bnx2x/bnx2x-e1-6.2.9.0.fw
-File: bnx2x/bnx2x-e1h-6.2.9.0.fw
-File: bnx2x/bnx2x-e2-6.2.9.0.fw
-
-License:
- Copyright (c) 2007-2011 Broadcom Corporation
-
- This file contains firmware data derived from proprietary unpublished
- source code, Copyright (c) 2007-2011 Broadcom Corporation.
-
- Permission is hereby granted for the distribution of this firmware data
- in hexadecimal or equivalent format, provided this copyright notice is
- accompanying it.
-
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: BNX2 - Broadcom NetXtremeII
-
-File: bnx2/bnx2-mips-06-6.2.1.fw
-File: bnx2/bnx2-rv2p-06-6.0.15.fw
-File: bnx2/bnx2-mips-09-6.2.1a.fw
-File: bnx2/bnx2-rv2p-09-6.0.17.fw
-File: bnx2/bnx2-rv2p-09ax-6.0.17.fw
-
-Licence:
-
- This file contains firmware data derived from proprietary unpublished
- source code, Copyright (c) 2004 - 2010 Broadcom Corporation.
-
- Permission is hereby granted for the distribution of this firmware data
- in hexadecimal or equivalent format, provided this copyright notice is
- accompanying it.
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: DVB AV7110 -- AV7110 cards
-
-File: av7110/bootcode.bin
-
-Licence: GPLv2 or later
-
-ARM assembly source code available at https://linuxtv.org/downloads/firmware/Boot.S
-
---------------------------------------------------------------------------
-
-Driver: wavefront - ISA WaveFront sound card
-
-File: yamaha/yss225_registers.bin
-
-Licence: Allegedly GPLv2+, but no source visible.
-
-Found in hex form in kernel source, with the following comment:
- Copyright (c) 1998-2002 by Paul Davis <pbd@op.net>
-
---------------------------------------------------------------------------
-
-Driver: mga - Matrox G200/G400/G550
-
-File: matrox/g200_warp.fw
-File: matrox/g400_warp.fw
-
-Licence:
-
-Copyright 1999 Matrox Graphics Inc.
-All Rights Reserved.
-
-Permission is hereby granted, free of charge, to any person obtaining a
-copy of this software and associated documentation files (the "Software"),
-to deal in the Software without restriction, including without limitation
-the rights to use, copy, modify, merge, publish, distribute, sublicense,
-and/or sell copies of the Software, and to permit persons to whom the
-Software is furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-MATROX GRAPHICS INC., OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
-OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: r128 - ATI Rage 128
-
-File: r128/r128_cce.bin
-
-Licence:
-
-Copyright 2000 Advanced Micro Devices, Inc.
-
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
-
-Found in decimal form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: radeon - ATI Radeon
-
-File: radeon/R100_cp.bin
-File: radeon/R200_cp.bin
-File: radeon/R300_cp.bin
-File: radeon/R420_cp.bin
-File: radeon/RS600_cp.bin
-File: radeon/RS690_cp.bin
-File: radeon/R520_cp.bin
-File: radeon/R600_pfp.bin
-File: radeon/R600_me.bin
-File: radeon/RV610_pfp.bin
-File: radeon/RV610_me.bin
-File: radeon/RV630_pfp.bin
-File: radeon/RV630_me.bin
-File: radeon/RV620_pfp.bin
-File: radeon/RV620_me.bin
-File: radeon/RV635_pfp.bin
-File: radeon/RV635_me.bin
-File: radeon/RV670_pfp.bin
-File: radeon/RV670_me.bin
-File: radeon/RS780_pfp.bin
-File: radeon/RS780_me.bin
-File: radeon/RV770_pfp.bin
-File: radeon/RV770_me.bin
-File: radeon/RV730_pfp.bin
-File: radeon/RV730_me.bin
-File: radeon/RV710_pfp.bin
-File: radeon/RV710_me.bin
-
-Licence:
-
- * Copyright 2007-2009 Advanced Micro Devices, Inc.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
-
-Driver: ib_qib - QLogic Infiniband
-
-File: qlogic/sd7220.fw
-
-Licence:
-
- * Copyright (c) 2007, 2008 QLogic Corporation. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
-
-Found in hex form in kernel source.
-
---------------------------------------------------------------------------
diff --git a/firmware/acenic/tg1.bin.ihex b/firmware/acenic/tg1.bin.ihex
deleted file mode 100644
index bef2659d3645..000000000000
--- a/firmware/acenic/tg1.bin.ihex
+++ /dev/null
@@ -1,4573 +0,0 @@
-:100000000C040B0000004000000040001000000342
-:10001000000000000000000D0000000D3C1D00016C
-:100020008FBD5C5403A0F0213C100000261040005E
-:100030000C00100C000000000000000D27BDFFD8D0
-:100040003C1CC0003C1B0013377BD8000000D021B3
-:100050003C17001336F7541802E02021340583E8DA
-:10006000AFBF00240C002488AFB000200C0023E8B0
-:10007000000000003C040001248451A42405000178
-:1000800002E03021000038213C10000126107E5093
-:10009000AFB000100C002403AFBB00143C02000FF3
-:1000A0003442FFFF020210240362102B10400009AB
-:1000B000240500033C040001248451B002003021D7
-:1000C000036038213C020010AFA200100C00240392
-:1000D000AFA00014000020213405C0003C01000145
-:1000E00000370821A02083B03C010001003708211F
-:1000F000A02083B23C01000100370821A02083B377
-:100100003C01000100370821AC2083B4A2E004D8F0
-:10011000000418C02484000100771021AC40727CD8
-:1001200000771021AC40728002E31021A445727C5C
-:100130002C8200201440FFF7000418C0000020218A
-:100140003405C000000418C0248400010077102189
-:10015000AC40737C00771021AC40738002E3102127
-:10016000A445737C2C8200805440FFF7000418C023
-:10017000AF800054AF80011C8F82004434420040A5
-:10018000AF8200448F82004434420020AF8200449A
-:100190008F420218304200021040000900000000A7
-:1001A0008F4202203C030002346300040043102508
-:1001B000AEE204C48F42021C0800107434420004F2
-:1001C0008F4202203C0300023463000600431025E6
-:1001D000AEE204C48F42021C34420006AEE204CCFC
-:1001E0008F420218304200101040000A0000000048
-:1001F0008F42021C34420004AEE204C88F42022047
-:100200003C03000A34630004004310250800108AF0
-:10021000AEE204C08F4202203C03000A34630006B1
-:1002200000431025AEE204C08F42021C3442000697
-:10023000AEE204C88F4202183042020010400003B0
-:100240002402000108001091A2E27248A2E0724864
-:1002500024020001AF8200A0AF8200B08F8300545F
-:100260008F82005408001099246300648F82005428
-:10027000006210232C4200651440FFFC00000000C7
-:10028000AF8000448F4202088F43020CAEE20010A0
-:10029000AEE300148EE400108EE5001426E2003078
-:1002A000AEE2002824020490AEE20018AF84009071
-:1002B000AF8500948EE20028AF8200B496E2001A67
-:1002C000AF82009C8F8200B08EE304CC00431025E7
-:1002D000AF8200B08F8200B0304200041440FFFDB6
-:1002E000000000008EE204508EE30454AEE304FCF0
-:1002F0008EE204FC2442E0002C4220011440000D58
-:1003000026E400308EE204508EE304543C040001E5
-:10031000248451BC3C050001AFA00010AFA0001424
-:100320008EE704FC34A5F0000C00240300603021AB
-:1003300026E400300C0024882405040027440080B3
-:100340000C0024882405008026E4777C0C00248897
-:10035000240504008F42025C26E40094AEE20060B3
-:100360008F4202602745020024060008AEE20068C2
-:10037000240200060C00249AAEE200643C023B9A80
-:100380003442CA000000202124030002AEE30074BE
-:10039000AEE30070AEE2006C240203E8AEE20104BA
-:1003A00024020001AEE30100AEE2010C3C030001B7
-:1003B0000064182190635C2002E410212484000171
-:1003C000A043009C2C82000F1440FFF800000000A6
-:1003D0008F82004002E418212484000100021702E9
-:1003E00024420030A062009C02E41021A040009C46
-:1003F00096E2046A30420003144000090000000045
-:1004000096E2047A30420003504001313C03080078
-:1004100096E2046A304200031040002A3C020700C2
-:1004200096E2047A30420003104000263C020700A6
-:1004300096E3047A96E2046A146200223C02070002
-:100440008EE204C024030001A2E34E2034420E00D9
-:10045000AEE204C08F420218304201001040000595
-:10046000000000003C0200012442E1680800111D68
-:10047000000211003C0200012442D35C0002110082
-:10048000000211823C030800004310253C010001DA
-:10049000AC2212383C0200012442F6800002110016
-:1004A000000211823C030800004310253C010001BA
-:1004B000AC2212788EE2000034424000080012386C
-:1004C000AEE2000034423000AFA200188EE206080F
-:1004D0008F43022824420001304900FF512300E2EB
-:1004E000AFA000108EE20608000210C000571021D5
-:1004F0008FA300188FA4001CAC43060CAC4406105C
-:100500008F8701202762380024E800200102102B89
-:1005100050400001276830008F820128110200043A
-:10052000000000008F820124150200070000102146
-:100530008EE201A40000302124420001AEE201A4B9
-:10054000080011A08EE201A48EE40608000420C079
-:10055000008018218EE404308EE5043400A32821A5
-:1005600000A3302B0082202100862021ACE4000073
-:10057000ACE500048EE3060824020008A4E2000EA5
-:100580002402000DACE20018ACE9001C000318C006
-:100590002463060C02E31021ACE200088EE204C4DE
-:1005A000ACE20010AF88012092E24E2014400037E8
-:1005B000240600018EE24E30000210C02442503862
-:1005C00002E220218C830000240200071462001F35
-:1005D000000000008EE34E308EE24E341062001BAD
-:1005E000240300408C82000424420001AC820004F9
-:1005F0008EE24E348EE54E30244200011043000757
-:10060000000000008EE24E342442000110A20005DA
-:10061000000000000800118A0000000014A000057E
-:10062000000000008F82012824420020AF820128B0
-:100630008F8201288C8200042C420011504000134C
-:10064000AC800000080011A0000000008EE24E30D7
-:100650002403004024420001504300030000102105
-:100660008EE24E3024420001AEE24E308EE24E3039
-:10067000000210C02442503802E220212402000768
-:10068000AC82000024020001AC82000454C0000CC3
-:10069000AEE906083C040001248451C8AFA0001054
-:1006A000AFA000148EE606088F4702283C0500091B
-:1006B0000C00240334A5F000080012230000000001
-:1006C0008F830120276238002466002000C2102B8F
-:1006D00050400001276630008F82012810C20004BC
-:1006E000000000008F82012414C2000700000000F7
-:1006F0008EE201A40000302124420001AEE201A4F8
-:10070000080012078EE201A48EE20608AC62001C0B
-:100710008EE404A08EE504A42462001CAC620008F0
-:1007200024020008A462000E24020011AC6200182A
-:10073000AC640000AC6500048EE204C4AC6200103E
-:10074000AF86012092E24E201440003724060001BB
-:100750008EE24E30000210C02442503802E22021C6
-:100760008C830000240200121462001F00000000AD
-:100770008EE34E308EE24E341062001B24030040A4
-:100780008C82000424420001AC8200048EE24E34CC
-:100790008EE54E30244200011043000700000000A7
-:1007A0008EE24E342442000110A200050000000039
-:1007B000080011F10000000014A000050000000076
-:1007C0008F82012824420020AF8201288F820128D5
-:1007D0008C8200042C42001150400013AC800000B9
-:1007E00008001207000000008EE24E302403004093
-:1007F0002442000150430003000010218EE24E30DD
-:1008000024420001AEE24E308EE24E30000210C0B3
-:100810002442503802E2202124020012AC8200005F
-:1008200024020001AC82000414C0001B0000000080
-:100830003C040001248451D0AFA00010AFA00014EC
-:100840008EE606088F4702283C0500090C002403A9
-:1008500034A5F0018EE201B024420001AEE201B005
-:10086000080012238EE201B03C040001248451DC14
-:10087000AFA000148EE606088F4702283C05000949
-:100880000C00240334A5F0058EE201AC24420001E3
-:10089000AEE201AC8EE201AC8EE201603C040001EC
-:1008A000248451E83405F00124420001AEE20160E5
-:1008B0008EE201600000302100003821AFA000105E
-:1008C0000C002403AFA00014080012380000000040
-:1008D0003C0200012442F5A800021100000211822E
-:1008E000004310253C010001AC22127896E2045A24
-:1008F00030420003104000253C050FFF8EE204C883
-:1009000034A5FFFF34420A00AEE204C88EE304C8F7
-:100910003C040001248451F424020001A2E204EC0E
-:10092000A2E204ED3C020002006218253C02000134
-:100930002442A3900045102400021082AEE304C8B4
-:100940003C030800004310253C010001AC221220AA
-:100950003C0200012442ADD4004510240002108264
-:10096000004310253C010001AC22128096E6045A97
-:100970000000382124050011AFA000100C00240352
-:10098000AFA0001408001268000000003C02000143
-:100990002442A9D400021100000211823C03080085
-:1009A000004310253C010001AC22128096E2046A4B
-:1009B00030420010144000090000000096E2047A62
-:1009C00030420010104001120000000096E2046A5C
-:1009D00030420010104000053C02070096E2047A05
-:1009E00030420010144001023C0207003442300043
-:1009F000AFA200188EE206088F43022824420001AD
-:100A0000304900FF512300E2AFA000108EE206083B
-:100A1000000210C0005710218FA300188FA4001CE3
-:100A2000AC43060CAC4406108F87012027623800C7
-:100A300024E800200102102B5040000127683000FC
-:100A40008F82012811020004000000008F8201241F
-:100A500015020007000010218EE201A400003021E1
-:100A600024420001AEE201A4080012EA8EE201A4D1
-:100A70008EE40608000420C0008018218EE40430B3
-:100A80008EE5043400A3282100A3302B008220210E
-:100A900000862021ACE40000ACE500048EE30608EB
-:100AA00024020008A4E2000E2402000DACE20018AB
-:100AB000ACE9001C000318C02463060C02E31021FB
-:100AC000ACE200088EE204C4ACE20010AF88012062
-:100AD00092E24E2014400037240600018EE24E3090
-:100AE000000210C02442503802E220218C83000012
-:100AF000240200071462001F000000008EE34E3045
-:100B00008EE24E341062001B240300408C820004ED
-:100B100024420001AC8200048EE24E348EE54E3059
-:100B20002442000110430007000000008EE24E3412
-:100B30002442000110A2000500000000080012D4A9
-:100B40000000000014A00005000000008F820128B2
-:100B500024420020AF8201288F8201288C82000469
-:100B60002C42001150400013AC800000080012EA33
-:100B7000000000008EE24E302403004024420001B9
-:100B800050430003000010218EE24E302442000149
-:100B9000AEE24E308EE24E30000210C02442503899
-:100BA00002E2202124020007AC820000240200019E
-:100BB000AC82000454C0000CAEE906083C040001FD
-:100BC000248451C8AFA00010AFA000148EE6060820
-:100BD0008F4702283C0500090C00240334A5F000CF
-:100BE0000800136D000000008F8301202762380089
-:100BF0002466002000C2102B504000012766300000
-:100C00008F82012810C20004000000008F8201249E
-:100C100014C20007000000008EE201A40000302191
-:100C200024420001AEE201A4080013518EE201A4A7
-:100C30008EE20608AC62001C8EE404A08EE504A4DB
-:100C40002462001CAC62000824020008A462000EAA
-:100C500024020011AC620018AC640000AC65000412
-:100C60008EE204C4AC620010AF86012092E24E20F6
-:100C700014400037240600018EE24E30000210C0FE
-:100C80002442503802E220218C830000240200120A
-:100C90001462001F000000008EE34E308EE24E34DE
-:100CA0001062001B240300408C82000424420001D7
-:100CB000AC8200048EE24E348EE54E3024420001B8
-:100CC00010430007000000008EE24E342442000171
-:100CD00010A20005000000000800133B0000000007
-:100CE00014A00005000000008F820128244200208B
-:100CF000AF8201288F8201288C8200042C420011CF
-:100D000050400013AC8000000800135100000000A8
-:100D10008EE24E3024030040244200015043000381
-:100D2000000010218EE24E3024420001AEE24E302F
-:100D30008EE24E30000210C02442503802E22021E0
-:100D400024020012AC82000024020001AC820004E4
-:100D500014C0001B000000003C040001248451D09A
-:100D6000AFA00010AFA000148EE606088F4702283F
-:100D70003C0500090C00240334A5F0018EE201B00B
-:100D800024420001AEE201B00800136D8EE201B012
-:100D90003C040001248451DCAFA000148EE6060858
-:100DA0008F4702283C0500090C00240334A5F005F8
-:100DB0008EE201AC24420001AEE201AC8EE201AC55
-:100DC0008EE201603C040001248451E83405F00205
-:100DD00024420001AEE201608EE201600000302199
-:100DE00000003821AFA000100C002403AFA00014B5
-:100DF00096E6047A96E7046A3C04000124845200D3
-:100E000024050012AFA000100C002403AFA00014B2
-:100E10000C004500000000000C002318000000003A
-:100E20003C06000134C63800AEE00608AF40022898
-:100E3000AF40022C96E304588EE400003C0512D823
-:100E400034A5C35827623800AEE2725827623800D2
-:100E5000AEE2726027623800AEE27264036610216F
-:100E6000AEE272702402FFFFAEE004D4AEE004E014
-:100E7000AEE004E4AEE004F0A2E004F4AEE00E0C58
-:100E8000AEE00E18AEE00E10AEE00E14AEE00E1C9A
-:100E9000AEE0724CAEE05244AEE05240AEE0523CA6
-:100EA000AEE07250AEE07254AEE0725CAEE07268DA
-:100EB000AEE004D02463FFFF00852025AEE304F8F4
-:100EC000AEE40000AF800060AF8200643C0201002D
-:100ED000AFA200188EE206088F43022824420001C8
-:100EE000304900FF512300E2AFA000108EE2060857
-:100EF000000210C0005710218FA300188FA4001CFF
-:100F0000AC43060CAC4406108F87012027623800E2
-:100F100024E800200102102B504000012768300017
-:100F20008F82012811020004000000008F8201243A
-:100F300015020007000010218EE201A400003021FC
-:100F400024420001AEE201A4080014228EE201A4B2
-:100F50008EE40608000420C0008018218EE40430CE
-:100F60008EE5043400A3282100A3302B0082202129
-:100F700000862021ACE40000ACE500048EE3060806
-:100F800024020008A4E2000E2402000DACE20018C6
-:100F9000ACE9001C000318C02463060C02E3102116
-:100FA000ACE200088EE204C4ACE20010AF8801207D
-:100FB00092E24E2014400037240600018EE24E30AB
-:100FC000000210C02442503802E220218C8300002D
-:100FD000240200071462001F000000008EE34E3060
-:100FE0008EE24E341062001B240300408C82000409
-:100FF00024420001AC8200048EE24E348EE54E3075
-:101000002442000110430007000000008EE24E342D
-:101010002442000110A20005000000000800140C8A
-:101020000000000014A00005000000008F820128CD
-:1010300024420020AF8201288F8201288C82000484
-:101040002C42001150400013AC8000000800142214
-:10105000000000008EE24E302403004024420001D4
-:1010600050430003000010218EE24E302442000164
-:10107000AEE24E308EE24E30000210C024425038B4
-:1010800002E2202124020007AC82000024020001B9
-:10109000AC82000454C0000CAEE906083C04000118
-:1010A000248451C8AFA00010AFA000148EE606083B
-:1010B0008F4702283C0500090C00240334A5F000EA
-:1010C000080014A5000000008F830120276238006B
-:1010D0002466002000C2102B50400001276630001B
-:1010E0008F82012810C20004000000008F820124BA
-:1010F00014C20007000000008EE201A400003021AD
-:1011000024420001AEE201A4080014898EE201A489
-:101110008EE20608AC62001C8EE404A08EE504A4F6
-:101120002462001CAC62000824020008A462000EC5
-:1011300024020011AC620018AC640000AC6500042D
-:101140008EE204C4AC620010AF86012092E24E2011
-:1011500014400037240600018EE24E30000210C019
-:101160002442503802E220218C8300002402001225
-:101170001462001F000000008EE34E308EE24E34F9
-:101180001062001B240300408C82000424420001F2
-:10119000AC8200048EE24E348EE54E3024420001D3
-:1011A00010430007000000008EE24E34244200018C
-:1011B00010A20005000000000800147300000000E9
-:1011C00014A00005000000008F82012824420020A6
-:1011D000AF8201288F8201288C8200042C420011EA
-:1011E00050400013AC80000008001489000000008B
-:1011F0008EE24E302403004024420001504300039D
-:10120000000010218EE24E3024420001AEE24E304A
-:101210008EE24E30000210C02442503802E22021FB
-:1012200024020012AC82000024020001AC820004FF
-:1012300014C0001B000000003C040001248451D0B5
-:10124000AFA00010AFA000148EE606088F4702285A
-:101250003C0500090C00240334A5F0018EE201B026
-:1012600024420001AEE201B0080014A58EE201B0F4
-:101270003C040001248451DCAFA000148EE6060873
-:101280008F4702283C0500090C00240334A5F00513
-:101290008EE201AC24420001AEE201AC8EE201AC70
-:1012A0008EE2015424420001AEE201540C0014DC31
-:1012B0008EE201548F8200A0304200041440FFFDF2
-:1012C000000000008F8200403042000114400008FE
-:1012D000000000008F43010424020001106200049A
-:1012E000000000008F420264104000060000000071
-:1012F0008EE2017C24420001AEE2017C080014C5AC
-:101300008EE2017C8F82004434420004AF820044AC
-:101310008EE2017824420001AEE201788EE201788B
-:101320008F8200D88F8300D400431023AEE2726C0A
-:101330008EE2726C1C4000033C030001004310214C
-:10134000AEE2726C0C004064000000000C004440EF
-:10135000AF8002288FBF00248FB0002003E0000878
-:1013600027BD002803E000080000000003E000089B
-:101370000000000000000000000000002402002C1B
-:10138000AF820050AEE072748F420238AEE27278E3
-:101390008F82005424420067AF820058AEE07B8801
-:1013A000AEE07B8CAEE07B843C010001003708217D
-:1013B000AC2083BC3C0100010037082103E0000899
-:1013C000A02083B927BDFFD8AFBF0024AFB0002055
-:1013D0008F8200543C0300018C635CD82442006778
-:1013E0001060000DAF8200583C0200010057102130
-:1013F000904283B8104000053C0302003C0100010C
-:101400000037082108001503A02083B88EE20000F1
-:1014100000431025AEE200008F4202183042010066
-:10142000104000C6000000008F8200B0304200046F
-:10143000104000C2000000003C03000100771821AA
-:101440008C6383D08F820104146200B4000000001A
-:101450003C030001007718218C6383D48F8200B491
-:10146000146200AE000000008F8200B03C030080D8
-:10147000004310241040000D000000008F82011C6A
-:1014800034420002AF82011C8F8200B02403FFFBB4
-:1014900000431024AF8200B08F82011C2403FFFDA3
-:1014A00000431024080015CCAF82011C3C0300014E
-:1014B000007718218C6383D08F820104146200822C
-:1014C000000000003C030001007718218C6383D4E6
-:1014D0008F8200B41462007C000000003C07000111
-:1014E00000F738218CE783D08F8200B03C040001E4
-:1014F00024845270AFA00014AFA200108F8600B0F9
-:101500003C0500050C00240334A509008F82011C52
-:1015100034420002AF82011C8F8301048F8200B02D
-:1015200034420001AF8200B0AF8301048F830120F9
-:10153000276238002466002000C2102B50400001B2
-:10154000276630008F82012810C2000400000000CE
-:101550008F82012414C20006000000008EE201A464
-:1015600024420001AEE201A4080015A08EE201A40D
-:101570008F4402088F45020C26E20030AC6200085E
-:1015800024020400A462000E2402000FAC620018C2
-:10159000AC60001CAC640000AC6500048EE204C4C6
-:1015A000AC620010AF86012092E24E20144000375A
-:1015B000000000008EE24E30000210C0244250387D
-:1015C00002E220218C830000240200071462001F25
-:1015D000000000008EE34E308EE24E341062001B9D
-:1015E000240300408C82000424420001AC820004E9
-:1015F0008EE24E348EE54E30244200011043000747
-:10160000000000008EE24E342442000110A20005CA
-:10161000000000000800158A0000000014A000056A
-:10162000000000008F82012824420020AF820128A0
-:101630008F8201288C8200042C420011504000133C
-:10164000AC800000080015A0000000008EE24E30C3
-:1016500024030040244200015043000300001021F5
-:101660008EE24E3024420001AEE24E308EE24E3029
-:10167000000210C02442503802E220212402000758
-:10168000AC82000024020001AC8200048F82011CA5
-:101690002403FFFD00431024AF82011C8EE201E40D
-:1016A0003C07000100F738218CE783D02442000179
-:1016B000AEE201E48EE201E43C0400012484527CA9
-:1016C000080015BDAFA000108F8201043C0100018D
-:1016D00000370821AC2283D08F8200B43C07000180
-:1016E00000F738218CE783D03C0400012484528425
-:1016F0003C01000100370821AC2283D4AFA00010C8
-:10170000AFA000148F8600B03C0500050C00240338
-:1017100034A50900080015CC000000008F820104E8
-:101720003C01000100370821AC2283D08F8200B435
-:101730003C01000100370821AC2283D48EE2727490
-:1017400092E304F42442006714600006AEE272746F
-:101750008EE272748F4302340043102B1440007BDE
-:10176000000000008EE304E48EE204F8146200043A
-:101770000000000092E204F450400074A2E004F47F
-:101780008F830120276238002466002000C2102BBE
-:1017900050400001276630008F82012810C20004EB
-:1017A000000000008F82012414C200070000000026
-:1017B0008EE201A40000802124420001AEE201A4D7
-:1017C000080016378EE201A48EE204E4AC62001C2D
-:1017D0008EE404B08EE504B42462001CAC62000800
-:1017E00024020008A462000E24020011AC6200185A
-:1017F000AC640000AC6500048EE204C4AC6200106E
-:10180000AF86012092E24E201440003724100001E0
-:101810008EE24E30000210C02442503802E22021F5
-:101820008C830000240200121462001F00000000DC
-:101830008EE34E308EE24E341062001B24030040D3
-:101840008C82000424420001AC8200048EE24E34FB
-:101850008EE54E30244200011043000700000000D6
-:101860008EE24E342442000110A200050000000068
-:10187000080016210000000014A000050000000070
-:101880008F82012824420020AF8201288F82012804
-:101890008C8200042C42001150400013AC800000E8
-:1018A00008001637000000008EE24E30240300408E
-:1018B0002442000150430003000010218EE24E300C
-:1018C00024420001AEE24E308EE24E30000210C0E3
-:1018D0002442503802E2202124020012AC8200008F
-:1018E00024020001AC8200045600000B2410000109
-:1018F0008EE204E43C0400012484528CAFA0001466
-:10190000AFA200108EE606088F4702283C050009AA
-:101910000C00240334A5F006160000032402000185
-:1019200008001650A2E204F48EE201702442000185
-:10193000AEE201708EE201708EE204E4A2E004F4F3
-:10194000AEE004F0AEE07274AEE204F88EE20E1C7B
-:101950001040006D000000008F83012027623800D6
-:101960002466002000C2102B504000012766300082
-:101970008F82012810C20004000000008F82012421
-:1019800014C20007000000008EE201A400008021C4
-:1019900024420001AEE201A4080016AD8EE201A4CB
-:1019A0008EE2724CAC62001C8EE404A88EE504AC9E
-:1019B0002462001CAC62000824020008A462000E2D
-:1019C00024020011AC620018AC640000AC65000495
-:1019D0008EE204C4AC620010AF86012092E24E2079
-:1019E00014400037241000018EE24E30000210C077
-:1019F0002442503802E220218C830000240200128D
-:101A00001462001F000000008EE34E308EE24E3460
-:101A10001062001B240300408C8200042442000159
-:101A2000AC8200048EE24E348EE54E30244200013A
-:101A300010430007000000008EE24E3424420001F3
-:101A400010A200050000000008001697000000002A
-:101A500014A00005000000008F820128244200200D
-:101A6000AF8201288F8201288C8200042C42001151
-:101A700050400013AC800000080016AD00000000CC
-:101A80008EE24E3024030040244200015043000304
-:101A9000000010218EE24E3024420001AEE24E30B2
-:101AA0008EE24E30000210C02442503802E2202163
-:101AB00024020012AC82000024020001AC82000467
-:101AC0005600000B241000018EE2724C3C04000111
-:101AD00024845298AFA00014AFA200108EE6724C7E
-:101AE0008F4702803C0500090C00240334A5F00850
-:101AF00056000001AEE00E1C8EE20174244200018B
-:101B0000AEE201748EE201748EE24E2410400019A0
-:101B100000000000AEE04E248F8200403042000101
-:101B200014400008000000008F430104240200015B
-:101B300010620004000000008F42026410400006A2
-:101B4000000000008EE2017C24420001AEE2017C34
-:101B5000080016DA8EE2017C8F82004434420004D1
-:101B6000AF8200448EE2017824420001AEE20178A7
-:101B70008EE201788EE272782442FF99AEE27278AA
-:101B80008EE272781C4002AD000000008F420238E5
-:101B9000104002AA000000003C0200010057102182
-:101BA000904283E0144002A5000000008F420080B4
-:101BB000AEE2004C8F4200C0AEE200488F4200848B
-:101BC000AEE200388F420084AEE202448F420088C9
-:101BD000AEE202488F42008CAEE2024C8F4200908F
-:101BE000AEE202508F420094AEE202548F4200985F
-:101BF000AEE202588F42009CAEE2025C8F4200A02F
-:101C0000AEE202608F4200A4AEE202648F4200A8FE
-:101C1000AEE202688F4200ACAEE2026C8F4200B0CE
-:101C2000AEE202708F4200B4AEE202748F4200B89E
-:101C3000AEE202788F4200BC24040001AEE2027CD6
-:101C4000AEE0003C00041080005710218EE3003C01
-:101C50008C42024424840001006218212C82000F6F
-:101C6000AEE3003C1440FFF8000410808F4200CC2B
-:101C7000AEE200508F4200D0AEE200548F830120CC
-:101C8000276238002466002000C2102B504000015B
-:101C9000276630008F82012810C200040000000077
-:101CA0008F82012414C20007000000008EE201A40C
-:101CB0000000802124420001AEE201A40800177553
-:101CC0008EE201A48F4402088F45020C26E2003008
-:101CD000AC62000824020400A462000E2402000F7B
-:101CE000AC620018AC60001CAC640000AC65000481
-:101CF0008EE204C4AC620010AF86012092E24E2056
-:101D000014400037241000018EE24E30000210C053
-:101D10002442503802E220218C8300002402000774
-:101D20001462001F000000008EE34E308EE24E343D
-:101D30001062001B240300408C8200042442000136
-:101D4000AC8200048EE24E348EE54E302442000117
-:101D500010430007000000008EE24E3424420001D0
-:101D600010A20005000000000800175F000000003E
-:101D700014A00005000000008F82012824420020EA
-:101D8000AF8201288F8201288C8200042C4200112E
-:101D900050400013AC8000000800177500000000E0
-:101DA0008EE24E30240300402442000150430003E1
-:101DB000000010218EE24E3024420001AEE24E308F
-:101DC0008EE24E30000210C02442503802E2202140
-:101DD00024020007AC82000024020001AC8200044F
-:101DE000120002123C020400AFA200183C020001E3
-:101DF00000571021904283B01040010B00000000FA
-:101E00008EE206088F43022824420001304A00FF78
-:101E1000514300FDAFA000108EE20608000210C082
-:101E2000005710218FA300188FA4001CAC43060C90
-:101E3000AC4406108F8300548F8200542469003212
-:101E4000012210232C4200331040006A0000582168
-:101E500024180008240F000D240D0007240C004056
-:101E6000240E00018F8701202762380024E800201B
-:101E70000102102B50400001276830008F8201289A
-:101E800011020004000000008F82012415020007E7
-:101E9000000010218EE201A40000802124420001F4
-:101EA000AEE201A4080017F38EE201A48EE4060856
-:101EB000000420C0008018218EE404308EE5043434
-:101EC00000A3282100A3302B00822021008620219E
-:101ED000ACE40000ACE500048EE20608A4F8000EB5
-:101EE000ACEF0018ACEA001C000210C02442060C43
-:101EF00002E21021ACE200088EE204C4ACE2001061
-:101F0000AF88012092E24E201440003324100001DB
-:101F10008EE24E30000210C02442503802E22021EE
-:101F20008C820000144D001F000000008EE34E3034
-:101F30008EE24E341062001B000000008C82000410
-:101F400024420001AC8200048EE24E348EE34E3017
-:101F500024420001104C0007000000008EE24E34C5
-:101F6000244200011062000500000000080017E094
-:101F70000000000014600005000000008F820128AE
-:101F800024420020AF8201288F8201288C82000425
-:101F90002C42001150400010AC800000080017F3E4
-:101FA000000000008EE24E3024420001504C00033D
-:101FB000000010218EE24E3024420001AEE24E308D
-:101FC0008EE24E30000210C02442503802E220213E
-:101FD000AC8D0000AC8E000456000006240B0001FE
-:101FE0008F820054012210232C4200331440FF9DA5
-:101FF00000000000316300FF24020001146200773A
-:102000003C050009AEEA06088F8300548F82005415
-:1020100024690032012210232C4200331040006159
-:1020200000005821240D0008240C0011240800127F
-:1020300024070040240A00018F8301202762380012
-:102040002466002000C2102B50400001276630009B
-:102050008F82012810C20004000000008F8201243A
-:1020600014C20007000000008EE201A400008021DD
-:1020700024420001AEE201A40800185F8EE201A430
-:102080008EE20608AC62001C8EE404A08EE504A477
-:102090002462001CAC620008A46D000EAC6C001839
-:1020A000AC640000AC6500048EE204C4AC620010B5
-:1020B000AF86012092E24E2014400033241000012C
-:1020C0008EE24E30000210C02442503802E220213D
-:1020D0008C8200001448001F000000008EE34E3088
-:1020E0008EE24E341062001B000000008C8200045F
-:1020F00024420001AC8200048EE24E348EE34E3066
-:102100002442000110470007000000008EE24E3418
-:102110002442000110620005000000000800184C75
-:102120000000000014600005000000008F820128FC
-:1021300024420020AF8201288F8201288C82000473
-:102140002C42001150400010AC8000000800185FC5
-:10215000000000008EE24E30244200015047000390
-:10216000000010218EE24E3024420001AEE24E30DB
-:102170008EE24E30000210C02442503802E220218C
-:10218000AC880000AC8A000456000006240B000155
-:102190008F820054012210232C4200331440FFA6EA
-:1021A00000000000316300FF2402000114620003FC
-:1021B0003C0500090800197C241000013C040001C2
-:1021C000248452A4AFA00010AFA000148F86012079
-:1021D0008F8701240800187B34A5F0113C0400010E
-:1021E000248452B0AFA00010AFA000148F8601204D
-:1021F0008F87012434A5F0100C00240300008021F7
-:102200000800197C000000003C040001248452BC3A
-:10221000AFA000148EE606088F4702283C0500098F
-:102220000800197534A5F00F8EE206088F430228C6
-:1022300024420001304900FF512300E2AFA000100A
-:102240008EE20608000210C0005710218FA300186C
-:102250008FA4001CAC43060CAC4406108F870120F1
-:102260002762380024E800200102102B50400001B2
-:10227000276830008F82012811020004000000004E
-:102280008F82012415020007000010218EE201A4B4
-:102290000000802124420001AEE201A4080018F7EA
-:1022A0008EE201A48EE40608000420C000801821FC
-:1022B0008EE404308EE5043400A3282100A3302BE3
-:1022C0000082202100862021ACE40000ACE500045F
-:1022D0008EE3060824020008A4E2000E2402000D8A
-:1022E000ACE20018ACE9001C000318C02463060C23
-:1022F00002E31021ACE200088EE204C4ACE200105C
-:10230000AF88012092E24E201440003724100001D3
-:102310008EE24E30000210C02442503802E22021EA
-:102320008C830000240200071462001F00000000DC
-:102330008EE34E308EE24E341062001B24030040C8
-:102340008C82000424420001AC8200048EE24E34F0
-:102350008EE54E30244200011043000700000000CB
-:102360008EE24E342442000110A20005000000005D
-:10237000080018E10000000014A0000500000000A3
-:102380008F82012824420020AF8201288F820128F9
-:102390008C8200042C42001150400013AC800000DD
-:1023A000080018F7000000008EE24E3024030040C1
-:1023B0002442000150430003000010218EE24E3001
-:1023C00024420001AEE24E308EE24E30000210C0D8
-:1023D0002442503802E2202124020007AC8200008F
-:1023E00024020001AC8200045600000CAEE906088D
-:1023F0003C040001248452C8AFA00010AFA0001418
-:102400008EE606088F4702283C0500090C002403CD
-:1024100034A5F0000800197C000000008F83012023
-:10242000276238002466002000C2102B50400001B3
-:10243000276630008F82012810C2000400000000CF
-:102440008F82012414C20007000000008EE201A464
-:102450000000802124420001AEE201A40800195EC0
-:102460008EE201A48EE20608AC62001C8EE404A099
-:102470008EE504A42462001CAC620008240200085B
-:10248000A462000E24020011AC620018AC640000CB
-:10249000AC6500048EE204C4AC620010AF8601207B
-:1024A00092E24E2014400037241000018EE24E309C
-:1024B000000210C02442503802E220218C83000028
-:1024C000240200121462001F000000008EE34E3050
-:1024D0008EE24E341062001B240300408C82000404
-:1024E00024420001AC8200048EE24E348EE54E3070
-:1024F0002442000110430007000000008EE24E3429
-:102500002442000110A20005000000000800194844
-:102510000000000014A00005000000008F820128C8
-:1025200024420020AF8201288F8201288C8200047F
-:102530002C42001150400013AC8000000800195ECE
-:10254000000000008EE24E302403004024420001CF
-:1025500050430003000010218EE24E30244200015F
-:10256000AEE24E308EE24E30000210C024425038AF
-:1025700002E2202124020012AC82000024020001A9
-:10258000AC8200045600001D241000013C04000130
-:10259000248452D0AFA00010AFA000148EE606082D
-:1025A0008F4702283C0500090C00240334A5F001E4
-:1025B0008EE201B024420001AEE201B00800197CB5
-:1025C0008EE201B03C040001248452DCAFA0001470
-:1025D0008EE606088F4702283C05000934A5F00561
-:1025E0000C002403000000008EE201AC00008021FA
-:1025F00024420001AEE201AC8EE201AC1200000CFC
-:10260000240200013C01000100370821A02083B012
-:102610008F4202388EE3015824630001AEE3015873
-:102620008EE301580800198CAEE272782402000192
-:102630003C01000100370821A02283B03C020001C8
-:102640008C425CD810400187000000008EE27B8441
-:1026500024430001284200C9144001A4AEE37B8456
-:102660008EE204D43042000214400119AEE07B84B3
-:102670008EE204D43C0306003463100034420002AE
-:10268000AEE204D4AFA300188EE206088F430228FE
-:1026900024420001304A00FF514300FDAFA000106A
-:1026A0008EE20608000210C0005710218FA3001808
-:1026B0008FA4001CAC43060CAC4406108F8300545E
-:1026C0008F82005424690032012210232C420033EF
-:1026D0001040006A0000582124180008240F000D43
-:1026E000240D0007240C0040240E00018F870120D8
-:1026F0002762380024E800200102102B504000011E
-:10270000276830008F8201281102000400000000B9
-:102710008F82012415020007000010218EE201A41F
-:102720000000802124420001AEE201A408001A1535
-:102730008EE201A48EE40608000420C00080182167
-:102740008EE404308EE5043400A3282100A3302B4E
-:102750000082202100862021ACE40000ACE50004CA
-:102760008EE20608A4F8000EACEF0018ACEA001CDC
-:10277000000210C02442060C02E21021ACE2000864
-:102780008EE204C4ACE20010AF88012092E24E2039
-:1027900014400033241000018EE24E30000210C0BD
-:1027A0002442503802E220218C820000144D001F88
-:1027B000000000008EE34E308EE24E341062001BAB
-:1027C000000000008C82000424420001AC8200045E
-:1027D0008EE24E348EE34E3024420001104C00074E
-:1027E000000000008EE24E34244200011062000519
-:1027F0000000000008001A0200000000146000053C
-:10280000000000008F82012824420020AF820128AE
-:102810008F8201288C8200042C420011504000104D
-:10282000AC80000008001A15000000008EE24E3057
-:1028300024420001504C0003000010218EE24E3073
-:1028400024420001AEE24E308EE24E30000210C053
-:102850002442503802E22021AC8D0000AC8E0004EE
-:1028600056000006240B00018F8200540122102321
-:102870002C4200331440FF9D00000000316300FF34
-:102880002402000154620078AFA00010AEEA0608EE
-:102890008F8300548F820054246900320122102358
-:1028A0002C4200331040006100005821240D000824
-:1028B000240C00112408001224070040240A0001FF
-:1028C0008F830120276238002466002000C2102B6D
-:1028D00050400001276630008F82012810C200049A
-:1028E000000000008F82012414C2000700000000D5
-:1028F0008EE201A40000802124420001AEE201A486
-:1029000008001A818EE201A48EE20608AC62001C67
-:102910008EE404A08EE504A42462001CAC620008CE
-:10292000A46D000EAC6C0018AC640000AC65000433
-:102930008EE204C4AC620010AF86012092E24E2009
-:1029400014400033241000018EE24E30000210C00B
-:102950002442503802E220218C8200001448001FDB
-:10296000000000008EE34E308EE24E341062001BF9
-:10297000000000008C82000424420001AC820004AC
-:102980008EE24E348EE34E302442000110470007A1
-:10299000000000008EE24E34244200011062000567
-:1029A0000000000008001A6E00000000146000051E
-:1029B000000000008F82012824420020AF820128FD
-:1029C0008F8201288C8200042C420011504000109C
-:1029D000AC80000008001A81000000008EE24E303A
-:1029E0002442000150470003000010218EE24E30C7
-:1029F00024420001AEE24E308EE24E30000210C0A2
-:102A00002442503802E22021AC880000AC8A000445
-:102A100056000006240B00018F820054012210236F
-:102A20002C4200331440FFA600000000316300FF79
-:102A30002402000110620022000000003C0400019A
-:102A4000248452A4AFA00010AFA000148F860120F0
-:102A50008F8701243C0500090C00240334A5F011E4
-:102A600008001AAD000000003C040001248452B0AC
-:102A7000AFA000148F8601208F8701243C05000938
-:102A80000C00240334A5F01008001AAD000000006B
-:102A90003C040001248452BCAFA000148EE606085A
-:102AA0008F4702283C0500090C00240334A5F00FD1
-:102AB0008EE201AC24420001AEE201AC8EE201AC38
-:102AC0008EE2015C24420001AEE2015C8EE2015C18
-:102AD0008EE204D430420001104000550000000096
-:102AE0008F42021830420080104000290000000090
-:102AF0008F82004434420040AF8200448EE27B7CEF
-:102B0000004028218EE200C08EE300C424060000AD
-:102B10002407FFFF00002021004610241444000D6C
-:102B2000006718241465000B000000008EE27B8013
-:102B3000004028218EE200E08EE300E40000202126
-:102B40000046102414440003006718241065000B8D
-:102B5000000000008EE200C08EE300C48EE400E0BE
-:102B60008EE500E4AEE37B7CAEE57B808F820044A3
-:102B70003842002008001B38AF8200448F82004496
-:102B80002403FFDF0043102408001B38AF820044F9
-:102B90008F8200442403FFDF00431024AF820044EF
-:102BA0008EE27B7C004028218EE200C08EE300C4D0
-:102BB000240600002407FFFF000020210046102407
-:102BC0001444000D006718241465000B0000000079
-:102BD0008EE27B80004028218EE200E08EE300E45C
-:102BE000000020210046102414440003006718242C
-:102BF0001065000B000000008EE200C08EE300C4F0
-:102C00008EE400E08EE500E4AEE37B7CAEE57B8005
-:102C10008F8200443842004008001B38AF820044D5
-:102C20008F8200443442004008001B38AF820044C9
-:102C30008F82004434420040AF8200448EE27B8C9D
-:102C4000244300012842001514400028AEE37B8C89
-:102C50008F82004438420020AF82004408001B38B5
-:102C6000AEE07B8C8EE204D43042000110400011B3
-:102C7000000000008F42021830420080104000091E
-:102C8000000000008F82004434420020AF820044E4
-:102C90008F8200442403FFBF0043102408001B362A
-:102CA000AF8200448F8200443442006008001B362B
-:102CB000AF8200448F82004434420040AF8200441F
-:102CC0008EE27B88244300012842138914400005CA
-:102CD000AEE37B888F82004438420020AF820044FC
-:102CE000AEE07B880C004603000000008FBF00248C
-:102CF0008FB0002003E0000827BD002827BDFFB8E3
-:102D0000AFBF0044AFB60040AFB5003CAFB4003831
-:102D1000AFB30034AFB20030AFB1002CAFB0002879
-:102D20008F96006432C200041040000C240200049C
-:102D3000AF8200648F420114AEE204E08F82006033
-:102D400034420008AF8200608EE2016C2442000130
-:102D5000AEE2016C080022F48EE2016C32C2000186
-:102D60001040000424020001AF820064080022F435
-:102D70000000000032C200021440000C3C050003B9
-:102D80003C0400012484535434A5000102C03021C6
-:102D900000003821AFA000100C002403AFA00014E5
-:102DA0002402FFF8080022F4AF8200648F43022C53
-:102DB0008F42010C5062000CAFA000108F42022C19
-:102DC00000021080005A10218C420300AFA20020A4
-:102DD0008F42022C24070001244200013042003FB0
-:102DE00008001B80AF42022C3C0400012484536085
-:102DF000AFA000148F46022C8F47010C3C05000346
-:102E00000C00240334A5F01F0000382114E0000357
-:102E100000000000080022EDAF96006493A200209D
-:102E20002443FFFF2C62001110400658000310805D
-:102E30003C010001002208218C22541800400008A7
-:102E4000000000008FA2002030420FFFAEE20E0C07
-:102E50008F82006034420200AF8200608EE201186F
-:102E600024420001AEE20118080022E88EE20118B7
-:102E70008FA20020240300013C010001003708213B
-:102E8000A02383B130420FFFAEE252388F82006040
-:102E900034420100AF8200608EE20144244200010E
-:102EA000AEE20144080022E88EE201448FA2002035
-:102EB0000002120000022502240200011082000517
-:102EC00024020002108200092402FFFE08001BC930
-:102ED000AFA000108EE204D4AEE40070AEE4007443
-:102EE0003442000108001BBDAEE204D48EE304D4DA
-:102EF000AEE40070AEE4007400621824AEE304D4C3
-:102F00008F8400540004144200041C8200431021EA
-:102F100000041CC20043102300041D0200431021C2
-:102F200000041D420043102308001BD0AEE20078CD
-:102F30003C0400012484536CAFA000148FA6002031
-:102F40003C0500030C00240334A500048EE20110AC
-:102F500024420001AEE20110080022E88EE20110D6
-:102F6000274402120C0022FE240500063049001FEF
-:102F7000000920C002E410219442727C30424000DB
-:102F80001040000A0097102197430212A443727E5A
-:102F90008F43021400971021AC43728002E4182181
-:102FA0003402800008001C79A462727C9443727E13
-:102FB000974202121462000602E4102100971021C9
-:102FC0008C4372808F4202141062009F02E4102131
-:102FD0009442727C304280001040002A2406FFFF99
-:102FE00000002021000410C002E210219442737CF2
-:102FF000304240005440000500803021248400010C
-:103000002C8200801440FFF8000410C004C100109E
-:10301000000618C0000610C0005718218C63737C8E
-:1030200000571021AFA300108C4273803C040001B4
-:1030300024845378AFA200148F4702143C05000388
-:103040000C00240334A5001308001C903C02080067
-:103050009744021200771021A444737E8F44021417
-:103060000077102102E31821AC4473803402800001
-:10307000A462737C000910C002E2102108001C79D0
-:10308000A446727C02E410219445727C08001C2E38
-:10309000000510C09443737E97420212146200062A
-:1030A000000510C0009710218C4373808F420214DA
-:1030B00010620065000510C002E210219445737C87
-:1030C000000510C002E210219442737C304280005F
-:1030D0001040FFF000971021000520C0009710213C
-:1030E0009443737E97420212146200062406FFFF87
-:1030F000009710218C4373808F420214106200539A
-:103100003C02080000002021000410C002E210214F
-:103110009442737C304240005440000500803021CE
-:10312000248400012C8200801440FFF8000410C0A9
-:1031300004C10023000618C0000910C00057182160
-:103140008C63727C00571021AFA300108C427280F8
-:103150003C04000124845384AFA200148F4702145E
-:103160003C0500030C00240334A5F01708001C9054
-:103170003C0208008F43021000B71021AC43777C5B
-:103180008F43021400B71021AC4377803C0200014A
-:10319000005710218C4283B4244200013C010001FD
-:1031A00000370821AC2283B43C03000100771821CA
-:1031B0008C6383B402E5102108001C82A443777C51
-:1031C0009744021200771021A444737E8F440214A6
-:1031D0000077102102E31821AC4473803402800090
-:1031E000A462737C000510C002E21021A446737C27
-:1031F00000002021000428C002E510219442777CC1
-:103200001040FFDC248400012C8200805440FFFA2F
-:10321000000428C092E204D81040000624020001F5
-:103220008EE304DC012210040062182508001C8FC4
-:10323000AEE304DC8F830228240200010122100483
-:1032400000621825AF8302283C02080034421000B7
-:10325000AFA200188EE206088F4302282442000124
-:10326000304A00FF514300FDAFA000108EE2060877
-:10327000000210C0005710218FA300188FA4001C5B
-:10328000AC43060CAC4406108F8300548F8200546C
-:1032900024690032012210232C4200331040006ABE
-:1032A0000000582124100008240F000D240D0007F1
-:1032B000240C0040240E00018F8701202762380073
-:1032C00024E800200102102B504000012768300044
-:1032D0008F82012811020004000000008F82012467
-:1032E00015020007000010218EE201A40000382121
-:1032F00024420001AEE201A408001D088EE201A4F0
-:103300008EE40608000420C0008018218EE40430FA
-:103310008EE5043400A3282100A3302B0082202155
-:1033200000862021ACE40000ACE500048EE2060833
-:10333000A4F0000EACEF0018ACEA001C000210C0B4
-:103340002442060C02E21021ACE200088EE204C422
-:10335000ACE20010AF88012092E24E20144000330E
-:10336000240700018EE24E30000210C02442503883
-:1033700002E220218C820000144D001F000000009A
-:103380008EE34E308EE24E341062001B00000000CF
-:103390008C82000424420001AC8200048EE24E3490
-:1033A0008EE34E3024420001104C00070000000064
-:1033B0008EE24E342442000110620005000000003D
-:1033C00008001CF50000000014600005000000006B
-:1033D0008F82012824420020AF8201288F82012899
-:1033E0008C8200042C42001150400010AC80000080
-:1033F00008001D08000000008EE24E30244200014B
-:10340000504C0003000010218EE24E302442000197
-:10341000AEE24E308EE24E30000210C024425038F0
-:1034200002E22021AC8D0000AC8E000454E00006C6
-:10343000240B00018F820054012210232C42003300
-:103440001440FF9D00000000316300FF24020001D2
-:1034500054620078AFA00010AEEA06088F830054D3
-:103460008F82005424690032012210232C42003341
-:103470001040006100005821240E0008240D0011A6
-:10348000240A001224080040240C00018F8301202C
-:10349000276238002466002000C2102B5040000133
-:1034A000276630008F82012810C20004000000004F
-:1034B0008F82012414C20007000000008EE201A4E4
-:1034C0000000382124420001AEE201A408001D746E
-:1034D0008EE201A48EE20608AC62001C8EE404A019
-:1034E0008EE504A42462001CAC620008A46E000EE9
-:1034F000AC6D0018AC640000AC6500048EE204C43E
-:10350000AC620010AF86012092E24E2014400033DE
-:10351000240700018EE24E30000210C024425038D1
-:1035200002E220218C820000144A001F00000000EB
-:103530008EE34E308EE24E341062001B000000001D
-:103540008C82000424420001AC8200048EE24E34DE
-:103550008EE34E30244200011048000700000000B6
-:103560008EE24E342442000110620005000000008B
-:1035700008001D610000000014600005000000004C
-:103580008F82012824420020AF8201288F820128E7
-:103590008C8200042C42001150400010AC800000CE
-:1035A00008001D74000000008EE24E30244200012D
-:1035B00050480003000010218EE24E3024420001EA
-:1035C000AEE24E308EE24E30000210C0244250383F
-:1035D00002E22021AC8A0000AC8C000454E000061A
-:1035E000240B00018F820054012210232C4200334F
-:1035F0001440FFA600000000316300FF2402000118
-:1036000010620022000000003C040001248453905A
-:10361000AFA00010AFA000148F8601208F87012477
-:103620003C0500090C00240334A5F01108001DA07E
-:10363000000000003C0400012484539CAFA000144F
-:103640008F8601208F8701243C0500090C0024038C
-:1036500034A5F01008001DA0000000003C0400018B
-:10366000248453A8AFA000148EE606088F470228D2
-:103670003C0500090C00240334A5F00F8EE201ACD8
-:1036800024420001AEE201AC8EE201AC8EE20124E4
-:1036900024420001AEE2012408001F978EE20124BB
-:1036A000274402120C0022FE240500063049001FA8
-:1036B000000928C002E510219442727C304280004B
-:1036C0001040002F02E510219442727C30424000ED
-:1036D0001440001C00B710219443727E97420212DE
-:1036E0001462001800B710218C4372808F420214BC
-:1036F00054620016AFA2001092E204D810400007F6
-:10370000240200018EE304DC0122100400021027D1
-:103710000062182408001DC9AEE304DC8F83022870
-:10372000012210040002102700621824AF8302282F
-:10373000000910C002E218213402C00008001E4E29
-:10374000A462727C8F420214AFA20010000910C064
-:10375000005710218C42727C3C040001248453B435
-:103760003C050003AFA200148F47021034A5F01CE3
-:103770000C0024030120302108001E833C020800B5
-:1037800000B710219443727E97420212146200190E
-:10379000000918C000B710218C4372808F420214B8
-:1037A00014620014000918C002E510219447727CCD
-:1037B000000720C0009710219443737E00B71021AA
-:1037C000A443727E009710218C43738000B71021B0
-:1037D000AC43728002E410219443737C02E5102113
-:1037E000A443727C02E418213402C00008001E4E7B
-:1037F000A462737C02E310219447727C00003021A4
-:10380000000720C002E410219442737C0000402194
-:10381000304280001440002500E028210060502143
-:10382000340BC000009710219443737E974202121C
-:103830005462001500E02821009710218C4373800A
-:103840008F4202145462001000E02821110000068B
-:1038500002E410219443737C000510C002E21021A1
-:1038600008001E1AA443737C9443737C02EA10215F
-:10387000A443727C000710C002E21021A44B737CA9
-:1038800008001E2824060001000510C002E21021D5
-:103890009447737C000720C002E410219442737C9B
-:1038A000304280001040FFDF2508000130C200FFD9
-:1038B0001440002500002021000720C0009710219F
-:1038C0009443737E974202121462000F000910C0E5
-:1038D000009710218C4373808F4202141462000AF7
-:1038E000000910C002E418213402C00015000015C0
-:1038F000A462737C000910C002E218213402800027
-:1039000008001E4EA462727C005710218C42727C0B
-:103910003C040001248453C03C050003AFA2001006
-:10392000000710C0005710218C42737C34A5001E84
-:10393000012030210C002403AFA2001408001E83D4
-:103940003C02080000002021000428C000B710211C
-:103950009443777E974202125462002B2484000124
-:1039600000B710218C4377808F42021454620026E6
-:10397000248400013C020001005710218C4283B4D2
-:103980002442FFFF3C01000100370821AC2283B430
-:103990003C020001005710218C4283B4008090212A
-:1039A0000242102B1040000E24B1777C24B07784A3
-:1039B00002F0202102F128210C00249024060008A6
-:1039C000263100083C020001005710218C4283B4CC
-:1039D000265200010242102B1440FFF52610000869
-:1039E0003C040001009720218C8483B42405000846
-:1039F000000420C02484777C0C00248802E4202169
-:103A000008001E833C0208002C8200801440FFCF77
-:103A1000000428C03C02080034422000AFA2001875
-:103A20008EE206088F43022824420001304A00FF3C
-:103A3000514300FDAFA000108EE20608000210C046
-:103A4000005710218FA300188FA4001CAC43060C54
-:103A5000AC4406108F8300548F82005424690032D6
-:103A6000012210232C4200331040006A000058212C
-:103A700024100008240F000D240D0007240C004022
-:103A8000240E00018F8701202762380024E80020DF
-:103A90000102102B50400001276830008F8201285E
-:103AA00011020004000000008F82012415020007AB
-:103AB000000010218EE201A4000038212442000100
-:103AC000AEE201A408001EFB8EE201A48EE406080B
-:103AD000000420C0008018218EE404308EE50434F8
-:103AE00000A3282100A3302B008220210086202162
-:103AF000ACE40000ACE500048EE20608A4F0000E81
-:103B0000ACEF0018ACEA001C000210C02442060C06
-:103B100002E21021ACE200088EE204C4ACE2001024
-:103B2000AF88012092E24E201440003324070001A8
-:103B30008EE24E30000210C02442503802E22021B2
-:103B40008C820000144D001F000000008EE34E30F8
-:103B50008EE24E341062001B000000008C820004D4
-:103B600024420001AC8200048EE24E348EE34E30DB
-:103B700024420001104C0007000000008EE24E3489
-:103B800024420001106200050000000008001EE849
-:103B90000000000014600005000000008F82012872
-:103BA00024420020AF8201288F8201288C820004E9
-:103BB0002C42001150400010AC80000008001EFB99
-:103BC000000000008EE24E3024420001504C000301
-:103BD000000010218EE24E3024420001AEE24E3051
-:103BE0008EE24E30000210C02442503802E2202102
-:103BF000AC8D0000AC8E000454E00006240B0001E4
-:103C00008F820054012210232C4200331440FF9D68
-:103C100000000000316300FF2402000154620078BC
-:103C2000AFA00010AEEA06088F8300548F820054C4
-:103C300024690032012210232C420033104000611D
-:103C400000005821240E0008240D0011240A00123F
-:103C500024080040240C00018F83012027623800D3
-:103C60002466002000C2102B50400001276630005F
-:103C70008F82012810C20004000000008F820124FE
-:103C800014C20007000000008EE201A400003821E9
-:103C900024420001AEE201A408001F678EE201A4E5
-:103CA0008EE20608AC62001C8EE404A08EE504A43B
-:103CB0002462001CAC620008A46E000EAC6D0018FB
-:103CC000AC640000AC6500048EE204C4AC62001079
-:103CD000AF86012092E24E201440003324070001F9
-:103CE0008EE24E30000210C02442503802E2202101
-:103CF0008C820000144A001F000000008EE34E304A
-:103D00008EE24E341062001B000000008C82000422
-:103D100024420001AC8200048EE24E348EE34E3029
-:103D20002442000110480007000000008EE24E34DB
-:103D300024420001106200050000000008001F542A
-:103D40000000000014600005000000008F820128C0
-:103D500024420020AF8201288F8201288C82000437
-:103D60002C42001150400010AC80000008001F677A
-:103D7000000000008EE24E30244200015048000353
-:103D8000000010218EE24E3024420001AEE24E309F
-:103D90008EE24E30000210C02442503802E2202150
-:103DA000AC8A0000AC8C000454E00006240B000137
-:103DB0008F820054012210232C4200331440FFA6AE
-:103DC00000000000316300FF2402000110620022A5
-:103DD000000000003C04000124845390AFA00010B8
-:103DE000AFA000148F8601208F8701243C050009B5
-:103DF0000C00240334A5F01108001F9300000000FC
-:103E00003C0400012484539CAFA000148F86012041
-:103E10008F8701243C0500090C00240334A5F01011
-:103E200008001F93000000003C040001248453A8F4
-:103E3000AFA000148EE606088F4702283C05000953
-:103E40000C00240334A5F00F8EE201AC24420001E3
-:103E5000AEE201AC8EE201AC8EE201282442000108
-:103E6000AEE201288EE201288EE2016424420001C4
-:103E7000AEE20164080022E88EE201648FA2002015
-:103E80000002120000021D0224020001106200055F
-:103E9000240200021062000D0000000008001FB79D
-:103EA000AFA0001092E204D81440000624020001E2
-:103EB0008F820228AEE204DC2402FFFFAF820228D8
-:103EC0002402000108001FBEA2E204D892E204D836
-:103ED0005040000CA2E004D88EE204DCAF8202283D
-:103EE00008001FBEA2E004D83C040001248453C88B
-:103EF000AFA000148FA600203C0500030C00240393
-:103F000034A5F0098EE2013C24420001AEE2013CFE
-:103F1000080022E88EE2013C8FA20020000212007D
-:103F20000002250224020001108200052402000282
-:103F30001082000F0000000008001FE3AFA0001077
-:103F40008F8202203C0308FF3463FFFF00431024EC
-:103F500034420008AF820220240200013C0100012B
-:103F600000370821A02283B208001FEAAEE401084E
-:103F70008F8202203C0308FF3463FFF700431024C4
-:103F8000AF8202203C01000100370821A02083B24B
-:103F900008001FEAAEE401083C040001248453D465
-:103FA000AFA000148FA600203C0500030C002403E2
-:103FB00034A5F00A8EE2012C24420001AEE2012C6D
-:103FC000080022E88EE2012C8FA2002000021200DD
-:103FD00000021D02240200011062000524020002FA
-:103FE0001062000E0000000008002011AFA00010B9
-:103FF0008F8202203C0308FF3463FFFF004310243C
-:1040000034420008AF820220240200013C0100017A
-:104010000037082108002018A02283B33C020001C9
-:1040200000571021904283B23C0100010037082163
-:104030001440000EA02083B38F8202203C0308FFAF
-:104040003463FFF70043102408002018AF820220D9
-:104050003C040001248453E0AFA000148FA600208C
-:104060003C0500030C00240334A5F00B8EE2011480
-:1040700024420001AEE20114080022E88EE201149D
-:1040800027840208274502000C00249A2406000811
-:1040900026E40094274502000C00249A2406000818
-:1040A0008EE2013424420001AEE20134080022E82D
-:1040B0008EE201348F460248000020210C00510896
-:1040C000240500048EE2013024420001AEE20130FA
-:1040D000080022E88EE201308EF301CC8EF401D08C
-:1040E0008EF501D88EE2014026E400302442000122
-:1040F000AEE201408EF001408EF100748EF200704D
-:104100000C00248824050400AEF301CCAEF401D0E9
-:10411000AEF501D8AEF00140AEF10074AEF2007021
-:104120008F42025C26E40094AEE200608F4202609F
-:104130002745020024060008AEE2006824020006BB
-:104140000C00249AAEE200643C023B9A3442CA005E
-:10415000AEE2006C240203E8240400022403000100
-:10416000AEE20104AEE40100AEE3010C8F82022056
-:10417000304200081040000400000000AEE30108D7
-:104180000800206100002021AEE401080000202189
-:104190003C0300010064182190635C3002E41021AC
-:1041A00024840001A043009C2C82000F1440FFF8DF
-:1041B000000000008F82004002E4182124840001E6
-:1041C0000002170224420030A062009C02E4102189
-:1041D000080022E8A040009C240200013C010001EC
-:1041E00000370821A02283E0240B040024080014D7
-:1041F000240A0040240900018F8301002762300057
-:104200002466002000C2102B5040000127662800C1
-:104210008F82010810C20004000000008F82010498
-:1042200014C2000726E200308EE201A80000382107
-:1042300024420001AEE201A8080020A88EE201A8F5
-:104240008EE404B88EE504BCAC620008A46B000EDA
-:10425000AC680018AC60001CAC640000AC650004E5
-:104260008EE204CCAC620010AF86010092E204EC56
-:104270001440000E240700018EE24E282442000163
-:10428000504A0003000010218EE24E282442000113
-:10429000AEE24E288EE24E28000210C024424E3874
-:1042A00002E21021AC480000AC49000410E0FFD24B
-:1042B00000000000080022E8000000003C020900A5
-:1042C000AEE05238AEE0523CAEE05240AEE0524476
-:1042D000AEE001D03C01000100370821A02083B1ED
-:1042E000AFA200188EE206088F4302282442000184
-:1042F000304A00FF514300FDAFA000108EE20608D7
-:10430000000210C0005710218FA300188FA4001CBA
-:10431000AC43060CAC4406108F8300548F820054CB
-:1043200024690032012210232C4200331040006A1D
-:104330000000582124100008240F000D240D000750
-:10434000240C0040240E00018F87012027623800D2
-:1043500024E800200102102B5040000127683000A3
-:104360008F82012811020004000000008F820124C6
-:1043700015020007000010218EE201A40000382180
-:1043800024420001AEE201A40800212C8EE201A427
-:104390008EE40608000420C0008018218EE404305A
-:1043A0008EE5043400A3282100A3302B00822021B5
-:1043B00000862021ACE40000ACE500048EE2060893
-:1043C000A4F0000EACEF0018ACEA001C000210C014
-:1043D0002442060C02E21021ACE200088EE204C482
-:1043E000ACE20010AF88012092E24E20144000336E
-:1043F000240700018EE24E30000210C024425038E3
-:1044000002E220218C820000144D001F00000000F9
-:104410008EE34E308EE24E341062001B000000002E
-:104420008C82000424420001AC8200048EE24E34EF
-:104430008EE34E3024420001104C000700000000C3
-:104440008EE24E342442000110620005000000009C
-:1044500008002119000000001460000500000000A1
-:104460008F82012824420020AF8201288F820128F8
-:104470008C8200042C42001150400010AC800000DF
-:104480000800212C000000008EE24E302442000182
-:10449000504C0003000010218EE24E3024420001F7
-:1044A000AEE24E308EE24E30000210C02442503850
-:1044B00002E22021AC8D0000AC8E000454E0000626
-:1044C000240B00018F820054012210232C42003360
-:1044D0001440FF9D00000000316300FF2402000132
-:1044E00054620078AFA00010AEEA06088F83005433
-:1044F0008F82005424690032012210232C420033A1
-:104500001040006100005821240E0008240D001105
-:10451000240A001224080040240C00018F8301208B
-:10452000276238002466002000C2102B5040000192
-:10453000276630008F82012810C2000400000000AE
-:104540008F82012414C20007000000008EE201A443
-:104550000000382124420001AEE201A408002198A5
-:104560008EE201A48EE20608AC62001C8EE404A078
-:104570008EE504A42462001CAC620008A46E000E48
-:10458000AC6D0018AC640000AC6500048EE204C49D
-:10459000AC620010AF86012092E24E20144000333E
-:1045A000240700018EE24E30000210C02442503831
-:1045B00002E220218C820000144A001F000000004B
-:1045C0008EE34E308EE24E341062001B000000007D
-:1045D0008C82000424420001AC8200048EE24E343E
-:1045E0008EE34E3024420001104800070000000016
-:1045F0008EE24E34244200011062000500000000EB
-:104600000800218500000000146000050000000083
-:104610008F82012824420020AF8201288F82012846
-:104620008C8200042C42001150400010AC8000002D
-:1046300008002198000000008EE24E302442000164
-:1046400050480003000010218EE24E302442000149
-:10465000AEE24E308EE24E30000210C0244250389E
-:1046600002E22021AC8A0000AC8C000454E0000679
-:10467000240B00018F820054012210232C420033AE
-:104680001440FFA600000000316300FF2402000177
-:1046900010620022000000003C04000124845390BA
-:1046A000AFA00010AFA000148F8601208F870124D7
-:1046B0003C0500090C00240334A5F011080021C4B6
-:1046C000000000003C0400012484539CAFA00014AF
-:1046D0008F8601208F8701243C0500090C002403EC
-:1046E00034A5F010080021C4000000003C040001C3
-:1046F000248453A8AFA000148EE606088F47022832
-:104700003C0500090C00240334A5F00F8EE201AC37
-:1047100024420001AEE201AC8EE201AC8EE2012047
-:1047200024420001AEE201208EE201208EE2016807
-:1047300024420001AEE20168080022E88EE201682E
-:104740008F42025C26E40094AEE200608F42026079
-:1047500027450200240600080C00249AAEE20068F7
-:104760008F8202203042000814400002240200011F
-:1047700024020002AEE201088EE2011C2442000184
-:10478000AEE2011C080022E88EE2011C3C0400019C
-:10479000248453ECAFA00010AFA000148FA600201B
-:1047A0003C0500030C00240334A5F00F93A2002065
-:1047B0003C0307003463100000431025AFA200182B
-:1047C0008EE206088F43022824420001304900FF90
-:1047D000512300E2AFA000108EE20608000210C0D4
-:1047E000005710218FA300188FA4001CAC43060CA7
-:1047F000AC4406108F8701202762380024E800208F
-:104800000102102B50400001276830008F820128E0
-:1048100011020004000000008F820124150200072D
-:10482000000010218EE201A4000038212442000182
-:10483000AEE201A40800225D8EE201A48EE4060827
-:10484000000420C0008018218EE404308EE504347A
-:1048500000A3282100A3302B0082202100862021E4
-:10486000ACE40000ACE500048EE306082402000876
-:10487000A4E2000E2402000DACE20018ACE9001C1A
-:10488000000318C02463060C02E31021ACE2000808
-:104890008EE204C4ACE20010AF88012092E24E2008
-:1048A00014400037240700018EE24E30000210C091
-:1048B0002442503802E220218C83000024020007A9
-:1048C0001462001F000000008EE34E308EE24E3472
-:1048D0001062001B240300408C820004244200016B
-:1048E000AC8200048EE24E348EE54E30244200014C
-:1048F00010430007000000008EE24E342442000105
-:1049000010A200050000000008002247000000007F
-:1049100014A00005000000008F820128244200201E
-:10492000AF8201288F8201288C8200042C42001162
-:1049300050400013AC8000000800225D0000000021
-:104940008EE24E3024030040244200015043000315
-:10495000000010218EE24E3024420001AEE24E30C3
-:104960008EE24E30000210C02442503802E2202174
-:1049700024020007AC82000024020001AC82000483
-:1049800054E0000CAEE906083C040001248453F412
-:10499000AFA00010AFA000148EE606088F470228D3
-:1049A0003C0500090C00240334A5F000080022E0B7
-:1049B000000000008F830120276238002466002059
-:1049C00000C2102B50400001276630008F82012862
-:1049D00010C20004000000008F82012414C20007EE
-:1049E000000000008EE201A40000382124420001F2
-:1049F000AEE201A4080022C48EE201A48EE2060801
-:104A0000AC62001C8EE404A08EE504A42462001CA9
-:104A1000AC62000824020008A462000E2402001107
-:104A2000AC620018AC640000AC6500048EE204C403
-:104A3000AC620010AF86012092E24E201440003795
-:104A4000240700018EE24E30000210C0244250388C
-:104A500002E220218C830000240200121462001F55
-:104A6000000000008EE34E308EE24E341062001BD8
-:104A7000240300408C82000424420001AC82000424
-:104A80008EE24E348EE54E30244200011043000782
-:104A9000000000008EE24E342442000110A2000506
-:104AA00000000000080022AE0000000014A0000575
-:104AB000000000008F82012824420020AF820128DC
-:104AC0008F8201288C8200042C4200115040001378
-:104AD000AC800000080022C4000000008EE24E30CE
-:104AE0002403004024420001504300030000102131
-:104AF0008EE24E3024420001AEE24E308EE24E3065
-:104B0000000210C02442503802E220212402001288
-:104B1000AC82000024020001AC82000414E0001BFF
-:104B2000000000003C040001248453FCAFA00010EE
-:104B3000AFA000148EE606088F4702283C05000946
-:104B40000C00240334A5F0018EE201B024420001E0
-:104B5000AEE201B0080022E08EE201B03C040001A8
-:104B600024845408AFA000148EE606088F4702285C
-:104B70003C0500090C00240334A5F0058EE201ACCD
-:104B800024420001AEE201AC8EE201AC8EE20150A3
-:104B900024420001AEE201508EE201508EE201603B
-:104BA00024420001AEE201608EE201608F43022CDC
-:104BB0008F42010C1462000924020002AF820064DB
-:104BC0008F82006414400005000000008F43022C17
-:104BD0008F42010C1462F875000000008FBF004482
-:104BE0008FB600408FB5003C8FB400388FB30034CF
-:104BF0008FB200308FB1002C8FB0002803E0000886
-:104C000027BD004827BDFFF82408FFFF10A00014AF
-:104C1000000048213C0AEDB8354A83209087000007
-:104C200024840001000030210107102630420001D9
-:104C30001040000200081842006A18260060402157
-:104C400024C600012CC200081440FFF700073842B8
-:104C5000252900010125102B1440FFF00000000061
-:104C60000100102103E0000827BD000827BDFFE870
-:104C700027642800AFBF00100C0024882405100012
-:104C800024020021AF800100AF800104AF80010841
-:104C9000AF800110AF800114AF800118AF800120F8
-:104CA000AF800124AF800128AF800130AF80013494
-:104CB000AF800138AEE04E28AEE04E2CAEE04E3074
-:104CC000AEE04E34AF82011C8F42021830420040E9
-:104CD00010400004000000008F82011C34420004D8
-:104CE000AF82011C8FBF001003E0000827BD001831
-:104CF00027BDFFE0AFBF00188F820104AFA20010F4
-:104D00008F8201003C050002AFA200148F8600B024
-:104D10008F87011C3C040001248454C00C00240330
-:104D200034A5F0008F8300B03C027F00006218249D
-:104D30003C020400106200290043102B14400008BC
-:104D40003C0220003C020100106200243C020200F0
-:104D50001062001100000000080023740000000031
-:104D6000106200083C0240001462001C00000000B9
-:104D70008EE2019024420001AEE20190080023740B
-:104D80008EE201908EE2018C24420001AEE2018CA1
-:104D9000080023748EE2018C8F82011C34420002D1
-:104DA000AF82011C8F8301048F8200B03442000166
-:104DB000AF8200B0AF8301048F82011C2403FFFD8A
-:104DC00000431024AF82011C8EE201A024420001A6
-:104DD000AEE201A0080023778EE201A08F8200B02E
-:104DE00034420001AF8200B08FBF001803E000081A
-:104DF00027BD002027BDFFE0AFBF001CAFB00018EB
-:104E00008F820120AFA200108F8201243C05000197
-:104E1000AFA200148F8600A08F87011C3C04000104
-:104E2000248454CC0C00240334A5F0008F8300A00C
-:104E30003C027F00006218243C0204001062005310
-:104E4000000080210043102B144000083C04200087
-:104E50003C0201001062004D3C0202001062003A68
-:104E600000000000080023E00000000010640003C0
-:104E70003C02400014620045000000008F8200A048
-:104E80000044102410400006000000008EE201944F
-:104E900024420001AEE20194080023A98EE20194AD
-:104EA0008EE2019824420001AEE201988EE2019860
-:104EB0008F82011C34420002AF82011C8F82011CD0
-:104EC000304202001040001B000000008F8300A051
-:104ED0008F8401248F8200AC14400007240200015B
-:104EE0003C0200013442F0000062102450400001F6
-:104EF00024100001240200011200000DAF8200A066
-:104F00008F8201242442FFE0AF8201248F8201249A
-:104F10008F820124276330000043102B10400005CE
-:104F2000276237E0AF820124080023CA0000000096
-:104F3000AF8401248F82011C2403FFFD0043102451
-:104F4000080023E3AF82011C8F82011C344200025F
-:104F5000AF82011C8F8301248F8200A034420001A4
-:104F6000AF8200A0AF8301248F82011C2403FFFDC8
-:104F700000431024AF82011C8EE2019C24420001F8
-:104F8000AEE2019C080023E38EE2019C8F8200A028
-:104F900034420001AF8200A08FBF001C8FB0001808
-:104FA00003E0000827BD0020000000003C020001D3
-:104FB0008C425C5827BDFFE8AFBF001414400012BC
-:104FC000AFB000103C10000126105DD0020020217F
-:104FD0000C0024882405200026021FE03C0100016B
-:104FE000AC225D943C010001AC225D90AF420250C6
-:104FF00024022000AF500254AF42025824020001A4
-:105000003C010001AC225C588FBF00148FB000102F
-:1050100003E0000827BD00183C0300018C635D9489
-:105020008C8200008FA800108FA90014AC620000D1
-:105030003C0200018C425D948C830004AC4300046C
-:10504000AC4500088F8400542443FFE0AC460010B8
-:10505000AC470014AC480018AC49001C3C010001EE
-:10506000AC235D94AC44000C3C02000124425DD0B2
-:105070000062182B10600005000000003C020001D7
-:105080008C425D903C010001AC225D943C03000128
-:105090008C635D943C0200018C425C40AC62000079
-:1050A0003C0300018C635D943C0200018C425C4037
-:1050B000AC62000403E00008AF4302503C0300016F
-:1050C0008C635D943C0200018C425C4027BDFFD0A4
-:1050D000AFB400208FB40040AFB00010008080213A
-:1050E000AFB500248FB500448FA40048AFB10014C1
-:1050F00000A08821AFBF0028AFB3001CAFB20018DA
-:10510000AC6200003C0500018CA55D943C020001EE
-:105110008C425C4000C0902100E098211080000685
-:10512000ACA2000424A500080C002490240600185A
-:105130000800244E0000000024A400080C0024886D
-:10514000240500183C0200018C425D943C050001DE
-:1051500024A55DD02442FFE03C010001AC225D9417
-:105160000045102B10400005000000003C0200012B
-:105170008C425D903C010001AC225D943C03000137
-:105180008C635D948E020000AC6200003C03000161
-:105190008C635D948E020004AC620004AC71000864
-:1051A0008F8400542462FFE03C010001AC225D9436
-:1051B0000045102BAC720010AC730014AC740018D6
-:1051C000AC75001C10400005AC64000C3C020001F2
-:1051D0008C425D903C010001AC225D943C030001D7
-:1051E0008C635D943C0200018C425C40AC62000028
-:1051F0003C0300018C635D943C0200018C425C40E6
-:10520000AC620004AF4302508FBF00288FB500246A
-:105210008FB400208FB3001C8FB200188FB1001420
-:105220008FB0001003E0000827BD003010A000057B
-:1052300000000000AC80000024A5FFFC14A0FFFDCE
-:105240002484000403E000080000000010C00007F0
-:10525000000000008C8200002484000424C6FFFCAF
-:10526000ACA2000014C0FFFB24A5000403E000086A
-:105270000000000010C00007000000008CA2000029
-:1052800024A5000424C6FFFCAC82000014C0FFFB70
-:105290002484000403E000080000000003E000088C
-:1052A0000000000027BDFFD8AFBF00208EE304E45C
-:1052B0008EE204E010620436000000008EE204E496
-:1052C0008EE304FC00021100006260219587000853
-:1052D0008D8A00008D8B0004958D000A8EE2725C31
-:1052E0008EE3726C30E4FFFF004410210062182B43
-:1052F0001060001531A200048F8200D88EE372582E
-:1053000000431023AEE2726C8EE2726C1C4000030C
-:105310003C03000100431021AEE2726C8EE2725C2D
-:105320008EE3726C004410210062182B106000069E
-:1053300031A200048EE201B824420001AEE201B8BD
-:10534000080028E18EE201B81040024031A20200BC
-:105350001040014D0000482196E2045A30420010EE
-:1053600010400149000000008F84010027623000D6
-:105370002485002000A2102B504000012765280042
-:105380008F82010810A20004000000008F82010437
-:1053900014A200062402000C8EE201A8244200019F
-:1053A000AEE201A80800252C8EE201A8AC8A00001C
-:1053B000AC8B00048EE3726424060005A482000E08
-:1053C000AC860018AC8300088EE204E4AC82001CBA
-:1053D0008EE204C8AC820010AF85010092E204ECBA
-:1053E00014400036240900018EE24E28000210C04D
-:1053F00024424E3802E220218C8200001446001F15
-:10540000000000008EE34E288EE24E2C1062001B3E
-:10541000240300408C82000424420001AC8200047A
-:105420008EE24E2C8EE54E282442000110430007E8
-:10543000000000008EE24E2C2442000110A2000564
-:1054400000000000080025160000000014A0000560
-:10545000000000008F82010824420020AF82010872
-:105460008F8201088C8200042C42001150400013EE
-:10547000AC8000000800252C000000008EE24E28C1
-:105480002403004024420001504300030000102187
-:105490008EE24E2824420001AEE24E288EE24E28D3
-:1054A000000210C024424E3802E2202124020005EE
-:1054B000AC82000024020001AC8200041520000A26
-:1054C0003C040001AFAB00108EE272643C040001AA
-:1054D000248457303C050004AFA200148EE604E497
-:1054E000080028BE34A5F1148EE2726434843800BA
-:1054F00003641821244200100043102B1440007351
-:10550000000000008EE27264244800100364102141
-:105510000102102B144000023C02FFFF0102402157
-:105520008F8501002762300024A6002000C2102BC6
-:1055300050400001276628008F82010810C2000435
-:10554000000000008F82010414C200072563000CD4
-:105550008EE201A80000482124420001AEE201A829
-:10556000080025A08EE201A82C64000C0144102143
-:10557000ACA20000ACA3000424E2FFF4A4A2000E3D
-:1055800024020006ACA80008ACA200188EE204E4D5
-:10559000ACA2001C8EE204C83C03000200431025AC
-:1055A000ACA20010AF86010092E204EC1440003778
-:1055B000240900018EE24E28000210C024424E3819
-:1055C00002E220218C830000240200051462001FE7
-:1055D000000000008EE34E288EE24E2C1062001B6D
-:1055E000240300408C82000424420001AC820004A9
-:1055F0008EE24E2C8EE54E28244200011043000717
-:10560000000000008EE24E2C2442000110A2000592
-:10561000000000000800258A0000000014A000051A
-:10562000000000008F82010824420020AF820108A0
-:105630008F8201088C8200042C420011504000131C
-:10564000AC800000080025A0000000008EE24E287B
-:1056500024030040244200015043000300001021B5
-:105660008EE24E2824420001AEE24E288EE24E2801
-:10567000000210C024424E3802E22021240200051C
-:10568000AC82000024020001AC8200041520000A54
-:105690002508FFFCAFAB00108EE272643C040001F1
-:1056A000248457303C050004AFA200148EE604E4C5
-:1056B000080028BE34A5F12534028100A5020000AF
-:1056C0009582000E0800261DA50200028F850100AC
-:1056D0002762300024A6002000C2102B5040000199
-:1056E000276628008F82010810C200040000000015
-:1056F0008F82010414C200072563000C8EE201A80A
-:105700000000482124420001AEE201A80800260D55
-:105710008EE201A82C64000C01441021ACA2000010
-:10572000ACA300048EE3726424E2FFF4A4A2000E92
-:1057300024020006ACA2001824630010ACA30008E9
-:105740008EE204E4ACA2001C8EE204C83C0300021A
-:1057500000431025ACA20010AF86010092E204ECD9
-:1057600014400037240900018EE24E28000210C0C8
-:1057700024424E3802E220218C83000024020005DE
-:105780001462001F000000008EE34E288EE24E2CB3
-:105790001062001B240300408C820004244200019C
-:1057A000AC8200048EE24E2C8EE54E28244200018D
-:1057B00010430007000000008EE24E2C244200013E
-:1057C00010A2000500000000080025F700000000FE
-:1057D00014A00005000000008F8201082442002070
-:1057E000AF8201088F8201088C8200042C420011D4
-:1057F00050400013AC8000000800260D000000009F
-:105800008EE24E282403004024420001504300034E
-:10581000000010218EE24E2824420001AEE24E2804
-:105820008EE24E28000210C024424E3802E22021AF
-:1058300024020005AC82000024020001AC820004B6
-:105840001520000A34028100AFAB00108EE27264B2
-:105850003C040001248457303C050004AFA200142E
-:105860008EE604E4080028BE34A5F0158EE37264C9
-:10587000A462000C8EE372649582000EA462000E96
-:105880000800268124E700048F840100276230008D
-:105890002485002000A2102B50400001276528001D
-:1058A0008F82010810A20004000000008F82010412
-:1058B00014A20007240200068EE201A8000048217D
-:1058C00024420001AEE201A8080026778EE201A87A
-:1058D000AC8A0000AC8B00048EE37264A487000ED7
-:1058E000AC820018AC8300088EE204E4AC82001C99
-:1058F0008EE204C83C03000200431025AC82001075
-:10590000AF85010092E204EC144000372409000145
-:105910008EE24E28000210C024424E3802E22021BE
-:105920008C830000240200051462001F00000000A8
-:105930008EE34E288EE24E2C1062001B24030040A2
-:105940008C82000424420001AC8200048EE24E2CC2
-:105950008EE54E282442000110430007000000009D
-:105960008EE24E2C2442000110A20005000000002F
-:10597000080026610000000014A0000500000000DF
-:105980008F82010824420020AF8201088F82010823
-:105990008C8200042C42001150400013AC800000A7
-:1059A00008002677000000008EE24E282403004005
-:1059B0002442000150430003000010218EE24E28D3
-:1059C00024420001AEE24E288EE24E28000210C0B2
-:1059D00024424E3802E2202124020005AC8200005D
-:1059E00024020001AC820004152000093C050004DB
-:1059F000AFAB00108EE272643C0400012484573087
-:105A0000AFA200148EE604E4080028BE34A5F0041A
-:105A10008EE2725C30E7FFFF00471021AEE2725C5D
-:105A20008EE204E48EE304FC8EE47258000211005E
-:105A300000431021AC44000C8EE27258AFA2001853
-:105A40008EE3725CAFA3001C8EE2725C2C42003CC1
-:105A500010400004246200012403FFFE00431024D0
-:105A6000AFA2001C8EE272643C06000134C638000E
-:105A70008EE3725C2405FFF80047102124420007E2
-:105A80000045102424630007AEE272588EE2726C67
-:105A90008EE472580065182400431023AEE2726C45
-:105AA000036610210082202B148000043C03FFFFBA
-:105AB0008EE2725800431021AEE272588EE27258A4
-:105AC000AEE272648F8200F024470008276218005B
-:105AD00000E2102B50400001276710008F8200F475
-:105AE00014E20007000000008EE201B4000048212B
-:105AF00024420001AEE201B4080026C48EE201B4E3
-:105B00008F8200F0240900018FA300188FA4001CCD
-:105B1000AC430000AC440004AF8700F01520001235
-:105B2000000D11428F8200F0AFA200108F8200F4AE
-:105B30003C0400012484573CAFA200148FA6001837
-:105B40008FA7001C3C0500040C00240334A5F005BD
-:105B50008EE2008824420001AEE200888EE20088D6
-:105B6000080028D3AEE0725C304300032402000238
-:105B70001062001628620003104000052402000194
-:105B80001062000800000000080027030000000069
-:105B90002402000310620017000000000800270321
-:105BA000000000008EE200E88EE300EC24630001B8
-:105BB0002C64000100441021AEE200E8AEE300ECEA
-:105BC0008EE200E8080027038EE300EC8EE200F08E
-:105BD0008EE300F4246300012C64000100441021D2
-:105BE000AEE200F0AEE300F48EE200F0080027031E
-:105BF0008EE300F48EE200F88EE300FC24630001E3
-:105C00002C64000100441021AEE200F8AEE300FC79
-:105C10008EE200F88EE300FC8EE2725C8EE400E01F
-:105C20008EE500E4004018210000102100A3282187
-:105C300000A3302B0082202100862021AEE400E06A
-:105C4000AEE500E4080028D3AEE0725C30E2FFFF6E
-:105C5000104001C131A202001040014D0000482156
-:105C600096E2045A30420010104001490000000042
-:105C70008F840100276230002485002000A2102BB1
-:105C800050400001276528008F82010810A20004FF
-:105C9000000000008F82010414A200062402000C00
-:105CA0008EE201A824420001AEE201A80800276E9E
-:105CB0008EE201A8AC8A0000AC8B00048EE3726413
-:105CC00024060005A482000EAC860018AC830008F0
-:105CD0008EE204E4AC82001C8EE204C8AC820010A8
-:105CE000AF85010092E204EC144000362409000163
-:105CF0008EE24E28000210C024424E3802E22021DB
-:105D00008C8200001446001F000000008EE34E2825
-:105D10008EE24E2C1062001B240300408C82000493
-:105D200024420001AC8200048EE24E2C8EE54E2807
-:105D30002442000110430007000000008EE24E2CB8
-:105D40002442000110A200050000000008002758AE
-:105D50000000000014A00005000000008F82010870
-:105D600024420020AF8201088F8201088C82000447
-:105D70002C42001150400013AC8000000800276E38
-:105D8000000000008EE24E2824030040244200015F
-:105D900050430003000010218EE24E2824420001EF
-:105DA000AEE24E288EE24E28000210C024424E3849
-:105DB00002E2202124020005AC820000240200013E
-:105DC000AC8200041520000A3C040001AFAB0010B7
-:105DD0008EE272643C040001248457303C050004C8
-:105DE000AFA200148EE604E4080028BE34A5F01427
-:105DF0008EE2726434843800036418212442001057
-:105E00000043102B14400073000000008EE2726407
-:105E100024480010036410210102102B14400002DA
-:105E20003C02FFFF010240218F8501002762300004
-:105E300024A6002000C2102B504000012766280035
-:105E40008F82010810C20004000000008F8201044C
-:105E500014C200072563000C8EE201A8000048214F
-:105E600024420001AEE201A8080027E28EE201A868
-:105E70002C64000C01441021ACA20000ACA300046F
-:105E800024E2FFF4A4A2000E24020006ACA800083D
-:105E9000ACA200188EE204E4ACA2001C8EE204C89E
-:105EA0003C03000200431025ACA20010AF860100A5
-:105EB00092E204EC14400037240900018EE24E28DF
-:105EC000000210C024424E3802E220218C830000E0
-:105ED000240200051462001F000000008EE34E281B
-:105EE0008EE24E2C1062001B240300408C820004C2
-:105EF00024420001AC8200048EE24E2C8EE54E2836
-:105F00002442000110430007000000008EE24E2CE6
-:105F10002442000110A2000500000000080027CC68
-:105F20000000000014A00005000000008F8201089E
-:105F300024420020AF8201088F8201088C82000475
-:105F40002C42001150400013AC800000080027E2F2
-:105F5000000000008EE24E2824030040244200018D
-:105F600050430003000010218EE24E28244200011D
-:105F7000AEE24E288EE24E28000210C024424E3877
-:105F800002E2202124020005AC820000240200016C
-:105F9000AC8200041520000A2508FFFCAFAB0010FE
-:105FA0008EE272643C040001248457303C050004F6
-:105FB000AFA200148EE604E4080028BE34A5F01554
-:105FC00034028100A50200009582000E0800285FBF
-:105FD000A50200028F8501002762300024A6002060
-:105FE00000C2102B50400001276628008F82010854
-:105FF00010C20004000000008F82010414C20007D8
-:106000002563000C8EE201A8000048212442000113
-:10601000AEE201A80800284F8EE201A82C64000C13
-:1060200001441021ACA20000ACA300048EE3726412
-:1060300024E2FFF4A4A2000E24020006ACA2001881
-:1060400024630010ACA300088EE204E4ACA2001CA0
-:106050008EE204C83C03000200431025ACA20010ED
-:10606000AF86010092E204EC1440003724090001DD
-:106070008EE24E28000210C024424E3802E2202157
-:106080008C830000240200051462001F0000000041
-:106090008EE34E288EE24E2C1062001B240300403B
-:1060A0008C82000424420001AC8200048EE24E2C5B
-:1060B0008EE54E2824420001104300070000000036
-:1060C0008EE24E2C2442000110A2000500000000C8
-:1060D000080028390000000014A00005000000009E
-:1060E0008F82010824420020AF8201088F820108BC
-:1060F0008C8200042C42001150400013AC80000040
-:106100000800284F000000008EE24E2824030040C3
-:106110002442000150430003000010218EE24E286B
-:1061200024420001AEE24E288EE24E28000210C04A
-:1061300024424E3802E2202124020005AC820000F5
-:1061400024020001AC8200041520000A3402810000
-:10615000AFAB00108EE272643C040001248457301F
-:106160003C050004AFA200148EE604E4080028BE3B
-:1061700034A5F0168EE37264A462000C8EE37264A0
-:106180009582000EA462000E080028C224E70004D5
-:106190008F83010027623000246400200082102BCE
-:1061A00050400001276428008F82010810820004FB
-:1061B000000000008F8201041482000724050005FE
-:1061C0008EE201A80000482124420001AEE201A8AD
-:1061D000080028B68EE201A8AC6A0000AC6B00048F
-:1061E0008EE27264A467000EAC650018AC62000811
-:1061F0008EE204E4AC62001C8EE204C8AC620010C3
-:10620000AF84010092E204EC14400036240900013E
-:106210008EE24E28000210C024424E3802E22021B5
-:106220008C8200001445001F000000008EE34E2801
-:106230008EE24E2C1062001B240300408C8200046E
-:1062400024420001AC8200048EE24E2C8EE54E28E2
-:106250002442000110430007000000008EE24E2C93
-:106260002442000110A2000500000000080028A040
-:106270000000000014A00005000000008F8201084B
-:1062800024420020AF8201088F8201088C82000422
-:106290002C42001150400013AC800000080028B6CA
-:1062A000000000008EE24E2824030040244200013A
-:1062B00050430003000010218EE24E2824420001CA
-:1062C000AEE24E288EE24E28000210C024424E3824
-:1062D00002E2202124020005AC8200002402000119
-:1062E000AC8200041520000B3C0500043C040001B6
-:1062F00024845748AFAB0010AFA000148EE604E42E
-:1063000034A5F0170C00240330E7FFFF080028E154
-:10631000000000008EE272643C05000130E4FFFFE3
-:1063200000441021AEE272648EE2725C8EE372640D
-:1063300034A5380000441021AEE2725C03651021E0
-:106340000062182B146000043C03FFFF8EE27264AD
-:1063500000431021AEE272648EE304E496E2045836
-:10636000246300012442FFFF00621824AEE304E42A
-:106370008EE304E48EE204E01462000500000000F5
-:106380008F8200602403FFF700431024AF82006077
-:106390008FBF002003E0000827BD002827BDFFE0D5
-:1063A000AFBF00188EE304E88EE204E010620189BA
-:1063B000000000008EE204E88EE304FC00021100FD
-:1063C000006218219467000892E204ED8C680000D6
-:1063D0008C69000410400023946A000A8EE204C80D
-:1063E00034460400314202001040001F000000004B
-:1063F00096E2045A304200101040001B3C0280001C
-:106400003C01000100370821AC2283D88EE272647F
-:106410009464000E3C05000134A5380024420004B9
-:10642000AEE272648EE372640004240003651021FE
-:106430003C01000100370821AC2483DC0062182BEA
-:106440001460000524E700048EE272643C03FFFF41
-:1064500000431021AEE272648EE2726408002917D4
-:10646000AEE272588EE604C88EE2726C30E4FFFF32
-:106470000044102A10400015000000008F8200D850
-:106480008EE3725800431023AEE2726C8EE2726C9F
-:106490001C4000070044102A8EE2726C3C0300018D
-:1064A00000431021AEE2726C8EE2726C0044102A3E
-:1064B00010400006000000008EE201B824420001F6
-:1064C000AEE201B808002A728EE201B83C02000177
-:1064D000005710218C4283D85440000124E7FFFC70
-:1064E00031420004104000B930E2FFFF3C020001DD
-:1064F000005710218C4283D81040002F00005021FB
-:106500008F840100276230002485002000A2102B18
-:1065100050400001276528008F82010810A2003238
-:10652000000000008F82010410A2002F2402001539
-:10653000AC880000AC8900048EE37264A487000E6E
-:10654000AC820018AC8300088EE204E83C03000132
-:10655000007718218C6383DCAC8600100043102583
-:10656000AC82001CAF85010092E204EC144000668E
-:10657000240A00018EE24E28240300402442000138
-:1065800050430003000010218EE24E2824420001F7
-:10659000AEE24E288EE24E28000210C024424E3851
-:1065A00002E2182124020015AC620000240200015E
-:1065B000080029BFAC6200048F840100276230000C
-:1065C0002485002000A2102B5040000127652800E0
-:1065D0008F82010810A20004000000008F820104D5
-:1065E00014A20006240200068EE201A82442000143
-:1065F000AEE201A8080029BF8EE201A8AC88000025
-:10660000AC8900048EE37264A487000EAC8200188B
-:10661000AC8300088EE204E8AC860010AC82001C5B
-:10662000AF85010092E204EC14400037240A000117
-:106630008EE24E28000210C024424E3802E2202191
-:106640008C830000240200051462001F000000007B
-:106650008EE34E288EE24E2C1062001B2403004075
-:106660008C82000424420001AC8200048EE24E2C95
-:106670008EE54E2824420001104300070000000070
-:106680008EE24E2C2442000110A200050000000002
-:10669000080029A90000000014A000050000000067
-:1066A0008F82010824420020AF8201088F820108F6
-:1066B0008C8200042C42001150400013AC8000007A
-:1066C000080029BF000000008EE24E28240300408D
-:1066D0002442000150430003000010218EE24E28A6
-:1066E00024420001AEE24E288EE24E28000210C085
-:1066F00024424E3802E2202124020005AC82000030
-:1067000024020001AC8200041540000A24020001AA
-:10671000AFA900108EE272643C040001248457305B
-:106720003C050004AFA200148EE604E408002A4FE2
-:1067300034A5F204A2E204ED8EE204E88EE304FC48
-:106740008EE472583C06000134C638003C0100015A
-:1067500000370821AC2083D83C0100010037082114
-:10676000AC2083DC0002110000431021AC44000C7B
-:106770008EE272642405FFF830E3FFFF004310212E
-:10678000244200070045102424630007AEE272583B
-:106790008EE2726C8EE47258006518240043102358
-:1067A000AEE2726C036610210082202B148000047C
-:1067B0003C03FFFF8EE2725800431021AEE2725894
-:1067C0008EE2725808002A64AEE2726410400073D0
-:1067D000000000008F830100276230002464002045
-:1067E0000082102B14400002000050212764280072
-:1067F0008F82010810820004000000008F820104D3
-:1068000014820006240500058EE201A8244200013E
-:10681000AEE201A808002A468EE201A8AC6800009A
-:10682000AC6900048EE27264A467000EAC650018C7
-:10683000AC6200088EE204E8AC660010AC62001C9A
-:10684000AF84010092E204EC14400036240A0001F7
-:106850008EE24E28000210C024424E3802E220216F
-:106860008C8200001445001F000000008EE34E28BB
-:106870008EE24E2C1062001B240300408C82000428
-:1068800024420001AC8200048EE24E2C8EE54E289C
-:106890002442000110430007000000008EE24E2C4D
-:1068A0002442000110A200050000000008002A3068
-:1068B0000000000014A00005000000008F82010805
-:1068C00024420020AF8201088F8201088C820004DC
-:1068D0002C42001150400013AC80000008002A46F2
-:1068E000000000008EE24E282403004024420001F4
-:1068F00050430003000010218EE24E282442000184
-:10690000AEE24E288EE24E28000210C024424E38DD
-:1069100002E2202124020005AC82000024020001D2
-:10692000AC8200041540000C30E5FFFF3C04000180
-:10693000248457483C050004AFA90010AFA0001400
-:106940008EE604E434A5F2370C00240330E7FFFFA1
-:1069500008002A72000000008EE2726400451021D7
-:10696000AEE272648EE2726C8EE372643C040001EB
-:1069700034843800A2E004ED00451023AEE2726CCE
-:10698000036410210062182B146000043C03FFFF15
-:106990008EE2726400431021AEE272648EE304E87A
-:1069A00096E20458246300012442FFFF0062182489
-:1069B000AEE304E88EE304E88EE204E0146200052E
-:1069C000000000008F8200602403FFF700431024C2
-:1069D000AF8200608FBF001803E0000827BD0020D1
-:1069E00027BDFFE0AFBF001CAFB000188F820100D1
-:1069F0008EE34E2C8F8201048F8501082402004013
-:106A00002463000150620003000010218EE24E2C2E
-:106A100024420001AEE24E2C8EE24E2C8EE34E2C30
-:106A2000000210C024424E3802E220218EE24E289D
-:106A30008C8700041462000700A030218F820108B7
-:106A400024420020AF8201088F82010808002AA298
-:106A5000AC8000008EE24E2C240300402442000152
-:106A600050430003000010218EE24E2C244200010E
-:106A7000000210C024424E3802E220218C82000421
-:106A80008F8301080002114000621821AF830108C2
-:106A9000AC8000008CC200182443FFFE2C6200135F
-:106AA000104000C1000310803C01000100220821B9
-:106AB0008C22577000400008000000008EE204F0B5
-:106AC00000471021AEE204F08EE204F08F43023C56
-:106AD0000043102B144000BE000000008EE304E4CD
-:106AE0008EE204F8506200BAA2E004F48F83012021
-:106AF000276238002466002000C2102B504000019D
-:106B0000276630008F82012810C2000400000000B8
-:106B10008F82012414C20007000000008EE201A44D
-:106B20000000802124420001AEE201A408002B12E3
-:106B30008EE201A48EE204E4AC62001C8EE404B098
-:106B40008EE504B42462001CAC6200082402000834
-:106B5000A462000E24020011AC620018AC640000B4
-:106B6000AC6500048EE204C4AC620010AF86012064
-:106B700092E24E2014400037241000018EE24E3085
-:106B8000000210C02442503802E220218C83000011
-:106B9000240200121462001F000000008EE34E3039
-:106BA0008EE24E341062001B240300408C820004ED
-:106BB00024420001AC8200048EE24E348EE54E3059
-:106BC0002442000110430007000000008EE24E3412
-:106BD0002442000110A200050000000008002AFC69
-:106BE0000000000014A00005000000008F820128B2
-:106BF00024420020AF8201288F8201288C82000469
-:106C00002C42001150400013AC80000008002B12F1
-:106C1000000000008EE24E302403004024420001B8
-:106C200050430003000010218EE24E302442000148
-:106C3000AEE24E308EE24E30000210C02442503898
-:106C400002E2202124020012AC8200002402000192
-:106C5000AC8200045600000B241000018EE204E414
-:106C60003C04000124845754AFA00014AFA20010CC
-:106C70008EE606088F4702283C0500090C00240315
-:106C800034A5F006160000032402000108002B7151
-:106C9000A2E204F48EE2017024420001AEE201702F
-:106CA0008EE201708EE204E4A2E004F4AEE004F0AF
-:106CB000AEE204F88F42023C50400045AEE07274F0
-:106CC0008EE2018424420001AEE201848EE201845E
-:106CD00008002B71AEE072748EE2050424030040BC
-:106CE0002442000150430003000010218EE20504FD
-:106CF00024420001AEE205048EE205048CC30018B4
-:106D000000021080005710218C4405082402000363
-:106D10001462000F000000003C0200010057102127
-:106D2000904283B110400014000000008EE201D0B8
-:106D30008EE3524000441021AEE201D08EE201D831
-:106D400000641821306300FF08002B59AEE3524065
-:106D50008EE201CC8EE30E1000441021AEE201CC95
-:106D60008EE201D800641821306301FFAEE30E10FB
-:106D700000441021AEE201D88EE20000344200400F
-:106D800008002B71AEE200008EE2014C3C010001D4
-:106D900000370821A02083E024420001AEE2014C2C
-:106DA00008002B718EE2014C94C7000E8CC2001CAF
-:106DB0003C04000124845760AFA60014AFA2001069
-:106DC0008CC600183C0500080C00240334A50910EB
-:106DD0008FBF001C8FB0001803E0000827BD002003
-:106DE00027BDFF98AFBF0060AFBE005CAFB60058D4
-:106DF000AFB50054AFB40050AFB3004CAFB20048D1
-:106E0000AFB10044AFB000408F8301088F8201040E
-:106E1000AFA00024106203E7AFA0002C3C1E0001CD
-:106E200037DE38003C0BFFFF8F9301088E6200189D
-:106E30008F8301042443FFFE2C620014104003CF13
-:106E4000000310803C010001002208218C2257C061
-:106E500000400008000000009663000E8EE2725CA5
-:106E60008EE404F000431021AEE2725C8E63001CDD
-:106E700096E2045824840001AEE404F02463000187
-:106E80002442FFFF00621824AEE304E48F42023C78
-:106E90000082202B148003B9000000008F830120A2
-:106EA000276238002466002000C2102B50400001E9
-:106EB000276630008F82012810C200040000000005
-:106EC0008F82012414C20007000000008EE201A49A
-:106ED0000000802124420001AEE201A408002BFE44
-:106EE0008EE201A48EE204E4AC62001C8EE404B0E5
-:106EF0008EE504B42462001CAC6200082402000881
-:106F0000A462000E24020011AC620018AC64000000
-:106F1000AC6500048EE204C4AC620010AF860120B0
-:106F200092E24E2014400037241000018EE24E30D1
-:106F3000000210C02442503802E220218C8300005D
-:106F4000240200121462001F000000008EE34E3085
-:106F50008EE24E341062001B240C00408C82000430
-:106F600024420001AC8200048EE24E348EE34E30A7
-:106F700024420001104C0007000000008EE24E3455
-:106F800024420001106200050000000008002BE808
-:106F90000000000014600005000000008F8201283E
-:106FA00024420020AF8201288F8201288C820004B5
-:106FB0002C42001150400013AC80000008002BFE52
-:106FC000000000008EE24E30240C004024420001FC
-:106FD000504C0003000010218EE24E30244200018C
-:106FE000AEE24E308EE24E30000210C024425038E5
-:106FF00002E2202124020012240C0001AC820000D5
-:10700000AC8C00045600000D241000018EE204E454
-:107010003C04000124845754AFA00014AFA2001018
-:107020008EE606088F4702283C05000934A5F006C5
-:107030000C002403AFAB00388FAB00381200030AFA
-:10704000240C000108002F1900000000966C001CA1
-:10705000AFAC002C9662001E3C0C8000AFAC00244C
-:10706000AE62001C8E75001C8EE204FC8EE404FCF3
-:1070700000151900006210218C52000C92E27B98DE
-:10708000006418219476000A1440000332C2000202
-:10709000AEF27BA4AEF57B9C1040004B000080213B
-:1070A00096E2045A304200021040004700000000FF
-:1070B0008E63001C8EE204FC00032100008210217C
-:1070C0008C42000C037E1821244200220043102B26
-:1070D0001440000A240500148EE204FC00821021F2
-:1070E0008C44000CAFAB00380C002F752484000ECC
-:1070F0008FAB003808002C523050FFFF8EE204FCAA
-:10710000008210218C42000C9450000E9443001019
-:10711000944400129445001402038021020480214B
-:107120000205802194430016944400189445001AE7
-:107130000203802102048021020580219443001C67
-:107140009444001E94420020020380210204802106
-:107150000202802100101C023202FFFF0062802127
-:107160008E63001C8EE204FC001024020003290040
-:1071700000A210218C43000C3202FFFF008280210C
-:10718000037E1021246300180062182B146000098C
-:10719000000000008EE204FC00A210218C43000CD1
-:1071A000001010273C01FFFF0023082108002C6F6E
-:1071B000A42200188EE204FC00A210218C43000CD3
-:1071C00000101027A462001896E2045A00008821DB
-:1071D00030420008144000630000A0218E63001CB0
-:1071E0008EE204FC0003310000C210218C42000C2E
-:1071F000037E1821244200220043102B1440003546
-:10720000000000008EE204FC00C210218C42000C41
-:1072100024470010037E102100E2102B5040000193
-:1072200000EB38218EE204FC94F1000000C2102132
-:107230008C42000C24470016037E102100E2102B24
-:10724000144000022634FFEC00EB38218EE204FCEF
-:1072500090E3000100C210218C42000C2447001A68
-:10726000037E102100E2102B1440000202838821CB
-:1072700000EB382194E2000024E70002022288217A
-:10728000037E102100E2102B5040000100EB38215A
-:1072900094E2000024E7000202228821037E1021EC
-:1072A00000E2102B5040000100EB382194E2000076
-:1072B00024E7000202228821037E102100E2102B25
-:1072C0005040000100EB382194E2000008002CD06F
-:1072D000022288218EE204FC00C210218C43000CA3
-:1072E0008EE204FC947100108EE304FC00C21021B5
-:1072F0008C44000C00C318218C62000C2634FFEC77
-:10730000908400178EE304FC9442001A02848821C2
-:1073100000C318218C65000C8EE304FC0222882136
-:107320008EE204FC00C3182100C210218C44000C22
-:107330008C62000C94A3001C9484001E94420020D4
-:1073400002238821022488210222882100111C02A4
-:107350003222FFFF0062882100111C023222FFFF4F
-:107360000062882132C20001104000B2000000001B
-:1073700096E2045A30420001104000AE32C2008052
-:10738000104000080000000092E27B9814400005C5
-:1073900000000000240C0001A2EC7B98AEF57B9C61
-:1073A000AEF27BA48EE304FC001511000043102113
-:1073B0008C47000C037E182124E2000E0043102BA2
-:1073C0001440000800E020212405000E0C002F7559
-:1073D000AFAB00383042FFFF8FAB003808002D09FB
-:1073E0000202802194E6000024E7000294E50000F8
-:1073F00024E7000294E3000024E7000294E2000086
-:1074000024E7000294E4000024E700020206802141
-:1074100002058021020380210202802194E2000003
-:1074200094E30002020480210202802102038021F1
-:1074300000101C023202FFFF0062802100101C02BB
-:107440003202FFFF8EE47B9C0062802114950004D1
-:107450003205FFFF9662001608002D17005120210B
-:107460009662001600542021000414023083FFFFAE
-:1074700000432021008520230004140200822021E3
-:107480003084FFFF508000013404FFFF8EE27BA4B4
-:1074900024430017037E10210062102B504000018E
-:1074A000006B182190630000240200111462003167
-:1074B000240200068EE27BA4037E182124420028C9
-:1074C0000043102B14400018000000008EE27B9C4B
-:1074D00012A2000A32C201008EE27BA43C01FFFF2F
-:1074E00000220821942200280082202100041C028E
-:1074F0003082FFFF0062202132C2010014400004EC
-:107500000004102792E27B98144000020004102728
-:107510003044FFFF8EE27BA43C01FFFF00220821E4
-:1075200008002D8AA42400288EE27B9C12A2000869
-:1075300032C201008EE27BA4944200280082202106
-:1075400000041C023082FFFF0062202132C20100D1
-:10755000144000040004102792E27B9814400002BB
-:10756000000410273044FFFF8EE27BA408002D8A20
-:10757000A44400281462002F037E18218EE27BA40D
-:10758000244200320043102B144000180000000079
-:107590008EE27B9C12A2000A32C201008EE27BA422
-:1075A0003C01FFFF002208219422003200822021AA
-:1075B00000041C023082FFFF0062202132C2010061
-:1075C000144000040004102792E27B98144000024B
-:1075D000000410273044FFFF8EE27BA43C01FFFF34
-:1075E0000022082108002D8AA42400328EE27B9C10
-:1075F00012A2000832C201008EE27BA49442003243
-:107600000082202100041C023082FFFF0062202142
-:1076100032C20100144000040004102792E27B985B
-:1076200014400002000410273044FFFF8EE27BA4C8
-:10763000A44400328FAC00241180002C037E18215A
-:107640008E420000AE42FFFC2642000A0043102B8F
-:107650001440001B3403810026430004037E1021E4
-:107660000062102B1440000300602021006B1821E1
-:10767000006020218C62000024630004AE42000000
-:10768000037E10210062102B50400001006B182176
-:107690008C620000AC82000034028100A462000011
-:1076A00024630002037E10210062102B5040000171
-:1076B000006B182197AC002E08002DB4A46C0000BC
-:1076C0008E4200048E440008A643000897AC002EAA
-:1076D000A64C000AAE420000AE4400049662000EC2
-:1076E0002652FFFC24420004A662000E9662000EA1
-:1076F0008EE3725C00621821AEE3725CAFB20018D8
-:107700008EE3725CAFA3001C8EE2725C2C42003CE4
-:1077100010400004246200012403FFFE00431024F3
-:10772000AFA2001C32C200801040000C32C2010027
-:107730008EE27BA824430001000210C000571021F4
-:10774000AEE37BA88FA300188FA4001CAC437BACD6
-:10775000AC447BB008002EA0AEE0725C104000721A
-:10776000000000008EE27BA824430001000210C04C
-:1077700000571021AEE37BA88FA300188FA4001C34
-:10778000AC437BACAC447BB08EE27BA81040006382
-:1077900000004821000050218F8200F0244800089A
-:1077A000276218000102102B5040000127681000CA
-:1077B0008F8200F415020007000000008EE201B481
-:1077C0000000802124420001AEE201B408002DFA3D
-:1077D0008EE201B48F8300F02410000101571021C4
-:1077E0008C447BAC8C457BB0AC640000AC65000481
-:1077F000AF8800F01600000602EA10218EE2008831
-:1078000024420001AEE2008808002E3F8EE200888C
-:107810008C427BB08EE400E08EE500E48EE67B9C3B
-:10782000004018210000102100A3282100A3382BBC
-:1078300000822021008720218EE204FC00C9302133
-:1078400000063100AEE400E0AEE500E400C2302105
-:1078500094C2000A240C00020002114230430003CB
-:10786000106C00162862000310400005240C000173
-:10787000106C00080000000008002E3F000000000F
-:10788000240C0003106C00170000000008002E3FBD
-:10789000000000008EE200E88EE300EC24630001AB
-:1078A0002C64000100441021AEE200E8AEE300ECDD
-:1078B0008EE200E808002E3F8EE300EC8EE200F03E
-:1078C0008EE300F4246300012C64000100441021C5
-:1078D000AEE200F0AEE300F48EE200F008002E3FCE
-:1078E0008EE300F48EE200F88EE300FC24630001D6
-:1078F0002C64000100441021AEE200F8AEE300FC6D
-:107900008EE200F88EE300FC8EE27BA825290001C0
-:107910000122102B1440FFA0254A0008A2E07B980A
-:1079200008002E9FAEE07BA88F8200F0244700085D
-:107930002762180000E2102B50400001276710005A
-:107940008F8200F414E20007000000008EE201B410
-:107950000000802124420001AEE201B408002E5D47
-:107960008EE201B48F8200F0241000018FA3001872
-:107970008FA4001CAC430000AC440004AF8700F0AF
-:1079800016000007000000008EE20088244200017B
-:10799000AEE200888EE2008808002EA0AEE0725CA5
-:1079A0008EE2725C8EE400E08EE500E4240C0002BE
-:1079B000004018210000102100A3282100A3302B33
-:1079C000008220210086202100161142304300034E
-:1079D000AEE400E0AEE500E4106C00172C6200039A
-:1079E00010400005240C0001106C0008000000008D
-:1079F00008002EA0AEE0725C240C0003106C00198D
-:107A00000000000008002EA0AEE0725C8EE200E8EC
-:107A10008EE300EC246300012C640001004410217B
-:107A2000AEE200E8AEE300EC8EE200E88EE300ECAC
-:107A300008002EA0AEE0725C8EE200F08EE300F44F
-:107A4000246300012C64000100441021AEE200F028
-:107A5000AEE300F48EE200F08EE300F408002EA006
-:107A6000AEE0725C8EE200F88EE300FC246300015D
-:107A70002C64000100441021AEE200F8AEE300FCEB
-:107A80008EE200F88EE300FCAEE0725C8E62001CB9
-:107A900096E304588EE404F0244200012463FFFFBF
-:107AA0000043102424840001AEE204E4AEE404F0B8
-:107AB0008F42023C0082202B148000B000000000A6
-:107AC0008F830120276238002466002000C2102B1B
-:107AD00050400001276630008F82012810C2000448
-:107AE000000000008F82012414C200070000000083
-:107AF0008EE201A40000802124420001AEE201A434
-:107B000008002F078EE201A48EE204E4AC62001CA0
-:107B10008EE404B08EE504B42462001CAC6200085C
-:107B200024020008A462000E24020011AC620018B6
-:107B3000AC640000AC6500048EE204C4AC620010CA
-:107B4000AF86012092E24E2014400037241000013D
-:107B50008EE24E30000210C02442503802E2202152
-:107B60008C830000240200121462001F0000000039
-:107B70008EE34E308EE24E341062001B240C004027
-:107B80008C82000424420001AC8200048EE24E3458
-:107B90008EE34E3024420001104C0007000000002C
-:107BA0008EE24E3424420001106200050000000005
-:107BB00008002EF100000000146000050000000025
-:107BC0008F82012824420020AF8201288F82012861
-:107BD0008C8200042C42001150400013AC80000045
-:107BE00008002F07000000008EE24E30240C0040F9
-:107BF00024420001504C0003000010218EE24E3060
-:107C000024420001AEE24E308EE24E30000210C03F
-:107C10002442503802E2202124020012240C0001E8
-:107C2000AC820000AC8C00045600000D2410000152
-:107C30008EE204E43C04000124845754AFA00014F5
-:107C4000AFA200108EE606088F4702283C05000907
-:107C500034A5F0060C002403AFAB00388FAB00381E
-:107C600016000003240C000108002F5CA2EC04F4B1
-:107C70008EE2017024420001AEE201708EE20170DA
-:107C80008EE204E4A2E004F4AEE004F0AEE072742C
-:107C9000AEE204F88F42023C1040003800000000C1
-:107CA0008EE2018424420001AEE2018408002F5CD0
-:107CB0008EE201848EE20504240C0040244200017F
-:107CC000504C0003000010218EE205042442000104
-:107CD000AEE205048EE205048E630018240C000356
-:107CE0000002108000571021146C000F8C4405080E
-:107CF0003C02000100571021904283B11040001453
-:107D0000000000008EE201D08EE3524000441021BA
-:107D1000AEE201D08EE201D800641821306300FF8A
-:107D200008002F4FAEE352408EE201CC8EE30E10DE
-:107D300000441021AEE201CC8EE201D8006418218B
-:107D4000306301FFAEE30E1000441021AEE201D813
-:107D50008EE200003442004008002F5CAEE20000DA
-:107D60008EE2014C3C01000100370821A02083E095
-:107D700024420001AEE2014C8EE2014C8F820108E8
-:107D800024420020AF8201088F8201088F820108FF
-:107D9000276330000043102B1440000227622800A4
-:107DA000AF8201088F8301088F8201041462FC1ED8
-:107DB000000000008FBF00608FBE005C8FB60058CF
-:107DC0008FB500548FB400508FB3004C8FB2004871
-:107DD0008FB100448FB0004003E0000827BD006869
-:107DE0000005284310A0000D000030213C030001D5
-:107DF000346338003C07FFFF036310210082102B1F
-:107E00005040000100872021948200002484000259
-:107E100024A5FFFF14A0FFF800C2302100061C02B9
-:107E200030C2FFFF0062302100061C0230C2FFFF9B
-:107E30000062302103E0000830C2FFFF27BDFF8849
-:107E4000240F0001AFBF0070AFBE006CAFB600687A
-:107E5000AFB50064AFB40060AFB3005CAFB2005820
-:107E6000AFB10054AFB00050A3A00027AFAF002CBB
-:107E70008EE204D400008021304200011440002A28
-:107E8000A3A000378F8700E08F8800C48F8200E8AE
-:107E900000E220232C8210005040000124841000B6
-:107EA000000420C2008018218EE400C88EE500CCBA
-:107EB0000000102100A3282100A3302B00822021E4
-:107EC00000862021AEE400C8AEE500CC8F8300C858
-:107ED0003C02000A3442EFFF010320230044102B30
-:107EE000104000033C02000A3442F00000822021CE
-:107EF000008018218EE400C08EE500C4000010212F
-:107F000000A3282100A3302B0082202100862021FD
-:107F1000AEE400C0AEE500C4AF8800C8AF8700E49F
-:107F2000080034CCAF8700E83C0200010057102164
-:107F3000904283C01040000B000000003C14000180
-:107F40000297A0218E9483C43C13000102779821EC
-:107F50008E7383C83C1200010257902108003193B0
-:107F60008E5283CC8F8300E08F8200E410430007A1
-:107F7000000088218F8200E4241100018C4300005E
-:107F80008C440004AFA30018AFA4001C1620000E00
-:107F90003C02FFFF8F8200C4AFA200108F8200C896
-:107FA0003C04000124845870AFA200148F8600E0C6
-:107FB0008F8700E43C0500060C00240334A5F00084
-:107FC000080034CC000000008FA3001C8FB2001802
-:107FD0003074FFFF2694FFFC00621024104000580C
-:107FE000024098213C020080006210241040000AE8
-:107FF0003C0400408EE2007C24420001AEE2007CA2
-:108000008EE2007C8EE201FC24420001AEE201FC23
-:10801000080034C68EE201FC3C0600043C0B000163
-:108020003C0A00023C0500103C0900088EE200807A
-:108030003C0800203407800024420001AEE20080AA
-:108040008EE200808FA2001C0044182410660021DC
-:1080500000C3102B1440000700000000106B00113B
-:1080600000000000106A0015000000000800304900
-:10807000000420421065002300A3102B14400005CB
-:1080800000000000106900190000000008003049DD
-:108090000004204210680021000000000800304960
-:1080A000000420428EE2003424420001AEE200349B
-:1080B0008EE2003408003049000420428EE201ECD8
-:1080C00024420001AEE201EC8EE201EC08003049EE
-:1080D000000420428EE201F024420001AEE201F0F1
-:1080E0008EE201F008003049000420428EE201F4E3
-:1080F00024420001AEE201F48EE201F408003049AE
-:10810000000420428EE2003024420001AEE2003042
-:108110008EE2003008003049000420428EE201F86F
-:1081200024420001AEE201F88EE201F80004204290
-:108130001087047C000000000800300E00000000E2
-:108140003C02000100571021904283B21440008489
-:10815000240200013C03000100771821906383B3DF
-:108160001462007F3C0201008E4300000062102474
-:108170001040006F2402FFFF14620005241000016C
-:10818000964300043402FFFF1062007500000000F7
-:1081900092E204D814400072000000003C0200018A
-:1081A000005710218C4283B4284200051040002063
-:1081B000000038213C020001005710218C4283B49A
-:1081C000184000160000282196660000000520C017
-:1081D000009710219442777E1446000900971021E1
-:1081E0009443778096620002146200050097102184
-:1081F00094437782966200045062000824070001CD
-:108200003C020001005710218C4283B424A50001D8
-:1082100000A2102A5440FFEE000520C030E200FF0B
-:108220001040044000000000080030D500000000AD
-:10823000024020210C0022FE240500063044001FCD
-:10824000000428C002E510219442727C30424000B4
-:108250001440043400B710219443727E96620000EB
-:108260001462000B000418C000B710219443728000
-:108270009662000214620006000418C000B71021C4
-:10828000944372829662000410620035000418C0A4
-:1082900002E310219442727C304280001440042199
-:1082A00002E31021944B727C96670000000B28C0FB
-:1082B00000B710219442737E080030B700003021CF
-:1082C000000420C002E410219443737C02E41021D6
-:1082D000944B737C3063800014600010000B28C046
-:1082E00000B710219442737E1447FFF501602021EE
-:1082F00000B7102194437380966200025462FFF12C
-:10830000000420C000B710219443738296620004D9
-:108310005462FFEC000420C02406000130C200FFBC
-:108320001040040000000000080030D500000000EC
-:108330009743020296420000146203FA0000000014
-:108340009743020496420002146203F60000000004
-:108350009743020696420004146203F200000000F4
-:10836000924200003A030001304200010043102411
-:10837000104000742402FFFF8E63000014620004AA
-:108380003402FFFF966300041062006F240F0002A6
-:108390003C02000100571021904283B21440006A51
-:1083A000240F000392E204D854400068AFAF002CC1
-:1083B0003C020001005710218C4283B42842000582
-:1083C00010400020000038213C020001005710211D
-:1083D0008C4283B4184000160000282196660000E5
-:1083E000000520C0009710219442777E14460009B2
-:1083F0000097102194437780966200021462000572
-:10840000009710219443778296620004506200081E
-:10841000240700013C020001005710218C4283B464
-:1084200024A5000100A2102A5440FFEE000520C040
-:1084300030E200FF14400044240F0003080034C65B
-:1084400000000000024020210C0022FE240500064E
-:108450003044001F000428C002E510219442727CC1
-:1084600030424000144003AF00B710219443727EA5
-:10847000966200001462000B000418C000B71021BF
-:10848000944372809662000214620006000418C0D1
-:1084900000B7102194437282966200041062002794
-:1084A000000418C002E310219442727C3042800024
-:1084B0001440039C02E31021944B727C96670000E9
-:1084C000000B28C000B710219442737E0800313C95
-:1084D00000003021000420C002E410219443737C8A
-:1084E00002E41021944B737C306380001460001010
-:1084F000000B28C000B710219442737E1447FFF58B
-:108500000160202100B7102194437380966200021D
-:108510005462FFF1000420C000B71021944373821D
-:10852000966200045462FFEC000420C0240600019F
-:1085300030C200FF1040037B000000000800314FF4
-:10854000240F0003240F0001AFAF002C8F42026004
-:108550000054102B1040003A000000008F8300E40C
-:108560008F8200E01062000324630008AF8300E400
-:10857000AF8300E88EE400C08EE500C402801821BD
-:108580000000102100A3282100A3302B008220210D
-:1085900000862021AEE400C0AEE500C48EE20058A3
-:1085A00024420001AEE200588EE200588EE2007CC8
-:1085B00024420001AEE2007C8EE2007C8F8200E06B
-:1085C000AFA200108F8200E43C040001248458789C
-:1085D000AFA200148FA600188FA7001C3C05000650
-:1085E0000C00240334A5F003080034CC0000000084
-:1085F0008EE25240AFA200108EE252443C040001D1
-:1086000024845884AFA200148EE60E108EE70E1854
-:108610003C0500060C00240334A5F0028EE201C0E4
-:1086200024420001AEE201C08EE200008EE301C0F0
-:108630002403FFBF0043102408003470AEE20000A2
-:1086400096E204680054102B104000030000000064
-:10865000240F0001A3AF0027128003012416000796
-:1086600024150040241E0001240E00128EE2724CDC
-:108670008F43028024420001304207FF106202D380
-:108680000000000093A2002710400014000000002A
-:108690008EE352408EE252441062000926ED5244AD
-:1086A0008EE652448EE35244000211402442524866
-:1086B00002E2802124630001080031BF306B00FF1B
-:1086C00092E272481440FFCA000000008EE201E00E
-:1086D00024420001AEE201E08EE201E08EE30E10E2
-:1086E0008EE20E181062FFC226ED0E188EE60E18EE
-:1086F0008EE30E180002114024420E2002E2802177
-:1087000024630001306B01FF96E2046A30420010DE
-:1087100010400019000000009642000C340F810048
-:10872000144F0015000000003C020001005710210A
-:10873000904283C014400010000000009642000EDA
-:10874000A60200168E4200088E4300048E440000EC
-:108750002694FFFCAE42000CAE430008AE44000479
-:108760009602000E26730004240F0001A3AF003709
-:1087700034420200A602000E8E0200008E030004A6
-:108780003C04000134843800306A0007026A9823F0
-:10879000036410210262102B10400005028AA02100
-:1087A00002641023036218233C0200200043982334
-:1087B000268200072404FFF89603000A0044602480
-:1087C000006A1821006C102B104000020180382133
-:1087D00000603821AE1300188F88012024E20007C2
-:1087E0000044382427623800250900200122102B7C
-:1087F00050400001276930008F82012811220004B7
-:10880000000000008F82012415220007014018217A
-:108810008EE201A40000882124420001AEE201A4FE
-:108820000800324C8EE201A48E0400008E05000484
-:1088300000001021AD130008A507000EAD160018AA
-:10884000AD06001C00A3302B00A3282300822023A8
-:1088500000862023AD040000AD0500048EE204C0B4
-:10886000AD020010AF89012092E24E201440003387
-:10887000241100018EE24E30000210C02442503814
-:1088800002E220218C8200001456001F000000002C
-:108890008EE34E308EE24E341062001B000000006A
-:1088A0008C82000424420001AC8200048EE24E342B
-:1088B0008EE34E30244200011055000700000000F6
-:1088C0008EE24E34244200011062000500000000D8
-:1088D00008003239000000001460000500000000AC
-:1088E0008F82012824420020AF8201288F82012834
-:1088F0008C8200042C42001150400010AC8000001B
-:108900000800324C000000008EE24E30244200018C
-:1089100050550003000010218EE24E302442000129
-:10892000AEE24E308EE24E30000210C0244250388B
-:1089300002E22021AC960000AC9E00041620001834
-:108940003C0500068E0200183C0400012484589067
-:10895000AFA200108E0200008E03000434A5F009BF
-:10896000020030210C002403AFA3001493A20037AF
-:1089700010400216340F81008E4200048E4300081E
-:108980008E44000CA64F000CAE420000AE43000423
-:10899000AE4400089602001608003470A642000E8D
-:1089A00014EC0168028A1823960C000A9603000E44
-:1089B000028A1023A602000A34620004A602000EF6
-:1089C0008F88012027623800250900200122102B02
-:1089D00014400002306AFFFF276930008F820128AF
-:1089E00011220004000000008F82012415220007DC
-:1089F000240400208EE201A400008821244200010A
-:108A0000AEE201A4080032CA8EE201A48EE5724CE7
-:108A10008EE604908EE70494A504000E240400045E
-:108A2000AD100008AD0400180005294000A0182171
-:108A30000000102100E3382100E3202B00C2302188
-:108A400000C43021AD060000AD0700048EE2724C78
-:108A5000AD02001C8EE204C4AD020010AF890120FB
-:108A600092E24E2014400033241100018EE24E3079
-:108A7000000210C02442503802E220218C82000003
-:108A80001456001F000000008EE34E308EE24E347C
-:108A90001062001B000000008C82000424420001D0
-:108AA000AC8200048EE24E348EE34E30244200014C
-:108AB00010550007000000008EE24E3424420001F1
-:108AC0001062000500000000080032B7000000003E
-:108AD00014600005000000008F820128244200205D
-:108AE000AF8201288F8201288C8200042C42001161
-:108AF00050400010AC800000080032CA00000000A6
-:108B00008EE24E3024420001505500030000102137
-:108B10008EE24E3024420001AEE24E308EE24E3004
-:108B2000000210C02442503802E22021AC9600001E
-:108B3000AC9E00041620000D00000000A60C000AE8
-:108B4000A60A000E8F820100AFA200108F820104DE
-:108B50003C0400012484589C3C050006AFA200148C
-:108B60008EE6724C0800343B34A5F00B3C0100014A
-:108B700000370821A02083C0ADAB00008EE201D8F1
-:108B80008EE3724C2442FFFFAEE201D88EE201D8A0
-:108B900024630001306307FF26E2524415A2000659
-:108BA000AEE3724C8EE201D02442FFFFAEE201D070
-:108BB000080032EF8EE201D08EE201CC2442FFFFAA
-:108BC000AEE201CC8EE201CC8F4202401040007335
-:108BD000000000008EE20E1C24420001AEE20E1CDA
-:108BE0008F4302400043102B144001760000A02167
-:108BF0008F830120276238002466002000C2102BDA
-:108C000050400001276630008F82012810C2000406
-:108C1000000000008F82012414C200070000000041
-:108C20008EE201A40000882124420001AEE201A4EA
-:108C30000800334F8EE201A48EE2724CAC62001C3D
-:108C40008EE404A88EE504AC2462001CAC6200082B
-:108C500024020008A462000E24020011AC62001875
-:108C6000AC640000AC6500048EE204C4AC62001089
-:108C7000AF86012092E24E201440003324110001FF
-:108C80008EE24E30000210C02442503802E2202111
-:108C90008C820000144E001F000000008EE34E3056
-:108CA0008EE24E341062001B000000008C82000433
-:108CB00024420001AC8200048EE24E348EE34E303A
-:108CC0002442000110550007000000008EE24E34DF
-:108CD0002442000110620005000000000800333C3F
-:108CE0000000000014600005000000008F820128D1
-:108CF00024420020AF8201288F8201288C82000448
-:108D00002C42001150400010AC8000000800334F8E
-:108D1000000000008EE24E30244200015055000356
-:108D2000000010218EE24E3024420001AEE24E30AF
-:108D30008EE24E30000210C02442503802E2202160
-:108D4000AC8E0000AC9E00045620000D24110001E2
-:108D50008EE2724C3C040001248458A8AFA0001499
-:108D6000AFA200108EE6724C8F4702803C050009CE
-:108D700034A5F0080C002403AFAE00488FAE0048C5
-:108D800056200001AEE00E1C8EE201882442000154
-:108D9000AEE20188080033C88EE201888F8301208B
-:108DA000276238002466002000C2102B50400001CA
-:108DB000276630008F82012810C2000400000000E6
-:108DC0008F82012414C20007000000008EE201A47B
-:108DD0000000882124420001AEE201A4080033BA59
-:108DE0008EE201A48EE2724CAC62001C8EE404A8F8
-:108DF0008EE504AC2462001CAC620008240200086A
-:108E0000A462000E24020011AC620018AC640000E1
-:108E1000AC6500048EE204C4AC620010AF86012091
-:108E200092E24E2014400033241100018EE24E30B5
-:108E3000000210C02442503802E220218C8200003F
-:108E4000144E001F000000008EE34E308EE24E34C0
-:108E50001062001B000000008C820004244200010C
-:108E6000AC8200048EE24E348EE34E302442000188
-:108E700010550007000000008EE24E34244200012D
-:108E80001062000500000000080033A70000000089
-:108E900014600005000000008F8201282442002099
-:108EA000AF8201288F8201288C8200042C4200119D
-:108EB00050400010AC800000080033BA00000000F1
-:108EC0008EE24E3024420001505500030000102174
-:108ED0008EE24E3024420001AEE24E308EE24E3041
-:108EE000000210C02442503802E22021AC8E000063
-:108EF000AC9E00041620000D000000008EE2724CB3
-:108F00003C040001248458A8AFA00014AFA20010B4
-:108F10008EE6724C8F4702803C05000934A5F008AC
-:108F20000C002403AFAE00488FAE00488EE20174FF
-:108F300024420001AEE201748EE201740800346E36
-:108F40000000A021960C000A0183102B5440000160
-:108F500001801821A603000A8F88012027623800AB
-:108F6000250900200122102B504000012769300004
-:108F70008F82012811220004000000008F8201244A
-:108F800015220007240400208EE201A4000088219D
-:108F900024420001AEE201A40800342F8EE201A4B5
-:108FA0008EE5724C8EE604908EE70494A504000EC4
-:108FB00024040004AD100008AD0400180005294089
-:108FC00000A018210000102100E3382100E3202B2D
-:108FD00000C2302100C43021AD060000AD070004FE
-:108FE0008EE2724CAD02001C8EE204C4AD02001091
-:108FF000AF89012092E24E20144000332411000179
-:109000008EE24E30000210C02442503802E220218D
-:109010008C8200001456001F000000008EE34E30CA
-:109020008EE24E341062001B000000008C820004AF
-:1090300024420001AC8200048EE24E348EE34E30B6
-:109040002442000110550007000000008EE24E345B
-:109050002442000110620005000000000800341CDA
-:109060000000000014600005000000008F8201284D
-:1090700024420020AF8201288F8201288C820004C4
-:109080002C42001150400010AC8000000800342F2A
-:10909000000000008EE24E302442000150550003D3
-:1090A000000010218EE24E3024420001AEE24E302C
-:1090B0008EE24E30000210C02442503802E22021DD
-:1090C000AC960000AC9E00041620001D00000000BD
-:1090D000A60C000A8F820100AFA200108F8201044B
-:1090E0003C0400012484589C3C050006AFA20014F7
-:1090F0008EE6724C34A5F00D0C00240302003821DA
-:1091000093A2003710400031340F81008E420004DA
-:109110008E4300088E44000CA64F000CAE420000A7
-:10912000AE430004AE44000896020016A642000EAC
-:109130009602000E3042FDFF08003470A602000EB9
-:109140008EE201D82442FFFFAEE201D88EE201D8C0
-:109150008EE201CC3C04001F3C01000100370821D5
-:10916000A03E83C02442FFFFAEE201CC9603000A7A
-:109170003484FFFF8EE201CC006A1821026398213B
-:109180000093202B108000033C02FFF534421000B6
-:1091900002629821ADAB00008EE2724C24420001C5
-:1091A000304207FFAEE2724C8F4202401040000492
-:1091B0000283A0238EE20E1C24420001AEE20E1CAC
-:1091C000A3A000271680FD290000000012800024C3
-:1091D000000000003C01000100370821AC3483C4CA
-:1091E0003C01000100370821AC3383C83C01000179
-:1091F00000370821AC3283CC93A20037104000081E
-:10920000000000003C020001005710218C4283CC7A
-:10921000244200043C01000100370821AC2283CC29
-:109220008EE2724C8F43028024420001304207FFDD
-:1092300014620006000000008EE201C42442000116
-:10924000AEE201C4080034CC8EE201C48EE201BC5F
-:1092500024420001AEE201BC080034CC8EE201BC25
-:1092600097A4001E2484FFFC008018218EE400C017
-:109270008EE500C40000102100A3282100A3302B9C
-:109280000082202100862021AEE400C0AEE500C4AB
-:109290008FAF002C2402000211E2000F29E200032C
-:1092A000144000172402000315E20015000000001E
-:1092B0008EE200D08EE300D4246300012C64000110
-:1092C00000441021AEE200D0AEE300D48EE200D024
-:1092D000080034C68EE300D48EE200D88EE300DCB2
-:1092E000246300012C64000100441021AEE200D888
-:1092F000AEE300DC8EE200D8080034C68EE300DC6A
-:109300008EE200C88EE300CC246300012C640001CF
-:1093100000441021AEE200C8AEE300CC8EE200C8EB
-:109320008EE300CC8F8300E48F8200E010620003A4
-:1093300024630008AF8300E4AF8300E88FBF0070B0
-:109340008FBE006C8FB600688FB500648FB400606C
-:109350008FB3005C8FB200588FB100548FB00050B3
-:1093600003E0000827BD007827BDFFB0AFB500447B
-:109370000000A821AFB0003000008021AFBF004C3A
-:10938000AFB60048AFB40040AFB3003CAFB2003856
-:10939000AFB100348EE204D4241400013042000145
-:1093A0001440002A0000B0218F8700E08F8800C49D
-:1093B0008F8200E800E220232C8210005040000140
-:1093C00024841000000420C2008018218EE400C80C
-:1093D0008EE500CC0000102100A3282100A3302B33
-:1093E0000082202100862021AEE400C8AEE500CC3A
-:1093F0008F8300C83C02000A3442EFFF01032023A0
-:109400000044102B104000033C02000A3442F000DC
-:1094100000822021008018218EE400C08EE500C467
-:109420000000102100A3282100A3302B008220215E
-:1094300000862021AEE400C0AEE500C4AF8800C8BD
-:10944000AF8700E408003850AF8700E83C02000115
-:1094500000571021904283C01040000B0000000014
-:109460003C130001027798218E7383C43C110001E4
-:10947000023788218E3183C83C12000102579021A7
-:10948000080036E88E5283CC8F8300E08F8200E4A0
-:1094900010430007000048218F8200E424090001E6
-:1094A0008C4300008C440004AFA30018AFA4001C40
-:1094B0001520000E3C02FFFF8F8200C4AFA20010F7
-:1094C0008F8200C83C04000124845870AFA20014AD
-:1094D0008F8600E08F8700E43C0500060C00240323
-:1094E00034A5F00008003850000000008FA3001CD5
-:1094F0008FB200183073FFFF2673FFFC0062102448
-:1095000010400058024088213C0200800062102474
-:109510001040000A3C0400408EE2007C244200011E
-:10952000AEE2007C8EE2007C8EE201FC244200016F
-:10953000AEE201FC0800384A8EE201FC3C06000461
-:109540003C0B00013C0A00023C0500103C090008ED
-:109550008EE200803C080020340780002442000195
-:10956000AEE200808EE200808FA2001C004418242E
-:109570001066002100C3102B1440000700000000FB
-:10958000106B001100000000106A001500000000C0
-:1095900008003592000420421065002300A3102B20
-:1095A00014400005000000001069001900000000D0
-:1095B00008003592000420421068002100000000DD
-:1095C00008003592000420428EE20034244200015B
-:1095D000AEE200348EE200340800359200042042EE
-:1095E0008EE201EC24420001AEE201EC8EE201ECDD
-:1095F00008003592000420428EE201F0244200016E
-:10960000AEE201F08EE201F0080035920004204243
-:109610008EE201F424420001AEE201F48EE201F494
-:1096200008003592000420428EE2003024420001FE
-:10963000AEE200308EE20030080035920004204295
-:109640008EE201F824420001AEE201F88EE201F858
-:1096500000042042108702B70000000008003557C0
-:10966000000000003C02000100571021904283B22C
-:1096700014400084240200013C03000100771821FB
-:10968000906383B31462007F3C0201008E430000AC
-:10969000006210241040006F2402FFFF14620005D6
-:1096A00024100001964300043402FFFF106200758D
-:1096B0000000000092E204D8144000720000000094
-:1096C0003C020001005710218C4283B4284200055F
-:1096D00010400020000038213C02000100571021FA
-:1096E0008C4283B418400016000028219626000002
-:1096F000000520C0009710219442777E144600098F
-:10970000009710219443778096220002146200058E
-:10971000009710219443778296220004506200083B
-:10972000240700013C020001005710218C4283B441
-:1097300024A5000100A2102A5440FFEE000520C01D
-:1097400030E200FF1040027B000000000800361EDF
-:1097500000000000024020210C0022FE240500062B
-:109760003044001F000428C002E510219442727C9E
-:10977000304240001440026F00B710219443727EC3
-:10978000962200001462000B000418C000B71021DC
-:10979000944372809622000214620006000418C0EE
-:1097A00000B71021944372829622000410620035A3
-:1097B000000418C002E310219442727C3042800001
-:1097C0001440025C02E310219448727C962700004A
-:1097D000000828C000B710219442737E08003600AC
-:1097E00000003021000420C002E410219443737C67
-:1097F00002E410219448737C3063800014600010F0
-:10980000000828C000B710219442737E1447FFF56A
-:109810000100202100B7102194437380962200029A
-:109820005462FFF1000420C000B7102194437382FA
-:10983000962200045462FFEC000420C024060001BC
-:1098400030C200FF1040023B000000000800361E3E
-:1098500000000000974302029642000014620235A5
-:109860000000000097430204964200021462023195
-:109870000000000097430206964200041462022D85
-:1098800000000000924200003A0300013042000153
-:1098900000431024104000742402FFFF8E230000B8
-:1098A000146200043402FFFF962300041062006F6C
-:1098B000241400023C02000100571021904283B2A0
-:1098C0001440006A2414000392E204D81440006794
-:1098D000000000003C020001005710218C4283B4BC
-:1098E0002842000510400020000038213C02000101
-:1098F000005710218C4283B4184000160000282124
-:1099000096260000000520C0009710219442777E23
-:109910001446000900971021944377809622000294
-:109920001462000500971021944377829622000468
-:1099300050620008240700013C020001005710217A
-:109940008C4283B424A5000100A2102A5440FFEEEB
-:10995000000520C030E200FF14400044241400033E
-:109960000800384A00000000024020210C0022FEBE
-:10997000240500063044001F000428C002E5102121
-:109980009442727C30424000144001EA00B710213A
-:109990009443727E962200001462000B000418C0EB
-:1099A00000B71021944372809622000214620006D0
-:1099B000000418C000B7102194437282962200045C
-:1099C00010620027000418C002E310219442727C48
-:1099D00030428000144001D702E310219448727C89
-:1099E00096270000000828C000B710219442737E1B
-:1099F0000800368500003021000420C002E4102158
-:109A00009443737C02E410219448737C306380009B
-:109A100014600010000828C000B710219442737E23
-:109A20001447FFF50100202100B7102194437380F3
-:109A3000962200025462FFF1000420C000B71021FA
-:109A400094437382962200045462FFEC000420C009
-:109A50002406000130C200FF104001B600000000E3
-:109A60000800369824140003241400018F42026079
-:109A70000053102B10400049000000008F8300E4C9
-:109A80008F8200E01062000324630008AF8300E4CB
-:109A9000AF8300E88EE400C08EE500C402601821A8
-:109AA0000000102100A3282100A3302B00822021D8
-:109AB00000862021AEE400C0AEE500C48EE200586E
-:109AC00024420001AEE200588EE200588EE2007C93
-:109AD00024420001AEE2007C8EE2007C8F8200E036
-:109AE000AFA200108F8200E43C0400012484587867
-:109AF000AFA200148FA600188FA7001C3C0500061B
-:109B00000C00240334A5F0030800385000000000C6
-:109B10008EE25240AFA200108EE252443C0400019B
-:109B200024845884AFA200148EE60E108EE70E181F
-:109B30000C00240334A5F0028EE201C0244200018F
-:109B4000AEE201C08EE200008EE301C02403FFBF3D
-:109B500000431024080037F8AEE200008EE25240C5
-:109B6000AFA200108EE252443C04000124845884C9
-:109B7000AFA200148EE60E108EE70E183C0500060C
-:109B80000C00240334A5F0028EE201C0244200013F
-:109B9000AEE201C0080037F88EE201C096E2046828
-:109BA0000053102B544000013C158000126001311D
-:109BB0003C0C001F358CFFFF8EE2724C8F430280FD
-:109BC00024420001304207FF10620108000000003B
-:109BD00012A00014000000008EE352408EE25244B6
-:109BE0001062000926EE52448EEB52448EE352443A
-:109BF000000211402442524802E280212463000105
-:109C000008003712306800FF92E272481440FFC02B
-:109C10003C0500068EE201E024420001AEE201E0D4
-:109C20008EE201E08EE30E108EE20E181062FFCB82
-:109C300026EE0E188EEB0E180000A8218EE30E18EB
-:109C40000002114024420E2002E280212463000120
-:109C5000306801FF96E2046A30420010104000179D
-:109C6000340281009643000C1462001400000000CE
-:109C70003C02000100571021904283C01440000FA5
-:109C8000000000009642000EA60200168E42000858
-:109C90008E4300048E4400002673FFFCAE42000C8D
-:109CA000AE430008AE4400049602000E26310004C4
-:109CB0002416000134420200A602000E9603000A98
-:109CC000026050210073102B1040000202606821D6
-:109CD000006050212D42003D1040002A0000382134
-:109CE0009623000C2402080054620027AE110018CD
-:109CF0003C02000100571021904283C054400022D2
-:109D0000AE110018262200170182102B10400013FC
-:109D1000000000003C02FFF5005110219042101796
-:109D2000384300062C630001384200112C42000128
-:109D30000062182510600013262200100182102BEB
-:109D40001040000E000000003C07FFF500F1382134
-:109D500094E710100800375E24E7000E92220017E7
-:109D6000384300062C630001384200112C420001E8
-:109D70000062182550600004AE11001896270010EC
-:109D800024E7000EAE1100183C020001005710211C
-:109D9000904283C00002102B14E0000200024EC06B
-:109DA000014038218F83012027623800246600207B
-:109DB00000C2102B50400001276630008F8201281E
-:109DC00010C20004000000008F82012414C20007AA
-:109DD0002402000B8EE201A400004821244200016D
-:109DE000AEE201A4080037BF8EE201A48E04000099
-:109DF0008E050004AC62001801751025004910257D
-:109E0000AC710008A467000EAC62001CAC640000DA
-:109E1000AC6500048EE204C0AC620010AF86012085
-:109E200092E24E2014400038240900018EE24E30A8
-:109E3000000210C02442503802E220218C8300002E
-:109E40002402000714620020000000008EE34E3060
-:109E50008EE24E341062001C000000008C82000470
-:109E600024420001AC8200048EE34E348EE54E3075
-:109E7000240200402463000110620007000000007B
-:109E80008EE24E342442000110A2000500000000C2
-:109E9000080037A90000000014A000050000000021
-:109EA0008F82012824420020AF8201288F8201285E
-:109EB0008C8200042C42001150400013AC80000042
-:109EC000080037BF000000008EE24E30240300403F
-:109ED0002442000150430003000010218EE24E3066
-:109EE00024420001AEE24E308EE24E30000210C03D
-:109EF0002442503802E2202124020007AC820000F4
-:109F000024020001AC820004152000183C05000664
-:109F10008E0200183C04000124845890AFA2001067
-:109F20008E0200008E03000434A5F00902003021E7
-:109F30000C002403AFA3001432C200FF1040002B1A
-:109F4000340281008E4300048E4400088E45000CCC
-:109F5000A642000CAE430000AE440004AE4500082B
-:109F600096020016080037F8A642000E154D000AAA
-:109F7000000000009602000EA613000A34420004FE
-:109F8000A602000E3C01000100370821A02083C07A
-:109F9000080037F6000098219604000A0093102B61
-:109FA00010400002026018210080182124020001E4
-:109FB000A603000A3C01000100370821A02283C04B
-:109FC0009604000A022488210191102B10400003FE
-:109FD0003C02FFF5344210000222882102649823DB
-:109FE0000000A8211660FEF4ADC800001260002138
-:109FF00032C200FF3C01000100370821AC3383C4AA
-:10A000003C01000100370821AC3183C83C0100014C
-:10A010000037082110400008AC3283CC3C0200011C
-:10A02000005710218C4283CC244200043C010001E3
-:10A0300000370821AC2283CC8EE2724C8F43028021
-:10A040002442000114620006000000008EE201C4F8
-:10A0500024420001AEE201C4080038508EE201C47F
-:10A060008EE201BC24420001AEE201BC080038507F
-:10A070008EE201BC97A4001E2484FFFC00801821FE
-:10A080008EE400C08EE500C40000102100A328214A
-:10A0900000A3302B00822021008620212402000210
-:10A0A000AEE400C0AEE500C41282000F2A820003B5
-:10A0B000144000172402000316820015000000005F
-:10A0C0008EE200D08EE300D4246300012C640001F2
-:10A0D00000441021AEE200D0AEE300D48EE200D006
-:10A0E0000800384A8EE300D48EE200D88EE300DC0C
-:10A0F000246300012C64000100441021AEE200D86A
-:10A10000AEE300DC8EE200D80800384A8EE300DCC3
-:10A110008EE200C88EE300CC246300012C640001B1
-:10A1200000441021AEE200C8AEE300CC8EE200C8CD
-:10A130008EE300CC8F8300E48F8200E01062000386
-:10A1400024630008AF8300E4AF8300E88FBF004CB6
-:10A150008FB600488FB500448FB400408FB3003CE9
-:10A160008FB200388FB100348FB0003003E00008A8
-:10A1700027BD005027BDFF90AFB600600000B021A2
-:10A18000AFBF0068AFBE0064AFB5005CAFB40058AD
-:10A19000AFB30054AFB20050AFB1004CAFB0004805
-:10A1A0008EE204D400008821241500013042000111
-:10A1B0001440002AA3A0002F8F8700E08F8800C4DE
-:10A1C0008F8200E800E220232C8210005040000122
-:10A1D00024841000000420C2008018218EE400C8EE
-:10A1E0008EE500CC0000102100A3282100A3302B15
-:10A1F0000082202100862021AEE400C8AEE500CC1C
-:10A200008F8300C83C02000A3442EFFF0103202381
-:10A210000044102B104000033C02000A3442F000BE
-:10A2200000822021008018218EE400C08EE500C449
-:10A230000000102100A3282100A3302B0082202140
-:10A2400000862021AEE400C0AEE500C4AF8800C89F
-:10A25000AF8700E408003C5BAF8700E83C020001E8
-:10A2600000571021904283C01040000B00000000F6
-:10A270003C130001027798218E7383C43C100001C7
-:10A28000021780218E1083C83C12000102579021D2
-:10A2900008003A598E5283CC8F8300E08F8200E40D
-:10A2A00010430007000038218F8200E424070001DA
-:10A2B0008C4300008C440004AFA30018AFA4001C22
-:10A2C00014E0000E3C02FFFF8F8200C4AFA200101A
-:10A2D0008F8200C83C040001248458B4AFA200144B
-:10A2E0008F8600E08F8700E43C0500060C00240305
-:10A2F00034A5F20008003C5B000000008FA3001CA6
-:10A300008FB200183073FFFF2673FFFC0062102429
-:10A3100010400058024080213C020080006210245E
-:10A320001040000A3C0400408EE2007C2442000100
-:10A33000AEE2007C8EE2007C8EE201FC2442000151
-:10A34000AEE201FC08003C558EE201FC3C06000434
-:10A350003C0B00013C0A00023C0500103C090008CF
-:10A360008EE200803C080020340780002442000177
-:10A37000AEE200808EE200808FA2001C0044182410
-:10A380001066002100C3102B1440000700000000DD
-:10A39000106B001100000000106A001500000000A2
-:10A3A00008003916000420421065002300A3102B7A
-:10A3B00014400005000000001069001900000000B2
-:10A3C0000800391600042042106800210000000037
-:10A3D00008003916000420428EE2003424420001B5
-:10A3E000AEE200348EE20034080039160004204248
-:10A3F0008EE201EC24420001AEE201EC8EE201ECBF
-:10A4000008003916000420428EE201F024420001C7
-:10A41000AEE201F08EE201F008003916000420429D
-:10A420008EE201F424420001AEE201F48EE201F476
-:10A4300008003916000420428EE200302442000158
-:10A44000AEE200308EE200300800391600042042EF
-:10A450008EE201F824420001AEE201F88EE201F83A
-:10A46000000420421087033E00000000080038DB93
-:10A47000000000003C02000100571021904283B20E
-:10A4800014400084240200013C03000100771821DD
-:10A49000906383B31462007F3C0201008E4300008E
-:10A4A000006210241040006F2402FFFF14620005B8
-:10A4B00024110001964300043402FFFF106200756E
-:10A4C0000000000092E204D8144000720000000076
-:10A4D0003C020001005710218C4283B42842000541
-:10A4E00010400020000038213C02000100571021DC
-:10A4F0008C4283B418400016000028219606000004
-:10A50000000520C0009710219442777E1446000970
-:10A510000097102194437780960200021462000590
-:10A52000009710219443778296020004506200083D
-:10A53000240700013C020001005710218C4283B423
-:10A5400024A5000100A2102A5440FFEE000520C0FF
-:10A5500030E200FF1040030200000000080039A2B2
-:10A5600000000000024020210C0022FE240500060D
-:10A570003044001F000428C002E510219442727C80
-:10A5800030424000144002F600B710219443727E1E
-:10A59000960200001462000B000418C000B71021DE
-:10A5A000944372809602000214620006000418C0F0
-:10A5B00000B71021944372829602000410620035A5
-:10A5C000000418C002E310219442727C30428000E3
-:10A5D000144002E302E31021944D727C96070000C0
-:10A5E000000D28C000B710219442737E0800398402
-:10A5F00000003021000420C002E410219443737C49
-:10A6000002E41021944D737C3063800014600010CC
-:10A61000000D28C000B710219442737E1447FFF547
-:10A6200001A0202100B710219443738096020002FC
-:10A630005462FFF1000420C000B7102194437382DC
-:10A64000960200045462FFEC000420C024060001BE
-:10A6500030C200FF104002C200000000080039A212
-:10A66000000000009743020296420000146202BC00
-:10A67000000000009743020496420002146202B8F0
-:10A68000000000009743020696420004146202B4E0
-:10A6900000000000924200003A2300013042000115
-:10A6A00000431024104000742402FFFF8E030000BA
-:10A6B000146200043402FFFF960300041062006F6E
-:10A6C000241500023C02000100571021904283B281
-:10A6D0001440006A2415000392E204D81440006775
-:10A6E000000000003C020001005710218C4283B49E
-:10A6F0002842000510400020000038213C020001E3
-:10A70000005710218C4283B4184000160000282105
-:10A7100096060000000520C0009710219442777E25
-:10A720001446000900971021944377809602000296
-:10A73000146200050097102194437782960200046A
-:10A7400050620008240700013C020001005710215C
-:10A750008C4283B424A5000100A2102A5440FFEECD
-:10A76000000520C030E200FF14400044241500031F
-:10A7700008003C5500000000024020210C0022FE91
-:10A78000240500063044001F000428C002E5102103
-:10A790009442727C304240001440027100B7102194
-:10A7A0009443727E960200001462000B000418C0ED
-:10A7B00000B71021944372809602000214620006D2
-:10A7C000000418C000B7102194437282960200045E
-:10A7D00010620027000418C002E310219442727C2A
-:10A7E000304280001440025E02E31021944D727CDE
-:10A7F00096070000000D28C000B710219442737E18
-:10A8000008003A0900003021000420C002E41021B1
-:10A810009443737C02E41021944D737C3063800078
-:10A8200014600010000D28C000B710219442737E00
-:10A830001447FFF501A0202100B710219443738035
-:10A84000960200025462FFF1000420C000B71021FC
-:10A8500094437382960200045462FFEC000420C00B
-:10A860002406000130C200FF1040023D000000003D
-:10A8700008003A1C24150003241500018F420260D1
-:10A880000053102B10400036000000008F8300E4BE
-:10A890008F8200E01062000324630008AF8300E4AD
-:10A8A000AF8300E88EE400C08EE500C4026018218A
-:10A8B0000000102100A3282100A3302B00822021BA
-:10A8C00000862021AEE400C0AEE500C48EE2005850
-:10A8D00024420001AEE200588EE200588EE2007C75
-:10A8E00024420001AEE2007C8EE2007C8F8200E018
-:10A8F000AFA200108F8200E43C040001248458C001
-:10A90000AFA200148FA600188FA7001C3C050006FC
-:10A910000C00240334A5F20308003C5B0000000097
-:10A920008EE25240AFA200108EE252443C0400017D
-:10A93000248458CCAFA200148EE60E108EE70E18B9
-:10A940003C0500060C00240334A5F2028EE201C08F
-:10A9500024420001AEE201C008003C028EE201C0C8
-:10A9600096E204680053102B544000013C1680000E
-:10A97000126001CB3C0E001F35CEFFFF3C0FFFF5F0
-:10A9800035EF1000241E00408EE2724C8F4302808F
-:10A9900024420001304207FF1062019E00000000C7
-:10A9A00012C00012000000008EE352408EE25244BA
-:10A9B0001062000A26F852448EF45244AFB80024C4
-:10A9C0008EE35244000211402442524802E28821A0
-:10A9D0002463000108003A85306D00FF8EE201E03B
-:10A9E00024420001AEE201E08EE201E08EE30E10AF
-:10A9F0008EE20E181062FFCA26F80E188EF40E189A
-:10AA00000000B021AFB800248EE30E180002114000
-:10AA100024420E2002E2882124630001306D01FFF0
-:10AA200096E2046A3042001010400018340281009F
-:10AA30009643000C14620015000000003C02000167
-:10AA400000571021904283C0144000100000000005
-:10AA50009642000EA62200168E4200088E43000485
-:10AA60008E4400002673FFFCAE42000CAE4300088B
-:10AA7000AE4400049622000E2610000424180001A3
-:10AA8000A3B8002F34420200A622000E8E2200003E
-:10AA90008E2300043C04000134843800020030217D
-:10AAA000306A0007020A8023036410210202102B7F
-:10AAB00010400005026A9821020410230362182343
-:10AAC0003C02002000438023266200079623000AF0
-:10AAD0002418FFF80058C824006A18210079102BA8
-:10AAE00010400002032060210060602101801821D5
-:10AAF000246200072418FFF800586024026C102B11
-:10AB000014400004019328230183282308003AC33A
-:10AB100000C3102100D31021004A202301C4102BB0
-:10AB200054400001008F202125420040004C102B92
-:10AB3000144000350000582194C3000C2402080082
-:10AB400054620032AE2600183C020001005710216A
-:10AB5000904283C05440002DAE26001824C2001736
-:10AB600001C2102B10400013000000003C02FFF552
-:10AB70000046102190421017384300062C63000154
-:10AB8000384200112C4200010062182510600014A8
-:10AB900024C2001001C2102B1040000E0000000063
-:10ABA0003C0BFFF501665821956B101008003AF434
-:10ABB0002562000E90C20017384300062C63000186
-:10ABC000384200112C420001006218251060000577
-:10ABD0000160182194CB00102562000E004A582114
-:10ABE00001601821246200072418FFF80058582437
-:10ABF00000C31021004A202301C4102B1040000282
-:10AC000001632823008F2021AE2600183C0200019A
-:10AC100000571021904283C00002102B000216C082
-:10AC200015600002AFA2004401805821308200016B
-:10AC3000104000070000402190880000248400019B
-:10AC400001C4102B1040000224A5FFFF008F20211B
-:10AC500050A0001200081C022CA20002544000095F
-:10AC600024A5FFFF948200002484000201024021F9
-:10AC700001C4102B1040000624A5FFFE08003B2154
-:10AC8000008F20219082000000021200010240216A
-:10AC900014A0FFF22CA2000200081C023102FFFFE8
-:10ACA000006240213108FFFF0140282111400011BE
-:10ACB000020020212CA200025440000924A5FFFF1D
-:10ACC00094820000248400020102402101C4102B60
-:10ACD0001040000624A5FFFE08003B38008F20210D
-:10ACE00090820000000212000102402114A0FFF235
-:10ACF0002CA2000200081C023102FFFF006240216A
-:10AD000000081C023102FFFF8F89012000624021F0
-:10AD100027623800252300200062102B1440000217
-:10AD20003108FFFF276330008F8201281062000482
-:10AD3000000000008F8201241462000701402821D6
-:10AD40008EE201A40000382124420001AEE201A4F9
-:10AD500008003BC98EE201A48E2600008E27000465
-:10AD6000000814003448000BAD300008A52B000E7D
-:10AD7000AD2800188FB8004400002021029610254D
-:10AD800000581025AD22001C00E5102B00E53823EB
-:10AD900000C4302300C23023AD260000AD270004DC
-:10ADA0008EE204C0AD220010AF83012092E24E205B
-:10ADB0001440005F240700012502FFEE2C42000230
-:10ADC00014400003240200111502002400000000BA
-:10ADD0008EE24E30000210C02442503802E22021A0
-:10ADE0008C830000240200121462000F0000000097
-:10ADF0008EE34E308EE24E341062000B00000000F5
-:10AE00008C82000424420001AC8200048EE24E34A5
-:10AE10008EE34E3024420001105E002A0000000044
-:10AE200008003BA8000000008EE24E3024420001E2
-:10AE3000505E0003000010218EE24E3024420001DB
-:10AE4000AEE24E308EE24E30000210C02442503846
-:10AE500002E2202108003BC6240200128EE24E309E
-:10AE6000000210C02442503802E220218C830000EE
-:10AE7000240200071462001F000000008EE34E3021
-:10AE80008EE24E341062001B000000008C82000431
-:10AE900024420001AC8200048EE24E348EE34E3038
-:10AEA00024420001105E0007000000008EE24E34D4
-:10AEB00024420001106200050000000008003BB4BD
-:10AEC0000000000014600005000000008F820128CF
-:10AED00024420020AF8201288F8201288C82000446
-:10AEE0002C42001150400012AC80000008003BC909
-:10AEF000000000008EE24E3024420001505E00034C
-:10AF0000000010218EE24E3024420001AEE24E30AD
-:10AF10008EE24E30000210C02442503802E220215E
-:10AF200024020007AC82000024020001AC8200046D
-:10AF300014E000193C0500063C04000124845890EC
-:10AF40008E22001834A5F209AFA200108E22000054
-:10AF50008E23000402203021016038210C002403DC
-:10AF6000AFA3001493A2002F1040002A34028100E6
-:10AF70008E4300048E4400088E45000CA642000C4F
-:10AF8000AE430000AE440004AE4500089622001611
-:10AF900008003C02A642000E1599000A026A182316
-:10AFA0009622000EA623000A34420004A622000EB8
-:10AFB0003C01000100370821A02083C008003BFFAE
-:10AFC000000098219624000A0083102B54400001B1
-:10AFD0000080182124020001A623000A3C01000180
-:10AFE00000370821A02283C09622000A004A1821B7
-:10AFF0000203802101D0102B54400001020F802158
-:10B00000026398230000B0218FB800241660FE5E12
-:10B01000AF0D000012600022000000003C010001A2
-:10B0200000370821AC3383C43C01000100370821FC
-:10B03000AC3083C83C01000100370821AC3283CC1E
-:10B0400093A2002F10400008000000003C02000105
-:10B05000005710218C4283CC244200043C010001A3
-:10B0600000370821AC2283CC8F4302808EE2724CE1
-:10B0700014620006000000008EE201C424420001B8
-:10B08000AEE201C408003C5B8EE201C48EE201BC6A
-:10B0900024420001AEE201BC08003C5B8EE201BC30
-:10B0A00097A4001E2484FFFC008018218EE400C0B9
-:10B0B0008EE500C40000102100A3282100A3302B3E
-:10B0C000008220210086202124020002AEE400C07C
-:10B0D000AEE500C412A2000F2AA20003144000171C
-:10B0E0002402000316A20015000000008EE200D02A
-:10B0F0008EE300D4246300012C640001004410217D
-:10B10000AEE200D0AEE300D48EE200D008003C55A1
-:10B110008EE300D48EE200D88EE300DC24630001CD
-:10B120002C64000100441021AEE200D8AEE300DC44
-:10B130008EE200D808003C558EE300DC8EE200C8A9
-:10B140008EE300CC246300012C6400010044102134
-:10B15000AEE200C8AEE300CC8EE200C88EE300CCC5
-:10B160008F8300E48F8200E01062000324630008F4
-:10B17000AF8300E4AF8300E88FBF00688FBE006438
-:10B180008FB600608FB5005C8FB400588FB3005449
-:10B190008FB200508FB1004C8FB0004803E0000820
-:10B1A00027BD007027BDFFE0AFBF00188EE30E146F
-:10B1B0008EE20E0C10620074000000008EE30E0C94
-:10B1C0008EE20E1400622023048200012484020017
-:10B1D0008EE30E188EE20E140043102B1440000470
-:10B1E000240202008EE30E1408003C7D0043182365
-:10B1F0008EE20E188EE30E14004310232443FFFF4B
-:10B20000008048210069102A544000010060482154
-:10B210008F8701002762300024E800200102102BF4
-:10B2200050400001276828008F82010811020004A5
-:10B23000000000008F8201041502000700001021A9
-:10B240008EE201A80000202124420001AEE201A804
-:10B2500008003CBF8EE201A88EE40E1400042140D9
-:10B26000008018218EE404608EE5046400A3282188
-:10B2700000A3302B0082202100862021ACE40000B6
-:10B28000ACE500048EE30E1400091140A4E2000EA8
-:10B2900024020002ACE200180003194024630E20CF
-:10B2A00002E31021ACE200088EE20E14ACE2001CB6
-:10B2B0008EE204CCACE20010AF88010092E204EC14
-:10B2C00014400011240400018EE24E2824030040A3
-:10B2D0002442000150430003000010218EE24E285A
-:10B2E00024420001AEE24E288EE24E28000210C039
-:10B2F00024424E3802E2182124020002AC6200000F
-:10B3000024020001AC6200041480000E24030040FB
-:10B310008EE20E14AFA200108EE20E183C0500075C
-:10B32000AFA200148EE60E0C8EE70E103C04000156
-:10B33000248458D40C00240334A5F00108003CDD1B
-:10B34000000000008EE2050024420001504300038B
-:10B35000000010218EE2050024420001AEE205004B
-:10B360008EE205000002108000571021AC4905084C
-:10B370008EE20E1400491021304201FFAEE20E149D
-:10B380008EE30E148EE20E0C146200050000000025
-:10B390008F8200602403FDFF00431024AF82006011
-:10B3A0008FBF001803E0000827BD002027BDFFE085
-:10B3B000AFBF00188EE3523C8EE252381062007428
-:10B3C000000000008EE352388EE2523C00622023DF
-:10B3D00004820001248401008EE352448EE2523C38
-:10B3E0000043102B14400004240201008EE3523C61
-:10B3F00008003CFF004318238EE252448EE3523C87
-:10B40000004310232443FFFF008048210069102AD5
-:10B4100054400001006048218F87010027623000FE
-:10B4200024E800200102102B50400001276828006A
-:10B430008F82010811020004000000008F820104C5
-:10B4400015020007000010218EE201A80000202153
-:10B4500024420001AEE201A808003D418EE201A8AD
-:10B460008EE4523C00042140008018218EE40470D8
-:10B470008EE5047400A3282100A3302B0082202134
-:10B4800000862021ACE40000ACE500048EE3523CD1
-:10B4900000091140A4E2000E24020003ACE20018EF
-:10B4A000000319402463524802E31021ACE2000873
-:10B4B0008EE2523CACE2001C8EE204CCACE2001006
-:10B4C000AF88010092E204EC144000112404000152
-:10B4D0008EE24E2824030040244200015043000322
-:10B4E000000010218EE24E2824420001AEE24E28D8
-:10B4F0008EE24E28000210C024424E3802E218218B
-:10B5000024020003AC62000024020001AC620004CB
-:10B510001480000E240300408EE2523CAFA20010C3
-:10B520008EE252443C050007AFA200148EE652386A
-:10B530008EE752403C040001248458E00C002403B0
-:10B5400034A5F01008003D5F000000008EE2050009
-:10B550002442000150430003000010218EE2050048
-:10B5600024420001AEE205008EE2050000021080D8
-:10B5700000571021AC4905088EE2523C00491021C9
-:10B58000304200FFAEE2523C8EE3523C8EE2523833
-:10B5900014620005000000008F8200602403FEFF9B
-:10B5A00000431024AF8200608FBF001803E0000842
-:10B5B00027BD00208F8201208EE34E348F8201242C
-:10B5C0008F8601282402004024630001506200039A
-:10B5D000000010218EE24E3424420001AEE24E34CF
-:10B5E0008EE24E348EE44E348EE34E30000210C0B4
-:10B5F000244250381483000702E228218F82012858
-:10B6000024420020AF8201288F82012808003D9249
-:10B61000ACA000008EE24E3424030040244200011E
-:10B6200050430003000010218EE24E3424420001FA
-:10B63000000210C02442503802E228218CA20004EB
-:10B640008F8301280002114000621821AF83012876
-:10B65000ACA000008CC200182443FFFE2C62001234
-:10B6600010400008000310803C0100010022082166
-:10B670008C2258F000400008000000002402000165
-:10B68000AEE24E2403E000080000000027BDFFC822
-:10B69000AFBF0030AFB5002CAFB40028AFB300246B
-:10B6A000AFB20020AFB1001CAFB000188F830128EB
-:10B6B0008F820124106202B0000098213C11001F0B
-:10B6C0003631FFFF3C12FFF53652100024150012F0
-:10B6D000241400408F8C01288F82012824420020EE
-:10B6E000AF8201289182001B8F8301282443FFFE33
-:10B6F0002C6200121040029C000310803C010001EB
-:10B70000002208218C225948004000080000000057
-:10B710008F42021830420100104000070000000074
-:10B720009583001695820018006218230003140206
-:10B7300000431021A58200168D82001C3C0380006E
-:10B740003044FFFF004368243C03080000431824F2
-:10B7500011A00004AD84001C0004114008003DD875
-:10B76000244252480004114024420E2002E2582193
-:10B770009562000E3042FFFC10600004A562000ECE
-:10B780009584001608003EC0000000008D69001876
-:10B7900000004021952A000025290002952700007D
-:10B7A0002529000295260000252900029525000084
-:10B7B0002529000295240000252900029523000078
-:10B7C0002529000295220000252900020147502169
-:10B7D000014650210145502101445021014350218F
-:10B7E00001425021000A1C023142FFFF0062502139
-:10B7F000000A1C023142FFFF0062502196E2046AF7
-:10B80000314EFFFF30420002104000440000502142
-:10B81000252200140222102B1040001401201821B0
-:10B820002405000A000020210223102B54400001AF
-:10B8300000721821946200002463000224A5FFFF17
-:10B8400014A0FFF90082202100041C023082FFFFB7
-:10B8500000622021000414023083FFFF0043102106
-:10B860003042FFFF08003E3301425021952A00007C
-:10B8700025290002952800002529000295270000AF
-:10B8800025290002952600002529000295250000A3
-:10B890002529000295230000252900029522000099
-:10B8A0002529000295240000252900020148502185
-:10B8B00001475021014650210145502101435021AB
-:10B8C000014250219522000095230002014450219D
-:10B8D0000142502101435021000A1C023142FFFF66
-:10B8E00000625021000A1C023142FFFF0062502119
-:10B8F0003148FFFF510000013408FFFF8D6200183E
-:10B900009443000C2402080054620005A56800104E
-:10B910009562000E34420002A562000EA568001078
-:10B9200096E2046A000028213042000814400056C4
-:10B93000000030218D630018246200240222102BA5
-:10B9400010400034246900100229102B54400001DB
-:10B950000132482195250000246900140229102B8A
-:10B960001040000224A5FFEC01324821952200007E
-:10B9700030420FFF144000032529000208003E60FA
-:10B98000241300010000982100A030210229102B6F
-:10B990005440000101324821912200012529000272
-:10B9A00000A228210229102B544000010132482115
-:10B9B000252900020229102B5440000101324821A0
-:10B9C000952200002529000200A228210229102B1F
-:10B9D000544000010132482195220000252900022F
-:10B9E00000A228210229102B5440000101324821D5
-:10B9F000952200002529000200A228210229102BEF
-:10BA000054400001013248219522000008003E996F
-:10BA100000A2282194650010946200142469001685
-:10BA200030420FFF1440000324A5FFEC08003E8CB9
-:10BA3000241300010000982100A03021912300016F
-:10BA400025290004952200002529000295240000E4
-:10BA50002529000200A3282100A228219522000008
-:10BA60009523000200A4282100A2282100A3282158
-:10BA700000051C0230A2FFFF0062282100051C0205
-:10BA800030A2FFFF0062282196E2046A30420001E2
-:10BA90001040001E0000202195820016004E202339
-:10BAA0000004140200822021326200FF5040000294
-:10BAB000008620210085202100041402008220211C
-:10BAC0003084FFFF508000013404FFFF8D620018B6
-:10BAD000244300170223102B544000010072182148
-:10BAE00090620000384300112C63000138420006C8
-:10BAF0002C420001006218251060000400000000C4
-:10BB00009562000E34420001A562000E9562000E9F
-:10BB1000240A00023042000410400002A564001212
-:10BB2000240A00048F88012027623800250900209C
-:10BB30000122102B50400001276930008F8201281C
-:10BB400011220004000000008F820124152200074A
-:10BB5000240400208EE201A4000080212442000180
-:10BB6000AEE201A408003F4F8EE201A48EE5724CC4
-:10BB70008EE604908EE70494AD0B0008A504000E39
-:10BB8000AD0A00180005294000A01821000010216E
-:10BB900000E3382100E3202B00C2302100C4302113
-:10BBA000AD060000AD0700048EE2724C004D10257A
-:10BBB000AD02001C8EE204C4AD020010AF8901206A
-:10BBC00092E24E2014400060241000012543FFEE55
-:10BBD0002C630002394200112C420001006218253A
-:10BBE00010600024000000008EE24E30000210C001
-:10BBF0002442503802E220218C8200001455000FAC
-:10BC0000000000008EE34E308EE24E341062000BD6
-:10BC1000000000008C82000424420001AC82000479
-:10BC20008EE24E348EE34E30244200011054002B3D
-:10BC30000000000008003F2E000000008EE24E30A1
-:10BC40002442000150540003000010218EE24E30C7
-:10BC500024420001AEE24E308EE24E30000210C0AF
-:10BC60002442503802E220212402000108003F4E05
-:10BC7000AC9500008EE24E30000210C024425038D5
-:10BC800002E220218C830000240200071462001FBE
-:10BC9000000000008EE34E308EE24E341062001B36
-:10BCA000000000008C82000424420001AC820004E9
-:10BCB0008EE24E348EE34E302442000110540007D1
-:10BCC000000000008EE24E342442000110620005A4
-:10BCD0000000000008003F3A00000000146000056A
-:10BCE000000000008F82012824420020AF8201283A
-:10BCF0008F8201288C8200042C42001150400012D7
-:10BD0000AC80000008003F4F000000008EE24E3083
-:10BD10002442000150540003000010218EE24E30F6
-:10BD200024420001AEE24E308EE24E30000210C0DE
-:10BD30002442503802E2202124020007AC82000095
-:10BD400024020001AC8200041600000D0000000077
-:10BD50008F8201203C04000124845938AFA00014D4
-:10BD6000AFA200108D86001C8F8701243C050008BF
-:10BD70000C00240334A50001080040570000000017
-:10BD80008EE2724C24420001304207FF11A00006EF
-:10BD9000AEE2724C8EE201D02442FFFFAEE201D04F
-:10BDA00008003F6B8EE201D08EE201CC2442FFFFFF
-:10BDB000AEE201CC8EE201CC8EE201D82442FFFF3C
-:10BDC000AEE201D8080040578EE201D88F4202400F
-:10BDD000104000E5000000008EE20E1C244200012D
-:10BDE00008004057AEE20E1C9582001EAD82001C7A
-:10BDF0008F42024010400072000000008EE20E1CD4
-:10BE000024420001AEE20E1C8F4302400043102B7F
-:10BE1000144000D5000000008F8301202762380005
-:10BE20002466002000C2102B50400001276630001D
-:10BE30008F82012810C20004000000008F820124BC
-:10BE400014C20007000000008EE201A4000080215F
-:10BE500024420001AEE201A408003FDA8EE201A410
-:10BE60008EE2724CAC62001C8EE404A88EE504AC39
-:10BE70002462001CAC62000824020008A462000EC8
-:10BE800024020011AC620018AC640000AC65000430
-:10BE90008EE204C4AC620010AF86012092E24E2014
-:10BEA00014400034241000018EE24E30000210C015
-:10BEB0002442503802E220218C8200001455001FD9
-:10BEC000000000008EE34E308EE24E341062001B04
-:10BED000000000008C82000424420001AC820004B7
-:10BEE0008EE24E348EE34E3024420001105400079F
-:10BEF000000000008EE24E34244200011062000572
-:10BF00000000000008003FC60000000014600005AB
-:10BF1000000000008F82012824420020AF82012807
-:10BF20008F8201288C8200042C42001150400011A5
-:10BF3000AC80000008003FDA000000008EE24E30C6
-:10BF40002442000150540003000010218EE24E30C4
-:10BF500024420001AEE24E308EE24E30000210C0AC
-:10BF60002442503802E2202124020001AC95000056
-:10BF7000AC8200045600000B241000018EE2724CCB
-:10BF80003C040001248458A8AFA00014AFA2001004
-:10BF90008EE6724C8F4702803C0500090C0024039A
-:10BFA00034A5F00856000001AEE00E1C8EE20188B8
-:10BFB00024420001AEE20188080040508EE2018870
-:10BFC0008F830120276238002466002000C2102BD6
-:10BFD00050400001276630008F82012810C2000403
-:10BFE000000000008F82012414C20007000000003E
-:10BFF0008EE201A40000802124420001AEE201A4EF
-:10C00000080040448EE201A48EE2724CAC62001C37
-:10C010008EE404A88EE504AC2462001CAC62000827
-:10C0200024020008A462000E24020011AC62001871
-:10C03000AC640000AC6500048EE204C4AC62001085
-:10C04000AF86012092E24E201440003424100001FB
-:10C050008EE24E30000210C02442503802E220210D
-:10C060008C8200001455001F000000008EE34E304B
-:10C070008EE24E341062001B000000008C8200042F
-:10C0800024420001AC8200048EE24E348EE34E3036
-:10C090002442000110540007000000008EE24E34DC
-:10C0A000244200011062000500000000080040303A
-:10C0B0000000000014600005000000008F820128CD
-:10C0C00024420020AF8201288F8201288C82000444
-:10C0D0002C42001150400011AC8000000800404488
-:10C0E000000000008EE24E30244200015054000354
-:10C0F000000010218EE24E3024420001AEE24E30AC
-:10C100008EE24E30000210C02442503802E220215C
-:10C1100024020001AC950000AC8200041600000B64
-:10C12000000000008EE2724C3C040001248458A8F8
-:10C13000AFA00014AFA200108EE6724C8F470280B1
-:10C140003C0500090C00240334A5F0088EE20174BC
-:10C1500024420001AEE20174080040578EE20174EF
-:10C1600024020001AEE24E248F8301288F82012435
-:10C170001462FD58000000008FBF00308FB5002C06
-:10C180008FB400288FB300248FB200208FB1001C21
-:10C190008FB0001803E0000827BD003827BDFFE876
-:10C1A000278402082745020024060008AFBF0014B8
-:10C1B0000C00249AAFB000100000202124100001D0
-:10C1C0002402241FAF900210AF900200AF8002043F
-:10C1D000AF8202148F460248240300043C02004050
-:10C1E0003C010001AC235CC43C010001AC235CC8F1
-:10C1F0003C010001AC205D9C3C010001AC225CC014
-:10C200003C010001AC235CC80C005108240500046B
-:10C210000C004822000000008EE200003C03FEFFFC
-:10C220003463FFFD00431024AEE200003C023C00FA
-:10C23000AF82021C3C01000100370821AC3083AC06
-:10C240008FBF00148FB0001003E0000827BD001856
-:10C2500027BDFFE03C05000834A50400AFBF00186F
-:10C26000AFA00010AFA000148F8602003C040001B4
-:10C27000248459F00C002403000038218EE202804F
-:10C2800024420001AEE202808EE202808F8302002F
-:10C290003C023F00006218248FBF00183C020400DB
-:10C2A00003E0000827BD002027BDFFD8AFBF002056
-:10C2B000AFB1001CAFB000188F9002208EE20214C4
-:10C2C0000000382124420001AEE202148EE2021482
-:10C2D0003C02030002021024104000273C1104001D
-:10C2E0000C00429B000000003C02010002021024EE
-:10C2F00010400007000000008EE2021824420001F6
-:10C30000AEE202188EE20218080040C63C03FDFFB0
-:10C310008EE2021C24420001AEE2021C8EE2021CEC
-:10C320003C03FDFF3463FFFF3C0808FF3508FFFFB7
-:10C330008EE200003C040001248459FC3C05000806
-:10C340000200302100431024AEE200008F82022060
-:10C35000000038213C03030000481024004310254E
-:10C36000AF820220AFA000100C002403AFA0001485
-:10C370000800429600000000021110241040001F27
-:10C380003C0240008F830224240214021462000B3A
-:10C390003C03FDFF3C04000124845A083C050008CE
-:10C3A000AFA00010AFA000148F86022434A5FFFFB9
-:10C3B0000C002403000038213C03FDFF8EE2000046
-:10C3C0003463FFFF02002021004310240C004E5470
-:10C3D000AEE200008EE2022024420001AEE2022022
-:10C3E0008EE202208F8202203C0308FF3463FFFFAD
-:10C3F0000043102408004295005110250202102429
-:10C4000010400142000000008EE2022C2442000194
-:10C41000AEE2022C8EE2022C8F8202203C0308FF47
-:10C420003463FFFF0043102434420004AF82022033
-:10C430008F8300548F8200540800410E2463000251
-:10C440008F820054006210232C4200031440FFFC32
-:10C45000000000008F8600E08F8400E430C20007F7
-:10C4600010400012000000008F8300E42402FFF857
-:10C4700000C210241043000D000000008F82005401
-:10C480008F8300E014C30009244400508F820054BD
-:10C49000008210232C4200511040000400000000D4
-:10C4A0008F8200E010C2FFF9000000008F8202209E
-:10C4B0003C0308FF3463FFFD00431024AF820220D9
-:10C4C0008F8600E030C20007104000032402FFF80E
-:10C4D00000C23024AF8600E08F8300C43C02001FFE
-:10C4E0003442FFFF246800080048102B104000036E
-:10C4F0003C02FFF534421000010240218F8B00C83E
-:10C500008F8501208F8401240800414500006021AF
-:10C51000276238000082102B504000012764300051
-:10C5200010A40010318200FF8C82001838430007ED
-:10C530002C6300013842000B2C42000100621825D8
-:10C540005060FFF3248400208EE20240240C00019E
-:10C5500024420001AEE202408EE202408C8B0008D1
-:10C56000318200FF14400065000000003C02000121
-:10C5700000571021904283C014400060000000006A
-:10C580008F8400E400C41023000218C30462000179
-:10C59000246302008F8900C410600005240200019A
-:10C5A0001062000900000000080041870000000040
-:10C5B0008EE202300120582124420001AEE2023016
-:10C5C000080041BC8EE202308EE202343C05000AD3
-:10C5D00024420001AEE202348C8B000034A5F0004E
-:10C5E0008EE20234012B182300A3102B54400001CB
-:10C5F000006518212C62233F144000400000000019
-:10C600008F8200E824420008AF8200E88F8200E8B1
-:10C610008F8200E40120582124420008AF8200E408
-:10C62000080041BC8F8200E48EE202383C03000A1D
-:10C6300024420001AEE202388C8400003463F00032
-:10C640008EE20238008838230067102B5440000126
-:10C6500000E338213C02000334420D400047102B18
-:10C660001040000300000000080041BC0080582179
-:10C670008F8200E424440008AF8400E48F8400E447
-:10C68000108600183C05000A34A5F0003C0A00039F
-:10C69000354A0D408EE2007C24420001AEE2007C6F
-:10C6A0008C8300008EE2007C0068382300A7102BEA
-:10C6B0005440000100E538210147102B5440000789
-:10C6C000006058218F8200E424440008AF8400E415
-:10C6D0008F8400E41486FFEF00000000148600053C
-:10C6E0000000000001205821AF8600E4080041BC92
-:10C6F000AF8600E8AF8400E4AF8400E88F8200C812
-:10C700003C03000A3463F000004838230067102B14
-:10C710005440000100E338213C02000334420D3F45
-:10C720000047102B544000070000602101683823A7
-:10C730000067102B5440000300E33821080041CF6C
-:10C740003C0200033C02000334420D3F0047102B23
-:10C7500014400016318200FF144000060000000063
-:10C760003C02000100571021904283C01040000F8E
-:10C77000000000008EE2023C3C04FDFF8EE300005E
-:10C780003484FFFF24420001AEE2023C8EE2023C10
-:10C7900024020001006418243C0100010037082134
-:10C7A000A02283B80800422CAEE30000AF8B00C883
-:10C7B0008F8300C88F8200C43C04000A3484F000D8
-:10C7C000006238230087102B5440000100E4382118
-:10C7D0003C02000334420D400047102B2CE30001C3
-:10C7E0000043102510400008000000008F82022046
-:10C7F0003C0308FF3463FFFF004310243C03400068
-:10C8000000431025AF8202208F8600E08F8400E471
-:10C8100010C4002A000000008EE2007C24420001C7
-:10C82000AEE2007C8EE2007C24C2FFF8AF8200E022
-:10C830003C0200018C427E303C0300088F8600E001
-:10C84000004310241040001D0000000010C4001B15
-:10C85000240DFFF83C0A000A354AF0003C0C008029
-:10C86000248500082762280050A2000127651800CF
-:10C870008C8800048C8200008CA900003103FFFF2B
-:10C8800000431021004D102424430010006B102B96
-:10C8900054400001006A1821012B102B5440000164
-:10C8A000012A482110690002010C1025AC82000405
-:10C8B00000A0202114C4FFEB248500088F820220F1
-:10C8C0003C0308FF3463FFFF00431024344200029E
-:10C8D000AF8202208F8300548F82005408004237B9
-:10C8E000246300018F820054006210232C42000256
-:10C8F0001440FFFC000000008F8202203C0308FF70
-:10C900003463FFFB00431024AF8202200601005570
-:10C91000000000008EE2022824420001AEE202285C
-:10C920008EE202288F8202203C0308FF3463FFFF5F
-:10C930000043102434420004AF8202208F8300544D
-:10C940008F82005408004251246300028F820054F9
-:10C95000006210232C4200031440FFFC0000000082
-:10C960008F8600E030C20007104000120000000077
-:10C970008F8300E42402FFF800C210241043000D4E
-:10C98000000000008F8200548F8300E014C3000970
-:10C99000244400328F820054008210232C42003342
-:10C9A00010400004000000008F8200E010C2FFF978
-:10C9B000000000008F8202203C0308FF3463FFFD6B
-:10C9C00000431024AF8202208F8600E030C20007AF
-:10C9D000104000032402FFF800C23024AF8600E0BC
-:10C9E000240301F58F8200E800673823000718C090
-:10C9F00000431021AF8200E88F8200E8AF8200E49C
-:10CA00008EE2007C3C0408FF3484FFFF00471021C5
-:10CA1000AEE2007C8F8202203C038000346300027F
-:10CA20000044102400431025AF8202208F8300545D
-:10CA30008F8200540800428D246300018F820054CD
-:10CA4000006210232C4200021440FFFC0000000092
-:10CA50008F8202203C0308FF3463FFFB0043102455
-:10CA6000AF8202208FBF00208FB1001C8FB0001852
-:10CA700003E0000827BD00283C0200018C425CD87E
-:10CA800027BDFFD810400012AFBF00203C040001BA
-:10CA900024845A143C050008240200013C010001D2
-:10CAA00000370821AC2283ACAFA00010AFA0001467
-:10CAB0008F86022034A504983C010001AC205CD88C
-:10CAC0003C010001AC225CCC0C00240300003821A6
-:10CAD0008F4202683C037FFF3463FFFF0043102452
-:10CAE000AF4202688EE204D08EE404D42403FFFE39
-:10CAF00000431024308400021080011EAEE204D0F6
-:10CB00008EE204D42403FFFD00431024AEE204D4DB
-:10CB10008F8200443C03060034632000344200202E
-:10CB2000AF820044AFA300188EE206088F430228AC
-:10CB300024420001304A00FF514300FEAFA0001024
-:10CB40008EE20608000210C0005710218FA30018C3
-:10CB50008FA4001CAC43060CAC4406108F83005419
-:10CB60008F82005424690032012210232C420033AA
-:10CB70001040006A0000582124180008240F000DFE
-:10CB8000240D0007240C0040240E00018F87012093
-:10CB90002762380024E800200102102B50400001D9
-:10CBA000276830008F820128110200040000000075
-:10CBB0008F82012415020007000010218EE201A4DB
-:10CBC0000000282124420001AEE201A40800433DF8
-:10CBD0008EE201A48EE40608000420C00080182123
-:10CBE0008EE404308EE5043400A3282100A3302B0A
-:10CBF0000082202100862021ACE40000ACE5000486
-:10CC00008EE20608A4F8000EACEF0018ACEA001C97
-:10CC1000000210C02442060C02E21021ACE200081F
-:10CC20008EE204C4ACE20010AF88012092E24E20F4
-:10CC300014400033240500018EE24E30000210C083
-:10CC40002442503802E220218C820000144D001F43
-:10CC5000000000008EE34E308EE24E341062001B66
-:10CC6000000000008C82000424420001AC82000419
-:10CC70008EE24E348EE34E3024420001104C000709
-:10CC8000000000008EE24E342442000110620005D4
-:10CC9000000000000800432A0000000014600005A6
-:10CCA000000000008F82012824420020AF8201286A
-:10CCB0008F8201288C8200042C4200115040001009
-:10CCC000AC8000000800433D000000008EE24E30C2
-:10CCD00024420001504C0003000010218EE24E302F
-:10CCE00024420001AEE24E308EE24E30000210C00F
-:10CCF0002442503802E22021AC8D0000AC8E0004AA
-:10CD000054A00006240B00018F820054012210233E
-:10CD10002C4200331440FF9D00000000316300FFEF
-:10CD20002402000154620079AFA00010AEEA0608A8
-:10CD30008F8300548F820054246900320122102313
-:10CD40002C4200331040006100005821240D0008DF
-:10CD5000240C00112408001224070040240A0001BA
-:10CD60008F830120276238002466002000C2102B28
-:10CD700050400001276630008F82012810C2000455
-:10CD8000000000008F82012414C200070000000090
-:10CD90008EE201A40000282124420001AEE201A499
-:10CDA000080043A98EE201A48EE20608AC62001CD2
-:10CDB0008EE404A08EE504A42462001CAC6200088A
-:10CDC000A46D000EAC6C0018AC640000AC650004EF
-:10CDD0008EE204C4AC620010AF86012092E24E20C5
-:10CDE00014400033240500018EE24E30000210C0D2
-:10CDF0002442503802E220218C8200001448001F97
-:10CE0000000000008EE34E308EE24E341062001BB4
-:10CE1000000000008C82000424420001AC82000467
-:10CE20008EE24E348EE34E3024420001104700075C
-:10CE3000000000008EE24E34244200011062000522
-:10CE40000000000008004396000000001460000588
-:10CE5000000000008F82012824420020AF820128B8
-:10CE60008F8201288C8200042C4200115040001057
-:10CE7000AC800000080043A9000000008EE24E30A4
-:10CE80002442000150470003000010218EE24E3082
-:10CE900024420001AEE24E308EE24E30000210C05D
-:10CEA0002442503802E22021AC880000AC8A000401
-:10CEB00054A00006240B00018F820054012210238D
-:10CEC0002C4200331440FFA600000000316300FF35
-:10CED0002402000154620003AFA00010080043D6F2
-:10CEE000000000003C04000124845A20AFA000147C
-:10CEF0008F8601208F8701243C0500090C00240344
-:10CF000034A5F011080043D6000000003C040001E5
-:10CF100024845A2CAFA000148F8601208F8701240F
-:10CF20003C0500090C00240334A5F010080043D68A
-:10CF3000000000003C04000124845A38AFA0001413
-:10CF40008EE606088F4702283C0500090C002403E2
-:10CF500034A5F00F8EE201AC24420001AEE201AC38
-:10CF60008EE201AC8EE2015C24420001AEE2015C83
-:10CF70008EE2015C8FBF002003E0000827BD00287F
-:10CF80003C0200018C425CD827BDFFE01440000D3C
-:10CF9000AFBF00183C04000124845A443C0500083B
-:10CFA000AFA00010AFA000148F86022034A5049912
-:10CFB000240200013C010001AC225CD80C002403D7
-:10CFC000000038218EE204D03C03000100771821D4
-:10CFD000946383B23442000110600007AEE204D0D3
-:10CFE0008F8202203C0308FF3463FFFF00431024BC
-:10CFF00034420008AF820220000020210C0052A21F
-:10D0000024050004AF4202688FBF001803E0000847
-:10D0100027BD00200000000000000000000000000C
-:10D020000000000000000000000000000000000000
-:10D0300000000000000000000000000000000000F0
-:10D0400000000000000000000000000000000000E0
-:10D0500000000000000000000000000000000000D0
-:10D0600000000000000000000000000000000000C0
-:10D0700000000000000000000000000000000000B0
-:10D0800000000000000000000000000000000000A0
-:10D090000000000000000000000000000000000090
-:10D0A0000000000000000000000000000000000080
-:10D0B0000000000000000000000000000000000070
-:10D0C0000000000000000000000000000000000060
-:10D0D0000000000000000000000000000000000050
-:10D0E0000000000000000000000000000000000040
-:10D0F0000000000000000000000000000000000030
-:10D100000000000000000000000000003C120001D0
-:10D11000265212003C1400018E945C503C10000119
-:10D12000261011203C15C00036B500608E8A000024
-:10D130008EB30000026A400B0248000A0200F82188
-:10D14000000000000000000D0000000000000000D2
-:10D1500000000000000000000000000000000000CF
-:10D1600000000000000000000000000000000000BF
-:10D1700000000000000000000000000000000000AF
-:10D18000000000000000000000000000000000009F
-:10D19000000000000000000000000000000000008F
-:10D1A000000000000000000000000000000000007F
-:10D1B000000000000000000000000000000000006F
-:10D1C000000000000000000000000000000000005F
-:10D1D000000000000000000000000000000000004F
-:10D1E000000000000000000000000000000000003F
-:10D1F000000000000000000000000000000000002F
-:10D20000000000000000000000000000080014D62C
-:10D2100000000000080014D83C0A0001080014D8DF
-:10D220003C0A0002080014D800000000080024A6F0
-:10D2300000000000080014D83C0A0003080014D8BD
-:10D240003C0A000408002F8C00000000080014D8DD
-:10D250003C0A000508003CE80000000008003C66AD
-:10D2600000000000080014D83C0A0006080014D88A
-:10D270003C0A0007080014D800000000080014D879
-:10D2800000000000080014D80000000008002A7503
-:10D2900000000000080014D83C0A000B080014D855
-:10D2A0003C0A000C080014D83C0A000D0800237A40
-:10D2B000000000000800233900000000080014D816
-:10D2C0003C0A000E08001B3C00000000080024A4DB
-:10D2D00000000000080014D83C0A000F080040A716
-:10D2E000000000000800409100000000080014D871
-:10D2F0003C0A0010080014EE00000000080014D8DA
-:10D300003C0A0011080014D83C0A0012080014D886
-:10D310003C0A0013000000000000000000000000B4
-:10D3200000000000000000000000000000000000FD
-:10D3300000000000000000000000000000000000ED
-:10D3400000000000000000000000000000000000DD
-:10D3500000000000000000000000000000000000CD
-:10D3600000000000000000000000000000000000BD
-:10D3700000000000000000000000000000000000AD
-:10D38000000000000000000000000000000000009D
-:10D39000000000000000000000000000000000008D
-:10D3A000000000000000000000000000000000007D
-:10D3B000000000000000000000000000000000006D
-:10D3C000000000000000000000000000000000005D
-:10D3D000000000000000000000000000000000004D
-:10D3E000000000000000000000000000000000003D
-:10D3F000000000000000000000000000000000002D
-:10D400000000000000000000000000003C030001DC
-:10D4100034633800240500802404001F2406FFFF25
-:10D4200024020001AF80021CAF820200AF82022002
-:10D4300003631021AF8200C003631021AF8200C4D8
-:10D4400003631021AF8200C827623800AF8200D08A
-:10D4500027623800AF8200D427623800AF8200D83C
-:10D4600027621800AF8200E027621800AF8200E454
-:10D4700027621800AF8200E827621000AF8200F038
-:10D4800027621000AF8200F427621000AF8200F81C
-:10D49000ACA000002484FFFF1486FFFD24A5000437
-:10D4A0008F8300403C02F000006218243C025000D0
-:10D4B0001062000C0043102B144000063C02600078
-:10D4C0003C024000106200082402080008004539B0
-:10D4D0000000000010620004240208000800453922
-:10D4E00000000000240207003C010001AC225CDCCB
-:10D4F00003E000080000000027BDFFD8AFBF0024F4
-:10D50000AFB000208F8300548F8200543C01000193
-:10D51000AC205CC408004545246300648F8200543D
-:10D52000006210232C4200651440FFFC0000000044
-:10D530000C004D71000000002404000100002821AF
-:10D5400027A60018340280000C00498EA7A20018FC
-:10D550008F8300548F820054080045562463006472
-:10D560008F820054006210232C4200651440FFFC9F
-:10D5700024040001240500010C00494C27A60018D2
-:10D580008F8300548F820054080045622463006436
-:10D590008F820054006210232C4200651440FFFC6F
-:10D5A00024040001240500010C00494C27A60018A2
-:10D5B0008F8300548F8200540800456E24630064FA
-:10D5C0008F820054006210232C4200651440FFFC3F
-:10D5D000240400013C06000124C65DA00C00494C57
-:10D5E000240500028F8300548F8200540800457B7D
-:10D5F000246300648F820054006210232C42006573
-:10D600001440FFFC24040001240500033C10000129
-:10D6100026105DA20C00494C0200302197A600188C
-:10D620003C07000194E75DA03C04000124845AB04B
-:10D63000AFA00014960200003C05000D34A50100C7
-:10D640000C002403AFA2001097A200181040004C59
-:10D6500024036040960200003042FFF01443000AA9
-:10D66000240200203C03000194635DA05462000981
-:10D6700024027830240200033C010001AC225CC487
-:10D68000080045AC240200053C03000194635DA042
-:10D69000240278301462000F240300103C020001C1
-:10D6A00094425DA23042FFF01443000A24020003BA
-:10D6B0003C010001AC225CC4240200063C010001D4
-:10D6C000AC225DB03C010001AC225DBC080045E627
-:10D6D0003C09FFF03C0200018C425CC43C030001A9
-:10D6E00094635DA0344200013C010001AC225CC4A3
-:10D6F000240200151462000F000000003C0200012B
-:10D7000094425DA23042FFF03843F4202C630001C4
-:10D710003842F4302C4200010062182510600005E8
-:10D72000240200033C010001AC225DBC080045E678
-:10D730003C09FFF03C03000194635DA024027810D3
-:10D740001462000B240200023C02000194425DA21C
-:10D750003042FFF0144000062402000224020004BC
-:10D760003C010001AC225DBC080045E63C09FFF02D
-:10D770003C010001AC225DBC080045E63C09FFF01D
-:10D780003C0200018C425CC4240300013C01000106
-:10D79000AC235DBC344200043C010001AC225CC4FB
-:10D7A0003C09FFF03529BDC03C0600018CC65CC4B5
-:10D7B0003C04000124845AB0240200013C01000111
-:10D7C000AC225CCC8F8200543C0700018CE75DBC2E
-:10D7D0003C03000194635DA03C08000195085DA234
-:10D7E0003C05000D34A501003C010001AC205CC8E3
-:10D7F000004910213C010001AC225DACAFA3001038
-:10D800000C002403AFA800148FBF00248FB00020A9
-:10D8100003E0000827BD002827BDFFE83C05000104
-:10D820008CA55CC8240600042402000114A2001484
-:10D83000AFBF00103C0200018C427E3C30428000B1
-:10D84000104000053C04000F3C0300018C635DBCEC
-:10D8500008004617348442403C0400043C030001A5
-:10D860008C635DBC348493E02402000514620016CE
-:10D87000000000003C04003D0800462F34840900ED
-:10D880003C0200018C427E3830428000104000058E
-:10D890003C04001E3C0300018C635DBC0800462A6A
-:10D8A000348484803C04000F3C0300018C635DBC25
-:10D8B000348442402402000514620003000000008A
-:10D8C0003C04007A348412003C0200018C425DACBE
-:10D8D0008F83005400441021004310230044102B78
-:10D8E00014400037000000003C0200018C425CD074
-:10D8F00014400033000000003C01000110C000256E
-:10D90000AC205CE03C0900018D295CC424070001C7
-:10D910003C0440003C08000125087E3C250AFFFC31
-:10D920000005284214A0000224C6FFFF24050008B9
-:10D9300000A91024104000100000000014A70008E7
-:10D94000000000008D020000004410241040000A76
-:10D95000000000003C0100010800465BAC255CE0D3
-:10D960008D4200000044102410400003000000001D
-:10D970003C010001AC275CE03C0200018C425CE011
-:10D980000006182B2C420001004310245440FFE5F0
-:10D99000000528428F8200543C0300018C635CE048
-:10D9A0003C010001AC225DAC1060002A24020001A1
-:10D9B0003C010001AC255CC83C010001AC225CCC00
-:10D9C0003C0200018C425CE010400022000000009C
-:10D9D0003C0200018C425CCC1040000A2402000191
-:10D9E0003C010001AC205CCC3C0100010037082167
-:10D9F000AC2283AC3C010001AC205D4C3C01000139
-:10DA0000AC225D043C030001007718218C6383ACD9
-:10DA10002402000810620005240200010C00469553
-:10DA20000000000008004692000000003C030001D6
-:10DA30008C635CC8106200072402000E3C030001E6
-:10DA40008C637DD010620003000000000C004E5477
-:10DA50008F8402208FBF001003E0000827BD00184C
-:10DA600027BDFFE03C02FDFFAFBF00188EE30000C2
-:10DA70003C0500018CA55CC83C0400018C845CF072
-:10DA80003442FFFF0062182414A40008AEE3000033
-:10DA90003C030001007718218C6383AC3C02000139
-:10DAA0008C425CF410620008000000003C0200019F
-:10DAB000005710218C4283AC3C010001AC255CF086
-:10DAC0003C010001AC225CF43C0300018C635CC8A7
-:10DAD00024020002106201692C620003104000055C
-:10DAE0002402000110620008000000000800481C29
-:10DAF0000000000024020004106200B124020001B2
-:10DB00000800481D000000003C02000100571021E1
-:10DB10008C4283AC2443FFFF2C6200081040015A62
-:10DB2000000310803C010001002208218C225AC809
-:10DB300000400008000000003C0300018C635DBC55
-:10DB40002402000514620014000000003C020001E1
-:10DB50008C425CD41040000A240200030C004822CE
-:10DB600000000000240200023C01000100370821EF
-:10DB7000AC2283AC3C010001080046E0AC205CD440
-:10DB80003C01000100370821AC2283AC3C010001BC
-:10DB90000800481FAC205C600C0048220000000018
-:10DBA0003C0200018C425CD43C010001AC205C6072
-:10DBB000104000DD240200023C0100010037082172
-:10DBC000AC2283AC3C0100010800481FAC205CD4AF
-:10DBD0003C0300018C635DBC240200051462000359
-:10DBE000240200013C010001AC225D000C0049CF81
-:10DBF000000000003C0300018C635D000800478EBC
-:10DC0000240200113C0500018CA55CC83C06000103
-:10DC10008CC67E3C0C005108000020212402000527
-:10DC20003C010001AC205CD43C010001003708211C
-:10DC30000800481FAC2283AC3C04000124845ABC79
-:10DC40003C05000F34A50100000030210000382100
-:10DC5000AFA000100C002403AFA000140800481F60
-:10DC6000000000008F8202203C03F70000431025D3
-:10DC7000080047B7AF8202208F8202203C030004D5
-:10DC800000431024144000A9240200078F8300548D
-:10DC90003C0200018C425DA42463D8F000431023B1
-:10DCA0002C422710144000F8240200010800481DEF
-:10DCB000000000003C0500018CA55CC80C0052A2CD
-:10DCC000000020210C005386000020213C030001AD
-:10DCD0008C637E34046100EA240200013C020008E7
-:10DCE0000062102410400006000000008F82021421
-:10DCF0003C03FFFF00431024080047413442251F26
-:10DD00008F8202143C03FFFF004310243442241F7F
-:10DD1000AF8202148EE200003C0302000043102593
-:10DD2000AEE200008F8202202403FFFB0043102498
-:10DD3000AF8202208F82022034420002AF82022092
-:10DD4000240200083C01000100370821AC2283AC0A
-:10DD50008F8202203C03000400431024144000057D
-:10DD6000000000008F8202203C03F70000431025D2
-:10DD7000AF8202203C0300018C635DBC24020005DD
-:10DD80001462000A000000003C02000194425DA2FF
-:10DD900024429FBC2C4200041040000424040018BC
-:10DDA000240500020C004D93240600200C0043DDE6
-:10DDB000000000003C0100010800481FAC205D503D
-:10DDC0003C020001005710218C4283AC2443FFFF2A
-:10DDD0002C620008104000AC000310803C010001E0
-:10DDE000002208218C225AE80040000800000000B0
-:10DDF0000C00429B000000003C010001AC205CCC08
-:10DE0000AF8002043C0100010C004822AC207E20BF
-:10DE1000240200013C010001AC225CE42402000267
-:10DE20003C010001003708210800481FAC2283ACE8
-:10DE30000C00489F000000003C0300018C635CE480
-:10DE40002402000914620090240200033C01000136
-:10DE5000003708210800481FAC2283AC3C020001B7
-:10DE60008C427E3830424000104000050000000027
-:10DE70008F8200443C03FFFF0800479F34637FFF0D
-:10DE80008F8200442403FF7F00431024AF820044AC
-:10DE90008F830054080047B9240200048F83005484
-:10DEA0003C0200018C425DA42463D8F0004310239F
-:10DEB0002C42271014400074240200053C0100018C
-:10DEC000003708210800481FAC2283AC8F82022053
-:10DED0003C03F70000431025AF820220AF8002040C
-:10DEE0003C010001AC207E208F83005424020006F8
-:10DEF0003C01000100370821AC2283AC3C01000149
-:10DF00000800481FAC235DA48F8300543C0200012D
-:10DF10008C425DA42463FFF6004310232C42000AC8
-:10DF20001440005900000000240200073C010001D9
-:10DF3000003708210800481FAC2283AC8F820220E2
-:10DF40003C04F70000441025AF8202208F8202209B
-:10DF50003C03030000431024144000050000182176
-:10DF60008F8202202403000100441025AF8202208A
-:10DF700010600043240200018F8202143C03FFFF63
-:10DF80003C0400018C845D98004310243442251F1A
-:10DF9000AF820214240200083C010001003708216E
-:10DFA0001080000BAC2283AC3C0200018C425D74FB
-:10DFB00014400007240200013C010001AC227DD086
-:10DFC0000C004E548F8402200800480C0000000012
-:10DFD0008F8202203C0300080043102414400017E5
-:10DFE0002402000E3C010001AC227DD08EE2000034
-:10DFF000000020213C030200004310250C00538642
-:10E00000AEE200008F8202202403FFFB00431024B5
-:10E01000AF8202208F820220344200020C0043DDD6
-:10E02000AF8202203C0500018CA55CC80C0052A206
-:10E03000000020210800481F000000003C020001F1
-:10E040008C425D7410400010000000003C02000192
-:10E050008C425D702442FFFF3C010001AC225D70E8
-:10E0600014400009240200023C010001AC205D7450
-:10E070003C0100010800481FAC225D702402000131
-:10E080003C010001AC225CCC8FBF001803E000080B
-:10E0900027BD00208F8202008F8202208F82022003
-:10E0A00034420004AF8202208F8202003C0600014D
-:10E0B0008CC65CC834420004AF8202002402000215
-:10E0C00010C2003A2CC200031040000524020001D7
-:10E0D00010C20008000000000800486800000000AE
-:10E0E0002402000410C20013240200010800486842
-:10E0F000000000003C0300018C635CB83C0200019E
-:10E100008C425CC03C0400018C845CDC3C0500015A
-:10E110008CA55CBCAF860200AF860220346300226F
-:10E1200000441025004510253442000208004867CD
-:10E13000AF8302003C0300018C635D98AF82020054
-:10E1400010600009AF8202203C0200018C425D7425
-:10E15000144000053C033F003C0200018C425CB0CF
-:10E160000800485B346300E03C0200018C425CB074
-:10E170003C033F00346300E200431025AF820200FD
-:10E180003C0300018C635CB43C04F7003C020001DA
-:10E190008C425CC03C0500018CA55CDC0064182549
-:10E1A0000043102500451025AF82022003E000083F
-:10E1B000000000008F8202203C0300018C635CC8D9
-:10E1C00034420004AF820220240200011062000FDA
-:10E1D000000000008F8300548F82005424630002EB
-:10E1E000006210232C4200031040001100000000C8
-:10E1F0008F820054006210232C4200031040000C58
-:10E200000000000008004879000000008F830054DF
-:10E210008F82005408004885246300078F820054D1
-:10E22000006210232C4200081440FFFC0000000094
-:10E230008F8400E0308200071040000D00000000D5
-:10E240008F8200548F8300E014830009244500323C
-:10E250008F82005400A210232C420033104000048F
-:10E26000000000008F8200E01082FFF90000000033
-:10E270008F8202202403FFFD00431024AF8202207E
-:10E2800003E00008000000003C0300018C635CE434
-:10E290003C0200018C425CE8506200042463FFFFF2
-:10E2A0003C010001AC235CE82463FFFF2C62000901
-:10E2B0001040009D000310803C0100010022082155
-:10E2C0008C225B0800400008000000008F820044A0
-:10E2D00034428080AF8200448F8300540800493864
-:10E2E000240200028F8300543C0200018C425DA88E
-:10E2F0002463D8F0004310232C4227101440008AD6
-:10E300002402000308004945000000008F820044F9
-:10E310003C03FFFF34637FFF00431024AF820044BF
-:10E320008F83005408004938240200048F8300546E
-:10E330003C0200018C425DA82463FFF600431023D9
-:10E340002C42000A144000782402000508004945C8
-:10E35000000000008F8202203C03F70000431025DC
-:10E36000AF8202208F8202202403FFFB004310248F
-:10E37000AF8202208F82022034420002AF8202204C
-:10E380003C023F00344200E0AF8202008F82020074
-:10E390002403FFFD00431024AF8202002404000187
-:10E3A0003405FFFFAF8402048F8300548F82005432
-:10E3B000080048EC246300018F820054006210239F
-:10E3C0002C4200021440FFFC000000008F82022457
-:10E3D0000004204000A4102B1040FFF200000000B9
-:10E3E0008F8202203C03F70000431025AF820220F9
-:10E3F0008F8202143C03FFFF004310243442251F88
-:10E40000AF8202148F8202202403FFFB00431024FA
-:10E41000AF8202208F8202203C04F700348400087F
-:10E4200034420002AF8202208F8202203C033F0070
-:10E43000346300E200441025AF820220AF83020063
-:10E440008F8400F0276217F81482000224850008E8
-:10E45000276510008F8200F410A200073C038000A3
-:10E46000346300403C02000124425C70AC82000036
-:10E47000AC830004AF8500F08F8300540800493856
-:10E48000240200068F8300543C0200018C425DA8E8
-:10E490002463FFF6004310232C42000A144000229C
-:10E4A0002402000708004945000000008F8200E0B8
-:10E4B000AF8200E48F8200E0AF8200E88F8202200A
-:10E4C00034420004AF8202208F8202202403FFF72F
-:10E4D00000431024AF8202208F82004434428080A7
-:10E4E000AF8200448F830054240200083C010001E5
-:10E4F000AC225CE43C01000108004947AC235DA864
-:10E500008F8300543C0200018C425DA82463D8F044
-:10E51000004310232C42271014400003240200095A
-:10E520003C010001AC225CE403E0000800000000B4
-:10E5300000000000000000000000000027BDFFD820
-:10E54000AFB2001800809021AFB3001C00A098214A
-:10E55000AFB1001400C08821AFB0001000008021CE
-:10E56000AFBF0020A62000000C004D4B240400018A
-:10E57000261000012E0200201440FFFB00000000C6
-:10E580000C004D4B000020210C004D4B24040001D9
-:10E590000C004D4B240400010C004D4B00002021C9
-:10E5A000241000100250102410400002000020210E
-:10E5B000240400010C004D4B001080421600FFFAAD
-:10E5C0000250102424100010027010241040000289
-:10E5D00000002021240400010C004D4B001080425B
-:10E5E0001600FFFA027010240C004D7134108000E8
-:10E5F0000C004D71000000000C004D2B00000000CD
-:10E600005040000500108042962200000050102566
-:10E61000A6220000001080421600FFF70000000054
-:10E620000C004D71000000008FBF00208FB3001C54
-:10E630008FB200188FB100148FB0001003E00008F3
-:10E6400027BD002827BDFFD8AFB100140080882166
-:10E65000AFB2001800A09021AFB3001C00C09821F9
-:10E66000AFB0001000008021AFBF00200C004D4B68
-:10E6700024040001261000012E0200201440FFFB9C
-:10E68000000000000C004D4B000020210C004D4B01
-:10E69000240400010C004D4B000020210C004D4BC8
-:10E6A0002404000124100010023010241040000245
-:10E6B00000002021240400010C004D4B001080427A
-:10E6C0001600FFFA0230102424100010025010240B
-:10E6D0001040000200002021240400010C004D4BDA
-:10E6E000001080421600FFFA025010240C004D4B1F
-:10E6F000240400010C004D4B000020213410800048
-:10E7000096620000005010241040000200002021FA
-:10E71000240400010C004D4B001080421600FFF84D
-:10E72000000000000C004D71000000008FBF0020B1
-:10E730008FB3001C8FB200188FB100148FB000107F
-:10E7400003E0000827BD00283C0300018C635D0046
-:10E750003C0200018C425D4827BDFFD8AFBF0020BE
-:10E76000AFB1001C10620003AFB000183C01000103
-:10E77000AC235D482463FFFF2C6200131040034963
-:10E78000000310803C010001002208218C225B3034
-:10E7900000400008000000000C004D7100008021C6
-:10E7A00034028000A7A2001027B100100C004D4BCE
-:10E7B00024040001261000012E0200201440FFFB5B
-:10E7C000000000000C004D4B000020210C004D4BC0
-:10E7D000240400010C004D4B000020210C004D4B87
-:10E7E0002404000124100010320200011040000235
-:10E7F00000002021240400010C004D4B0010804239
-:10E800001600FFFA32020001241000100C004D4BDC
-:10E8100000002021001080421600FFFC00000000D4
-:10E820000C004D4B240400010C004D4B0000202136
-:10E830003410800096220000005010241040000286
-:10E8400000002021240400010C004D4B00108042E8
-:10E850001600FFF8000000000C004D7100000000E1
-:10E8600008004D242402000227B10010A7A00010C8
-:10E87000000080210C004D4B2404000126100001F3
-:10E880002E0200201440FFFB000000000C004D4B46
-:10E89000000020210C004D4B240400010C004D4BC6
-:10E8A000240400010C004D4B000020212410001016
-:10E8B0003202000110400002000020212404000167
-:10E8C0000C004D4B001080421600FFFA320200018E
-:10E8D000241000100C004D4B00002021001080423D
-:10E8E0001600FFFC000000000C004D713410800089
-:10E8F0000C004D71000000000C004D2B00000000CA
-:10E900005040000500108042962200000050102563
-:10E91000A6220000001080421600FFF70000000051
-:10E920000C004D710000000097A2001030428000E2
-:10E93000144002DC2402000308004D240000000003
-:10E9400024021200A7A2001027B1001000008021AD
-:10E950000C004D4B24040001261000012E02002063
-:10E960001440FFFB000000000C004D4B0000202174
-:10E970000C004D4B240400010C004D4B00002021E5
-:10E980000C004D4B24040001241000103202000141
-:10E990001040000200002021240400010C004D4B17
-:10E9A000001080421600FFFA32020001241000100D
-:10E9B0000C004D4B00002021001080421600FFFC8F
-:10E9C000000000000C004D4B240400010C004D4BD6
-:10E9D00000002021341080009622000000501024F6
-:10E9E0001040000200002021240400010C004D4BC7
-:10E9F000001080421600FFF8000000000C004D716E
-:10EA0000000000008F83005408004D16240200040B
-:10EA10008F8300543C0200018C425DB82463FF9C4C
-:10EA2000004310232C4200641440029E2402000282
-:10EA30003C0300018C635DBC106202972C620003F2
-:10EA40001440029624020011240200031062000503
-:10EA500024020004106202912402000F08004D24D9
-:10EA60002402001108004D24240200052402001491
-:10EA7000A7A2001027B10010000080210C004D4B10
-:10EA800024040001261000012E0200201440FFFB88
-:10EA9000000000000C004D4B000020210C004D4BED
-:10EAA000240400010C004D4B000020210C004D4BB4
-:10EAB0002404000124100010320200011040000262
-:10EAC00000002021240400010C004D4B0010804266
-:10EAD0001600FFFA32020001241000103202001268
-:10EAE0001040000200002021240400010C004D4BC6
-:10EAF000001080421600FFFA320200120C004D4B4B
-:10EB0000240400010C004D4B000020213410800033
-:10EB10009622000000501024104000020000202126
-:10EB2000240400010C004D4B001080421600FFF839
-:10EB3000000000000C004D71000000008F830054A5
-:10EB400008004D16240200068F8300543C02000189
-:10EB50008C425DB82463FF9C004310232C42006468
-:10EB6000144002502402000708004D240000000059
-:10EB700024020006A7A2001027B100100000802187
-:10EB80000C004D4B24040001261000012E02002031
-:10EB90001440FFFB000000000C004D4B0000202142
-:10EBA0000C004D4B240400010C004D4B00002021B3
-:10EBB0000C004D4B2404000124100010320200010F
-:10EBC0001040000200002021240400010C004D4BE5
-:10EBD000001080421600FFFA3202000124100010DB
-:10EBE0003202001310400002000020212404000122
-:10EBF0000C004D4B001080421600FFFA3202001349
-:10EC00000C004D4B240400010C004D4B0000202152
-:10EC100034108000962200000050102410400002A2
-:10EC200000002021240400010C004D4B0010804204
-:10EC30001600FFF8000000000C004D7100000000FD
-:10EC40008F83005408004D16240200088F8300545F
-:10EC50003C0200018C425DB82463FF9C00431023FA
-:10EC60002C4200641440020F2402000908004D24C5
-:10EC70000000000027B10010A7A0001000008021B4
-:10EC80000C004D4B24040001261000012E02002030
-:10EC90001440FFFB000000000C004D4B0000202141
-:10ECA0000C004D4B240400010C004D4B24040001CA
-:10ECB0000C004D4B000020212410001032020001F6
-:10ECC0001040000200002021240400010C004D4BE4
-:10ECD000001080421600FFFA3202000124100010DA
-:10ECE000320200181040000200002021240400011C
-:10ECF0000C004D4B001080421600FFFA3202001843
-:10ED00000C004D71341080000C004D7100000000AB
-:10ED10000C004D2B00000000504000050010804208
-:10ED20009622000000501025A6220000001080420C
-:10ED30001600FFF7000000000C004D71000080215C
-:10ED400097A2001027B1001034420001A7A20010C2
-:10ED50000C004D4B24040001261000012E0200205F
-:10ED60001440FFFB000000000C004D4B0000202170
-:10ED70000C004D4B240400010C004D4B00002021E1
-:10ED80000C004D4B2404000124100010320200013D
-:10ED90001040000200002021240400010C004D4B13
-:10EDA000001080421600FFFA320200012410001009
-:10EDB000320200181040000200002021240400014B
-:10EDC0000C004D4B001080421600FFFA3202001872
-:10EDD0000C004D4B240400010C004D4B0000202181
-:10EDE00034108000962200000050102410400002D1
-:10EDF00000002021240400010C004D4B0010804233
-:10EE00001600FFF8000000000C004D71000000002B
-:10EE10008F83005408004D162402000A8F8300548B
-:10EE20003C0200018C425DB82463FF9C0043102328
-:10EE30002C4200641440019B2402000B08004D2466
-:10EE40000000000027B10010A7A0001000008021E2
-:10EE50000C004D4B24040001261000012E0200205E
-:10EE60001440FFFB000000000C004D4B000020216F
-:10EE70000C004D4B240400010C004D4B24040001F8
-:10EE80000C004D4B00002021241000103202000124
-:10EE90001040000200002021240400010C004D4B12
-:10EEA000001080421600FFFA320200012410001008
-:10EEB000320200171040000200002021240400014B
-:10EEC0000C004D4B001080421600FFFA3202001772
-:10EED0000C004D71341080000C004D7100000000DA
-:10EEE0000C004D2B00000000504000050010804237
-:10EEF0009622000000501025A6220000001080423B
-:10EF00001600FFF7000000000C004D71000080218A
-:10EF100097A2001027B1001034420700A7A20010EA
-:10EF20000C004D4B24040001261000012E0200208D
-:10EF30001440FFFB000000000C004D4B000020219E
-:10EF40000C004D4B240400010C004D4B000020210F
-:10EF50000C004D4B2404000124100010320200016B
-:10EF60001040000200002021240400010C004D4B41
-:10EF7000001080421600FFFA320200012410001037
-:10EF8000320200171040000200002021240400017A
-:10EF90000C004D4B001080421600FFFA32020017A1
-:10EFA0000C004D4B240400010C004D4B00002021AF
-:10EFB00034108000962200000050102410400002FF
-:10EFC00000002021240400010C004D4B0010804261
-:10EFD0001600FFF8000000000C004D71000000005A
-:10EFE0008F83005408004D162402000C8F830054B8
-:10EFF0003C0200018C425DB82463FF9C0043102357
-:10F000002C420064144001272402001208004D2401
-:10F010000000000027B10010A7A000100000802110
-:10F020000C004D4B24040001261000012E0200208C
-:10F030001440FFFB000000000C004D4B000020219D
-:10F040000C004D4B240400010C004D4B2404000126
-:10F050000C004D4B00002021241000103202000152
-:10F060001040000200002021240400010C004D4B40
-:10F07000001080421600FFFA320200012410001036
-:10F08000320200141040000200002021240400017C
-:10F090000C004D4B001080421600FFFA32020014A3
-:10F0A0000C004D71341080000C004D710000000008
-:10F0B0000C004D2B00000000504000050010804265
-:10F0C0009622000000501025A62200000010804269
-:10F0D0001600FFF7000000000C004D7100008021B9
-:10F0E00097A2001027B1001034420010A7A2001010
-:10F0F0000C004D4B24040001261000012E020020BC
-:10F100001440FFFB000000000C004D4B00002021CC
-:10F110000C004D4B240400010C004D4B000020213D
-:10F120000C004D4B24040001241000103202000199
-:10F130001040000200002021240400010C004D4B6F
-:10F14000001080421600FFFA320200012410001065
-:10F1500032020014104000020000202124040001AB
-:10F160000C004D4B001080421600FFFA32020014D2
-:10F170000C004D4B240400010C004D4B00002021DD
-:10F18000341080009622000000501024104000022D
-:10F1900000002021240400010C004D4B001080428F
-:10F1A0001600FFF8000000000C004D710000000088
-:10F1B0008F83005408004D16240200138F830054DF
-:10F1C0003C0200018C425DB82463FF9C0043102385
-:10F1D0002C420064144000B32402000D08004D24AA
-:10F1E0000000000027B10010A7A00010000080213F
-:10F1F0000C004D4B24040001261000012E020020BB
-:10F200001440FFFB000000000C004D4B00002021CB
-:10F210000C004D4B240400010C004D4B2404000154
-:10F220000C004D4B00002021241000103202000180
-:10F230001040000200002021240400010C004D4B6E
-:10F24000001080421600FFFA320200012410001064
-:10F2500032020018104000020000202124040001A6
-:10F260000C004D4B001080421600FFFA32020018CD
-:10F270000C004D71341080000C004D710000000036
-:10F280000C004D2B00000000504000050010804293
-:10F290009622000000501025A62200000010804297
-:10F2A0001600FFF7000000000C004D7100008021E7
-:10F2B00097A2001027B100103042FFFEA7A2001055
-:10F2C0000C004D4B24040001261000012E020020EA
-:10F2D0001440FFFB000000000C004D4B00002021FB
-:10F2E0000C004D4B240400010C004D4B000020216C
-:10F2F0000C004D4B240400012410001032020001C8
-:10F300001040000200002021240400010C004D4B9D
-:10F31000001080421600FFFA320200012410001093
-:10F3200032020018104000020000202124040001D5
-:10F330000C004D4B001080421600FFFA32020018FC
-:10F340000C004D4B240400010C004D4B000020210B
-:10F35000341080009622000000501024104000025B
-:10F3600000002021240400010C004D4B00108042BD
-:10F370001600FFF8000000000C004D7100000000B6
-:10F380008F83005408004D162402000E240208400A
-:10F39000A7A2001027B10010000080210C004D4BE7
-:10F3A00024040001261000012E0200201440FFFB5F
-:10F3B000000000000C004D4B000020210C004D4BC4
-:10F3C000240400010C004D4B000020210C004D4B8B
-:10F3D0002404000124100010320200011040000239
-:10F3E00000002021240400010C004D4B001080423D
-:10F3F0001600FFFA3202000124100010320200133E
-:10F400001040000200002021240400010C004D4B9C
-:10F41000001080421600FFFA320200130C004D4B20
-:10F42000240400010C004D4B00002021341080000A
-:10F4300096220000005010241040000200002021FD
-:10F44000240400010C004D4B001080421600FFF810
-:10F45000000000000C004D71000000008F8300547C
-:10F46000240200103C010001AC225D003C010001BF
-:10F4700008004D26AC235DB88F8300543C02000188
-:10F480008C425DB82463FF9C004310232C4200642F
-:10F490001440000400000000240200113C0100019F
-:10F4A000AC225D008FBF00208FB1001C8FB0001810
-:10F4B00003E0000827BD00288F8500448F820044A8
-:10F4C0003C030001004310253C030008AF820044C8
-:10F4D0008F8400548F82005400A3282408004D37E5
-:10F4E000248400018F820054008210232C420002E9
-:10F4F0001440FFFC000000008F8200443C03FFFE2C
-:10F500003463FFFF00431024AF8200448F83005414
-:10F510008F82005408004D45246300018F820054FF
-:10F52000006210232C4200021440FFFC0000000087
-:10F5300003E0000800A010218F8300443C02FFF08C
-:10F540003442FFFF00042480006218243C020002C1
-:10F550000082202500641825AF8300448F82004478
-:10F560003C03FFFE3463FFFF00431024AF820044DE
-:10F570008F8300548F82005408004D5E2463000185
-:10F580008F820054006210232C4200021440FFFCC2
-:10F59000000000008F8200443C030001004310255E
-:10F5A000AF8200448F8300548F82005408004D6B5B
-:10F5B000246300018F820054006210232C42000259
-:10F5C0001440FFFC0000000003E000080000000001
-:10F5D0008F8200443C03FFF03463FFFF004310249C
-:10F5E000AF8200448F8200443C0300010043102599
-:10F5F000AF8200448F8300548F82005408004D7FF7
-:10F60000246300018F820054006210232C42000208
-:10F610001440FFFC000000008F8200443C03FFFE0A
-:10F620003463FFFF00431024AF8200448F830054F3
-:10F630008F82005408004D8D246300018F82005496
-:10F64000006210232C4200021440FFFC0000000066
-:10F6500003E000080000000027BDFFC8AFB300248E
-:10F6600000809821AFB5002C00A0A821AFB20020E7
-:10F6700000C0902132A2FFFFAFBF0030AFB400281E
-:10F68000AFB1001CAFB0001814400034A7B2001096
-:10F690003271FFFF27B20010000080210C004D4B9B
-:10F6A00024040001261000012E0200201440FFFB5C
-:10F6B000000000000C004D4B000020210C004D4BC1
-:10F6C000240400010C004D4B000020210C004D4B88
-:10F6D0002404000124100010320200011040000236
-:10F6E00000002021240400010C004D4B001080423A
-:10F6F0001600FFFA3202000124100010023010241C
-:10F700001040000200002021240400010C004D4B99
-:10F71000001080421600FFFA023010240C004D4BFE
-:10F72000240400010C004D4B000020213410800007
-:10F7300096420000005010241040000200002021DA
-:10F74000240400010C004D4B001080421200007593
-:10F750000000000008004DC9000000003274FFFFE7
-:10F7600027B10010A7A00010000080210C004D4B15
-:10F7700024040001261000012E0200201440FFFB8B
-:10F78000000000000C004D4B000020210C004D4BF0
-:10F79000240400010C004D4B240400010C004D4BCF
-:10F7A000000020212410001032020001104000024D
-:10F7B00000002021240400010C004D4B0010804269
-:10F7C0001600FFFA320200012410001002901024EB
-:10F7D0001040000200002021240400010C004D4BC9
-:10F7E000001080421600FFFA029010240C004D71A8
-:10F7F000341080000C004D71000000000C004D2BF7
-:10F8000000000000504000050010804296220000D9
-:10F8100000501025A6220000001080421600FFF7BD
-:10F82000000000000C004D710000000032A5FFFF39
-:10F830002402000154A200042402000297A2001036
-:10F8400008004E140052102514A200063271FFFF6A
-:10F8500097A200100012182700431024A7A200103E
-:10F860003271FFFF27B20010000080210C004D4BC9
-:10F8700024040001261000012E0200201440FFFB8A
-:10F88000000000000C004D4B000020210C004D4BEF
-:10F89000240400010C004D4B000020210C004D4BB6
-:10F8A0002404000124100010320200011040000264
-:10F8B00000002021240400010C004D4B0010804268
-:10F8C0001600FFFA3202000124100010023010244A
-:10F8D0001040000200002021240400010C004D4BC8
-:10F8E000001080421600FFFA023010240C004D4B2D
-:10F8F000240400010C004D4B000020213410800036
-:10F900009642000000501024104000020000202108
-:10F91000240400010C004D4B001080421600FFF83B
-:10F92000000000000C004D71000000008FBF00308F
-:10F930008FB5002C8FB400288FB300248FB2002025
-:10F940008FB1001C8FB0001803E0000827BD0038FD
-:10F9500000000000000000000000000027BDFFE8DC
-:10F96000AFBF00103C030001007718218C6383AC0B
-:10F97000240200081462022C008030213C020001A5
-:10F980008C425D9814400033000000008F850224F3
-:10F9900038A300202C63000138A200102C42000183
-:10F9A000006218251460000D38A300302C6300019C
-:10F9B00038A204002C4200010062182514600007E0
-:10F9C00038A304022C63000138A204042C42000175
-:10F9D0000062182510600005000000000C00429B2A
-:10F9E0000000000008004E8D2402000E0C0043DDD4
-:10F9F000000000003C0500018CA55CC80C0052A270
-:10FA0000000020213C0300018C635CC82402000438
-:10FA1000146200052403FFFB3C0200018C425CC41D
-:10FA200008004E892403FFF73C0200018C425CC4AD
-:10FA3000004310243C010001AC225CC42402000EEF
-:10FA40003C0100010C00429BAC227DD00800508795
-:10FA5000000000008F8202203C03040000431024B9
-:10FA6000104000272403FFBF8F8502243C020001C1
-:10FA70008C427DDC00A32024004310241482000C5F
-:10FA8000000000003C0200018C427DE024420001A5
-:10FA90003C010001AC227DE02C4200021440000831
-:10FAA000240200013C01000108004EADAC227E00A2
-:10FAB0003C010001AC207DE03C010001AC207E0057
-:10FAC0003C0200018C427E001040000630A2004043
-:10FAD00010400004240200013C01000108004EB85F
-:10FAE000AC227E043C010001AC207E043C010001FC
-:10FAF000AC257DDC3C01000108004EC8AC207E1026
-:10FB0000240200013C010001AC227E103C010001F6
-:10FB1000AC207E003C010001AC207DE03C010001F6
-:10FB2000AC207E043C010001AC207DDC3C030001E4
-:10FB30008C637DD03C0200018C427DD410620003B6
-:10FB40003C0202003C010001AC237DD400C2102421
-:10FB5000104000072463FFFF8F820220240300016E
-:10FB60003C010001AC235CCC080050853C03F7004D
-:10FB70002C62000E104001A8000310803C0100011F
-:10FB8000002208218C225B80004000080000000059
-:10FB90003C010001AC207E003C010001AC207DE076
-:10FBA0003C010001AC207DDC3C010001AC207E0466
-:10FBB0003C010001AC207DF83C010001AC207DF04F
-:10FBC0000C00486AAF800224240200023C010001BC
-:10FBD000AC227DD03C0200018C427E1014400056C5
-:10FBE0003C03FDFF8EE200003463FFFF004310245E
-:10FBF0000C00429BAEE20000AF8002048F82020044
-:10FC00002403FFFD00431024AF8202003C010001E9
-:10FC1000AC207E208F8300543C0200018C427DF892
-:10FC2000240400013C010001AC247E0C24420001AC
-:10FC30003C010001AC227DF82C4200043C01000193
-:10FC4000AC237DF414400006240200033C010001B3
-:10FC5000AC245CCC3C01000108005083AC207DF852
-:10FC60003C01000108005083AC227DD08F830054FA
-:10FC70003C0200018C427DF42463D8F00043102341
-:10FC80002C42271014400003240200043C01000110
-:10FC9000AC227DD03C0200018C427E101440002634
-:10FCA0003C03FDFF8EE200003463FFFF004310249D
-:10FCB00008005083AEE200003C0400018C845D9C8F
-:10FCC0003C0100010C00508AAC207DE83C020001A0
-:10FCD0008C427E1CAF8202043C0200018C427E10EA
-:10FCE000144000153C03FDFF8EE200003463FFFF6B
-:10FCF00000431024AEE200008F8202043042003044
-:10FD00001440013C240200023C0300018C637E1C71
-:10FD1000240200053C010001AC227DD03C01000121
-:10FD200008005083AC237E203C0200018C427E10F0
-:10FD3000104000103C03FDFF3C0200018C425D6C52
-:10FD4000244200013C010001AC225D6C2C42000207
-:10FD500014400131240200013C010001AC225D7419
-:10FD60003C010001AC205D6C3C01000108005083A7
-:10FD7000AC225CCC8EE200003463FFFF0043102411
-:10FD8000AEE200003C0200018C427E0010400122E5
-:10FD9000000000003C0200018C427DDC1040011E8E
-:10FDA000000000003C010001AC227E082402000398
-:10FDB0003C010001AC227DE0080050242402000632
-:10FDC0003C010001AC207DE88F82020434420040F7
-:10FDD000AF8202043C0200018C427E202403000713
-:10FDE0003C010001AC237DD0344200403C010001C5
-:10FDF000AC227E203C0200018C427E0010400005B7
-:10FE0000000000003C0200018C427DDC104000F943
-:10FE1000240200023C05000124A57DE08CA2000024
-:10FE20002C424E21104000F3240200023C0200014B
-:10FE30008C427E04104000F82404FFBF3C02000105
-:10FE40008C427DDC3C0300018C637E08004410245E
-:10FE50000064182410430004240200013C01000146
-:10FE600008005083AC227DD024020003ACA2000025
-:10FE7000240200083C010001AC227DD03C020001BC
-:10FE80008C427E0C1040000C240200013C04000156
-:10FE90000C0050978C847DDC3C0200018C427E2853
-:10FEA00014400005240200013C0200018C427E2423
-:10FEB00010400006240200013C010001AC225CCC91
-:10FEC0003C01000108005083AC207DF83C02000199
-:10FED0008C427DF03C0300018C637DDC2C420001F0
-:10FEE000000210C0306300083C010001AC227DF02C
-:10FEF0003C010001AC237DEC8F83005424020009F7
-:10FF00003C010001AC227DD03C010001080050837F
-:10FF1000AC237DF48F8300543C0200018C427DF4BD
-:10FF20002463D8F0004310232C422710144000A86B
-:10FF3000000000003C0200018C427E0010400005E1
-:10FF4000000000003C0200018C427DDC104000A952
-:10FF5000240200023C03000124637DE08C62000067
-:10FF60002C424E21104000A3240200023C0200015A
-:10FF70008C427E0C1040000E000000003C0200018C
-:10FF80008C427DDC3C010001AC207E0C30420080C4
-:10FF90001040002F2402000C8F82020430420080A7
-:10FFA0001440000C24020003080050112402000C2D
-:10FFB0003C0200018C427DDC304200801440000590
-:10FFC000240200038F820204304200801040001F90
-:10FFD00024020003AC6200002402000A3C0100017C
-:10FFE000AC227DD03C04000124847E188C82000069
-:10FFF0003C0300018C637DF000431025AF820204B6
-:020000021000EC
-:100000008C8300003C0400018C847DF02402000BF2
-:100010003C010001AC227DD0006418253C010001A8
-:10002000AC237E203C05000124A57DE08CA20000CD
-:100030002C424E211040006F240200023C020001BD
-:100040008C427E1010400005000000002402000CCD
-:100050003C01000108005083AC227DD03C0200012D
-:100060008C427E001040006C000000003C04000147
-:100070008C847DDC1080005E308200083C0300012F
-:100080008C637DEC10620064240200033C010001DB
-:10009000AC247E08ACA20000240200063C01000152
-:1000A00008005083AC227DD08F82020034420002CF
-:1000B000AF8202008F8300542402000D3C01000136
-:1000C000AC227DD03C010001AC237DF48F83005431
-:1000D0003C0200018C427DF42463D8F000431023DD
-:1000E0002C4227101440003A000000003C0200019E
-:1000F0008C427E10104000292402000E3C030001B7
-:100100008C637E243C01000114600015AC227DD07C
-:100110000C0043DD000000003C0500018CA55CC81C
-:100120000C0052A2000020213C0300018C635CC83B
-:1001300024020004146200052403FFFB3C020001BA
-:100140008C425CC4080050522403FFF73C020001BB
-:100150008C425CC4004310243C010001AC225CC40E
-:100160008EE200003C03020000431025AEE20000D6
-:100170008F8202243C010001AC227E2C8F8202205F
-:100180002403FFFB00431024AF8202208F82022051
-:100190003442000208005083AF8202203C0200017A
-:1001A0008C427E0010400005000000003C0200016F
-:1001B0008C427DDC1040000F240200023C02000152
-:1001C0008C427DE02C424E211040000A24020002A5
-:1001D0003C0200018C427E001040000F0000000035
-:1001E0003C0200018C427DDC1440000B000000004A
-:1001F000240200023C01000108005083AC227DD0A3
-:100200003C0200018C427E00104000030000000010
-:100210000C00429B000000008F8202203C03F7008C
-:1002200000431025AF8202208FBF001003E00008BA
-:1002300027BD00183C03000124637E288C62000067
-:1002400010400005344220003C010001AC227E1C1D
-:1002500008005095AC6000003C010001AC247E1CFD
-:1002600003E000080000000027BDFFE030820030FE
-:10027000AFBF00183C010001AC227E24144000678F
-:100280003C02FFFF34421F0E008210241440006124
-:1002900024020030308220001040005D3083800056
-:1002A00000031A0230820001000212003C04000127
-:1002B0008C845D9C00621825000331C23C03000160
-:1002C00024635D78308280000002120230840001D5
-:1002D0000004220000441025000239C200061080EC
-:1002E0000043102100471021904300002402000128
-:1002F00010620025000000001060000724020002C8
-:1003000010620013240200031062002C3C05000F51
-:10031000080050F9000000008F8202002403FEFF55
-:1003200000431024AF8202008F8202203C03FFFEB4
-:100330003463FFFF00431024AF8202203C01000120
-:10034000AC207E443C01000108005104AC207E4CEE
-:100350008F82020034420100AF8202008F820220AD
-:100360003C03FFFE3463FFFF00431024AF820220F2
-:10037000240201003C010001AC227E443C0100014A
-:1003800008005104AC207E4C8F8202002403FEFF43
-:1003900000431024AF8202008F8202203C03000140
-:1003A00000431025AF8202203C010001AC207E44B6
-:1003B0003C01000108005104AC237E4C8F820200F6
-:1003C00034420100AF8202008F8202203C03000110
-:1003D00000431025AF820220240201003C010001ED
-:1003E000AC227E443C01000108005104AC237E4C49
-:1003F00034A5FFFF3C04000124845BB8AFA30010C8
-:100400000C002403AFA000140800510400000000F9
-:10041000240200303C010001AC227E288FBF00186E
-:1004200003E0000827BD00200000000027BDFFC832
-:10043000AFB2002800809021AFB3002C00A098211B
-:10044000AFB0002000C080213C04000124845BD0B8
-:100450003C0500093C0200018C425CC834A59001B7
-:100460000240302102603821AFBF0030AFB100241C
-:10047000A7A0001AAFB000140C002403AFA2001014
-:1004800024020002126200832E6200031040000565
-:10049000240200011262000A000000000800529BC2
-:1004A0000000000024020004126200FA2402000886
-:1004B000126200F93C02FFEC0800529B00000000B1
-:1004C0003C0200018C425CC4304200021440000433
-:1004D000001289403C02FFFB3442FFFF02028024ED
-:1004E0003C01000100310821AC307E3C3C02400060
-:1004F000020210241040004E001023C2308400304D
-:10050000001013823042001C3C03000124635D088C
-:1005100000431021008238213C02002002021024F6
-:1005200010400006240201003C01000100310821B6
-:10053000AC227E40080051503C0200803C0100018A
-:1005400000310821AC207E403C02008002021024D1
-:1005500010400006001219403C0200013C0100015D
-:10056000002308210800515CAC227E480012114093
-:100570003C01000100220821AC207E4894E40000E8
-:100580003C0300018C635DBC240200051062001076
-:10059000A7A400183202400010400002348240003C
-:1005A000A7A200182404000194E20002240500041C
-:1005B00024E60002344200010C00498EA4E200024D
-:1005C00024040001000028210C00498E27A60018F1
-:1005D0003C0200018C425CC8241100013C01000176
-:1005E000AC315CD414530004320280000C00429BF6
-:1005F00000000000320280001040011F00000000D7
-:100600000C00429B000000003C0300018C635DBCB9
-:100610002402000510620118240200023C010001BE
-:10062000AC315CCC3C0100010800529BAC225CC8A0
-:10063000240400012405000427B0001A0C00498E90
-:100640000200302124040001000028210C00498E02
-:10065000020030213C020001005110218C427E3406
-:100660003C0400018C845CC83C03BFFF3463FFFF83
-:100670003C010001AC335CD4004310243C01000178
-:1006800000310821109300FAAC227E340800529BFE
-:10069000000000003C02200002021024104000056F
-:1006A000240200013C010001AC225D98080051AD1C
-:1006B000001289403C010001AC205D980012894085
-:1006C0003C01000100310821AC307E383C02400082
-:1006D0000202102414400016000000003C02000139
-:1006E0008C425D9810400008240400042405000199
-:1006F0000C004D9324062000240200013C0100015F
-:1007000000370821AC2283AC3C02000100511021CB
-:100710008C427E303C03BFFF3463FFFF0043102454
-:100720003C0100010031082108005299AC227E30C2
-:100730003C0200018C425D98104000283C0300A060
-:10074000020310245443000D3C0200203C0200012F
-:100750008C425D9C240301003C0100010031082112
-:10076000AC237E443C0300013C0100010031082120
-:10077000AC237E4C080051F03442040002021024E5
-:1007800010400008240301003C0200018C425D9CE3
-:100790003C01000100310821AC237E44080051F0E7
-:1007A000344208003C020080020210241040002E57
-:1007B0003C0300013C0200018C425D9C3C010001B5
-:1007C00000310821AC237E4C34420C003C01000176
-:1007D000AC225D9C08005218240400013C02002059
-:1007E0000202102410400006240201003C01000116
-:1007F00000310821AC227E44080052013C020080F6
-:100800003C01000100310821AC207E443C02008004
-:100810000202102410400007001219403C0200019F
-:100820003C01000100230821AC227E4C0800520F3D
-:1008300024040001001211403C01000100220821A3
-:10084000AC207E4C240400010000282127B0001EAB
-:100850000C00494C02003021240400010000282132
-:100860000C00494C02003021240400012405000141
-:1008700027B0001C0C00494C020030212404000168
-:10088000240500010C00494C020030210800529957
-:10089000000000003C02FFEC3442FFFF0202802413
-:1008A0003C02000802028025001211403C010001B8
-:1008B00000220821AC307E383C02200002021024C5
-:1008C00010400009000000003C0200018C425D74F1
-:1008D00014400005240200013C010001AC225D9897
-:1008E0000800523A3C0240003C010001AC205D98F7
-:1008F0003C024000020210241440001E00000000D0
-:100900003C0200018C425D983C010001AC205CE09F
-:1009100010400007240220203C010001AC225D9C15
-:10092000240200013C01000100370821AC2283AC05
-:100930003C04BFFF001219403C020001004310219B
-:100940008C427E303C0500018CA55CC83484FFFFDE
-:10095000004410243C01000100230821AC227E3019
-:100960002402000110A20044000000000800529977
-:10097000000000003C0200018C425D981040001C09
-:10098000240220003C010001AC225D9C3C0300A03D
-:100990000203102414430005001211403402A00089
-:1009A0003C01000108005294AC225D9C3C03000114
-:1009B000006218218C637E383C0200200062102403
-:1009C00010400004240220013C0100010800529460
-:1009D000AC225D9C3C020080006210241040001F8D
-:1009E0003402A0013C01000108005294AC225D9C3D
-:1009F0003C0200200202102410400007001219409F
-:100A0000240201003C01000100230821AC227E44A5
-:100A1000080052883C020080001211403C01000195
-:100A200000220821AC207E443C02008002021024F7
-:100A300010400006001219403C0200013C01000178
-:100A40000023082108005294AC227E4C0012114071
-:100A50003C01000100220821AC207E4C3C03000137
-:100A60008C635CC8240200011062000300000000D7
-:100A70000C00429B000000008FBF00308FB3002CA1
-:100A80008FB200288FB100248FB0002003E000084F
-:100A900027BD003827BDFFD8AFB2002000809021CD
-:100AA000AFB1001C0000882124020002AFBF002467
-:100AB000AFB00018A7A0001210A200D3A7A000108A
-:100AC0002CA20003104000052402000110A2000A1D
-:100AD00000128140080053800220102124020004EB
-:100AE00010A2007D2402000810A2007C0012294000
-:100AF00008005380022010213C03000100701821DF
-:100B00008C637E3C3C0240000062102414400009CB
-:100B1000240400013C027FFF3442FFFF006288246E
-:100B20003C01000100300821AC317E3408005380C4
-:100B300002201021240500010C00494C27A60010BA
-:100B400024040001240500010C00494C27A60010D4
-:100B500097A2001030420004104000343C114000C5
-:100B60003C0200018C425DBC2443FFFF2C62000666
-:100B700010400034000310803C01000100220821D5
-:100B80008C225BE00040000800000000240400010B
-:100B90002405001127B000120C00494C020030213E
-:100BA00024040001240500110C00494C02003021EE
-:100BB00097A5001230A24000104000023C04001033
-:100BC0003C0400083C0300010800530130A28000EF
-:100BD000240400012405001427B000120C00494C25
-:100BE0000200302124040001240500140C00494CAB
-:100BF0000200302197A5001230A210001040000220
-:100C00003C0400103C0400083C03000130A2080032
-:100C1000544000013C0300023C02800002221025E7
-:100C2000006418250800530E004388253C1100017C
-:100C3000023088218E317E3C3C027FFF3442FFFF30
-:100C4000022288243C0200018C425CD81040001D26
-:100C5000001211403C0200018C425D9810400002DD
-:100C60003C02200002228825001211403C010001B4
-:100C7000002208218C227E40104000033C0200200C
-:100C800008005322022288253C02FFDF3442FFFF86
-:100C900002228824001211403C0100010022082198
-:100CA0008C227E48104000033C0200800800532D37
-:100CB000022288253C02FF7F3442FFFF0222882463
-:100CC000001211403C01000100220821AC317E34A9
-:100CD0000800538002201021001229403C0300012B
-:100CE000006518218C637E383C02400000621024AD
-:100CF000144000083C027FFF3442FFFF006288245A
-:100D00003C01000100250821AC317E3008005380F1
-:100D1000022010213C0200018C425CD810400033BC
-:100D20003C11C00C3C0200018C425D743C04C00CC0
-:100D3000348420003C0300018C635D980002102B7A
-:100D40000002102300441024106000030051882585
-:100D50003C022000022288253C02000100451021AF
-:100D60008C427E44104000033C0200200800535D8A
-:100D7000022288253C02FFDF3442FFFF0222882442
-:100D8000001211403C010001002208218C227E4CFF
-:100D9000104000033C0200800800536802228825AE
-:100DA0003C02FF7F3442FFFF022288243C02000104
-:100DB0008C425D60104000023C020800022288253F
-:100DC0003C0200018C425D64104000023C020400C1
-:100DD000022288253C0200018C425D68104000061A
-:100DE0003C0201000800537B022288253C027FFF61
-:100DF0003442FFFF00628824001211403C010001D0
-:100E000000220821AC317E30022010218FBF002447
-:100E10008FB200208FB1001C8FB0001803E00008D3
-:100E200027BD002827BDFFD8AFB400200080A02137
-:100E3000AFBF0024AFB3001CAFB20018AFB10014B5
-:100E4000AFB000108F9002003C0300018C635CC8BF
-:100E50008F93022024020002106200632C620003C0
-:100E600010400005240200011062000A001419401D
-:100E70000800544800000000240200041062005AD8
-:100E800024020008106200590014914008005448E0
-:100E9000000000003C040001008320218C847E3C83
-:100EA0003C110001022388218E317E343C02400037
-:100EB000008210241040003E3C0200080222102450
-:100EC00010400020361000023C02000100431021B7
-:100ED0008C427E4010400005361000203610010084
-:100EE0003C020020080053BD022288252402FEFF98
-:100EF000020280243C02FFDF3442FFFF02228824EA
-:100F0000001411403C010001002208218C227E487F
-:100F1000104000053C020001026298253C0200805E
-:100F2000080053DC022288253C02FFFE3442FFFF0A
-:100F3000026298243C02FF7F3442FFFF080053DC2A
-:100F4000022288242402FEDF020280243C02FFFEEB
-:100F50003442FFFF026298243C02FF5F3442FFFFED
-:100F6000022288243C01000100230821AC207E409D
-:100F70003C01000100230821AC207E480C00486A97
-:100F800000000000AF900200AF9302208F82022089
-:100F90002403FFFB00431024AF8202208F82022033
-:100FA00034420002AF820220080053F300141140C3
-:100FB0008F8202002403FFFD004310240C00486AC6
-:100FC000AF8202003C02BFFF3442FFFF0C00429B95
-:100FD00002228824001411403C0100010022082153
-:100FE00008005448AC317E34001491403C040001A8
-:100FF000009220218C847E383C110001023288212D
-:101000008E317E303C0240000082102414400011DA
-:10101000000000003C0200018C425D981440000674
-:101020003C02BFFF8F820200344200020C00486A7B
-:10103000AF8202003C02BFFF3442FFFF0C00429B24
-:10104000022288243C010001003208210800544893
-:10105000AC317E303C0200018C425D9810400005AE
-:101060003C0200203C0200018C425D741040002BC9
-:101070003C0200200082102410400007361000209F
-:10108000240201003C01000100320821AC227E4410
-:1010900008005428361001003C01000100320821EC
-:1010A000AC207E442402FEFF020280243C02008029
-:1010B0000082102410400007001419403C02000177
-:1010C0003C01000100230821AC227E4C0800543969
-:1010D00002629825001411403C0100010022082101
-:1010E000AC207E4C3C02FFFE3442FFFF026298249B
-:1010F0000C00486A00000000AF900200AF9302208D
-:101100008F8202202403FFFB00431024AF820220C1
-:101110008F82022034420002AF820220001411406C
-:101120003C01000100220821AC317E308FBF002439
-:101130008FB400208FB3001C8FB200188FB1001441
-:101140008FB0001003E0000827BD00282448656127
-:101150006465723A202F70726F6A656374732F72C0
-:1011600063732F73772F67652F2E2F6E69632F663A
-:10117000772F636F6D6D6F6E2F66776D61696E2E61
-:10118000632C7620312E312E322E313120313939F7
-:10119000382F30342F32372032323A31333A34322A
-:1011A00020736875616E6720457870202400000008
-:1011B0007468655F4441574E00000000535441433A
-:1011C0004B5F312000000000426164536E64526E38
-:1011D000670000003F456E71457674003F6E6F51A9
-:1011E00064457650000000006576526E6746756C67
-:1011F0006C000000496C6C436F6E66527800000012
-:1012000053656E64436B53756D00000052656376E1
-:10121000566C616E0000000000000000244865610B
-:101220006465723A202F70726F6A656374732F72EF
-:1012300063732F73772F67652F2E2F6E69632F6669
-:10124000772F636F6D6D6F6E2F74696D65722E638E
-:101250002C7620312E312E322E3820313939382F4C
-:1012600030372F33312031373A35383A343520731F
-:101270006875616E6720457870202400542D446D98
-:101280006152643100000000542D446D61424200FF
-:10129000542D446D613200003F6E6F5164547845A7
-:1012A000000000003F6E6F5164527845000000005E
-:1012B000656E714D4576504661696C00656E714D85
-:1012C00045764661696C00006661696C456E454D06
-:1012D000000000003F456E71457674003F6E6F510F
-:1012E00064457650000000006576526E6746756C66
-:1012F0006C00000000000000000000002448656150
-:101300006465723A202F70726F6A656374732F720E
-:1013100063732F73772F67652F2E2F6E69632F6688
-:10132000772F636F6D6D6F6E2F636F6D6D616E6480
-:101330002E632C7620312E312E322E313020313951
-:1013400039382F31312F31382031373A31313A3174
-:101350003820736875616E6720457870202400001E
-:101360003F4D626F78457674000000004E4F636F0A
-:101370006D616E6400000000687374655F455252D1
-:1013800000000000412D45727242756300000000AC
-:101390004552524F522D416464000000656E714DFC
-:1013A0004576504661696C00656E714D45764661C3
-:1013B000696C00006661696C456E454D0000000077
-:1013C000442D4572724C617374000000442D4572C7
-:1013D000723200006D4373744D6445525200000038
-:1013E00070726F6D4D6445525200000046696C7416
-:1013F0004D64455252000000636D645F45525200D7
-:101400003F456E71457674003F6E6F51644576506E
-:10141000000000006576526E6746756C6C00000037
-:101420000000000000006EA000007FBC00006E38CD
-:1014300000008734000082B00000878000008780B1
-:1014400000006F540000769400007F0C000080A81C
-:10145000000080740000878000007E70000080CC57
-:1014600000006E64000081CC00000000244865612B
-:101470006465723A202F70726F6A656374732F729D
-:1014800063732F73772F67652F2E2F6E69632F6617
-:10149000772F636F6D6D6F6E2F646D612E632C7689
-:1014A00020312E312E322E3320313939382F30343D
-:1014B0002F32372032323A31333A34312073687563
-:1014C000616E67204578702024000000646D6172B1
-:1014D0006441544E00000000646D61777241544EC7
-:1014E00000000000000000000000000024486561CA
-:1014F0006465723A202F70726F6A656374732F721D
-:1015000063732F73772F67652F2E2F6E69632F6696
-:10151000772F636F6D6D6F6E2F74726163652E63CD
-:101520002C7620312E312E322E3220313939382F7F
-:1015300030342F32372032323A31333A353020735B
-:101540006875616E672045787020240024486561C5
-:101550006465723A202F70726F6A656374732F72BC
-:1015600063732F73772F67652F2E2F6E69632F6636
-:10157000772F636F6D6D6F6E2F646174612E632CB6
-:101580007620312E312E322E3220313939382F301B
-:10159000342F32372032323A31333A3430207368C4
-:1015A00075616E67204578702024000046575F56AD
-:1015B000455253494F4E3A2023312046726920410B
-:1015C000707220372031373A35353A34382050445C
-:1015D000542032303030000046575F434F4D504961
-:1015E0004C455F54494D453A2031373A35353A3408
-:1015F0003800000046575F434F4D50494C455F420D
-:10160000593A2064657672637300000046575F4361
-:101610004F4D50494C455F484F53543A20636F6DCE
-:10162000707574650000000046575F434F4D504988
-:101630004C455F444F4D41494E3A20656E672E61DF
-:101640006374656F6E2E636F6D00000046575F43D5
-:101650004F4D50494C45523A20676363207665727E
-:1016600073696F6E20322E372E32000000000000AA
-:101670000000000000000000000000002448656138
-:101680006465723A202F70726F6A656374732F728B
-:1016900063732F73772F67652F2E2F6E69632F6605
-:1016A000772F636F6D6D6F6E2F6D656D2E632C766A
-:1016B00020312E312E322E3220313939382F30342C
-:1016C0002F32372032323A31333A3434207368754E
-:1016D000616E672045787020240000002448656111
-:1016E0006465723A202F70726F6A656374732F722B
-:1016F00063732F73772F67652F2E2F6E69632F66A5
-:10170000772F636F6D6D6F6E2F73656E642E632C14
-:101710007620312E312E322E313120313939382F89
-:1017200031322F32322031373A31373A3535207362
-:101730006875616E6720457870202400736E64645C
-:10174000654E6F51200000006E6F454E515F54583A
-:1017500000000000736E6464744E6F51200000003E
-:101760003F6E6F516454784500000000756E6B72D7
-:101770006474797065000000000000000000ACCCCB
-:101780000000ACCC0000AD9C0000AAB00000AAB0E4
-:101790000000AD9C0000AD9C0000AD9C0000AD9C25
-:1017A0000000AD9C0000AD9C0000AD9C0000AD9C15
-:1017B0000000AD9C0000AD9C0000AD9C0000AD9C05
-:1017C0000000AD9C0000AD7C000000000000BCA843
-:1017D0000000BCA80000BD700000AE4C0000B05876
-:1017E0000000BD700000BD700000BD700000BD7045
-:1017F0000000BD700000BD700000BD700000BD7035
-:101800000000BD700000BD700000BD700000BD7024
-:101810000000BD700000BD540000B0402448656168
-:101820006465723A202F70726F6A656374732F72E9
-:1018300063732F73772F67652F2E2F6E69632F6663
-:10184000772F636F6D6D6F6E2F726563762E632CCD
-:101850007620312E312E322E313920313939382F40
-:1018600030372F32342032313A33303A303520732A
-:101870006875616E6720457870202400706B52781F
-:101880004552520066726D324C617267650000000D
-:1018900072784E6F527842640000000072785144B2
-:1018A0006D61444600000000727851446D6142460B
-:1018B000000000003F6E6F51645278450000000048
-:1018C000706B5278455252730000000066726D32A0
-:1018D0004C7267530000000072784E6F42645300F0
-:1018E0003F724264446D6146000000003F724A420C
-:1018F00064446D4600000000000000000000F6781F
-:101900000000F6780000F6780000F6780000F6781F
-:101910000000F6780000F6780000F6780000F6780F
-:101920000000F6780000F6780000F6780000F678FF
-:101930000000F6780000F6780000F6700000F670FF
-:101940000000F670572D444D41456E4600000000E2
-:10195000000000000000FDC00001015C0000FDDC93
-:101960000001015C0001015C0001015C0001015CFF
-:101970000001015C0001015C0000F7040001015C52
-:101980000001015C0001015C0001015C0001015CDF
-:101990000001015400010154000101542448656113
-:1019A0006465723A202F70726F6A656374732F7268
-:1019B00063732F73772F67652F2E2F6E69632F66E2
-:1019C000772F636F6D6D6F6E2F6D61632E632C7655
-:1019D00020312E312E322E313220313939382F300C
-:1019E000342F32372032323A31333A34322073686E
-:1019F00075616E6720457870202400006D61637406
-:101A00007841544E000000004E7453796E264C6BA2
-:101A10000000000072656D61737372740000000055
-:101A20006C696E6B444F574E00000000656E714D3F
-:101A30004576504661696C00656E714D457646612C
-:101A4000696C00006661696C456E454D00000000E0
-:101A50006C696E6B55500000000000002448656101
-:101A60006465723A202F70726F6A656374732F72A7
-:101A700063732F73772F67652F2E2F6E69632F6621
-:101A8000772F636F6D6D6F6E2F636B73756D2E6344
-:101A90002C7620312E312E322E3220313939382F0A
-:101AA00030342F32372032323A31333A33392073DF
-:101AB0006875616E672045787020240050726F62EF
-:101AC00065506879000000006C6E6B4153535254AE
-:101AD0000000000000011B2C00011BC400011BF8CA
-:101AE00000011C2C00011C5800011C6C00011CA8EA
-:101AF0000001207C00011DE400011E2400011E5095
-:101B000000011E9000011EC000011EFC00011F30DC
-:101B10000001207C000122C0000122D80001230026
-:101B2000000123200001234800012478000124A0A3
-:101B3000000124F40001251C000000000001278C96
-:101B40000001285C0001293400012A0400012A60F8
-:101B500000012B3C00012B6400012C4000012C688B
-:101B600000012E1000012E3800012FE0000131D8B5
-:101B70000001346C000133800001346C00013498A2
-:101B800000013008000131B00000000000013B847A
-:101B900000013BC800013C6000013CAC00013D1C61
-:101BA00000013DB400013DE800013E7000013F0826
-:101BB00000013FD8000140180001409C000140C0D6
-:101BC000000141F4646F42617365506700000000DA
-:101BD00000000000000000000000000073746D6150
-:101BE000634C4E4B000000000000000000014C3828
-:101BF00000014C3800014B8000014BC400014C38FF
-:101C000000014C380000000000000000000000004F
-:101C100000000000000000000000000000000000C4
-:101C2000000000000000000000000000416C74652E
-:101C30006F6E204163654E4943205600416C7465C8
-:101C40006F6E204163654E49432056004242424236
-:101C50000000000000000000000000000013541805
-:101C60000013E7FC0000000000000000000000007E
-:101C70000000000000000000000000000060CF0035
-:101C800000000060CF000000000000000000000025
-:101C90000000000000000000000000000000000044
-:101CA0000000000000000000000000000000000034
-:101CB0000000000000000000000000000000000024
-:101CC0000000000000000000000000000000000014
-:101CD0000000000000000000000000030000000001
-:101CE00000000001000000000000000000000000F3
-:101CF00000000001000000000000000100000000E2
-:101D000000000000000000000000000000000001D2
-:101D100000000001000000000000000000000000C2
-:101D20000000000000000000010000002100000091
-:101D30001200014000000000000000002000000030
-:101D4000120000A0000000001200006012000180DC
-:101D5000120001E000000000000000000000000090
-:101D60000000000100000000000000000000000072
-:101D70000000000000000000000000000000000261
-:101D8000000000000000000000030001000000014E
-:0C1D900000030201000000000000000041
-:00000001FF
-/* tg1 firmware v12.4.11 */
diff --git a/firmware/acenic/tg2.bin.ihex b/firmware/acenic/tg2.bin.ihex
deleted file mode 100644
index a9ff4f431f22..000000000000
--- a/firmware/acenic/tg2.bin.ihex
+++ /dev/null
@@ -1,4844 +0,0 @@
-:100000000C040B0000004000000040000000000055
-:1000100010000003000000000000000D0000000DB3
-:100020003C1D00018FBD6D2003A0F0213C1000009D
-:10003000261040000C0010C0000000000000000D61
-:100040003C1D00018FBD6D2403A0F0213C10000079
-:10005000261040000C0017E0000000000000000D1A
-:100060000000000000000000000000000000000090
-:100070000000000000000000000000000000000080
-:100080000000000000000000000000000000000070
-:100090000000000000000000000000000000000060
-:1000A0000000000000000000000000000000000050
-:1000B0000000000000000000000000000000000040
-:1000C0000000000000000000000000000000000030
-:1000D0000000000000000000000000000000000020
-:1000E0000000000000000000000000000000000010
-:1000F0000000000000000000000000000000000000
-:1001000000000000000000000000000002000008E5
-:10011000000000000800172F3C0A00010800172FFC
-:100120003C0A00020800172F0000000008002CAC59
-:100130000000000008002C4F000000000800172FEE
-:100140003C0A00040800328A0000000008001A522D
-:10015000000000000800394D00000000080038F4DD
-:10016000000000000800172F3C0A0006080039BBF9
-:100170003C0A00070800172F3C0A00080800172F48
-:100180003C0A000908003A130000000008002EA6EF
-:10019000000000000800172F3C0A000B0800172F72
-:1001A0003C0A000C0800172F3C0A000D080028FB31
-:1001B0000000000008002890000000000800172F31
-:1001C0003C0A000E0800208C0000000008001964A2
-:1001D0000000000008001A040000000008003CA60F
-:1001E0000000000008003C94000000000800172FE9
-:1001F000000000000800191A000000000800172F76
-:10020000000000000800172F3C0A00130800172FF9
-:100210003C0A001400000000000000000000000084
-:1002200000000000000000000000000000000000CE
-:1002300000000000000000000000000000000000BE
-:1002400000000000000000000000000000000000AE
-:10025000000000000000000000000000000000009E
-:10026000000000000000000000000000000000008E
-:10027000000000000000000000000000000000007E
-:10028000000000000000000000000000000000006E
-:10029000000000000000000000000000000000005E
-:1002A000000000000000000000000000000000004E
-:1002B000000000000000000000000000000000003E
-:1002C000000000000000000000000000000000002E
-:1002D000000000000000000000000000000000001E
-:1002E000000000000000000000000000000000000E
-:1002F00000000000000000000000000000000000FE
-:1003000000000000000000000000000027BDFFE02A
-:100310003C1CC000AFBF001CAFB000188F82014072
-:1003200024030003AF8300EC344200040C002B20B4
-:10033000AF8201403C0100C00C001763AC203FFCC1
-:10034000004018213C0200103C010001AC236E9CCF
-:10035000106200110043102B144000023C020020E8
-:100360003C0200081062000C240501003C0600015C
-:100370008CC66E9C3C04000124845C74000038210F
-:10038000AFA000100C002B3BAFA000143C020020DB
-:100390003C010001AC226E9C240200083C010001DB
-:1003A000AC226EB42402001F3C010001AC226EC4DA
-:1003B000240200163C010001AC226E983C05FFFEB1
-:1003C00034A56F083C0200018C426E9C3C03000285
-:1003D000246390103C0400018C846CC400431023FF
-:1003E00014800002004580212610FA382402F00013
-:1003F000020280240C00178502002021020228231B
-:100400003C0400200082182300651823247BB000E0
-:100410003C03FFFE3463BF080363B8213C0600BF02
-:1004200034C6F0003C0700018CE76CC03C0300BF01
-:100430003463E000008520233C010001AC246EA859
-:10044000008220233C010001AC256E90000528426B
-:100450003C010001AC226E8427620FFC3C010001CC
-:10046000AC226D2027621FFC00DB3023007B1823A9
-:100470003C010001AC246E883C010001AC256EAC4F
-:100480003C010001AC226D24AF86015010E0001148
-:10049000AF8302503C1D00018FBD6CCC03A0F02146
-:1004A0000C001749000000003C0200018C426CD097
-:1004B0003C0300018C636CD42442FE0024630200E0
-:1004C0003C010001AC226CD03C0100011000000492
-:1004D000AC236CD43C1D00018FBD6D2003A0F02126
-:1004E0003C0200018C426CC41040000D26FAFA3820
-:1004F0003C0200018C426CD03C0300018C636CD444
-:100500003C1A00018F5A6CD42442FA38246305C87F
-:100510003C010001AC226CD03C010001AC236CD446
-:100520003C0200018C426CC8144000030000000033
-:100530003C010001AC206CD00C0011510000000007
-:100540008FBF001C8FB0001803E0000827BD0020FB
-:100550003C0200018C426CD03C0300018C636CD4E3
-:1005600027BDFF98AFB000483C1000018E1066B860
-:10057000AFB200503C12000026524100AFBF0060F5
-:10058000AFBE005CAFB50058AFB30054AFB1004C84
-:10059000AFA20034AFA30030AFA00010AFA0001492
-:1005A0008F8600403C04000124845C802405020006
-:1005B0003C010001AC326E800C002B3B0200382164
-:1005C0008F8300403C02F000006218243C0260006F
-:1005D0001062000BA3A0003F240E00013C040001A8
-:1005E00024845C88A3AE003FAFA00010AFA000142D
-:1005F0008F860040240503000C002B3B02003821AD
-:100600008F8202403C03000100431025AF8202406C
-:10061000AF8000488F8200481440000500000000B1
-:10062000AF8000488F8200481040000400000000A6
-:10063000AF8000481000000302E02021AF80004C92
-:1006400002E020213C0500010C002BA834A540F855
-:10065000034020210C002BA8240505C83C02000102
-:100660008C426EA83C0D00018DAD6E883C030001EC
-:100670008C636E843C0800018D086E903C0900017B
-:100680008D296EAC3C0A00018D4A6EB43C0B000112
-:100690008D6B6EC43C0C00018D8C6E983C04000187
-:1006A00024845C9424050400AF42013C8F42013C49
-:1006B0002406000124070001AF400000AF4D0138BF
-:1006C000AF430144AF480148AF49014CAF4A015024
-:1006D000AF4B0154AF4C01582442FF80AF42014060
-:1006E00024020001AFA200100C002B3BAFA00014AD
-:1006F0008F420138AFA200108F42013CAFA200141C
-:100700008F4601448F4701483C04000124845CA0CB
-:100710000C002B3B24050500AFB70010AFBA001446
-:100720008F46014C8F4701503C04000124845CAC8F
-:100730000C002B3B240506003C0200018C426E9C01
-:10074000036038213C06000224C690102448FFFFB5
-:100750000106182400E810240043102B1040000666
-:10076000240509003C04000124845CB8AFA80010F3
-:100770000C002B3BAFA000148F82000CAFA2001026
-:100780008F82003CAFA200148F8600008F87000488
-:100790003C04000124845CC40C002B3B24051000A5
-:1007A0008C0202208C0302248C0602188C07021C87
-:1007B0003C04000124845CCC24051100AFA200108D
-:1007C0000C002B3BAFA30014AF800054AF80011C82
-:1007D0008C020218304200021040000900000000A4
-:1007E0008C0202203C030002346300040043102505
-:1007F000AF42000C8C02021C1000000834420004BE
-:100800008C0202203C0300023463000600431025E2
-:10081000AF42000C8C02021C34420006AF420014AE
-:100820008C020218304200101040000A0000000044
-:100830008C02021C34420004AF4200108C020220E1
-:100840003C03000A34630004004310251000000933
-:10085000AF4200088C0202203C03000A3463000609
-:1008600000431025AF4200088C02021C34420006EF
-:10087000AF42001024020001AF8200A0AF8200B09E
-:100880008F8300548F820054AF8000D0AF8000C0AF
-:1008900010000002246300648F8200540062102361
-:1008A0002C4200651440FFFC000000008C0402088C
-:1008B0008C05020C26E20028AEE2002024020490FF
-:1008C000AEE20010AEE40008AEE5000C26E400083D
-:1008D0008C8200008C830004AF820090AF83009470
-:1008E0008C820018AF8200B49482000AAF82009C10
-:1008F0008F420014AF8200B08F8200B030420004FB
-:100900001440FFFD000000008F8200B03C03EF00A8
-:100910000043102410400021000000008F8200B42A
-:10092000AFA200108F8200908F8300943C040001DE
-:1009300024845CD4AFA300148F8600B08F87009C02
-:100940003C0500010C002B3B34A5200D3C040001AC
-:1009500024845CE0240203C0AFA20010AFA0001406
-:100960008F8601443C07000124E75CE80C002B3B28
-:100970003405DEAD8F82011C34420002AF82011CBF
-:100980008F82022034420004AF8202208F82014015
-:100990003C03000100431025AF82014096E204723F
-:1009A00096E6045296E70462AFA2001096E2048233
-:1009B0003C04000124845D14240512000C002B3B30
-:1009C000AFA2001496F0045232020001104000025F
-:1009D0000000B02124160001320200025440000140
-:1009E00036D60002320200085440000136D6000418
-:1009F000320200105440000136D6000832020020B6
-:100A00005440000136D6001032020040544000012C
-:100A100036D60020320200805440000136D6004015
-:100A200096E6048230C202005440000136D64000EF
-:100A300096E304723062020010400003306201004D
-:100A40001000000336D620005440000136D61000B6
-:100A500096F0046232C24000144000043207009B4A
-:100A600030C2009B14E20007240E000132C22000B5
-:100A70001440000D320200013062009B10E20009B8
-:100A8000240E00013C04000124845D202405130091
-:100A900002003821A3AE003FAFA300100C002B3B97
-:100AA000AFA00014320200015440000136D600808D
-:100AB000320200025440000136D601003202000822
-:100AC0005440000136D602003202001054400001AA
-:100AD00036D60400320200805440000136D60800A9
-:100AE0008C02021830420200104000023C02000852
-:100AF00002C2B0258C0202183042080010400002E9
-:100B00003C02008002C2B0258C0202183042040070
-:100B1000104000023C02010002C2B0258C02021803
-:100B200030420100104000023C02020002C2B02527
-:100B30008C02021830420080104000023C02040087
-:100B400002C2B0258C020218304220001040000280
-:100B50003C02001002C2B0258C0202183042400054
-:100B6000104000023C02002002C2B0258C02021894
-:100B700030421000104000023C02004002C2B0258A
-:100B80008EE204988EE3049CAF420160AF4301649F
-:100B90008EE204A08EE304A4AF420168AF43016C6F
-:100BA0008EE204A88EE304ACAF420170AF4301743F
-:100BB0008EE204288EE3042CAF420178AF43017C1F
-:100BC0008EE204488EE3044CAF420180AF430184BF
-:100BD0008EE204588EE3045CAF420188AF43018C7F
-:100BE0008EE204688EE3046CAF420190AF4301943F
-:100BF0008EE204788EE3047CAF420198AF43019CFF
-:100C00008EE204888EE3048CAF4201A0AF4301A4BE
-:100C10008EE204B08EE304B424040080AF4201A845
-:100C2000AF4301AC0C002BA8240500808C02025CB1
-:100C300027440224AF4201F08C0202602405020026
-:100C4000240600080C002BBFAF4201F83C043B9A7D
-:100C50003484CA0000003821240200062403000264
-:100C6000AF4201F4240203E8AF430204AF430200A1
-:100C7000AF4401FCAF42029424020001AF43029052
-:100C8000AF42029C3C0300010067182190636CD8BE
-:100C90000347102124E70001A043022C2CE2000F9F
-:100CA0001440FFF80347182124E700013C08000125
-:100CB000350840F88F8200403C04000124845D2CFC
-:100CC000240514000002170224420030A062022C06
-:100CD00003471021A040022C8C07021802C03021CB
-:100CE000240205C8AFA200100C002B3BAFA80014D3
-:100CF0003C04000124845D383C05000024A55C8090
-:100D00002406001027B100300220382127B3003418
-:100D10000C0017A3AFB300103C0300018C636CC838
-:100D20001060000A004080218FA300302405FF00DE
-:100D30008FA20034246400FF008520240083182340
-:100D400000431023AFA20034AFA400303C040001E4
-:100D500024845D443C05000024A5410024060108CC
-:100D6000022038210C0017A3AFB3001000409021DF
-:100D700032C200033C010001AC326E8010400045DD
-:100D8000022038218F8200503C03001000431024C1
-:100D900010400016000000008C0202183042004093
-:100DA0001040000F240200018F8200508C030218B3
-:100DB000240E00013C04000124845D50A3AE003FDA
-:100DC000AFA20010AFA300148F87004024051500C8
-:100DD0000C002B3B02C0302110000004000000007A
-:100DE0003C01000100370821A02240F43C0400012E
-:100DF00024845D5C3C05000124A55B403C060001A9
-:100E000024C65BAC00C530238F42001027B30030EE
-:100E10000260382127B1003434420A00AF4200108A
-:100E20000C0017A3AFB100103C04000124845D70D6
-:100E30003C05000124A5B7143C06000124C6BA9065
-:100E400000C5302302603821AF4201080C0017A30F
-:100E5000AFB100103C04000124845D8C3C0500010E
-:100E600024A5BE583C06000124C6C90000C5302395
-:100E7000026038213C010001AC226EF40C0017A383
-:100E8000AFB100103C04000124845DA410000024D4
-:100E9000240516003C04000124845DAC3C050001DF
-:100EA00024A5A10C3C06000124C6A23800C53023AD
-:100EB0000C0017A3AFB300103C04000124845DBCF8
-:100EC0003C05000124A5B2B03C06000124C6B70CC5
-:100ED00000C5302302203821AF4201080C0017A3BF
-:100EE000AFB300103C04000124845DD03C05000138
-:100EF00024A5BA983C06000124C6BE5000C5302384
-:100F0000022038213C010001AC226EF40C0017A332
-:100F1000AFB300103C04000124845DE424051650A6
-:100F200002C03021000038213C010001AC226EF8E3
-:100F3000AFA000100C002B3BAFA0001432C2002069
-:100F40001040002127A700303C04000124845DF0FC
-:100F50003C05000124A5B13C3C06000124C6B2A812
-:100F600000C5302324022000AF42001C27A2003419
-:100F70000C0017A3AFA20010000219000003198291
-:100F80003C04080000641825AE4300282403001028
-:100F9000AF43003C96E30450AF4300408F43004012
-:100FA0003C04000124845E04AFA00014AFA3001031
-:100FB0008F47001C240516603C010001AC226EF036
-:100FC0001000002532C600208EE204488EE3044C57
-:100FD000AF43001C8F42001C2442E0002C42200141
-:100FE0001440000A240E00013C04000124845E1019
-:100FF000A3AE003FAFA00010AFA000148F46001CAE
-:10100000240517000C002B3B000038213C02000097
-:1010100024425CBC00021100000211823C03080063
-:1010200000431025AE42002824020008AF42003CD5
-:1010300096E20450AF4200408F4200403C04000161
-:1010400024845E1CAFA00014AFA200108F47001CC8
-:101050002405180032C600200C002B3B00000000C5
-:101060003C050FFF3C0300018C636EF434A5FFFFC9
-:10107000024030213C0200018C426EF83C04080022
-:101080000065182400031882006418250045102408
-:101090000002108200441025ACC2008032C20180E0
-:1010A00010400056ACC300208F82005C3C030080DF
-:1010B000004310241040000D000000008F820050FB
-:1010C000AFA200108F82005C240E00013C040001DE
-:1010D00024845E28A3AE003FAFA200148F87004097
-:1010E000240519000C002B3B02C030218F820050D8
-:1010F0003C030010004310241040001600000000C4
-:101100008C020218304200401040000F24020001FF
-:101110008F8200508C030218240E00013C04000151
-:1011200024845D50A3AE003FAFA20010AFA3001413
-:101130008F870040240520000C002B3B02C030218B
-:1011400010000004000000003C01000100370821ED
-:10115000A02240F43C04000124845E343C050001DC
-:1011600024A55AC03C06000124C65B3800C53023C4
-:101170008F42000827B300300260382127B10034C5
-:1011800034420E00AF4200080C0017A3AFB10010AC
-:101190003C04000124845E4C3C05000124A5D8B425
-:1011A0003C06000124C6E3C800C530230260382194
-:1011B000AF42010C0C0017A3AFB100103C040001BA
-:1011C00024845E643C05000124A5E9AC3C060001D2
-:1011D00024C6F0F000C53023026038213C01000134
-:1011E000AC226F040C0017A3AFB100103C04000147
-:1011F00024845E7C10000027240521003C040001AB
-:1012000024845E843C05000124A59FC83C0600019F
-:1012100024C6A10400C5302327B1003002203821A4
-:1012200027B300340C0017A3AFB300103C04000137
-:1012300024845E943C05000124A5CAD43C06000128
-:1012400024C6D8AC00C5302302203821AF42010C9F
-:101250000C0017A3AFB300103C04000124845EA46B
-:101260003C05000124A5E84C3C06000124C6E9A485
-:1012700000C53023022038213C010001AC226F045C
-:101280000C0017A3AFB300103C04000124845EB827
-:101290002405215002C03021000038213C0100010A
-:1012A000AC226F10AFA000100C002B3BAFA00014BD
-:1012B0003C110FFF3C0300018C636F043631FFFFCC
-:1012C000024098213C0200018C426F103C0E080045
-:1012D0000071182400031882006E18250051102494
-:1012E00000021082004E1025AE630038AE62007816
-:1012F0008C02021830420040144000042402000115
-:101300003C01000100370821A02240F43C04000108
-:1013100024845EC43C05000124A5E3D03C06000102
-:1013200024C6E52C00C5302327BE003003C0382179
-:1013300027B500340C0017A3AFB500103C01000125
-:10134000AC226EFC00511024000210823C0E0800FA
-:10135000004E1025AE62005032C220001040000640
-:1013600003C038213C02000024425CBC022210244D
-:101370001000000F000210823C04000124845ED89B
-:101380003C05000124A5E5343C06000124C6E6E442
-:1013900000C530230C0017A3AFB500103C010001BD
-:1013A000AC226F1400511024000210823C0E080081
-:1013B000004E1025AE62004832C2400010400005C9
-:1013C00027A700303C02000024425CBC1000000E45
-:1013D000000211003C04000124845EF03C05000181
-:1013E00024A5E6EC3C06000124C6E84400C53023F1
-:1013F00027A200340C0017A3AFA200103C0100018B
-:10140000AC226F0800021100000211823C030800A8
-:1014100000431025AE4200603C04000124845F08B4
-:101420003C05000124A582303C06000124C68650FC
-:1014300000C5302327B100300220382127B3003403
-:101440000C0017A3AFB300103C0E0FFF35CEFFFF0B
-:101450003C04000124845F143C05000024A564685A
-:101460003C06000024C6658800C5302302203821D0
-:101470000240F0213C010001AC226EDC004E102441
-:10148000000210823C15080000551025AFAE004444
-:10149000AFC200B80C0017A3AFB300103C040001AA
-:1014A00024845F203C05000024A565903C060000D4
-:1014B00024C668088FAE004400C5302302203821BE
-:1014C0003C010001AC226ED0004E102400021082BC
-:1014D00000551025AFC200E80C0017A3AFB30010F1
-:1014E0003C04000124845F383C05000024A56810FA
-:1014F0003C06000024C669408FAE004400C530237E
-:10150000022038213C010001AC226EC8004E10249C
-:101510000002108200551025AFC200C00C0017A3B6
-:10152000AFB300103C04000124845F503C0500016F
-:1015300024A5FAD03C06000124C6FBA88FAE0044C7
-:1015400000C53023022038213C010001AC226ED4BA
-:10155000004E10240002108200551025AFC200C8B2
-:101560000C0017A3AFB300103C04000124845F5C9F
-:101570003C05000124A5C93C3C06000124C6CA2044
-:1015800000C5302302203821AF4201100C0017A300
-:10159000AFB300103C04000124845F6C3C050001E3
-:1015A00024A5C9103C06000124C6C93400C5302357
-:1015B00002203821AF4201240C0017A3AFB3001062
-:1015C0003C04000124845F7C3C05000124A55A8072
-:1015D0003C06000124C65AAC00C530230220382145
-:1015E000AF420120AF4201140C0017A3AFB30010AB
-:1015F0003C04000124845F883C05000124A5F29886
-:101600003C06000124C6F6B400C530230220382170
-:10161000AF4201180C0017A3AFB300108FAE004407
-:101620003C010001AC226F18004E10240002108211
-:10163000005510250C003FC3AFC200D00C003C4049
-:10164000000000000C0027A800000000AC000228E9
-:10165000AC00022C96E204502442FFFFAF42003857
-:1016600096E20460AF42008032C2400014400003A2
-:101670000000000096E20480AF42008496E70490E8
-:1016800050E000012407080024E2FFFFAF42008879
-:10169000AF42007C2402080010E2000F32C240007A
-:1016A000104000032402040010E2000B00000000C0
-:1016B000240E00013C04000124845F98A3AE003F87
-:1016C00096E604902405217002C03821AFA00010D6
-:1016D0000C002B3BAFA000148F4301388F4401381E
-:1016E00024020001A34205C2AF430094AF44009816
-:1016F000AFA00010AFA000148F4600808F47008479
-:101700003C04000124845FA40C002B3B2405220030
-:101710000C0024A43C1108003C1433D83694CB5858
-:101720003C020800344200803C04000124845FB085
-:101730003C05000024A55D003C06000024C65D1C9D
-:1017400000C5302327A70030AF8200602402FFFFCE
-:10175000AF82006427A200340C0017A3AFA20010D0
-:101760003C010001AC226EB800021100000211829F
-:10177000005110250C0018FCAE4200008F82024080
-:101780003C03000100431025AF8202403C020000F0
-:1017900024424034AF820244AF8002408F82006016
-:1017A00000511024144000053C0308008F820060A3
-:1017B000004310241040FFFD000000000C003C4DD1
-:1017C000000088213C020100AFA200208F530018C6
-:1017D000240200FF56620001267100018C020228DB
-:1017E0001622000E001330C08F42033C2442000139
-:1017F000AF42033C8F42033C8C0202283C040001B0
-:1018000024845C243C050009AFA00014AFA20010A2
-:101810008FA600201000003F34A5010000D7102142
-:101820008FA300208FA40024AC4304C0AC4404C4A4
-:1018300000C018218F4401788F45017C00001021E1
-:1018400024070004AFA70010AFB100148F48000CAC
-:1018500024C604C002E63021AFA800188F48010C4E
-:101860002407000800A3282100A3482B0082202180
-:101870000100F809008920211440000B240700080A
-:101880008F820120AFA200108F8201243C0400014E
-:1018900024845C2C3C050009AFA200148FA6002014
-:1018A0001000001C34A502008F4401608F450164C4
-:1018B0008F43000CAF5100188F86012024020010C6
-:1018C000AFA20010AFB10014AFA300188F42010CFB
-:1018D0000040F80924C6001C14400010000000005D
-:1018E0008F42034024420001AF4203408F42034035
-:1018F0008F820120AFA200108F8201243C040001DE
-:1019000024845C343C050009AFA200148FA600209B
-:1019100034A503000C002B3B026038218F4202E407
-:1019200024420001AF4202E48F4202E493A2003F4E
-:10193000104000693C02070034423000AFA200288A
-:101940008F530018240200FF126200020000882159
-:10195000267100018C0202281622000E001330C0EE
-:101960008F42033C24420001AF42033C8F42033CC0
-:101970008C0202283C04000124845C243C050009FC
-:10198000AFA00014AFA200108FA600281000003FE7
-:1019900034A5010000D710218FA300288FA4002CAC
-:1019A000AC4304C0AC4404C400C018218F44017887
-:1019B0008F45017C0000102124070004AFA7001010
-:1019C000AFB100148F48000C24C604C002E63021D9
-:1019D000AFA800188F48010C2407000800A3282195
-:1019E00000A3482B008220210100F8090089202152
-:1019F0001440000B240700088F820120AFA20010C2
-:101A00008F8201243C04000124845C2C3C050009E5
-:101A1000AFA200148FA600281000001C34A50200FD
-:101A20008F4401608F4501648F43000CAF51001853
-:101A30008F86012024020010AFA20010AFB1001465
-:101A4000AFA300188F42010C0040F80924C6001C07
-:101A500014400010000000008F42034024420001A7
-:101A6000AF4203408F4203408F820120AFA200109B
-:101A70008F8201243C04000124845C343C0500096D
-:101A8000AFA200148FA6002834A503000C002B3B46
-:101A9000026038218F4202F024420001AF4202F07E
-:101AA0008F4202F03C04000124845FC0AFA000100C
-:101AB000AFA000148FA60028240523000C002B3BA8
-:101AC0000000382110000004000000008C020264B5
-:101AD00010400005000000008F8200A0304200048A
-:101AE0001440FFFA000000008F82004434420004DA
-:101AF000AF8200448F42030824420001AF42030832
-:101B00008F4203088F8200D88F8300D400431023B4
-:101B10002442FF80AF4200908F4200902842FF8114
-:101B200010400006240200018F4200908F430144C0
-:101B300000431021AF42009024020001AF42008C0C
-:101B400032C2000810400006000000008F8202141C
-:101B50003C0381003042FFFF00431025AF82021496
-:101B60003C0300018C636D94306200021040000958
-:101B7000306200013C04000124845FCC3C0500007D
-:101B800024A56D503C06000024C671C81000001248
-:101B900000C5302310400009000000003C04000193
-:101BA00024845FDC3C05000024A571D03C060000C5
-:101BB00024C676781000000800C530233C040001DC
-:101BC00024845FEC3C05000024A569483C06000025
-:101BD00024C66D4800C5302327A7003027A2003453
-:101BE0000C0017A3AFA200103C010001AC226ECC88
-:101BF0003C0200018C426ECC3C0308000002110044
-:101C00000002118200431025AE4200408F8200A0E6
-:101C1000AFA200108F8200B0AFA200148F86005CCC
-:101C20008F87011C3C04000124845FFC3C010001FF
-:101C3000AC366EA43C010001AC206E943C01000166
-:101C4000AC3C6E8C3C010001AC3B6EBC3C01000125
-:101C5000AC376EC03C010001AC3A6EA00C002B3BCF
-:101C6000240524008F820200AFA200108F82022080
-:101C7000AFA200148F8600448F8700503C040001FF
-:101C8000248460080C002B3B240525008F83006012
-:101C90000074100B0242000A0200F821000000004C
-:101CA0000000000D8FBF00608FBE005C8FB5005834
-:101CB0008FB300548FB200508FB1004C8FB00048EA
-:101CC00003E0000827BD006827BDFFE03C040001D9
-:101CD00024846014240526000000302100003821EF
-:101CE000AFBF0018AFA000100C002B3BAFA000143A
-:101CF0008FBF001803E0000827BD002003E00008A4
-:101D00000000000003E000080000000000000000E8
-:101D100000000000000000000000000000000000C3
-:101D200003E000080000000003E0000800000000DD
-:101D300027BDFDE027A500183C04DEAD3484BEEFCE
-:101D4000AFBF02188F8201503C03001F3463FFFFB6
-:101D5000AFA4001800A2282300A328248CA200000E
-:101D60001044000A00000000AFA500108CA2000083
-:101D7000AFA200148F8601508F8702503C040001EF
-:101D80002484601C0C002B3B240527008FBF021805
-:101D900003E0000827BD022027BDFFE03C06ABBAE8
-:101DA00034C6BABEAFB000183C1000043C07007F38
-:101DB00034E7FFFFAFBF001C001028408E04000076
-:101DC0008CA30000ACA00000AE0600008CA20000B6
-:101DD000ACA3000010460005AE04000000A0802166
-:101DE00000F0102B1040FFF5001028403C040001CB
-:101DF00024846028240528000200302100003821B6
-:101E0000AFA000100C002B3BAFA00014020010216B
-:101E10008FBF001C8FB0001803E0000827BD002012
-:101E20008C0202243047003F10E000100080302177
-:101E3000000028212403002000E3102410400002A9
-:101E40000006304200A62821000318421460FFFB60
-:101E500000E310242402F00000A228243402FFFF33
-:101E60000045102B144000033C0200011000000844
-:101E70003C0200013442FFFF008518230043102B71
-:101E80001440000300A010213C02FFFE008210213C
-:101E900003E000080000000027BDFFD0AFB5002818
-:101EA0008FB50040AFB2002000A09021AFB1001C60
-:101EB00024C60003AFBF002CAFB30024AFB000189E
-:101EC0008EA200002403FFFC00C380240050102BCE
-:101ED0001440001B00E088218E330000AFB00010DA
-:101EE0008EA20000AFA200148E270000240530004F
-:101EF0000C002B3B024030218E230000007020217B
-:101F00000064102B10400007024028218CA2000022
-:101F1000AC620000246300040064102B1440FFFB3B
-:101F200024A500048EA2000000501023AEA20000E1
-:101F30008E220000005010211000000BAE22000085
-:101F40002402002DA0820000AFB000108EA200007D
-:101F500002409821AFA200148E2700002405310012
-:101F60000C002B3B02603021026010218FBF002C3F
-:101F70008FB500288FB300248FB200208FB1001CD2
-:101F80008FB0001803E0000827BD003027BDFFE830
-:101F90003C1CC0003C05FFFE3C0300018C636E84CA
-:101FA0003C0400018C846E9034A5BF0824021FFC01
-:101FB0003C010001AC226CD03C0200C03C0100019D
-:101FC000AC226CD43C020020AFBF00103C0100C02A
-:101FD000AC201FFC0043102300441023245BB000FE
-:101FE0000365B8213C1D00018FBD6CCC03A0F0211E
-:101FF0003C0400C0348402003C1A00C03C0300C012
-:10200000346307C824021DFC3C010001AC226CD0E3
-:10201000240218343C010001AC246CD43C010001C2
-:10202000AC226CD03C010001AC236CD40C00180D28
-:10203000375A02008FBF001003E0000827BD0018C8
-:1020400027BDFFC83C04000124846034240532000D
-:102050003C0200018C426CD03C0300018C636CD4C8
-:102060000000302103603821AFBF0030AFB3002C37
-:10207000AFB20028AFB10024AFB00020AFA2001C67
-:10208000AFA30018AFB700100C002B3BAFBA001481
-:102090000C001916000000008F8202403442000438
-:1020A000AF82024024020001AF4200003C02000166
-:1020B00000571021904240F4104000922403FFFC8E
-:1020C0003C1000012610AC733C1200012652A84CB3
-:1020D00002121023004380248FA3001C3C04000143
-:1020E000248460400070102B1440001A27B300189D
-:1020F0008FB100182405300002403021AFB000102D
-:10210000AFA300140C002B3B022038218FA3001832
-:10211000007020210064102B104000070240302185
-:102120008CC20000AC620000246300040064102B29
-:102130001440FFFB24C600048FA2001C0050102393
-:10214000AFA2001C8E620000005010211000000A97
-:10215000AE6200000240882124053100AFB00010BB
-:10216000AFA300148FA70018022030212402002DF5
-:102170000C002B3BA0820000240700208FA3001C32
-:102180003C0400012484605C241200203C01000116
-:10219000AC316EB02C6200201440001D27B1001835
-:1021A0008FB00018240530003C06000124C66F5093
-:1021B000AFA70010AFA300140C002B3B0200382186
-:1021C0008FA300183C04000124846F502465002074
-:1021D0000065102B10400007000000008C820000FA
-:1021E000AC620000246300040065102B1440FFFB68
-:1021F000248400048FA2001C00521023AFA2001CF4
-:102200008E220000005210211000000BAE220000B0
-:102210003C10000126106F5024053100AFA70010BC
-:10222000AFA300148FA70018020030212402002D54
-:102230000C002B3BA0820000240700203C0400017E
-:10224000248460708FA3001C241200203C01000134
-:10225000AC306EE42C6200201440001D27B1001841
-:102260008FB00018240530003C06000124C66F70B2
-:10227000AFA70010AFA300140C002B3B02003821C5
-:102280008FA300183C04000124846F702465002093
-:102290000065102B10400007000000008C82000039
-:1022A000AC620000246300040065102B1440FFFBA7
-:1022B000248400048FA2001C00521023AFA2001C33
-:1022C0008E220000005210211000000BAE220000F0
-:1022D0003C10000126106F7024053100AFA70010DC
-:1022E000AFA300148FA70018020030212402002D94
-:1022F0000C002B3BA08200003C01000110000031CB
-:10230000AC306EE03C1000012610821F3C12000130
-:102310002652809C02121023004380248FA3001CAD
-:102320003C040001248460840070102B1440001AC7
-:1023300027B300188FB10018240530000240302167
-:10234000AFB00010AFA300140C002B3B02203821CB
-:102350008FA30018007020210064102B104000078C
-:10236000024030218CC20000AC62000024630004F3
-:102370000064102B1440FFFB24C600048FA2001C35
-:1023800000501023AFA2001C8E62000000501021EC
-:102390001000000AAE6200000240882124053100CE
-:1023A000AFB00010AFA300148FA700180220302197
-:1023B0002402002D0C002B3BA08200003C010001F8
-:1023C000AC316EB03C0300018C636EB0240204009B
-:1023D0000060F809AF8200708FBF00308FB3002C0F
-:1023E0008FB200288FB100248FB0002003E00008D6
-:1023F00027BD003800000000000000008F82004070
-:102400003C03F000004310243C036000144300062A
-:10241000000000008F8200502403FF80004310243E
-:1024200034420055AF8200508F820054244203E8AA
-:10243000AF820058240201F4AF4200E024020004FD
-:10244000AF4200E824020002AF4001B0AF4000E418
-:10245000AF4200DCAF4000D8AF4000D403E000083A
-:10246000AF4000D08F8200542442000503E00008F2
-:10247000AF82007827BDFFE8AFBF00108F82005405
-:10248000244203E8AF8200583C02080002C2102434
-:10249000104000043C02F7FF3442FFFF02C2B024A8
-:1024A000369400403C0200018C426DA81040001799
-:1024B0003C0202003C0300018C636F1C106000169C
-:1024C0000282A0253C0200018C426E44144000129E
-:1024D0003C0202003C0200018C426D943042000339
-:1024E0001440000D3C0202008F8302243C020002D3
-:1024F0008C428FEC106200083C0202000C003DAFE1
-:1025000000000000100000043C0202000C00419694
-:10251000000000003C02020002C210241040000330
-:10252000000000000C001F4B000000008F4200D88C
-:102530008F4300DC24420001AF4200D80043102B3F
-:102540001440000300000000AF4000D83694008023
-:102550008C0302381060000C000000008F4201B0B4
-:10256000244203E8AF4201B00043102B14400006A0
-:1025700000000000934205C5144000030000000065
-:102580000C001DA0000000008FBF001003E0000839
-:1025900027BD001803E000080000000027BDFFD899
-:1025A000AFBF00208F43002C8F42003810620059CB
-:1025B000000000003C02000100571021904240F052
-:1025C00010400026240700088F4401708F450174D5
-:1025D0008F48000C8F86012024020020AFA200103B
-:1025E000AFA30014AFA800188F42010C0040F809F7
-:1025F00024C6001C14400011240200013C0100010B
-:1026000000370821A02240F08F820124AFA20010E1
-:102610008F8201283C04000124846128AFA20014A9
-:102620008F46002C8F8701203C0500090C002B3BB6
-:1026300034A509001000005C000000008F42030078
-:1026400024420001AF4203008F4203008F42002C5E
-:10265000A34005C110000027AF4200388F4401702D
-:102660008F4501748F43002C8F48000C8F8601200A
-:1026700024020080AFA20010AFA30014AFA800187E
-:102680008F42010C0040F80924C6001C14400011C0
-:10269000240200013C01000100370821A02240F182
-:1026A0008F820124AFA200108F8201283C04000118
-:1026B00024846134AFA200148F46002C8F87012040
-:1026C0003C0500090C002B3B34A51100100000361E
-:1026D000000000008F4203008F43002C24420001C1
-:1026E000AF4203008F42030024020001A34205C150
-:1026F000AF4300383C01000100370821A02040F121
-:102700003C01000100370821A02040F01000002605
-:10271000AF400034934205C11040001D000000008E
-:10272000A34005C18F8200403042000114400008E0
-:10273000000020218C0301042402000150620005E6
-:10274000240400018C020264104000030080102168
-:102750002404000100801021104000060000000049
-:102760008F42030C24420001AF42030C100000080A
-:102770008F42030C8F82004434420004AF82004435
-:102780008F42030824420001AF4203088F4203082E
-:102790003C01000100370821A02040F03C0100016D
-:1027A00000370821A02040F18F42000010400007B0
-:1027B00000000000AF80004C8F82004C1040FFFDF5
-:1027C000000000001000000500000000AF8000487D
-:1027D0008F8200481040FFFD000000008F820060E3
-:1027E0003C03FF7F3463FFFF00431024AF8200608F
-:1027F0008F420000104000030000000010000002A3
-:10280000AF80004CAF8000488FBF002003E000087D
-:1028100027BD002803E000080000000027BDFFD806
-:10282000AFBF00208F4300448F42007C106200291C
-:10283000240700088F4401688F45016C8F48000C05
-:102840008F86012024020040AFA20010AFA3001425
-:10285000AFA800188F42010C0040F80924C6001CE4
-:1028600014400011240200013C010001003708213E
-:10287000A02240F28F820124AFA200108F82012893
-:102880003C0400012484613CAFA200148F46004444
-:102890008F8701203C0500090C002B3B34A5130059
-:1028A0001000000F000000008F42030424420001CA
-:1028B000AF4203048F4203048F420044AF42007CC6
-:1028C0003C01000100370821A02040F21000000464
-:1028D000AF4000783C01000100370821A02040F201
-:1028E0008F4200001040000700000000AF80004C45
-:1028F0008F82004C1040FFFD00000000100000051A
-:1029000000000000AF8000488F8200481040FFFDAB
-:10291000000000008F8200603C03FEFF3463FFFF75
-:1029200000431024AF8200608F420000104000037B
-:102930000000000010000002AF80004CAF80004893
-:102940008FBF002003E0000827BD002803E0000837
-:10295000000000003C0200018C426DA827BDFFA8CA
-:10296000AFBF0050AFBE004CAFB50048AFB300449E
-:10297000AFB20040AFB1003CAFB00038104000D55E
-:102980008F9000448F4200D0244300012842000B66
-:10299000144000E4AF4300D08F42000430420002F4
-:1029A0001440009CAF4000D08F4200043C03000163
-:1029B0008C636D9834420002AF420004240200018F
-:1029C000146200033C020600100000023442300092
-:1029D00034421000AFA200208F4A0018AFAA003482
-:1029E00027AA0020AFAA002C8FAA0034240200FFDF
-:1029F0001142000200001821254300018C02022828
-:102A0000006098211662000E3C0500098F42033CCD
-:102A100024420001AF42033C8F42033C8C02022857
-:102A20008FA700343C0400012484610CAFA0001483
-:102A3000AFA200108FA600201000007034A5050082
-:102A40008FAA0034000A38C000F710218FA300209D
-:102A50008FA40024AC4304C0AC4404C48F8300544E
-:102A60008F820054247103E8022210232C4203E9D0
-:102A70001040001B0000A82100E09021265E04C049
-:102A80008F4401788F45017C02401821240A0004FC
-:102A9000AFAA0010AFB300148F48000C0000102143
-:102AA00002FE3021AFA800188F48010C240700084F
-:102AB00000A3282100A3482B008220210100F8094F
-:102AC0000089202154400006241500018F82005403
-:102AD000022210232C4203E91440FFE90000000009
-:102AE00032A200FF54400018AF5300188F42037801
-:102AF00024420001AF4203788F4203788F82012085
-:102B00008FAA002C8FA70034AFA200108F8201245F
-:102B10003C04000124846118AFA200148D4600001B
-:102B20003C0500091000003534A506008F4203085B
-:102B30002415000124420001AF4203088F4203081C
-:102B40001000001E32A200FF8F8300548F820054B9
-:102B5000247103E8022210232C4203E910400016DE
-:102B60000000A8213C1E0020241200108F42000CFF
-:102B70008F4401608F4501648F860120AFB2001041
-:102B8000AFB30014005E1025AFA200188F42010CF5
-:102B9000240700080040F80924C6001C1440FFE385
-:102BA000000000008F820054022210232C4203E90F
-:102BB0001440FFEE0000000032A200FF144000119C
-:102BC0003C0500098F42037824420001AF4203789C
-:102BD0008F4203788F8201208FAA002C8FA70034A8
-:102BE000AFA200108F8201243C04000124846120E4
-:102BF000AFA200148D46000034A507000C002B3B4B
-:102C0000000000008F4202EC24420001AF4202ECBF
-:102C10008F4202EC8F4200043042000150400029F4
-:102C2000361000403C02040002C210241040001381
-:102C30002404FFDF8F4202508F4302548F4401B4BB
-:102C400014640006361000408F4202708F430274F5
-:102C50008F4401B8106400072402FFDF8F42025046
-:102C60008F4302548F4402708F450274100000128B
-:102C70003A1000201000002B020280248F420250E4
-:102C80008F4302548F4501B414650006020480246A
-:102C90008F4202708F4302748F4401B85064002148
-:102CA000361000408F4202508F4302548F4402700E
-:102CB0008F4502743A100040AF4301B41000001970
-:102CC000AF4501B88F4200D4244300011000001129
-:102CD000284200338F4200043042000110400009B6
-:102CE0003C02040002C21024104000042402FFDF52
-:102CF000020280241000000B361000401000000972
-:102D0000361000608F4200D436100040244300018A
-:102D1000284201F514400003AF4300D4AF4000D473
-:102D20003A100020AF9000442402FF7F0282A024CA
-:102D30008FBF00508FBE004C8FB500488FB300444A
-:102D40008FB200408FB1003C8FB0003803E0000824
-:102D500027BD005803E00008000000003C0200010D
-:102D60008C426DA827BDFFB0AFBF0048AFBE004486
-:102D7000AFB50040AFB3003CAFB20038AFB10034E4
-:102D8000104000C7AFB000308F4200D02443000194
-:102D90002842000B144000DAAF4300D08F420004F9
-:102DA0003042000214400097AF4000D08F42000430
-:102DB0003C0300018C636D9834420002AF42000472
-:102DC00024020001146200033C020600100000020D
-:102DD0003442300034421000AFA20020000018211D
-:102DE0008F5E001827AA0020240200FF13C20002F1
-:102DF000AFAA002C27C300018C020228006090219A
-:102E00001642000E001E38C08F42033C24420001CF
-:102E1000AF42033C8F42033C8C0202283C04000179
-:102E20002484610C3C050009AFA00014AFA200107F
-:102E30008FA600201000006D34A5050000F71021BA
-:102E40008FA300208FA40024AC4304C0AC4404C46E
-:102E50008F8300548F820054247003E802021023F1
-:102E60002C4203E91040001B0000982100E088215B
-:102E7000263504C08F4401788F45017C022018213B
-:102E8000240A0004AFAA0010AFB200148F48000C4F
-:102E90000000102102F53021AFA800188F48010C66
-:102EA0002407000800A3282100A3482B008220212A
-:102EB0000100F80900892021544000062413000174
-:102EC0008F820054020210232C4203E91440FFE9D0
-:102ED00000000000326200FF54400017AF5200189B
-:102EE0008F42037824420001AF4203788F42037877
-:102EF0008F8201208FAA002CAFA200108F820124A4
-:102F00003C040001248461183C050009AFA20014B0
-:102F10008D4600001000003534A506008F420308DE
-:102F20002413000124420001AF4203088F4203082A
-:102F30001000001E326200FF8F8300548F82005405
-:102F4000247003E8020210232C4203E9104000160B
-:102F5000000098213C150020241100108F42000C25
-:102F60008F4401608F4501648F860120AFB100104E
-:102F7000AFB2001400551025AFA200188F42010C0B
-:102F8000240700080040F80924C6001C1440FFE391
-:102F9000000000008F820054020210232C4203E93B
-:102FA0001440FFEE00000000326200FF14400011E8
-:102FB000000000008F42037824420001AF420378F2
-:102FC0008F4203788F8201208FAA002CAFA20010BD
-:102FD0008F8201243C040001248461203C05000907
-:102FE000AFA200148D46000034A507000C002B3B57
-:102FF00003C038218F4202EC24420001AF4202ECB0
-:103000008F4202EC8F420004304200011040001851
-:10301000240400018F4202508F4302548F4501B4B3
-:103020003C01000114650006A0246CF18F4202707F
-:103030008F4302748F4401B8106400210000000027
-:103040008F4202508F4302543C04000190846CF084
-:103050008F4602708F47027438840001AF4301B479
-:10306000AF4701B83C01000110000025A0246CF01E
-:103070008F4200D43C010001A0206CF024430001E9
-:10308000284200331440001EAF4300D43C0200012C
-:1030900090426CF1AF4000D410000017384200019C
-:1030A0008F42000430420001104000080000000080
-:1030B0000C00565A000020213C010001A0206CF1B8
-:1030C0003C0100011000000EA0206CF08F4200D4E3
-:1030D0003C010001A0206CF024430001284201F5CE
-:1030E00014400007AF4300D43C02000190426CF151
-:1030F000AF4000D4004210263C010001A0226CF138
-:103100003C0300018C636D98240200021462000CE1
-:103110003C0300023C03000190636CF124020001B7
-:103120005462001F000020213C02000190426CF01C
-:103130001443001B24040005100000192404000699
-:103140003C0200028C428FF4004310241040000B1C
-:10315000240200013C03000190636CF154620010F2
-:10316000000020213C02000190426CF01443000C4E
-:10317000240400031000000A240400043C0300019E
-:1031800090636CF114620006000020213C020001F3
-:1031900090426CF024040001504400012404000219
-:1031A0000C00565A000000002402FF7F0282A02477
-:1031B0008FBF00488FBE00448FB500408FB3003CE6
-:1031C0008FB200388FB100348FB0003003E00008B8
-:1031D00027BD005003E00008000000003C02000191
-:1031E0008C426DA827BDFFB0AFBF0048AFBE004402
-:1031F000AFB50040AFB3003CAFB20038AFB1003460
-:10320000104000DEAFB000308F4200D03C0400011F
-:103210008C846D98244300012842000BAF4400E8E1
-:10322000144000FEAF4300D08F4200043042000241
-:1032300014400095AF4000D08F4200043442000299
-:10324000AF42000424020001148200033C02060085
-:10325000100000023442300034421000AFA20020BF
-:10326000000018218F5E001827AA0020240200FF0A
-:1032700013C20002AFAA002C27C300018C0202284F
-:10328000006090211642000E001E38C08F42033CA1
-:1032900024420001AF42033C8F42033C8C020228CF
-:1032A0003C0400012484610C3C050009AFA000141B
-:1032B000AFA200108FA600201000006D34A50500FD
-:1032C00000F710218FA300208FA40024AC4304C07A
-:1032D000AC4404C48F8300548F820054247003E8EC
-:1032E000020210232C4203E91040001B0000982129
-:1032F00000E08821263504C08F4401788F45017C89
-:1033000002201821240A0004AFAA0010AFB2001452
-:103310008F48000C0000102102F53021AFA80018E2
-:103320008F48010C2407000800A3282100A3482B84
-:10333000008220210100F809008920215440000664
-:10334000241300018F820054020210232C4203E94F
-:103350001440FFE900000000326200FF54400017F3
-:10336000AF5200188F42037824420001AF42037825
-:103370008F4203788F8201208FAA002CAFA2001009
-:103380008F8201243C040001248461183C0500095B
-:10339000AFA200148D4600001000003534A50600D1
-:1033A0008F4203082413000124420001AF420308A6
-:1033B0008F4203081000001E326200FF8F8300540A
-:1033C0008F820054247003E8020210232C4203E988
-:1033D00010400016000098213C1500202411001018
-:1033E0008F42000C8F4401608F4501648F8601205D
-:1033F000AFB10010AFB2001400551025AFA20018F5
-:103400008F42010C240700080040F80924C6001C64
-:103410001440FFE3000000008F82005402021023DA
-:103420002C4203E91440FFEE00000000326200FF6E
-:1034300014400011000000008F4203782442000174
-:10344000AF4203788F4203788F8201208FAA002C2D
-:10345000AFA200108F8201243C040001248461206B
-:103460003C050009AFA200148D46000034A50700FA
-:103470000C002B3B03C038218F4202EC2442000198
-:10348000AF4202EC8F4202EC8F4200043042000156
-:10349000104000333C02040002C210241040001708
-:1034A00000000000934205C08F4402508F45025433
-:1034B0008F4301B43442002014A30006A34205C088
-:1034C0008F4202708F4302748F4401B81064000869
-:1034D000000000008F4202508F430254934405C005
-:1034E0008F4602708F470274100000163884004027
-:1034F000934205C010000048304200BF934205C00F
-:103500008F4402508F4502548F4301B4304200BFB4
-:1035100014A30006A34205C08F4202708F430274B9
-:103520008F4401B81064000B000000008F4202506D
-:103530008F430254934405C08F4602708F47027434
-:1035400038840020AF4301B4AF4701B81000003306
-:10355000A34405C0934205C01000002F3442002050
-:10356000934205C08F4300D434420020A34205C0DB
-:103570002462000110000023286300338F4200E41E
-:103580008F4300E024420001AF4200E40043102AD0
-:1035900014400006240300018F4200E81443000297
-:1035A000AF4000E424030004AF4300E88F4200046E
-:1035B000304200011040000D3C02040002C2102401
-:1035C0001040000700000000934205C03442004054
-:1035D000A34205C0934205C01000000F304200DF37
-:1035E000934205C01000000C34420060934205C0B5
-:1035F0008F4300D434420020A34205C0246200015E
-:10360000286300FB14600005AF4200D4934205C05C
-:10361000AF4000D438420040A34205C0934205C0E9
-:103620008F4300E83042007FA34205C0240200011E
-:103630001462000500000000934405C0000421024C
-:1036400010000003348400F0934405C03484000F5C
-:103650000C005640000000002402FF7F0282A024DC
-:103660008FBF00488FBE00448FB500408FB3003C31
-:103670008FB200388FB100348FB0003003E0000803
-:1036800027BD005003E000080000000027BDFFB088
-:10369000274401C026E30028246504000065102BA0
-:1036A000AFBF0048AFBE0044AFB50040AFB3003C71
-:1036B000AFB20038AFB1003410400007AFB00030F7
-:1036C0008C820000AC620000246300040065102BB3
-:1036D0001440FFFB248400048C020080AEE200440E
-:1036E0008C0200C0AEE200408C020084AEE20030EA
-:1036F0008C020084AEE2023C8C020088AEE2024002
-:103700008C02008CAEE202448C020090AEE20248D1
-:103710008C020094AEE2024C8C020098AEE20250A1
-:103720008C02009CAEE202548C0200A0AEE2025871
-:103730008C0200A4AEE2025C8C0200A8AEE2026041
-:103740008C0200ACAEE202648C0200B0AEE2026811
-:103750008C0200B4AEE2026C8C0200B8AEE20270E1
-:103760008C0200BC24040001AEE20274AEE000341E
-:1037700000041080005710218EE300348C42023C7C
-:1037800024840001006218212C82000FAEE3003473
-:103790001440FFF8000410808C0200CCAEE2004818
-:1037A0008C0200D0AEE2004C8C0200E0AEE201F8E8
-:1037B0008C0200E4AEE201FC8C0200E8AEE2020002
-:1037C0008C0200ECAEE202048C0200F0AEE20208D1
-:1037D0008EE400C08EE500C48C0200FC0045102B76
-:1037E0001040000B000000008EE200C08EE300C419
-:1037F0002404000124050000006518210065302B19
-:103800000044102100461021AEE200C0AEE300C427
-:103810008C0200FC8EE400C08EE500C42408FFFF8B
-:1038200024090000004018210000102100882024F5
-:1038300000A928240082202500A32825AEE400C08A
-:10384000AEE500C48EE400D08EE500D48C0200F416
-:103850000045102B1040000B000000008EE200D04D
-:103860008EE300D424040001240500000065182123
-:103870000065302B0044102100461021AEE200D03C
-:10388000AEE300D48C0200F48EE400D08EE500D4C8
-:1038900000401821000010210088202400A92824BD
-:1038A0000082202500A32825AEE400D0AEE500D498
-:1038B0008EE400C88EE500CC8C0200F80045102B89
-:1038C0001040000B000000008EE200C88EE300CC28
-:1038D0002404000124050000006518210065302B38
-:1038E0000044102100461021AEE200C8AEE300CC37
-:1038F0008C0200F88EE400C88EE500CC0040182150
-:10390000000010210088202400A9282400822025FE
-:1039100000A3282524020008AEE400C8AEE500CCD0
-:10392000AFA20010AFA000148F42000C8C0402085C
-:103930008C05020CAFA200188F42010C26E600286D
-:103940000040F80924070400104000F03C02040085
-:10395000AFA20020934205C6104000890000182144
-:103960008F5E001827AA0020240200FF13C2000265
-:10397000AFAA002C27C300018C020228006090210E
-:103980001642000E001E38C08F42033C2442000144
-:10399000AF42033C8F42033C8C0202283C040001EE
-:1039A0002484610C3C050009AFA00014AFA20010F4
-:1039B0008FA600201000006B34A5050000F7102131
-:1039C0008FA300208FA40024AC4304C0AC4404C4E3
-:1039D0008F8300548F820054247003E80202102366
-:1039E0002C4203E91040001B0000982100E08821D0
-:1039F000263504C08F4401788F45017C02201821B0
-:103A0000240A0004AFAA0010AFB200148F48000CC3
-:103A10000000102102F53021AFA800188F48010CDA
-:103A20002407000800A3282100A3482B008220219E
-:103A30000100F809008920215440000624130001E8
-:103A40008F820054020210232C4203E91440FFE944
-:103A500000000000326200FF54400017AF5200180F
-:103A60008F42037824420001AF4203788F420378EB
-:103A70008F8201208FAA002CAFA200108F82012418
-:103A80003C040001248461183C050009AFA2001425
-:103A90008D4600001000003334A506008F42030855
-:103AA0002413000124420001AF4203088F4203089F
-:103AB0001000001C326200FF8F8300548F8200547C
-:103AC000247003E8020210232C4203E91040001482
-:103AD00000009821241100108F42000C8F440160D7
-:103AE0008F4501648F860120AFB10010AFB2001482
-:103AF000AFA200188F42010C240700080040F8090B
-:103B000024C6001C1440FFE5000000008F82005412
-:103B1000020210232C4203E91440FFEF00000000D2
-:103B2000326200FF54400012240200018F420378E9
-:103B300024420001AF4203788F4203788F82012034
-:103B40008FAA002CAFA200108F8201243C04000138
-:103B5000248461203C050009AFA200148D460000BA
-:103B600034A507000C002B3B03C0382100001021B6
-:103B70001440005B240200011000006500000000FA
-:103B80008F510018240200FF122200020000802141
-:103B9000263000018C0202281602000E001130C0EF
-:103BA0008F42033C24420001AF42033C8F42033C5E
-:103BB0008C0202283C040001248460F43C050009C6
-:103BC000AFA00014AFA200108FA600201000003F8D
-:103BD00034A5010000D710218FA300208FA400245A
-:103BE000AC4304C0AC4404C400C018218F44017825
-:103BF0008F45017C0000102124070004AFA70010AE
-:103C0000AFB000148F48000C24C604C002E6302177
-:103C1000AFA800188F48010C2407000800A3282132
-:103C200000A3482B008220210100F80900892021EF
-:103C30001440000B240700088F820120AFA200105F
-:103C40008F8201243C040001248460FC3C050009AF
-:103C5000AFA200148FA600201000001C34A50200A3
-:103C60008F4401608F4501648F43000CAF500018F2
-:103C70008F86012024020010AFA20010AFB0001404
-:103C8000AFA300188F42010C0040F80924C6001CA5
-:103C900054400011240200018F42034024420001DD
-:103CA000AF4203408F4203408F820120AFA2001039
-:103CB0008F8201243C040001248461043C05000936
-:103CC000AFA200148FA6002034A503000C002B3BEC
-:103CD00002203821000010211040000D24020001B4
-:103CE0008F4202E8A34005C6AF4001B02442000164
-:103CF000AF4202E88F4202E88EE201502442000106
-:103D0000AEE20150100000038EE2015024020001D7
-:103D1000A34205C68FBF00488FBE00448FB5004048
-:103D20008FB3003C8FB200388FB100348FB00030B9
-:103D300003E0000827BD005027BDFFD8AFBF00201B
-:103D40008F8200B030420004104000680000000084
-:103D50008F4301288F8201041462000500000000D7
-:103D60008F4301308F8200B4106200060000000013
-:103D70008F820104AF4201288F8200B41000005BE3
-:103D8000AF4201308F8200B03C030080004310241A
-:103D90001040000D000000008F82011C3442000220
-:103DA000AF82011C8F8200B02403FFFB004310246C
-:103DB000AF8200B08F82011C2403FFFD004310245A
-:103DC0001000004AAF82011C8F4301288F8201043A
-:103DD00014620005000000008F4301308F8200B4A0
-:103DE00010620010000000008F820104AF42012821
-:103DF0008F8200B48F430128AF420130AFA300107F
-:103E00008F4201303C04000124846144AFA20014BD
-:103E10008F86011C8F8700B03C0500051000003123
-:103E200034A509008F420128AFA200108F42013053
-:103E30003C04000124846150AFA200148F86011C51
-:103E40008F8700B03C0500050C002B3B34A510000B
-:103E50008F82011C34420002AF82011C8F83010457
-:103E60008F8200B034420001AF8200B0240200080B
-:103E7000AF830104AFA20010AFA000148F42000C6A
-:103E80008C0402088C05020CAFA200188F42010CB2
-:103E900026E600280040F809240704008F82011C50
-:103EA0002403FFFD00431024AF82011C8EE201DCDD
-:103EB00024420001AEE201DC8EE201DC8F420128E7
-:103EC000AFA200108F4201303C0400012484615CE9
-:103ED000AFA200148F86011C8F8700B03C0500053F
-:103EE00034A511000C002B3B000000008F8200A0C5
-:103EF0003042000410400069000000008F43012C94
-:103F00008F82012414620005000000008F430134F9
-:103F10008F8200A410620006000000008F8201243E
-:103F2000AF42012C8F8200A41000005CAF4201342C
-:103F30008F8200A03C030080004310241040000D3D
-:103F4000000000008F82011C34420002AF82011C7D
-:103F50008F8200A02403FFFB00431024AF8200A047
-:103F60008F82011C2403FFFD004310241000004B2E
-:103F7000AF82011C8F43012C8F8201241462000543
-:103F8000000000008F4301348F8200A410620010F3
-:103F9000000000008F820124AF42012C8F8200A418
-:103FA0008F43012CAF420134AFA300108F42013484
-:103FB0003C04000124846168AFA200148F86011CB8
-:103FC0008F8700A03C0500051000003234A51200C8
-:103FD0008F42012CAFA200108F4201343C0400013B
-:103FE00024846174AFA200148F86011C8F8700A007
-:103FF0003C0500050C002B3B34A513008F82011CEF
-:1040000034420002AF82011C8F8301248F8200A002
-:1040100034420001AF8200A024020080AF8301245B
-:10402000AFA20010AFA000148F4200148C0402084D
-:104030008C05020CAFA200188F4201083C0600015B
-:1040400024C66ED80040F809240700048F82011CA2
-:104050002403FFFD00431024AF82011C8EE201DC2B
-:1040600024420001AEE201DC8EE201DC8F42012C31
-:10407000AFA200108F4201343C040001248461800F
-:10408000AFA200148F86011C8F8700A03C0500059D
-:1040900034A514000C002B3B000000008FBF002053
-:1040A00003E0000827BD00283C0810002407000199
-:1040B0003C0600803C0501008F82007000481024FF
-:1040C0001040FFFD000000008F82005424420005D4
-:1040D000AF8200788C040234108000160000182192
-:1040E0003C020001005710218C4240E824420005A8
-:1040F0003C01000100370821AC2240E83C020001ED
-:10410000005710218C4240E80044102B1440000955
-:10411000000000003C0300803C0100010037082142
-:10412000AC2040E83C010001003708211000000BE2
-:10413000A02740F03C02000100571021904240F0BF
-:1041400054400006006618253C020001005710216B
-:10415000904240F154400001006618258C04023062
-:1041600010800013000000003C02000100571021E5
-:104170008C4240EC244200053C010001003708213C
-:10418000AC2240EC3C020001005710218C4240EC74
-:104190000044102B14400006000000003C01000108
-:1041A00000370821AC2040EC1000000600651825FF
-:1041B0003C02000100571021904240F2544000019F
-:1041C000006518251060FFBC000000008F42000051
-:1041D0001040000700000000AF80004C8F82004CB0
-:1041E0001040FFFD0000000010000005000000006E
-:1041F000AF8000488F8200481040FFFD00000000A3
-:104200008F82006000431025AF8200608F42000063
-:1042100010400003000000001000FFA7AF80004C1A
-:104220001000FFA5AF80004803E000080000000078
-:1042300000000000000000000000000027BDFFE0BB
-:10424000AFBF00188F86006430C200041040002504
-:10425000240400048C020114AF420020AF840064E7
-:104260008F4202FC24420001AF4202FC8F4202FC5A
-:104270008F820064304200041440000500000000FA
-:104280008C0301148F4200201462FFF20000000032
-:104290008F420000104000078F43003CAF80004C6D
-:1042A0008F82004C1040FFFD000000001000000550
-:1042B00000000000AF8000488F8200481040FFFDE2
-:1042C000000000008F82006000431025AF82006074
-:1042D0008F42000010400073000000001000006FCB
-:1042E0000000000030C20008104000202404000834
-:1042F0008C02011CAF420048AF8400648F4202A8C8
-:1043000024420001AF4202A88F4202A88F820064BB
-:104310003042000814400005000000008C03011C1E
-:104320008F4200481462FFF2000000008F4200003C
-:104330001040000700000000AF80004C8F82004C4E
-:104340001040FFFD0000000010000005000000000C
-:10435000AF8000488F8200481040FFFD0000000041
-:104360008F8200601000FFD93442020030C200206A
-:1043700010400023240400208C02012CAF4200686E
-:10438000AF8400648F4202D824420001AF4202D8B9
-:104390008F4202D88F820064304200201440000512
-:1043A00032C240008C03012C8F4200681462FFF27D
-:1043B00032C24000144000023C02000102C2B0259B
-:1043C0008F4200001040000700000000AF80004C4A
-:1043D0008F82004C1040FFFD00000000100000051F
-:1043E00000000000AF8000488F8200481040FFFDB1
-:1043F000000000008F8200601000FFB4344208000B
-:1044000030C2001010400029240400108C02012446
-:10441000AF420058AF8400648F4202D424420001AE
-:10442000AF4202D48F4202D48F8200643042001027
-:104430001440000532C220008C0301248F42005832
-:104440001462FFF232C220005040000136D68000D4
-:104450008F4200001040000700000000AF80004CB9
-:104460008F82004C1040FFFD00000000100000058E
-:1044700000000000AF8000488F8200481040FFFD20
-:10448000000000008F82006034420100AF820060B3
-:104490008F42000010400003000000001000006C7C
-:1044A000AF80004C1000006AAF80004830C20001AD
-:1044B0001040000424020001AF8200641000006478
-:1044C0000000000030C200021440000B3C05000355
-:1044D0003C0400012484624434A505000000382116
-:1044E000AFA000100C002B3BAFA000142402FFC0B3
-:1044F00010000057AF8200648C05022C8C02010C66
-:1045000010A20048000510808C46030024A2000180
-:104510003045003F24020003AC05022C00061E02B9
-:1045200010620005240200101062001D30C20FFF4F
-:1045300010000039000000008F4302A88F440000E3
-:1045400030C20FFFAF42004824630001AF4302A80E
-:10455000108000078F4202A8AF80004C8F82004C71
-:104560001040FFFD000000001000000500000000EA
-:10457000AF8000488F8200481040FFFD000000001F
-:104580008F82006034420200AF8200608F420000E0
-:104590001040001F000000001000001B0000000081
-:1045A000AF42005832C220005040000136D6800091
-:1045B0008F4202D48F43000024420001AF4202D454
-:1045C000106000078F4202D4AF80004C8F82004CF5
-:1045D0001040FFFD0000000010000005000000007A
-:1045E000AF8000488F8200481040FFFD00000000AF
-:1045F0008F82006034420100AF8200608F42000071
-:10460000104000030000000010000006AF80004CC6
-:1046100010000004AF8000480C00219600C020214B
-:10462000004028218C02010C14A200022402000286
-:10463000AF8200648F8200643042000214400004A4
-:10464000000000008C02010C14A2FFAC000000006E
-:104650008FBF001803E0000827BD002003E000081A
-:104660000000000027BDFFA0AFB000400080802107
-:10467000001016022442FFFF304300FF2C6200139B
-:10468000AFBF0058AFBE0054AFB50050AFB3004C41
-:10469000AFB20048AFB10044104001F3AFA5003401
-:1046A000000310803C010001002208218C22628856
-:1046B00000400008000000000010130230440FFF0B
-:1046C0002402000110820005240200021082000C66
-:1046D0002402FFFE100000243C0500038F43000469
-:1046E0003C0200018C426F04AF440200AF4402045C
-:1046F0003C0400018C846E801000000934630001CA
-:104700008F430004AF440200AF4402043C040001A4
-:104710008C846E80006218243C0200012442CA2866
-:104720000002110000021182AF4300043C030800A4
-:1047300000431025AC8200388F84005400041442DA
-:1047400000041C820043102100041CC200431023FB
-:1047500000041D020043102100041D4200431023E9
-:1047600010000009AF4202083C040001248462509A
-:1047700034A510000200302100003821AFA0001045
-:104780000C002B3BAFA000148F4202A0244200017A
-:10479000AF4202A01000021F8F4202A027B00028E3
-:1047A00002002021240502100C002BBF2406000863
-:1047B0000C00251802002021100002160000000045
-:1047C0008FAA003427A40028000A1880254200017F
-:1047D0003042003FAFA200348C6503008FAA003442
-:1047E000000210808C430300254200013042003F4C
-:1047F000AFA20034AC02022CAFA500280C00251893
-:10480000AFA3002C100002030000000027B0002816
-:1048100002002021240502100C002BBF24060008F2
-:104820000C00265702002021100001FA00000000B1
-:104830008FAA003427A40028000A1880254200010E
-:104840003042003FAFA200348C6503008FAA0034D1
-:10485000000210808C430300254200013042003FDB
-:10486000AFA20034AC02022CAFA500280C002657E2
-:10487000AFA3002C100001E700000000001013029D
-:1048800030430FFF240200011062000524020002E1
-:104890001062001E3C020002100000333C050003C1
-:1048A0003C03000202C310245440003702C3B02569
-:1048B0008F8202283C01000100370821AC2238D841
-:1048C0008F82022C3C01000100370821AC2238DC29
-:1048D0008F8202303C01000100370821AC2238E011
-:1048E0008F8202343C01000100370821AC2238E4F9
-:1048F0002402FFFFAF820228AF82022CAF82023077
-:10490000AF8202341000002002C3B02502C210247E
-:10491000104000123C02FFFD3C0200010057102134
-:104920008C4238D8AF8202283C0200010057102187
-:104930008C4238DCAF82022C3C020001005710216F
-:104940008C4238E0AF8202303C0200010057102157
-:104950008C4238E4AF8202343C02FFFD3442FFFF58
-:104960001000000902C2B0243C0400012484625CEF
-:1049700034A511000200302100003821AFA0001042
-:104980000C002B3BAFA000148F4202CC244200014C
-:10499000AF4202CC1000019F8F4202CC00101302E4
-:1049A00030450FFF2402000110A20005240200027E
-:1049B00010A2000D3C0408FF100000143C05000389
-:1049C0003C0208FF3442FFFF8F8302203C040004B6
-:1049D00002C4B0250062182434630008AF830220AB
-:1049E00010000012AF4502983484FFF73C03FFFB30
-:1049F0008F8202203463FFFF02C3B02400441024DE
-:104A0000AF82022010000009AF4502983C0400016B
-:104A10002484626834A5120002003021000038218D
-:104A2000AFA000100C002B3BAFA000148F4202BCC3
-:104A300024420001AF4202BC100001768F4202BC4A
-:104A400027840208240502000C002BBF240600085E
-:104A500027440224240502000C002BBF2406000872
-:104A60008F4202C424420001AF4202C41000016917
-:104A70008F4202C40010130230430FFF24020001D2
-:104A8000106200112862000250400005240200025A
-:104A90001060000700000000100000170000000078
-:104AA0001062000F00000000100000130000000062
-:104AB0008C060248000020210C005104240500044B
-:104AC00010000007000000008C06024800002021B2
-:104AD0000C00510424050004100000100000000028
-:104AE0008C06024C000020210C005104240500011A
-:104AF0001000000A000000003C04000124846274DD
-:104B00003C05000334A513000200302100003821C9
-:104B1000AFA000100C002B3BAFA000148F4202C0CE
-:104B200024420001AF4202C01000013A8F4202C08D
-:104B30000C002426000000001000013600000000D8
-:104B400024020001A34205C5241001008F4401A8DE
-:104B50008F4501ACAFB00010AFA000148F4200141D
-:104B6000AFA200188F42010826E600280040F8098D
-:104B7000240704001040FFF500000000100001258C
-:104B8000000000003C03FFFF34637FFF8F42036897
-:104B90008F44036002C3B02400001821AF400058C6
-:104BA000AF40005CAF400060AF40006400441023A1
-:104BB000AF4203683C020900AF400360AFA200208F
-:104BC0008F5E001827AA0020240200FF13C20002F3
-:104BD000AFAA003C27C300018C020228006090218C
-:104BE0001642000E001E38C08F42033C24420001D2
-:104BF000AF42033C8F42033C8C0202283C0400017C
-:104C00002484620C3C050009AFA00014AFA2001080
-:104C10008FA600201000006B34A5050000F71021BE
-:104C20008FA300208FA40024AC4304C0AC4404C470
-:104C30008F8300548F820054247003E802021023F3
-:104C40002C4203E91040001B0000982100E088215D
-:104C5000263504C08F4401788F45017C022018213D
-:104C6000240A0004AFAA0010AFB200148F48000C51
-:104C70000000102102F53021AFA800188F48010C68
-:104C80002407000800A3282100A3482B008220212C
-:104C90000100F80900892021544000062413000176
-:104CA0008F820054020210232C4203E91440FFE9D2
-:104CB00000000000326200FF54400017AF5200189D
-:104CC0008F42037824420001AF4203788F42037879
-:104CD0008F8201208FAA003CAFA200108F82012496
-:104CE0003C040001248462183C050009AFA20014B2
-:104CF0008D4600001000003334A506008F420308E3
-:104D00002413000124420001AF4203088F4203082C
-:104D10001000001C326200FF8F8300548F82005409
-:104D2000247003E8020210232C4203E9104000140F
-:104D300000009821241100108F42000C8F44016064
-:104D40008F4501648F860120AFB10010AFB200140F
-:104D5000AFA200188F42010C240700080040F80998
-:104D600024C6001C1440FFE5000000008F820054A0
-:104D7000020210232C4203E91440FFEF0000000060
-:104D8000326200FF14400011000000008F420378DF
-:104D900024420001AF4203788F4203788F820120C2
-:104DA0008FAA003CAFA200108F8201243C040001B6
-:104DB000248462203C050009AFA200148D46000047
-:104DC00034A507000C002B3B03C038218F4202B0F2
-:104DD00024420001AF4202B08F4202B08F4202F87B
-:104DE00024420001AF4202F81000008A8F4202F80C
-:104DF0008C02025C27440224AF4201F08C02026064
-:104E000024050200240600080C002BBFAF4201F865
-:104E10008F82022030420008144000022402000168
-:104E200024020002AF4202988F4202AC24420001E9
-:104E3000AF4202AC100000778F4202AC3C0200FF90
-:104E40003442FFFF0202182432C2018014400006DF
-:104E50003402FFFB0043102B14400003000000004D
-:104E60001000006CAF4300BC3C040001248462804D
-:104E70003C05000334A51500020030210000382154
-:104E8000AFA000100C002B3BAFA000143C020700A9
-:104E90003442100000101E0200621825AFA300204B
-:104EA0008F510018240200FF12220002000080210E
-:104EB000263000018C0202281602000E001130C0BC
-:104EC0008F42033C24420001AF42033C8F42033C2B
-:104ED0008C0202283C040001248461F43C05000992
-:104EE000AFA00014AFA200108FA600201000003F5A
-:104EF00034A5010000D710218FA300208FA4002427
-:104F0000AC4304C0AC4404C400C018218F440178F1
-:104F10008F45017C0000102124070004AFA700107A
-:104F2000AFB000148F48000C24C604C002E6302144
-:104F3000AFA800188F48010C2407000800A32821FF
-:104F400000A3482B008220210100F80900892021BC
-:104F50001440000B240700088F820120AFA200102C
-:104F60008F8201243C040001248461FC3C0500097B
-:104F7000AFA200148FA600201000001C34A5020070
-:104F80008F4401608F4501648F43000CAF500018BF
-:104F90008F86012024020010AFA20010AFB00014D1
-:104FA000AFA300188F42010C0040F80924C6001C72
-:104FB00014400010000000008F4203402442000112
-:104FC000AF4203408F4203408F820120AFA2001006
-:104FD0008F8201243C040001248462043C05000902
-:104FE000AFA200148FA6002034A503000C002B3BB9
-:104FF000022038218F4202E024420001AF4202E049
-:105000008F4202E08F4202F024420001AF4202F0E0
-:105010008F4202F08FA200348FBF00588FBE005421
-:105020008FB500508FB3004C8FB200488FB1004451
-:105030008FB0004003E0000827BD006027BDFFF8E7
-:105040002408FFFF10A00014000048213C0AEDB81E
-:10505000354A83209087000024840001000030211D
-:1050600001071026304200011040000200081842DB
-:10507000006A18260060402124C600012CC20008E6
-:105080001440FFF700073842252900010125102BA5
-:105090001440FFF0000000000100102103E00008B0
-:1050A00027BD000827BDFFB0AFBF0048AFBE00441A
-:1050B000AFB50040AFB3003CAFB20038AFB1003481
-:1050C000AFB000308F870220AFA700248F87020087
-:1050D000AFA7002C8F8202203C0308FF3463FFFF40
-:1050E0000043102434420004AF8202208F82020069
-:1050F0003C03C0FF3463FFFF00431024344200042C
-:10510000AF8202008F5303588F55035C8F5E03609C
-:105110008F470364AFA700148F470368AFA7001C35
-:105120008F4202D0274401C024420001AF4202D086
-:105130008F5002D08F5102048F5202000C002BA816
-:1051400024050400AF530358AF55035CAF5E036002
-:105150008FA70014AF4703648FA7001CAF470368F5
-:10516000AF5002D0AF510204AF5202008C02025C79
-:1051700027440224AF4201F08C02026024050200A1
-:1051800024060008AF4201F8240200060C002BBFE1
-:10519000AF4201F43C023B9A3442CA00AF4201FCE8
-:1051A000240203E82404000224030001AF42029415
-:1051B000AF440290AF43029C8F820220304200082D
-:1051C0001040000400000000AF43029810000003EC
-:1051D00000003021AF440298000030213C03000160
-:1051E0000066182190636D000346102124C600015B
-:1051F000A043022C2CC2000F1440FFF803461821D4
-:1052000024C600018F820040240400802405008011
-:105210000002170224420030A062022C0346102133
-:105220000C002BA8A040022C8FA7002430E2000421
-:1052300014400006000000008F8202203C0308FF9B
-:105240003463FFFB00431024AF8202208FA7002CA1
-:1052500030E2000414400006000000008F820200CB
-:105260003C03C0FF3463FFFB00431024AF82020005
-:105270008FBF00488FBE00448FB500408FB3003C05
-:105280008FB200388FB100348FB0003003E00008D7
-:1052900027BD00500000000000000000AF400104E6
-:1052A00024040001000410C002E21821248200013D
-:1052B0003C01000100230821A42234D00040202119
-:1052C0002C8200801440FFF8000410C0240200016A
-:1052D0003C01000100370821A42038D0AF42010072
-:1052E000AF800228AF80022CAF800230AF80023442
-:1052F00003E000080000000027BDFFE8AFBF001476
-:10530000AFB000108F420104284200051040002673
-:10531000008080213C0200018F430104344230D0E0
-:1053200002E22021000318C00062182102E31821C4
-:105330000083102B1040001500001021960700007C
-:1053400024840006246600069482FFFC14470009AA
-:10535000000028219483FFFE9602000214620006DA
-:1053600000A0102194820000960300040043102640
-:105370002C45000100A010211440000924840008DD
-:105380000086102B1440FFF000001021304200FF77
-:1053900014400030240200011000002E00001021F3
-:1053A0001000FFFA24020001020020210C00240C4E
-:1053B000240500063042007F000218C002E31021DD
-:1053C0003C01000100220821942230D01040FFF25D
-:1053D00002E310213C06000100C2302194C630D007
-:1053E00010C0FFED3C080001350834D296070000DC
-:1053F000000610C000572021008820219482000060
-:10540000144700090000282194830002960200023C
-:105410001462000600A01021948200049603000488
-:10542000004310262C45000100A010211440000765
-:10543000000610C002E210213C06000100C230212B
-:1054400094C634D014C0FFEB000610C010C0FFD2C9
-:10545000240200018FBF00148FB0001003E0000889
-:1054600027BD001803E000080000000027BDFFB0C2
-:1054700000801021AFB00030245000020200202133
-:1054800024050006AFB1003400408821AFBF0048BA
-:10549000AFBE0044AFB50040AFB3003C0C00240CDD
-:1054A000AFB200383047007F000710C002E2102181
-:1054B0003C05000100A2282194A530D050A0001C7A
-:1054C00000A030213C090001352934D29628000281
-:1054D000000510C00057202100892021948200007F
-:1054E0001448000900003021948300029602000253
-:1054F0001462000600C01021948200049603000488
-:10550000004310262C46000100C010211440000763
-:10551000000510C002E210213C05000100A2282174
-:1055200094A534D014A0FFEB000510C000A03021DA
-:1055300010C00014000610C0005718213C010001E3
-:10554000002308218C2334D000571021AFA3001072
-:105550003C010001002208218C2234D43C040001CB
-:1055600024846394AFA200148E2600008E270004CA
-:105570003C0500040C002B3B34A504001000006324
-:105580003C0208008F45010010A00006000510C075
-:1055900002E210213C01000100220821942234D0B3
-:1055A000AF42010000A0302114C00011000628C045
-:1055B000000710C002E21021AFA700103C0100015B
-:1055C00000220821942230D03C040001248463A0EE
-:1055D000AFA200148E2600008E2700043C050004B4
-:1055E0000C002B3B34A50500100000483C020800CD
-:1055F00000B718213C02000196040000344234D266
-:1056000000621821A46400008E020002000720C07E
-:10561000AC62000202E410213C0300010062182188
-:10562000946330D002E510213C01000100220821E2
-:10563000A42334D002E410213C01000100220821FF
-:10564000A42630D08F420104244200012842008069
-:105650001040000F3C0200028F4201043C04000194
-:10566000348430D296030000000210C0005710218D
-:1056700000441021A44300008E030002AC4300024A
-:105680008F42010424420001AF4201043C020002A7
-:1056900002C2102410400011000721423C03000107
-:1056A000346338D824020003004410230002108021
-:1056B0000057202100832021005710210043102192
-:1056C00030E5001F8C4300002402000100A21004FA
-:1056D000006218251000000CAC83000024020003B7
-:1056E0000044102300021080005C2821005C10217F
-:1056F00030E4001F8C4302282402000100821004C1
-:1057000000621825ACA302283C02080034421000B5
-:1057100000001821AFA200208F5E001827AA0020E9
-:10572000240200FF13C20002AFAA002C27C300010D
-:105730008C020228006090211642000E001E38C024
-:105740008F42033C24420001AF42033C8F42033CA2
-:105750008C0202283C0400012484635C3C0500099F
-:10576000AFA00014AFA200108FA600201000006BA5
-:1057700034A5050000F710218FA300208FA400247A
-:10578000AC4304C0AC4404C48F8300548F820054E3
-:10579000247003E8020210232C4203E91040001B8E
-:1057A0000000982100E08821263504C08F4401784C
-:1057B0008F45017C02201821240A0004AFAA0010A2
-:1057C000AFB200148F48000C0000102102F5302108
-:1057D000AFA800188F48010C2407000800A3282157
-:1057E00000A3482B008220210100F8090089202114
-:1057F00054400006241300018F820054020210233B
-:105800002C4203E91440FFE900000000326200FF6F
-:1058100054400017AF5200188F4203782442000111
-:10582000AF4203788F4203788F8201208FAA002C29
-:10583000AFA200108F8201243C040001248463681D
-:105840003C050009AFA200148D4600001000003393
-:1058500034A506008F4203082413000124420001EE
-:10586000AF4203088F4203081000001C326200FFA1
-:105870008F8300548F820054247003E802021023A7
-:105880002C4203E91040001400009821241100105C
-:105890008F42000C8F4401608F4501648F86012088
-:1058A000AFB10010AFB20014AFA200188F42010CCC
-:1058B000240700080040F80924C6001C1440FFE536
-:1058C000000000008F820054020210232C4203E9E2
-:1058D0001440FFEF00000000326200FF144000118E
-:1058E000000000008F42037824420001AF42037899
-:1058F0008F4203788F8201208FAA002CAFA2001064
-:105900008F8201243C040001248463703C0500095B
-:10591000AFA200148D46000034A507000C002B3BFD
-:1059200003C038218F4202B424420001AF4202B4C6
-:105930008F4202B48F4202F424420001AF4202F4CB
-:105940008F4202F48FBF00488FBE00448FB50040E5
-:105950008FB3003C8FB200388FB100348FB000306D
-:1059600003E0000827BD005027BDFFA000801021E4
-:10597000AFB00040245000020200202124050006A0
-:10598000AFB1004400408821AFBF0058AFBE005403
-:10599000AFB50050AFB3004C0C00240CAFB20048C0
-:1059A0003048007F000810C002E210213C060001D0
-:1059B00000C2302194C630D010C0001C0000382135
-:1059C0003C0A0001354A34D296290002000610C074
-:1059D00000572021008A20219482000014490009E8
-:1059E000000028219483000296020002146200063F
-:1059F00000A01021948200049603000400431026A6
-:105A00002C45000100A0102114400008000610C021
-:105A100000C0382102E210213C06000100C2302102
-:105A200094C634D014C0FFEA000610C014C00011A0
-:105A3000AFA70028000810C002E21021AFA8001094
-:105A40003C01000100220821942230D03C040001D6
-:105A5000248463ACAFA200148E2600008E270004BD
-:105A60003C0500040C002B3B34A509001000007518
-:105A70003C02080010E0000C000610C002E21021F9
-:105A80003C03000100621821946334D0000710C069
-:105A900002E210213C01000100220821A42334D09D
-:105AA0001000000B3C04000102E210213C03000145
-:105AB00000621821946334D0000810C002E2102163
-:105AC0003C01000100220821A42330D03C04000145
-:105AD000348430D08F430100000610C002E2102150
-:105AE0003C01000100220821A42334D08F4201048C
-:105AF00002E438210000282118400029AF460100A7
-:105B000024E6000694C3FFFC96020000146200091C
-:105B10000000202194C3FFFE9602000214620006DA
-:105B20000080102194C20000960300040043102658
-:105B30002C440001008010215040001424A50001D5
-:105B40008F4201042442FFFF00A2102A1040000BE4
-:105B500024E40004948200068C830008A482FFFEE3
-:105B6000AC8300008F42010424A500012442FFFF02
-:105B700000A2102A1440FFF7248400088F42010479
-:105B80002442FFFF10000006AF4201048F420104CF
-:105B900024C6000800A2102A1440FFDA24E70008F7
-:105BA000000810C002E210213C010001002208217F
-:105BB000942230D0144000233C0208003C02000232
-:105BC00002C2102410400012000821423C030001D0
-:105BD000346338D8240200030044102300021080EC
-:105BE000005720210083202100571021004310215D
-:105BF0003105001F240300018C42000000A318049B
-:105C000000031827004310241000000DAC82000090
-:105C1000240200030044102300021080005C2821AD
-:105C2000005C10213104001F240300018C42022873
-:105C3000008318040003182700431024ACA2022894
-:105C40003C0208003442200000001821AFA20020CE
-:105C50008F5E001827AB0020240200FF13C2000251
-:105C6000AFAB003427C300018C02022800609021F2
-:105C70001642000E001E38C08F42033C2442000131
-:105C8000AF42033C8F42033C8C0202283C040001DB
-:105C90002484635C3C050009AFA00014AFA200108F
-:105CA0008FA600201000006B34A5050000F710211E
-:105CB0008FA300208FA40024AC4304C0AC4404C4D0
-:105CC0008F8300548F820054247003E80202102353
-:105CD0002C4203E91040001B0000982100E08821BD
-:105CE000263504C08F4401788F45017C022018219D
-:105CF000240B0004AFAB0010AFB200148F48000CAF
-:105D00000000102102F53021AFA800188F48010CC7
-:105D10002407000800A3282100A3482B008220218B
-:105D20000100F809008920215440000624130001D5
-:105D30008F820054020210232C4203E91440FFE931
-:105D400000000000326200FF54400017AF520018FC
-:105D50008F42037824420001AF4203788F420378D8
-:105D60008F8201208FAB0034AFA200108F820124FC
-:105D70003C040001248463683C050009AFA20014C0
-:105D80008D6600001000003334A506008F42030822
-:105D90002413000124420001AF4203088F4203088C
-:105DA0001000001C326200FF8F8300548F82005469
-:105DB000247003E8020210232C4203E9104000146F
-:105DC00000009821241100108F42000C8F440160C4
-:105DD0008F4501648F860120AFB10010AFB200146F
-:105DE000AFA200188F42010C240700080040F809F8
-:105DF00024C6001C1440FFE5000000008F82005400
-:105E0000020210232C4203E91440FFEF00000000BF
-:105E1000326200FF14400011000000008F4203783E
-:105E200024420001AF4203788F4203788F82012021
-:105E30008FAB0034AFA200108F8201243C0400011C
-:105E4000248463703C050009AFA200148D66000035
-:105E500034A507000C002B3B03C038218F4202B849
-:105E600024420001AF4202B88F4202B88F4202F4CE
-:105E700024420001AF4202F48F4202F48FBF005867
-:105E80008FBE00548FB500508FB3004C8FB20048C6
-:105E90008FB100448FB0004003E0000827BD0060D0
-:105EA00000000000000000000000000027BDFFE02F
-:105EB00027644000AFBF00180C002BA82405100079
-:105EC0003C03000134632CC03C04000134842EC820
-:105ED00024020020AF82011C02E31021AF800100E8
-:105EE000AF800104AF800108AF800110AF800114C2
-:105EF000AF800118AF800120AF800124AF8001285E
-:105F0000AF800130AF800134AF800138AF4200EC88
-:105F100002E31021AF4200F002E41021AF4200F48E
-:105F200002E41021AF4200F83C02000100571021AA
-:105F3000904240F41440001C3C0500018F82011C7B
-:105F40003C040001248464703C05000134420001DB
-:105F5000AF82011CAFA00010AFA000148F86011CFF
-:105F600034A501000C002B3B000038218C020218E4
-:105F70003042004010400014000000008F82011CDD
-:105F80003C0400012484647C3C050001344200048C
-:105F9000AF82011CAFA00010AFA000148F86011CBF
-:105FA0001000000734A502003C040001248464842E
-:105FB000AFA00010AFA000148F86011C34A5030011
-:105FC0000C002B3B000038218FBF001803E00008B5
-:105FD00027BD00208FA900108F83012C8FAA0014E9
-:105FE0008FAB00181060000A27624FE014620002B5
-:105FF00024680020276848008F82012811020004CD
-:10600000000000008F82012415020007000000003C
-:106010008F4303340000102124630001AF43033495
-:10602000100000398F430334AC640000AC650004F9
-:10603000AC660008A467000EAC690018AC6A001CCE
-:10604000AC6B0010AC620014AF8801208F4200FCE2
-:106050008F4400F42442FFFFAF4200FC8C8200001A
-:10606000104900053042FF8F104000193122FF8F88
-:10607000104000183C0200018C8300042C620010C8
-:10608000104000133C02000124630001AC830004B3
-:106090008F4300F8344230C802E2102154620004F9
-:1060A000246200083C02000134422EC802E21021A2
-:1060B00014440015240200018F820128244200208C
-:1060C000AF8201288F8201281000000F24020001F6
-:1060D0003C020001344230C802E210215482000424
-:1060E000248200083C02000134422EC802E2102142
-:1060F0000040202124020001AF4400F4AC890000DC
-:10610000AC8200042402000103E00008000000004B
-:1061100003E00008000000008FA900108F83010C2D
-:106120008FAA00148FAB00181060000A276247E0A6
-:106130001462000224680020276840008F82010852
-:1061400011020004000000008F8201041502000704
-:10615000000000008F430338000010212463000179
-:10616000AF430338100000358F430338AC640000A0
-:10617000AC650004AC660008A467000EAC690018AA
-:10618000AC6A001CAC6B0010AC620014AF8801005C
-:106190008F4400EC8C820000304200061040001951
-:1061A00031220006104000183C0200018C830004DC
-:1061B0002C620010104000133C0200012463000117
-:1061C000AC8300048F4300F034422EC002E2102161
-:1061D00054620004246200083C02000134422CC0D6
-:1061E00002E2102114440015240200018F820108EC
-:1061F00024420020AF8201088F8201081000000FA6
-:10620000240200013C02000134422EC002E21021AF
-:1062100054820004248200083C02000134422CC055
-:1062200002E210210040202124020001AF4400ECD2
-:10623000AC890000AC8200042402000103E00008E5
-:106240000000000003E000080000000027BDFFD8A8
-:106250003C0400012484648C3C050001AFBF002491
-:10626000AFB20020AFB1001CAFB000188F90010496
-:106270008F9100B08F92011C34A525008F82010000
-:106280000240302102203821AFA200100C002B3B2D
-:10629000AFB000148E020008AFA200108E02000CF6
-:1062A0003C04000124846498AFA200148E06000010
-:1062B0008E0700043C0500010C002B3B34A5251083
-:1062C0008E020018AFA200108E02001C3C040001D8
-:1062D000248464A4AFA200148E0600108E0700145C
-:1062E0003C0500010C002B3B34A525203C027F001F
-:1062F000022210243C030800544300163C03020011
-:106300008F82009C3042FFFF144000123C030200C9
-:106310003C040001248464B03C05000234A5F03044
-:10632000000030210000382136420002AF82011CFB
-:1063300036220001AF8200B0AF900104AF92011C81
-:10634000AFA000100C002B3BAFA0001410000024E5
-:106350000000000002C310241040000D022310248E
-:106360001040000B36420002AF82011C36220001B1
-:10637000AF8200B0AF900104AF92011C8F42033096
-:1063800024420001AF420330100000158F42033059
-:106390003C040001248464B8240202A9AFA20010C6
-:1063A000AFA000148F8601443C07000124E764C0BD
-:1063B0000C002B3B3405DEAD8F82011C3442000201
-:1063C000AF82011C8F82022034420004AF8202207F
-:1063D0008F8201403C03000100431025AF82014041
-:1063E0008FBF00248FB200208FB1001C8FB0001827
-:1063F00003E0000827BD002827BDFFD83C040001AA
-:10640000248464E83C050001AFBF0024AFB2002043
-:10641000AFB1001CAFB000188F9001248F9100A085
-:106420008F92011C34A526008F820120024030216A
-:1064300002203821AFA200100C002B3BAFB000149B
-:106440008E020008AFA200108E02000C3C04000176
-:10645000248464F4AFA200148E0600008E070004AA
-:106460003C0500010C002B3B34A526108E020018C1
-:10647000AFA200108E02001C3C04000124846500C1
-:10648000AFA200148E0600108E0700143C05000118
-:106490000C002B3B34A526203C027F000222102456
-:1064A0003C030800544300163C0302008F8200ACFA
-:1064B0003042FFFF144000123C0302003C04000184
-:1064C0002484650C3C05000134A5F0300000302127
-:1064D0000000382136420002AF82011C3622000142
-:1064E000AF8200A0AF900124AF92011CAFA00010BA
-:1064F0000C002B3BAFA00014100000240000000093
-:1065000002C310241040000D022310241040000B81
-:1065100036420002AF82011C36220001AF8200A089
-:10652000AF900124AF92011C8F42032C2442000142
-:10653000AF42032C100000158F42032C3C040001D5
-:10654000248464B8240202E2AFA20010AFA00014B9
-:106550008F8601443C07000124E764C00C002B3BFC
-:106560003405DEAD8F82011C34420002AF82011C73
-:106570008F82022034420004AF8202208F820140C9
-:106580003C03000100431025AF8201408FBF00246F
-:106590008FB200208FB1001C8FB0001803E00008FC
-:1065A00027BD00280000602100005021000030219C
-:1065B0000000282100006821000048210000782107
-:1065C000000070218F8801248F8701041580002E20
-:1065D0008F8B011C11A00014316208008F820120F2
-:1065E00010460029000000003C0400018C846EE489
-:1065F0008CC200008CC30004AC820000AC83000499
-:106600008CC20008AC82000894C2000EA482000E66
-:106610008CC20010240C0001AC8200108CC200144B
-:106620001000001224C600201040001700000000D7
-:106630003C0400018C846EE48D0200008D03000494
-:10664000AC820000AC8300048D020008AC8200081C
-:106650009502000EA482000E8D0200102506002077
-:10666000AC8200108D020014240C000100C018211F
-:10667000AC82001427624FE00043102B544000010D
-:1066800027634800006030211540002F316201006F
-:1066900011200014316280008F8201001045002A11
-:1066A000316201003C0400018C846EE08CA2000089
-:1066B0008CA30004AC820000AC8300048CA2000810
-:1066C000AC82000894A2000EA482000E8CA20010DE
-:1066D000240A0001AC8200108CA2001410000012E9
-:1066E00024A5002010400018316201003C04000184
-:1066F0008C846EE08CE200008CE30004AC8200002D
-:10670000AC8300048CE20008AC82000894E2000E26
-:10671000A482000E8CE2001024E50020AC82001060
-:106720008CE20014240A000100A01821AC8200149D
-:10673000276247E00043102B5440000127634000CC
-:1067400000602821316201005440001D31621000B8
-:1067500011A0000931A20800104000042502002009
-:106760008F8200A8A5E2000025020020AF8201244C
-:106770008F8801240000682111800011316210000F
-:106780003C0400018C846EE48C8200008C83000445
-:10679000AF820080AF8300848C820008AF8200A4A7
-:1067A0009482000EAF8200AC8C8200100000602149
-:1067B000AF8200A08C8D00108C8F0014316210000D
-:1067C0001440FF82000000001120000F3122080059
-:1067D000104000043C0200028F8200B8A5C20000F5
-:1067E0003C020002012210241040000424E2002098
-:1067F0008F8200B4AF8200D424E20020AF82010473
-:106800008F870104000048211140FF700000000044
-:106810003C0400018C846EE08C8200008C830004B8
-:10682000AF820090AF8300948C820008AF8200B4E6
-:106830009482000EAF82009C8C82001000005021D8
-:10684000AF8200B08C8900101000FF608C8E0014A5
-:1068500003E0000800000000000060210000582153
-:106860000000302100002821000068210000502194
-:1068700000007821000070218F8801248F87010497
-:106880003C1801001580002E8F89011C11A00014F6
-:10689000312208008F8201201046002900000000EC
-:1068A0003C0400018C846EE48CC200008CC30004A4
-:1068B000AC820000AC8300048CC20008AC820008EB
-:1068C00094C2000EA482000E8CC20010240C0001A1
-:1068D000AC8200108CC200141000001224C60020EC
-:1068E00010400017000000003C0400018C846EE49E
-:1068F0008D0200008D030004AC820000AC83000414
-:106900008D020008AC8200089502000EA482000EE1
-:106910008D02001025060020AC8200108D020014AC
-:10692000240C000100C01821AC82001427624FE043
-:106930000043102B544000012763480000603021C1
-:106940001560002F31220100114000143122800017
-:106950008F8201001045002A312201003C04000111
-:106960008C846EE08CA200008CA30004AC8200003A
-:10697000AC8300048CA20008AC82000894A2000E34
-:10698000A482000E8CA20010240B0001AC82001027
-:106990008CA200141000001224A500201040001842
-:1069A000312201003C0400018C846EE08CE2000086
-:1069B0008CE30004AC820000AC8300048CE200088D
-:1069C000AC82000894E2000EA482000E8CE200105B
-:1069D00024E50020AC8200108CE20014240B00019E
-:1069E00000A01821AC820014276247E00043102B5E
-:1069F000544000012763400000602821312201003B
-:106A00005440001D3122100011A0000931A20800DD
-:106A100010400004250200208F8200A8A5E200009B
-:106A200025020020AF8201248F8801240000682104
-:106A300011800011312210003C0400018C846EE4AE
-:106A40008C8200008C830004AF820080AF830084BE
-:106A50008C820008AF8200A49482000EAF8200AC4A
-:106A60008C82001000006021AF8200A08C8D00108D
-:106A70008C8F00143122100014400022000000000E
-:106A80001140000F31420800104000043C02000297
-:106A90008F8200B8A5C200003C020002014210240F
-:106AA0001040000424E200208F8200B4AF8200D4A2
-:106AB00024E20020AF8201048F87010400005021EE
-:106AC00011600010000000003C0400018C846EE0A6
-:106AD0008C8200008C830004AF820090AF8300940E
-:106AE0008C820008AF8200B49482000EAF82009CBA
-:106AF0008C82001000005821AF8200B08C8A0010F8
-:106B00008C8E00148F8200703C0310000043102410
-:106B10001040FF5C000000008F82005424420005FA
-:106B2000AF8200788C040234108000160000182117
-:106B30003C020001005710218C4240E8244200052D
-:106B40003C01000100370821AC2240E83C02000172
-:106B5000005710218C4240E80044102B14400009DB
-:106B6000240200013C0300803C01000100370821A1
-:106B7000AC2040E83C010001003708211000000C67
-:106B8000A02240F03C02000100571021904240F04A
-:106B9000144000063C0200803C0200010057102116
-:106BA000904240F1104000023C0200800062182533
-:106BB0008C04023010800013000000003C02000131
-:106BC000005710218C4240EC244200053C0100019A
-:106BD00000370821AC2240EC3C0200010057102194
-:106BE0008C4240EC0044102B1440000600000000D2
-:106BF0003C01000100370821AC2040EC10000006E9
-:106C0000007818253C02000100571021904240F204
-:106C100054400001007818251060FF1A00000000A1
-:106C20008F4200001040000700000000AF80004CC1
-:106C30008F82004C1040FFFD000000001000000596
-:106C400000000000AF8000488F8200481040FFFD28
-:106C5000000000008F82006000431025AF820060BA
-:106C60008F42000010400003000000001000FF05EC
-:106C7000AF80004C1000FF03AF80004803E0000825
-:106C80000000000000000000000000003C020001C5
-:106C90008C426D2827BDFFE8AFBF001414400012DE
-:106CA000AFB000103C10000126106F9002002021B0
-:106CB0000C002BA82405200026021FE03C01000147
-:106CC000AC226EEC3C010001AC226EE8AC0202503A
-:106CD00024022000AC100254AC020258240200012D
-:106CE0003C010001AC226D288FBF00148FB0001052
-:106CF00003E0000827BD00183C0900018D296EEC57
-:106D00008C8200008FA300108FA80014AD22000019
-:106D10008C820004AD250008AD2200048F8200544F
-:106D2000AD260010AD270014AD230018AD28001CBF
-:106D3000AD22000C2529FFE03C02000124426F90A7
-:106D40000122102B10400003000000003C0900014C
-:106D50008D296EE83C0200018C426D10AD220000CE
-:106D60003C0200018C426D103C010001AC296EEC2C
-:106D7000AD220004AC09025003E00008000000004E
-:106D800027BDFFD0AFB000103C1000018E106EEC9C
-:106D90003C0200018C426D10AFB1001400808821CC
-:106DA000AFBE00248FBE00408FA40048AFB20018D1
-:106DB00000A09021AFBF0028AFB50020AFB3001CEA
-:106DC000AE0200003C0200018C426D1000C0982110
-:106DD00000E0A82110800006AE020004260500088D
-:106DE0000C002BB324060018100000052610FFE04D
-:106DF000260400080C002BA8240500182610FFE02C
-:106E00003C03000124636F900203102B1040000329
-:106E1000000000003C1000018E106EE88E22000081
-:106E2000AE0200008E220004AE120008AE02000482
-:106E30008F820054AE130010AE150014AE1E001861
-:106E40008FA80044AE08001CAE02000C2610FFE024
-:106E50000203102B10400003000000003C10000152
-:106E60008E106EE83C0200018C426D10AE020000F4
-:106E70003C0200018C426D103C010001AC306EEC14
-:106E8000AE020004AC1002508FBF00288FBE002459
-:106E90008FB500208FB3001C8FB200188FB1001483
-:106EA0008FB0001003E0000827BD003000851821D6
-:106EB0000083102B1040000600000000AC80000092
-:106EC000248400040083102B5440FFFDAC8000009C
-:106ED00003E000080000000000A6182100A3102B0A
-:106EE00010400007000000008C820000ACA20000EF
-:106EF00024A5000400A3102B1440FFFB24840004ED
-:106F000003E0000800000000008618210083102B19
-:106F100010400007000000008CA20000AC820000BE
-:106F2000248400040083102B1440FFFB24A50004DC
-:106F300003E00008000000000006308000861821F1
-:106F40000083102B1040000600000000AC850000FC
-:106F5000248400040083102B5440FFFDAC85000006
-:106F600003E00008000000000000000026E5002803
-:106F700000A03021274301C08F4D03588F47035C89
-:106F80008F4803608F4903648F4A03688F4B020464
-:106F90008F4C0200246404000064102B1040000891
-:106FA0003C0208FF8CC20000AC62000024630004B5
-:106FB0000064102B1440FFFB24C600043C0208FFB1
-:106FC0003442FFFF3C03C0FFAF4D0358AF47035CA3
-:106FD000AF480360AF490364AF4A0368AF4B020494
-:106FE000AF4C02008F8402203463FFFF8F860200C3
-:106FF000008210243442000400C3182434630004C7
-:10700000AF820220AF8302008CA20214AC02008483
-:107010008CA20218AC0200888CA2021CAC02008C6C
-:107020008CA20220AC0200908CA20224AC0200943C
-:107030008CA20228AC0200988CA2022CAC02009C0C
-:107040008CA20230AC0200A08CA20234AC0200A4DC
-:107050008CA20238AC0200A88CA2023CAC0200ACAC
-:107060008CA20240AC0200B08CA20244AC0200B47C
-:107070008CA20248AC0200B88CA2024CAC0200BC4C
-:107080008CA2001CAC0200808CA20018AC0200C0D4
-:107090008CA20020AC0200CC8CA20024AC0200D058
-:1070A0008CA201D0AC0200E08CA201D4AC0200E4BE
-:1070B0008CA201D8AC0200E88CA201DCAC0200EC8E
-:1070C0008CA201E0AC0200F08CA200988CA3009C82
-:1070D000AC0300FC8CA200A88CA300ACAC0300F4B1
-:1070E0008CA200A08CA300A430840004AC0300F8A0
-:1070F0001480000730C200048F8202203C0308FF86
-:107100003463FFFB00431024AF82022030C200042E
-:1071100014400006000000008F8202003C03C0FF04
-:107120003463FFFB00431024AF8202008F4202DC75
-:10713000A34005C524420001AF4202DC8F4202DCBD
-:1071400003E000080000000027BDFFD8AFBF002407
-:10715000AFB000208F4300248F420020106200381F
-:10716000000000008F4300208F4200240062202393
-:1071700004810003000000008F42004000822021B3
-:107180008F4300308F4200240043102B1440000531
-:10719000000000008F4300408F42002410000005D3
-:1071A000006210238F4200308F43002400431023DD
-:1071B0002442FFFF00406021008C102A544000014F
-:1071C000008060218F4A00248F4900408F480024AE
-:1071D0008F4401808F4501848F4600248F4B001C13
-:1071E00024070001AFA7001000084100010018218A
-:1071F000014C50212529FFFF01498024AFB0001424
-:107200008F4700140000102100063100AFA70018BE
-:1072100000A3282100A3382B0082202100872021F1
-:107220008F420108016630210040F809000C390046
-:1072300054400001AF5000248F4300248F420020AF
-:1072400014620018000000008F4200001040000788
-:1072500000000000AF80004C8F82004C1040FFFD0A
-:10726000000000001000000500000000AF80004892
-:107270008F8200481040FFFD000000008F820060F8
-:107280002403FFEF00431024AF8200608F42000010
-:10729000104000030000000010000002AF80004C0E
-:1072A000AF8000488FBF00248FB0002003E00008AB
-:1072B00027BD002803E000080000000027BDFFC034
-:1072C00032C20020AFBF0038AFB30034AFB20030DD
-:1072D000AFB1002C10400004AFB000288F5300283D
-:1072E00010000002000000008F5300208F42003089
-:1072F000105300EB000211008F43001C006280213C
-:107300008E0400008E050004961200088F42009043
-:107310009611000A3246FFFF0046102A104000175F
-:10732000000000008F8200D88F4300980043102394
-:107330002442DCBEAF4200908F4200902842DCBF66
-:1073400010400005000000008F4200908F43014470
-:1073500000431021AF4200908F4200900046102A57
-:1073600010400006000000008F4203482442000144
-:10737000AF420348100000E18F4203488F8200FCB7
-:1073800014400006000000008F4203442442000124
-:10739000AF420344100000D98F420344934205C218
-:1073A0001040000B32C200081040000832220200D8
-:1073B000104000063C0340009602000EAF4300ACB4
-:1073C0000002140010000002AF4200B0AF4000AC59
-:1073D000322200041040007F3222080010400003D7
-:1073E0003247FFFF100000022402002024020004A4
-:1073F000AFA200108F420030AFA200148F420010E5
-:107400003C03000200431025AFA200188F460098ED
-:107410008F4201080040F80900000000104000B74A
-:10742000000000008F42009C8F4300940242102114
-:10743000AF42009CAE03000C8F4200AC104000082D
-:107440003C0340008F42009400431025AFA200206F
-:107450008F42009C8F4300B01000000400431025B1
-:107460008F420094AFA200208F42009CAFA2002464
-:107470008F8200FC8FA300208FA40024AC43000067
-:10748000AC44000424420008AF8200F08F42009C0C
-:107490008F4402708F4502740040182100001021B3
-:1074A00000A3282100A3302B008220210086202168
-:1074B0003223006024020040AF440270AF450274E2
-:1074C000106200172C6200411040000524020020C9
-:1074D00010620008240200011000002600000000D5
-:1074E0002402006010620019240200011000002133
-:1074F000000000008F4202788F43027C2463000169
-:107500002C64000100441021AF420278AF43027C9A
-:107510008F4202788F43027C100000162402000183
-:107520008F4202808F430284246300012C64000197
-:1075300000441021AF420280AF4302848F42028098
-:107540008F4302841000000B240200018F42028846
-:107550008F43028C246300012C640001004410213D
-:10756000AF420288AF43028C8F4202888F43028C65
-:1075700024020001A34205C28F4200983244FFFF5B
-:107580002406FFF88F45013C0044102124420007E7
-:107590000046102424840007AF4200948F420090DC
-:1075A0008F43009400862024004410230065182B8C
-:1075B00014600005AF4200908F4200948F43014455
-:1075C00000431023AF4200948F4200941000002328
-:1075D000AF40009C3247FFFF50E0002232C2002043
-:1075E000144000022402001024020002AFA2001086
-:1075F0008F420030AFA200148F420010AFA20018DB
-:107600008F4600988F4201080040F80900000000F2
-:107610001040003A3245FFFF8F4200988F430090A0
-:107620008F46013C00451021AF4200988F42009CDC
-:107630008F440098A34005C200651823AF43009013
-:10764000004510210086202B14800005AF42009CCD
-:107650008F4200988F43014400431023AF420098AB
-:1076600032C2002010400005000000008F42035885
-:107670002442FFFFAF4203588F4203588F4200302D
-:107680008F430040244200012463FFFF0043102485
-:10769000AF4200308F420030145300180000000049
-:1076A0008F4200001040000700000000AF80004C37
-:1076B0008F82004C1040FFFD00000000100000050C
-:1076C00000000000AF8000488F8200481040FFFD9E
-:1076D000000000008F8200602403FFF700431024A5
-:1076E000AF8200608F4200001040000300000000E5
-:1076F00010000002AF80004CAF8000488FBF003800
-:107700008FB300348FB200308FB1002C8FB00028BF
-:1077100003E0000827BD004003E00008000000006F
-:1077200027BDFFD032C20020AFBF002CAFB200286F
-:10773000AFB1002410400004AFB000208F520028E9
-:1077400010000002000000008F5200208F42003025
-:10775000105200B5000211008F43001C006280210E
-:107760008E0400008E050004961100088F420090E0
-:107770009607000A3226FFFF0046102A1040001725
-:10778000000000008F8200D88F4300980043102330
-:107790002442DC46AF4200908F4200902842DC47F2
-:1077A00010400005000000008F4200908F4301440C
-:1077B00000431021AF4200908F4200900046102AF3
-:1077C00010400006000000008F42034824420001E0
-:1077D000AF420348100000AB8F4203488F8600FC85
-:1077E00010C0000C000000008F8200F42403FFF89A
-:1077F0000043102400461023000218C35860000103
-:10780000246301008F42008C0043102B14400006BB
-:10781000000712C28F42034424420001AF420344D6
-:10782000100000988F420344934305C21060000F7C
-:10783000304600018F4200103448040032C2000874
-:107840001040000830E20200104000063C034000F7
-:107850009602000EAF4300AC0002140010000004BA
-:10786000AF4200B010000002AF4000AC8F480010E3
-:1078700030E20004104000453227FFFF8F4900AC82
-:107880001120000530C200FF144000062402004011
-:10789000100000042402000814400002240200200A
-:1078A00024020004AFA200108F4300301120000416
-:1078B000AFA300148F4200B000621025AFA20014E5
-:1078C0003C02000201021025AFA200188F4600986A
-:1078D0008F4201080040F8090000000010400069D4
-:1078E0003224FFFF8F42008C8F430094244200011A
-:1078F000AF42008C24020001AE03000CA34205C27B
-:107900008F4200982406FFF88F45013C0044102167
-:10791000244200070046102424840007AF4200944C
-:107920008F4200908F43009400862024004410234F
-:107930000065182B14600005AF4200908F42009440
-:107940008F43014400431023AF4200948F430094BF
-:107950008F4201400043102B10400009000000003E
-:107960008F43013C8F4400948F4200908F45013833
-:107970000064182300431023AF420090AF450094E9
-:107980008F4200941000001FAF42009810E0001DCD
-:1079900030C200FF14400002240200102402000242
-:1079A000AFA200108F420030AFA80018AFA20014A1
-:1079B0008F4600988F4201080040F809000000003F
-:1079C000104000303225FFFF8F4200988F44013C69
-:1079D00000451021AF4200988F4200908F430098DD
-:1079E000A34005C2004510230064182B1460000555
-:1079F000AF4200908F4200988F4301440043102310
-:107A0000AF4200988F4200308F4300402442000173
-:107A10002463FFFF00431024AF4200308F42003048
-:107A200014520018000000008F42000010400007B0
-:107A300000000000AF80004C8F82004C1040FFFD22
-:107A4000000000001000000500000000AF800048AA
-:107A50008F8200481040FFFD000000008F82006010
-:107A60002403FFF700431024AF8200608F42000020
-:107A7000104000030000000010000002AF80004C26
-:107A8000AF8000488FBF002C8FB200288FB1002438
-:107A90008FB0002003E0000827BD003003E000089D
-:107AA0000000000027BDFFD83C02000134422EC078
-:107AB000AFBF00208F4300F08F84010802E2102145
-:107AC00054620004246200083C02000134422CC0CD
-:107AD00002E2102100401821AF4300F0AC6000002A
-:107AE0008F4200EC8C660004146200043C0200012A
-:107AF000248200201000000FAF8201088F4300F0A5
-:107B000034422EC002E210215462000424620008B4
-:107B10003C02000134422CC002E210210040182136
-:107B20008C6200040002114000821021AF82010823
-:107B3000AC6000008C85001830A200361040006C4C
-:107B400030A200018C82001C8F4300408F4400341F
-:107B5000244200012463FFFF0043102400862021FB
-:107B6000AF42002C30A2003014400006AF44003475
-:107B70008F4200348C03023C0043102B144000B4AD
-:107B80000000000032C20010104000282407000846
-:107B90008F4401708F4501748F43002C8F48000C77
-:107BA0008F86012024020080AFA20010AFA3001432
-:107BB000AFA800188F42010C0040F80924C6001C31
-:107BC00014400011240200013C010001003708218B
-:107BD000A02240F18F820124AFA200108F820128E1
-:107BE0003C040001248467C4AFA200148F46002C1B
-:107BF0008F8701203C0500090C002B3B34A51100A8
-:107C000010000036000000008F4203008F43002C5C
-:107C100024420001AF4203008F420300240200010E
-:107C2000A34205C110000026AF4300388F44017005
-:107C30008F4501748F43002C8F48000C8F860120E4
-:107C400024020020AFA20010AFA30014AFA80018B8
-:107C50008F42010C0040F80924C6001C144000119A
-:107C6000240200013C01000100370821A02240F05D
-:107C70008F820124AFA200108F8201283C040001F2
-:107C8000248467B8AFA200148F46002C8F87012090
-:107C90003C0500090C002B3B34A509001000000F27
-:107CA000000000008F42030024420001AF420300A5
-:107CB0008F4203008F42002CA34005C1AF42003821
-:107CC0003C01000100370821A02040F13C010001E7
-:107CD00000370821A02040F0AF4000348F42031449
-:107CE00024420001AF420314100000598F420314D4
-:107CF0001040002230A270008C85001C8F420028AA
-:107D000000A2202304810003000000008F420040F5
-:107D1000008220218F4203588F430000AF45002886
-:107D20000044102110600007AF420358AF80004CA0
-:107D30008F82004C1040FFFD000000001000000585
-:107D400000000000AF8000488F8200481040FFFD17
-:107D5000000000008F82006034420008AF820060A3
-:107D60008F420000104000030000000010000038A7
-:107D7000AF80004C10000036AF8000481040002F4C
-:107D800030A210001040000C30A240008C83001C78
-:107D90008F420050006220230482000124840200EC
-:107DA0008F42035C00441021AF42035C8F420368A2
-:107DB0001000001AAF4300501040000C32C2800087
-:107DC0008C83001C8F42007000622023048200011B
-:107DD000248404008F42036400441021AF420364F2
-:107DE0008F4203681000000DAF4300701040000E7A
-:107DF0003C0208008C83001C8F420060006220233C
-:107E000004820001248401008F4203600044102199
-:107E1000AF4203608F420368AF430060004410210B
-:107E2000AF4203683C02080002C210245040000820
-:107E300036940040100000060000000030A201004F
-:107E400010400003000000000C002BD800000000D0
-:107E50008FBF002003E0000827BD002803E00008D2
-:107E60000000000027BDFFA8AFBF0050AFBE004C10
-:107E7000AFB50048AFB30044AFB20040AFB1003C73
-:107E8000AFB000388F91010826220020AF82010890
-:107E90008E3200180000A82132420024104001BA9E
-:107EA0000000F0218E26001C8F43001C00061100EC
-:107EB000006218218C70000C9604000C962D0016A0
-:107EC0009473000A2C8305DD388288702C420001EF
-:107ED00000621825106000150000282132C2004001
-:107EE00010400015240208009603001414620012CA
-:107EF0003402AAAA9603000E146200070000202193
-:107F00009603001024020300146200040080102174
-:107F1000960200122C4400010080102154400006FB
-:107F200024050016100000040000000024020800D0
-:107F3000508200012405000E934205C3144000083E
-:107F400000005821240B000132620180AF4500A8D7
-:107F5000AF5000A010400002AF4600A4A34B05C3E1
-:107F600010A0008502054021910200000000382188
-:107F70003042000F0002508032C200021040001256
-:107F8000010A1821326200021040001032C20001C2
-:107F900001002021948200002484000200E23821A4
-:107FA0000083102B1440FFFB30E2FFFF00071C0290
-:107FB0000062382100071C0230E2FFFF0062382116
-:107FC00000071027A502000A32C200011040006A13
-:107FD0003262000110400068000000008F4200A8DB
-:107FE00010400065000000008F4200A08F4300A8F1
-:107FF00000431021904C0009318900FF392300060D
-:108000000003182B392200110002102B00621824E3
-:108010001060000C3C0500068F4200A43C040001E7
-:10802000248467D4AFA200108F4200A034A546007C
-:10803000012038210C002B3BAFA200141000004E91
-:108040000000000032C20004144000130000282188
-:10805000316200FF1440000400000000950200029D
-:108060001000000D004A28239505000C9502000E13
-:108070009503001000A2282100A3282195030012D7
-:10808000910400099502000200A3282100A42821E0
-:10809000004A102300A2282102002021948200001F
-:1080A0002484000200E238210088102B1440FFFBDA
-:1080B00000071C0230E2FFFF0062382100071C02AB
-:1080C00030E2FFFF0062382101A5282100051C02D3
-:1080D00030A2FFFF0062282100051C0230A2FFFF32
-:1080E0000062282100A728230005140200A22821ED
-:1080F00030A5FFFF50A000013405FFFF316200FFF3
-:1081000014400008318300FF8F4300A08F4200A875
-:1081100000624021910200003042000F00025080B6
-:10812000318300FF2402000614620003010A1021BB
-:10813000100000022444001024440006316200FFB5
-:1081400014400006000000009482000000A22821D4
-:1081500000051C0230A2FFFF00622821934205C3E4
-:10816000104000033262010050400003A48500006B
-:1081700000052827A48500009622000E8F43009C4E
-:108180000062182132A200FF10400007AF43009C9C
-:108190003C02400002021025AFA200208F42009C4A
-:1081A00010000003005E1025AFB000208F42009C3D
-:1081B000AFA2002432620080104000103262010041
-:1081C0008F4200B424430001000210C00057102168
-:1081D000AF4300B48FA300208FA400243C01000112
-:1081E00000220821AC2338E83C01000100220821CC
-:1081F000AC2438EC100000A532C20020104000640E
-:10820000000000008F4200B424430001000210C0AF
-:1082100000571021AF4300B48FA300208FA4002487
-:108220003C01000100220821AC2338E83C01000198
-:1082300000220821AC2438EC8F4200B410400051D9
-:10824000000038213C090001352938E83C08001FAE
-:108250003508FFFF240BFFFF340AFFFF000710C0A3
-:1082600000571021004910218C4300008C44000469
-:10827000AFA30028AFA4002C8F8200FC8FA300289E
-:108280008FA4002CAC430000AC440004244200083E
-:10829000AF8200F08F42008C2442FFFFAF42008C7F
-:1082A00097A2002E8F4402708F450274004018215F
-:1082B0000000102100A3282100A3302B00822021E0
-:1082C00000862021AF440270AF4502748FA20028BF
-:1082D0000048102490430000306300011460000B3C
-:1082E000004020218F4202788F43027C24630001EA
-:1082F0002C64000100441021AF420278AF43027C9D
-:108300008F4202781000001A8F43027C8C8200009A
-:10831000144B000E0000000094820004144A000B6D
-:10832000000000008F4202888F43028C246300010A
-:108330002C64000100441021AF420288AF43028C3C
-:108340008F4202881000000A8F43028C8F42028005
-:108350008F430284246300012C6400010044102137
-:10836000AF420280AF4302848F4202808F43028477
-:108370008F4200B424E7000100E2102B1440FFB844
-:10838000000710C0A34005C31000003FAF4000B479
-:108390008F8200FC8FA300208FA40024AC43000038
-:1083A000AC44000424420008AF8200F08F42009CDD
-:1083B0008F46008C8F4402708F4502740040182154
-:1083C0000000102124C6FFFFAF46008C00A3282127
-:1083D00000A3302B0082202100862021AF440270B0
-:1083E000AF45027492020000304200011440000CBC
-:1083F0002402FFFF8F4202788F43027C2463000136
-:108400002C64000100441021AF420278AF43027C8B
-:108410008F4202788F43027C1000001C32C2002081
-:108420008E0300001462000F3402FFFF9603000465
-:108430001462000C000000008F4202888F43028CFF
-:10844000246300012C64000100441021AF42028823
-:10845000AF43028C8F4202888F43028C1000000BC6
-:1084600032C200208F4202808F43028424630001C5
-:108470002C64000100441021AF420280AF4302840B
-:108480008F4202808F43028432C2002010400005D8
-:10849000AF40009C8F4203582442FFFFAF42035875
-:1084A0008F4203588E22001C8F430040244200015B
-:1084B0002463FFFF00431024AF42002C32420060CF
-:1084C0001440000832C200108F42003424420001E0
-:1084D000AF4200348C03023C0043102B14400102D5
-:1084E00032C2001010400018240700088F440170A9
-:1084F0008F4501748F43002C8F48000C8F8601201C
-:1085000024020080AFA20010AFA30014AFA800188F
-:108510008F42010C0040F80924C6001C104000479F
-:10852000240200018F4203008F43002C24420001EB
-:10853000AF4203008F42030024020001A34205C1A1
-:108540001000007CAF4300388F4401708F450174E8
-:108550008F43002C8F48000C8F86012024020020BE
-:10856000AFA20010AFA30014AFA800188F42010CF7
-:108570000040F80924C6001C1040005724020001E6
-:10858000100000650000000032420012104000752B
-:10859000324200019622000E8F43009C0062182197
-:1085A00032C2002010400005AF43009C8F420358A8
-:1085B0002442FFFFAF4203588F4203588E22001C13
-:1085C0008F430040244200012463FFFF0043102436
-:1085D000AF42002C324200101440000832C200109A
-:1085E0008F42003424420001AF4200348C03023C2D
-:1085F0000043102B144000BC32C200101040002871
-:10860000240700088F4401708F4501748F43002CAC
-:108610008F48000C8F86012024020080AFA200103A
-:10862000AFA30014AFA800188F42010C0040F80956
-:1086300024C6001C14400011240200013C0100016A
-:1086400000370821A02240F18F820124AFA2001040
-:108650008F8201283C040001248467C4AFA2001467
-:108660008F46002C8F8701203C0500090C002B3B16
-:1086700034A5110010000036000000008F420300F6
-:108680008F43002C24420001AF4203008F420300BD
-:1086900024020001A34205C110000026AF430038A8
-:1086A0008F4401708F4501748F43002C8F48000C5C
-:1086B0008F86012024020020AFA20010AFA3001477
-:1086C000AFA800188F42010C0040F80924C6001C16
-:1086D00014400011240200013C0100010037082170
-:1086E000A02240F08F820124AFA200108F820128C7
-:1086F0003C040001248467B8AFA200148F46002C0C
-:108700008F8701203C0500090C002B3B34A5090094
-:108710001000000F000000008F42030024420001FF
-:10872000AF4203008F4203008F42002CA34005C1DB
-:10873000AF4200383C01000100370821A02040F181
-:108740003C01000100370821A02040F0AF40003478
-:108750008F42031424420001AF4203141000006250
-:108760008F42031410400022324270008E25001CFC
-:108770008F42002800A22023048100030000000093
-:108780008F420040008220218F4203588F43000017
-:10879000AF4500280044102110600007AF42035885
-:1087A000AF80004C8F82004C1040FFFD00000000A5
-:1087B0001000000500000000AF8000488F820048D4
-:1087C0001040FFFD000000008F820060344200086E
-:1087D000AF8200608F4200001040000300000000E4
-:1087E00010000041AF80004C1000003FAF800048F7
-:1087F0001040002F324210001040000C3242400066
-:108800008E23001C8F42005000622023048200014E
-:10881000248402008F42035C00441021AF42035CB9
-:108820008F4203681000001AAF4300501040000C44
-:1088300032C280008E23001C8F4200700062202311
-:1088400004820001248404008F4203640044102148
-:10885000AF4203648F4203681000000DAF43007005
-:108860001040000E3C0208008E23001C8F42006066
-:108870000062202304820001248401008F420360EF
-:1088800000441021AF4203608F420368AF43006091
-:1088900000441021AF4203683C02080002C21024C9
-:1088A00050400011369400401000000F00000000FE
-:1088B0003242004810400007241500018E22001C9F
-:1088C0003C03FFFF0043F0243042FFFF1000FD7522
-:1088D000AE22001C324201001040000300000000E4
-:1088E0000C002BD8000000008FBF00508FBE004C42
-:1088F0008FB500488FB300448FB200408FB1003C69
-:108900008FB0003803E0000827BD005803E00008DE
-:108910000000000000000000000000008F8300E461
-:108920008F8200E02404FFF8004410240062102627
-:108930000002102B0002102303E000080062102444
-:1089400003E000080000000027BDFFE0AFBF001CEF
-:10895000AFB000188F8600C48F8400E08F8500E4DC
-:108960002402FFF80082182410A3000927623FF8B0
-:1089700014A2000224A200082762300000408021D7
-:1089800016030005308200041040000400C02021BE
-:1089900010000022000010218E0400008F42011CF4
-:1089A00014A20003000000008F420120AF42011416
-:1089B0008CA300008F420148008318230043102B32
-:1089C00010400003000000008F420148006218219F
-:1089D00094A20006244200500062102B1440000FA5
-:1089E00000A01021AFA40010AFA300148CA60000BB
-:1089F0008CA700043C0400010C002B3B24846894E9
-:108A00008F42020C24420001AF42020C8F42020C42
-:108A100000001021AF9000E8AF9000E48FBF001C71
-:108A20008FB0001803E0000827BD002003E0000815
-:108A3000000000008F8400E08F8800C48F8300E86E
-:108A40002402FFF80082382400E320232C82100047
-:108A50005040000124841000000420C2008018212E
-:108A60008F4402588F45025C0000102100A328218A
-:108A700000A3302B0082202100862021AF44025821
-:108A8000AF45025C8F8300C88F4201480103202359
-:108A90000082102B14400004008018218F420148EE
-:108AA00000822021008018218F4402508F450254FB
-:108AB0000000102100A3282100A3302B00822021D8
-:108AC00000862021AF440250AF450254AF8800C851
-:108AD000AF8700E4AF8700E803E000080000000073
-:108AE00027BDFF30240A0001AFBF00C8AFBE00C4DD
-:108AF000AFB500C0AFB300BCAFB200B8AFB100B407
-:108B0000AFB000B0A3A00097AFA00044AFAA005C34
-:108B1000934205C4A7A0008E1040000AA7A00086BB
-:108B20008F4B00C4AFAB00648F4A00C0AFAA006C8B
-:108B30008F4B00CCAFAB00748F4A00C810000129E6
-:108B4000AFAA007C8F4201140040F8090000000029
-:108B50000040302110C0034F000000008CC2000014
-:108B60008CC30004AFA20020AFA300248FAB00246D
-:108B70008FAA00203162FFFF2442FFFCAFA2006CED
-:108B80003C02000602C21024AFAB007C144000156A
-:108B9000AFAA006491420000304200011040001171
-:108BA0002402FFFF8D430000146200043402FFFF23
-:108BB000954300041062000B000000000C0024BB71
-:108BC0008FA40064304200FF144000060000000043
-:108BD0008F4201180040F809000000001000032D2A
-:108BE000000000008FA200243C03FFBF3463FFFF9E
-:108BF000004310243C03FFFF0043182414600003CB
-:108C0000AFA2002410000040000018213C020080A8
-:108C10000062102410400007000000008F42038C07
-:108C200024420001AF42038C8F42038C10000036B7
-:108C3000240300018F42021024420001AF420210BF
-:108C40008F4202103C020001006210241040000616
-:108C50003C0200028F4201C424420001AF4201C421
-:108C60008F4201C43C020002006210241040000642
-:108C70003C0200048F42037C24420001AF42037C8B
-:108C80008F42037C3C020004006210241040000666
-:108C90003C0200088F42038024420001AF4203805F
-:108CA0008F4203803C02000800621024104000063E
-:108CB0003C0200108F42038424420001AF4203842F
-:108CC0008F4203843C020010006210241040000612
-:108CD0003C0200208F4201C024420001AF4201C08B
-:108CE0008F4201C03C0200200062102410400006A8
-:108CF000240300018F42038824420001AF4203880D
-:108D00008F420388240300018C0202608FAB006C49
-:108D1000004B102B10400014307000FF8F4201E810
-:108D200024420001AF4201E88F4201E88FAA007C93
-:108D30008F8200E0354A0100AFAA007CAFA200108C
-:108D40008F8200E4241000013C040001248468A008
-:108D5000AFA200148FA600208FA700243C050007B7
-:108D60000C002B3B34A50800120000103C020080D0
-:108D700002C210241440000E32C204008FAB007CEB
-:108D80003C020080344201000162102410400005C2
-:108D9000000000008F42020C24420001AF42020C8E
-:108DA0008F42020C100002B08FA3006C32C204008C
-:108DB00010400015340281008FAA00649543000C16
-:108DC000146200123C020100240B0200A7AB008ECB
-:108DD0009542000E8D4300088D4400048D4500002F
-:108DE0008FAA006C8FAB0064254AFFFCAFAA006C11
-:108DF000A7A20086AD63000CAD640008AD65000459
-:108E0000256B0004AFAB00643C02010002C21024D9
-:108E100010400004000000008FAA006C254A0004E6
-:108E2000AFAA006C8F4200BC5040000AAFA0007493
-:108E30008FAB006C004B102B50400006AFA00074AD
-:108E40008F4200BC01621023AFA200748F4A00BCA5
-:108E5000AFAA006C8F4200808FAB006C004B102BD0
-:108E60001040005632C280001040005E240A000309
-:108E700032C210001040005BAFAA005C1000005826
-:108E8000240B00048F4203502403FFBF0283A0245D
-:108E900024420001AF4203501000024F8F420350A2
-:108EA00002C2B0252402FFBF0282A0248F830128C2
-:108EB0003C040001248468D026620001AFA20014A3
-:108EC000AFA300108F8601208F8701243C05000787
-:108ED0000C002B3B34A522501000023F0000000084
-:108EE00002C2B0252402FFBF0282A0248F83012882
-:108EF0003C040001248468D024020002AFA20014C4
-:108F0000AFA300108F8601208F8701243C05000746
-:108F10000C002B3B34A524501000022F0000000051
-:108F20008EA200008EA300043C040001248468E8A3
-:108F3000AFB00010AFBE00148EA7001834A52800F3
-:108F40000C002B3B006030211000022300000000C9
-:108F5000A6B1000A8F8201243C040001248468F039
-:108F6000AFBE0014AFA200108F4600448F870120CF
-:108F70003C0500070C002B3B34A530001000021606
-:108F800000000000A6B1000AA6B2000E8F820124E4
-:108F90003C040001248468FCAFBE0014AFA20010A2
-:108FA0008F4600448F8701203C0500070C002B3BB7
-:108FB00034A5320010000208000000008F42008437
-:108FC0008FAA006C004A102B144000073C020001DD
-:108FD00002C210241040000400000000240B000214
-:108FE000AFAB005C8FAA006C1140021B27AB0020C6
-:108FF000AFAB00A43C0A001F354AFFFFAFAA009C9C
-:109000008FAB005C240A0001556A0021240A00028B
-:109010008F4300548F4200501062000B274B0054C6
-:109020008F5E00543403ECC0AFAB004C27C200018C
-:10903000304201FFAFA20054001E11400043102136
-:109040001000006B02E2A8218F4200448FAA006C3E
-:109050003C040001248468ACAFAA0014AFA2001045
-:109060008F4600548F4700503C0500070C002B3BF7
-:1090700034A513008F4303502402FFBF0282A024B3
-:1090800024630001AF430350100001D38F4203500B
-:10909000156A001D000000008F4300748F420070AD
-:1090A0001062000A274B00748F5E0074AFAB004C57
-:1090B00027C20001304203FFAFA20054001E11403E
-:1090C00024426CC01000004A02E2A8218F420044F2
-:1090D0008FAA006C3C040001248468B83C0500079A
-:1090E000AFAA0014AFA200108F4600748F47007023
-:1090F00034A51500240B00010C002B3BAFAB005C2A
-:109100001000FFC3000000008F4300648F42006026
-:109110001062001A274A00648F5E00648FAB005C07
-:10912000AFAA004C27C20001304200FFAFA200549A
-:10913000240200041562000E001E1140001E118062
-:1091400024420CC002E21021AFA200449442002A43
-:109150008FAA00448FAB006C004B102B10400024F2
-:1091600025550020240A000110000021A3AA009721
-:1091700024424CC01000001E02E2A8218F4200448D
-:109180008FAB006C3C040001248468C4AFAB0014B6
-:10919000AFA200108F4600648F4700603C050007B7
-:1091A0000C002B3B34A518003C02000802C210241E
-:1091B0001440FF34000000008F420370240A0001B5
-:1091C000AFAA005C24420001AF4203701000FF9080
-:1091D0008F42037027A3003600131040006218214D
-:1091E000946200000044102110000020A4620000DE
-:1091F0008FAB0064AEAB001893A2009710400072D2
-:10920000000098218FAA00448FA4006C8FA300A4B3
-:1092100025420020AFA2002825420008AFA200305E
-:1092200025420010AFAA002CAFA200349542002ABC
-:10923000A7A2003895420018A7A2003A9542001A4A
-:10924000A7A2003C9542001CA7A2003E9462001811
-:1092500024630002008220231880FFDE26730001B1
-:109260002E6200041440FFF9000000008F4200FC51
-:109270002665000100A2102A1440002B24030001DF
-:109280008F83012C10600023000000008F820124D6
-:109290000043102300022143588000012484004031
-:1092A0008F820128004310230002194358600001F7
-:1092B000246300400064102A544000010060202113
-:1092C000AF4400FC8F4200FC00A2102A10400011A5
-:1092D0002403000110000015306200FF8FAB006412
-:1092E00096070018AFAB00108E2200083C04000166
-:1092F000248468DC8C4300048C42000034A52400E4
-:10930000024030210C002B3BAFA300141000002BB7
-:10931000000000008F4203340000182124420001A5
-:10932000AF4203348F420334306200FF5040FEDC12
-:109330003C02080012600021000090218FB100A4BF
-:10934000022080218E220008960700188FA6006454
-:109350008C4400008C450004240A0001AFAA0010D0
-:10936000AFBE00148F420008AFA200188F42010C5C
-:109370000040F809000000001040FFD83C0500073D
-:10938000960200188FAB00648FAA009C01625821DE
-:10939000014B102B10400004AFAB00648F4201481A
-:1093A00001625823AFAB0064261000022652000170
-:1093B0000253102B1440FFE3263100048FB0006CE1
-:1093C0001000003697B100388F4200FC24050002DF
-:1093D00000A2102A1440001B240300018F83012CDB
-:1093E00010600013000000008F820124004310234E
-:1093F0000002214358800001248400408F8201280C
-:109400000043102300021943586000012463004008
-:109410000064102A5440000100602021AF4400FC89
-:109420008F4200FC00A2102A144000062403000111
-:109430008F4203340000182124420001AF4203345C
-:109440008F420334306200FF1040FEA53C0208004A
-:1094500096B1000A8FB0006C3223FFFF0070102B12
-:1094600054400001006080218EA400008EA50004FD
-:10947000240B0001AFAB0010AFBE00148F420008F8
-:109480008FA60064AFA200188F42010C0040F809BB
-:10949000020038211040FEA23C05000796A3000EF2
-:1094A00097AA008E1140000700609021934205C4E6
-:1094B000144000040000000097AB0086006A1825E5
-:1094C000A6AB00168FAA007C3C02FFFF01421024CD
-:1094D00010400003000A140234630400A6A2001422
-:1094E0008FAB006C560B0072A6A3000E3462000412
-:1094F000A6A2000E8FAA0074016A1021A6A2000A7B
-:109500008F4300448F4401A08F4501A434028000A2
-:10951000AFA200108F42004402A030212407002097
-:10952000AFA200148F42000C0003194000604821D4
-:10953000AFA200188F42010C0000402100A9282191
-:1095400000A9182B008820210040F8090083202161
-:109550005040FE7FA6B2000E8F420368AFA0006CA1
-:10956000A34005C42442FFFFAF4203688FAB005CF9
-:10957000240A00018F420368156A0006240A0002CB
-:109580008F42035C2442FFFFAF42035C1000000CDB
-:109590008F42035C156A0006000000008F420364DE
-:1095A0002442FFFFAF420364100000058F420364B2
-:1095B0008F4203602442FFFFAF4203608F4203608B
-:1095C0008FAA00548FAB004CAD6A00008F4200445C
-:1095D0008F4400888F430078244200010044102407
-:1095E00024630001AF420044AF4300788C02024084
-:1095F0000062182B14600075240700088F4401686E
-:109600008F45016C8F4300448F48000C8F860120EA
-:1096100024020040AFA20010AFA30014AFA80018AE
-:109620008F42010C0040F80924C6001C14400011B0
-:10963000240B00013C01000100370821A02B40F25F
-:109640008F820124AFA200108F8201283C04000108
-:109650002484688CAFA200148F4600448F870120B9
-:109660003C0500090C002B3B34A513001000000B37
-:10967000000000008F42030424420001AF420304B3
-:109680008F4203048F420044AF42007C3C01000142
-:1096900000370821A02040F2AF4000788F42031825
-:1096A00024420001AF420318100000488F42031803
-:1096B000A6B0000A8F4300448F4401A08F4501A447
-:1096C00034028000AFA200108F42004402A030217B
-:1096D00024070020AFA200148F42000C00031940A1
-:1096E00000604821AFA200188F42010C0000402109
-:1096F00000A9282100A9182B008820210040F80982
-:10970000008320211040FE1F240A0001A34A05C443
-:109710008FAB006C8FAA006401705823AFAB006C54
-:109720008FAB009C01505021016A102B10400004A7
-:10973000AFAA00648F42014801425023AFAA0064DF
-:109740008F4203682442FFFFAF4203688FAA005C88
-:10975000240B00018F420368154B0006240B000206
-:109760008F42035C2442FFFFAF42035C1000000CF9
-:109770008F42035C114B0006000000008F42036023
-:109780002442FFFFAF420360100000058F420360D8
-:109790008F4203642442FFFFAF4203648F4203649D
-:1097A0008FAB00548FAA004CAD4B00008F42004499
-:1097B0008F4400888F430078244200010044102425
-:1097C00024630001AF420044AF4300788FAA006CCD
-:1097D0001540FE0B000000008FAB006C1160001EF6
-:1097E00000000000934205C4104000090000000082
-:1097F0008FAA0064AF4A00C4AF4B00C08FAB007C9F
-:10980000AF4B00C88FAA00741000000EAF4A00CC06
-:1098100097AB008E1160000B340381008FA20020F3
-:109820008C46000CA443000C97AA00868C440004CC
-:109830008C450008A44A000EAC440000AC4500046E
-:10984000AC4600088F42034C24420001AF42034C57
-:10985000100000108F42034C8FAB007C3164FFFF7F
-:109860002484FFFC008018218F4402508F4502544D
-:109870008F4601180000102100A3282100A3382BD7
-:109880000082202100872021AF44025000C0F80947
-:10989000AF4502548FBF00C88FBE00C48FB500C053
-:1098A0008FB300BC8FB200B88FB100B48FB000B0DE
-:1098B00003E0000827BD00D003E00008000000001E
-:1098C00027BDFF38240B0001AFBF00C0AFBE00BCF6
-:1098D000AFB500B8AFB300B4AFB200B0AFB100AC39
-:1098E000AFB000A8A3A00087AFA00044AFAB005C5E
-:1098F000934205C4A7A0007610400007A7A0007EF1
-:109900008F4C00C0AFAC00648F4B00C88F5E00C4AA
-:1099100010000130AFAB006C8F4201140040F80919
-:10992000000000000040302110C002A10000000033
-:109930008CC200008CC30004AFA20020AFA300249F
-:109940008FAC00248FBE00203182FFFF2442FFFC39
-:10995000AFA200643C02000602C2102414400015AD
-:10996000AFAC006C93C20000304200011040001107
-:109970002402FFFF8FC30000146200043402FFFFC3
-:1099800097C300041062000B000000000C0024BB11
-:1099900003C02021304200FF1440000600000000F8
-:1099A0008F4201180040F8090000000010000280FA
-:1099B000000000008FA200243C03FFBF3463FFFFC0
-:1099C000004310243C03FFFF0043182414600003ED
-:1099D000AFA2002410000040000080213C02008063
-:1099E0000062102410400007000000008F42038C2A
-:1099F00024420001AF42038C8F42038C10000036DA
-:109A0000241000018F42021024420001AF420210D4
-:109A10008F4202103C020001006210241040000638
-:109A20003C0200028F4201C424420001AF4201C443
-:109A30008F4201C43C020002006210241040000664
-:109A40003C0200048F42037C24420001AF42037CAD
-:109A50008F42037C3C020004006210241040000688
-:109A60003C0200088F42038024420001AF42038081
-:109A70008F4203803C020008006210241040000660
-:109A80003C0200108F42038424420001AF42038451
-:109A90008F4203843C020010006210241040000634
-:109AA0003C0200208F4201C024420001AF4201C0AD
-:109AB0008F4201C03C0200200062102410400006CA
-:109AC000241000018F42038824420001AF42038822
-:109AD0008F420388241000018C0202608FAB006467
-:109AE000004B102B10400015320200FF8F4201E89E
-:109AF00024420001AF4201E88F4201E88FAC006CC4
-:109B00008F8200E0358C0100AFAC006CAFA200107A
-:109B10008F8200E4241000013C040001248468A02A
-:109B2000AFA200148FA600208FA700243C050007D9
-:109B30000C002B3B34A53600320200FF1040001011
-:109B40003C02008002C210241440000E32C2040005
-:109B50008FAB006C3C020080344201000162102493
-:109B600010400005000000008F42020C244200015A
-:109B7000AF42020C8F42020C100002028FA300645D
-:109B800032C20400104000123402810097C3000C5E
-:109B90001462000F00000000240C0200A7AC007645
-:109BA00097C2000E8FC300088FC400048FAB0064FF
-:109BB0008FC50000256BFFFCAFAB0064A7A2007E41
-:109BC000AFC3000CAFC40008AFC5000427DE00041B
-:109BD0008FA70064320200FF144000343C020100F1
-:109BE00097C4000C2C8305DD388288702C4200015C
-:109BF00000621825106000150000282132C20800FC
-:109C0000104000152402080097C3001414620012CB
-:109C10003402AAAA97C3000E146200070000202194
-:109C200097C3001024020300146200040080102176
-:109C300097C200122C4400010080102154400006FD
-:109C40002405001610000004000000002402080093
-:109C5000508200012405000E10A0001303C520212E
-:109C6000248300093C02001F3442FFFF0043102BF5
-:109C700010400003000000008F42014800621823DA
-:109C800090620000384300062C6300013842001146
-:109C90002C42000100621825106000043C02010003
-:109CA00094820002004538213C02010002C21024C7
-:109CB0005040000EAFA700648FAC006410EC0008A9
-:109CC0003C0500073C040001248469088FA6006459
-:109CD00034A54000AFA000100C002B3BAFA0001437
-:109CE0008FAB0064256B0004AFAB00648F42008033
-:109CF0008FAC0064004C102B1040002C32C280004E
-:109D000010400034240B000332C210001040003118
-:109D1000AFAB005C1000002E240C00048F420350F7
-:109D20002403FFBF0283A02424420001AF4203505A
-:109D3000100001738F4203503C02080002C2B0259C
-:109D40002402FFBF0282A0248F8301283C0400016B
-:109D5000248468D026620001AFA20014AFA30010D3
-:109D60008F8601208F8701243C0500070C002B3BC8
-:109D700034A5530010000162000000008EA2000014
-:109D80008EA300043C040001248468E8AFB00010F6
-:109D9000AFB100148EA7001834A559000C002B3B5E
-:109DA0000060302110000156000000008F42008446
-:109DB0008FAB0064004B102B144000073C020001E5
-:109DC00002C210241040000400000000240C000215
-:109DD000AFAC005C8FAB00641160016627AC002063
-:109DE000AFAC008C8FAB005C240C0001556C0021E3
-:109DF000240C00028F4300548F4200501062000B6D
-:109E0000274B00548F5100543403ECC0AFAB004CCF
-:109E100026220001304201FFAFA200540011114080
-:109E2000004310211000006B02E2A8218F42004481
-:109E30008FAC00643C040001248468ACAFAC001417
-:109E4000AFA200108F4600548F4700503C0500071A
-:109E50000C002B3B34A543008F4303502402FFBF6B
-:109E60000282A02424630001AF43035010000124A8
-:109E70008F420350156C001D000000008F430074DA
-:109E80008F4200701062000A274B00748F510074DB
-:109E9000AFAB004C26220001304203FFAFA20054BA
-:109EA0000011114024426CC01000004A02E2A821B7
-:109EB0008F4200448FAC00643C040001248468B8E5
-:109EC0003C050007AFAC0014AFA200108F46007431
-:109ED0008F47007034A54500240B00010C002B3B7C
-:109EE000AFAB005C1000FFC3000000008F430064B4
-:109EF0008F4200601062001A274C00648F5100648A
-:109F00008FAB005CAFAC004C26220001304200FF5A
-:109F1000AFA20054240200041562000E001111408B
-:109F20000011118024420CC002E21021AFA20044B3
-:109F30009442002A8FAC00448FAB0064004B102B7E
-:109F40001040002425950020240C00011000002161
-:109F5000A3AC008724424CC01000001E02E2A821DE
-:109F60008F4200448FAB00643C040001248468C429
-:109F7000AFAB0014AFA200108F4600648F470060A3
-:109F80003C0500070C002B3B34A548003C020008B0
-:109F900002C210241440FF61000000008F420370D1
-:109FA000240C0001AFAC005C24420001AF420370FE
-:109FB0001000FF908F42037027A30036001310405B
-:109FC0000062182194620000004410211000001F5C
-:109FD000A4620000AEBE001893A200871040008467
-:109FE000000098218FAB00448FA400648FA3008CE5
-:109FF00025620020AFA2002825620008AFA2003031
-:10A0000025620010AFAB002CAFA200349562002A8D
-:10A01000A7A2003895620018A7A2003A9562001A1C
-:10A02000A7A2003C9562001CA7A2003E9462001803
-:10A0300024630002008220231880FFDF26730001C2
-:10A040002E6200041440FFF9000000008F4200FC63
-:10A050000262102A14400030240300018F83012C77
-:10A0600010600028000000008F82012400431023AC
-:10A070000002214358800001248400408F8201287F
-:10A08000004310230002194358600001246300407C
-:10A090000064102A5440000100602021AF4400FCFD
-:10A0A0008F4200FC0262102A1040001624030001B7
-:10A0B0001000001A306200FF8FAC008C00101040BE
-:10A0C000004C10219447001800101080004C102103
-:10A0D000AFBE00108C4200083C040001248468DC00
-:10A0E0003C0500078C4300048C42000034A5550059
-:10A0F000020030210C002B3BAFA3001410000039EC
-:10A10000000000008F4203340000182124420001A7
-:10A11000AF4203348F420334306200FF1040FF0629
-:10A12000000080218F4300082402FBFF1260002DF5
-:10A13000006250243C0B4000022B40258FB1008C64
-:10A140002669FFFF022090218E4200089627001802
-:10A150008C4400008C45000456090004240B0001C7
-:10A16000240C000210000002AFAC0010AFAB0010D6
-:10A1700016000004AFA800148F420008100000026F
-:10A18000AFA20018AFAA00188F42010C03C0302103
-:10A19000AFA80098AFA9009C0040F809AFAA00A0A2
-:10A1A0008FA800988FA9009C8FAA00A01040FFC222
-:10A1B0003C02001F962300183442FFFF03C3F02126
-:10A1C000005E102B10400003263100028F42014830
-:10A1D00003C2F023261000010213102B1440FFDAF3
-:10A1E000265200048FB000641000001A0000000026
-:10A1F00096A3000A8FB000640070102B5440000139
-:10A20000006080218EA400008EA500048FAB005C4E
-:10A21000240C0002AFAC0010934305C4000B1700E0
-:10A2200010600003022230253C02080000C23025E5
-:10A23000AFA600148F420008AFA200188F42010C95
-:10A2400003C030210040F809020038211040FECB45
-:10A250003C05000797AC00761180000796A3000E1E
-:10A26000934205C4144000040000000097AB007E38
-:10A27000006C1825A6AB00168FAC006C3C02FFFFEB
-:10A280000182102410400003000C14023463040007
-:10A29000A6A20014A6B0000A8FAB0064560B0006FD
-:10A2A00003D0F02134620004AFA00064A6A2000E27
-:10A2B0001000000DA34005C48FAC00643C02001FD9
-:10A2C0003442FFFF005E102B01906023AFAC0064AE
-:10A2D000A6A3000E240B000110400003A34B05C4ED
-:10A2E0008F42014803C2F0238FAB00548FAC004C67
-:10A2F000AD8B00008FAC00641580FEBA000000003A
-:10A300008FAB00641160001B00000000934205C485
-:10A310001040000600000000AF5E00C4AF4B00C05C
-:10A320008FAC006C1000000EAF4C00C897AB0076ED
-:10A330001160000B340381008FA200208C46000CBA
-:10A34000A443000C97AC007E8C4400048C450008AC
-:10A35000A44C000EAC440000AC450004AC46000820
-:10A360008F42034C24420001AF42034C1000001006
-:10A370008F42034C8FAB006C3164FFFF2484FFFCE1
-:10A38000008018218F4402508F4502548F460118D7
-:10A390000000102100A3282100A3382B00822021D7
-:10A3A00000872021AF44025000C0F809AF45025495
-:10A3B0008FBF00C08FBE00BC8FB500B88FB300B494
-:10A3C0008FB200B08FB100AC8FB000A803E00008DE
-:10A3D00027BD00C803E000080000000027BDFFD82B
-:10A3E000AFBF0024AFB000208F43004C8F42004825
-:10A3F00010620034000000008F4300488F42004C80
-:10A400000062202304820001248402008F43005450
-:10A410008F42004C0043102B144000042402020021
-:10A420008F43004C10000005004310238F4200545E
-:10A430008F43004C004310232442FFFF0040502173
-:10A44000008A102A54400001008050218F49004C9E
-:10A450008F48004C8F4401888F45018C8F46004CFB
-:10A4600024071000AFA70010000841400100182188
-:10A47000012A4821313001FFAFB000148F4700148A
-:10A480000000102100063140AFA7001800A32821CA
-:10A4900000A3382B00822021008720213402ECC049
-:10A4A00000C230218F42010802E630210040F80945
-:10A4B000000A394054400001AF50004C8F43004C1B
-:10A4C0008F42004814620018000000008F42000014
-:10A4D0001040000700000000AF80004C8F82004C4D
-:10A4E0001040FFFD0000000010000005000000000B
-:10A4F000AF8000488F8200481040FFFD0000000040
-:10A500008F8200602403FDFF00431024AF820060AF
-:10A510008F42000010400003000000001000000205
-:10A52000AF80004CAF8000488FBF00248FB0002068
-:10A5300003E0000827BD002803E000080000000039
-:10A5400027BDFFD8AFBF0024AFB000208F43005C11
-:10A550008F42005810620049000000008F430058ED
-:10A560008F42005C006220230482000124840100E9
-:10A570008F4300648F42005C0043102B14400004A2
-:10A58000240201008F43005C1000000500431023EB
-:10A590008F4200648F43005C004310232442FFFF7E
-:10A5A000004038210087102A5440000100803821E3
-:10A5B0008F42005C00471021305000FF32C2100073
-:10A5C00010400015240820008F49005C8F44019042
-:10A5D0008F4501948F46005C00073980AFA80010BA
-:10A5E000AFB000148F4800140009498001201821E1
-:10A5F0000000102100A3282100A3482B0082202165
-:10A600000089202100063180AFA800188F42010880
-:10A610001000001424C60CC08F49005C8F440190C8
-:10A620008F4501948F46005C00073940AFA80010A9
-:10A63000AFB000148F4800140009494001201821D0
-:10A640000000102100A3282100A3482B0082202114
-:10A650000089202100063140AFA800188F42010870
-:10A6600024C64CC00040F80902E6302154400001E5
-:10A67000AF50005C8F43005C8F420058146200189A
-:10A68000000000008F4200001040000700000000A2
-:10A69000AF80004C8F82004C1040FFFD0000000096
-:10A6A0001000000500000000AF8000488F820048C5
-:10A6B0001040FFFD000000008F8200602403FEFFB9
-:10A6C00000431024AF8200608F420000104000035E
-:10A6D0000000000010000002AF80004CAF80004876
-:10A6E0008FBF00248FB0002003E0000827BD0028A2
-:10A6F00003E000080000000027BDFFD8AFBF002422
-:10A70000AFB000208F43006C8F42006810620033AE
-:10A71000000000008F4300688F42006C006220231D
-:10A7200004820001248404008F4300748F42006C73
-:10A730000043102B14400004240204008F43006CDB
-:10A7400010000005004310238F4200748F43006CFB
-:10A75000004310232442FFFF00405021008A102AAA
-:10A7600054400001008050218F49006C8F48006CDC
-:10A770008F4401988F45019C8F46006C2407400050
-:10A78000AFA700100008414001001821012A48210C
-:10A79000313003FFAFB000148F47001400001021C8
-:10A7A0000006314024C66CC0AFA7001800A32821C2
-:10A7B00000A3382B00822021008720218F4201082E
-:10A7C00002E630210040F809000A394054400001F7
-:10A7D000AF50006C8F43006C8F4200681462001809
-:10A7E000000000008F420000104000070000000041
-:10A7F000AF80004C8F82004C1040FFFD0000000035
-:10A800001000000500000000AF8000488F82004863
-:10A810001040FFFD000000008F8200602403F7FF5E
-:10A8200000431024AF8200608F42000010400003FC
-:10A830000000000010000002AF80004CAF80004814
-:10A840008FBF00248FB0002003E0000827BD002840
-:10A8500003E00008000000008F4200FC3C03000100
-:10A860008F4400F8346330C824420001AF4200FC3A
-:10A870008F85012802E310215482000424820008FD
-:10A880003C02000134422EC802E21021004018218F
-:10A89000AF4300F8AC6000008F4200F41462000483
-:10A8A0003C02000124A200201000000FAF8201280A
-:10A8B0008F4300F8344230C802E210215462000491
-:10A8C000246200083C02000134422EC802E210213A
-:10A8D000004018218C6200040002114000A21021E7
-:10A8E000AF820128AC6000008CA3001830620070B9
-:10A8F0001040002D30620020104000043C02001087
-:10A9000002C210241040000D000000003062004020
-:10A91000104000043C02002002C210241040000736
-:10A9200000000000306200101040001F3C02004098
-:10A9300002C210241440001C000000008F8200405E
-:10A940003042000114400008000020218C03010463
-:10A950002402000150620005240400018C020264FC
-:10A960001040000300801021240400010080102109
-:10A9700010400006000000008F42030C244200013A
-:10A98000AF42030C100000088F42030C8F8200447A
-:10A9900034420004AF8200448F4203082442000185
-:10A9A000AF4203088F42030803E0000800000000E4
-:10A9B00003E000080000000027BDFF98AFBF006063
-:10A9C000AFBE005CAFB50058AFB30054AFB200509B
-:10A9D000AFB1004CAFB000488F4200FC24420001F0
-:10A9E000AF4200FC8F88012825020020AF82012899
-:10A9F0008D030018306200701040002E306200207D
-:10AA0000104000043C02001002C210241040000D4F
-:10AA10000000000030620040104000043C020020B2
-:10AA200002C2102410400007000000003062001035
-:10AA3000104001A93C02004002C21024144001A6AB
-:10AA4000000000008F8200403042000114400008E6
-:10AA5000000020218C030104240200015062000543
-:10AA6000240400018C0202641040000300801021C5
-:10AA700024040001008010211040000600000000A6
-:10AA80008F42030C24420001AF42030C10000192DC
-:10AA90008F42030C8F82004434420004AF82004492
-:10AAA0008F42030824420001AF4203081000018ACC
-:10AAB0008F420308306200021040014B3C02080044
-:10AAC0008D1E001C001E5702AFAA0034950A001606
-:10AAD00003C22024AFAA00248FAA0034240200015C
-:10AAE0001542000633DEFFFF001E11403403ECC0A8
-:10AAF000004310211000001002E2A82124020002ED
-:10AB00001542000524020003001E114024426CC0BF
-:10AB10001000000902E2A82115420005001E118064
-:10AB2000001E114024424CC01000000302E2A82184
-:10AB30000057102124550CE096A2000E304AFFFC6D
-:10AB40003042040010400003AFAA002C100000E1C6
-:10AB500000008821108000040000882197B10026A1
-:10AB6000100000DDA6B100128EB30018966A000C2A
-:10AB7000A7AA003E97A5003E2CA305DD38A2887049
-:10AB80002C420001006218251060001500002021F1
-:10AB900032C2080010400015240208009663001419
-:10ABA000146200123402AAAA9663000E146200070F
-:10ABB00000002821966300102402030014620004A0
-:10ABC00000A01021966200122C45000100A0102167
-:10ABD0005440000624040016100000040000000089
-:10ABE0002402080050A200012404000E108000B9C5
-:10ABF00002649021924200003042000F00028080E7
-:10AC000032C2010010400020025018213C020020F6
-:10AC10000043102B1440000E024020210000282188
-:10AC2000948200002484000200A228210083102BBB
-:10AC30001440FFFB30A2FFFF00051C020062282128
-:10AC400000051C0230A2FFFF10000009006228214D
-:10AC50008F4701488F420110001028423C06002017
-:10AC60000040F809AFA800403045FFFF8FA8004022
-:10AC700050A000013405FFFF8FAA002C354A0002C6
-:10AC800010000002AFAA002C0000282132C2008070
-:10AC900010400090A6A50010264300093C02001FAA
-:10ACA0003442FFFF0043102B10400003000000005F
-:10ACB0008F420148006218239066000030C200FFF6
-:10ACC000384300062C630001384200112C42000179
-:10ACD000006218251060007F24020800000088210F
-:10ACE00097A3003E1462000F0260202196710000BD
-:10ACF0009662000296630004966400060222882190
-:10AD00000223882102248821966200089663000AA3
-:10AD10009664000C0222882102238821100000077B
-:10AD200002248821948200002484000202228821C7
-:10AD30000092102B1440FFFB0000000000111C02C9
-:10AD40003222FFFF0062882100111C023222FFFF25
-:10AD50000062882132C2020010400003264400062F
-:10AD60001000003E000080213C05001F34A5FFFFBD
-:10AD700000A4102B10400003000000008F42014887
-:10AD8000008220239482000030421FFF1040000404
-:10AD90002644000C96420002100000300050802330
-:10ADA0009642000226430014005080233C020020FB
-:10ADB0000043102B1440000A00D080219642000C62
-:10ADC000020280219642000E964300109644001223
-:10ADD0000202802102038021100000200204802151
-:10ADE00000A4102B10400003000000008F42014817
-:10ADF0000082202394820000248400020202802129
-:10AE000000A4102B10400003000000008F420148F6
-:10AE10000082202394820000248400020202802108
-:10AE200000A4102B10400003000000008F420148D6
-:10AE300000822023948200002484000202028021E8
-:10AE400000A4102B10400003000000008F420148B6
-:10AE50000082202394820000020280213C02010033
-:10AE600002C210241040000E000000008FAA002C27
-:10AE7000314200041040000A000000009504000E5A
-:10AE8000026420210C003EEC2484FFFC3042FFFFD2
-:10AE90000222882100111C023222FFFF0062882159
-:10AEA0008FAA002401518823001114020222882154
-:10AEB0000230882100111402022288213231FFFF62
-:10AEC000522000013411FFFF8FAA002C354A0001E7
-:10AED000AFAA002CA6B1001297AA002EA6AA000EB7
-:10AEE0008FAA002C314200041040000224091000F7
-:10AEF000340980008F4800448F4401A08F4501A48D
-:10AF0000AFA900108F4900440008414001001821FA
-:10AF1000AFA900148F48000C02A0302124070020A4
-:10AF2000AFA800188F48010C0000102100A32821B1
-:10AF300000A3482B008220210100F809008920216C
-:10AF40001440000B000000008F8201283C04000127
-:10AF500024846914AFBE0014AFA200108F860124B0
-:10AF60008F8701203C0500070C002B3B34A599205E
-:10AF70008F4203682442FFFFAF4203688F420044C0
-:10AF80008F4300882442000100431024AF42004454
-:10AF90008FAA00348F440368240200011542000682
-:10AFA000240200028F42035C2442FFFFAF42035C95
-:10AFB000100000498F42035C1542000600000000AB
-:10AFC0008F4203642442FFFFAF420364100000423B
-:10AFD0008F4203648F4203602442FFFFAF4203604D
-:10AFE0001000003D8F4203603062100010400005E9
-:10AFF000306280008F420078244200011000003649
-:10B00000AF42007810400034000000008F4200780A
-:10B0100024420001AF4200788C0302400043102B11
-:10B020001440002D240700088F4401688F45016CEF
-:10B030008F4300448F48000C8F860120240200407B
-:10B04000AFA20010AFA30014AFA800188F42010CEC
-:10B050000040F80924C6001C14400011240200011D
-:10B060003C01000100370821A02240F28F82012418
-:10B07000AFA200108F8201283C0400012484688C58
-:10B08000AFA200148F4600448F8701203C050009C1
-:10B090000C002B3B34A513001000000B0000000037
-:10B0A0008F42030424420001AF4203048F42030491
-:10B0B0008F420044AF42007C3C0100010037082170
-:10B0C000A02040F2AF4000788F42031824420001D4
-:10B0D000AF4203188F4203188FBF00608FBE005C21
-:10B0E0008FB500588FB300548FB200508FB1004C11
-:10B0F0008FB0004803E0000827BD006803E00008A7
-:10B100000000000000000000000000008F42013C31
-:10B11000AF8200C08F42013CAF8200C48F42013C2D
-:10B12000AF8200C88F420138AF8200D08F42013811
-:10B13000AF8200D48F42013803E00008AF8200D80C
-:10B1400027BDFFE02784020824050200AFBF0018D6
-:10B150000C002BBF240600088C0202040C004012D5
-:10B16000AF8202103C0200018C426D94304200021A
-:10B170001040000E000020218C060248240200022C
-:10B180003C010001AC226D980C0051042405000222
-:10B19000000020218C060248240200013C0100012D
-:10B1A000AC226D9810000011240500018C060248A5
-:10B1B000240200043C010001AC226D980C005104F3
-:10B1C000240500043C0200018C426D9430420001D1
-:10B1D00010400008240200013C010001AC226D98DF
-:10B1E00000002021240500013C06601B0C005104D6
-:10B1F000000000003C040001248469D08F4201500B
-:10B200008F4301543C0500088F4601580002164048
-:10B21000000319403463040300431025000633C0C3
-:10B2200000461025AF82021CAFA00010AFA0001492
-:10B230008F86021C34A502000C002B3B0000382135
-:10B240003C010001AC206D903C010001AC206DA8D8
-:10B250008FBF001803E0000827BD002027BDFFE0D6
-:10B260003C05000834A50300AFBF0018AFA00010D4
-:10B27000AFA000148F8602003C040001248469DC26
-:10B280000C002B3B000038218F42041024420001A7
-:10B29000AF4204108F4204108FBF001803E0000873
-:10B2A00027BD002027BDFFD8AFBF0020AFB1001CD5
-:10B2B000AFB000188F4203A424420001AF4203A4A0
-:10B2C0008F4203A48F9002208F8200E0AFA2001073
-:10B2D0008F8200E4AFA200148F8600C48F8700C85D
-:10B2E0003C040001248469E80C002B3B0200282167
-:10B2F0003C04400002041024504000B43C0401000F
-:10B300008F4203BC24420001AF4203BC8F4203BC06
-:10B310008F8700C48F8300C88F42014800671823BD
-:10B320000043102B10400003000000008F42014832
-:10B330000062182110600005000000008F42014CDF
-:10B340000043102B1040000B000000008F8200E033
-:10B350008F430124AF42011CAF4301148F820220AE
-:10B360003C0308FF3463FFFB00431024100000CEB1
-:10B37000004410258F8202203C0308FF3463FFFF46
-:10B380000043102434420004AF8202208F8200E088
-:10B390008F430124AF42011CAF4301148F8600C8C4
-:10B3A0008F8401208F8301241000000500002821D4
-:10B3B0001462000224620020276248000040182125
-:10B3C0001064000C30A200FF8C62001830420003B1
-:10B3D0001040FFF727624FE08F4203D024050001A1
-:10B3E00024420001AF4203D08F4203D08C66000894
-:10B3F00030A200FF1440005800000000934205C432
-:10B4000014400055000000008F8700C48F8800E0C2
-:10B410008F8400E42402FFF8010240240104102379
-:10B42000000218C3046200012463020010600005DA
-:10B430002402000110620009000000001000001F3B
-:10B44000000000008F4203C000E0302124420001D0
-:10B45000AF4203C0100000408F4203C08F4203C4BC
-:10B4600024420001AF4203C48C8600008F42014891
-:10B470008F4303C400E618230043102B1040000440
-:10B480002C62233F8F420148006218212C62233F27
-:10B4900014400031000000008F42020C24420001E1
-:10B4A000AF42020C8F42020C00E0302124820008DF
-:10B4B000AF8200E410000028AF8200E88F4203C88A
-:10B4C00024420001AF4203C88F4203C88C850000AC
-:10B4D0008F42014800A718230043102B104000039F
-:10B4E000000000008F420148006218218F42014C89
-:10B4F0000043102B5440000A00A030218F42020C60
-:10B5000024420001AF42020C8F42020C2482000848
-:10B51000AF8200E48F8400E41488FFECAF8400E87D
-:10B520001488000D27623000148200022482FFF884
-:10B5300027623FF8944300063C02001F3442FFFF9D
-:10B5400000C330210046102B104000030000000013
-:10B550008F42014800C23023AF8600C88F8300C4E9
-:10B560008F42014800C318230043102B10400003F2
-:10B57000000000008F4201480062182110600005A1
-:10B58000000000008F42014C0043102B5040000887
-:10B590003C02FDFF8F8202203C0308FF3463FFFB67
-:10B5A000004310243C0340001000003F00431025DE
-:10B5B0008F4303CC3442FFFF0282A02424630001A6
-:10B5C000AF4303CC100000398F4203CC0204102497
-:10B5D0001040000E3C1102008F4203A824420001DB
-:10B5E000AF4203A88F4203A88F8202203C0308FFCA
-:10B5F0003463FFFF00431024004410250C003DAFCE
-:10B60000AF82022010000029000000000211102467
-:10B61000504000083C1104008F4203AC244200015A
-:10B62000AF4203AC0C003DAF8F4203AC10000019D9
-:10B6300000000000021110241040001C0000000057
-:10B640008F83022424021402146200093C050008BE
-:10B650003C040001248469F4AFA00010AFA00014E2
-:10B660008F86022434A505000C002B3B00003821F6
-:10B670008F4203B024420001AF4203B08F4203B0B7
-:10B680008F82022002002021344200020C004E9CD6
-:10B69000AF8202208F8202203C0308FF3463FFFF49
-:10B6A0000043102400511025AF8202208FBF0020DC
-:10B6B0008FB1001C8FB0001803E0000827BD0028E0
-:10B6C00003E00008000000003C0200018C426DA86D
-:10B6D00027BDFFB0AFBF0048AFBE0044AFB50040CC
-:10B6E000AFB3003CAFB20038AFB100341040000F30
-:10B6F000AFB000303C04000124846A003C0500081F
-:10B70000AFA00010AFA000148F86022034A5060061
-:10B71000240200013C010001AC206DA83C010001A5
-:10B72000AC226D9C0C002B3B000038213C037FFFBA
-:10B730008C0202683463FFFF3C04FDFF00431024C9
-:10B74000AC0202688F4200043484FFFF30420002E2
-:10B75000104000920284A0243C040600348420009F
-:10B760008F420004000028212403FFFD0043102421
-:10B77000AF420004AFA400208F5E001827AA00206B
-:10B78000240200FF13C20002AFAA002C27C500014B
-:10B790008C02022800A090211642000E001E38C024
-:10B7A0008F42033C24420001AF42033C8F42033CE2
-:10B7B0008C0202283C040001248469983C0500099D
-:10B7C000AFA00014AFA200108FA600201000006DE3
-:10B7D00034A5050000F710218FA300208FA40024BA
-:10B7E000AC4304C0AC4404C48F8300548F82005423
-:10B7F000247003E8020210232C4203E91040001BCE
-:10B800000000982100E08821263504C08F4401788B
-:10B810008F45017C02201821240A0004AFAA0010E1
-:10B82000AFB200148F48000C0000102102F5302147
-:10B83000AFA800188F48010C2407000800A3282196
-:10B8400000A3482B008220210100F8090089202153
-:10B8500054400006241300018F820054020210237A
-:10B860002C4203E91440FFE900000000326200FFAF
-:10B8700054400017AF5200188F4203782442000151
-:10B88000AF4203788F4203788F8201208FAA002C69
-:10B89000AFA200108F8201243C040001248469A41B
-:10B8A0003C050009AFA200148D46000010000035D1
-:10B8B00034A506008F42030824130001244200012E
-:10B8C000AF4203088F4203081000001E326200FFDF
-:10B8D0008F8300548F820054247003E802021023E7
-:10B8E0002C4203E910400016000098213C1500206E
-:10B8F000241100108F42000C8F4401608F450164B9
-:10B900008F860120AFB10010AFB200140055102592
-:10B91000AFA200188F42010C240700080040F8096C
-:10B9200024C6001C1440FFE3000000008F82005476
-:10B93000020210232C4203E91440FFEE0000000035
-:10B94000326200FF14400011000000008F420378B3
-:10B9500024420001AF4203788F4203788F82012096
-:10B960008FAA002CAFA200108F8201243C0400019A
-:10B97000248469AC3C050009AFA200148D46000088
-:10B9800034A507000C002B3B03C038218F4202EC8A
-:10B9900024420001AF4202EC8F4202EC8FBF00480C
-:10B9A0008FBE00448FB500408FB3003C8FB200388B
-:10B9B0008FB100348FB0003003E0000827BD005085
-:10B9C0003C0200018C426DA827BDFFE01440000D31
-:10B9D000AFBF00183C04000124846A0C3C05000839
-:10B9E000AFA00010AFA000148F86022034A507007E
-:10B9F000240200013C010001AC226DA80C002B3B8D
-:10BA0000000038213C02000402C21024104000074C
-:10BA1000000000008F8202203C0308FF3463FFFF18
-:10BA20000043102434420008AF8202203C0500018C
-:10BA30008CA56D982402000114A2000700002021AB
-:10BA40000C00529B24050001AC02026C8C03026CBA
-:10BA5000100000063C0200070C00529B0000202151
-:10BA6000AC0202688C0302683C02000700621824E2
-:10BA70003C0200025062000D3C0205F50043102B11
-:10BA8000144000063C0200043C0200011062000960
-:10BA90003C0200981000000B000000001462000936
-:10BAA0003C023B9A100000043442CA00100000021D
-:10BAB0003442E10034429680AF4201FC8F4201FCE7
-:10BAC000AEE200648FBF001803E0000827BD00202D
-:10BAD0000000000000000000000000000086102BA5
-:10BAE000504000010087202300C410230002484377
-:10BAF0000125102B1040001B00091040008240213E
-:10BB00000088102B104000070000182194820000CC
-:10BB100024840002006218210088102B1440FFFBCF
-:10BB2000000000000060202100C7302300A910237E
-:10BB30000002104000C2282100C5102B1040000751
-:10BB40000000182194C2000024C6000200621821DF
-:10BB500000C5102B1440FFFB000000001000000D7A
-:10BB60000083202100051040008228210085102B31
-:10BB70001040000700001821948200002484000275
-:10BB8000006218210085102B1440FFFB000000000C
-:10BB90000060202100041C023082FFFF006220218F
-:10BBA00000041C023082FFFF0062202103E0000835
-:10BBB0003082FFFF03E00008000000000080282121
-:10BBC00030A200011040002B3C03001F3463FFFF34
-:10BBD00024A200040062102B544000070065102BC3
-:10BBE00090A2000190A4000390A3000090A5000281
-:10BBF0001000002A00441021104000030000000043
-:10BC00008F42014800A2282390A4000024A500012F
-:10BC10000065102B10400003000000008F42014817
-:10BC200000A2282390A2000024A500010002120017
-:10BC3000008220210065102B10400003000000004E
-:10BC40008F42014800A2282390A2000024A50001F1
-:10BC5000008220210065102B10400003000000002E
-:10BC60008F42014800A2282390A200001000002D5E
-:10BC7000000212003463FFFF24A200040062102BB4
-:10BC80005440000A0065102B90A2000090A400020E
-:10BC900090A3000190A500030044102100021200AF
-:10BCA00000651821100000200043202110400003EF
-:10BCB000000000008F42014800A2282390A200004B
-:10BCC00024A50001000222000065102B1040000393
-:10BCD000000000008F42014800A2282390A200002B
-:10BCE00024A50001008220210065102B10400003D4
-:10BCF000000000008F42014800A2282390A200000B
-:10BD000024A5000100021200008220210065102BF2
-:10BD100010400003000000008F42014800A22823C9
-:10BD200090A200000082202100041C023082FFFF4C
-:10BD30000062202100041C023082FFFF00622021EB
-:10BD400003E000083082FFFF000000008F82022025
-:10BD500034420002AF8202203C0200028C428FF883
-:10BD60003042400010400054240400018F82020041
-:10BD700024067FFF8F830200304500022402FFFD6E
-:10BD800000621824AF830200AF8402048F83005442
-:10BD90008F82005410000002246300018F8200543F
-:10BDA000006210232C4200021440FFFC000000003F
-:10BDB0008F8202241444004D0004204000C4102B44
-:10BDC0001040FFF1000000008F82020000451025A6
-:10BDD000AF8202008F82022034428000AF820220B4
-:10BDE0008F8300548F8200541000000224630001EE
-:10BDF0008F820054006210232C4200021440FFFC8A
-:10BE0000000000008F8202203C0300040043102445
-:10BE10001440000F000000008F8202203C03FFFF4F
-:10BE200034637FFF00431024AF8202208F830054CD
-:10BE30008F82005410000002246300018F8200549E
-:10BE4000006210232C4200021440FFFC000000009E
-:10BE50008F8202203C030004004310241440000D94
-:10BE6000000000008F82022034428000AF82022056
-:10BE70008F8300548F82005410000002246300015D
-:10BE80008F820054006210232C4200021440FFFCF9
-:10BE9000000000008F8202203C03000400431024B5
-:10BEA0001040001B000010218F830220240200019B
-:10BEB000100000153C04F7008F8202203C04F700BC
-:10BEC00000441025AF8202208F8202202403FFFD50
-:10BED00000431024AF8202208F8202203C03030023
-:10BEE000004310241440000300000000100000086C
-:10BEF000000010218F82022034420002AF82022013
-:10BF00008F8302202402000100641825AF830220E1
-:10BF100003E0000800000000000020213C050100B3
-:10BF200024020001AF80021CAF820200AF82022017
-:10BF300027625000AF8200C027625000AF8200C469
-:10BF400027625000AF8200C827625000AF8200D045
-:10BF500027625000AF8200D427625000AF8200D821
-:10BF600027623000AF8200E027623000AF8200E439
-:10BF700027623000AF8200E827622800AF8200F01D
-:10BF800027622800AF8200F427622800AF8200F801
-:10BF9000000418C02484000103631021AC45300460
-:10BFA00003631021AC403000288202001440FFF9E6
-:10BFB000000418C000002021000418C024840001DF
-:10BFC00003631021AC40280403631021AC40280017
-:10BFD000288201001440FFF9000418C0AF80023C21
-:10BFE0002403008024040100AC60000024630004EA
-:10BFF0000064102B5440FFFDAC6000008F830040B4
-:10C000003C02F000006218243C0250001062000C58
-:10C010000043102B144000063C0260003C0240002C
-:10C020001062000824020800100000080000000050
-:10C030001062000424020800100000040000000048
-:10C04000240207003C010001AC226DAC03E00008B3
-:10C05000000000003C0200018C426DBC27BDFFD0F7
-:10C06000AFBF002CAFB20028AFB10024AFB00020AA
-:10C070003C01000110400005AC206D940C004D9E69
-:10C08000000000003C010001AC206DBC8F83005417
-:10C090008F82005410000002246300648F820054D9
-:10C0A000006210232C4200651440FFFC00000000D9
-:10C0B0000C004DB9000000002404000100002821FC
-:10C0C00027A60018340280000C0045BEA7A2001865
-:10C0D0008F8300548F820054100000022463006498
-:10C0E0008F820054006210232C4200651440FFFC34
-:10C0F00024040001240500010C00457C27A600183B
-:10C100008F8300548F820054100000022463006467
-:10C110008F820054006210232C4200651440FFFC03
-:10C1200024040001240500010C00457C27A600180A
-:10C130008F8300548F820054100000022463006437
-:10C140008F820054006210232C4200651440FFFCD3
-:10C15000240400013C06000124C66F240C00457C29
-:10C16000240500028F8300548F82005410000002C7
-:10C17000246300648F820054006210232C42006507
-:10C180001440FFFC24040001240500033C100001BE
-:10C1900026106F260C00457C0200302197A600185F
-:10C1A0003C07000194E76F243C04000124846AE00A
-:10C1B000AFA00014960200003C05000D34A501005C
-:10C1C0000C002B3BAFA2001097A200181040004DAE
-:10C1D00024036040960200003042FFF01443000C3C
-:10C1E000240200203C03000194636F241462000BBE
-:10C1F00024027830240200033C010001AC226D943B
-:10C20000240200053C0100011000003FAC226F3405
-:10C210003C03000194636F24240278301462000C04
-:10C22000240300103C02000194426F263042FFF0CC
-:10C2300014430007240200033C010001AC226D946A
-:10C24000240200063C0100011000002FAC226F34D4
-:10C250003C0200018C426D943C03000194636F2406
-:10C26000344200013C010001AC226D94240200150F
-:10C270001462000B000000003C02000194426F2693
-:10C280003042FFF03843F4202C6300013842F43090
-:10C290002C420001006218251460001B24020003D8
-:10C2A0003C03000194636F2424027810146200168A
-:10C2B000240200023C02000194426F263042FFF04B
-:10C2C00014400011240200021000000F2402000498
-:10C2D0003C0200018C426D94344200083C01000194
-:10C2E000AC226D941000005E240200043C020001A8
-:10C2F0008C426D94344200043C010001100000AFF8
-:10C30000AC226D94240200013C010001AC226F407C
-:10C310003C0200018C426D9430420002144000B295
-:10C320003C09FFF024020E00AF8202388F840054D3
-:10C330008F820054240300083C010001AC236D9857
-:10C3400010000002248401F48F8200540082102324
-:10C350002C4201F51440FFFC3C0200C8344201FBB2
-:10C36000AF8202388F8300548F8200541000000285
-:10C37000246301F48F820054006210232C4201F5E3
-:10C380001440FFFC00008021241200012411000948
-:10C390000C004482000000003C010001AC326DB48E
-:10C3A0000C004547000000003C0200018C426DB4C7
-:10C3B0001451FFFB3C0200C8344201F6AF82023840
-:10C3C0008F8300548F820054100000022463000AFF
-:10C3D0008F820054006210232C42000B1440FFFC9B
-:10C3E000000000008F820220240400013442000279
-:10C3F000AF8202208F83020024057FFF2402FFFD0D
-:10C4000000621824AF830200AF8402048F830054BB
-:10C410008F82005410000002246300018F820054B8
-:10C42000006210232C4200021440FFFC00000000B8
-:10C430008F8202241444000534028000000420404E
-:10C4400000A4102B1040FFF0340280001082FFA0E7
-:10C45000261000012E0200141440FFCD2402000417
-:10C460003C010001AC226D980000802124120009DB
-:10C470003C11FFFF36313F7F0C004482000000007A
-:10C48000240200013C010001AC226DB40C004547C0
-:10C49000000000003C0200018C426DB41452FFFB0E
-:10C4A000000000008F82004400511024344250806C
-:10C4B000AF8200448F8300548F820054100000022A
-:10C4C0002463000A8F820054006210232C42000B68
-:10C4D0001440FFFC000000008F8200440051102433
-:10C4E0003442F080AF8200448F8300548F82005426
-:10C4F000100000022463000A8F820054006210239F
-:10C500002C42000B1440FFFC000000008F82022030
-:10C510003C03F70000431025AF8202208F830054B4
-:10C520008F82005410000002246300648F82005444
-:10C53000006210232C4200651440FFFC0000000044
-:10C540008F8202202404000134420002AF820220C4
-:10C550008F83020024057FFF2402FFFD0062182460
-:10C56000AF830200AF8402048F8300548F82005493
-:10C5700010000002246300018F8200540062102327
-:10C580002C4200021440FFFC000000008F820224B5
-:10C5900014440005340280000004204000A4102B45
-:10C5A0001040FFF0340280001082FF50261000017E
-:10C5B0002E0200641440FFB0000000003C020001A5
-:10C5C0008C426D9430420004144000073C09FFF097
-:10C5D0008F8200443C03FFFF34633F7F00431024FD
-:10C5E000AF8200443C09FFF03529BDC03C06000184
-:10C5F0008CC66D943C04000124846AE0240200018E
-:10C600003C010001AC226D9C8F8200543C0700016C
-:10C610008CE76F403C03000194636F243C080001E9
-:10C6200095086F263C05000D34A501003C01000172
-:10C63000AC206D98004910213C010001AC226F3004
-:10C64000AFA300100C002B3BAFA800148FBF002C31
-:10C650008FB200288FB100248FB0002003E00008C3
-:10C6600027BD003027BDFFE83C0500018CA56D9873
-:10C67000240600042402000114A20014AFBF00101D
-:10C680003C0200028C428FFC3042800010400005CA
-:10C690003C04000F3C0300018C636F401000000558
-:10C6A000348442403C0400043C0300018C636F402E
-:10C6B000348493E024020005146200160000000098
-:10C6C0003C04003D10000013348409003C020002C9
-:10C6D0008C428FF830428000104000053C04001E60
-:10C6E0003C0300018C636F4010000005348484809B
-:10C6F0003C04000F3C0300018C636F4034844240D3
-:10C700002402000514620003000000003C04007ACB
-:10C71000348412003C0200018C426F308F8300543D
-:10C7200000441021004310230044102B1440004CFF
-:10C73000000000003C0200018C426DA01440004843
-:10C74000000000003C01000110C00025AC206DB0CD
-:10C750003C0900018D296D94240700013C04400030
-:10C760003C08000225088FFC250AFFFC0005284232
-:10C7700014A0000224C6FFFF2405000800A910240D
-:10C78000104000100000000014A700080000000086
-:10C790008D020000004410241040000A0000000038
-:10C7A0003C01000110000007AC256DB08D42000077
-:10C7B0000044102410400003000000003C01000170
-:10C7C000AC276DB03C0200018C426DB00006182B06
-:10C7D0002C420001004310245440FFE5000528428C
-:10C7E0008F8200543C0300018C636DB03C0100015A
-:10C7F000AC226F301060003B240200053C030001B6
-:10C800008C636F403C010001AC256D9814620012EE
-:10C81000240200013C0200028C428FF83C032000FD
-:10C820003463500000431024144000062402000129
-:10C830003C010001AC206F1C3C010001AC226D9852
-:10C84000240200013C010001AC226E243C010001E5
-:10C85000AC226DA4240200013C010001AC226D9CBD
-:10C860003C0200018C426DB01040001E0000000030
-:10C870003C0200018C426D9C104000082402000123
-:10C880003C010001AC206D9CAEE204B83C0100010B
-:10C89000AC206E1C3C010001AC226DD48EE304B8C8
-:10C8A0002402000810620005240200010C00423935
-:10C8B000000000001000000B000000003C0300011D
-:10C8C0008C636D98106200072402000E3C03000286
-:10C8D0008C638F9010620003000000000C004E9CDF
-:10C8E0008F8402208FBF001003E0000827BD0018CE
-:10C8F00027BDFFE03C03FDFF3C0400018C846D98E4
-:10C900003C0200018C426DC03463FFFF0283A0240F
-:10C9100014820006AFBF00188EE304B83C02000189
-:10C920008C426DC410620006000000008EE204B864
-:10C930003C010001AC246DC03C010001AC226DC47F
-:10C940003C0300018C636D98240200021062019C7C
-:10C950002C62000310400005240200011062000A4E
-:10C960000000000010000226000000002402000465
-:10C97000106200B6240200081062010A24020001BD
-:10C980001000021F000000008EE204B82443FFFFE5
-:10C990002C6200081040021C000310803C010001C2
-:10C9A000002208218C226AF80040000800000000E4
-:10C9B0003C0300018C636F402402000514620010E8
-:10C9C000000000003C0200018C426DA410400008F1
-:10C9D000240200030C004482000000002402000234
-:10C9E000AEE204B83C01000110000002AC206DA4CE
-:10C9F000AEE204B83C01000110000203AC206D302F
-:10CA00000C004482000000003C0200018C426DA436
-:10CA10003C010001AC206D301440017A2402000278
-:10CA20001000019D240200073C0300018C636F404D
-:10CA30002402000514620003240200013C010001ED
-:10CA4000AC226DD00C0045FF000000003C0300014B
-:10CA50008C636DD010000174240200113C050001AC
-:10CA60008CA56D983C0600028CC68FFC0C0051040E
-:10CA700000002021240200053C010001AC206DA42F
-:10CA8000100001E1AEE204B83C04000124846AEC29
-:10CA90003C05000F34A501000000302100003821C2
-:10CAA000AFA000100C002B3BAFA00014100001D66B
-:10CAB000000000008F8202203C0300040043102489
-:10CAC00014400175240200078F8300543C020001CA
-:10CAD0008C426F282463D8F0004310232C42271087
-:10CAE00014400003240200013C010001AC226D9CB3
-:10CAF0003C0200028C428FFC30425000104001C2C8
-:10CB0000000000008F820220304280001040017D32
-:10CB10000000000010000175000000003C0500014D
-:10CB20008CA56D980C00529B000020210C00551B19
-:10CB3000000020213C0300028C638FF4046101B0EB
-:10CB4000240200013C02000800621024104000068C
-:10CB5000000000008F8202143C03FFFF00431024FA
-:10CB6000100000053442251F8F8202143C03FFFF92
-:10CB7000004310243442241FAF8202148F8202200B
-:10CB80003C03020034420002AF820220240200086B
-:10CB9000AEE204B88F8202200283A0253C03000489
-:10CBA0000043102414400016000000003C02000264
-:10CBB0008C428FFC304250001040000D00000000FD
-:10CBC0008F820220304280001040000600000000EA
-:10CBD0008F8202203C03FFFF34637FFF10000003BD
-:10CBE000004310248F82022034428000AF82022052
-:10CBF0008F8202203C03F70000431025AF82022001
-:10CC00003C0300018C636F40240200051462000A9B
-:10CC1000000000003C02000194426F2624429FBCA9
-:10CC20002C420004104000042404001824050002D3
-:10CC30000C004DDB240600200C003E6D00000000BF
-:10CC40003C01000110000170AC206E208EE204B89F
-:10CC50002443FFFF2C6200081040016B000310808A
-:10CC60003C010001002208218C226B1800400008C2
-:10CC7000000000000C004547000000003C030001DC
-:10CC80008C636DB4100000E8240200093C0200022D
-:10CC90008C428FF830424000104000040000000039
-:10CCA0008F820044100000063442F0808F820044DE
-:10CCB0003C03FFFF34633F7F004310243442A080D5
-:10CCC000AF8200448F830054100000EA2402000465
-:10CCD0008F8300543C0200018C426F282463D8F0FB
-:10CCE000004310232C422710144001472402000562
-:10CCF000100000D8000000008F8202203C03F700E3
-:10CD000000431025AF820220AF8002043C010002E4
-:10CD1000100000D6AC208FE08F8300543C0200014D
-:10CD20008C426F282463FFF6004310232C42000A34
-:10CD30001440013524020007100000D70000000055
-:10CD40000C003F50000000001040012D24020001A3
-:10CD50008F8202143C03FFFF3C0400018C846F1C93
-:10CD6000004310243442251FAF820214240200081D
-:10CD700010800005AEE204B83C0200018C426E4413
-:10CD800010400064240200018F8202203C0300084E
-:10CD9000004310241040006A3C020200100000789A
-:10CDA000000000008EE204B82443FFFF2C6200075D
-:10CDB00010400115000310803C01000100220821F1
-:10CDC0008C226B3800400008000000000C003DAFD2
-:10CDD000000000003C010001AC206D9CAF8002040B
-:10CDE0003C0100020C004482AC208FE024020001D0
-:10CDF0003C010001AC226DB42402000210000102CB
-:10CE0000AEE204B80C004547000000003C030001FE
-:10CE10008C636DB410000084240200093C020002FF
-:10CE20008C428FF830424000104000033C0200C8A2
-:10CE300010000002344201F6344201FEAF82023893
-:10CE40008F8300541000008B240200048F83005451
-:10CE50003C0200018C426F282463D8F00043102369
-:10CE60002C422710144000E824020005100000792D
-:10CE7000000000008F8202203C03F70000431025D1
-:10CE8000AF820220AF8002043C0100021000007754
-:10CE9000AC208FE08F8300543C0200018C426F284D
-:10CEA0002463FFF6004310232C42000A144000D6EE
-:10CEB0002402000710000078000000000C003F5022
-:10CEC00000000000104000CE240200018F820214F6
-:10CED0003C03FFFF3C0400018C846F1C00431024C2
-:10CEE0003442251FAF820214240200081080000F74
-:10CEF000AEE204B83C0200018C426E441440000BC8
-:10CF0000000000008F82022034420002AF82022023
-:10CF1000240200013C010002AC228F900C004E9CC8
-:10CF20008F84022010000016000000008F82022073
-:10CF30003C03000800431024144000113C0202008E
-:10CF40000282A0252402000E3C010002AC228F9038
-:10CF50000C00551B000020218F8202203442000269
-:10CF60000C003E6DAF8202203C0500018CA56D983F
-:10CF70000C00529B00002021100000A300000000C4
-:10CF80003C0200018C426E441040009F00000000F3
-:10CF90003C0200018C426E402442FFFF3C01000134
-:10CFA000AC226E4014400098240200023C010001B3
-:10CFB000AC206E443C01000110000093AC226E4096
-:10CFC0008EE204B82443FFFF2C6200071040008E5D
-:10CFD000000310803C010001002208218C226B58C4
-:10CFE00000400008000000003C0200018C426DA4DB
-:10CFF00010400018240200050C00448200000000CC
-:10D0000024020002AEE204B83C0100011000007EE0
-:10D01000AC206DA40C004963000000003C0300013B
-:10D020008C636DD42402000614620077240200038E
-:10D0300010000075AEE204B83C0500018CA56D98A7
-:10D040003C0600028CC68FF80C0051040000202121
-:10D05000240200051000006CAEE204B88F820220AA
-:10D060003C03F70000431025AF8202208F83005459
-:10D0700024020006AEE204B83C0100011000006288
-:10D08000AC236F288F8202203C030004004310244D
-:10D0900010400003240200071000005BAEE204B859
-:10D0A0008F8300543C0200018C426F282463D8F027
-:10D0B000004310232C4227101440000324020001D7
-:10D0C0003C010001AC226D9C3C0200028C428FF8B6
-:10D0D000304250001040004C000000008F820220BF
-:10D0E0003042800010400007000000008F820220C4
-:10D0F0003C03FFFF34637FFF004310241000004215
-:10D10000AF8202208F820220344280001000003E55
-:10D11000AF8202203C0500018CA56D980C00529B4B
-:10D12000000020210C00551B000020213C020002C1
-:10D130008C428FF004410032240200018F820214DD
-:10D140003C03FFFF004310243442251FAF8202142A
-:10D1500024020008AEE204B88F82022034420002AA
-:10D16000AF8202208F8202203C030004004310247F
-:10D1700014400016000000003C0200028C428FF8B0
-:10D18000304250001040000D000000008F8202204D
-:10D190003042800010400006000000008F82022014
-:10D1A0003C03FFFF34637FFF1000000300431024A3
-:10D1B0008F82022034428000AF8202208F820220C0
-:10D1C0003C03F70000431025AF8202203C0200011F
-:10D1D00094426F2624429FBC2C420004104000045D
-:10D1E00024040018240500020C004DDB2406002056
-:10D1F0000C003E6D00000000100000030000000065
-:10D200003C010001AC226D9C8FBF001803E00008B8
-:10D2100027BD00208F8202008F8202208F82022091
-:10D2200034420004AF8202208F8202003C050001DC
-:10D230008CA56D9834420004AF82020024020002E3
-:10D2400010A2004B2CA20003104000052402000194
-:10D2500010A2000A00000000100000B10000000051
-:10D260002402000410A200722402000810A200850B
-:10D270003C02F0FF100000AA000000008F83005065
-:10D280003C02F0FF3442FFFF3C0400018C846F40FD
-:10D29000006218243C0207000062182524020E00D8
-:10D2A0002484FFFB2C840002AF830050AF85020072
-:10D2B000AF85022014800006AF8202388F820044BE
-:10D2C0003C03FFFF34633F7F00431024AF820044E0
-:10D2D0003C0300018C636F402402000514620004CB
-:10D2E000000000008F82004434425000AF820044AE
-:10D2F0003C0200018C426D883C0300018C636F404E
-:10D30000344200222463FFFC2C6300021460000CF2
-:10D31000AF8202003C0200018C426DAC3C03000174
-:10D320008C636D903C0400018C846D8C34428000D1
-:10D3300000621825006418251000000A34620002FB
-:10D340003C0200018C426D903C0300018C636DAC8B
-:10D350003C0400018C846D8C004310250044102592
-:10D3600034420002AF8202201000002F240200018C
-:10D3700024020E01AF8202388F8300503C02F0FF7E
-:10D380003442FFFF3C0400018C846F1C00621824AF
-:10D390003C020D000062182524020001AF830050FA
-:10D3A000AF820200AF820220108000053C033F00E4
-:10D3B0003C0200018C426D80100000043463007058
-:10D3C0003C0200018C426D803463007200431025E2
-:10D3D000AF8202003C0300018C636D843C02F700C5
-:10D3E000006218253C0200018C426D903C04000153
-:10D3F0008C846DAC3C0500018CA56F40004310256A
-:10D4000000441025AF8202202402000514A2000669
-:10D41000240200018F8200442403AFFF0043102444
-:10D42000AF820044240200011000003DAF820238A8
-:10D430008F8300503C02F0FF3442FFFF3C040001A8
-:10D440008C846F1C006218243C020A0000621825BC
-:10D4500024020001AF830050AF8202001080001E42
-:10D46000AF8202203C0200018C426E441440001A3C
-:10D470003C033F003C0200018C426D801000001A0A
-:10D48000346300E08F8300503C0400018C846F1CE7
-:10D490003442FFFF006218241080000FAF83005059
-:10D4A0003C0200018C426E441440000B3C043F00DF
-:10D4B0003C0300018C636D80348400E02402000191
-:10D4C000AF820200AF82022000641825AF83020001
-:10D4D000100000083C05F7003C0200018C426D8002
-:10D4E0003C033F00346300E200431025AF8202009A
-:10D4F0003C05F70034A580003C0300018C636D847B
-:10D500003C0200018C426D903C0400018C846DACA7
-:10D51000006518250043102500441025AF82022025
-:10D5200003E00008000000003C0300018C636DB4C0
-:10D530003C0200018C426DB810620003240200021C
-:10D540003C010001AC236DB81062001D2C62000389
-:10D55000104000252402000114620023240200046C
-:10D560003C0300018C636D981062000624020008E1
-:10D570001462000C3C0200C8344201FB1000000998
-:10D58000AF82023824020E01AF8202388F8200443B
-:10D590003C03FFFF34633F7F00431024344200808C
-:10D5A000AF8200448F830054240200023C0100013A
-:10D5B000AC226DB43C0100011000000BAC236F2CB9
-:10D5C0008F8300543C0200018C426F2C2463D8F0FE
-:10D5D000004310232C4227101440000324020009AA
-:10D5E0003C010001AC226DB403E000080000000023
-:10D5F00000000000000000000000000027BDFFD870
-:10D60000AFB2001800809021AFB3001C00A0982199
-:10D61000AFB1001400C08821AFB00010000080211D
-:10D62000AFBF0020A62000000C004D7824040001AC
-:10D63000261000012E0200201440FFFB0000000015
-:10D640000C004D78000020210C004D7824040001CE
-:10D650000C004D78240400010C004D7800002021BE
-:10D66000241000100250102410400002000020215D
-:10D67000240400010C004D78001080421600FFFACF
-:10D6800002501024241000100270102410400002D8
-:10D6900000002021240400010C004D78001080427D
-:10D6A0001600FFFA027010240C004DB934108000EF
-:10D6B0000C004DB9000000000C004D5800000000A7
-:10D6C00050400005001080429622000000501025B6
-:10D6D000A6220000001080421600FFF700000000A4
-:10D6E0000C004DB9000000008FBF00208FB3001C5C
-:10D6F0008FB200188FB100148FB0001003E0000843
-:10D7000027BD002827BDFFD8AFB1001400808821B5
-:10D71000AFB2001800A09021AFB3001C00C0982148
-:10D72000AFB0001000008021AFBF00200C004D788A
-:10D7300024040001261000012E0200201440FFFBEB
-:10D74000000000000C004D78000020210C004D78F6
-:10D75000240400010C004D78000020210C004D78BD
-:10D760002404000124100010023010241040000294
-:10D7700000002021240400010C004D78001080429C
-:10D780001600FFFA0230102424100010025010245A
-:10D790001040000200002021240400010C004D78FC
-:10D7A000001080421600FFFA025010240C004D7841
-:10D7B000240400010C004D7800002021341080006A
-:10D7C000966200000050102410400002000020214A
-:10D7D000240400010C004D78001080421600FFF870
-:10D7E000000000000C004DB9000000008FBF0020B9
-:10D7F0008FB3001C8FB200188FB100148FB00010CF
-:10D8000003E0000827BD00283C0400018C846DD093
-:10D810003C0200018C426E1827BDFFD8AFBF00202C
-:10D82000AFB1001C10820003AFB000183C01000132
-:10D83000AC246E183C0300018C636F402402000589
-:10D84000146200052483FFFF0C0049630000000000
-:10D850001000034C000000002C620013104003492C
-:10D86000000310803C010001002208218C226B8003
-:10D8700000400008000000000C004DB900008021AD
-:10D8800034028000A7A2001027B100100C004D78D0
-:10D8900024040001261000012E0200201440FFFB8A
-:10D8A000000000000C004D78000020210C004D7895
-:10D8B000240400010C004D78000020210C004D785C
-:10D8C0002404000124100010320200011040000264
-:10D8D00000002021240400010C004D78001080423B
-:10D8E0001600FFFA32020001241000100C004D78DF
-:10D8F00000002021001080421600FFFC0000000004
-:10D900000C004D78240400010C004D78000020210B
-:10D9100034108000962200000050102410400002B5
-:10D9200000002021240400010C004D7800108042EA
-:10D930001600FFF8000000000C004DB900000000C8
-:10D940001000030E2402000227B10010A7A000104F
-:10D95000000080210C004D782404000126100001F5
-:10D960002E0200201440FFFB000000000C004D7848
-:10D97000000020210C004D78240400010C004D789B
-:10D98000240400010C004D78000020212410001018
-:10D990003202000110400002000020212404000196
-:10D9A0000C004D78001080421600FFFA3202000190
-:10D9B000241000100C004D7800002021001080423F
-:10D9C0001600FFFC000000000C004DB93410800070
-:10D9D0000C004DB9000000000C004D580000000084
-:10D9E0005040000500108042962200000050102593
-:10D9F000A6220000001080421600FFF70000000081
-:10DA00000C004DB90000000097A2001030428000C9
-:10DA1000144002DC24020003100002D800000000C1
-:10DA200024021200A7A2001027B1001000008021DC
-:10DA30000C004D7824040001261000012E02002065
-:10DA40001440FFFB000000000C004D780000202176
-:10DA50000C004D78240400010C004D7800002021BA
-:10DA60000C004D7824040001241000103202000143
-:10DA70001040000200002021240400010C004D7819
-:10DA8000001080421600FFFA32020001241000103C
-:10DA90000C004D7800002021001080421600FFFC91
-:10DAA000000000000C004D78240400010C004D78AB
-:10DAB0000000202134108000962200000050102425
-:10DAC0001040000200002021240400010C004D78C9
-:10DAD000001080421600FFF8000000000C004DB955
-:10DAE000000000008F8300541000029624020004FE
-:10DAF0008F8300543C0200018C426F3C2463FF9CE6
-:10DB0000004310232C4200641440029E24020002B1
-:10DB10003C0300018C636F40106202972C6200038B
-:10DB20001440029624020011240200031062000532
-:10DB300024020004106202912402000F1000028FE0
-:10DB4000240200111000028D24020005240200149A
-:10DB5000A7A2001027B10010000080210C004D7812
-:10DB600024040001261000012E0200201440FFFBB7
-:10DB7000000000000C004D78000020210C004D78C2
-:10DB8000240400010C004D78000020210C004D7889
-:10DB90002404000124100010320200011040000291
-:10DBA00000002021240400010C004D780010804268
-:10DBB0001600FFFA32020001241000103202001297
-:10DBC0001040000200002021240400010C004D78C8
-:10DBD000001080421600FFFA320200120C004D784D
-:10DBE000240400010C004D78000020213410800036
-:10DBF0009622000000501024104000020000202156
-:10DC0000240400010C004D78001080421600FFF83B
-:10DC1000000000000C004DB9000000008F8300548C
-:10DC200010000248240200068F8300543C020001C9
-:10DC30008C426F3C2463FF9C004310232C42006401
-:10DC400014400250240200071000024C00000000A3
-:10DC500024020006A7A2001027B1001000008021B6
-:10DC60000C004D7824040001261000012E02002033
-:10DC70001440FFFB000000000C004D780000202144
-:10DC80000C004D78240400010C004D780000202188
-:10DC90000C004D7824040001241000103202000111
-:10DCA0001040000200002021240400010C004D78E7
-:10DCB000001080421600FFFA32020001241000100A
-:10DCC0003202001310400002000020212404000151
-:10DCD0000C004D78001080421600FFFA320200134B
-:10DCE0000C004D78240400010C004D780000202128
-:10DCF00034108000962200000050102410400002D2
-:10DD000000002021240400010C004D780010804206
-:10DD10001600FFF8000000000C004DB900000000E4
-:10DD20008F83005410000207240200088F830054E0
-:10DD30003C0200018C426F3C2463FF9C0043102393
-:10DD40002C4200641440020F240200091000020B50
-:10DD50000000000027B10010A7A0001000008021E3
-:10DD60000C004D7824040001261000012E02002032
-:10DD70001440FFFB000000000C004D780000202143
-:10DD80000C004D78240400010C004D78240400019F
-:10DD90000C004D78000020212410001032020001F8
-:10DDA0001040000200002021240400010C004D78E6
-:10DDB000001080421600FFFA320200012410001009
-:10DDC000320200181040000200002021240400014B
-:10DDD0000C004D78001080421600FFFA3202001845
-:10DDE0000C004DB9341080000C004DB9000000004B
-:10DDF0000C004D580000000050400005001080420B
-:10DE00009622000000501025A6220000001080423B
-:10DE10001600FFF7000000000C004DB90000802143
-:10DE200097A2001027B1001034420001A7A20010F1
-:10DE30000C004D7824040001261000012E02002061
-:10DE40001440FFFB000000000C004D780000202172
-:10DE50000C004D78240400010C004D7800002021B6
-:10DE60000C004D782404000124100010320200013F
-:10DE70001040000200002021240400010C004D7815
-:10DE8000001080421600FFFA320200012410001038
-:10DE9000320200181040000200002021240400017A
-:10DEA0000C004D78001080421600FFFA3202001874
-:10DEB0000C004D78240400010C004D780000202156
-:10DEC0003410800096220000005010241040000200
-:10DED00000002021240400010C004D780010804235
-:10DEE0001600FFF8000000000C004DB90000000013
-:10DEF0008F830054100001932402000A8F83005482
-:10DF00003C0200018C426F3C2463FF9C00431023C1
-:10DF10002C4200641440019B2402000B1000019766
-:10DF20000000000027B10010A7A000100000802111
-:10DF30000C004D7824040001261000012E02002060
-:10DF40001440FFFB000000000C004D780000202171
-:10DF50000C004D78240400010C004D7824040001CD
-:10DF60000C004D7800002021241000103202000126
-:10DF70001040000200002021240400010C004D7814
-:10DF8000001080421600FFFA320200012410001037
-:10DF9000320200171040000200002021240400017A
-:10DFA0000C004D78001080421600FFFA3202001774
-:10DFB0000C004DB9341080000C004DB90000000079
-:10DFC0000C004D5800000000504000050010804239
-:10DFD0009622000000501025A6220000001080426A
-:10DFE0001600FFF7000000000C004DB90000802172
-:10DFF00097A2001027B1001034420700A7A200101A
-:10E000000C004D7824040001261000012E0200208F
-:10E010001440FFFB000000000C004D7800002021A0
-:10E020000C004D78240400010C004D7800002021E4
-:10E030000C004D782404000124100010320200016D
-:10E040001040000200002021240400010C004D7843
-:10E05000001080421600FFFA320200012410001066
-:10E0600032020017104000020000202124040001A9
-:10E070000C004D78001080421600FFFA32020017A3
-:10E080000C004D78240400010C004D780000202184
-:10E09000341080009622000000501024104000022E
-:10E0A00000002021240400010C004D780010804263
-:10E0B0001600FFF8000000000C004DB90000000041
-:10E0C0008F8300541000011F2402000C8F83005422
-:10E0D0003C0200018C426F3C2463FF9C00431023F0
-:10E0E0002C42006414400127240200121000012376
-:10E0F0000000000027B10010A7A000100000802140
-:10E100000C004D7824040001261000012E0200208E
-:10E110001440FFFB000000000C004D78000020219F
-:10E120000C004D78240400010C004D7824040001FB
-:10E130000C004D7800002021241000103202000154
-:10E140001040000200002021240400010C004D7842
-:10E15000001080421600FFFA320200012410001065
-:10E1600032020014104000020000202124040001AB
-:10E170000C004D78001080421600FFFA32020014A5
-:10E180000C004DB9341080000C004DB900000000A7
-:10E190000C004D5800000000504000050010804267
-:10E1A0009622000000501025A62200000010804298
-:10E1B0001600FFF7000000000C004DB900008021A0
-:10E1C00097A2001027B1001034420010A7A200103F
-:10E1D0000C004D7824040001261000012E020020BE
-:10E1E0001440FFFB000000000C004D7800002021CF
-:10E1F0000C004D78240400010C004D780000202113
-:10E200000C004D782404000124100010320200019B
-:10E210001040000200002021240400010C004D7871
-:10E22000001080421600FFFA320200012410001094
-:10E2300032020014104000020000202124040001DA
-:10E240000C004D78001080421600FFFA32020014D4
-:10E250000C004D78240400010C004D7800002021B2
-:10E26000341080009622000000501024104000025C
-:10E2700000002021240400010C004D780010804291
-:10E280001600FFF8000000000C004DB9000000006F
-:10E290008F830054100000AB240200138F830054BE
-:10E2A0003C0200018C426F3C2463FF9C004310231E
-:10E2B0002C420064144000B32402000D100000AF93
-:10E2C0000000000027B10010A7A00010000080216E
-:10E2D0000C004D7824040001261000012E020020BD
-:10E2E0001440FFFB000000000C004D7800002021CE
-:10E2F0000C004D78240400010C004D78240400012A
-:10E300000C004D7800002021241000103202000182
-:10E310001040000200002021240400010C004D7870
-:10E32000001080421600FFFA320200012410001093
-:10E3300032020018104000020000202124040001D5
-:10E340000C004D78001080421600FFFA32020018CF
-:10E350000C004DB9341080000C004DB900000000D5
-:10E360000C004D5800000000504000050010804295
-:10E370009622000000501025A622000000108042C6
-:10E380001600FFF7000000000C004DB900008021CE
-:10E3900097A2001027B100103042FFFEA7A2001084
-:10E3A0000C004D7824040001261000012E020020EC
-:10E3B0001440FFFB000000000C004D7800002021FD
-:10E3C0000C004D78240400010C004D780000202141
-:10E3D0000C004D78240400012410001032020001CA
-:10E3E0001040000200002021240400010C004D78A0
-:10E3F000001080421600FFFA3202000124100010C3
-:10E400003202001810400002000020212404000104
-:10E410000C004D78001080421600FFFA32020018FE
-:10E420000C004D78240400010C004D7800002021E0
-:10E43000341080009622000000501024104000028A
-:10E4400000002021240400010C004D7800108042BF
-:10E450001600FFF8000000000C004DB9000000009D
-:10E460008F830054100000372402000E240208405D
-:10E47000A7A2001027B10010000080210C004D78E9
-:10E4800024040001261000012E0200201440FFFB8E
-:10E49000000000000C004D78000020210C004D7899
-:10E4A000240400010C004D78000020210C004D7860
-:10E4B0002404000124100010320200011040000268
-:10E4C00000002021240400010C004D78001080423F
-:10E4D0001600FFFA3202000124100010320200136D
-:10E4E0001040000200002021240400010C004D789F
-:10E4F000001080421600FFFA320200130C004D7823
-:10E50000240400010C004D7800002021341080000C
-:10E51000962200000050102410400002000020212C
-:10E52000240400010C004D78001080421600FFF812
-:10E53000000000000C004DB9000000008F83005463
-:10E54000240200103C010001AC226DD03C0100010E
-:10E550001000000CAC236F3C8F8300543C02000180
-:10E560008C426F3C2463FF9C004310232C420064C8
-:10E570001440000400000000240200113C010001CE
-:10E58000AC226DD08FBF00208FB1001C8FB000185F
-:10E5900003E0000827BD00283C0300018C636D9850
-:10E5A00027BDFFC824020002AFBF0034AFB2003065
-:10E5B000AFB1002C14620004AFB000283C1200027E
-:10E5C000100000038E528FF83C1200028E528FFC16
-:10E5D0003C0300018C636DD43C0200018C426E1C34
-:10E5E000506200042463FFFF3C010001AC236E1C59
-:10E5F0002463FFFF2C6200061040037700031080A5
-:10E600003C010001002208218C226BD80040000848
-:10E610000000000000002021000028210C004DDB3C
-:10E6200034068000240400102405000224060002A1
-:10E63000240200020C004DDBA7A2001824020002F5
-:10E640003C01000110000364AC226DD427B1001816
-:10E65000A7A00018000080210C004D7824040001C0
-:10E66000261000012E0200201440FFFB00000000D5
-:10E670000C004D78000020210C004D78240400018E
-:10E680000C004D78240400010C004D78000020217E
-:10E69000241000103202000110400002000020216E
-:10E6A000240400010C004D78001080421600FFFA8F
-:10E6B00032020001241000100C004D7800002021CF
-:10E6C000001080421600FFFC000000000C004DB955
-:10E6D000341080000C004DB9000000000C004D58B3
-:10E6E000000000005040000500108042962200000B
-:10E6F00000501025A6220000001080421600FFF7EF
-:10E70000000000000C004DB90000000097A20018A6
-:10E710003042800014400004240200033C01000148
-:10E72000AC226DD4240200033C0100011000032A36
-:10E73000AC226DD42404001024050002240600023B
-:10E74000240200020C004DDBA7A200183C030001CC
-:10E750008C636E2024020001146201E1000080211C
-:10E7600027B10018A7A000180C004D782404000160
-:10E77000261000012E0200201440FFFB00000000C4
-:10E780000C004D78000020210C004D78240400017D
-:10E790000C004D78240400010C004D78000020216D
-:10E7A000241000103202000110400002000020215D
-:10E7B000240400010C004D78001080421600FFFA7E
-:10E7C0003202000124100010320200181040000232
-:10E7D00000002021240400010C004D78001080422C
-:10E7E0001600FFFA320200180C004DB934108000F8
-:10E7F0000C004DB9000000000C004D580000000056
-:10E800005040000500108042962200000050102564
-:10E81000A6220000001080421600FFF70000000052
-:10E820000C004DB90000802127B10018A7A00018E6
-:10E830000C004D7824040001261000012E02002057
-:10E840001440FFFB000000000C004D780000202168
-:10E850000C004D78240400010C004D7824040001C4
-:10E860000C004D780000202124100010320200011D
-:10E870001040000200002021240400010C004D780B
-:10E88000001080421600FFFA32020001241000102E
-:10E890003202001810400002000020212404000170
-:10E8A0000C004D78001080421600FFFA320200186A
-:10E8B0000C004DB9341080000C004DB90000000070
-:10E8C0000C004D5800000000504000050010804230
-:10E8D0009622000000501025A62200000010804261
-:10E8E0001600FFF7000000000C004DB90000802169
-:10E8F00024040018000028210C004DDB2406040429
-:10E90000A7A0001A0C004D78240400012610000175
-:10E910002E0200201440FFFB000000000C004D7888
-:10E92000000020210C004D78240400010C004D78DB
-:10E93000240400010C004D78000020212410001058
-:10E9400032020001104000020000202124040001D6
-:10E950000C004D78001080421600FFFA32020001D0
-:10E960002410001032020018104000020000202184
-:10E97000240400010C004D78001080421600FFFABC
-:10E98000320200180C004DB9341080000C004DB953
-:10E99000000000000C004D58000000005040000531
-:10E9A0000010804297A2001A00501025A7A2001A5A
-:10E9B000001080421600FFF7000000000C004DB967
-:10E9C00000008021A7A0001A0C004D78240400014B
-:10E9D000261000012E0200201440FFFB0000000062
-:10E9E0000C004D78000020210C004D78240400011B
-:10E9F0000C004D78240400010C004D78000020210B
-:10EA000024100010320200011040000200002021FA
-:10EA1000240400010C004D78001080421600FFFA1B
-:10EA200032020001241000103202001810400002CF
-:10EA300000002021240400010C004D7800108042C9
-:10EA40001600FFFA320200180C004DB93410800095
-:10EA50000C004DB9000000000C004D5800000000F3
-:10EA6000504000050010804297A2001A0050102567
-:10EA7000A7A2001A001080421600FFF70000000055
-:10EA80000C004DB900008021A7A0001C0C004D789F
-:10EA900024040001261000012E0200201440FFFB78
-:10EAA000000000000C004D78000020210C004D7883
-:10EAB000240400010C004D78240400010C004D7862
-:10EAC00000002021241000100C004D7800002021AF
-:10EAD000001080421600FFFC00000000241000100F
-:10EAE0003202001E10400002000020212404000118
-:10EAF0000C004D78001080421600FFFA3202001E12
-:10EB00000C004DB9341080000C004DB9000000001D
-:10EB10000C004D58000000005040000500108042DD
-:10EB200097A2001C00501025A7A2001C00108042D4
-:10EB30001600FFF7000000000C004DB90000802116
-:10EB4000A7A0001C0C004D78240400012610000131
-:10EB50002E0200201440FFFB000000000C004D7846
-:10EB6000000020210C004D78240400010C004D7899
-:10EB7000240400010C004D78000020212410001016
-:10EB80000C004D7800002021001080421600FFFC90
-:10EB900000000000241000103202001E104000028D
-:10EBA00000002021240400010C004D780010804258
-:10EBB0001600FFFA3202001E0C004DB9341080001E
-:10EBC0000C004DB9000000000C004D580000000082
-:10EBD000504000050010804297A2001C00501025F4
-:10EBE000A7A2001C001080421600FFF700000000E2
-:10EBF0000C004DB90000802124020002A7A2001ED3
-:10EC00000C004D7824040001261000012E02002083
-:10EC10001440FFFB000000000C004D780000202194
-:10EC20000C004D78240400010C004D7800002021D8
-:10EC30000C004D7824040001241000100C004D78C5
-:10EC400000002021001080421600FFFC00000000A0
-:10EC5000241000103202001E10400002000020218B
-:10EC6000240400010C004D78001080421600FFFAC9
-:10EC70003202001E0C004D78240400010C004D7877
-:10EC8000000020213410800097A2001E00501024A4
-:10EC90001040000200002021240400010C004D78E7
-:10ECA000001080421600FFF8000000000C004DB973
-:10ECB00000008021A7A000200C004D782404000152
-:10ECC000261000012E0200201440FFFB000000006F
-:10ECD0000C004D78000020210C004D782404000128
-:10ECE0000C004D78240400010C004D780000202118
-:10ECF000241000100C004D780000202100108042EC
-:10ED00001600FFFC00000000241000103202001E5C
-:10ED10001040000200002021240400010C004D7866
-:10ED2000001080421600FFFA3202001E0C004DB99E
-:10ED3000341080000C004DB9000000000C004D584C
-:10ED400000000000504000050010804297A2002003
-:10ED500000501025A7A20020001080421600FFF7E7
-:10ED6000000000000C004DB900008021A7A0002089
-:10ED70000C004D7824040001261000012E02002012
-:10ED80001440FFFB000000000C004D780000202123
-:10ED90000C004D78240400010C004D78240400017F
-:10EDA0000C004D7800002021241000100C004D783C
-:10EDB00000002021001080421600FFFC000000002F
-:10EDC000241000103202001E10400002000020211A
-:10EDD000240400010C004D78001080421600FFFA58
-:10EDE0003202001E0C004DB9341080000C004DB9E9
-:10EDF000000000000C004D580000000050400005CD
-:10EE00000010804297A2002000501025A7A20020E9
-:10EE1000001080421600FFF7000000000C004DB902
-:10EE200000008021A7A000220C004D7824040001DE
-:10EE3000261000012E0200201440FFFB00000000FD
-:10EE40000C004D78000020210C004D7824040001B6
-:10EE50000C004D78000020210C004D7824040001A6
-:10EE6000241000100C004D7800002021001080427A
-:10EE70001600FFFC00000000241000100C004D786C
-:10EE800000002021001080421600FFFC000000005E
-:10EE90000C004D78240400010C004D780000202166
-:10EEA0003410800097A2002200501024104000026D
-:10EEB00000002021240400010C004D780010804245
-:10EEC0001600FFF8000000000C004DB90000000023
-:10EED00024040018240500020C004DDB2406000465
-:10EEE0003C1000018E106E24240200011602011D48
-:10EEF000000000003C02000194426F263C0100012A
-:10EF0000AC206E2424429FBC2C4200041040000C14
-:10EF100024040009240500010C004DDB2406040034
-:10EF200024040018240500010C004DDB24060020F9
-:10EF300024040018240500010C004DDB24062000E9
-:10EF40003C02400002421024104001233C022000F9
-:10EF50000242102410400004000000003C010001A7
-:10EF600010000003AC306F1C3C010001AC206F1C92
-:10EF70003C0300018C636F3424020005146200F925
-:10EF8000000000003C0200018C426F1C1040006732
-:10EF90003C0200040242102410400011A7A00018F7
-:10EFA0003C02000802421024104000022402020029
-:10EFB000A7A200183C0200100242102410400004D6
-:10EFC0000000000097A2001834420100A7A2001818
-:10EFD00097A600182404000910000004000028214E
-:10EFE0002404000900002821000030210C004DDB22
-:10EFF0000000000024020001A7A2001A3C02000841
-:10F00000024210241040000C3C0200020242102474
-:10F010001040000224020101A7A2001A3C020001D4
-:10F0200002421024104000053C02001097A2001A72
-:10F0300034420040A7A2001A3C02001002421024F1
-:10F040001040000E3C020002024210241040000555
-:10F050003C02000197A2001A34420080A7A2001AC5
-:10F060003C02000102421024104000053C0300A0B5
-:10F0700097A2001A34420020A7A2001A3C0300A065
-:10F0800002431024544300043C02002097A2001ABB
-:10F090001000000C344204000242102450400004CE
-:10F0A0003C02008097A2001A1000000634420800BB
-:10F0B00002421024104000040000000097A2001A31
-:10F0C00034420C00A7A2001A97A6001A24040004D8
-:10F0D0000C004DDB000028213C02000402421024F9
-:10F0E00010400004A7A0001C32425000144000044D
-:10F0F00000000000324240001040000500002021C6
-:10F100000C004CF902402021100000960000000085
-:10F1100097A6001C0000282134C612000C004DDB0D
-:10F12000A7A6001C1000008F00000000024210245F
-:10F1300010400004A7A00018324250001440000400
-:10F140000000000032424000104000053C02001068
-:10F150000C004CF90240202110000019A7A0001A51
-:10F1600002421024104000040000000097A2001882
-:10F1700010000004A7A2001897A200183442010052
-:10F18000A7A200183C020001024210241040000413
-:10F190000000000097A2001810000004A7A20018A9
-:10F1A00097A2001834422000A7A2001897A60018C2
-:10F1B000000020210C004DDB00002821A7A0001A30
-:10F1C000000080210C004D7824040001261000016D
-:10F1D0002E0200201440FFFB000000000C004D78C0
-:10F1E000000020210C004D78240400010C004D7813
-:10F1F000240400010C004D78000020212410001090
-:10F20000320200011040000200002021240400010D
-:10F210000C004D78001080421600FFFA3202000107
-:10F22000241000100C004D780000202100108042B6
-:10F230001600FFFC000000000C004DB934108000E7
-:10F240000C004DB9000000000C004D5800000000FB
-:10F25000504000050010804297A2001A005010256F
-:10F26000A7A2001A001080421600FFF7000000005D
-:10F270000C004DB900008021A7A0001A0C004D78A9
-:10F2800024040001261000012E0200201440FFFB80
-:10F29000000000000C004D78000020210C004D788B
-:10F2A000240400010C004D78240400010C004D786A
-:10F2B0000000202124100010320200011040000242
-:10F2C00000002021240400010C004D780010804231
-:10F2D0001600FFFA32020001241000100C004D78D5
-:10F2E00000002021001080421600FFFC00000000FA
-:10F2F0000C004DB9341080000C004DB90000000026
-:10F300000C004D58000000005040000500108042E5
-:10F3100097A2001A00501025A7A2001A00108042E0
-:10F320001600FFF7000000000C004DB900000000BF
-:10F330003C04000124846BCC97A6001897A7001A00
-:10F340003C0200018C426D983C0300018C636F1CF1
-:10F350003C05000D34A50205AFA200100C002B3BAC
-:10F36000AFA300148F830054240200043C01000169
-:10F37000AC226DD43C01000110000017AC236F38A3
-:10F380008F8300543C0200018C426F382463FF9C41
-:10F39000004310232C4200641440000F00000000C2
-:10F3A0008F820220240300053C010001AC236DD4B0
-:10F3B0003C03F7000043102510000007AF82022035
-:10F3C000240200063C010001AC226DD4240200118D
-:10F3D0003C010001AC226DD08FBF00348FB20030F1
-:10F3E0008FB1002C8FB0002803E0000827BD003843
-:10F3F00027BDFFD8AFB0001800808021AFB1001C3E
-:10F40000000088213202400010400013AFBF0020EE
-:10F410003C020010020210242C42000100021023C2
-:10F42000304341003C020001020210241440000657
-:10F43000347140003C020002020210241440000219
-:10F440003471600034714040000020210000282108
-:10F45000100000360220302132021000104000352A
-:10F4600000002021000028210C004DDB2406004074
-:10F4700024040018000028210C004DDB24060C0099
-:10F4800024040017000028210C004DDB2406040092
-:10F4900024040016000028210C004DDB2406000681
-:10F4A00024040017000028210C004DDB2406250051
-:10F4B00024040016000028210C004DDB2406000661
-:10F4C00024040017000028210C004DDB2406460010
-:10F4D00024040016000028210C004DDB2406000641
-:10F4E00024040017000028210C004DDB24066700CF
-:10F4F00024040016000028210C004DDB2406000621
-:10F500002404001F000028210C004DDB24060010FD
-:10F5100024040009000028210C004DDB24061500FE
-:10F52000240400090000282124061D000C004DDBE6
-:10F53000000000003C04000124846BF03C05000E38
-:10F5400034A501000200302102203821AFA00010B4
-:10F550000C002B3BAFA000148FBF00208FB1001C0C
-:10F560008FB0001803E0000827BD00288F850044F5
-:10F570008F8200443C030001004310253C03000837
-:10F58000AF8200448F8400548F82005400A328244B
-:10F5900010000002248400018F8200540082102396
-:10F5A0002C4200021440FFFC000000008F82004447
-:10F5B0003C03FFFE3463FFFF00431024AF8200448E
-:10F5C0008F8300548F8200541000000224630001D6
-:10F5D0008F820054006210232C4200021440FFFC72
-:10F5E0000000000003E0000800A010218F83004409
-:10F5F0003C02FFF03442FFFF000424800062182424
-:10F600003C0200020082202500641825AF830044DC
-:10F610008F8200443C03FFFE3463FFFF004310244D
-:10F62000AF8200448F8300548F8200541000000288
-:10F63000246300018F820054006210232C420002D8
-:10F640001440FFFC000000008F8200443C030001D6
-:10F6500000431025AF8200448F8300548F820054F2
-:10F6600010000002246300018F8200540062102306
-:10F670002C4200021440FFFC0000000003E00008E0
-:10F68000000000008F8200442403FF7F0043102409
-:10F69000AF8200448F8300548F8200541000000218
-:10F6A000246300018F820054006210232C42000268
-:10F6B0001440FFFC000000008F82004434420080B0
-:10F6C000AF8200448F8300548F82005410000002E8
-:10F6D000246300018F820054006210232C42000238
-:10F6E0001440FFFC0000000003E0000800000000E0
-:10F6F0008F8200443C03FFF03463FFFF004310247B
-:10F70000AF8200448F8200443C0300010043102577
-:10F71000AF8200448F8300548F8200541000000297
-:10F72000246300018F820054006210232C420002E7
-:10F730001440FFFC000000008F8200443C03FFFEE9
-:10F740003463FFFF00431024AF8200448F830054D2
-:10F750008F82005410000002246300018F82005445
-:10F76000006210232C4200021440FFFC0000000045
-:10F7700003E000080000000027BDFFC8AFB300246D
-:10F7800000809821AFBE002C00A0F021AFB2002075
-:10F7900000C0902133C2FFFFAFBF0030AFB50028DB
-:10F7A000AFB1001CAFB0001814400034A7B2001075
-:10F7B0003271FFFF27B20010000080210C004D784D
-:10F7C00024040001261000012E0200201440FFFB3B
-:10F7D000000000000C004D78000020210C004D7846
-:10F7E000240400010C004D78000020210C004D780D
-:10F7F0002404000124100010320200011040000215
-:10F8000000002021240400010C004D7800108042EB
-:10F810001600FFFA320200012410001002301024FA
-:10F820001040000200002021240400010C004D784B
-:10F83000001080421600FFFA023010240C004D78B0
-:10F84000240400010C004D780000202134108000B9
-:10F8500096420000005010241040000200002021B9
-:10F86000240400010C004D78001080421200007545
-:10F87000000000001000FFF6000000003275FFFFDE
-:10F8800027B10010A7A00010000080210C004D78C7
-:10F8900024040001261000012E0200201440FFFB6A
-:10F8A000000000000C004D78000020210C004D7875
-:10F8B000240400010C004D78240400010C004D7854
-:10F8C000000020212410001032020001104000022C
-:10F8D00000002021240400010C004D78001080421B
-:10F8E0001600FFFA320200012410001002B01024AA
-:10F8F0001040000200002021240400010C004D787B
-:10F90000001080421600FFFA02B010240C004DB91E
-:10F91000341080000C004DB9000000000C004D5860
-:10F9200000000000504000050010804296220000B8
-:10F9300000501025A6220000001080421600FFF79C
-:10F94000000000000C004DB90000000033C5FFFFAF
-:10F950002402000154A200042402000297A2001015
-:10F96000100000060052102514A200063271FFFF9D
-:10F9700097A200100012182700431024A7A200101D
-:10F980003271FFFF27B20010000080210C004D787B
-:10F9900024040001261000012E0200201440FFFB69
-:10F9A000000000000C004D78000020210C004D7874
-:10F9B000240400010C004D78000020210C004D783B
-:10F9C0002404000124100010320200011040000243
-:10F9D00000002021240400010C004D78001080421A
-:10F9E0001600FFFA32020001241000100230102429
-:10F9F0001040000200002021240400010C004D787A
-:10FA0000001080421600FFFA023010240C004D78DE
-:10FA1000240400010C004D780000202134108000E7
-:10FA200096420000005010241040000200002021E7
-:10FA3000240400010C004D78001080421600FFF8ED
-:10FA4000000000000C004DB9000000008FBF003026
-:10FA50008FBE002C8FB500288FB300248FB20020FA
-:10FA60008FB1001C8FB0001803E0000827BD0038DC
-:10FA700000000000000000000000000027BDFFE8BB
-:10FA8000AFBF00108EE304B824020008146201E046
-:10FA9000000000003C0200018C426F1C1440000575
-:10FAA000000000000C003DAF8F840224100001D83C
-:10FAB000000000008F8202203C0300080043102455
-:10FAC00010400026240200018F8402248F8202202D
-:10FAD0003C03040000431024104000060000000016
-:10FAE0003C010002AC208FA03C0100021000000B82
-:10FAF000AC208FC03C03000224638FA08C62000006
-:10FB000024420001AC6200002C42000214400003B9
-:10FB1000240200013C010002AC228FC03C02000222
-:10FB20008C428FC01040000630820040104000041C
-:10FB3000240200013C01000210000003AC228FC42B
-:10FB40003C010002AC208FC43C010002AC248F9C1D
-:10FB50003C0100021000000BAC208FD03C010002E1
-:10FB6000AC228FD03C010002AC208FC03C010002CF
-:10FB7000AC208FA03C010002AC208FC43C010002ED
-:10FB8000AC208F9C3C0300028C638F903C020002EF
-:10FB90008C428F94506200042463FFFF3C010002FA
-:10FBA000AC238F942463FFFF2C62000E104001945D
-:10FBB000000310803C010001002208218C226C000F
-:10FBC0000040000800000000240200023C01000286
-:10FBD000AC208FC03C010002AC208FA03C01000291
-:10FBE000AC208F9C3C010002AC208FC43C01000281
-:10FBF000AC208FB83C010002AC208FB0AF80022453
-:10FC00003C010002AC228F903C0200028C428FD05B
-:10FC10001440004F3C02FDFF3442FFFF0C003DAF9B
-:10FC20000282A024AF8002048F8202002403FFFD21
-:10FC300000431024AF8202003C010002AC208FE0A0
-:10FC40008F8300543C0200028C428FB824040001D0
-:10FC50003C010002AC248FCC244200013C01000294
-:10FC6000AC228FB82C4200043C010002AC238FB4BC
-:10FC700014400006240200033C010001AC246D9CEA
-:10FC80003C0100021000015EAC208FB83C01000274
-:10FC90001000015BAC228F908F8300543C02000265
-:10FCA0008C428FB42463D8F0004310232C422710D9
-:10FCB00014400003240200043C010002AC228F9097
-:10FCC0003C0200028C428FD0144000213C02FDFF18
-:10FCD0003442FFFF1000014A0282A0243C040001CC
-:10FCE0008C846F203C0100020C005084AC208FA853
-:10FCF0003C0200028C428FDCAF8202043C02000214
-:10FD00008C428FD0144000123C03FDFF8F8202040E
-:10FD10003463FFFF304200301440012F0283A024DF
-:10FD20003C0300028C638FDC240200053C010002CE
-:10FD3000AC228F903C01000210000131AC238FE017
-:10FD40003C0200028C428FD0104000103C02FDFFAC
-:10FD50003C0200018C426E3C244200013C01000147
-:10FD6000AC226E3C2C42000214400125240200010A
-:10FD70003C010001AC226E443C010001AC206E3C11
-:10FD80003C0100011000011EAC226D9C3C030002EE
-:10FD90008C638FC03442FFFF106001190282A024DF
-:10FDA0003C0200028C428F9C1040011500000000B4
-:10FDB0003C010002AC228FC8240200033C01000277
-:10FDC000AC228FA0100000B8240200063C01000203
-:10FDD000AC208FA88F82020434420040AF8202041C
-:10FDE0003C0200028C428FE0240300073C01000229
-:10FDF000AC238F90344200403C010002AC228FE0E3
-:10FE00003C0200028C428FC0104000050000000040
-:10FE10003C0200028C428F9C104000F02402000241
-:10FE20003C05000224A58FA08CA200002C424E218C
-:10FE3000104000EA240200023C0200028C428FC4FF
-:10FE4000104000EF2404FFBF3C0200028C428F9C54
-:10FE50003C0300028C638FC8004410240064182403
-:10FE600010430004240200013C010002100000E4E1
-:10FE7000AC228F9024020003ACA2000024020008F0
-:10FE80003C010002AC228F903C0200028C428FCCDD
-:10FE90001040000C240200013C0400020C005091B0
-:10FEA0008C848F9C3C0200028C428FE81440000539
-:10FEB000240200013C0200028C428FE41040000644
-:10FEC000240200013C010001AC226D9C3C010002B7
-:10FED000100000CBAC208FB83C0200028C428FB0E7
-:10FEE0003C0300028C638F9C2C420001000210C076
-:10FEF000306300083C010002AC228FB03C010002DC
-:10FF0000AC238FAC8F830054240200093C01000213
-:10FF1000AC228F903C010002100000B9AC238FB4DA
-:10FF20008F8300543C0200028C428FB42463D8F0CB
-:10FF3000004310232C4227101440009F00000000B3
-:10FF40003C0200028C428FC01040000500000000FF
-:10FF50003C0200028C428F9C104000A02402000250
-:10FF60003C03000224638FA08C6200002C424E21CF
-:10FF70001040009A240200023C0200028C428FCC06
-:10FF80001040000E000000003C0200028C428F9CDA
-:10FF90003C010002AC208FCC304200801040002F8A
-:10FFA0002402000C8F820204304200801440000CB6
-:10FFB00024020003100000292402000C3C0200026D
-:10FFC0008C428F9C304200801440000524020003C4
-:10FFD0008F820204304200801040001F2402000380
-:10FFE000AC6200002402000A3C010002AC228F90A7
-:10FFF0003C04000224848FD88C8200003C03000261
-:020000021000EC
-:100000008C638FB000431025AF8202048C83000004
-:100010003C0400028C848FB02402000B3C010002DF
-:10002000AC228F90006418253C010002AC238FE0C5
-:100030003C05000224A58FA08CA200002C424E217A
-:1000400010400066240200023C0200028C428FD065
-:1000500010400005000000002402000C3C010002DA
-:1000600010000067AC228F903C0200028C428FC0CF
-:1000700010400063000000003C0400028C848F9C50
-:1000800010800055308200083C0300028C638FAC66
-:100090001062005B240200033C010002AC248FC804
-:1000A000ACA20000240200063C0100021000005433
-:1000B000AC228F908F82020034420002AF82020095
-:1000C0008F8300542402000D3C010002AC228F906B
-:1000D0003C010002AC238FB48F8300543C02000229
-:1000E0008C428FB42463D8F0004310232C42271095
-:1000F00014400031000000003C0200028C428FD00E
-:10010000104000202402000E3C0300028C638FE4A8
-:100110003C01000214600015AC228F900C003E6D73
-:10012000000000003C0500018CA56D980C00529B5E
-:10013000000020213C0300018C636D982402000420
-:10014000146200052403FFFB3C0200018C426D9405
-:10015000100000032403FFF73C0200018C426D9461
-:10016000004310243C010001AC226D948F830224D3
-:100170003C0202003C010002AC238FEC1000002086
-:100180000282A0253C0200028C428FC01040000574
-:10019000000000003C0200028C428F9C1040000FC7
-:1001A000240200023C0200028C428FA02C424E210D
-:1001B0001040000A240200023C0200028C428FC060
-:1001C0001040000F000000003C0200028C428F9C97
-:1001D0001440000B00000000240200023C01000259
-:1001E00010000007AC228F903C0200028C428FC0AE
-:1001F00010400003000000000C003DAF00000000B4
-:100200008F8202203C03F70000431025AF820220BA
-:100210008FBF001003E0000827BD00183C03000258
-:1002200024638FE88C6200001040000534422000F7
-:100230003C010002AC228FDC10000003AC60000027
-:100240003C010002AC248FDC03E000080000000049
-:1002500027BDFFE030820030AFBF00183C01000234
-:10026000AC228FE4144000673C02FFFF34421F0EB3
-:1002700000821024144000612402003030822000EB
-:100280001040005D3083800000031A0230820001BC
-:10029000000212003C0400018C846F2000621825CB
-:1002A000000331C23C03000124636E4830828000A9
-:1002B00000021202308400010004220000441025D4
-:1002C000000239C2000610800043102100471021AF
-:1002D000904300002402000110620025000000008D
-:1002E00010600007240200021062001324020003C1
-:1002F0001062002C3C05000F1000003700000000C9
-:100300008F8202002403FEFF00431024AF8202000C
-:100310008F8202203C03FFFE3463FFFF0043102462
-:10032000AF8202203C010002AC2090043C0100029C
-:1003300010000034AC20900C8F8202003442010087
-:10034000AF8202008F8202203C03FFFE3463FFFF76
-:1003500000431024AF820220240201003C0100026D
-:10036000AC2290043C01000210000026AC20900C4E
-:100370008F8202002403FEFF00431024AF8202009C
-:100380008F8202203C03000100431025AF8202202F
-:100390003C010002AC2090043C0100021000001956
-:1003A000AC23900C8F82020034420100AF82020025
-:1003B0008F8202203C03000100431025AF820220FF
-:1003C000240201003C010002AC2290043C01000226
-:1003D0001000000CAC23900C34A5FFFF3C0400017E
-:1003E00024846C38AFA300100C002B3BAFA000148A
-:1003F0001000000400000000240200303C01000254
-:10040000AC228FE88FBF001803E0000827BD002052
-:1004100000000000000000000000000027BDFFC831
-:10042000AFB2002800809021AFB3002C00A098212B
-:10043000AFB0002000C080213C04000124846C5037
-:100440003C0500093C0200018C426D9834A59001E6
-:100450000240302102603821AFBF0030AFB100242C
-:10046000A7A0001AAFB000140C002B3BAFA20010E5
-:1004700024020002126200832E6200031040000575
-:10048000240200011262000A000000001000017343
-:100490000000000024020004126200F82402000898
-:1004A000126200F73C02FFEC1000016C000000003B
-:1004B0003C0200018C426D94304200021440000462
-:1004C000001289403C02FFFB3442FFFF02028024FD
-:1004D0003C01000200310821AC308FFC3C0240009E
-:1004E000020210241040004E001023C2308400305D
-:1004F000001013823042001C3C03000124636DD8BD
-:1005000000431021008238213C0200200202102406
-:1005100010400006240201003C01000200310821C5
-:10052000AC229000100000053C0200803C0100025B
-:1005300000310821AC2090003C020080020210240F
-:1005400010400006001219403C0200013C0100026C
-:100550000023082110000005AC2290080012114071
-:100560003C01000200220821AC20900894E4000025
-:100570003C0300018C636F402402000510620010F0
-:10058000A7A400183202400010400002348240004C
-:10059000A7A200182404000194E20002240500042C
-:1005A00024E60002344200010C0045BEA4E2000231
-:1005B00024040001000028210C0045BE27A60018D5
-:1005C0003C0200018C426D98241100013C010001A5
-:1005D000AC316DA414530004320280000C003DAF16
-:1005E00000000000320280001040011C00000000EA
-:1005F0000C003DAF000000003C0300018C636F4025
-:100600002402000510620115240200023C010001D1
-:10061000AC316D9C3C01000110000110AC226D98C2
-:10062000240400012405000427B0001A0C0045BE74
-:100630000200302124040001000028210C0045BEE6
-:10064000020030213C020002005110218C428FF444
-:100650003C0400018C846D983C03BFFF3463FFFFB2
-:100660003C010001AC336DA4004310243C010002A6
-:1006700000310821109300F7AC228FF4100000F72E
-:10068000000000003C02200002021024104000057F
-:10069000240200013C010001AC226F1C1000000488
-:1006A000001289403C010001AC206F1C00128940FF
-:1006B0003C01000200310821AC308FF83C024000C0
-:1006C0000202102414400014000000003C0200014B
-:1006D0008C426F1C10400006240400042405000115
-:1006E0000C004DDB2406200024020001AEE204B819
-:1006F0003C020002005110218C428FF03C03BFFFEE
-:100700003463FFFF004310243C0100020031082144
-:10071000100000D0AC228FF03C0200018C426F1C14
-:10072000104000283C0300A0020310245443000D95
-:100730003C0200203C0200018C426F202403010097
-:100740003C01000200310821AC2390043C0300016D
-:100750003C01000200310821AC23900C1000001570
-:100760003442040002021024104000082403010057
-:100770003C0200018C426F203C0100020031082144
-:10078000AC2390041000000B344208003C020080AF
-:10079000020210241040002E3C0300013C02000124
-:1007A0008C426F203C01000200310821AC23900CE8
-:1007B00034420C003C010001AC226F2010000025E7
-:1007C000240400013C020020020210241040000614
-:1007D000240201003C01000200310821AC229004F7
-:1007E000100000053C0200803C010002003108219D
-:1007F000AC2090043C02008002021024104000074C
-:10080000001219403C0200013C01000200230821B3
-:10081000AC22900C100000062404000100121140CC
-:100820003C01000200220821AC20900C24040001AD
-:100830000000282127B0001E0C00457C020030215A
-:1008400024040001000028210C00457C0200302116
-:10085000240400012405000127B0001C0C00457C85
-:100860000200302124040001240500010C00457C15
-:100870000200302110000077000000003C02FFEC75
-:100880003442FFFF020280243C020008020280255D
-:10089000001211403C01000200220821AC308FF808
-:1008A0003C02200002021024104000090000000059
-:1008B0003C0200018C426E441440000524020001F9
-:1008C0003C010001AC226F1C100000043C024000FF
-:1008D0003C010001AC206F1C3C02400002021024CD
-:1008E0001440001D24020E013C0300018C636F1CA8
-:1008F000AF8202383C010001AC206DB010600005F1
-:10090000240220203C010001AC226F2024020001BF
-:10091000AEE204B83C04BFFF001219403C020002E2
-:10092000004310218C428FF03C0500018CA56D988E
-:100930003484FFFF004410243C01000200230821FE
-:10094000AC228FF02402000110A20044000000003D
-:1009500010000040000000003C0200018C426F1CAF
-:100960001040001C240220003C010001AC226F203A
-:100970003C0300A0020310241443000500121140A0
-:100980003402A0003C0100011000002DAC226F20B9
-:100990003C030002006218218C638FF83C020020A7
-:1009A0000062102410400004240220013C010001D8
-:1009B00010000023AC226F203C0200800062102453
-:1009C0001040001F3402A0013C0100011000001C77
-:1009D000AC226F203C0200200202102410400007CD
-:1009E00000121940240201003C01000200230821EA
-:1009F000AC229004100000063C020080001211405E
-:100A00003C01000200220821AC2090043C0200803E
-:100A10000202102410400006001219403C0200019E
-:100A20003C0100020023082110000005AC22900CBC
-:100A3000001211403C01000200220821AC20900C61
-:100A40003C0300018C636D982402000110620003D6
-:100A5000000000000C003DAF000000008FBF003020
-:100A60008FB3002C8FB200288FB100248FB00020EC
-:100A700003E0000827BD003827BDFFB0AFB3003C3E
-:100A800000009821AFB500400000A821AFB10034AC
-:100A90000000882124020002AFBF0048AFBE00441E
-:100AA000AFB20038AFB00030AFA4002CA7A0001A3E
-:100AB000A7A00018A7A00020A7A0001EA7A00022A2
-:100AC00010A20130A7A0001C2CA2000310400005BA
-:100AD0002402000110A2000A3C0240001000025D46
-:100AE000022010212402000410A2020A240200089D
-:100AF00010A202080220102110000256000000007F
-:100B00008FA8002C000881403C03000200701821CF
-:100B10008C638FFC0062102414400009240400013F
-:100B20003C027FFF3442FFFF006288243C01000248
-:100B300000300821AC318FF4100002460220102151
-:100B4000240500010C00457C27A6001824040001A0
-:100B5000240500010C00457C27A6001897A2001868
-:100B600030420004104000D93C1140003C0200011A
-:100B70008C426F402443FFFF2C620006104000D9D6
-:100B8000000310803C010001002208218C226C68C7
-:100B900000400008000000002404000124050011AA
-:100BA00027B0001A0C00457C02003021240400010B
-:100BB000240500110C00457C0200302197A3001A87
-:100BC00030624000104000023C1500103C15000847
-:100BD00030628000104000AA3C130001100000A801
-:100BE0003C130002240400012405001427B0001A5D
-:100BF0000C00457C0200302124040001240500146F
-:100C00000C00457C0200302197A3001A30621000CE
-:100C1000104000023C1500103C150008306208002E
-:100C2000104000973C130001100000953C13000297
-:100C3000240400012405001927B0001C0C00457C89
-:100C40000200302124040001240500190C00457C19
-:100C50000200302197A2001C304307002402040048
-:100C600010620027286204011040000E24020200D6
-:100C70001062001F286202011040000524020100DA
-:100C80005062001E3C1300011000001E24040001ED
-:100C900024020300506200193C13000210000019E6
-:100CA00024040001240206001062000D28620601DF
-:100CB00010400005240205005062000B3C130002A6
-:100CC0001000001024040001240207001462000D2B
-:100CD000240400013C1300041000000A3C15000825
-:100CE000100000063C130004100000053C1500082D
-:100CF0003C130001100000023C1500083C150010D8
-:100D0000240400012405001827B0001E0C00457CB7
-:100D10000200302124040001240500180C00457C49
-:100D2000020030218FA8002C97A7001E0008114058
-:100D30003C06000200C230218CC68FF497A200222C
-:100D40003C10000126106C5C02002021AFA20010B4
-:100D500097A2001C3C05000C34A503030C002B3BA0
-:100D6000AFA200143C020004166200103C02000115
-:100D70008F84005424030001240200023C0100017E
-:100D8000AC236D9C3C010001AC226D983C0100013C
-:100D9000AC236DA43C010001AC236E243C01000196
-:100DA000AC246F301000004F02B388251662003962
-:100DB0003C0280003C0200018C426E201440001E68
-:100DC0002404001800002021000028210C004DDB25
-:100DD000340680008F8300548F82005402B388252C
-:100DE00010000002246300328F820054006210233E
-:100DF0002C4200331440FFFC000000008F8300549D
-:100E0000240200013C010001AC226E203C010001E3
-:100E1000AC226D9C3C010001AC226D983C010001AC
-:100E2000AC226DA43C010001AC226E243C01000107
-:100E30001000002CAC236F30000028210C004DDB8B
-:100E400024060404000020212405001E27A6001803
-:100E5000240200020C0045BEA7A2001800002021B9
-:100E60000000282127A600180C0045BEA7A00018E6
-:100E700024040018240500020C004DDB24060004A5
-:100E80003C0280000222102502B318251000001534
-:100E90000043882502221025027518250043882565
-:100EA0000200202197A6001C3C0700018CE76D98EA
-:100EB0003C05000C34A50326AFB300100C002B3BFF
-:100EC000AFB1001410000007000000003C11000248
-:100ED000023088218E318FFC3C027FFF3442FFFFBD
-:100EE000022288243C0200018C426DA81040001EA2
-:100EF000000000003C0200018C426F1C1040000208
-:100F00003C022000022288258FA8002C00081140F6
-:100F10003C010002002208218C22900010400003B6
-:100F20003C02002010000005022288253C02FFDF61
-:100F30003442FFFF022288248FA8002C00081140B1
-:100F40003C010002002208218C229008104000037E
-:100F50003C02008010000004022288253C02FF7F32
-:100F60003442FFFF022288248FA8002C0008114081
-:100F70003C01000200220821AC318FF41000013541
-:100F8000022010218FA8002C0008F1403C03000231
-:100F9000007E18218C638FF83C0240000062102410
-:100FA00014400009240400013C027FFF3442FFFF8B
-:100FB000006288243C010002003E0821AC318FF021
-:100FC0001000012402201021000028210C00457C83
-:100FD00027A6001824040001000028210C00457CED
-:100FE00027A60018240400012405000127B20020D0
-:100FF0000C00457C0240302124040001240500013E
-:101000000C00457C0240302124040001240500042A
-:1010100027B1001E0C00457C022030212404000171
-:10102000240500040C00457C02203021240400012A
-:101030002405000527B000220C00457C0200302169
-:1010400024040001240500050C00457C0200302129
-:1010500024040001240500100C00457C27A600187C
-:1010600024040001240500100C00457C27A600186C
-:10107000240400012405000A0C00457C02403021B4
-:10108000240400012405000A0C00457C02403021A4
-:1010900024040001240500180C00457C02203021A6
-:1010A00024040001240500180C00457C0220302196
-:1010B00024040001240500010C00457C27A600182B
-:1010C00024040001240500010C00457C27A600181B
-:1010D00097A2001830420004104000663C11400006
-:1010E0003C0300018C636F34240200051462006726
-:1010F000240400012405001927B0001C0C00457CC5
-:101100000200302124040001240500190C00457C54
-:101110000200302197A2001C304307002402040083
-:1011200010620027286204011040000E2402020011
-:101130001062001F28620201104000052402010015
-:101140005062001E3C1300011000001E3C0200040F
-:1011500024020300506200193C1300021000001921
-:101160003C020004240206001062000D2862060101
-:1011700010400005240205005062000B3C130002E1
-:10118000100000103C020004240207001462000D4D
-:101190003C0200043C1300041000000A3C15000847
-:1011A000100000063C130004100000053C15000868
-:1011B0003C130001100000023C1500083C15001013
-:1011C0003C020004126200173C0280008F8200542F
-:1011D000241000013C010001AC306D9C3C01000179
-:1011E000AC306D983C010001AC306DA43C010001B5
-:1011F000AC306E243C010001AC226F303C02000197
-:101200001662002202758825000020210000282196
-:101210000C004DDB340680003C0100011000001B77
-:10122000AC306E200222102502B318250043882519
-:1012300097A6001C3C0200018C426F1C3C07000179
-:101240008CE76D983C04000124846C5CAFA2001014
-:1012500097A2001E3C05000C34A503233C010001AD
-:10126000AC206E200C002B3BAFA200141000000736
-:10127000000000003C110002023E88218E318FF0F8
-:101280003C027FFF3442FFFF022288243C0200011F
-:101290008C426DA810400069000000003C02000173
-:1012A0008C426F1C104000023C0220000222882564
-:1012B0008FA8002C000811403C01000200220821E8
-:1012C0008C229004104000033C0200201000000516
-:1012D000022288253C02FFDF3442FFFF02228824DD
-:1012E0008FA8002C000811403C01000200220821B8
-:1012F0008C22900C104000033C0200801000004F34
-:10130000022288253C02FF7F3442FFFF1000004B81
-:10131000022288248FA8002C000829403C030002E8
-:10132000006518218C638FF83C0240000062102495
-:10133000144000083C027FFF3442FFFF0062882413
-:101340003C01000200250821AC318FF01000004163
-:10135000022010213C0200018C426DA81040003494
-:101360003C11C00C3C0200018C426E443C04C00C99
-:10137000348420003C0300018C636F1C0002102B9E
-:10138000000210230044102410600003005188253F
-:101390003C022000022288253C0200020045102168
-:1013A0008C429004104000033C0200201000000416
-:1013B000022288253C02FFDF3442FFFF02228824FC
-:1013C0008FA8002C000811403C01000200220821D7
-:1013D0008C22900C104000033C020080100000049E
-:1013E000022288253C02FF7F3442FFFF022288242C
-:1013F0003C0200018C426E30104000023C020800AA
-:10140000022288253C0200018C426E34104000020A
-:101410003C020400022288253C0200018C426E3806
-:10142000104000063C020100100000040222882542
-:101430003C027FFF3442FFFF006288248FA8002C0B
-:10144000000811403C01000200220821AC318FF05D
-:10145000022010218FBF00488FBE00448FB500408E
-:101460008FB3003C8FB200388FB100348FB00030A2
-:1014700003E0000827BD005027BDFFD0AFB2002811
-:1014800000809021AFBF002CAFB10024AFB000208E
-:101490008F8402003C1000018E106D988F86022010
-:1014A000240200021202005C2E020003104000051C
-:1014B000240200011202000A001219401000010C5F
-:1014C0000000000024020004120200BF24020008F1
-:1014D000120200BE00128940100001050000000049
-:1014E0003C05000200A328218CA58FFC3C100002C3
-:1014F000020380218E108FF43C02400000A21024D1
-:10150000104000383C020008020210241040002065
-:10151000348400023C020002004310218C429000FF
-:101520001040000534840020348401003C02002077
-:1015300010000006020280252402FEFF0082202403
-:101540003C02FFDF3442FFFF020280240012114000
-:101550003C010002002208218C2290081040000566
-:101560003C02000100C230253C0200801000001641
-:10157000020280253C02FFFE3442FFFF00C23024FD
-:101580003C02FF7F3442FFFF1000000F0202802464
-:101590002402FEDF008220243C02FFFE3442FFFFD3
-:1015A00000C230243C02FF5F3442FFFF020280246D
-:1015B0003C01000200230821AC2090003C01000205
-:1015C00000230821AC209008AF840200AF860220DF
-:1015D0008F82022034420002AF8202201000000AF3
-:1015E000001211403C02BFFF3442FFFF8F83020014
-:1015F000020280242402FFFD006218240C003DAF8B
-:10160000AF830200001211403C01000200220821B9
-:10161000100000B7AC308FF43C0200018C426F1C0C
-:101620001040006924050004240400010C00457CDE
-:1016300027A6001824040001240500050C00457CA1
-:1016400027A6001A97A3001897A2001A3C040001CD
-:1016500024846E4830630C0000031A8230420C0070
-:1016600000021282A7A2001A00021080004410217A
-:1016700000431021A7A30018904800002402000195
-:101680003103FFFF106200292862000210400005AC
-:101690000000000010600009000000001000003D84
-:1016A0000000000010700013240200031062002CE0
-:1016B0000000000010000037000000008F820200D0
-:1016C0002403FEFF00431024AF8202008F82022019
-:1016D0003C03FFFE3463FFFF00431024AF8202206F
-:1016E0003C010002AC2090043C01000210000032DA
-:1016F000AC20900C8F82020034420100AF820200C5
-:101700008F8202203C03FFFE3463FFFF004310245E
-:10171000AF820220240201003C010002AC229004AE
-:101720003C01000210000024AC20900C8F820200CB
-:101730002403FEFF00431024AF8202008F820220A8
-:101740003C03000100431025AF8202203C0100024F
-:10175000AC2090043C01000210000017AC23900C58
-:101760008F82020034420100AF8202008F82022089
-:101770003C03000100431025AF8202202402010037
-:101780003C010002AC2290043C0100021000000A5F
-:10179000AC23900C3C04000124846C8097A6001AB2
-:1017A00097A700183C05000134A5FFFFAFA8001063
-:1017B0000C002B3BAFA000148F82020034420002C9
-:1017C0001000004BAF820200001289403C0500026D
-:1017D00000B128218CA58FF83C1000020211802155
-:1017E0008E108FF03C02400000A210241440001024
-:1017F000000000003C0200018C426F1C14400005F8
-:101800003C02BFFF8F82020034420002AF8202001E
-:101810003C02BFFF3442FFFF0C003DAF02028024B8
-:101820003C0100020031082110000031AC308FF083
-:101830003C0200018C426F1C104000053C0200205D
-:101840003C0200018C426E44104000253C02002006
-:1018500000A210241040000734840020240201005C
-:101860003C01000200310821AC2290041000000667
-:10187000348401003C01000200310821AC209004B6
-:101880002402FEFF008220243C02008000A21024DB
-:1018900010400007001219403C0200013C01000208
-:1018A00000230821AC22900C1000000800C2302553
-:1018B000001211403C01000200220821AC20900CD3
-:1018C0003C02FFFE3442FFFF00C23024AF8402001E
-:1018D000AF8602208F82022034420002AF820220B3
-:1018E000001211403C01000200220821AC308FF0B0
-:1018F0008FBF002C8FB200288FB100248FB0002042
-:1019000003E0000827BD003000000000000018219F
-:10191000308400FF2405FFDF2406FFBF00641007AA
-:101920003042000110400004000000008F8200449B
-:1019300010000003344200408F820044004610240F
-:10194000AF8200448F82004434420020AF820044C2
-:101950008F82004400451024AF82004424630001BC
-:10196000286200085440FFEE0064100703E00008FE
-:10197000000000002C8200081040001B0000000046
-:101980002405FFDF2406FFBF000418803C0200018D
-:1019900024426E60006218212464000490620000FA
-:1019A00010400004000000008F820044100000037B
-:1019B000344200408F82004400461024AF8200442D
-:1019C0008F82004434420020AF8200448F82004462
-:1019D00000451024AF820044246300010064102BF2
-:1019E0001440FFEE0000000003E0000800000000CB
-:1019F0000000000000000000000000008F8400C410
-:101A00008F8600E08F8700E42402FFF800C22824BC
-:101A100010E5001A27623FF814E2000224E80008EB
-:101A200027683000550500048D0A000030C200040C
-:101A300014400012008050218CE900008F42013CCC
-:101A4000014948230049182B94EB0006106000025E
-:101A500025630050004948210123182B5040000302
-:101A60008F4201FC03E0000800E01021AF8800E88D
-:101A700024420001AF4201FCAF8800E403E000080B
-:101A80000000102103E00008000000008F8300E444
-:101A900027623FF81062000424620008AF8200E869
-:101AA00003E00008AF8200E427623000AF8200E864
-:101AB00003E00008AF8200E403E00008000000003B
-:101AC0000000000000000000000000008F880120DE
-:101AD00027624FE08F8301281502000225090020AC
-:101AE00027694800112300128FA20010AD040000E6
-:101AF000AD050004AD060008A507000E8FA3001475
-:101B0000AD0200188FA20018AD03001C25030016BB
-:101B1000AD020010AD030014AF8901208F4300FC1B
-:101B2000240200012463FFFF03E00008AF4300FC30
-:101B30008F430324000010212463000103E0000808
-:101B4000AF43032403E00008000000008F88010079
-:101B5000276247E08F830108150200022509002053
-:101B6000276940001123000F8FA20010AD04000070
-:101B7000AD050004AD060008A507000E8FA30014F4
-:101B8000AD0200188FA20018AD03001C250300163B
-:101B9000AD020010AD030014AF89010003E000089E
-:101BA000240200018F430328000010212463000158
-:101BB00003E00008AF43032803E000080000000032
-:101BC00000000000000000000000000024486561E3
-:101BD0006465723A202F70726F6A656374732F7236
-:101BE00063732F73772F67652F2E2F6E69632F66B0
-:101BF00077322F636F6D6D6F6E2F66776D61696ED3
-:101C00002E632C7620312E312E322E343520313970
-:101C100039392F30312F32342030303A31303A35A3
-:101C20003520736875616E67204578702024000048
-:101C3000657674526E674600516576744600000002
-:101C400051657674505F46004D657674526E6746F6
-:101C5000000000004D516576744600004D516576D8
-:101C6000505F46005173436F6E495F4600000000AD
-:101C70005173436F6E734600517250726F64460029
-:101C80006261644D656D537A0000000068775665A7
-:101C900072000000626164487756657200000000BF
-:101CA0002A2A4441574E5F41000000007478527860
-:101CB0004266537A00000000626641746E4D726B9A
-:101CC000000000007265645A6F6E6531000000000C
-:101CD000706369436F6E660067656E436F6E660082
-:101CE0002A646D615244666C000000002A50414E27
-:101CF00049432A002E2E2F2E2E2F2E2E2F2E2E2F02
-:101D00002E2E2F7372632F6E69632F6677322F63C7
-:101D10006F6D6D6F6E2F66776D61696E2E6300005B
-:101D2000726362466C616773000000006261645216
-:101D30007852636200000000676C6F62466C6773E4
-:101D4000000000002B5F646973705F6C6F6F700040
-:101D50002B65765F68616E646C65720063616E749A
-:101D600031446D61000000002B715F646D615F7430
-:101D70006F5F6E69635F636B73756D002B685F7374
-:101D8000656E645F646174615F72656164795F63ED
-:101D90006B73756D000000002B685F646D615F728E
-:101DA000645F6173736973745F636B73756D000057
-:101DB00074436B736D4F6E002B715F646D615F7464
-:101DC0006F5F6E69630000002B685F73656E645F10
-:101DD000646174615F726561647900002B685F649F
-:101DE0006D615F72645F61737369737400000000FA
-:101DF00074436B736D4F6666000000002B685F7361
-:101E0000656E645F62645F72656164790000000002
-:101E10006873745352696E67000000006261645316
-:101E200052696E67000000006E69635352696E6705
-:101E30000000000077446D61416C6C4100000000BF
-:101E40002B715F646D615F746F5F686F73745F6344
-:101E50006B73756D000000002B685F6D61635F72CE
-:101E6000785F636F6D705F636B73756D000000006A
-:101E70002B685F646D615F77725F61737369737400
-:101E80005F636B73756D000072436B736D4F6E0013
-:101E90002B715F646D615F746F5F686F73740000B6
-:101EA0002B685F6D61635F72785F636F6D700000B8
-:101EB0002B685F646D615F77725F617373697374C0
-:101EC0000000000072436B736D4F666600000000F7
-:101ED0002B685F726563765F62645F7265616479C7
-:101EE000000000002B685F726563765F6A756D6243
-:101EF0006F5F62645F726561647900002B685F7276
-:101F00006563765F6D696E695F62645F7265616467
-:101F1000790000002B6D685F636F6D6D616E64000A
-:101F20002B685F74696D6572000000002B685F6448
-:101F30006F5F7570646174655F74785F636F6E73F3
-:101F4000000000002B685F646F5F757064617465EA
-:101F50005F72785F70726F64000000002B636B73B8
-:101F6000756D3136000000002B7065656B5F6D612B
-:101F7000635F72785F7761002B7065656B5F6D6181
-:101F8000635F7278000000002B6465715F6D6163B0
-:101F90005F7278002B685F6D61635F72785F617458
-:101FA000746E0000626164526574537A0000000030
-:101FB000727842644266537A000000002B6E756CA2
-:101FC0006C5F68616E646C657200000066774F70CC
-:101FD0004661696C000000002B685F757064617475
-:101FE000655F6C65643400002B685F7570646174B4
-:101FF000655F6C65643600002B685F7570646174A2
-:10200000655F6C6564320000696E74537461746559
-:10201000000000002A2A696E697443700000000005
-:102020002373637265616D0069537461636B4572FC
-:102030000000000070726F62654D656D0000000069
-:102040002A2A4441574E5F42000000002B73775FFD
-:10205000646D615F6173736973745F706C75735FD6
-:1020600074696D65720000002B267072656C6F617B
-:10207000645F77725F646573637200002B26707211
-:10208000656C6F61645F72645F64657363720000A6
-:102090002B685F68665F74696D65720024486561CE
-:1020A0006465723A202F70726F6A656374732F7261
-:1020B00063732F73772F67652F2E2F6E69632F66DB
-:1020C00077322F636F6D6D6F6E2F74696D65722E31
-:1020D000632C7620312E312E322E33352031393992
-:1020E000392F30312F32372031393A30393A3530C3
-:1020F0002068617965732045787020240000000015
-:10210000657674526E67460051657674460000002D
-:1021100051657674505F46004D657674526E674621
-:10212000000000004D516576744600004D51657603
-:10213000505F46005173436F6E495F4600000000D8
-:102140005173436F6E734600517250726F64460054
-:10215000542D446D6152643200000000542D446DD2
-:102160006152643100000000542D446D615264429C
-:1021700000000000542D446D6157723200000000D1
-:10218000542D446D6157723100000000542D446D90
-:1021900061577242000000000000000024486561A1
-:1021A0006465723A202F70726F6A656374732F7260
-:1021B00063732F73772F67652F2E2F6E69632F66DA
-:1021C00077322F636F6D6D6F6E2F636F6D6D616E04
-:1021D000642E632C7620312E312E322E323820316F
-:1021E0003939392F30312F32302031393A34393AB8
-:1021F000343920736875616E67204578702024003B
-:10220000657674526E67460051657674460000002C
-:1022100051657674505F46004D657674526E674620
-:10222000000000004D516576744600004D51657602
-:10223000505F46005173436F6E495F4600000000D7
-:102240005173436F6E734600517250726F64460053
-:102250003F48636D644D6278000000003F636D6429
-:1022600048737453000000003F636D644D634D6418
-:10227000000000003F636D6450726F6D000000004D
-:102280003F636D644C696E6B000000003F636D64DA
-:1022900045727200000086AC00008E5C00008E5C0F
-:1022A00000008DE400008B7800008E3000008E5C12
-:1022B00000008790000088000000899000008A6874
-:1022C00000008A3400008E5C0000887000008B24BF
-:1022D00000008E5C00008B34000087B4000088246E
-:1022E00000000000000000000000000024486561BC
-:1022F0006465723A202F70726F6A656374732F720F
-:1023000063732F73772F67652F2E2F6E69632F6688
-:1023100077322F636F6D6D6F6E2F6D636173742EE7
-:10232000632C7620312E312E322E38203139393837
-:102330002F31322F30382030323A33363A3336208C
-:10234000736875616E672045787020240000000076
-:10235000657674526E6746005165767446000000DB
-:1023600051657674505F46004D657674526E6746CF
-:10237000000000004D516576744600004D516576B1
-:10238000505F46005173436F6E495F460000000086
-:102390005173436F6E734600517250726F64460002
-:1023A0006164644D63447570000000006164644DB5
-:1023B0006346756C0000000064656C4D634E6F45AC
-:1023C00000000000000000000000000024486561DB
-:1023D0006465723A202F70726F6A656374732F722E
-:1023E00063732F73772F67652F2E2F6E69632F66A8
-:1023F00077322F636F6D6D6F6E2F646D612E632C5E
-:102400007620312E312E322E323420313939382F88
-:1024100031322F32312030303A33333A3039207371
-:102420006875616E67204578702024006576745267
-:102430006E674600516576744600000051657674FB
-:10244000505F46004D657674526E6746000000008E
-:102450004D516576744600004D516576505F4600DB
-:102460005173436F6E495F46000000005173436F24
-:102470006E734600517250726F6446007377446DFC
-:10248000614F66660000000031446D614F6E0000D0
-:102490007377446D614F6E002372446D6141544EF9
-:1024A0000000000072446D6141544E300000000095
-:1024B00072446D6141544E310000000072446D6100
-:1024C000344762002A50414E49432A002E2E2F2EB7
-:1024D0002E2F2E2E2F2E2E2F2E2E2F7372632F6E19
-:1024E00069632F6677322F636F6D6D6F6E2F646D2A
-:1024F000612E63002377446D6141544E000000005B
-:1025000077446D6141544E300000000077446D61A6
-:1025100041544E310000000077446D613447620041
-:102520000000000000000000000000002448656179
-:102530006465723A202F70726F6A656374732F72CC
-:1025400063732F73772F67652F2E2F6E69632F6646
-:1025500077322F636F6D6D6F6E2F74726163652EAE
-:10256000632C7620312E312E322E352031393938F8
-:102570002F30392F33302031383A35303A32382045
-:10258000736875616E672045787020240000000034
-:102590000000000000000000000000002448656109
-:1025A0006465723A202F70726F6A656374732F725C
-:1025B00063732F73772F67652F2E2F6E69632F66D6
-:1025C00077322F636F6D6D6F6E2F646174612E6350
-:1025D0002C7620312E312E322E31322031393939BC
-:1025E0002F30312F32302031393A34393A353120D9
-:1025F000736875616E6720457870202400000000C4
-:1026000046575F56455253494F4E3A202331204694
-:1026100072692041707220372031373A35373A35A8
-:1026200032205044542032303030000046575F434F
-:102630004F4D50494C455F54494D453A2031373A4A
-:1026400035373A353200000046575F434F4D504909
-:102650004C455F42593A206465767263730000000E
-:1026600046575F434F4D50494C455F484F53543A8E
-:1026700020636F6D707574650000000046575F43FE
-:102680004F4D50494C455F444F4D41494E3A2065AE
-:102690006E672E616374656F6E2E636F6D00000050
-:1026A00046575F434F4D50494C45523A206763634C
-:1026B0002076657273696F6E20322E372E320000DD
-:1026C00000000000120411000000000024486561B1
-:1026D0006465723A202F70726F6A656374732F722B
-:1026E00063732F73772F67652F2E2F6E69632F66A5
-:1026F00077322F636F6D6D6F6E2F6D656D2E632C4E
-:102700007620312E312E322E3520313939382F3086
-:10271000392F33302031383A35303A303820736829
-:1027200075616E672045787020240000244865613B
-:102730006465723A202F70726F6A656374732F72CA
-:1027400063732F73772F67652F2E2F6E69632F6644
-:1027500077322F636F6D6D6F6E2F73656E642E63AE
-:102760002C7620312E312E322E3434203139393826
-:102770002F31322F32312030303A33333A31382052
-:10278000736875616E672045787020240000000032
-:10279000657674526E674600516576744600000097
-:1027A00051657674505F46004D657674526E67468B
-:1027B000000000004D516576744600004D5165766D
-:1027C000505F46005173436F6E495F460000000042
-:1027D0005173436F6E734600517250726F644600BE
-:1027E00069736E745463705500000000244865617D
-:1027F0006465723A202F70726F6A656374732F720A
-:1028000063732F73772F67652F2E2F6E69632F6683
-:1028100077322F636F6D6D6F6E2F726563762E63E7
-:102820002C7620312E312E322E3533203139393964
-:102830002F30312F31362030323A35353A3433208B
-:10284000736875616E672045787020240000000071
-:10285000657674526E6746005165767446000000D6
-:1028600051657674505F46004D657674526E6746CA
-:10287000000000004D516576744600004D516576AC
-:10288000505F46005173436F6E495F460000000081
-:102890005173436F6E734600517250726F644600FD
-:1028A000724D616343686B300000000072784672BD
-:1028B0006D324C670000000072784E6F53744264B2
-:1028C0000000000072784E6F4D6942640000000005
-:1028D00072784E6F4A6D4264000000007278436B5C
-:1028E000446D614600000000727851446D457846A1
-:1028F00000000000727851446D61460072785144C6
-:102900004C42644600000000727851446D426446B7
-:1029100000000000727843726350616400000000A0
-:1029200072536D51446D614600000000244865619A
-:102930006465723A202F70726F6A656374732F72C8
-:1029400063732F73772F67652F2E2F6E69632F6642
-:1029500077322F636F6D6D6F6E2F6D61632E632CF9
-:102960007620312E312E322E323220313939382F25
-:1029700031322F30382030323A33363A3330207308
-:102980006875616E67204578702024006576745202
-:102990006E67460051657674460000005165767496
-:1029A000505F46004D657674526E67460000000029
-:1029B0004D516576744600004D516576505F460076
-:1029C0005173436F6E495F46000000005173436FBF
-:1029D0006E734600517250726F6446006D616354AD
-:1029E000687265730000000023744D616341544EAA
-:1029F0000000000023724D616341544E000000004E
-:102A000072656D4173737274000000006C696E6BC7
-:102A1000444F574E000000006C696E6B555000002B
-:102A20000000000000000000000000002448656174
-:102A30006465723A202F70726F6A656374732F72C7
-:102A400063732F73772F67652F2E2F6E69632F6641
-:102A500077322F636F6D6D6F6E2F636B73756D2E95
-:102A6000632C7620312E312E322E392031393939EE
-:102A70002F30312F31342030303A30333A3438204F
-:102A8000736875616E67204578702024000000002F
-:102A9000657674526E674600516576744600000094
-:102AA00051657674505F46004D657674526E674688
-:102AB000000000004D516576744600004D5165766A
-:102AC000505F46005173436F6E495F46000000003F
-:102AD0005173436F6E734600517250726F644600BB
-:102AE00000000000000000000000000050726F6253
-:102AF00065506879000000006C6E6B41535352546E
-:102B000000000000000109A400010A1C00010A5095
-:102B100000010A7C0001105000010AA800010B10FE
-:102B2000000111FC00010DC000010C6800010C80C7
-:102B300000010CC400010CEC00010D0C00010D346F
-:102B4000000111FC00010DC000010DF800010E1084
-:102B500000010E4000010E6800010E8800010EB059
-:102B60000000000000010FDC000110080001102C23
-:102B7000000111FC00011050000110780001110843
-:102B80000000000000000000000000000001186CC0
-:102B90000001193C00011A1400011AE400011B4055
-:102BA00000011C1C00011C4400011D2000011D48E7
-:102BB00000011EF000011F18000120C0000122B812
-:102BC0000001254C000124600001254C00012578FE
-:102BD000000120E8000122907273745F676D6969DB
-:102BE00000000000000126080001264000012728FF
-:102BF00000013374000133B4000133CC7365746C8D
-:102C00006F6F7000000000000000000000013BBC7E
-:102C100000013BFC00013C8C00013CD000013D3434
-:102C200000013DC000013DF400013E7C00013F1465
-:102C300000013FE400014024000140A8000140CC15
-:102C4000000141DC646F4261736550670000000061
-:102C500000000000000000000000000073746D61BF
-:102C6000634C4E4B000000006765746D636C6E6BC7
-:102C70000000000000014ED800014ED800014B8C2E
-:102C800000014BD800014C2400014ED87365746DCF
-:102C90006163616374000000000000000000000038
-:102CA0000000000000000000000000000000000024
-:102CB0000000000000000000000000000000000014
-:102CC0000000000000000000000000000000000103
-:102CD000000000010000000100C001FC00003FFCFA
-:102CE00000C00000416C74656F6E204163654E4901
-:102CF000432056000000000000000000000000001B
-:102D0000000000000000000000000000416C74653D
-:102D10006F6E204163654E49432056004242424255
-:102D2000000000000000000000000000001FFFFC89
-:102D3000001FFF7C000000000000000000000000F9
-:102D40000000000000000000000000000060CF0054
-:102D500000000060CF000000000000000000000044
-:102D60000000000000000000000000000000000063
-:102D70000000000000000000000000000000000053
-:102D80000000000000000000000000000000000043
-:102D90000000000000000000000000000000000033
-:102DA0000000000000000000000000030000000020
-:102DB0000000000100000000000000000000000012
-:102DC0000000000100000000000000010000000001
-:102DD00000000000000000000000000000000001F2
-:102DE00000000001000000000000000000000000E2
-:102DF00000000000000000000100000021000000B1
-:102E0000120001400000000000000000200000004F
-:102E1000120000A0000000001200006012000180FB
-:102E2000120001E0000000000000000000000000AF
-:102E30000000000100000000000000000000000091
-:102E40000000000000000000000000000000000280
-:102E5000000000000000000000030001000000016D
-:102E60000003020100000000000000000101010158
-:102E70000101010000010100010100010001000148
-:0C2E800001000101000001010000000041
-:00000001FF
-/* tg2 firmware v12.4.11 */
diff --git a/firmware/adaptec/starfire_rx.bin.ihex b/firmware/adaptec/starfire_rx.bin.ihex
deleted file mode 100644
index 6b1fae0d18eb..000000000000
--- a/firmware/adaptec/starfire_rx.bin.ihex
+++ /dev/null
@@ -1,53 +0,0 @@
-:10000000010003DC00000000040004210000008661
-:10001000800000150000180E8100001500006664C5
-:100020001A0040AB00000B06142000110000000075
-:10003000142040220000AAAA14204022000003003D
-:1000400014204022000000001A0040AB00000B14F6
-:1000500014200011000000008300001500000002C1
-:10006000040000210000000000000010000000005B
-:1000700004000421000000870000001000000000C0
-:1000800000000010000000000000801500000000CB
-:100090000000003E00000000000000100000000012
-:1000A0008200001500004000009E8050000000000B
-:1000B000030080150000000086008015000000008D
-:1000C00082000015000080000100001C00000000FC
-:1000D000000050A00000010C4E20D011000060086C
-:1000E0001420D012000040080000F09000007000C2
-:1000F0000000C8B0000030000000404000000000D8
-:10010000001080150000000000A2C1500000400057
-:1001100000A400B000000014000000200000000057
-:100120002500400D0000252500047220000031004C
-:10013000009340700000000000000020000000005C
-:1001400000924460000001842B20C01100000000D8
-:100150000000C42000000540360140180000422D78
-:100160001420001100000000009244600000018390
-:100170003200001F0000003402AC00150000000235
-:1001800000A601100000000842200011000000003D
-:1001900000924060000001030000001E000000000B
-:1001A00000000020000001000000001E0000000010
-:1001B00000924460000000860000408000000000C3
-:1001C0000092C0700000000000924060000001003A
-:1001D0000000C8900000500000A6C1100000000000
-:1001E00000B0C09000000012021C001500000000CA
-:1001F0003200001F0000003400924460000005102F
-:100200004421001100000000420000110000000025
-:1002100083000015000000400092446000000508C3
-:100220004501401800004545008080500000000056
-:10023000622080120000000082000015000008000B
-:100240001520001100000000000000100000000058
-:10025000000000100000000000000010000000007E
-:10026000000000100000000000000010000000006E
-:10027000800000150000EEA4810000150000005F62
-:1002800000000060000000000000412000000000AD
-:1002900000004A000000400000924460000001900D
-:1002A0005601401A000059561400001100000000C9
-:1002B0000093405000000018009300500000001808
-:1002C0003601403A0000002D000643A9000000005E
-:1002D0000000C420000001405601401A0000595699
-:1002E00014000011000000000000001000000000D9
-:1002F0000000001000000000000642A900000000FD
-:1003000000024420000001835601401A00005956A3
-:1003100082000015000020001520001100000000E0
-:1003200082000015000000101520001100000000E0
-:1003300082000015000000101520001100000000D0
-:00000001FF
diff --git a/firmware/adaptec/starfire_tx.bin.ihex b/firmware/adaptec/starfire_tx.bin.ihex
deleted file mode 100644
index 6b1fae0d18eb..000000000000
--- a/firmware/adaptec/starfire_tx.bin.ihex
+++ /dev/null
@@ -1,53 +0,0 @@
-:10000000010003DC00000000040004210000008661
-:10001000800000150000180E8100001500006664C5
-:100020001A0040AB00000B06142000110000000075
-:10003000142040220000AAAA14204022000003003D
-:1000400014204022000000001A0040AB00000B14F6
-:1000500014200011000000008300001500000002C1
-:10006000040000210000000000000010000000005B
-:1000700004000421000000870000001000000000C0
-:1000800000000010000000000000801500000000CB
-:100090000000003E00000000000000100000000012
-:1000A0008200001500004000009E8050000000000B
-:1000B000030080150000000086008015000000008D
-:1000C00082000015000080000100001C00000000FC
-:1000D000000050A00000010C4E20D011000060086C
-:1000E0001420D012000040080000F09000007000C2
-:1000F0000000C8B0000030000000404000000000D8
-:10010000001080150000000000A2C1500000400057
-:1001100000A400B000000014000000200000000057
-:100120002500400D0000252500047220000031004C
-:10013000009340700000000000000020000000005C
-:1001400000924460000001842B20C01100000000D8
-:100150000000C42000000540360140180000422D78
-:100160001420001100000000009244600000018390
-:100170003200001F0000003402AC00150000000235
-:1001800000A601100000000842200011000000003D
-:1001900000924060000001030000001E000000000B
-:1001A00000000020000001000000001E0000000010
-:1001B00000924460000000860000408000000000C3
-:1001C0000092C0700000000000924060000001003A
-:1001D0000000C8900000500000A6C1100000000000
-:1001E00000B0C09000000012021C001500000000CA
-:1001F0003200001F0000003400924460000005102F
-:100200004421001100000000420000110000000025
-:1002100083000015000000400092446000000508C3
-:100220004501401800004545008080500000000056
-:10023000622080120000000082000015000008000B
-:100240001520001100000000000000100000000058
-:10025000000000100000000000000010000000007E
-:10026000000000100000000000000010000000006E
-:10027000800000150000EEA4810000150000005F62
-:1002800000000060000000000000412000000000AD
-:1002900000004A000000400000924460000001900D
-:1002A0005601401A000059561400001100000000C9
-:1002B0000093405000000018009300500000001808
-:1002C0003601403A0000002D000643A9000000005E
-:1002D0000000C420000001405601401A0000595699
-:1002E00014000011000000000000001000000000D9
-:1002F0000000001000000000000642A900000000FD
-:1003000000024420000001835601401A00005956A3
-:1003100082000015000020001520001100000000E0
-:1003200082000015000000101520001100000000E0
-:1003300082000015000000101520001100000000D0
-:00000001FF
diff --git a/firmware/advansys/3550.bin.ihex b/firmware/advansys/3550.bin.ihex
deleted file mode 100644
index 6809b0d84e4f..000000000000
--- a/firmware/advansys/3550.bin.ihex
+++ /dev/null
@@ -1,317 +0,0 @@
-:10000000DD2DD504000000F200F0001618E400FC1D
-:10001000010048E4BE18188003F6020000FAFFFF52
-:10002000280E9EE7FF0082E700EA00F601E609E7F6
-:1000300055F001F601FA08000300040018F410005E
-:1000400000EC85F0BC00D5F08E0C385400E61EF0B4
-:1000500086F0B4009857D0010C1C3E1C0C00BB006D
-:10006000AA18028032F001FC880CC6120213184054
-:10007000005701EA3C006C016E0104123E570080FB
-:1000800003E6B600C00001013E01DA0F221008129B
-:10009000024AB95403581B8030E44BE4200032007C
-:1000A0003E00800024013C0168016A017001720178
-:1000B000740176017801620A920C2C102E1006133E
-:1000C0004C1CBB553C5604804AE402EE5BF0B1F098
-:1000D00003F706F703FC0F004000BE000001B00864
-:1000E00030136415321C381C4E1C10440248004C5E
-:1000F00004EA5DF004F602FC0500340036009800C6
-:10010000CC0020014E014E0B1E0E0C100A120413DF
-:100110004013301C004EBD56068300DC05F009F08C
-:1001200059F0A7F0B8F00EF70600190033009B0055
-:10013000A400B500BA00D000E100E700DE03560AD3
-:10014000140E021004100A1036100A131213521360
-:1001500010151415AC16201C341C361C08443844E9
-:1001600091440A454846014868548355B0570158A0
-:10017000835905E60BF00CF05CF04BF404F805F83D
-:1001800002FA03FA04FC05FC07000A000D001C003B
-:100190009E00A800AA00B900E00022012601790112
-:1001A0007A01C001C2017C025A03EA04E807680828
-:1001B0006908BA08E909060B3A0E00101A10ED108A
-:1001C000F11006120C1316131E1382134214D614C8
-:1001D0008A15C617D2176B18121C461C9C32004099
-:1001E0000E47484741488948804C00544455E555DE
-:1001F00014567757BF57405C0680089003A1FE9CB9
-:10020000F02902FEB80CFF100000D0FECC1800CF81
-:10021000FE8001FF030000FE9315FE0F05FF38006E
-:1002200000FE572400FE48004FFF04000010FF09A5
-:100230000000FF080101FF08FFFFFF270000FF107B
-:10024000FFFFFF0F0000FE7856FE3412FF21000072
-:10025000FE04F7CF2A670B01FECE0EFE04F7CF6730
-:100260000B3C2AFE3DF0FE0202FE20F09CFE91F0C7
-:10027000FEF001FE90F0FEF001FE8FF09C05513B78
-:1002800002FED40C01FE440DFEDD12FEFC10FE2821
-:100290001C05FEA600FED3124718FEA600B5FE48B8
-:1002A000F0FE8602FE49F0FEA002FE4AF0FEBE020B
-:1002B000FE46F0FE5002FE47F0FE5602FE43F0FE00
-:1002C0004402FE44F0FE4802FE45F0FE4C02170BCD
-:1002D000A0170618960229FE001CDEFE021CDDFE99
-:1002E0001E1CFEE91001FE2017FEE710FE06FCC7EB
-:1002F0000A6B019E0229144D379701FE640F0A6BA9
-:100300000182FEBD100A6B0182FEAD10FE161CFEBE
-:10031000581C170618962A2529FE3DF0FE020221D8
-:10032000FE9402FE5A1CEAFE141C14FE300037979D
-:1003300001FE540F1706189602D01E20071034FE37
-:10034000691017061896FE04EC20463D1220FE05A3
-:10035000F6C701FE5216094A4C35112D3C8A01E6BA
-:1003600002290A40010E07005D016FFE1810FE41D0
-:10037000580A99010EFEC85464FE0C0301E60229D6
-:100380002A46FE02E827F8FE9E43F7FE27F0FEDC31
-:1003900001FE074BFE20F09CFE401C25D2FE26F0FD
-:1003A000FE5603FEA0F0FE4403FE11F09CFEEF108B
-:1003B000FE9FF0FE6403EB0FFE1100025A2AFE4876
-:1003C0001CEB09041DFE1813231E98AC12980A405A
-:1003D000010EAC7501FEBC1511CA25D2FE01F0D28A
-:1003E000FE82F0FE9203EC11FEE40065FEA40325FC
-:1003F000321FFEB4030143FE06F0FEC4038D81FEEE
-:100400000AF0FE7A060222056B2816FEF604142C6A
-:1004100001338FFE660202D1EB2A671AFE671BF8D2
-:10042000F7FE481C70016E870A40010E070016D3C4
-:100430000ACA010E7460597627056B28FE10121443
-:100440002C01338FFE660202D1BC7DBD7F25226563
-:10045000FE3C041FFE380468FEA000FE9B57FE4EC3
-:10046000122BFF02001001081FFEE0042B01081FE1
-:1004700022302ED5FE4C44FE4C1260FE4448132C14
-:10048000FE4C5464D3467627FAEFFE621309041D2E
-:10049000FE2A132F077EA5FE2010132CFE4C546459
-:1004A000D3FAEF8609041DFE08132F077E6E090498
-:1004B0001DFE1C1214920904063B14C401338FFE66
-:1004C000700C02222B11FEE600FE1C90F903149220
-:1004D00001330229FE425B671AFE4659F8F7FE8790
-:1004E00080FE31E44F09040BFE7813FE2080071ACA
-:1004F000FE7012490406FE601305FEA2002816FED7
-:100500008005FE31E46A49040BFE4A1305FEA00093
-:1005100028FE42125E01082532F1010826FE9805E8
-:1005200011FEE3002349FE4AF0FE6A05FE49F0FE93
-:1005300064058324FE2100A124FE2200A0244CFE99
-:100540000948010826FE9805FEE2084904C53B015A
-:1005500086240612CC37FE270109041DFE2212470D
-:1005600001A714920904063B14C401338FFE700CDA
-:10057000022205FE9C0028FE3E12055028FE36137E
-:100580004701A726FE08060A06490419FE02125F63
-:1005900001FEAA141FFEFE05119A014311FEE5009B
-:1005A0000550B40C5005C628FE6212053F28FE5ABD
-:1005B0001301FE141801FE6618FE4348B719136CA8
-:1005C000FF020057488B1C3D85B7694701A726FEEF
-:1005D000720649041BDF890A4D01FED8141FFE680C
-:1005E00006119A014311FEE500053FB40C3F1706C2
-:1005F00001A7EC7270016E8711FEE200010825323E
-:10060000FE0AF0FEA6068CFE5C07FE06F0FE6407FE
-:100610008D81022209040BFE2E12151A0108150005
-:1006200001081500010815000108FE99A40108152C
-:100630000002FE320861041BFE381209041B6E150D
-:10064000FE1B000108150001081500010815000136
-:100650000815060108150002D9664CFE3A555FFEE2
-:100660009A814B1DBAFE32070A1DFE096FAFFECA02
-:1006700045FE3212622C85667B01082532FE0AF0A7
-:10068000FE32078D818CFE5C070222014302FE8A46
-:1006900006151902FE8A06FE9CF7D4FE2C90FEAECB
-:1006A0009077FECA070C541855094A6A351E200770
-:1006B00010FE0E1274FE808037206327FE0610FEA7
-:1006C00083E7C4A1FE0340094A4F3501A8ADFE1FD0
-:1006D00040125801A5FE0850FE8A50FE4451FEC645
-:1006E0005183FBFE8A900C521853FE0C90FE8E90A4
-:1006F000FE4050FEC2500C39183AFE4A1009046AF6
-:10070000FE2A12FE2C90FEAE900C54185509044F90
-:100710008501A8FE1F801258FE4490FEC6900C561C
-:100720001857FBFE8A900C521853FE4090FEC29060
-:100730000C39183A0C38184E094A19352A13FE4E4E
-:100740001165FE4808FE9EF0FE5C08B116322A7361
-:10075000DDB8FE8008B9FE9E088CFE7408FE06F027
-:10076000FE7A088D8102220143FEC9101519FEC9C7
-:1007700010610406FE101261040B4509040BFE68AB
-:1007800012FE2E1C02FE240A6104064561040BFEC3
-:100790005212FE2C1CFEAAF0FE1E09FEACF0FEBE9C
-:1007A00008FE8A10AAFEF310FEADF0FECA0802FE93
-:1007B000240AABFEE710FE2BF09DE91CFE00FEFEB6
-:1007C0001C12B5FED2F09DFE76181C1A169D05CBA4
-:1007D0001C06169DB86DB96DAAABFEB110705E2BEC
-:1007E000149201330FFE3500FE01F05A0F7C025ABD
-:1007F000FE74181CFE00F8166D671B01FE440D3BCD
-:1008000001E61E2774671A026D09040B21FE060A11
-:1008100009046AFE8212090419FE66131E58ACFC14
-:10082000FE8380FEC844FE2E13FE0491FE86916373
-:1008300027FE4059FEC15977D7055431550C7B1816
-:100840007CBE54BF5501A8AD63271258C038C14EB5
-:1008500079566857F4F5FE04FA38FE05FA4E01A5FC
-:10086000A2230C7B0C7C79566857FE1210090419E0
-:1008700016D77939683A0904FEF700350552315325
-:10088000FE1058FE9158FE1459FE9559026D090448
-:100890001916D70904FEF70035FE3A55FE19815F97
-:1008A000FE1090FE9290FED7102F079B16FEC608F2
-:1008B000119B09040BFE14130539313A77FEC60863
-:1008C000FE0C58FE8D58026D2347FE1980DE090488
-:1008D0000BFE1A12FE6C19FE1941E9B5FED1F0D9D2
-:1008E000147A01330FFE4400FE8E10FE6C19BE39DF
-:1008F000FEED19BF3AFE0C51FE8E51E91CFE00FFC1
-:1009000034FE7410B5FED2F0FEB20AFE76181C1A40
-:100910008405CB1C06FE08130FFE1600025AFED1FA
-:10092000F0FEC40A147A01330FFE1700FE4210FED7
-:10093000CEF0FECA0AFE3C10FECDF0FED60A0FFE37
-:100940002200025AFECBF0FEE20A0FFE2400025AF9
-:10095000FED0F0FEEC0A0F93DCFECFF0FEF60A0F9D
-:100960004CFE1010FECCF0D96104193B0FFE1200B2
-:100970002A13FE4E1165FE0C0BFE9EF0FE200BB1FD
-:1009800016322A73DDB822B9222AEC65FE2C0B251B
-:10099000328CFE480B8D81B8D4B9D402220143FEBB
-:1009A000DB1011FEE800AAAB70BC7DBD7FFE89F0B4
-:1009B00022302ED8BC7DBD7F01081F22302ED6B13B
-:1009C000450FFE4200025A7806FE814916FE380C99
-:1009D00009040BFE44130F004B0BFE54124BFE2870
-:1009E0000021FEA60C0A40010E07005D3EFE280015
-:1009F000FEE21001E701E80A9901FE320E59112DBD
-:100A0000016F02290FFE44004B0BDF3E0BFEB410BA
-:100A100001863E0BFEAA100186FE1982FE3446A313
-:100A20003E0B0FFE4300FE9610094A0B3501E7010D
-:100A3000E859112D016F670B593C8A02FE2A030900
-:100A4000040B843E0B0F00FE5C1061041BFE581269
-:100A500009041BFE5013FE1C1CFE9DF0FE5C0CFEE8
-:100A60001C1CFE9DF0FE620C094A1B35FEA9100FEE
-:100A7000FE1500FE04E60B5F5C0FFE1300FE101077
-:100A80000FFE4700A10FFE4100A00FFE240087AA21
-:100A9000AB70056B2821D15FFE04E61BFE9D41FE75
-:100AA0001C425901DA0229EA140B3795A914FE31C8
-:100AB00000379701FE540F02D03CFE06ECC9EE3E13
-:100AC0001DFECE45343CFE06EAC9FE474B89FE7545
-:100AD000570551FE9856FE38120A42010EFE444850
-:100AE0004609041DFE1A130A40010E47FE41580A2A
-:100AF00099010EFE49548EFE2A0D02FE2A030A5168
-:100B0000FEEE14EE3E1DFECE45343CFECE47FEAD5D
-:100B10001302291E200710FE9E1223124D1294125A
-:100B2000CE1E2D47372DB1E0FEBCF0FEEC0D1306B6
-:100B3000124D01FEE21505FE380131FE3A0177FE45
-:100B4000F00DFE02ECCE62005DFE04EC2046FE05D8
-:100B5000F6FE340101FE5216FBFE48F40DFE18139A
-:100B6000AFFE02EACE627AFEC513141B3795A95C6C
-:100B700005FE38011CFEF0FF0CFE600105FE3A0187
-:100B80000CFE62013D12202406122D112D8A13063F
-:100B90000323031E4DFEF7121E94AC1294077AFE37
-:100BA0007113FE241C141A3795A9FED910B6FE0342
-:100BB000DCFE7357FE805D03B6FE03DCFE5B57FE72
-:100BC000805D03FE0357B623FE00CC03FE0357B639
-:100BD000750309044CFE2213FE1C800706FE1A133F
-:100BE000FE1E80E1FE1D80A4FE0C90FE0E13FE0E84
-:100BF00090A3FE3C90FE30F40BFE3C50A001FE8220
-:100C0000162F072DE001FEBC1509041D4501E70163
-:100C1000E811FEE90009044CFE2C1301FE1416FE37
-:100C20001E1CFE1490FE96900CFE640118FE6601D8
-:100C300009044FFE1212FE038074FE01EC20FE80B8
-:100C4000401220632711C8591E20ED762003FE08AC
-:100C50001C05FEAC00FE065805FEAE00FE0758055A
-:100C6000FEB000FE085805FEB200FE0958FE0A1C40
-:100C7000246912C9230C500C3F1340485F171DFE16
-:100C8000904DFE915421FE080F3E10134248174C20
-:100C9000FE904DFE915421FE1E0F24101220782C40
-:100CA000461E20ED762011C8F6FED6F0FE320FEA81
-:100CB00070FE141CFE101CFE181C033CFE0C14EEEF
-:100CC000FE07E61DFECE47FEF513030186782C468F
-:100CD000FAEFFE42132F072DFE34130A42010EB025
-:100CE000FE3612F0FE454801E3FE00CCB0FEF313E1
-:100CF0003D750710A30A80010EFE805C016FFE0E99
-:100D000010077E45F6FED6F0FE6C0F03FE445874C5
-:100D1000FE01EC97FE9E40FE9DE700FE9CE71B76E1
-:100D20002701DAFEDD102ABC7DBD7F302ED5071BE2
-:100D3000FE4812070BFE5612071AFE301207C216A3
-:100D4000FE3E1107FE230016FE4A11070616FEA8F6
-:100D5000110719FE12120700162214C201339F2B2D
-:100D600001088C43032BFE62080ACA01FE320E11F1
-:100D70007E02292B2F079BFED9137939683A77FE1B
-:100D8000FC1009046AFE7212C038C14EF4F58EFEE2
-:100D9000C6101E58FE2613057B317C77FE820C0C94
-:100DA000541855230C7B0C7C01A82469731258013C
-:100DB000A5C038C14EFE0455FEA555FE04FA38FE06
-:100DC00005FA4EFE911005563157FE4056FEE1568B
-:100DD0000C56185783C038C14EF4F505523153FEF6
-:100DE0000056FEA1560C52185309046AFE1E121E2C
-:100DF00058FE1F4005543155FE2C50FEAE5005568E
-:100E00003157FE4450FEC65005523153FE0850FE85
-:100E10008A500539313AFE4050FEC250025C240629
-:100E200012CD025B2B01081F44302ED5070621444A
-:100E30002F079B215B016E1C3D164409040BE279D0
-:100E400039683AFE0A5534FE8B55BE39BF3AFE0C5E
-:100E500051FE8E51025BFE1981AFFE1941025B2BE0
-:100E6000010825321FA2302ED84B1AFEA6124B0BBA
-:100E70003B0244010825321FA2302ED6071A214416
-:100E800001081FA2302EFEE809FEC2496005FE9C43
-:100E9000002884490419349FFEBB454B00453E069B
-:100EA000783DFEDA14016E87FE4B45E22F079AE18A
-:100EB00005C62884053F28345E025BFEC05DFEF84F
-:100EC00014FE03170550B40C505E2B0108265C017C
-:100ED000FEAA14025C010825321F44302ED60706F4
-:100EE000214401FE8E13FE4258FE8214FEA4148794
-:100EF000FE4AF40B1644FE4AF406FE0C122F079A23
-:100F000085025B053FB40C3F5E2B0108265C01FEA9
-:100F1000D814025C130665FECA1226FEE01272F1B6
-:100F200001082372038FFEDC1225FEDC121FFECAAD
-:100F3000125E2B0108FED510136CFF020057488B80
-:100F40001CFEFF7FFE3056FE005C03136CFF0200A8
-:100F500057488B1C3DFE3056FE005C03136CFF02AD
-:100F60000057488B03136CFF020057488BFE0B5849
-:100F7000030A5001820A3F018203FC1C10FF030098
-:100F800054FE00F41948FE007DFE017DFE027DFE48
-:100F9000037C63270C521853BE56BF5703FE6208EA
-:100FA000FE824AFEE11AFE835A740301FE1418FE03
-:100FB00042485F608901081FFEA214302ED8010844
-:100FC0001FFEA214302EFEE80AFEC15905C628FEF7
-:100FD000CC1249041BFEC41323621BE24BC364FE04
-:100FE000E8133B130617C378DBFE7810FF02835526
-:100FF000A1FF028355621AA4BBFE30008EE4172CB9
-:101000001306FE5610620BE1BBFE64008EE40AFE7E
-:10101000640017931306FE28106206FE6013BBFEE1
-:10102000C8008EE40AFEC800174D130683BBFE906D
-:1010300001BAFE4E1489FE1210FE43F494FE56F0DF
-:10104000FE6014FE04F46CFE43F493FEF310F90109
-:10105000FE22131C3DFE1013FE0017FE4DE469BA7C
-:10106000FE9C14B769FE1C10FE0017FE4DE419BA71
-:10107000FE9C14B719836023FE4DF400DF8913062C
-:10108000FEB456FEC3580360130B03150601082671
-:10109000E5150B010826E5151A010826E572FE89FB
-:1010A000490108031506010826A6151A010826A6F7
-:1010B0001506010826A6FE8949010826A672FE89A2
-:1010C0004A01080360031ECC0706FE4413AD12CC90
-:1010D000FE49F4003B729F5EFE01ECFE2701F10128
-:1010E000082F07FEE300FE20131FFE5A152312CD22
-:1010F00001431ECD070645094A0635030A42010E83
-:10110000ED880710A40A80010E880A51019E030A87
-:1011100080010E88FE80E710071084FE455801E329
-:1011200088030A42010E880A51019E030A42010EF9
-:10113000FE8080F2FE49E410A40A80010EF20A51FA
-:1011400001820317107166FE6001FE18DFFE19DED2
-:10115000FE241CFE1DF71D90FEF61501FEFC16E098
-:10116000911D66FE2C01FE2F1903AE21FEE615FE31
-:10117000DA1017107105FE6401FE00F419FE18580C
-:1011800005FE6601FE19589119FE3C90FE30F406EA
-:10119000FE3C5066FE3800FE0F79FE1CF71990FEEB
-:1011A0004016FEB6143403AE21FE1816FE9C10172E
-:1011B0001071FE835AFE18DFFE19DEFE1DF738900F
-:1011C000FE6216FE9414FE10139138661BFEAF19D2
-:1011D000FE98E70003AE21FE5616FE6C1017107144
-:1011E000FE30BCFEB2BC91C5661BFE0F79FE1CF73B
-:1011F000C590FE9A16FE5C143403AE21FE8616FEE0
-:101200004210FE02F61071FE18FE54FE19FE55FC47
-:10121000FE1DF74F90FEC016FE3614FE1C13914FB4
-:1012200047FE8358FEAF19FE80E710FE81E71011DC
-:10123000FEDD006327036327FE124521FEB016146E
-:10124000063795A90229FE39F0FE04172303FE7E16
-:10125000181C1A5D130D037105CB1C06FEEF12FE60
-:10126000E110782C462F072DFE3C13FE8214FE421F
-:10127000133C8A0A42010EB0FE3E12F0FE454801C0
-:10128000E3FE00CCB0FEF3133D750710A30A800106
-:101290000EF2016FFE1610077E85FE4014FE24122A
-:1012A000F6FED6F0FE2417170B03FE9CE70B0FFE8D
-:1012B000150059762701DA1706033C8A094A1D35BD
-:1012C000112D016F170603FE3890FEBA9079C7689A
-:1012D000C8FE485534FEC955031E98731298030A78
-:1012E00099010EF00A40010EFE494416FEF01773F4
-:1012F00075030A42010E0710450A51019E0A40017A
-:101300000E737503FE4EE41A64FE241805FE900069
-:10131000FE3A455BFE4EE4C264FE361805FE9200BE
-:10132000FE02E61BDCFE4EE4FE0B0064FE481805E0
-:10133000FE9400FE02E619FE081005FE9600FE026D
-:10134000E62CFE4E45FE0C12AFFF046854DE1C690D
-:1013500003077AFE5AF0FE741824FE0900FE3410CA
-:10136000071BFE5AF0FE821824C3FE2610071A5DE2
-:10137000242CDC070B5D2493FE0E1007065D244D24
-:101380009FAD0314FE09000133FE04FE7D057FF9C5
-:101390000325FECA18FE14F00865FEC61803FF1ADE
-:0213A00000004B
-:00000001FF
-/* Microcode buffer is kept after initialization for error recovery. */
diff --git a/firmware/advansys/38C0800.bin.ihex b/firmware/advansys/38C0800.bin.ihex
deleted file mode 100644
index a60b447ff74a..000000000000
--- a/firmware/advansys/38C0800.bin.ihex
+++ /dev/null
@@ -1,336 +0,0 @@
-:10000000D83F0D05000000F200F000FC001618E4D7
-:10001000010048E4188003F60200CE1900FAFFFF41
-:100020001C0F00F69EE7FF0082E700EA01FA01E6F6
-:1000300009E755F001F60300040010001EF085F0FA
-:1000400018F40800BC00385400ECD5F0820D00E62E
-:1000500086F0B1F0985701FCB400D4010C1C3E1C92
-:100060003C00BB000010BA19028032F07C0D021374
-:10007000BA131840005701EA02FC03FC3E006C0171
-:100080006E0174017601B9543E57008003E6B60054
-:10009000C00001013E017A01CA08CE1016110412F7
-:1000A0000812024ABB553C5603581B8030E44BE40F
-:1000B0005DF002FA200032004000800024013C0183
-:1000C00068016A017001720178017C01620A860D83
-:1000D00006134C1C04804AE402EE5BF003F70C00AC
-:1000E0000F004700BE00000120115C16321C381CB6
-:1000F0004E1C1044004C04EA5CF0A7F004F603FA2E
-:100100000500340036009800CC0020014E014A0B57
-:10011000420C120F0C1022110A120413301C024858
-:10012000004E42544455BD56068300DC05F009F0EC
-:1001300059F0B8F04BF406F70EF704FC05FC060086
-:10014000190033009B00A400B500BA00D000E10004
-:10015000E700E203080F021004100A100A130C1340
-:1001600012132414341404160816A417201C341C6B
-:10017000361C0844384491440A45484601486854AE
-:100180003A558355E555B0570158835905E60BF0AC
-:100190000CF004F805F807000A001C001E009E0081
-:1001A000A800AA00B900E0002201260179017E0121
-:1001B000C401C60180025E03EE049A06F8076208D5
-:1001C00068086908D608E909FA0B2E0F12101A10F0
-:1001D000ED10F1102A1106120C123E121013161314
-:1001E0001E134614761482143615CA156B18BE18E1
-:1001F000CA18E619121C461C9C3200400E47FE9C91
-:10020000F02B02FEAC0DFF100000D7FEE81900D65F
-:10021000FE8401FF030000FE9315FE0F05FF38006A
-:1002200000FE572400FE4C005BFF04000011FF0994
-:100230000000FF080101FF08FFFFFF270000FF107B
-:10024000FFFFFF110000FE7856FE3412FF21000070
-:10025000FE04F7D62C990A01FEC20FFE04F7D699C8
-:100260000A422CFE3DF0FE0602FE20F0A7FE91F0B1
-:10027000FEF401FE90F0FEF401FE8FF0A7035D4D49
-:1002800002FEC80D01FE380EFEDD12FEFC10FE2837
-:100290001C03FEA600FED3124114FEA600C2FE48B7
-:1002A000F0FE8A02FE49F0FEA402FE4AF0FEC202FF
-:1002B000FE46F0FE5402FE47F0FE5A02FE43F0FEF8
-:1002C0004802FE44F0FE4C02FE45F0FE5002180AC1
-:1002D000AA180614A1022BFE001CE7FE021CE6FE73
-:1002E0001E1CFEE91001FE1818FEE710FE06FCCEEB
-:1002F000097001A8022B155939A201FE5810097086
-:100300000187FEBD1009700187FEAD10FE161CFEB0
-:10031000581C180614A12C1C2BFE3DF0FE060223CF
-:10032000FE9802FE5A1CF8FE141C15FE300039A27D
-:1003300001FE4810180614A102D72220071135FE2D
-:100340006910180614A1FE04EC204F431320FE058B
-:10035000F6CE01FE4A1708545837122F429201FE7A
-:100360008216022B0946010E0700660173FE181063
-:10037000FE415809A4010EFEC8546BFE100301FE95
-:100380008216022B2C4FFE02E82AFEBF57FE9E4328
-:10039000FE7757FE27F0FEE001FE074BFE20F0A798
-:1003A000FE401C1CD9FE26F0FE5A03FEA0F0FE48BB
-:1003B00003FE11F0A7FEEF10FE9FF0FE6803F91098
-:1003C000FE110002652CFE481CF908051BFE1813DF
-:1003D0002122A3B713A30946010EB77801FEB41674
-:1003E00012D11CD9FE01F0D9FE82F0FE9603FA125A
-:1003F000FEE40027FEA8031C341DFEB803014BFEDB
-:1004000006F0FEC8039586FE0AF0FE8A0602240363
-:10041000702817FEFA04156D01367BFE6A0202D8B9
-:10042000F92C9919FE671BFEBF57FE7757FE481C33
-:100430007401AF8C0946010E070017DA09D1010ECD
-:100440008D5164792A037028FE1012156D01367BD8
-:10045000FE6A0202D8C781C8831C2427FE40041DFF
-:10046000FE3C043BFEA000FE9B57FE4E122DFF02F9
-:100470000010010B1DFEE4042D010B1D243331DEA1
-:10048000FE4C44FE4C1251FE44480F6FFE4C546B20
-:10049000DA4F792AFE0680FE4847FE621308051BE4
-:1004A000FE2A13320782FE5213FE20100F6FFE4CFD
-:1004B000546BDAFE0680FE4847FE401308051BFE1B
-:1004C0000813320782FE301308051BFE1C12159D0F
-:1004D0000805064D15FE0D0001367BFE640D022455
-:1004E0002D12FEE600FE1C90FE405C04159D0136B8
-:1004F000022BFE425B9919FE4659FEBF57FE775705
-:10050000FE8780FE31E45B08050AFE8413FE20802E
-:100510000719FE7C12530506FE6C1303FEA2002889
-:1005200017FE9005FE31E45A53050AFE561303FEEA
-:10053000A00028FE4E1267FF02001027FE48051C8F
-:1005400034FE8948FF02001027FE560526FEA80546
-:1005500012FEE3002153FE4AF0FE7605FE49F0FE4E
-:1005600070058825FE2100AB25FE2200AA2558FE35
-:100570000948FF02001027FE860526FEA805FEE2B8
-:10058000085305CB4D01B0250613D339FE270108CA
-:10059000051BFE22124101B2159D0805064D15FEF0
-:1005A0000D0001367BFE640D022403FE9C0028EB47
-:1005B000035C28FE36134101B226FE1806090653D5
-:1005C000051FFE02125001FE9E151DFE0E0612A50D
-:1005D000014B12FEE500035CC10C5C03CD28FE62FA
-:1005E00012034528FE5A1301FE0C1901FE7619FE6E
-:1005F0004348C4CC0F71FF02005752931E438BC473
-:100600006E4101B226FE820653051AE9910959018D
-:10061000FECC151DFE780612A5014B12FEE5000367
-:1006200045C10C45180601B2FA767401AF8C12FE72
-:10063000E20027DB1C34FE0AF0FEB60694FE6C07CF
-:10064000FE06F0FE74079586022408050AFE2E12A7
-:100650001619010B1600010B1600010B1600010BF9
-:10066000FE99A4010B160002FE420868051AFE3826
-:100670001208051AFE301316FE1B00010B160001AE
-:100680000B1600010B1600010B1606010B160002DB
-:10069000E26C58BE50FE9A81551B7AFE4207091B38
-:1006A000FE096FBAFECA45FE3212696D8B6C7F2758
-:1006B000FE54071C34FE0AF0FE4207958694FE6C39
-:1006C000070224014B02DB161F02DBFE9CF7DCFE57
-:1006D0002C90FEAE9056FEDA070C60146108545A56
-:1006E0003722200711FE0E128DFE808039206A2AE3
-:1006F000FE0610FE83E7FE4800ABFE034008545B95
-:100700003701B3B8FE1F40136201EFFE0850FE8AA6
-:1007100050FE4451FEC65188FE0890FE8A900C5E41
-:10072000145FFE0C90FE8E90FE4050FEC2500C3DB9
-:10073000143EFE4A1008055AFE2A12FE2C90FEAE08
-:10074000900C60146108055B8B01B3FE1F8013627F
-:10075000FE4490FEC6900C3F1440FE0890FE8A9026
-:100760000C5E145FFE4090FEC2900C3D143E0C2EB9
-:10077000143C210C490C6308541F372C0FFE4E11FA
-:1007800027DDFE9EF0FE7608BC17342C77E6C5FE0A
-:100790009A08C6FEB80894FE8E08FE06F0FE94087D
-:1007A00095860224014BFEC910161FFEC91068056C
-:1007B00006FE101268050A4E08050AFE9012FE2E6B
-:1007C0001C02FE180B6805064E68050AFE7A12FE2A
-:1007D0002C1CFEAAF0FED209FEACF0FE000902FEBF
-:1007E000DE09FEB7F0FEFC08FE02F61A50FE701895
-:1007F000FEF118FE4055FEE155FE1058FE9158FEE0
-:100800001459FE95591C85FE8CF0FEFC08FEACF0D8
-:10081000FEF008B5FECB10FEADF0FE0C0902FE188E
-:100820000BB6FEBF10FE2BF085F41EFE00FEFE1C74
-:1008300012C2FED2F085FE76181E19178503D21E4D
-:10084000061785C54AC64AB5B6FE891074672D15C8
-:100850009D013610FE3500FE01F06510800265FE38
-:100860009880FE19E40AFE1A1251FE1982FE6C18D5
-:10087000FE4454BEFE1981FE74188F9017FECE08F8
-:10088000024A08055AEC032E293C0C3F14409B2ECB
-:100890009C3CFE6C18FEED18FE4454FEE5543A3FB5
-:1008A0003B40034929638FFEE354FE7418FEF5189C
-:1008B0008FFEE35490C056FECE08024AFE37F0FE8B
-:1008C000DA09FE8BF0FE6009024A08050A23FEFAE7
-:1008D0000A3A493B6356FE3E0A0FFEC007419800A4
-:1008E000ADFE0159FE52F0FE0C0A8F7AFE240A3A40
-:1008F000498FFEE35457497D63FE1458FE95580214
-:100900004A3A493B63FE1459FE9559BE574957630D
-:10091000024A08055AFE821208051FFE661322626B
-:10092000B7FE03A1FE8380FEC844FE2E13FE049191
-:10093000FE86916A2AFE4059FEC15956E00360299D
-:10094000610C7F148057607D6101B3B86A2A13621D
-:100950009B2E9C3C3A3F3B4090C0FE04FA2EFE0585
-:10096000FA3C01EFFE3610210C7F0C803A3F3B40F1
-:10097000E408051F17E03A3D3B3E0805FEF7003747
-:10098000035E295FFE1058FE915857497D6302FEB1
-:10099000F40908051F17E00805FEF70037BEFE1929
-:1009A0008150FE1090FE9290FED3103207A617FEE3
-:1009B000080912A608050AFE1413033D293E56FE37
-:1009C0000809FE0C58FE8D58024A2141FE1980E7A5
-:1009D00008050AFE1A12FE6C19FE1941F4C2FED176
-:1009E000F0E2157E013610FE4400FE8E10FE6C19FA
-:1009F000573DFEED197D3EFE0C51FE8E51F41EFE5C
-:100A000000FF35FE7410C2FED2F0FEA60BFE761873
-:100A10001E198A03D21E06FE081310FE1600026578
-:100A2000FED1F0FEB80B157E013610FE1700FE4217
-:100A300010FECEF0FEBE0BFE3C10FECDF0FECA0B4B
-:100A400010FE22000265FECBF0FED60B10FE240045
-:100A50000265FED0F0FEE00B109EE5FECFF0FEEA50
-:100A60000B1058FE1010FECCF0E268051F4D10FE72
-:100A700012002C0FFE4E1127FE000CFE9EF0FE14FD
-:100A80000CBC17342C77E6C524C6242CFA27FE208C
-:100A90000C1C3494FE3C0C9586C5DCC6DC0224019B
-:100AA0004BFEDB1012FEE800B5B674C781C883FEAA
-:100AB00089F0243331E1C781C88327FE660C1D24E9
-:100AC0003331DFBC4E10FE420002657C06FE8149D8
-:100AD00017FE2C0D08050AFE44131000550AFE549B
-:100AE0001255FE280023FE9A0D0946010E070066E6
-:100AF00044FE2800FEE21001F501F609A401FE26DD
-:100B00000F64122F0173022B10FE4400550AE944B2
-:100B10000AFEB41001B0440AFEAA1001B0FE198208
-:100B2000FE3446AC440A10FE4300FE961008540AF8
-:100B30003701F501F664122F0173990A644292029B
-:100B4000FE2E0308050A8A440A1000FE5C106805A0
-:100B50001AFE581208051AFE5013FE1C1CFE9DF0CA
-:100B6000FE500DFE1C1CFE9DF0FE560D08541A375B
-:100B7000FEA91010FE1500FE04E60A50FE2E10100D
-:100B8000FE1300FE1010106FAB10FE4100AA10FE05
-:100B900024008CB5B67403702823D850FE04E61ADE
-:100BA000FE9D41FE1C426401E3022BF8150A39A0A8
-:100BB000B415FE310039A201FE481002D742FE06EC
-:100BC000ECD0FC441BFECE453542FE06EAD0FE4783
-:100BD0004B91FE7557035DFE9856FE381209480189
-:100BE0000EFE44484F08051BFE1A130946010E412C
-:100BF000FE415809A4010EFE495496FE1E0E02FE47
-:100C00002E03095DFEEE14FC441BFECE453542FE6C
-:100C1000CE47FEAD13022B22200711FE9E12211398
-:100C200059139F13D5222F41392FBCADFEBCF0FEC6
-:100C3000E00E0F06135901FEDA1603FE380129FEF5
-:100C40003A0156FEE40EFE02ECD5690066FE04ECA5
-:100C5000204FFE05F6FE340101FE4A17FE0890FE05
-:100C600048F40DFE1813BAFE02EAD5697EFEC513DC
-:100C7000151A39A0B4FE2E1003FE38011EFEF0FF37
-:100C80000CFE600103FE3A010CFE620143132025B5
-:100C900006132F122F920F060421042259FEF71279
-:100CA000229FB7139F077EFE7113FE241C1519396E
-:100CB000A0B4FED910C3FE03DCFE7357FE805D04B2
-:100CC000C3FE03DCFE5B57FE805D04FE0357C321B9
-:100CD000FE00CC04FE0357C37804080558FE221317
-:100CE000FE1C800706FE1A13FE1E80EDFE1D80AE60
-:100CF000FE0C90FE0E13FE0E90ACFE3C90FE30F407
-:100D00000AFE3C50AA01FE7A1732072FAD01FEB44D
-:100D10001608051B4E01F501F612FEE900080558FC
-:100D2000FE2C1301FE0C17FE1E1CFE1490FE969066
-:100D30000CFE640114FE660108055BFE1212FE0340
-:100D4000808DFE01EC20FE804013206A2A12CF64C1
-:100D50002220FB792004FE081C03FEAC00FE06588E
-:100D600003FEAE00FE075803FEB000FE085803FE67
-:100D7000B200FE0958FE0A1C256E13D0210C5C0C33
-:100D8000450F465250181BFE904DFE915423FEFC19
-:100D90000F44110F48521858FE904DFE915423E411
-:100DA000251113207C6F4F2220FB792012CFFE14D7
-:100DB00056FED6F0FE2610F874FE141CFE101CFE23
-:100DC000181C0442FE0C14FCFE07E61BFECE47FE78
-:100DD000F5130401B07C6F4FFE0680FE4847FE42CB
-:100DE0001332072FFE34130948010EBBFE3612FEE4
-:100DF0004148FE454801F0FE00CCBBFEF3134378AA
-:100E00000711AC0984010EFE805C0173FE0E100711
-:100E1000824EFE1456FED6F0FE601004FE44588D3D
-:100E2000FE01ECA2FE9E40FE9DE700FE9CE71A79C3
-:100E30002A01E3FEDD102CC781C8833331DE071A97
-:100E4000FE4812070AFE56120719FE301207C9178C
-:100E5000FE321207FE230017EB070617FE9C12074F
-:100E60001FFE12120700172415C90136A92D010B08
-:100E7000944B042DDD09D101FE260F1282022B2D89
-:100E80003207A6FED9133A3D3B3E56FEF011080547
-:100E90005AFE72129B2E9C3C90C096FEBA112262A2
-:100EA000FE2613037F298056FE760D0C6014612107
-:100EB0000C7F0C8001B3256E77136201EF9B2E9C93
-:100EC0003CFE0455FEA555FE04FA2EFE05FA3CFE36
-:100ED0009110033F2940FE4056FEE1560C3F14405E
-:100EE000889B2E9C3C90C0035E295FFE0056FEA1AD
-:100EF000560C5E145F08055AFE1E122262FE1F4049
-:100F000003602961FE2C50FEAE50033F2940FE4491
-:100F100050FEC650035E295FFE0850FE8A50033D16
-:100F2000293EFE4050FEC2500289250613D40272AB
-:100F30002D010B1D4C3331DE0706234C3207A6234F
-:100F40007201AF1E43174C08050AEE3A3D3B3EFEC8
-:100F50000A5535FE8B55573D7D3EFE0C51FE8E5198
-:100F60000272FE1981BAFE194102722D010B1C3466
-:100F70001DE83331E15519FEA612550A4D024C0108
-:100F80000B1C341DE83331DF0719234C010B1DE81E
-:100F90003331FEE809FEC2495103FE9C00288A5302
-:100FA000051F35A9FEBB4555004E44067C43FEDABD
-:100FB0001401AF8CFE4B45EE3207A5ED03CD288A18
-:100FC00003452835670272FEC05DFEF814FE031764
-:100FD000035CC10C5C672D010B268901FE9E150286
-:100FE00089010B1C341D4C3331DF0706234C01F102
-:100FF000FE4258F1FEA4148CFE4AF40A174CFE4A35
-:10100000F406EA3207A58B02720345C10C45672D31
-:10101000010B268901FECC1502890F0627FEBE139F
-:1010200026FED41376FE8948010B2176047BFED080
-:10103000131CFED0131DFEBE13672D010BFED51031
-:101040000F71FF02005752931EFEFF7FFE3056FEC7
-:10105000005C040F71FF02005752931E43FE30568E
-:10106000FE005C040F71FF0200575293040F71FFE2
-:101070000200575293FE0B5804095C018709450191
-:101080008704FE03A11E11FF030054FE00F41F524B
-:10109000FE007DFE017DFE027DFE037C6A2A0C5E61
-:1010A000145F573F7D4004DDFE824AFEE11AFE8355
-:1010B0005A8D0401FE0C19FE4248505191010B1D3E
-:1010C000FE96153331E1010B1DFE96153331FEE816
-:1010D0000AFEC15903CD28FECC1253051AFEC413D3
-:1010E00021691AEE55CA6BFEDC144D0F0618CA7C36
-:1010F00030FE7810FF028355ABFF0283556919AEAD
-:1011000098FE300096F2186D0F06FE5610690AED33
-:1011100098FE640096F209FE6400189E0F06FE28F1
-:10112000106906FE601398FEC80096F209FEC8001A
-:1011300018590F068898FE90017AFE421591E4FE38
-:1011400043F49FFE56F0FE5415FE04F471FE43F482
-:101150009EFEF310FE405C01FE16141E43ECFE00E2
-:1011600017FE4DE46E7AFE9015C46EFE1C10FE0054
-:1011700017FE4DE4CC7AFE9015C4CC885121FE4D6B
-:10118000F400E9910F06FEB456FEC35804510F0A4D
-:10119000041606010B26F3160A010B26F316190195
-:1011A0000B26F376FE8949010B041606010B26B1C6
-:1011B0001619010B26B11606010B26B1FE8949014D
-:1011C0000B26B176FE894A010B04510422D307068F
-:1011D000FE4813B813D3FE49F4004D76A967FE010B
-:1011E000ECFE2701FE8948FF02001027FE2E163272
-:1011F00007FEE300FE20131DFE52162113D4014BFF
-:1012000022D407064E08540637040948010EFB8E07
-:101210000711AE0984010E8E095D01A8040984013D
-:101220000E8EFE80E71107118AFE455801F08E04EC
-:101230000948010E8E095D01A8040948010EFE80CF
-:1012400080FE804CFE49E411AE0984010EFE804C04
-:10125000095D0187041811756CFE6001FE18DFFE40
-:1012600019DEFE241CFE1DF71B97FEEE1601FEF490
-:1012700017AD9A1B6CFE2C01FE2F1904B923FEDE5C
-:1012800016FEDA1018117503FE6401FE00F41FFE4D
-:10129000185803FE6601FE19589A1FFE3C90FE3056
-:1012A000F406FE3C506CFE3800FE0F79FE1CF71F62
-:1012B00097FE3817FEB6143504B923FE1017FE9CAE
-:1012C00010181175FE835AFE18DFFE19DEFE1DF799
-:1012D0002E97FE5A17FE9414EC9A2E6C1AFEAF1934
-:1012E000FE98E70004B923FE4E17FE6C1018117526
-:1012F000FE30BCFEB2BC9ACB6C1AFE0F79FE1CF716
-:10130000CB97FE9217FE5C143504B923FE7E17FEC0
-:101310004210FE02F61175FE18FE60FE19FE61FE17
-:1013200003A1FE1DF75B97FEB817FE3614FE1C13D3
-:101330009A5B41FE8358FEAF19FE80E711FE81E7FC
-:101340001112FEDD006A2A046A2AFE124523FEA855
-:1013500017150639A0B4022BFE39F0FEFC17210444
-:10136000FE7E181E19660F0D047503D21E06FEEFD1
-:1013700012FEE1107C6F4F32072FFE3C13F1FE424C
-:101380001342920948010EBBEBFE4148FE4548015D
-:10139000F0FE00CCBBFEF31343780711AC098401C7
-:1013A0000EFE804C0173FE161007828BFE4014FE69
-:1013B0002412FE1456FED6F0FE1C18180A04FE9CD9
-:1013C000E70A10FE150064792A01E3180604429228
-:1013D00008541B37122F0173180604FE3890FEBA0A
-:1013E000903ACE3BCFFE485535FEC9550422A3772F
-:1013F00013A30409A4010EFE41480946010EFE494B
-:101400004417FEE8187778040948010E07114E09C1
-:101410005D01A80946010E777804FE4EE4196BFEC3
-:101420001C1903FE9000FE3A45FE2C10FE4EE4C946
-:101430006BFE2E1903FE9200FE02E61AE5FE4EE454
-:10144000FE0B006BFE401903FE9400FE02E61FFE39
-:10145000081003FE9600FE02E66DFE4E45EABAFF56
-:10146000046854E71E6EFE081CFE6719FE0A1CFE87
-:101470001AF4FE0004EAFE48F4197AFE74190F19F2
-:1014800004077EFE5AF0FE841925FE0900FE341082
-:10149000071AFE5AF0FE921925CAFE261007196691
-:1014A000256DE5070A66259EFE0E1007066625597E
-:1014B000A9B80415FE09000136FE04FE810383FE6F
-:1014C000405C041CF7FE14F00B27FED6191CF77BBA
-:0C14D000F7FE82F0FEDA1904FFCC0000E9
-:00000001FF
-/* Microcode buffer is kept after initialization for error recovery. */
diff --git a/firmware/advansys/38C1600.bin.ihex b/firmware/advansys/38C1600.bin.ihex
deleted file mode 100644
index 18c7c4862046..000000000000
--- a/firmware/advansys/38C1600.bin.ihex
+++ /dev/null
@@ -1,398 +0,0 @@
-:1000000077EF0406000000F2001600FC001000F07C
-:1000100018E40100041E48E403F6F7132E1E020044
-:100020000717C05F00FAFFFF040000F609E782E748
-:1000300085F086F04E109EE7FF0055F001F60300B4
-:10004000985701E600EA00EC01FA18F40800F01DE8
-:10005000385432F01000C20E1EF0D5F0BC004BE454
-:1000600000E6B1F0B40002133E1CC8473E00D801C0
-:1000700006130C1C5E1E0057C85701FCBC0EA212D2
-:10008000B9540080620A5A12C8153E1E1840BD5667
-:1000900003E601EA5CF00F0020006C016E0104121F
-:1000A0000413BB553C563E5703584AE44000B60083
-:1000B000BB00C000000101013E01580A44100A12B1
-:1000C0004C1C4E1C024A30E405E60C003C0080004B
-:1000D00024013C0168016A0170017201740176011A
-:1000E00078017C01C60E0C10AC12AE12161A321C2E
-:1000F0006E1E02483A55C95702EE5BF003F706F749
-:1001000003FC06001E00BE00E1000C12181A701A53
-:10011000301C381C1044004CB057405C4DE404EADD
-:100120005DF0A7F004F602FC05000900190032009A
-:1001300033003400360098009E00CC0020014E01B0
-:1001400079013C09680D021004103A1008120A13D4
-:100150004016501600174A19004E0054015800DC92
-:1001600005F009F059F0B8F048F40EF70A009B00CA
-:100170009C00A400B500BA00D000E700F0036908B5
-:10018000E9095C0CB612BC19D81B201C341C361CA7
-:10019000421D0844384491440A45484689486854F9
-:1001A0008355835931E402E607F008F00BF00CF0B8
-:1001B0004BF404F805F802FA03FA04FC05FC070006
-:1001C000A800AA00B900E000E500220126016001B4
-:1001D0007A018201C801CA0186026A031805B207C2
-:1001E0006808100D06100A100E1012106010ED10A5
-:1001F000F310061210121E120C130E131013FE9C95
-:10020000F03505FEEC0EFF100000E9FE341F00E89B
-:10021000FE8801FF030000FE9315FE0F05FF380066
-:1002200000FE572400FE4C0065FF0400001AFF0981
-:100230000000FF080101FF08FFFFFF270000FF107B
-:10024000FFFFFF130000FE7856FE3412FF2100006E
-:10025000FE04F7E8377D0D01FE4A11FE04F7E87D44
-:100260000D5137FE3DF0FE0C02FE20F0BCFE91F079
-:10027000FEF801FE90F0FEF801FE8FF0BC03674D22
-:1002800005FE080F01FE780FFEDD1205FE0E03FECF
-:10029000281C03FEA600FED1123E22FEA600ACFEE4
-:1002A00048F0FE9002FE49F0FEAA02FE4AF0FEC8A7
-:1002B00002FE46F0FE5A02FE47F0FE6002FE43F0E8
-:1002C000FE4E02FE44F0FE5202FE45F0FE56021CB7
-:1002D0000DA21C0722B70535FE001CFEF110FE0220
-:1002E0001CF5FE1E1CFEE910015FFEE710FE06FC79
-:1002F000DE0A8101A305351F9547B801FEE4110A06
-:1003000081015CFEBD100A81015CFEAD10FE161C71
-:10031000FE581C1C0722B7372A35FE3DF0FE0C02A2
-:100320002BFE9E02FE5A1CFE121CFE141C1FFE30E9
-:100330000047B801FED4111C0722B705E9212C099A
-:100340001A31FE69101C0722B7FE04EC2C6001FE76
-:100350001E1E202CFE05F6DE01FE621B010C614A0A
-:100360004415565101FE9E1E01FE961A05350A5788
-:1003700001180900360185FE1810FE41580ABA011D
-:1003800018FEC8547BFE1C0301FE961A0535376023
-:10039000FE02E830FEBF57FE9E43FE7757FE27F071
-:1003A000FEE401FE074BFE20F0BCFE401C2AEBFEE3
-:1003B00026F0FE6603FEA0F0FE5403FE11F0BCFE24
-:1003C000EF10FE9FF0FE7403FE461C19FE1100059F
-:1003D0007037FE481CFE461C010C0628FE1813262A
-:1003E00021B9C720B90A570118C78901FEC81A15D3
-:1003F000E12AEBFE01F0EBFE82F0FEA403FE9C324C
-:1004000015FEE4002FFEB6032A3C16FEC60301418A
-:10041000FE06F0FED603AFA0FE0AF0FEA2070529F5
-:1004200003811E1BFE24051F6301428FFE7002051F
-:10043000EAFE461C377D1DFE671BFEBF57FE775741
-:10044000FE481C7501A6860A57011809001BEC0A14
-:10045000E101187750408D3003811EF81F6301427F
-:100460008FFE700205EAD799D89C2A292FFE4E04E8
-:1004700016FE4A047EFEA000FE9B57FE541232FF79
-:10048000020010010816FE02053201081629272570
-:10049000EEFE4C44FE581250FE44481334FE4C54B9
-:1004A0007BEC608D3001FE4E1EFE4847FE7C130142
-:1004B0000C0628FE32130143099BFE6813FE26102A
-:1004C0001334FE4C547BEC01FE4E1EFE4847FE5496
-:1004D00013010C0628A50143099BFE4013010C06DD
-:1004E00028F91F7F010C06074D1FFE0D0001428FEA
-:1004F000FEA40E05293215FEE6000FFE1C9004FE38
-:100500009C933A0B0E8B021F7F01420535FE425B26
-:100510007D1DFE4659FEBF57FE77570FFE878004AC
-:10052000FE8783FEC9470B0ED065010C060DFE98B1
-:10053000130FFE208004FEA083330B0E091DFE84E2
-:100540001201380607FE701303FEA2001E1BFEDA1E
-:1005500005D0540138060DFE581303FEA0001EFE00
-:1005600050125EFF0200102FFE90052A3CCCFF02C5
-:1005700000102FFE9E0517FEF40515FEE300260170
-:1005800038FE4AF0FEC005FE49F0FEBA05712EFEA7
-:100590002100F12EFE2200A22E4AFE0948FF020091
-:1005A000102FFED00517FEF405FEE208013806FE06
-:1005B0001C004D01A72E0720E447FE2701010C0671
-:1005C00028FE24123E01841F7F010C06074D1FFEEA
-:1005D0000D0001428FFEA40E052903E61EFECA137C
-:1005E00003B61EFE401203661EFE38133E0184173A
-:1005F000FE72060A0701380624FE02124F01FE565B
-:100600001916FE68061582014115E203668A106616
-:10061000039A1EFE701203551EFE681301C60912CE
-:1006200048FE92062E1201FEAC1DFE434862801366
-:1006300058FF02005752AD233F4E62493E018417D6
-:10064000FEEA0601380612F7450A9501FE841916DE
-:10065000FEE0061582014115E203558A10551C077C
-:100660000184FEAE10036F1EFE9E133E0184039AAA
-:100670001EFE1A1201380612FC01C601FEAC1DFE58
-:1006800043486280F0450A9503B61EF801380624F7
-:1006900036FE02F60771788C004D62493E2D934E6E
-:1006A000D00D17FE9A0701FEC01916FE90072620EE
-:1006B0009E1582014115E2219E0907FB03E6FE58C3
-:1006C0005710E605FE2A06036F8A106F1C07018487
-:1006D000FE9C325F7501A68615FEE2002FED2A3CD6
-:1006E000FE0AF0FECE07AEFE9608FE06F0FE9E085D
-:1006F000AFA00529010C060DFE2E12141D010814D1
-:100700000001081400010814000108FE99A4010862
-:10071000140005FEC60901760612FE3A12010C0607
-:1007200012FE301314FE1B0001081400010814000F
-:1007300001081400010814070108140005EF7C4AA1
-:10074000784F0FFE9A8104FE9A83FECB470B0E2D45
-:100750002848FE6C080A28FE096FCAFECA45FE3208
-:100760001253634E7C972FFE7E082A3CFE0AF0FE51
-:100770006C08AFA0AEFE96080529014105ED1424D2
-:1007800005EDFE9CF79F01FEAE1EFE185801FEBE51
-:100790001EFE9958FE7818FEF9188EFE1609106A8A
-:1007A000226B010C615444212C091AF87701FE7E5A
-:1007B0001E472C7A30F0FE83E7FE3F0071FE0340B7
-:1007C000010C61654401C2C8FE1F40206E01FE6A33
-:1007D00016FE0850FE8A50FE4451FEC651FE10100F
-:1007E00001FECE1E01FEDE1E1068226901FEEE1E15
-:1007F00001FEFE1EFE4050FEC250104B224CFE8AEF
-:1008000010010C0654FE501201FEAE1E01FEBE1E6B
-:10081000106A226B010C06654E01C20FFE1F800498
-:10082000FE9F83330B0E206E0FFE449004FEC49394
-:100830003A0BFEC69004FEC693790B0E106C226D27
-:1008400001FECE1E01FEDE1E106822690FFE4090E2
-:1008500004FEC0933A0BFEC29004FEC293790B0EC5
-:10086000104B224C10642234010C6124443713FED7
-:100870004E112FFEDE09FE9EF0FEF209FE01481B1E
-:100880003C3788F5D4FE1E0AD5FE420AD2FE1E0A67
-:10089000D3FE420AAEFE120AFE06F0FE180AAFA010
-:1008A00005290141FEC1101424FEC110017606077E
-:1008B000FE14120176060D5D010C060DFE7412FE8B
-:1008C0002E1C05FE1A0C017606075D0176060D4109
-:1008D000FE2C1CFEAAF0FECE0AFEACF0FE660AFE5E
-:1008E0009210C4F6FEADF0FE720A05FE1A0CC5FEAB
-:1008F000E710FE2BF0BFFE6B1823FE00FEFE1C125D
-:10090000ACFED2F0BFFE7618231D1BBF03E3230706
-:100910001BBFD45BD55BD25BD35BC4C5FEA910758E
-:100920005E321F7F014219FE3500FE01F0701998FA
-:100930000570FE741823FE00F81B5B7D1201FE7823
-:100940000F4D01FE961A2130777D1D055B010C06C7
-:100950000D2BFEE20B010C0654FEA612010C062420
-:10096000FE8813216EC701FE1E1F0FFE838004FE4A
-:100970008383FEC9470B0EFEC844FE42130FFE04DC
-:100980009104FE8493FECA570BFE869104FE869363
-:10099000FECB570B0E7A30FE4059FEC1598E4003F4
-:1009A0006A3B6B10972298D96ADA6B01C2C87A3019
-:1009B000206EDB64DC34916C7E6DFE4455FEE555A3
-:1009C000FE04FA64FE05FA3401FE6A16A3261097A7
-:1009D0001098916C7E6DFE1410010C06241B409142
-:1009E0004B7E4C010C06FEF7004403683B69FE1089
-:1009F00058FE9158FE1459FE9559055B010C0624CA
-:100A00001B40010C06FEF700447801FE8E1E4F0FBE
-:100A1000FE109004FE90933A0BFE929004FE929387
-:100A2000790B0EFEBD10014309BB1BFE6E0A15BB00
-:100A3000010C060DFE1413034B3B4C8EFE6E0AFE9A
-:100A40000C58FE8D58055B263E0FFE198004FE995A
-:100A500083330B0EFEE510010C060DFE1A12FE6C20
-:100A600019FE1941FE6B18ACFED1F0EF1F92014246
-:100A700019FE4400FE9010FE6C19D94BFEED19DAF8
-:100A80004CFE0C51FE8E51FE6B1823FE00FF31FE12
-:100A90007610ACFED2F0FEBA0CFE7618231D5D0374
-:100AA000E32307FE081319FE16000570FED1F0FEC1
-:100AB000CC0C1F92014219FE17005CFECEF0FED254
-:100AC0000CFE3E10FECDF0FEDE0C19FE220005707D
-:100AD000FECBF0FEEA0C19FE24000570FED0F0FEFD
-:100AE000F40C1994FE1C10FECFF0FEFE0C194AF314
-:100AF000FECCF0EF017606244D19FE12003713FEEE
-:100B00004E112FFE160DFE9EF0FE2A0DFE01481B13
-:100B10003C3788F5D429D529D229D32937FE9C32F0
-:100B20002FFE3E0D2A3CAEFE620DAFA0D49FD59F96
-:100B3000D29FD39F05290141FED31015FEE800C4C2
-:100B4000C575D799D89CFE89F0292725BED799D895
-:100B50009C2FFE8C0D16292725BDFE0148A419FEE9
-:100B6000420005709007FE81491BFE640E010C06D1
-:100B70000DFE441319002D0DFE54122DFE28002BDE
-:100B8000FEDA0E0A57011809003646FE2800FEFA62
-:100B90001001FEF41C01FE001D0ABA01FE581040AF
-:100BA00015560185053519FE44002D0DF7460DFE3D
-:100BB000CC1001A7460DFEC21001A70FFE1982043A
-:100BC000FE9983FECC470B0EFE3446A5460D19FE5A
-:100BD0004300FEA210010C610D4401FEF41C01FE55
-:100BE000001D40155601857D0D405101FE9E1E05DC
-:100BF000FE3A03010C060D5D460D1900FE62100160
-:100C0000760612FE5C12010C0612FE5213FE1C1C2C
-:100C1000FE9DF0FE8E0EFE1C1CFE9DF0FE940E014D
-:100C20000C611244FE9F1019FE1500FE04E60D4FE4
-:100C3000FE2E1019FE1300FE101019FE4700F119C8
-:100C4000FE4100A219FE240086C4C57503811E2B37
-:100C5000EA4FFE04E612FE9D41FE1C424001F405EF
-:100C600035FE121C1F0D47B5C31FFE310047B801EA
-:100C7000FED41105E951FE06ECE0FE0E474628FEC3
-:100C8000CE453151FE06EAE0FE474B45FE7557035F
-:100C900067FE9856FE38120A5A0118FE4448600151
-:100CA0000C0628FE18130A5701183EFE41580ABACE
-:100CB000FEFA14FE4954B0FE5E0F05FE3A030A67C1
-:100CC000FEE014FE0E474628FECE453151FECE47CB
-:100CD000FEAD130535212C091AFE98122620962008
-:100CE000E7FE081CFE7C19FEFD19FE0A1C03E5FE4A
-:100CF0004855A53BFE6201FEC95531FE741001FE48
-:100D0000F01A03FE38013BFE3A018EFE1E10FE0271
-:100D1000ECE7530036FE04EC2C60FE05F6FE3401D1
-:100D200001FE621B01FECE1EB211FE1813CAFE02A6
-:100D3000EAE75392FEC3131F1247B5C3FE2A1003FE
-:100D4000FE380123FEF0FF10E503FE3A0110FE62BB
-:100D50000101FE1E1E202C155601FE9E1E130702C9
-:100D600026022196C720960992FE79131F1D47B5CA
-:100D7000C3FEE110CFFE03DCFE7357FE805D02CFA1
-:100D8000FE03DCFE5B57FE805D02FE0357CF26FEAE
-:100D900000CC02FE0357CF8902010C064AFE4E1317
-:100DA0000FFE1C8004FE9C83330B0E0907FE3A13D2
-:100DB0000FFE1E8004FE9E83330B0EFE2A130FFED1
-:100DC0001D8004FE9D83FEF9130EFE1C1301FEEE32
-:100DD0001EACFE141301FEFE1EFE8158FA01FE0E2B
-:100DE0001FFE30F40DFE3C50A201FE921B01430990
-:100DF00056FB01FEC81A010C0628A401FEF41C01D2
-:100E0000FE001D15FEE900010C064AFE4E1301FE10
-:100E1000221BFE1E1C0FFE149004FE94933A0BFE40
-:100E2000969004FE9693790B0E10FE640122FE66E6
-:100E300001010C0665F90FFE038004FE8383330B6A
-:100E40000E77FE01EC2CFE8040202C7A3015DF401E
-:100E5000212CFE00408D2C02FE081C03FEAC00FE7F
-:100E6000065803FEAE00FE075803FEB000FE085809
-:100E700003FEB200FE0958FE0A1C2E4920E026108F
-:100E8000661055106F1357524F1C28FE904DFE915F
-:100E9000542BFE8811461A135A521C4AFE904DFEDE
-:100EA00091542BFE9E112E1A202C903460212CFE82
-:100EB00000408D2C15DFFE1456FED6F0FEB211FE5A
-:100EC000121C75FE141CFE101CFE181C0251FE0C98
-:100ED00014FE0E47FE07E628FECE47FEF51302017C
-:100EE000A7903460FE0680FE4847FE4213FE028053
-:100EF0000956FE34130A5A0118CBFE3612FE414839
-:100F0000FE454801FEB216FE00CCCBFEF3133F892E
-:100F1000091AA50A9D0118FE805C0185F2099BA4AF
-:100F2000FE1456FED6F0FEEC1102FE445877FE0188
-:100F3000ECB8FE9E40FE9DE700FE9CE7128D30015E
-:100F4000F4FEDD1037D799D89C2725EE0912FE480C
-:100F500012090DFE5612091DFE301209DD1BFEC4DA
-:100F60001309FE23001BFED01309071BFE341409CE
-:100F700024FE121209001B291FDD0142A1320108C3
-:100F8000AE410232FE62080AE101FE5810159B05CF
-:100F90003532014309BBFED713914B7E4C8EFE8048
-:100FA00013010C0654FE7212DB64DC34FE4455FE61
-:100FB000E555B0FE4A13216EFE261303973B988E2B
-:100FC000FEB60E106A226B261097109801C22E49A9
-:100FD00088206E01FE6A16DB64DC34FE0455FEA533
-:100FE00055FE04FA64FE05FA34FE8F10036C3B6D67
-:100FF000FE4056FEE156106C226D71DB64DC34FE5F
-:101000004455FEE55503683B69FE0056FEA15610A7
-:10101000682269010C0654F9216EFE1F40036A3BE9
-:101020006BFE2C50FEAE50036C3B6DFE4450FEC672
-:101030005003683B69FE0850FE8A50034B3B4CFE50
-:101040004050FEC25005732E07209E0572320108E3
-:10105000163D2725EE09072B3D014309BB2B7201E5
-:10106000A6233F1B3D010C060DFE1E13914B7E4C2B
-:10107000FE0A5531FE8B55D94BDA4CFE0C51FE8ED3
-:1010800051057201FE8E1ECAFE1941057232010819
-:101090002A3C16C02725BE2D1DC02D0D832D7F1B7C
-:1010A000FE6615053D01082A3C16C02725BD091D11
-:1010B0002B3D010816C02725FEE809FEC249500352
-:1010C000B61E830138062431A1FEBB452D00A4467F
-:1010D00007903F01FEF81501A686FE4B45FE201342
-:1010E00001430982FE1613039A1E5D03551E315EED
-:1010F0000572FEC05D01A7FE031703668A10665ED7
-:10110000320108177301FE5619057301082A3C16AF
-:101110003D2725BD09072B3D01FEBE16FE4258FEA8
-:10112000E81401A686FE4AF40D1B3DFE4AF407FEB4
-:101130000E12014309824E057203558A10555E3224
-:101140000108177301FE8419057301082A3C163D36
-:101150002725BD09122B3D01FEE8178BFEAA14FEC0
-:10116000B61486A8B20D1B3DB207FE0E120143094C
-:10117000824E0572036F8A106F5E32010817730189
-:10118000FEC019057313072FFECC1517FEE2155F7D
-:10119000CC0108265F028FFEDE152AFEDE1516FE44
-:1011A000CC155E320108FED5101358FF02005752CD
-:1011B000AD23FEFF7FFE3056FE005C021358FF0297
-:1011C000005752AD233FFE3056FE005C021358FF1D
-:1011D00002005752AD021358FF02005752FE005E44
-:1011E000021358FF02005752ADFE0B58020A660167
-:1011F0005C0A55015C0A6F015C0201FE1E1F231A86
-:10120000FF030054FE00F424520FFE007C04FE078E
-:101210007C3A0B0EFE0071FEF918FE7A19FEFB19DE
-:10122000FE1AF700FE1BF7007A3010682269D96CAD
-:10123000DA6D02FE6208FE824AFEE11AFE835A77E8
-:101240000201C6FE42484F5045010816FEE017272E
-:1012500025BE010816FEE0172725FEE80AFEC15943
-:10126000039A1EFEDA1201380612FED0132653121C
-:1012700048FE0817D1125312FE1E132DB47BFE2612
-:10128000174D13071CB49004FE7810FF028355F12C
-:10129000FF028355531DFE1213D6FE3000B0FE80B0
-:1012A000171C631307FE5610530DFE1613D6FE646B
-:1012B00000B0FE80170AFE64001C941307FE28107D
-:1012C0005307FE6013D6FEC800B0FE80170AFEC8A2
-:1012D000001C95130771D6FE900148FE8C1745F34C
-:1012E000FE43F496FE56F0FE9E17FE04F458FE43AD
-:1012F000F494F68B01FE2416233FFCA88C4948FE8B
-:10130000DA176249FE1C10A88C8048FEDA1762804A
-:10131000715026FE4DF400F7451307FEB456FEC388
-:10132000580250130D02503E784F45010816A92768
-:1013300025BEFE03EAFE7E01010816A92725FEE967
-:101340000A010816A92725FEE90AFE05EAFE7F0123
-:10135000010816A92725FE6909FE02EAFE8001019F
-:101360000816A92725FEE80847FE810103B61E835B
-:101370000138062431A278F2530736FE34F43FA137
-:1013800078039A1E830138061231F04F45FE901003
-:10139000FE405A233FFB8C4948FEAA186249718CD3
-:1013A0008048FEAA186280FEB456FE405D01C60168
-:1013B000FEAC1DFE0217FEC845FE5AF0FEC018FE28
-:1013C00043482D9336FE34F4FE0011FE40102DB438
-:1013D00036FE34F404FE34102DFE0B00364663FE58
-:1013E0002810FEC049FF020054B2FE900148FEFAE8
-:1013F0001845FE1CF43FF3FE40F496FE56F0FE0C3A
-:1014000019FE04F458FE40F494F63E2D934ED00D90
-:1014100021FE7F01FEC846FE24138C005D2621FEBE
-:101420007E01FEC845FE141321FE8001FE4845FAE8
-:1014300021FE8101FEC8444E260213070278455062
-:10144000130D021407010817FE8219140D01081765
-:10145000FE8219141D010817FE82195FFE894901D9
-:1014600008021407010817C1141D010817C1140749
-:10147000010817C1FE8949010817C15FFE894A01A9
-:1014800008025002140701081774147F010817742A
-:10149000141201081774FE89490108177414000119
-:1014A000081774FE894A01081774FE0949010817D4
-:1014B000745FCC01080221E40907FE4C13C820E444
-:1014C000FE49F4004D5FA15EFE01ECFE2701CCFF5A
-:1014D0000200102FFE3E1A014309FEE300FE221314
-:1014E00016FE641A26209E0141219E09075D010C0B
-:1014F000610744020A5A0118FE0040AA091AFE12A6
-:10150000130A9D0118AA0A6701A3020A9D0118AADD
-:10151000FE80E71A091A5DFE455801FEB216AA02BE
-:101520000A5A0118AA0A6701A3020A5A011801FE01
-:101530007E1EFE804CFE49E41AFE12130A9D01181D
-:10154000FE804C0A67015C021C1A877CE5FE18DFEE
-:10155000FE19DEFE241CFE1DF728B1FE041B01FE51
-:101560002A1CFAB3287CFE2C01FE2F1902C92BFE7F
-:10157000F41AFEFA101C1A8703FE6401FE00F4241C
-:10158000FE185803FE6601FE1958B32401FE0E1F13
-:10159000FE30F407FE3C507CFE3800FE0F79FE1C46
-:1015A000F724B1FE501BFED4143102C92BFE261BBA
-:1015B000FEBA101C1A87FE835AFE18DFFE19DEFEE3
-:1015C0001DF754B1FE721BFEB214FCB3547C12FE24
-:1015D000AF19FE98E70002C92BFE661BFE8A101C9D
-:1015E0001A878B0FFE309004FEB0933A0BFE18580A
-:1015F000FE329004FEB2933A0BFE19580EA8B34A7D
-:101600007C12FE0F79FE1CF74AB1FEC61BFE5E146B
-:101610003102C92BFE961B5CFE02F61A87FE18FEED
-:101620006AFE19FE6B01FE1E1FFE1DF765B1FEEE80
-:101630001BFE3614FE1C13B3653EFE8358FEAF1925
-:10164000FE80E71AFE81E71A15FEDD007A30027A85
-:1016500030FE12452BFEDC1B1F0747B5C30535FEC8
-:1016600039F0752602FE7E18231D361311028703FA
-:10167000E32307FEEF12FEE110903460FE028009C2
-:1016800056FE3C13FE8214FE421351FE06830A5A94
-:101690000118CBFE3E12FE4148FE454801FEB2163F
-:1016A000FE00CCCBFEF3133F89091AA50A9D011851
-:1016B000FE804C0185FE1610099B4EFE4014FE2450
-:1016C00012FE1456FED6F0FE521C1C0D02FE9CE7C4
-:1016D0000D19FE1500408D3001F41C070251FE0665
-:1016E00083FE1880612844155601851C0702FE38C8
-:1016F00090FEBA9091DE7EDFFE485531FEC955025C
-:1017000021B98820B9020ABA0118FE41480A5701D6
-:1017100018FE49441BFE1E1D8889020A5A01180939
-:101720001AA40A6701A30A570118888902FE4EE429
-:101730001D7BFE521D03FE9000FE3A45FE2C10FE5E
-:101740004EE4DD7BFE641D03FE9200D112FE1A10F2
-:10175000FE4EE4FE0B007BFE761D03FE9400D124BA
-:10176000FE081003FE9600D163FE4E4583CAFF04B7
-:101770006854FEF1102349FE081CFE6719FE0A1C7E
-:10178000FE1AF4FE000483B21D48FEAA1D131D02BA
-:101790000992FE5AF0FEBA1D2E93FE34100912FE75
-:1017A0005AF0FEC81D2EB4FE2610091D362E63FE0B
-:1017B0001A10090D362E94F20907362E95A1C8028B
-:1017C0001F930142FE04FE99039C8B022AFE1C1EFD
-:1017D000FE14F0082FFE0C1E2AFE1C1E8FFE1C1E7F
-:1017E000FE82F0FE101E020F3F04FE8083330B0EBC
-:1017F000020FFE188004FE9883330B0E020FFE02C8
-:101800008004FE8283330B0E020FFE068004FE86E8
-:1018100083330B0E020FFE1B8004FE9B83330B0EE3
-:10182000020FFE048004FE8483330B0E020FFE8041
-:101830008004FE8083FEC9470B0E020FFE1981044F
-:10184000FE9983FECA470B0E020FFE068304FE8636
-:1018500083FECE470B0E020FFE2C9004FEAC933A93
-:101860000B0E020FFEAE9004FEAE93790B0E020F2C
-:10187000FE089004FE88933A0B0E020FFE8A900435
-:10188000FE8A93790B0E020FFE0C9004FE8C933AA5
-:101890000B0E020FFE8E9004FE8E93790B0E020F3C
-:1018A000FE3C9004FEBC933A0B0E028B0FFE0380AD
-:0E18B00004FE8383330B770EA802FF66000050
-:00000001FF
-/* Microcode buffer is kept after initialization for error recovery. */
diff --git a/firmware/advansys/mcode.bin.ihex b/firmware/advansys/mcode.bin.ihex
deleted file mode 100644
index cd160d938667..000000000000
--- a/firmware/advansys/mcode.bin.ihex
+++ /dev/null
@@ -1,147 +0,0 @@
-:100000003F452C01010301190F0000000000000012
-:10001000000000000F0F0F0F0F0F0F0F0000000068
-:1000200000000000000000000000000000000000D0
-:1000300000000000000000000000000000000000C0
-:100040000000000000000000C3120D0501000000C8
-:1000500000FF000000000000FF80FFFF0100000023
-:10006000000000000000002300000000000700FF67
-:1000700000000000FFFFFF00000000000000E48817
-:100080000000000080734804360000A2C2008073A4
-:1000900003233640B600360005D60CD212DA00A291
-:1000A000C20092801E985000F5004898DF23366009
-:1000B000B60092804F00F5004898EF233660B600F6
-:1000C000928080629280004615EE13EA020109D800
-:1000D000CD044D0000A3D600A6977F2304618401C0
-:1000E000E684D2C18073CD044D0000A3DA01A69747
-:1000F000C681C28880738077000101A1FE004F0095
-:10010000849707A6080100330300C288030301DEB9
-:10011000C288CE006960CE0002034A6000A2780166
-:10012000806307A62401788103038063E20007A6A9
-:10013000340100330400C2880307020104CA0D23FE
-:1001400068984D04048505D80D236898CD041523BF
-:10015000F888FB23026182018063020306A3620127
-:1001600000330A00C2884E0007A36E0100330B0063
-:10017000C288CD04362D00331A00C288500488810D
-:1001800006AB820188814E0007A39201500000A3B4
-:100190003C0100057C814697020105C60423A001AD
-:1001A0001523A101BE81FD23026182010ADA4A0002
-:1001B000066100A0B4018063CD04362D00331B001E
-:1001C000C28806236898CD04E684060100A2D40103
-:1001D000576000A0DA01E6848023A001E6848073E2
-:1001E0004B00066100A2000204010CDE020103CCF8
-:1001F0004F008497FC810823024182014F006297DF
-:1002000048048480F0970046560003C00123E800AC
-:1002100081730629034206E203EE6BEB1123F88893
-:100220000498F0808073807707A42A027C9506A644
-:10023000340203A64C044682040103D8B4986A969B
-:100240004682FE95806783038063B62D02A66C020A
-:1002500007A65A0206A65E0203A66202C2887C9521
-:100260004882609648820423A0011423A1013C84A3
-:1002700004010CDCE0232561EF0014014F04A80108
-:100280006F00A5010323A40106239C01242B1C015C
-:1002900002A6AA0207A65A0206A65E0203A6200428
-:1002A00001A6B40200A6B40200331200C288000EF8
-:1002B0008063004300A08C024D0404010BDCE723A3
-:1002C00004618401103112351401EC006C38003FD8
-:1002D0000000EA821823046118A0E2020401A2C807
-:1002E00000331F00C28808310A350C390E3D7E9854
-:1002F000B62D01A6140300A6140307A60C0306A638
-:10030000100303A6200402A66C0200333300C28847
-:100310007C95EE826096EE82829880427E9864E4BC
-:1003200004012DC83105070100A2540300438701D1
-:10033000050586987E9800A6160307A64C0303A61B
-:100340003C0406A6500301A6160300332500C2880C
-:100350007C95328360963283040110CE07C8050570
-:10036000EB0400330020C020816272830001050588
-:10037000FFA27A03B1010823B2012E8305051501FE
-:1003800000A29A03EC006E0095016C38003F00005B
-:1003900001A6960300A69603108480427E9801A6CB
-:1003A000A40300A6BC031084A898804201A6A4035D
-:1003B00007A6B203D4837C95A88300332F00C2889C
-:1003C000A898804200A6BC0307A6CA03D4837C95E4
-:1003D000C08300332600C288382B80328036042345
-:1003E000A0011223A101108407F006A4F403806B7E
-:1003F000806705238303806303A60E0407A6060413
-:1004000006A60A0400331700C2887C95F483609620
-:10041000F483208407F006A42004806B8067052302
-:1004200083038063B62D03A63C0407A6340406A606
-:10043000380400333000C2887C9520846096208484
-:100440001D0106CC00330084C0200023EA00816235
-:10045000A20D806307A65A0400331800C288030364
-:100460008063A30107A46404230100A286040AA0F8
-:100470007604E00000331D00C2880BA08204E00077
-:1004800000331E00C2884223F888002322A3E6041A
-:10049000082322A3A204282322A3AE04022322A31A
-:1004A000C4044223F8884A00066100A0AE04452334
-:1004B000F888049800A2C004B49800330082C020D9
-:1004C0008162E8814723F88804010BDE0498B49820
-:1004D00000330081C0208162140100A00002432388
-:1004E000F8880423A0014423A10180734D0003A3D5
-:1004F000F40400332700C288040104DC0223A201B3
-:100500000423A001049826954B00F6004F044F00E9
-:1005100000A3220500057600066100A21C050A85DD
-:100520004697CD04248548048480020103DA8023A1
-:10053000820134850223A0014A00066100A2400521
-:100540001D0104D6FF2386414B60CB00FF238001B1
-:1005500049008101040102C830018001F704030150
-:1005600049048001C90000050001FFA0600577046F
-:100570000123EA005D00FEC700620023EA00006379
-:1005800007A4F805030302A08E05F48500332D00AF
-:10059000C28804A0B80580630023DF004A0006611A
-:1005A00000A2A4051D0106D60223024182015000CB
-:1005B00062970485042302418201048508A0BE05D8
-:1005C000F48503A0C405F48501A0CE0588008063EE
-:1005D000CC8607A0EE055F00002BDF0800A2E60531
-:1005E0008067806301A27A067C8506236898482389
-:1005F000F88807238000068780637C850023DF005E
-:1006000000634A00066100A236061D0116D4C0230D
-:1006100007418303806306A61C0600333700C288A7
-:100620001D0101D620236360830380630223DF0062
-:1006300007A67C05EF046F0000634B000641CB006A
-:100640005200066100A24E061D0103CAC0230741E5
-:1006500000631D0104CC00330083C020816280232D
-:1006600007410063806708238303806300630123DD
-:10067000DF0006A6840607A67C058067806300333A
-:100680000040C020816200630000FE958303806308
-:1006900006A6940607A67C05000001A01407002BFF
-:1006A000400E8063010006A6AA0607A67C05400E40
-:1006B0008063004300A0A20606A6BC0607A67C0530
-:1006C0008067400E806307A67C050023DF0000637F
-:1006D00007A6D60600332A00C28803038063890078
-:1006E0000A2B07A6E80600332900C288004300A2AF
-:1006F000F406C00E8063DE86C00E00330080C0208A
-:100700008162040102DA80637C85807B806306A6B7
-:100710008C0600332C00C2880CA22E07FE958303A2
-:10072000806306A62C0707A67C0500333D00C2881F
-:1007300000008067830380630CA0440707A67C0544
-:10074000BF2304618401E6840063F0040101F10029
-:100750000001F20001058001720471008101700442
-:10076000800581050063F004F20072040101F100CC
-:1007700070008101700471008101720080017104B8
-:100780007000800170040063F004F2007204000144
-:10079000F10070008001700471008001720081011D
-:1007A000710470008101700400630023B3018305AC
-:1007B000A301A201A1010123A0010001C80003A11E
-:1007C000C40700330700C28880058105040111C8F1
-:1007D0004800B001B1010823B201050148040043FB
-:1007E00000A2E4070005DA870001C800FF238001AA
-:1007F00005050063F7041A09F6086E040002804339
-:100800007608800277040063F7041A09F6086E047C
-:10081000000200A0140816880043760880027704BE
-:100820000063F3040023F40074008043F400CF401D
-:1008300000A2440874040201F7C9F6D9000101A11D
-:10084000240804982695248873040063F30475042F
-:100850005A88020104D84697049826954A8875005C
-:1008600000A3640800054E8873040063807B8063E6
-:1008700006A6760800333E00C28880678303806343
-:100880000063382B9C88382B928832093105929866
-:100890000505B209006300320036003A003E0063ED
-:1008A00080328036803A803EB43D0063382B40323F
-:1008B0004036403A403E00635A20C94000A0B40888
-:1008C0005D00FEC300638073E6200223E8008273AC
-:1008D000FFFD80731323F8886620C0200423A00145
-:1008E000A123A1018162E28880738077680000A261
-:1008F000800003C2F1C74123F8881123A10104231A
-:04090000A001E684E8
-:00000001FF
-/* Microcode buffer is kept after initialization for error recovery. */
diff --git a/firmware/atmsar11.HEX b/firmware/atmsar11.HEX
deleted file mode 100644
index dfddc190ac24..000000000000
--- a/firmware/atmsar11.HEX
+++ /dev/null
@@ -1,204 +0,0 @@
-:04000000A0D0F0009C
-:2C008000401A680000000000335B007C13600005335B10003C1AA0C0375A018003400008000000001760FFFB335B400020
-:2C00AC00401A700013600003241B0FC0AF9B45002508000803400008420000108F810C9032220002104000033C03A0D174
-:2C00D8002463F8100060F809242100011000001AAF810C9082020011AF900C480441000A34420080967D000296020012A4
-:2C01040000000000105D00110000000004110161A66200021000000DAE62000C34848000A20200114D01FFFF000000005E
-:2C0130008F834C0000000000AF830FEC00E0F80903E03821000414000440FFF700000000AF80460C8E1000084D01FFFF36
-:2C015C00000000008F834C004900001DAF830FEC8F820CBC8F9D0C4C2442000197BE0000AF820CBC13C00009ACA200D872
-:2C018800A7A000003C0100D1003E08259422002C0411013FA4220002AC22000CAC2000108F9E0C5427BD000217BE00028C
-:2C01B4008CA200C08F9D0C508F970FC8AF9D0C4C12E20005878040023C02A0D12442F94C0040F8090000000000E0F8094A
-:2C01E00003E038214500FFDC8E11000C3C1300D1001111022C4304001060FFB900021180026298218E76003C32220008C1
-:2C020C001440FFB78E7700348E7500303C03CFB016C0000302D5102B041100BE000000001040FFA6007018264D01FFFFE5
-:2C023800000000008F824C00AF974C00AF820FECAC7600100260902132220002104000078F944A009602003A3484000492
-:2C02640014400003AF820FBC3C029000AF820FBC8E10000832943F008E11000C2694FF00128000733C1300D14901007162
-:2C0290003237000816E0006F001111022C4304001060006C0002B980000417400440003A027798211272002326D60030E0
-:2C02BC00AE56003C8E76003C8E7700348E7500303C03CFB016C0000302D5102B0411009100000000104000602E8210006B
-:2C02E80014400009007018264D01FFFF000000008F824C00AF974C00AC760010AE4200341000FFD0AF80460C00E0F8090D
-:2C03140003E038213C03CFB000701826AE4600344D01FFFF000000008F824C00AF974C00AF820FECAC7600101000FFC382
-:2C034000AF80460C02D5102B104000423C17CFB02E8210001440000602F0B8264D01FFFF00000000AEF600101000FFB8E9
-:2C036C00AF80460C00E0F80903E038214D01FFFF000000008F824C00AF864C00AEF60010AF820FEC1000FFAEAF80460C7F
-:2C0398003084FFFB8E5700383242FFC000021182A7820FB8AF970FB4865D002A865E0008A79D0FBA279D0F1833DE00604B
-:2C03C40003BEE821001EF0C203BEE8218F970C584D01FFFF000000008F834C008FA2001C12E300033C030C403C1EC0008B
-:2C03F000AF9E0FBCAC620FB48FA300182442000C14430002AF80460C8FA20014AE40003CAFA2001C8E76003C8E7700340D
-:2C041C008E7500303C03CFB016C0000302D5102B0411003C00000000007018264D01FFFF00000000ACA500E410400032D6
-:2C044800AF974C001000FF7FAC760010000417400440000726D60030AE56003C00E0F80903E03821AF80460C1000FF393E
-:2C047400AE4600348E5700383242FFC000021182A7820FB8AF970FB48F970C5800E0F80903E0382112E600033C030C4029
-:2C04A0003C02C000AF820FBC865D002A865E0008A79D0FBA279D0F1833DE006003BEE821001EF0C203BEE8218FA2001C23
-:2C04CC004D01FFFF000000008F974C00AC620FB43084FFFB8FA300182442000C14430002AF80460C8FA20014AE40003CC2
-:2C04F800AFA2001C4D01FFFF00000000ACA500E41000FF13AF974C0000E0F80903E038211000FF0F000000001040005B50
-:2C052400867E0008279D0F1833DE006003BEE821001E10C203A2E8218FB700088FA2000C8EF6000412E2002886620008BC
-:2C05500082030010000217400441001924630001106000173C02D1B0005010264D01FFFF000000008F9E4C00AC56001008
-:2C057C0026D6FFFE860200103C03CFB034632000A662002A8EE2000026F70008AE6200388FA20020AFB700082417FFFF46
-:2C05A80002C2A8214D01FFFF00000000AF9E4C0003E00008AE7500308EE2000026F70008AE6200388FA20020AFB70008DB
-:2C05D4002417FFFFA677002A02C2A8213C03CFB003E00008AE750030001E18C2006518218C6300C88FA200100000000064
-:2C0600000062B0231EC000038FA1000412C0001B0022B0232EC30041146000023C1500402416004000161E80000318829E
-:2C062C00007518254D01FFFF000000008F954C00001EB84000771821AC624D00005610211441000227830D008FA200004D
-:2C06580002E3B821AFA2001002D71821AFA3000C4D01FFFF000000008EF600041000FFB5AF954C003C16DEADAE76003C82
-:2C068400AE60003826D5FFFF0000102103E00008AE7500302C430AB2106000052C4324B21000000424020AB210000002AF
-:2C06B000240224B11060FFFD304301FF000318403C1DA0D127BDD6CC007D1821946300000002EA4200031C0027BDFFFBC1
-:2C06DC0003E0000803A3100624030FC0AF83450010000002012060213C0CCFB011E000560189602685FE00000000000089
-:2C07080013C000473C02CFB007C0002D001E1F8004610034001E1FC0046000093C02D3B000E0F80903E038214D01FFFF10
-:2C073400000000008F864C008F990FEC1000000BAF994C0001E2782600E0F80903E038214D01FFFF000000008F864C001B
-:2C076000AF994C00ADEF20103C02D3B001E278268F820FC08F830FC4AF824D008DE20004A5E00000AC6200008C62000094
-:2C078C0024020380AF824D008F824D008F820F1424630004146200022419FFFF8F830F10ACA500E4AF830FC44D01FFFF93
-:2C07B800000000008F824C801000001FADE2003C00E0F80903E038214D01FFFF00000000A5E000008F864C001580002238
-:2C07E400AF8F45401000001701E2782600E0F80903E038214D01FFFF000000008F864C00AF994C00ADEF20103C02CFB097
-:2C08100001E27826A5E000004D01FFFF00000000100000078F994C0000E0F80903E038214D01FFFF000000008F864C0015
-:2C083C008F990FEC1580000AAF8F45000000782110000014AF19001400E0F80903E038214D01FFFF000000001180FFF8C1
-:2C0868008F864C0085220000012078210440000A8D290008130B0004000C1602AF1900148D7900140160C021AF994C0084
-:2C089400AD8E40103042003F01C27021000417800440018B8F824A0030818000304200041440FF8D8D4B00001020000C47
-:2C08C00030847FFF8F820C480120F021244300348C5D000C24420004AFDD000C1462FFFC27DE0004A52100001000FF82E0
-:2C08EC00250800081160005800000000857D00088D63000C9562000A8D41000407A1002600621821A563000A00031C026D
-:2C091800041101A0000318C0001D16C00441001F27A2008000021CC00461000E0040E82127BD0080956200009563000293
-:2C0944003442000CAD22000C24020100A52200109562002CA5230014A5220012A520001634028000A5220000A57D0008D2
-:2C09700007A0000C8F820C4C8F830C502441FFE80023F02B13C000020020102124420400945E00002441FFFE17C0FFF994
-:2C099C00AD620010A44B0000142B001CAD400000AD400004254A00083142007F1440000E00041780044100038F820FE03A
-:2C09C800100000063484000134840002244200083442100038421000AF820FE0354A0100394A010039420080AF820FE4B9
-:2C09F400001D14C00441000333A2EFFF1000FF3CA562000807A0009F33A2FFFE10000021A56200088D620024001D1CC01D
-:2C0A200004610004AD42000033A3EFFF1000FF31A563000807A0000533A3FFFEA56300088D4B00001000FFAA000000001E
-:2C0A4C001000008E25080008254A00083142007F1440000E00041780044100038F820FE010000006348400013484000274
-:2C0A7800244200083442100038421000AF820FE0354A0100394A010039420080AF820FE4110000038D4B00001000FF9303
-:2C0AA4002508FFF88F820FD88F830FDC8F810FD41062001D246200084D01FFFF000000008F8C4C00847F00003C1E00D11C
-:2C0AD00033FD03FF001D5980017E5821857E0008001DE900001E0F0003E1F82507E00003AF820FDC879E0CA0278B0C986E
-:2C0AFC0007C100423C0208403C01F7B08D62002000230826AC2200008C620004946300022442FFF8004310211000004E12
-:2C0B2800AD6200208F820FD087830CA014220007278B0C98410000513C018000ACA100E08CA100C4000000001022004C4E
-:2C0B54000022E8238F9F0F0C07A10002AF810FD403E2E8232FA30041146000023C1E0040241D0040001D1E800003188256
-:2C0B8000007E18254D01FFFF000000008F8C4C00AC624CC0005D1021145F000227830CC08F820F0803A3F021AF820FD059
-:2C0BAC00AF9E0FD84D01FFFF000000001000FFC3246200088D63000C8D7D0010A563000A13A0000200031C02A7A00000F8
-:2C0BD800000318C0041100EF006818214D01FFFF000000008F820C448F830C40AD620010A5630004A563000610000021FC
-:2C0C0400AF8C4C00A57D00008C7D000494630002AC5D4C4027A20008AD62001803A3E82127BDFFF4AD7D001C27BD0004D4
-:2C0C3000AD7D002037C18001001E17C00441FFE0A56100084D01FFFF000000008F820C448F830C40AD620010A563000478
-:2C0C5C00A56300068F820FD88F830FDC4D01FFFF000000001462FF9524620008AF8C4C0087830CA0278B0C980461FE97F8
-:2C0C88000004170004400005956200001178000600000000AF0E0010A70D00043084FFF7956D00048D6E001025ADFFD075
-:2C0CB40005A1FE8FAD22000C3C0CFFB001896026000D182225AD00308D7E00188D61001C4D01FFFF00000000103E0036B9
-:2C0CE0008F9D4C003C010840AC3E4C4027DE000811A00017AD7E0018000DF600019E60254D01FFFF00000000AD8E40105F
-:2C0D0C008F8D0C40957E00068F8E0C4403CDF021A57E0006000CF782000C0E0203C1F021001E0F80000C6200000C6202C2
-:2C0D38000181602533DE003C019E60213401000110000008A5210000957E00064D01FFFF000000008F8D0C408F8E0C44CD
-:2C0D640003CDF021A57E00064D01FFFF0000000001A3F02B17C000080003F60001A36823019E6025018960264D01FFF7CF
-:2C0D9000000000001000FE58AF9D4C008D7E00188D61001C00000000143EFFCE006D18234D01FFFF000000002C61000864
-:2C0DBC001020001795610008000000000001FF8007E0000B34210002006D182100031E000183602501896026240D002CC0
-:2C0DE800A56100084D01FFFF000000001000FE40AF9D4C003C1F0C40AFFE4FA83021FFFDA56100083C0CD3CF358CE0006E
-:2C0E140010000008340300023C1F0C40AFFE4FA811A0FFF9000DF60034030003019E6025018960263484000834420002C4
-:2C0E4000AD22000C95620006A5230000AD2200384D01FFFF00000000857E00088F820FA897830FACAD22000433C17FFFA6
-:2C0E6C00AD600010A56100081060FE20AF9D4C00A57E00080003190030633FF0A56300008F820FB03C030840AC624C4007
-:2C0E980024430008AD63001897830FAE2442FFF400621821AD63001C4D01FFFF000000008F8D0C408F830C44A56D000474
-:2C0EC400A56D0006AD6300101000FE0AAF9D4C008F820FE000040FC08C4300000421001B8F9F0FE48C5D0004AC4000043A
-:2C0EF0001060000EAC400000000000009462002800000000005F10208C4100040000000010200003AC43000410000002B6
-:2C0F1C00AC230024AC43000017A3FFF48C6300248F820FE03BFF0080244200083442100038421000AF820FE0AF9F0FE46E
-:2C0F48001000FE573084FFFE1060001000000000947D00280000000003BFE8208FA10004AFA30004102000038C5E000439
-:2C0F740010000002AC230024AFA300008C61002417C3FE48AC410000AC400004AC4000001000FE443084FFFD2C6201006F
-:2C0FA0001440000E006A10213143007F01431823004318233062007FA562002800621823000319028F820FE02463FFF8BF
-:2C0FCC000062182134631000100000033863100034430100386301008C6200040000000010400003AC6B000403E000089A
-:0C0FF800AC4B002403E00008AC6B0000D0
-:02000004A0D08A
-:2CD5000000000002A0D0E00000000000000010000000000600000008000000000000000800000002A0D0D64800000000F7
-:2CD52C00000008880000000000000000000000000000000024313200243132002431320000000000244D43522420436FB2
-:2CD558007079726967687420286329204D61646765204E6574776F726B73204C746420313939352E20416C6C207269674C
-:2CD584006874732072657365727665642E004D6164676520416D6261737361646F722076312E303100000000000000012C
-:2CD5B00000000001000000000000000000000000000000000000000000000000000000000000000000000000000000004E
-:2CD5DC00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023
-:2CD608000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000F6
-:0CD6340000000000FFF0400000000000BB
-:2CF000000C343E2D000000003C1CA0D1279C56383C1DA0D127BDDFD03C08A0D12508DFD0AF8780080C343C1300000000E4
-:2CF02C00240400030097000D3C08BFC0350802308D08000000000000010000080000000027BDFFD0AFBF001CAFB1001864
-:2CF05800AFB000143C11FFF0000080213C18005637183B7926190200172000020319001A0007000D2401FFFF172100056B
-:2CF08400000000003C01800017010002000000000006000D00001012001018403C05A0D124A5D6CC00A32021A4820000C5
-:2CF0B000261000012A0102001420FFEA000000003C06A0D124C6F9E43C07A0D124E7D648ACE600003C08A0D12508FB14D9
-:2CF0DC00ACE800043C09A0D12529FC94ACE900083C0AA0D1254AFCD4ACEA000C3C0BA0D1256BFBA8ACEB00103C0CA0D15C
-:2CF10800258CFBC4ACEC00143C0DA0D125ADFBE0ACED00183C0EA0D125CEFBFCACEE001C3C0FA0D125EFFC18ACEF0020AD
-:2CF134003C18A0D12718FC34ACF800243C19A0D12739FC50ACF900283C02A0D12442FC60ACE2002C3C03A0D12463FC70A6
-:2CF16000ACE300303C04A0D12484FC80ACE400343C05A0D124A5FCB4ACE500383C06A0D124C6FE08ACE6003C3C08A0D111
-:2CF18C002508FE90ACE800403C09A0D12529FA38ACE900443C0AA0D1254AFA74ACEA0048241000133C0BA0D1256BF9D8E7
-:2CF1B800001060803C0EA0D125CED64801CC6821ADAB0000261000012A0100201420FFF6000000008F988000000000006F
-:2CF1E400AF0001008F828000241903FFA4590202000080218F86800024030FFF0010204024C7038000E42821A4A30000C1
-:2CF21000261000012A0100081420FFF7000000008F89800034089C40AD2803A08F8B80003C0A00FF354AFFFFAD6A03A4FC
-:2CF23C00000080218F8F8000240C0FFF0010684025F80300030D7021A5CC0000261000012A0100081420FFF700000000AB
-:2CF268008F82800034199C40AC5903208F8480003C0300FF3463FFFFAC8303248F868000240502FFA4C502023C08A0C00C
-:2CF29400350801803C09A0D12529D5B8250A00288D0B00008D0C0004AD2B0000AD2C000425080008150AFFFA252900081B
-:2CF2C0004002600000000000AFA20028240300223C04A0E034840014AC8300008FA500280000000034A6100100C01021CB
-:2CF2EC00AFA600283C07FFBF34E7FFFF00C7382400E01021AFA7002840876000000000003C0800023508D8903C09FFFE59
-:2CF3180035290130AD2800008FAA00283C0BF000014B582501601021AFAB002801606021408C6000000000000000802141
-:2CF3440000107080022E7821ADE00000261000012A0104001420FFFA00000000241800013C19A0E8AF380000240200117C
-:2CF370003C03A0F034630017A06200003C04F0EB348400703C05FFF034A54A00ACA400003C06FCEB34C60070ACA6000027
-:2CF39C003C07FFF034E74700ACE00000000080213C08FFF035080FC03C09FFF035294500AD280000261000012A01000433
-:2CF3C8001420FFF800000000000080213C0ADEAD001059803C0100D1002B0821AC2A003C3C0100D1002B0821AC200030C1
-:2CF3F4003C0100D1002B0821AC200038240DFFFF3C0100D1002B0821AC2D0014001071003C0100D1002B0821A42E000054
-:2CF420003C0100D1002B0821A4200004241800203C0100D1002B0821A43800083C0100D1002B0821AC200010261000017F
-:2CF44C002A0104001420FFE00000000000008021001018C03C05A0D124A5E00000A32021AC8000003C07A0D124E7E000BF
-:2CF4780024E8000401033021ACC00000261000012A0100091420FFF300000000240903803C0AFFF0354A4D00AD4900005F
-:2CF4A4003C0CA080358C009CAD8000003C0DA08035AD00A0ADA000003C0E11003C0FA08035EF00A8ADEE000041010003A0
-:2CF4D000000000004100FFFF000000003C18A080371800E08F1900003C01A0D1AC39D6C80C343D43032020218FB00014DE
-:2CF4FC008FBF001C8FB1001803E0000827BD00300080B8213C1CFFF0A3800C84A3800C888F90440000002021AF800CBC7E
-:2CF52800240200A827830F002C5D004017A0000C3C1DFFB003A3E826AFB740000000000000000000000000004D01FFFFF6
-:2CF55400000000002442FFC0246300401000FFF326F700401040000D000000000002EE003C01004003A1E8253C01FFF099
-:2CF5800003A1E82603A3E826AFB740000000000000000000000000004D01FFFF000000003C05A0808F820F08000000007E
-:2CF5AC00AF820FD4AF820FD0ACA200C48F820F100000000000021D82AF830FC000031D80004310233C01A0800041102542
-:2CF5D800AF820FC4AF820F108F820F1400000000004310233C01A08000411025AF820F1424030003279D0F1824BE00C823
-:2CF6040027810D008FA2000000000000AFA20010AFC20000AFA10008AFA1000C8FA2001400000000AFA2001C27BD0024B4
-:2CF6300027DE0004242100401460FFF32463FFFF8F820F0000000000AF820FC8ACA200C0278208002403000FAC4000002C
-:2CF65C00244200041460FFFD2463FFFF8F830FC000000000AF834D008F834D008F830F148F820F102463FFFCAC40000091
-:2CF688001443FFFE2442000424020380AF824D00279D0F1827A100908FA200148FA3001800000000006218232C7F004017
-:2CF6B40017E000093C1F004037FF080003A0F0214D01FFFF00000000AFE20000244200401000FFF62463FFC01060000659
-:2CF6E00037FF080000031E0003E3F8254D01FFFF00000000AFE2000027BD002417A1FFE800000000000038218FC200145A
-:2CF70C008FC3001800000000006218232C7F004013E000043C1F004000030E001000000203E1F8252403004037FF080084
-:2CF73800241E03E7000008214D01FFFF00000000AFE20000002308214900FFFB000000008780400217C0FFF827DEFFFFCA
-:2CF7640014E0000434E7400003E7F8251000FFF0AF810C60AF810C5C3C01A0D18C22D6C8000000003C01A080AC2200E0E7
-:2CF790003C01A0808C2000E0AF800FB4A7800FB8A7800FBAA7800FBCA7800FBE27820CC0AF820FDCAF820FD83C02A0D156
-:2CF7BC002442DACCAF820C4CAF820C5024420400AF820C542402001E3C03FFF0247D0040AC7D000803A018211440FFFC55
-:2CF7E8002442FFFF3C1DFFF0AC7D00083C02C7043442DD7BAF820C583C07000024E7015808343FA9000000008E620038B9
-:2CF8140000000000144000058F830C9412A000222463000110000020AF830C94AF820FB43262FFC0000211828663002A70
-:2CF84000A7820FB83C02A000AF820FBCA7830FBA867E0008279D0F1833DE006003BEE821001EF0C203BEE8218FA2001CC6
-:2CF86C003C030C404D01FFFF000000008F974C00AC620FB48FA300182442000C14430003000000008FA2001400000000FB
-:2CF89800AFA2001C4D01FFFF00000000ACA500E4AF974C0003E00008AE60003C3C0DA0D125ADD50011A00021000000005C
-:2CF8C4008DA90000000000001120001D000000008DAA00048DAB00088DAC000C0009474005010004000000003C08A0D185
-:2CF8F0002508D638014850210009478005010007000000001180000D00000000AD400000254A00041000FFFB258CFFFC66
-:2CF91C0011800007000000008D6E0000256B0004AD4E0000254A00041000FFF9258CFFFC1000FFE125AD001003E00008B9
-:2CF94800000000003C021040AC574FF0000000000000000000000000000000004D01FFFF000000008F820FFC000000005B
-:2CF974003042001F000210803C17A0D102E2B82126F7D6488EF700000000000002E00008000000002402FFFFAF820FFCB9
-:2CF9A0008F970FC83C021040AC570FF08F820F0426F7001016E20004AF970FC88F970F0000000000AF970FC84D01FFFFA6
-:2CF9CC000000000003E00008000000003C1FA0D127FFF02C1000FFED8F970FF03C0200D132F703FF0017B98002E2B825AA
-:2CF9F800AEE0003C2402FFFFAEE20030AEE2001497830FF497820FF83C1D000027BD0698A6E30008A6E20002AF9F0FE819
-:2CFA240003A0F809A6E2002C8F9F0FE81000FFD9AEE2000C8F970FF03C0200D132F703FF0017B98002E2B82597820FF429
-:2CFA50003C03000024630698A6E20002AF9F0FE80060F809A6E2002C8F9F0FE81000FFCAAEE2000C8F970FF03C0200D174
-:2CFA7C0032F703FF0017B98002E2B82597820FF40000000096E30008A6E2000800431026304200601040FFBD8EE2003CF2
-:2CFAA800AEE0003C1040FFBA3C028800AF820FBC8EE20038AEE0003830630060279D0F1803A3E821000318C203A3E82116
-:2CFAD4008FA3001C1040FFAFAF820FB43C020C40AC430FB48FA200182463000C14430003000000008FA30014000000000E
-:2CFB0000AFA3001C4D01FFFF000000001000FFA2000000008F970FF03C0200D1A7970FB80017B98032F7FFC002E2B82140
-:2CFB2C00AEE000303C02DEAD8EE3003CAEE2003C8EE200381060FF95AEE000383C038800AF830FBC86E3000827970F1821
-:2CFB58003063006002E3B821000318C202E3B8218EE3001C1040FF8AAF820FB43C020C40AC430FB48EE200182463000C84
-:2CFB840014430003000000008EE3001400000000AEE3001C4D01FFFF000000001000FF7D000000008F820FF08F970FF4B8
-:2CFBB0009041000000000000003708251000FF76A04100008F820FF08F970FF49441000000000000003708251000FF6F9E
-:2CFBDC00A44100008F820FF08F970FF48C41000000000000003708251000FF68AC4100008F820FF08F970FF49041000040
-:2CFC080002E0B827003708241000FF61A04100008F820FF08F970FF49441000002E0B827003708241000FF5AA4410000DB
-:2CFC34008F820FF08F970FF48C41000002E0B827003708241000FF53AC4100008F820FF08F970FF41000FF4FA05700009D
-:2CFC60008F820FF08F970FF41000FF4BA45700008F820FF08F970FF41000FF47AC5700008F820FF0000000008C4200007A
-:2CFC8C001000FF42AF820FF43C01A0C28C22C00000000000AF820FF03C01A0C28C22C0041000FF3AAF820FF43C01A0D14E
-:2CFCB8008C22D5AC00000000AF820FF03C01A0D18C22D5B01000FF32AF820FF43C02A0F0AC400000905701530000000076
-:2CFCE400A3970C809057015700000000A3970C819057015B00000000A3970C879057015F00000000A3970C8690570163BA
-:2CFD10000000000032F70007A3970C859057019300000000A3970C8B9057019700000000A3970C8A9057019B00000000AE
-:2CFD3C0032F70007A3970C899057000B0000000032F700E000170942905700470000000032F700780037082590570067BE
-:2CFD68000000000032F7000F0017B9C000370825905700C70000000032F7002F0017BAC000370825905701470000000019
-:2CFD940032F7001E0017BC0000370825905701830000000032F700600017BC0000370825AF810C8C3C0218408F970FC83F
-:2CFDC000000000008F970FF000000000AC570C800000000000000000000000000000000000000000000000004D01FFFF17
-:2CFDEC00000000003C02A0D12442F998AF800C90AF800C94004000080000000087970FF03C1300D1A67700083C030000C2
-:2CFE180024630520AF9F0FE80060F809240200018F9F0FE81040FEDA97970FF027830F18007718210017B8C202E3B821FB
-:2CFE44003C028800AF820FBC8E620038A7800FB8AF820FB48EE3001C3C020C40AC430FB48EE200182463000C1443000487
-:2CFE7000AEE3001C8EE3001400000000AEE3001C4D01FFFF000000001000FFDF000000008F820C5C8F830C60AF820FF026
-:2CFE9C001000FEBEAF830FF423890800012018212402000F206C0040AC6C0008018018211440FFFC2042FFFFAC69000884
-:2CFEC800278B0C98A56000002403FFFFAD6300143402000134420020A5620008278A0E000140102100001821AC40000038
-:2CFEF400246300042C6C01001580FFFC244200043C02A0D12442E000AF820FE03C1800D1012060210000682100007821C6
-:28FF20000000582100004021400260000000000034424001408260003C020000244206F800400008000000007A
-:00000001FF
-/*
- Madge Ambassador ATM Adapter microcode.
- Copyright (C) 1995-1999 Madge Networks Ltd.
-
- This microcode data is placed under the terms of the GNU General
- Public License. The GPL is contained in /usr/doc/copyright/GPL on a
- Debian system and in the file COPYING in the Linux kernel source.
-
- We would prefer you not to distribute modified versions without
- consultation and not to ask for assembly/other microcode source.
-*/
-
-First record is start address in a __be32.
diff --git a/firmware/av7110/Boot.S b/firmware/av7110/Boot.S
deleted file mode 100644
index d562fdc2908f..000000000000
--- a/firmware/av7110/Boot.S
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- Boot.S: boot loader for Siemens DVB-S card
-
- Copyright (C) 2001 Convergence integrated media GmbH
- Written by Ralph Metzler
- <rjkm@convergence.de>
- Copyright (C) 2006 Matthieu CASTET <castet.mattheiu@free.fr>
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
-
-*/
-
-/*
- check AV711x_3_1.pdf for some hardware infos
- build it with :
- $ cc -mbig-endian -c Boot.S
- $ ld -Ttext 0x2c000000 -EB -o Boot Boot.o
- $ objcopy -Obinary Boot
-*/
-
- .text
- .align
- .globl _start
-_start:
- b reset // reset vector
- movs pc, r14 // undefined
- subs pc, r14, #4 // SWI
- subs pc, r14, #4 // prefetch abort
- subs pc, r14, #8 // data abort
- subs pc, r14, #4 // reserved
- subs pc, r14, #4 // IRQ
- subs pc, r14, #4 // FIQ
-
- .word tbl // table needed by firmware ROM
-tbl: .word (endtbl - tbl)
- .word 0
- .word conf
-endtbl: .word 0
-conf: .word 0xa5a55a5a
- .word 0x001f1555
- .word 0x00000009
-
-reset: ldr r13, buffer
- ldr r4, flag
- mov r0, #0
- str r0, [r4]
- str r0, [r4, #4]
-
- ldr r1, wait_address
- ldr r2, flag_address
- ldr r3, sram
-
-copycode: // copy the code HW Sram
- ldmia r1!, {r5-r12}
- stmia r3!, {r5-r12}
- cmp r1, r2
- ble copycode
- ldr pc, sram // jump to the copied code
-
-wait: ldrh r1, [r4] // wait for flag!=0
- cmp r1, #0
- beq wait
-
- mov r1, r13 // buffer address
- ldr r3, [r4,#4] // destaddr
-
- ldrh r2, [r4,#2] // get segment length
- add r2, r2, #63 // round length to next 64 bytes
- movs r2, r2, lsr #6 // and divide by 64
- moveq r0, #2 // if 0, set flag to 2, else signal
- strh r0, [r4] // that buffer is accepted by setting to 0
- beq wait
-
-copyloop:
- ldmia r1!, {r5-r12}
- stmia r3!, {r5-r12}
- ldmia r1!, {r5-r12}
- stmia r3!, {r5-r12}
- subs r2, r2, #1
- bne copyloop
-
- eor r13, r13, #0x1400 // switch to other buffer
- b wait
-
-// flag is stored at 0x2c0003f8, length at 0x2c0003fa,
-// destaddr at 0x2c0003fc
-
-flag: .word 0x2c0003f8
-
-
-// buffer 1 is at 0x2c000400, buffer 2 at 0x2c001000
-
-buffer: .word 0x2c000400
-
-sram: .word 0x9e000800
-wait_address: .word wait
-flag_address: .word flag
diff --git a/firmware/av7110/bootcode.bin.ihex b/firmware/av7110/bootcode.bin.ihex
deleted file mode 100644
index 26a2993e0723..000000000000
--- a/firmware/av7110/bootcode.bin.ihex
+++ /dev/null
@@ -1,15 +0,0 @@
-:10000000EA00000EE1B0F00EE25EF004E25EF00401
-:10001000E25EF008E25EF004E25EF004E25EF0040C
-:100020002C0000240000000C000000002C00003414
-:1000300000000000A5A55A5A001F15550000000930
-:10004000E59FD07CE59F4074E3A00000E5840000BC
-:10005000E5840004E59F1070E59F2070E59F306403
-:10006000E8B11FE0E8A31FE0E1510002DAFFFFFB67
-:10007000E59FF050E1D410B0E35100000AFFFFFC0F
-:10008000E1A0100DE5943004E1D420B2E282203FDB
-:10009000E1B0232203A00002E1C400B00AFFFFF494
-:1000A000E8B11FE0E8A31FE0E8B11FE0E8A31FE00C
-:1000B000E25220011AFFFFF9E22DDB05EAFFFFEC17
-:1000C0002C0003F82C0004009E0008002C00007493
-:0400D0002C0000C040
-:00000001FF
diff --git a/firmware/bnx2/bnx2-mips-06-6.2.1.fw.ihex b/firmware/bnx2/bnx2-mips-06-6.2.1.fw.ihex
deleted file mode 100644
index 4c43b26af0a6..000000000000
--- a/firmware/bnx2/bnx2-mips-06-6.2.1.fw.ihex
+++ /dev/null
@@ -1,5818 +0,0 @@
-:10000000080001180800000000004A68000000C84D
-:1000100000000000000000000000000008004A6826
-:100020000000001400004B30080000A00800000091
-:100030000000569400004B44080058200000008443
-:100040000000A1D808005694000001580000A25CEE
-:100050000800321008000000000072D00000A3B4B5
-:10006000000000000000000000000000080072D046
-:100070000000002400011684080004900800040019
-:10008000000017D4000116A80000000000000000C6
-:100090000000000000000000000000000000000060
-:1000A000080000A80800000000003BFC00012E7CB6
-:1000B0000000000000000000000000000000000040
-:0800C000000000000000000038
-:0800C8000A00004600000000E0
-:1000D000000000000000000D636F6D362E322E31DF
-:1000E0000000000006020102000000000000000302
-:1000F000000000C800000032000000030000000003
-:1001000000000000000000000000000000000000EF
-:1001100000000010000001360000EA600000000549
-:1001200000000000000000000000000000000008C7
-:1001300000000000000000000000000000000000BF
-:1001400000000000000000000000000000000000AF
-:10015000000000000000000000000000000000009F
-:10016000000000020000000000000000000000008D
-:10017000000000000000000000000000000000007F
-:10018000000000000000000000000010000000005F
-:10019000000000000000000000000000000000005F
-:1001A000000000000000000000000000000000004F
-:1001B000000000000000000000000000000000003F
-:1001C000000000000000000000000000000000002F
-:1001D000000000000000000000000000000000001F
-:1001E0000000000010000003000000000000000DEF
-:1001F0000000000D3C02080024424AA03C03080015
-:1002000024634B9CAC4000000043202B1480FFFD76
-:10021000244200043C1D080037BD7FFC03A0F021F0
-:100220003C100800261001183C1C0800279C4AA01E
-:100230000E000168000000000000000D27470100CB
-:1002400090E3000B2402001A94E5000814620028D1
-:10025000000020218CE200003C0308008C63004475
-:1002600094E60014000211C20002104030A4000203
-:10027000005A10212463000130A50004A446008028
-:100280003C010800AC23004410A000190004202BFE
-:100290008F4202B804410008240400013C02080017
-:1002A0008C420060244200013C010800AC22006046
-:1002B00003E00008008010218CE2002094E3001687
-:1002C00000002021AF4202808CE20004A743028498
-:1002D000AF4202883C021000AF4202B83C02080064
-:1002E0008C42005C244200013C010800AC22005C0E
-:1002F00003E00008008010212747010090E3000B75
-:100300002402000394E50008146200280000202164
-:100310008CE200003C0308008C63004494E6001467
-:10032000000211C20002104030A40002005A102145
-:100330002463000130A50004A44600803C010800AD
-:10034000AC23004410A000190004202B8F4202B8F7
-:1003500004410008240400013C0208008C420060B3
-:10036000244200013C010800AC22006003E00008C8
-:10037000008010218CE2002094E300160000202170
-:10038000AF4202808CE20004A7430284AF4202889D
-:100390003C021000AF4202B83C0208008C42005CF4
-:1003A000244200013C010800AC22005C03E000088C
-:1003B000008010218F4301002402010050620003DD
-:1003C000000311C20000000D000311C20002104022
-:1003D000005A1021A440008003E000080000102112
-:1003E0009362000003E00008AF80000003E0000813
-:1003F0000000102103E00008000010212402010089
-:1004000014820008000000003C0208008C4200FC3E
-:10041000244200013C010800AC2200FC0A0000DD7F
-:1004200030A200203C0208008C42008424420001DB
-:100430003C010800AC22008430A2002010400008DB
-:1004400030A300103C0208008C4201082442000145
-:100450003C010800AC22010803E000080000000095
-:1004600010600008000000003C0208008C420104FB
-:10047000244200013C010800AC22010403E0000812
-:10048000000000003C0208008C42010024420001F0
-:100490003C010800AC22010003E00008000000005D
-:1004A00027BDFFE8AFBF0010274401009483000878
-:1004B000306200041040001B306600028F4202B818
-:1004C00004410008240500013C0208008C42006041
-:1004D000244200013C010800AC2200600A0001290E
-:1004E0008FBF00108C82002094830016000028210A
-:1004F000AF4202808C820004A7430284AF4202888C
-:100500003C021000AF4202B83C0208008C42005C82
-:10051000244200013C010800AC22005C0A000129D1
-:100520008FBF001010C00006006028218F4401001A
-:100530000E0000CD000000000A0001282405000183
-:100540008F8200088F4301045043000700002821D8
-:100550008F4401000E0000CD000000008F42010416
-:10056000AF820008000028218FBF001000A01021DA
-:1005700003E0000827BD001827BDFFE8AFBF001447
-:10058000AFB00010974201083043700024022000F1
-:100590001062000B286220011440002F000010217F
-:1005A00024024000106200250000000024026000C8
-:1005B00010620026000010210A0001658FBF0014A0
-:1005C00027500100920200091040001A2403000184
-:1005D0003C0208008C420020104000160000182148
-:1005E0000E00049300000000960300083C0608007B
-:1005F00094C64B5E8E0400188F8200209605000C76
-:1006000000031C0000661825AC440000AC45000443
-:1006100024040001AC400008AC40000CAC400010C9
-:10062000AC400014AC4000180E0004B8AC43001CF1
-:10063000000018210A000164006010210E0003254B
-:10064000000000000A000164000010210E000EE905
-:1006500000000000000010218FBF00148FB00010B8
-:1006600003E0000827BD001827BDFFE0AFB2001867
-:100670003C036010AFBF001CAFB10014AFB000105E
-:100680008C6450002402FF7F3C1A800000822024EA
-:100690003484380C24020037AC6450003C1208004B
-:1006A00026524AD8AF42000824020C80AF420024F0
-:1006B0003C1B80083C06080024C60324024010218D
-:1006C0002404001D2484FFFFAC4600000481FFFDCC
-:1006D000244200043C020800244204B03C0108000B
-:1006E000AC224AE03C020800244202303C010800EF
-:1006F000AC224AE43C020800244201743C03080096
-:100700002463032C3C040800248403D83C0508001F
-:1007100024A538F03C010800AC224B403C02080004
-:10072000244202EC3C010800AC264B243C010800AA
-:10073000AC254B343C010800AC234B3C3C01080089
-:10074000AC244B443C010800AC224B483C0108005F
-:10075000AC234ADC3C010800AC204AE83C0108001C
-:10076000AC204AEC3C010800AC204AF03C010800F7
-:10077000AC204AF43C010800AC204AF83C010800D7
-:10078000AC204AFC3C010800AC204B003C010800B6
-:10079000AC244B043C010800AC204B083C01080091
-:1007A000AC204B0C3C010800AC204B103C01080075
-:1007B000AC204B143C010800AC204B183C01080055
-:1007C000AC264B1C3C010800AC264B203C01080029
-:1007D000AC254B303C010800AC234B380E000623FF
-:1007E000000000003C028000344200708C42000097
-:1007F000AF8200143C0308008C6300208F82000449
-:10080000104300043C0280000E00045BAF83000430
-:100810003C028000344600703C0308008C6300A05A
-:100820003C0208008C4200A4104300048F84001492
-:100830003C010800AC2300A4A743009E8CCA000022
-:100840003C0308008C6300BC3C0208008C4200B8EA
-:100850000144202300641821000040210064202B63
-:1008600000481021004410213C010800AC2300BCCA
-:100870003C010800AC2200B88F5100003222000772
-:100880001040FFDCAF8A00148CC600003C05080055
-:100890008CA500BC3C0408008C8400B800CA30233E
-:1008A00000A628210000102100A6302B0082202164
-:1008B00000862021322700013C010800AC2500BC45
-:1008C0003C010800AC2400B810E0001F32220002F6
-:1008D0008F420100AF4200208F420104AF4200A8C6
-:1008E0009342010B0E0000C6305000FF2E02001E86
-:1008F00054400004001010800E0000C90A000213CA
-:1009000000000000005210218C4200000040F80955
-:1009100000000000104000053C0240008F4301042D
-:100920003C026020AC4300143C024000AF4201385E
-:100930003C0208008C420034244200013C010800C3
-:10094000AC220034322200021040000E3222000499
-:100950008F4201400E0000C6AF4200200E000295FB
-:10096000000000003C024000AF4201783C02080059
-:100970008C420038244200013C010800AC220038BF
-:10098000322200041040FF983C0280008F42018018
-:100990000E0000C6AF4200208F43018024020F00EA
-:1009A00014620005000000008F420188A742009CED
-:1009B0000A0002483C0240009362000024030050F9
-:1009C000304200FF144300083C0240000E00027B4E
-:1009D00000000000544000043C0240000E000D7571
-:1009E000000000003C024000AF4201B83C02080099
-:1009F0008C42003C244200013C010800AC22003C37
-:100A00000A0001C83C0280003C0290003442000110
-:100A100000822025AF4400208F4200200440FFFECA
-:100A20000000000003E00008000000003C0280001D
-:100A3000344200010082202503E00008AF4400207A
-:100A400027BDFFE0AFB10014AFB0001000808821D7
-:100A5000AFBF00180E00025030B000FF9362007D5F
-:100A60000220202102028025A370007D8F70007477
-:100A70003C0280000E000259020280241600000988
-:100A80008FBF00188F4201F80440FFFE24020002CD
-:100A9000AF5101C0A34201C43C021000AF4201F8B3
-:100AA0008FBF00188FB100148FB0001003E0000852
-:100AB00027BD002027BDFFE8AFBF0010974201848B
-:100AC0008F440188304202001040000500002821B8
-:100AD0000E000FAA000000000A00028D240500018C
-:100AE0003C02FF0004800005008218243C02040040
-:100AF000506200019362003E240500018FBF001088
-:100B000000A0102103E0000827BD0018A360002208
-:100B10008F4401400A00025E2405000127BDFFE862
-:100B2000AFBF0014AFB0001093620000304400FF6C
-:100B300038830020388200300003182B0002102B6D
-:100B40000062182410600003240200501482008008
-:100B50008FBF001493620005304200011040007CFA
-:100B60008FBF0014934201482443FFFF2C6200050D
-:100B7000104000788FB00010000310803C03080084
-:100B800024634A68004310218C42000000400008A2
-:100B9000000000000E0002508F4401408F70000CD6
-:100BA0008F4201441602000224020001AF62000CD1
-:100BB0000E0002598F4401408F420144145000043A
-:100BC0008FBF00148FB000100A000F2027BD00183F
-:100BD0008F62000C0A0003040000000097620010FE
-:100BE0008F4301443042FFFF1462001A00000000EE
-:100BF00024020001A76200108F4202380443001053
-:100C00008F4201403C02003F3446F0003C0560004A
-:100C10003C04FFC08CA22BBC0044182400461024C6
-:100C20000002130200031D82106200390000000060
-:100C30008F4202380440FFF7000000008F4201405D
-:100C4000AF4202003C021000AF4202380A00032209
-:100C50008FBF0014976200100A0003040000000018
-:100C60000E0002508F440140976200128F430144EE
-:100C70003050FFFF1603000224020001A762001299
-:100C80000E0002598F4401408F42014416020004B5
-:100C90008FBF00148FB000100A00029127BD00180A
-:100CA000976200120A00030400000000976200141B
-:100CB0008F4301443042FFFF14620006240200010A
-:100CC0008FBF00148FB00010A76200140A00124AF0
-:100CD00027BD0018976200141440001D8FBF001438
-:100CE0000A00031C00000000976200168F430144B5
-:100CF0003042FFFF1462000B240200018FBF00147A
-:100D00008FB00010A76200160A000B1227BD001852
-:100D10009742007824420004A76200100A000322D0
-:100D20008FBF001497620016240300013042FFFFBA
-:100D3000144300078FBF00143C0208008C4200706F
-:100D4000244200013C010800AC2200708FBF001457
-:100D50008FB0001003E0000827BD001827BDFFE892
-:100D6000AFBF0014AFB000108F50010093620000BD
-:100D700093430109304400FF2402001F106200A5C4
-:100D80002862002010400018240200382862000A5F
-:100D90001040000C2402000B286200081040002CB8
-:100DA00000000000046000E52862000214400028F2
-:100DB00024020006106200268FBF00140A00041FE0
-:100DC0008FB000101062005E2862000B144000DC3F
-:100DD0008FBF00142402000E106200738FB0001049
-:100DE0000A00041F00000000106200C028620039E1
-:100DF0001040000A2402008024020036106200CA5B
-:100E000028620037104000B424020035106200C18F
-:100E10008FBF00140A00041F8FB000101062002B57
-:100E20002862008110400006240200C82402003914
-:100E3000106200B48FBF00140A00041F8FB00010AE
-:100E4000106200998FBF00140A00041F8FB00010B9
-:100E50003C0208008C420020104000B98FBF0014F3
-:100E60000E000493000000008F4201008F830020D9
-:100E70009745010C97460108AC6200008F420104BF
-:100E80003C04080094844B5E00052C00AC62000416
-:100E90008F4201180006340000C43025AC620008FF
-:100EA0008F42011C24040001AC62000C9342010A31
-:100EB00000A22825AC650010AC600014AC600018DE
-:100EC000AC66001C0A0003F58FBF00143C0208004A
-:100ED0008C4200201040009A8FBF00140E00049333
-:100EE00000000000974401083C03080094634B5E37
-:100EF0009745010C000422029746010E8F820020C4
-:100F0000000426000083202500052C003C030080FF
-:100F100000A6282500832025AC400000AC4000043A
-:100F2000AC400008AC40000CAC450010AC400014D4
-:100F3000AC400018AC44001C0A0003F42404000177
-:100F40009742010C14400015000000009362000558
-:100F50003042001014400011000000000E0002504A
-:100F6000020020219362000502002021344200107B
-:100F70000E000259A36200059362000024030020C2
-:100F8000304200FF1043006D020020218FBF00148B
-:100F90008FB000100A000FC027BD00180000000D20
-:100FA0000A00041E8FBF00143C0208008C4200207F
-:100FB000104000638FBF00140E0004930000000077
-:100FC0008F4201048F8300209744010C3C050800E8
-:100FD00094A54B5EAC6200009762002C00042400D4
-:100FE0003042FFFF008220253C02400E00A228254F
-:100FF000AC640004AC600008AC60000CAC60001095
-:10100000AC600014AC600018AC65001C0A0003F46E
-:10101000240400010E00025002002021A7600008F5
-:101020000E00025902002021020020210E00025E63
-:10103000240500013C0208008C42002010400040C2
-:101040008FBF00140E000493000000009742010CB3
-:101050008F8300203C05080094A54B5E000214001D
-:10106000AC700000AC620004AC6000088F64004CFF
-:101070003C02401F00A22825AC64000C8F62005087
-:1010800024040001AC6200108F620054AC620014B2
-:10109000AC600018AC65001C8FBF00148FB000104E
-:1010A0000A0004B827BD0018240200205082002541
-:1010B0008FB000100E000F0A020020211040002007
-:1010C0008FBF0014020020218FB0001000002821E3
-:1010D0000A00025E27BD0018020020218FBF001405
-:1010E0008FB000100A00058027BD00189745010C3D
-:1010F000020020218FBF00148FB000100A0005A04D
-:1011000027BD0018020020218FB000100A0005C57D
-:1011100027BD00189345010D020020218FB000105B
-:101120000A00060F27BD0018020020218FBF0014FF
-:101130008FB000100A0005EB27BD00188FBF001408
-:101140008FB0001003E0000827BD00188F4202781E
-:101150000440FFFE2402000234840080AF440240B9
-:10116000A34202443C02100003E00008AF420278B0
-:101170003C04080094844B6A3C0208008C424B7487
-:101180003083FFFF000318C000431021AF42003C32
-:101190003C0208008C424B70AF4200383C020050C9
-:1011A00034420008AF4200300000000000000000A0
-:1011B000000000008F420000304200201040FFFD80
-:1011C000000000008F4204003C010800AC224B608C
-:1011D0008F4204043C010800AC224B643C02002016
-:1011E000AF420030000000003C02080094424B680F
-:1011F0003C03080094634B6C3C05080094A54B6EBF
-:1012000024840001004310213083FFFF3C010800CB
-:10121000A4224B683C010800A4244B6A1465000317
-:10122000000000003C010800A4204B6A03E0000815
-:10123000000000003C05000A27BDFFE80345282107
-:101240003C04080024844B50AFBF00100E00051D65
-:101250002406000A3C02080094424B523C0308005A
-:1012600094634B6E3042000F244200030043180485
-:1012700024027FFF0043102B10400002AF83001CAC
-:101280000000000D0E00042A000000003C020800CF
-:1012900094424B5A8FBF001027BD001803E000088E
-:1012A000A74200A23C02000A034210219443000618
-:1012B0003C02080094424B5A3C010800A4234B56C0
-:1012C000004310238F83001C00021400000214034B
-:1012D0000043102B03E000083842000127BDFFE85F
-:1012E000AFBF00103C02000A0342102194420006E6
-:1012F0003C010800A4224B560E00047700000000B9
-:101300005440FFF93C02000A8FBF001003E00008C0
-:1013100027BD001827BDFFE8AFBF00100E000477FF
-:101320000000000010400003000000000E000485D3
-:10133000000000003C0208008C424B608FBF001090
-:1013400027430400AF4200383C0208008C424B6443
-:1013500027BD0018AF830020AF42003C3C020005CF
-:10136000AF42003003E00008AF8000188F82001801
-:101370003C0300060002114000431025AF4200303C
-:101380000000000000000000000000008F4200008C
-:10139000304200101040FFFD27420400AF820020C1
-:1013A00003E00008AF8000183C0608008CC64B64C0
-:1013B0008F8500188F8300203C02080094424B5A0E
-:1013C00027BDFFE024A50001246300202442000182
-:1013D00024C70020AFB10014AFB00010AFBF001899
-:1013E000AF850018AF8300203C010800A4224B5AAF
-:1013F000309000FF3C010800AC274B6404C100089A
-:101400000000882104E00006000000003C02080003
-:101410008C424B60244200013C010800AC224B602E
-:101420003C02080094424B5A3C03080094634B680A
-:101430000010202B004310262C42000100441025F0
-:10144000144000048F830018240200101462000F5F
-:10145000000000000E0004A9241100013C03080054
-:1014600094634B5A3C02080094424B681462000398
-:10147000000000000E00042A000000001600000317
-:10148000000000000E000493000000003C03080070
-:1014900094634B5E3C02080094424B5C2463000161
-:1014A0003064FFFF3C010800A4234B5E148200035C
-:1014B000000000003C010800A4204B5E1200000662
-:1014C000000000003C02080094424B5AA74200A2D0
-:1014D0000A00050B022010210E0004770000000016
-:1014E00010400004022010210E00048500000000BE
-:1014F000022010218FBF00188FB100148FB0001090
-:1015000003E0000827BD00203084FFFF30A5FFFF67
-:101510000000182110800007000000003082000148
-:101520001040000200042042006518210A00051343
-:101530000005284003E000080060102110C00006EC
-:1015400024C6FFFF8CA2000024A50004AC8200008A
-:101550000A00051D2484000403E0000800000000C8
-:1015600010A0000824A3FFFFAC86000000000000CC
-:10157000000000002402FFFF2463FFFF1462FFFA53
-:101580002484000403E0000800000000240200019D
-:10159000AF62000CA7620010A7620012A7620014DD
-:1015A00003E00008A76200163082007F034210218A
-:1015B0003C08000E004818213C0208008C42002024
-:1015C00027BDFFD82407FF80AFB3001CAFB20018BF
-:1015D000AFB10014AFB00010AFBF00200080802179
-:1015E00030B100FF0087202430D200FF1040002FD0
-:1015F00000009821AF44002C9062000024030050AA
-:10160000304200FF1443000E000000003C020800BE
-:101610008C4200E00202102100471024AF42002C4F
-:101620003C0208008C4200E0020210213042007FA0
-:101630000342102100481021944200D43053FFFF90
-:101640000E000493000000003C02080094424B5E30
-:101650008F8300200011340000C2302500122C00BE
-:101660003C02400000C2302534A50001AC700000EF
-:101670008FBF0020AC6000048FB20018AC7300086C
-:101680008FB10014AC60000C8FB3001CAC6500106F
-:101690008FB00010AC60001424040001AC6000188E
-:1016A00027BD00280A0004B8AC66001C8FBF0020CC
-:1016B0008FB3001C8FB200188FB100148FB00010D0
-:1016C00003E0000827BD00289343010F2402001007
-:1016D0001062000E2865001110A0000724020012FD
-:1016E000240200082405003A1062000600003021A0
-:1016F00003E0000800000000240500351462FFFC30
-:10170000000030210A000538000000008F420074FC
-:1017100024420FA003E00008AF62000C27BDFFE8E1
-:10172000AFBF00100E00025E240500018FBF001045
-:1017300024020001A762001227BD00182402000144
-:1017400003E00008A360002227BDFFE0AFB1001452
-:10175000AFB00010AFBF001830B1FFFF0E00025055
-:10176000008080219362003F24030004304200FF88
-:101770001443000C02002021122000082402000A59
-:101780000E00053100000000936200052403FFFEF7
-:1017900000431024A362000524020012A362003F4C
-:1017A000020020210E000259A360008116200003D0
-:1017B000020020210E0005950000000002002021FB
-:1017C000322600FF8FBF00188FB100148FB00010B9
-:1017D000240500380A00053827BD002027BDFFE09A
-:1017E000AFBF001CAFB20018AFB10014AFB0001013
-:1017F0000E000250008080210E0005310000000024
-:101800009362003F24120018305100FF123200038F
-:101810000200202124020012A362003F936200050F
-:101820002403FFFE004310240E000259A3620005AA
-:10183000020020212405002016320007000030217C
-:101840008FBF001C8FB200188FB100148FB0001032
-:101850000A00025E27BD00208FBF001C8FB2001857
-:101860008FB100148FB00010240500390A0005382C
-:1018700027BD002027BDFFE8AFB00010AFBF0014A8
-:101880009742010C2405003600808021144000108E
-:10189000304600FF0E00025000000000240200123B
-:1018A000A362003F93620005344200100E00053130
-:1018B000A36200050E00025902002021020020212F
-:1018C0000E00025E240500200A000604000000004D
-:1018D0000E000538000000000E000250020020211A
-:1018E000936200232403FF9F020020210043102461
-:1018F0008FBF00148FB00010A36200230A000259AA
-:1019000027BD001827BDFFE0AFBF0018AFB100141E
-:10191000AFB0001030B100FF0E00025000808021F7
-:10192000240200120E000531A362003F0E0002598E
-:101930000200202102002021022030218FBF001848
-:101940008FB100148FB00010240500350A0005384F
-:1019500027BD0020A380002C03E00008A380002DF9
-:101960008F4202780440FFFE8F820034AF42024073
-:1019700024020002A34202443C02100003E00008DB
-:10198000AF4202783C0360008C6254003042000891
-:101990001440FFFD000000008C625408AF82000C70
-:1019A00024020052AC605408AC645430AC6254342D
-:1019B0002402000803E00008AC6254003C0260000E
-:1019C0008C42540030420008104000053C03600087
-:1019D0008C625400304200081440FFFD00000000FB
-:1019E0008F83000C3C02600003E00008AC43540805
-:1019F00090A3000024020005008040213063003FD6
-:101A000000004821146200050000502190A2001C33
-:101A100094A3001E304900FF306AFFFFAD00000CA8
-:101A2000AD000010AD000024950200148D05001CCF
-:101A30008D0400183042FFFF0049102300021100FE
-:101A4000000237C3004038210086202300A2102B5B
-:101A50000082202300A72823AD05001CAD04001838
-:101A6000A5090014A5090020A50A001603E0000836
-:101A7000A50A00228F4201F80440FFFE2402000262
-:101A8000AF4401C0A34201C43C02100003E00008BF
-:101A9000AF4201F83C0208008C4200B427BDFFE8C9
-:101AA000AFBF001424420001AFB000103C01080099
-:101AB000AC2200B48F4300243C02001F30AA00FF78
-:101AC0003442FF8030D800FF006280240080F8217B
-:101AD00030EF00FF1158003B01405821240CFF80DB
-:101AE0003C19000A3163007F000310C00003194055
-:101AF000006218213C0208008C4200DC25680001CD
-:101B0000310D007F03E21021004310213043007F9C
-:101B100003431821004C102400794821AF420024CF
-:101B20008D220024016C1824006C7026AD22000C5C
-:101B30008D220024310800FFAD22001095220014F0
-:101B4000952300208D27001C3042FFFF3063FFFFEC
-:101B50008D2600180043102300021100000227C345
-:101B60000040282100C4302300E2102B00C23023A3
-:101B700000E53823AD27001CAD2600189522002073
-:101B8000A522001495220022154B000AA52200165A
-:101B90008D2300248D220008254600013145008058
-:101BA0001462000430C4007F108F000238AA008045
-:101BB00000C0502151AF000131C800FF1518FFC906
-:101BC000010058218F8400343082007F03421821A5
-:101BD0003C02000A006218212402FF8000822024B7
-:101BE000AF440024A06A0079A06A00838C62005090
-:101BF0008F840034AC6200708C6500743C027FFFFF
-:101C00003442FFFF00A228240E00066BAC6500746E
-:101C1000AF5000248FBF00148FB0001003E0000805
-:101C200027BD001827BDFFC0AFBE0038AFB70034D6
-:101C3000AFB5002CAFB20020AFB1001CAFB00018A0
-:101C4000AFBF003CAFB60030AFB40028AFB3002444
-:101C50008F4500248F4600288F43002C3C02001F34
-:101C60003442FF800062182400C230240080A82182
-:101C7000AFA3001400A2F0240E00062FAFA60010A0
-:101C80003C0208008C4200E02410FF8003608821A1
-:101C900002A2102100501024AF4200243C02080090
-:101CA0008C4200E002A210213042007F0342182142
-:101CB0003C02000A00629021924200D293630084A9
-:101CC000305700FF306300FF24020001106200342F
-:101CD000036020212402000214620036000000008C
-:101CE0000E001216024028219223008392220083C4
-:101CF0003063007F3042007F000210C000031940B3
-:101D0000006218213C0208008C4200DC02A2102173
-:101D10000043382100F01024AF42002892250078BB
-:101D20009224008330E2007F034218213C02000C21
-:101D300014850007006280212402FFFFA24200F107
-:101D40002402FFFFA64200F20A0007272402FFFF39
-:101D500096020020A24200F196020022A64200F262
-:101D60008E020024AE4200F492220083A24200F0D0
-:101D70008E4200C8AE4200FC8E4200C4AE4200F863
-:101D80008E220050AE4201008E4200CCAE420104D1
-:101D9000922200853042003F0A0007823442004010
-:101DA0000E00123902402821922200850A00078283
-:101DB0003042003F936200852403FFDF3042003F42
-:101DC000A36200859362008500431024A36200850E
-:101DD0009363008393620078307400FF304200FF09
-:101DE00010540036240AFF803C0C000C3283007F24
-:101DF000000310C000031940006218213C020800D3
-:101E00008C4200DC268800013109007F02A21021EB
-:101E10000043382130E2007F0342182100EA1024F9
-:101E2000AF420028006C80218E020024028A182410
-:101E3000006A5826AE02000C8E020024310800FF12
-:101E4000AE02001096020014960300208E07001CBC
-:101E50003042FFFF3063FFFF8E060018004310235F
-:101E600000021100000227C30040282100C43023D3
-:101E700000E2102B00C2302300E53823AE07001C1F
-:101E8000AE06001896020020A60200149602002258
-:101E9000A602001692220079304200FF105400077B
-:101EA0000000000051370001316800FF92220078E5
-:101EB000304200FF1448FFCD0100A0219222008390
-:101EC000A22200798E2200500A0007E2AE220070A2
-:101ED000A22200858E22004C2405FF80AE42010C18
-:101EE0009222008534420020A2220085924200D135
-:101EF0003C0308008C6300DC305400FF3C02080007
-:101F00008C4200E400143140001420C002A31821C8
-:101F100000C4202102A210210064382100461021B3
-:101F20000045182400E52824AF450028AF43002CC5
-:101F30003042007F924400D030E3007F03422821EA
-:101F4000034318213C02000C006280213C02000E79
-:101F5000309600FF00A298211296002A000000008F
-:101F60008E02000C02002021026028211040002572
-:101F7000261000280E00064A000000009262000DA4
-:101F800026830001307400FF3042007FA262000D02
-:101F90002404FF801697FFF0267300203C020800FF
-:101FA0008C4200DC0000A02102A210210044102479
-:101FB000AF4200283C0208008C4200E43C030800C9
-:101FC0008C6300DC02A2102100441024AF42002CDC
-:101FD0003C0208008C4200E402A318213063007F19
-:101FE00002A210213042007F034220210343182126
-:101FF0003C02000C006280213C02000E0A0007A493
-:10200000008298218E4200D8AE2200508E4200D825
-:10201000AE22007092250083924600D19223008365
-:10202000924400D12402FF8000A228243063007F64
-:10203000308400FF00A628250064182A10600002E2
-:1020400030A500FF38A50080A2250083A2250079D5
-:102050000E00063D000000009222007E02A020211A
-:10206000A222007A8E2300743C027FFF3442FFFFDD
-:10207000006218240E00066BAE2300748FA20010BD
-:10208000AF5E00248FBF003CAF4200288FBE0038F7
-:102090008FA200148FB700348FB600308FB5002C9C
-:1020A0008FB400288FB300248FB200208FB1001CA2
-:1020B0008FB0001827BD004003E00008AF42002C9D
-:1020C00090A2000024420001A0A200003C030800EE
-:1020D0008C6300F4304200FF1443000F0080302175
-:1020E000A0A000003C0208008C4200E48F84003471
-:1020F000008220213082007F034218213C02000C24
-:10210000006218212402FF8000822024ACC300005A
-:1021100003E00008AF4400288C8200002442002025
-:1021200003E00008AC82000094C200003C080800F4
-:10213000950800CA30E7FFFF008048210102102106
-:10214000A4C2000094C200003042FFFF00E2102B46
-:1021500054400001A4C7000094A200003C03080002
-:102160008C6300CC24420001A4A2000094A20000D1
-:102170003042FFFF544300078F8600280107102BD1
-:10218000A4A000005440000101003821A4C70000B1
-:102190008F8600288CC4001CAF44003C94A2000031
-:1021A0008F43003C3042FFFF000210C00062182144
-:1021B000AF43003C8F42003C008220231880000483
-:1021C000000000008CC200180A00084324420001ED
-:1021D0008CC20018AF4200383C020050344200105C
-:1021E000AF420030000000000000000000000000CE
-:1021F0008F420000304200201040FFFD0000000030
-:102200008F420404AD2200048F420400AD2200007E
-:102210003C020020AF42003003E000080000000054
-:1022200027BDFFE0AFB20018AFB10014AFB000108F
-:10223000AFBF001C94C2000000C080213C12080007
-:10224000965200C624420001A60200009603000038
-:1022500094E2000000E03021144300058FB100300B
-:102260000E000818024038210A000875000000001E
-:102270008C8300048C820004244200400461000727
-:10228000AC8200048C8200040440000400000000C2
-:102290008C82000024420001AC8200009602000003
-:1022A0003042FFFF50520001A600000096220000BD
-:1022B00024420001A62200008F82002896230000FD
-:1022C00094420016144300048FBF001C2402000136
-:1022D000A62200008FBF001C8FB200188FB100141F
-:1022E0008FB0001003E0000827BD00208F89002870
-:1022F00027BDFFE0AFBF00188D220028274804004B
-:1023000030E700FFAF4200388D22002CAF8800304C
-:10231000AF42003C3C020005AF420030000000002C
-:1023200000000000000000000000000000000000AD
-:10233000000000008C82000C8C82000CAD020000BA
-:102340008C820010AD0200048C820018AD020008DF
-:102350008C82001CAD02000C8CA20014AD02001097
-:102360008C820020AD02001490820005304200FFF4
-:1023700000021200AD0200188CA20018AD02001C71
-:102380008CA2000CAD0200208CA20010AD02002433
-:102390008CA2001CAD0200288CA20020AD02002CF3
-:1023A000AD060030AD000034978300263402FFFFF5
-:1023B00014620002006020213404FFFF10E00011CD
-:1023C000AD04003895230036952400362402000120
-:1023D0003063FFFF000318C20069182190650040B8
-:1023E000308400070082100400451025A0620040E0
-:1023F0008F820028944200563042FFFF0A0008DC1A
-:10240000AD02003C952300369524003624020001DD
-:102410003063FFFF000318C2006918219065004077
-:1024200030840007008210040002102700451024A9
-:10243000A0620040AD00003C000000000000000071
-:10244000000000003C02000634420040AF42003071
-:102450000000000000000000000000008F420000AB
-:10246000304200101040FFFD8F860028AF880030FA
-:1024700024C2005624C7003C24C4002824C50032CE
-:1024800024C600360E000856AFA200108FBF0018F9
-:1024900003E0000827BD00208F8300243C060800CD
-:1024A0008CC600E88F82003430633FFF0003198040
-:1024B00000461021004310212403FF803046007F96
-:1024C00000431024AF420028034618213C02000CB0
-:1024D0000062302190C2000D30A500FF00003821BD
-:1024E00034420010A0C2000D8F8900288F8A00247A
-:1024F00095230036000A13823048000324020001AD
-:10250000A4C3000E1102000B2902000210400005B6
-:10251000240200021100000C240300010A0009201B
-:102520000000182111020006000000000A00092026
-:10253000000018218CC2002C0A000920244300014D
-:102540008CC20014244300018CC200180043102BDD
-:1025500050400009240700012402002714A20003B0
-:10256000000000000A00092C240700019522003E0B
-:1025700024420001A522003E000A138230430003DA
-:102580002C62000210400009008028211460000421
-:102590000000000094C200360A00093C3046FFFFEC
-:1025A0008CC600380A00093C008028210000302138
-:1025B0003C04080024844B780A00088900000000CD
-:1025C000274901008D22000C9523000601202021BF
-:1025D000000216023046003F3063FFFF240200274E
-:1025E00000C0282128C7002810C2000EAF83002495
-:1025F00010E00008240200312402002110C200096A
-:102600002402002510C200079382002D0A00095BF6
-:102610000000000010C200059382002D0A00095B33
-:10262000000000000A0008F4000000000A0006266E
-:102630000000000095230006912400058D25000C64
-:102640008D2600108D2700188D28001C8D29002054
-:10265000244200013C010800A4234B7E3C010800F9
-:10266000A0244B7D3C010800AC254B843C010800B4
-:10267000AC264B883C010800AC274B903C0108007D
-:10268000AC284B943C010800AC294B9803E00008AF
-:10269000A382002D8F87002827BDFFC0AFB3003471
-:1026A000AFB20030AFB1002CAFB00028AFBF0038E0
-:1026B0003C0208008C4200D094E3003030B0FFFFB1
-:1026C000005010073045FFFF3063FFFF00C0982126
-:1026D000A7A200103C110800963100C614A3000602
-:1026E0003092FFFF8CE2002424420030AF42003CD5
-:1026F0000A0009948CE2002094E200323042FFFF8D
-:1027000054A2000827A400188CE2002C24420030B8
-:10271000AF42003C8CE20028AF4200380A0009A218
-:102720008F84002827A5001027A60020022038212A
-:102730000E000818A7A000208FA200182442003025
-:10274000AF4200388FA2001CAF42003C8F840028AB
-:102750003C020005AF42003094820034274304005D
-:102760003042FFFF0202102B14400007AF830030FD
-:1027700094820054948300340202102100431023F9
-:102780000A0009B63043FFFF94830054948200345A
-:102790000223182100501023006218233063FFFF2A
-:1027A000948200163042FFFF144300030000000033
-:1027B0000A0009C424030001948200163042FFFF7E
-:1027C0000043102B104000058F82003094820016C9
-:1027D000006210233043FFFF8F820030AC530000B3
-:1027E000AC400004AC520008AC43000C3C020006B4
-:1027F00034420010AF420030000000000000000032
-:10280000000000008F420000304200101040FFFD29
-:10281000001018C2006418219065004032040007BF
-:10282000240200018FBF00388FB300348FB2003014
-:102830008FB1002C8FB000280082100400451025B5
-:1028400027BD004003E00008A062004027BDFFA8AC
-:10285000AFB60050AFB5004CAFB40048AFB30044C2
-:10286000AFB1003CAFBF0054AFB20040AFB00038D2
-:102870008C9000003C0208008C4200E88F860034F7
-:10288000960300022413FF8000C2302130633FFF13
-:102890000003198000C3382100F3102490B2000017
-:1028A000AF42002C9203000230E2007F034230214D
-:1028B0003C02000E00C28821306300C024020040A8
-:1028C0000080A82100A0B021146200260000A021F1
-:1028D0008E3400388E2200181440000224020001B9
-:1028E000AE2200189202000D304200201440001564
-:1028F0008F8200343C0308008C6300DC001238C077
-:10290000001231400043102100C730210046382119
-:1029100030E300073C02008030E6007800C230253A
-:102920000343182100F31024AF4208002463090078
-:10293000AF4608108E2200188C6300080043102157
-:10294000AE2200188E22002C8E2300182442000193
-:102950000062182B1060003D000000000A000A7899
-:1029600000000000920300022402FFC00043102474
-:10297000304200FF1440000524020001AE2200187E
-:10298000962200360A000A613054FFFF8E2200149E
-:1029900024420001AE22001892020000000216003C
-:1029A0000002160304410029000000009602000204
-:1029B00027A4001000802821A7A20016960200027A
-:1029C00024070001000030213042FFFFAF820024C5
-:1029D0000E000889AFA0001C960300023C0408000A
-:1029E0008C8400E88F82003430633FFF000319803D
-:1029F00000441021004310213043007F3C05000CAF
-:102A00000053102403431821AF4200280065182109
-:102A10009062000D001221403042007FA062000D44
-:102A20003C0308008C6300E48F82003400431021D3
-:102A30000044382130E2007F03421021004510217C
-:102A400000F31824AF430028AEA200009222000D2C
-:102A5000304200101040001302A020218F83002874
-:102A60008EA40000028030219462003E2442FFFFC9
-:102A7000A462003E948400029625000E3084FFFF7D
-:102A80000E00097330A5FFFF8F82002894430034A5
-:102A90009622000E1443000302A02021240200010C
-:102AA000A382002C02C028210E0007FE00000000B7
-:102AB0008FBF00548FB600508FB5004C8FB40048C4
-:102AC0008FB300448FB200408FB1003C8FB000380C
-:102AD00003E0000827BD00588F82002827BDFFD0E3
-:102AE000AFB40028AFB20020AFBF002CAFB30024BA
-:102AF000AFB1001CAFB00018904400D0904300D19B
-:102B00000000A021309200FFA3A30010306300FF5B
-:102B10008C5100D88C5300DC1072002B2402000171
-:102B20003C0308008C6300E493A400108F820034FF
-:102B30002406FF800004214000431021004410219E
-:102B40003043007F00461024AF4200280343182181
-:102B50003C02000C006218218C62000427A40014BF
-:102B600027A50010022280210270102304400015C6
-:102B7000AFA300149062000D00C21024304200FF89
-:102B800014400007020088219062000D344200408A
-:102B90000E0007FEA062000D0A000ABD93A20010FD
-:102BA0000E0009E1241400018F830028AC7000D8C6
-:102BB00093A20010A06200D193A200101452FFD87B
-:102BC0000000000024020001168200048FBF002CC8
-:102BD0000E000626000000008FBF002C8FB40028D6
-:102BE0008FB300248FB200208FB1001C8FB000186B
-:102BF00003E0000827BD003027BDFFD8AFB3001C9D
-:102C0000AFB20018AFB10014AFB00010AFBF0020DA
-:102C10000080982100E0802130B1FFFF0E00049376
-:102C200030D200FF000000000000000000000000A3
-:102C30008F820020AC510000AC520004AC5300085D
-:102C4000AC40000CAC400010AC400014AC4000188C
-:102C50003C03080094634B5E02038025AC50001CCB
-:102C6000000000000000000000000000240400013B
-:102C70008FBF00208FB3001C8FB200188FB10014DB
-:102C80008FB000100A0004B827BD002827BDFFE858
-:102C9000AFB00010AFBF001430A5FFFF30C600FF7B
-:102CA0000080802124020C80AF420024000000003C
-:102CB0000000000000000000000000000000000014
-:102CC0000E000ACC000000003C040800248400E050
-:102CD0008C8200002403FF808FBF001402021021A9
-:102CE00000431024AF4200248C8200003C03000A01
-:102CF000020280213210007F035010218FB000109B
-:102D00000043102127BD001803E00008AF8200280F
-:102D100027BDFFE8AFBF00108F4401403C0308000F
-:102D20008C6300E02402FF80AF840034008318210C
-:102D300000621024AF4200243C02000803424021FC
-:102D4000950500023063007F3C02000A034318210E
-:102D50000062182130A5FFFF3402FFFF0000302180
-:102D60003C07602010A20006AF8300282402FFFF6A
-:102D7000A5020002946500D40E000AF130A5FFFF01
-:102D80008FBF001024020C8027BD001803E000084C
-:102D9000AF4200243C020008034240219502000299
-:102DA0003C0A0800954A00C63046FFFF14C00007E1
-:102DB0003402FFFF8F8200288F8400343C0760209C
-:102DC000944500D40A000B5A30A5FFFF10C200241E
-:102DD0008F87002894E2005494E400163045FFFFEA
-:102DE00000A6102300A6182B3089FFFF10600004F6
-:102DF0003044FFFF00C51023012210233044FFFFA1
-:102E0000008A102B1040000C012A1023240200011C
-:102E1000A50200162402FFFFA502000294E500D4DB
-:102E20008F8400340000302130A5FFFF3C07602074
-:102E30000A000AF1000000000044102A10400008B7
-:102E4000000000009502001630420001104000040E
-:102E5000000000009742007E24420014A5020016E4
-:102E600003E00008000000008F84002827BDFFE079
-:102E7000AFBF0018948200349483003E1060001AA3
-:102E80003048FFFF9383002C2402000114620027C6
-:102E90008FBF00188F820028000818C23108000771
-:102EA000006218212447003A244900542444002099
-:102EB000244500302446003490620040304200FF38
-:102EC0000102100730420001104000168FBF0018A9
-:102ED0000E000856AFA900108F82002894420034DB
-:102EE0000A000B733048FFFF94830036948200344D
-:102EF0001043000E8FBF001894820036A482003465
-:102F000094820056A48200548C82002CAC8200244F
-:102F100094820032A48200309482003CA482003A61
-:102F20008FBF00180A000B3327BD002003E0000804
-:102F300027BD002027BDFFE8AFBF00108F4A01006A
-:102F40003C0508008CA500E03C02080090424B8440
-:102F50003C0C0800958C4B7E01452821304B003FEE
-:102F600030A2007F03424021396900323C02000A4E
-:102F70003963003F2C630001010240212D2900012B
-:102F80002402FF8000A2282401234825AF8A0034B0
-:102F900000801821AF450024000030210080282146
-:102FA00024070001AF8800283C04080024844B78E3
-:102FB000AF8C002415200007A380002D24020020E0
-:102FC0005562000F006020213402FFFF5582000C83
-:102FD000006020212402002015620005000000008E
-:102FE0008C6300142402FFFF106200070000000041
-:102FF0000E000889000000000A000BD0000000004D
-:103000000E0008F4016028210E000B68000000008B
-:103010008FBF001024020C8027BD001803E00008B9
-:10302000AF4200243C0208008C4200E027BDFFA014
-:10303000AFB1003C008210212411FF80AFBE0058C8
-:10304000AFB70054AFB20040AFB00038AFBF005CC4
-:10305000AFB60050AFB5004CAFB40048AFB30044BA
-:10306000005110248F4800248F4900288F470028E2
-:10307000AF4200243C0208008C4200E00080902116
-:1030800024060006008210213042007F03421821EE
-:103090003C02000A006280213C02001F3442FF8093
-:1030A00000E2382427A40010260500F00122F024B5
-:1030B0000102B8240E00051DAFA700308FA2001832
-:1030C000AE0200C48FA2001CAE0200C88FA2002472
-:1030D000AE0200CC93A40010920300D12402FF8022
-:1030E0000082102400431025304900FF3083007F08
-:1030F0003122007F0062102A10400004000310C03B
-:1031000001311026304900FF000310C000031940B0
-:10311000006218213C0208008C4200DC920400D2BC
-:10312000024210210043102100511024AF42002818
-:1031300093A300103063007F000310C00003194008
-:10314000006218213C0208008C4200DC024210217F
-:10315000004310213042007F034218213C02000C42
-:10316000006240218FA300142402FFFF1062003090
-:10317000309500FF93A2001195030014304400FF26
-:103180003063FFFF0064182B1060000D000000008A
-:10319000950400148D07001C8D0600183084FFFF75
-:1031A00000442023000421000000102100E4382105
-:1031B00000E4202B00C230210A000C4A00C4302158
-:1031C000950400148D07001C8D0600183084FFFF45
-:1031D000008220230004210000001021008018211B
-:1031E00000C2302300E4202B00C4302300E3382346
-:1031F000AD07001CAD06001893A20011A502001433
-:1032000097A20012A50200168FA20014AD020010B2
-:103210008FA20014AD02000C93A20011A5020020A1
-:1032200097A20012A50200228FA20014AD02002472
-:103230002406FF80024610243256007FAF4200244D
-:10324000035618213C02000A006280218E02004CC5
-:103250008FA200203124007F000428C0AE0200505D
-:103260008FA200200004214000852821AE020070BA
-:1032700093A2001001208821A202008393A20010D3
-:10328000A2020079920200853042003FA20200852E
-:103290003C0208008C4200DC024210210045102153
-:1032A00000461024AF42002C3C0208008C4200E48F
-:1032B0003C0308008C6300DC024210210044102112
-:1032C00000461024AF4200283C0208008C4200E473
-:1032D00002431821006518210242102100441021E8
-:1032E0003042007F3063007F93A50010034220210D
-:1032F000034318213C02000E006240213C02000CF6
-:1033000010B1008C008248213233007F1660001912
-:103310002404FF803C0208008C4200DC02421021A1
-:1033200000441024AF42002C3C0208008C4200E410
-:103330003C0308008C6300DC02421021004410248E
-:10334000AF4200283C0208008C4200E402431821EE
-:103350003063007F024210213042007F034220216F
-:10336000034318213C02000E006240213C02000C85
-:10337000008248219124000D2414FF8000001021B8
-:1033800000942025A124000D950400029505001449
-:103390008D07001C3084FFFF30A5FFFF8D0600184D
-:1033A000008520230004210000E4382100C23021E0
-:1033B00000E4202B00C43021AD07001CAD0600182E
-:1033C00095020002A5020014A50000168D02000857
-:1033D000AD0200108D020008AD02000C9502000243
-:1033E000A5020020A50000228D020008AD020024E5
-:1033F0009122000D30420040104000422622000180
-:103400003C0208008C4200E0A3B300283C10000AF4
-:103410000242102100541024AF4200243C02080054
-:103420008C4200E0A380002C27A4002C0242102133
-:103430003042007F03421821007018218C6200D8AE
-:103440008D26000427A50028AFA9002C00461021D6
-:10345000AC6200D80E0009E1AF83002893A30028D6
-:103460008F8200280E000626A04300D10E000B68B4
-:103470000000000002541024AF4200243C02080067
-:103480008C4200DC00132940001320C000A420213E
-:10349000024210210044102100541024AF42002C9D
-:1034A0003C0208008C4200E43C0308008C6300DC12
-:1034B00003563021024210210045102100541024EF
-:1034C000AF4200283C0208008C4200E4024318216D
-:1034D0000064182102421021004510213042007F73
-:1034E0003063007F03422021034318213C02000E79
-:1034F000006240213C02000C00D080210082482163
-:10350000262200013043007F14750005304400FF7F
-:103510002403FF800223102400431026304400FFC0
-:1035200093A2001000808821250800281444FF760B
-:103530002529002093A400108FA300142402FFFF6C
-:103540001062000A308900FF2482000124830001F8
-:103550003042007F14550005306900FF2403FF80CE
-:103560000083102400431026304900FF92020078A7
-:10357000305300FF11330032012088213C02080043
-:103580008C4200DC3225007F000520C00005294068
-:1035900000A42021024210212406FF8000441021B3
-:1035A00000461024AF42002C3C0308008C6300DC72
-:1035B0003C0208008C4200E4024318210242102120
-:1035C0000045102100641821004610243063007F5C
-:1035D000AF420028034318213C02000E0062402144
-:1035E0003C0208008C4200E48D06000C0100202102
-:1035F00002421021004510213042007F0342182171
-:103600003C02000C0062482110C0000D012028215E
-:103610000E00064A000000002402FF800222182447
-:1036200026240001006228263082007F1455000203
-:10363000308300FF30A300FF1473FFD000608821A7
-:103640008E0300743C027FFF3442FFFF00621824A7
-:10365000AE0300740E00066B02402021AF57002419
-:103660008FA20030AF5E00288FBF005C8FBE005875
-:103670008FB700548FB600508FB5004C8FB4004800
-:103680008FB300448FB200408FB1003C8FB0003840
-:1036900027BD006003E00008AF42002C27BDFFD823
-:1036A000AFB1001CAFBF0020AFB000182751018898
-:1036B000922200032408FF803C03000A3047007F69
-:1036C000A3A700108F4601803C0208008C4200E056
-:1036D000AF86003400C2282100A81024AF42002485
-:1036E0009224000030A2007F0342102100431021E9
-:1036F000AF8200283084007F24020002148200255B
-:10370000000719403C0208008C4200E400C210216E
-:103710000043282130A2007F0342182100A8102472
-:10372000AF4200283C02000C006218219062000D9C
-:10373000AFA3001400481025A062000D8FA3001451
-:103740009062000D304200405040006A8FBF002060
-:103750008F860028A380002C27A400148CC200D8D8
-:103760008C63000427A50010004310210E0009E11E
-:10377000ACC200D893A300108F8200280E0006264A
-:10378000A04300D10E000B68000000000A000E0BE1
-:103790008FBF00200E00062F00C020210E00063D26
-:1037A000000000003C020008034280219223000137
-:1037B0009202007B1443004F8FBF00209222000032
-:1037C0003044007F24020004108200172882000584
-:1037D00010400006240200052402000310820007A6
-:1037E0008FB1001C0A000E0C0000000010820012B5
-:1037F0008FBF00200A000E0C8FB1001C92050083C1
-:10380000920600788E0700748F84003430A500FF84
-:1038100000073E0230C600FF0E00067330E7007F4F
-:103820000A000E0B8FBF00200E000BD78F840034D0
-:103830000A000E0B8FBF002024020C80AF42002430
-:103840009202003E30420040104000200000000084
-:103850009202003E00021600000216030441000618
-:10386000000000008F8400340E0005A024050093A2
-:103870000A000E0B8FBF00209202003F24030018A5
-:10388000304200FF1443000C8F84003424050039BB
-:103890000E000538000030210E0002508F840034E5
-:1038A00024020012A202003F0E0002598F8400344D
-:1038B0000A000E0B8FBF0020240500360E000538CD
-:1038C000000030210A000E0B8FBF00200E000250B6
-:1038D0008F8400349202000534420020A2020005C9
-:1038E0000E0002598F8400340E000FC08F84003404
-:1038F0008FBF00208FB1001C8FB0001824020C80F5
-:1039000027BD002803E00008AF42002427BDFFE8E0
-:10391000AFB00010AFBF001427430100946200084D
-:103920000002140000021403044100020000802180
-:103930002410000194620008304200801040001AF8
-:10394000020010219462000830422000104000164E
-:10395000020010218C6300183C021C2D344219ED2A
-:10396000240600061062000F3C0760213C0208009C
-:103970008C4200D4104000078F8200288F830028DB
-:10398000906200623042000F34420040A062006248
-:103990008F8200288F840034944500D40E000AF1F1
-:1039A00030A5FFFF020010218FBF00148FB0001060
-:1039B00003E0000827BD001827BDFFE0AFB10014E9
-:1039C000AFB00010A380002CAFBF00188F450100DE
-:1039D0003C0308008C6300E02402FF80AF850034C4
-:1039E00000A318213064007F0344202100621824C2
-:1039F0003C02000A00822021AF430024275001002E
-:103A00008E0200148C8300DCAF8400280043102356
-:103A100018400004000088218E0200140E000A8461
-:103A2000AC8200DC9202000B24030002304200FF53
-:103A30001443002F0000000096020008304300FFEE
-:103A40002402008214620005240200840E00093E54
-:103A5000000000000A000E97000000001462000938
-:103A6000240200818F8200288F8400343C0760216B
-:103A7000944500D49206000530A5FFFF0A000E868B
-:103A800030C600FF14620027000000009202000A06
-:103A9000304300FF306200201040000430620040DC
-:103AA0008F8400340A000E82240600401040000477
-:103AB000000316008F8400340A000E8224060041A1
-:103AC00000021603044100178F84003424060042CC
-:103AD0008F8200283C076019944500D430A5FFFF71
-:103AE0000E000AF1000000000A000E97000000001E
-:103AF0009202000B24030016304200FF1043000620
-:103B0000000000009202000B24030017304200FF67
-:103B100014430004000000000E000E11000000001D
-:103B2000004088210E000B68000000009202000A8D
-:103B3000304200081040000624020C808F850028C7
-:103B40003C0400080E0011EE0344202124020C80E6
-:103B5000AF4200248FBF0018022010218FB0001048
-:103B60008FB1001403E0000827BD002027BDFFE847
-:103B7000AFBF0014AFB000108F5000243C0308000A
-:103B80008C6300E08F4501002402FF8000A3182110
-:103B90003064007F03442021006218243C02000AA4
-:103BA00000822021AF850034AF4300249082006260
-:103BB000AF8400283042000F34420050A0820062DF
-:103BC0003C02001F3442FF800E00062602028024C1
-:103BD000AF5000248FBF00148FB0001003E0000826
-:103BE00027BD00183C0208008C4200201040001D38
-:103BF0002745010090A300093C0200080342202150
-:103C000024020018546200033C0200080A000ED887
-:103C10002402000803422021240200161462000539
-:103C20002402001724020012A082003F0A000EE2C4
-:103C300094A700085462000694A700089362000548
-:103C40002403FFFE00431024A362000594A700088C
-:103C500090A6001B8CA4000094A500060A000ACCC4
-:103C600000073C0003E000080000000027440100BA
-:103C700094820008304500FF38A3008238A20084F7
-:103C80002C6300012C420001006218251060000620
-:103C9000240200839382002D1040000D00000000DC
-:103CA0000A000B9B0000000014A2000524A2FF8064
-:103CB0008F4301043C02602003E00008AC43001481
-:103CC000304200FF2C420002104000032402002278
-:103CD0000A000E3C0000000014A2000300000000D7
-:103CE0000A000EA9000000000A000EC70000000034
-:103CF0009363007E9362007A144300090000202140
-:103D00009362000024030050304200FF144300047B
-:103D1000240400019362007E24420001A362007E1D
-:103D200003E00008008010218F4201F80440FFFEEC
-:103D300024020002AF4401C0A34201C43C021000AF
-:103D400003E00008AF4201F827BDFFE8AFBF001055
-:103D50009362003F2403000A304200FF14430046F0
-:103D6000000000008F6300548F62004C1062007DE1
-:103D7000036030219362000024030050304200FFB2
-:103D80001443002F000000008F4401403C02080053
-:103D90008C4200E02403FF800082102100431024A5
-:103DA000AF4200243C0208008C4200E08F650054C2
-:103DB0003C03000A008220213084007F034410214C
-:103DC00000431021AC4501089762003C8F63004C12
-:103DD0003042FFFF0002104000621821AF63005C18
-:103DE0008F6300548F64004C9762003C006418237A
-:103DF0003042FFFF00031843000210400043102A26
-:103E000010400006000000008F6200548F63004CD9
-:103E1000004310230A000F58000210439762003C31
-:103E20003042FFFF00021040ACC2006424020001D7
-:103E3000A0C0007CA0C2008424020C80AF420024F9
-:103E40000E000F0A8F440140104000478FBF001042
-:103E50008F4301408F4201F80440FFFE240200021C
-:103E6000AF4301C0A34201C43C021000AF4201F8BD
-:103E70000A000FA88FBF00109362003F24030010B8
-:103E8000304200FF14430004000000008F44014052
-:103E90000A000F94000028219362003F24030016BB
-:103EA000304200FF1443000424020014A362003FC8
-:103EB0000A000FA2000000008F62004C8F630050C8
-:103EC00000431023044100288FBF0010936200813B
-:103ED00024420001A3620081936200812C4200040D
-:103EE00014400010000000009362003F240300040F
-:103EF000304200FF14430006000000008F440140E0
-:103F00008FBF0010240500930A0005A027BD0018EC
-:103F10008F440140240500938FBF00100A00060F54
-:103F200027BD00188F4401400E0002500000000021
-:103F30008F6200542442FFFFAF6200548F62005032
-:103F40002442FFFFAF6200500E0002598F4401402F
-:103F50008F4401408FBF0010240500040A00025E58
-:103F600027BD00188FBF001003E0000827BD001810
-:103F70008F4201889363007E00021402304400FFE8
-:103F8000306300FF1464000D0000000093620080A5
-:103F9000304200FF1044000900000000A3640080CC
-:103FA0009362000024030050304200FF14430004D9
-:103FB000000000000A0006D78F440180A36400803F
-:103FC00003E000080000000027BDFFE8AFB00010CC
-:103FD000AFBF00149362000524030030304200306C
-:103FE00014430089008080213C0208008C4200209C
-:103FF00010400080020020210E0004930000000009
-:104000008F850020ACB000009362003E9363003FB8
-:10401000304200FF00021200306300FF0043102511
-:10402000ACA2000493620082000216000002160394
-:1040300004410005000000003C0308008C630048B8
-:104040000A000FE6000000009362003E304200408C
-:10405000144000030000182193620081304300FFE8
-:104060009362008200031E00304200FF0002140031
-:1040700000621825ACA300088F620040ACA2000CBF
-:104080008F620048ACA200108F62004CACA20014FA
-:104090008F6200508F63004C0043102304410003E3
-:1040A000000000000A000FFA8F62004C8F6200507F
-:1040B000ACA200183C02080094424B5E3C03C00BCB
-:1040C00000002021004310250E0004B8ACA2001C03
-:1040D0008F6200548F840020AC8200008F620058F1
-:1040E000AC8200048F62005CAC8200088F620060CA
-:1040F0008F43007400431021AC82000C8F62006477
-:10410000AC820010976300689762006A00031C008D
-:104110003042FFFF00621825AC83001493620082D6
-:1041200024030080304200FF14430003000000001D
-:104130000A00102EAC8000188F63000C24020001CE
-:104140001062000E2402FFFF9362003E30420040E6
-:104150001440000A2402FFFF8F63000C8F4200749A
-:10416000006218233C020800006210241440000280
-:10417000000028210060282100051043AC820018AF
-:104180003C02080094424B5E3C03C00C000020211E
-:10419000004310258F8300200E0004B8AC62001C81
-:1041A0008F6200188F8300203C05080094A54B5EA9
-:1041B00024040001AC620000AC6000048F66006C57
-:1041C0003C02400D00A22825AC6600088F6200DC8E
-:1041D000AC62000CAC600010936200050002160097
-:1041E000AC620014AC6000180E0004B8AC65001C92
-:1041F000020020218FBF00148FB00010A3600005C3
-:104200000A00042127BD00188FBF00148FB00010D2
-:1042100003E0000827BD00189742007C30C600FF6D
-:10422000A08600843047FFFF2402000514C2000B63
-:1042300024E3465090A201122C42000710400007D0
-:1042400024E30A0090A30112240200140062100467
-:1042500000E210210A0010663047FFFF3067FFFFC1
-:1042600003E00008A4870014AC87004C8CA201086E
-:104270000080402100A0482100E2102330C600FF4A
-:104280001840000393AA001324E2FFFCACA201082B
-:1042900030C2000110400008000000008D020050F4
-:1042A00000E2102304410013240600058D0200548F
-:1042B00010E20010000000008D02005414E2001A09
-:1042C000000000003C0208008C4200D83042002070
-:1042D0001040000A2402000191030078910200833B
-:1042E000144300062402000101002021012028219E
-:1042F000240600040A00105400000000A1000084FD
-:1043000011400009A50200148F4301008F4201F8FB
-:104310000440FFFE24020002AF4301C0A34201C4D7
-:104320003C021000AF4201F803E00008000000006A
-:1043300027BDFFE88FA90028AFBF001000804021F3
-:1043400000E918231860007330C600FFA080007CCD
-:10435000A08000818CA2010800E210230440004DDF
-:10436000000000008C8200509483003C8C84006428
-:10437000004748233063FFFF012318210083202BCF
-:1043800010800004000000008D0200640A0010B7D5
-:1043900000E210219502003C3042FFFF0122102173
-:1043A00000E21021AD02005C9502003C8D03005C30
-:1043B0003042FFFF0002104000E210210043102BAA
-:1043C00010400003000000000A0010C68D02005CCF
-:1043D0009502003C3042FFFF0002104000E2102135
-:1043E000AD02005CA1000084AD07004C8CA2010866
-:1043F00000E210231840000224E2FFFCACA20108F6
-:1044000030C200011040000A000000008D02005080
-:1044100000E2102304410004010020218D02005419
-:1044200014E20003000000000A0010E82406000562
-:104430008D02005414E200478FBF00103C020800B8
-:104440008C4200D8304200201040000A24020001B3
-:1044500091030078910200831443000624020001B6
-:1044600001002021240600048FBF00100A00105410
-:1044700027BD0018A1000084A50200148F4301008D
-:104480008F4201F80440FFFE240200020A00110DD1
-:10449000000000008C82005C004910230043102BB8
-:1044A00054400001AC87005C9502003C3042FFFFA5
-:1044B0000062102B14400007240200029502003C09
-:1044C0008D03005C3042FFFF00621821AD03005CE9
-:1044D00024020002AD07004CA10200840E000F0A66
-:1044E0008F4401001040001B8FBF00108F4301005C
-:1044F0008F4201F80440FFFE24020002AF4301C0D6
-:10450000A34201C43C021000AF4201F80A0011238B
-:104510008FBF001030C200101040000E8FBF00107F
-:104520008C83005C9482003C006918233042FFFFBA
-:10453000006218213C023FFF3444FFFF0083102B30
-:10454000544000010080182101231021AD02005CBD
-:104550008FBF001003E0000827BD001827BDFFE84B
-:104560008FAA0028AFBF00100080402100EA482336
-:104570001920002130C600FF8C83005C8C8200640F
-:10458000006A18230043102B5040001000691821C6
-:1045900094A2011001221021A4A2011094A20110E2
-:1045A0003042FFFF0043102B1440000A3C023FFF43
-:1045B00094A2011000431023A4A201109482003C95
-:1045C0003042FFFF0A00114200621821A4A001102E
-:1045D0003C023FFF3444FFFF0083102B5440000196
-:1045E0000080182100671021AD02005CA100007C52
-:1045F0000A00118AA100008130C200101040003C66
-:10460000000000008C820050004A1023184000383F
-:10461000000000009082007C24420001A082007C07
-:104620009082007C3C0308008C630024304200FF31
-:104630000043102B1440005C8FBF00108CA20108B7
-:1046400000E2102318400058000000008C83005442
-:104650009482003C006A18233042FFFF0003184395
-:10466000000210400043102A104000050000000026
-:104670008C820054004A10230A001171000210437A
-:104680009482003C3042FFFF00021040AD02006403
-:104690009502003C8D0400649503003C3042FFFF0E
-:1046A00000021040008220213063FFFF00831821A8
-:1046B00001431021AD02005C8D020054ACA2010840
-:1046C00024020002A10200840E000F0A8F440100A0
-:1046D000104000358FBF00108F4301008F4201F85A
-:1046E0000440FFFE240200020A0011B30000000093
-:1046F000AD07004C8CA2010800E210231840000214
-:1047000024E2FFFCACA2010830C200011040000A04
-:10471000000000008D02005000E21023044100045C
-:10472000010020218D02005414E20003000000006B
-:104730000A0011AA240600058D02005414E2001A92
-:104740008FBF00103C0208008C4200D8304200208D
-:104750001040000A240200019103007891020083B6
-:104760001443000624020001010020212406000455
-:104770008FBF00100A00105427BD0018A10000844C
-:10478000A50200148F4301008F4201F80440FFFE90
-:1047900024020002AF4301C0A34201C43C02100046
-:1047A000AF4201F88FBF001003E0000827BD0018DA
-:1047B0008FAA00108C8200500080402130C600FF7C
-:1047C000004A102300A048211840000700E01821EB
-:1047D00024020001A0800084A0A00112A482001481
-:1047E0000A001125AFAA0010A0800081AD07004C7F
-:1047F0008CA2010800E210231840000224E2FFFC12
-:10480000ACA2010830C20001104000080000000006
-:104810008D0200500062102304410013240600059D
-:104820008D02005410620010000000008D02005440
-:1048300014620011000000003C0208008C4200D805
-:10484000304200201040000A240200019103007849
-:10485000910200831443000624020001010020217C
-:1048600001202821240600040A0010540000000042
-:10487000A1000084A502001403E00008000000006D
-:1048800027BDFFE0AFBF0018274201009046000A95
-:104890008C4800148C8B004C9082008430C900FF3F
-:1048A00001681823304A00FF1C60001A2D460006DC
-:1048B000240200010142100410C00016304300031E
-:1048C000012030210100382114600007304C000C19
-:1048D00015800009304200301440000B8FBF0018D3
-:1048E0000A001214000000000E001125AFAB0010EA
-:1048F0000A0012148FBF00180E00109AAFAB001000
-:104900000A0012148FBF0018AFAB00100E0011BACE
-:10491000AFAA00148FBF001803E0000827BD0020D5
-:1049200024020003A08200848C82005403E000086B
-:10493000ACA201083C0200080342182190620081E9
-:10494000240600433C07601924420001A062008154
-:10495000906300813C0208008C4200C0306300FF7D
-:10496000146200102403FF803C0208008C4200E027
-:104970000082102100431024AF4200243C020800B2
-:104980008C4200E03C03000A008210213042007F8C
-:104990000342102100431021944500D40A000AF17B
-:1049A00030A5FFFF03E000080000000027BDFFE086
-:1049B000AFBF0018AFB10014AFB000108F4201803C
-:1049C0000080802100A088210E00121B00402021C1
-:1049D000A20000848E0200548FBF00188FB0001018
-:1049E000AE2201088FB1001403E0000827BD0020AB
-:1049F00027BDFFE03C020008AFB00010AFBF0018B9
-:104A0000AFB10014034280218F5101409203008412
-:104A10008E0400508E02004C14820040306600FF6D
-:104A20003C0208008C4200E02403FF800222102197
-:104A300000431024AF4200243C0208008C4200E0F6
-:104A40009744007C92050081022210213042007FB1
-:104A5000034218213C02000A0062182114A0000B36
-:104A60003084FFFF2402000554C20014248205DCB8
-:104A70009062011224420001A062011224020C8003
-:104A8000AF4200240A00127324020005A060011244
-:104A90002402000514C20009248205DC9202008170
-:104AA0002C4200075040000524820A009203008136
-:104AB0002402001400621004008210213044FFFF21
-:104AC000A60400140E00121B022020219602003CB6
-:104AD0008E03004C022020213042FFFF00021040D4
-:104AE000006218210E000250AE03005C9202007DAD
-:104AF00002202021344200400E000259A202007D13
-:104B00008F4201F80440FFFE24020002AF5101C0B1
-:104B1000A34201C43C021000AF4201F88FBF00184D
-:104B20008FB100148FB0001003E0000827BD0020F3
-:104B300008000ACC08000B1408000B9808000BE4CE
-:044B400008000C203D
-:0C4B44000A000028000000000000000033
-:104B50000000000D6370362E322E31000000000080
-:104B60000602010400000000000000000000000038
-:104B70000000000000000000000000000000000035
-:104B80000000000000000000000000000000002005
-:104B90000000000000000000000000000000000015
-:104BA0000000000000000000000000000000000005
-:104BB00000000000000000000000000000000001F4
-:104BC0000000002B000000000000000400030D4066
-:104BD00000000000000000000000000000000000D5
-:104BE00000000000000000001000000300000000B2
-:104BF0000000000D0000000D3C020800244258A4F3
-:104C00003C03080024635F70AC4000000043202B8D
-:104C10001480FFFD244200043C1D080037BD7FFCCA
-:104C200003A0F0213C100800261000A03C1C080046
-:104C3000279C58A40E0001AC000000000000000DED
-:104C400027BDFFE83C096018AFBF00108D2C500055
-:104C5000240DFF7F24080031018D5824356A380C5B
-:104C600024070C003C1A8000AD2A50003C04800A46
-:104C7000AF4800083C1B8008AF4700240E00091510
-:104C8000AF8400100E0008D8000000000E000825B8
-:104C9000000000000E001252000000003C046016EC
-:104CA0008C8500003C06FFFF3C02535300A61824ED
-:104CB0001062004734867C0094C201F2A780002C69
-:104CC00010400003A78000CC38581E1EA798002C67
-:104CD00094C201F810400004978300CC38591E1E7E
-:104CE000A79900CC978300CC2C7F006753E000018C
-:104CF000240300669784002C2C82040114400002D7
-:104D000000602821240404003C0760008CE904387A
-:104D10002403103C3128FFFF1103001F30B9FFFFAF
-:104D200057200010A38000CE24020050A38200CEA2
-:104D3000939F00CE53E0000FA78500CCA78000CC46
-:104D4000978500CC8FBF0010A780002CA78000346F
-:104D5000A78000E63C010800AC25008003E00008C5
-:104D600027BD0018939F00CE57E0FFF5A78000CC29
-:104D7000A78500CC978500CC8FBF0010A784002C9E
-:104D8000A7800034A78000E63C010800AC25008025
-:104D900003E0000827BD0018A38000CE8CCB003CA8
-:104DA000316A00011140000E0000000030A7FFFF33
-:104DB00010E0FFDE240200508CCC00C831860001D8
-:104DC00014C0FFDC939F00CE0A00007A2402005139
-:104DD0008C8F00043C0E60000A00005D01EE302163
-:104DE0008CEF0808240D5708000F740211CD000441
-:104DF00030B8FFFF240500660A00007B240404008D
-:104E00001700FFCC939F00CE0A00007A24020050C6
-:104E10008F8600103089FFFF000939408CC30010D5
-:104E20003C08005000E82025AF4300388CC5001432
-:104E300027420400AF82001CAF45003CAF44003065
-:104E40000000000000000000000000000000000062
-:104E50000000000000000000000000000000000052
-:104E60008F4B0000316A00201140FFFD0000000060
-:104E700003E00008000000008F840010948A001AEC
-:104E80008C8700243149FFFF000940C000E8302131
-:104E9000AF46003C8C8500248F43003C00A31023C8
-:104EA00018400029000000008C8B002025620001C2
-:104EB0003C0D005035AC0008AF420038AF4C00301C
-:104EC00000000000000000000000000000000000E2
-:104ED00000000000000000000000000000000000D2
-:104EE0008F4F000031EE002011C0FFFD00000000D8
-:104EF0008F4A04003C080020AC8A00108F4904044B
-:104F0000AC890014AF4800300000000094860018FF
-:104F10009487001C00C71821A48300189485001AE8
-:104F200024A20001A482001A9498001A9499001EE9
-:104F3000133800030000000003E000080000000038
-:104F400003E00008A480001A8C8200200A0000DC24
-:104F50003C0D00500A0000CD000000003C0308009A
-:104F60008C6300208F82001827BDFFE810620008C4
-:104F7000AFBF00100E000104AF8300183C0308000F
-:104F80008C63002024040001106400048F89001049
-:104F90008FBF001003E0000827BD00188FBF00106E
-:104FA0003C076012A520000A9528000A34E500108D
-:104FB00027BD00183106FFFF03E00008ACA60090F3
-:104FC0003C0208008C42002027BDFFC8AFBF003460
-:104FD000AFBE0030AFB7002CAFB60028AFB500248D
-:104FE000AFB40020AFB3001CAFB20018AFB10014D3
-:104FF00010400050AFB000108F840010948600065F
-:105000009483000A00C3282330B6FFFF12C0004A71
-:105010008FBF003494890018948A000A012A402323
-:105020003102FFFF02C2382B14E0000202C020212F
-:10503000004020212C8C0005158000020080A0215A
-:10504000241400040E0000B3028020218F8700107A
-:1050500002809821AF80001494ED000A028088211C
-:105060001280004E31B2FFFF3C1770003C1540002B
-:105070003C1E60008F8F001C8DEE000001D71824AD
-:10508000507500500220202102A3802B160000350D
-:105090003C182000507800470220202124100001F5
-:1050A0008F83001414600039029158230230F823D2
-:1050B0000250C82133F1FFFF1620FFEE3332FFFF0D
-:1050C0008F8700103C110020AF510030000000001D
-:1050D00094E6000A3C1E601237D5001002662821B3
-:1050E000A4E5000A94E2000A94F2000A94F400187D
-:1050F0003057FFFF1292003BAEB700908CED0014CA
-:105100008CE400100013714001AE4021000E5FC31B
-:10511000010E502B008B4821012A1821ACE8001405
-:10512000ACE3001002D3382330F6FFFF16C0FFB9FE
-:105130008F8400108FBF00348FBE00308FB7002CDB
-:105140008FB600288FB500248FB400208FB3001CC9
-:105150008FB200188FB100148FB0001003E0000868
-:1051600027BD0038107E001B000000001477FFCC24
-:10517000241000010E00159B000000008F83001416
-:105180001060FFCB0230F823029158238F87001064
-:10519000017020210A0001973093FFFF8F830014D4
-:1051A0001460FFCB3C110020AF5100300A000163B6
-:1051B000000000000E00077D024028210A00015770
-:1051C000004080210E00033A024028210A000157C6
-:1051D000004080210E001463022020210A000157A4
-:1051E000004080210E0000CD000000000A0001797F
-:1051F00002D3382327BDFFE8AFB00010AFBF0014C3
-:105200000E00003F000000003C028000345000709F
-:105210000A0001BA8E0600008F4F000039EE00012F
-:1052200031C20001104000248F8600A88E070000C4
-:105230003C0C08008D8C003C3C0908008D2900388E
-:1052400000E66823018D28210000502100AD302B9D
-:10525000012A4021010620213C010800AC25003C28
-:10526000AF8700A83C010800AC2400380E000106FE
-:10527000000000003C0308008C6300701060FFE633
-:10528000006020213C0508008CA500683C06080051
-:105290008CC6006C0E00152A000000003C010800BE
-:1052A000AC2000708F4F000039EE000131C20001C8
-:1052B0001440FFDE8F8600A88E0A00008F8B00A8A6
-:1052C0003C0508008CA5003C3C0408008C84003898
-:1052D000014B482300A938210082182100E9402B06
-:1052E000006810213C010800AC27003C3C0108008C
-:1052F000AC2200388F5F01002419FF0024180C0035
-:1053000003F9202410980012AF840000AF4400205D
-:10531000936D0000240C002031A600FF10CC001279
-:10532000240E005010CE00043C194000AF59013843
-:105330000A0001B3000000000E0011C800000000C8
-:105340003C194000AF5901380A0001B300000000C9
-:105350000E00011F000000003C194000AF59013849
-:105360000A0001B3000000008F58010000802821CE
-:10537000330F00FF01E020210E0002F1AF8F000487
-:105380003C194000AF5901380A0001B30000000089
-:1053900000A4102B2403000110400009000030215C
-:1053A0000005284000A4102B04A0000300031840AF
-:1053B0005440FFFC000528405060000A0004182BF0
-:1053C0000085382B54E000040003184200C3302548
-:1053D00000852023000318421460FFF900052842CD
-:1053E0000004182B03E0000800C310218F4201B80D
-:1053F0000440FFFE00000000AF4401803C031000A9
-:1054000024040040AF450184A3440188A3460189D8
-:10541000A747018A03E00008AF4301B83084FFFFCB
-:105420000080382130A5FFFF000020210A00022A59
-:10543000240600803087FFFF8CA40000240600387B
-:105440000A00022A000028218F8300388F8600304E
-:105450001066000B008040213C07080024E75A1822
-:10546000000328C000A710218C4400002463000121
-:10547000108800053063000F5466FFFA000328C04F
-:1054800003E00008000010213C07080024E75A1C34
-:1054900000A7302103E000088CC200003C0390000C
-:1054A0003462000100822025AF4400208F45002097
-:1054B00004A0FFFE0000000003E000080000000060
-:1054C0003C038000346200010082202503E00008D4
-:1054D000AF44002027BDFFE0AFB100143091FFFFC3
-:1054E000AFB00010AFBF00181220001300A0802141
-:1054F0008CA2000024040002240601401040000F8A
-:10550000004028210E000C5C00000000000010216B
-:10551000AE000000022038218FBF00188FB10014A8
-:105520008FB0001000402021000028210000302111
-:105530000A00022A27BD00208CA200000220382188
-:105540008FBF00188FB100148FB0001000402021D1
-:1055500000002821000030210A00022A27BD002077
-:1055600000A010213087FFFF8CA500048C440000B0
-:105570000A00022A2406000627BDFFE0AFB0001093
-:10558000AFBF0018AFB100149363003E00808021CC
-:105590000080282130620040000020211040000FD0
-:1055A0008E1100000E000851022020219367000098
-:1055B0002404005030E500FF50A400128E0F0000BC
-:1055C000022020218FBF00188FB100148FB000106F
-:1055D000A762013C0A00091127BD00200E000287C6
-:1055E000000000000E0008510220202193670000F7
-:1055F0002404005030E500FF14A4FFF20220202113
-:105600008E0F00003C1008008E1000503C0D000C66
-:10561000240BFF8001F05021314E007F01DA602120
-:10562000018D4021014B4824AF4900280220202150
-:105630008FBF00188FB100148FB00010A50200D6E4
-:1056400027BD00200A000911AF8800D027BDFFE068
-:10565000AFBF0018AFB10014AFB0001093660001E7
-:10566000008080210E00025630D1000493640005B2
-:10567000001029C2A765000034830040A363000521
-:105680000E00025F020020210E00091302002021FB
-:1056900024020001AF62000C02002821A762001062
-:1056A00024040002A762001224060140A76200142D
-:1056B0000E000C5CA76200161620000F8FBF0018AA
-:1056C000978C00343C0B08008D6B00782588FFFF19
-:1056D0003109FFFF256A0001012A382B10E000067E
-:1056E000A78800343C0F6006240E001635ED00102C
-:1056F000ADAE00508FBF00188FB100148FB00010F6
-:1057000003E0000827BD002027BDFFE0AFB1001473
-:10571000AFBF0018AFB0001000A088211080000AB1
-:105720003C03600024020080108200120000000090
-:105730000000000D8FBF00188FB100148FB0001053
-:1057400003E0000827BD00208C682BF80500FFFE51
-:1057500000000000AC712BC08FBF00188FB1001487
-:105760008FB000103C09100027BD002003E00008A6
-:10577000AC692BF80E00025600A0202193650005AD
-:10578000022020210E00025F30B000FF2403003E03
-:105790001603FFE7000000008F4401780480FFFE3D
-:1057A000240700073C061000AF51014002202021D1
-:1057B000A34701448FBF00188FB100148FB00010B1
-:1057C000AF4601780A0002C227BD002027BDFFE8CE
-:1057D000AFBF0014AFB000108F50002000000000D9
-:1057E0000E000913AF440020AF5000208FBF0014FB
-:1057F0008FB0001003E0000827BD00183084FFFFC1
-:10580000008038212406003500A020210A00022A49
-:10581000000028213084FFFF008038212406003654
-:1058200000A020210A00022A0000282127BDFFD065
-:10583000AFB3001C3093FFFFAFB50024AFB2001828
-:10584000AFBF0028AFB40020AFB10014AFB000105C
-:1058500030B5FFFF12600027000090218F90001CE0
-:105860008E0300003C0680002402004000033E023C
-:1058700000032C0230E4007F006688241482001D9F
-:1058800030A500FF8F8300282C68000A510000100B
-:105890008F910014000358803C0C0800258C56940E
-:1058A000016C50218D49000001200008000000001B
-:1058B00002B210213045FFFF0E000236240400849E
-:1058C000162000028F90001CAF8000288F910014DA
-:1058D000260C002026430001018080213072FFFF4A
-:1058E00016200004AF8C001C0253502B1540FFDC27
-:1058F00000000000024010218FBF00288FB5002457
-:105900008FB400208FB3001C8FB200188FB1001429
-:105910008FB0001003E0000827BD0030240E0034D3
-:1059200014AE00F9000000009203000E241F168040
-:105930003C07000CA36300219202000D0347C8211D
-:105940003C066000A3620020961100123C0A7FFF13
-:10595000354CFFFFA771003C960B00102403000597
-:105960003168FFFFAF6800848E05001CAF5F002820
-:105970008F3800008CC4444803057826008F3021FE
-:10598000AF66004C8F69004C24CE00013C057F00BF
-:10599000AF6900508F740050AF740054AF66007050
-:1059A000AF6E00588F6D005824140050AF6D005C2E
-:1059B000A3600023AF6C0064A36300378E02001461
-:1059C000AF6200488F710048AF7100248E0B001841
-:1059D000AF6B006C9208000CA3680036937F003E0A
-:1059E00037F90020A379003E8F78007403058024E6
-:1059F000360F4000AF6F007493640000308900FFE1
-:105A0000513402452404FF803C04080024845A9841
-:105A10000E00028D000000003C1008008E105A9805
-:105A20000E00025602002021240600042407000173
-:105A3000A366007D020020210E00025FA36700051F
-:105A40008F5F017807E0FFFE240B0002AF5001409A
-:105A5000A34B01448F90001C3C081000AF48017814
-:105A60000A000362AF8000282CAD003751A0FF98D8
-:105A70008F9100140005A0803C180800271856BC20
-:105A8000029878218DEE000001C00008000000009F
-:105A90002418000614B80011000000003C0808009B
-:105AA0008D085A9824040005AF4800208E1F001866
-:105AB000AF7F00188F79004CAF79001C8F650050C4
-:105AC000122000C0AF6500700A000362AF84002896
-:105AD0002406000710A60083240300063C050800E6
-:105AE00024A55A980E000264240400818F90001CA3
-:105AF0000011102B0A000362AF8200282407000463
-:105B000014A7FFF6240500503C1808008F185A9877
-:105B1000AF5800208E0F0008AF6F00408E090008BC
-:105B2000AF6900448E14000CAF7400488E0E001054
-:105B3000AF6E004C8E0D0010AF6D00848E0A001405
-:105B4000AF6A00508E0C0018AF6C00548E04001C1D
-:105B5000AF64005893630000306B00FF116501D8FB
-:105B6000000000008F7400488F6900400289702394
-:105B700005C000042404008C1620FFDE240200036C
-:105B8000240400823C05080024A55A980E000287D0
-:105B9000000000008F90001C000010210A0003622A
-:105BA000AF820028240F000514AFFFCC240520008D
-:105BB0003C0708008CE75A98AF4700208E06000487
-:105BC000AF66005C9208000824100008A36800215A
-:105BD0008F9F001C93F90009A37900208F86001C79
-:105BE00090D8000A330400FF10900011000000005C
-:105BF0002885000914A0006924020002240A00205C
-:105C0000108A000B34058000288D002115A00008A3
-:105C100024054000240E0040108E00053C050001C4
-:105C200024140080109400023C050002240540006A
-:105C30008F7800743C19FF00031980240205782531
-:105C4000AF6F007490C4000BA36400818F84001CAC
-:105C50009489000C11200192000000009490000C27
-:105C60002406FFBF24050004A770003C908F000E9F
-:105C7000A36F003E8F84001C9089000FA369003F32
-:105C80008F8B001C8D6E00108F54007401D468231C
-:105C9000AF6D00608D6A0014AF6A0064956C0018E7
-:105CA000A76C00689563001AA763006A8D62001CE8
-:105CB000AF62006C9167000EA367003E9368003EE0
-:105CC0000106F8241220014BA37F003E8F90001C98
-:105CD0000A000362AF8500282407002214A7FF7F73
-:105CE000240300073C0B08008D6B5A981220000C0F
-:105CF000AF4B00200A000362AF830028240C00335E
-:105D000010AC0014240A00283C05080024A55A9869
-:105D10000E00023C240400810A0003EB8F90001C5B
-:105D20003C04080024845A980E00028D00000000F4
-:105D30009363000024110050306200FF10510135C0
-:105D4000000000008F90001C000018210A00036270
-:105D5000AF8300283C0D08008DAD5A9824040081C3
-:105D6000AF4D00203C05080024A55A980E00023CC7
-:105D7000A36A00348F90001C240200090A00036209
-:105D8000AF82002802B288213225FFFF0E000236C2
-:105D9000240400840A0003628F90001C1082FFA478
-:105DA00024050400288B000311600170240C0004FA
-:105DB000240300015483FF9E240540000A00043B95
-:105DC000240501003C04080024845A988F62004C8A
-:105DD0000E00028D8F6300508F90001C0000202168
-:105DE0000A000362AF8400288E1000042404008A95
-:105DF000AF50002093790005333800021700015F8F
-:105E0000020028219368002302002821311F00206E
-:105E100017E0015A2404008D9367003F2406001206
-:105E200030E200FF10460155240400810E000256A6
-:105E30000200202193630023240500040200202196
-:105E4000346B0042A36B00230E00025FA365007D4C
-:105E50008F4401780480FFFE240A0002AF50014005
-:105E6000A34A01448F90001C3C0C1000AF4C0178F9
-:105E70000A0003EC0011102B8E1000042404008A89
-:105E8000AF500020936E000531CD000215A0001622
-:105E900002002821936F003F2414000402002821EF
-:105EA00031E900FF11340010240400810E00025675
-:105EB000020020219362002324080012241FFFFE09
-:105EC00034460020A3660023A368003F93790005B1
-:105ED00002002021033FC0240E00025FA3780005CA
-:105EE00002002821000020210E00033400000000E1
-:105EF0000A0003EB8F90001C8E1000043C03000886
-:105F00000343A021AF500020928B000024050050D5
-:105F1000316400FF10850161240700880200202100
-:105F2000000028210E00022A2406000E928D000097
-:105F3000240EFF800200282101AE8025A2900000DF
-:105F4000240400040E000C5C240600300A0003EB5D
-:105F50008F90001C8E0800043C14080026945A9868
-:105F60003C010800AC285A98AF480020921F00035B
-:105F700033F9000413200002240200122402000658
-:105F8000A362003F920B001B2404FFC03165003F59
-:105F900000A43825A367003E9206000330C200012A
-:105FA00014400132000000008E020008AE8200089A
-:105FB0003C0208008C425AA010400131000249C244
-:105FC000A76900088E14000C240C0001240300149F
-:105FD000AF74002C8E0E0010AF6E0030960D0016C0
-:105FE000A76D0038960A0014A76A003AAF6C000C3F
-:105FF000A76C0010A76C0012A76C0014A76C001609
-:1060000012200136A3630034920F000331F0000226
-:106010002E1100018F90001C262200080A00036246
-:10602000AF8200288E0400043C0E0008034E30218D
-:10603000AF4400208E05000890CD0000240C0050D5
-:1060400031AA00FF114C00862407008824060009AD
-:106050000E00022A000000000A0003EB8F90001CD3
-:106060008E04001C0E00024100000000104000F4ED
-:10607000004050218F89001C240700890140202105
-:106080008D25001C240600010E00022A00000000DD
-:106090000A0003EB8F90001C960D00023C140800D0
-:1060A00026945A9831AA0004514000B83C10600070
-:1060B0008E0E001C3C010800AC2E5A98AF4E0020FA
-:1060C000920700102408001430E200FF144800D6A4
-:1060D00000000000960B00023163000114600165AE
-:1060E000000000008E020004AE8200083C1408008C
-:1060F0008E945AA01280015B000000008F7400741F
-:106100003C0380002404000102835825AF6B007417
-:10611000A3600005AF64000C3C0708008CE75AA0A0
-:106120008F86001CA7640010000711C2A76400122C
-:10613000A7640014A7640016A76200088CC80008B2
-:1061400024040002AF68002C8CC5000CAF65003041
-:1061500090DF0010A37F00348F99001C9330001152
-:10616000A37000358F98001C930F0012A36F0036A8
-:106170008F89001C912E0013A36E00378F90001C96
-:10618000960D0014A76D0038960A0016A76A003A0B
-:106190008E0C0018AF6C00245620FDCCAF84002874
-:1061A0003C05080024A55A980E0002640000202136
-:1061B0008F90001C0A0004A7000020218E1000040C
-:1061C00024070081AF500020936900233134001070
-:1061D000128000170000000002002021000028218A
-:1061E0002406001F0E00022A000000000A0003EB34
-:1061F0008F90001C3C05080024A55A980E000287C9
-:10620000240400828F90001C000028210A000362F1
-:10621000AF8500283C0408008C845A980E0014E8CE
-:10622000000000008F90001C0A000482000018216A
-:106230000E00025602002021937800230200202144
-:10624000370F00100E00025FA36F002300003821FB
-:1062500002002021000028210A0005A82406001FB2
-:10626000920F000C31E90001112000030000000032
-:106270009618000EA4D8002C921F000C33F90002CF
-:1062800013200005000038218E0200149608001229
-:10629000ACC2001CA4C8001A0A0005432406000969
-:1062A0003C05080024A55A980E0002872404008BA0
-:1062B0008F90001C0011282B0A000362AF85002874
-:1062C000AF6000843C0A08008D4A5A983C0D0800D3
-:1062D0008DAD0050240CFF803C02000C014D1821B4
-:1062E000006C2024AF4400288E070014306B007F20
-:1062F000017A282100A2C821AF2700D88E060014F9
-:10630000AF9900D0AF2600DC8E080010251FFFFEDD
-:106310000A000408AF3F01083C0508008CA55A9804
-:106320003C1908008F39005024CCFFFE00B9C02171
-:1063300003047824AF4F00283C1408008E945A9828
-:106340003C0908008D2900500289702131CD007F61
-:1063500001BA502101478021AE0600D8AF9000D08D
-:10636000AE0000DC0A0003B1AE0C0108548CFE3014
-:10637000240540000A00043B240510000E00032EF3
-:10638000000000000A0003EB8F90001C8E0F442CCD
-:106390003C186C62370979703C010800AC205A98AF
-:1063A00015E9000824050140979F00349786002CCA
-:1063B0000280282103E6C82B132000112404009238
-:1063C000240501400E000C7A240400023C01080060
-:1063D000AC225A98AF4200203C0508008CA55A9880
-:1063E00010A00005240400830E00084500000000F2
-:1063F00010400009240400833C05080024A55A9895
-:106400000E000264000000008F90001C0011202B81
-:106410000A000362AF8400280E0008490000000053
-:106420000A00055F8F90001C0E00084D0000000060
-:106430003C05080024A55A980A00062F2404008B66
-:10644000240400040E000C7A240500301440002AB5
-:10645000004050218F89001C240700830140202127
-:106460008D25001C0A000551240600018E04000839
-:106470000E000241000000000A00051BAE82000869
-:106480003C05080024A55A980E00023C240400870D
-:106490008F90001C0A0005360011102B8F830038E6
-:1064A0008F8600301066FE9D000038213C070800F2
-:1064B00024E75A1C000320C0008728218CAC000070
-:1064C00011900061246A00013143000F5466FFFA05
-:1064D000000320C00A0004F6000038213C05080033
-:1064E00024A55A980E000287240400828F90001C75
-:1064F0000A000536000010213C0B0008034B202148
-:106500002403005024070001AF420020A0830000B4
-:10651000A08700018F82001C90480004A08800180A
-:106520008F85001C90A60005A08600198F9F001C77
-:1065300093F90006A099001A8F90001C921800078A
-:10654000A098001B8F94001C928F0008A08F001C45
-:106550008F89001C912E0009A08E001D8F8D001CBC
-:1065600091AC000AA08C001E8F8B001C3C0C080014
-:10657000258C5A1C9163000B3C0B0800256B5A18A4
-:10658000A083001F8F87001C90E8000CA0880020CB
-:106590008F82001C9045000D24024646A0850021F4
-:1065A0008F86001C90DF000EA09F00228F99001C98
-:1065B0009330000FA09000238F98001C93140010BC
-:1065C000A09400248F8F001C91E90011A089002560
-:1065D0008F89001C8F8E00308F900038952D00140D
-:1065E000000E18C025C80001A48D002895270016AC
-:1065F000006C3021006BC821A487002A9525001863
-:106600003108000FA485002CA482002E8D3F001CB1
-:10661000ACCA0000AF88003011100006AF3F000088
-:10662000000038218D25001C014020210A00055161
-:1066300024060001250C00013184000F00003821E0
-:106640000A0006B8AF8400383C07080024E75A184F
-:106650000087302100003821ACA000000A0004F6B9
-:10666000ACC000003C05080024A55A980A00062F7B
-:10667000240400878E0400040E0002410000000084
-:106680000A00056AAE8200083084FFFF30C600FFB2
-:106690008F4201B80440FFFE00064400010430258B
-:1066A0003C07200000C720253C031000AF400180BC
-:1066B000AF450184AF44018803E00008AF4301B84F
-:1066C00027BDFFE8AFB00010AFBF00143C0760006B
-:1066D000240600021080000600A080210010102B6C
-:1066E0008FBF00148FB0001003E0000827BD001812
-:1066F0003C09600EAD2000348CE5201C8F82001C0C
-:106700002408FFFC00A81824ACE3201C0E0006D1CE
-:106710008C45000C0010102B8FBF00148FB00010A0
-:1067200003E0000827BD00183C02600E344701005A
-:1067300024090018274A040000000000000000009F
-:10674000000000003C06005034C30200AF44003893
-:10675000AF45003CAF430030014018218F4B000093
-:10676000316800201100FFFD2406007F2408FFFF90
-:106770008C6C000024C6FFFF24630004ACEC000016
-:1067800014C8FFFB24E70004000000000000000024
-:10679000000000003C0F0020AF4F00300000000060
-:1067A00024AD020001A5702B2529FFFF008E2021BA
-:1067B0001520FFE101A0282103E0000800000000EF
-:1067C00027BDFFE0AFB10014AFBF0018AFB000109D
-:1067D0003C05600E8CA20034008088211440000625
-:1067E0003C0460008C87201C2408FFFC00E8302457
-:1067F00034C30001AC83201C8F8B001C24090001D2
-:10680000ACA90034956900028D6500148D70000CF0
-:106810002D2400818D6700048D660008108000071C
-:106820008D6A00102D2C00041580000E30CE00075C
-:10683000312D000311A0000B000000002404008B88
-:10684000020028210E0006D1240600030011102B9F
-:106850008FBF00188FB100148FB0001003E0000844
-:1068600027BD002015C0FFF62404008B3C03002048
-:10687000AF4300300000000024020001AF8200148A
-:106880000000000000000000000000003C1F01505C
-:10689000013FC825253800033C0F600EAF47003884
-:1068A00000181882AF46003C35E8003CAF59003074
-:1068B000274704008F4400003086002010C0FFFDF1
-:1068C00000000000106000082466FFFF2403FFFFA3
-:1068D0008CEB000024C6FFFF24E70004AD0B000092
-:1068E00014C3FFFB250800043C08600EAD09003806
-:1068F0000000000000000000000000003C07002035
-:10690000AF470030000000000E0006F901402021D2
-:1069100002002821000020210E0006D124060003D9
-:106920000011102B8FBF00188FB100148FB0001012
-:1069300003E0000827BD002027BDFFE0AFB200182C
-:106940003092FFFFAFB10014AFBF001CAFB000101A
-:106950001640000D000088210A0007AA022010211D
-:1069600024050001508500278CE5000C0000000D77
-:10697000262300013071FFFF24E200200232382B71
-:1069800010E00019AF82001C8F8200141440001622
-:106990008F87001C3C0670003C0320008CE5000043
-:1069A00000A62024148300108F84003C00054402BC
-:1069B0003C09800000A980241480FFE9310600FF13
-:1069C0002CCA00095140FFEB262300010006688015
-:1069D0003C0E080025CE579801AE60218D8B00003B
-:1069E0000160000800000000022010218FBF001C81
-:1069F0008FB200188FB100148FB0001003E00008B0
-:106A000027BD00200E0006D1240400841600FFD804
-:106A10008F87001C0A00078BAF80003C90EF0002BC
-:106A200000002021240600090E0006D1000F2E00D0
-:106A30008F87001C0010102B0A00078BAF82003CD0
-:106A4000020028210E0006DF240400018F87001CAD
-:106A50000A00078BAF82003C020028210E0006DFEF
-:106A6000000020210A0007C38F87001C0E00071FAB
-:106A7000020020210A0007C38F87001C30B0FFFFEF
-:106A8000001019C08F5801B80700FFFE3C1F2004FA
-:106A90003C191000AF430180AF400184AF5F018813
-:106AA000AF5901B80A00078C262300013082FFFF8E
-:106AB00014400003000018210004240224030010E5
-:106AC000308500FF14A000053087000F2466000801
-:106AD0000004220230C300FF3087000F14E00005DD
-:106AE000308900032468000400042102310300FF00
-:106AF0003089000315200005388B0001246A00024C
-:106B000000042082314300FF388B00013164000112
-:106B100010800002246C0001318300FF03E00008B4
-:106B200000601021308BFFFF000B394230E600FF80
-:106B30003C09080025295998000640800109602178
-:106B40008D8700003164001F240A0001008A1804A8
-:106B500030A500FF00E3202514A000020003102749
-:106B600000E22024240F000100CF700401096821F5
-:106B7000000E282714800005ADA400008F86000CAD
-:106B800000A6102403E00008AF82000C8F88000CE0
-:106B900001C8102503E00008AF82000C3C06001F6E
-:106BA0003C0360003084FFFF34C5FF8024020020D6
-:106BB000AC602008AC60200CAC602010AC652014E8
-:106BC000AC642018AC62200000000000000000004F
-:106BD00003E000080000000027BDFFE82402FFFFDB
-:106BE000AFBF0010AF82000C000020213C0608005F
-:106BF00024C659982405FFFF248900010004408021
-:106C00003124FFFF010618212C87002014E0FFFA31
-:106C1000AC6500000E0008160000202124020001CF
-:106C20003C04600024050020AC822018AC852000C4
-:106C3000000000000000000000000000244A0001E5
-:106C40003142FFFF2C46040014C0FFF78FBF001035
-:106C500003E0000827BD00188F8300082C620400A1
-:106C600003E00008384200018F830008246200011D
-:106C700003E00008AF8200088F8300082462FFFF52
-:106C800003E00008AF82000827BDFFE0AFB10014A9
-:106C9000AFBF0018AFB000108F6B00303C06600033
-:106CA00000808821ACCB20088F6A002C3C02800039
-:106CB00024030008ACCA200C9769003A9768003892
-:106CC00000092C003107FFFF00A72025ACC42010CD
-:106CD000ACC22014ACC32000000000000000000083
-:106CE000000000003C0360008C6D200031AC000807
-:106CF0001580FFF9000000008C6E201405C00020F4
-:106D0000000000000E0007DA8F84000C00024080B3
-:106D10003C09080025295998010938218CE4000014
-:106D20000E0007DA00028140020220213090FFFFAE
-:106D3000020020210E0007F8000028213C0C8000F2
-:106D4000022C58253210FFFF3C116000240A00205D
-:106D5000AE2B2014AE302018AE2A20000000000018
-:106D60000000000000000000020010218FBF00188A
-:106D70008FB100148FB0001003E0000827BD002081
-:106D80008C6620143C02001F3443FF803C1FFFE848
-:106D900000C3C02437F9080003198021001079C20C
-:106DA0003C0C8000022C582531F0FFFF3C116000A4
-:106DB000240A0020AE2B2014AE302018AE2A20006A
-:106DC0000000000000000000000000000200102190
-:106DD0008FBF00188FB100148FB0001003E00008BF
-:106DE00027BD002027BDFFE8AFB000103402FFFF31
-:106DF0003090FFFFAFBF00141202000602002021F6
-:106E00000E00081600000000020020210E0007F806
-:106E1000240500018F8400088FBF00148FB000107C
-:106E20002483FFFF27BD001803E00008AF8300089C
-:106E3000000439C230E6003F00043B42000718401E
-:106E4000240210002CC4002024C8FFE0AF42002C14
-:106E5000246300011480000330A900FF00071840DC
-:106E6000310600FF0003608024080001019A5821C8
-:106E70003C0A000E00C82804016A382111200005D0
-:106E8000000530278CE900000125302503E00008CB
-:106E9000ACE600008CEE000001C6682403E00008A8
-:106EA000ACED000027BDFFE8AFBF0014AFB000108D
-:106EB0003C0460008C8508083403F00030A2F00028
-:106EC00050430006240200018C8708083404E000C7
-:106ED00030E6F00010C4001E24020002AF82004021
-:106EE0003C1060003C0A0200AE0A0814240910009D
-:106EF0003C08000E8E03440003482021AF49002CBB
-:106F0000240501200E000CC0000030218F830040BA
-:106F1000106000043C021691240B0001106B000E5F
-:106F20003C023D2C344F0090AE0F44088FBF00143C
-:106F30008FB000103C0C6000240E10003C0D0200CD
-:106F400027BD0018AD8E442003E00008AD8D081069
-:106F50000A0008E7AF8000403C0218DA344F009086
-:106F6000AE0F44088FBF00148FB000103C0C6000BF
-:106F7000240E10003C0D020027BD0018AD8E4420E9
-:106F800003E00008AD8D08100A0008BB24050001CD
-:106F90000A0008BB000028213C08080025085DA461
-:106FA0002404FFFF010018212402001E2442FFFFD9
-:106FB000AC6400000441FFFD246300043C070800AA
-:106FC00024E75E208CE5FFFC2404001C240600015D
-:106FD000308A001F0146480424840001000910275C
-:106FE0002C8300201460FFFA00A22824ACE5FFFCEB
-:106FF0003C05666634A4616E3C06080024C65EE06B
-:10700000AF840058AF88009C2404FFFF00C0182103
-:107010002402001F2442FFFFAC6400000441FFFD76
-:10702000246300043C0766663C05080024A55EA0B6
-:10703000AF86004834E6616EAF8600982404FFFFF7
-:1070400000A018212402000F2442FFFFAC640000BE
-:107050000441FFFD246300043C0B66663C06080007
-:1070600024C65E203568616EAF8500A4AF880070CD
-:107070002404FFFF00C018212402001F2442FFFF48
-:10708000AC6400000441FFFD246300043C0D66660F
-:107090003C0A0800254A5F6035AC616EAF860090FF
-:1070A000AF8C005C2404FFFF014018212402000380
-:1070B0002442FFFFAC6400000441FFFD2463000490
-:1070C0003C09080025295F708D27FFFC2404000679
-:1070D000240500013099001F0325C0042484000109
-:1070E000001878272C8E002015C0FFFA00EF3824F6
-:1070F000AD27FFFC3C09666624030400240403DC7E
-:1071000024050200240600663522616E3C08080052
-:1071100025085AA4AF820074AF830044AF83006C8B
-:10712000AF830050AF830084AF8A008CAF840064CB
-:10713000AF85004CAF860054AF840078AF85006007
-:10714000AF86008001001821240200022442FFFFC4
-:10715000AC6000000441FFFD24630004240400032C
-:107160002403000C3C0A0800254A5AB0AF8A006884
-:107170000A00098E2405FFFF000418802484000102
-:10718000006858212C8700C014E0FFFBAD650000AB
-:107190003C0E666635CD616E240C17A024081800DD
-:1071A000AF8D0088AF8C009403E00008AF88007CAE
-:1071B0002484007F000421C200004021000030210F
-:1071C00000003821000028210A0009A5AF8400A092
-:1071D0001060000624E7000100C4302124A500014E
-:1071E0002CC20BF51440FFFA2CA300663C090800E2
-:1071F00025295F6001201821240200032442FFFF9B
-:10720000AC6000000441FFFD2463000410E0001A9C
-:1072100024E3FFFF0003294210A0000A0000202100
-:107220002406FFFF3C03080024635F602484000100
-:107230000085502BAC660000250800011540FFFBBF
-:107240002463000430E2001F10400008000868803A
-:10725000240C0001004C38040008588001692821E2
-:1072600024E6FFFF03E00008ACA6000001A94021CE
-:107270002409FFFFAD09000003E000080000000042
-:10728000AF4400283C04000C034420210005288260
-:107290000A000CC000003021000421803C03600083
-:1072A000AC6410080000000000052980AC65100CDB
-:1072B0000000000003E000088C62100C27BDFFE80E
-:1072C0000080282124040038AFBF00140E0009D527
-:1072D000AFB0001024040E00AF4400283C10000C96
-:1072E00003502021240500100E000CC000003021A6
-:1072F00003501021AC400000AC40000424040038CE
-:107300008FBF00148FB0001024053FFF27BD001869
-:107310000A0009D58C430000000421803C03600072
-:10732000AC641008000000008C62100C03E0000840
-:107330000002118227BDFFC8AFB400208F940068FF
-:10734000AFBE0030AFB7002CAFB600280000B821A8
-:107350000080B021241E00C0AFBF0034AFB50024B0
-:10736000AFB3001CAFB20018AFB10014AFB0001043
-:107370000A000A12AFA5003C504000018F9400683B
-:1073800027DEFFFF13C00028269400048E92000021
-:107390003C03080024635DA01240FFF70283102B1A
-:1073A0003C04080024845AA4028410230002A8C0CC
-:1073B000000098210A000A212411000100118840D0
-:1073C000122000260000000002B380210251282470
-:1073D0000200202110A0FFF9267300010E0009DE33
-:1073E000000000000016684032EC000101AC2021D2
-:1073F0000E0009D5020028218F89009426F700018C
-:107400008FA6003C3AEB0001316A00012528FFFFFE
-:107410000011382702CAB021AF88009416E6FFE7B2
-:1074200002479024AE92000002E010218FBF00348A
-:107430008FBE00308FB7002C8FB600288FB5002488
-:107440008FB400208FB3001C8FB200188FB10014CE
-:107450008FB0001003E0000827BD00383C0E080084
-:1074600025CE5DA0028E102B0A000A0DAE92000000
-:1074700027BDFFD8AFB10014AFB00010AFBF0020E0
-:10748000AFB3001CAFB2001800A0882110A0001FED
-:10749000000480403C13080026735AA40A000A5ACC
-:1074A0002412000112200019261000010E0009F517
-:1074B00002002021000231422444FFA0000618806F
-:1074C0003045001F2C8217A1007318212631FFFFC1
-:1074D0001040FFF400B230048C690000020020214B
-:1074E00024053FFF012640241500FFEE0126382524
-:1074F0000E0009D5AC6700008F8A009426100001A9
-:10750000254700011620FFE9AF8700948FBF0020B8
-:107510008FB3001C8FB200188FB100148FB0001011
-:1075200003E0000827BD00288F85009C00805821BB
-:107530000000402100004821240A001F3C0C0800E4
-:10754000258C5E1C3C0D080025AD5DA48CA60000BA
-:1075500050C000140000402100AD1023000238C0CC
-:10756000240300010A000A930000202115000003F3
-:1075700000E410212448202400004821252900018E
-:10758000512B00132506DFDC106000062484000167
-:1075900000C3702415C0FFF5000318400A000A91CB
-:1075A0000000402110AC002624A300040060282124
-:1075B000254AFFFF1540FFE5AF85009C512B0004D5
-:1075C0002506DFDC0000402103E000080100102157
-:1075D0000006614230C5001F000C50803C070800C7
-:1075E00024E75DA424040001014730211120000F8D
-:1075F00000A420043C05080024A55E20148000059A
-:107600002529FFFF24C6000410C50011000000005A
-:10761000240400018CCF00000004C0270004204097
-:1076200001F868241520FFF5ACCD00008F99007893
-:1076300001001021032B482303E00008AF890078E4
-:107640003C05080024A55DA40A000A9B0000402117
-:107650003C06080024C65DA40A000AB42404000104
-:10766000308800FF240200021102000A24030003F4
-:107670001103005C8F8900A4240400041104005F3E
-:1076800024050005110500670000182103E000082B
-:10769000006010218F8900483C0C0800258C5EE0BA
-:1076A0003C04080024845F60240300201060000F65
-:1076B00000005821240D0002240E00033C0F080096
-:1076C00025EF5EE08D27000014E0000B30F9FFFF8E
-:1076D000252900040124C02B53000001018048210A
-:1076E0002463FFFF5460FFF88D270000016018211C
-:1076F00003E0000800601021132000323C0500FF69
-:1077000030E200FF004030211040004200005021D4
-:1077100024050001000020210005C84000A6C02467
-:1077200017000003332500FF14A0FFFB2484000191
-:10773000012CC023001828C000AA6021008C502111
-:107740003144001F240C0001008C18040003102792
-:1077500000E23024110D0041AD260000110E004C56
-:10776000000A1840110D00368F87006C510E00562C
-:107770008F8C0060240D0004110D005A8F8E008440
-:10778000240E0005150EFFDA01601821240B1430B9
-:1077900011400006000018218F8400A0246300011E
-:1077A000006A402B1500FFFD016458218F8A00807C
-:1077B000AF89008C016018212549FFFF0A000AEB00
-:1077C000AF89008000E52024000736021080FFD03A
-:1077D000240A001800075402314600FF0A000AF389
-:1077E000240A00103C0C0800258C5EA03C04080014
-:1077F00024845EE00A000ADA240300103C0C08002E
-:10780000258C5E203C04080024845EA00A000AD96E
-:107810008F89009000071A02306600FF0A000AF301
-:10782000240A00088F89008C3C0C0800258C5F60BE
-:107830003C04080024845F700A000ADA2403000470
-:10784000000A4080250B003024E6FFFF016018216C
-:10785000AF8900480A000AEBAF86006C000AC982B3
-:10786000001978803C07080024E75EA001E720218A
-:10787000000A18428C8F00003079001F032C380456
-:107880000007C02701F860240A000B08AC8C000038
-:10789000000331420006288000AF28213062001F1B
-:1078A0008CB8000024630001004CC804000321428E
-:1078B000001938270004108003073024004F2021CE
-:1078C0000A000B4CACA60000000A68C025AB0032D1
-:1078D000258AFFFF01601821AF8900A40A000AEB86
-:1078E000AF8A0060254B1030AF89009001601821ED
-:1078F00025C9FFFF0A000AEBAF8900843086000724
-:107900002CC2000610400014000000000006408059
-:107910003C030800246357BC010338218CE40000B9
-:1079200000800008000000002409000310A9000ED8
-:1079300000000000240A000510AA000B000000004F
-:10794000240B000110AB0008000000008F8C00A089
-:1079500010AC00050000000003E00008000010214A
-:107960000A000A7900A020210A000AC700C02021CD
-:1079700027BDFFE8308400FF240300021083000BC2
-:10798000AFBF0010240600031086003A240800044C
-:1079900010880068240E0005108E007F2CAF143074
-:1079A0008FBF001003E0000827BD00182CA2003094
-:1079B0001440FFFC8FBF001024A5FFD0000531C28A
-:1079C000000668803C07080024E75EE001A730213C
-:1079D0008CC900000005288230AC001F240B000178
-:1079E000018B50048F840048012A4025ACC8000058
-:1079F0008C83000050600001AF8600488F98006CB7
-:107A000030AE000124A6FFFF270F000115C00002C1
-:107A1000AF8F006C24A600010006414200082080C0
-:107A2000008718218C79000030C2001F2406000155
-:107A30000046F804033F382410E0FFDA8FBF00103F
-:107A40000005C182001870803C0F080025EF5EA081
-:107A500001CF48218D2B00000005684231A5001F91
-:107A600000A66004016C502527BD001803E0000843
-:107A7000AD2A00002CA7003014E0FFCA8FBF001011
-:107A800030B900071723FFC724A8FFCE00086A02F9
-:107A9000000D60803C0B0800256B5EA0018B30213F
-:107AA0008CC40000000828C230AA001F240800016E
-:107AB000014848048F8200A400891825ACC3000047
-:107AC0008C5F000053E00001AF8600A40005704009
-:107AD000000E7942000F28803C04080024845EE0F8
-:107AE00000A418218C6B000025DF000131CD001FA0
-:107AF000001F514201A86004016C4825000A108053
-:107B0000AC690000004428218CA600008F9800601A
-:107B100033F9001F8FBF00100328380400C77825F1
-:107B2000270E000127BD0018ACAF000003E00008DD
-:107B3000AF8E006024A5EFD02CB804001300FF998D
-:107B40008FBF001000053142000658803C0A080033
-:107B5000254A5E20016A30218CC4000030A3001F3A
-:107B600024090001006910048F9900900082F82513
-:107B7000ACDF00008F27000050E00001AF860090CE
-:107B80008F8D00848FBF001027BD001825AC000129
-:107B900003E00008AF8C008415E0FF828FBF001067
-:107BA0008F8600A0000610400046F821001F21002B
-:107BB00003E4C8210019384024F8143000B8402BE1
-:107BC0001100FF788FBF001024A4EBD00E00021329
-:107BD00000C0282100027942000F70803C0D08008F
-:107BE00025AD5F6001CD20218C8B0000304C001F43
-:107BF00024060001018618048F89008C016350253A
-:107C0000AC8A00008D25000050A00001AF84008CDC
-:107C10008F9800808FBF001027BD00182708000133
-:107C200003E00008AF88008030A5000724030003AC
-:107C300010A3001028A2000414400008240700022A
-:107C40002403000410A300152408000510A8000F49
-:107C50008F8500A003E000080000000014A7FFFDCE
-:107C60000080282114C3FFFB240400020A000B8BB0
-:107C700000000000240900050080282110C9FFFB36
-:107C80002404000303E000080000000014C5FFF115
-:107C9000008028210A000B8B24040005240A00011F
-:107CA0000080282110CAFFF12404000403E000082A
-:107CB0000000000027BDFFE0AFB00010000581C24A
-:107CC0002603FFD024C5003F2C6223D024C6007FAA
-:107CD000AFB20018AFB10014AFBF001C309100FF6D
-:107CE000000691C2000529820200202110400008F0
-:107CF0002403FFFF0E000A4B0000000002002021B9
-:107D0000022028210E000C390240302100001821E9
-:107D10008FBF001C8FB200188FB100148FB00010FD
-:107D20000060102103E0000827BD002027BDFFD818
-:107D300024A2007FAFB3001CAFB20018000299C2AA
-:107D4000309200FF24A3003F02402021026028213E
-:107D5000AFB10014AFB00010AFBF00200E000B6E2B
-:107D60000003898200408021004020210220282138
-:107D700014400009000018218FBF00208FB3001CA1
-:107D80008FB200188FB100148FB000100060102166
-:107D900003E0000827BD00280E0009FC00000000D9
-:107DA00000402821020020211051FFF3001019C0CB
-:107DB0000E000A4B00000000020020210240282192
-:107DC0000E000C39026030218FBF00208FB3001CE1
-:107DD0008FB200188FB100148FB00010000018216E
-:107DE0000060102103E0000827BD00283084FFFF59
-:107DF00030A5FFFF1080000700001821308200012D
-:107E00001040000200042042006518211480FFFB8E
-:107E10000005284003E000080060102110C00007A2
-:107E2000000000008CA2000024C6FFFF24A500046F
-:107E3000AC82000014C0FFFB2484000403E00008AF
-:107E40000000000010A0000824A3FFFFAC86000083
-:107E500000000000000000002402FFFF2463FFFF79
-:107E60001462FFFA2484000403E00008000000000C
-:107E700030A5FFFF8F4201B80440FFFE3C076015AC
-:107E800000A730253C031000AF440180AF400184BF
-:107E9000AF46018803E00008AF4301B88F8500D0EA
-:107EA0002C864000008018218CA700840087102BAE
-:107EB00014400010000000008CA800842D06400033
-:107EC00050C0000F240340008CAA0084008A482B75
-:107ED000512000018CA3008400035A42000B208033
-:107EE0003C05080024A558200085182103E000085F
-:107EF0008C62000014C0FFF4000000002403400066
-:107F000000035A42000B20803C05080024A558209D
-:107F10000085182103E000088C6200008F8300D0E8
-:107F2000906600D024C50001A06500D08F8500D0E8
-:107F3000906400D090A200D210440017000000000E
-:107F4000936C00788F8B00BC318A00FFA16A000C13
-:107F500025490001938700C4312200FF3048007F8B
-:107F60001107000B00026827A36200788F4E01788A
-:107F700005C0FFFE8F9900B0241800023C0F1000CE
-:107F8000AF590140A358014403E00008AF4F017806
-:107F90000A000D0931A20080A0A000D00A000CFF49
-:107FA000000000008F8700D027BDFFC8AFBF0030A2
-:107FB000AFB7002CAFB60028AFB50024AFB4002097
-:107FC000AFB3001CAFB20018AFB10014AFB00010D7
-:107FD00094E300E094E200E2104300D72405FFFFA1
-:107FE0003C047FFF3497FFFF2415FF800A000DF04B
-:107FF0003C16000E108A00D18FBF00308F9100B068
-:108000003C1808008F18005C001230C0001291402C
-:108010000311702101D57824AF4F002C94EC00E2BD
-:1080200031CD007F01BA5821318A7FFF0176482186
-:10803000000A804002091021945300003C08080007
-:108040008D0800580246C02132733FFF001319808B
-:10805000010320210224282130BF007F03FAC82118
-:1080600000B5A024AF54002C0336A0218E87001049
-:108070008E8F003003785821256D008800EF702323
-:10808000240C0002AE8E0010AF8D00ACA16C0088F5
-:10809000976A003C8E8400308F9100AC0E000CD6A5
-:1080A0003150FFFF00024B80020940253C02420094
-:1080B00001022025AE2400048E8300048F8D00ACC5
-:1080C0008E860000240E0008ADA3001CADA600188B
-:1080D000ADA0000CADA00010929F000A33F900FF84
-:1080E000A5B90014968500083C1F000CA5A5001634
-:1080F0009298000A331100FFA5B100209690000865
-:1081000024180005A5B00022ADA00024928F000B1A
-:108110002410C00031E700FFA5A70002A1AE0001B6
-:108120008E8C00308F8B00AC8F8400B0AD6C00085B
-:108130003C0A08008D4A005401444821013540247E
-:10814000AF4800283C0208008C4200540044302113
-:1081500030C3007F007AC821033F282102458821CF
-:10816000AF9100BCAF8500C0A23800008F8A00BC70
-:108170002403FFBF2418FFDF954F000201F03824CD
-:1081800000F37025A54E0002914D000231AC003F76
-:10819000358B0040A14B00028F8600BC8F8900D038
-:1081A000ACC000048D28007C3C098000ACC80008ED
-:1081B00090C4000D3082007FA0C2000D8F8500BCEE
-:1081C00090BF000D03E3C824A0B9000D8F9100BC3F
-:1081D0009233000D02789024A232000D8E9000346C
-:1081E0008F8B00BCAD7000108E87002C8E8F0030FE
-:1081F00000EF7023AD6E0014916D001831AC007F5C
-:10820000A16C00188F9F00BC8E8A00308FE8001888
-:10821000015720240109302400C41025AFE20018C2
-:108220009283000AA3E3001C969900088F8500BC86
-:108230008F9800D0A4B9001E8E9000308E8400303C
-:108240000E0002138F0500848F8500D0000291403C
-:108250000002990090AF00BC0253882100403021F9
-:1082600031E7000210E0000302118021000290803B
-:108270000212802190B900BC3327000410E00002F4
-:108280000006F880021F80218E9800308F8B00BC82
-:1082900024068000330F0003000F702331CD00034C
-:1082A000020D6021AD6C000494A400E294AA00E2E7
-:1082B00094B000E231497FFF2522000130537FFF57
-:1082C0000206182400734025A4A800E294A400E24A
-:1082D0003C1408008E94006030917FFF123400221D
-:1082E000000000000E000CF6000000008F8700D098
-:1082F0000000282194F300E094F000E21213000F34
-:108300008FBF003090E900D090E800D1313200FFFB
-:10831000310400FF0244302B14C0FF36264A00010E
-:1083200090EE00D2264B000131CD00FF008D602180
-:10833000158BFF338F9100B08FBF00308FB7002CAB
-:108340008FB600288FB500248FB400208FB3001C97
-:108350008FB200188FB100148FB0001000A0102150
-:1083600003E0000827BD003894A300E20066402423
-:10837000A4A800E290A400E290B900E2309100FFCE
-:108380000011A1C20014F827001F39C03332007F4A
-:10839000024730250A000DE8A0A600E23084FFFF66
-:1083A00030A5FFFFAF440018AF45001C03E00008F4
-:1083B0008F42001427BDFFB8AFB000208F9000D0CF
-:1083C0003084FFFFAFA40010AFBF0044AFBE004039
-:1083D000AFB7003CAFB60038AFB50034AFB4003033
-:1083E000AFB3002CAFB20028AFB10024A7A0001893
-:1083F000920600D1920500D030C400FF30A300FFE8
-:108400000064102B10400122AFA00014920900D08C
-:108410008FB50010312800FF0088382324F4FFFFB7
-:108420000014882B0015982B02339024524001260B
-:108430008FB40014961E0012961F00108FB7001004
-:1084400003DFC823001714000019C400000224032E
-:108450000018140302E2B02A52C00001004020219B
-:108460000284282B10A0000200801821028018210D
-:1084700000033C0000071C033064FFFF2C8600094A
-:1084800014C000020060B821241700088E0A0008FA
-:10849000001769808E09000C31ABFFFF3C0C001007
-:1084A000016C402527520400AF4A0038AF9200B853
-:1084B000AF49003CAF480030000000000000000061
-:1084C00000000000000000000000000000000000AC
-:1084D00000000000000000008F4F000031EE00207F
-:1084E00011C0FFFD0017982A027110240A000E83A4
-:1084F0000000B02155E001019258000131130080C5
-:10850000126001CF012020219655001232A5FFFFF5
-:108510000E000CCBA7B500188F9000D00291A023BD
-:1085200026CD00018F9100B8000DB4000016B403F1
-:108530002638004002D7582A0014882B2405000151
-:108540000300902101711024AF9800B8AFA500146A
-:10855000104001BC8F8900B03C0C08008D8C005489
-:10856000240BFF80921E00D001895021014B28244A
-:10857000921900D0AF4500288E4700103C08080033
-:108580008D0800583C1808008F18005430E33FFF56
-:108590000003218001043021012658212402FF809C
-:1085A0000162F824920C00D0AF5F002C92480000CA
-:1085B00033D100FF333500FF0309982100117140CA
-:1085C000001578C0326D007F01CF382101BA282113
-:1085D000318300FF3164007F3C0A000C00AA88212F
-:1085E0000367F02100033140009A10213108003F59
-:1085F0003C1F000E00D1C021005F982127D90088C0
-:108600002D150008AF9100C0AF9900ACAF9800BC29
-:10861000AF9300B412A0018A00008821240E00014B
-:10862000010E4004310D005D11A0FFB2310F0002B8
-:108630008E4A00283C0300803C04FFEFAE6A000035
-:108640008E450024A260000A3488FFFFAE65000456
-:108650009247002C3C1FFF9F37FEFFFFA267000CD4
-:108660008E62000C3C180040A267000B00433025CE
-:1086700000C8C824033E88240238A825AE75000C23
-:108680008E490004AE6000183C0F00FFAE69001474
-:108690008E4D002C35EEFFFF8F8B00B001AE6024B5
-:1086A000AE6C00108E470008A660000896450012C8
-:1086B000AE6700208E42000C30B03FFF00105180AA
-:1086C000AE6200248E5E0014014B182130A400011C
-:1086D000AE7E00288E590018000331C2000443808A
-:1086E000AE79002C8E51001C00C8F821A67F001C1A
-:1086F000AE710030965800028E550020A678001EFC
-:10870000AE75003492490033313000045600000544
-:10871000925000008F8C00D08D8B007CAE6B0030AF
-:10872000925000008F8F00BCA1F00000924E0033E9
-:1087300031CD000251A00007925E00018F8900BC7C
-:108740002418FF80913100000311A825A1350000F5
-:10875000925E00018F9900BC2409FFBF240BFFDF4C
-:10876000A33E00018F9500BC92B8000D3311007F2D
-:10877000A2B1000D8F8E00BC91D0000D02097824AB
-:10878000A1CF000D8F8800BC8E6D0014910A000DE2
-:108790002DAC0001000C2940014B382400E51825C0
-:1087A000A103000D964200128F8800BC8F8700D075
-:1087B000A50200028E45000490FF00BC30A4000317
-:1087C0000004302330DE000300BE102133F9000224
-:1087D00017200002244400342444003090E200BCFE
-:1087E00000A2302430DF000417E0000224830004DC
-:1087F000008018218F8F00AC24090002AD03000413
-:10880000A1E90000924E003F8F8D00ACA1AE0001A7
-:108810008F9500AC924C003F8E440004A6AC000241
-:10882000976B003C0E000CD63170FFFF00025380A6
-:10883000020A38253C05420000E51825AEA30004D5
-:108840008F8600AC8E480038ACC800188E440034C7
-:10885000ACC4001CACC0000CACC00010A4C0001420
-:10886000A4C00016A4C00020A4C00022ACC00024F4
-:108870008E6400145080000124040001ACC4000880
-:108880000E000CF6241100010A000E768F9000D025
-:10889000920F00D2920E00D08FB5001031EB00FF86
-:1088A00031CD00FF008D6023016C50212554FFFF66
-:1088B0000014882B0015982B023390241640FEDDFF
-:1088C000000000008FB400148FBF00448FBE004032
-:1088D0003A8200018FB7003C8FB600388FB5003464
-:1088E0008FB400308FB3002C8FB200288FB10024DA
-:1088F0008FB0002003E0000827BD0048331100209E
-:10890000122000EF24150001921E00BC241F00015C
-:108910000000A82133D900011320000DAFBF001CB7
-:108920008E4400148E0800840088102B144000022E
-:10893000008030218E0600848E03006400C3A82BC3
-:1089400016A0000200C020218E0400640080A8212F
-:108950008E4700148E05006400E5302B14C0000221
-:1089600000E020218E0400640095F02313C0000471
-:108970008FAC001C240A0002AFAA001C8FAC001CA4
-:10898000028C582B156000A8000018218E4F00386B
-:108990008E6D000C3C0E0080AE6F00008E4A0034DD
-:1089A0003C10FF9F01AE5825AE6A00049246003F7E
-:1089B000360CFFFF016C38243C0500203C03FFEF20
-:1089C000A266000B00E510253468FFFF8F8700B812
-:1089D0000048F8243C04000803E4C825AE79000CE4
-:1089E0008CF80014AE60001802BE7821AE78001436
-:1089F0008CF10018AE71001C8CE90008AE690024EF
-:108A00008CEE000CAE6F002CAE600028AE6E002025
-:108A1000A6600038A660003A8CED001401B58023F2
-:108A2000021E902312400011AE72001090EA003D29
-:108A30008E6500048E640000000A310000A6C82183
-:108A4000000010210326402B0082F82103E8C021FA
-:108A5000AE790004AE78000090F1003DA271000AEA
-:108A60008F8900B895320006A67200088F9800AC76
-:108A70002419000202A02021A31900009769003CDC
-:108A80008F9200AC0E000CD63131FFFF00027B80CC
-:108A90008F8500B8022F68253C0E420001AE80256C
-:108AA000AE5000048F8400AC8CAC0038AC8C001845
-:108AB0008CAB0034AC8B001CAC80000CAC80001084
-:108AC000A4800014A4800016A4800020A4800022AA
-:108AD000AC80002490A7003FA487000212A00135BB
-:108AE0002403000153C0000290A2003D90A2003E6A
-:108AF00024480001A08800018F9F00ACAFF500085A
-:108B00008F8300D024070034906600BC30C500027B
-:108B100050A00001240700308F9200B88F8A00BC5B
-:108B2000906D00BC924B00002412C00032A50003DF
-:108B3000A14B00008F8600B88F8800BC240200047F
-:108B400090C400010045182330790003A1040001FE
-:108B50008F8A00BC8F9F00B800F53821955800021D
-:108B600097E9001200F9382103128824312F3FFFC2
-:108B7000022F7025A54E00029150000231A800047A
-:108B8000320C003F358B0040A14B000212A00002C6
-:108B90008F8500BC00E838218F8E00D0ACA7000480
-:108BA000240BFFBF8DCD007C2EA400012403FFDF2A
-:108BB000ACAD000890B0000D00044140320C007FC5
-:108BC000A0AC000D8F8600BC90CA000D014B102494
-:108BD000A0C2000D8F8700BC90E5000D00A3F82413
-:108BE00003E8C825A0F9000D8F9100B88F8D00BC57
-:108BF0008E380020ADB800108E290024ADA90014D5
-:108C00008E2F0028ADAF00188E2E002C0E000CF613
-:108C1000ADAE001C8FB0001C240C0002120C00EE44
-:108C20008F9000D08FA3001C006088211460000288
-:108C30000060A8210000A02156A0FE390291A023C7
-:108C40000014882B8FA90010960700103C1E0020EE
-:108C50000136402302C750213112FFFFA60A00103F
-:108C6000AFB20010AF5E0030000000009617001099
-:108C7000961300121277008F000000008E05000C82
-:108C80008E0B00080016698000AD7021000DC7C36F
-:108C900001CDA82B0178782101F56021AE0E000CE2
-:108CA000AE0C00088FB300100013B82B02378024DD
-:108CB0001200FF048F9000D00A000E3C000000005C
-:108CC0008E4D0038A6600008240B0003AE6D000036
-:108CD0008E500034A260000A8F9800B8AE70000475
-:108CE0003C0500809311003FA26B000C8E6F000CBE
-:108CF0003C0EFF9FA271000B01E5102535CCFFFF54
-:108D00003C03FFEF8F9200B8004C30243464FFFF27
-:108D100000C4F824AE7F000C8E590014964800124F
-:108D20008F8A00B0AE7900108E490014AE60001832
-:108D3000AE600020AE690014AE6000248E470018BB
-:108D400031093FFF0009F180AE6700288E4D000811
-:108D500003CA802131180001AE6D00308E4F000C27
-:108D60008F8C00AC001089C200185B80022B282178
-:108D7000240E0002A665001CA6600036AE6F002C13
-:108D8000A18E00009763003C8F8A00AC3C04420037
-:108D90003062FFFF00443025AD4600048F9F00B8CD
-:108DA000240700012411C0008FF30038240600348A
-:108DB000AD5300188FF90034AD59001CAD40000CC4
-:108DC000AD400010A5400014A5400016A5400020AD
-:108DD000A5400022AD400024A5550002A147000196
-:108DE0008F9E00AC8F8800B88F9200BCAFD5000872
-:108DF000910D0000A24D00008F9000B88F8B00BC39
-:108E000092180001A17800018F8400BC94850002B3
-:108E100000B1782401E97025A48E0002908C000234
-:108E20003183003FA08300028F8300D08F8400BC79
-:108E3000906200BC305300025260000124060030F2
-:108E4000AC8600048C6F007C2403FFBF02A0882145
-:108E5000AC8F0008908E000D31CC007FA08C000DEF
-:108E60008F8600BC90C2000D00432024A0C4000DDA
-:108E70008F8900BC913F000D37F90020A139000D0A
-:108E80008F8800B88F9300BC8D070020AE6700105C
-:108E90008D0A0024AE6A00148D1E0028AE7E0018D4
-:108EA0008D12002C0E000CF6AE72001C0A00103D54
-:108EB0008F9000D0960E00148E03000431CCFFFF7B
-:108EC000000C10C000622021AF44003C8E1F000443
-:108ED0008F46003C03E6C8231B20003C0000000036
-:108EE0008E0F000025E200013C05001034B500089B
-:108EF000AF420038AF550030000000000000000015
-:108F00000000000000000000000000000000000061
-:108F100000000000000000008F580000330B00200C
-:108F20001160FFFD000000008F5304003C0D002085
-:108F3000AE1300088F570404AE17000CAF4D00307D
-:108F4000000000003C0608008CC600442416000106
-:108F500010D600BD00000000961F00123C0508005E
-:108F60008CA5004000BFC821A61900129609001464
-:108F700025270001A6070014960A00143144FFFFBC
-:108F80005486FF498FB30010A60000140E000E1681
-:108F900030A5FFFF3C0408008C84002496030012D7
-:108FA0000044102300623023A60600120A00105964
-:108FB0008FB30010A08300018F8200AC2404000155
-:108FC000AC4400080A000FF08F8300D08E0200002E
-:108FD0000A0010EA3C0500108F8200C08FA7001C19
-:108FE000921800D0920B00D0920E00D0331100FFE7
-:108FF000316900FF00117940000928C001E56021B6
-:1090000031C300FF036C50210003314000C2C8216E
-:10901000255F0088AF9F00ACAF9900BCA1470088D6
-:109020009768003C03C020218F9100AC0E000CD645
-:109030003110FFFF00026B80020DC0253C0442008E
-:109040008F8D00B803045825AE2B00048DA900387D
-:109050008F8B00AC0000882100118100AD690018E1
-:109060008DAF00343C087FFF3504FFFFAD6F001C5F
-:1090700091AC003E8D65001C8D660018000C190037
-:10908000000C770200A33821020E102500E3F82B14
-:1090900000C2C821033F5021AD67001CAD6A001813
-:1090A000AD60000CAD60001091B8003E24050005D5
-:1090B00003C45024A578001495A9000403C02021FE
-:1090C000A569001691AF003EA56F002095B1000480
-:1090D000A5710022AD60002491AE003FA56E000294
-:1090E00091B0003E91AC003D01901023244300015B
-:1090F000A16300018F8600AC8F9F00BCACDE00082E
-:10910000A3E500008F9000BC8F9900B82405FFBF35
-:1091100096070002973800120247782433093FFF70
-:1091200001E98825A6110002921200022418FFDF2F
-:10913000324E003F35CD0040A20D00028F8600BCAC
-:109140008F8C00D02412FFFFACC000048D8B007CFC
-:109150003C0C8000ACCB000890C2000D3043007F77
-:10916000A0C3000D8F8700BC90FF000D03E5C8244D
-:10917000A0F9000D8F9100BC9229000D01387824D0
-:10918000A22F000D8F9000BCAE120010AE1500147F
-:10919000920E00182415FF8002AE6825A20D00185B
-:1091A0008F8500BC8F8300B88CAB0018016C102435
-:1091B000004A3025ACA600189068003EA0A8001C0C
-:1091C0008F9F00B88F8700BC8F9800D097F900045C
-:1091D000A4F9001E0E0002138F0500848F8600D0B4
-:1091E000000279400002490090D200BC01E98821C8
-:1091F000004028213255000212A0000303D1202193
-:109200000002A8800095202190CD00BC31B200045E
-:109210001240000333DF0003000540800088202156
-:10922000240600048F9E00BC00DFC8233327000300
-:1092300000875021AFCA00040E000CF6A665003866
-:109240000A0010388F9000D0961E00123C080800CB
-:109250008D080024011E9021A61200120A00105948
-:109260008FB3001027BDFFE03C1808008F18005096
-:10927000AFB00010AFBF0018AFB10014AF8400B0A2
-:1092800093710074030478212410FF8031EE007F75
-:109290003225007F01F0582401DA68213C0C000AD5
-:1092A000A38500C401AC2821AF4B002494A9001071
-:1092B0009768000690A600620080382124020030E2
-:1092C0000109202330C300F0AF8500D010620019DF
-:1092D0003090FFFF90AE0062240DFFF0240A005092
-:1092E00001AE6024318B00FF116A002F00000000E6
-:1092F00016000007241F0C00AF5F00248FB100147C
-:109300008FBF00188FB0001003E0000827BD0020B9
-:109310000E000E1C02002021241F0C00AF5F002451
-:109320008FB100148FBF00188FB0001003E0000849
-:1093300027BD002094A200E094A400E290BF011396
-:10934000008218263079FFFF33E700C014E00009DF
-:109350002F31000116000038000000005620FFE603
-:10936000241F0C000E000D18000000000A0011ED73
-:10937000241F0C001620FFDE000000000E000D1858
-:10938000000000001440FFDC241F0C001600002227
-:109390008F8300D0906901133122003FA062011336
-:1093A0000A0011ED241F0C0094AF00D48F8600D466
-:1093B00000E02821240400050E000C5C31F0FFFFC2
-:1093C0001440000524030003979100E600001821D3
-:1093D0002625FFFFA78500E68F5801B80700FFFE8E
-:1093E0003C196013AF400180241F0C00AF50018472
-:1093F000007938253C101000AF4701888FB1001468
-:10940000AF5001B8AF5F00248FB000108FBF0018BD
-:1094100003E0000827BD00200E000E1C02002021E2
-:109420005040FFB5241F0C008F8300D090690113BA
-:109430000A0012163122003F0E000E1C02002021ED
-:109440001440FFAD241F0C00122000078F8300D0B2
-:10945000906801133106003F34C20040A06201133E
-:109460000A0011ED241F0C000E000D180000000072
-:109470005040FFA1241F0C008F8300D0906801137F
-:109480003106003F0A00124634C20040AF9B00C8BC
-:1094900003E00008AF8000EC3089FFFF0009404284
-:1094A0002D020041000921801440000200095040B3
-:1094B00024080040000830C0000811400046582130
-:1094C000256701A800E2C821272F007F2418FF800C
-:1094D00001F818240064302100CA702125CC00FF57
-:1094E000240DFF00018D202425650088240A0088B2
-:1094F0003C010800AC2A004C3C010800AC2500509F
-:10950000AF8400D43C010800AC2900603C01080095
-:10951000AC2800643C010800AC2700543C01080062
-:10952000AC2300583C010800AC26005C03E00008B6
-:1095300000000000308300FF30C6FFFF30E400FF72
-:109540008F4201B80440FFFE00034C00012438257F
-:109550003C08600000E820253C031000AF45018076
-:10956000AF460184AF44018803E00008AF4301B86F
-:109570008F86001C3C096012352700108CCB00043C
-:109580003C0C600E35850010316A00062D48000144
-:10959000ACE800C48CC40004ACA431808CC20008C8
-:1095A00094C30002ACA2318403E00008A78300E466
-:1095B0003C0308008C6300508F8400E88F86001CF9
-:1095C0002402FF800064C0210302C824AF59002890
-:1095D0008CCD00043305007F00BA78213C0E000CCE
-:1095E00001EE2821ACAD00588CC80008AF8500D032
-:1095F0003C076012ACA8005C8CCC001034E8001072
-:10960000ACAC000C8CCB000CACAB000894AA0014E2
-:109610003C0208008C42004425490001A4A9001422
-:1096200094A400143083FFFF106200178F8400D0D1
-:109630003C0A08008D4A0040A4AA00128CCE0018F3
-:10964000AC8E00248CCD0014AC8D00208CC700188B
-:10965000AC87002C8CCC001424060001AC8C0028B4
-:109660008D0B00BC5166001A8D0200B48D0200B84B
-:10967000A482003A948F003AA48F003C948800D4CE
-:1096800003E000083102FFFF3C0908008D29002497
-:10969000A4A000148F8400D0A4A900128CCE0018BE
-:1096A000AC8E00248CCD0014AC8D00208CC700182B
-:1096B000AC87002C8CCC001424060001AC8C002854
-:1096C0008D0B00BC5566FFEA8D0200B88D0200B418
-:1096D000A482003A948F003AA48F003C948800D46E
-:1096E00003E000083102FFFF8F86001C3C0C0800DD
-:1096F0008D8C0050240BFF808CCD00083C03000CA7
-:10970000000D51C0018A4021010B4824AF8A00E8B6
-:10971000AF49002890C700073105007F00BA10212B
-:109720000043282130E4000410800039AF8500D0C8
-:1097300090CF000731EE000811C000380000000093
-:109740008CD9000C8CC400140324C02B13000030EF
-:10975000000000008CC2000CACA200648CCD00188C
-:109760002402FFF8ACAD00688CCC0010ACAC0080DB
-:109770008CCB000CACAB00848CCA001CACAA007C67
-:1097800090A900BC01224024A0A800BC90C30007FF
-:109790003067000810E000048F8500D090AF00BC57
-:1097A00035EE0001A0AE00BC90D9000733380001AF
-:1097B000130000088F8300D08F8700D0240400346A
-:1097C00090E800BC35030002A0E300BC8F8300D00A
-:1097D000AC6400C090C900073126000210C000052B
-:1097E00000000000906A00BC35420004A06200BC8A
-:1097F0008F8300D09065011330AD003FA06D011341
-:109800008F8C00D0958B00D403E000083162FFFFFD
-:109810008CC200140A001305000000000A001306A1
-:10982000ACA0006427BDFFD8AFB000108F90001C23
-:10983000AFBF0024AFB40020AFB20018AFB1001426
-:10984000AFB3001C9613000E3C07600A3C14600680
-:109850003264FFFF369300100E00125534F40410EA
-:109860008F8400D43C11600E0E00099B363100102D
-:10987000920E00153C0708008CE700603C12601255
-:1098800031CD000FA38D00F08E0E00048E0D000868
-:1098900096080012961F00109619001A9618001EBE
-:1098A000960F001C310CFFFF33EBFFFF332AFFFF45
-:1098B0003309FFFF31E6FFFF3C010800AC2B0040FD
-:1098C0003C010800AC2C00243C010800AC2A0044F8
-:1098D000AE293178AE26317C92020015960300162F
-:1098E00036520010304400FF3065FFFF3C06080090
-:1098F0008CC60064AE243188AE4500B492080014D2
-:1099000096190018241F0001011FC004332FFFFF08
-:109910003C0508008CA50058AE5800B8AE4F00BCFE
-:10992000920C0014AF8E00D8AF8D00DC318B00FF9D
-:10993000AE4B00C0920A0015AE670048AE66004C00
-:10994000314900FFAE4900C8AE65007C3C03080009
-:109950008C6300503C0408008C84004C3C080800D8
-:109960008D0800543C0208008C42005C8FBF00242C
-:10997000AE6300808FB00010AE8300748FB3001C04
-:10998000AE22319CAE4200DCAE2731A0AE2631A41F
-:10999000AE24318CAE233190AE283194AE2531986F
-:1099A000AE870050AE860054AE8500708FB10014B3
-:1099B000AE4700E0AE4600E4AE4400CCAE4300D07B
-:1099C000AE4800D4AE4500D88FB400208FB2001846
-:1099D00003E0000827BD002827BDFFE0AFB1001459
-:1099E000AFBF0018241100010E000845AFB00010F1
-:1099F00010510005978400E6978300CC0083102B5C
-:109A0000144000088F8500D4240700028FBF00187F
-:109A10008FB100148FB0001000E0102103E00008A7
-:109A200027BD00200E000C7A24040005AF8200E858
-:109A30001040FFF6240700020E0008498F90001C1A
-:109A4000979F00E68F9900E88F8D00C827EF0001EF
-:109A5000240E0050AF590020A78F00E6A1AE0000F1
-:109A60003C0C08008D8C00648F8600C8240A80009E
-:109A7000000C5E00ACCB0074A4C0000694C9000AC0
-:109A8000241FFF803C0D000C012AC024A4D8000A2A
-:109A900090C8000A24182000011F1825A0C3000A3E
-:109AA0008F8700C8A0E000788F8500C800003821AB
-:109AB000A0A000833C0208008C4200508F8400E884
-:109AC0000044782101FFC824AF590028960B0002FA
-:109AD00031EE007F01DA6021018D3021A4CB00D46A
-:109AE000960A0002AF8600D03C0E000425492401EE
-:109AF000A4C900E68E080004ACC800048E03000868
-:109B0000ACC30000A4C00010A4C00014A0C000D0CA
-:109B10008F8500D02403FFBFA0A000D13C04080023
-:109B20008C8400648F8200D0A04400D28E1F000C71
-:109B30008F8A00D0978F00E4AD5F001C8E19001053
-:109B400024100030AD590018A5400030A551005434
-:109B5000A5510056A54F0016AD4E0068AD580080C7
-:109B6000AD580084914D006231AC000F358B001070
-:109B7000A14B00628F8600D090C900633128007F1E
-:109B8000A0C800638F8400D02406FFFF9085006387
-:109B900000A31024A08200638F9100D000E0102168
-:109BA000923F00BC37F90001A23900BC8F8A00D077
-:109BB000938F00F0AD580064AD5000C0914E00D3BB
-:109BC000000F690031CC000F018D5825A14B00D347
-:109BD0008F8500D08F8900DCACA900E88F8800D881
-:109BE0008FBF00188FB100148FB0001027BD002068
-:109BF000ACA800ECA4A600D6A4A000E0A4A000E2BB
-:109C000003E000080000000027BDFFE0AFB0001037
-:109C10008F90001CAFB10014AFBF00188E19000464
-:109C20003C1808008F180050240FFF80001989C0CD
-:109C30000238702131CD007F01CF602401BA50215C
-:109C40003C0B000CAF4C0028014B4021950900D47F
-:109C5000950400D68E0700043131FFFFAF8800D095
-:109C60000E000913000721C08E0600048F8300C870
-:109C7000000629C0AF4500209064003E30820040BD
-:109C8000144000068F8400D0341FFFFF948300D659
-:109C90003062FFFF145F000400000000948400D6CF
-:109CA0000E0008A83084FFFF8E050004022030213A
-:109CB0008FBF00188FB100148FB000102404002251
-:109CC00000003821000529C00A00127C27BD0020B1
-:109CD00027BDFFE0AFB100143091FFFFAFB000101F
-:109CE000AFBF00181220001D000080218F86001CCD
-:109CF0008CC500002403000600053F020005140285
-:109D000030E4000714830015304500FF2CA800063E
-:109D10001100004D000558803C0C0800258C57D4DC
-:109D2000016C50218D490000012000080000000056
-:109D30008F8E00EC240D000111CD005900000000B1
-:109D4000260B00013170FFFF24CA00200211202BD6
-:109D5000014030211480FFE6AF8A001C0200102170
-:109D60008FBF00188FB100148FB0001003E00008FF
-:109D700027BD0020938700CE14E00038240400148F
-:109D80000E001338000000008F86001C2402000122
-:109D90000A00147FAF8200EC8F8900EC24080002D7
-:109DA0001128003B2404001300002821000030216A
-:109DB000240700010E00127C000000000A00147F3E
-:109DC0008F86001C8F8700EC2405000214E5FFF647
-:109DD000240400120E0012E9000000008F8500E844
-:109DE00000403021240400120E00127C00003821B3
-:109DF0000A00147F8F86001C8F8300EC241F000351
-:109E0000147FFFD0260B00010E00129B0000000003
-:109E10008F8500E800403021240200022404001055
-:109E200000003821AF8200EC0E00127C0000000020
-:109E30000A00147F8F86001C8F8F00EC240600021E
-:109E400011E6000B0000000024040010000028218F
-:109E5000000030210A00149C240700010000282182
-:109E60000E00127C000030210A00147F8F86001C37
-:109E70000E0013A500000000144000128F99001C72
-:109E80008F86001C240200030A00147FAF8200ECBE
-:109E90000E001431000000000A00147F8F86001CA1
-:109EA0000E00128B000000002402000224040014A3
-:109EB0000000282100003021000038210A0014B9D8
-:109EC000AF8200EC004038212404001097380002D3
-:109ED000000028210E00127C3306FFFF0A00147FC9
-:109EE0008F86001C8F8400C83C077FFF34E6FFFF8D
-:109EF0008C8500742402000100A61824AC83007431
-:109F000003E00008A082000510A000362CA200800B
-:109F1000274A04003C0B000524090080104000077C
-:109F20002408008030A6000F00C540212D030081C9
-:109F30001460000200A0482124080080AF4B0030CC
-:109F400000000000000000000000000011000009F7
-:109F500000003821014030218C8D000024E70004EE
-:109F600000E8602BACCD0000248400041580FFFACB
-:109F700024C60004000000000000000000000000F3
-:109F80003C0E0006010E3825AF47003000000000EF
-:109F900000000000000000008F4F000031E80010BA
-:109FA0001100FFFD000000008F42003C8F43003C89
-:109FB0000049C8210323C02B130000040000000047
-:109FC0008F4C003825860001AF4600388F47003C93
-:109FD00000A9282300E96821AF4D003C14A0FFCE62
-:109FE0002CA2008003E000080000000027BDFFD085
-:109FF0003C020002AFB100143C11000CAF45003828
-:10A00000AFB3001CAF46003C00809821AF42003047
-:10A0100024050088AF44002803512021AFBF002849
-:10A02000AFB50024AFB40020AFB200180E0014F199
-:10A03000AFB000103C1F08008FFF004C3C18080018
-:10A040008F1800642410FF8003F3A82132B9007F29
-:10A0500002B078240018A0C0033A70210018914083
-:10A0600001D12021AF4F00280E0014F10254282105
-:10A070003C0D08008DAD00502405012001B358218E
-:10A08000316C007F01705024019A48210131202158
-:10A090000E0014F1AF4A00283C0808008D08005457
-:10A0A0003C0508008CA500640113382130E6007FD0
-:10A0B00000F0182400DA202100912021AF4300286D
-:10A0C0000E0014F1000529403C0208008C420058A3
-:10A0D0003C1008008E1000601200001C0053882104
-:10A0E0002415FF800A0015743C14000C3226007FF2
-:10A0F0000235182400DA202102402821AF4300282D
-:10A10000009420210E0014F12610FFC01200000F51
-:10A11000023288212E05004110A0FFF42412100005
-:10A120003226007F001091800235182400DA2021A9
-:10A1300002402821AF430028009420210E0014F192
-:10A14000000080211600FFF3023288213C0B08003A
-:10A150008D6B005C240AFF802405000201734021FE
-:10A16000010A4824AF4900283C0408009484006296
-:10A170003110007F021A88213C07000C0E000CAA47
-:10A180000227982100402821026020218FBF00284B
-:10A190008FB500248FB400208FB3001C8FB200183D
-:10A1A0008FB100148FB000100A0014F127BD0030E9
-:10A1B0008F83001C8C62000410400003000000002C
-:10A1C00003E00008000000008C6400108C650008AB
-:08A1D0000A00152A8C66000C40
-:08A1D800000000000000001B64
-:10A1E0000000000F0000000A000000080000000648
-:10A1F000000000050000000500000004000000044D
-:10A200000000000300000003000000030000000342
-:10A210000000000300000002000000020000000235
-:10A220000000000200000002000000020000000226
-:10A230000000000200000002000000020000000216
-:10A240000000000200000002000000020000000206
-:0CA25000000000010000000100000001FF
-:04A25C0008000F24C3
-:10A2600008000D6C08000FB80800106008000F4CC3
-:10A2700008000F8C0800119408000D88080011B820
-:10A2800008000DD8080015540800151C08000D889A
-:10A2900008000D8808000D880800124008001240D0
-:10A2A00008000D8808000D88080014E008000D88DB
-:10A2B00008000D8808000D8808000D88080013B4F8
-:10A2C00008000D8808000D8808000D8808000D881A
-:10A2D00008000D8808000D8808000D8808000D880A
-:10A2E00008000D8808000D8808000D8808000D88FA
-:10A2F00008000D8808000D8808000FAC08000D88C4
-:10A3000008000D880800167808000D8808000D88E0
-:10A3100008000D8808000D8808000D8808000D88C9
-:10A3200008000D8808000D8808000D8808000D88B9
-:10A3300008000D8808000D8808000D8808000D88A9
-:10A3400008000D8808000D8808000D88080014100A
-:10A3500008000D8808000D8808001334080012A4B6
-:10A3600008001E2C08001EFC08001F1408001F28EF
-:10A3700008001F3808001E2C08001E2C08001E2C88
-:10A3800008001ED808002E1408002E1C08002DE41A
-:10A3900008002DF008002DFC08002E08080052F4DB
-:10A3A000080052B40800528008005254080052308D
-:04A3B000080051EC64
-:0CA3B4000A000C84000000000000000003
-:10A3C0000000000D727870362E322E310000000031
-:10A3D0000602010300000000000000010000000070
-:10A3E000000000000000000000000000000000006D
-:10A3F000000000000000000000000000000000005D
-:10A40000000000000000000000000000000000004C
-:10A41000000000000000000000000000000000003C
-:10A42000000000000000000000000000000000002C
-:10A43000000000000000000000000000000000001C
-:10A44000000000000000000000000000000000000C
-:10A4500000000000000000000000000000000000FC
-:10A4600000000000000000000000000000000000EC
-:10A4700000000000000000000000000000000000DC
-:10A4800000000000000000000000000000000000CC
-:10A4900000000000000000000000000000000000BC
-:10A4A00000000000000000000000000000000000AC
-:10A4B000000000000000000000000000000000009C
-:10A4C000000000000000000000000000000000008C
-:10A4D000000000000000000000000000000000007C
-:10A4E000000000000000000000000000000000006C
-:10A4F000000000000000000000000000000000005C
-:10A50000000000000000000000000000000000004B
-:10A51000000000000000000000000000000000003B
-:10A52000000000000000000000000000000000002B
-:10A53000000000000000000000000000000000001B
-:10A54000000000000000000000000000000000000B
-:10A5500000000000000000000000000000000000FB
-:10A5600000000000000000000000000000000000EB
-:10A5700000000000000000000000000000000000DB
-:10A5800000000000000000000000000000000000CB
-:10A5900000000000000000000000000000000000BB
-:10A5A00000000000000000000000000000000000AB
-:10A5B000000000000000000000000000000000009B
-:10A5C000000000000000000000000000000000008B
-:10A5D000000000000000000000000000000000007B
-:10A5E000000000000000000000000000000000006B
-:10A5F000000000000000000000000000000000005B
-:10A60000000000000000000000000000000000004A
-:10A61000000000000000000000000000000000003A
-:10A62000000000000000000000000000000000002A
-:10A63000000000000000000000000000000000001A
-:10A64000000000000000000000000000000000000A
-:10A6500000000000000000000000000000000000FA
-:10A6600000000000000000000000000000000000EA
-:10A6700000000000000000000000000000000000DA
-:10A6800000000000000000000000000000000000CA
-:10A6900000000000000000000000000000000000BA
-:10A6A00000000000000000000000000000000000AA
-:10A6B000000000000000000000000000000000009A
-:10A6C000000000000000000000000000000000008A
-:10A6D000000000000000000000000000000000007A
-:10A6E000000000000000000000000000000000006A
-:10A6F000000000000000000000000000000000005A
-:10A700000000000000000000000000000000000049
-:10A710000000000000000000000000000000000039
-:10A720000000000000000000000000000000000029
-:10A730000000000000000000000000000000000019
-:10A740000000000000000000000000000000000009
-:10A7500000000000000000000000000000000000F9
-:10A7600000000000000000000000000000000000E9
-:10A7700000000000000000000000000000000000D9
-:10A7800000000000000000000000000000000000C9
-:10A7900000000000000000000000000000000000B9
-:10A7A00000000000000000000000000000000000A9
-:10A7B0000000000000000000000000000000000099
-:10A7C0000000000000000000000000000000000089
-:10A7D0000000000000000000000000000000000079
-:10A7E0000000000000000000000000000000000069
-:10A7F0000000000000000000000000000000000059
-:10A800000000000000000000000000000000000048
-:10A810000000000000000000000000000000000038
-:10A820000000000000000000000000000000000028
-:10A830000000000000000000000000000000000018
-:10A840000000000000000000000000000000000008
-:10A8500000000000000000000000000000000000F8
-:10A8600000000000000000000000000000000000E8
-:10A8700000000000000000000000000000000000D8
-:10A8800000000000000000000000000000000000C8
-:10A8900000000000000000000000000000000000B8
-:10A8A00000000000000000000000000000000000A8
-:10A8B0000000000000000000000000000000000098
-:10A8C0000000000000000000000000000000000088
-:10A8D0000000000000000000000000000000000078
-:10A8E0000000000000000000000000000000000068
-:10A8F0000000000000000000000000000000000058
-:10A900000000000000000000000000000000000047
-:10A910000000000000000000000000000000000037
-:10A920000000000000000000000000000000000027
-:10A930000000000000000000000000000000000017
-:10A940000000000000000000000000000000000007
-:10A9500000000000000000000000000000000000F7
-:10A9600000000000000000000000000000000000E7
-:10A9700000000000000000000000000000000000D7
-:10A9800000000000000000000000000000000000C7
-:10A9900000000000000000000000000000000000B7
-:10A9A00000000000000000000000000000000000A7
-:10A9B0000000000000000000000000000000000097
-:10A9C0000000000000000000000000000000000087
-:10A9D0000000000000000000000000000000000077
-:10A9E0000000000000000000000000000000000067
-:10A9F0000000000000000000000000000000000057
-:10AA00000000000000000000000000000000000046
-:10AA10000000000000000000000000000000000036
-:10AA20000000000000000000000000000000000026
-:10AA30000000000000000000000000000000000016
-:10AA40000000000000000000000000000000000006
-:10AA500000000000000000000000000000000000F6
-:10AA600000000000000000000000000000000000E6
-:10AA700000000000000000000000000000000000D6
-:10AA800000000000000000000000000000000000C6
-:10AA900000000000000000000000000000000000B6
-:10AAA00000000000000000000000000000000000A6
-:10AAB0000000000000000000000000000000000096
-:10AAC0000000000000000000000000000000000086
-:10AAD0000000000000000000000000000000000076
-:10AAE0000000000000000000000000000000000066
-:10AAF0000000000000000000000000000000000056
-:10AB00000000000000000000000000000000000045
-:10AB10000000000000000000000000000000000035
-:10AB20000000000000000000000000000000000025
-:10AB30000000000000000000000000000000000015
-:10AB40000000000000000000000000000000000005
-:10AB500000000000000000000000000000000000F5
-:10AB600000000000000000000000000000000000E5
-:10AB700000000000000000000000000000000000D5
-:10AB800000000000000000000000000000000000C5
-:10AB900000000000000000000000000000000000B5
-:10ABA00000000000000000000000000000000000A5
-:10ABB0000000000000000000000000000000000095
-:10ABC0000000000000000000000000000000000085
-:10ABD0000000000000000000000000000000000075
-:10ABE0000000000000000000000000000000000065
-:10ABF0000000000000000000000000000000000055
-:10AC00000000000000000000000000000000000044
-:10AC10000000000000000000000000000000000034
-:10AC20000000000000000000000000000000000024
-:10AC30000000000000000000000000000000000014
-:10AC40000000000000000000000000000000000004
-:10AC500000000000000000000000000000000000F4
-:10AC600000000000000000000000000000000000E4
-:10AC700000000000000000000000000000000000D4
-:10AC800000000000000000000000000000000000C4
-:10AC900000000000000000000000000000000000B4
-:10ACA00000000000000000000000000000000000A4
-:10ACB0000000000000000000000000000000000094
-:10ACC0000000000000000000000000000000000084
-:10ACD0000000000000000000000000000000000074
-:10ACE0000000000000000000000000000000000064
-:10ACF0000000000000000000000000000000000054
-:10AD00000000000000000000000000000000000043
-:10AD10000000000000000000000000000000000033
-:10AD20000000000000000000000000000000000023
-:10AD30000000000000000000000000000000000013
-:10AD40000000000000000000000000000000000003
-:10AD500000000000000000000000000000000000F3
-:10AD600000000000000000000000000000000000E3
-:10AD700000000000000000000000000000000000D3
-:10AD800000000000000000000000000000000000C3
-:10AD900000000000000000000000000000000000B3
-:10ADA00000000000000000000000000000000000A3
-:10ADB0000000000000000000000000000000000093
-:10ADC0000000000000000000000000000000000083
-:10ADD0000000000000000000000000000000000073
-:10ADE0000000000000000000000000000000000063
-:10ADF0000000000000000000000000000000000053
-:10AE00000000000000000000000000000000000042
-:10AE10000000000000000000000000000000000032
-:10AE20000000000000000000000000000000000022
-:10AE30000000000000000000000000000000000012
-:10AE40000000000000000000000000000000000002
-:10AE500000000000000000000000000000000000F2
-:10AE600000000000000000000000000000000000E2
-:10AE700000000000000000000000000000000000D2
-:10AE800000000000000000000000000000000000C2
-:10AE900000000000000000000000000000000000B2
-:10AEA00000000000000000000000000000000000A2
-:10AEB0000000000000000000000000000000000092
-:10AEC0000000000000000000000000000000000082
-:10AED0000000000000000000000000000000000072
-:10AEE0000000000000000000000000000000000062
-:10AEF0000000000000000000000000000000000052
-:10AF00000000000000000000000000000000000041
-:10AF10000000000000000000000000000000000031
-:10AF20000000000000000000000000000000000021
-:10AF30000000000000000000000000000000000011
-:10AF40000000000000000000000000000000000001
-:10AF500000000000000000000000000000000000F1
-:10AF600000000000000000000000000000000000E1
-:10AF700000000000000000000000000000000000D1
-:10AF800000000000000000000000000000000000C1
-:10AF900000000000000000000000000000000000B1
-:10AFA00000000000000000000000000000000000A1
-:10AFB0000000000000000000000000000000000091
-:10AFC0000000000000000000000000000000000081
-:10AFD0000000000000000000000000000000000071
-:10AFE0000000000000000000000000000000000061
-:10AFF0000000000000000000000000000000000051
-:10B000000000000000000000000000000000000040
-:10B010000000000000000000000000000000000030
-:10B020000000000000000000000000000000000020
-:10B030000000000000000000000000000000000010
-:10B040000000000000000000000000000000000000
-:10B0500000000000000000000000000000000000F0
-:10B0600000000000000000000000000000000000E0
-:10B0700000000000000000000000000000000000D0
-:10B0800000000000000000000000000000000000C0
-:10B0900000000000000000000000000000000000B0
-:10B0A00000000000000000000000000000000000A0
-:10B0B0000000000000000000000000000000000090
-:10B0C0000000000000000000000000000000000080
-:10B0D0000000000000000000000000000000000070
-:10B0E0000000000000000000000000000000000060
-:10B0F0000000000000000000000000000000000050
-:10B10000000000000000000000000000000000003F
-:10B11000000000000000000000000000000000002F
-:10B12000000000000000000000000000000000001F
-:10B13000000000000000000000000000000000000F
-:10B1400000000000000000000000000000000000FF
-:10B1500000000000000000000000000000000000EF
-:10B1600000000000000000000000000000000000DF
-:10B1700000000000000000000000000000000000CF
-:10B1800000000000000000000000000000000000BF
-:10B1900000000000000000000000000000000000AF
-:10B1A000000000000000000000000000000000009F
-:10B1B000000000000000000000000000000000008F
-:10B1C000000000000000000000000000000000007F
-:10B1D000000000000000000000000000000000006F
-:10B1E000000000000000000000000000000000005F
-:10B1F000000000000000000000000000000000004F
-:10B20000000000000000000000000000000000003E
-:10B21000000000000000000000000000000000002E
-:10B22000000000000000000000000000000000001E
-:10B23000000000000000000000000000000000000E
-:10B2400000000000000000000000000000000000FE
-:10B2500000000000000000000000000000000000EE
-:10B2600000000000000000000000000000000000DE
-:10B2700000000000000000000000000000000000CE
-:10B2800000000000000000000000000000000000BE
-:10B2900000000000000000000000000000000000AE
-:10B2A000000000000000000000000000000000009E
-:10B2B000000000000000000000000000000000008E
-:10B2C000000000000000000000000000000000007E
-:10B2D000000000000000000000000000000000006E
-:10B2E000000000000000000000000000000000005E
-:10B2F000000000000000000000000000000000004E
-:10B30000000000000000000000000000000000003D
-:10B31000000000000000000000000000000000002D
-:10B32000000000000000000000000000000000001D
-:10B33000000000000000000000000000000000000D
-:10B3400000000000000000000000000000000000FD
-:10B3500000000000000000000000000000000000ED
-:10B3600000000000000000000000000000000000DD
-:10B3700000000000000000000000000000000000CD
-:10B3800000000000000000000000000000000000BD
-:10B3900000000000000000000000000000000000AD
-:10B3A000000000000000000000000000000000009D
-:10B3B000000000000000000000000000000000008D
-:10B3C000000000000000000000000000000000007D
-:10B3D000000000000000000000000000000000006D
-:10B3E000000000000000000000000000000000005D
-:10B3F000000000000000000000000000000000004D
-:10B40000000000000000000000000000000000003C
-:10B41000000000000000000000000000000000002C
-:10B42000000000000000000000000000000000001C
-:10B43000000000000000000000000000000000000C
-:10B4400000000000000000000000000000000000FC
-:10B4500000000000000000000000000000000000EC
-:10B4600000000000000000000000000000000000DC
-:10B4700000000000000000000000000000000000CC
-:10B4800000000000000000000000000000000000BC
-:10B4900000000000000000000000000000000000AC
-:10B4A000000000000000000000000000000000009C
-:10B4B000000000000000000000000000000000008C
-:10B4C000000000000000000000000000000000007C
-:10B4D000000000000000000000000000000000006C
-:10B4E000000000000000000000000000000000005C
-:10B4F000000000000000000000000000000000004C
-:10B50000000000000000000000000000000000003B
-:10B51000000000000000000000000000000000002B
-:10B52000000000000000000000000000000000001B
-:10B53000000000000000000000000000000000000B
-:10B5400000000000000000000000000000000000FB
-:10B5500000000000000000000000000000000000EB
-:10B5600000000000000000000000000000000000DB
-:10B5700000000000000000000000000000000000CB
-:10B5800000000000000000000000000000000000BB
-:10B5900000000000000000000000000000000000AB
-:10B5A000000000000000000000000000000000009B
-:10B5B000000000000000000000000000000000008B
-:10B5C000000000000000000000000000000000007B
-:10B5D000000000000000000000000000000000006B
-:10B5E000000000000000000000000000000000005B
-:10B5F000000000000000000000000000000000004B
-:10B60000000000000000000000000000000000003A
-:10B61000000000000000000000000000000000002A
-:10B62000000000000000000000000000000000001A
-:10B63000000000000000000000000000000000000A
-:10B6400000000000000000000000000000000000FA
-:10B6500000000000000000000000000000000000EA
-:10B6600000000000000000000000000000000000DA
-:10B6700000000000000000000000000000000000CA
-:10B6800000000000000000000000000000000000BA
-:10B6900000000000000000000000000000000000AA
-:10B6A000000000000000000000000000000000009A
-:10B6B000000000000000000000000000000000008A
-:10B6C000000000000000000000000000000000007A
-:10B6D000000000000000000000000000000000006A
-:10B6E000000000000000000000000000000000005A
-:10B6F000000000000000000000000000000000004A
-:10B700000000000000000000000000000000000039
-:10B710000000000000000000000000000000000029
-:10B720000000000000000000000000000000000019
-:10B730000000000000000000000000000000000009
-:10B7400000000000000000000000000000000000F9
-:10B7500000000000000000000000000000000000E9
-:10B7600000000000000000000000000000000000D9
-:10B7700000000000000000000000000000000000C9
-:10B7800000000000000000000000000000000000B9
-:10B7900000000000000000000000000000000000A9
-:10B7A0000000000000000000000000000000000099
-:10B7B0000000000000000000000000000000000089
-:10B7C0000000000000000000000000000000000079
-:10B7D0000000000000000000000000000000000069
-:10B7E0000000000000000000000000000000000059
-:10B7F0000000000000000000000000000000000049
-:10B800000000000000000000000000000000000038
-:10B810000000000000000000000000000000000028
-:10B820000000000000000000000000000000000018
-:10B830000000000000000000000000000000000008
-:10B8400000000000000000000000000000000000F8
-:10B8500000000000000000000000000000000000E8
-:10B8600000000000000000000000000000000000D8
-:10B8700000000000000000000000000000000000C8
-:10B8800000000000000000000000000000000000B8
-:10B8900000000000000000000000000000000000A8
-:10B8A0000000000000000000000000000000000098
-:10B8B0000000000000000000000000000000000088
-:10B8C0000000000000000000000000000000000078
-:10B8D0000000000000000000000000000000000068
-:10B8E0000000000000000000000000000000000058
-:10B8F0000000000000000000000000000000000048
-:10B900000000000000000000000000000000000037
-:10B910000000000000000000000000000000000027
-:10B920000000000000000000000000000000000017
-:10B930000000000000000000000000000000000007
-:10B9400000000000000000000000000000000000F7
-:10B9500000000000000000000000000000000000E7
-:10B9600000000000000000000000000000000000D7
-:10B9700000000000000000000000000000000000C7
-:10B9800000000000000000000000000000000000B7
-:10B9900000000000000000000000000000000000A7
-:10B9A0000000000000000000000000000000000097
-:10B9B0000000000000000000000000000000000087
-:10B9C0000000000000000000000000000000000077
-:10B9D0000000000000000000000000000000000067
-:10B9E0000000000000000000000000000000000057
-:10B9F0000000000000000000000000000000000047
-:10BA00000000000000000000000000000000000036
-:10BA10000000000000000000000000000000000026
-:10BA20000000000000000000000000000000000016
-:10BA30000000000000000000000000000000000006
-:10BA400000000000000000000000000000000000F6
-:10BA500000000000000000000000000000000000E6
-:10BA600000000000000000000000000000000000D6
-:10BA700000000000000000000000000000000000C6
-:10BA800000000000000000000000000000000000B6
-:10BA900000000000000000000000000000000000A6
-:10BAA0000000000000000000000000000000000096
-:10BAB0000000000000000000000000000000000086
-:10BAC0000000000000000000000000000000000076
-:10BAD0000000000000000000000000000000000066
-:10BAE0000000000000000000000000000000000056
-:10BAF0000000000000000000000000000000000046
-:10BB00000000000000000000000000000000000035
-:10BB10000000000000000000000000000000000025
-:10BB20000000000000000000000000000000000015
-:10BB30000000000000000000000000000000000005
-:10BB400000000000000000000000000000000000F5
-:10BB500000000000000000000000000000000000E5
-:10BB600000000000000000000000000000000000D5
-:10BB700000000000000000000000000000000000C5
-:10BB800000000000000000000000000000000000B5
-:10BB900000000000000000000000000000000000A5
-:10BBA0000000000000000000000000000000000095
-:10BBB0000000000000000000000000000000000085
-:10BBC0000000000000000000000000000000000075
-:10BBD0000000000000000000000000000000000065
-:10BBE0000000000000000000000000000000000055
-:10BBF0000000000000000000000000000000000045
-:10BC00000000000000000000000000000000000034
-:10BC10000000000000000000000000000000000024
-:10BC20000000000000000000000000000000000014
-:10BC30000000000000000000000000000000000004
-:10BC400000000000000000000000000000000000F4
-:10BC500000000000000000000000000000000000E4
-:10BC600000000000000000000000000000000000D4
-:10BC700000000000000000000000000000000000C4
-:10BC800000000000000000000000000000000000B4
-:10BC900000000000000000000000000000000000A4
-:10BCA0000000000000000000000000000000000094
-:10BCB0000000000000000000000000000000000084
-:10BCC0000000000000000000000000000000000074
-:10BCD0000000000000000000000000000000000064
-:10BCE0000000000000000000000000000000000054
-:10BCF0000000000000000000000000000000000044
-:10BD00000000000000000000000000000000000033
-:10BD10000000000000000000000000000000000023
-:10BD20000000000000000000000000000000000013
-:10BD30000000000000000000000000000000000003
-:10BD400000000000000000000000000000000000F3
-:10BD500000000000000000000000000000000000E3
-:10BD600000000000000000000000000000000000D3
-:10BD700000000000000000000000000000000000C3
-:10BD800000000000000000000000000000000000B3
-:10BD900000000000000000000000000000000000A3
-:10BDA0000000000000000000000000000000000093
-:10BDB0000000000000000000000000000000000083
-:10BDC0000000000000000000000000000000000073
-:10BDD0000000000000000000000000000000000063
-:10BDE0000000000000000000000000000000000053
-:10BDF0000000000000000000000000000000000043
-:10BE00000000000000000000000000000000000032
-:10BE10000000000000000000000000000000000022
-:10BE20000000000000000000000000000000000012
-:10BE30000000000000000000000000000000000002
-:10BE400000000000000000000000000000000000F2
-:10BE500000000000000000000000000000000000E2
-:10BE600000000000000000000000000000000000D2
-:10BE700000000000000000000000000000000000C2
-:10BE800000000000000000000000000000000000B2
-:10BE900000000000000000000000000000000000A2
-:10BEA0000000000000000000000000000000000092
-:10BEB0000000000000000000000000000000000082
-:10BEC0000000000000000000000000000000000072
-:10BED0000000000000000000000000000000000062
-:10BEE0000000000000000000000000000000000052
-:10BEF0000000000000000000000000000000000042
-:10BF00000000000000000000000000000000000031
-:10BF10000000000000000000000000000000000021
-:10BF20000000000000000000000000000000000011
-:10BF30000000000000000000000000000000000001
-:10BF400000000000000000000000000000000000F1
-:10BF500000000000000000000000000000000000E1
-:10BF600000000000000000000000000000000000D1
-:10BF700000000000000000000000000000000000C1
-:10BF800000000000000000000000000000000000B1
-:10BF900000000000000000000000000000000000A1
-:10BFA0000000000000000000000000000000000091
-:10BFB0000000000000000000000000000000000081
-:10BFC0000000000000000000000000000000000071
-:10BFD0000000000000000000000000000000000061
-:10BFE0000000000000000000000000000000000051
-:10BFF0000000000000000000000000000000000041
-:10C000000000000000000000000000000000000030
-:10C010000000000000000000000000000000000020
-:10C020000000000000000000000000000000000010
-:10C030000000000000000000000000000000000000
-:10C0400000000000000000000000000000000000F0
-:10C0500000000000000000000000000000000000E0
-:10C0600000000000000000000000000000000000D0
-:10C0700000000000000000000000000000000000C0
-:10C0800000000000000000000000000000000000B0
-:10C0900000000000000000000000000000000000A0
-:10C0A0000000000000000000000000000000000090
-:10C0B0000000000000000000000000000000000080
-:10C0C0000000000000000000000000000000000070
-:10C0D0000000000000000000000000000000000060
-:10C0E0000000000000000000000000000000000050
-:10C0F0000000000000000000000000000000000040
-:10C10000000000000000000000000000000000002F
-:10C11000000000000000000000000000000000001F
-:10C12000000000000000000000000000000000000F
-:10C1300000000000000000000000000000000000FF
-:10C1400000000000000000000000000000000000EF
-:10C1500000000000000000000000000000000000DF
-:10C1600000000000000000000000000000000000CF
-:10C1700000000000000000000000000000000000BF
-:10C1800000000000000000000000000000000000AF
-:10C19000000000000000000000000000000000009F
-:10C1A000000000000000000000000000000000008F
-:10C1B000000000000000000000000000000000007F
-:10C1C000000000000000000000000000000000006F
-:10C1D000000000000000000000000000000000005F
-:10C1E000000000000000000000000000000000004F
-:10C1F000000000000000000000000000000000003F
-:10C20000000000000000000000000000000000002E
-:10C21000000000000000000000000000000000001E
-:10C22000000000000000000000000000000000000E
-:10C2300000000000000000000000000000000000FE
-:10C2400000000000000000000000000000000000EE
-:10C2500000000000000000000000000000000000DE
-:10C2600000000000000000000000000000000000CE
-:10C2700000000000000000000000000000000000BE
-:10C2800000000000000000000000000000000000AE
-:10C29000000000000000000000000000000000009E
-:10C2A000000000000000000000000000000000008E
-:10C2B000000000000000000000000000000000007E
-:10C2C000000000000000000000000000000000006E
-:10C2D000000000000000000000000000000000005E
-:10C2E000000000000000000000000000000000004E
-:10C2F000000000000000000000000000000000003E
-:10C30000000000000000000000000000000000002D
-:10C31000000000000000000000000000000000001D
-:10C32000000000000000000000000000000000000D
-:10C3300000000000000000000000000000000000FD
-:10C3400000000000000000000000000000000000ED
-:10C3500000000000000000000000000000000000DD
-:10C3600000000000000000000000000000000000CD
-:10C3700000000000000000000000000000000000BD
-:10C3800000000000000000000000000000000000AD
-:10C39000000000000000000000000000000000009D
-:10C3A000000000000000000000000000000000008D
-:10C3B000000000000000000000000000000000007D
-:10C3C000000000000000000000000000000000006D
-:10C3D000000000000000000000000000000000005D
-:10C3E000000000000000000000000000000000004D
-:10C3F000000000000000000000000000000000003D
-:10C40000000000000000000000000000000000002C
-:10C41000000000000000000000000000000000001C
-:10C42000000000000000000000000000000000000C
-:10C4300000000000000000000000000000000000FC
-:10C4400000000000000000000000000000000000EC
-:10C4500000000000000000000000000000000000DC
-:10C4600000000000000000000000000000000000CC
-:10C4700000000000000000000000000000000000BC
-:10C4800000000000000000000000000000000000AC
-:10C49000000000000000000000000000000000009C
-:10C4A000000000000000000000000000000000008C
-:10C4B000000000000000000000000000000000007C
-:10C4C000000000000000000000000000000000006C
-:10C4D000000000000000000000000000000000005C
-:10C4E000000000000000000000000000000000004C
-:10C4F000000000000000000000000000000000003C
-:10C50000000000000000000000000000000000002B
-:10C51000000000000000000000000000000000001B
-:10C52000000000000000000000000000000000000B
-:10C5300000000000000000000000000000000000FB
-:10C5400000000000000000000000000000000000EB
-:10C5500000000000000000000000000000000000DB
-:10C5600000000000000000000000000000000000CB
-:10C5700000000000000000000000000000000000BB
-:10C5800000000000000000000000000000000000AB
-:10C59000000000000000000000000000000000009B
-:10C5A000000000000000000000000000000000008B
-:10C5B000000000000000000000000000000000007B
-:10C5C000000000000000000000000000000000006B
-:10C5D000000000000000000000000000000000005B
-:10C5E000000000000000000000000000000000004B
-:10C5F000000000000000000000000000000000003B
-:10C60000000000000000000000000000000000002A
-:10C61000000000000000000000000000000000001A
-:10C62000000000000000000000000000000000000A
-:10C6300000000000000000000000000000000000FA
-:10C6400000000000000000000000000000000000EA
-:10C6500000000000000000000000000000000000DA
-:10C6600000000000000000000000000000000000CA
-:10C6700000000000000000000000000000000000BA
-:10C6800000000000000000000000000000000000AA
-:10C69000000000000000000000000000000000009A
-:10C6A000000000000000000000000000000000008A
-:10C6B000000000000000000000000000000000007A
-:10C6C000000000000000000000000000000000006A
-:10C6D000000000000000000000000000000000005A
-:10C6E000000000000000000000000000000000004A
-:10C6F000000000000000000000000000000000003A
-:10C700000000000000000000000000000000000029
-:10C710000000000000000000000000000000000019
-:10C720000000000000000000000000000000000009
-:10C7300000000000000000000000000000000000F9
-:10C7400000000000000000000000000000000000E9
-:10C7500000000000000000000000000000000000D9
-:10C7600000000000000000000000000000000000C9
-:10C7700000000000000000000000000000000000B9
-:10C7800000000000000000000000000000000000A9
-:10C790000000000000000000000000000000000099
-:10C7A0000000000000000000000000000000000089
-:10C7B0000000000000000000000000000000000079
-:10C7C0000000000000000000000000000000000069
-:10C7D0000000000000000000000000000000000059
-:10C7E0000000000000000000000000000000000049
-:10C7F0000000000000000000000000000000000039
-:10C800000000000000000000000000000000000028
-:10C810000000000000000000000000000000000018
-:10C820000000000000000000000000000000000008
-:10C8300000000000000000000000000000000000F8
-:10C8400000000000000000000000000000000000E8
-:10C8500000000000000000000000000000000000D8
-:10C8600000000000000000000000000000000000C8
-:10C8700000000000000000000000000000000000B8
-:10C8800000000000000000000000000000000000A8
-:10C890000000000000000000000000000000000098
-:10C8A0000000000000000000000000000000000088
-:10C8B0000000000000000000000000000000000078
-:10C8C0000000000000000000000000000000000068
-:10C8D0000000000000000000000000000000000058
-:10C8E0000000000000000000000000000000000048
-:10C8F0000000000000000000000000000000000038
-:10C900000000000000000000000000000000000027
-:10C910000000000000000000000000000000000017
-:10C920000000000000000000000000000000000007
-:10C9300000000000000000000000000000000000F7
-:10C9400000000000000000000000000000000000E7
-:10C9500000000000000000000000000000000000D7
-:10C9600000000000000000000000000000000000C7
-:10C9700000000000000000000000000000000000B7
-:10C9800000000000000000000000000000000000A7
-:10C990000000000000000000000000000000000097
-:10C9A0000000000000000000000000000000000087
-:10C9B0000000000000000000000000000000000077
-:10C9C0000000000000000000000000000000000067
-:10C9D0000000000000000000000000000000000057
-:10C9E0000000000000000000000000000000000047
-:10C9F0000000000000000000000000000000000037
-:10CA00000000000000000000000000000000000026
-:10CA10000000000000000000000000000000000016
-:10CA20000000000000000000000000000000000006
-:10CA300000000000000000000000000000000000F6
-:10CA400000000000000000000000000000000000E6
-:10CA500000000000000000000000000000000000D6
-:10CA600000000000000000000000000000000000C6
-:10CA700000000000000000000000000000000000B6
-:10CA800000000000000000000000000000000000A6
-:10CA90000000000000000000000000000000000096
-:10CAA0000000000000000000000000000000000086
-:10CAB0000000000000000000000000000000000076
-:10CAC0000000000000000000000000000000000066
-:10CAD0000000000000000000000000000000000056
-:10CAE0000000000000000000000000000000000046
-:10CAF0000000000000000000000000000000000036
-:10CB00000000000000000000000000000000000025
-:10CB10000000000000000000000000000000000015
-:10CB20000000000000000000000000000000000005
-:10CB300000000000000000000000000000000000F5
-:10CB400000000000000000000000000000000000E5
-:10CB500000000000000000000000000000000000D5
-:10CB600000000000000000000000000000000000C5
-:10CB700000000000000000000000000000000000B5
-:10CB800000000000000000000000000000000000A5
-:10CB90000000000000000000000000000000000095
-:10CBA0000000000000000000000000000000000085
-:10CBB0000000000000000000000000000000000075
-:10CBC0000000000000000000000000000000000065
-:10CBD0000000000000000000000000000000000055
-:10CBE0000000000000000000000000000000000045
-:10CBF0000000000000000000000000000000000035
-:10CC00000000000000000000000000000000000024
-:10CC10000000000000000000000000000000000014
-:10CC20000000000000000000000000000000000004
-:10CC300000000000000000000000000000000000F4
-:10CC400000000000000000000000000000000000E4
-:10CC500000000000000000000000000000000000D4
-:10CC600000000000000000000000000000000000C4
-:10CC700000000000000000000000000000000000B4
-:10CC800000000000000000000000000000000000A4
-:10CC90000000000000000000000000000000000094
-:10CCA0000000000000000000000000000000000084
-:10CCB0000000000000000000000000000000000074
-:10CCC0000000000000000000000000000000000064
-:10CCD0000000000000000000000000000000000054
-:10CCE0000000000000000000000000000000000044
-:10CCF0000000000000000000000000000000000034
-:10CD00000000000000000000000000000000000023
-:10CD10000000000000000000000000000000000013
-:10CD20000000000000000000000000000000000003
-:10CD300000000000000000000000000000000000F3
-:10CD400000000000000000000000000000000000E3
-:10CD500000000000000000000000000000000000D3
-:10CD600000000000000000000000000000000000C3
-:10CD700000000000000000000000000000000000B3
-:10CD800000000000000000000000000000000000A3
-:10CD90000000000000000000000000000000000093
-:10CDA0000000000000000000000000000000000083
-:10CDB0000000000000000000000000000000000073
-:10CDC0000000000000000000000000000000000063
-:10CDD0000000000000000000000000000000000053
-:10CDE0000000000000000000000000000000000043
-:10CDF0000000000000000000000000000000000033
-:10CE00000000000000000000000000000000000022
-:10CE10000000000000000000000000000000000012
-:10CE20000000000000000000000000000000000002
-:10CE300000000000000000000000000000000000F2
-:10CE400000000000000000000000000000000000E2
-:10CE500000000000000000000000000000000000D2
-:10CE600000000000000000000000000000000000C2
-:10CE700000000000000000000000000000000000B2
-:10CE800000000000000000000000000000000000A2
-:10CE90000000000000000000000000000000000092
-:10CEA0000000000000000000000000000000000082
-:10CEB0000000000000000000000000000000000072
-:10CEC0000000000000000000000000000000000062
-:10CED0000000000000000000000000000000000052
-:10CEE0000000000000000000000000000000000042
-:10CEF0000000000000000000000000000000000032
-:10CF00000000000000000000000000000000000021
-:10CF10000000000000000000000000000000000011
-:10CF20000000000000000000000000000000000001
-:10CF300000000000000000000000000000000000F1
-:10CF400000000000000000000000000000000000E1
-:10CF500000000000000000000000000000000000D1
-:10CF600000000000000000000000000000000000C1
-:10CF700000000000000000000000000000000000B1
-:10CF800000000000000000000000000000000000A1
-:10CF90000000000000000000000000000000000091
-:10CFA0000000000000000000000000000000000081
-:10CFB0000000000000000000000000000000000071
-:10CFC0000000000000000000000000000000000061
-:10CFD0000000000000000000000000000000000051
-:10CFE0000000000000000000000000000000000041
-:10CFF0000000000000000000000000000000000031
-:10D000000000000000000000000000000000000020
-:10D010000000000000000000000000000000000010
-:10D020000000000000000000000000000000000000
-:10D0300000000000000000000000000000000000F0
-:10D0400000000000000000000000000000000000E0
-:10D0500000000000000000000000000000000000D0
-:10D0600000000000000000000000000000000000C0
-:10D0700000000000000000000000000000000000B0
-:10D0800000000000000000000000000000000000A0
-:10D090000000000000000000000000000000000090
-:10D0A0000000000000000000000000000000000080
-:10D0B0000000000000000000000000000000000070
-:10D0C0000000000000000000000000000000000060
-:10D0D0000000000000000000000000000000000050
-:10D0E0000000000000000000000000000000000040
-:10D0F0000000000000000000000000000000000030
-:10D10000000000000000000000000000000000001F
-:10D11000000000000000000000000000000000000F
-:10D1200000000000000000000000000000000000FF
-:10D1300000000000000000000000000000000000EF
-:10D1400000000000000000000000000000000000DF
-:10D1500000000000000000000000000000000000CF
-:10D1600000000000000000000000000000000000BF
-:10D1700000000000000000000000000000000000AF
-:10D18000000000000000000000000000000000009F
-:10D19000000000000000000000000000000000008F
-:10D1A000000000000000000000000000000000007F
-:10D1B000000000000000000000000000000000006F
-:10D1C000000000000000000000000000000000005F
-:10D1D000000000000000000000000000000000004F
-:10D1E000000000000000000000000000000000003F
-:10D1F000000000000000000000000000000000002F
-:10D20000000000000000000000000000000000001E
-:10D21000000000000000000000000000000000000E
-:10D2200000000000000000000000000000000000FE
-:10D2300000000000000000000000000000000000EE
-:10D2400000000000000000000000000000000000DE
-:10D2500000000000000000000000000000000000CE
-:10D2600000000000000000000000000000000000BE
-:10D2700000000000000000000000000000000000AE
-:10D28000000000000000000000000000000000009E
-:10D29000000000000000000000000000000000008E
-:10D2A000000000000000000000000000000000007E
-:10D2B000000000000000000000000000000000006E
-:10D2C000000000000000000000000000000000005E
-:10D2D000000000000000000000000000000000004E
-:10D2E000000000000000000000000000000000003E
-:10D2F000000000000000000000000000000000002E
-:10D30000000000000000000000000000000000001D
-:10D31000000000000000000000000000000000000D
-:10D3200000000000000000000000000000000000FD
-:10D3300000000000000000000000000000000000ED
-:10D3400000000000000000000000000000000000DD
-:10D3500000000000000000000000000000000000CD
-:10D3600000000000000000000000000000000000BD
-:10D3700000000000000000000000000000000000AD
-:10D38000000000000000000000000000000000009D
-:10D39000000000000000000000000000000000008D
-:10D3A000000000000000000000000000000000007D
-:10D3B000000000000000000000000000000000006D
-:10D3C000000000000000000000000000000000005D
-:10D3D000000000000000000000000000000000004D
-:10D3E000000000000000000000000000000000003D
-:10D3F000000000000000000000000000000000002D
-:10D40000000000000000000000000000000000001C
-:10D41000000000000000000000000000000000000C
-:10D4200000000000000000000000000000000000FC
-:10D4300000000000000000000000000000000000EC
-:10D4400000000000000000000000000000000000DC
-:10D4500000000000000000000000000000000000CC
-:10D4600000000000000000000000000000000000BC
-:10D4700000000000000000000000000000000000AC
-:10D48000000000000000000000000000000000009C
-:10D49000000000000000000000000000000000008C
-:10D4A000000000000000000000000000000000007C
-:10D4B000000000000000000000000000000000006C
-:10D4C000000000000000000000000000000000005C
-:10D4D000000000000000000000000000000000004C
-:10D4E000000000000000000000000000000000003C
-:10D4F000000000000000000000000000000000002C
-:10D50000000000000000000000000000000000001B
-:10D51000000000000000000000000000000000000B
-:10D5200000000000000000000000000000000000FB
-:10D5300000000000000000000000000000000000EB
-:10D5400000000000000000000000000000000000DB
-:10D5500000000000000000000000000000000000CB
-:10D5600000000000000000000000000000000000BB
-:10D5700000000000000000000000000000000000AB
-:10D58000000000000000000000000000000000009B
-:10D59000000000000000008000000000000000000B
-:10D5A000000000000000000000000000000000007B
-:10D5B00000000000000000000000000A0000000061
-:10D5C0000000000000000000100000030000000048
-:10D5D0000000000D0000000D3C02080024427320F2
-:10D5E0003C030800246377ACAC4000000043202BD0
-:10D5F0001480FFFD244200043C1D080037BD7FFC61
-:10D6000003A0F0213C100800261032103C1C08003A
-:10D61000279C73200E0010FE000000000000000D8B
-:10D6200030A5FFFF30C600FF274301808F4201B8BD
-:10D630000440FFFE24020002AC640000A465000860
-:10D64000A066000AA062000B3C021000AC67001844
-:10D6500003E00008AF4201B83C0360008C624FF861
-:10D660000440FFFE3C020200AC644FC0AC624FC4F9
-:10D670003C02100003E00008AC624FF89482000CFA
-:10D680002486001400A0382100021302000210803A
-:10D690000082402100C8102B1040005700000000FD
-:10D6A00090C300002C6200095040005190C200015C
-:10D6B000000310803C030800246372D00043102153
-:10D6C0008C420000004000080000000090C30001F0
-:10D6D0002402000A1462003A000000000106102330
-:10D6E0002C42000A1440003624C600028CE20000DE
-:10D6F00034420100ACE2000090C2000090C300017F
-:10D7000090C4000290C5000300031C000002160034
-:10D710000043102500042200004410250045102578
-:10D7200024C60004ACE2000490C2000090C30001D3
-:10D7300090C4000290C500030002160000031C0004
-:10D740000043102500042200004410250045102548
-:10D7500024C600040A000CB8ACE2000890C3000123
-:10D76000240200041462001624C6000290C20000C5
-:10D7700090C400018CE30000000212000044102558
-:10D780003463000424C60002ACE2000C0A000CB8AA
-:10D79000ACE3000090C300012402000314620008FF
-:10D7A00024C600028CE2000090C3000024C60001E1
-:10D7B00034420008A0E300100A000CB8ACE20000FC
-:10D7C00003E000082402000190C3000124020002CB
-:10D7D0001062000224C40002010020210A000CB8DB
-:10D7E000008030210A000CB824C6000190C200015C
-:10D7F0000A000CB800C2302103E00008000010212C
-:10D8000027BDFFE8AFBF0014AFB000100E00130239
-:10D8100000808021936200052403FFFE0200202186
-:10D82000004310248FBF00148FB00010A3620005C6
-:10D830000A00130B27BD001827BDFFE8AFB000108A
-:10D84000AFBF00140E000F3C0080802193620000E7
-:10D8500024030050304200FF14430004240201005E
-:10D86000AF4201800A000D3002002021AF4001804C
-:10D87000020020218FBF00148FB000100A000FE7B4
-:10D8800027BD001827BDFF80AFBE0078AFB700747A
-:10D89000AFB20060AFBF007CAFB60070AFB5006C38
-:10D8A000AFB40068AFB30064AFB1005CAFB0005874
-:10D8B0008F5001283C0208008C4231A02403FF80D5
-:10D8C0009365003F0202102100431024AF42002460
-:10D8D0003C0208008C4231A09364000530B200FF86
-:10D8E000020210213042007F034218210004202749
-:10D8F0003C02000A0062182130840001AF8300144A
-:10D900000000F0210000B82114800053AFA00050A7
-:10D9100093430116934401128F450104306300FFC5
-:10D920003C020001308400FF00A2282403431021A0
-:10D9300003441821245640002467400014A001CD60
-:10D940002402000193620000304300FF2402002003
-:10D950001062000524020050106200060000000062
-:10D960000A000D74000000000000000D0A000D7D8B
-:10D97000AFA000303C1E080027DE736C0A000D7D4E
-:10D98000AFA000303C0208008C4200DC24420001C1
-:10D990003C010800AC2200DC0E00139F00000000D8
-:10D9A0000A000F318FBF007C8F4201043C0300202E
-:10D9B00092D3000D004310240002202B00042140CC
-:10D9C000AFA400308F4301043C02004000621824E1
-:10D9D000146000023485004000802821326200205B
-:10D9E000AFA500301440000234A6008000A0302112
-:10D9F00010C0000BAFA6003093C500088F67004C25
-:10DA00000200202100052B0034A5008130A5F08103
-:10DA10000E000C9B30C600FF0A000F2E0000000015
-:10DA20009362003E304200401040000F2402000488
-:10DA300056420007240200120200202100E02821A3
-:10DA40000E0013F702C030210A000F318FBF007C97
-:10DA500016420005000000000E000D2100002021EC
-:10DA60000A000F318FBF007C9743011A96C4000E45
-:10DA700093620035326500043075FFFF00442004D6
-:10DA8000AFA400548ED1000410A000158ED400085D
-:10DA90009362003E3042004010400007000000004A
-:10DAA0000E0013E0022020211040000D00000000B5
-:10DAB0000A000F2E000000008F6200440222102393
-:10DAC0000440016A000000008F6200480222102317
-:10DAD00004410166240400160A000E218FC20004CE
-:10DAE0008F6200480222102304400008000000005A
-:10DAF0003C0208008C423100244200013C01080035
-:10DB0000AC2231000A000F23000000008F620040A9
-:10DB100002221023184000128F8400143C020800D7
-:10DB20008C423100327300FC0000A8212442000125
-:10DB30003C010800AC2231008F6300409482011C3C
-:10DB4000022318233042FFFF0043102A50400010E8
-:10DB50002402000C8F6200400A000DF20222102302
-:10DB60009483011C9762003C0043102B1040000678
-:10DB7000000000009482011C00551023A482011CA7
-:10DB80000A000DF72402000CA480011C2402000CE2
-:10DB9000AFA200308F620040005120231880000D9A
-:10DBA00002A4102A1440012600000000149500066B
-:10DBB00002A410233A620001304200011440012007
-:10DBC0000000000002A41023022488210A000E098C
-:10DBD0003055FFFF00002021326200021040001A81
-:10DBE000326200109362003E30420040504000110B
-:10DBF0008FC200040E00130202002021240200182C
-:10DC0000A362003F936200052403FFFE020020216F
-:10DC1000004310240E00130BA362000524040039F6
-:10DC2000000028210E0013C9240600180A000F3036
-:10DC300024020001240400170040F809000000003D
-:10DC40000A000F302402000110400108000000000B
-:10DC50008F63004C8F620054028210231C4001032A
-:10DC600002831023044200010060A021AFA4001829
-:10DC7000AFB10010AFB50014934201208F65004092
-:10DC80009763003C304200FF034210210044102102
-:10DC90008FA400543063FFFF244240000083182B00
-:10DCA0008FA40030AFA20020AFA50028008320255C
-:10DCB000AFA40030AFA50024AFA0002CAFB4003457
-:10DCC0009362003E30420008504000118FC20000B5
-:10DCD00002C0202127A500380E000CB2AFA00038EA
-:10DCE0005440000B8FC200008FA200383042010068
-:10DCF000504000078FC200008FA3003C8F6200607D
-:10DD00000062102304430001AF6300608FC2000073
-:10DD10000040F80927A400108FA200303042000212
-:10DD200054400001327300FE9362003E30420040D6
-:10DD3000104000378FA200248F6200541682001A10
-:10DD40003262000124020014124200102A4200151F
-:10DD500010400006240200162402000C12420007A4
-:10DD6000326200010A000E7D000000001242000530
-:10DD7000326200010A000E7D000000000A000E78E9
-:10DD80002417000E0A000E78241700100A000E7CDB
-:10DD900024170012936200232403FFBD00431024C4
-:10DDA000A362002332620001104000198FA20024F8
-:10DDB0002402000C1242000E2A42000D1040000600
-:10DDC0002402000E2402000A124200078FA200243F
-:10DDD0000A000E9524420001124200088FA200247E
-:10DDE0000A000E95244200010A000E932417000831
-:10DDF0002402000E16E20002241700162417001059
-:10DE00008FA2002424420001AFA200248FA200248C
-:10DE10008FA300148F76004000431021AF620040B2
-:10DE20008F8200149442011C104000090000000081
-:10DE30008F6200488F6400409763003C00441023C9
-:10DE40003063FFFF0043102A104000088FA20054E7
-:10DE5000936400368F6300403402FFFC008210049C
-:10DE600000621821AF6300488FA200548FA60030D3
-:10DE70000282902130C200081040000E0000000015
-:10DE80008F6200581642000430C600FF9742011A04
-:10DE90005040000134C6001093C500088FA700341D
-:10DEA0000200202100052B0034A500800E000C9BF1
-:10DEB00030A5F0808F620040005610231840001BF0
-:10DEC0008FA200183C0208008C42319830420010AA
-:10DED0001040000D24020001976200681440000AFF
-:10DEE000240200018F8200149442011C1440000699
-:10DEF00024020001A76200689742007A244200646D
-:10DF00000A000EE9A7620012A76200120E001302B7
-:10DF1000020020219362007D2403000102002021E1
-:10DF2000344200010A000EE7AFA300501840000A77
-:10DF3000000000000E001302020020219362007D09
-:10DF40002403000102002021AFA30050344200044A
-:10DF50000E00130BA362007D9362003E304200402E
-:10DF60001440000C326200011040000A0000000062
-:10DF70008F6300408FC20004240400182463000152
-:10DF80000040F809AF6300408FA200300A000F3054
-:10DF9000304200048F620058105200100000000050
-:10DFA0008F620018022210231C4000082404000184
-:10DFB0008F62001816220009000000008F62001C0A
-:10DFC000028210230440000500000000AF720058D8
-:10DFD000AFA40050AF710018AF74001C12E0000B2A
-:10DFE0008FA200500E00130202002021A377003FF1
-:10DFF0000E00130B0200202102E030212404003720
-:10E000000E0013C9000028218FA200501040000309
-:10E01000000000000E000CA90200202112A0000543
-:10E02000000018218FA2003030420004504000113F
-:10E0300000601021240300010A000F30006010214D
-:10E040000E001302020020219362007D02002021B5
-:10E05000344200040E00130BA362007D0E000CA9D5
-:10E06000020020210A000F3024020001AF400044CA
-:10E07000240200018FBF007C8FBE00788FB7007430
-:10E080008FB600708FB5006C8FB400688FB30064DA
-:10E090008FB200608FB1005C8FB0005803E00008C1
-:10E0A00027BD00808F4201B80440FFFE2402080013
-:10E0B000AF4201B803E00008000000003C02000885
-:10E0C00003421021944200483084FFFF2484001250
-:10E0D0003045FFFF10A0001700A4102B10400016C1
-:10E0E00024020003934201202403001AA343018B5E
-:10E0F000304200FF2446FFFE8F82000000A6182B4E
-:10E100003863000100021382004310241040000510
-:10E110008F84000434820001A746019403E00008C4
-:10E12000AF8200042402FFFE0082102403E00008F6
-:10E13000AF8200042402000303E00008A342018B25
-:10E1400027BDFFE0AFB10014AFB00010AFBF0018A3
-:10E1500030B0FFFF30D1FFFF8F4201B80440FFFE17
-:10E1600000000000AF440180AF4400200E000F42C9
-:10E17000020020218F8300008F840004A750019AA1
-:10E18000A750018EA74301908F8300083082800042
-:10E19000AF4301A8A75101881040000E8F820004F0
-:10E1A00093420116304200FC24420004005A102120
-:10E1B0008C4240003042FFFF144000068F82000472
-:10E1C0003C02FFFF34427FFF00821024AF82000434
-:10E1D0008F8200042403BFFF00431024A74201A63E
-:10E1E0009743010C8F42010400031C003042FFFFE3
-:10E1F00000621825AF4301AC3C021000AF4201B8E9
-:10E200008FBF00188FB100148FB0001003E000081A
-:10E2100027BD00208F470070934201128F830000BA
-:10E2200027BDFFF0304200FF00022882306201006B
-:10E23000000030211040004324A40003306240005D
-:10E24000104000103062200000041080005A10219D
-:10E250008C43400024A4000400041080AFA30000FD
-:10E26000005A10218C424000AFA2000493420116D4
-:10E27000304200FC005A10218C4240000A000FC0BE
-:10E28000AFA200081040002F0000302100041080D1
-:10E29000005A10218C43400024A400040004108084
-:10E2A000AFA30000005A10218C424000AFA000082C
-:10E2B000AFA200048FA80008000030210000202138
-:10E2C000240A00083C0908002529010003A41021A4
-:10E2D000148A000300042A001100000A0000000054
-:10E2E00090420000248400012C83000C00A2102125
-:10E2F00000021080004910218C4200001460FFF3DE
-:10E3000000C230263C0408008C8431048F42007027
-:10E310002C83002010600009004738233C030800CC
-:10E32000246331080004108000431021248300017D
-:10E33000AC4700003C010800AC233104AF86000864
-:10E340002406000100C0102103E0000827BD0010D2
-:10E350003C0208008C42003827BDFFD0AFB5002436
-:10E36000AFB40020AFB10014AFBF0028AFB3001CA2
-:10E37000AFB20018AFB00010000088213C150800B3
-:10E3800026B50038144000022454FFFF0000A021ED
-:10E390009742010E8F8400003042FFFF308340001F
-:10E3A0001060000A245200043C0200200082102465
-:10E3B00050400007308280008F8200042403BFFF9A
-:10E3C000008318240A0010103442100030828000AC
-:10E3D0001040000A3C020020008210241040000778
-:10E3E0008F8200043C03FFFF34637FFF0083182407
-:10E3F00034428000AF820004AF8300000E000F980B
-:10E400000000000014400007000000009743011EB8
-:10E410009742011C3063FFFF0002140000621825C0
-:10E42000AF8300089742010C8F4340003045FFFF47
-:10E430003402FFFF14620003000000000A001028ED
-:10E44000241100208F42400030420100544000015E
-:10E45000241100108F8400003082100050400014FE
-:10E4600036310001308200201440000B3C021000C5
-:10E47000008210245040000E363100013C030E0093
-:10E480003C020DFF008318243442FFFF0043102B91
-:10E4900050400007363100013C0208008C42002C3D
-:10E4A000244200013C010800AC22002C363100055A
-:10E4B0003C0608008CC6003454C000238F85000041
-:10E4C0008F820004304240005440001F8F850000BE
-:10E4D0003C021F01008210243C0310005443001A28
-:10E4E0008F85000030A20200144000178F850000C5
-:10E4F0003250FFFF363100028F4201B80440FFFE68
-:10E5000000000000AF400180020020210E000F42F9
-:10E51000AF4000208F8300042402BFFFA750019A60
-:10E52000006218248F820000A750018EA751018835
-:10E53000A74301A6A74201903C021000AF4201B8D8
-:10E540000A0010F5000010213C02100000A2102467
-:10E550001040003A0000000010C0000F0000000052
-:10E5600030A201001040000C3C0302003C020F00EE
-:10E5700000A2102410430008000000008F82000851
-:10E58000005410240055102190420004244200043D
-:10E590000A00109F000221C00000000000051602C2
-:10E5A0003050000F3A0300022E4203EF38420001C0
-:10E5B0002C6300010062182414600073240200011F
-:10E5C0003C0308008C6300D02E06000C386200016A
-:10E5D0002C4200010046102414400015001021C0F8
-:10E5E0002602FFFC2C4200045440001100002021B0
-:10E5F000386200022C420001004610241040000343
-:10E60000000512420A00109F000020210010182B64
-:10E610000043102450400006001021C000002021BB
-:10E620003245FFFF0E000F633226FFFB001021C0B2
-:10E630003245FFFF0A0010F2362600028F424000EA
-:10E640003C0308008C630024304201001040004667
-:10E6500030620001322200043070000D14400002CC
-:10E660002413000424130002000512C238420001E2
-:10E670002E4303EF304200013863000100431025B0
-:10E68000104000033231FFFB2402FFFB0202802412
-:10E6900010C000183202000130A201001040001525
-:10E6A000320200013C020F0000A210243C030200D1
-:10E6B0001043000F8F8200082403FFFE0203802412
-:10E6C00000541024005510219042000402333025DC
-:10E6D0002442000412000002000221C03226FFFF83
-:10E6E0000E000F633245FFFF1200002700001021CB
-:10E6F000320200011040000D320200042402000129
-:10E7000012020002023330253226FFFF00002021D2
-:10E710000E000F633245FFFF2402FFFE0202802439
-:10E7200012000019000010213202000410400016EF
-:10E7300024020001240200041202000202333025E8
-:10E740003226FFFF3245FFFF0E000F632404010055
-:10E750002402FFFB020280241200000B00001021A3
-:10E760000A0010F5240200011040000700001021EB
-:10E770003245FFFF36260002000020210E000F6305
-:10E7800000000000000010218FBF00288FB500247A
-:10E790008FB400208FB3001C8FB200188FB100140B
-:10E7A0008FB0001003E0000827BD003027BDFFD068
-:10E7B000AFB000103C04600CAFBF002CAFB6002817
-:10E7C000AFB50024AFB40020AFB3001CAFB2001847
-:10E7D000AFB100148C8250002403FF7F3C1A8000EC
-:10E7E000004310243442380CAC8250002402000351
-:10E7F0003C106000AF4200088E0208083C1B8008F5
-:10E800003C010800AC2000203042FFF038420010EC
-:10E810002C4200010E001B85AF8200183C04FFFF54
-:10E820003C020400348308063442000CAE0219484E
-:10E83000AE03194C3C0560168E0219808CA30000B3
-:10E840003442020000641824AE0219803C02535383
-:10E850001462000334A47C008CA200040050202128
-:10E860008C82007C8C830078AF820010AF83000C18
-:10E870008F55000032A200031040FFFD32A20001BC
-:10E880001040013D32A200028F420128AF42002019
-:10E890008F4201048F430100AF8200000E000F3C45
-:10E8A000AF8300043C0208008C4200C01040000806
-:10E8B0008F8400003C0208008C4200C42442000106
-:10E8C0003C010800AC2200C40A00126900000000EC
-:10E8D0003C020010008210241440010C8F830004BD
-:10E8E0003C0208008C4200203C0308008C63003886
-:10E8F00000008821244200013C010800AC220020D5
-:10E900003C16080026D60038146000022474FFFF6D
-:10E910000000A0219742010E308340003042FFFFEB
-:10E920001060000A245200043C02002000821024DF
-:10E9300050400007308280008F8200042403BFFF14
-:10E94000008318240A0011703442100030828000C5
-:10E950001040000A3C0200200082102410400007F2
-:10E960008F8200043C03FFFF34637FFF0083182481
-:10E9700034428000AF820004AF8300000E000F9885
-:10E980000000000014400007000000009743011E33
-:10E990009742011C3063FFFF00021400006218253B
-:10E9A000AF8300089742010C8F4340003045FFFFC2
-:10E9B0003402FFFF14620003000000000A00118807
-:10E9C000241100208F4240003042010054400001D9
-:10E9D000241100108F840000308210005040001479
-:10E9E00036310001308200201440000B3C02100040
-:10E9F000008210245040000E363100013C030E000E
-:10EA00003C020DFF008318243442FFFF0043102B0B
-:10EA100050400007363100013C0208008C42002CB7
-:10EA2000244200013C010800AC22002C36310005D4
-:10EA30003C0608008CC6003454C000238F850000BB
-:10EA40008F820004304240005440001F8F85000038
-:10EA50003C021F01008210243C0310005443001AA2
-:10EA60008F85000030A20200144000178F8500003F
-:10EA70003250FFFF363100028F4201B80440FFFEE2
-:10EA800000000000AF400180020020210E000F4274
-:10EA9000AF4000208F8300042402BFFFA750019ADB
-:10EAA000006218248F820000A750018EA7510188B0
-:10EAB000A74301A6A74201903C021000AF4201B853
-:10EAC0000A001267000010213C02100000A210246E
-:10EAD0001040003A0000000010C0000F00000000CD
-:10EAE00030A201001040000C3C0302003C020F0069
-:10EAF00000A2102410430008000000008F820008CC
-:10EB000000541024005610219042000424420004B6
-:10EB10000A0011FF000221C00000000000051602DB
-:10EB20003050000F3A0300022E4203EF384200013A
-:10EB30002C63000100621824146000852402000187
-:10EB40003C0308008C6300D02E06000C38620001E4
-:10EB50002C4200010046102414400015001021C072
-:10EB60002602FFFC2C42000454400011000020212A
-:10EB7000386200022C42000100461024504000037D
-:10EB8000000512420A0011FF000020210010182B7E
-:10EB90000043102450400006001021C00000202136
-:10EBA0003245FFFF0E000F633226FFFB001021C02D
-:10EBB0003245FFFF0A001252362600028F42400003
-:10EBC0003C0308008C6300243042010010400046E2
-:10EBD00030620001322200043070000D1440000247
-:10EBE0002413000424130002000512C2384200015D
-:10EBF0002E4303EF3042000138630001004310252B
-:10EC0000104000033231FFFB2402FFFB020280248C
-:10EC100010C000183202000130A20100104000159F
-:10EC2000320200013C020F0000A210243C0302004B
-:10EC30001043000F8F8200082403FFFE020380248C
-:10EC40000054102400561021904200040233302555
-:10EC50002442000412000002000221C03226FFFFFD
-:10EC60000E000F633245FFFF120000390000102133
-:10EC7000320200011040000D3202000424020001A3
-:10EC800012020002023330253226FFFF000020214D
-:10EC90000E000F633245FFFF2402FFFE02028024B4
-:10ECA0001200002B00001021320200041040002846
-:10ECB0002402000124020004120200020233302563
-:10ECC0003226FFFF3245FFFF0E000F6324040100D0
-:10ECD0002402FFFB020280241200001D000010210C
-:10ECE0000A001267240200015040001900001021A0
-:10ECF0003245FFFF36260002000020210E000F6380
-:10ED0000000000000A001267000010212402BFFF6B
-:10ED1000006210241040000800000000240287FF59
-:10ED200000621024144000083C020060008210249D
-:10ED300010400005000000000E000D34000000002F
-:10ED40000A001267000000000E0012C70000000059
-:10ED5000104000063C0240008F4301243C0260202A
-:10ED6000AC430014000000003C024000AF420138F8
-:10ED70000000000032A200021040FEBD00000000B2
-:10ED80008F4201403C044000AF4200208F430148C5
-:10ED90003C02700000621824106400420000000071
-:10EDA0000083102B144000063C0260003C0220004F
-:10EDB000106200073C0240000A0012C3000000007D
-:10EDC0001062003C3C0240000A0012C30000000038
-:10EDD0008F4501408F4601448F42014800021402D2
-:10EDE000304300FF240200041462000A274401801B
-:10EDF0008F4201B80440FFFE2402001CAC850000D5
-:10EE0000A082000B3C021000AF4201B80A0012C3FE
-:10EE10003C0240002402000914620012000616029F
-:10EE2000000229C0AF4500208F4201B80440FFFE18
-:10EE30002402000124030003AF450180A343018B9A
-:10EE4000A740018EA740019AA7400190AF4001A8BA
-:10EE5000A7420188A74201A6AF4001AC3C021000C6
-:10EE6000AF4201B88F4201B80440FFFE000000002D
-:10EE7000AC8500008F42014800021402A482000801
-:10EE800024020002A082000B8F420148A4820010DD
-:10EE90003C021000AC860024AF4201B80A0012C345
-:10EEA0003C0240000E001310000000000A0012C3D4
-:10EEB0003C0240000E001BBA000000003C02400073
-:10EEC000AF420178000000000A00112F000000008E
-:10EED0008F4201003042003E144000112402000124
-:10EEE000AF4000488F420100304207C0104000058B
-:10EEF00000000000AF40004CAF40005003E00008AD
-:10EF000024020001AF400054AF4000408F42010096
-:10EF10003042380054400001AF4000442402000158
-:10EF200003E00008000000008F4201B80440FFFE2B
-:10EF300024020001AF440180AF400184A74501884D
-:10EF4000A342018A24020002A342018B9742014A94
-:10EF500014C00004A7420190AF4001A40A0012EFC0
-:10EF60003C0210008F420144AF4201A43C02100059
-:10EF7000AF4001A803E00008AF4201B88F4201B8DA
-:10EF80000440FFFE24020002AF440180AF4401842C
-:10EF9000A7450188A342018AA342018B9742014AF7
-:10EFA000A7420190AF4001A48F420144AF4201A8A3
-:10EFB0003C02100003E00008AF4201B83C029000A0
-:10EFC0003442000100822025AF4400208F420020FF
-:10EFD0000440FFFE0000000003E000080000000005
-:10EFE0003C028000344200010082202503E000083A
-:10EFF000AF44002027BDFFE8AFBF0014AFB0001042
-:10F000008F50014093430149934201489344014882
-:10F01000306300FF304200FF00021200006228252A
-:10F020002402001910620076308400802862001AE1
-:10F030001040001C24020020240200081062007707
-:10F04000286200091040000E2402000B2402000177
-:10F0500010620034286200025040000524020006BD
-:10F0600050600034020020210A00139A00000000C2
-:10F0700010620030020020210A00139A00000000F4
-:10F080001062003B2862000C504000022402000E77
-:10F090002402000910620056020020210A00139A7F
-:10F0A0000000000010620056286200211040000F8E
-:10F0B000240200382402001C106200582862001D3F
-:10F0C000104000062402001F2402001B1062004CA6
-:10F0D000000000000A00139A000000001062004ABD
-:10F0E000020020210A00139A00000000106200456F
-:10F0F0002862003910400007240200802462FFCB00
-:10F100002C42000210400045020020210A00139604
-:10F110000000302110620009000000000A00139A6C
-:10F12000000000001480003D020020210A0013901E
-:10F130008FBF00140A001396240600018F4201B805
-:10F140000440FFFE24020002A342018BA745018870
-:10F150009742014AA74201908F420144A74201927F
-:10F160003C021000AF4201B80A00139C8FBF00148C
-:10F170009742014A144000290000000093620005F4
-:10F180003042000414400025000000000E0013026D
-:10F190000200202193620005020020213442000475
-:10F1A0000E00130BA36200059362000530420004B9
-:10F1B00014400002000000000000000D93620000F7
-:10F1C00024030020304200FF14430014000000001C
-:10F1D0008F4201B80440FFFE24020005AF500180B9
-:10F1E000A342018B3C0210000A00139AAF4201B8FF
-:10F1F0008FBF00148FB000100A0012F227BD001854
-:10F200000000000D02002021000030218FBF0014FB
-:10F210008FB000100A0012DD27BD00180000000D9D
-:10F220008FBF00148FB0001003E0000827BD001846
-:10F2300027BDFFE8AFBF00100E000F3C000000002C
-:10F24000AF4001808FBF0010000020210A000FE7AF
-:10F2500027BD00183084FFFF30A5FFFF00001821F4
-:10F260001080000700000000308200011040000202
-:10F2700000042042006518210A0013AB0005284055
-:10F2800003E000080060102110C0000624C6FFFF44
-:10F290008CA2000024A50004AC8200000A0013B573
-:10F2A0002484000403E000080000000010A000080F
-:10F2B00024A3FFFFAC860000000000000000000057
-:10F2C0002402FFFF2463FFFF1462FFFA248400047A
-:10F2D00003E0000800000000308300FF30A500FFBD
-:10F2E00030C600FF274701808F4201B80440FFFE6F
-:10F2F000000000008F42012834634000ACE20000AF
-:10F3000024020001ACE00004A4E30008A0E2000A2B
-:10F3100024020002A0E2000B3C021000A4E5001051
-:10F32000ACE00024ACE00028A4E6001203E00008F2
-:10F33000AF4201B827BDFFE8AFBF00109362003FA6
-:10F3400024030012304200FF1043000D00803021E2
-:10F350008F620044008210230440000A8FBF001017
-:10F360008F620048240400390000282100C21023C5
-:10F3700004410004240600120E0013C9000000001E
-:10F380008FBF00102402000103E0000827BD001811
-:10F3900027BDFFC8AFB20030AFB1002CAFBF003403
-:10F3A000AFB0002890C5000D0080902130A400105F
-:10F3B0001080000B00C088218CC300088F620054AD
-:10F3C0001062000730A20005144000B524040001BB
-:10F3D0000E000D21000020210A0014BB0040202156
-:10F3E00030A200051040000930A30012108000ACCC
-:10F3F000240400018E2300088F620054146200A9C7
-:10F400008FBF00340A00142C240400382402001298
-:10F41000146200A3240400010220202127A500106B
-:10F420000E000CB2AFA000101040001102402021CD
-:10F430008E220008AF620084AF6000400E0013020D
-:10F44000000000009362007D024020213442002031
-:10F450000E00130BA362007D0E000CA902402021B8
-:10F46000240400382405008D0A0014B82406001274
-:10F470009362003E304200081040000F8FA200103F
-:10F4800030420100104000078FA300148F6200601B
-:10F490000062102304430008AF6300600A001441B7
-:10F4A00000000000AF6000609362003E2403FFF79D
-:10F4B00000431024A362003E9362003E30420008E5
-:10F4C000144000022406000300003021936200343F
-:10F4D000936300378F640084304200FF306300FF85
-:10F4E00000661821000318800043282100A4202B67
-:10F4F0001080000B000000009763003C8F620084C6
-:10F500003063FFFF004510230062182B14600004D5
-:10F51000000000008F6200840A00145D0045802313
-:10F520009762003C3050FFFF8FA300103062000450
-:10F5300010400004000628808FA2001C0A001465F9
-:10F540000202102B2E02021850400003240202185F
-:10F550000A00146E020510233063000410600003DB
-:10F56000004510238FA2001C00451023004080217D
-:10F570002C42008054400001241000800E00130231
-:10F580000240202124020001AF62000C9362003E81
-:10F59000001020403042007FA362003E8E22000413
-:10F5A00024420001AF620040A770003C8F6200500F
-:10F5B0009623000E00431021AF6200588F62005066
-:10F5C00000441021AF62005C8E220004AF6200187C
-:10F5D0008E220008AF62001C8FA20010304200088B
-:10F5E0005440000A93A20020A360003693620036C4
-:10F5F0002403FFDFA36200359362003E0043102422
-:10F60000A362003E0A0014988E220008A36200350F
-:10F610008E220008AF62004C8F6200248F6300408E
-:10F6200000431021AF6200489362000024030050A1
-:10F63000304200FF144300122403FF803C02080004
-:10F640008C4231A00242102100431024AF42002816
-:10F650003C0208008C4231A08E2400083C03000CC0
-:10F66000024210213042007F03421021004310214A
-:10F67000AC4400D88E230008AF820014AC4300DCF9
-:10F680000E00130B02402021240400380000282122
-:10F690002406000A0E0013C9000000002404000123
-:10F6A0008FBF00348FB200308FB1002C8FB0002894
-:10F6B0000080102103E0000827BD003827BDFFF8B7
-:10F6C00027420180AFA20000308A00FF8F4201B8BC
-:10F6D0000440FFFE000000008F4601283C020800A5
-:10F6E0008C4231A02403FF80AF86004800C2102165
-:10F6F00000431024AF4200243C0208008C4231A099
-:10F700008FA900008FA8000000C210213042007FA6
-:10F71000034218213C02000A00621821946400D4BC
-:10F720008FA700008FA5000024020002AF83001401
-:10F73000A0A2000B8FA30000354260003084FFFFC1
-:10F74000A4E200083C021000AD260000AD04000455
-:10F75000AC60002427BD0008AF4201B803E00008F8
-:10F76000240200018F88003C938200288F830014BC
-:10F770003C07080024E7777800481023304200FF58
-:10F78000304900FC246500888F860040304A000321
-:10F790001120000900002021248200048CA3000015
-:10F7A000304400FF0089102AACE3000024A50004C7
-:10F7B0001440FFF924E70004114000090000202153
-:10F7C0002482000190A30000304400FF008A102B27
-:10F7D000A0E3000024A500011440FFF924E7000184
-:10F7E00030C20003144000048F85003C3102000346
-:10F7F0001040000D0000000010A0000900002021B2
-:10F800002482000190C30000304400FF0085102BCB
-:10F81000A0E3000024C600011440FFF924E7000122
-:10F8200003E00008000000001100FFFD000020219F
-:10F83000248200048CC30000304400FF0088102B99
-:10F84000ACE3000024C600041440FFF924E70004E0
-:10F8500003E00008000000008F83003C9382002832
-:10F8600030C600FF30A500FF00431023304300FFE7
-:10F870008F820014008038210043102114C0000240
-:10F88000244800880083382130E20003144000053A
-:10F8900030A2000314400003306200031040000D4A
-:10F8A0000000000010A000090000202124820001B7
-:10F8B00090E30000304400FF0085102BA1030000FE
-:10F8C00024E700011440FFF92508000103E00008C7
-:10F8D0000000000010A0FFFD000020212482000491
-:10F8E0008CE30000304400FF0085102BAD030000C6
-:10F8F00024E700041440FFF92508000403E0000891
-:10F90000000000000080482130AAFFFF30C600FF41
-:10F9100030E7FFFF274801808F4201B80440FFFE17
-:10F920008F820048AD0200008F420124AD02000426
-:10F930008D220020A5070008A102000A240200165B
-:10F94000A102000B934301208D2200088D240004A6
-:10F95000306300FF004310219783003A00441021D8
-:10F960008D250024004310233C0308008C6331A044
-:10F970008F840014A502000C246300E82402FFFF1A
-:10F98000A50A000EA5030010A5060012AD0500187B
-:10F99000AD020024948201142403FFF73042FFFFDC
-:10F9A000AD0200288C820118AD02002C3C02100030
-:10F9B000AD000030AF4201B88D220020004310247A
-:10F9C00003E00008AD2200208F82001430E7FFFF23
-:10F9D00000804821904200D330A5FFFF30C600FFD1
-:10F9E0000002110030420F0000E238252748018054
-:10F9F0008F4201B80440FFFE8F820048AD02000034
-:10FA00008F420124AD0200048D220020A5070008CA
-:10FA1000A102000A24020017A102000B9343012057
-:10FA20008D2200088D240004306300FF0043102164
-:10FA30009783003A004410218F8400140043102360
-:10FA40003C0308008C6331A0A502000CA505000E44
-:10FA5000246300E8A5030010A5060012AD00001401
-:10FA60008D220024AD0200188C82005CAD02001CC7
-:10FA70008C820058AD0200202402FFFFAD0200245A
-:10FA8000948200E63042FFFFAD02002894820060BD
-:10FA9000948300BE30427FFF3063FFFF00021200FC
-:10FAA00000431021AD02002C3C021000AD000030DC
-:10FAB000AF4201B8948200BE2403FFF700A21021D8
-:10FAC000A48200BE8D2200200043102403E0000821
-:10FAD000AD220020274301808F4201B80440FFFE81
-:10FAE0008F8200249442001C3042FFFF000211C0AC
-:10FAF000AC62000024020019A062000B3C0210005E
-:10FB0000AC60003003E00008AF4201B88F87002CE2
-:10FB100030C300FF8F4201B80440FFFE8F820048CF
-:10FB200034636000ACA2000093820044A0A20005F0
-:10FB30008CE20010A4A20006A4A300088C8200207E
-:10FB40002403FFF7A0A2000A24020002A0A2000BD7
-:10FB50008CE20000ACA200108CE20004ACA2001405
-:10FB60008CE2001CACA200248CE20020ACA2002895
-:10FB70008CE2002CACA2002C8C820024ACA20018D9
-:10FB80003C021000AF4201B88C82002000431024D8
-:10FB900003E00008AC8200208F86001427BDFFE838
-:10FBA000AFBF0014AFB0001090C20063304200201D
-:10FBB0001040000830A500FF8CC2007C2403FFDF4A
-:10FBC00024420001ACC2007C90C2006300431024B8
-:10FBD000A0C2006310A000238F830014275001806F
-:10FBE000020028210E0015D6240600828F82001400
-:10FBF000904200633042004050400019A38000440E
-:10FC00008F83002C8F4201B80440FFFE8F82004892
-:10FC1000AE02000024026082A60200082402000254
-:10FC2000A202000B8C620008AE0200108C62000C75
-:10FC3000AE0200148C620014AE0200188C62001830
-:10FC4000AE0200248C620024AE0200288C620028E0
-:10FC5000AE02002C3C021000AF4201B8A380004469
-:10FC60008F8300148FBF00148FB000109062006368
-:10FC700027BD00183042007FA06200639782003ADF
-:10FC80008F86003C8F850014938300280046102344
-:10FC9000A782003AA4A000E490A400638F820040F1
-:10FCA000AF83003C2403FFBF0046102100832024C3
-:10FCB000AF820040A0A400638F820014A04000BD6A
-:10FCC0008F82001403E00008A44000BE8F8A001455
-:10FCD00027BDFFE0AFB10014AFB000108F88003C2B
-:10FCE000AFBF00189389001C954200E430D100FF9B
-:10FCF0000109182B0080802130AC00FF3047FFFF46
-:10FD00000000582114600003310600FF012030215B
-:10FD1000010958239783003A0068102B1440003CD7
-:10FD20000000000014680007240200018E02002079
-:10FD30002403FFFB34E7800000431024AE020020C0
-:10FD40002402000134E70880158200053165FFFFB9
-:10FD50000E001554020020210A00169102002021F5
-:10FD60000E001585020020218F8400482743018062
-:10FD70008F4201B80440FFFE24020018AC6400006A
-:10FD8000A062000B8F840014948200E6A46200102D
-:10FD90003C021000AC600030AF4201B894820060B9
-:10FDA00024420001A4820060948200603C030800A9
-:10FDB0008C63318830427FFF5443000F02002021C2
-:10FDC000948200602403800000431024A482006019
-:10FDD0009082006090830060304200FF000211C2F8
-:10FDE00000021027000211C03063007F0062182556
-:10FDF000A083006002002021022028218FBF00186C
-:10FE00008FB100148FB000100A0015F927BD002033
-:10FE1000914200632403FF8000431025A142006348
-:10FE20009782003A3048FFFF110000209383001CA6
-:10FE30008F840014004B1023304600FF948300E4AD
-:10FE40002402EFFF0168282B00621824A48300E439
-:10FE500014A000038E020020010058210000302170
-:10FE60002403FFFB34E7800000431024AE0200208F
-:10FE700024020001158200053165FFFF0E001554B4
-:10FE8000020020210A0016B99783003A0E0015855A
-:10FE9000020020219783003A8F82003CA780003A1D
-:10FEA00000431023AF82003C9383001C8F82001418
-:10FEB0008FBF00188FB100148FB0001027BD002035
-:10FEC00003E00008A04300BD938200442403000126
-:10FED00027BDFFE8004330042C420020AFB00010E3
-:10FEE000AFBF00142410FFFE10400005274501801D
-:10FEF0003C0208008C4231900A0016D600461024BD
-:10FF00003C0208008C423194004610241440000743
-:10FF1000240600848F8300142410FFFF9062006287
-:10FF20003042000F34420040A06200620E0015D63D
-:10FF300000000000020010218FBF00148FB00010DD
-:10FF400003E0000827BD00188F83002427BDFFE0D1
-:10FF5000AFB20018AFB10014AFB00010AFBF001CBB
-:10FF60009062000D00A0902130D100FF3042007F50
-:10FF7000A062000D8F8500148E4300180080802140
-:10FF80008CA2007C146200052402000E90A2006383
-:10FF9000344200200A0016FFA0A200630E0016C51E
-:10FFA000A38200442403FFFF104300472404FFFF03
-:10FFB00052200045000020218E4300003C0200102A
-:10FFC00000621024504000043C020008020020217E
-:10FFD0000A00170E24020015006210245040000988
-:10FFE0008E45000002002021240200140E0016C5D8
-:10FFF000A38200442403FFFF104300332404FFFFC7
-:020000040001F9
-:100000008E4500003C02000200A2102410400016A1
-:100010003C0200048F8600248CC200148CC30010A4
-:100020008CC40014004310230044102B50400005E2
-:10003000020020218E43002C8CC2001010620003AD
-:10004000020020210A00173F240200123C02000493
-:1000500000A210245040001C00002021020020219A
-:100060000A00173F2402001300A2102410400006CB
-:100070008F8300248C620010504000130000202168
-:100080000A001739020020218C6200105040000441
-:100090008E42002C020020210A00173F240200118A
-:1000A00050400009000020210200202124020017F6
-:1000B0000E0016C5A38200442403FFFF1043000274
-:1000C0002404FFFF000020218FBF001C8FB2001806
-:1000D0008FB100148FB000100080102103E00008E1
-:1000E00027BD00208F83001427BDFFD8AFB40020A8
-:1000F000AFB3001CAFB20018AFB10014AFB0001026
-:10010000AFBF0024906200638F91002C2412FFFF88
-:100110003442004092250000A06200638E2200104D
-:100120000080982130B0003F105200060360A021EB
-:100130002402000D0E0016C5A38200441052005484
-:100140002404FFFF8F8300148E2200188C63007C30
-:1001500010430007026020212402000E0E0016C585
-:10016000A38200442403FFFF104300492404FFFF3F
-:1001700024040020120400048F83001490620063A2
-:1001800034420020A06200638F85003410A000205C
-:1001900000000000560400048F8200140260202139
-:1001A0000A0017902402000A9683000A9442006015
-:1001B0003042FFFF144300048F8200202404FFFD1F
-:1001C0000A0017B7AF82003C3C0208008C42318C19
-:1001D0000045102B14400006026020210000282159
-:1001E0000E001646240600010A0017B70000202161
-:1001F0002402002D0E0016C5A38200442403FFFF35
-:10020000104300232404FFFF0A0017B70000202139
-:10021000160400058F8400148E2300142402FFFFAF
-:100220005062001802602021948200602442000184
-:10023000A4820060948200603C0308008C633188D3
-:1002400030427FFF5443000F0260202194820060FF
-:100250002403800000431024A48200609082006088
-:1002600090830060304200FF000211C2000210279C
-:10027000000211C03063007F00621825A083006077
-:10028000026020210E0015F9240500010000202144
-:100290008FBF00248FB400208FB3001C8FB20018D2
-:1002A0008FB100148FB000100080102103E000080F
-:1002B00027BD00288F83001427BDFFE8AFB00010D2
-:1002C000AFBF0014906200638F87002C00808021F4
-:1002D000344200408CE60010A06200633C0308003A
-:1002E0008C6331B030C23FFF0043102B1040004EF2
-:1002F0008F8500302402FF8090A3000D004310245E
-:10030000304200FF504000490200202100061382C5
-:10031000304800032402000255020044020020215C
-:1003200094A2001C8F85001424030023A4A20114AE
-:100330008CE60000000616023042003F1043001019
-:100340003C0300838CE300188CA2007C1062000642
-:100350002402000E0E0016C5A38200442403FFFFF2
-:10036000104300382404FFFF8F8300149062006361
-:1003700034420020A06200630A0017FC8F8300242F
-:1003800000C31024144300078F83002490A200624E
-:100390003042000F34420020A0A20062A38800383F
-:1003A0008F8300249062000D3042007FA062000D18
-:1003B0008F83003410600018020020218F840030E9
-:1003C0008C8200100043102B1040000924020018FA
-:1003D000020020210E0016C5A38200442403FFFF63
-:1003E000104300182404FFFF0A00182400002021F5
-:1003F0008C820010240500010200202100431023FC
-:100400008F830024240600010E001646AC62001003
-:100410000A001824000020210E0015F9240500010F
-:100420000A00182400002021020020212402000DCF
-:100430008FBF00148FB0001027BD00180A0016C52A
-:10044000A38200448FBF00148FB0001000801021E1
-:1004500003E0000827BD001827BDFFC8AFB2002089
-:10046000AFBF0034AFB60030AFB5002CAFB400283A
-:10047000AFB30024AFB1001CAFB000188F46012805
-:100480003C0308008C6331A02402FF80AF86004843
-:1004900000C318213065007F03452821006218241D
-:1004A0003C02000AAF43002400A2282190A200626F
-:1004B00000809021AF850014304200FF000211023D
-:1004C000A382003890A200BC304200021440000217
-:1004D00024030034240300308F820014A3830028F7
-:1004E000938300388C4200C0A3800044AF82003C5C
-:1004F00024020004106203148F84003C8E44000424
-:10050000508003118F84003C8E4200103083FFFF27
-:10051000A784003A106002F7AF8200408F84001475
-:100520002403FF809082006300621024304200FFA9
-:10053000144002C79785003A9383003824020002D2
-:1005400030B6FFFF14620005000088219382002866
-:100550002403FFFD0A001B11AF82003C8F82003C88
-:1005600002C2102B144002998F8400400E0014EC3C
-:1005700000000000938300283C040800248477785E
-:10058000240200341462002EAF84002C3C0A0800C0
-:100590008D4A77A82402FFFFAFA200100080382107
-:1005A0002405002F3C09080025297378240800FF42
-:1005B0002406FFFF90E2000024A3FFFF00062202B2
-:1005C00000C21026304200FF0002108000491021B6
-:1005D0008C420000306500FF24E7000114A8FFF5FD
-:1005E0000082302600061027AFA20014AFA2001030
-:1005F0000000282127A7001027A6001400C51023FB
-:100600009044000324A2000100A71821304500FFF8
-:100610002CA200041440FFF9A06400008FA2001077
-:100620001142000724020005024020210E0016C5D9
-:10063000A38200442403FFFF104300642404FFFF4F
-:100640003C0208009042777C104000098F82001421
-:10065000024020212402000C0E0016C5A382004493
-:100660002403FFFF104300592404FFFF8F8200146E
-:10067000A380001C3C0308008C63777C8C440080C2
-:100680003C0200FF3442FFFF006218240083202B4D
-:1006900010800008AF83003402402021240200199A
-:1006A0000E0016C5A38200442403FFFF1043004739
-:1006B0002404FFFF8F87003C9782003A8F85003427
-:1006C000AF8700200047202310A0003BA784003AFA
-:1006D0008F86001430A200030002102390C300BCD8
-:1006E0003050000300B0282100031882307300014D
-:1006F0000013108000A228213C0308008C6331A065
-:100700008F8200483084FFFF0085202B004310219A
-:1007100010800011244200888F84002C1082000E6B
-:100720003C033F013C0208008C42777800431024D0
-:100730003C0325001443000630E500FF8C820000D6
-:10074000ACC200888C8200100A0018E9ACC2009884
-:100750000E001529000030219382001C8F850014A3
-:100760008F830040020238218F82003CA387001C47
-:1007700094A400E4006218218F82003434841000B5
-:10078000AF83004000503021A4A400E41260000EAA
-:10079000AF86003C24E20004A382001C94A200E483
-:1007A00024C30004AF83003C34422000A4A200E430
-:1007B0000A001906000020218F820040AF80003C13
-:1007C00000471021AF820040000020212414FFFFC9
-:1007D000109402092403FFFF3C0808008D08778865
-:1007E0003C0208008C4231B03C03080090637778EB
-:1007F00031043FFF0082102B1040001B3067003F88
-:100800003C0208008C4231A88F83004800042180FC
-:1008100000621821006418213062007F0342282101
-:100820003C02000C00A228213C020080344200015E
-:100830003066007800C230252402FF800062102458
-:10084000AF42002830640007AF4208048F820014D2
-:100850000344202124840940AF460814AF850024B6
-:10086000AF840030AC4301189383003824020003A6
-:10087000146201C7240200012402002610E201C90B
-:1008800028E2002710400013240200322402002234
-:1008900010E201C428E200231040000824020024D2
-:1008A0002402002010E201B02402002110E2013FE6
-:1008B000024020210A001AF32402000B10E201B9C1
-:1008C0002402002510E20010024020210A001AF341
-:1008D0002402000B10E201A628E2003310400006BB
-:1008E0002402003F2402003110E200920240202145
-:1008F0000A001AF32402000B10E2019D024020219D
-:100900000A001AF32402000B8F90002C3C0308000D
-:100910008C6331B08F8500308E0400100000A82158
-:100920008CB3001430823FFF0043102B8CB10020A9
-:10093000504001870240202190A3000D2402FF8037
-:1009400000431024304200FF50400181024020212A
-:1009500000041382304200031440017D0240202134
-:1009600094A3001C8F8200148E040028A443011459
-:100970008CA20010026218231064000302402021A0
-:100980000A00197C2402001F8F82003400621021AB
-:100990000262102B104000088F83002402402021A7
-:1009A000240200180E0016C5A38200441054016CE6
-:1009B0002404FFFF8F8300248F8400348C62001096
-:1009C0000224882100441023AC6200108F8200149E
-:1009D000AC7100208C4200680051102B10400009BF
-:1009E0008F830030024020212402001D0E0016C516
-:1009F000A38200442403FFFF104301592404FFFF96
-:100A00008F8300308E0200248C6300241043000783
-:100A1000024020212402001C0E0016C5A3820044BF
-:100A20002403FFFF1043014E2404FFFF8F840024A2
-:100A30008C82002424420001AC8200241233000482
-:100A40008F8200148C4200685622000E8E02000035
-:100A50008E0200003C030080004310241440000D6F
-:100A60002402001A024020210E0016C5A382004471
-:100A70002403FFFF1043013A2404FFFF0A0019BAC0
-:100A80008E0200143C0300800043102450400003F9
-:100A90008E020014AC8000208E0200142411FFFF8F
-:100AA000105100062402001B024020210E0016C532
-:100AB000A38200441051012A2404FFFF8E0300008A
-:100AC0003C02000100621024104000123C02008031
-:100AD0000062102414400008024020212402001A61
-:100AE0000E0016C5A38200442403FFFF1043011C1F
-:100AF0002404FFFF02402021020028210E0016E5F9
-:100B0000240600012403FFFF104301152404FFFF06
-:100B1000241500018F83002402A0302102402021EF
-:100B20009462003624050001244200010A001AD70D
-:100B3000A46200368F90002C3C0308008C6331B017
-:100B40008E13001032623FFF0043102B10400089CB
-:100B50008F8400302402FF809083000D0043102416
-:100B6000304200FF104000842402000D0013138265
-:100B700030420003240300011443007F2402000DCF
-:100B80009082000D30420008544000048F820034EF
-:100B9000024020210A001A082402002450400004C8
-:100BA0008E03000C024020210A001A0824020027AC
-:100BB0008C82002054620006024020218E0300082F
-:100BC0008C820024506200098E0200140240202111
-:100BD000240200200E0016C5A382004410540071A8
-:100BE0002403FFFF0A001A3D8F8400242411FFFF15
-:100BF000145100048F860014024020210A001A3884
-:100C0000240200258E0300188CC2007C10620003B1
-:100C10002402000E0A001A38024020218E0300240C
-:100C20008C82002810620003240200210A001A3876
-:100C3000024020218E0500288C82002C10A2000387
-:100C40002402001F0A001A38024020218E03002CC3
-:100C500014600003240200230A001A3802402021F5
-:100C60008CC200680043102B1040000324020026B1
-:100C70000A001A38024020218C82001400651821D5
-:100C80000043102B104000088F84002402402021D4
-:100C9000240200220E0016C5A38200441051004118
-:100CA0002403FFFF8F8400242403FFF79082000DAC
-:100CB00000431024A082000D8F8600143C0308001E
-:100CC0008C6331AC8F82004894C400E08F8500248F
-:100CD0000043102130847FFF000420400044102195
-:100CE0003043007F034320213C03000E008320217A
-:100CF0002403FF8000431024AF42002CA493000083
-:100D00008CA2002824420001ACA200288CA2002C56
-:100D10008E03002C00431021ACA2002C8E02002C6C
-:100D2000ACA200308E020014ACA2003494A2003AAF
-:100D300024420001A4A2003A94C600E03C0208004C
-:100D40008C4231B024C4000130837FFF1462000F55
-:100D500000803021240280000082302430C2FFFF56
-:100D6000000213C2304200FF000210270A001A7668
-:100D7000000233C02402000D024020210E0016C5DF
-:100D8000A38200440A001A7C004018218F820014BC
-:100D900002402021240500010E0015F9A44600E0C0
-:100DA000000018210A001B0E006088218F90002C83
-:100DB0003C0308008C6331B08E05001030A23FFF69
-:100DC0000043102B104000612402FF808F8400300C
-:100DD0009083000D00431024304200FF5040005C1F
-:100DE000024020218F8200341040000B0005138246
-:100DF0008F8200149763000A944200603042FFFF24
-:100E000014430005000513828F8200202404FFFD97
-:100E10000A001AEBAF82003C304200031440000E7F
-:100E20000000000092020002104000058E03002422
-:100E300050600015920300030A001AA70240202107
-:100E40008C82002450620010920300030240202193
-:100E50000A001AAF2402000F9082000D30420008F1
-:100E60005440000992030003024020212402001094
-:100E70000E0016C5A38200442403FFFF1043003870
-:100E80002404FFFF92030003240200025462000CBA
-:100E9000920200038F820034544000099202000342
-:100EA000024020212402002C0E0016C5A38200441B
-:100EB0002403FFFF1043002A2404FFFF92020003D3
-:100EC0000200282102402021384600102CC60001D3
-:100ED0002C4200010E0016E5004630252410FFFFCD
-:100EE0001050001F2404FFFF8F8300341060001394
-:100EF000024020213C0208008C42318C0043102B20
-:100F00001440000700000000000028212406000112
-:100F10000E001646000000000A001AEB0000202117
-:100F20002402002D0E0016C5A38200441050000CB0
-:100F30002404FFFF0A001AEB000020210E0015F91F
-:100F4000240500010A001AEB0000202102402021A4
-:100F50002402000D0E0016C5A3820044004020218B
-:100F60000A001B0E008088211514000E00000000EE
-:100F70000E00174C024020210A001B0E0040882161
-:100F80000E0016C5A38200440A001B0E00408821F3
-:100F900014620017022018212402002314E2000525
-:100FA0002402000B0E0017C0024020210A001B0E75
-:100FB0000040882102402021A38200440E0016C573
-:100FC0002411FFFF0A001B0F0220182130A500FF8B
-:100FD0000E001529240600019783003A8F82003CF9
-:100FE000A780003A00431023AF82003C0220182162
-:100FF0001220003E9782003A2402FFFD5462003E18
-:101000008E4300208E4200048F830014005610236C
-:10101000AE420004906200633042007FA062006331
-:101020008E4200208F840014A780003A34420002D0
-:10103000AE420020A48000E4908200632403FFBF3E
-:1010400000431024A08200630A001B518E4300203D
-:101050009082006300621024304200FF10400023A1
-:101060009782003A90820088908300BD2485008892
-:101070003042003F2444FFE02C820020A383001C68
-:1010800010400019AF85002C2402000100821804D2
-:10109000306200191440000C3C028000344200020F
-:1010A000006210241440000B306200201040000F3A
-:1010B0009782003A90A600010240202124050001F9
-:1010C0000A001B4B30C60001024020210A001B4AC7
-:1010D00024050001024020210000282124060001EF
-:1010E0000E001646000000009782003A1440FD0CE6
-:1010F0008F8400148E4300203062000410400012E0
-:101100008F84003C2402FFFB00621024AE420020CA
-:10111000274301808F4201B80440FFFE8F820048C0
-:10112000AC6200008F420124AC62000424026083A0
-:10113000A462000824020002A062000B3C0210001E
-:10114000AF4201B88F84003C8F8300148FBF0034FE
-:101150008FB600308FB5002C8FB400288FB30024D9
-:101160008FB200208FB1001C8FB000182402000144
-:1011700027BD003803E00008AC6400C030A500FFC4
-:101180002403000124A900010069102B1040000C69
-:1011900000004021240A000100A31023004A380463
-:1011A00024630001308200010069302B10400002EE
-:1011B000000420420107402554C0FFF800A310237B
-:1011C00003E00008010010213C020800244260A452
-:1011D0003C010800AC22736C3C0208002442530816
-:1011E0003C010800AC2273702402000627BDFFE01A
-:1011F0003C010800A02273743C021EDCAFB2001850
-:10120000AFB10014AFBF001CAFB0001034526F413B
-:1012100000008821240500080E001B7202202021F6
-:10122000001180803C07080024E773780002160054
-:1012300002071821AC6200000000282124A200014E
-:101240003045FFFF8C6200002CA60008044100021C
-:10125000000220400092202614C0FFF8AC64000079
-:10126000020780218E0400000E001B72240500205E
-:10127000262300013071FFFF2E2301001460FFE5DB
-:10128000AE0200008FBF001C8FB200188FB1001497
-:101290008FB0001003E0000827BD002027BDFFD855
-:1012A000AFB3001CAFB20018AFBF0020AFB1001445
-:1012B000AFB000108F5101408F48014800089402E0
-:1012C000324300FF311300FF8F4201B80440FFFE9C
-:1012D00027500180AE1100008F420144AE0200048D
-:1012E00024020002A6120008A202000B240200142D
-:1012F000AE1300241062002528620015104000087B
-:101300002402001524020010106200302402001292
-:10131000106200098FBF00200A001CAD8FB3001CB3
-:101320001062007024020022106200378FBF00207C
-:101330000A001CAD8FB3001C3C0208008C4231A097
-:101340002403FF800222102100431024AF42002416
-:101350003C0208008C4231A0022210213042007F62
-:10136000034218213C02000A00621821166000BCEA
-:10137000AF830014906200623042000F34420030AC
-:10138000A06200620A001CAC8FBF00203C04600019
-:101390008C832C083C02F0033442FFFF00621824C7
-:1013A000AC832C083C0208008C4231A08C832C08B2
-:1013B000244200740002108200021480006218258A
-:1013C000AC832C080A001CAC8FBF00203C02080034
-:1013D0008C4231A02403FF800222102100431024FC
-:1013E000AF4200243C0208008C4231A03C03000ABA
-:1013F000022210213042007F0342102100431021BD
-:101400000A001CABAF8200143C0208008C4231A0E1
-:101410002405FF800222102100451024AF42002441
-:101420003C0208008C4231A0022210213042007F91
-:10143000034218213C02000A0062182190620063F6
-:1014400000A21024304200FF10400085AF8300143A
-:1014500024620088944300123C0208008C4231A8A8
-:1014600030633FFF00031980022210210043102146
-:101470003043007F03432021004510243C03000C2F
-:1014800000832021AF4200289082000D00A210248A
-:10149000304200FF10400072AF8400249082000DA3
-:1014A000304200101440006F8FBF00200E0015C89E
-:1014B000000000008F4201B80440FFFE0000000061
-:1014C000AE1100008F420144AE020004240200026B
-:1014D000A6120008A202000BAE1300240A001CACE6
-:1014E0008FBF00202406FF8002261024AF42002078
-:1014F0003C0208008C4231A031043FFF00042180EF
-:101500000222102100461024AF4200243C030800B0
-:101510008C6331A83C0208008C4231A03227007F46
-:101520000223182102221021006418213042007F7A
-:101530003064007F034228213C02000A0066182420
-:1015400000A22821034420213C02000C008220211B
-:10155000AF4300283C020008034718210062902195
-:10156000AF850014AF8400240E0015C8010080214F
-:101570008F4201B80440FFFE8F8200248F84001444
-:10158000274501809042000DACB10000A4B00006D8
-:10159000000216000002160300021027000237C2E4
-:1015A00014C00016248200889442001232033FFFC8
-:1015B00030423FFF14430012240260829083006394
-:1015C0002402FF8000431024304200FF5040000CF2
-:1015D00024026082908200623042000F3442004058
-:1015E000A082006224026084A4A200082402000DEC
-:1015F000A0A200050A001C963C022700240260827B
-:10160000A4A20008A0A000053C02270000061C00C0
-:101610000062182524020002A0A2000BACA3001057
-:10162000ACA00014ACA00024ACA00028ACA0002CFE
-:101630008E42004C8F840024ACA200189083000DD1
-:101640002402FF8000431024304200FF10400005B8
-:101650008FBF00209082000D3042007FA082000DDD
-:101660008FBF00208FB3001C8FB200188FB1001401
-:101670008FB000103C02100027BD002803E00008D6
-:04168000AF4201B8BC
-:0C1684000800343008003430080033A89F
-:10169000080033E0080034140800343808003438F7
-:0816A00008003438080033187B
-:0816A8000A000124000000000B
-:1016B000000000000000000D747061362E322E31E3
-:1016C0000000000006020101000000000000000010
-:1016D000000000000000000000000000000000000A
-:1016E00000000000000000000000000000000000FA
-:1016F00000000000000000000000000000000000EA
-:1017000000000000000000000000000000000000D9
-:1017100000000000000000000000000000000000C9
-:1017200000000000000000000000000000000000B9
-:101730000000000000000000000000001000000396
-:10174000000000000000000D0000000D3C02080039
-:1017500024421C003C03080024632094AC40000099
-:101760000043202B1480FFFD244200043C1D080090
-:1017700037BD2FFC03A0F0213C1008002610049078
-:101780003C1C0800279C1C000E00015C00000000AF
-:101790000000000D3084FFFF308200078F850018A5
-:1017A00010400002248300073064FFF800853021D8
-:1017B00030C41FFF03441821247B4000AF85001C68
-:1017C000AF84001803E00008AF4400843084FFFFBA
-:1017D000308200078F8500208F860028104000028D
-:1017E000248300073064FFF8008520210086182B31
-:1017F00014600002AF8500240086202303442821C2
-:1018000034068000AF840020AF44008000A6202171
-:1018100003E00008AF84003827BDFFD8AFB3001C39
-:10182000AFB20018AFB00010AFBF0024AFB40020BB
-:10183000AFB100143C0860088D1450002418FF7FDD
-:101840003C1A8000029898243672380CAD12500071
-:101850008F5100083C07601C3C08600036300001D6
-:10186000AF500008AF800018AF400080AF40008448
-:101870008CE600088D0F08083C0760168CEC000011
-:1018800031EEFFF039CA00103C0DFFFF340B800031
-:101890003C030080034B48212D440001018D282486
-:1018A0003C0253533C010800AC230420AF890038AC
-:1018B000AF860028AF840010275B400014A200030D
-:1018C00034E37C008CF90004032818218C7F007C11
-:1018D0008C6500783C0280003C0B08008D6B048C0A
-:1018E0003C0A08008D4A048834520070AF85003CE1
-:1018F000AF9F00403C13080026731C440240A02107
-:101900008E4800008F46000038C30001306400019B
-:1019100010800017AF880034028048218D2F00000E
-:101920003C0508008CA5045C3C1808008F1804587E
-:1019300001E8102300A280210000C8210202402BF0
-:1019400003198821022838213C010800AC30045CCE
-:101950003C010800AC2704588F4E000039CD00012F
-:1019600031AC00011580FFED01E04021AF8F003464
-:101970008E5100003C0708008CE7045C3C0D080019
-:101980008DAD04580228802300F0602100007021F2
-:101990000190302B01AE1821006620213C01080087
-:1019A000AC2C045C3C010800AC2404588F460108B0
-:1019B0008F47010030C92000AF860000AF87000CC0
-:1019C0001120000A00C040213C1808008F18042C88
-:1019D000270800013C010800AC28042C3C184000FA
-:1019E000AF5801380A000196000000009749010431
-:1019F00000002821014550213122FFFF01625821BA
-:101A00000162F82B015F502130D902003C0108002F
-:101A1000AC2B048C3C010800AC2A0488172000156C
-:101A200024040F0010E400130000000024080D003F
-:101A300010E8023B30CD000611A0FFE93C18400041
-:101A4000936E00002409001031C400F01089027167
-:101A500024020070108202E58F880014250F000117
-:101A6000AF8F00143C184000AF5801380A000196AF
-:101A700000000000974C01041180FFD93C18400081
-:101A800030C34000146000A1000000008F460178C0
-:101A900004C0FFFE8F87003824100800240F0008C0
-:101AA0008CE30008AF500178A74F0140A7400142E6
-:101AB000974E01048F86000031C9FFFF30CD000131
-:101AC00011A002E1012040212531FFFE241800026F
-:101AD000A75801463228FFFFA75101483C190800CA
-:101AE0008F39043C172002D08F8C000C30DF00208F
-:101AF00017E00002240400092404000130C20C0095
-:101B0000240504005045000134840004A744014A20
-:101B10003C1108008E3104203C1800483C100001A4
-:101B20000238182530CF00020070282511E000048B
-:101B3000000018213C19010000B9282524030001E8
-:101B400030DF000453E00005AF8300083C060010BE
-:101B500000A6282524030001AF830008AF4510002C
-:101B60000000000000000000000000000000000075
-:101B70008F83000810600023000000008F451000D4
-:101B800004A1FFFE000000001060001E0000000025
-:101B90008F4410003C0C0020008C102410400019D1
-:101BA0008F8E000031CD000211A000160000000051
-:101BB000974F101415E0001300000000975910080B
-:101BC0003338FFFF27110006001118820003308010
-:101BD00000C7282132300001322300031200032CF9
-:101BE0008CA200000000000D00C7F821AFE2000049
-:101BF0003C0508008CA5043024A600013C01080027
-:101C0000AC2604308F6D00003402FFFFAF8D00045E
-:101C10008CEC0000118202A6000020218CED000057
-:101C200031AC01001180028A000000003C02080073
-:101C30008C4204743C0308008C63044C3C1F080075
-:101C40008FFF04703C1808008F18044800483821A2
-:101C50000068802100E8282B03E430210208402B93
-:101C60000304882100C57021022878213C01080066
-:101C7000AC30044C3C010800AC2F04483C01080087
-:101C8000AC2704743C010800AC2E04708F8400184B
-:101C90000120302131290007249F000833F91FFF5C
-:101CA00003594021AF84001CAF990018251B400048
-:101CB000AF590084112000038F83002024C2000745
-:101CC0003046FFF88F84002800C3282100A4302B61
-:101CD00014C00002AF83002400A428230345602120
-:101CE000340D8000018D10213C0F1000AF850020C5
-:101CF000AF820038AF450080AF4F01788F88001465
-:101D0000250F00010A0001EFAF8F00148F62000859
-:101D10008F670000240500300007760231C300F011
-:101D2000106500A7240F0040546FFF4C8F880014EB
-:101D30008F4B01780560FFFE0000000030CA0200F2
-:101D400015400003000612820000000D00061282FA
-:101D5000304D0003000D4900012D18210003808043
-:101D6000020D402100086080019380218E1F000039
-:101D700017E00002000000000000000D8F6E00045C
-:101D800005C202BD92070006920E000592020004F1
-:101D90003C090001000E18800070F8218FED00183A
-:101DA000277100082448000501A96021000830823D
-:101DB000AFEC0018022020210E00059E260500141D
-:101DC000920A00068F7900043C0B7FFF000A2080F6
-:101DD000009178218DF800043566FFFF0326282442
-:101DE00003053821ADE70004920E0005920D0004B2
-:101DF000960C0008000E10800051C8218F230000AF
-:101E0000974901043C07FFFF006758243128FFFF72
-:101E1000010DF82103EC50233144FFFF016430250C
-:101E2000AF26000092030007241800011078027505
-:101E3000240F0003106F0285000000008E050010C3
-:101E40002419000AA7590140A7450142921800042D
-:101E50008F860000240F0001A7580144A7400146C7
-:101E60009747010430D100023C050041A7470148D3
-:101E700000001821A74F014A1220000330CB0004B4
-:101E80003C0501412403000151600005AF830008B7
-:101E90003C06001000A6282524030001AF8300089B
-:101EA000AF4510000000000000000000000000002E
-:101EB000000000008F8A00081140000400000000AC
-:101EC0008F4410000481FFFE000000008F6B0000B3
-:101ED000920800043C1108008E310444AF8B0004CA
-:101EE00097590104311800FF3C0E08008DCE0440C4
-:101EF0003325FFFF03053821022760210000102150
-:101F0000250F000A31E8FFFF0187482B01C2682135
-:101F100001A9F821311000073C010800AC2C044451
-:101F20003C010800AC3F0440120000038F8C0018F5
-:101F30002506000730C8FFF8010C682131BF1FFFDC
-:101F4000AF8C001CAF9F0018AF5F00849744010462
-:101F5000035F80213084FFFF308A000711400003B7
-:101F6000261B4000248900073124FFF88F820020BF
-:101F70008F850028008220210085702B15C000026B
-:101F8000AF820024008520233C0B08008D6B048C5D
-:101F90003C0A08008D4A04880344882134038000E9
-:101FA000022310213C0F1000AF840020AF820038C4
-:101FB000AF440080AF4F01780A0002968F8800146A
-:101FC0008F5001780600FFFE30D10200162000037A
-:101FD000000612820000000D00061282305F00032E
-:101FE000001F1900007F302100062080009FC821BB
-:101FF00000194880013380218E1800001300000270
-:10200000000000000000000D8F6C000C058001FB3B
-:102010008F870038240E0001AE0E00008CE300080C
-:10202000A20000078F65000400055402314D00FF37
-:1020300025A80005000830822CCB00411560000265
-:10204000A20A00040000000D8F7800043C03FFFF8B
-:1020500000E02821330BFFFF256C000B000C1082E1
-:1020600000022080008748218D3F000026040014D4
-:10207000A618000803E3C8240E00059EAD39000031
-:102080008F4F01083C11100001F1382410E001AB22
-:1020900000000000974D01049208000725AAFFECFC
-:1020A000350600023144FFFFA2060007960600082D
-:1020B0002CC7001354E0000592030007921100079B
-:1020C000362F0001A20F0007920300072418000119
-:1020D000107801C224090003106901D58F880038E7
-:1020E00030CBFFFF257100020011788331E400FF3F
-:1020F00000042880A20F000500A848218D2D0000B3
-:10210000974A01043C0EFFFF01AEF8243143FFFF64
-:10211000006B1023244CFFFE03ECC825AD390000F2
-:10212000920600053C03FFF63462FFFF30D800FF43
-:102130000018388000F08821922F00143C04FF7FA3
-:102140003487FFFF31EE000F01C65821316500FFD3
-:1021500000055080015068218DAC00200148F82115
-:10216000A20B00060182C824AE0C000CAFF9000CD3
-:10217000920900068E11000C032778240009C08004
-:102180000310702195C60026030828210227202469
-:10219000AE04000CADCF0020ADC60024ACA60010EC
-:1021A0008F8800003C0B08008D6B048C3C0A0800F3
-:1021B0008D4A0488241F001024190002A75F0140E3
-:1021C000A7400142A7400144A7590146974901048D
-:1021D00024070001310600022538FFFEA7580148F8
-:1021E0003C050009A747014A10C000030000182160
-:1021F0003C05010924030001310C00045180000555
-:10220000AF8300083C08001000A828252403000123
-:10221000AF830008AF451000000000000000000080
-:1022200000000000000000009205000424AE00023F
-:1022300031CD0007000D182330620007AE020010F8
-:102240008F90000812000004000000008F4F100063
-:1022500005E1FFFE000000008F7100008F8E001866
-:102260003C0308008C630444AF91000497450104CB
-:1022700025CF001031E61FFF30A2FFFFAF8E001CFC
-:10228000AF860018AF4600842449FFFE3C0C0800CE
-:102290008D8C0440974D010401208021000947C323
-:1022A0000070C02131A9FFFF0310F82B0188C8215D
-:1022B000033F202103463821313100073C0108004B
-:1022C000AC3804443C010800AC2404401220000354
-:1022D00024FB40002527000730E9FFF88F86002007
-:1022E0008F8400280126382100E4C02B170000024B
-:1022F000AF86002400E438230347202134198000EE
-:10230000009910213C0F1000AF870020AF820038E9
-:10231000AF470080AF4F01780A0002968F88001403
-:102320009747010410E0FDAE3C1840008F5801783B
-:102330000700FFFE30C5400010A000033C1F00084E
-:102340000000000D3C1F0008AF5F01402410080092
-:102350008F860000AF5001789744010430D9000106
-:10236000132000ED3086FFFF24CCFFFE240D000279
-:10237000A74D0146A74C01488F9100182408000D75
-:10238000A748014A8F630000262F000831E21FFF93
-:102390000342702130C90007AF830004AF91001CD5
-:1023A000AF82001800C03821AF4200841120000322
-:1023B00025DB400024D800073307FFF88F85002075
-:1023C0008F84002800E5302100C4382B14E000027F
-:1023D000AF85002400C430238F8400140346F82105
-:1023E000340C8000AF86002003EC8021AF460080D3
-:1023F000249900013C0610003C184000AF460178CB
-:10240000AF900038AF990014AF5801380A00019618
-:10241000000000008F630000975101043067FFFF48
-:102420003228FFFF8F4F017805E0FFFE30EC0007F8
-:10243000000CF82333F0000724F9FFFE2404000AFF
-:10244000A7440140A7500142A7590144A7400146B3
-:10245000A74801488F45010830B800201700000246
-:10246000240300092403000130CD0002A743014AE0
-:102470003C04004111A00003000018213C0401416C
-:102480002403000130C9000451200005AF83000877
-:102490003C0600100086202524030001AF830008BD
-:1024A000AF44100000000000000000000000000029
-:1024B000000000008F8E000811C000040000000022
-:1024C0008F4210000441FFFE000000008F7F0000DB
-:1024D000276400088F91003CAF9F0004948500089A
-:1024E0009490000A9499000C30AFFFFF0010C400D4
-:1024F0003323FFFF11F100A6030320253C0E080043
-:102500008DCE04443C0C08008D8C044000E88821EA
-:102510002626FFFE01C628210000682100A6F82B10
-:10252000018D2021009F80213C010800AC2504443E
-:102530003C010800AC30044024E200083042FFFFB8
-:102540003047000710E000038F830018244F000776
-:1025500031E2FFF83106FFFF30C800070043802159
-:1025600032191FFF0359C021AF83001CAF99001817
-:10257000271B4000AF590084110000038F8C0020FE
-:1025800024C5000730A6FFF88F84002800CC28213E
-:1025900000A4F82B17E00002AF8C002400A428232D
-:1025A000AF850020AF4500803C0408008C840434D3
-:1025B00003454821340E8000012E6821108000055B
-:1025C000AF8D0038939100172406000E12260011DB
-:1025D0002407043F3C021000AF4201788F880014AA
-:1025E000250F00010A0001EFAF8F00140E0005C493
-:1025F00000E020218F8800143C0B08008D6B048CB8
-:102600003C0A08008D4A0488250F00010A0001EFEA
-:10261000AF8F00143C021000A7470148AF42017879
-:102620000A0004CE8F88001424040F001184003D9A
-:1026300030CE002015C0000224030009240300014D
-:102640000A00021AA743014A0A00020DA7400146E8
-:1026500094EF000894F1000A94F0000C8F8C003C79
-:10266000001174003207FFFF31EDFFFF11AC00379E
-:1026700001C720253C1808008F1804443C0F0800AF
-:102680008DEF0440000080210308682101A8382B49
-:1026900001F0702101C760213C010800AC2D044409
-:1026A0003C010800AC2C04400A00027A8F84001818
-:1026B0003C0208008C42047C3C0308008C630454F8
-:1026C0003C1F08008FFF04783C1808008F18045046
-:1026D000004838210068802100E8282B03E43021DD
-:1026E0000208402B0304882100C5702102287821AC
-:1026F0003C010800AC3004543C010800AC2F0450ED
-:102700003C010800AC27047C3C010800AC2E047896
-:102710000A00027A8F840018A74001460A00043597
-:102720008F91001830CD002015A0FFC52403000DA7
-:10273000240300050A00021AA743014A974E010428
-:1027400025C5FFF00A00038130A4FFFF8F980040E9
-:102750001498FFC8000010213C0508008CA5046CEB
-:102760003C1F08008FFF046800A8C8210328302BF5
-:1027700003E22021008640213C010800AC39046CB2
-:102780003C010800AC2804680A00027A8F84001813
-:102790008F8C0040148CFF5900E8C8213C180800B9
-:1027A0008F18046C3C1108008E3104682723FFFE4B
-:1027B00003034821000010210123302B0222702145
-:1027C00001C668213C010800AC29046C3C010800EA
-:1027D000AC2D04680A0004A524E200088F880038A4
-:1027E0003C03FFFF8D02000C0043F82403E4C825DE
-:1027F000AD19000C0A00038F30CBFFFF0A0003C3A2
-:10280000AE000000974A0104920400048E26000CDA
-:10281000014458212579FFF200C7C0243325FFFF6A
-:1028200003053825AE27000C0A0002E68E050010CD
-:102830003C0DFFFF8D0A0010014D582401646025F6
-:10284000AD0C00100A00038F30CBFFFF974301044B
-:10285000920E00048E290010006E1021244DFFEE10
-:102860000127602431A8FFFF0188F825AE3F001042
-:102870000A0002E68E0500108E0F000CAE0000006C
-:1028800000078880023028210A0002B8ACAF00207F
-:102890001460000D3058FFFF3C04FFFF0044682423
-:1028A00001A47026000E602B000D102B004CF824A4
-:1028B00013E00002000000000000000D8CAF0000DB
-:1028C0000A00025001E410253B03FFFF0003882BA0
-:1028D0000018802B0211202410800002000000004C
-:1028E0000000000D8CB900000A0002503722FFFFE3
-:1028F0003084FFFF30A5FFFF108000070000182183
-:1029000030820001104000020004204200651821BE
-:102910001480FFFB0005284003E000080060102140
-:1029200010C00007000000008CA2000024C6FFFFBA
-:1029300024A50004AC82000014C0FFFB2484000422
-:1029400003E000080000000010A0000824A3FFFF1F
-:10295000AC86000000000000000000002402FFFF21
-:102960002463FFFF1462FFFA2484000403E00008DC
-:1029700000000000308EFFFF30D8FFFF00057C0014
-:1029800001F8602539CDFFFF01AC5021014C582BD7
-:10299000014B4821000944023127FFFF00E83021A4
-:1029A0000006240230C5FFFF00A418213862FFFF93
-:1029B00003E000083042FFFF3C0C08008D8C0484CB
-:1029C000240BFF8027BDFFD001845021014B4824F8
-:1029D000AF4900203C0808008D080484AFB20020F5
-:1029E000AFB00018AFBF0028AFB30024AFB1001CD8
-:1029F000936600040104382130E4007F009A10211E
-:102A00003C0300080043902130C500200360802172
-:102A10003C080111277B000814A000022646007024
-:102A20002646006C9213000497510104920F000493
-:102A30003267000F322EFFFF31ED004001C728231F
-:102A400011A0000500004821925900BC3338000451
-:102A50001700009000000000924300BC307F00048B
-:102A600013E0000F0000000010A0000D00000000A7
-:102A7000960E0002240AFF8000A7602125CDFFFEEC
-:102A8000A74D1016920B0004014B2024308200FF4A
-:102A900010400085010C40253C0F0400010F40252B
-:102AA0008F5301780660FFFE2404000AA74401400A
-:102AB000960D00022404000931AC0007000C5823D5
-:102AC000316A0007A74A0142960200022443FFFE32
-:102AD000A7430144A7400146975F0104A75F01484F
-:102AE0008F590108333800205300000124040001ED
-:102AF000920F000431EE001015C000023483001064
-:102B000000801821A743014A0000000000000000D7
-:102B10000000000000000000AF48100000000000AE
-:102B20000000000000000000000000008F511000B5
-:102B30000621FFFE3113FFFF1260000300000000BA
-:102B40008F481018ACC8000096030006307FFFFFC6
-:102B500027F900020019988200138880023B302177
-:102B60008CD800001520005700183402920300048E
-:102B70002405FF8000A3F82433F100FF1220002C6D
-:102B800000000000924700BC30F200021240002812
-:102B900000000000974B100C2562FFFEA7421016A4
-:102BA000000000003C0A040035490030AF49100025
-:102BB0000000000000000000000000000000000015
-:102BC0008F4C10000581FFFE000000009749100C9B
-:102BD0008F51101C00C020213127FFFF24F200304C
-:102BE000001218820003288000BBF8213226FFFF64
-:102BF000AFF100000E0005B300112C020013C880D5
-:102C0000033B98218E78000000027400AFB80010DA
-:102C10008FA80010310FFFFFAFAF00108FA400107E
-:102C200001C46825AFAD00108FA60010AE6600008D
-:102C300097730008976D000A9766000C8F8A003C16
-:102C4000000D5C0030CCFFFF3262FFFF104A0036FF
-:102C5000016C2025960600023C10100024D30008C9
-:102C60000E00013B3264FFFF974C01040E00014946
-:102C70003184FFFFAF5001788FBF00288FB300244D
-:102C80008FB200208FB1001C8FB0001803E0000845
-:102C900027BD003010A0FF700000000024A5FFFC3D
-:102CA0000A0005EC240900048CD10000AF51101873
-:102CB0008F5301780660FF7A2404000A0A00060197
-:102CC0000000000000A7C8218F8800388F4E101C1C
-:102CD0000019C0820018788001E82021AC8E000025
-:102CE000000E2C0200C020210E0005B331C6FFFFEC
-:102CF000023B28218CAD000000025400004030212E
-:102D0000AFAD00108FAC0010318BFFFFAFAB0010E8
-:102D10008FA2001001424825AFA900108FA7001014
-:102D20000A000631ACA700008F8F0040148FFFC946
-:102D30000000000097420104960B00023C050800C9
-:102D40008CA5046C3049FFFF316AFFFF3C1108007D
-:102D50008E310468012A382124F2FFFE00B240219E
-:102D60000012FFC30112C82B023FC021031920210A
-:102D70003C010800AC28046C3C010800AC24046849
-:102D80000A00066B0000000000A4102B1040000990
-:102D9000240300010005284000A4102B04A0000318
-:102DA000000318405440FFFC000528401060000755
-:102DB000000000000085302B14C000020003184200
-:102DC000008520231460FFFB0005284203E0000873
-:102DD000008010218F85002C27BDFFE800053027DB
-:102DE0002CC300012CA40002008310251040000316
-:102DF000AFBF00102405007FAF85002C00052827F9
-:102E000030A5FFFF0E000592240426F58F830030C5
-:102E1000240402BD004030210083382B10E000095B
-:102E200024050001000420400083102B04800003CF
-:102E3000000528405440FFFC0004204010A000087A
-:102E400000C350210064402B1500000200052842F9
-:102E50000064182314A0FFFB0004204200C350218B
-:102E60008FBF0010000A4C02312200FF27BD00185E
-:0C2E7000AF8A002C03E00008AF8900309E
-:042E7C000A00002A1E
-:102E800000000000000000000000000D74787036A3
-:102E90002E322E310000000006020100000000006A
-:102EA000000001360000EA600000000000000000A1
-:102EB0000000000000000000000000000000000012
-:102EC0000000000000000000000000000000000002
-:102ED00000000000000000000000000000000016DC
-:102EE00000000000000000000000000000000000E2
-:102EF00000000000000000000000000000000000D2
-:102F000000000000000000000000000000000000C1
-:102F1000000000000000138800000000000005DC35
-:102F2000000000000000000010000003000000008E
-:102F30000000000D0000000D3C02080024423C206F
-:102F40003C03080024633DD4AC4000000043202B28
-:102F50001480FFFD244200043C1D080037BD7FFCA7
-:102F600003A0F0213C100800261000A83C1C08001B
-:102F7000279C3C200E0002BA000000000000000D5B
-:102F80008F8300383C088000350700708CE5000016
-:102F9000008330253C02900000C22025AF85003020
-:102FA000AF4400208F4900200520FFFE3C03800035
-:102FB000346200708C4500008F8600303C19080098
-:102FC0008F39007C3C0E08008DCE007800A62023AF
-:102FD00003245821000078210164682B01CF60216F
-:102FE000018D50213C010800AC2B007C3C01080005
-:102FF000AC2A007803E00008000000000A0000414D
-:10300000240400018F8400383C05800034A20001B4
-:103010000082182503E00008AF43002003E0000809
-:10302000000010213084FFFF30A5FFFF1080000753
-:1030300000001821308200011040000200042042EC
-:10304000006518211480FFFB0005284003E00008FC
-:103050000060102110C00007000000008CA20000DA
-:1030600024C6FFFF24A50004AC82000014C0FFFBAF
-:103070002484000403E000080000000010A0000801
-:1030800024A3FFFFAC860000000000000000000049
-:103090002402FFFF2463FFFF1462FFFA248400046C
-:1030A00003E0000800000000308AFFFF93A800132F
-:1030B000A74A014497490E1630C600FF3C02100093
-:1030C000A7490146AF450148A3460152A748015A06
-:1030D000AF4701608FA400188FA30014A7440158C4
-:1030E000AF43015403E00008AF42017803E0000859
-:1030F000000000003C038000346200708C49000036
-:103100008F8800002484000727BDFFF83084FFF873
-:10311000AF890030974D008A31ACFFFFAFAC0000A3
-:103120008FAB0000016850232547FFFF30E61FFFEB
-:1031300000C4282B14A0FFF73C0C8000358B0070D6
-:103140008D6A00003C0708008CE700843C060800FC
-:103150008CC6008000081082014918230002788084
-:1031600000E370210000202101C3C82B00C4C0214E
-:1031700001FA4021031948212502400027BD00081B
-:103180003C010800AC2E00843C010800AC29008002
-:1031900003E00008000000008F8200002486000782
-:1031A00030C5FFF800A2182130641FFF03E00008BB
-:1031B000AF8400008F8700388F8A004027BDFFB89A
-:1031C0008F860044AFB60040AFBF0044AFB5003CAF
-:1031D000AFB40038AFB30034AFB20030AFB1002CA1
-:1031E000AFB000288F4501048D4900ACAF47008087
-:1031F0008CC8002000A938230000B021AF480E1071
-:103200008F440E1000004821AF440E148CC20024DD
-:10321000AF420E188F430E18AF430E1C10E001256D
-:103220002D230001936B0008116000D40000000002
-:10323000976E001031CDFFFF00ED602B158000CFA1
-:103240000000000097700010320FFFFFAF4F0E001C
-:103250008F520000325100081220FFFD00000000D4
-:1032600097540E088F460E043285FFFF30B30001DD
-:1032700012600132000000000000000D30B8A040D4
-:1032800024150040131500C030A9A0001120012D05
-:1032900000000000937F000813E000080000000019
-:1032A00097630010306BFFFF00CB402B1100000331
-:1032B00030AC00401180012300000000A785003CD5
-:1032C000AF8600349366000800E02821AFA70020F5
-:1032D00014C0012427B30020AF60000C9782003C8B
-:1032E0003047400014E00002240300162403000EBF
-:1032F00024194007A363000AAF790014938A003EA3
-:103300008F740014315800070018AA4002959025C8
-:10331000AF7200149784003C8F700014309100103D
-:1033200002117825AF6F0014978E003C31CD000854
-:1033300011A00147000028218F6700143C021000F3
-:103340003C0C810000E22825AF65001497460E0A68
-:103350002408000E3405FFFC30C3FFFF006C582525
-:10336000AF6B0004A3680002937F000A27E9000402
-:10337000A369000A9786003C9363000A30CC1F00C3
-:10338000000C598301634021251F0028A37F0009F9
-:1033900097490E0CA769001093790009272A0002AB
-:1033A000315800070018A82332B10007A371000BA1
-:1033B00093740009976400108F910034978F003C3C
-:1033C000329200FF024480210205702131ED00405D
-:1033D00011A0000531C4FFFF0091282B3C12800092
-:1033E00010A000140000A0210224382B14E0011BBF
-:1033F0008FA500208F4D0E14AF4D0E108F420E1C66
-:10340000AF420E18AF440E008F4F000031EE00089F
-:1034100011C0FFFD0000000097540E0800808821B5
-:1034200000009021A794003C8F500E04241400014A
-:10343000AF900034976400103095FFFF8E68000055
-:103440000111F82317E00009AE7F00008F6500141A
-:103450008F8B004434A60040AF6600148F4C0E10D2
-:10346000AD6C00208F430E18AD63002493670008F5
-:1034700014E000D2000000000E00009E24040010A2
-:103480008F8900483C08320000402821312600FF87
-:103490000006FC0003E8502525390001AF990048DB
-:1034A000AC4A0000937800099370000A330400FFCF
-:1034B00000047400320F00FF01CF6825AC4D0004FA
-:1034C0008F820048064000EAACA20008ACA0000CC5
-:1034D0009783003C306B0008156000022628000628
-:1034E00026280002974E0E148F450E1C8F6700048D
-:1034F000936D000231C4FFFF31A200FFAFA20010A4
-:103500008F6C0014AFA800180E00008BAFAC001435
-:10351000240400100E0000C7000000008E7200009E
-:1035200016400005000000008F6400142405FFBF52
-:1035300000859824AF7300148F79000C033538216F
-:10354000AF67000C9375000816A00008000000008B
-:1035500012800006000000008F7F00143C0BEFFF7C
-:103560003568FFFE03E84824AF690014A37400081F
-:103570008FA500200A00024602202021AF470E003E
-:103580000A0000F5000000008F5901780720FFFEB7
-:10359000241F08008F840000AF5F0178974B008ADA
-:1035A000316AFFFF014448232528FFFF31021FFF36
-:1035B0002C4300081460FFF9000000008F8E0048C3
-:1035C0008F8D003800C048210344202125C600010A
-:1035D000240C0F00AF86004800E938232486400001
-:1035E00031CA00FF11AC0005240800019391003E90
-:1035F0003230000700107A4035E80001000AAC00C4
-:103600003C18010002B8A025AC9440008F930048FC
-:1036100030B2003630A40008ACD30004108000970C
-:1036200001123025974E0E0A8F8D00003C0281005A
-:1036300031CCFFFF25AB0008018240253C03100080
-:1036400031651FFF25390006241F000EAF480160B9
-:1036500000C33025A75F015AAF850000A759015864
-:1036600014E0000A8F93003824120F0052720002F7
-:103670002416000134C600408F580E108F94004469
-:10368000AE9800208F550E18AE9500248F450E146D
-:10369000AF4501448F590E1CAF590148A34A01524E
-:1036A0003C0A1000AF460154AF4A017814E0FEDD39
-:1036B0002D2300010076A025128000178FBF004443
-:1036C0008F84003824160F0010960084000000003C
-:1036D0008F45017804A0FFFE24150F001095006EA1
-:1036E000000000008F470E14240202403C1F10000F
-:1036F000AF4701448F440E1CAF440148A340015220
-:10370000A740015AAF400160A7400158AF420154A1
-:10371000AF5F01788FBF00448FB600408FB5003C8B
-:103720008FB400388FB300348FB200308FB1002CCB
-:103730008FB0002803E0000827BD004814C0FED069
-:1037400030B8A0408F420E148F84004400004821FE
-:10375000AC8200208F510E1CAC9100240A00020E96
-:103760002D2300018F910034978A003C3C12800089
-:103770000220A821315800401700FF300000A0218E
-:10378000976900108F9200343139FFFF13320035F2
-:1037900000002021008048211480FEA000A03821D4
-:1037A0008F420E148F840044AC8200208F510E1C77
-:1037B000AC9100240A00020E2D230001936A000937
-:1037C0009378000B315000FF330F00FF020F702180
-:1037D00025C2000A3050FFFF0E00009E020020218B
-:1037E0008F8600483C1F410024CD0001AF8D00486A
-:1037F000936C000930C600FF00064400318300FFCF
-:10380000246B0002010B4825013FC825AC5900007C
-:103810008F67000C97440E1400F22825AC45000475
-:103820008F450E1C8F670004936A00023084FFFFEF
-:10383000315800FFAFB800108F6F0014AFB10018FF
-:103840000E00008BAFAF00140A0001A60200202179
-:10385000AF6000040A00013EA36000020A000246B5
-:1038600000002021000090210A00017024140001B2
-:103870003C1280000A000195ACB2000C8F91000050
-:1038800025240002A744015826300008320F1FFFEC
-:103890000A0001F9AF8F0000AF40014C1120002C4D
-:1038A000000000008F590E10AF5901448F430E18CD
-:1038B000240200403C1F1000AF430148A3400152C6
-:1038C000A740015AAF400160A7400158AF420154E0
-:1038D000AF5F01780A0002278FBF00441120000665
-:1038E0000000000097460E0830CC00401580000212
-:1038F000000000000000000D8F4D017805A0FFFEC4
-:103900000000000097530E103C120500240E20000A
-:10391000326AFFFF0152C025AF58014C8F4F0E1481
-:103920003C021000AF4F01448F500E1CAF500148B5
-:10393000A34001528F840038A740015AAF40016074
-:10394000A7400158AF4E01540A000215AF4201785A
-:103950008F490E14AF4901448F430E1C0A00028E9A
-:10396000240200403C0E20FF27BDFFE03C1A8000EF
-:103970003C0F800835CDFFFDAFBF001CAFB2001873
-:10398000AFB10014AFB00010AF8F0040AF4D0E00CC
-:103990000000000000000000000000000000000027
-:1039A000000000003C0C00FF358BFFFDAF4B0E000C
-:1039B0003C0660048CC95000240AFF7F3C11600063
-:1039C000012A40243507380CACC750008E24043837
-:1039D00024050009AF4500083083FFFF38622F71CE
-:1039E0002450C0B3AF8000480E000068AF800000D4
-:1039F00052000001AE20442C0E0004353C11800022
-:103A00000E000ED9363000708F8A00403C1208003C
-:103A100026523C88020088218E0800008F5F00003B
-:103A20003BF900013338000113000017AF88003064
-:103A3000022048218D2700003C0F08008DEF006C0C
-:103A40003C0C08008D8C006800E8C02301F8282198
-:103A50000000682100B8302B018D582101664021FB
-:103A60003C010800AC25006C3C010800AC28006853
-:103A70008F44000038830001306200011440FFEDE4
-:103A800000E04021AF8700308E0C00003C050800AC
-:103A90008CA5006C3C0408008C84006801883023ED
-:103AA00000A638210000102100E6402B00821821DA
-:103AB0000068F8213C010800AC27006C3C010800BC
-:103AC000AC3F00688F49010025590088AF99004438
-:103AD000AF890038AF4900208E070000AF87003063
-:103AE0008F4D017805A0FFFE000000008E0600004B
-:103AF0003C0B08008D6B00743C0408008C84007043
-:103B000000C728230165F8210000102103E5402BA0
-:103B10000082382100E8C821240908003C0108007F
-:103B2000AC3F00743C010800AC390070AF4901782B
-:103B300093580108A398003E938F003E31EE000198
-:103B400015C000158F830038240E0D00106E00196B
-:103B5000240F0F00106F001D00000000915900009D
-:103B600024180050332900FF113800043C1F400086
-:103B7000AF5F01380A0002E7000000000E00090EE6
-:103B8000000000008F8A00403C1F4000AF5F0138FA
-:103B90000A0002E700000000938D003E31AC0006F1
-:103BA000000C51000E0000CE0152D8210A00034340
-:103BB0008F8A00403C1B0800277B3D080E0000CE8A
-:103BC000000000000A0003438F8A00403C1B0800ED
-:103BD000277B3D280E0000CE000000000A000343B2
-:103BE0008F8A004090AA00018FAB00108CAC0010AF
-:103BF0003C0300FF8D680004AD6C00208CAD001408
-:103C000000E060213462FFFFAD6D00248CA7001836
-:103C10003C09FF000109C024AD6700288CAE001CE0
-:103C20000182C82403197825AD6F0004AD6E002C05
-:103C30008CAD0008314A00FFAD6D001C94A9000254
-:103C40003128FFFFAD68001090A70000A5600002BA
-:103C5000A1600004A167000090A30002306200FF91
-:103C60000002198210600005240500011065000E95
-:103C70000000000003E00008A16A00018CD80028C1
-:103C8000354A0080AD7800188CCF0014AD6F001459
-:103C90008CCE0030AD6E00088CC4002CA16A0001EF
-:103CA00003E00008AD64000C8CCD001CAD6D001865
-:103CB0008CC90014AD6900148CC80024AD680008DC
-:103CC0008CC70020AD67000C8CC200148C8300648C
-:103CD0000043C82B13200007000000008CC2001412
-:103CE000144CFFE400000000354A008003E00008A7
-:103CF000A16A00018C8200640A00039900000000A0
-:103D000090AA000027BDFFF88FA9001CA3AA0000FD
-:103D10008FAE00003C0FFF808FA8001835E2FFFF38
-:103D20008CCD002C01C26024AFAC0000A1200004A7
-:103D300000E06021A7A000028FB800008D270004DA
-:103D40000188182100A0582100C05021006D2826AC
-:103D50003C06FF7F3C0F00FF2CAD000135EEFFFF5E
-:103D600034D9FFFF3C02FF0003193024000D1DC0B1
-:103D7000010EC82400E2C02400C370250319782571
-:103D8000AD2E0000AD2F00048D450024AFAE000025
-:103D9000AD2500088D4D00202405FFFFAD2D000C42
-:103DA000956800023107FFFFAD27001091660018EB
-:103DB00030C200FF000219C2506000018D4500347E
-:103DC000AD2500148D67000827BD0008AD27001C35
-:103DD0008C8B00CCAD2C0028AD20002CAD2B00240A
-:103DE000AD20001803E00008AD20002027BDFFE053
-:103DF000AFB20018AFB10014AFB00010AFBF001CDD
-:103E00009098000000C088213C0D00FF330F007F18
-:103E1000A0CF0000908E000135ACFFFF3C0AFF00F0
-:103E2000A0CE000194A6001EA22000048CAB0014BA
-:103E30008E29000400A08021016C2824012A40243E
-:103E40000080902101052025A6260002AE24000452
-:103E500026050020262400080E0000762406000215
-:103E600092470000260500282624001400071E00A3
-:103E70000003160324060004044000032403FFFF8C
-:103E8000965900023323FFFF0E000076AE23001088
-:103E9000262400248FBF001C8FB200188FB100149D
-:103EA0008FB0001024050003000030210A000080BC
-:103EB00027BD002027BDFFD8AFB1001CAFB0001850
-:103EC000AFBF002090A80000240200018FB0003C8A
-:103ED0003103003F00808821106200148FAA00384F
-:103EE000240B0005506B0016AFAA001000A0202183
-:103EF00000C028210E0003DC02003021922400BC07
-:103F0000308300021060000326060030ACC00000C1
-:103F100024C600048FBF00208FB1001C8FB0001892
-:103F200000C0102103E0000827BD0028014038210F
-:103F30000E00035AAFB000100A0004200000000079
-:103F40000E0003A1AFB000140A000420000000001E
-:103F50003C02000A034218213C04080024843D6C02
-:103F60002405001A000030210A000080AF830054AD
-:103F70003C038000346200708C48000000A058218F
-:103F800000C04821308A00FFAF8800308F4401789C
-:103F90000480FFFE3C0C8000358600708CC500005C
-:103FA0003C0308008C6300743C1808008F180070F4
-:103FB00000A82023006468210000C82101A4782BF8
-:103FC0000319702101CF60213C010800AC2D007461
-:103FD0003C010800AC2C00708F480E14AF4801441F
-:103FE000AF47014CA34A0152A74B01589346010821
-:103FF00030C5000854A0000135291000934B09007A
-:1040000024070050316A00FF11470007000000003C
-:104010008F450E1CAF450148AF4901543C091000C3
-:1040200003E00008AF490178934D010831A800086A
-:104030001100001000000000934F010831EE001045
-:1040400051C00001352900083C04080090843DD08F
-:10405000A34401508F4309A4AF4301488F4209A0F4
-:10406000AF420144AF4901543C09100003E000088D
-:10407000AF4901783C1908008F393D8C333800086E
-:104080005700FFF1352900080A0004730000000002
-:1040900024070040AF470814AF4008108F4209447E
-:1040A0008F4309508F4409548F45095C8F46094C52
-:1040B000AF820064AF830050AF84004CAF85005CDA
-:1040C00003E00008AF8600609346010930C5007F19
-:1040D000000518C0000521400083102103E00008FE
-:1040E000244200883C09080091293D9124A800023F
-:1040F0003C05110000093C0000E8302500C51825EA
-:1041000024820008AC83000003E00008AC800004B7
-:104110009347010B8F4A002C974F09083C18000E5B
-:104120000358482131EEFFFF000E41C0AF48002C7C
-:1041300097430908952C001A0080402124030001B0
-:10414000318BFFFFAC8B00008D2D001C00A058218F
-:1041500000C06021AC8D00048D24002030E70040B9
-:10416000AD04000891220019304400031083004878
-:104170002885000214A00062240600021086005662
-:1041800024190003109900660000000010E0003AB6
-:10419000000000003C07080094E73D8624E200018F
-:1041A000934F0934934709219525002A31EE00FFEA
-:1041B000000E488230ED00FF978700580009360056
-:1041C000000D1C003044FFFF00C310250044C02533
-:1041D00000A778213C19400003197025000F4C00FE
-:1041E000AD090004AD0E0000934D09203C0300060C
-:1041F00025090014000D360000C32025AD04000879
-:104200008F59092C24E5000130A27FFFAD19000C65
-:104210008F580930A782005825020028AD180010D9
-:104220008F4F0938AD0F0014AD2B00048F4E09409D
-:10423000AD2E0008934D09373C05080090A53D9030
-:104240008F4409488F46094031A700FF00EC182130
-:10425000008678230003C7000005CC000319602501
-:1042600031E8FFFC01885825AD2B000CAD20001073
-:1042700003E00008AF4A002C3C0D080095AD3D86D8
-:104280003C0E080095CE3D800A0004C901AE102105
-:104290003C05080094A53D8A3C06080094C63D8074
-:1042A0003C18080097183D7C952E002400A6782124
-:1042B00001F86823000E240025A2FFF200821825D1
-:1042C00024190800AD03000CAD190014AD00001056
-:1042D0000A0004C425080018952600249525002806
-:1042E0000006C40000057C00370E810035ED080093
-:1042F000AD0E000CAD0D00100A0004C4250800141A
-:104300001480FFA200000000952400240004140083
-:1043100034430800AD03000C0A0004C42508001053
-:104320003C03080094633D8A3C05080094A53D8049
-:104330003C06080094C63D7C953900249538002839
-:10434000006520210086782300196C000018740095
-:1043500025E2FFEE01C2202535A3810024190800C3
-:10436000AD03000CAD040010AD190018AD00001431
-:104370000A0004C42508001C03E00008240201F41C
-:1043800027BDFFE8AFB00010AFBF00140E00006003
-:104390000080802124050040AF4508148F83005021
-:1043A0008F84004C8F85005C0070182100641023FE
-:1043B00018400004AF830050AF6300548F66005470
-:1043C000AF86004C1200000C000000008F44007407
-:1043D000936800813409FA002D07000710E00005FA
-:1043E00000891021936C0081240B01F4018B50048F
-:1043F00001441021AF62000C8F4E095C01C5682397
-:1044000019A000048FBF00148F4F095CAF8F005CB0
-:104410008FBF00148FB000100A00006227BD001883
-:104420008F8400648F8300508F82004CAF640044FF
-:10443000AF63005003E00008AF6200543C0380000B
-:10444000346200708C43000027BDFFF8308700FF06
-:1044500030A900FF30C800FFAF8300308F440178DF
-:104460000480FFFE3C028000345900708F38000049
-:10447000A3A700033C0708008CE700748FAC000082
-:104480003C0608008CC60070030378233C0E7FFFB7
-:1044900000EFC82135CDFFFF00005021018D2824F9
-:1044A00000CA1821000847C0032F202B00A81025A0
-:1044B0000064C021AFA200003C010800AC390074C8
-:1044C0003C010800AC380070934F010AA3A0000221
-:1044D0003C0E80FFA3AF00018FAC0000312B007FAA
-:1044E00035CDFFFF018D4824000B5600012A4025E1
-:1044F000240730002406FF803C05100027BD00087B
-:10450000AF48014CAF470154A7400158A3460152A0
-:1045100003E00008AF45017827BDFFE8AFBF0014F6
-:10452000AFB000108F6500743C068000309000FF33
-:1045300000A620250E000060AF64007493630005A0
-:10454000346200080E000062A36200050200202110
-:104550008FBF00148FB00010240500052406000151
-:104560000A00057027BD001827BDFFE03C0380004E
-:10457000AFB00010AFBF0018AFB1001434620070CC
-:104580008C470000309000FF30A800FFAF8700305C
-:104590008F4401780480FFFE3C18800037110070C2
-:1045A0008E2F00003C0D08008DAD00743C0A080001
-:1045B0008D4A007001E7702301AE282100005821C8
-:1045C00000AE302B014B4821012638213C01080068
-:1045D000AC250074000088213C010800AC27007065
-:1045E0001100000F000000008F6200742619FFFF09
-:1045F0003208007F0002FE0233E5007F150000064E
-:10460000332200FF2407FF800207202624A3FFFF98
-:1046100000838025320200FF004080212411100811
-:104620000E000060000000008F49081831250004CA
-:1046300014A0FFFD3218007F001878C000187140E8
-:1046400001CF682125AC0088AF4C0818274A0980A3
-:104650008D4B0020AF4B01448D460024AF460148EE
-:10466000A35001500E000062A74001580220102103
-:104670008FBF00188FB100148FB0001003E0000846
-:1046800027BD002027BDFFE8308400FFAFBF00102A
-:104690000E0005BB30A500FF8F8300508FBF0010B8
-:1046A000344500402404FF903C02100027BD001850
-:1046B000AF43014CA3440152AF45015403E000084D
-:1046C000AF4201789343093E306200081040000D6C
-:1046D0003C0901013528080AAC8800008F470074A6
-:1046E000AC8700043C06080090C63D9030C5001021
-:1046F00050A00006AC8000088F6A0060AC8A0008F9
-:104700002484000C03E00008008010210A00062227
-:104710002484000C27BDFFE8AFBF0014AFB0001029
-:104720009346093F00A050210005288000853823CA
-:1047300030C200FF240300063C09080095293D868D
-:1047400024E8FFD8240500041043003724060002A3
-:104750009750093C3C0F020400063400320EFFFF64
-:1047600001CF6825AC8D0000934C093E318B0020B1
-:104770001160000800000000934309363C02010369
-:10478000345F0300307900FF033FC0252405000893
-:10479000AC98000493430934935909210005F88229
-:1047A000306200FF0002C082332F00FF00186E004D
-:1047B000000F740001AE6025018920253C094000EE
-:1047C00000898025ACF0FFD8934309378F4F094803
-:1047D0008F580940306200FF004AC821033F702112
-:1047E00001F86023000E6F0001A650253185FFFC03
-:1047F000001F58800145482501683821AD09002077
-:104800000E00006024F00028240400040E00006262
-:10481000A364003F020010218FBF00148FB000106E
-:1048200003E0000827BD00180A0006352406001220
-:1048300027BDFFD024090010AFB60028AFB5002473
-:10484000AFB40020AFB10014AFB000103C010800BD
-:10485000A0293D90AFBF002CAFB3001CAFB2001831
-:1048600097480908309400FF3C02000E3107FFFF13
-:10487000000731C0AF46002C974409089344010B50
-:1048800030B500FF03428021308300300000B021AA
-:104890001060012500008821240C00043C01080060
-:1048A000A02C3D90934B093E000B5600000A2E03AE
-:1048B00004A0016000000000AF400048934F010BCE
-:1048C00031EE002011C00006000000009358093EA0
-:1048D00000189E00001396030640018900000000A6
-:1048E0009344010B30830040106000038F9300500D
-:1048F0008F8200502453FFFF9347093E30E60008A3
-:1049000014C0000224120003000090219619002C0C
-:1049100093580934934F0937A7990058330C00FF77
-:1049200031EE00FF024E6821000D5880016C5021CD
-:10493000015140213C010800A4283D869205001841
-:1049400030A900FF010918213C010800A4233D887B
-:104950009211001816200002000000000000000D57
-:104960003C010800A4233D8A3C010800A4203D80AE
-:104970003C010800A4203D7C935F010B3063FFFFE6
-:1049800033F00040120000022464000A2464000B8B
-:104990003091FFFF0E00009E022020219358010B52
-:1049A0003C08080095083D8A0040202100185982E3
-:1049B000316700010E00049A01072821934C010B76
-:1049C0008F4B002C974E09083C0F000E034F4021DF
-:1049D00031CDFFFF000D51C0AF4A002C97430908AD
-:1049E0009505001A004038212404000130A9FFFF7A
-:1049F000AC4900008D06001C00404821318A00406F
-:104A0000AC4600048D020020ACE2000891030019BE
-:104A100030630003106400EC2879000217200118AD
-:104A2000241000021070010C241F0003107F011ECF
-:104A300000000000114000DE000000003C090800FA
-:104A400095293D8625220001935F0934934E092163
-:104A50009504002A33F900FF0019C08231CF00FF0E
-:104A6000978E005800184600000F6C00010D80253D
-:104A70003045FFFF02051025008E50213C03400009
-:104A800000433025000A6400ACEC0004ACE60000F2
-:104A9000935F09203C19000624EC0014001FC60097
-:104AA00003197825ACEF00088F48092C25CD0001AB
-:104AB00031A57FFFACE8000C8F500930A785005866
-:104AC00024E80028ACF000108F4409380100802150
-:104AD000ACE40014AD9300048F530940AD9300087B
-:104AE000934A09373C19080093393D908F43094890
-:104AF0008F460940314200FF0052F82100667023C2
-:104B0000001F7F000019C40001F8282531CDFFFCEB
-:104B100000AD2025AD84000CAD800010AF4B002C03
-:104B2000934B093E317300081260000D3C060101F1
-:104B300034CC080AACEC00288F530074AD13000489
-:104B40003C0B0800916B3D903167001050E0000372
-:104B5000AD0000088F6A0060AD0A00082510000C47
-:104B600012C0003D000000009343093F24160006D8
-:104B700024060004306200FF105600C9240700021A
-:104B80009758093C3C0F0204330DFFFF01AF40254D
-:104B9000AE0800009345093E30A4002010800008B4
-:104BA00000000000935309363C0B0103357F0300DE
-:104BB000327900FF033F7025AE0E00042406000882
-:104BC000934F093493480921312AFFFF31ED00FF4B
-:104BD000000D1082310300FF0002B60000032C001C
-:104BE00002C56025018A9825001220803C094000FA
-:104BF0000204502302695825AD4BFFD8935F093753
-:104C00008F4F09488F58094033F900FF0332702154
-:104C10000006B08201D668210007440001F828236D
-:104C2000000D1F000068302530A2FFFC2547FFD88B
-:104C300000C260250016808002074821ACEC0020ED
-:104C4000253000280E00006024120004A372003FEB
-:104C50000E000062000000009347010B30F200409C
-:104C6000124000053C1900FF8E180000372EFFFF90
-:104C7000030E3024AE0600000E0000C702202021E3
-:104C80003C10080092103D90321100031220000FDA
-:104C900002A028218F89005025330001AF930050D6
-:104CA000AF7300508F6B00540173F8231BE00002B8
-:104CB000026020218F640054AF6400548F4C007454
-:104CC000258401F4AF64000C02A028210280202179
-:104CD000A76000680E0005BB3C1410008F850050D3
-:104CE00034550006AF45014C8F8A00488FBF002C19
-:104CF0008FB3001C25560001AF9600488FB20018F4
-:104D0000A34A01528FB60028AF5501548FB1001449
-:104D1000AF5401788FB500248FB400208FB00010FD
-:104D200003E0000827BD00309358093E00189E009C
-:104D3000001396030642003624110002934409230F
-:104D4000308300021060FEDD8F8600608F8200508D
-:104D500014C2FEDA000000000E0000600000000037
-:104D60009369003F24070016312800FF1107000C4B
-:104D7000240500083C0C0800918C3D90358B000107
-:104D80003C010800A02B3D90936A003F314300FF97
-:104D900010650065240D000A106D005E2402000CF1
-:104DA0000E000062000000000A00069000000000F3
-:104DB0003C09080095293D863C0A0800954A3D803B
-:104DC0000A0006F3012A10213C09080095293D8AB2
-:104DD0003C04080094843D803C06080094C63D7C59
-:104DE00095030024012410210046F8230003CC0081
-:104DF00027F0FFF20330C025240F0800ACF8000CA8
-:104E0000ACEF0014ACE000100A0006EE24E7001836
-:104E10003C010800A0313D90935F093E241600013B
-:104E200033F900201720FEA5241100080A0006907F
-:104E3000241100048F6E00848F4D094011A0FE9E46
-:104E4000AF8E0050240F00143C010800A02F3D90AD
-:104E50000A00068F00000000950E0024950D002822
-:104E6000000E6400000D2C003589810034A6080076
-:104E7000ACE9000CACE600100A0006EE24E70014D2
-:104E80001460FEEC000000009502002400021C00EB
-:104E900034640800ACE4000C0A0006EE24E70010BD
-:104EA0000A000741240700123C02080094423D8A90
-:104EB0003C06080094C63D803C03080094633D7C9A
-:104EC00095100024951900280046F82103E3C0231B
-:104ED00000106C0000197400270FFFEE01CF282589
-:104EE00035AC8100ACEC000CACE5001024070800E8
-:104EF000AD2700182527001C0A0006EEAD2000147F
-:104F00008F7F004CAF7F00548F7900540A000699C0
-:104F1000AF790050A362003F0E0000620000000065
-:104F20000A00069000000000240200140A0008276E
-:104F3000A362003F27BDFFE8308400FFAFBF001031
-:104F40000E0005BB30A500FF9378007E9379007FAB
-:104F5000936E00809368007A332F00FF001866007C
-:104F6000000F6C0031CB00FF018D4825000B520073
-:104F70008FBF0010012A3825310600FF344470002D
-:104F800000E628252402FF813C03100027BD0018FD
-:104F9000AF45014CAF440154A342015203E0000865
-:104FA000AF43017827BDFFD8AFB20018AFB10014EE
-:104FB000AFB00010AFBF0020AFB3001C9342010997
-:104FC000308600FF30B000FF000618C23204000235
-:104FD0003071000114800005305200FF9367000516
-:104FE00030E5000810A0000D30C80010024020215C
-:104FF0000E0005A702202821240400018FBF0020F5
-:105000008FB3001C8FB200188FB100148FB0001046
-:105010000080102103E0000827BD002815000032A1
-:105020000000000093430109000028213062007F46
-:10503000000220C00002F94003E49821267900888C
-:10504000033B98218E7800248E6F0008130F0046D2
-:10505000000000008F640084241800020004FD8218
-:1050600033F900031338007C0000000093660083CE
-:10507000934A0109514600043205007C10A00060EB
-:10508000000000003205007C14A0005302402021E3
-:1050900016200006320400018E7F00248F5901047F
-:1050A00017F9FFD600002021320400011080000A09
-:1050B000024020218F4209408F9300641053000664
-:1050C000000000000E00066D022028218F430940D9
-:1050D000AF630044024020210E0006020220282176
-:1050E0000A000860240400013C0908008D290064BE
-:1050F000252600013C010800AC26006416000012C1
-:10510000000000008F6D00843C0E00C001AE6024E2
-:1051100015800005024020210E00082E02202821C3
-:105120000A00086024040001240500040E00057034
-:1051300024060001024020210E00082E0220282112
-:105140000A000860240400010E000041240400014C
-:10515000936B007D020B50250E000062A36A007D58
-:105160000A0008A38F6D00848F6600748F480104C5
-:105170008E67002400064E021507FFB63126007F19
-:10518000936B008326440001308A007F1146004360
-:10519000316300FF5464FFB08F6400842645000132
-:1051A00030B1007F30A200FF122600042405000168
-:1051B000004090210A00087624110001240FFF808E
-:1051C000024F702401CF9026324200FF0040902110
-:1051D0000A000876241100010E00066D0220282125
-:1051E000321800301300FFAA321000820240202142
-:1051F0000E0005A7022028210A00086024040001EF
-:105200008F6E00743C0F80002405000301CF9025B1
-:10521000AF72007493710083240600010E000570C4
-:10522000322400FF0E00004124040001936D007D34
-:10523000020D60250E000062A36C007D3C0B08008F
-:105240008D6B0054257000013C010800AC30005407
-:105250000A000860240400018F6800743C09800083
-:105260002405000401093825AF67007493630083A7
-:10527000240600010E000570306400FF0E0000419E
-:10528000240400019362007D020298250E00006252
-:10529000A373007D0A00086024040001324D0080E1
-:1052A00039AC0080546CFF6C8F6400840A0008C91C
-:1052B0002645000127BDFFC83C0A0008AFBF0030EB
-:1052C000AFB5002CAFB40028AFB30024AFB20020BC
-:1052D000AFB1001CAFB00018034AD8212409004028
-:1052E000AF490814AF4008108F4209448F4309505A
-:1052F0008F4609548F47095C8F48094C9344010835
-:105300009345010BAF820064308400FF30A500FF9D
-:10531000AF830050AF86004CAF87005C0E00084A98
-:10532000AF8800601440017D8FBF0030A760006827
-:10533000934D0900240B00503C15080026B53D484C
-:1053400031AC00FF3C12080026523D58118B00037F
-:10535000000000000000A8210000902193510109E5
-:105360008F9F005024040010322E007F000E68C072
-:10537000000E6140018D282124B40088AF54081824
-:105380008F4901048F4A09A43C0B000E034BC02136
-:10539000012A10233C010800AC223D6C8F430958C0
-:1053A0003C010800A0243D9097470908007F302366
-:1053B0003C010800AC263D7030E8FFFF0008C9C082
-:1053C0003C010800AC3F3D94AF59002C97420908BE
-:1053D0009710002C8EB10000930F001803749821D1
-:1053E000A7900058AF9300440220F80931F000FF65
-:1053F000304E000215C001B2304F000111E0014FE4
-:10540000000000009343093E3066000814C000020B
-:10541000241400030000A0218F5809A424130001C4
-:105420003C010800AC383D98934F0934935109373B
-:1054300031EC00FF322E00FF028E6821000D288023
-:1054400000AC5021015058213C010800A42B3D889C
-:105450003C010800A42A3D8693490934312200FF0B
-:1054600002022021249000103C010800A4303D8459
-:10547000240700068F9F00503C010800AC273D8C9C
-:105480008F88005C8F59095800008021011F282354
-:1054900004A00149033F20230480014700A4302BCE
-:1054A00010C00149000000003C010800AC253D701F
-:1054B0008E4200000040F809000000003043000266
-:1054C000146000F80040882130440001548000102E
-:1054D0008E4200043C0908008D293D743C0AC0003E
-:1054E000012A8025AF500E008F45000030AB000828
-:1054F0001160FFFD00000000974D0E082410000110
-:10550000A78D003C8F4C0E04AF8C00348E420004FB
-:105510000040F8090000000002228825322E000217
-:1055200015C00180000000003C09080095293D7C61
-:105530003C06080094C63D883C0A0800954A3D7E1A
-:105540003C1908008F393D74012660213C18080081
-:105550008F183D983C03080094633D92018A2021F6
-:105560008F4E09400329F821248F000203E32821EC
-:10557000031968213C010800A42C3D8AAF8E006409
-:105580003C010800AC2D3D983C010800A4253D805D
-:105590000E00009E31E4FFFF8F870048004020216D
-:1055A0003C010800A0273D918E42000824E800013C
-:1055B000AF8800480040F809000000009344010B48
-:1055C0008F4C002C974A09083C0B000E034B4021DE
-:1055D0003149FFFF000919C08F8B0050AF43002CE9
-:1055E000974309089506001A00403821308A004088
-:1055F00030DFFFFFAC5F00008D19001C0040482128
-:10560000AC5900048D180020AC580008910F001907
-:1056100031E30003107300F0000000002862000274
-:105620001440010924050002106500FD240D00034B
-:10563000106D010D00000000114000D900000000B5
-:105640003C0A0800954A3D8625420001934D0934E5
-:1056500093580921950E002A31A300FF00032082F0
-:10566000331F00FF9798005800047E00001FCC00F5
-:1056700001F940253049FFFF0109102501D83021EB
-:105680003C0540000045502500066C00ACED0004D0
-:10569000ACEA0000934309203C04000624ED00140A
-:1056A0000003FE0003E4C825ACF900088F49092C6B
-:1056B000270F000131EE7FFFACE9000C8F48093065
-:1056C000A78E005824E90028ACE800108F4509385F
-:1056D00001204021ACE50014ADAB00048F4209402D
-:1056E000ADA20008934B09373C1F080093FF3D9083
-:1056F0008F4309488F4A0940316600FF00D42021BA
-:10570000006A78230004C700001FCC000319282575
-:1057100031EEFFFC00AE1025ADA2000CADA00010D4
-:10572000AF4C002C934C093E318B00085160000FA8
-:105730008E58000C3C06010134CA080AACEA002865
-:105740008F4B0074AD2B00043C0C0800918C3D90F5
-:105750003187001050E00003AD2000088F62006028
-:10576000AD2200082528000C8E58000C0300F80913
-:10577000010020213C19080097393D8A3C1F080090
-:1057800097FF3D7E033F782125E900020E0000C708
-:105790003124FFFF3C0E08008DCE3D6C3C08080014
-:1057A0008D083D7401C828233C010800AC253D6CE0
-:1057B00014A00006000000003C0308008C633D8C30
-:1057C000346400403C010800AC243D8C12000070A1
-:1057D0008F8C00448F470E108F900044AE0700203E
-:1057E0008F4D0E18AE0D00243C10080096103D8021
-:1057F0000E0000600000000024020040AF420814C8
-:105800008F8600508F8A004C00D01821006A5823E0
-:1058100019600004AF830050AF6300548F650054DB
-:10582000AF85004C1200000C000000008F44007493
-:10583000936800813409FA002D0E000711C000059D
-:1058400000891821937F0081241901F403F9780459
-:1058500001E41821AF63000C8F44095C8F83005C66
-:105860000083C0231B000003000000008F50095C70
-:10587000AF90005C0E000062000000008F8C0050B2
-:105880008E4700103C010800AC2C3D9400E0F80964
-:10589000000000003C0D08008DAD3D6C55A0FEF5EC
-:1058A000240700068F450024975909088F8B006450
-:1058B0008F9400503C0F001F978200588F86005431
-:1058C0008F93004C3328FFFF35E9FF8000A9502457
-:1058D000000871C032320100AF4E0024A4C2002C77
-:1058E000AF4A0024AF6B0044AF740050AF73005454
-:1058F0001640008032380010570000868EA4000445
-:10590000322300405460001B8EB100088EB0000CA2
-:105910000200F809000000008FBF00308FB5002C96
-:105920008FB400288FB300248FB200208FB1001CE9
-:105930008FB0001803E0000827BD00389347010925
-:105940008F8800380007FE0003E8C825AF590080A3
-:105950008F5809A08F5309A4AFB80010AF580E1488
-:105960008FB40010AF540E10AF530E1C0A00096222
-:10597000AF530E180220F809000000008EB0000C92
-:105980000200F809000000000A000AA88FBF0030DA
-:10599000A5800020A59300220A000A5BAD93002495
-:1059A0003C09080095293D863C06080094C63D80C8
-:1059B0000A0009F4012610213C010800AC203D70CA
-:1059C0000A00098E8E4200003C010800AC243D70A4
-:1059D0000A00098E8E4200003C03080094633D8A51
-:1059E0003C04080094843D803C1F080097FF3D7CE8
-:1059F000951800240064C821033F782300186C0028
-:105A000025EEFFF201AE2825AC45000C240208006B
-:105A1000ACE20014ACE000100A0009EF24E7001823
-:105A200095060024950900280006240000091C00A2
-:105A3000349F810034790800ACFF000CACF90010F1
-:105A40000A0009EF24E700141460FEFB00000000C8
-:105A50009518002400187C0035EE0800ACEE000C10
-:105A60000A0009EF24E700103C07080094E73D8096
-:105A70003C04080094843D8A3C03080094633D7C08
-:105A800095190024951800280087F82103E378234E
-:105A90002407080000192C0000186C0025EEFFEE0A
-:105AA00001AE302534A28100AD2700182527001C47
-:105AB000AD22000CAD2600100A0009EFAD20001445
-:105AC00093520109000028210E000602324400FF13
-:105AD0008FBF00308FB5002C8FB400288FB3002407
-:105AE0008FB200208FB1001C8FB0001803E00008B7
-:105AF00027BD0038935F010933E400FF0E00066DF7
-:105B000000002821323800105300FF7E322300406D
-:105B10008EA400040080F809000000000A000AA218
-:105B2000322300401200FF5F000000008F540E146B
-:105B30008F920044AE5400208F530E1C0A000A8A34
-:105B4000AE5300248F82001C008040213C040100E1
-:105B50009047008530E3002010600009000000003D
-:105B60003C0708008CE73D948F83001800E3202356
-:105B7000048000089389000414E30003010020213D
-:105B800003E00008008010213C04010003E000084D
-:105B9000008010211120000B006738238F8C00201B
-:105BA00024090034918B00BC316A0002514000018D
-:105BB0002409003000E9682B15A0FFF10100202125
-:105BC00000E938232419FFFC00B9C02400F9782427
-:105BD00000F8702B15C0FFEA01E8202130C2000355
-:105BE0000002182314C000123069000300003021A5
-:105BF00000A9702101C6682100ED602B1180FFE033
-:105C00003C0401002D2F00010006482B010538211E
-:105C100001E9302414C0FFDA24E4FFFC2419FFFC5E
-:105C200000B9C0240308202103E0000800801021EF
-:105C30008F8B002024060004916A00BC31440004CC
-:105C40001480FFEC00A970210A000B5E00003021D7
-:105C500027BDFFE8AFBF00108F460100934A01093E
-:105C60003C1F08008FFF00902407FF80314F00FF8A
-:105C700031E8007F0008614003E6C821032CC02101
-:105C800027090120012770243C010800A02F3DD0E6
-:105C9000AF4E080C3C0D08008DAD00903C04008018
-:105CA0003482000301A65821016C182124650120CB
-:105CB00030AA007801424025AF48081C3C1F08006C
-:105CC0008FFF00908F88004003E6C0213319000742
-:105CD00003074824033A7821AF49002825E909C081
-:105CE000952E00023C0D08008DAD008C3C0A08008A
-:105CF0008D4A009031CC3FFF01A61821000C59803D
-:105D0000006B282100A72024AF44002C952200021C
-:105D10003C1F08008FFF008C9107008530593FFF22
-:105D200003E678210019C1800146702101F868213D
-:105D300031CC007F31AB007F019A2821017A5021BC
-:105D40003C03000C3C04000E00A328210144102158
-:105D500030E6002027470980AF82002CAF88001C66
-:105D6000AF890024AF85002010C00006AF8700284F
-:105D70008D0200508CA4010C0044302318C0007721
-:105D800000000000910C0085240DFFDF018D3824F8
-:105D9000A10700858F8B001C8F8900248F87002826
-:105DA0008D65004CAF850018912F000D31EE00205D
-:105DB00011C000170000000024090001A38900049D
-:105DC000AF80000C8CE400248F85000C240A0008AE
-:105DD000AF800008AF8000103C010800A42A3D7E7F
-:105DE0003C010800A4203D920E000B32000030213F
-:105DF0008F8500248FBF0010AF82001490A8000D83
-:105E000027BD00180008394203E0000830E2000115
-:105E1000913F00022418000133F900FF001921828C
-:105E200010980039240800021088005B8F86002C2F
-:105E30008CE5002414A0001B8F9F002091220000FD
-:105E4000240A00053046003F10CA00472404000120
-:105E50008F860008A3840004AF860010AF86000C74
-:105E60008CE400248F85000C240A00083C01080003
-:105E7000A42A3D7E3C010800A4203D920E000B3276
-:105E8000000000008F8500248FBF0010AF82001437
-:105E900090A8000D27BD00180008394203E0000853
-:105EA00030E200018CF800088CF900248FEE00C469
-:105EB000A38000048CE40024AF8E000C8F85000CBE
-:105EC0008F86000803197823240A0008AF8F00107A
-:105ED0003C010800A42A3D7E3C010800A4203D921C
-:105EE0000E000B32000000008F8500248FBF0010D1
-:105EF000AF82001490A8000D27BD00180008394299
-:105F000003E0000830E20001912300003062003F0E
-:105F1000104400278F8500208CE400241480002189
-:105F2000000000008D2E00183C187FFF8F85002098
-:105F3000370FFFFF01CF1824AF8300088F9F0008A1
-:105F40008CA8008403E8C82B1720000203E020215E
-:105F50008CA400840A000BEDAF8400088CA3010C14
-:105F60000A000BCBAF8300188D2C00188F86000819
-:105F70003C0D7FFF8F89002035A3FFFF018358244C
-:105F800024040001AF8B0010AD2000CCA3840004DA
-:105F90000A000BF9AF86000C8CCA00140A000BED46
-:105FA000AF8A00088CA300C80A000C30AF83000839
-:105FB0008F84002C8CAC00648C8D0014018D582BC8
-:105FC00011600004000000008CA200640A000C3084
-:105FD000AF8200088C8200140A000C30AF820008E7
-:105FE0008F85000C27BDFFE0AFBF0018AFB10014D4
-:105FF00014A00007AFB000108F8600242402000513
-:1060000090C400003083003F106200B68F840020EF
-:106010008F91000800A080218F8C00283C0508008B
-:106020008CA53D708D8B000431663FFF00C5502B61
-:106030005540000100C02821938D000411A0007379
-:1060400000B0F82B8F98002024040034930F00BC7C
-:1060500031EE000251C000012404003000A4C82B1E
-:10606000172000D10000000000A4282300B0F82B66
-:106070003C010800A4243D7C17E0006802002021B8
-:106080003C0308008C633D6C0083102B54400001DE
-:10609000008018218F8800243C010800AC233D7447
-:1060A000000048219104000D308300205060000161
-:1060B0008F490E188F8300140123382B10E00059EC
-:1060C000000000003C0408008C843D7400895821C5
-:1060D000006B502B114000560090602B006930235C
-:1060E00000C020213C010800AC263D7412000003D2
-:1060F000241FFFFC1090008A32270003009FC82451
-:106100003C010800AC393D743C010800A4203D92DC
-:106110008F84000C120400078F830020AF910008C9
-:10612000020020218C7100CCAF90000C26300001C1
-:10613000AC7000CC3C0208008C423D748F8A001089
-:10614000240700180082202301422823AF84000C7A
-:1061500010800002AF850010240700108F86001CFD
-:106160003C010800A0273D902407004090CC00850A
-:10617000318B00C0116700408F8D001414A00015F2
-:1061800000002021934A01098F420974314500FF24
-:106190000002260224A300013090007F3071007FAE
-:1061A0001230007A2407FF80A0C300833C09080056
-:1061B0008D293D8C8F880024240D0002352C000889
-:1061C0003C010800A02D3DD13C010800AC2C3D8CC9
-:1061D00024040010910E000D31C6002010C00005EF
-:1061E00000801821240800013C010800AC283D74FF
-:1061F000348300018FBF00188FB100148FB00010DE
-:106200000060102103E0000827BD00203C010800C9
-:10621000A4203D7C13E0FF9A020020210A000C819B
-:1062200000A020213C0408008C843D740090602B69
-:106230001180FFAE000000003C0F080095EF3D7C90
-:1062400001E4702101C6682B11A000072C82000414
-:106250003C1F60008FF954043338003F1700FFE5FE
-:10626000240300422C8200041040FFA024030042BB
-:106270000A000CDF8FBF0018152DFFC000000000C2
-:106280008CDF00743C0380002405FF8003E3C825F5
-:10629000ACD9007490D80085240E000424040010AA
-:1062A000330F003F01E54025A0C800858F880024FA
-:1062B0003C010800A02E3DD1240300019106000DF1
-:1062C00030C9002015200003000000003C03080036
-:1062D0008C633D743C010800AC233D6C0A000CD675
-:1062E000000000008F8700108C88008400E8282BB5
-:1062F00014A0000200E088218C9100842409000190
-:10630000A38900048F440E18022028210E000B32AE
-:1063100002203021022080210A000C67AF82001485
-:1063200000071823306600033C010800A4263D92B4
-:10633000122000058F8C0020918B00BC316A000474
-:106340001540001524CD00043C0F080095EF3D9248
-:1063500001E4702100AE302B50C0FF6E8F84000C22
-:106360002C85000514A0FFA32403004230980003ED
-:1063700017000002009818232483FFFC3C0108004A
-:10638000AC233D740A000CA30000000000A75824B1
-:106390000A000CCB016718263C010800A42D3D9291
-:1063A0000A000D33000000003C010800AC203D74E1
-:1063B0000A000CDE240300428F83001014600007E3
-:1063C000000010218F88002424050005910600009C
-:1063D00030C400FF108500030000000003E0000847
-:1063E00000000000910A0018314900FF000939C27D
-:1063F00014E0FFFA8F85001C3C04080094843D7C67
-:106400003C0308008C633D943C1908008F393D74AF
-:106410003C0F080095EF3D920064C0218CAD005404
-:106420000319702101CF6021018D58231960001DCF
-:1064300000000000910E001C8F8C002C974B0E105A
-:1064400031CD00FF8D850004016D30238D88000063
-:1064500030CEFFFF000E510000AAC82100003821F5
-:1064600001072021032A182B0083C021AD990004C5
-:10647000AD980000918F000A01CF6821A18D000A1C
-:106480008F88002C974B0E12A50B0008950A003838
-:1064900025490001A50900389107000D34E60008E0
-:1064A000A106000D03E000080000000027BDFFE08A
-:1064B000938700048F8F00248FAD00143C0E7FFF64
-:1064C0008F89000C35C8FFFFAFBF001CAFB00018AC
-:1064D00001A8182491EA000D000717C03C1FBFFF58
-:1064E000006258252D2E00018F90001837F9FFFF0C
-:1064F0003C1808008F183D943C0F080095EF3D8A2A
-:1065000001796824000E47803C07EFFF3C05F0FF4F
-:1065100001A818253149002034E2FFFF34ACFFFF09
-:106520000310582327A500102406000225EA0002C4
-:106530000062182400808021152000020000402104
-:106540008F480E1CA7AA0012056000372407000020
-:1065500030FF00FF001FCF008F8B001C0079382513
-:10656000AFA70014916F00853C08080091083D9189
-:106570003C18DFFF31EE00C0370AFFFF000E182B7A
-:106580003C1F080097FF3D8400EA6824A3A800117F
-:106590000003174001A248258FB90010AFA90014CD
-:1065A0003C0A0800914A3D93A7BF00168FA800142B
-:1065B000032CC0243C0B01003C0F0FFF030B1825DC
-:1065C0003147000335EEFFFF010C68240007160079
-:1065D000006EF8243C09700001A2C82503E9582583
-:1065E000AFB90014AFAB00100E000076A3A00015E9
-:1065F0008F8C0024260200089186000D30C40020F4
-:10660000108000068FBF001C3C05080094A53D804B
-:1066100024B0FFFF3C010800A4303D808FB000187B
-:1066200003E0000827BD00208F9800140118502BAC
-:106630005540FFC7240700010A000DB630FF00FFD8
-:106640009382000427BDFFE0AFBF00181040000F89
-:10665000008050218F880024240B00058F890008BA
-:10666000910700008F8400200100282130E3003FC3
-:106670008F86002C106B000800003821AFA9001095
-:106680000E00040EAFAA0014A38000048FBF0018F0
-:1066900003E0000827BD00208D1900183C0F0800FA
-:1066A0008DEF3D748F9800103C027FFF8D08001421
-:1066B000345FFFFF033F682401F8702101AE6023BF
-:1066C00001883821AFA900100E00040EAFAA0014F3
-:1066D0000A000E04A38000048F8700243C050800F4
-:1066E00094A53D923C0208008C423D8C90E6000D42
-:1066F0000005240030C300201060002C0044402519
-:106700008F85001C00006021240B000190A30085F0
-:1067100000004821240A00013C0F800035EE007083
-:106720008DC70000AF8700308F5801780700FFFE4B
-:106730003C038000347900708F3800003C0508006D
-:106740008CA500743C0D08008DAD00700307782304
-:1067500000AF38210000102100EF302B01A22021D2
-:10676000008618213C010800AC2700743C01080099
-:10677000AC230070AF4B01483C1908008F393D94A1
-:10678000A7490144A74A0146AF59014C3C0B0800F8
-:10679000916B3D91A34B0152AF4801543C0810004E
-:1067A000A74C015803E00008AF4801788F4B0E1C3E
-:1067B0003C0A08008D4A3D7497490E16974D0E14F9
-:1067C00001456021312AFFFF0A000E2731A9FFFF92
-:1067D0008F8300249064000D308200201040002937
-:1067E000000000000000482100005021000040216E
-:1067F0003C07800034EB00708D670000AF870030ED
-:106800008F4C01780580FFFE3C0D800035AC007098
-:106810008D8B00003C0508008CA500743C0408002A
-:106820008C8400700167302300A6782100001021BD
-:1068300001E6C82B0082C021031970213C01080029
-:10684000AC2F00743C010800AC2E0070AF49014829
-:106850003C0D08008DAD3D94A7480144240900403B
-:10686000A74A01463C081000240AFF91AF4D014C95
-:10687000A34A0152AF490154A740015803E0000860
-:10688000AF4801788F490E1897460E1297450E10A3
-:1068900030CAFFFF0A000E5D30A8FFFF8F8300247F
-:1068A00027BDFFF89064000D308200201040003AB0
-:1068B00000000000240B000100004821240A000110
-:1068C0003C088000350700708CE30000AF83003087
-:1068D0008F4C01780580FFFE3C0E80003C040800D0
-:1068E00090843DD035C700708CEC00003C0508005A
-:1068F0008CA50074A3A400033C1908008F39007014
-:106900008FAD00000183302300A638210000102144
-:106910000322782100E6C02B01F8602101AE40255A
-:10692000AFA800003C010800AC2700743C0108003F
-:10693000AC2C00709346010A3C04080090843DD1C1
-:10694000A3A00002A3A600018FA300003C0580FFC6
-:106950003099007F34A2FFFF006278240019C6003E
-:1069600001F87025240D3000AF4E014C27BD000802
-:10697000AF4D0154A7400158AF4B0148A74901440E
-:10698000A74A01463C091000240AFF80A34A01528D
-:1069900003E00008AF4901788F4B0E1897460E129E
-:1069A00097450E1030CAFFFF0A000E9130A9FFFF75
-:1069B0008F85001C2402008090A40085308300C0D5
-:1069C000106200058F8600208F8800088F87000CDA
-:1069D000ACC800C8ACC700C403E000080000000059
-:1069E0003C0A0800254A39543C09080025293A2068
-:1069F0003C08080025082DD43C07080024E73B3458
-:106A00003C06080024C637C43C05080024A5353CD4
-:106A10003C040800248431643C0308002463385C8F
-:106A20003C020800244236303C010800AC2A3D50AC
-:106A30003C010800AC293D4C3C010800AC283D4815
-:106A40003C010800AC273D543C010800AC263D64E5
-:106A50003C010800AC253D5C3C010800AC243D58DD
-:106A60003C010800AC233D683C010800AC223D60BD
-:086A700003E000080000000033
-:00000001FF
-/*
- * This file contains firmware data derived from proprietary unpublished
- * source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
- *
- * Permission is hereby granted for the distribution of this firmware data
- * in hexadecimal or equivalent format, provided this copyright notice is
- * accompanying it.
- */
diff --git a/firmware/bnx2/bnx2-mips-09-6.2.1a.fw.ihex b/firmware/bnx2/bnx2-mips-09-6.2.1a.fw.ihex
deleted file mode 100644
index 05e710248d2c..000000000000
--- a/firmware/bnx2/bnx2-mips-09-6.2.1a.fw.ihex
+++ /dev/null
@@ -1,6512 +0,0 @@
-:10000000080001180800000000005594000000C816
-:1000100000000000000000000000000008005594EF
-:10002000000000380000565C080000A00800000036
-:100030000000574400005694080059200000008436
-:100040000000ADD808005744000001C00000AE5CBD
-:100050000800321008000000000092340000B01CBC
-:1000600000000000000000000000000008009234C2
-:100070000000033C00014250080004900800040006
-:10008000000012FC0001458C000000000000000090
-:1000900000000000080016FC000000040001588861
-:1000A000080000A80800000000003D000001588C76
-:1000B00000000000000000000000000008003D00FB
-:0800C000000000300001958CE6
-:0800C8000A00004600000000E0
-:1000D000000000000000000D636F6D362E322E31DF
-:1000E00061000000060201020000000000000003A1
-:1000F000000000C800000032000000030000000003
-:1001000000000000000000000000000000000000EF
-:1001100000000010000001360000EA600000000549
-:1001200000000000000000000000000000000008C7
-:1001300000000000000000000000000000000000BF
-:1001400000000000000000000000000000000000AF
-:10015000000000000000000000000000000000009F
-:10016000000000020000000000000000000000008D
-:10017000000000000000000000000000000000007F
-:10018000000000000000000000000010000000005F
-:10019000000000000000000000000000000000005F
-:1001A000000000000000000000000000000000004F
-:1001B000000000000000000000000000000000003F
-:1001C000000000000000000000000000000000002F
-:1001D000000000000000000000000000000000001F
-:1001E0000000000010000003000000000000000DEF
-:1001F0000000000D3C020800244256083C030800A1
-:1002000024635754AC4000000043202B1480FFFDB2
-:10021000244200043C1D080037BD9FFC03A0F021D0
-:100220003C100800261001183C1C0800279C5608AA
-:100230000E000256000000000000000D27BDFFB4B4
-:10024000AFA10000AFA20004AFA30008AFA4000C50
-:10025000AFA50010AFA60014AFA70018AFA8001CF0
-:10026000AFA90020AFAA0024AFAB0028AFAC002C90
-:10027000AFAD0030AFAE0034AFAF0038AFB8003C28
-:10028000AFB90040AFBC0044AFBF00480E001544FA
-:10029000000000008FBF00488FBC00448FB90040B1
-:1002A0008FB8003C8FAF00388FAE00348FAD003078
-:1002B0008FAC002C8FAB00288FAA00248FA90020C0
-:1002C0008FA8001C8FA700188FA600148FA5001000
-:1002D0008FA4000C8FA300088FA200048FA1000040
-:1002E00027BD004C3C1B60108F7A5030377B502864
-:1002F00003400008AF7A00008F82002427BDFFE092
-:10030000AFB00010AFBF0018AFB100148C42000CAA
-:100310003C1080008E110100104000348FBF001887
-:100320000E000D84000000008F85002024047FFF54
-:100330000091202BACB100008E030104960201084D
-:1003400000031C003042FFFF00621825ACA300042C
-:100350009202010A96030114304200FF3063FFFF4E
-:100360000002140000431025ACA200089603010C03
-:100370009602010E00031C003042FFFF00621825A8
-:10038000ACA3000C960301109602011200031C009E
-:100390003042FFFF00621825ACA300108E02011846
-:1003A000ACA200148E02011CACA20018148000083C
-:1003B0008F820024978200003C0420050044182509
-:1003C00024420001ACA3001C0A0000C6A782000062
-:1003D0003C0340189442001E00431025ACA2001CB0
-:1003E0000E000DB8240400018FBF00188FB1001457
-:1003F0008FB000100000102103E0000827BD00208E
-:100400003C0780008CE202B834E50100044100089A
-:10041000240300013C0208008C42006024420001D9
-:100420003C010800AC22006003E0000800601021DD
-:100430003C0208008C42005C8CA4002094A30016AF
-:100440008CA6000494A5000E24420001ACE40280B6
-:100450002463FFFC3C010800AC22005C3C0210005D
-:10046000A4E30284A4E5028600001821ACE6028819
-:10047000ACE202B803E000080060102127BDFFE0F5
-:100480003C028000AFB0001034420100AFBF001C3E
-:10049000AFB20018AFB100148C43000094450008BF
-:1004A0002462FE002C42038110400003000381C23D
-:1004B0000A00010226100004240201001462000553
-:1004C0003C1180003C02800890420004305000FF44
-:1004D0003C11800036320100964300143202000FB6
-:1004E00000021500004310253C0308008C63004403
-:1004F00030A40004AE220080246300013C01080007
-:10050000AC2300441080000730A200028FBF001C03
-:100510008FB200188FB100148FB000100A0000CE07
-:1005200027BD00201040002D0000182130A20080BF
-:1005300010400005362200708E44001C0E000C672F
-:10054000240500A0362200708C4400008F82000C2D
-:10055000008210232C43012C10600004AF82001095
-:10056000240300010A000145AF84000C8E42000400
-:100570003C036020AF84000CAC6200143C02080015
-:100580008C42005850400015000018218C62000475
-:10059000240301FE304203FF144300100000182121
-:1005A0002E020004104000032E0200080A00014041
-:1005B0000000802114400003000000000A000140F8
-:1005C0002610FFF90000000D2402000202021004B0
-:1005D0003C036000AC626914000018218FBF001C4E
-:1005E0008FB200188FB100148FB00010006010217E
-:1005F00003E0000827BD00203C0480008C8301003C
-:1006000024020100506200033C0280080000000D3B
-:100610003C02800890430004000010213063000F6A
-:1006200000031D0003E00008AC8300800004188074
-:100630002782FF9C00621821000410C00044102390
-:100640008C640000000210C03C030800246356E4E0
-:10065000004310213C038000AC64009003E00008DC
-:10066000AF8200243C0208008C42011410400019A3
-:100670003084400030A2007F000231C03C02020002
-:100680001080001400A218253C026020AC43001426
-:100690003C0408008C8456B83C0308008C630110AD
-:1006A0003C02800024050900AC4500200086202182
-:1006B000246300013C028008AC4400643C01080053
-:1006C000AC2301103C010800AC2456B803E000083C
-:1006D000000000003C02602003E00008AC4500146C
-:1006E00003E000080000102103E0000800001021D2
-:1006F00030A2000810400008240201003C0208005B
-:100700008C42010C244200013C010800AC22010C87
-:1007100003E0000800000000148200080000000050
-:100720003C0208008C4200FC244200013C0108000D
-:10073000AC2200FC0A0001A330A200203C02080009
-:100740008C420084244200013C010800AC22008459
-:1007500030A200201040000830A200103C02080027
-:100760008C420108244200013C010800AC2201082F
-:1007700003E0000800000000104000080000000036
-:100780003C0208008C420104244200013C010800A4
-:10079000AC22010403E00008000000003C02080055
-:1007A0008C420100244200013C010800AC220100FF
-:1007B00003E000080000000027BDFFE0AFB1001417
-:1007C0003C118000AFB20018AFBF001CAFB00010EA
-:1007D0003632010096500008320200041040000733
-:1007E000320300028FBF001C8FB200188FB10014BB
-:1007F0008FB000100A0000CE27BD00201060000B53
-:10080000020028218E2401000E00018A0000000051
-:100810003202008010400003240500A10E000C6786
-:100820008E44001C0A0001E3240200018E2301040F
-:100830008F82000810430006020028218E24010048
-:100840000E00018A000000008E220104AF82000821
-:10085000000010218FBF001C8FB200188FB1001450
-:100860008FB0001003E0000827BD00202C82000498
-:1008700014400002000018212483FFFD240200021E
-:10088000006210043C03600003E00008AC626914DD
-:1008900027BDFFE0AFBF001CAFB20018AFB100141E
-:1008A000AFB000103C048000948201083043700017
-:1008B000240220001062000A2862200154400052E5
-:1008C0008FBF001C24024000106200482402600018
-:1008D0001062004A8FBF001C0A0002518FB200183C
-:1008E00034820100904300098C5000189451000C90
-:1008F000240200091062001C0000902128620009F7
-:10090000144000218F8200242402000A5062001249
-:10091000323100FF2402000B1062000F00000000C3
-:100920002402000C146200188F8200243C0208008C
-:100930008C4256B824030900AC83002000501021DB
-:100940003C038008AC6200643C010800AC2256B84D
-:100950000A0002508FBF001C0E0001E900102602A1
-:100960000A0002308F8200240E0001E900102602E6
-:100970003C0380089462001A8C72000C3042FFFF26
-:10098000020280258F8200248C42000C5040001E01
-:100990008FBF001C0E000D84000000003C02800090
-:1009A00034420100944300088F82002400031C009D
-:1009B0009444001E8F82002000641825AC50000073
-:1009C00024040001AC510004AC520008AC40000CFF
-:1009D000AC400010AC400014AC4000180E000DB844
-:1009E000AC43001C0A0002508FBF001C0E000440E4
-:1009F000000000000A0002508FBF001C0E000C9F78
-:100A0000000000008FBF001C8FB200188FB10014CF
-:100A10008FB000100000102103E0000827BD002067
-:100A200027BDFFD8AFB400203C036010AFBF002447
-:100A3000AFB3001CAFB20018AFB10014AFB00010DC
-:100A40008C6450002402FF7F3C1408002694563822
-:100A5000008220243484380CAC6450003C028000B6
-:100A6000240300370E0014B0AC4300083C07080014
-:100A700024E70618028010212404001D2484FFFFAF
-:100A8000AC4700000481FFFD244200043C02080042
-:100A9000244207C83C010800AC2256403C02080032
-:100AA000244202303C030800246306203C04080072
-:100AB000248403B43C05080024A506F03C06080085
-:100AC00024C62C9C3C010800AC2256803C02080045
-:100AD000244205303C010800AC2756843C01080044
-:100AE000AC2656943C010800AC23569C3C010800FF
-:100AF000AC2456A03C010800AC2556A43C010800DB
-:100B0000AC2256A83C010800AC23563C3C0108002E
-:100B1000AC2456443C010800AC2056603C0108005F
-:100B2000AC2556643C010800AC2056703C0108001E
-:100B3000AC27567C3C010800AC2656903C010800CE
-:100B4000AC2356980E00056E00000000AF80000C2C
-:100B50003C0280008C5300008F8300043C0208009C
-:100B60008C420020106200213262000700008821C0
-:100B70002792FF9C3C100800261056E43C02080017
-:100B80008C42002024050001022518040043202483
-:100B90008F820004004310245044000C26310001D1
-:100BA00010800008AF9000248E4300003C028000BB
-:100BB000AC4300900E000D4BAE05000C0A0002C1C4
-:100BC00026310001AE00000C263100012E22000269
-:100BD000261000381440FFE9265200043C020800A9
-:100BE0008C420020AF820004326200071040FFD91F
-:100BF0003C028000326200011040002D326200028F
-:100C00003C0580008CA2010000002021ACA2002045
-:100C10008CA301042C42078110400008ACA300A85B
-:100C200094A2010824032000304270001443000302
-:100C30003C02800890420005304400FF0E0001593C
-:100C4000000000003C0280009042010B304300FF96
-:100C50002C62001E54400004000310800E00018628
-:100C60000A0002EC00000000005410218C42000039
-:100C70000040F80900000000104000043C02800021
-:100C80008C4301043C026020AC4300143C02080089
-:100C90008C4200343C0440003C03800024420001AC
-:100CA000AC6401383C010800AC220034326200021E
-:100CB00010400010326200043C1080008E0201409F
-:100CC000000020210E000159AE0200200E00038317
-:100CD000000000003C024000AE0201783C02080027
-:100CE0008C420038244200013C010800AC2200384C
-:100CF000326200041040FF973C0280003C108000EC
-:100D00008E020180000020210E000159AE02002059
-:100D10008E03018024020F00546200073C02800809
-:100D20008E0201883C0300E03042FFFF00431025A3
-:100D30000A000328AE020080344200809042000086
-:100D400024030050304200FF14430007000000005D
-:100D50000E000362000000001440000300000000C9
-:100D60000E000971000000003C0208008C42003CAB
-:100D70003C0440003C03800024420001AC6401B804
-:100D80003C010800AC22003C0A0002A33C028000A7
-:100D90003C02900034420001008220253C02800089
-:100DA000AC4400203C0380008C6200200440FFFE25
-:100DB0000000000003E00008000000003C0280008A
-:100DC000344300010083202503E00008AC440020E8
-:100DD00027BDFFE0AFB10014AFB000100080882144
-:100DE000AFBF00180E00033230B000FF8F83FF94B6
-:100DF000022020219062002502028025A07000259B
-:100E00008C7000183C0280000E00033D020280241A
-:100E10001600000B8FBF00183C0480008C8201F884
-:100E20000440FFFE348201C024030002AC510000E4
-:100E3000A04300043C021000AC8201F88FBF0018F0
-:100E40008FB100148FB0001003E0000827BD002010
-:100E500027BDFFE83C028000AFBF00103442018094
-:100E6000944300048C4400083063020010600005C5
-:100E7000000028210E00100C000000000A0003787A
-:100E8000240500013C02FF000480000700821824B2
-:100E90003C02040014620004240500018F82FF94C8
-:100EA00090420008240500018FBF001000A010210F
-:100EB00003E0000827BD00188F82FF982405000179
-:100EC000A040001A3C028000344201400A00034264
-:100ED0008C4400008F85FF9427BDFFE0AFBF001C4E
-:100EE000AFB20018AFB10014AFB0001090A2000074
-:100EF000304400FF38830020388200300003182B74
-:100F00000002102B0062182410600003240200501D
-:100F1000148200A88FBF001C90A20005304200017F
-:100F2000104000A48FBF001C3C02800034420140EE
-:100F3000904200082443FFFF2C6200051040009EF1
-:100F40008FB20018000310803C030800246355ACE6
-:100F5000004310218C420000004000080000000007
-:100F60003C028000345101400E0003328E24000008
-:100F70008F92FF948E2200048E50000C1602000205
-:100F800024020001AE42000C0E00033D8E2400003E
-:100F90008E220004145000068FBF001C8FB2001870
-:100FA0008FB100148FB000100A000F7827BD002009
-:100FB0008E42000C0A000419000000003C0480006E
-:100FC0003482014094A300108C4200043063FFFF80
-:100FD0001443001C0000000024020001A4A2001021
-:100FE0008C8202380441000F3C0380003C02003F29
-:100FF0003448F0003C0760003C06FFC08CE22BBC8C
-:1010000000461824004810240002130200031D8229
-:10101000106200583C0280008C8202380440FFF7C6
-:101020003C038000346201408C44000034620200C2
-:10103000AC4400003C021000AC6202380A00043BE1
-:101040008FBF001C94A200100A00041900000000C9
-:10105000240200201482000F3C0280003C03800028
-:1010600094A20012346301408C6300043042FFFFFD
-:10107000146200050000000024020001A4A2001276
-:101080000A0004028FBF001C94A200120A00041977
-:1010900000000000345101400E0003328E24000095
-:1010A0008F92FF948E230004964200123050FFFF6F
-:1010B0001603000224020001A64200120E00033DA6
-:1010C0008E2400008E220004160200068FBF001C32
-:1010D0008FB200188FB100148FB000100A00037C8B
-:1010E00027BD0020964200120A00041900000000EB
-:1010F0003C03800094A20014346301408C6300041C
-:101100003042FFFF14620008240200018FBF001C60
-:101110008FB200188FB100148FB00010A4A2001479
-:101120000A00146327BD002094A20014144000217B
-:101130008FBF001C0A000435000000003C03800043
-:1011400094A20016346301408C6300043042FFFF18
-:101150001462000D240200018FBF001C8FB2001822
-:101160008FB100148FB00010A4A200160A000B1457
-:1011700027BD00209442007824420004A4A200105D
-:101180000A00043B8FBF001C94A200162403000138
-:101190003042FFFF144300078FBF001C3C020800D1
-:1011A0008C420070244200013C010800AC22007017
-:1011B0008FBF001C8FB200188FB100148FB00010C9
-:1011C00003E0000827BD002027BDFFD8AFB20018FC
-:1011D0008F92FF94AFB10014AFBF0020AFB3001CDB
-:1011E000AFB000103C028000345101008C5001006F
-:1011F0009242000092230009304400FF2402001FA5
-:10120000106200AB28620020104000192402003850
-:101210002862000A1040000D2402000B286200081A
-:101220001040002E8F820024046001042862000216
-:101230001440002A8F820024240200061062002637
-:101240008FBF00200A00055F8FB3001C1062006092
-:101250002862000B144000FA8FBF00202402000E09
-:10126000106200788F8200240A00055F8FB3001C93
-:10127000106200D2286200391040000A2402008067
-:1012800024020036106200E528620037104000C3D7
-:1012900024020035106200D98FBF00200A00055FCC
-:1012A0008FB3001C1062002D2862008110400006E0
-:1012B000240200C824020039106200C98FBF002038
-:1012C0000A00055F8FB3001C106200A28FBF0020D0
-:1012D0000A00055F8FB3001C8F8200248C42000C33
-:1012E000104000D78FBF00200E000D8400000000CA
-:1012F0003C038000346301008C6200008F85002075
-:10130000946700089466000CACA200008C64000492
-:101310008F82002400063400ACA400049448001E10
-:101320008C62001800073C0000E83825ACA20008D9
-:101330008C62001C24040001ACA2000C9062000A24
-:1013400000C23025ACA60010ACA00014ACA0001860
-:10135000ACA7001C0A00051D8FBF00208F8200244F
-:101360008C42000C104000B68FBF00200E000D8490
-:10137000000000008F820024962400089625000CAF
-:101380009443001E000422029626000E8F82002045
-:10139000000426000083202500052C003C0300806B
-:1013A00000A6282500832025AC400000AC400004A6
-:1013B000AC400008AC40000CAC450010AC40001440
-:1013C000AC400018AC44001C0A00051C24040001B9
-:1013D0009622000C14400018000000009242000504
-:1013E0003042001014400014000000000E000332D0
-:1013F0000200202192420005020020213442001008
-:101400000E00033DA242000592420000240300208A
-:10141000304200FF10430089020020218FBF0020CE
-:101420008FB3001C8FB200188FB100148FB0001062
-:101430000A00107527BD00280000000D0A00055E97
-:101440008FBF00208C42000C1040007D8FBF002019
-:101450000E000D84000000008E2200048F84002006
-:101460009623000CAC8200003C0280089445002CBE
-:101470008F82002400031C0030A5FFFF9446001E4D
-:101480003C02400E0065182500C23025AC830004E4
-:10149000AC800008AC80000CAC800010AC80001464
-:1014A000AC800018AC86001C0A00051C2404000156
-:1014B0000E000332020020218F93FF9802002021AA
-:1014C0000E00033DA660000C020020210E00034226
-:1014D000240500018F8200248C42000C104000582B
-:1014E0008FBF00200E000D84000000009622000C2B
-:1014F0008F83002000021400AC700000AC62000476
-:10150000AC6000088E4400388F820024AC64000C6C
-:101510008E46003C9445001E3C02401FAC66001005
-:1015200000A228258E62000424040001AC6200148D
-:10153000AC600018AC65001C8FBF00208FB3001C8E
-:101540008FB200188FB100148FB000100A000DB8D0
-:1015500027BD0028240200201082003A8FB3001C0F
-:101560000E000F5E00000000104000358FBF00200D
-:101570003C0480008C8201F80440FFFE348201C0EC
-:1015800024030002AC500000A04300043C02100001
-:10159000AC8201F80A00055E8FBF00200200202106
-:1015A0008FBF00208FB3001C8FB200188FB10014C2
-:1015B0008FB000100A000EA727BD00289625000C4A
-:1015C000020020218FBF00208FB3001C8FB20018B3
-:1015D0008FB100148FB000100A000ECC27BD002878
-:1015E000020020218FB3001C8FB200188FB10014AD
-:1015F0008FB000100A000EF727BD00289225000DBD
-:10160000020020218FB3001C8FB200188FB100148C
-:101610008FB000100A000F4827BD002802002021CB
-:101620008FBF00208FB3001C8FB200188FB1001441
-:101630008FB000100A000F1F27BD00288FBF0020A9
-:101640008FB3001C8FB200188FB100148FB0001040
-:1016500003E0000827BD00283C0580008CA202782A
-:101660000440FFFE34A2024024030002AC44000008
-:10167000A04300043C02100003E00008ACA2027882
-:10168000A380001803E00008A38000193C03800039
-:101690008C6202780440FFFE8F82001CAC62024024
-:1016A00024020002A06202443C02100003E0000891
-:1016B000AC6202783C02600003E000088C425404F3
-:1016C0009083003024020005008040213063003FF9
-:1016D0000000482114620005000050219082004C57
-:1016E0009483004E304900FF306AFFFFAD00000CCC
-:1016F000AD000010AD000024950200148D05001C03
-:101700008D0400183042FFFF004910230002110031
-:10171000000237C3004038210086202300A2102B8E
-:101720000082202300A72823AD05001CAD0400186B
-:10173000A5090014A5090020A50A001603E0000869
-:10174000A50A002203E000080000000027BDFFD822
-:10175000AFB200183C128008AFB40020AFB3001C39
-:10176000AFB10014AFBF0024AFB00010365101007C
-:101770003C0260008C4254049222000C3C1408008D
-:10178000929400F7304300FF2402000110620032FF
-:101790000080982124020002146200353650008037
-:1017A0000E00143D000000009202004C2403FF8054
-:1017B0003C0480003042007F000211C024420240FD
-:1017C0000262102100431824AC8300949245000863
-:1017D0009204004C3042007F3C03800614850007D1
-:1017E000004380212402FFFFA22200112402FFFFF8
-:1017F000A62200120A0005D22402FFFF9602002052
-:10180000A222001196020022A62200128E020024BB
-:101810003C048008AE2200143485008090A2004C65
-:1018200034830100A06200108CA2003CAC6200185E
-:101830008C820068AC6200F48C820064AC6200F0C0
-:101840008C82006CAC6200F824020001A0A2006847
-:101850000A0005EE3C0480080E001456000000004B
-:1018600036420080A04000680A0005EE3C04800873
-:10187000A2000068A20000690A0006293C02800854
-:10188000348300808C62003834850100AC62006CC7
-:1018900024020001A062006990A200D59083000894
-:1018A000305100FF3072007F12320019001111C058
-:1018B00024420240026210212403FF8000431824C6
-:1018C0003C048000AC8300943042007F3C038006DF
-:1018D000004380218E02000C1040000D02002021E8
-:1018E0000E00057E0000000026220001305100FF9E
-:1018F0009203003C023410260002102B0002102339
-:101900003063007F022288240A0005F8A203003C0D
-:101910003C088008350401008C8200E03507008017
-:10192000ACE2003C8C8200E0AD02000090E5004C8F
-:10193000908600D590E3004C908400D52402FF806F
-:1019400000A228243063007F308400FF00A62825F1
-:101950000064182A1060000230A500FF38A500803E
-:10196000A0E5004CA10500093C0280089043000E50
-:10197000344400803C058000A043000A8C8300189A
-:101980003C027FFF3442FFFF00621824AC83001842
-:101990008CA201F80440FFFE00000000ACB301C0BF
-:1019A0008FBF00248FB400208FB3001C8FB20018AB
-:1019B0008FB100148FB0001024020002A0A201C455
-:1019C00027BD00283C02100003E00008ACA201F88B
-:1019D00090A2000024420001A0A200003C030800E5
-:1019E0008C6300F4304200FF144300020080302179
-:1019F000A0A0000090A200008F84001C000211C073
-:101A00002442024024830040008220212402FF80DF
-:101A1000008220243063007F3C02800A006218218B
-:101A20003C028000AC44002403E00008ACC300008A
-:101A300094820006908300058C85000C8C86001033
-:101A40008C8700188C88001C8C8400203C010800C6
-:101A5000A42256C63C010800A02356C53C0108003C
-:101A6000AC2556CC3C010800AC2656D03C01080001
-:101A7000AC2756D83C010800AC2856DC3C010800D5
-:101A8000AC2456E003E00008000000003C0280089F
-:101A9000344201008C4400343C038000346504006F
-:101AA000AC6400388C420038AF850028AC62003C42
-:101AB0003C020005AC6200300000000000000000A5
-:101AC00003E00008000000003C020006308400FF34
-:101AD000008220253C028000AC4400300000000061
-:101AE00000000000000000003C0380008C62000049
-:101AF000304200101040FFFD3462040003E0000893
-:101B0000AF82002894C200003C080800950800CA73
-:101B100030E7FFFF0080482101021021A4C200002D
-:101B200094C200003042FFFF00E2102B544000013D
-:101B3000A4C7000094A200003C0308008C6300CC02
-:101B400024420001A4A2000094A200003042FFFF42
-:101B5000144300073C0280080107102BA4A00000DA
-:101B60005440000101003821A4C700003C02800855
-:101B7000344601008CC3002894A200003C0480007D
-:101B80003042FFFE000210C000621021AC82003C17
-:101B90008C82003C006218231860000400000000E2
-:101BA0008CC200240A0006BA244200018CC2002420
-:101BB000AC8200383C020050344200103C038000EC
-:101BC000AC620030000000000000000000000000D7
-:101BD0008C620000304200201040FFFD0000000039
-:101BE00094A200003C04800030420001000210C0BA
-:101BF000004410218C430400AD2300008C420404F7
-:101C0000AD2200043C02002003E00008AC8200305A
-:101C100027BDFFE0AFB20018AFB10014AFB00010A5
-:101C2000AFBF001C94C2000000C080213C1208001D
-:101C3000965200C624420001A6020000960300004E
-:101C400094E2000000E03021144300058FB1003021
-:101C50000E00068F024038210A0006F10000000045
-:101C60008C8300048C82000424420040046100073D
-:101C7000AC8200048C8200040440000400000000D8
-:101C80008C82000024420001AC8200009602000019
-:101C90003042FFFF50520001A600000096220000D3
-:101CA00024420001A62200003C02800834420100C8
-:101CB000962300009442003C144300048FBF001C94
-:101CC00024020001A62200008FBF001C8FB2001862
-:101CD0008FB100148FB0001003E0000827BD002072
-:101CE00027BDFFE03C028008AFBF0018344201006E
-:101CF0008C4800343C03800034690400AC68003830
-:101D00008C42003830E700FFAF890028AC62003C0D
-:101D10003C020005AC620030000000000000000042
-:101D200000000000000000000000000000000000B3
-:101D30008C82000C8C82000C97830016AD22000070
-:101D40008C82001000604021AD2200048C820018BB
-:101D5000AD2200088C82001CAD22000C8CA2001465
-:101D6000AD2200108C820020AD220014908200056C
-:101D7000304200FF00021200AD2200188CA20018B1
-:101D8000AD22001C8CA2000CAD2200208CA2001001
-:101D9000AD2200248CA2001CAD2200288CA20020C1
-:101DA000AD22002C3402FFFFAD260030AD20003400
-:101DB000506200013408FFFFAD28003850E00011E8
-:101DC0003C0280083C048008348401009482005066
-:101DD0003042FFFFAD22003C9483004494850044D0
-:101DE000240200013063FFFF000318C200641821C1
-:101DF0009064006430A5000700A210040A00075C8C
-:101E00000044102534420100AD20003C94430044BE
-:101E1000944400443063FFFF000318C2006218219D
-:101E200030840007906500642402000100821004E1
-:101E30000002102700451024A0620064000000008A
-:101E400000000000000000003C0200063442004098
-:101E50003C038000AC620030000000000000000085
-:101E6000000000008C620000304200101040FFFDB6
-:101E70003C06800834C201503463040034C7014A70
-:101E800034C4013434C5014034C60144AFA200104B
-:101E90000E0006D2AF8300288FBF001803E00008B1
-:101EA00027BD00208F8300143C0608008CC600E884
-:101EB0008F82001C30633FFF000319800046102111
-:101EC000004310212403FF80004318243C068000B7
-:101ED000ACC300283042007F3C03800C004330211B
-:101EE00090C2000D30A500FF0000382134420010E0
-:101EF000A0C2000D8F8900143C028008344201000A
-:101F00009443004400091382304800032402000176
-:101F1000A4C3000E1102000B2902000210400005AC
-:101F2000240200021100000C240300010A0007A48F
-:101F30000000182111020006000000000A0007A49A
-:101F4000000018218CC2002C0A0007A424430001C1
-:101F50008CC20014244300018CC200180043102BD3
-:101F60005040000A240700012402002714A20003A5
-:101F70003C0380080A0007B1240700013463010014
-:101F80009462004C24420001A462004C00091382B8
-:101F9000304300032C620002104000090080282119
-:101FA000146000040000000094C200340A0007C15D
-:101FB0003046FFFF8CC600380A0007C10080282188
-:101FC000000030213C040800248456C00A000706A3
-:101FD0000000000027BDFF90AFB60068AFB50064F9
-:101FE000AFB40060AFB3005CAFB20058AFB1005403
-:101FF000AFBF006CAFB000508C9000000080B021EB
-:102000003C0208008C4200E8960400328F83001CDA
-:102010002414FF8030843FFF0062182100042180D7
-:1020200000641821007410243C13800000A090214B
-:1020300090A50000AE620028920400323C02800CA1
-:102040003063007F00628821308400C02402004099
-:10205000148200320000A8218E3500388E2200182C
-:102060001440000224020001AE2200189202003C3B
-:10207000304200201440000E8F83001C000511C068
-:102080002442024000621821306400783C02008043
-:102090000082202500741824AE630800AE64081086
-:1020A0008E2200188E03000800431021AE22001873
-:1020B0008E22002C8E230018244200010062182B6F
-:1020C0001060004300000000924200002442000122
-:1020D000A24200003C0308008C6300F4304200FF81
-:1020E00050430001A2400000924200008F84001C77
-:1020F000000211C024420240248300403063007F6C
-:10210000008220213C02800A0094202400621821D1
-:10211000AE6400240A0008D2AEC30000920300326D
-:102120002402FFC000431024304200FF1440000589
-:1021300024020001AE220018962200340A00084250
-:102140003055FFFF8E22001424420001AE220018F9
-:102150009202003000021600000216030441001C27
-:10216000000000009602003227A400100080282101
-:10217000A7A20016960200320000302124070001B9
-:102180003042FFFFAF8200140E000706AFA0001C14
-:10219000960200328F83001C3C0408008C8400E807
-:1021A00030423FFF000211800064182100621821B4
-:1021B00000741024AE62002C3063007F3C02800E5D
-:1021C000006218219062000D3042007FA062000D75
-:1021D0009222000D304200105040007892420000E0
-:1021E0003C028008344401009482004C8EC30000FD
-:1021F0003C130800967300C62442FFFFA482004CE3
-:10220000946200329623000E3054FFFF3070FFFFBF
-:102210003C0308008C6300D000701807A7A30038A7
-:102220009482003E3063FFFF3042FFFF14620007DC
-:10223000000000008C8200303C038000244200300B
-:10224000AC62003C0A00086A8C82002C9482004038
-:102250003042FFFF5462000927A400408C820038FE
-:102260003C03800024420030AC62003C8C8200348D
-:10227000AC6200380A0008793C03800027A50038CA
-:1022800027A60048026038210E00068FA7A000484C
-:102290008FA300403C02800024630030AC43003830
-:1022A0008FA30044AC43003C3C0380003C0200058B
-:1022B000AC6200303C028008344401009482004249
-:1022C000346304003042FFFF0202102B1440000769
-:1022D000AF8300289482004E9483004202021021B2
-:1022E000004310230A00088F3043FFFF9483004E01
-:1022F00094820042026318210050102300621823C8
-:102300003063FFFF3C028008344401009482003CAB
-:102310003042FFFF14430003000000000A00089F42
-:10232000240300019482003C3042FFFF0062102B26
-:10233000144000058F8200289482003C0062102324
-:102340003043FFFF8F820028AC550000AC400004F2
-:10235000AC540008AC43000C3C02000634420010B0
-:102360003C038000AC620030000000000000000070
-:10237000000000008C620000304200101040FFFDA1
-:102380003C04800834840100001018C20064182145
-:102390009065006432020007240600010046100424
-:1023A00000451025A0620064948300429622000E2E
-:1023B00050430001A386001892420000244200010D
-:1023C000A24200003C0308008C6300F4304200FF8E
-:1023D00050430001A2400000924200008F84001C84
-:1023E000000211C0244202402483004000822021C8
-:1023F0002402FF80008220243063007F3C02800A98
-:10240000006218213C028000AC440024AEC30000EE
-:102410008FBF006C8FB600688FB500648FB400600A
-:102420008FB3005C8FB200588FB100548FB0005052
-:1024300003E0000827BD007027BDFFD8AFB3001C24
-:10244000AFB20018AFB10014AFB00010AFBF0020A2
-:102450000080982100E0802130B1FFFF0E000D8444
-:1024600030D200FF0000000000000000000000006B
-:102470008F8200208F830024AC510000AC520004F6
-:10248000AC530008AC40000CAC400010AC40001451
-:10249000AC4000189463001E02038025AC50001C61
-:1024A0000000000000000000000000002404000103
-:1024B0008FBF00208FB3001C8FB200188FB10014A3
-:1024C0008FB000100A000DB827BD002830A5FFFF0F
-:1024D0000A0008DC30C600FF3C02800834430100DB
-:1024E0009462000E3C080800950800C63046FFFFC5
-:1024F00014C000043402FFFF946500EA0A000929B1
-:102500008F84001C10C20027000000009462004E5F
-:102510009464003C3045FFFF00A6102300A6182B52
-:102520003087FFFF106000043044FFFF00C5102318
-:1025300000E210233044FFFF0088102B1040000EF3
-:1025400000E810233C028008344401002403000109
-:1025500034420080A44300162402FFFFA482000E30
-:10256000948500EA8F84001C0000302130A5FFFF15
-:102570000A0009013C0760200044102A10400009AD
-:102580003C0280083443008094620016304200010F
-:10259000104000043C0280009442007E244200145B
-:1025A000A462001603E000080000000027BDFFE061
-:1025B0003C028008AFBF001CAFB0001834420100DD
-:1025C000944300429442004C104000193068FFFFD1
-:1025D0009383001824020001146200298FBF001C9D
-:1025E0003C06800834D00100000810C200501021C1
-:1025F000904200643103000734C70148304200FFB5
-:10260000006210073042000134C9014E34C4012C6D
-:1026100034C5013E1040001634C601420E0006D2F9
-:10262000AFA90010960200420A0009463048FFFF99
-:102630003C028008344401009483004494820042A8
-:102640001043000F8FBF001C94820044A4820042FC
-:1026500094820050A482004E8C820038AC820030FC
-:1026600094820040A482003E9482004AA4820048E2
-:102670008FBF001C8FB000180A00090427BD00207E
-:102680008FB0001803E0000827BD002027BDFFA081
-:10269000AFB1004C3C118000AFBF0058AFB3005445
-:1026A000AFB20050AFB000483626018890C2000398
-:1026B0003044007FA3A400108E32018090C200003D
-:1026C0003043007F240200031062003BAF92001CE5
-:1026D00028620004104000062402000424020002C4
-:1026E000106200098FBF00580A000B0F8FB300540F
-:1026F0001062004D240200051062014E8FBF005889
-:102700000A000B0F8FB30054000411C002421021C5
-:102710002404FF8024420240004410242643004049
-:10272000AE2200243063007F3C02800A0062182140
-:102730009062003CAFA3003C00441025A062003C26
-:102740008FA3003C9062003C304200401040016C7E
-:102750008FBF00583C108008A3800018361001007D
-:102760008E0200E08C63003427A4003C27A50010F3
-:10277000004310210E0007C3AE0200E093A2001038
-:102780003C038000A20200D58C6202780440FFFE68
-:102790008F82001CAC62024024020002A06202444C
-:1027A0003C021000AC6202780E0009390000000003
-:1027B0000A000B0E8FBF00583C05800890C3000133
-:1027C00090A2000B1443014E8FBF005834A4008028
-:1027D0008C8200189082004C90A200083C0260009D
-:1027E0008C4254048C8300183C027FFF3442FFFF6C
-:1027F000006218243C0208008C4200B4AC8300182C
-:102800003C038000244200013C010800AC2200B4DB
-:102810008C6201F80440FFFE8F82001CAC6201C094
-:102820000A000AD6240200023C10800890C300016E
-:102830009202000B144301328FBF005827A40018E6
-:1028400036050110240600033C0260008C4254044B
-:102850000E000E470000000027A40028360501F0F6
-:102860000E000E47240600038FA200283603010045
-:10287000AE0200648FA2002CAE0200688FA200306E
-:10288000AE02006C93A40018906300D52402FF8070
-:102890000082102400431025304900FF3084007F5F
-:1028A0003122007F0082102A544000013929008023
-:1028B000000411C0244202402403FF800242102180
-:1028C00000431024AE220094264200403042007F94
-:1028D0003C038006004340218FA3001C2402FFFF1D
-:1028E000AFA800403C130800927300F71062003359
-:1028F00093A2001995030014304400FF3063FFFFDA
-:102900000064182B106000100000000095040014F3
-:102910008D07001C8D0600183084FFFF0044202323
-:102920000004210000E438210000102100E4202BE5
-:1029300000C2302100C43021AD07001CAD060018D4
-:102940000A000A2F93A20019950400148D07001C99
-:102950008D0600183084FFFF008220230004210030
-:10296000000010210080182100C2302300E4202B39
-:1029700000C4302300E33823AD07001CAD06001867
-:1029800093A200198FA30040A462001497A2001A1A
-:10299000A46200168FA2001CAC6200108FA2001C63
-:1029A000AC62000C93A20019A462002097A2001A46
-:1029B000A46200228FA2001CAC6200243C048008A8
-:1029C000348300808C6200388FA20020012088218F
-:1029D000AC62003C8FA20020AC82000093A20018E1
-:1029E000A062004C93A20018A0820009A0600068B9
-:1029F00093A20018105100512407FF803229007F54
-:102A0000000911C024420240024210213046007FDA
-:102A10003C03800000471024AC6200943C02800616
-:102A200000C2302190C2003CAFA60040000020212F
-:102A300000471025A0C2003C8FA80040950200026C
-:102A4000950300148D07001C3042FFFF3063FFFF29
-:102A50008D060018004310230002110000E2382107
-:102A600000E2102B00C4302100C23021AD07001C51
-:102A7000AD06001895020002A5020014A50000167C
-:102A80008D020008AD0200108D020008AD02000C9E
-:102A900095020002A5020020A50000228D02000878
-:102AA000AD0200249102003C304200401040001A68
-:102AB000262200013C108008A3A90038A38000183A
-:102AC000361001008E0200E08D03003427A4004080
-:102AD00027A50038004310210E0007C3AE0200E016
-:102AE00093A200383C038000A20200D58C620278D9
-:102AF0000440FFFE8F82001CAC62024024020002F0
-:102B0000A06202443C021000AC6202780E00093957
-:102B100000000000262200013043007F14730004EF
-:102B2000004020212403FF8002231024004320269C
-:102B300093A200180A000A4B309100FF93A40018DA
-:102B40008FA3001C2402FFFF1062000A308900FFDF
-:102B500024820001248300013042007F14530005C9
-:102B6000306900FF2403FF800083102400431026F7
-:102B7000304900FF3C028008904200080120882173
-:102B8000305000FF123000193222007F000211C0C5
-:102B900002421021244202402403FF8000431824F3
-:102BA0003C048000AC8300943042007F3C038006EC
-:102BB000004310218C43000C004020211060000BCA
-:102BC000AFA200400E00057E000000002623000199
-:102BD0002405FF803062007F145300020225202468
-:102BE000008518260A000AAF307100FF3C048008F7
-:102BF000348400808C8300183C027FFF3442FFFF46
-:102C000000621824AC8300183C0380008C6201F839
-:102C10000440FFFE00000000AC7201C0240200026C
-:102C2000A06201C43C021000AC6201F80A000B0E65
-:102C30008FBF00583C04800890C300019082000BB5
-:102C40001443002F8FBF0058349000809202000878
-:102C500030420040104000200000000092020008B6
-:102C60000002160000021603044100050240202164
-:102C70000E000ECC240500930A000B0E8FBF0058E7
-:102C80009202000924030018304200FF1443000D93
-:102C900002402021240500390E000E64000030217E
-:102CA0000E0003328F84001C8F82FF9424030012D5
-:102CB000A04300090E00033D8F84001C0A000B0E88
-:102CC0008FBF0058240500360E000E64000030212E
-:102CD0000A000B0E8FBF00580E0003320240202165
-:102CE000920200058F84001C344200200E00033D38
-:102CF000A20200050E0010758F84001C8FBF0058C3
-:102D00008FB300548FB200508FB1004C8FB0004889
-:102D100003E0000827BD00603C0280083445010044
-:102D20003C0280008C42014094A3000E0000302140
-:102D300000402021AF82001C3063FFFF3402FFFF00
-:102D4000106200063C0760202402FFFFA4A2000ED0
-:102D500094A500EA0A00090130A5FFFF03E000087E
-:102D60000000000027BDFFC83C0280003C06800830
-:102D7000AFB5002CAFB1001CAFBF0030AFB400281E
-:102D8000AFB30024AFB20020AFB00018345101003F
-:102D900034C501008C4301008E2200148CA400E491
-:102DA0000000A821AF83001C0044102318400052EB
-:102DB000A38000188E22001400005021ACA200E471
-:102DC00090C3000890A200D53073007FA3A200102A
-:102DD0008CB200E08CB400E4304200FF1053003BA2
-:102DE00093A200108F83001C2407FF80000211C0F3
-:102DF0000062102124420240246300400047102456
-:102E00003063007F3C0980003C08800A006818217C
-:102E1000AD2200248C62003427A4001427A50010E2
-:102E2000024280210290102304400028AFA3001426
-:102E30009062003C00E21024304200FF1440001970
-:102E4000020090219062003C34420040A062003CAD
-:102E50008F86001C93A3001024C200403042007FE4
-:102E6000004828213C0208008C4200F42463000141
-:102E7000306400FF14820002A3A30010A3A000107E
-:102E800093A20010AFA50014000211C0244202401A
-:102E900000C2102100471024AD2200240A000B4577
-:102EA00093A200100E0007C3000000003C0280083F
-:102EB00034420100AC5000E093A30010240A00014A
-:102EC000A04300D50A000B4593A200102402000184
-:102ED000154200093C0380008C6202780440FFFE2A
-:102EE0008F82001CAC62024024020002A0620244F5
-:102EF0003C021000AC6202789222000B2403000214
-:102F0000304200FF144300720000000096220008C7
-:102F1000304300FF24020082146200402402008437
-:102F20003C028000344901008D22000C95230006EC
-:102F3000000216023063FFFF3045003F24020027E5
-:102F400010A2000FAF83001428A200281040000830
-:102F5000240200312402002110A2000924020025CD
-:102F600010A20007938200190A000BBD00000000A8
-:102F700010A20007938200190A000BBD0000000098
-:102F80000E000777012020210A000C3D0000000000
-:102F90003C0380008C6202780440FFFE8F82001C9C
-:102FA000AC62024024020002A06202443C02100013
-:102FB000AC6202780A000C3D000000009523000678
-:102FC000912400058D25000C8D2600108D270018FA
-:102FD0008D28001C8D290020244200013C0108009E
-:102FE000A42356C63C010800A02456C53C01080095
-:102FF000AC2556CC3C010800AC2656D03C0108005C
-:10300000AC2756D83C010800AC2856DC3C0108002F
-:10301000AC2956E00A000C3DA38200191462000A94
-:10302000240200813C02800834420100944500EAF9
-:10303000922600058F84001C30A5FFFF30C600FFDC
-:103040000A000BFE3C0760211462005C00000000D7
-:103050009222000A304300FF306200201040000737
-:10306000306200403C02800834420100944500EA8E
-:103070008F84001C0A000BFC24060040104000074F
-:10308000000316003C02800834420100944500EA27
-:103090008F84001C0A000BFC24060041000216036A
-:1030A000044100463C02800834420100944500EA95
-:1030B0008F84001C2406004230A5FFFF3C076019E6
-:1030C0000E000901000000000A000C3D0000000095
-:1030D0009222000B24040016304200FF1044000628
-:1030E0003C0680009222000B24030017304200FFB0
-:1030F000144300320000000034C5010090A2000B10
-:10310000304200FF1444000B000080218CA20020FC
-:103110008CA400202403FF800043102400021140EF
-:103120003084007F004410253C032000004310251C
-:10313000ACC2083094A2000800021400000214037C
-:10314000044200012410000194A2000830420080D3
-:103150005040001A0200A82194A20008304220002A
-:10316000504000160200A8218CA300183C021C2D20
-:10317000344219ED106200110200A8213C0208003F
-:103180008C4200D4104000053C0280082403000457
-:1031900034420100A04300FC3C028008344201009C
-:1031A000944500EA8F84001C2406000630A5FFFF2A
-:1031B0000E0009013C0760210200A8210E00093918
-:1031C000000000009222000A304200081040000473
-:1031D00002A010210E0013790000000002A01021AF
-:1031E0008FBF00308FB5002C8FB400288FB3002420
-:1031F0008FB200208FB1001C8FB0001803E00008D0
-:1032000027BD00382402FF80008220243C02900069
-:1032100034420007008220253C028000AC4400209C
-:103220003C0380008C6200200440FFFE0000000090
-:1032300003E00008000000003C0380002402FF803F
-:10324000008220243462000700822025AC64002024
-:103250008C6200200440FFFE0000000003E0000834
-:103260000000000027BDFFD8AFB3001CAFB10014B1
-:10327000AFB00010AFBF0020AFB200183C1180000B
-:103280003C0280088E32002034530100AE2400201E
-:10329000966300EA000514003C074000004738250B
-:1032A00000A08021000030210E0009013065FFFFE1
-:1032B000240200A1160200022402FFFFA2620009FC
-:1032C000AE3200208FBF00208FB3001C8FB20018D9
-:1032D0008FB100148FB0001003E0000827BD002854
-:1032E0003C0280082403000527BDFFE834420100AA
-:1032F000A04300FCAFBF00103C0280008C420100E4
-:10330000240500A1004020210E000C67AF82001CA4
-:103310003C0380008C6202780440FFFE8F82001C18
-:103320008FBF001027BD0018AC62024024020002CB
-:10333000A06202443C021000AC62027803E0000884
-:103340000000000027BDFFE83C068000AFBF001072
-:1033500034C7010094E20008304400FF3883008243
-:10336000388200842C6300012C4200010062182581
-:103370001060002D24020083938200195040003B0E
-:103380008FBF00103C020800904256CC8CC4010054
-:103390003C06080094C656C63045003F38A30032AC
-:1033A00038A2003F2C6300012C4200010062182566
-:1033B000AF84001CAF860014A380001914600007BE
-:1033C00000E020212402002014A2001200000000CE
-:1033D0003402FFFF14C2000F00000000240200208E
-:1033E00014A2000500E028218CE300142402FFFF52
-:1033F0005062000B8FBF00103C040800248456C0AC
-:10340000000030210E000706240700010A000CD638
-:103410008FBF00100E000777000000008FBF001064
-:103420000A00093927BD001814820004240200850F
-:103430008CC501040A000CE1000020211482000662
-:103440002482FF808CC50104240440008FBF00103B
-:103450000A00016727BD0018304200FF2C4200021D
-:1034600010400004240200228FBF00100A000B2726
-:1034700027BD0018148200048F8200248FBF001023
-:103480000A000C8627BD00188C42000C1040001E5C
-:1034900000E0282190E300092402001814620003D0
-:1034A000240200160A000CFC240300081462000722
-:1034B00024020017240300123C02800834420080DA
-:1034C000A04300090A000D0994A7000854620007F0
-:1034D00094A700088F82FF942404FFFE9043000508
-:1034E00000641824A043000594A7000890A6001BC0
-:1034F0008CA4000094A500068FBF001000073C00BC
-:103500000A0008DC27BD00188FBF001003E0000888
-:1035100027BD00188F8500243C04800094A2002A57
-:103520008CA30034000230C02402FFF000C210243B
-:1035300000621821AC83003C8CA200303C03800068
-:10354000AC8200383C02005034420010AC620030C3
-:103550000000000000000000000000008C6200007D
-:10356000304200201040FFFD30C20008104000062D
-:103570003C0280008C620408ACA200208C62040C27
-:103580000A000D34ACA200248C430400ACA300203C
-:103590008C420404ACA200243C0300203C028000C6
-:1035A000AC4300303C0480008C8200300043102487
-:1035B0001440FFFD8F8600243C020040AC820030A6
-:1035C00094C3002A94C2002894C4002C94C5002EF1
-:1035D00024630001004410213064FFFFA4C20028CE
-:1035E00014850002A4C3002AA4C0002A03E0000836
-:1035F000000000008F84002427BDFFE83C05800404
-:1036000024840010AFBF00100E000E472406000AED
-:103610008F840024948200129483002E3042000F85
-:10362000244200030043180424027FFF0043102BB0
-:1036300010400002AC8300000000000D0E000D13CE
-:10364000000000008F8300248FBF001027BD0018EA
-:10365000946200149463001A3042000F00021500B7
-:10366000006218253C02800003E00008AC4300A083
-:103670008F8300243C028004944400069462001A64
-:103680008C650000A4640016004410233042FFFF44
-:103690000045102B03E00008384200018F8400240D
-:1036A0003C0780049486001A8C85000094E2000692
-:1036B000A482001694E3000600C310233042FFFFEB
-:1036C0000045102B384200011440FFF8A483001677
-:1036D00003E00008000000008F8400243C02800406
-:1036E000944200069483001A8C850000A482001680
-:1036F000006210233042FFFF0045102B38420001CA
-:103700005040000D8F850024006030213C0780046C
-:1037100094E20006A482001694E3000600C310237E
-:103720003042FFFF0045102B384200011440FFF8E3
-:10373000A48300168F8500243C03800034620400BB
-:103740008CA40020AF820020AC6400388CA200243E
-:10375000AC62003C3C020005AC62003003E00008B3
-:10376000ACA000048F8400243C0300068C8200047B
-:1037700000021140004310253C038000AC62003081
-:103780000000000000000000000000008C6200004B
-:10379000304200101040FFFD34620400AC80000491
-:1037A00003E00008AF8200208F86002427BDFFE0E1
-:1037B000AFB10014AFB00010AFBF00188CC300044D
-:1037C0008CC500248F820020309000FF94C4001A22
-:1037D00024630001244200202484000124A7002047
-:1037E000ACC30004AF820020A4C4001AACC70024FC
-:1037F00004A100060000882104E2000594C2001A1A
-:103800008CC2002024420001ACC2002094C2001AE5
-:1038100094C300282E040001004310262C4200010E
-:10382000004410245040000594C2001A24020001F4
-:10383000ACC2000894C2001A94C300280010202BC8
-:10384000004310262C4200010044102514400007BC
-:10385000000000008CC20008144000042402001084
-:103860008CC300041462000F8F8500240E000DA786
-:10387000241100018F820024944300289442001AEE
-:1038800014430003000000000E000D1300000000B0
-:10389000160000048F8500240E000D840000000037
-:1038A0008F85002494A2001E94A4001C24420001D1
-:1038B0003043FFFF14640002A4A2001EA4A0001E57
-:1038C0001200000A3C02800494A2001494A3001A7F
-:1038D0003042000F00021500006218253C028000F3
-:1038E000AC4300A00A000E1EACA0000894420006E3
-:1038F00094A3001A8CA40000A4A200160062102356
-:103900003042FFFF0044102B384200011040000DF0
-:1039100002201021006030213C07800494E2000660
-:10392000A4A2001694E3000600C310233042FFFF58
-:103930000044102B384200011440FFF8A4A30016E5
-:10394000022010218FBF00188FB100148FB000101B
-:1039500003E0000827BD002003E00008000000008D
-:103960008F82002C3C03000600021140004310250A
-:103970003C038000AC62003000000000000000004A
-:10398000000000008C620000304200101040FFFD7B
-:1039900034620400AF82002803E00008AF80002CEE
-:1039A00003E000080000102103E000080000000010
-:1039B0003084FFFF30A5FFFF0000182110800007B2
-:1039C000000000003082000110400002000420428C
-:1039D000006518210A000E3D0005284003E000089C
-:1039E0000060102110C0000624C6FFFF8CA200005A
-:1039F00024A50004AC8200000A000E4724840004C1
-:103A000003E000080000000010A0000824A3FFFF4E
-:103A1000AC86000000000000000000002402FFFF50
-:103A20002463FFFF1462FFFA2484000403E000080B
-:103A3000000000003C0280083442008024030001A2
-:103A4000AC43000CA4430010A4430012A443001490
-:103A500003E00008A44300168F82002427BDFFD88E
-:103A6000AFB3001CAFB20018AFB10014AFB000107C
-:103A7000AFBF00208C47000C248200802409FF8007
-:103A80003C08800E3043007F008080213C0A80008B
-:103A9000004920240068182130B100FF30D200FF17
-:103AA00010E000290000982126020100AD44002CFE
-:103AB000004928243042007F004820219062000005
-:103AC00024030050304200FF1443000400000000B3
-:103AD000AD45002C948200EA3053FFFF0E000D84A8
-:103AE000000000008F8200248F83002000112C0032
-:103AF0009442001E001224003484000100A22825F4
-:103B00003C02400000A22825AC7000008FBF0020BE
-:103B1000AC6000048FB20018AC7300088FB10014C1
-:103B2000AC60000C8FB3001CAC6400108FB00010B0
-:103B3000AC60001424040001AC60001827BD00280C
-:103B40000A000DB8AC65001C8FBF00208FB3001CAD
-:103B50008FB200188FB100148FB0001003E000087E
-:103B600027BD00283C06800034C201009043000FAE
-:103B7000240200101062000E2865001110A000073A
-:103B800024020012240200082405003A10620006F4
-:103B90000000302103E0000800000000240500358B
-:103BA0001462FFFC000030210A000E6400000000D7
-:103BB0008CC200748F83FF9424420FA003E000089E
-:103BC000AC62000C27BDFFE8AFBF00100E0003423F
-:103BD000240500013C0480088FBF0010240200016E
-:103BE00034830080A462001227BD00182402000163
-:103BF00003E00008A080001A27BDFFE0AFB2001864
-:103C0000AFB10014AFB00010AFBF001C30B2FFFF67
-:103C10000E000332008088213C028008345000806E
-:103C20009202000924030004304200FF1443000CF8
-:103C30003C028008124000082402000A0E000E5BBD
-:103C400000000000920200052403FFFE0043102440
-:103C5000A202000524020012A20200093C02800810
-:103C600034420080022020210E00033DA0400027A6
-:103C700016400003022020210E000EBF00000000AD
-:103C800002202021324600FF8FBF001C8FB2001897
-:103C90008FB100148FB00010240500380A000E64A4
-:103CA00027BD002027BDFFE0AFBF001CAFB200184A
-:103CB000AFB10014AFB000100E00033200808021BD
-:103CC0000E000E5B000000003C02800834450080BE
-:103CD00090A2000924120018305100FF1232000394
-:103CE0000200202124020012A0A2000990A20005D7
-:103CF0002403FFFE004310240E00033DA0A2000594
-:103D00000200202124050020163200070000302187
-:103D10008FBF001C8FB200188FB100148FB000103D
-:103D20000A00034227BD00208FBF001C8FB200187D
-:103D30008FB100148FB00010240500390A000E6402
-:103D400027BD002027BDFFE83C028000AFB0001077
-:103D5000AFBF0014344201009442000C2405003629
-:103D60000080802114400012304600FF0E00033214
-:103D7000000000003C02800834420080240300124E
-:103D8000A043000990430005346300100E000E5B51
-:103D9000A04300050E00033D020020210200202167
-:103DA0000E000342240500200A000F3C0000000022
-:103DB0000E000E64000000000E00033202002021FD
-:103DC0003C0280089043001B2405FF9F0200202135
-:103DD000006518248FBF00148FB00010A043001B93
-:103DE0000A00033D27BD001827BDFFE0AFBF001844
-:103DF000AFB10014AFB0001030B100FF0E000332BD
-:103E0000008080213C02800824030012344200809C
-:103E10000E000E5BA04300090E00033D02002021AE
-:103E200002002021022030218FBF00188FB1001422
-:103E30008FB00010240500350A000E6427BD002055
-:103E40003C0480089083000E9082000A1443000B0B
-:103E5000000028218F82FF942403005024050001D4
-:103E600090420000304200FF1443000400000000B4
-:103E70009082000E24420001A082000E03E00008A0
-:103E800000A010213C0380008C6201F80440FFFE7A
-:103E900024020002AC6401C0A06201C43C02100014
-:103EA00003E00008AC6201F827BDFFE0AFB20018E4
-:103EB0003C128008AFB10014AFBF001CAFB00010BF
-:103EC00036510080922200092403000A304200FF8C
-:103ED0001443003E000000008E4300048E22003890
-:103EE000506200808FBF001C92220000240300500B
-:103EF000304200FF144300253C0280008C42014008
-:103F00008E4300043642010002202821AC43001CED
-:103F10009622005C8E2300383042FFFF00021040E2
-:103F200000621821AE23001C8E4300048E2400384A
-:103F30009622005C006418233042FFFF0003184300
-:103F4000000210400043102A10400006000000004C
-:103F50008E4200048E230038004310230A000FAA6B
-:103F6000000220439622005C3042FFFF0002204006
-:103F70003C0280083443010034420080ACA4002C91
-:103F8000A040002424020001A062000C0E000F5E7D
-:103F900000000000104000538FBF001C3C02800056
-:103FA0008C4401403C0380008C6201F80440FFFE19
-:103FB00024020002AC6401C0A06201C43C021000F3
-:103FC000AC6201F80A0010078FBF001C92220009A2
-:103FD00024030010304200FF144300043C02800020
-:103FE0008C4401400A000FEE0000282192220009B3
-:103FF00024030016304200FF14430006240200147C
-:10400000A22200093C0280008C4401400A001001F9
-:104010008FBF001C8E2200388E23003C00431023EB
-:10402000044100308FBF001C92220027244200016F
-:10403000A2220027922200272C42000414400016DE
-:104040003C1080009222000924030004304200FF4B
-:10405000144300093C0280008C4401408FBF001CC7
-:104060008FB200188FB100148FB000102405009398
-:104070000A000ECC27BD00208C440140240500938B
-:104080008FBF001C8FB200188FB100148FB00010CA
-:104090000A000F4827BD00208E0401400E000332A5
-:1040A000000000008E4200042442FFFFAE420004E4
-:1040B0008E22003C2442FFFFAE22003C0E00033D56
-:1040C0008E0401408E0401408FBF001C8FB2001887
-:1040D0008FB100148FB00010240500040A000342C1
-:1040E00027BD00208FB200188FB100148FB00010D0
-:1040F00003E0000827BD00203C0680008CC2018838
-:104100003C038008346500809063000E00021402B6
-:10411000304400FF306300FF1464000E3C0280084E
-:1041200090A20026304200FF104400098F82FF94C5
-:10413000A0A400262403005090420000304200FF5B
-:1041400014430006000000000A0005A18CC4018091
-:104150003C02800834420080A044002603E00008AE
-:104160000000000027BDFFE030E700FFAFB20018FD
-:10417000AFBF001CAFB10014AFB0001000809021A1
-:1041800014E0000630C600FF000000000000000D33
-:10419000000000000A001060240001163C038008A3
-:1041A0009062000E304200FF14460023346200800B
-:1041B00090420026304200FF1446001F000000001D
-:1041C0009062000F304200FF1446001B0000000008
-:1041D0009062000A304200FF144600038F90FF9463
-:1041E0000000000D8F90FF948F82FF983C1180009B
-:1041F000AE05003CAC450000A066000A0E0003328C
-:104200008E240100A20000240E00033D8E24010034
-:104210003C0380008C6201F80440FFFE240200028F
-:10422000AC7201C0A06201C43C021000AC6201F893
-:104230000A0010618FBF001C000000000000000D8C
-:10424000000000002400013F8FBF001C8FB2001847
-:104250008FB100148FB0001003E0000827BD0020CC
-:104260008F83FF943C0280008C44010034420100A3
-:104270008C65003C9046001B0A00102724070001B3
-:104280003C0280089043000E9042000A0043102632
-:10429000304200FF03E000080002102B27BDFFE0C2
-:1042A0003C028008AFB10014AFB00010AFBF0018DF
-:1042B0003450008092020005240300303042003068
-:1042C00014430085008088218F8200248C42000CDA
-:1042D000104000828FBF00180E000D840000000007
-:1042E0008F860020ACD100009202000892030009E2
-:1042F000304200FF00021200306300FF004310252F
-:10430000ACC200049202004D000216000002160327
-:1043100004410005000000003C0308008C630048D5
-:104320000A00109F3C1080089202000830420040B2
-:10433000144000030000182192020027304300FFC0
-:104340003C108008361100809222004D00031E00B0
-:10435000304200FF0002140000621825ACC30008C0
-:104360008E2400308F820024ACC4000C8E250034D3
-:104370009443001E3C02C00BACC50010006218251F
-:104380008E22003800002021ACC200148E22003C96
-:10439000ACC200180E000DB8ACC3001C8E020004A5
-:1043A0008F8400203C058000AC8200008E2200201B
-:1043B000AC8200048E22001CAC8200088E220058C1
-:1043C0008CA3007400431021AC82000C8E22002CC0
-:1043D000AC8200108E2200408E23004400021400A4
-:1043E00000431025AC8200149222004D240300806B
-:1043F000304200FF1443000400000000AC800018AD
-:104400000A0010E38F8200248E23000C2402000196
-:104410001062000E2402FFFF92220008304200408A
-:104420001440000A2402FFFF8E23000C8CA20074AB
-:10443000006218233C0208000062102414400002AD
-:10444000000028210060282100051043AC820018DC
-:104450008F820024000020219443001E3C02C00CE7
-:10446000006218258F8200200E000DB8AC43001C9E
-:104470003C038008346201008C4200008F850020DC
-:10448000346300808FBF0018ACA20000ACA0000411
-:104490008C6400488F8200248FB10014ACA4000803
-:1044A000ACA0000CACA00010906300059446001E68
-:1044B0003C02400D00031E0000C23025ACA30014D6
-:1044C0008FB00010ACA0001824040001ACA6001CA2
-:1044D0000A000DB827BD00208FBF00188FB100144F
-:1044E0008FB0001003E0000827BD00203C028000D0
-:1044F0009443007C3C02800834460100308400FF75
-:104500003065FFFF2402000524A34650A0C4000C20
-:104510005482000C3065FFFF90C2000D2C42000752
-:104520001040000724A30A0090C3000D24020014C9
-:104530000062100400A210210A00111F3045FFFF85
-:104540003065FFFF3C0280083442008003E0000831
-:10455000A44500143C03800834680080AD05003891
-:10456000346701008CE2001C308400FF00A210239D
-:104570001840000330C600FF24A2FFFCACE2001C80
-:1045800030820001504000083C0380088D02003C4E
-:1045900000A2102304410012240400058C620004D0
-:1045A00010A2000F3C0380088C62000414A2001EBD
-:1045B000000000003C0208008C4200D8304200207D
-:1045C000104000093C0280083462008090630008BB
-:1045D0009042004C144300043C0280082404000470
-:1045E0000A00110900000000344300803442010039
-:1045F000A040000C24020001A462001410C0000AB4
-:104600003C0280008C4401003C0380008C6201F875
-:104610000440FFFE24020002AC6401C0A06201C499
-:104620003C021000AC6201F803E00008000000004A
-:1046300027BDFFE800A61823AFBF00101860008058
-:10464000308800FF3C02800834470080A0E000244E
-:1046500034440100A0E000278C82001C00A210233B
-:1046600004400056000000008CE2003C94E3005C33
-:104670008CE4002C004530233063FFFF00C3182179
-:104680000083202B1080000400E018218CE2002C15
-:104690000A00117800A2102194E2005C3042FFFF72
-:1046A00000C2102100A21021AC62001C3C02800854
-:1046B000344400809482005C8C83001C3042FFFFF5
-:1046C0000002104000A210210043102B10400004F3
-:1046D000000000008C82001C0A00118B3C06800840
-:1046E0009482005C3042FFFF0002104000A21021C3
-:1046F0003C06800834C3010034C70080AC82001C33
-:10470000A060000CACE500388C62001C00A21023F5
-:104710001840000224A2FFFCAC62001C3102000120
-:10472000104000083C0380088CE2003C00A21023EB
-:1047300004410012240400058CC2000410A20010E1
-:104740008FBF00108C62000414A2004F8FBF0010B6
-:104750003C0208008C4200D8304200201040000A81
-:104760003C02800834620080906300089042004C54
-:10477000144300053C028008240400048FBF00108D
-:104780000A00110927BD001834430080344201009B
-:10479000A040000C24020001A46200143C0280002E
-:1047A0008C4401003C0380008C6201F80440FFFE51
-:1047B000240200020A0011D8000000008CE2001C54
-:1047C000004610230043102B54400001ACE5001CB0
-:1047D00094E2005C3042FFFF0062102B144000079F
-:1047E0002402000294E2005C8CE3001C3042FFFFD4
-:1047F00000621821ACE3001C24020002ACE5003882
-:104800000E000F5EA082000C1040001F8FBF001032
-:104810003C0280008C4401003C0380008C6201F863
-:104820000440FFFE24020002AC6401C0A06201C487
-:104830003C021000AC6201F80A0011F08FBF0010BA
-:1048400031020010104000108FBF00103C028008A1
-:10485000344500808CA3001C94A2005C00661823E1
-:104860003042FFFF006218213C023FFF3444FFFF4B
-:104870000083102B544000010080182100C3102138
-:10488000ACA2001C8FBF001003E0000827BD001879
-:1048900027BDFFE800C0402100A63023AFBF0010B5
-:1048A00018C00026308A00FF3C028008344900808E
-:1048B0008D24001C8D23002C008820230064182BDD
-:1048C0001060000F344701008CE2002000461021E8
-:1048D000ACE200208CE200200044102B1440000BBE
-:1048E0003C023FFF8CE2002000441023ACE2002099
-:1048F0009522005C3042FFFF0A0012100082202146
-:10490000ACE00020008620213C023FFF3443FFFF43
-:104910000064102B54400001006020213C028008FC
-:104920003442008000851821AC43001CA0400024C4
-:10493000A04000270A0012623C03800831420010A8
-:10494000104000433C0380083C06800834C40080CB
-:104950008C82003C004810235840003E34660080A2
-:104960009082002424420001A0820024908200242E
-:104970003C0308008C630024304200FF0043102BEE
-:10498000144000688FBF001034C201008C42001C2C
-:1049900000A2102318400063000000008CC3000434
-:1049A0009482005C006818233042FFFF0003184324
-:1049B000000210400043102A1040000500000000D3
-:1049C0008CC20004004810230A0012450002104364
-:1049D0009482005C3042FFFF000210403C068008D9
-:1049E000AC82002C34C5008094A2005C8CA4002C06
-:1049F00094A3005C3042FFFF00021040008220219F
-:104A00003063FFFF0083202101041021ACA2001CB1
-:104A10008CC2000434C60100ACC2001C2402000297
-:104A20000E000F5EA0C2000C1040003E8FBF0010B1
-:104A30003C0280008C4401003C0380008C6201F841
-:104A40000440FFFE240200020A001292000000004F
-:104A500034660080ACC50038346401008C82001CD0
-:104A600000A210231840000224A2FFFCAC82001C0C
-:104A7000314200015040000A3C0380088CC2003CD7
-:104A800000A2102304430014240400058C620004D7
-:104A900014A200033C0380080A00128424040005C9
-:104AA0008C62000414A2001F8FBF00103C0208009B
-:104AB0008C4200D8304200201040000A3C0280089E
-:104AC00034620080906300089042004C144300055B
-:104AD0003C028008240400048FBF00100A00110962
-:104AE00027BD00183443008034420100A040000C70
-:104AF00024020001A46200143C0280008C440100E6
-:104B00003C0380008C6201F80440FFFE2402000296
-:104B1000AC6401C0A06201C43C021000AC6201F8A8
-:104B20008FBF001003E0000827BD001827BDFFE875
-:104B30003C0A8008AFBF0010354900808D22003C40
-:104B400000C04021308400FF004610231840009D23
-:104B500030E700FF354701002402000100A63023A2
-:104B6000A0E0000CA0E0000DA522001418C0002455
-:104B7000308200108D23001C8D22002C0068182329
-:104B80000043102B1040000F000000008CE20020BA
-:104B900000461021ACE200208CE200200043102BE4
-:104BA0001440000B3C023FFF8CE200200043102326
-:104BB000ACE200209522005C3042FFFF0A0012C1E7
-:104BC00000621821ACE00020006618213C023FFF83
-:104BD0003446FFFF00C3102B5440000100C01821D1
-:104BE0003C0280083442008000651821AC43001C60
-:104BF000A0400024A04000270A00130F3C038008B7
-:104C0000104000403C0380088D22003C00481023E7
-:104C10005840003D34670080912200242442000166
-:104C2000A1220024912200243C0308008C6300246C
-:104C3000304200FF0043102B1440009A8FBF001039
-:104C40008CE2001C00A21023184000960000000017
-:104C50008D4300049522005C006818233042FFFF5A
-:104C600000031843000210400043102A10400005C2
-:104C7000012020218D420004004810230A0012F276
-:104C8000000210439522005C3042FFFF00021040FA
-:104C90003C068008AC82002C34C5008094A2005CE5
-:104CA0008CA4002C94A3005C3042FFFF0002104053
-:104CB000008220213063FFFF0083182101031021AF
-:104CC000ACA2001C8CC2000434C60100ACC2001CA3
-:104CD000240200020E000F5EA0C2000C1040007102
-:104CE0008FBF00103C0280008C4401003C03800018
-:104CF0008C6201F80440FFFE240200020A0013390E
-:104D00000000000034670080ACE500383466010024
-:104D10008CC2001C00A210231840000224A2FFFC39
-:104D2000ACC2001C30820001504000083C038008E7
-:104D30008CE2003C00A2102304430051240400052F
-:104D40008C62000410A2003E3C0380088C620004C8
-:104D500054A200548FBF00103C0208008C4200D8BF
-:104D600030420020104000063C028008346200807F
-:104D7000906300089042004C104300403C028008C1
-:104D80003443008034420100A040000C24020001A2
-:104D9000A46200143C0280008C4401003C038000AB
-:104DA0008C6201F80440FFFE24020002AC6401C0E2
-:104DB000A06201C43C021000AC6201F80A00137743
-:104DC0008FBF001024020005A120002714E2000A72
-:104DD0003C038008354301009062000D2C42000620
-:104DE000504000053C0380089062000D2442000101
-:104DF000A062000D3C03800834670080ACE50038F9
-:104E0000346601008CC2001C00A21023184000026E
-:104E100024A2FFFCACC2001C308200015040000AFA
-:104E20003C0380088CE2003C00A2102304410014E3
-:104E3000240400058C62000414A200033C038008D3
-:104E40000A00136E240400058C62000414A20015ED
-:104E50008FBF00103C0208008C4200D83042002076
-:104E60001040000A3C028008346200809063000811
-:104E70009042004C144300053C02800824040004C6
-:104E80008FBF00100A00110927BD001834430080AD
-:104E900034420100A040000C24020001A46200146E
-:104EA0008FBF001003E0000827BD00183C0B8008EE
-:104EB00027BDFFE83C028000AFBF00103442010074
-:104EC000356A00809044000A356901008C45001461
-:104ED0008D4800389123000C308400FF0105102319
-:104EE0001C4000B3306700FF2CE20006504000B1C8
-:104EF0008FBF00102402000100E2300430C2000322
-:104F00005440000800A8302330C2000C144000A117
-:104F100030C20030144000A38FBF00100A00143BC1
-:104F20000000000018C00024308200108D43001CD7
-:104F30008D42002C006818230043102B1040000FF6
-:104F4000000000008D22002000461021AD2200202C
-:104F50008D2200200043102B1440000B3C023FFF29
-:104F60008D22002000431023AD2200209542005CDA
-:104F70003042FFFF0A0013AF00621821AD2000206D
-:104F8000006618213C023FFF3446FFFF00C3102B90
-:104F90005440000100C018213C02800834420080C7
-:104FA00000651821AC43001CA0400024A04000274D
-:104FB0000A0013FD3C038008104000403C038008B9
-:104FC0008D42003C004810231840003D34670080AB
-:104FD0009142002424420001A14200249142002475
-:104FE0003C0308008C630024304200FF0043102B78
-:104FF000144000708FBF00108D22001C00A21023EF
-:105000001840006C000000008D6300049542005CB5
-:10501000006818233042FFFF0003184300021040CD
-:105020000043102A10400005014020218D62000439
-:10503000004810230A0013E0000210439542005C70
-:105040003042FFFF000210403C068008AC82002C7A
-:1050500034C5008094A2005C8CA4002C94A3005C56
-:105060003042FFFF00021040008220213063FFFF2A
-:105070000083182101031021ACA2001C8CC2000483
-:1050800034C60100ACC2001C240200020E000F5EF8
-:10509000A0C2000C104000478FBF00103C028000EF
-:1050A0008C4401003C0380008C6201F80440FFFE48
-:1050B000240200020A00142D000000003467008062
-:1050C000ACE50038346601008CC2001C00A210233D
-:1050D0001840000224A2FFFCACC2001C3082000178
-:1050E0005040000A3C0380088CE2003C00A21023E0
-:1050F00004430014240400058C62000414A200037D
-:105100003C0380080A00141F240400058C6200047C
-:1051100014A200288FBF00103C0208008C4200D867
-:10512000304200201040000A3C02800834620080B7
-:10513000906300089042004C144300053C02800834
-:10514000240400048FBF00100A00110927BD0018B5
-:105150003443008034420100A040000C24020001CE
-:10516000A46200143C0280008C4401003C038000D7
-:105170008C6201F80440FFFE24020002AC6401C00E
-:10518000A06201C43C021000AC6201F80A00143BAA
-:105190008FBF00108FBF0010010030210A00115A8C
-:1051A00027BD0018010030210A00129927BD001800
-:1051B0008FBF001003E0000827BD00183C038008E3
-:1051C0003464010024020003A082000C8C620004FD
-:1051D00003E00008AC82001C3C05800834A300807A
-:1051E0009062002734A501002406004324420001F8
-:1051F000A0620027906300273C0208008C42004810
-:10520000306300FF146200043C07602194A500EAAB
-:105210000A00090130A5FFFF03E0000800000000BC
-:1052200027BDFFE8AFBF00103C0280000E00144411
-:105230008C4401803C02800834430100A060000CD3
-:105240008C4200048FBF001027BD001803E0000847
-:10525000AC62001C27BDFFE03C028008AFBF001815
-:10526000AFB10014AFB000103445008034460100E7
-:105270003C0880008D09014090C3000C8CA4003CC8
-:105280008CA200381482003B306700FF9502007C3E
-:1052900090A30027146000093045FFFF2402000599
-:1052A00054E200083C04800890C2000D2442000132
-:1052B000A0C2000D0A00147F3C048008A0C0000DAD
-:1052C0003C048008348201009042000C2403000555
-:1052D000304200FF1443000A24A205DC348300801E
-:1052E000906200272C4200075040000524A20A00CB
-:1052F00090630027240200140062100400A2102111
-:105300003C108008361000803045FFFF012020212E
-:105310000E001444A60500149602005C8E030038AB
-:105320003C1180003042FFFF000210400062182153
-:10533000AE03001C0E0003328E24014092020025B1
-:1053400034420040A20200250E00033D8E2401409D
-:105350008E2401403C0380008C6201F80440FFFE73
-:1053600024020002AC6401C0A06201C43C0210002F
-:10537000AC6201F88FBF00188FB100148FB000101D
-:1053800003E0000827BD00203C0360103C02080039
-:1053900024420174AC62502C8C6250003C048000AA
-:1053A00034420080AC6250003C0208002442547C2D
-:1053B0003C010800AC2256003C020800244254384C
-:1053C0003C010800AC2256043C020002AC840008F8
-:1053D000AC82000C03E000082402000100A0302190
-:1053E0003C1C0800279C56083C0200023C050400B7
-:1053F00000852826008220260004102B2CA5000101
-:105400002C840001000210803C0308002463560035
-:105410000085202500431821108000030000102182
-:10542000AC6600002402000103E000080000000058
-:105430003C1C0800279C56083C0200023C05040066
-:1054400000852826008220260004102B2CA50001B0
-:105450002C840001000210803C03080024635600E5
-:105460000085202500431821108000050000102130
-:105470003C02080024425438AC62000024020001BF
-:1054800003E00008000000003C0200023C030400AE
-:1054900000821026008318262C4200012C63000194
-:1054A000004310251040000B000028213C1C080080
-:1054B000279C56083C0380008C62000824050001EC
-:1054C00000431025AC6200088C62000C00441025DB
-:1054D000AC62000C03E0000800A010213C1C080096
-:1054E000279C56083C0580008CA3000C0004202754
-:1054F000240200010064182403E00008ACA3000C9F
-:105500003C020002148200063C0560008CA208D018
-:105510002403FFFE0043102403E00008ACA208D0DF
-:105520003C02040014820005000000008CA208D098
-:105530002403FFFD00431024ACA208D003E00008C0
-:10554000000000003C02601A344200108C430080CE
-:1055500027BDFFF88C440084AFA3000093A3000094
-:10556000240200041462001AAFA4000493A20001F4
-:105570001040000797A300023062FFFC3C0380004C
-:10558000004310218C4200000A001536AFA200042F
-:105590003062FFFC3C03800000431021AC4400005B
-:1055A000A3A000003C0560008CA208D02403FFFEED
-:1055B0003C04601A00431024ACA208D08FA300045E
-:1055C0008FA2000034840010AC830084AC82008081
-:1055D00003E0000827BD000827BDFFE8AFBF0010AB
-:1055E0003C1C0800279C56083C0280008C43000CA1
-:1055F0008C420004004318243C0200021060001496
-:10560000006228243C0204003C04000210A00005B3
-:10561000006210243C0208008C4256000A00155B10
-:1056200000000000104000073C0404003C02080099
-:105630008C4256040040F809000000000A00156082
-:10564000000000000000000D3C1C0800279C5608CC
-:0C5650008FBF001003E0000827BD001809
-:04565C008008024080
-:1056600080080100800800808008000000000C8095
-:105670000000320008000E9808000EF408000F88A1
-:1056800008001028080010748008010080080080BD
-:04569000800800008E
-:0C5694000A0000280000000000000000D8
-:1056A0000000000D6370362E322E316100000000C4
-:1056B00006020104000000000000000000000000DD
-:1056C000000000000000000038003C000000000066
-:1056D00000000000000000000000000000000020AA
-:1056E00000000000000000000000000000000000BA
-:1056F00000000000000000000000000000000000AA
-:10570000000000000000000021003800000000013F
-:105710000000002B000000000000000400030D400A
-:105720000000000000000000000000000000000079
-:105730000000000000000000100000030000000056
-:105740000000000D0000000D3C020800244259AC8E
-:105750003C03080024635BF4AC4000000043202BB2
-:105760001480FFFD244200043C1D080037BD9FFC4F
-:1057700003A0F0213C100800261000A03C1C0800EB
-:10578000279C59AC0E0002F6000000000000000D3E
-:1057900027BDFFB4AFA10000AFA20004AFA3000873
-:1057A000AFA4000CAFA50010AFA60014AFA700185F
-:1057B000AFA8001CAFA90020AFAA0024AFAB0028FF
-:1057C000AFAC002CAFAD0030AFAE0034AFAF00389F
-:1057D000AFB8003CAFB90040AFBC0044AFBF004819
-:1057E0000E000820000000008FBF00488FBC00445E
-:1057F0008FB900408FB8003C8FAF00388FAE0034B7
-:105800008FAD00308FAC002C8FAB00288FAA002406
-:105810008FA900208FA8001C8FA700188FA6001446
-:105820008FA500108FA4000C8FA300088FA2000486
-:105830008FA1000027BD004C3C1B60188F7A5030B0
-:10584000377B502803400008AF7A000000A01821E1
-:1058500000801021008028213C0460003C0760008B
-:105860002406000810600006348420788C42000072
-:10587000ACE220088C63000003E00008ACE3200CDD
-:105880000A000F8100000000240300403C02600079
-:1058900003E00008AC4320003C0760008F86000452
-:1058A0008CE520740086102100A2182B14600007DC
-:1058B000000028218F8AFDA024050001A1440013C7
-:1058C0008F89000401244021AF88000403E0000810
-:1058D00000A010218F84FDA08F8500049086001306
-:1058E00030C300FF00A31023AF82000403E00008D0
-:1058F000A08000138F84FDA027BDFFE8AFB000108B
-:10590000AFBF001490890011908700112402002875
-:10591000312800FF3906002830E300FF2485002CE1
-:105920002CD00001106200162484001C0E00006EB2
-:10593000000000008F8FFDA03C05600024020204DF
-:1059400095EE003E95ED003C000E5C0031ACFFFF93
-:10595000016C5025ACAA2010520000012402000462
-:10596000ACA22000000000000000000000000000C9
-:105970008FBF00148FB0001003E0000827BD00188F
-:105980000A0000A6000028218F85FDA027BDFFD8B2
-:10599000AFBF0020AFB3001CAFB20018AFB100140E
-:1059A000AFB000100080982190A4001124B0001C1A
-:1059B00024B1002C308300FF386200280E000090D4
-:1059C0002C5200010E00009800000000020020216F
-:1059D0001240000202202821000028210E00006E43
-:1059E000000000008F8DFDA03C0880003C05600099
-:1059F00095AC003E95AB003C02683025000C4C0095
-:105A0000316AFFFF012A3825ACA7201024020202C8
-:105A1000ACA6201452400001240200028FBF0020D7
-:105A20008FB3001C8FB200188FB100148FB000101C
-:105A300027BD002803E00008ACA2200027BDFFE03E
-:105A4000AFB20018AFB10014AFB00010AFBF001C70
-:105A50003C1160008E2320748F82000430D0FFFF41
-:105A600030F2FFFF1062000C2406008F0E00006E63
-:105A7000000000003C06801F0010440034C5FF00F9
-:105A80000112382524040002AE2720100000302126
-:105A9000AE252014AE2420008FBF001C8FB200184A
-:105AA0008FB100148FB0001000C0102103E0000877
-:105AB00027BD002027BDFFE0AFB0001030D0FFFFB2
-:105AC000AFBF0018AFB100140E00006E30F1FFFF41
-:105AD00000102400009180253C036000AC70201071
-:105AE0008FBF00188FB100148FB000102402000483
-:105AF000AC62200027BD002003E000080000102158
-:105B000027BDFFE03C046018AFBF0018AFB1001420
-:105B1000AFB000108C8850002403FF7F34028071E6
-:105B20000103382434E5380C241F00313C1980006F
-:105B3000AC8550003C11800AAC8253BCAF3F0008DA
-:105B40000E00054CAF9100400E00050A3C116000AC
-:105B50000E00007D000000008E3008083C0F570941
-:105B60002418FFF00218602435EEE00035EDF00057
-:105B7000018E5026018D58262D4600012D69000109
-:105B8000AF86004C0E000D09AF8900503C06601630
-:105B90008CC700003C0860148D0500A03C03FFFF8B
-:105BA00000E320243C02535300052FC2108200550D
-:105BB00034D07C00960201F2A780006C10400003F4
-:105BC000A780007C384B1E1EA78B006C960201F844
-:105BD000104000048F8D0050384C1E1EA78C007C96
-:105BE0008F8D005011A000058F83004C240E0020E3
-:105BF000A78E007CA78E006C8F83004C1060000580
-:105C00009785007C240F0020A78F007CA78F006C55
-:105C10009785007C2CB8008153000001240500808A
-:105C20009784006C2C91040152200001240404008C
-:105C30001060000B3C0260008FBF00188FB1001491
-:105C40008FB0001027BD0020A784006CA785007CC2
-:105C5000A380007EA780007403E00008A780009264
-:105C60008C4704382419103C30FFFFFF13F9000360
-:105C700030A8FFFF1100004624030050A380007EDF
-:105C80009386007E50C00024A785007CA780007CFE
-:105C90009798007CA780006CA7800074A780009272
-:105CA0003C010800AC3800800E00078700000000AF
-:105CB0003C0F60008DED0808240EFFF03C0B600ED9
-:105CC000260C0388356A00100000482100002821B6
-:105CD00001AE20243C105709AF8C0010AF8A004859
-:105CE000AF89001810900023AF8500148FBF0018F3
-:105CF0008FB100148FB0001027BD002003E0000812
-:105D0000AF80005400055080014648218D260004D4
-:105D10000A00014800D180219798007CA784006C7C
-:105D2000A7800074A78000923C010800AC38008076
-:105D30000E000787000000003C0F60008DED080892
-:105D4000240EFFF03C0B600E260C0388356A001011
-:105D5000000048210000282101AE20243C105709F2
-:105D6000AF8C0010AF8A0048AF8900181490FFDF95
-:105D7000AF85001424110001AF9100548FBF0018AB
-:105D80008FB100148FB0001003E0000827BD002081
-:105D90000A00017BA383007E3083FFFF8F880040D1
-:105DA0008F87003C000321403C0580003C020050EE
-:105DB000008248253C0660003C0A010034AC040027
-:105DC0008CCD08E001AA58241160000500000000F5
-:105DD0008CCF08E024E7000101EA7025ACCE08E092
-:105DE0008D19001001805821ACB900388D180014AD
-:105DF000ACB8003CACA9003000000000000000007E
-:105E00000000000000000000000000000000000092
-:105E100000000000000000003C0380008C640000D3
-:105E2000308200201040FFFD3C0F60008DED08E047
-:105E30003C0E010001AE18241460FFE100000000D8
-:105E4000AF87003C03E00008AF8B00588F8500400F
-:105E5000240BFFF03C06800094A7001A8CA90024B4
-:105E600030ECFFFF000C38C000EB5024012A402129
-:105E7000ACC8003C8CA400248CC3003C00831023DD
-:105E800018400033000000008CAD002025A2000166
-:105E90003C0F0050ACC2003835EE00103C068000CC
-:105EA000ACCE003000000000000000000000000048
-:105EB00000000000000000000000000000000000E2
-:105EC000000000003C0480008C9900003338002062
-:105ED0001300FFFD30E20008104000173C0980006D
-:105EE0008C880408ACA800108C83040CACA30014AC
-:105EF0003C1900203C188000AF19003094AE001807
-:105F000094AF001C01CF3021A4A6001894AD001A54
-:105F100025A70001A4A7001A94AB001A94AC001E98
-:105F2000118B00030000000003E0000800000000E7
-:105F300003E00008A4A0001A8D2A0400ACAA0010F7
-:105F40008D240404ACA400140A0002183C1900209B
-:105F50008CA200200A0002003C0F00500A0001EE53
-:105F60000000000027BDFFE8AFBF00100E000232A6
-:105F7000000000008F8900408FBF00103C038000AC
-:105F8000A520000A9528000A9527000427BD0018BF
-:105F90003105FFFF30E6000F0006150000A22025A6
-:105FA00003E00008AC6400803C0508008CA50020DC
-:105FB0008F83000C27BDFFE8AFB00010AFBF001407
-:105FC00010A300100000802124040001020430040A
-:105FD00000A6202400C3102450440006261000010F
-:105FE000001018802787FDA41480000A006718217C
-:105FF000261000012E0900025520FFF38F83000CAC
-:10600000AF85000C8FBF00148FB0001003E00008B4
-:1060100027BD00188C6800003C058000ACA8002457
-:106020000E000234261000013C0508008CA500205B
-:106030000A0002592E0900022405000100851804F7
-:106040003C0408008C84002027BDFFC8AFBF00348B
-:1060500000831024AFBE0030AFB7002CAFB60028CD
-:10606000AFB50024AFB40020AFB3001CAFB200182E
-:10607000AFB1001410400051AFB000108F84004049
-:10608000948700069488000A00E8302330D5FFFF8B
-:1060900012A0004B8FBF0034948B0018948C000A20
-:1060A000016C50233142FFFF02A2482B1520000251
-:1060B00002A02021004020212C8F000515E00002C5
-:1060C00000809821241300040E0001C102602021E9
-:1060D0008F87004002609021AF80004494F4000A52
-:1060E000026080211260004E3291FFFF3C1670006A
-:1060F0003C1440003C1E20003C1760008F99005863
-:106100008F380000031618241074004F0283F82BF8
-:1061100017E0003600000000107E00478F86004424
-:1061200014C0003A2403000102031023022320219B
-:106130003050FFFF1600FFF13091FFFF8F870040C6
-:106140003C1100203C108000AE11003094EB000A9E
-:106150003C178000024B5021A4EA000A94E9000A8F
-:1061600094E800043123FFFF3106000F00062D00E4
-:106170000065F025AEFE008094F3000A94F6001846
-:1061800012D30036001221408CFF00148CF4001052
-:1061900003E468210000C02101A4782B029870213B
-:1061A00001CF6021ACED0014ACEC001002B238233A
-:1061B00030F5FFFF16A0FFB88F8400408FBF00347A
-:1061C0008FBE00308FB7002C8FB600288FB500240B
-:1061D0008FB400208FB3001C8FB200188FB1001451
-:1061E0008FB0001003E0000827BD00381477FFCC03
-:1061F0008F8600440E000EE202002021004018218C
-:106200008F86004410C0FFC9020310230270702360
-:106210008F87004001C368210A0002E431B2FFFF0A
-:106220008F86004414C0FFC93C1100203C10800040
-:106230000A0002AEAE1100300E00046602002021FA
-:106240000A0002DB00401821020020210E0009395B
-:10625000022028210A0002DB004018210E0001EE76
-:10626000000000000A0002C702B2382327BDFFC8A1
-:10627000AFB7002CAFB60028AFB50024AFB40020F4
-:10628000AFB3001CAFB20018AFB10014AFB0001034
-:10629000AFBF00300E00011B241300013C047FFF40
-:1062A0003C0380083C0220003C010800AC20007048
-:1062B0003496FFFF34770080345200033C1512C03F
-:1062C000241400013C1080002411FF800E000245C0
-:1062D000000000008F8700488F8B00188F89001402
-:1062E0008CEA00EC8CE800E8014B302B01092823F4
-:1062F00000A6102314400006014B18231440000E82
-:106300003C05800002A3602B1180000B0000000000
-:106310003C0560008CEE00EC8CED00E88CA4180CC1
-:10632000AF8E001804800053AF8D00148F8F0010C3
-:10633000ADF400003C0580008CBF00003BF900017B
-:10634000333800011700FFE13C0380008C6201003C
-:1063500024060C0010460009000000008C680100B3
-:106360002D043080548000103C0480008C690100B2
-:106370002D2331811060000C3C0480008CAA0100A8
-:1063800011460004000020218CA6010024C5FF81D5
-:1063900030A400FF8E0B01000E000269AE0B00243A
-:1063A0000A00034F3C0480008C8D01002DAC3300AB
-:1063B00011800022000000003C0708008CE70098D4
-:1063C00024EE00013C010800AC2E00983C04800043
-:1063D0008C8201001440000300000000566000148D
-:1063E0003C0440008C9F01008C9801000000982123
-:1063F00003F1C82400193940330F007F00EF7025E6
-:1064000001D26825AC8D08308C8C01008C85010090
-:10641000258B0100017130240006514030A3007F1C
-:106420000143482501324025AC8808303C04400037
-:10643000AE0401380A00030E000000008C99010030
-:10644000240F0020AC99002092F80000330300FFD5
-:10645000106F000C241F0050547FFFDD3C048000AF
-:106460008C8401000E00154E000000000A00034F4E
-:106470003C04800000963824ACA7180C0A000327BF
-:106480008F8F00108C8501000E0008F72404008017
-:106490000A00034F3C04800000A4102B24030001D9
-:1064A00010400009000030210005284000A4102BF6
-:1064B00004A00003000318405440FFFC00052840DE
-:1064C0005060000A0004182B0085382B54E00004AB
-:1064D0000003184200C33025008520230003184222
-:1064E0001460FFF9000528420004182B03E000089F
-:1064F00000C310213084FFFF30C600FF3C0780003E
-:106500008CE201B80440FFFE00064C000124302557
-:106510003C08200000C820253C031000ACE00180AE
-:10652000ACE50184ACE4018803E00008ACE301B809
-:106530003C0660008CC5201C2402FFF03083020062
-:10654000308601001060000E00A2282434A500014E
-:106550003087300010E0000530830C0034A50004C3
-:106560003C04600003E00008AC85201C1060FFFDC7
-:106570003C04600034A5000803E00008AC85201C42
-:1065800054C0FFF334A500020A0003B03087300086
-:1065900027BDFFE8AFB00010AFBF00143C0760009C
-:1065A000240600021080001100A080218F83005873
-:1065B0000E0003A78C6400188F8200580000202171
-:1065C000240600018C45000C0E000398000000001A
-:1065D0001600000224020003000010218FBF0014E7
-:1065E0008FB0001003E0000827BD00188CE8201CC5
-:1065F0002409FFF001092824ACE5201C8F870058EE
-:106600000A0003CD8CE5000C3C02600E00804021A6
-:1066100034460100240900180000000000000000BA
-:10662000000000003C0A00503C0380003547020097
-:10663000AC68003834640400AC65003CAC670030E2
-:106640008C6C0000318B00201160FFFD2407FFFFE0
-:106650002403007F8C8D00002463FFFF248400044A
-:10666000ACCD00001467FFFB24C60004000000004E
-:10667000000000000000000024A402000085282B78
-:106680003C0300203C0E80002529FFFF010540212E
-:10669000ADC300301520FFE00080282103E0000892
-:1066A000000000008F82005827BDFFD8AFB3001C48
-:1066B000AFBF0020AFB20018AFB10014AFB00010F0
-:1066C00094460002008098218C5200182CC300814F
-:1066D0008C4800048C4700088C51000C8C49001039
-:1066E000106000078C4A00142CC4000414800013AE
-:1066F00030EB000730C5000310A0001000000000C0
-:106700002410008B02002021022028210E00039873
-:10671000240600031660000224020003000010217A
-:106720008FBF00208FB3001C8FB200188FB10014F0
-:106730008FB0001003E0000827BD00281560FFF1AE
-:106740002410008B3C0C80003C030020241F00011F
-:10675000AD830030AF9F0044000000000000000047
-:10676000000000002419FFF024D8000F031978243A
-:106770003C1000D0AD88003801F0702524CD000316
-:106780003C08600EAD87003C35850400AD8E0030BE
-:10679000000D38823504003C3C0380008C6B000007
-:1067A000316200201040FFFD0000000010E00008F2
-:1067B00024E3FFFF2407FFFF8CA800002463FFFFF2
-:1067C00024A50004AC8800001467FFFB24840004A7
-:1067D0003C05600EACA60038000000000000000080
-:1067E000000000008F8600543C0400203C0780001D
-:1067F000ACE4003054C000060120202102402021DA
-:106800000E0003A7000080210A00041D02002021C1
-:106810000E0003DD01402821024020210E0003A7C5
-:10682000000080210A00041D0200202127BDFFE096
-:10683000AFB200183092FFFFAFB10014AFBF001C21
-:10684000AFB000101640000D000088210A0004932C
-:106850000220102124050003508500278CE5000C40
-:106860000000000D262800013111FFFF24E2002066
-:106870000232802B12000019AF8200588F82004430
-:10688000144000168F8700583C0670003C0320001F
-:106890008CE5000000A62024148300108F84006083
-:1068A000000544023C09800000A980241480FFE90F
-:1068B000310600FF2CCA000B5140FFEB26280001D7
-:1068C000000668803C0E080025CE575801AE6021B6
-:1068D0008D8B0000016000080000000002201021E4
-:1068E0008FBF001C8FB200188FB100148FB0001042
-:1068F00003E0000827BD00200E0003982404008454
-:106900001600FFD88F8700580A000474AF8000601B
-:10691000020028210E0003BF240400018F870058C5
-:106920000A000474AF820060020028210E0003BF39
-:10693000000020210A0004A38F8700580E000404E1
-:10694000020020218F8700580A000474AF82006083
-:1069500030AFFFFF000F19C03C0480008C9001B8DD
-:106960000600FFFE3C1920043C181000AC83018097
-:10697000AC800184AC990188AC9801B80A00047518
-:106980002628000190E2000390E30002000020218D
-:106990000002FE0000033A0000FF2825240600083C
-:1069A0000E000398000000001600FFDC2402000324
-:1069B0008F870058000010210A000474AF82006025
-:1069C00090E8000200002021240600090A0004C308
-:1069D00000082E0090E4000C240900FF308500FF21
-:1069E00010A900150000302190F9000290F8000372
-:1069F000308F00FF94EB000400196E000018740043
-:106A0000000F62000186202501AE5025014B28258C
-:106A10003084FF8B0A0004C32406000A90E30002BE
-:106A200090FF0004000020210003360000DF28252D
-:106A30000A0004C32406000B0A0004D52406008BB8
-:106A4000000449C23127003F000443423C02800059
-:106A500000082040240316802CE60020AC43002CC4
-:106A600024EAFFE02482000114C0000330A900FFE3
-:106A700000801021314700FF000260803C0D800043
-:106A8000240A0001018D20213C0B000E00EA28049D
-:106A9000008B302111200005000538278CCE000026
-:106AA00001C5382503E00008ACC700008CD8000001
-:106AB0000307782403E00008ACCF000027BDFFE007
-:106AC000AFB10014AFB00010AFBF00183C076000BA
-:106AD0008CE408083402F0003C1160003083F000C0
-:106AE000240501C03C04800E000030211062000625
-:106AF000241000018CEA08083149F0003928E00030
-:106B00000008382B000780403C0D0200AE2D081411
-:106B1000240C16803C0B80008E2744000E000F8B47
-:106B2000AD6C002C120000043C02169124050001FB
-:106B3000120500103C023D2C345800E0AE384408E9
-:106B40003C1108008E31007C8FBF00183C066000AD
-:106B500000118540360F16808FB100148FB00010E1
-:106B60003C0E020027BD0020ACCF442003E000080B
-:106B7000ACCE08103C0218DA345800E0AE384408B5
-:106B80003C1108008E31007C8FBF00183C0660006D
-:106B900000118540360F16808FB100148FB00010A1
-:106BA0003C0E020027BD0020ACCF442003E00008CB
-:106BB000ACCE08100A0004EB240500010A0004EB27
-:106BC0000000282124020400A7820024A780001CC2
-:106BD000000020213C06080024C65A582405FFFF67
-:106BE00024890001000440803124FFFF01061821A0
-:106BF0002C87002014E0FFFAAC6500002404040098
-:106C0000A7840026A780001E000020213C06080063
-:106C100024C65AD82405FFFF248D0001000460809B
-:106C200031A4FFFF018658212C8A00201540FFFA6D
-:106C3000AD650000A7800028A7800020A780002263
-:106C4000000020213C06080024C65B582405FFFFF5
-:106C5000249900010004C0803324FFFF030678213B
-:106C60002C8E000415C0FFFAADE500003C05600065
-:106C70008CA73D002403E08F00E31024344601403C
-:106C800003E00008ACA63D002487007F000731C266
-:106C900024C5FFFF000518C2246400013082FFFFF5
-:106CA000000238C0A78400303C010800AC27003047
-:106CB000AF80002C0000282100002021000030219E
-:106CC0002489000100A728213124FFFF2CA81701E7
-:106CD000110000032C8300801460FFF924C600011A
-:106CE00000C02821AF86002C10C0001DA786002AF6
-:106CF00024CAFFFF000A11423C08080025085B581F
-:106D00001040000A00002021004030212407FFFF2E
-:106D1000248E00010004688031C4FFFF01A86021B7
-:106D20000086582B1560FFFAAD87000030A2001FC7
-:106D30005040000800043080240300010043C804D0
-:106D400000041080004878212738FFFF03E0000886
-:106D5000ADF8000000C820212405FFFFAC8500002D
-:106D600003E000080000000030A5FFFF30C6FFFF71
-:106D700030A8001F0080602130E700FF0005294295
-:106D80000000502110C0001D24090001240B000147
-:106D900025180001010B2004330800FF0126782686
-:106DA000390E00202DED00012DC2000101A2182591
-:106DB0001060000D014450250005C880032C4021BF
-:106DC0000100182110E0000F000A20278D040000A8
-:106DD000008A1825AD03000024AD00010000402109
-:106DE0000000502131A5FFFF252E000131C9FFFF12
-:106DF00000C9102B1040FFE72518000103E0000830
-:106E0000000000008D0A0000014440240A0005D162
-:106E1000AC68000027BDFFE830A5FFFF30C6FFFFCC
-:106E2000AFB00010AFBF001430E7FFFF00005021EB
-:106E30003410FFFF0000602124AF001F00C0482174
-:106E4000241800012419002005E0001601E010219B
-:106E50000002F943019F682A0009702B01AE40240B
-:106E600011000017000C18800064102110E00005CC
-:106E70008C4B000000F840040008382301675824B8
-:106E800000003821154000410000402155600016E7
-:106E90003169FFFF258B0001316CFFFF05E1FFEC3D
-:106EA00001E0102124A2003E0002F943019F682A5C
-:106EB0000009702B01AE40241500FFEB000C188078
-:106EC000154600053402FFFF020028210E0005B51B
-:106ED00000003821020010218FBF00148FB0001075
-:106EE00003E0000827BD00181520000301601821E9
-:106EF000000B1C0224080010306A00FF154000053A
-:106F0000306E000F250D000800031A0231A800FFA3
-:106F1000306E000F15C00005307F000325100004FF
-:106F200000031902320800FF307F000317E000055C
-:106F3000386900012502000200031882304800FF72
-:106F4000386900013123000110600004310300FFA3
-:106F5000250A0001314800FF310300FF000C6940A1
-:106F600001A34021240A000110CAFFD53110FFFF00
-:106F7000246E000131C800FF1119FFC638C9000195
-:106F80002D1F002053E0001C258B0001240D000163
-:106F90000A000648240E002051460017258B0001E8
-:106FA00025090001312800FF2D0900205120001281
-:106FB000258B000125430001010D5004014B1024D5
-:106FC000250900011440FFF4306AFFFF3127FFFF5D
-:106FD00010EE000C2582FFFF304CFFFF0000502117
-:106FE0003410FFFF312800FF2D0900205520FFF24B
-:106FF00025430001258B0001014648260A000602B0
-:10700000316CFFFF00003821000050210A000654B7
-:107010003410FFFF27BDFFD8AFB0001030F0FFFFE6
-:10702000AFB10014001039423211FFE000071080A8
-:10703000AFB3001C00B1282330D3FFFFAFB200185C
-:1070400030A5FFFF00809021026030210044202104
-:10705000AFBF00200E0005E03207001F022288218A
-:107060003403FFFF0240202102002821026030216A
-:1070700000003821104300093231FFFF02201021A7
-:107080008FBF00208FB3001C8FB200188FB1001487
-:107090008FB0001003E0000827BD00280E0005E0B7
-:1070A0000000000000408821022010218FBF002036
-:1070B0008FB3001C8FB200188FB100148FB0001076
-:1070C00003E0000827BD0028000424003C03600002
-:1070D000AC603D0810A00002348210063482101605
-:1070E00003E00008AC623D0427BDFFE0AFB0001034
-:1070F000309000FF2E020006AFBF001810400008BD
-:10710000AFB10014001030803C03080024635784A2
-:1071100000C328218CA400000080000800000000AB
-:10712000000020218FBF00188FB100148FB0001015
-:107130000080102103E0000827BD00209791002A5D
-:1071400016200051000020213C020800904200332C
-:107150000A0006BB00000000978D002615A0003134
-:10716000000020210A0006BB2402000897870024A3
-:1071700014E0001A00001821006020212402000100
-:107180001080FFE98FBF0018000429C2004530219C
-:1071900000A6582B1160FFE43C0880003C0720004B
-:1071A000000569C001A76025AD0C00203C038008E4
-:1071B0002402001F2442FFFFAC6000000441FFFDD9
-:1071C0002463000424A5000100A6702B15C0FFF560
-:1071D000000569C00A0006A58FBF00189787001C2C
-:1071E0003C04080024845A58240504000E0006605C
-:1071F00024060001978B002424440001308AFFFFFD
-:107200002569FFFF2D48040000402821150000409B
-:10721000A789002424AC3800000C19C00A0006B964
-:10722000A780001C9787001E3C04080024845AD8BD
-:10723000240504000E00066024060001979900262C
-:10724000244400013098FFFF272FFFFF2F0E04007A
-:107250000040882115C0002CA78F0026A780001EA3
-:107260003A020003262401003084FFFF0E00068D41
-:107270002C4500010011F8C027F00100001021C0CA
-:107280000A0006BB240200089785002E978700227B
-:107290003C04080024845B580E00066024060001AC
-:1072A0009787002A8F89002C2445000130A8FFFF12
-:1072B00024E3FFFF0109302B0040802114C0001897
-:1072C000A783002AA7800022978500300E000F7543
-:1072D00002002021244A05003144FFFF0E00068DE4
-:1072E000240500013C05080094A500320E000F752E
-:1072F00002002021244521003C0208009042003376
-:107300000A0006BB000521C00A0006F3A784001E80
-:1073100024AC3800000C19C00A0006B9A784001C70
-:107320000A00070DA7850022308400FF27BDFFE873
-:107330002C820006AFBF0014AFB000101040001543
-:1073400000A03821000440803C0308002463579CBF
-:10735000010328218CA40000008000080000000028
-:1073600024CC007F000751C2000C59C23170FFFFCE
-:107370002547C40030E5FFFF2784001C02003021B0
-:107380000E0005B52407000197860028020620217B
-:10739000A78400288FBF00148FB0001003E00008FE
-:1073A00027BD00183C0508008CA50030000779C2F5
-:1073B0000E00038125E4DF003045FFFF3C04080098
-:1073C00024845B58240600010E0005B52407000143
-:1073D000978E002A8FBF00148FB0001025CD0001BA
-:1073E00027BD001803E00008A78D002A0007C9C2C6
-:1073F0002738FF00001878C231F0FFFF3C04080076
-:1074000024845AD802002821240600010E0005B564
-:1074100024070001978D0026260E0100000E84002F
-:1074200025AC00013C0B6000A78C0026AD603D0838
-:1074300036040006000030213C0760008CE23D0469
-:10744000305F000617E0FFFD24C9000100061B00A5
-:10745000312600FF006440252CC50004ACE83D0443
-:1074600014A0FFF68FBF00148FB0001003E00008D7
-:1074700027BD0018000751C22549C8002406000195
-:10748000240700013C04080024845A580E0005B566
-:107490003125FFFF978700248FBF00148FB00010A5
-:1074A00024E6000127BD001803E00008A786002499
-:1074B0003C0660183C090800252900FCACC9502C8A
-:1074C0008CC850003C0580003C020002350700805B
-:1074D000ACC750003C04080024841FE03C030800B3
-:1074E00024631F98ACA50008ACA2000C3C01080066
-:1074F000AC2459A43C010800AC2359A803E00008BF
-:107500002402000100A030213C1C0800279C59AC3B
-:107510003C0C04003C0B0002008B3826008C4026FB
-:107520002CE200010007502B2D050001000A4880C5
-:107530003C030800246359A4004520250123182199
-:107540001080000300001021AC660000240200013E
-:1075500003E00008000000003C1C0800279C59AC18
-:107560003C0B04003C0A0002008A3026008B3826BF
-:107570002CC200010006482B2CE5000100094080C8
-:107580003C030800246359A4004520250103182169
-:1075900010800005000010213C0C0800258C1F986D
-:1075A000AC6C00002402000103E0000800000000B1
-:1075B0003C0900023C080400008830260089382677
-:1075C0002CC30001008028212CE400010083102539
-:1075D0001040000B000030213C1C0800279C59ACD7
-:1075E0003C0A80008D4E00082406000101CA68256F
-:1075F000AD4D00088D4C000C01855825AD4B000C9D
-:1076000003E0000800C010213C1C0800279C59AC76
-:107610003C0580008CA6000C0004202724020001F9
-:1076200000C4182403E00008ACA3000C3C020002D4
-:107630001082000B3C0560003C070400108700032B
-:107640000000000003E00008000000008CA908D042
-:10765000240AFFFD012A402403E00008ACA808D05A
-:107660008CA408D02406FFFE0086182403E000083E
-:10767000ACA308D03C05601A34A600108CC300806F
-:1076800027BDFFF88CC50084AFA3000093A40000C1
-:107690002402001010820003AFA5000403E00008DC
-:1076A00027BD000893A7000114E0001497AC000266
-:1076B00097B800023C0F8000330EFFFC01CF682119
-:1076C000ADA50000A3A000003C0660008CC708D058
-:1076D0002408FFFE3C04601A00E82824ACC508D04A
-:1076E0008FA300048FA200003499001027BD00086A
-:1076F000AF22008003E00008AF2300843C0B800031
-:10770000318AFFFC014B48218D2800000A00080C3B
-:10771000AFA8000427BDFFE8AFBF00103C1C080065
-:10772000279C59AC3C0580008CA4000C8CA2000462
-:107730003C0300020044282410A0000A00A31824DF
-:107740003C0604003C0400021460000900A610245A
-:107750001440000F3C0404000000000D3C1C080015
-:10776000279C59AC8FBF001003E0000827BD00180C
-:107770003C0208008C4259A40040F80900000000B7
-:107780003C1C0800279C59AC0A0008358FBF00102C
-:107790003C0208008C4259A80040F8090000000093
-:1077A0000A00083B000000003C0880008D0201B880
-:1077B0000440FFFE35090180AD2400003C031000A9
-:1077C00024040040AD250004A1240008A1260009DE
-:1077D000A527000A03E00008AD0301B83084FFFFCD
-:1077E0000080382130A5FFFF000020210A00084555
-:1077F000240600803087FFFF8CA400002406003898
-:107800000A000845000028218F8300788F860070C9
-:107810001066000B008040213C07080024E75B68ED
-:10782000000328C000A710218C440000246300013D
-:10783000108800053063000F5466FFFA000328C06B
-:1078400003E00008000010213C07080024E75B6CFF
-:1078500000A7302103E000088CC200003C03900028
-:1078600034620001008220253C038000AC640020CB
-:107870008C65002004A0FFFE0000000003E000086B
-:10788000000000003C0280003443000100832025FA
-:1078900003E00008AC44002027BDFFE0AFB10014B6
-:1078A0003091FFFFAFB00010AFBF001812200013DF
-:1078B00000A080218CA20000240400022406020003
-:1078C0001040000F004028210E0007250000000096
-:1078D00000001021AE000000022038218FBF0018E8
-:1078E0008FB100148FB0001000402021000028212B
-:1078F000000030210A00084527BD00208CA20000AE
-:10790000022038218FBF00188FB100148FB00010F3
-:107910000040202100002821000030210A000845F5
-:1079200027BD002000A010213087FFFF8CA5000498
-:107930008C4400000A000845240600068F83FD9C45
-:1079400027BDFFE8AFBF0014AFB00010906700087C
-:10795000008010210080282130E600400000202116
-:1079600010C000088C5000000E0000BD0200202155
-:10797000020020218FBF00148FB000100A000548BC
-:1079800027BD00180E0008A4000000000E0000BD76
-:1079900002002021020020218FBF00148FB00010B0
-:1079A0000A00054827BD001827BDFFE0AFB0001052
-:1079B0008F90FD9CAFBF001CAFB20018AFB1001498
-:1079C00092060001008088210E00087230D2000467
-:1079D00092040005001129C2A6050000348300406E
-:1079E000A20300050E00087C022020210E00054A9B
-:1079F0000220202124020001AE02000C02202821D6
-:107A0000A602001024040002A602001224060200AE
-:107A1000A60200140E000725A60200161640000F4D
-:107A20008FBF001C978C00743C0B08008D6B007896
-:107A30002588FFFF3109FFFF256A0001012A382B45
-:107A400010E00006A78800743C0F6006240E0016A4
-:107A500035ED0010ADAE00508FBF001C8FB2001886
-:107A60008FB100148FB0001003E0000827BD002084
-:107A700027BDFFE0AFB10014AFBF0018AFB00010DA
-:107A80001080000400A088212402008010820007DA
-:107A9000000000000000000D8FBF00188FB100141F
-:107AA0008FB0001003E0000827BD00200E00087210
-:107AB00000A020218F86FD9C0220202190C500057A
-:107AC0000E00087C30B000FF2403003E1603FFF1D7
-:107AD0003C0680008CC401780480FFFE34C801405D
-:107AE000240900073C071000AD11000002202021EE
-:107AF000A10900048FBF00188FB100148FB00010CF
-:107B0000ACC701780A0008C527BD002027BDFFE0EB
-:107B1000AFB00010AFBF0018AFB100143C10800030
-:107B20008E110020000000000E00054AAE04002067
-:107B3000AE1100208FBF00188FB100148FB000105D
-:107B400003E0000827BD00203084FFFF00803821BB
-:107B50002406003500A020210A0008450000282145
-:107B60003084FFFF008038212406003600A0202149
-:107B70000A0008450000282127BDFFD0AFB500242A
-:107B80003095FFFFAFB60028AFB40020AFBF002C88
-:107B9000AFB3001CAFB20018AFB10014AFB000100B
-:107BA00030B6FFFF12A000270000A0218F920058DE
-:107BB0008E4300003C0680002402004000033E0289
-:107BC00000032C0230E4007F006698241482001D1C
-:107BD00030A500FF8F8300682C68000A1100001098
-:107BE0008F8D0044000358803C0C0800258C57B84A
-:107BF000016C50218D4900000120000800000000A8
-:107C000002D4302130C5FFFF0E0008522404008446
-:107C1000166000028F920058AF8000688F8D00447C
-:107C20002659002026980001032090213314FFFFDD
-:107C300015A00004AF9900580295202B1480FFDC9A
-:107C400000000000028010218FBF002C8FB600289A
-:107C50008FB500248FB400208FB3001C8FB20018A2
-:107C60008FB100148FB0001003E0000827BD003072
-:107C70002407003414A70149000000009247000EB9
-:107C80008F9FFDA08F90FD9C24181600A3E700197C
-:107C90009242000D3C0880003C07800CA3E20018D3
-:107CA000964A00123C0D60003C117FFFA60A005C62
-:107CB000964400103623FFFF240200053099FFFF91
-:107CC000AE1900548E46001CAD1800288CEF000041
-:107CD0008DAE444801E6482601C93021AE06003881
-:107CE0008E05003824CB00013C0E7F00AE05003C21
-:107CF0008E0C003CAFEC0004AE0B00208E13002075
-:107D0000AE13001CA3E0001BAE03002CA3E2001284
-:107D10008E4A001424130050AE0A00348E0400343E
-:107D2000AFE400148E590018AE1900489258000CA8
-:107D3000A218004E920D000835AF0020A20F0008D7
-:107D40008E090018012E282434AC4000AE0C001817
-:107D5000920B0000317200FF1253027F2403FF8058
-:107D60003C04080024845BE80E0008AA0000000020
-:107D70003C1108008E315BE80E00087202202021C1
-:107D80002405000424080001A2050025022020216A
-:107D90000E00087CA20800053C0580008CB001782C
-:107DA0000600FFFE8F92005834AE0140240F0002FF
-:107DB0003C091000ADD10000A1CF0004ACA90178AE
-:107DC0000A000962AF8000682CAD003751A0FF9413
-:107DD0008F8D0044000580803C110800263157E05B
-:107DE000021178218DEE000001C0000800000000A3
-:107DF0002411000414B1008C3C0780003C080800EA
-:107E00008D085BE88F86FD9CACE800208E4500085D
-:107E10008F99FDA0240D0050ACC500308E4C000899
-:107E2000ACCC00508E4B000CACCB00348E43001019
-:107E3000ACC300388E4A0010ACCA00548E42001405
-:107E4000ACC2003C8E5F0018AF3F00048E50001C97
-:107E5000ACD0002090C40000309800FF130D024AFF
-:107E6000000000008CC400348CD00030009030231F
-:107E700004C000F12404008C126000EE2402000310
-:107E80000A000962AF8200682419000514B900666F
-:107E90003C0580003C0808008D085BE88F86FD9C4F
-:107EA000ACA800208E4C00048F8AFDA0240720007F
-:107EB000ACCC001C924B000824120008A14B001906
-:107EC0008F82005890430009A14300188F85005805
-:107ED00090BF000A33E400FF1092001028890009C7
-:107EE000152000BA240E0002240D0020108D000B76
-:107EF000340780002898002117000008240740005C
-:107F000024100040109000053C0700012419008057
-:107F1000109900023C070002240740008CC20018A0
-:107F20003C03FF00004350240147F825ACDF001854
-:107F300090B2000BA0D200278F8300589464000CED
-:107F4000108001FE000000009467000C3C1F8000C0
-:107F50002405FFBFA4C7005C9063000E2407000443
-:107F6000A0C300088F820058904A000FA0CA0009E1
-:107F70008F8900588D3200108FE400740244C823AA
-:107F8000ACD900588D300014ACD0002C95380018B6
-:107F9000330DFFFFACCD00409531001A322FFFFFAB
-:107FA000ACCF00448D2E001CACCE00489128000EB2
-:107FB000A0C8000890CC000801855824126001B6C2
-:107FC000A0CB00088F9200580A000962AF870068B2
-:107FD0002406000614A600143C0E80003C0F080086
-:107FE0008DEF5BE88F85FD98ADCF00208E4900189E
-:107FF0008F86FD9C8F8BFDA0ACA900008CC800383B
-:1080000024040005ACA800048CCC003C1260008164
-:10801000AD6C00000A000962AF84006824110007FB
-:1080200010B1004B240400063C05080024A55BE8C1
-:108030000E000881240400818F9200580013102B39
-:108040000A000962AF820068241F002314BFFFF6F4
-:108050003C0C80003C0508008CA55BE88F8BFDA0E4
-:10806000AD8500208F91FD9C8E4600042564002084
-:1080700026450014AE260028240600030E000F81BA
-:10808000257000308F87005802002021240600034D
-:108090000E000F8124E500083C04080024845BE8FE
-:1080A0000E0008AA0000000092230000240A0050DD
-:1080B000306200FF544AFFE18F9200580E000F6CAF
-:1080C000000000000A000A6A8F920058240800335A
-:1080D00014A800323C0380003C1108008E315BE89C
-:1080E0008F8FFDA0AC7100208E420008240D002867
-:1080F0008F89FD9CADE200308E4A000C24060009F9
-:10810000ADEA00348E5F0010ADFF00388E440014DD
-:10811000ADE400208E590018ADF900248E58001CE3
-:10812000ADF80028A1ED00118E4E00041260003160
-:10813000AD2E00288F9200580A000962AF860068B1
-:10814000240D002214ADFFB8000000002404000735
-:108150003C1008008E105BE83C188000AF10002037
-:108160005660FEAEAF8400683C04080024845BE8DF
-:108170000E0008AA241300508F84FD9C90920000EA
-:10818000325900FF1333014B000000008F9200585A
-:10819000000020210A000962AF8400683C05080045
-:1081A00024A55BE80E000858240400810A000A6A2E
-:1081B0008F92005802D498213265FFFF0E000852BA
-:1081C000240400840A0009628F920058108EFF5325
-:1081D000240704002887000310E00179241100041B
-:1081E000240F0001548FFF4D240740000A000A228B
-:1081F000240701003C05080024A55BE80E0008A444
-:10820000240400828F920058000030210A00096285
-:10821000AF8600683C04080024845BE88CC2003808
-:108220000E0008AA8CC3003C8F9200580A000AC0B6
-:1082300000002021240400823C05080024A55BE8FE
-:108240000E0008A4000000008F92005800001021CA
-:108250000A000962AF8200688E5000048F91FD9C75
-:108260003C078000ACF00020922C00050200282181
-:10827000318B0002156001562404008A8F92FDA004
-:108280002404008D9245001B30A6002014C001502C
-:1082900002002821922E00092408001231C900FF93
-:1082A0001128014B240400810E00087202002021D5
-:1082B0009258001B240F000402002021370D0042B9
-:1082C000A24D001B0E00087CA22F00253C0580005B
-:1082D0008CA401780480FFFE34B90140241F000201
-:1082E000AF300000A33F00048F9200583C101000F4
-:1082F000ACB001780A000A6B0013102B8E500004FA
-:108300008F91FD9C3C038000AC700020922A0005F8
-:108310000200282131420002144000172404008A80
-:10832000922C00092412000402002821318B00FF46
-:1083300011720011240400810E0008720200202135
-:108340008F89FDA0240800122405FFFE912F001B39
-:108350000200202135EE0020A12E001BA2280009DA
-:108360009226000500C538240E00087CA2270005CF
-:1083700002002821000020210E0009330000000027
-:108380000A000A6A8F9200588E4C00043C07800055
-:108390003C10080026105BE8ACEC00203C01080013
-:1083A000AC2C5BE8924B0003317100041220013BBE
-:1083B0008F84FD9C24020006A0820009924F001BBE
-:1083C000240EFFC031E9003F012E4025A08800089F
-:1083D0009245000330A6000114C0013200000000E5
-:1083E0008E420008AE0200083C0208008C425BF09E
-:1083F000104001318F90FDA0000219C28F8DFD9CAD
-:10840000A603000C8E4A000C24180001240400145A
-:10841000AE0A002C8E420010AE02001C965F0016C1
-:10842000A61F003C96590014A619003EADB8000CDA
-:10843000A5B80010A5B80012A5B80014A5B800167C
-:1084400012600144A2040011925100033232000272
-:108450002E5300018F920058266200080A0009621C
-:10846000AF8200688E4400043C1980003C068008FE
-:10847000AF2400208E45000890D80000240D005045
-:10848000331100FF122D009C2407008824060009E8
-:108490000E000845000000000A000A6A8F9200588A
-:1084A0008E5000043C0980003C118008AD30002053
-:1084B0009228000024050050310400FF10850110AF
-:1084C0002407008802002021000028210E00084512
-:1084D0002406000E922D00002418FF80020028219F
-:1084E00001B8802524040004240600300E0007256E
-:1084F000A23000000A000A6A8F9200588E500004D1
-:108500008F91FDA03C028000AC500020923F001BE8
-:1085100033F900101320006C240700810200202191
-:10852000000028212406001F0E000845000000005E
-:108530000A000A6A8F9200588E44001C0E00085DE3
-:1085400000000000104000E3004048218F880058E0
-:1085500024070089012020218D05001C240600012C
-:108560000E000845000000000A000A6A8F920058B9
-:10857000964900023C10080026105BE831280004F0
-:10858000110000973C0460008E4E001C3C0F8000E0
-:10859000ADEE00203C010800AC2E5BE896470002DF
-:1085A00030E40001148000E6000000008E42000468
-:1085B000AE0200083C1008008E105BF0120000ECC8
-:1085C0003C0F80008F92FD9C241000018E4E0018FD
-:1085D0008F8DFDA08F9FFD9801CF4825AE490018D3
-:1085E000A2400005AE50000C3C0808008D085BF06E
-:1085F0008F840058A6500010000839C2A6500012FF
-:10860000A6500014A6500016A5A7000C8C8C0008DC
-:108610008F8B00588F8A0058ADAC002C8D63000CF6
-:1086200024070002ADA3001C91460010A1A6001172
-:108630008F82005890450011A3E500088F990058DB
-:1086400093380012A258004E8F910058922F0013B9
-:10865000A1AF00128F920058964E0014A5AE003CB8
-:1086600096490016A5A9003E8E480018ADA8001432
-:108670005660FD6AAF8700683C05080024A55BE8EA
-:108680000E000881000020218F9200580000382140
-:108690000A000962AF8700683C05080024A55BE872
-:1086A0000E0008A4240400828F9200580A000A4D8C
-:1086B000000038210E000F6C000000008F9200585F
-:1086C0000A000AC0000020210E00087202002021CA
-:1086D0009223001B02002021346A00100E00087C47
-:1086E000A22A001B000038210200202100002821BE
-:1086F0000A000BA52406001F9242000C305F000107
-:1087000013E0000300000000964A000EA4CA002CEB
-:10871000924B000C316300025060000600003821CB
-:108720008E470014964C0012ACC7001CA4CC001A53
-:10873000000038210A000B7F240600093C050800D0
-:1087400024A55BE80E0008A42404008B8F92005837
-:108750000A000A4D0013382B3C0C08008D8C5BE896
-:1087600024DFFFFE25930100326B007F016790211B
-:1087700002638824AD110028AE4600E0AE4000E45C
-:108780000A0009B3AE5F001CACC000543C0D0800E9
-:108790008DAD5BE83C18800C37090100ACED00287A
-:1087A0008E510014AD3100E08E4F0014AD2F00E467
-:1087B0008E4E001025C7FFFE0A0009F4AD27001CED
-:1087C0005491FDD6240740000A000A222407100015
-:1087D0000E00092D000000000A000A6A8F9200585E
-:1087E0008C83442C3C12DEAD3651BEEF3C010800B8
-:1087F000AC205BE810710062000000003C196C6264
-:1088000037387970147800082404000297850074C2
-:108810009782006C2404009200A2F82B13E0001948
-:1088200002002821240400020E00069524050200FF
-:108830003C068000ACC200203C010800AC225BE892
-:108840001040000D8F8C0058240A002824040003D7
-:10885000918B0010316300FF546A00012404000171
-:108860000E0000810000000010400004240400837A
-:108870000A000BC28F920058240400833C050800B4
-:1088800024A55BE80E000881000000008F920058CC
-:108890000013382B0A000962AF8700680A000B49F1
-:1088A000240200128E4400080E00085D0000000043
-:1088B0000A000B55AE0200083C05080024A55BE841
-:1088C0000E000858240400878F9200580A000B728B
-:1088D0000013102B240400040E000695240500301C
-:1088E0001440002A004048218F8800582407008344
-:1088F000012020218D05001C0A000BB32406000175
-:108900008F8300788F8600701066FEEE000038219D
-:108910003C07080024E75B6C000320C00087282187
-:108920008CAE000011D0005D246F000131E3000F18
-:108930005466FFFA000320C00A000B8C00003821A7
-:108940008E4400040E00085D000000000A000BC801
-:10895000AE0200083C05080024A55BE80E0008A450
-:10896000240400828F9200580A000B72000010212C
-:108970003C05080024A55BE80A000C7C2404008761
-:108980008C83442C0A000C5B3C196C628F88005865
-:108990003C0780083C0C8000240B0050240A000196
-:1089A000AD820020A0EB0000A0EA000191030004CA
-:1089B000A0E3001891040005A0E400199106000648
-:1089C0003C04080024845B6CA0E6001A91020007B6
-:1089D0003C06080024C65B68A0E2001B9105000865
-:1089E000A0E5001C911F0009A0FF001D9119000ABD
-:1089F000A0F9001E9118000BA0F8001F9112000CA6
-:108A0000A0F200209111000DA0F100219110000EA4
-:108A1000A0F00022910F000FA0EF0023910E001094
-:108A2000A0EE0024910D0011A0ED0025950C00147E
-:108A3000A4EC0028950B00168F8A00708F920078A6
-:108A4000A4EB002A95030018000A10C02545000178
-:108A5000A4E3002C8D1F001C0044C0210046C82147
-:108A600030A5000FAF3F0000AF09000010B20006B4
-:108A7000AF850070000038218D05001C01202021E9
-:108A80000A000BB32406000124AD000131A7000F3A
-:108A9000AF8700780A000CF9000038213C06080076
-:108AA00024C65B680086902100003821ACA000003D
-:108AB0000A000B8CAE4000003C0482013C036000C5
-:108AC00034820E02AC603D68AF80009803E000087D
-:108AD000AC623D6C27BDFFE8AFB000103090FFFFE7
-:108AE000001018422C620041AFBF00141440000275
-:108AF00024040080240300403C010800AC300060E6
-:108B00003C010800AC2300640E000F7500602821B2
-:108B1000244802BF2409FF8001092824001039805D
-:108B2000001030408FBF00148FB0001000A720212C
-:108B300000861821AF8300803C010800AC25005856
-:108B40003C010800AC24005C03E0000827BD0018CD
-:108B5000308300FF30C6FFFF30E400FF3C08800098
-:108B60008D0201B80440FFFE000354000144382583
-:108B70003C09600000E920253C031000AD050180A0
-:108B8000AD060184AD04018803E00008AD0301B81F
-:108B90008F8500583C0A6012354800108CAC0004E8
-:108BA0003C0D600E35A60010318B00062D690001CA
-:108BB000AD0900C48CA70004ACC731808CA20008AA
-:108BC00094A40002ACC231848CA3001C0460000396
-:108BD000A784009003E00008000000008CAF00189C
-:108BE000ACCF31D08CAE001C03E00008ACCE31D449
-:108BF0008F8500588F87FF288F86FF308CAE00044A
-:108C00003C0F601235E80010ACEE00788CAD000827
-:108C1000ACED007C8CAC0010ACCC004C8CAB000CF0
-:108C2000ACCB004894CA00543C0208008C4200447B
-:108C300025490001A4C9005494C400543083FFFFA7
-:108C400010620017000000003C0208008C42004047
-:108C5000A4C200528CA30018ACE300308CA2001414
-:108C6000ACE2002C8CB90018ACF900388CB80014B8
-:108C700024050001ACF800348D0600BC50C5001975
-:108C80008D0200B48D0200B8A4E2004894E40048CC
-:108C9000A4E4004A94E800EA03E000083102FFFF80
-:108CA0003C0208008C420024A4C00054A4C200521C
-:108CB0008CA30018ACE300308CA20014ACE2002CB2
-:108CC0008CB90018ACF900388CB8001424050001E8
-:108CD000ACF800348D0600BC54C5FFEB8D0200B823
-:108CE0008D0200B4A4E2004894E40048A4E4004AE1
-:108CF00094E800EA03E000083102FFFF8F86005885
-:108D00003C0480008CC900088CC80008000929C0F8
-:108D1000000839C0AC87002090C30007306200040F
-:108D20001040003EAF85009490CB0007316A0008E8
-:108D30001140003D8F87FF2C8CCD000C8CCE001491
-:108D400001AE602B11800036000000008CC2000CC8
-:108D5000ACE200708CCB00188F85FF288F88FF3025
-:108D6000ACEB00748CCA00102402FFF8ACAA00D847
-:108D70008CC9000CAD0900608CC4001CACA400D0F0
-:108D800090E3007C0062C824A0F9007C90D8000722
-:108D9000330F000811E000040000000090ED007C9B
-:108DA00035AC0001A0EC007C90CF000731EE000153
-:108DB00011C000060000000090E3007C241800347D
-:108DC00034790002A0F9007CACB800DC90C2000746
-:108DD0003046000210C000040000000090E8007C53
-:108DE00035040004A0E4007C90ED007D3C0B600E97
-:108DF000356A001031AC003FA0EC007D8D4931D4C4
-:108E00003127000110E00002240E0001A0AE00098D
-:108E100094AF00EA03E0000831E2FFFF8F87FF2CE8
-:108E20000A000DAF8CC200140A000DB0ACE0007057
-:108E30008F8C005827BDFFD8AFB3001CAFB200180D
-:108E4000AFB00010AFBF0020AFB10014918F00157C
-:108E50003C13600E3673001031EB000FA38B009CA7
-:108E60008D8F00048D8B0008959F0012959900103E
-:108E70009584001A9598001E958E001C33EDFFFF17
-:108E8000332AFFFF3089FFFF3308FFFF31C7FFFFA1
-:108E90003C010800AC2D00243C010800AC29004432
-:108EA0003C010800AC2A0040AE683178AE67317CE6
-:108EB00091850015959100163C12601236520010F3
-:108EC00030A200FF3230FFFFAE623188AE5000B4F6
-:108ED00091830014959F0018240600010066C804C1
-:108EE00033F8FFFFAE5900B8AE5800BC918E0014A5
-:108EF000AF8F00843C08600631CD00FFAE4D00C04E
-:108F0000918A00159584000E3C07600A314900FFE4
-:108F1000AF8B00883084FFFFAE4900C835110010C8
-:108F20000E000D1034F004103C0208008C4200606A
-:108F30003C0308008C6300643C0608008CC60058A3
-:108F40003C0508008CA5005C8F8400808FBF00204A
-:108F5000AE23004CAE65319CAE030054AE4500DC40
-:108F6000AE6231A0AE6331A4AE663198AE22004845
-:108F70008FB3001CAE0200508FB10014AE4200E06F
-:108F8000AE4300E4AE4600D88FB000108FB2001898
-:108F90000A00057D27BD0028978500929783007CF5
-:108FA00027BDFFE8AFB0001000A3102BAFBF001427
-:108FB000240400058F900058104000552409000239
-:108FC0000E0006958F850080AF8200942404000374
-:108FD0001040004F240900023C0680000E00008172
-:108FE000ACC2002024070001240820001040004DDE
-:108FF00024040005978E00928F8AFF2C24090050CC
-:1090000025C50001A7850092A14900003C0D08007C
-:109010008DAD0064240380008F84FF28000D66005E
-:10902000AD4C0018A5400006954B000A8F85FF3017
-:109030002402FF8001633024A546000A915F000AE4
-:109040000000482103E2C825A159000AA0A0000899
-:10905000A140004CA08000D5961800029783009094
-:109060003C020004A49800EA960F00022418FFBFF7
-:1090700025EE2401A48E00BE8E0D0004ACAD00448C
-:109080008E0C0008ACAC0040A4A00050A4A000547A
-:109090008E0B000C240C0030AC8B00288E060010C8
-:1090A000AC860024A480003EA487004EA487005014
-:1090B000A483003CAD420074AC8800D8ACA800602A
-:1090C000A08700FC909F00D433F9007FA09900D4C2
-:1090D000909000D402187824A08F00D4914E007C88
-:1090E00035CD0001A14D007C938B009CAD480070F4
-:1090F000AC8C00DCA08B00D68F8800888F87008422
-:10910000AC8800C4AC8700C8A5400078A540007AB0
-:109110008FBF00148FB000100120102103E0000861
-:1091200027BD00188F8500940E0007258F860080CC
-:109130000A000E9F2409000227BDFFE0AFB0001017
-:109140008F900058AFB10014AFBF00188E09000413
-:109150000E00054A000921C08E0800048F84FF28F4
-:109160008F82FF30000839C03C068000ACC7002069
-:10917000948500EA904300131460001C30B1FFFF97
-:109180008F8CFF2C918B0008316A00401540000B3A
-:10919000000000008E0D0004022030218FBF001857
-:1091A0008FB100148FB00010240400220000382179
-:1091B000000D29C00A000D2F27BD00200E000098C9
-:1091C000000000008E0D0004022030218FBF001827
-:1091D0008FB100148FB00010240400220000382149
-:1091E000000D29C00A000D2F27BD00200E000090A1
-:1091F000000000008E0D0004022030218FBF0018F7
-:109200008FB100148FB00010240400220000382118
-:10921000000D29C00A000D2F27BD002027BDFFE04B
-:10922000AFB200183092FFFFAFB00010AFBF001C0C
-:10923000AFB100141240001E000080218F8600583C
-:109240008CC500002403000600053F02000514023F
-:1092500030E4000714830016304500FF2CA80006F8
-:1092600011000040000558803C0C0800258C58BCBB
-:10927000016C50218D490000012000080000000011
-:109280008F8E0098240D000111CD005024020002A1
-:10929000AF820098260900013130FFFF24C800206A
-:1092A0000212202B010030211480FFE5AF88005806
-:1092B000020010218FBF001C8FB200188FB1001464
-:1092C0008FB0001003E0000827BD00209387007EC8
-:1092D00054E00034000030210E000DE700000000D3
-:1092E0008F8600580A000EFF240200018F87009825
-:1092F0002405000210E50031240400130000282199
-:1093000000003021240700010E000D2F0000000096
-:109310000A000F008F8600588F83009824020002F5
-:109320001462FFF6240400120E000D9A00000000E3
-:109330008F85009400403021240400120E000D2F70
-:10934000000038210A000F008F8600588F83009894
-:109350002411000310710029241F0002107FFFCE8A
-:1093600026090001240400100000282100003021FB
-:109370000A000F1D240700018F91009824060002A7
-:109380001626FFF9240400100E000E410000000014
-:10939000144000238F9800588F8600580A000EFF53
-:1093A00024020003240400140E000D2F00002821C5
-:1093B0008F8600580A000EFF240200020E000EA93C
-:1093C000000000000A000F008F8600580E000D3FBD
-:1093D00000000000241900022404001400002821C9
-:1093E0000000302100003821AF9900980E000D2FA9
-:1093F000000000000A000F008F8600580E000D5775
-:10940000000000008F8500942419000200403021E4
-:1094100024040010000038210A000F56AF9900986C
-:109420000040382124040010970F0002000028217A
-:109430000E000D2F31E6FFFF8F8600580A000F0047
-:10944000AF9100988F84FF2C3C077FFF34E6FFFF2D
-:109450008C8500182402000100A61824AC83001893
-:1094600003E00008A08200053084FFFF30A5FFFF65
-:109470001080000700001821308200011040000217
-:1094800000042042006518211480FFFB00052840DD
-:1094900003E000080060102110C000070000000079
-:1094A0008CA2000024C6FFFF24A50004AC820000AB
-:1094B00014C0FFFB2484000403E000080000000047
-:1094C00010A0000824A3FFFFAC86000000000000ED
-:1094D000000000002402FFFF2463FFFF1462FFFA74
-:1094E0002484000403E0000800000000000411C010
-:1094F00003E000082442024027BDFFE8AFB000109F
-:1095000000808021AFBF00140E000F9600A0202124
-:1095100000504821240AFF808FBF00148FB0001034
-:10952000012A30243127007F3C08800A3C042100B6
-:1095300000E8102100C428253C03800027BD001846
-:10954000AC650024AF820038AC400000AC6500245C
-:1095500003E00008AC4000403C0D08008DAD005811
-:1095600000056180240AFF8001A45821016C482174
-:10957000012A30243127007F3C08800C3C04210064
-:1095800000E8102100C428253C038000AC650028B9
-:10959000AF82003403E00008AC40002430A5FFFF98
-:1095A0003C0680008CC201B80440FFFE3C086015F8
-:1095B00000A838253C031000ACC40180ACC0018475
-:1095C000ACC7018803E00008ACC301B83C0D08003B
-:1095D0008DAD005800056180240AFF8001A4582148
-:1095E000016C4021010A4824000931403107007F05
-:1095F00000C728253C04200000A418253C02800058
-:10960000AC43083003E00008AF80003427BDFFE81A
-:10961000AFB0001000808021AFBF00140E000F9685
-:1096200000A0202100504821240BFF80012B502452
-:10963000000A39403128007F3C0620008FBF00140B
-:109640008FB0001000E8282534C2000100A21825C0
-:109650003C04800027BD0018AC83083003E00008FC
-:10966000AF8000383C0580088CA700603C0680086D
-:109670000087102B144000112C8340008CA8006040
-:109680002D0340001060000F240340008CC90060CF
-:109690000089282B14A00002008018218CC30060D0
-:1096A00000035A42000B30803C0A0800254A59202A
-:1096B00000CA202103E000088C8200001460FFF340
-:1096C0002403400000035A42000B30803C0A08008B
-:1096D000254A592000CA202103E000088C8200009E
-:1096E0003C05800890A60008938400AB24C20001CA
-:1096F000304200FF3043007F1064000C0002382726
-:10970000A0A200083C0480008C85017804A0FFFE24
-:109710008F8A00A0240900023C081000AC8A014096
-:10972000A089014403E00008AC8801780A00101BFE
-:1097300030E2008027BDFFD8AFB200188F9200A49E
-:10974000AFBF0020AFB3001CAFB00010AFB100142A
-:109750008F9300348E5900283C1000803C0EFFEFA0
-:10976000AE7900008E580024A260000A35CDFFFFBC
-:10977000AE7800049251002C3C0BFF9F356AFFFF2E
-:10978000A271000C8E6F000C3C080040A271000B0F
-:1097900001F06025018D4824012A382400E8302595
-:1097A000AE66000C8E450004AE6000183C0400FF5D
-:1097B000AE6500148E43002C3482FFFFA6600008C3
-:1097C0000062F824AE7F00108E5900088F9000A030
-:1097D000964E0012AE7900208E51000C31D83FFF1A
-:1097E00000187980AE7100248E4D001401F06021C4
-:1097F00031CB0001AE6D00288E4A0018000C41C22A
-:10980000000B4B80AE6A002C8E46001C01093821EB
-:10981000A667001CAE660030964500028E4400200C
-:10982000A665001EAE64003492430033306200042B
-:1098300054400006924700003C0280083443010077
-:109840008C7F00D0AE7F0030924700008F860038BA
-:10985000A0C700309245003330A4000250800007BA
-:10986000925100018F880038240BFF80910A00304C
-:10987000014B4825A1090030925100018F9000381A
-:10988000240CFFBF2404FFDFA21100318F8D0038AC
-:109890003C1880083711008091AF003C31EE007F0A
-:1098A000A1AE003C8F890038912B003C016C502404
-:1098B000A12A003C8F9F00388E68001493E6003C7C
-:1098C0002D0700010007114000C4282400A218251C
-:1098D000A3E3003C8F87003896590012A4F90032A8
-:1098E0008E450004922E007C30B0000300107823D7
-:1098F00031ED000300AD102131CC000215800002D3
-:1099000024460034244600303C0280083443008062
-:10991000907F007C00BFC824333800041700000289
-:1099200024C2000400C010218F98003824190002BE
-:10993000ACE20034A3190000924F003F8F8E003834
-:109940003C0C8008358B0080A1CF00018F9100383E
-:10995000924D003F8E440004A62D0002956A005CE3
-:109960000E000FF43150FFFF00024B800209382532
-:109970003C08420000E82825AE2500048E4400384B
-:109980008F850038ACA400188E460034ACA6001CAD
-:10999000ACA0000CACA00010A4A00014A4A0001661
-:1099A000A4A00020A4A00022ACA000248E62001479
-:1099B00050400001240200018FBF00208FB3001C23
-:1099C0008FB200188FB100148FB00010ACA2000845
-:1099D0000A00101327BD002827BDFFC83C058008DA
-:1099E00034A40080AFBF0034AFBE0030AFB7002C4E
-:1099F000AFB60028AFB50024AFB40020AFB3001C51
-:109A0000AFB20018AFB10014AFB00010948300786B
-:109A10009482007A104300512405FFFF0080F0215A
-:109A20000A0011230080B821108B004D8FBF003435
-:109A30008F8600A03C1808008F18005C2411FF805E
-:109A40003C1680000306782101F18024AED0002C62
-:109A500096EE007A31EC007F3C0D800E31CB7FFF1B
-:109A6000018D5021000B4840012AA82196A4000036
-:109A70003C0808008D0800582405FF8030953FFF02
-:109A800001061821001539800067C8210325F82434
-:109A90003C02010003E290253338007F3C11800C2A
-:109AA000AED20028031190219250000D320F000415
-:109AB00011E0003702E0982196E3007A96E8007AF8
-:109AC00096E5007A2404800031077FFF24E300013B
-:109AD00030627FFF00A4F82403E2C825A6F9007ACB
-:109AE00096E6007A3C1408008E94006030D67FFF22
-:109AF00012D400C1000000008E5800188F8400A00E
-:109B000002A028212713FFFF0E000FCEAE53002C1A
-:109B100097D5007897D4007A12950010000028217C
-:109B20003C098008352401003C0A8008914800085F
-:109B3000908700D53114007F30E400FF0284302B81
-:109B400014C0FFB9268B0001938E00AB268C000158
-:109B5000008E682115ACFFB78F8600A08FBF003440
-:109B60008FBE00308FB7002C8FB600288FB5002431
-:109B70008FB400208FB3001C8FB200188FB1001477
-:109B80008FB0001000A0102103E0000827BD0038AE
-:109B900000C020210E000F99028028218E4B00105A
-:109BA0008E4C00308F84003824090002016C502351
-:109BB000AE4A0010A089000096E3005C8E4400309D
-:109BC0008F9100380E000FF43070FFFF00024380C9
-:109BD000020838253C02420000E22825AE25000498
-:109BE0008E5F00048F8A00388E590000240B000815
-:109BF000AD5F001CAD590018AD40000CAD40001029
-:109C00009246000A240400052408C00030D000FF5A
-:109C1000A550001496580008A55800169251000A45
-:109C20003C188008322F00FFA54F0020964E0008F8
-:109C300037110100A54E0022AD400024924D000BCB
-:109C400031AC00FFA54C0002A14B00018E49003051
-:109C50008F830038240BFFBFAC690008A06400307C
-:109C60008F9000382403FFDF9607003200E8282495
-:109C700000B51025A6020032921F003233F9003FD2
-:109C800037260040A20600328F8C0038AD800034A9
-:109C90008E2F00D0AD8F0038918E003C3C0F7FFF9F
-:109CA00031CD007FA18D003C8F84003835EEFFFF61
-:109CB000908A003C014B4824A089003C8F850038E5
-:109CC00090A8003C01033824A0A7003C8E42003439
-:109CD0008F9100383C038008AE2200408E59002C42
-:109CE0008E5F0030033F3023AE26004492300048A0
-:109CF0003218007FA23800488F8800388E4D00301F
-:109D00008D0C004801AE582401965024014B482583
-:109D1000AD0900489244000AA104004C964700088F
-:109D20008F850038A4A7004E8E5000308E4400303E
-:109D30000E0003818C65006092F9007C0002F940FE
-:109D4000004028210002110003E2302133360002D6
-:109D500012C00003020680210005B0800216802197
-:109D6000926D007C31B30004126000020005708027
-:109D7000020E80218E4B00308F8800382405800031
-:109D8000316A0003000A4823312400030204182129
-:109D9000AD03003496E4007A96F0007A96F1007AEA
-:109DA00032027FFF2447000130FF7FFF0225C824D5
-:109DB000033F3025A6E6007A96F8007A3C120800A8
-:109DC0008E520060330F7FFF11F200180000000078
-:109DD0008F8400A00E000FCE02A028218F8400A047
-:109DE0000E000FDE028028210E001013000000007C
-:109DF0000A00111F0000000096F1007A022480245E
-:109E0000A6F0007A92EF007A92EB007A31EE00FF32
-:109E1000000E69C2000D6027000C51C03169007F3F
-:109E2000012A20250A001119A2E4007A96E6007A98
-:109E300000C5C024A6F8007A92EF007A92F3007A67
-:109E400031F200FF001271C2000E6827000DB1C090
-:109E5000326C007F01962825A2E5007A0A0011D015
-:109E60008F8400A03C0380003084FFFF30A5FFFFFB
-:109E7000AC640018AC65001C03E000088C620014A0
-:109E800027BDFFA03C068008AFBF005CAFBE0058F6
-:109E9000AFB70054AFB60050AFB5004CAFB40048F8
-:109EA000AFB30044AFB20040AFB1003CAFB0003838
-:109EB00034C80100910500D590C700083084FFFF29
-:109EC00030A500FF30E2007F0045182AAFA4001043
-:109ED000A7A00018A7A0002610600055AFA000148E
-:109EE00090CA00083149007F00A9302324D3FFFF26
-:109EF0000013802B8FB400100014902B02128824C2
-:109F0000522000888FB300143C03800894790052DB
-:109F1000947E00508FB60010033EC0230018BC0092
-:109F2000001714030016FC0002C2A82A16A00002A3
-:109F3000001F2C030040282100133C0000072403CD
-:109F400000A4102A5440000100A020212885000907
-:109F500014A000020080A021241400083C0C8008FA
-:109F60008D860048001459808D88004C3C03800089
-:109F70003169FFFF3C0A0010012A202534710400DA
-:109F8000AC660038AF9100A4AC68003CAC64003013
-:109F900000000000000000000000000000000000C1
-:109FA00000000000000000000000000000000000B1
-:109FB0008C6E000031CD002011A0FFFD0014782A26
-:109FC00001F01024104000390000A8213C16800840
-:109FD00092D700083C1280008E44010032F6007FC8
-:109FE0000E000F9902C028218E3900108E44010006
-:109FF0000000902133373FFF0E000FB102E028210F
-:10A00000923800003302003F2C500008520000102C
-:10A0100000008821000210803C030800246358E4FB
-:10A020000043F8218FFE000003C00008000000007C
-:10A0300090CF0008938C00AB31EE007F00AE682318
-:10A04000018D58210A0012172573FFFF0000882197
-:10A050003C1E80008FC401000E000FCE02E02821BC
-:10A060008FC401000E000FDE02C028211220000F55
-:10A070000013802B8F8B00A426A400010004AC00E9
-:10A08000027298230015AC032578004002B4B02A70
-:10A090000013802B241700010300882102D0102414
-:10A0A000AF9800A41440FFC9AFB700143C07800864
-:10A0B00094E200508FAE00103C05800002A288217F
-:10A0C0003C060020A4F10050ACA6003094F40050EF
-:10A0D00094EF005201D51823306CFFFF11F4001EDD
-:10A0E000AFAC00108CEF004C001561808CF500487F
-:10A0F00001EC28210000202100AC582B02A4C02133
-:10A10000030BB021ACE5004CACF600488FB4001056
-:10A110000014902B021288241620FF7C3C03800838
-:10A120008FB300148FBF005C8FBE00583A620001ED
-:10A130008FB700548FB600508FB5004C8FB40048D5
-:10A140008FB300448FB200408FB1003C8FB0003815
-:10A1500003E0000827BD006094FE00548CF2004428
-:10A1600033C9FFFE0009C8C00259F821ACBF003C4A
-:10A170008CE800448CAD003C010D50231940003B9D
-:10A18000000000008CF7004026E20001ACA200387D
-:10A190003C05005034A700103C038000AC67003041
-:10A1A00000000000000000000000000000000000AF
-:10A1B000000000000000000000000000000000009F
-:10A1C0008C7800003316002012C0FFFD3C1180087F
-:10A1D000962200543C1580003C068008304E000159
-:10A1E000000E18C0007578218DEC04003C070800B3
-:10A1F0008CE700443C040020ACCC00488DF40404FF
-:10A20000240B0001ACD4004C10EB0260AEA4003073
-:10A21000963900523C0508008CA5004000B99021F9
-:10A22000A6320052963F005427ED0001A62D00549F
-:10A230009626005430C4FFFF5487FF2F8FB40010C0
-:10A2400030A5FFFF0E0011F4A62000543C070800C3
-:10A250008CE70024963E00520047B82303D74823DA
-:10A26000A62900520A0012198FB400108CE2004097
-:10A270000A0012BE00000000922400012407000121
-:10A280003085007F14A7001C97AD00268E2B00148C
-:10A29000240CC000316A3FFF01AC48243C06080092
-:10A2A0008CC60060012A402531043FFF0086882BC0
-:10A2B00012200011A7A800263C0508008CA5005814
-:10A2C0008F9100A0000439802402FF8000B1182182
-:10A2D0000067F82103E2F02433F8007F3C1280008D
-:10A2E0003C19800EAE5E002C0319702191D0000D38
-:10A2F000360F0004A1CF000D0E001028241200011B
-:10A30000241100013C1E80008FC401000E000FCEFE
-:10A3100002E028218FC401000E000FDE02C02821B8
-:10A320001620FF558F8B00A40A0012860013802B85
-:10A330008F8600A490C80001310400201080019194
-:10A34000241000013C048008348B0080916A007C5A
-:10A350008F9E0034AFA0002C314900011120000F66
-:10A36000AFB000288CCD00148C8E006001AE602B45
-:10A370001580000201A038218C8700603C188008FD
-:10A38000370300808C70007000F0782B15E000021D
-:10A3900000E020218C640070AFA4002C3C028008F7
-:10A3A000344500808CD200148CBF0070025FC82B33
-:10A3B00017200002024020218CA400708FA7002CDF
-:10A3C0000087182310600003AFA3003024050002AB
-:10A3D000AFA500288FA400280264882B162000BA9D
-:10A3E000000018218CD000388FCE000C3C0F00806C
-:10A3F000AFD000008CCD00343C0CFF9F01CF58251E
-:10A40000AFCD000490CA003F3586FFFF01662024CF
-:10A410003C0900203C08FFEFA3CA000B0089382547
-:10A420003511FFFF00F118243C0500088F8700A4B8
-:10A430000065C825AFD9000C8CE20014AFC000182D
-:10A440008FA60030AFC200148CF800188FB0002C1B
-:10A450003C1FFFFBAFD8001C8CEF000837F2FFFF5A
-:10A4600003326824AFCF00248CEC000C020670216C
-:10A47000AFCD000CA7C00038A7C0003AAFCE002C6B
-:10A48000AFCC0020AFC000288CEA00148FAB002CAA
-:10A49000014B48230126402311000011AFC80010D2
-:10A4A00090EB003D8FC900048FC80000000B5100E5
-:10A4B000012A28210000102100AA882B010218215E
-:10A4C0000071F821AFC50004AFDF000090F2003D3D
-:10A4D000A3D2000A8F9900A497380006A7D80008D5
-:10A4E0008F910038240800023C038008A228000055
-:10A4F0003465008094BF005C8FA4002C33F0FFFF14
-:10A500000E000FF48F9200380002CB808F8500A4DC
-:10A51000021978253C18420001F87025AE4E00045F
-:10A520008F8400388CAD0038AC8D00188CAC0034B2
-:10A53000AC8C001CAC80000CAC800010A48000141B
-:10A54000A4800016A4800020A4800022AC800024F7
-:10A5500090A6003F8FA7002CA486000250E0019235
-:10A56000240700018FA200305040000290A2003D5D
-:10A5700090A2003E244A0001A08A00018F84003886
-:10A580008FA9002CAC8900083C128008364D008051
-:10A5900091AC007C3186000214C000022407003414
-:10A5A000240700308F8500A43C198008373F0080C5
-:10A5B00090B0000093F9007C240E0004A0900030BD
-:10A5C0008F8F00A48FB8002C8F8D003891F200017E
-:10A5D0003304000301C46023A1B200318F8E003820
-:10A5E0008F8600A42402C00095CA003294C90012CC
-:10A5F0008FAB002C0142402431233FFF010388250B
-:10A60000A5D1003291D000323185000300EBF82152
-:10A610003218003F370F0040A1CF00328FA4002C2A
-:10A6200003E5382133280004108000028F850038AC
-:10A6300000E838213C0A8008ACA700343549010005
-:10A640008D2800D08FA3002C2419FFBFACA80038A0
-:10A6500090B1003C2C640001240FFFDF3227007F03
-:10A66000A0A7003C8F98003800049140931F003C45
-:10A6700003F98024A310003C8F8C0038918E003C9D
-:10A6800001CF682401B23025A186003C8F8900A447
-:10A690008F8800388D2B0020AD0B00408D220024C8
-:10A6A000AD0200448D2A0028AD0A00488D23002CFD
-:10A6B0000E001013AD03004C8FB1002824070002D8
-:10A6C000122700118FA300280003282B00058023E8
-:10A6D0000270982400608021006090210A00126FAF
-:10A6E0000010882B962900128F8400A00000902172
-:10A6F0003125FFFFA7A900180E000FC22411000189
-:10A700000A00131D3C1E80003C0B80003C12800898
-:10A710008D640100924900088F92FF340E000F995A
-:10A720003125007F8F9900388FA700288FA4003033
-:10A73000A3270000965F005C33F0FFFF0E000FF4CC
-:10A740008F91003800026B80020D80253C0842008A
-:10A750008F8D00A402085025AE2A00048DA5003874
-:10A760008F8A003800007821000F1100AD450018D5
-:10A770008DB800343C047FFF3488FFFFAD58001CC7
-:10A7800091A6003E8D4C001C8D4900180006190052
-:10A79000000677020183C821004E58250323882B29
-:10A7A000012B382100F1F821AD59001CAD5F0018D4
-:10A7B000AD40000CAD40001091B0003E8FA40030C1
-:10A7C00024090005A550001495A500042419C00013
-:10A7D00000884024A545001691B8003EA5580020E9
-:10A7E00095AF0004A54F0022AD40002491AE003F7C
-:10A7F000A54E000291A6003E91AC003D01861023BB
-:10A80000244B0001A14B00018F9100388FA3003031
-:10A810003C028008344B0100AE230008A22900301E
-:10A820008F8C00388F8700A4959F003294F000121F
-:10A830002407FFBF033FC02432053FFF03057825EF
-:10A84000A58F0032918E00322418FFDF31CD003FFA
-:10A8500035A60040A18600328F910038240DFFFFFD
-:10A86000240CFF80AE2000348D6A00D0AE2A003860
-:10A870009223003C3069007FA229003C8F90003871
-:10A880003C0380009219003C0327F824A21F003CDF
-:10A890008F8E003891C5003C00B87824A1CF003CD1
-:10A8A0008F8A00383C0E8008AD4D00408FA6002CEA
-:10A8B000AD46004491420048004C5825A14B004849
-:10A8C0008F9000388F9900A48E09004801238824B6
-:10A8D00002283825AE070048933F003EA21F004CD7
-:10A8E0008F9800A48F8F003897050004A5E5004ECF
-:10A8F0000E0003818DC500609246007C8FAC003055
-:10A9000000026940000291000040282130CB000283
-:10A9100001B21021156000AA018230213C0E80088E
-:10A9200035C20080904C007C31830004106000032D
-:10A930008FB900300005788000CF3021241F00043B
-:10A940008F910038332D000303ED8023320800037C
-:10A9500000C85021AE2A00343C188000A7C500383A
-:10A960003C0680088F04010090DE00080E000FDE18
-:10A9700033C5007F0E001013000000000A00140D04
-:10A980008FA300288F9800348CC90038241F00033F
-:10A99000A7000008AF0900008CC50034A300000A1E
-:10A9A0008F9900A4AF0500043C080080932D003F60
-:10A9B000A31F000C8F0A000C3C02FF9FA30D000B8D
-:10A9C0000148F0253451FFFF3C12FFEF8F9900A49E
-:10A9D00003D170243646FFFF01C61824AF03000CD4
-:10A9E0008F2C0014972900128F8400A0AF0C001048
-:10A9F0008F2F0014AF000018AF000020AF0F00141D
-:10AA0000AF0000248F270018312F3FFF000F59801F
-:10AA1000AF0700288F2500080164F821312D0001BF
-:10AA2000AF0500308F31000C8F920038001F51C2EB
-:10AA3000000D438001481021241E00023C068008BE
-:10AA4000A702001CA7000034AF11002CA25E00007A
-:10AA500034D20080964E005C8F9900383C0342004F
-:10AA600031CCFFFF01833825AF2700048F8B00A472
-:10AA7000240500012402C0008D640038240700343E
-:10AA8000AF2400188D690034AF29001CAF20000CE2
-:10AA9000AF200010A7200014A7200016A720002038
-:10AAA000A7200022AF200024A7300002A325000128
-:10AAB0008F8800388F9F00A4AD10000893ED000030
-:10AAC000A10D00308F8A00A48F98003891510001A9
-:10AAD000A31100318F8B0038957E003203C27024A1
-:10AAE00001CF6025A56C0032916300323064003FD5
-:10AAF000A16400329249007C3125000214A00002BA
-:10AB00008F840038240700303C198008AC8700345B
-:10AB1000373201008E5F00D0240AFFBF020090216F
-:10AB2000AC9F0038908D003C31A8007FA088003C8D
-:10AB30008F9E003893C2003C004A8824A3D1003C79
-:10AB40008F8300380010882B9066003C34CE0020A4
-:10AB5000A06E003C8F8400A48F9800388C8C00205D
-:10AB6000AF0C00408C8F0024AF0F00448C8700286E
-:10AB7000AF0700488C8B002CAF0B004C0E0010135D
-:10AB80003C1E80000A0012700000000094C80052B1
-:10AB90003C0A08008D4A002401488821A4D10052B3
-:10ABA0000A0012198FB40010A08700018F840038AA
-:10ABB000240B0001AC8B00080A0013BE3C12800875
-:10ABC000000520800A0014A200C4302127BDFFE048
-:10ABD0003C0D8008AFB20018AFB00010AFBF001C32
-:10ABE000AFB1001435B200808E4C001835A80100BA
-:10ABF000964B000695A70050910900FC000C5602E8
-:10AC0000016728233143007F312600FF240200031F
-:10AC1000AF8300A8AF8400A010C2001B30B0FFFFBC
-:10AC2000910600FC2412000530C200FF10520033D0
-:10AC300000000000160000098FBF001C8FB2001832
-:10AC40008FB100148FB00010240D0C003C0C80005C
-:10AC500027BD002003E00008AD8D00240E0011FB8D
-:10AC6000020020218FBF001C8FB200188FB100148A
-:10AC70008FB00010240D0C003C0C800027BD00207C
-:10AC800003E00008AD8D0024965800789651007AB4
-:10AC9000924E007D0238782631E8FFFF31C400C0B3
-:10ACA000148000092D11000116000037000000007B
-:10ACB0005620FFE28FBF001C0E0010D100000000E4
-:10ACC0000A00156A8FBF001C1620FFDA0000000082
-:10ACD0000E0010D1000000001440FFD88FBF001CF0
-:10ACE0001600002200000000925F007D33E2003F6A
-:10ACF000A242007D0A00156A8FBF001C950900EA78
-:10AD00008F86008000802821240400050E0007257E
-:10AD10003130FFFF978300923C0480002465FFFFE1
-:10AD2000A78500928C8A01B80540FFFE0000000054
-:10AD3000AC8001808FBF001CAC9001848FB20018E2
-:10AD40008FB100148FB000103C0760133C0B100053
-:10AD5000240D0C003C0C800027BD0020AC8701882E
-:10AD6000AC8B01B803E00008AD8D00240E0011FB90
-:10AD7000020020215040FFB18FBF001C925F007D78
-:10AD80000A00159733E2003F0E0011FB020020215C
-:10AD90001440FFAA8FBF001C122000070000000013
-:10ADA0009259007D3330003F36020040A242007DC0
-:10ADB0000A00156A8FBF001C0E0010D100000000B1
-:10ADC0005040FF9E8FBF001C9259007D3330003FE2
-:08ADD0000A0015C6360200401E
-:08ADD800000000000000001B58
-:10ADE0000000000F0000000A00000008000000063C
-:10ADF0000000000500000005000000040000000441
-:10AE00000000000300000003000000030000000336
-:10AE10000000000300000002000000020000000229
-:10AE2000000000020000000200000002000000021A
-:10AE3000000000020000000200000002000000020A
-:10AE400000000002000000020000000200000002FA
-:0CAE5000000000010000000100000001F3
-:04AE5C008008010069
-:10AE6000800800808008000000000C000000308096
-:10AE7000080011D00800127C08001294080012A8E3
-:10AE8000080012BC080011D0080011D0080012F010
-:10AE90000800132C080013400800138808001A8CBF
-:10AEA00008001A8C08001AC408001AC408001AD82E
-:10AEB00008001AA808001D0008001CCC08001D5836
-:10AEC00008001D5808001DE008001D108008024001
-:10AED000080027340800256C0800275C080027F4C8
-:10AEE0000800293C0800298808002AAC080029B479
-:10AEF00008002A38080025DC08002EDC08002EA4F3
-:10AF000008002588080025880800258808002B20CF
-:10AF100008002B20080025880800258808002DD06F
-:10AF2000080025880800258808002588080025884D
-:10AF300008002E0C080025880800258808002588B0
-:10AF4000080025880800258808002588080025882D
-:10AF5000080025880800258808002588080025881D
-:10AF6000080025880800258808002588080029A8E9
-:10AF7000080025880800258808002E680800258814
-:10AF800008002588080025880800258808002588ED
-:10AF900008002588080025880800258808002588DD
-:10AFA00008002588080025880800258808002588CD
-:10AFB00008002588080025880800258808002588BD
-:10AFC00008002CF4080025880800258808002C6853
-:10AFD00008002BC408003CE408003CB808003C848E
-:10AFE00008003C5808003C3808003BEC8008010091
-:10AFF00080080080800800008008008008004C6401
-:10B0000008004C9C08004BE408004C6408004C64A9
-:0CB01000080049B808004C6408005050CB
-:04B01C000A000C8496
-:10B0200000000000000000000000000D7278703683
-:10B030002E322E31610000000602010300000000E4
-:10B0400000000001000000000000000000000000FF
-:10B0500000000000000000000000000000000000F0
-:10B0600000000000000000000000000000000000E0
-:10B0700000000000000000000000000000000000D0
-:10B0800000000000000000000000000000000000C0
-:10B0900000000000000000000000000000000000B0
-:10B0A00000000000000000000000000000000000A0
-:10B0B0000000000000000000000000000000000090
-:10B0C0000000000000000000000000000000000080
-:10B0D0000000000000000000000000000000000070
-:10B0E0000000000000000000000000000000000060
-:10B0F0000000000000000000000000000000000050
-:10B10000000000000000000000000000000000003F
-:10B11000000000000000000000000000000000002F
-:10B12000000000000000000000000000000000001F
-:10B13000000000000000000000000000000000000F
-:10B1400000000000000000000000000000000000FF
-:10B1500000000000000000000000000000000000EF
-:10B1600000000000000000000000000000000000DF
-:10B1700000000000000000000000000000000000CF
-:10B1800000000000000000000000000000000000BF
-:10B1900000000000000000000000000000000000AF
-:10B1A000000000000000000000000000000000009F
-:10B1B000000000000000000000000000000000008F
-:10B1C000000000000000000000000000000000007F
-:10B1D000000000000000000000000000000000006F
-:10B1E000000000000000000000000000000000005F
-:10B1F000000000000000000000000000000000004F
-:10B20000000000000000000000000000000000003E
-:10B21000000000000000000000000000000000002E
-:10B22000000000000000000000000000000000001E
-:10B23000000000000000000000000000000000000E
-:10B2400000000000000000000000000000000000FE
-:10B2500000000000000000000000000000000000EE
-:10B2600000000000000000000000000000000000DE
-:10B2700000000000000000000000000000000000CE
-:10B2800000000000000000000000000000000000BE
-:10B2900000000000000000000000000000000000AE
-:10B2A000000000000000000000000000000000009E
-:10B2B000000000000000000000000000000000008E
-:10B2C000000000000000000000000000000000007E
-:10B2D000000000000000000000000000000000006E
-:10B2E000000000000000000000000000000000005E
-:10B2F000000000000000000000000000000000004E
-:10B30000000000000000000000000000000000003D
-:10B31000000000000000000000000000000000002D
-:10B32000000000000000000000000000000000001D
-:10B33000000000000000000000000000000000000D
-:10B3400000000000000000000000000000000000FD
-:10B3500000000000000000000000000000000000ED
-:10B3600000000000000000000000000000000000DD
-:10B3700000000000000000000000000000000000CD
-:10B3800000000000000000000000000000000000BD
-:10B3900000000000000000000000000000000000AD
-:10B3A000000000000000000000000000000000009D
-:10B3B000000000000000000000000000000000008D
-:10B3C000000000000000000000000000000000007D
-:10B3D000000000000000000000000000000000006D
-:10B3E000000000000000000000000000000000005D
-:10B3F000000000000000000000000000000000004D
-:10B40000000000000000000000000000000000003C
-:10B41000000000000000000000000000000000002C
-:10B42000000000000000000000000000000000001C
-:10B43000000000000000000000000000000000000C
-:10B4400000000000000000000000000000000000FC
-:10B4500000000000000000000000000000000000EC
-:10B4600000000000000000000000000000000000DC
-:10B4700000000000000000000000000000000000CC
-:10B4800000000000000000000000000000000000BC
-:10B4900000000000000000000000000000000000AC
-:10B4A000000000000000000000000000000000009C
-:10B4B000000000000000000000000000000000008C
-:10B4C000000000000000000000000000000000007C
-:10B4D000000000000000000000000000000000006C
-:10B4E000000000000000000000000000000000005C
-:10B4F000000000000000000000000000000000004C
-:10B50000000000000000000000000000000000003B
-:10B51000000000000000000000000000000000002B
-:10B52000000000000000000000000000000000001B
-:10B53000000000000000000000000000000000000B
-:10B5400000000000000000000000000000000000FB
-:10B5500000000000000000000000000000000000EB
-:10B5600000000000000000000000000000000000DB
-:10B5700000000000000000000000000000000000CB
-:10B5800000000000000000000000000000000000BB
-:10B5900000000000000000000000000000000000AB
-:10B5A000000000000000000000000000000000009B
-:10B5B000000000000000000000000000000000008B
-:10B5C000000000000000000000000000000000007B
-:10B5D000000000000000000000000000000000006B
-:10B5E000000000000000000000000000000000005B
-:10B5F000000000000000000000000000000000004B
-:10B60000000000000000000000000000000000003A
-:10B61000000000000000000000000000000000002A
-:10B62000000000000000000000000000000000001A
-:10B63000000000000000000000000000000000000A
-:10B6400000000000000000000000000000000000FA
-:10B6500000000000000000000000000000000000EA
-:10B6600000000000000000000000000000000000DA
-:10B6700000000000000000000000000000000000CA
-:10B6800000000000000000000000000000000000BA
-:10B6900000000000000000000000000000000000AA
-:10B6A000000000000000000000000000000000009A
-:10B6B000000000000000000000000000000000008A
-:10B6C000000000000000000000000000000000007A
-:10B6D000000000000000000000000000000000006A
-:10B6E000000000000000000000000000000000005A
-:10B6F000000000000000000000000000000000004A
-:10B700000000000000000000000000000000000039
-:10B710000000000000000000000000000000000029
-:10B720000000000000000000000000000000000019
-:10B730000000000000000000000000000000000009
-:10B7400000000000000000000000000000000000F9
-:10B7500000000000000000000000000000000000E9
-:10B7600000000000000000000000000000000000D9
-:10B7700000000000000000000000000000000000C9
-:10B7800000000000000000000000000000000000B9
-:10B7900000000000000000000000000000000000A9
-:10B7A0000000000000000000000000000000000099
-:10B7B0000000000000000000000000000000000089
-:10B7C0000000000000000000000000000000000079
-:10B7D0000000000000000000000000000000000069
-:10B7E0000000000000000000000000000000000059
-:10B7F0000000000000000000000000000000000049
-:10B800000000000000000000000000000000000038
-:10B810000000000000000000000000000000000028
-:10B820000000000000000000000000000000000018
-:10B830000000000000000000000000000000000008
-:10B8400000000000000000000000000000000000F8
-:10B8500000000000000000000000000000000000E8
-:10B8600000000000000000000000000000000000D8
-:10B8700000000000000000000000000000000000C8
-:10B8800000000000000000000000000000000000B8
-:10B8900000000000000000000000000000000000A8
-:10B8A0000000000000000000000000000000000098
-:10B8B0000000000000000000000000000000000088
-:10B8C0000000000000000000000000000000000078
-:10B8D0000000000000000000000000000000000068
-:10B8E0000000000000000000000000000000000058
-:10B8F0000000000000000000000000000000000048
-:10B900000000000000000000000000000000000037
-:10B910000000000000000000000000000000000027
-:10B920000000000000000000000000000000000017
-:10B930000000000000000000000000000000000007
-:10B9400000000000000000000000000000000000F7
-:10B9500000000000000000000000000000000000E7
-:10B9600000000000000000000000000000000000D7
-:10B9700000000000000000000000000000000000C7
-:10B9800000000000000000000000000000000000B7
-:10B9900000000000000000000000000000000000A7
-:10B9A0000000000000000000000000000000000097
-:10B9B0000000000000000000000000000000000087
-:10B9C0000000000000000000000000000000000077
-:10B9D0000000000000000000000000000000000067
-:10B9E0000000000000000000000000000000000057
-:10B9F0000000000000000000000000000000000047
-:10BA00000000000000000000000000000000000036
-:10BA10000000000000000000000000000000000026
-:10BA20000000000000000000000000000000000016
-:10BA30000000000000000000000000000000000006
-:10BA400000000000000000000000000000000000F6
-:10BA500000000000000000000000000000000000E6
-:10BA600000000000000000000000000000000000D6
-:10BA700000000000000000000000000000000000C6
-:10BA800000000000000000000000000000000000B6
-:10BA900000000000000000000000000000000000A6
-:10BAA0000000000000000000000000000000000096
-:10BAB0000000000000000000000000000000000086
-:10BAC0000000000000000000000000000000000076
-:10BAD0000000000000000000000000000000000066
-:10BAE0000000000000000000000000000000000056
-:10BAF0000000000000000000000000000000000046
-:10BB00000000000000000000000000000000000035
-:10BB10000000000000000000000000000000000025
-:10BB20000000000000000000000000000000000015
-:10BB30000000000000000000000000000000000005
-:10BB400000000000000000000000000000000000F5
-:10BB500000000000000000000000000000000000E5
-:10BB600000000000000000000000000000000000D5
-:10BB700000000000000000000000000000000000C5
-:10BB800000000000000000000000000000000000B5
-:10BB900000000000000000000000000000000000A5
-:10BBA0000000000000000000000000000000000095
-:10BBB0000000000000000000000000000000000085
-:10BBC0000000000000000000000000000000000075
-:10BBD0000000000000000000000000000000000065
-:10BBE0000000000000000000000000000000000055
-:10BBF0000000000000000000000000000000000045
-:10BC00000000000000000000000000000000000034
-:10BC10000000000000000000000000000000000024
-:10BC20000000000000000000000000000000000014
-:10BC30000000000000000000000000000000000004
-:10BC400000000000000000000000000000000000F4
-:10BC500000000000000000000000000000000000E4
-:10BC600000000000000000000000000000000000D4
-:10BC700000000000000000000000000000000000C4
-:10BC800000000000000000000000000000000000B4
-:10BC900000000000000000000000000000000000A4
-:10BCA0000000000000000000000000000000000094
-:10BCB0000000000000000000000000000000000084
-:10BCC0000000000000000000000000000000000074
-:10BCD0000000000000000000000000000000000064
-:10BCE0000000000000000000000000000000000054
-:10BCF0000000000000000000000000000000000044
-:10BD00000000000000000000000000000000000033
-:10BD10000000000000000000000000000000000023
-:10BD20000000000000000000000000000000000013
-:10BD30000000000000000000000000000000000003
-:10BD400000000000000000000000000000000000F3
-:10BD500000000000000000000000000000000000E3
-:10BD600000000000000000000000000000000000D3
-:10BD700000000000000000000000000000000000C3
-:10BD800000000000000000000000000000000000B3
-:10BD900000000000000000000000000000000000A3
-:10BDA0000000000000000000000000000000000093
-:10BDB0000000000000000000000000000000000083
-:10BDC0000000000000000000000000000000000073
-:10BDD0000000000000000000000000000000000063
-:10BDE0000000000000000000000000000000000053
-:10BDF0000000000000000000000000000000000043
-:10BE00000000000000000000000000000000000032
-:10BE10000000000000000000000000000000000022
-:10BE20000000000000000000000000000000000012
-:10BE30000000000000000000000000000000000002
-:10BE400000000000000000000000000000000000F2
-:10BE500000000000000000000000000000000000E2
-:10BE600000000000000000000000000000000000D2
-:10BE700000000000000000000000000000000000C2
-:10BE800000000000000000000000000000000000B2
-:10BE900000000000000000000000000000000000A2
-:10BEA0000000000000000000000000000000000092
-:10BEB0000000000000000000000000000000000082
-:10BEC0000000000000000000000000000000000072
-:10BED0000000000000000000000000000000000062
-:10BEE0000000000000000000000000000000000052
-:10BEF0000000000000000000000000000000000042
-:10BF00000000000000000000000000000000000031
-:10BF10000000000000000000000000000000000021
-:10BF20000000000000000000000000000000000011
-:10BF30000000000000000000000000000000000001
-:10BF400000000000000000000000000000000000F1
-:10BF500000000000000000000000000000000000E1
-:10BF600000000000000000000000000000000000D1
-:10BF700000000000000000000000000000000000C1
-:10BF800000000000000000000000000000000000B1
-:10BF900000000000000000000000000000000000A1
-:10BFA0000000000000000000000000000000000091
-:10BFB0000000000000000000000000000000000081
-:10BFC0000000000000000000000000000000000071
-:10BFD0000000000000000000000000000000000061
-:10BFE0000000000000000000000000000000000051
-:10BFF0000000000000000000000000000000000041
-:10C000000000000000000000000000000000000030
-:10C010000000000000000000000000000000000020
-:10C020000000000000000000000000000000000010
-:10C030000000000000000000000000000000000000
-:10C0400000000000000000000000000000000000F0
-:10C0500000000000000000000000000000000000E0
-:10C0600000000000000000000000000000000000D0
-:10C0700000000000000000000000000000000000C0
-:10C0800000000000000000000000000000000000B0
-:10C0900000000000000000000000000000000000A0
-:10C0A0000000000000000000000000000000000090
-:10C0B0000000000000000000000000000000000080
-:10C0C0000000000000000000000000000000000070
-:10C0D0000000000000000000000000000000000060
-:10C0E0000000000000000000000000000000000050
-:10C0F0000000000000000000000000000000000040
-:10C10000000000000000000000000000000000002F
-:10C11000000000000000000000000000000000001F
-:10C12000000000000000000000000000000000000F
-:10C1300000000000000000000000000000000000FF
-:10C1400000000000000000000000000000000000EF
-:10C1500000000000000000000000000000000000DF
-:10C1600000000000000000000000000000000000CF
-:10C1700000000000000000000000000000000000BF
-:10C1800000000000000000000000000000000000AF
-:10C19000000000000000000000000000000000009F
-:10C1A000000000000000000000000000000000008F
-:10C1B000000000000000000000000000000000007F
-:10C1C000000000000000000000000000000000006F
-:10C1D000000000000000000000000000000000005F
-:10C1E000000000000000000000000000000000004F
-:10C1F000000000000000000000000000000000003F
-:10C20000000000000000000000000000000000002E
-:10C21000000000000000000000000000000000001E
-:10C22000000000000000000000000000000000000E
-:10C2300000000000000000000000000000000000FE
-:10C2400000000000000000000000000000000000EE
-:10C2500000000000000000000000000000000000DE
-:10C2600000000000000000000000000000000000CE
-:10C2700000000000000000000000000000000000BE
-:10C2800000000000000000000000000000000000AE
-:10C29000000000000000000000000000000000009E
-:10C2A000000000000000000000000000000000008E
-:10C2B000000000000000000000000000000000007E
-:10C2C000000000000000000000000000000000006E
-:10C2D000000000000000000000000000000000005E
-:10C2E000000000000000000000000000000000004E
-:10C2F000000000000000000000000000000000003E
-:10C30000000000000000000000000000000000002D
-:10C31000000000000000000000000000000000001D
-:10C32000000000000000000000000000000000000D
-:10C3300000000000000000000000000000000000FD
-:10C3400000000000000000000000000000000000ED
-:10C3500000000000000000000000000000000000DD
-:10C3600000000000000000000000000000000000CD
-:10C3700000000000000000000000000000000000BD
-:10C3800000000000000000000000000000000000AD
-:10C39000000000000000000000000000000000009D
-:10C3A000000000000000000000000000000000008D
-:10C3B000000000000000000000000000000000007D
-:10C3C000000000000000000000000000000000006D
-:10C3D000000000000000000000000000000000005D
-:10C3E000000000000000000000000000000000004D
-:10C3F000000000000000000000000000000000003D
-:10C40000000000000000000000000000000000002C
-:10C41000000000000000000000000000000000001C
-:10C42000000000000000000000000000000000000C
-:10C4300000000000000000000000000000000000FC
-:10C4400000000000000000000000000000000000EC
-:10C4500000000000000000000000000000000000DC
-:10C4600000000000000000000000000000000000CC
-:10C4700000000000000000000000000000000000BC
-:10C4800000000000000000000000000000000000AC
-:10C49000000000000000000000000000000000009C
-:10C4A000000000000000000000000000000000008C
-:10C4B000000000000000000000000000000000007C
-:10C4C000000000000000000000000000000000006C
-:10C4D000000000000000000000000000000000005C
-:10C4E000000000000000000000000000000000004C
-:10C4F000000000000000000000000000000000003C
-:10C50000000000000000000000000000000000002B
-:10C51000000000000000000000000000000000001B
-:10C52000000000000000000000000000000000000B
-:10C5300000000000000000000000000000000000FB
-:10C5400000000000000000000000000000000000EB
-:10C5500000000000000000000000000000000000DB
-:10C5600000000000000000000000000000000000CB
-:10C5700000000000000000000000000000000000BB
-:10C5800000000000000000000000000000000000AB
-:10C59000000000000000000000000000000000009B
-:10C5A000000000000000000000000000000000008B
-:10C5B000000000000000000000000000000000007B
-:10C5C000000000000000000000000000000000006B
-:10C5D000000000000000000000000000000000005B
-:10C5E000000000000000000000000000000000004B
-:10C5F000000000000000000000000000000000003B
-:10C60000000000000000000000000000000000002A
-:10C61000000000000000000000000000000000001A
-:10C62000000000000000000000000000000000000A
-:10C6300000000000000000000000000000000000FA
-:10C6400000000000000000000000000000000000EA
-:10C6500000000000000000000000000000000000DA
-:10C6600000000000000000000000000000000000CA
-:10C6700000000000000000000000000000000000BA
-:10C6800000000000000000000000000000000000AA
-:10C69000000000000000000000000000000000009A
-:10C6A000000000000000000000000000000000008A
-:10C6B000000000000000000000000000000000007A
-:10C6C000000000000000000000000000000000006A
-:10C6D000000000000000000000000000000000005A
-:10C6E000000000000000000000000000000000004A
-:10C6F000000000000000000000000000000000003A
-:10C700000000000000000000000000000000000029
-:10C710000000000000000000000000000000000019
-:10C720000000000000000000000000000000000009
-:10C7300000000000000000000000000000000000F9
-:10C7400000000000000000000000000000000000E9
-:10C7500000000000000000000000000000000000D9
-:10C7600000000000000000000000000000000000C9
-:10C7700000000000000000000000000000000000B9
-:10C7800000000000000000000000000000000000A9
-:10C790000000000000000000000000000000000099
-:10C7A0000000000000000000000000000000000089
-:10C7B0000000000000000000000000000000000079
-:10C7C0000000000000000000000000000000000069
-:10C7D0000000000000000000000000000000000059
-:10C7E0000000000000000000000000000000000049
-:10C7F0000000000000000000000000000000000039
-:10C800000000000000000000000000000000000028
-:10C810000000000000000000000000000000000018
-:10C820000000000000000000000000000000000008
-:10C8300000000000000000000000000000000000F8
-:10C8400000000000000000000000000000000000E8
-:10C8500000000000000000000000000000000000D8
-:10C8600000000000000000000000000000000000C8
-:10C8700000000000000000000000000000000000B8
-:10C8800000000000000000000000000000000000A8
-:10C890000000000000000000000000000000000098
-:10C8A0000000000000000000000000000000000088
-:10C8B0000000000000000000000000000000000078
-:10C8C0000000000000000000000000000000000068
-:10C8D0000000000000000000000000000000000058
-:10C8E0000000000000000000000000000000000048
-:10C8F0000000000000000000000000000000000038
-:10C900000000000000000000000000000000000027
-:10C910000000000000000000000000000000000017
-:10C920000000000000000000000000000000000007
-:10C9300000000000000000000000000000000000F7
-:10C9400000000000000000000000000000000000E7
-:10C9500000000000000000000000000000000000D7
-:10C9600000000000000000000000000000000000C7
-:10C9700000000000000000000000000000000000B7
-:10C9800000000000000000000000000000000000A7
-:10C990000000000000000000000000000000000097
-:10C9A0000000000000000000000000000000000087
-:10C9B0000000000000000000000000000000000077
-:10C9C0000000000000000000000000000000000067
-:10C9D0000000000000000000000000000000000057
-:10C9E0000000000000000000000000000000000047
-:10C9F0000000000000000000000000000000000037
-:10CA00000000000000000000000000000000000026
-:10CA10000000000000000000000000000000000016
-:10CA20000000000000000000000000000000000006
-:10CA300000000000000000000000000000000000F6
-:10CA400000000000000000000000000000000000E6
-:10CA500000000000000000000000000000000000D6
-:10CA600000000000000000000000000000000000C6
-:10CA700000000000000000000000000000000000B6
-:10CA800000000000000000000000000000000000A6
-:10CA90000000000000000000000000000000000096
-:10CAA0000000000000000000000000000000000086
-:10CAB0000000000000000000000000000000000076
-:10CAC0000000000000000000000000000000000066
-:10CAD0000000000000000000000000000000000056
-:10CAE0000000000000000000000000000000000046
-:10CAF0000000000000000000000000000000000036
-:10CB00000000000000000000000000000000000025
-:10CB10000000000000000000000000000000000015
-:10CB20000000000000000000000000000000000005
-:10CB300000000000000000000000000000000000F5
-:10CB400000000000000000000000000000000000E5
-:10CB500000000000000000000000000000000000D5
-:10CB600000000000000000000000000000000000C5
-:10CB700000000000000000000000000000000000B5
-:10CB800000000000000000000000000000000000A5
-:10CB90000000000000000000000000000000000095
-:10CBA0000000000000000000000000000000000085
-:10CBB0000000000000000000000000000000000075
-:10CBC0000000000000000000000000000000000065
-:10CBD0000000000000000000000000000000000055
-:10CBE0000000000000000000000000000000000045
-:10CBF0000000000000000000000000000000000035
-:10CC00000000000000000000000000000000000024
-:10CC10000000000000000000000000000000000014
-:10CC20000000000000000000000000000000000004
-:10CC300000000000000000000000000000000000F4
-:10CC400000000000000000000000000000000000E4
-:10CC500000000000000000000000000000000000D4
-:10CC600000000000000000000000000000000000C4
-:10CC700000000000000000000000000000000000B4
-:10CC800000000000000000000000000000000000A4
-:10CC90000000000000000000000000000000000094
-:10CCA0000000000000000000000000000000000084
-:10CCB0000000000000000000000000000000000074
-:10CCC0000000000000000000000000000000000064
-:10CCD0000000000000000000000000000000000054
-:10CCE0000000000000000000000000000000000044
-:10CCF0000000000000000000000000000000000034
-:10CD00000000000000000000000000000000000023
-:10CD10000000000000000000000000000000000013
-:10CD20000000000000000000000000000000000003
-:10CD300000000000000000000000000000000000F3
-:10CD400000000000000000000000000000000000E3
-:10CD500000000000000000000000000000000000D3
-:10CD600000000000000000000000000000000000C3
-:10CD700000000000000000000000000000000000B3
-:10CD800000000000000000000000000000000000A3
-:10CD90000000000000000000000000000000000093
-:10CDA0000000000000000000000000000000000083
-:10CDB0000000000000000000000000000000000073
-:10CDC0000000000000000000000000000000000063
-:10CDD0000000000000000000000000000000000053
-:10CDE0000000000000000000000000000000000043
-:10CDF0000000000000000000000000000000000033
-:10CE00000000000000000000000000000000000022
-:10CE10000000000000000000000000000000000012
-:10CE20000000000000000000000000000000000002
-:10CE300000000000000000000000000000000000F2
-:10CE400000000000000000000000000000000000E2
-:10CE500000000000000000000000000000000000D2
-:10CE600000000000000000000000000000000000C2
-:10CE700000000000000000000000000000000000B2
-:10CE800000000000000000000000000000000000A2
-:10CE90000000000000000000000000000000000092
-:10CEA0000000000000000000000000000000000082
-:10CEB0000000000000000000000000000000000072
-:10CEC0000000000000000000000000000000000062
-:10CED0000000000000000000000000000000000052
-:10CEE0000000000000000000000000000000000042
-:10CEF0000000000000000000000000000000000032
-:10CF00000000000000000000000000000000000021
-:10CF10000000000000000000000000000000000011
-:10CF20000000000000000000000000000000000001
-:10CF300000000000000000000000000000000000F1
-:10CF400000000000000000000000000000000000E1
-:10CF500000000000000000000000000000000000D1
-:10CF600000000000000000000000000000000000C1
-:10CF700000000000000000000000000000000000B1
-:10CF800000000000000000000000000000000000A1
-:10CF90000000000000000000000000000000000091
-:10CFA0000000000000000000000000000000000081
-:10CFB0000000000000000000000000000000000071
-:10CFC0000000000000000000000000000000000061
-:10CFD0000000000000000000000000000000000051
-:10CFE0000000000000000000000000000000000041
-:10CFF0000000000000000000000000000000000031
-:10D000000000000000000000000000000000000020
-:10D010000000000000000000000000000000000010
-:10D020000000000000000000000000000000000000
-:10D0300000000000000000000000000000000000F0
-:10D0400000000000000000000000000000000000E0
-:10D0500000000000000000000000000000000000D0
-:10D0600000000000000000000000000000000000C0
-:10D0700000000000000000000000000000000000B0
-:10D0800000000000000000000000000000000000A0
-:10D090000000000000000000000000000000000090
-:10D0A0000000000000000000000000000000000080
-:10D0B0000000000000000000000000000000000070
-:10D0C0000000000000000000000000000000000060
-:10D0D0000000000000000000000000000000000050
-:10D0E0000000000000000000000000000000000040
-:10D0F0000000000000000000000000000000000030
-:10D10000000000000000000000000000000000001F
-:10D11000000000000000000000000000000000000F
-:10D1200000000000000000000000000000000000FF
-:10D1300000000000000000000000000000000000EF
-:10D1400000000000000000000000000000000000DF
-:10D1500000000000000000000000000000000000CF
-:10D1600000000000000000000000000000000000BF
-:10D1700000000000000000000000000000000000AF
-:10D18000000000000000000000000000000000009F
-:10D19000000000000000000000000000000000008F
-:10D1A000000000000000000000000000000000007F
-:10D1B000000000000000000000000000000000006F
-:10D1C000000000000000000000000000000000005F
-:10D1D000000000000000000000000000000000004F
-:10D1E000000000000000000000000000000000003F
-:10D1F000000000000000000000000000000000002F
-:10D20000000000000000000000000000000000001E
-:10D21000000000000000000000000000000000000E
-:10D2200000000000000000000000000000000000FE
-:10D2300000000000000000000000000000000000EE
-:10D2400000000000000000000000000000000000DE
-:10D2500000000000000000000000000000000000CE
-:10D2600000000000000000000000000000000000BE
-:10D2700000000000000000000000000000000000AE
-:10D28000000000000000000000000000000000009E
-:10D29000000000000000000000000000000000008E
-:10D2A000000000000000000000000000000000007E
-:10D2B000000000000000000000000000000000006E
-:10D2C000000000000000000000000000000000005E
-:10D2D000000000000000000000000000000000004E
-:10D2E000000000000000000000000000000000003E
-:10D2F000000000000000000000000000000000002E
-:10D30000000000000000000000000000000000001D
-:10D31000000000000000000000000000000000000D
-:10D3200000000000000000000000000000000000FD
-:10D3300000000000000000000000000000000000ED
-:10D3400000000000000000000000000000000000DD
-:10D3500000000000000000000000000000000000CD
-:10D3600000000000000000000000000000000000BD
-:10D3700000000000000000000000000000000000AD
-:10D38000000000000000000000000000000000009D
-:10D39000000000000000000000000000000000008D
-:10D3A000000000000000000000000000000000007D
-:10D3B000000000000000000000000000000000006D
-:10D3C000000000000000000000000000000000005D
-:10D3D000000000000000000000000000000000004D
-:10D3E000000000000000000000000000000000003D
-:10D3F000000000000000000000000000000000002D
-:10D40000000000000000000000000000000000001C
-:10D41000000000000000000000000000000000000C
-:10D4200000000000000000000000000000000000FC
-:10D4300000000000000000000000000000000000EC
-:10D4400000000000000000000000000000000000DC
-:10D4500000000000000000000000000000000000CC
-:10D4600000000000000000000000000000000000BC
-:10D4700000000000000000000000000000000000AC
-:10D48000000000000000000000000000000000009C
-:10D49000000000000000000000000000000000008C
-:10D4A000000000000000000000000000000000007C
-:10D4B000000000000000000000000000000000006C
-:10D4C000000000000000000000000000000000005C
-:10D4D000000000000000000000000000000000004C
-:10D4E000000000000000000000000000000000003C
-:10D4F000000000000000000000000000000000002C
-:10D50000000000000000000000000000000000001B
-:10D51000000000000000000000000000000000000B
-:10D5200000000000000000000000000000000000FB
-:10D5300000000000000000000000000000000000EB
-:10D5400000000000000000000000000000000000DB
-:10D5500000000000000000000000000000000000CB
-:10D5600000000000000000000000000000000000BB
-:10D5700000000000000000000000000000000000AB
-:10D58000000000000000000000000000000000009B
-:10D59000000000000000000000000000000000008B
-:10D5A000000000000000000000000000000000007B
-:10D5B000000000000000000000000000000000006B
-:10D5C000000000000000000000000000000000005B
-:10D5D000000000000000000000000000000000004B
-:10D5E000000000000000000000000000000000003B
-:10D5F000000000000000000000000000000000002B
-:10D60000000000000000000000000000000000001A
-:10D61000000000000000000000000000000000000A
-:10D6200000000000000000000000000000000000FA
-:10D6300000000000000000000000000000000000EA
-:10D6400000000000000000000000000000000000DA
-:10D6500000000000000000000000000000000000CA
-:10D6600000000000000000000000000000000000BA
-:10D6700000000000000000000000000000000000AA
-:10D68000000000000000000000000000000000009A
-:10D69000000000000000000000000000000000008A
-:10D6A000000000000000000000000000000000007A
-:10D6B000000000000000000000000000000000006A
-:10D6C000000000000000000000000000000000005A
-:10D6D000000000000000000000000000000000004A
-:10D6E000000000000000000000000000000000003A
-:10D6F000000000000000000000000000000000002A
-:10D700000000000000000000000000000000000019
-:10D710000000000000000000000000000000000009
-:10D7200000000000000000000000000000000000F9
-:10D7300000000000000000000000000000000000E9
-:10D7400000000000000000000000000000000000D9
-:10D7500000000000000000000000000000000000C9
-:10D7600000000000000000000000000000000000B9
-:10D7700000000000000000000000000000000000A9
-:10D780000000000000000000000000000000000099
-:10D790000000000000000000000000000000000089
-:10D7A0000000000000000000000000000000000079
-:10D7B0000000000000000000000000000000000069
-:10D7C0000000000000000000000000000000000059
-:10D7D0000000000000000000000000000000000049
-:10D7E0000000000000000000000000000000000039
-:10D7F0000000000000000000000000000000000029
-:10D800000000000000000000000000000000000018
-:10D810000000000000000000000000000000000008
-:10D8200000000000000000000000000000000000F8
-:10D8300000000000000000000000000000000000E8
-:10D8400000000000000000000000000000000000D8
-:10D8500000000000000000000000000000000000C8
-:10D8600000000000000000000000000000000000B8
-:10D8700000000000000000000000000000000000A8
-:10D880000000000000000000000000000000000098
-:10D890000000000000000000000000000000000088
-:10D8A0000000000000000000000000000000000078
-:10D8B0000000000000000000000000000000000068
-:10D8C0000000000000000000000000000000000058
-:10D8D0000000000000000000000000000000000048
-:10D8E0000000000000000000000000000000000038
-:10D8F0000000000000000000000000000000000028
-:10D900000000000000000000000000000000000017
-:10D910000000000000000000000000000000000007
-:10D9200000000000000000000000000000000000F7
-:10D9300000000000000000000000000000000000E7
-:10D9400000000000000000000000000000000000D7
-:10D9500000000000000000000000000000000000C7
-:10D9600000000000000000000000000000000000B7
-:10D9700000000000000000000000000000000000A7
-:10D980000000000000000000000000000000000097
-:10D990000000000000000000000000000000000087
-:10D9A0000000000000000000000000000000000077
-:10D9B0000000000000000000000000000000000067
-:10D9C0000000000000000000000000000000000057
-:10D9D0000000000000000000000000000000000047
-:10D9E0000000000000000000000000000000000037
-:10D9F0000000000000000000000000000000000027
-:10DA00000000000000000000000000000000000016
-:10DA10000000000000000000000000000000000006
-:10DA200000000000000000000000000000000000F6
-:10DA300000000000000000000000000000000000E6
-:10DA400000000000000000000000000000000000D6
-:10DA500000000000000000000000000000000000C6
-:10DA600000000000000000000000000000000000B6
-:10DA700000000000000000000000000000000000A6
-:10DA80000000000000000000000000000000000096
-:10DA90000000000000000000000000000000000086
-:10DAA0000000000000000000000000000000000076
-:10DAB0000000000000000000000000000000000066
-:10DAC0000000000000000000000000000000000056
-:10DAD0000000000000000000000000000000000046
-:10DAE0000000000000000000000000000000000036
-:10DAF0000000000000000000000000000000000026
-:10DB00000000000000000000000000000000000015
-:10DB10000000000000000000000000000000000005
-:10DB200000000000000000000000000000000000F5
-:10DB300000000000000000000000000000000000E5
-:10DB400000000000000000000000000000000000D5
-:10DB500000000000000000000000000000000000C5
-:10DB600000000000000000000000000000000000B5
-:10DB700000000000000000000000000000000000A5
-:10DB80000000000000000000000000000000000095
-:10DB90000000000000000000000000000000000085
-:10DBA0000000000000000000000000000000000075
-:10DBB0000000000000000000000000000000000065
-:10DBC0000000000000000000000000000000000055
-:10DBD0000000000000000000000000000000000045
-:10DBE0000000000000000000000000000000000035
-:10DBF0000000000000000000000000000000000025
-:10DC00000000000000000000000000000000000014
-:10DC10000000000000000000000000000000000004
-:10DC200000000000000000000000000000000000F4
-:10DC300000000000000000000000000000000000E4
-:10DC400000000000000000000000000000000000D4
-:10DC500000000000000000000000000000000000C4
-:10DC600000000000000000000000000000000000B4
-:10DC700000000000000000000000000000000000A4
-:10DC80000000000000000000000000000000000094
-:10DC90000000000000000000000000000000000084
-:10DCA0000000000000000000000000000000000074
-:10DCB0000000000000000000000000000000000064
-:10DCC0000000000000000000000000000000000054
-:10DCD0000000000000000000000000000000000044
-:10DCE0000000000000000000000000000000000034
-:10DCF0000000000000000000000000000000000024
-:10DD00000000000000000000000000000000000013
-:10DD10000000000000000000000000000000000003
-:10DD200000000000000000000000000000000000F3
-:10DD300000000000000000000000000000000000E3
-:10DD400000000000000000000000000000000000D3
-:10DD500000000000000000000000000000000000C3
-:10DD600000000000000000000000000000000000B3
-:10DD700000000000000000000000000000000000A3
-:10DD80000000000000000000000000000000000093
-:10DD90000000000000000000000000000000000083
-:10DDA0000000000000000000000000000000000073
-:10DDB0000000000000000000000000000000000063
-:10DDC0000000000000000000000000000000000053
-:10DDD0000000000000000000000000000000000043
-:10DDE0000000000000000000000000000000000033
-:10DDF0000000000000000000000000000000000023
-:10DE00000000000000000000000000000000000012
-:10DE10000000000000000000000000000000000002
-:10DE200000000000000000000000000000000000F2
-:10DE300000000000000000000000000000000000E2
-:10DE400000000000000000000000000000000000D2
-:10DE500000000000000000000000000000000000C2
-:10DE600000000000000000000000000000000000B2
-:10DE700000000000000000000000000000000000A2
-:10DE80000000000000000000000000000000000092
-:10DE90000000000000000000000000000000000082
-:10DEA0000000000000000000000000000000000072
-:10DEB0000000000000000000000000000000000062
-:10DEC0000000000000000000000000000000000052
-:10DED0000000000000000000000000000000000042
-:10DEE0000000000000000000000000000000000032
-:10DEF0000000000000000000000000000000000022
-:10DF00000000000000000000000000000000000011
-:10DF10000000000000000000000000000000000001
-:10DF200000000000000000000000000000000000F1
-:10DF300000000000000000000000000000000000E1
-:10DF400000000000000000000000000000000000D1
-:10DF500000000000000000000000000000000000C1
-:10DF600000000000000000000000000000000000B1
-:10DF700000000000000000000000000000000000A1
-:10DF80000000000000000000000000000000000091
-:10DF90000000000000000000000000000000000081
-:10DFA0000000000000000000000000000000000071
-:10DFB0000000000000000000000000000000000061
-:10DFC0000000000000000000000000000000000051
-:10DFD0000000000000000000000000000000000041
-:10DFE0000000000000000000000000000000000031
-:10DFF0000000000000000000000000000000000021
-:10E000000000000000000000000000000000000010
-:10E010000000000000000000000000000000000000
-:10E0200000000000000000000000000000000000F0
-:10E0300000000000000000000000000000000000E0
-:10E0400000000000000000000000000000000000D0
-:10E0500000000000000000000000000000000000C0
-:10E0600000000000000000000000000000000000B0
-:10E0700000000000000000000000000000000000A0
-:10E080000000000000000000000000000000000090
-:10E090000000000000000000000000000000000080
-:10E0A0000000000000000000000000000000000070
-:10E0B0000000000000000000000000000000000060
-:10E0C0000000000000000000000000000000000050
-:10E0D0000000000000000000000000000000000040
-:10E0E0000000000000000000000000000000000030
-:10E0F0000000000000000000000000000000000020
-:10E10000000000000000000000000000000000000F
-:10E1100000000000000000000000000000000000FF
-:10E1200000000000000000000000000000000000EF
-:10E1300000000000000000000000000000000000DF
-:10E1400000000000000000000000000000000000CF
-:10E1500000000000000000000000000000000000BF
-:10E1600000000000000000000000000000000000AF
-:10E17000000000000000000000000000000000009F
-:10E18000000000000000000000000000000000008F
-:10E19000000000000000000000000000000000007F
-:10E1A000000000000000000000000000000000006F
-:10E1B000000000000000000000000000000000005F
-:10E1C000000000000000000000000000000000004F
-:10E1D000000000000000000000000000000000003F
-:10E1E000000000000000000000000000000000002F
-:10E1F000000000000000000000000000000000809F
-:10E20000000000000000000000000000000000000E
-:10E2100000000000000000000000000000000000FE
-:10E220000000000A000000000000000000000000E4
-:10E2300010000003000000000000000D0000000DB1
-:10E240003C020801244295A03C030801246397DCAA
-:10E25000AC4000000043202B1480FFFD244200044A
-:10E260003C1D080037BD9FFC03A0F0213C100800B6
-:10E27000261032103C1C0801279C95A00E0012BEEF
-:10E28000000000000000000D3C02800030A5FFFFF0
-:10E2900030C600FF344301803C0880008D0901B87E
-:10E2A0000520FFFE00000000AC6400002404000212
-:10E2B000A4650008A066000AA064000BAC67001803
-:10E2C0003C03100003E00008AD0301B83C0560000A
-:10E2D0008CA24FF80440FFFE00000000ACA44FC029
-:10E2E0003C0310003C040200ACA44FC403E000084F
-:10E2F000ACA34FF89486000C00A050212488001491
-:10E3000000062B0200051080004448210109182B4B
-:10E310001060001100000000910300002C6400094F
-:10E320005080000991190001000360803C0D080134
-:10E3300025AD9234018D58218D67000000E0000862
-:10E340000000000091190001011940210109302B42
-:10E3500054C0FFF29103000003E000080000102108
-:10E360000A000CCC25080001910F0001240E000AC0
-:10E3700015EE00400128C8232F38000A1700003D81
-:10E38000250D00028D580000250F0006370E0100F4
-:10E39000AD4E0000910C000291AB000191A400026F
-:10E3A00091A60003000C2E00000B3C0000A71025D6
-:10E3B00000041A000043C8250326C025AD580004F8
-:10E3C000910E000691ED000191E7000291E5000336
-:10E3D000000E5E00000D6400016C30250007220075
-:10E3E00000C41025004518252508000A0A000CCC99
-:10E3F000AD430008910F000125040002240800022B
-:10E4000055E80001012020210A000CCC00804021A9
-:10E41000910C0001240B0003158B00160000000076
-:10E420008D580000910E000225080003370D0008EA
-:10E43000A14E00100A000CCCAD4D00009119000156
-:10E44000240F0004172F000B0000000091070002AA
-:10E45000910400038D43000000072A0000A410254A
-:10E460003466000425080004AD42000C0A000CCC00
-:10E47000AD46000003E000082402000127BDFFE8CC
-:10E48000AFBF0014AFB000100E00164E0080802108
-:10E490003C0480083485008090A600052403FFFE1C
-:10E4A0000200202100C310248FBF00148FB0001081
-:10E4B000A0A200050A00165827BD001827BDFFE8D6
-:10E4C000AFB00010AFBF00140E000FD40080802149
-:10E4D0003C06800834C5008090A40000240200504F
-:10E4E000308300FF106200073C09800002002021F9
-:10E4F0008FBF00148FB00010AD2001800A00108F74
-:10E5000027BD0018240801003C07800002002021DC
-:10E510008FBF00148FB00010ACE801800A00108F8C
-:10E5200027BD001827BDFF783C058008AFBE0080DE
-:10E53000AFB7007CAFB3006CAFB10064AFBF008475
-:10E54000AFB60078AFB50074AFB40070AFB200687A
-:10E55000AFB0006034A600803C0580008CB201287A
-:10E5600090C400098CA701043C020001309100FF17
-:10E5700000E218240000B8210000F021106000071C
-:10E58000000098213C0908008D2931F02413000176
-:10E59000252800013C010800AC2831F0ACA0008423
-:10E5A00090CC0005000C5827316A0001154000721C
-:10E5B000AFA0005090CD00002406002031A400FF41
-:10E5C00010860018240E0050108E009300000000EA
-:10E5D0003C1008008E1000DC260F00013C010800F2
-:10E5E000AC2F00DC0E0016C7000000000040182110
-:10E5F0008FBF00848FBE00808FB7007C8FB60078FD
-:10E600008FB500748FB400708FB3006C8FB2006848
-:10E610008FB100648FB000600060102103E000083B
-:10E6200027BD00880000000D3C1F8000AFA0003017
-:10E6300097E501168FE201043C04002030B9FFFF8A
-:10E64000004438240007182B00033140AFA60030E7
-:10E650008FF5010437F80C003C1600400338802188
-:10E6600002B6A02434C40040128000479215000D69
-:10E6700032A800201500000234860080008030217E
-:10E6800014C0009FAFA600303C0D800835A6008066
-:10E6900090CC0008318B0040516000063C06800899
-:10E6A000240E0004122E00A8240F0012122F003294
-:10E6B0003C06800834C401003C0280009447011AE3
-:10E6C0009619000E909F00088E18000830E3FFFF97
-:10E6D00003F9B00432B40004AFB6005CAFA3005835
-:10E6E0008E1600041280002EAFB8005434C3008090
-:10E6F000906800083105004014A0002500000000CB
-:10E700008C70005002D090230640000500000000ED
-:10E710008C71003402D1A82306A201678EE20008A2
-:10E72000126000063C1280003C1508008EB531F4E2
-:10E7300026B600013C010800AC3631F4AE4000447E
-:10E74000240300018FBF00848FBE00808FB7007C40
-:10E750008FB600788FB500748FB400708FB3006CE3
-:10E760008FB200688FB100648FB00060006010212C
-:10E7700003E0000827BD00880E000D2800002021BE
-:10E780000A000D75004018210A000D9500C02021D7
-:10E790000E00171702C020211440FFE10000000006
-:10E7A0003C0B8008356400808C8A003402CA482300
-:10E7B0000520001D000000003C1E08008FDE310017
-:10E7C00027D700013C010800AC3731001260000679
-:10E7D000024020213C1408008E9431F42690000160
-:10E7E0003C010800AC3031F40E00164E3C1E80088F
-:10E7F00037CD008091B700250240202136EE00047D
-:10E800000E001658A1AE00250E000CAC02402021CF
-:10E810000A000DCA240300013C17080126F796A040
-:10E820000A000D843C1F80008C86003002C66023E5
-:10E830001980000C2419000C908F004F3C14080024
-:10E840008E94310032B500FC35ED0001268E0001BA
-:10E850003C010800AC2E3100A08D004FAFA0005845
-:10E860002419000CAFB900308C9800300316A02397
-:10E870001A80010B8FA300580074F82A17E0FFD309
-:10E88000000000001074002A8FA5005802D4B021A7
-:10E8900000B410233044FFFFAFA4005832A8000298
-:10E8A0001100002E32AB00103C15800836B00080FD
-:10E8B0009216000832D30040526000FB8EE200083E
-:10E8C0000E00164E02402021240A0018A20A000958
-:10E8D000921100052409FFFE024020210229902404
-:10E8E0000E001658A2120005240400390000282149
-:10E8F0000E0016F2240600180A000DCA24030001B7
-:10E9000092FE000C3C0A800835490080001EBB00C6
-:10E910008D27003836F10081024020213225F08118
-:10E920000E000C9B30C600FF0A000DC10000000065
-:10E930003AA7000130E300011460FFA402D4B02123
-:10E940000A000E1D00000000024020210E001734B6
-:10E95000020028210A000D75004018211160FF7087
-:10E960003C0F80083C0D800835EE00808DC40038D7
-:10E970008FA300548DA60004006660231D80FF68ED
-:10E98000000000000064C02307020001AFA400548F
-:10E990003C1F08008FFF31E433F9000113200015FC
-:10E9A0008FAC00583C07800094E3011A10600012FD
-:10E9B0003C0680080E002161024020213C03080132
-:10E9C000906396D13064000214800145000000007D
-:10E9D000306C0004118000078FAC0058306600FBDB
-:10E9E0003C010801A02696D132B500FCAFA000582A
-:10E9F0008FAC00583C06800834D30080AFB40018B8
-:10EA0000AFB60010AFAC00143C088000950B01209D
-:10EA10008E6F0030966A005C8FA3005C8FBF003061
-:10EA20003169FFFF3144FFFF8FAE005401341021E4
-:10EA3000350540000064382B0045C82103E7C02598
-:10EA4000AFB90020AFAF0028AFB80030AFAF00249F
-:10EA5000AFA0002CAFAE0034926D000831B40008B6
-:10EA6000168000BB020020218EE200040040F8095D
-:10EA700027A400108FAF003031F300025660000170
-:10EA800032B500FE3C048008349F008093F90008F2
-:10EA900033380040530000138FA400248C850004F9
-:10EAA0008FA7005410A700D52404001432B0000131
-:10EAB0001200000C8FA400242414000C1234011A3C
-:10EAC0002A2D000D11A001022413000E240E000AAD
-:10EAD000522E0001241E00088FAF002425E40001FF
-:10EAE000AFA400248FAA00143C0B80083565008079
-:10EAF000008A48218CB10030ACA9003090A4004EAF
-:10EB00008CA700303408FFFF0088180400E3F821C8
-:10EB1000ACBF00348FA600308FB900548FB8005CB2
-:10EB200030C200081040000B033898218CAC002044
-:10EB3000119300D330C600FF92EE000C8FA7003473
-:10EB400002402021000E6B0035B400800E000C9BAB
-:10EB50003285F0803C028008345000808E0F0030F7
-:10EB600001F1302318C00097264800803C070800B8
-:10EB70008CE731E42404FF80010418243118007F5D
-:10EB80003C1F80003C19800430F10001AFE300908D
-:10EB900012200006031928213C030801906396D136
-:10EBA00030690008152000C6306A00F73C10800864
-:10EBB00036040080908C004F318B000115600042BC
-:10EBC000000000003C0608008CC6319830CE0010D2
-:10EBD00051C0004230F9000190AF006B55E0003F9A
-:10EBE00030F9000124180001A0B8006B3C1180002E
-:10EBF0009622007A24470064A48700123C0D800806
-:10EC000035A5008090B40008329000401600000442
-:10EC10003C03800832AE000115C0008B00000000EC
-:10EC2000346400808C86002010D3000A3463010015
-:10EC30008C67000002C7782319E000978FBF00544B
-:10EC4000AC93002024130001AC760000AFB3005059
-:10EC5000AC7F000417C0004E000000008FA90050D8
-:10EC60001520000B000000003C030801906396D1C2
-:10EC7000306A00011140002E8FAB0058306400FE56
-:10EC80003C010801A02496D10A000D75000018214E
-:10EC90000E000CAC024020210A000F1300000000FF
-:10ECA0000A000E200000A0210040F80924040017EB
-:10ECB0000A000DCA240300010040F80924040016CC
-:10ECC0000A000DCA240300019094004F240DFFFE9A
-:10ECD000028D2824A085004F30F900011320000682
-:10ECE0003C0480083C030801906396D1307F0010FB
-:10ECF00017E00051306800EF34900080240A0001D2
-:10ED0000024020210E00164EA60A00129203002592
-:10ED100024090001AFA90050346200010240202103
-:10ED20000E001658A20200250A000EF93C0D8008BC
-:10ED30001160FE83000018218FA5003030AC000464
-:10ED40001180FE2C8FBF00840A000DCB240300012C
-:10ED500027A500380E000CB6AFA000385440FF4382
-:10ED60008EE200048FB40038329001005200FF3F61
-:10ED70008EE200048FA3003C8E6E0058006E682364
-:10ED800005A3FF39AE6300580A000E948EE200041A
-:10ED90000E00164E024020213C038008346800809B
-:10EDA000024020210E001658A11E000903C0302188
-:10EDB000240400370E0016F2000028210A000F116B
-:10EDC0008FA900508FAB00185960FF8D3C0D800853
-:10EDD0000E00164E02402021920C00252405000151
-:10EDE000AFA5005035820004024020210E001658C5
-:10EDF000A20200250A000EF93C0D800812240059D9
-:10EE00002A2300151060004D240900162408000C68
-:10EE10005628FF2732B000013C0A8008914C001BA5
-:10EE20002406FFBD241E000E01865824A14B001BA2
-:10EE30000A000EA532B000013C010801A02896D1BD
-:10EE40000A000EF93C0D80088CB500308EFE0008DB
-:10EE50002404001826B6000103C0F809ACB600303F
-:10EE60003C030801906396D13077000116E0FF81E2
-:10EE7000306A00018FB200300A000D753243000481
-:10EE80003C1080009605011A50A0FF2B34C60010DC
-:10EE90000A000EC892EE000C8C6200001456FF6D42
-:10EEA000000000008C7800048FB9005403388823D8
-:10EEB0000621FF638FBF00540A000F0E0000000000
-:10EEC0003C010801A02A96D10A000F3030F9000158
-:10EED0001633FF028FAF00240A000EB0241E00106C
-:10EEE0000E00164E024020213C0B80083568008041
-:10EEF00091090025240A0001AFAA0050353300040F
-:10EF0000024020210E001658A11300253C050801DF
-:10EF100090A596D130A200FD3C010801A02296D117
-:10EF20000A000E6D004018212411000E53D1FEEA94
-:10EF3000241E00100A000EAF241E00165629FEDC07
-:10EF400032B000013C0A8008914C001B2406FFBD32
-:10EF5000241E001001865824A14B001B0A000EA598
-:10EF600032B000010A000EA4241E00123C038000EF
-:10EF70008C6201B80440FFFE24040800AC6401B8B0
-:10EF800003E000080000000030A5FFFF30C6FFFFCF
-:10EF90003C0780008CE201B80440FFFE34EA0180A7
-:10EFA000AD440000ACE400203C0480089483004899
-:10EFB0003068FFFF11000016AF88000824AB001274
-:10EFC000010B482B512000133C04800034EF01005A
-:10EFD00095EE00208F890000240D001A31CCFFFF30
-:10EFE00031274000A14D000B10E000362583FFFEC5
-:10EFF0000103C02B170000348F9900048F88000490
-:10F00000A5430014350700010A001003AF87000470
-:10F010003C04800024030003348201808F890000B7
-:10F020008F870004A043000B3C088000350C018052
-:10F03000A585000EA585001A8F85000C30EB800099
-:10F04000A5890010AD850028A58600081160000F75
-:10F050008F85001435190100972A00163158FFFCDE
-:10F06000270F000401E870218DCD400031A6FFFF7D
-:10F0700014C000072403BFFF3C02FFFF34487FFF9A
-:10F0800000E83824AF8700048F8500142403BFFFF5
-:10F090003C04800000E3582434830180A46B0026E4
-:10F0A000AC69002C10A0000300054C02A465001000
-:10F0B000A46900263C071000AC8701B803E00008F3
-:10F0C000000000008F990004240AFFFE032A382460
-:10F0D0000A001003AF87000427BDFFE88FA20028B5
-:10F0E00030A5FFFF30C6FFFFAFBF0010AF87000C99
-:10F0F000AF820014AF8000040E000FDBAF80000071
-:10F100008FBF001027BD001803E00008AF80001477
-:10F110003C06800034C4007034C701008C8A0000B3
-:10F1200090E500128F84000027BDFFF030A300FFA0
-:10F13000000318823082400010400037246500032D
-:10F140000005C8800326C0218F0E4000246F0004F4
-:10F15000000F6880AFAE000001A660218D8B4000DB
-:10F16000AFAB000494E900163128FFFC01063821FA
-:10F170008CE64000AFA600088FA9000800003021EF
-:10F18000000028213C07080024E701000A0010675E
-:10F19000240800089059000024A500012CAC000CA4
-:10F1A0000079C0210018788001E770218DCD000022
-:10F1B0001180000600CD302603A5102114A8FFF50C
-:10F1C00000051A005520FFF4905900003C0480000F
-:10F1D000348700703C0508008CA531048CE30000E6
-:10F1E0002CA2002010400009006A38230005488046
-:10F1F0003C0B0800256B3108012B402124AA00019B
-:10F20000AD0700003C010800AC2A310400C0102109
-:10F2100003E0000827BD0010308220001040000BE2
-:10F2200000055880016648218D24400024680004B0
-:10F2300000083880AFA4000000E618218C6540006B
-:10F24000AFA000080A001057AFA500040000000D91
-:10F250000A0010588FA9000827BDFFE03C07800076
-:10F2600034E60100AFBF001CAFB20018AFB100140C
-:10F27000AFB0001094C5000E8F87000030A4FFFFD0
-:10F280002483000430E2400010400010AF830028C7
-:10F290003C09002000E940241100000D30EC800002
-:10F2A0008F8A0004240BBFFF00EB38243543100085
-:10F2B000AF87000030F220001640000B3C1900041C
-:10F2C000241FFFBF0A0010B7007F102430EC80001D
-:10F2D000158000423C0E002030F220001240FFF862
-:10F2E0008F8300043C19000400F9C0241300FFF5CB
-:10F2F000241FFFBF34620040AF82000430E20100EF
-:10F300001040001130F010008F83002C10600006B8
-:10F310003C0F80003C05002000E52024148000C044
-:10F320003C0800043C0F800035EE010095CD001E26
-:10F3300095CC001C31AAFFFF000C5C00014B482556
-:10F34000AF89000C30F010001200000824110001F9
-:10F3500030F100201620008B3C18100000F890249B
-:10F36000164000823C040C002411000130E801002A
-:10F370001500000B3C0900018F85000430A94000F6
-:10F38000152000073C0900013C0C1F0100EC58242B
-:10F390003C0A1000116A01183C1080003C09000171
-:10F3A00000E9302410C000173C0B10003C18080086
-:10F3B0008F1800243307000214E0014024030001E9
-:10F3C0008FBF001C8FB200188FB100148FB00010D7
-:10F3D0000060102103E0000827BD002000EE682433
-:10F3E00011A0FFBE30F220008F8F00043C11FFFF00
-:10F3F00036307FFF00F0382435E380000A0010A685
-:10F40000AF87000000EB102450400065AF8000245F
-:10F410008F8C002C3C0D0F0000ED18241580008807
-:10F42000AF83001030E8010011000086938F0010B8
-:10F430003C0A0200106A00833C1280003650010032
-:10F44000920500139789002A3626000230AF00FF8C
-:10F4500025EE0004000E19C03C0480008C9801B811
-:10F460000700FFFE34880180AD0300003C198008CE
-:10F47000AC830020973100483225FFFF10A0015CCB
-:10F48000AF8500082523001200A3F82B53E0015993
-:10F490008F850004348D010095AC00202402001AF1
-:10F4A00030E44000318BFFFFA102000B108001927D
-:10F4B0002563FFFE00A3502B154001908F8F0004A1
-:10F4C000A50300148F88000435050001AF850004F2
-:10F4D0003C08800035190180A729000EA729001AD1
-:10F4E0008F89000C30B18000A7270010AF290028B9
-:10F4F000A72600081220000E3C04800035020100FF
-:10F50000944C0016318BFFFC256400040088182100
-:10F510008C7F400033E6FFFF14C000053C048000F0
-:10F520003C0AFFFF354D7FFF00AD2824AF85000466
-:10F53000240EBFFF00AE402434850180A4A800261D
-:10F54000ACA7002C3C071000AC8701B800001821C4
-:10F550008FBF001C8FB200188FB100148FB0001045
-:10F560000060102103E0000827BD00203C020BFFD3
-:10F5700000E41824345FFFFF03E3C82B5320FF7B14
-:10F58000241100013C0608008CC6002C24C5000193
-:10F590003C010800AC25002C0A0010D42411000501
-:10F5A0008F85002410A0002FAF80001090A30000D2
-:10F5B000146000792419000310A0002A30E601002D
-:10F5C00010C000CC8F860010241F000210DF00C97D
-:10F5D0008F8B000C3C0708008CE7003824E4FFFF09
-:10F5E00014E0000201641824000018213C0D0800FA
-:10F5F00025AD0038006D1021904C00048F85002847
-:10F6000025830004000321C030A5FFFF3626000239
-:10F610000E000FDB000000000A00114D0000182151
-:10F6200000E8302414C0FF403C0F80000E00103D65
-:10F63000000000008F8700000A0010CAAF82000C93
-:10F64000938F00103C18080127189620000F90C0D7
-:10F6500002588021AF9000248F85002414A0FFD38E
-:10F66000AF8F00103C0480008C86400030C5010044
-:10F6700010A000BC322300043C0C08008D8C002438
-:10F6800024120004106000C23190000D3C04800080
-:10F690008C8D40003402FFFF11A201003231FFFBCC
-:10F6A0008C884000310A01005540000124110010EF
-:10F6B00030EE080011C000BE2419FFFB8F9800280F
-:10F6C0002F0F03EF51E000010219802430E90100FF
-:10F6D00011200014320800018F87002C14E000FB79
-:10F6E0008F8C000C3C05800034AB0100917F00132F
-:10F6F00033E300FF246A00042403FFFE0203802496
-:10F70000000A21C012000002023230253226FFFF1B
-:10F710000E000FDB9785002A1200FF290000182138
-:10F72000320800011100000D32180004240E0001FF
-:10F73000120E0002023230253226FFFF9785002A82
-:10F740000E000FDB00002021240FFFFE020F80249B
-:10F750001200FF1B00001821321800045300FF188C
-:10F760002403000102323025241200045612000145
-:10F770003226FFFF9785002A0E000FDB24040100CC
-:10F780002419FFFB021988241220FF0D0000182104
-:10F790000A0010E9240300011079009C00003021C8
-:10F7A00090AD00012402000211A200BE30EA004028
-:10F7B00090B90001241800011338007F30E900409F
-:10F7C0008CA600049785002A00C020210E000FDBC4
-:10F7D0003626000200004021010018218FBF001CC6
-:10F7E0008FB200188FB100148FB00010006010218C
-:10F7F00003E0000827BD0020360F010095EE000C45
-:10F8000031CD020015A0FEE63C0900013C1880083D
-:10F81000971200489789002A362600023248FFFFD7
-:10F82000AF8800083C0380008C7101B80620FFFE01
-:10F83000346A0180AD4000001100008E3C0F800052
-:10F84000253F0012011FC82B1320008B240E00033C
-:10F85000346C0100958B00202402001A30E4400033
-:10F860003163FFFFA142000B108000A72463FFFE5D
-:10F870000103682B15A000A52408FFFE34A5000194
-:10F88000A5430014AF8500043C0480002412BFFF90
-:10F8900000B2802434850180A4A9000EA4A9001A16
-:10F8A000A4A60008A4B00026A4A700103C071000DE
-:10F8B000AC8701B80A00114D000018213C038000FC
-:10F8C00034640100949F000E3C1908008F3900D861
-:10F8D0002404008033E5FFFF273100013C010800CC
-:10F8E000AC3100D80E000FDB240600030A00114DD6
-:10F8F00000001821240A000210CA00598F85002830
-:10F900003C0308008C6300D0240E0001106E005EE2
-:10F910002CCF000C24D2FFFC2E5000041600002136
-:10F9200000002021241800021078001B2CD9000CA4
-:10F9300024DFFFF82FE900041520FF330000202109
-:10F9400030EB020051600004000621C054C00022C8
-:10F9500030A5FFFF000621C030A5FFFF0A00117D82
-:10F96000362600023C0908008D29002431300001B0
-:10F970005200FEF7000018219785002A3626000263
-:10F980000E000FDB000020210A00114D000018219D
-:10F990000A00119C241200021320FFE624DFFFF866
-:10F9A0000000202130A5FFFF0A00117D362600024D
-:10F9B0000A0011AC021980245120FF828CA6000499
-:10F9C0003C05080190A5962110A0FF7E24080001A7
-:10F9D0000A0011F0010018210E000FDB3226000191
-:10F9E0008F8600108F8500280A00124F000621C064
-:10F9F0008F8500043C18800024120003371001801A
-:10FA0000A212000B0A00112E3C08800090A30001F6
-:10FA1000241100011071FF70240800012409000264
-:10FA20005069000430E60040240800010A0011F08B
-:10FA30000100182150C0FFFD240800013C0C80008B
-:10FA4000358B01009563001094A40002307FFFFF06
-:10FA5000509FFF62010018210A001284240800014F
-:10FA60002CA803EF1100FE56240300010A001239EE
-:10FA700000000000240E000335EA0180A14E000BB7
-:10FA80000A00121C3C04800011E0FFA2000621C005
-:10FA900030A5FFFF0A00117D362600020A0011A5DD
-:10FAA000241100201140FFC63C1280003650010096
-:10FAB000960F001094AE000231E80FFF15C8FFC08A
-:10FAC000000000000A0011E690B900013C060800A1
-:10FAD0008CC6003824C4FFFF14C00002018418241F
-:10FAE000000018213C0D080025AD0038006D1021E4
-:10FAF0000A0011B6904300048F8F0004240EFFFE0D
-:10FB00000A00112C01EE28242408FFFE0A00121A14
-:10FB100000A8282427BDFFC8AFB00010AFBF003435
-:10FB20003C10600CAFBE0030AFB7002CAFB6002861
-:10FB3000AFB50024AFB40020AFB3001CAFB20018C3
-:10FB4000AFB100148E0E5000240FFF7F3C068000E2
-:10FB500001CF682435AC380C240B0003AE0C5000E8
-:10FB6000ACCB00083C010800AC2000200E001819A6
-:10FB7000000000003C0A0010354980513C06601628
-:10FB8000AE09537C8CC700003C0860148D0500A0B2
-:10FB90003C03FFFF00E320243C02535300051FC237
-:10FBA0001482000634C57C000003A08002869821E0
-:10FBB0008E7200043C116000025128218CBF007C31
-:10FBC0008CA200783C1E600037C420203C05080150
-:10FBD00024A59264AF820018AF9F001C0E0016DDB2
-:10FBE0002406000A3C190001273996203C01080030
-:10FBF000AC3931DC0E0020D4AF8000148FD7080858
-:10FC00002418FFF03C15570902F8B02412D502F56C
-:10FC100024040001AF80002C3C1480003697018042
-:10FC20003C1E080127DE9624369301008E900000CA
-:10FC30003205000310A0FFFD3207000110E000882C
-:10FC4000320600028E7100283C048000AE91002034
-:10FC50008E6500048E66000000A0382100C040219F
-:10FC60008C8301B80460FFFE3C0B0010240A0800DE
-:10FC700000AB4824AC8A01B8552000E0240BBFFF3C
-:10FC80009675000E3C1208008E52002030AC4000E9
-:10FC900032AFFFFF264E000125ED00043C010800B5
-:10FCA000AC2E0020118000E8AF8D00283C18002009
-:10FCB00000B8B02412C000E530B980002408BFFFAE
-:10FCC00000A8382434C81000AF87000030E62000B8
-:10FCD00010C000E92409FFBF3C03000400E328240E
-:10FCE00010A00002010910243502004030EA010092
-:10FCF00011400010AF8200048F8B002C11600007B0
-:10FD00003C0D002000ED6024118000043C0F000435
-:10FD100000EF702411C00239000000009668001E38
-:10FD20009678001C3115FFFF0018B40002B690252C
-:10FD3000AF92000C30F910001320001324150001BD
-:10FD400030FF002017E0000A3C04100000E41024FB
-:10FD50001040000D3C0A0C003C090BFF00EA18247F
-:10FD60003525FFFF00A3302B10C0000830ED010047
-:10FD70003C0C08008D8C002C24150005258B0001FF
-:10FD80003C010800AC2B002C30ED010015A0000B4D
-:10FD90003C0500018F85000430AE400055C00007CF
-:10FDA0003C0500013C161F0100F690243C0F10009A
-:10FDB000124F01CE000000003C05000100E5302498
-:10FDC00010C000AF3C0C10003C1F08008FFF002447
-:10FDD00033E90002152000712403000100601021A6
-:10FDE000104000083C0680003C08800035180100E7
-:10FDF0008F0F00243C056020ACAF00140000000011
-:10FE00003C0680003C194000ACD9013800000000DD
-:10FE10005220001332060002262B0140262C0080BF
-:10FE2000240EFF80016E2024018E6824000D1940ED
-:10FE3000318A007F0004A9403172007F3C16200007
-:10FE400036C20002006A482502B2382500E2882541
-:10FE50000122F825ACDF0830ACD1083032060002B0
-:10FE600010C0FF723C188000370501408CA80000CC
-:10FE700024100040AF08002090AF000831E300706C
-:10FE8000107000D428790041532000082405006038
-:10FE9000241100201071000E3C0A40003C09800033
-:10FEA000AD2A01780A001304000000001465FFFB6E
-:10FEB0003C0A40000E001FF1000000003C0A400018
-:10FEC0003C098000AD2A01780A00130400000000FC
-:10FED00090A90009241F00048CA70000312800FF0E
-:10FEE000111F01B22503FFFA2C7200061240001404
-:10FEF0003C0680008CA9000494A4000A310500FF90
-:10FF000000095E022D6A00083086FFFF15400002DE
-:10FF10002567000424070003240C000910AC01FA33
-:10FF200028AD000A11A001DE2410000A240E0008EA
-:10FF300010AE0028000731C000C038213C06800008
-:10FF40008CD501B806A0FFFE34D20180AE47000078
-:10FF500034CB0140916E0008240300023C0A4000AB
-:10FF600031C400FF00046A0001A86025A64C000807
-:10FF7000A243000B9562000A3C0810003C09800077
-:10FF8000A64200108D670004AE470024ACC801B83B
-:10FF9000AD2A01780A001304000000003C0A80002A
-:10FFA000354401009483000E3C0208008C4200D8C6
-:10FFB000240400803065FFFF245500013C01080047
-:10FFC000AC3500D80E000FDB240600030A001370C6
-:10FFD000000018210009320230D900FF2418000166
-:10FFE0001738FFD5000731C08F910020262200016D
-:10FFF000AF8200200A0013C800C0382100CB2024A3
-:020000040001F9
-:10000000AF85000010800008AF860004240D87FF34
-:1000100000CD6024158000083C0E006000AE302446
-:1000200010C00005000000000E000D42000000009E
-:100030000A001371000000000E0016050000000009
-:100040000A0013710000000030B980005320FF1F28
-:10005000AF8500003C02002000A2F82453E0FF1B03
-:10006000AF8500003C07FFFF34E47FFF00A4382485
-:100070000A00132B34C880000A001334010910242D
-:1000800000EC58245160005AAF8000248F8D002C62
-:100090003C0E0F0000EE182415A00075AF83001071
-:1000A00030EF010011E00073939800103C12020041
-:1000B000107200703C06800034D9010093280013B0
-:1000C0009789002A36A60002311800FF271600047F
-:1000D000001619C03C0480008C8501B804A0FFFE06
-:1000E00034880180AD0300003C158008AC830020FB
-:1000F00096BF004833E5FFFF10A001BCAF850008A4
-:100100002523001200A3102B504001B98F85000455
-:10011000348D010095AC0020240B001A30E440001F
-:10012000318AFFFFA10B000B108001BA2543FFFEAF
-:1001300000A3702B15C001B88F9600048F8F0004A8
-:10014000A503001435E50001AF8500043C088000DC
-:1001500035150180A6A9000EA6A9001A8F89000CEA
-:1001600030BF8000A6A70010AEA90028A6A60008F0
-:1001700013E0000F3C0F8000350C0100958B00163A
-:10018000316AFFFC25440004008818218C6240007D
-:100190003046FFFF14C000072416BFFF3C0EFFFFD0
-:1001A00035CD7FFF00AD2824AF8500043C0F8000D3
-:1001B0002416BFFF00B6902435E50180A4B20026C6
-:1001C000ACA7002C3C071000ADE701B80A00137083
-:1001D000000018210E00165D000000003C0A4000DF
-:1001E0003C098000AD2A01780A00130400000000D9
-:1001F0008F85002410A00027AF80001090A300007E
-:10020000106000742409000310690101000030210E
-:1002100090AE0001240D000211CD014230EF0040EC
-:1002200090A90001241F0001113F000930E20040A5
-:100230008CA600049785002A00C020210E000FDB49
-:1002400036A60002000040210A00137001001821A8
-:100250005040FFF88CA600043C07080190E7962167
-:1002600010E0FFF4240800010A00137001001821B7
-:10027000939800103C1F080127FF96200018C8C063
-:10028000033F4021AF8800248F85002414A0FFDBAA
-:10029000AF9800103C0480008C86400030C50100FF
-:1002A00010A0008732AB00043C0C08008D8C0024A9
-:1002B00024160004156000033192000D241600027C
-:1002C0003C0480008C8E4000340DFFFF11CD0113E3
-:1002D00032B5FFFB8C984000330F010055E0000160
-:1002E0002415001030E80800110000382409FFFB35
-:1002F0008F9F00282FF903EF53200001024990241B
-:1003000030E2010010400014325F00018F87002CA2
-:1003100014E0010E8F8C000C3C0480003486010038
-:1003200090C5001330AA00FF25430004000321C03C
-:100330002419FFFE025990241240000202B6302513
-:1003400032A6FFFF0E000FDB9785002A1240FEA3A6
-:1003500000001821325F000113E0000D3247000455
-:10036000240900011249000202B6302532A6FFFF1F
-:100370009785002A0E000FDB000020212402FFFEDB
-:10038000024290241240FE950000182132470004DA
-:1003900050E0FE922403000102B63025241600042A
-:1003A0005656000132A6FFFF9785002A0E000FDB8C
-:1003B000240401002403FFFB0243A82412A0FE87AB
-:1003C000000018210A001370240300010A0014B968
-:1003D0000249902410A0FFAF30E5010010A00017E3
-:1003E0008F8600102403000210C300148F84000CB9
-:1003F0003C0608008CC6003824CAFFFF14C0000267
-:10040000008A1024000010213C0E080025CE003880
-:10041000004E682191AC00048F850028258B0004D4
-:10042000000B21C030A5FFFF36A600020E000FDB37
-:10043000000000000A00137000001821240F0002C1
-:1004400010CF0088241600013C0308008C6300D004
-:100450001076008D8F85002824D9FFFC2F280004FA
-:100460001500006300002021241F0002107F005DA2
-:100470002CC9000C24C3FFF82C6200041440FFE9CF
-:100480000000202130EA020051400004000621C093
-:1004900054C0000530A5FFFF000621C030A5FFFFB6
-:1004A0000A00150436A600020E000FDB32A600017A
-:1004B0008F8600108F8500280A001520000621C0B5
-:1004C0003C0A08008D4A0024315200015240FE438C
-:1004D000000018219785002A36A600020E000FDBC7
-:1004E000000020210A001370000018219668000CFB
-:1004F000311802005700FE313C0500013C1F800806
-:1005000097F900489789002A36A600023328FFFF92
-:10051000AF8800083C0380008C7501B806A0FFFE80
-:100520003C04800034820180AC400000110000B621
-:1005300024180003252A0012010A182B106000B2AB
-:1005400000000000966F00203C0E8000240D001A71
-:1005500031ECFFFF35CA018030EB4000A14D000BAC
-:10056000116000B02583FFFE0103902B164000AE02
-:100570002416FFFE34A50001A5430014AF85000436
-:100580002419BFFF00B94024A6E9000EA6E9001A0D
-:10059000A6E60008A6E80026A6E700103C07100023
-:1005A000AE8701B80A001370000018213C048000D7
-:1005B0008C8201B80440FFFE349601802415001C93
-:1005C000AEC70000A2D5000B3C071000AC8701B8F5
-:1005D0003C0A40003C098000AD2A01780A0013045F
-:1005E000000000005120FFA424C3FFF800002021D8
-:1005F00030A5FFFF0A00150436A600020E00103DCC
-:10060000000000008F8700000A001346AF82000C34
-:1006100090A30001241500011075FF0B24080001B0
-:10062000240600021066000430E2004024080001A5
-:100630000A001370010018215040FFFD240800013A
-:100640003C0C8000358B0100956A001094A40002D8
-:100650003143FFFF5083FDE1010018210A00158599
-:10066000240800018F8500282CB203EF1240FDDB27
-:10067000240300013C0308008C6300D02416000111
-:100680001476FF7624D9FFFC2CD8000C1300FF72DF
-:10069000000621C030A5FFFF0A00150436A600029F
-:1006A00010B00037240F000B14AFFE23000731C039
-:1006B000312600FF00065600000A4E0305220047BF
-:1006C00030C6007F0006F8C03C16080126D69620EA
-:1006D00003F68021A2000001A20000003C0F600090
-:1006E0008DF918202405000100C588040011302769
-:1006F0000326C024000731C000C03821ADF81820FF
-:100700000A0013C8A60000028F850020000731C030
-:1007100024A2FFFF0A0013F6AF8200200A0014B2E1
-:100720002415002011E0FECC3C1980003728010080
-:100730009518001094B6000233120FFF16D2FEC6B1
-:10074000000000000A00148290A900013C0B080080
-:100750008D6B0038256DFFFF15600002018D1024A0
-:10076000000010213C080800250800380048C0217E
-:10077000930F000425EE00040A0014C5000E21C0EA
-:1007800000065202241F00FF115FFDEB000731C07D
-:10079000000A20C03C0E080125CE9620008EA8211C
-:1007A000009E602100095C02240D00013C076000EE
-:1007B000A2AD0000AD860000A2AB00018CF21820B3
-:1007C00024030001014310040242B025ACF61820B6
-:1007D00000C038210A0013C8A6A900020A0015AA01
-:1007E000AF8000200A0012FFAF84002C8F85000428
-:1007F0003C1980002408000337380180A308000B4F
-:100800000A00144D3C088000A2F8000B0A00155A9B
-:100810002419BFFF8F9600042412FFFE0A00144B18
-:1008200002D228242416FFFE0A00155800B62824F8
-:100830003C038000346401008C85000030A2003E3F
-:100840001440000800000000AC6000488C870000E5
-:1008500030E607C010C0000500000000AC60004C8E
-:10086000AC60005003E0000824020001AC600054BA
-:10087000AC6000408C880000310438001080FFF923
-:10088000000000002402000103E00008AC60004406
-:100890003C0380008C6201B80440FFFE3467018095
-:1008A000ACE4000024080001ACE00004A4E500086A
-:1008B00024050002A0E8000A34640140A0E5000B12
-:1008C0009483000A14C00008A4E30010ACE00024E4
-:1008D0003C07800034E901803C041000AD20002872
-:1008E00003E00008ACE401B88C8600043C0410006E
-:1008F000ACE600243C07800034E90180AD200028EC
-:1009000003E00008ACE401B83C0680008CC201B8EA
-:100910000440FFFE34C7018024090002ACE400005B
-:10092000ACE40004A4E50008A0E9000A34C50140D5
-:10093000A0E9000B94A8000A3C041000A4E80010F1
-:10094000ACE000248CA30004ACE3002803E0000822
-:10095000ACC401B83C039000346200010082202541
-:100960003C038000AC6400208C65002004A0FFFEE6
-:100970000000000003E00008000000003C028000CE
-:10098000344300010083202503E00008AC4400202C
-:1009900027BDFFE03C098000AFBF0018AFB10014D5
-:1009A000AFB00010352801408D10000091040009FF
-:1009B0009107000891050008308400FF30E600FF31
-:1009C00000061A002C820081008330251040002A86
-:1009D00030A50080000460803C0D080125AD928C9C
-:1009E000018D58218D6A00000140000800000000C0
-:1009F0003C038000346201409445000A14A0001EAC
-:100A00008F91FCBC9227000530E6000414C0001A48
-:100A1000000000000E00164E02002021922A000560
-:100A200002002021354900040E001658A2290005B5
-:100A30009228000531040004148000020000000028
-:100A40000000000D922D0000240B002031AC00FFAF
-:100A5000158B00093C0580008CAE01B805C0FFFE77
-:100A600034B10180AE3000003C0F100024100005AE
-:100A7000A230000BACAF01B80000000D8FBF001812
-:100A80008FB100148FB0001003E0000827BD0020D4
-:100A90000200202100C028218FBF00188FB1001450
-:100AA0008FB00010240600010A00161D27BD00208B
-:100AB0000000000D0200202100C028218FBF001877
-:100AC0008FB100148FB00010000030210A00161DF5
-:100AD00027BD002014A0FFE8000000000200202134
-:100AE0008FBF00188FB100148FB0001000C02821F4
-:100AF0000A00163B27BD00203C0780008CEE01B8A1
-:100B000005C0FFFE34F00180241F0002A21F000B6D
-:100B100034F80140A60600089719000A3C0F10009F
-:100B2000A61900108F110004A6110012ACEF01B835
-:100B30000A0016998FBF001827BDFFE8AFBF00104D
-:100B40000E000FD4000000003C0280008FBF001098
-:100B500000002021AC4001800A00108F27BD001842
-:100B60003084FFFF30A5FFFF108000070000182130
-:100B7000308200011040000200042042006518216C
-:100B80001480FFFB0005284003E0000800601021EE
-:100B900010C00007000000008CA2000024C6FFFF68
-:100BA00024A50004AC82000014C0FFFB24840004D0
-:100BB00003E000080000000010A0000824A3FFFFCD
-:100BC000AC86000000000000000000002402FFFFCF
-:100BD0002463FFFF1462FFFA2484000403E000088A
-:100BE000000000003C03800027BDFFF83462018054
-:100BF000AFA20000308C00FF30AD00FF30CE00FF10
-:100C00003C0B80008D6401B80480FFFE00000000F2
-:100C10008FA900008D6801288FAA00008FA700000F
-:100C20008FA400002405000124020002A085000A10
-:100C30008FA30000359940003C051000A062000B16
-:100C40008FB800008FAC00008FA600008FAF0000AF
-:100C500027BD0008AD280000AD400004AD80002491
-:100C6000ACC00028A4F90008A70D0010A5EE0012E2
-:100C700003E00008AD6501B83C06800827BDFFE829
-:100C800034C50080AFBF001090A7000924020012F5
-:100C900030E300FF1062000B008030218CA8005070
-:100CA00000882023048000088FBF00108CAA003425
-:100CB000240400390000282100CA4823052000052B
-:100CC000240600128FBF00102402000103E0000878
-:100CD00027BD00180E0016F2000000008FBF0010A4
-:100CE0002402000103E0000827BD001827BDFFC84B
-:100CF000AFB20030AFB00028AFBF0034AFB1002CAE
-:100D000000A0802190A5000D30A6001010C000109A
-:100D1000008090213C0280088C4400048E0300086F
-:100D20001064000C30A7000530A6000510C0009329
-:100D3000240400018FBF00348FB200308FB1002C2B
-:100D40008FB000280080102103E0000827BD003884
-:100D500030A7000510E0000F30AB001210C00006F5
-:100D6000240400013C0980088E0800088D25000439
-:100D70005105009C240400388FBF00348FB200302E
-:100D80008FB1002C8FB000280080102103E00008F4
-:100D900027BD0038240A0012156AFFE6240400016A
-:100DA0000200202127A500100E000CB6AFA00010F5
-:100DB0001440007C3C19800837240080909800087B
-:100DC000331100081220000A8FA7001030FF010025
-:100DD00013E000A48FA300148C8600580066102333
-:100DE000044000043C0A8008AC8300588FA7001020
-:100DF0003C0A800835480080910900083124000829
-:100E00001480000224080003000040213C1F8008D9
-:100E100093F1001193F9001237E600808CCC005456
-:100E2000333800FF03087821322D00FF000F708057
-:100E300001AE282100AC582B1160006F00000000AB
-:100E400094CA005C8CC900543144FFFF0125102373
-:100E50000082182B14600068000000008CCB005446
-:100E60000165182330EC00041180006C000830800C
-:100E70008FA8001C0068102B1040006230ED0004A9
-:100E8000006610232C46008010C00002004088211C
-:100E9000241100800E00164E024020213C0D8008D7
-:100EA00035A6008024070001ACC7000C90C80008DC
-:100EB0000011484035A70100310C007FA0CC00088C
-:100EC0008E05000424AB0001ACCB0030A4D1005C43
-:100ED0008CCA003C9602000E01422021ACC40020C6
-:100EE0008CC3003C0069F821ACDF001C8E190004A3
-:100EF000ACF900008E180008ACF800048FB10010A7
-:100F0000322F000855E0004793A60020A0C0004EF5
-:100F100090D8004E2411FFDFA0F8000890CF000801
-:100F200001F17024A0CE00088E0500083C0B80085B
-:100F300035690080AD2500388D6A00148D2200309F
-:100F40002419005001422021AD24003491230000D7
-:100F5000307F00FF13F90036264F01000E001658AF
-:100F60000240202124040038000028210E0016F23F
-:100F70002406000A0A001757240400010E000D2859
-:100F8000000020218FBF00348FB200308FB1002CC1
-:100F90008FB00028004020210080102103E00008CD
-:100FA00027BD00388E0E00083C0F800835F0008009
-:100FB000AE0E005402402021AE0000300E00164E4E
-:100FC00000000000920D00250240202135AC0020D9
-:100FD0000E001658A20C00250E000CAC0240202179
-:100FE000240400382405008D0E0016F22406001299
-:100FF0000A0017572404000194C5005C0A001792E8
-:1010000030A3FFFF2407021811A0FF9E00E6102363
-:101010008FAE001C0A00179A01C610230A0017970A
-:101020002C620218A0E600080A0017C48E0500080A
-:101030002406FF8001E6C0243C118000AE38002861
-:101040008E0D000831E7007F3C0E800C00EE602121
-:10105000AD8D00E08E080008AF8C00380A0017D074
-:10106000AD8800E4AC800058908500082403FFF7A9
-:1010700000A33824A08700080A0017758FA7001066
-:101080003C05080024A560A83C04080024846FF4F3
-:101090003C020800244260B0240300063C01080121
-:1010A000AC2596A03C010801AC2496A43C010801A3
-:1010B000AC2296A83C010801A02396AC03E00008EE
-:1010C0000000000003E00008240200013C02800050
-:1010D000308800FF344701803C0680008CC301B893
-:1010E0000460FFFE000000008CC501282418FF806A
-:1010F0003C0D800A24AF010001F8702431EC007F20
-:10110000ACCE0024018D2021ACE50000948B00EAD8
-:101110003509600024080002316AFFFFACEA0004D0
-:1011200024020001A4E90008A0E8000BACE00024C0
-:101130003C071000ACC701B8AF84003803E00008DA
-:10114000AF85006C938800488F8900608F820038DB
-:1011500030C600FF0109382330E900FF01221821C1
-:1011600030A500FF2468008810C000020124382147
-:101170000080382130E400031480000330AA00030B
-:101180001140000D312B000310A0000900001021B8
-:1011900090ED0000244E000131C200FF0045602B9D
-:1011A000A10D000024E700011580FFF925080001CA
-:1011B00003E00008000000001560FFF300000000DD
-:1011C00010A0FFFB000010218CF80000245900043F
-:1011D000332200FF0045782BAD18000024E70004FF
-:1011E00015E0FFF92508000403E0000800000000F6
-:1011F00093850048938800588F8700600004320070
-:101200003103007F00E5102B30C47F001040000F39
-:10121000006428258F8400383C0980008C8A00EC0B
-:10122000AD2A00A43C03800000A35825AC6B00A0AD
-:101230008C6C00A00580FFFE000000008C6D00ACEF
-:10124000AC8D00EC03E000088C6200A80A00188254
-:101250008F840038938800593C0280000080502120
-:10126000310300FEA383005930ABFFFF30CC00FFF9
-:1012700030E7FFFF344801803C0980008D2401B82D
-:101280000480FFFE8F8D006C24180016AD0D000049
-:101290008D2201248F8D0038AD0200048D5900206D
-:1012A000A5070008240201C4A119000AA118000B17
-:1012B000952F01208D4E00088D4700049783005C18
-:1012C0008D59002401CF302100C7282100A32023FD
-:1012D0002418FFFFA504000CA50B000EA5020010AA
-:1012E000A50C0012AD190018AD18002495AF00E848
-:1012F0003C0B10002407FFF731EEFFFFAD0E002876
-:101300008DAC0084AD0C002CAD2B01B88D460020B7
-:1013100000C7282403E00008AD4500208F8800386E
-:101320000080582130E7FFFF910900D63C02800081
-:1013300030A5FFFF312400FF00041A00006750258C
-:1013400030C600FF344701803C0980008D2C01B875
-:101350000580FFFE8F82006C240F0017ACE20000B6
-:101360008D390124ACF900048D780020A4EA00082E
-:10137000241901C4A0F8000AA0EF000B9523012056
-:101380008D6E00088D6D00049784005C01C35021B0
-:10139000014D602101841023A4E2000CA4E5000E9D
-:1013A000A4F90010A4E60012ACE000148D7800242B
-:1013B000240DFFFFACF800188D0F007CACEF001C73
-:1013C0008D0E00783C0F1000ACEE0020ACED002438
-:1013D000950A00BE240DFFF73146FFFFACE600285A
-:1013E000950C00809504008231837FFF0003CA00C2
-:1013F0003082FFFF0322C021ACF8002CAD2F01B8D2
-:10140000950E00828D6A002000AE3021014D282407
-:10141000A506008203E00008AD6500203C028000C4
-:10142000344501803C0480008C8301B80460FFFED9
-:101430008F8A0044240600199549001C3128FFFFBB
-:10144000000839C0ACA70000A0A6000B3C051000A6
-:1014500003E00008AC8501B88F87004C0080402174
-:1014600030C400FF3C0680008CC201B80440FFFE7F
-:101470008F89006C9383006834996000ACA90000E8
-:10148000A0A300058CE20010240F00022403FFF744
-:10149000A4A20006A4B900088D180020A0B8000A74
-:1014A000A0AF000B8CEE0000ACAE00108CED000481
-:1014B000ACAD00148CEC001CACAC00248CEB002018
-:1014C000ACAB00288CEA002C3C071000ACAA002C26
-:1014D0008D090024ACA90018ACC701B88D05002007
-:1014E00000A3202403E00008AD0400208F8600380C
-:1014F00027BDFFE0AFB10014AFBF0018AFB00010C0
-:1015000090C300D430A500FF3062002010400008D6
-:10151000008088218CCB00D02409FFDF256A0001E0
-:10152000ACCA00D090C800D401093824A0C700D4A8
-:1015300014A000403C0C80008F840038908700D4B9
-:101540002418FFBF2406FFEF30E3007FA08300D400
-:10155000979F005C8F8200608F8D003803E2C82364
-:10156000A799005CA5A000BC91AF00D401F870243D
-:10157000A1AE00D48F8C0038A18000D78F8A0038AC
-:10158000A5400082AD4000EC914500D400A658244F
-:10159000A14B00D48F9000348F8400609786005C4C
-:1015A0000204282110C0000FAF850034A38000582A
-:1015B0003C0780008E2C000894ED01208E2B000447
-:1015C000018D5021014B8021020620233086FFFF30
-:1015D00030C8000F3909000131310001162000091F
-:1015E000A3880058938600488FBF00188FB100145D
-:1015F0008FB0001027BD0020AF85006403E0000815
-:10160000AF86006000C870238FBF00189386004823
-:101610008FB100148FB0001034EF0C00010F28219F
-:1016200027BD0020ACEE0084AF85006403E0000815
-:10163000AF86006035900180020028210E00190F4E
-:10164000240600828F840038908600D430C5004084
-:1016500050A0FFBAA38000688F85004C3C06800034
-:101660008CCD01B805A0FFFE8F89006C2408608234
-:1016700024070002AE090000A6080008A207000B1C
-:101680008CA300083C0E1000AE0300108CA2000CCE
-:10169000AE0200148CBF0014AE1F00188CB90018E5
-:1016A000AE1900248CB80024AE1800288CAF002896
-:1016B000AE0F002CACCE01B80A001948A380006818
-:1016C0008F8A003827BDFFE0AFB10014AFB0001023
-:1016D0008F880060AFBF00189389003C954200BC22
-:1016E00030D100FF0109182B0080802130AC00FFB1
-:1016F0003047FFFF0000582114600003310600FF4F
-:1017000001203021010958239783005C0068202BB9
-:101710001480002700000000106800562419000102
-:101720001199006334E708803165FFFF0E0018C08F
-:10173000020020218F83006C3C07800034E601808A
-:101740003C0580008CAB01B80560FFFE240A001840
-:101750008F840038ACC30000A0CA000B948900BE7F
-:101760003C081000A4C90010ACC00030ACA801B8FF
-:101770009482008024430001A4830080949F008011
-:101780003C0608008CC6318833EC7FFF1186005E72
-:101790000000000002002021022028218FBF001835
-:1017A0008FB100148FB000100A00193427BD00203B
-:1017B000914400D42403FF8000838825A15100D4E4
-:1017C0009784005C3088FFFF51000023938C003C1D
-:1017D0008F8500382402EFFF008B782394AE00BC85
-:1017E0000168502B31E900FF01C26824A4AD00BCA0
-:1017F00051400039010058213C1F800037E60100AC
-:101800008CD800043C190001031940245500000144
-:1018100034E740008E0A00202403FFFB241100015E
-:1018200001432024AE0400201191002D34E78000F4
-:1018300002002021012030210E0018C03165FFFF79
-:101840009787005C8F890060A780005C0127802358
-:10185000AF900060938C003C8F8B00388FBF0018D6
-:101860008FB100148FB0001027BD002003E00008E6
-:10187000A16C00D73C0D800035AA01008D48000402
-:101880003C0900010109282454A0000134E740006C
-:101890008E0F00202418FFFB34E7800001F870242D
-:1018A00024190001AE0E00201599FF9F34E708802F
-:1018B000020020210E00188E3165FFFF020020215A
-:1018C000022028218FBF00188FB100148FB00010A4
-:1018D0000A00193427BD00200A0019F7000048212A
-:1018E00002002021012030210E00188E3165FFFFFB
-:1018F0009787005C8F890060A780005C01278023A8
-:101900000A001A0EAF900060948C0080241F8000A3
-:10191000019F3024A4860080908B0080908F0080EF
-:10192000316700FF0007C9C20019C027001871C045
-:1019300031ED007F01AE2825A08500800A0019DF67
-:1019400002002021938500682403000127BDFFE8E1
-:1019500000A330042CA20020AFB00010AFBF0014D1
-:1019600000C01821104000132410FFFE3C0708009F
-:101970008CE7319000E610243C088000350501809A
-:1019800014400005240600848F890038240A0004CE
-:101990002410FFFFA12A00FC0E00190F0000000018
-:1019A000020010218FBF00148FB0001003E0000868
-:1019B00027BD00183C0608008CC631940A001A574F
-:1019C00000C310248F87004427BDFFE0AFB200188A
-:1019D000AFB10014AFB00010AFBF001C30D000FF9B
-:1019E00090E6000D00A088210080902130C5007F86
-:1019F000A0E5000D8F8500388E2300188CA200D042
-:101A00001062002E240A000E0E001A4AA38A0068F3
-:101A10002409FFFF104900222404FFFF5200002088
-:101A2000000020218E2600003C0C001000CC582421
-:101A3000156000393C0E000800CE682455A0003F18
-:101A4000024020213C18000200D880241200001F10
-:101A50003C0A00048F8700448CE200148CE30010E1
-:101A60008CE500140043F82303E5C82B1320000580
-:101A7000024020218E24002C8CF1001010910031A6
-:101A80000240202124020012A38200680E001A4A9C
-:101A90002412FFFF105200022404FFFF0000202147
-:101AA0008FBF001C8FB200188FB100148FB00010D0
-:101AB0000080102103E0000827BD002090A800D47A
-:101AC000350400200A001A80A0A400D400CA4824CB
-:101AD0001520000B8F8B00448F8D00448DAC0010BF
-:101AE0001580000B024020218E2E002C51C0FFECEF
-:101AF00000002021024020210A001A9B2402001726
-:101B00008D66001050C0FFE6000020210240202119
-:101B10000A001A9B24020011024020212402001511
-:101B20000E001A4AA3820068240FFFFF104FFFDC4B
-:101B30002404FFFF0A001A8A8E2600000A001AC138
-:101B4000240200143C08000400C8382450E0FFD4EC
-:101B500000002021024020210A001A9B24020013C9
-:101B60008F85003827BDFFD8AFB3001CAFB2001877
-:101B7000AFB10014AFB00010AFBF002090A700D4E9
-:101B80008F90004C2412FFFF34E2004092060000C8
-:101B9000A0A200D48E0300100080982110720006CD
-:101BA00030D1003F2408000D0E001A4AA3880068B7
-:101BB000105200252404FFFF8F8A00388E09001878
-:101BC0008D4400D01124000702602021240C000E57
-:101BD0000E001A4AA38C0068240BFFFF104B001A5A
-:101BE0002404FFFF24040020122400048F8D0038F9
-:101BF00091AF00D435EE0020A1AE00D48F85005403
-:101C000010A00019000000001224004A8F9800382C
-:101C10008F92FCBC971000809651000A5230004809
-:101C20008F9300403C1F08008FFF318C03E5C82BC9
-:101C30001720001E02602021000028210E0019A993
-:101C400024060001000020218FBF00208FB3001C5C
-:101C50008FB200188FB100148FB0001000801021D7
-:101C600003E0000827BD00285224002A8E05001436
-:101C70008F840038948A008025490001A48900805F
-:101C8000948800803C0208008C42318831077FFF35
-:101C900010E2000E00000000026020210E00193446
-:101CA000240500010A001B0B000020212402002D46
-:101CB0000E001A4AA38200682403FFFF1443FFE1C9
-:101CC0002404FFFF0A001B0C8FBF002094990080A2
-:101CD000241F800024050001033FC024A498008035
-:101CE00090920080908E0080325100FF001181C2DE
-:101CF00000107827000F69C031CC007F018D582576
-:101D0000A08B00800E001934026020210A001B0BFA
-:101D1000000020212406FFFF54A6FFD68F84003840
-:101D2000026020210E001934240500010A001B0B5B
-:101D300000002021026020210A001B252402000A45
-:101D40002404FFFD0A001B0BAF9300608F8800384E
-:101D500027BDFFE8AFB00010AFBF0014910A00D458
-:101D60008F87004C00808021354900408CE60010B0
-:101D7000A10900D43C0208008C4231B030C53FFFBD
-:101D800000A2182B106000078F850050240DFF80E3
-:101D900090AE000D01AE6024318B00FF156000088D
-:101DA0000006C382020020212403000D8FBF00140F
-:101DB0008FB0001027BD00180A001A4AA3830068DC
-:101DC00033060003240F000254CFFFF70200202146
-:101DD00094A2001C8F85003824190023A4A200E8D7
-:101DE0008CE8000000081E02307F003F13F9003528
-:101DF0003C0A00838CE800188CA600D0110600086D
-:101E0000000000002405000E0E001A4AA385006899
-:101E10002407FFFF104700182404FFFF8F850038B8
-:101E200090A900D435240020A0A400D48F8C0044B5
-:101E3000918E000D31CD007FA18D000D8F83005458
-:101E40001060001C020020218F8400508C9800102C
-:101E50000303782B11E0000D241900180200202143
-:101E6000A39900680E001A4A2410FFFF10500002C8
-:101E70002404FFFF000020218FBF00148FB000104A
-:101E80000080102103E0000827BD00188C86001098
-:101E90008F9F00440200202100C31023AFE20010F6
-:101EA000240500010E0019A9240600010A001B9751
-:101EB000000020210E001934240500010A001B97A0
-:101EC00000002021010A5824156AFFD98F8C004494
-:101ED000A0A600FC0A001B84A386005A30A500FFC0
-:101EE0002406000124A9000100C9102B1040000C99
-:101EF00000004021240A000100A61823308B0001B5
-:101F000024C60001006A3804000420421160000267
-:101F100000C9182B010740251460FFF800A61823FC
-:101F200003E000080100102127BDFFD8AFB0001862
-:101F30008F90004CAFB1001CAFBF00202403FFFF07
-:101F40002411002FAFA30010920600002405000802
-:101F500026100001006620260E001BB0308400FF12
-:101F600000021E003C021EDC34466F410A001BD8F2
-:101F70000000102110A00009008018212445000154
-:101F800030A2FFFF2C4500080461FFFA0003204047
-:101F90000086202614A0FFF9008018210E001BB037
-:101FA000240500208FA300102629FFFF313100FFF8
-:101FB00000034202240700FF1627FFE20102182651
-:101FC00000035027AFAA0014AFAA00100000302170
-:101FD00027A8001027A7001400E6782391ED00033E
-:101FE00024CE000100C8602131C600FF2CCB0004C4
-:101FF0001560FFF9A18D00008FA200108FBF002097
-:102000008FB1001C8FB0001803E0000827BD002826
-:1020100027BDFFD0AFB3001CAFB00010AFBF00288A
-:10202000AFB50024AFB40020AFB20018AFB10014B8
-:102030003C0C80008D880128240FFF803C06800A1C
-:1020400025100100250B0080020F68243205007F57
-:10205000016F7024AD8E009000A62821AD8D002464
-:1020600090A600FC3169007F3C0A8004012A1821F7
-:10207000A386005A9067007C00809821AF830030CF
-:1020800030E20002AF88006CAF85003800A0182154
-:10209000144000022404003424040030A3840048C7
-:1020A0008C7200DC30D100FF24040004AF92006089
-:1020B00012240004A38000688E7400041680001EA1
-:1020C0003C0880009386005930C7000150E0000FA3
-:1020D0008F8600608CA400848CA800842413FF8069
-:1020E00000936024000C49403110007F01307825B6
-:1020F0003C19200001F9682530DF00FE3C03800018
-:10210000AC6D0830A39F00598F8600608FBF0028F8
-:102110008FB500248FB400208FB3001C8FB200183D
-:102120008FB100148FB000102402000127BD0030D1
-:1021300003E00008ACA600DC8E7F000895020120B9
-:102140008E67001003E2C8213326FFFF30D8000F4E
-:1021500033150001AF87003416A00058A39800582B
-:1021600035090C000309382100D81823AD03008479
-:10217000AF8700648E6A00043148FFFF1100007EC3
-:10218000A78A005C90AC00D42407FF8000EC3024C8
-:1021900030CB00FF1560004B9786005C938E005A91
-:1021A000240D000230D5FFFF11CD02A20000A021B6
-:1021B0008F85006002A5802B160000BC9388004824
-:1021C0003C11800096240120310400FF1485008812
-:1021D0008F8400648F9800343312000356400085CA
-:1021E00030A500FF8F900064310C00FF24060034FE
-:1021F00011860095AF90004C9204000414800119E0
-:102200008F8E0038A380003C8E0D00048DC800D84E
-:102210003C0600FF34CCFFFF01AC30240106182B34
-:1022200014600121AF8600548F8700609798005C8E
-:10223000AF8700400307402310C000C7A788005C99
-:102240008F91003030C3000300035823922A007C92
-:102250003171000302261021000A20823092000111
-:102260000012488000492821311FFFFF03E5C82BD9
-:10227000132001208F8800388F8500348F880064F8
-:102280001105025A3C0E3F018E0600003C0C250051
-:1022900000CE682411AC01638F84004C30E500FF50
-:1022A0000E00184A000030218F8800388F870060A8
-:1022B0008F8500340A001DB78F8600540A001C5613
-:1022C000AF87006490AC00D400EC2024309000FF75
-:1022D000120000169386005990B5008890B400D77C
-:1022E00024A8008832A2003F2446FFE02CD1002021
-:1022F000A394003C1220000CAF88004C240E000177
-:1023000000CE2004308A00191540012B3C068000C5
-:1023100034D80002009858241560022E3092002014
-:1023200016400234000000009386005930CE0001B0
-:1023300011C0000F9788005C8CA900848CAF0084CA
-:102340002410FF800130C8240019194031ED007FAE
-:10235000006D38253C1F200000FF902530CB00FE8B
-:102360003C188000AF120830A38B00599788005C9E
-:102370001500FF84000000008E630020306C000414
-:102380001180FF51938600592404FFFB0064302420
-:102390003C038000AE660020346601808C7301B877
-:1023A0000660FFFE8F8E006C346A01003C15000150
-:1023B000ACCE00008C62012424076085ACC200040E
-:1023C0008D54000402958824522000012407608364
-:1023D000241200023C1810003C0B8000A4C7000827
-:1023E000A0D2000BAD7801B80A001C2B93860059CF
-:1023F00030A500FF0E00184A240600018F88006CEB
-:102400003C05800034A90900250201889388004812
-:10241000304A0007304B00783C0340802407FF809F
-:102420000163C825014980210047F824310C00FFD1
-:1024300024060034ACBF0800AF90004CACB90810C3
-:102440005586FF6E920400048F8400388E11003090
-:10245000908E00D431CD001015A000108F83006045
-:102460002C6F000515E000E400000000909800D4F7
-:102470002465FFFC331200101640000830A400FF52
-:102480008F9F00648F99003413F90004388700018E
-:1024900030E20001144001C8000000000E001BC320
-:1024A000000000000A001DF8000000008F84006496
-:1024B00030C500FF0E00184A24060001938E004824
-:1024C000240A003411CA00A08F8500388F8600606E
-:1024D0009783005C3062FFFF00C28823AF910060E9
-:1024E000A780005C1280FF90028018212414FFFD59
-:1024F0005474FFA28E6300208E6900042403FFBF82
-:10250000240BFFEF0135C823AE79000490AF00D44F
-:1025100031ED007FA0AD00D48E6600208F9800388A
-:10252000A780005C34DF0002AE7F0020A70000BC63
-:10253000931200D402434024A30800D48F9500389E
-:10254000AEA000EC92AE00D401CB5024A2AA00D4DD
-:102550000A001CD78F8500388F910034AF8000604F
-:1025600002275821AF8B0034000020212403FFFFF5
-:10257000108301B48F8500388E0C00103C0D0800CC
-:102580008DAD31B09208000031843FFF008D802B6B
-:1025900012000023310D003F3C1908008F3931A88B
-:1025A0008F9F006C000479802408FF80033F202166
-:1025B000008FC821938500590328F8243C06008029
-:1025C0003C0F800034D80001001F91403331007F60
-:1025D0008F8600380251502535EE0940332B0078A4
-:1025E000333000073C0310003C02800C017890253A
-:1025F000020E48210143C0250222382134AE0001D9
-:10260000ADFF0804AF890050ADF20814AF87004455
-:10261000ADFF0028ACD90084ADF80830A38E005976
-:102620009383005A240700035067002825A3FFE086
-:10263000240C0001146CFFAB8F850038241100239B
-:1026400011B10084000000002402000B0260202170
-:102650000E001A4AA38200680040A0210A001D3221
-:102660008F85003802602021240B000C0E001A4ACE
-:10267000A38B0068240AFFFF104AFFBC2404FFFF5D
-:102680008F8E0038A380003C8E0D00048DC800D8CA
-:102690003C0600FF34CCFFFF01AC30240106182BB0
-:1026A0001060FEE1AF860054026020212412001960
-:1026B0000E001A4AA3920068240FFFFF104FFFABD1
-:1026C0002404FFFF0A001C838F8600542C74002012
-:1026D0001280FFDE2402000B000328803C11080159
-:1026E0002631949000B148218D2D000001A00008F2
-:1026F000000000008F85003400A710219385003C66
-:10270000AF82003402251821A383003C951F00BC32
-:102710000226282137F91000A51900BC5240FF926B
-:10272000AF850060246A0004A38A003C950900BCC0
-:1027300024A40004AF84006035322000A51200BC40
-:102740000A001D54000020218F8600602CCB00055C
-:102750001560FF609783005C3072FFFF00D240235A
-:102760002D18000513000003306400FF24DFFFFC78
-:1027700033E400FF8F8500648F86003410A60004C8
-:10278000388F000131ED000115A001380000000074
-:102790008F840038908C00D435870010A08700D437
-:1027A0008F8500388F8600609783005CACA000ECBA
-:1027B0000A001D2F3062FFFF8CAA00848CB50084B4
-:1027C0003C041000014710240002894032B4007F0D
-:1027D0000234302500C460253C0880002405000137
-:1027E00002602021240600010E0019A9AD0C08305A
-:1027F0000A001CC38F8500388C8200EC1222FE7EFA
-:102800000260202124090005A38900680E001A4AED
-:102810002411FFFF1451FE782404FFFF0A001D5508
-:102820002403FFFF8F8F004C8F8800388DF8000045
-:10283000AD1800888DE70010AD0700988F87006005
-:102840000A001DB78F8600542407FFFF118700057B
-:10285000000000000E001B4C026020210A001D90A9
-:102860000040A0210E001AD1026020210A001D9014
-:102870000040A0218F90004C3C0908008D2931B008
-:102880008E11001032323FFF0249682B11A0000C5C
-:10289000240AFF808F85005090AE000D014E102459
-:1028A000304C00FF11800007026020210011C3821C
-:1028B00033030003240B0001106B0105000000002E
-:1028C000026020212418000D0E001A4AA398006807
-:1028D000004020218F8500380A001D320080A02191
-:1028E0008F90004C3C0A08008D4A31B08F85005013
-:1028F0008E0400100000A0218CB1001430823FFF34
-:10290000004A602B8CB200205180FFEE0260202133
-:1029100090B8000D240BFF800178702431C300FFB4
-:102920005060FFE80260202100044382310600036A
-:1029300014C0FFE40260202194BF001C8F9900386E
-:102940008E060028A73F00E88CAF0010022F20233E
-:1029500014C40139026020218F83005400C3682110
-:10296000022D382B14E00135240200188F8A004410
-:102970008F820030024390218D4B00100163702341
-:10298000AD4E0010AD5200208C4C00740192282BEB
-:1029900014A00156026020218F8400508E0800246C
-:1029A0008C86002411060007026020212419001CD7
-:1029B0000E001A4AA3990068240FFFFF104FFFC5AD
-:1029C0002404FFFF8F8400448C87002424FF00012F
-:1029D000AC9F0024125101338F8D00308DB10074F3
-:1029E000123201303C0B00808E0E000001CB5024CF
-:1029F00015400075000000008E0300142411FFFF35
-:102A000010710006026020212418001B0E001A4AD3
-:102A1000A39800681051FFAF2404FFFF8E0300004D
-:102A20003C0800010068302410C000133C04008002
-:102A30000064A024168000090200282102602021E1
-:102A40002419001A0E001A4AA3990068240FFFFFE8
-:102A5000104FFFA02404FFFF020028210260202164
-:102A60000E001A6A240600012410FFFF1050FF997F
-:102A70002404FFFF241400018F9F004402602021E2
-:102A80000280302197F1003424050001262700013F
-:102A9000A7E700340E0019A9000000000000202163
-:102AA0008F8500380A001D320080A0218F90004CD5
-:102AB0003C1408008E9431B08E07001030E83FFFC0
-:102AC0000114302B10C000618F860050241FFF803E
-:102AD00090C5000D03E52024309200FF5240005CB9
-:102AE000026020218F8D005411A0000700078B8207
-:102AF0008F8500388F89FCBC94AF00809539000A1F
-:102B0000132F00F68F870040322C000315800063DE
-:102B10000000000092020002104000D700000000F8
-:102B20008E0A0024154000D8026020219204000380
-:102B300024060002308800FF15060005308500FFDE
-:102B40008F940054528000F202602021308500FFF3
-:102B500038AD00102DA400012CBF000103E4302586
-:102B6000020028210E001A6A026020212410FFFFB3
-:102B7000105000BE8F8500388F830054106000C451
-:102B8000240500013C1908008F39318C0323782B70
-:102B900015E000B12409002D026020210000282149
-:102BA0000E0019A9240600018F85003800001821A5
-:102BB0000A001D320060A0210E0018750000000000
-:102BC0000A001DF800000000AC8000200A001E78FA
-:102BD0008E03001400002821026020210E0019A994
-:102BE000240600010A001CC38F8500380A001DB7A7
-:102BF0008F8800388CB000848CB900843C031000AE
-:102C00000207482400096940332F007F01AFF825EF
-:102C100003E32825ACC50830910700012405000115
-:102C2000026020210E0019A930E600010A001CC331
-:102C30008F850038938F00482403FFFD0A001D3460
-:102C4000AF8F00600A001D342403FFFF02602021C3
-:102C50002410000D0E001A4AA390006800401821AD
-:102C60008F8500380A001D320060A0210E00187503
-:102C7000000000009783005C8F8600603070FFFFCB
-:102C800000D048232D3900051320FE128F8500380F
-:102C9000ACA200EC0A001D2F3062FFFF90C3000DB4
-:102CA000307800085700FFA2920400030260202140
-:102CB000240200100E001A4AA38200682403FFFFBA
-:102CC0005443FF9B920400030A001F128F850038B3
-:102CD00090A8000D3106000810C000958F94005494
-:102CE0001680009E026020218E0F000C8CA4002014
-:102CF00055E40005026020218E1F00088CB90024D5
-:102D000013F9003A02602021240200200E001A4A22
-:102D1000A38200682405FFFF1045FEEE2404FFFF98
-:102D20008F8F0044240CFFF72403FF8091E9000DEE
-:102D30003C14800E3C0B8000012CC824A1F9000D2E
-:102D40008F8F00303C0708008CE731AC8F8D006C12
-:102D500095E500788F99004400ED902130BF7FFF0A
-:102D6000001F20400244302130C8007F00C3C0242F
-:102D700001147021AD78002CA5D100008F2A002805
-:102D800025420001AF2200288F29002C8E0C002C38
-:102D9000012C6821AF2D002C8E07002CAF270030AE
-:102DA0008E050014AF250034973F003A27E4000158
-:102DB000A724003A95F200783C1008008E1031B03C
-:102DC0002643000130717FFF1230005C006030212B
-:102DD0008F83003002602021240500010E00193489
-:102DE000A46600780A001EA1000020218E070014AE
-:102DF0002412FFFF10F200638F8C00388E09001838
-:102E00008D8D00D0152D005D026020218E0A0024DA
-:102E10008CA2002811420053240200210E001A4AFD
-:102E2000A38200681452FFBE2404FFFF8F85003880
-:102E30000A001D320080A0212402001F0E001A4A41
-:102E4000A38200682409FFFF1049FEA22404FFFFAB
-:102E50000A001E548F830054026020210E001A4A7B
-:102E6000A38900681450FF518F8500382403FFFFA9
-:102E70000A001D320060A0218CCE00248E0B00249D
-:102E8000116EFF2A026020210A001F262402000F73
-:102E90000E001934026020218F8500380A001EE5DB
-:102EA000000018218E0900003C05008001259024B7
-:102EB0001640FF452402001A026020210E001A4A23
-:102EC000A3820068240CFFFF144CFECB2404FFFFF8
-:102ED0008F8500380A001D320080A0212403FFFDE9
-:102EE0000060A0210A001D32AF8700602418001D79
-:102EF0000E001A4AA39800682403FFFF1443FEA69D
-:102F00002404FFFF8F8500380A001D320080A021B5
-:102F10002412002C0E001A4AA39200682403FFFF1B
-:102F20001043FF508F8500380A001ECC9204000326
-:102F3000026020210A001F3C24020024240B800090
-:102F4000006B702431CAFFFF000A13C2305100FF2A
-:102F5000001180270A001F6D001033C00A001F3CBB
-:102F6000240200278E0600288CAE002C10CE00080C
-:102F7000026020210A001F802402001F0A001F8017
-:102F80002402000E026020210A001F802402002576
-:102F90008E04002C1080000D8F8300308C7800741C
-:102FA0000304582B5560000C026020218CA80014EB
-:102FB0000086A0210114302B10C0FF5A8F8F0044CF
-:102FC000026020210A001F802402002202602021CA
-:102FD0000A001F80240200230A001F80240200260A
-:102FE00027BDFFD8AFB3001CAFB10014AFBF0020A6
-:102FF000AFB20018AFB000103C0280008C5201400C
-:103000008C4B01483C048000000B8C02322300FFF3
-:10301000317300FF8C8501B804A0FFFE349001805D
-:10302000AE1200008C8701442464FFF024060002E5
-:103030002C830013AE070004A6110008A206000BA3
-:10304000AE1300241060004F8FBF002000044880A2
-:103050003C0A0801254A9510012A40218D040000F0
-:1030600000800008000000003C0308008C6331A8C9
-:1030700031693FFF0009998000728021021370219D
-:103080002405FF80264D0100264C00803C02800074
-:1030900031B1007F3198007F31CA007F3C1F800A28
-:1030A0003C1980043C0F800C01C5202401A530246C
-:1030B00001853824014F1821AC460024023F4021ED
-:1030C00003194821AC470090AC440028AF8300446A
-:1030D000AF880038AF8900300E00190001608021F0
-:1030E0003C0380008C6B01B80560FFFE8F870044B5
-:1030F0008F8600383465018090E8000DACB2000086
-:10310000A4B0000600082600000416030002902761
-:10311000001227C21080008124C20088241F608210
-:10312000A4BF0008A0A0000524020002A0A2000B7A
-:103130008F8B0030000424003C0827000088902575
-:10314000ACB20010ACA00014ACA00024ACA00028CD
-:10315000ACA0002C8D6900382413FF80ACA90018A6
-:1031600090E3000D02638024320500FF10A00005EB
-:103170008FBF002090ED000D31AC007FA0EC000D62
-:103180008FBF00208FB3001C8FB200188FB10014C6
-:103190008FB000103C0A10003C0E800027BD0028B4
-:1031A00003E00008ADCA01B8265F01002405FF80D6
-:1031B00033F8007F3C06800003E578243C19800A40
-:1031C00003192021ACCF0024908E00D400AE6824D7
-:1031D00031AC00FF11800024AF840038248E0088B9
-:1031E00095CD00123C0C08008D8C31A831AB3FFF0F
-:1031F00001924821000B5180012A40210105202421
-:10320000ACC400283107007F3C06800C00E620217A
-:103210009083000D00A31024304500FF10A0FFD8BC
-:10322000AF8400449098000D330F001015E0FFD5D7
-:103230008FBF00200E001900000000003C0380003A
-:103240008C7901B80720FFFE00000000AE120000DC
-:103250008C7F0144AE1F0004A61100082411000257
-:10326000A211000BAE1300243C130801927396D0F8
-:10327000327000015200FFC38FBF00200E00213DBD
-:10328000024020210A00205A8FBF00203C1260001B
-:103290008E452C083C03F0033462FFFF00A2F824A3
-:1032A000AE5F2C088E582C083C1901C003199825D4
-:1032B000AE532C080A00205A8FBF0020264D010073
-:1032C00031AF007F3C10800A240EFF8001F02821DE
-:1032D00001AE60243C0B8000AD6C00241660FFA89A
-:1032E000AF85003824110003A0B100FC0A00205A69
-:1032F0008FBF002026480100310A007F3C0B800A66
-:103300002409FF80014B3021010920243C07800063
-:10331000ACE400240A002059AF860038944E001215
-:10332000320C3FFF31CD3FFF15ACFF7D241F608283
-:1033300090D900D42418FF800319782431EA00FFC3
-:103340001140FF770000000024070004A0C700FC24
-:103350008F870044241160842406000DA4B1000866
-:10336000A0A600050A002044240200023C0400013B
-:10337000248496BC24030014240200FE3C010800AF
-:10338000AC2431EC3C010800AC2331E83C010801DD
-:10339000A42296D83C040801248496D80000182161
-:1033A00000643021A0C30004246300012C6500FFE9
-:1033B00054A0FFFC006430213C07080024E7010012
-:1033C00003E00008AF87007800A058210080482162
-:1033D0000000102114A00012000050210A00213921
-:1033E000000000003C010801A42096D83C0508011B
-:1033F00094A596D88F8200783C0C0801258C96D82D
-:1034000000E2182100AC2021014B302BA0890004E0
-:1034100000001021A460000810C0003901004821FC
-:103420008F8600780009384000E940210008388084
-:1034300000E6282190A8000B90B9000A000820405F
-:1034400000881021000218800066C021A319000A1C
-:103450008F85007800E5782191EE000A91E6000B57
-:10346000000E684001AE6021000C20800085102114
-:10347000A046000B3C030801906396D21060002226
-:103480002462FFFF8F8300383C010801A02296D2FE
-:10349000906C00FF1180000400000000906E00FF9F
-:1034A00025CDFFFFA06D00FF3C190801973996D884
-:1034B000272300013078FFFF2F0F00FF11E0FFC925
-:1034C000254A00013C010801A42396D83C050801C7
-:1034D00094A596D88F8200783C0C0801258C96D84C
-:1034E00000E2182100AC2021014B302BA089000400
-:1034F00000001021A460000814C0FFC90100482189
-:1035000003E000080000000003E0000824020002BD
-:1035100027BDFFE0248501002407FF80AFB0001025
-:10352000AFBF0018AFB1001400A718243C108000F2
-:1035300030A4007F3C06800A008628218E110024DA
-:10354000AE03002490A200FF14400008AF850038AD
-:10355000A0A000098FBF0018AE1100248FB1001485
-:103560008FB0001003E0000827BD002090A900FDE7
-:1035700090A800FF312400FF0E0020EB310500FF72
-:103580008F8500388FBF0018A0A00009AE1100245D
-:103590008FB100148FB0001003E0000827BD002099
-:1035A00027BDFFD0AFB20020AFB1001CAFB00018F4
-:1035B000AFBF002CAFB40028AFB300243C0980009B
-:1035C0009533011635320C00952F011A3271FFFF29
-:1035D000023280218E08000431EEFFFF248B0100AF
-:1035E000010E6821240CFF8025A5FFFF016C5024EB
-:1035F0003166007F3C07800AAD2A002400C73021D5
-:10360000AF850074AF8800703C010801A02096D1FE
-:1036100090C300090200D02100809821306300FF90
-:103620002862000510400048AF8600382864000278
-:103630001480008E24140001240D00053C010801B3
-:10364000A02D96B590CC00FD3C010801A02096B6B7
-:103650003C010801A02096B790CB000A240AFF8005
-:10366000318500FF014B4824312700FF10E0000C9A
-:10367000000058213C128008365100808E2F003007
-:103680008CD0005C01F0702305C0018E8F87007024
-:1036900090D4000A3284007FA0C4000A8F860038CC
-:1036A0003C118008363000808E0F00308F8700700C
-:1036B00000EF702319C000EE0000000090D4000954
-:1036C00024120002328400FF109202470000000022
-:1036D0008CC2005800E2F82327F9FFFF1B200130BD
-:1036E0000000000090C500092408000430A300FF7A
-:1036F00010680057240A00013C010801A02A96B571
-:1037000090C900FF252700013C010801A02796B4BD
-:103710003C030801906396B5240600051066006A14
-:103720002C780005130000C4000090210003F880ED
-:103730003C0408012484955C03E4C8218F25000023
-:1037400000A0000800000000241800FF1078005CB2
-:103750000000000090CC000A90CA00093C08080153
-:10376000910896D13187008000EA48253C01080184
-:10377000A02996BC90C500FD3C140801929496D2F5
-:10378000311100013C010801A02596BD90DF00FE2B
-:103790003C010801A03F96BE90D200FF3C01080109
-:1037A000A03296BF8CD900543C010801AC3996C0B8
-:1037B0008CD000583C010801AC3096C48CC3005C2E
-:1037C0003C010801AC3496CC3C010801AC2396C8FE
-:1037D000162000088FBF002C8FB400288FB3002460
-:1037E0008FB200208FB1001C8FB0001803E00008DA
-:1037F00027BD00303C1180009624010E0E000FD42E
-:103800003094FFFF3C0B08018D6B96D40260382189
-:1038100002802821AE2B01803C1308018E7396B4E0
-:1038200001602021240600830E00102FAFB300108A
-:103830008FBF002C8FB400288FB300248FB20020DC
-:103840008FB1001C8FB0001803E0000827BD0030C6
-:103850003C1808008F1831FC270F00013C010800BC
-:10386000AC2F31FC0A0021CE000000001474FFB917
-:1038700000000000A0C000FF3C0508008CA531E45A
-:103880003C0308008C6331E03C0208008C423204A7
-:103890008F99003834A80001241F00023C01080160
-:1038A000AC2396D43C010801A02896D03C01080125
-:1038B000A02296D3A33F00090A0021878F860038F3
-:1038C0000E00213D000000000A0021CE8F86003846
-:1038D0003C1F080193FF96B42419000113F9022933
-:1038E0008F8700703C100801921096B83C060801C2
-:1038F00090C696B610C000050200A0213C04080145
-:10390000908496B9109001E48F8700780010884069
-:103910008F9F0078023048210009C880033F702142
-:1039200095D80008270F0001A5CF00083C04080126
-:10393000908496B93C05080190A596B60E0020EB40
-:10394000000000008F8700780230202100043080C2
-:1039500000C720218C8500048F82007400A24023C0
-:1039600005020006AC8200048C8A00008F83007080
-:10397000014310235C400001AC8300008F860038B7
-:1039800090CB00FF2D6C00025580002D2414000107
-:103990000230F821001F40800107282190B9000B58
-:1039A0008CAE00040019C04003197821000F188064
-:1039B000006710218C4D000001AE88232630FFFFE8
-:1039C0005E00001F241400018C4400048CAA000037
-:1039D000008A482319200019240E00043C01080124
-:1039E000A02E96B590AD000B8CAB0004000D884066
-:1039F000022D802100101080004710218C4400040B
-:103A000001646023058202009443000890DF00FEF9
-:103A100090B9000B33E500FF54B900040107A02161
-:103A2000A0D400FE8F8700780107A0219284000BAC
-:103A30000E0020EB240500018F86003824140001BD
-:103A4000125400962E500001160000423C08FFFF61
-:103A5000241900021659FF3F00000000A0C000FF1B
-:103A60008F860038A0D200090A0021CE8F86003848
-:103A700090C700092404000230E300FF1064016FC6
-:103A800024090004106901528F8800748CCE005400
-:103A9000010E682325B100010620017524180004D9
-:103AA0003C010801A03896B53C010801A02096B45D
-:103AB00090D400FD90D200FF2E4F000215E0FF14BD
-:103AC000328400FF000438408F89007890DF00FFC7
-:103AD00000E41021000220800089C8212FE50002A7
-:103AE0009324000B14A0FF0A2407000200041840CE
-:103AF0000064802100105880016928218CAC0004EA
-:103B0000010C50230540FF02000000003C030801A7
-:103B1000906396B614600005246F00013C01080113
-:103B2000A02496B93C010801A02796B73C010801E2
-:103B3000A02F96B690CE00FF24E7000131CD00FF04
-:103B400001A7882B1220FFE990A4000B0A0021BDD9
-:103B5000000000003C0508018CA596B43C1200044E
-:103B600000A8F82413F20006240200053C0908010D
-:103B7000912996B5152000022402000324020005B5
-:103B80003C010801A02296D190C700FF14E001205B
-:103B900024020002A0C200090A0021CE8F8600384C
-:103BA00090CC00FF1180FEDA240A00018F8C007493
-:103BB0008F890078240F0003018068211160001EA6
-:103BC000240E0002000540400105A02100142080C1
-:103BD000008990218E510004019180230600FECCC3
-:103BE000000000003C020801904296B61440000517
-:103BF000245800013C010801A02A96B73C010801A5
-:103C0000A02596B93C010801A03896B690DF00FFC8
-:103C1000010510210002C88033E500FF254A00019C
-:103C20000329202100AA402B1500FEB99085000B26
-:103C30001560FFE5000540400005404001051821E2
-:103C4000000310803C010801A02A96B43C01080141
-:103C5000A02596B8004918218C64000400E4F823DC
-:103C600027F9FFFF1F20FFE9000000008C63000020
-:103C700000E358230560013A01A3882310E30117EC
-:103C80000184C0231B00FEA2000000003C010801CB
-:103C9000A02E96B50A0022FC240B0001240E00047D
-:103CA000A0CE00093C0D08008DAD31F88F8600389C
-:103CB00025A200013C010800AC2231F80A0021CE07
-:103CC000000000008CD9005C00F9C0231F00FE7BBF
-:103CD000000000008CDF005C10FFFF658F84007423
-:103CE0008CC3005C00834023250200011C40FF6060
-:103CF000000000008CC9005C2487000100E9282B2B
-:103D000010A0FE943C0D80008DAB01043C0C000122
-:103D1000016C50241140FE8F240200103C01080168
-:103D2000A02296D10A0021CE000000008F910074DD
-:103D30008F86003826220001ACC2005C0A0022896E
-:103D4000241400018F8700382404FF80000088219C
-:103D500090E9000A2414000101243025A0E6000A9D
-:103D60003C05080190A596B63C040801908496B9DC
-:103D70000E0020EB000000008F8600388F85007851
-:103D800090C800FD310700FF000740400107F821FF
-:103D9000001FC0800305C8219323000BA0C300FDB2
-:103DA0008F8500788F86003803056021918F000B86
-:103DB000000F704001CF6821000D808002051021A6
-:103DC0008C4B0000ACCB00548D8400048F830074B6
-:103DD0000064502319400002248200012462000183
-:103DE00001074821ACC2005C0009308000C54021B9
-:103DF00000E02021240500010E0020EB9110000BB3
-:103E00008F86003890C500FF10A0FF0C0010704096
-:103E10008F85007801D06821000D10800045582161
-:103E20008D6400008F8C00740184502325470001AD
-:103E300004E0FF02263100013C030801906396B6BE
-:103E40002E2F0002247800013C010801A03896B60C
-:103E50003C010801A03496B711E0FEF802003821B9
-:103E60000A00235C000740408F8400388F83007471
-:103E70008C85005800A340230502FE9AAC830058AD
-:103E80000A002232000000003C07080190E796D2A9
-:103E9000240200FF10E200BE8F8600383C110801AA
-:103EA000963196DA3C030801246396D82625000152
-:103EB0003230FFFF30ABFFFF020360212D6A00FFAD
-:103EC0001540008D918700043C010801A42096DA7A
-:103ED0008F8800380007484001272821911800FFEB
-:103EE000000530802405000127140001A11400FF03
-:103EF0003C120801925296D28F8800788F8E007003
-:103F0000264F000100C820213C010801A02F96D2B5
-:103F1000AC8E00008F8D0074A4850008AC8D000469
-:103F20003C030801906396B4146000770000902170
-:103F30003C010801A02596B4A087000B8F8C007867
-:103F400000CC5021A147000A8F820038A04700FD15
-:103F50008F840038A08700FE8F8600388F9F007006
-:103F6000ACDF00548F990074ACD900588F8D007865
-:103F70000127C02100185880016DA021928F000AEE
-:103F8000000F704001CF182100038880022D80218E
-:103F9000A207000B8F86007801666021918A000BD2
-:103FA000000A1040004A20210004288000A6402179
-:103FB000A107000A3C07800834E900808D22003008
-:103FC0008F860038ACC2005C0A00228924140001EC
-:103FD00090CA00FF1540FEAD8F880074A0C4000990
-:103FE0000A0021CE8F860038A0C000FD8F980038CF
-:103FF00024060001A30000FE3C010801A02696B59E
-:104000003C010801A02096B40A0021BD0000000078
-:1040100090CB00FF3C040801908496D3316C00FFE4
-:104020000184502B1540000F2402000324020004D9
-:10403000A0C200090A0021CE8F86003890C3000A72
-:104040002410FF8002035824316C00FF1180FDC151
-:10405000000000003C010801A02096B50A0021BD27
-:1040600000000000A0C200090A0021CE8F8600389F
-:1040700090D4000A2412FF8002544824312800FF03
-:104080001500FFF4240200083C010801A02296D18B
-:104090000A0021CE00000000001088408F8B0070C5
-:1040A000023018210003688001A72021AC8B00009A
-:1040B0008F8A0074240C0001A48C0008AC8A0004D0
-:1040C0003C05080190A596B62402000110A2FE1E30
-:1040D00024A5FFFF0A0022489084000B0184A0233E
-:1040E0001A80FD8B000000003C010801A02E96B54F
-:1040F0000A0022FC240B00013C010801A42596DAE9
-:104100000A0023AE8F880038240B0001106B0022B8
-:104110008F9800388F85003890BF00FF33F900FF7B
-:104120001079002B000000003C1F080193FF96B897
-:10413000001FC840033FC0210018A08002887821DA
-:1041400091EE000AA08E000A8F8D00783C030801D2
-:10415000906396B800CD88210A0023D4A223000BD7
-:10416000263000010600003101A490230640002BF8
-:10417000240200033C010801A02F96B50A0022FC8E
-:10418000240B00018F8900380A002232AD27005429
-:104190000A00228824120001931400FDA094000B51
-:1041A0008F8800388F8F0078910E00FE00CF682135
-:1041B000A1AE000A8F910038A22700FD8F83007006
-:1041C0008F900038AE0300540A0023D58F8D0078FD
-:1041D00090B000FEA090000A8F8B00388F8C007882
-:1041E000916A00FD00CC1021A04A000B8F8400389A
-:1041F000A08700FE8F8600748F850038ACA600581B
-:104200000A0023D58F8D007894B80008ACA4000470
-:10421000030378210A00227CA4AF00083C010801B6
-:10422000A02296B50A0021BD0000000090CF000931
-:10423000240D000431EE00FF11CDFD8524020001A4
-:104240003C010801A02296B50A0021BD0000000033
-:10425000080033440800334408003420080033F4D5
-:10426000080033D808003328080033280800332812
-:104270000800334C8008010080080080800800009E
-:104280005F865437E4AC62CC50103A4536621985EB
-:10429000BF14C0E81BC27A1E84F4B556094EA6FEB0
-:1042A0007DDA01E7C04D748108005A7408005AB8DD
-:1042B00008005A5C08005A5C08005A5C08005A5C06
-:1042C00008005A7408005A5C08005A5C08005AC07A
-:1042D00008005A5C080059D408005A5C08005A5C6F
-:1042E00008005AC008005A5C08005A5C08005A5C72
-:1042F00008005A5C08005A5C08005A5C08005A5CC6
-:1043000008005A5C08005A5C08005A5C08005A947D
-:1043100008005A5C08005A9408005A5C08005A5C6D
-:1043200008005A5C08005A9808005A9408005A5C21
-:1043300008005A5C08005A5C08005A5C08005A5C85
-:1043400008005A5C08005A5C08005A5C08005A5C75
-:1043500008005A5C08005A5C08005A5C08005A5C65
-:1043600008005A5C08005A5C08005A5C08005A5C55
-:1043700008005A5C08005A5C08005A5C08005A9809
-:1043800008005A9808005A5C08005A9808005A5CBD
-:1043900008005A5C08005A5C08005A5C08005A5C25
-:1043A00008005A5C08005A5C08005A5C08005A5C15
-:1043B00008005A5C08005A5C08005A5C08005A5C05
-:1043C00008005A5C08005A5C08005A5C08005A5CF5
-:1043D00008005A5C08005A5C08005A5C08005A5CE5
-:1043E00008005A5C08005A5C08005A5C08005A5CD5
-:1043F00008005A5C08005A5C08005A5C08005A5CC5
-:1044000008005A5C08005A5C08005A5C08005A5CB4
-:1044100008005A5C08005A5C08005A5C08005A5CA4
-:1044200008005A5C08005A5C08005A5C08005A5C94
-:1044300008005A5C08005A5C08005A5C08005A5C84
-:1044400008005A5C08005A5C08005A5C08005A5C74
-:1044500008005A5C08005A5C08005A5C08005A5C64
-:1044600008005A5C08005A5C08005A5C08005A5C54
-:1044700008005A5C08005A5C08005A5C08005A5C44
-:1044800008005A5C08005A5C08005A5C08005A5C34
-:1044900008005A5C08005A5C08005A5C08005A5C24
-:1044A00008005A5C08005A5C08005ADC0800782CA6
-:1044B00008007A90080078380800762C08007838D0
-:1044C000080078C4080078380800762C0800762C9C
-:1044D0000800762C0800762C0800762C0800762C34
-:1044E0000800762C0800762C0800762C0800762C24
-:1044F00008007858080078480800762C0800762CC8
-:104500000800762C0800762C0800762C0800762C03
-:104510000800762C0800762C0800762C0800762CF3
-:104520000800762C0800762C08007848080082D80D
-:1045300008008164080082A008008164080082707D
-:104540000800804C080081640800816408008164D0
-:1045500008008164080081640800816408008164A7
-:104560000800816408008164080081640800816497
-:10457000080081640800818C08008D1008008E6C92
-:0C45800008008E4C080088B408008D284C
-:04458C000A000124FC
-:1045900000000000000000000000000D7470613693
-:1045A0002E322E31610000000602010100000000E1
-:1045B00000000000000000000000000000000000FB
-:1045C00000000000000000000000000000000000EB
-:1045D00000000000000000000000000000000000DB
-:1045E00000000000000000000000000000000000CB
-:1045F00000000000000000000000000000000000BB
-:1046000000000000000000000000000000000000AA
-:10461000000000000000000000000000000000009A
-:1046200010000003000000000000000D0000000D5D
-:104630003C020800244217203C03080024632A108F
-:10464000AC4000000043202B1480FFFD24420004F6
-:104650003C1D080037BD2FFC03A0F0213C100800D2
-:10466000261004903C1C0800279C17200E000262B4
-:10467000000000000000000D2402FF8027BDFFE0C5
-:1046800000821024AFB00010AF420020AFBF00186E
-:10469000AFB10014936500043084007F03441821F7
-:1046A0003C0200080062182130A500200360802130
-:1046B0003C080111277B000814A000022466005C5E
-:1046C00024660058920200049743010492040004F7
-:1046D0003047000F3063FFFF30840040006728231D
-:1046E00010800009000048219202000530420004B9
-:1046F000104000050000000010A0000300000000B2
-:1047000024A5FFFC240900049202000530420004A5
-:10471000104000120000000010A000100000000077
-:104720009602000200A72021010440252442FFFE3A
-:10473000A7421016920300042402FF8000431024B5
-:10474000304200FF104000033C0204000A000174E4
-:10475000010240258CC20000AF4210188F42017840
-:104760000440FFFE2402000AA74201409602000214
-:1047700024040009304200070002102330420007E1
-:10478000A7420142960200022442FFFEA7420144D2
-:10479000A740014697420104A74201488F42010801
-:1047A0003042002050400001240400019202000425
-:1047B00030420010144000023483001000801821A1
-:1047C000A743014A000000000000000000000000B4
-:1047D00000000000AF4810000000000000000000D2
-:1047E00000000000000000008F4210000441FFFEA6
-:1047F0003102FFFF10400007000000009202000499
-:104800003042004014400003000000008F421018A6
-:10481000ACC20000960200063042FFFF24420002B4
-:10482000000210430002104003628821962200001B
-:104830001120000D3044FFFF00A710218F830038A6
-:104840008F45101C000210820002108000431021CE
-:10485000AC45000030A6FFFF0E00058D00052C02C0
-:1048600000402021A6220000920300042402FF80C1
-:1048700000431024304200FF1040001F00000000E1
-:1048800092020005304200021040001B00000000B0
-:104890009742100C2442FFFEA742101600000000B1
-:1048A0003C02040034420030AF421000000000001F
-:1048B0000000000000000000000000008F42100017
-:1048C0000441FFFE000000009742100C8F45101CB1
-:1048D0003042FFFF244200300002108200021080AC
-:1048E000005B1021AC45000030A6FFFF0E00058DD7
-:1048F00000052C02A6220000960400022484000871
-:104900000E0001E93084FFFF974401040E0001F717
-:104910003084FFFF8FBF00188FB100148FB00010DC
-:104920003C02100027BD002003E00008AF420178E0
-:104930003084FFFF308200078F8500241040000282
-:10494000248300073064FFF800A4102130421FFFC9
-:1049500003421821247B4000AF850028AF82002449
-:1049600003E00008AF4200843084FFFF3082000F74
-:104970008F85002C8F860034104000022483000FA6
-:104980003064FFF000A410210046182BAF850030E2
-:104990000046202314600002AF82002CAF84002C5C
-:1049A0008F82002C340480000342182100641821F7
-:1049B000AF83003803E00008AF4200808F8200140C
-:1049C000104000088F8200048F82FFDC1440000535
-:1049D0008F8200043C02FFBF3442FFFF008220248C
-:1049E0008F82000430430006240200021062000F90
-:1049F0003C0201012C620003504000052402000427
-:104A00001060000F3C0200010A00023000000000AC
-:104A100010620005240200061462000C3C02011121
-:104A20000A000229008210253C0200110082102594
-:104A3000AF421000240200010A000230AF82000CD5
-:104A400000821025AF421000AF80000C0000000073
-:104A5000000000000000000003E00008000000006B
-:104A60008F82000C10400004000000008F421000F4
-:104A70000441FFFE0000000003E000080000000009
-:104A80008F8200102443F800000231C224C2FFF0DC
-:104A90002C63030110600003000210420A00025759
-:104AA000AC8200008F85001800C5102B1440000B4D
-:104AB0000000182100C51023244700018F82001C2C
-:104AC00000A210212442FFFF0046102B5440000496
-:104AD0002402FFFF0A000257AC8700002402FFFFF8
-:104AE0000A000260AC8200008C82000000021940C3
-:104AF000006218210003188000621821000318804A
-:104B00003C0208002442175C0062182103E0000800
-:104B10000060102127BDFFD8AFBF0020AFB1001C3F
-:104B2000AFB000183C0460088C8250002403FF7F63
-:104B30003C066000004310243442380CAC82500024
-:104B40008CC24C1C3C1A8000000216023042000F3E
-:104B500010400007AF82001C8CC34C1C3C02001F9D
-:104B60003442FC0000621824000319C2AF8300180D
-:104B70008F420008275B400034420001AF4200082A
-:104B8000AF8000243C02601CAF400080AF40008436
-:104B90008C4500088CC308083402800003422021A1
-:104BA0002402FFF0006218243C0200803C0108004F
-:104BB000AC2204203C025709AF8400381462000480
-:104BC000AF850034240200010A000292AF82001473
-:104BD000AF8000148F4200003842000130420001D3
-:104BE0001440FFFC8F8200141040001600000000EB
-:104BF00097420104104000058F83000014600007F5
-:104C00002462FFFF0A0002A72C62000A2C62001037
-:104C1000504000048F83000024620001AF82000036
-:104C20008F8300002C62000A144000032C620007EE
-:104C30000A0002AEAF80FFDC104000022402000137
-:104C4000AF82FFDC8F4301088F44010030622000F7
-:104C5000AF83000410400008AF8400103C0208003D
-:104C60008C42042C244200013C010800AC22042C9C
-:104C70000A00058A3C0240003065020014A00003CF
-:104C800024020F001482026024020D0097420104E6
-:104C9000104002C83C02400030624000144000ADA9
-:104CA0008F8200388C4400088F4201780440FFFE58
-:104CB00024020800AF42017824020008A742014004
-:104CC000A7400142974201048F8400043051FFFF46
-:104CD0003082000110400007022080212623FFFEC1
-:104CE000240200023070FFFFA74201460A0002DBE7
-:104CF000A7430148A74001463C0208008C42043CFF
-:104D00001440000D8F8300103082002014400002F8
-:104D10002403000924030001006020218F83001078
-:104D2000240209005062000134840004A744014AAF
-:104D30000A0002F60000000024020F0014620005C1
-:104D400030820020144000062403000D0A0002F502
-:104D50002403000514400002240300092403000179
-:104D6000A743014A3C0208008C4204203C0400484E
-:104D70000E00020C004420250E0002350000000049
-:104D80008F82000C1040003E000000008F42100097
-:104D90003C03002000431024104000398F8200049F
-:104DA000304200021040003600000000974210140C
-:104DB0001440003300000000974210088F8800382C
-:104DC0003042FFFF244200060002188200033880B0
-:104DD00000E83021304300018CC400001060000462
-:104DE000304200030000000D0A00033700E81021E4
-:104DF000544000103084FFFF3C05FFFF0085202455
-:104E0000008518260003182B0004102B00431024E3
-:104E10001040000500000000000000000000000D30
-:104E200000000000240002228CC200000A000336A9
-:104E3000004520253883FFFF0003182B0004102BAA
-:104E40000043102410400005000000000000000096
-:104E50000000000D000000002400022B8CC20000A6
-:104E60003444FFFF00E81021AC4400003C0208007D
-:104E70008C420430244200013C010800AC22043082
-:104E80008F6200008F840038AF8200088C8300009E
-:104E90003402FFFF1462000F000010213C050800DF
-:104EA0008CA504543C0408008C84045000B02821D4
-:104EB00000B0302B00822021008620213C01080018
-:104EC000AC2504543C010800AC2404500A000580C1
-:104ED000240400088C820000304201001040000FC2
-:104EE000000010213C0508008CA5044C3C0408007F
-:104EF0008C84044800B0282100B0302B008220218F
-:104F0000008620213C010800AC25044C3C0108002F
-:104F1000AC2404480A000580240400083C0508006D
-:104F20008CA504443C0408008C84044000B0282173
-:104F300000B0302B00822021008620213C01080097
-:104F4000AC2504443C010800AC2404400A00058060
-:104F5000240400088F6200088F620000000216021D
-:104F6000304300F0240200301062000524020040AB
-:104F7000106200E08F8200200A00058824420001B0
-:104F800014A0000500000000000000000000000D5B
-:104F900000000000240002568F4201780440FFFE0A
-:104FA000000000000E00023D27A400101440000580
-:104FB00000408021000000000000000D0000000003
-:104FC0002400025D8E020000104000050000000079
-:104FD000000000000000000D00000000240002603E
-:104FE0008F62000C04430003240200010A00042E17
-:104FF000AE000000AE0200008F8200388C4800082E
-:10500000A20000078F65000C8F64000430A3FFFF2F
-:105010000004240200852023308200FF0043102179
-:1050200024420005000230832CC20081A605000A3C
-:1050300014400005A2040004000000000000000D60
-:1050400000000000240002788F8500380E0005ABB8
-:10505000260400148F6200048F430108A602000892
-:105060003C021000006218241060000800000000DC
-:1050700097420104920300072442FFEC34630002CC
-:105080003045FFFF0A0003C3A20300079742010453
-:105090002442FFF03045FFFF960600082CC20013A3
-:1050A00054400005920300079202000734420001B9
-:1050B000A20200079203000724020001106200050B
-:1050C000240200031062000B8F8200380A0003E004
-:1050D00030C6FFFF8F8200383C04FFFF8C43000C7A
-:1050E0000064182400651825AC43000C0A0003E096
-:1050F00030C6FFFF3C04FFFF8C43001000641824FF
-:1051000000651825AC43001030C6FFFF24C2000222
-:1051100000021083A20200058F830038304200FF96
-:1051200000021080004328218CA800008CA20000FF
-:1051300024030004000217021443001200000000C0
-:10514000974201043C03FFFF010318243042FFFF94
-:10515000004610232442FFFE00624025ACA8000058
-:1051600092030005306200FF000210800050102101
-:10517000904200143042000F004310210A00041531
-:10518000A20200068CA40004974201049603000AC0
-:105190003088FFFF3042FFFF004610232442FFD635
-:1051A0000002140001024025ACA80004920200078E
-:1051B000920400052463002800031883006418216A
-:1051C00034420004A2030006A20200078F820004FA
-:1051D0002403FFFB3442000200431024AF8200048A
-:1051E000920300068F87003800031880007010219A
-:1051F0008C4400203C02FFF63442FFFF0082402432
-:1052000000671821AE04000CAC68000C9205000683
-:105210003C03FF7F8E02000C0005288000B0202197
-:105220003463FFFF010330249488002600A728215F
-:1052300000431024AE02000CAC860020AC88002491
-:10524000ACA8001024020010A74201402402000272
-:10525000A7400142A7400144A742014697420104EA
-:105260003C0400082442FFFEA7420148240200013A
-:105270000E00020CA742014A9603000A92020004A3
-:105280000043102124420002304200070002102394
-:10529000304200070E000235AE0200108F6200009F
-:1052A0003C0308008C63044424040010AF8200080F
-:1052B000974201043042FFFF2442FFFE00403821A4
-:1052C000000237C33C0208008C42044000671821EA
-:1052D0000067282B00461021004510213C010800E2
-:1052E000AC2304443C010800AC2204400A0005152C
-:1052F0000000000014A000050000000000000000F5
-:105300000000000D000000002400030A8F42017815
-:105310000440FFFE000000000E00023D27A4001420
-:105320001440000500408021000000000000000D36
-:1053300000000000240003118E020000544000060B
-:1053400092020007000000000000000D00000000B5
-:105350002400031C920200073042000410400005A4
-:105360008F8200042403FFFB344200020043102418
-:10537000AF8200048F620004044300089202000719
-:10538000920200068E03000CAE00000000021080A6
-:1053900000501021AC43002092020007304200046C
-:1053A000544000099602000A920200053C030001E5
-:1053B00000021080005010218C46001800C33021DC
-:1053C000AC4600189602000A9206000427710008F5
-:1053D0000220202100C2302124C600052605001429
-:1053E0000E0005AB00063082920400068F650004B3
-:1053F0003C027FFF00042080009120218C83000468
-:105400003442FFFF00A2282400651821AC83000469
-:105410009202000792040005920300043042000447
-:105420001040001496070008308400FF000420801C
-:10543000009120218C860004974201049605000A01
-:10544000306300FF3042FFFF004310210045102170
-:1054500030E3FFFF004310232442FFD830C6FFFF94
-:105460000002140000C23025AC8600040A0004C902
-:1054700092030007308500FF0005288000B1282135
-:105480008CA4000097420104306300FF3042FFFF0C
-:1054900000431021004710233C03FFFF008320241A
-:1054A0003042FFFF00822025ACA4000092030007D9
-:1054B0002402000110620006000000002402000324
-:1054C00010620011000000000A0004EC8E030010BE
-:1054D00097420104920300049605000A8E24000CF2
-:1054E00000431021004510212442FFF23C03FFFF3E
-:1054F000008320243042FFFF00822025AE24000CD0
-:105500000A0004EC8E030010974201049203000489
-:105510009605000A8E24001000431021004510213A
-:105520002442FFEE3C03FFFF008320243042FFFFB4
-:1055300000822025AE2400108E0300102402000AF1
-:10554000A7420140A74301429603000A92020004C9
-:105550003C04004000431021A7420144A7400146FB
-:1055600097420104A7420148240200010E00020CE8
-:10557000A742014A0E000235000000008F620000C1
-:105580009203000400002021AF820008974201042A
-:105590009606000A3042FFFF0062182100602821B1
-:1055A0003C0308008C6304443C0208008C42044025
-:1055B00000651821004410210065382B0047102198
-:1055C0003C010800AC2304443C010800AC22044028
-:1055D00092040004008620212484000A3084FFFF06
-:1055E0000E0001E900000000974401043084FFFF31
-:1055F0000E0001F7000000003C021000AF420178ED
-:105600000A0005878F82002014820027306200067E
-:1056100097420104104000673C02400030624000A5
-:105620001040000500000000000000000000000D18
-:1056300000000000240004208F4201780440FFFE97
-:1056400024020800AF42017824020008A74201406A
-:10565000A74001428F8200049743010430420001B9
-:10566000104000073070FFFF2603FFFE24020002F7
-:10567000A7420146A74301480A00053F2402000D46
-:10568000A74001462402000DA742014A8F62000094
-:1056900024040008AF8200080E0001E900000000A9
-:1056A0000A00051902002021104000423C0240007F
-:1056B00093620000304300F02402001010620005E5
-:1056C00024020070106200358F8200200A000588D5
-:1056D000244200018F620000974301043050FFFF15
-:1056E0003071FFFF8F4201780440FFFE3202000755
-:1056F00000021023304200072403000A2604FFFEA4
-:10570000A7430140A7420142A7440144A7400146E4
-:10571000A75101488F420108304200201440000286
-:105720002403000924030001A743014A0E00020CD0
-:105730003C0400400E000235000000003C07080059
-:105740008CE70444021110212442FFFE3C060800AD
-:105750008CC604400040182100E3382100001021CD
-:105760008F65000000E3402B00C2302126040008B2
-:1057700000C830213084FFFFAF8500083C010800DD
-:10578000AC2704443C010800AC2604400E0001E9AB
-:10579000000000000A000519022020210E00013B34
-:1057A000000000008F82002024420001AF82002010
-:1057B0003C024000AF4201380A00029200000000A3
-:1057C0003084FFFF30C6FFFF00052C0000A628250F
-:1057D0003882FFFF004510210045282B004510218D
-:1057E00000021C023042FFFF0043102100021C0295
-:1057F0003042FFFF004310213842FFFF03E0000862
-:105800003042FFFF3084FFFF30A5FFFF000018216A
-:1058100010800007000000003082000110400002EC
-:1058200000042042006518210A0005A10005284057
-:1058300003E000080060102110C0000624C6FFFF2E
-:105840008CA2000024A50004AC8200000A0005AB75
-:105850002484000403E000080000000010A00008F9
-:1058600024A3FFFFAC860000000000000000000041
-:105870002402FFFF2463FFFF1462FFFA2484000464
-:0858800003E000080000000035
-:04588800000000011B
-:04588C000A00002AE4
-:1058900000000000000000000000000D7478703669
-:1058A0002E322E31610000000602010000000000CF
-:1058B000000001360000EA60000000000000000067
-:1058C00000000000000000000000000000000000D8
-:1058D00000000000000000000000000000000000C8
-:1058E00000000000000000000000000000000016A2
-:1058F00000000000000000000000000000000000A8
-:105900000000000000000000000000000000000097
-:105910000000000000000000000000000000000087
-:10592000000000000000138800000000000005DCFB
-:105930000000000000000000100000030000000054
-:105940000000000D0000000D3C02080024423D68EC
-:105950003C0308002463401CAC4000000043202BA3
-:105960001480FFFD244200043C1D080037BD7FFC6D
-:1059700003A0F0213C100800261000A83C1C0800E1
-:10598000279C3D680E00044E000000000000000D42
-:1059900027BDFFB4AFA10000AFA20004AFA3000871
-:1059A000AFA4000CAFA50010AFA60014AFA700185D
-:1059B000AFA8001CAFA90020AFAA0024AFAB0028FD
-:1059C000AFAC002CAFAD0030AFAE0034AFAF00389D
-:1059D000AFB8003CAFB90040AFBC0044AFBF004817
-:1059E0000E000591000000008FBF00488FBC0044EE
-:1059F0008FB900408FB8003C8FAF00388FAE0034B5
-:105A00008FAD00308FAC002C8FAB00288FAA002404
-:105A10008FA900208FA8001C8FA700188FA6001444
-:105A20008FA500108FA4000C8FA300088FA2000484
-:105A30008FA1000027BD004C3C1B60048F7A5030C2
-:105A4000377B502803400008AF7A00008F86003C67
-:105A50003C0390003C0280000086282500A32025FE
-:105A6000AC4400203C0380008C67002004E0FFFE73
-:105A70000000000003E00008000000000A000070C1
-:105A8000240400018F85003C3C0480003483000125
-:105A900000A3102503E00008AC82002003E000080A
-:105AA000000010213084FFFF30A5FFFF10800007A9
-:105AB0000000182130820001104000020004204242
-:105AC000006518211480FFFB0005284003E0000852
-:105AD0000060102110C00007000000008CA2000030
-:105AE00024C6FFFF24A50004AC82000014C0FFFB05
-:105AF0002484000403E000080000000010A0000857
-:105B000024A3FFFFAC86000000000000000000009E
-:105B10002402FFFF2463FFFF1462FFFA24840004C1
-:105B200003E000080000000090AA00318FAB0010D5
-:105B30008CAC00403C0300FF8D680004AD6C00207D
-:105B40008CAD004400E060213462FFFFAD6D0024A5
-:105B50008CA700483C09FF000109C024AD6700285C
-:105B60008CAE004C0182C82403197825AD6F000467
-:105B7000AD6E002C8CAD0038314A00FFAD6D001CBD
-:105B800094A900323128FFFFAD68001090A70030C3
-:105B9000A5600002A1600004A167000090A300328C
-:105BA000306200FF00021982106000052405000128
-:105BB0001065000E0000000003E00008A16A00016B
-:105BC0008CD80028354A0080AD7800188CCF00149E
-:105BD000AD6F00148CCE0030AD6E00088CC4002C6C
-:105BE000A16A000103E00008AD64000C8CCD001C2C
-:105BF000AD6D00188CC90014AD6900148CC8002468
-:105C0000AD6800088CC70020AD67000C8CC2001482
-:105C10008C8300700043C82B132000070000000095
-:105C20008CC20014144CFFE400000000354A0080D0
-:105C300003E00008A16A00018C8200700A0000E6FF
-:105C4000000000009089003027BDFFF88FA8001CDD
-:105C5000A3A900008FA300003C0DFF8035A2FFFF29
-:105C60008CAC002C00625824AFAB0000A1000004F3
-:105C700000C05821A7A000028D06000400A0482102
-:105C80000167C8218FA50000008050213C18FF7FCC
-:105C9000032C20263C0E00FF2C8C0001370FFFFF49
-:105CA00035CDFFFF3C02FF0000AFC82400EDC0244B
-:105CB00000C27824000C1DC00323682501F870255C
-:105CC000AD0D0000AD0E00048D240024AFAD00002A
-:105CD000AD0400088D2C00202404FFFFAD0C000C47
-:105CE0009547003230E6FFFFAD06001091450048B1
-:105CF00030A200FF000219C2506000018D24003460
-:105D0000AD0400148D4700388FAA001827BD000885
-:105D1000AD0B0028AD0A0024AD07001CAD00002C1F
-:105D2000AD00001803E00008AD00002027BDFFE033
-:105D3000AFB20018AFB10014AFB00010AFBF001C7D
-:105D40009098003000C088213C0D00FF330F007F89
-:105D5000A0CF0000908E003135ACFFFF3C0AFF0061
-:105D6000A0CE000194A6001EA22000048CAB00145B
-:105D70008E29000400A08021016C2824012A4024DF
-:105D80000080902101052025A6260002AE240004F3
-:105D900026050020262400080E000092240600029A
-:105DA00092470030260500282624001400071E0014
-:105DB0000003160324060004044000032403FFFF2D
-:105DC000965900323323FFFF0E000092AE230010DD
-:105DD000262400248FBF001C8FB200188FB100143E
-:105DE0008FB0001024050003000030210A00009C41
-:105DF00027BD002027BDFFD8AFB1001CAFB00018F1
-:105E0000AFBF002090A900302402000100E0502123
-:105E10003123003F00A040218FB000400080882146
-:105E200000C04821106200148FA70038240B000521
-:105E300000A0202100C02821106B00130200302197
-:105E40000E000128000000009225007C30A4000212
-:105E50001080000326030030AE000030260300341B
-:105E60008FBF00208FB1001C8FB000180060102180
-:105E700003E0000827BD00280E0000A7AFB0001007
-:105E80000A00016F000000008FA3003C01002021E8
-:105E90000120282101403021AFA300100E0000EEA8
-:105EA000AFB000140A00016F000000003C06800043
-:105EB00034C20E008C4400108F850044ACA4002036
-:105EC0008C43001803E00008ACA300243C068000CB
-:105ED00034C20E008C4400148F850044ACA4002012
-:105EE0008C43001C03E00008ACA300249382000C48
-:105EF0001040001B2483000F2404FFF000643824AA
-:105F000010E00019978B00109784000E9389000D04
-:105F10003C0A601C0A0001AC0164402301037021AB
-:105F2000006428231126000231C2FFFF30A2FFFFC8
-:105F30000047302B50C0000E00E448218D4D000C6E
-:105F400031A3FFFF00036400000C2C0304A1FFF346
-:105F50000000302130637FFF0A0001A42406000105
-:105F600003E00008000000009784000E00E44821D0
-:105F70003123FFFF3168FFFF0068382B54E0FFF842
-:105F8000A783000E938A000D11400005240F000125
-:105F9000006BC023A380000D03E00008A798000E4B
-:105FA000006BC023A38F000D03E00008A798000E2C
-:105FB00003E000080000000027BDFFE8AFB00010BC
-:105FC0003C10800036030140308BFFFF93AA002B6A
-:105FD000AFBF0014A46B000436040E0094880016B2
-:105FE00030C600FF8FA90030A4680006AC65000829
-:105FF000A0660012A46A001AAC6700208FA5002CCE
-:10600000A4690018012020210E000198AC6500143D
-:106010003C021000AE0201788FBF00148FB0001058
-:1060200003E0000827BD00188F85000024840007C6
-:1060300027BDFFF83084FFF83C06800094CB008A2F
-:10604000316AFFFFAFAA00008FA90000012540239D
-:106050002507FFFF30E31FFF0064102B1440FFF7FC
-:1060600000056882000D288034CC400000AC10216F
-:1060700003E0000827BD00088F8200002486000787
-:1060800030C5FFF800A2182130641FFF03E00008AC
-:10609000AF8400008F87003C8F84004427BDFFB091
-:1060A000AFB70044AFB40038AFB1002CAFBF004869
-:1060B000AFB60040AFB5003CAFB30034AFB2003074
-:1060C000AFB000283C0B80008C860024AD670080B8
-:1060D0008C8A002035670E0035690100ACEA00109B
-:1060E0008C8800248D2500040000B821ACE800183D
-:1060F0008CE3001000A688230000A021ACE300146C
-:106100008CE20018ACE2001C122000FE00E0B0217E
-:10611000936C0008118000F400000000976F0010DD
-:1061200031EEFFFF022E682B15A000EF00000000EB
-:10613000977200103250FFFFAED000003C03800089
-:106140008C740000329300081260FFFD0000000014
-:1061500096D800088EC700043305FFFF30B5000154
-:1061600012A000E4000000000000000D30BFA040BD
-:106170002419004013F9011B30B4A000128000DF85
-:106180000000000093730008126000080000000087
-:10619000976D001031ACFFFF00EC202B1080000346
-:1061A00030AE004011C000D500000000A7850040BF
-:1061B000AF8700389363000802202821AFB1002088
-:1061C000146000F527B40020AF60000C978F0040EA
-:1061D00031F1400016200002240300162403000EB3
-:1061E00024054007A363000AAF650014938A0042A8
-:1061F0008F7000143155000100151240020248252D
-:10620000AF690014979F00408F78001433F9001095
-:1062100003194025AF6800149792004032470008E8
-:1062200010E0016E000000008F6700143C121000A7
-:106230003C11800000F27825AF6F001436230E0069
-:10624000946E000A3C0D81002406000E31CCFFFF45
-:10625000018D2025AF640004A36600029373000A39
-:106260003406FFFC266B0004A36B000A97980040DD
-:10627000330820001100015F000000003C05800091
-:1062800034A90E00979900409538000C978700407C
-:10629000001940423312C0003103000300127B0397
-:1062A00030F11000006F68250011720301AE602507
-:1062B000000C20C0A764001297930040936A000A64
-:1062C000001359823175003C02AA10212450003C71
-:1062D000A3700009953F000C33F93FFFA779001028
-:1062E00097700012936900090130F82127E5000238
-:1062F00030B900070019C02333080007A368000B5A
-:106300009371000997720012976F0010322700FFF7
-:106310008F910038978D004000F21821006F702196
-:1063200001C6602131A6004010C000053185FFFF85
-:1063300000B1102B3C128000104000170000982183
-:106340000225A82B56A0013E8FA500203C0480000A
-:10635000348A0E008D5300143C068000AD530010AB
-:106360008D4B001CAD4B0018AD4500008CCD0000DE
-:1063700031AC00081180FFFD34CE0E0095C300083B
-:1063800000A0882100009021A78300408DC6000452
-:1063900024130001AF860038976F001031F5FFFF1E
-:1063A0008E9F000003F1282310A0011FAE8500007E
-:1063B00093620008144000DD000000000E0001E7B9
-:1063C000240400108F900048004028213C02320035
-:1063D000320600FF000654000142F825260900019C
-:1063E000AF890048ACBF000093790009977800128C
-:1063F000936F000A332800FF3303FFFF01033821A6
-:1064000000076C0031EE00FF01AE6025ACAC00046B
-:106410008F840048978B0040316A20001140010AA8
-:10642000ACA4000897640012308BFFFF06400108FF
-:10643000ACAB000C978E004031C5000814A00002E0
-:1064400026280006262800023C1F800037E70E00A1
-:1064500094F900148CE5001C8F6700049378000207
-:106460003324FFFF330300FFAFA300108F6F00142E
-:10647000AFA800180E0001CBAFAF00142404001029
-:106480000E0001FB000000008E9200001640000587
-:10649000000000008F7800142403FFBF0303A02432
-:1064A000AF7400148F67000C00F5C821AF79000CA1
-:1064B0009375000816A00008000000001260000696
-:1064C000000000008F6800143C0AEFFF3549FFFE12
-:1064D0000109F824AF7F0014A37300088FA50020E2
-:1064E0000A00034F02202021AED100000A00022D35
-:1064F0003C03800014E0FF1E30BFA0400E0001905E
-:106500000000A0212E9100010237B02512C0001812
-:106510008FBF00488F87003C24170F0010F700D46E
-:106520003C0680008CD901780720FFFE241F0F0055
-:1065300010FF00F634CA0E008D56001434C7014017
-:1065400024080240ACF600048D49001C3C141000E5
-:10655000ACE90008A0E00012A4E0001AACE00020C2
-:10656000A4E00018ACE80014ACD401788FBF004858
-:106570008FB700448FB600408FB5003C8FB4003811
-:106580008FB300348FB200308FB1002C8FB0002851
-:1065900003E0000827BD00508F9100389788004025
-:1065A0003C1280000220A8213107004014E0FF7C4B
-:1065B00000009821977900108F9200383338FFFF40
-:1065C000131200A8000020210080A021108000F3F9
-:1065D00000A088211620FECE000000000A00031F44
-:1065E0002E9100013C0380008C6201780440FFFE84
-:1065F000240808008F860000AC6801783C03800006
-:10660000946D008A31ACFFFF01865823256AFFFF95
-:1066100031441FFF2C8900081520FFF900000000FD
-:106620008F8F0048347040008F83003C00E0A02131
-:10663000240E0F0025E70001AF87004800D030216D
-:10664000023488233C08800031F500FF106E0005FD
-:106650002407000193980042331300010013924075
-:1066600036470001001524003C0A0100008A482535
-:10667000ACC900008F82004830BF003630B9000836
-:10668000ACC200041320009900FF982535120E00BB
-:106690009650000A8F8700003C0F81003203FFFFF5
-:1066A00024ED000835060140006F60253C0E100007
-:1066B00031AB1FFF269200062405000EACCC002053
-:1066C000026E9825A4C5001AAF8B0000A4D2001852
-:1066D000162000083C1080008F89003C24020F0027
-:1066E0005122000224170001367300400E00018879
-:1066F0003C10800036060E008CCB0014360A014098
-:1067000002402021AD4B00048CC5001CAD450008A3
-:10671000A1550012AD5300140E0001983C15100055
-:10672000AE1501780A00035200000000936F0009C3
-:10673000976E0012936D000B31E500FF00AE202133
-:1067400031AC00FF008C80212602000A3050FFFF90
-:106750000E0001E7020020218F8600483C03410023
-:106760003C05800024CB0001AF8B0048936A0009F0
-:106770009769001230C600FF315F00FF3128FFFF2C
-:1067800003E8382124F900020006C4000319782523
-:1067900001E37025AC4E00008F6D000C34A40E0098
-:1067A000948B001401B26025AC4C00048C85001C55
-:1067B0008F670004936A00023164FFFF314900FFD4
-:1067C000AFA900108F680014AFB100180E0001CB04
-:1067D000AFA800140A0002FD02002021AF600004EF
-:1067E000A360000297980040330820001500FEA324
-:1067F00000003021A760001297840040936B000ACC
-:106800003C10800030931F0000135183014BA821DE
-:1068100026A20028A362000936090E00953F000C4D
-:106820000A000295A77F00108F70001436090040FF
-:106830000E000188AF6900140A0002C900000000C0
-:106840000A00034F000020210641FEFAACA0000C14
-:106850008CAC000C3C0D8000018D90250A0002EAF2
-:10686000ACB2000C000090210A0002C52413000104
-:10687000128000073C028000344B0E009566000831
-:1068800030D3004012600049000000003C06800048
-:106890008CD001780600FFFE34C50E0094B50010C0
-:1068A0003C03050034CC014032B8FFFF03039025C0
-:1068B000AD92000C8CAF0014240D20003C0410009D
-:1068C000AD8F00048CAE001CAD8E0008A1800012BC
-:1068D000A580001AAD800020A5800018AD8D0014A1
-:1068E000ACC401780A0003263C0680008F9F00009C
-:1068F000351801402692000227F9000833281FFFAF
-:10690000A71200180A000391AF8800003C02800023
-:1069100034450140ACA0000C1280001B34530E0023
-:1069200034510E008E370010ACB700048E240018CE
-:106930003C0B8000ACA400083570014024040040EA
-:10694000A20000128FBF0048A600001A8FB70044B3
-:10695000AE0000208FB60040A60000188FB5003CA6
-:10696000AE0400148FB400388FB300348FB20030FF
-:106970008FB1002C8FB000283C02100027BD0050C2
-:1069800003E00008AD6201788E660014ACA6000436
-:106990008E64001C0A00042A3C0B80000E0001904B
-:1069A0002E9100010A0003200237B02500000000EC
-:1069B0000000000D00000000240003690A0004012B
-:1069C0003C06800027BDFFD8AFBF00203C098000F7
-:1069D0003C1F20FFAFB200183C07600035320E00AC
-:1069E0002402001037F9FFFDACE23008AFB3001C01
-:1069F000AFB10014AFB00010AE59000000000000AD
-:106A00000000000000000000000000000000000086
-:106A10003C1800FF3713FFFDAE5300003C0B600431
-:106A20008D7050002411FF7F3C0E0002021178246B
-:106A300035EC380C35CD0109ACED4C18240A0009B1
-:106A4000AD6C50008CE80438AD2A0008AD2000146D
-:106A50008CE54C1C3106FFFF38C42F7100051E0267
-:106A60003062000F2486C0B310400007AF820008D8
-:106A70008CE54C1C3C09001F3528FC0000A818249C
-:106A8000000321C2AF8400048CF108083C0F5709B1
-:106A90002412F0000232702435F0001001D060267C
-:106AA00001CF68262DAA00012D8B0001014B38254E
-:106AB00050E00009A380000C3C1F601C8FF8000808
-:106AC00024190001A399000C33137C00A793001034
-:106AD000A780000EA380000DAF80004814C0000303
-:106AE000AF8000003C066000ACC0442C0E0005B92D
-:106AF0003C1080000E000F1A361101003C120800F5
-:106B000026523DD03C13080026733E508E030000F1
-:106B100038640001308200011440FFFC3C0B800A05
-:106B20008E2600002407FF8024C90240312A007FFE
-:106B3000014B402101272824AE060020AF880044E5
-:106B4000AE0500243C048000AF86003C8C8C0178AC
-:106B50000580FFFE24180800922F0008AC980178E9
-:106B6000A38F0042938E004231CD000111A0000F8F
-:106B700024050D0024DFF8002FF903011320001C69
-:106B8000000629C224A4FFF0000410420002314094
-:106B90000E00020200D2D8213C0240003C068000D8
-:106BA000ACC201380A0004A00000000010C5002398
-:106BB000240D0F0010CD00273C1F800837F90080FE
-:106BC00093380000240E0050330F00FF15EEFFF342
-:106BD0003C0240000E000A36000000003C0240006B
-:106BE0003C068000ACC201380A0004A0000000008E
-:106BF0008F83000400A3402B1500000B8F8B00082F
-:106C0000006B50212547FFFF00E5482B15200006AB
-:106C100000A36023000C19400E0002020073D8216B
-:106C20000A0004C43C0240000000000D0E000202F5
-:106C3000000000000A0004C43C0240003C1B0800A5
-:106C4000277B3F500E000202000000000A0004C42F
-:106C50003C0240003C1B0800277B3F700E000202F4
-:106C6000000000000A0004C43C0240003C0660042E
-:106C70003C09080025290104ACC9502C8CC85000DF
-:106C80003C0580003C02000235070080ACC7500084
-:106C90003C040800248415A43C0308002463155C0C
-:106CA000ACA50008ACA2000C3C010800AC243D607F
-:106CB0003C010800AC233D6403E00008240200010D
-:106CC00000A030213C1C0800279C3D683C0C0400BF
-:106CD0003C0B0002008B3826008C40262CE2000181
-:106CE0000007502B2D050001000A48803C030800D6
-:106CF00024633D60004520250123182110800003F6
-:106D000000001021AC6600002402000103E000082E
-:106D1000000000003C1C0800279C3D683C0B040060
-:106D20003C0A0002008A3026008B38262CC2000163
-:106D30000006482B2CE50001000940803C030800B8
-:106D400024633D60004520250103182110800005C3
-:106D5000000010213C0C0800258C155CAC6C000078
-:106D60002402000103E00008000000003C090002CA
-:106D70003C08040000883026008938262CC3000116
-:106D8000008028212CE40001008310251040000B16
-:106D9000000030213C1C0800279C3D683C0A800014
-:106DA0008D4E00082406000101CA6825AD4D00087B
-:106DB0008D4C000C01855825AD4B000C03E00008FC
-:106DC00000C010213C1C0800279C3D683C05800049
-:106DD0008CA6000C000420272402000100C4182403
-:106DE00003E00008ACA3000C3C0200021082000B80
-:106DF0003C0560003C070400108700030000000011
-:106E000003E00008000000008CA908D0240AFFFD60
-:106E1000012A402403E00008ACA808D08CA408D0C4
-:106E20002406FFFE0086182403E00008ACA308D067
-:106E30003C05601A34A600108CC3008027BDFFF803
-:106E40008CC50084AFA3000093A4000024020001BD
-:106E500010820003AFA5000403E0000827BD00086E
-:106E600093A7000114E0001497AC000297B8000249
-:106E70003C0F8000330EFFFC01CF6821ADA5000060
-:106E8000A3A000003C0660008CC708D02408FFFEC9
-:106E90003C04601A00E82824ACC508D08FA3000485
-:106EA0008FA200003499001027BD0008AF22008097
-:106EB00003E00008AF2300843C0B8000318AFFFC14
-:106EC000014B48218D2800000A00057DAFA8000471
-:106ED00027BDFFE8AFBF00103C1C0800279C3D68A1
-:106EE0003C0580008CA4000C8CA200043C03000232
-:106EF0000044282410A0000A00A318243C06040023
-:106F00003C0400021460000900A610241440000F85
-:106F10003C0404000000000D3C1C0800279C3D6858
-:106F20008FBF001003E0000827BD00183C020800D6
-:106F30008C423D600040F809000000003C1C080045
-:106F4000279C3D680A0005A68FBF00103C02080080
-:106F50008C423D640040F809000000000A0005ACC6
-:106F600000000000000411C003E0000824420240B9
-:106F70003C04080024843FB42405001A0A00009C45
-:106F80000000302127BDFFE0AFB000103C108000B2
-:106F9000AFBF0018AFB100143611010092220009F2
-:106FA0000E0005B63044007F8E3F00008F89003C04
-:106FB0003C0F008003E26021258800400049F82151
-:106FC000240DFF80310E00783198007835F90001EA
-:106FD00035F100020319382501D14825010D30246F
-:106FE00003ED5824018D2824240A00402404008045
-:106FF000240300C0AE0B0024AE000810AE0A081433
-:10700000AE040818AE03081CAE050804AE0708203D
-:10701000AE060808AE090824360909009539000CA7
-:107020003605098033ED007F3338FFFF001889C033
-:10703000AE110800AE0F0828952C000C8FBF001869
-:107040008FB10014318BFFFF000B51C0AE0A002C32
-:107050008CA400508FB000108CA3003C8D2700043E
-:107060008CA8001C8CA600383C0E800A01AE1021B2
-:1070700027BD0020AF820044AF840050AF8300548E
-:10708000AF87004CAF88005C03E00008AF8600606B
-:107090003C09080091293FD924A800023C051100B1
-:1070A00000093C0000E8302500C5182524820008AE
-:1070B000AC83000003E00008AC8000043C098000C1
-:1070C000352309009128010B906A00112402002841
-:1070D00000804821314700FF00A0702100C06821D6
-:1070E0003108004010E20002340C86DD240C080058
-:1070F0003C0A800035420A9A94470000354B0A9CAE
-:1071000035460AA030F9FFFFAD3900008D78000048
-:10711000354B0A8024040001AD3800048CCF0000F8
-:10712000AD2F00089165001930A300031064009092
-:1071300028640002148000AF240500021065009E40
-:10714000240F0003106F00B435450AA4240A080078
-:10715000118A0048000000005100003D3C0B8000F7
-:107160003C048000348309009067001230E200FF85
-:10717000004D7821000FC880272400013C0A8000C0
-:10718000354F090091E50019354C09808D8700289D
-:1071900030A300FF00031500004758250004C40079
-:1071A0003C19600001793025370806FFAD26000044
-:1071B000AD2800048DEA002C25280028AD2A0008FF
-:1071C0008DEC0030AD2C000C8DE50034AD250010A9
-:1071D0008DE400383C05800034AC093CAD2400143B
-:1071E0008DE3001CAD2300188DE70020AD27001CA7
-:1071F0008DE20024AD2200208DF9002834A2010088
-:10720000AD3900248D830000AD0E000434B90900AF
-:10721000AD0300008C47000C25020014AD070008E8
-:10722000932B00123C04080090843FD8AD0000105E
-:10723000317800FF030D302100064F0000047C0070
-:10724000012F702535CDFFFC03E00008AD0D000CCB
-:1072500035780900930600123C05080094A53FC844
-:1072600030C800FF010D5021000A60800A00063C72
-:10727000018520211500005B000000003C0808008B
-:1072800095083FCE3C06080094C63FC80106102171
-:107290003C0B80003579090093380011932A0019BE
-:1072A00035660A80330800FF94CF002A0008608208
-:1072B000314500FF978A0058000C1E00000524008D
-:1072C0003047FFFF006410250047C02501EA302148
-:1072D0003C0B4000030B402500066400AD28000075
-:1072E000AD2C0004932500183C030006252800144B
-:1072F00000053E0000E31025AD2200088F24002C7D
-:107300003C05800034AC093CAD24000C8F38001CD7
-:1073100034A20100254F0001AD3800108D8300001C
-:10732000AD0E000431EB7FFFAD0300008C47000C75
-:1073300034B90900A78B0058AD070008932B001241
-:107340003C04080090843FD825020014317800FFE7
-:10735000030D302100064F0000047C00012F702532
-:1073600035CDFFFCAD00001003E00008AD0D000CB2
-:107370003C02080094423FD23C05080094A53FC857
-:1073800035440AA43C07080094E73FC4948B0000EE
-:107390000045C8210327C023000B1C002706FFF26D
-:1073A00000665025AD2A000CAD200010AD2C001455
-:1073B0000A00063025290018354F0AA495E500007B
-:1073C000956400280005140000043C003459810035
-:1073D00000EC5825AD39000CAD2B00100A0006302A
-:1073E000252900143C0C0800958C3FCE0A0006812C
-:1073F000258200015460FF56240A080035580AA46B
-:107400009706000000061C00006C5025AD2A000CF9
-:107410000A000630252900103C03080094633FD27F
-:107420003C07080094E73FC83C0F080095EF3FC4B5
-:1074300094A400009579002800671021004F58237C
-:1074400000041C00001934002578FFEE00D87825D0
-:10745000346A8100AD2A000CAD2F0010AD2000145D
-:10746000AD2C00180A0006302529001C03E0000896
-:10747000240207D027BDFFE0AFB20018AFB100145F
-:10748000AFB00010AFBF001C0E00007C0080882150
-:107490008F8800548F87004C3C05800834B20080F0
-:1074A000011128213C10800024020080240300C028
-:1074B00000A72023AE0208183C068008AE03081C73
-:1074C00018800004AF850054ACC500048CC90004CA
-:1074D000AF89004C12200009360409800E0006F81E
-:1074E00000000000924C00278E0B007401825004B3
-:1074F000014B3021AE46000C360409808C8E001CF6
-:107500008F8F005C01CF682319A000048FBF001C7F
-:107510008C90001CAF90005C8FBF001C8FB20018D5
-:107520008FB100148FB000100A00007E27BD00202C
-:107530008F8600508F8300548F82004C3C0580085A
-:1075400034A40080AC860050AC83003C03E000080B
-:10755000ACA200043C0308008C63005427BDFFF874
-:10756000308400FF2462000130A500FF3C010800C8
-:10757000AC22005430C600FF3C0780008CE8017844
-:107580000500FFFE3C0C7FFFA3A400038FAA0000B0
-:10759000358BFFFF014B4824000627C001244025FE
-:1075A000AFA8000034E201009043000AA3A000024B
-:1075B0003C1980FFA3A300018FAF000030AE007F15
-:1075C0003738FFFF01F86024000E6E003C0A0020EF
-:1075D00034E50140018D5825354920002406FF80FF
-:1075E0003C04100027BD0008ACAB000CACA9001493
-:1075F000A4A00018A0A6001203E00008ACE40178E3
-:10760000308800FF30A700FF3C0380008C620178C7
-:107610000440FFFE3C0C8000358A0A008D4B0020A0
-:107620003584014035850980AC8B00048D490024E8
-:107630000007302B00061540AC890008A088001018
-:1076400090A3004CA083002D03E00008A480001844
-:1076500027BDFFE8308400FFAFBF00100E00075DBC
-:1076600030A500FF8F8300548FBF00103C068000C0
-:1076700034C50140344700402404FF903C02100010
-:1076800027BD0018ACA3000CA0A40012ACA70014E6
-:1076900003E00008ACC2017827BDFFE03C08800889
-:1076A000AFBF001CAFB20018AFB10014AFB00010F4
-:1076B000351000808E0600183C078000309200FFD5
-:1076C00000C72025AE0400180E00007C30B100FF7A
-:1076D00092030005346200080E00007EA20200053D
-:1076E000024020210E0007710220282102402021A3
-:1076F0008FBF001C8FB200188FB100148FB0001024
-:1077000024050005240600010A00073227BD0020D9
-:107710003C05800034A309809066000830C2000850
-:107720001040000F3C0A01013549080AAC890000ED
-:107730008CA80074AC8800043C07080090E73FD890
-:1077400030E5001050A00008AC8000083C0D800817
-:1077500035AC00808D8B0058AC8B00082484000C65
-:1077600003E00008008010210A0007B52484000C03
-:1077700027BDFFE83C098000AFB00010AFBF001488
-:107780003526098090C800092402000600A058216F
-:10779000310300FF35270900008080212405000403
-:1077A0001062007B2408000294CF005C3C0E0204AF
-:1077B00031EDFFFF01AE6025AE0C000090CA00085D
-:1077C00031440020108000080000000090C2004EEC
-:1077D0003C1F010337F90300305800FF031930251F
-:1077E00024050008AE06000490F9001190E600128E
-:1077F00090E40011333800FF0018708230CF00FF92
-:1078000001CF5021014B6821308900FF31AAFFFFD1
-:1078100039230028000A60801460002C020C4823E1
-:1078200090E400123C198000372F0100308C00FFDB
-:10783000018B1821000310800045F821001F8400EF
-:10784000360706FFAD270004373F090093EC00110F
-:1078500093EE0012372609800005C0828DE4000CEB
-:107860008CC5003431CD00FF01AB10210058182128
-:1078700000A4F8230008840000033F0000F0302536
-:1078800033F9FFFF318F00FC00D97025015820210A
-:1078900001E9682100045080ADAE000C0E00007CB0
-:1078A000012A80213C088008240B00043505008053
-:1078B0000E00007EA0AB0009020010218FBF001453
-:1078C0008FB0001003E0000827BD001890EC0011F5
-:1078D00090E300193C18080097183FCE318200FF52
-:1078E0000002F882307000FF001FCE0000103C0044
-:1078F0000327302500D870253C0F400001CF6825B4
-:107900003C198000AD2D0000373F090093EC0011B9
-:1079100093EE0012372F0100372609800005C08240
-:107920008DE4000C8CC5003431CD00FF01AB10217B
-:107930000058182100A4F8230008840000033F0029
-:1079400000F0302533F9FFFF318F00FC00D970259E
-:107950000158202101E9682100045080ADAE000CDF
-:107960000E00007C012A80213C088008240B0004C2
-:10797000350500800E00007EA0AB0009020010213A
-:107980008FBF00148FB0001003E0000827BD00185F
-:107990000A0007C72408001227BDFFD03C0380005F
-:1079A000AFB60028AFB50024AFB40020AFB10014CB
-:1079B000AFBF002CAFB3001CAFB20018AFB00010C7
-:1079C0003467010090E6000B309400FF30B500FFF3
-:1079D00030C200300000B021104000990000882122
-:1079E000346409809088000800082E0000051E03FA
-:1079F000046000C0240400048F8600543C01080089
-:107A0000A0243FD83C0C8000AD8000483C0480009E
-:107A1000348E010091CD000B31A5002010A000078D
-:107A20003C0780003493098092720008001286009F
-:107A300000107E0305E000C43C1F800834EC010008
-:107A4000918A000B34EB09809169000831440040B1
-:107A50000004402B3123000800C898231460000262
-:107A600024120003000090213C10800036180A8088
-:107A700036040900970E002C9083001190890012A3
-:107A800093050018307F00FF312800FF02481021C5
-:107A90000002C880930D0018033F782101F13021C6
-:107AA00030B100FF00D11821A78E00583C0108001A
-:107AB000A4263FCE3C010800A4233FD015A000021D
-:107AC000000000000000000D920B010B3065FFFF6D
-:107AD0003C010800A4233FD2316A00403C01080069
-:107AE000A4203FC83C010800A4203FC4114000026C
-:107AF00024A4000A24A4000B3091FFFF0E0001E72C
-:107B0000022020219206010B3C0C0800958C3FD2EC
-:107B1000004020210006698231A700010E00060105
-:107B20000187282100402021026028210E00060C38
-:107B3000024030210E0007A10040202116C000693C
-:107B4000004020219212010B3256004012C0000565
-:107B50003C0500FF8C93000034AEFFFF026E8024D2
-:107B6000AC9000000E0001FB022020213C0F080019
-:107B700091EF3FD831F10003122000163C1380082A
-:107B80008F8200543C09800835280080245F000162
-:107B9000AD1F003C3C0580088CB9000403E02021A7
-:107BA000033FC0231B000002AF9F00548CA40004BD
-:107BB0000E0006F8ACA400043C0780008CEB0074B7
-:107BC0003C04800834830080004B5021AC6A000CD8
-:107BD0003C138008367000800280202102A02821FA
-:107BE000A200006B0E00075D3C1480008F920054D1
-:107BF000368C0140AD92000C8F8600483C15100079
-:107C0000344D000624D60001AF9600488FBF002CEB
-:107C1000A18600128FB60028AD8D00148FB3001C12
-:107C2000AE9501788FB200188FB500248FB4002074
-:107C30008FB100148FB0001003E0000827BD0030A2
-:107C400034640980908F0008000F7600000E6E03E8
-:107C500005A00033347F090093F8001B241900109D
-:107C60003C010800A0393FD8331300021260FF67BF
-:107C70008F8600548F8200601446FF653C048000AC
-:107C80000E00007C000000003C0480083485008069
-:107C900090A8000924060016310300FF1066000DAD
-:107CA0000000000090AB00093C07080090E73FD8B7
-:107CB00024090008316400FF34EA00013C01080097
-:107CC000A02A3FD81089002F240C000A108C00280D
-:107CD0002402000C0E00007E000000000A00086074
-:107CE0008F8600540E0007B9024028210A0008AE12
-:107CF000004020213C0B8008356A00808D460054EE
-:107D00008CE9000C1120FF3DAF86005424070014BD
-:107D10003C010800A0273FD80A00085F3C0C800007
-:107D200090910008241200023C010800A0323FD8C4
-:107D3000323000201200000B241600018F86005400
-:107D40000A0008602411000837F800808F0200380C
-:107D5000AFE200048FF90004AF19003C0A00086C80
-:107D60003C0780008F8600540A000860241100043C
-:107D7000A0A200090E00007E000000000A000860BA
-:107D80008F860054240200140A00093AA0A20009B8
-:107D900027BDFFE8AFB000103C108000AFBF00145B
-:107DA00036020100904400090E00075D2405000121
-:107DB0003C0480089099000E34830080909F000F4F
-:107DC000906F00269089000A33F800FF00196E00BA
-:107DD0000018740031EC00FF01AE5025000C5A0071
-:107DE000014B3825312800FF36030140344560003F
-:107DF00000E830252402FF813C041000AC66000C32
-:107E00008FBF0014AC650014A0620012AE040178AC
-:107E10008FB0001003E0000827BD001827BDFFE861
-:107E2000308400FFAFBF00100E00075D30A500FFDB
-:107E30003C05800034A40140344700402406FF92F2
-:107E4000AC870014A08600128F8300548FBF0010EF
-:107E50003C02100027BD0018AC83000C03E00008B2
-:107E6000ACA2017827BDFFD8AFB00010308400FF6E
-:107E700030B000FF3C058000AFB10014AFBF002060
-:107E8000AFB3001CAFB20018000410C234A601004A
-:107E900032030002305100011460000790D2000943
-:107EA0003C098008353300809268000531070008DE
-:107EB00010E0000C308A0010024020210E000783E1
-:107EC00002202821240200018FBF00208FB3001C54
-:107ED0008FB200188FB100148FB0001003E00008BB
-:107EE00027BD00281540003434A50A008CB80024B2
-:107EF0008CAF0008130F004B000038213C0D8008A8
-:107F000035B30080926C006824060002318B00FFBC
-:107F1000116600843C06800034C201009263004C6C
-:107F200090590009307F00FF53F900043213007CA0
-:107F300010E00069000000003213007C5660005C15
-:107F40000240202116200009320D00013C0C800067
-:107F500035840100358B0A008D6500248C86000471
-:107F600014A6FFD900001021320D000111A0000E4F
-:107F7000024020213C188000371001008E0F000CB9
-:107F80008F8E005011EE0008000000000E00084324
-:107F9000022028218E19000C3C1F800837F0008039
-:107FA000AE190050024020210E0007710220282146
-:107FB0000A00098F240200013C0508008CA500641A
-:107FC00024A400013C010800AC2400641600000D4C
-:107FD00000000000022028210E000771024020212D
-:107FE000926E0068240C000231CD00FF11AC00221B
-:107FF000024020210E000941000000000A00098F04
-:10800000240200010E00007024040001926B002580
-:10801000020B30250E00007EA26600250A0009D35F
-:10802000022028218E6200188CDF00048CB9002405
-:1080300000021E0217F9FFB13065007F9268004C04
-:10804000264400013093007F12650040310300FF99
-:108050001464FFAB3C0D80082647000130F1007F1F
-:1080600030E200FF1225000B2407000100409021A0
-:108070000A00099C24110001240500040E000732A7
-:10808000240600010E000941000000000A00098FCB
-:10809000240200012405FF8002452024008590264B
-:1080A000324200FF004090210A00099C2411000187
-:1080B0000E000843022028213207003010E0FFA103
-:1080C00032100082024020210E0007830220282166
-:1080D0000A00098F240200018E6900180240202145
-:1080E00002202821012640250E000964AE680018F0
-:1080F0009264004C24050003240600010E000732A0
-:10810000308400FF0E0000702404000192710025ED
-:10811000021150250E00007EA26A00250A00098F78
-:10812000240200018E6F00183C18800002402021BC
-:1081300001F87025022028210E000771AE6E00188C
-:108140009264004C0A000A1B24050004324A008095
-:10815000394900801469FF6A3C0D80080A0009F45F
-:108160002647000127BDFFC0AFB000183C108000BB
-:10817000AFBF0038AFB70034AFB60030AFB5002C9A
-:10818000AFB40028AFB30024AFB200200E0005BE8C
-:10819000AFB1001C360201009045000B0E000976BD
-:1081A00090440008144000E78FBF00383C08800866
-:1081B00035070080A0E0006B3606098090C50000FE
-:1081C000240300503C17080026F73F9030A400FF1E
-:1081D0003C13080026733FA0108300033C1080006E
-:1081E0000000B82100009821241F00103611010062
-:1081F00036120A00361509808E5800248E34000489
-:108200008EAF00208F8C00543C010800A03F3FD867
-:1082100036190A80972B002C8EF60000932A00183E
-:108220000298702301EC68233C010800AC2E3FB497
-:108230003C010800AC2D3FB83C010800AC2C3FDCF1
-:10824000A78B005802C0F809315400FF30490002E2
-:10825000152000E930420001504000C49227000977
-:1082600092A9000831280008150000022415000317
-:108270000000A8213C0A80003543090035440A006B
-:108280008C8D00249072001190700012907F00116C
-:10829000325900FF321100FF02B110210002C080EC
-:1082A00033EF00FF0319B021028F702102D4602147
-:1082B00025CB00103C010800A4363FCE3C0108004D
-:1082C000AC2D3FE03C010800A42C3FD03C0108004D
-:1082D000A42B3FCC355601003554098035510E0092
-:1082E0008F8700548F89005C8E850020240800064B
-:1082F000012730233C010800AC283FD400A72823E5
-:1083000004C000B50000902104A000B300C5502BAC
-:10831000114000B5000000003C010800AC263FB849
-:108320008E6200000040F8090000000030460002A4
-:1083300014C0007400408021304B000155600011D2
-:108340008E6200043C0D08008DAD3FBC3C0EC000A9
-:108350003C04800001AE6025AE2C00008C9800002B
-:10836000330F000811E0FFFD00000000963F0008F9
-:1083700024120001A79F00408E390004AF990038F5
-:108380008E6200040040F80900000000020280250F
-:1083900032030002146000B3000000003C09080032
-:1083A00095293FC43C06080094C63FD03C0A08000B
-:1083B000954A3FC63C0708008CE73FBC0126702168
-:1083C0003C0308008C633FE03C08080095083FDA56
-:1083D00001CA20218ED9000C00E92821249F000227
-:1083E00000A878210067C02133E4FFFFAF99005057
-:1083F0003C010800AC383FE03C010800A42F3FC816
-:108400003C010800A42E3FD20E0001E7000000004E
-:108410008F8D0048004020213C010800A02D3FD94D
-:108420008E62000825AC0001AF8C00480040F809BE
-:10843000000000008F85005402A030210E00060CC1
-:10844000004020210E0007A1004020218E6B000C6F
-:108450000160F809004020213C0A0800954A3FD2FB
-:108460003C06080094C63FC6014648212528000264
-:108470000E0001FB3104FFFF3C0508008CA53FB452
-:108480003C0708008CE73FBC00A720233C01080004
-:10849000AC243FB414800006000000003C02080039
-:1084A0008C423FD4344B00403C010800AC2B3FD4FD
-:1084B000124000438F8E00448E2D00108F92004496
-:1084C000AE4D00208E2C0018AE4C00243C04080059
-:1084D00094843FC80E0006FA000000008F9F0054ED
-:1084E0008E6700103C010800AC3F3FDC00E0F8095B
-:1084F000000000003C1908008F393FB41720FF79B5
-:108500008F870054979300583C11800E321601005B
-:108510000E000729A633002C16C0004532030010B8
-:108520005460004C8EE50004320800405500001DE8
-:108530008EF000088EE4000C0080F80900000000B6
-:108540008FBF00388FB700348FB600308FB5002C46
-:108550008FB400288FB300248FB200208FB1001C8D
-:108560008FB0001803E0000827BD00408F86003C54
-:1085700036110E0000072E0000A62025AE04008054
-:108580008E4300208E500024AFA30010AE230014B1
-:108590008FB20010AE320010AE30001C0A000A7517
-:1085A000AE3000180200F809000000008EE4000C54
-:1085B0000080F809000000000A000B2E8FBF003871
-:1085C00024180001240F0001A5C00020A5D8002216
-:1085D0000A000B10ADCF00243C010800AC203FB8CE
-:1085E0000A000AA68E6200003C010800AC253FB8D4
-:1085F0000A000AA68E620000922400090E0007718C
-:10860000000028218FBF00388FB700348FB60030AC
-:108610008FB5002C8FB400288FB300248FB20020B8
-:108620008FB1001C8FB0001803E0000827BD004088
-:108630003C14800092950109000028210E00084397
-:1086400032A400FF320300105060FFB8320800402F
-:108650008EE5000400A0F809000000000A000B28C5
-:10866000320800405240FFA8979300588E340014FF
-:108670008F930044AE7400208E35001CAE7500242C
-:108680000A000B1F979300588F820014000421806A
-:1086900003E00008008210213C07800834E20080DB
-:1086A0009043006900804021106000093C040100F3
-:1086B0003C0708008CE73FDC8F83003000E3202379
-:1086C000048000089389001C14E3000301002021AA
-:1086D00003E00008008010213C04010003E00008D2
-:1086E000008010211120000B006738233C0D800012
-:1086F00035AC0980918B007C316A0002114000206A
-:108700002409003400E9702B15C0FFF1010020217D
-:1087100000E938232403FFFC00A3C82400E3C0249D
-:1087200000F9782B15E0FFEA0308202130C400038C
-:108730000004102314C0001430490003000030214D
-:1087400000A9782101E6702100EE682B11A0FFE05E
-:108750003C0401002D3800010006C82B010548210A
-:108760000319382414E0FFDA2524FFFC2402FFFC5F
-:1087700000A218240068202103E0000800801021D6
-:108780000A000B9E240900303C0C800035860980CD
-:1087900090CB007C316A00041540FFE924060004F8
-:1087A0000A000BAD000030213C0308008C63005C24
-:1087B0008F82001827BDFFE0AFBF0018AFB10014D3
-:1087C00010620005AFB00010000329C024A402808D
-:1087D000AF840014AF8300183C10800036020A00FA
-:1087E00094450032361101000E000B7F30A43FFF8C
-:1087F0008E240000241FFF803C1100800082C021D5
-:10880000031F60243309007F000CC9400329402561
-:10881000330E0078362F00033C0D1000010D50255B
-:1088200001CF5825AE0C002836080980AE0C080C84
-:10883000AE0B082CAE0A0830910300693C06800C90
-:108840000126382110600006AF8700348D09003CF6
-:108850008D03006C0123382318E000820000000023
-:108860003C0B8008356A00803C108000A140006904
-:10887000360609808CC200383C06800034C50A00E8
-:1088800090A8003C310C00201180001AAF8200300B
-:10889000240D00013C0E800035D10A00A38D001C80
-:1088A000AF8000248E2400248F850024240D00082E
-:1088B000AF800020AF8000283C010800A42D3FC6F7
-:1088C0003C010800A4203FDA0E000B830000302199
-:1088D0009228003C8FBF00188FB100148FB0001099
-:1088E00000086142AF82002C27BD002003E0000891
-:1088F0003182000190B80032240E0001330F00FFD6
-:10890000000F2182108E004124190002109900648A
-:1089100034C40AC03C03800034640A008C8F0024F5
-:1089200015E0001E34660900909F003024180005F1
-:1089300033F9003F1338004E240300018F860020D6
-:10894000A383001CAF860028AF8600243C0E800065
-:1089500035D10A008E2400248F850024240D0008C0
-:108960003C010800A42D3FC63C010800A4203FDACA
-:108970000E000B83000000009228003C8FBF0018FF
-:108980008FB100148FB0001000086142AF82002C3C
-:1089900027BD002003E00008318200018C8A000816
-:1089A0008C8B00248CD000643C0E800035D10A00F2
-:1089B000014B2823AF900024A380001CAF85002822
-:1089C0008E2400248F8600208F850024240D00082B
-:1089D0003C010800A42D3FC63C010800A4203FDA5A
-:1089E0000E000B83000000009228003C8FBF00188F
-:1089F0008FB100148FB0001000086142AF82002CCC
-:108A000027BD002003E000083182000190A2003061
-:108A10003051003F5224002834C50AC08CB00024D5
-:108A20001600002234CB09008CA600483C0A7FFFC8
-:108A30003545FFFF00C510243C0E8000AF820020AA
-:108A400035C509008F8800208CAD0060010D602BBA
-:108A500015800002010020218CA400600A000C2275
-:108A6000AF8400208D02006C0A000BFC3C068000E5
-:108A70008C8200488F8600203C097FFF3527FFFF4E
-:108A8000004788243C04800824030001AF9100289B
-:108A9000AC80006CA383001C0A000C30AF8600245D
-:108AA0008C9F00140A000C22AF9F00208D6200688A
-:108AB0000A000C6C3C0E800034C409808C89007064
-:108AC0008CA300140123382B10E0000400000000E8
-:108AD0008C8200700A000C6C3C0E80008CA200148A
-:108AE0000A000C6C3C0E80008F85002427BDFFE03F
-:108AF000AFBF0018AFB1001414A00008AFB0001051
-:108B00003C04800034870A0090E60030240200050F
-:108B100030C3003F106200B9348409008F910020F7
-:108B200000A080213C048000348E0A008DCD00041A
-:108B30003C0608008CC63FB831A73FFF00E6602B1B
-:108B40005580000100E03021938F001C11E0007877
-:108B500000D0282B349F098093F9007C3338000221
-:108B6000130000792403003400C3102B144000D9F3
-:108B70000000000000C3302300D0282B3C01080077
-:108B8000A4233FC414A0006E020018213C04080076
-:108B90008C843FB40064402B55000001006020210C
-:108BA0003C05800034A90A00912A003C3C010800E1
-:108BB000AC243FBC31430020146000030000482176
-:108BC00034AB0E008D6900188F88002C0128202BF3
-:108BD0001080005F000000003C0508008CA53FBC31
-:108BE00000A96821010D602B1180005C00B0702B82
-:108BF0000109382300E028213C010800AC273FBCD4
-:108C000012000003240AFFFC10B0008D3224000380
-:108C100000AA18243C010800A4203FDA3C01080007
-:108C2000AC233FBC006028218F840024120400067E
-:108C30003C0B80088D6C006C02002021AF9100205D
-:108C400025900001AD70006C8F8D00280085882371
-:108C5000AF91002401A52023AF8400281220000238
-:108C600024070018240700103C18800837060080ED
-:108C700090CF00683C010800A0273FD824070001DE
-:108C800031EE00FF11C700470000000014800018FB
-:108C9000000028213C06800034D1098034CD010039
-:108CA00091A600098E2C001824C40001000C860235
-:108CB0003205007F308B007F1165007F2407FF8025
-:108CC0003C19800837290080A124004C3C0808008A
-:108CD0008D083FD4241800023C010800A038401938
-:108CE000350F00083C010800AC2F3FD424050010CC
-:108CF0003C02800034440A009083003C307F002016
-:108D000013E0000500A02021240A00013C01080016
-:108D1000AC2A3FBC34A400018FBF00188FB10014EF
-:108D20008FB000100080102103E0000827BD002054
-:108D30003C010800A4203FC410A0FF9402001821A9
-:108D40000A000CC000C018210A000CB72403003030
-:108D50003C0508008CA53FBC00B0702B11C0FFA8DB
-:108D6000000000003C19080097393FC40325C021CA
-:108D70000307782B11E000072CAA00043C036000D5
-:108D80008C625404305F003F17E0FFE3240400428C
-:108D90002CAA00041140FF9A240400420A000D246A
-:108DA0008FBF00181528FFB9000000008CCA0018FA
-:108DB0003C1F800024020002015F1825ACC300188C
-:108DC00037F90A00A0C200689329003C240400047B
-:108DD00000A01021312800203C010800A0244019E7
-:108DE0001100000224050010240200013C010800CB
-:108DF000AC223FB40A000D1A3C0280008F88002884
-:108E00008C8900600109282B14A000020100882130
-:108E10008C9100603C048000348B0E008D6400183F
-:108E2000240A00010220282102203021A38A001CEC
-:108E30000E000B83022080210A000CA6AF82002CBA
-:108E40000004582312200007316400033C0E800008
-:108E500035C7098090ED007C31AC00041580001905
-:108E6000248F00043C010800A4243FDA3C1F0800C2
-:108E700097FF3FDA03E5C82100D9C02B1300FF6B31
-:108E80008F8400242CA6000514C0FFA324040042F4
-:108E900030A200031440000200A2182324A3FFFC08
-:108EA0003C010800AC233FBC3C010800A4203FDA91
-:108EB0000A000CE70060282100C770240A000D0D8D
-:108EC00001C720263C010800A42F3FDA0A000D78D4
-:108ED000000000003C010800AC203FBC0A000D234C
-:108EE000240400428F8300283C05800034AA0A0035
-:108EF0001460000600001021914700302406000590
-:108F000030E400FF108600030000000003E00008CA
-:108F100000000000914B0048316900FF000941C288
-:108F20001500FFFA3C0680083C04080094843FC406
-:108F30003C0308008C633FDC3C1908008F393FBCC0
-:108F40003C0F080095EF3FDA0064C0218CCD00048F
-:108F50000319702101CF602134AB0E00018D28234D
-:108F600018A0001D00000000914F004C8F8C0034B1
-:108F7000956D001031EE00FF8D89000401AE3023A5
-:108F80008D8A000030CEFFFF000E29000125C82188
-:108F900000003821014720210325182B0083C02120
-:108FA000AD990004AD980000918F000A01CF6821AF
-:108FB000A18D000A956500128F8A0034A54500082E
-:108FC000954B003825690001A54900389148000DEE
-:108FD00035070008A147000D03E00008000000006D
-:108FE00027BDFFD8AFB000189388001C8FB00014C5
-:108FF0003C0A80003C197FFF8F8700243738FFFF31
-:10900000AFBF0020AFB1001C355F0A000218182462
-:1090100093EB003C00087FC03C02BFFF006F60255F
-:109020002CF000013449FFFF3C1F08008FFF3FDC9C
-:109030008F9900303C18080097183FD20189782496
-:10904000001047803C07EFFF3C05F0FF01E81825C2
-:109050003C1180003169002034E2FFFF34ADFFFF96
-:10906000362E098027A500102406000203F960238C
-:10907000270B0002354A0E00006218240080802170
-:1090800015200002000040218D48001CA7AB0012F3
-:10909000058000392407000030E800FF00083F0089
-:1090A000006758253C028008AFAB0014344F0080A5
-:1090B00091EA00683C08080091083FD93C09DFFFAD
-:1090C000352CFFFF000AF82B3C02080094423FCCED
-:1090D000A3A80011016CC024001FCF40031918255C
-:1090E0008FA70010AFA300143C0C0800918C3FDB4D
-:1090F000A7A200168FAB001400ED48243C0F01001E
-:109100003C0A0FFF012FC82531980003355FFFFF90
-:10911000016D40243C027000033F382400181E00FB
-:1091200000E2482501037825AFAF0014AFA9001075
-:1091300091CC007C0E000092A3AC0015362D0A00E5
-:1091400091A6003C30C400201080000626020008D2
-:109150003C11080096313FC8262EFFFF3C01080055
-:10916000A42E3FC88FBF00208FB1001C8FB0001805
-:1091700003E0000827BD00288F8B002C010B502B2B
-:109180005540FFC5240700010A000E0430E800FF27
-:109190009383001C3C02800027BDFFD834480A009E
-:1091A00000805021AFBF002034460AC001002821B2
-:1091B0001060000E3444098091070030240B000534
-:1091C0008F89002030EC003F118B000B000038210C
-:1091D000AFA900103C0B80088D69006CAFAA001885
-:1091E0000E00015AAFA90014A380001C8FBF0020FD
-:1091F00003E0000827BD00288D1F00483C18080028
-:109200008F183FBC8F9900283C027FFF8D080044D7
-:109210003443FFFFAFA900103C0B80088D69006C40
-:1092200003E370240319782101CF682301A83821B2
-:10923000AFAA00180E00015AAFA900140A000E5878
-:10924000A380001C3C05800034A60A0090C7003CA7
-:109250003C06080094C63FDA3C0208008C423FD42A
-:1092600030E30020000624001060001E0044382572
-:109270003C0880083505008090A300680000482164
-:109280002408000100002821240400013C0680007D
-:109290008CCD017805A0FFFE34CF0140ADE8000879
-:1092A0003C0208008C423FDCA5E50004A5E4000672
-:1092B000ADE2000C3C04080090843FD93C038008D8
-:1092C00034790080A1E40012ADE70014A5E900188C
-:1092D0009338004C3C0E1000A1F8002D03E000086C
-:1092E000ACCE017834A90E008D28001C3C0C08007F
-:1092F0008D8C3FBC952B0016952A001401864821C1
-:109300003164FFFF0A000E803145FFFF3C048000FE
-:1093100034830A009065003C30A200201040001900
-:1093200034870E0000004021000038210000202179
-:109330003C0680008CC901780520FFFE34CA01403C
-:1093400034CF010091EB0009AD4800083C0E080045
-:109350008DCE3FDC240DFF91240C00403C08100012
-:10936000A5440004A5470006AD4E000CA14D001217
-:10937000AD4C0014A5400018A14B002D03E00008DF
-:10938000ACC801788CE8001894E6001294E4001050
-:1093900030C7FFFF0A000EA93084FFFF3C048000A5
-:1093A00034830A009065003C30A200201040002762
-:1093B00027BDFFF82409000100003821240800011E
-:1093C0003C0680008CCA01780540FFFE3C0280FF0D
-:1093D00034C40100908D00093C0C0800918C4019A8
-:1093E000A3AD00038FAB00003185007F3459FFFF30
-:1093F00001665025AFAA00009083000AA3A00002D6
-:1094000000057E00A3A300018FB8000034CB01400B
-:10941000240C30000319702401CF6825AD6D000CB9
-:1094200027BD0008AD6C0014A5600018AD690008E8
-:10943000A56700042409FF80A56800063C08100009
-:10944000A169001203E00008ACC8017834870E005F
-:109450008CE9001894E6001294E4001030C8FFFF75
-:109460000A000ECD3087FFFF27BDFFE0AFB100142B
-:109470003C118000AFB00010AFBF001836380A00B2
-:10948000970F0032363001000E000B7F31E43FFFB2
-:109490008E0E0000240DFF803C04200001C25821E4
-:1094A000016D6024000C4940316A007F012A40258B
-:1094B000010438253C048008AE270830348600803B
-:1094C00090C500682403000230A200FF104300048E
-:1094D0008F9F00208F990024AC9F0068AC99006496
-:1094E0008FBF00188FB100148FB0001003E0000888
-:1094F00027BD00203C0A0800254A3A803C090800A4
-:1095000025293B103C08080025082F1C3C070800B3
-:1095100024E73BDC3C06080024C639043C0508006F
-:1095200024A536583C0408002484325C3C0308001F
-:10953000246339B83C020800244237543C01080037
-:10954000AC2A3F983C010800AC293F943C0108003C
-:10955000AC283F903C010800AC273F9C3C01080030
-:10956000AC263FAC3C010800AC253FA43C01080000
-:10957000AC243FA03C010800AC233FB03C010800F4
-:0C958000AC223FA803E00008000000003F
-:04958C008000094012
-:109590008000090080080100800800808008000029
-:1095A000800E0000800800808008000080000A8093
-:0C95B00080000A00800009808000090093
-:00000001FF
-/*
- * This file contains firmware data derived from proprietary unpublished
- * source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
- *
- * Permission is hereby granted for the distribution of this firmware data
- * in hexadecimal or equivalent format, provided this copyright notice is
- * accompanying it.
- */
diff --git a/firmware/bnx2/bnx2-rv2p-06-6.0.15.fw.ihex b/firmware/bnx2/bnx2-rv2p-06-6.0.15.fw.ihex
deleted file mode 100644
index dcc443e210f5..000000000000
--- a/firmware/bnx2/bnx2-rv2p-06-6.0.15.fw.ihex
+++ /dev/null
@@ -1,366 +0,0 @@
-:1000000000000000000008F800000058000000098F
-:1000100000000000000000000000000000000000E0
-:1000200000000000000000000000000000000000D0
-:1000300000000CF000000950000000050000000066
-:1000400000000000000000000000000000000000B0
-:080050000000000000000000A8
-:0800580000000010B180000659
-:100060000000001F0106000F000000080500FFFF50
-:10007000000000180002000000000008050000FF5A
-:10008000000000180002000000000008AC000001A1
-:1000900000000008078000000000000C2F80000115
-:1000A000000000002B000000000000002B8000007A
-:1000B0000000001091E1000200000008AC00000107
-:1000C00000000010203F003B00000010213F000313
-:1000D0000000001020BF0015000000188000FFFD88
-:1000E0000000000C1F800002000000188000FFF9D3
-:1000F00000000008B1000001000000082C8000B0E2
-:10010000000000082D000008000000082D800001FC
-:10011000000000188000003C0000000B2FDF0002F0
-:100120000000000C1F800002000000002C070000EF
-:100130000000001091DE0000000000188000FFEFBA
-:100140000000000B2FDF00020000000C1F800000E9
-:10015000000000002C0700000000001091DE0000ED
-:10016000000000188000FFEA0000000C1F80000261
-:10017000000000188000FFE80000000802240025AD
-:1001800000000018000400000000001880000000BB
-:10019000000000188000001B0000001880000042D2
-:1001A000000000188000000000000018800000001F
-:1001B000000000188000000000000018800000000F
-:1001C00000000018800000000000001880000000FF
-:1001D00000000018800000000000001880000000EF
-:1001E00000000018800000000000001880000000DF
-:1001F000000000188000008E000000188000000041
-:1002000000000018800000000000001880000000BE
-:1002100000000018800000000000001880000000AE
-:10022000000000188000000000000018800000009E
-:10023000000000188000008D00000018800000B74A
-:10024000000000188000008400000018800000DA20
-:10025000000000188000002B000000188000000043
-:10026000000000188000006B0000001091D4000016
-:100270000000000C298000010000000C1F8000011C
-:10028000000000082A0000020000000807800000AB
-:10029000000000188000FFC4000000080380010077
-:1002A00000000010B73C0E000000001880000000A5
-:1002B000000000180002000000000000068200009C
-:1002C00000000010B18F000400000010B18F140373
-:1002D000000000082A0000010000001091D4000076
-:1002E000000000000780140000000018000D00004E
-:1002F00000000000050200000000001091DE000078
-:1003000000000018000A0000000000000682000043
-:100310000000001091DE0000000000090561FFFFF1
-:1003200000000010918A00020000000830E1FFFF89
-:10033000000000188000FFA9000000010561140002
-:1003400000000010918A000200000008B0E10001E6
-:1003500000000018000D00000000000006820000F0
-:100360000000001091DE0000000000090562FFFFA0
-:1003700000000010918A0002000000083162FFFFB7
-:10038000000000188000FF9F0000000105621400BB
-:1003900000000010918A000200000008B162000114
-:1003A00000000018000D000000000010B1A0B01304
-:1003B0000000000B2FDF0002000000002C200000D6
-:1003C000000000082C800000000000082D00000044
-:1003D0000000001091D40000000000080500005546
-:1003E000000000188000FFDB000000082D80011CC9
-:1003F00000000010001F0000000000188000FFE255
-:100400000000000F476000080000000F060E00010A
-:10041000000000000F580000000000000A64000007
-:10042000000000000AE50000000000090B66FFFF65
-:10043000000000000D6100000000001880000015A1
-:100440000000000F476000080000000B2FDF0002D3
-:10045000000000082C800000000000082D000000B3
-:100460000000001091D40000000000082D80011C45
-:100470000000000F060E000100000010001F000029
-:10048000000000000F580000000000188000FFD09E
-:10049000000000000A640000000000000AE50000FF
-:1004A000000000090B66FFFF000000000D61000066
-:1004B00000000000026200000000000002E00000F6
-:1004C0000000000B2FDF00020000000030050000DC
-:1004D000000000003104000000000000309A00001D
-:1004E000000000100060000A00000008051600016E
-:1004F00000000010BA9A140300000000030000007E
-:100500000000001880000006000000188000FF6C4A
-:1005100000000010B60614040000000803060001E5
-:10052000000000082A000001000000188000FF7190
-:10053000000000000C961800000000090C99FFFF55
-:1005400000000004CC99340000000010BA992C027D
-:10055000000000080F8000000000000C298000014E
-:100560000000000C295200010000000C295200007C
-:100570000000000822800002000000080200000EB7
-:10058000000000080280001A00000010B1C40A0236
-:1005900000000008020000030000000C1F800001A2
-:1005A000000000002ADF0000000000002A00080010
-:1005B000000000188000FF600000000B2FDF000229
-:1005C0000000001091D40000000000082A00000183
-:1005D000000000002C2000000000001091D400005A
-:1005E000000000082C800000000000082D00000022
-:1005F000000000082D80011C000000188000FF9FF3
-:10060000000000082C800006000000082D000006F5
-:1006100000000000308000000000000031000000F9
-:10062000000000082D8000060000000C2980000159
-:100630000000000C1F8000010000001091DE00008F
-:10064000000000002ADF0000000000082A0000105F
-:100650000000000807800000000000188000FF4B29
-:100660000000001091D4000000000008050000AA5E
-:10067000000000188000FF890000000C29800001A4
-:100680000000000C1F800001000000082A00000983
-:10069000000000188000FF440000001091D400000A
-:1006A0000000000805000055000000188000FF82CF
-:1006B0000000001091A0B00200000010B1E6620737
-:1006C0000000000B2FDF0002000000002C310000B2
-:1006D000000000092CB1007F000000082CD90000A8
-:1006E000000000082D000000000000082D80010D12
-:1006F00000000010B1A8000600000010205F0000FC
-:10070000000000002C200000000000002CA70000CA
-:10071000000000082D000010000000082D800108D6
-:10072000000000188000FF7A00000010B1A6001041
-:1007300000000010001F00000000000F0F30000735
-:10074000000000000A600000000000000AE1000054
-:100750000000000F4B620008000000090B1600FFAC
-:10076000000000000D620000000000090D1A00FFEB
-:1007700000000010073000030000000C0D1A0008F4
-:100780000000000C0B1600080000000F4CE30018DE
-:10079000000000000C992C0000000004CC993400EB
-:1007A000000000080F8000000000000C29800001FC
-:1007B0000000000033310000000000082200001695
-:1007C000000000002ADF0000000000082A00000CE2
-:1007D00000000010009F0000000000002C2000001E
-:1007E0000000000C1F800001000000188000FF19AD
-:1007F0000000001091D4000000000008050000AACD
-:10080000000000188000FF570000000F472200087A
-:1008100000000009070E000F00000008070E000886
-:1008200000000008028000010000000702851C0093
-:1008300000000008828500010000000002854C00D5
-:100840000000000742851C0000000003C3AA5200FC
-:100850000000000003B10E00000000074B071C0061
-:100860000000000F0F3000070000000F0A96000381
-:10087000000000000A955C00000000004A005A00D9
-:10088000000000000C960A00000000090C99FFFF10
-:10089000000000080D00FFFF00000010BA992C02B4
-:1008A000000000080F80000500000010B1A800083B
-:1008B00000000010205F00000000000B2FDF00028E
-:1008C000000000002C200000000000002CA7000009
-:1008D000000000082D000010000000082D80010815
-:1008E000000000188000FF420000000C2980000179
-:1008F00000000010001F00000000000C1F8000011D
-:10090000000000002ADF0000000000082A00000D9F
-:10091000000000188000FEF40000001091D40000D8
-:100920000000000805000055000000188000FF329C
-:100930000000000C298000010000000C1F80000155
-:10094000000000082A000007000000188000FEEDEB
-:1009500000000010B18000040000001F0106000F1D
-:1009600000000008050000FF000000180002000061
-:10097000000000002A00000000000010B1D40000B8
-:100980000000001091DE0000000000102053000065
-:1009900000000010001F0000000000002F80AA00CF
-:1009A0000000000C29800001000000080254000E25
-:1009B000000000002C400000000000000F4000007C
-:1009C0000000001800040000000000188000001162
-:1009D000000000188000001200000018800000389D
-:1009E00000000018800000DF00000018800000DE1A
-:1009F00000000018800000DD00000018800000DD0D
-:100A0000000000188000000000000018800000F6C0
-:100A100000000018800000D90000001880000000CD
-:100A200000000018800000FA000000188000014853
-:100A3000000000188000005A00000018800000C468
-:100A400000000018800000C500000018800000D2DF
-:100A5000000000002A000000000000188000FFE4F1
-:100A6000000000002A0000000000000C29800000A7
-:100A7000000000188000FFE10000001800020000E4
-:100A8000000000000502000000000010B99A2C21AF
-:100A900000000010205F0000000000002C1E00007D
-:100AA000000000082C800006000000082D00000651
-:100AB000000000082D80010200000000000000007E
-:100AC0000000001091DE0000000000000D61000039
-:100AD00000000018000A00000000000005020000ED
-:100AE00000000010B99A2C1600000010205F0000D2
-:100AF0000000000009D80000000000002C1E0000CB
-:100B0000000000082C8000B2000000082D00000A40
-:100B1000000000082D80010200000000000000001D
-:100B20000000001091DE0000000000000D620000D7
-:100B3000000000002C13000000000018000A000054
-:100B4000000000000502000000000010B99A2C0906
-:100B500000000010205F0000000000002C1E0000BC
-:100B6000000000082C800006000000082D00006A2C
-:100B7000000000082D8001020000000000000000BD
-:100B80000000001091DE0000000000000D7A00005F
-:100B900000000018000A0000000000002A00000009
-:100BA0000000000822000001000000000D610000AC
-:100BB0000000001021C2002400000010B1C6000295
-:100BC00000000010234200A2000000090B66FFFF96
-:100BD00000000010BA9A2C20000000000A640000F7
-:100BE000000000000AE50000000000000C0000000A
-:100BF000000000000B800000000000080CC600127E
-:100C0000000000188000FFD0000000080F800003E3
-:100C1000000000000000000000000010009F000025
-:100C2000000000082711001200000000669000007C
-:100C300000000010B198000300000010001F000029
-:100C4000000000080F8000040000000822000003DC
-:100C5000000000082C80000C000000082D00000C93
-:100C600000000010009F00000000001091C6000569
-:100C700000000010001F000000000010BA9A2C03B2
-:100C8000000000080F800004000000188000FFFD35
-:100C900000000000259600000000000C29800000E4
-:100CA0000000000032140000000000003295000037
-:100CB0000000000573662C000000000031E32E00E8
-:100CC000000000082D800010000000188000FF9632
-:100CD00000000000230000000000000925E6FFFFDF
-:100CE000000000082200000B0000000C6952000008
-:100CF0000000000C29800000000000188000FF9018
-:100D0000000000002A000000000000082C800040C5
-:100D1000000000082D000020000000082D80011CAC
-:100D200000000008220000010000001091DE000019
-:100D30000000000F42EA001000000010004F000405
-:100D400000000010B746920000000008024900129F
-:100D500000000010B5840A00000000000D610000D2
-:100D600000000010BA663457000000088305001226
-:100D700000000010004F00020000000003490000C6
-:100D80000000000183068C000000000083C60C00F8
-:100D900000000010B1870013000000000B6E00007F
-:100DA000000000090569FFFF00000010918A0002A1
-:100DB0000000000834E9FFFF000000188000FF7504
-:100DC000000000010569140000000010918A000273
-:100DD00000000008B4E9000100000010BAE92C4846
-:100DE0000000000086692C000000000002000000E6
-:100DF0000000000902EAFFFF00000010000C0002E2
-:100E00000000000002040A000000000F460C000170
-:100E10000000000F0285000100000010918C01FC11
-:100E200000000010B7040E3F000000000D6100003C
-:100E3000000000000A640000000000000AE5000055
-:100E4000000000090B66FFFF000000000C0000001E
-:100E5000000000000B800000000000080C8600125B
-:100E6000000000080F8000030000000C2952000061
-:100E700000000010009F0000000000082711001271
-:100E80000000000066900000000000002306000043
-:100E900000000010B198000500000010001F0000C5
-:100EA000000000080F8000040000000000000000A7
-:100EB00000000010001F00000000000032140000BD
-:100EC00000000000329500000000000031E32E0019
-:100ED0000000000573662C0000000000259600004D
-:100EE00000000010B18700160000000C29800000EF
-:100EF0000000000F0F6B0007000000000D690000EC
-:100F0000000000000A6C0000000000000AED000074
-:100F1000000000000B6E0000000000000B800000CD
-:100F2000000000000C870000000000080F80000394
-:100F300000000010205300000000000C6952000166
-:100F400000000010001F00000000000022C58C00FF
-:100F500000000000231B000000000000271100001B
-:100F6000000000002690000000000010B8170E03DB
-:100F70000000000C29800000000000188000FFF62F
-:100F800000000010B1980002000000080F8000046B
-:100F9000000000082200001A000000082C80000C4D
-:100FA000000000082D00000C000000082D8000103B
-:100FB00000000010001F0000000000000D6E000087
-:100FC00000000003E7CF34000000000C298000007F
-:100FD0000000001091DE000000000010B187000743
-:100FE00000000000361400000000000036950000EC
-:100FF0000000000037160000000000082C800050A0
-:10100000000000082D000030000000082D80000CBA
-:10101000000000188000FF2D0000000023000000E9
-:101020000000000925E6FFFF000000000B6E000035
-:1010300000000003E7CF2C00000000082200001B86
-:101040000000000C695200000000000C2980000024
-:10105000000000188000FF25000000002A000000AA
-:10106000000000188000FF23000000002A0000009C
-:101070000000000C298000000000001091DE00003C
-:10108000000000082C80001A000000082D00001A43
-:101090000000000573660000000000082D800002BB
-:1010A00000000000318000000000001091DE000010
-:1010B000000000082C80000C000000082D00000C2F
-:1010C000000000082D800004000000188000FF16BA
-:1010D0000000001880000000000000188000FF14CD
-:1010E000000000002A00000000000010001F0000A7
-:1010F000000000000F008000000000080F800007C3
-:10110000000000188000001B00000000280A0000FA
-:101110000000000005020000000000082200000995
-:1011200000000000290000000000000F65680010AA
-:1011300000000000248A000000000003F66C940008
-:1011400000000010B972A0040000000C73E7001941
-:101150000000000C21420004000000003CF80000E8
-:101160000000000C29800000000000102053000047
-:1011700000000008220000080000000C614200048A
-:1011800000000018000A0000000000000502000036
-:101190000000000C6142000000000010014200034A
-:1011A0000000000C33E7001D0000000C614200024B
-:1011B00000000018000A0000000000002A000000E3
-:1011C00000000010001F00000000000F0F47000784
-:1011D000000000080F8000080000000C29800000BB
-:1011E00000000010009F0000000000188000FEF2C8
-:1011F0000000000033510000000000002A00000041
-:1012000000000010B1C600230000000F0F500007BF
-:10121000000000000A600000000000000AE1000079
-:101220000000000F4B620008000000090B1600FFD1
-:101230000000000F4C620010000000000D62000072
-:10124000000000090D1A00FF000000100750000305
-:101250000000000C0D1A00080000000C0B1600081E
-:10126000000000000CC60000000000000B80000021
-:101270000000000006980000000000080F80000336
-:101280000000001006C200040000000C290000024B
-:1012900000000010264200020000000C295200034A
-:1012A000000000082200000100000010009F000064
-:1012B00000000000231B00000000000027111A009E
-:1012C00000000000669000000000000C29520000A1
-:1012D00000000010B19732090000000C29800000C6
-:1012E00000000000069800000000001020530000DD
-:1012F0000000000C295200030000000022C58C00F1
-:1013000000000010001F0000000000080F80000314
-:10131000000000188000FFF300000010B1C80013A7
-:1013200000000010B1C600030000000C298000007E
-:1013300000000010205300000000000C29520000A3
-:101340000000000C295200030000001006C2000239
-:101350000000000C295200020000000022C58C0091
-:1013600000000000276500000000000026E40000E7
-:10137000000000082200001600000010B1C60003A3
-:10138000000000002348000000000010B1800005AC
-:1013900000000000234800000000000C298000002D
-:1013A0000000000F0F50000700000018800000121E
-:1013B00000000008220000160000000C2980000038
-:1013C0000000000030140000000000003095000014
-:1013D0000000001007500003000000090B1600FF7A
-:1013E000000000090D1A00FF0000000F3116000870
-:1013F000000000003162340000000003F1623000A0
-:1014000000000010205F0000000000002C510000D0
-:10141000000000092CD1007F000000082CD900003A
-:10142000000000082D000000000000082D80000CC6
-:1014300000000000000000000000001091DE00002D
-:101440000000001005C20004000000080F80000723
-:10145000000000003300000000000010009F0000AA
-:10146000000000188000FEA3000000002A00000019
-:101470000000000F0F50000700000010B1C6002D43
-:101480000000000F4742000800000009070E000F8F
-:1014900000000008070E000800000010001F0000F8
-:1014A00000000008090000010000000709121C00EC
-:1014B00000000003CBCA9200000000000B97A200BE
-:1014C0000000000742171C00000000000B04000091
-:1014D0000000000F0A840003000000000A959C0031
-:1014E000000000004A009A0000000008821200017B
-:1014F000000000010C170800000000000C978C0091
-:101500000000000002180000000000080D00FFFFAE
-:10151000000000080F8000060000000C29000000F9
-:101520000000001006C200040000000C2952000256
-:1015300000000010264200020000000C29520003A7
-:10154000000000082200000100000010009F0000C1
-:1015500000000010B197320C00000000231B0000B7
-:101560000000000027110800000000006690000045
-:101570000000000C2980000000000000021800009C
-:1015800000000010205300000000000C295200034E
-:101590000000000022C5360000000010001F0000FF
-:1015A000000000080F800006000000188000FFF413
-:1015B00000000000231B00000000000027110800AD
-:1015C000000000006690000000000010B1C8000B91
-:1015D0000000000C298000000000001020530000D3
-:1015E0000000000C295200000000000C29520003EA
-:1015F0000000001006C200020000000C2952000288
-:101600000000000022C58C000000000027650000DB
-:101610000000000026E40000000000002348000055
-:1016200000000008220000170000000C29800000C4
-:1016300000000010001F0000000000188000FE687D
-:00000001FF
-/*
- * This file contains firmware data derived from proprietary unpublished
- * source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
- *
- * Permission is hereby granted for the distribution of this firmware data
- * in hexadecimal or equivalent format, provided this copyright notice is
- * accompanying it.
- */
diff --git a/firmware/bnx2/bnx2-rv2p-09-6.0.17.fw.ihex b/firmware/bnx2/bnx2-rv2p-09-6.0.17.fw.ihex
deleted file mode 100644
index 435203d64305..000000000000
--- a/firmware/bnx2/bnx2-rv2p-09-6.0.17.fw.ihex
+++ /dev/null
@@ -1,392 +0,0 @@
-:1000000000000000000008F800000058000000098F
-:1000100000000000000000000000000000000000E0
-:1000200000000000000000000000000000000000D0
-:1000300000000E88000009500000000500000000CC
-:1000400000000000000000000000000000000000B0
-:080050000000000000000000A8
-:0800580000000010B180000659
-:100060000000001F05060011000000080500FFFF4A
-:10007000000000180002000000000008050000FF5A
-:10008000000000180002000000000008AC000001A1
-:1000900000000008078000000000000C2F80000115
-:1000A000000000002B000000000000002B8000007A
-:1000B0000000001091E1000200000008AC00000107
-:1000C00000000010203F003B00000010213F000313
-:1000D0000000001020BF0015000000188000FFFD88
-:1000E0000000000C1F800002000000188000FFF9D3
-:1000F00000000008B1000001000000082C80010C85
-:10010000000000082D000008000000082D800001FC
-:10011000000000188000003C0000000B2FDF0002F0
-:100120000000000C1F800002000000002C070000EF
-:100130000000001091DE0000000000188000FFEFBA
-:100140000000000B2FDF00020000000C1F800000E9
-:10015000000000002C0700000000001091DE0000ED
-:10016000000000188000FFEA0000000C1F80000261
-:10017000000000188000FFE80000000802240025AD
-:1001800000000018000400000000001880000000BB
-:10019000000000188000001B0000001880000042D2
-:1001A000000000188000000000000018800000001F
-:1001B000000000188000000000000018800000000F
-:1001C00000000018800000000000001880000000FF
-:1001D00000000018800000000000001880000000EF
-:1001E00000000018800000000000001880000000DF
-:1001F000000000188000008E000000188000000041
-:1002000000000018800000000000001880000000BE
-:1002100000000018800000000000001880000000AE
-:10022000000000188000000000000018800000009E
-:10023000000000188000008D00000018800000B74A
-:10024000000000188000008400000018800000DA20
-:10025000000000188000002B000000188000000043
-:10026000000000188000006B0000001091D4000016
-:100270000000000C298000010000000C1F8000011C
-:10028000000000082A0000020000000807800000AB
-:10029000000000188000FFC4000000080380010077
-:1002A00000000010B73C0E000000001880000000A5
-:1002B000000000180002000000000000068200009C
-:1002C00000000010B18F000400000010B18F140373
-:1002D000000000082A0000010000001091D4000076
-:1002E000000000000780140000000018000D00004E
-:1002F00000000000050200000000001091DE000078
-:1003000000000018000A0000000000000682000043
-:100310000000001091DE0000000000090561FFFFF1
-:1003200000000010918A00020000000830E1FFFF89
-:10033000000000188000FFA9000000010561140002
-:1003400000000010918A000200000008B0E10001E6
-:1003500000000018000D00000000000006820000F0
-:100360000000001091DE0000000000090562FFFFA0
-:1003700000000010918A0002000000083162FFFFB7
-:10038000000000188000FF9F0000000105621400BB
-:1003900000000010918A000200000008B162000114
-:1003A00000000018000D000000000010B1A0B01304
-:1003B0000000000B2FDF0002000000002C200000D6
-:1003C000000000082C800000000000082D00000044
-:1003D0000000001091D40000000000080500005546
-:1003E000000000188000FFDB000000082D80011CC9
-:1003F00000000010001F0000000000188000FFE255
-:100400000000000F476000080000000F060E00010A
-:10041000000000000F580000000000000A64000007
-:10042000000000000AE50000000000090B66FFFF65
-:10043000000000000D6100000000001880000015A1
-:100440000000000F476000080000000B2FDF0002D3
-:10045000000000082C800000000000082D000000B3
-:100460000000001091D40000000000082D80011C45
-:100470000000000F060E000100000010001F000029
-:10048000000000000F580000000000188000FFD09E
-:10049000000000000A640000000000000AE50000FF
-:1004A000000000090B66FFFF000000000D61000066
-:1004B00000000000026200000000000002E00000F6
-:1004C0000000000B2FDF00020000000030050000DC
-:1004D000000000003104000000000000309A00001D
-:1004E000000000100060000A00000008051600016E
-:1004F00000000010BA9A140300000000030000007E
-:100500000000001880000006000000188000FF6C4A
-:1005100000000010B60614040000000803060001E5
-:10052000000000082A000001000000188000FF7190
-:10053000000000000C961800000000090C99FFFF55
-:1005400000000004CC99340000000010BA992C027D
-:10055000000000080F8000000000000C298000014E
-:100560000000000C295200010000000C295200007C
-:100570000000000822800002000000080200000EB7
-:10058000000000080280001A00000010B1C40A0236
-:1005900000000008020000030000000C1F800001A2
-:1005A000000000002ADF0000000000002A00080010
-:1005B000000000188000FF600000000B2FDF000229
-:1005C0000000001091D40000000000082A00000183
-:1005D000000000002C2000000000001091D400005A
-:1005E000000000082C800000000000082D00000022
-:1005F000000000082D80011C000000188000FF9FF3
-:10060000000000082C800006000000082D000006F5
-:1006100000000000308000000000000031000000F9
-:10062000000000082D8000060000000C2980000159
-:100630000000000C1F8000010000001091DE00008F
-:10064000000000002ADF0000000000082A0000105F
-:100650000000000807800000000000188000FF4B29
-:100660000000001091D4000000000008050000AA5E
-:10067000000000188000FF890000000C29800001A4
-:100680000000000C1F800001000000082A00000983
-:10069000000000188000FF440000001091D400000A
-:1006A0000000000805000055000000188000FF82CF
-:1006B0000000001091A0B00200000010B1E6620737
-:1006C0000000000B2FDF0002000000002C310000B2
-:1006D000000000092CB1007F000000082CD90000A8
-:1006E000000000082D000000000000082D80010D12
-:1006F00000000010B1A8000600000010205F0000FC
-:10070000000000002C200000000000002CA70000CA
-:10071000000000082D000010000000082D800108D6
-:10072000000000188000FF7A00000010B1A6001041
-:1007300000000010001F00000000000F0F30000735
-:10074000000000000A600000000000000AE1000054
-:100750000000000F4B620008000000090B1600FFAC
-:10076000000000000D620000000000090D1A00FFEB
-:1007700000000010073000030000000C0D1A0008F4
-:100780000000000C0B1600080000000F4CE30018DE
-:10079000000000000C992C0000000004CC993400EB
-:1007A000000000080F8000000000000C29800001FC
-:1007B0000000000033310000000000082200001695
-:1007C000000000002ADF0000000000082A00000CE2
-:1007D00000000010009F0000000000002C2000001E
-:1007E0000000000C1F800001000000188000FF19AD
-:1007F0000000001091D4000000000008050000AACD
-:10080000000000188000FF570000000F472200087A
-:1008100000000009070E000F00000008070E000886
-:1008200000000008028000010000000702851C0093
-:1008300000000008828500010000000002854C00D5
-:100840000000000742851C0000000003C3AA5200FC
-:100850000000000003B10E00000000074B071C0061
-:100860000000000F0F3000070000000F0A96000381
-:10087000000000000A955C00000000004A005A00D9
-:10088000000000000C960A00000000090C99FFFF10
-:10089000000000080D00FFFF00000010BA992C02B4
-:1008A000000000080F80000500000010B1A800083B
-:1008B00000000010205F00000000000B2FDF00028E
-:1008C000000000002C200000000000002CA7000009
-:1008D000000000082D000010000000082D80010815
-:1008E000000000188000FF420000000C2980000179
-:1008F00000000010001F00000000000C1F8000011D
-:10090000000000002ADF0000000000082A00000D9F
-:10091000000000188000FEF40000001091D40000D8
-:100920000000000805000055000000188000FF329C
-:100930000000000C298000010000000C1F80000155
-:10094000000000082A000007000000188000FEEDEB
-:1009500000000010B18000040000001F0506001117
-:1009600000000008050000FF000000180002000061
-:10097000000000002A00000000000010B1D40000B8
-:100980000000001091DE0000000000102053000065
-:1009900000000010001F0000000000002F80AA00CF
-:1009A0000000000C29800001000000080254000F24
-:1009B000000000002C400000000000000F4000007C
-:1009C000000000092952003F000000180004000048
-:1009D00000000018800000110000001880000012C4
-:1009E000000000188000003800000018800001118D
-:1009F0000000001880000110000000188000010FA6
-:100A0000000000188000010F0000001880000000A6
-:100A10000000001880000128000000188000010B71
-:100A20000000001880000000000000188000012C69
-:100A3000000000188000017A000000188000005AB1
-:100A400000000018800000C400000018800000C5ED
-:100A50000000001880000104000000002A000000CF
-:100A6000000000188000FFE3000000002A000000E2
-:100A70000000000C29800000000000188000FFE04A
-:100A80000000001800020000000000000502000045
-:100A900000000010B99A2C2100000010205F000017
-:100AA000000000002C1E0000000000082C80000642
-:100AB000000000082D000006000000082D80010243
-:100AC00000000000000000000000001091DE0000A7
-:100AD000000000000D61000000000018000A000086
-:100AE000000000000502000000000010B99A2C165A
-:100AF00000000010205F00000000000009D8000086
-:100B0000000000002C1E0000000000082C80010ED8
-:100B1000000000082D00000A000000082D800102DE
-:100B200000000000000000000000001091DE000046
-:100B3000000000000D620000000000002C13000007
-:100B400000000018000A000000000000050200007C
-:100B500000000010B99A2C0900000010205F00006E
-:100B6000000000002C1E0000000000082C80000681
-:100B7000000000082D00006A000000082D8001021E
-:100B800000000000000000000000001091DE0000E6
-:100B9000000000000D7A000000000018000A0000AC
-:100BA000000000002A0000000000000822000001F0
-:100BB000000000000D6100000000001021C20024B0
-:100BC00000000010B1C6000200000010234200A285
-:100BD000000000090B66FFFF00000010BA9A2C20ED
-:100BE000000000000A640000000000000AE50000A8
-:100BF000000000000C000000000000000B8000005E
-:100C0000000000080CC60012000000188000FFD091
-:100C1000000000080F80000300000000000000003A
-:100C200000000010009F00000000000827110012C3
-:100C3000000000006690000000000010B198000362
-:100C400000000010001F0000000000080F800004DA
-:100C50000000000822000003000000082C80000CA7
-:100C6000000000082D00000C00000010009F000094
-:100C70000000001091C6000500000010001F0000D9
-:100C800000000010BA9A2C03000000080F80000436
-:100C9000000000188000FFFD000000002596000005
-:100CA0000000000C29800000000000003214000049
-:100CB00000000000329500000000000573662C0063
-:100CC0000000000031E32E00000000082D8000101D
-:100CD000000000188000FF950000000023000000C5
-:100CE0000000000925E6FFFF000000082200000BBD
-:100CF0000000000C695200000000000C2980000078
-:100D0000000000188000FF8F000000002A00000093
-:100D1000000000082C800040000000082D0000208A
-:100D2000000000082D80011C0000000822000001C6
-:100D30000000001091DE00000000000F42EA0010E9
-:100D400000000010004F000400000010B7469200A1
-:100D5000000000080249001200000010B5840A00DB
-:100D6000000000000D61000000000010BA6634575A
-:100D7000000000088305001200000010004F000270
-:100D800000000000034900000000000183068C0001
-:100D90000000000083C60C0000000010B1870013A3
-:100DA000000000000B6E0000000000090569FFFF55
-:100DB00000000010918A00020000000834E9FFFFE3
-:100DC000000000188000FF74000000010569140095
-:100DD00000000010918A000200000008B4E9000140
-:100DE00000000010BAE92C480000000086692C00C1
-:100DF00000000000020000000000000902EAFFFFFE
-:100E000000000010000C00020000000002040A00B4
-:100E10000000000F460C00010000000F02850001D9
-:100E200000000010918C01FC00000010B7040E3F80
-:100E3000000000000D610000000000000A640000D6
-:100E4000000000000AE50000000000090B66FFFF3B
-:100E5000000000000C000000000000000B800000FB
-:100E6000000000080C860012000000080F8000033C
-:100E70000000000C2952000000000010009F00003C
-:100E8000000000082711001200000000669000001A
-:100E9000000000002306000000000010B1980005CB
-:100EA00000000010001F0000000000080F80000478
-:100EB000000000000000000000000010001F000003
-:100EC0000000000032140000000000003295000015
-:100ED0000000000031E32E000000000573662C00C6
-:100EE000000000002596000000000010B1870016E9
-:100EF0000000000C298000000000000F0F6B0007AD
-:100F0000000000000D690000000000000A6C0000F5
-:100F1000000000000AED0000000000000B6E000061
-:100F2000000000000B800000000000000C870000A3
-:100F3000000000080F800003000000102053000094
-:100F40000000000C6952000100000010001F0000AA
-:100F50000000000022C58C0000000000231B0000E0
-:100F60000000000027110000000000002690000093
-:100F700000000010B8170E030000000C29800000CC
-:100F8000000000188000FFF600000010B198000279
-:100F9000000000080F800004000000082200001A72
-:100FA000000000082C80000C000000082D00000C40
-:100FB000000000082D80001000000010001F00003D
-:100FC000000000000D6E000000000003E7CF3400B9
-:100FD0000000000C298000000000001091DE0000DD
-:100FE00000000010B1870007000000003614000068
-:100FF00000000000369500000000000037160000D9
-:10100000000000082C800050000000082D00003077
-:10101000000000082D80000C000000188000FF2C4C
-:1010200000000000230000000000000925E6FFFF8B
-:10103000000000000B6E000000000003E7CF2C0052
-:10104000000000082200001B0000000C6952000094
-:101050000000000C29800000000000188000FF2420
-:10106000000000002A000000000000188000FF229D
-:10107000000000002A0000000000000C2980000091
-:101080000000001091DE0000000000082C80001A13
-:10109000000000082D00001A000000057366000023
-:1010A000000000082D8000020000000031800000D8
-:1010B0000000001091DE0000000000082C80000CF1
-:1010C000000000082D00000C000000082D80000426
-:1010D000000000188000FF150000000806660001EF
-:1010E00000000010BA9A197F000000000A64000096
-:1010F000000000000AE50000000000090B66FFFF89
-:10110000000000000C000000000000000B80000048
-:10111000000000080CC60012000000188000FF2E1E
-:10112000000000080F800003000000000000000025
-:1011300000000010009F00000000000827110012AE
-:10114000000000006690000000000010919B32003B
-:10115000000000100293000000000010B19800038E
-:1011600000000010001F0000000000080F800004B5
-:101170000000000C2980000000000010001F00008B
-:1011800000000010BA9A2C000000000031E32E008D
-:10119000000000000B800000000000008CCC8C00E0
-:1011A00000000010B5CC8C02000000080C8000018B
-:1011B000000000188000FF1B000000080F800003E3
-:1011C00000000010205300000000000C69520001D4
-:1011D0000000000022C58C0000000010009F0000ED
-:1011E0000000000027110000000000002690000011
-:1011F00000000000231B000000000010B198000355
-:1012000000000010001F0000000000080F80000414
-:101210000000000822000003000000082C80000CE1
-:10122000000000082D00000C00000010009F0000CE
-:1012300000000000259600000000000C298000003E
-:101240000000000032140000000000003295000091
-:101250000000000573662C000000000031E32E0042
-:10126000000000082D800010000000188000FEE241
-:10127000000000188000FEE1000000002A000000CD
-:1012800000000010001F0000000000000F008000A0
-:10129000000000080F800007000000188000001BFD
-:1012A00000000000280A0000000000000502000005
-:1012B00000000008220000090000000029000000D2
-:1012C0000000000F6568001000000000248A000084
-:1012D00000000003F66C940000000010B972A00436
-:1012E0000000000C73E700190000000C214200040C
-:1012F000000000003CF800000000000C2980000005
-:101300000000001020530000000000082200000828
-:101310000000000C6142000400000018000A0000F8
-:1013200000000000050200000000000C6142000007
-:1013300000000010014200030000000C33E7001D14
-:101340000000000C6142000200000018000A0000CA
-:10135000000000002A00000000000010001F000034
-:101360000000000F0F470007000000080F80000872
-:101370000000000C2980000000000010009F000009
-:10138000000000188000FEBF000000003351000084
-:10139000000000002A00000000000010B1C6002379
-:1013A0000000000F0F500007000000000A6000005E
-:1013B000000000000AE100000000000F4B6200087E
-:1013C000000000090B1600FF0000000F4C62001027
-:1013D000000000000D620000000000090D1A00FF6F
-:1013E00000000010075000030000000C0D1A000858
-:1013F0000000000C0B160008000000000CC60000E6
-:10140000000000000B8000000000000006980000B3
-:10141000000000080F8000030000001006C2000456
-:101420000000000C2900000200000010264200020B
-:101430000000000C295200030000000822000001F7
-:1014400000000010009F000000000000231B0000AF
-:101450000000000027111A00000000006690000044
-:101460000000000C2952000000000010B197320962
-:101470000000000C29800000000000000698000019
-:1014800000000010205300000000000C295200034F
-:101490000000000022C58C0000000010001F0000AA
-:1014A000000000080F800003000000188000FFF318
-:1014B00000000010B1C8001300000010B1C6000306
-:1014C0000000000C298000000000001020530000E4
-:1014D0000000000C295200000000000C29520003FB
-:1014E0000000001006C200020000000C2952000299
-:1014F0000000000022C58C000000000027650000ED
-:101500000000000026E40000000000082200001691
-:1015100000000010B1C600030000000023480000D6
-:1015200000000010B180000500000000234800000A
-:101530000000000C298000000000000F0F50000781
-:1015400000000018800000120000000822000016B1
-:101550000000000C29800000000000003014000092
-:10156000000000003095000000000010075000034C
-:10157000000000090B1600FF000000090D1A00FF13
-:101580000000000F31160008000000003162340036
-:1015900000000003F162300000000010205F000036
-:1015A000000000002C510000000000092CD1007F39
-:1015B000000000082CD90000000000082D000000E9
-:1015C000000000082D80000C00000000000000005A
-:1015D0000000001091DE00000000001005C20004B1
-:1015E000000000080F80000700000000330000002A
-:1015F00000000010009F0000000000188000FE7036
-:10160000000000002A0000000000000F0F5000073B
-:1016100000000010B1C6002D0000000F4742000876
-:1016200000000009070E000F00000008070E000868
-:1016300000000010001F0000000000080900000169
-:101640000000000709121C0000000003CBCA920032
-:10165000000000000B97A2000000000742171C00CA
-:10166000000000000B0400000000000F0A840003CB
-:10167000000000000A959C00000000004A009A004B
-:101680000000000882120001000000010C17080091
-:10169000000000000C978C00000000000218000001
-:1016A000000000080D00FFFF000000080F8000068A
-:1016B0000000000C290000000000001006C2000419
-:1016C0000000000C29520002000000102642000217
-:1016D0000000000C29520003000000082200000155
-:1016E00000000010009F000000000010B197320CB5
-:1016F00000000000231B000000000000271108006C
-:1017000000000000669000000000000C298000002E
-:10171000000000000218000000000010205300002C
-:101720000000000C295200030000000022C5360012
-:1017300000000010001F0000000000080F800006DD
-:10174000000000188000FFF400000000231B0000D0
-:101750000000000027110800000000006690000053
-:1017600000000010B1C8000B0000000C2980000030
-:1017700000000010205300000000000C295200005F
-:101780000000000C295200030000001006C20002F5
-:101790000000000C295200020000000022C58C004D
-:1017A00000000000276500000000000026E40000A3
-:1017B000000000002348000000000008220000177D
-:1017C0000000000C2980000000000010001F000035
-:0817D000000000188000FE3546
-:00000001FF
-/*
- * This file contains firmware data derived from proprietary unpublished
- * source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
- *
- * Permission is hereby granted for the distribution of this firmware data
- * in hexadecimal or equivalent format, provided this copyright notice is
- * accompanying it.
- */
diff --git a/firmware/bnx2/bnx2-rv2p-09ax-6.0.17.fw.ihex b/firmware/bnx2/bnx2-rv2p-09ax-6.0.17.fw.ihex
deleted file mode 100644
index d2f275788f16..000000000000
--- a/firmware/bnx2/bnx2-rv2p-09ax-6.0.17.fw.ihex
+++ /dev/null
@@ -1,425 +0,0 @@
-:100000000000000000000970000000580000000916
-:1000100000000000000000000000000000000000E0
-:1000200000000000000000000000000000000000D0
-:1000300000001010000009C80000000500000000CA
-:1000400000000000000000000000000000000000B0
-:080050000000000000000000A8
-:0800580000000010B180000659
-:100060000000001F03060011000000080500FFFF4C
-:10007000000000180002000000000008050000FF5A
-:10008000000000180002000000000008AC000001A1
-:1000900000000008078000000000000C2F80000115
-:1000A000000000002B000000000000002B8000007A
-:1000B0000000001091E1000200000008AC00000107
-:1000C00000000010203F003B00000010213F000313
-:1000D0000000001020BF0015000000188000FFFD88
-:1000E0000000000C1F800002000000188000FFF9D3
-:1000F00000000008B1000001000000082C80010C85
-:10010000000000082D000008000000082D800001FC
-:10011000000000188000004F0000000B2FDF0002DD
-:100120000000000C1F800002000000002C070000EF
-:100130000000001091DE0000000000188000FFEFBA
-:100140000000000B2FDF00020000000C1F800000E9
-:10015000000000002C0700000000001091DE0000ED
-:10016000000000188000FFEA0000000C1F80000261
-:10017000000000188000FFE80000000802240025AD
-:1001800000000018000400000000001880000000BB
-:10019000000000188000001B0000001880000055BF
-:1001A000000000188000000000000018800000001F
-:1001B000000000188000000000000018800000000F
-:1001C00000000018800000000000001880000000FF
-:1001D00000000018800000000000001880000000EF
-:1001E00000000018800000000000001880000000DF
-:1001F000000000188000009D000000188000000032
-:1002000000000018800000000000001880000000BE
-:1002100000000018800000000000001880000000AE
-:10022000000000188000000000000018800000009E
-:10023000000000188000009C00000018800000C62C
-:10024000000000188000009300000018800000E902
-:10025000000000188000003E000000188000000030
-:10026000000000188000007A0000001091D4000007
-:100270000000000C298000010000000C1F8000011C
-:10028000000000082A0000020000000807800000AB
-:10029000000000188000FFC4000000080380010077
-:1002A00000000010B73C0E000000001880000000A5
-:1002B000000000000202000000000000029A00009E
-:1002C00000000000060C2C0000000004C60C3400E6
-:1002D00000000010001F000000000010BA8C2C0C61
-:1002E000000000080696000400000009068DFFFCCF
-:1002F00000000004CD051A0000000004CC9A18008C
-:100300000000001020D700000000000C2B56000059
-:1003100000000000000000000000000000000000DD
-:100320000000001020D70000000000080F8000012E
-:1003300000000010B18001F400000010001F000058
-:100340000000000C6B5600000000001800040000C4
-:10035000000000000682000000000010B18F0004C1
-:1003600000000010B18F1403000000082A000001F3
-:100370000000001091D4000000000000078014006D
-:1003800000000018000D0000000000000502000041
-:100390000000001091DE000000000018000A0000BC
-:1003A00000000000068200000000001091DE000046
-:1003B000000000090561FFFF00000010918A0002A3
-:1003C0000000000830E1FFFF000000188000FF96E9
-:1003D000000000010561140000000010918A000275
-:1003E00000000008B0E1000100000018000D00004E
-:1003F00000000000068200000000001091DE0000F6
-:10040000000000090562FFFF00000010918A000251
-:10041000000000083162FFFF000000188000FF8C20
-:10042000000000010562140000000010918A000223
-:1004300000000008B162000100000018000D00007B
-:1004400000000010B1A0B0130000000B2FDF00026D
-:10045000000000002C200000000000082C8000009C
-:10046000000000082D0000000000001091D40000E2
-:100470000000000805000055000000188000FFDBA8
-:10048000000000082D80011C00000010001F00006B
-:10049000000000188000FFE20000000F4760000825
-:1004A0000000000F060E0001000000000F580000C1
-:1004B000000000000A640000000000000AE50000DF
-:1004C000000000090B66FFFF000000000D61000046
-:1004D00000000018800000150000000F47600008B1
-:1004E0000000000B2FDF0002000000082C8000003D
-:1004F000000000082D0000000000001091D4000052
-:10050000000000082D80011C0000000F060E0001F5
-:1005100000000010001F0000000000000F58000045
-:10052000000000188000FFD0000000000A640000F6
-:10053000000000000AE50000000000090B66FFFF54
-:10054000000000000D6100000000000002620000D9
-:100550000000000002E000000000000B2FDF00029E
-:100560000000000030050000000000003104000021
-:1005700000000000309A0000000000100060000A37
-:10058000000000080516000100000010BA9A1403CC
-:1005900000000000030000000000001880000006BA
-:1005A000000000188000FF5900000010B606140477
-:1005B0000000000803060001000000082A000001F6
-:1005C000000000188000FF5E000000188000FF9D02
-:1005D0000000000C298000010000000C29520001DD
-:1005E0000000000C295200000000000822800002D8
-:1005F000000000080200000E000000080280001A3F
-:1006000000000010B1C40A0200000008020000034C
-:100610000000000C1F800001000000002ADF000025
-:10062000000000002A000800000000188000FF51B0
-:100630000000000B2FDF00020000001091D400002A
-:10064000000000082A000001000000002C2000002B
-:100650000000001091D40000000000082C80000071
-:10066000000000082D000000000000082D80011C83
-:10067000000000188000FFA3000000082C80000686
-:10068000000000082D00000600000000308000007F
-:100690000000000031000000000000082D8000066E
-:1006A0000000000C298000010000000C1F800001E8
-:1006B0000000001091DE0000000000002ADF0000B2
-:1006C000000000082A000010000000080780000059
-:1006D000000000188000FF3C0000001091D40000D2
-:1006E00000000008050000AA000000188000FF8D2F
-:1006F0000000000C298000010000000C1F80000198
-:10070000000000082A000009000000188000FF35E2
-:100710000000001091D40000000000080500005502
-:10072000000000188000FF860000001091A0B002B9
-:1007300000000010B1E662070000000B2FDF00028E
-:10074000000000002C310000000000092CB1007FE7
-:10075000000000082CD90000000000082D00000057
-:10076000000000082D80010D00000010B1A8000657
-:1007700000000010205F0000000000002C2000009E
-:10078000000000002CA70000000000082D00001051
-:10079000000000082D800108000000188000FF7E86
-:1007A00000000010B1A6001000000010001F0000A3
-:1007B0000000000F0F300007000000000A6000007A
-:1007C000000000000AE100000000000F4B6200087A
-:1007D000000000090B1600FF000000000D62000081
-:1007E000000000090D1A00FF000000100730000390
-:1007F0000000000C0D1A00080000000C0B16000889
-:100800000000000F4CE30018000000000C992C00C1
-:1008100000000004CC993400000000080F800000A4
-:100820000000000C298000010000000033310000AE
-:100830000000000822000016000000002ADF00006F
-:10084000000000082A00000C00000010009F0000BB
-:10085000000000002C2000000000000C1F800001A0
-:10086000000000188000FF0A0000001091D4000072
-:1008700000000008050000AA000000188000FF5BCF
-:100880000000000F4722000800000009070E000FBB
-:1008900000000008070E00080000000802800001A8
-:1008A0000000000702851C0000000008828500018E
-:1008B0000000000002854C000000000742851C007B
-:1008C00000000003C3AA52000000000003B10E00A4
-:1008D000000000074B071C000000000F0F3000074E
-:1008E0000000000F0A960003000000000A955C005B
-:1008F000000000004A005A00000000000C960A00A8
-:10090000000000090C99FFFF000000080D00FFFF28
-:1009100000000010BA992C02000000080F800005AA
-:1009200000000010B1A8000800000010205F0000C7
-:100930000000000B2FDF0002000000002C20000050
-:10094000000000002CA70000000000082D0000108F
-:10095000000000082D800108000000188000FF46FC
-:100960000000000C2980000100000010001F0000A2
-:100970000000000C1F800001000000002ADF0000C2
-:10098000000000082A00000D000000188000FEE5AD
-:100990000000001091D40000000000080500005580
-:1009A000000000188000FF360000000C29800001C4
-:1009B0000000000C1F800001000000082A00000752
-:0809C000000000188000FEDEBB
-:0809C80000000010B1800004E2
-:1009D0000000001F0306001100000008050000FFD2
-:1009E0000000001800020000000000002A000000C3
-:1009F00000000010B1D400000000001091DE0000E3
-:100A0000000000102053000000000010001F000034
-:100A10000000000C6BD70001000000002F80AA002E
-:100A20000000000C298000010000000802540010A2
-:100A3000000000002C400000000000000F400000FB
-:100A4000000000092952003F0000001800040000C7
-:100A50000000001880000011000000188000001243
-:100A600000000018800000470000001880000137D7
-:100A700000000018800001360000001880000135D9
-:100A80000000001880000135000000188000000000
-:100A9000000000188000014F0000001880000131A4
-:100AA00000000018800000000000001880000155C0
-:100AB00000000018800001A6000000188000006DF2
-:100AC00000000018800000E400000018800000E52D
-:100AD000000000188000012A000000002A00000029
-:100AE000000000188000FFE2000000002A00000063
-:100AF0000000000C29800000000000188000FFDFCB
-:100B00000000000003820000000000188000FFDAEF
-:100B1000000000010C161400000000008C181400E6
-:100B20000000001091980003000000080C960002DD
-:100B300000000010B1800003000000080C960001C6
-:100B4000000000000C000000000000000D19000073
-:100B5000000000080F8000010000000000000000FD
-:100B600000000010001F00000000000C6BD7000107
-:100B700000000010011301F300000018000700003E
-:100B8000000000000502000000000010B99A2C21AE
-:100B900000000010205F0000000000002C1E00007C
-:100BA000000000082C800006000000082D00000650
-:100BB000000000082D80010200000000000000007D
-:100BC0000000001091DE0000000000000D61000038
-:100BD00000000018000A00000000000005020000EC
-:100BE00000000010B99A2C1600000010205F0000D1
-:100BF0000000000009D80000000000002C1E0000CA
-:100C0000000000082C80010E000000082D00000AE2
-:100C1000000000082D80010200000000000000001C
-:100C20000000001091DE0000000000000D620000D6
-:100C3000000000002C13000000000018000A000053
-:100C4000000000000502000000000010B99A2C0905
-:100C500000000010205F0000000000002C1E0000BB
-:100C6000000000082C800006000000082D00006A2B
-:100C7000000000082D8001020000000000000000BC
-:100C80000000001091DE0000000000000D7A00005E
-:100C900000000018000A0000000000002A00000008
-:100CA0000000000822000001000000000D610000AB
-:100CB0000000001021C2002800000010B1C6000290
-:100CC00000000010234200B3000000090B66FFFF84
-:100CD00000000010BA9A2C24000000000A640000F2
-:100CE000000000000AE50000000000000C00000009
-:100CF000000000000B800000000000080CC600127D
-:100D0000000000188000FFD0000000080F800003E2
-:100D1000000000000000000000000010001F0000A4
-:100D20000000000C6BD70001000000082711001222
-:100D3000000000006690000000000010B198000460
-:100D400000000010001F00000000000C6BD7000125
-:100D5000000000080F8000040000000822000003CB
-:100D6000000000082C80000C000000082D00000C82
-:100D700000000010001F00000000000C6BD70001F5
-:100D80000000001091C6000600000010001F0000C7
-:100D90000000000C6BD7000100000010BA9A2C0371
-:100DA000000000080F800004000000188000FFFC15
-:100DB00000000000259600000000000C29800000C3
-:100DC0000000000032140000000000003295000016
-:100DD0000000000573662C000000000031E32E00C7
-:100DE000000000082D800010000000188000FF8126
-:100DF00000000000230000000000000925E6FFFFBE
-:100E0000000000082200000B0000000C69520000E6
-:100E10000000000C29800000000000188000FF7B0B
-:100E2000000000002A000000000000082C800040A4
-:100E3000000000082D000020000000082D80011C8B
-:100E400000000008220000010000001091DE0000F8
-:100E50000000000F42EA001000000010004F0004E4
-:100E600000000010B746920000000008024900127E
-:100E700000000010B5840A00000000000D610000B1
-:100E800000000010BA6634640000000883050012F8
-:100E900000000010004F00020000000003490000A5
-:100EA0000000000183068C000000000083C60C00D7
-:100EB00000000010B1870013000000000B6E00005E
-:100EC000000000090569FFFF00000010918A000280
-:100ED0000000000834E9FFFF000000188000FF60F8
-:100EE000000000010569140000000010918A000252
-:100EF00000000008B4E9000100000010BAE92C5518
-:100F00000000000086692C000000000002000000C4
-:100F10000000000902EAFFFF00000010000C0002C0
-:100F20000000000002040A000000000F460C00014F
-:100F30000000000F0285000100000010918C01FCF0
-:100F400000000010B7040E4C000000000D6100000E
-:100F5000000000000A640000000000000AE5000034
-:100F6000000000090B66FFFF000000000C000000FD
-:100F7000000000000B800000000000080C8600123A
-:100F8000000000080F8000030000000C2952000040
-:100F900000000010001F00000000000C6BD70001D3
-:100FA00000000008271100120000000066900000F9
-:100FB000000000002306000000000010B1980007A8
-:100FC00000000010001F00000000000C6BD70001A3
-:100FD000000000080F800004000000000000000076
-:100FE00000000010001F00000000000C6BD7000183
-:100FF00000000000321400000000000032950000E4
-:101000000000000031E32E000000000573662C0094
-:10101000000000002596000000000010B187001FAE
-:101020000000000C298000000000000F0F6B00077B
-:10103000000000000D690000000000000A6C0000C4
-:10104000000000000AED0000000000000B6E000030
-:10105000000000000B800000000000000C87000072
-:10106000000000188000FF2F000000010C16140083
-:10107000000000008C181400000000080C9600010D
-:101080000000001091980002000000080C99000177
-:10109000000000000D190000000000000C0000001E
-:1010A000000000080F800001000000102053000025
-:1010B0000000000C6952000100000010001F000039
-:1010C0000000000C6BD700010000000022C58C005E
-:1010D00000000000231200000000000027110000A3
-:1010E000000000002690000000000010B8170E035A
-:1010F0000000000C29800000000000188000FFEDB7
-:101100000000000082970E0000000000A3120A00F9
-:10111000000000082200001A000000082C80000CCB
-:10112000000000082D00000C000000082D800010B9
-:1011300000000010001F00000000000C6BD7000131
-:10114000000000000D6E000000000003E7CF340037
-:101150000000000C298000000000001091DE00005B
-:1011600000000010B18700070000000036140000E6
-:101170000000000036950000000000003716000057
-:10118000000000082C800050000000082D000030F6
-:10119000000000082D80000C000000188000FF0BEC
-:1011A00000000000230000000000000925E6FFFF0A
-:1011B000000000000B6E000000000003E7CF2C00D1
-:1011C000000000082200001B0000000C6952000013
-:1011D0000000000C29800000000000188000FF03C0
-:1011E000000000002A000000000000188000FF013D
-:1011F000000000002A0000000000000C2980000010
-:101200000000001091DE0000000000082C80001A91
-:10121000000000082D00001A0000000573660000A1
-:10122000000000082D800002000000003180000056
-:101230000000001091DE0000000000082C80000C6F
-:10124000000000082D00000C000000082D800004A4
-:10125000000000188000FEF400000008066600018F
-:1012600000000010BA9A1972000000000A64000021
-:10127000000000000AE50000000000090B66FFFF07
-:10128000000000000C000000000000000B800000C7
-:10129000000000080CC60012000000188000FF1DAE
-:1012A000000000080F8000030000000000000000A4
-:1012B00000000010001F00000000000C6BD70001B0
-:1012C00000000008271100120000000066900000D6
-:1012D00000000010919B32000000001002930000FB
-:1012E00000000010B198000300000010001F000073
-:1012F0000000000C6BD70001000000080F80000404
-:101300000000000C2980000000000010001F0000F9
-:101310000000000C6BD7000100000010BA9A2C00EE
-:101320000000000031E32E00000000000B800000F0
-:10133000000000008CCC8C0000000010B5CC8C02AA
-:10134000000000080C800001000000188000FF076A
-:10135000000000080F800003000000102053000070
-:101360000000000C695200010000000022C58C0042
-:1013700000000010001F00000000000C6BD70001EF
-:10138000000000002711000000000000269000006F
-:1013900000000000231B000000000010B1980003B3
-:1013A00000000010001F00000000000C6BD70001BF
-:1013B000000000080F800004000000082200000365
-:1013C000000000082C80000C000000082D00000C1C
-:1013D00000000010001F00000000000C6BD700018F
-:1013E00000000000259600000000000C298000008D
-:1013F00000000000321400000000000032950000E0
-:101400000000000573662C000000000031E32E0090
-:10141000000000082D800010000000188000FEBBB6
-:10142000000000188000FEBA000000002A00000042
-:1014300000000010001F00000000000C6BD700012E
-:10144000000000000F008000000000080F8000076F
-:10145000000000188000001C00000000280A0000A6
-:101460000000000005020000000000082200000942
-:1014700000000000290000000000000F6568001057
-:1014800000000000248A000000000003F66C9400B5
-:1014900000000010B972A0040000000C73E70019EE
-:1014A0000000000C21420004000000003CF8000095
-:1014B0000000000C298000000000001020530000F4
-:1014C00000000008220000080000000C6142000437
-:1014D00000000018000A00000000000005020000E3
-:1014E0000000000C614200000000001001420003F7
-:1014F0000000000C33E7001D0000000C61420002F8
-:1015000000000018000A0000000000002A0000008F
-:1015100000000010001F00000000000C6BD700014D
-:101520000000000F0F470007000000080F800008B0
-:101530000000000C2980000000000010001F0000C7
-:101540000000000C6BD70001000000188000FE9521
-:101550000000000033510000000000002A000000DD
-:1015600000000010B1C600250000000F0F5000075A
-:10157000000000000A600000000000000AE1000016
-:101580000000000F4B620008000000090B1600FF6E
-:101590000000000F4C620010000000000D6200000F
-:1015A000000000090D1A00FF0000001007500003A2
-:1015B0000000000C0D1A00080000000C0B160008BB
-:1015C000000000000CC60000000000000B800000BE
-:1015D0000000000006980000000000080F800003D3
-:1015E0000000001006C200040000000C29000002E8
-:1015F00000000010264200020000000C29520003E7
-:10160000000000082200000100000010001F000080
-:101610000000000C6BD7000100000000231B00003D
-:101620000000000027111A00000000006690000072
-:101630000000000C2952000000000010B197320A8F
-:101640000000000C29800000000000000698000047
-:1016500000000010205300000000000C295200037D
-:101660000000000022C58C0000000010001F0000D8
-:101670000000000C6BD70001000000080F80000381
-:10168000000000188000FFF100000010B1C8001336
-:1016900000000010B1C600030000000C298000000B
-:1016A00000000010205300000000000C2952000030
-:1016B0000000000C295200030000001006C20002C6
-:1016C0000000000C295200020000000022C58C001E
-:1016D00000000000276500000000000026E4000074
-:1016E000000000082200001600000010B1C6000330
-:1016F000000000002348000000000010B180000539
-:1017000000000000234800000000000C29800000B9
-:101710000000000F0F5000070000001880000012AA
-:1017200000000008220000160000000C29800000C4
-:1017300000000000301400000000000030950000A0
-:101740000000001007500003000000090B1600FF06
-:10175000000000090D1A00FF0000000F31160008FC
-:10176000000000003162340000000003F16230002C
-:1017700000000010205F0000000000002C5100005D
-:10178000000000092CD1007F000000082CD90000C7
-:10179000000000082D000000000000082D80000C53
-:1017A00000000000000000000000001091DE0000BA
-:1017B0000000001005C20005000000080F800007AF
-:1017C000000000003300000000000010001F0000B7
-:1017D0000000000C6BD70001000000188000FE43E1
-:1017E000000000002A0000000000000F0F5000075A
-:1017F00000000010B1C600300000000F4742000892
-:1018000000000009070E000F00000008070E000886
-:1018100000000010001F00000000000C6BD700014A
-:1018200000000008090000010000000709121C0068
-:1018300000000003CBCA9200000000000B97A2003A
-:101840000000000742171C00000000000B0400000D
-:101850000000000F0A840003000000000A959C00AD
-:10186000000000004A009A000000000882120001F7
-:10187000000000010C170800000000000C978C000D
-:101880000000000002180000000000080D00FFFF2B
-:10189000000000080F8000060000000C2900000076
-:1018A0000000001006C200040000000C29520002D3
-:1018B00000000010264200020000000C2952000324
-:1018C000000000082200000100000010001F0000BE
-:1018D0000000000C6BD7000100000010B197320D22
-:1018E00000000000231B000000000000271108007A
-:1018F00000000000669000000000000C298000003D
-:10190000000000000218000000000010205300003A
-:101910000000000C295200030000000022C5360020
-:1019200000000010001F00000000000C6BD7000139
-:10193000000000080F800006000000188000FFF281
-:1019400000000000231B0000000000002711080019
-:10195000000000006690000000000010B1C8000BFD
-:101960000000000C2980000000000010205300003F
-:101970000000000C295200000000000C2952000356
-:101980000000001006C200020000000C29520002F4
-:101990000000000022C58C00000000002765000048
-:1019A0000000000026E400000000000023480000C2
-:1019B00000000008220000170000000C2980000031
-:1019C00000000010001F00000000000C6BD7000199
-:0819D000000000188000FE0475
-:00000001FF
-/*
- * This file contains firmware data derived from proprietary unpublished
- * source code, Copyright (c) 2004 - 2009 Broadcom Corporation.
- *
- * Permission is hereby granted for the distribution of this firmware data
- * in hexadecimal or equivalent format, provided this copyright notice is
- * accompanying it.
- */
diff --git a/firmware/bnx2x/bnx2x-e1-6.2.9.0.fw.ihex b/firmware/bnx2x/bnx2x-e1-6.2.9.0.fw.ihex
deleted file mode 100644
index 0ed7f5891184..000000000000
--- a/firmware/bnx2x/bnx2x-e1-6.2.9.0.fw.ihex
+++ /dev/null
@@ -1,9484 +0,0 @@
-:1000000000003BB0000000680000070C00003C202E
-:1000100000001AF8000043300000007C00005E3051
-:1000200000007A2C00005EB0000000B00000D8E0B4
-:10003000000080200000D99800000088000159C00D
-:100040000000398800015A5000000090000193E040
-:100050000000AC040001947800000FFC0002408016
-:100060000000000400025080020400480000000F5D
-:100070000204005400000045020400580000000083
-:100080000204005C0000000602040070000000048E
-:1000900002040078000000000204007C1217000037
-:1000A00002040080221700000204008432170000BE
-:1000B00006040088000000050204009C12150000E0
-:1000C000020400A022150000020400A43215000062
-:1000D000060400A800000004020400B8021000009A
-:1000E000020400BC00100000020400C01010000058
-:1000F000020400C420100000020400C830100000F8
-:10010000060400CC00000004020400DC0010000023
-:10011000020400E012140000020400E422140000B3
-:10012000020400E832140000060400EC00000004A1
-:100130000104012400000000010401280000000067
-:100140000104012C00000000010401300000000047
-:1001500002040004000000FF02040008000000FF89
-:100160000204000C000000FF02040010000000FF69
-:1001700002040014000000FF02040018000000FF49
-:100180000204001C000000FF02040020000000FF29
-:10019000020400240000003E0204002800000000C9
-:1001A0000204002C0000003F020400300000003F69
-:1001B000020400340000003F020400380000000088
-:1001C0000204003C0000003F020400400000003F29
-:1001D000020400440000003F020420080000021155
-:1001E0000204200C0000020002042010000002049F
-:1001F00002042014000002190204201C0000FFFF6A
-:10020000020420200000FFFF020420240000FFFF62
-:10021000020420280000FFFF0604203800000080B0
-:100220000204223807FFFFFF0204223C0000003FC7
-:100230000204224007FFFFFF020422440000000FD7
-:1002400001042248000000000104224C00000000CC
-:1002500001042250000000000104225400000000AC
-:1002600001042258000000000104225C000000008C
-:10027000010422600000000001042264000000006C
-:1002800001042268000000000104226C000000004C
-:10029000010422700000000001042274000000002C
-:1002A00001042278000000000104227C000000000C
-:1002B000020424BC000000010C042000000003E83C
-:1002C0000A042000000000010B0420000000000AC6
-:1002D0000605400000000D0002050044000000205B
-:1002E00002050048000000320205009002150020BF
-:1002F000020500940215002002050098000000305D
-:100300000205009C08100000020500A00000003358
-:10031000020500A400000030020500A80000003122
-:10032000020500AC00000002020500B0000000055C
-:10033000020500B400000006020500B8000000023B
-:10034000020500BC00000002020500C00000000021
-:10035000020500C400000005020500C800000002FC
-:10036000020500CC00000002020500D000000002DF
-:10037000020500D400000001020501140000000184
-:100380000205011C0000000102050120000000021E
-:1003900002050204000000010205020C00000040FA
-:1003A00002050210000000400205021C00000020AF
-:1003B00002050220000000130205022400000020B4
-:1003C000060502400000000A04050280002000002B
-:1003D000020500500000000702050054000000075D
-:1003E00002050058000000000205005C0000000843
-:1003F0000605006000000004020500D800000006A9
-:10040000020500E00000000D020500E40000002DE0
-:10041000020500E800000000020500EC00000020DA
-:10042000020500F000000000020500F400000020BA
-:10043000020500F800000000020500FC000000209A
-:100440000205000400000001020500080000000190
-:100450000205000C00000001020500100000000170
-:100460000205001400000001020500180000000150
-:100470000205001C00000001020500200000000130
-:100480000205002400000001020500280000000110
-:100490000205002C000000010205003000000001F0
-:1004A00002050034000000010205003800000001D0
-:1004B0000205003C000000010205004000000001B0
-:1004C0000406100002000020020600DC000000010B
-:1004D000010600D80000000004060200000302200C
-:1004E000020600DC0000000002060068000000B800
-:1004F0000206007800000114010600B800000000A8
-:10050000010600C8000000000206006C000000B8F0
-:100510000206007C00000114010600BC000000007F
-:10052000010600CC0000000007180400007B00005A
-:100530000818076000140223071C00002A040000AA
-:10054000071C800032110A82071D00001E0C1707CD
-:10055000081D4550575602250118000000000000F4
-:10056000011800040000000001180008000000004D
-:100570000118000C0000000001180010000000002D
-:100580000118001400000000021800200000000103
-:1005900002180024000000020218002800000003D6
-:1005A0000218002C000000000218003000000004B7
-:1005B000021800340000000102180038000000009A
-:1005C0000218003C00000001021800400000000476
-:1005D000021800440000000002180048000000015A
-:1005E0000218004C00000003021800500000000038
-:1005F0000218005400000001021800580000000416
-:100600000218005C000000000218006000000001F9
-:1006100002180064000000030218006800000000D7
-:100620000218006C000000010218007000000004B5
-:100630000218007400000000021800780000000496
-:100640000218007C00000003061800800000000271
-:10065000021800A400003FFF021800A8000003FFDA
-:1006600002180224000000000218023400000000FA
-:100670000218024C00000000021802E4000000FF13
-:100680000618100000000400021B8BC000000001CF
-:10069000021B800000000034021B80400000001894
-:1006A000021B80800000000C021B80C000000020A4
-:1006B0000C1B83000007A1200A1B830000000138E7
-:1006C0000B1B8300000013880A1B834000000000FE
-:1006D0000C1B8340000001F40B1B8340000000054D
-:1006E000021B83800007A120021B83C0000001F4CD
-:1006F000061A100000000273041A19CC0001022728
-:10070000061A2008000000C8061A20000000000297
-:10071000041A499800040228061A2E280000000234
-:10072000061A2E2000000002061A0800000000022F
-:10073000061A080800000004061A08180000000243
-:10074000041A08B00002022C061A2FD0000000067E
-:10075000041A2FE80002022E041A2FC000040230EF
-:10076000041A300000010234061A300400000003AD
-:10077000041A301000010235061A3014000000037C
-:10078000041A302000010236061A3024000000034B
-:10079000041A303000010237061A3034000000031A
-:1007A000041A304000010238061A304400000003E9
-:1007B000041A305000010239061A305400000003B8
-:1007C000041A30600001023A061A30640000000387
-:1007D000041A30700001023B061A30740000000356
-:1007E000041A30800001023C061A30840000000325
-:1007F000041A30900001023D061A309400000003F4
-:10080000041A30A00001023E061A30A400000003C2
-:10081000041A30B00001023F061A30B40000000391
-:10082000041A30C000010240061A30C40000000360
-:10083000041A30D000010241061A30D4000000032F
-:10084000041A30E000010242061A30E400000003FE
-:10085000041A30F000010243061A30F400000003CD
-:10086000041A310000010244061A3104000000039A
-:10087000041A311000010245061A31140000000369
-:10088000041A312000010246061A31240000000338
-:10089000041A313000010247061A31340000000307
-:1008A000041A314000010248061A314400000003D6
-:1008B000041A315000010249061A315400000003A5
-:1008C000041A31600001024A061A31640000000374
-:1008D000041A31700001024B061A31740000000343
-:1008E000041A31800001024C061A31840000000312
-:1008F000041A31900001024D061A319400000003E1
-:10090000041A31A00001024E061A31A400000003AF
-:10091000041A31B00001024F061A31B4000000037E
-:10092000041A31C000010250061A31C4000000034D
-:10093000041A31D000010251061A31D4000000031C
-:10094000041A31E000010252061A31E400000003EB
-:10095000041A31F000010253061A31F400000003BA
-:10096000041A320000010254061A32040000000387
-:10097000041A321000010255061A32140000000356
-:10098000041A322000010256061A32240000000325
-:10099000041A323000010257061A323400000003F4
-:1009A000041A324000010258061A324400000003C3
-:1009B000041A325000010259061A32540000000392
-:1009C000041A32600001025A061A32640000000361
-:1009D000041A32700001025B061A32740000000330
-:1009E000041A32800001025C061A328400000003FF
-:1009F000041A32900001025D061A329400000003CE
-:100A0000041A32A00001025E061A32A4000000039C
-:100A1000041A32B00001025F061A32B4000000036B
-:100A2000041A32C000010260061A32C4000000033A
-:100A3000041A32D000010261061A32D40000000309
-:100A4000041A32E000010262061A32E400000003D8
-:100A5000041A32F000010263061A32F400000003A7
-:100A6000041A330000010264061A33040000000374
-:100A7000041A331000010265061A33140000000343
-:100A8000041A332000010266061A33240000000312
-:100A9000041A333000010267061A333400000003E1
-:100AA000041A334000010268061A334400000003B0
-:100AB000041A335000010269061A3354000000037F
-:100AC000041A33600001026A061A3364000000034E
-:100AD000041A33700001026B061A3374000000031D
-:100AE000041A33800001026C061A338400000003EC
-:100AF000041A33900001026D061A339400000003BB
-:100B0000041A33A00001026E061A33A40000000389
-:100B1000041A33B00001026F061A33B40000000358
-:100B2000041A33C000010270061A33C40000000327
-:100B3000041A33D000010271061A33D400000003F6
-:100B4000041A33E000010272061A33E400000003C5
-:100B5000041A33F000010273061A33F40000000394
-:100B6000041A340000010274061A34040000000361
-:100B7000041A341000010275061A34140000000330
-:100B8000041A342000010276061A342400000003FF
-:100B9000041A343000010277061A343400000003CE
-:100BA000041A344000010278061A3444000000039D
-:100BB000041A345000010279061A3454000000036C
-:100BC000041A34600001027A061A3464000000033B
-:100BD000041A34700001027B061A3474000000030A
-:100BE000041A34800001027C061A348400000003D9
-:100BF000041A34900001027D061A349400000003A8
-:100C0000041A34A00001027E061A34A40000000376
-:100C1000041A34B00001027F061A34B40000000345
-:100C2000041A34C000010280061A34C40000000314
-:100C3000041A34D000010281061A34D400000003E3
-:100C4000041A34E000010282061A34E400000003B2
-:100C5000041A34F000010283061A34F40000000381
-:100C6000041A350000010284061A3504000000034E
-:100C7000041A351000010285061A3514000000031D
-:100C8000041A352000010286061A352400000003EC
-:100C9000041A353000010287061A353400000003BB
-:100CA000041A354000010288061A3544000000038A
-:100CB000041A355000010289061A35540000000359
-:100CC000041A35600001028A061A35640000000328
-:100CD000041A35700001028B061A357400000003F7
-:100CE000041A35800001028C061A358400000003C6
-:100CF000041A35900001028D061A35940000000395
-:100D0000041A35A00001028E061A35A40000000363
-:100D1000041A35B00001028F061A35B40000000332
-:100D2000041A35C000010290061A35C40000000301
-:100D3000041A35D000010291061A35D400000003D0
-:100D4000041A35E000010292061A35E4000000039F
-:100D5000041A35F000010293061A35F4000000036E
-:100D6000041A360000010294061A3604000000033B
-:100D7000041A361000010295061A3614000000030A
-:100D8000041A362000010296061A362400000003D9
-:100D9000041A363000010297061A363400000003A8
-:100DA000041A364000010298061A36440000000377
-:100DB000041A365000010299061A36540000000346
-:100DC000041A36600001029A061A36640000000315
-:100DD000041A36700001029B061A367400000003E4
-:100DE000041A36800001029C061A368400000003B3
-:100DF000041A36900001029D061A36940000000382
-:100E0000041A36A00001029E061A36A40000000350
-:100E1000041A36B00001029F061A36B4000000031F
-:100E2000041A36C0000102A0061A36C400000003EE
-:100E3000041A36D0000102A1061A36D400000003BD
-:100E4000041A36E0000102A2061A36E4000000038C
-:100E5000041A36F0000102A3061A36F4000000035B
-:100E6000041A3700000102A4061A37040000000328
-:100E7000041A3710000102A5061A371400000003F7
-:100E8000041A3720000102A6061A372400000003C6
-:100E9000041A3730000102A7061A37340000000395
-:100EA000041A3740000102A8061A37440000000364
-:100EB000041A3750000102A9061A37540000000333
-:100EC000041A3760000102AA061A37640000000302
-:100ED000041A3770000102AB061A377400000003D1
-:100EE000041A3780000102AC061A378400000003A0
-:100EF000041A3790000102AD061A3794000000036F
-:100F0000041A37A0000102AE061A37A4000000033D
-:100F1000041A37B0000102AF061A37B4000000030C
-:100F2000041A37C0000102B0061A37C400000003DB
-:100F3000041A37D0000102B1061A37D400000003AA
-:100F4000041A37E0000102B2061A37E40000000379
-:100F5000041A37F0000102B3061A37F40000000348
-:100F6000041A3800000102B4061A38040000000315
-:100F7000041A3810000102B5061A381400000003E4
-:100F8000041A3820000102B6061A382400000003B3
-:100F9000041A3830000102B7061A38340000000382
-:100FA000041A3840000102B8061A38440000000351
-:100FB000041A3850000102B9061A38540000000320
-:100FC000041A3860000102BA061A386400000003EF
-:100FD000041A3870000102BB061A387400000003BE
-:100FE000041A3880000102BC061A3884000000038D
-:100FF000041A3890000102BD061A3894000000035C
-:10100000041A38A0000102BE061A38A4000000032A
-:10101000041A38B0000102BF061A38B400000003F9
-:10102000041A38C0000102C0061A38C400000003C8
-:10103000041A38D0000102C1061A38D40000000397
-:10104000041A38E0000102C2061A38E40000000366
-:10105000041A38F0000102C3061A38F40000000335
-:10106000041A3900000102C4061A39040000000302
-:10107000041A3910000102C5061A391400000003D1
-:10108000041A3920000102C6061A392400000003A0
-:10109000041A3930000102C7061A3934000000036F
-:1010A000041A3940000102C8061A3944000000033E
-:1010B000041A3950000102C9061A3954000000030D
-:1010C000041A3960000102CA061A396400000003DC
-:1010D000041A3970000102CB061A397400000003AB
-:1010E000041A3980000102CC061A3984000000037A
-:1010F000041A3990000102CD061A39940000000349
-:10110000041A39A0000102CE061A39A40000000317
-:10111000041A39B0000102CF061A39B400000003E6
-:10112000041A39C0000102D0061A39C400000003B5
-:10113000041A39D0000102D1061A39D40000000384
-:10114000041A39E0000102D2061A39E40000000353
-:10115000041A39F0000102D3061A39F40000000322
-:10116000041A3A00000102D4061A3A0400000003EF
-:10117000041A3A10000102D5061A3A1400000003BE
-:10118000041A3A20000102D6061A3A24000000038D
-:10119000041A3A30000102D7061A3A34000000035C
-:1011A000041A3A40000102D8061A3A44000000032B
-:1011B000041A3A50000102D9061A3A5400000003FA
-:1011C000041A3A60000102DA061A3A6400000003C9
-:1011D000041A3A70000102DB061A3A740000000398
-:1011E000041A3A80000102DC061A3A840000000367
-:1011F000041A3A90000102DD061A3A940000000336
-:10120000041A3AA0000102DE061A3AA40000000304
-:10121000041A3AB0000102DF061A3AB400000003D3
-:10122000041A3AC0000102E0061A3AC400000003A2
-:10123000041A3AD0000102E1061A3AD40000000371
-:10124000041A3AE0000102E2061A3AE40000000340
-:10125000041A3AF0000102E3061A3AF4000000030F
-:10126000041A3B00000102E4061A3B0400000003DC
-:10127000041A3B10000102E5061A3B1400000003AB
-:10128000041A3B20000102E6061A3B24000000037A
-:10129000041A3B30000102E7061A3B340000000349
-:1012A000041A3B40000102E8061A3B440000000318
-:1012B000041A3B50000102E9061A3B5400000003E7
-:1012C000041A3B60000102EA061A3B6400000003B6
-:1012D000041A3B70000102EB061A3B740000000385
-:1012E000041A3B80000102EC061A3B840000000354
-:1012F000041A3B90000102ED061A3B940000000323
-:10130000041A3BA0000102EE061A3BA400000003F1
-:10131000041A3BB0000102EF061A3BB400000003C0
-:10132000041A3BC0000102F0061A3BC4000000038F
-:10133000041A3BD0000102F1061A3BD4000000035E
-:10134000041A3BE0000102F2061A3BE4000000032D
-:10135000041A3BF0000102F3061A3BF400000003FC
-:10136000041A3C00000102F4061A3C0400000003C9
-:10137000041A3C10000102F5061A3C140000000398
-:10138000041A3C20000102F6061A3C240000000367
-:10139000041A3C30000102F7061A3C340000000336
-:1013A000041A3C40000102F8061A3C440000000305
-:1013B000041A3C50000102F9061A3C5400000003D4
-:1013C000041A3C60000102FA061A3C6400000003A3
-:1013D000041A3C70000102FB061A3C740000000372
-:1013E000041A3C80000102FC061A3C840000000341
-:1013F000041A3C90000102FD061A3C940000000310
-:10140000041A3CA0000102FE061A3CA400000003DE
-:10141000041A3CB0000102FF061A3CB400000003AD
-:10142000041A3CC000010300061A3CC4000000037B
-:10143000041A3CD000010301061A3CD4000000034A
-:10144000041A3CE000010302061A3CE40000000319
-:10145000041A3CF000010303061A3CF400000003E8
-:10146000041A3D0000010304061A3D0400000003B5
-:10147000041A3D1000010305061A3D140000000384
-:10148000041A3D2000010306061A3D240000000353
-:10149000041A3D3000010307061A3D340000000322
-:1014A000041A3D4000010308061A3D4400000003F1
-:1014B000041A3D5000010309061A3D5400000003C0
-:1014C000041A3D600001030A061A3D64000000038F
-:1014D000041A3D700001030B061A3D74000000035E
-:1014E000041A3D800001030C061A3D84000000032D
-:1014F000041A3D900001030D061A3D9400000003FC
-:10150000041A3DA00001030E061A3DA400000003CA
-:10151000041A3DB00001030F061A3DB40000000399
-:10152000041A3DC000010310061A3DC40000000368
-:10153000041A3DD000010311061A3DD40000000337
-:10154000041A3DE000010312061A3DE40000000306
-:10155000041A3DF000010313061A3DF400000003D5
-:10156000041A3E0000010314061A3E0400000003A2
-:10157000041A3E1000010315061A3E140000000371
-:10158000041A3E2000010316061A3E240000000340
-:10159000041A3E3000010317061A3E34000000030F
-:1015A000041A3E4000010318061A3E4400000003DE
-:1015B000041A3E5000010319061A3E5400000003AD
-:1015C000041A3E600001031A061A3E64000000037C
-:1015D000041A3E700001031B061A3E74000000034B
-:1015E000041A3E800001031C061A3E84000000031A
-:1015F000041A3E900001031D061A3E9400000003E9
-:10160000041A3EA00001031E061A3EA400000003B7
-:10161000041A3EB00001031F061A3EB40000000386
-:10162000041A3EC000010320061A3EC40000000355
-:10163000041A3ED000010321061A3ED40000000324
-:10164000041A3EE000010322061A3EE400000003F3
-:10165000041A3EF000010323061A3EF400000003C2
-:10166000041A3F0000010324061A3F04000000038F
-:10167000041A3F1000010325061A3F14000000035E
-:10168000041A3F2000010326061A3F24000000032D
-:10169000041A3F3000010327061A3F3400000003FC
-:1016A000041A3F4000010328061A3F4400000003CB
-:1016B000041A3F5000010329061A3F54000000039A
-:1016C000041A3F600001032A061A3F640000000369
-:1016D000041A3F700001032B061A3F740000000338
-:1016E000041A3F800001032C061A3F840000000307
-:1016F000041A3F900001032D061A3F9400000003D6
-:10170000041A3FA00001032E061A3FA400000003A4
-:10171000041A3FB00001032F061A3FB40000000373
-:10172000041A3FC000010330061A3FC40000000342
-:10173000041A3FD000010331061A3FD40000000311
-:10174000041A3FE000010332061A3FE400000007DC
-:10175000041A4CB000080333061A400000000124AC
-:10176000021A492000000000061A2500000000109F
-:10177000061A258000000012061A09C00000004861
-:10178000061A080000000002061A082000000012D5
-:10179000041A2FB00002033B041A4CF00002033D70
-:1017A000061A500000000004061A449000000124AC
-:1017B000021A492400000000061A2540000000100B
-:1017C000061A25C800000012061A0AE000000048A8
-:1017D000061A081000000002061A0868000000122D
-:1017E000041A2FB80002033F041A4CF80002034108
-:1017F000061A5010000000040200A468000AFFDC72
-:101800000200A280000000010200A294071D29111D
-:101810000200A298000000000200A29C009C042488
-:101820000200A2A0000000000200A2A40000020921
-:101830000200A4FCFF000000020100B4000000014F
-:10184000020100B800000001020100DC00000001FC
-:10185000020101000000000102010104000000017A
-:101860000201007C0030000002010084000000281A
-:101870000201008C000000000201013000000004A1
-:101880000201025C000000010201032800000000C8
-:101890000201055400000030020100C400000001F4
-:1018A000020100CC00000001020100F8000000016C
-:1018B000020100F000000001020100800030000081
-:1018C00002010088000000280201009000000000D2
-:1018D0000201013400000004020102DC00000001EA
-:1018E0000201032C0000000002010564000000302A
-:1018F000020100C800000001020100D00000000148
-:10190000020100FC00000001020100F400000001DF
-:10191000020C100000000028020C200800000A1130
-:10192000020C200C00000A00020C201000000A0427
-:10193000020C201C0000FFFF020C20200000FFFF13
-:10194000020C20240000FFFF020C20280000FFFFF3
-:10195000020C203800000020020C203C0000002176
-:10196000020C204000000022020C20440000002352
-:10197000020C204800000024020C204C000000252E
-:10198000020C205000000026020C2054000000270A
-:10199000020C205800000028020C205C00000029E6
-:1019A000020C20600000002A020C20640000002BC2
-:1019B000020C20680000002C020C206C0000002D9E
-:1019C000020C20700000002E020C20740000002F7A
-:1019D000020C207800000010060C207C0000004F54
-:1019E000020C21B800000001020C21BC0000000123
-:1019F000020C21C000000001020C21C40000000103
-:101A0000020C21C800000001020C21CC00000001E2
-:101A1000020C21D000000001020C21D400000001C2
-:101A2000020C21D800000001020C21DC00000001A2
-:101A3000020C21E000000001020C21E40000000182
-:101A4000020C21E800000001020C21EC0000000162
-:101A5000020C21F000000001020C21F40000000142
-:101A6000020C21F800000001060C21FC0000000F10
-:101A7000020C223807FFFFFF020C223C0000003F4F
-:101A8000020C224007FFFFFF020C22440000000F5F
-:101A9000010C224800000000010C224C0000000054
-:101AA000010C225000000000010C22540000000034
-:101AB000010C225800000000010C225C0000000014
-:101AC000010C226000000000010C226400000000F4
-:101AD000010C226800000000010C226C00000000D4
-:101AE000010C227000000000010C227400000000B4
-:101AF000010C227800000000010C227C0000000094
-:101B0000020C24BC000000010C0C2000000003E8C3
-:101B10000A0C2000000000010B0C20000000000A4D
-:101B2000020C400800000562020C400C0000055148
-:101B3000020C401000000555020C40140000057214
-:101B4000020C401C0000FFFF020C40200000FFFFC1
-:101B5000020C40240000FFFF020C40280000FFFFA1
-:101B6000020C403800000046020C403C0000000C13
-:101B7000060C40400000005E020C41B8000000016D
-:101B8000060C41BC0000001F020C423807FFFFFF9B
-:101B9000020C423C0000003F020C424007FFFFFFE6
-:101BA000020C42440000000F010C424800000000FB
-:101BB000010C424C00000000010C425000000000EB
-:101BC000010C425400000000010C425800000000CB
-:101BD000010C425C00000000010C426000000000AB
-:101BE000010C426400000000010C4268000000008B
-:101BF000010C426C00000000010C4270000000006B
-:101C0000010C427400000000010C4278000000004A
-:101C1000010C427C00000000010C4280000000002A
-:101C2000020C44C0000000010C0C4000000003E85E
-:101C30000A0C4000000000010B0C40000000000AEC
-:101C4000060D400000000A00020D004400000032B2
-:101C5000020D008C02150020020D009002150020DC
-:101C6000020D009408100000020D009800000033DF
-:101C7000020D009C00000002020D00A00000000008
-:101C8000020D00A400000005020D00A800000005E0
-:101C9000060D00AC00000002020D00B400000002BE
-:101CA000020D00B800000003020D00BC000000029D
-:101CB000020D00C000000001020D00C8000000027B
-:101CC000020D00CC00000002020D015C00000001CA
-:101CD000020D016400000001020D01680000000215
-:101CE000020D020400000001020D020C00000020A1
-:101CF000020D021000000040020D0214000000401E
-:101D0000020D022000000003020D02240000001852
-:101D1000060D028000000012040D030000180343AA
-:101D2000060D03600000000C020D004C00000001D5
-:101D3000020D005000000002020D005400000000DF
-:101D4000020D005800000008060D005C00000004B1
-:101D5000020D00C400000004020D0114000000097F
-:101D6000020D011800000029020D011C0000000AEC
-:101D7000020D01200000002A020D012400000000D5
-:101D8000020D012800000020020D012C00000000BF
-:101D9000020D013000000020020D0134000000009F
-:101DA000020D013800000020020D013C000000007F
-:101DB000020D014000000020020D0144000000005F
-:101DC000020D014800000020020D00040000000187
-:101DD000020D000800000001020D000C00000001CF
-:101DE000020D001000000001020D001400000001AF
-:101DF000020D001800000001020D001C000000018F
-:101E0000020D002000000001020D0024000000016E
-:101E1000020D002800000001020D002C000000014E
-:101E2000020D003000000001020D0034000000012E
-:101E3000020D003800000001020D003C000000010E
-:101E4000060E200000000800020E004C00000032C8
-:101E5000020E009402150020020E009802150020C8
-:101E6000020E009C00000030020E00A008100000CE
-:101E7000020E00A400000033020E00A80000003093
-:101E8000020E00AC00000031020E00B000000002A3
-:101E9000020E00B400000004020E00B800000000B2
-:101EA000020E00BC00000002020E00C00000000292
-:101EB000020E00C400000000020E00C80000000274
-:101EC000020E00CC00000007020E00D0000000024D
-:101ED000020E00D400000002020E00D80000000133
-:101EE000020E014400000001020E014C000000013E
-:101EF000020E015000000002020E02040000000168
-:101F0000020E020C00000040020E02100000004011
-:101F1000020E021C00000004020E0220000000203D
-:101F2000020E02240000000E020E02280000001B18
-:101F3000060E030000000012040E0280001B035B6B
-:101F4000060E02EC00000005020E00540000000C1A
-:101F5000020E00580000000C020E005C00000000A1
-:101F6000020E006000000010060E00640000000475
-:101F7000020E00DC00000003020E01100000000F42
-:101F8000020E01140000002F020E011800000000D4
-:101F9000020E011C00000020020E000400000001DF
-:101FA000020E000800000001020E000C00000001FB
-:101FB000020E001000000001020E001400000001DB
-:101FC000020E001800000001020E001C00000001BB
-:101FD000020E002000000001020E0024000000019B
-:101FE000020E002800000001020E002C000000017B
-:101FF000020E003000000001020E0034000000015B
-:10200000020E003800000001020E003C000000013A
-:10201000020E004000000001020E0044000000011A
-:102020000730040000AF0000083007680013037693
-:10203000073400003305000007348000327F0CC2F3
-:10204000073500001A951962083539E058C403783D
-:10205000013000000000000001300004000000001A
-:1020600001300008000000000130000C00000000FA
-:1020700001300010000000000130001400000000DA
-:1020800002300020000000010230002400000002A5
-:1020900002300028000000030230002C0000000085
-:1020A0000230003000000004023000340000000163
-:1020B00002300038000000000230003C0000000147
-:1020C0000230004000000004023000440000000024
-:1020D00002300048000000010230004C0000000304
-:1020E00002300050000000000230005400000001E7
-:1020F00002300058000000040230005C00000000C4
-:1021000002300060000000010230006400000003A3
-:1021100002300068000000000230006C0000000186
-:102120000230007000000004023000740000000063
-:1021300002300078000000040230007C0000000340
-:102140000630008000000002023000A400003FFFC3
-:10215000023000A8000003FF02300224000000004B
-:1021600002300234000000000230024C0000000087
-:10217000023002E40000FFFF0630200000000800EB
-:1021800002338BC000000001023380000000001AFF
-:10219000023380400000004E0233808000000010B7
-:1021A000023380C0000000200C3383000007A12010
-:1021B0000A338300000001380B33830000001388CA
-:1021C0000A338340000000000C338340000001F418
-:1021D0000B33834000000005023383800007A120F9
-:1021E000023383C0000001F406322A88000000C2D6
-:1021F00006322008000000C806322000000000025D
-:10220000063223E80000004004322E580004037A0E
-:10221000063250A000000004063250B80000000250
-:102220000632508000000006043250980002037EFF
-:10223000063250000000002006323000000004008A
-:1022400006321C0000000004043218300002038033
-:10225000063224E8000000B402322DB00000000075
-:1022600006324000000000B40632300000000020BA
-:10227000063231000000002006323200000000204B
-:102280000632330000000020063234000000002037
-:102290000632350000000020063236000000002023
-:1022A000063237000000002006323800000000200F
-:1022B000063239000000002006323A0000000020FB
-:1022C00006323B000000002006323C0000000020E7
-:1022D00006323D000000002006323E0000000020D3
-:1022E00006323F000000002006321C1000000002F1
-:1022F000063245A000000024063227B8000000B4D2
-:1023000002322DB400000000063242D0000000B4BA
-:1023100006323080000000200632318000000020AC
-:102320000632328000000020063233800000002098
-:102330000632348000000020063235800000002084
-:102340000632368000000020063237800000002070
-:10235000063238800000002006323980000000205C
-:1023600006323A800000002006323B800000002048
-:1023700006323C800000002006323D800000002034
-:1023800006323E800000002006323F800000002020
-:1023900006321C20000000020632463000000024F5
-:1023A0000720040000870000082007800010038237
-:1023B000072400003165000007248000081D0C5A26
-:1023C00008248EB06C9003840120000000000000FF
-:1023D00001200004000000000120000800000000AF
-:1023E0000120000C0000000001200010000000008F
-:1023F0000120001400000000022000200000000165
-:102400000220002400000002022000280000000337
-:102410000220002C00000000022000300000000418
-:1024200002200034000000010220003800000000FB
-:102430000220003C000000010220004000000004D7
-:1024400002200044000000000220004800000001BB
-:102450000220004C00000003022000500000000099
-:102460000220005400000001022000580000000477
-:102470000220005C0000000002200060000000015B
-:102480000220006400000003022000680000000039
-:102490000220006C00000001022000700000000417
-:1024A00002200074000000000220007800000004F8
-:1024B0000220007C000000030620008000000002D3
-:1024C000022000A400003FFF022000A8000003FF3C
-:1024D000022002240000000002200234000000005C
-:1024E0000220024C00000000022002E40000FFFF76
-:1024F000062020000000080002238BC0000000011D
-:10250000022380000000001002238040000000121F
-:102510000223808000000030022380C00000000EF3
-:102520000C2383000007A1200A2383000000013848
-:102530000B238300000013880A238340000000005F
-:102540000C238340000001F40B23834000000005AE
-:10255000022383800007A120022383C0000001F42E
-:10256000062250000000004206222008000000C899
-:10257000062220000000000206224000000000C6E3
-:1025800004224318000503860622432C0000000B9A
-:10259000042243580005038B0622436C0000000B05
-:1025A0000422439800050390062243AC0000000B70
-:1025B000042243D800050395062243EC0000000BDB
-:1025C000042244180005039A0622442C0000000B44
-:1025D000042244580005039F0622446C0000000BAF
-:1025E00004224498000503A4062244AC0000000B1A
-:1025F000042244D8000503A9062244EC0000000B85
-:1026000004224518000503AE0622452C0000000BED
-:1026100004224558000503B30622456C0000000B58
-:1026200004224598000503B8062245AC0000000BC3
-:10263000042245D8000503BD062245EC0000000B2E
-:1026400004224618000503C20622462C0000000B97
-:1026500004224658000503C70622466C0000000B02
-:1026600004224698000503CC062246AC0000000B6D
-:10267000042246D8000503D1062246EC0000000BD8
-:1026800004224718000503D60622472C0000000B41
-:1026900004224758000503DB0622476C0000000BAC
-:1026A00004224798000503E0062247AC0000000B17
-:1026B000042247D8000503E5062247EC0000000B82
-:1026C00004224818000503EA0622482C0000000BEB
-:1026D00004224858000503EF0622486C0000000B56
-:1026E00004224898000503F4062248AC0000000BC1
-:1026F000042248D8000503F9062248EC0000000B2C
-:1027000004224918000503FE0622492C0000000B94
-:1027100004224958000504030622496C0000000BFE
-:102720000422499800050408062249AC0000000B69
-:10273000042249D80005040D062249EC0000000BD4
-:1027400004224A180005041206224A2C0000000B3D
-:1027500004224A580005041706224A6C0000000BA8
-:1027600004224A980005041C06224AAC0000000B13
-:1027700004224AD80005042106224AEC0000000584
-:1027800006224B000000001704224B5C00010426C7
-:1027900006224B600000000304224B6C000104275A
-:1027A000062238000000004006223000000002002F
-:1027B000042251C00004042806221000000000C0BA
-:1027C000062215C00000024004221EC80008042C86
-:1027D0000622390000000008022251180000000003
-:1027E000062251D00000000606221300000000025D
-:1027F00006221410000000300622392000000008D4
-:102800000222511C00000000062251E800000006D0
-:102810000622130800000002062214D00000003037
-:102820000216100000000028021700080000000235
-:102830000217002C000000030217003C00000004F7
-:1028400002170044000000000217004800000002C8
-:102850000217004C0000009002170050000000908A
-:102860000217005400800090021700580810000062
-:10287000021700600000008A021700640000008058
-:1028800002170068000000810217006C0000008041
-:10289000021700700000000602170078000007D041
-:1028A0000217007C0000076C02170038007C10043F
-:1028B000021700040000000F06164024000000026A
-:1028C000021640700000001C0216420800000001C1
-:1028D0000216421000000001021642200000000112
-:1028E00002164228000000010216423000000001DA
-:1028F000021642380000000102164260000000018A
-:102900000C16401C0003D0900A16401C0000009CCE
-:102910000B16401C000009C40216403000000008DD
-:10292000021640340000000C02164038000000106F
-:102930000216404400000020021640000000000182
-:10294000021640D8000000010216400800000001F5
-:102950000216400C000000010216401000000001A9
-:10296000021642400000000002164248000000002B
-:1029700006164270000000020216425000000000DD
-:1029800002164258000000000616428000000002B5
-:1029900002166008000006140216600C0000060013
-:1029A00002166010000006040216601C0000FFFF03
-:1029B000021660200000FFFF021660240000FFFFE7
-:1029C000021660280000FFFF021660380000002099
-:1029D0000216603C00000020061660400000000265
-:1029E00002166048000000230216604C000000241C
-:1029F00002166050000000250216605400000026F8
-:102A000002166058000000270216605C00000029D2
-:102A1000021660600000002A021660640000002BAD
-:102A2000021660680000002C0216606C0000002D89
-:102A30000616607000000012021660B80000000167
-:102A4000021660BC00000001061660C00000003ED7
-:102A5000021661B800000001061661BC0000001FEC
-:102A60000216623807FFFFFF0216623C0000003FBB
-:102A70000216624007FFFFFF021662440000000FCB
-:102A800001166248000000000116624C00000000C0
-:102A900001166250000000000116625400000000A0
-:102AA00001166258000000000116625C0000000080
-:102AB0000116626000000000011662640000000060
-:102AC00001166268000000000116626C0000000040
-:102AD0000116627000000000011662740000000020
-:102AE00001166278000000000116627C0000000000
-:102AF000021664BC000000010C166000000003E830
-:102B00000A166000000000010B1660000000000AB9
-:102B100002168040000000060216804400000005F6
-:102B2000021680480000000A0216804C00000005D2
-:102B30000216805400000002021680CC000000043F
-:102B4000021680D000000004021680D400000004A9
-:102B5000021680D800000004021680DC0000000489
-:102B6000021680E000000004021680E40000000469
-:102B7000021680E800000004021688040000000429
-:102B8000021680300000007C021680340000003DF8
-:102B9000021680380000003F0216803C0000009CB6
-:102BA000021680F000000007061680F40000000501
-:102BB0000216880C010101010216810800000000C4
-:102BC0000216810C000000040216811000000004AF
-:102BD0000216811400000002021688100801200469
-:102BE00002168118000000050216811C0000000575
-:102BF0000216812000000005021681240000000555
-:102C00000216882C200810010216812800000008F6
-:102C10000216812C00000006021681300000000719
-:102C200002168134000000000216883001010120E4
-:102C300006168138000000040216883401010101E3
-:102C400006168148000000040216883801010101BF
-:102C500006168158000000040216883C010101019B
-:102C6000061681680000000302168174000000014E
-:102C7000021688400101010102168178000000015E
-:102C80000216817C00000001021681800000000114
-:102C9000021681840000000102168844010101012E
-:102CA00002168188000000010216818C00000004D9
-:102CB00002168190000000040216819400000002B8
-:102CC00002168848080120040216819800000005B9
-:102CD0000216819C00000005021681A0000000057C
-:102CE000021681A4000000050216881420081001B5
-:102CF000021681A800000008021681AC0000000640
-:102D0000021681B000000007021681B40000000125
-:102D10000216881801010120021681B80000000186
-:102D2000021681BC00000001021681C000000001F3
-:102D3000021681C4000000010216881C0101010175
-:102D4000021681C800000001021681CC00000001BB
-:102D5000021681D000000001021681D4000000019B
-:102D60000216882001010101021681D8000000012D
-:102D7000021681DC00000001021681E00000000163
-:102D8000021681E4000000010216882401010101FD
-:102D9000021681E800000001021681EC000000012B
-:102DA000021681F0000000010216882801010101CD
-:102DB00002168240FFFF003F061682440000000218
-:102DC0000216824CFFFF003F0216825000000100F5
-:102DD000021682540000010006168258000000020C
-:102DE00002168260000000C002168264000000C06B
-:102DF0000216826800001E000216826C00001E008F
-:102E0000021682700000400002168274000040002A
-:102E100002168278000080000216827C000080008A
-:102E2000021682800000200002168284000020002A
-:102E30000616828800000007021682A40000000126
-:102E4000061682A80000000A021681F400000C0891
-:102E5000021681F800000040021681FC000001000B
-:102E600002168200000000200216820400000017F3
-:102E700002168208000000800216820C0000020088
-:102E8000021682100000000002168218FFFF01FFE8
-:102E900002168214FFFF01FF0216823C000000139D
-:102EA000021680900000013F021680600000014081
-:102EB00002168064000001400616806800000002CF
-:102EC00002168070000000C0061680740000000723
-:102ED0000216809C00000048021680A000000048F6
-:102EE000061680A400000002021680AC0000004814
-:102EF000061680B00000000702168238000080002D
-:102F000002168234000025E40216809400007FFF40
-:102F100002168220000000070216821C0000000733
-:102F2000021682280000000002168224FFFFFFFF25
-:102F300002168230000000000216822CFFFFFFFF05
-:102F4000021680EC000000FF0214000000000001E7
-:102F50000214000C000000010214004000000001F7
-:102F60000214004400007FFF0214000C0000000067
-:102F700002140000000000000214006C00000000B9
-:102F800002140004000000010214003000000001DF
-:102F900002140004000000000214005C00000000A5
-:102FA00002140008000000010214003400000001B7
-:102FB000021400080000000002140060000000007D
-:102FC00006028000000020000202005800000032CB
-:102FD000020200A003150020020200A40315002035
-:102FE000020200A801000030020200AC081000003C
-:102FF000020200B000000033020200B40000003002
-:10300000020200B800000031020200BC0000000310
-:10301000020200C000000006020200C4000000031B
-:10302000020200C800000003020200CC00000002FF
-:10303000020200D000000000020200D400000002E2
-:10304000020200DC00000000020200E000000006B6
-:10305000020200E400000004020200E80000000296
-:10306000020200EC00000002020200F00000000179
-:10307000020200FC00000006020201200000000025
-:103080000202013400000002020201B0000000014F
-:103090000202020C00000001020202140000000102
-:1030A00002020218000000020202040400000001F3
-:1030B0000202040C00000040020204100000004064
-:1030C0000202041C00000004020204200000002090
-:1030D0000202042400000002020204280000001F73
-:1030E00006020500000000120402048000200434DF
-:1030F000020200600000000F0202006400000007EE
-:1031000002020068000000000202006C0000000ED5
-:103110000602007000000004020200F40000000437
-:103120000202000400000001020200080000000189
-:103130000202000C00000001020200100000000169
-:103140000202001400000001020200180000000149
-:103150000202001C00000001020200200000000129
-:103160000202002400000001020200280000000109
-:103170000202002C000000010202003000000001E9
-:1031800002020034000000010202003800000001C9
-:103190000202003C000000010202004000000001A9
-:1031A0000202004400000001020200480000000189
-:1031B0000202004C00000001020200500000000169
-:1031C00002020108000000C802020118000000020B
-:1031D000020201C400000000020201CC0000000055
-:1031E000020201D400000002020201DC0000000221
-:1031F000020201E4000000FF020201EC000000FFF7
-:103200000202010C000000C80202011C00000002C2
-:10321000020201C800000000020201D0000000000C
-:10322000020201D800000002020201E000000002D8
-:10323000020201E8000000FF020201F0000000FFAE
-:1032400007280400008E00000828076800130454B3
-:10325000072C000033C80000072C800038050CF351
-:10326000072D000038B61AF5072D800007762923B0
-:10327000082D8CB04E6A04560128000000000000A2
-:1032800001280004000000000128000800000000E0
-:103290000128000C000000000128001000000000C0
-:1032A0000128001400000000022800200000000196
-:1032B0000228002400000002022800280000000369
-:1032C0000228002C0000000002280030000000044A
-:1032D000022800340000000102280038000000002D
-:1032E0000228003C00000001022800400000000409
-:1032F00002280044000000000228004800000001ED
-:103300000228004C000000030228005000000000CA
-:1033100002280054000000010228005800000004A8
-:103320000228005C0000000002280060000000018C
-:10333000022800640000000302280068000000006A
-:103340000228006C00000001022800700000000448
-:103350000228007400000000022800780000000429
-:103360000228007C00000003062800800000000204
-:10337000022800A400003FFF022800A8000003FF6D
-:10338000022802240000000002280234000000008D
-:103390000228024C00000000022802E40000FFFFA7
-:1033A0000628200000000800022B8BC0000000014E
-:1033B000022B800000000000022B8040000000185B
-:1033C000022B80800000000C022B80C000000066F1
-:1033D0000C2B83000007A1200A2B8300000001387A
-:1033E0000B2B8300000013880A2B83400000000091
-:1033F0000C2B8340000001F40B2B834000000005E0
-:10340000022B83800007A120022B83C0000001F45F
-:10341000062A3D4800000004042A3D5800020458D2
-:10342000062A3D6000000006062A30000000004821
-:10343000062A2008000000C8062A2000000000021A
-:10344000062A31280000008E062A33680000000397
-:10345000042A33740001045A062A3A780000000254
-:10346000042A3A800002045B042A3A700002045DD8
-:10347000042A3E280002045F042A3EB000040461CE
-:10348000042A250000020465062A25080000010020
-:10349000062A297000000004042A29600004046739
-:1034A000042A2F480002046B062A3378000000D853
-:1034B000022A3A3800000000062A3A88000000324A
-:1034C000042A3D880010046D062A502000000002E6
-:1034D000062A503000000002062A500000000002B8
-:1034E000062A501000000002022A50B80000000115
-:1034F000062A50480000000E042A3D780002047D90
-:10350000062A3C1800000026022A50400000000055
-:10351000062A36D8000000D8022A3A3C00000000F3
-:10352000062A3B5000000032042A3DC80010047FE8
-:10353000062A502800000002062A50380000000227
-:10354000062A500800000002062A50180000000257
-:10355000022A50BC00000001062A50800000000E24
-:10356000042A3D800002048F062A3CB00000002699
-:10357000022A504400000000021010080000000160
-:103580000210101000000264021010000003D000AE
-:10359000021010040000003D091018000200049100
-:1035A00009101100001006910610114000000008DB
-:1035B00009101160000806A1061011800000000229
-:1035C00009101188000606A9061011A000000018B5
-:1035D000021010100000000006102400000000E09F
-:1035E0000210201C0000000002102020000000013A
-:1035F000021020C0000000010210200400000001A1
-:10360000021020080000000109103C00000506AF70
-:1036100009103C20000506B409103800000506B961
-:1036200002104028000000100210404400003FFF3C
-:103630000210405800280000021040840084924A82
-:1036400006104C000000010002104058000000006D
-:103650000610806800000004021080000000108046
-:1036600006108028000000020210803800000010C0
-:10367000021080400000FFFF021080440000FFFFA6
-:1036800002108050000000000210810000000000C5
-:10369000061081200000000202108008000002B520
-:1036A0000210801000000000061082000000004A96
-:1036B000021081080001FFFF061081400000000297
-:1036C0000210800000001A80061090000000002404
-:1036D000061091200000004A061093700000004A76
-:1036E000061095C00000004A0210800400001080FF
-:1036F00006108030000000020210803C0000001024
-:10370000021080480000FFFF0210804C0000FFFF05
-:10371000021080540000000002108104000000002C
-:1037200006108128000000020210800C000002B583
-:103730000210801400000000061084000000004AFF
-:103740000210810C0001FFFF0610814800000002FA
-:103750000210800400001A800610909000000024DF
-:10376000061092480000004A061094980000004A93
-:10377000061096E80000004A0212049000E383401D
-:103780000212051400003C10021205200000000285
-:1037900002120494FFFFFFFF02120498FFFFFFFFD5
-:1037A0000212049CFFFFFFFF021204A0FFFFFFFFB5
-:1037B000021204A4FFFFFFFF021204A8FFFFFFFF95
-:1037C000021204ACFFFFFFFF021204B0FFFFFFFF75
-:1037D000021204B8FFFFFFFF021204BCFFFFFFFF4D
-:1037E000021204C0FFFFFFFF021204C4FFFFFFFF2D
-:1037F000021204C8FFFFFFFF021204CCFFFFFFFF0D
-:10380000021204D0FFFFFFFF021204DCFFFFFFFFE4
-:10381000021204E0FFFFFFFF021204E4FFFFFFFFBC
-:10382000021204E8FFFFFFFF021204ECFFFFFFFF9C
-:10383000021204F0FFFFFFFF021204F4FFFFFFFF7C
-:10384000021204F8FFFFFFFF021204FCFFFFFFFF5C
-:1038500002120500FFFFFFFF02120504FFFFFFFF3A
-:1038600002120508FFFFFFFF0212050CFFFFFFFF1A
-:1038700002120510FFFFFFFF021204D4FFFF3330D6
-:10388000021204D8FFFF3340021204B4F0003000EB
-:1038900002120390000000080212039C00000008BE
-:1038A000061203A000000002021203BC0000000484
-:1038B000021203C400000004021203D00000000042
-:1038C000021203DC000000000212036C0000000181
-:1038D000021203680000003F021201BC0000004019
-:1038E000021201C000001808021201C400000803FF
-:1038F000021201C800000803021201CC00000040BF
-:10390000021201D000000003021201D400000803DB
-:10391000021201D800000803021201DC00000803B3
-:10392000021201E000010003021201E4000008039A
-:10393000021201E800000803021201EC000000037B
-:10394000021201F000000003021201F40000000363
-:10395000021201F800000003021201FC0000000343
-:103960000212020000000003021202040000000321
-:1039700002120208000000030212020C0000000301
-:1039800002120210000000030212021400000003E1
-:1039900002120218000000030212021C00000003C1
-:1039A00002120220000000030212022400000003A1
-:1039B00002120228000024030212022C0000002F31
-:1039C0000212023000000009021202340000001945
-:1039D00002120238000001840212023C000001833E
-:1039E0000212024000000306021202440000001905
-:1039F00002120248000000060212024C00000306F8
-:103A000002120250000003060212025400000306D4
-:103A10000212025800000C860212025C000003062B
-:103A20000212026000000306021202640000000697
-:103A300002120268000000060212026C000000067A
-:103A4000021202700000000602120274000000065A
-:103A500002120278000000060212027C000000063A
-:103A6000021202800000000602120284000000061A
-:103A700002120288000000060212028C00000006FA
-:103A800002120290000000060212029400000006DA
-:103A900002120298000000060212029C00000006BA
-:103AA000021202A000000306021202A4000000138A
-:103AB000021202A800000006021202B00000100468
-:103AC000021202B400001004021203240010644029
-:103AD0000212032800106440021201B0000000012D
-:103AE0000600A000000000160200A06CBF5C0000F1
-:103AF0000200A070FFF51FEF0200A0740000FFFF9E
-:103B00000200A078F00003E00200A07C00000000AA
-:103B10000200A0800000A0000600A08400000005B4
-:103B20000200A0980FE000000600A09C0000001416
-:103B30000200A0EC555400000200A0F05555555568
-:103B40000200A0F4000055550200A0F8F0000000AB
-:103B50000200A0FC555400000200A1005555555527
-:103B60000200A104000055550200A108F000000069
-:103B70000600A22C000000040200A0600000030761
-:103B80000200A10CBF5C00000200A110FFF51FEFB6
-:103B90000200A1140000FFFF0200A118F00003E0E2
-:103BA0000200A11C000000000200A1200000A000F3
-:103BB0000600A124000000050200A1380FE000006B
-:103BC0000600A13C000000140200A18C5554000026
-:103BD0000200A190555555550200A194000055557D
-:103BE0000200A198F00000000200A19C55540000C2
-:103BF0000200A1A0555555550200A1A4000055553D
-:103C00000200A1A8F00000000600A23C0000000491
-:103C10000200A06400000307000000000000000094
-:103C20000000002E00000000000000000000000066
-:103C30000000000000000000000000000000000084
-:103C40000000000000000000000000000000000074
-:103C50000000000000000000000000000000000064
-:103C60000000000000000000000000000000000054
-:103C70000000000000000000002E004D00000000C9
-:103C80000000000000000000000000000000000034
-:103C90000000000000000000000000000000000024
-:103CA00000000000004D008B00000000000000003C
-:103CB0000000000000000000000000000000000004
-:103CC00000000000000000000000000000000000F4
-:103CD000008B009000900094009400980000000079
-:103CE00000000000000000000000000000000000D4
-:103CF000000000000000000000000000009802DE4C
-:103D000002DE02E802E802F200000000000000000B
-:103D100000000000000000000000000000000000A3
-:103D20000000000000000000000000000000000093
-:103D30000000000000000000000000000000000083
-:103D40000000000000000000000000000000000073
-:103D50000000000000000000000000000000000063
-:103D60000000000000000000000000000000000053
-:103D70000000000000000000000000000000000043
-:103D80000000000000000000000000000000000033
-:103D90000000000000000000000000000000000023
-:103DA0000000000000000000000000000000000013
-:103DB0000000000000000000000000000000000003
-:103DC00000000000000000000000000000000000F3
-:103DD000000000000000000002F202FA00000000F3
-:103DE00000000000000000000000000000000000D3
-:103DF00000000000000000000000000000000000C3
-:103E000000000000000000000000000000000000B2
-:103E100000000000000000000000000000000000A2
-:103E20000000000000000000000000000000000092
-:103E300002FA02FF02FF030A030A03150000000052
-:103E40000000000000000000000000000000000072
-:103E50000000000000000000000000000000000062
-:103E60000000000000000000000000000000000052
-:103E70000000000000000000000000000000000042
-:103E80000000000000000000031503160000000001
-:103E90000000000000000000000000000000000022
-:103EA0000000000000000000000000000000000012
-:103EB000000000000316035700000000000000008F
-:103EC00000000000000000000000000000000000F2
-:103ED00000000000000000000000000000000000E2
-:103EE0000357037B000000000000000000000000FA
-:103EF00000000000000000000000000000000000C2
-:103F0000000000000000000000000000037B03BB75
-:103F100000000000000000000000000000000000A1
-:103F20000000000000000000000000000000000091
-:103F3000000000000000000003BB03F700000000C9
-:103F40000000000000000000000000000000000071
-:103F50000000000000000000000000000000000061
-:103F60000000000003F7043D043D045204520467BE
-:103F70000000000000000000000000000000000041
-:103F80000000000000000000000000000000000031
-:103F9000046704ED04ED04F204F204F700000000ED
-:103FA0000000000000000000000000000000000011
-:103FB00000000000000000000000000004F704F80A
-:103FC00000000000000000000000000000000000F1
-:103FD00000000000000000000000000000000000E1
-:103FE000000000000000000004F8050A00000000C6
-:103FF00000000000000000000000000000000000C1
-:1040000000000000000000000000000000000000B0
-:1040100000000000050A051F051F052205220525D1
-:104020000000000000000000000000000000000090
-:104030000000000000000000000000000000000080
-:1040400005250555000000000000000000000000EC
-:104050000000000000000000000000000000000060
-:10406000000000000000000000000000055505DC15
-:104070000000000000000000000000000000000040
-:104080000000000000000000000000000000000030
-:10409000000000000000000005DC05E305E305E783
-:1040A00005E705EB00000000000000000000000034
-:1040B0000000000000000000000000000000000000
-:1040C0000000000005EB062B062B06330633063BEB
-:1040D00000000000000000000000000000000000E0
-:1040E00000000000000000000000000000000000D0
-:1040F000063B068806880695069506A20000000085
-:1041000000000000000000000000000000000000AF
-:1041100000000000000000000000000006A206AE43
-:10412000000000000000000000000000000000008F
-:10413000000000000000000000000000000000007F
-:10414000000000000000000006AE06B40000000001
-:10415000000000000000000000000000000000005F
-:10416000000000000000000000000000000000004F
-:104170000000000006B406B70000000000000000C8
-:10418000000000000000000000000000000000002F
-:10419000000000000000000000000000000000001F
-:1041A00006B706BD0000000000000000000000008F
-:1041B00000000000000000000000000000000000FF
-:1041C00000000000000000000000000006BD06BE68
-:1041D00006BE06D006D006E2000000000000000087
-:1041E00000000000000000000000000000000000CF
-:1041F000000000000000000006E2074F0000000081
-:1042000000000000000000000000000000000000AE
-:10421000000000000000000000000000000000009E
-:1042200000000000074F0750075007630763077639
-:10423000000000000000000000000000000000007E
-:10424000000000000000000000000000000000006E
-:10425000000000000000000000000000000000005E
-:10426000000000000000000000000000000000004E
-:10427000000000000000000000000000000000003E
-:10428000000000000000000000000000000000002E
-:10429000000000000000000000000000000000001E
-:1042A000000000000000000000000000000000000E
-:1042B00000000000000000000000000000000000FE
-:1042C00000000000000000000000000000000000EE
-:1042D00000000000000000000000000000000000DE
-:1042E00000000000000000000000000000000000CE
-:1042F00000000000000000000000000000000000BE
-:1043000000000000000000000000000000000000AD
-:10431000000000000000000000000000000000009D
-:10432000000000000000000000000000000000008D
-:1043300000010000000204C00003098000040E40D8
-:1043400000051300000617C000071C80000821406C
-:1043500000092600000A2AC0000B2F80000C344000
-:10436000000D3900000E3DC0000F42800010474094
-:1043700000114C00001250C00013558000145A4028
-:1043800000155F00001663C00017688000186D40BC
-:1043900000197200001A76C0001B7B80001C804050
-:1043A000001D8500001E89C0001F8E800000934004
-:1043B00000002000000040000000600000008000BD
-:1043C0000000A0000000C0000000E00000010000AC
-:1043D0000001200000014000000160000001800099
-:1043E0000001A0000001C0000001E0000002000088
-:1043F0000002200000024000000260000002800075
-:104400000002A0000002C0000002E0000003000063
-:104410000003200000034000000360000003800050
-:104420000003A0000003C0000003E000000400003F
-:10443000000420000004400000046000000480002C
-:104440000004A0000004C0000004E000000500001B
-:104450000005200000054000000560000005800008
-:104460000005A0000005C0000005E00000060000F7
-:1044700000062000000640000006600000068000E4
-:104480000006A0000006C0000006E00000070000D3
-:1044900000072000000740000007600000078000C0
-:1044A0000007A0000007C0000007E00000080000AF
-:1044B000000820000008400000086000000880009C
-:1044C0000008A0000008C0000008E000000900008B
-:1044D0000009200000094000000960000009800078
-:1044E0000009A0000009C0000009E000000A000067
-:1044F000000A2000000A4000000A6000000A800054
-:10450000000AA000000AC000000AE000000B000042
-:10451000000B2000000B4000000B6000000B80002F
-:10452000000BA000000BC000000BE000000C00001E
-:10453000000C2000000C4000000C6000000C80000B
-:10454000000CA000000CC000000CE000000D0000FA
-:10455000000D2000000D4000000D6000000D8000E7
-:10456000000DA000000DC000000DE000000E0000D6
-:10457000000E2000000E4000000E6000000E8000C3
-:10458000000EA000000EC000000EE000000F0000B2
-:10459000000F2000000F4000000F6000000F80009F
-:1045A000000FA000000FC000000FE000001000008E
-:1045B000001020000010400000106000001080007B
-:1045C0000010A0000010C0000010E000001100006A
-:1045D0000011200000114000001160000011800057
-:1045E0000011A0000011C0000011E0000012000046
-:1045F0000012200000124000001260000012800033
-:104600000012A0000012C0000012E0000013000021
-:10461000001320000013400000136000001380000E
-:104620000013A0000013C0000013E00000140000FD
-:1046300000142000001440000014600000148000EA
-:104640000014A0000014C0000014E00000150000D9
-:1046500000152000001540000015600000158000C6
-:104660000015A0000015C0000015E00000160000B5
-:1046700000162000001640000016600000168000A2
-:104680000016A0000016C0000016E0000017000091
-:10469000001720000017400000176000001780007E
-:1046A0000017A0000017C0000017E000001800006D
-:1046B000001820000018400000186000001880005A
-:1046C0000018A0000018C0000018E0000019000049
-:1046D0000019200000194000001960000019800036
-:1046E0000019A0000019C0000019E000001A000025
-:1046F000001A2000001A4000001A6000001A800012
-:10470000001AA000001AC000001AE000001B000000
-:10471000001B2000001B4000001B6000001B8000ED
-:10472000001BA000001BC000001BE000001C0000DC
-:10473000001C2000001C4000001C6000001C8000C9
-:10474000001CA000001CC000001CE000001D0000B8
-:10475000001D2000001D4000001D6000001D8000A5
-:10476000001DA000001DC000001DE000001E000094
-:10477000001E2000001E4000001E6000001E800081
-:10478000001EA000001EC000001EE000001F000070
-:10479000001F2000001F4000001F6000001F80005D
-:1047A000001FA000001FC000001FE000002000004C
-:1047B0000020200000204000002060000020800039
-:1047C0000020A0000020C0000020E0000021000028
-:1047D0000021200000214000002160000021800015
-:1047E0000021A0000021C0000021E0000022000004
-:1047F00000222000002240000022600000228000F1
-:104800000022A0000022C0000022E00000230000DF
-:1048100000232000002340000023600000238000CC
-:104820000023A0000023C0000023E00000240000BB
-:1048300000242000002440000024600000248000A8
-:104840000024A0000024C0000024E0000025000097
-:104850000025200000254000002560000025800084
-:104860000025A0000025C0000025E0000026000073
-:104870000026200000264000002660000026800060
-:104880000026A0000026C0000026E000002700004F
-:10489000002720000027400000276000002780003C
-:1048A0000027A0000027C0000027E000002800002B
-:1048B0000028200000284000002860000028800018
-:1048C0000028A0000028C0000028E0000029000007
-:1048D00000292000002940000029600000298000F4
-:1048E0000029A0000029C0000029E000002A0000E3
-:1048F000002A2000002A4000002A6000002A8000D0
-:10490000002AA000002AC000002AE000002B0000BE
-:10491000002B2000002B4000002B6000002B8000AB
-:10492000002BA000002BC000002BE000002C00009A
-:10493000002C2000002C4000002C6000002C800087
-:10494000002CA000002CC000002CE000002D000076
-:10495000002D2000002D4000002D6000002D800063
-:10496000002DA000002DC000002DE000002E000052
-:10497000002E2000002E4000002E6000002E80003F
-:10498000002EA000002EC000002EE000002F00002E
-:10499000002F2000002F4000002F6000002F80001B
-:1049A000002FA000002FC000002FE000003000000A
-:1049B00000302000003040000030600000308000F7
-:1049C0000030A0000030C0000030E00000310000E6
-:1049D00000312000003140000031600000318000D3
-:1049E0000031A0000031C0000031E00000320000C2
-:1049F00000322000003240000032600000328000AF
-:104A00000032A0000032C0000032E000003300009D
-:104A1000003320000033400000336000003380008A
-:104A20000033A0000033C0000033E0000034000079
-:104A30000034200000344000003460000034800066
-:104A40000034A0000034C0000034E0000035000055
-:104A50000035200000354000003560000035800042
-:104A60000035A0000035C0000035E0000036000031
-:104A7000003620000036400000366000003680001E
-:104A80000036A0000036C0000036E000003700000D
-:104A900000372000003740000037600000378000FA
-:104AA0000037A0000037C0000037E00000380000E9
-:104AB00000382000003840000038600000388000D6
-:104AC0000038A0000038C0000038E00000390000C5
-:104AD00000392000003940000039600000398000B2
-:104AE0000039A0000039C0000039E000003A0000A1
-:104AF000003A2000003A4000003A6000003A80008E
-:104B0000003AA000003AC000003AE000003B00007C
-:104B1000003B2000003B4000003B6000003B800069
-:104B2000003BA000003BC000003BE000003C000058
-:104B3000003C2000003C4000003C6000003C800045
-:104B4000003CA000003CC000003CE000003D000034
-:104B5000003D2000003D4000003D6000003D800021
-:104B6000003DA000003DC000003DE000003E000010
-:104B7000003E2000003E4000003E6000003E8000FD
-:104B8000003EA000003EC000003EE000003F0000EC
-:104B9000003F2000003F4000003F6000003F8000D9
-:104BA000003FA000003FC000003FE000003FE001E8
-:104BB00000000000000001FF0000020000007FF87C
-:104BC00000007FF80000016A0000150000000001ED
-:104BD0000000FF00000000000000FF0000000000D7
-:104BE00000000000140AFF000000000100000000A7
-:104BF00000201001000000000100860000000100FC
-:104C00000000860200008604000086060000860878
-:104C10000000860A0000860C0000860E0000861048
-:104C20000000861200008614000086160000861818
-:104C30000000861A0000861C0000861E00008620E8
-:104C400000008622000086240000862600008628B8
-:104C50000000862A0000862C0000862E0000863088
-:104C60000000863200008634000086360000863858
-:104C70000000863A0000863C0000863E0000864028
-:104C800000008642000086440000864600008648F8
-:104C90000000864A0000864C0000864E00008650C8
-:104CA0000000865200008654000086560000865898
-:104CB0000000865A0000865C0000865E0000866068
-:104CC0000000866200008664000086660000866838
-:104CD0000000866A0000866C0000866E0000867008
-:104CE00000008672000086740000867600008678D8
-:104CF0000000867A0000867C0000867E00008680A8
-:104D00000000868200008684000086860000868877
-:104D10000000868A0000868C0000868E0000869047
-:104D20000000869200008694000086960000869817
-:104D30000000869A0000869C0000869E000086A0E7
-:104D4000000086A2000086A4000086A6000086A8B7
-:104D5000000086AA000086AC000086AE000086B087
-:104D6000000086B2000086B4000086B6000086B857
-:104D7000000086BA000086BC000086BE000086C027
-:104D8000000086C2000086C4000086C6000086C8F7
-:104D9000000086CA000086CC000086CE000086D0C7
-:104DA000000086D2000086D4000086D6000086D897
-:104DB000000086DA000086DC000086DE000086E067
-:104DC000000086E2000086E4000086E6000086E837
-:104DD000000086EA000086EC000086EE000086F007
-:104DE000000086F2000086F4000086F6000086F8D7
-:104DF000000086FA000086FC000086FE00008700A6
-:104E00000000870200008704000087060000870872
-:104E10000000870A0000870C0000870E0000871042
-:104E20000000871200008714000087160000871812
-:104E30000000871A0000871C0000871E00008720E2
-:104E400000008722000087240000872600008728B2
-:104E50000000872A0000872C0000872E0000873082
-:104E60000000873200008734000087360000873852
-:104E70000000873A0000873C0000873E0000874022
-:104E800000008742000087440000874600008748F2
-:104E90000000874A0000874C0000874E00008750C2
-:104EA0000000875200008754000087560000875892
-:104EB0000000875A0000875C0000875E0000876062
-:104EC0000000876200008764000087660000876832
-:104ED0000000876A0000876C0000876E0000877002
-:104EE00000008772000087740000877600008778D2
-:104EF0000000877A0000877C0000877E00008780A2
-:104F00000000878200008784000087860000878871
-:104F10000000878A0000878C0000878E0000879041
-:104F20000000879200008794000087960000879811
-:104F30000000879A0000879C0000879E000087A0E1
-:104F4000000087A2000087A4000087A6000087A8B1
-:104F5000000087AA000087AC000087AE000087B081
-:104F6000000087B2000087B4000087B6000087B851
-:104F7000000087BA000087BC000087BE000087C021
-:104F8000000087C2000087C4000087C6000087C8F1
-:104F9000000087CA000087CC000087CE000087D0C1
-:104FA000000087D2000087D4000087D6000087D891
-:104FB000000087DA000087DC000087DE000087E061
-:104FC000000087E2000087E4000087E6000087E831
-:104FD000000087EA000087EC000087EE000087F001
-:104FE000000087F2000087F4000087F6000087F8D1
-:104FF000000087FA000087FC000087FEFFFFFFFF2C
-:10500000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
-:10501000FFFFFFFFFFFFFFFFFFFFFFFF0000000399
-:1050200000BEBC20000000000000000500000003DE
-:1050300000BEBC20000000000000000500002000B1
-:10504000000040C000006180000082400000A3001A
-:105050000000C3C00000E4800001054000012600FC
-:10506000000146C000016780000188400001A900DE
-:105070000001C9C00001EA8000020B4000022C00C0
-:1050800000024CC000026D8000028E400002AF00A2
-:105090000002CFC00002F08000001140000080003C
-:1050A000000103800001870000020A8000028E00D8
-:1050B00000031180000395000004188000049C0088
-:1050C00000051F800005A300000626800006AA0038
-:1050D00000072D800007B100000834800008B800E8
-:1050E00000093B800009BF00000A4280000AC60098
-:1050F000000B4980000BCD00000C5080000CD40048
-:10510000000D578000005B0000007FF800007FF872
-:1051100000000166000015000000FF000000000014
-:105120000000FF0000000000000019000000000067
-:1051300000000000FFFFFFFF00007FF800007FF885
-:1051400000000361000015000000FF000FFFFFFFDB
-:105150000000FF000FFFFFFF000000FF0000FF0046
-:105160000FFFFFFF0000FF000FFFFFFF000000FF29
-:105170000000FF000FFFFFFF0000FF000FFFFFFF19
-:10518000000000FF0000FF000FFFFFFF0000FF0016
-:105190000FFFFFFF000000FF0000FF000FFFFFFFF9
-:1051A0000000FF000FFFFFFF000000FF0000FF00F6
-:1051B0000FFFFFFF0000FF000FFFFFFF000000FFD9
-:1051C0000000FF000FFFFFFF0000FF000FFFFFFFC9
-:1051D000000000FF0000FF000FFFFFFF0000FF00C6
-:1051E0000FFFFFFF000000FF0000FF000FFFFFFFA9
-:1051F0000000FF000FFFFFFF000000FF0000FF00A6
-:105200000FFFFFFF0000FF000FFFFFFF000000FF88
-:105210000000FF000FFFFFFF0000FF000FFFFFFF78
-:10522000000000FF0000FF000FFFFFFF0000FF0075
-:105230000FFFFFFF000000FF0000FF000FFFFFFF58
-:105240000000FF000FFFFFFF000000FF0000FF0055
-:105250000FFFFFFF0000FF000FFFFFFF000000FF38
-:105260000000FF000FFFFFFF0000FF000FFFFFFF28
-:10527000000000FF0000FF000FFFFFFF0000FF0025
-:105280000FFFFFFF000000FF0000FF000FFFFFFF08
-:105290000000FF000FFFFFFF000000FF0000FF0005
-:1052A0000FFFFFFF0000FF000FFFFFFF000000FFE8
-:1052B0000000FF000FFFFFFF0000FF000FFFFFFFD8
-:1052C000000000FF0000FF000FFFFFFF0000FF00D5
-:1052D0000FFFFFFF000000FF0000FF000FFFFFFFB8
-:1052E0000000FF000FFFFFFF000000FF0000FF00B5
-:1052F0000FFFFFFF0000FF000FFFFFFF000000FF98
-:105300000000FF000FFFFFFF0000FF000FFFFFFF87
-:10531000000000FF0000FF000FFFFFFF0000FF0084
-:105320000FFFFFFF000000FF0000FF000FFFFFFF67
-:105330000000FF000FFFFFFF000000FF0000FF0064
-:105340000FFFFFFF0000FF000FFFFFFF000000FF47
-:105350000000FF000FFFFFFF0000FF000FFFFFFF37
-:10536000000000FF0000FF000FFFFFFF0000FF0034
-:105370000FFFFFFF000000FF0000FF000FFFFFFF17
-:105380000000FF000FFFFFFF000000FF0000FF0014
-:105390000FFFFFFF0000FF000FFFFFFF000000FFF7
-:1053A0000000FF000FFFFFFF0000FF000FFFFFFFE7
-:1053B000000000FF0000FF000FFFFFFF0000FF00E4
-:1053C0000FFFFFFF000000FF000000FF000000FFD4
-:1053D0000000FF00000000000000FF0000000000CF
-:1053E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD
-:1053F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD
-:1054000000001000000020800000310000004180FA
-:1054100000005200000062800000730000008380E2
-:10542000000094000000A4800000B5000000C580CA
-:105430000000D6000000E6800000F70000010780B1
-:105440000001180000012880000139000001498096
-:1054500000015A0000016A8000017B0000018B807E
-:1054600000019C000001AC800001BD000001CD8066
-:105470000001DE000001EE8000000F0000000000CF
-:1054800000007FF800007FF80000021D00001500FA
-:1054900010000000000028AD00010001FFFFFFFF29
-:1054A000FFFFFFFF00090206CCCCCCC17058103CB6
-:1054B000000000000000FF00000000000000FF00EE
-:1054C000000000000000000000000001CCCC020140
-:1054D000CCCCCCCCCCCC0201CCCCCCCC00000000D1
-:1054E000FFFFFFFF0000FFFF000000000000FFFFC4
-:1054F000000000000000FFFF000000000000FFFFB0
-:10550000000000000000FFFF000000000000FFFF9F
-:10551000000000000000FFFF000000000000FFFF8F
-:1055200000000000000E0000011600D60000FFFF82
-:10553000000000000000FFFF000000000000FFFF6F
-:10554000000000000000FFFF000000000000FFFF5F
-:10555000000000000000FFFF000000000000FFFF4F
-:10556000000000000000FFFF0000000000720000CB
-:10557000012300F3FFFFFFF3318FFFFF0C30C30C5B
-:10558000C30C30C3CF3CF300F3CF3CF30000CF3C5F
-:10559000CDCDCDCDFFFFFFF130EFFFFF0C30C30CC1
-:1055A000C30C30C3CF3CF300F3CF3CF30001CF3C3E
-:1055B000CDCDCDCDFFFFFFF6305FFFFF0C30C30C2C
-:1055C000C30C30C3CF3CF300F3CF3CF30002CF3C1D
-:1055D000CDCDCDCDFFFFF4061CBFFFFF0C30C305C2
-:1055E000C30C30C3CF300014F3CF3CF30004CF3CE6
-:1055F000CDCDCDCDFFFFFFF2304FFFFF0C30C30C00
-:10560000C30C30C3CF3CF300F3CF3CF30008CF3CD6
-:10561000CDCDCDCDFFFFFFFA302FFFFF0C30C30CF7
-:10562000C30C30C3CF3CF300F3CF3CF30010CF3CAE
-:10563000CDCDCDCDFFFFFFF731EFFFFF0C30C30C19
-:10564000C30C30C3CF3CF300F3CF3CF30020CF3C7E
-:10565000CDCDCDCDFFFFFFF5302FFFFF0C30C30CBC
-:10566000C30C30C3CF3CF300F3CF3CF30040CF3C3E
-:10567000CDCDCDCDFFFFFFF3318FFFFF0C30C30C3D
-:10568000C30C30C3CF3CF300F3CF3CF30000CF3C5E
-:10569000CDCDCDCDFFFFFFF1310FFFFF0C30C30C9F
-:1056A000C30C30C3CF3CF300F3CF3CF30001CF3C3D
-:1056B000CDCDCDCDFFFFFFF6305FFFFF0C30C30C2B
-:1056C000C30C30C3CF3CF300F3CF3CF30002CF3C1C
-:1056D000CDCDCDCDFFFFF4061CBFFFFF0C30C305C1
-:1056E000C30C30C3CF300014F3CF3CF30004CF3CE5
-:1056F000CDCDCDCDFFFFFFF2304FFFFF0C30C30CFF
-:10570000C30C30C3CF3CF300F3CF3CF30008CF3CD5
-:10571000CDCDCDCDFFFFFFFA302FFFFF0C30C30CF6
-:10572000C30C30C3CF3CF300F3CF3CF30010CF3CAD
-:10573000CDCDCDCDFFFFFFF730EFFFFF0C30C30C19
-:10574000C30C30C3CF3CF300F3CF3CF30020CF3C7D
-:10575000CDCDCDCDFFFFFFF5304FFFFF0C30C30C9B
-:10576000C30C30C3CF3CF300F3CF3CF30040CF3C3D
-:10577000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CF1
-:10578000C30C30C3CF3CF3CCF3CF3CF30000CF3C91
-:10579000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CD1
-:1057A000C30C30C3CF3CF3CCF3CF3CF30001CF3C70
-:1057B000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CB1
-:1057C000C30C30C3CF3CF3CCF3CF3CF30002CF3C4F
-:1057D000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C91
-:1057E000C30C30C3CF3CF3CCF3CF3CF30004CF3C2D
-:1057F000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C71
-:10580000C30C30C3CF3CF3CCF3CF3CF30008CF3C08
-:10581000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C50
-:10582000C30C30C3CF3CF3CCF3CF3CF30010CF3CE0
-:10583000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C30
-:10584000C30C30C3CF3CF3CCF3CF3CF30020CF3CB0
-:10585000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C10
-:10586000C30C30C3CF3CF3CCF3CF3CF30040CF3C70
-:10587000CDCDCDCDFFFFFFF3320FFFFF0C30C30CBA
-:10588000C30C30C3CF3CF300F3CF3CF30000CF3C5C
-:10589000CDCDCDCDFFFFFFF1310FFFFF0C30C30C9D
-:1058A000C30C30C3CF3CF300F3CF3CF30001CF3C3B
-:1058B000CDCDCDCDFFFFFFF6305FFFFF0C30C30C29
-:1058C000C30C30C3CF3CF300F3CF3CF30002CF3C1A
-:1058D000CDCDCDCDFFFFF4061CBFFFFF0C30C305BF
-:1058E000C30C30C3CF300014F3CF3CF30004CF3CE3
-:1058F000CDCDCDCDFFFFFFF2304FFFFF0C30C30CFD
-:10590000C30C30C3CF3CF300F3CF3CF30008CF3CD3
-:10591000CDCDCDCDFFFFFF8A042FFFFF0C30C30C90
-:10592000C30C30C3CF3CC000F3CF3CF30010CF3CDE
-:10593000CDCDCDCDFFFFFF9705CFFFFF0C30C30CC2
-:10594000C30C30C3CF3CC000F3CF3CF30020CF3CAE
-:10595000CDCDCDCDFFFFFFF5310FFFFF0C30C30CD8
-:10596000C30C30C3CF3CF300F3CF3CF30040CF3C3B
-:10597000CDCDCDCDFFFFFFF3300FFFFF0C30C30CBB
-:10598000C30C30C3CF3CF300F3CF3CF30000CF3C5B
-:10599000CDCDCDCDFFFFFFF1300FFFFF0C30C30C9D
-:1059A000C30C30C3CF3CF300F3CF3CF30001CF3C3A
-:1059B000CDCDCDCDFFFFFFF6305FFFFF0C30C30C28
-:1059C000C30C30C3CF3CF300F3CF3CF30002CF3C19
-:1059D000CDCDCDCDFFFFF4061CBFFFFF0C30C305BE
-:1059E000C30C30C3CF300014F3CF3CF30004CF3CE2
-:1059F000CDCDCDCDFFFFFFF2304FFFFF0C30C30CFC
-:105A0000C30C30C3CF3CF300F3CF3CF30008CF3CD2
-:105A1000CDCDCDCDFFFFFFFA302FFFFF0C30C30CF3
-:105A2000C30C30C3CF3CF300F3CF3CF30010CF3CAA
-:105A3000CDCDCDCDFFFFFF97040FFFFF0C30C30C82
-:105A4000C30C30C3CF3CC000F3CF3CF30020CF3CAD
-:105A5000CDCDCDCDFFFFFFF5300FFFFF0C30C30CD8
-:105A6000C30C30C3CF3CF300F3CF3CF30040CF3C3A
-:105A7000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CEE
-:105A8000C30C30C3CF3CF3CCF3CF3CF30000CF3C8E
-:105A9000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CCE
-:105AA000C30C30C3CF3CF3CCF3CF3CF30001CF3C6D
-:105AB000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CAE
-:105AC000C30C30C3CF3CF3CCF3CF3CF30002CF3C4C
-:105AD000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C8E
-:105AE000C30C30C3CF3CF3CCF3CF3CF30004CF3C2A
-:105AF000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C6E
-:105B0000C30C30C3CF3CF3CCF3CF3CF30008CF3C05
-:105B1000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C4D
-:105B2000C30C30C3CF3CF3CCF3CF3CF30010CF3CDD
-:105B3000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C2D
-:105B4000C30C30C3CF3CF3CCF3CF3CF30020CF3CAD
-:105B5000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C0D
-:105B6000C30C30C3CF3CF3CCF3CF3CF30040CF3C6D
-:105B7000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CED
-:105B8000C30C30C3CF3CF3CCF3CF3CF30000CF3C8D
-:105B9000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CCD
-:105BA000C30C30C3CF3CF3CCF3CF3CF30001CF3C6C
-:105BB000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CAD
-:105BC000C30C30C3CF3CF3CCF3CF3CF30002CF3C4B
-:105BD000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C8D
-:105BE000C30C30C3CF3CF3CCF3CF3CF30004CF3C29
-:105BF000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C6D
-:105C0000C30C30C3CF3CF3CCF3CF3CF30008CF3C04
-:105C1000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C4C
-:105C2000C30C30C3CF3CF3CCF3CF3CF30010CF3CDC
-:105C3000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C2C
-:105C4000C30C30C3CF3CF3CCF3CF3CF30020CF3CAC
-:105C5000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C0C
-:105C6000C30C30C3CF3CF3CCF3CF3CF30040CF3C6C
-:105C7000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CEC
-:105C8000C30C30C3CF3CF3CCF3CF3CF30000CF3C8C
-:105C9000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CCC
-:105CA000C30C30C3CF3CF3CCF3CF3CF30001CF3C6B
-:105CB000CDCDCDCDFFFFFFFF30CFFFFF0C30C30CAC
-:105CC000C30C30C3CF3CF3CCF3CF3CF30002CF3C4A
-:105CD000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C8C
-:105CE000C30C30C3CF3CF3CCF3CF3CF30004CF3C28
-:105CF000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C6C
-:105D0000C30C30C3CF3CF3CCF3CF3CF30008CF3C03
-:105D1000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C4B
-:105D2000C30C30C3CF3CF3CCF3CF3CF30010CF3CDB
-:105D3000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C2B
-:105D4000C30C30C3CF3CF3CCF3CF3CF30020CF3CAB
-:105D5000CDCDCDCDFFFFFFFF30CFFFFF0C30C30C0B
-:105D6000C30C30C3CF3CF3CCF3CF3CF30040CF3C6B
-:105D7000CDCDCDCD000C0000000700C00002813069
-:105D8000000B81580002021000010230000F024097
-:105D900000010330000C0000000800C00002814038
-:105DA000000B81680002022000010240000702503F
-:105DB000000202C000100000000801000002818003
-:105DC000000B81A80002026000018280000E829810
-:105DD0000008038000028000000B8028000200E021
-:105DE000000101000000811000000118CCCCCCCCD7
-:105DF000CCCCCCCCCCCCCCCCCCCCCCCC00002000F3
-:105E0000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCD2
-:105E100000002000CCCCCCCCCCCCCCCCCCCCCCCCD2
-:105E2000CCCCCCCC00002000000000000000000022
-:105E30001F8B080000000000000BFB51CFC0F003D7
-:105E40008ABB5819180238107C7AE0A58C94E9DFD7
-:105E5000C8CCC0B00388AF02F17E66D2F5B34A2346
-:105E6000D8F7241818182419184E893130EC9244A8
-:105E700088E702D5084A3130DC858A0500D967A554
-:105E8000E81B4EA39836F8BB3A2AFF912A84CE87A6
-:105E900089A3C93F86CA6F5480D03FD5B19BBB0947
-:105EA0002A0F00FE694F6760030000000000000039
-:105EB0001F8B080000000000000BED7D0B7854D50F
-:105EC000B9E8DACFD933994C7642422610700703ED
-:105ED000040D30208FA85427E1D1E0E5E8F0462EEC
-:105EE000CA80AF0892448D356D39373B6412020287
-:105EF0008ECAA1B4A53A207AA247DBD4464B7BF5E3
-:105F0000DC206A73DAD37B9152A52DB6413D281669
-:105F100068F49403BDD796BBFE7FAD3DD97B672661
-:105F20000F5FDF395F1B3EDD597BAFBDD6BFFEF78C
-:105F3000FAFF7FEDA8A297A8971072117EAE256494
-:105F40009D4008C9EBBD5AF78916AD26B9845405A2
-:105F500055632B7DB65E0A1B8DD3E8FD4BC4D01371
-:105F600004EE8F9B432611A2C07B05844C85FF4D18
-:105F70002744CE691D1EF5D37BD2AA2CB85AE3590B
-:105F8000D72A99107D2A3CDF362ED5F3E4FC09A5EB
-:105F9000A75B23F873710C21F5C76F9CFF8AD5A608
-:105FA000FF8D2499B9272FA7BFCC24332F4A847C97
-:105FB00054B828ABD3483FDE070D5DBA3C9690F34A
-:105FC0000D2BE6BF32B6EFF3F512A96D2FED7BFF77
-:105FD0002AA2215E8866AA9189BDEB5E4F48A72759
-:105FE0008790CD859BD87A7329B2AEA4F7DBFE45A6
-:105FF000974B7AE15C2FD37E53FBAE871013C7B566
-:10600000C649BE9FE872BCEF7E2F391E7F9FC8F441
-:10601000DF0C42B00B5DFF74217A2DDCF7142E32B9
-:1060200047D0F6FA67CA49B4343DFC497A7D42F854
-:10603000ADF7D2D291F7FB687F530BA1EF9D54E3EC
-:10604000D75F45F9E8BDEF4BA14DC0477BC6CF21D7
-:10605000017A9F303EB2E8746A7FD3F054FC918E8F
-:106060004E7F4FBCC87F167F5589ABB23AC927E730
-:10607000AF3B80BF326CFCD5BEB8DFF13E297FC597
-:10608000DCFCC5F171BA9DAD9FEC1EC6E8C2E9E526
-:10609000A64F5ABA7CD2F7FAF2D316C0ABA77DB19D
-:1060A0003982A4E0270EAF45AF4F0BEF407C444848
-:1060B0001CE94C484482F97BEFB36B469921009F61
-:1060C000D1E6615847904D4582B7B6DC2D52380372
-:1060D00024D13AAE88B6BBD72C00B803C7E79F02DD
-:1060E00079680E5568B3E97AF569C643F3E835A3D4
-:1060F0005417603D5B89084A808E576D969702BDA4
-:1061000008B69F366F099B80071226643821F7F185
-:106110003511221A326DABF0EB9854EB504927C37E
-:106120008770D1D3F7FD74EB577BDF23178BE0FF2C
-:10613000F71058DF40EF91287BCFA4FF00DF39AE86
-:1061400071F439B46DE3FB00B1B5E9F3A3F00BE2F0
-:10615000FBEE2F64BE6CB24F33A87E504B443D0122
-:10616000FD89912DD37646255544F03C480E528A40
-:106170000C489766422ADB811F493B5938B117BE4C
-:106180005344C0F514DCBE734D0B555DE7CAFC21CA
-:10619000E0F3A04EC8B09CBEEBD9D6401979BCAD97
-:1061A0001D7A0EF93F46F9680C7DDF0C317BB8B5DE
-:1061B000E4653D6A93EF0C41E07CE9E60F62C83389
-:1061C00040CC8055E8B5440C7B039F9E3F64171E6E
-:1061D00007CB1FFEA88D3E64E8F40A72BF61B0FCD5
-:1061E000F169E7B3E8DA57AE1A2DBA6A84D2614B87
-:1061F000F1A294FE477ABAEE23D03FA384841329F8
-:10620000DE1B25085C0E4C87BEC12BA58F9424EFA6
-:10621000BD0E7A49F93356ECED071F52AE131FD667
-:10622000B8DE7AC97897AA4422EB228CA7C2789468
-:106230004FB7041F3609958773C0DB141F527C4A81
-:1062400027B44931413EA43F9D026D7B83E1C45692
-:10625000E48304D2C582CF63880EFCCAB93E479B53
-:10626000AC30053BFCDE7A15E150D147A0E3E87481
-:10627000408A0AD94F3A816F2D7E0536B87829B405
-:10628000BFEEE08356632A4945078B5F01AD8C5F03
-:10629000BF3E38FDE29E6F8913DE41BFE7978D93C5
-:1062A000363B94FE3D999CB4E84391580503D8F8D9
-:1062B00060B3420E089309692A5C46A2F4EE667840
-:1062C00044ED580B5C0BC03F9C8A7A81B40932C004
-:1062D00069D95512CCC17ED30503C713B55AD42B47
-:1062E000923FCCEC2B7F9E1E2E36FF70231ED629AC
-:1062F0007EF3493C2C52FA505D19EA24A037C304BE
-:10630000F88084185F48DC4FB7DE8F717EF692A369
-:10631000F83ED5AEA68EF6CC29C77325FA908EB37B
-:10632000A584243C48A7B8066DB94426B02FA0FA2E
-:10633000C95F40FB6759EC2F2D0801FC59DCBE9268
-:10634000599CBF05AACF289EFDD39CF2ED73C9BF0F
-:10635000CCED711F7D96663F615DDDFEDB6302F76C
-:10636000DF32881FE9CDDF27FED4FEAAE5B75978D2
-:10637000CD1309E293FC54493C51C4D746DBF7BC2A
-:10638000959D80759B159135CD140FE6DB42A809CC
-:10639000E829877BB2E8F3934F4AB85FCA5B567F20
-:1063A00009CCB7BDC11C5B6CF307B7CBB51AE09B3A
-:1063B000F28566B7173790E80B826DFFE509B68C5A
-:1063C0002D1E86FCF7767709980A01F9CFEB8F0529
-:1063D0005F05B9E4F793F8B1B7A5BEEDDC7CC2ED7B
-:1063E000E50DE5613A6F2BE8AE11F8D814283CAD05
-:1063F00005ACFD93C6E1E5603F5B3359FBA3C6776F
-:10640000C28DC817512D42EFD5138E972E8A17A42F
-:10641000BF916FB7AFEEAB7BFD3B64DD077CB6D7BA
-:106420009F735D09D8CF32310468DF1B3BA2AFB147
-:10643000E1E39B9E8A37001F2349422040BF582E2C
-:10644000CA8FE5CF01E341BB80CB5321398CFD4698
-:10645000477ACA15B8B5427F19AE2DC1E7B2519E31
-:10646000C81CFD24CABF245CBC7CF0F29E6EBD013A
-:10647000814452F9F3F74B392857816974DD0EBD19
-:106480005EA8233FF271BF063402FD914D619A0C64
-:106490007A24BE229262BC9F0822F6D3C01E5C41C1
-:1064A000D150B8ACECDFE87A352D3CE5550A97279A
-:1064B000D71F32116C66270C2E039E78A306F82591
-:1064C000472502F2AF158623B7019F924858A0F7DF
-:1064D000B56038B4D5E8BB3E9530FB9043AF179913
-:1064E0007C13E87F4F9E8EFD09D80B6B5D63002EF9
-:1064F00015E1FA0CE89D2B4E1F98CE23487B3918E6
-:10650000B374F4FEACE99CEE7D377D030293AFFBE0
-:106510009BCE874D2A4F2DC7055102A5182F46BA8D
-:10652000689C2EE795A8067EE396AF8A641F6D3FB0
-:106530005ADFBF9F12033FC563B39B3AA3DFC8BBBB
-:10654000F4A9C042E9DEDB7597589948C14F9522FE
-:10655000D3FB5BEE7A383E16E8F98A73BFA7AC0A24
-:10656000A35F4AF77D95400FEB3D6F31B34F643F1A
-:106570005D0FEDAF707FE47CDEA22C92621EEBBA61
-:10658000C7057F21C5732AB9B94FE2FED54E36BE85
-:10659000E5EF9C2FE87F7C0B3F172A4572B814C9A2
-:1065A000EA23A57C3114EF8549BF3B0FDB1EFE2893
-:1065B000512BFA08D8BDC2CE72B82AA4A711F8741C
-:1065C0009748AA52C1B7561211BEC230DD7A50BDEB
-:1065D0005F688AA099C8BD9281F7F357D51E5428E9
-:1065E0005D5A47911098994B603CD0AB07BD683F0E
-:1065F000D55C92F0523DFD5AD1574CB0CB7A21096F
-:10660000032C7A2DEC39E97FD4BE1AF4B9B2316A81
-:10661000225CC108EE110E152D437AB750FFCEC390
-:1066200016E2E0A71653EC04BE8DD3F1C11F8C1BFC
-:106630001528AFE782D4F2C3CFC7147E6BBF712990
-:10664000C485282901CE0932C2494762F4D4195EB3
-:1066500046EE9E453AA9DD69CDDE85F2605E495081
-:106660005E6572D814C0CEC80953A4F0C6AA983E7D
-:106670005072E382DD8EED21D107ED7C23EB9DE8A6
-:10668000FFB5FE595A910AAFD522D36FF7717D78C5
-:106690005E699F8FFE4633958FA2BEFDC39C0EDFC1
-:1066A0008E2D7A703CEA336697ACE75D82E18863B1
-:1066B0008EBCA0E27ADC7ECD3CEED7B41452BF068D
-:1066C000E59D2C003F2683F3470B608F3EF76493D4
-:1066D0008449E1C8007F86FA25A494F9251AFD07AC
-:1066E000FA2F7F85D39FF1B8FC9674FECCD784C86F
-:1066F0000F50DF515505F0EF16E2F3C701BE0BE86E
-:106700007ED2E8BBEE2EBE9F9C2B6D2B6AA1703D06
-:10671000962B3AF861349797C78879E2227D1E2F2D
-:10672000140D803B5E2FE23ACE19CC6F27EF7A1D15
-:1067300076A2D95CA4119BFED9C1E5695B83E69082
-:106740005BF7D5AFC6A391147A4BE7F4C99815C689
-:10675000F8873F9440FAC33A53F9E90F945668FD1D
-:10676000E93FB9445D83F82BAC3825C3B5CCBD5F98
-:106770004A3DAEFB4AEC7EA694BEDF60AF5B289E2E
-:10678000DE561CFE78A704FB2E93A0FFE70D5153A5
-:106790001580AB3E1CE0F786A8B8C1B5BBBC12EEB5
-:1067A0001BB3221AC891659FBDA1C856B89FF52595
-:1067B000790BD0CB5B2E8A12A59F269B24C7263748
-:1067C00053E1A68DBF33A9BAB4E3438B7EA512FC77
-:1067D00054522892B1148ECD1F3768763A75D16D18
-:1067E00008DBB73AF9265EDFBF9EFDB47CF173D1BA
-:1067F0008A8738E9853FF67808A77392FE7DE21A0A
-:10680000FF39E8AD71FA19947E9B0CA027D3177459
-:10681000E385FE435C33C3D08E1B8668DAF4D8C7A9
-:10682000620EE241BE20A35EDABDA6250CF4D2E9D9
-:1068300018405A7A0DA7B2DB5D828A7245F5C655BB
-:10684000D27454C802C43FE74A1B91DE8F517A8349
-:106850001E7B8CD4765DCCED957F2DAAA21FDFD553
-:10686000689637160F456F52F8A85F47F630FFE578
-:1068700012CB7FF97BCA2783F057CE53A3C1EDB16A
-:1068800017F84AEEA62C4DE12ADCC8EC26F86A3946
-:10689000B46D50BBD729F4F2A387CFA394260E8FF3
-:1068A000477A3BEDD363852F0B1EB06FC5CCBEA9D5
-:1068B000666718F44CA098DA2782F66735E06744DB
-:1068C00049BC1CDA2377CFC3757C1BFC503FD8171B
-:1068D00082F8F8A698683429CD7CE148A728C1FE43
-:1068E00099E0FECEA29F7B5E6AF5909EBE6C712FF2
-:1068F000D029507B189669B77BD5525EAF3D1C51AD
-:10690000D289EAD6ED2FA4F513FE2CF1FDD8CCC622
-:10691000306D8F825FA93FB9537CBC11F663114F74
-:10692000B81EE9EEDA4724E3503CDEBDB6CC122AAD
-:1069300063F96FE83C7776291400027E80648F0348
-:10694000DD097689EA9BB5DCAEDD4A2201787886DE
-:1069500088185F3B438E04AEB0F1E14E4965F3B455
-:106960002A6F43FCDE8AEFDE16676D4BFFDCB1DB7E
-:10697000D9BE9D2C1A0EF1DBDB772AB8FE3B5DFBFE
-:10698000D698A4E3B87790DA16C043B342D04F58F4
-:10699000AB1319E2B11B7EF89D19B04FF836B72B37
-:1069A0001F50FE326CFA679D3FA1C27EF69D8E2B72
-:1069B000965D4DE0FD44CB08D89767939476F496A6
-:1069C00056277C03C1EF8697904DFDC221B7092958
-:1069D000E3874F4982236E58AF052641D0E4BC9728
-:1069E0005DCD0AA63FCCDF7A134DE0274A06EF5F64
-:1069F0003B99E5396A67C275A0F77EC6FDD1A1BE95
-:106A00007738CD7B1BB46E15F8BF46362B05B137F2
-:106A10005EA529B5E19120C707CA3B471247BFD6FB
-:106A200041F6AB14FBE9E786F794AE99E2E4BE7059
-:106A3000DF40A26F81DC9D17A3D51827E0707B0093
-:106A4000CF125C65A427C64F8A605E7FAB9005714C
-:106A5000940EF44FBC86ECA0778DA507A85E82B893
-:106A60004F4689F3B93BAED293A46B27CA1786442D
-:106A7000E992029ABF53027FB14C3E9DEC4FE7ABC7
-:106A800086754DC64EA85FEAB87EA926C683B3A612
-:106A9000A17C61BCAE6EFE1813E0A8CB3342A60108
-:106AA0006A3414C6315C7C5573412009DBFEBB4659
-:106AB000EE51418E6AA8FEB6DFBF27C8E2C9E9F4ED
-:106AC000B64234C35F027EAD88789274DAB6ADFB0D
-:106AD000A3B850D9CEF655594BFAD917DF1364F144
-:106AE000E2B55BC666B1B88B535F9DE5F6E127CF93
-:106AF0003CAE76839E79FAC4F5B0CEF5FF53221AE8
-:106B00009DF7EC3399A413ED464205BBB1AE434A61
-:106B1000690F096962F9F3EF6522BDD63DE7492C9B
-:106B2000A0EFAF7BE19D4984C2777653CF6B23C141
-:106B30009F7E5A607171B37BD2627A7F9D4C56A75B
-:106B40008AB34C90D93EE4F48F325680FC0A6D072C
-:106B50006FC671DB972B6057AD7E86AC20BFD27EAF
-:106B600068B7CDA784C45821157C2C1F71FA2981E0
-:106B7000C17740C1FDDFBAB6BD6A94C251D3F621D8
-:106B8000EA8BD9DF7B360078A8392039FCB89A36F1
-:106B9000A9D33309AF27E00A71566106F009E797D8
-:106BA0008E0D185FAD6E7FE0432900EF3BF516C5F3
-:106BB0004BA813F0FAA6145A00ED1FFC63C0A0A85E
-:106BC000FAE0F01301C02B1D778D9A05717C277FA9
-:106BD000C3F81772FA8E47391DF3BD35ED5BD87CCB
-:106BE0002EBDF801FC52D0370E1B919D7974D23620
-:106BF000B83CEFFA67CF3D6AD2F94E3FF7FB474DFD
-:106C00000AF75D7FF9F747BF0E72F9CF5E1DF47A80
-:106C1000CDD3BF0C101B1FAE9359FCE0EC28BA85F6
-:106C2000A2FDCEFECA930087E0EC4BEF8D36E87AEA
-:106C3000CF7EFF4FC30DDABFEEA5B9F9B0FEBAE7BC
-:106C400067E7F7E7C7009F263C76B81238BE714069
-:106C500060CEC28BFCEAA2CBA18E43A301CE33C788
-:106C60003CB83FABA1F7EAA7029D36A09D85F6464A
-:106C70008ADFEA67367F08FAA12F9ECD912206BFF0
-:106C8000A81A0C029DDF9987F4223D681FDDFD6B79
-:106C90008E523A4E4E4FB773E46315F45CCD335BBE
-:106CA000D87C2EBA9D815FAEEC4BB7CD2EBA9D231A
-:106CB000773D560089D78E618E3C8275ED8D9F475A
-:106CC000B222FDE8074BFE07C22BE659285C4BE5D4
-:106CD000F0376490A3E73292745D00747DF6DC684F
-:106CE00042F9E27DA5E766B0073D2F79F47DF4FE19
-:106CF000BA97DE44B93AFBFCEBAA81768CF805EA38
-:106D0000579E25C99FC3E06756339F93D4ECCFECC1
-:106D1000F4047AE9539D58586904F0FE09BC9F6059
-:106D2000FC5E9D38B8444841AFD7E5314CFF27F2AF
-:106D3000102F1BF6FF46257E271D8532A0E389799B
-:106D4000703F1D1DADF5EBB0FE99367AEE6772EA25
-:106D5000EE5F4DE511EC5D92AE09E14D92422ECF12
-:106D6000EEF5C860EFCE825F95326FCAFC99A1E65E
-:106D7000577E263BEBAF92F9158E87F4FCC1E47B7E
-:106D8000A0F50D157F3F920D1CD78DC7D31FA7D639
-:106D9000F7EF717D514DCCCA1197F6F5436412316E
-:106DA0004716F5C27B1A36A894FF4E3F2D613CA8CA
-:106DB000A5FD10EA6DB79EA84E13DFBC20333FA19E
-:106DC000FAC0C149A0CF4EBFFC23E4CFEA674EA86A
-:106DD000102F7EADED076A7769AF3C803D48D8EC57
-:106DE000C1E9EF1E9CC4F4001D3F059D14858D5F15
-:106DF000F3A273FC9A673E748CBFDE6C47FF60A001
-:106E0000793E90C3CB61BD1F1C5608E8D10FDAA5AF
-:106E1000CA547EED07DC1E5A786A797DDE6F200F3A
-:106E200036ED88CF00BBD9B1299CBF1DFCB5230A24
-:106E300001BD4DE4F0EF3DB4DDF1BACF80FC74C785
-:106E400091659261DB87FED085CF9947CDD9997442
-:106E5000BC99DD9169E0A2BAF546D971BAAFB2F139
-:106E600041DDEB95F9A0EF611F6A8C87F94241D8AB
-:106E7000E74A8179952C7F2DEADE94F69A8DA7F862
-:106E80002318AF5274311923837147924423C45796
-:106E900089DFEFCE4F44347B1E6AC5E183B0C5CC99
-:106EA0005DFC62018C132031FD24FA9F2474B11F14
-:106EB000FFCB9D8FB0F09994BF34F9890CFDE6E0CB
-:106EC00041D277BCBE7998A806F1ED16FFDAD6223A
-:106ED0005B1EA625D8270F3357A178681548CA78B6
-:106EE000ED78A562BE9287BBE368AAE737294CAE6E
-:106EF000AE25DDF7AE0138232C9F33CB85AF2F7144
-:106F00007CFDF364BA70AA42CBC1B3A2F89DBD2444
-:106F10001C53E8FDB9AB7A2E7F19BBF37C8E395E2A
-:106F2000BC983178FC0D356F17F12CBA5D1944DE31
-:106F30002E5DFEB8170E93EFC7731C798C436FDD7F
-:106F4000AF75639EA1B6B5C816F71BDEE92561CC07
-:106F5000E319E81F0EEFBCF39BB741DC39B730E40F
-:106F6000257DC7912F5C8D71232B9F2F17863B2189
-:106F7000DE2FEB46B984F32C0F437E61B3C1F205DB
-:106F80009B83FDC7F56628D16605E351D7E0B8A21B
-:106F9000C6EB0F06B9CE6F2C0E209E0314CF20EF48
-:106FA000B8FF81F51D1778DEBCDB94207F78221BAB
-:106FB000F305019994403CE0BCE00B6DC27C823348
-:106FC0006F9E8E7FB7CB26E6CD5B8D3E79F3EF28A3
-:106FD000B67C8396266FAEF99760DE5C23367FB76A
-:106FE000A8B75FAFDCB9F2E63016C665B6CF86B893
-:106FF0004C733671E4CD9B41F0AF22E439E5EAD918
-:107000005877E6E5CFCD59B3C3F63639FE32B679B7
-:10701000FCE98FCDE73641FFDC91A416EBD4E40800
-:10702000596AD383EF292C4EBB4109FF50B1D71DBC
-:10703000717EB0F23F87DE7A0FF90AAE63285E9B5D
-:10704000295F7990AF4E11BB5EB5AE16FF341BFDC4
-:10705000F3857A610AC6CD92EDA0897C110846C3FA
-:10706000E114EF4DF230B9B7E60D94513D4AE54DCC
-:107070003122988F5275BAE135060F7F3AB82C3E0F
-:107080006D36C6B03A289D60FD5EFA754C63714C52
-:10709000887051B876DD787BA83F3FC75AE70C254A
-:1070A0007CD28EF7DC4B52D7EF56AB6CDDCD9155D1
-:1070B0002CBF5EE5CCA742FADA1E679D2E44FF5D29
-:1070C000C13821CBA78A5A84E7474C2B3E1E4CC6B9
-:1070D000C30DA833BCCB047DA8AC6A3705B8E6B2B3
-:1070E0007C4AAE16FD58B1D90759EF6672EBCA0F4C
-:1070F000CE954E0F09BF565DDCD6061DFDF42D0D55
-:10710000416C6F6E30F0DAD210C6FB6E3A361B2F30
-:10711000076FC1BA341FC665D38DFF604308C789A6
-:107120003594B1F178DE9C90CC26E02B55B4E46523
-:1071300018B6FD127F6E163481FC6D17D8F36B5AAA
-:107140002E4579B3F86787D17F5C5A4ACC403E1808
-:10715000EAF87DF9F527B8CEE6597ED4AF03C951D8
-:1071600056279B77B0F328497BC1E6D9314BC379C9
-:1071700076E40E304F9CCD3330FC0C5FDB0E9EC2AC
-:107180003A0485F203A828450FA7AED3E3F2D677D9
-:107190001C0FEAF9E620AB0B538BFD6150FECD06C8
-:1071A000CF3716B27CA35A32BC02EEABA1CBB04EA5
-:1071B0005C2DF5633E4F2D1E7E0BB4B71DDCA25730
-:1071C00080FD2814435E03EC76379173516C307E5A
-:1071D000AB1697DC06FD7590630AC7280FDB6FA915
-:1071E000C557DD01EF1F9CF29AD144FB3717FA42D5
-:1071F0001E90B76ED9C1FF83D61385CE3C1A91A9D4
-:10720000BEA0FA6BDB94DB4B503E355B9D648A7A03
-:10721000419BDED8A0DAF4864AE6988087747A87A4
-:10722000DADFFBD4BCBEE358EF6F5022F52AEA85C3
-:107230000871D6BBA7CE675BF400370BF2917230B2
-:1072400059A7B7A060786F7EDBAAD373E7B5E3F4E4
-:107250005FAABCB6BBFEFCB3AAD3DBA926EBF446FF
-:10726000419DDE8F1512EA84BCFC2FA5D03EA32FD2
-:10727000DFB9C7739FB7A0FE8F06FB9C7472F9330A
-:10728000D5993F2D88BAE87EABD731DF2B202FA5CB
-:1072900003EB979155CE7146D53AEB6A2FA9CF7182
-:1072A000B48BCC118EFE97B68E713C1F1BBFCCF1F8
-:1072B0007CFCEEA98EF684C4558EFE97B75538DA5D
-:1072C00013DBAF73F49F7C6091A33DA573A5A3FF6F
-:1072D000155D6B1DCFA71F5EE7783EF3D83D8EF698
-:1072E00095DD5F73F4AFA7EE900A729BCBEB9073C2
-:1072F000F3457B9EB6358FDA25BACFDF9147190665
-:10730000E3DFACAE4B658F937943F77BB2A1867513
-:10731000CCFB8F9B035722D7A13D958DE11506DE4F
-:107320009F310FAE649AB3BE5635587D32ECE39C64
-:10733000F502CE3A6355DA86793ACFF12F77099381
-:10734000FAD2552D74CAC160EB9415C3F5DE10E571
-:10735000E2BC2517A3A85C60FCED6309CFB5CCC9DE
-:1073600044FFC2B69F423C5AFBA96B34120317D3A9
-:10737000928BF2553D235FC56ED63ECA230EA52ED5
-:10738000CE92BF804DEFC37EC5D233CD6583D3AFE0
-:1073900052E20A873FE9BE3605D6A5D38F051E9B6C
-:1073A0007FEFD68F339448213CD7E4B0496CF11A73
-:1073B00052AB38E01E2C9C9FD40EDC45198EA4D015
-:1073C000E32AA9C5BAAB9615610C02903AE2E0D364
-:1073D0009D8BFF47198C4BFDC219CE7532BFD0ED86
-:1073E0004F53FD86FEF40EEA4FA3BD73E947AAA7EB
-:1073F0004C5EFF65303F82E943F73A3F2F3FFADFAB
-:10740000C059ED875E81A25025EE0FF34402FBC305
-:10741000E6599120C4E7ACBA79EBBD56CFA5384EFA
-:107420002C5715217E19EB9A8BF1FA262DAAB13C27
-:107430007114C769CA16F5547562751E962FD6EA7F
-:107440001F18BBBF9FB88BA69268AA78DA4E0FCBE5
-:1074500007C5F4B55D604733F35403F6DCAD074F61
-:1074600045208E2497C93AECD70905E61D5B7E8F2F
-:107470009028C699B4A0887657ABDF81F30F04EF4C
-:10748000CD1E819FFBD8D22FBC5E3575DC251DBC7F
-:107490005B00DE6903C3EB05788B60FE6D387F8D82
-:1074A000C748897F85842B6703DD4E7C3982E95686
-:1074B000CA36201F3BCAD8BE9C1A02077F5BFB1C42
-:1074C000CADF0F7BF2B07E15F9DA3AE770A347C73F
-:1074D000792CBA92C21C8C6B04A2B1B1C594DF3274
-:1074E000A36C3FDFAB9F181F652A6102F12CD92FD7
-:1074F000627E50E5F110ABDF1F383E9B667523BD01
-:10750000365F29934D426F9D75AC90AE6B72EFBAAA
-:10751000FE8F279BF1279FD7479664615D8AF44CC5
-:10752000B03FBDEDE3F872EBEFEF79B8FE2E20052A
-:107530004C7F972E877C77BA71DC7E4C3D8FF30EA3
-:10754000BDBE9E9F2FF0DFD30571262BCE4782D381
-:1075500052C6E57BF1CAF295BDF45D6E7452FAC96C
-:10756000D3A7629EDC3AAF40D599B35E98D3D7A239
-:10757000AB15472741163FB2E8EC4DE2734FBFF819
-:10758000F482BC5CD1179FBFF2F07CC37F317CBE1C
-:10759000023E0DBD6666B2F3E9E4D05709E6A50ADE
-:1075A0009D7268BD67F1BB7BFD7FFA2FCA4FD6FA8B
-:1075B0002D7E48DFDF4CB9AFB1F2AB999CDF343898
-:1075C000654515CFAB656FB75E0AFBD7A01FF77D8A
-:1075D0009965313CDFAB105307BD9069ED6BF879CD
-:1075E00023AB5EC957EAF4CB34D7FE45E575517D30
-:1075F000CEDB72FFCD7D8E2A895F17BD266B69F2C7
-:1076000063833C7FB48BE7EB0AEAE28DB01F2EB8B0
-:1076100095D5FBEF51C86AA8AF1C51658ABE5CC8FE
-:10762000DF147D3F83AEBFE0C5871A4702496E3540
-:107630008AC0CD7846331C76B8E0AE78B98F3D9FCE
-:1076400002E33CA531BD5B5019C773CE4DCF8FCF40
-:10765000023FE195B796EB101FF828B718F74F6770
-:107660005EF08441FF9FC921555817F6C2CCD7C0A0
-:107670008FFF7D43578E6CE39333DF7D7D86428998
-:1076800074E6B9D767C848AC8463FE0D177F310331
-:10769000E0362B48492DE4EF7495C0B8351ACB97E6
-:1076A00059F53EBB86AB2D70FDA9379BC513F3C5BD
-:1076B0001DD0AE878018F80D3C9E7FF5696339D4E4
-:1076C0005F66772902D4E33D2498A69F5ECF9F781A
-:1076D00048003F4BEDAC85300BBD1F3A042837C73F
-:1076E000B27DC9F922525244F5BEEF70ED78F4A78D
-:1076F0005DF54E16FFCBB309E6FB7A6ED41260AF90
-:10770000B7CBC6375681FD5E25633DCE76F930CACC
-:10771000859B8EC7BD639CF5B93C1E7DE8AD3BE201
-:10772000E5F4FD7BA688C8AFFE1353B2480AF9DD25
-:10773000DE5086F3070ADEAE2C07B03EA67767F46C
-:10774000EE93FC3231B3A889548A4453A178F1975F
-:1077500011F2B68DEF5A4412D6E9F3171A088ED3F8
-:10776000D1A0E1B5AD411F5B4C3706DF6A08E27579
-:10777000678381D7871B4AF0F9830D2187DCC37C9F
-:107780006F97F0760A7FE5F3BA3ED040E7B5C1B116
-:107790006B22957A4AAF5D3C1FF540E9D4ACB5FD4C
-:1077A000C4C1F634740D9B3396230BEA4DEBF4BD44
-:1077B0005BFB817F4FA3B07A11F83577CB917DA821
-:1077C0001FA3058B6CFA91FA6D0584B2E2BD2D23DF
-:1077D000E6CC29407944799976388AFE7841302E72
-:1077E000401CB1E028BB6F9DB7407A5141FB61EE70
-:1077F0001C4101BD594ADA012CB5344A2A68FF9967
-:10780000794BCAE13E99E8BC3F4365F20DE356D09F
-:10781000EB6C2DF2236D3A7CA763B7F92C5DCF1F7B
-:107820003B3C06E4791E7CF94F2AEC0B62BF5235D3
-:10783000F0630A5E3C81750F31A15B85CAD8E35ABB
-:10784000F51C99EA19DC0C627C952A16CA2731D0FE
-:10785000B118FFEC89CDF1C37997E8297BFF5DBEB4
-:10786000E8DDFCE448580B523E4AE62FD6C7C27406
-:10787000D3F902CF5F1CD7D6C5CC4268D3FE53588C
-:107880003B46DF7F213B3A52CC86A28BAA58D79742
-:10789000A06DF5AF8A41BDED9B5CEF107FB408E4AD
-:1078A0002DD9D6693BD3D696599B68EC6AAD77C380
-:1078B000A13FBD067AAEFA45A11D40A37A8FE1FF34
-:1078C000C0435877DBD6D0A5C7144E7F8B0E542407
-:1078D000270409D6D3A909213186EA8F09FCFB14B4
-:1078E00005D3C24623E8D7841202BD19F231BF7115
-:1078F00042828E6393AB0969BE8382795FA0E336CF
-:107900005637ECE6AF67BD2C3F504FCCAD90072308
-:10791000CF283AE623799CF2B465E7F87EF52E2F5E
-:107920006B2A9B4CDF65A07FD6C818075B5F142FBE
-:1079300057E93CEB7F5414A29615F24A58D7B03E53
-:10794000BB7DF854969772B41FE275B4C16C331BBB
-:10795000CE0F541F786834D4055493F8CD5F037864
-:10796000FF95E51F4F1DBC32EB6ADADE40DB107F6E
-:10797000DDD0F1BA1AA5FD8671B8AB3BA65C07EB6A
-:10798000ABDE2612B188C967783CC573387E994C46
-:10799000F9E49AAD23E77A299D9F1A13D645CA07C1
-:1079A0002B7DE39A3568ABFA04909B95BE89CDC0D8
-:1079B00057EB27F2EF359089AF86655E2F45F96268
-:1079C000D8968618D427EC5F59791D98D9E122936F
-:1079D0005BCA88983F94B26398B7F843333BEF0291
-:1079E00029FD8D940EC532E992E97597CAE867B60C
-:1079F000C8182FA6F75B95A940977818CF57B432CF
-:107A0000BD3FF6450FC69D8B6BC377A25FA097E283
-:107A10003E653449FE605EFA12F88D8E335E27E5CE
-:107A2000700EE1C75E162F2C5EB16C3DBC27652E33
-:107A3000F1E1BE5C62E7A0C8B7599C7A979868D715
-:107A400040CE03C548DF5D01C617E6C3A5C817FBD6
-:107A5000C58ACBEE86B8A4B066EBBF005DB38B09D8
-:107A6000D015EEDF43EFEFE7F494B2433AD06F3F27
-:107A7000A7672C219A501F63DD7F41587B27C8DB05
-:107A80003AEFF373348AD7E19E707C18A5C39DDE6C
-:107A9000E763C102A4C3188DE2FDCE2D1D316D1424
-:107AA0001DA7313C42B7B5C7FF997A23989FEC4098
-:107AB0007996B31F5E07F24E9FBFA2D1753E95C364
-:107AC000F5057F5E3C26A93FC284DA1AA9B1579F0B
-:107AD00068D43E14DBFACFA1FAE0C947591DFBF583
-:107AE000743E9077BA0ECCFFF64C9013509FE5A3EE
-:107AF000B080DFE29B3806EBF3E8BA09F8253D13C6
-:107B000065B4B3561CDB3341C4F812F4077EF08D24
-:107B100062FDA9A044406FCA8532EE5765694F786F
-:107B20008201E16396D715F485786ED55B62CBE36D
-:107B300092DE3A606C17E1676E1CEDB19EEE029129
-:107B4000FA95B9C7170AA3E9787778B9BF9D4BFDB5
-:107B50006D7A7FBD97E9A5FB23E69721C4418CEEA2
-:107B600002D44F243215AEF93715E747FBB14B7DF0
-:107B7000FDEA6EF41F76F8539FD39CEE63FBF92663
-:107B8000FF111DF8AD9E50F907B9D019BF59FAC3BE
-:107B90003A9FE0AE27B6F48992CDD65837BF221F60
-:107BA000F480CCEB93643DA4437D6579E634F4FB2B
-:107BB0009EF432BD271DBCF20638A7A1FE2BCB0BCD
-:107BC000EDF146319ED45340DA815FE56098D8F3F9
-:107BD000BF963E6869D0F0FAC4D4711520274F4C87
-:107BE0001D5EA153193834E9C75D90673AB787C95C
-:107BF000EFB9C3B7E1F9C773268B37015B615CB29C
-:107C0000F3113CAFFBB81C7910EB6AA13E8282B441
-:107C10002DDB59BF55CCF16272FDD4ACB0E79B1B94
-:107C200058FC58BD7039C6B554AEC73DD15BF1DCC8
-:107C30008687DA32385FA911D364DF3B6078D00AD7
-:107C40009DDFC3502F4CC2F74D2F8B1F59F522EEED
-:107C5000BA100B9E191C9EBEE7329CF4B0F65F165C
-:107C60001DACF7EB8470BEDE0FDFD45C9048C2160B
-:107C7000FFE8ADEF56F1FE59A88BCF823A9E68FC23
-:107C8000EA22908304EE8FBCFE3A42F8F795904FBB
-:107C900083728FBD0E3DC35517DF475E0C67DB5DFA
-:107CA00017B11E9883D7F1613DAB4CBE29507A9F26
-:107CB000C9F8ED0CF06B6BA87AD02040249B3ACC2D
-:107CC0007F96FBFBF28B7787471A363E170CC73E31
-:107CD000A1FAC0428C23D4ECF763BD7F35E8BFC95D
-:107CE000706EC0ECF238CE0B843BA13E4F39C0C65B
-:107CF0007B12E0A1F7FFA85715C0BA8FC3FE270F6C
-:107D0000EC495462875E0E231E62DEF031A2337DA1
-:107D100026539E88655BFAAC3A061B865D2A71F88D
-:107D20004BBB7CBCEDAB8EC54A7BEB3F8E6BFF0F34
-:107D3000F59B55DF715CFB0FF48776A9F14ED07788
-:107D4000E60B1E03EC177D1FCFEF9A2B4BD00EC412
-:107D50008AC808C0C32BD92AEAB9D8F39E7DA0E708
-:107D6000666BD13735DBBEE14CF61BA361FF956234
-:107D70003CD331DEA8A18D47E7EF00BC5ACF5FC9E5
-:107D8000DE85E716E97B06E60D0B0F8F5E43DBC34E
-:107D90005FF0E0B9216BBFE9E6CB7C2E5F2DAEF33F
-:107DA000802AC89B1FF46D2DCA9927E8CC8359728D
-:107DB000A75E98E0C8073C097696D24F95A310A21B
-:107DC000A4CF4BF1B9C9F9AC85D723A49F2727CD00
-:107DD0003C57A03CA79F67069777C2E558D693DF2C
-:107DE00085E9E7DCA03B4FE2D653D6D5D253DFE29C
-:107DF000FC2993E8153E3ACFBA44FB3C1FBE1D9DBB
-:107E0000047EF0071A3B0755D2F6D0CB609EBFE93F
-:107E100009DFEF9D8EE7BEFEC99B37747958E923D1
-:107E2000BC2EB38F1E62FED5ADCC5FAD9B3F15FD62
-:107E3000BBBAED6374FB3945F7B5EA4286430F0DD3
-:107E4000F31AFC7B7B26EAA3AA0B017CFED9CDE7C3
-:107E5000759C5FE93B9F1F9F5BF3DDE5D2B38726EF
-:107E6000FD74179C73AFFBBE227A6CF3D47D9FD751
-:107E7000FF7BA9DE75CA7B18E45D2E22C9FA2ED0DD
-:107E80000FDB54AB1D6E9E330BFC5A9B7E2803FF09
-:107E9000ABF77DF8CEDD361FEF6F56A6EE9FE1EA19
-:107EA0003FC61A7F21F677C393D43FB01FA3FDE5E9
-:107EB0003F7B2CF8507F3D24BAC6CBB1E6BF11C73B
-:107EC000B3FCEE8BDADA574D19F8345E0EFBA79E41
-:107ED000DB8801DF9F785C0EF94276BED518BF566D
-:107EE0005DB8D441EF5EBC8F73DC7FAF21E8A8D7CB
-:107EF000BD235A8775DA1779FCA98A7AE6F8DE9EDF
-:107F0000918E3ADDBFC1F149E1B83A0D1CD77CC171
-:107F1000701439E4B3178E62C7FD4F0AC7428DE96A
-:107F2000AFE5FC3A5767E766E71A42A889DE9A4B45
-:107F3000EF7B29AF7F995E357A9D2B13D38FDF4579
-:107F40004DB0FEB40DFBFB1BFE7CEFBBD762A22A3B
-:107F5000E8A82B90789DB75BEFC0396F56EFA63934
-:107F6000BE0F675D7D12ABD774DFFFD0C7F0F28D17
-:107F7000CBAB09F8D3D4574F796E6D975FE0DFFB39
-:107F80000C8A8E38376F5B75BE9F155C72069BEF4F
-:107F90001B975F4F20AE2BE7A6FEBEDD413F83BFA0
-:107FA000450B639D784CEFFFBB349F149EE14978ED
-:107FB000AE413C4969F0546BC1A3B3BC604BF0F3D4
-:107FC00081A724C3A25BFFF8D9CAE126172E413E40
-:107FD00092389D5A60FF96A2BF95FF68D13E5FF828
-:107FE000C383A4EF73195F0C7D170D92BEC55C0EA1
-:107FF0005AF4CF179E5B0709CF7516BF05C348AF6C
-:10800000CF0B9EAF0C129E6316BD8CCF173FAD49B0
-:10801000FEEF1F9EBF70B8F333581CA4A5849D27A4
-:10802000F14991078B8481E5C257ECDC676B853E93
-:10803000679DCDBBCEBAAF74EBFC355F673A795A1A
-:10804000A924F2807EC71A583CE00DBE3FF9755551
-:108050005326C6E75DF3B404F765F617B7F9EF5595
-:10806000CE73B903C9F1A40C96FFB931EA7C6FF95C
-:108070008A0C571D9989FD2CFCA51BEFAF056F617C
-:1080800048620E026F145F5945FDEC1B3E6B7CA5E8
-:1080900093BBA1E22BA60F0D5F03C9FB5786882F68
-:1080A0004B5EFF5AF1950FF89AFE37FE1A2CBE165A
-:1080B000FD4D1E8784AF5B872A8FDCAFFD6BC5D774
-:1080C00060E5D1BD6FA3FBBB507FDF17F8ACF1E7D4
-:1080D0009EFFD3E2D11A6F659A7D5E3A7C0E0487CB
-:1080E00075FDD03748BCBAF79F5F345E5DF37F6A99
-:1080F000BCF2F1868CD701E0B0AEF220E5DBF2EB0A
-:10810000DAD4D4DF111D97C9BEE3365EA83D321F15
-:10811000F2C77F27617EFAC89E391BECF540E33237
-:1081200099BF7DA472F606889F9E8B6460EDD9513D
-:1081300031F4F36990575EC4DE738F7F84E3CB9391
-:10814000996DC57FF380AE47238BFB954752695BE2
-:1081500017E68D6CF495FAE2FB0831B64F833CC408
-:1081600082D47058744E37EF50E97B34F2F890F4B3
-:10817000CF40EBFD0FFF9841EA9F04F6CB25C9BF26
-:10818000BB7319E0B34D64F570C7E156017CD78D20
-:1081900060A7E52BF2F7029DEECE64F9C30ED5D8A9
-:1081A00000F913CFE2050F6452BA1D5D9A2DD8CFA6
-:1081B0005FCEC964FBAF19AB52EFBB16723EE87DD0
-:1081C0005F20E353F07798F75BBA8A7D7F8CC8E134
-:1081D000518B6CE74ED7BB9EF7A1476600E1389AFA
-:1081E000E6DCFF02FEFEF225FDBF4F6AD9F77D28CF
-:1081F000DF8DB29F7B4DF219978F33FEE8D24C7A18
-:108200007D43887EE73EE0A3097E766E4826455092
-:108210007F658D932B934E95E2FD5DC5180579CD55
-:1082200014E3DC9C393DFD38E9F06AADC79A074498
-:1082300011BED333576371C46961426641FCD013E8
-:10824000BA9BE50F191FE4F03AC499B5198946D8CD
-:10825000F7CA749D36783BFEEFECFF06CF3B8E8865
-:108260003A9E6F77E16120FDD094C9F2C9B952748A
-:108270009317F226AB8594DFB1DB98C9FEDED1A45B
-:10828000CC64BD14CE336E675481EF5F2C9359FEDE
-:108290008B90E8A885B6F927717E73BF972BB17ACA
-:1082A00023F22693E7B67DEB46A5929F5F70399D3A
-:1082B0009459E2A8735C12B95B01F95CB260A162E7
-:1082C000F8E1B981E32FE570B4A9D15153FCBD7831
-:1082D0004AAB87387E3A8E459BE0BB1FABEB05ACC3
-:1082E0001328DDC8F86EF5C683E2067ADDCBE56FAC
-:1082F00021D0C036DE77395DDBF6F94603FC6DC967
-:10830000FC0D1D98C271F36E82F99027B79F6E81A4
-:108310007C48B74078FEE4C64AA86BE8E6F56D2FC6
-:10832000D3E78D80BF397928DFE3367E5807FAB965
-:108330004325785EE6775B3C09384F60F14B524F3E
-:108340006C3CDF00F5C38FA89D13816FF29A6AEF32
-:108350004B953F7D89D3E18FFE48562A3FD0BA5ACC
-:10836000FADCEAB748369454FD1757BAEC1A877B03
-:1083700098A7F30C4991C74CF261A27F3FED975C3F
-:108380008FFFC295E75D722C759CF1579C7FDB12C5
-:1083900015EBD16E991E3C8762C163E12BD76478DF
-:1083A0005AB64472E8DBD50B325C7E0FC3EB0D1E70
-:1083B000E35158C723FB7E3A11CF51B9EC834F8A62
-:1083C000AAF0FC0ED2A9809E785F32F0FA4683F3C1
-:1083D000EFBCBC41A2DBA783FDAC9752CAD51F39C5
-:1083E000FFBCB1E296A5087F4CD201FE13AB865DBF
-:1083F0005F06FA65851282EFA69F88DD9B799B6DEB
-:10840000FD49BFC605D7AFAB6EE9D76E2D5FE1A4BE
-:108410005B9BCAFC02F33A268777521E9D85FCD5EA
-:10842000BD7D269DFF482267CA56D69DC0DF995A5A
-:10843000CC7F7F5F8CEE9849F5CD2991E549CCAF93
-:1084400030BDB16467A41952A7A7EAAF78A99BF61B
-:10845000F30618DFFDB6BE7FFBE8E6A7713B9DFE85
-:10846000DE8C634485F7A375A9EDC1B7F50CFEF763
-:10847000C442A341BFDCB43175BFFF05CC4CE13928
-:10848000F517A92A557CF22A9DC1BB3A92FAFDAB99
-:10849000F44CF61CEC520A3C9F0B64703DA78F060F
-:1084A0003DBD3A0DBC1F060208EF3BCDF7DF04755A
-:1084B00020EFBBBE03FF4E80F1C5C100E3EF53FBCD
-:1084C000562A7940A71641077E783B3B3401F86D68
-:1084D0004DEC049E7739C0F1FCA62F3225301DE407
-:1084E00065D1DC3C4A978E55242418E9F5FF9501A7
-:1084F000E637E4F2782DB57FEF82FDA3AFBE8BFEA9
-:10850000871C1E7DE34456020575E0A744731DD603
-:1085100019EEF3B1BA52129A6EF7E3BFCCE138B557
-:108520007F68F45E1A71F9417DFCBF7835CEBB3FA0
-:108530004387BA94239552E7B514C893FB33F0FBF5
-:10854000B86EB94837FF50FDC053FB87E6070EB43D
-:10855000EE0D81A241F981E72A1FD9310DE4488D42
-:108560004F4AA57F2D3D7D94C7DFDDFC635DBFCA0B
-:10857000F9E8FD44FF70DDB1DB09CF4DB54E782C35
-:1085800079793FD1E45B0378229D13ED7E299933FD
-:108590007D003BCBF253E9E0DCEED213C07940879B
-:1085A0003BB9BEF96DFD23013B1DDCEB3F25F2FD20
-:1085B000C1A3AC2E776C644D459ED1CB9FDFFA9C56
-:1085C000F8D2B233EE71FEB3F3A165E706E2C3DC85
-:1085D00034799C4970D099BEBF46D655C8D74F0A4A
-:1085E00018AC4DF47970548B94F1BA51628C86F3C7
-:1085F0005FA7F6F9F0EF43995B3D89B15404DEDFE4
-:1086000077F504FB7A7EC5F974F5926CFCFCC4FB2B
-:1086100062687E3ED69D49F81DB7378EE5CC83F65D
-:10862000238745D0D0E4A6BA3512ACEF8D00DB77B6
-:10863000AEDEF83AFA8343E5F3D5B54EFB7F155F1E
-:1086400047D2CF927BA601FFA4C3C36B1C0F4B2361
-:108650000BE7827EBE65A380FAF627300E5DC82D3B
-:108660007218F5368931FB48348A0F6A424EC022AF
-:10867000001FFFC0BF5B254754FB39B9DBB6DD3FA8
-:1086800017FC43B7BCACC8627C5C91C5ECC29BBE16
-:10869000E81F40DF5BFAF96DA1F6603EEDB231A054
-:1086A0005BDF094639B5D6B391C345FDB467F1FB2D
-:1086B000C57C7DA4C7C56F62BCFAC780FF0A0DFDEB
-:1086C000029F87EA7DA88B7EDC877554965C59FEF5
-:1086D0008EFBFD6572D4E13766661539FC77B71FEE
-:1086E000F2377B91BAFF15595FACBDB836EBB3B129
-:1086F00017C3389FB9ED4652AE5BD8799013C73E89
-:108700009A9B4AAE239F100EB73CBFBFCFC7BE9BFC
-:108710007C4D26EA9DDEFD547E02F6CB6EB980FDCF
-:10872000147CF7E3917D3F9B0875BD27B6DF7F532F
-:108730002A7ACED299DF44BAF31DF1BCB50182F595
-:10874000DF84CEF7846D7CEBBDA4BC0C10BF5CB69F
-:10875000F24ADC4FBEB1F2EAD16B4AFBEE2BFAF4DF
-:1087600017A2FFB014E66DE4FBE91D9EAA7DA9F6F1
-:10877000811CAF7DE3C44EFF7EE9C6F266D8526F1E
-:10878000CAB8E64BD114F327F7351B53C7E31EE4F1
-:108790007A2AB9AF31E9BE86E2A37B9514289BD62D
-:1087A000BBAFE9363F9F7DCDEF48CFCF67A2FCA797
-:1087B00086EF7B167FA9D11D5752F84ED1FD8F0948
-:1087C000F223D2F7805FBE957ABFF6387FEF771B32
-:1087D00087A8AF8E39F733E9E4EF7B9F91FCB5A909
-:1087E0003DA3400FFC6EEFC76FDD0FEBD9EB437C71
-:1087F000BBC789E812DF5FF8906F2DFBDCA132FD6B
-:10880000FFBBBF1B817F37DB2D1F84C4AFBF8A3EF8
-:108810003FBE4F9C02DF596CDB9751956A9FB35E58
-:1088200017787CC919EF21DCBF5BCAF94DDFF774FB
-:10883000AD3D1EFD26D757561CE07F67313BBB641C
-:10884000C14215E23DB725E34D04372BFA65857B20
-:10885000E1FB17BFE4E7B9CCB59929CFC7FD86E3A3
-:1088600077A038C48A55CE38C19205FDDB9B938929
-:10887000D47559163FA79B6FA8F6A52D31B4BCD867
-:1088800040EB1CA10FCEBE2C25B55F8278C73212FB
-:1088900052E0BA84D44EFC3145E5C9DD8B119E5FB0
-:1088A0005A7FFFF8E37B27DAFD98FF0F11FE85A1C1
-:1088B00000800000000000001F8B08000000000086
-:1088C000000BDD7D0B7854459670DDBEFD4AD24924
-:1088D0003A9DEEBC091D020818620742001FD02114
-:1088E0004482B2DA810041519A87184948A2E2CA0B
-:1088F000FEBA438720467466C2AA8CBFE3B80D82D5
-:10890000EB286AA2D1418CD8A0F8D8D59DA0AE8B17
-:10891000B3E846C7415E4322A32BB3CB0CFF39A774
-:10892000AAD2F7DE744370C7FDF6FBE338D7BAB7B7
-:108930009EE77D4E9DAAB63915C63C8C7D5B73FBC8
-:108940005F4D628CFDABB579BCD3C1D859FC9B1E81
-:108950007DFECB3AC6221731F6E13A3B8BD8A01CFC
-:1089600036558563D4FB53AA8931E8E85FE1C14AF3
-:10897000190B2D50C33B94C1F5B2705CACB7785E57
-:108980006A30463FF2B9A04665113BA3BFB3F06F12
-:10899000CD9C245DF922A753F4D39A182C62EC885D
-:1089A0001CF7513EEE91307F2FFBBB488C7B247C23
-:1089B000EE716F7E04C61D131DE78666FDB8BD2CE3
-:1089C000B48AB9619C70A2734701C3FF8CD8264456
-:1089D000DBEF759A08AEEC48A689653076876C1B8C
-:1089E00067BC0F057C8DF56BCC7E8B161FB7A77A05
-:1089F00069FEB25C33473F4F6F8A938FCB9CF981FE
-:108A000064C68E6E4BF4133CA6258747C13C2BED04
-:108A10002CE480793EF8E4C59FB1118C2D13F8AF9A
-:108A2000097C6D41781C35F5DF938CEBFAC0E4DCF2
-:108A30000143951DF45BB4F0BB2B85C3EFE8F673DF
-:108A4000C3EFAE143ECF7955FAF9CD3F98A82B1B52
-:108A5000D7FBEF7F7BEF04ECF7DFFFF63B8BB6FF36
-:108A600005A77359243D5A5E52ABF8C34583C77DB1
-:108A700029D53A24B8BF6480E392D3F9D4BF5B65AB
-:108A8000CD1D31D655EEB453FDF981728B07E0B997
-:108A9000FC6EC5A74017339CBC9FE566E6EF80F9E6
-:108AA00030B337BF1AE0EE696DBE2310A39FFF23DA
-:108AB000E0FD8D23901A8BCFE4F363410FB2DE0209
-:108AC00073D012ABFEC25A3D7C7B19AB8A35FF1FB7
-:108AD0003B395F0E951EE5F8C6FA439DC7DD820E51
-:108AE000D36D91DF33155E9C807ECA2E605C437D22
-:108AF000E3B8F73BF5F8338E7FF4CF6A5D2C38BCD2
-:108B000026F83F1800FA89F93D99BE7FC0DA1B7735
-:108B1000137F27F9762018B62FFF09A09DAD9C7D05
-:108B2000C75BF09A25A614D0FA16070E5412BB9D07
-:108B300079B018F1FE6DD5833F2985A91DB5065B77
-:108B400093A1C1D1F58A2FE41D3CCE07B84E90A366
-:108B50001FA13CBD08FB639C6E67C2FF65333646B0
-:108B6000F5D7A3506177D9BC3B347CEB5EFBDD3A93
-:108B700056CCD853D6C0FA64783FFAEEAFD73094CB
-:108B8000792C4CF3FEC2E2BB85E0CD18F1FDA16D5E
-:108B90008EAD9BA05E6A0A97938CF9F203E335725F
-:108BA000C2ECA4F250F1F3611CFC5CA89C92EB8C2B
-:108BB000370E409EE6377786A34D4965ACCBEABDBC
-:108BC00009D7D33F3BC1B90D5038D7EABF1AE1F3FB
-:108BD000C10193A9A580BA35239DCEE343B0826B32
-:108BE0000AEE1F578AF2C7E24F80A954431B36157D
-:108BF000E868862384FD957E38E719C4CF83B536AF
-:108C0000AF8AFD4DF37EAA4279EE5536EF7AE8AF92
-:108C1000AC67C45E37F43F7F8EE264D07EE6EC51F1
-:108C20009E5E585FD25AE8270747B8B7AAC2CCD889
-:108C3000D3F89F97323E6180C55C45965F6C9B0977
-:108C4000F2609CA7CBE40050AF4C7BB1CD0EFDDEB3
-:108C5000D312C872A6C1D236DFD7661FC658468661
-:108C6000BF67BA8FB1D99BEFAFB25F01EB7C54B451
-:108C70000F3DD0E6CF63EC5553B04081EFCD9B77ED
-:108C80005499015EEE4239FE2B6DFECB613D57DDFE
-:108C9000B2630DF4BF25ED9FAACC38EFC572FC9EE0
-:108CA000AA8A9130FFCB65F95FEC385F77926C0F41
-:108CB000F39DC298654474FEE62C18DF25CB9F54C3
-:108CC000CD84F13F2E6FAE30C3F8C7D2FEBDAD6884
-:108CD0002C6393E7943BFD50EEDBFC1F5549809FCE
-:108CE0002E06740AE53F6C3E4DF377AB26DE7FE837
-:108CF0008F34BFB2C5A171F85D617F6AAB8275AF79
-:108D0000B6F7BE85E4DAB43664CF4091A4703AB1C8
-:108D10005B9AFDB9003BCBAEF2482E4DA79DD36BBD
-:108D20005E643CEAB181F218288FD794B378B96BAE
-:108D30003D5B124BDE76BAB81EEE4A8CFDBD228D2D
-:108D4000CB03801BE993D483CCBF33865E1997E6AF
-:108D5000A07EF627B290DD15E5B76B8187A7005F8F
-:108D6000323B9FA7EC6790FE48E3729F85AE75216A
-:108D7000DFCCC12E60E9853E258474CD9A93C2A3D1
-:108D8000907658C43C0FF5876AA2F97A5465493544
-:108D9000F49791C8829DF0F4A4332A437B7FA723E4
-:108DA000DADF7B82EE2B0B03DBB1BFCACCEC92D6B1
-:108DB00082683F30EF0DF609BA799BA7B8F0FBDC6B
-:108DC000925B8B34F02CE2EB003AA07630CC33D3BC
-:108DD000810FBA7AC68DD804F3FB06E5AE27BAAE8A
-:108DE000B29EB91606F5B6B8843CF1F2F69E0A2E8C
-:108DF0007FFA6F4D0A6F43FEB4FB4A104FB2DD0D90
-:108E000002EE15F7CEF919D66BE8B1301BD45BD35F
-:108E1000599EC9CEA1171B4E5FC6C213356573C4D8
-:108E20008A72A7E1F4347A5F71EF7B56E453ECC7A2
-:108E30000BEB5A93E0CFF421DC5A63E39FB1169A0F
-:108E400047C3E934169AA87DCFE114EDDF4DDFCF9B
-:108E5000B7AE687F2A0BA79FAB3F2B7D1F80BB5906
-:108E6000C0DD1A7B9E1B04FD20BC4D1AFA9A2FE828
-:108E70000DA49F1FE5E1A16B8AB6A1BC8F8EBB9E9E
-:108E8000FAEF32031ED10EEC49F4A25D5C66E6F205
-:108E9000B3ACC7E50C2951FA907421F1DAE56A2EDA
-:108EA000A7F5562BCE6D0583E775BF9C97D0A79984
-:108EB0008B83EA52CDFC243F40FF5DA2FFD229C440
-:108EC0003FBFE0F4027C7303F22FDA2DB80E5F642B
-:108ED000FCDCE4C1F33F0DE4854FC02387FF5F391D
-:108EE000C2A80724DC06C33FF73CF8CCA7EF653DDA
-:108EF000FBACB8CE86387CFB802B85DA651E8CA453
-:108F000078A1DE19617774754C4CB80CF9628E89C2
-:108F1000A108C375A3BD5A36206FAF7C7706C8DBA6
-:108F2000CC8132C85B2FE26140FE46ECF668FD1F43
-:108F3000B9AE9CBD01E4B5DB06F82F223BD4CE349C
-:108F4000FEC4EE346EBF4D09B29876CBDFB9927590
-:108F500072ECFFAEAD60BF85F599D3B8DE9FD21B32
-:108F600052102F92AF8D72EA13C18F1F8BE7FFBC97
-:108F70009C52CE23A7AA859CE2EFF783998FF53206
-:108F80003222E315D089CBDE9D380AFD99DBB2543D
-:108F9000EF97C057F314DFB067A1DF1ABBF79E64E9
-:108FA0006F944E6A98DDEB40B883D17416F5FE9C41
-:108FB000042AE31FDA25A7DA154E87CC9B5A333EE5
-:108FC000BE1C92F3B82DCB4AE32DBB6F546A503BC5
-:108FD0003FA127AEB5459E658583F95C9661FEABE2
-:108FE0004DAAE6BB83EBB3B1C9FE6FD2D00E555884
-:108FF0002DCDC7602F3904DF19EDA587B16F0FFDA7
-:109000002F62233E3691739AD9660B33DE24847E19
-:109010006A660713FC1A313568E8C0EECAA3792CDA
-:109020005E081F2F01A6B4BF71C9971A3E7A07E7E1
-:10903000437A213209F934C1C57476DE623590A7CE
-:10904000A0DD9A69F3A19C013C111CF62730730244
-:109050008CFB363C116F95EAAD7B2D6EA403C5D712
-:109060004AD0DF2AFC5616417D73EDF424B25BD959
-:1090700099DB4756033C3C499C6EA11FBBE8C74E99
-:109080007422E4DEAFF3C76E43FD24E5A7C4033BBF
-:10909000A3527FF2FB7EA53ACF09E5FD9E8B4A5A8B
-:1090A00015BDFD83F650D47E4ABF6F16F0E3E4AAE7
-:1090B0008E880958A825E4997D27D4AF4CE26B1E11
-:1090C000E9E27A707F41484DC1FE46C13AE0D55B86
-:1090D00089C1A26647141F60E304117F1956783ACC
-:1090E000387FE0739F8BF3D99C748E942DE9BC9CE0
-:1090F00091C2EB1BE9ED49F17D95C2F1BBA99CCB77
-:109100000963BDE92EDEDF6A7BA82A6384D6BE0A26
-:1091100030A44333E37696DF25E8A482C3ABE2DED6
-:10912000C5A9A837BFED999FCA8AA272F41E25E887
-:10913000F441FD7B2C819F52BCE35F5486FE883551
-:109140002DE87441BDF4A4D8FEF24D621EE9E84F4B
-:1091500043BD9F087FC772FA62F2B317BAB83C4B9F
-:10916000C9AA21798E30F4A29FC2FA434E0DFE5255
-:10917000A798747E83E57431B5BF70BBA1248EDDE2
-:1091800050AAB31BE4B846FBE1D37559347FD9FE2E
-:1091900086AC8F2A99A6FE8DACF71EECEFC635B9CA
-:1091A000BA38513CBBE32E011FB4134231E765D5F9
-:1091B000BDFF14FCC49076FC237CFCE8B849C06871
-:1091C000D171FD2EFFDD2EE2A7CB9D872F864702B2
-:1091D000BC5749DF90DC07BDE4DFEA207D5485F20F
-:1091E0005AFA47C8F7CE54A4F1F20DAE491AFD2839
-:1091F000DA19E5D09F453CE3CF4E6EFFA51E94F6ED
-:1092000062A25751A2FA66B0BE127AC62017CF6783
-:109210005F03BD86B4FADFD8EF53AEEF6B5716C6C7
-:10922000A18FD1FF237665D9E541753CCACD2A854A
-:109230008D82C7E4997A3DDFEDE2FE47B72B49A75F
-:10924000E7E72ED6D78B60BD49F84C1A92BFA2D55E
-:10925000438A8AF28EF7D728E8A1E0D807562FC8AC
-:10926000DFFF1276D017E9FEB791AE3624A614A31D
-:109270007ED8FAA78A315B61DEFDEF5B7CDBB0BB99
-:109280005D9C3ECA17AD6935C37B4B87E2B4318D17
-:10929000DE5ADB79C90A58EF0792FEDD7C1D0DEE20
-:1092A0008875248C9BD3C0C7CFEBD8AB9835F22DF3
-:1092B000AF8ED73BE4B2E8F45EAF287F26FD0F16F1
-:1092C0006EA92CC5FA7EF326107D391D0AC583735D
-:1092D0009A01004007393EDEBFC31756961745D79F
-:1092E000D966AA2E42BDD09691E443BD30D61D3C2E
-:1092F0008CF4DF70281241304D3ED46346FBAEC281
-:10930000EDFF0ADFCB757A55670ECAD5A4437C7E84
-:10931000ED067A070B59D0F9362E6F55F60E437CC1
-:10932000A0EC80F132D68F21BD24EB67B8849EC8B3
-:1093300060C117C8AE626D8CF0C5681D19EB47930C
-:109340007D2FF119B5A3C64E403BAAF0818879194B
-:10935000B4DBFD58ECF8BC45E81158074BF744D78F
-:10936000118F2FA41E93F52C71FC6849EF4955B15C
-:10937000ED53D000F4BD7C91FB3A5C77C3062BB370
-:109380002951F857B803E9389F9C8EAD0AC246D2DE
-:10939000D706D7D34A2EACEFF65B985365F1E7DBDF
-:1093A000B0F6C54B5668FC2DE89FF0B1D5CAEAB4BB
-:1093B000FA54FA1317A773FD73A73B3002C76DDC8D
-:1093C000B5D98AF8BD65FBE7566DBC7BD03A8608F7
-:1093D0002FA58EFB290DB5F630AEB37C9199F057D1
-:1093E000BFC11A4679D4B0B33362427BFA6EE6430A
-:1093F0007E6FE8E87C2B07E092DBE09FA47AA3FD78
-:10940000E53684159C4F0610610FF979112BEA6738
-:10941000235DA33D8C76C95B099CDF4F943B420AD8
-:10942000C0EF8425D880F54E6427F942055178BFF6
-:10943000DD39EB1D05583AF9055B049F6DA66D59A2
-:1094400076A8D736CEEA433AAA700767A5037C5CB4
-:10945000E64017B64F7327FB5AA0ADD7C626907EBD
-:109460001E221C261BE861F2DD9C4FFE263D45DADC
-:109470007B13500E2D4D4F96F612C9A7B72C7C1DAD
-:109480001B189FEF3E977F01D1ABD345E3E63444F1
-:1094900014B4F78DE346E9C9BFF842E81BEC3C2B56
-:1094A000CAF57A2167CA176D577EABA1837A3064FB
-:1094B000905E72766E55D00F84EF2D956EAACF6CAC
-:1094C000286776F2FD887AF87E9346AEC875C49018
-:1094D0002FB7217C1D877ADEE4F22542F427E76B63
-:1094E000C4E78FD2B91D77259805F4DE1A1AE385F3
-:1094F000FEDE1A9148FD497E37F2E78F049DE7D4DE
-:109500006E57306EE04EE276A39C9FACF745FA8C26
-:10951000F5389FC9553D0487D5B566C29B9C4FA5BC
-:10952000353012FDAF76D1DFBE859F597BA1FCD0CF
-:10953000AF0E103DAE6E57FCE417B41FB0CEC7F8A7
-:109540005CE8972AC663AFE62609DBF2D201D22394
-:109550005777F138C1EAAE4EF37247944E0B8EED59
-:10956000BB11E96C75878D2528883FBE5E239D82DF
-:109570007C21BA67212BED67817C0C913C65C1028F
-:10958000F447A4FCDD27EC4BE6E0EF9F10F396FDDB
-:1095900046E56602D17BC1B109FBEC00CFD53EC5E3
-:1095A00007A612D8DBBC1EF41F21F9CBD808F4CBD8
-:1095B00064FF46F8FD5AC8D518787E3E3D861E9158
-:1095C0007AB5E0F1190C9F127F660177D9EF9E748E
-:1095D000BE9FB527DD4CFD6F28E7F1EB0D16AE3FC2
-:1095E00036B4D8C3C8D76FA75DF98E520C707259C4
-:1095F00023F8DC6F5AD680DFF7E7F079B499D68F7D
-:1096000069E6FAEBF574C25F0AE3F289CBA3875EE1
-:10961000E4F2A421E4203FB12158B382F61FDC0913
-:109620003EB4F759F04DEBFCE4283D18F1EB7D61B9
-:10963000AFD50BDFAFEEE07C10855B5847B720E776
-:1096400008EFFB5C723F2258807005FFBD05E30CFC
-:10965000D27F4F591C08257B07F36BBAF0DF27092F
-:10966000FFDD32C5FE17F5DFEBD7FE5336965765A3
-:10967000BD4B4FC92FE027EAF8EA84F0DB0E08BCA7
-:10968000FF41D04B7D6907F143FD97CDC4478E2A3A
-:109690002E4F1C87F47290B11F8BF53F40FD54266E
-:1096A000755CA9A23FFCF78AB395C59FF7CD4AF335
-:1096B0003F4F45BC74AAB42FC5CE80555F06704D90
-:1096C000103010F52C6E1EF73EF1142002F9D2DC9A
-:1096D0006C3D97FD7BBE7E59E42305F15D2F607DD7
-:1096E0006267C5D4DF613CF1A954DF2858FAF19DC7
-:1096F000F3FEE677D0FEC4F6E93ED4D3EED600D131
-:109700004FBF27C1877143B70A962DD0434BC71B64
-:109710002997E1BED833974C40B999E7E67C79ECBC
-:1097200045752DC267FD3F3C3F0DBFD7879574B48B
-:109730001B4F3CF5F77F46BD58B7BD093D0DD6FA26
-:10974000CCEB64879BC25BF9FBA752C9BE3CFAC451
-:10975000E66908F7D68E56FA7EEC89AD54DEF70F2F
-:10976000CFEFF94FB43702293EAC77ECC5CD3FFAC5
-:109770004FA4F39A141FAEA32168E6FBB692BE8DE8
-:1097800072AB732FF1A9A497AB51EF229C6AB9FC7D
-:1097900091F4FC85D8575A56E1684379F6C5A6E49A
-:1097A000BA58F144BF582FC65C488ED52A144F6B67
-:1097B00003AAC1B8465B229B82CFA4A2883517C6F4
-:1097C00059B8B8731AD93DA1CF5762FD79BB12D8E9
-:1097D000268ABF61F016EC7F2275C6C683183C0C42
-:1097E0007E32F4BEFD2CD8D71F5B309643FDE9ECEA
-:1097F000FF796DEFFE11E5688DBD77AFC71B7DDF8B
-:1098000026E234509FF44ED99AD8F1D02AB743D0EB
-:109810002DD79B395DD5795E921336DF288D5D3A61
-:10982000EC60F32610432CA7AEE74A5CC75563965D
-:109830004E24BAC0381FEA9F9083FA5F8D714AE0C8
-:10984000B3456ECE4F194EE6BE14C6AF3433B703E0
-:109850009F8C7D642139B283FA05FB83EC2AEFEB00
-:109860000B77A03DB2C512CC9E84FDB409BDB59D59
-:10987000CF1BDA3B71BF14FA735E3A81FAE9B1B8D3
-:10988000A87D88B79FB5BD4589CE1728351FF51629
-:10989000F657EA403D13AA25FC78ADB4AE635825CF
-:1098A0009BD65D7CC3F828FF1AE33B28CF701FF8D6
-:1098B0004E77F96DEE49D1A78CFB18E1F9327E871E
-:1098C000757FEBF6D3933D95AED32BF1EC957D0BE5
-:1098D0004F72FDFBEAE7246F1A918E71FCE0973A14
-:1098E000FDBB5CD2F12B9F131D2FDFC5F56FE3AEDF
-:1098F000122BD2EDF1757EF65B30401BC53EEB16A8
-:10990000A57725C5795E497062FCEEA4D037F50FC6
-:109910007C7E18F74747ECCA26BFFEE42B09B5D872
-:10992000CF7E9389E0B97FDBC55B5B15ED3CB93F2A
-:10993000007630916A23D8A9DC0E5EB119FDB3D54B
-:1099400075CC87FCDF68A09FC65D07885EA41D5CA0
-:10995000F0F8DC15DCFE4CF025A0FF3693DBA30C01
-:10996000EC51AC9F3633DC6225FA2A2943FADAB788
-:1099700070CF46D4E38D339913FBDF32CCFF4A2EF0
-:10998000AD476198CFB2C5D23EC30CEDB7547A9DB6
-:10999000004980DB76B27BD918ABD0732BC85E6EE2
-:1099A000CCBADE477C669407AFB490DDD5E84DA411
-:1099B000F95CBD4BB98DDB230EC6E7AF107D5E1D94
-:1099C000BE2C8CFBCABF17F093703C69E9B911E15A
-:1099D00071F2252044F87EF54C4EAF69333B488E3A
-:1099E000BCFDCA2CD2E3922E935FB6913E77999D2F
-:1099F0008A8FF4DA3C9B16AFED16AE97D2849E297F
-:109A00007C80E33722F82922F440C46DD5C75B9CE3
-:109A1000A162D4BBBF17F8273182F25DC893D52B62
-:109A200022C44F0D3B797F6E9BBFE4760DFDBA2BB0
-:109A3000B85E94717FDC07A88E212F7EE7E6FAB12D
-:109A4000E0F1659BD15EBE0AF08E2A25678C90A35B
-:109A5000401708B79CBA00D1C155EE9B7D6A01ED55
-:109A60001F909FD8DF6265B1E23C47851CF5A407D3
-:109A70004A31DEECC94C263BC7A3969B12B05D89E8
-:109A8000E2DBE6A5FD4DB2F3FA3DD9BE6D3A7E0F9D
-:109A9000949AA0DE918C648EE7F0AFCD73C7231F3C
-:109AA0007AA59FAEB3FB06FBDBDC6E9CD31E2A4679
-:109AB0003F44EE5F4838845B126BB5F2B34FC02170
-:109AC0003C96C7F3C1BE7750FCDA09E3A05FBFED57
-:109AD000B227B85FDF4AE31F74F3784625AC0FED79
-:109AE000364F61600DD7A7C9BE58F0B853E079DF93
-:109AF000C21B4BD0AF6CAC71F890DF1E7A55594643
-:109B0000F48CC141F4B7832B080F0CF080FCC082A9
-:109B1000DC2F6D6C0E8463D37B35F15F23F29F42A3
-:109B2000F44EF176A0F730A777AEFFA4DF8FF2B145
-:109B30003AC67EA8942F8DD6DED148C7921F1AA7A9
-:109B4000F58E46B80D559E9CB400FF23FF001C9077
-:109B50007F24BF24EFE67CB2A9C55B8EDF37553288
-:109B600067AB461F19FD259C27FA9D52AE8F7507DE
-:109B70000A3D1807304536621E8594C38DBBEF1B26
-:109B80001D2BCF4DCA61BB99CB377B3829DCAAA1ED
-:109B90002FDCDB4B9E404FCADB495A1B3B2E52E663
-:109BA000718878FDD0F222325097A3BCD996144622
-:109BB0007925E344C67EC778145D3C46FA2DB8BFCC
-:109BC00080F5E77A38BD547AB89CB85E3CE5FC2550
-:109BD000FD7B4DC1CF319F289EFE92EDFE52712B31
-:109BE000398ED4A346FCCBFD115C4F7551FC7AED48
-:109BF0007BB97C32D2E372C1275E5C2BD47B4EEC06
-:109C0000670DC62FEF87D59A75F96F6DA6CEBA5836
-:109C1000F12FB9BFC11E320F29BF6EEF3A9E47F533
-:109C20009CC8A7658BCDBA7C2A87CFDB82F1D3197C
-:109C3000F6821295C6E571ACE469EC6BD4C3C5BB82
-:109C4000DAC7609E9227A0DF1FC9AC4DD4ED3F64F8
-:109C5000075DBA726E5D8EAEFEB0E611BAEFC3D785
-:109C60008ED37D2F084DD0950BDB2ED5D51FD53E3D
-:109C7000439F8FFBC855BAFA63C37375E54D2D1D1D
-:109C8000B588978B9FBA4ED76E86D9692E01B88E4C
-:109C9000EF58A6CF1333C033F5CF6A4C3A7CD2537A
-:109CA00040789D61D6E70B5FB24B0F0F4C8BC3FE24
-:109CB0008A99E86FDA9109E7CA632D66E66F7A65DB
-:109CC000FB82C1F4C0ECBDBE400C3F53D2B92C1B8B
-:109CD000F7B1A4FCB850FA8B374F497FF1BEC78368
-:109CE000DBBB1EB90FC3E16219804BADEF5C70B1F5
-:109CF0009C0F2E0CE092FCFDE162EC6F7D5223E59F
-:109D0000037F84058D7DDC2BF84896178452B91E9D
-:109D10000ACC3B8F1DCDE3C0411BDF9F347EB7676C
-:109D200070B9361AE640F019225F7F26F070281EBF
-:109D30005FAFFD7A7F26CAEF2A467EB3B3B9E56BE3
-:109D4000D45B4BCC1186F4FF9058CF169117FAC80C
-:109D50003A27F5F3A8D87F7C6C9D97DE3FBE6E0C4A
-:109D60003DC3EB7CF47EDBBA29F4DC0EF61C3E9F8F
-:109D70005C5745CFA7D605A8DED3EB6AE9B9735D7A
-:109D800090CF6B10BE5819D93981F498F1D2A52122
-:109D9000754878626A5E4C7D19B71F75F139F3C852
-:109DA000D71E5A34FB4D0DFF666524BB0F630EE3CF
-:109DB000643619F733CFD7FEBB75B5B3DF1C3574E6
-:109DC0003E92F4C4CEA48F8EC5D741913FF9BB8794
-:109DD000CF6E0A15C5875794CE62C3A9C67E3207D7
-:109DE0009DF562B41934ED0F1AF8B826981AD36E9F
-:109DF000A811F4596BE3FBEF8B0CFCFD92F8FE52BB
-:109E000006D7779FC49133576798A43F6FA1FDC0D1
-:109E1000417CF7932B62C1777F8657C7C78B820639
-:109E2000BC1AFAF9C4D23ECC1783CFCED78F5C9F31
-:109E3000B1DDC3195C6EBDF8FF297F7E725332F924
-:109E40000F08378F66FD9FDC94541B2B2EF35A06A8
-:109E5000DF0705EB9C15B8C8D40F59D1561CC3BCFD
-:109E60007C9F77A413E343320F203EBD9A298E4492
-:109E7000305407C315F0E1B51642FFE68171226642
-:109E80001CC7678AEA59CCA9619A731EEA607A8076
-:109E9000F6212BE5EFF4E6D0BEFF05D213531F1BCE
-:109EA00075AE7DBA41ED2F50CEECF881E58CE473B0
-:109EB00076E6C151B1F4642D8E7D29AC63CBD4FB21
-:109EC00049CE9CA7DF0B855FADDA4BFBD64386DF1F
-:109ED0002EF790E2526BED29C50CFCBAEF12F83365
-:109EE0003483F1F3589F2584D1CE3F20E6098EFFBD
-:109EF00025DCAF6E9E8CCF7FCE0A7C9801ED975902
-:109F0000B99F383EC3FF119613C53EB035D3BA1181
-:109F10009FCCC9D7718958C74693371FD7F1A5E29F
-:109F20001B8B7E8AD314F6E1338545C6F3BCBB7028
-:109F300010FDB3F48B13BDE8DF268E66AC87E2E13B
-:109F4000BE048C9B5993FAFF7124F2FBEB268C30F4
-:109F5000B2E79D7CBECF3F924BFB2AE801A17C2853
-:109F6000C6F730F54D688743FB6B59F018CEEFA864
-:109F7000D31E32C1BC8A677FE1C27CA8E7BB67D031
-:109F80003E42E4293564C5730B3D27FEEE6AE8EFD7
-:109F9000921E0BC59B2F612AC9F37A337B00F926E9
-:109FA0001E3C8FFF75ECFCAE2B32B9DC93795BC69F
-:109FB000EF79E2FBF13879C48E4CAE17647E8C45A4
-:109FC000E6C778FCE7CC8FB118F2632CE600C37DBE
-:109FD00060CB407ECC6246F931D08F363FE6F88CBC
-:109FE000D8F3708B79584E27C5E93785DE1F1F716E
-:109FF000EE755A4E27E8F2ACA3ED1DF43E5E7ECE20
-:10A000007831FEF138F9496307FACF66A1746D3BE8
-:10A010002F9FF7C03879F4DD62C8F3897EE7F93DF8
-:10A020001BD2389DECCD72BA9742D74B59AF05E998
-:10A030007489C36DC1F85180F93AE9DC8ED9D2DF59
-:10A040002BF96E04D6337F8176B609242DDAD94BED
-:10A05000D65ABEE8D5C8A96ABFBECCB0BE46EE6E21
-:10A06000CA6234DFC4716328AFEF14F3A63ACF217C
-:10A070003717DB55BB59B3DE4371EC865B05FC0E2D
-:10A0800065C786DF7599DCEE88771EE2D6CC14DDD5
-:10A0900039BDDB9DE7969708DF60BAB67F231EDCEB
-:10A0A000F4FD7C70F6E0E61AC6D1CA159EBFFF1714
-:10A0B00087779A3857C5CF05580C79E89BB2B8FC1A
-:10A0C0008BCE9BE7A17FE40CDC9E8972D1EC1DADA9
-:10A0D0003D07D065F6274D80E72121778C70D99D0B
-:10A0E000C9ED37E3BABB443E7DA2CA9A3B35F0378F
-:10A0F000AEF73941E7B2FE060BDFBF82BF801DF02D
-:10A100007203E372EFE1CC11222F3CCD8CF270315F
-:10A11000EF82DDE07C8BF693249C07C14FC0DD0805
-:10A12000C700F3DE8879DBE783674796FF6184CB5E
-:10A13000D203895694FF37DAFBF7A38FDADB63FA91
-:10A1400078243C3F778C3CBC9DE1FEDB9897F7C1BF
-:10A1500033658A8FE751B09964EF28A15CF5ECC5AF
-:10A1600043B77736A604C7207F7C29F2AEA53EDA36
-:10A1700098736C34E6CF7B5DE5ABB23C1477F7A700
-:10A18000231DBD66E374F408F404E5A63D63B7A29D
-:10A190009E79302B5887F5641E1FF3F78FC63C84D9
-:10A1A0000B8513FC59908ECE07A7273219E1E75093
-:10A1B0004A6C3AF94D1C3A31F2079D2F2BFDE1F81C
-:10A1C00043C253EE5BC8F9D565713A944F093763C2
-:10A1D000FE505D9649D4E3F9880F660508CE7DC32D
-:10A1E000BE3E9C00733F64C8F792CF93421E9D6FA2
-:10A1F000FD12DE3F941C3E94187B7EA6ACA1E1E7E5
-:10A20000879A5FBD9C5F71ECF965660D0D7E01D686
-:10A21000FF59DA0FA0C700CFF58867B6A19FE4E326
-:10A220002157EC79960D799E41CB0FA16F257DB317
-:10A23000D0D23ADAAFCF4A8CB95FBF00FC27F47FA7
-:10A240008CFBF6727F1EE407ADB7C6DE7F633AE291
-:10A250007DA65877068BA4E17EE61E1BC5FF8DEB1D
-:10A26000BF42D011C0AB82E035A79FE2188746C736
-:10A27000960B15C6FA6D7C9C78E70BAECE528674B1
-:10A28000BE80950629FE576E774454C0C36D021FE9
-:10A29000D6DC553EB40FCBB3DE3B88EB04F89F18F9
-:10A2A00080A7269FEFD8BA779C232DF1E576BDFADB
-:10A2B0004259738CF5043DC11BB3347E50FD53EFFE
-:10A2C0003A476AF0359EF59AF8F9E87E93CE2FCE9C
-:10A2D0006417E41757639F988FE00A903E40FD8013
-:10A2E0007A67E3EEA925884CB433309FA73F3991B4
-:10A2F000E4686BCEA563BC1A7886B2A47DA9C6B10A
-:10A300001BFF7BF9FF51BB49D1D9AFD1FECDF45E24
-:10A31000E2A7DCF18F31F111F4F8EF213DE6F26FA5
-:10A32000C4A7117EA17B2F4FA3F30508BFE9D1FE7F
-:10A3300006F01F07CF1D1E7F3BF6D720CED1283257
-:10A340008F6F205E61761EB647E13D54BC248A784B
-:10A350001AD80D8F211D586D821F9983CE874BBB54
-:10A360008519EC1B3686FBB73764BDF7478CF76C55
-:10A370004CE12CBBF14709E4072E519C565C37D8C1
-:10A380001F9FFE1CEA0759E4D3BBC83F9476469250
-:10A390007A3669E8F394FEF2F9F2A9F7A13D06F3E3
-:10A3A000996172D0FEE63E585F36C88D1956FE2C74
-:10A3B0009F055405FDCD50F3BA7B615EDFB2338952
-:10A3C00057C0F3A78CC361CD81DFB9D01F9D61B6A3
-:10A3D0001CD3CA2D63BCE38DAC6437E151C43BBED2
-:10A3E00065737E7D31C2E57217C1A5F8959999DA3A
-:10A3F00078CB40BC43AC635E682997A7063927E554
-:10A4000099C9CEEF11617EE6756650DC88C33DA424
-:10A41000303394AF90657452A07CB9409282ED6164
-:10A42000DD5788275B16CC423983693C381E787F1C
-:10A4300059F86C9DEAF3E273BA1230F3798479DE4D
-:10A44000216BCEC3FA267BAFCACFE7C10C32B0BDB9
-:10A450001C8F9793457943CDA91B6FF20E8E633005
-:10A460004732D9BD5631AFA34E47C804EF6D8EC8F1
-:10A4700051CA4F154F63BCE33B532884F9D977AADF
-:10A48000619A6F128B447A303E61071098288EF0E3
-:10A4900007E403F06E1A719E09CE5391BB18E6399A
-:10A4A000FA152CA71BF491C7B186F29E3D01B3416A
-:10A4B0000F0515E49BCC5AE37BBD7EB2B343741EFB
-:10A4C000488904B2CEA69F3F5E638CD35866701451
-:10A4D000F7DFC2EDDE8F13793B4917E9D95CFF3610
-:10A4E000BAAC8CF25D32EC76B4DB4F261FC12397F9
-:10A4F000A837DA506FD82D7E8287D41FABBB6E652C
-:10A50000889FC65DD50CE5E86F14BEFF19BA41A15E
-:10A510003C05796F436D117B1F5AB2A6EC1134CE06
-:10A52000FC7782373440B9E63D363E02F54AA6074D
-:10A530002AF17E96D6F1CCB71ECAAD09C1675FC2BB
-:10A54000F51C50A99F26712E963167FD4EE87FEBD2
-:10A5500075C37C9B704915FD1B310FA8FF3EE6C4F7
-:10A56000BC9141747A06D607F87F02CB30EFA6156E
-:10A57000C15FDC01F5B3DF633EAA23BEA32F82785F
-:10A5800053043DE0FBE9F0BE49D04D61B7C2F7EF9F
-:10A59000DD36CA9F600733895FE6DBF9384DDDE5BC
-:10A5A000D74E827915F64C24321E09F531BF093396
-:10A5B0000C787E1D237FD9587F24D6F752B48AE7C2
-:10A5C000D5E458E9FE2326E4DC6403BF5D16A57FCD
-:10A5D000FA5E22CA4D421FE9F804FB01FFDC5FC6A8
-:10A5E000B7F3A99D9BF3838FC93FCEB797B2E81FFE
-:10A5F000F65B111D87E4EF4CF16DFFA2D994D73DB6
-:10A60000D91CD98B7C7D9978968827F2B51DE0B846
-:10A61000D0DCBCDF03EB495BCB7C2D38CA626F2BEF
-:10A62000F657CA022AC2B9CC795F2BCE6FEAE20391
-:10A63000E9485F4F6617123D5D6EF715260089B435
-:10A640004EF1F99CF0AA76B14270995F6B0F63FEF0
-:10A65000DAFC81FB7A82050B806F160615718E3E3F
-:10A6600058B058138F95797D0B6CE047C7DA77CED9
-:10A67000E67A5CB66F12E74EE4F76DD90E9E5F99ED
-:10A680007D655336E557F07C67E0FBDBB22745E597
-:10A69000088C4BF928F398DF82EB9A27F856F2FDE5
-:10A6A0007CFFED64B7CE0FE8EDCFDF281CDFA145BE
-:10A6B0000AD9830B6BCF6D9FB664CBFDDE3C27C5FB
-:10A6C000B799D4479CAEA4DC9E8B7A1CE56D15E847
-:10A6D0006D8D7DBCF8CE3369D42EF3C9D56787471D
-:10A6E000CFB93419CEB9348A732E4DBB5A2C1948C0
-:10A6F000EFE29C4B53F7E71BB5F97D124E83CFB9C0
-:10A70000F4535EE3026B782F9EFF59B00AD608F52A
-:10A71000DF10E722DEC4731113A274947C5D4284BF
-:10A72000E7CDF9297F2FCF99E4C37C9336D304CAB0
-:10A73000176A4B49F669F37336B53457623D99276A
-:10A7400024CFB52C88B31FFC9C906B5B149EAF1577
-:10A750005A6427787B5476507B4EDF5318A03CB95F
-:10A76000A66C2F8DB345C41130AF74223CC3608EEC
-:10A77000717CF1F646F900FD6DC0FE2A0A7D941F3A
-:10A780005391CAF3CC3CE98192DB8AA2FDD674F3E3
-:10A79000BCBC9AC0D76FF1FCDAEA5284A7519E4B39
-:10A7A000FA32CA75A0BF7D488FDF99B8DE89CAF733
-:10A7B000C0A29BA0BFBEF7AD943FC7EEF62B1668B4
-:10A7C000F7E2BB4E1F9EA7DB501EA8AEA4EF663A71
-:10A7D000EF9751CB2236F85EFA9E751BE6EDD5B1A8
-:10A7E000762BF65767D05BAB1C6F5A913F576DB70E
-:10A7F00044E99161BEA1AF10055DC3CE41710F92D6
-:10A800003F522E19E9988DD4CB9F12296F412E709B
-:10A810007DB598EB39F6A482F19FBEE423AAF09FA0
-:10A8200049DE4D9242CA20E72775BF4DF6CA3490E3
-:10A830000FE89F29582EA6FA5406F93906F3472F38
-:10A840006389445F83EC0431AFD28179737B48CA5A
-:10A85000C5F2298CE17D06122F300ED1B3DCAF9BFF
-:10A8600084F7F0C0F33231EE9D267F5144413CB174
-:10A87000B0A910ED8820D93B46FBA7CCDE9C6487AD
-:10A88000F54D61ED241727EF7F93E424E0F92CCAFE
-:10A8900099D798C4B3CF8E72A61213FF547CEAF1F5
-:10A8A00034CBF19019E1342BCB888F9019E13ADB4E
-:10A8B0003B084F744EC01F074F7E2947985E8E1489
-:10A8C000B033FC5CF27D6FDD817EEFF9EC900F3DE3
-:10A8D000C1AC1C929F7A7B245E5E5D418EE382F266
-:10A8E000EAFA2CDC4FB894F5AEDCA90CA68B93FBEE
-:10A8F000D7AA591AFA9174B95BE4D92BAF8BBCDD96
-:10A90000D264D27351BDC8F15F264A97225D69F0C7
-:10A910007FC5AE84880AF45622DA5F8AF43021AA11
-:10A9200017232687D70AE36E547C6D6A0CBC67B880
-:10A93000BCA4FF269AFC2AD953CC978E7806BC4F2C
-:10A9400043784DB177B49A619E87ADBE9FA3BF5245
-:10A95000CEBC84F772837EA970D498913F2BEC46CD
-:10A96000FCFA09EF95CE41EF4DDF07EFC311EF522F
-:10A970007F0CC1FE04BC2FCC89B15F180FEFC1EF73
-:10A98000897723BE25DF7726382B1C18D7ADE3F94E
-:10A99000C413DF1FD98AE58CD50574CEA533CDF756
-:10A9A000067D6FE6DF4B7BFC2ADE9F58B806BE4370
-:10A9B000B9B3205081E5A6B50AC9CB491F055BB1E3
-:10A9C0003CF26EFEBD647DF31B780F595388B7DFF0
-:10A9D0007D7423DD2711DE28DA97B75760B9A98D7A
-:10A9E000B7FF2AD91E42FFBAEC60B815DF8F7D8011
-:10A9F000CF43DA75D3059D752A2FBC41EDDA79BBBB
-:10AA00009BDFB227927C1276DA34B1CEE98FF175F2
-:10AA1000BA7F7B559517E8F0A6FE9005E9E0B0A94E
-:10AA2000A18CE4651C7FAB5C69CFC3E72C900B8CD9
-:10AA3000F00DF43982E79B6E83211ECBE17686CC44
-:10AA4000D3C47CF16A0DBE1ECBE17127592FC3C55B
-:10AA5000785EF1A3C964B7CA3CD2C8CF98827100AE
-:10AA60005C23E9D73879A5B30A9B495FCE1A2EF348
-:10AA7000497BCDCB60DC92B37FB832967FFD8418E2
-:10AA8000F788C87F97EFEBC20526F43F3A9178E844
-:10AA90001EB3DAF7D12EE94C63BA7B423A0B78B990
-:10AAA000F3D19A1FB7E5017C4DCDE6100AFD7C85F8
-:10AAB000EE3DB9A68745525306CF7F96994578DE7D
-:10AAC000039FFFCA56EBB64D1A3B7DBE141B978FF2
-:10AAD000223D5223F024E5C57C812FE0EFDDC8DF65
-:10AAE0000BECCD64172E12F2FD1616A638C52D06F6
-:10AAF000FEAE777CF399C984F1303D1FAF86E970D3
-:10AB0000BDD0FFF82700FFBA47929DA8E75777E826
-:10AB1000EBD53DF2FE416E5FE9F9BC4EF27958CFBC
-:10AB2000E76038703EFFD938DA7F91E7FA12ECFD22
-:10AB30009F855874BD03FADDC07F0978CE6F0CFA8B
-:10AB40002D269E5F28CA72DC53ED5C0F87400F0BE9
-:10AB50003F8744EDA943B3C3480F25827F251F9744
-:10AB6000087D3E485F5719FD9887883F268A928462
-:10AB7000BBD4CFD00FE967796E10F4F2FB7EF2EF11
-:10AB8000C1FFC4798ED3F3CB2605E47341D45F01B2
-:10AB9000BC7D8D7803796CE7718A7686F22CAEDD08
-:10ABA000EF5813D3EE074947FB0083EDFD88CE8EA7
-:10ABB00037E22B9E5D3F80AF04B09792D08F67C481
-:10ABC0001FFF88CF21E475809C76E4C690D3D67DA4
-:10ABD000BC5EFFD6048A17C8F8B8E437258FDBD5EA
-:10ABE000EF66F95DB9B8FF20FA3F74EB2CDAAFFEDF
-:10ABF00086F969BF1AF38D7263E44BE07EF5064D6A
-:10AC00009CF4505AECB8F5F05CCEEF4B72F9BAC632
-:10AC10007BFC5E1CEF8895C7C58F248A670ADF57C7
-:10AC2000B83897C7B9978867B9781E1179D8475C43
-:10AC3000FA78BAAC5721C6F9729DDDBE412357BCE4
-:10AC40003FB335A3BEF2148ABCF5359C5EFB5E496A
-:10AC5000DBAABDAFED9ADCF22508474FA1DF9A8D44
-:10AC6000719657B85E6834F75A31BFE41A77702A84
-:10AC70007E6FF432FF0BD88FB7D73A0FE0DC27F6A0
-:10AC8000E9FB2CDCDFE84BE04F39AF6B72AB97E0B0
-:10AC90007AFB6EED25F93050AEEE25FEBF2637402B
-:10ACA000E3F6CD97DF45F9C7BCCC847F582EF882F8
-:10ACB000E2BC31E2BA83E3B8FAFB679AACB1F7972A
-:10ACC000595EB22E3E7B43378F1BDE68671B73E1F4
-:10ACD000FB92EE4CF21FEA5242A39D14C7FBEFC554
-:10ACE0005DFB86F5D0BA3695F7E73F5A4AFBB814B4
-:10ACF000F759DDFD36C9B9D5924FBAF47C522FF021
-:10AD00007BBEFD0F635C7C08FCB32616FFBC8CFA8F
-:10AD1000C91285FF6D220FA9526DA8C0B8D0A91520
-:10AD20008CCEBFDEF6AE4AF474DBB30ADD0721ED4C
-:10AD3000B3D502BEF1D683E707BC1AF981E707BC99
-:10AD40001AFF0CCF0F68CB787E405B1FCF0F68BF18
-:10AD5000E3F901ED773C3FA02D97B0E5AD18676BA7
-:10AD60006A63CEB0979F27D0B6C7F304DA329E2726
-:10AD7000D0B6C7F304DAF229C6E178EA3195E2F4F5
-:10AD800078AE40DBFEE677276621DD7425F03C32A5
-:10AD900016F2F714015C5608B8E079036D7FC753CB
-:10ADA000AE7C8701DDADE85939079F97EC5AA5EBDA
-:10ADB000AF5E6D203A64ED5CEE36C33F243FD52292
-:10ADC00015E7F1ED2E85A517E0FDE106FDD9BD796A
-:10ADD000238A9E5BC2FAF7F54C13AF2D181C977FA0
-:10ADE0003957E421E6B01C6D9C264A070E5F04D754
-:10ADF000FF91EA8B450725ECA2548ACFBCA362ECF5
-:10AE0000817DC59AB75CAE68E2F70678D8B2F4F4F3
-:10AE100090E0D5D343D2183D3D24FBF4F4903A455D
-:10AE20004F0F69FE71E7846F7A959E3E8CF09D020C
-:10AE3000FF207C27E0CD9018578275629CF72F0584
-:10AE4000DF2F72C5BE8780EFB7ECF20A87973ED737
-:10AE5000D8CBA2F649E93BCDB4496B8C7B4A384A42
-:10AE60003B41C62F2731EEA7DBF1BC6521DA01DCBF
-:10AE70007F43FD8F7C7ED8CAFD36A420949337B1E2
-:10AE800020C9A39B0CFAFF66C74356D4FF83D60B99
-:10AE90001617DE1B685C2FDA514C134F32EA7FA580
-:10AEA0005B892417E372BBA55C0E9E2563C7AF0CBC
-:10AEB000455EFCDEE1B7E579681C662FD3C57B6390
-:10AEC000DA73721E122E727C1B6B56B3909EC718DB
-:10AED000ED2FBDBF2CFD6BEA54138F96FEB1F44FDE
-:10AEE0008C7056871790DD35D129FDE29EEBF1BDC0
-:10AEF000F4878D7EE8F9F6A5E68594DE9F1744ED8C
-:10AF0000C92BC4739E8817C1B27EFB6FD0F872C57F
-:10AF10003B0CC79BBBFB220FD2CB46A59919E6770A
-:10AF2000F055E84735F5A7F3F84B50B75FF5B6D2C3
-:10AF30004BF35EC0FCF7E0B351C4D31ABBDEA67D71
-:10AF4000D4C62E1E2F60BBF47831DAFBAB5887B520
-:10AF500040196CEF37B01EEACF68DF0FA293F3E819
-:10AF6000F18E3C79DF16CF1760422ED50978C5F3F4
-:10AF70000BCC08E0A9D1FB3B811FE6E54D8AE6D169
-:10AF800066B8C08F51310FC36B8D9527C5F0721510
-:10AF9000B049973B6A484E2C6F1B1497B0123FB5CF
-:10AFA0009F7B7DD20EB81F7C377C96E67979DC20BA
-:10AFB00071CE3B7EFC5CDA93AF3DFFD164E5E70EDA
-:10AFC00059B3FE7CFEDA3C933C3FA50E65FD83E160
-:10AFD000FAFDF2F265FE01C0EF2E2DFCE43E825C2C
-:10AFE000CFEF27F53C89F1433579A61DFD5AAF2BEC
-:10AFF000D882F5871DEC3DACA03C7378293FE4E492
-:10B00000AEA31FA3FF2ED7C758EF16BCDFB66E97AF
-:10B010004AFE60DDAE37C82E8AEFEFB50FDCA32005
-:10B02000F6377E126B5E32AFB9522D4AEDD5D8E9B4
-:10B030004B851F307978E0216C57FA615E0ACED7D4
-:10B0400032A283EEC5EABF83DBC16E95CD44F881A1
-:10B05000DEE37ADF61A67D077752484D413B6E29DA
-:10B06000E3F7D0F99A7D482AEAB0228AD366DCA1B8
-:10B0700006D0FEFE74CDF2343CAF9C91BC22AD10E4
-:10B080009ED36DFC5E9A0CC514E0E74E97A5E13D9A
-:10B090002037D8F8BE7CC15F27450A81DF5EB7F252
-:10B0A000FB46DD4941BABFA03F4DA5F91C5B074BEC
-:10B0B0001B85FB1EDF4CC47B0772CE3826E07CB2BA
-:10B0C000C5BD163FCAE3F7DC1C7FF6BB89E8AFAA13
-:10B0D000671D74BE5DD29FBB30B6BFB242C0A3D164
-:10B0E000C3F3DE4F0AFBF190D86F9579F06BC43E45
-:10B0F000E0A1D103F78379302FA431C19FBA10E3C7
-:10B10000110754CA6BFFC6E94F4D23BB99E7B3AF94
-:10B1100011F6C34991F7B966F68C4CF42FE2E54B72
-:10B120001FC8E376EF0F755FA5CC3F8D0B873433D7
-:10B13000335F42F72E05CE55EFD53FAB31E1795A5B
-:10B140007C8F9737DF97A7E8F2E21B312F1E5EADA9
-:10B1500079A53C939D235FBA11EF23D7E4D7A09F35
-:10B1600086EB6BC4FBC8E99ED213744F07F683F7D6
-:10B17000869DEFDEC815621E8D984F9EAE7DCFF97D
-:10B1800039DABF9BBE3F2DE0F6F43BA6AA6D31E64F
-:10B1900099378CCBA7711E7300F7252F8EF07B3F5C
-:10B1A000E3D593E7B8E3CDAB6B46EF8D386FCCCFEB
-:10B1B0008C355ECA304E2772BE5DAEDE9501BE9FF5
-:10B1C00037BA3A595376F6E7CFD5C8D7D9023F5D9B
-:10B1D00057F5E6D37D00B3B9FF1A0FCF65E66605D4
-:10B1E000E190E00A06D11E91F715E37DC63CCF231E
-:10B1F000744E7C47E1ACEACE1F0C86B395BECBFE05
-:10B20000A4DC39FA884A72E7E807821F99DFA19423
-:10B21000A1BEE27C7594F1B8EED176FEFB1FCB8225
-:10B22000A02B407E2CDD5E3F070F1FAFDC3171236A
-:10B230008A7F7C7F37C89FA5598C4D83E7B20DFA72
-:10B24000FDB16FD903A4E7563C60D467012BCAD97E
-:10B25000950FE9EBD7B107BE46FBA0CE60F76608B5
-:10B26000BD6BB47F670C13F66F192BBB90734E8FB9
-:10B2700030FFEC61A4FFF97EDB24B19F6EACFFBC14
-:10B2800097D3C36D3BFE60C59F048AD7EF319017FB
-:10B2900023A1DF13EB9CF45C32CC5F330CDA350D69
-:10B2A0000B2EC471FA0E70389F6A38B592E2D2B58F
-:10B2B000DC0EB0E1252BF09FB6EBEDE447DF8BF71A
-:10B2C0008C019C6D366E5F48BB4A556F57F1275B0A
-:10B2D000A6FE6E451AAECFFDCCAC2AF43F3CCF247F
-:10B2E000F9111F9BCAFD2528BF37553B689F78ABD6
-:10B2F00089DF4368B7F1FDB9F0D353F7613878645B
-:10B30000C7E619E86738BBF746302ED166E2FBAFD7
-:10B310006DD398B8C79A8FD7D45DDD89F3CAAF01D2
-:10B32000790FFD6D2AF0973835FD33612F350A5CB2
-:10B33000F4BD76D14FF1DEAB9FBF43E62AAC730478
-:10B34000C5BFC6314E3732BF847E1B43132F3A012F
-:10B35000FA8769CE3F8FEB50229614BA5F8FE2D8FE
-:10B360000DEB2319D7A3FEFC25DFAF95F373BF9E2A
-:10B370003D03E3FD529F5E8FF96D18071676EF22AD
-:10B3800026FFF87E41ADA0EB45C2DEBD3E89C37904
-:10B3900019F3D1F9ABEBEC2C05E3CBD757744CA2E6
-:10B3A000FBAFEB2D6968AFC8B8773CBCC78BCF3417
-:10B3B0003E99CCEFCB51FA476327C73006521ACDDE
-:10B3C000B737F6B36398E0E7D1C24E1BC9FCB8CFDC
-:10B3D000D2B8E722CAC7B725F27D35906F76C4EBA5
-:10B3E0007ED4E7B0EE5B5E4D88F07DE3B0B81787A2
-:10B3F00085683F664F26ED2BB80BFDB4EF7ED2D2A9
-:10B400009B4FF200E49702BA73CFB04FAE31E3FD29
-:10B410002039604741F9F82F0E5F83BFCFD238A2A1
-:10B420007725DE179EFEF8595E1ED77B18CBC31E0C
-:10B430004FBC96CA137A57AA509EF278D6B5D41E3E
-:10B440001D2820ACCAC7875F8BE7FC8E89F825F3DF
-:10B45000F5D23D418DBB2F3269E38325F95C4E1F48
-:10B460004BE0F58E15B0257311DE637A476B7F379D
-:10B47000C1932FED526E97C975CA762C2B76FFEFCC
-:10B480000B3D708BB8DF677A126B4BE0FB1521B474
-:10B49000AFDEECBE88E0F2C2309780572FDDDB28AC
-:10B4A000FB319EEF97E3AE42BD8D72DDA23F4FF4BC
-:10B4B0001BA12F609C0D344E91BF04EFE5699C9B4E
-:10B4C000578278037C9905BECCDC0FDC4A78C67EB7
-:10B4D000D38A498F4CC43CB137CF40FD82E8BC8D44
-:10B4E000F471588C734B2BDF67EA4F2B243A9A9EEA
-:10B4F000C4ED3F560AF003393645C0AD245F9CE3E6
-:10B5000019C043A642FDB70AF8E5F1FA17BADED32F
-:10B510003FD07A3578F263DEF19BBBC6129EA60C53
-:10B52000D0C1665D3FC75A0CEDA6F0BC94465721CA
-:10B53000B5BB57DCB32FEF2DC67605D06E7A45FF2D
-:10B5400044E407796F1B0B4D2367BD41488B817B1A
-:10B55000D83A787E0A1BE9E7F711CD9D532AD6E742
-:10B5600014EB736AEFA51BE0C38FFAF36B34F75249
-:10B57000CBF703701FE8AF6882E84FC7CFB1FA433B
-:10B58000BE88878F71F97F617CC8791AE0390067BE
-:10B59000C3FC243C918FA95D919E9FE43C87E59B71
-:10B5A00084BF6DE0E782EF399EC8EF5FFD37221F51
-:10B5B000D2ABA7E7D55D0526DC3F95EDDA3A5A0216
-:10B5C00028E765BCDBD6551D42FDD7D45D4E799B7F
-:10B5D000AB7FF5ECCB2168BFEAF987533099F6A829
-:10B5E000B93D03EDDC861DF7A4F871BFC41C4A41C8
-:10B5F000F97934AC56C53A0F181278907654A3D026
-:10B6000037C79EBEFF1A84C77FECB038518F363DD6
-:10B61000658BD8280E720BD95150FE9C97EFFD1AFE
-:10B62000FDD2A65D7A3B69D53F3C9CE1257A0AE5CF
-:10B630009AF08C0B8BE43278366EB7F8226E1E4F80
-:10B6400084615813EBDF88F333B6C7799C06BC37A7
-:10B6500075A84BF13CAFF13B4812B2C39ABAEE2742
-:10B66000BBAB491B67003CD4C5B1BB6ECDD7E75B14
-:10B670004BB8B0B087EC9AD65FFEACF87307DEA784
-:10B68000F94F294A91565FAE27389DEA58FEF7BB1D
-:10B69000BDF1F5EA49B40B6CDA761CAFDE5D0AED5C
-:10B6A00049B06EFE6CB04452D0CF6FD86AF181E6DB
-:10B6B000650DCF3EF124EE87B04F6C74FF41FDB3B2
-:10B6C000FB3FBE14CAF59D16F71C3E7D879211C53F
-:10B6D0004F9397DB27121FAB5EDC4FF70CE27BB476
-:10B6E0006B255EEA3BF75AD9F8C1F0ABE8D82B7E60
-:10B6F00077C1809F8ECFAFA4FB3C7FF99D15E9FAFF
-:10B70000E81E8565160C6E5FB7757F0AD21FC209E9
-:10B71000FD4B89A701BC0DC257E49ADDA5548FE209
-:10B720001AF1F036379FF178D0AF9E7D0E7F07B0CB
-:10B73000EE37361FAEBFEEB9DB53701D5F999B39F4
-:10B740007DFFE29E0C3F8C5B67096538E9C9DFD756
-:10B750003D7E07D1DDCD07EEC8E0BFA7E1CF364D76
-:10B76000A17566E3FA6E7A6C3EAD6F250B12DDD5DE
-:10B77000FD82C727BE15BFC760C4E769C11F5F6DE3
-:10B78000B3E18F64B0AF30111DF3083F50459EEF19
-:10B79000AD4C7B8F0558DC54FE56C407DE1FD0032A
-:10B7A000CCCE3471D9A6EDF7F6207E8E0DF367E28C
-:10B7B000BE1AC02124E0A5E0FDBAEA81CA4C8E1F62
-:10B7C000E635CBB832D8DF15F81EEBF758FC09C5C3
-:10B7D000BA7662BF9E8F2FE31330EF44DCF7FB2A6B
-:10B7E00023F6B9ADD1C31521DF580FD3D2573C7E14
-:10B7F000DF7E1FD1D5371F71BE690C5757D1F71E99
-:10B800004B048F163786F7D628240F6CBAFB9F0699
-:10B81000E862BB45F0B3FE3BCCD3AC68E1BB87E745
-:10B82000D5AE7CC8A6BB0F214A37D6E8FB82287F5D
-:10B830004A3FEA66C1FFC6F51AE5C11F0CF2803D1A
-:10B84000E619D2BD320D96F0938F22FF02BFA29F60
-:10B85000D9F0AC85FCFCE33BDFF8F83AA0F3E31D3C
-:10B86000926FF572D5C8B7752F4C62B1F8F6B8C3B0
-:10B87000C762F22DBC8FC9B78EE83E8D97FD7072FE
-:10B88000F5E63872356FB8F11C4B512AE6BA1F7BCA
-:10B89000BA7E38C5050C7095FEAC515EBE9CEF8D2E
-:10B8A000292F195E41A581A3849FA4C755CFACA6BB
-:10B8B0007106E856D2A5A4DB01BA1C945FA983A344
-:10B8C000F1FB17288F2645F16E590F7E0ADAB1AFCA
-:10B8D000A9F43B287D30978D00F7BE9D05B40F7A03
-:10B8E0008FB0F3FB9CFD2918D7BB47F815FD184F07
-:10B8F0004C8DBEEF4F10790381FE94348D5DF47949
-:10B90000B79A82765C6F38F6EFC9CA7B2A7BE3FC74
-:10B91000DEAC3CBF54A93AF2D7629CB69DEF4FAE65
-:10B9200068599882F18CBEEE42FA3DA19BDE057FFC
-:10B9300017E6DB27E39A21BF39BB2C7ABFE9111642
-:10B94000A2FDCAE5DDF5B45F688C83AC74D4A4E2D3
-:10B950007EA0310E7233E641611EF263FAF7AB301E
-:10B960003E827832D05310E9297B303DAD1C2EF653
-:10B970005F4B58896EFF55C8B54AB5E8A7689FF474
-:10B9800081DF8EF120A616FD1AF5E9B7E8C723037B
-:10B99000843C44A7F5C12332CF8AE85AD29DD17F97
-:10B9A000373E4FBCF469199E076A78F9DF8A7F0E2B
-:10B9B000CF132F7F32FA552CFFEA5FF3FF8D0DAEC8
-:10B9C0005FB1E78FE4AFF4EDB1D17CFAF6BC9D7FB7
-:10B9D000179677DB7C38DFBEF536FE7BD07B92E9AD
-:10B9E000DEE9BE613CCED6FADA77C5BDA4A7361033
-:10B9F000DEFE6E38BF2FF654F77F7D86F7AB9EEAEA
-:10BA0000B67931EED0B42789FCF0A6DD09744F7CFD
-:10BA1000DF6BDF9569E345FFDDF5348AF3167DC9F9
-:10BA2000AC16F35BFAD2B8BFD6F4EAD4275A0AD0E0
-:10BA30002EDD4BF71657BCFEA762943F7D2F70BBDF
-:10BA400002FCF3C77113F117C3BB7F6A998AE78DB4
-:10BA500018F9D553BD7FBA36E48805170E873E80A6
-:10BA600003AE0BE042F775C78347D7707E0FFFFF29
-:10BA70003E787C4DFE4243F764E2A3285C14FEFB53
-:10BA800023DDC961BB42EBE7EFF77C578C76D2F13F
-:10BA90008E16D2FBE75BF787FF6BE9E0FBAE5B89B5
-:10BAA0000C65DDA7FED7AE9BD3FFDAE15C3F19F949
-:10BAB00060309DFFEAAFA9FC5CB28FE66BE0FFFF50
-:10BAC00007ABA359F3008000000000001F8B0800A3
-:10BAD00000000000000BCD3C0B7814D5B9FFECCC76
-:10BAE0003E926CC22604084260F2244A1E0B791072
-:10BAF0001EA99B842008E206A4A2222EF8E015923B
-:10BB000008B6C66ACD622202F5B6516CAF6DD16F30
-:10BB10004141DADA6B8A41B1025D10115AAAAB8257
-:10BB2000A246BA52AB50031B41052ABDDEFFFFCF30
-:10BB30004CB233243CFCAEDFD7E423C733E7CC3927
-:10BB4000FFFB75CE18498599ADB9004DDB4EE587F1
-:10BB5000B1056806280648526D00FD004E6CFDFADE
-:10BB600090944CAD5D853480BAED710045D8FE31BE
-:10BB70002600124064DBA9129F13E01BFAB912A041
-:10BB8000A3119718D6DD37B71D9B3F2CB917A7D443
-:10BB9000BCF041FEAFB1ED78E1BDEC97A9FFE2BB8F
-:10BBA000433EC0B6D606BE565C2F120F3337213C3B
-:10BBB0009144F000EE5FF7F2E8A796E1FE8BDB3EE2
-:10BBC0009F4DFBD76C1D0532F62BFFF4EFFC30CDFB
-:10BBD000DF2479C4F3F88003E1AADC7E463CDF7EF3
-:10BBE0002A1FB0FD6C93149413B0FF807D7E80D625
-:10BBF000ED05EF118477F17F22DE3B6CB7E278C36D
-:10BC00005095E1EBC67B870DF208DFBDB3697E641A
-:10BC10007BBCCB9E46F0FD7B0844E17F21BCBDFF91
-:10BC2000B1FC3E3FDE007E86DB2A7B1DE908DFC3D8
-:10BC3000100CA9D83E0830B1D5792E3C3FA6C16280
-:10BC40007A0F42D01F4006F123272F9C0209D4AE61
-:10BC5000FA5CCEA7F7A74D4C4338FCAAC5BD5EA53C
-:10BC60001916A6C38AC1EEC02A840B14EFFCB5D8FE
-:10BC7000B70EAD71AFE215EE042801F881435BAF5A
-:10BC8000FF948912AED7B40CE1C2759AFA595C4D93
-:10BC9000B88EA25A82F67C6E3FA2F6A1FE57EFA1A3
-:10BCA0007D15A70D82DABBDFE03F27603F47EBE35E
-:10BCB0007EB199517DFC17033B5D0AEE1FE35620D0
-:10BCC0008028D921EA7D9C7F93EA62BAC442C0EF02
-:10BCD000725E3A9D7E4F83FD7AA793993E3ADDCE00
-:10BCE000A1138083DE57E8BF08FFE45521D2430546
-:10BCF000147F58E0237D23113DDD290E5CCFDAE768
-:10BD00000EF72A899FAB4A89F69E85FE2C31D01703
-:10BD1000E9E789C9EFA673D47A8CBF99CE974A5FB9
-:10BD20009D2F31308DF91C33D8E90E20FC0FAA82EB
-:10BD3000EE0F22DD25A99BBE3ADDCC7CF093EC14FE
-:10BD400077D3BFBB1DE7FA64383312BE41E2FA2B4A
-:10BD500020A71ED7A992C785FDB8FE89D238B79D06
-:10BD6000F44582A03412DBF2FE15807874A4DA1454
-:10BD70006ACB3A11A72878AF3CED00250ABF72487C
-:10BD800034F43B52B3F9FD4AC740C37B1D034B1D3E
-:10BD9000F4BCCA956698FF464C423E14D07B1326ED
-:10BDA000D2F85529971BDE9B7AB863CD1C6CAF95F2
-:10BDB000C245241C1D7B675510BD26A9230CF3B674
-:10BDC000A059217DEEAC9203EB901ED552B07F3E80
-:10BDD000D26D72CE68237C128C273C6B2C285A388B
-:10BDE000EF1A77B961FCDAD2498675AB3DD5867E0C
-:10BDF0004DC357A0F40518DB70169442B4E3C15646
-:10BE0000C3FB857BB618E627EC03391EDB11FBD597
-:10BE1000266A0BDB434924BEB6BE0EBFA50F8A704F
-:10BE2000D85B89E840C991FA57A86D70203DF0F9B8
-:10BE3000A918D122BF58CEFD8762024D08EF294BC9
-:10BE4000C04774B85B0EE4501B3BE88E7C48073853
-:10BE50009AF2B0DC87E0075FA78A7230FA8B401352
-:10BE6000F5AF3CDB2AFBC80E6F94FDB602E2FB94F3
-:10BE7000B8BF92DD6D9580F85EE3B47802E4B792C6
-:10BE80005AF39746C9D7673F845BBCB9E7EAEB8BA7
-:10BE900059E596345CBF39C5D3B283EC66C587B328
-:10BEA000E5F473E7814BE90CEB7449A7F7BC4583D4
-:10BEB000511EE5F8F10EB2EBB19532E30557590387
-:10BEC000EB719DE516778CA6FCEC5F5D13AC6B49BE
-:10BED000AFD7A409FB10FB175025843FB6AF4FCE58
-:10BEE000A3F77E26C17AE8DEEFD652603CB2D22CB0
-:10BEF000420F1457BF9BF3E8FD787EBFA454D011C6
-:10BF0000A6580259B864C241F76E2BF657E7EC7792
-:10BF10009119689B72D82F235DDA0E86CA24D4A5A6
-:10BF2000010F979FCC14F3210BFB6D39E3E3F2D89B
-:10BF30008FE558C8CE2C41B347766647D93339E4EC
-:10BF400027965C7EC500E8C1BEE96DC26909D4C20E
-:10BF5000EEFE9A3495E14A50C2407A9D705AE171E2
-:10BF600068C8B690FDD1D74F98A5BEBB94E0D86302
-:10BF7000852CDA5EF12C223C565DD1AEAE623C04DB
-:10BF8000DE00E1142FA2FA4FF4932A315609A7DC00
-:10BF90001C7F2E1CFFDC589CA8221E7DCBDD896EE9
-:10BFA0006A7F8F441FC374F7131D7E4A7F2EA3DE62
-:10BFB000DAD0781CDF4836518C0701E57A954D1BA5
-:10BFC000279382FDBE9236EE5FEB1D4F7C958DF37D
-:10BFD0000BD2BBE67B1C29DDEB7BD7AE0D35F748DA
-:10BFE0004F3BFBE55513AC01BB7431748DBB005D59
-:10BFF00013045DCFA2F5C77DEE72887D3E96D421F5
-:10C00000246FAB2D68053200F6BB7CD7935CC7CAA2
-:10C01000C13C7A3E37C133A00CE5AFCDE619720FB3
-:10C02000D9956D31EE75F85EF59D9F3DDE407A3D08
-:10C03000F59F39CD24378A276E24EE53E7FA8AED2F
-:10C0400041959CDB87E29D2E3A923CE39E3FB5747E
-:10C05000F7C93E2474D3D59389E3ABA2E8EC709082
-:10C06000FD12FD47D3DABC4CA7DB1C4CA7A59A4EAA
-:10C070003527428B05F5E1A46BC3F7491E4E6EB41C
-:10C0800002C54D6D3448FE32C7C17A05C9E1946AD4
-:10C09000D483BC372D5E8ACBDA513E3C241FF5D9C0
-:10C0A00086F54E8E7B37290FDF3B99AC24117D1628
-:10C0B000866D4CB79B1508DAD15EB625DF5659CE92
-:10C0C000FAA1F278ABB6CE6B599EFBD2D8EF8C7743
-:10C0D0007D8278499E31F237C37BE71779D04F7460
-:10C0E000FB8874AE2334937A9783E6724780E2CC60
-:10C0F000BAD265B9E41F9624660F00C4A36EBCC40F
-:10C10000FEB6AEE10BA6BBBEBE725A06B56F777F18
-:10C110007C86CAF640513C2C0FCA691B8FD7349CD1
-:10C12000643B8EE0A491DE742C13F6AEC50AB754BE
-:10C13000635BF3BFF22DD538BF06430CF617B0D3BF
-:10C14000B624CA1E42EBE75D76BF0079B77ACA5BB8
-:10C15000B16467AB25D70C401C8EA6BBAA95D1D87D
-:10C160008F71CD90B0DFB6EE8C97FBA9AE1916ECAF
-:10C17000EF4ABB498C0F74FDDCE206F87CDD5DA262
-:10C180009FE63A40FD0FD31EA95606623F5EC8C126
-:10C190006FD26AABFDB9245F4EA6CB891571AC1F77
-:10C1A000BDD1795EC3CB06BA9C332E4BB778C96E2E
-:10C1B000CC1476F1D8CA416B391ECA0C65D39E5B8C
-:10C1C000D344FCDA1F79538AFF5E45BD77201D9268
-:10C1D00033C063C1F9C92FA23FA2F91F878610FDA2
-:10C1E000E6BD181394901F8B9F78C546FE68AEACD1
-:10C1F00066935EBD3FCCB793E4E3787C88FBF31A8B
-:10C20000B6335C29592E61A75D9DB95E94CFF9D0F4
-:10C2100062A3F1F9A01C26BF614161A6B866A173B3
-:10C22000978DE2B2854F5B0F87A3FCEA22081F229D
-:10C230003DAD79D67A381CE57F81DE8F92AFC3168B
-:10C240000187A2D163AE1C9A6D13701D20B816270A
-:10C25000617C2F93BB08F5F7715C5493C379494A0D
-:10C260002C90DC2DBFECFD7C5F0F7EB0B511FD3E48
-:10C27000AADCA6C62DDCAEC135C9EE0C50C23637DD
-:10C28000AE53ABD9E592D0611B44BD7F42A36B9FF7
-:10C290002D128FEBF6A27B3C5ED025D733C2827085
-:10C2A0002C9EB66F1CF145E7E79571D01A93C47CBC
-:10C2B000716B7C71135F74FA233D0B157C6FD7593A
-:10C2C0007C2FAD27B9D0E92FE06D8B15F6A27373E3
-:10C2D0000CC74D66F8E3D205BC3A1E43D3CF0FFF1F
-:10C2E000D0F4EF06FEA1E9428FCD78E87AAC3FD7D3
-:10C2F000F5D88CB70EF7A5CB59C8763172A6DB9965
-:10C300005AF0E5D0FABA5DD1E9ACC3A9D3AB8DF24E
-:10C31000A11EE0541A5E32E0A3842A28898071E9C4
-:10C32000E9C28EB54E02E283D2B095E75D2A3EBAED
-:10C33000BDED0D2FDDCE9AF1D3EDAD8EA76E7775E5
-:10C340007CCBD090B03DC4349EF2AC2B4FFB0C7133
-:10C3500070392C30C4C9958E3B0DFD2AD73D86F926
-:10C3600057A52C338C4F52571AC627E73C62E85F1B
-:10C37000E3FEA5298E5F6B8AE37F63181F170E719A
-:10C38000DCFD7AE344509047DF3BD2C9F177B0D16E
-:10C39000C5FD9D8D29DCEE6A5459BF7737E670BB29
-:10C3A000A7D1CDCFFFDC58CAEDBE460FB7A1462FAF
-:10C3B000B766BB30F5F9EB15CA574A432D9564CAE9
-:10C3C0007764F87E928EF47BC312688A473A8D6A4E
-:10C3D00017F139CC37FBE35387EE25BFEEB2B9C96D
-:10C3E0001F36EF182DA93DC47309E8EF3C51F292B6
-:10C3F00030250C1E8A7BD03DF7245F2DE916964729
-:10C4000032FB807A37D301D664D4B79933257713BA
-:10C41000F0733F24711BF4E1F85405FCE4FFAB9D7D
-:10C420004AD09EC0A0791D08E70C0126D8699CFC63
-:10C4300077725F85E2D6EBE821C22B7B64F81E3E63
-:10C440009F51FA97339437DFE86CB5929CDCB0E7E4
-:10C450008163F7E23834FB8B493FBAE206FFFB9673
-:10C460004B891B5A28AE443A462477C843F14EA262
-:10C47000E28ECE07F4F6B674910F4C6DF2CB0948FC
-:10C48000CFCE3781E3385D1F11BF1504BFAE17D57E
-:10C490002E25382C81FCFD239534BF66BFCA74D18C
-:10C4A000F542D7033D0FD4F5A04A7EB689E69F3802
-:10C4B000089C4F8FEAF01D799EF034C59DA59D2DF7
-:10C4C0009594975D286F1C73BAF5159AB7BDD1C7BF
-:10C4D00072B4B57126B7C1C6F99A7CD6737F57631B
-:10C4E00003F77737FAB9DDD3B84293CF161EDFD7FB
-:10C4F000F838F75F6F0C6872BA919F8FCF10FEF714
-:10C500008B50E50092BF17D3451D071CE59C478063
-:10C5100022DA8B95939A9497453C65920FB35CE829
-:10C52000F200683724A4D78DE867C93FDC04FEBC5D
-:10C5300039D8CE9CD7621D2B7D7BB958E86CE6F8C4
-:10C54000C36C0F174090EDDDB9F65DC4FF17B2EF75
-:10C5500032E6ABE4AF74FBB718C2BC9E5DBED34DF0
-:10C56000F594EFCEAFB834BF0273687E57DE1DDBA3
-:10C570003E5BB65C38EF2E1A2CF8AAE7DD183F02B6
-:10C58000F9E54840E6B87A7E5A4B02E7DDA59D09F9
-:10C5900014072CD826333F30CF540622DFE6697CBF
-:10C5A000EB80E03BC49779E3E6715D6EFE1A233EB3
-:10C5B0000B9DD7F509AA3DC6693DE2590B0F7F4E89
-:10C5C000F5B95A8D5EFC1CE16968BF61D2AEA879ED
-:10C5D0003119F1C99FC49142C128A207C2EF0E923E
-:10C5E0009EED9759CF7A938BE3989F909C9F6A9C7E
-:10C5F000396917CAFDF1B38D9C7F25653CF2887FB0
-:10C60000DC77C7AFB559DEA1199C0F856DA43F3A01
-:10C61000FF96938D44B8975738029468478A5D0A0D
-:10C62000ED1F913C723CF1E323702F43FA956F7D2F
-:10C63000ED20E947B9C3C9E708884447343F47EFCD
-:10C64000F7353971DEA87D1E99C2F7E25DE1269AC1
-:10C65000A6FB1BDDFF8CEDE8947D5C17C8643D02F2
-:10C66000CC25BEC9B8783D32E79B4D946FA2413AC4
-:10C67000E99CC0F09E0C829B9E77D7B544BD69ECC7
-:10C68000598F9C80F02DD7F2C3D11F7B198E6A87FA
-:10C69000CA7268D7F2497B8A053C517474D97C1BF5
-:10C6A000A9FE097F8CE13AAF19BEC919C28EAB4908
-:10C6B000DEC94C5FA79A4D794395DCB1E1D7240FD1
-:10C6C0006D716E3BBE67B6B7BA7DEB2D6EAF739DD5
-:10C6D000EC318ED4DB3A8B38371859A91652FE4705
-:10C6E000F125E5857A9E689EEFCBAA989DD18FEBC8
-:10C6F000AB210FC1E5B29C574EEB1A3E3F6F9EA691
-:10C70000EF5FB7ADD83537AA0EB226433F5F505C16
-:10C710009F38BAF976B1FC2DEB9C69F03FFFE9F147
-:10C72000DA540C7324D4A13C2920E20810F1C42C63
-:10C7300008713B1B3AB9F5A124513B17DCDCDE063E
-:10C740005E6EBFCEF4AD26B989583BFB931E1F7BAE
-:10C75000E1EB5C928B63DF1BEB4A53BBFDABEE6FEF
-:10C760002FD5AFC6D2F9520FF2B041935BDD6EF711
-:10C77000CA1F93DD8E8C40FB807046368B73B148A8
-:10C780007C6C80CE0174FB007E63BCA8DB8BC2593D
-:10C79000EE37B85EB84FE6BAA5D97E5429228F0786
-:10C7A000C59D43F5517DFF260BCC2739DB88ED1F56
-:10C7B000108F3EB3C28A1A85CF760D8FF21BC60347
-:10C7C000E52F535D223FAC724032E57370F664EEA4
-:10C7D0000C340453291E45791E95E4F913D1DBFF6F
-:10C7E000D0B8443E7F20FB3314F9F79138B7810568
-:10C7F00052200BE9B1A54DF4F36E4F64FC6E82201C
-:10C80000F3F166085B09FF5B00D8EECE0195DB5BB8
-:10C81000C1C3FCC495E3F2D10EDDDEA68C5C857845
-:10C82000162475A6937EE68D7E2F4942B8F229FE26
-:10C8300075726D6605C5293A1E964C81C765999E2D
-:10C84000B709BE82A4D0AAD514176EB600C5859FBD
-:10C850008EBEE70E88F2AB2559150769DE73923854
-:10C860002FF46FB38BBA1A74F6F746C5E35F6756B9
-:10C870001E22BDFF07C1C6F9EF2A3E47AA7609DA94
-:10C88000C3F87E4C037C6F8837AF27FDF4B37D2C53
-:10C89000205A8A3AA11F4A795FEE7FF5D417D5CD89
-:10C8A000021F3FC5632559BE08ED5760435348F04A
-:10C8B0003F610FACE3B8A97E08D52FE63D69B7907C
-:10C8C0001F7F0FED309D9B7ED0E8E0F643CC6FA834
-:10C8D000FD1BE637D47E84F90DB57FC7FC86DADB15
-:10C8E0004F8F402102F861A6E77F33CE8347EF7672
-:10C8F00046E0119160664FE77DA73244FE91DFF676
-:10C90000F1037124075B6437C969DE6685EB10C7E4
-:10C91000B78E0AC869D174F5C565221CF95BDE7E45
-:10C92000746C11BDA7B8249C7F7CCBC9FE9C379941
-:10C93000E0EBA2C7369BA08706EF7389A155F4FEF2
-:10C94000739BD30942B42320E490F8D9431D0D60B2
-:10C9500019F3F1F50C113F5D6BEF2C8A3EDF040AF1
-:10C9600019A85EA9F9992AF96C423857ABDB8E26D3
-:10C97000B9CE7C83F6F3EF117A887C35D4252A353D
-:10C9800039D4DBBC6D362FE9D373DBDE993619E978
-:10C990003075CCA46259ED9E5F98D98FF7CD1B7D81
-:10C9A000E657AB93793E9F5BDC006BAB5C38EF26C0
-:10C9B000C78E57890437BB3EAA4AC4FE2D29D26EC2
-:10C9C0006AE7A8691392C80E4080F7B935A77C378B
-:10C9D00089D81477B58DFC7239295594DDAD74C4AE
-:10C9E000D1496A57BFCAD5D7D0BF2A659061FE2406
-:10C9F00035C3303E3967B8615CDF778ABBD0308F92
-:10CA0000F495E266C483F90EEB653E97C9DBFCC57D
-:10CA1000FB8B18FF1B8A08FF08D2CF8681C591D2F5
-:10CA200095BF584D6663F3CE043EA735C5A735DBE9
-:10CA30009EDAED517B8F4FBF84AD3DC675B5BDC449
-:10CA400075171B9FA2FD7894EC47C10BD7F1B9FB7A
-:10CA500073A3CF5CA6225EBE4C8C5BC9EE99E2D676
-:10CA60008816B79AE5A74B4E2555C8CD5E19280EF6
-:10CA7000D2E357B3FC003CA0F97FD15EAA9E4F7D64
-:10CA80004BF8AB7F90BEF78D966BAD35D5230A6C16
-:10CA9000E857A84EF85719D6D183B308874EFF8CB4
-:10CAA0006EB987DBD6BE3AB0889FFBE371CB5AAD37
-:10CAB0003EF1AB4CED9CBF66C7AB0393BBC7E1AE89
-:10CAC0008F0CF3E13E69B7A1DF9C66EC3F5CBE3B97
-:10CAD000FAFDDEECD0BC3577DA7C54977E4CD42955
-:10CAE000CDE33A3C553B633C642F95AD76CE876AE7
-:10CAF0005D1EAE9F28BDD44F74BB70830CF53DD92D
-:10CB0000B7F5DABA5376C680FC2DD67D0F6585E081
-:10CB1000F1BF28FCCC7B7D3CE08DDAA73553C47D8A
-:10CB2000C7125B7EFC15CE3BF612B889F4C712859E
-:10CB3000BDCD6FFBD462213F112BE425DF15B62458
-:10CB4000D17D97F9717E3A4FAE5B10EFA773A38248
-:10CB5000F4CE771CC8FA2D4FFB1E75A0DCBD6FB15B
-:10CB600018FC4E846C1DF67764FAA691DF99BC33ED
-:10CB70002668F916F8ECC804E1D72A84BECF26B996
-:10CB8000D1CFC5D0D4D43D08867332C29FFA679EF8
-:10CB9000BEF5ADC728EEDD2BF41F879DE67CF4A61D
-:10CBA000A87C14D608FD75E02FC5390B77B5D828B9
-:10CBB0004FFAAEF4BE3DD3D9ADDFC3CED5675DDF4E
-:10CBC000EB0E087D3FB1F5CBB7C8AE9F407F17ADE8
-:10CBD000EF5D7E51D3F3BAC765D647FDF9F1ADF2EB
-:10CBE000C4400FF47D4D930370651BCECD96949D8C
-:10CBF0009A467E6DC93685CF037BF3D7752B8CE7BC
-:10CC000064CF6DB7CF17E7C8028F88EE4FB77D9915
-:10CC1000549E2BDA657C5EDBA2D91D11C7A01FB51F
-:10CC200026931FAD96B8FE7660DB00BE9F714082F2
-:10CC3000A03A9297B8CE817C9B2E96A3E74E8AC7E6
-:10CC4000202547A17DA669FC9CAED585666C9B918D
-:10CC500045FC7AA76DEE010FA19795C1F2733DF8DF
-:10CC6000391E3C90E84DA57B0A539B847C1F48EC01
-:10CC7000ECA03AD281B23889CEA370FDE6E878EF15
-:10CC800080D59B5ACF78E9E79357C8DFC45D421E31
-:10CC9000ACD943E4A75F12F91CCBBF32F06196AB6D
-:10CCA0000510D8EDC17D6BDD418E4B1781C8EBCDF2
-:10CCB000F17CEDB8CF6CE417CCF967F9961D07E964
-:10CCC000DCE39C3A84495E2F547730E7BDBDD50F35
-:10CCD0004625790BB3A2EA7EE6F8BC2B0ED5E3A875
-:10CCE000F5717C2EF44AD97F1F5F84FDBBD6C7B98E
-:10CCF00028CF3EFAA4DD4F76F9E83A7B40C2F1A393
-:10CD0000499DED94771CDD94E7C615609E45FDDDD9
-:10CD1000B3E4D77F6B65B90030DE6B58527637DFEE
-:10CD2000FF5BB23E5EA27B389022C6F59C4F7E260A
-:10CD30009EE38205CF0FE4734EDDBF907ED0B9F441
-:10CD40009127623C14E41FDD33BD0FD5FB3A2C7FE5
-:10CD5000E0F37C90EF3B44E7F58B36C48FA4F801F9
-:10CD60007281F9367FDDE57CBEF973C53783F0AF9C
-:10CD70007CE69A0174AF6CC1DBFD80F0896C7D9E0E
-:10CD8000CFFFBAE3F49EE3BB135B33FA406E379DEB
-:10CD9000F43AE08AA7977989EFC5922ACE69A0DE96
-:10CDA0003388E4624B35D0BA2365716FB473651C68
-:10CDB000C7A566B9ABC91271608D5E6FE80B8E14A2
-:10CDC000D21F1F301D222B87AFA3F3B0E6AC24CDBA
-:10CDD0004F77664F8BBA975825B7D7BE4CF2B9C676
-:10CDE000CE75908E989ECFC11AB21279FE3C87F113
-:10CDF000DCBCB6E18CB19F8BF91DBE3FB2492DBCA6
-:10CE000013DBA51AFD57A77AEFCDC2F717B63EF28E
-:10CE1000C23EA6CB9A1FBE4FFBEE718AFACB3E41B3
-:10CE20003F73FC3FCF21EA1C006B797FFDF9A74FD0
-:10CE3000BCCBE7AB9F6E1E9E2DCE8D439FFC3A8DE3
-:10CE4000CF8B0FDD8BEDA63D6F315FCCF09E73EE87
-:10CE500027498C6F0DE1D197CE77BD8F109CC80804
-:10CE6000CEDBE6AECA63FAE9E76F91A33DE7273A66
-:10CE70009CFAFA3A7CFAFAFABC27B3441E335BCB2D
-:10CE80000F8ED942C7F91CFD85E112D5F7BA9E274E
-:10CE900085F213A3E4E5BBAAA7DFA8D5430E5A96F3
-:10CEA000FDC046F7E45A575B7DD176EF12EBE85DA3
-:10CEB00071A00754577FE14AD86F21724A7F3AEF39
-:10CEC000D3FAA40CD81FA78127113C746F506B6153
-:10CED000A12F85EBE4B49E4CD71003DC6F2A77AB0F
-:10CEE000D45E29791571EF2BC0F23F01EA07131EBA
-:10CEF000164798CFC5F47B2E3312975F9386FB3588
-:10CF0000F783E514C7345B855EF8E7C471FEA6D3EA
-:10CF100049F733E0CA35F8976617A80AAE3353814C
-:10CF200015D624316F28D2F9C09EB9AF529CF0AE0D
-:10CF300052DF8FF67DCFF9589E64A1F82E104F393D
-:10CF4000E2FB6FFDB6F8AF38F703F09439517EAECF
-:10CF50007BCDC176DF5C8FB81D7CDC9F0761EB1752
-:10CF6000F8DEDF46FF6BFD4EE8C6EB6F63BEDA4CC2
-:10CF7000F9C14D890F14D3FBFA3D4CF37DBFA32EAD
-:10CF800027DF0B34DFFBBB167C9F91DD3A65F1D5C3
-:10CF90008AFA47FD28F2BF91441B48383FD24FA37D
-:10CFA000C731607A44ACDAFB9FABDC2FAA1CC9F511
-:10CFB0004838A5B23D1E6BF23745C32D220FFB4604
-:10CFC000CC2FEB540CFEA6A840ABDB7CAD725C7A98
-:10CFD000E569E5BCFEE8A16C61CF8AFA5AEA7B8A72
-:10CFE0000FD56CA13F4D1094053E224E18DB2557FE
-:10CFF0001E99F857ABF56BC99FA13C45121C7EBA30
-:10D00000E83876AB90AFB14A7007B5685DA181E2B0
-:10D010008A2DE8EF7438E88C306538CBC1185D3E56
-:10D0200071AD59386FB954CF798B83E2196C574978
-:10D030002186E37BD0C9AD47F3E315E0E6763C7883
-:10D04000B945F9E47622B4707B35B4723B0542C22F
-:10D05000EF5F116C627F06F7B9F8DC62D23C0BC55A
-:10D060001B45D7F79C2F546874EA9D0EA87025972E
-:10D070004E8709807A97D1033D06E7B0FD30D3C3D0
-:10D08000AC9F651096593FC93064509D40653DADD9
-:10D09000040FF7AB2E920EA5619FC2751A333D2A7D
-:10D0A0007B968BC91A3DFE950D2C1F3A9FEECF56ED
-:10D0B000F9B9CE2FD4AB14927F331FF5E745711524
-:10D0C00027E96AFA1DD9C3A7D3BDAAA2C28AA5645B
-:10D0D00092EFDE30663ADDAB2A1A5BF13C1D79DE59
-:10D0E000933D4EF40B2A0AAD6ECC5AA4B2E9E3711B
-:10D0F000BE4FBB970C33457C7D9716B7F896FDC0A5
-:10D10000ED423DF1A53ADD849F03837BAA7FCA19D6
-:10D11000E27C70C8C4E04E2BCE3BA4F8E664537C9E
-:10D12000E00826A848F7BB9655F1BDB5876C62BEEE
-:10D13000DD2EEAB03A5EF8DC1F83FD4D9B862F950D
-:10D14000D27BDF1FD7ADA5757DCBB2FCA4AFBECD22
-:10D15000925B70B262C04CD4CF8E9015A81EAAEF1D
-:10D16000939DEA5B9ACDE7BAD95C271BA4C5331D12
-:10D170009B860F27BEDC9FADDDC34A4E2B24BA2D04
-:10D180004BF5DE4FF323F142BEEED7F8D05BBB2167
-:10D19000DB735F76F1B9CF23FF4000F0FD9F65FBA5
-:10D1A0001EA0F5EAE2CEB27F3F3EE2EDE5E1B46ECD
-:10D1B00039959049B310EF260F046CEC07B4FBEAE5
-:10D1C000DA7955E4765C07E950E4F53591491B3589
-:10D1D000ABB384EC27AEFB5FBCAE2D3C6404BEF762
-:10D1E000D8F44336216783859C697668DBF6BDF702
-:10D1F0000E125D2F44E955DDF6335F7D80F4AB3BC5
-:10D20000E174D3F46E7DFAE552CE27C169B01BBA42
-:10D210009E8DD962E7B87AECD6CB6FA779656FB7E8
-:10D2200067105E57B687F91C2CB2EDDD41020E3D4A
-:10D23000DF38257D1BBF4BE7B49CC76D16E7B44BA9
-:10D24000A4FA57E2A9FF7BC9ED47F83FD5FC869EBB
-:10D2500017CFD7F05ABC77FD72AA8BCC5F73EB1453
-:10D26000BEC7131079838ABFA4FF5FC23E3E1F5F13
-:10D27000B4D19C4F74DA88FF8B5B4DF781281FA6D1
-:10D280007B0FD1F6BD877C787BB6764E9B0AA98C46
-:10D29000873CAB8FAF077B67CE771F07CFAB2C9F49
-:10D2A000E09569FF62A5E77AC273DDDFD3B03ECCBB
-:10D2B000D3F6263A3939DFB589FBC24F2C75BBA8A6
-:10D2C000AFE9E75A9495528AA33B7FC9F2AFBFA753
-:10D2D000EBEB8215E25E36ACE9CB3257B0C1EE2102
-:10D2E000BE166C18C0F905E6411CF7ADDD605F4164
-:10D2F000FDA60763FD7201D5933B2FA3BA4A538C59
-:10D30000F8CE89DC23DD132D4817758E33BA5DD72F
-:10D31000FCBA7EDFB62BFF89CFE67BCD5DE361C52E
-:10D32000906F3469F17311C1477160BD55E44F319D
-:10D3300002FE1D6F7E3F8EE2D8CD8A378EEAD2275D
-:10D34000F6A7F7811EE8A6B7C5E85EE03CE78CC506
-:10D35000EF4EC9381FBF8A1ED7EEA76BF2F9C7463A
-:10D360000FFCDDDACD0F1DAF2AF9D94A1BD5396E76
-:10D370000317D53D96EC7DAA89BEB759B212B8A263
-:10D380007082FE50BE70C4C2E7E063F616A6903C01
-:10D39000B669F68ECE85D528B92AA1A210CE2F1E49
-:10D3A0000C01FAFE28468D05352A2F8ECB4932F422
-:10D3B000E3DD9719DEEF539A6E1807BF27945BD20F
-:10D3C0001DBF267AAE30CC7F2861027F8F5316BAFC
-:10D3D00083EB4A7D278E348CDB51AEE99E037C21A2
-:10D3E000E29F52FC65BF0AF532C139360CF02B942E
-:10D3F000BB311DC6F8A834DCC27960CC7EC590D79D
-:10D40000DB2F5067BA7C98A6578361B0B00F667A5D
-:10D410001BEF432CD92B731CB7241503CFB4DEE9C3
-:10D42000ADEB9F4EF77E5E23DD07CC34D279A0CFE3
-:10D4300048E741F38D744EAD37D279688391AE6978
-:10D440007E231D33568C31CCCF6AA930F4873D7EC4
-:10D45000B561FEE5816986FEF08D371AE6E7B5CE47
-:10D46000358C176C59785EBE8F082E318C9BF95E17
-:10D47000B8E74726395498CEC5DAF7593AFFFDF890
-:10D480004BFC1F0BDE3E4189CA81FE26D2C7FF2F0F
-:10D49000FE2F18A69D23E8FCBF48BB7A95E687CDF2
-:10D4A000DF794D8D13F6E6F53D27F67BB0FF865A02
-:10D4B000684DA1B8498B0FBCFA798429EFD3F39456
-:10D4C0006B4B25D3397D8CE19CFE42F7DA8A4341D0
-:10D4D000437FC47EF17DD4C883EE57A82DFED823A8
-:10D4E000477F0F35FA0B76CBE7E49DFAFD383D6FA9
-:10D4F00082E627390F9DA5C34F4A50726E7D51CFEA
-:10D500004FCD79AB9EAF9EFBBD95884BEE967BCB06
-:10D510006345FEAAE7ADDF070F7F5776D560DFDAF8
-:10D520006168FF654B675F1AD7F359222C9D1B4733
-:10D5300088B0FCDDCC3BD33DB9FC3D2AD7BD174AB2
-:10D540006F4FA77BFE08BE2B5C22CA3FF4F3D2309C
-:10D55000DFEF68BDC3926B7921BEFBFA98CF86D00E
-:10D560007AFF334CC46F76192984FE67C02C0FD024
-:10D57000F351499EE768BEF97EB6B935DF1B6A6B89
-:10D580000C72ABB8DC7C6FC75C1F0C5B548E3BFD30
-:10D590003F92F89ECE6704DCE8EE78E5C40A2BC71C
-:10D5A0002BA0E5E3376BF4D7EB16B3347C0EE31214
-:10D5B000F3D1FFDEBCE535E6CBA2940EADDE51CF54
-:10D5C000F1F5AD839D23F91E9AA7D02DEA5C7A1D53
-:10D5D00063D0257D5F7221FC17A51C35D491E0D95D
-:10D5E000BE1775BEDD8DB758FFF04A518F3CBC3277
-:10D5F00095EBDFDDEB1FE77AD2CDF56F1AF4E296FB
-:10D6000086F70C7A30C7FF91613C9CDC69A5FA6112
-:10D61000F88581136E42FA1DDB6CE7EFA1510E3ADB
-:10D6200088AFFAFAE195C3C7F3779517C4F3338649
-:10D63000A3BD31C4FCD5F13CD47890FBE1C630B732
-:10D64000663CF53A85DEDA76420EDDCFEF9462DD98
-:10D65000541736D72FEEB6A89F901E3C9493AEC5B4
-:10D660006BF5055EE69FA857B46BDF97B66BDF9747
-:10D67000B66BDF8BB66BDF87B66BDF8146ACCE1542
-:10D6800054D76897C4BD9F5992E7C939B85FDA602B
-:10D690009F3387E2FE859DF90AEE5357109E2D2198
-:10D6A0009FF3FAF9FAD07309D38581FC3D919FEF7E
-:10D6B000871DB1F8F3E9FB9BC91BB3AEA33CF0484F
-:10D6C000ACFF384522953969D751DE77C426F4700E
-:10D6D000FAC6D8EB48EF3EC6C5083FFF4B92A82BD1
-:10D6E00039C336FA7E6A6AB26F504EB1B8F7C5DFF9
-:10D6F000CDE073924BBDCE19B18A3830A2C583E913
-:10D7000039E21C302347C4AD7A5B463CC7E7D3A956
-:10D7100065FD7C389BBF375963078A5F717FFEBE0A
-:10D7200046BF6762FEFE66E49FECFC9D845E0F2DA3
-:10D73000C949E375E8BB1CD2CBE49FC4B1DD82705C
-:10D7400068087DC7D305EF7EF15DE531AA2347D593
-:10D750009F4B72441D066E03C377408BF71E3E44F9
-:10D7600079D6FBC37C6388AE732D6A09F17571C2EB
-:10D770000EAE774DC951795F8497F145FBD34C7C50
-:10D780005AEC08737DEC42F5F0DEF03F767BE8174B
-:10D79000B95CFF55F3F93B3C6D5F84630AD15FC709
-:10D7A0005B87A37B9DF3CBBF5ED7D5FB9F3EF1503C
-:10D7B000B65697BFC5DB833FBD55A34BBBB5E73A14
-:10D7C000FAFD1A7FCFE1CF3000AADBDB63D14760DF
-:10D7D0005BAFD1E9D80D880FD7273C2388BF8BA733
-:10D7E00039F9FB737D7D5CC7F787F3ECB33AD5BBA2
-:10D7F00090F05F582FEAEEFA7844127CF5AF14757A
-:10D80000D0C5DBDF3B44FF1F8405CFE415727EAF3C
-:10D81000BD6FA633D297BF8B9A2B8B732BA4EFDDF2
-:10D82000C46773BDFDDBD235922ACE57236BCF0C74
-:10D83000A17B648BE9DE1A7D1FA6D5AFA0CD5897DA
-:10D84000427AF9A95E71EE7914F0B9965DF3237608
-:10D85000FDFDC18AE1FD634EEF4F893E2F687603DF
-:10D86000E7072CB87F9B9E279BEA286D2151EF6C20
-:10D870004BB1719C4CF10EF9273DDEB9EB4D51EFE8
-:10D88000BC2B4DC4D1041FF1573AB89BE3842EFF43
-:10D890002FB955A29FD3EA0BD0FEE05BCAFE4B1E08
-:10D8A0008AFCA5F38B3F5FADD503843F2CD6FC5F8C
-:10D8B00031AD43014E6E1FF68B45DABE183F72DD67
-:10D8C0006D34F89A04305ADD6CE56E431DE1FF00BB
-:10D8D00090CECABD504500000000000000000000CE
-:10D8E0001F8B080000000000000BFB51CFC0F003AD
-:10D8F0000917B1A1F26FA0F1B33851F9BF5951F92D
-:10D9000097D0F884B02E1303C30A46D2F420E39DC7
-:10D9100040FD0780F838109F6322DF1C103E210C69
-:10D92000F48F1803C34220DD0DA4AF00F11F207E49
-:10D9300004E44B8B30306801F1325106864420BD3F
-:10D940000688CB4520FA4E02E96651F2ECD4E3A1F9
-:10D95000CCCDA39832BC411A955FA3C2C0B05695F6
-:10D9600081E1931A84BF02499E5D9D81A15605C243
-:10D9700036956360E807AA59208DDD5C33A0FC046E
-:10D98000A0BCB83A840F00134DDDCB680300000043
-:10D9900000000000000000001F8B080000000000D5
-:10D9A000000BCD3D097855D599FF5DDEBEE42679A3
-:10D9B000819705B8090183067C09612DE24D8C1819
-:10D9C0006C8A2F88364E197DA0D56859223235B61B
-:10D9D000DABC4012C2A6416D8741A52F5A2D525A7A
-:10D9E000A3624B67D4792C1DD1B1355AAA76A49D78
-:10D9F000C8388E5A65E242AB558739FF7FCE4DEE6F
-:10DA0000BD7909A89DF98ACBE1DC7B96FFFCE7DFB5
-:10DA1000CF7FEE73CB3E80090027F1CFB900574B83
-:10DA2000009037548237D608118026CDAD6F2A0674
-:10DA3000F886123BAC57B1E763E5D8FD3A3E9F5CF0
-:10DA40000B610005DBE703C4F07FACDFFAE0BA311D
-:10DA500089207BA62CCDC2D21CDF2C9B5400AD129A
-:10DA6000DF6F999CE9BD5942CA35D0EF05FA73B210
-:10DA700004A0E5E86FA71E32EBECBF0208455E0F7D
-:10DA8000B0BFCC8259271580F7828BB3D230F278A1
-:10DA90006FB5769FA54E02F853EBCB530F4D1AFE90
-:10DAA000FE1B0A34F7960F7F3E0BD8A433101F4994
-:10DAB000777CEAD0BA07D71964489AC3FA03A43D21
-:10DAC00039ACDCB5ED2CB56C084EE73A00921CBFC2
-:10DAD0009FB39F2752932E60B50A29318FE052D908
-:10DAE0003F3301A829DB97EB763500C1E580B723EA
-:10DAF000F2978177C4FD12EDDE0BAEEB04D66FBD5D
-:10DB00008BD34B7B9E1C5B07C3E9C5DC0F138FA730
-:10DB1000BB1F37818FE631E9A8495E3AEABE9F8A8A
-:10DB20008EAE443A3AEBFF9E8E927FBD74D441E3B1
-:10DB3000FC95D1114037C717F4AB38FFD0735E4660
-:10DB400096F64A4867ACDA87708FE353C1B896CE31
-:10DB5000EBE5694C4C41ECE93398DC1AD7BFAC1EBD
-:10DB6000E11E7B74E19B58762EA9A93B9FAD2FBF88
-:10DB7000B1F7F90B581989A7A404DBAF3B4046A1C4
-:10DB8000C2C65B91AC66EB6BC7C1E6023C905C66BB
-:10DB90002471BD60008C01F83BB126005957593DF6
-:10DBA000447FCDB40E37A4393EA4939EE1FD475A7D
-:10DBB0007F08FB996D8AF1FF6B00D777AA7EB0963C
-:10DBC000CF9764FF20BE0B87E6A771F29B2C7540B0
-:10DBD000FCD8DFF7E15F08BFD7FFBFCC5700953E09
-:10DBE000940FA17A594B617BE8CD56593DB24285DD
-:10DBF0003493110555DD924B3FF5BE7402D4F5F216
-:10DC0000FD911A4243F0FD2748443FE3BFF55ACF48
-:10DC100006467227960663441F1A406ECEF0F57CC6
-:10DC2000B71509D9525F52232568BED8D3A5AC7F5A
-:10DC30007209D77B77D42FCEB6CA2B8F2409BC3973
-:10DC4000E903747526B215A70FB55E367CD3BE38CE
-:10DC50007DA89F933EF2D65AFAC167DFAF88691755
-:10DC60009C267D7CD1F9CC7D1DCE576D625F4B7DAE
-:10DC7000C0F8F6F6BAC519ED8C91F7B592F83D5299
-:10DC80000F462A43BFFCC1FD4C0E2FD9FE2883DB73
-:10DC90007B836DBF94B1331B7B46C18712B1AFD775
-:10DCA0001CD7D7A2E8AFE5B2AAAAC9389E1BC763A2
-:10DCB00074B6317A7B12183F9C40DA66F850BA2B62
-:10DCC000D258875288DD2F209059DD1735529B8816
-:10DCD0000E52B42F267C1E5DB6E15F8DF86D75681F
-:10DCE0004C4A56F87D2D6E82C38DF3317A57343607
-:10DCF0002043851A84B42F8C2D38FC4806272762D0
-:10DD0000FDDB363AE8D22B21D33E98F48A68E5F45D
-:10DD1000FAEDD3932FCEF996D8E13DED7E41557FB4
-:10DD2000DDA28746EEA7C2EBE6FE30245E8503CC7B
-:10DD300018DAA70D2ED8279DCDF475D1A590604F88
-:10DD400037E0AB3944A764CF6C28AAD490AE609773
-:10DD5000A4229CA61E85680EB5AB90741A47F636B1
-:10DD600003B653820695E6FB91E112F49734F697D9
-:10DD7000B271BF22F6F72B42AF4195EBB57E136E21
-:10DD8000D2B3EA509DADE39D9BD8FF189D242BA4F0
-:10DD9000D4FDD2F0F7F5A817995CAAC7E716B9B277
-:10DDA0007D900FA2B45FF5E2DDC1C75E9A3C9DD1C4
-:10DDB000475F4C01145BEB1EF318B56CFCE7CF9189
-:10DDC000521E49C0CBE05C24E07CD6C81D8774DAC3
-:10DDD00057EB213A5E74C19F2248C6C7F7FD5ACD62
-:10DDE000442F8BE6B986E060FFADB6AE8FFDF7C37A
-:10DDF000C17D29A2794CB856562A0447DF3C2985B3
-:10DE0000F31CFADD7FDDFA2506E7B35552CCA313E8
-:10DE1000BC2160F3F519EF4746F53BCCF975D010FE
-:10DE20009FCEF9CDFD081702E115FE9DE195CD9736
-:10DE3000AC19E85F8F783E26C5D6B3F9B2E6B74C89
-:10DE4000C0798A6599E0DD38CF2B2B8C7EE0E531F7
-:10DE500032E23328F83CCBDDED9DC8E0EC9C24C3D6
-:10DE6000BDECD1C6D2D1E559BB439EA95ADC90582E
-:10DE70007F3DA9552AA3F045CA90EB32C9BB672460
-:10DE8000AE273B928BB5525CDE21BB1D887A296E92
-:10DE9000D1ABCC5E7C4662EB7745381D67D7C6B9FF
-:10DEA0009DD83786E45740EC47D6B4C55990C10E8B
-:10DEB0001E711D6CA24C7673B6CCE183A37C7CD51D
-:10DEC0001C3F67F4F13788F13F6C92A00FE153E3F8
-:10DED0005EDC7F302A889EFD823E616D0ED54DB995
-:10DEE000EB298B7715B37DF44465D0755C5F92F6B2
-:10DEF0007933DBE322068ABF96BD674D377FAA9050
-:10DF00005D922D9F4826191C9BF75F0B3AB353FD7A
-:10DF1000D114507DEAD55EC4CF66A614F8FCBD804E
-:10DF2000F30718D9A27C0D30F9AAA37CD57BD33294
-:10DF3000ABAB751033D8AB901693FC8C640E444B8E
-:10DF4000DA54F6BC7D2910FD025A1116FCB6475F63
-:10DF5000301406576723905DD319A9A1F5B597D75B
-:10DF6000788BD1DEA957E9397CC2F061DA214C1EE9
-:10DF7000FACBC0C0F936E7432A88BC549B47F4E883
-:10DF8000D6F8FAF5EDA5909ECEDE67CFDC8FF327AD
-:10DF90006F81D8243E25C935D5A40B359194D0BFC7
-:10DFA0006BD1629B32D0DD764864C9336C744A7A97
-:10DFB000D789B72C375C88F8EDAC60F45F3C7C9C6B
-:10DFC00022E41F466FA9D8E28B4A32CC532CEB4493
-:10DFD0001F665DFFD04DF08FD47EA81DB3337371E3
-:10DFE000684342BC406D84D69703837F0CACE78ABC
-:10DFF000F58E81666A179DDDBD1FF9ACC0E8AD46A0
-:10E000005C7C3774E9F3B46F70B786F108066DE98C
-:10E01000C9DC21396104B99C782F26937C0CC9692D
-:10E02000CD6003847C7D5152D63A901F91855D1856
-:10E03000C09B5ABBA7A27F19869884EF43313569EC
-:10E04000953F59C0EA36FB0F8E94CE24D2E27C0174
-:10E05000DA7E6419ADACF90C1CEF0E06908FF9C98D
-:10E060005B4209D2177FF285A7E1647F92E3596989
-:10E07000DEBF0CEDEE1B157F6C13D2438CEB072F2C
-:10E08000FB07E55FD66CD5268FB30D7B3DD7A13757
-:10E090001628415A6FF65740E803A37ED29821F81C
-:10E0A00018640D4837DB6A55C0F982410E9709673D
-:10E0B000AEF2495A0682E318C2C1D0437084CB80C5
-:10E0C000FC3D06CF31073CC71CF01CB3C2D3E2E5D0
-:10E0D000EB75FAFDCB65E1F733BF17F5E00978DBA7
-:10E0E000A8438231C6915E096BBC6DD0DB47469573
-:10E0F000061AEDBFD3EF67FBF39E4D3FCC16759D1F
-:10E10000D9F525049FFD3D14119D505D8141FF759A
-:10E11000F96C133FFA575F617C77ED6117205F312F
-:10E12000FE55F0BD4BBCBD56F8B1CB51FF33BD7DA4
-:10E1300015C4C308DF3B2093BDFC0EBC109E6E913E
-:10E140008B77C86EA1C7D9865AF9176251F4ABD53F
-:10E1500060679F1226349874269DA47D8B01F9DD9B
-:10E16000414E6F49F0B6917DD1C5F5A3E9F77DBD6C
-:10E17000DBAEAFAFD96EAF5F0D8BC7207D5D7DA7E6
-:10E180000B526CDC6BADF607DB9F6FC91AC1770DC4
-:10E1900034776A41B2B31A711DCB3550D14F5BF958
-:10E1A000B37B662E63EBD921F4E85B4CAEEB16BD76
-:10E1B000715D24E536CA87AF6FBD145BF42569E451
-:10E1C000F56D70F52D42FB20B9D5457E1D38FDB5A6
-:10E1D000BD0AF96B967E04EF955DF6F59D6AFDCE5E
-:10E1E000F5328F85D67BDDAE65A437475A8F7B9796
-:10E1F00064A432E8B7874D7D28E48B49DF265F278A
-:10E200006B80DB7BBFF7A5D6B3F97E83F291F6BFB7
-:10E21000F96C1E47699E85E5A9FAFDDBE7ECF7EF8F
-:10E220009FB3DF6B428E3BFBADF4F6BB713F57AB48
-:10E23000C93A491EB2A3BDAE66A390A1C2B5AF3A1A
-:10E240008DA698A55DD769B63B2C959C56BB3A79AF
-:10E2500094F18E0B3BE3A93DF7B9FB91FF76BFBA72
-:10E2600008F5FB37FE49012F5BD7F13D2148237D9F
-:10E27000AA2937DA2BD731BA4A513D3DF3628B5D7B
-:10E28000C52896C6FFC64321B20FAE7BC493AA67CA
-:10E29000FDAFFBE97F4C038687E3EB06FEA510E9A3
-:10E2A00075B7C4FDBF64FFB48BD9F3EB54B8229E9D
-:10E2B000814E6485F3CBDB3F0F34A2DD27EDDA7F9F
-:10E2C000398DDBFB5517CA65B3DD47B28BE665EDCB
-:10E2D0000C7C9F7C504A4D92387C0D5387FBDD6F40
-:10E2E0003F2871F8F6B9523E846F578F3BC1DAADC3
-:10E2F000DEF52ED1ED790FFD388C7858BD4FB1F990
-:10E30000BBAB772969CF342A5FC51235A3C4F86D3A
-:10E3100095E0D7557B57921E58D5BBF95DE4D7D50C
-:10E32000FB5C36B9CEF0124B235E5F5262F5587F2C
-:10E33000F487619DA1EAADE8EEB0564EE32E73334B
-:10E34000BABA68B6BD1F8EFF61CEF0F1000628AEE6
-:10E35000B9BA77239F0FB8BE31F9F42DFC4BFE708C
-:10E36000BD3145B19F3B9C806767521C72576E461A
-:10E370003FCED41726BF7EE3C7277626D9BC6F3F92
-:10E38000F2879D4906FF8AFF797FE7B7D9BAE0494E
-:10E390009F867268F5EEDF84C182F75A85FB61C7FC
-:10E3A0001FFCE1033B18BF1CFFAD87ECBAE34FFC39
-:10E3B000D7789DADFBF8C31F8D41BB73ED13E78F7D
-:10E3C00045FA5AFBD879636114FF01E935E5B1EEEE
-:10E3D0006B8AF655DF27611006E071513AF6E7E0E7
-:10E3E0005E258DA1DB775EF6A43C0C3FABD9B396DE
-:10E3F0004ADCAF95A487B07E33C3F3AA3D1BDE553C
-:10E40000A665C277B2508E62C9D8268AFB7DF145D7
-:10E41000E75461E98AE9481F3040F2DFD96FF5110E
-:10E42000B6AF678FBC8F27E01337E27FF59E8D7CF8
-:10E430005EC73EBE837F999341FF0FDBC715DFDFC9
-:10E44000812FF7E6D2BE8FB48F2B1FBB6454FFCC55
-:10E450009407A7C26F93C4E13A5B31D628C8578F9F
-:10E46000FCE8811D11BEBFF50C21C77F7C623C0614
-:10E4700097DF700D5C8E7272E0098F762FEB73DD83
-:10E48000132F119F1D7FEC79B74E72128212D37B2E
-:10E49000C761F04F1FEAC15512AFACFE4128ED092C
-:10E4A0000FEDD3AA54439D1EA6E7AFD2F314A7FFE6
-:10E4B00055A9FD4BA40CFBB65B29E1723995477851
-:10E4C00059A9F7B9B5A07D3FA5D9B88FAF2E40BAED
-:10E4D0001B691FCDF56BB8FE5996FDFC01E7DB917A
-:10E4E000F8F3788F4795B286F6F7B8B00F56A7A421
-:10E4F000972003DF02ACE3F08E70FE68964E7AF848
-:10E5000081831ECCFEE6BA4FC5D7A75ECF67C3D7BF
-:10E510009D8A6EA31B136F6F7F9259DEA7859C584F
-:10E5200005C9BA8289C3F5950AF16461F110BC9DF1
-:10E53000BD0AC9F1B7772964A73BE5C2AA11FCF16E
-:10E540005F29DCFE58B56FFF34945F6F1FF8B9A0E8
-:10E55000434EE7ABF6BCEA4E0AF99FB2CA7F1C2FC6
-:10E56000C37EBC2CE05EFD78E6F156EF7937E378A8
-:10E570006FA9C65711FEB7FA5C906443BCD5AB6473
-:10E580008C6F1C505CB6386E6768E6CB5918DF0C90
-:10E59000FB755CF7FA75C64B49B4435E7001D981CF
-:10E5A0006AEC0D0F7BBF3EE4A773EFF5E1AB41B71B
-:10E5B000E8E976079ED4689CFC603512AFE2B1D7DB
-:10E5C00094CD1F7569B20D6E509345184FF955F1F2
-:10E5D0007FA938EE7368FF9D31D4FE39153A72D9A0
-:10E5E00078CF1952AC0D32C4A71CE3C7E729A05B52
-:10E5F000E9CC2893ADF1D5F0819B282ED102CD69CD
-:10E600008C134111F4DE6F19F7EE560DD26C7EA813
-:10E610002B93ADF1554F73B3E1617014ADD54AD072
-:10E62000341B69FE71CDB23DAE2DE65F23E209B029
-:10E630006BF7EEDD6CDC3A7C57827E0C8F573177BE
-:10E640008AEC98F3841CFC6761071F90E287D0CFA7
-:10E6500032F46D2ACA39A9749B8AF6C4C24FBAD55E
-:10E66000E5167A5C58DA5684F472F853A531135DD6
-:10E670002D51395DB5156F28C2FE877D371671277C
-:10E68000344AEB2C10EB3C34EE9A603F1B777FF161
-:10E69000355B2633B8EAA20A60BCA52EB26C4B05E6
-:10E6A0005B7FC11125E663F582A6A49A983A7C9E09
-:10E6B0009D28EF19FEEE453C32F87FD01AA5FA03EB
-:10E6C000AD3A95BB5ACBA8DCDD1AA3F77B5A67534A
-:10E6D000BDB7B58ECA475AE3F43CFC2D7F02E977FB
-:10E6E0006F6B233DFF696B82CA1A95F3DB42810F82
-:10E6F000CBBAE91C6C497B781DC6514CFC39F15DE5
-:10E70000CB282E87CE0D241DF13D56E572C589D745
-:10E71000969620D9A53B25B0E173A6CAEDC8B8806E
-:10E72000E3903771A1CACAF7EA4ACBC9EE81780CE7
-:10E73000E5F44E297E5B05E397A7C6CD8A5AE56EC0
-:10E74000249888AB7943F5F15D3C3E334BE5F2A963
-:10E750000EDA0E6531F88C4F40473A33D779A05A1C
-:10E760002F42B978A08DC1538EEF6528B3D0993967
-:10E77000DE5C011F0433CBE921BAE5FC1F9D5BB6CB
-:10E780000DE3C4CCF18C4DD2C9EAB6F5DBA69A7183
-:10E790006F9DE8D8A413C63F4F8D8BD030DC5F6CE3
-:10E7A0002AE6EF7D9CCE5BFADFA5F856740CD8E222
-:10E7B0008D1D4D32F9393B8EF2B8F489A6926D93D6
-:10E7C00059FB6A8637F4DB73169666252C74BD45B3
-:10E7D000D0D30E6F3C4B1B457F758A7666FD155F67
-:10E7E000E23B88E7BF9FF0937CA4E71DAED4652889
-:10E7F0001F5B8E7AF475129E37C493B86FF122F6C0
-:10E800009C8174A26EAD879616E4E70F2D37EBDB83
-:10E81000CEB0F0792866E7EB9D2DA3C7A54DB8775C
-:10E8200022DCA3C4654DB8CDFD3851B764E01A1899
-:10E830008E07E7B8390B978C3AFFDDC8771EC2C345
-:10E840004ED5229F8A9A353A6730FB9BEB75F67757
-:10E85000AE77285FE1F4CE677A5D908BFBF9F0C765
-:10E86000E31F7D0E70CBE30ACAB12BD4442FEECB4D
-:10E870004C68A63AA803F9C82FBFF373FADFD1F9A1
-:10E88000403EF1919A2A46BD70BAF375403C5E8DC8
-:10E890007A2B26C7ACF2DC2C7FA19A718234C58F0B
-:10E8A000E888994D29076E8E66C2F3E0F845EADBE9
-:10E8B000D6F3A42D00DC4F4F7BE99C0303221AAB57
-:10E8C000171F86CA4D6CBCDD429E54ABDC2F9C7E6C
-:10E8D00058EF5178FC48690859F028E2A9661CAB4A
-:10E8E000036E068D7575AB15FBB1B9C9870DEEC406
-:10E8F0008B882F7754A7F3775724417C0522FE3D60
-:10E900004EC4E9CF1771C6FB5B789CB105E2179E38
-:10E91000817C7D4401F28F13136DFCEB5CE77E413B
-:10E9200057FF24F4DFCF85DC2E55F74B596CFCD014
-:10E930001BE9036156FE4CC8F1C7841C3FB0ED5F74
-:10E940008A319FA023E18E214EC355FEB4C4ECD082
-:10E950005B67BEA15FCBDA77744F6E47FC6C58CB18
-:10E96000E3F28FA2DC67FD1E16723FDCDC793D9D71
-:10E97000DB09F95264E60B08795224E4C9C16D2F12
-:10E980002EDB80EB4B78699E16483F8D717D582BAE
-:10E99000939D12EEFDDE0D38CE43AD061FB77BF71B
-:10E9A000DFA17D7F8F375DF9AF18FF9FE78E25517F
-:10E9B0004EA526D9E454B877DF8DD82EDCFBCC4D9C
-:10E9C000940F23F0E0799CAD9735C9BAFD703AC435
-:10E9D000DA15F6A7D1EC66FBDAB3700A1BAFB45EAA
-:10E9E000A670F51E297E5E08E9A1819F4367552C1C
-:10E9F00069C3F6DD2B5E4862FF31CF364BB8ED3987
-:10EA00007F776F35E2EFFEA2D79EAE66E5645731A1
-:10EA1000D141F0A89EFF43C0F1E3D16BF591E9F03D
-:10EA2000E08A358072CC73A74CE7F4F7DFB906AE05
-:10EA3000B1E65DAC5033C6C726BB3CFC3CEBCEC553
-:10EA40007D2867CDF3ABC295B55EE2FF67C1763E28
-:10EA50006B9E6399FD2BA4C464571E9D57F0732DC4
-:10EA6000D1BF40411B8F556F90391FC4D33E6BBE41
-:10EA700049F07A399E099E592E95E0698FD5EEFAB4
-:10EA800017369F3AEB52D2CBD06D87C3D98FC131A5
-:10EA90008BC3C1E133E118C74C82209BFFF6852F61
-:10EAA000E6237C1FD60DEA1B3FFAFF1DDF95D3132B
-:10EAB000D8FE6C6D97E9FCFE40D5012FE2714B55F5
-:10EAC0008D9FDB3F9CEE72041FFDA04E26BE3D5184
-:10EAD000C5CFFBE19393741EE612EF73F20E78E953
-:10EAE0000C236904AB6762FA81F9C7925FC0705367
-:10EAF00099F4DBE4A7DC9263CB371807058EBC954D
-:10EB000092A1F6E87FD71D91502F85C47974A97919
-:10EB1000BEAD1C8DE1FAEF32F562AB97CA9EE603FB
-:10EB20003E9DC1F58B664627B42E7B5E8AA7096899
-:10EB30005D05CDFC9C6D8BD6B7DFCDEA45DF65A8C2
-:10EB4000D7D19EEB25F902DD3C5FC03CEF98B4C203
-:10EB50009EB752E4C8B719969FF519FDCCEB5DF648
-:10EB60007CC313B0650AD1435F896D5F7AE630B725
-:10EB7000E6ECE1FEE6E0B8C29F82289773393E3E9C
-:10EB8000C7ADDF529AD05E0A5F58996D3D1FED7494
-:10EB9000713BE9D0EF3C80F1F80DB55E8AE398E770
-:10EBA000E8E67E6FC5A42BCC77687FC087F4B223DC
-:10EBB0005242E5C1B9CFF8FA890E793E8047AC6977
-:10EBC000DDDC67163631BCDE9327938EE9287A2187
-:10EBD0001FCF176FAFF5D2797F38D0DF7B90D58309
-:10EBE0007FEF8EE1F9F6FDD5E946ABFFFA908BDBBE
-:10EBF0005BDB5D425F6DB19F3F333ED88E7CE009A9
-:10EC0000C6E9FC52F68ABC09879F63E2237C205F39
-:10EC10002E9ECACB92A943F6F9DD826E760879BFA3
-:10EC200045C87BE738C54DDA0137DAFD2BB44A25F4
-:10EC3000035F4E68B1DB09E39AED7935854D76BA0D
-:10EC40000FC50A1C76459AF498A98F37F88213915C
-:10EC5000EE2B99BEE4F681265BCFDB9DFA78B76A8E
-:10EC6000EC7391BD7B7A764238106F467C3BEDDCCD
-:10EC70004302DF1F2BC601C46F408D1F72511E68F7
-:10EC80009CE48CD36E1806273038A78E0AE72F5DD8
-:10EC90009FC17E3AD5F9C09FE4F8F6E718C8F3B3F0
-:10ECA00040E45D84480E7784B8BFD2E1E27EC27B47
-:10ECB000625DFFE15268DC01415FF303D09C399F44
-:10ECC0008CC78B3E40C304DB8DCD9CBF8B160BBD28
-:10ECD0002FCCFCFE03173F679B3F61F479FE88F35E
-:10ECE000B0F257AAF1AECB728EF384CB78DF658990
-:10ECF000537CE8D2383F98FB21F2734DFB699F6A41
-:10ED00007C64ED6F96390B553ACF3D01FE98C2F009
-:10ED1000F3643EEC0526479E94043E7FE7A33C2027
-:10ED200013DF83F635CA0FD4034703298CA798FB5A
-:10ED3000609EC30CCA11D1FE4C3797278C6E026EB1
-:10ED40009A3FCECF0B214DF2A140D0CD0EDFD2DBCA
-:10ED50006A5979EBDCB75EC67C85771EF3E908D784
-:10ED6000D6AA6361ABDC84263BFD98CF5D1F16D22B
-:10ED700039FD37A544BEDBE247BA22036EECFFA49F
-:10ED8000A4933F97FC8D42F6C893526A0A192A2A27
-:10ED9000D079C693D746539B2CE71D4E3B3FC7D730
-:10EDA0007FD76A5C7713B39760F8BE9976FAA0DDD7
-:10EDB00011B5F78FBB41D8D96CB98CAF2BC4BA63EE
-:10EDC000AAA1201C332041E52CD0A964FE40A59BBC
-:10EDD000B59F0E03F9C847EB02E3BFC4ED8CFF33C8
-:10EDE000BC197F8D781BA25BBBDE36CF1DF2041EE3
-:10EDF00042D04CE7EFBF685CBE71129BCF5D14241C
-:10EE00007B38AFB1FD7A398CD97E7D1AFA9B79E2D5
-:10EE10003C1C9670FD6C9E4FE7D4DBF5B9537F7BAD
-:10EE200084BDE11941AF3BE5E6487A7D85DBAED78D
-:10EE300007E3C723C83F67FCF8D4F24FBFADB6184D
-:10EE4000F3348C976AD1AE9BA752BC333C11AE8889
-:10EE50005BE8E1F76E223A56F2BC994D8C5F53673E
-:10EE6000703E07F413024C01E179C2383985F93656
-:10EE70001B92A93ACC3FDBA04ED2ACFB583D8EDBB7
-:10EE8000B35B6BFC4D56BBF60F7E178DFFCD40F587
-:10EE90003348C7E5C1540DB97B067304C7F0BC4BBA
-:10EEA000DCB7B334E8C773580F70BDCD38C2CBF5AB
-:10EEB0004AADF63AE56726E0646034BD60CFC7DC52
-:10EEC000ADA6D6F9111F111E7F096D97283947E9A4
-:10EED00035D298CB5515587CB79BEBAF329C67FF6A
-:10EEE0004C66EEB2F67FDCEF263BA73754A8A23D76
-:10EEF000F9A4BCFCFB68070EFCD603789ED2FBE9A4
-:10EF00009974AFA137F4A5054807BD1230CF96AD6F
-:10EF10009FF10F4FFE8100C6EDC3E7198071CB81D1
-:10EF20005F40EC5E36BF2BFA689CF276C108C8B32E
-:10EF3000593F1F7461FE4AECCFFEF7CF6574F74866
-:10EF4000B0F28EB361280E60FAFFB5FEC4A3086765
-:10EF5000C7987F6B423EEB62702A6487195184BB6D
-:10EF6000324F26FE83BC606A127B5E7D38528BF97D
-:10EF700068D56A054A1A0607DFEF577C892710FF14
-:10EF8000B55A436D366B5F7544277B6541F4FA4390
-:10EF9000589F7994D73BDC40F620F22F58F8AFFA0F
-:10EFA000C3F1B4BEC3428EB7478D3E431A653F34AA
-:10EFB000D5719FC39EC762A5036DA68D0E122E2B21
-:10EFC0001DCC667430D54A0786F459E8E07B42DEF2
-:10EFD0009E9A5F389FDCA870BE194EF7CDDE9CF27A
-:10EFE000E1FC61CEBBA92A2782E7AB261F68B36E7E
-:10EFF000D6B0EE59E68E23DF997C61F283E21BE402
-:10F000008B8B7C6C7F9704F5F333F105FA7156FA1C
-:10F01000BF78043E5904038730E77E910AC92C2645
-:10F02000427E35E78DD2F116BA77E269D13C098E7E
-:10F0300059E4D1C993BC6EC1A3369807AD9C3EBEBE
-:10F040005F50F58E8885EF3A99FD8C4661971C8359
-:10F05000BC62E4BBE541CF0CBCDFF07094E2FB9EE8
-:10F060007813E5ADCD7A3B7035A3C33F8E91755CC7
-:10F070007C87BEFC21E2DF97038076DBD699D74DF3
-:10F0800040FFE48FD72626609C7323C3FF31326E86
-:10F09000526365CA85EA1FCBCFCBF4282F1351FEEC
-:10F0A0001CC4FB94A81BA25D3FB563FB6C9387DB7C
-:10F0B000BD5C0E6EF7723B70A3BBDB8BFC3550EC76
-:10F0C000A5F354E7FACFF5707E38D70355B108CDD4
-:10F0D00046F1960EAF52D7C3E350E973D9F37327C5
-:10F0E00096DD6BD58F66BF3B5A53F1D726E17A7612
-:10F0F00051995B9F023C37F09725758CDB7BD7419C
-:10F1000022937DB8C3CBE304DE03FF40E74DB9A5EE
-:10F1100031F24F23F56C3CCBBE2E6228CC62728656
-:10F120002DCB407AEFD0FD64AF2D8AD4BCA94E1B05
-:10F130004E07F8E798653FBDFFA3247AB91F477EC5
-:10F14000C85AE1F7D59678897F3A5ADC3D184FBB0B
-:10F15000CC934DF8FA2052336A9E2DFA5749460F48
-:10F1600029E65F6189E720C933F83908D6F11C0424
-:10F170004B3C07C112CF41F03D9E8360FD27AD0699
-:10F18000D5F13C04EB781E82753C07C13A9E836042
-:10F19000B9AFB589CA7F6C6DA6F78FB7B6509DED34
-:10F1A00013D9E350968C2E6678EEBAC96DE0F976E5
-:10F1B000B7D88F8346492EEEA32FC2FD53DFB3B7D6
-:10F1C00003AEC717E571A5CEE8ED70252BBB6684AD
-:10F1D000BA30E0E57D2848A54FBD0330BEB0534AA4
-:10F1E000366124EFC60DFBCE53991E2F8D5E5F93C3
-:10F1F000C3EAB76C78723DE6F74CD6DB62CBB5A1BB
-:10F20000BA1EAABCEE614B7D42798FEA67EDD779D1
-:10F21000F6AF477E4638D0C8DBB2E1E0796DA58C09
-:10F22000984A80EE790C14BB53488F57E17E4D42CB
-:10F23000F8B9FDFF65581F457F7A82EEAE443E6205
-:10F24000EDD39C7E4FAF7D371E66CD18DE6FB47652
-:10F2500072D569B5036594F1F0BD34CA381DB05E4E
-:10F26000C33B679B91E731EFC817207FAECBC5F951
-:10F27000B7CBC7CBFF167C7BC85B13F7B232EEE58A
-:10F28000FBDAE58BD7613C7460AA4C71855E171B75
-:10F290000293775B8A7F5DC2E6FDE6332A607CFAE3
-:10F2A000871ECEFF932684B85EFDB697F4EA051359
-:10F2B0007EDC9EC3EA93EE8BC5504F6E86981FE9A5
-:10F2C00024B985F3FB8FAA26E634B0E667CD782C07
-:10F2D00007E30DAA802385F79258BDADE3EA09182C
-:10F2E0000FF9E3F35C7EFD54CCD3E3EA6BA6FD9CFF
-:10F2F0001124FB82618CEC87B6A84AE7F7723E2F97
-:10F30000DD2EED6FB09D9B29E82483C7FDE92C2FEE
-:10F31000F9E91F7AC47DB63EB22BDCBE8496CD9E41
-:10F32000772765E2F7F59A3F8529FB9B839574BFA4
-:10F330003659AE527EF6E6721EC70B842E4DA13DA5
-:10F3400071DB7E1F970F412FE569A5CAF71EAE89B5
-:10F3500060296BC8EF2963711DE15D9335CAF762BF
-:10F360007FA3F74D11CAE7DE0C625F9A64F2173B88
-:10F37000C6FCF95FCFC673F1AF6B3171C788F22558
-:10F38000C90492F1BEEFC08100C2F3B7E6FDA4FE4E
-:10F390007501D6BE7DB916C37D98A6D5D4611CB1C2
-:10F3A00043ABF1225F05A6D67A97911C1ACC67A6CB
-:10F3B0007B70EDE5DCAEC5F7C897D00E87F0DE4B6D
-:10F3C000A1906581EC4A09EDA18E7A0A2F61BEAF4A
-:10F3D0002D3FB33DE742CA7F5716E5109C1D60786C
-:10F3E000B17DB25E25FD5518F4A6D1DE2B34E38B3A
-:10F3F000989A6CF1377257D8F39BF39B54DBFD8FCF
-:10F40000B1097B3D4FF80F798E3C68C96B9E23DABA
-:10F41000F1E45C6F6EE4DE6C8437172F34EBC3D7F6
-:10F420007347A4B201D759A8F909EEA8B6AE1AE5F8
-:10F43000D758686E43BAFBCCF03AE09C56DEDE87C4
-:10F44000FB3E4D57E9BEC3D930B00EC7DD2CE8BC3A
-:10F45000ABD8AE4F7FE851C43970CD1CE4478C87E0
-:10F46000252DF31727FD90B4CC37B12BC7569FD469
-:10F470005D606B7FC6F612DBFB29A9336DEFCFDA37
-:10F480005569AB4FED9D6B6B7FF6BE1A5BBD227D60
-:10F49000A1ADFDF4C38B6DF5197D7F636B3FEBE58B
-:10F4A000E5B6F773FAAFB3BDFFD21B6B6CF573060D
-:10F4B000BE656B6FDAD74EBD38DDFBF9EC6A0FDE47
-:10F4C00007B3C50FED76BBD3EEF6FECF7A7D1DCA2E
-:10F4D000B5B09BE85B453DCEEA6B6EE27E8F777EF2
-:10F4E0004C47B93245D063246818B86FD5612FE90D
-:10F4F0000335C8DBA9C10564778CDFCEE4D174B4D1
-:10F500001661F07D00E5726B325EEA1A82DBA77548
-:10F51000D3DD86EA701DC5DFCDFEAA66402284F3E6
-:10F52000E93CFF887995D8CEA7B3FE96753C29CBE8
-:10F5300074157C80F967F75AFCB391FC31A7FF750D
-:10F54000BAFED67819FC58F648F1662CCB9B9FAFD3
-:10F55000C1343CE6875DE565FBB3D51D6FEA61E329
-:10F560006E2DF1F3F332E1877515F7125F0C14ABD2
-:10F57000A45F40D5CB175BE260B709BB32E0BD8B1F
-:10F58000FC40B564F6611DF1DEA6527C62B3C4E3B3
-:10F590002849B60FA8D776CE7DE3DD5BD8736F8997
-:10F5A000B7D0CBE451ECA0DBC073D23B045E4BB4CC
-:10F5B0008A1A667131FBA2E1009693756667B0B254
-:10F5C000AC6CDB012CDBBC2534DF99B1876B50962A
-:10F5D00078E773FB4F99E64EADC3FDD3381C23D1BA
-:10F5E000999AB39D9F6795AAAF23BDA1557E521EE0
-:10F5F000A2031FD2814425D18F2F1224BDE1C30362
-:10F600001FACAB522AC0DE474A0D09F333AAC3DB55
-:10F61000E97CCE97B6DBABCC2FBD0DF11AA9B7EFC5
-:10F6200077C0BB93E06B97789CB62B5B7FB686C1A7
-:10F63000DF9557928331168C633458E4CD76A14F11
-:10F64000AFF0C9A6FE2779E343DEC81BB27718FDE9
-:10F650006F9727227CDD8072CB77733720BDFB3418
-:10F66000B69B686F7F2749F46FDABB3708DEAA2D97
-:10F6700069A473B1F7239564DFFA5A7E92117FBEB5
-:10F680007E058CE923E3353C7907E97B2871EB683B
-:10F6900057B4E86EA327D339A047F81F981F82F00C
-:10F6A00088FC902E810FF35CEE7D336F4A9C07DF60
-:10F6B000900DB6F3C11BF22AC78E668FFB987F9818
-:10F6C000B0C0BB91CD8378E9F8A4A12E4EE784C0E9
-:10F6D000EFB37D5ADE43F7863F59AFE339E62C811D
-:10F6E000EF733D1CBFE3DD407EC27918E7988E5E64
-:10F6F000E997EB902FCDB8C89BDE1CC27F2C094A3E
-:10F7000033D92B2E536FC927CF269875B719CF241D
-:10F710009397EB35F6EF7EBC7F31B1CB7EAF69526C
-:10F72000B7BD7EC6767B7D4ACA5E6756F311B40BC1
-:10F730001A80E3E7AC5DF6F70D663CB096DFC7F0E4
-:10F74000B2994F72FD6BBBFF0A42FF9B71D771BD2F
-:10F75000E96A14AF456BED7AB540E8F90287FEAC73
-:10F760000C29140FA83E1C3984F6A319A779C5A744
-:10F77000DBE29F66BCC529CFFD47B7017B437E75A1
-:10F78000C2C3E31009E6DFB41489F8C6385EBA14C0
-:10F79000FDB9A564A7359F81F2E99037F1B197E2F1
-:10F7A000CEF6FB12EFD5A9BF90743E4FC232CF8D7B
-:10F7B00065C90BF8F253947F62C63B4C7F5E091A11
-:10F7C000711C6F73EC85E683186FFAAD07709CF3BC
-:10F7D00095670FB7B2FA9A712AE54B6AB3567CDF88
-:10F7E0008FF1427CCFEAD5C5FA58A2FFA75DE4D7D6
-:10F7F0006F10F46CDEE331E323519FD03F3ED32EF4
-:10F800004AFA453EAC1FEDDCB37631D96CD3733C7C
-:10F81000EE66C6D7A6F6DADFF78294ABB1FD3BBB46
-:10F82000312573BBCA08565BE2EF678AFD9AB6348E
-:10F830007DFB5256DF03A94AFCAE4485A08BD8213C
-:10F84000FBBDB13120D1FD82314794588AB59FF676
-:10F85000B8FD7DB9E35ED999CE7B668E787048811C
-:10F860007797B1F9B6E8CD12CACF2D4B99CCC2F932
-:10F870007D22CF78324C46FA3B5F09C6D288DFDF63
-:10F8800028A4373CAF9EF1D232D4E7CFF33C166DBB
-:10F89000A2BEAD96D5B57F55483F6901A8A8080E10
-:10F8A000C58FBF773206EDAEA178D46EB6AFA59303
-:10F8B000D0BFF602EA959FB0FDC57A2FF3C7B1FE1F
-:10F8C00008F3C7B1DCCBFC717CFE53E68F637D1F70
-:10F8D000F3C7B1FC47E68FE3F3C7993F8EF56F0698
-:10F8E000AA1738E359D6F8DE503CAB5F32E359280B
-:10F8F0004A3E70EBB4EF8371AD048F6B9D7A1CC3ED
-:10F900001C87E286C3C611F1C3776EFAB707F09E73
-:10F91000F5CA19EBBAF0BEACD765C6CF789E84990C
-:10F92000FF6CF2DFCABDD7D3B9B13BFF4833EEC796
-:10F93000DEAA207D8BC8ED4A68281F9DFE97E977D7
-:10F9400039ED5FB374EA233FDA01D3D14EEAA6B8AA
-:10F95000CF261794D1FD59C91F43BE70C62B4D3E0B
-:10F960007ED15792F1BED4601EAD88CF7820E5C518
-:10F97000B89A5B12EB14799E24C2D8109B919F2DEC
-:10F9800079C9C1F234C539824183EC2F89D96564C4
-:10F99000A7698928C6A13A47C89BBD4FF0675BBEDF
-:10F9A0009BBE37D199CFF3046A8B6251ECBF3E7F87
-:10F9B00066D49A476BE6F91E0ACDF4F65BC65B1374
-:10F9C0002A19554F294CAFEAA3E855C5C3F3DCD734
-:10F9D0001F98E3C5FCE54DC1E57D685F6D8A46E88B
-:10F9E0009EFBFEFC99647F0CB68FCEA63C6725C8B3
-:10F9F000ED5625EA25BB55C5F5970FB537DBB5FAAA
-:10FA0000385D31F6A3F85C20D84BED3C6A9CE21FD0
-:10FA10009E08D0B996C7CBF30A82CCBFF6DAE2AB28
-:10FA20007CDE1611F7DDA427E2D86F5354D5511CA4
-:10FA30006D2AAB243CAF17785E9F67EAFD18D91B8F
-:10FA40003F137836C7592FFCF5F54D6EB2BBE22D4A
-:10FA5000D9466D2EE56DEEF1E1F8C17BBD9807EF5B
-:10FA6000CEAF1A75DC0338EE8CD1C67DB5A6763ADA
-:10FA70008DFB331CD71D5AAEE1B8AE11F2F39F13C4
-:10FA8000707E5EFB92614EA3733130F56D2A6A3D44
-:10FA90004F76967EB413A70FEFB752EF5F80F9C190
-:10FAA0002A24EBFCCAF0FB0DABF6F1EF556D55FBCC
-:10FAB000C8DED9FA8994F19EC418BF24CE6B07FD25
-:10FAC000709BBD5228F8A950BCD7D15E2946BFD241
-:10FAD0006E5F4C3F6CAFCFE8B3D767BDECB4578CCB
-:10FAE000DFA0BDB244C8BB3E269F7972C5808A7232
-:10FAF000209E4C5523DC0DD0DB86E7992E85E7113F
-:10FB00002C11FAEA22A1CF82FE6C82BFB0C96FF33A
-:10FB100013CDEF6E1489F1C7D51EBABE1D856BDCFF
-:10FB2000B47F74F22FC72D7CA49AC4A4C30E6A308C
-:10FB3000ECF7562F72D8394E7BA85AEDA1BCCC02F7
-:10FB400047FCC13CCFC475E2FD5DE7FC9F755E7369
-:10FB5000BC1D4C6FA1BD627ECF80BEF7C5FA8F532E
-:10FB6000D3522C48795E940F58B8168C9E0C747C36
-:10FB70008ED8F761784B9E4B783B4F3C2B08F2EFC9
-:10FB8000A514D42A29BD98E789A13C59BC82AD8728
-:10FB9000ECE593745E6DB6CFC9EEA5BCB21DF5124F
-:10FBA000F71F93407688B9CF3B82FC9E4DC33952F4
-:10FBB0004AC6FECD25343FC15532B4BF0C4FC738BD
-:10FBC0009E781EDAC575F6FB400D0E7BC3A4878BAD
-:10FBD0001CCFFB7DDC2F32F9E09D392F4F1ECFE08B
-:10FBE000582925EB02CAE9EB490B7FB84E221FE2E8
-:10FBF000DFC7D052883F0E781FD5288F20BBFF2E3D
-:10FC00006024D9E08764ED3C807FF60F9C25B17AB3
-:10FC1000E3A6B33BBAC6E1B5C6811FA151E6D950F0
-:10FC2000757EDD394375FF2683EA11310F732D92FE
-:10FC30007CBF2DDF3760F0EEC43C02B44B0DD8A67C
-:10FC4000600EA6AC6D8B150FF5CBC17ED228FDE200
-:10FC5000B04DCDD02F68F663E8EA34BF0752822555
-:10FC60007F2F0B78ACF3AB88374D0FD27D9F05AA61
-:10FC700086E73F5F148E31A75A7702B6B9260EEF9A
-:10FC8000C7C06E33E19733C39FC2F7D6F95DA3C0F7
-:10FC9000FF97C6C7A9C6738BF79F193ED67CDD9820
-:10FCA00091D78B70B9E8BB1A7A50B68C73DBFE8F94
-:10FCB000287EAD5E06749F4775195A8CD179B97646
-:10FCC00027F9E16A76AD8676C04656473B60636F9A
-:10FCD00037C5A9CB4B6FEF42A22F4FFB01E5C154B3
-:10FCE000D0B2F7B071A76A2A66EC807ACE2119E308
-:10FCF000DEF015A0FB2459FBFDFCFB17C573EF4399
-:10FD0000FF283BDB4B71A040F6CCFBB8B1CBE3C185
-:10FD100026FC81EA23351827571B2086ACA84A29E0
-:10FD2000A846269B02740EE137F6DE88F73299E288
-:10FD300023FD44DF8440BD2AE2E26339C940975B7A
-:10FD40006B403F21F98C4AF1F7B17864C188B2BCAD
-:10FD50003C671BC2539E600348083F8F6B4D4DC8E4
-:10FD6000B1341BBFF25DDE0F7EC9EF11305FA2F12F
-:10FD7000B1E0105E4DB93256C4CBA34BEDF164181F
-:10FD8000606B66FD2B7FB9F87E8C278C1926BFB976
-:10FD90007F6D7E6F27EB5D883F46E79A76BDE11762
-:10FDA000DFB5F03BBE97303968BFBF37CC6FF84E38
-:10FDB0009CF48007625E37D9174BC96E30FD911DE8
-:10FDC000D810E3FFE3807FFFCAD97F26EF0F51EE03
-:10FDD0009F78FCCCCCAB64EFAFF31B9417E4617558
-:10FDE0008647C90DDE7CF6BC40E67191360954ACFD
-:10FDF0000FCD97A6F3FC0D52AC2B260DF9BFEBB53A
-:10FE000018E519C0DA1C9BBD6CE6ABAEB9B6786CD0
-:10FE10000E2BB386EE0D69488F6BF24AC97E0EE752
-:10FE2000F67F0DE5EB47FE5BCFF7A23CC53C87B9FB
-:10FE30004C286FEEEA483279EBF9B010748B5DE62E
-:10FE4000519B290EE6F970BCED79BAD57ECFD0086A
-:10FE5000CAB5384F514027BC5683D68EFDAAC17E05
-:10FE60009FD0F361BECD4E1F1ABFC8F63CCDEC1932
-:10FE7000EB772C461E3F007A9975FC89238C3FD97D
-:10FE800031BE9671FCA171736DE376A83C3E9A8CED
-:10FE9000F869DF9DF64055A0A63890374AFC3EC071
-:10FEA000E3F71BA2CD14BFAF01C6F08C4ECEFDE42C
-:10FEB00098C2EFBD01D96D50648FDFD708FA95194C
-:10FEC0004520FD9EABDABF1F361F9CDF13B3DB431B
-:10FED0002F21A3B079E550551FC5F13F0AEAE87F0D
-:10FEE0008D642FF7B502C58FE707FA6FC073EAFA82
-:10FEF000C0F75D1DB3459E6C01C0DF04F69E8FF711
-:10FF000003FBC4BDBE8E884C7889D78CA57B3AE6AE
-:10FF10003871374C42791897797E02FD61F3F7E525
-:10FF200015D8F21CCCD2790FB4C190E2A516BAE96B
-:10FF300093195EADF39D57D8A358D611F7C00C9A0C
-:10FF40004FD8B983F38DF97CF33D2FE24EE67C0D5B
-:10FF50000BECEB6B706BB4BE06C1BFE67CCFE3FA73
-:10FF600032E0F794F3C99C6E06E7BBC0BEBE068FB5
-:10FF700046EB6B10DF031E9C6FCCE79B6F83AB39A6
-:10FF80008176DB3689F3FF77373FDE81FBFA7EFD32
-:10FF90009A28E90361175F841D58BB8B543EDFA28A
-:10FFA000226FAACD32DF0E26070C910F6F78307FBB
-:10FFB00043A37AAA354AE5BDCCCE36287FA38CDE92
-:10FFC0003FD01AA3FAAED6D9549AE394CDE6DFA770
-:10FFD00099324FCA686FFF32C0FDC66DF9DA6557B6
-:10FFE000A15EAAF6F37B93B3BF0486C5FE6506F156
-:10FFF000011F9EBF5C0A15A8DB266FE770476AC722
-:020000021000EC
-:10000000A470FFFC1587FA5A59DDE372E9A84F196D
-:100010002FC433F9A98703DC0FF7B8B9BC87B9FC43
-:100020007B878B845E01A55E72213E2ECAA6F3FEFD
-:10003000C54B8C90C6F0B644927E532AF414DE6F02
-:10004000B9446C95D3CE8FA0C660E3460C2585DFFE
-:1000500031BAA4E87023EAE578E862F20FE2AC6313
-:100060000E1BE712A127AB5FF500E63BC0F96E82DD
-:1000700063C912BB3DBFCD97D6D03ED9561101DC26
-:100080009FC5F5F6F71E37E7C3B8E3FB068B4EF1C5
-:10009000BD03FAE656867C53677CF24040E4AB8AA7
-:1000A00038E40928BFAD165F164546FDDEC14D0197
-:1000B0002E9F4CFD369C8E393C7F10726C47EB3E78
-:1000C0008A8799F015A82909E57561D33E5B5E130F
-:1000D000432C19C3661C1E943D15E88738D7B343DB
-:1000E000DA933FDAF74D0A407DBDBF4C7CFF531ACF
-:1000F000BEEE5703F6F8EB0998F75C2964E21F1E81
-:10010000775D745889B5E9437831F1F0FFCD475BED
-:100110001166563E77DE0755DC7F2BB27D67D3FC38
-:100120007EF0C5837515540B3D5F749D9BEC1930B3
-:1001300006CA91EE8E9C13E0DF7B33ED97F46F657A
-:10014000B45FBEF8F8C6385B7EA71877A4FD72E6E8
-:100150001B5AEE8B0EE5C3637E89C4CFB10A30CF44
-:100160002DCC9F1FB3DB99B63CB7F5FB1F9430CE67
-:100170007717E6E359CEAD0B993F8FF1AEA215F696
-:10018000BC3A275C665ED5E07DDB794BB43D3A7DB9
-:100190005FB11B3F58D3B53D19074B1EA5798FD0D2
-:1001A000F4A79DF7079520FFCE5E54DCCB70C68385
-:1001B0006F94935AB18479AB296F352BA7E72466E6
-:1001C000E195F61B95641D3E57C6CE6D423C2C6DE5
-:1001D000F9760CE3775A6EE6B8F452A1BF6B829CB5
-:1001E0006E8EBAD2E3308E7D4D4E4D4D302F43FB97
-:1001F00096EFD078F347F86EFDD7823C6E7297D0B9
-:10020000E7CEF74BC4FBAFAE94E93B183E08A5A47C
-:10021000623C37EE9E4DF7F656ED8865BA1FF75CE7
-:100220003871B1151E5F29BFA70DD03B07F1B5F19D
-:10023000E3BB7B1F62A8CCF93848723447E1E35A2C
-:10024000FA7F2D386378FF273F7A91EE373F89F7A1
-:1002500059E6E2F6DDB300E3DF5BCD3A86E4B19E1A
-:100260006DD6BFCDDF0FD6672CA866FDB7220D3245
-:1002700022FBFD960B3A51CF6E95407C87BC6E01F8
-:10028000FA875B5DBCFD3F89F7F32F7CFBBEDB503B
-:10029000DECF74931FB855D823267CFD417E1FA95D
-:1002A000FF14F8BC45EC5B10F119F94CF8BC2513B0
-:1002B0003EFB738CEF209E7C9849C140F07DEC5D45
-:1002C0008BF9C6FFD00AB1ABD81AEE8AED7DF036B5
-:1002D000A0FE1D99F019CF313AF17970E5315A5FDE
-:1002E000A83488EE0D6C9C05344E06386E1D6D5F8B
-:1002F0009FCAE272EC93102F7384FDA778FAA2785C
-:10030000FEAF557DEF068DC991CEE2EEC64CF47D71
-:100310007788DBE5D923C4AB1F15F8FDBD16DF894F
-:1003200070B76BB7D37758DD12B71B36CEEE07C95F
-:10033000D2EF85106FCFE07E00E176CFE1DF470D91
-:1003400031BC638259A88AC3BF513F0298FF1D8AFE
-:100350001EA1BCD050553FF13B5D6928E07485FE7D
-:100360009A57D8678F6E59BA00E54C8E62D2E1F188
-:100370004EA41B65A84E74D493C3FBBFBCF578276D
-:10038000FA733B99FD82DFEB4816F0BC11E7FA9E49
-:1003900014F0DE13367E8EEB1B864F4FFF7DB7B118
-:1003A000FE5B27F17B39F3E5BEC62B912E2F0C9215
-:1003B000FDC59E375ABF93F307416F7F0872FB69F3
-:1003C000EB475E7AEFDC8F91E8F5D702DF9F835E23
-:1003D0007F9D89DE18BD1E71D0EB0790995E5FC9C5
-:1003E00044678C5E8F66C28BB3AE80B11DCF67D57C
-:1003F0003F2FD885E3A95F9EB7FD21562A7FBE39DE
-:1004000049BB19936CF750CD792AA4C45B418B7C0E
-:1004100037BFE34D391099C69D35733BCAB1D31828
-:10042000F704C2ED1CF7208E3B03E54B3091E9FB4E
-:1004300046DF0FF1BCF107C5BA46E29BE74EC13774
-:100440003F0D713A607CE30A9D06DFBC2EDAB37D76
-:1004500008854E8B6FEEA4D257CAF986AE2BCF1DFE
-:10046000CE3700AF74A23CEE2CE67C313EF44667FA
-:10047000B2C8C247F011BD5786EA24BF4D3E7A3B51
-:10048000F411F191B37F7884EF594D1A5C47BC1495
-:10049000D76D9CA5B5F3FB38FDA4B77B6060BF8723
-:1004A000F26C795EAB3F9934B8D9D007F87DC4A916
-:1004B000821F77A20F867ECE4C116752FB60716857
-:1004C000383F87AAD255D6EF0D1C12F37F1A8A57F0
-:1004D000E1FC3DD03F05EDAF91F6698E98EF7BD9F9
-:1004E000C69C50063A3F951EBA3CC4F3372F17F30B
-:1004F000E67CEC6D46FBD3C9EFF357FDE39B0F8C15
-:1005000032CED744FF8B439F9BFF2F0E65E6FF251E
-:10051000213BFF57E1773A33F0FFD74299F97F69E2
-:1005200026BC7C017E6F0A65E0CBEAD3C4F78F045A
-:10053000BE7FF405F1BD51F46FFBFCF86E1B01DFCB
-:10054000EB108FA781EF8D23E07B5388EC95470854
-:10055000FE901EA43876D72CD82B956484E376EBD6
-:10056000385E9D8FC3F0FE81C4E87EFE9FBB62991A
-:10057000BE4FC3FAFD83157EB3DF9C90B8270DFAFA
-:10058000F5E89FDFF5E520C5FB997EBC27F497953C
-:10059000FB0F8632C8FDF93297431F6FD9DB89FA0A
-:1005A000FE0B8CFF58263A5B2DE03E955D7058D0CF
-:1005B000075BF7E3A1BCE1F2AF47FC9ECA3DE1C493
-:1005C000C110F957FD0B515EEDFC568E84F1A82247
-:1005D000232DA19FF073A1C72A433ABFCF20FAED84
-:1005E00054D312E6B3EC6CD624BC6F6419EF97A118
-:1005F00019238FE78483C1D7172279673C8FFDE6E3
-:100600000CD9819FC94E6ACC367E1B22BB2DFE0AB7
-:10061000C9ED33EC72DB5C871CEFA6BC17DFECCCBA
-:10062000BFF7F2F3A02AECBFF86B56F97F34A409A8
-:100630003F948FF759F50F83EF9D10D72BFF8DA5B2
-:10064000133E275E4E056711EA793EDE4799F49422
-:10065000733CD36F35F7C98D3AC912D7718707ED4F
-:100660005E5718E549874CF790160979B26876B657
-:10067000B0DB353F8E7F978893DFB5E2F66A3CEFBB
-:10068000EEB959AB4014143471BDA7AF184FF14FF8
-:100690002D2CD9CE93CD72B0BFBB770A7E9F9CCD57
-:1006A0001BC179CF9D0769F41BB3D06EA078844637
-:1006B000BFF795E3E98E62FC74A3D4DDB81CF5EABC
-:1006C000C220BF57125D728AEFBCF1F893B96E88F1
-:1006D000569DA27D1BB5D702DDF49D8CD36EEFE94C
-:1006E0006ECC945F32232C9B788D8D8AD76884E200
-:1006F0005A267E87CFC3F7AF3ADE2C21BE435592F0
-:100700008657AF428C4ED05E924BFB289FE92B550B
-:100710009C5E80F925A37F67A3D3B4D7CE0BE77D7A
-:1007200071B8CC7623CF27DA39EE2BE0B917C5673D
-:10073000835C8E5143567FEF706EC6B8BF596E68AA
-:10074000D58A549775FC148F430EE64FC7A2686F85
-:10075000B500A747887AC90EA3EFB95BF6F39A30C4
-:10076000CF73DE99155F1E26F862F4FD42D0B4D334
-:100770005A0FEB772DEE2BA8AC5FE8F4FB8D5C9A5B
-:10078000BF7317D3E396EFA599FC3A369104FC1E8C
-:100790008DBF1C3489ED7F24649E13723AB8336890
-:1007A000D69374481E2FEDE679F9BA49275CAE68F6
-:1007B000815E43AE00D81EAEBF203A858D579A8821
-:1007C000E2A7F759FD2995E42FAF03D43F7588F4CC
-:1007D0008576A614637A4AAD7BEAF038E057A5C85F
-:1007E000CFAD7B8AE4DD601DD298CFDCE31FAC1B6C
-:1007F000DE28AB970CD69358DF29F4E4F670DD536E
-:10080000EDC4FFF13BACFC512DE8F02F4D7F3D7A5C
-:10081000BB86F70C925195ECAA8D0E7AF8E7B09B47
-:10082000F05FA525EE477A5874F3808A5757BCC508
-:100830009110F2C384E80749FCCEDE8479224DB5DD
-:10084000947FCFA127BA96F8B207F705785A02C667
-:100850002787F62795797FCA52B43F7E9DBF97B10F
-:100860004EFE368FBF05CA383F6B1E1EDFDB27E406
-:10087000C9536145945CBE6645DBC99FF2D6C91475
-:100880003FCEAA936D7A837E298FDAAB367AEBCF8F
-:10089000491C0C5BE523A4E3656C1DFE29911C3CFF
-:1008A0007FA92E53D7A2BFFD7D61FFB17DBA97E42A
-:1008B0004545C49FE0FBF64CC67D137839D5BEBDD7
-:1008C000D89A88D5BA46DEB74B2FE3F9F4CEE7BF06
-:1008D000137838DEF89FDF437659E91DA0EF7E7765
-:1008E00095B6511CD68CBB7AF656A70BF5A17CC0E9
-:1008F0007581F03C2C9DF3BEF8C9DF6B744FE42387
-:100900004FC6F324258BE3F9486B23F5631B4CBFDB
-:10091000D372052E85E7B1D9EEF199F7112E074E66
-:100920000C4BE2CBBE82726879A342DF77B802EC4F
-:10093000F914979B795F2D667E1CCFFB4A40F60227
-:1009400064C36549C7EF4C406C01DEB71FF6FB136B
-:10095000E27CEBEB8EBC89AF362E8BD58A76EFD35B
-:10096000FF5384BF253A97BF4B62FC3B3F97C42F90
-:100970008BD55ACEA35FFA54C99837191FC4473C88
-:10098000563B69383E96C725B7A69F1A2FA78B8777
-:10099000656AC5823C7D381E9CEB6718DB8A78FE51
-:1009A0003AC333DA9D23E183B5A3FD78E932857E2E
-:1009B00077668152EFC273902B1B243A6362F80D65
-:1009C0008BBCB8FAF32DF03AF1E8C4D7954F00DDAF
-:1009D0001BB8F2BB218AB7BD60E2277D2E9D5F98D0
-:1009E000E72796751EE3F95B1AAD73F1EC8A5FE0B9
-:1009F000F71512ED4CDAF2F5DACE019733CCE3BD00
-:100A000005B6EE6323ECBBED3CD0099F137E9FD06F
-:100A10002BCE733150D3E5A807CFCF12E763D32095
-:100A200026CEC7B2281DB734B3BC757E97CEA4B30B
-:100A30002B5A1A06E7C5F125480CD635BCAFF5B4DC
-:100A4000B2F512F6F73551FEFB87F1CB723BF0DDC4
-:100A500022307F97C8A0F3A62B04FE1A98C787BF41
-:100A600099762E134E78AEB7C8F0E941CB3ADFEB5A
-:100A700096EAC43DAAAC2553B15F72BF326D38BC53
-:100A80006BA2FC770E191D7E60A543DF24FEFD5985
-:100A9000275E4C7C350DE165DA67C1CBEF5171E61D
-:100AA000D1790DD9B9039297EEC39BE738ECAF49E2
-:100AB00037139DB764150B3B80AFDBFCCE1740337B
-:100AC000D9F74BC57DACA32E687C38C8CF752A2DCD
-:100AD00072EB3B39D5B76459FC63F35CC7FCAE9449
-:100AE00049CF977B836985D3A1EDBB5143794C09ED
-:100AF000CA6352B256E8888F2E7C3587EC9EAE2CA6
-:100B0000F49F03FCBCCAF7F4A35D97E843FBB7E985
-:100B1000AAC7BA67B0BAFFEBBF4ED2A07A0EE12DDA
-:100B200024F6AD5AEC9B099FBF9C3FB7EC1F8F9FEB
-:100B30009589F899D8C791F484B98FE6BEA11D852F
-:100B4000F4EB2B53FF9CE9F7FAE050D500F2692251
-:100B5000AA520E5D427AAD83BEC705FA4E3C7FBFF6
-:100B6000A2C565FB9DA604DED3C7F61B7DC22F89F7
-:100B700051FFE5F9BC3F9471BB7190EE93ACBF257A
-:100B80000F08BCE131B86FFDAC2FE689B1F1C6A00A
-:100B9000BE872ECB3C25C3E71D713C473F65F0DC8B
-:100BA00024168B59E4F5BE2C6EDFBE17ADEA9533E3
-:100BB000C45FCC72B937B748B5E4871DCBF736664A
-:100BC000FA7EA939DEE0F7E506EDC481A70ECD1B5C
-:100BD000B2133777BC65B713936F7D213BB1FFB676
-:100BE000B79E6A67FDFFF43B0FE9ABF7EAFCB40F71
-:100BF000B92DE7C17FE07D5B157F0390EC7BFA3E6A
-:100C00008EB7A590D623A90C73F83B627A4C427C30
-:100C1000BF891FF3C5B88A0EE910032E578D498886
-:100C2000AFDB853FCAE86C8AF53BAE6F66713BC3AC
-:100C30009CC7E38524DE3336C76574D04679A5F5B5
-:100C4000407AC43C8735F9D91CE74496DD0F3E0D48
-:100C5000FE3D91897F9F959BFFFD16B45F9F5128B4
-:100C60001FF46FA337D1F34B5BAEA4F2B2966BF9CE
-:100C7000BC62BE6F4A8993384E5FE3AFFFF64646CB
-:100C8000AFABF77AE85ED9CA6FBE792BF2A7B7850A
-:100C9000ED3B6BFFBFCC8E383800800000000000B9
-:100CA0001F8B080000000000000BE57D0B7C54C585
-:100CB000B9F89C3DFB4AB2BBD9DDBC96BC38E11902
-:100CC00025C44D801010EB86575109049F51026CCA
-:100CD0000884008104A4BAAD1436246040ACF155F8
-:100CE000F1AA7451ACB657BD4169E5B6D16E442D39
-:100CF000540AB1BED00A06A516154DE45156ABE50F
-:100D0000CEF7CD4C72CEC92E84DAFBFBF7FEFEF196
-:100D1000D77ECC9939F3F8DEF3CD37676F5C587521
-:100D2000FF986442CC430D4E8910D29C45CA5B6D3E
-:100D3000B4DC209501DCA898A7EDA4B0CE5132D246
-:100D4000398690B3F0773994276399781C0652441A
-:100D5000C84A2BFDB742C89943B77BE6D3FEE26D84
-:100D6000362F7D42FBC9B9CB40CB64AF4C1EA740A8
-:100D70004E20F3CAF228B43038D069242405A001EB
-:100D8000611A40DAAF3542679304EDBCDE7A3ABEB1
-:100D9000D518244E8011233E374B747E79BDF31154
-:100DA00050F4678DC8848C82F1F4EF9BF139AC0B61
-:100DB000DE9793D83CC4FBB9F0FE1880621E096C24
-:100DC0001E49FA7E1CECB94CEA014FFA7934254EE3
-:100DD000CA73A6009E7C230112D2692AB31332D7AC
-:100DE000F68783523E85565B58A690044CC73B73EA
-:100DF00009FE9D1D04FF5FE1FC78042112E994CEF9
-:100E0000D2A1677C23850752FCC595C8A17539140A
-:100E10004ACED2D1A369B3129317F0D93124D93E67
-:100E20004835FEE540453AEFD78D4E3BCCB36C8A52
-:100E30005C16CAC3EE53AE857EA654156D62C359C7
-:100E4000492A21F3D8BFC9EBCAF6E641B43E1834AB
-:100E50007987523ACEB3064330BF79C418ECB462F6
-:100E600013E9AC84503116F1F7E87CE74D967D71BB
-:100E70000E4D3B7296CE9334919787D0FEE74A7C15
-:100E800080202DD3F70EF3E207934F5E07CBE824C3
-:100E90004EF320DA7E6E67E574928F5536E0A785B3
-:100EA000BCDDBC80E9684FBFF47F95416D797E71F0
-:100EB000C1AB940C142FA169A381CF2E32209F5572
-:100EC000356BDB2D7CFF8A4F8803FA351EEDC13769
-:100ED000CC93DCCDF8654AA353A1781AED54B03C0D
-:100EE00063F24793092DCF24E43AE877E664D919F1
-:100EF000A6AD37070CC44727BEDF278724BAB6FD47
-:100F0000B99D7B2F07BC159B94C761ADB9E4CE6B2F
-:100F100092A17E9413F05C06CF06607B42A09DC731
-:100F20001A1A4A9F75F83EB255A9F86E7FF1471715
-:100F3000F929BDB61A484D347E22A401E9FAF28F90
-:100F4000E2B19F0FEE9342163AFF29F2377F1C4B16
-:100F5000E753F56393D7A2E0B20C40D7E95E268F42
-:100F600084F86C53283EE71256FE88941585E9F8FC
-:100F70005505874A2CB49FAAF512CAA9C03FC5F7E8
-:100F8000876ABCF9EBCB12C30AE25DF39C76660676
-:100F90007EA678FE30069E3F54E339F0FEBB235F09
-:100FA00056B5BBDB694F063E2785A4F02C45CD69BD
-:100FB00032217114E9BB6E01CFAC3D38F2E5A1845A
-:100FC000DC477C5B50EF904E63D9484A2723F145BC
-:100FD000D303A50E260753E4E3489F13C5B202F8D6
-:100FE000DA1FF8D446398CECFF469E0678263E4A36
-:100FF000EC71BDEF3DE334E37B5BCDC40778DE9A53
-:101000006E0D35D0AEDA7F74715A27D247796002FF
-:10101000D0F10F26F2B8127BBEF6804C8650C62C5B
-:101020000D480805FD0606E28871944A5F91E8F3D1
-:10103000FF1DC8319D5ACA6A6250E8B8AE20F185DA
-:10104000A2F08568B7CCDA3DD548B07DD845E7B782
-:101050005C318424BADE0289F1B3D554EFCBA04DC4
-:101060008D6DB3821904E621E33C143A3F239D5F62
-:101070004E2001CB8302490807075C08870432B081
-:101080007E686030C261811C7C3E3C3002CBB981FD
-:1010900051082F0A1420BC387029C2118149D82E5A
-:1010A0002F50827064E02A7C9E1FB806E12581598A
-:1010B00008BD81D9585F10A8425818A8C4E7A302F8
-:1010C0004BB13C3A703396C70456202C0ADC86702C
-:1010D0006CA0116171A001DB8D0BDC81E5F1817BDE
-:1010E000115E1AB81BE184C043580F0A08F010CFF4
-:1010F000E5F10E6581934A0A70B8027C1C4BEEFE46
-:10110000C1ED52B5D3F731F09D68673610BFBABD57
-:1011100068F735B71B2EA06B94FE4E73FDFC85F768
-:10112000C39F0E27BD746BF6349411B9975E969DDC
-:1011300025E10CFACFE5BB6611D00B243759C3A7C4
-:101140007DF5035BDF5FB8FEDA6AECF0C9C0BFF57E
-:10115000C41BA48F4A47BF2E413FDB14E3B4501495
-:101160007ECB7799705EA39D7E938BC2849CA32FC8
-:10117000833E991974FE7122F04B5EF21F26D2FE57
-:101180000636196004AA4A9CED13A9DE512613D431
-:101190008BDB084179DA16AFB5A7C35C0C1F84B4AA
-:1011A000EE1984F234A490D99FCE2B40BECC3F1AC6
-:1011B0004436E580BC852523ED2FB89290C785CDB8
-:1011C00080F61BE6FF1CEA7BFB33337FA199BC64EE
-:1011D000A513C9695126C65138788BEFA538FACACC
-:1011E000D0907F623C2D0F7F32F812C08B5A431390
-:1011F00013281CB12BFC1235A76464B873A28D961A
-:101200002FD94376035A0B3A9449765A1E75D0B7B4
-:101210009BB20119D3E99FE450603EA146079DCFE0
-:10122000D6C3C4DB40CBC5C75BE444A2A2BF99F8D8
-:1012300077A8E8621FDD313989FE337395B34086A4
-:10124000F78D9D71AEBCBEF4D906EB8675523BF2AC
-:10125000385D57A62F2C39557C72B54B1274280275
-:101260003ACC58DD6D84756E6B72DB917EF1CE12D7
-:1012700018B27B0A713EAA001F1B114FE6F583507E
-:10128000DE05DF51FC5E34CBAEC69B24F45A4D6BB9
-:101290005E6CFC5EFD6F86DF23C06D6362E3D70A80
-:1012A000BC32EEFC725CE5EA91E379AE31B1DB353C
-:1012B000BB983ED5E3799B81ECA1B68A8E4BF9941D
-:1012C000C91509D2A68D9CBFCF87D71FBB985DF9E2
-:1012D00077C1EB4D2EA62762E19528C9A82729BF23
-:1012E0005E4406C7D637D05F34FB758FAB8F9E3315
-:1012F00083BFD8ECA47A6E706C3D37D7C5E81D5318
-:101300007F713D63E67A5C8CF7334EB7038EB2474C
-:1013100080BEB6F58620C85909B1A35C104F32E7EC
-:1013200013673CF0C974D95902FA860C27E847279D
-:10133000E48582B04F1918540A6568064A19F09876
-:101340009E1BDA44BBCEA17E8691D29F761506689D
-:10135000559C86F974DD8942DE9C951EB5BC097BDF
-:10136000DF2B8F822FDCDB36E5307E9D45FD97C37A
-:101370007CDEBDFD48D86EC30FD3B76D52E9C16D99
-:101380001E0F9645FB58FCFB8DE0DFA675C40FF2DF
-:101390003121BADF70D02573BEEDF6019F07BF473C
-:1013A0009CE0CFB89A3E44FDE4A2FA4942FDC4C68F
-:1013B000CF0CC4FF3C48CBEFB852B17FC0E3F5F689
-:1013C000FF77FCFC948B30799AE06C9769FD406A5A
-:1013D000871490D30974EEA3015F66A4BB42181D65
-:1013E000950924047E2FC55BD800FAD7600F819D34
-:1013F000319B5B7C20CFC4ECC2F51F70F83F769D1B
-:1014000043DF3813940220EA99BBFF3ECD46F96FC3
-:10141000438E331ECAA76879B3878EEBEE24BCDCFB
-:101420006C43F9A17FE948C530DD1B807D14659FC1
-:1014300015DA0FEA2907A1BC157C92F1B47FD7D742
-:101440007B9A2862CA5DBED3301FCAD76700FA866E
-:10145000D30DEAE05E7E3E9F3F20E4B3579E9C059D
-:10146000429E2AF3501F4AEE94DEFE62F937BFE532
-:10147000FAD3ED6630967F23F8FE82FD1B3E5FE2D5
-:1014800056CEE9BFC4ED7D63CB765A5EE99195A354
-:10149000D4BFB3A7BFDD61A4652BF5373FA2658339
-:1014A000B5C308ED4AA984DA28BE7DD4C983FD8777
-:1014B00075342BC31FEC3F4EB448D398BE5612AFC1
-:1014C0001D792E3C86703D2B3D661C2F6EE89044A6
-:1014D000902B07E72B62944260C71DC54EE37CEC5E
-:1014E000AF935C4DFBBBC4CDEC82906BD05BCFE681
-:1014F000815E721B61BF6EB192A0DDDDDB3F941394
-:101500000B7BF513E1FBB89BF99EA9659D3771082C
-:10151000C8E97E16476959C3E4B2349384D6819EE4
-:10152000F011C549DBC711F1470597964DBC34FD55
-:101530006B89F8E8FCF77D2D23948690B09DEEF73B
-:101540004ABD5218F68166833504B6B424DD4ACC10
-:101550005076184216908F0F255CA7B9302104CA27
-:101560006F727A7162275DC7C97DBB6DFE28F4BFBB
-:10157000C15FE99D3C2A361E7BDACD79C509787CAE
-:10158000486972821F19F41831EEB0119AAAF4FA60
-:101590005C37F347A83F540E7C3A6341779319E8D0
-:1015A0009D938CFE1019E246BE1DE0D9B9B1044CE2
-:1015B000562DF34FD349A841ED5709FEEA74FBE7D6
-:1015C000BBE93C1EE276848A65C73088575D94EC9F
-:1015D00006BFB4A42EBD0DFCDD07D712EF0213EA3F
-:1015E00083EB605C5F526B01F0EF43DE9DBFB80B95
-:1015F000F069A1FB62D0E3A30ED9144AAF8A31BBD4
-:1016000053603D7FD4CD5FC08AC01AC48B7E1FBC9F
-:10161000D2CDF7C1F9241FF6C127BDD7248691B7D3
-:1016200092A2CA7745E036EC47EC87DF3785B39C5A
-:1016300051E5508B6F317E85C4F6B5C42431FDC7AA
-:10164000ED28D52F4DA8074204EDA6CF223D0AF67E
-:10165000E6A4779417EC762C7D23E643F138B4CCDE
-:101660001EA55E2265D1F4C45637F30F2A4C74BF11
-:1016700040EBA51563EA615E15769B047C27DA6D65
-:10168000E2ED043F8B78959CF8CD18A03FC407A3EA
-:10169000AD7F1E319E52C7A33681ACA5307C79A3A5
-:1016A000F82BB1F075D0D4520AF33AB850260DB4E5
-:1016B0009F93FEB16924CAFB02BE077C43E9B22AAC
-:1016C000898DD743CF21D1F177706D8D77B2A997EE
-:1016D0009E7DEA2BE3CAC17E97031E55E31E70333D
-:1016E0003B7F8C4362F12B4E5A6F9E7FBF938C04DD
-:1016F0003D756A4CD00E71B1EE5F3500BD7F6CC791
-:10170000784579E5E9310D2355F82C266824E7ED75
-:101710007ED0A9D0E7E5439B5282B6D8783C0678C4
-:10172000A478BA031E8CC378CC1FDC17108F2179E4
-:101730006EE437B23BCE1B8678E45BB217FC06182A
-:10174000D78FFA93C5935739D9BCE2747E5E79601E
-:10175000B946BF244424124A52958DAD189F4D8836
-:1017600018F1B95EDE9ED2C99BC07F2C7A0AFCEBD1
-:101770009FFF9EF3E5C1CAC50AC40DCDF1D1FDE0BE
-:10178000EC2449C3576FAFF56BC67BE75B59B35F7A
-:1017900016F0EFBCFF93FE716910AF2A370787F68A
-:1017A00047CE057EDEFEE60127F41BF79525AAFC51
-:1017B0009DE2F689DAD3E6EB14953DBD516E02BC8D
-:1017C0002718B97ED3C99D0FEC2AC5E7E56057E914
-:1017D0001413CE6357E791603BC491F5E30B7BAAEA
-:1017E000E72F615FF574137CE049A2F44BE8A59FF5
-:1017F000881BC6922F21579D5CFEF5F8D7C31BCCE2
-:101800005ABF47C0CFB99C9DF4C79120D58F379759
-:10181000C82122217FA07D3C78BF84FE66B8D28299
-:1018200076B9AA320EE3B3550532D657DD29A3FDAA
-:101830000C53FD504BE7F347AE27F4F1D912227950
-:1018400027ABD63D63749CA67CE3C27BFFB816E24F
-:10185000CBC52605C6DBAFB07873D027A3FF4AFB04
-:10186000F086213E7DDF655EB067821FF6FB6494E3
-:10187000B7E09BB21786EDE0F1E8FDCD052119E850
-:101880002CF97BC6510643FF550AD0E15DCF1627E0
-:10189000E8BBB86F1F282BC3FDA35F2940BB499D40
-:1018A000553AEF382EA793D28BAF073BFEC1661394
-:1018B00081B8D107AB4FA23C77AEADF74E1EDA1B15
-:1018C0005F16F1617D9C591F5FEE1357D6C59305D6
-:1018D0003FE8F9A422067F087D158B3FA81EAB4A7E
-:1018E0004AB9703D26F4C77B7C9D93D2B7DCD940C2
-:1018F000F190B040463C08BE7CF79BDB1F013D1CCD
-:1019000047F9631DF0F3B74FBC02FB10B2588A1AB7
-:1019100047DEDE63F7285D727BE972A37F714F19A2
-:10192000C47F76CD8A9E32AC5F6F5762EBB573EBA6
-:10193000AD61492C5EA1B73B7A79F857DB9DF2CABD
-:10194000FB73E1FDF2CA8521801BD3AD35A07FF585
-:101950007A426F27C47CF4F34C88C824344A3D6F24
-:1019600005DBF5DA0933D607AC8E7C70D6CFC431EF
-:1019700018042710FCD2C371A1461CAFFE92329C02
-:101980007FFD588001E2ED0CC2FA3CF1183F68C9B6
-:1019900064EDE52BE2993F3EDA8DEB9485437ECAF8
-:1019A00085E546BE86516EFF734914BF8D3E431CCC
-:1019B0009C2B4CB21BF742C8A565A28158482F9EAC
-:1019C00084FF4E203240D78B7512EC3B0BACE6C146
-:1019D000E89FFE16FA216BE8BE90F2FBBE7DF2CEC8
-:1019E0006D7489FBBCA312A3F9E702CEF1FC10F5DC
-:1019F000C2F5812A84877EF04E36C8EB2D92FF55C2
-:101A000090838EF2AA3BE15CB86E978CE74A736EC6
-:101A1000797718DBA769CF2765873517E2288D52BC
-:101A2000BC17F488C063BBDD8CFAA5F110D3838D9D
-:101A300047245E66FB889779FDC9F7EDB8CF10782B
-:101A4000A7EB790BC6F7DDEBC2F5887DC677584F5B
-:101A500027E027F67A329DA82F80AFE4DEF9CB7617
-:101A600023AEAB8BC47B61FE011E0F22EFC7A1DF4B
-:101A70002CE85BC7F94FD07739A76F57DBE99F5C3C
-:101A80004ADBB7F8DC78CA2067115C6FD7FB09C85E
-:101A90001F62BD940F4EC1FC76B7313BD172D8CED8
-:101AA000F0652FCA85F909FFDA99C4FC64FDBA2BE9
-:101AB000C43E9DFB19E0DF429C62917BE2D9A431D8
-:101AC00051DA73BF96E2D9904CEB4B9CE45488F406
-:101AD000E2598C23C615EF3992B57E4C058F2BBC8D
-:101AE0006F22E5104F84710B55F35BE32E7124A731
-:101AF000F41DF73BD07140F239F9524BC73AA3AD10
-:101B0000594A243DFB620CA5297DE55C2F67525B99
-:101B1000FB57703EAF97FF33867A22D17E6F95FDDB
-:101B200007DD1436FA49A765705F79389F1EA1F466
-:101B30002E484EE9AB4FFA4BE709C952CF3E86D348
-:101B400079427214BD27F03DDC5DF63DA887F5674C
-:101B500014E23ECF0774073D611E84E3215F76BB2C
-:101B600048E851DA2889C751C47C202E1147DF9BF1
-:101B7000999C83E34A461234D17252AE5702BDDFBC
-:101B80000F3E98F92FE6839B92CF29CF61F44B96B5
-:101B9000717A2F1379163BCF9D67D10FBAD5C03A12
-:101BA000CE18BCDDFE9C0BA7DBCDC97DE4F3E6E4DB
-:101BB00073C8E770B7FF1618AFD14C4EA11F5E5C1B
-:101BC000E981F10E387C9F24D2E72F36707D924355
-:101BD000E946EB5F4996515FDD432E463DFC3D8370
-:101BE00001E7DF45F5EFA339D1F83E6874D3F7CFAD
-:101BF0005C4DF03C8EAE6F3DE3CBA004CF6F9D47B4
-:101C00000CF0DCA33410C305E8A196BEFCD9722EFB
-:101C1000FEA47AE85EA8A7FCB80AF8D1AA388DE736
-:101C2000D2433F4BD6DAF97EF0DFCFD478FE17F0FF
-:101C3000DF2FCFCD7F17CC57CF45D307828FC5BEBF
-:101C40002056BE10954792E1EE3B2E215E3C0F2BB5
-:101C5000715899DDDD21A19D6D3C52E0C7B2DD8A4E
-:101C60004A41D8E1133B59BD3C31BA3FD896EC66A6
-:101C70007906AD2BBC464D1E48109FDFE53BE11CAD
-:101C800042F5E254D986EB4B2A65F143B17EAA674F
-:101C9000A74F49E57153BA9EA42C868724EA0FC04A
-:101CA000399A83EF0F128B8D1ABF5FE0ED56B94C56
-:101CB00082B8B72B9940DA0DF5EB570F87F37B9776
-:101CC0004FDB3E856CFE52C64108CA839BDA6F88A3
-:101CD00063254DD3B5837D483EB4573DCFE9BB9FC7
-:101CE000F83899EF27CCC4037685C815E7E41BD5EF
-:101CF0007EE2F3E47EC4454E261BF8798AD67EB593
-:101D0000C691A871818614BE2F38E542FF57E6764A
-:101D10006B72670EE6A7ACB42B182F9065AF757A7F
-:101D20004EDFF75D3E035154EB4B9A164F14D5FE30
-:101D300021A5CCAD29A795A76BDA0FF00FD2D467F8
-:101D4000D45CACA9CFAA2FD4940706C66BDAE750AF
-:101D500001509707375FA9693FB4E56A4D79F89656
-:101D60009B34ED2F0ACDD7D48F787289A67E64EB91
-:101D70004A4DF9925D3FD2B46FE4715F3D5E2673C8
-:101D8000BC361A99DE69B015623CB2D1A68D4766A1
-:101D9000F37625891372210EDEF861412EE0FB6592
-:101DA000C7788C8BC7E20BBD1E8BA53FF5CF2F4BA1
-:101DB00061FAEE8B97CC069083E5BBA9BC5E42CB63
-:101DC000B6F736C09A9AF3D879AA91B0FC1E71BEC4
-:101DD00022DEEF395F317A597CD561239BA2F04531
-:101DE000768A1235FE29F82816DE1AFA89B7297C78
-:101DF0001DDF156FEF4B2C3F55ADFF774499D79AF8
-:101E00001416DFA2F6655E0AF37746C7A327EE44F1
-:101E100079BC50FD2FE641F5FF9214F443DF98732F
-:101E20002BE8FF9D162FECC9BE287FA3FA0105DA27
-:101E300057B3F6066F2ED02556FC7B4D4A9FF87798
-:101E40000D8B7FC76BF0562BE45D17876B747C8D11
-:101E5000F1EF46B337B73FF1EF5AD031294007C60B
-:101E60001F3DF4E5F1F358FBA000217B25D8F7D8FE
-:101E70008C0A9C739D6F5F4BF7B3B9709EDA02FBBF
-:101E800026D53E87EE6FF9FE260EED02B57BF7A64E
-:101E9000A0DE237B15FAFC0CDDF76E52A028EC9F28
-:101EA0004FE3975B88D76A96919E0FA6E07E97AC2A
-:101EB0008A93215E16DE3721E73BD9F3ED291760BF
-:101EC000CFC9F9CFE5D0EE94D2F5AF8BE277E9CF69
-:101ED000E17AFC6FF0D3243C8F433CADA77611CE62
-:101EE000E3DA53987D5E7F88ED93D71F99E541B97A
-:101EF00049293AE7395C7FF5CDAB297DFCD25753B0
-:101F0000CEE1978AF5AFE4FBDE29725E2BC41B4F4E
-:101F100044CC883799B0FCC8BA3D2612427AB23C0C
-:101F200063414753644307D86713D1E7152B89B042
-:101F30006ED31E19F5134966F541626D003F27B156
-:101F4000586BB75C3EADDD4A9AE6D6D931ADDD4A75
-:101F50002BD7DAAD017EADDDCAA829D4D931ADDDEC
-:101F60001A1898A8B3635ABB35B8F96A9D1DD3DA1D
-:101F7000ADE15BB476EBA290D66E8D7872A5CE8E75
-:101F800069EDD625BBD669EA0BC29B34F5A3F6DC16
-:101F9000A3298FE9F80F4DFB457B9FC3FC9BB1073D
-:101FA0001FD5B41BD7F94B4D3B8AF00EC8D35E80CA
-:101FB0002421E4D263CF6AEA17703FEDB2EEDF6806
-:101FC000FA212D2CDF3A48FF037AFD95F8CDE09CED
-:101FD0001849F7AB1994AECB4392374C9B2DDEB525
-:101FE000A308E6F1D9E12BF6403F8BB668F3B417AE
-:101FF00087B4E53A322811F4431DE58B10E593A52B
-:1020000090BFADD26B4B49BD03F321FAC9678BF684
-:102010005E4330EF33E8EB80FC74B14EC16F3ECECF
-:102020006F627E62BD4BA9DF17567AD7E9A3FFB175
-:102030007D64A719F8B67A9744FE43EABB9E9AB628
-:10204000BB37644459977E1D7ABF734CAA368E3DC8
-:1020500045B6615CFFC49BB297C507B572B8722FD5
-:102060008BE7AF7C5AC2F89A1E1FC22F8D85173995
-:10207000C8F60975C9241452C99FC2F161F168E517
-:10208000EF04FC03E6F3B01C82BCA038255ECF6FE2
-:102090004561D217CF09B95A39D5E3D9EE4D8FCA68
-:1020A000570AFD0FE6514DD8B9949EAFF4785FBE44
-:1020B000EB6E33E8C50BC5FB8254EDF9A0383F2821
-:1020C000A1AB3547C9831378A5FBF225A929B1F740
-:1020D000ADB7A45EF0BEF596D47FEDBEB521F51C7C
-:1020E000F1B32E889751BF521F2FEB1B1FDBFD95BD
-:1020F000E4C038348B7FF9BD5696AFA2B393B91EB6
-:102100008D9DECD9F77E28851A69E7F50E5F0BAC3B
-:102110006F85C37737C0990EDF3DA92AFC3452BCC6
-:10212000E0FD1C6AA77644F10FF7A50ABFA80CE3EF
-:1021300022EB4B587B7DBB5FA7B2FB40ED29451ED0
-:10214000F43B8F1430FB692F3AA7DF79173FCFB9E3
-:1021500003CE0B87F6E6F1DCC9CF55A8D8F9806E1F
-:10216000EB4D651E759EEF83A92E1CCF31EED90E67
-:10217000C8776E741A9C9202FEB301CF459B7CB661
-:10218000693BF3D87BC99AF7D8BD2319F00DFEBC83
-:10219000CDF8B59A6FF7515C42BFB1D6B92F95F91A
-:1021A000BB26E2B382DE15E7B9A60F0BACA06F8D9C
-:1021B00092D7192D8FD3C4F3A426F2F35CD9C9CEDC
-:1021C000777BE4FC3C7952373BFCAFA9F9549CEB9C
-:1021D000CE76F8F6C1F380316801FF32608DBEFF24
-:1021E000FD13A7E35DB03EA4A70DF908C797FB1543
-:1021F0003FF9732AC6E58298AF78ABEC3D06F1B99A
-:10220000FEC6AB3E4EED13AFFA58CD877AF9A3FE6A
-:10221000E72789908797986EC4ED84D19B0BFCDFEC
-:102220000CFF1E87F1D5CF61DD7DF24F1537CFA7AB
-:1022300055CE994F2BFA2977F94EA5B2BCBFBFA551
-:10224000B2BCBF2659D58FE33CFD503CE5D6DBFA46
-:10225000853F396D0CC6358FB160C285C5351D69A6
-:102260007DFC4747DA39FCC733878627C279B288B5
-:102270005BE9DB59034999EAFB31CD2EEDF81B0AE6
-:102280005979001F777922E3FB91698C8E220F50D8
-:10229000C4ADADD3890FEE3BDCC3F3B3453F23D3CD
-:1022A000ECD83ED53D71645A0A9CA749B8AFDCE032
-:1022B0009234FBCB4F524B46C27A86F3FE47A6318F
-:1022C0003EDD3688C567F479902778FB13A9131192
-:1022D00052825D04F834CB72543C16A6B1F97F9259
-:1022E000C8E45BC4CFAAEE67F7BB44DC4CC4010969
-:1022F000F1BE9D40F5CA479B4D04E25A0B65DB06D3
-:10230000E0C39EFB73FC5CDD49FF037B5999578654
-:10231000F947DFF5FE16E033C1DDD75E5E99D6E3FF
-:10232000A7782FF01ED7ACB40B386FEF8C677CDB2F
-:102330006DB7613C5BDF6E29E787CD3C4E01FA1A31
-:10234000EC865B26F5D1ECC7528EF733872C3EF432
-:1023500063A6C5633E8738FF3052FE4C74631A781B
-:1023600010A035909109F7897ACE3F1482EF25D9D4
-:102370006CF89E5121613B5C09357A25C82FEB34FE
-:1023800077AE4F83F95E2679E1FE405A85B33D2D45
-:1023900019EE112A28661B7288A318EA0B0C58EF55
-:1023A000BAD6B9C10479D70A81936C62A2E3D8E99D
-:1023B00038F7A6E5B07505AF694FA3ED12956E32FB
-:1023C000280FF48873AA07E4B89CE5AFEBD7D7C40D
-:1023D000F9D5B69EEE1B001F4AF43CF0A63483C824
-:1023E0009B6F047E2D51C84E762F8AE5A1429A3507
-:1023F000E60B7A59BE7402E41B0D667A06EA7FEAA0
-:102400009AB411DE13F225737C03DFABF3E1EFE541
-:10241000E324E9E453E0930ED000F910C6E904F98F
-:102420007A6645F4F93EC3E9BCCA51F620F0CFCC38
-:10243000090D98E74EBE397B562E02A797C9097D34
-:102440009F401C222E99E9DF3845417D4C9C12E6C5
-:10245000995A156F0D94E36CE39D32D83D0B3F2FD5
-:102460005C6020462A6F93783FBE72227D9CCBE24F
-:10247000AC4CBF1AC9C7422E648E9C22B09FEC8F11
-:10248000FA459B13E87A26D9F6E13962DC90FA1214
-:10249000B857F0CA3CD6C73D31F2F63FE17ACC2DB1
-:1024A000FB3D06F0E9837F79EDE50948E78BE1869E
-:1024B000E61DA6CED7F65CC6E3E7982FDEF99A2F85
-:1024C000EF9FCF2F7F2DADF3B5A6BCEFC2FF5E0906
-:1024D000F4F82794B160DE7AFE17FAECA0EC3F78AE
-:1024E0001BC5FF7594A90285008DA402E9CDF28772
-:1024F000AEE5780E7E4DF16CEDC5F3756D7B117F09
-:10250000074D74DE747CD344866AD38F12793E46BD
-:1025100008C7BDDEDA3205FC9B2E73773E8CDBF5F7
-:10252000C23B5941AA4F0EFDF8A49D50FEFBC0D8F6
-:102530006D87E7C756BF61F751BC1F5A2DE3FD37C2
-:10254000BC97ACCA07FA9CCBCB959EB2A3C057F3FD
-:10255000D67E5BA4F6B3492005EDEEE2900C777CC5
-:102560007BF4DFD2271338D3B1F2B2D6244D59D839
-:10257000E36596E8F7C40779985C2C7E6A9B19F2AC
-:10258000E1AFF4F8FF06E31FE3F906C776DA717FDF
-:1025900025E633FFA90233EC273F68B39030F0BD46
-:1025A000B1C344304EE59B2E51BEF5733ED4CFF3FC
-:1025B000D51713B0BF85F7CB1847AAA46305285ECB
-:1025C000FD6D8BD9FE56B78E858794A9A0AF166E88
-:1025D00094485061ED5753BAF903B7E3F98A7E9DE9
-:1025E0007AFB729AAC36831ED1DB9705C4DB3C01C3
-:1025F000EC568BF6F9A2B63BB0DF45E7398FF178A0
-:10260000F8FEAC888C3D3B18E2CC83305F3096BD41
-:1026100039B69609E5A76BAD088FAF75223C0ACA9B
-:1026200094E279E9AEF6573350AC3B8AC00EC5ED63
-:102630009D64BD89F4FACFC66DD7841F52802FB533
-:10264000F990151CCFC27F5EC4EF199CCF7FAE807E
-:10265000759E231FB2A29FF99027F68CB2C2F3F1A8
-:10266000021F63293ED0FEE61D50C8F9ED6F2CBC59
-:10267000C47A6F197CE7200A9E85DC1CE5FA7DC1CF
-:10268000F6591BD2E9041A5FF86B7627F2258B43C3
-:1026900088732AD9B3A103D62F135DFC2F48DE24FB
-:1026A0002AFED5F3E722E26576C7C6DEB3F2B84468
-:1026B0000F5FB6DD8978157C04370A0C1E80618FA8
-:1026C000A1B8EF7703FA7C1FA0455BFEC2D4990D39
-:1026D0007A63912E5EF085147DFF35DD3388AD5F22
-:1026E000F14D85BC8885A46C038BABB7A09E3A6680
-:1026F0006C79F53690E7ED4C9E963DFFF4AF414F77
-:102700002DF9AFFB1DA0A73E31B6A4C278B58FAF9F
-:1027100077805E3F660C3AE0FD4F4272D4FBBA4FC1
-:10272000787ACE056C9017B61C590C042C3803F43B
-:10273000E4DF1E3739218E5AF7A4256CA1F858BE64
-:1027400093E191968FB0F2ED88AFBA5D5A395CF2A1
-:10275000C4FDA90AEEE783191C7F19A0AA976F3759
-:1027600061FEE8F237652F0C5347BA717DFAF761C5
-:102770001E114AB7BA56B9D29CD8B79E7A3C669019
-:10278000B3BA9D8C4E753A3FB386EB653DBF3FE0D3
-:10279000E17E26E7738A178C87897C561262FAB924
-:1027A000F1170FE41FA1F33ABEFD358794D7CBEFA5
-:1027B00004B22EC12F6FAD9A077906B1F8FC0B2E2B
-:1027C000173D7A9FDB1965179D18F8FE6D0CD69A98
-:1027D000C28E4B293E6AB799BC41FAB8F669D967EF
-:1027E000033FE95D0B7EDF61E9D3AFBC3D9ECE6F59
-:1027F000E90E53F274B60C1BE86741A73AE0EFC24A
-:102800005EBA2C79EE1533E441C2F3D5EE5EFA2CB4
-:10281000DDD16E86BC4A3D1E27B5B69B997CE9E8A2
-:10282000D47A642AD8E5C65F9C31031F7CF2A244A7
-:10283000C085D4BF5FB3ED1507E80FC013D80F41B3
-:10284000AF1EFAF5A15B78C66F46633B279CD3C4E5
-:10285000A25F00E63206F9FB99DFD0F16BDEB378B8
-:1028600061FD35CFDCEC8075FCD558CFF8FC91F5D7
-:10287000A9608F6B4CC1542742F6BC66EB0F90FFEA
-:1028800016BDFE8354827AD33700E497AE7300AC52
-:102890006FE1C3D7E1FAAA891FF9AFE611B90CFCC1
-:1028A000C4D346322D9A9FAF0C60FAE9AF8F5A70AD
-:1028B00053F0573361DFE1F893CCF2F8C80AF443E0
-:1028C0007EC0D74A3531964F5B199D4E79C4FD7550
-:1028D000A6C7EA78ABBAEDB7A31EFB34CB9706F2D6
-:1028E0004EF1A08DA7BE3E258DEB3FFC5E0ABE4794
-:1028F000F96E123C87F61D265F5CBEE63D9ED7CA88
-:10290000C65FC5C7A7F38E87B8DC5F53B5FB570119
-:10291000670C107A807410357FC592FBED1B91AF68
-:102920004EBDC9F4CAF2D0AC6958DF610AA7417D37
-:10293000A8FD5A09F502F52FA2C9F57613976B6D1C
-:102940003D9DA75152E3F745762FAEFA3EDA4EE5AC
-:1029500087F4F28DB9F7794EAF7C8AFC8A453AFF4D
-:102960004C40BD5E481FA0B57FE27DF2704AD47B2B
-:1029700058BDFA20887C516B0AFDFC3F408EDFB5C4
-:10298000E03DC3DAA74DF8BD9CCF9EDAFDF64D942D
-:10299000DF3F6B15F2ABD5B37AF9AD79F63A124D4C
-:1029A0007E3F4B2E2351E5973E8F2ABFC92C7FFFD8
-:1029B0007F5BCF2E8AA167270FD0EA59EA4F245EAA
-:1029C0004A8B9FFE72E940DC67E9F02AF0A9D79BA9
-:1029D000873C0AE257AF37E9DF9B448547813FC117
-:1029E000974BFE73198ED3C3BF823F05FFF6F0A746
-:1029F0007EBD5A3CEAEBE3E0CE514A2FDD4DEBE8D9
-:102A0000FE1ACE5D5F90F1DCB54BE976B8212ECB96
-:102A1000F36EBA9CBCEC62E5EE14F306D01FE279CB
-:102A2000771CCB43E82AEB76B8547EFD9136D9016A
-:102A300079F59DA1E8F91298499102B74463D53719
-:102A4000F0EFD6D8B203B02F6B61E73D0B1A6E7072
-:102A5000803FDDD536786639F8F17B65F4A9BAE2B6
-:102A6000797E55D0671C40F15AC5964C8E91E04F47
-:102A7000C1CFAE6A5B3A1D368D0B366BF1516DBB23
-:102A800016CFB3AAEF33F5F205017F2764063FABFB
-:102A9000E661EDF325905705F4D1F1911FF828CAAE
-:102AA0003D8C3B051F159002B64FE6E7555CAF4DD8
-:102AB00091F3669643FEE21E764FE2449B4C36C08D
-:102AC0007A9FE2E757C114E4CFE5948FD571CEE346
-:102AD000C067C363DBEFE3BF3A54741B6D52FBEB7B
-:102AE0003FE73F44E1F15FBF3BECB7507EFE9DEC1A
-:102AF0003F93BEED27BDF8D55CCCA37CD142605F8F
-:102B0000D4F5E2EFB36F83F26F2C5E9867D73AB6D5
-:102B10003F0EBE6847BBDE95C5FCBFC617CEE47747
-:102B2000A27D6A427AED1AC0EEA99E68FBFB61099C
-:102B3000F2E9DAE8AAC0EEF27D57DD6FE2707FDDE0
-:102B4000F5C219CDBEF2BBAE6739BFAFD46527E57C
-:102B500070BFB8CBC5EE77D6FD76DC63705F71D9F8
-:102B6000CE767315AD9FF4BB6FF341DF743DCBFCA4
-:102B700009EADF6E05977AF780039B4D14CF5F80DB
-:102B8000CF974EF71FE989A5700FA32F5E181EBAC5
-:102B9000281E605D142F35A02763E1E3BD01ECFE24
-:102BA000C8BF1F3EBE9C0BE3D7B68D25104FEFC5A7
-:102BB0008BE463CFED987741D7CF9EBF78261FFC7B
-:102BC000A3F3AD37F2FFD97A53D3FF5DD7CBF87DAE
-:102BD000EB00667FF47CDF97AF9FBF05CBCFD8BDFE
-:102BE00038DF7ECA7B51FABFABBCFFEFD0FBDAFF08
-:102BF000B3F4DECBE96D77C2794AD70BDF66930B6E
-:102C000058F7CDFF47D7DDE3E718BCD6D1747EEF88
-:102C100091D0752552EC3CCE50BA761F3183FB1112
-:102C20003392ABD17F98E163F1954652B807EEA994
-:102C3000057D329E3B60320DC543C7B50521CCDB17
-:102C4000320687FE14F2B8AE5FE665DFF9D2EEAF6A
-:102C500066A44E9B06FEDBFE063A2FDA6EBFDDE071
-:102C60006CA44B98E993D1DFA310FDBCB7265E8519
-:102C70007921338BB5FB8C9B74FB861BCAB5F5D7CA
-:102C800093475320FFEEFA1A13E60B5DA76BBF269E
-:102C9000DD89EBBC81D4AF67F1990BC353473ADBB5
-:102CA0004FF6C5C3B9F1D6074F7C3F89B93C4A5F9F
-:102CB000BC59FC6C7F69A115DCDFE279722BFB85C6
-:102CC0004FC2F79D163EB4C0AFC5C7BED7A9EA171D
-:102CD000F122F07EA1F81674D2E35DE057E04D4F8B
-:102CE00087C7E04C42E58FF7429147E227EA7CCB69
-:102CF000193D7EA30DF178603BBBAF70A0B86A733D
-:102D000001949F92D05F3B3D6114B1D2F5EE3791B3
-:102D10005DECFE974F7116F5E6B348C5BFC7730566
-:102D2000C82754EF4B219F50BD2EC8275497219F91
-:102D300050DD1EF209D5F5904FA8AE877C4275197B
-:102D4000F209D5ED219F505D867C42757BC82754E2
-:102D500097219F50DD1EF209D5F5904FA8AE877CD4
-:102D6000427519F209D5ED219F505D0FF984EA7A79
-:102D7000C8275497219F50DD1EF208D5F59047A82B
-:102D8000AE87BC417519F205D5ED2F8FBCA42997EC
-:102D900090D734ED2759DFD094A738FFAC69FF7D79
-:102DA000CF479AFA2B94CF34F582FE57E59ED43C58
-:102DB00087338B6011EC63D85FA9F7EF9A7E8CA400
-:102DC0000CE3CC66528FD00AF15B0AE3492B421B1D
-:102DD000157380570EF35F9C01FCBA35B801986BF0
-:102DE000FFB833D9A0FF0F4CB886C51FF839C14CC6
-:102DF000F8A7429938E19B4CD8D78A734F474426AD
-:102E0000E151940F2312426724818493281F46E2E4
-:102E100010BA2349F83C29E242981CC9C0E729911D
-:102E2000010853238311A64572107A2223100E88BD
-:102E30005C84303D320ADFCB881420CC8C5C8ACF96
-:102E4000B322E310664726E1F3819112844AE42A13
-:102E50008439912B100E8A5C83ED064766211C1283
-:102E6000998DCF87466E44382C52857078A41261B4
-:102E70006E6429C28B228B115E1CB919DF1B11599C
-:102E800081302F721B3E1F19F921C2FC4823C24B0F
-:102E9000220D08BD913BB05D416423C2C2C8BDF89C
-:102EA0007C54E46E84A3230FE1F33191071116459E
-:102EB0001E433836B20D6171E43F118E8BFC02E186
-:102EC000F8C873F8DEA5911D0827447E8BCF2F8BA1
-:102ED000FC37C2EF4576E3F3CB23ED087D91D7F0C5
-:102EE0007949642FC2899137F0F9A4C8EB082747C4
-:102EF000FE8CCFA744DE453835F211C2EF478E2055
-:102F00009C16F90CE115914F105E193989EF5D158A
-:102F1000F912E1F4C8DFF17969E42B843DFBFD0986
-:102F2000B1EE25FA0D6721AE6573F7EB3B5F846C5C
-:102F3000D19C4B3D90E0403D397335CB23D9507245
-:102F40007232FAB52B2C0AFFBEA64EAF7E6303FF8A
-:102F5000613DD40C607D401EE01CCEBF078A77A780
-:102F600080BFB4A1B0B316E22177E6745600BC2F3F
-:102F700083F90D776430BB784F068B97560E73B28A
-:102F80007B062B86E2F91549EEDF3ADEE4F659B40A
-:102F9000BF398B976DDDD9782FA09FFDF4B7DDF990
-:102FA000F2A37E98E17F2203FD22FDFDBC7EBFFFE0
-:102FB0005FA827FEF9F79F3FD7FB1F707AA564969D
-:102FC000FD16E769F4E543FDC47503E464DA4FE5F3
-:102FD00066C90976B2AAA9602AD0AF90F8309E38A7
-:102FE00027465E5727A7DFFC7A1381B8E27C85600D
-:102FF0003C77FE4E96E70B71D052CA17359C2F9640
-:103000006DDC610617B4A67E11CB3F0AB1389395EB
-:10301000FE07FCBC64F32CCC3F5AFAA436FE540BDA
-:10302000711D19CE91B5CFEB789CA9CFB9822EBE78
-:10303000F46E068F2F7959DE11913371BDA7E97AAD
-:10304000219FC37F8BDD0AFA9FE201CF49C4FA4575
-:10305000BC52E081F4BDCF8079A127F60CC53CB508
-:10306000138A9206EDFC549C3A6C90FFE01F0BCF44
-:1030700029FE309FA4BB2101F3918E507DAE40E22A
-:1030800093D33F16BE9FD6F95E16E1DF6FD49E1B29
-:10309000583763FE75A5890E4CDB553E9E84F71F9D
-:1030A000697FF9BB201EF9B809F3818264A58714F2
-:1030B000F73D57285B6F42FE98BFCBC5F2C382BE77
-:1030C00037215F5FD0E348D3E0A9905734BF39A7D9
-:1030D00000C36EBB4CE8E789F35241A7BE79D165C6
-:1030E00089F07DC425CDAF233D29BD34F5B59BBF07
-:1030F000C4FB03945E4763D0EBE8B9E89598A9A5B3
-:1031000017C4956F80CAD54928A715EBC243EB5564
-:10311000FCA88FD3934C1BDE7714F9C4D3D2193D8E
-:1031200088D19B0A743DB9790CD24B4FA769FFA88F
-:10313000427A90F7ECF8BDDD3983C9BCABE9F3798D
-:103140003C6E39A7F10AF49F7333991E3BB0167297
-:103150002D09797DAD95F8A8F3FCC65A2796DF5A5C
-:10316000EBC1F23B6B1584EFAECD4578D4CCF27950
-:10317000843C5106C0BCBAFC4C2647F999625FB545
-:10318000CA0371E969FF78638C0155A367C6942C63
-:10319000F4BB35791AE5D76AF3303A4D3CCF6BA3CF
-:1031A000E485EFA8CC2FBB54D39EE48EEA2D83FD9B
-:1031B000E07923F39B5DF8FDB61BA72769DA5FDF93
-:1031C0009CA1294FCD5410BFB3A60DD63CBFA96218
-:1031D00084A65CC97F378158E30DEAF329EA19B167
-:1031E0003C6F276B7BAA7E6CDAAD74FC53FB4C58AA
-:1031F000AFA7C7517310F7E3C1472D5EB043C7E0D7
-:103200001E192D1F7B4B467D77CC44824EAABA8F68
-:1032100049A409203132793A7D90C9D3B47FC804DA
-:10322000F6E1E497163CBFABDA229120DCA1EAA6D6
-:1032300098A7E3AEFA8505D7BD608B4CFC785F4953
-:10324000698573EB558F0FF7C2B9E59CC1E12CB8C6
-:10325000B7D7FDAB38EFA3B4B6AA93BD7F8CEEAF62
-:103260005D90972415E2F9C1E7A52DD506C83790E2
-:10327000F7A5809C7EFEAC8CF194C52BDE2A728271
-:103280005E7BB5F5ED623ACED11619C7FDEC49CBA0
-:103290003619E5DD9706DF75ED5D7708E30CAF794C
-:1032A000CAEA32291F7C5A1DCA47BDB39AC5B7FB6B
-:1032B000E287AE17E80DFCAAD263BD768B9D9351D1
-:1032C000E53300F44395C98BE7A647379BF03C8F65
-:1032D000EA7F3CFF3FDA926460FAE759E4BBF946C3
-:1032E000C5AC1E77FE66D9C77E174231C37CC9DDE7
-:1032F000B29F8C8532CB5708364B7E765EA3A5EF06
-:10330000CD2BC6E2FD627DFE94805F5099F2ABCE7C
-:103310008196BCC0CE67C9E84EA33A7F5CC457888B
-:1033200087F52FBEE3533BE8819F4CA0F0848F7D4F
-:1033300072F0F4763BEAC7E386978A6EA5F0B3D2C3
-:10334000E0C7464A977AD9FF5026E4EF18366F95C2
-:10335000F05CE4A39FC079FCA74F9BBC28863C5F30
-:103360006BC92F170F3C577E10CC809D2F8753259C
-:103370000F7C959760FEC66CD2CAE3032176FE0FE0
-:1033800093A0F871D6B273AC8FC6D837C13DDC2A92
-:10339000DDBDDD8FF8BD856732258D7D3ECECB55F9
-:1033A00006269FE445F6FD45C87B19A2B2A7429FB9
-:1033B000BE90C9F2497AEC2A6945BD52CDBF0F5C77
-:1033C000FBA485DDD3518813E47131230FF90AE49E
-:1033D00099CE7789F9E99F023B2F221D68E73E3598
-:1033E00085AA3B72E0FD6D4D6E7CDFE40D81FC72C1
-:1033F0003B60A58A03F4C722C2E6B7AC450A8555EF
-:10340000710AF17B1C04EC824ADFF4B5075A3BB029
-:1034100090DBBB854497EFD3A2B54B6509765CD7AB
-:1034200092169EF7DC332F999CA538ABF6875E9DEC
-:1034300081F396BCA128F35844BAC3F01DE0654F50
-:10344000B1FB40FA79E9D7D1DF79567B674D86EF3A
-:1034500009F78CAB9BB7C037810B4A2A3A08BC5797
-:1034600007193EABDB24A4D75FB85F25EED909BAB4
-:103470002F22653340AF2DBA8FEE0B737AF9A0C7B8
-:103480005EEF08A1BFF4196971D828FFD76ED97112
-:10349000FD3878EFE1D7CDC0DF15EEF050838BEE2D
-:1034A00017833FFEC9B4AC28F65D67CFFF55F821FE
-:1034B0003CCE84EF517C2CDC2E635E83AA1D3FDF63
-:1034C0000F327E0E12CC23AA7953F636D2A735F0EE
-:1034D000733E85173E5F819FFFED79EBFD98DC2CF5
-:1034E0009E6F10C38FD1EB973E7E8CCE7EC2BD09FE
-:1034F000B097DD292C0FFC94D197E846BDACD3BB27
-:103500002985F8DD51A177ABB9DD13E32C047B47A6
-:10351000CB1F6F79CE01F187BFDCF75C2AE65180C3
-:103520007DC9EBB52FB754B1F16E793E0EF3963EDF
-:103530002FEDC807BFAFE291DF3BD4DF35ADF3F825
-:10354000A766C17CB93D5C266FCB76823D0C44CF2B
-:10355000ABE8B3FF8AB54EFB79D669D7AE733EAC04
-:1035600053751FA48AAFF3C366B6BE8F36B3F52E6C
-:10357000E8B3CE209E83DCF298C51B443F238C76B3
-:10358000FCD80E99C0FDB31E3F4367F74F9396AD2D
-:10359000808F652BDF396CA47CB17818C50FE5836B
-:1035A0008ABB2D68E717FF8A9D7F7E2A95A4E101DB
-:1035B000FCCB61C70FE9F325D43F00FFA2771E3D86
-:1035C000767F7996DAEEF7137FCB791C6A79DBEF99
-:1035D000F1F7A2241FCB875C2EBE03B34BF71D1857
-:1035E000057400BB276F053A651285ED13B5F1D45C
-:1035F000BF0DFD72EE4AE4FFEE61EAEFF5D6C58736
-:103600004D90EFDBBD4342BF68D9AA12470981FC48
-:10361000561607BB238BD92FC9E7C3BC170BA56B65
-:103620003C1DEF27590A7BAE38595EF7C304BF3BF8
-:1036300023E6AB7F0EF1712BD83F9B01ED9F7EFD02
-:103640002FF07196C906F4A76BCDCCAFEEE2DF7D0B
-:1036500078288BF9D30F6531FF7A1B8F0F74811F88
-:1036600009E7D39759F0F77A08998C71722361FCB6
-:10367000671478731ABFE8916FF497BB33014F73E7
-:10368000498709E839A3789602F7060EA75AF13B55
-:103690004AF4AF0CFA99CDFBD96F62F7040EC31848
-:1036A000745DB3793CF9307C06948E7F788019FD87
-:1036B000D8E00B16F4136E8F67F13E929C68043EBF
-:1036C000BF89EBA939132C3E381F983DE1F63280B3
-:1036D000B4BF20A1F8AAB076AF2FA0E33418989D0C
-:1036E0006F7013BC2F499A3AC700FE2EA16E31E4C9
-:1036F000C9D3D5EF3C9B742E3ED2DE53A885B8C209
-:1037000078C218AC18F1AB29D79A59FD1B8F1C99B8
-:10371000715F26217F826C26B0338023E08BCA4400
-:10372000DCE7CE843C7E374023F2DBD546123430D2
-:10373000D86CC3EF10B1BC7E710E725D310927D217
-:10374000F585F76AEF51DC10368487C3F98E31DCDA
-:103750000EF833581593938E53364D2A04BCD7AECA
-:10376000EBDF7C3F7EE4F88CFB26D0327CEF0AE670
-:10377000F94309F3796653A1073E9D6B242FCB854E
-:103780008C7EC087756E2588ED56303E17F737045E
-:103790005D0A68F76AFCCEE6F3A3FD343BE07D7377
-:1037A000F4B8C9892CB1CF637EDA522EB74B05DF4E
-:1037B0003DA595D7E46C2E37E00F52BCCDE6301610
-:1037C000DFBBB2995CB8B2599EF5B71738DE320B41
-:1037D00009E3BA5FB0201DC5B833394CCC1E84FD57
-:1037E000897908FEAD26F5987F53CDE33106AA49C5
-:1037F000304FB7E531CCEFD7E709510709F3CE9643
-:103800006CD73F57C573648D5EC238A764EE5E0007
-:10381000F393BE17E7057E9F6D6EC57880BE9DA9A8
-:103820004542393735537F4AE2E75BB46CD92CE126
-:10383000EF3BCCCEEC1E89DF2BE77E7535A72BD571
-:10384000DE53E11E5035F85378FEC5BF13B585F938
-:103850009146EEFFCEDFACF5336637A9FC4C06345B
-:10386000F7EA2DBAFC7013F7373E30778F047DAF3F
-:10387000BF67FF8181CD3F984A303F52DCB337723A
-:103880007F52F093926DD29C8B89FB9C15A0A7D898
-:10389000F70E74F95436FCEE4A85C4BF57C9E38A63
-:1038A00027A8BF89DF95391487764BC419BB4AEC2A
-:1038B0004143227CCE9295E724DE3203FCCC0A877A
-:1038C000D908F08CA113C7B955EEB0E7E4F4C6717E
-:1038D00037948CDA027943D7678F9869CDC2530E3B
-:1038E0007EBFC87B00F2D6AFFD86CE1FCB05337DF1
-:1038F000747FD4F54AF75C2B55D1B55B0B661AA9DA
-:103900003DEFBABF7B2B94D76C1D3FD348ED60D7FA
-:103910009DDDD9F00DE135D997B3FA06D1DFE53356
-:10392000213FB8EB41569E4DEB83E0E7F27B40151B
-:10393000E325D4B36BB8FD11F1A30AC34B0C4E645D
-:10394000BFF371BE76B76797AD01FB2CDB8FE2EF5B
-:1039500009DCADF8D680DFD394E9AFCEA670C92CD0
-:103960002968867BF16F868671FB15F5772FD66403
-:1039700031B9DC3890F527F045FBA9FB67FA49839C
-:103980007E5234FD04FE997E8EF6EDA7E19FE9E7B5
-:10399000FB8AB61FE19F89EFCCFD31C7F708F4BB66
-:1039A000740DDB0F93A336CDFDFF93F5CF0F03BB53
-:1039B0007FF2294B12F0E1D267FE3BBB1AFC3FEECF
-:1039C0000F7DD6FEAE19F2BE9747D87771EA22EC8A
-:1039D0003B39CB77B69BA7E6411E6BBB79926A7EDB
-:1039E000B5BDBF7365BC5AE5C73C9A2DF2B5D9EF9A
-:1039F0003A2E7DE613FC9EE05243EBC790E74BC6A0
-:103A0000B3389A7E9D9BF87B87E1DC3F4ABCE0C9D6
-:103A10006CA66FFF31D8F74436851BB309F62FC764
-:103A2000F86ED797BCBF8A78A6C7AB8AEC5685E2FA
-:103A30007BCC9BFE46C83BAD7E38A750A6F37822D0
-:103A400073E20EE82F767CB39BC537DB587CB3C29C
-:103A5000DDB18A1A29723C7BDE5DD6CB08B9EA015A
-:103A6000D273DF0FE286D32CA27CCBCCC91358BC17
-:103A70000CCA07B6D6DD05F2B387FF3EDB9CB12347
-:103A8000E341CE3B73120C4E2AFFBB322A8FC33C5C
-:103A9000E68CBD6C2A3C2FB1D88755B2F838F2C7F6
-:103AA000AE8CB2DF037DA13DC43DFCE670CA0D744F
-:103AB0001DFE3FC89837EDCF4FF047BBA7F20AB7BE
-:103AC00057C7B3999FB6C740E759D83B0F313E75EA
-:103AD000CC567540DC6ADD8002F0A353324B3ECBFE
-:103AE0001ED33B7E4AA6FF2094C5F874B9F9F0BCFA
-:103AF000BFF3788BD3E333A01B85651364F8524280
-:103B00008F5EBF7A7282A67CEDF424E253C74DAF7C
-:103B1000CDD094CB2B066BDADFB46084A6BED4D2B2
-:103B200031BAFE02FCFD3AFB9398DF7BA8EDF4DB93
-:103B3000B3C18FDD2E7B25BA9EC52F3CFE36E45FD8
-:103B40009F809F2029647131F6BD467E1E63F41963
-:103B500035E7317B9F3383DFAE8AF3EBEEE5EDC3D0
-:103B600038BEFE3C46E48BFFB3E7310903F5BFE7FF
-:103B700079FC55BA323269573BD2A7712FCB636EAD
-:103B8000A47E0B7C4FECFB3B2D21F886FBE7FF7DF1
-:103B9000C4ACA8CE65EA220DF8BBBA93761DC173FA
-:103BA0009BA7B89FB4BCED4B33DC93FA7EDB0A9441
-:103BB000E7A9547F2552BEE968272377423C39C7DD
-:103BC0008E79384B9BAFC03875626436C2DA962B5B
-:103BD000B0BF65916BB0BC9CFF9EEF9EF88EA96054
-:103BE00087F7FCDA85FBC1037278D843D08FC58E86
-:103BF000FAA13463CE3AF013F6C407F36EA6E39548
-:103C0000FED7F7310F7DF94E09E3A6A532D923413E
-:103C1000FE7D240EFB2B95FF347A057D7ED5246630
-:103C2000574BC1C7A1F572917D137E4F3AC6EFA4E1
-:103C30008D1DC8FC3A53279BF794C82CEC4FD45FDA
-:103C4000367090E6BB7CA694EDC6F9B6DEF5983AE0
-:103C5000258457464620ACDB39CB08F9E77FC87D81
-:103C60002C19F044DBE3F7C1FAEAE3B189248ADED8
-:103C700012D0C2F5F06CD0C370FE9EE3BB66600A42
-:103C8000FC1E61A7D10A7AD4667582FF32A3B840C0
-:103C9000A956AD4B7EE946BC076149EE3681FD9ED3
-:103CA0004DA15A6FCF8B61676E1C28F47603426179
-:103CB0008F48E407EC3BA83C3E20E469EA4083E6F9
-:103CC0007B3A1D12938BE0AFD8B940698E7FE940F3
-:103CD000DA4F4709297F16F5684736DC47FF57CD8D
-:103CE0009FD2D70AF477183B09C431EAF97C843CA7
-:103CF0009F6FFE7379FB033209005F1CB8FCF20E64
-:103D00001F9D57FB6DA346815D10E3350C6479A6BA
-:103D1000C4D9FD0DE61BBE98A0405CBF14CE3C4646
-:103D2000F7FAF3908F08F1C3BA172D8FC20752EB41
-:103D30001C747F6F83BCC0B830F06DFBEFE28C6009
-:103D40003F0A87F81B002F937E377C327CC7C7D78A
-:103D5000663112F4837CEBE079ACF99E4F7F0979F0
-:103D6000D4F399BF99C99F9FCB6125E7DBF95C0E1E
-:103D70002B8DDE44388F99B74FC67B91F3574B2379
-:103D800077427C40B1E33D7D218742DE4CC097A362
-:103D9000803F195FD6465C5CBE7378BF4C0E4A65A7
-:103DA000966F573AC285FBE7E591246C27E455C826
-:103DB000E91D39FE1DC0D7A58D54BEE938FE750337
-:103DC0004683BCF4F289D909FC44F9C453ADE283BB
-:103DD000C6F6AF8CC027A60912F28985C2492A3ED1
-:103DE0002AEBF14F9C5353E93C6634E5E0F79445E8
-:103DF000FDAF7BF8A57FFCFE18978FF9B6F050F069
-:103E00006B4DF5715EF88EFC896405F5D8CA8D128C
-:103E1000FE38E14A53D924F02F563E28617C0FFC2E
-:103E20000ED03F4507EBCDEA73901B23F9785E7DFA
-:103E30004D6408C22732FD2F03FD2B23D7733CE6C8
-:103E4000473DEF3B557F3BC6D54E852C5EF69D31F9
-:103E50006DFC6E8CCF8BE77FA67D26B24D81B89B23
-:103E60005FC6F3BD2CE2BC5762F13B88E789F89B43
-:103E700038A71371380B7C0F5765474F1B5BB26136
-:103E80001FD2271E57C2ECFEF1ED26766FABFD4F19
-:103E900045065AFF698E0FE372AF79FC87613D4B8F
-:103EA000AE0E3D63A2E5A5773EE78078B9C067AB6B
-:103EB000313C14F64BAD148F101F6CDD2C4F0B31C1
-:103EC0007F2761962ABF22165F2F890C46FC087B4C
-:103ED00023F4F7F36B3DB829157AFC7C7648F0F7AC
-:103EE000322E07CB400E88DADECC2A83DF3523B9A9
-:103EF00012DE73EDB5374C1E849EA6FC8E72533ACB
-:103F0000380BE3EA426FEBEDD16EB9F5DEF1C03765
-:103F10008ADFA950FCFC0F4D62B3890080000000CD
-:103F20001F8B080000000000000BB55B0B7854D518
-:103F3000B55E67CE9C994932AF3C0986C43393077E
-:103F4000700D383C22E1E1C78140002138C15B455A
-:103F50004D65402411131250AE51B8DF9C90808003
-:103F6000D486EA55DA824E28285AB551B0C68A302E
-:103F70003CB4A15A1DABADF456E8A014791BB15660
-:103F8000FCA472D7DAFB9CCC9C4982526F874F37D6
-:103F9000EBECB5F75E7BAD7FADBDD63E8789BFFC50
-:103FA0007AFBFF0240ED8B4F4F820C8009570920AE
-:103FB0000A00339747CD36A4C16E736FF5205D3A82
-:103FC0004C5E500C70917EE301C4BD5F49F210005D
-:103FD000EBF24A50EC00B7625B668FF54B004A3B50
-:103FE000D20051F32C47EC79A66CC2FFD1F32680A6
-:103FF000129C57E73BBF14E01A80DBDCC07F8DC802
-:10400000D41FD7217EE49B6A85397E5C1FCC91BC8E
-:10401000F8F92A3C1307CAC85A2C0B6CDEFF2FB9DB
-:104020002B44B00969004E7314D28A697E5D6E9587
-:10403000AFF32D725FA1F1BF2342633B8E7F67FC1C
-:10404000F8888272ED5936628428C7D61B2F5B1818
-:104050005F453A8E1D09D0F59A35B419E5069C4F97
-:1040600040FE4F5F1B1C5A8B5B3B0C5D17C83EEA42
-:10407000CE1499F655BF2B85F1D727BB4202F6D750
-:104080003BBB8AFC284FD9EEA4300CC57576279926
-:1040900001D7FD26FFF6F1A49FB2DD0327094E14D8
-:1040A0007AA7D50CC8F7409EA2D0F3BEE4D7E54B63
-:1040B0006CF5FD97570AAACB0530BDCCA19AB05D2F
-:1040C000783E1F6004C05DABA7B1F6E560362A19E3
-:1040D00060F2F94A00DC5BDDF91BD8F345E75318C1
-:1040E0003DFDC14839ED075E16602BCA5F91F3C3F1
-:1040F0001580F27526C3901DB8AF4E6FAEAF9970A4
-:10410000D93A8DF157FC6ACA54DAD7A21DC84CE3DC
-:104110000609A142D2D351BB09B200EEB671F13FFC
-:104120006FF860A48CE33F1FE91806C8BA4F6C7F94
-:10413000788CC0ECD949F69CA8E15D3A2F8282F2D6
-:1041400058CF0BACFD400E2C964B181F401AF9436C
-:10415000FF9101FB77C1D32B928C78946A3F93082F
-:104160004F566CCBE2FAE7683849D4E37F5DA61F6F
-:10417000CCFF8E785A43782AF9B7E2690DE9A9177E
-:104180003CADFD3E78BA841D7DE089E16CFA9B1C54
-:104190001F90EFF06D0586172677A72537D48C7C06
-:1041A000B7925D095F17A181F43987EC9B1EC3EBC1
-:1041B0000E4FE0F9783B7726ABC58B8BBF8B9D6F9D
-:1041C000068A1BB766348082CFE7601B1F37AC645A
-:1041D000BFE29EFBDB7E99766EFB8E76DEAFD91951
-:1041E000DC68C791CC7E32D935D1EE6457B27BFD05
-:1041F0002EEBE64BD9757841E09DDEEC0AEE6413B8
-:10420000C919B38BF506C2CDE76133907FF56557C9
-:104210006903D7BB4EAF0C9BA786D87900E99543BD
-:10422000185E22DF072F1565ED7FB7A5029C0DDD17
-:10423000ED378F06B8B114BBAEA0EE7B5A95028A5B
-:104240002FF8F7316C46056C4C9F9C56974626E13B
-:104250007EA73FDCDDAF52FFE4712E3E1EF9715B9D
-:10426000DDFC67424B22EB98DCAD5CDF81A8D93FD7
-:10427000248E1E89B4238E2E4DA037727E3A47DCE1
-:104280006C9E10F74F9C5F184EB43E9FE607D055CA
-:104290009E8AF69BB94370AF457BDF32EE530BD954
-:1042A000A7A22CFA460EEE57685BEEB70FC6E714CE
-:1042B0000751DED4B69656B5401B8FFE53ABA9D13D
-:1042C000DA2E2822DAA9B65408793D3DF598EA316C
-:1042D0009E67F4331BC78365E4E58D273BB2F15E2F
-:1042E000363E6CBD8CF56F1A074AA8973879A587BA
-:1042F0009FFF7001697D7ED4DD0DB8BF502FFE3663
-:10430000509B376232D501EAEBEAB60DADB65CB42C
-:104310002F707C0C6B7BCCAF721C8292B0DF4BC9D0
-:104320009BA9CB11B75FD9383E7C297DE5F4D097A6
-:10433000868F1A235E5C66FFFECF510E5786E056CD
-:10434000D1FE8BFC49EBC045F6D7F1BDD9AF0CC00F
-:10435000FD2541375E8DF8FE859FF0BD0874FEADEA
-:10436000AD742EF94DDDFC1CEF3B85EEF183D0954D
-:104370005DC0C74F6FDBD2AA16337BB07E469B2F42
-:1043800081F7F6047A5C827F68F866FE49711BF556
-:1043900053D84BDCA8D1F47B4680D914F72213798B
-:1043A000BE17F1F276B587E7770D1A5FA36EE7E4E3
-:1043B000383D0C88D9197F611864D837D3D3CD190B
-:1043C000FABEF7FB67A0DF44D26088803859E10964
-:1043D000B7B6C4E1A4C5B39FE12436DFDE08C5FD4E
-:1043E0009B353DADF6EC8B683812C8EFEA1820100B
-:1043F000073B0455C47DD6110E7AD9E7AC9E3852DE
-:1044000013C62BD225C6CFEE395E49180F52C6E52A
-:104410008CD7EC3423C18E5313EC382981AED2E90A
-:1044200090219EE9716E5EC7FA955928C75DDB043D
-:104430003A26285E5B8461009BDA7EEFB7F727BCE3
-:10444000CA520EC6FCB6B6772236C47225C533866C
-:10445000DF48AB8278BB81FC9DD1EFFA1517E1A74D
-:10446000616536F23FD5F687561BB2DED2B25EA248
-:104470009CE6976DEFB79A71DE9B47FEEA0D9ACFE7
-:10448000DCF4A7C80CCF25F0DA9AB08F8D09B49A66
-:10449000C0FFC8B7C4F79684F1CB13FAD725D01B59
-:1044A00012E8D5C6F173E70BCC4FE6A2FD4871DFE9
-:1044B000E6377B347B76FB3FEE40B0B33CC980FBF4
-:1044C000E9CD9C7EB3EDA87FB53D8EF61CF393BF7E
-:1044D000EB389680FF6ECD0095CE0FA98F78F64A07
-:1044E0005F381A9478DEF1FEBFD25FFB53DE098697
-:1044F00073799F68A4F788BADC7F8FDC63A7873A5B
-:10450000FDB99FF2F1E98F19F78575A1467FE69F06
-:1045100084FE3FFDC71AAD76F995B87DEAFCE5FF4C
-:10452000BC28D27A473C5DFE2DB8EFAA89E1C206CD
-:10453000E4AB4AE32D9E33229D63F536EE4FE5AFA3
-:10454000897E3A67AA92C3854B8AE3F609ED45B4A2
-:10455000CF3DCB44661FB599D723F3C067012C85A7
-:10456000F6B85C8D4F22FFBE6562239D6B871BD31F
-:10457000B348FEE15E5EEFED735D997507D27B5245
-:10458000E65864E4DBF3C064D6EE1595555D88E328
-:104590008B6D17D939BF27C5C5F4F3B5E76B7F130A
-:1045A000C6AB6F3C325B3F90E6CEEAA07C75AD04B3
-:1045B0005B6592C7F738C3CD8FACC3D6A21C739B83
-:1045C000AECAA2FC6DDEFF5496F747BE792B259F3D
-:1045D000C0F86028C91D583BD942FDF35BB4569D15
-:1045E000C2DADDDF6C7F7328F277AD117D9B9179A4
-:1045F000D779AF731ECAF571128FC31F9D2E7092AB
-:104600009C8F7A03C95EC2ABD3912CD0E1E1969D19
-:10461000B370DE87F395146F668C7FF737E21CCAA0
-:10462000375F3D3D2F2B8074A697E366D7F9795904
-:10463000F3E2CEFB0567CC4CCFBB2DF23D945FEE91
-:104640004ECE155481E939BD12FD65BE965F235EDD
-:104650001AB7F772EE9BBC22D3EB516B237C8C20F4
-:10466000DEF360E63892531F57F27EA0D941781EE0
-:10467000200F8FCFA3B3F2267A48DE18CEB2DE2504
-:10468000DCB03C1AE9E2CD69EB553A0BF761FE4F1D
-:10469000726428E5D40FCB9101F34EC86E2F8ABF08
-:1046A0008F88E5A92BB478C0F90EA90E56B71E7AEB
-:1046B000362944F5CC21F52F0EB0C7F3733FA97608
-:1046C0003A543A8C3F7138CCA4D7C3E6E0B1FB70C2
-:1046D000DC824D128BA30B36652EEFA27880F62C70
-:1046E000849EEBAEF44A6C9E3EFD44CDAF34F80997
-:1046F000E457D2B9D6979F946FF6566EB1F7ED276F
-:10470000D55ADE5EBE49F213CEAB4B1C66B81AEB2F
-:10471000EC4DAF6F253C562F4E1A6E45C1AB375945
-:10472000997DA30E87EAC6FE80D3614EC5F6560D6D
-:104730000FD1A62456A788591616F7C4552532E975
-:10474000A74C04B30DCF15D1E993FD9C6E7163DDC9
-:10475000B6D2512A937D577865B6DFEE7ED7ECEB63
-:1047600004AC6BCEE13ED271DC89C6871F1D85F299
-:104770009D84D08DA350EFE7C8D0B8CEB91D624854
-:10478000A573C2AC982B30EED500F7F7BA03DB2D3A
-:1047900013F0AF350DD533A83EBA33247D14D56A56
-:1047A0009F8BF8DF17F09685F2DBBBB6199FA3C786
-:1047B00058C8AFEADA8DCFEB61DD67E2506ACD1FF2
-:1047C000450769CF71DDC60FFF3C647F1CDFDD5EEE
-:1047D00047C6312CC161380C47CDE23AC5AE9B08C3
-:1047E000768D2293575C9114223D8A79FC7C980245
-:1047F00042288900E1C67DE3BA5F060F0ED98F809B
-:1048000010EF1FC1F4723488781A88FA70DA18BF72
-:1048100078BF18B2E2BA65E9A0A4923E1FAD047059
-:10482000307DAA6EA4A7643498293E7579B83EE716
-:104830000AE06F677EEFCBA3FA78C1A62466BFEAD1
-:10484000C7EFFCD34F4792BD2A32E2FDE821C25D9B
-:10485000099B0F6C69B1793E69FAEF3C92A7EC09AC
-:10486000AC2BA9DE14038FDECCE2658A8FC52D77D1
-:10487000F447A308274D29C3D602E1A47F9EB73889
-:1048800036BE7AC5B2223E1EEB5527C5AB24B69F75
-:10489000DA1D568693B96B44859D8FB916763E7E98
-:1048A000D492C4E8DA01A5CCCFE69A2040FBC05CE4
-:1048B000309BC575AE72A8B583B2DD4E717E5D4486
-:1048C0007432FBA89ADD2C649FA7BDE96CFD39A466
-:1048D000633CB70E68389B6BE2F8815D42682B8BB6
-:1048E0004F0D32F97F954960712ED11F7F434918D2
-:1048F000C5C93CDF6D34AEEE21AB6F8587CB20EAB6
-:10490000F2209EEA4C91053FA7797F6D65F71AF575
-:10491000B88F2427AB2F941751FE7A33982D742F1C
-:1049200025F378A6CB532F574E219C62FF4133F6D7
-:10493000D739783CAE4BE5F73DE0B085B6C6AF471A
-:1049400032E7F371B293FC6C34C30BF9BD09FB3F42
-:1049500005DE5FE62C95A3F8BCD304ABE99E84E4A6
-:10496000193C346E5DA4FB0F253C2E367B1D6487FD
-:10497000F41B67D37ACF892C2EA1333D544AF9DF3B
-:1049800073E208AA63E7AED957BE81E81786B94932
-:1049900084B9CFBFC7CEA7BB349C4529EFA7F30A84
-:1049A000E917B0FDC8CBF3FB80C8EF713EF2F2FC13
-:1049B0005FD7ABDE5FB74662F6A85BC9F150D7F4AC
-:1049C000019BB7CE11C9227BD4BD245D43B83EA55F
-:1049D000C93DAF2977DC41C4C73CC9E516F051ADEC
-:1049E0005A6121BAB65560B4BE5EDD9A3F66998AB7
-:1049F000F97CD45A351CC5E6CDCCA3F3ECD4B3E98D
-:104A00007973E3EC7EAAE565A76C27BF0917BAE9BD
-:104A10001E6671926F33F3536E8F532D859BE99E03
-:104A200066BE3BE210B07FFE3DF96974CE1D76870D
-:104A30002DD47FB8DD63225A71BBC711AD98AF6624
-:104A4000F4290CE1EDC51A78D14E8B048E9BDA6700
-:104A5000F759BCB89E3B9FEBE7CC73EF15D17D4176
-:104A60005D5EA488CE5FC455510ED9E51981E50974
-:104A70008B9E1595A4A1315C2D225CA1FF2FD470D3
-:104A8000B568C7CBF7929F2E223C0DEF894BAC2B1C
-:104A9000F7B3E72FB695031FBF9F70A79FF748B7DF
-:104AA0004874AF66D1685C87E8D47C99F901F64F09
-:104AB000E2FD6A313B47206AA17CB85EE47902FAE4
-:104AC0005336E511F51D92DA1D2F695DEA2F8EF53B
-:104AD000F7859BE1F926CDCE56761E0DD7F4125DF3
-:104AE000F392937071E6B97D6F8CA1FAEA45C14DDE
-:104AF000F1BE871F6A7AAB273D39D93E595E544FC4
-:104B00007A71C6F4D4ED6F1A2EEA81EB41D74BBD12
-:104B100059D393DEAF8D1FA1E9A11634BDEE18C89D
-:104B2000FD5DF36FFD1CD1F71748E3E3757CCDD72E
-:104B3000F637219F9F9BB5881B5F31C39762B946AB
-:104B4000ABFBB1EBCC0B6DECDE48B7A72EF7F27CDC
-:104B5000EE0718A795D4B4989DA326A8E9ED9EFA70
-:104B6000264D7F929DC795234D39B735A2FE163E3F
-:104B70002BFA98F2A8E68A5BD76A8A3A585E7ABF1F
-:104B8000E8A67D95FDB2F23ADAB78E3B699B60EEFE
-:104B9000184975462AD3BF2E5F593FFF75A91C7768
-:104BA00061924797F3881066F6525F10DC3CCF8D18
-:104BB0005AE8FE50F7D34479E76BF28A4E618C7065
-:104BC00035C9E393C9BF01CF41268FFDE032B69EC0
-:104BD0007A689967686C9DC3AAC34C7C8781C701BA
-:104BE0001D9747B4FB88232B5F6679B0BECEFD3D91
-:104BF000D7093466F45C47E75F92CFCF01DD2F3AE7
-:104C0000D338FECB5A3E607C7A9CA51FDDC3E9FAFF
-:104C1000D4F516E79706FDE8FEA5FB936ED77FD582
-:104C2000AF607926CB571FD0F6CD7C242B762E1083
-:104C30003EE9BCB35A109776C3B9C9F29A29033E2C
-:104C4000B3047A79AEEB29F179AC9E72E791FEA7B5
-:104C5000D8B34D9407404BF6FE82B8BCEC63BAEF74
-:104C6000A2789A09FC7D06A057C69DE77ABEA69F4A
-:104C7000D7F85BD78D4B1C5F9FA19CA0FE9A918BB0
-:104C80008B288FF847BE97E9EF24B45B26E07CB50C
-:104C9000C723E54E3956AF5CFBF7B0E8A2FBC01D59
-:104CA0001E43BD507B7A3FF3EF3A88ACA2FA76EE12
-:104CB0009AF72A4691DD9FC67C1CF9E6B77AD8B9E7
-:104CC0007762CBED23A8949DBBB290D1776EBD8364
-:104CD000D36B783E377765C993741FFF7192524E3C
-:104CE000F8EE5A2FB8A9DE1ABBB564F92DD83FD615
-:104CF00071652AC97D68CBC71563A86E681499BF12
-:104D0000285B1EBE91FA950ED1475B9D0FEEE5B76D
-:104D100010BECD2EE66F87B573A259E2387B578B54
-:104D20001307BA5B8EC3B2E6E62213ADDB86E71348
-:104D3000EEBFCA22B787A9EE7BAD9F6F33E90BCBDD
-:104D4000D46CC4D17181E7DF3516B011AE0E489135
-:104D5000A524FF81A58E614D248078E11AF20B45D0
-:104D6000ABB3B06E62EBEAFAD2D78F68FEA2CFA3E4
-:104D70008FEBA47C8ACE0F4DDE132D4FDF4879C216
-:104D8000896D856910A7F713B42FD4F79D18175FA5
-:104D9000ECA5FE3B94AFDF4784585BA3DD1B1E9060
-:104DA0005A07D0FB5BCCE38FC6E7E59FB425D90853
-:104DB0008F98C71B9F4BFC3CC13CDEF01CFDE6A856
-:104DC00031DFD7EA3BB1CA15E8250EE96D629EDFF7
-:104DD000956FCF387615F4C8F375BF4B1CAFE7F568
-:104DE000DDF72C1FDA13DEC78C72C125D63F1D44B8
-:104DF000C360EDB78D7C17E59D94F2CFED11AA2726
-:104E00005BAD6E2BEAF728F915BD077C49E479A262
-:104E10000D7C61C4C5D13F8EF0911F2EF890FBDD53
-:104E200082762144AFD8F7AF7F4024FE3B360AD0CC
-:104E30004F88ABB31E597F23B9DD395F60557FE4DE
-:104E40003FB74DF0A94C42C59E505FBDD15FEEBB50
-:104E5000BEFABE75957ECF94A8F72B0BB4FACA079D
-:104E60003EA3DE797DBE1BE1533ABCA7DE4F0703AC
-:104E7000AC8E3A1BAC61EDE8F6B6B21C94FF53E180
-:104E8000C84363C97F1C2E764F723AD8C05E029E1B
-:104E9000ED18716126EAE755BBCB4D71E36CB0911B
-:104EA0003DEFC68B86CF6B77EC117380F1EF1C8BD7
-:104EB000FCBBEC2E7AADD1CBFB366E5F8064FE7E00
-:104EC00054ABB7EF5E3CAA1F3DD7F77BF23E6E674F
-:104ED0005DFE93DB6E77527EBAE7E7E93B47937D51
-:104EE000535C6E8251F506110223008E6DE071E86D
-:104EF000B8CDF524DD971EDF784316D58377485D5E
-:104F0000161FCEEB7BADD249F7027F33479D6E6A09
-:104F1000913F4C72984322C5BF315381BD071C138A
-:104F20003683EC61AFE8194E469F3687C2489FA290
-:104F3000F783746E5F48E6EFE9B5F77E77BCC2EFA2
-:104F4000D3BAEF4FB47B84B1DA7E9715A4E9EF7B37
-:104F5000D8F3B252FEFC938DDB67D27C27B6486E45
-:104F600092F7EC1689CDBF10EB7813E2F038E28DA2
-:104F7000E2D7C2F7451F41FAC4365E272F44DCD280
-:104F80007D71DD6249B1B87AE2B14CE7DB29B0FA54
-:104F90005AC7E5422554CEF4AEE1D3867F2EE29186
-:104FA000910AEDAB481F8938FD57EBFE2584CBDE17
-:104FB000E241020E747DE97888E113182E75BBA7D3
-:104FC000B50F9B90C306A82C5EA8136110E505CD14
-:104FD000161864261C98927DE4E78D36E750BA6770
-:104FE000FA3289B7F79ADCAF53BDFCA54996046C39
-:104FF000FF56E061E3EF157D93899632A2EC7E4087
-:105000002C3329263AEF9AAD2C5E24C69B870A786A
-:105010007EEA25B061FB4C819BE78FD0C0F207BDD3
-:10502000C50DE6527E529992F6858C2C3F2F983111
-:105030008BDEE3568E4D5B9A8F99E52F0A66CD3253
-:1050400023AE2B47A4BDE4457AEB163FA7AF4E2B0A
-:1050500091906E126E983509F9F716283F2D288920
-:10506000ADA3CF8BCF37D2F3B7FA059EA0B6DE62E1
-:105070005F4DF1FE53A16B91498CF1BF2BC0E157FD
-:1050800085181D95208FF2E967E89D6A49DFEDD903
-:1050900002655B412FCFE701AC243DCE537F7B906F
-:1050A000F235FCF96D88B7EB35BCCDB3D9C3840BB1
-:1050B000582D9DEEC68597E292CB4CFE3D5333F7BB
-:1050C000F5E6F01E1A3F185ADCC76C2C15DC783157
-:1050D000BDEF388F8E09C7F4F9707F9F4AB85FB46F
-:1050E000ABA0A0ADD1A504547215C63761E76FBF60
-:1050F000A2799B558826313B54B9097F02044C178D
-:10510000B1AD4B413CA09E96BC74663FC1FF4E3D85
-:105110009FCAE6DF672CD5F0787D4479AC0D85FA1F
-:105120002408190568EB33B0F7AC19D73D610ABC08
-:105130005D807AAC35BD95B74426BF6D7652FE7260
-:10514000E679D13703C7D56A793B5C10C3E3F179BF
-:10515000A767F0E6B57138FA40C3CF694F386F19C9
-:10516000C50F0FAF3BE1C2BEBC65C83FD53BAD84A8
-:10517000CEA54740F97301B3377FDF30D3DCFBF7AF
-:10518000177FB882E73BB0859FAF5633A88E34D6E1
-:105190008213F5310D6529455A425A64EFE3438C79
-:1051A0009FF89C94A7C8B767F3F735E0277FD4ED45
-:1051B000A8DBA787DD5064CACF4D3690C85F06C311
-:1051C00046379D3BBAFD268B76166F96BCC4EFE33F
-:1051D0009608D19674A29FC3F392F4A5F965CF7394
-:1051E00073AB854C51B3F176169FF4B824E31FC21C
-:1051F000CFBFEB5ED252A89D9BC36018E1EADBF201
-:105200001D3D2EA17D1C8571EF7FBFD53EA422DC04
-:105210006FB5B6F664B14A36935E326D3E8ACB4BBB
-:1052200036E5F7E3F1F82710CF071BD3193E57797E
-:105230004466C78A8E1C90F1D19D1D02C878CECDE0
-:10524000E84867B4F37C7F46573CD56F22E5FFDD25
-:10525000EF2D9F1AC8E8134FBE3932C0EF576C3498
-:10526000BF1F74398ADB291F3A674739D00E7EFB8E
-:105270006A765FE887EE3A46B828108D28217F527B
-:105280002495DBC5D6C4FC5ADBD71237B7E39203AB
-:10529000FCDC5D3281BFDF33AB835D8407A95384BF
-:1052A00010D23F3820968491B5598BCBD66C13C859
-:1052B00071F6489293418EABDF4055225427CDD6EC
-:1052C00070923228CDD0FF80109048AED9F6050CF0
-:1052D000370EDF1586F92279E59D4C1F019EDFEA26
-:1052E0007802F1B499E4FC629C00E9888B1FCCC67B
-:1052F000FEB879A5719F4D12586BCC8B512F472F5B
-:105300008527BF8EA7C13098E129413FE81F2CFFB8
-:105310003C87E738A54D985D3C360EE91B3B2508D8
-:10532000C92CDF64FE734E4961F7F72B353DE9B8B0
-:10533000F30F048782F3BA4A8D7A4B558C7A4B9FD0
-:105340006AD453A6DFA8977EB3BD86FEFE81FF30E8
-:10535000F4E7D40C37D0B90D630CFC57364E34D07B
-:105360001EF53A037FFEEA5906BAB0F51603FFC0F0
-:105370000DF30CFD83430B0DFD576D5B62A087B4ED
-:10538000DF6FE0BFBA6385A17F5878ADA17F44E7A6
-:105390004F0C7449E46706FE5107371BFA47479FD5
-:1053A00031F48F3DFEA281BEB6EB3706FEF1E7F782
-:1053B0001AE809F0A681BFCCF69E819EECFE8B8197
-:1053C0007F4AF6C786FE69F22943FFF4419F1BE836
-:1053D0000ADFD706FEB62B024F1462C89F6D5A77BC
-:1053E00048058ACFF28FC7219E6FCA30FBC2C474B2
-:1053F0009975DB53855A9EA6E1F60BB0DF66F27E07
-:105400007B1C5C47794126E17A06D07DEFB9768135
-:10541000E1BAAFF3D985F9AE396E1FA98A0D0BF049
-:10542000189D3ED56DA033FDD906FE7EB365437F42
-:10543000FFC020437F4E8DCF40E736941AF8AF6C03
-:10544000540CB4479D6AE0CF5FED37D085ADB30D06
-:10545000FC0337040CFD83433586FEABB63518E8F4
-:1054600021ED8D06FEAB3B5443FFB0F06A43FF884D
-:10547000CE56035D12D960E01F753064E81F1DDD54
-:1054800066E81F7BBCDD405FDBD561E01F7F3E6CC3
-:10549000A027C001037F99ED5D033DD9FD6703FFA0
-:1054A00094EC2386FE69F209437FED29841FE5CF42
-:1054B000AF0AECFDD7F4419F19FAA50CCCD3E97ED5
-:1054C0001A927DF41D7E629EAEE76F15BEAF0CEBA7
-:1054D000DC6B6A60DFC57D69E2799DA3C8CBCE37FE
-:1054E000CCDF6D361667F1841AC2AE5A9A283F7522
-:1054F000A902C31DA51A55ECBE3083BD576047A352
-:105500004CDFA1617E83449AC9E3A1FA21259687E5
-:105510000EB838E2BBE7A13945C0F07F5D51C05DF0
-:105520005442F5D80BE5549FDC09EA2A9203CF5781
-:1055300017BD677A3BC9786FA4B7D36CA8BFB8F51D
-:105540000E24B50E187E09BF9D663BCDF8BBE7D58E
-:10555000EE9504DCDF92B8F91FC2BAC98C25646BE2
-:1055600010FD0BFDF4274137A31F096633FAD1A0C4
-:10557000CCDA0DC141ACFD59D0C7FA37064B19FD45
-:1055800078506174283895B59B837EF67C4B7036D5
-:10559000A39F0C0658BB2D58C3DA67820DACFFD908
-:1055A0006023A39F0FAAAC6D0FAE66CF5F0CB6321F
-:1055B0007A477003A37F1D0CB1B623B88DB5BF0920
-:1055C000B6B3FE9DC10E46EF0A86191D0E76327ADD
-:1055D0006F30C2E8FDC1838C7E2318656D67F0389B
-:1055E0006B7F17EC62FD6F05CF33FAB476DF3FB502
-:1055F00088E75FBA5E741A6012C3839ED7CEA4BADE
-:1056000085C0512A9D35D42D09F543A23D4E6AEB44
-:105610004813F1D8A63CE78AA2CDCD71F9FE7F16DA
-:10562000F17BC10792414DC2F8D744C53C42B12934
-:105630000D42CDECFD2ACFBBAB355C4206CFB71790
-:105640006872556BFE5042F81CC4F0F9D6E5D44997
-:105650007A9DDC322030BF08DB85B92695DD13D872
-:10566000434594F73F3520504DB83DD770C71B6C6C
-:105670003DB7AF8816A9B086336FA2FB9F0322BB4C
-:105680002FED6BBD7AEDDF2FF4D9BFEBC4003A8765
-:10569000A67E23B2FBF4B725C76CBA1FB94FD3CB94
-:1056A0007D4526433B34D7DF48727E52D8F0E4DD97
-:1056B000C852B5B8D04579EBF5545AA3DF57822CC0
-:1056C000B1EF6341799D3E99FC01267644DF042ABF
-:1056D0006B3B72024D34FE662C20880E8CB1E6F5D1
-:1056E000B69F44791ED470F16091C9D04ECFF5AF0A
-:1056F00025FD1C2D540CF2A8B9B2F6BD7BD7E324CE
-:10570000D73F5EFBEC98901FD3B77E2FB16A82F62D
-:10571000FDD462417F4FCDF3411BE8F920EBAF5A36
-:10572000CAEF677E887519BDAFFC508B87E71A24D6
-:10573000162FAB84641FE5D3E71A960EA4FD24C68A
-:10574000CD2A1C67C27155C0BF87A8FA3085E10B0E
-:10575000E7037AEF5685993BD57F77E7EAF71E5145
-:105760007B269747A1F7B073765ADBA84E459C3C41
-:10577000CDE2D86851B5609DFCB6295424880C1F31
-:105780001601E5ADCE407CF49217E83858A4FDFB35
-:1057900018FD39E26B3BCD77F6955183D87B935D4D
-:1057A000A365D25FB309ED41F735BF13F9771274E2
-:1057B000C54EDF71B88ADBD877FE944490BD463B76
-:1057C000D8FB903D2234BED04BFC7C5FB3DBDBD9F1
-:1057D000D2D4109BD7F89EEFF71AAE7EAFE1AD6240
-:1057E000EF81DC7B71DE459D12AB776064B4D8DF5E
-:1057F000CBF74DF58D6FF62F88DB477DC711FE5D2A
-:1058000014448BE3BF873AADCDABE349B438026DA6
-:10581000F678F9388E10D7EF911E10D7C728AF9FB2
-:1058200069955D37E1D028AA268C6DE00937FBAE7B
-:105830004EFFBE6E3EF8595B8D70201CFBD5F5AC5B
-:10584000FE5D08EDECF9A2D2DBF388AE87AE49D954
-:1058500054BFAC6E7A3D1BA5BBA175FD64BA7F9E9B
-:10586000159AFB3AB5955B84635477A35F1C25BFFB
-:10587000880A0D2BA924BDE5D9092BE99E77A6C876
-:10588000ED006F723B208E1431ADE7FED00F4ED18C
-:1058900078F40326BFEE07552B387EF47F8FD1EDC9
-:1058A00017A577FD3587DE7D98BBD87721F5BBAC92
-:1058B0006984AF8554798AF179A17E3EF3BCE02EEC
-:1058C000CC0B88EFA4C4ED7FF25012FB772F270595
-:1058D000C4C7F09EB8D7F3CC2F4DFCDEED5E11B7F8
-:1058E0002852BDFC30D3538D2D3494F484E7B33467
-:1058F0009070FD71FBAA6174DF37319447F9AAF407
-:105900008CD5D7EC31C479B89812BBC77B48E2F785
-:105910006A89F2F6C85B4ADFF88AF209AB05547A65
-:105920009F84FECFFDFE3097FF4B5320FB1A91E77B
-:105930002BAC8E1EE067F53F64D97C6B859EEBB780
-:1059400068EB76FE93D7D36A2EB0EF7112E510DCC8
-:105950007CDD4479ACC95C0EFDDCE9290FB7832EF0
-:10596000CF90811E7E2EE6296CDF4DA65416BF3ED9
-:105970001503C5A437FD7E4CAF633B3D9FB0B80E09
-:10598000179A07F0EF7BC37D9DA7A7BBEB676FEC72
-:10599000BCD3EF99605CEFF7827E9B5B22BBCD02AC
-:1059A0001F8BFB83E1435D3F867BC2FF035073AFD8
-:1059B00086E0390000000000000000000000000048
-:1059C0001F8B080000000000000B7BC4CEC0F0A3BA
-:1059D0001E822538106C62711D0B03C30756D2F569
-:1059E000C17025507F0910E703711610A7027102DC
-:1059F000104703711810BF069AFD0C881F02F11D95
-:105A000020BE0EC49780F82C109F40B277191B035C
-:105A1000C35A36D2EDFF83E4E78940763910CF24AC
-:105A2000231C46F1F0C0F23C0C0CDABC08FE3E5ED2
-:105A30005479051E047BB92065766D03EA0700E9F9
-:105A4000CD424A800300000000000000000000007A
-:105A50001F8B080000000000000BD57D0B7854D58B
-:105A6000B5F03E8F79253393C9839040C493970452
-:105A700009382421F2AA1E0842A4D406F42A5AAEF8
-:105A80000EC823869044B02DB7729B21092F411B6D
-:105A9000152D5AB483458B0A36F268D106EEF028EC
-:105AA000C65BB4D1A282D536D45B450B4944116F95
-:105AB000B5BF77ADB5F7C9CC393349406BFF7BC370
-:105AC000C7B7B3CFD967EFB5D75E6BEDF5DA3B76E5
-:105AD000D9C5E42B19FB027FA09CA330C60644CA9B
-:105AE00051775EBB687B09FCFE99DDFFB8166967DC
-:105AF00094173389B1D1F09E653056CAD8954EF8C7
-:105B000015DA95BD70EA0F97A531B69F29CC018FA4
-:105B1000C26A59EAB7A09FFD9F333FBE975F706787
-:105B200075B8F1BB2063E98C5DC1F877E16C2DCBD2
-:105B300057881526E373DD49BF433FB99BEAE0FB75
-:105B4000B39FBAE97B2B1C46C93E9759587CF34555
-:105B50000EF6AB7EDC5120EAD90C066702DE2C1A69
-:105B6000D780F7D0DBEF11BC075480578B33BE13BF
-:105B7000E04F8BC0BF9F5D9BC40A39FC7A6904FE6D
-:105B80000B8587E60F786EACD7BE9997CFD8BA7AD7
-:105B900046E5DA7A2795ABEB7DDFCCB331B6B23E82
-:105BA00083CA46153E01381AB7B0501050EF2E8404
-:105BB000F646FFF03F21CF69AA3BB37CA6BA3D0D64
-:105BC000FA2988D455B766AA37BA2739036E1C1F3D
-:105BD000E6EEC0F19D5402984733001F978A79BAC8
-:105BE000B4E02C06EB91E7B66B2180E352F782E933
-:105BF0006C24B6CB27BCD9055E9764367420BC1FD5
-:105C0000433B06F31DE69EF23EF332F69FD94FF07A
-:105C1000796C606C203C5FFDEF751D12F4B732D3D8
-:105C2000AE35407F4FC0F86B1C5178DCAAFEB9033B
-:105C3000FA74C23FC4E3D08DBC1E9937D4A3E631B9
-:105C40008C45BDCF8EF473A1FDE6379BEBD67EF37A
-:105C5000347D12D2ABD16F3EAB68F0B9FFF7F67B63
-:105C600029E03C3525D2AF314EBFFD023954C0B7D3
-:105C7000F91B59289C1D3B4E9EE62F0FC2FBBC8D85
-:105C80002A0B65F3E769C01779FC57D6E49B94109B
-:105C9000288C8587458F93135997BC34FB1C19E8D2
-:105CA000292FE3FA4512D25573D4FAE63066F0CDC7
-:105CB0008FEA7D4C1FCAD8DDF505546EA9F7E9C8F7
-:105CC0002777FF5D99D55218CB8F7F11F2EA1E1B03
-:105CD00023FA0B3ECE428F4BD85FC5AC39505F3FA5
-:105CE0002ABDE82E8D885C4679E61274BC5ED26EC1
-:105CF000C8C1F6AF280CE5A0951FEEB6E9D3B0BF3A
-:105D0000B5A364A901F19CC7F921CF1676E662BF5D
-:105D1000CD39A382D88FFF55E287BCFC4B3405C632
-:105D20001D9627F861F4834E94873DF35F96AEE7A6
-:105D300015339664A103DF79D2816F42DF74F07569
-:105D4000F1C3D7475FCD7DD2D77AFF7DEF3BE0FD32
-:105D5000963CBBA664C7C295797138A3C21D4B6F30
-:105D6000797982CEFC7DD399B57CB03EC4DE011A30
-:105D7000BABF3E83E8EEDE7A8DCAB5488730EF07BA
-:105D8000B0E958A8231DE2B8D71551BDD77D8BAD1A
-:105D900020BA4C9FD5CC50FEDE8FF4390E875BA91C
-:105DA000EB1360AE79A20E5BA40C7BC0BDF87E1035
-:105DB000D575DCCAEE928CF6CF0675C0778A683F3F
-:105DC00075C5B3C146F8FD7E17AF5FBDA2530F6620
-:105DD000457D1F5CA7EB5991F6500F4F52A3FAC3B4
-:105DE000FE0BA3E13948ED8DFEE6AF38A10701BEF9
-:105DF0007B5DBCBFB52B8EFD53FA5F2B053240B5E2
-:105E000060AB2CFDACEDA9DFAB231E8C7172A45FDF
-:105E1000E8C1E8F7C16774DD1D797FB9746F10DFE1
-:105E20006F64157912AC43E6F48A0C06EB6FAF6829
-:105E30000EE296DB039FC077647E0F12BCAE0CFEB1
-:105E40007EC48ADFEB8D51EB3369C5CB4184D7D05B
-:105E5000731441AFF20B594B8F00BD2A49763FE9CD
-:105E60001BD701D364C278B32A980670C969150C90
-:105E7000E58192A6BE1BCD0706FD019C6309CEC934
-:105E800015B37A8133180DA701477F701B70F44E4C
-:105E9000A77C7C2B3D4DBA66CCEF26C0FE6D6FB75C
-:105EA000F9515D48453C4157ECF35B8336789E3AA7
-:105EB0001370ADD1BACD62B9B1FDA64D1FC4425128
-:105EC000FBF73F7A5DF3B0CEF116885E5FA8CF9501
-:105ED0000644F03856B4B3D29F313F5BCCFCAE35AC
-:105EE000CD8FA9818C0A4FFFF3BBD7E59F55E18E7B
-:105EF0006DF75B49A2F1274D19F36DC6C7630E908C
-:105F00005FC9385E5164BCE469301E76A636C71D91
-:105F10002F65328CE7FCFAF069E547035E7B0CBC29
-:105F2000B79AE05D6B03BE8DB3FE5F37BCE7CB7FF6
-:105F30002E90BFC47F797DF3DF3FBABF64FC153E6E
-:105F4000F94865E12B015F775CE524FDDE9073FF86
-:105F50006C7CA5E2A7B07E77BC547CE24A192B404A
-:105F6000D72322E3D74A1AED57BDD1776FF3810DBE
-:105F7000D6D4CFFFAFF9F486D7AF5B0E9DAF7C6D63
-:105F8000783D81213FAD2C642107F4B1B2ED2AB2F6
-:105F900037571E291BC8A05FDB9AE14C8749256350
-:105FA000FFD0DF4A43CF985CD24FFF5CCF00FB4E5F
-:105FB0006F02A56BB7B782F4A29512A3EFD783DE69
-:105FC00016023DA6E4950DCE3958F7EF70CEC1719B
-:105FD0006D8CF4E992570EF9CA80CE5D23524629A2
-:105FE00040022B5DC6F3A3E5A8E7DE55289E7B782B
-:105FF0007FF0BC02DB2788F6BDC1959007F044AD69
-:106000007FA2BD395011477FD76599F0F390D0BB7F
-:10601000EE46BD0B047262424B00F56A57BA5D7BD7
-:106020004C8AFDEE265912F306BD0DEDEC115332EC
-:1060300051CF3A30E389157684AF90915C77E5854E
-:106040007419EAEE02CEDB0F59F67D37AE21E95D19
-:106050009952994ADF99EA77F7E831D913516FF3EA
-:1060600016F0F7650D574C6C8C7ECFFC1371FF3525
-:10607000DE071A4AE97DA6B3E2D804183F13E468A4
-:1060800023E02B536D96EA685DD3E2EA8F1BE63B73
-:10609000678500860D331ECC9E1F673F81D534F186
-:1060A000E9A079663E7B48E0EF6E81CF4CE4F5D104
-:1060B000820E41BEB978D31EF9E61ACAE55B4241A9
-:1060C000F30AC4F7A079CC8FFAF686194F90DE6AEE
-:1060D0008CE32A30CBB94CD53CAFAF6B3E1B99FE5D
-:1060E0001D7974EFFD5BF96C230BDC8AED33C57E03
-:1060F0009E5010920285FDCFDF3ADFDEE6FD2DC413
-:10610000271FA74E1E103BCE3F0B2F996E18A7E4FA
-:106110001F3F4EC23CB3BC3C5FBCC33E20E88C2951
-:10612000B81F58EDAB84129FC464AAB6A31D4EF2EB
-:106130001BE0F6B0E6F24B80DE522B56DD2E83DDFF
-:10614000EC79EBEAF7D1CE4EED9843F676536151F8
-:10615000DB246897E4F7CD984274CA08CF6BB1335B
-:10616000E2BBAA1513615E8D8CF3DD66F996895C3E
-:106170003FD069BDBF2B70062BAEA950477665395D
-:10618000F1E66167613E6FE90B47ECF7BDCDDF16C5
-:10619000F94EF8FF9690DFB4BFEFD8743BF9118346
-:1061A000F00FEDD2644B3F49BA3DE2676488A7A87F
-:1061B0003ABCFF6D0F5FDFFE4F19CFC7EE736A4029
-:1061C0000AB63CD987F67A12F325AB2867278342B3
-:1061D00000A2D897D61D94B5FED7A589B1F29642F4
-:1061E0004E7733A2F4DC0E99EBC969332767AF848D
-:1061F0007ECF9670BF70AA0FFE17C5CE671DEC6BE1
-:10620000E1283FC7BAC2C7887F1B819E72802F8258
-:106210008532F9B7D7E6EDF045F3B5AC18FE6D2B36
-:106220007D304D2D15FA1FE047C99375D7C8AF4E85
-:106230001FCA97A48FC4E951DFB10B5FAF24E5C239
-:10624000E8E3AB8E67AC6B2C5F71FD246DE63C27F9
-:10625000EA3BAB326626C593B3BDAFEB7DB4AEA8C7
-:106260004F84E2F49FA64871FD39567D9EB1A5A6E4
-:10627000F5520696CEDADCD7BAA599F161F4EB5A5D
-:10628000A668FF85C24BF5915FDC29FA5BABDD1791
-:10629000C4FDF32CEEED800FA5795418F53D96C79B
-:1062A000FC8FF326A487B8343D443A24CADDD208D3
-:1062B0007CF62CD9349E9A9660C2379B05DA761408
-:1062C000FCAE657682C389E3C1388A0F3A94D0FF69
-:1062D000CFC22E2FF548FDE1505FE462FD4E131D45
-:1062E000ACCE2A8ABBDFA9625DD16CE5F47AE7F90E
-:1062F000C917EB78D799E13DEFEFDCAAF66E1CFFEA
-:1063000071EC772A7BD7C01720F1961E7AE7EBB4A1
-:10631000CAC6F64849200F32AE67010DEAF80A36C0
-:10632000EB35588E453A2CF2915EB05552114E62C3
-:10633000690DFF737DBE10955BE84F7606084F8AA6
-:106340005B67D45E3B3F7DFF9CD0AFD3843E6FBC88
-:10635000FFA162A77E5556C1D06E3EF7F6D40CEA77
-:10636000578747A51138ACFD162A811F2A0390ECE8
-:10637000383CF801FA09584701F9B5F305CECE3D8E
-:10638000303389F5C15F0F59F8EB2189C3C92ACE93
-:10639000CFCE380763B6637B359040F1B29305C426
-:1063A00007B962FC27D6CF4DC0F19FD8D8379F1BC5
-:1063B00070FCB4DEC9C2A0A786EA7D541AEF43C2BE
-:1063C000DFBF59D831C6F3738A4C70EC137CFF845D
-:1063D000B32281FCE7076F9C360CF82BE7A8E24755
-:1063E0001D4F5BCB52FA1A3F3B68E637A6CCEE1343
-:1063F000DE656F4D9C71288A1F7FA178D2DE1D0E4D
-:10640000BF5CCE2E47FAEBEFFB73F5FA8C43F95FD6
-:106410001D2F9B85FD79AEF1772B48CF095F49FC95
-:106420009923E448CE3C2E0F72AB594843FEFDFC45
-:106430000B164D1F6099109E32AB558DFC4D4C775D
-:10644000CF81F743C5DB4C65BA8C5BF850D4BF50A5
-:106450008E6CE2FE73C3CF0FEB7E17CAB9CDAF29A6
-:10646000640BE7556A0DB8DE39EBCDFEFDC12CCAD1
-:10647000EF8EFE7AA1D7655AFCF85F751D3A701D44
-:1064800012FFF9EB105219D19D51D72456116FFF0D
-:10649000FB44D0A9B6E210B743C0F87B272A1E01FF
-:1064A000EB99829BC04F83F74D44BB35B886F9F317
-:1064B000E3C84B9B9A48746F637A7828FA0FE65CBE
-:1064C000DFB117E5D50466925F71E4864DC5EFD262
-:1064D000B8DC080567F2F27385E265F9EB5908E369
-:1064E0005B9337D4ED47BF5E6635B79B33D7042542
-:1064F0003BD473EA981F87C9AD64BCFD6C16D27992
-:10650000BCE66806D0CD104137430C7A5966A69791
-:10651000C17596B8D01A737D20D2057C37D0422F32
-:10652000D67E723446F1B8BCF5328F17CD32C77DB6
-:10653000F259F7FB3F0778F30FB9FD61161B6FB2F5
-:10654000F6AFB24001E265F70FDDFF590013FCD949
-:10655000FA49A98817902749244F2AE2DB3D31F4F4
-:106560006AE81BBDB48FC84FDEAEB7F7ABF2D39766
-:10657000CE0538D67A7446E307B349AE2B225E794E
-:1065800030F37A6707FA6DDC4524DFF7631DFD3CC5
-:1065900019970C8C96F78AF02319F546E147B28ECD
-:1065A0003755E57AF07B4C9F8A7818E50864605C83
-:1065B000CF9691BE730E8C67F381BE15E7BBB16AAF
-:1065C000029FAFA6FE2D1AFFB071FB481E32BE1F00
-:1065D0003377CA79E1A3440DDCA442199C04660414
-:1065E000D27F0E0B35E2FAD635F3FD2DD2EE16D161
-:1065F0002E8879053DED02D06E84A9DD3C9C0FB458
-:10660000D34DED2A62DADD26FA63A671F598716B37
-:10661000447FA4CFF5B4F3C7F4B754B4233DB0A777
-:106620009D16D3DF3231AE6E6AE78B69F7EF067CD9
-:10663000A6719979DC9EF7A576E33DF9630FE44FE7
-:10664000217A39943FA57C2E8CB3F4451B97115BBE
-:10665000793E874157FB45BB26A4AB42CC5B6163C7
-:10666000AA294F85E7AD34BA673A0351CF7BE8CA10
-:106670003DD317FFF95C537B758D8BE9C5F49CDA2C
-:1066800037FD5D11F1AA1F4C427FEBEA3459F8DB6C
-:10669000AE69D05590630354537D4D86786FBBA689
-:1066A000810262223E02B2F29B8551FCDD33FE3F45
-:1066B0000B7EE13F8EC03FDB02FF6C33FCA2EECCD1
-:1066C000E4EFD595B327E17C0CFFF2D9A6E50D41A7
-:1066D000F7FFE6F95559E65765995F95697EF69596
-:1066E00055938279FF97E6B7CC32BF6596F92D3383
-:1066F000CDCFB972D905AD9FB5DDDDB66692B76B6A
-:10670000F35F27FD7FAD88E326ACD41B56E07BE02A
-:10671000ED76EA4F23F93E8AE99FA33CE8EFBB47B9
-:10672000548DE482D323935C60F9F6507E36876BF8
-:1067300026C885E7541F97DF02CED72CF50F2D759D
-:10674000F8E56FB86FFA9861475AE47C3FFBDACA04
-:106750004CBE9FACF2F8E5E87D4D15B83938A094F1
-:10676000E44FA38FCB9FFD03843C4A837D8DFC4483
-:106770001924AF6C425EDD57CFF3D89A457E506343
-:106780005A11E1A759D80B2C9465DA370F4C9CD2DB
-:10679000867EAB334779DEE23A1BD7C756D6339DA8
-:1067A000E8ABDE49F945FBA0DF003468057D0FCB7F
-:1067B000E741DFC3724F7D0695BFACD7A8DC01E38C
-:1067C00062F94CBD9F0560FC6DF563A8FC31EA8B56
-:1067D000503E20F4C52BD264F2576CAE872D339F08
-:1067E000F4482A1FA9F78D5561BC9FD46750FD233B
-:1067F00069E6581BD9AD1D8D4900E7EE57F3285FB8
-:1068000069429A4AFB2F53C34A5249E4B981D78F50
-:10681000A44957E077E33264DECE196AF4C66F57B5
-:1068200086EDC664A8040F7307156F5ADC76E5364B
-:10683000C04BA95BF4E70B347AE2F7F72D6C57E411
-:1068400016FDA5698DEEF8FDCDC47147FA381E58C6
-:1068500046474362FC763760BB429F986F56584E5E
-:106860008C3FEE6C1C3725A53980F1AD2B6733D2F8
-:10687000476D69DA66292A3E141A50C164A0F39460
-:10688000D4E63A6CF78D809FE5C0F89AD7CF64A024
-:10689000679B1BDE17624E138F478DBF0EDEA33E34
-:1068A0008CEF4744BDC7EFA11C3B4B7C9F647EDF50
-:1068B000A397AF613D793C98BC646B32D79365CEAA
-:1068C0009FCB571E98847C9F6CE7EF7F8A75D4B767
-:1068D0009633431EF1F609FCFD8F8CF65EFEFE1723
-:1068E000A27D4A0A9FB76B8A338471B147BE7B4948
-:1068F000E6DCC2C87C2FFA5EC1B0B951F37BE47B01
-:10690000E332E7BA23F3B9E8FB1386CDEDC3EE49D2
-:106910002D977B7264516E25371792FC1CE5A820D9
-:10692000B9336A60A98EFCACACE770FD87EDAE862A
-:10693000863C822B88F2C680EB278BCD700DAE3162
-:10694000C3F5931A335C836BFB866B9D8DCBB5DEF1
-:10695000E083F1F5E8F11FFD37F3F8437E601EFF99
-:10696000D11F98C71F72E7571E3F1CBD2E9B6E3765
-:106970008F9FB5C43CFEA625E6F1B3967EB5F1FF28
-:1069800051FA78922D70C426F45D255AEFAC0B981D
-:10699000F45368F78A681754A2F5D840C0A49F4200
-:1069A000BBD76D42DF35B5AB8869F707D11F338D93
-:1069B000ABC78CDB21FA0BCBD1FDF963FAFB8B68FB
-:1069C0001794A3FBD362FAFBC080CFD4CE17D3AE0B
-:1069D0004BB463A67199795CF82950A19FEFB30479
-:1069E0003FFA47964D5E4371AF812C20A1BFCF97F0
-:1069F000CA461D82EF592ECFBF4F9EB2EC62B43B08
-:106A0000D7249BFD5CE9766E9FD9EC0A95BE44566F
-:106A100047F900CE60E68CA87C8B6A3BDFCF7ADE3C
-:106A2000BB8399D746BD1F28BE5F23E2D469F6D247
-:106A300046942BBEC1D03E8EBF22538C6BBC67697F
-:106A4000FE761DE0DDF8AF3347A3BF2832AE8DB729
-:106A5000BB588C9B151FAE35D97CDC45386E213E6A
-:106A600037F48B6026E1D7C74BE3F9839EEF49FFEC
-:106A70000578593DD9292B49F07E3DF76F1A7EF6EE
-:106A8000647B9D13F3761B2F92D963D82EAB6F3F97
-:106A90004E53BDD9DFA9FA2A74B4F70655FA8A1401
-:106AA000D6FB770F97CBE5F1E20DA3C5BC9A2A2759
-:106AB00035E7C1F8EC90D96F0B84CDA2F3610A954C
-:106AC000C0687B3CBF6D538129AF3E7950DF7EDBD0
-:106AD00046A15FF4CC033A8AB77E370AF8D8C602DB
-:106AE000939E959C3293F4ABE486AB9DBE38DFADAC
-:106AF000B5F4EF6233756C9798D6CC64EE5C34E9EC
-:106B0000614DBEC7F83E94093209E33F693BC2C8F4
-:106B10003F674BF8790A3523149428CEC1E7896A78
-:106B200025FE24AAE1A00CED076D54593895B1FB60
-:106B3000E5C08D881F575E33F9C7549F2E219ECE26
-:106B4000D94257D379025017E3E57FCCB3733FF0B6
-:106B5000C3DACCDF65C759C7DBEC9A492F1DF4A90E
-:106B60009D858B7B6F1F69C7E1EAA1D30CA04FE421
-:106B70006F8DD3E9ED8ABED84EFA5A968FFC8E8679
-:106B80007C35F85FC4B7E78E61E247BBE10F308F19
-:106B9000DBDA6C3CBFEF73681D15F7B94DF8BFE643
-:106BA0008A78F73C56E1C597A7995C8E7C759ABDAB
-:106BB000EA2D8E5AAFB5763B1F678D8DFC5B463C48
-:106BC000777EB3CDE4EF5AB8D15C5FC066A6A35C14
-:106BD0005AB0C1C6F07CC76D167FD8BFE17C615E3C
-:106BE0000B59DD2AD4D38DFCA0B93EA662FEF7E294
-:106BF0005F3D528A7943CD769EAFF301D08B16C5A7
-:106C00005755EE901DEDF97776155F3F9EE1F7A1A0
-:106C10005583509E26B3B8E78C6E5D6386AF3FF810
-:106C2000ADF032D640F0F60687BA558AEBBF7AD47B
-:106C30002E99E244CB9CDE910CE4CC39172F7BFCDF
-:106C4000297F74917CDF27E80836C0CBB89CAFBBA6
-:106C50001CCBFEBE3BD8CB778B9D1D76E48F5AB5FF
-:106C6000AE5C92237126872DA00F86EF6C7B268663
-:106C7000073353BB35E7D9AE4DCA39AF76E5721F3E
-:106C8000FD750A79F9C2B69FD9D1BF78FAA913D791
-:106C9000201F2EFAB5C29CD0AE739B8785715F50C2
-:106CA0004376942755BB94B871598AFCC3FC17FDF1
-:106CB000C24372A26A8723341DBEAFFAE53B231993
-:106CC000E0A1B3A1FBF060DC479F92787C34D8311F
-:106CD00012F7AD2A95DD122F4FEC84A0BB53CF25C0
-:106CE000CEC27595B6EEBF99FA6DB9C1E688920F1E
-:106CF000C7C4BE04EDB87FED4929941F477E18F143
-:106D0000AC534F4A1CBE3DB6900BE1DBBAD91E0016
-:106D1000386AB77E487454F68BED5EC443ED1EC5E9
-:106D2000E4F7ADDDAA841D23A93C8125C65124E0EA
-:106D3000EB1AC6E563CDAEC5E40FAF6959F7A1E222
-:106D4000C5EFCDF40C78F18711AF6F28FEE958DF5D
-:106D5000F973AF06A8FAA0FD712FE215FA9D634FF3
-:106D6000C278AED98F8DFD7F9A12DB1F63DD76A4CA
-:106D7000AFDA96B57C3C0BBF7C80BF64C6C64F9C27
-:106D80000E4B1C6B6BEA79E9898BB69F7D3408E367
-:106D90009DDAF1D74783B87FFFBF8F1EBD13F59AE9
-:106DA0007D2E1FF27BED53AF7959D43E98E3E07C02
-:106DB000D7F9E4CF9F7818F8A4F3B8838EEE75EE78
-:106DC0007D6F8806F3ED7CF6BFD335687FC7DEABF9
-:106DD000C8EEBF6377D9C0BEF643A4D350F43917C9
-:106DE00091C7A4ED9150D902435E94967539B84B82
-:106DF000612E80F3F4314708F39A6BE1D9B2225C3B
-:106E0000A7C5247FB1BE1CF05BB36DF587CAC878F7
-:106E1000780E0E9631C79E01BB64E03A5FFBED6FC2
-:106E2000946069A338492DEB26F969FDAEF628ACCC
-:106E3000E765BDAFDF59F6B91D8378B5DBD6F271D2
-:106E40002DEB771A7F191BBB7EBA65FDCEB2EA9F88
-:106E50003E8C2F77A5C68DE71AF1AFC5BBFFA54FB6
-:106E6000BDC99003FDE1B752E270791C7A8503F940
-:106E700069C7D34F3C9CC6D7773A20A473FBD9216E
-:106E80000CE8E3A4ADFB66948FDD7B1D3EDCCFAB4D
-:106E9000F6BE41FCD5B9FB15BB46F291B925D0131E
-:106EA0003A59CF4F3BEA0D3512AFD46EF1841DDE57
-:106EB000C83AD58466946B5E7A7E829E8738DDD729
-:106EC00084F65F27C559B7D58E1C2E8F433C696F5A
-:106ED000F1963FD899DBBC9ED2185CC71353F0796A
-:106EE0006FEB68CCDF87F3BF3C6A3DB7707EED8DFA
-:106EF0002F3B373B54CC4730D6B7D3C6F5FDDA909D
-:106F0000F4068BC3AFC6FE76A1F1D00687251E2AF4
-:106F1000E6DB1F3FF73F8F0BC3D3124CAA1C1D8B20
-:106F2000AF539FC797EF8F382401475DF9A0DCD896
-:106F3000FD496515C1C1D911784F8973B3A79E5218
-:106F4000424178BEAAE520C969AB5CA8E9454F7EFD
-:106F5000C6186FCFFE9128BF4E1D788EE8B066DB55
-:106F6000093BDA4787B7EEB4771446E81EE57F742D
-:106F70005EE4A967F68F24398DFDC7599F5F0B79B1
-:106F800057DB6AEEBF76DB87A6FE17055BECE417DE
-:106F9000ED679C0F54FD069CEF07ED368679F71FD1
-:106FA000B428E5F1F49B90C366CA835AE5293D866F
-:106FB0007E4525C5AEA1BC6B5AA1BF11A4738F3607
-:106FC0007EEE51D58F39802F1B93ED1ADAAB4D9E93
-:106FD000EB991625B79B2DF8F4A5F926625CCD3701
-:106FE000B9A224DA7E32E04FD66513FC7778CA075F
-:106FF000E27909B4C3344C3250FDE45756BC53CA4D
-:10700000713E8A4FF6B9E2EECFBC3FF4B721FDDB0B
-:107010007C32D3A2E86B54D9F5C3D1D5A632CD9436
-:10702000BF7AEF641EC735E67FEF456C1303B97B6B
-:10703000AFD4DD86F9ECC1AB795E201376BA17EDDB
-:10704000F4EC587D8EE9BA86F287C40F6FCF7423B3
-:107050007F147EBE0FE0C898BF23FB4999FFBEA2F4
-:10706000533E8F1DC7CD45FB2944CF135998EA8A5B
-:1070700093CB1F0FABA3E749ACA319CF30BDEDA84D
-:10708000F8D401CFEF2B4F9138DC61CAD74816E313
-:10709000C88959997DF13F9BAC9E8AF6FB38D8266A
-:1070A000B24BD0EDF8456A040F463E9CD1EFBDAE21
-:1070B0000912EE3738BFC178AE479C9FF7F5CC5721
-:1070C000A7FA00A36E19075BFA4AC5164BAC1890D5
-:1070D00054056F0D68263FC720D64265166BA73250
-:1070E000C5E9935482EF2DF24BC9ECCFEC8B440BE6
-:1070F0007CE7A18F9F93F5E301281B6DE2F9DB9EEE
-:10710000D0E350DF90CC4CE783739D9CBF2F77CAB0
-:10711000865F26106D7735B26A9ABB2B8D1F63315F
-:10712000BEBBDE1918EE8CA227C5DDCEF3BE84FDF2
-:107130006BD8EB5729CB29FEBE3A83DBD5BDADCF4B
-:10714000CAFA0A935D6D2D9B0738E76C66043FF71A
-:1071500053494E7E7E59679A2F9AFE605C67697428
-:107160003EA3AE937D2FDEDB607AF8D28178546245
-:10717000E96F06D2DF68A4BF0ED14937F9296E57EF
-:107180000257E37C33F2EA24FE3C2071BF97AEE065
-:107190007CD345FF72627566A08F79B259401F514A
-:1071A000792D1B84FDA8AA4C4D284278368975B7E5
-:1071B000D2A5393FD5D0D7DCA2E6107972BF2979A4
-:1071C00095CEA3A8696ECA4F719734DD8EE77C55C2
-:1071D00056E743F9E936F24FFC3C9FD0B08B5D0592
-:1071E000E63C4E87256FD526ECEF983C6EB1EFDE7E
-:1071F000830FE2E8C3D67DF77667FC3C2436267E13
-:10720000BEA0A1879D2FDD5BEDC86A67FB611ADC1C
-:10721000A7539EA52AFC0D13AFF3911FBC6B9BC413
-:10722000CFAD59E8A86B47D2489487C8BF78CF45FF
-:10723000A2782E6DDBBF1FF5A6262FD3935348CE21
-:10724000694A2E9E971AE594A05CBCEBC3977F8D8C
-:10725000FEF55685E1D6DCE536E2937A322E5622EB
-:107260005B6F5ADF0B9D4F6C5C91F3DB129FC16F1C
-:107270006EFAFECC3689CE4F296CF88FF1FC436D47
-:107280009B8D85E0FD19C6FB3FB389EB030B5F8443
-:1072900051F03CA8181FF7A5E8FD23B53C8169D142
-:1072A000793C41BD1DCFFFCF13F8185091627AFF92
-:1072B000D7B9E56DE49F09F07B0006CE1A64EA6F4A
-:1072C00091B27C2825E1093F8606FF90FE8CF99F4C
-:1072D000930376BE4F542485499F01FB17ED86909A
-:1072E00044F94A567F47CD1E89F6A7DB607FC2F37B
-:1072F00038B7852CF6A3258FCEC0B7952E0F3985CC
-:107300007DE066EE5EF0EA0F97507C94F86AC98BD8
-:107310003C2F6CC976294479CC1D439318E159213F
-:10732000BFD17BACEE41D83922F46BC19B23C38C17
-:10733000679766C673628119AF1EBF198F563C27C7
-:107340008DC931B55FA454DB89C8049E0BE01FE2F0
-:1073500019E420CDA306E611D662F159D97AEF2AB5
-:10736000F46FF48B470BFE4E59F07796B5EEE76F4E
-:107370005985339D589BE69DA986897FACFC66E0C4
-:1073800029CBD73E919EF93DE42FCE109D48F3F8CE
-:1073900077839C2D9C798AFCC46F467E7062CF7E79
-:1073A000F90EFB02CAA5330E9D98CB62F96B1396BA
-:1073B000C0D72DF54EDFBC7C8C4F33DF3C1BC6ABFA
-:1073C0007D54C6D947A97FA047DA0FEEC1B8641A29
-:1073D000F2B54AF12B5CAAE9504F6CB5F9D06F7940
-:1073E0004F51F735A8B7D7CEE7798E372770FFEB27
-:1073F0009204BEBFDA12785EF35D1532D3D1BE6F50
-:10740000554212FA8B7CFA8B57A2DED56AD3685F9D
-:10741000F375BFFC1D7A5FECC3F86EA6DC3C0AE195
-:1074200080F6E46FEF6A7DC77B6B94BED3B9E7FE4D
-:1074300061B8EF3C24B3CA787A7CBE8BC3D159F0D3
-:10744000E77424C7C5CE6EB2A35777D455E0BC0C01
-:107450003BC2BE8BFBB76AF6CC207DF2D0027E1E0B
-:1074600073F7297E1E738A32FB9B23A03EF6359567
-:10747000CB4DA64F9F93CE5328701D3760BE24F28C
-:10748000C17FC9A106C24FF3EF314ED5F81795A1C0
-:10749000FE5852B780F69F5F7BA7B46159AAB71414
-:1074A000235F4F6E4D9E88E7646ADFE27995A3DB28
-:1074B000CDFE1CA6541F443FD8D9637C5BBEFC980C
-:1074C0006AB5BB14DC8FC776989F8FEF876ECB5C55
-:1074D000623FF2B2F40BC98BFD91AC4F73917F9474
-:1074E0009FE3F2ABF1EDA74713B87D037891504EBF
-:1074F0007575337F03E0A96BDE209A6FD7C7FC6AEE
-:10750000A6AECF95F278F6D12D2E4E2F0FD979DC7D
-:10751000F6A105EED00A98C781055517A35DF4C9F9
-:10752000BF052E8E17A788D8072C49A63D4F4F625E
-:1075300063902F9AF8F932D69C19EFFCBCC10F0664
-:107540007F187C91B9202110CF7FF98E8BCF6FD21D
-:107550008202CA83EDDC27518CA7B301E0EA038FD6
-:1075600041D63018E1A9DDF311F9179CADF1FDD03A
-:10757000F5784803E9B621B8623CE0EB7BC0D44122
-:10758000E4077B7376BCFE836C03F99B16B834E288
-:10759000B74E27B7A399DA9C39D3837C5276F52A64
-:1075A00080F361E03F24F9876C7E823BB89831F22A
-:1075B000AFAA9CFFB3AE619BEF8AB2B7D6BA263EA4
-:1075C000E082FE1E70F178476AC02F21DCFEBF9F6B
-:1075D000F362FF5D9F3A68FD06093F8FF15D8BC046
-:1075E0004F5982FE23FC9E55A69130F407BCBE790C
-:1075F000B0FF5FB607F01D27BFCBD077520220FB4C
-:10760000009E14B74CE756D0DE427BA296193F414C
-:10761000523E0DFEC34366783ECB90B752AB14F694
-:1076200080DC2C71BAC3E84F49A98479633C8A395C
-:10763000797FED667D14252FCA5D94013C599EDB50
-:107640003B861C36E477533297834DF7AAA146094F
-:10765000D3DF3B5CE83FCED6B549985A95A26A94F1
-:10766000E7705125F3075148E63E92DCA3F78C679B
-:10767000ECD9BF2B71FD1B275DDC1E294B08FC0AD2
-:10768000F135B2ADFB00AA4F7E174BC5F59E22F433
-:107690009BB1A7B93C32F2FA6B85BD619547CF012A
-:1076A0009DA3C018FB0DBEEF8D3DEDF623FDF4C884
-:1076B000A10553681F2D6A2D3E88F939456F717EEB
-:1076C0006442FE80F54678296D0B2A880FABDCE911
-:1076D0004FDE18F2C4BACEA05CF7D4B30029C56D52
-:1076E000C06751FBB7554E1D7389FD55C8A9B36CD2
-:1076F000C2C0ABB4083D152DF31F7444D18F21A730
-:1077000022F414223AB48E2331674FDD978BF2E5D1
-:1077100088827E90AE893C3EB942F051F2C7A1AB5F
-:1077200071FE1B5AA7BA90EE77B4953991AD966465
-:10773000F0735EEAFEEB824C904F745CD7C69C1AE5
-:107740009E291F0F2B8FF8507C508F9AD79966492E
-:107750009C73D492AE8B733F82512EC9E0E7B8760A
-:10776000B4E524713B334CEBDE43F7C20F61F08587
-:1077700041EF56FA36F8A19171BF84A13F28528B90
-:10778000B00BCD7E8146C3CF1174519CF80EA10F72
-:1077900036BA2F5937017E6D0A4FF2615CE20E4F07
-:1077A0000EE533DF3180E3CD8A07A3ACFD14F4C3CB
-:1077B000A8BCF35AB59BFC5AB59FDA4DCF0DBCF669
-:1077C000860F03AFE310AFD297C7EBA7B8BEA36392
-:1077D000F1FB65E79DB5644CDCF372FF57E63D9E17
-:1077E000057EDD4176173FB761D097212F4A976E0E
-:1077F000CC24E26837DFEB65C891317BEA0EA28AC0
-:1078000068951397B5B26B114F63C32AC3A32EFDBE
-:10781000C98D8FF1974C3A7F716302F0DFA817662C
-:107820002DDA068F466A2C753A0035B25D2539C6C9
-:10783000DACF2F0ED512FE381DFD8B865E1A8357C8
-:10784000A1971AFB8B11075A9710A8C4F1A53DC048
-:10785000375ECC3FE5F6EE5A57605102B44F0498BC
-:107860001330D7AE209CCDED53335FF6C687891613
-:107870003E6B01BCD03904D8E7F2A558388CF1F33F
-:107880001292399C406DA8BF6495323E580DBFCF0F
-:107890002E6B240BE03E8CC736719E6B85FE759770
-:1078A000A55CEBAA68C079D9541674147D79B80D1B
-:1078B000BFE0BA043D88F87096EB348FC13EE647CE
-:1078C000BD7EB0DA22F9018E946A4DEA71D618FBBA
-:1078D000379EFB99AE4D44BA189CC7E83CEC60D487
-:1078E00083E2ACCFA6041EAF5DECEC388C21F3DA5A
-:1078F000E975E5DE3EE2D3917B06FCC24F65CEC35F
-:10790000E8DAFBC64518977CFBDF3FF260DCE94F05
-:107910006AB707E13CB9FCF71EBCBFE5EDE5DCCE7C
-:10792000B8D9A2CFEC14F84B4EAC780AF1774BFDE6
-:10793000DF4BA3F99D2DE37194DB420A1A9D3DF4C0
-:10794000BD686B22F9E68CFAE2965453DDA0D3C5EC
-:107950000E9E27659DFFFBC28EBA6DDB66FB600D38
-:10796000C70FB422BE4F0A7DEDE42E0FF9330C7819
-:10797000E66E1B65473CFCA9D521E2F0ED368E7F13
-:107980007D3AC6CF026229AC701EDE9748FDCD7FDE
-:107990004021FD620E8CB50CE83BD07A1BD9D9D6BC
-:1079A00079CC7F5B9B3210D66FFE5A89F4526CBF44
-:1079B0001CE821B06C35C5D9ACF39C13B4C6339721
-:1079C000939D6ECDF398C7B47513B2E3E47BB4F224
-:1079D00038F9C27EEC9A3F26087DA1945D8EF9E8C5
-:1079E0006759E18F0AB5FEED9A93F58C92B43EA8E3
-:1079F000775279AADE47E553091A8F67EFD97F9846
-:107A0000E84B6D2F457EDFD1F64EE24D5A446E5F56
-:107A1000B1F9A3833F817A31E3FE1BC33F3E5BE0B4
-:107A2000FB4A21BF170A7DA0F8D3BEE5F76C9CEF97
-:107A3000C858780DB93D1BEF958DC28321C7ADF8AD
-:107A400038D3969B887421255AE3C05F0D2FBD7DE6
-:107A5000B758899F3768F0CF53C21F306FCB8C5512
-:107A60008360FCC6BDEF0DE1F702B3A3281F0CFA3B
-:107A7000B4D21F637576E4E71E3A6BBD9BF063D00A
-:107A800005F05186883F66A0DD67A5B7FEF2893A0A
-:107A90006D1D43500E58E9AB536271EF154D4DE427
-:107AA000FEF2799A3E05ED50D85E56F1381D973FAB
-:107AB00027D5E6C377227F6EE1FCB1F857DB7F89DB
-:107AC00072A7EA170F7851EEBCAF36A7E378D58FCF
-:107AD000AFF4629CFBA41AF4E2F7EF8794B87985BF
-:107AE0000B1325E10F37E72BB035C16B906F3F7952
-:107AF000DCE6433F43ED56078F83EFE278833A8F0E
-:107B00007FEF8A9FAF50F5F307D2359EC76ACE5BF1
-:107B1000D862A3FC13F497E130BDC5717BE2C22D9E
-:107B20007DC7B76B77AD8B9B7762E40758E9F606A4
-:107B30000BBD025EC88E09023CE4161771EBC62726
-:107B40007F3CF204C0756ACB6FBD5261B4DF9CC745
-:107B5000C7CFB4DCFA530CF1F446AF9D82BE237A52
-:107B600043286E1E43B52DEC453BBC7AB38DECBA71
-:107B7000EAED0A73623ECB7107EDDB8BB6FFE6F5EB
-:107B80007100DFA2676D69D3F934285FC158A79EE1
-:107B90003C12B12E553B7FC3E3BD9AC82711EBB30E
-:107BA000E8D9FD76CC8BB1E2B1AC65BFBDC3928F95
-:107BB00040EBD472620A9DCB7BF29C1DF7D3F7F7A2
-:107BC0004974BFB2F5FBCACDBFF1A27C403C515C09
-:107BD0005EAC57EFF942E16B9E2FA176E487EB6D27
-:107BE000FDC6E0DE3A9AE8FB99E761FCCA371D94CE
-:107BF000AF54F9CC52CAEF794FADE374FEC8CA74E2
-:107C0000DC5F2B6DC1741F95FC79E5A3DF25FA5B62
-:107C1000F8CA77D3F9791E3D93FB6D829938BFF985
-:107C20009BFE85E6B7800588FE2A1F512AD05F7229
-:107C30005665E5CFC6E1933F093E79EF310706511E
-:107C4000D97BC26F197C5511F7FE5AE349FCBE95EA
-:107C5000B3C28EDE95281BF71439A3EDAADA2DAB3B
-:107C6000DB717D3EB8481FE8A3B8BE1A14F89248ED
-:107C70001F7FE5AA81428ED13D31869E5386CFB1CA
-:107C80007DBB8DEE8B89FACE74DFCB1D627C803B91
-:107C900041BA0CCAF4F8FE4C8F5B32E0E3F92F06D0
-:107CA0007DF5C6F75B783EC9C747B95CC1BC187A99
-:107CB000DF6E0B0F34E5C3384CF78944F23D6C821C
-:107CC000AFCDEF014ECA57E9C1EF3E89E2AC0B36AA
-:107CD00038CC79703D7463BDE7C69CBFB2D0A26F4B
-:107CE00019A5552EBC69910B6CD3F9E5AF54DB4255
-:107CF0009477547DDC41F643F5765B05E2E3AFDB38
-:107D00000EBE7E13D0F95F5B0CBE35CB572BDF5612
-:107D1000EE18CDE2F1ED5FDD7E16976FE1795CBE86
-:107D20007547E2111AFBFAE4EBC25EE4ABE28ED1D6
-:107D30000792302FF783A7165D4C7E060B5E0DB9B8
-:107D40006A95978F246AFCFE8298BC3ABE9F47F2E0
-:107D50001D39FE0C7AAC7A7A318DD343B7065D1AA1
-:107D600074DB4B9E96158FD6F72FA23C1A10EBCFE3
-:107D7000084E620578AF5EA39D15A0FF392827F84D
-:107D80001FCF8E93D7C1EA86A29ED1E8CE8E9B9F4D
-:107D9000EB77FBD08CC573654ABC78B7BF4C8EAB14
-:107DA000C797B8B95CD98BB40065B59BE3AD49C43E
-:107DB00057C012A4BC7FF429123F257B899F6CF029
-:107DC0009CD1B94A3F9DDBF627CA1F69A08255B8EE
-:107DD000B5292AFA538BE5A5B9505FE82EE6F5F1EF
-:107DE000F2CE1CA8DFE62EE1F5CBE4621B90E61391
-:107DF0006CF494C950AF31E6392FC9E4DF50E51374
-:107E00000F62DC457D9EDF17B70EF8DA591489F74B
-:107E1000263A58D05584F7344209F555D9BF5F85C5
-:107E200046E00647E01A37C9A3491AE2F594CF495C
-:107E3000F932773C7715E56756BBB9DF78F8CEF1B4
-:107E400074FFEED730FECDEE01BD8FDF64E3FD9C05
-:107E5000DA31BC0CF13AFC62467E0803FF45AA46C3
-:107E6000CF5D2D78F494F83F03CF7F3426DBA99FB4
-:107E7000EA9EF53ABFB251E43528899C0E9424B9A4
-:107E8000EE5928978AF5BF43E0037FD05EEEDA3BD8
-:107E9000F0317EDF53F7105C5F4539F347D41BBBED
-:107EA000FF35D18FE757DE4CE0F8BA2169BDED52BE
-:107EB000A81739872C45A27E53DAF65D2CBFED0951
-:107EC000FC90E39F85B1BF9B6E56787FEE3A0FDE44
-:107ED0009F26E95C8F96806866031E1A75A6D97383
-:107EE0009145CDF9168A52D41DA6713DA671591639
-:107EF000EC83B04E378CE5EB0438A57DF18D31BCB9
-:107F00003E2B94D3D8A1111CF7201CA31CA18BD00D
-:107F1000FEB909D4224ED766FBDB88D3D7FE4526AF
-:107F20003BB356D21ADD50DFF91623B9DC99E015C0
-:107F3000F907FCDE19C32F31F6A5B965B864257BB6
-:107F400016F13C0EE18732E2E86759AB829389F182
-:107F5000535BE4E178B69EE4647FF1B19FBB457C5E
-:107F60006C101B7481F1B167DCE7111FBBC86DE8B1
-:107F7000F322DE2EF6FF334772285F485531278FF4
-:107F800031BBA6508A88F1DD2E8BFC35E878C451D0
-:107F9000DFAD88971147D92DDC5EEA253FE224A3A7
-:107FA000BCE6511D05941F61B3E6471C9329E1A966
-:107FB000F4C5620DF1D924E2C6171AB737E2FEC53F
-:107FC000FC514C1CFF796F39C5418B7DF1E3F8E31F
-:107FD00094D914776047F8FA19717CA6142A08E737
-:107FE000D930D86008E751F3DF01B93C2DA8505AC9
-:107FF000CD5BE6E7E32C74605DEFBF58D7FB7CF305
-:1080000020DEE7F7AA8D6223290FC226F2207EC95F
-:1080100002F747E7411878EC2FCFC49A5762CD2377
-:10802000C90C98F134B8F252D3FB8BEA8A4CF58B29
-:10803000978D33B5CF868D30BA9EBB669AA97D7E6B
-:10804000F34C537DE8C69B4CED8785E69ADE0FDF47
-:108050005AD5E7BA8F6859627AAFC8A162BC0FD20D
-:1080600058F7CBF6FC202E5D18EB6EE46961BA116F
-:10807000E27734ACFBC3D9E43F2A93B4D8F5F78751
-:1080800083B42F5FE8FAE77B843E7481FC3E0A8963
-:108090000DE3443AD713BB6CEE35A81727036C28C1
-:1080A0006FADFA4572EB0BFF2D79E3E55B682B9022
-:1080B0008EBEAFE86371BF1F20F2239B64719E7474
-:1080C0009293F4817B64F996E87BE4AFF0703972A7
-:1080D0008587FB557E02FB26EE9383135990F64F5E
-:1080E00071BE9CA1430AE6EB4D65E2FCF963AB2649
-:1080F0004FC078664781968C2205EADF88C8FD9BD1
-:108100001C5A23C60346295C8E837C9FE6198DFB8F
-:10811000CE721BD77F8236C4F360270B7A8B68DF61
-:10812000A3B866324B939614A2E9D5B3BF685F003B
-:10813000311CAC1A9E8476D0CB383406699D09B4C4
-:10814000FFDF68C8BDCA6124F7CEB87BEEB5A0F3E7
-:108150008E67E6E5D2F3E33703D701FF1CB79BED4B
-:10816000A2FEFC53959BEFF7A0FFFF780133E519C2
-:10817000547BB81D55ED5178BC3CF49774444BD7F3
-:10818000FCCF2E41A06BA5F65528A2576FBCBD822F
-:10819000F27677CD08A2FFCFF03B1BFDD4B64E643C
-:1081A0003DF707433F37BCC1FD5F377C66F6E7DE2E
-:1081B000E9E179D7778AF1AE87C20778BB1EEFF481
-:1081C000C6F2850953901FE0795882FAB7DB40F573
-:1081D00003BA9F11C8B6213CBF67FED7764B98AF54
-:1081E000ADD1F7D7B10A1BC2F5FACD8B3DD8AEA7FA
-:1081F0003FA39FC178A613F6E9E4A02D1DE8A7FBD5
-:108200001B12EDEB309E139F57CC1EBC12B70E63B2
-:10821000BCD759E0F46BB0DE33999FFA35FA672C7E
-:10822000C1240777542EFA536A0ECA3F99FC1F4B9C
-:10823000F63A48FE75559DDBFE20BCBF6570C7450C
-:10824000A85FBC59F5D92588971B372A4C83F50FB1
-:108250002504EEF344E1EDF8BC8F3CF81EF484C72E
-:108260001FC44DFE69079DF37AB3EAE94BA2F5EA14
-:108270004D9E893FF6E03E39E6FCE23D654F0D2319
-:108280007BDBA0AFDB047D2D797228E9834B3CE6D4
-:108290007B53963C9E4BE7894A2516D78EC47B3F7D
-:1082A000302F7D07D0159E23DCF729CF1FDF7924DF
-:1082B000A598CEA3B2C07684CF68BFF3E59B865362
-:1082C0005EE7B1B4F3BB1719E00BA27EC5389C2F53
-:1082D00009FE98D59A5A2CF4BBE7106F37FDFAC9FE
-:1082E000D37F40FCEC7DFAF13BB14DC9F9E18389C4
-:1082F0007DCC2FF000FB18D93F5D2CC1EF8863FFC8
-:108300003C2BF4AFEFCB3AD925E7E40A91BFCEED91
-:108310001045F667601E774BAB928878F3A2C16276
-:10832000C817D009BD78FFA2B83FDD09F6D9702182
-:108330007FDA3D1F4F69E27108935E5772A8CAA4A5
-:10834000CF55C03F94F7976F0A34E23D8DBDEA7573
-:108350006199ECE12FABDFBDF325E57DA787F37FC6
-:108360004B0197DF2DE18410B71B5831EA7BCFE03A
-:108370005CE0FDB464BE2FD8A5CE0227FC7EC6F318
-:10838000C9AA3559B0DC791C1F58C7BFD3C3DA3826
-:108390009DF6E87F872EE57F674E9C032E11E7A2AE
-:1083A00063EC49E02BBEC92698F4C7F0E1BFD13990
-:1083B00097ED29DAEFC6A33E0F7A0AF2BD4BEDB076
-:1083C00027C799DF2F517E027D8FF572FBC4B987D5
-:1083D000C7E19C9A4EF79EB97CBE51682F19ED4FAC
-:1083E00089FD66F1E13787D8619D4ECB47BC1847C0
-:1083F000A8DEBDC38B66F2658981242FC64B8EBF74
-:108400005AEAA37CABCD43D0AE6D09F3F8C408950E
-:1084100005D538F735D76E2CA64BBF6B36A652392B
-:108420000CFD09F0A836CCE7D9B9A731259EBD5D72
-:10843000FB1F7B07E1BA3D3D809F971AD15ABC10C4
-:10844000E51FC2620339F7D4A7C3A9BF4BBCD93417
-:108450003F185FC5E7209164BCEFE86961AF757EA6
-:10846000AA503BA3DF117B262A3E58CBC270F301F2
-:10847000B20F5B1D1AAEB36B0BBF0FCED5EA22B99C
-:1084800057BB6F2AB7E39279DC737B42F71FC5397C
-:1084900036FABB042E5F334B81FEB7DBF9FE380C96
-:1084A0001860873BF2DC18CFD5FA634A6A77E6F1A9
-:1084B0007BF55C6A33FB863B1AEF1EC2FB542FA789
-:1084C000ABED096119F376BA81261F23B822703209
-:1084D0001AD7807318E9F3DBEDDDEFE2F94B3A5F71
-:1084E000A7211C1C4ED63A5443BDC2E5E3F15B976D
-:1084F0004FF307A558B86A47829E0BFC764F038B53
-:10850000FC7D04CC634B88D49DC013DB739890072B
-:10851000C3564FCE8AAE83401A13F97EF63DC35739
-:10852000374D203B27A8A05D0FA52705E7C9F737E2
-:10853000BCBF604011C703FA89139DFC7D4F7B27A8
-:10854000BFB24475F376FE245FE23489F5DC676AD6
-:10855000F89DEE90C2EF5E89FEADF081911AC05297
-:10856000FDC2F344B78BE4D6074768782E31B000DC
-:10857000E9F5576FC90CEF47FAE049179D432E788C
-:108580006E33F9ABADFDAD3ED6701FE665773D2786
-:10859000699807DA65EBA6B8514DEB7B745E71EA1A
-:1085A0009E13746E4B490AD47947635EC48A32C401
-:1085B000DF58D6DC88FE3D908714A76FC9E0F2E350
-:1085C000CCD14B1E5B1185EF07BDC2BFDB1DB818B8
-:1085D000F9A655F0E73ED46FA0DC2DF4ACDDFB6FBF
-:1085E000CC8D3E87156407C81FD6C00E517EA1F101
-:1085F000BC2BA4D239B0E1AF3B6FD1A3E8AD59F0A9
-:108600007BB3182F3F29B08AF876FF9FED5E0DF3FC
-:10861000585B86A0DC6D013DACAF7CC65A0BDFF425
-:10862000E4B79CE4F771C3BA3625C13A3DFDFA9E22
-:108630004BF1EF8B00FC8CEEAB3AEE20B9B93B9BD3
-:10864000F3DF8AD73E198972EB93BD8B2E467C2DC2
-:10865000F3DA0C3A9F9480FCF42C233966F0632102
-:10866000F2A384F742713F4A21D239F29FBD7D1AAD
-:10867000F1DF6E7E2F04D039D13DD0B90FF58B429A
-:108680001FD03D7D3F94F8797BBBCCCF81831CCF3D
-:10869000A7FA24CA57D9DE3ED947FC2C036A8B902F
-:1086A0002FC307A89F16FADB75ACC4729FEB294C49
-:1086B000D21810918F7FF3703E6D29D092FC309FBD
-:1086C000444531F141D43EC9EB621F957F74D3EA32
-:1086D0000DF8F7C3DAC5BE20F4AE7D42CF65C7B84A
-:1086E000BC5F2AF6B225BF19F7ED6D30DF252F29C3
-:1086F0005CFE0B3A3920F4E043F51954C7FD428380
-:10870000751A0D25DE0754AAD7E19F2F6163CA9B16
-:108710000F6239AEA2A50C8F4C4D98D57E909F610B
-:10872000D38723FDED3A70F570CADF3DEE6098A265
-:10873000B8EB6FDD7F7C0AF351F701FEE3EC4BE809
-:108740009F6514BFA9207AEC8D6EBAA48E6BC6FB10
-:10875000410FBCA77AAA0A1B7D0D1206E0E3F57B48
-:10876000AA56E3BD803725E9C7911E97FB02C79142
-:108770008FBA5EF95B3ACAF4DD47FFEC4579BFCBAF
-:10878000AE0F473ADB9503F6401CFA3C2CE8A7A451
-:1087900097BC8ACFBCDC5EBA24C8D621FDD4EC528B
-:1087A000E8EF169CDEA5E8780EFB5D3D908E7ACE54
-:1087B0004916BC7E3CEEEFC2AE9DCFD1CEE6A3DE25
-:1087C0003292EECB30D9994C592ED33DEFAD12F900
-:1087D000272A2D7A48356B5E3518F78DD6CD769CD5
-:1087E00047D516F3F7D5A8BF8CC4B26F7BF533AF6E
-:1087F000D05F72592EEA2F403FE49FE87E4DF13F53
-:10880000C628BFA70DF37B9E96397E405E121F1AC5
-:108810007ACC569F7E1AF5CAD3824EB70B7BB47BB7
-:10882000BB44F9FDC3B6F2BCEB7127B5CD8CCF9F2D
-:10883000F2C22A851C1CA7F2F8C5B8A3B9140F1DF3
-:10884000A333F2872C68954288C74A43AF13E729C0
-:1088500060DB25BD6E2C0B35E2FD720BB74A740E42
-:1088600063D156B3FFBE7AE32B87D13C5CDC62391F
-:108870001F2FF0628D6FECC05FE2C4372E4E12FEE8
-:108880009C216C88E9BC55DBF99DB7FAAB387FFDBC
-:10889000AAE8DF68372189D34D8D986F754809891B
-:1088A000BF4FE9C6FCDB5B057DDC2AE8A39685EDBE
-:1088B00098BFBF78039F2F5B6F33DD5BBC60D7ED44
-:1088C000741EC14A4795DB78DC0D1048F19DCA4DF6
-:1088D000E6F755021F55167CD404240B5C5CDF8E32
-:1088E00085ABE57A5CDFC5DB6CF4F739AC709D6570
-:1088F000B3298FE81F0D9F759DAE33D6E95276A937
-:10890000699DCAFBBE9F2062DF98F5DF670F5F4A53
-:10891000F92E67DA72C87F60D087B59F29427F9EA3
-:10892000BA91EB99A7F794258E40BBE888EA97A007
-:108930009FE2973EF6E2798FA2BD0AC3B860576BFB
-:10894000F13A3CA7BDB32DEF5ABC8FA2E82595F6AE
-:108950008DE2978AE85E90A2978A1273298F424B24
-:10896000457C403FB4EF761DC9FB7D21CACFB6C917
-:108970002588E615478A12513FD8C9B83F427AA9DF
-:1089800024B5236A1F599CC4FD03AB32DEB907F539
-:10899000F7A9CFDAE8BCC9545BF7CB987FB0B34DE9
-:1089A000F5AF807AF54B731BF09E8AEA27253FAA24
-:1089B000D987DB97A47D07E9ACD5E67310BCDF3D12
-:1089C00080EF83DB247F3EB4AFDD7BD5F0ED98E70D
-:1089D000BDB9D81F7D2EBB2859BB1FF32A5966226B
-:1089E000D9DF532FB2D17E7A6A50E2CFE83E167DAE
-:1089F000F31494B3A79EDF69A77383DB2596011355
-:108A0000399C71F019BADFE397AF50BE42D9AE5727
-:108A1000283FA137797F3AA4B030D9DDCD742FCC6F
-:108A2000E2CD46BD83CE415408BDA966CB09AA5705
-:108A3000A1FE0FE3556D52421AFC7A70EFAF28BFCA
-:108A4000A1661BCF6F80F7247FAA307EAA45E87C01
-:108A50002EE3743057C89F458CDF33B4A8999FA389
-:108A600033EE4532E87CFEB639948716936F86F66E
-:108A700025C5219A89BE63EF1BE2F46DBD77C84A14
-:108A8000DF2D067D0F63C390BE3F99C8F3C33E79C7
-:108A90002521B110E6F3C98B0AE5DDF741E7B49F64
-:108AA0001E11FBFF99B04CFB93D1AE73CF47B48F2F
-:108AB000D41E3963477D754AEB87B40ED35BF74FFD
-:108AC000463C7F8B05AA116FDF6A4DF4219F4FEF63
-:108AD000E0726B5AAB23847EEA6FB196265CDFAE00
-:108AE0007D3F6F4A417A7982D38B21CF160A7C2E43
-:108AF00014F85CA8F2FB9EAA0AF73F88F9D0D318B5
-:108B00009737D35A84BCD964C66F97AD4525BA1937
-:108B100021B1E6ECD8FD6E11EBA0738F5D99C3E92E
-:108B2000EF4906C15E453DAC7A9B350ECEEDFA1A93
-:108B3000CB7E7A30C9F6A5EEC178C7B22ED3BBF989
-:108B40007E360DE809E3216DE18642947B067EAC1A
-:108B5000EBD2A6E526F575DEF965A1B71BF56F8B9F
-:108B60007B265A7CCDEE683BBCDCC7F5F0AAB14A47
-:108B700010D7B5C75EC93B38529323F60AD8299F50
-:108B8000250DE076CB28E8FA852C85A5A545EC9542
-:108B9000D519F74F2F4AC3FB23B8BCE81C03FD616E
-:108BA000BE80CA484ED56E7384D0CEF81F85B75AA2
-:108BB0003D008000000000001F8B08000000000046
-:108BC000000B8D576D6C53E7153EF7C31F8913FBE0
-:108BD0009A78662C34BB31F9202584DB109A40D773
-:108BE000F626A51D83141C58296AABE2B65BD90A88
-:108BF0004E5085281295B889A9D6956942DA7E54D7
-:108C0000EA56DD226D621BAB4C096A9892C8A1A19D
-:108C100025E990A0401BD0D659FC60EB9490C0345D
-:108C2000D24D95D873DE7B8D1D12B43A528EDFAFD4
-:108C3000F39EF39CE77DDED75D7DFFF29AF544DF7E
-:108C4000EDBFEECDC2C6FBA54709B63A94F069DF89
-:108C500020EA20F2449A60FB242343B0ABAF7B139D
-:108C6000254423558B4209CCBBA1EAF335B46FF1FF
-:108C7000E7E1BCEDFA52212A23EA84D5CBF2FD9D2F
-:108C80006AD6CBF33BFB25D386ED3DF99F8ACA52CA
-:108C9000A2C981E98AE760576832FE71FFF796A89A
-:108CA000D877EA928F6295D8D8322FD0FD442F9290
-:108CB000F3D9A611ED9987F6F04BEDD4800E697FBC
-:108CC00039B5C0AF878C0CD6755E540C4B47FF0985
-:108CD0000F513351F7277F1A9E1721BAF6AE64F869
-:108CE0007467FDAB8D683F6FEF9F87F9377F27195A
-:108CF00016A6BFF84DA287D0BFED4DCF95ACDFD9FA
-:108D0000EB96F89FBEB217F39247FCFA1B687553B7
-:108D10004F39616E0FED1736493FBBAE04E1AF2FFF
-:108D2000E5655CC82E581F23DA7E78A6BF24A9F912
-:108D300036F2DBF397D68EE182F1355A69E46A00A8
-:108D40005FEAA8EE96C2F1171F90B0FFE488A2F97F
-:108D50002481DBDBDF2AC4E734C058C0FD4526216F
-:108D6000CFC973257611E6FD731FC66A89C6F7C1A0
-:108D7000B90F7E5A148187BCD2B14B06DF8F713D8B
-:108D800019FFC452A23F0CBE7F2FF30109883A6C31
-:108D90003F8C798B0BE24E23A88238119791C17ECC
-:108DA0005D9F2A06DC735C35DE483EAEE36A3668BA
-:108DB00014F0637A9FD9315C8D72492745BD64698F
-:108DC00058D8DBBC39A1C4EDFA7C1BF96C35B1FE77
-:108DD000299717A44E45E388F3590D45043FBBFB83
-:108DE0009DFACA038EC5FE9B8971419BF79F35DEB4
-:108DF00066EDE0F19B9501B218B72FAD766EEF8E60
-:108E000029F406DABB3F79A9960AF6278E13F5ED09
-:108E1000F24C4599B75DE764115FD7B91BD12AB40D
-:108E2000D7D23BAB35B4D7517A3F8F7F180BFC8834
-:108E3000796DF1BEF3F37EBE0829225EE27CE1CFBC
-:108E4000A25F3A7EDD7C7B68A3C0A1C7E5D50B217C
-:108E500059CC7F554BBCC2E770F2DC7FA3489B8E98
-:108E60005FB812E47AE5EA7DE7B9BB1D3776E0F535
-:108E7000375BF5F34F83078D23AA15429EC7C68A39
-:108E8000EC76C66560DBDFF672DD2EFB88CFC3EEC5
-:108E9000C16DB5C47E138965719CC39B833F5EC65B
-:108EA0003890D423E2B2383EC435D17731AAA33FFB
-:108EB000397031CAE3C9E32B7E6161FEF2338DEB79
-:108EC000B8FFD86955F0AFF14C93E0DFB13F37956B
-:108ED0002DE2C0C908B0DFE4881A677C92234D1FD9
-:108EE000B7635EF24C5B93C4DB9C692A63FD592E29
-:108EF000513C8D7169A44AB473F9FC5C73F09B1CFE
-:108F0000021FD02F51CCE10F55CDE0CF8EDE535E46
-:108F1000CE63479F6216F228B7EE90A60A3FBF6560
-:108F2000FE804FDD69C914FC38EAD81D7DC7447E38
-:108F3000DB3D6951EFEE231E67FC8F8E253A28D664
-:108F40005934CF623C3EE62ED461ADD75E480871FD
-:108F5000B492B6A4E7D0C39AB024D68D5E4A7C9B67
-:108F6000F932DA9AA8D5EA67CFB3A84DE443928BD9
-:108F700077AF678D3D87BF2AF6873C8265B4353E63
-:108F8000C77838ECF067AD971273C5F379EE3C11F2
-:108F90001D90C18BF3ED1E8DF94F64962C80CEAEE3
-:108FA000777576D3E31ED3BB0CE3A49D2AC2F8FAEF
-:108FB0009CDEB640CFA00B71FCB1BEC5DF8C873202
-:108FC00080B4C39CA9731B29EEA145F0B36666FF6C
-:108FD00013AC970D6C55E1E76E3AF829EBE0127C83
-:108FE000A9A11AD641524A021278F3EFD31E4D11AD
-:108FF000F1DA55AC0777E697D3990FA17F3AF4EFF2
-:1090000034F48F6D77DD670D59E0313A74E9DDB0E6
-:10901000D0CF228A3101BF8277E49DD4DCBDEFF04E
-:10902000D77DFB7C7E7F06DF72F5998064A7EB67B6
-:10903000D7E786E6D421E91FF782ACD4453B5F979A
-:109040009147BDE2F0CFE74998E5C8C3D3D79A2945
-:10905000673DAD838A22BF8947259B751E7156F8EF
-:109060000A747E628124C6776F966C0B5F87EA3E36
-:1090700013F7763273D6CB7CAAE97DEE35716E2D6F
-:10908000BA40D17C1D37F89DFBF276FD72F9F2A053
-:10909000CEF981CF428F23C2F27CBE1FD7BBF7E14E
-:1090A000869699F5ABA5B38F95238E274DC9B0E76A
-:1090B000AAFB96FB4EB1DC7DDDBA2F09272261E0C9
-:1090C0003179F6C6E6A5F0375AF7F70ABE473BEF07
-:1090D000C2DF0A97DF5D81600385A02EB57A2A0B77
-:1090E0003CDE2B4DDC13669D90BF0ADE4BBC3EFB85
-:1090F000F6CB12D78304DE773B2F55AEBFAAB0E67E
-:10910000E874849633AF7EAF69CEB9F5D80B590FAA
-:10911000A81E8F9995FF5F77BB4F7CD4C075B93679
-:1091200034D2E02DA8DFF8CB38F77C8F0C7C10D53B
-:109130004B0AF925BBFC528595A48DEEFD38936F43
-:10914000E3CC37AEF7D10FD63FCD3CE9DD1491F437
-:1091500082FBF3F8F9607581DF897E45CC27355BAA
-:10916000F34469619CAF893827D28E3FA26CCDA6AB
-:10917000A585E32997B759C1DB9F2CDE19E7739CBE
-:10918000E3AD4A0E6F3BFB3A48DC476EDE692FBE0B
-:10919000202E6BD067FF06E3939EA98A70C1B9F8B1
-:1091A000A18B737346127C5C4996C27E9BE1F119D8
-:1091B0006EAB9451611FA08CE8275A48CCE3FB5D4D
-:1091C0001E37AB9921A941CCB354F072159D15F30C
-:1091D0001EA229614D82C0C3B691216C8B3FB38E14
-:1091E000E5A33E9D56984F99A81ABE0A3EB294CC6C
-:1091F00055BF7CFE2A5DCDF11393F1B8D91A9F4378
-:10920000AF0FBAE7DCE0B71AD77982EC43E87A907F
-:10921000B20A6FF2804A6B14E4F3A04AFE62C47B88
-:10922000745816E77730ABDBAC5F4699BBEE0BACFE
-:1092300043BBD974CE295F35CF34E6F3BD138755D0
-:10924000F017E2792ABDEE113866C47E0F73E0C8CC
-:10925000BB957495DBA970A5C3679A7A96F779A434
-:10926000DF27DE39B2DF1278FC34ECD433003C83E4
-:10927000F0B3EAA04463D8D758E4E49BF3BF0AAF45
-:10928000BE5023CF77EE31B4690CFD01BFB38E68B9
-:10929000B5C6784999A87C2BF0F5719D8C92883BD6
-:1092A000F8C2D4B5BDE2DDE6D30E2124A3FFA3317D
-:1092B00009EF69C934690FC7E32FC9F0FB1AEC182D
-:1092C0002F7C57FF3AFCFC5B7CDE255D13785182D6
-:1092D000747E67CCA75F697C6FC83CAFCC81EF1F01
-:1092E000C0EF4957EF2E173BBA71D8DEA8CBA8C7FD
-:1092F0009688DFE07A34FA2B9613FC6E284D08BF6F
-:1093000097A523D5C2896AAF60BF399E07C86C6133
-:109310009C25B75E7BFC8EBFE922C7F299643E07AD
-:1093200020E77EC47500E7C28FB6D5E6D4DBFABC71
-:10933000C84E61BF69392EC8F88A62F805DF6389B3
-:10934000B16658B5CDD47796F0931D7904F279A41F
-:10935000781FDCC7F4033C1041865D9A934FAA4402
-:109360005ECCBF9752546CE07144BB4A1D9EEDFA2F
-:109370006B914D95B3E33BE94B9CE4FCA665636CB4
-:1093800054DCA33B9B59EF18A7EFE47092F3386DC0
-:10939000B163A9AC2E7019619DBECF67DF93C1BACE
-:1093A000A77C7635C79FC303051224D55C9C73F850
-:1093B000685C3FE6B189FAE5EA1FCBE374A0D8C147
-:1093C000073FDF1C1C74D471E9ECFCFF0753B7A7FF
-:1093D000EBB00E00000000000000000000000000E4
-:1093E0001F8B080000000000000BFBC6C7C0F0A3E5
-:1093F0001E81C3D1F8E878022F7E7952B10C038226
-:109400005DC1C5C010CBC1C01007C42780F82410AF
-:109410006B70323024027112102F00F21702712586
-:10942000101700D5363333301C6663603805C41717
-:1094300081F8061BE9F66B483030EC9241F0396454
-:109440001918D8E4A9EBC7513C78F15A0354FE5BD4
-:109450004D54FE576D06063D4304FF9D2669E627E1
-:1094600001F526033100FBB288BA68030000000052
-:1094700000000000000000001F8B0800000000003A
-:10948000000BED7D0B7854D5B9E8DA8FD9F39EEC5B
-:109490004942184248765E1030E01042048A9E49E4
-:1094A0000A8896D2889E165BAB4340823C035A4C96
-:1094B0008F78B2212104083050AC91224E10305ADE
-:1094C00068A3A2D216DB8094A2F5F4466BABB53E3E
-:1094D00002521E3E68EAA38EF7D4C359FFBFD6CE10
-:1094E000EC3D9909D89E7BEEFDBE7BD2AF2ED65EB9
-:1094F000EF7FFDEFF5AF358AE824F23F117211FEE0
-:10950000683A4C24840C8AA784C85A8F0352A25FFD
-:109510002CB4E4C945E972F27F1B61CDEBBCDF7F5F
-:1095200021248B90EFF032FA1782FC149E31E6630F
-:10953000A424A890AE92783F5308CB6BA2402E0A89
-:10954000F0D55A6E8C53EFF08D2169847CEA64A9C2
-:109550005E458BCA69FA9633DA984F88430817B28A
-:10956000F9D45D593D1AD3AB206D14C8EC4E4F921F
-:10957000799035848CA7C9FE2122A988CF3FB19E5E
-:1095800091363510D2658FE765998492F55B41E796
-:109590000FFD9E13C215381F0F91011E0A87878D7C
-:1095A0000409A1EB3AE29F169843E7DF3A5909DA3A
-:1095B000A160FB10684C7C061C67E761DEC1F39577
-:1095C00044E3F0EE6A29A4ED9C41916CA0B9A6FC9D
-:1095D0002A07292564F3C4BF06C2743E4E3942549B
-:1095E000483DC9E7379388BC9F7BC9E5AC3B713FD9
-:1095F00064D8A3F19815615DC67CB7D8E8BC32E9A0
-:109600007E8C17C95E9ADF543E2B0DE663ACCB917E
-:10961000629C6680EB0842363638306D9A302B8D6E
-:10962000403BD23B1BF677F3C42C718310AF7F64B1
-:10963000E271470F5D6F236FD7AA1D75407D639F51
-:1096400013E1B699C32744049CF7C6D1AED9D1D251
-:10965000FEF308111F966F76D246B00E2F89EECD1D
-:10966000871E7ADAE6D2BC6F825AB641EB8F2F534F
-:1096700046CBC12E3A4F8FC713B4D3724F80B57704
-:10968000BC2144356C1FF20CA1F55DC6FE4F10E302
-:10969000F0A4FFF7916A42283DFA727A5F8371EC79
-:1096A0006FD88321FADDFDD947AFCDA5FD92934256
-:1096B000702F8C4B965BF68BEC6170B5A9F4DFB420
-:1096C000DC3579FE0C5882FBF327AB016EEB8B5631
-:1096D000B856C35E95B0FD53E9FF2E16D0FE35C5D2
-:1096E00032BECDBCBFF9809AD6BCBB78D6D70AB5FE
-:1096F000D4F8E1EEF191AE0C5A59BA05F73B55BDDD
-:10970000FA37C65E73CC346E1BF1669E71D37F5CF4
-:1097100045AE423ABF44FB4F1B82D71CB3E1BA456A
-:1097200033BF49557F2DC78F3E3CCBA7F8518AFBED
-:1097300019B86174FCFB4B8017400F7A25F231A4F5
-:1097400045BADEE6AB49AF44F7A3A958D1D65038A5
-:10975000D855A54BF0B1317B01BFE01FB4A9BDA81E
-:10976000B95B180399EF58F860CBE07F0D760D30A8
-:10977000BFC47DF8A2F0EB02F85D11879F9D54A74E
-:1097800075C17E5707103E5E3E8F7557AFD4BAE85D
-:109790007AD6657F3F749298E07815A3B3BEF9E45A
-:1097A0004489797C83BEAE14422F027C2425F85A6A
-:1097B00098C2834C52827B93AC4B16185F89C3D9F5
-:1097C0002113034E80BF87F5C00D5E9C52B5C304C4
-:1097D000677BE0F867003F399374B9C7E0F7263933
-:1097E0009DF2AF4CA2BBD3B01719F29F917CA44F4E
-:1097F0005A3E452903BE302D18A6E334DBF878EA3B
-:109800006ACBBE7EC6F7355EAE07FED9526EC3FE8A
-:109810009ABD9C6FA88D38BF7EEDFDAC7DE27AFFCE
-:10982000027C743CD45339FE340640DE3886344F13
-:109830003F02701F51D73917D6A8128483C1FFA9E0
-:109840000024508FCA87CFA09D43AB46B8DB73423C
-:10985000248C70B3CAD3947C39418EF6C32795E625
-:109860008D3E0AE0BF392AD21B4994DF3C0D0DBB67
-:109870002C39D8984057B4ABA47266B4C0F82DD137
-:109880003371FDB281075C3FB019E0D8CEE859E5ED
-:10989000E32A301FCA0F9D248A9DBB29A643DE4BB5
-:1098A000EA30FF49A8AC4B00BC91C97AE073F6904E
-:1098B00048F4FCFEE36FE6F224D53A364F4C2E070F
-:1098C00086094C0E489E3ABE1FB7A84067821E26E6
-:1098D0001781DE4884CBBF20EEF7BA867AF20E5DA0
-:1098E0008CEBE87544A3F823E7D48542B49D04B417
-:1098F000485934F194B3540E6A66FCEADB47B21A55
-:10990000FBB351B0C03A6D1EC71C320652F5064C6F
-:109910004B46DD0EF4614B9B560FAA1CC59B4A01BA
-:10992000C67724C72BE2A1443A11F35A75D2F1F855
-:109930007EF37A29F1AB0F3F8CF56A4AB5B73FDE6B
-:10994000B8CA5501488166BB613E83F96C06879BA6
-:10995000978B6360DF22D387D3FD19DC3307E59350
-:10996000F78DEBCEC3BAD696969D00152E2DA8DEA8
-:10997000308DEEA7AB840800EFF5D0D924E8E18460
-:109980005E09721DFE994DC8B7856743BA87A18FDE
-:1099900055DF1435D9E027E280FA8B70D1DEBF7D28
-:1099A0004AFE4C4CF483727CC5E5E94BB7B0F174C8
-:1099B000FA3FA03B7F823C4D0B99FA25001FEB3804
-:1099C000EB006F10BECBFF5BC653C93687067A47E4
-:1099D00091A846E9D86944F5535E4C5C536402F2A1
-:1099E00044CDE9D5617B2FB52F6B09998E7C94D23C
-:1099F000AD19CF77723E10A869CA6FA6FD7E52EEF0
-:109A000009021F184CD966467AFFF56C4CD0B33763
-:109A100096EE46FED848F1A800F4FD5211F5A1F5E6
-:109A2000454FA86679F57383DFF4C30FA2C915C843
-:109A30003A08A1F0918AC49073CC3F8E1F897AD2E4
-:109A4000E5E287FB16EB7E7CD1FDFA759FFE7D7902
-:109A5000F8F18F8E67EC6B2ABE45F715F5EF166DA2
-:109A6000D680FA4BFF7DDD86FBEA2A22A1647CB812
-:109A70005B10ACF2C99C9AE507B9D3B25FB6C2AF2E
-:109A800007760F000F5B49829CE4FD3AEB25ED342D
-:109A9000E8B1B28AF2C8B01FD66BDB74D0E73FC919
-:109AA000214CDF8B2CEF12400F2A22A807410722FE
-:109AB000CD3BB5507483C0F01FF6C5D06F6C541DFC
-:109AC00033C357525D963C99AD0BE6F93BEB159CC1
-:109AD0008703C603BAF4D00E69BF520EE972A2FE24
-:109AE000C9E60F43313BFE9ECBC203035F01AC0CC2
-:109AF0005FADED9A036524D9FEF51BEF26EB7C5391
-:109B0000F2A5C4761E593B63D24752B793C9199345
-:109B10005E33B4CF7FA11BFADC2181EA858D81AF52
-:109B2000EB386FF80F95AF2D905279260DA9226171
-:109B30000DE4A4C6E8444B67F2B743B0D8E1C6F7DA
-:109B4000D4F360E3C56EA7B8087C4DD62CFA7262D8
-:109B5000DAD810F8924C91D25DFFF024791C55624E
-:109B600057876657D3FAEB1B3A26C177A3DE54D149
-:109B7000B0BFA9D834E9C732A1F51CF8955C1C0721
-:109B80001F55A299E4BB83746239FDCAF78FE03E8A
-:109B9000A05E45BBAC1335EC572187B01E7404F5AD
-:109BA00028179F2497B0EE20BFD1160AE1BCE488A5
-:109BB0006305A5BB8D4E9ED778DECFF32ACFE7F3A2
-:109BC0003C951390772B344F53A72DA262DEC5F33B
-:109BD000F93C9FCEF37E9E2FE079611BE6372AACDD
-:109BE000BF0D7294F5EFE2798DE7D3795EE5F90266
-:109BF0009E27BBD9F8769677D9A2AC7F37CFE7F30B
-:109C00007C06CFFB79BE90E785DD984FB57FAEA28D
-:109C10000E06A73EBED019CFA3F0E070EDCB77259E
-:109C2000E419BE64080C0F635F35F02688FC917858
-:109C30007291DE86F0368DF3CAD877EE47317D3FDC
-:109C4000A15139F749584439996ABEDFE7FC743BA2
-:109C5000E8B934DDDAA062BAA521807AEFA6068DD4
-:109C6000FB554AF0FBFA8620E6D7354CC0746D43AD
-:109C700008BF37364CC7FC630DD598EF68988DE95F
-:109C8000BE8630A67B1A1660BABBA10ED328D57744
-:109C900021DDD5A063BAB3A105D31D0D114CDBE6C0
-:109CA000953D5F04F35F40E73F007F183CDBEA0728
-:109CB00019546DE58BE953D22DE5EAE46CABDFA4D2
-:109CC000BCC092F7948EB2E45D456596FE1C399354
-:109CD0002CE54A6695252F7BAEB7E4AFE89865C9B9
-:109CE0008F8C7ED3D2DF88B61A4B797164A1A5BC64
-:109CF000B06585259FAFFF8BA57E5EFD1A4B799BD6
-:109D000033FCAC48F9D5B0BA0D967A43176CB3CA98
-:109D1000AB199997C5B7C8C77A96D99F91C8EFA5CF
-:109D20005C120AA1DC62F2A511F016FC5EC3487455
-:109D3000AF00FEAB6B4F80DD612F6272A79F7D99F4
-:109D4000D09FE2D9F79A4EC7A9F49D08F498E88C01
-:109D5000044CED28DF3F2532BB79C3BDCCAE6EBDD0
-:109D600037B97D8D9C9DAEA3F5F3E4FEDB1E51E279
-:109D70007A906EB1535AEF15B0FE3FDABF519ED8BC
-:109D80006F7C3C8A7315663D246AF845899E15B739
-:109D9000776D3DFEB960F71876AEE460DF2B4B823D
-:109DA000279B28BCD7AA04FD866B3D5504F48A4F37
-:109DB000544637644F2EDAE346FDFEF333E915C807
-:109DC0007F5C563FAD6716FA3DD7660EAC972931DA
-:109DD00009FD77524C205D54EE2872F5F47C4ABFA1
-:109DE000CA2B52703541F993D4BE27641BC2414A35
-:109DF000D06F9AE625F0BD29C370DD36BE8EC6CC85
-:109E00002AFCDEA40E3C2F3BCC0BE6C3E7658BB9E6
-:109E10003195624E9CEFC45806E627C4FC985E1547
-:109E20001B8A69456C08A6E363859896C7F2311DC5
-:109E300017BB02DB95C546623A36360EBF07636331
-:109E400031BD32F625FC3E263611D3D1B12FE3F7D2
-:109E5000D25825A657C4BE82DF47C5AEC37464EC92
-:109E600046FC5E12BB01D311B16F613A3C7633A65A
-:109E7000C5B1B99816C5E6605A185B84ED0A6277D9
-:109E8000609A1FBB13BF6BB1E598E6C5EEC13437CE
-:109E9000F65D4C87C51A31CD89ADC674686C23B6A2
-:109EA000CB8EADC77448EC7BF83D10DB8A6956EC6D
-:109EB000014CFDB187B15C8DB5639A16FB217EF72D
-:109EC000C51EC5D41B7B12BF7B628F63EA8EFD0C5F
-:109ED000BFBB623FC1D4197B0EBF3B624730BDD4CC
-:109EE0003E2939563E2E65BA2CF909A7D32DF851D3
-:109EF000F186958F97BF5260292F7BD1CAC783C740
-:109F0000CA2CF931872759EA971EACB2E447EDB75E
-:109F1000F2F1923D563E3E7CA7958F176DB7F2F158
-:109F200082562B1FD79AAC7C3C7795958FE7DC65E2
-:109F3000E5E3D98BADFC3B30CFCABFB3C80EABFD58
-:109F40003D65B755AE4D7ECCD29FA7FC09ABBDC0D9
-:109F5000F98CABF4A796768EA2A349ED9A447F398B
-:109F60008044A6F47D377105CDE72A469ACEF941A3
-:109F700006D01D4D3339DD0D02BAA369FA5716E339
-:109F800039D3A75F6DF95513ED2C7D28617E017DD6
-:109F90005B15F8BD9A87F03CFD22D07ACDC308FA54
-:109FA0000988FE6E2596E7B3FC0FA433953AF3DFDC
-:109FB000B2727281953B59FEB1C67F5B0DE5E969CE
-:109FC000A1EC20ED678F2D391F7F4262E76D17C42A
-:109FD00050BB44D7FBE7CA9E95E047B33BC27B2505
-:109FE000FA7DB1239C07AEE90F6CE14764E08B2456
-:109FF000B40FBEA791D02312F26BAB5FB415146EF1
-:10A00000DACFC762F57E28CF98D9817691B1EE6616
-:10A01000EFC0F3894A4C2E35FB09DA8DFAA30ACA40
-:10A0200053FC33E4059583F7BB7D2128DFF5A8B207
-:10A03000DBCECB2D72A33E0BE586ADA37939B824D8
-:10A04000EDB09F5232BF680FE6D340E32F04FBBE52
-:10A050003757A6E9527B5733C8F5BFFABBDF122446
-:10A0600084C7AF003E2BAF0F63FD35EE9913603D03
-:10A07000141E27E03B85C7F3D2A0D4F02070B24075
-:10A08000E71F30B068BF60F13F9E13C2BF954C7EA2
-:10A09000CC403888703B20A9080F037EF4EFAE74E3
-:10A0A000C31FC3DAFD11C74DE84FE6E762BF95F85D
-:10A0B000F85C1E1A789C21927032F81BE73EA423AC
-:10A0C000F70BF9B39D8A98741C9B5C8DE7A9FDF88A
-:10A0D0005E66825D9F1986B35E2A3FA9BC4C32AF93
-:10A0E000690AF74FC97997757E15E5FA3DD99FFB47
-:10A0F00085CEBBC0D083FA438D7D3A968BF951BC97
-:10A10000FD50D0EB283E3DF7A6FDE812CA07765178
-:10A110009E614FE20FD8D521E2F9FA503F45385AF7
-:10A120005ECFF5006A13A13E688C2B2FB6FA8F2202
-:10A13000360EC7C356380EA588FD536A72134F1EDC
-:10A140009B1F3FB734FA69EF9BBF751EBBF52031EB
-:10A15000DBDDF9ABA322E83572079DC798FEE31358
-:10A160007EBE60D091ECE17E13350FFB35C64D1CF1
-:10A17000874833F03C29157CFB8DF305CFEB2AE4AF
-:10A18000E4E79D747F104E4529F43CE3BCCEC83F04
-:10A19000F7662D9E7F37476A50BF6B0EF073F6BF90
-:10A1A000D15EA11F921C4FF6727C7A889F8BECDDEA
-:10A1B0005EE5C0769979967D2ABEEF265798E967C5
-:10A1C000E990EE6B63F5863F308F7FAFC1EF0FAD47
-:10A1D00062DFF3EEFDD8C9BE7FE88734AAB3EFDAB9
-:10A1E0006A99D717B13EA9A77FA673A0E16AB508FF
-:10A1F000FAEEF0ED2404DFF2D45E01FCC89A4A4482
-:10A20000DD04D7ECED472BAFA3E5D991EA59D7C1CF
-:10A21000797898048B35F8FEF2EA91B88FC401FB87
-:10A22000BD83AF3B2712DE3012EACDA6F548BCBC99
-:10A230008D8F3B2C12DE761DF8EF4A583F46F9F71A
-:10A24000797B97511EB2B68FF0F2DC55A7BA46D093
-:10A2500076B991DE97AE857A1DD67A9B79BD51503D
-:10A260000EF3085AC769E5F390F4DD04D0438A90F1
-:10A27000F4E9D08F6AED678381BF505E8EFFC6F22E
-:10A28000870DBE90C0478C762D29F6DFE0273BC1B5
-:10A290004F3002FD5598E6B426F7BF96717E65E013
-:10A2A000572A3C270B448B7D47C22E6B7EB649FF55
-:10A2B000837C28DB5A3EA1C05A1E1C65CD97945959
-:10A2C000F3DA244BFED33E3F4BD409F460F8590C2B
-:10A2D000DFCC0E95D149DC8FD7ED34DB2539BCDEE0
-:10A2E0008375CC1FD3E8E1F4C4FD322E4E97CD2503
-:10A2F000CC6E31D6FD24E75711EEF7D8D5D0C6FC89
-:10A300003063438E7CBA9F2DBF938203F9A11FE770
-:10A31000FBF1634E8F07B8FFE6877C5F1EE5FE9B6F
-:10A3200047C07F03F40AFE1B3BEC3FF3DFB473FF2F
-:10A33000CD43E0BFC17DADE67E98D958DE06FE9BD9
-:10A3400011E0275A80E916EEBFD9C4FD371BC17F43
-:10A350003302FC422D980EB231BB7CEBD45036F860
-:10A36000CBF64C4D6E170FB231BCC8074586A6B967
-:10A3700024F46517E02F456C3897293F167ACE4DA7
-:10A38000F323A20CAEE50743CF4179711BCB17F243
-:10A3900071409E807CA1FF60713639541B32E1EF21
-:10A3A000B817A3640EDDB7B7657E0EA051D5232B79
-:10A3B000EE2F8572D8A73785508F3C1EFA25CC8F9B
-:10A3C0001F0E0B401E83EFEAD5155A4F5DDC1D8230
-:10A3D00036BE96CE2EB0B335BD0BDB6DAD0CA29F55
-:10A3E000CDD8273ABA051FE8DC902F0EE3FB4F26A5
-:10A3F0005BF12137B60BF5E1E6BA596988771A198E
-:10A40000D05E2FD969D517866FB7DA49CD77CD1AC7
-:10A41000D0BF9CE82F53275BFD65CD2503B7F7958B
-:10A420005BC7F79426B4F70CDCDE199B39A03D78A6
-:10A43000855893611B14CF17C6AEC1FA89FA9F0CD9
-:10A44000F16F54AF93A72821380796A7A8187A254B
-:10A450004FD1781AE4DF433C5FCDF22A8B93A0FA08
-:10A46000623E8C43F727E1FC3B44E07C7AEB48C238
-:10A47000ED91DA35A11C9AFF6782F6C449F9CE2A1C
-:10A480009DE677CC7088D295806F2CDE41E1FB95FC
-:10A49000A144D723DD6E15C96E9ADF131998EFF525
-:10A4A0008B83F084D07F3374B15A260D40F7DB17CD
-:10A4B0008BD3A349FABD86D315394612F5EA6B6CE6
-:10A4C000F4FBDAC5B354E0FFF24D41B41F88C6E691
-:10A4D0006FF0B98CF481F76F57C27C7353F87556DF
-:10A4E000DB38BD9530FE68E07FC64A86E7A9FA5F93
-:10A4F000C7F959AC53B0F87F06DD545D69CB447B96
-:10A5000028E8013EFAB9C4FC688759FC9A414F8D8E
-:10A51000252F23FF36C6CFCEE902B38D341F99C84D
-:10A52000E22A287CD15E3C42F97829F27B02F55D73
-:10A530000B7A2A991F3D8AF10FAEBAA00E79C9C3D2
-:10A54000F005EC515E1FE7B3E1AE5921D8A7C61C58
-:10A5500012E420C6751A78D018103134E29312A68E
-:10A56000F7CA2AE51330FF9132CE9FEA59172F1A06
-:10A57000F68B04E789BACEEC37167765C4E30D6D28
-:10A580001B83F8DFEC5D89E785FA58A60748A49B92
-:10A5900088F9381F5D2C077FBF1A04596FCBD4058B
-:10A5A00033BE7D4D08DF0BFB1EC7AF4E8C4731E03D
-:10A5B0009708FF6F71BE9A4792DB1F83B97D93A105
-:10A5C000745E077CB7E5518AE749E266FCBCDE0FA2
-:10A5D0003A66A5012919746B941F90341CC7C80FE3
-:10A5E0008D292CFEAFCB6AA7FCFFAEEF1FB459E359
-:10A5F000F3FE47DFFF1F7DFFFF117D9FCBC7A96BD8
-:10A6000060236C1E962F6F9EBA46C7F559ED7649AA
-:10A610000E5AFC1FBD40FF26392F7BAC7AC9E5F3EB
-:10A620000D19F527121C66E1BF19D903CB19C3CF49
-:10A63000F1E930439F0F215D90A21262D6D79A8034
-:10A64000CF5338EEA470E47187384E365F97ABA7CE
-:10A650005A17317EC2CAB7772E38EA1C81FC5FC612
-:10A66000769E406708E4AD43EB46FE6BF069CA9FF7
-:10A67000C72A8380CF5720FF739544307E6D2DD736
-:10A680004313E10AFC305006E325F021A2A53BA0CC
-:10A69000FCBB0C0764F0E3819FB27E603FCBE5C654
-:10A6A0007D187118B9F40FF8D04699CD8F1CB2C639
-:10A6B000B1537C7458E275CF3D8CF2D4E8C7D077A3
-:10A6C00012DB35A9556A32BEF8A610FEBA32009EDA
-:10A6D00024FAB548021FA71C54007D6EE88CE9E8F7
-:10A6E000AFEAF36FC956BE2E078CB898FF5EFE5EC8
-:10A6F000A7FC9DF1EB5FD0FFB78B9FEF27D2716274
-:10A700003FA24EC49E24E3E7EB62C2B9B355EF17F4
-:10A71000648DDD13AAB39ED3C89EECE4E7093CCE5A
-:10A72000B366421FFE7EE38F147FEF3861633C8C7B
-:10A73000CB25C3BF7B07C47BD2FDA981F84F2ABFBD
-:10A74000E7916A1F147E40448C2BFB80BCEC1B6796
-:10A75000DAA77D0AF3E79316DB29B86F64C435DE08
-:10A760001E6179633EB56DD6FC7C322B0BCE35E68F
-:10A770006FB7118863BC83C8A77A8CF9533DE7FB98
-:10A780000A8BD3AE2575CDC0CFD672FF7D8D4A64BE
-:10A7900088435CF2CC8315606F1E50981EF52E85A1
-:10A7A000BF668A575BE8892A703EF1CEC1715FFFB0
-:10A7B0001281F6D1E66C8847A47A2DD8BD89709FA6
-:10A7C000DB629DDFA5E69F385FE37E52AA79C81D54
-:10A7D0004228991DF133C51A3777A97B536F8391AE
-:10A7E0008CE720D67B53976A775AD148B2FB5697AD
-:10A7F0006A77FEEF1CEF428AF196387A14E003CBB9
-:10A80000E4F074A1201EF7A5D8AA43432928E44305
-:10A8100063BBC0176EAAD77299F54E80017219F505
-:10A82000A68B03F47781D3F1AFF63FAC007D7EF0C9
-:10A83000D8C99970EEB3E8671271C0BAF67B4917B0
-:10A84000B34F1490630B0F4AE88F237257C58DA640
-:10A85000385A8CB8A5EB5FF4632FC6692C7CC21EF6
-:10A860009D41DB2F7CFA9D3184C2E1C29ADEE34335
-:10A87000C1CE784C6071897ACF981BE9F78532B9DF
-:10A88000AD3A091FF4D8199EBFFF13F76CC023A17E
-:10A89000E3C8ADD86FE7376C76D3B9A064B7E1B839
-:10A8A000B45E889D6709D16281CDCF7CDFC2880705
-:10A8B0007DFF5181CDEF902DEA84F975B42B615A5B
-:10A8C0006F59C75F106FBFFCE3033E80C3B2439272
-:10A8D00085BF2CEB90BAEC63303D69C7FB34218F08
-:10A8E00040F9C8526431343DB804E3C797766EFC32
-:10A8F0008BE483F656FAA1700976015C5F9582338A
-:10A9000020FFE4233EB01BDFEDDEEB03B8D27EE791
-:10A910002814AFAEF9D8446784F51F4BEFDF1FD57D
-:10A920007414C0AF659DEBD97809F4F92EFC634827
-:10A930007FB930CE6E950B9F90172BD05EEFC84835
-:10A940001A6FDF271738BD2E3AF0C92E9D8EFBFEF9
-:10A9500013EFEDD2E9FC17FFC747BBEE01BDECE7F3
-:10A960004E15F8CCB2C77EE72326B8CFB433BFC1AB
-:10A9700085471FD9B783D2CB853FD8D1AEBDF0EC88
-:10A98000D95C8DAEFBC2E39F6569B4FE5DCF4E1D01
-:10A990000C70B8EBA92F0F1EC84F00F81AB59BF723
-:10A9A000358AFD6B870416DC7F98A709FBF3DCC1B1
-:10A9B000E772619E1FBC66C7FB8CCBE8B7FA32D842
-:10A9C000AF25C8F721BF8AC279E9FE757F91C624F9
-:10A9D00083B73E54C4C3454A3601D8EF1BBF7675D2
-:10A9E00039A4B6A006FD915EE4DB89ED96BD42F781
-:10A9F000F5CAD4FBF809F99B02F05FB67F3D1B371F
-:10AA0000611F3F807F4CECBF8F8BFBEDE3E287D073
-:10AA1000E638989134FECAD8C7254FFDF3807A8076
-:10AA2000C10F2E05DF053C8E70A23DB4CA0E74F531
-:10AA3000845B0FB0FD8DCEA065170E7C924B287EF7
-:10AA40009CB3F5DE0A7CB2F759BBBA9B7E5FF8EC8B
-:10AA5000AB4867179E7A49D1904F128F40F5840B0F
-:10AA6000A4EFAF1BF486A5FCCC79D91E6F97DD1738
-:10AA7000DFA7A5D11BA66B3EFC7E12BF4719FE2F98
-:10AA80008D1EB94948B26F4FDB0B183F8F0E42B88D
-:10AA90002C21DD8A5A6ADD4F6102ECE3C9698077B7
-:10AAA000A9F6D158BF0AEBBFCAB49F7B18DD26D6E2
-:10AAB0005F4AE913FC887DFB1A155E2549E8F442DC
-:10AAC000BB5D8678E10BB64BDC03FE82FA5FA73DE7
-:10AAD000857DCFE170293ABFD4FABE28FC76817318
-:10AAE0007B507F38BEFFB7E4FCFF45CE379692F02F
-:10AAF000F46CA9BFFC9248481F9A1F9F6F73A784EC
-:10AB00007CFDFD0E290A4D13F9C4D2147EA7D7EDA2
-:10AB10004C1F597AE8C818E067EF1FFD09C74B863C
-:10AB2000F74BF79F54742E0FA2667990C23F799A23
-:10AB3000CF7BD9E1E4FD2DDBFF97A4FDBD2B87BEC4
-:10AB400001F37FB7DB4674DAC5BB9D52523FEC6F11
-:10AB5000EC364B5C61B3B7E2B534DA4EF2B9341877
-:10AB6000BA714DE8551DF492976D78DE41E4E039F5
-:10AB70003BF813BD2E6D038557A36F3EFA2B8DFE58
-:10AB80009A12E02407AA75B04BE5CCEA72A62347D7
-:10AB90002D76B14D152DF3A6723607E4D05B63CF49
-:10ABA000DA609D6F27E8836FCBA47930EDEF6D5DA0
-:10ABB00008AED692E1B7B5FFF02A896866F967EF6B
-:10ABC0007D0BE6437EE12410A722FDDCA9033F595B
-:10ABD000B6CB1985B880E79EFA741FC0EDC24376E4
-:10ABE0001E27C0E2CE6B55D6C7D9A73EDDF5EFB420
-:10ABF000FC2C34A6E3D7EEA2F5410FDFEFC6E0FF51
-:10AC00003F3F91368650FE5CFB8B7B66027FA90539
-:10AC10009E4AEBD7FE7830EA756706B1FC9903C30C
-:10AC2000A2B02F8B9F7C7629C891453F7213701973
-:10AC30003CF7D4ABB742FEC22FBC182779E11767A7
-:10AC4000AF013AA0FAB36696E37798DF2BA0FD2E0A
-:10AC5000823C2B172E9AE26F16414AF9C6A243692D
-:10AC6000780FC8540FDB2DB3F7AE0CA23F59CF16A7
-:10AC7000D1C6E9CA063A5CD4611D6FA483F949972D
-:10AC800029BDF359FD4836A3D76E6C57E1E078CA69
-:10AC9000CB13DB1BF5CB1D05967A46FBA5765297A9
-:10ACA0000CFF2B79BF8B3A3E1F61ED8FE16BFF717B
-:10ACB000D8F7EF08EC9E0A79DC89E76D8B95AEE159
-:10ACC000E9945E9F56C802A0DBC5BEAEE17E3ADEC7
-:10ACD000CF389F5CECA279FA3D9BCF03EA439E38C4
-:10ACE0007A7E04FBBBE41927017C5FF20B2F9ECF19
-:10ACF0002C79FAD3333FA0DFDF7FCA8D7E9325BF47
-:10AD0000B81BF77B89BDEB56F0FBF53E6E477FF332
-:10AD1000FB8F3F9F0B7AC8FBB6AEDCF401ECF3254A
-:10AD20009D76EE8CB0AE83DA052575743EFA561624
-:10AD3000C7564F5CC1D5109F028E03C0E3379C2CD1
-:10AD4000DE8A9FEFAEE0FEA00FE7696938FF52E6AA
-:10AD5000DF5AC1FD072BBEAA0DF69BE60171A66462
-:10AD60001C21772B752380CF4AB1AF108DE6E558B3
-:10AD700021A6463D490DE2F98394C9CECF6D994194
-:10AD8000525B0AED585C12F15CDF4767FF8B6EF196
-:10AD90008A07B4C1D0DF4207D3A7DB9CA1BB1D68E3
-:10ADA000CF78F07E29AE933204FD29B6AE4F05B6BA
-:10ADB000AEC4F97E6AD3EDC0CFE3E7DEEC9CA55EBE
-:10ADC000D65E85F34C7282F3A57EEB6774F6A19A8A
-:10ADD0008E7466AC6363838AFC647D4300D3750D17
-:10ADE0002544C3FB0141CC4B1C1EF6529D4870DF2D
-:10ADF000566373B57BAA43707E017DE2B986278CCA
-:10AE0000F8650FD4A1EDEFF010B44F258F4E6A3DD9
-:10AE1000E80F4338C1B90CC049E179B96D06C29554
-:10AE2000B6C7EF2B9DE15D001747CE280B9F52322E
-:10AE3000CB2CF97E7033F0E2C07F37FC08C26B7D0B
-:10AE4000830353B85F017083FB1590FFBF00BFE31E
-:10AE50008EF1ECBE8366A21FB8EFA059E82905FC6D
-:10AE60001EA0F0CB8CD355221CEA797C9B414FA9C4
-:10AE7000E817EEA7C0E5836D0D6D981ADFD353C8B0
-:10AE8000F5E14E81C7058457DBB87F1CF7215327B6
-:10AE900039267F1209E8782F0AEF5743B987F9114D
-:10AEA0008DFD9554F98C95FF69AFC27AEE7EC1266F
-:10AEB00002BF92EA1F26EF6498E87846B5534338FC
-:10AEC00007D17FDBC8E5EBDABEFDB4D2C7C6060DFD
-:10AED000D34D9C4EB6703AD90AFB0EFEB9A0887BC2
-:10AEE000DA3A9DA0FCBC8FE6997DDF45CC7E6D7F74
-:10AEF000B0B3CB46F71F7992866917F2AFD7ECD182
-:10AF000062DACE5D4A42802FFED7BE1BC5B592CE17
-:10AF100000F843FD1C7EE47081FF66F69E828DC9B9
-:10AF20002922B1346203FB2911BE8DC1A30EB0BB2F
-:10AF300053CD272BA8DB73E978596FD8917F67DE53
-:10AF4000D2F95A0D5D87A7D58DF6645690E1A327F7
-:10AF500018166A4DFB979542EFDBE7BC2ED349E903
-:10AF60007810C4F3D2745B5BA113E0BBD1D6190097
-:10AF70003EB8D1CFE48C369B8E7695A93DE78FBE47
-:10AF8000722BFD1BFC589D5C66C16383DFA64FB12D
-:10AF9000E2BBC16FCF3B983ED7E6AC1EEE8478DEB5
-:10AFA000D84EA4C744FC6FB429BA40F59446D025C6
-:10AFB00041BF3B29B0B894FE7C00E3563EECC9DFAC
-:10AFC0000DEF0EACE1F1D43AA517943BDCFF699C80
-:10AFD000CB1F20D52DF00E4C0BC52302EFD550FC16
-:10AFE000017AD84CF107D208C51F4627133035F037
-:10AFF0007326384FCCE7BF45C745769F4304994336
-:10B00000646A077AC0CF7464A203F442D9C6E259D5
-:10B010007ABD6227C4B3ACF5CC7284C0AFE32FC74E
-:10B020007DFFABB7266FA07315785104F046F50489
-:10B03000C9A9D2F8BD5F492D23604F1EF074E3F912
-:10B04000DED54ED132AF3667F846A7C9CF3F1A4694
-:10B05000E7FBF64FB8FEE4F7876F73723F658E4EDD
-:10B060008A4CF46DC499124D2725263A5F533C8DC6
-:10B07000C039687FFA4EC1C7F6FED7F0B1C6BC280A
-:10B08000EE9B2D916F6452FEEEC154175538DF3B95
-:10B09000D4F42D3FE2D95D000FE2D9DDA7BFFC5308
-:10B0A00041FF7926F2ADB83CD2D05F45E5D1FD1322
-:10B0B000800FA6904747DE1CF1358596BFF3BC2470
-:10B0C00098FD750B62EB511ED4C626128DCEB7A625
-:10B0D000ED7B98CE6F6B47BC3F175DEBC3389A167C
-:10B0E00066CF9D8BDAA2523EE2ED4509FCFA84F56B
-:10B0F0007F6E6723D623E07D318D7B6E276B4FCA31
-:10B1000035D4A73FE46BACD9620FC139CDB936DA7B
-:10B110006E0078D6803194443FC5F704E0EE00A974
-:10B120001B017CCEA0F7BB15CA97000E6FD993FA0E
-:10B13000D9573AA7EE00BA5EE90CB533B8A75FD687
-:10B14000BB16EF8854EF4578877D3758FCACCC8F21
-:10B15000F90ED78B892345B98FB75793972F697D00
-:10B16000EFF8BD34D75C1AAE2626FB5A22CCBE5E61
-:10B170007AA892BF2FC2E693043F993EDB6A473E0E
-:10B18000348FFB830C7C8DE34BD8C7EF975AF0E9E3
-:10B190008ED856DC6F61E3E8FB2752F87D44F10856
-:10B1A000FC72C2C6AB07031DADDEF0A52DB7D0FE05
-:10B1B0003F7E51C2EF0B624EAC7FFEDEE0FDB780FA
-:10B1C000BEFE6F36027CE4E31353F13CF6BCCDEADD
-:10B1D0004758E462F2FA1CA7E3F9B18D16FD787EB8
-:10B1E000CB5C05FC8FF3639BF1FB7C3894C17B2027
-:10B1F0007F3E5629C3790DC1F3D173CEF7A7AC01B9
-:10B20000381C2E433F56ED267BD27B29E79C9AE5DE
-:10B21000DCB9B6A715FB25543FCACCE2FD99F84727
-:10B220006D0C2EB1C0FEE804EE2DCCE77CA46F7E41
-:10B230003B6D163E72DE99DC4F12E37AC9FCD8975B
-:10B24000908EFAAFEF1A465FC6B83D8CEEE2EBB9CE
-:10B250007F62B2F5C4D73119EB9FF7271F3F8FC329
-:10B26000F94CC30212A27CA8C64EEB7960FC3B9B52
-:10B2700027809DBDD39F2E98D655DBB688844CEB96
-:10B28000AADD3947A931F51BDF07E72FCDFB90B7C2
-:10B29000419EBAC60372BBDAEDA270AED978F598BA
-:10B2A00030DAD98C9FBC630BE6025F3DDB766752D8
-:10B2B000FACE736916B950DBC6F787EABDE5A6FD7D
-:10B2C00031F625B1FD99376BFF7A2FF8011E604AE0
-:10B2D0004D2A78F5DBB7FCE4709BE862787986CA82
-:10B2E000D930C24D7BFA35C0EB4D6E8CF74C0DBF9B
-:10B2F0002B487820F8A5D05FA9BE53E61A0FE312B9
-:10B3000084436D1BC3834BC12D3E2EC783CAE4EB20
-:10B31000A9EDC3837AA253823DA55C0A0FEE21BA40
-:10B32000638075F4E1C1680B1ED4BA8AA7023D9E02
-:10B33000033D6544FFFD3FA5E8BE49700EB441C220
-:10B3400073A6532E3DEB9B2C3F16F8F3295F64E662
-:10B35000A4F278FE8EBDC5BE39A671CFB6DCE94B2E
-:10B36000E667AD4D853F453A29ADF83F873FEFA4ED
-:10B37000B8C7B5D259B908F6934492FB738DD4E09F
-:10B38000DF529AA7CFEE04797ACA53F0D7282D3D21
-:10B39000E40CAF047ABA5BD4C6CC11E2F6673FFD89
-:10B3A000B361FAD5A78BC15F587DF5691BEA43D815
-:10B3B0001F01BD329FC745A07F6308CA83C4F3D273
-:10B3C0001FB8F2939E8FAE6DA81B07FD12874E54D7
-:10B3D000739C1C617AD4FF86F1F3E3EB516C613509
-:10B3E00008F6A540AA01CF6D72B805EE03DB0299FD
-:10B3F0006375135C1F7031FF97F3D8B1967CDADE6A
-:10B40000F9A7175582F7CC74F4AF3972E40FCDFE6B
-:10B41000695B268B5F2445A6EF0510874CF3163B2E
-:10B420009FCE77003BF567028383EEB5F37B75BA59
-:10B430000472EF662731FE50FFFE8311072237B1F9
-:10B4400072BF51DCC4CAB9FF72590DF34F26EEEB3F
-:10B45000CD87D775833E73F3E12173C18F75B367D1
-:10B46000C49FE07CE167E0C3077CF733B99CD8EE6A
-:10B4700030A7D36FB58BBA8DEECB315BEF5137CCA4
-:10B48000F73BEC1DC76FFEEE98CD4DD3D75F396506
-:10B4900083773B6E83001DBAAE39445398121CC5A6
-:10B4A000F67349A797E53B07CDF29AFBA3A62AF4CA
-:10B4B000B79C9DF37EF377AF4C05F14FFB5B0BE937
-:10B4C0006D2F1205FA9F73506B66D7F8787F8769E6
-:10B4D0007F62BCBF381C1566E7C80E844B1C4E0E3D
-:10B4E000849B012778E606CBE370467DC380731FFB
-:10B4F000DCD2665F4FC6A4A6979B3DC3FF44C6C47B
-:10B50000E79508E78FA188D2DB7157E88F403707AE
-:10B510005CA137205DECE8CD950BF01E630FE4973E
-:10B520004AE1BC2C8A671F0C0B8F1804715CDDC9C3
-:10B53000CF5713E9F42DA01788FFE67198B7F2F5FD
-:10B540003DF7DDB35E8CB37CEAD55C4897483D9B04
-:10B55000BE01F4F66B09F5EF0F0F8E18302EED2DAE
-:10B56000EEEFF8D425F2F303B6BEDBB81E77DB416D
-:10B570007714DEE3BCAD5EB2E8BFB7D5B3380E22B8
-:10B58000778FB9C9A24736A5EC07ECCEC47E8CF5FF
-:10B590001DCDCDBE02ECC387C62B1AF81F8EBCF89A
-:10B5A000E11F6A69DE35CC81E7B29BFC1C7F2B452D
-:10B5B000DCF787FC21F768F03B6D480FEA749D1BB0
-:10B5C0007E493A450A9FA3235746ABE8789BAF16BE
-:10B5D000D167B525F670A40ADA95B2778F54AE8F8D
-:10B5E0006EE93ED506F878F6353BFAFBD3BD12CEB0
-:10B5F0006383AD3A17F4F73FB52B49DFD97378650C
-:10B60000ACD72EF460BCDB5C127100DF38D83D6B28
-:10B6100030CCC717242AA0FFD99D92C8F464C3CFA9
-:10B62000D125333FBB2EB37C88A7AAD3FCDEDDFA3D
-:10B63000E953309E625EEB4B184FEC2B4F7ECF6987
-:10B64000829BDDD7F576A7635CB4778A886F24790F
-:10B6500083BD02B4CBEBAE52B07D4418B07DDE2A80
-:10B66000F53A802BB407FE9F7799ED836E05E1B024
-:10B6700095DBC9EDB660F314DA4FFB26BF00FB6122
-:10B68000D4BBCECDF499B3530CFF4D04FD37B9456F
-:10B69000AA13DE5BC90D2171136F79C401F0DA0DB5
-:10B6A000F5987F13E1D03EF2E92E383FDE00B2017B
-:10B6B000F6D9C6F069C32601FD99147ED9202FFE64
-:10B6C000749FFD2BB08EBC164105DB9BA649E7BDE0
-:10B6D000DAE360F2A6F57EB403C13D0AFDE6EEFCB6
-:10B6E0002DCECB9B62BD3FF430FCF8D325F023C7B1
-:10B6F000CDFC36B9F5DDDC4EEAC2F716230027C8CB
-:10B7000087CAD93B87724833C7A1C4E987D9617416
-:10B710009D18075A334189821F406C69C77785E7B6
-:10B7200046ECE45ABABE56A13B04F4A28F17F97B4B
-:10B730005EA1B7004E9BB70EC678B675622817FD9E
-:10B740003BFFAAE0F9D8D1D0870FC0BBBCBB2628ED
-:10B7500048174743EC9EEC43AB0ADAC10EF7D657C5
-:10B76000E17BC1515541CED2584E5E8078D2C6554C
-:10B77000A22AD0FA916AE33E82EA02BC182B7D74B9
-:10B780005D099C9F0D11C19744CE0AEC9D91B5AB0C
-:10B79000AA54D8D7B56AA660B65B748E077FF457F3
-:10B7A000EB6EBABEC0BDDB548801DF12CBB802FC21
-:10B7B000857A8BA2B1778BD9FB24197C5F32BAC50D
-:10B7C000AEF93ECC7B16501379CB64E6A7FCDEF5D0
-:10B7D00061E65F8433C90AF42FF2BF00EE6B26CF17
-:10B7E0006D18E5C2CCF635F3B13EF49345FBC9289C
-:10B7F00017BB2A68BFBBFDA15D284FA63A104E4477
-:10B80000EE69033845A76607E1DDE46D1387BF04E1
-:10B810004F54659CE89D0572343ACCF57A3BF0A90B
-:10B82000B58A06749EB1EACC2DF0DD1FFCFE9D901A
-:10B830006634FDFE1E9007FE9EBF34E0F7E98AC520
-:10B84000BF97F1C6F9CFA13CA35AB1F8093FF3570E
-:10B850003FECA6F0D9551A89D468EC7B282BBE8E14
-:10B8600003ABBBA7C3FBD9676F1083BB7939AE6B42
-:10B87000BB1ADDC0E0560E72CD80DB3A51EB84F787
-:10B880009DF5990EC48F22D28DFC6A089C2217C6A2
-:10B89000F725E38DF5CB214E22713ECFB885BE77DB
-:10B8A00061E09D4A8CD7A7724C1932C50578FD78A6
-:10B8B000597700F4F84DFEE4F1099F7A587B7B8AB2
-:10B8C000FBEE1F79183E004B6C2BC334341A520F19
-:10B8D000D1D320CD7184203EF67151FB23E2F9369D
-:10B8E0004983FD81FA36BA7F475E7817FD83472288
-:10B8F000BFC5F4654F097BD78F125C16BCB35B7E66
-:10B900000ACF4736AB0C476A5B18BFA80DF438E086
-:10B91000BCA2B694A8BB39BEE9069CC1DFC5E555FB
-:10B92000CD4D0CAE99A504CF5BC12706EF9E6541B6
-:10B930003D0ABFCC96D5CB711F49B75E48EB6D86EB
-:10B940007E617F9AD8FD14427A1C48BF1109CF1B33
-:10B9500029BDFF06CE136B5A07E3793B5C7787FE60
-:10B96000D2F9B8E9BCBF76DA0FF8FFCEB648643733
-:10B97000F2B76E78639868AB282E237EF65696D081
-:10B980007EB57255DD60E081C1C72869CCA3F202A3
-:10B99000E0364FD79703FE9D72A82FC03CDCDBED4D
-:10B9A0001AAC7FDEF667EE06BDC51DE86901FE50E4
-:10B9B0003B81CD37BD957E47FD46FB0DD4AF6DB5C0
-:10B9C0006B6C3C0EBF728E671C0EB7F379DFBE93B3
-:10B9D000CDDB352C1A01FCAC5D45E10A656186F7CB
-:10B9E000E0D2BC28225D9D80F57BF52CEC77D0EC75
-:10B9F00004BA48C03F635D357C5D35ABD8BA08A753
-:10BA0000273AAD2EE8B7A69CAD731E61ED45F84E02
-:10BA1000FBBF9DAFA7467F1AD3DB5BEC96FE779505
-:10BA2000ECE986F9E4972A9A807066EF6DE6F27584
-:10BA3000E536B1F1724B9F4678917AD37CD12F6A6B
-:10BA4000CA53BA3AFB3C252C78CC22D781C874EA79
-:10BA5000BB0A9EA3146DB7AEEBECFA110FB782FFD1
-:10BA6000F33E05CF2B1E17836FE5A11DAA688CFF3F
-:10BA7000047F3B03F8F4ED4D78BFEA402583FFD9FE
-:10BA8000AF9228E043F189EA748077F189304FEB77
-:10BA9000F01C9B0244E8E37B747ED4746A11805FDF
-:10BAA000C60A7FB800F800DD67D0078799E74DE741
-:10BAB00097D192550571489913D2AB147C4238A1A5
-:10BAC000FCC48E59F01E6EE6B11D77C238438869FA
-:10BAD0003DB4FC4A6F21BB9F758C9642BDFA33F78B
-:10BAE000C27EB4F277ED8B6166E9981E833483D20F
-:10BAF000F7C67498A74CA694C5F9C1DEFB2AC60206
-:10BB00005FC1BB2565987691B2FE7CC3547F24AF9C
-:10BB1000AF0B49EA5578358B5DBEF7BE6923C17E10
-:10BB2000DF0C7A621ABC0BA87E04F1317A5044B85B
-:10BB30006FB675394A33E1DD719180FEB2A5E4F745
-:10BB400022D0DDE6832408F89151FD1F76F33ED61E
-:10BB500079FCB86E59211B81FE8F8E3C331DF6296E
-:10BB60007A84EA9DB47ED5AF3C3BE03E71FB1F5822
-:10BB7000FC49FBF37528BF57E62A49DF7D2697D09D
-:10BB80001313EBA717CF423F5EDEF6ADF8BE6CEDA8
-:10BB90007439782DAD9DB9BDB212F418AD9A62D743
-:10BBA000603AEF9D635703116A33D87995369D7DCE
-:10BBB000D7A6B07463C3827160B7473A6467119DBA
-:10BBC000EFA8F5ECFDBE8DA51F3AC2542F2DAF7C1A
-:10BBD000C2F155FAFD74399582F4FBE9C91F3AE1C7
-:10BBE0007CE6A1F2AA0C80E7C116AB5E47E0713695
-:10BBF0006A078DB647425E3AAFD6DF1184A764EF7D
-:10BC00006AABA179E9190F6838FDEC9BF5ADEDB38E
-:10BC1000014FE795607872FF7DE7F2626E7DEFF489
-:10BC200002A05B9DB073D4C8FDC8946FE72C235F5E
-:10BC3000EF46A6E3DDCEEC93881C3A0E7C39521A0F
-:10BC400056A089C1CF5A8B6BF6013F53B8DE4FEA3D
-:10BC500016E0FD48A47F09F4A1DECA6476D3B7DDFF
-:10BC60002EC4ABB33B6F7C15FCD3F3EA99BE9FB7F0
-:10BC7000F32301F783EA7D4368FF79E5F8E425992A
-:10BC8000B72AE2180DFB5324124D83F97412B01336
-:10BC90002254FE98E160F4FBF7B6DFE1B1E33ABE6F
-:10BCA0000DC6F3F8F87A3C7C3DB9C1DECA64F1B345
-:10BCB000DFE2E37EE7C18F8E4C04F8AF6226525E6E
-:10BCC000E4A4E030CD234FBFBC79DC02FDD1793C48
-:10BCD000E961F7A7BDE53D78EF2891BF833A0F747E
-:10BCE000BBCB7D612CB3EFADFCB45F9EE355E2F7B7
-:10BCF000DC047E35DADE793DEEEF01F6BE3A2194C2
-:10BD00006E1DF8ACA8C6DE9D8D1AEFA0D741BD51BF
-:10BD10005E8F0A78D03AF2F765009F4D5C5FB8BD40
-:10BD200094A0BD7A7B4E37EA0B739BB8BE20079B6D
-:10BD300081C9BA77FAC90693FE802E2C702D357111
-:10BD40007DC190FF5C6ED706BA5B50AE827E60927A
-:10BD5000AB353A93AB790126D76B5BE8381A47E6E7
-:10BD60000AB35EC2E4B8B69DEB0F5C0E67F07133A8
-:10BD70005B98BCCA003DC207E1073ACA653CCBCB21
-:10BD80008AEB2D834A99BCCC687D1CE5DA1FC0E99B
-:10BD90003208F8069397C35E7A45073005E8E73620
-:10BDA000CAA78FF1F2804AF5B3F4B87EB64EE4E745
-:10BDB0004C84E987185B4FE77998D737BEEFE1F3FA
-:10BDC0007BFC58FA5780BFEE8D148C954C748B5EBB
-:10BDD0004F9ACF2D67E7F4B9F5EC9CDA1B9CBF4F67
-:10BDE000329D3F6CF5707BD3C0ABFAAE00F48BF79D
-:10BDF0001D918FB3F7AAD6537D09FD4FDCBE9AEB98
-:10BE0000E67E0D8E3FA9E489C187BC24E42BA5F012
-:10BE10003D1DDD87FC5AA7F612ACED74A4317B21E1
-:10BE2000D07BE4867298FFE6897FC5B88BBC14F698
-:10BE3000A2C3EB30E0F085F8BA77FA2BCC0EED1602
-:10BE400093DE9399CAFD0F9D3271033C9D11F6DE7E
-:10BE5000A1738292B4FE042FE39B195E768F68F380
-:10BE6000C47D78BF31A57C96892E2591A786BC6DAF
-:10BE7000857D9E44C8CCD65B9B75B4D3A3D512F206
-:10BE800057760F30C27F77462F51D06FD86A8B38E4
-:10BE9000603FB694F37D551DED703FFD0BEF0B85B4
-:10BEA00007ECF3FA901815F2619FA3EA68E6D7C190
-:10BEB000DFED394BED77F339C52CAFC8E1A489101C
-:10BEC0009F98D7C2F06BF34405E7B1616C56BB9401
-:10BED0006FE6BF02E79F0C4E1B261E47FCBADCF93B
-:10BEE000CDAFBF67D269D339E299071E290038C7A1
-:10BEF000DF6F090D787F617EFD4B93F624391FE8D3
-:10BF00002B073BCA037660F49BE67396855E6667F3
-:10BF10002DF11AEF3333FE06FCD586C645341BFCE3
-:10BF20004B07AE8EFAD07FBF989DD7DEC1CF6BDFB7
-:10BF3000DD7323BEBF301AEED426D9F7F30DD6F742
-:10BF400017CEEF7D249BF935A216FDEA8E7D3F19B1
-:10BF5000C5DE9FD1F9EF72102DB382BDA38D72FAA9
-:10BF60007850B74BF1F7D114F85D0CF0B703051713
-:10BF7000C22BA09D987A807E0BE1F7857A315541DE
-:10BF80001C15829D14C4349354639A45EA300D9075
-:10BF900008A6D9A413D31CB0730B412EF462AA11C6
-:10BFA000552426BE5F4082982F22D598CAB06F19BB
-:10BFB000F17309B9C381F117707E01746F9C531836
-:10BFC000E7FB377B6B1EF02639AFB8C71BDAC1BE63
-:10BFD0007721DF9ECB59F8891F8DEA84FB3D2B36F4
-:10BFE000B1FB25065F47BB86F6FFC3742607F46DD9
-:10BFF00002F2AF35EE99D7201C5B6DEF9BCF1B880B
-:10C00000C35104BF3F63F43B97FB17E672F907EE99
-:10C010006D76FF2E88F77FE6829FC1544EFACAD90B
-:10C02000FD6BA31FD13D79F840E77BA6F6188F5C26
-:10C0300093A0FF5F526E27E4E725B6FF1B9D505685
-:10C04000DC0FF7C36BB45C76CEC4E43645240DDB5D
-:10C05000B5D84FA21D16991A32C3E5258EFF863C2E
-:10C060009997E0D74F4CE7C99C2E12FAA192CF0FB7
-:10C07000F766F00D14135D1BEFE81ABFD375472860
-:10C08000AC0C61CD02B08F2A9F7784ECAC1A42D3FE
-:10C09000739037F9F37FE70BBFED35D1891AAA13F7
-:10C0A000CDEF34CDE77438556AAD04FE76364C8258
-:10C0B000603FDC41EA36833E465E9190BFC13D6CF5
-:10C0C000F8FDA06170A0918E795DA1E9070DEC5E8D
-:10C0D000CE1978476904BC7FCDDE517A0FDE4DA2C0
-:10C0E000E9E8B6BB67021EBC0BEF27C1FD5B4EFF44
-:10C0F000C6B8A33BDD7340EE8FEEBCBA16EA8DEEF8
-:10C10000B0E3EF45951C5C5F0D7E2178CFC545C738
-:10C11000C9A1E339D2818F1094B7EFB5BAA26BE809
-:10C120003CDF6B93902F7F522AE2BB23F06CA6C4B6
-:10C13000E797960EFDFCFBADA087BCCBF988F17E9E
-:10C14000E47B951ADAC7BF3CB04E807B09EFCDD1B6
-:10C1500070DDEF0DE9CC4D07B9E463F1E545FBED8A
-:10C160005D05741E0B1FFB43410DF0BF82C8C26406
-:10C17000E7CCB93E264FDE7B8A603CDC7B4EFEFB83
-:10C18000488E4E9FD9CF1AF00916BEF59E97FFCE66
-:10C1900052CE25EAF1F872E2E9F431BAEFF4C1794E
-:10C1A000D4FDEE1FE1FDB5334FB1738A5F3E509B66
-:10C1B0000BFEA8229FC6CEBD0F3C8971E3B00EB026
-:10C1C000A3E9FC3498DFFDEEB7DE05FF036D87F7CA
-:10C1D000338C76670ED4B2FA6DB4BE0FE14E7C6537
-:10C1E000800F0CEE643FE31386FEB8289A85BFDF0C
-:10C1F000102F17B11CA6E8A4F01FBDFF063CD7AA5C
-:10C20000F0A5337C563B47CDC2F94772611D07AE9E
-:10C210000EE7821FEF8CF17B52722417E070B33768
-:10C220005CE133ADFFFCC96790BF9788756FDF0B8A
-:10C2300078F904FB3D93BBDFD82A9AF9C7541FD382
-:10C240007BEE772FF5C179D499BE7775222CDEE786
-:10C25000307BD77511A7BD33EDD47EA2F038BFFF78
-:10C260007B587EA6EFDD9B4E8C273BBFFFB9744801
-:10C270006B783C3F89DE88F445E1D2E24822AFFA90
-:10C28000EE4545D97DB70B027FCFF441036E75CAE9
-:10C290002CCB7915A3EF9C9DF9C7505F8E26BF2745
-:10C2A0009728EF13DFA7BDD43DE0539C4E4FF377A3
-:10C2B0004DEEF1866B7C49E448CDC625B900E71AFE
-:10C2C000B85387710E95D782BD8DF74DD8FBB45DFD
-:10C2D0000827E3FD59FDAA6B21CEF18C9FE5BFBB7A
-:10C2E000B97A9DCEE1C8EA4F63EDF359F97D504E1E
-:10C2F000EBFFDE5BBD9C8D4F04F6FB48363FFCCE6A
-:10C3000085C1FF52AFDFFA3B171DC093C7637FF7AC
-:10C31000607F32ED6FF43FDE9FC16FFEE17E1CFF58
-:10C32000B5FD187C18E81242F6483038EABF027EA4
-:10C330007F6F7B323BCFC2CF3F7DA0B019CE813E15
-:10C3400009B077A2ECADAB09C8A5DBB76F4DFA3BDE
-:10C35000797D791E4FA214523A33D1F3F39CAF3E4C
-:10C36000EF8B9F07C0F9CC7042F87B175455C9C2B8
-:10C37000901BB4FF46F077E34B4804F5AB51A41390
-:10C38000D352D28DE918D28B291E931682AB2F88F7
-:10C39000E99F2B7B2A60F18B1DE1872054D7EE08A3
-:10C3A0001F077CFA6058F8117807788D7BE924988C
-:10C3B000FFAF7DAAF17BA224E1F7D9E2BF2BA281D6
-:10C3C0005E332330905E4354F9FDBEF88D027C4706
-:10C3D000F8651FAE2FD5EFCD25FC8E25BF476CC06D
-:10C3E0006109E9C438885FEE5CF102BCEBB370BF51
-:10C3F00017E5C1F09D4DF87B620B497716DC2F1DC8
-:10C40000CEDF93206DEC1D0FE39D88916D76CB3BC5
-:10C41000164B127ECF6811FFFDB14589BFEFC5EF06
-:10C420006F6E840F49E20812EF7FF6FA52BCE75AAA
-:10C430009AFC776512EF7FEEEF1431BE6705C40BEF
-:10C440000971BE37724F9DDD8A5F9DD71499DE83D7
-:10C450006A1482CC9EF6BA427B85FEE38C53197E29
-:10C460001D1084A47164DF4C33EC9B26723DEDA754
-:10C4700071B1AC82BDD91875E13968A3CAECC2A10B
-:10C48000DE2A07D8E9C42FAA703F659A3419E3CB96
-:10C490009525F23838F73CB67B6137DC5F680CC80D
-:10C4A000E8A71DEA67E7A0648888EF0334A94FF87E
-:10C4B000E7C23E79D839E33095E0EFA11E695F29E4
-:10C4C00042BE919A2D83611C21DC8DF76E86C88453
-:10C4D0009FBFCE189B85EF98F138A556BC7F3C6571
-:10C4E000C96927C8F53CBEEF5569F9B84E99EFE721
-:10C4F000AEFA537EC0D3E7DB9B5F9E46FBB3456538
-:10C500008C6B2DF9BCF1F56974BCDE768598DFE3A0
-:10C51000CC5D255BEECFE6DC65CD2B09F788656247
-:10C520002AA7F972181FE148F544735C55668839EB
-:10C530000B550FDE0F0EA5094C2FE6F90AC85390D4
-:10C5400074D822552E3ACF8E3705F43B1C6D9F9F31
-:10C550008771FA3F09E7017E1BF890B87F4A9A6617
-:10C56000BCEFE1E4F7839D705897883F4D0DA41808
-:10C57000FCD18EE831D715B08F276CF89ED45AAE17
-:10C580007FCB1E16FF6EE04B62BA3601EFD67E7E81
-:10C5900023E25D2FC5BBDD03E09DAC6AA827D872FE
-:10C5A0004810C8C396D99DADD276573CA3043D141C
-:10C5B00064D37E5C9A06FACC15CFDDCCDEF5A3F011
-:10C5C000C27721EB9562B0FBEDF599C57206D4F305
-:10C5D000203E7EE861E73F72BD3B08E58DED150129
-:10C5E000CD84D7CD0D6AB15C0CEFE3388AE1779644
-:10C5F0009A53FCDEF330BF580DFE2585DBFF77A68E
-:10C60000B1F9DE99E6C674451AF35B3C28EBB360DA
-:10C61000FE0F52FC817881237731FC5D31C481F7B4
-:10C620009E573C5F3878A038A07D0D816280DBCEBC
-:10C63000BB6AD0EF51B9FC9813DE055BE175A880A9
-:10C640008F926FF8FD9301DF5FB0E1BDAF466F855C
-:10C6500036D7D49FE49B807E2549D4B3C1286AD9BC
-:10C66000F2D6B5F244C0177D0748A248DAF16B65EF
-:10C67000CA5F3ABC7AB640CBDBD25E60E583F41D7C
-:10C68000022D8FA6FD86E587E9D9F04B221D692F83
-:10C69000B37CB1BE03F29D69BF67ED41B7A07ACC10
-:10C6A000A1B4D7AF053DA7D1169C0DFE9D1FD1F9B2
-:10C6B00097D2F977F2F4A71C4E46F913F09DC2FB0E
-:10C6C000204F13CB9FE6ED0EA528FF292F3F9CA2FC
-:10C6D000FF9FF3765D29DA1FE5ED8EA5687F9CB795
-:10C6E0003B91A2FC055EFE628AFE7FC3DB75A768F4
-:10C6F000FF326FF74A8AF6BFE7ED5E4B51FE3A2FE5
-:10C700007F23A1FFB778FD1EFE3DC7DBF23ABC1BBD
-:10C7100096D3CE5E022DF1B6A0FEBEB3AE1CF1BF25
-:10C72000713CD3330C7CCF81784D9ABF52657ECD5E
-:10C730002B55C6E75FE1785DB9BC680BE0DD8A7F09
-:10C7400093509E523982BFE7AB2F67712F2B9E67A4
-:10C75000F741562C97F1F7800C7C34DA1BF3DFC5D8
-:10C76000E7D764C031AD809FB7048A6798E33D5531
-:10C770006BDE41E90942769A32997C29595EE518C7
-:10C7800001F283CA17E09B6B3D4A17DCA35FABCA7B
-:10C7900058DE9459A542B9AECA287FD6665639E606
-:10C7A000A23F271DFD13793C6EAF4995F11EBFECEA
-:10C7B0009F82E5D37E3C43053EDA447AFD95B0BEC8
-:10C7C00055329ED71EA9ABC2EF79FE8FFDC09F7F69
-:10C7D000E367703FE63DEE84775FE5EF88282F86BC
-:10C7E00003FCE8B805ABC4A846AB1C535788907F40
-:10C7F000B889C92BFAE71D6B7A77B16365C50B1051
-:10C80000BFD3B8490EC2790EFCC9267950C47FF750
-:10C810005453D32DF2EA41EEC7D5030E8CC32B92AD
-:10C8200049C0FC7B989A2AF17729D83B668511ABE1
-:10C830007CCA6FB1BE63F39FD7EF7F0B008000000F
-:10C84000000000001F8B080000000000000BDD7DD1
-:10C850000D7854C5B9F09CB3677FB309BBC96EB2FC
-:10C860009BDF4D801024C006420C88BA090122A229
-:10C870002E880ADAE286DF00493670A962C5B22145
-:10C880001103450DB71181825DA85AB462438B1222
-:10C8900031E88A88F8157B43AFF6A2F67A17A48AA6
-:10C8A00080B06A45FB63F9E67D6766B3E7245168AB
-:10C8B000FBDC7ECF870F1EE69C397366DEFFBF99D7
-:10C8C000CD23CA89A889E09F8BF984289A764EA344
-:10C8D00069B052C4DBF4AFD16553B52DB664C787D8
-:10C8E00049F41F5EE2BDA82364D9EE65932DB439E7
-:10C8F000E917C503A2C584AC30A58C2003685FF896
-:10C90000732D21CDAB3AAE19A42764EB2A3A2EBD84
-:10C91000367F3D7A26292524966CF1ED900859B38F
-:10C920008A8E3FB8A7FF681BBD3986906D4A683A6A
-:10C9300071D06B58214D745EAF2C9709B497B94DE7
-:10C940006123EDB2EC8DFFBC6E08B497CA5EE2E9DC
-:10C95000795F7B7D72956B307CFF2D3A2718571FCE
-:10C9600090069F1C4DFFAD045CFE644206B625ACEC
-:10C970009FFECD6FA5ED84F5EAF57E9BCD4A48DE9E
-:10C98000B7C04DEF7CCB1E2886F1151C5F3B8F6F27
-:10C9900083EB1AA9B1880CA4573A57804FC829874E
-:10C9A0009FA0EBCC5E71EFB8936984641DB2B400B4
-:10C9B0005C49DBA384A413A2836FD3752B92CF436E
-:10C9C000281E5AF24BBC12BD1E7ED6C2E0946345AF
-:10C9D0003819246FC6F5F46A94FD36189FFEF1C12C
-:10C9E000F80FE458B6AFCB8766C00470C8DE4907BD
-:10C9F000CC84F6C0B53E85E289829B8CA37F43BF81
-:10CA00006BF5D175ED94E2ED6A6877840DBC3F89D2
-:10CA1000C0FF76CB127B4EC7575C84EC9224F63C69
-:10CA2000E4ADAECAA6FD15DB30C54B48D056DAAA38
-:10CA3000CF81E7B278DF47CAE9FAE07BBC0D70F935
-:10CA4000F941F1BCB2B56A101DDF40C4F821E8BF5E
-:10CA50005B9679FBAA56187F57A5787FF05A5F3608
-:10CA6000CEE77A9D9D90FBDA26B65ADD3DF37D68D0
-:10CA7000C3F5AD4D747D9F78A2297419A47EFBC9BE
-:10CA80007442875A3333E007380261FB8713724AD6
-:10CA9000F220BD08FCE9F75484B2E8ADF387FE9CB0
-:10CAA000524CAF415DF45012855F7D67C0A42FA04A
-:10CAB00070D6FB4259F93DEFD5EF994602946E824C
-:10CAC0005D2578EDE3BDC38AFC77BD67325CC2F7B4
-:10CAD0003E89FCB6E119FAA85E1768B50EC4FE845B
-:10CAE000E1BFEFF589F73F79E6B7B7C2F7CE79A294
-:10CAF000E953802E23142E7DBC27FA37745610A0DC
-:10CB00007B29C9B7DEE624641E853971027F357A38
-:10CB1000A17F87A9CDE6A5CFCDFA36BF97F6A7A806
-:10CB20000CCBE53DD7876D83703CED7D2DFF749870
-:10CB300048DA544AD7A13AC5FB0481762869046DC6
-:10CB4000AFAF574637D129AD2EF9DDA862683F67F0
-:10CB50002546DA6EAE3BE82A063EF21A08152F6427
-:10CB6000FDD80E37F0714BBD61E6E340BF9165AE75
-:10CB7000F9C53DE33F64D7E33CD6BE46F96C24BD1E
-:10CB8000EA3BEC12BC3F5821C087663BC5336D9B26
-:10CB9000DDA924940FFDACEB811FD7EA03D595D016
-:10CBA000CF2D9327E877CD83675457D279B89CB2BD
-:10CBB000A4C379541D5B409F37DB0C20D9C87BF69A
-:10CBC00039CF019C7EAE781B810F7F6EB5DA42F4BF
-:10CBD00001958D3EE05B65B0230C6DA38E3476D05D
-:10CBE000F96595107F87B5679EEF71F9F89ECD8046
-:10CBF000705E6FEE985641C7B12C936D21FABDB5AA
-:10CC0000F51BBB27D1EFFCB8FEF9A34DF4FEBA74B7
-:10CC100085C03CAC0E256248A1747C039D239DF722
-:10CC2000AE26BF0DE467CCA9901DF4B9659081785C
-:10CC300012E4A0B598B613E4539A43F199E9FB7F47
-:10CC4000B2078EC0FC47BFF99609DE778D9165600B
-:10CC50009B0E85E139A5543D8E6DBC7A9CD42AF596
-:10CC600073C754F5F3F419EAE7AEEFA8DB99F3D4F0
-:10CC7000ED5B80DEC640473AE732BA0EF68858A22E
-:10CC80009FAE2229089F7700FE9642D90BF031D73C
-:10CC90003F7E6A017D9E05F284CE9F8C20E127288D
-:10CCA0003E0FE47EDF13A57036A6367AECC5BDE1F3
-:10CCB000919563BA1EF0651DA4D808ED6FFDFDC700
-:10CCC0005FC3F85692D02F1FE0E3FBC43686B55DF4
-:10CCD000743EC9F00F0FC0BBF17FEE03BD7754E780
-:10CCE000057867D52BF8FD076778C2BA7CD69DD04A
-:10CCF000FE29BC7F8A697DB76E04BDFE7EED525D64
-:10CD00004A6FB8A6934609F892D207EA0B524350ED
-:10CD10005F3C20935AA01BCAAE04C6B3C10B54CECD
-:10CD2000F8530D0827C5CEE887FE4B86E7E936366F
-:10CD3000A6C13DCF0CFC7CFF2146FFF71BD838F184
-:10CD4000F13CF851544120276D765935CE461BEF02
-:10CD5000C3DB4E3B6BEF3E987A3DF0E5C619A9A3C5
-:10CD6000804E8C3209C07803B24DBEA1747DE63787
-:10CD70000C21890E3A402107F5A9B4BF85DCE9A74B
-:10CD8000F3D87CD812D2D1FBE6F9FF6EA34026255A
-:10CD90007CDEBB577BFF13E440AC4641389A9D6D67
-:10CDA000B651C56C0D213ABF54F807958F1583DB3A
-:10CDB0006D804F73451BEA6F73495B1BC069F35469
-:10CDC00019ED89D47932D2B339A7E3E8207A5F3FED
-:10CDD0005FB6C178A954B11BE8203FCA6EF3FB616E
-:10CDE0005C0A73B98C910A8C8B2BA4DF49E37075B4
-:10CDF00038F6DC2DD171D260BC11AC3FC0C9CEE198
-:10CE000034D6EE413E75F071D306D1FE23D8382DCD
-:10CE1000653DE3083C6EAE2661989FF8AE18273E4C
-:10CE20003EF1492057F5BFA670A37892724D38B9EC
-:10CE3000FB1793B0311FE0E36FDC8E7C6D253B80E8
-:10CE40005F1CD99540479987B74C9747C07B16FC24
-:10CE50008E7E3E09031D672AC4744D2AD82F7E8416
-:10CE6000A3965FDD07DB6EA63C12C78B967FDD0ABB
-:10CE700069D5A5F6E663B7C3515938A20F7ED6F03F
-:10CE80008BFB70EC7B40F45ABE7E2CE95C09C085BC
-:10CE900024F6D77D7B5BA7EB383A09909541F504E2
-:10CEA000057DAEE67B84FCCD086D89C89E8B034171
-:10CEB000EEDB391D537D459975F728DB042BF0E92E
-:10CEC0005282F455B977FDEDBFA6E35D186CB081D1
-:10CED0005EC939DCD60DFA91740686001EB62A8129
-:10CEE0009F24D1E75B8F651090DB6BCD6426D0B7B4
-:10CEF000C2E95CAB5F1E02BE71226B8465D7DF7F27
-:10CF000015F660C7A0F461361B8CFBFA6193F37FC2
-:10CF1000D1CE0A0D433B2BFB60779315BE6F9BDC94
-:10CF20006AA2F035BFC9FA3F48DBA14100BFBA3C55
-:10CF3000E0C303390B104ECABB4602743A5CE70BE0
-:10CF4000439BBC6726207F773EF79D5A0FC89FF40E
-:10CF5000291E90433F017EA7EBD9C6F95EBB7EC573
-:10CF6000E00B803DA1BDFF685C2EF94FD5503C0E13
-:10CF7000FFA981ACA30F8BE439ADF9C0176BA9FCF5
-:10CF8000A54FE7E83C0D3F947AF0D369AED86587AA
-:10CF9000EFAD32918091AEEB2B89042873E6387E99
-:10CFA0005B01F227974424D0B3B98DD4E005BA5A77
-:10CFB0006E2181047ACFFE4AC1FE9D66DF2E3B972B
-:10CFC000FF262A07F4EC9FE4E7A97E52E360320AC9
-:10CFD000EC17FD3396E3203788A3CA17F7370A808A
-:10CFE0007EA9DEA7DFDBC7D7ADA76A423F8AFEB5C1
-:10CFF000CA11E388DEFD5FE6FD14933502F252B1FB
-:10D000001E3986F2C5A69C4DEC670A337D43EA487B
-:10D0100078B0C4E082ED7FB3613B8BCA5FE328B494
-:10D02000FB434698670AF33F88CFE771A403BF101C
-:10D030000472B689B49A683FA476CA6F6ED26D4600
-:10D04000BBF920F1003F5088D9C13F845B00D7ADC8
-:10D05000845427F281B88EB4313E5056E8D05F1A1E
-:10D06000F6AA19E7A36F246133D84330370A6F65F6
-:10D0700039092BE06FAD3060BF91360FBE67208D50
-:10D0800068CFEEFAFAFD4C90D39643D41E1B097874
-:10D0900096514E592C6AFE23A409E1F409E7BF6DAD
-:10D0A000AB6C88E7B87F16788BE339DA04FA22771D
-:10D0B00079AA0ABFA25FF6575924303A71DC308E44
-:10D0C0009B3DE8A0448AE1792E3EDFB6CAF32DE30A
-:10D0D00017F433BE1BE9A8FFF1B3F1F9B6C85BF64C
-:10D0E0001B2928B6C60EDAFD9E1EFB5A0BE7ECE59F
-:10D0F0006AB93CB253DD167031EB7D8E6914E6E6F9
-:10D10000EFC9DEED74BC2B8FA9FB55E7BF8DFE6D1B
-:10D110004FFF88E366E84FFDEFED201D4EA9FBFBB6
-:10D120002B5EB3031FF7F467F3BBF62B753F2D7E21
-:10D13000B4F3A5F372DE9230AF0926A3EAF9CC9AD4
-:10D140005EF372DE9630AFC92E75FF4053DFF3BA3F
-:10D15000BEC8F88DF312FD6E2ABFB47EDA75DC5CB2
-:10D160006DEC07EEACFF6D332F6DDC3B6ABFB9DFB2
-:10D170009D2BB4DF0921BD5F2FF97CA9F43A076E1E
-:10D1800081BD68B5A0DDABA5975D5C7E4E067B8E4C
-:10D19000F69F95EC9B9C4ADB1305DF3DF5BBDB411D
-:10D1A000BE1C7EF68A0C90EB59A0E7109E2CAEB008
-:10D1B000BBCE857185EFF2FE549FB480BCD8BD9381
-:10D1C000BE97C2E695683FA5D531BFC24662C8CFBB
-:10D1D000C25E4A253689F9E3CCDEE9EF3BDAF1D7C6
-:10D1E00071FF73EE8A09E403CA87CF1B6C150AF836
-:10D1F000678F49680FCCADF2E992297D8C6B953031
-:10D200006E34F79E7F1B0D7265EC494F6794DE9F6D
-:10D210001BB67BE1B30DDDC417A67495A15B5A72F2
-:10D220001FBD3E7280DA3FBCBD14E8CDEAF380BF7B
-:10D23000510333A2E39CD53796D8406E7ED7EA03DC
-:10D24000B95933C3F70EAEF7AFD42AA1FDE6B3A5A3
-:10D2500093BDEDD30C1E6A67D47CC7530E764F4D39
-:10D2600087D9875713512C741D35D41E836B868143
-:10D270002866B85A8809AE65AB99FD9552EE37D449
-:10D28000D0EFD774FDEC0B786FA1127985D993613B
-:10D29000C45B4DD71B7F027B6DBECF6F0079316CB5
-:10D2A000A781D9A49C1E8677A8DB200F12DB25114D
-:10D2B000757BF46175FBC35406DF7D527818E06717
-:10D2C0001F5570E017877619515F1CD86F44FC2CEE
-:10D2D0003963D90EF1A7094BAC28D7CF3C6DC6787E
-:10D2E000D43EB9E35968879E4D42BFFA9577F795CA
-:10D2F00049B4BDF817C9323C7FF16B1DC21996A322
-:10D30000A7F7973C3B74FB3A7A7FC9E88E321BBD86
-:10D31000FFFC158474C373253C02D6F7FCDF743818
-:10D320007EEC29637807A587332FFCECD97BE9F7DE
-:10D33000CF3C95952A51BC5C05FA80F61BF75393B8
-:10D3400005FC8C71679E1908F262C94EA36A5D4F95
-:10D35000A7327B83223305E8ADBF78E289B53FC3AE
-:10D36000F78B4E1D437ADBA70FC91658FF5A465F4D
-:10D37000DAFEBB5399BE11F380F7F2297ECE7F6CA3
-:10D38000B913E2684336A9E13B34AC6EBF90CAF4EE
-:10D39000FB1C92703F1FC62B58E3023B753B417B41
-:10D3A000A6E8D4EF6FCF073BDAC8EC07ED3C0EA43C
-:10D3B00032BE7EFA693A0E930F3A663FD315537E1A
-:10D3C0005CC2E9F84589D9AFF4CFF22C4AB74B409B
-:10D3D000F117F4DC5FA2998718FF077C9D0EEE57CA
-:10D3E000C7DED4213E4EAFAA1D7D7270EFF97CB826
-:10D3F000AA716895BEA7BD60D3D2436EFA5EDD6E9A
-:10D4000027FA89E27EDD53AFA6DF41EF9FDDA978E1
-:10D41000C174AD9BF5E443E3A0DF53BA0E982F3CF3
-:10D42000F7D1F59EED782D05FA2DD86A1FA54BC0D2
-:10D43000C3C24DDF1B5A95200F2F971F04FFD671D3
-:10D44000FF766F79F7A42CA0EF4D9217BA2DE9B8AB
-:10D45000E5E61BC056D9AAF30EA6CFCB14E2D78DB2
-:10D4600042D77B065CEB763F7728933E0FEE1F5347
-:10D4700006EB5A27FBAF1F0EF4FF981EE3585AB86D
-:10D48000FC85E39BBE1F91E9FBEB6EB5D686AD38FC
-:10D49000EE41681F28DAA183387BCA292A9FD8FD6C
-:10D4A0006332E5C9535DF78F8078E23EBDB515E87C
-:10D4B0007C5F32C34368970EE53C89B0758CE3719D
-:10D4C000E325FFDD6E50E8F5D4A9D529158C8F50E2
-:10D4D000BE805076D0F5D5FE7438F2DDC24D6A3E7E
-:10D4E00011FDC47C1785D5CFB5F4919526E20DA426
-:10D4F0002891CEB4FDD2A6860CC057752BA83C4E01
-:10D50000B07FEA4EB619C06ED27E072C4022F0AA38
-:10D5100043FA241E5CAF99AD979AAC26BADED3F0DD
-:10D520002F16F796C02F5F2CE112C9922B489587D2
-:10D53000C273C974520DD77D52E4211D9767187FBD
-:10D54000DF9584F2ECAC2DFAE48F81FE9EC9F18662
-:10D55000E8A34C1E973BEB89A4A4D2EB79E00BA087
-:10D560003F1B6B2FEEA2F29CF2F7994F0C28D79B32
-:10D570003A5E4D017C9D7DD62CCB142F6776A75546
-:10D58000423CE76CC7AF53605DA73BD22A212ED740
-:10D590009FBCD1CA29A1CF8FC33FC7526598E6BBB4
-:10D5A0002A0DE4564B1A18E32423ADB1A4B10FFEA3
-:10D5B00017EF390C8D251E901BDFB57A77303811A7
-:10D5C0001F6D7F76386D07E05BC8A91A898D2FDE45
-:10D5D000BF318EC76F968FD5EB86621EE833E21996
-:10D5E00000F27A1A287AFADEE1570A0780BD20EEA7
-:10D5F000373AFD33D2E87D5765B74F0771C429C468
-:10D60000DB4CBB7EA0F3DE65A3F89A47A8FE826BD5
-:10D6100069C08071971627AE6FAE42220AA5F7B98E
-:10D62000A05F47601BF13577AB146EA6EB99B75E30
-:10D630000DAF05EDC61E3AA17F17112A608111B703
-:10D6400026F4A3E32F023D4AF1B0D844224974DC0A
-:10D65000C58FABDF5B4222389FBA672E1AFBC2C769
-:10D66000171C1F8D4E5F7D9A4A0EEA510E2E21FE29
-:10D670006BE0BB4B84BE7E8BE12B78CF3D43E75103
-:10D68000FBE3FC8A7B87CE4B837822F1811D41DA54
-:10D6900093918E975491480E9DD7922E29323CA596
-:10D6A000675CF24B89F96744C1F57FF116C3DFED82
-:10D6B000DCEE994F6F831D7115F8EF80EFCD12CE20
-:10D6C00063DC33522899FA49F34DD4C503F9C4D722
-:10D6D0000BFD07D0F6421242F83C9C968F785B44D3
-:10D6E000BA0D8C7FC2CDE9F4BB0DA7A84C2297429E
-:10D6F000076311DF9F132FE2FBDFE3745086F421F1
-:10D70000EE53FB8698537BBF0F78F325C0B976ABF9
-:10D71000BA4D1E4F6817005E683B015F0D7B2E1AE5
-:10D720007D7DE0E991B87E0B0F9D363C913F98FDE1
-:10D73000FC3EC7E323B72C70833C7A18ECC94C3EFF
-:10D740004039C86F22E22311131DDF329AA8E22567
-:10D75000D44EC3F62FD2FEEBBA4DD9846CD4073029
-:10D76000EF3057E73F0429B281E9815F01DDCF95B2
-:10D770007DB90AC2D557887EF30A460F8F8E6A1C80
-:10D78000DAD887BF2CE6BF51EA88C8209F5E60F6D2
-:10D790004672694C1F48E0F737D3981D33E040F4D8
-:10D7A0005016D0DF7312C6F7374BA445A2707651DE
-:10D7B0003C835EDA2C1D3F047A6CF3751ED24C9FBD
-:10D7C00097EE99B6F435F4B92D5EC897D4EFA9D089
-:10D7D000D55B71FDCCEE4D6ADC2ED3E71977168D43
-:10D7E000023EA3EBBE733ABDFFDB340FC2CD6D65C5
-:10D7F000F4E35A1DCA5F06F1DD03FEA5AF01DD0D9E
-:10D80000B7601C2D83C22A3915AFAD60CFBA4893DB
-:10D8100004FDD63825C4C79A1A32F397C548CDCA35
-:10D820008054763D46AF92425A202E9CA150FB98E0
-:10D83000DD6F81EF3C92C2E6E59475774E03FB7C89
-:10D84000146BA7AE947C3B508F6D403864184935FB
-:10D85000AC1BEE833D4FA7E1DB8DCFC338EF8C09C6
-:10D860008D25308F8C81ECEA3044B2619C23824E4E
-:10D87000BADC32E88DE55CFF2FDF5D91914ADF3F36
-:10D8800072D6A4803C3FE212F668C40AF628195406
-:10D89000C4FA733DBBBC64420630B52357DDEFBC10
-:10D8A000DE376034E8ABA33ACC1BFDD1EA1B60A79E
-:10D8B000FDAE32B07568F1AF7330BC06BF92483828
-:10D8C00021FE109C7901EDFCE0578AEAFED955262D
-:10D8D000124E883FD4D51E9804FDEA49F71AA0C716
-:10D8E000FA8E24124EE08FAB2C7D7F57F045F02B43
-:10D8F0001D098D46B2CF8638E9117D6CCD7CA0C361
-:10D90000FD12C6B382D4AF0F25CEEBAB34124AEB77
-:10D910006B9EE9EAFB743DAA76E797D88F9447534C
-:10D92000E03BE76CD1143B5F1FF413FAF77C580E11
-:10D93000E947629E92E96188335999FE9A06F85543
-:10D940006229D3937BC615CF61BCD484759E9B6935
-:10D950002011C44B0CBF0B700B0D21644BD7A706D5
-:10D960000FD8235DAF20DC04BD24C22F9498B76A82
-:10D97000EE8EC854565CDD9EB3AED84C517580CB4C
-:10D980008550DE3ADF78FA5C27ABE44452695C6E7E
-:10D99000A0987A04B2681857F5AC83386BBCCDFBFD
-:10D9A000C7DF0FE54FA9A2E39516B3F727B717FC1A
-:10D9B0009FD5A003491BD3CF4A2CD79F9CD0366953
-:10D9C000DA56DA1E9ED0B6699E3B34CF5D9A763623
-:10D9D000EB7F363992ABF31232BDBD708A42E5D689
-:10D9E00059776436F5A8C97ADDD02955B45D5FCA88
-:10D9F000F47A4397E44535C5E1D7E06576ABD51BAE
-:10DA000035CC2D0638741F02B952D729D924CA073C
-:10DA1000D68EDD116CC37B9E84F73A247CAFAEE3D7
-:10DA200038BED7EFF84532F2F9BAA213AC5FC74758
-:10DA3000683FAC69A9C1FCBEC85FEB88DF9725F5DC
-:10DA4000E4AF857C3DE7F6BD2A33BAB625FA7341CB
-:10DA50001837216E24FABF37BCEB6D304F92967F9A
-:10DA6000DA04F6F47FD77F3406ECCBF7B81ED9285A
-:10DA70008587C277B790C050D0A3DFAD1FFC8A4C1A
-:10DA8000FBBDAF8F6E831CDD86F66B107EEF2747E4
-:10DA900073242A637EE4B88EB59DD16D00CF8F1DAF
-:10DAA00053A628749CF773A239326D3FDABE9CB539
-:10DAB0000747B741FB654780F51F1ECDD1D9C0553B
-:10DAC000AB9952459F3F61EB9B9F5BB91C11F333B0
-:10DAD0000FF4353BC07EAC63FA671BB57F4D545ED7
-:10DAE000CE5E7C7AD713140EB3BF9F8472EC89B3D9
-:10DAF000374F61FE41C8AF9441FC97FD41FD8872EC
-:10DB00005E41FBC20D3A31B5071FC9B9DD1ED41FF6
-:10DB10005734EE06BB25637631EA8FB169BED3F088
-:10DB20005D71FD4526BB9E76D8985CD6C9980FCF0F
-:10DB3000B83719EDBA87CD6C3D946F10BF568E8FF4
-:10DB40006D0E66976E7330FF7649DAC4D30E7A7D18
-:10DB500057F26D3651B8BFAB272133C8D94516B43B
-:10DB600097EED84EE50695DBED7CDEED1BDC61C85B
-:10DB7000E7DF21113FC815213FDAED3E776A825F6A
-:10DB8000D45E42DBD61E3FB87D9ACF6D71C0355D45
-:10DB900086BC8F904BEDF9EC3DA18F329AD977324C
-:10DBA0001E1EBA03D691A4B0F8D5FC99853B9AD035
-:10DBB0001E988EF3253E9F1BE220271715C810D70D
-:10DBC00012F8B962A06F2FC0E5769E17107812F890
-:10DBD0003CCDD73D5747ED09BADEBF380308476A49
-:10DBE0005F8CE0F133B42F4E836E4F802F51A263D0
-:10DBF000E0FEFF4770FA3D3CFF47E154BF82CA0B8D
-:10DC0000F912E40587DF4629A2CF60F202FD79B858
-:10DC10000F7AA7332D1083F1C5F767DF5B8FF6A46A
-:10DC20009857D2DD7BAB6F23BDF94C6BEFFD19F03C
-:10DC3000E5ECB14BBD220ECABFF3FEBB26CC7BBCCC
-:10DC40006FE840B9F93EF5A39A40BEF0BC7DD9F724
-:10DC5000971C017F548C1B70EA70BCB592CF0DEB02
-:10DC60005B4BF16E82F94F33A0BF21F46ABB3DBC20
-:10DC700019EA26DA6FC9C6BA89F384D5A78456246F
-:10DC800061BFABE41304E2AAB1B136CC9B533AC1F5
-:10DC9000E7EDB30AB17E85D243C80CCF293D419D43
-:10DCA0005F7B095D108C37EB0A7C0EFE3AFAD9B324
-:10DCB0004C385E1F74C2E2D443587D467B3EA7C3F6
-:10DCC00045054887E9CD2C1E4A14DF8869097A7E0C
-:10DCD000BC93E139A934FADC7F01CDAF37A33D0B0A
-:10DCE0003A16734A6D19381EC5FF60278B4B209D6D
-:10DCF000CD7B2899D7C379CB00AE0F2433BADC6A29
-:10DD000066F9AEADD47E46B9C8E957D4E105B89DF1
-:10DD100017AD9553C05E18ED8CC73B7C107FC07863
-:10DD20003B7D3E272A1D07BF6F4E481731425CB826
-:10DD300075A22F9AE0BFC01FC817DEC9E52AD944D3
-:10DD4000D0BFBA13DE4B81F12D29901FBD13DE0722
-:10DD5000FF71E544551E7022C8F0313DF3D3CAFD72
-:10DD6000894E1EDF6C7BD497F81D31BE763CEAC726
-:10DD70004E723A11CE9101E04734E9108FDA7946BC
-:10DD800037B1B87974531ED29D18AFBF79FE8F2E6C
-:10DD9000F63D89EAC10513987F2FFC9EF9DCFF262A
-:10DDA0002BD57E1DC479E26D5DEFB6D64F84FCBEE7
-:10DDB000BA3FB35B928A6306CCFB7824D5FC05BCE2
-:10DDC000FA83439DC0E725C24DE8BD47CD549E521E
-:10DDD0007AD904759094BE36DD93847ACC61080FAD
-:10DDE00005BADA02F535A84F99FFFEF91175FC4521
-:10DDF0008BBF1FC4E9EAF2FCEE26C0B9B3B7DF1D42
-:10DE0000B4C41E03F8072D8C2FCFED4F46BE2283DE
-:10DE1000A2B3A1EEEDFC3E23017E6890A2852027EF
-:10DE2000CE49BE1AECD794E401FEFC406671812015
-:10DE30006084AE3318FA0BD65B053BD57EF839FA11
-:10DE4000B796F2CF39395A06E308F902F204EDAC7D
-:10DE50005A96876A904908FCB4ABE4398BD09E98F7
-:10DE6000954976E0FDE385E09709BD41FB1D94529D
-:10DE7000191902FFD5717C34C827B05F1DD44D013C
-:10DE80005EC05F83781F3C4C885337AC3F83755B23
-:10DE90000D7BD47453D74357D24509DE4BA033943E
-:10DEA0000B218423DAED2047AA581E3D99B793AA87
-:10DEB000BBB18E2BC8E32FCE03D149209F924B3BA1
-:10DEC000C81C7A0D9E6276CBB8AEEDAF825F6EAFA6
-:10DED000EECE01760AF278A7A01B31CFB15D1B749C
-:10DEE000E0370A7B27C16F1D3A5D15B7588DEF816A
-:10DEF0001F0CDF8BC22D379015D3931BB99E4C029C
-:10DF0000871AF469DB10D4A7A0EF40CE093F1AE4CA
-:10DF10001ED0D5C0F4CA23C0F72FA657BEEE74B2E8
-:10DF2000EFA17F00CED7D8FEE94EC047F4037FFAB9
-:10DF30009BE3905C7E13167F5CF686F31BE9FFFD86
-:10DF40004BA6FFA11940E7CB244F06D0F9F138FDCD
-:10DF50001762BE52DCFF5017C038A388772D82F8B5
-:10DF60001EBDD67139B480C7C71688B8D826755E6D
-:10DF700015E2D189EDC5224EB6D3D8536F04F2A372
-:10DF80008A4492E978F51067836B87FABD061263BD
-:10DF90007CD479D1A8CADBB63338DEC9E9C95E15AD
-:10DFA000D681FCDA6C66F13221D7C6ADDC8E7432D4
-:10DFB00060942FFF7EE09B37F4186FF903A70301ED
-:10DFC000974667E551C0A745C7E381F71B519E9F60
-:10DFD000A476C26E1EE7990EFEF1AAC050A897273C
-:10DFE0008A2D37D17F16D775FBCCB5687FA7CB2A92
-:10DFF0007A7DDEC9EA9B30FE85FA2209FD012ADE20
-:10E000004600BD9615087D4D4640DCEDB89EC5CD59
-:10E010001B6EB50660BCA8CCE4A13B9DE929773A0C
-:10E02000AB5714EDB8FFC9E951E443210E95988F21
-:10E03000F0C4FB6FE075C804D7BB7111AF778FF3E5
-:10E04000858CF22DA9D88F7AE12AB912E55BEC63B1
-:10E05000AB07E0527DA66E11ACE3B399160279C905
-:10E06000793C1EEE4DB7E3B8228E7DB9F1F0D1E9CF
-:10E07000717A54C5C3F771B9B88FB0F9865A8C2C30
-:10E080008FC1E7BFEFD41561CE1F21909BB1DD6634
-:10E09000A68FA99D0CF27ADF9E216158CF713DB306
-:10E0A0006742FB93F9FB81CD10A7D9F74BA717EA7D
-:10E0B000A0828B4F8F00FB76DFA9A77FF51BB8BF2F
-:10E0C000DFE8057F741FCF63D419228568CFF3FA88
-:10E0D000CFBA944821C4A55EE4F8AAB3D036BD7F78
-:10E0E00083293035DDD9936F84F7E0FE8930F31B47
-:10E0F0004E104607A1F52C2F4CE1EB8679C4D6666D
-:10E1000060BE12D60578F860FF709CF7463DEFFFC1
-:10E1100020B32F4FF0F689174AB01EF2BCDF80F50E
-:10E12000CBC187993D3B57F63CB60264EF4B49188B
-:10E13000079DDF7E14F347C187164E85E7C1C52BC7
-:10E140006F24DF9057013D9518C73F4762B9E8A794
-:10E15000D7167444E877CF750DF5B2F4A80B937118
-:10E160000DBC4EF624852FCC3BB65F8FF0BFD4F1AB
-:10E1700031A059C6F4257C279898BF42FDA2CE67EE
-:10E180007D5BFB9C3E5A780FFDFEDAD4C00FD213A4
-:10E19000ECD8E04B6E94A31F3CF8652EDA3B6D2C57
-:10E1A0006F7252EF9B0D7C62AF8A18E624C8D78D40
-:10E1B0009C8FE71AB95D4BE56022DF8BE765956AB6
-:10E1C0003E13D747D2995C4EE6F512BD9F8B7ABCC1
-:10E1D0009B8DA08F59C80BC6F5E0FD3C9EC71C77F0
-:10E1E0002AF60AD49DD57594609E346F6504F99221
-:10E1F000C23B02FEC9C9CDC94C9ED065C2380BCA0C
-:10E2000009DAD50B74ACFE638191DAE9CC2EC0FE3D
-:10E210001F6ECE403894AD66F669EC3909E5A2C8A8
-:10E22000E7D610F6FEDE96E3211DED5FB3532AA17B
-:10E23000A295D4B454607DC8E2ADF988FF715CFE4C
-:10E24000CE35FA0A3703BDED4D467AA3DF437FA0F2
-:10E250000E6AE046A15C32807EADDD29617E44AC71
-:10E260005F9B3F256175DE695C0793DFA03748A29D
-:10E27000DDC9F510E80BA2B16FD57411BA247DAADF
-:10E28000D50787E372F2F2F4E9AF417E8DE9AD4F35
-:10E29000A9BF70249DD10993FFBB59BEA99E34B27A
-:10E2A0007C1BD767F175717DF8A18EE9DF05C60D7E
-:10E2B000783D9E9E8FF35A4CA23CEF1433C0FCFA7B
-:10E2C000A3AFE3FDD097A0AB139CCEEA4E91C8D587
-:10E2D000F47B752B49A47E04BB268F40FDCEF4BC95
-:10E2E00089E979B85A2E41DF6BF5BC56AF6BF579E9
-:10E2F0008681E96D414F89F907B093C6AD0CEB58A3
-:10E300009C39DB86FBEB387E97A4F92E668EE9B14B
-:10E310000383C74C26CF4868FB498115E26715EB9C
-:10E32000B2212F40F500F06F1285D376888B71FFF4
-:10E33000E3EE6CB67E17AF93D22B7E5262053C752E
-:10E3400063BC20E624E8BF0BF86E4BA6EF8D82F786
-:10E35000185FC7DF3791164BC2FB95FBCCA8972EF1
-:10E36000BC908C753D54CFE4D9E978E9EF51BF8179
-:10E37000B6CFED4B463BE11CD71B0E1197216B101E
-:10E38000BFCE0C86E710A9CC82F83691A66481A88E
-:10E3900015F66CBDBDBF7C047F9EDF7D2BA33323B0
-:10E3A000EAEB0BF6E85DD0A6F3C13AECE40C36EFED
-:10E3B000E09E0925F742FD85DFEA65500D9480FD5A
-:10E3C00061D42DBF15E25E93742B63F7D075D4E74B
-:10E3D00058B1BEBB2AEFF7BF9B45DB1FEFD113231C
-:10E3E000E0FD899B0744E035C5E7EA8B4F1685F5CC
-:10E3F000AAFD834B76AADBF51DEA769024EC2FA4C8
-:10E400002058F1FB926B0E26D0495946B2E3C36106
-:10E41000C096C40BF5E944F79D01813EE4AEB87E99
-:10E42000B9CA7BCD413DD6F75D9DC1F8D900F6D183
-:10E430001CA0873EDEFB23E77BA3B1F114EC133075
-:10E44000BE68F436D1B7CC198149F07E831C3B04F9
-:10E45000F834E69D1D01FAB432EFAF9827BC701F67
-:10E46000F1027C2E982BD04EBAB0D9EC017FB13D91
-:10E47000D7CAE2322F496189F91553C750F95A8B2F
-:10E4800053A1EBDD74DDC76C530B31C9885FEA55CE
-:10E49000B9405EF9D0CFFB709AC5B69ABE57BB891A
-:10E4A000E9ED3AD29D0272E087803FA06BDD330632
-:10E4B00013FD677E8B6F68139DEF12BF05F733293D
-:10E4C0005F2B7EA0AF0760C804BF644E069307F5BC
-:10E4D000A6A8A102BEFFD779D5CE829E389E41CF95
-:10E4E000E2784A6749248BBEBA70C55CF4BFE2F992
-:10E4F000FACDAC8E6CE13D3578FFD5CD465CDF873B
-:10E50000FB25A4F30FB7B1F52FDC64F640BDFBB5D6
-:10E5100076E6BF2FA4EFF5BDFEC91FC3BA3EDA7A77
-:10E52000B717F2101F11F69D908DC5DB3EB2B1BA40
-:10E5300002E80BE37CB46720DA43B59B164DC5FABD
-:10E54000BE6D3A2FD823647F32C6B1166EFBDE6FE4
-:10E55000C6429C6CFAEDA500876BEDCBD3212E440F
-:10E56000FBF9C3CCBE6675D3A9E54F021F5EFBF570
-:10E5700084EE6BC1EEDA46F9249FED4B007BFFE0A1
-:10E58000B6C968DF2E9C66B1C3BA3C5B9F98047A1B
-:10E59000E8A3699932AE6797446C0007FB8A74B8A8
-:10E5A000BF5052FC7DD1537E860EE15A9167F546ED
-:10E5B000E0BDB775482794AF6E053D5CBF4D8FF643
-:10E5C000F3C1E9EFFE6E96A387AF16EADA6E1D97E8
-:10E5D000603F05B7DE20E88444CAC02F6330D1F223
-:10E5E00097316F6521CC47CB670B573716B2BCDC30
-:10E5F000E5F11BD9CAF8EDF10C89C56F2E9DDF7EC0
-:10E600007E39FC46B25355FAB7B75C0B613F91D7E0
-:10E61000307989EF092BE6AF7D1295BB6F6528F83D
-:10E62000FCAD0CBE8FEB4FCB76BE49E1332B23B054
-:10E630003F03EC28E22B013AF2C46C95B047CBCAF9
-:10E64000ED41B295D9DFE02700BE373AC993EB120E
-:10E65000E221DD196C1F21E5FF4330CEB977FE7A48
-:10E6600008F0D3907B7604CBEBFE11F3A0D62E9668
-:10E670003FB77A635857A077F891FE845C0F7A9978
-:10E68000DED1AE2BC3C5FCC2A02386E37CE6627C50
-:10E6900028F20A5B5658301EBCC51136B37847883D
-:10E6A000805E9A5AAE63F93F6EAFDDC0E3ACA6D28E
-:10E6B0005709E4FDC878566FF766E9AB4A1A6DFF53
-:10E6C000A67CA217F73996FEB4B500D63D5ECF9F63
-:10E6D0000F0CC1BAFFC35781CF97B9741EE0EBA9E5
-:10E6E000A5AC6E94D4A6601CE7CDD20F1CF312E645
-:10E6F000EF27268F95D2C974EA2C25D639DE38DE6D
-:10E70000ECB126D0D7676D5235B39B3D03660C67DD
-:10E71000711AD4C3A56A782C7319F0BB2FA6577C45
-:10E720000A70BEF61A868FD3BB8C61907FA7F9BEA4
-:10E73000A15E74E1E2F4F39D22551D82C3D0910BDA
-:10E74000FAF18CA47E6F71AB0EEB0016B54A244C27
-:10E75000BF77FAA9BDB920C73F7E626FEE9C84F9EE
-:10E7600068DF13578BF81E8F776AE3D7FDC5AD4579
-:10E77000BFF39B48C034B0A7FFF9DA3F63DC7A4EA1
-:10E78000178F7BFB7C831CE04FF1FEDAF146BB194F
-:10E790007D489D12C64D44DCF6C4E19F4286288E1A
-:10E7A0003F7357BE9C58272AAEE338DE6E06BCD1B5
-:10E7B000A5985B59BB3F7CF5C78FFFC1F58FC0DBC8
-:10E7C00089D68103008E8606AB42D8FEBD22B0F703
-:10E7D000B7118B17F8C990E9B282FC12E71F7C6968
-:10E7E000665787855EA9BD96935984EFDD2DFBB1F1
-:10E7F0001EF14BB90DF76FDEAD6BC43AF73217FB64
-:10E800005EB6CDBF7B01FA391D58F74E5AD5F04D93
-:10E810000728809EAA31A09E1270BE6ACE5DE8EFE6
-:10E82000F6819F4D403799E5EC5ED095CFEDE52818
-:10E83000E643CCE5C4067181E6B1219C8FC04F90C0
-:10E8400075275297847632D4EF24A562DE37C4AFA1
-:10E85000C49A4AE2799024EE1F134DDE838AAD10EC
-:10E86000F413F304310675400FDB3BDA0A59DE1866
-:10E87000ED4F1817EECF2956306F00FD0CA3BE9D4B
-:10E88000DEE274C9EB3BA78AFBB5963EF32C5361DD
-:10E890009F14ED9F43F520D87FC4AB57ED93DA4A20
-:10E8A000ED66F0EB441E5B277794B8D00FE98E42FB
-:10E8B0009CC55066F2805E4DD2751401DEB4796D50
-:10E8C000DA2F9FD55364DB41AF887D500D2B26F89E
-:10E8D000619F41DCCED8CFFCA3867B2AF0FE842E3C
-:10E8E000962708B61A711F67B053C2BC5C83DF104D
-:10E8F00036613CC4D304F80A513B0CFCCF763BABE9
-:10E90000036BBFCEE60D91C4B87AF4B17B31AE6E25
-:10E91000C57CE4DF9BA73D9F4C013032210F37C0FF
-:10E92000C4EB0D59DC3D9DD393C0BFE06791D74D3B
-:10E930002EF6E783C5FDE5C6D0AF2DCECBA87F214F
-:10E94000B73DF88DF52FE4A31BA0FEC504D63C7F90
-:10E950000ED3A27A33BEAFD1ECC1FC5DFC399C472B
-:10E9600061EA94F8FBED374C1C8475BBBC9E66D6FF
-:10E970007AA8C37FD84C54DF4B9C9FA2195F4FC726
-:10E98000B77A44FF7BAF9FA8601E9BB7DFFD21D401
-:10E99000FB3CAC578F872428F6619A7ABEB72E6B62
-:10E9A000C883EBC7F7E86FAACFF7BAC6F4E8F10758
-:10E9B000DE9DDA36D203FCF539D6410B7D1C74B0EE
-:10E9C0007A18ADDC3AE09284FD3B0954EC9A993513
-:10E9D000787E433C8FDD35CD07E758883C7670A5BF
-:10E9E0001FEBA141FFBB50FF9FFDF01580D2F4D378
-:10E9F00068FF07BF52585C89DA1112A543535705C7
-:10EA0000C64FA13C17F4A6C0FF62AE97C05607FAE6
-:10EA10000E6EBDED091D7D9EEBF6FD078ECBFD4014
-:10EA2000ED7C4FB9D8BE816051E5669007E47189ED
-:10EA300080DE5E57F419DA190D2F4C1C9358CFBFA6
-:10EA4000A8F311560FBE53DFE7FA4FB9983DDAF03D
-:10EA5000C27318173D1D66DB886A95F0DA71109F46
-:10EA6000A995C1D222A5E19A59A8FF67D275D075A0
-:10EA7000FD86DB25C19D3787607F4190FE05906D47
-:10EA8000F12F407B7FCB4C9315F248C1A2394B91BB
-:10EA90001F6C161FAC5F3BCF781EFC1E0BC62DD71C
-:10EAA00075EAABC16E2AA376D2AFE87C7352A75445
-:10EAB0007BA95CCAD2ED2EF9372BD40FF4AD87D7E2
-:10EAC00067323DDC22F943379562BD2749AC47CA1E
-:10EAD000EB64F6D84597411587BFE86276E2F850B7
-:10EAE000F704A0B997946812D8C541E2FB14FC5C06
-:10EAF000E2B77A601C380103EC2CC72A0FC6854D9B
-:10EB00008EE80F47A2DDA4A09F21FC88732FB038A8
-:10EB1000DA5277C0EA86F88E2EFAA39B006E3F6425
-:10EB2000FBAB89C2E44DEECDD65110F7323BA23F8C
-:10EB3000AAF6601D11C61F065CDD827878C9416C9B
-:10EB4000009F09A11A454AD033426E4C88EF637288
-:10EB500060BCB5928B97C1145B1F9A90445B2EA644
-:10EB6000F5D80587FF3A43819BC25E904D01F4675B
-:10EB7000AA6652FF10E8724DEC900CF17D4737DA2F
-:10EB80008BF51D127EA7BEE89758E7B784D793C5CB
-:10EB9000EBBA9428D6B915BA93785CAC85D103E961
-:10EBA00046FF973CC3E04FF526D6BFF5D8ED4DACF8
-:10EBB000EE888F67E079897A1EAFA180C2E7256E63
-:10EBC000116F5BCDF5AFA8D763DF258AA72C31BEC7
-:10EBD000B0711AD524382F4F0ACCB7D3EC1FE7A653
-:10EBE000EF9FA895595CBC35290C9B72374ADD3ED6
-:10EBF000885F864AFADE7F7413FFEE8003B149987E
-:10EC00003778A1BF7A6056FFBB79CC1558875FDA99
-:10EC1000F9E924A00F524D901FA9BCB8A47AE019BD
-:10EC2000800FE7FF43F5C05EC9B7835EE7BBEDEA3F
-:10EC30007A602FC397C8AB6AEB80CFB9230AABDBEE
-:10EC40008B3EF604E8DD4E23D6034EED7CFD18C462
-:10EC50002FA79A4807E69935F6C3C9B49B1B004F06
-:10EC6000E73FF9F0B1FB09D4913FEF65F5856A7B89
-:10EC7000A03FFB1F7323097E6248D0CD3FC9FE171A
-:10EC8000F23AC8FDA93352ECA14258DF7E9DADAFE8
-:10EC9000FD480FBA45DEB59F7A96AEBEEB5944DC0F
-:10ECA000B93A9AAFCA733D1AE783CBCB9B6D819C6F
-:10ECB000761F793385D7A92912131D24C7A0CA9BB3
-:10ECC00029F6C2FEF266117CFEDC107CFE40AFBC71
-:10ECD00019AB7768D99FE101FBBECE197BF2490FD2
-:10ECE0008C67C0715A5E480A433D7F0B877FDDA564
-:10ECF000E7CD7EE5EE236FB69DDB6F1F14C91103D0
-:10ED000085EB76C2E61FEA12F93319FDD8D88339AC
-:10ED100062FEF8FCFC83C3305E3457E4C55E62716A
-:10ED2000B4B93CFFF5C1F442AC67EB0FCE735BD5D1
-:10ED3000F985D7389C2F982B301E7FD7BF4FC3F84B
-:10ED4000D40288E30F84B8561B8FCBB3789EA79567
-:10ED50009D2BE0D929853D2C3F6392D136B4C970F3
-:10ED60007F0915A35B40F48628D55C496F4B146A74
-:10ED7000F4B9A785B6A9D1AFAC55422EDA6FFBB175
-:10ED8000248C9F3DE0F0E07C1F686179EAD07A290D
-:10ED90003C988D8BE7B5855A641F8CF30737D3F306
-:10EDA0005FBB0D7D9E0FD1A2E7F910FEBD26224765
-:10EDB000E02A4BECFA804DA9EECB7E10E3B5E81BC0
-:10EDC0004D1500EF1C762ECC05836F26C697530B8E
-:10EDD000F1FCA796E4C6D66AF61C79F68239E6C736
-:10EDE000E7572BCC20259E5498EF7B6E9E5FD3C0B7
-:10EDF000797E9BBAADCD1369F7BBCD258121EE811C
-:10EE0000BDF783BDC7F5DF8575F91C2F5ECC97B4C0
-:10EE1000E83DBFCD077A5FCBCE776ACA6670937341
-:10EE2000D8B5C05E85E7F0113BB7E3089B7FC1D53D
-:10EE30000E09F8A1C5CEE8F61F9DB776BEFACC4202
-:10EE4000065F3BE3D796B55298C18BCDFB52E322C8
-:10EE50000333FFB972F103C9FB64241FDF43B91008
-:10EE60007A508F7C778284B3587DA80DE5E61CEE3E
-:10EE7000E716677AF0FB5B6A0B52209F3AF7D41AC9
-:10EE80003CA769C2CD569C7FC34B66F4E3EA574664
-:10EE900073819EB57084D92A429ED2E7731C849DEB
-:10EEA000EFD3AACE0F6AF3BE6B53FDE3201FD450FD
-:10EEB000192D84BCD123F207BB5F67720DF56AC3BD
-:10EEC000CAD8931067FE6E6AA002FA9DBDE7DD49BD
-:10EED00092075F47F9767EFF10DCD739A745BDBFA3
-:10EEE0008DAC57E71F496B2AC6D549BBFA3EECC328
-:10EEF00052BDD72B1FC9EC9A8D86C050B03BAFBD19
-:10EF000086D55B7CB2482680CF4FCC84E7F9859CC0
-:10EF1000F51626EA81D9FDE295F60338F3FA57D1C2
-:10EF2000BF1EF04AF159C7F1FAC9735716025ECFF6
-:10EF3000EEBEB210F0BA51DFE603BE18981E980379
-:10EF4000F03839D18F76A1A8F7BD547A5B9AC9F50C
-:10EF5000E0BF480FFF407CFF32F530FC498C97BC86
-:10EF6000F45756971BEA62FB827BE274A7F17CB3ED
-:10EF7000F35FC912C8E1FEC6B371FBCE652221B0B2
-:10EF8000BFCA2AA3F85ED99F650276A0B07FB5F309
-:10EF9000DFC0F1BA23D377C105F8E571DD5A3EB67B
-:10EFA00029FC39B3B31F97306E6BF28452C6A15F50
-:10EFB000357FB40EE5CAAF70BF07E9926CE09F2CB5
-:10EFC0007ABC099F9FEB9C8BCF655324027E583DF2
-:10EFD0007D0EED35E3D5F5DBFA3D259144BF97CEA7
-:10EFE000E333F04B931C3103D06703D8D5748A0DFB
-:10EFF0000A8B6F373808C6554A3BD57EA2C8DB6EF0
-:10F00000F1B3F373B67449788E56BA21909F0D7898
-:10F01000D5E46F7F91E93B96E9ECC9BF373A7DBBF8
-:10F02000810E1D06928BF57A7AB11F51BD8FB3BF49
-:10F030003AB897057F7CABFD340BEDA42F881FED0C
-:10F04000A403107BC0BCFDAD685789FBBDEBE0C2DB
-:10F05000AA7CFD02BEDF7601DF6F0BF23EA291F7C4
-:10F0600089EDBA843AB8485FF50C09757089EF25C7
-:10F07000D6C1455472B28DEF07598679F220E59BCF
-:10F0800015A37AE8BA8EF03F9B621FE07EA09D46F2
-:10F090008CCFD5F1FADC60ED09F47B82B0BF88F14A
-:10F0A00037AB63E7E755D4517F12EB943BD475BC83
-:10F0B000E7FFC9FA45F4EB2FEEFE670D7F8B7589EC
-:10F0C00075D475498C1F35F3D4FAD1DAF8B9F083C9
-:10F0D0002F55CEA564FD6BE55C5696A0EF7F4CCE18
-:10F0E000F5CA430C8AA578FF0979888F3D6DE91030
-:10F0F0009A6C9518BD4ED2597D2CCFA9637510DA44
-:10F10000FCAF6712E63545DCD7F4BC2EBC3A1FFBDA
-:10F11000635EB77E7F32D625D47A6AD16ED7E63B5E
-:10F120001793DD9300055F9023B88FED1FAD2FA8D7
-:10F13000CC8AD717E45F667DC175599791EF7CD56E
-:10F14000FA795A20814E2A8BA90350DC7F1DD96D94
-:10F150009CEE92781D8A4909117BC2FBFDBD776741
-:10F16000168B1FBECAEB9F1E4E4EC2F3175C06B62F
-:10F170006FC325B33AAD5CB7BF266B0CE81586C7E5
-:10F180009FBC701B81BAC79FE83BF03C8450BDD543
-:10F190000BFA50C4ADC4F8BFE2F1D44BE59FBBFEFF
-:10F1A000C9FCF36D722324BE77A9F9BA4D14060980
-:10F1B0007CA5E583FEDEEB4FAE6CC8F2AFCF42B963
-:10F1C000E51B81798F4B944749A5545E83BEDF636D
-:10F1D000F480FF61E2FB8BC87AB7CA7F9FFB700E99
-:10F1E000EAC34FCCCC1F11FBA0C4FA1FEF17DE7F80
-:10F1F0009FBDF817A7FF4958CFC90A1FEE7B78209B
-:10F2000099E995D853ACCE48BB1F48AB4FC47E1686
-:10F21000F1BD4E21CFFE45F2F4B57F923CA5FA1523
-:10F22000ED8D7EF3BABDDE0FE177CB2ABB7D3CDFEF
-:10F2300085FB39C4BC82DDAC3EEF6D8E3F71FF595A
-:10F24000AE7733B37DBF033C9C7DC764823C6A6963
-:10F2500029939F0D7E2BE6211A3A585D4EC34A82B0
-:10F260007103B1EF775646200A72EA8177AD787E56
-:10F270006C43E7F6D602AC5708A09D78EE1D76DF0A
-:10F280009C113809E307574655F98EB28B9FAFA9F9
-:10F290002EC5F9A2DFEF30AAF75319B2993F2FAE6E
-:10F2A000BA6CA1B7A99F43DF3B5BCBEACA830E9F31
-:10F2B000AD02EB14583C3DC9D38D71F0863DA824B6
-:10F2C0000816B9C2F37BB3916E1AF65494E0F90BA9
-:10F2D0001DE6123C47E83D2BFA6B67EFC90C433C37
-:10F2E0007BA93BF017986F7269F83AB057F3E8774B
-:10F2F000209E7E76F77525185FD4F09DE0B7F83E26
-:10F30000DA3B4CE166A9871F37EA997E147AED0C47
-:10F3100018C74ECC7BB03AC3AE6964BEB5A76D7555
-:10F32000A8EB2F77644E3C03703E93A5F03C39CB9D
-:10F33000CBE79BA8375BD09B0EF3795E7E1AAFA715
-:10F340002021534F1D45C1B7E7E5C5FC445BE4E50B
-:10F3500093BE62767381CD807491DCCAE406A17499
-:10F3600001F6FAF858F704D8BF36A83D321EE0354A
-:10F3700000C00F312E12FDE148C87FA429E321FF10
-:10F38000F1D88A51074C0E8847755F0DA8F1B4D9A2
-:10F390002AC1559D95E12F82FA4AA2341601FD57E4
-:10F3A000BEAD67758F6B9350DFB7E7D661DDE3B90C
-:10F3B000778DAA7D46BDE43459ED82B85341EB7F89
-:10F3C00062FE21798FD4673DEB427022C6B0FE10F9
-:10F3D000C74A6EED0E95435CE641899DC149672F92
-:10F3E000B9209EA0C86077CCED64FBDFE7B6D92BCF
-:10F3F0004D284F2596BF19EF4039A9ACBD5E067F59
-:10F400004F692278DEDDEC6C76DEEDE0769B0C78E1
-:10F410007FF96B5D9F79B91BB27BEAE8005CF5C6AA
-:10F42000D821281D10F944513F27FCABB87CE5E7F3
-:10F43000C20B7DA4B5637BD9AF5C1FC5ED780D1DF4
-:10F44000F7F79EA06F41CF2FEB09DA612F4B26DC37
-:10F45000C726E8BA45EC2BF89AC585F3787DCE89A6
-:10F46000757F19C1CE8114F99830ABABD247D76400
-:10F4700021BCA2D78460DD7BEC724331C6D31A7005
-:10F480009CB5ECDCBABCD681ABCB4BE16A230082E5
-:10F4900013FB96E4015F86281D0CEE830E8AB35998
-:10F4A0001D94B23609F1A66CC013BA89624F47BCED
-:10F4B000298F30FC1466333A17F96011F7CCCC0E63
-:10F4C000ACCC1E93B0FF6C8585ED3FE3FBA4935756
-:10F4D000BCBB0BF6753DC6E3CF075E1A86BF9F71B6
-:10F4E00061AD22411CEA82BD260FFCBD07385E9348
-:10F4F000956E62B326D2E701ACBF2DD8CFEA0815CE
-:10F500007E0E96B2D6B11DE039362D8075C657B73E
-:10F5100044F0A7275EB29DC43C1FB58B70DFF8E9AD
-:10F5200017246117A9F4A1F0D7B47ED88FB3FF7761
-:10F53000FDAB27E372FA32FD2BA2F633E3FD85DF44
-:10F54000A8F52334EFF767FF105F485567F302C74C
-:10F55000BBD0EF995C368AFA9BF8BE6F1236C3FEB9
-:10F560008CC9504BCBD68375489B248B17EC246DEC
-:10F57000FD51BC2E88340E6175298D23D9791E8DDD
-:10F5800057C255D42799A13E25B10E3699D5179962
-:10F59000A13E85DE6FEE779FB8A709BEDF7E9F4D47
-:10F5A000EC136771FB6AC2F3163B701F79EC966C23
-:10F5B000DCF733A19AC50353FD0619E8F2F9BFE958
-:10F5C0007C207763946FC1BE4A1DE47383BD65A63A
-:10F5D000CFA1EE25BE4FBC86F4B94F5CD447897CE1
-:10F5E00071E6908D12E89F78DD4AB067FF387CB7EE
-:10F5F0007DA907E3CDF13AAAEF125C67A590332607
-:10F6000035FE527CAC5FCA4C03DA19E972E029CCB2
-:10F610000B6EE936037FEECE2E40BC359787F11C8A
-:10F62000E4D4E2368CE786D37CE7B29D3DF423E652
-:10F630004736B1F59F87FD6752CF77CF2FFA732EEC
-:10F64000D853955D4646879A796C899F5343BF434B
-:10F65000AFBA1C867FAFC6BE15575D8EA4AAE31352
-:10F66000DFEF6F9D821EBFCD6ED7D257A892E3E722
-:10F670007D7398D53FA9E9EBC0AAEAD127A92C3917
-:10F68000B8CA8FD7F366A94307754AE6D86C90804D
-:10F690006FE6B4DD08E7999C4F8EE5C2F9276FE766
-:10F6A000DE7513B69DB1F7A17D2AE769D61E1C7BD6
-:10F6B0000CCE43F95BCE889BE0BC93F3F0AD4C429B
-:10F6C000B2B615DC142A867D26D135DDA09F4A35D9
-:10F6D000F52E9A731BA02E13CF99B0327C66F0BA28
-:10F6E0005852C5ED77C854D176B3BBC40BF50C5650
-:10F6F000E2D9D30DCFB38DEC7C07C2EAB09A07E70D
-:10F70000B3BA094EEF249BC7B3493404F4DB9C6FB2
-:10F71000C7F7E3F27A8F91E7B1D8F78F3EC7F6BD0E
-:10F72000897A5F426C3960F7583D44D516E79E10E0
-:10F73000C59603E71C348B78216FFFC112B83A27B6
-:10F7400041FF1E9D787731FE8ECBF3F70E82F54E8A
-:10F7500036A8CFC116D79772197D9CE7E7456EB3DF
-:10F760000426C138C792664F82237867A65518ECE5
-:10F7700068A73DA50379E4E474619FC1E667AFF231
-:10F780004BF0FB29E2BC466740C1780009B4EB406E
-:10F790007F3A4FFAB1AEB0CE14CB55287D194D81CA
-:10F7A000E9399057AC397E17E615338FBE0F7520B7
-:10F7B00047F56D1352405FE4F3F333A8E317A2ED6E
-:10F7C000435979E8F7C5CF771D2CA17C983A83ED92
-:10F7D000A79D423A148CBFD8D8FEAE49A5F9DE6683
-:10F7E000FABDA9BC8E64D2317F0AC40126DD16554C
-:10F7F00058FE26A624D66D882B71E93D897C709D24
-:10F8000027A14DE05C6875FB06AFBA7D53F9D7437D
-:10F8100012DB0388AF1EE0F8A214C5FDD6A1B1C467
-:10F82000C6D6C5EA139FE67EDB301731E541FDA45D
-:10F83000430A815F306C6F26E665F696136CA7EF7E
-:10F8400034ED3025AE7F83CCF2BE3C6E2E7EFF09B8
-:10F850009E815E7DFE9D748457BA5546790A117566
-:10F86000A0B7B22C9305E4BB8ECB79B13F7D628A01
-:10F8700009CFED6D5ECA7E37427B6E69B3DEF60A54
-:10F88000E0B1F96338928AFAD9C986889C02F8A255
-:10F89000BE8FA3471E0BFA81F1AE01BA1FC37E9F34
-:10F8A0008B52F9A0C473E39B9D6CAECDF7293CDF6E
-:10F8B000C77E27A428FEBB2194ED687FB02909F2FA
-:10F8C00009CBB7E5887512C507FDDD44B4D97EAF15
-:10F8D00074DE16E7A51252A1E0F94492E8D784ED50
-:10F8E00047793FA9EBF53F017D0C4AA1EBA1D7D7A2
-:10F8F000723C48DC3F958F6E423AB1063C4027DEB1
-:10F90000A4BEF71F75E4303B62624AB90BE2EBCD4F
-:10F910006EAF0BEC2A011F715F8C2B9E8BEF79D39E
-:10F92000FA1EF7352EAF3BF83E68EDF3977364F59A
-:10F9300077F5745CEB377CD7A9FE6EFCBD9CBEDF0F
-:10F9400013F7457FFC59AF32E03306B729BC6E96FA
-:10F9500014A9EB5D48B9D7C4E4BDBABE65B2B4D250
-:10F960000DFC799DA9BE2B4ADF7F9DD3C96439F078
-:10F9700047C837BC3EBBF020F06735FC30011DE7BF
-:10F980007A125903C472BE22F013FB409417C78049
-:10F990008F1A748121A9B4FD89BE6DD0D27CE4AFE9
-:10F9A0007772C6F49E9FA0C3F83C29FD01DE05FDD9
-:10F9B00069E72DE880DCD8810582DB4804AF2EC2E0
-:10F9C000EAB2A9FE62F5D79E9C9E7551E29C646ADC
-:10F9D0001C04FAFDF5A610CA9FC9F61F611DDAF9CD
-:10F9E000BCC03998D7CC919FE2F942C45583F61632
-:10F9F0009DEFF97FE57CA18208EE0B3B50D87BBDE3
-:10FA0000EA913F36A8EA91C5FCB47C2CE61124ECBF
-:10FA1000DCA8095DDBD1BE0BCEB07A61DF4810EA0D
-:10FA20006C4B319F8675CBFBB85F169258FD702FDB
-:10FA30007BB1FFBA65764E41BD8D9D1F24CEA1FAE4
-:10FA40005E81385F88CD9BCA2F7EBE10B6DB6B3CD3
-:10FA5000E8FFC5EDC6F9CC0EBDB6D0D202E735F64B
-:10FA60003E6788C5F7C85EA387DB89A8BFDB93D94B
-:10FA7000773E31B33AF904394EA4F49EF3CF36EA17
-:10FA8000993DE8CDCD677941D95B06F8D802792B4D
-:10FA90005DEF38E4C0F4C0E85CDA6F7EB12F177E0A
-:10FAA0009A65AE81C519295D6DED26506ED7F8387F
-:10FAB0009C0B7A1D697C4B1E88743516FACF1CF698
-:10FAC000293B2FB487AEC6E53A99DC0421F86D7C5A
-:10FAD0007A322D3001C669B777BCD7500A794B23EB
-:10FAE000C25FD4336AF937613E27F56C3E0E381F8A
-:10FAF00099CEE7FABEE67329F49D48471984D1717F
-:10FB00007F740EFB069247F5D0F90012B81DBE1B9C
-:10FB1000A7F735DE56DDC03EE6ADB322DE6F9DC5EC
-:10FB2000F231C12466A7425EC69D0EF127F6FD5B49
-:10FB3000D732FAB8D56C447A99D6558FF91752C591
-:10FB4000F2295EFA1FCC6726F14D849F58B9D93649
-:10FB50000DF781CE98AACEB7CC344DC6FCCE2D84FD
-:10FB6000C5D36E9DA157FD7EA480C34CB2FE53A8A1
-:10FB70000F99A9F9DD482D5CB4F91A018FE6F26FEF
-:10FB8000E6FBFB72E3799D219799D769C945F97422
-:10FB900069799D83FA189E23F09A73E1D6A5942F74
-:10FBA00086FCB818CF5B9F98BEE8F10DB4FDB32D6D
-:10FBB0005760FBB5F43B961F85E78F1562BB4AFE85
-:10FBC0007436F04151D9AC29704EFD41331BC765E5
-:10FBD00009B4C3EF8EB846148C0297ACCA10C37E2A
-:10FBE000D78FAC1F0D75355516D63E52F25FA3B0B8
-:10FBF0005DC0DBA35EBC02DA07A54F67F795171A55
-:10FC0000562445E0F7C5AA5259FFA9A39ECA8438D5
-:10FC10004155256B0FF356AC1D08CFE5CF66F7A510
-:10FC20008F7FC9ED63616FF939BFEFF51D6F81FDFE
-:10FC3000667EABE4857D06FEF2E3EC5C3113AB4BF4
-:10FC4000F0FB4A143877B2D2C7E27B13AC4D6E900A
-:10FC50007F37060CA510C7B559F35BE07CE701E5DB
-:10FC6000156300DF13A81906FA8FF2D5F3C0CF335E
-:10FC7000AFFC343705ED10355F09BA9D26F8A94A67
-:10FC8000CD37541E74313CAAF9818EFB0A8E7B95C8
-:10FC90005A2FC5E5BB866FB5F4D8AFDE276A391891
-:10FCA000D74F6B3A902EB309DB4FB40DE894F1EFC8
-:10FCB0006F617E06B9DB03F7F324EF1558A8D18FE7
-:10FCC000FD20E607660F19D57B5EF04711F6229BF3
-:10FCD00081CD960EDF65CFE97B3EF83138312FFAC2
-:10FCE000FD13089F356C3EDBA446FEFB22CC2E178D
-:10FCF0007E6F83586FA77ABD6516B62FDE45A8DCE8
-:10FD0000C1D87DC915DF34EF20D7B3334CFE078D42
-:10FD100032FC4EE15CC4F36D24F41CD837EF58027A
-:10FD20007F84F9E8E4D0FEA804BF0FE2C37C32C5AB
-:10FD3000E3174CAE33BC887969E1D1D08F5CD5CE66
-:10FD40005B0B871EFC74A37DE6E6BF23185F9766F6
-:10FD50003DCDFC770462254655DDE9911A56572BB7
-:10FD6000E675442245A827250BE651E37127AD7CB3
-:10FD7000EB677F9CD0CF629E77F3FD595FCA4CEE54
-:10FD8000DDAD8BE03CF3AABBCD00C7F2BC02763EF2
-:10FD9000109F7F737908FB1964A9CF3C71799E2C61
-:10FDA000F260A4CF73DC3CF956E08B3B4DFCDC3AAF
-:10FDB0000D5D104DFEAC3F3A11F1BB4AEEB7C4F3F6
-:10FDC000A99A73E2E698FACE9B4914BE59A9BDF1EF
-:10FDD00020F2693768E374D7B1F8D50D3C4E37A1EE
-:10FDE0009AE127754532FA75A9A5471532BCE73C5B
-:10FDF0006B81AF0B8E40551EE635A263208EF0E678
-:10FE0000989F611E499C1BA9859F3F4F16F1C64BC9
-:10FE1000E297FEE6FF078B7F3A7CF713A91BCF839F
-:10FE20001BEDE6E79192403EF093DD965F01F1070E
-:10FE30002A772F5E0467141E51FCEE74066E87F756
-:10FE40006E23FE8950EB9D5A1DD0B3F83DC1F8F1E9
-:10FE500032EE474EE4FAFFB367D87EFD2ADFD04783
-:10FE6000C7837D7A584FC21EA81B67F0F96CAB0E92
-:10FE7000F5FEC23746BBC07EFF80D3E3904DB2EAA9
-:10FE8000770887862DAA733D86ED4C55B587776434
-:10FE9000AAFA8FEC2C503D2F895CA17A3EFAF0280B
-:10FEA000557B4CF73855FF2B8F55AADA63A3535473
-:10FEB000FDAF3A355DD5BE3A76BBFA5C9290AFBBEA
-:10FEC000281D7E3F81C1E3DAAFE6A8FA9F49997405
-:10FED00018F872DE7A56275E4196A8DE5FA2ABC3A1
-:10FEE000FA6BD2C6EC9C46FA1FDF17AF607D1AB5DD
-:10FEF000EFE1A701166E52DB41B55D1BD6802CEEFB
-:10FF0000751E86C6DED1DA37431C35706C3679240F
-:10FF10008FFFAEF895E44AFEBB345ABCE2F9029F6B
-:10FF2000BDA5433F63D91BCCFE5FB68BD5DF1592D1
-:10FF3000C10370DFD9611D094B70CE42E3C6F15297
-:10FF40008F9DA3858BD1A5C6B3D9A3C67352911A31
-:10FF5000CFC95E359E0794ABF16CF7A9F19C56AD05
-:10FF6000C6B3D3AFC673C64C359EDD01359EB36AAA
-:10FF7000D578CE6954E3396F851AAFF9A1C5AAE7E0
-:10FF800042AE0E6C5DA6BADF2C759451494AE6F973
-:10FF90006BF17C89C16DDFEF933E04FE43F43FC6F5
-:10FFA000CF8D58CFBF80E21FEAF9BF20EB0F414A47
-:10FFB000564B070D9D1B30EF76B974F0761EB75F78
-:10FFC00005FE2FD17EA5FAF2BDBC3168E7BC0FF269
-:10FFD00061E610EE97F8FBB67384DC4AB42B12FD91
-:10FFE000EEFEE4592F3DCAFDF07EF5A8C60F7F074F
-:10FFF000AA9FD05E5F8F71AF599CAE3F875B632134
-:020000022000DC
-:10000000EEFA2CDA07EFD08994D379BD03F31E0101
-:1000100076C2308C93DC41227A3C3F1C2A4675A87C
-:10002000BFB04EB386DAED709DCBED87F93C8E62A2
-:10003000340588C789F193BC74F86E7637EE33FBCC
-:10004000BF17F44F2B008000000000001F8B08003A
-:1000500000000000000BE57D097C94D5B5F8FDE6B5
-:100060009B2DC92499241012026126210B908449EA
-:100070005804451C9660D4806193C58833498090AC
-:100080008504D0D7B4A5CD40C2A28536B4A8A8A80F
-:100090000302050B345804D4688745A44F5B636B97
-:1000A000AD4BCB4B0045F618B4D23EDFF37FCEB953
-:1000B000F766E6FB480AF6BDF7FBF5F7FBE3EBBB9B
-:1000C000B9DFDDCF76CF3DE7DC3BECED38C612196A
-:1000D000FB06FFDD717DCA988FB1DE8CFD01FF84C8
-:1000E0007A231C455607E4275A1D0F3D069F8E189C
-:1000F0005879B30DFE28847E46436A2CCA9E96DD4D
-:100100005D3F2BA13163AF2A1E0F1B0EBD265A5D2A
-:10011000DB15C68624316B622C1427F853A64532B2
-:10012000D6C761A07AF04F61F18C0DB6D2DF6C4F6B
-:10013000DFE6A531A9F8973FB628FBDB8F9BEA7075
-:10014000273B4604EBDF68BD6673F3129C6747B537
-:10015000CDB5D5C9D87B5804ED9EBFCF1250A3189A
-:10016000BB62B2AD55A219FB2062DEF1DE0EC69E67
-:1001700009F764215C66CFBA6B35E69523718EA5CD
-:1001800030BF2BDEB6910CE66DB17A5C585E65F53A
-:100190000C8887255EEAEFC98856A1CF220E7FF82A
-:1001A00023BBA8DBF9F3F94C50F8F89F847B46E3B6
-:1001B0003A8E185A935D080F63EB486CC76CBDA963
-:1001C0009F4B660E979EE0303EA27F31AEABCC6275
-:1001D00071A9D0E77885E3F54CDC83F36AE0CFF9C9
-:1001E00086A2F880AA99F79D346FBB7740620AF423
-:1001F0006F12F3B6F6167077641545F63CEF06EC11
-:10020000BF17E47EA0F8B73B392E317FD017E37FCC
-:1002100014F216C3D5F7A643BE23DBE0DA0A459BEA
-:10022000C3A1EB3CC6DE11F07EC604F958FABE1637
-:10023000BF2784F3F6098F1BFC0DD0BE68FCCB846E
-:10024000A7E717DB683D5EE63033985F29739B7143
-:10025000FE9F8CFBCFD7DA001FF31D1E0FC2EDC12E
-:100260003843F27B340FCF90A9306F36E6E6E89F33
-:10027000B175063692B16976BE84F9026ED399DB08
-:1002800084E3CC641E138EFBFBCB663703FAF83D88
-:10029000E098C17C67311F7D9FC3FC94DECF025480
-:1002A000FF01D646F9772372FAD7C1FCA63E919199
-:1002B000C60C1AB8FF1BCE17E8E5C15E9C5ECEF6F1
-:1002C00041B86FEC7D53F43B55D00BF0EB0FB11FF1
-:1002D000E0D7E1B929217C3391D30B33DAD3FE1176
-:1002E000DFB47646E5B0A19877DB1261FD770A149A
-:1002F000DEE9AE2CC475E6AB36D60BE0DFEA50FD86
-:100300001618B3609CB72FAE0BFE45FA004F53DCB6
-:100310002A433CBFB902BE40BD3773553FD2C49497
-:100320004D93CE61FBC271D31BA361FD93BE6E1BC7
-:100330001E80B4A09FE9545B261FE31BF8DF976C77
-:10034000F3C41848EF4ED8676430FFBB076ACB0B85
-:10035000B3206F0DE6A73063B01CC63D8C7000FA69
-:10036000A9FB73EED86321ED186B52916FB63A2258
-:100370007B7D3A04B283D9E06F70DE6A71B4A71B4B
-:10038000FE91E957F5AEB1C78026EF51DCBB1C44A6
-:10039000170E33D27F8991B9BBE3BB8B698AA01F4B
-:1003A000C02EC8B37BC55C3B0BAF9AAFC07ADB1CD9
-:1003B0009EFDD8CFD2C99FCCC3F53123FBED308051
-:1003C000DBE2DF01DCA0FC543D403E03F8B3DECAB3
-:1003D000DC16C63EADB753FEB3FA044ACFD73B286E
-:1003E000BD589F49E597EB5D9467CEA2D7B0DF92E9
-:1003F000B59F1B3D598CAD099378E4F35826E878F6
-:100400004DFF917F72C1786BDE3651BEBCB9695227
-:1004100004A4CBFA9F5A1901DF97ED525CF8BDB2E4
-:10042000C56DB6211F1DF3AC46F259F876DB1414E6
-:100430003BD5D714E601169A3DB0E82D1C6FC41FBA
-:10044000CFC423FCCED68FA2F99CAB77D37CDC2D16
-:10045000EDC7E3A0FD85FA02CA273A8BDE45BA74E0
-:10046000B3CFCD587FF2EE76631294E7BB1537F227
-:10047000F75837F3FB017F9B4C7CBFD804FB05F298
-:10048000FBB8EC69CF3CC4509E7B3EC6F166C69675
-:10049000E6C7C1F729A3BC46AC37EB6BC6302FE9E2
-:1004A000FBC67CCDE1512DF072E97585E074E9C0A1
-:1004B000907B6F83FE5E3FA13215E6D579CD40F388
-:1004C000EAFC20DC0F3B5357BDA52FA5F661364C47
-:1004D00087F46159B83EE804D69DA9180D75C0FF90
-:1004E00017F67C2701E12FC7BD10DBFCD78F50DE4C
-:1004F000FD85CB3BC69A3F7D0AE561BF04D7A3903B
-:10050000BB6C62B3893F596D04EE878BCDCCC3F3CE
-:100510009E2198BF10CE1E2C82FCC8BD49E3917F5E
-:10052000703C4746509EA5EF7D22E5FB8EE0783B70
-:10053000F63CD9F98A03CBFDC4CFBBF63ED3F769AD
-:10054000C855ED5B158EF37A15D6320AF8E3D50D52
-:100550001124B75E35B94ED6A1BC7EC6E6DA0EF5DB
-:100560007EFEE3EF9E3A84E9FAEABCEF421AE38C9E
-:10057000A57ECA7EBA6830B687FD9B25C23A7F71D8
-:10058000500984E53096BDF1F0CA44186FE8E6766C
-:10059000435F4873B7290D980EE95F7002F7CD3EAF
-:1005A0004E07C17DD86EA79A846CD7D7FFD11DB4F2
-:1005B000AF6BF7FBAC8D9F8FEFCB82FBFE60A5F995
-:1005C000FC0A27D2EBFB791E824713CDE3A596E9FF
-:1005D0007FB89FE13A40A3C0797BCD2EDA6760B93E
-:1005E00026C85FDA9FBAE55158E301836F0BED43EC
-:1005F000255CEFB854E47B12E9A51AEAFB205F9D65
-:10060000EB8BBA15CAABFF32D00594C1FA3F7B67BA
-:1006100001C263F1FEC726F5857A97C6309702536B
-:100620002F7FE9EA246CC7FA3386AC7D697F43FCEF
-:100630005C68F7A3ACF123904E8AD4661A87D5F094
-:10064000719E10FB176B03E0C40B92837A3F82CF3D
-:10065000F83DB625E670120BE2A7A66585D308ED36
-:10066000877BAC2E15E9DFE94BACB505F743D8C75E
-:10067000463B91B4CDA25FFBF4E4A26FB18F99C564
-:10068000BE24FB7BC2CC7C61D04F7FF8AEE03E6BDA
-:10069000E6FBEF76900F48BF72FF8571EF728EA078
-:1006A000F66E94A749B0D9E6C23C939EB0903CBF89
-:1006B000D9F1A5DE5413CEE591D43F66C735BCD63B
-:1006C00006EB3D1EEE9989E3CC17FB3733BA1C28A5
-:1006D000A7F784BBEF73D27ED8918C6B80FD712E0F
-:1006E000E617ABA04FA586E853D69BDB1F3F0C77E0
-:1006F0007BB0FDCDD6D7CBCD655F1A582ED0C1B219
-:10070000C72C7E06F36E40F90AEB6A881C694539EE
-:10071000C08E19AA8EC37E793B6FD9D5DFB2C83C93
-:1007200092130D8C750BAFD7819F3D203F0220EFB8
-:100730003DC0D763AF75A89CDE5B8F460F4779C974
-:10074000DC91403F775C33304FC87EA6EF07F05511
-:100750008FEB1BC7229827647F74B31833F22DB335
-:10076000C5FE73EB16F31F23F037A6F38308947FBF
-:10077000CBBECC2339D8D3BA5E13EBFA35AE0BD24D
-:100780004FD28A36201DDFFE85DD88EBBBDD383594
-:1007900019F51398F71338EFB15F18B4F3FE3A5C0C
-:1007A00093BFD9F93FAC309F01F9F173B31FF9B191
-:1007B00005B7398063CBA22C3FF2FD0133CFFBA2FA
-:1007C000CCA49FB644321FCA9196A9F17E9F13E52F
-:1007D00021E3FA6B6FC6CBC344FB39F1D4BEAF053E
-:1007E000408AF2E0FE70D17FED5BD958BE2289E4E9
-:1007F0004883C9BF3605FBFF81EADA0E78FBC06F7C
-:10080000F099804E36C604EE57A1DF8D9FC7331C8A
-:10081000E7031648AAC171CAC349EEDE66303C3808
-:10082000D586F5DC89B100EF03FFAD92DCDF980BD4
-:10083000791BC9EDD9CDF07DE354776238F63335B5
-:10084000DE40F351592D7D77F2761F9978BDB902BC
-:100850005F1F0AFC005F13DF7BA64418916E4F3ABE
-:100860004BDE7512BEDD890ACCF7A9B234867273ED
-:100870006EC55D4EA297A627487ECD163890FD61C5
-:1008800003EB48D47FF9BF39F3B787213E679687DA
-:10089000B5C30EC93E285F19E980F6333D6AC00230
-:1008A000F294CDC87777E9672938AE9BC6AD6E1E46
-:1008B000947A26849E4B2C2027A0FF43619E0F88AC
-:1008C0004F0FE552F921504EBE017E3A5596B617AC
-:1008D000F98A95C9F35FA014F1F07A8795F4CD9E5B
-:1008E000E8A101E13F54D029E26539C73BE85D94B6
-:1008F0006F983D98CE25CF9938DDF8F685115E0BBF
-:10090000A65909CF9DB3C3B758A0FC4121B71A66B9
-:1009100087BB15A8D7F092C56F70D27987EAF95EC8
-:100920008BA47EABCC3C5FF5621AD1D301B37FD7E9
-:100930000E2C7F3D8CE8A12A8A8F5BF54A92A03766
-:10094000B773158EFB9A85E8A02ADC114DE5FF1ED2
-:10095000477432D9EAF91BC20BE8AE16F5822A7346
-:10096000203D06E07B52D0D5496883F8F3D546D2C6
-:10097000BC89E521EF69E8BF15F1E931F372F63D75
-:1009800095CA4FDAF9F827D7F1F18B7F52F9360380
-:10099000BC9D2C9A94381FE671B23682F4BF3FD7C3
-:1009A000A90173149E5F3A1E4F877A97979F1EB9CD
-:1009B00009E6DFB6F2E364A48FE295D585D8AEB838
-:1009C00062F914DC377BE2CBE22A60FE103E4E492E
-:1009D00071C7A4C07AC6A6787A615A93D5B600F5D5
-:1009E000E0CBE6D667F11C9114E7E983DFAFBC7C6E
-:1009F0007607D78F3BD2713F586CE4F421F7D51AB4
-:100A0000417FC7533CFD53709F080FCCC3FD232289
-:100A1000AB95CBBBE53727E7CFB76C3FA0C0389588
-:100A2000E12D8B2955FD39D8CF052510A5A412FC41
-:100A30003CC84F17ED812884BBC7C0F5B3CA9DDA07
-:100A400075E13F23CCAB12FF807695CDAA3B0C71AC
-:100A5000CDFC669C7F253307EB3B8378827E084F75
-:100A6000CCF6E779DF07F857EC1A9487E780CA9845
-:100A7000433FBE8DEA413BC927EAF579B99EEBE7D2
-:100A8000C3D77751D0FF4549FFB3CDF25C4EE35F4A
-:100A90007EB90F8D7F61AA3F1DE17F5911F576590F
-:100AA000783DA00623CEF3979C9E1E37F90CE17487
-:100AB000BE6744CF9571CD23112E520EC11C7C060A
-:100AC000A87F616F12D597728B153186ED2AF726B4
-:100AD0006EE5FA993897E244A17EC52F78FF9847D2
-:100AE0003E3CFF4292188FEBC77AFCE9D75B9C62D1
-:100AF000A0F53E2EE577A4E47357C254807FC62646
-:100B0000B3A6FEE548F3836EE877905FFB5DF65F82
-:100B10009EA2907E364087B7BE6AC7610BF2D3F3C0
-:100B20008CF8553FAF9A147EFE7BE1852E3CA91CC4
-:100B30006FA0064AFA70703DDC8470FEB00B1F0F88
-:100B400025815CAD4418A404E17320D79384F2FF9F
-:100B500032E6715F88817C16EA411CDE322FE1ACFF
-:100B6000A7B3951F2E486A83F64F09F80042FB2071
-:100B70003D76E92F26385F64E1B9B27CD899343CE0
-:100B80006FD60E82ADA06B3D0B36E55A919F166E67
-:100B9000CEB59684E0A161E7B0130E80F3C59D4603
-:100BA000178AE506A3FFC7A84F37EC549B7D8CCA74
-:100BB000AD08DF8BB623BFC37A0B36C7E4A1BE2CCA
-:100BC000DB2FDCF4F0A0B210B80FD9A9C54376B37F
-:100BD000363FF49036BF0D6543EF6FDF2E37A0CD63
-:100BE0000F3BA1CDB30EC016E041B5723C1D1CE514
-:100BF0003AE1003C0DF0AB2EFC34C0366DFA64D403
-:100C00002F36ABAE34281FB0BCE89E6CC87FB679D7
-:100C1000BE0BD15CAEFA167F1F7058FEF1A413B85C
-:100C20001F5E60CDEF4F063C2C68D960363A70DD10
-:100C30005ABA3D6010F4FA02B7972DF26BCBAFE7CA
-:100C4000EB15D25E9A194A4F7ABCC3B8F7B9614224
-:100C50005575CB869D812DB3BC10081D6036BA79C1
-:100C60008319F5B61B8FE3E3F462733B101EDE516C
-:100C7000BCECD6BA09ECF430F863DDBB9370DEDE71
-:100C80001F29A437787F95710CF781F67D73EEA646
-:100C9000F4BE025ABFB4CB2D6C51029190B78F7243
-:100CA0001C6A8376F3FD8A0BE75DD26809CA33F8C4
-:100CB0005FD93ADD3C368694C3FC171E3AFC3705F3
-:100CC000FA2FDFAC6DB708E42CCAAF8A6DDF58424B
-:100CD000BFCB73E3AD2D5B545CF77C397FDF588667
-:100CE000EBBA955765BD847E730633B06FD4F62E8C
-:100CF0003A8BFBCAAD1B793B10975E5C6FB5CDECB0
-:100D0000C0F5565B592002E67122D2ECB6C3F7ABB0
-:100D10009B22C91EB6C002FA641EA52C2C0FDBB99B
-:100D2000A2B1DDA7EF70BB58751CC777F5730A9D9C
-:100D3000A3AAD18889F9E7797E110BD03A904EDCCD
-:100D4000A1EBF36BF3AC899FBFAA8C81C3088F0A18
-:100D5000D6C6CF4F8047B7841FC0AB0AD6F9412C07
-:100D6000EA5BBAF6CCE5C1716B6C5C7FAA39F48D95
-:100D700025B45C9E03E53955DA699F4B2F0AC7718C
-:100D80005629EE27AD30CF5542BFF66D0823FA9DA8
-:100D9000BB85EF37A0C7A6235C366E4874A19E3191
-:100DA00017F4F230E49B45E1540FF45DB2AF748068
-:100DB0005E8DF6F68D31CD01DC37363EE6243D1AE8
-:100DC000F45F824BC7FA30FF5605F560AEC76CDCA6
-:100DD00090417AF8AB729F5ACFF5AE6EF4622A67F3
-:100DE0007DB81EFF112E25440F4E8DF7A4A586ACAD
-:100DF000AB6CA53B11F79DB2696603DA9D58F9CD3E
-:100E0000F90DB60B3DB203D68FEB38A3141D378412
-:100E1000E8A32353F93E3272BC7B87A847FE853294
-:100E2000C3D447EFC0F11E373870BC2E78BBDDE964
-:100E3000388F331BC2F290CE468EE7F69F93B95C93
-:100E4000BE470C676E3FA477887EEF483568D28432
-:100E500070A03FE8E74C3EB73B470E2F227B1BECD0
-:100E6000D524E7F5EBB847F453662EFAF7DBBB99C8
-:100E70008F840F9BC8F585334B94AD7C5E805FC833
-:100E80008FFC6918D9E9CE88FD47C219E86604D9F4
-:100E9000DB85BCDA20E8658389D3816F113F3F058C
-:100EA000E985113D6C14E7ACB902BF6C3DD76B818D
-:100EB0005E389CD7270A7A61ECEF480FF90EAE67CF
-:100EC000DFE47909F05E9ADAFBFA7393C43733FAF8
-:100ED00047FC23FF46F5C13D077CB07F56FCF2B1CD
-:100EE0002806F5CE199BE25DD0BE6AFBAA2837A47E
-:100EF0009F197D517618FF9C5F2DF077036FBF809F
-:100F000037DAD715903F8BF14F07EA3B3F9A82EBD8
-:100F1000FBEB76931D4542CD4E0B9D9F16EF5F4434
-:100F20007A36E4DB797ECDE72AE60F69EDE0153FFE
-:100F30007F2CDE41F0F6251912300D243148176F51
-:100F400033B902685F7E4F75C130A03777ACC6F900
-:100F5000E9DBE33CAE01BE6B9A55AF39FAFAF21AFF
-:100F6000215F6AF6FFE873B4EBD5E8ECEEE5C2FF6B
-:100F7000A0B7BB37A546F6FA140DCCB7B05B500F3F
-:100F800002B8B802C8B7309F3422136EB76DD8F5D7
-:100F9000444E3BEA0BDBDE8A52B2827677E997E871
-:100FA0006C2E7D0EED9A3DF1E36561870DE28BCBF2
-:100FB0002DC7210565001CD0795A650A44DD06F06D
-:100FC000A8DA62223953B5E7F91D4F219D7D68A14A
-:100FD000FDBC72CF1BEFDF8AFAEE3E53AF42BE0C70
-:100FE0009B121FC4538D83DBC9245E2A7EF586D9EC
-:100FF00091CDBF2F8F0DE2A772DF6133CBBE1E8E66
-:10100000139A0F9BDB6CDDE0A9B97D12D989767D3F
-:1010100065463E38F7BAC2FA38AF6F5FBEE58D2835
-:10102000D4C7104EB82F497C75E14F571FFA9FF275
-:10103000CA70AA67C773454FF85B827B07D17724D4
-:101040008B81F1CB3FB2F80B11AF7B9745E13ACEE4
-:101050001A6B399D3FB32A1EF5BA72932FDE4E29C3
-:10106000FF5EFEECC3447F0B95DA787B16D177A246
-:101070008174065F22AE6FFEE699B4BE05CC43F4E0
-:1010800057FE8C5AE487F44B232BD8D70D9FF41DC1
-:10109000C8F9E4EC56402AACEF2CDA6D506EFC5ED9
-:1010A00015E7DC25B47F3F2CD6CAD852CA7F29F475
-:1010B000B64BA95D7E656BE879B166DB9A56C4CF05
-:1010C000F9FEEE3E384F80834FC04BF906FA55DFEC
-:1010D000CDEFC3F1C31CC691A21DECA313F03BD608
-:1010E0006F35B9D1EE1DD24E9CE7F8F80F89F1614A
-:1010F000DEE1785E3D1BCFF576FDFA0A062AD2DEE8
-:10110000D6CA42E9AB27BEDFF608D1D517EF71B9D1
-:10111000B2D83FB580CA5B4D813E58EE3F3C43217B
-:10112000B9606181EEF87A9B49F0B5B61CE6695466
-:1011300042E1FB3AD7431780DE1508E1E320DD9852
-:1011400083DF69DD3F15EB6823BF98F4A72D14F208
-:1011500040BF6EBD7CE83550F8E3847C90EDD9E665
-:10116000EEFD3941B9E0A371AB603F413DA3EA43D5
-:101170000BED1B557B4C45089F0BBB8FBE3F17CF1C
-:10118000A1CD928FB5F256CFC7E52F8EE8968F2F5F
-:10119000ACCBED9E8FE17BB77CBC4E21F9F63F9541
-:1011A000B7B0D391DDA0277E5DD883BC1D3B502B0B
-:1011B0006FBF6459D1B761A1DD3B80F0A383AB84DD
-:1011C000A75E7EBE9FEA20F8EAE527C3D0881038E4
-:1011D0004AF849FA64CC43E374D1B1A45349C75DDA
-:1011E00074AA5FAF168EFA72C34046F3297AD9C447
-:1011F000ED672D0AE9DBD0EE78D270E253376D7FD0
-:10120000ACE97852AFD0BC5F976FD6D577EBF2459B
-:10121000BAFA1E5DBE5653BFEAD051333F1F0434A5
-:10122000F52C75F7D039E37A3DC2CFFD3EFB3F3751
-:10123000FB902EFA7598512E9A56325F24EABBAF76
-:10124000A9A4EF5E717444A15EB22A8CEB6D57ECD9
-:10125000221FC3F31DBDCDAB512ECAEF1D61DC4E65
-:1012600072A5A8232A26E49CDEDEA246A13DB6CDC7
-:10127000CF0ABA8F136920B8B6B19ECAB9FE96AF2D
-:10128000DA92EBD01EDAA4BA804C58D98A5951149C
-:10129000BFD0927AEF6CF83EFF372A85015C09E7F0
-:1012A0007605E6731B317EA094A3907DC67C8F8F5C
-:1012B000817595B6F03882B2755AFC2EB0CD880E85
-:1012C0003850EE68FDFD0BF15C978AE73DEDF70ABB
-:1012D000B68EE8AD42C7171E61A7D5F3C516C9176C
-:1012E000B92C57D863C8CFB154C8EB7C35EBDED9E5
-:1012F00000FF2B275466817C678BCA56E37A772BD5
-:10130000E4EF418700F2DB62E04B9C8F84CF45E441
-:101310009B8C9EF5928B2FFD65E4F7914E0E7C9C85
-:10132000837ED88B073E4C7F15F307FF94FC31BBBF
-:10133000BEFE84D7FF360FE5F095D72D0CE9FBCA2A
-:10134000EB6F26A35DF0CA2B163A2F5F5969E1F6C1
-:10135000E6D723FDE88FBCD29FEBB90DAF7D95D3C7
-:1013600046FB6E23E1EBED8166AE37B5FCE749B491
-:101370005777B6C0AA509F783D82F8A7E69530F21D
-:101380006B5F79EDAB91A1F10FFFD3F548FFF595B8
-:101390004836FB45A45BA1D7D7BC3AFA79F4E756A7
-:1013A000EF3F6C2E85F209BFFEAF1C949F575EE4A1
-:1013B0007AD26553DBB3686BFCD3C0393F3525A2C5
-:1013C0007D0E3AEB0BDC96F6E434E493EBE1C2E1FC
-:1013D0007005E080EB02B894A3DCEF091E97FF656F
-:1013E000E1F1F93C2ECF6E61E8FF0DC245E17E844C
-:1013F0009648BF55A1F5F3EFAF7F9583F2E646EB34
-:10140000B5A59989AFFF7F59EFE0B47F55FC727A9B
-:101410007F71A083C7F5E9E8FE7ABA3EF86F94DFE2
-:101420001BE9A2F9DE24BFDFFD2FBBFEFF1B7C976B
-:10143000FFCBAEF746F8FE8DC077A41DFD8A575E40
-:10144000FBAF64F62DD6BDE65F96AFFFF1BAA5BE41
-:101450003E5E759DC885FA6FB1E6F75C4ED23EBA26
-:10146000D53BF6A7493B093F1F4D607C9F9E60AD71
-:10147000247D7342BFF5A41737B03CF243F8FAA9B4
-:10148000E48FA1E00B80C39B09B97EF2271903FD0D
-:1014900096417E7C5235C55BE9CF8D13C22717A0DC
-:1014A0003E7A7405CC0BFA391A69B0A3AF78623F63
-:1014B0003560C9A1B41DD3E3C9F79C40BD65A24DF9
-:1014C0007B7EBA47771EBACBA12D2F602FF642FF45
-:1014D00059419689F9613E93B07EC8B9F1A7697602
-:1014E00082CB5DACA9D16EFBF6703A23E0743D1C53
-:1014F000FE31DCAE839338271B457D3DDC8CB6473F
-:101500005BB19D91C1B997AF97CECBF2DC7B2378CD
-:1015100032719E368AA1257C8DFDB89F34A45F82EE
-:101520008B84FBB785B7C4931EEE12BE126E7A3C55
-:101530001C446354EF20FCFB19738DC877B70B3D37
-:101540007EA23186E7FBB5AA45C48F7E82FB842F3D
-:101550005C46D44FC6D96228EE9239FAC7E07916B4
-:1015600055CC6F92182B1915335281F5261999CF46
-:1015700002E74DF4A1911DF511A37FA513C7E1F674
-:10158000DAFE466E9706EEF685E7517DB719F2DE74
-:101590009F2D646EA8EF4D622E85D767D1B1148E52
-:1015A000C6548CCB8214DB79A379BFDE3ECCBF92CC
-:1015B000E393F082C726B45F40BF6E432C6F1F9544
-:1015C00047ED7D06DEDE6D8474402AB7AF77ACB29E
-:1015D000D0F9C3BBA67F3ACA8FC2F15ABB71713A28
-:1015E000B7ABC8F4CD74CEEFAAC195807A7149E348
-:1015F000203A0FA9E145D52FA1BD7F6F04D1A37774
-:10160000F5039347E0FCF6C6B9707AE7A7EC1BC96F
-:10161000EBCF79F88FF0DDB3338CBE5F48F7F44938
-:10162000877ECF2B8E792FC187929947CD09308441
-:10163000A779EA25B4FF4DF1EDFB1DFA19A7CC50AF
-:10164000A9FE14C6E32B596304F9A327FB3E3726F2
-:10165000407F93E1B081E5ED61F6E425307FAFB0E6
-:10166000F7A6A673BB8B1ACE3C2FDA705EFDD35360
-:10167000E0FB64D67D3CAF57D61FAF6C46FFD080F1
-:1016800009DC1E2FEB633FD8EFC274EE5FCD117003
-:101690009179802BD52F5B6B694FC573CF5A53203F
-:1016A00003D26732C7E7A54379610A9BB409E1FE1B
-:1016B0005D956DA5F97678C9CE1D99E9403C788095
-:1016C000A429BEB0C9E940BB57FBB8E600FA07DA67
-:1016D0009F74BA1A1C84658AC791E7ACF671818140
-:1016E0006897EFC8E57E8693F6B6483C1F96DAAC5D
-:1016F000149F23E37AE6DB399F0F68685B7F0B9EBC
-:101700003B1F535D5B213FFF31EE77F9C466F52B3C
-:10171000785EDBC8F994ADD3C6F130BB8BEC3DA548
-:101720004DE3CC78BE2CB3B9CDB8CE8A0C4F11AEF8
-:101730008B7D0DF01B89719C8C98C1DBE4A538135F
-:10174000350AF80EF9C4E888C273AF3E0EA846C445
-:10175000FDC8FCA130CF1CECAF24DAB117E9E55489
-:101760005D2AD93D3709BA2BC43846F44F18DB122D
-:10177000713EE1F81DE05F186B4FB7113D87318472
-:1017800043BBC99E8EF4DDBE2ACC807EB6C2959C3A
-:10179000AE81CFAC4668FF889185A3DF2043B42F8C
-:1017A0005E612CDA02F97E56668C8C45BACA25BA7F
-:1017B0006ECBF4E4207D7EF603360AE9A174DD06E3
-:1017C000F2AF48BA60C6D6897130CE67DB9D792802
-:1017D00037251DB5658EAF4D0FA587190AD101A418
-:1017E0008753891EA63D8CFD168E0F0C5C9A85E7EB
-:1017F000D12AE6C6FD3D81B9504FE8641DE47FEC77
-:10180000B4991D68E792F244CA0DC0ABDB1A1FA45D
-:10181000831DB0DF1B4D8CEDACB752FA42BD9D1954
-:1018200041C6EDAE4FA0FCDE7A07A5CDF599F4FDDB
-:10183000C57A17E5F7D78FA2FC817A37E50FD51760
-:1018400050FA4A7D117D977209E0427248CA152903
-:101850008F4A6DE676F4474AB9A4A79B7900DEB1BA
-:1018600079D49EE49E9477B80E435E501E49FCA640
-:101870002845BE0427CAB1B63988FF7CF5E29E83AD
-:10188000782E2FB7B9E89CCEB8DCEB047A45B824A3
-:101890009BD921B4BB362C71B7AF7106E17F7FB9FC
-:1018A000C28C2174F5406D183386EC1B0FD6C568C9
-:1018B000F2C5757F78A30FF45FD1CBB30BF176F24D
-:1018C000879F3EF327F8FEDC0FCFA721BE611EDB0A
-:1018D0009FC071978777CD2316F38D26F2470D9021
-:1018E0007610F8877829619CDF9EFBE1DF89BFDBFA
-:1018F000EB2C0ED4873F423C015CFF2CF054526726
-:1019000021F879579DDE7310F97CB999E45C49A3FD
-:10191000E0C3B500CF10FFEEA94446F608D0A659A3
-:101920001DC0EDD40FCC8108E8FF94C2F95701A582
-:10193000A018E3FED6BEF901F2BF527782FCE71E83
-:10194000AB8DEE35319FE962687F4ADD71AAC7DA57
-:10195000FAC5A0BD84F6B13BD0EFE8363B60DD4868
-:10196000D388B792CC232C11FD264D8A1DFD266508
-:10197000E27BD95A85FC9318773303F4BE77D355AD
-:10198000C26364BA91D2CA7426F4BA26DA9F24BD1F
-:1019900096AD8376C8174DB9E6052172B8447C2F01
-:1019A000CD34502ABFB78B7EFBAECD9D8DFA445F00
-:1019B0002CCFC2346F36C2B7AF6D925109C1FFC789
-:1019C00038FE089C071FBF12910AFFF768668A79E4
-:1019D0007E16E287EF5F729C92CCBCD518C759B2D5
-:1019E0006E1C4A5FD6607225F4827A67BAFAE17A91
-:1019F0001BB3F278E5AA1EF60F693FFB0CFF1C4DE6
-:101A0000EB26BB6EC5DE5FEC7D057AAEF8D842F8FA
-:101A1000AD182AE2A7B2FC23A793A1516BAF9EF8A1
-:101A20008BBF4491FF613F8FAB8494DB53979773D7
-:101A3000FBAB0BF8AA1BFFCFB1BD1F47756BA7DE31
-:101A4000AFDE949DBA46F93A0AF507B99EFCD7BEB7
-:101A50008CA77928D7C8FF53F3DAAAF8EEEECFE8BF
-:101A6000EDD55DF66C61B7D397EBED757D32747E85
-:101A70000123A3FB58D25EC7D4AC68B4EF7F29EE34
-:101A80006BF474AE91F6ED9A4DD0491CF0A7D111CC
-:101A90008DFEAA2B3DE8D30F66F0FDFE92B0875F66
-:101AA000D9ADD239E7CAEE48E2A7C5BB7F761CFDA7
-:101AB000878BB729348D6AD64A700378326BE83E3B
-:101AC00086F16671D7CFBBD39F168DFB48E52F22D9
-:101AD0006B91CE16352BEEED309F4EAB23BA77C807
-:101AE0007C6ECBE0745669691E497016F3CFCD70D9
-:101AF000D077596F51CBCFC87E0CF52E931EF4CB07
-:101B000008F4F523BC7F87F3BCB079980BFD7E8B7E
-:101B10009AF72D263D6277841D8F0CE7459CB0EC2B
-:101B2000E7CE0CCE9F776670BDE582F0075DD8AB3F
-:101B3000923CC379227F9D57B4F1789345BBC9028B
-:101B40006E9F0BFE92F51735B7470D84FA670FFDB0
-:101B500081D259625D8B6CAD39B8FF9EDD1F41FEAD
-:101B6000ACB3FB9F9EF42A8C77A9795C2FE407D94C
-:101B7000FFFC0C13D5BFB4592D4078313F8F7BA9A2
-:101B800046F80E0B9D67DC169F3394EF78DCCF850B
-:101B9000FDBF8A326405F1596DF558F15E63CD7E63
-:101BA0006F11CA8DCF140E4FD3FE713EBC8F54D32C
-:101BB00092CB909E89EF12A9FE5A43483DB3C94586
-:101BC00042D17868AA3B89E02CEE13897879BC1F52
-:101BD00087F267E9542BF927E60D75CCBA1FE5E4C7
-:101BE0005B268E977E8E27507F9BF74E1CC54D2D12
-:101BF000753A66E1FC97BDAB52BCEFBC61420E2466
-:101C0000B48DC0B8C5AAB50A73C33ADB9D5C6FA892
-:101C1000F2ABCC03F9BE400F3E00C5FA8C14214F45
-:101C200003E978AFEFA97283DB0CFBDF4933F3A93B
-:101C300068377A91C73357A5F0B8E1A790EE21AD88
-:101C40008A0DA4C7417F17053EABA605D2314EA22F
-:101C5000EAC5448A93B868E67E4BFC8E7ED2AA3CE5
-:101C6000680FF57A8978586C1F13423F55252E0767
-:101C7000D653635D8E5C1BCED77E99F4D89722191C
-:101C8000EAB18683913CCEE9E7615B2D2178DA9257
-:101C9000C1F5E55E028F6C2E8F877C5CC4633FBE0E
-:101CA0003DD18FE73759FF7193670EC201D781FA93
-:101CB000FB2273533AEAB772BE8BA29A689E17054D
-:101CC0007D2F0A6FE2F1D2E29E2CD6C77CBB8951F0
-:101CD0001C77C72E0BC5939C4F6C3D80E39FDF356F
-:101CE00088E1FADB9DFE0587A81CF447C05BC50BA5
-:101CF0009600AEE7DC2E6E6F3E67E2FAD8B9A9090E
-:101D00000EC45BC1B44DF3C81EB3CDA220DECF29F3
-:101D1000CC9C80E5DB7BBB7CD8BEBE8EE2A42B4096
-:101D20004CE07D1C480BF05ECDB9ED83283EECDC29
-:101D30006F54BC1185DFD7E2770F6B9AF73D84C7EC
-:101D40004E7E7E3AFFC27F0E0ABD5726D38A6DDAD9
-:101D500038384927B2FC4806B70F1C11703E9EC1A7
-:101D6000F7ADEA88E6C753689D1CEE80273AF7C1B5
-:101D7000C61FF9F4708C834853506E3C0574F534DB
-:101D8000DA1576F2F3D5F9DD268A0BAF3818E9A615
-:101D9000B8B335B718280E42E57A788501C047A94F
-:101DA00042FD564CCBA47BBB006F3AC7766C57C53F
-:101DB000388CD970DD3B789C6F21EA8A549E4DE5C2
-:101DC000E744FEDC816CD2EBA07F37DE57AAF8DE59
-:101DD000F7391CA797BFCDC88E6125F95AD5E5C73D
-:101DE00019138DFB5DF59ADBA2F13E1F7B4765A8B9
-:101DF0009FE8E174D5E8EA8372B577A690B3079EB1
-:101E000031A33CA814F7432A5F50B83F19F80CEFF0
-:101E10003B56AEBEED09A2CFDF99581AACE762F38C
-:101E2000CFA234F81072B0ABBED945F52BA13EF667
-:101E300053B9FAAD289ACF0E13C5995CB75FDD6C24
-:101E4000FB17D49B6ADF451FCDDC8E72DDFA59EBA0
-:101E5000BF7D0CFD7FB13BCCE5A3AFCD74AFEC8271
-:101E6000A97901AEFFC29E3092471762B87C380B49
-:101E7000F2D39781F3B8E7271497F5FBE9741F6E47
-:101E8000A15FDBAF1CD79869E27416E78AC6B8BEBB
-:101E9000EA77B87C03BCDC4BEDDF31517BFD3A4E79
-:101EA00067F0765DFCB92782E8E1425F8E970B7B95
-:101EB00033683F6A8FE1740EF34DC6FB7317F66407
-:101EC000E4D2BD34546E801E2AC4F9F6424C73B27B
-:101ED0003DA4BCDD24CE6901A88974836D40EFABBD
-:101EE000A8E37A55A5751DC587605CEDC83C4A031B
-:101EF00096D8EBE363815EE9FC787FA6B053E27885
-:101F0000F1227E9BF49D6633CA6F8FD00BAB76EBCC
-:101F1000E36B79F9AD998A8C0371F492F1BC48872F
-:101F20003E85E24C2A1B972C423AAFACDD703FF263
-:101F3000999C7FA59115E039AC5D51691EED61EC6E
-:101F4000C169B86F848E13AAB7C979E254E3495FB7
-:101F5000A57DECAE4CBEAF61BE09FAAB6A54D6D1DA
-:101F6000384E799EE5EB927002709831AEAF7D9C51
-:101F700028EF61DD729EFA75CBF93C90C9E551BB43
-:101F8000D3F1933188E7DFAA743FF6EAD7C3A2639F
-:101F9000BBD1CB82FBBA3918DF8AF1BE487BD04F68
-:101FA0004E26976B95183F0BF34CDFAC8DEBCEDCD8
-:101FB000A6CD0FDEADCD67EDD7E6735AB479D73134
-:101FC0006D7E1A8EDB9B9FB3F13E2E9EB331C5739F
-:101FD000B6C3C2CFD998C77336A678CEC6EF78CE2F
-:101FE000C63C9EB3318FE76CCC4B78E3791BF3781A
-:101FF000DEC6F2A7059CAA449C24E201E99DBD1C13
-:10200000A6B9EF73E5357E8F03E880F3CD1C33F17D
-:10201000CD535883CE1DDCAED477BAD581F1BE8FB7
-:10202000C47A5665A25F54695D9D887833B651DCE9
-:1020300069CD2B3CEEB42A2FCC86F68DB65567576A
-:102040006338E703B19E47B1FE1553C70E846F7521
-:10205000DD51BABFDEB6C2F1CE1D1C7F646761E5FB
-:10206000B1A43779719F8BED198FFAB86FB64E1BFB
-:10207000E7AD8FFBD6C77BEBE940EA7BCF993A12FD
-:1020800051AE9FDE655D87F33F1D26EE9FCCB6EA1D
-:10209000FCFD424F5BAF6CC5FDFA1799B1DCAF7226
-:1020A00002F4F36EF65999965E1B467A78577E9D38
-:1020B00062A07B7109F1B40F2D13734A563ADAD737
-:1020C000A09C5B64A07DF32AE86538DED5F754D286
-:1020D0001F32361934EB19E40FD7D0D7909DB1BA1F
-:1020E0007B0D7D35F5871E4AD1DD6B18AC8DA39F26
-:1020F000B1E2309EEFA7AF1BA6A95756749B0E8E78
-:1021000062DE427F2D83FDC30DEB7B6AF9A664C4BA
-:10211000EFB2459DED6B503F7D298CEE8595E3FF39
-:1021200003B9580E7DE27DC6F2FDE23E709D761F3A
-:102130002E15FB50B991F9ECB1413A2CB733770C1D
-:10214000B45F34B8352780E78ADFFC61A43D05CF52
-:1021500015E3FAA03C4A36B9290EB66A5F5ACC0A92
-:10216000E8F758AAE7A34CC0CB99A6A33F2EC6FD1B
-:10217000701F3FEF9D5EF7AB288A1313F4966CB285
-:102180008723DEB734F1F838B48FA9B141BAD8D279
-:1021900014173ED0165C6F900EBE263C017EB81D13
-:1021A000A7FC08F93D3A9BC57AC7293ED4A7E5FAB2
-:1021B000968A7D850DE4FD3C24F267C4F942AEF3B6
-:1021C000E2A0C3390EBC7F517F285945796ED8BD36
-:1021D0002311D2D116CF97B89EF22D697F1A03E34F
-:1021E00054FC91AFE7938D13A246A3FEB9C7E42A2E
-:1021F00084FC9AA6E7CD78CEAE30FACD145FB96BE9
-:102200008B19E38BEFDCB985BE2FD8E9A578CA8599
-:10221000AC96CE9F9FC97704043CCAC72B9BED3078
-:10222000EFB983B8FC280FE7FE3BD08FDEC0F73B49
-:10223000AEEE5472318E6746D13EB317BE470D12D3
-:10224000F783747CD2F9F6F4FCDE040F7E5FE38F33
-:102250000C4EF1A9D7F3C5F46B4EE28B19D786D09B
-:10226000B96C6660103FFF66E9CEBF6FABDC5ED72E
-:10227000C2F9A0DC1CE8351DF9E47513E9B9D5B045
-:10228000DF8CCAC37335EC8D90168D5135F45A33FB
-:10229000314243CFB359ACE6DECB7D183412929F66
-:1022A0005198AAA93F6BC6101DFDE705CB498EDCEE
-:1022B000AAB95F57BDDCE75048CF1CAFFDCE789C74
-:1022C0002063776BDA57B369C17A48DFDBB81E5CED
-:1022D000BD3F662BDAFBCA0DFCFC34DBC3BF2F3ECF
-:1022E000C4BFB3D94CC38703525D7FE2FBA289FC14
-:1022F00002D29E3E1BFFEE06FE8C8577DD0FC77B6C
-:10230000F1688FD0DC9F16FE409C37E2A15AD88D31
-:10231000AA33B9DDA8DAD76AC6770700FEC6B8586F
-:10232000AA678DC3F8C82685EC8A982EA778496DD0
-:102330001C16F687718C8B4FA85EE4137D7939BE2D
-:10234000DF83F87D85C7952EDCA48F835C47FEC8AC
-:10235000C5680F0AC1DB53831C425FF1AFEE8BF0FF
-:102360002B5472E95EE4EEC3668CB39B31232617CF
-:10237000F9464F5F52AE033FD3F9BBF3EDA3445F81
-:102380009DE546A2DF1BC161B19BDB51F574B780AF
-:10239000B59AF19EF882FD8A0BCFA3580FE1D117B1
-:1023A000E951078FB8D8EBE120E1D305AFFDFA384A
-:1023B000370EA78587147FA01B38E9E7DD13DCE41F
-:1023C0007A16783C93502EC8752DC4F963FF307F80
-:1023D000EC5FFA21D8283D7FA6927D6A71118F8F1C
-:1023E000D5D3C3B46BDCEE72DF3523A5330AB5FC5D
-:1023F00088ED902F665E8BA7F26F4B2F8B619EFC52
-:10240000FED3CDD1895C8794BB417EE0F7066EF4A4
-:10241000BE8FDEEEB8639088131CC14668E29185DA
-:102420005CD5B7D7C7234B3D40BFBF78230D1437CA
-:10243000D9694B21FD42CA598FD83F3CABBEA47A23
-:102440001EA8C76713AFD96F3CC2FEB7343285DE12
-:1024500063485E11178F78F286D929FEDEBB42A54C
-:10246000B8672FD47384E827AB1B539371BF38F53B
-:1024700048C6B33ED0DB4F7DB757FC2818E7F42A97
-:10248000532FAB2358EFD4AAFC648CD338BDC13290
-:10249000DBDF0DBC5AC5FE50FDC30F683FBB64783F
-:1024A0003B6A36B4AF5AF5521486F957AEE2FB7860
-:1024B00079AAE79D41BD713FDFB2C38EF0B36FC90A
-:1024C00041BBEF49D80EB0BDD41F2A56E5F741FDF8
-:1024D000A2EABF8F3E6BC77BD62B4CF1A87F9E7BB9
-:1024E0000FF64385F633D21B3E0B832EC89F164949
-:1024F0007684CF14E646BFD245C3E1BFAEC1736157
-:102500006E737A00D2EF593C2771DCCA55CF93DE47
-:1025100052F1E88A7455C57ED3A2BBB39BC87487B9
-:10252000D8B7517FC714F5778C9341FD1DF3A8BF31
-:10253000638AFA3B7EAFD9A4D5FF2EA7713925ED6A
-:10254000C9031A3A72D17FE71BCF326B69BFB565F9
-:10255000A2BEBE4C0977A13C5A86BA12E6FF1246CB
-:10256000E758B62D91EFB702CF7556EE37FA4ADC31
-:10257000CFBDBD0374B210FABCE39A9585DE9B1DF6
-:10258000C76234F909D6444DFD7CBB53537E67C204
-:10259000204DF95D8E5C4DFE9ECCD19AFA935DE3A1
-:1025A00034F97B47DDA5A93FD53D55939F5E304764
-:1025B000537F669157533E6BF6224DF91CCF124D57
-:1025C000FEFEF2EF6AEA3F50BB4253FE95014EA475
-:1025D000402F2D78EEB2E0FB29564ABFA3DA8D28B2
-:1025E0003796FD36CD86F81E33C150DB9D7D3F63A7
-:1025F00030D787CA86B85306F7E6EFE0203DF617D6
-:10260000EFDC8C18CCF199C480AAE8BCDB9A88F482
-:10261000ABAFA72F1F1371E4AA0370F893C14367F0
-:102620001A410E8DB9E5C8B054C89F18BC60A611F8
-:10263000E4C698DB8EFC2A05F2AD837FC1CB871EF2
-:10264000B98AE5B38654F2F2E98C548F3FBFD07754
-:10265000A60FE77F47CA3A17B793747BCF5CA608EB
-:1026600007BCAF8D70C03400F48BE911A05F4C8FB4
-:1026700001FD96817C3A0EF48BE909387FE2F77F01
-:1026800087F327A66FC3F913D3DFC1B913D3563825
-:102690007762FAFBFAD994BE57EFA176EFD797533A
-:1026A000FA417D2D7DFFA8BE8ED23FD7FBE8FBD43B
-:1026B000C1D28E11609AFB01E867447FE221D3C545
-:1026C000503FB0F4574AFF64432D6B8B4079D1667D
-:1026D0008CF9D41AF43BF66C0730B24F43F4B1686E
-:1026E000E62E1E4CFA423F3BC96FF1DDE4F0781153
-:1026F000CF7F744E4F1BA6E2BE55FB06BA65FF683E
-:10270000E8FEDDC411823E460D712F20FA10FE75E1
-:10271000E9DFEE8A9B09F1BF1B42E275E85F48DC06
-:102720008DF483CB389FDBADFC9EB1F473CB781E68
-:10273000D95FFE178CE4C3D8B546D25F228D2C80BA
-:10274000FDCBB89DB1D6E65C8C63185B65A37BB509
-:102750007DE0BB398FEAB95548B7FD0DEAE704FDC6
-:10276000EA7DC4FCA19CE69FFF8587ECB063455CD5
-:1027700001B6B7F2721FB61F8BB685E194927C7AD0
-:1027800006EFEDE605FDFC583F82D70F607F03FFA3
-:102790000EE34505F9A67F6C732ECAEBFE8B6D74B4
-:1027A0002F74F3B800BD6745462780CB74797EB29D
-:1027B0008ABCF4E7EDEC4376A40982D7BFEFF06C56
-:1027C00042F81759EC7F89203E4BED8FF6C9A9429C
-:1027D0007FFE07787B06E940C253E245E251E223DF
-:1027E000247E8AF0D0135EF5F8D4E351E22FFF8BFC
-:1027F000205E10AED7E32D8857B4E7FEABE06DB88E
-:1028000091BF5F66A9B2D2BB6837C2E3831D6C5229
-:102810003456717A46207EBCD71CC7315FCAC64D7C
-:1028200042D4CAF2B1583EE2FA72CF171DA6E810A0
-:102830007CDF2EF03DBF87FE643DF91E83ECBFB107
-:1028400087FA6F85C9B80BB72D776430FE71593E92
-:10285000877F815325F84FC85A487A32B3713DD3E8
-:1028600001FFA15C9AF47511BD4FF925DB8D9E5BCC
-:1028700036A997563F2DD0F9ADEF167AE9DD3ABD6E
-:1028800054AF577E3E58F8B39DCCF92DDF9DBCC6A2
-:10289000E5DACDBE3BC9DF2D9D28F82C49D059AAD9
-:1028A000436563908E9887F6C963F86E690EBEEF34
-:1028B000E9A3FC5DCC4FE93D2C40FBEB6410C498D0
-:1028C000BF174428E68F464C29C6BB7113864D18A6
-:1028D00088DF43DE658B1CD29BDE65FB0F7BC8BBAC
-:1028E0006C47263AE87EE5116B2AE95FC887A61097
-:1028F0007BE06F607F1A08FBC751D8BF307D03F6BD
-:10290000AF81B0DE3761FFC2FCDD992B18B69BE4C6
-:10291000D0C6EDC8F6F7D827C0C1A467F8DD93F399
-:10292000723F84EF5B311913D17EFE56CC2D1371AB
-:10293000BD6FC5F431F0D462A634FBE0C0EEF443C1
-:10294000C907C1F126D1787AF84A78EAE128E1FB93
-:102950004FC0F396EEE0396230E3F649EB1FA21266
-:1029600052D07F1725DEA3FC6D8E0AF97338B5446B
-:102970008C57BD8DE639B66E34330E23BF4D16C26B
-:10298000B5CACAE1A5B75BB16D7D0CA1F1BB57CD4E
-:102990009E8221B0EEB39B55BA377EE9C530B2476F
-:1029A0007DE6E7F6B67B14CF649C5F95EA5887EF27
-:1029B00088B2B7F83B67ECEBA3C9D322BF059D6E85
-:1029C000E3F7EDABAC93BAC5A33C4F4D71BA47707A
-:1029D000FAE7EF454ABDA29F85BF4B20DF2FEC49A8
-:1029E000CF1819CEE5603F0B97DB12AFD08EF249BE
-:1029F000D0CF489073493F09A7F3C5CEDEEEF9B8B2
-:102A00003E6947E8EC17E147793B363084DEE52A3A
-:102A100038A1523CF11111DF75E7905A5B0AE0A929
-:102A200029CD5383ED98FAB58A72E66D58671CDAA2
-:102A30001F4E0CB3D1F9F15B9E43BF3344C88B1CCE
-:102A400096A3B9AF26E94EB551FC4EE77BFC3EDEBE
-:102A5000D2DFF0B8CDA5BD558AFFD7C7C58D65E9D2
-:102A60003F417BE3845E2697DF11942FF21D204BBC
-:102A700082813942F4EC3047387384CC27223356B4
-:102A8000938F74F5D5D48F1E95A2298F710FD6948C
-:102A9000C715E469F2BD8B6ED5D4EF337BBC269F9E
-:102AA000E8B95B533FA97C9A368F7C0770EF5F3B98
-:102AB00057D36E405D89A69ED357A129673E776B99
-:102AC000663CCA71FE2F75ED524DF9D351053C7E1F
-:102AD000DCB680EE29A6357D4FD39FC46F521CC74C
-:102AE0002F73F0FDC107FF91DF42E0393F41BB6F1B
-:102AF0004CB08F3B66A7546BD748BA411CD4A17F1A
-:102B0000960EAA99960E7AF1389EFCDF0C73A01EE1
-:102B1000A3C73FFA2342D789FE8850B8A03F22348A
-:102B20008FFE88D0FAE88F082D477F4468F9B013EC
-:102B30005AFC8F68D5E2FF960FC6FF433C8D6ED3DB
-:102B4000D2831E4FB77DA6A58FB19E7082CB04D0D5
-:102B5000C790DE259E66C37FB4CFB3A268B41BDCEA
-:102B6000C1DC742FE07F0B5F9775F8FA92AD1B8183
-:102B7000EF5C5EF17239DED33E7F6580FB0B94BB68
-:102B80002942CEEBED00329ED4379EE3D377328CD0
-:102B9000E4D55786B648DC3FBEA3B6915D3E91753D
-:102BA000BC81EFCF0CE9E56159BDF1CA36703F94A5
-:102BB0003FB5E8BE5CDCE7E6FDDA928C7ACDBC017D
-:102BC000FC3D4196D546EFB4C8F9CC4BE2F147D66F
-:102BD0002C21A75D3C0E29228BDB7F225D768A8328
-:102BE000F6663111E7C992E765231DBE1D96817413
-:102BF000B691DBB9DA4C0E8A6BF1013DA29F12F55A
-:102C00006DD487FB0B7DB4E143AB95D31DD3ECEFC3
-:102C100083FC564D1CEE909D764D3EBB3941537F53
-:102C2000E82187A63C3790A9291F76C2A5C98F68DD
-:102C30001DA5A97FCB076E4D7E745B81A6FE6D9F9F
-:102C40001569F249ACE34984E7F8AC141EDFAF081C
-:102C50003B8083E365DE77E2E93E8D3C47C8B86C94
-:102C60008FA063FD796480D94371DE0D89CC45F76F
-:102C700041ACE23CC8B4E7148F88AB96FA3CF369E8
-:102C8000E3AA653C75D779469C5FE47922249EDAF5
-:102C90008DF397F1D45D7817EF4BEAE9F35E817716
-:102CA000FD3A0698F9FDAF86EF9AE91E8B9C9F7E50
-:102CB0005E9B443CE0766BF7EF0F3D20E8AC2DA522
-:102CC000686616D47B16B62782E775E3B9DA7C000E
-:102CD000DF861F985D2B1D371E6FDE50BE9E627C07
-:102CE00057358BDEE9A47B6B72DC6A31EEF41CA5F0
-:102CF000DBF5CD8BE6F15D2CDA4CF72E7A1E8FC317
-:102D000035C1CC1AE99D24710FE18175CDEB3154A9
-:102D1000B3D8DC64E2EFE3FB4D68272A1C0F7A602E
-:102D20002EDA0DDFDF68037DEDD93A23D97D1EDA77
-:102D30003DE63ED020BBEE950C80731AD24921E2CD
-:102D40001FFA3D97CDE39D1FCBE2F2215FFDBAEB69
-:102D50003E804523E7F9F9AF1BBA237A94EBF8BF1D
-:102D6000BA1F20E9570F2779BE6662FF1A28E625A9
-:102D7000E1D7653F11F093F7331C4B4C455B6D7405
-:102D8000CFA300E3CA24FEBECEE674F96616C737A9
-:102D9000D64379D453BD7C352B1AEDE09DCC116D13
-:102DA000BF813DF8FFE8DE04C1BFA7FB5E3DC989D6
-:102DB000EBE4430FF7BF7AA24FFAF72DEE8185C8F7
-:102DC000091EEF23F0E11F6820BFFA9A482D1FFF6C
-:102DD000358BDB5D9E96FB850FCEDD5A39C1D0AEBB
-:102DE000DFB04A15726241D7EF48E0F7F9AB4CA467
-:102DF0005F3356F438C6197CB2D14471B163DD8CAF
-:102E0000F49892CD8A7F8B82FBE898049CBFD7A769
-:102E1000DD8FEF60AED5E8FF285DABFDBED0C67F8D
-:102E20006F62BEFEDD14715E5F7883F3FAD92CE128
-:102E300007723117E95DC2FF5F2EDAE8F5AE4E3F4B
-:102E4000F79BE1795BE576278A1B93FBBB03FD3794
-:102E500021EF81003CC333711F6F34761BCFD70540
-:102E6000CF1EE2152EDA44BC828DC76774EE0FE3E5
-:102E7000FE4DE95712F52FFAAE5239D6C7DE2EE5D0
-:102E8000F2B80BE94FD2FBAB3A6D06F2B774EE8F96
-:102E900024FF3CFA71A2810ECE1BF6C58F7206E7A5
-:102EA000E76953357E107DEA59F1129D17CB533DEA
-:102EB00031D918876D74595D907FC47684DE8F2A6E
-:102EC00014762FFD7CBBCE5D63F8FB2E9D3EAECF0E
-:102ED0007616F07738402E32E42319873095C129D1
-:102EE00015526F6034CDE7DBFA73A65FCBE57ECC7D
-:102EF0006BB7517BCFDAD1941FD0B87E09DE8399AE
-:102F0000D9B0D0842EECB62797E78743D3B6FEFE20
-:102F100095E188B7714AB776F9BC6C85F8A14D1771
-:102F20005F2FD3ADD99C5F7E9D2DE5B888435AA114
-:102F3000101F2C55988C4B22392EF3579B443E9FE3
-:102F4000E797ADE2F936F1BEFE0E6147C175638ABF
-:102F5000EBC673FF6E6167C175638AEBC6EF28B776
-:102F6000308F720BF328B7308F720B53945BF8BD20
-:102F7000841525E7AADC0F353194EFAE59D9C4107A
-:102F80007E413F54681EFD50A1F5D10F155A8E7E2B
-:102F9000A8D072F44385E6D10F155A1FFD50A179D0
-:102FA00036EAAE601EE59C7BAA263F1DF4FC892113
-:102FB000FC8D7EA8D0FED10FA5E9CFB344D3FE7E11
-:102FC00056A7698F7EA8D0FA0FD6291A3FD583E27B
-:102FD0009DD3D24D71443FF31D4535D980DFFF8825
-:102FE000F8EF874D2988E79645FC5C16EEE2786E8F
-:102FF0002AE07837308EE78E3984E7E5669ECFE7A2
-:10300000F1C97AFA417FCF4413F7F7608AFE1E4C6C
-:10301000D1DF8329FA7B26A6717F0FA6E8EFC1EFE7
-:10302000E8EFC114FD3D98A2BF0753F4F7608AFE94
-:103030001E4CD1DF83EDD0DF8329FA7BF03BFA7B96
-:1030400030457F0F7E3F897E2753705EA8C70FD41F
-:103050009C1F810E35E747BB268F7A7C687DD4E3C1
-:1030600043CB518F0F2D473D3E348F7A7C687DD402
-:10307000E343F3BFCC72109FA13E1FDA0EF5F9D0E7
-:103080007C7693EF0DB49D4DDE7CF918A66D91CA48
-:10309000B30A888CE6ECF7EE433F5D5B98921C0325
-:1030A00092D3B4E2C3FB2682BEE611F17F39ACC3F2
-:1030B00080F8F688F7D43D0146F196D97F4BA4F20B
-:1030C000CB78AF5FC4DB22DE73F733FA5D12E92FF2
-:1030D00096ED5DCCAE622AEB07F3DDD7D38F2FEBF5
-:1030E00091FC0C9907DE00C67895DCE5B63C8CF7C0
-:1030F000DC6150284E62C74A1E27ACA7AB33424F53
-:10310000DA61D87704EF81747815BA0F9C6E642762
-:103110004C7908A7DA3CDC7FDFCE8E11EBAABD1517
-:10312000EF9BC8794BFB26C809BA3F37A6A3754267
-:1031300034F4E3F18DA3DF49293473BD01DBE17978
-:1031400072884F716F0DA1EFF785DCF4F8F8F83F46
-:103150007F6E0A6F17CEDBFDFCB92882E3944685AB
-:10316000E2A5C6EC666EBC9FFB1F429E0ED91D50A9
-:10317000713C6F231F4FF6EBDD9C4CF716BDAC6D19
-:103180006202F9481486725BC20DD6770CD707C766
-:103190008613689FBED97B3FB70F8FC9C7383AD611
-:1031A000C2E81DCBC9C3DFD5AC97D03E92FAA57D4E
-:1031B0002DC3A7D07BC1537C2B56E2B63ED9B7E4D2
-:1031C0008DDE587F1B73391DB415D1BD58399FC191
-:1031D000EE7D06D81659166B358429886F76342E05
-:1031E000847E80F36720BE735D267ABF77AAD16E96
-:1031F000A2F7237A883FB96A93F1273A7D4117678E
-:10320000D2B0FC8364B4272F8D3490FD77E94BFC5A
-:10321000F7003C9B14926B520FF28A38B5AB8D6F5E
-:10322000F49E8570DF67A2FE64FC4975AA3FD980D1
-:1032300071F57DB7E4C4AAA407C4E6A01EE0FBD5DF
-:103240007DA3B0DE2AFE8EE5D5C699D101EA89FBC1
-:103250006BCA04BCCA441C93171FF45683BF8B254A
-:10326000EF77B026AEEF497B8EF7B7C38E237EBDD6
-:10327000CF8877A5D77AE95EB63E8E6851A389E2FA
-:103280008E16E9F4C24AA11756DE402F1C9CA3D328
-:103290000BE5EFA588364CEDF73EC6EDC97B89C539
-:1032A00026CEFFC5FB18D9618B574C30D03BC82FB9
-:1032B00071BA295EC1F59BE297DD74BF50EA8BEFCE
-:1032C000083D66DAB52482FB1F84DE3213E32B014E
-:1032D000BE856D61220E2B91D259D778BCE5341B87
-:1032E00097036DAFF177203A7D16AE4F1D63FC1D3D
-:1032F000331D5D4E35FA0D78E1CE3506E812F293B6
-:10330000510F82FE66A35E148774EECCA7F8BD024F
-:1033100085EEBDE8E9BCD054FB06C687166E672E65
-:103320001F0BA573A05FECCFA7D0FB001E71AE955D
-:10333000F4ABA7F77911C21E65E3F6A62EBB04EA2B
-:10334000A8F44877CE2CD41BE7A16FAF2F27188C99
-:103350003B8BCCE2E5653939B31AF190D3839D42BA
-:10336000FD9E99E0E191EF20F46037407B01CAC9EE
-:10337000071ECA359784C8C9E1AEF18D434704F1F1
-:103380005DD275DF2F8BDE055DFA481AFD1E4E4FAC
-:10339000FA7029C015F9625E74DBC3F80B6B0D3946
-:1033A000CC3D31017F2750AE8F05308E70AEC837CF
-:1033B000EFBDEF4F6B6D0417CAD7E78C998571216C
-:1033C000D5D6B649487635599E02BCC718944F45A4
-:1033D000EE2405E5536E00CF849BE4FD649D3DA281
-:1033E0003987D7D7DB254AB3B8DC96BF8B72EA9111
-:1033F000837B71BF92F33FD5C3EF30ECCCE1F2F7A2
-:103400007FEB1E84FEFEC32FFB7A9ECC81753C6E43
-:10341000E0F7F9FBAA4D4CD887C82F2CE50513EF30
-:103420006004F1EEA677741B1E51ECA1F629CF5A69
-:1034300085DFA3EFC18EC3323B9EDC0EEDE6D59B4C
-:10344000E9F7F89E4BE7F4F31CD00FFD5E8AB9F55F
-:103450000DAB3308C78FEB7E6AA2DFA56181347C98
-:103460007F676E6D980BE5F17057D12F71DE1159A2
-:103470002E92438D18430EF9BB7A15BD88DFABD76A
-:103480001D7E16DF13A86971D2EF95780FE5AEC6E1
-:10349000774E86BB3C07B1DC6BB3D37B1A8B1B63C7
-:1034A00068FF9AD747DC0B651DE46793F07F47D828
-:1034B000AFD6BA38FD5E11E70E14905335F5BAB7A2
-:1034C000E3493BA1DECEA07F5FA227FB82B427A009
-:1034D000FDC01C626794F60953E6A939A837149B0E
-:1034E000B5F71265CA86F27D5F9E03E777ED5B59FB
-:1034F00093FAA07EBC41B1D37B9336C7ACD1902F59
-:103500003B61C2C84E5618EB30E3FB031D805F8C55
-:103510008F2E017E4539532CE2B4CA368D267E2B80
-:10352000F343DACD3B9C32BD7FC3D1FE2F23FD0494
-:10353000DCE4B72CB3BBCDB1217C5FDAA468DE1D1F
-:1035400090F98E1C95F311A8E308BF071E729AF13B
-:103550006D9F62502330FE8F0D7568FCC7508FE25F
-:10356000410A53D871FE0E3CCCDBC9C7CB0BE9BF77
-:10357000A489DF9B9679A84FFACFDF732209AE5E4C
-:103580003BACDB89A99DE60970203875AC87FE1C31
-:10359000340EE1A334E037E179BB18E350203FD784
-:1035A000EE37E138258DFC1D13CF3A3E8E676D8CCA
-:1035B000391BF523A3DDDC1FE1277E6F15E6477A73
-:1035C0006419C005EF63E17D37DC5BF4F0F18AF943
-:1035D0009635C5D03B0AC1EF1B4C888F393DBC8B5B
-:1035E000903594D36D49E338BABF5E6674D33D0716
-:1035F0008F80EF274BC21E45FFC09C8D4F989C903B
-:10360000EF3794D36FD6504E5F852981347AAF68F7
-:1036100049980BE739C7DE44EBEB82EF63000F05F7
-:10362000DFB92922F8025DF8306EAF6CA3169FC196
-:10363000F970F8966DF412BF2D307ACCF6D0796C13
-:103640003A9C86F7AAE6007FE3BB12CCEEA1FB9280
-:103650009F3E362B99D609F344B846BA1C93F0FD29
-:1036600021A0137E0F46AC47DEEB96E34D1CCAEF5C
-:103670009D4E1CCAE567CF7CE926BDA601F08B767E
-:10368000EF9EF8D28C821BC63597F1DF91D0F3A95B
-:10369000E44FC997924F25FF3E6B2A0A24284139EF
-:1036A00003FB6CED8BDDC0A951CC77AEC02BC0F510
-:1036B00058E83DAF6A81D7E2142DBF637FD8EF1C75
-:1036C000C1EFC5E30369F82E93AC2FC72D8EE5ED4E
-:1036D00090EE91DEE688F1B0FE52AAAFBDA752DAB5
-:1036E000252F76AF8A4779B14FE17ED0F547FB7F32
-:1036F00007F5D73D5C7FBD50B57D31EE97CCE84FE7
-:103700000E7DDF7F3EE83928271688FDB92CD0BD15
-:10371000BCB890EEA9181AC2CF653FDB93EEE1F278
-:103720002680F2E6CF7B5EFDE3AD8EE07E2AD753A6
-:10373000B2F65D93D7160A3FBEFE47333BE93E5EC5
-:10374000A9CDECC078E7D2462FC95F96007AA112C6
-:10375000127FA6A30B6FA342F7C84AEB46FAD5FF28
-:1037600045395DBA6E2ABD7B20F126DF6791FBAB40
-:103770009CFF7A31FF2621DFE60AFA9E5B3ECE9C53
-:10378000D88BF46E0CB36473C4F73965DAEF5D78E7
-:10379000EBF25F67AD467EC1FB45743E5967E2F6CA
-:1037A000BEDDDCFE7861E9C1DFDD07F5CE3FBE2579
-:1037B00099A95ABCA19EBA40E8AB0B85FDAF1BBCD2
-:1037C0006D19DA3B985FF81CC75BE9DEDFFE05DFA9
-:1037D000132B4E11F26E3D7F07A0A4791FE171CE2D
-:1037E000DA0D2627D4DB37D44970EA92FFB5B976D3
-:1037F000B42BCF5DBBC58472629F84838E1F8A45C4
-:103800009CB08433EE4B4A887F43D647F988EFDF7C
-:103810003FB4242C0AE379E4381F093A2FAD8D898F
-:10382000C5F14A6BBD3FC6F390DC0FF4EB3C1DC6FF
-:10383000F9A504FA43BE3D3DCE95BC342BA8CFEA92
-:10384000EBBF2BF0F8B489FF4E4D5244F32E8A6B38
-:10385000A80977A1FC1838B0CD8FE3227DE3BCCD59
-:1038600006FEBB3603ABDA3EC77980AA4D713598A8
-:10387000E2FB58A87AC7437EAB81DFDF4A5179FA71
-:103880009590D7501EC072D6AB8D7E5F23246E56A6
-:1038900043BF66B68D7E3FD1DC8BD1FB66925E6501
-:1038A0003F925E253DF7B4BE2B42AEDC687DA79DFE
-:1038B0001C9E66F1BB2937BD3E0BFF1D5DB92E393D
-:1038C0003FD0E1DDF4BEC7F7B3C9DE737A852B19AB
-:1038D000E3267B5EEFC6FCF86ED6AB5FA7E41B1950
-:1038E0000BDFE5CF6AE27E87D30AEC6FD0EEF4926D
-:1038F000308A6F93EBD2DBC3FF1FB640B5F6008072
-:10390000000000001F8B080000000000000BCD56D7
-:103910007D6C5355143FF7BE7EAFDDDEBAB1751B2B
-:10392000DBBA8D8F46BAF1CA80F891681D8CF0C75A
-:10393000A2DD14DD0C6C25B031C68A9360A8C6B830
-:10394000B2229211E24C3618044C876C7F18205D2D
-:10395000208AB19A8689468311E11F1292A60B38FC
-:10396000D16856310A44649E73DF2B9D08897FFA23
-:1039700092E6F4DE7B3E7FE7E3DE0F7A658085002A
-:10398000C77B1D00468093BD4E41A3BD2EB19FA7AE
-:10399000D801E6007E495B930D60AD05DA7C565C8C
-:1039A000C6F1970F9008568DF4B3CC7E831DDA9A3A
-:1039B0009026E4A4CDEEC67DBBBA7FADC7DC0F393F
-:1039C000002D90DCE7588AB2C12A1845538981AB93
-:1039D000368E7C579F463E77466EBB3EB51E88CFDF
-:1039E00066708E5600646DFFAEBE10EDB50F567852
-:1039F00018CAAD0BD6268278BE6E57A102B86EB734
-:103A00003A773BE83C54A1F4E13A6BD033358CE78C
-:103A1000EDBB1629C4BF9D812F4A7E0F1C002800D4
-:103A2000E8807B9FD7B41C6013FD43BE4D56C32472
-:103A3000ABC1F3E0C43C19E53B14B387A1FD4DC312
-:103A40002C6EC4FD060E7BD81280F2B06F5511DAD1
-:103A50004B1D64CA51923D5CEF4D9A5485339500DD
-:103A60005D0B7D35CA325CDC99999941FD8F20460A
-:103A700020515C512FC501434C1E05F2DB67207CB1
-:103A80004E2C760A9C13839336A75BC5BB11F106B7
-:103A900047010794DF6652FD2B37A426DF46BF524D
-:103AA00036AE1CC575BDE4FED649717E2581D1496F
-:103AB000721ABFACF1BFF9A8C98FFAB6D92A0B01A7
-:103AC000E9C66174A216CF9A4D9C70E8D47C6E1F33
-:103AD00079AE00D08F763C77E2F921DA7C0C60F782
-:103AE000E08A8224C9BD5BBF3F540D50A6E1784DEA
-:103AF000976CA4FC5C1F29B4EFC4D83606C20B0037
-:103B0000CF378EBC5D46F4FA88B939827C2BE5C686
-:103B100095B9186FC7E15C8F84FECCD0F714E64DE1
-:103B20004121C4A72BB0A21010AFEEBB13EFC955B3
-:103B3000681FB126DC7F8F664542C8D2DD7BA64C6C
-:103B4000E2E88AD1DF4C786EE1B1171E433D3FB108
-:103B5000C85891E07716CAD68CDEFBE9542FC28094
-:103B6000F51C78F3B2D0F30B3FFF4C0BCA77074E2E
-:103B700065939E2D439796CBB8DF59E5DFA8CC21FE
-:103B8000BD2363324204C323353E8CA35D01E1674C
-:103B900083DDF7420BE1FE9524707F98BDCE334C58
-:103BA000E07B2FCE488E8170F7C7C1201395C140AE
-:103BB000F57D5D8260146943A5DA2FE9FD20E1827D
-:103BC0007E5CCF1928A3BAD83C76A0CC89F4479B59
-:103BD000BA5E3BF6E2D7908DFCC78C06CA975F07AA
-:103BE0000605E5368498374275D389FD5A94B1DFCE
-:103BF000A764097D9B87D1A9BCCC3E4044C4F5A3F2
-:103C00000E56931FE5E194E715A45774F176CAEBBD
-:103C1000951EB312AAA03C3905DF95016915ED8701
-:103C2000B091E6335A9FB2CD43FBAD39D043F2B6E3
-:103C3000A5D138C73C074EE72E91D49212F5B55561
-:103C40005617F5927555099E6F1B6732D5E9B68FE9
-:103C5000CFAD02750DC01E8E67D7AD27C039CBEF33
-:103C6000AED3E306EA8FEEE3182FDAEF8E8E7F51A4
-:103C70008C7AB69E595FABDA1D00AAFF80D6CF5B67
-:103C80004FABB8044E4F1A36B8337AD6BBECBB4BA9
-:103C900030B7A34AEB8B43C8BA9EF2F63840EC64C7
-:103CA00063F3CE79486B641137E852653EECC37E0E
-:103CB000D74503F5516097A6CF757177A588B731C1
-:103CC0000F66D5C398A217726979C443C8C5039615
-:103CD0003DB01887CD56AB8E683860CD267AB88750
-:103CE000BB7488AB97591409F10E9AB26B684EDE1B
-:103CF00034AB346651E90EEE1BEF40176FF20B66E2
-:103D0000C0BADF210D30A24FB97B18220D8BF2FD16
-:103D100031AA5F0744190820E28CFC9EFEF4875A02
-:103D2000B2FF6479F2374097F43BDB9A57627D7CAF
-:103D3000AE68F1B993B554E773CEAA73FA881EF64C
-:103D4000989750DC3E68AA262DF89FF27E9B476824
-:103D50000EC758FC7DD29F8EF796D6C73EA3750F2F
-:103D6000433F1B9CFE6FC88F6799BEDAC32907D2F9
-:103D70007CD23FAD57CF71FE7A4D581775DAF02DD2
-:103D8000E510022C5943B1C34A75CDBC5E08A2FDB3
-:103D90003EF7D90D541F7B532630A2DDB086475D18
-:103DA000CA32C990AFB47835079CC7CC994F770C0D
-:103DB0009C75F39011FDDC0BA608F18309E7B12B8C
-:103DC000338F0DDCEC15FCB12F6FD37C2F917E9DD2
-:103DD000C841FE921D4C09234FEB8DA923DF225DC4
-:103DE0000B110FE1DA95EF9FA2381237564FFA31D7
-:103DF000BF7BE5A84971ABFA66FB1F7BED76B69DEC
-:103E000067FC9A4E4D9DF868295193B877EA629203
-:103E1000B837EEF767DAE1D4911DE48B73E2B7F2BD
-:103E20000863C43F7199FCAB3359E35236C9E97F4B
-:103E30009E7DAFC085D2DCA945E22A8199129CF60D
-:103E400061356F4F6A7D98CE8B85C05F4654CD4FEC
-:103E50001A3FE1FCACFBE433EBD83AAA9F74BFBE37
-:103E6000ACEDDFB8559943F3E546AC2A07DC0FEF1C
-:103E7000CF4B385FE99D70B8C26BF72CCBDCA76BDA
-:103E8000D2B7AB76DF4A9ADE351A4E6BAC5CC5E52D
-:103E9000F9FB70D1EA245D0769BFD3794EE70F5E65
-:103EA000BF702EA742E4ADFA1D10F99A4BF613B776
-:103EB000CFBF856D05C59277D25FF17FCC57DCBC53
-:103EC00090DE0D435CBC1B4A09F825827A39C6078F
-:103ED0002E10F3A055B228FD0F98077E9A078B6924
-:103EE0001E0C883EBFC953E738A379D023D60E48AD
-:103EF000EDD4E13AC19336F23769C6AA47EAF754DE
-:103F00008A7BA0843ABA4ACD13F5F591D76C47E97C
-:103F1000FD1666DE8326940FEBB57EDF6C8D8CE29A
-:103F2000FE748487F4686F303772B003F707D7CC1C
-:103F3000554288D334687C9D1631179EE05CAC53A3
-:103F40002D0591A315C48F7D8D710EB63C22EEF127
-:103F50000FEF4AE2BD989A0FEAB907160CD379A37E
-:103F60004BE8FB243D67F6D984BEC1466F91459C62
-:103F70001770928FE4F95FA2FC164B2A1F3E0404CF
-:103F8000DFA143DE22CAC7A12683E0DBCF7C2DED73
-:103F9000A4A7DAAAD0FB32D9623939A6A623CE96D5
-:103FA000D27B558D375DBFC30B64814B7968F2209E
-:103FB000BD434275E0EAA1F72BD5E1E24C7E9817AC
-:103FC0007361CFE4295D8F213DE62B5FCD571FFB49
-:103FD00077BEF2B57CB120D66D36E52D2AF0BFC98B
-:103FE000D53CEC9020998531495C711891FE91EF98
-:103FF0007F558DF342119DB71A93CB06E85DCCA196
-:1040000033FA803E0C519F8BF739DEA258E76D5A88
-:104010009DB7A5EBF18DFBEA313937772A4BAB47DA
-:1040200094FFDEE2EB237BBFB04BCB69F3FC5F5226
-:10403000F383ECECD5E6C89F467FBFE8F36385FFCA
-:1040400078679EF7FC504AF70CDC99984BF7CE99AD
-:104050003CDF3EE233CF4B19FC8467514A4FF124D9
-:104060005A7E2AA5F74C5BF04BD137FFD5CFB41F52
-:104070007F03DC4DE081B00C000000000000000078
-:1040800000000018000000000000000000000040D8
-:1040900000000000000000000000002800000000F8
-:1040A0000000000000000010000000000000000000
-:1040B00000000020000000000000000000000010D0
-:1040C00000000000000000000000000800000000E8
-:1040D00000000000000000000000000000000000E0
-:1040E00000000000000000000000000000000000D0
-:1040F00000000000000000000000000000000000C0
-:1041000000000000000000000000000000000000AF
-:10411000000000000000000000000000000000009F
-:10412000000000000000000000000000000000008F
-:10413000000000000000000000000000000000007F
-:10414000000000000000000000000000000000006F
-:10415000000000000000000000000000000000005F
-:10416000000000000000000000000000000000004F
-:10417000000000000000000000000000000000003F
-:10418000000000000000000000000000000000002F
-:10419000000000000000000000000000000000001F
-:1041A000000000000000000000000000000000000F
-:1041B00000000000000000000000000000000000FF
-:1041C00000000000000000000000000000000000EF
-:1041D00000000000000000000000000000000000DF
-:1041E0000000000000000000000033280010000064
-:1041F0000000000800003330001000000000000242
-:1042000000003328001000000000001000003A7881
-:104210000000000000000008800000000000000016
-:10422000000000008000000000000000000000000E
-:1042300080000000000000000000000000003120AD
-:1042400000000000000000080000336000010004CE
-:1042500000000001000033680000000000000002C0
-:1042600000003370000000000000000800003374FC
-:10427000000000000000000200003A700000000092
-:104280000000000800003A4000080000000000089C
-:1042900000003D88004000000000004000003A504F
-:1042A000000800000000000800003A60000800005C
-:1042B0000000000800003A8800C8000000000098D4
-:1042C00000003C18009800000000002800003C5846
-:1042D00000980000000000280000337803600030E0
-:1042E0000000036000003EB0000800000000000174
-:1042F00000003EB10008000000000001000020089E
-:10430000001000000000001000002000000000006D
-:104310000000000880000000000000000000000015
-:10432000800000000000000000000000000000000D
-:10433000000000000000000000000000000000007D
-:10434000000000000000000000000000000000006D
-:10435000800000000000000000000000800000005D
-:1043600000000000000000008000000000000000CD
-:1043700000000000800000000000000000000000BD
-:10438000800000000000000000000000800000002D
-:10439000000000000000000080000000000000009D
-:1043A000000000008000000000000000000000008D
-:1043B00080000000000000000000000080000000FD
-:1043C000000000000000000080000000000000006D
-:1043D000000000008000000000000000000000005D
-:1043E000800000000000000000000000000000004D
-:1043F00000000000000000000000000000000000BD
-:1044000000000000000000000000000000000000AC
-:10441000000000000000000000000000000000009C
-:10442000000000000000000080000000000000000C
-:1044300000000000800000000000000000000000FC
-:1044400080000000000000000000000000000000EC
-:1044500000000000000000008000000000000000DC
-:1044600000000000800000000000000000000000CC
-:1044700080000000000000000000000000000000BC
-:10448000000000000000000000000000000000002C
-:10449000000000000000000000000000000000001C
-:1044A000000000000000000000000000000000000C
-:1044B00000000000000000000000000000000000FC
-:1044C00000000000000012C8008000000000008012
-:1044D000000000010000000000000000000040009B
-:1044E0000490000000000490000019C800000000C3
-:1044F0000000000800004948000800000000000813
-:1045000000004928000800000000000800004938A9
-:104510000008000000000008000020080010000053
-:104520000000001000002000000000000000000853
-:104530000000401004900040000000400000499836
-:104540000008000000000001000049990008000078
-:1045500000000001800000000000000000000000DA
-:10456000800000000000000000000000800000004B
-:1045700000000000000000008000000000000000BB
-:1045800000000000800000000000000000000000AB
-:10459000800000000000000000000000800000001B
-:1045A000000000000000000080000000000000008B
-:1045B000000000008000000000000000000000007B
-:1045C00080000000000000000000000080000000EB
-:1045D000000000000000000080000000000000005B
-:1045E000000000008000000000000000000000004B
-:1045F00000000000000000000000000000000000BB
-:1046000000000000000000000000000000000000AA
-:10461000000000000000000000000000000000009A
-:10462000000000000000000000000000800000000A
-:1046300000000000000000008000000000000000FA
-:10464000000000000000000000000000000000006A
-:10465000800000000000000000000000800000005A
-:1046600000000000000000008000000000000000CA
-:1046700000000000800000000000000000000000BA
-:104680000000400000180000000000180000430077
-:104690000040000000000040000043000040000215
-:1046A0000000000100004301004000020000000083
-:1046B00000003000004000000000004080000000CA
-:1046C0000000000000000000000030000008004072
-:1046D0000000000400003004000800400000000456
-:1046E00000004B00002800000000002800004B5094
-:1046F00000100000000000100000380000800000E2
-:104700000000008000003800000800800000000267
-:1047100000003900002000000000002000002008F8
-:104720000010000000000010000020000000000049
-:104730000000000800005108000800000000000808
-:104740000000512000080000000000080000513067
-:104750000008000000000008000051C00008000030
-:1047600000000001000051C100080000000000012D
-:10477000000039400010000400000004000051D087
-:104780000030001800000010000051D80030001860
-:104790000000000280000000000000000000000097
-:1047A0008000000000000000000000008000000009
-:1047B0000000000000000000800000000000000079
-:1047C0000000000080000000000000000000000069
-:1047D00080000000000000000000000080000000D9
-:1047E0000000000000000000800000000000000049
-:1047F0000000000080000000000000000000000039
-:1048000000000000000000000000000000000000A8
-:104810000000000000000000000000000000000098
-:104820000000000000000000000000000000000088
-:104830008000000000000000000000008000000078
-:104840000000000000000000000000000000000068
-:1048500000000000000023E800800000000000804D
-:10486000000000010000000000000000000020081F
-:1048700000100000000000100000200000000000F8
-:104880000000000800002DA0000800000000000843
-:1048900000002DB80008000000000008000024E817
-:1048A00002D00028000002D000002E5800080000AE
-:1048B0000000000100002E59000800000000000167
-:1048C00000002D900008000000000008800000009B
-:1048D0000000000000000000800000000000000058
-:1048E0000000000080000000000000000000000048
-:1048F00080000000000000000000000080000000B8
-:104900000000000000000000800000000000000027
-:104910000000000080000000000000000000000017
-:104920000000000000000000000000000000000087
-:104930000000000000000000000000000000000077
-:104940000000000000000000000000000000000067
-:104950008000000000000000000000008000000057
-:104960000000000000000000000000000000000047
-:1049700000000000800000000000000000000000B7
-:104980008000000000000000000000008000000027
-:104990000000000000000000800000000000000097
-:1049A000000000000000250000400000000000089A
-:1049B000000025080040000000000028000009C099
-:1049C000012000100000000880000000000000002E
-:1049D0000000000080000000000000000000000057
-:1049E0000000402002D00028000000080000300035
-:1049F00000000000000010000000509900000000BE
-:104A000000000001000050B00000000000000002A3
-:104A1000000045A000900008000000088000000091
-:104A200000000000000000000000296000080000F5
-:104A300000000001000029610008000000000001E2
-:104A4000000029700008000400000002000029781E
-:104A5000000800040000000400002FB0000800005F
-:104A60000000000400002FB4000800000000000453
-:104A700000002FC0000000000000000800002FC848
-:104A800000000000000000080000300000000000EE
-:104A90000000001000005040000100010000000173
-:104AA0000000500000000000000000200000080886
-:104AB00000100000000000040000080C00100000BE
-:104AC00000000001000008B7000000000000000125
-:104AD000000008B600000000000000010000100007
-:104AE000003000180000000400001004003000181E
-:104AF0000000000400001008003000180000000250
-:104B00000000100A00300018000000020000100C25
-:104B100000300018000000010000100D00300018E7
-:104B2000000000010000100E00300018000000011D
-:104B300000001010003000180000000400001014E5
-:104B40000030001800000004000030000100008068
-:104B50000008000400003004010000800008000488
-:104B60000000000A000000000000000000003068A3
-:104B70000100008000000001000030690100008099
-:104B8000000000010000306C010000800000000205
-:104B90000000306E01000080000000020000307054
-:104BA000010000800000000400003074010000805B
-:104BB00000000004000030660100008000000002D8
-:104BC000000030640100008000000001000030603F
-:104BD000010000800000000200003062010000803F
-:104BE00000000002000030500100008000000004BE
-:104BF0000000305401000080000000040000305824
-:104C000001000080000000040000305C0100008012
-:104C1000000000040000307C010000800000000162
-:104C20000000307D010000800000000100001C1821
-:104C3000001000000000000400001C300010000004
-:104C40000000000400001C380010000000000004F8
-:104C50008000000000000000000000008000000054
-:104C600000000000000000008000000000000000C4
-:104C700000000000800000000000000000000000B4
-:104C800000004C10000800000000000200004C1260
-:104C9000000800000000000200004C1400080000A2
-:104CA0000000000400004C20000800000000000884
-:104CB00000004C30004000080000000800004C00DC
-:104CC000000800000000000200004C020008000084
-:104CD0000000000100004C04000800000000000279
-:104CE00000004CD0000800000000000800004CE06C
-:104CF000000800000000000400004CE40008000070
-:104D00000000000100004CF000080000000000025C
-:104D100000004CF4000800000000000200004D00FC
-:104D20000008000000000004000050000010000017
-:104D30000000000400005004001000000000000407
-:104D400000005008001000000000000400001400E3
-:104D5000000800000000000200001402000800002B
-:104D60000000000100001404000800000000000220
-:104D700000001410000800000000000200001414DD
-:104D800000080000000000020000141600080000E7
-:104D900000000002000019B8000800000000000830
-:104DA000000014200008000000000002000014248D
-:104DB0000008000000000002000019C80008000000
-:104DC0000000000800002C10000800000000000196
-:104DD00000002C11000800000000000100002C124F
-:104DE000000800000000000100002C130008000073
-:104DF0000000000100002C0000080000000000027C
-:104E000000002C02000800000000000100002C043B
-:104E1000000800000000000200002C300008000024
-:104E20000000000200002C32000800000000000218
-:104E300000002C34000800000000000200002C20BC
-:104E4000000800000000000100002C210008000004
-:104E50000000000100002C220008000000000001FA
-:104E600000002C23000800000000000100002C249A
-:104E7000000800000000000100002C2500080000D0
-:104E80000000000100002C260008000000000001C6
-:104E900000001400000800000000000200001402DE
-:104EA00000080000000000010000140400080000D9
-:104EB000000000020000141200C0001800000002F0
-:104EC0000000141000C00018000000020000141CB4
-:104ED00000C00018000000080000141400C00018F2
-:104EE000000000080000142700C0001800000001A6
-:104EF0000000142400C00018000000020000142666
-:104F000000C000180000000100001590000800001B
-:104F100000000008000015A00008000000000008C4
-:104F2000000015B00008000000000008800000002C
-:104F300000000000000000008000000000000000F1
-:104F400000000000800000000000000000000000E1
-:104F50008000000000000000000000008000000051
-:104F600000000000000000008000000000000000C1
-:104F700000000000800000000000000000000000B1
-:104F80008000000000000000000000008000000021
-:104F90000000000000000000800000000000000091
-:104FA0000000000080000000000000000000000081
-:104FB00080000000000000000000000080000000F1
-:104FC0000000000000000000800000000000000061
-:104FD0000000000080000000000000000000000051
-:104FE00080000000000000000000000080000000C1
-:104FF0000000000000000000800000000000000031
-:105000000000000080000000000000000000000020
-:105010008000000000000000000000008000000090
-:105020000000000000000000800000000000000000
-:1050300000000000800000000000000000000000F0
-:105040008000000000000000000000008000000060
-:1050500000000000000000008000000000000000D0
-:105060000000000000000000000000000000000040
-:1050700080000000000000000000000000000000B0
-:08508000060209000000000017
-:00000001FF
diff --git a/firmware/bnx2x/bnx2x-e1h-6.2.9.0.fw.ihex b/firmware/bnx2x/bnx2x-e1h-6.2.9.0.fw.ihex
deleted file mode 100644
index ba1ce53df1d8..000000000000
--- a/firmware/bnx2x/bnx2x-e1h-6.2.9.0.fw.ihex
+++ /dev/null
@@ -1,13192 +0,0 @@
-:1000000000004F48000000680000070C00004FB8D7
-:1000100000001ED4000056C800000094000075A027
-:1000200000009F4C00007638000000CC00011588CD
-:100030000000DC5800011658000000940001F2B8DE
-:100040000000400C0001F350000000A400023360E7
-:100050000000F4240002340800000FFC00032830E4
-:100060000000000400033830020400480000000FC4
-:1000700002040054000000450204005C0000000679
-:100080000204007000000004020400780000000078
-:100090000204007C121700000204008022170000F6
-:1000A00002040084321700000604008800000005E6
-:1000B0000204009C12150000020400A0221500009A
-:1000C000020400A432150000060400A80000000489
-:1000D000020400B802100000020400BC001000007E
-:1000E000020400C010100000020400C42010000030
-:1000F000020400C830100000020400CC40100000D0
-:10010000060400D000000003020400DC0010000020
-:10011000020400E012140000020400E422140000B3
-:10012000020400E832140000020400EC4214000053
-:10013000060400F000000003010401240000000098
-:1001400001040128000000000104012C000000004F
-:100150000104013000000000020401D00000890603
-:1001600002040004000000FF02040008000000FF79
-:100170000204000C000000FF02040010000000FF59
-:10018000020400140000007F02040018000000FFB9
-:100190000204001C000000FF02040020000000FF19
-:1001A000020400240000003E0204002800000000B9
-:1001B0000204002C0000003F020400300000003F59
-:1001C000020400340000003F020400380000003F39
-:1001D0000204003C0000003F020400400000003F19
-:1001E000020400440000003F020404CC00000001AF
-:1001F00002042008000002110204200C000002008A
-:10020000020420100000020402042014000002195D
-:100210000204201C0000FFFF020420200000FFFF5A
-:10022000020420240000FFFF020420280000FFFF3A
-:1002300002042038000000200604203C0000001FBB
-:10024000020420B800000001060420BC0000005F8A
-:100250000204223807FFFFFF0204223C0000003F97
-:100260000204224007FFFFFF020422440000000FA7
-:1002700001042248000000000104224C000000009C
-:10028000010422500000000001042254000000007C
-:1002900001042258000000000104225C000000005C
-:1002A000010422600000000001042264000000003C
-:1002B00001042268000000000104226C000000001C
-:1002C00001042270000000000104227400000000FC
-:1002D00001042278000000000104227C00000000DC
-:1002E0000C042000000003E80A04200000000001C4
-:1002F0000B0420000000000A0605400000000D006D
-:100300000205004400000020020500480000003201
-:10031000020500900215002002050094021500203D
-:1003200002050098000000300205009C0810000043
-:10033000020500A000000033020500A40000003008
-:10034000020500A800000031020500AC0000000218
-:10035000020500B000000005020500B40000000620
-:10036000020500B800000002020500BC0000000207
-:10037000020500C000000000020500C400000005E6
-:10038000020500C800000002020500CC00000002C7
-:10039000020500D000000002020500D400000001A8
-:1003A00002050114000000010205011C000000010B
-:1003B0000205012000000002020502040000000105
-:1003C0000205020C0000004002050210000000407F
-:1003D0000205021C0000002002050220000000139C
-:1003E0000205022400000020060502400000000A69
-:1003F00004050280002000000205005000000007F4
-:10040000020500540000000702050058000000002B
-:100410000205005C00000008020500600000000109
-:100420000605006400000003020500D80000000675
-:1004300002050004000000010205000800000001A0
-:100440000205000C00000001020500100000000180
-:100450000205001400000001020500180000000160
-:100460000205001C00000001020500200000000140
-:100470000205002400000001020500280000000120
-:100480000205002C00000001020500300000000100
-:1004900002050034000000010205003800000001E0
-:1004A0000205003C000000010205004000000001C0
-:1004B000020500E00000000D020500E80000000059
-:1004C000020500F000000000020500F80000000036
-:1004D000020500E40000002D020500EC00000020F1
-:1004E000020500F400000020020500FC00000020CE
-:1004F000020500E00000001D020500E800000010F9
-:10050000020500F000000010020500F800000010D5
-:10051000020500E40000003D020500EC0000003090
-:10052000020500F400000030020500FC000000306D
-:10053000020500E00000004D020500E80000004058
-:10054000020500F000000040020500F80000004035
-:10055000020500E40000006D020500EC00000060F0
-:10056000020500F400000060020500FC00000060CD
-:10057000020500E00000005D020500E800000050F8
-:10058000020500F000000050020500F800000050D5
-:10059000020500E40000007D020500EC0000007090
-:1005A000020500F400000070020500FC000000706D
-:1005B0000406100002000020020600DC000000011A
-:1005C000010600D80000000004060200000302201B
-:1005D000020600DC00000000010600B80000000078
-:1005E000010600C8000000000206016C00000000C7
-:1005F000010600BC00000000010600CC0000000065
-:1006000002060170000000000718040000910000BD
-:10061000081807D800050223071C00002BF700006C
-:10062000071C80002DD10AFE071D00002F461673FF
-:10063000071D800016342245081DB13049DA022515
-:100640000118000000000000011800040000000074
-:1006500001180008000000000118000C0000000054
-:100660000118001000000000011800140000000034
-:1006700002180020000000010218002400000002FF
-:1006800002180028000000030218002C00000000DF
-:1006900002180030000000040218003400000001BD
-:1006A00002180038000000000218003C00000001A1
-:1006B000021800400000000402180044000000007E
-:1006C00002180048000000010218004C000000035E
-:1006D0000218005000000000021800540000000141
-:1006E00002180058000000040218005C000000001E
-:1006F00002180060000000010218006400000003FE
-:1007000002180068000000000218006C00000001E0
-:1007100002180070000000040218007400000000BD
-:1007200002180078000000040218007C000000039A
-:100730000618008000000002021800A400003FFF1D
-:10074000021800A8000003FF0218022400000000A5
-:1007500002180234000000000218024C00000000E1
-:10076000021802E4000000FF061810000000040058
-:10077000021B8BC000000001021B8000000000343F
-:10078000021B804000000018021B80800000000C4B
-:10079000021B80C0000000200C1B83000007A1206A
-:1007A0000A1B8300000001380B1B83000000138824
-:1007B0000A1B8340000000000C1B8340000001F472
-:1007C0000B1B834000000005021B83800007A12053
-:1007D000021B83C0000001F4021B14800000000112
-:1007E0000A1B148000000000061A1000000003B36A
-:1007F000041A1ECC00010227061A1ED000000008B1
-:10080000061A2008000000C8061A20000000000296
-:10081000041AAF4000100228061A3718000000041E
-:10082000061A371000000002061A500000000002ED
-:10083000061A500800000004061A501800000004B0
-:10084000061A502800000004061A50380000000460
-:10085000061A504800000004061A50580000000410
-:10086000061A506800000004061A507800000002C2
-:10087000041A52C000020238061A40500000000656
-:10088000041A40680002023A041A40400004023C84
-:10089000041A800000010240061A800400000003D0
-:1008A000041A801000010241061A8014000000039F
-:1008B000041A802000010242061A8024000000036E
-:1008C000041A803000010243061A8034000000033D
-:1008D000041A804000010244061A8044000000030C
-:1008E000041A805000010245061A805400000003DB
-:1008F000041A806000010246061A806400000003AA
-:10090000041A807000010247061A80740000000378
-:10091000041A808000010248061A80840000000347
-:10092000041A809000010249061A80940000000316
-:10093000041A80A00001024A061A80A400000003E5
-:10094000041A80B00001024B061A80B400000003B4
-:10095000041A80C00001024C061A80C40000000383
-:10096000041A80D00001024D061A80D40000000352
-:10097000041A80E00001024E061A80E40000000321
-:10098000041A80F00001024F061A80F400000003F0
-:10099000041A810000010250061A810400000003BD
-:1009A000041A811000010251061A8114000000038C
-:1009B000041A812000010252061A8124000000035B
-:1009C000041A813000010253061A8134000000032A
-:1009D000041A814000010254061A814400000003F9
-:1009E000041A815000010255061A815400000003C8
-:1009F000041A816000010256061A81640000000397
-:100A0000041A817000010257061A81740000000365
-:100A1000041A818000010258061A81840000000334
-:100A2000041A819000010259061A81940000000303
-:100A3000041A81A00001025A061A81A400000003D2
-:100A4000041A81B00001025B061A81B400000003A1
-:100A5000041A81C00001025C061A81C40000000370
-:100A6000041A81D00001025D061A81D4000000033F
-:100A7000041A81E00001025E061A81E4000000030E
-:100A8000041A81F00001025F061A81F400000003DD
-:100A9000041A820000010260061A820400000003AA
-:100AA000041A821000010261061A82140000000379
-:100AB000041A822000010262061A82240000000348
-:100AC000041A823000010263061A82340000000317
-:100AD000041A824000010264061A824400000003E6
-:100AE000041A825000010265061A825400000003B5
-:100AF000041A826000010266061A82640000000384
-:100B0000041A827000010267061A82740000000352
-:100B1000041A828000010268061A82840000000321
-:100B2000041A829000010269061A829400000003F0
-:100B3000041A82A00001026A061A82A400000003BF
-:100B4000041A82B00001026B061A82B4000000038E
-:100B5000041A82C00001026C061A82C4000000035D
-:100B6000041A82D00001026D061A82D4000000032C
-:100B7000041A82E00001026E061A82E400000003FB
-:100B8000041A82F00001026F061A82F400000003CA
-:100B9000041A830000010270061A83040000000397
-:100BA000041A831000010271061A83140000000366
-:100BB000041A832000010272061A83240000000335
-:100BC000041A833000010273061A83340000000304
-:100BD000041A834000010274061A834400000003D3
-:100BE000041A835000010275061A835400000003A2
-:100BF000041A836000010276061A83640000000371
-:100C0000041A837000010277061A8374000000033F
-:100C1000041A838000010278061A8384000000030E
-:100C2000041A839000010279061A839400000003DD
-:100C3000041A83A00001027A061A83A400000003AC
-:100C4000041A83B00001027B061A83B4000000037B
-:100C5000041A83C00001027C061A83C4000000034A
-:100C6000041A83D00001027D061A83D40000000319
-:100C7000041A83E00001027E061A83E400000003E8
-:100C8000041A83F00001027F061A83F400000003B7
-:100C9000041A840000010280061A84040000000384
-:100CA000041A841000010281061A84140000000353
-:100CB000041A842000010282061A84240000000322
-:100CC000041A843000010283061A843400000003F1
-:100CD000041A844000010284061A844400000003C0
-:100CE000041A845000010285061A8454000000038F
-:100CF000041A846000010286061A8464000000035E
-:100D0000041A847000010287061A8474000000032C
-:100D1000041A848000010288061A848400000003FB
-:100D2000041A849000010289061A849400000003CA
-:100D3000041A84A00001028A061A84A40000000399
-:100D4000041A84B00001028B061A84B40000000368
-:100D5000041A84C00001028C061A84C40000000337
-:100D6000041A84D00001028D061A84D40000000306
-:100D7000041A84E00001028E061A84E400000003D5
-:100D8000041A84F00001028F061A84F400000003A4
-:100D9000041A850000010290061A85040000000371
-:100DA000041A851000010291061A85140000000340
-:100DB000041A852000010292061A8524000000030F
-:100DC000041A853000010293061A853400000003DE
-:100DD000041A854000010294061A854400000003AD
-:100DE000041A855000010295061A8554000000037C
-:100DF000041A856000010296061A8564000000034B
-:100E0000041A857000010297061A85740000000319
-:100E1000041A858000010298061A858400000003E8
-:100E2000041A859000010299061A859400000003B7
-:100E3000041A85A00001029A061A85A40000000386
-:100E4000041A85B00001029B061A85B40000000355
-:100E5000041A85C00001029C061A85C40000000324
-:100E6000041A85D00001029D061A85D400000003F3
-:100E7000041A85E00001029E061A85E400000003C2
-:100E8000041A85F00001029F061A85F40000000391
-:100E9000041A8600000102A0061A8604000000035E
-:100EA000041A8610000102A1061A8614000000032D
-:100EB000041A8620000102A2061A862400000003FC
-:100EC000041A8630000102A3061A863400000003CB
-:100ED000041A8640000102A4061A8644000000039A
-:100EE000041A8650000102A5061A86540000000369
-:100EF000041A8660000102A6061A86640000000338
-:100F0000041A8670000102A7061A86740000000306
-:100F1000041A8680000102A8061A868400000003D5
-:100F2000041A8690000102A9061A869400000003A4
-:100F3000041A86A0000102AA061A86A40000000373
-:100F4000041A86B0000102AB061A86B40000000342
-:100F5000041A86C0000102AC061A86C40000000311
-:100F6000041A86D0000102AD061A86D400000003E0
-:100F7000041A86E0000102AE061A86E400000003AF
-:100F8000041A86F0000102AF061A86F4000000037E
-:100F9000041A8700000102B0061A8704000000034B
-:100FA000041A8710000102B1061A8714000000031A
-:100FB000041A8720000102B2061A872400000003E9
-:100FC000041A8730000102B3061A873400000003B8
-:100FD000041A8740000102B4061A87440000000387
-:100FE000041A8750000102B5061A87540000000356
-:100FF000041A8760000102B6061A87640000000325
-:10100000041A8770000102B7061A877400000003F3
-:10101000041A8780000102B8061A878400000003C2
-:10102000041A8790000102B9061A87940000000391
-:10103000041A87A0000102BA061A87A40000000360
-:10104000041A87B0000102BB061A87B4000000032F
-:10105000041A87C0000102BC061A87C400000003FE
-:10106000041A87D0000102BD061A87D400000003CD
-:10107000041A87E0000102BE061A87E4000000039C
-:10108000041A87F0000102BF061A87F4000000036B
-:10109000041A8800000102C0061A88040000000338
-:1010A000041A8810000102C1061A88140000000307
-:1010B000041A8820000102C2061A882400000003D6
-:1010C000041A8830000102C3061A883400000003A5
-:1010D000041A8840000102C4061A88440000000374
-:1010E000041A8850000102C5061A88540000000343
-:1010F000041A8860000102C6061A88640000000312
-:10110000041A8870000102C7061A887400000003E0
-:10111000041A8880000102C8061A888400000003AF
-:10112000041A8890000102C9061A8894000000037E
-:10113000041A88A0000102CA061A88A4000000034D
-:10114000041A88B0000102CB061A88B4000000031C
-:10115000041A88C0000102CC061A88C400000003EB
-:10116000041A88D0000102CD061A88D400000003BA
-:10117000041A88E0000102CE061A88E40000000389
-:10118000041A88F0000102CF061A88F40000000358
-:10119000041A8900000102D0061A89040000000325
-:1011A000041A8910000102D1061A891400000003F4
-:1011B000041A8920000102D2061A892400000003C3
-:1011C000041A8930000102D3061A89340000000392
-:1011D000041A8940000102D4061A89440000000361
-:1011E000041A8950000102D5061A89540000000330
-:1011F000041A8960000102D6061A896400000003FF
-:10120000041A8970000102D7061A897400000003CD
-:10121000041A8980000102D8061A8984000000039C
-:10122000041A8990000102D9061A8994000000036B
-:10123000041A89A0000102DA061A89A4000000033A
-:10124000041A89B0000102DB061A89B40000000309
-:10125000041A89C0000102DC061A89C400000003D8
-:10126000041A89D0000102DD061A89D400000003A7
-:10127000041A89E0000102DE061A89E40000000376
-:10128000041A89F0000102DF061A89F40000000345
-:10129000041A8A00000102E0061A8A040000000312
-:1012A000041A8A10000102E1061A8A1400000003E1
-:1012B000041A8A20000102E2061A8A2400000003B0
-:1012C000041A8A30000102E3061A8A34000000037F
-:1012D000041A8A40000102E4061A8A44000000034E
-:1012E000041A8A50000102E5061A8A54000000031D
-:1012F000041A8A60000102E6061A8A6400000003EC
-:10130000041A8A70000102E7061A8A7400000003BA
-:10131000041A8A80000102E8061A8A840000000389
-:10132000041A8A90000102E9061A8A940000000358
-:10133000041A8AA0000102EA061A8AA40000000327
-:10134000041A8AB0000102EB061A8AB400000003F6
-:10135000041A8AC0000102EC061A8AC400000003C5
-:10136000041A8AD0000102ED061A8AD40000000394
-:10137000041A8AE0000102EE061A8AE40000000363
-:10138000041A8AF0000102EF061A8AF40000000332
-:10139000041A8B00000102F0061A8B0400000003FF
-:1013A000041A8B10000102F1061A8B1400000003CE
-:1013B000041A8B20000102F2061A8B24000000039D
-:1013C000041A8B30000102F3061A8B34000000036C
-:1013D000041A8B40000102F4061A8B44000000033B
-:1013E000041A8B50000102F5061A8B54000000030A
-:1013F000041A8B60000102F6061A8B6400000003D9
-:10140000041A8B70000102F7061A8B7400000003A7
-:10141000041A8B80000102F8061A8B840000000376
-:10142000041A8B90000102F9061A8B940000000345
-:10143000041A8BA0000102FA061A8BA40000000314
-:10144000041A8BB0000102FB061A8BB400000003E3
-:10145000041A8BC0000102FC061A8BC400000003B2
-:10146000041A8BD0000102FD061A8BD40000000381
-:10147000041A8BE0000102FE061A8BE40000000350
-:10148000041A8BF0000102FF061A8BF4000000031F
-:10149000041A8C0000010300061A8C0400000003EB
-:1014A000041A8C1000010301061A8C1400000003BA
-:1014B000041A8C2000010302061A8C240000000389
-:1014C000041A8C3000010303061A8C340000000358
-:1014D000041A8C4000010304061A8C440000000327
-:1014E000041A8C5000010305061A8C5400000003F6
-:1014F000041A8C6000010306061A8C6400000003C5
-:10150000041A8C7000010307061A8C740000000393
-:10151000041A8C8000010308061A8C840000000362
-:10152000041A8C9000010309061A8C940000000331
-:10153000041A8CA00001030A061A8CA40000000300
-:10154000041A8CB00001030B061A8CB400000003CF
-:10155000041A8CC00001030C061A8CC4000000039E
-:10156000041A8CD00001030D061A8CD4000000036D
-:10157000041A8CE00001030E061A8CE4000000033C
-:10158000041A8CF00001030F061A8CF4000000030B
-:10159000041A8D0000010310061A8D0400000003D8
-:1015A000041A8D1000010311061A8D1400000003A7
-:1015B000041A8D2000010312061A8D240000000376
-:1015C000041A8D3000010313061A8D340000000345
-:1015D000041A8D4000010314061A8D440000000314
-:1015E000041A8D5000010315061A8D5400000003E3
-:1015F000041A8D6000010316061A8D6400000003B2
-:10160000041A8D7000010317061A8D740000000380
-:10161000041A8D8000010318061A8D84000000034F
-:10162000041A8D9000010319061A8D94000000031E
-:10163000041A8DA00001031A061A8DA400000003ED
-:10164000041A8DB00001031B061A8DB400000003BC
-:10165000041A8DC00001031C061A8DC4000000038B
-:10166000041A8DD00001031D061A8DD4000000035A
-:10167000041A8DE00001031E061A8DE40000000329
-:10168000041A8DF00001031F061A8DF400000003F8
-:10169000041A8E0000010320061A8E0400000003C5
-:1016A000041A8E1000010321061A8E140000000394
-:1016B000041A8E2000010322061A8E240000000363
-:1016C000041A8E3000010323061A8E340000000332
-:1016D000041A8E4000010324061A8E440000000301
-:1016E000041A8E5000010325061A8E5400000003D0
-:1016F000041A8E6000010326061A8E64000000039F
-:10170000041A8E7000010327061A8E74000000036D
-:10171000041A8E8000010328061A8E84000000033C
-:10172000041A8E9000010329061A8E94000000030B
-:10173000041A8EA00001032A061A8EA400000003DA
-:10174000041A8EB00001032B061A8EB400000003A9
-:10175000041A8EC00001032C061A8EC40000000378
-:10176000041A8ED00001032D061A8ED40000000347
-:10177000041A8EE00001032E061A8EE40000000316
-:10178000041A8EF00001032F061A8EF400000003E5
-:10179000041A8F0000010330061A8F0400000003B2
-:1017A000041A8F1000010331061A8F140000000381
-:1017B000041A8F2000010332061A8F240000000350
-:1017C000041A8F3000010333061A8F34000000031F
-:1017D000041A8F4000010334061A8F4400000003EE
-:1017E000041A8F5000010335061A8F5400000003BD
-:1017F000041A8F6000010336061A8F64000000038C
-:10180000041A8F7000010337061A8F74000000035A
-:10181000041A8F8000010338061A8F840000000329
-:10182000041A8F9000010339061A8F9400000003F8
-:10183000041A8FA00001033A061A8FA400000003C7
-:10184000041A8FB00001033B061A8FB40000000396
-:10185000041A8FC00001033C061A8FC40000000365
-:10186000041A8FD00001033D061A8FD40000000334
-:10187000041A8FE00001033E061A8FE400000007FF
-:10188000041A62C00020033F061AD0000000007254
-:10189000061AD24800000010061AD6B00000002038
-:1018A000061AD47000000090061AD46800000002E6
-:1018B000061AA000000001C4061A30000000001043
-:1018C000061A308000000010061A310000000010D7
-:1018D000061A318000000010061A330000000012C2
-:1018E000061A339000000070061AD4580000000257
-:1018F000061AD34800000002061AD3580000002040
-:10190000061AA710000001C4061A3040000000109B
-:10191000061A30C000000010061A31400000001006
-:10192000061A31C000000010061A334800000012E9
-:10193000061A355000000070061AD460000000023C
-:10194000061AD35000000002061AD3D80000002067
-:10195000021AAE2000000000061A5000000000022B
-:10196000061A508000000012041A40000002035FB3
-:10197000041A63C000020361061A7000000000042C
-:10198000061A320000000008021AAE24000000000F
-:10199000061A501000000002061A50C8000000127B
-:1019A000041A400800020363041A63C800020365B6
-:1019B000061A701000000004061A32200000000809
-:1019C000021AAE2800000000061A50200000000293
-:1019D000061A511000000012041A4010000203679A
-:1019E000041A63D000020369061A70200000000484
-:1019F000061A324000000008021AAE2C0000000057
-:101A0000061A503000000002061A51580000001259
-:101A1000041A40180002036B041A63D80002036D15
-:101A2000061A703000000004061A32600000000838
-:101A3000021AAE3000000000061A504000000002FA
-:101A4000061A51A000000012041A40200002036F81
-:101A5000041A63E000020371061A704000000004DB
-:101A6000061A328000000008021AAE34000000009E
-:101A7000061A505000000002061A51E80000001239
-:101A8000041A402800020373041A63E80002037575
-:101A9000061A705000000004061A32A00000000868
-:101AA000021AAE3800000000061A50600000000262
-:101AB000061A523000000012041A40300002037768
-:101AC000041A63F000020379061A70600000000433
-:101AD000061A32C000000008021AAE3C00000000E6
-:101AE000061A507000000002061A52780000001218
-:101AF000041A40380002037B041A63F80002037DD5
-:101B0000061A707000000004061A32E00000000897
-:101B10000200A468000B01C80200A294071D29114D
-:101B20000200A298000000000200A29C009C042475
-:101B30000200A2A0000000000200A2A4000002090E
-:101B40000200A270000000000200A2740000000069
-:101B50000200A270000000000200A2740000000059
-:101B60000200A270000000000200A2740000000049
-:101B70000200A270000000000200A2740000000039
-:101B8000020160A000000001020160A400000262E6
-:101B9000020160A800000002020160AC0000001811
-:101BA0000201620400000001020100B40000000113
-:101BB000020100B800000001020100DC0000000189
-:101BC0000201010000000001020101040000000107
-:101BD0000201007C003000000201008400000028A7
-:101BE0000201008C0000000002010130000000042E
-:101BF0000201025C00000001020103280000000055
-:101C0000020160580000FFFF020160700000000741
-:101C10000201608000000001020105540000003054
-:101C2000020100C400000001020100CC000000011C
-:101C3000020100F800000001020100F000000001B4
-:101C4000020100800030000002010088000000282E
-:101C500002010090000000000201013400000004B5
-:101C6000020102DC000000010201032C0000000060
-:101C70000201605C0000FFFF0201607400000007C9
-:101C800002016084000000010201056400000030D0
-:101C9000020100C800000001020100D000000001A4
-:101CA000020100FC00000001020100F4000000013C
-:101CB000020C100000000028020C20080000021195
-:101CC000020C200C00000200020C20100000020494
-:101CD000020C201C0000FFFF020C20200000FFFF70
-:101CE000020C20240000FFFF020C20280000FFFF50
-:101CF000020C203800000020020C203C00000021D3
-:101D0000020C204000000022020C204400000023AE
-:101D1000020C204800000024020C204C000000258A
-:101D2000020C205000000026020C20540000002766
-:101D3000020C205800000028020C205C0000002942
-:101D4000020C20600000002A020C20640000002B1E
-:101D5000020C20680000002C020C206C0000002DFA
-:101D6000020C20700000002E020C20740000002FD6
-:101D7000020C207800000010060C207C00000007F8
-:101D8000020C209800000011020C209C00000012A0
-:101D9000020C20A000000013060C20A40000001D6F
-:101DA000020C211800000001020C211C000000019F
-:101DB000020C212000000001060C21240000001D5F
-:101DC000020C219800000001060C219C0000000775
-:101DD000020C21B800000001020C21BC000000012F
-:101DE000020C21C000000001020C21C4000000010F
-:101DF000020C21C800000001020C21CC00000001EF
-:101E0000020C21D000000001020C21D400000001CE
-:101E1000020C21D800000001020C21DC00000001AE
-:101E2000020C21E000000001020C21E4000000018E
-:101E3000020C21E800000001020C21EC000000016E
-:101E4000020C21F000000001020C21F4000000014E
-:101E5000020C21F800000001060C21FC0000000724
-:101E6000020C221800000001060C221C00000007D2
-:101E7000020C223807FFFFFF020C223C0000003F4B
-:101E8000020C224007FFFFFF020C22440000000F5B
-:101E9000010C224800000000010C224C0000000050
-:101EA000010C225000000000010C22540000000030
-:101EB000010C225800000000010C225C0000000010
-:101EC000010C226000000000010C226400000000F0
-:101ED000010C226800000000010C226C00000000D0
-:101EE000010C227000000000010C227400000000B0
-:101EF000010C227800000000010C227C0000000090
-:101F00000C0C2000000003E80A0C20000000000177
-:101F10000B0C20000000000A020C40080000101109
-:101F2000020C400C00001000020C401000001004D5
-:101F3000020C401400001021020C401C0000FFFFA6
-:101F4000020C40200000FFFF020C40240000FFFFB5
-:101F5000020C40280000FFFF020C40380000004641
-:101F6000020C403C00000010060C40400000000243
-:101F7000020C404800000018020C404C000000F029
-:101F8000060C40500000001F020C40CC0000000175
-:101F9000060C40D00000003A020C41B800000001DD
-:101FA000060C41BC00000003020C41C80000000107
-:101FB000020C41CC00000001060C41D00000001AC8
-:101FC000020C423807FFFFFF020C423C0000003FBA
-:101FD000020C424007FFFFFF020C42440000000FCA
-:101FE000010C424800000000010C424C00000000BF
-:101FF000010C425000000000010C4254000000009F
-:10200000010C425800000000010C425C000000007E
-:10201000010C426000000000010C4264000000005E
-:10202000010C426800000000010C426C000000003E
-:10203000010C427000000000010C4274000000001E
-:10204000010C427800000000010C427C00000000FE
-:10205000010C4280000000000C0C4000000003E86E
-:102060000A0C4000000000010B0C40000000000AB8
-:10207000060D400000000A00020D0044000000327E
-:10208000020D008C02150020020D009002150020A8
-:10209000020D009408100000020D009800000033AB
-:1020A000020D009C00000002020D00A000000000D4
-:1020B000020D00A400000005020D00A800000005AC
-:1020C000060D00AC00000002020D00B4000000028A
-:1020D000020D00B800000003020D00BC0000000269
-:1020E000020D00C000000001020D00C80000000247
-:1020F000020D00CC00000002020D015C0000000196
-:10210000020D016400000001020D016800000002E0
-:10211000020D020400000001020D020C000000206C
-:10212000020D021000000040020D021400000040E9
-:10213000020D022000000003020D0224000000181E
-:10214000060D028000000012040D03000018037F3A
-:10215000060D03600000000C020D004C00000001A1
-:10216000020D005000000002020D005400000000AB
-:10217000020D005800000008060D005C000000047D
-:10218000020D00C400000004020D00040000000164
-:10219000020D000800000001020D000C000000010B
-:1021A000020D001000000001020D001400000001EB
-:1021B000020D001800000001020D001C00000001CB
-:1021C000020D002000000001020D002400000001AB
-:1021D000020D002800000001020D002C000000018B
-:1021E000020D003000000001020D0034000000016B
-:1021F000020D003800000001020D003C000000014B
-:10220000020D011400000009020D011C0000000A6B
-:10221000020D012400000000020D012C000000004E
-:10222000020D013400000000020D013C0000000B13
-:10223000020D014400000000020D011800000029F9
-:10224000020D01200000002A020D012800000020DC
-:10225000020D013000000020020D013800000020B6
-:10226000020D01400000002B020D0148000000207B
-:10227000020D011400000019020D011C0000001ADB
-:10228000020D012400000010020D012C00000010BE
-:10229000020D013400000010020D013C0000001B83
-:1022A000020D014400000010020D01180000003969
-:1022B000020D01200000003A020D0128000000304C
-:1022C000020D013000000030020D01380000003026
-:1022D000020D01400000003B020D014800000030EB
-:1022E000020D011400000049020D011C0000004A0B
-:1022F000020D012400000040020D012C00000040EE
-:10230000020D013400000040020D013C0000004BB2
-:10231000020D014400000040020D01180000006998
-:10232000020D01200000006A020D0128000000607B
-:10233000020D013000000060020D01380000006055
-:10234000020D01400000006B020D0148000000601A
-:10235000020D011400000059020D011C0000005A7A
-:10236000020D012400000050020D012C000000505D
-:10237000020D013400000050020D013C0000005B22
-:10238000020D014400000050020D01180000007908
-:10239000020D01200000007A020D012800000070EB
-:1023A000020D013000000070020D013800000070C5
-:1023B000020D01400000007B020D0148000000708A
-:1023C000060E200000000800020E004C0000003243
-:1023D000020E009402150020020E00980215002043
-:1023E000020E009C00000030020E00A00810000049
-:1023F000020E00A400000033020E00A8000000300E
-:10240000020E00AC00000031020E00B0000000021D
-:10241000020E00B400000004020E00B8000000002C
-:10242000020E00BC00000002020E00C0000000020C
-:10243000020E00C400000000020E00C800000002EE
-:10244000020E00CC00000007020E00D000000002C7
-:10245000020E00D400000002020E00D800000001AD
-:10246000020E014400000001020E014C00000001B8
-:10247000020E015000000002020E020400000001E2
-:10248000020E020C00000040020E0210000000408C
-:10249000020E021C00000004020E022000000020B8
-:1024A000020E02240000000E020E02280000001B93
-:1024B000060E030000000012040E0280001B0397AA
-:1024C000060E02EC00000005020E00540000000C95
-:1024D000020E00580000000C020E005C000000001C
-:1024E000020E006000000010020E006400000010E8
-:1024F000060E006800000003020E00DC000000036E
-:10250000020E000400000001020E0008000000019D
-:10251000020E000C00000001020E0010000000017D
-:10252000020E001400000001020E0018000000015D
-:10253000020E001C00000001020E0020000000013D
-:10254000020E002400000001020E0028000000011D
-:10255000020E002C00000001020E003000000001FD
-:10256000020E003400000001020E003800000001DD
-:10257000020E003C00000001020E004000000001BD
-:10258000020E004400000001020E01100000000FC6
-:10259000020E011800000000020E012000000000E1
-:1025A000020E012800000000020E01140000002F9E
-:1025B000020E011C00000020020E01240000000099
-:1025C000020E012C00000000020E01100000001F8E
-:1025D000020E011800000010020E01200000000091
-:1025E000020E012800000000020E01140000003F4E
-:1025F000020E011C00000030020E01240000000049
-:10260000020E012C00000000020E01100000004F1D
-:10261000020E011800000040020E01200000000020
-:10262000020E012800000000020E01140000006FDD
-:10263000020E011C00000060020E012400000000D8
-:10264000020E012C00000000020E01100000005FCD
-:10265000020E011800000050020E012000000000D0
-:10266000020E012800000000020E01140000007F8D
-:10267000020E011C00000070020E01240000000088
-:10268000020E012C000000000730040000C9000009
-:10269000083007D8000503B207340000332B0000D0
-:1026A0000734800030A40CCB07350000351A18F52C
-:1026B000073580002A8A263C0736000018D830DF0C
-:1026C00008364630373A03B40130000000000000FD
-:1026D000013000040000000001300008000000008C
-:1026E0000130000C0000000001300010000000006C
-:1026F0000130001400000000023000200000000142
-:102700000230002400000002023000280000000314
-:102710000230002C000000000230003000000004F5
-:1027200002300034000000010230003800000000D8
-:102730000230003C000000010230004000000004B4
-:102740000230004400000000023000480000000198
-:102750000230004C00000003023000500000000076
-:102760000230005400000001023000580000000454
-:102770000230005C00000000023000600000000138
-:102780000230006400000003023000680000000016
-:102790000230006C000000010230007000000004F4
-:1027A00002300074000000000230007800000004D5
-:1027B0000230007C000000030630008000000002B0
-:1027C000023000A400003FFF023000A8000003FF19
-:1027D0000230022400000000023002340000000039
-:1027E0000230024C00000000023002E40000FFFF53
-:1027F000063020000000080002338BC000000001FA
-:10280000023380000000001A023380400000004EB6
-:102810000233808000000010023380C000000020DE
-:102820000C3383000007A1200A3383000000013825
-:102830000B338300000013880A338340000000003C
-:102840000C338340000001F40B338340000000058B
-:10285000023383800007A120023383C0000001F40B
-:1028600002331480000000010A33148000000000CD
-:10287000063280000000010206322008000000C875
-:10288000063220000000000204328EA0001003B6C1
-:1028900006323EB00000000606323ED800000002BC
-:1028A00006323E800000000A04323EA8000203C641
-:1028B00006323E00000000200632500000000400F6
-:1028C0000632400000000004043274C0000203C855
-:1028D00006324110000000020632D0000000003035
-:1028E0000632DD40000000440632DA00000000D06D
-:1028F0000632DEA0000000020632E0000000080000
-:1029000006328450000001180632100000000188D1
-:102910000632500000000020063251000000002066
-:102920000632520000000020063253000000002052
-:10293000063254000000002006325500000000203E
-:10294000063256000000002006325700000000202A
-:102950000632580000000020063259000000002016
-:1029600006325A000000002006325B000000002002
-:1029700006325C000000002006325D0000000020EE
-:1029800006325E000000002006325F0000000020DA
-:1029900006328DF00000000204328E00000203CAED
-:1029A00006328E08000000020632DE9000000002AF
-:1029B00006321C4000000038063288B000000118C2
-:1029C00006321620000001880632508000000020E8
-:1029D00006325180000000200632528000000020A4
-:1029E0000632538000000020063254800000002090
-:1029F000063255800000002006325680000000207C
-:102A00000632578000000020063258800000002067
-:102A1000063259800000002006325A800000002053
-:102A200006325B800000002006325C80000000203F
-:102A300006325D800000002006325E80000000202B
-:102A400006325F800000002006328DF80000000290
-:102A500004328E10000203CC06328E1800000002F1
-:102A60000632DE980000000206321D200000003809
-:102A700002328D50000000000632401000000002BB
-:102A800002328D5400000000063240200000000297
-:102A900002328D5800000000063240300000000273
-:102AA00002328D5C0000000006324040000000024F
-:102AB00002328D600000000006324050000000022B
-:102AC00002328D6400000000063240600000000207
-:102AD00002328D68000000000632407000000002E3
-:102AE00002328D6C000000000632408000000002BF
-:102AF000072004000091000008200780001003CE8A
-:102B0000072400002AFF00000724800015090AC0DE
-:102B10000824A9F0692803D001200000000000006B
-:102B20000120000400000000012000080000000057
-:102B30000120000C00000000012000100000000037
-:102B4000012000140000000002200020000000010D
-:102B500002200024000000020220002800000003E0
-:102B60000220002C000000000220003000000004C1
-:102B700002200034000000010220003800000000A4
-:102B80000220003C00000001022000400000000480
-:102B90000220004400000000022000480000000164
-:102BA0000220004C00000003022000500000000042
-:102BB0000220005400000001022000580000000420
-:102BC0000220005C00000000022000600000000104
-:102BD00002200064000000030220006800000000E2
-:102BE0000220006C000000010220007000000004C0
-:102BF00002200074000000000220007800000004A1
-:102C00000220007C0000000306200080000000027B
-:102C1000022000A400003FFF022000A8000003FFE4
-:102C20000220022400000000022002340000000004
-:102C30000220024C00000000022002E40000FFFF1E
-:102C4000062020000000080002238BC000000001C5
-:102C500002238000000000100223804000000012C8
-:102C60000223808000000030022380C00000000E9C
-:102C70000C2383000007A1200A23830000000138F1
-:102C80000B238300000013880A2383400000000008
-:102C90000C238340000001F40B2383400000000557
-:102CA000022383800007A120022383C0000001F4D7
-:102CB00002231480000000010A2314800000000099
-:102CC000062210000000004206222008000000C872
-:102CD00006222000000000020622B000000000C60C
-:102CE0000422B318000503D20622B32C0000000B07
-:102CF0000422B358000503D70622B36C0000000B72
-:102D00000422B398000503DC0622B3AC0000000BDC
-:102D10000422B3D8000503E10622B3EC0000000B47
-:102D20000422B418000503E60622B42C0000000BB0
-:102D30000422B458000503EB0622B46C0000000B1B
-:102D40000422B498000503F00622B4AC0000000B86
-:102D50000422B4D8000503F50622B4EC0000000BF1
-:102D60000422B518000503FA0622B52C0000000B5A
-:102D70000422B558000503FF0622B56C0000000BC5
-:102D80000422B598000504040622B5AC0000000B2F
-:102D90000422B5D8000504090622B5EC0000000B9A
-:102DA0000422B6180005040E0622B62C0000000B03
-:102DB0000422B658000504130622B66C0000000B6E
-:102DC0000422B698000504180622B6AC0000000BD9
-:102DD0000422B6D80005041D0622B6EC0000000B44
-:102DE0000422B718000504220622B72C0000000BAD
-:102DF0000422B758000504270622B76C0000000B18
-:102E00000422B7980005042C0622B7AC0000000B82
-:102E10000422B7D8000504310622B7EC0000000BED
-:102E20000422B818000504360622B82C0000000B56
-:102E30000422B8580005043B0622B86C0000000BC1
-:102E40000422B898000504400622B8AC0000000B2C
-:102E50000422B8D8000504450622B8EC0000000B97
-:102E60000422B9180005044A0622B92C0000000B00
-:102E70000422B9580005044F0622B96C0000000B6B
-:102E80000422B998000504540622B9AC0000000BD6
-:102E90000422B9D8000504590622B9EC0000000B41
-:102EA0000422BA180005045E0622BA2C0000000BAA
-:102EB0000422BA58000504630622BA6C0000000B15
-:102EC0000422BA98000504680622BAAC0000000B80
-:102ED0000422BAD80005046D0622BAEC00000005F1
-:102EE0000622BB00000000530422BC4C0001047207
-:102EF0000622BC50000000030422BC5C00010473E5
-:102F00000622BC60000000030422BC6C00010474B3
-:102F10000622BC70000000030422BC7C0001047582
-:102F20000622BC80000000030422BC8C0001047651
-:102F30000622BC90000000030422BC9C0001047720
-:102F40000622BCA0000000030422BCAC00010478EF
-:102F50000622BCB0000000030422BCBC00010479BE
-:102F60000622880000000100062280000000020006
-:102F7000042212700010047A06223000000000C003
-:102F800006226700000001000622900000000400F5
-:102F900004226B080020048A022212C0FFFFFFFFF8
-:102FA000062211E800000002062212C800000009F3
-:102FB000062212EC0000000906228C000000000826
-:102FC0000222114800000000062213200000000623
-:102FD000062233000000000206226040000000309C
-:102FE00006228C20000000080222114C0000000084
-:102FF00006221338000000060622330800000002F3
-:10300000062261000000003006228C40000000080B
-:10301000022211500000000006221350000000069A
-:103020000622331000000002062261C000000030BA
-:1030300006228C60000000080222115400000000EB
-:103040000622136800000006062233180000000262
-:10305000062262800000003006228C8000000008FA
-:103060000222115800000000062213800000000612
-:1030700006223320000000020622634000000030D8
-:1030800006228CA0000000080222115C0000000053
-:1030900006221398000000060622332800000002D2
-:1030A000062264000000003006228CC000000008E8
-:1030B0000222116000000000062213B0000000068A
-:1030C0000622333000000002062264C000000030F7
-:1030D00006228CE0000000080222116400000000BB
-:1030E000062213C800000006062233380000000242
-:1030F0000622658000000030021610000000002843
-:1031000002170008000000020217002C0000000354
-:103110000217003C000000040217004800000002F3
-:103120000217004C000000900217005000000090B1
-:103130000217005400800090021700580810000089
-:10314000021700600000008A02170064000000807F
-:1031500002170068000000810217006C0000008068
-:10316000021700700000000602170078000007D068
-:103170000217007C0000076C02170038007C100466
-:10318000021700040000000F061640240000000291
-:10319000021640700000001C0216420800000001E8
-:1031A0000216421000000001021642200000000139
-:1031B0000216422800000001021642300000000101
-:1031C00002164238000000010216426000000002B0
-:1031D0000C16401C0003D0900A16401C0000009CF6
-:1031E0000B16401C000009C4021640300000000805
-:1031F000021640340000000C021640380000001097
-:1032000002164044000000200216400000000001A9
-:10321000021640D80000000102164008000000011C
-:103220000216400C000000010216401000000001D0
-:103230000216424000000000021642480000000052
-:103240000616427000000002021642500000000004
-:1032500002164258000000000616428000000002DC
-:1032600002166008000012240216600C0000121002
-:1032700002166010000012140216601C0000FFFF0E
-:10328000021660200000FFFF021660240000FFFF0E
-:10329000021660280000FFFF0216603800000020C0
-:1032A0000216603C0000002006166040000000028C
-:1032B00002166048000000230216604C0000002443
-:1032C000021660500000002502166054000000261F
-:1032D00002166058000000270216605C00000029FA
-:1032E000021660600000002A021660640000002BD5
-:1032F000021660680000002C0216606C0000002DB1
-:1033000002166070000000EC0216607400000011EC
-:1033100002166078000000120616607C0000000FA4
-:10332000021660B800000001021660BC0000000137
-:10333000061660C00000000C021660F000000001DC
-:10334000061660F400000031021661B800000001AA
-:10335000061661BC0000000D021661F000000001BD
-:10336000061661F4000000110216623807FFFFFF25
-:103370000216623C0000003F0216624007FFFFFF9A
-:10338000021662440000000F0116624800000000AF
-:103390000116624C0000000001166250000000009F
-:1033A000011662540000000001166258000000007F
-:1033B0000116625C0000000001166260000000005F
-:1033C000011662640000000001166268000000003F
-:1033D0000116626C0000000001166270000000001F
-:1033E00001166274000000000116627800000000FF
-:1033F0000116627C000000000C166000000003E86B
-:103400000A166000000000010B1660000000000AB0
-:1034100002168040000000060216804400000005ED
-:10342000021680480000000A0216804C00000005C9
-:103430000216805400000002021680CC0000000436
-:10344000021680D000000004021680D400000004A0
-:10345000021680D800000004021680DC0000000480
-:10346000021680E000000004021680E40000000460
-:10347000021680E800000004021688040000000420
-:10348000021680300000007C021680340000003DEF
-:10349000021680380000003F0216803C0000009CAD
-:1034A000021680F000000007061680F400000005F8
-:1034B0000216880C010101010216810800000000BB
-:1034C0000216810C000000040216811000000004A6
-:1034D0000216811400000002021688100801200460
-:1034E00002168118000000050216811C000000056C
-:1034F000021681200000000502168124000000054C
-:103500000216882C200810010216812800000008ED
-:103510000216812C00000006021681300000000710
-:1035200002168134000000000216883001010120DB
-:1035300006168138000000040216883401010101DA
-:1035400002168148000000000216814C00000004B1
-:10355000021681500000000402168154000000028F
-:103560000216883808012004021681580000000560
-:103570000216815C00000005021681600000000553
-:1035800002168164000000050216883C2008100124
-:1035900002168168000000080216816C0000000617
-:1035A00002168170000000070216817400000001FD
-:1035B00002168840010101200216817800000001F6
-:1035C0000216817C000000010216818000000001CB
-:1035D00002168184000000010216884401010101E5
-:1035E00002168188000000010216818C0000000490
-:1035F000021681900000000402168194000000026F
-:10360000021688480801200402168198000000056F
-:103610000216819C00000005021681A00000000532
-:10362000021681A40000000502168814200810016B
-:10363000021681A800000008021681AC00000006F6
-:10364000021681B000000007021681B400000001DC
-:103650000216881801010120021681B8000000013D
-:10366000021681BC00000001021681C000000001AA
-:10367000021681C4000000010216881C010101012C
-:10368000021681C800000001021681CC000000046F
-:10369000021681D000000004021681D4000000024E
-:1036A0000216882008012004021681D800000005B7
-:1036B000021681DC00000005021681E00000000512
-:1036C000021681E40000000502168824200810017B
-:1036D000021681E800000008021681EC00000006D6
-:1036E000021681F0000000070216E40C0000000042
-:1036F00002168828010101200616E41000000004CB
-:103700000216E000010101010216E42000000000A1
-:103710000216E424000000040216E428000000045D
-:103720000216E42C000000020216E0040801200446
-:103730000216E430000000050216E4340000000523
-:103740000216E438000000050216E43C0000000503
-:103750000216E008200810010216E44000000008EC
-:103760000216E444000000060216E44800000007C8
-:103770000216E44C000000000216E00C01010120DA
-:103780000616E450000000040216E01001010101D9
-:103790000216E460000000000216E4640000000469
-:1037A0000216E468000000040216E46C0000000247
-:1037B0000216E014080120040216E470000000055F
-:1037C0000216E474000000050216E478000000050B
-:1037D0000216E47C000000050216E0182008100123
-:1037E0000216E480000000080216E48400000006CF
-:1037F0000216E488000000070216E48C00000001B5
-:103800000216E01C010101200216E49000000001F4
-:103810000216E494000000010216E4980000000182
-:103820000216E49C000000010216E02001010101E3
-:103830000216E4A0000000010216E4A40000000447
-:103840000216E4A8000000040216E4AC0000000226
-:103850000216E024080120040216E4B0000000056E
-:103860000216E4B4000000050216E4B800000005EA
-:103870000216E4BC000000050216E0282008100132
-:103880000216E4C0000000080216E4C400000006AE
-:103890000216E4C8000000070216E4CC0000000194
-:1038A0000216E02C010101200216E4D00000000104
-:1038B0000216E4D4000000010216E4D80000000162
-:1038C0000216E4DC000000010216E03001010101F3
-:1038D0000216E4E0000000010216E4E40000000427
-:1038E0000216E4E8000000040216E4EC0000000206
-:1038F0000216E034080120040216E4F0000000057E
-:103900000216E4F4000000050216E4F800000005C9
-:103910000216E4FC000000050216E0382008100141
-:103920000216E500000000080216E504000000068B
-:103930000216E508000000070216E03C0101012024
-:1039400002168240003F003F021682440000000041
-:103950000216E524003F003F0216E52800000000A3
-:1039600002168248000000000216824C003F003F11
-:103970000216E52C000000000216E530003F003F73
-:10398000021682500100010002168254010001005B
-:103990000216E534010001000216E53801000100BD
-:1039A00006168258000000020216E53C00000000E6
-:1039B0000216E540000000000216826000C000C050
-:1039C0000216826400C000C00216E54400C000C0B8
-:1039D0000216E54800C000C0021682681E001E00E4
-:1039E0000216826C1E001E000216E54C1E001E0010
-:1039F0000216E5501E001E000216827040004000B4
-:103A000002168274400040000216E5544000400057
-:103A10000216E558400040000216827880008000BF
-:103A20000216827C800080000216E55C8000800027
-:103A30000216E560800080000216828020002000CF
-:103A400002168284200020000216E5642000200077
-:103A50000216E56820002000061682880000000299
-:103A60000216E56C000000000216E5700000000080
-:103A700002168290000000000216829400000000EE
-:103A80000216E574000000000216E5780000000050
-:103A900002168298000000000216829C00000000BE
-:103AA0000216E57C000000000216E5800000000020
-:103AB000021682A000000000021682A4000000018D
-:103AC000061682A80000000A021681F400000C0805
-:103AD000021681F800000040021681FC000001007F
-:103AE0000216820000000020021682040000001767
-:103AF00002168208000000800216820C00000200FC
-:103B000002168210000000000216821801FF01FF59
-:103B10000216821401FF01FF0216E51001FF01FFEA
-:103B20000216E50C01FF01FF0216823C00000013A3
-:103B3000021680900000013F0216806000000140E4
-:103B40000216806400000140061680680000000232
-:103B500002168070000000C0061680740000000786
-:103B60000216809C00000048021680A00000004859
-:103B7000061680A400000002021680AC0000004877
-:103B8000061680B000000007021682380000800090
-:103B900002168234000025E40216809400007FFFA4
-:103BA00002168220000F000F0216821C000F000F69
-:103BB0000216E518000F000F0216E514000F000FA3
-:103BC000021682280000000002168224FFFFFFFF79
-:103BD0000216E520000000000216E51CFFFFFFFFB3
-:103BE0000216E6BC000000000216E6C0000000025B
-:103BF0000216E6C4000000010216E6C80000000339
-:103C00000216E6CC000000040216E6D00000000612
-:103C10000216E6D4000000050216E6D800000007F0
-:103C2000021680EC000000FF0214000000000001FA
-:103C30000214000C0000000102140040000000010A
-:103C40000214004400007FFF0214000C000000007A
-:103C500002140000000000000214006C00000000CC
-:103C600002140004000000010214003000000001F2
-:103C700002140004000000000214005C00000000B8
-:103C800002140008000000010214003400000001CA
-:103C90000214000800000000021400600000000090
-:103CA00006028000000020000202005800000032DE
-:103CB000020200A003150020020200A40315002048
-:103CC000020200A801000030020200AC081000004F
-:103CD000020200B000000033020200B40000003015
-:103CE000020200B800000031020200BC0000000324
-:103CF000020200C000000006020200C4000000032F
-:103D0000020200C800000003020200CC0000000212
-:103D1000020200D000000000020200D400000002F5
-:103D2000020200DC00000000020200E000000006C9
-:103D3000020200E400000004020200E800000002A9
-:103D4000020200EC00000002020200F0000000018C
-:103D5000020200FC00000006020201200000000038
-:103D60000202013400000002020201B00000000162
-:103D70000202020C00000001020202140000000115
-:103D80000202021800000002020204040000000106
-:103D90000202040C00000040020204100000004077
-:103DA0000202041C000000040202042000000020A3
-:103DB0000202042400000002020204280000002085
-:103DC000060205000000001204020480002004AA7C
-:103DD000020200600000000F020200640000000701
-:103DE00002020068000000000202006C0000000EE9
-:103DF000020200700000000E0602007400000003C2
-:103E0000020200F4000000040202000400000001AD
-:103E100002020008000000010202000C0000000184
-:103E20000202001000000001020200140000000164
-:103E300002020018000000010202001C0000000144
-:103E40000202002000000001020200240000000124
-:103E500002020028000000010202002C0000000104
-:103E600002020030000000010202003400000001E4
-:103E700002020038000000010202003C00000001C4
-:103E800002020040000000010202004400000001A4
-:103E900002020048000000010202004C0000000184
-:103EA000020200500000000102020108000000C8E8
-:103EB0000202011800000002020201C4000000001A
-:103EC000020201CC00000000020201D40000000246
-:103ED000020201DC00000002020201E4000000FF17
-:103EE000020201EC000000FF0202010000000000DD
-:103EF0000202010C000000C80202011C00000002C6
-:103F0000020201C800000000020201D0000000000F
-:103F1000020201D800000002020201E000000002DB
-:103F2000020201E8000000FF020201F0000000FFB1
-:103F3000020201040000000002020108000000C8A3
-:103F40000202011800000002020201C40000000089
-:103F5000020201CC00000000020201D400000002B5
-:103F6000020201DC00000002020201E4000000FF86
-:103F7000020201EC000000FF02020100000000004C
-:103F80000202010C000000C80202011C0000000235
-:103F9000020201C800000000020201D0000000007F
-:103FA000020201D800000002020201E0000000024B
-:103FB000020201E8000000FF020201F0000000FF21
-:103FC000020201040000000002020108000000C813
-:103FD0000202011800000002020201C400000000F9
-:103FE000020201CC00000000020201D40000000225
-:103FF000020201DC00000002020201E4000000FFF6
-:10400000020201EC000000FF0202010000000000BB
-:104010000202010C000000C80202011C00000002A4
-:10402000020201C800000000020201D000000000EE
-:10403000020201D800000002020201E000000002BA
-:10404000020201E8000000FF020201F0000000FF90
-:10405000020201040000000002020108000000C882
-:104060000202011800000002020201C40000000068
-:10407000020201CC00000000020201D40000000294
-:10408000020201DC00000002020201E4000000FF65
-:10409000020201EC000000FF02020100000000002B
-:1040A0000202010C000000C80202011C0000000214
-:1040B000020201C800000000020201D0000000005E
-:1040C000020201D800000002020201E0000000022A
-:1040D000020201E8000000FF020201F0000000FF00
-:1040E00002020104000000000728040000A30000F1
-:1040F000082807B8000904CA072C000034F10000A2
-:10410000072C800038A60D3D072D000037B61B6731
-:10411000072D800032632955072E00001C6835EEFC
-:10412000082E48B036EA04CC012800000000000048
-:104130000128000400000000012800080000000021
-:104140000128000C00000000012800100000000001
-:1041500001280014000000000228002000000001D7
-:1041600002280024000000020228002800000003AA
-:104170000228002C0000000002280030000000048B
-:10418000022800340000000102280038000000006E
-:104190000228003C0000000102280040000000044A
-:1041A000022800440000000002280048000000012E
-:1041B0000228004C0000000302280050000000000C
-:1041C00002280054000000010228005800000004EA
-:1041D0000228005C000000000228006000000001CE
-:1041E00002280064000000030228006800000000AC
-:1041F0000228006C0000000102280070000000048A
-:10420000022800740000000002280078000000046A
-:104210000228007C00000003062800800000000245
-:10422000022800A400003FFF022800A8000003FFAE
-:1042300002280224000000000228023400000000CE
-:104240000228024C00000000022802E40000FFFFE8
-:104250000628200000000800022B8BC0000000018F
-:10426000022B800000000000022B8040000000189C
-:10427000022B80800000000C022B80C00000006632
-:104280000C2B83000007A1200A2B830000000138BB
-:104290000B2B8300000013880A2B834000000000D2
-:1042A0000C2B8340000001F40B2B83400000000521
-:1042B000022B83800007A120022B83C0000001F4A1
-:1042C000022B1480000000010A2B14800000000063
-:1042D000062A9AF800000004042A9B08000204CE73
-:1042E000062A9B1000000006062A90800000004865
-:1042F000062A2008000000C8062A2000000000024C
-:10430000062A91A800000086062A900000000020DE
-:10431000062A93C800000003042A93D4000104D0A5
-:10432000062A9DA800000002042A9498000404D1E3
-:10433000042A9D58000104D5062A9D5C0000001146
-:10434000042ACB20001004D6042A3000000204E620
-:10435000062A300800000100062A40400000001034
-:10436000042A4000001004E8042A8408000204F82B
-:10437000062A9DA000000002062AB000000000509E
-:10438000062ABB7000000070062AB150000000022F
-:10439000062ABB6000000004062AD00000000800C6
-:1043A000062AC00000000150062A94A8000000322E
-:1043B000062A502000000002062A503000000002A9
-:1043C000062A500000000002062A501000000002D9
-:1043D000022A520800000001042A9B28000204FA65
-:1043E000062A963800000022042A96C0000104FC28
-:1043F000062A96C400000003062A976800000022DF
-:10440000042A97F0000104FD062A97F40000000337
-:10441000062A989800000022042A9920000104FE30
-:10442000062A992400000003062A99C800000022E9
-:10443000042A9A50000104FF062A9A54000000033F
-:10444000062AB14000000002062AC54000000150C3
-:10445000062A957000000032062A5028000000024B
-:10446000062A503800000002062A50080000000208
-:10447000062A501800000002022A520C0000000117
-:10448000042A9B3000020500062A96D00000002274
-:10449000042A975800010502062A975C00000003D1
-:1044A000062A980000000022042A988800010503CB
-:1044B000062A988C00000003062A9930000000228A
-:1044C000042A99B800010504062A99BC00000003DB
-:1044D000062A9A6000000022042A9AE800010505D5
-:1044E000062A9AEC00000003062AB14800000002E8
-:1044F000022ACA8000000000042A9B38001005062A
-:10450000062A50480000000E022ACA84000000005B
-:10451000042A9B7800100516062A50800000000E21
-:10452000022ACA8800000000042A9BB80010052651
-:10453000062A50B80000000E022ACA8C00000000B3
-:10454000042A9BF800100536062A50F00000000EE1
-:10455000022ACA9000000000042A9C380010054678
-:10456000062A51280000000E022ACA94000000000A
-:10457000042A9C7800100556062A51600000000E9F
-:10458000022ACA9800000000042A9CB800100566A0
-:10459000062A51980000000E022ACA9C0000000062
-:1045A000042A9CF800100576062A51D00000000E5F
-:1045B000021010080000000102101050000000015D
-:1045C000021010000003D000021010040000003D93
-:1045D0000910180002000586091011000010078656
-:1045E0000610114000000008091011600010079625
-:1045F000061011A00000001806102400000000E0C2
-:104600000210201C00000000021020200000000109
-:10461000021020C00000000202102004000000016F
-:10462000021020080000000109103C00000507A648
-:1046300009103800000507AB09103820000507B045
-:1046400006104C000000010002104028000000107D
-:104650000210404400003FFF0210405800280000B4
-:10466000021040840084924A02104058000000006A
-:104670000210800000001080021080AC00000000DA
-:1046800002108038000000100210810000000000BD
-:10469000061081200000000202108008000002B510
-:1046A0000210801000000000061082000000004A86
-:1046B000021081080001FFFF061081400000000287
-:1046C0000210800000001A800610900000000024F4
-:1046D000061091200000004A061093700000004A66
-:1046E000061095C00000004A0210800400001080EF
-:1046F000021080B0000000010210803C0000001099
-:104700000210810400000000061081280000000251
-:104710000210800C000002B502108014000000009E
-:10472000061084000000004A0210810C0001FFFF07
-:1047300006108148000000020210800400001A8068
-:104740000610909000000024061092480000004AD5
-:10475000061094980000004A061096E80000004AEF
-:104760000210800000001080021080AC00000002E7
-:1047700002108038000000100210810000000000CC
-:10478000061081200000000202108008000002B51F
-:104790000210801000000000061082000000004A95
-:1047A000021081080001FFFF061081400000000296
-:1047B0000210800000001A80061090000000002403
-:1047C000061091200000004A061093700000004A75
-:1047D000061095C00000004A0210800400001080FE
-:1047E000021080B0000000030210803C00000010A6
-:1047F0000210810400000000061081280000000261
-:104800000210800C000002B50210801400000000AD
-:10481000061084000000004A0210810C0001FFFF16
-:1048200006108148000000020210800400001A8077
-:104830000610909000000024061092480000004AE4
-:10484000061094980000004A061096E80000004AFE
-:104850000210800000001080021080AC00000004F4
-:1048600002108038000000100210810000000000DB
-:10487000061081200000000202108008000002B52E
-:104880000210801000000000061082000000004AA4
-:10489000021081080001FFFF0610814000000002A5
-:1048A0000210800000001A80061090000000002412
-:1048B000061091200000004A061093700000004A84
-:1048C000061095C00000004A02108004000010800D
-:1048D000021080B0000000050210803C00000010B3
-:1048E0000210810400000000061081280000000270
-:1048F0000210800C000002B50210801400000000BD
-:10490000061084000000004A0210810C0001FFFF25
-:1049100006108148000000020210800400001A8086
-:104920000610909000000024061092480000004AF3
-:10493000061094980000004A061096E80000004A0D
-:104940000210800000001080021080AC0000000601
-:1049500002108038000000100210810000000000EA
-:10496000061081200000000202108008000002B53D
-:104970000210801000000000061082000000004AB3
-:10498000021081080001FFFF0610814000000002B4
-:104990000210800000001A80061090000000002421
-:1049A000061091200000004A061093700000004A93
-:1049B000061095C00000004A02108004000010801C
-:1049C000021080B0000000070210803C00000010C0
-:1049D000021081040000000006108128000000027F
-:1049E0000210800C000002B50210801400000000CC
-:1049F000061084000000004A0210810C0001FFFF35
-:104A000006108148000000020210800400001A8095
-:104A10000610909000000024061092480000004A02
-:104A2000061094980000004A061096E80000004A1C
-:104A3000021205B0000000010212049000E383405E
-:104A40000212051400003C100212066C0000000166
-:104A5000021206700000000002120494FFFFFFFF24
-:104A600002120498FFFFFFFF0212049CFFFFFFFFEA
-:104A7000021204A0FFFFFFFF021204A4FFFFFFFFCA
-:104A8000021204A8FFFFFFFF021204ACFFFFFFFFAA
-:104A9000021204B0FFFFFFFF021204BCFFFFFFFF82
-:104AA000021204C0FFFFFFFF021204C4FFFFFFFF5A
-:104AB000021204C8FFFFFFFF021204CCFFFFFFFF3A
-:104AC000021204D0FFFFFFFF021204D8FFFFFFFF16
-:104AD000021204DCFFFFFFFF021204E0FFFFFFFFF2
-:104AE000021204E4FFFFFFFF021204E8FFFFFFFFD2
-:104AF000021204ECFFFFFFFF021204F0FFFFFFFFB2
-:104B0000021204F4FFFFFFFF021204F8FFFFFFFF91
-:104B1000021204FCFFFFFFFF02120500FFFFFFFF70
-:104B200002120504FFFFFFFF02120508FFFFFFFF4F
-:104B30000212050CFFFFFFFF02120510FFFFFFFF2F
-:104B4000021204D4FF809000021204B4F00050005E
-:104B5000021204B8F00010000212039000000008D6
-:104B60000212039C00000008021203A000000008CB
-:104B7000021203A400000002021203BC00000004A1
-:104B8000021203C000000005021203C4000000046A
-:104B9000021203D0000000000212036C00000001AA
-:104BA000021203680000003F021201BC0000004036
-:104BB000021201C000001808021201C4000008031C
-:104BC000021201C800000803021201CC00000040DC
-:104BD000021201D000000003021201D400000803F9
-:104BE000021201D800000803021201DC00000803D1
-:104BF000021201E000010003021201E400000803B8
-:104C0000021201E800000803021201EC0000000398
-:104C1000021201F000000003021201F40000000380
-:104C2000021201F800000003021201FC0000000360
-:104C3000021202000000000302120204000000033E
-:104C400002120208000000030212020C000000031E
-:104C500002120210000000030212021400000003FE
-:104C600002120218000000030212021C00000003DE
-:104C700002120220000000030212022400000003BE
-:104C800002120228000024030212022C0000002F4E
-:104C90000212023000000009021202340000001962
-:104CA00002120238000001840212023C000001835B
-:104CB0000212024000000306021202440000001922
-:104CC00002120248000000060212024C0000030615
-:104CD00002120250000003060212025400000306F2
-:104CE0000212025800000C860212025C0000030649
-:104CF00002120260000003060212026400000006B5
-:104D000002120268000000060212026C0000000697
-:104D10000212027000000006021202740000000677
-:104D200002120278000000060212027C0000000657
-:104D30000212028000000006021202840000000637
-:104D400002120288000000060212028C0000000617
-:104D500002120290000000060212029400000006F7
-:104D600002120298000000060212029C00000006D7
-:104D7000021202A000000306021202A400000013A7
-:104D8000021202A800000006021202B00000100485
-:104D9000021202B400001004021203240010644046
-:104DA0000212032800106440021205B40000000142
-:104DB000021201B0000000010600A0000000000C7B
-:104DC0000200A050000000000200A05400000000FB
-:104DD0000200A0EC555400000200A0F055555555B6
-:104DE0000200A0F4000055550200A0F8F0000000F9
-:104DF0000200A0FC555400000200A1005555555575
-:104E00000200A104000055550200A108F0000000B6
-:104E10000200A18C555400000200A1905555555533
-:104E20000200A194000055550200A198F000000076
-:104E30000200A19C000000000200A1A000010000EF
-:104E40000200A1A4000050140200A1A8000000006C
-:104E50000200A45C00000C000200A61C000000037D
-:104E60000200A06CFF5C00000200A070FFF55FFF75
-:104E70000200A0740000FFFF0200A078F00003E031
-:104E80000200A07C000000000200A0800000A00042
-:104E90000600A084000000050200A0980FE00000BA
-:104EA0000600A09C000000070200A0B8000004005B
-:104EB0000600A0BC000000030200A0C80000100013
-:104EC0000600A0CC000000030200A0D800004000B3
-:104ED0000600A0DC000000030200A0E800010000C2
-:104EE0000600A22C000000040200A10CFF5C0000E0
-:104EF0000200A110FFF55FFF0200A1140000FFFFF8
-:104F00000200A118F00003E00200A11C0000000054
-:104F10000200A1200000A0000600A124000000055E
-:104F20000200A1380FE000000600A13C00000007CD
-:104F30000200A158000008000600A15C0000000368
-:104F40000200A168000020000600A16C0000000320
-:104F50000200A178000080000600A17C0000000390
-:104F60000200A188000200000600A23C000000042C
-:104F70000200A030000000000200A0340000000089
-:104F80000200A038000000000200A03C0000000069
-:104F90000200A040000000000200A0440000000049
-:104FA0000200A048000000000200A04C0000000029
-:104FB00000000000000000000000003000000000C1
-:104FC00000000000000000000000000000000000E1
-:104FD00000000000000000000000000000000000D1
-:104FE0000000000000300031000000000000000060
-:104FF00000000000000000000000000000000000B1
-:1050000000000000000000000000000000000000A0
-:10501000003100520000000000000000000000000D
-:105020000000000000000000000000000000000080
-:105030000000000000000000000000000052008995
-:1050400000000000000000000089008D008D00912C
-:1050500000910095009500990099009D009D00A188
-:1050600000A100A500A500A900A900AE00AE00B1F6
-:1050700000B100B4000000000000000000000000CB
-:105080000000000000000000000000000000000020
-:105090000000000000B40309030903130313031DF8
-:1050A000031D03240324032B032B03320332033990
-:1050B00003390340034003470347034E034E0355A0
-:1050C00000000000000000000000000000000000E0
-:1050D00000000000000000000000000000000000D0
-:1050E00000000000000000000000000000000000C0
-:1050F00000000000000000000000000000000000B0
-:10510000000000000000000000000000000000009F
-:10511000000000000000000000000000000000008F
-:10512000000000000000000000000000000000007F
-:10513000000000000000000000000000000000006F
-:10514000000000000000000000000000000000005F
-:10515000000000000000000000000000000000004F
-:10516000000000000000000000000000000000003F
-:105170000355035B0000000000000000035B035CBC
-:10518000035C035D035D035E035E035F035F036017
-:1051900003600361036103620362036300000000B4
-:1051A00000000000000000000000000000000000FF
-:1051B00000000000000000000000000000000000EF
-:1051C00000000000000000000363036D036D037B1B
-:1051D000037B0389000000000000000000000000C5
-:1051E00000000000000000000000000000000000BF
-:1051F00000000000000000000000000000000000AF
-:10520000000000000000000000000000000000009E
-:10521000000000000000000000000000000000008E
-:105220000389038A00000000000000000000000065
-:10523000000000000000000000000000000000006E
-:10524000000000000000000000000000038A03D6F8
-:10525000000000000000000000000000000000004E
-:10526000000000000000000000000000000000003E
-:10527000000000000000000003D604010000000050
-:10528000000000000000000000000000000000001E
-:10529000000000000000000000000000000000000E
-:1052A00000000000040104330000000000000000C2
-:1052B0000433043A043A0441044104480448044FC6
-:1052C000044F04560456045D045D04640464046BD6
-:1052D000046B04A4000000000000000004A404A863
-:1052E00004A804AC04AC04B004B004B404B404B81E
-:1052F00004B804BC04BC04C004C004C404C4051342
-:105300000513052A052A05410541054305430545C1
-:1053100005450547054705490549054B054B054D1D
-:10532000054D054F054F0551055105E805E805E90F
-:1053300005E905EA05EA05EF05EF05F405F405F9C9
-:1053400005F905FE05FE0603060306080608060D18
-:10535000060D0612061206130000000000000000F1
-:10536000000000000000000000000000000000003D
-:10537000000000000000000000000000000000002D
-:1053800006130624000000000000000000000000DA
-:10539000000000000000000000000000000000000D
-:1053A0000000000000000000000000000624063994
-:1053B0000639063C063C063F0000000000000000E5
-:1053C00000000000000000000000000000000000DD
-:1053D0000000000000000000063F0675000000000D
-:1053E00000000000000000000000000000000000BD
-:1053F00000000000000000000000000000000000AD
-:1054000000000000067507780000000000000000A2
-:10541000000000000000000000000000000000008C
-:10542000000000000000000000000000000000007C
-:105430000778077F077F078307830787000000003F
-:10544000000000000000000000000000000000005C
-:10545000000000000000000000000000078707C8EF
-:10546000000000000000000007C807D107D107DADC
-:1054700007DA07E307E307EC07EC07F507F507FE94
-:1054800007FE080708070810081008670867087C67
-:10549000087C089108910894089408970897089A3E
-:1054A000089A089D089D08A008A008A308A308A6BC
-:1054B00008A608A908A908B2000000000000000022
-:1054C00000000000000000000000000000000000DC
-:1054D00000000000000000000000000000000000CC
-:1054E00008B208B800000000000000000000000042
-:1054F00000000000000000000000000000000000AC
-:1055000000000000000000000000000008B808BB18
-:10551000000000000000000000000000000000008B
-:10552000000000000000000000000000000000007B
-:10553000000000000000000008BB08C100000000DF
-:10554000000000000000000000000000000000005B
-:10555000000000000000000000000000000000004B
-:10556000000000000000000000000000000000003B
-:1055700008C108D008D008DF08DF08EE08EE08FDF3
-:1055800008FD090C090C091B091B092A092A0939FC
-:10559000093909AA00000000000000000000000016
-:1055A00000000000000000000000000000000000FB
-:1055B00000000000000000000000000009AA09BF70
-:1055C00009BF09D009D009E109E109E209E209E3CB
-:1055D00009E309E409E409E509E509E609E609E75B
-:1055E00009E709E809E809E90000000000000000F7
-:1055F00000000000000000000000000000000000AB
-:10560000000000000000000000000000000000009A
-:10561000000000000000000000000000000000008A
-:10562000000000000000000000000000000000007A
-:10563000000000000000000000000000000000006A
-:10564000000000000000000000000000000000005A
-:10565000000000000000000000000000000000004A
-:10566000000000000000000000000000000000003A
-:10567000000000000000000000000000000000002A
-:10568000000000000000000000000000000000001A
-:10569000000000000000000000000000000000000A
-:1056A00000000000000000000000000000000000FA
-:1056B00000000000000000000000000000000000EA
-:1056C000000000000000000000010000000204C013
-:1056D0000003098000040E4000051300000617C0F7
-:1056E00000071C800008214000092600000A2AC08B
-:1056F000000B2F80000C3440000D3900000E3DC01F
-:10570000000F42800010474000114C00001250C0B2
-:105710000013558000145A4000155F00001663C046
-:105720000017688000186D4000197200001A76C0DA
-:10573000001B7B80001C8040001D8500001E89C06E
-:10574000001F8E80000093400000200000004000F9
-:1057500000006000000080000000A0000000C00009
-:105760000000E000000100000001200000014000F6
-:1057700000016000000180000001A0000001C000E5
-:105780000001E000000200000002200000024000D2
-:1057900000026000000280000002A0000002C000C1
-:1057A0000002E000000300000003200000034000AE
-:1057B00000036000000380000003A0000003C0009D
-:1057C0000003E0000004000000042000000440008A
-:1057D00000046000000480000004A0000004C00079
-:1057E0000004E00000050000000520000005400066
-:1057F00000056000000580000005A0000005C00055
-:105800000005E00000060000000620000006400041
-:1058100000066000000680000006A0000006C00030
-:105820000006E0000007000000072000000740001D
-:1058300000076000000780000007A0000007C0000C
-:105840000007E000000800000008200000084000F9
-:1058500000086000000880000008A0000008C000E8
-:105860000008E000000900000009200000094000D5
-:1058700000096000000980000009A0000009C000C4
-:105880000009E000000A0000000A2000000A4000B1
-:10589000000A6000000A8000000AA000000AC000A0
-:1058A000000AE000000B0000000B2000000B40008D
-:1058B000000B6000000B8000000BA000000BC0007C
-:1058C000000BE000000C0000000C2000000C400069
-:1058D000000C6000000C8000000CA000000CC00058
-:1058E000000CE000000D0000000D2000000D400045
-:1058F000000D6000000D8000000DA000000DC00034
-:10590000000DE000000E0000000E2000000E400020
-:10591000000E6000000E8000000EA000000EC0000F
-:10592000000EE000000F0000000F2000000F4000FC
-:10593000000F6000000F8000000FA000000FC000EB
-:10594000000FE000001000000010200000104000D8
-:1059500000106000001080000010A0000010C000C7
-:105960000010E000001100000011200000114000B4
-:1059700000116000001180000011A0000011C000A3
-:105980000011E00000120000001220000012400090
-:1059900000126000001280000012A0000012C0007F
-:1059A0000012E0000013000000132000001340006C
-:1059B00000136000001380000013A0000013C0005B
-:1059C0000013E00000140000001420000014400048
-:1059D00000146000001480000014A0000014C00037
-:1059E0000014E00000150000001520000015400024
-:1059F00000156000001580000015A0000015C00013
-:105A00000015E000001600000016200000164000FF
-:105A100000166000001680000016A0000016C000EE
-:105A20000016E000001700000017200000174000DB
-:105A300000176000001780000017A0000017C000CA
-:105A40000017E000001800000018200000184000B7
-:105A500000186000001880000018A0000018C000A6
-:105A60000018E00000190000001920000019400093
-:105A700000196000001980000019A0000019C00082
-:105A80000019E000001A0000001A2000001A40006F
-:105A9000001A6000001A8000001AA000001AC0005E
-:105AA000001AE000001B0000001B2000001B40004B
-:105AB000001B6000001B8000001BA000001BC0003A
-:105AC000001BE000001C0000001C2000001C400027
-:105AD000001C6000001C8000001CA000001CC00016
-:105AE000001CE000001D0000001D2000001D400003
-:105AF000001D6000001D8000001DA000001DC000F2
-:105B0000001DE000001E0000001E2000001E4000DE
-:105B1000001E6000001E8000001EA000001EC000CD
-:105B2000001EE000001F0000001F2000001F4000BA
-:105B3000001F6000001F8000001FA000001FC000A9
-:105B4000001FE00000200000002020000020400096
-:105B500000206000002080000020A0000020C00085
-:105B60000020E00000210000002120000021400072
-:105B700000216000002180000021A0000021C00061
-:105B80000021E0000022000000222000002240004E
-:105B900000226000002280000022A0000022C0003D
-:105BA0000022E0000023000000232000002340002A
-:105BB00000236000002380000023A0000023C00019
-:105BC0000023E00000240000002420000024400006
-:105BD00000246000002480000024A0000024C000F5
-:105BE0000024E000002500000025200000254000E2
-:105BF00000256000002580000025A0000025C000D1
-:105C00000025E000002600000026200000264000BD
-:105C100000266000002680000026A0000026C000AC
-:105C20000026E00000270000002720000027400099
-:105C300000276000002780000027A0000027C00088
-:105C40000027E00000280000002820000028400075
-:105C500000286000002880000028A0000028C00064
-:105C60000028E00000290000002920000029400051
-:105C700000296000002980000029A0000029C00040
-:105C80000029E000002A0000002A2000002A40002D
-:105C9000002A6000002A8000002AA000002AC0001C
-:105CA000002AE000002B0000002B2000002B400009
-:105CB000002B6000002B8000002BA000002BC000F8
-:105CC000002BE000002C0000002C2000002C4000E5
-:105CD000002C6000002C8000002CA000002CC000D4
-:105CE000002CE000002D0000002D2000002D4000C1
-:105CF000002D6000002D8000002DA000002DC000B0
-:105D0000002DE000002E0000002E2000002E40009C
-:105D1000002E6000002E8000002EA000002EC0008B
-:105D2000002EE000002F0000002F2000002F400078
-:105D3000002F6000002F8000002FA000002FC00067
-:105D4000002FE00000300000003020000030400054
-:105D500000306000003080000030A0000030C00043
-:105D60000030E00000310000003120000031400030
-:105D700000316000003180000031A0000031C0001F
-:105D80000031E0000032000000322000003240000C
-:105D900000326000003280000032A0000032C000FB
-:105DA0000032E000003300000033200000334000E8
-:105DB00000336000003380000033A0000033C000D7
-:105DC0000033E000003400000034200000344000C4
-:105DD00000346000003480000034A0000034C000B3
-:105DE0000034E000003500000035200000354000A0
-:105DF00000356000003580000035A0000035C0008F
-:105E00000035E0000036000000362000003640007B
-:105E100000366000003680000036A0000036C0006A
-:105E20000036E00000370000003720000037400057
-:105E300000376000003780000037A0000037C00046
-:105E40000037E00000380000003820000038400033
-:105E500000386000003880000038A0000038C00022
-:105E60000038E0000039000000392000003940000F
-:105E700000396000003980000039A0000039C000FE
-:105E80000039E000003A0000003A2000003A4000EB
-:105E9000003A6000003A8000003AA000003AC000DA
-:105EA000003AE000003B0000003B2000003B4000C7
-:105EB000003B6000003B8000003BA000003BC000B6
-:105EC000003BE000003C0000003C2000003C4000A3
-:105ED000003C6000003C8000003CA000003CC00092
-:105EE000003CE000003D0000003D2000003D40007F
-:105EF000003D6000003D8000003DA000003DC0006E
-:105F0000003DE000003E0000003E2000003E40005A
-:105F1000003E6000003E8000003EA000003EC00049
-:105F2000003EE000003F0000003F2000003F400036
-:105F3000003F6000003F8000003FA000003FC00025
-:105F4000003FE000003FE00100000000000001FF12
-:105F50000000020000007FF800007FF80000014010
-:105F600000003500000000010000FF0000000000FC
-:105F70000000FF00000000000000FF000000000023
-:105F80000000FF00000000000000FF000000000013
-:105F90000000FF00000000000000FF000000000003
-:105FA0000000FF000000000000000000140AFF00D5
-:105FB00000000001000000000020100100000000AF
-:105FC0000100900000000100000090020000900419
-:105FD00000009006000090080000900A0000900C5D
-:105FE0000000900E0000901000009012000090142D
-:105FF00000009016000090180000901A0000901CFD
-:106000000000901E000090200000902200009024CC
-:1060100000009026000090280000902A0000902C9C
-:106020000000902E0000903000009032000090346C
-:1060300000009036000090380000903A0000903C3C
-:106040000000903E0000904000009042000090440C
-:1060500000009046000090480000904A0000904CDC
-:106060000000904E000090500000905200009054AC
-:1060700000009056000090580000905A0000905C7C
-:106080000000905E0000906000009062000090644C
-:1060900000009066000090680000906A0000906C1C
-:1060A0000000906E000090700000907200009074EC
-:1060B00000009076000090780000907A0000907CBC
-:1060C0000000907E0000908000009082000090848C
-:1060D00000009086000090880000908A0000908C5C
-:1060E0000000908E0000909000009092000090942C
-:1060F00000009096000090980000909A0000909CFC
-:106100000000909E000090A0000090A2000090A4CB
-:10611000000090A6000090A8000090AA000090AC9B
-:10612000000090AE000090B0000090B2000090B46B
-:10613000000090B6000090B8000090BA000090BC3B
-:10614000000090BE000090C0000090C2000090C40B
-:10615000000090C6000090C8000090CA000090CCDB
-:10616000000090CE000090D0000090D2000090D4AB
-:10617000000090D6000090D8000090DA000090DC7B
-:10618000000090DE000090E0000090E2000090E44B
-:10619000000090E6000090E8000090EA000090EC1B
-:1061A000000090EE000090F0000090F2000090F4EB
-:1061B000000090F6000090F8000090FA000090FCBB
-:1061C000000090FE00009100000091020000910488
-:1061D00000009106000091080000910A0000910C57
-:1061E0000000910E00009110000091120000911427
-:1061F00000009116000091180000911A0000911CF7
-:106200000000911E000091200000912200009124C6
-:1062100000009126000091280000912A0000912C96
-:106220000000912E00009130000091320000913466
-:1062300000009136000091380000913A0000913C36
-:106240000000913E00009140000091420000914406
-:1062500000009146000091480000914A0000914CD6
-:106260000000914E000091500000915200009154A6
-:1062700000009156000091580000915A0000915C76
-:106280000000915E00009160000091620000916446
-:1062900000009166000091680000916A0000916C16
-:1062A0000000916E000091700000917200009174E6
-:1062B00000009176000091780000917A0000917CB6
-:1062C0000000917E00009180000091820000918486
-:1062D00000009186000091880000918A0000918C56
-:1062E0000000918E00009190000091920000919426
-:1062F00000009196000091980000919A0000919CF6
-:106300000000919E000091A0000091A2000091A4C5
-:10631000000091A6000091A8000091AA000091AC95
-:10632000000091AE000091B0000091B2000091B465
-:10633000000091B6000091B8000091BA000091BC35
-:10634000000091BE000091C0000091C2000091C405
-:10635000000091C6000091C8000091CA000091CCD5
-:10636000000091CE000091D0000091D2000091D4A5
-:10637000000091D6000091D8000091DA000091DC75
-:10638000000091DE000091E0000091E2000091E445
-:10639000000091E6000091E8000091EA000091EC15
-:1063A000000091EE000091F0000091F2000091F4E5
-:1063B000000091F6000091F8000091FA000091FCB5
-:1063C000000091FEFFFFFFFFFFFFFFFFFFFFFFFF4A
-:1063D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD
-:1063E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD
-:1063F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD
-:10640000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9C
-:10641000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8C
-:10642000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7C
-:10643000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C
-:10644000FFFFFFFF0000000300BEBC2000000000B3
-:10645000000000050000000300BEBC20000000009A
-:10646000000000050000000300BEBC20000000008A
-:10647000000000050000000300BEBC20000000007A
-:10648000000000050000000300BEBC20000000006A
-:10649000000000050000000300BEBC20000000005A
-:1064A000000000050000000300BEBC20000000004A
-:1064B000000000050000000300BEBC20000000003A
-:1064C0000000000500002000000040C000006180C6
-:1064D000000082400000A3000000C3C00000E48070
-:1064E0000001054000012600000146C00001678050
-:1064F000000188400001A9000001C9C00001EA8034
-:1065000000020B4000022C0000024CC000026D8013
-:1065100000028E400002AF000002CFC00002F080F7
-:10652000000011400000800000010380000187008E
-:1065300000020A8000028E00000311800003950013
-:106540000004188000049C0000051F800005A300C3
-:10655000000626800006AA0000072D800007B10073
-:10656000000834800008B80000093B800009BF0023
-:10657000000A4280000AC600000B4980000BCD00D3
-:10658000000C5080000CD400000D578000005B0010
-:1065900000007FF800007FF8000000D50000150023
-:1065A0000000FF00000000000000FF0000000000ED
-:1065B0000000FF00000000000000FF0000000000DD
-:1065C0000000FF00000000000000FF0000000000CD
-:1065D0000000FF00000000000000FF0000000000BD
-:1065E000000019000000000000000000FFFFFFFF96
-:1065F0000000000003938700000000000393870061
-:1066000000007FF800007FF80000068E00003500D3
-:106610000000FF000FFFFFFF0000FF000FFFFFFF64
-:10662000000000FF0000FF000FFFFFFF0000FF0061
-:106630000FFFFFFF000000FF0000FF000FFFFFFF44
-:106640000000FF000FFFFFFF000000FF0000FF0041
-:106650000FFFFFFF0000FF000FFFFFFF000000FF24
-:106660000000FF000FFFFFFF0000FF000FFFFFFF14
-:10667000000000FF0000FF000FFFFFFF0000FF0011
-:106680000FFFFFFF000000FF0000FF000FFFFFFFF4
-:106690000000FF000FFFFFFF000000FF0000FF00F1
-:1066A0000FFFFFFF0000FF000FFFFFFF000000FFD4
-:1066B0000000FF000FFFFFFF0000FF000FFFFFFFC4
-:1066C000000000FF0000FF000FFFFFFF0000FF00C1
-:1066D0000FFFFFFF000000FF0000FF000FFFFFFFA4
-:1066E0000000FF000FFFFFFF000000FF0000FF00A1
-:1066F0000FFFFFFF0000FF000FFFFFFF000000FF84
-:106700000000FF000FFFFFFF0000FF000FFFFFFF73
-:10671000000000FF0000FF000FFFFFFF0000FF0070
-:106720000FFFFFFF000000FF0000FF000FFFFFFF53
-:106730000000FF000FFFFFFF000000FF0000FF0050
-:106740000FFFFFFF0000FF000FFFFFFF000000FF33
-:106750000000FF000FFFFFFF0000FF000FFFFFFF23
-:10676000000000FF0000FF000FFFFFFF0000FF0020
-:106770000FFFFFFF000000FF0000FF000FFFFFFF03
-:106780000000FF000FFFFFFF000000FF0000FF0000
-:106790000FFFFFFF0000FF000FFFFFFF000000FFE3
-:1067A0000000FF000FFFFFFF0000FF000FFFFFFFD3
-:1067B000000000FF0000FF000FFFFFFF0000FF00D0
-:1067C0000FFFFFFF000000FF0000FF000FFFFFFFB3
-:1067D0000000FF000FFFFFFF000000FF0000FF00B0
-:1067E0000FFFFFFF0000FF000FFFFFFF000000FF93
-:1067F0000000FF000FFFFFFF0000FF000FFFFFFF83
-:10680000000000FF0000FF000FFFFFFF0000FF007F
-:106810000FFFFFFF000000FF0000FF000FFFFFFF62
-:106820000000FF000FFFFFFF000000FF0000FF005F
-:106830000FFFFFFF0000FF000FFFFFFF000000FF42
-:106840000000FF000FFFFFFF0000FF000FFFFFFF32
-:10685000000000FF0000FF000FFFFFFF0000FF002F
-:106860000FFFFFFF000000FF0000FF000FFFFFFF12
-:106870000000FF000FFFFFFF000000FF0000FF000F
-:106880000FFFFFFF0000FF000FFFFFFF000000FFF2
-:10689000000000FF000000FF000000FF000000FFFC
-:1068A000000000FF000000FF000000FF000000FFEC
-:1068B0000000FF00000000000000FF0000000000DA
-:1068C0000000FF00000000000000FF0000000000CA
-:1068D0000000FF00000000000000FF0000000000BA
-:1068E0000000FF00000000000000FF0000000000AA
-:1068F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA8
-:10690000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF97
-:10691000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF87
-:10692000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF77
-:10693000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF67
-:10694000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF57
-:10695000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF47
-:10696000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF37
-:106970000000100000002080000031000000418075
-:10698000000052000000628000007300000083805D
-:10699000000094000000A4800000B5000000C58045
-:1069A0000000D6000000E6800000F700000107802C
-:1069B0000001180000012880000139000001498011
-:1069C00000015A0000016A8000017B0000018B80F9
-:1069D00000019C000001AC800001BD000001CD80E1
-:1069E0000001DE000001EE800001FF0000000F80CA
-:1069F00000007FF800007FF800000344000035002D
-:106A000010000000000028AD00010001000902068E
-:106A1000CCCCCCC5FFFFFFFFFFFFFFFF7058103C41
-:106A20000000FF00000000000000FF000000000068
-:106A30000000FF00000000000000FF000000000058
-:106A40000000FF00000000000000FF000000000048
-:106A50000000FF00000000000000FF000000000038
-:106A60000000000000000001CCCC0201CCCCCCCC5A
-:106A7000CCCC0201CCCCCCCCCCCC0201CCCCCCCC80
-:106A8000CCCC0201CCCCCCCCCCCC0201CCCCCCCC70
-:106A9000CCCC0201CCCCCCCCCCCC0201CCCCCCCC60
-:106AA000CCCC0201CCCCCCCC00000000FFFFFFFF1F
-:106AB000000E0000011600D6002625A0002625A005
-:106AC000002625A0002625A000720000012300F367
-:106AD000002625A0002625A0002625A0002625A00A
-:106AE0000000FFFF000000000000FFFF00000000AA
-:106AF0000000FFFF000000000000FFFF000000009A
-:106B00000000FFFF000000000000FFFF0000000089
-:106B10000000FFFF000000000000FFFF0000000079
-:106B20000000FFFF000000000000FFFF0000000069
-:106B30000000FFFF000000000000FFFF0000000059
-:106B40000000FFFF000000000000FFFF0000000049
-:106B50000000FFFF000000000000FFFF0000000039
-:106B60000000FFFF000000000000FFFF0000000029
-:106B70000000FFFF000000000000FFFF0000000019
-:106B80000000FFFF000000000000FFFF0000000009
-:106B90000000FFFF000000000000FFFF00000000F9
-:106BA0000000FFFF000000000000FFFF00000000E9
-:106BB0000000FFFF000000000000FFFF00000000D9
-:106BC0000000FFFF000000000000FFFF00000000C9
-:106BD0000000FFFF000000000000FFFF00000000B9
-:106BE0000000FFFF000000000000FFFF00000000A9
-:106BF0000000FFFF000000000000FFFF0000000099
-:106C00000000FFFF000000000000FFFF0000000088
-:106C10000000FFFF000000000000FFFF0000000078
-:106C20000000FFFF000000000000FFFF0000000068
-:106C30000000FFFF000000000000FFFF0000000058
-:106C40000000FFFF000000000000FFFF0000000048
-:106C50000000FFFF000000000000FFFF0000000038
-:106C60000000FFFF000000000000FFFF0000000028
-:106C70000000FFFF000000000000FFFF0000000018
-:106C80000000FFFF000000000000FFFF0000000008
-:106C90000000FFFF000000000000FFFF00000000F8
-:106CA0000000FFFF000000000000FFFF00000000E8
-:106CB0000000FFFF000000000000FFFF00000000D8
-:106CC0000000FFFF000000000000FFFF00000000C8
-:106CD0000000FFFF000000000000FFFF00000000B8
-:106CE000FFFFFFF3318FFFFF0C30C30CC30C30C329
-:106CF000CF3CF300F3CF3CF30000CF3CCDCDCDCD66
-:106D0000FFFFFFF130EFFFFF0C30C30CC30C30C3AB
-:106D1000CF3CF300F3CF3CF30001CF3CCDCDCDCD44
-:106D2000FFFFFFF6305FFFFF0C30C30CC30C30C316
-:106D3000CF3CF300F3CF3CF30002CF3CCDCDCDCD23
-:106D4000FFFFF4061CBFFFFF0C30C305C30C30C3AC
-:106D5000CF300014F3CF3CF30004CF3CCDCDCDCDEC
-:106D6000FFFFFFF2304FFFFF0C30C30CC30C30C3EA
-:106D7000CF3CF300F3CF3CF30008CF3CCDCDCDCDDD
-:106D8000FFFFFFFA302FFFFF0C30C30CC30C30C3E2
-:106D9000CF3CF300F3CF3CF30010CF3CCDCDCDCDB5
-:106DA000FFFFFFF731EFFFFF0C30C30CC30C30C304
-:106DB000CF3CF300F3CF3CF30020CF3CCDCDCDCD85
-:106DC000FFFFFFF5302FFFFF0C30C30CC30C30C3A7
-:106DD000CF3CF300F3CF3CF30040CF3CCDCDCDCD45
-:106DE000FFFFFFF3318FFFFF0C30C30CC30C30C328
-:106DF000CF3CF300F3CF3CF30000CF3CCDCDCDCD65
-:106E0000FFFFFFF1310FFFFF0C30C30CC30C30C389
-:106E1000CF3CF300F3CF3CF30001CF3CCDCDCDCD43
-:106E2000FFFFFFF6305FFFFF0C30C30CC30C30C315
-:106E3000CF3CF300F3CF3CF30002CF3CCDCDCDCD22
-:106E4000FFFFF4061CBFFFFF0C30C305C30C30C3AB
-:106E5000CF300014F3CF3CF30004CF3CCDCDCDCDEB
-:106E6000FFFFFFF2304FFFFF0C30C30CC30C30C3E9
-:106E7000CF3CF300F3CF3CF30008CF3CCDCDCDCDDC
-:106E8000FFFFFFFA302FFFFF0C30C30CC30C30C3E1
-:106E9000CF3CF300F3CF3CF30010CF3CCDCDCDCDB4
-:106EA000FFFFFFF730EFFFFF0C30C30CC30C30C304
-:106EB000CF3CF300F3CF3CF30020CF3CCDCDCDCD84
-:106EC000FFFFFFF5304FFFFF0C30C30CC30C30C386
-:106ED000CF3CF300F3CF3CF30040CF3CCDCDCDCD44
-:106EE000FFFFFFFF30CFFFFF0C30C30CC30C30C3DC
-:106EF000CF3CF3CCF3CF3CF30000CF3CCDCDCDCD98
-:106F0000FFFFFFFF30CFFFFF0C30C30CC30C30C3BB
-:106F1000CF3CF3CCF3CF3CF30001CF3CCDCDCDCD76
-:106F2000FFFFFFFF30CFFFFF0C30C30CC30C30C39B
-:106F3000CF3CF3CCF3CF3CF30002CF3CCDCDCDCD55
-:106F4000FFFFFFFF30CFFFFF0C30C30CC30C30C37B
-:106F5000CF3CF3CCF3CF3CF30004CF3CCDCDCDCD33
-:106F6000FFFFFFFF30CFFFFF0C30C30CC30C30C35B
-:106F7000CF3CF3CCF3CF3CF30008CF3CCDCDCDCD0F
-:106F8000FFFFFFFF30CFFFFF0C30C30CC30C30C33B
-:106F9000CF3CF3CCF3CF3CF30010CF3CCDCDCDCDE7
-:106FA000FFFFFFFF30CFFFFF0C30C30CC30C30C31B
-:106FB000CF3CF3CCF3CF3CF30020CF3CCDCDCDCDB7
-:106FC000FFFFFFFF30CFFFFF0C30C30CC30C30C3FB
-:106FD000CF3CF3CCF3CF3CF30040CF3CCDCDCDCD77
-:106FE000FFFFFFF3320FFFFF0C30C30CC30C30C3A5
-:106FF000CF3CF300F3CF3CF30000CF3CCDCDCDCD63
-:10700000FFFFFFF1310FFFFF0C30C30CC30C30C387
-:10701000CF3CF300F3CF3CF30001CF3CCDCDCDCD41
-:10702000FFFFFFF6305FFFFF0C30C30CC30C30C313
-:10703000CF3CF300F3CF3CF30002CF3CCDCDCDCD20
-:10704000FFFFF4061CBFFFFF0C30C305C30C30C3A9
-:10705000CF300014F3CF3CF30004CF3CCDCDCDCDE9
-:10706000FFFFFFF2304FFFFF0C30C30CC30C30C3E7
-:10707000CF3CF300F3CF3CF30008CF3CCDCDCDCDDA
-:10708000FFFFFF8A042FFFFF0C30C30CC30C30C37B
-:10709000CF3CC000F3CF3CF30010CF3CCDCDCDCDE5
-:1070A000FFFFFF9705CFFFFF0C30C30CC30C30C3AD
-:1070B000CF3CC000F3CF3CF30020CF3CCDCDCDCDB5
-:1070C000FFFFFFF5310FFFFF0C30C30CC30C30C3C3
-:1070D000CF3CF300F3CF3CF30040CF3CCDCDCDCD42
-:1070E000FFFFFFF3320FFFFF0C30C30CC30C30C3A4
-:1070F000CF3CF300F3CF3CF30000CF3CCDCDCDCD62
-:10710000FFFFFFF1302FFFFF0C30C30CC30C30C367
-:10711000CF3CF300F3CF3CF30001CF3CCDCDCDCD40
-:10712000FFFFFFF6305FFFFF0C30C30CC30C30C312
-:10713000CF3CF300F3CF3CF30002CF3CCDCDCDCD1F
-:10714000FFFFFF061CBFFFFF0C30C30CC30C30C396
-:10715000CF3CC014F3CF3CF30004CF3CCDCDCDCD1C
-:10716000FFFFFFF2304FFFFF0C30C30CC30C30C3E6
-:10717000CF3CF300F3CF3CF30008CF3CCDCDCDCDD9
-:10718000FFFFFFFA302FFFFF0C30C30CC30C30C3DE
-:10719000CF3CF300F3CF3CF30010CF3CCDCDCDCDB1
-:1071A000FFFFFFF731CFFFFF0C30C30CC30C30C320
-:1071B000CF3CF300F3CF3CF30020CF3CCDCDCDCD81
-:1071C000FFFFFFFF30CFFFFF0C30C30CC30C30C3F9
-:1071D000CF3CF3CCF3CF3CF30040CF3CCDCDCDCD75
-:1071E000FFFFFFFF30CFFFFF0C30C30CC30C30C3D9
-:1071F000CF3CF3CCF3CF3CF30000CF3CCDCDCDCD95
-:10720000FFFFFFFF30CFFFFF0C30C30CC30C30C3B8
-:10721000CF3CF3CCF3CF3CF30001CF3CCDCDCDCD73
-:10722000FFFFFFFF30CFFFFF0C30C30CC30C30C398
-:10723000CF3CF3CCF3CF3CF30002CF3CCDCDCDCD52
-:10724000FFFFFFFF30CFFFFF0C30C30CC30C30C378
-:10725000CF3CF3CCF3CF3CF30004CF3CCDCDCDCD30
-:10726000FFFFFFFF30CFFFFF0C30C30CC30C30C358
-:10727000CF3CF3CCF3CF3CF30008CF3CCDCDCDCD0C
-:10728000FFFFFFFF30CFFFFF0C30C30CC30C30C338
-:10729000CF3CF3CCF3CF3CF30010CF3CCDCDCDCDE4
-:1072A000FFFFFFFF30CFFFFF0C30C30CC30C30C318
-:1072B000CF3CF3CCF3CF3CF30020CF3CCDCDCDCDB4
-:1072C000FFFFFFFF30CFFFFF0C30C30CC30C30C3F8
-:1072D000CF3CF3CCF3CF3CF30040CF3CCDCDCDCD74
-:1072E000FFFFFFFF30CFFFFF0C30C30CC30C30C3D8
-:1072F000CF3CF3CCF3CF3CF30000CF3CCDCDCDCD94
-:10730000FFFFFFFF30CFFFFF0C30C30CC30C30C3B7
-:10731000CF3CF3CCF3CF3CF30001CF3CCDCDCDCD72
-:10732000FFFFFFFF30CFFFFF0C30C30CC30C30C397
-:10733000CF3CF3CCF3CF3CF30002CF3CCDCDCDCD51
-:10734000FFFFFFFF30CFFFFF0C30C30CC30C30C377
-:10735000CF3CF3CCF3CF3CF30004CF3CCDCDCDCD2F
-:10736000FFFFFFFF30CFFFFF0C30C30CC30C30C357
-:10737000CF3CF3CCF3CF3CF30008CF3CCDCDCDCD0B
-:10738000FFFFFFFF30CFFFFF0C30C30CC30C30C337
-:10739000CF3CF3CCF3CF3CF30010CF3CCDCDCDCDE3
-:1073A000FFFFFFFF30CFFFFF0C30C30CC30C30C317
-:1073B000CF3CF3CCF3CF3CF30020CF3CCDCDCDCDB3
-:1073C000FFFFFFFF30CFFFFF0C30C30CC30C30C3F7
-:1073D000CF3CF3CCF3CF3CF30040CF3CCDCDCDCD73
-:1073E000FFFFFFFF30CFFFFF0C30C30CC30C30C3D7
-:1073F000CF3CF3CCF3CF3CF30000CF3CCDCDCDCD93
-:10740000FFFFFFFF30CFFFFF0C30C30CC30C30C3B6
-:10741000CF3CF3CCF3CF3CF30001CF3CCDCDCDCD71
-:10742000FFFFFFFF30CFFFFF0C30C30CC30C30C396
-:10743000CF3CF3CCF3CF3CF30002CF3CCDCDCDCD50
-:10744000FFFFFFFF30CFFFFF0C30C30CC30C30C376
-:10745000CF3CF3CCF3CF3CF30004CF3CCDCDCDCD2E
-:10746000FFFFFFFF30CFFFFF0C30C30CC30C30C356
-:10747000CF3CF3CCF3CF3CF30008CF3CCDCDCDCD0A
-:10748000FFFFFFFF30CFFFFF0C30C30CC30C30C336
-:10749000CF3CF3CCF3CF3CF30010CF3CCDCDCDCDE2
-:1074A000FFFFFFFF30CFFFFF0C30C30CC30C30C316
-:1074B000CF3CF3CCF3CF3CF30020CF3CCDCDCDCDB2
-:1074C000FFFFFFFF30CFFFFF0C30C30CC30C30C3F6
-:1074D000CF3CF3CCF3CF3CF30040CF3CCDCDCDCD72
-:1074E000000C0000000700C000028130000B815832
-:1074F0000002021000010230000F024000010330C0
-:10750000000C0000000800C000028140000B8168F0
-:10751000000202200001024000070250000202C0E7
-:10752000001000000008010000028180000B81A80B
-:107530000002026000018280000E82980008038031
-:107540000010000000010100000281100009013854
-:10755000000201C8000101E8000E01F8000002D895
-:10756000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC5B
-:1075700000002000CCCCCCCCCCCCCCCCCCCCCCCC5B
-:10758000CCCCCCCC00002000CCCCCCCCCCCCCCCC4B
-:10759000CCCCCCCCCCCCCCCC040020000000000067
-:1075A0001F8B080000000000000BFB51CFC0F00350
-:1075B0008AB7B13130ECE644F0E98159181818F86F
-:1075C00099C8D7BF1168C04E20BE01C4075948D71B
-:1075D0007F551AC15E26C9C0700A8827883330B427
-:1075E0004A21C4ED651818EE01F92BA16272403DE5
-:1075F00073A4C977F3281E3CB8D014951F620CA160
-:107600005F9840E82234F950A8BCB81E842E36C5D5
-:107610006EAE841E71F6A7A9A0F2BD55F0ABCFD512
-:1076200040E5C7A2A90F81F2017EE9B234D8030078
-:1076300000000000000000001F8B08000000000098
-:10764000000BED7D0B7455D5B5E8DA9FB3CFFF6421
-:10765000278470123EEEC400C1063C4280A0A83BC5
-:10766000FC1A7DD41E1025E5A11C446B004922A6FE
-:10767000D78C96D76CC8870450E3E751BD457BA0F3
-:10768000D88B0E5BA3A68ABDB43D887AA9C3DB2242
-:107690005AA52D7A83FA2C58A0B1572ABD4FCB5B3F
-:1076A00073AEB592BD77CEC9C74F47EF788D43769D
-:1076B000D6DEEB3BFF6BCEB95634D94FF22E27E422
-:1076C0001CFCD0A7291142A6F73DC92D5932C92368
-:1076D000E41B3E823F1FF923534816210D3EF6BCA2
-:1076E0003D10D905CF2D8D84A426C2F771491221F2
-:1076F000244848899A0B2D02B1870BE15977617CA8
-:10770000323E67C23387C8848C84F218FDBD20EBFB
-:10771000FB9C42FF399AA880F114F68AA8A43C96F3
-:10772000C2F6DF226446DF3C48DD57F578B86FDEED
-:10773000EEA7A26B24C5EB9E837F94E5598950E6A2
-:10774000FA0D47A5C79FB7D51F4FC2B9382F95A8C7
-:10775000382FDE9E108BD8E7E7EEE7A346F2F8F36A
-:10776000E3FBC32DD3B8026E6D8D3E7CB636EA24A2
-:10777000E5258436333B4BE93344CC5DA5FDDBCDB9
-:107780002312871F9F0F8C63D0FAF47F42E1DE9CA7
-:107790004B9241C0214938E0D61C5AEC33D3F42730
-:1077A0009E2497C2AD84CFB9A8FF7AFD302F0A0777
-:1077B0003FCC2B0D3C97C2BCA6F79F97BFD83DAFDF
-:1077C0006A6287CF70E7159844C821C0876A128221
-:1077D00078B9CDD19FAC9B56779AFE08A70BD5E020
-:1077E000EB1B229E822572DFF8000723E0A02F6F9B
-:1077F00034C7496F6EBA067820BE3A387CE20AE395
-:1078000007AB0F8FF4199A1D93803568F110E02DA6
-:107810009F30F8E557B7DE2A4F2194D53A0F4EA096
-:10782000F0CBEF5EB99040F9E8152780DF9ACBA640
-:1078300056CEA5F5B2CB63AF2CA04D423143027AB0
-:10784000DD0A9D15407F5FB32A68B909FAA365CBAD
-:10785000BACAB4106EA6036E1472864ACB1EF8B56F
-:10786000280DFC482F1EA473DEFEED33C1CF436C00
-:10787000F8437E5EEFA0CB8C78BF91E1CBA2FF01F5
-:10788000BE46101B5FD37EB22B35075EB25CE33C75
-:107890000ABF20BC6FFD9B8C97439EF41994CE3D8C
-:1078A000A5B29EA478CA26B16CB58CE263A14A4009
-:1078B0008EE5E4EA1290C360786926A412F89F4A24
-:1078C00007B2C826E77ECEF9AB60CDEE9DAD749CC5
-:1078D00033B34331A895AFD3B94EEDBF9E3B40BE05
-:1078E000786DE5B2E74802C7EB3C5844E76595C9B7
-:1078F000B18729DD6C2D3DACDBE5E3B15EF9E2A695
-:107900000F62A833B83CA0F0514A65D31FF9ECF4DC
-:10791000A17C4AFA08DFE8C4C770F1757A98F4F1DF
-:1079200059C71378EDCF571B055E7D847EDF52B2B9
-:1079300078407DD51FAF4F92046D172A2566324DD2
-:10794000BBFFB4EB0BF7D326DFDD72541935A36A06
-:10795000E74078CB75AE57F4EB6F508C7747D0A2E9
-:10796000AAA37CD5B81E688FDE63114A776740F6FC
-:107970005078281D17A5A04C8A49EC61D64D4AA223
-:10798000657FD44C6E413A48225EC4FCBC86EC90C4
-:10799000B36AAE530E932A4BB2CFDFDFA0E13C3483
-:1079A000182F17EC02DA2105851A2229A05B41AFB6
-:1079B000A092CE9D0F65A79DD1664C25E9F0A072DF
-:1079C000BC4B92A0D76F0D4DBEB8C75BE29CEF9049
-:1079D000DB8554E33DD1268D9CEE6BA792F7047EA8
-:1079E00028102F13761DC7D3660FD92B5D48E5C12C
-:1079F000986BC152209BE1D32C6A87C0932A9FCDFC
-:107A000063A6EA4057648FA4C23C71488A4742F596
-:107A10001DD40B4A06F623FBEA90FE9490894FF1A1
-:107A20003DF3BCD8F8BD655FA206F0531DD58C2D83
-:107A3000748E6B15D3D80874318DC9A7EAE88479A0
-:107A4000A0EF3C129BD7B7A57C5C879AD39687762C
-:107A50005906FBAE5AA52A7F2A7CDF3661207E229A
-:107A6000494F4FB70D9E6E7BF06689DA835FA2BFE8
-:107A7000CC2433018E7F8A2DCE4A0D80AFF71B0FA9
-:107A8000EAEAF83E7BD0FD7DAD42EAD2C98156C913
-:107A9000C7F8D26769601F8875AF0576A720DD1625
-:107AA000DBC4D69B9B8BF05DBBE717BA6AE3BFB51F
-:107AB00054CD78A7F65F8F80B7E8A7B77DF2A0A373
-:107AC000BDBB5D6F7F425E507B18E85CD041504A81
-:107AD0006C95E87B6F6CB105EA6CED63150CFF19D2
-:107AE000E6DF8BAF4F397FD16E30BAFAD3EEA656B0
-:107AF000D04FEF691D575D4CE9E8F74F28B14DF4C1
-:107B00006BF58E89F3C05E7A8FD3B7C0D389DD4D14
-:107B100079E9E823139E7E21F9711C415FD5F2F2C9
-:107B200001E96130FA7ACA4D5F9D577F21F475C82B
-:107B30004D5F1C1E273BD9FAC9FD23185E38BEDCF9
-:107B4000F8C988974FDBAE3F3DFD5AA27CEDEDBCF6
-:107B50003A3D3DF1F90A7C7DD6F90E4647798669B2
-:107B6000EA74FC51D48E91407F9491588ACE53A7E9
-:107B70000FD45B31A6B7845C12ED4F4BCC4E53C98A
-:107B80006BD85E21294B477BDB6967CC57E84BDA22
-:107B90004F7309497A715F64FA504F95A884E93FA1
-:107BA00033943F03EC08FEA3CC8EC1BAB3C0FE07EA
-:107BB000FD359BEB5F89DA5B747DA132E7BE37E070
-:107BC000B23F14BE5FE8676F0D737FEC97F9FE3824
-:107BD0004842A88FC4FE38037FF6EE8B395C476AB3
-:107BE000C494E9BAB5839EE42609B41B41FD4C8ECA
-:107BF0004A49E62F20256037AF970A62A00FE83E7A
-:107C0000AF278B7E7FEF070AEA878668DD8A1658E2
-:107C1000F6B50D13BBE9B8F7349269C59EBEF1EE17
-:107C2000513B7C00EFF6E2F50EBBF6BB52A250B61C
-:107C3000E91D7F549B563C0D8653DFEEA6F090293C
-:107C40002081FF02A1FBA22F18003FF6BE174EF6BF
-:107C5000B2D2BF9C0B364F011653B02F6DA7B63B67
-:107C6000B9188AA3A50A4A07ED1EFEDDFA4D05ECF8
-:107C700077DBFDACBC63D3AC8D169447F2FA561596
-:107C8000FB9ECFCAB76DFA4105EC0BDAB2E99AA9AF
-:107C9000BE6EF324ABE269F8FB365976D85F4DC669
-:107CA00082F2FF43D7E1F79917BD40E1498112B352
-:107CB0000CD26B97150ABF41C7DD952500FFD7147D
-:107CC00002F4EC3762F19B0CA43FA47B7FAE19DB7E
-:107CD000424B0DF4850CF528DE1E96605FC7EC3133
-:107CE000F0E79C43FAA57C41BFAFCFD6B13ED16D42
-:107CF000F659519F3DD68B2717DEEE557BFC80B79A
-:107D0000EF8DF9F01713693FD642390664F3BD0DC4
-:107D100045D92B6D787CCC37A70AF0489A73D12EC1
-:107D20008992DE1F13CA62DF5C403A2BC0781C4385
-:107D3000251FA1743A2EDE53012830AAF4E7708F74
-:107D40004BE6E9EFA15DA548E7BE34743BCA0D07D9
-:107D5000DAE3A845543E8D90483C9DDC5DA9E6A041
-:107D60003C185149D73B809FE09B549F30FB2CE14E
-:107D700003FF56A67132CDF333C073934CC71D4D2C
-:107D80009208A7C1E09A099EADD127B3515E7FCE7C
-:107D900070CDD4DE0DCF1112E397956A39F2CB5036
-:107DA000FD3B6D7C3FD5027E38FA6CE27E38777BF6
-:107DB000BFDA416269F0EB379CFE210DF625B67201
-:107DC000BD6C307D1072FB89189EDD7A6101D70B86
-:107DD0002D51AA17983C5C087A20C8E1DF02BB7ECF
-:107DE000909F6192B4E8F720F707915226FF7DF447
-:107DF0003FE0B751554E7DA00D511FBC2BC55F9084
-:107E0000910E8904F3BB5FEAB86202D04F3EB3C75C
-:107E1000A337B445133638D4CB4CDF097D962C16E6
-:107E2000FA8C20FCCEE37348920E3FE8C307362C51
-:107E3000CE42BFDD8D41871C8AB62EC6FDAF8D9E1A
-:107E4000D12FDAC1FDA399F0A76BC9443A7958A89C
-:107E5000307918317B52E0F34342CEE32E434ED6C5
-:107E60000CFEC4B10F8B4CED39783E5DEFCE8BE448
-:107E7000D826DA4E9DADA63C14BE6AF98B55127D0C
-:107E8000EE2C64F0B76611A4D390B1E08402FA58E6
-:107E9000ED467F4DA8D2BD2FB69515E8A7E77AD459
-:107EA000DF763FF500FBB8A13E9B28BCDEB6F13F74
-:107EB000855C4AA1EB50371003EC09D5A4223102AE
-:107EC0004F3D0FE8453563217C765754C2F3BCD94A
-:107ED000F14AD9A6075433BE05EA8FF8CA7DEDB042
-:107EE0005EF526595624C6073936789B4AA1633F6A
-:107EF00097ADBBFCA589D62AD4EF8646C617F69F58
-:107F000077BDAC72B9E7A417412703C8BBCF441FA4
-:107F10006FCAC25FEDC4BF834E8AFAF02BDA85FACE
-:107F2000F9AB9CF875973F6FBCFA014F141FE751EE
-:107F30003C017D9E379BD123B547D17E7AC0D76166
-:107F400002BC1F2836644BEA6B175672989FF92CB7
-:107F5000DD6851BBE7FE95DB4D68975F4C6580841B
-:107F6000CFB4FEA37A59C376542E542ACC6E97C050
-:107F70001E9FAF6CAB82F63B295E81DF77027F43A9
-:107F80007C20A1A11CAE97DB2B36D2BE5B8F4AB200
-:107F90000246ACBE14F1EBE7FCFE912751097EC806
-:107FA0002DFF4B26BB0CD04B03FBBD9A38BE4519A9
-:107FB000FC0D609F8CA9D3A702D833B5DB5E275791
-:107FC000A65B57B5C2F07F47DDE10E344F9F77EED9
-:107FD000473CCB4DA048D897542B36FA0E97317FAB
-:107FE0000749D0F5407D4E371F150E4CAF0FBAE64E
-:107FF0003F96C753DCF55E56B8BFCE60F03244FF03
-:108000001B07EE5FC0E76C9BC2E323D40043221E34
-:1080100049ECFA5BB9F15005BCA75CB709F0B55D56
-:1080200026D5CCDF1C473D14E1E3ED2CCFC1F60B88
-:10803000552647C79AFA16C0F7D866192C05F2B824
-:1080400062E0FB51CBEBF67B281EDA0B492C64E097
-:1080500010D8EF8BE335A4CBFC5CA6C7F2EB290963
-:10806000D07AF9A52469D0F6EDFB1FA8D068394273
-:108070003754600AFBCA193E7D252406A690C72204
-:1080800029997D4F424C5229EFB140951E183F036C
-:10809000F75F77E69298D7E8931B82AEEE6CBEC787
-:1080A0000F7AE481E27BAE9800FEC65215FDE4E44F
-:1080B000630A27E14F54205E163761BCF6596CDE27
-:1080C000F40DE253D5D9FAC7DC3F1BF9A43DFC34CB
-:1080D000CEC35A4762E3B15E8C60FC860A54F05707
-:1080E0003655337BD78D8FF524F1B832DD4EAF870F
-:1080F000906EDA3F51F8BEE0C58D60E78F835F690F
-:10810000F9974D7FDC381CBB45C40F85DDB245EDCA
-:1081100044BEB728CF815E12768CBFB813C7FDBFAF
-:108120009CDE87DABFBFC4E96F75DB356E7BA65E68
-:10813000D61DF6AB7B5D1F795257C0FCB6E4537E6B
-:108140004FA3077E03FA9AB6DF115DFCAB89465F49
-:108150003F7D72C8C0EFA23CE6AC86F8197A7D2A52
-:10816000F7608F6632BE1A2BE4D037285F0D107F80
-:10817000147CF511151287804FD40EA42F6296201F
-:108180005F097E51BA3BDACFA7F460D4CBE0B906E1
-:10819000FE2239B45C48E93D65B38784BC504B3B53
-:1081A000E313A5FE74F7A021231ECF94317F7596AB
-:1081B000D56D4293606927C6F5285DFD17D095AA55
-:1081C0002725C0EB98FB17E0BA7EA93056F7AB2CF9
-:1081D0007EEC5EC7CF397C89BE1BED793F1B8EB22A
-:1081E000F87D31363F579CBDFE5703C6D9FD319708
-:1081F0009D334C3F428ECAFD08DCEF3558FBE1C68B
-:10820000D795B323903E7ACB19E4ED4D2AE78BA3A3
-:10821000BB1C70E9070F65476CA0F9F9859FFE53F9
-:10822000C60550870D010E6E385EA23AFD879F3756
-:108230001CDDF1EF97B8DC1F4C1E044D33252BE0FD
-:108240003F23CCBF1322DCBFE3A4F79DCD32DA215C
-:10825000C1B0BC134CC9ACFA6ED4C1627C4AEF55B4
-:10826000AA8DDE47971E4A413BB73ECAA4870693B4
-:10827000B7AB7CE60D2ACAADF4FBF1BE7C03CA2580
-:1082800069F20D32E2B5EEF3C937182ABC7BFD9BCB
-:108290003C7FE0867241C7C6D2DF51B8AC3EE821D0
-:1082A000E897F998AECE16575BCDF78137F07DE4AD
-:1082B0008D241E818FA7885C09FC728A1C8E4CB3AA
-:1082C000C993FB548DF14B9BE76DF0AF8A78F94D64
-:1082D0001DAC2CE673F3FDCEF2D7C9E23CF0EB7D8A
-:1082E000FD3E0FE26BB5CBBFD6AC32FD7133A96B4F
-:1082F00005BCB5784815C8B11B74A28EA0A6EBBA10
-:10830000671E9CB19296BFCBED91F7A95C366C715C
-:10831000D035A1A406F87DA76BDAB59710689F6CDD
-:108320002D807D5A36C17DAB1BCEABDA9CF31B6C26
-:10833000FEEEF952F2C2F9669A87BA474A6B4F3F8E
-:1083400022E40DC757A6BC2A914FF50B20205ADF17
-:108350009A43D8BEF3AD60B209E535CBA71AACFDA0
-:108360002F55463F9FB6FDAB83B45FE7EB5900CC7A
-:10837000D6966BC5C12F24E28235A4CE1C4D7F5505
-:10838000F72DB246135BBDE810EB150F5C2FD3BC85
-:108390004FE83E4BBEB06FFEDF9512C7D434F3BF3B
-:1083A0005D49D440FF5EC083024F15F18D7E608A27
-:1083B000DF5A35D4266541BE5317EE03FD86EAA089
-:1083C000875AF805E45A09936BC112E777B77FF82B
-:1083D0004355C4E153C87F188236C07E08A514F007
-:1083E000DF94AB277BEBD3F16A605D1742298E7275
-:1083F000A35E67F56B8871D7EC32E43F8C3FD4B74E
-:108400009F8F71F5FA9106FA77551233B10F17DD88
-:10841000D59E9548D2A60F6BD51E0DF8AC96DA45C1
-:10842000F6F7EBA38AC34FEB7E7AA8E51C2A817D81
-:1084300092CCFC483A2DDBD6FDA70E89E7AF185940
-:108440004B06F0DFAD8F327FF00DEDE3B398DFD058
-:10845000297F4F3732BFDCBF3DF67D0DFCFCA71EE8
-:108460003D7615C07BEDBF2AC407F91B8F85490AED
-:10847000EDB1A406F6D89A2EC54CA6CDAF6862F130
-:10848000CFC7C388AF354F7A930B69FB354FBF33E6
-:1084900085D0F99DDED4F3E268B09B1F95581E820B
-:1084A000D53DE56AFA7E8D4A56A4F31B4CF630F9A9
-:1084B00073F2D96015F0B7B467FFF5D86FE7528F44
-:1084C000D7B6DF2EF678906F693D66973F2225C7B5
-:1084D0004BE9E6C7F23F4E3E22B1F9EDF524FD30FF
-:1084E000BF3D3BB5049D47ED9E0F509ECC7DFC8764
-:1084F000118043ED5EC5A1076AF72829EF147C1EA1
-:108500008327C48DA41940279C5EBAD661BCA8A657
-:1085100073EB07E0C7A8DDEB946B142EB114C0F524
-:108520000D25B610CA4FFD4BC4A0A07AFFD0C311D1
-:10853000802BED77A59605FAC649DFD0FFD99CFEC2
-:10854000FD11D283F1BADACE76365ED7577E0F7A36
-:10855000A5D6253FDF875FF2FBDB33D7785CF6CC0F
-:108560009EA1C5EBD6FEF0CC43161DF7E4937F78B1
-:10857000C8A2F3BFE5AFFFF9D0B7803F7FE6D74190
-:10858000FED73EFAEB08B1D163AD87F1E3E9B1C4A0
-:10859000A27B5472FA37DE24F84B4EFFF4F7E30C5B
-:1085A000BAEED34FFC25CFA0F5EB7F3A7F14C0A1E4
-:1085B000FEC773470DB4FF067A4D7AEDF34A225E8B
-:1085C0008DBD123382F6F1A70B3F07BA0E8C83796B
-:1085D0009E3AE28D81DBB996BE6B980AF85A87FA0B
-:1085E00018CA1B289C6B1EDBFC01C889FEF0B6462E
-:1085F000CBE8AC4F8D06A77D4DD73B0B106FA40782
-:10860000F5A8BB7EED6B149F1766C6DF19F2B106A5
-:10861000F2AEF6B176365E27C55FA43FFE4EC12F9F
-:10862000B3FAE3EF0E17FECE905BBE970F798D5D28
-:10863000231C7152F1EC8B0FC6B3E203C80B210F60
-:1086400006836FB5C4E6B5CC633EE801BE7A32D886
-:108650008BDF8580DF1F9E1947287D1CF7F45C0F98
-:1086600072B3E7A75E7D177DBFE6A76F209F9DFED3
-:10867000F12B9A81F9992424E5F13C31F67308E451
-:10868000700DDBCB91DADDE19437D287A79AE4A2B3
-:108690004A2382EF8FE1FB24A3FF9AE4FE25521ABE
-:1086A000BCBDE1296276407224C265DDEEDF69CC93
-:1086B000BEECC3A7540EF83CB600DE67C2A758BF95
-:1086C0000EEB9F69C3EB6EC6B7EEFA35943F41EFF0
-:1086D000F5C36F527A039EA7777A55D07BA7C1FE68
-:1086E0000AF5C77B1FFC99FD33DCFDCA2B6EFE1615
-:1086F000F1630E87CCF461713B60E0F50D177E3FAE
-:10870000F7180E3A12703CF9717AF97F8ACB8D1AFC
-:10871000625516D8EC139F87DA27905F46E2D6E8B9
-:10872000C2BEF99E847D04A5BF938F2A18AF69ED60
-:108730003C8072DC2D2F6A48FA7DFB5F3DCC5EAC3D
-:10874000D9BB7F0AC8B593CF3D8BF459F3D8310D0F
-:10875000F62F2FEE794AEB2EEDE307D00F499B7EE3
-:1087600038F9A3FD53983C48BFFF0D6AACFFDA7D92
-:10877000CEFE6B1FFBC0D1FF5AAB5363790C038F46
-:10878000F3BE6A2E85F5BE7FC843409EBEDFA9A416
-:10879000F5BFF670FD28E0D4FACA82DF419CBFEC39
-:1087A00070C0003DDAB5C91C7507D86B873D04E47D
-:1087B0003751CD3F7869B9EB9500C633BA0E5FAB40
-:1087C0001836FFC4332E78CE7CCD9A1BA6FDCDEC97
-:1087D0008E97C116CA2D37CA8FD27DA3DD7FF54A89
-:1087E000E52890FBCD60CF4F84F16251F07F289156
-:1087F00005952C7F50D6FD69F537EBCF138A63BE04
-:10880000A047977B7DB6488F62BFC5FD4DADA1F4F3
-:10881000FEE8059AD817D0716D7290DAAA55E9F082
-:10882000364B637648A6EF976ACCDF93E97BC52089
-:10883000ED7BF99BE3470BCBF174F39EC6FB71FB19
-:108840005733C9030FEFA74C331CEB05782FB2E564
-:10885000C58F26C98D90274A4221773C3AEEB3C78F
-:10886000A3AB0EED87F873EED5FBF201FE11D2AC8F
-:10887000BF87763C899D1BC08E75C79FDD7989991E
-:10888000E2D1BE50CD9114E9DF5FFFF8BB897928B2
-:10889000CD63E6F90A6DF1F766BD5FFC7DBD46C7A5
-:1088A0006DC9808725DA9C7FD280BE649248F77DAF
-:1088B0000BA79BCB49F7532B619E3116BF9FED82CF
-:1088C000D7A51C5E3F3B9F2E9CAA9E0A62A81E0A4B
-:1088D000DFB94BCC661081F397F7ACDD0F7C26E255
-:1088E000F7D644F95C70E8F01B6E5EC42ADFE27BC9
-:1088F000B521E445103D27AD5EE89B87C5F755518E
-:10890000DC2779389F1D78F3661FC82D95242A0B24
-:1089100061BFC4E39A986F4FFBCB4BF98949E7AB32
-:10892000E906DADB79A9D50FDC0471757D0CC62365
-:1089300094B397A0FFD0DDAF128D59980F16322A4D
-:1089400014DB38ADB92C3EA3EAF1B479C3ABB4C49F
-:1089500013B05EE5EC65D8AFEC8B613D121A5ABEE0
-:10896000EC77AE8E207C7D14BE201F1164B02E9E4D
-:108970003775F7D511D433FE839E9DF0DD1F6279E4
-:1089800054B7CB8118E459B9F3A82ADE6A27D05F1F
-:10899000EB3109E328827E5B0BEBCE03393E401EB0
-:1089A000D54B9ACDAF9E298FCA1FBA11F3A8FC9F51
-:1089B000368FCA2A9807F6586B361179559644E7D0
-:1089C000D1CAF3A2FEA3F5A5B9A09F5AFDE2FBCB45
-:1089D000734D7BD95A7F00CB3CEF6AB4B7BD09EA2F
-:1089E000E78E26759DE8CF33C93536391BF1AA08C5
-:1089F000E77FD6CC7735479E7CD4115F3AF0E666A8
-:108A00001FE86FFAAC2C02F851BA02BB3D2FD54ECD
-:108A1000ECFA483C051DB5160F1CBF53CF5E847E93
-:108A20007C51F6E949D34C537FBE8FD91F827E7D9E
-:108A3000B924097AC967241EB809E83937140B32FA
-:108A4000BAC438595B08DD53FDD6D1567C03C6DB6A
-:108A5000CEE804B95ED071FFF95FC6E75F64615C80
-:108A60002244309E96791D65B88E559A19F6DAE043
-:108A7000987B5EFABCD4BBBD6C3D2DF1E52CEFAC10
-:108A8000DA198715791AA27E504A1478411EE6B287
-:108A900038ACEC63FCD6872FAA2A6CFECD26B2DC5C
-:108AA0000212509777E2D146554F62FD127FE27C69
-:108AB000AF233ED7CDE2BAAE78E27CE516C6DF83BF
-:108AC000E04F9CCBD80A71B789109F8BF2F37D06DB
-:108AD0008FD3992CAF28033DB5150F1C87EA688CFE
-:108AE00061FBBB1ACB59BE9244B85F3BD9047402F8
-:108AF0006E0946F73F6802BE092B822F7E88E53B50
-:108B00002556BEC9FBCC5CC8373CF0E61B55AB28EC
-:108B10007DB49A01E4FFC1D6A72767205E873B4E4C
-:108B2000FFF5B271DBCC10EE77075BB79E62E30E08
-:108B3000751C115FEB5B9F0FC769350619A7838D05
-:108B400033F8FC199FDCB17F35E62FF828FFFBE9ED
-:108B50007BDFEC1E9248D37F16E79F036F7A515E4E
-:108B6000B7E5B2FC284F49C8644E4067FF9ED2BCAF
-:108B70003978DEA1EC02CC9FBF637F3BCA190DC6DA
-:108B8000A1553CB1D04AD62E61C239DBC83C82F136
-:108B9000674F49DE2A78DF403AE273400F97CB2CCB
-:108BA0003FB9A4E426E8271BF892CEA3DCC7F69DC4
-:108BB0009E928B6F86FAFBA7BF9E68023895333A68
-:108BC0002007F31D706C358AC4B99D01F9DE53EEA0
-:108BD0008C5B109F33FF93A84B306E4EE54287D7D6
-:108BE000665752BD781FF23329B3C0DEDBFEB56B8A
-:108BF00063767EFE672DFE1D565FE46B093E4F9F38
-:108C000037D79A2BF2E6123EA50CCE29F5E6532F64
-:108C1000CCB7E77FF17CEA90C8A7E6F1CC0EFA5F0B
-:108C2000BAFC39F739C6CF2B9FFA292FDF0F07C9B6
-:108C300058C8A7FE8987C4529017F36B250679316F
-:108C40006EFA70F7E73E07D06B8F64E0E7F7013804
-:108C500036B9979F70E1ED463FC6E7C478CF837C75
-:108C60002A1D9C4F47573BFB195BE73C9F755E8372
-:108C7000335E55681538EA9FDF56E4F83EBEE302DE
-:108C8000C7F789F74F759427252F76D4FFD29E39E1
-:108C90008EF2E4CE2B1DF52FDCBBD851BE28B5CC0F
-:108CA000517FDAC11B1CDFA71F5AE3F83EF3C87AD5
-:108CB000477956F7371DF51BA87902F92C7040004B
-:108CC000F7ABDB46CB76FA6CCFA67A250BF3B8353B
-:108CD0009ED48FF166968BDC9767E06EA7146BA627
-:108CE0004EF9573126CCD331CFF046E423A5386F67
-:108CF0008E81EF672C00BF132963E7B444FCDA537D
-:108D00004C527EC8EF0BB9F0EB8A4B7B946D29C0B7
-:108D1000B376F4CB07A5487FBC7AA2EE7CC6A1C58A
-:108D2000B555E3B3E507E4F9385F8CA57C817EC4D3
-:108D30008F15D8B7907961B40F6CFB1B84A3D8DF73
-:108D40005CE623CD0053C11715CB7B46BF80D5C44D
-:108D5000BEC62B0F272FB9BF5EF1A2DD25E4CC6084
-:108D60007A45494E73E421B89F54FE95F9609F1EE1
-:108D70005986F2A8775FD02B1FE333E1BB478DA163
-:108D80007CEC957F7B0A1C7261A8F6995B4EDF052F
-:108D9000421FCF05A597D711C80BA372E9CEABAF81
-:108DA000C23818A9278EF3807955711FE83D6A975C
-:108DB0007DC567DB3F47CA997DF6F766A78660BD2C
-:108DC00036F927EC5501D7118575718CEB85650255
-:108DD000FBAAA6D9B128F801DBA08A6D9FF65DDF5A
-:108DE000F958BF39A4C9E02F6D3E381FE3035E7FF9
-:108DF000DC0779CE4D9E7825ACAB295BD6D3E53B1D
-:108E00006DF631FF8CD6109CB67B00FAD034BAEFE9
-:108E10004FB3DE7FF131BF4BB3BEF820E8B99CB051
-:108E20006640FE44EBFE598B305F77A1AAC3BE9625
-:108E3000D04DDC3BB6B8222171F46769B932EA45FE
-:108E4000AD2182E30F36DF5B7DCCCFE06DF00F38D4
-:108E50005FAF96DE4F9169BE9B61BEB983CFD70BE2
-:108E6000F39560FC108EBFC9C7F0E886BF87986D88
-:108E7000F368BD96635FEE28468A61F97AF72E9C07
-:108E80008A744A05B5837EC53E82D2EFC340BF6275
-:108E9000FF2ECEB3DEE263790902AFC460FE881113
-:108EA0000915F7BD3909B6FFED931F8C8E723C3161
-:108EB00082E7BFC6A8189704378DDD8FA1F8D9BE09
-:108EC000C77B690CF1D5FE15956C027A2BA6EB8158
-:108ED00073B90759DCA9DD13AB8A87FAC613EDDF36
-:108EE000E1FB40952CC9C27B529485D174F6672F63
-:108EF0009D73B8B9E5EC011FCFC3CA27F94CCE96D4
-:108F00002E85A34499FA71DB1B0DDCAF3CFCF329E1
-:108F10001D08CFF631F7A11D2DFC63245A3688BFFA
-:108F200087C54BFBF0BCD448513CAA574C45A75FC2
-:108F30007B31C7739D2B9F97E359E057F8ED493478
-:108F400017F95AE05B017802AE94D9D181F495C249
-:108F5000F9C60DCF53FF4DE17904D600743B96AEB0
-:108F60001FF8E6C01504E3602E7E14ED04DDBBD7C8
-:108F70001FF6FFF75EBFA087CCF5ADB4FB0F11D78E
-:108F80000D737AF371BDF942F9DB6D709E44CD65C6
-:108F9000FBDD7079F3AD329CC320960EFEB5B03880
-:108FA000BF53E6BC7F2450EADC7FF85CF74D78F8CD
-:108FB000FEA3DFFD2ADCCE12E7F9DDF377E36BAE2B
-:108FC0003F7D1E261993DEEFEA8EC789F886C88397
-:108FD00015710084035DBF67961C47F95746CC9D09
-:108FE00069E4D3323FD30B5DCFF9314F225CA5A1A9
-:108FF0003FB6A02C5501E5823A12033D71F1F143D1
-:1090000024413BBD20C0E47E41595202BF47C149C3
-:109010009617B89DC72B0BEA93D24ADB38969FE987
-:10902000AD8FDEBC1DE5E37363595EFA6D15CC7E32
-:109030003B14BDA1A302C62D67F9E461BA5F84BCED
-:10904000B1F0116F12EDADB26E027E54AA05AC30D4
-:10905000FD7EBC914CBD713CE47DF9F079B251C705
-:10906000E781B1DAFECB69BDF5850103FA6D290A06
-:10907000B0F3BD611FEEF7FF9CFD75F4AB9E6E8CE7
-:1090800062FDB66F9B685734EF3F817EC3A0392DD8
-:10909000C6FCA8A642CA613E874CF0731035662C08
-:1090A00086EF077E83F5142DF11B0BEC93651AEE0A
-:1090B000EF010E104F68F2B37CB9CDFEBA68363CB2
-:1090C0000BC98A4569E0BD82EB1D4A518A96D79744
-:1090D00087A495A7942CF02797914EC873F7B424D2
-:1090E0002B404F93D5BA01E38CF1252BC07F3CA6D2
-:1090F0005A8F810F5D2B67E745043E3C7E127F222D
-:1091000004F552D2AD74DC89011DC7293892C4BC64
-:10911000E58FDE9C99D6FEBFFD68057EDFD65879C7
-:10912000789E8D9F4319E2951B8BE73CE0A7E3BD3A
-:10913000EA67FC9AA95FF11C6ABFAF723A39F0E6A0
-:10914000C451605F3664C8A356748AA7114C3E812F
-:109150003F62FD78635476C8DE0F8387F2DCB30C80
-:10916000AFA58C3E9B7E3C310BFA7DFECDA53AF837
-:10917000FBFE945B8CFB86534F7B4DB05F4EE590BE
-:109180006ACCB77C7AE68BB03FFC43E3C11CD526A2
-:10919000174FFDE895191EDADFA9275F99A1227301
-:1091A000251D76ECBA73AFCE003BC19A434AEAE87C
-:1091B000B356D708F45BEB63EB107972DBF3B4566C
-:1091C000785E19CCC6F679A3E43BA1ACF85E1DF736
-:1091D000EE345C378B2BF0380E5D5F5308E95AA7ED
-:1091E0001B1088175ADE7110CF7AD38BF4F75121F8
-:1091F0002929BC10FC820AB6EB594D92904FA1A5CB
-:10920000EA803D89FFE52401BE09BEA6EF475AE387
-:10921000F7C1DDE9E7F90F3C8F70E39BB74F04F826
-:1092200008B9AECE2518CFE8F99A2F09F6E83DAA7D
-:10923000F19DE560075EA7E23C6819CF1BB9F1B369
-:109240003C58E488E3E5F0F884C06B263AD9DA4864
-:1092500062C514DE3F6BF4C560FC7D8D3A967FD20B
-:1092600018C5F2DE46039F4F3796E0B3AB3186DF79
-:10927000F73496E353E4F5E1D65E417B3A5E017A3A
-:10928000E81AE687D30DD9847C852C95F8E0BE26B4
-:10929000FDE8BF55C17E1BE44A560EF2BD04ED73D6
-:1092A000799EDFC8FC39ED15469F7C15F2B4C943A1
-:1092B000249047D62CE66708437FB47DEE1242DE49
-:1092C000B6C9F573F49FB74BF8FAE87CB24CE77770
-:1092D00077FD884A1790D3BF1D958B58EEEB373D2D
-:1092E000FC86FB047FF9DB36FADE3E9DAE9AD2D1D6
-:1092F0007689C9B13BF9F73BA6CFC8BA01CAB366B4
-:1093000064815CDF3E8B183A85E35D866C79B2FA46
-:10931000EAEF683C98376F3CD74120A7EAF59D5BA0
-:109320006CFB9831165911B7D1CB5D756AE52EB437
-:109330003312F98B2763BE31F76BEF9E678EC17EC8
-:10934000B13C21F0E23C8BEB159033979D657AA8F8
-:1093500057FF7CCCDE0BBDA771FC6F9BBD4989001C
-:109360009F803C057959962073E83C4397B2F8F703
-:10937000AC775304F2FBB4187D0FF6A8C6F24D0A81
-:10938000A24909CA3FF2C7670620EF3DE7FED42E87
-:109390008AEF0FBBBC06C41BBB9EFB0BE6672853C2
-:1093A000341FF077C1BE6398B7A4C8DD1AEC789774
-:1093B0000526CF57C19E8589607C802A6A8A6725E9
-:1093C0008FAF8F3CD5322F04E7BE1227ECF5B707DD
-:1093D00012B7B21D33317D51CA0F7ED1FE82168085
-:1093E000C7560F2B2F0B4C6AB1B04CEB67B37233DF
-:1093F0006DBF35BB332A6743D2D4C4968397425995
-:10940000D49FD862CD26E41AAE0F48285108FCDE5E
-:109410005BD669396C2BABAC4C7CEC29D6BBEEC06F
-:109420005F5E1C4DE150B34FEAC410DFBE9D12AC2D
-:10943000BB60EF4E94AF054982FBFE82A49484A3E7
-:109440009D7B1A0FEACDC2B926F04245C3A428BBC2
-:109450005F484B7A62B0BD9CC4EF0F1174F17490F9
-:10946000E9C74949DADE1E9776DD273289DF57835F
-:10947000200579B98D9D0776D37929EFAF81585BA7
-:10948000E03C2E79CCA3637C9CFBD94F0ABB89FBC3
-:10949000736EE10E3CCF262B7001C8BF952AFA816E
-:1094A000D7162637521B8AAC7DB630462D56D2E2EF
-:1094B00067F4B236BB336F2AC5674BB6B3DCC4F36F
-:1094C000E7A3D956369CD7ADD97BF738C8EFA92189
-:1094D0001DD77F13E6FB328B879FD83F2BEB125AA9
-:1094E0005EF7328B63ACEB7A4503FABE27C0F38E8E
-:1094F000BA2EBA12D657B34D267221E34B73229D72
-:10950000AED971019CAC7B7EEB5BF3FD630979A462
-:10951000C8D4E58B08E90E9E68F151FC3FA2E9939F
-:10952000803EBA833D2D405F6B67C99C9E7A5E305A
-:10953000559EFF5800E35CDE027196DDCB2AAF0436
-:10954000732B4F66FC4B0912E3DA4A76B30FECF942
-:109550003FB6C8683F838B7403857BB14A0EAAF47B
-:10956000B95DA3F8043E6B55511ED2F76D1EC44B76
-:1095700007DE3342DAD83D2DE3F77957829D5D5CF3
-:1095800067AE467B5B2F453FC038D2FB837912E73D
-:1095900011267F27EAA442A5F566050B117FC55564
-:1095A000D7AE85764A784900F83D4F495AD8FF77BB
-:1095B000991CDE2E273B7D2097234588DFED114641
-:1095C00017D63DA54817BBE53917805DD422ADDC21
-:1095D000F20BC06B76119E7B85F7EB61FD1C9F4DF6
-:1095E0007ACC07F8DBCDF1A9EC942DC8D714EFB7EE
-:1095F0004A37AC06B89ED8523FDF47E19AE735DBE1
-:1096000046503C1CDF52DF129D857828F2D1EFC70F
-:1096100003F52D3E8A97DD1BCD02DD569EF8099598
-:10962000EA48B4F52DE66CF09FDCB7069410FDFE19
-:1096300002F83F1EC9117CCFBE1717F5CA1113ECF3
-:10964000D226AB4FAEF8A85E28B6D59F47E5C20F2D
-:109650001E5210AFFF4EC7033941D76101DDF74CF1
-:1096600052D12E08D0B904683930B908F36DE9BA7F
-:109670004900EC86C92AEA7911C7D126C96837435F
-:109680007DA087407E11E6CF51791D87733E4A94B5
-:10969000C5751465874979980479FEBEA42FC2FB6D
-:1096A00048FC25B6BC0290BFAE3C04C5551EEFED8C
-:1096B000CE97A97ECD3DBA481A47F1F25E80EF8B76
-:1096C00072E93E96BE7F3FC0FC40B7C7AD2F43BE98
-:1096D0000C31BAF3593C2A3E159EA3AE2B1E359091
-:1096E000FFA5FF7E3586F6CBBD63D4B4F960FF1AC3
-:1096F00064FE41EFD862BC57A38150FE07BE08F15B
-:10970000FBF2B8FCF0707BC17D4E40C8134F365B56
-:10971000637DFBDC5139A1BE73704AC8F4813CD82B
-:10972000AF4FCD027B743C9753CDA9595F05BB4524
-:10973000E5F260879F9DCBEDC9269DBB08D8BF3160
-:1097400062CF4B10F2605BA30F9F0F5F3601E39770
-:109750000F5F963707E215072E7E1FF7BF6776303B
-:10976000FE3D73E805B84B899CB1A8B6311859A1E4
-:109770005F3E752FDE17F27D357E17E6CB43BE0EBA
-:109780009DD25DD9CE3CCC47395CCE0578DE808752
-:109790007D17F778A867BF847EE06D7C3DBEC43C32
-:1097A000DC57821B0FCE1DFB4907DEC724E0E0BE5D
-:1097B000BF433D3B85F9EB036C5F2AF297DC794AA6
-:1097C000623EFB8219EE3376E143F835041E44FB1A
-:1097D0007AC91CA50F4037B5671592B4E585F49D8D
-:1097E000DBD0F0FD6938EF9205F7AF243A2E29045B
-:1097F0003E48A29DE80F353BEE712551B5C77EBEB0
-:1098000024E83AEFE2E617B83F18F4B4660C7CAEF1
-:10981000E57DBACD1579B998A7AE9207C0AE3D15D2
-:109820007C6B06F8E36AA998005739512D3C4F7AB2
-:109830009AEF4BD47DB7E2791E313FE18F13E59A61
-:10984000BD8BD04F57BB3B84E7796A924C0EAEF389
-:109850005907BDB23DEFD64C41BEAD672FEB6F3C13
-:10986000E080D2C7877A753EAC3FD870FE4C38672F
-:109870009227D79D370EE0A3323CC07EF9C9109ED7
-:10988000D355BDB6FB53DFE2FBE365DC1E09124B8B
-:1098900006782A8158376167164D95DA474AAFDC5A
-:1098A0009BDC02FCB0DD656F6D0FB0726B70724BAC
-:1098B0007329EA67948BCB023F437BA8C52FCACF9D
-:1098C000A29CDCAEB1FB3AACA7BD06E83DDA1ECFE8
-:1098D000A75BCB4A507F2845A400E0360F1C2D2003
-:1098E000FF9EF6EE023FC38FFC896B0236B89D0ADD
-:1098F0001F1907FBCA34FD598EFEC60DAF3F3A7ED5
-:1099000017E0417C9F17B91FFBA7EDD0DF41C61CB4
-:109910007A8BDABA24EF692F9E33DCE171DADBE26D
-:10992000F920E7CB36D7BD1DBE44B3099B73C19F59
-:10993000EE7B9605BFAA672739F2A4C607593C5BA0
-:10994000554D7055D2EFA5EC7B80D1411BCFC7C9D7
-:109950003C4E4E86719C71BBFEE3CCE07282F07D82
-:10996000ACAAF7DECB3940FEAB3BBEE8966FBD4FED
-:109970002EDFF2393DC7A5C4B3415A5E93EC5C10AB
-:1099800060FC3905F87335A7D3923D773F076AFD30
-:10999000319FF967D837ACF2991704A70F9F7FBAA8
-:1099A00083623DFDE417B3CBAA999D5BDF3EED4A90
-:1099B00028D7DF51A45B69E245E2597D36E8905F24
-:1099C000F7707F51B56AA11CAB3E1BC1EF9FDF78DA
-:1099D0007EC779B6FEE385F0BB18EF16977C3E7024
-:1099E000F14BDBCB291DD73FE191BDB671EA9FE07A
-:1099F000E780FC545E3BF9DD047E570B496F9E22E5
-:109A0000C887BB3451565AC12E7AC42E1FCAC16EA4
-:109A1000EB6B0FF716DE15E0F5AD60FAFA4157FD76
-:109A200022D17F2ED677CF47C81F28839DA67EE2FE
-:109A300015F343F975B7ECEA2F478C3F06FB13F695
-:109A4000FAB703E35F843B25EECA4E568C66FE1DD3
-:109A500003EC80EFABB180FD3EAC6F737AAD3E7B23
-:109A6000BE03DF7D709FE078FFFBC6A8235FFFE6A3
-:109A7000443D9ED3F87680D16535B5E8B1DD8ED111
-:109A80008E3CFD7FCCE3D3CEE3920CF3B8EC6F3C7D
-:109A90008F42077FF6CDA3D8F1FED3CE631FF70B1D
-:109AA0003FC79FF375762FC07C4342BFF57C5AD7E2
-:109AB0004F69FDCBF4E9A3CFF92AB14278CF6D927B
-:109AC000DD6346CBE00FF8EA27B7BD7B39DE0B6DCF
-:109AD000623E8E57E4E3F0731E9BC70C7C5F91FBE4
-:109AE000EF3BB8BF0733DCD3DA1862FBEEBB2FBC09
-:109AF0008A60FE7A28817182FDF90BA260A77FE758
-:109B0000C21A7C36E7CF88823C6A0A7FDD916F4EAD
-:109B1000F70869CFC1FE91F74BCE7E59B69F47D962
-:109B20000CE751D2D41771B1CDBE3ACC03FFA2D607
-:109B3000FBE017B4DE4BC38CDE36FB1218176C8DBE
-:109B40007E31F37F26C4C6B9FBC2CB089BEF6529E3
-:109B500016F7D10CFB7960F1DC1F9E118575366517
-:109B60002F88023D3767CF70AC47C9B09E5561065C
-:109B7000A7CDFA17BB9EC39F793D0BD2E6C1AAB908
-:109B8000E9EF176B17788A2690CEBEA8759DFA1B51
-:109B9000AF6B14C7577588F90D361B8C8F824AFC42
-:109BA0005785D2E07C38D8DF1D21C5863C943CBC6B
-:109BB000DF727865E2DF659EE44898D79146B67F0C
-:109BC0007E9DDF27F5DBEAA630FAB55DE36C1EB3B8
-:109BD0002B3C909FE37F563BCFA70F26375A422C52
-:109BE0005EF3B584B3DDD2AA60DAFB4D28FCEE2A21
-:109BF0002CEC83673FFC7FCE70CB448FC3855B6BBF
-:109C00007478701B8C0FAAE1929BE983C34DD05BE3
-:109C1000A67EFE7FA1B307870E2FA4AFBF15BCFEA3
-:109C20005EE9EB1980D710F8F21FF03AC7F5E6D0DD
-:109C3000E025E4D81E8DDDBBE8EEE74498DDAF34C7
-:109C400051AA3B7C05C417BEA2A0BFF7F08E79EBEA
-:109C5000886CAFC7F4D9E1CAB9EB30DF351EC47BDD
-:109C60003C5F9363FF5E067187C5AC5DBF7972F898
-:109C7000BC14CEE67E4B6324F8115E8B5F3DE0FAA8
-:109C800048A56D5D989769BB8F4AE90FDFC3C4B8DB
-:109C9000A30CFC4D0BD3CF43E033D3B8C3C5E76B64
-:109CA000F1EF0F0B9F83ADF7D970D190E485D837D2
-:109CB000E492DEBF977101C0738FCCF2398EC2ABD4
-:109CC0007CB89F8C60A5A555A376029ECA223CEF66
-:109CD0004933D6819FCC7BF5C2AD618AB7D7AEC977
-:109CE00096BC367879230CCF3396A7B70B73233CF9
-:109CF0002FB7B7BD44E03E44773D85D7BB6639BB3F
-:109D0000978AA8E6D8C5B67375535CDFDDEDC74604
-:109D100022F8FD351E6F777FCFE2ED972E19B83D03
-:109D2000A963F7B950BA1B9BEE7E41C11F9DE14468
-:109D300034429FAF4B8907BF01743429C4E21E2A05
-:109D4000298478BDE8275725298DC2FD5D8F3116FE
-:109D5000FCB469FA291CA89F4C7015EB11E3002B89
-:109D6000C2BD2C74FF88FBC5329390D9B04FF4C6A6
-:109D70006E65870D191DE4F0FC999975C1E446B034
-:109D8000F354BA4EDB7CBBFE6BEEFF80EF5D876564
-:109D90007D53617F380C261F1670BAC955129BFC83
-:109DA000E01F5B21A5BDDFECF208FB3B251F847B98
-:109DB000E3EA38CE84FB121EB8E7E05A9EDF44483F
-:109DC00062ACFDEF8C7DC0E58ABB5DAEC2E2D1E442
-:109DD0000DC6CF7B76AD199B8E7F5EE57CFA41B8D0
-:109DE000C4919FB4247EAB07F873C9C2451E2304F7
-:109DF000DF99BCBC86CF638F96187B51A80F4E1994
-:109E0000E510874FD7914413DCEFB0A241C238521E
-:109E1000E90646772B36EC97D7D1E74ECE7F8B00FD
-:109E200007B6FE6EE578DDB32B300EE6BFA7D74F41
-:109E3000473BA6F3B8FE7E827EAFD591AB3683DF7B
-:109E4000AB5B22FCEF32FCA412F20DBA799E480BF8
-:109E5000FDBE11E63B6F24F2F7840D1FD4837CEE28
-:109E6000D2089E97FB8F762FFE7D0B412FBD72622D
-:109E7000C3478D907477AF969A0C7433B2A9EE1BDA
-:109E8000E9FCE416E7FB0F43F1AC7476AE780A798F
-:109E90002EEA2D560D4FBAFA57573AE59898F7081B
-:109EA0006FEA54BAFB1A7AE93039B0DEFB3597E332
-:109EB00002EFBDF83E927E5FB423C2E2777B9273DD
-:109EC000D6A2DEB2BC06C843311F01AF5C8BC1E92C
-:109ED000DA258A43DEAE5818749D476270FDAAD712
-:109EE0007808D671EFAE9726E3DF5174E987809248
-:109EF000D0E0FBCD24E50139715C31F0F97AA3F3B0
-:109F00005EE6D749E28EE9A03F1B94B47CF50CA72E
-:109F10009FD7AB565D83F36F567498FFB1E523AEC0
-:109F20002A07F952E5C17B828F35DF16BEC9B67E9E
-:109F3000A1EFDCF3FA6DF5AA01F5D6D22A27DEF6F9
-:109F400068CC2EB0AE647CB89ACA9BD9485FDD77E6
-:109F5000CCA4E31F4EE65CB4855527F0F71CAFE6B2
-:109F6000BF1F971377CEA4F2E684CCFC61D63F31B5
-:109F7000B9B1E4BE780BC4794F344CFB6937ADF707
-:109F8000325FDF5B0D03EB47373D4DB8CF793FE5DF
-:109F90008C234483F689FAF4FAE0FAEC2093AF6A52
-:109FA0006C1CC897EB36A4AFB709922B69BD137F21
-:109FB00055AAD3E56D7EA2333E59114FDFFE133D06
-:109FC000CCBE835E4A03E7BD59412EE7F47120A75A
-:109FD0005764986F575604EBBDD372FB7510EF3B77
-:109FE0002E3BE5F30FB278FC3C8BC9E713BB9679A7
-:109FF00046029E5A251DE8E1EDECD824A0B795CD88
-:10A00000C7D08FF02D5EFFBA50FC43D04F4B8E2C43
-:10A010009E3F92E2A56B3989494666F9FF31E79F79
-:10A020005C85DD6340F5DFBBA0FF68D377D1FE50D0
-:10A03000CD715F9BCCAE6C84BCC213B2B506F3503D
-:10A04000760558DE11894DB7DF2F13E0F338B17B69
-:10A0500078F8BE261E1CD08E3F4C3A6A70DCDD417B
-:10A060001DE28F872B95D4E57492EFED0EE23DAFA4
-:10A070006EBEC834FE70EDC013BB8767070EB6EE28
-:10A080005856E190ECC03395F7DE59067CA4754C28
-:10A0900049277F859C7E8DFBADDCF4239EB3393E42
-:10A0A0008E27079ED7CDF73BE7735D9D733E825F9A
-:10A0B0008E279B02901F4E479F6CB74BC9BCE9830C
-:10A0C000E859E6FFCD34CF389FA790134079104F61
-:10A0D0005BCDE5CD5B0DF746EC7870AFFF84CCF738
-:10A0E000070FB1BCADF1F19573461A7DF4795D1699
-:10A0F00093439F375D0A3DE3EEE7EF9D0E859E1B80
-:10A100008C0E855C70B7FF00E2FC23E1EFE3E81AF8
-:10A11000C4653E8818AC4CF40570448694F373CB48
-:10A12000C41807E76E4EEC0AE0FDF6D6166F12FE75
-:10A130006EC7F15D974CB2AF6707C7FF8A25D97824
-:10A140005DCA713976C528CC2F50F0BEAED78FE4EA
-:10A150002C80F2BD876490D0E4BAFA950AACEF8106
-:10A160002C9677BE62C32B680F0E97CE57D439F565
-:10A17000FF277C1DBD7696DA5306F493090EED5940
-:10A180003EB6CF892F9A0FF279D50609E5ED962CC8
-:10A1900003DFAF524D94DBA499E947E2A3F0A02A74
-:10A1A000E4182C02E0F1BFF9DF2953E39AFD7CD2D9
-:10A1B0004DDB6E9F0FF6A19B5F46EB8C8EE15E3010
-:10A1C000785E174A3C9935B24F3EBF2DD5ED1F45FD
-:10A1D000AB5C9EC5ED6DCEA7623D9767B1F5513B77
-:10A1E000ED87F8F799F8FA48CC456F7247CD4F00E4
-:10A1F000FE737C681704BC54EE43DEDCF7033ACBF5
-:10A200009B637C25EC1D77FB6BD584C36E3C94551A
-:10A21000E8C8C771DB21FFD017E9EBFFF96FAC2F5E
-:10A2200064FDD3E98BFF0778BAC08E008000000080
-:10A230001F8B080000000000000BDD3D0B7854D59B
-:10A2400099E7CE9DB9994966924932933738930080
-:10A250000625780321449E370991A0A803040C1A0F
-:10A260007044D4282144C54ABFD2CD0D893120DAAB
-:10A27000505DB4D67587885DB6D235586AD1D2762E
-:10A28000B0828FEA365A45DA8D1A1FA5800FA2AD2B
-:10A29000ABDB8FAD7BFEFF9C93B9F76626046DFBAD
-:10A2A000F12D7C7ED733E7FDBFFFFFFCE7B0A22591
-:10A2B00085449D04FF7C49FF3B9C1A20C44FC8F194
-:10A2C000BFCA8DBD6E428E45DA93AF81AF4D5D90B2
-:10A2D000ED2344EF94C9A3B4DD3B473EAD81F2BD0D
-:10A2E0007D36AF44CB2BD65F238769BB4C28F9A1C1
-:10A2F000DF9234287F097FE60EFFDEF0804CA2C596
-:10A30000B179AF867518CAC77A923502F3CDF14498
-:10A31000C60709D9AB109D9411F2F6E6ECC8265A8F
-:10A32000AE7112DD3D8590B9696CBDBE8D9FB77A67
-:10A3300027D3F5F4FCBA8414D2F5DD7DFB8AF0A4B2
-:10A3400038F37B6D844CA3130402369245C86D7CB0
-:10A35000EFAB528906E3133ADFA386F145BFC3ADE5
-:10A360008444CFA5F5E368BFF2583FEBF8CBAEBC11
-:10A37000702CECFBF09533C75E3329D62F111C9659
-:10A3800049E17F5E0AF3B6C92AC075D73D498D3DC4
-:10A3900071E0A673B85AE7873F76BA8F25FCFF971E
-:10A3A0006EACBCC34341B22965CEEC709CF90F93EF
-:10A3B000F0DDD3E87CFA46369F759EC57C9EC3F5DA
-:10A3C000D72E05F87FA6CB5E99C263A0414EAD8023
-:10A3D0007EF50E753C1D7F40BFD5739D619DBF4FBF
-:10A3E000009FDF375EEB898B07FEBDA2DE4C076F57
-:10A3F00093C197A7C33C3BE3AFEF16581FC5DF31AE
-:10A40000257CCF85747DC72F96559DAEE7B88DF618
-:10A41000037A7990F60B0CEF773DEFF7F6C691E9EA
-:10A420007249AD793D4B8F249BE9D2461A7BE3EC10
-:10A4300067685D6748F72B2CFCB74B191CE3A5FD3B
-:10A44000DFDE71EACDDB613F3B9211DED67132D3A4
-:10A4500065C6A7C02700AF2D499C4FBA9B9FA6FD9C
-:10A46000DEBE344FDD4486F30721DD97CDA0F5FD38
-:10A470003DB6D22DB46A574F4A6324CE7A27A7330C
-:10A480003AF0C97AF279B43D7983E103C80DF866F0
-:10A4900029A7376FCF0F5B882DD6EF0DA0832442FD
-:10A4A0007EDBEAC4EF36AF13C7A95BB84809D079A1
-:10A4B000AEB3130DE0877FE8B8DEF30A766CA153E4
-:10A4C000BD6E63657D15E53F69F87A1EE674B92BAC
-:10A4D000B27844F8D637C82678D62D34C3D74A9FE9
-:10A4E0004723B6DA78FB17F49C68BE2B1D113FE0BA
-:10A4F000E908DFEF61BEDFDF37B67BA0BD759E5D8B
-:10A50000919E11F9E0AA46335D9C6E9F6F7A830895
-:10A510008FE56173BF2BEACDFB5D4A5A66134A2A69
-:10A52000CB88EA806F1D6929799A82F2E8034B7023
-:10A530003DAF13520B729E9CBAB56451496CFC1727
-:10A54000393D7F5677EBA5202EDF505A4ABC71D695
-:10A55000F33A8793C0F7EB09E019E572F70DC033C2
-:10A56000D0EB32392E9EFF8BCFFB46C3C87CB4ACF8
-:10A570006E643C9FF07A113E6F34B427C33E8F89DE
-:10A58000791F64F3825E33E2E3C457D45B56FE1D49
-:10A5900020FA4D48C791642FE8111F9087418F74AE
-:10A5A000A4DB981C2F1E598F88EF6F855CB5B4AF64
-:10A5B000B36B0E233ECABD01849B28D72D34AFF365
-:10A5C000BD54060FCA7163431E83DCE0FA55E8BB35
-:10A5D0007B7F70FE5BA03FC7A7333CD4853E7100F4
-:10A5E0003CA87CBDC303FB7AD5E605F95A7E4473CB
-:10A5F00018E137278DB53FBE7364F8CD4963EB3C56
-:10A600009D9CB5EEF7ED6FDF3905C67DFBDB9F3B0B
-:10A610008CE32FFB229F443363E5ABEB252D1287A0
-:10A62000CF36789551C17D83058E577F3116C7F798
-:10A63000C9A4A537CEBEECE94E6CBF3454E9F05343
-:10A64000785EBB5152253A84239DC9DD6B85BCB32E
-:10A6500007C62EA270F7B7B7DC168A33CE6C0EEFA2
-:10A660003FBB4369F1F84C7C853E17ED96D9C38E0C
-:10A6700078EDAD7A7580F3B9B55DE80CE971C80E77
-:10A68000B2B41FED3AE6A6313ACC4C8A7E04F28889
-:10A690004C32DB61A79DD7D2DE3AEF651CEE89E62E
-:10A6A0001776AD757C9DC33F1CA2F413B7DE83F50E
-:10A6B000AF12A65FF5480AEAC3633BAFBD07CCB74C
-:10A6C000EB17DC7608D4E4CBA9416CD7107AA50649
-:10A6D000D9EDD4BD9301EF9FD5DE7B4F195DDA71C3
-:10A6E00025DCEEA11D8E6F92D06EB1CEF32AD72756
-:10A6F000AF813C3D17C623CC5E9D4747CBA56097F5
-:10A70000B5352054C8B79202463BD5B7E1F356326F
-:10A7100019EC87D0260FFD7DC2C64FD6835E262456
-:10A7200082FDDF75A83722BC09B373FB7BDC3BB627
-:10A73000D076AF825C80F1893A3654629013762FDE
-:10A7400096478B9FDF26C0CF99CA29B1CF44F350DB
-:10A75000C8E3FA1657B9BBA434B07702D7C17E0656
-:10A7600017B8BC3D14858B15ED1280CFABAFD86CFC
-:10A770006D411C16ED15611F072F0BDE755E19C8A4
-:10A780001F87E6A24B5904CECB85948EAADC3A8C67
-:10A7900057F6DB858F017EEEAD4F0AC830DE9CC0D8
-:10A7A0009B322D2FBE3829007E47795FE1011F1DA6
-:10A7B0007FE942C94B68FF790BC6FB07E8FE5236BA
-:10A7C000D071F26079C76AABC711F243986C066129
-:10A7D0000BA6B0582CF1B2EEDB3C8FB63FCFBFD703
-:10A7E000E6A6A09EF85DDF66271DF78EB6508E3771
-:10A7F0009DDA13E91F743967139295A5F5CD5509B4
-:10A8000071677C540BE5BD0F8AF13EEED20A08F960
-:10A81000992D1C9468FDD48CA405760A2F5F91981D
-:10A820003F6FB3368BEEE7E21B1F5D4FC75FFEDD68
-:10A83000490BECB0EE06317FE90258DFD259A25C39
-:10A84000EE82B22F85F787F55650F955185BBF3D5C
-:10A8500087CE9F21DACF58308FF63D5CD9526DA755
-:10A86000F3FFE8BBDAE649130999BEB0D2ABD1F2E7
-:10A870001319F50B52287EF6124AA7B4FC64C6954C
-:10A880000B60FD3ED9C6C7BF6A33ACBFBC413F0FAA
-:10A89000EA257DE5E65ABAEFB5CE814340AEEB3608
-:10A8A000E8CE2CFA3F2912E363A7A345CBA7B073E8
-:10A8B000ECAB8CE6E372BA19BD16444B408F0D9594
-:10A8C0008B69B9C450CE61E5BD9BC8D5F1E4ED6D8F
-:10A8D000994CEEED4D8E5FAF64307B80C20DF54933
-:10A8E000DA11A2ED8EA3573E4A77E37C079389EEF7
-:10A8F000CC88F1DBE594872B285F12275BA71867CC
-:10A9000098FEC8607287E89767803C5D0843D0ADC9
-:10A9100017A912FABBA42525321E688744ED4B40C7
-:10A920007FC8365CAF5F96AE5E44C7CB4A26E13D3A
-:10A93000F4EBCF2458A6FDB53DEED8782F71BAAF11
-:10A94000290AED84F16AB2734BDB83B171E8BA3B3B
-:10A950009C534CEBB6576440FDE2D29B2719E0397B
-:10A9600089ED83D201F6A3D33C3697F2C1DEBEF364
-:10A970000AC17EFFA945EE96F72D7610DAEECA4C95
-:10A980002E5F02ACBFBF9AC99FC19B53223DC09F9F
-:10A990004EB53464B03B031C1ED5772EBC1FDA3590
-:10A9A000F53948126DB77E4F653619412F367D3126
-:10A9B0009344A61ACAF6A80272A7E98B39F87BF568
-:10A9C0009D2F29C0A7304E80EE6BBD4BCB56016E3C
-:10A9D000EDF1F14F1D725C47D317E9449F6AFC9D6E
-:10A9E000C12936BE0FEB4FB7AFD8783289648E34A9
-:10A9F0009E82F54370B773B82BF1D7395FD02985A4
-:10AA0000B7CD405F4B39BD51E9877194FECB26F538
-:10AA100080BC8FCDBB09C7DF6BA778043BB02F3953
-:10AA2000007671B99DC9CFF2BE0CAF2EC5E843D0F8
-:10AA300085C0EBDE8C964ADCEF22C9DB131CBEAE70
-:10AA4000CBC4BAB83ECD6E08CBD718D627F8818EC6
-:10AA5000BF978F5F5681FCF32F4CFF50BE5901FC0E
-:10AA60000B760BEC438D962CF60C5FFFCFA8EC8099
-:10AA70002FC52383FFA5EE08E80101B7E1F0CF3F22
-:10AA80000D3EC7627D79DF330AECB32901DF8632E0
-:10AA900053B15FF691682AF8B5BF4C677A6D6FEFD6
-:10AAA00054D74CE08B853602220CF60DF66AB9902D
-:10AAB000B764D70B5576FAFB5099CADB00E06148C2
-:10AAC000FE469DCE58FBAACC5D0B3A689D2F89E2CD
-:10AAD0007F12DAA14E62F027BE9DC1E4584598C4AA
-:10AAE000B55B966532BB45C0FB7B1BAAC97B747FF7
-:10AAF000CFA533BEAC18D025C08BE06BAB9C7A8859
-:10AB0000E3F17BFCFB8F9753D269E4D4222EA7D8C4
-:10AB1000EF07A9990FEDB2B2A22512D589AB5E98C5
-:10AB20003A1EFC995B72E4C0FB94AF9648EA981F0A
-:10AB3000D171EB9C018C93093AA923CE801BE04E86
-:10AB40008DA62F41EF2F746119FE805DF269B7C4A5
-:10AB5000E89004D2EA4A12CB21B18E5B72149C6F4A
-:10AB6000D5E6F16961E3FAB89EB83C29FA2352347C
-:10AB70009CCF4599AE7FAD4D36D4BB993EFBD0A35B
-:10AB8000FD3483E2E15589D4E37A2CF6D26F78DC88
-:10AB9000C66A2FD5733BD20FE625F2B10D9DD3ECDB
-:10ABA000AEA408615D74F053B37B09E7D7A8ADC9C3
-:10ABB0004007BFCE286076ED15B4F202CA94CE6A83
-:10ABC000ED7D831C7B1ED6837A213A0DF8F4A50C0B
-:10ABD00062B2F31AE4508104766B76920A7286E2CE
-:10ABE00009E170D045EC2E3AEF73F40B78AB916F1E
-:10ABF0003EE0F0011D486A3B427F07F75B4914F4D1
-:10AC0000CDE57353D06E25A76E1D07F10A7F0AA309
-:10AC10005B3A8E938FE3443AE172EF376327F68015
-:10AC20007E12F253E0819C92713C517F505A54E065
-:10AC3000A5E583FE734BDB25B3FD03F650CC7E5AAE
-:10AC4000BF793EB597A6D7F6466D5E902AB72FB866
-:10AC50009DB6AFA1F6938BEEE78F194C0F1E0CEA51
-:10AC6000722A8C379EEE83FE7428393CA9C51DC319
-:10AC700007B571C280BF2C857EDD8C3FE0DB99C9B2
-:10AC80009091E163DF06FECD4A65ED87E93D5EAF59
-:10AC9000490CDE5B2A999CB0B6B3F171D73AF5DA6C
-:10ACA000AC42A37D1522408776C2EC2C19748F1F0D
-:10ACB000F519C2ABFACE8634D09B9FF52D4D239368
-:10ACC0006272D4E1FCEDD8F7A91C899225DF017EE0
-:10ACD000555E9709D8CB7738185D2AE9616F06FD74
-:10ACE00066A6C4F79B27F2F564825F4DDBDDC3FDEA
-:10ACF0001EC717E7A3BF9D9FC9E245A9397528D78D
-:10AD00000196018AF73432A87B0D784CABB099FCE0
-:10AD100007C71793B1FF99DB0FA509EC873293FDA5
-:10AD200020E6B5DA116FB6E6E0FA45FF1539AFD582
-:10AD30001043FB9564E00E186FE5FA7C53BC289134
-:10AD4000FD3137531AB217F4B8EB524CBFBF49FD6F
-:10AD500045DD38FF31367F6CDE14CA70B179E54CC1
-:10AD60004DCB44BF6F96F7E8F9F4E3A2BFCBA877C9
-:10AD700050FE53FDA4ED70A35EAA05B92DFC24E09E
-:10AD80007F6F1AF077656DA6DFA027793FAB3C3A5D
-:10AD9000C0FDEA035CDFA41D117663724092627A03
-:10ADA00067B8DEE276B1453E9ECECEA674AB1BED13
-:10ADB000806178CEFCAAF6655102FA98F00FB12FA7
-:10ADC000CB6785E512909FB512194F3FD3E799F5F0
-:10ADD000BD9EC9FC109D329CD16F59DC606ED701BD
-:10ADE000EDFCF04D1995DF62D447920C728F8DD730
-:10ADF000CCE92178E2552540E57094DB43BB7CDA51
-:10AE00005D40171DC9A993414F74248F8D405C622A
-:10AE1000C7FF5617EFA0EB1F7CD9A1F6C0B0FB18F7
-:10AE20009D542E5FDF6EA7BF3B7A256F1289ADD38D
-:10AE3000BD41D256533EBE9FCB89261FDB4F932F79
-:10AE4000AA8CA3F3E735B17514F41E90EC0679577C
-:10AE5000D0C8DAEDC87498F4CFA350A6E33C22FC26
-:10AE6000111269AB2983F69A1DCE41F27A258C0F17
-:10AE7000E7B55040507AC853D9F86E35225D3B296A
-:10AE8000B6DF2EDBA249A027BAB25254D013277DD9
-:10AE9000E1C760BF4DFDD128806B7A7F9F1DEC3DDF
-:10AEA000975FDB0DBF8B7D06646F1EC8D9947EB69D
-:10AEB000BE6E0BDD1372175F570F93BF32799E0082
-:10AEC0005E4086D0F9B23615A39E12EDB332B8DEDD
-:10AED000C822E127D0CE225D04F146701F599B267F
-:10AEE000A0BD2FF01AB3AB264E01BBAA686BD4BE2F
-:10AEF0008AF67BFAA1F8F1FA17399FD07D1C34EE5F
-:10AF000023117F08BD26DA3912F8D582EE536AE3A1
-:10AF1000DBAB5413607DE572DF95B0EFA60E8524A0
-:10AF20004931F8BBFCA12320B7F27A7748001B2BEC
-:10AF30009D7564FC50CAA7FBBCF546E29549E275D5
-:10AF4000376D90B5D5467EEE5018DD28E6F33DE12D
-:10AF5000677CC2E305B3FDA163008FE67DDB14C00F
-:10AF6000F38D3BDF51463AD7192DDCA446E6BF34BA
-:10AF7000D53B23B0DFCAE576C4E39A0E2502F2A9D9
-:10AF800069F79EA80DECEC8D4405FE6FEADD732891
-:10AF90008FC227BF499B260762E3E5374524584FF8
-:10AFA0001625C63EF4FFA20AE86D2B7D839D0CF6A4
-:10AFB000CA2117E3FF0F2BDDBA44E1F8A123DC041B
-:10AFC000ED3ECC4D51F5600CEECFED99FFBC4459F0
-:10AFD000DCF3445214BE5DB69E1C276DD7759EA24D
-:10AFE000023DB9FC618F8FC229C31EDA0BFDD37DF0
-:10AFF0001EB58DF60D249129A8AF470987E916BA29
-:10B0000098BE91F1CB5C5FAAB003A7805C3AD7E70A
-:10B01000117614CAAB430EB68F0EC2D6DB99A915B2
-:10B02000C07A883703E7CD6B8A4AE00758E78DD1AD
-:10B03000955688ED47BDCE5E05E4FC1A2E6F2A9723
-:10B04000EF94DE33D041A98F9DCFE6EDDE21817FE5
-:10B0500048EBDB6A7CD89E2481BCD9CDCE29D6D0E2
-:10B06000FAEB0CF245EC238E9CA980F5B9FBFB9E14
-:10B070006572268AF427D66BC5E73C1FB3EF2EA274
-:10B080006602FEAEE8C5013ADEA1C2641C4FF0BD07
-:10B09000954FE7F9189DE7D5EF94209EE04B61F6B8
-:10B0A000A4589F68B7CB5755EB4338F4211CD6D62C
-:10B0B000DB116F623D354A681CF865CBF878CF5CD0
-:10B0C000F1963240CBF7FDF415A4C7B5DD9286FEAC
-:10B0D00042F72BCA5288DBE9FF2E439CF61266A288
-:10B0E00090ED3F7905F5CA257B59FC60EDDE3DF614
-:10B0F0006BDD313A0D9E786625D0D9DADE24E292F6
-:10B10000007F01E4532B9D523983744F7405CFB9EE
-:10B11000A89CD451AE927010FC1421873B397F1348
-:10B1200037FBFD46BE6E316E4C7EBA90DE8327A69D
-:10B130003CE3A4F05CAB4AAA0BF891C39B8E1F457D
-:10B14000394C4821F86B627C2BFCFE99DBED71F0E9
-:10B150007C1BE0D9AA4F849E0D3E5C45E02BF06736
-:10B16000E7701FD2EF3E05D7DBE1B3333D5FC9E2A5
-:10B17000DA1D0EA6473ADA9C11E0EBE7D22F7A5E91
-:10B18000A2F2D293A144E17BD0B6AA09EA0FE6B1BC
-:10B190007574D93615B7303D76870FF1974A987C8C
-:10B1A00062F2E8BE1F3379D2A4BBD17F6C0AD7AD5F
-:10B1B000C673099F4B857309127E5659EA89D1835C
-:10B1C00015BF81270E28015A7F492FE38318DC9889
-:10B1D000BE12744BE51CE2BD33539C5F868300575F
-:10B1E000EAD7B741FC41F8F5A90D21DD1318CEAF20
-:10B1F00099DCAF9FC6FD7A4785F36FEAD7AFD9F0E8
-:10B200006BF4836ECA7901BF825FA8FF68E2AB2747
-:10B2100038BEEFF731BDFA948FD1D59AB25EE4878C
-:10B2200035EFB7201FB96B993C71F79BE52021776B
-:10B2300073FB602B8E5393D27B910C7EF2BF4ADE60
-:10B24000769278DD37482DFF097932640FCFDF38E9
-:10B2500045ADFC720A571787016FF76B1FF3B73EB6
-:10B26000DC4511017C696F5146B2874F372E89BE8C
-:10B270002601BED770587FB8BBFAC23F409C7157B9
-:10B280001AE6B37CB07BC937FF40FB7FB873AE0AC8
-:10B290007ADAD71E42FA19F4BB54882752F1592B97
-:10B2A000517A68EBFD55EA4C382F7BEC8229203728
-:10B2B000DFE57C79E2C7F20680CFA67F7B7C0ED4E7
-:10B2C000AF894899603F7EB8EB5FFF0A7AB171E7BA
-:10B2D0003ACC4B6B7FEC976897DB223BD8EFBBD225
-:10B2E000D0CE3CFEC8B63900F7F6DE76AC3FF1C8EA
-:10B2F0000E2C3FF36F8FFFE22F60778452556877F3
-:10B30000E2C7DBFEE92F40E775A92AECA3296C67A9
-:10B31000E7B982BEAD726BCF01E453412F9780DE57
-:10B320000538D533F923E8F95D7EDEB4AADADD0508
-:10B33000F2ECDD2D9EC6787146C5CFF002B11894AF
-:10B3400063F512C6D9BA28D540BCA32B9954C0378F
-:10B35000655254C9A7F35CD1B0670EDA3DFA3BD70A
-:10B3600043FB25FB5C640BC6E520A84BFD0124755F
-:10B37000424AA8183C4AFD663AFACE2F29DD1EA69D
-:10B38000F201F58EC51F58D2F5C2FF801CAD730EB9
-:10B390001C0051287EEFE2F11BDA1EF54EF9FAF897
-:10B3A00071D254BF9BD32DD39B797B171504504E7C
-:10B3B00024A9E30DF6E998232D5B203D29AFB1EFD9
-:10B3C00022D8C7C5C5D74C45BA80F81FE81FDD8D08
-:10B3D000E3AF85F825E5BF73FC3C2EE225BE19746A
-:10B3E000FE1A3BF1B9E14BC86B0E94238FE2B8D43F
-:10B3F000FE40BB2AF0CB2B1E057B64BB239C3B0D80
-:10B40000C6E9E27A6B275B37EDEF8573543A9E7796
-:10B41000C6141CA7CF9181FD75D67FFECE3629B606
-:10B420005E4AA963416FC178656ED0337A3DE227E9
-:10B43000A0E0BE4E40935CDCF7E4152531FEB5C6B6
-:10B440007D409EC1F9F06C7F65857F5AEC2BE2410F
-:10B4500056786EE4F53FF36BF825BB324D7A2591B3
-:10B46000BDF2CC151F33FDFBB37750DE34031DC393
-:10B47000FCE1F74DFAF75A41C74FBD83747CED3EAE
-:10B48000A67F9BF7952A40B71FB46AE43D6A8036D1
-:10B49000F3F3D7EDD2C0F598EFF294CB0B71BD8FDB
-:10B4A000B9BE59B3F59DA3706E5AB82F17FDFC8F26
-:10B4B0009F72D5C338076D3684E7C19EF377B44BCE
-:10B4C000C67532BF80DAC148AACDD44E6576F0EA9F
-:10B4D0006DE0A7AD6D242AF07FB3857E9AF7BD821B
-:10B4E000F422ECE0E0C38B5733FBD3A5BAC08F9BAB
-:10B4F000C7EC5142ED51689F3E2FD2A6207D959614
-:10B50000037D3D73C52F3A418F37CF235E187FFBF4
-:10B5100018EDA97CDC8F4420CF65BBA3BBCA4EFBD2
-:10B520006FAF0978292429DC76A2DD4B8A15AEE7B6
-:10B5300056A3BDDC9C73958A7C6695074FB5A1DD4B
-:10B54000D51C48C6F55CB24FBA85D9236EC2D62F3A
-:10B55000217D5E12991981F8D9471C7E028E1F3B0E
-:10B56000FA56023C3EFE0925445A7FC93C46AFE9E3
-:10B57000F37A518E3CF7D47CD4E3822E3D4F26A142
-:10B580003ECFB07B2515F5DA9224235EBB1D4C2FF0
-:10B59000A5733D53B495E1B793F353A7DFC6BF8AB4
-:10B5A00039FEE2D52783DEFD88E31FC508C8772E64
-:10B5B0004FD6AE8E223F35ED66E3F992B4D25B0DE5
-:10B5C000F4EBAB667A519C07C0F9C0A238F2E231C5
-:10B5D000BE8EE0C3ABB681BD7C31C53BA894BC62D6
-:10B5E0002E47295D00DCF21A43480717FB6E5021F5
-:10B5F0003FD59F49D05F1C6C5348BCB8CFE35C8EED
-:10B60000FA3343651087F6677BD0CEF1CB953617BA
-:10B61000F42B95D49E009E7BA29D37E8CF557B4CA2
-:10B62000FC1E2AB3D176C7B23C0CCF91DFD8179756
-:10B63000001F06D8B816BB6FB8DFCDECC685DDFAA3
-:10B6400064F043C4B9868043A42DB9DE283F7FC28D
-:10B65000E11099C8E2A9D4BE77635CDB4BE701FF38
-:10B66000BE67E623CCBF6FC7760FFB997D5443F7C7
-:10B6700007769BBF28B49EE9538F1A0F1EB3FDC2F5
-:10B680002E5F590A7E65739D5B057EBBEF67D22AEC
-:10B69000A467081682DF1D5E8D7820140FC00F246A
-:10B6A000CCFCD2E69650243EBD2F42FE6B06FE93A4
-:10B6B00090DE310E4FE93DC2E89DE93FE1FF837C1A
-:10B6C00034E61D0A3920E44BB3323001E858F04328
-:10B6D000F39C810900B7D1CA938F1D94FF817F2805
-:10B6E0001C807F04BF789E667CB2A52D5009F55B57
-:10B6F0006A88B7DDA08FACFE12AC13FC4E21D74F89
-:10B70000FA42C7FD1007B0453B21BF42C8E1E6A79A
-:10B71000374F8897FF26E4B0D3CEE49B339212696B
-:10B7200037D0179CF979A6E017F3795236C48F8F7A
-:10B730009CF2BB791C7F74F91259A0CB41DEF4A4B2
-:10B74000605EBB881759C7FDD82F99E232C26F815E
-:10B750007307689F93C5F827258BF3679688CF46B4
-:10B760004CF41FB085DF813CA344FA4BF4FB5BC56E
-:10B77000AFC43C428F5AF12FCE4D603F8B26256ED1
-:10B78000D77D80C9272B3D4EE47C72147C0FDAEE06
-:10B790003FF839D770FCB2714878A2292FAECBB6EA
-:10B7A000A7315E1C4C9C779087268E2AEFEE402BAB
-:10B7B000CBAFFA0F9E674B564F34E559B9D5401BB6
-:10B7C000C451AB9CC15219E765712CCF1CF209E83A
-:10B7D000E1C9FBBA8B217FC91F329F9764D7279B92
-:10B7E000CE2372C319A6727E639EA9FD989642531A
-:10B7F000FD391BCE33D507F529A67251D70C53FB63
-:10B80000F1DD55A6F2B90F5C6C6A3F31B2D854DE57
-:10B81000D2D65B0F78397FD795A67E5576AFBD948B
-:10B82000C2B5A47795397FCC02CFB4BFCA71E9B055
-:10B83000292B8878ADB29BF3882FD8678607A4CBD5
-:10B84000019C27133EDE9C635346CA6F9D4CEC7FE0
-:10B850001E10FD83C3E9813807D4501C3F53D0B973
-:10B86000285BCFB584FC3853FA4BB44E417F89EA4C
-:10B8700013C1ED3B9CFF055C1C4370A95747828BAD
-:10B88000E3747021142E9EAF0E17EB789B529A3101
-:10B890004FF8352818ECE38156F37D98657A1AD372
-:10B8A00043A125A7B1A3591C389CC4CE2BADF5FFED
-:10B8B000C9E1F2218509E261947CFD16C7437F222C
-:10B8C000BEDEF0C9C16C90DFB504FD666F4BDB27AF
-:10B8D000A0B7AEB64709D0FF7D7C3FDB79BEE80359
-:10B8E000AD5E1CE7417E1EF9506B007F7FB8B51836
-:10B8F000BF9156157FEF69ADC0EF4E6ACFC1F70714
-:10B90000ADB5F8DDD51AC2763F6CADC7EFEED630D7
-:10B910005BD7307C9172B473429971E3A5D7E8F29A
-:10B92000A8F044E482B8FA32E13872C388F9E51B22
-:10B93000FAA5C79F35F0EF5B591EDF51C86D9C4ECD
-:10B94000A6C3F9E6E9FA7FDE4A1E7F76FCE8F948ED
-:10B95000D013399539211E5F87795EE563DB57DDAA
-:10B96000A54F4A0CAF189DC587539DF3E33C70D695
-:10B970002783CD60E82FEE9F88725D382DAEDD9075
-:10B9800097CDF46E7D123B8F5F6EE1EF6F6533FAFA
-:10B99000FD5636D377BF4B2067D2793D5DA703CFE5
-:10B9A0000787F1DD3DB3E3C1F7AEEC80292FC57AFF
-:10B9B0006FC53ACEEF1CDD63D4387C76BA71C4FE15
-:10B9C000ACFDAEE2FBFF663661EBFF7FC69FBFBBFF
-:10B9D000CE83FE03C0CD6FD8FFEFAE4BA98F179774
-:10B9E00069CF66E7A1D43A27C10C34F575056CC55B
-:10B9F000621260E7BEE3BC101F12790189E9D58E9F
-:10BA0000712484A13C1CAE141F01A5888E6F1F9A5F
-:10BA1000276A8779545B4CCF42AE0D31DCFF9087AB
-:10BA2000D303EDAF2B98D7339007EB3B537A22F239
-:10BA300043E3473AA71BD6FF0CE5CC9AECBFAF9C7B
-:10BA4000117C4E4EDD3B3E9E9EAC87B967507BEC31
-:10BA5000FE87989C39CDB8670ABF7A7900CFAF4787
-:10BA60000DBF7DBE51C5A53E77A54E26D4AFDBE008
-:10BA700064DFDB93537BE0FBB96B6C84A4527E8163
-:10BA80007552BED5AB08BBBFF596F09B5AA683BCDA
-:10BA9000DD9E1B7A309B8EB34A61FEE29FB2B4EF0B
-:10BAA0004339999F0B27F37361255BE98432D18A6F
-:10BAB000715F17F07D75DA0263615FEF4BEA44F066
-:10BAC0005BBCB6880ADF54122D61F9799130F86BAE
-:10BAD00099E72707C0DF4D9E40481FC6C75517C4CA
-:10BAE000D19494C117C701FFFFD286F7A21FF7B206
-:10BAF000753EFE403E9EB350818FF26232FC4EB7DF
-:10BB0000B205EC72DAFFFB52F8896CBAAFE35EA7BC
-:10BB10006EA3EB9ABCF9BD8C0CFAFBE3FBABF05CBB
-:10BB200021BA4BD615B8DFD0F7E1772FA1E35DD06E
-:10BB3000E7C0F8F3054446F9BEC64EB6021F25829B
-:10BB4000EF07DF889F07E6C8914CF95DD6FAF7B991
-:10BB50001EF82041BEF16BBC5EE4CF3844FE8C5F22
-:10BB60001B317FC661C99F71D84304CE851D43F93F
-:10BB7000330D04F367E838C6FC990FAAE2AFA39F20
-:10BB8000CB73C7172909C64DC5DF3F281C799F8E87
-:10BB90002F5CA67CEC587F37FE9E287FE73301A7F9
-:10BBA00004F94B9F0CAD2F97E899C67E8CEF62F39A
-:10BBB0001460BDC3920714AB67F93F1DE98C4E0EAC
-:10BBC000E4787DD7D0A1AF2103789FF36AB7CF0186
-:10BBD000F1A41051F7E0FD1EBB637040F06121B489
-:10BBE000B3BF0B76B78D4A5EB0BBAFDEE07877C0EF
-:10BBF00020B71669E63281F60639BC1862D8741F80
-:10BC0000C9E71563FEDFA72490E61D418E3638E5AF
-:10BC100090DDB08FFE0476C4859C0EFB73E3C3AF4A
-:10BC200030C766CA631ADE9FE703F07B68B77A47BE
-:10BC3000969F00DF70A6717C2B1E7C587F3A38FBE4
-:10BC4000E1B00DE26A9512CBF3FF9BC33B9DE7BBCE
-:10BC5000B1FB030E4BBEFAE25CEBBA59BEFAFDE94A
-:10BC6000A19939D82F30C1785F60AF5D4B9942BF41
-:10BC7000FD5CEE58E1B289C3D9BAEFBD3CEF3E5945
-:10BC8000262D7B0CF0B7EEF71B398CCE45FB0E074B
-:10BC90003BCF02C1E7A4726F0561726F454E21CFA1
-:10BCA0001F4FB703BE1AD8106485F7109E2F0938AE
-:10BCB0000F831F87BB158E21125809F9DDA783E773
-:10BCC000865C6D450E9DF79A57921590FF2B9D83CC
-:10BCD00007C1671DE8B31D1E47BFEFB8C71DDD498B
-:10BCE000E03CAEF8C967E837B542657915641EDAFD
-:10BCF0003F929E2F7F79FEE8ED9FCED47031F0C742
-:10BD0000FB3C3F5BE8A5CEBC131320CFFEBD8CCA25
-:10BD100029B97E8CC36B9940473F4F6274F4001D74
-:10BD20008996D7FD6222DE87BF2A37AC423B91E776
-:10BD300047B4C109909770A670A27F1C4047A783A3
-:10BD4000D39A1CC2F831353E9DF4E4B0F8DFE9F82F
-:10BD500003EFA195FDFDF843C0539C6388F5A9B995
-:10BD60008C0EC557C0CD9A4FA4E6DA783B96AF78D3
-:10BD7000556E08E17C72CC27475D74EDFD4AFCF7F7
-:10BD80001D9E1CE5FE05BCFF5E72B83F39FEFA5EE3
-:10BD90004CC0C7FFA8F54DCDE5F43339FEFADE1EE1
-:10BDA00025FC4264F0ADF4BF831EA3789E0A78267A
-:10BDB0001D83281FFB33E2AFF3AFA35E67D8F1F713
-:10BDC000D0B782BE897E4D239EDFE724C73DBF5F8B
-:10BDD00046FD29F087ACE7F8E2BC9ECA0FDC6F9DF8
-:10BDE00073706526E07D1EDF771689A6C3F9E62FFE
-:10BDF00092F03C60989EE4FC41E195920BFA64E17C
-:10BE000020C635FA27C4970B29B98CEE86DA77B1AC
-:10BE10007912DD43C8CC9546750F819485311E5843
-:10BE2000E97447658A875B383E94FC9B54B00F2BBE
-:10BE3000735E3A02FBA4F0FF70089E86FCBE13AD51
-:10BE4000CF7BC73912CBED35F213E52D71F63321D7
-:10BE50002B3C21D7106F5CB3EB05EF3803BE4AC80B
-:10BE6000808DDDA31EB499FCE46C72467EF27E17D1
-:10BE7000E397F73242A80F403F80DEE97CFAC252D6
-:10BE80004026D81990DF33E8494639DA9E37A3387F
-:10BE90006080676DAEB02FE50476E3D7BB1F10B3AB
-:10BEA0009B2493FD1A1BDF8EBF0BFC54BA5F8C8B57
-:10BEB0008F0959DAA500CFBF646897C1D70A3FFD43
-:10BEC000CE59E978FF00E0373736DE10FE13E0F98F
-:10BED0001B595A3DC04DCD0CB0BC0191D73714BF92
-:10BEE000B07B8F3A63F01E2D5E92797C8DDA0DABBC
-:10BEF00061BD4A12E747E2C67BE4C26E2116FB86AB
-:10BF000014337F7745CE4BFF03F19FCE54C6B29DCD
-:10BF1000FFE4423FF06AC9ABC0BEA9FDF1E6F76994
-:10BF2000FB3089BEF92DF40F859D91227F9932FA5D
-:10BF3000750AFFF97479D6CF803D46D7536573E310
-:10BF400079E733747FB9546E5429EC5B399F5215ED
-:10BF50001DAF4A2ED83F40D7F51939953C9B7EBF7F
-:10BF600043181CD6BFF2870CF047ABEC8E1346B9D2
-:10BF7000658D7FDC956B8E7F7C4616FEE67C80CBE4
-:10BF8000AC0C84CBE4A7E6651BE32F43F10FBE8F17
-:10BF900025FA354C9E5AE49C906736277B6F84685F
-:10BFA00024E0CDC2381283BB2EE1FB57B345199C68
-:10BFB000145A9EC59124417FBAEFD9FC4B56857324
-:10BFC00040CE405A0FCC47BDBF1CF8B65FA806E074
-:10BFD0003B570AD9D93A222C0F91B414407B9B735A
-:10BFE0004086F945BC02579205E3887959D9C3CBFD
-:10BFF0001D759FAEBC2E303CAE41DC1EB47F15BE1D
-:10C00000BEE35EB76E33C43B92DCD1E398BFCABFD8
-:10C01000D6B8C7EDB2AE43FE7632E94579E9767F10
-:10C02000A40330BCC42B41F9FB52F8E7C017479575
-:10C030006E12A4BF9FFCF9E704DF65831B6245F025
-:10C0400035EB27BF7B3DE645FB43768B5E0A4BC055
-:10C0500047D9F5D6DFCDFACA49FAF1FE90140DE5BD
-:10C060007C9979FA784EA2388EA38AA17EF0466632
-:10C070000F1F4E66FD0F27B37E6F71BDD49CA110BC
-:10C08000CC8BC9723AC19EFFD8730CAE6C823EE96C
-:10C09000027DE274688857A157D6EEBD9900DE9AFA
-:10C0A000F72D4238FC5E62E7A4FA0A09F319C4BB13
-:10C0B0000FF593C8CBB4279991C7FC94A5CF8757A8
-:10C0C00034D172DD4BA4244ADB95CE0DD5C0FB2EB6
-:10C0D000ED2544DD44CBEDAEF08F7E02FB7885BDCF
-:10C0E00037B68EDFABA59858B39B8EBFE3CA31EA53
-:10C0F00016D852F56027E40B0D6E265EC82F194640
-:10C10000BFA7283F507A7804CA74DDEB5687FFE555
-:10C1100036DA3EF725A2621B5E0F3E0AE04FE2745C
-:10C1200001BFCFA5BFAFE37454B45F62E7FC3EF636
-:10C130000E180E0EEF7439D9FFAEDB5F79F934BA01
-:10C14000AEA2BEA948DEE3687BC883824C04D69EBB
-:10C15000D8E2B51F07ED0370AECFF043F2147C3F79
-:10C160008970F937DDC2873363FC80F5A5BCBC8ECE
-:10C17000EB2913DFC038D46FD7CAD9B13FF6F331FA
-:10C18000FE5089F8C3F8790689FD8171AB63F3A08D
-:10C190005C9EC7EB0E2E5F80F9DFD3EDD103C0EFBD
-:10C1A00033F9B7947F81DF9D148E57D85B0EFAE97F
-:10C1B0007ED23710B50D666908B4C37865242403B0
-:10C1C0009CCBBD9BDB617D1736BC9209F475735E19
-:10C1D00011D2DF2CA75AE4A224D25EA1AADE2278D3
-:10C1E0006F4C42B82CAD774620CF6DE9D07B3FE154
-:10C1F000E032CA3F5784257E0F3F1C6C30C46D452A
-:10C20000FEDFB224EA5FC791DF37E731FD2EFAAFD8
-:10C21000E3F75344FDDA3C37CBCFCCBB68461E9ED8
-:10C22000C7B0BC68CAFFB3F3A6C5E40A9D17F356AE
-:10C230009610CD01FB5AC2F957F0FF52ED56B46784
-:10C240009786CC76E9EF25866F7DB98476E215F581
-:10C2500023DBAD0BF3C4B9708117F500117A8AD1D5
-:10C260009590E78B41BF831CAEA5FADC603737DCC5
-:10C270007E2A1DFB65FF60ED97E7C4EEC3ACB3DC1F
-:10C280008769E6F761D6ED6B736401BDF3FB30EBB4
-:10C29000F6BFD369CC0314701A7E1F6610F31F9784
-:10C2A000299103704F68D94D748FB4FDAFF8FD89A3
-:10C2B00067E1FEC494181D79AE7445597E9D867958
-:10C2C0007E05DE1415F252BA6C5330AFA82BD5A3FD
-:10C2D0001AF378B6B4B5D4403B914F24EEBF2C4B43
-:10C2E000706EFCCD3C663F6F97585E97BEDC89F060
-:10C2F000F6CBE488F19EBFBF2884F97433F202388C
-:10C30000CF761E5F80FCD3A9F41BA1661AC317EB7E
-:10C310006F950F74BC0E18AFBA48C53C9AEA3496B4
-:10C320008FE6CF0C95DE3229366EDD7E96BF57172D
-:10C33000FAE410CBC35D5406F04C24D7ADFA8BD28F
-:10C34000DF3D408FC3F556B819E8CF51155A7E1D11
-:10C350001DF7E4CB0AE6DB918D9AE4A0ED7EFC822A
-:10C3600057857B781D95A14535586FC77B8259F558
-:10C37000249A44EBCB5E527A20CFAF91742B304E8F
-:10C38000A3458FDDE47E56013EBD69A72346970491
-:10C39000F213D52210784DBB87C545500E09F964BC
-:10C3A000A56732CE2C874A85DCA5F281E5F73530CA
-:10C3B000BD477E20417CE8A4E798CCFD6B947BD3FD
-:10C3C00084B0B2C8FB69FB9F437B46C0730E9517D0
-:10C3D000E0C749F0FB64EC87652A4F8B21EF742698
-:10C3E00049467A1B6647F0F5950DAD9FD94D424EF3
-:10C3F00056561002EF2358F143E7433A17E77D7092
-:10C40000B402E70833F9FC9FDBB449D120E08B4448
-:10C410006C14CE9D520BEA1D27E481D2EF16298CB5
-:10C4200072F1A7BA2E035C2F242D4B160611EF2FA5
-:10C4300001DE6739FB52000F4715D509F5359030FD
-:10C44000885F33BEE6BBEFB303BCE6E758F1A2DB7F
-:10C4500001BE0B02C3F085F70BB404F8D2845C2153
-:10C4600066B91224A7D8FDE6CD876E03FFF874F6EF
-:10C47000C9F7B2C247E3D1AFB05312E5E59DE4F28C
-:10C4800078B47979271DCCAF984106AEDF2D0DA782
-:10C49000938F0F6E90730CF424E8F4699EA72FFD20
-:10C4A00092E7FD967950FFC5F425A383725E9A0149
-:10C4B000F465A083D9FB5C5199EEB394F79F01F426
-:10C4C0003025A62FA33677402904BCAB5DB23CDCF7
-:10C4D0004ECECA0820FEA7DA34C4FF34EA8171BB0D
-:10C4E000D39D4FF75FE1EC6DB70710FFDF07FFA6A5
-:10C4F000920410FF9516BD53EDAEB3039D543BADB2
-:10C5000078D610FF35DE61BFDBBE0AFECF01FC0B23
-:10C51000BD320AFB94E27F42FE08E78D89F07F413D
-:10C52000BEFB8CF23205FEAD781772608FCB5BEDEF
-:10C5300086787023CB4B9EFAF2B8762867AD0DE271
-:10C540007D993DE9EAAFB0BE85D597F56932BCCF9C
-:10C5500058B49ED6D3F29E60A81ACAEB3648284734
-:10C56000A7BD166E87F2B88DACBE7453CBAFE09DFD
-:10C57000B3753AEBFFF4F14E7CAF22D2C9FB57768C
-:10C580005743795D17EBFF478F5307BFBCFC48A4A7
-:10C590001D7E9FB895AD43D87D7339BDED919EF852
-:10C5A00015F6EB66FD6E38E44C66FE12B3E3E6F07A
-:10C5B0007DCE7D88EDD3F7DEC5B5010AF7EB0675B4
-:10C5C00007CA0D5B5339CAD1047E5AA5D45D00DF7A
-:10C5D000F9544E10C43BA5D34296B7DA43A75893FB
-:10C5E000CFEC2691EF0979E78B0CF85A93CFFC0832
-:10C5F000D12E2B83B0FCE407D9BBB3221F357A3F81
-:10C6000091207E007B44FD9B203F757E510BEAD339
-:10C61000F9E788BCD401FB2A3A6FE9977FBA289ED4
-:10C620005F7E4B3EB3938EF13C7AF17B63246803CB
-:10C63000FF640F100FBE03147D19EC963DF0BE9100
-:10C64000E11D923D4156D6F3F7DFDD459DDC1B6CC5
-:10C650002D761D94C05809DF55B9AC8F44D352874D
-:10C66000AF7FBE9D4459FE045BFFF5ED4ACF1683B4
-:10C670001DBF54888F59E351AFD4713C09B9B194AF
-:10C68000E38BF2F9E67CBAFE65CE16B41B9713A6CF
-:10C69000D76F24118C6FDC68E1F335EE3FBF65B3D3
-:10C6A000411CCDCCCF6BE972D8F9FAE0C3BFA3F03F
-:10C6B0006F7CC0E305FDBFB6D7DCAEF181978F304C
-:10C6C000FBCBCCEF8D82DF23667EA70605E3F7FB6D
-:10C6D000CFC3731B713FD0E51C7C4B27B1FD0EE926
-:10C6E0007D0BFFB9E0BE6031F8353696A7C8CB6246
-:10C6F000DE4FBB995ED6A95EE67E108ADC4FFB2F2B
-:10C70000C17CF852A147B99C11FC5CCAF5FC303DD4
-:10C710005E6BF577EE433E99CA4B56FD2DF4B6B8E5
-:10C720008748C745FD4DF5F5CB1A5D6F9FCD1D01BF
-:10C7300078C7F47604F9688A93CA6B1BE2EF00E0CD
-:10C740006F1AC75B3BD7EB09FD03F7FAB8FE01F59B
-:10C7500037F01C61B85F1035D9FBC3CE3112D8FF5A
-:10C76000437873517B2A05FC7DC2ECE23C32AA3C43
-:10C77000112AB7DFCC1F416F2BCFB0DF0777B8305E
-:10C78000BE20E2EC82FF5E2F6076F8B65CED3D9055
-:10C79000FFFD7CBE7E3E7EFFCDF3F1FCFBCF44C3AC
-:10C7A000F36FC867CA8F937F01E7DF1D8678697FC3
-:10C7B0007AFC38F8275CFE941610FCFEC9AF7D0A9F
-:10C7C000EB3FA6B038FBB164FE4D65E714FF3BD4E8
-:10C7D0009EC98F4CFE15EF911FCB30C7E7453B3FFD
-:10C7E000FFBEDFEA0C7518E2E181FB935A408FF936
-:10C7F0008B785EFC7A46C7279F4ADF617C272E50E4
-:10C8000050595A300DDA694A2EC4679E62FAA2D98D
-:10C810003EA0C0FB3E3E7F38A5C00FF79B88F604C4
-:10C820008C1318509650789FE4E7FE27F97B402739
-:10C830005DEC2BD6152858540AFD4EDE3C80726301
-:10C84000A8BC6800E542A02084F39E5C2AEA79F93E
-:10C850006E5626DCAFACE47C8271E33871E2E171A4
-:10C8600061F37B37EB94F8E7D5A4C0638AF7AED8C1
-:10C87000CFE2902B9DA4339FD65FBD3F1BFD8DC69D
-:10C88000547D02D0C3D78DE39E1CD387FBDA523987
-:10C8900038F6C1323C17C678D1DAFDCFA1FC5B2B4C
-:10C8A000F866AF996F66178CEE3CC51A671F053F97
-:10C8B000CD2F18C10E7A12F4972386875B787E53AA
-:10C8C0008DDC540D71A54F5713BC677BCB0B32D257
-:10C8D000D52D3F92F0DD0961C7ADE5704EB42FB89C
-:10C8E000A71030C815B8A71030F875704FC158861A
-:10C8F0007B0AC6F6704FC1580FF7148CF5704FC104
-:10C90000582E25D7B6439C6E5D17F14602ECDE82A9
-:10C91000B13FDC5B3096E1DE82B13FDC5B30963FBD
-:10C92000250C6E9F3E2463FC1FEE2F18FBDFF0C228
-:10C930008FCBA3B06D17CB536B7751F8031DEA5A19
-:10C94000DF240A9FD51C3E70BFC138EE07A9173DF2
-:10C950000FF859DD77FD42F85EB0EF26D3B8A49BFF
-:10C96000C9E316FA17E0783D09A5813F37850C1E0B
-:10C9700082784773445261DE1B1E30CBEDA1F74C29
-:10C9800022E6DFD71043FC37383CEEBFA5C0E343B7
-:10C99000BACA2379C6784F8C1EDC6A14E0F09AACD0
-:10C9A000C6A38752726E1AC6799E97218641FE48A9
-:10C9B0005AB6CF920CE703167824E598E9C21530F1
-:10C9C000D3454AB1992E3CAA992ED22ACC7491AE65
-:10C9D0009D37227C336BCD74B2466E42BE1770AE6B
-:10C9E000A07F01CE53E0854A802FDD27C48BADF0B8
-:10C9F0006DDCBFAD13ECFE3385EF9316F87E466613
-:10CA000055BB03585DE72C8FD93165CFB7E021B016
-:10CA1000357E2AE028EC081107A5FA1FEDE9985F9A
-:10CA2000CFFC3D6A1F1C2CC0F303E6E7012581DC27
-:10CA3000BC8E84513E5D67B10F6E70DFA7807D3084
-:10CA40006CBFD43283F70BADFB057B8B18E25256DB
-:10CA5000FB40DA2F453D9361BBFB859C0E7F89C669
-:10CA600090268D466EF47AB4FF02B9058EA2B3DC2F
-:10CA700014378E6BF7897508B888F993488B9C0337
-:10CA8000F45C6CB5CFCCFEB5F0C745BC5DC4B585D4
-:10CA90003F2DFC182B9CE57382ED40FF53BDC28FE8
-:10CAA000EEBB0A7E17FEB3D56F1DBA170090857BCB
-:10CAB000373C4E7FA77F9593BDCBC7F84EFCDEE990
-:10CAC0005B9C36523EE61DADE67B30741BDA88F780
-:10CAD0008A00645970EE4420A842B65E7A6800DE8F
-:10CAE000DAD97AD98B83CFD2EF96921F0C6C82BAA7
-:10CAF000535FCA00D7A1783E61F78415DE4F29E85D
-:10CB0000BC19F468B26A27EF1AE8C24935D5BBC52B
-:10CB10007C5ED0133943F5BF319EEBFFA3BE775146
-:10CB2000F8BC3B7E847A456D8C67D759E1259EC35E
-:10CB3000704DBAE838D8272E62D837EA4343598E69
-:10CB4000C10B55AB8CF7A644BD06EF977CDD7D018C
-:10CB5000DEDF7518CBD157DE7718D71F617905F660
-:10CB60001081FC5BC547EB8DFA65880E2943951B48
-:10CB7000F6378A7D01D380FBC9EC1286EFBFD5BEA4
-:10CB80003A2CF88271435967F5FAF4B37C7DD1B33E
-:10CB90001CBF64D1D90D3F6DD1D90D3FFD2C5F5F16
-:10CBA000F42CC72F597C76AF4F5B7C76E3573FCB95
-:10CBB000D7173DCBF14B969CDDF0D3969CDDF0D39F
-:10CBC000CFF2F545CF6EFCEA6807BA2BA204DE97D8
-:10CBD0000874103518A0262BFD19FCF92295609ECB
-:10CBE00006E17E4921F74BB66D6DA90717EA115D85
-:10CBF00009603C88FAF739B47E2261F58F742DC63E
-:10CC0000386BDB980979F05E95BBEBA2E3707F6F20
-:10CC1000A2CEFC71EBBF1BB64833FFFB6B9757648A
-:10CC20009ACAD3FACCEF575CD55864AA5F1E3EDF90
-:10CC3000F2EFE74D35FFBB64A19996F7206E26C64B
-:10CC40007B918524AA427CA5F06E5B159C9BD9C183
-:10CC500067BE90FEB753C17E1AFD6BF45F0AA92729
-:10CC600034347E10E0A698C6775BEACFF41EEAFE65
-:10CC7000B1F1EFA112786432CEBD736B1E26B1DF25
-:10CC800088F13981AF3B37DBD0E5FD6C2BC1771ED6
-:10CC9000AB23011BBE83CEF1763E273DB1EF48ABFF
-:10CCA000F93E7AA14EAA009F451DC406F1B5E04E9B
-:10CCB000A26A04E34248278FE8F1E9E411E2AD8279
-:10CCC00077B91E8910FC77B2045DDCE908E4C1B9CC
-:10CCD000DAF95D8C1E049D04804E52212FC8FAEEB5
-:10CCE00080155F644A94AEF591AD8519C67C54B247
-:10CCF0009BC1DD49FF8E84AFE29D667C0588A1FC67
-:10CD000015F0F5E9D7C497E20B45D37C10CF240189
-:10CD1000C8933A3866820DE011EC52D1FFAFA5CD31
-:10CD200000CEC12EF69E9AC093186F6B2B89CE331E
-:10CD3000F87F4135AA019C6BE44955907FBEA30C56
-:10CD400043C6C3F0B383789321EEBDA3CB968C6F1B
-:10CD500054EFA3782921E4BF372F4B2BA6F53D4193
-:10CD6000920CEF6CF5B4D9F0DDB29EA7A47AF3BBB8
-:10CD7000CAD1245B0EEE23C956815F3BFB6AFC4B94
-:10CD8000ECAC3E2A4379ECC661EF7EC8509F5E6BE7
-:10CD9000F97703892641FBE473581E679A667ECFB4
-:10CDA000C651619607148C7D39E5106FE1F4CEDF32
-:10CDB000498DD490C826BAEE73B8DCB1D251FA1DB1
-:10CDC0008B9198DAC67C03E5594F9B82F077707996
-:10CDD000453632BAD0E95FA0A7740B1D7954331DD4
-:10CDE00039E402CCC3157C25D623E66F1B93956CE2
-:10CDF000C775D9F13D6C87554E58D6E7866020C57A
-:10CE00009DDB4722115AEFD0197F10B91F7F774C55
-:10CE1000272433F815D6F935E553E89CBF8D7CF20D
-:10CE2000F031EF9CC6F6F999CADEB5AEEE60F4EECD
-:10CE3000D9CAE81D6E74B37C2D6D61AEE15C752FAF
-:10CE4000975356B879FAB46AA0E78BE49734C88F41
-:10CE5000B8FB3546FF6D630E3F0FE5AD7733F8073E
-:10CE60005586674A2F6A942EFDEE3BDC98173CB539
-:10CE70008CE20BF0FF92599E4CEB33C3B1C82237C2
-:10CE80008209E06AE5D74470FD96806B39856BD1E5
-:10CE900099C355D1997C4E9FC5DE593C384661FFF8
-:10CEA0003EAFCEE098AEA9287F2F924F45D368BB06
-:10CEB0006D1A9537749DB51A83B7779690E36678A7
-:10CEC0000AF922E05FC8E1EF55BD2FC0BFF3E2D6FB
-:10CED000ED2420017CFF5B033BA27B9A9037830407
-:10CEE000F096A631BA1570EE9ECDE05CA871387749
-:10CEF00071B8494402385BE9D52A9FD3BE269C7796
-:10CF00009DC3E3F159A4FCABC0795B0A7B47D931DF
-:10CF10008EC1D5E11E8C829CED0ADA715F07820A10
-:10CF2000D67795B0FAFB5356E680BEEDF277E60071
-:10CF30005DB605AFCF01F9EECAE1728668EEDCF2AC
-:10CF4000D8BD831A792BBE43DA1950103F9E407C1E
-:10CF5000F995362BECC47926D9898C7078488D07E1
-:10CF6000076799629297F98D66F8A658E0EBFA9AEE
-:10CF7000F2E1B5AF291FEE216CFD778E17EF347407
-:10CF80003B513F55DC8471F34C3ED7E685DF65BFEE
-:10CF900073BD66F8BDB610E489DBAE023C13ADBBD1
-:10CFA000A795F0F75A9CFCFD16F6AECB3678D785E0
-:10CFB00096BF03EFBA2401FDB3775DB6C0BB2EF474
-:10CFC000DB05EFBA9C0BF6B4865FF9D2427C7FF0AA
-:10CFD000B35A82F1F14D297F25F1E055D465D67F12
-:10CFE000413DD9F20E9B59CF65CCCB3395BDB3CC27
-:10CFF000EFB67954F66EDBFF0164680340008000F1
-:10D00000000000001F8B080000000000000BDD7D09
-:10D010000B7854C5D9F09C3D6737BBC966B3B9924C
-:10D0200040124E42081B0861810483829E84406343
-:10D030004D71435151A88D40314248285E1A7FF509
-:10D04000C94282841834A0585A2F2C378BB56AB441
-:10D0500051A922DD2052FAD5964551F152BFF55221
-:10D060002F40258A177C3E5BFF79DF99D93DE76425
-:10D0700013C0E2FFF8FDF1C1C99C993367E6BDBF5B
-:10D08000EFBC332184906FE8BF04CF0412F410FC8E
-:10D0900081BA433D9704EDD1FA23C3EB1C6A3A21D0
-:10D0A0005677A5E139F1F7115F22562D248390546C
-:10D0B000DE365DBED71E2E26644DCDAC24520CFD4F
-:10D0C000B450266D4F80469590D5566F968F3E4F43
-:10D0D000A85954435C84AC6A2124388A90F6163BE4
-:10D0E000962B726CDE601A2177BE2C7BE3E82B3620
-:10D0F000CDA7B969FFDE9C5B09A1CFD7B80919920A
-:10D10000479FBB9711924F88423F20D1BA5233E3D9
-:10D110002352425F98B3849049D1F9ACA9B1788386
-:10D12000A584C4253BBDF07D52ACBC13A66D6EFA40
-:10D13000DF37F4FD6FE0E782681947583BAE13BE56
-:10D14000A3EAEA04BE676C6F7E537A74AFAE7DAC1F
-:10D150009A98F63E2CF61C72CE37322DE579497539
-:10D160004E5A96A71092D5FF7B5FB69047F78E4434
-:10D170008012920E653D01782A7CCCD5C9B3ECC4EF
-:10D180001985B378BECACDE01B27D1CAE4FEE3B649
-:10D19000015CE3A2758510AD1BF0915D1AB3BF2849
-:10D1A0002906082923A4B32578F03D6BF4B9730A46
-:10D1B0007DDFD9BFFF4C55C679CF55552C9D4A9080
-:10D1C000B869BF442F7D5F0717A77666DFA73FA525
-:10D1D0006974BD2E4E37E477920278B5F37A8254A3
-:10D1E00037572D037CF9081941FB956BA4AE987D48
-:10D1F0004F13EF49502AE41D41DF79AC74D3760612
-:10D20000522869BBDDD8AE6620BC705C25FABEF63C
-:10D210008D34F0BCBFAB12F0F8CEC841DA6DDE7AC7
-:10D22000E0A77ECF558B80635F1A859BCCD71B030D
-:10D230008E6DC0DF028EB293C1B14DCADB19A6FC60
-:10D2400066D55C5E8A115291A676035FB6694EE49C
-:10D25000CBB6B4EE5025AD9F28B57861A8C49195A2
-:10D26000C88F6D43F71D5E08709DB9FFC36D08350B
-:10D270002D5425E04BDB133DD5A12A9DBC11F88A26
-:10D28000E7BF778C7D20BC9296A917CF236E4A2AE0
-:10D29000CE21362253BC384656D9EB9C51FCD8E0FF
-:10D2A00017FA3C3E6DC64732E5FB78AF0E8FF0EFC4
-:10D2B0001B564778D0C5DBB26FFDB904449119E91C
-:10D2C0007700E6A3A8BEE8FCC8D9C717C94E43BE7D
-:10D2D000278A3713E4657F7AF733BEE7FD06E60B4E
-:10D2E000D66FBA5C93791585CB9A17987C241E2645
-:10D2F000176C7686CF354463EDD98A97BE41D664E4
-:10D30000AE44F9D1AECE6F07F9F979A685C8123CC3
-:10D310005F6F07F9A198E447BACF62D00743E6C42C
-:10D320001BE4FE9A825928CF069A67569DF1FD614B
-:10D33000F5C6F77396A518EAE23D6BE6452F55A5AD
-:10D3400046EBAB943A3BC8915B33D74B753AFA1E28
-:10D350005254F73AD0ABA8DB3267E27B7139A53182
-:10D36000E7B5CFA3BD0572A25D65F326EED870BE0A
-:10D370008BEBA1BBB91E3AD53A37F2FEBFE6FDEF03
-:10D380006D716319C167C13506BCACCEA2F29A8E2D
-:10D3900007B0D77FFF29B5EE73985F14CF96287C2E
-:10D3A00080698B175B805FC5386D59F90EC0DBFA59
-:10D3B000EAC1E727F4AAE867557CC44BDFB312A3A0
-:10D3C0001CB7A5590CF89890C7E5C6B66B0CDFDD05
-:10D3D0009B3C63631EA5ABF587648274F73BE3FA5D
-:10D3E000FAD3AB711DEB33D9FA07A66FD3BAA944B0
-:10D3F00088D011D6534CF5A1A6FEF9A6F6D1A6F613
-:10D4000009A6FAB9A6FE95A6FA0F4DFD6799EA5747
-:10D4100098FACF37B52F36B52F37D5FF8FB17F2983
-:10D42000C3F3F5E2D920F205F4BAB9BFA268885F68
-:10D43000A1E7237CE536F2E30F722AB43C66671855
-:10D44000F02BE8F374F1B39ACAB810F093A23A50F3
-:10D4500099962F267A7A589F998FFAA38D4E0BF5BD
-:10D4600037B75F52041D5773FB70CE12031DF5E6EC
-:10D47000143AC07E24CE34944BA7A20B89A418DBA7
-:10D48000B5A1D1F67CF8FFD9A58B53D37180EBDD24
-:10D49000C1E72DE4C023C37DD7223E02D49E1E1BCC
-:10D4A00085931AB1A7E9C728DF6D49238138AAEF10
-:10D4B000B6F82D58FF3C937E08EC952AC687237852
-:10D4C0007F42C2128C23E6D3CEE9651DC8295ADEFD
-:10D4D00001728A96B7B56462B97AAD256B218C5713
-:10D4E00063433CA58EBBD5AF4059595E04FAFBB6E9
-:10D4F000B13B340BAD279E94497022B5174AAE2834
-:10D5000087E5244C9F9FB9173EF735FDCE24E04EAA
-:10D510008246C6E62A12B08E2364ED9EAC1F7AE8DE
-:10D52000B86A81E275405BB177859286FDFCE03692
-:10D53000A84ADFFE11B43EBCC082F685B5BCAF057B
-:10D54000EC7731EFB53FA4844B3BE6557B2D7E0A4B
-:10D550008215C3EB7E05701ADE492C1AADAB7E55E1
-:10D5600002B9F6469E8AF276EB1F28438E800FF5AD
-:10D5700065819EFD62AD6D25CC73603C11D952FE74
-:10D58000ED4B310EDA9943F1B906F4AC2A484274F6
-:10D59000951F76C13C9D32AB3F9777CCB7B2385AD6
-:10D5A0007F2CEF987B256DEF9C986B8175E4A5B976
-:10D5B000B4400CBA3A0CF218D6B776D170BD1E340E
-:10D5C000976A0D1D77082D8B7909B4760EC09F9749
-:10D5D0002A7F9EC9EA0738DCD466DE9EC6CAB3FD40
-:10D5E0001DF3F8AFE5B9855D3A94FB8FC5CE8C414C
-:10D5F000EDD3C37965FDED532AE886029D6FB27ABB
-:10D60000875AE8D89BD6DA889FF2D4A61C827EA2DD
-:10D610007F8D2DB01DF84351875EAAB3BB026B32DC
-:10D62000AED0E8FB0189CCD1CBC97B399CEFCA973E
-:10D63000707ED3E5637E99D2EF263F413B6B137139
-:10D640003BC01E89E0DBFFB90FE990E3BB2ABF6A4C
-:10D650001DD02959C8F4667E549EAD50E8389B61B0
-:10D660001C5ADFDC6EC1F96DDA45F9977EEAF39B4F
-:10D67000DFB180DD3C96042DB0BE312480A5872C1F
-:10D68000B30050BAB91EDFC6F9B790F237FA3B20A3
-:10D69000FA68FBA5C3EBBE06BE48222AD655BF1BBF
-:10D6A000E9A9715772652CFBC0966FE17E26A957D8
-:10D6B00026713F87C1D9965FD61FFE56B20CE17E18
-:10D6C00093C767CF07FF6EE7C1E030DAF4C4AB461B
-:10D6D000BA05A8CCD2C99D1CFE9D24AF4F93E93852
-:10D6E0007B72EB92E1FDC6FA4FF665C0D07E3FBE7D
-:10D6F0003F39DF8DFDAE08764F8761C679C395400F
-:10D700000B63AB7BF700C98CD136839B413CE53F73
-:10D71000DF93AAC23CEA86C23885A17005908FB318
-:10D72000FE603003E773BE05E86204CC87D3472D63
-:10D73000D2978A7422F00DF4504BEB573430F850E6
-:10D740008310DB89E236CC7FCB2A4A27CEFE749247
-:10D750009ACFEC236F148EC43AB87FE5CD8F41BFCA
-:10D76000022EB37ABC560817F87EE75E053ED0CC91
-:10D7700040DF5E077DDE9E5B770EACB374A3AF1512
-:10D78000E8CFB92BE4877E024ECE29214DC27EDA46
-:10D79000B9D06FD3CD9595A817BA08FA4B427F9AA6
-:10D7A000F16F9D62B4F708E9C2F58CEC32DAE994C6
-:10D7B0008E519FF7A3E39B23741CAF8F4B08FD137F
-:10D7C000E8B4C47BC0CFA0FE078E35801C7980EB07
-:10D7D0002541D7E27901891D67B8323FE2CF66CA99
-:10D7E00083C3FBCAFC18FEAC0BF86304F2CB7CC00D
-:10D7F000879BF461FBF09B8DFCD2B8F3937DC3E86B
-:10D80000FC9DA5EA04C08FF87E03C737A5E3C54891
-:10D81000C71BFBF6815E1B7E33A3E36BC1D6488F2B
-:10D82000D2E34D1E6D297C47D099793D4BF87ADAC9
-:10D83000737DD7C278576CEC7EDE81EFF9AE473E40
-:10D84000DB180A3A4814BEC3397CE36E89E0D90D6F
-:10D85000F263568DF779D0CF3E8F7B3A9433D5BEA5
-:10D8600036302DE6D6CB06BBCF8C5F4A5FAD485F26
-:10D87000C4374D92C09AEDB6A2FE1C806EA27AD338
-:10D880002FE8FEE653C8ED3B62E1E174C73F99EB38
-:10D89000BB1BDE4FA9F611E4D3D39DD769F61371F4
-:10D8A000B3A81D1BB0EBED5841F71DEDB3D04F16DB
-:10D8B0007810CF57B5CFAACE033A772ADE58FE4F5D
-:10D8C00044DF703ABF9FD3F97A6E7F7571FBEBF638
-:10D8D0001615E57B678B07CB8E162F8F879663B95E
-:10D8E000AA45C37EF29A4F2BD07FBF99605C6B65CF
-:10D8F0004289148BAEF2FC467B7F78B311EFA9D539
-:10D9000046FF3B596F2FD37F49E5F986F644EF6810
-:10D9100043FB69C48B0F00DDDBD22A0DFD48F813F1
-:10D92000837D2BE0385D9E87F1620A4FB4AB853D65
-:10D930002BDA09A9C378AED5E467769AECD80E80C5
-:10D9400023C297C1B10BE088F02DE7F0AC667E13DF
-:10D95000F77BE285DF53B47ECE7C8C8B1094572B03
-:10D96000726CA89F3BF298BDDD8F7E3275F293F208
-:10D97000FCEA354C9F0B7BFCF99C57AAC1AEDD92AB
-:10D98000694139B9256D8F672BD6E3BD4C9FFABB32
-:10D990003C147F560F8F57538ACDA2EB4DE47CB3D6
-:10D9A000DA4A30FEDD91EEF4421C2CD1B3A806FB1E
-:10D9B00099BE4BC8CF89DEFF23EFD51BEC0EA25CCE
-:10D9C00063586764FEA536368E44241827A5D866AA
-:10D9D000C09F9DE8EA79305F5B148F79B05E8E2737
-:10D9E000939D23E214663CB96B8CFA6675117BBF7C
-:10D9F00037E701C4BB19BEAE2A23FD7670BA684B67
-:10DA0000DF827C68EE6F1E9F4C8937F87F1D9EC1B8
-:10DA1000E324C29F16FDC08F76C7E86FF6A3CF86BA
-:10DA2000BFEEC6EF19F55D0C7F7DD2085D3C49C0A5
-:10DA30003B8207115FE47E98885B8BF114C2C6C3FA
-:10DA40003AC6B7FD28FF7E99E0423FB2C0690B801D
-:10DA50002C2CA0F3003A6EFB55426025ADAF4B98DD
-:10DA6000D99744EB05DB6415DB9DBEA11067EEDDA5
-:10DA7000306368987EF71EA9EEA211BA38DCB6E4CE
-:10DA80001B32993DA0BC13F600934BE8E7FAD74D43
-:10DA90000C69608F1711EF76025E306B17F444F457
-:10DAA00075B97FFDB3114CEF66CE25CBBA63E07F2D
-:10DAB0000D6F8FCA715F3CCA6B2EC70B38BCB6772F
-:10DAC000CD8AD7CB71DDF3A4587475B6E4771BC843
-:10DAD000EF51F09D1735D4DBA584CBEF47C8F75144
-:10DAE0007E2FCBAB5B3DA22CC67E9F1246F93D51EB
-:10DAF000D5DA01EFE9E0EF015E7E4AF112631DCF56
-:10DB00008E60F6CDF7152F42AF6EEF7A9CE1A558E7
-:10DB1000E0E57612CBFFFD1EE0E569807B3FBD4A64
-:10DB2000C2B80FFB45B6F60CB43FA56ABB007F1127
-:10DB3000FC5C169B6FFEF91DE3E77EEEB7AEE7F8DF
-:10DB4000E9E2F1F1DB397E3AB9BEEEE0F869E7FAD5
-:10DB5000FA56C04FDC99F3CDF066237E52ABE34D0D
-:10DB6000F830E227A9DC889F44AF113F099ED126F7
-:10DB70007C18F1935EA022FCE2328D78EAC737A7C9
-:10DB8000F057D2609C187672765DA802F6B886CE01
-:10DB9000E9EEB5C220BEAE0A28C57AEF35F9A5A2D6
-:10DBA0004C2F6078CD9C161BEF16DE1EC8D7A40242
-:10DBB0003D9DFC20361FDB79FF63AA1667E87F5185
-:10DBC000ECFE2EDEFFF5E15AA2BE3FFDB94B1EC4AE
-:10DBD0005F30AF3F41D2D20B701DEACE30C5FDB6EB
-:10DBE000156C1F729B43ED86FD7CFF0AA777BB8AED
-:10DBF00023F9ECE01FF171883F09C7CDE59F19EECD
-:10DC0000DCFF15ECFBE52DC81E7A356DCF5B9E79E8
-:10DC1000A48E96A30B46E03CF3EBBD7B00CEB26B2B
-:10DC2000CE50B67F3CCFFDFE184A6AC154E91B7046
-:10DC3000B8DDB1F7ED4529F42995836807D2890449
-:10DC4000B6533A8D5388929802EBD5705D56B06307
-:10DC500065586F17D6E34937964E1262FBD7DC1F23
-:10DC60003DAF200FC7731337FAAB29C48BA5E06310
-:10DC70007B1A51D227E0F86D7113082AFCF3C05FBC
-:10DC800075666FEE009F46A3509884AC82F090EECC
-:10DC9000DA87EB271EA2B278DBCD6ECC4FF8335D6E
-:10DCA000DF98D35FDFE9F6FBD2E12A21498434DB38
-:10DCB00059F98B78D71628BF74E4062068A58DA87B
-:10DCC000FB31E0D55F49D0FEF0BF951068C5C92E85
-:10DCD0003B87F907A73DCEBCB334CECFCED2388D2B
-:10DCE00005E9A71EE736F87532EC63FA9643FFB6EE
-:10DCF000E44968778AD20CD77D1EED06989F627F33
-:10DD000029F7BDD4A8DDE67C5342BBAD4D0A12888D
-:10DD100053FADF96D0BE22C50C4F4E9578F2C64519
-:10DD2000C7717A970D67F12E16EF59F1F75F8C02E4
-:10DD3000FBFB970933C349F4FDAD07A99D0779346F
-:10DD4000D3BCAFD7537A4A4FB579B750FA49E57E7D
-:10DD500072DCDA4907EAE9AF9F8C62FCBDA365BFBC
-:10DD6000BB8D0AA444C57BE104FA9E93EFDF12B990
-:10DD7000260C7663E22445853D8E2239580DF32525
-:10DD80004D16027C714F83713FB7B3B008E122EAB0
-:10DD9000C3F87E2E2955FA227936D48EDF58C0F387
-:10DDA0006A5CC40576A1F26F2D2956DE8328C5FC76
-:10DDB0004AD3A8DE4A82B820E5145A96760631F98D
-:10DDC000A3D21BB4831DBB2140FC360AA707E7FB87
-:10DDD000AE81F13ACB7D0960976F3834EBA2B17414
-:10DDE000DEA1B0E205100447A5E0BA439ABC368133
-:10DDF0003EDFF9A6C50DEBDBCADFEFF449C8FFF73C
-:10DE0000CC23013F85C7D6863D7619ECDE90858C04
-:10DE1000443B973A5C93B82854215ECBF8FE965168
-:10DE2000E9F8B027B43C19E0B22EE1FC9046C7AF48
-:10DE3000AD6671E71972F6F3306EA8D386F849E73C
-:10DE4000F94712A945FB39659ECE5EA6FF123B99A4
-:10DE50005F19BA8E60DE535299D3EBA7DF7B22CCD9
-:10DE6000F68DEEA96671671709E2F767C8BB1C1645
-:10DE7000FABCA75A71033D2599EC73278C4749AE2C
-:10DE800067231BCF359E8D9768CA83B28B79B9E91A
-:10DE9000BC28FEE44405F1ECAE36E64FB94CEF3950
-:10DEA0004DDF7B59E0399B14029E4FF86E98F812B3
-:10DEB000B67AD558F9139D2D2454A5CBB7700E1002
-:10DEC0003FFCB290F909B6ACBD7698D709DF2B6953
-:10DED00010EE7AE15FFBDEBB03CA7FFF574F135D95
-:10DEE000D75FBF3ABCED518063F36D2F221D72BF27
-:10DEF0006A084C81CEE7F95A1BC2B14C63F101525A
-:10DF0000DABBD75A8AEDB8AFB5768F03DB87959326
-:10DF10008083C27398A265FD0CF835247B57A83026
-:10DF200088E6CC9A44D85615ADAFBD92120E950F27
-:10DF3000E9F334D95F0CF190174822C5F7064D522A
-:10DF400059FE9BF43CF0534E95847E58CE219F039E
-:10DF5000E8E1C46C0BE6BFACA8BDF4C29174FCFB55
-:10DF60002A148C375457555C0EEDC30E317A715D0F
-:10DF7000C7F047E114ACA2FC30E2108B279492B0BA
-:10DF80003748DB877989350DF4C73C0A60985F27ED
-:10DF9000C70F8F0F949686FC00D444AF118F6E1379
-:10DFA0001ECD78758DA47804FD52448A985FC7EC25
-:10DFB000C75ADE6743D544F45FEF5189DF3AAE3F7D
-:10DFC000BE5EA4F6A346EDBF10B51FA1FC1BB51F96
-:10DFD000A1ECA1F62394895AC545A574BEA1743A53
-:10DFE0002EF05F4DD94AD81FB86FEAD537FD93960A
-:10DFF000657C9F8D726A4A25FDCE2CE062565FAF2C
-:10E00000519BE4A552D9505F9BA6887D3C3FE8D444
-:10E01000C42C0BDFE79971A746EB9D990ADFD76304
-:10E02000F511C5C450EFA9B118EAE7EDD18D3F0550
-:10E03000F01387F5092377AEF71744DBEF28A475B3
-:10E04000DA7E80DB73B54B2DBE2D31E877D948469B
-:10E05000BFCABF895FA2F8FAAC80A09F2E5B349440
-:10E06000DFA4505141BEF6D7CB540EEAFDEB022A95
-:10E070005775F191C3853CAEEEAB60713612FDF978
-:10E080007A12CFB322F0BC330476C4ADAF5EE90D93
-:10E090009281E5AE355339A2A7938B051D8C2423BD
-:10E0A000D19F27530E54009D754D54801E4A391F31
-:10E0B000106EC761889FD2CF539FDEFD174D053F7D
-:10E0C000ADDDDD3612F37E2E1FA9CB935995BE68C8
-:10E0D00022E83391F7434895FB7DBA2EC97FA90505
-:10E0E000ECB681ED1485BCAF83476FED8C24D00373
-:10E0F0004E2EC7CDFD57B5EC7C05BEBFBAA51B4B58
-:10E10000679A0F858C5DF163FC669FA7AE11E6658B
-:10E11000CFA6ED3A396C4BA3EF19FC806C667709FA
-:10E120003CB809C683C4BEC986CE09F17114189DD6
-:10E13000545F807CDE109A8579159DDE0983C6AF19
-:10E140004EC5275BAB5E2269148E4FBE3AF32FB3E8
-:10E15000697910F88DEAC12738DFE4943FF6DAB523
-:10E16000067E396AE297A3267E397A0A7EB9E04EA6
-:10E1700068EFC9540CF51CE0175D7D6B845F583D5A
-:10E18000CA2F47915FEE79D986F58D238F1AF865EE
-:10E190004521AD67EBF865BAECDB12C30E78E53BC1
-:10E1A000E2975F9F29BFBC7166FCF2C4D9E3973F39
-:10E1B0008E4CFFEEF8C5779AFCE2EBCF2F87605EBE
-:10E1C00067CA2F9DEE20E60376CEB6540762E0FBC9
-:10E1D0007A8E6F11F72EE3718A69F3B4CBC7823D53
-:10E1E000CBF3D6443E4DE73CA6BF57D4CE407DB9D5
-:10E1F000F520D397423F97713CFE8DC731CA424C00
-:10E200006FA6974BF8FE4C4D0AA8F4D74E6A12A49D
-:10E2100082BE9E22912E1596BAAC76A414B59BE8C8
-:10E22000F7D06EBACFCBF266C92166EFD8E97F404E
-:10E230004F17975B0D7A7588D9FE32D5C53EA6D8A3
-:10E24000BFBC0FF212283CBE1EC9ED2693BE15704E
-:10E25000D870A812ED90CFB36D83EE5775F2F546E6
-:10E26000ECA9525F45AC78587DA184F0BEC9A3C526
-:10E270001796813EBE0AF5AED0E766BDDC53F59237
-:10E2800051CEF8C7A75616EBE48C7F3CEACD889CAC
-:10E29000E1F501E50C3907E546442FF37A442FF305
-:10E2A0007A442FF37A44CEC0F8D951BD3CF281F1C3
-:10E2B00077FA757A7B19D4B34FAD9717707970B62A
-:10E2C000E5CC1FB8BDFA5DE9E5CA424E2FFFB99C07
-:10E2D000A929FC0EE54C2DC899A453CB995A90332B
-:10E2E000C506397355E1B7D0CB890DBD7ED8BFBF08
-:10E2F0006200BA77707C371568D7C0F8A4E6F4F2EC
-:10E30000B6CD74D55BFBC0AA0CA0172FF3F3067A29
-:10E310003FB1F9F7AFB4E9F2A21395103B5FD1FC1E
-:10E32000243E9FDB7010E365A79A6F7D21C1D2ACBC
-:10E33000477B6BF7D9916EBD16DC13FFB6F3E89CF3
-:10E34000CDF8F28DED4FAF073EBA8FC7FDCC76AE5C
-:10E35000C0EBE9DA3FE6EF5E3F52C571CDDF3F1516
-:10E36000DD523ADD0C747A22FBBA31E0E7C98977D5
-:10E370002500BCBE07FAF0C96F43A7AF8C64F83C18
-:10E380008D750761FCEF6ADDFF017FBEFC6DD6BDB8
-:10E39000A090D1D569ACFBBFBF4B7CFF07FEC26725
-:10E3A000DF66DDCB04BE093B2FE3865F289FACFF11
-:10E3B00057E1DB10BF58FFEFD18FC13ABBBEB26F40
-:10E3C00086F805F9FA1BD9AD3F3F45D8B99944FE07
-:10E3D0005EA28F9D877157EBCE4791E879295C0F3C
-:10E3E000C63722ED07629D97FBAE4BB047DEB10EFC
-:10E3F000D26E63713BF3F3FF2E90D83936A9D60164
-:10E4000079F1BDB3F760BE41E7EC09B86F65B6536B
-:10E41000C47B3D2D1AC6933A5B7C58DEDE521D82CA
-:10E42000B8C9932FBD25413E58E94B0DA8DFD64E04
-:10E43000FAE130CCE39B5A1A0FF5DB4D768A8BDB81
-:10E4400029DE51AFDFA9F75F9EFC4D13CA4111874A
-:10E45000BA2362BFD0F7549D9F44EB400E113F0991
-:10E46000EA063F69D97AB05F7AC07EA1FDA78E5ACD
-:10E47000B63ED677D65A483DD82F6B1B2CD5B1EC7B
-:10E480009770416CFB85D671DFCD91680FACCC03E2
-:10E490007B86D4E9E36AA7B25F1E1EF5DDFA495711
-:10E4A0008C3A3B7E52846FB9DD32A4485B0821D997
-:10E4B000B32527869DA69C18D65F4EDC38EA5BF80C
-:10E4C00049E102965F2DE86BABEAC578726735C10A
-:10E4D000F8636768656A09AD3FD1602112AD5FFFDF
-:10E4E000328B0B6F2827013847BB219B603DE465C9
-:10E4F00074304376FE08E2E03D55D47F52216EF73A
-:10E50000E35A80EDBA8499B73928BDD4962B04FC20
-:10E51000A619F214FC4E4863F9A1B54EF2A338F0E7
-:10E52000ABA62A64E519C4AD13E562897224E54FF0
-:10E530003519F876A078B439FE4CE417BC802F73F7
-:10E540001CFA4CE3CFDB055D7DFBF833F2DF970F60
-:10E5500034CD8278EEA9E871C12815F599594F9903
-:10E56000F958D0D340F4E7043B69A2AECECFE186A0
-:10E57000F93EB513ECA48951BAE8AD9D94142BFF74
-:10E580004A9409CD7F78457F1E2F41E9C6F1129A42
-:10E5900077E1F3BB206F00D6A778519E3E5849E53E
-:10E5A000708CF9ED6E597608E4E7AE96662C2F5024
-:10E5B000FAE414DAFFE916FF2180DBCE96762C9F71
-:10E5C0006CE9C2F69E968D58DED112C0726DCB0EEC
-:10E5D0002C6F6BE9C6F2C17CF69D294A10C7B9E0E1
-:10E5E000241D5F474753FBE87774F83EEF43BFA114
-:10E5F0007D72B8DDD07ECEE12E43BD2CB4D1D0DF0C
-:10E600003D2560686F2AA83B067CE92ADD6178EE2B
-:10E610002CEE36BC77BA7EC1D9EE976B7F04B6C9B3
-:10E6200049329CBBA0AFC8706E88F2F190662A5E3A
-:10E6300069FDFE441EE7E866FBE49924F283740951
-:10E64000A964601FF426B23CC8D62CF67EEB8DACD4
-:10E650007E7F0EDB3F12799AB23D42D744CA88EEE4
-:10E66000E7DF9FC8CF2915B0BCC8DCE200442448CE
-:10E670002E24A8C17E4829DB2713FBDEAD3CEE70BB
-:10E68000BF95EC94A83DD9AAB0F9B76A24B082F638
-:10E690006B2D66F57BAA48C002F3D7A814CFD0ED46
-:10E6A0007337EFFB4A2A89EE9793D11AEED7C87CCD
-:10E6B0009F3DB2EFED7897E0BE3E87D7CA848F3199
-:10E6C0008F36B9B94F02FE1AD2DCD70BF3BBFF1657
-:10E6D0009B1ACB1FEABDE58B2CE09B4D377E910545
-:10E6E000CCBE29923FD3E7D0E7CFE472B86C6ACEB4
-:10E6F000C7FC854DF52E2F87B3C5D48EF90C9FD757
-:10E70000F3FB0988827ED1307714AE01913F22431A
-:10E71000DE1D5DFF88E8F9D3FF34BF6653F37296C0
-:10E720005F934D787ECD4CF427051E364139AEFF00
-:10E73000B9DEEF3ABFE6947935A63C0703FD42DD2A
-:10E740006FA66F15F112C7E95BBA99E5456499E8C0
-:10E7500046E45D08BA14F919225F43E46FD8785E85
-:10E7600007FD2CCF6B8E4D5FB63DC403E7DE644BD7
-:10E77000BC774BDEA9F3089A3DF95C392C1BC7C660
-:10E7800065F903FF334AFB85A72C3A6E9E47BB51C0
-:10E790005F17E556F875321DC21BAE027BB5A85C4B
-:10E7A0006B85F37C29A504CFE994964B58161D621E
-:10E7B000F5DB3C327EAFCDC3E24DA27EB1A63D0774
-:10E7C000EF2799DEBB38F29E15FBFDDE63E1A5C2A3
-:10E7D000E6CDF3906772FA5E3D5966F9D155129312
-:10E7E0001BB0A13A89EB430ABF8B89FB92025DDC27
-:10E7F000F5C71C5BB7B7B0FC3E910FFDB79765CC72
-:10E80000877696FBA6C1D9B3B2502808FBEBA5DBEF
-:10E81000883B4585F98535E0C7153977EF817C88D8
-:10E82000272E647BB6171F62F6C28FCBAFC6FB469E
-:10E830005C5FCB188F754F49F406E0433556A6FF51
-:10E84000453E74B9D15EA835D90B179FE2FE8F14EF
-:10E85000D2E7073DF988C7148FE5F7800C24BFA3E2
-:10E86000F78030F950CAC77496BB1D10BF2E3A64AA
-:10E87000C1E39EF2364DC6F3B19D2CCFE389906F74
-:10E88000D0F3A82F723886B89CF81BCF93ECE172B6
-:10E89000E2752E270E839CA0E52B3C4FF210CF9300
-:10E8A000349F97D8D152FD92DEDE319745927F1684
-:10E8B000E6416D56089EBF1BE0BE8FA2001DC790AB
-:10E8C000C7B802E9676FF2DD15401CEB350BDA952E
-:10E8D0005D5348562CFFAEEBC2CA41F30F3B5BE6DB
-:10E8E000BCD43688DFE8B4517F26D6FB1E71AEABB0
-:10E8F0000BCF5BA4955B08E45565D9FBD8FE43AF0D
-:10E9000003E97988D78EFBFB649E93BCABCB53B9EC
-:10E91000DDD7350BE6FFE03605CFE7887113BD7410
-:10E920003E3A3A499BB22713E6DF39359809F64C4F
-:10E93000D7F87D1B0B205FE4A04C800CCCF3B21603
-:10E94000717F96AF2B4DD1A45879EA03ADEB038FBD
-:10E9500064B867C20CFF01ED0EC80818FCBC95B383
-:10E960002846FEE269CC13EDDB6F765C3B1BCF4D96
-:10E970009EE6FD17099C0EB3161207FADD408F8341
-:10E98000E0D9650D21DED62EB454C73A5F5B54C47E
-:10E99000F0BDB6F453B48B4971EC7924959BE9959D
-:10E9A000CDE70E858E4FDFEB2A8D3DFEE51C6F9483
-:10E9B000AE5F0379D5556D41BB22092E62C0FC1CA8
-:10E9C0006A074948EF28973E2BB5313BC1242FFAFF
-:10E9D0007DBF54474FF9FDE5D0F9454E437CFF44D8
-:10E9E000F6ECA4600C3C8B52C051C8A1FE70247898
-:10E9F000FEB58BC39114C7E6EB28BE56887855DD6B
-:10EA000029CEEBCD2E2A8B714E6C003C98E9E18E1D
-:10EA1000853E5C1779EE35A282BE2CA5FCA88B43FF
-:10EA20000C043F33BC167EC7F032B7FFA888C74737
-:10EA30004E739DA7DD8FDA456E9D5D0C87A2155A3A
-:10EA40009FCAEB3FF64BE17BA85C9576FD09ED9EF6
-:10EA5000A9BCFC3194543FEE9282EFBE415F9E22EE
-:10EA6000A93980B4594F8F820819B9555A66B07FB9
-:10EA70003A24EFE167302ED4970AFDA6933A852118
-:10EA80003980EBFA93146E05857529D15641D94822
-:10EA9000BA6CF05E63CF9F0EC3771A7B1C4119825C
-:10EAA000933BADC7F471A36BF4E747F2E0168D6EAC
-:10EAB0005B1E9DCF921DC67DD20612C2F196761BBB
-:10EAC0009F9BCF8F4832050C5C4E10C97F9D82F909
-:10EAD000BDC4C1DAE3478BF3E87D85FAFBCCEA39A4
-:10EAE000BCEAEDCE20DC2F4402C6798A7B739EA758
-:10EAF00072CC3E01CFC33C0C74FC91DBEEB7507B73
-:10EB00003923A5AE11E07115516DAC647683589729
-:10EB1000B887668173B60DE0BBA0DDBC0ECD06F3F1
-:10EB2000F959D7E0EB1378FF4711C175DC5EA46299
-:10EB3000B934BE66BF06CDA5A15CFD7D104D5C3F1E
-:10EB40009065A906FE7D51D023D1E4D3597F7FB8CB
-:10EB500016609C4CC075603A35C6C976C121D77421
-:10EB600084DFCB7AF811A5AE04C615EBF96759E836
-:10EB70008120ECAB26B27BA0DE4DA97B03FAE71C1B
-:10EB80000EBF2FD1A913A75A08EBFC78E747AFC8EF
-:10EB9000F9D1F51112BE1BF2A3EB77CAEE0E58CFD6
-:10EBA000CEE70E03BD0FB42E911F4BE901E146E7FE
-:10EBB000F521E837F3BC8EDE407E0A76C974B9D8F9
-:10EBC00010477986C3F19E62DFC7F05EE94BD92E0C
-:10EBD000BC7F27BF7BDF503A8FBEEB25CCAB4D937C
-:10EBE0004915C04FE4237CEA54D0CF4E4BF0CB2ED6
-:10EBF0005AEFBB8A78B7C034BCCBBC402A724EB146
-:10EC0000B783D24DC6F5B20FE4C9DFAF5B90BC80CD
-:10EC10009619890B9347D0F28238E277D0F13224EB
-:10EC20008BAF1B8350F3932FA1F3FC491C9D27ADA1
-:10EC3000E7DD90101C41F9ED8F3662077A4D4BA845
-:10EC40005B371DBE932CE37C8E503B51A172ACE22E
-:10EC5000F2CF26DAE9F7867EED9C00F3C96A9E467C
-:10EC6000DEA5A03C5CC4F8E4E8C35F4E8473E0F228
-:10EC7000374E2F9E33E7F4973682C1C38CEFDD1CED
-:10EC80001E6FC6337FA731DD762BC4DB3FE6FE0F58
-:10EC9000D13CE82F5CC7FD8537E3991FF466A18856
-:10ECA0002F05D3F5F66DA3434BBA0C9C076A274199
-:10ECB000BEF3676E2D2919FA111FF2ED75DC6FFE98
-:10ECC00098906AA0F3EBD64C1B9242DF4F6F6570B1
-:10ECD00030CF6FEC68A69F1B4E5282D6C5CF1A94D8
-:10ECE000A00DE477C3499BE1F9DFA91DEDD79D573E
-:10ECF000FFC98787A6C3FCAE24E155D0FFCAEB123B
-:10ED000058E09EF36B0F9FC74070694C568842E1F4
-:10ED1000D12811DF60FD9EF9B71C13BEB34733FB4A
-:10ED2000257D5AECF55DC4D7376D75CD2F81CE1A90
-:10ED30004356B4E5AFFB43C590C1ECE7C693E791FA
-:10ED4000802EFED7A884111E8D27CFC7E7D3561F6C
-:10ED5000B301DDC3382A7D7E9D431B02F1DA81E0D9
-:10ED6000BC9BDB418D2793893F55FF9CF17774FC59
-:10ED7000346CFF2D87DB6FF75BAA63E577358F6611
-:10ED800070199DAEF8201F684C90689B637C57F407
-:10ED9000CB4831EE5F98E7D55319BE12E67D4E158C
-:10EDA000D1627D6F3187A3986F4F4A78910FE9B395
-:10EDB000AF10EE9988D4DD7DB9FA7B24B672FCF5EC
-:10EDC000FC309C0BE37F7C61EC733B02CF9394653A
-:10EDD000682FBF9052F734C8B77997D10AA58F2111
-:10EDE000F38216763EC53F28BEA370964960E26066
-:10EDF00070B661BB18EFA317393F523F1CF2D4AF76
-:10EE0000E2F2FFAA6D4B30EF49C8A98F36CA28A796
-:10EE10003E42DD42CB8084F6EBFC3A0A6B2A571661
-:10EE20006D9FB60FD4C15599D4064D61CF6F86B290
-:10EE3000CD6A88F78BEF2D38CCECB7859D463D57D2
-:10EE40004F3A3F01FBE0A317993CA0FC6D0379BC4E
-:10EE5000E82EE338F5DB2EFA00E6576FF2CB33B835
-:10EE60007E36DB799B47F3F8FE2432E94CFCF24610
-:10EE7000A2ED188D7AC127C33CCA14E33D5BA24CB6
-:10EE80002F61F05FBEFD84CDA50E3CEE112A470A2E
-:10EE9000E8B8C7A83F0EE51F476BBF1F4DF170FCD8
-:10EEA0002083CB81D1754FC1F78E1F64EBFFB4E196
-:10EEB000D345704F0C99C3EC8638387C407F8D9BCE
-:10EEC0006B0FB4D2F5AEA662CA01E782E2983D228A
-:10EED000EC3059BE5676D1F6C9FF58980CEB4C7BF6
-:10EEE000E807D5305EFA43091AC0ADA3421B0FF202
-:10EEF000BEA3D6E985F32A9B291996D3F7ED741C96
-:10EF0000D02781DF4EDE03DB9105DDEB2AE1DE1742
-:10EF1000F7AEDEE030BAAE760BBB27A3FD7CE26D28
-:10EF200025D1EF35EDAA7D0CE6953B9BEA0709CE8E
-:10EF3000D16BE3DDBAF109B7AF1A394E8E3F3BEA28
-:10EF40008EF3E05CC27E19CDC74F1BF2D1AF1F4DCF
-:10EF5000183D89FC7BF836D891027EC7A8BE22BA3C
-:10EF60003CB5D1DD52D04AD7B5B4E731BC8FA361EF
-:10EF70006530632EE8DB0715A647F9FCD2FE9855ED
-:10EF8000A9BAA2FA77AEE4463B52D8C99713F15317
-:10EF90008CF1C2399C0F2EE7F6F1DC0406E7F9C4C8
-:10EFA0009B0BEF5D61272E0B85D9DC69DD65CB40BE
-:10EFB000EF2EB126837D036B898577519AED20C1B1
-:10EFC000878D0F24FA21EEFAB1D45708831CB13291
-:10EFD0003EEB7B362EB025AFFF38D631CCAF6F2C51
-:10EFE000E4765D01D1E0FC40E3EE51781E2C2E9ECC
-:10EFF000E27102CA3F3BE0F579D0FF74DDD73CE314
-:10F0000008E2B930715F999BF813E9779A760FD9C6
-:10F01000027646DA086DFC723ADEC7D6702ECA0B4D
-:10F020002ADF24AA5B73C7ACB944A17CD53894DA33
-:10F030005DB47ED14377B37A7E789185D6AF7DE893
-:10F04000D14B144A9F8DA3C3EF43FD96879E66F56F
-:10F0500009E14532AD6F7C683FEB0F7BD894B0B6C9
-:10F060003F74E012F0FF8F2433FB8178C35702FD19
-:10F07000343E3DCAD2A15BEFBA314C3E1E71B07E28
-:10F0800047F2C84F6701BC3DE1C259BA7DB9EBC731
-:10F09000083B96D971629DE23D92197BFCB1639861
-:10F0A0001EBD661AEB7741026977B0F3757EB0C773
-:10F0B000F6EE1A8570491993C2E145C7298D8E2352
-:10F0C000E028C613DF5D0C7A1DE4BE95CA7D9D9CC9
-:10F0D0003997E38D7EA70DBF53AC8D877BAC1A6744
-:10F0E000658F07BC517C291C5F8A1D2F57DBCCE63E
-:10F0F00047C74D2E413D3311E2CA7BBFA6FDF3A2A7
-:10F10000F336D3C78C314C1E5DD3CACEF7F7258FAB
-:10F11000403ABA2081D98BA494C28FCAB38D1C6E99
-:10F12000EBC624333F32828721128EDFCAE197CDAE
-:10F13000FA9FE97AE7F0799CEDF5EAF0A4417C6565
-:10F14000EFCE22C4D3C6081DAC338C736485E9BDF1
-:10F1500072CA78308F9411F8DE6A07B1E373B22572
-:10F16000F25E1E7DEF82697D13811F96727B98F897
-:10F17000CFC7BC86062E2D96B6876C10975EDACD6B
-:10F18000E2E4A480AE0FE863564D295F9F9BAFCFAA
-:10F19000CDD61730D02739D4973B3BB13FDD46E081
-:10F1A0001E19AF78021FCFC0CFB1C603BE18081F0B
-:10F1B0001D671B1F629E267846E06C9A9F8027F091
-:10F1C00031BE576CE42731CF5BC644E2B1467ECEF8
-:10F1D000FB96DFAB60EF2DBD91E211EC1FD548CF60
-:10F1E0004B7BF22CF38BA3EFB577AFF0819C4F9064
-:10F1F000541607EFA9F583FE6BDA558171AAA54F66
-:10F200003DFCA49FBEBFF8D10D2E48AEFA48E9CA16
-:10F21000003BB861FB2A17DC33F7A1E27781FCFCE5
-:10F220002820C7CC5B7F9BCB01617735727D73E46F
-:10F23000B7B7CD04787CB1DD8AE70C9B76C405E3D3
-:10F24000306E720DDA63B4FE36ABAFFE04FCD8A6A6
-:10F250009D46FB69F16F3664A8484FFE6116DC04D9
-:10F260000B0E83CDB0C66D56DC4F693C247BE9673D
-:10F270004813E9BB15E6677E1FE67192E2BDA95B04
-:10F28000BE0AF2FBCCED5492A03DD6D4731BDA69D2
-:10F290004D3D177E00764593299FA27E003BECC52D
-:10F2A00031DC0EE3F7A40BF890403ADA37AD0FFEED
-:10F2B000B2E46D3AAF63DBFEE2928AF57A7325E23F
-:10F2C000E9D3EE059B9E5607D6AF1F837D10A77F1F
-:10F2D0008FE157DD29B18DA15DAC6CB0065D101FCB
-:10F2E00068D86CF5520D4C1A1EDEFAC0AFC1BF7C57
-:10F2F0002DCE0BA9A64B1E7EFE9573697DC963D6E4
-:10F30000B41A367D27EC730B3C41CE06D829022F68
-:10F310008B7FFFBC0DE290F01CEC5E819F258FF58A
-:10F32000DAE09C9F198ED3BA7B6D980F6BC653F7AA
-:10F33000DB33C004697DF04B1BD0F747BB25BCF71E
-:10F34000DEFC7EFDE6E75D40870027F04305BE2238
-:10F35000F8EB87B7E0CCA74BB11FC6434E85BFC7BC
-:10F3600001476548E78F3C0D7194D7E3BC0087FAED
-:10F3700047AE75C17A3E5096317ABF6F5506DC971D
-:10F38000576FF567B8B164CFEBEFBF1EE9F0EA83C2
-:10F39000D767B07B24B42C768FA63F0BD6F9B37B0E
-:10F3A0002FC1752E22754887F5F7B1F8C6E70AA96F
-:10F3B0007E2C06BFCC2D66FCF2C19638480E221F6B
-:10F3C000C03E02EC9BBC28E3B9FB7EF72291E558D6
-:10F3D000FF9CC717C61547EEEDB3837DD7C47B35B9
-:10F3E0006D5B1D023C1DC9D186403C9FC2C1CFE16F
-:10F3F00026C1BDEFF2C1E943189E880AFB21F81E21
-:10F40000B5C7A7C173E81FB26A8E12C37BFC7E1B0F
-:10F41000F67D11DFA0F38E87FDF40F32585E9E79E2
-:10F420007D1DC5421E9010D1D3D940FCBF6D0DD2B9
-:10F43000D7678718FF34066AABB13D640D0E81F6BD
-:10F4400040EF6C09E5439C61FF3C421FDBAC9CBF75
-:10F450008DED749E8AA487EF6E09EFD314F4B2E8A1
-:10F46000AE38C37E7D947E8CF745097E157ED6D559
-:10F470005C1E98D76D960F97169BFE8EC2BDE9A7AE
-:10F4800015FF6EB0061EF835F033E55FBF0AFC6C61
-:10F49000C5F8C0D1DF3DF7CA1594EE8F760B3E3626
-:10F4A000CA5B331FD73F5E4662F1F151A797C4E4B0
-:10F4B00063FA3C261F3BD9B9E9FF57F2F6EA01E4AB
-:10F4C000ADBFD8286F3F27C549E711D0334BF0BEF9
-:10F4D00057337C85DF6B96A399C56A4C394A7F0EFA
-:10F4E000111D3C051C057D2E7E68297E2742C782A2
-:10F4F0004E051D47E8D4BC6E233CCDED5530775DFD
-:10F50000FE837525F563C0CE7D560E6CA1533B4E30
-:10F51000E7722B85FFF1DFE561BED12AEE071C778C
-:10F52000F7B9207F6C15F73BFA202E99147DDEE7A2
-:10F5300060F6D2715F9F2B596737BDBD4B76819DB9
-:10F54000170E90EA58F1242AB1711E6132503BDB4C
-:10F55000173BCEE3A1C779BC73BAECCC6D8638708B
-:10F5600017BBD77FE18ACB5CB02F707CD7883B80FC
-:10F57000FF7EF66799DDEBE9D714C89358C0404089
-:10F580003E24FEBBA7D0752ED8B504F31BCC7194D6
-:10F5900045CE6DB8BFF039B9194B73FC6431C4590D
-:10F5A00080DEEF353DDF7511D2D762137DD5017D49
-:10F5B00065F5A7AF1704BF8E27E3F5E7CF9673B9BC
-:10F5C000375D2EBE03EC99E3D4CFC75C02B9F800D7
-:10F5D000E8DDCFC1EF07C6F0A723DD2EA9FBD0C61B
-:10F5E000EF71467A177468F6F7CDE5B127FE3EE96C
-:10F5F00026DAA5E1C9374AEEA1E5B1275F2B7C06E3
-:10F60000EA4FBD9AFB06E9DF7FDAEEAFD0BF39BE25
-:10F610003B0EE7737CF79F726F82FAD37198877500
-:10F620007C651CE645F9772706E03CDFF11C16B740
-:10F630006B7DF6CB12CCBF206D88C793C536668F25
-:10F64000ECFA9FB7207FFAD35D712AC4299A7627F6
-:10F65000A0DFDEF4B403F35E8E3FFBE5247D9CE97E
-:10F660003F5D4FA38DC5338F2792398F033D2733DD
-:10F67000FFAEE999C95B215F6E694FAF0DF607A632
-:10F68000FDF15F2520978E3FCEEC0FEACFDF0F37DD
-:10F690001DCA639BEEB652787F0C3622F5C3378DB8
-:10F6A000EDBE14FCF0FE706170384EE100EBA2700C
-:10F6B000A907793A103C868EB521FD7FFFE0F1095C
-:10F6C000FA170DBBCE413E8AC245D2D8F3C4805D45
-:10F6D000C2F5B3E7BBBF2C017BEA68F70AB40B4E57
-:10F6E000B5EEC963BFAF74F06DD72D054F67DD73FD
-:10F6F000BEB7F866F4FF16D757663EE84FE74FDD12
-:10F7000080F54712BD38DFD3E4FFE6FFDFF0FEB837
-:10F7100084FBF2A7C2FB2FFFD7E2FDCF1CEF896E5F
-:10F72000C82F3BFEECBF72896EFDA75AF793FF4BC3
-:10F73000D71DB18F649F1DAEB8EF24C1109C5F5FD1
-:10F7400035809DF2EE5849E4EFA01F22F277E4B431
-:10F75000C56867C8691D6837AC22EC1E64BF6AE1E2
-:10F76000F7B1B1BCEFF66C6F00E3A28AAF7E33ADA8
-:10F770005B8737783B7004A37F2667D454439CA5EE
-:10F7800075059D171DA735DDE26E55E19A764B3064
-:10F79000AE04CBB7A15C9DF1C3FDF05DC569BCAF04
-:10F7A000D669F237E20B6CC6BC62B2C70DFBD50E50
-:10F7B000AF0277B95353D678BF6DEF58B6AF1D4F30
-:10F7C0000298B779A6704A2D191C4E66F808B8F54C
-:10F7D0008313F747C57DFC4A5A4708F85021D49F48
-:10F7E00064EB413F14FE8E14ECD7589316793BD846
-:10F7F0007E8A1AB9C71FF220B8BF19B96756B5A0DB
-:10F800005F2AE0AC1B0FD76F86F399C257E0C54162
-:10F8100066219E1DD94E6F80CE7F95CAE0BE8AC2FA
-:10F820001DEE1717F0157033E3E17DA0519D1D1FEC
-:10F830002D8DF93AFE4AE2817D96E9F294B01FECF3
-:10F84000E5F204B4978F49242851FFED5845462529
-:10F85000F815C7726C0A9453FBE89A74F3BDE0A4E0
-:10F860003DF237F4A05E41920DF5633985F8FE3420
-:10F870007B96E1BD0390B74DFDF66359E576DC0F4D
-:10F8800075E719DE9B99E0DA02ED07208F1BBF3F79
-:10F8900003FD9B1F641619C699F9CEB17BAFA2E593
-:10F8A0004EEE57F74DB5623CFED89FE755021C2F30
-:10F8B00054C71BFA1F24EE74202ABABE2A58DF450B
-:10F8C0009EC986EF36BCBDA710E2103FF256189EC7
-:10F8D0005F5C7EA1611C9F3D1C04F2AED56A0DCF1A
-:10F8E0001B9ABF204A2A21E7357F4D9489D47C0F8B
-:10F8F000761BC699B87FA7A1BF37E49E0626E3848E
-:10F90000C3DEE7A014F9ECB654BBDF42CBB16F57AE
-:10F91000CAB0EF59F65E5D2B84A1CF3B463C400751
-:10F92000E79078DC0F1C28EFFD4B4BA00ED6F90BAF
-:10F9300039E081327ED8A21258D747999D326C4B5C
-:10F94000DF23D55D5E0276D6678156A85FF075B776
-:10F950000CFE64EB0E19CFD74D976B12FE0AF2B86E
-:10F960005BC21CFF06A705E3F04753BA4BAED5D1E7
-:10F970009DC8DB31F371D1C48A25307E5BA6D6D514
-:10F980000BF2B4F2EF57CA31CEBB12B7F15EBAA296
-:10F9900089BEDB619F5EE425C54F935972FB0FACB6
-:10F9A000182FB9D5E27570A1807AD73DC3BA19F87E
-:10F9B000DD3A8EC98DF8BF1015E241F1A975329C70
-:10F9C000B323774898D722BEB7A09CE5DBDF5E2241
-:10F9D000EE3771A7FF642CBC9FC8F205209606EF96
-:10F9E000D558D04E711DF6EE83FBC8EEF41C728321
-:10F9F00078E8A979C70FFB223D874353258A9721D1
-:10FA00009D15270A587F02F1CD1E4F55C258D46F5D
-:10FA1000E59887B39CE7CFF44EFD8D07F4C7F2A2BB
-:10FA2000D14306CB2F779D9488AACB33B08E5371E8
-:10FA30005E2E258CE7C55C27156C27E1F1CC1FE411
-:10FA4000E3BBE6A9AF5E0BF3D86FC57C67A2684B3A
-:10FA5000601D1DA3DF543B701D84FF5D9130FEDDF2
-:10FA60003CC84FC20BD19470E64F629CC33BB2A31B
-:10FA70002C19FCF2D40A2F9E1B4C7D588E9C9B05A2
-:10FA800038DC0EFFC373B597BE5A45C7DD01B2928D
-:10FA9000B50709A5EF0E9B68A7A2C6C3EF3DC4F644
-:10FAA0004B2F831843BC6CEC3F2E3FD25FB36746AD
-:10FAB000C7FF43C9A5AFB6C584671CEAEB8E1956CC
-:10FAC000CC9F38355C134E01571783EBD7542B640A
-:10FAD00044E38BEF496A2ED0DB9D705C80FAD1BF86
-:10FAE0004CAE0B96A4C3FC8363E1F97C9736642A81
-:10FAF000A5BF1E9B967B23C6491C98FF55FBF3A30D
-:10FB00001BE1C8986BE6114F1BD08DA2254C8038A5
-:10FB100095FB0B940B22CF2D0A474ACFF49BB75B82
-:10FB2000A2759013AE285C35B82BB84307673BAD80
-:10FB3000D772B8FECF23F597B5017E17DA912EAEB6
-:10FB4000E53CD5964CBA20CFEE84FB814B811E4E0E
-:10FB5000ECB062326B0F34821EF5D8D9DFF5490B59
-:10FB600067C2DF71197BD082F1BD37297D68401FE4
-:10FB7000C1F1087731DE8929AFA6C0F98913694A36
-:10FB80000AC06771D88670FB894282707F6A4FDA3B
-:10FB9000C26915C81F2AB677F371264FD4FE518269
-:10FBA0007A9D9FFFD5CE95E1BED481F065DECF87EB
-:10FBB000F8F0B92903D3415B851DEF1F6A2A5F5115
-:10FBC0000C7A62797221E663355549A8879B9A3F82
-:10FBD00043B88BF1959332517579533D104D4CD705
-:10FBE000DD237FD286ED0DCD27509ED3E9E401DFE2
-:10FBF0001CE3FB9D5D56F2D35A5A36FC5BFE69ADA1
-:10FC000013F72DDB419F34903DB6E53A7948BA3F72
-:10FC100089C8FF71147777D6BC180F72B656725F19
-:10FC200002970ECCEADE7B19ECE7D73ADC97C0FEF0
-:10FC30007F8EF71156CF715F02FBFD631F4D9A0354
-:10FC4000FBFBB559EE0DF09741AFF016CDC1F63C78
-:10FC5000F7CB509F316E06AB27323A4879347F8E0E
-:10FC60001FF5B913E1F2697B4260B07B48AE6E7E4E
-:10FC7000C600977EEDB284795198B841E9E79F6B51
-:10FC800086B17B710B4298A735721C8BAF67A4B00D
-:10FC90003FC92BF277D346100DF657D39E72B07B37
-:10FCA0005BDF0BE502FCAE7ECA1184B8E4D2FB9E9A
-:10FCB000B3813E9A2FAB85C057B3CBEAC68C2B835A
-:10FCC000F84908EB5737EFC679754C70F3FB72FBB8
-:10FCD0008A217E55CFF39EEB4DF9BF8B9D7B311E64
-:10FCE000B7789B31EEB68484DF023E6DF8DDE079B3
-:10FCF000BFEF58D83C140E8FF972E84A1B9BD7F916
-:10FD0000E3E8F797A6F462DEB1E20E65D4217C1B2E
-:10FD10003CE8AF64C6E3B99A5B87BE5E12EBBE985F
-:10FD2000EE16AAFF29CB3DDEB2134BE77882EB1922
-:10FD3000A2846D5E3A4E2397CB9342EFD8F4F983B9
-:10FD400073395C9376B2FD6F735EEC5CD05700172D
-:10FD5000BECFBC74D60B53002F029F1724906ECCDD
-:10FD60005F4D215E8E172FE045C03FBADF4CDFCBE1
-:10FD70008B451702FE84E5DBC53379D1F78403EDAB
-:10FD80002BF3FCAFE3FA57ACA39DD7079A7F3BD781
-:10FD9000B7677BFEED5CAE9BD721F8583C177C6CB7
-:10FDA0005EB798F799D359C8763A7426E44C23A9DC
-:10FDB000F3605C96CB150167314F01AF9E01F25D98
-:10FDC00095E63F18D6A3842AF1B0FC7650A420C74C
-:10FDD000BA2FC4942BA57917F63BD3F508793BD0FD
-:10FDE000BA849C35AF4FC85BB14E2177C57AA75214
-:10FDF0004182F210EE7E90C07FA833D8C3157062A6
-:10FE000041BF0F64FFB9A13EDD7DA3A1FF0F3257B3
-:10FE100018DA2F54D718DA2FF2AC33D47FE4FD95DB
-:10FE2000C9AEDF6C68AFD51E34B44F0987A681DD3B
-:10FE3000FDB7966ACCE73EFFC3BEE7A01E6C7163B8
-:10FE40007D4F4B26967B5B54E4EF7D2D1E2CF7B740
-:10FE500078F1F97FB59463F9428B8665A8C587A5CB
-:10FE6000592ECCFCFD650AD8EDE5A12EF407C68F0E
-:10FE7000AFFB0CE4E1014BA03591C2E99C37997DC1
-:10FE80004E02667DFCE55B37815E77B37BE8DA7A0C
-:10FE9000274B6A0C7BCE45F59DA6A317574D98C0FE
-:10FEA000FEB28BC4CEBBFC6A1CCBF7C17C3D4A9B27
-:10FEB00073ECEC5EDB397324CC4F9C43D879055A44
-:10FEC00006EB68FB4C85F841FFD73A15DC8F22FC26
-:10FED000FCF0256C9A70BFBA3F0EF4775A2A9E57F1
-:10FEE0009A0D0FE97C654DC6BCD64BCAFF82F980DE
-:10FEF0005738D9DFCDBA7CFFCA7FDE44DB499BBFD0
-:10FF00008C9D8710F786BC6E3913BBE12B386300DC
-:10FF100079A09297FDDD9464C5ABF70744F9D771DA
-:10FF2000CC1F98D9CACF0B1C2468C7097EA4EB6BE1
-:10FF300087F90BBEA8752BC1512ED0F7EBA641FF58
-:10FF4000FF0B270420E00080000000001F8B08004A
-:10FF500000000000000BB55A0B74146596BED5D591
-:10FF6000AF904EE88400411E76886020AF4E271D7A
-:10FF7000C26B28124054C446650714A540313C9317
-:10FF800018981547F774633308AC6737337A5C5DAC
-:10FF9000C1D3E0A0ECACE7102171339A300D2A8F69
-:10FFA0005947A3828266B141E4B126742428E270E5
-:10FFB0008E7BEFFDABE8AE4E02E859939373F35797
-:10FFC000FDF5FFFF7DDFFB552D3FE4720701A0BA71
-:10FFD0006C4D1E14209D221DB7215DBEFA3B30F7EB
-:10FFE000C3F1EA0B602E06982ABF164C2D01387F0C
-:10FFF00004DC369C3FA65D3DB3CB85FF5CFE5182A1
-:020000021000EC
-:100000000100ABECF83F8ECB3AEB2AFAE2BF45E1B8
-:100010007A30D335FCF911FF8A0F34813927361E27
-:10002000F77DFDDB346FB75F05B305A0D93F876966
-:10003000D8BF18CC2300F6FA6B78FC8E7F358FF78B
-:10004000F9034C0FF8D733FDABBF8EEFBFE77F9EB0
-:10005000C7EFFB434C5BFDDBF97A83DB09D01FE084
-:10006000426BC540350F8F46632F6E689F9CE94BEE
-:10007000416A16740E1DC883D40E968C0CA473248A
-:1000800096075E0F403AD3B08AF79767BEC5F2C0B5
-:100090001F9F1DF99D0DDA4F463F339402DC03820A
-:1000A000FFD965FF7D494AA5819A23A1BCEECDEC1D
-:1000B000031B2580FB2090BF00E99CCA3ACB7889BE
-:1000C000EE4F719E42794881CF4C3FE6A24CE867E3
-:1000D00052778A078553BADC6480A58EB556180E10
-:1000E00080523A1141F99A40821FB3009640D80AD3
-:1000F00074FF8F96139138392F03C8826C3CFF6BC5
-:10010000169EAF5F077A3E6E5DB94286B274929BCF
-:100110008BE5B60222BC9E4D7EC45DE3A0FDEAAC39
-:10012000B44EE2BE4B1DEF5871D0C3BEADFCFCB562
-:10013000F6D5F55405B080E6AFCD54EAF6E0BA2B1B
-:10014000FAB43D209B7A9087D3DC79653D94C3BF98
-:100150008C127A9553A6D85507D9A9034CA8C7681D
-:10016000480ED9709DC55975A9B42E1A662AE0F5B6
-:10017000252D32EB03CC8A7910EAAD52D35B3B8458
-:100180003F21BD544EA89C01A8BFC59B8CFC2C757B
-:100190009C64B97F0BCD3DF25B054F7F23A776E7CB
-:1001A000B76AC22DA769BD2A4D6E7C1DCFB5BA4D69
-:1001B000DAF14EDCBC95EE948C53C9E4583086E4F9
-:1001C000827CB8C3E46F8764F6B7DEECE39C1FD88B
-:1001D000DE2FFA61C73B68FFE72EE3851B009E70A8
-:1001E0004F7B3E30E197D35BBF62DF0637F913DA0E
-:1001F00009F991AEC775684380E75E576E0F0550E9
-:100200009E51AFD34CFB47A5503095F47209DC6B7F
-:1002100050DE939BF71F213F996C7784496EC84449
-:100220007BBC5E27B58BCB134F868229387F7C5BE6
-:100230004026B71D7B480D3A703CE63D05358D7173
-:10024000E61D9F4C7ADFE96F6239D4FBEB99C6FC5F
-:10025000E726F6331884D7B2AFDFCFE021BB89E2BF
-:10026000DA4AED4CC134A83361C0EA724C93539022
-:100270008FAE30B8E97AD1215790CE55DCA6C8A907
-:10028000782EEF493548E75E876A506C1427037271
-:100290005FBC6E3343D88671C4966902254EAE6347
-:1002A0002F84821407F5B8D69C24EC79D2E57A998C
-:1002B000E296D3AA6EDF82F2843793DCDB5CDDCF7B
-:1002C000FD96DBC472FF32DDF7961B29385C237D77
-:1002D000F9643FEDAFBC48F6D390ECB6E173897199
-:1002E0005A8F8BFA3ABADC7439563BBB38EE2F5F23
-:1002F000DDC5712F71DF6A13A8F528774F85ABB87C
-:1003000016D7695F03F367E1B8CE8234AFFBFC8F89
-:100310003CE5EF93BD4C9527B42A742EA7E9AA7645
-:100320005DBDFA1BDEBFD7FBDAFED52D5EE7424787
-:10033000ECBAA34812711ECCCE53F6983EAF57EFDD
-:10034000133BE718F2D6A4EF5543DE9A8C9136FEA4
-:100350007E85FD11C378AAF331C3FC5B32D718EE5A
-:10036000DFEADA60B87F7BCEEF0DE33BDC2F18E6E7
-:10037000DF59B6C5707F96F21F86FB33655024F4B3
-:10038000B97C2964213F9B0BF54CE7412BD307A097
-:1003900093A98A96447421B8993E043EA62B3CAAA0
-:1003A0005C847613B5740E20BFEF78E3EF796417A1
-:1003B0001DBF1AEFCC72C5F2B29EA77F6A3EEE63F4
-:1003C000453DF5600F038A84DDEAF1BE57FD24C484
-:1003D000FB6811C6133C67B43199E34C34A54F4810
-:1003E0009262F1042DD244F958F75B3DBE14CF73ED
-:1003F0007FB092FCE83D1946B8BAC79BA9662C0DA0
-:100400003C74DD9D737F7E6CFFA00916939D6D4744
-:10041000FA3AF2D1775EC4EC8AE3A780F8407B9B7E
-:100420003C770A44F0FA4C272821CA4376C848A2F0
-:100430005878B92B6F36068899DFA3A2D09E7F48E3
-:10044000570A49DE81A726A49DCAD5E2D28DA8BF4E
-:10045000E326E6079648A111288FA60631CE5F94C1
-:10046000C6FCDD0761D6E3FD10B110FFF301384E85
-:100470002F0017D30741617DE2CAC905189F1635C1
-:10048000983D1B91CFC2F4CEE1E49FF9638FA64B58
-:10049000782E2CED14E2A7D004EBA9BED1F9A8D593
-:1004A000F8D858A454D0F90AD35B373E83FB77368B
-:1004B0009A602BAE737AEC630F435C3EDEEE299FAD
-:1004C0004EF37648A0505E0DB4D842DBB268FFCE42
-:1004D00001940FF4792B3C15338B70DDD945C0FAAC
-:1004E00086D6BF00E9679653C81EA6F46719E07365
-:1004F000C37CF93DF967809F2B2459DE00E2421945
-:10050000EFCBE3875F7F6DCEDA3CE6274075DC7684
-:100510008F3A9FCF6FC55840E7DF6C0B6DE57AAB24
-:10052000669884E7AC7CC966A2FC7F14E333DC0CDC
-:10053000F0B9DFCEF47FFC4EA65FF833991EF7BB0F
-:10054000987EE9CF61BAE87B6400F577BA48A922C2
-:100550007E7AE3A3F73823F8884A30A7DED1FD7E00
-:10056000A5E60F050D279F4C263B6892DD64A7F991
-:100570008D689878EE73CD63427256BC5CD5C7899E
-:10058000CF82A68FFF30BE849E333B259C7FAEA9D1
-:100590006B00F96FE2F9AEC8A3C52AE4A19D7747C5
-:1005A0005AEB467A7E47E3703A21C611107648FA34
-:1005B000947AE2630DDBC9AF8A44BEBFD3D659E259
-:1005C00074C4F8032A3130CFD46A7966AA7C39958D
-:1005D000FC6216AD3B96ECFAA60F68BFC001E1873E
-:1005E000A8D7F9BE387FDAA5C941A7F92D561FF95A
-:1005F000D38E964FEEBA1DE53073DCAD5ED9159BF8
-:10060000FF3209C14BF67DE9DF9FC9E0F94EDA6A96
-:100610002E6C99EAC479F7D9F7BC4B22B8DF797C04
-:100620006A1A8EE7674AFB882E70654D4BA7380023
-:10063000217EFEC19CC9FBC8C466B86759A99E98B3
-:100640004C4E1517772BEC186F0C71BE9F617C4BCD
-:10065000E660C3FC5B5DD986FBB7E7E41AEEEBFB13
-:10066000CE70171BE691BF52BD8D7CB0DE619B1C26
-:100670001A21911D5CF86C19F33FB784F88FA2FC26
-:10068000AC58389C29DBF0DC3314361AF7A6927F7D
-:1006900026D6B5CB5B5EDEA7B87AAF6BABC0D737DB
-:1006A0002CF55ECFF6560F5E6F5D8B71E40F14472D
-:1006B0000ADFB8C719C473EC187BE90617F2F761B3
-:1006C00051CFF56E54AB7713EDE88ABD4A2E613FEA
-:1006D0000765A07A48AF7B13ED08E049AD0E10F432
-:1006E000A7FAFBCC8F44DEFA8AFCBE5FBC7D6B347C
-:1006F0005464C8338556CC2FA89FCEBFC9B0952E61
-:100700005CC673E87AC88ED93F3CB4E5DD41257CF0
-:100710003D40756D15E5055C3FD923897597EF79E7
-:10072000775046EC3EAC3A6E980F4F48FB0CE3B561
-:1007300059C6F1D393F7C53FDF5B3CAADCF488557B
-:10074000C5385DF9ACC4F92AF1BE7E9EA97B93142D
-:100750008A9BE6661BF753554E051407554D98477F
-:100760007AC8EB7A7C982B434D4F716E80B6EE8C35
-:10077000BD4920FF8C758FA2ADD07902FF25F2CD47
-:10078000D1BE0AF8E2F6C9F288FAAF23ADEE9FBEF9
-:10079000C3791D7F063789BE234DC4DD8286D326EB
-:1007A00013E5BF3EC25E0A9C11533AD2E8E2E40070
-:1007B000A03F552F4909980AF1FEF0CE4FECA8FA58
-:1007C000519E412FD8516F9F994C86FC13A5988755
-:1007D00063CFCECCB9947F6EDF9B1436FD0C7E3C8C
-:1007E0005473202D2C177EFF00D98DD84701F48F2C
-:1007F000EADF81BEAF427182F8A7F132CF90A3CF7A
-:10080000E2BAD507451CC0DB8EC47EF6BEB87E16A4
-:100810003609FFB5E32FD53B55109AE620DC208C36
-:10082000FE0FBF9CFFCFF43832B8CE213FBFB9BB1B
-:100830005FEB7E5F7D58F8FDF9E66F3FA2387F1EC3
-:10084000F35FBCDFEB72D3FDBDFA7999FD52BF7E39
-:10085000AE599E1EEA41CE65BA5F296EF6D75AA7F9
-:10086000D8B776E2C5BB28CFD5B6A086A4EEFBE804
-:10087000B47ABD0CAEB87D76ECB62D0E39627C44F0
-:10088000F5FCDAF26DFAE43C41D750FE853A2DFED4
-:1008900088BA06F3AA2583F2EA2CC9BD0DC9E196F0
-:1008A00081E524BFC312845D1E5EE21E3B9EEF6E97
-:1008B000B11C5D77507D06993966DAE72E4DAF772A
-:1008C0006BF8D2EC96D92328DE7FD2B0F0B042513B
-:1008D000CE93CDFBFD1A025C1F1E4EF30D5D89E722
-:1008E0009C1914767E38ADB39DF0A8C31393A5A0D0
-:1008F000C4EBAF8DAFFF0E5B7C436B982F0D97520F
-:1009000046CB3F26FF847E598B8BA8CF8024FA3BB1
-:10091000F603F3A0A719675802A17D0AEE5BE50E66
-:10092000739DBA0C042E9058DF574DF8DA4AF9211E
-:10093000B11F9DDCB4E78854D0038E9160B7D7C255
-:100940002D12FBE0DEF0871FD27DDB3C71F8616287
-:10095000BD7EA52ED5EBAA6DC9A1AD789EB727FEA9
-:10096000DBB965385EB52DD9497DF7D9976C018A19
-:10097000CF67B7DA4212DE3F9BDED9467DC8D99DEC
-:10098000F96E5C012A4DAEFF7C8DF2FC9F2C6C173A
-:10099000006EE11F57ECF4D16314EF6AB7A548402D
-:1009A000F5B52AEEEB3DA0FC6A0AD7094B760D0A95
-:1009B000D9A4589E21FF706169716673924245FF08
-:1009C000D90377F725FCAADDF4FA30C6C3E4278EF5
-:1009D0003D86CF2D7B25C543F504E401EB6DF1D6B3
-:1009E000515BA83E7ED1A2EE27FE2B5EBD63601652
-:1009F000ADFF717F207EA2CDBB06507D14ABDB7BAB
-:100A0000AEF7CE3767F785BC989C743C71FD1FD755
-:100A1000F848EFC9928BAF9BA146194C76D1340BA5
-:100A2000685D8F2C29E4979D1B92B94E4DB4BB6332
-:100A30001ED1A72CD7F1877E60CF24FF5181E5100E
-:100A4000DD90BB7523CAE93B4FBA96AF3B47DE95B5
-:100A50001F6F9F6D556F917D6EB2312ED29E64AC2B
-:100A60001B74FABF9E34DEA7D27EC1804354ADBE54
-:100A7000641CE761BF87CF7B82AEE24790AED4E4CF
-:100A8000DF35DAD7E1C1E797D6FFFE8DF7582E9B09
-:100A9000FEF133DAF78043E031EF09F925F60395EB
-:100AA00076817B006CE1F3EAD74F6FFEB480ECF007
-:100AB0007463EE48D2E342B9F5D48BC8E7B994D653
-:100AC000638F23DD79E023D64BE27913F19B7649DE
-:100AD000627E97131F78FD1EAF4F2EEECFEECC7DBA
-:100AE000DCC28DF92CBFA9725E5FD263F46C2FFD5E
-:100AF0008A764E7D7DFD7CFAFAFA3C67B1D0D7FB51
-:100B00001AFEDE616D3D47FAED782357227CF0CA6C
-:100B1000F5F4D682B4387BF9A570F97B357CE4888E
-:100B200069CD6FAC688FEDF5CF58D4F8B8F713F1F5
-:100B3000F82BF5A0022EE700914A386F2173661C4E
-:100B40004FD4C7E40C389EA01D4FA2F3A05F4ED433
-:100B5000282C5533196FA7F590264188C7C1C96E57
-:100B600017D149928F710FBD6F98063543880F9347
-:100B70003DC238E15AC227B16E999DB6EE8E2CDC8B
-:100B80006F6D7F5847F5CC5A8BF08BC08264EEE7CF
-:100B90007439E979069C7986FCB2D6092E33AE33D6
-:100BA000C70CEB2DE962DE8D28E7C30716BE4BB8F4
-:100BB000EBA7E69AFEB4EF51C7B3F99289EABC50AD
-:100BC0000AF58C9F7DF427EFDF70EEE7A04CA4BA06
-:100BD000E29EFD768EFB89F8C42250795C0911CB28
-:100BE000057CEE8BB13F6CDB0B31BEBE18F75D238D
-:100BF000F509F7A53DE9A5E703E5904379E96252D8
-:100C00006A01F1B3DA2EE8A37D52B7123DEB74040A
-:100C10000897BD98342C44F9F445497D80EC199F20
-:100C2000E33E36702C3944F9EE5159AD621C3ACD91
-:100C30000A12CE8FF6D7E4D2012C97A8459BFF8DE0
-:100C40008BC725151EC629E1A28BE3F2F884BC539D
-:100C5000926B12FDD98F62FEC44EB321EF94146AD9
-:100C600078CEDF5D5CA74EFADE7CD5BC74B958F453
-:100C7000BB25FD4C353DD58BCF68F783109605CE4F
-:100C800023EA85F157EC4B91498F55DAB88AF21A6D
-:100C9000DA5534D51E9091DFF1CDC2CEC69BC37B11
-:100CA00088629485D5545F3461DED3CF817105327B
-:100CB00073D91EC6E9768A6BCDC379EBA41AEE63AD
-:100CC000EC54D720DD28B5F2397E059D4C152D9FBB
-:100CD00097839BE914F031453B653A1DEA98DE069F
-:100CE000F54C6740ABC8FFA3C341CE6BF08493FBC8
-:100CF000C15B2B4D547794FCBAE7FEA1518B27BD05
-:100D0000CB011DAFF4A7CB611AA0FF65F7208F219F
-:100D1000391C4712E591E8A7132122B39F5280C8DE
-:100D200026FCC0C5FE5A010A8FA75EA71CCA22AACC
-:100D300099F19B447954F46C17BB35BBA8255BEB48
-:100D40001FD35357B18BC7BABED0BF32A90E4DD4F3
-:100D5000A37EBD24B9BCCB85A1F8B35D27E79A314A
-:100D60002F951497AFCCC6717BF1B773CD98CF4A4E
-:100D7000C697EF1A8EE373BBBE13E3C2F2628B1BFE
-:100D8000BB983517E74EC1F92AF9672151F4438A18
-:100D900067AAE88F5769758CBAE6376E27FA8B3ADF
-:100DA000D4E1263EED58EC133E2A678BF78EC3A69E
-:100DB00087F75A70DE498B7A98FC77853D9CEA422A
-:100DC000F9AF5A33752085CEA7AC62BECD26705AD6
-:100DD0009D3FBC1E48C2F1CE9DB92BA5E1D73E0771
-:100DE000AEFF25ADAFAE191120FF551B25B7D06C56
-:100DF000F9C03928C3F6560B106EAAEFF7E468F570
-:100E00000CE747979BE3F760ADCE69DF999B4B7A80
-:100E1000EA2A163818646415931C8F8FF675D1FC76
-:100E2000688AB0B72ECAE5DEDEE9E012E51B9A9FBC
-:100E3000783DFA151E009F3797A817E97E75F26571
-:100E4000CEFBE78A3E5E17C98AD9AD844A9B87FCF0
-:100E500007150859393F4C705EA95329DE2DC2751C
-:100E6000501E253E3548216ECCBCCE528AABB8AE62
-:100E7000A904F7A9B6468615E173CFDE7DCC2AEC2E
-:100E80006E88B03B2D2EB5EC3EF8F86031F4419CF5
-:100E90009F55EFBEF4DDE728BFEAF30E374D8FF91B
-:100EA000D70B2BB9DF0487218EE87E37AEC9C6F594
-:100EB000F6F8E6518B68DEC48FDBB289AF496D115D
-:100EC0007E8F166DF974B03887DE875C947E4E3E57
-:100ED0003EADE589D3769117E8BD30F77B8DE2BD55
-:100EE00070AD8673D6B648A100C71FD13F2FD6F884
-:100EF0005B71B0711FE1278B373D3883ED2824FAF1
-:100F00000A17FE525C587A44F4CDCBB61BFB8D6AAF
-:100F1000EA9B693E84AD640F2BEA13EE6FAAE0BE34
-:100F2000B93A3EFEF7D0377B4B347C6C280C65BE5B
-:100F3000E4797DD51EE261625F5C05CA8412AE7BF6
-:100F40007D32EDEF35F78C3FF42FD0DF9389FABD7A
-:100F500052DB9BE4E460B958B99FA8DDBCD2EDA494
-:100F6000B1E6B75B4CD453E3C4773E80F8E7743FF7
-:100F70005EB25EE2BE0336F5631B2C7CC5A610BFD5
-:100F800085AF0CE43E04FB25AE0FB7BC625B4FE3BC
-:100F9000E0EFFA04E442C2A13B6F201C269884F5DE
-:100FA000A6C0F341F2300EC3B8C823255ADCD7EAF5
-:100FB00000081719FAF9A096FF6B53460EC4CE39F4
-:100FC00036EFC020437F12D4EAED123A27D58DDBED
-:100FD0006F10F793041F7B3EFC8764AA7B1BCDBE7A
-:100FE00064C2B5CF1F1ACE7D4C6F72F7621A82AB06
-:100FF000BCA7F47E3A23FB6A7A2B79DE2CE4A5D9D0
-:10100000ED9B7E05BEB4C4F4A2F337557EADC24A53
-:10101000B8C843E0249CA4F6E0CB413BF5851B8097
-:101020001188F320ECF9FC1913BF772F859C7F9D65
-:101030008063EF19B33B84CF37687191DE3FBBE229
-:10104000ECCCA6E1BF49AE3EE08AEBA39373D20D90
-:10105000E314F70D86E7FA960D37DC47796FA5F5AF
-:1010600021A0B4E695C6EADE3465B4E1B9A752A77B
-:101070001D60BF6F7D9871A97ED33DC6F3C8CD3288
-:10108000C503B820EAA532FC257F1B038120E96354
-:101090005CBBB18E2A8BD471DF9874C86CC0016CB4
-:1010A000D7C0A5B6907F519C1C024344DC4894B73E
-:1010B000F1FB8BDA8332D77BB543B150CDEA49DE01
-:1010C0003719E4ADFBA32EF7FE3EA3DC07CE31CAF1
-:1010D0007B906A94F7E0C546790FAD31CAFBC6D55F
-:1010E00046B966058C72CC5E3FCE307F445DB961F7
-:1010F0007CF3F3B719E68F0ADD6518E76EBFD730CA
-:101100003FBF7EA1E17E61D3D2EBD27F51B8D63012
-:101110002F51FFC5077E7B55FD07F057E81F581F6D
-:1011200065A88FB0EBFFCF0E4EE87156B783EB8CFE
-:10113000B36F92CF329E302112203B284B663B99F1
-:10114000992CE2CEFB07CE1F5270FC81ABD892499E
-:101150007596563FF8B438A4F733897DE39D655200
-:10116000C2FBFE24C3FBFE6B7D57E76D0D1BC6451E
-:101170008780BF9BF11C71BF4DD47B5261B8ABF42B
-:101180004CCDDB44C75EE0B4DDAD5FD5BFCF4BECEB
-:10119000B760F9217EAF384F7F2F434E51DA1D9F44
-:1011A000D4FB31BDCF4DEC7FF5BEB77B9F26EA98CF
-:1011B000EEFD863BD3CC75B4CA75F57E49659C734C
-:1011C000CB2875B0D74B4D00F6C926EA93234121B1
-:1011D0004C05E83D7494FEA72224F0CCBD84C7479B
-:1011E000D380F17345AABB3790C7C777464A057CC1
-:1011F000443FC55E758417F57A4272AE2B267C6239
-:10120000DCD7C3A81EC9F18A3ACF26A3A4302F0D7C
-:101210009CA7005DFF215D19E5F5C6F092DEEC2686
-:10122000F1FBA4067F98A9D9E9E6EF9712F1C588EA
-:10123000C9C5F569E0B7127FF7F3351D6E6CAC8E4A
-:1012400039BFDEC2750C68FDFCFD9AFC75DC639E3F
-:10125000C6CF095C6231E6E5FB9BF6B35E9665B6E8
-:101260006B78490DD7E30F0E7178F87B38A5D82D30
-:1012700070321D07192CFF94BAEB5AFC2FCB3C6B34
-:10128000C0A1E0B57ED7F5BE3CC6B758FFC4068105
-:10129000679ED83094F1F3D8FAE7188FBABFE643C7
-:1012A000837FCC5F7DD4E00F0B02C70DF723199D20
-:1012B00016C21F236F0C9A761FCAAFA3D1564AFAE3
-:1012C000403B7898F4AAAF1FD9903B85F6BD369F76
-:1012D0005FF339DAFCADAC5F9DCF63FE233C8EF843
-:1012E0002309DFA7093E759C43A7D6BD9063A6F7E7
-:1012F00089521F37E1CABDE11FBA9F994A87F33A65
-:10130000174DAE530227AA1943F55FDBE401E574DC
-:10131000EEB6A156B3A023C57850995D8CA74D2792
-:101320001AB538D6132ED22689EF89E649CA4B0B57
-:1013300070DFC747A94F913F542FED2C20FFAB2EF4
-:101340008C3C20E1FA5DFDD58D241F09DB8B41E942
-:10135000CC077F7776C6142890D055F679BFBC9716
-:10136000FAC4337D02E7A842D9DD784C8CADC21FA8
-:10137000DFF71E60FF3B898B119F813F4B029F72FD
-:1013800044ACB3709D8CFEEA73B42F7D4F46EFF7EB
-:10139000E83AD9A78E97462DA24E8C6AF5E266AF41
-:1013A000A8675F4AA04D54E312FE4894E3F5D323A7
-:1013B000094F3FBFC90654DFE2FE8AA924F6FDCAE1
-:1013C00000E485EAD877ADA2CFF4FCC516A638A50F
-:1013D000E3AAAF7BB378BD8C6C819766FC33C62DD6
-:1013E000F2C348EBB0592971E73D048C6377101EB6
-:1013F0001D8763BFEE15FD3A3C24E25EC786C18CB3
-:10140000B7AF3878E218C5AF7BBC6A23C975A1C9EC
-:1014100055CADF67A5EE61DC6CBFD7C5FBE27999E1
-:101420005F8C436B494F2BEC11C6D9AE85ABF7C629
-:101430007FC7A2D6E7F21847761590DDE8FBE239C0
-:10144000F67BE3F06FFD1CB175AEEE073A3EAC8F54
-:101450004F6F7E6AA486EFCFF7F5905F8F69726950
-:10146000B3F48CC75FF28AF778DDF4733300E1FFE1
-:10147000B63E98FB917EED15FC77CC457E18DF508B
-:101480008A48BF2BEE72B849CEFAFAB88EFAFA55EE
-:10149000F6E91AEDFB8AF85F5A23F07BFD7E5412C1
-:1014A0007A0D6C1078EA8ADD478F3D8EBB2C79353A
-:1014B000BF98F281FE7CA29C51BE23F9FB3B59BC34
-:1014C000FF42F99EA7F51371FB9F2BD7E850F19EC1
-:1014D00036BAE5D230FA3E6D057D0F5740F621F061
-:1014E0002F6830E25A28AF00E11BDDDF6B01BF1F20
-:1014F000B369F9C4A63F3FC46C78BE3EC597548A11
-:10150000E77F438B1B383F64A2EFB9B5F8D4A0F551
-:10151000DD89F84B43ABC04D1B32AD5C4753FD43F7
-:10152000F7F5FA67D58702375D9525EA6C3A27E922
-:10153000593AB28FEB852BB8B884F91EE5986E55F1
-:101540008794923FA92B399FC937A29EE97DC85F36
-:101550006FD37004911FBD5A3EF4D23A74AEBCBE34
-:101560009C274BB47DB1BF60FC6E2CA85AFDA0E156
-:101570006F1BF619F087FF037A5FA88030310000F7
-:1015800000000000000000001F8B080000000000A9
-:10159000000BFB51CFC0F0030947B0A3F20FA0F13D
-:1015A00067B2A1F2B3B950F9875950F9FE68FAD180
-:1015B000713B13030323137E35F8B0083303830C08
-:1015C00010AB00B10E33F9E680B089280343A904BB
-:1015D00003030F906604D23E405C06C4FE407E27A3
-:1015E00010CF0262197106864B405A5E8C81E1A5CC
-:1015F00028449F2D90FD438C3C3BAD792973F32803
-:10160000A60C5BCAA2F285D41818BCD51918266B93
-:1016100040F80648F2AB8062C26A10F611790606FD
-:101620003D205F5D16BBB94781F2FA40F9DD1AF83B
-:10163000EDDFA183CA773543E5E7A1C937BAA0F248
-:1016400035DC50F9AAEE101A00B1C92A3BD80300C4
-:1016500000000000000000001F8B080000000000D8
-:10166000000BCD7D0B7C54D599F8B98FB9736732D7
-:1016700033B949263079C14D081030E02484808A7E
-:10168000701322449BC204698BBB6C77C4D646148A
-:1016900008EA6A7C6C33790701096A77295A3AB1FA
-:1016A000A2A0B44D5DDC3FB5D69D40DCD2D6D6A01D
-:1016B00058E9AE6D23F5DF5A57D9A052A9D2B2E747
-:1016C000FBCEB9997B6F2609E8EEFE363E6ECEBDA5
-:1016D000E7F19DEF7CEFF39D1345F4106D0921E7D1
-:1016E000E1873E5F25F4273BF924A48790F9F01C9D
-:1016F000922373E019E3EFD933B8B64F2045581C55
-:101700002495841410F653D0D4B9599C4BC8641254
-:10171000FEF1CC425A1EBABE8E0468F9F5ABFF004A
-:10172000CFCED5D5B557E984E4ACE93BB69C3E8332
-:1017300091B8102D25E4412212920BFD15C7AA7C09
-:1017400084B44367971332299663C44AA160D002D8
-:10175000217FA7F28188A8CBB4ECC75F93F3309FB9
-:1017600084282451821585F3EED1ED9DF5CDA71F78
-:10177000DA99750AE1FFB71298DF44EDC8ED6CBC49
-:1017800018FDE73CC54B5E727CEC27A7C152268052
-:101790001FFB776304EF9BFF57C6CB25E51EBD8279
-:1017A000CEB74ED4E2509FF465C8B41CBC452609A0
-:1017B000817EAFE8115CFAC4EBD249486D9F0FF10E
-:1017C0002BD4FB93F07D8E08389F2977BFD9DB158A
-:1017D00024E4CC5A5F18E94323242B73F47CBED64F
-:1017E0004C48C26D29AFAE16A2385EF8C7C5B47DAD
-:1017F0006CB518DE0BF0D4ADCA80F766BD3BF93886
-:10180000A3E983E832C5A3CCE943AE130DCFDC4F87
-:101810004F1FF227A48FECDB2DEDC8C5AF17E27D7B
-:10182000FE85D3C7A71DCF5CD7D17CD582704CB9BC
-:10183000BBD843E8FA3F50BB2A3D9AA2DED8EB5A08
-:101840008EFC1EAC23463C45BB2DB09E38CF984D38
-:10185000DEE093AE8F34B2BCB7D9D64B9A5CB9A652
-:10186000771C7C4841FB7CCD7E9526497F338B16C7
-:10187000654D84FE64DE5FA7B62E46806E81B62974
-:101880003EA49EB204A1FC414224BC974320D2B2A4
-:10189000A219F1FB0428C5715D4CF8D462D1369EC3
-:1018A0002BDF6B5B0FB2262658E1579A1484430650
-:1018B00036E1F22E82C28DC10D439C9F06E57B6C02
-:1018C000EB2FFB48C243E5EA96E272625D07934E56
-:1018D00005C1A4D37B2E4CAE38C75B6D87F382DB8A
-:1018E000F964FD77669BA2F1DAC9E477269E28F2B7
-:1018F0005E815F2CEBDEE52287844B0969CBEF8CA0
-:10190000C1DB2EF8DF65489F20B448577EB906F446
-:1019100044F60932C0E931C9239489F57A898EF4F5
-:101920001413EE20504FF245104FE6F7B1E1E27488
-:101930001733FA8B69BF9FE5DD7E96EB3352E17A70
-:1019400073C884BB08E7912CD379BC7B17FD1FA516
-:101950008F589910DF2B8CFE5E07FA90CAA33A7855
-:101960006F91276EC12ECFEAF8B723CFBC36631E26
-:10197000A5C7C1B044405CB53EE3366A68FFC7AE58
-:1019800014E26E81C34BEBAFE070BE686415007D5E
-:101990000ED6B8917E572CFF3008E47BEAD02B722C
-:1019A0002A7E5DB1C8958483FEB7C93A3FFADF2429
-:1019B0001803F9B206E9C8846B43B984700C2E127F
-:1019C000E230CEC0AF7E7FFF1514CE172B84B05B04
-:1019D0004778FD848E3768BC1F1C4F4E10737C9D6A
-:1019E00068804FE7F823EBA186D7005F36688A7ED0
-:1019F0001F1DEF66297C14F41899CCF4438336A399
-:101A000006D64712187D2C1572B05D9BAF7512AECD
-:101A1000BBB436A5BC6AA08A422B87EFDB668C0B71
-:101A200067DC353C64A1EBA6D70BEF1FB0C039478C
-:101A3000F0077F97467F594016C03ABFE75B959EF7
-:101A40002063F7F776B3DA22BB08F9B059BF7FC03D
-:101A500035FAFBCD1269EC2B1DFDFE1A41E5F88825
-:101A600029609F99F31E99A72F88F47D33885F4AD8
-:101A7000EA37EFF3B4C856F9E398C7087E3F613BF5
-:101A800035786B2C57077E8BAE14A01F99FE5399A7
-:101A9000E4C79B0FD433BE73C0DB11FCEF81772208
-:101AA0003E7ECFD7DA09F66A9B8BD14B7BB6186E98
-:101AB00025A3E9C55C0F138F17BA1EDB040FF2874D
-:101AC00049470DE2DA71D77D223ABA03E8E892FF7E
-:101AD000793A7A10E868FEFF493ADAF57F918E92FA
-:101AE000E5E5682FACE47DF50FFDF62190CFBF3022
-:101AF00024947BBF58C4E4FF2FA24C2E0E92E8F62C
-:101B0000F9A00F8E4B28A7068D363FC24B4D629829
-:101B100007FA5D94FE5E017B692695EBCD2A3EE9CE
-:101B2000EC0B56D1EFC7AEFA301FF4D731BAB6601E
-:101B30007F13326C18B4FD4B23656A8043D9C3CA46
-:101B4000C32D6763609F0F0AACFC2F2D678D188E25
-:101B5000B7AD7339C5E74AF895C2B17A9160C453FD
-:101B6000D0C54F0485E1A586D8F42A5D979F0894D7
-:101B70005ED4C866B4AB098910F40F8BA99D60B11F
-:101B80002F9A4081815CAE71A3FE73F6FF12B70BF2
-:101B90009D76DCEA45652ED017EEC86979883E57F8
-:101BA00046042C03FE350BDCA22118A007228BDC97
-:101BB0008F82FE8BC8C4A5A5E0D79586DB66779D8E
-:101BC000E67A8CE2650DF35BB482FA39C9FAA74D67
-:101BD000FDEB98CF587461CEC32C5FBBE8F4401680
-:101BE000CCBB56084F8786AA56F045BFB5FF34D305
-:101BF000BEF103DE7EB1E6DA74460751D4AB263D72
-:101C0000FDF88DAFB860FE647516D2E5EA3AC96694
-:101C10004FAEAA49B3953FBFE8DA71ED7012B5E057
-:101C2000C142F7813C82744A7E43ED144AA7B1EA6F
-:101C3000E128DA2D2705BD8D96D317374D857EEF28
-:101C40001133B1BEB0B869E610DA5BCB90FED37841
-:101C50009FE94AE3EF8B40AE4E17C9A33AD8A3E3FE
-:101C6000FB051D9CCECDB22B188D09743DF5985601
-:101C70002E8D83EFB821D6A6F21BA6896CDD3A62C1
-:101C8000ABB4620068C02E37326A1AD1FE33EB5310
-:101C90003A9E2666C3B8317C3F42C7DD745EB49D70
-:101CA00097D922247DF6AA7432CE3CDA1DEB4FC5BB
-:101CB000BF914ACEDECCE1238758FFA64C4ACFA481
-:101CC000FDA7A86F3EBB78FF67C322190438E588DB
-:101CD0008AFC50524DACFD10A30CCB0A2FBA431115
-:101CE000B590E2D35D2AC2344847E9A386AC031E0F
-:101CF00062B8DE5BE9DAE65BF872EB9F25F4F36F1E
-:101D0000168B5A406E6CEDBF89E8141FDE509C6044
-:101D100079CE8D2AE0692B75B206617CB98F001CE3
-:101D200069F9F4773A4E9A46E23AED4FD6FB122221
-:101D30002DCBB5246CD04F7E2D2C78A99C381C2A35
-:101D40006A91E9FBF6B504E52301E961A19FF6D0AC
-:101D5000CB8604F4B3868401E0F6E03A9C6767E939
-:101D6000BAEE42FAFE4C9D8CF103728EC26BFAF50C
-:101D7000D4CFF0961003C6DB9A43E23EB4830DC481
-:101D8000AFA2B1F5D3771593C43CFA3DA3B21FC6F9
-:101D90008FFD3D617C49985C93B93C2132A53F1889
-:101DA000BF490BDF9782FE5412BD499C6F59672DC6
-:101DB000827EAC136FE90AB906F0DB5E46F9208536
-:101DC000DCBB4314910EE2E1552B8B528C738FA830
-:101DD000A37C32CBFA5905E11FAB7EB29E4C12595F
-:101DE000D0B521005E482488F3CB24233F0694B36A
-:101DF000F87C279146AC175AD8D30FFC966BF45554
-:101E0000012EBEE6FFFC315C37F28806762C85B6E3
-:101E1000F87C56525E80CE81F9BD1716D1EFF08B5B
-:101E200009CDA01DF83D8321747E758271B9746857
-:101E30004201BEAF596D07BB2440C2027CF787E563
-:101E400098D5AE4F27B46C8BA790E3C59584897C59
-:101E5000FCAEF503EB68258D9702300F068C7F05ED
-:101E6000BF699B3F8A7ED8879EC05C18EC4E6FE0AE
-:101E700051787EE8991247FF2CCCFC2D95FE03F299
-:101E80002E7DA16CF36F320C7B39CBE1872D937CD7
-:101E900038CF8CCF12EE5F1975D32725E1A210D56C
-:101EA00003BDECAC9109F8FF3E1F83C7842F4BBAEA
-:101EB0007701EAC7B07C12E0A0684138CE90730980
-:101EC00058E24009C1F82985EBA403AE930EB84E41
-:101ED0005AE16A52D97C9DF662AC9A943452E07E03
-:101EE0002872FF83DA4D60379E21EF18B540389194
-:101EF0006B50CF0634D6C6A70E62B042231AD281E9
-:101F0000D36EA4EBF49ECDFF5AC8CB3A11601E14D9
-:101F10004EFB77928FF48265898CC485D72D34F17E
-:101F2000A57FE1DF29FFDD74D44580BF281F4BF07A
-:101F3000DDC5BFDEC4E3C3EBC0BFA6F8FB12890456
-:101F400000BE77898871A877C9CB81791639794A1B
-:101F5000E4F6092CB1958F493804725CF6750E4A87
-:101F6000014483496FC2795CC73093F33E467731B1
-:101F7000A2B6A03EEC66FEA7194FFD728FDD1FFED4
-:101F8000CA2E7BF946B26A12C44B6F7CC845E2B4D4
-:101F9000DF9BACFE3D5DA757450DE1FB0A69EC04F4
-:101FA000BBA4CBC5EC8D751A9121FEB9E1FF7DA3D1
-:101FB000F27A3A9F33200FE683FD4EC1B7E891F5E0
-:101FC000C1B862948E9E5F9B105E718530F6FCBA3C
-:101FD0005C832BC0FF8E6D77A19D499C71D08312CD
-:101FE000C6412DED10DE1BBAEDF39B68FECEF91253
-:101FF000F200CE77FDBEEBD13E1F6B3ECABED4F6DB
-:10200000A64F126C711F93AF4D7A77F27785A4B308
-:10201000B80E558368AFFC3A2DDE86EBDBB800D6F0
-:1020200077A2F69741FBEC4FDE7EF1A71C7FE90417
-:10203000ED37A8C3CB60BDB7047B22C09F661C6B85
-:1020400023891979F457D7739B6360BA8DD40B5DDC
-:1020500060BD7C5A4FBA807AC5E3F7778ADB253FAB
-:102060003AF02D05ECD4779F7C6305D80137FF400B
-:10207000222AA5875307FC2481F64A5C01FB663DB2
-:10208000A5BB38961395D75AEC614AD1B80E377F65
-:10209000D78F76C4FAA7DDF13ADA7EFD3FFF762EC0
-:1020A000A17838D53AFCAF7940CF4F0A2CEE1A1BF5
-:1020B0009A7B2D7DBF5E267F1B494147D74B8C9F66
-:1020C000DEF97EDA1AB013857DFD5FC47EFBBEE0CB
-:1020D000725BF4F11AC985E3D27AE847C4F60BF1D2
-:1020E000E90283CFEA0F98F1EE77F60B0CBE43AE10
-:1020F000B807E0DBD7AB4469BD4DFB4E235D2FFD38
-:10210000EEB70380874D87EC76FAA67D52C23D1765
-:102110009F6FC01334A85009F864FCBCF1E006D4EA
-:102120001B1BFBB69E067EDE74C86593FF142FE171
-:1021300004E0F535295C07E57F7A22A05354BD3DC4
-:10214000B8370078A5FD5EAF50BA5AB9D0DE0EFAA6
-:102150003F9B39BA3FEA19A2DFBCA96F0B1BEFE026
-:10216000677F0FF27613617ACAE4E7B7E1979CD1F3
-:102170007A668B648F6F9D212F56E23EE0BEAC9451
-:10218000FEB3A9574CBEBEF9DB67F6C4E8F8EF3CD6
-:10219000FD1F7B62741EB7FCE5FD3DF7D0F991E7AA
-:1021A0003D1AC8AB4D4FBE1A2016FC3F26B1FD802C
-:1021B00053FB9F787C37E59353BF74A31D78EA8760
-:1021C000BF9FA2D3F99FFADE9F26819D7AFB0FAFB6
-:1021D0009A0CF8B8FD99A593C7B3D7816EE36EEB5F
-:1021E000FAC6B17FFD90009B20843CC79F8E753A54
-:1021F00072504A4088E0DD13EEB89BE267137DD74A
-:10220000540EEBB601F51594EFA5F8DE78A0EBB40B
-:10221000343715DE637962089E893C128275BF7679
-:10222000E59515F0748575A013328C7AC2D96ED3FA
-:1022300071BABE978EBD9ED49E5000FF9B0E6C61FE
-:10224000E3F6D1F50C8C5ECF77E197CB46AFE71183
-:10225000C91E673A436EF9E66EF878300BD77FAC4B
-:10226000F5DCF0CCE7C6F5EF4CF930119E1B040607
-:10227000D70EC97845027E7CFAA9C77707D93AD725
-:1022800051C49CFAF69929B0C9FB966BF88B2027AC
-:10229000877FE8D6C0AE5EFFC3D790EF4E3D734C4C
-:1022A000D1717F9AF804AA274F91919F41D09B1B2F
-:1022B0000556D8F4983FE10E24D76B63BCBE560F89
-:1022C000E0FB37F07D9CF1C3C678FF6A21C5FAF9BF
-:1022D000E422A69FE2D988970DFAA0A2F9ECEB2A96
-:1022E0002C84F57C6319D0DF58EB69CE5F83F92F1E
-:1022F000B0ACEB638C8FC7E2D753BD6E59481FBD9E
-:10230000CEA7B85DB1292EBC966ADD096965F1BD1D
-:1023100031E2DEE6D349178A6CE773B3BD39FF8932
-:10232000F87CE2795D1CDECE707DEDC4DF3BE752C8
-:10233000EB812259E07AABA736D7A2EF3C2EAAC791
-:102340000AC1EE6C8CE51526E1EDEC9350BEBFB3EF
-:102350004F427BDF2927368EE1D787CD710EF5CF2F
-:102360000579F6CEE1EF737A64F4BEF1C01B4A8CB6
-:10237000EB85B8552F407F29D6E372DEDFA6E75202
-:10238000F7B7E9C0E994FDBD2D1B5F00F8DF1E74AF
-:102390009118EDE2ED3E29659CA45876D9ECAC4E3F
-:1023A0007FE58974DA4E0A787598775BABF15A0C41
-:1023B000EC91975D04ED4739FC969B7E6FF37B7142
-:1023C000BFA52D7023D12DFABBDD81273914413FE4
-:1023D0005A0E462AD85E68DCE6CFBA34D106379169
-:1023E00063F9B0CFF9F3C2DFCBD02FC4D3744B5C09
-:1023F000E8259974403CED254308B79014712D47AA
-:10240000FF914512D1AD74664C15ADF1C5C0E1BB6D
-:1024100030AED1441A13106F22F9A46FAFA5DF4775
-:102420009A7516778D4C15ADF13F7763A3E1A670D1
-:10243000E4DFAE1581FF36D6F8058DF67D5F73FCBF
-:102440005B793C82EC7BF2C92769792A7C13810E87
-:102450002306C2718EED2B2FE5F2F047DC7E3E2C79
-:102460009001B0C36AEF8DCA20EF84D0F518175DD4
-:10247000967FBDBCCE428FCB42A77340AF7EF3CFD9
-:10248000D29A54747A88D355CBDF3F9E03ED777B85
-:10249000BE90CF9CD908C297C7E35D03D9CB7D100E
-:1024A000DFEBBF69D98B33E87C73358940BC269755
-:1024B00054F9CA289C79C7A5B027C53A98CF3D3CA6
-:1024C000AEF768B386F2FFB1E610961FE778DDD766
-:1024D0005C82CF279BC3F8FD40F3422CF735D7E24F
-:1024E000F3E9E608BE0FDCFD6CBF0278F92AE98348
-:1024F00078CDC1E635F8FD9F9BA3F8DCCBE7B30CA4
-:10250000F0E2B3CD1FE33187DA97B4423CC6C4A3EF
-:1025100013EF4B486CC08DFBF9820E78BF4B66F20F
-:10252000C589DF29EE3E01E44BD32D04EDD73D3CB8
-:102530006E6CCEF7EB32B3370F72787EE0897E4750
-:10254000A6CFF76A8B4BD12E229130C8EF3D4224A3
-:10255000BD8C5679217B41C82A87A7FAA30765CB92
-:10256000BEC2946E16EFD92D337935553FDD9F41AC
-:10257000F1509B2FE8104E30E77BB84ACF073979EE
-:10258000581070BD6BF3255262A17BB3BF6FC82298
-:10259000DFDF482DB79374CCE441E6D57209F8B576
-:1025A0006788372C517E7F3E871C24D4FE781EE836
-:1025B00012E4C2AFD2304E6CFA37DBF87A670251C0
-:1025C00040BEC4EBFE38C89FB1FC9E4E5EFF3D0E80
-:1025D000D70639F28A8CFBCA3CFE4A1218C784948B
-:1025E00023A0C7DD9EB53B6AE8F3FECBDF3E01F1D9
-:1025F000C1779FF1E800D7F68A93012B1E4983FC2F
-:102600008E753F7E44DE9CCDC3B8D8FF27D137649A
-:10261000AB1C0A0E2BD0FE7941DF09FBD7B1572541
-:10262000E4BFE785F82C8C63C904FD82E76F0A617B
-:102630007E87D9CE1FB6F377A667E8E14D30EF0667
-:10264000251C4BC117BF49D36DFB46EE90BD7D08DD
-:1026500074E67C56D6297D96F1798765430238E683
-:1026600093283E17101D9F39AEE847308F79A42F6D
-:1026700007CAAD6953AE60FB07FF6378535DFF0780
-:10268000F166D26BE8F2128483DC2D86A7EBE84D6D
-:10269000DAE87CA54BE0F855519EE78EEC4F35FE0D
-:1026A000A82088DDB0388996867230D7C3F0D73439
-:1026B000741AE3BBA129C41677EF6810910F76BF97
-:1026C000CEF6F5CE3414ED9C41EB57117D474DE12C
-:1026D000E87998FCB15B8DA4A7DA9F329F265F98BA
-:1026E000E59D53BF48400EFDE3D42F62DE51EEEB73
-:1026F0001E1DFC8EAA5FEF6F01B9D8F106CBAFF8B3
-:102700009537BAC8353F29673A6E6A9C0A7E50C031
-:102710001F59ECA2F889E4C7AF037977A6F676379C
-:102720004EDDC7F25E9AEED577CED4C75E9F3D4DA3
-:10273000E3EFDF98F3DA03F31A67FFC29C97B95E01
-:10274000676A570FDFA8839C294E8FA66837224FF0
-:10275000AE5E3DEEF87BB85EA1F35F6BA5CF294D71
-:102760001AE6B798EDCDF93ADB3BE79BDC07BEB044
-:10277000BCA03E17C9027AFFDEC753FEE925148DBF
-:102780001109F434E5CF8D004F2569C43291FB72F5
-:10279000C0BE31E97977E7E339A817E47821E67715
-:1027A0005DE0781D2412A9027E0B8B61ABBD623EF9
-:1027B000DB46E83C81715537970362DABDA1547856
-:1027C0001EE93FDFCEFFDB0861723EA1A29C87407D
-:1027D000A146CB854749F97DB4BF06480AA5E35415
-:1027E000C92C1E32EFA8DE2BB1B8AA54EFB7E09186
-:1027F000EF3798F1DD0E722FD174F02BCAFAA1BA1F
-:10280000C9A74794E84340A74A48C77C4F57302A96
-:10281000B0FD38B63F54C2ED92ABA4B52AD8254DD1
-:1028200024A2CE06BE3D2E119687C7F8DA6DEE8340
-:10283000713E76733EA61C8CE519FCFB739CBE0EA4
-:10284000817D82F604A3A383DC3EA9191E3EE2A784
-:10285000ED4A067BAA613A4F83BDE206FB248CDF7A
-:10286000BF03F60A2D1FC9F8C76B6653BCEC33C40F
-:1028700030E0FA40B3C1F8A1B901BF37919877337E
-:10288000C8A547440DE0EC7AA4550AD0F27E55C0A5
-:10289000F8C523CD8D583F70CE9B007F73BF9A1033
-:1028A000C01E391326E118C04DDD2398D70C3E8F8A
-:1028B000AA370771BBFCF1F87BBFDD41EB3DB8D017
-:1028C0008BFB64267FCD681AD6AE01BEDA7B52DF61
-:1028D0000CF0CFBFD580FADBC245B84FF104C51765
-:1028E000ACD3BE5DEFED1AA4DF0372D766F0836749
-:1028F00016AC427B28A0FEE36D500E684FFD1D3ED6
-:10290000D5EFDF09FA7A665CB4ED9F07D49FDE0548
-:10291000DFAB87C235E9B49F59C707BBAFA6CF8EDF
-:10292000F0ED2290787AE61F705FE3B0A07DA907F2
-:10293000E26AD72B48AFC609A305D8D15561CF832A
-:10294000CC7E310A690B64F200C53B01BC1B32F43A
-:10295000FB96AB10E92C14C8A909D0F2E38F9DFCBB
-:10296000F1D5F4FB915DB7A25C743F22A33D36F331
-:102970001BB793AF58E484FB3139655EE95B2E37B2
-:10298000E3A34756F7CCD2197902FFCDDA5BA3A2B5
-:102990009C78D19EE760EE0BF792E85B2EA4676609
-:1029A0009FC81ADB47863D2FD84F240F8B8C4F22B0
-:1029B00051AF35FFB9E4EB6224559CFBAC4BC679B3
-:1029C000B5C76B4A601DE4F377E03E19E9B18F6F3C
-:1029D0008E47C73F6B956FB2C6E02A00D54FD7B37D
-:1029E0005FF9F71C80FF6CA3A9A712A8A706CAC4A9
-:1029F000C4540ADF030F897148CA3C52CBF4D6761F
-:102A000099E50B6EE7E5C7CE91B85098E4A3999C81
-:102A1000DF1E7B4464F65C9CA09E23E7CEA37DE191
-:102A2000E3DF33CB5E56717F2266F8AA2A312B9002
-:102A3000FF58E885E2E8D298D72667C5A64CDBFAAE
-:102A400017508BC59E4F5D94AC2F811C3FAE02FD8D
-:102A50009EA17E2BD0EF12BE4F5463E6614AE7E69B
-:102A6000C1FC1F36F5AC9937E3C893DEDBB8CE0B5B
-:102A7000F1C2174CFA696834D0FFD1DC389EB94FE7
-:102A800058724B2406FAD3956FCF9FAE72E4472F4E
-:102A900071942F36BE52AE38E3A8DB66211DE801E3
-:102AA0009457C51CCF7B2FA3EE7CFAE838CB48BFE8
-:102AB0003C8E407A02B87EC59C80EEBF5B6A00BF48
-:102AC00020F040798635BF60B9C2ECEE815FB9096C
-:102AD000D8F9FB6B548C679A799D2E3EEE0A45C758
-:102AE0007AFB1FBA4385F65DC1220FE0EBC8E5EB28
-:102AF000BD98FFC1F3534DB9DB7AF9FA6B6E0279D9
-:102B0000982DA2EEE9C86FCD857DF9076A54CC3FB8
-:102B10000DA40DF51DA165DF134AF851FA7D7F550F
-:102B2000628D356E7387C2F4D7750ADF07DA66CF18
-:102B3000DFA07C709D02F961BE46DCB714559EC7CC
-:102B4000EBF0EF4D7C040E5F2716FAD9B3C80FFEE9
-:102B500028A38F38A78F3DDC3F7D04E4BF1BE886A8
-:102B6000C9FF6DDC3F75F63BBD217258013BEC1689
-:102B7000AD1C4251CEF59DD66DB7270A6376393725
-:102B8000D549F78DB9B6FA790D45B6EFFEF06C87E9
-:102B90007D92607A8DB0F5E9F2F8A681DC2EA77AF5
-:102BA00097D9199A18B1EEAB38F47A83CB68562EC0
-:102BB000C2BE09A4451A617D9CF6F456BE3E7F2331
-:102BC0001B5B94F9E8BF6D8527B58F79BEBADDFE32
-:102BD000180527A170CE1917CE872E06CE89F6D9F3
-:102BE0009CFB6B774A915D2FD1E7E274960FD9E198
-:102BF00067FE7C07C45169F9594E874F2912F67F49
-:102C000088CF77711AAD9F82BFCDF8EA73907803B1
-:102C1000F526A7CEB3040B08BFE7A5FEFE9CC2F6BF
-:102C2000B3174F1D7F9CE7611CFADCE632BEAF583C
-:102C3000E278ED8AF1036B39A1B0FDE79175E17996
-:102C400094A63D7687CBE8B7D64F3EED72D3DC072E
-:102C5000C9E6EBE9278CFF5E58B36ECB74CACF4A46
-:102C6000BE0FED9FEC35ED9BC500E41F0D6AE00F34
-:102C700064F37D7CB29AC951735F3DB3CE2E579DEC
-:102C8000E7ADDC3C2FDEED3C67C3E5AB931EC7929E
-:102C9000AFBF56ECFB1A23F1EB31E8CA19BF6E82C5
-:102CA0005F999DC9EDE048FAAA3963D3E3CF9B87CA
-:102CB000B70F4C4F965F82F33329E980ED27060E5C
-:102CC000FFA16E7505ECDBB178DA607362F19BD31E
-:102CD00093F22BB228E305887B466A3250DEAC08BB
-:102CE000FD71FB00F5C7EB8DFEC56F5AE639A851A3
-:102CF00068A78DC32786EB232B7F3D2130FAE9E0BF
-:102D0000E3EDE0F874DAD15D62CC0DFD7E40860C17
-:102D100021855F6B9D773BE26DC8077436D6BCC3D7
-:102D20006EC65781858D6188D3B9CF4BC807EEA990
-:102D3000A6DD1246BB659E3B839DFBF015E13E1E62
-:102D4000F5D387FB611D7C2CBFDFD48FEF9BF15443
-:102D5000AEF76ECB60E5ADCD2C7EEC3E72D96B3A12
-:102D60006DE77FD1453CF4FD162AD7210ED84DEDF5
-:102D700078F81EA8182210476FA3F5A316BFBB2D25
-:102D80005CAD819DD05E5AAEEAF4BB34A702CB7233
-:102D900061B9564DC79CEDFEDAD26C8883178B98CB
-:102DA000575B4ACB2DD4A44B776B38BF9F97BCE9B8
-:102DB00003FB2C1D9CF3F9C9F57455440D89C2E33E
-:102DC0000A69D5908B31A2B7399DD1F78F42BCE407
-:102DD00009215AE9A6F3FF393F7FD5A53496DC0ACD
-:102DE0007E8F1C7343FCA04965FB10400FEDF392EE
-:102DF000702FE1F855F8B8237E105FCF0FE4A118CB
-:102E0000A4B67689A421D5FA5CED6672AE5D33B4C2
-:102E100071E949933FB2E54F2F62FCA404293DA517
-:102E2000883F3AE5357147EADDD9C97C25BAB01A41
-:102E3000F22961F69E79BEE74DC5F89C9BCEA3D5DD
-:102E4000C7E5587E26D2297DBFDCFB89E43E8BCFC7
-:102E50001C5E5471AC06FC924117C68B02D3C8DFCE
-:102E6000462CF2F6A81B836EF4C9ECA4FB287DC4A3
-:102E700067B2B80401BA49A38A18F6210BC4F8A3B3
-:102E800085006F6FED34DA5F973C9D5AE6C97EAAE4
-:102E90000A98FDBFBDDADB60F503DE4D63FB2F77DB
-:102EA000F9AA9E86F995FAE2D5E83E4376E62476BD
-:102EB0007E0AE8F8128D0C0922C8C108617A33AC89
-:102EC00032FD5AA3C179298144C9F9B4F1F4A3FDB3
-:102ED0005CD59372BCD50BF808B278977F9780C900
-:102EE00080529F91F08298F4AD6A77337D5102E36E
-:102EF000F4577A898FD6FF63BF82F6619F3F4F06F2
-:102F0000BC3E2FAEFB26C49F867FE9C6FCC6BE3FF3
-:102F1000CFC6FCFB3EFF15CB406EF709E42855F603
-:102F2000A4EA6C1E4F362469B0CF17586A10D8E750
-:102F3000187E8184213FD815FAE9E237E7E1C4D34E
-:102F4000C485B49D87747B68BBF047DEF79750BAA1
-:102F50007ADA57FEE0A524195731E329CBD2A20F24
-:102F600003DE3A26FD5B03F04D37855342FBD5085F
-:102F700001DCE5D922C61F49B62F3E1DE265478315
-:102F800035903F5A2597616A6C60295BEF5F79A3A2
-:102F90007B61BE355A7D0DC4D72B8EEB2867978594
-:102FA000360F40B9F27556EE5018BF40BC8858E451
-:102FB0006ED5D92938BF3E4E27ED2163D010C6E526
-:102FC0001BC7B9037BBE9C950E20CFDD42075197EE
-:102FD000950E16523A9863A50343B8183AF82A2A70
-:102FE000EB4FC23FC66B3542326E379A0F36AB9904
-:102FF000A5A3F9C584E3BE8ACC20C851932FB4059C
-:10300000F7A25C755FAF44C05F37F9C4E48F8F3DB2
-:10301000237C12017E5FEDD3AF4AC527E08758F9C4
-:10302000E1DA31F86605191E08D2462B64124BA767
-:10303000A2E4E797BD553CC5C2074EBCAD582490ED
-:10304000933679C6CA16BC6A23E71BA50BC7FFCB0C
-:10305000B2DE11B4F06127F543C058EE16C304F494
-:10306000CA02DFBA3F025DCA75DF0B813FE87247D3
-:103070001A306F76C13B693752BAFCE3245187C9D5
-:1030800077E8EBBE8BFC7C228D807DB2BD723DC6A5
-:103090007DFF7853742AE8892D14FF27512FC72705
-:1030A0008B9883393499EDB7EB21F68C86D87BC2A7
-:1030B000BFC779D9E0F586B01E5D679B7CDCE16116
-:1030C000FB5D3B3C4CDF6C517A54E0B7E142554B21
-:1030D00095EF5CA9B2FA4BDCA4221CC4D1705FB995
-:1030E00043956A7B599C2FB184BE5F32ADE451EBAE
-:1030F0007E81D9EEC1E63EB453B6341FC267565D39
-:103100009C40DE95B724A6C3FEB8FA97A5820BFAB9
-:103110009DCDF671E17D8BC54ED355C69FEA5FA468
-:1031200028F0B1DA1AD3332DF2581585682A7B7B43
-:10313000A787C569D45682DFD5C35FC77DEFACE2F0
-:10314000B0F06528B7F69030EDC79360EF83C58681
-:10315000F0254BBFC1BA3E9B3E5C41972ABD1CADDA
-:103160002C3C17D3A17B719F6C45B0FA0FF2DCD1D8
-:10317000F4063F272D7463C26FEED7DECEFDF49ABE
-:103180002215F9B4A349E9C573302AB39F3E085606
-:103190008F7BAE00F669A98587FE303C61BF36366D
-:1031A00093EDD74219F66BE109FBB5F084FD5AF8AF
-:1031B0000EFBB550FE4EB38165D8B78532ECDBC649
-:1031C00066B27D5A28C33E2D3C0F3537E0F3D9E671
-:1031D00046FCFE5C731396293DA0FD474A6221B070
-:1031E000ABBBEF520CC8C7E9E2EB7EC428CA027A37
-:1031F000F104593CC1F3E203782EDA131231BED741
-:10320000197A80DC409FDDF3FDDD101F51BFEBC359
-:10321000A7477E9080DDB64788359030211BD58A40
-:103220001A99DA13C5A1CDD59961C0DBE5ED909F60
-:1032300038436F09AFD39265DD5FBEFE7B96F2D453
-:10324000D25ED94BEBDFD5BDA81DE406C0019B6B58
-:103250006DEA929A96624AB445D4A001F957A8C47F
-:1032600081EEBF04EB351DE06776E067485B08E25E
-:103270001F5375A51CF895D64F303EB9B0FA5DAA1C
-:103280008EEF9DEDC6AB27565C503D228DD31F7C43
-:1032900017C6E9A783B4698314F6AD205BC08EF22C
-:1032A000B0FDE06E179313DD1EF6FC9DC7DC0FAF7B
-:1032B0005EEEA1CFE51EC687DD9E482D9C4B199E74
-:1032C00023621CA8CF45BB80430A4D85AFC0F9A13E
-:1032D0003B7E2213D867D8C3F976FA543FD3E7F779
-:1032E000A8A8CF974FFD767B262D4FFF56380CFAB6
-:1032F000792B097B814E62DB985C79AA625A663D24
-:10330000AD7EC9FC6732414F7DAC32BB36CEFD92FB
-:10331000968E1BA742FCEA8FC7989CFC361FA7D746
-:1033200035D888EB39DF87760D752CD06E6909C9E1
-:10333000986724E6B0A7E2D2FE0AEA29D430885181
-:1033400078943F2F50314E72D6CDEFC118447B4652
-:10335000F144B50CFABE272622BFB769DE38D8DFA4
-:103360005B7DE578FE34562AE33994ADA52CCE9AE0
-:10337000E6FF7C1CEC981DFD1E261F7C2AE699C6E4
-:103380004B0F1EAD0EC253D480DFE3C6AA5AC4BB96
-:10339000266A98AF4A7FC3EF0D413CB7B295F075EE
-:1033A0006910F1DC5DC7A48F7E7A29E4EF7C590BAC
-:1033B000F3BB09301F1C4D3311F68D860FA7013C5E
-:1033C0007F63DE6B30D49A46EBB7AFD3C2B00E73D7
-:1033D000B5EA5AC837E8D0AAD11F4A9B53A35E8FDB
-:1033E0007268E4DC06DE9FD15E2A63BE117C07BEF4
-:1033F00024ED6400CECDE771599696512E801DD6EE
-:103400005187E14038D760CB3F6FCFBC06CF2B4907
-:103410002B3211CE0E62A8503F5627A39ECCF3A9A3
-:1034200009B04BF2CCB82F1CC5B0C425B26EB19F09
-:10343000E7C869906DE7C72747EDE56C1E67C8765A
-:103440009CFB38CBE9C58927E77CB3828F6600BC3B
-:103450005970E0571F3D9F0783E5F530CF3CCD8B7A
-:103460007087B4D62A905F9349630BD0DD45C3EBD8
-:1034700080736E69FB20ACFB5C5D263A1DFF523207
-:10348000DC0AFD6EE574DE5D68D7DB7B54C9E4C7FA
-:1034900030F0E3D42691C42CE343BC3266196F5A52
-:1034A00077A6AD3CBD27D7567FE6AE22DBF759F1B4
-:1034B000D9B6EF97EC2BB795E7F45D6EAB7FE9A13A
-:1034C0006A5BB92C718DADFEBCA3AB6CE5F9837F53
-:1034D00065ABBFE0C43ADBF7CB86D6DBBE5FF1D687
-:1034E000ADB6F295C377DBEA9B76BD532FCEE6F6F9
-:1034F000CDC5DAF36EB84FC216BFB5FB0B4E7B5F7E
-:10350000FD4B9BDE0A722DA0207DCBA0C769F9D6AA
-:10351000BB98BFA52E0EEB2057742E47A9185C0050
-:10352000EB561550511FC83E564FF62D43FB63CA4C
-:103530002E2A8FE681554A46BEA7815C6E8E2D2EBF
-:10354000B6C4A53C5A0F9EE1AA0AD4E23E88D95ED1
-:10355000D60C12F5C3783AB37BA8370BF53C3A6D1D
-:103560006F99D7F3A28847A587A95FF8A8C52F1C34
-:10357000CB0F74FA7D17EAE74D118917CF1F089119
-:10358000467896361EAB86B461EAFFFDB587F2E752
-:103590007625D2D04BFBDD5EE465FBA5DCFFEB2E90
-:1035A000EC43BE182E9451BF10592FB5C6ED3AF911
-:1035B000FAA6A94FA1FF49F18EF2D6C4FB566128A5
-:1035C000DE0672E72E2FCAC329BF71BF0CFCA516F9
-:1035D000A9792A7D1F3EA218B00FF520C76B91561E
-:1035E000560DA1A7E250FD6178CED0A99D419F253F
-:1035F000253B0FA35AF314E178B3C3DFAB0659A2FE
-:103600002E66F69F3C5789B7D27E248DC291C2FFA9
-:10361000309F526017DBE728967F07F406D6FF79C4
-:103620003A85AA4C15F3423C4007023E917E3C414C
-:103630001FEA0D0F1C8285B22CC4619F10EC53D879
-:10364000AFABCADC85EB6EDAAD60CF46993FDC09E3
-:10365000780DD6D9D73B4DFD0EE2A95D60F1F1EEB4
-:103660000CFDC56A3A6E77765126C462217E526F90
-:1036700091373BB83E8D7AD9D39437B891333F69AF
-:10368000EF50FADF254E03F87A08C82DCFBD3D0470
-:10369000E8DDA3D1D544BB3EA647509F327BF73629
-:1036A0000E534DD11ACC03783F588EF6ADA7E9F9E9
-:1036B00094F8F30C49C49837365E033376A3BE27DB
-:1036C000458A0E764593AE18BD29E4C15C95FB3959
-:1036D00053CC73AF2C0FA89BE3C38C9B8EC4237970
-:1036E000DCCD8C479AFDDC965D3E793C7BDC43FD6E
-:1036F000D0A805DE2D741CC04BC7B9FA5AC4834C40
-:10370000D8B9DD3F97F6DE87FBB16D3AEC37CFE5F0
-:10371000F67225E087E27B8A42D04F580AF1952C59
-:10372000F07E3F530B7C69C663863CEC1C773846C1
-:1037300024167F73997A4B3C7F29C2AC2B661E19E5
-:103740009ABC4CAFD17FFBE17CD9B46EFBF9CDE9DB
-:103750003DF6F2CC5DF6F2ACB8BD4CADE6E36017D9
-:10376000808D86F18D7DF6EFF5E6BE410D3B6FA6AF
-:10377000D291CF33FD6BBB3F8770FD6FE6BB15F475
-:1037800025AA40BCE6DF6ED7ABB95CCFE73AF46759
-:10379000B95FC2B843D5D1E000D88F667CE8575EE8
-:1037A000DD967766C6799CF2DCFBFA4E42BFA0FF3D
-:1037B0001E75B37807C4913F2CE071957C1E579914
-:1037C000C2E32A052CAEE292F497D60A9827FA3E75
-:1037D000F20569BC94C573D8B9AFF76AE517049DC3
-:1037E0008D17B58C7767496C3943433C07EA99F1EB
-:1037F00015337E10F01BCB817FB7865F6E3C42E9AC
-:10380000A4FA976E02FD5C25BD78B419E45B818C47
-:10381000F9DDDA825BBEE98578257CA7E5EA427DA1
-:1038200032F2C18F5D1847E8E2746D9E5734E33180
-:103830009A97F181CF6BDA47312FCFDFF782BD7BCB
-:10384000C93E2AA36DFA8EC5FDCCF8DE9C3EFBF77F
-:103850003E226469901FB0262E32FBCAF05559F201
-:103860001F67F3759BBB36F1C05A5A3E40E2E570C4
-:103870002F5D19A78FF080FD9CEC2422E039A94927
-:10388000C7A5709CD69FFB9CFD7BA9E31CED6CE754
-:10389000B95AC7FE915F22A7AFA7E36DD31B05906E
-:1038A000A3DBD6525B9E966779F9BEFD0C3203E826
-:1038B000F02AC9174E007E5F95701FCCFDC6CCD78D
-:1038C000AE07BD7E8CE52769D3F49D106FD67E2AA6
-:1038D000A19ED2D24859992FB9DFF40FE7C304F65D
-:1038E0004FCCF8D793745D41AF1CA07E79B10BFC2F
-:1038F0006C0DCB7DD42F87F2D3D42F87E741EA9785
-:10390000C3FB7FA67E39940F51BF1C9ECF52BF1CB4
-:10391000DE3F47FD7228DFE5ABC278F920AD0FF43A
-:10392000E22D3BA84EAB0039ECD2803E9C72A8AA97
-:10393000EA36753525A92F743D85FB1CD557B17C1A
-:10394000EAE5F73D85FB1CD6389C354E998CC30DB6
-:1039500009661C0E42A3BFE6FB1123F1B8288BC7F2
-:103960004DDC8F61F683F1CF51FDF038E8BB77FD78
-:10397000DBE36DF4D386F90F747B8BE07C47238FF8
-:10398000FB99F933BA2D3F7FC3C116CC9F51728E7C
-:1039900037C2BA1EACF0615E89E28A6A206F9DFE72
-:1039A0009CE9C739ED69F3E9D46F7E6E5798F1D57C
-:1039B000ED2E82F9D43181DA13605F34C717BFE985
-:1039C0001A3BEE7AC25BC4F3F8EC7261E41C018F1F
-:1039D000FBB8C19AA5F354048E0F9EDF8EA2B18866
-:1039E000C5FFACF1576F711C0FAF7B7D06DA750216
-:1039F000B5F7D0FED3A22188A375C2B98114F3DB39
-:103A0000CBF9BD2547417BA33387E58BD4E48743BE
-:103A1000D0BE2DA732643D47609E7318F057AA436D
-:103A200096FE6EF5178DABFF24AAAFF571F4B5E4E1
-:103A300066E77CDA0E5FA6C2F98D6EDFBA41F0A3AD
-:103A4000BB43418CD3F7E75492214BFF5268219E30
-:103A5000F3907CCC1E96422ADAC332CCBF3459DFB5
-:103A6000ACD7C2E53E65678C2F7A7C3D58CF2D4799
-:103A7000F07E09771054267D6A6CDFCE5B2C12D560
-:103A8000222FCC71EFF63279D95D1AD520CED21D16
-:103A90009275382FD2AD97239EDB389EDB0A4C7B84
-:103AA000228C76CCF7B97C35FB69E37180B60605CC
-:103AB000EDB948538656938579BDDF017EEEF6B5A4
-:103AC000AAB07FA9E4548CDBEFC084FD964DAA997F
-:103AD00087FD7E1FFA55FCEB34E8D735C6F9A463A1
-:103AE0009C1E3EA9DDEADCEFA3D086AC792BCEA7E5
-:103AF0009FDB9FCE761B4A871458F72D8FD9CF3383
-:103B0000BB083BDFB5F1D066E4F3EDF220DA51DB20
-:103B1000CF0929CF8985D204CE6F23FEBDCD0ECA31
-:103B2000E3FC94C7BF03A981BE284BD8ED96794723
-:103B3000EDE5F983F6F282134E3BC87815ECA0D57B
-:103B40005CEE0D5279CF92668665C0472416AF02AF
-:103B5000B8EB495F0BE453B8249617B29AEBBF95C4
-:103B60005C3F06D23210FEBC06AFCDFF24FC3EC047
-:103B70007CDE7F41CDC0E67610B211D3AED2D16FDC
-:103B80002DB8FAE92A14970EFBAADEB09FF75FE979
-:103B9000B09F9C765695DC8B79BBB98EB886B9EF11
-:103BA0000BF3847B0F9CE35FECB8667F90AF05F26C
-:103BB000CDBC0F06EF1FA6ED0BE48410A678CA6DEE
-:103BC00064E775F26E27466F0A3A5EC2D77D14DE4F
-:103BD000624B106F4BF9BB5C1FBBC72BB7468AEB20
-:103BE00074FCDC863EB40756DD42E78376F879CC78
-:103BF0009731EB6766F4E1B9A5DD7502CFE325687F
-:103C0000D798EBBCDBC7CE19D65F29C44568DF580F
-:103C100084E3235C45C9F5A5783AC9F0C4F212AF34
-:103C2000ADB59F87AC77D82F263DAC74BC3FE96516
-:103C3000FBE7261FBC7BD9891953281C1B849EDAFD
-:103C4000B46917AE2F2DFCE13A0F7C08BF4F6229F3
-:103C50003298EFABFE9386E74232861E269424AF5D
-:103C60004D23B19A4584FC8B77F8128196FF6A6BDD
-:103C70005F4777011CF31E7E0A8C3C77D73357D5FC
-:103C80005E992C7BEFEBC772908F035B906CBD2D20
-:103C9000F7C350D4C5D3187C5B0DB253821C5C5162
-:103CA000DB192E4CB6CB8476C238ED2264A79CA2D9
-:103CB0009DCF6C47D1D509F73FF17979F97791C359
-:103CC000631D5F06BC69BA0FCF3B2E9335D8BFFA90
-:103CD000B4704C9A68DE51B2D3356D743B0A768B62
-:103CE00009BF981AFE387CB78EEF1A07FEFF6E7C6C
-:103CF0004CD49FC2BF5F347CB47AEBA4B1E70B70A5
-:103D0000B9F05E22DD275AFAD9D1FF278C8BCBD7A9
-:103D1000913084BC6497A1C17E5EA9F610FAF77257
-:103D2000468D0676C0165A063B604B5F0FC6BF4BEA
-:103D30008B1FE806A22F4D7809C8833944CB384041
-:103D4000FB9DA3C970028BC8570E88104F279F2573
-:103D5000985F92DEEF65F708155EFE2DF0B7323200
-:103D600054DCCF48CBA8FC16337A599CD9843FAD9C
-:103D7000EA7835C4DFE57A1216002E214EAA80C9F2
-:103D80006611DCDFF01A07EF84F3024466FA09EFEC
-:103D9000D201BDCAE3ED9319C9906E45ABC73C97FC
-:103DA0009FC818C79A0C578551A22C2DCDDC09F05D
-:103DB0009446690702C0CFE26573A2623841FB2FC7
-:103DC0003FCDDA919FB17326D43759F38C2F8957A1
-:103DD00053AE4CE671F8D05A7B9C9A0CD339D3F68B
-:103DE000E53F5BB517E2149346C96FE6B77B399C94
-:103DF000E9A74904FA0FD6D9F58697E7797B1DF72D
-:103E0000CC54F85DF6FBA19DFEC35723A807DC2424
-:103E1000AC2A685FAC45BBC1F44B764345B0C70BD9
-:103E200008BB97D7D9BE92B52721E6A7B8BD4455A0
-:103E3000CBE9F7F55E03F312DDB44CF1282844CD4D
-:103E4000A1EF7345166F6911880CE5E47809CC473A
-:103E500070AB9F6907FBE5B03A0FEF4F33FDEA36D1
-:103E60002D8CF912A4A4DA66379B7961B796154DAB
-:103E700086EFE99346E24E1AD0E5ADD9C56847070B
-:103E8000B286FE1AE4ECB9ADE9CB5490AB90AF71B9
-:103E900039E4477B3B6354E9BBCFE611DD629FB950
-:103EA000E5468CB3B9CF4EB1BD4F34DBCF5B1B3E83
-:103EB000B106C699EA637C5845B476685745ECE785
-:103EC000AADD67736CF67AB2FF7CDBFB04B56BACE2
-:103ED000F7008DDD7F1AD14BACFD4F1BA3FF198E70
-:103EE000FEB594FD27FBCDB2F5DB21B3F86B2CE8D2
-:103EF0004D792FE5025F75311C951D6B7FA0D2C7F0
-:103F0000E29A5DA146DC1FA82694F129BD2C3977E1
-:103F10005262E77D09DA6F24DFBE3F50CDE958A435
-:103F20009481E70764FBFDC68B89F3BE63BB5DF438
-:103F30004B8839507C89FE8A41DC27F8930FCF03E8
-:103F40008E65370F36138C4F2F4E1BBA0DF6C157A7
-:103F50006ED3958E10E63DA33FFF37DBE62F033B84
-:103F6000DFBC07B32328225E22D593F13C97D94FBB
-:103F70004421D3412E46449607813F74FCC1EC5C3A
-:103F80005BBE86F9749E87AF3784C5C596790D42AE
-:103F9000FEA175BCA579BD92651E1137998FE3719D
-:103FA0007B7764BC499F6CBC633C9E658E57BFCCDD
-:103FB0003EBF7A45C3F9D5733E36C73B06F34B8106
-:103FC000DF09C7E3F99523E32DB7CFAFDEADE1FC01
-:103FD000EAF97DBC23E34DFA64E399719D2EA5B106
-:103FE00011E870ACF88E19D7B9B66BBF2DAE43622D
-:103FF000FB97561513B25360F223EEABEE04BA787A
-:10400000BFEED612D42BDCBEC67B57A93E5E293349
-:104010007857E4FBE22D163CEEA672C49809E72916
-:10402000540207CFE07C8581E72D42F87C94DAEBDF
-:1040300006E69794E0F7C79BC358DED7BC109F668F
-:104040003F250BD9FD60B3160929EDF6133EE67F37
-:10405000EECCD1AEFB12E8B72A2FCB0B5E78053140
-:104060002C763435AC0F7B607FE8F3A40C74E48CC1
-:104070005D0CEE60CDA438ACBFB76C60B019E2A0A7
-:10408000B24BC7BC583DF5DF3B78C5C7FC79B79B41
-:10409000B52757B07B525770FD44A43ACC3F5AB174
-:1040A0003203F31156AD36FC1AC5DB6A4178B59878
-:1040B000EB3B381FF539BED44E7F21089A87AE57A7
-:1040C000D090E2708FDCE7F25F5C23D07E23FE6B42
-:1040D000D1CF88D08699B49FCF717D5BF5869B4008
-:1040E0003C825CA5A0FC5ABDDAEE17ECF42434B097
-:1040F00073769605490B6DB7AACEFEDDED667C158D
-:1041000071DC13B362827B63CCBC5C277E9C71D371
-:104110009FF9ECF1D133A474079E0DE3F9BBCEF601
-:10412000661CB4DDC7E45B97C2E4C3683E60F0BCC4
-:104130000B7DA3FF7702E368267CB9725C00799F50
-:10414000D770C2961F4F118B46B5B94F40A4036577
-:10415000A8871DF3D92D1CC819EFDEA85C22FF6EBD
-:10416000A884FF7D0361F4BCDF1935EF452F15935B
-:1041700054FCC3E2C12B8E4AE1163D8917130FFF91
-:10418000DB7CB4CBC7F0F9D2D20F2A981F986FFB13
-:104190003B02E639AF6B47CA32912DF4BC72BD6267
-:1041A000307F75B814E8F2F8956961F6F730B81DFC
-:1041B00094F8A50876D0A7EFDF28B0E53FF37EC7D7
-:1041C0005A2F67DEA5E55C72F29E04C87F690987F5
-:1041D000D01EC81609F0532EE4E305D8F79376BB3A
-:1041E000D5968FD7D6BF5F80B8E1C3909F68398FCF
-:1041F00097D7D02774807DD71267718804AD47E1C7
-:10420000CE6F4808EDA5C9BC2FA75CCFBFC59E2FB8
-:10421000D8B168B5764087BC9AEA1EB8206CCB2E20
-:1042200016E732EB8FC4BBF83955176924704E433B
-:10423000F2B1787388DFDF31519EEF87624C2B2C0F
-:1042400084FCDEB85A45E7BF272BBACC4FFBED0EF6
-:104250009637F6027DCA61CC075FDB744F04E284B7
-:104260005A56EA38F85A6E1FD4FB195DBDEE4A144F
-:1042700040DCFCE5ACEA7A7F768AFA4D5FC5FE1633
-:104280008F712FFD7A3F8BCF3C2CA6960737F0EF2E
-:104290005FD820E27D431EE2C773AC9EE29E85801C
-:1042A0008F8737EE0EA73A8FB9508BAEF35BF0EEE7
-:1042B0002966F70510D27719CC73CBC78FF47D9799
-:1042C000CE3BF3631FCAD94C89F56B69BFDE3A1F39
-:1042D000B3FDF37FFA059EB37F9EDFBF4EC8F4E5C2
-:1042E0001067DF3E52263138E8BC3D839763E272A7
-:1042F000F02B93E5E796554119689412DFBBFE97C2
-:104300003AE1FE9AED02E1C43AB80CEBF3FBDE7F32
-:10431000C2BF2FBEE69D6FED007D50A9A0BFB99D25
-:10432000DB3B267CFFE967793FFFC9D7652C7C6EB4
-:10433000E3DF7D80CFE045E1735B2A7C7E26686CFD
-:1043400087F71EC804A120783E566F87BCECAF37B4
-:1043500093C897E81C1E0E1FDC0F678F68FB8752FF
-:10436000B5FF4196F1353FC27312E7E72FF685019D
-:10437000155B1610EC27051CDF186F5DCB33989C7E
-:104380004B4B67CF4C6E5F4AEEC110E42F6815FFB0
-:10439000709B46E54C67E1E09A5471E2A702CCEECF
-:1043A000CF18232E7E98E3EFEACCC8B701EE76ED66
-:1043B00001F4F7148144A0FE96854344B0B47B23F6
-:1043C000C0E897C2FD0CC0AD5CC6EEB1F653BC436D
-:1043D000829CBF82C1BF453F4E204FDE1F3A8E797F
-:1043E000ADFE8A21E4771485B98CAEC01F54B9FDA7
-:1043F00076D8FF26DAF5999249777774011D4AC974
-:1044000032D2656F266BFFFBC01D5DE02FEE516859
-:104410001B9083B90ADA37CEF9FD2CC0E6A768C62F
-:10442000518077143EDD43DF827B09B64F67F7B9D1
-:104430002C1607D7DC0074798D0FED33FA7E8DF5DD
-:104440005CFE479C7F3FF233FB6AFB9F54FCEE5CB3
-:104450008FB1E8F5246FFF09E8F5642AFEA5F4FAA8
-:104460005B786FA1D70F486A7A7D7B0C7AFD0F6865
-:10447000EFC48BB32C116317EC2BCB1F2DDB07FD87
-:10448000C99F59B4EBBBF4297DB42D86AB19166CCA
-:10449000E79E93F23EFA2718D7BC7FC0FC3B46CD7F
-:1044A0004008F353F4BBA07217C8B10BE8570E6471
-:1044B0008FEEF7653F8377F135BE68AAFB14BE1314
-:1044C00090D9F9D800AB3716DFFC3AC0F253C6E2F8
-:1044D0009B17381F50BE0906E64FCC3767927C9376
-:1044E0001FB820BE79089F9E62C63738FFCB47F3BE
-:1044F0000D89ADEB02F9DA59C8F862CEFD9B902F19
-:1045000046F82816C3EF52B28CF2DBE4A38FEF8F8C
-:10451000617D67FBC018F70656707E5AA845E60114
-:10452000FE8D4BB476768E6908CFEBF692E17E373E
-:10453000E609B3BC5C6F2C6630F36090C0FDB48BB1
-:10454000381EF6808F067E50258F67C98364957F5D
-:10455000343FFB2B1215D67B605EE1E3FBD2234B8D
-:10456000018FBD646816D86763AD532D1F4FC832E5
-:104570006A0329F87F223DB421C0F4D0063E6EE6DE
-:10458000C76A23D8A74E7E5FBCF1D93F3C3E4E3F61
-:10459000EB391CEB029F585FAD0BA4D6573704ECE8
-:1045A000FAAA42284AC9FFEB0329E407E5FF9B5317
-:1045B000E1E553F0FB9D8114FC1E095C18BE9FE5EC
-:1045C000F87EF653E27B176FDF13F8C4F2B62715B7
-:1045D000BE28BE7706B22F08DFBB52AD17C5F7D78E
-:1045E00003B8FE4F23FC7EDD87F1F2EE05E420F4F4
-:1045F00093028E5E6B3FAACEFAA13CF58140E97E24
-:10460000F147DDE154F724D176FB52B5AB0D683CA0
-:104610000EAD6F06FFE1E1CFF8705F81EAC703815D
-:10462000FF5EB97F28151D2C16991CF206167581A0
-:10463000BEFF14FD0FA492FF5FE57436915DF01A82
-:10464000A70B3AEF9F029C4EF9D7CBCF312B5AF4F0
-:10465000E500E26BE86A90577BEECE1420DE956FA2
-:104660002404F0138E723D560597FDCC4FB6DB2324
-:104670002704B867674FA326C079294B7FAF07B2DD
-:10468000C7EECF090785EF3730BE2FDD188276B52C
-:104690007C7E176B271DC934DE0AA0FE89BC0D4F36
-:1046A00063A65D6E9BF310233D2CCF7661EABF734A
-:1046B00079D42F9BF2FF7DABFCFF8F11BA62FD5DB9
-:1046C000ACFEA1F09DE3F0FD25157C4EBC4C04E74B
-:1046D000250199EBDB889A9E424F39FB33FDEC9123
-:1046E00075029D6489FB64A78FE8EF603AAC478749
-:1046F00088E7A8567079B2626106B7DB352FF4FF00
-:10470000308FC33F7CCB0355B0AFDE7BAF5606285E
-:10471000C86D607A4FBF650AC657A7F27E9DF08FBD
-:10472000B457FA66C1DF8FA0E34E83792C59441247
-:10473000E037A683DD80F10A0DFFCE71A6BB27040A
-:10474000F1D92D42CF9A75A057AFF6B17331A1D5EB
-:1047500013DC9FD96AA35B12AA98A07E0BD6D7D28E
-:104760007AF09E950BAEEFEE496967D5A48B9C9EBF
-:10477000A24BC6C56B2888712F13BFA3C761EB5727
-:1047800015691400DFFE0A4183D43B3FA513B0979F
-:10479000C4E241CC9BFA6C05A31742FD92F1EF698C
-:1047A000E934E15A0578FFB47099F5C61E8FD773C6
-:1047B0009CB718F97B643E26C7B0222DBF77342BF7
-:1047C000E5BE82F9EC6AD60CB832F93D4DC7FB1B49
-:1047D000BB46F2BEC3A155FEFFF97AC979C5597C23
-:1047E000D4517FE49E92908AF61FFE9D0FEB7D3D93
-:1047F0009C2ED48C482C1DE54A18EF89A4E5565808
-:104800000FA2D2B21FCBED58D646CA9D583FC4EA7C
-:10481000134DBB20BCD376DBB11F79A49F1DD88F6D
-:104820006F64DC9D580E8E941FC4FAF9ACFE858E21
-:1048300033EA9E964109E7FF816CA4C3BEE9E79B7A
-:104840006EC0F8D2754D37E1B3BB59AB82389D7954
-:104850005FC9E7AFBB41037FFABA2F3F88FBFA6617
-:10486000FF2BC1EF00FED7E55AB097944231F29882
-:104870002FC97F4938DAB1BC4266F7FEAF5C787A5F
-:104880007BBB257EA7C2DF4F87FC1ADD725F06491E
-:10489000CAC32704E37BE91741CFA3E749C800A5B2
-:1048A000DF0F7CC5F118D273B5968A6FCCF98ED51F
-:1048B000BF39DFB1E48D8937F3FD9662FEF7761DCF
-:1048C000F14BCFF41ACCFF59297038FDFCFE485E3D
-:1048D0006F051DE7E952A40B1DE87605F7EF9CFA7A
-:1048E000C11CF709217A02E804E2C4F7968FC6EFEB
-:1048F00085E2CDEC7F723446E0FE2E6F29C17DB19A
-:10490000A0DFDC576772ED219F598E617249A4B810
-:1049100007E59C4737E51ED3935A5A9F2196513F8E
-:10492000A887D48666411E6834047FEA87968FCABA
-:10493000684FB0321DFEE800DA3FDA6CB8F1516D15
-:104940003FF7A3A35712767411F7DDCEFD08F5B734
-:1049500059860B7C4B68D93B5236D4102D178D9459
-:104960006350DEC3ED3EA1E7DC8F60CF84EAE573E0
-:1049700056795FC5E5EA44F2F4BF00B9E905CA001B
-:10498000800000001F8B080000000000000BE57D88
-:104990000B7854D5B5F03E73E695642699BC270490
-:1049A000C8090F098A38090482623BE1D558790C9D
-:1049B00015359628938447782620D5B1D2322180A8
-:1049C000A0D886AA156BC509C57B69AFB6A0B4E5AA
-:1049D0007AD17F10B4D0521A2B55B4A25150F15154
-:1049E000938294A9D572D75A7BEFCC39273321B45F
-:1049F000DEFFEFFF5DF874B3CFD967EFBD1E7BAD6F
-:104A0000B5D75A7B0F6361C6721963DE1CC6C63107
-:104A1000761EFF7CB967C944BB366DAD67C268A816
-:104A200079ADBEA11A631BF15541BC5D89C74EED3E
-:104A30001ECD0CA67BCA199BBEAACBEA8476CEE219
-:104A40001C77D0C55891F79370257C5F349E310D4B
-:104A5000BF1D9245E3B679572A769842DB08E651A6
-:104A600018BD5BE381F6396EC6DAA164D60863230C
-:104A700018BBDF25EB301F28032511D601CF533596
-:104A8000FEDE827578AE3A58D34EA8A795307F04E3
-:104A9000EA1E079B1380B2D863610CE6E5F3A834E5
-:104AA0004F1F8E06F50CEF5AA6417B6795C51F81F7
-:104AB00032034B971EFEB5E23B2B95121FD7E6043F
-:104AC00047209C6D8C55EDC479B168A004E0481D69
-:104AD0009E937537D42A4BAC2B190CF9E86A1698BB
-:104AE0006B63ACC21348C3F6AED29CD4E008AA8F65
-:104AF000F2403FAE75963003BC54327744298EE3C2
-:104B000005669E1A7027A7C7CBAB838149B6E474AC
-:104B1000BBE12635A087439653100FF0FDC7D5EFB4
-:104B20007C1FC159EAECB2B34140CF219B034C45F5
-:104B3000783482D3B97B66B410DE2FDBB39CE17C82
-:104B4000D7A4A58F473A9AC77DF9B3073D01789F4F
-:104B5000F25747606782F196083C1F5D5D4DDF416B
-:104B6000F79A358FB13908CA204604ED7062C994AE
-:104B7000F30E02EFE810787F0BE3CC302B503B8D27
-:104B8000015EEBAA55A616E377DDEDD979A8DFD251
-:104B9000513B958D844AC876129F3BE1EF79E83707
-:104BA000C832A778E0716D983FA7F6F0DF3CE69B2E
-:104BB000920BDFD56F303D7FFD9AF7593ABEB79E15
-:104BC000EC2889F77F63756D6092687786FE1F21F8
-:104BD000786669CC8F749BE54B8B8401C4EB0337FB
-:104BE000052695C4FB7BE573750EE2C58C8FFF44EB
-:104BF0007CE4223E028149437BE2A32EA0D83DDA29
-:104C000085F1D2573CD45A4BA7E46A3DF160861F28
-:104C100030762FE2791EE0F9EEE2E4F88076448FF8
-:104C2000576E827600CA1475AACD0278A89FA93063
-:104C30008742F84D6783B19D7FEA64DD7CCD78348F
-:104C4000E3ABFE19E68B42BFF50FB87DC0E1ECF790
-:104C5000123F5140DA189027BCA91ECEB771FE1E34
-:104C6000F88B707EADA2F4F91C984770ADE2631C1E
-:104C7000DEB7F5F0D5B140465421B8DF4E42F7B764
-:104C8000F5709AE7679E7F0A0A2B907FA1D78BBFAA
-:104C90007340D78E59A323029733F6538F3BE7DD3A
-:104CA000CBA03E92F9CEC3BA3ACBC6678CC2F743CB
-:104CB00012CBDB73ABB5EF1CB0E9D739E7B339A141
-:104CC00099DDE362FF0A0B76D73D80E7C04DEABD70
-:104CD000D7C3BF5F3E98BD0E9FADF0AADAC96CC4C2
-:104CE00017C04BF4F23326F98B6119DEA702FE667A
-:104CF00032A7E6827EBE0C42EA3CC032DD9FA2B9FA
-:104D000074709C6E55AA508E02F132665D1E87D774
-:104D10003CEF155E3B8D07FCF8899E1FCD7879B975
-:104D20007A7006CA9117112F69849791178397AFEC
-:104D3000E0628675E3C9665105E8DCA53823DB60CF
-:104D40004E35A13B039346215E58D80EA2F35D4F2A
-:104D5000B190D31C6E1B937F9A18CAD31A3B0B22B7
-:104D60005CAFDB58F52E1796D101653AB9F57E7622
-:104D7000E5BB28A765BD26F46DEA1F1891F850F22F
-:104D8000F32D4E5754E57CF85137DF903CABF120C2
-:104D9000DD814EEC3CC0A9662CD1106E352D7D24F2
-:104DA000CB606C033601389D9981D328FFD5B4813F
-:104DB00011E4BFD49B7EB481D3F1BEAA1B74744CA2
-:104DC00099F754983AD7B20CF84F13F4AB14F44B4C
-:104DD00029719AE9C7709D864B58E43145A000EAD5
-:104DE000A787F823B86E93E90D49CF9412EBA71D5E
-:104DF0007ABE66AD8457494776607417AED7A0D7A0
-:104E0000CAEEA6F725849FA047E2A7CB86FA644E98
-:104E1000C8765ADF4FB0606EA419BFDBE8F0E1B38B
-:104E20003A8B9687ED004F1ED4E3ACC4E7C3F5C3BD
-:104E3000C2F09DE427C42B1A13BAFE3B00868232CF
-:104E4000EC0FA4277EB74137CEA09EE376AF2B733D
-:104E5000BFA6EF5415EC07B2237C3E9F4E7E0FCECB
-:104E6000E4F6C369EFE89D9641C9F157E7CCF65BDC
-:104E7000B3E3F5B70B9CD591047A40F627F5799604
-:104E80001AF45A10B6F063070FF4473DECB9142436
-:104E900019BBC71639787000431661AC1FFE2F721C
-:104EA000D0EF22BB43D4813161FE6DA9DD75BFD344
-:104EB0000BF541DDF530D6B7C270EC4AB05B32235A
-:104EC00007D7C27CCE1D7790FE3A5D951AC1C59377
-:104ED0001D9AC84EC0BCAD60E66400AB4111C6D29D
-:104EE000192A2478142B600EF09DADF914C4F7AC88
-:104EF0004C8DE66FD558D40D93CBB6FA14C4D7F7C2
-:104F0000ECAC41C88DE13375F6CB2C01AF1CC7E189
-:104F100064E194B278BF606135A31EB14E65A457B9
-:104F2000609D93DD26D7B7EC2798C9F567F7FABCE3
-:104F3000F07A0E662658CF872D4D6F7E0BEDD95F28
-:104F4000ABEC3100E566EF1DF4FC86503D953785EE
-:104F50001652B9488CF70E0B2ECA84B2BDFAA59B27
-:104F60006F07FE6DDCEDF0A15A5E7ADBFBDF29D71F
-:104F7000104F4077FC6E5EFD03E5F0DE3ED442F656
-:104F8000EC8601AC1AF9C9DEAC907DB451B357ED93
-:104F900086F2A18CCA2D993A381ECA98447556A536
-:104FA0005990CF5738399F9F3B7E97B70EED4A9760
-:104FB0008BD68BBDB9F8BB16A8B343306F86F2838E
-:104FC000919DA13A78797726B753EF16F85E93C989
-:104FD000ED3D670C89CCF9BA09C6775AC30CED6C64
-:104FE00067CC4ACFED0ACC2F019FCAFE9C3158A452
-:104FF000A3703CF3F7767A8E70E1F76A3633D83DCA
-:10500000F7E1F7B958CA79A4F179649BFB49E7CF76
-:10501000C5FA33CFE34F9E890F227E1ECAF06FC9B7
-:10502000A475D36143797E8BEBD7C794917D91C7EB
-:105030001D0ACAE3E99F29D122C05F4AA51A595324
-:105040008C7ACD336D34F001ABB4F9109FED43721F
-:10505000DC8374E3FF44D0FF45ABC78DF30C4C06F3
-:10506000BB9AF89BE5CEC27E26D78FE1F20F0C2EBD
-:105070009D9E7D51DBBE6110CADFB08DF64B739CE7
-:10508000E108CE4F67B729E7B95CD6AC63E2F6DF3B
-:105090009C49AA3F25BDA77D07DB900364FF4959C2
-:1050A0001E863A7CF786A8BE39E9CCF5084607F398
-:1050B000D807E9ED41DC2D8D41FB86FF991332DAEB
-:1050C0007D66BBB0AEA2F4052003E02552351AF987
-:1050D0006CB885F8ACAFF632639B399D27B7787012
-:1050E0005FF528CA09A84F9F746212CA8D19605AC9
-:1050F00061BF3326A99E28B4DE14B2303F4CFC8831
-:105100005F8D2800DB91928E435F46BC55D834D228
-:105110005B25ECDEEB72F0FD280FE23920EC106825
-:10512000CFF59BD719190ACFDAFD275CF53ABE3BBC
-:1051300052716238EE5740EE3524E227C69A89AFA5
-:105140000F7C3395FA79F37E25E280F94F563FFBC9
-:10515000ED58B467BF65F3393402CB82749DEA63BE
-:1051600062E3EA774DD6D9012758600CD995A5C7D7
-:105170002B1D68BFAE53689D4AFCCF0919EDCD6069
-:1051800013D8655A4FFB143AB3233FF7D53E35DBAE
-:10519000579F650A7BB38C95E9EDAA647A4ADA5584
-:1051A00056E657B3F87AB2A2DE9D0E0F12C9819A65
-:1051B0000CBE0E26AB1F117D4E57A81AE2EB48E835
-:1051C0000317EEC78F7CA6F27DB03FD760C715648A
-:1051D00071BFC0563B1864F0DDD67ECE483374B53F
-:1051E000EF9B97E677107DB407C7231D7F6D2339AA
-:1051F0009C6CBEEE90CA8600634E0B29544AFA1589
-:1052000085529855A71F8A58E2F95F9AC5F7A1B948
-:10521000AB9845837133C3CC9F687F2CDBC1BE78CC
-:105220008A9551FB6826CC6FD9100BF1A7DC1FA71C
-:10523000D8C2FE4280DFB6777918F7C945303F9C67
-:105240008706F3437D591C4AA3FAA0503695834341
-:1052500099540E0915D2FBA1A1C1545E122AA6E7EA
-:10526000C3429751BD24348ACAE1A1522A2F0D5D51
-:1052700045E565A037B1DD885025959787AEA5E750
-:105280002343D7517945682695BED06C7A5F1AAA18
-:10529000A7B22C544BCF478516537D74E856AA9776
-:1052A000879653392674279563432D5456849AA9BB
-:1052B000DDB8D03D54BF32741F9557853653393E03
-:1052C000F430BD97764BAA588FF768733DE8EF002E
-:1052D0000ED7908F93ADBB85595C0FBC98E99F8921
-:1052E0007C27DBD92DA0C75D3DDBCD136526D235EC
-:1052F000417FC12CCE971FFBDEFEFE3016A7DB469A
-:105300006FEFFE0C56D237BF57208BCBAFADD676A2
-:10531000BF8AFCDBC47C6178346DF48B0ACA973693
-:10532000CD5A95C8BE7B28CB46E33E9A196CCA82FB
-:10533000EFD38A4F1E40793223ECF9ED04E4971144
-:1053400039BF9E00FD15ADB5D0765F639E7DE85FE9
-:10535000D32631928BD2AF04769D419F6ECE92764A
-:10536000E3CE8383683D0D29E3FAA7E31A5C5FF679
-:105370006F0EA2FDFB567B54B1A27DB38231BDFD01
-:10538000BF757DDDBFE1FB787F7C7D166D60CFA1B1
-:10539000895DDCAA4D488172F016FF7329F0C9D0EF
-:1053A0004870422AD487ED083F87E5F09D9109694E
-:1053B000505EB627FA1C6EE32E8F764C7041FD8A44
-:1053C000836C3F2EFFD2766DA21BEAA38EF9F70302
-:1053D0001BB0F28EE0C4740DE713694987F96C7D48
-:1053E000030C3DA8577CD4AAC276284E7FB0E3D0E8
-:1053F0007E9374718F6E9F940DFFECBFD253AAE21F
-:10540000F7D68E94CC113DE9D38670239CA0471E1D
-:1054100003B8FAFBA38A47C727CF08FE003AB42196
-:105420001DA45FB26D6D16F925DB523D953864D72A
-:1054300064E6D9A6211F5B094FF67583C81F27F9BB
-:105440000EF06BB067370B39B1B5DBDE4D8CDF6723
-:1054500010BFE5FF3AF89D9AC5D74332FC3A915701
-:10546000C65D781D1F117C08EBF8D788D764EDCE98
-:1054700008FC9BF1DC6661074157C1B8C0A77C5DA1
-:1054800031F4A37D2CD6FB85F07AEA5F0CAFCF0B0D
-:1054900039910CAF4CCB213909FC3A1CFD63C9E4AE
-:1054A0008D5DEC67CCEF3F17FCA69373DC6FEB01CF
-:1054B000393738B99C3B7421F925E48CDDE4DF49A8
-:1054C000CDE6E3557802CEECF2047E6A1137907E89
-:1054D000EAA9AAA712E50D1BC6C88E4E1B1109E347
-:1054E0003EA528AC95A9D80C8532E2B15F09F91F19
-:1054F0008AC1CEB002FDA1AB28964ECD63A943FF71
-:10550000BB5C6F9E5AAF7EBD497D1F5F8F922FB2ED
-:10551000DAEEE67E496D26D82FD764737E8BF7C30B
-:10552000FD20EBEFE8D776B74E0EB679BD5497ED78
-:1055300093F1EF02F1BE6DED1AC2A7737C62BB61FD
-:1055400062B62AE441971FF93CFC25E6417B2673AD
-:10555000EDDB249F32413E29249FF8F8FD43A9FF4B
-:105560001686FA84EC3C21CF3DA937B8FFDFF173F2
-:105570003EDA54A807C67BF6A918A7013DA4E13A74
-:105580001D0F731F8DF8B213DD35C6E9A88D6711A5
-:10559000B47B016F51DCB7872D6EF233D9EDAD7E50
-:1055A0005CCFCC9E49F057788233B37B91379E34E1
-:1055B000AD14895A97BDEB1A17F0DFFA624F2AD65D
-:1055C000E7407D53058C9BD5C1447DA36BDC3FEE4A
-:1055D000F7A8BBEF6787D0EFB13FCB1FCCE67C5D70
-:1055E00087A57F98C74AFEEA3EC6C1E4FA8CAF277A
-:1055F0004FA95C4FB523481E2EC17E657FC9EC9B29
-:105600004BB2B99CFB56B6C5C0D73DC76D36AFFB94
-:10561000BED93762BE8BB37B5FFF2F1FBC6FCB76CB
-:10562000A6F337F6FB7EBB55437F06F7D3589CEDB8
-:10563000D49F5BF81BFDE86F043E700EE175FC9390
-:10564000C85F9C1C8F119AAFF4334A7F62BAE02B7B
-:10565000665522A8C7D32B3CD63AEAAF837D0DFA14
-:10566000FB81C0935CD728B79E1C817229CB8AFB33
-:1056700075F427B9B3E2FD633DA32C2E9F98D8C7DC
-:10568000DD2AE6DCBAC697812EE7F011EE4769FD08
-:10569000365F97D3FAB3C81A94137EA679A07D0A11
-:1056A000937FFC067FF2D44F15E687F91FFE54A5C1
-:1056B0005219C2A26ED8EF4DF32951DC07DA2DCE74
-:1056C00008EAD2CA7E4E86F14D7BBA2582F111FBE3
-:1056D000DB0AC1692F4B8BA0F09BD4AF2203E39868
-:1056E000670EEF770513D0FFC660ADC1FF65C663D7
-:1056F00077BB9B9FF7201E1FBE409CF65076779C81
-:10570000767F36DA4373BBD6DAB5789C56C61F0B64
-:10571000BCBB3756A2CA5AC2EDD37E2CD2ACB7ABB3
-:105720007471D0DF22BF3F1C8F83B65FA28F833698
-:10573000F6DB8BF6EE43DD71D06014C7F567EF2C16
-:1057400045FE7DD8B7FBC7DF457C3A44BC62D471C7
-:1057500097867EFAF2FDB908CF6F4DF397A5F4E373
-:1057600099F7C1C7B38DF18533BEEB32A2C45BD9C3
-:1057700009D7B7F42FCAFD30FA0F3D09D7A111DFC1
-:1057800072FC1A85EF6B994DE1F24FE851902F9D15
-:105790002407228CF4A6DFA16C437D73C637CA4769
-:1057A00071CF24F246CE07F0383451FC17C64B189F
-:1057B000674DC9E17AAAC6C6FDA6CAF2F2269C5771
-:1057C0008DDBA53874FEFEB342AF9BE3426AC66729
-:1057D000E541E1F74E04BF39BE7356E80BC497DECE
-:1057E0004F7E217C1DB3B552FCF0D83C9535433F2C
-:1057F000678263F35982EF65F91AF2CD50C6DECCA9
-:10580000E1E375D33349BCE8D8EA068A339BE36900
-:10581000DDEF6B53AA517F57231E75E35E29F077A6
-:105820009D289923A879E0BDBDEE010FC3F8D7D01C
-:105830004FCAC36EF48B75FD1CE317EC5B6EF25719
-:1058400054D79E2D6FBE5C87CF0AC6E3B3FB1FF211
-:1058500068F0BC7AE8DADCB02B391ED1B78578BAAB
-:10586000071F8C237F4C79CE45F863D8081E17623A
-:10587000FB53287E9AF207D58776038ECBF500F787
-:1058800027AF147113731CAF3AB4CC205FD2620AF5
-:105890008BE8E21769D69DE49F4D8B59E9B979BD34
-:1058A000E5E774C73969BD49FC27A3A7C4BFF979E7
-:1058B000590EE7CB63B50B35F41BDA5313DBC11B71
-:1058C000453B5937E723248BBBCF17743D131C97F7
-:1058D0008FFEAA6A7B78685FD6B9C4CF85F21CE6D2
-:1058E000E4707DEEBEE92511C753D7626F52AFA6B3
-:1058F000597B8FC7FA4DF1D8B4D13DE279FF23F13E
-:10590000D8969C7F2C1E7BADE0DB0BE5A1DC6837D5
-:10591000DA3DDD7815743C134C6161908FB756AA5F
-:10592000148702FE20FD78EC0185ECCD68AD83F490
-:10593000727D6D0AF967EB4B557A5F7FAF4AFA3398
-:105940000AF26109C887DF0A3961F6CF5632C510FD
-:105950003F9F3E3AC550BF69DE7DBF5D8DFEE50AC3
-:105960009B86E31DD1B8BF39EC57C97E853E7C517B
-:10597000F44FDF7FB50FF599E487237E95D65BF86A
-:10598000A8EAC361DB853FFAC886D208E6A93025BC
-:105990001EA7D70663FFF514077ED5BB85E29C29B9
-:1059A0009F3F1808D0FE31A89592DEE4F1D314B1E0
-:1059B0004E27F6ABB801F5F89B9B6C0CFD466FAE1D
-:1059C0003A43EBB9637513E54548FFB2F40F9BFD0D
-:1059D000CC66FF720FBFB2C99F9C2C9FE15749F85C
-:1059E00043CAAB64FC0162EB484EEEC5CB31293FA4
-:1059F0005E13704EECB7E5DE66C043DA5C95F020CE
-:105A0000F9F2D5CFEE7A04E5700AF0C71A86F8FCF1
-:105A1000F7E7711FC2162A09FDC81952AE63FE448A
-:105A2000499C2E37051776D771F9CF6E586EC8FB93
-:105A300030EB95E472AD77B9B53987DB5D66BD6350
-:105A40005E0F5FB4DEA9AE7DA004BFAFAE9D17C1EF
-:105A500072633F6703CA5FB37C30EB896A939C8DA6
-:105A6000EB07954546E9E7AD51BBB89EB0D3FB7354
-:105A7000293CDF21E4E4E5EDA9E9DBB03C97C2F382
-:105A80001DC26814A29DFA465AA485F6E54D63919D
-:105A90004F42CCD7114638BDA9E44768EDCFDBA90A
-:105AA000D7A472BBFC4025C1AB4AC37C6D25AD9B1E
-:105AB0001601CBD6EC60512ECCA7C56F49C1F8C2F8
-:105AC00044B7F510BA5E5A27589883C5F115CF0B25
-:105AD000611E05BEA7770AEE3F4B9DF6C164A70E77
-:105AE000CB457EF936EC0F81EF0F1F5677B701A833
-:105AF000877DA33212D9E9B234C7918F7FE39581B4
-:105B0000B86EDF61C1B25C8A1FD7DF8BF1E1C63DA1
-:105B10002AC5976EBEEDD54BC8EE36C529D574673C
-:105B200009FA535A94541FCA1389C77D6E3BC99909
-:105B300096E369B49F68794B117537C94389F703B8
-:105B4000D0AE6034E62AB9496E4AFC035C13701E7D
-:105B5000920E952C7A787CF13F05D734C47772B8D1
-:105B6000FA7B487E209FA9713854B795E0EB64A971
-:105B70003E9C5F48F887D8EB69B4FF93746E14FCC1
-:105B800028E9BC4CD0B973EFD9EF5C05ED5BFD594A
-:105B90001475500730C243E7EB6EE21389070937EB
-:105BA000F0451DCE53C2BD7FEFA86341FC3E3D953D
-:105BB000E2F8D2EE9679073DE494D8BF2FCD55BADE
-:105BC000ED5EF45FFC3E7BC2D2DCDC04ED85BD0BF8
-:105BD000F86EC2712B3DEC93088BEFF392E537AC76
-:105BE00012FD77F773E1FC8655B989F21BFE717AD5
-:105BF000DE7531F46CB4BA362819717CCB7D332D47
-:105C000069ADE7FA37AF3F490F65EFBEBF621CDFF2
-:105C10002C176E579B9802E3ACBF9CAF4BB68A69BA
-:105C2000941F645A2F17923740FF6D085732B9D32B
-:105C300057FA3FD193FE4FF446FFEF65077E86EF9C
-:105C400071A8C232DA17EEC23ACA13FB201A8FF8D3
-:105C5000B62B93513E9BCC8F91F3917932514C5A94
-:105C6000CDD5E5E194F814D4137DE08FA87E7E5F56
-:105C7000007FFCA6773916A575BA54D07FA9CCCB86
-:105C8000D8DD7B5E461FE8F75A22FADDAEFABA820B
-:105C9000C57DA7DF3B3DE9F74EEFF40B9EC2F72D24
-:105CA00076F609D9EF15B55EE4970A8F7F16E6A15F
-:105CB0003CDB2CE44E31D00FDE3F9FA3925CFB1EF9
-:105CC000BB94E4F6972C169A6F27C8EB6D4A9FE0B9
-:105CD0008CE5D2FE2F6CCD827E6FBF8E517CCFAB18
-:105CE000352B58CFD7404F6B7D8757CDE37A5C0774
-:105CF000AF9A9740AFEBE4953D8FF3E74AE44FA7A7
-:105D0000E6B1F626AFB2F28C76421FF8312BEF8B5C
-:105D1000E5C70179BDCAAB8BE6B36138BF6472A237
-:105D2000AF79A0B04E596156CFF119F3515CAD3245
-:105D3000DDC9F5F62E45E8F1D220D5DD4E12160765
-:105D4000849E3FBD9BBF572724B62B7D7959C4CF76
-:105D50004B772E0F580DF924617AFE5DFF69CF1045
-:105D600015F3B45D044FF634EE8794F0CB3CED743C
-:105D7000014FF6000E77F6719ED72EF1952EF61B89
-:105D8000191556C33E42E2ED7635A0A01F3D33877C
-:105D9000619A04EC134628E8E7CAF41BDB4B7CE766
-:105DA000B24D7F5631E5ABCAF83E17F73323F1BD4C
-:105DB000EE7982FD2BD0A704F3C766E709FF839D28
-:105DC00079511F31B5A6573ED2ED4FEAF2FAE0679E
-:105DD00069C8B3887D8351EFED4C6109FD0C7F11DB
-:105DE000EB01EC15F237AB42CF4DEA28A67C9715B4
-:105DF0006E8DFC0FAAEA734E2DEEF97DA61F96B7A5
-:105E00000E1FD955A94CD3C19D1BC832D4F3ABFB8F
-:105E100019DA17040719DE17365C6A783FA0A9CC97
-:105E2000502F0A5D69685F0C88D5D7076FF8AAA163
-:105E3000FDD0D6AF19EAC3B67CDDD07E78A4CEF013
-:105E4000FEB21D8B0CEF2FDFB9C250BF62CF370DF2
-:105E5000ED5B841FD98C97FFCCE372BBC5CAE550BC
-:105E6000B3AB8CFC9B2D2EA37FF33E81FFCA8CF13C
-:105E700025E8576F79BBB404F17D20FD4AF2B327C2
-:105E8000E30BB35C4B264FCDCF9F14E37DFC9CDD31
-:105E9000827CBD6C3FACDB2BA0EE7A6D3DC2B47151
-:105EA000048FCFDA18CF1792F11AF97D77BCC6EAC2
-:105EB000E3FEDA7417BB3B015FDC97A725F4A74A22
-:105EC0003E4A8637C98F17C2DBD302BFFF2CDE5E86
-:105ED0005778BEAB5E1FEC4A30AF337916115F0EB8
-:105EE0001E15FA66742A59F21E5A8F17AB0FE43C3E
-:105EF000401FBC9997DB334FF7E3EA97E63FA86171
-:105F0000FBF9BCBDC557827449E64F3F23F0A6F3A9
-:105F1000A737707F7AAA016F6FC9F56EF2EBB5A44F
-:105F20007F4AFEF416BBAFA42FFEF4B7F218E1FFD0
-:105F300069A473AE8EBEC21F9F6C1F1562EC109ECB
-:105F400087602EABA6DF3725DB1F4B790EFBE312F4
-:105F50008CD3B6E2FE4B49A80753F2CB69FF4CFA4B
-:105F6000A015F4A083FC04EC9006F5DB275AD8DDDD
-:105F70005A1C6E69CF3B98CF695789AE19F83DFB23
-:105F8000365B99A27E21FBCC7EF917A1E7D985E388
-:105F90007D64A74D03F8D7E8F6D7123FE6F89EC414
-:105FA000CF341F8FDFAD03FD88F1BD7DB95C4FAFEE
-:105FB00083FD37E2D1931DF00E447B1E9E6F43722A
-:105FC000E48EA1F523F16A8EF3F555EE8CCFEF61E7
-:105FD000B78ECFEFC56E95F0AF10FBE7C9EA889D8D
-:105FE000E8C73C1DB313DE54C6F32E1B0FDA5884EA
-:105FF000E8C8F397251D6DB1F5EDA89F6DCC9CAF5A
-:10600000AC6520FCB683FC9C18CBE1EFC3CCD98CEB
-:10601000764F4685517F65FA8DFA2BBB2ACBA4CFEC
-:106020008CFA2BBFDAA8BF0A8246FD55D85066D23B
-:106030006746FD55149A60D26746FD3578C3D74C44
-:10604000FACCA8BF866D31EAAFE111A3FEBA6CC7E6
-:106050000A933E33EAAF2BF6AC31BC2F8DDE6D7860
-:106060003FEAE0F70CF5F2F61F18DA2F38F414E5E2
-:10607000F58C3DB6CDD06E5CC74F0CED00E1ED98D0
-:10608000FF3D9748C2D855A79E34BC9F2BECB5ABBB
-:10609000BB9E36F4C35A791E7718FE22BDDE6341DB
-:1060A0003B1A2956D6F54221D0755944F145A1D95C
-:1060B000C23DBBC6E03C3E7CE39A83D8CF822DC66E
-:1060C000FCEF851163BD910DCA40B9D0087C110168
-:1060D0003E598C79E13AF9B698358973817DE3B3FD
-:1060E0000587AE63944F1AF6B763DEBB8453F29B09
-:1060F0005FF09B9C9F847731D87F512D0EA71FFEA8
-:10610000F2FD66871DF976FE1E85FD40E9094FC345
-:10611000DECDEB0B13C06586C36C87FE47BED13F57
-:106120003E597551BCE0F451D5C7FD8DC675B8E236
-:10613000108F13AC7842217F9D191FD23E4D8617D8
-:1061400035CCF70D8D392C12D1AD3F4DE0C3E13583
-:10615000AEBFD3F80F9CCF0FD508E61BA568A96684
-:106160007E1B13653DF19C56625CA7663CBB7DFDC2
-:1061700012F295067F711EF3C5F943335F99F1BEA4
-:106180006CCF663BCAC38BC5FB6BF989E312A0EDEC
-:1061900046DB13E4D749BCC2BEBD03F548B2FDECF3
-:1061A00047F917BD9FFD28FF8BDDCF9EEB4DCF75C7
-:1061B000A2BF0DEC4BB39FCDAC8795BDFBFFAAA44E
-:1061C000935FBBC381EB2EE873F23C18939E2C299E
-:1061D00031E8C9EE7DEFDB0AED7B7F91E1B77B61B2
-:1061E0003EBFC9F03BBC00E72D197EA757076F0BD8
-:1061F000E085CEFD809EDA95C04E9CE495719700B7
-:10620000F94DD655F2F6E67623BCFC9CD1BEDC31C6
-:106210005EB23FDF2AF592FDE91ED3ABFDF95D11B9
-:1062200027BA07E39043E3F941F78A780D2C3B3F07
-:10623000D26D9D2DE0D5E70F67783369BCF4714FBF
-:10624000B6631E758BC7E251342C793EF75A97B569
-:106250006ABBF82EC7F01D3FCFA422BE01AF5697F0
-:10626000F5533DDF4EF232EA37199C93BC7C3F690F
-:1062700063C17BD11E92F161DBDB954E94772DCC0F
-:10628000EFE172D2E7D1E77FD8188F074F10F161A5
-:10629000F95CF5FC637958ED19C189DE047958770A
-:1062A00064F827E1F39035EC40BB33E44CBC2FFE9F
-:1062B000AA97AF139B80170C50E22B9A877AF1F1C3
-:1062C0001FB037AFC7716F57C39427D9E21E53125F
-:1062D00074F5DDCF15F4F6B08F82DE5EEC23B04F9F
-:1062E00067E179327F463F2B6D3BACBE12C4F706A7
-:1062F000FCF738F2D32EC0EF7BE4BD8A73B8B08FC1
-:10630000EB358F57F6B33FCBBFCCCBF30D9BB03FF4
-:10631000FF30CF5A55D74FFA05FA917E8E3EF8AD31
-:10632000BEED4DEC1F3D85FABDAF78DCE8EDE12F09
-:10633000DCE8EDC55F78EEF8B00C8C674B7F97B961
-:106340009D3C1729EB1B328DE3AF2FE3F5FBC5B85E
-:10635000AF887B3A7688BAD3745ED43995D13D1D27
-:10636000F29CA9EC6787D74DED9BB327ECC0F9AE43
-:106370002F56681FBA3E5331EC47EBBD953B900E4C
-:10638000DB44FF3B907F73296F94FC39E63CCC25BE
-:10639000A2FD12EF042AF15C2BCA31BBAA26C4E38A
-:1063A000135E3EFF5999BC5FE977AB7F4011FB2735
-:1063B000E3BD08B0CE5F4E03F97362938DCEBDCEC0
-:1063C000535DEB911F93DD73503B2240F94FFFEC7F
-:1063D000F931C4675A564FBDFABC37F1BD05C9E45F
-:1063E00088CE9F76D87B11794B1DA99C4FBBDC2EA4
-:1063F000F29B9BDBBD2BE8B349F83550AEA37EC9B9
-:10640000525953223DF3AEC0FB3F7EAE99DFE79178
-:10641000ED72D177E673CD1DF68E75F938DFAB15C9
-:106420001F9E5FC8AFF1ECCBCFC1738C1AF9F8D6C1
-:1064300017B3F40A7C5F6AA1F799B33CEB6D98F748
-:10644000AD31CCDC673618C70DE3A4171473B8C29E
-:10645000D7EDCB8776195A171B3482CE7B4FF1E2EA
-:10646000BAADE6F9F33DF02DE49B6B1DEC2F101F48
-:106470005AE23CF4F342BF80BCF93BF26BA5C6760E
-:10648000F373593C0F16D992F2157D3C5F3B0DF327
-:106490009D06737983EF95EC89D682DCF8FA520574
-:1064A000BECDE7B9D30BF8387D3DCF3DA326F17CB7
-:1064B000871770B88E67047270DC19E39BB93FECE4
-:1064C000B3F3E7D531681CF37502DF33F457A4E466
-:1064D00070399CA26924979947A13C57A7E66BC0E5
-:1064E0007A8AEB4A8F8A76B283C725D95C0BC3FBC5
-:1064F00055268A7EFCD54C79B784FB65B99CB5B22C
-:106500007725FFAB02396350CFF23F603F6D4A03FE
-:106510007826BA0E537C32654853259E6B787E0EE2
-:10652000EFE37B49CE0DC8F3EEDDE7FAD98F0E1B02
-:10653000CEF5AF7BE4F0C1AB75E7FAC38F1CF68FE5
-:10654000F8C7F3DBA73CF4C8E1B5AEFFB973FD5261
-:106550009E1D5383C7EE04FC5F0F4C152AC3D2CA9D
-:106560006A88DE5EC2DB2C81E7F0A78067671CCFFC
-:10657000D7EF3D44F83B668379C3F8B6091CD5B61E
-:106580006F66445A482E4668DC1B9CAD9371DFD978
-:1065900069EF1A89E3763EF3CA8030C893E3DF3AA5
-:1065A000E366C07F6F5ABBDCF8FCD4AA97DC780F97
-:1065B000C2F1552AD96B742E5A978FD420F8EA5716
-:1065C000058139C85773567F3E466F8FB3502EE909
-:1065D000DF85119552AFA4FC5BBC234D301DAF2F5E
-:1065E000DD996DA84BBDBCD491F89CFAA3059CEE37
-:1065F0000B1F6FB3176A387E70398E7F4AE4379C61
-:10660000DAEDA67D989C4FDDE3A576DC77BEB9D7A1
-:10661000C1A2E4076EB731F267F9A72A79788F1122
-:10662000FF639EE70BCFA6517FF31E50C9EF540BBB
-:10663000638500AFC1BD0BF93ED804C7BCE3DA14D3
-:106640009457F3362A2CACF1F6ABF0FE8CD05D14E7
-:106650008731C369D62F0B92DC9FB360EF3DF4FD09
-:106660005CE6BF07EDD979ADE6F7D7BC874CBEE055
-:1066700002F19CFB0B84DE19C3C69E1F4CF1A38C58
-:10668000CBB50BEB9D53ABF922FD60B593CA8F568A
-:106690007BA89C53C0F978F19E7D2F14D2326F1FD6
-:1066A000837AE9E583F5695FD7E276F798B65BF719
-:1066B0003F4C4D8DF9993502EF63455EE60271EE70
-:1066C000A1FC58EF799935888F913DE72BEDEC1AB5
-:1066D00093DF57DADD667C9C3E38310DF9E3970590
-:1066E000629F3B16F0A2FEF37849F6DD5295DF9BE0
-:1066F000667E2ED7D11CC1D773B7CF5CDF0FC66FB4
-:1067000079E6BD811DC4A7DC7F512EF055EE5ADF1E
-:106710008EF0973393DF30CC8E321D3F033FA9A814
-:1067200077CC7C2BF9891DE5DF3B855FA39B5FF769
-:10673000DE4BF8957C85271D2C68C3B1A8D7527114
-:10674000E17BAEE6B51AEB1FDB3A06A23C5960F2DC
-:10675000377CAC24DEBF1D2A1844F898ABF9A7603B
-:10676000FEC53C1658CFFDF3FC7E9C53D6D617EEE3
-:10677000C475BE9DAFB3A5BF7CE21728BF16FDEC64
-:106780008174945FEF5B5BF370BC258FAD4B4779F1
-:106790007FCA1A4EC7EFDF8FA809CF115FD24FEE25
-:1067A0009FFD2ECC535B46AC06FFCD0D4F47F9F94C
-:1067B00097C76C1EF4C336EE70441D808F65BB39DD
-:1067C0001EA1FE16AFDF45F86ADC635C978BFEFD09
-:1067D000813C8DFC01E14281BF4214E1CBB6DB2854
-:1067E000AF75D951D587C334B22E82CFFC3DCE23AD
-:1067F00006746BDCA9D6DA337ABE074BC88EEBADD4
-:106800007137A767E36E4EAF46931DDA20E4B69961
-:10681000FFF3FA097920F81EF0437E35996FCB22F9
-:106820005C7EB7FCF8C1916FC1FC3EDAFE9B7465DB
-:10683000449CFF196685023D4EEFAC9F63EFE5BEB9
-:106840009E8FC53AE9D60B420F697B6062F950DD35
-:10685000CBCB25B668FA558097256D365F181E2F6D
-:106860007942F5BBD08E7AD541F74F2C7EE2F9976D
-:10687000AF84F92DDE65CB99CAC170A1FC96F46A8C
-:10688000443E2F8BD367D153CFDB314F139FAFCA19
-:106890008AD369F1AE7D76CCFB34E373E2CE7D76AC
-:1068A000BEDE4CF4DAF9D614D4DB2D3F3E67477ECA
-:1068B00078FF5985E517F7FCBEA1EDF9749433888C
-:1068C00027D42F926EDD74EC41BFE8F4A747533B09
-:1068D0000FC6792E44C7BFE019845CE2F79F3E0DD6
-:1068E000F36878CDE1433C34FCF4D67484E73D6B27
-:1068F00013E7FB47D6E5A1DE6EB085F33C54F2E723
-:106900000D5BBF41FCB8E0C56FF0FB9C98BF00D7A2
-:1069100033C05B8070CEFBE1F504E77C16247E6C0F
-:106920007884DF6F78D6CAAA12ED07DAC4BA796F15
-:106930009B83360FEFD919BF2FE4F7AAB80F6B3935
-:10694000D92BDF10308384A6FA5927A7D7CA7EF245
-:106950009C3D976F8DA255E3F6BB48BE7D30C09F2E
-:106960008FEB1FF060F4CFBE38395FC845BAD785CA
-:10697000BE03FE9B88CFB17DBBCD9F32D2F09DC8B8
-:10698000BFE5E3AF14E3C3BC53D1CFF75E9E719F65
-:106990002BCBF66EB9C0DA999ECF92C981ED1B89D7
-:1069A000BF3E39CAE5CCB2C8CC2A7ADF6E8BE6E3AB
-:1069B000FBC8BE590AC909B04312ADF3ED36B1CEDA
-:1069C0008DEF619E56458FDF67F9F93DC92FF3EFD3
-:1069D00087F6BA751DE71F7BFC79717CBDCAFC8DFB
-:1069E00005267B4E966639F1B0494EC8EFD90F7334
-:1069F000139E8F88CB8730E16F892DF26F3FC07572
-:106A0000FDAA83CE452E79C246F7FB7CF8F8FE97A7
-:106A1000BF0EFCFFE14EB99E8DF2D7BC9E1B9EBC03
-:106A20009E255ACF1FE60458C2F50CCF13AEE71CC3
-:106A30007EDEE0FF96FC5D9044FEBED0AFA7DD7128
-:106A400015543FF8C9E222DA9F99F02BF16A96A714
-:106A500037A3B190DB539EC29FA34C874F8947C990
-:106A6000A78BFE63298DD3CDCF925F253F77F3AB04
-:106A7000196E233ECDEF37E2DEA93C4E7FDB1AD8FC
-:106A80009763BCF61995F2F33AB5AEF42C18779DDE
-:106A9000C8EFE9F4887A26AF77E5DAD7A33C91CF3F
-:106AA000BB5278BE4367A02B3D53B71F786BAF9A9C
-:106AB0008EE7013A2289F332286303FD2049F2363A
-:106AC000E4B9DFCE54EEEFEB4CE57EBEC9AA6B60B5
-:106AD00008F777AD3CBE34B7F9C674DCDF77EE1D3E
-:106AE0003CA31AF70387549E7314F65B0B00BFF5A3
-:106AF0001C74768A85BF3F1EEDF7BD8BA7623F737E
-:106B00003719F132DFB5DD8EFD9C65ABA89C7FBFE8
-:106B10002DCE27F0DF22CCD7423EFFA1E9F9DE6B74
-:106B200089AF1699F82A887C95E03C4966A158AF50
-:106B3000A5AC94EFB7457C4CC8BDC9EA8819D59877
-:106B40004F79909FF738BD5765EB11DEC745BC2CD8
-:106B50009C4BFCBA0CF85BEF37FD08F96E58723DA0
-:106B6000FFD1CF8F8FB9139A2CF9C51F473E0CE583
-:106B700047BF78F592FFC2FA2F5F19F847D6B3FDE9
-:106B8000C467FF7A0BE5753EEBA07B4D3B9FFDD5BF
-:106B9000C03BB1FEB483EE17ED5CC3F7D9E167DD0E
-:106BA000A4FF3B07707BB1E59973233B487FF17BE2
-:106BB00083C717F27B2A4EEFFDDB1B0AE6F3ED05D8
-:106BC000A8503E8AFD5BE3D329B44FEF7CE69C617D
-:106BD0007FFACFC2B34C9CBBEA74B36A3C27DD9901
-:106BE000C9CFA936FED7B81FE1B9CBA5BBF7D9EB02
-:106BF000E1FDC4FFF3F94894439D4F72BB03ECE100
-:106C0000ADCCC7D8570A37DF6B03FA7D8C3622AC80
-:106C1000998EC217A7E179929E78E178E8043C202A
-:106C20005C809706949FC9F0714B213F07F3AF87B3
-:106C30008F3FDF82E32FD93B96EE198EE345F1F3C8
-:106C4000E76ECAF700F8F9F367CF8D443BEA42F0EC
-:106C5000AEFA5F06EF0FFEC5F97D5021D74766BE3D
-:106C6000EFC9D7BFBC8DEA3F75FB68BE7D5CEF4FB7
-:106C7000FF2FA3F7B1FF6FE97D48D0DBEDC1B84C22
-:106C8000E7339F0F641701F7B97F593AF70E77B7CB
-:106C9000DD63F13947C3FC5E6391EB2B95E4F9A307
-:106CA00043FA2B721F44FB0C790FF7F49CF96447ED
-:106CB0004CF7737F4C0B2B3B88E7ECC27E95E217B9
-:106CC00094BC0378689F551AA13C316B78E8F73182
-:106CD0006FEC86A53E7E5F9971FF353DAFAA0AED48
-:106CE000B923CD302F6877C46DF1B4000833FC2A86
-:106CF000D97F5092DDF78709D7521ECA8C0AE33E2E
-:106D0000E4EBA6FDC48DD5C6F737B06DB998EF7723
-:106D100043838DF293AE37B5B7F4F7105E6E644DD2
-:106D2000EBB83FE7E2F034AB3FDF8FF5C443EF78D9
-:106D3000EB8127B1DFA4DC21AD27DE1C41BEFF744F
-:106D4000C00B616F89BCBC157DC22713FB5287182D
-:106D50005AE2D7E1E7F78EEAFA25BC48BC5F2CBEC1
-:106D6000259DCC7897F8957833D361189EF7CC8D14
-:106D7000E33F5E1AEFD566C26E9CDE6D37BA088FB0
-:106D8000BFDBCECF4BFCAEA27E5329D61FE7F7C1A7
-:106D90009F1D3F8A3901DE2336B687E2427EBFE679
-:106DA0001913CF9F512A7E45F109CC5FD4EF57319B
-:106DB0007F510F17E62FEAEB98BFA86F8FF98BFA78
-:106DC000F798BFA87F8FF98BFA3AE62FEADB63FECC
-:106DD000A2BE8EF98BFAF698BFA8AF63FEA2BE3DA5
-:106DE000E62FEADF63FEA2FE3DE62FEAEB98BFA89E
-:106DF0006F8FF98BFAF798BFA87F8FF98BFA3AE675
-:106E00002FEADB63DEA2FE3DE62DEADF639EA2BE33
-:106E10008EF989FAF65F8E3D67A857B2DF18DA4F10
-:106E200074BE64A84FF6FCD1D0FE2BDE1386F7D7D4
-:106E3000681F1ADE4BFA5F5B72C6F01C631FE131FC
-:106E4000B88FE17FA6F9FE66E8C7CA021427B5B37A
-:106E5000262A9DE8EF853295EDA4D205CB1CCBF711
-:106E600087057FDA1FF9756B783D32D79171E70698
-:106E7000A2FCFFDDF8EBB85F42C41766E03F356067
-:106E8000E2B4CFFAE33E57C64FD3632A8B8E023E5D
-:106E90008C29547A62692C9A0D7C184BA1322B965E
-:106EA0004DCFB3639954E6C40AE9796EAC80CABC8D
-:106EB000D8602AF363C5547A63975159101B4E6505
-:106EC000BFD828FAAE30564A65FFD855F47C406CDE
-:106ED0001C95036313E97951AC924A2D762D95C523
-:106EE000B16BA81C14BB8EDA0D8ECDA472486C3623
-:106EF0003D1F1ABB89CA4B62F5540E8BD5525912ED
-:106F00005B4CE5F0D8422A2F8DDD4ADF5D165B4EE3
-:106F1000E588D89DF4FCF2D81D548E8CB550794587
-:106F2000AC994A5FEC1E6A571ADB486559EC3E7A09
-:106F30003E2AB699CAD1B187E97979EC212AC7C42A
-:106F40007E44E5D8581B9515B1FFA0725CECC75480
-:106F50005E197B8ABEBB2AB68BCAF1B1FFA2E75786
-:106F6000C7FE93CA2FC5F6D3F32FC7F651E98FFD9D
-:106F7000869E57C60E513921F6123D9F187B91CA45
-:106F800049B13FD2F3C9B157A99C123B41E55762C1
-:106F90006F515915FB90CA6B62EF53F9D5D819FAA6
-:106FA000EEDAD89FA99C1AFB1B3D9F16FB2B95DDA3
-:106FB000FBFFF1497F57C0721EF7CFAEAC3EDD57E5
-:106FC000B6392D9DE4E2F4555C2E3E98F6F101921F
-:106FD00093E31C9A8384DF1643BC8B7E4402F67DC8
-:106FE000FBC6BDD71FED9DF595275EBF15F5D97280
-:106FF0000713FACC24773F73097F27C37CC49B0512
-:107000005FFFAE627F2EDA51EBCB3A96A0DFE4DE73
-:10701000E28E1A2C0B07703D9925CA8201C2CF5A05
-:10702000C2F56FCDF2A1FCF70572FA065FB5D0DBB1
-:10703000B2BD5224EAAEAE81745EAF8FFDF4B5DD11
-:1070400085F2B03EEF1FBC62406E6FE707FBDC4F7E
-:10705000C517D44FE580047961E67EDE14746F1B9A
-:1070600010988CED99D53F12DF4F5853A0E2EFAA4C
-:10707000D46E523CC82FF56B4BA7205DCB989FFC7C
-:10708000923727C9275B2CE85AD76463E89FACD3B3
-:1070900018F987EB76F33C64F4A74E037E6910FC85
-:1070A000B274E39FC9EFD4D0B480E73D45B87F4ABE
-:1070B000FE8ECDE2D6B617D0AD77961DA6FCF8C5EC
-:1070C0003B8CFEAB46E19F5ABAD3F4BCE92B09FDD9
-:1070D0009E66BFD4DC01C2DFE9E3794F4CED4F700F
-:1070E0009F05B8319F24789BDB897A03F0417118A2
-:1070F0008907E9F794F8603DCF5D50FEEAE98343E4
-:10710000294FEEB4A6E563BB603AFF3D2BC51A1CC0
-:107110008BCF018F94CFD2D59C46F9506F811ED072
-:1071200030F1CA131C8BF7C775BC368089FB2B8DD9
-:10713000F108E726CA13AF8539605E4AED63D9745A
-:107140006E13FA1BB907FD9A8FD9281F29CC5678E0
-:107150005945CF7845609D8DF8A26E4F26CF4F0BD5
-:10716000FB8FE2B9024997B7D60E9E82794D751B07
-:107170008A4BC95DB7C746F6A18CCB4A7AF5CCDFFE
-:10718000E6F9028D2CB21E5397805E2713D2AB75A1
-:107190001FD115E8763209DD4EF646B7874D7443A8
-:1071A0003FF58DF8725536ADE79A35D1A14D3AFECF
-:1071B00034FBFFD9DC2BE9DE1399FF5CD54FFECE03
-:1071C000982F0FE97B665339D1CD4CAFAABFD713A7
-:1071D0005DD86B6EBA77F8E6C16CCED7E0F91CE1EA
-:1071E000F7BCB9E51AB2BF770B39F7BBD598FBC925
-:1071F000D88BAB9DCC0FC6F74BAB3D54FFC36A2F6A
-:10720000D55F59AD51F9EAEA122A4FDA795E915CFD
-:107210005FC00894DFF7B458574F0F90FBB2955EEC
-:10722000F47357FDFDA5720B89BE37A64F1E40763D
-:10723000BB215FA47A96311FA4C326F2CD362A3E25
-:10724000BC4FA62E7095A13D2B1915AFA3FE11F9C9
-:107250002B751B32E91EBB9BA6661BDADFB0A1D0E3
-:1072600050FFFD008DE09E5935D8F0FCEB359719A5
-:10727000EAB5E2F723985641EB46C6BF407373BAAE
-:107280007878DB4F9AC6E6DF0EE37F72D846EFCD03
-:10729000F438690FD37E3EBCCDE1C3F8DE293CFF54
-:1072A00006F5537F5029BFE8948D853D20E24F2994
-:1072B0006C2D96CCCAD7D5D9637C5D55FD5D65B87C
-:1072C0008F673F71507CB07E8BC2C27837431760A6
-:1072D0001EC65DF96307C13D778BCA8274BE4ADB67
-:1072E0008971F2958F0DF3617CF4E6C1D10178DEEE
-:1072F000B0EBE7293E3CF755DFC1BF3F05FBF34C40
-:10730000CC8F52CA281EF1A769ADF32D986FA71E26
-:10731000CEC5F5FAA727F9EF9A2D5CFE87311EC07E
-:10732000F3A21776BE5C01E39C6C5569DC0F7738DD
-:10733000DA545AF7FE7CBCDF360E7784FC14D7F69D
-:107340000BFC0DE5F507F3232349FEACE2FEF19EAD
-:10735000F8017891DEC8AF3A7916D76F3CFE064245
-:10736000A800E544BDCD4771D9939B6C142F047DD3
-:1073700040F906275BB32D5C0E3D497C5767D5EC81
-:10738000FA71EB36A97EFEFB189A1DE7CB36AB41AE
-:107390003616EB3C3F22BC4109F2F88F91BEB72E66
-:1073A0001F4BE7A2CD795CB2FC18D6545017575A40
-:1073B000F40C8FFFB2D11D567D9EBBF4CFB060851B
-:1073C000E13EA325831EFCCE78284FFBF9D58B67C1
-:1073D000B7BB494E7E64796ECCED507E382DFCAE45
-:1073E00015E8F2A21A1C3610F3862C9BB62A145705
-:1073F00039F11D8CFB7FF084CD47CB50E48D2DFA05
-:10740000C9428A4F25B7179897C7AFA3798A176FD4
-:107410002766942F329BED14FE8508CF33C04900B8
-:107420007E3C4B785CEC44B9FB6E3C3F5C6F3A6F42
-:107430007C429CB3B872A062D0D7770CE472A0DE15
-:10744000C2D7277B96DF43297F2F4ECA71296FA5AC
-:10745000BCFEEA409EC722E52C633B49BECC17F731
-:10746000252FD9E1E0E78B34E6413C2EE4646277D6
-:107470000DE4EB7A91FD89EF235B2F60EDA4F73EDD
-:10748000B045E6B717E3F76D6BB3E87B9B2F82EB54
-:1074900038227F8FCE4A726401E3F35CDAAA44A2F9
-:1074A0003A7F87FC7D12867A4227777AE805933EF9
-:1074B0009827F4DF3C66CA376A35EAA9409A9BE010
-:1074C0005AD42AF2B0BBE7A5B2F318EF0A465E9889
-:1074D0004EF3567C9104F358C0BAA2782FF2D2C76B
-:1074E000F93926F3BCCC70F4759EF37D3327E1FDAA
-:1074F000CADDE39AE62DF1CDF060958E0E12EFF322
-:10750000C31C9FF3F72A44AF7784BD25CF079AE9C0
-:10751000BF8005A6A39C5B703FEC338BE3FC20F996
-:1075200060E1AE089D07FC90B5A6BB603D2CD9B2CA
-:10753000EB8671F0FD821FBE68477EAFC98A0EB52B
-:1075400064C2FE333CE9BB555727D0FB263DFF45BF
-:10755000E18909BF157D077899B75DA53C0A5D3BB8
-:10756000914710267C3584F9EF09361C557D2DF0A6
-:10757000B4017FE6A8ECE2E72BF1F63F3D6FB35D87
-:10758000F38B81BDDB356679D3C3AE31E9533CCF94
-:1075900081FAB32B97E7A77F62F56764919C36C9A0
-:1075A000E1DC32BA8F55CAE1F9420FCA71E6A1FE99
-:1075B00083FABB5B9E4A477FC63BF73F9547F91A64
-:1075C000A86F46C4F5CD6DF57CBCDB7E9942F952BF
-:1075D0007F9AD63E12EDC19A477E95AEBFEFF54F2A
-:1075E00005C1A30371BE423F2E55DB06E2EF1A4AE6
-:1075F000397BC17D5B3238DD1780D36D84B30EE1FA
-:10760000D49D53A91770BEBD81C377621387776E6F
-:107610000F38C31457B9ED470E5F98EC8E28E9F583
-:1076200053BB5486FBAC6EBBC364079C65AD5B115A
-:107630001F4B57BCF28615F862E125801FE0839A44
-:10764000CD0ED2FB0B7FCEE3A91F2895F914D03FB6
-:10765000104DBF039E2F027B01ED8DF83CBAED80EB
-:10766000CF108FDD76401FF1B74CF8B596EDFD15C4
-:10767000FD8E96E2E7F998CBE4BD367B4CF7DA68ED
-:107680002803F8397F27D2A9BFF93E2EEE9FFDCB04
-:10769000D03FDFB282F8BFEB12FD39B6C6D4A80DD9
-:1076A000F390BB762964272D5D59995EC9F07C1B48
-:1076B000F7AB151471FDA6F8FD945FE300BAA6C2FE
-:1076C00078FD8B34FE5CF3F07CF31F32BA4747CE73
-:1076D000D7FC1CFDED4ED4872E0BE94333FCD716A7
-:1076E00071BDB954B5907DBDC4CEEDEC4E717FC572
-:1076F00070318FE145FC9CC315C2AFD0897625C699
-:10770000BBAF76D0EF18313689FCEE56C6F9CF2ADA
-:10771000F1E6B17EDCBDBEC97EEEEA8F78BA85B5F2
-:10772000D3EF224EAF98A9E1798637F29C744F14BB
-:10773000FC09603FB3453F476CFCFCC21B3806C0E8
-:10774000355BF8A7DFC0EB5161FC370AEC64D786E4
-:107750009F7190DD70572AF71FB29C0C2BAE87AF3C
-:107760000B3975F378871FE5FAECF17705B084FEE5
-:10777000C20CF055E3EC5A570AE3345BB8BE6FCE47
-:1077800062DC2FB0B6A31CF1770598C998BF0FD063
-:10779000EF3E9FDD1B1F19CF4F2C413FC3958C330C
-:1077A0005805E1D7505F62E7EF6B1FDD31E3FEF173
-:1077B000B04FC0AC29D4338823E48BDA0CDAFFCE87
-:1077C000C0F30559585A89DFBE6665610B2F37B87B
-:1077D000E85E25AFE17761AFAF60D10C802F7AC84A
-:1077E00078BEE3C6A8253A0CE345D6E83EC49FC55B
-:1077F000A9D93C304EA04A2943BC2F59D3B7F9AE82
-:107800007CF4A919F7F7873ADEE785F3BC43A17C3E
-:10781000A1D9B0E8914F6FB1B2036A19A71FF26105
-:10782000639616A676CB399FCB7325922EA5D0BD35
-:107830001EBFB3C5FCA09F0DE9F8BD3DB15F252C6F
-:10784000F852DA6B8BC5BA5D2CF9EE71E37ADD265E
-:10785000D70DDA8780B7D9A24CC6F78F8A75F16841
-:1078600011DF67DE5324F7997D1B6FA9834509EE6D
-:10787000671C444739EE0C513E523488FA93F3901A
-:10788000FC3B9F35513ECF7CE1A7B18024A1FCE0B9
-:10789000D61F71BF9029EF080C25CA6F5BB4DDFCC1
-:1078A0005CE7E7510D7289FCA68ABD6B2ECE4FF9BD
-:1078B000528A0FF97DB67D27F907CCED6CF8FBA94C
-:1078C0001877DB00769522E26550776C52E8772FC7
-:1078D00066F7EFBA1CF53948EB29742E54D8DBF360
-:1078E000057D1DE27EABF9685F615C0DED2BC4D7B1
-:1078F000166E575A853D5CB7C9686FCC5EABB33B1B
-:107900007961B81FC061CA53B709BBE34D7BD7E5A6
-:1079100028F7CDF705BC69E17084F318BF573387AA
-:10792000BFB70AFB52F2D5CF8A6C86789B3C775A58
-:1079300083F28ADFDB60CAD372D1FD31350ABFBF63
-:1079400053FA215F17E569B043E9BE9CE369140768
-:1079500037FB273B2BDD618BCE4F7973C66DD3117F
-:107960003F35E9762B96AF77DF2BD641E31FF70C37
-:1079700022FB677DE5A82D989FF4DEA36766380794
-:107980005034459C9F8AFD0EF3E9677D06F050FD5B
-:10799000AF33FCB08FEA7CBEEB162788EECF8B3E70
-:1079A0009D61053DDFF940D756AC67686A80EAF70C
-:1079B000760DC43B9733220E5E6F96FD3902D85F79
-:1079C000E743BCFED1A38E4018ED5F716EA9E64A75
-:1079D00085E4AF0BD75779DCCF5463798E9713F8D2
-:1079E000EFA25CA89D570BB88ACAF13ED493F4FB72
-:1079F0000B8307F95D45807FCFC0E0392C17CD544C
-:107A0000C2763CEF7F347289D06B097F27C425D6BC
-:107A10006B617180BE977E74E88769E53DFBF96F05
-:107A20008E8B3EA000800000000000001F8B08002D
-:107A300000000000000BE57D0978545596F07DF5B7
-:107A40006A4B52498A244042162A090901031490BC
-:107A50004080A04512202C810A28A2A0168B10106D
-:107A60004840EDA65B7AAAC226E216D4B1691B9DF6
-:107A700012D1C66EB5A3B204D92A6C823A5228DA62
-:107A8000A8A041504163774418E30CB6FF39E7DE04
-:107A900097AAFBA8B0F4F4CC37DFF7878FEFE6BCEA
-:107AA0007BDF5DCE7ECEBDF7651C63AE7A1B633F88
-:107AB000E3CF0DA1D2D6D5C05821632F3ADCB6AEA4
-:107AC000504E5D9813EFC967CC9EE18972003CB7B8
-:107AD00052F199FB30C68EFA73DDB18C8DBB423FFB
-:107AE000BFC8BCA49F847FA49F8F74FDDCAEC0BBC5
-:107AF00083E03F733AF0FD3BB25DBD1D1D19BBEB4A
-:107B00005F9807FB6165430C6C0063775B19FD7C34
-:107B10005FB335D75A00E54B96449609ED5ED9968A
-:107B2000310BFA618BE1A514C6BE69FCC8EC807EFE
-:107B300016B4AACC95C85875AB42E5824D8DE611B6
-:107B4000D0AE1ACAD2B0F9CD13F365ACC93821361C
-:107B5000F4BCBF83CF97B1358CE17C5E396BF440C8
-:107B6000BBBB0CF55F3E95048F072BCEE71D97AE90
-:107B70003355BCF72963E5F5F997D60F722854FF02
-:107B8000588EAB08D7D905FA405835F0F5EADB2F07
-:107B900015FD4D8D6677B8A17EC68058AB03F05DAC
-:107BA00078D4B32C16E6316B5D663F15FAE89F5129
-:107BB0005282FDB19983257C9577612C88EB33B691
-:107BC0007462507EBFA3309EC1BCA62604EF617DC7
-:107BD00019FB8DBF7B9D752863637E0B6DBAD02B1F
-:107BE0002E06EF965B04ECBBDE5D560CF0DF558293
-:107BF0003D8EA23A1FBC7F10E703E56D037B45B3C2
-:107C0000DE80BDCC18833D9EB192F469BF41BEB801
-:107C10006DE0D011F87C982536771AE197117F94A2
-:107C2000A4BB27633DB667B00E8F39D0F166588785
-:107C3000E72DD5E98375787AC778FC11F03649E0ED
-:107C4000E1370E3B95070D30CF7EA17968E30367DE
-:107C5000DE1384FE4E2F4DE9BB1AFA7B367DD81217
-:107C6000C28B18FFD974CF9CF0F161B9BDF1F9D581
-:107C7000CE639698C71241377731F099C0F5CFF0AF
-:107C80007F42598C04DF383691B9F242F0A41B537D
-:107C90002578F2D46CA9FDAD33AF93EA2B2CC182C9
-:107CA0001A5B88BFF5F3D14A2014F16975ECC63828
-:107CB00006533CB1E3C28753404EFEB641752A30AD
-:107CC000D7393B9FFF7008B43A070B4E04BC9D7335
-:107CD0000100EB3DB749F5FB32913F5CC68A4E8C03
-:107CE000556157D07EFEA1D7CDC3E0D7AA9AD963FC
-:107CF000918E73FCA6CF9BC2E679815D34B32C9044
-:107D0000878DF2F36AF6D0776A6F840266772FE880
-:107D1000A75E575F33F22B1687ED8C9F3769EB8494
-:107D2000F1171FCF7C645FD8BA9F76C4267D791D7A
-:107D3000FCD28FF5FB59C5F19A0FC00A596943234C
-:107D4000D169D921D5892CBA2C5D610AAC73E4269E
-:107D50008B3F0A44EBDB6D27CD0EC0D70F5EC723E8
-:107D6000FB4C28FFB58C25E27B27CD4DF07CA8C3CA
-:107D700041785AB0E33B3303BA8FDCB190E47A0424
-:107D8000E8B178E09F6023EBB509FAF765C63A9F42
-:107D900087FEEF5A350A848BB1F8D62954CEAB1B37
-:107DA00045FDCD6F9D48F082D618820F46074730BB
-:107DB00098C7C12D1DD83298C7613590FB7BECC7A1
-:107DC000124B7AA222F5B6A5B8EE83D1BEFCBB61F8
-:107DD000BC8A3F8F2C47BC2ED8A4B890CF2A5476AB
-:107DE0005049C0F946517F15EA7B050BE1F998D25D
-:107DF000589F219EEA19837A7540EC6A06B06A069C
-:107E00007D11813F0F09FD626AE2F31EDE5A49FDD2
-:107E100069F5871D59B47E0D3675DC609C6E0BAD1F
-:107E2000C7D4A45039BAF53A2AAB37551A1D30CE0B
-:107E30005B79CF25219EA0BDCD13512F0F8C6711EB
-:107E4000F497565A843E9E82FA18FA3D90E5FA025B
-:107E5000E572DC9226A315F5A9CD6A7F1EF8605C59
-:107E6000515FC7ACB075A97B6E610EE0234B528B9E
-:107E7000C905FD4F81325C7FDFD18EBDF9A64D7FF4
-:107E8000D752A9D925E65CC218F0F9ED763E6F4DC0
-:107E9000AE8E89F6DAFB4185CB876FB3C5FF3CFC1C
-:107EA000FE5996E7279C6F70189BFC1AE9D3604631
-:107EB00065EC3F6FFE405F2BD23FCED8C412E07D11
-:107EC00043A6367F2ED7579A7F8B98FF61952D4614
-:107ED000BE387CC30D4117CCABF1BEFEFDD13E6870
-:107EE000E325669AA93F666FB988FC5ABD2BC6B1D7
-:107EF0001AD65701B441B865A7C5BF3E939E332536
-:107F0000094BCB7A05EAABE35A72D1FE94EE8E0AA6
-:107F100020DF36EE8E32A21D7933C79398D9119F98
-:107F2000772F5380BF5D3B2C46E48364872B29B3B6
-:107F3000B0FDF95E498F69F2A8E733CF2A2E7F1E84
-:107F40002187D304DF4E177238CDE88CFF25CCFB98
-:107F50008E7754867A7CFA12A5D7A602D469B1CE60
-:107F60009C3039D4E4CD847CD91FF993F3E5BCD699
-:107F70000E42BE3345BF5C0E2AC040237E2AAEEBC4
-:107F8000E047F95ED09A48ED3479D5E4343DDB53CF
-:107F90008AEBAE5806F20DE37896A614A0BC84F8DE
-:107FA000C46C477E023E499E15C607CB1A7F342219
-:107FB0009F988A15E2130B94A5617CE46EF353EC51
-:107FC000233AC13CC62DCF34AC66A1FA72E4978E39
-:107FD00057CFEF85A2FD745B20C700FD996AA29C74
-:107FE0004B615EE7921CA4C7163D0000A06091C9DA
-:107FF0005D8A7EC6A2DF294ED4BFE87FA0FE19703D
-:10800000ACC6EC099BDF2DADBD9903F034B1B51BB7
-:1080100095FD333C93100FD35A27093CF6A69239AD
-:108020008A0C389F7BACDCCE9CAFB9FF761CEFBCD2
-:10803000DFE2C4F1182BE2F416F32D74393BFF1282
-:10804000E7F78E893D0BEDCF44795494CB33E9CCDF
-:10805000FE384C71C65AA033F47BC6C47C76A0E7C8
-:108060004C803D087760AE0EFD50EE609D6176E578
-:1080700082B12E8365037D17FDE55323A8C239B96C
-:10808000C1DE011877EA306EFF9B3798C8FECF6BD0
-:108090007C6F8001EABFCE747566A07BC774F1D493
-:1080A000E07AE64EF0BF6202F8AE875F8F1BE4080D
-:1080B000E1B3DE18C831C2FBF580471FCCABFE210F
-:1080C000B5DCCFFD9E98CA5E57E6EBB9ADD9841FEB
-:1080D000CDDE68FA7BAB37191611D2E357B2431ADB
-:1080E0007FCF1772301FE58085DB9B4AF730E4C3F2
-:1080F0003CC599C3C2ED0D97074D4F03BF93DC54A8
-:1081000064A73B97B190DED6DBA3BD6AFDE3836134
-:10811000BDCBB33CEB510F94FCE9BF5EFF18AAE660
-:10812000BDF66219D269D8750A5395ABD1933F9ABF
-:10813000484F2EA964A427A10CD793A676FCF43F40
-:10814000645E9B9EFF57C1F7E0DF92DF887A3CBCFC
-:10815000BFCFB24AB6219D77652A5CEFFE93E6ADAC
-:10816000D7EFBBDAE4F5EAF4FB4BA2FD95F4FB1183
-:10817000D4EF8597EA7306FDA13EFFDBCE1E7ED4C9
-:10818000F79F32D0FF68DF76C4389E17FA9EEC4125
-:1081900074BCFF72FAFEB19C1947103F11F4FD7BCD
-:1081A000FF0C7DAFF1975E1EF472A0E7FB310F82EA
-:1081B000FF8574DAAA30D4AF217F8B111F1FCCE268
-:1081C0007CACC94D98FF45761EE4C19F9379A95CAC
-:1081D0007E5FF3970207C69B05B17D9912E2774D4A
-:1081E0005E347ED7DB9139591E35AB302427F35EE0
-:1081F000D3DB81F6F8699B09E357D3BCEFB81D8048
-:1082000032DC0EB4E7EF58B3AE4D0EFEE32AF92987
-:1082100035EB7F9C9F52B322F3535A56C77F9C9FE6
-:108220002E4347B2331A9F8D799BF307CBE6FE3E70
-:10823000F00BCDFBA039DDBF2C13F51ED787637E75
-:10824000663588CF3B443E41E3D711D91E17CE5344
-:10825000A333FAF7E8B75FAD5F3825A986B9E0F92F
-:108260001D5086EB0D0BD22F827F3FFC1AE9DC3FBD
-:10827000EBEAE83C49D0F99FE8174ECB8AE0173289
-:1082800017B7FF21BA582622DF7C1F303294AFF691
-:10829000E86A5ACBF1AEC12B0246CDBE26A27D05BF
-:1082A0007E99FEDFE1978AD2FAF35670FD7CEB8B64
-:1082B0002B8D83001F454CE43F86AE717543FD0254
-:1082C000BF0FA61E293F725815B0EFFA2365308FF5
-:1082D000318FB7D5FBB07E78717C5B3E054309AD2D
-:1082E000BD77FD90230FD1BCEB38BE3D4D4677AF37
-:1082F00030B800E0D830B84807AFE3EDD18ED8A948
-:108300001F3F974FE85FE987B0D69F9003D632A210
-:1083100003FA8B9B143BE6436E2DFE9B19E95351E8
-:10832000DA742015D6FBF8FAE195B61EF01CF5209C
-:10833000CCF7B9F5156B7C46F17E27CA8FD18FA596
-:108340005E71A940A779458A3F2BF3523C3E9725A1
-:10835000DB33FC31CAEF3373C1B5BD8FF24BEF672E
-:10836000D1FB01CB358C7F733173F923E8C957B545
-:10837000761701D6FA07DC4DACE771B8BEFD3621A1
-:108380006F4183613E037C35AE9FB606F365C3192A
-:10839000E78FBDEB3D95980F2342EBD67BB9F9FEF5
-:1083A000214B8EEFF0C721BF1FB81CBE5EBEE47D1F
-:1083B000C11F5532BFC41BDDFBBE8779C427297698
-:1083C000F46B17B8A31E42FFBDA254E3EFBB2A5DB6
-:1083D000C5B0BE2826E5FF42FC3DAF12F97B01D3B4
-:1083E000DA2F588376C96D686BCFF97D87D2F67E18
-:1083F0001EF00FA5E2E0FD13EBE7AFF1D9881E54A4
-:108400004F70B7CBF07BBD0E2ED6C987E06F924F71
-:10841000D4DB809F9C087AE33F059DBF55D864D488
-:108420007BC112EEEF05B378D9259BFB77866CDE16
-:108430002E3A5BD0393A0C0F69213AC34F00E388DA
-:10844000B075139E6E49D2D6FD70E55858573081ED
-:10845000F552804F92B21F58B33C8C4F3A653F5C47
-:10846000897808F5F7E011D4FBB7083C75C97EE8B8
-:10847000888FEB3305E56E3E3104F0C126C5A7C2F7
-:108480003AE7231F4458E7E94BE5C6A77BDF65BA07
-:10849000CCFB5F5FCA872EDDFBCC94742DEF0B3ACB
-:1084A0008DD5D1B15C47C7321D3C5583FD923ED37B
-:1084B000F4DCF486352B3A2561BE51413381FADA7A
-:1084C000ACF465ACCF734F56DA0621BF3A4CA9A085
-:1084D000F3FB3FB7F6881578B912F519F1EFEFD62F
-:1084E000B8801F27A2BC13FC54A5AB0FF24FCD8A56
-:1084F00064683FE8B9DFAFB142D35B97AF31A14FBA
-:1085000033F4B9A7D718817EB714FCF900F667AC2D
-:10851000FDB72363332FC3AF75BA75ACD3C13E5DCE
-:10852000FB27AEA0DF97EBDE5FA2AB7F4807AFD59E
-:10853000C1ABE4F7A7CD54484EA601FD1071579288
-:108540009B89D96D79A4367BA6D8C84F92F87ECC8A
-:10855000320EDFF6DCCB95ABF2C3E0EC3F5786F38F
-:10856000B189F19F2949CC87F6C3D48E3E1B93DD98
-:108570000E1FE5E9ED1DAFFF0C7F4DA17D16C92E45
-:10858000EF5565B851D5E6BDF3C83D367CA8C13B73
-:108590002AD11F6F77DF83BD5189FB1E631E15B083
-:1085A0006F5B25EA3D6D9D5AFB113FFDACE278778C
-:1085B000676FABDC80FB2A25811CCCD74F4DE025B3
-:1085C000D81915ED58B5C8778CD8A9BAD1CE4C8D2D
-:1085D0000EE42CCA0F5B27ABCFC57536DEA7127D24
-:1085E0007CCB783C329D39CD98AF688C8F5FFC0294
-:1085F000B4DF7B9FBA18EDDAA78B133BE1FCF7657C
-:1086000073BF6D6F7CD74E7702DC18738719F3B593
-:108610008DF70FA7728FEA5AD9027CBCE6B9836442
-:10862000E71B63E2093F0F67EFABAC05B9A8CB7658
-:10863000D0FB9E047BA706F457579B18E6ABC1916D
-:108640007A86F8E6614BDFD5308F69B5D7D1FED198
-:10865000F47FAD1C9102EDA6AF30D1BE02FCF4C692
-:10866000797B560F3763FDCCE5A2F48DA472F7DF5A
-:108670005F7FBB37B46F794075AE87C6BB5AB3E234
-:10868000A6C3BC4E45713DFC7973B7389C678F6EAD
-:108690009E75D9C8AF71B1D10A1A0FBB236E02F40F
-:1086A0009B9BE37A3ABB63A8FDEEBFABB40FB6BDAC
-:1086B000797A27CC3FFD41E8EF5DADD33B4D0FB359
-:1086C000F7B3BE35129E779B1DF7A07FB93B3A5D8D
-:1086D000C1BC0CE03911F3B633857F0DFCB2F8F55F
-:1086E0000876FF896C95F072DAB2989D02266E7C4E
-:1086F000B06331CE537B4FDB7F33A539FA85FBD195
-:108700001BBA96BC8EEB08F1D96747906FC88F06ED
-:1087100078D7739FACF1A12DDC0BFE3FCE23C9357A
-:1087200002EBD99244BE0F9A5C9F1B9E8F08F9A959
-:108730004B853EE0ED4EF862296E3DF152941FE309
-:108740009913BE4F62C3F3EF9A9CCC8E8BF5A13187
-:10875000FE2A36D68878FDD4E8FDF257B86FF8B413
-:1087600089F4E8ACA73B2E69417D00F4C47C907E7F
-:10877000DCE46E261AB7FDFDC1E6CAB2B430396139
-:10878000CD95AEFCF6E5E4D873DF546EB0B52F2777
-:10879000B385DF3EE269931BF97C7661AC11F7E9A2
-:1087A0004A9EDEFF3CF2E3EC8551FD2C30F1D94FBF
-:1087B0005B88BE4DB1B13E3BEE23C6C51A3B40F9C6
-:1087C000ADD0234DB55114A7A89DCCA4F7D4958561
-:1087D0000EC44FA9CA8C56B02B6A9CD3E1E6F07246
-:1087E000CC1BAE882D72207D3B76E3F2D0561F3F26
-:1087F00079B4D23BB46F7676F1E34F0E84F97DCD38
-:10880000FC930666FEF7F7D1AA993B1EF38FFF5340
-:10881000FB68E66EFA7DB4FCF89B91FD16AB346FF5
-:108820007569941FF1A966703B319229B48FC6EC2B
-:10883000B0FE5EA17D34F5D7FD093FA7BDC057DD71
-:10884000012F71566AAFFE5AF55B60DCD2449E6F11
-:10885000559FAC64B8AF0678F5D9011E995443FB17
-:108860006B4B859E99A630773DC9BF3303E3E4592E
-:108870004F47111D673F33E7C3DF1520DD2A92C242
-:10888000E52953F01FF4C7AC09A17EBEAAFD4D0631
-:10889000CEA7F4DF20BEC4B853F53C790BE9CD1860
-:1088A000DA6F63F6A6870722BFD4C6F4C53CF9EC9D
-:1088B000A75332B2F243EFCF5E7A5F2E7F1FE2D62C
-:1088C00038D45B51B49E799B2CC42FD31E505D6469
-:1088D00027D3CD64273F5F1E45F0BCB42292B76911
-:1088E00006BEFF063E6132E9778E7236CFC65CAFB8
-:1088F000DB50DF3F1454397D7C826E66A44F71B724
-:108900004492CB3B10C760BFA622BF75A4FE781E61
-:108910006A9742FB4D8CD538500F4C3528A4EFF4A4
-:108920007259D18DFBAFD3329CB7E37BF31FB138C3
-:108930009766F239A8DA7C206E9A6F08CEC27D481D
-:10894000B6C542F98D6A5847541C3FF7F01ACCBFA0
-:10895000DAC88C66CC4F39B85ED3E653EDA81C89D3
-:10896000FC0AF5C78C503F3F96EBE5F91D78DE8792
-:10897000C55AFDCF878F8773CEE6EF39E250DE060A
-:1089800011BFA0FC1BA0FE6F8CD797C615399AF2B9
-:1089900069FF7E15E64B703E3D7A878D0B704A6FFE
-:1089A000E4C785C6AC58A443E2A4C938DECB2AE9A3
-:1089B0002710AA478AD00F7C59ED8FF1ECB407F647
-:1089C0008E588BF0AB7DED388569AFBC4F76EA2EC3
-:1089D000C1674DE8FFA3DD02F85528EFEDC6F5832A
-:1089E00047E5F99C7BBB29D2BE9F563FFF0113D1BF
-:1089F00063FE0ACE0FF36BFF42FDCE8F0D76427AF7
-:108A0000CCDF6C1A807CFD2F62DED36BD38B8F01A1
-:108A10007F4C37C5DB157834CF576146785E9D4271
-:108A2000B036DEFC073EE864C8E7FD6169117C14DE
-:108A3000EAB76306DAB56F5E4ACC981646F76F96CA
-:108A40006F8DC37DED5351811C3BE663164639D7CC
-:108A5000939C727A7CB33C673DE66B66DA83B1B86F
-:108A60001F3EF39EEC04B4779FDA0366ACFFB43E7E
-:108A7000D380B0CB6E2F46D865EC43F037E29C0A2A
-:108A8000FD009D16289C6FE6BDB4D79C05E33D27ED
-:108A9000F8ECDB97DFCFC5BCC1FC8C602EDA61E05F
-:108AA000ABDC54A4CB1F15F21716BCA4BAA27A876C
-:108AB000F86A01F215C8FF5CC1570B366DFD25CA77
-:108AC000E902E4A77E97F225C497FBE8F96BCF8E05
-:108AD00060FCFD7DC8779ADD0778B909F36B660104
-:108AE000C338086F10FA1AEACB78BD2F9FEC096BD8
-:108AF00032A35F5CAD727F01E42919FD89EA069318
-:108B0000AF294C3F2EC0FAFC507D7B7CB3BF9BD875
-:108B10002FABB5905DDA2FF0D2F4C0E638E48B6F5E
-:108B20005FDE7B6030C659AF2976D4FB97C8A1C001
-:108B30005B35E2298ED649FE5135E2252E84A736D3
-:108B400079137C51CD381E34BC541B059EB47AF188
-:108B5000FE01C187F398C0EBA6EE5CDE857C03C7FF
-:108B6000901DD1D6E74990CF0FFC20F8FEA858E71A
-:108B70003CE01B673EF197CB3C40C4FF50F5EDABAA
-:108B8000CF52FE48A3A736EFF81C87A6A75D1D129B
-:108B900042746E32B0AA48F9EAAF85DC996C5CAFDA
-:108BA0009CAC4DBD7D31E06FEE4BAA939087B157E1
-:108BB000D8B81643532CF9A7BF56EDB8AED23F55DF
-:108BC0008EC6756B7C67DAA8181B709F907520FCA9
-:108BD0006BF32BEDEC1EDD81F35D00E7A3CDF3A479
-:108BE00012207AF95E55ECDCDF6D32631E5193532F
-:108BF000FD7C7F10F355E394C14A1F9C8FD381F213
-:108C0000CDC00ED27C6CC7EEA3F17C27EECBEC1D61
-:108C10001AE7535FAC11DB7DCAB81ED0F8F2A4C8C6
-:108C20004B9C5CB195FC616D9CD81CCE5761E37880
-:108C300016275D3A8ED6DE94C3E7A5C9C5C104CE1A
-:108C4000FFA5CBFF42ED343D8B3F988FD3F0A9E1D8
-:108C50002D4C2E25FC68F2A5C99346D77F54AED87B
-:108C6000928EE4B7DE2FD64D32D2296417903FD1D1
-:108C7000DE59CCFC1C5C98DD24BF6664DA77664F55
-:108C800084E71A9EF4CF4371953D03F13FD2964C91
-:108C9000FBE56C79F2BE6E61FED929CC7BA13E7DED
-:108CA00051F5933E65209561F65CF3DB6A178EB44F
-:108CB0000F43FE7A49A173479AFD869F87DAF8141D
-:108CC000FAAB2A58988BFEC4EA9C2C1ABF3AC97595
-:108CD00016DF9F77263822CE118A5F869E0FA8F175
-:108CE000981FDC9429C50FF39AF7919CCF67C19523
-:108CF00018EF4E7BE0FD8A8148FF174D747E616658
-:108D00005D26D9BFB31B66F4C7D076DA8A1C82E72A
-:108D10003C7F27871FE07EDDB415852F607EFE54E3
-:108D2000946B04F279CB1AC58EF1D790E70B97DCE0
-:108D30000AF54362BB76C0F99ED870AA6230C611AC
-:108D40008B55921BD786C72761BDAB4175E2126771
-:108D500032FB925B91CF8DF12477DAB9C66526CECE
-:108D60006F77E670BD715B0ED71BB709FE2D5DB640
-:108D70002C17CF15B43C0B760AF7D7CD8EFA00C668
-:108D8000813B3B3BD7C338D510B626033F9D51B836
-:108D90003F5E656656E4AF43A6E0BD38FF43F7C6C5
-:108DA000F6ADC509A81707A07CB844DC0571148D81
-:108DB000ABE14B1B7FA61857EB477BEF20FA5568BA
-:108DC00047C47CCF2E7F7112FA0B6737E624B03090
-:108DD000BC9FC57501BEE7807E7C2D423CB8304704
-:108DE000CB4FF8A9AC1279C443A6BA34DCCF05BF87
-:108DF000FE74B87FFED5B35156E44BF0EBE5E726A1
-:108E00006E57C09F979E83FC48705BBCA74E8DF742
-:108E100044D0475AA9F7F797E7D822FAFB9AFC5DA6
-:108E2000A2D7847FDF9677E9766DE7BA9ABD4018BE
-:108E300010886274CEE0FDB2989F5EC7F397B3EAE4
-:108E40002C760BE0F734CA17EE0B6E56B9BF68E507
-:108E5000F2767A675F3FE615661D67CE00C0B38E77
-:108E6000AA4E07B4DFB7E67E3ADF71E73A8575565A
-:108E7000C2E2AE27D64C42713BE7F4AC4C81F6E738
-:108E800036F2F328506DD3C55B07521CEDC75BFF6C
-:108E9000AC384BCB3FE9F1BF2907E2AD18F8C5C9A3
-:108EA0009C32FE79DCBE1BD8A8A8DFA5F86FF67A45
-:108EB00028AEFAABB78ACA41F5CF96A6C23AFEA64B
-:108EC0009C7C6408CA516C3CE54F9ABD35B439F8B6
-:108ED000D786FE17C7019EB6DBE2EDA83FFEEA5D2E
-:108EE0004CCFDBF846F0E9D04D8D6A2AA3F63B86DD
-:108EF00040FB5DB678DCEE88B00FC7E9AC3F7F730E
-:108F0000F7C2819DF1B9B6DEAF7FC5E9DD66C7372F
-:108F1000CE88437FB5F1F7893B06219D63E2EDC81A
-:108F20000AB3C5399C2FD7727D74C61AFF02E65169
-:108F3000CFAC9BD809E3C33B4D2D6627F4EBDC593E
-:108F40001987F9822F8C4D71762CA17D00E761F491
-:108F5000ABA807079733DA1F1C1C303247266DDD9C
-:108F600013FF0C6A36FA316EFE06F70DD18E5F8C58
-:108F7000E6FBF7623FF0CE6D3CCFD6965711F985F0
-:108F80002162BD1D7213B47D207A5E5AC49F7FB5E5
-:108F9000EEF571D8DFD90D263BCEF7AF1B4CD4FFD1
-:108FA0005C88EF0DC08F6736F2F3027377409C9CAC
-:108FB000897A4421FE9D0BFC6B45FE5B687299E348
-:108FC0002FE5CBD28D3CBE9E5BAF50BCADF1E75CD4
-:108FD000977F04E15DF0A915FEFD0CA6A303AB5F2E
-:108FE00089F8688F5FFFD17C803537723E40CF0FA4
-:108FF0001ADE34BE08F12923FED4E89F50DF7758EB
-:109000002ABDE0237CFA4A581EFA0BCBCC2C0FCF9A
-:1090100043F90CD14E94FB1FA2E27A631E6AB1950C
-:1090200097BF8C8E5B8FE50F51197E9CF70F06FB67
-:109030007E8CB3BCB999C4B7BF541D26057E9D98DC
-:10904000D4544666A0D4E032A01D5C66213DA2D770
-:109050004339B9220F98CBA81C96CBCF899B580DCA
-:10906000F9175A09FE403AFA2F95310917F0287975
-:10907000BF173A4FC4FDDECA2109F76683E739F806
-:1090800085F48946E0F3CAFE099BB3002ECE4DE37A
-:10909000709F844213C0B5B51913CBA0FD2DB92E16
-:1090A000676ED8385ABFF0BC3F3E1F99E219908BCB
-:1090B000F6DF6C5B8576E06F4ACB02831A6A7F44E9
-:1090C000619F6E574270938965A0BF3DAC6DFE9164
-:1090D000CB55B9AE1B72233C9FCED80ACC4B4CF774
-:1090E000BD794C217DC6DC56A0E778C17FD3ADB6F3
-:1090F00000E9B955A6E636FEC8423D156F44BA8F61
-:1091000013641F6F0C34E2FB3DD872FB9756721547
-:10911000D7FD9CD8BEFE0741655F6AFDC1FAFE66B9
-:1091200082F5025D1517D01A444C01244F057DA726
-:10913000EC78F347EC77998F3545111DA6DA910F3E
-:1091400015E631FC0CE5FC18E08B3E58023F40BBB5
-:10915000459BBFDD87623147F3B33C45E42FDE63B7
-:10916000E7EB619EC1C4AFF70A7EFDCACB6A3055FA
-:10917000343E188CC3A3B0CDE302B9A81FCA554F23
-:1091800015D2E1AB75CBD21601FF7CFB9AC539161F
-:10919000DA9FF1BF1E8776759EF0F7D945357003CB
-:1091A000D41FCCECB17E75187F2DCCE576BF39335A
-:1091B00090711FEA994C1EAFB28B7B33EE83F6E5BC
-:1091C00059A30A5713165C77E786ED4F8E33463E58
-:1091D000BF31298DFBEB6C03B7C71623F3C52650AF
-:1091E000C9E2004FA3602E45782E156095F6F3FD79
-:1091F000D41EDBC5A15FE39891CCF77B981BF59655
-:10920000465F8D6E97D013A68C7EBDC1CA4CB8DE6A
-:109210001E6C9D1DED9346D7AF843C7E65E572388C
-:109220005CB5919E5AB499E7F516295CDF2EDAA950
-:10923000F0FCE625F676F34AD4C955EB66903ED3AA
-:10924000F49803FE217FCDB5BBE3038E7FC0EEAE65
-:109250002BBD2A7DB65ED3677D595FE4BF2BF94BEA
-:109260009A1E03F2BC98DBF11AE885288375CF16A5
-:10927000731CAE4E7518112F1DAD4ED4E78B9ECECC
-:10928000263BC92EAE65E1EDD8BA44E2DF95992AB6
-:10929000D1B5A2219539E0D19C0685CEC98E6D4805
-:1092A0002438AE3585E08A3F742EC175B7ED83FE54
-:1092B000A13BC1675F78BBC0C3F33456ECDFCDB4CC
-:1092C00079E4D7A3FD39678379009EDDB65594779D
-:1092D00074B3B67848F9594118B806E5CE65F2710D
-:1092E000FA586B49FEC5BA1609B95A7488DBEB45C2
-:1092F000C3F87EA1D1D7231EE96F3AA8323FC03709
-:109300001D520B03D07499D0E79664037384D12D5A
-:10931000CA11CD1C61F4613E5710E3ADC9825FEE06
-:109320008FE27A3F262F416A37D9368BF82798315A
-:10933000E220AE37D6D945EA9779B87FACF1D5248B
-:1093400091371FC75A96A39DBC6932D487F5672A07
-:10935000FE8EEC86A958F6AB012FA72FC74FCD1A6A
-:109360003FF5603D889F74F801F9207B7FEE28BFB0
-:109370007F025EC96F8B019E74D0C4FC50BF42E077
-:1093800005FD568C7FCEB962496E34BE0BA2DD035B
-:109390003D175F24E3AD834BC65B62B98C9F8E6E35
-:1093A000191F9D276749F5299E9E527D6A553F09E1
-:1093B0004EAF192CB5EFBAB84482337DA3A5F6D9C8
-:1093C000AB2648704EDDAD52FBEE6BA74BF53DFC76
-:1093D00073A5FAEB362E92E05EF5BF96DAF7695880
-:1093E0002AD5F70DAC96EAFB1F7C4C820B834F49C4
-:1093F000ED071E5B2FD50F6AFAA3543FE4CC6B1226
-:109400003CB4E50DA9FD0DAD7B2478187B5B6A5F4C
-:109410006A7D5F8287DB3F91DA8F4C3E25D58F7264
-:109420007C23D58FC9FB5E8257083FA7C2F95FD264
-:109430007B4188D8908F73D23C43BB53DEE78C11BD
-:10944000E5EFD86D0A4BC4F8E7E0443BC9FD35C6EB
-:1094500081C3BB8B3844F0F10566BB1DCFB35F49B8
-:109460002F66A33F51887C3E96EE559DABE7F90EE3
-:10947000BD5DD7FCB97830CBC6B0713BB8AC10D06D
-:1094800087E0C472BB047774274BED3B4F7648F5F9
-:10949000299E3CA93EB5CA29C1E9354552FBAE8B90
-:1094A0005D129CE92B97DA67AF724B704EDD64A9B1
-:1094B0007DF7B51EA9BE87BF4AAABF6E638D04F7AC
-:1094C000AA5F2CB5EFD3E093EAFB065649F5FD0FF2
-:1094D000D649706170ADD47EE031BF543FA869A316
-:1094E000543FE44CBD040F6D6990DADFD01A90E070
-:1094F00061EC90D4BED47A448287DB3F92DA8F4C01
-:109500003E29D58F729C95EAE77DE30CD0BED476D8
-:109510007EDF55F3E7C6E47D27B5332581BF8FF99C
-:109520006F16EDC4F3FEEDF9F99A1F58E1FC511ADC
-:10953000F70703F7CF5FEA9E25FC7FEE272EF3B9EE
-:10954000E97C5E021E78053989F729C47F18624DCF
-:10955000A57C6412ED5B90C974E07937F083004814
-:10956000306466621C1213F263D37EEE7FF57EECEC
-:109570001B10E3A05F7DB6BBE7CF289773EB5F1DA1
-:109580008171CE1CE65B89F300BB1B8FFB58EF4655
-:10959000C9F928AD1C65053C868D7728AA2EADDF5C
-:1095A00065E47794B599DAB7F52BF2550AAC6F51AB
-:1095B00058FF8F40FC650439ADF3829C41A0FD98B3
-:1095C000D74EF013DE64829FF43AA85CEBCDA3F291
-:1095D00029AF93EAD7798B087EC6EB22D8EF2DA767
-:1095E00072BDD74DCF37782713FC82D743E5466F3E
-:1095F00015957FF4D650FD4BDEC504BFE2F55159F9
-:10960000EF5D45CF5FF3D611BCC9BB96E02D5E3F41
-:10961000950DDE8D54BEE1ADA7FA1DDE0682777989
-:10962000030407BC0709DEE30D12BCCF7B8CE0030B
-:10963000DE262A0F7ACF50F996B785EADFF1B61207
-:10964000DC2CF613BEEAAE48F7183598B132E207C3
-:10965000CDFF1D87710F324791E9AF52DCA38B3FDD
-:10966000F4F4F85A8C632A01F717FD9F2EB9EB9793
-:1096700085C505DF8BF1EE8F66BE2890875A03CF34
-:109680000BD42630BA1FC6847F3E5BF0254BE27EAA
-:10969000F92C31AFD9420E0A913FF3883FDFB996DA
-:1096A000384B8BB7ED191E350FF933DDE0A3BC83C2
-:1096B0008DDFC3EF9FE131E7811C9DABB9F3008DD6
-:1096C0006777E6E220159640C79B319F7448A53C1A
-:1096D0006C7BE3558B7B12EDD6EF3A9B86F6A8FCAC
-:1096E000EF2AE5EBDF35C54EC67C4B721EC74B72C9
-:1096F0009E412A7764B83BE33CBFCAA979E16E2555
-:1097000074FF7F3C86E620E795CC61A273B8CCB5A8
-:109710001FAFDEDC040E1FC237331F9525E91E077D
-:10972000BE7F0B0418087B065B3222AD473F9F9E2D
-:1097300079DC7FEF996790CA8F32DC3D103FA773C9
-:109740005CD27CE2BA3AC47D9C9667705EFFB1F34E
-:10975000BB2F95EC10BEB5FCC6CA61E29CD6424553
-:10976000DB07E77EA295697E22D54FBD97E77B3464
-:109770007B79BCADE4FAF05C8D89F4E65425DA8996
-:10978000FEF6B99A7BFBE07EE16D10EFE1FEA9A643
-:1097900047A7026C00782AE3E72EA61E8F253ED34A
-:1097A000EB57788FE17EDF54F03F317E54BAF27C84
-:1097B000CABBEEEF4CD82F4B6AA17BABC037A3716D
-:1097C000FD7307A9F4FD86770DFE5C45257E312BE0
-:1097D00030FFD949C02F11FC058D2F16887B39DA4F
-:1097E00073E0B71B913E7FDD36308FF669760D72E0
-:1097F000203E9719F8BD3ADF5B2A3F9781A97C3C50
-:1098000037129FFF2CDD2F40E702E9372896EE172D
-:1098100034AA6CF1AB11F4E9BD828EEF269BCAFD30
-:10982000D4AFBCAFB840D075816857B1E7503ADECD
-:109830001B5C70D04471112B68CA7747385755BDEF
-:10984000F8C15F740BE3F3EA8693FC3C166BCA0F16
-:109850003F87F5B0E06B8DBF5473ACE7595BF8FC04
-:10986000F8F8C0E7F7083EFF12FDFE711647FCCD81
-:10987000F06A13A02600A5E7DFEC749E4F3BD737B4
-:1098800093B9A99C0DE446BE76FBD6D0BDFAB9AC1F
-:109890009E9E2F289A918170356B294B86FE6E5AB9
-:1098A00055BB3F196637B16ECD70CC734FF04FDBAF
-:1098B0008F65E506E54B9F83E464058EDFA4D4AC99
-:1098C000E802E3DDFAD2B01598471EA7723AB0B7A6
-:1098D000391D809F5C6AC2A5EB03B97848C805CDE5
-:1098E0005F938BA94B994B490ADD03699393A2BB04
-:1098F0003E4BC53D16630B9D43A9DE6549C0FCC9BF
-:109900005CC6ED76280FC4EDB526075F9B38DDBF3A
-:109910007E59A17B365F2B8CBEE7D09EDFA0F99FDE
-:10992000207F5CEE3E8DE1FCAF8ABC5E8627B95F8E
-:1099300076C83E7F6DF00F88CB26FBBD11D7632A1A
-:10994000F13CD417CFEBBDA23897C15CBEEEE0CF9F
-:10995000E0E704DAEC00FB392694277CC4C4F376F4
-:109960007A7F575B477BF3B498990FF7B394A203C0
-:109970003FA21F72E97C3DC903002FCB904498970A
-:109980002C713B22CD63B918FFE04F3C1EF7A53385
-:109990003A17A4C7A762E7E3B4975FB544F3F96841
-:1099A000764A9BE7A5F3E2F47A3F2F93E8AACD0F1E
-:1099B00034459E1DC6371AA39D28AF9546CF7B8898
-:1099C0004F2DFFA6C5C50733BF227BC02E2E4BE30C
-:1099D000E78F03EDD9E1E6B6783C2B6427B53C165A
-:1099E0002B8E9C8F745BEDA4BF263027D98B1EEC89
-:1099F000B8862FCA63A9B84348795E0FADC382FA0F
-:109A00001ACA28CCA390BDF4937CC6E0BC685D4123
-:109A1000CC88B03531718487C1C718E9E9C1B8066F
-:109A200058EFCE93CC8FE7A91A2F4C2A8D85FA9D3B
-:109A3000DF1A290EFA6DCC2BA9F81D899D673F4CC2
-:109A4000C57C4FED852D040F681E7196E7CF8E4FB4
-:109A5000C1FEB69F373B2CE4072C243C6879CAED45
-:109A60008C39711FB4E8231BDD332E3C5A1F437819
-:109A70001379B562B1EEE2F33C1FB20B81411007DE
-:109A8000B4985920CC5F36D965B88885C1993824F7
-:109A9000C061798E6B8D1F637B883CC84036303C3B
-:109AA000AFC65A1322DEA7D2EF2316287CDE67F258
-:109AB000DC9D7A50FE6C82CAF1FD7715F17583CD7D
-:109AC0009F82FE6DE39C1752D0DFFD6DCCDF098FC6
-:109AD0004FFD644E41BCD60DFB0FB22375F06E10E6
-:109AE000E35FA33F8A51FE6B3EE5D76E1076F6A981
-:109AF0008B9FB364C0675D1123FBC9841DD6EAEB5D
-:109B00002E9EAB427A5E28B63A502FE48A7C68EDEE
-:109B1000F5FF99DC14868F9DE0570780C0DBC1AF4D
-:109B20000E80EFBF0DFC6A84F1DE29969BC1AFC6A3
-:109B3000D20F7E3596CF805F8DEDD0AFC6F229F083
-:109B4000ABB15C0B7E35964F825F8DED9E00BF1AE8
-:109B5000CBC7C0AFC6E77517A797D27C8E31BA5F67
-:109B6000BF3426CE80FA15E61F8D79A1C3AE7ED113
-:109B7000888FEBCF1B24FA1637474BF0E0D309212F
-:109B8000FA22FD8F7791EA071CCD92EA337D3D25BD
-:109B9000B8EBE27E128CF9A1F0F753AB4A2438C53A
-:109BA000335A6ADF79F20409EEE8BE556A9F583EDF
-:109BB0005DAA7F344E4747FF3C834C47FE7D850BB3
-:109BC000C5363A5FD91E9F3E26E8A2C18FFF4A9D47
-:109BD0001C296F7B570F83140F741173BBBB8783D2
-:109BE0009EEF3B31F0C5DC02A487816F9BBA5A62BD
-:109BF000BA015D721F37303C5748270E607E76F100
-:109C0000DEE325E762902FF75698A3903EBB5D25D3
-:109C1000D1082FAD30A784F3515DA6A71FDD53F007
-:109C2000F0F569EF3F5A32E1B2FBE88F21FF75BFD3
-:109C30004CFDE8B959280F97E09155D17E6D088FFA
-:109C400013E8FB4ECC5325CD5F2F170C37E953702B
-:109C50005CAB8C4F57D6038887A79E30D239ACB601
-:109C6000FEC4FB5A7FC3D58B314DF997CE7FB78B9E
-:109C7000B707FF370AF1026349F34B703A86217E3A
-:109C80007E27E4ED5F85BCFD56D015E35884999D91
-:109C9000BFA7D1ADAEEAB151B92837457C5EEB6FB5
-:109CA0007C4C417593C89CB5F630BC3E21E6F18CE6
-:109CB00058D73AEC17E08E37BA14C45FC662B78241
-:109CC000F2D6754913C14F09F94EAB69A1E7E9F71F
-:109CD00004A8EC5215A4FAE1EA4BB48E363C386580
-:109CE0003CEAE9E417EBD1FA0DBDFFDA21E4B70B4A
-:109CF0002E3EFF389FCD85F622CE6777F2D2214ADD
-:109D0000A713F57E9CCF25E09A7C84B78975C5F9A9
-:109D10007C04FBC5BAEAAA920EBDE0088DC71CD52B
-:109D200086707BD31E3F6D15F8DF2CF0A47F6F9BF0
-:109D3000A9A6BF3D825C69A5664F8B8E1B747A27EE
-:109D40005A92FB43F80BB7037FE981F2E873AB62E9
-:109D5000FF8AF038B12D5E9A4AFCB426E6F6B73198
-:109D6000DEBEF1A8CAB8BD1DB71FF5E5FBA32C6484
-:109D70004F1B478D4C0FE7BB06B18EAD02EF837CC6
-:109D8000AE13F740FB316E0BE5E3073257FABDD057
-:109D9000DFE8B1AA3300FD1D6DB327EE187EDE812A
-:109DA000DB9309620D7BC64E7C10C77FFF28E80558
-:109DB00047689E5AFDE6F289637A211D839C8EEDE9
-:109DC000E1E74D41AFFD625E7B05BD1A057FEF16F1
-:109DD000F664A7B027DBD19E5890CE45623DDC9E4D
-:109DE0006C16F62488F604CA77853D7907ED099448
-:109DF00005A3B2CB486FE22536B22710A0D07982F6
-:109E000005D2BAB47995A7A912BD4624C548F42A4B
-:109E1000B3254AF525C65409765DCC92E0EBCFF721
-:109E2000D4D929D9AE0C3E3D5867A74A2478C0D171
-:109E3000D1D2FB95AE8952FDF8A229527D85738659
-:109E400054CFC47E18DFA283327A9D4A71AED87790
-:109E5000D2FCA9F7CB55DAB719F481EA0C97DB42AB
-:109E6000D6B64F66C07D32705F1C46ADBF2CA99E32
-:109E7000FCA8A326772A9EDFABAD043E84B2F82867
-:109E8000F869947C04BE06BFB7D03D92FC40F097C1
-:109E9000FA131D5AF87E93B66F3548B7FF343A5F10
-:109EA000DE9F2ABCC2FE94AB673B7E59B7C4ABF2BF
-:109EB000CB40BEC8FFFA6DCCED7B916FB67D047EC2
-:109EC0002AFAB91FFD82FC2FCD6FDBFAC52FC8BF60
-:109ED000DDDA262F1E495E0A85DC6E399AD5D0045C
-:109EE000F2B63959710A5493BC1469F2D224F4665B
-:109EF00079353D1F20DEDB6A72C7A0FFB7F9D85263
-:109F0000D16F981E217F3D4C8F601CC912E4FAE48A
-:109F1000D4507D162756787BC67AEAFAEBA78307DA
-:109F2000EBDA97E8E0D1BAF61374F0ADBAF6D3A540
-:109F3000FA0658F7E5FCEDCD423F68ED0A8D6ED587
-:109F40001941DF0E382AEB57E6AE96CE3D349E9887
-:109F5000457A73CBF195028F55127DF668E31C05A7
-:109F60003CE75FFA7E89D117D31BF8A0E498D1595A
-:109F7000EB08D14FA313C37838ACBF52AB2AC95FEB
-:109F8000C3314EDFF6D6B94BE8E71DC2CEBCA1F314
-:109F9000DFD49FCEBF3F1EF8674B9381E2AB2D47C6
-:109FA0002724627FBB2FCEA4F9361C33D03DB217D5
-:109FB0007B8EBFA9B65B687EDA7C0A3F581A83FBAA
-:109FC000AC179A0CA4FF0A4DEE447B04BCEBF9AB32
-:109FD000BD7E35BE05072A11F1B21BEC109D1B1684
-:109FE000FA54C3CB9E134F12DEB71D5B948878BF23
-:109FF000A1D520E165688BECAF0F399320C1034FE9
-:10A00000727F10ECAE84DF2BCD5B2F17B83322C3E9
-:10A010005DE4F657E90F6C1774DA26E8B43DCA39E7
-:10A0200039D2BEC6B64FCD55E1DF5538D393E7DB05
-:10A03000CEF4E4F9AFCD4047D4B3174E1B48CF0E52
-:10A04000B1D7AB3511E851DC6CD0D909D96FB8D68E
-:10A0500078F5543B7AB1BDF735BD58A27D3F2578E0
-:10A0600063C4F3B1213A8873953A7C6A7EF495E92A
-:10A07000A69D47D7D1AF9DF743FDF8F4F134BB0E51
-:10A08000FB69AA247BB326E65DA1CFDF257DFEDE3A
-:10A090008F429FFFD889FCA423A33AA7A31C1D6964
-:10A0A000D3E32C365C8F6BE72183CDEFC584FBF9BE
-:10A0B0006EC18F3B5DEF8FE983F4ECA6FEAFFA3BF8
-:10A0C000EF0A7FE71DF477BAE33E10F7770EB96623
-:10A0D000707F2759A1EFC52C8DB9DEE889C0A7FF95
-:10A0E000D7FD9CF145B29F53E194FD1C6DFF60B715
-:10A0F0005DA1735863F264BF6737FE827926ABE2D5
-:10A10000C77B5CDB5D132FAB870342BE0F09FABC34
-:10A1100029F4F07E1137EC40FC135DCA055D78BE72
-:10A12000A2F8BCD3E674207DAA785C96574DF1F472
-:10A1300050CDBE7B6BA8FD910BD3CFE3FDFEDDF6CA
-:10A1400018CAB3ECC6F9C0128E983CE7F1FB15BBF8
-:10A150005D8A636984B87E488BAC07343F41E3CBAA
-:10A16000DDCD9F135FEE6ABDBC3DD5F497D6EE4DB5
-:10A17000F67A29E2E7FA66C6306EB892FED1DBC500
-:10A180002B8DA36F3FC458AF46B23BFA71DCAD01D3
-:10A1900015CF3FEF6C0926E2769D3B7048C57BE00A
-:10A1A000C52D019AEF3E97625733A95D299E8B7E9C
-:10A1B000F3E27B63F0F9AEF3468385F699EC24B7BE
-:10A1C000C5423EDFB968B03909BF2AED73045A3E73
-:10A1D0007F10E5D56755E9BEC8EE8BFD92C2F1F65A
-:10A1E000E8752AE993ED651603E697B79F378AF37A
-:10A1F000D601F21F76B466D9B0DCEE02F9217D11EA
-:10A2000024FCFFFE3A7E4E7527F4C7F58483E6A151
-:10A21000F141E0BCA13CD2F7767E2FC61B72F1B3B0
-:10A2200018C4CF81F37B62505FED6AE1E30C59D231
-:10A23000148371E6DBAD86589E57E99F84CF1B8758
-:10A24000DF6FEB87EB6A31F0FD1BE1D768E3ED2EA2
-:10A250009B4DF9FCDD2D3C0EDB7D9EE78FB6FBF9B7
-:10A26000B93526F498D67EFBF909637A61FEC06F92
-:10A27000A2F643987F651CB4DBDF71EB7574BEC634
-:10A28000378F85EBBD52BBECE794B4E8EC93671EC7
-:10A29000C981468723DF4DB8B192CED7733D39CA05
-:10A2A00028EB975DE797264DC0F16D7C7CE6E7EFE4
-:10A2B0006BF119FE18C3BEBB523BFCE68915D8DF13
-:10A2C000667ECE6C884DD6674786CDF8FD7C3CFF18
-:10A2D000BF2986ECEC765C3FF67F9451FE6C77F9F3
-:10A2E000E3A57198B76E664EEEC7C97ABDF4C2A6F3
-:10A2F000BD71D0FEBD0D0AE177649EBCDE9DAEEC63
-:10A3000087310EBED0CCF1ABE59334B9DCD39C7071
-:10A310001BE9A732781BF0F85EF9EB94C79EE39730
-:10A32000FB19B831469AF7FCA6045DFC26E7C7C1C5
-:10A33000DFD4F203B68A01A1F8ADB095E7D707FEE6
-:10A3400034A17F00E65B5CC6CFCFEBF3E2A38C16B3
-:10A35000D9CFD2E5C50BF57971BD3D17FED800B157
-:10A36000AF7189FF23EC9C966FD8660A4C715F83AE
-:10A37000FF30C808A10B9DEBF5241600FEDF10FE90
-:10A38000E52073DDDD29202A5B55DF1016E6173046
-:10A39000BB8F250D08C5B7834FCBF140D171992FE5
-:10A3A000217EFC12E3C955B8A74972E0E379D0AB2E
-:10A3B000F433D6C4F46E6802BA0E3CCAC47EC7BF7A
-:10A3C000EC45BE6AF842DBCF00D7A313EECF33F2E1
-:10A3D000B71BBF3013DF6D19CEED94E6A768FB34D1
-:10A3E00037B2A6E5A50A9ECBB6AE68027C6E3A32BD
-:10A3F0002B7501F4FFC1C7B4DDC9B6146ADFA7AF7E
-:10A4000093E2CB815A1EEAB8C1975880FEBA4592B2
-:10A410006BADBEE1F8D218FCBEC885A081F8B4F1DE
-:10A420002333C3BF0FD0B0C342FB390DC7CCB4DF59
-:10A43000B26D0797132DEFACF9F96F097D7E50F8D7
-:10A44000BD0784DFB24FF82D7B84DF12107ECB2E48
-:10A45000E1B7EC107ECB1BC26E6E3A2EE46F498CD6
-:10A460009F7FC796E765B579DED1BDE98411165C9B
-:10A47000FDF180B50186F65C9693510E594E462645
-:10A48000CBFA63B83D556A5F6ACD96EA87B1EBA413
-:10A49000FA1B5AFBE9E291C1BA78A444E78F8C9188
-:10A4A000E5F26858BC4BF1B51CEFDE141EEF6622D6
-:10A4B0009D781CB8ADE931A2E3B6D359F1E17ED95C
-:10A4C0001B426EB69DE6F6F98D33E76223F96D67A0
-:10A4D000043DBE16F468167ECA4D29AEDBF30B317F
-:10A4E000AE3867C6731FEDF1B3F6BEF6DE19FFA9ED
-:10A4F000B870FBF705058D21F8DB2D9FE452FEE4D3
-:10A500002AE563592C3FE7B65989A6FBF757BAD716
-:10A51000F29BFC2CB10F51D387EF8BD60CC4F20504
-:10A52000933B15EF3F6D56DC53508FFB7E678EF8E3
-:10A53000F72496E72B9AF037A07DE04792E1E725D4
-:10A54000C588FC1525C067996739E2C78AF13A3496
-:10A55000526D6E86EBDA64620D68E7998B39EC9D7B
-:10A5600018172118E7875E9ED5F9302F25C8F78F79
-:10A57000C1BCD2F73EF068167E770B4BDC27B35890
-:10A58000F9BD83E87C4F5D7E21FF9E6D7C3FECB77B
-:10A59000249BEFA306487F4F11FD1A6276A4933DDA
-:10A5A0006D4FAFEAE25C364FBE8FA2E79706A16718
-:10A5B000DFC8744F89F41D8C3F0AFC6CFB6A9C8ACF
-:10A5C000E31658E35CFCBB902E15EF81BDF1F5E876
-:10A5D000986911F86C7FEF697FCC0FE38382608DFF
-:10A5E0002AFE4E8541CE6F190248EF0B3633C9F56E
-:10A5F000605C70C2A5FD0D3923FB79839AE4F83FB6
-:10A60000B4BF5FA7E079B3367E428220FD8FF0EFC2
-:10A61000695C899FF4FBF6C7F3B5F3929E4FF01C7B
-:10A62000B11A6FA3F3359B8E58D7A31FA9CFF71D7F
-:10A63000FE80EB71FDFC1B3F98948AFED7E6A137A4
-:10A64000A7A21C6F41054FDFEF5938C925C1B07E65
-:10A650001BEA7B26BEB355CDEB476970CD243C3F4A
-:10A66000B365186FFF49FE9127F17B605B6E13F5B0
-:10A67000BE4778BD06B3459386216C32103CA917BE
-:10A68000B487FE7EEAE93A8EFC199DEF3A81E59F98
-:10A690005076A01CD1D3F519C2C791C760DD477BA6
-:10A6A000B84E86C3893D5CA7C2E1CD6DF6A5C5163F
-:10A6B000BE7FACF1E1E1631384DDE1741FAFC5350A
-:10A6C000C55797E7FF77C1A76F0B7D7548D88F37C0
-:10A6D00085FDD88FF683E2616E3F1AC5BEF16E61CB
-:10A6E0003F768AB8371477B9857F3159C4C33C0E99
-:10A6F0002B185ACAE35EBB96E7CF30468A87C61549
-:10A70000C87EE2D87CD9AE8CEE9628F169795AAA37
-:10A710002E4ECED6C5C9B25D2931F6D7C5C98375CF
-:10A7200071B21CF716378FD6C5C913A4F6C7F31D2F
-:10A7300044D7A2E3B7EAE2E5E952BB101DE57D9BF1
-:10A7400010BD6644A4E396E2190FFEDFA263E4FDA8
-:10A750009AFFFFE8F80FCAA3CD20EDDFE8CB77849E
-:10A76000FD7F4BD88D83C20F3820F21CFB843FB78E
-:10A7700007E9D81DFD3AA7F0EBF8390E2D0FF28648
-:10A78000C8433588731C5BC4BEDB2691875A56FCD0
-:10A790003D3FC77191093ABE1B918E154ED9CF1B13
-:10A7A0009327D371942351E7F7C97EDE70BBECE7A2
-:10A7B000955A653A0E63FD757E9F4CC7A12D253ACB
-:10A7C000BF6FB4CE4EC9E738C02F78B45721DE4BE7
-:10A7D00090CF731406E5F31C7AFBAEDD57D4FC86EC
-:10A7E000363FC12BEF336F421B8AFB452966FEBD06
-:10A7F0000DA3A70BFA1D1ABEFCBDF839C42D9FDCB2
-:10A800004EF82C447B1EC17EFFA917B7FB7FEA657B
-:10A810006FBB1F19DD0FD39B3EEEFFC48FB5F373E3
-:10A82000552C88DF9FBA8CDFF4275CAFE62F19ED3B
-:10A83000350CFD08D562F0E1F777996AA573778743
-:10A84000DBF1A34EF5CAD4BEBFAA60BF9F887E9538
-:10A85000E237F9B9BC5EAECDBDF05E4FA9B305F3EA
-:10A86000E29B3F323B6B919FA3F87750F4FED6E119
-:10A870005EB9D49F863F3CFFFF0BB48FF8A158FA16
-:10A88000DEDEE73AFB090B867E5E88E6F091974FA5
-:10A890004DF2A585ECF527BD2E903DCDB57599817E
-:10A8A000F1B2B2D697C0F72B03245F7ABFAD5DFF3C
-:10A8B00057E7A79DCC7305116FDFA35D2EA47355D9
-:10A8C0002E63BFF6DF7F21DA7D17FF1E8C4BC5712B
-:10A8D000353C69F58704DD0F8BFEDAF0A2F1157EB9
-:10A8E0009F2621EC1EAC6EFE1ABE561ED91BC42339
-:10A8F0008CD7BA1E6D1D11F8C77D05BFFB7BA2AFBB
-:10A900008E7FD858A7B8A71BD9EF33093F329CFEDA
-:10A9100083695D7E6DFD6C783FBCFFA2DD5BE7FA6D
-:10A9200050BB339360AFB367821CDD7E54A5730EBA
-:10A930004CEC831BDBE859ACA09D318E505862581B
-:10A94000DE55BF9FA8CF1FE8CF9515377791E0EB75
-:10A95000CFCBE7CA5C177B5ED6AE94D986E8EC52C3
-:10A96000A9CE6E8DD1D9B5893ABB27E7C58DCCA8C4
-:10A970007D6748ECD72B0EFCFE8E916328BC5E7C75
-:10A980000788E37B793BF2DB767EB69783F0DE26A1
-:10A990001FEB9883D3CF27DD33516D1EA2F3A303A2
-:10A9A000343BE6A4B8D71C1844DFF3343BE5BFCFF3
-:10A9B000E0F75A3F2ECBC17B368CCA67BCF68FCBF3
-:10A9C000E83E4E32954F791DF47CAD378FCA27BDD6
-:10A9D0004E7AFE84B788CAC7BC2E2AEBBCE5543E2B
-:10A9E000E47553BBD5DEC904AFF27AA8CC02F706F2
-:10A9F000FFDE40968F3961C62C7B158C1786E74C9D
-:10AA00001FCC230C8F5D17DB2538BD26596A9F5A52
-:10AA1000E590EA533C79527DE7C94E09EEE82E9263
-:10AA2000DA2796BB24B883AB5C6A1FEB744B704C7F
-:10AA3000DE64A97D94C323D5EFB97E707CD365E431
-:10AA4000B9CEEB3A817858ED759FE0782A3FC1F195
-:10AA50003399CAB9BD3B107DEDC67A17DA6D7BBE5E
-:10AA60009DE1F976B395DFFBEE60B42B1DC2FAEFE2
-:10AA7000E082FEA4F9427F523CE7E7E789F3DC2756
-:10AA8000E4794F96DE0319243BA9F931C3D5B458B4
-:10AA90008CC71E34D9FFBD3FCCE381E12AC37B2B99
-:10AAA00047CA26525E04AF6CB2087AF40BE19FC627
-:10AAB000F4B652BC38FE0985E23B584905E61167F9
-:10AAC0001DCD7686FF3D28AD3CFC1BFEBDA1983D0B
-:10AAD000DB1C98171B5F3C2D312A2CFE1B1FF8B185
-:10AAE0002C85FAEB3B200AE6317EED34F38CFCD06A
-:10AAF000FAB476B39E90FDD110FFFBADC21FA775CF
-:10AB00006AFA69B57D3D3D5F9D77F97D9BB3625DD6
-:10AB10005F097FED0BE1AF9D127EF749E1777F2A58
-:10AB2000FCEEE3C2EFFE58F8DDC784DFFDA1F0D7ED
-:10AB30008E0A7FED3DE177AF147EF7EABCF5F4773E
-:10AB4000AD2E6C54987A99F3A57337C8EBAC5A279D
-:10AB5000EF1BCE7A42F6BB673E24FB6BD397CB7ECE
-:10AB6000F71D8B657FEDB61AD95F9B5225EBC75B4E
-:10AB70003CA5127CF364392F77935BDE37D4E8343D
-:10AB8000B15CD6939664D95F6B6FBD5B03A354FC35
-:10AB90003B2448CC5361F630EC7BF0D279C702BB42
-:10ABA000AB14F76B0A997B19EEE70C3504DFC7FD90
-:10ABB00026F6A14ADF816CC0370681BC5E1830766C
-:10ABC000BC23CCEEF864BC4E3D2EE7476EBD47F685
-:10ABD000832BE7C9F18CB95CF6835D69F27EEC44A6
-:10ABE0009DDD61C21E9AF9EFACCC7D793B648899FA
-:10ABF00047F795AED51E9999FEFC18B747346E9667
-:10AC0000544FF628AA0F3F273140DC53A88D1AF87D
-:10AC10000EEEDFEDF988DF2F00B407BBC1FBD733A1
-:10AC20008E6FB375247D3F6EA789DF1BD89D62733D
-:10AC30002E85AAEB2FF2FB01ACD548E7C73C786F15
-:10AC4000240BFB95CF8F15068DD2F932B3AE3E0D96
-:10AC50006DE265E7C3CFD1FDEFCD479CE3E8C3FAD2
-:10AC6000D0F988A6C8F70DDAFC381D9F6AFAA7202C
-:10AC7000C0FDA38276FDA3A9F49D31E3878CEED9B4
-:10AC80005B0C2D679EC3FB515FF23CEC3026C76D19
-:10AC9000378E95E3B6E1F6CBC76DA31C32BF8EC9E4
-:10ACA00093F5408553D60397F8354DFC1C627B7EA7
-:10ACB000CD4D7DB2B47B3A849FA89C7D317C1F939F
-:10ACC000F3CF10B1CE47CD6EBABFB23C9D119D8679
-:10ACD000D8F979C55ADCB7C1F37F1FF07B2F46E660
-:10ACE0004EEC83E5E911E2FCE25827F5D7CCE955B3
-:10ACF00004FF7ECEBAF47CA2256894BEBB61646179
-:10AD0000F485FA39C85F1D437CF47F675EE2FB0877
-:10AD10001A9FD912AEB07FE793FC40AD1C1674A900
-:10AD2000B88EFD76BE8FBA3F5813C4EF447E9FCCD9
-:10AD3000F314F7A74D30F2EFB6B86CC3812E23C4DD
-:10AD4000FA8BC43ED9162F0BA23FB7C96BA552DBB5
-:10AD5000FF5C99BC2811EDE6960C4F2A9E0BDCD2C5
-:10AD6000B1C372067A7AB3A9435AA47B048DA68133
-:10AD70006467B734A618D10F1D66B41BE97B52690E
-:10AD8000D355CCCF8EC4FB26490833DAA7DBE40DBC
-:10AD900004CBE85CA887CE11C13A4AD18F2DB34FBE
-:10ADA000A3BFF7D8F801C88503FDE30E53F1BD7DBD
-:10ADB0001DF9F96B8B9D9F6F1D91349BE855E0E465
-:10ADC000DFEF2B48B339FDD85D32FF8E4F15FCE322
-:10ADD00074E17602E45EFABECF40160623BD74F03D
-:10ADE000D37A3DA03B97B8F298383FD71479DFE685
-:10ADF00033E1576C117987E3C2AFF858F8154784EF
-:10AE00005FB15297077A5FF815FB441EE880C8E7E8
-:10AE10001D14F9BCB7845FA19DBFD6F822791573C4
-:10AE200058E2197B771AC773CA2AC55F0EEB289DB3
-:10AE3000C9E1E4C57C7FB4ABA7CE5D5280F526E7BF
-:10AE4000485847F2E4BAE1B88E94A92D744F69B21C
-:10AE5000C7EC7029783FE929BA17A5DD0BBB93A38E
-:10AE600086DD3E7304E9DF3B3DE2DCB1DA5C48FCA1
-:10AE7000F58489BE93A47D3F6EF24CF97B4AD3756D
-:10AE8000F8BD5D079B15AE47DED1E4A23FEB1F8EF8
-:10AE9000F714D136EA4E719E172F5D459097B50293
-:10AEA000EF1A5E1AAF1F1DCBD7C1F7432DA29FA388
-:10AEB000C5B7C6623F1FA4F1FE260879D0F7B75A7E
-:10AEC000EB4FDCA78916F47FB4E7E5CF9D1EF63281
-:10AED000E99CE961419FB67E4B1E34E1F7B4270738
-:10AEE0001E48477909DDAB71C5F2FB2B63FF3D13AB
-:10AEF000E8B45ADC43D0F4EACD427EF5E37DE0BD10
-:10AF0000FCFD9D0F4AA698F07BE837057EC5FF1E25
-:10AF1000B0B12639FCBCEF07383FD095F7DF743766
-:10AF2000FD1DC96006E707CB8D16077E67B06B9ADB
-:10AF30006B05E23139CD395CE447C99EFD3FEE81B6
-:10AF4000191B0080000000001F8B0800000000009B
-:10AF5000000BED7D0B7854D5B9E8DAF34E32810958
-:10AF6000049C604227E161AC04262FF260083B108C
-:10AF7000344524131221981026099068D11BAA3D4C
-:10AF8000D27B68B321218418799C6B3D50090EF85F
-:10AF900068CFB99E1AACD7D27EEA8D8AD6DEA312CC
-:10AFA0007A430B6DC5F092F66B7B2F5ED49ED3A3D4
-:10AFB0001FF7FFFFB5D6CCDE3B93800AADF634F920
-:10AFC00074B3F65E7BAD7FFD8FF53FD78E93C18F57
-:10AFD0008F314BC25E65423263CE62858D87F6A6A5
-:10AFE0009245694333185B5EDDBC98CD64EC12FE7C
-:10AFF000CC83E7CCA60D65E24BCC724981FF8799E3
-:10B00000CF361BEFE31DC37376291DFFDFCA82898C
-:10B01000703F78CB6F719C6AD6EAEF87FBDD79EAE7
-:10B02000040F8CCFEAEC67875C8C65C2EFA58CE8D7
-:10B030003CF25ACD6CF45C8EB76431F497E3339AEA
-:10B04000CFF07C6B17F339C742E323806E22BC2F0D
-:10B050009E6DB5855D385F77F05E97EA662C23D5E7
-:10B06000D2E004782AD236AF64B06E56E9F44CC30D
-:10B07000F7030BDFCECD836BE65A1F2E0FFB354354
-:10B08000BFE33776A6F96644E1DABA8D9584609E0F
-:10B09000AD697FE75D9B88FD3E6C0B613F3BABE993
-:10B0A00083F1BBE7FF2E35DD1DED7F7056E94CFFC8
-:10B0B0000418B01CFE97C2D8744728C33F63F87ABF
-:10B0C00019D3189B80F88F670CE038D3A0849D00BB
-:10B0D000574D0FE06F0C3EBFD082F71B7A9CBE6EBF
-:10B0E0000490A9EEDB609D6BF93259C3B48EFC7EEF
-:10B0F000B8AEED01BA61FFDDF6D3882F17FC227ED2
-:10B10000D35A6DA723F8C2FE4CD7C6794C6D07CE33
-:10B1100001F0DEE24F4C7EF726F8772ECBBD64E5DA
-:10B12000F447FCD688BE710D556319D2D30BC82CD9
-:10B130001ABEAE15FF6665FDE319310CCB8FDE3FFD
-:10B14000B17A4A7C08DF43BE7109BE9A453CE97377
-:10B15000CC46FA73BEAA167C05ACF912F19566D7F7
-:10B160002270C2BAD87DF628DF6518C66308EF32B0
-:10B170007D9BDE578F4D05F8570AFE5F1968E1F891
-:10B18000BA8FF3A30B6E8A71A2FC06E3044DFC4751
-:10B19000F49A28E084716E2F2BFB1F3F059C3DBE67
-:10B1A00033E336A4D3EDDFB4322BCC5705DDB05DED
-:10B1B00055A384C3D05E16B899E461997E7CB85FCC
-:10B1C0005D6D3FABA7CF3B1BA7D038ABCAF9386C3E
-:10B1D000A36E7E826F27E133C8D8168F8EDFDE4DD7
-:10B1E000675319E0F1A53DCDFBF0FD73BB9C0CF955
-:10B1F00088E1BBB391EE1CAFC7807791FFCF6F534F
-:10B20000C20700EEB37B9C04E7BB6B943043FA3378
-:10B21000CF93FD70FF017F12CD732E2EB4EF1BF084
-:10B22000BC716B825F83F5768D6BBD2708F39E4BF7
-:10B230000AD5E3388D5B6FB268D0BF2B5E7365E0D3
-:10B24000B88D56FF019862850D703A0EAEF0EFEBA7
-:10B25000E1DAD0A5A31FFC37E85788EF975858A824
-:10B26000CF3D9C7FDCD90ACD8F0877EAE05F926101
-:10B2700021788F3FE42478C764FB689C86C2383508
-:10B280006E0CD291A9B61C8027559D8C709E55409E
-:10B290003E81DFCEDCAE68881F66E374715C3F6977
-:10B2A0003FCAD33F89759E7DB06032F2F39924FE88
-:10B2B000FCB4373E8CEB3AEDE36DCDEB0E3F81B243
-:10B2C000610B652E4BE4EB50800F1A055C8D3E8BB5
-:10B2D0001A07F46D7C68F95791CE8DDE9EF5783DA6
-:10B2E00096A8252AF0FEF93D5686F8467CB872F0FD
-:10B2F0007971333E37E3E5037F06C183F81B0F788E
-:10B300007B77777B6208D6C13C2CE49818C543C391
-:10B31000CE1FDEAFCC2479D6B8BC733951986E3FBE
-:10B3200006FE5DE17368E5300E3B3C95F876858757
-:10B33000F3ADA368CB840CDECD1DE10F1FB57B7090
-:10B340007F6F14ED06E45BC0EB0A949799888F71C8
-:10B35000B3FBE17ECD6A23DF6E49DEFC6015AC7382
-:10B360004DA19D59E1F91AAFCD2037951B8C720480
-:10B37000EB36B4C767335A77D738C19F9D9C3F815E
-:10B38000D32707B3A27CD1EBB748BEF0D947C1BFE2
-:10B3900019AF5F343C9C467E057D7326CDB7AF88E0
-:10B3A000F402F00F878B5975F2D0D0E524BE67C048
-:10B3B0001E8827E04F476556945F247E1A766F22D9
-:10B3C0007E6C107CD7D803FC3346C747267CE19AB5
-:10B3D0006D729E29513EA3E731F8EC453F875BCA69
-:10B3E0005F030BD633EB70B99657A27331D0B36FAE
-:10B3F0005D8D16C0513492E31D25C56389DF053D7F
-:10B40000B8EAA11F17D22D51D2476383B89FBBC59D
-:10B4100043CF06E54419E81BABD8671DEA40B81FC7
-:10B42000EE276DB0D27DD42F36E88FD33224F8F3D7
-:10B43000054F4F87769C68BB055DAD56770AE22BBA
-:10B440009119ED9E71CCA44FFC9CAE52CFEEB4B3DB
-:10B4500014DC8FE3C4FEDEBC708A82FD762A0AD932
-:10B46000078E32231F584D7A605AB685D62FF1C009
-:10B4700084BE75B8F87AE3522C24171FA482425573
-:10B48000A2F87088F58FEBF7F5F5C3F37AAFCB1F11
-:10B49000463E621ED20FA53053BF6EDEEAC509AC30
-:10B4A0005F47E7859EF186F62DDEEB0DFDBFE29B43
-:10B4B00062787E6BE64D86E7B7F9730D6D07D3E9C9
-:10B4C00075847388E3DD21F0AC7B2EF5F200D2B1F8
-:10B4D0004AAC638723E40DC23E5CE55D4BFA7953C9
-:10B4E000C95DDE215887D3CBE5CF81F6248C1B378D
-:10B4F0006DB587EC08A19F0BE117E9D08E83A444BA
-:10B50000F9CC61C2B359FECCF6E4DA6CB07B12A080
-:10B51000F165F665B27BDCE362DA3766FB0D7484B5
-:10B5200005F9355ED06BA1D54D7A636B35D8730ABA
-:10B53000DA974BB9BD94F95F88AE41D18F6916B2E5
-:10B540005B9789F54BFBEBAD36C6FA6F007CCCE719
-:10B5500076D6B2C20BD57ABB5C5EBB453FD98E2F87
-:10B56000DCAFAA31F4694736DF371302FCF9321732
-:10B57000B3A11E92CFB764737DBC4CE8ED2520C704
-:10B58000C8B71578D5D9ADBB049FEE8AF02B1BC880
-:10B59000D1CBE9538A0DF110279AFB596857F6046D
-:10B5A000C4B3469DACEE2023F9FE08B03B9BEC18DB
-:10B5B000FA29CD5EDDFB75F447AA13FDE85B38D5AB
-:10B5C0008627BE0DF88BAF4EF05B7C517E27BF0304
-:10B5D000DAC9999CDF6B525D7E7AACA983536747C9
-:10B5E000EDB26A61DF4D60AD2407C3FC1817E7CBED
-:10B5F00091FD18BEFFC8F99C62FF67D68D7EE2BB45
-:10B6000020DFF72DF08B7C777B8D91AF968746E717
-:10B61000B31F640BFBBA8015109F85D6115F3845A8
-:10B620009F1D93815F389E883FE2257E85BD6DB763
-:10B63000B17E1BD0E908D21F8074DB5922AE734063
-:10B640007D85E4622093D9F57C100C58D5B08E8EA0
-:10B6500003452CDE03FA65C0CED27641BF31EAF253
-:10B66000451E58DF40A933B18136D5B0C16E3F02C7
-:10B67000E39E72B311ED7DB33C4C877FA01ED89A38
-:10B68000F6AE17E1D96A67B4DF3376B106E1DA2E98
-:10B69000DBDAEF6A4AB11D27DB1FEE56A1FF93F1FB
-:10B6A000BCFD61F6A5DD5A2AD18BF82A41D0234191
-:10B6B000DAEF337478053AB89273689F7199F06D38
-:10B6C000B6EBA59E30EFC3E6797F27F70341A7913C
-:10B6D000D63D0C5E60CD2F8F2E17EFA35CB8C05FF8
-:10B6E000D6CBC5F071FAC97EAF15EBB6243C9F16D8
-:10B6F0008AE14746F0BFCEFE7BBDBF00783EA4A0E6
-:10B70000DDABC2DBB319571D308E52F8DABFA3FE92
-:10B7100057766BE3108F56E8807ADECE42048F9422
-:10B72000D738E4032BE2BD9F9E83FE1D52A6E02086
-:10B73000751EE45F05FA5F42FC5CE93E59CEF5DA1E
-:10B740000AB1FF55E094305E45172B45FF3C6E4D26
-:10B75000D3816DA8E754275A1470FF4229C207CF3E
-:10B7600055275D2FA84837E06783DE79A9E44FBFEE
-:10B77000790CDEEB1CB0FA9D306E67E0C70CEDEE85
-:10B780008B33981F17DD811D01BEFA9067A1C38717
-:10B7900072D37FBC631A63A7DAD840997D38BC03A3
-:10B7A0002FC7397CB0D8909634F35918A7ABD0E99D
-:10B7B000417BEE9D8D5607D26960738386C83891B0
-:10B7C000A2F52970BFCB1662E8DF3B36B62F44FEE8
-:10B7D0003E61D7FCE3E0DAB559BB1BFD10D5B7B825
-:10B7E0003C1DE03FD0652B0FC7D89FD7E7707FE7A0
-:10B7F000AD97EEA4F51F4971F8E360DC218C6F0072
-:10B80000FD8ED877A6F971DC4DFF2D0DC73FB266CE
-:10B81000ABFF6580EBC826277A52ECC81E570D8E09
-:10B820007B646EB377AD6E7CD7F58E56BC3F30C966
-:10B83000E19842EB792FD18BEBD9983B1E79B3334A
-:10B84000C531B9099FAF6D66B85E8777A71DD7E789
-:10B85000B2B1DDB8BF7CC97BE1CD02F4977C96D94B
-:10B86000B740FFFFEA0FDD9A83FEC986530B512FC5
-:10B8700039CA92B6E0B553C029F72B49DFA19446E7
-:10B8800017EE639DAB9B781CC66B69203AA6588265
-:10B89000B81F7506D6B8A6CFE0F79BC70CC74B27D5
-:10B8A000C65D66219C6BBD6BB3B0DF876D21E83749
-:10B8B00034D759130B8FCD395C8FB9DA9B333600EF
-:10B8C000DC9D7B5C1EC44FA712DADD0078D5D2DD8B
-:10B8D000FE277CC3DFFB81784FF207D089E4707DBF
-:10B8E000CEA43D9A0DED554E47C08BCBAED39B07F2
-:10B8F0006795AECBD1ED93C3E64DE9247DD1A97018
-:10B90000B9FE414ECE1E0DC6C9F587EECB81F98E2C
-:10B910007481ACCDA2754E467B7F24F91912CF3BC2
-:10B9200037C1BA63C8FFD06A2BBB612CBF5E07D793
-:10B93000E99BAD939518F8199ADB948171AA23F0CD
-:10B94000DC02E30CED71F12BDCCF40FE1A813FF3FA
-:10B9500072B8BECF9A19ECC6F5B2197E8AF3BD99BA
-:10B960001DECA1366BF562FB0BC0BF8F7D4EF897C7
-:10B97000B149C0AFCFCCDCA3814BCA3CE30C76EB22
-:10B9800048FB67900DD9703FDE54F2A716F407BA52
-:10B99000B31C3EA72E2E28EDE825995CBF05A79D78
-:10B9A000CD839D9B55CD584BFE0DD8CB141FF4C0B5
-:10B9B0006FACF86010E3813A7DB8C4D496F6E9BF65
-:10B9C000E608FB45D8C9A9BE9DC1F9E87FBC61F571
-:10B9D00087016F69F802B42B172B61B4D73795FC38
-:10B9E00033D9F14CD8714B049CBF6C73B1B2692C44
-:10B9F000E2CFAD10F7135A4E3D8EFE7502C63F31B1
-:10BA00005EDBE2F451FC05890FF35789F549BF8EDF
-:10BA1000EC4858CF8A16110765BBB8BEB106F29143
-:10BA20001F601D06BF24C84C7EC86ABBC19FAB35D2
-:10BA3000D90F66BFA1CA6437EC40DB09ED425B9FBA
-:10BA40000BF9E9FD193947327CF458EB97F63DF4D0
-:10BA50000B150E6E19D2ED3F8342FFFCAC4D3D81BC
-:10BA6000FA684BF03117C6E1BB6D6117EA93EEF24D
-:10BA70007B1391EFBAEBACE5C86F036DE5D4EFAD86
-:10BA8000B6205D6DB95C6F54FAD58F703F91F65951
-:10BA90005579E9890E1D5D2BD5AF9CE8D0C15F516A
-:10BAA0005869684BFEAAB0B2D6BE18FB4B5EAE8C8E
-:10BAB000BBA8CC608F5A9FF28762EC17F21ACF6C4A
-:10BAC000EFEBF1382ED768F73E3063FED8D1EC1992
-:10BAD000B94E891FB97EF97C2478FF2347FA279F46
-:10BAE0000DDECC4F08AF194E09FF48FD2B70139B9C
-:10BAF00084F076ACD066201D4385B980E7AA326514
-:10BB00000BE6657E26E2953F0B24863580E7D54C13
-:10BB10001EFF8C6FE17E657C59E542DC9F3E29BDAE
-:10BB2000EF2854483EAB034A58857FDE2CFCD55F96
-:10BB30006632CA3F80BCBE9908ED5FCCB5F338329F
-:10BB40005317DF363BEAA7C6D7F1FCC40E07F3F75D
-:10BB5000E37B37BAFD9BE1FE32297F35C63C447555
-:10BB6000B5DDB0CF5498F20EF1A67D6679AEB0BBCC
-:10BB70006703DEA744F13E92FF31129F30DB853C24
-:10BB80008C8B99F1738F093F667FA7E279937C5C78
-:10BB9000A1DF73A02BEFD564B433CA14FF34A41F04
-:10BBA0003E82F7E2D583940ED921E548F87B325FD7
-:10BBB000B5636915F97B6FA13D3096F24D93315E07
-:10BBC0002DC7977E5EAE5FFD466EFEC8700C8AF78D
-:10BBD000B656C6B61306D14E98C5AFD7C175FAD2C0
-:10BBE0000569B1EC84C1226127C073B40F06F794D4
-:10BBF000F36B91D14E60E5B997C1CB265A6FDCB497
-:10BC0000BCB1B1E46E7056E8E1DC09D17642662B36
-:10BC10002BD3E1FDABD9EA3FE27A2B451C42CE079C
-:10BC2000FAFDB0DE0E33CF7728C7C3F15C3E9EF439
-:10BC300085BC5E8E7E364F2B433E7BC0AED6A0BD0C
-:10BC4000678E27FD3097DB895D196A0B3E67EE9C96
-:10BC5000CB8CBB49C6AB33B327F2F403C57D4CFE96
-:10BC6000A0F49FF6E3C3FCA85F68F370BF303EF515
-:10BC7000C2610F3C5A971B7A1EF135F74258B380C8
-:10BC8000DC39172B643F395319D93D57EC875D6177
-:10BC9000BF2E146AE0E7AD8D3C1E5F9A6DA3767CE3
-:10BCA000C87A80F605531C275E7D8FFCB02560079F
-:10BCB00088B80DD953C7853D1564ADE4EFB9ED6182
-:10BCC00017C62BCC719B9A544BFF74D0EB3585175C
-:10BCD000AA7D33E97D43DCA7C69771788278EE812F
-:10BCE000EB92208F032DC338108E5F1DEECAC03C2F
-:10BCF0009CDFE65719F7F3D0BE58DE747FD6C3BE7B
-:10BD0000AB170792F125692F4A7B06F44BD778A42D
-:10BD1000CB02C547BEBF294E648E0BC9B88C397E95
-:10BD2000648E177D9C9B4EF490F6978CFF7C946BF1
-:10BD3000B4C3AC3037F6EB2E822D15E4BBDBCED28C
-:10BD400076CEE0F11DB4978E94FEC483F68535CF90
-:10BD500014E7BCC2FDAD13F6A133B8AFBE126747FE
-:10BD60007B3BE80D513C7189629493C9797C9FF3C8
-:10BD7000E4B9F93C228FDCD9B641BEAFA1BE09A619
-:10BD80003AC2714A741C56987F45F2949CAD4ECAD3
-:10BD9000CB277F2415AFCC0FFE4816FA231ECEDF2B
-:10BDA0008513683D4C9DC0CEE8F3C602EE081C2EFC
-:10BDB000F05BB23EF9FC2988E7FCE83C97C3DB8ED8
-:10BDC00092629703E31140632BE72B4F247E9F8100
-:10BDD000719D753EBD5D518F798B5CB43B795E433F
-:10BDE000DED7C5CF6DC8BFF1A9213518635F5D955A
-:10BDF0006731E44F23F1F74C46F922398E8D7937BC
-:10BE0000911CA0AC4A78AC31E2F402DED5420E00BF
-:10BE1000E12E27B04CD34E2BE375095C4E643EC235
-:10BE200056142C4F87F5366D53286FCCB49AC368DF
-:10BE3000DFAF11CF1D22FE66CE23AD117918665DEE
-:10BE40004776DAEA878CF9B5C61E63DB6C97CB7848
-:10BE5000BF0D8044B8DB249D40C15B47C7C37E5AF9
-:10BE6000E75F291E241F2ECEFDAA17EB5A3AE342A4
-:10BE7000BB1B30AFDDEBA27808F990282FFDF00B4B
-:10BE8000EBD9B6B7F0315CCFF63C2B977B85D7B9B1
-:10BE90001C4E79D835A4E3B7ED82CF66E5F978DC9E
-:10BEA00005F72550892C3599E448D6B51C49E1762B
-:10BEB000A523C0EDC6A7A6BEBC94E75D797D4B6601
-:10BEC000205ADF520AF8C912F8C99CB6DADF0FD738
-:10BED000AC00AF4B9AF1ACD15FBD35D36857669AD1
-:10BEE000FD5553FB405EECBA96689E4DC4DD05FCE3
-:10BEF00066B9FA5E1BCFB7FC33F8AD787DAACD43A7
-:10BF0000D7EFB779E9DAD7E6233BED99B64CBA4AD1
-:10BF1000BC3F600FD6635E4BC621657CBC3F8FFB88
-:10BF20006F2CC0E1A8106B59684D4D443C1F0D703B
-:10BF3000BB70A4FDA5AADC1807BD3D68CCEF2DAFF2
-:10BF400031E6F7EE9BA9BE9407F024CCF4DA43BAAD
-:10BF50007CD41AB1FE1D0FF37C931CFFE83739DD4A
-:10BF600065FB9C58FFCF045F24BC9C62F701B12A9B
-:10BF70001FAABC19E3F6CC937345F6E02F855C2627
-:10BF80006CF6D8312E54D9BFC281E3ACD90DE3B8D9
-:10BF9000AF7C9CAD6913D38CF985AFDD81701C8DAE
-:10BFA000E4175AEFC0FCC251915FF843DEBDDF4198
-:10BFB0003F6B569E7A1AF5862B4F3D83F8F883D057
-:10BFC0009BD03EA76FC3CFEB4913478DE3FF212FD3
-:10BFD0007F781CDFBA40698D55D7F2A19017D05BEE
-:10BFE00017711EE68AC4D13EE06DAE8FE2F2397E53
-:10BFF000DA7FC95A709CF61FB3966762D8F32C5F3C
-:10C000009171B98F490F7AA51E0C5E8A359ED5595C
-:10C010003919F17DCECEEB62CCE3C5E53B247CCE75
-:10C020007C7C3F35025F5C7E7E74BC1D808301A4F6
-:10C0300093CD9348794D7637E53F251F25D47B6E08
-:10C04000C3BA05702C19EE2F09CF796ECBC338CE49
-:10C05000CFA7F89F6023D3F5B782BFCE0BF93A87FD
-:10C06000F205727446C8D729942FB89E14F2F5EBE6
-:10C07000363FB57FD95648EDE36D2AB57FDE564E83
-:10C08000D7C1B620DDFF595B0DB53BDB42743D5A8D
-:10C09000F6D8CDB8EF7CF03D85F4F148F0DCF5B88A
-:10C0A000D5203F2D7B130CF2B6F6A1F186F6EA1EE1
-:10C0B00063FEBCB1638AA1BD6A83317FBEB2D598ED
-:10C0C0003FAF6D9963986F456881499E6F35C97B15
-:10C0D00095A1BD309FDB8955E5B586F79CDE4643CB
-:10C0E000BF84A52C148BFEB7E5F3B8C9CB25C56377
-:10C0F000874689733836DCFA36DA2791B62DC4D0F4
-:10C100009E776C5842F71F88E3FB9DF9BD26C1AFAF
-:10C110009D65AB83F319DA458BAC7ABBE79E59A1D9
-:10C12000E5F93A7FD0E1E5FED8C5A9D5562FF0D183
-:10C13000D2B2F75EBD0EF82834C0C8EF51C1DCF3AF
-:10C14000821D5CD8BA6BC175D0AED6D61BFCC7E2D7
-:10C150009683AF80F8B240D9D1F664783F3F3BD4A4
-:10C1600084E397782FBC82EFCF5F9C6D43367F20AE
-:10C1700089913D7A2ECD113E10831FEE1770CBFCB6
-:10C18000D527DDA7CD79FA8C4C568A71E48CCC0B7F
-:10C19000A5A8D7A0AD62FEEBE0ACD0FD081FDC5730
-:10C1A000514F3E90B53603F79391F2468FE41BE36F
-:10C1B0000912AE1D251C9EA322BF3064CA2FE8E2DF
-:10C1C00009EDF9A3C413CE89F786BE1D3B9E704EC0
-:10C1D000E41DCEC9BCC3C35531F30EE7168A7802FD
-:10C1E0003CC738C2B93D35FCBA70F4BC835C1FEC67
-:10C1F000477BF20D790761E78BB8F9E02C752F3E8C
-:10C20000FF6AB6DA8BD73F66A9FB108F4775F94FE7
-:10C21000CF445DFEB3EC2786FCE7A19CD093F93CAC
-:10C220006FCDD0AF6AD7D850DC14CCC706EF89C524
-:10C23000C7CFE4CBF862FF67CACFEAF2A8964B37C4
-:10C24000B12BCE035C71BF425E9762B66F121023B2
-:10C25000E3A276DFD379A19F20DE3A929EF3F1FA32
-:10C260002B4B74FF40E537823D649E4F8E87FA0A60
-:10C27000F5D620480CEE33DB932ED4A19F724CD020
-:10C28000D37C3D9E2FE8C93CC948DFA7F382BF207D
-:10C29000FDF36C9F8FEADAC4FD2B85E34947F06D0F
-:10C2A000B4633B1BADBE03DC6EA7B8C50D81A470A3
-:10C2B000B72E1F7C11F7CB7C8C3F0E4D7500BDDB7C
-:10C2C00043AFB8B11EFC9DBD36AC8861DF4DD4ECE8
-:10C2D00048FF9A4CBEBFCDF786BE34348A9C033FDC
-:10C2E0008CB778090E8BA590CFCAAF9A825773FF8F
-:10C2F00081BDEF4FF0C178DFEDE5F9AF1B7A57BB99
-:10C300001A75E3DF305BEC97C83379989F54C258B5
-:10C31000A85E1378EFCD02CCAFF82C14E77867E372
-:10C3200007C79663DC51B552DCF19D8D17A97DDC02
-:10C3300067C945F2BDE3FD7FC7B0FF0DDF5C3391F8
-:10C34000FB2D1C1FAB36E63ED99D4E7931C76C984C
-:10C35000E7B87A3171CA8C68FE6C95C282B1EC98EC
-:10C36000C9B339FF2F525BEF40B816859C0CEB9C8C
-:10C370008F376C7D1BDBDF2D557C56F4EB33F93C9E
-:10C38000357B6D544F0BF85987ED37FC090CE79D51
-:10C390001F3A68C3FE1F6629EC3AE52AE255BD380C
-:10C3A00001E5F01DE4BF18F05F94F22BE468BA0DCC
-:10C3B000E43E07F17FD8AD8F534A7ED2F2D4CCD978
-:10C3C00014F70BB504C9CE5D7A19FB7433AFD3FEF5
-:10C3D000DE051BE61EE21F6F9D84F1A561708E00D5
-:10C3E0005F91A0FB1FF3791CF3865EDB9B5F417EB0
-:10C3F000DE68A73A845979C139B3F5FED655DE37E0
-:10C4000064FDDA40213F8F00E634CD03F066DA00A8
-:10C410008E3825DEAF71B9A2F89C4BEC7FD04F1D52
-:10C420000BFD56B1BE7E8CF3319BBAD38AF1C32289
-:10C430003BF9C7CB57DA13912ED17C99DFE06F9887
-:10C44000AF67303F46751A2EBA0E809F8DF912FCE9
-:10C45000014B1C1EDA84DDEF7F449D0A722FEA4AED
-:10C46000EF3F74EB2358577ACCC2DB771DBAF5FA4D
-:10C47000CDB0A433935B8FDD0EEBEADEA5F837F980
-:10C48000F0BA7F77239EAFD8A0F8CBA16B7DFF8D4C
-:10C49000F598626CEE72928D7F7ADBFD3723BF5E7A
-:10C4A000F4320FF2F3F214CECF4D832C6C81F62DC3
-:10C4B0003DBB28EF191CB451DD9ACCCB9E4CE179E1
-:10C4C000D97F68EB27B8D1AF5D389BBBD8F833CEA6
-:10C4D0000F70601CB5CC46F9D2F1CCD389FB4BBCB4
-:10C4E0009A5ECAED698F83F23C8B19FB0EC67936D2
-:10C4F00070BFB948D445CA3C163BCBFDDB16F845A6
-:10C500007D32BEDCE81FE79BFC5FA9DFCCF916E0BB
-:10C510007F0DEF77CE4E34C4EB468ADBCBEBB360B6
-:10C5200047E0FA9E1379DC4360AF633EF3C760AF28
-:10C53000E3F579B0D7F1FE8B60AFE3B51FEC75BCC6
-:10C54000BE0CF63A5E0F83BD8ED7D7C05EC7EBEB4D
-:10C5500060AFE37BFF0BEC75BCBE01F63ADE7F7685
-:10C560002EDFFF3AA739C29B01DE4E3BFB35F29529
-:10C57000562AF2C2224FB62D693AEDEFAE8F80CB2C
-:10C58000C19E1A504277213DB43417F51B48BCF0C8
-:10C590001FFF17DBDBD2C90F6136DFA12178AFE3C4
-:10C5A0001BE9FE6E68763918E9FB53479947017B12
-:10C5B000E6FCEDCA4C8CA39EB94DE9C3F6C06D0AEA
-:10C5C000D913D351F472A2FB68F1FBBE03B89FB537
-:10C5D0002732C18F4FF6AAC07FE71136E4572DA945
-:10C5E0001EFDD2794ED91E538FCF1B3728C24F1D47
-:10C5F000B74F85356C53E4FBA9BDD8BF43BE2FDAD6
-:10C600008316F9FEBABDE8271F8BCCB7BA564D8505
-:10C6100076867CBEB60EC73F15A9AB9BB712DF1F4F
-:10C62000888C3FBB17DF3F9326C7BFB396DA76D916
-:10C63000FEA795D49EC0FBCF7AE1BA47B16EE56AFA
-:10C640008FD71EE2FB1FEC63AA3E9FB3A9D84AFB1B
-:10C650009EAE1E9CE26E32CF6F49704FBB9278A99E
-:10C660002ECF4FF15298CF8E72F6F5D2A4C9A8778B
-:10C670004FA5F963FA29E5C591FA5663FC5455783C
-:10C68000BDBD8785B03E3E5EDC8FEFE175F48E4C1C
-:10C69000DBB03AFA2B8927CABA07194FAC593D7A51
-:10C6A0003CB1A6D4184F5C259E8F144F5C658A2739
-:10C6B000AED868CA43843E593CB18EF5DBD10F63D6
-:10C6C000AA427254E7E97B7522FAFB677D144F6436
-:10C6D000BED729DE2ACF4FE0FF2DB3F1BC196F9FE3
-:10C6E000BF5BF1A25FD17DB73211AF27EF5626A114
-:10C6F0007C9DBD5BF1A0BC7D589041F8CFFF8DFFC4
-:10C70000751FEEB75E8B9FA323F802A62A82AB9318
-:10C710007CDD30CEA9BB9571F8FECAFBD21DC80FD7
-:10C7200060770A7EB4EE45FEB426288676DE64C9BC
-:10C730008FE147503EE68D176D6DF95E949F5287ED
-:10C740007C7F33B5578414D1FFEB7B51BF1C9B2FEB
-:10C75000FB4FACC3E7B74F91E31D20799C9720DBDB
-:10C76000BB49FEBA22E37DFF11ECFF0BD490D4DE6F
-:10C77000B917E5BDB452E8336D268DDF5927C7FFE1
-:10C780005A2FC6AD6A2DF2FDC524FF4D4CB6C17EB1
-:10C7900087F6AFC4FE70D70F3FAEC5B8D61DF2B94D
-:10C7A000F6F123084F9D68AF2BF897BDF8FCAF7EDC
-:10C7B0007D7FE6F9CCED956C60E1757951B930EF8C
-:10C7C0002B0D45DCDF296C3988EA8BD5B5EEB7A295
-:10C7D0003C46F36A29D541E46F9795EAE7825E7695
-:10C7E00073AC7AFE4B057C9C8D05579A5F8B3DCED2
-:10C7F000DA22BECF75CD6731FDDC83B3E66F2DC87D
-:10C800008FDA0D68223AE05A02570B5C3FCE0A3DA0
-:10C8100088CF91D618879171ED25A29E7853C9775C
-:10C8200082F3F1FC5291DD2FC2E103FA7CAF4D9C03
-:10C8300073AD9DCFEBBC42DD4EF2D7AABB441D8940
-:10C84000D54DF908DBF58EFD943713F9D410D61DBC
-:10C8500067505DD7A8E73B6CA63C6A97586F69F6AE
-:10C86000FB94A76E7A83D70BCB3C76BD80AB09F5E2
-:10C8700032C0DDB85A095BE0BD46543C98D7CD6460
-:10C88000615F7A34AFBCA2CCD6EFC07361E27C06A4
-:10C8900013F670241F5EEDEBC3FA189B1AE757716D
-:10C8A0001ED61FA4BA38CC17A5B348FE59EA91CAC0
-:10C8B000E6EBEEC63CB54E6F519E3A9E0DD31BA4DF
-:10C8C0001722754D228F1EA9CF117A40E6A71BC4EF
-:10C8D000BA9645F4C0E22568E7C63F20F2D422FFAD
-:10C8E0002CF3D495A6736D8D810563289EEBB7F963
-:10C8F000A9AC26D5789E29DE44879B8AF9B94A9946
-:10C90000A73E5A60CC373F6067A477BB328C7CB7B8
-:10C91000A098E743FCC5320E19DF1F87F6377391E5
-:10C920001FD28DF19CB1DC1FA1C35CA6B88E6D43F4
-:10C930002DC51FF1B9027CA864BEF6EFA897B15DC2
-:10C940000CFD6D78BE05E9E1B6903F2AE33F68A68D
-:10C950002CCCA138D079E467DB867A1A479E677FB2
-:10C96000323EB67C5C2C9079D63E3BF6ABF5BE767B
-:10C970001CE7FBCC7120E18745EC181FAF7F995471
-:10C98000E09376899D9FF763F6A559142FF9B800B7
-:10C99000EFCFE8F3211C725FBAA3E839DAC7AE3CE7
-:10C9A0000FCEDF5BFBA3976AB5E491F3183705223E
-:10C9B000790737A6C059B2CC3BA889D88EEA595816
-:10C9C00048A141CFD6B5FC27D0B351BB3FA30E9FA2
-:10C9D0007FD1E0077EBAA590EAA778FCED8B06FF31
-:10C9E0001BF96A3DF2E1B59EE7C5FCE03A9C67ABF6
-:10C9F000A2D6B8E95C0CF32BA3E70BEFC5FEE67CEF
-:10CA0000E1E5E2187F8B5B8C1EB7E82D34E6F53F3D
-:10CA10002F718B7F04DCE13E09F27490E429C0E5BC
-:10CA2000E9AF7DFF83F51EC1F56E55FAC2F1D6ABB5
-:10CA30001F37783A2FF46B94A3E9A9AE06B4676068
-:10CA40001E1FCA5F341E0270171AE2217B5BAE41C3
-:10CA50003C04D6F97BD27F659CAE7F05747314E1EC
-:10CA60007A546E47FC15F26506ADAF8FAFEF2F30ED
-:10CA70007F4E11EE034F717E89E287DB493AFCD489
-:10CA8000B5FC65F07333C17788C3F705A0671DD186
-:10CA9000D3CFE1BD9CFFBDBE80FB17F05E13BD97F9
-:10CAA000C7F9E05E6157835FBEE03A5FD42F4FCE97
-:10CAB000569B8BB89D7B6791A1CE54BDAB6874BF6C
-:10CAC000F99EA2D1FDE6FBF0FD2F8ADFBCBF80DB23
-:10CAD000FBD1BC4DD8C53FBED142F9E57AD1B77B79
-:10CAE00043D5A21BB1AE06F08F6D27AEC7AA5B4F30
-:10CAF0009A8DFBDBA6F36AF27B07725D366BDDD89D
-:10CB00007E5F149F6F8D6975E079A86635A913CF94
-:10CB1000DD2EE8788FEA061DAAD3877EE197BCBE9A
-:10CB20004ECCCB56A97CFD8E160F9DEF93E7DDE42E
-:10CB30003994E6FE1B5F73E0B939F05F5260FC8AFE
-:10CB400032FB69FDBA9DA6732936537BC3AFD3B7B9
-:10CB50001FD6F57FAAC8544F687DAA9CBED3D1A129
-:10CB600078449D2FD565348B313695DCB108E39739
-:10CB700060C7F9100F0B76EE1AC07C9AA3C34AB9AE
-:10CB8000F33FB6F9B61F06918AEBB552BCE1830DAF
-:10CB90000AFFDEC7629EC76F12797C668A33C87847
-:10CBA000B8C463DC83BCFEC35178AA8CCE37D6AD43
-:10CBB00019C8E7BC43F1061B878CC9EF6F540ABE46
-:10CBC000AA0FBCD781EF2DF35A0CF543E678848D7C
-:10CBD00099EBE4791DA74DE5759CB64C5E271FCFF8
-:10CBE00054FA5E47FC962AA267A5CAEB38C14812E0
-:10CBF000DFDDE274A908ACA73A1F731CC159688C29
-:10CC00004398F9D24C8F93267A3C61E3E7933A0735
-:10CC1000AD7E0D6E773EB4BA0BE3E7DA43168A6356
-:10CC20009C95F5210024C6F397B3087EC95EEE6C8F
-:10CC3000E5F502922ECB77F2BA11EA6588DBA732CE
-:10CC4000FD773C968BB8C21DAC8FCE3BAC6443766F
-:10CC5000948355184AB7623CC647D726A66D6184AF
-:10CC6000BF50573ACCF744EB783FC6B5FB27D99372
-:10CC7000DECDE47E442CFB359AAFB5B1777571FEFD
-:10CC8000BFC5B53E695CCBAAD1F952AF233C4DB9C3
-:10CC90007C5CEB88C84BC8B8D6D99DE27B1BE2BC54
-:10CCA000C580BD75F24E37F6F3919E19B377F92220
-:10CCB000E48323BD3FF188F3AF1B278EFE5D88829E
-:10CCC000E218F5A43F2F60345E67FA109DA33E6919
-:10CCD00037D6E5CAEBED0159BF19528B75F631F322
-:10CCE00044EA38E717D346C0CF6BCB38D3BADCD091
-:10CCF0002D787FEE05C10F8B95B002EBAD702BAF99
-:10CD00002ABEE8FCCC5C47FFB77C18C11D87F80140
-:10CD10003C0EC4F1BADA817456F34C0CFADC389745
-:10CD2000EBD181ECD8F493CFC13EB9BF7802F79F25
-:10CD3000C6F0B8C2EF1DA3C715BE551C23AE20E92F
-:10CD40007B709EAA71BAF3B62727D489FDDB4341D5
-:10CD5000AAD739DF63F56D42FCF7B7BE5508ED255C
-:10CD6000DFB27A301F7EADF37C930AD289AF2E9763
-:10CD7000E7FB50E0F764A4AEFB5B944FEF8EF867DF
-:10CD8000DC7EAC1DA76BC3965C3CC8FBBF585CBC8B
-:10CD90000FCFD98F646FDE1758D58BFE9CB437A1A7
-:10CDA000BD12DBF27D9084C9A5A0349B5A643EB1CC
-:10CDB00082F2F5D1F956EC43FBF8ACDD38BEB4573E
-:10CDC000078ACBF7A1BD1A8CCC5FBE0FEDD953A655
-:10CDD000FEF47D4A18EFD7C565D4BF91C9F1CBEAFF
-:10CDE000B17F24AEC8D6933F7ACC21DBF7D4A33DE4
-:10CDF000BE3D9D8F371858DFAB7D0EE1B9D6E37F7E
-:10CE0000D2FE23D9FD27EDBC7E50033BED89742C67
-:10CE1000A3ECB372E1531D78C6AE5855683FFA9340
-:10CE2000888307DD16E1E76CEC45BFA7B644F2E95D
-:10CE3000E354073212DFAD7FFE478F68FA756A3F11
-:10CE4000AA35C0ADB5529D8884FB04F68775D4DE43
-:10CE500073A717E1AC95F10DD6D98BEBEB4C92EFA4
-:10CE6000DDB40FDB23CDBBE6F99DBD88EFDAC83C0E
-:10CE7000DFA6F76BE3E578BDD48EE2F300C54BA2E5
-:10CE800070B518E07A2D70A017E10A7AC25B707F46
-:10CE9000087A19EDC777B46CA2FAEE881C693BD208
-:10CEA0004A510EBD9136C757448EEE2739BADA7013
-:10CEB000C17E9A3E07F7BF4CEE275EFD75C33E89E3
-:10CEC000EBEEE17A48F2519D478E03F8077DD2E4FC
-:10CED00093EDAFD5B7B8AFC6BCDCDF0DFE9E917D3C
-:10CEE0002BE58969AB4DF27365E3B5BBBF4675149D
-:10CEF000CDA0D763D563DF5B10D14FB7123E0BA532
-:10CF0000FFCCA4DD5181F72376872F627754CE8939
-:10CF1000617774629DD52CAAE722BDA9C213AFAE7A
-:10CF20000E68C65C9E076C177592799BD95ABDBF77
-:10CF3000FDFD79DC9F7F6A1E874B7EDFF6CC3A854C
-:10CF4000EAC4DA7BA68CC1F36EA7537DDB51AF0D2B
-:10CF5000A45BE83B0527C5F73507BEE14CBB0FEEE8
-:10CF60001F4F73F9515F1D4FDA49DF513BEDB70A8F
-:10CF7000FE3CF40EEEF3BAB8A2867A45C60DEF9EDB
-:10CF8000B3F55194A3133EDE2E9CF7E377509E59E0
-:10CF9000A6F97C6780EC18C7CDB08DE0BBE2FB9CA6
-:10CFA000C5E279E5B61F7CBB0AC710F68BD49FE6B5
-:10CFB000F39EF863D7DB5F5D566E7F79793F2F1B59
-:10CFC000DA74C982E3F2B66B84EFC2D6C8F3CB261B
-:10CFD0007BAAD2743E9989EFA04A7BBC38B9D18F25
-:10CFE0007E5CF13AA37D74BAEB959E42F46BFD56DC
-:10CFF0000F6E93B7661A9F4B3B6C51D763E48F82D9
-:10D000005D689847D6DFDECAFA3AE85CB8EFF5C348
-:10D01000D68951BFA5DD5349764A7326B4603DC712
-:10D02000FEBE34311FED831E2B7E1196D7DEEBD66C
-:10D0300001FDEC9664DAA7FD8AA2AF0BDAF228CAEA
-:10D0400045B42E88B7A3F1F8BF7FD45047C7BEB60A
-:10D05000CA10E7D46A1FA53A3E1917D3AAE9F919ED
-:10D060009B8883694D8FE27E16899369BFEA35C438
-:10D07000C9B4203D0F46F6BF5DFBB0BDCC23E0D167
-:10D080004EF622BFB5AB5C9FBC34C77D52B37DF278
-:10D09000FE209FFF730EC6B7827CBF333F2F1E0C4E
-:10D0A000B78F11761DD68B9BE57C5C80D7DF95A969
-:10D0B000D91D137C3C7EE504FAA82BAD2B316E10F4
-:10D0C000AD5729A2EFA4358D505FB224C0E5F7E833
-:10D0D0001CB7C12F37D7A934893A9591C6B9B38403
-:10D0E000E7D907144F35D7CB56867AB974D714379A
-:10D0F000E6A664BF9B4BF83EF071967A12D76F8E0E
-:10D10000A79DC5781AC9198F7B2C15BC63DBC9BFD5
-:10D11000572FBF677226C9EDDF0CF797F688784561
-:10D12000F9678B9FBD37C7784E7FA4FA87D212BEAE
-:10D130009F1589F57ED6FA8727E35515F135047DCD
-:10D14000313E38AC1E42D439C83A88B1810C5EB742
-:10D15000C1783D44BBD64AF8BBEAE75CC4FE0F7C0D
-:10D160009A1C403EADE17A44F2D94FE7F838FFFD12
-:10D17000C64FFC27F90EFA4F0AA01EA9E6FD8B7FC9
-:10D18000C3BF7B21ED8B718133BD9BA6921EF2053F
-:10D19000F4FEAF3B722E322310430F1D5DA04E0DE7
-:10D1A000E8FC23783F33901FF3FD2F13BCA6F7B3A1
-:10D1B0006606B3E8FDC8794E7566E06F7510A03D50
-:10D1C000CC75277CBF30D79D487BF0CE92DFAFC4B3
-:10D1D000BA934BF3D5651CCF1CBF11BB7288DB39EA
-:10D1E000517B3287F6C36B602F36133D453DCD35FD
-:10D1F00018FF5EFDF8D27E82FB7FA7BFFF79F3DFC9
-:10D2000000BE6E824FE44D3EC5FBFF40EF8B7CCDF0
-:10D210009F01DE30F191B0FB3F87F87CF6730EDFA3
-:10D22000EB44AFC59CDE657398DCB7FF35361F5CF9
-:10D2300031FFFF6F7A5FE4CD75E3FE5C3FDF48FEB0
-:10D2400039F4FB15E16DF130F93919D0E5E347798F
-:10D25000FF8C7E7EDDFBEFEAF9F32AC8F9053D7D00
-:10D26000AFC13EF2118D3F958FFFBBE2C83A2EE968
-:10D27000EFFF2D4E76593E9F3617F1D5CAF9E90AD0
-:10D28000ECEB9BE6F2FA96108FCF6A927F678AFBEF
-:10D2900043789E74F91C26BE8F12CCC6FB2AE3FE8F
-:10D2A0006DC41FD17AF719FD1118688641CFEFD3ED
-:10D2B000FB1BE5739FD88774B72EE0FDE7BE306E89
-:10D2C00015E2DFDC067B64DE5C635DA68AEDCB8D58
-:10D2D0008BF97F7ACF94FFD73D5F44CFA3F50B64E2
-:10D2E000BF82DDE672028D7F51674D6E8476B5F0A8
-:10D2F000DBC1FE8879AEBB3A1AE7AE9EABABC7186E
-:10D300000C5AE97C60C44E61EE4711FF113B4AFBA9
-:10D31000FE3EE3B98D8314E72A11F46D7EE1D97ADC
-:10D3200001E72AC4374B16EBB87CFF35D4DFCBFBC3
-:10D33000C7787E273D4FE57032F7EB67ADBA7C18B2
-:10D340004A9A05F3BCF82F1FC06FBF7D6E32D82BF1
-:10D350002F77293E2BB41BF74A7E7A81E44157F799
-:10D3600041F2B742F0FBD6170ED7233FAF785FC22A
-:10D37000EBE4EB8FD4311DA6F59F10F188092F4205
-:10D380007FCEBFDF24F87C1CBE6B30FE36A213E3D9
-:10D39000F8A9619A7DE2287516BB04FDE1BD9D04E4
-:10D3A000978BC3551352C85E0FAE06890638EA073D
-:10D3B00059CC38D3EEB90EB98FEDA679DDC28FF511
-:10D3C000C73E2FBB2FCA4FFBA8BF87CFE702FD8FF9
-:10D3D000ED40E8E802FC0E448DF8DE784D998DBEF4
-:10D3E000B750537861A98883507E53E6C14B1F9C88
-:10D3F0004AF9CDF8B238EE2FBA8C7FC722D8E4A410
-:10D40000EFC9C9EFD6CABA8C4A66FCBE5C8CFC96E2
-:10D4100021DE22E32291EFC95953C9BF753C2AFE90
-:10D42000FE93E9FB71F11B18C5B79C1DFC1CB839B4
-:10D430004FD5B0B1F5AD22ACFBB0D9292F6BCE677B
-:10D440009AFF1EC63C1753C7E4503DCA6B73F3A343
-:10D450007528E7F74E71A31C9AFDE7F323F9CF7BFC
-:10D460008DFEF380F49FD5ABE33F9F986BF49F1F35
-:10D47000CF0DFE8AF8CAA6D2FEF67249F1528C236D
-:10D480005C147514A71E4A5E82F128AD879F573839
-:10D490002DF2FC32DF7FAA88B93D78DDE2247C9E44
-:10D4A0005A9314C62D784C47F362FCAEA0F4A31136
-:10D4B000F318FFAA10EB34FBDBF18540CF5924664B
-:10D4C000E4679FF278282F50D125BE2F21EA05A4CA
-:10D4D0009F5D21CEF13795F173D518B1437E90DF72
-:10D4E0000FAC107EB8F4C7FB7FCA147D1DC052E696
-:10D4F00027FEAD06C6C0EB32F13DC51A0FDB8240F8
-:10D50000FD312BC44A102F7B399FB0ED36FA3B57C3
-:10D51000A77A76D1BE3AD2390677893CC7A0517E28
-:10D52000F61AF8F9490497D83FAE60BFB98EFADB16
-:10D53000B81C6FC3F3BFF9D1EF4AC873F3DB93781C
-:10D540001C654609DF6FCC57F9DD884FAA3F407F45
-:10D55000DE5082EF47FDF94C84E70AF4E74C825B2A
-:10D560007CB76232E681F8FAB34B783ED73786272C
-:10D5700071BB1CA3D70114968C92CF6597AF235033
-:10D5800063BDFFA1B0B3D7E5861696F07C3FF1AD41
-:10D5900039DF2FFB1DC3F8548CFD76838853950229
-:10D5A0008B5A72869FE7FF459B7A126DBC636DE5CF
-:10D5B000743D6ED312B17EEB2D719E1F0C2DAA67A8
-:10D5C00092755172DC9ABAD2936775FB59C5C2C77E
-:10D5D000A9CEAC3DF3C0EB0AC0795AD47B0D24FA36
-:10D5E000689FD38EF2EF4B2DABFECAC9B3BAFDC311
-:10D5F0000C2FD6456920EAEB4BF877CB5E2975F600
-:10D60000CFCBC3EF3571395CDD738ACEC3D46F687D
-:10D6100060A12CAA9BB2217DDF9EC3BFBF50516881
-:10D62000659A0EAEE46CF5AE121EF759477C12AD4A
-:10D630000BBC1BDBA576750CFEFD49199F94F98286
-:10D640009B5FFC3F94771B4862347FD0CBC29877B6
-:10D650005FA0AE770C61DEC5EBA3F8C8DA121FCD70
-:10D66000DBD8B59FE0890FBC47F0806DDD8FF58377
-:10D67000667C4BB9E814F8D6AD9BF03D92FC562C75
-:10D68000B425227EDF427A41BF07C53E70C476C111
-:10D69000ED8941F7C87B85A5067C3BBDE506BAB59B
-:10D6A000ABF78EC1F5483A378A67E7BBAC6F221DEE
-:10D6B000DF073A32A263EC3A88A348AF1B806F4C75
-:10D6C000F4AAEFE0DFBDAEEF28A5EFC5D5177EC504
-:10D6D00091427900A50FCF4B36953530B4A71D6A1E
-:10D6E000127DDF4ED26F6919D04F072FC8E3632434
-:10D6F000A7C2EEFC14F1F5FF5EA2B383AF75FC1F69
-:10D70000E6FB51490CBBFCCF957F18FE3D1FBEEFD9
-:10D710009E12FC62BECA7D77C4FA662DB8AAE55394
-:10D72000C021E506E5769382F5938A1DF92C88F2EF
-:10D730008BE7D70A7FBB05F3A1CD5ED6877BE13EA1
-:10D740009423C09BA33CDD81F2D3B8379DF802FD42
-:10D750007FC2A7D8A7DFC47D5AF8FF74BF85F3C581
-:10D760005F3AEF03F0FC1BC15327CE177CCEF25279
-:10D77000C9E541F73CC05B50DD4FFAE5A742DEE06A
-:10D78000278D7FB7E993E5418B555E3726F3A131AD
-:10D79000F29F3EE553E43FCD79D591F2A131F29F5E
-:10D7A000067B7DA4FC2733E549CDF9CF455D5328A1
-:10D7B000FFBC28D342DFA99676BFCC7BBED1F50350
-:10D7C0001B7D176986C292D287E747BF2DF431438C
-:10D7D000AB4EB7FEE369FCFBD7DD292EFABBABF8F5
-:10D7E00083F558129FA01F5C4E98B76321AFCBAC56
-:10D7F0004C7FC68C5787F04BAE08AF32BFEEE85275
-:10D80000C29B9135BC2C52FFE7D0D1D991F91CD1E4
-:10D8100091D9FADDF83DEE46FF78AA2733D3A1B8B7
-:10D820008BFF5DCA62CF6CFABB9492FEC5DEE175D8
-:10D830008336095F8CBAC13F3B3D7D9B5D19A3D008
-:10D8400053E6B147A2E3ACBCE0BDF32644BFDF24FE
-:10D85000EF1F4FE3F83D7323137FFFD4484FC0BF42
-:10D860004AE7FA33D9FECDCA707E2816F598C599D5
-:10D87000DA7AAA838F5FECC5BC5904BFA98708BFB9
-:10D88000EDADBEEDE81F1D2DB353BD4A0C7EA0BF0C
-:10D890006F7B397E1846F79E4F47BFDAA22716A442
-:10D8A000C7E08F4F4DD7CBD0D3617DAAABD0174BFC
-:10D8B0004E5FE92139F55B3D4857494F49DFE1F4B7
-:10D8C000E4FB9DA4F7DBF9EABFE07E18A5B3FA34C8
-:10D8D000D2392ABF9AA19EC5FCDD9B1F8A3A161831
-:10D8E000E7391CE710FA58143F540FE138555F8AA6
-:10D8F000FDF74E9E29E5FE4E1DEB7B7522FA7D67F6
-:10D9000099A8D7F4BFEEC338CD862931EB358F3DCA
-:10D91000A0F0BFD3E365FB2D627FB5E8FCDD535873
-:10D92000B709FEED09ACDB84EB5BF3D2F9F7E5B1A7
-:10D930007E732CD8E3A2BEB30EC7C679C09EC5BC09
-:10D940003CB385189E4B1FC0EFB3CCC2EFB36C2223
-:10D95000BD1BADC3F890F45534EEC9DB9501D97603
-:10D9600087A9EE46E63F993764CC7FCE0C1BF41DA9
-:10D970002B0C19F39FBC4E47EAB7CDEAFC10C6B595
-:10D98000A371C5721AFF649DECBF235C3A4397FFF5
-:10D99000D4AAC2AA5B9FDFBC2DACCF6F82BEA4B657
-:10D9A0008C433FD1FF6008EDFAAC99A10B48377961
-:10D9B0006E1E14908A7F87CEEAF61C403F1CFC0343
-:10D9C000A6E68F6C575FEBEBFF07133449A100808D
-:10D9D000000000001F8B080000000000000BE53C69
-:10D9E0000D705467B5DFDD7BF727C9866C42A04B0D
-:10D9F00009ED4DF879692561F909044AE06E76135D
-:10DA0000B62D9405429B0AC50B64101D5E0DB5280A
-:10DA10003EEBCB42421A420BC1E1F937AFBE2D05B6
-:10DA2000677CD631386AA1485DA0459496A63699A0
-:10DA3000521FD280790CD5AAB496577554DE39E7B7
-:10DA4000FBBEDD7B6F3685023A75DC4EE7E6BBF741
-:10DA50007CE73BE77CE7FF7E9745B315C66631F868
-:10DA6000F99386C6585F2DFC79338E83A651C2D8B0
-:10DA7000D2B1725C9934263236374F8EAB4D633655
-:10DA8000631D1E26E6B30403F8D7989BC69B8D5AE8
-:10DA900033318EB1F02255C0C708FF99E5127E4799
-:10DAA000320CF896B9C438B12469F819FB2893E30D
-:10DAB00005345E9E1EC769FC00E3EBEF4D3D6E260C
-:10DAC00060FE77A6C56F3646C0BD68B71EAFF8C703
-:10DAD000A3FF9C22E9196BE2F30F3BBD20EF9851A5
-:10DAE00085E8B9BCFF01E85D41FAB19FD3FB21A4F1
-:10DAF000EF2192E7D39CBE0F013D6D444F37D09389
-:10DB0000FFB75FEFC52A6327EECFDF808F2768DF7F
-:10DB100027723EAE02FE29E23BC4F7C1F9FCE67073
-:10DB200080317C3E8DE37BDD2DF428D164A2DE9F25
-:10DB3000755BF60DC6B37AE57A1BF4B066A57F0374
-:10DB4000D9C9B2223EFFD7A9CF9A8992CC187E06B6
-:10DB5000EEBB9CFF1B7C6E9BFF199ADFE94EC3D383
-:10DB60007A1EF15C39BC89E8CDF09B20F81E077C59
-:10DB7000A3E0AFE07047326191074B3C4AF249FBAA
-:10DB8000A5C4E3E497FA3C72BC8DEC667B29C73FE1
-:10DB9000EAF0E349A41FE47782E43D8ECBEF9F5D7A
-:10DBA0001EBF3584BE947379483DFCCE34E377A81C
-:10DBB000671F367A61FFD4F0888CFEFF1DD62BA438
-:10DBC000F5843D7DD0F9697B14719FCD4FCB77747F
-:10DBD00018EE8FAAD5E979F5DA7D919BE0CFE5CDF6
-:10DBE0004FAA26E2051856CC58BC9F2537C39A7712
-:10DBF000B0A4CA2086C543260B4CB4D835FB32D11D
-:10DC0000E1F1BBC4F8BFC8FF2D9B23F5FA5412F312
-:10DC10008B0CDDFE95B84F69BAD91336BA671FF67B
-:10DC20003F29F80E852D7672A3F1076B412E967C65
-:10DC3000283D16F259F6E057C7A01C969549BCDF5F
-:10DC400048229ED70B25DE7DB4EEB2F43ACFF171B7
-:10DC5000AE84FF29C167E8EA336D74255EA5BC4B2D
-:10DC6000D2F5CDC37DB45F9E4072CBC869706D5252
-:10DC70004209D88F8FAEDDA49A56BFC0BAF530C422
-:10DC8000B7FB597A4C7A95F103DDB4EE8DA66B7D26
-:10DC900058C847D8699ACE7E164A302B7DFBF9FECC
-:10DCA000DCE0F52D7EE121D4DB1B2FF794FB268BE6
-:10DCB000DCA51D2C0FA4EDDB603E90BB2EF1BC60FB
-:10DCC000AEF55FFFBAA0E78F5BFDC9F5F3D153470F
-:10DCD0007CBCC5F725E37F5E36EDFEE7AAE97B3223
-:10DCE0006C89E71F74FE7F87ED7666F13FDF42BEE9
-:10DCF0005BFD451ED4EF9541662481BECBF89B9B0E
-:10DD0000B98EAA55C83FA5EDB39ACF5FB2833577D8
-:10DD10004F1C0C7F53AD8BE05A9F656BBB015FD8E6
-:10DD200073B1296E814B85F9F3436185AEC0DF2164
-:10DD300092FF464EDF89B04EEB8599C60CB0A9869E
-:10DD400025634A500F5A7FCEF1B160882DCECFE0C7
-:10DD5000BB20F0C9750E2FCA6FB4F2F113B1CE8992
-:10DD600030E703E33FC9F311CE875AB02E88F8D5C8
-:10DD70003C595FFE9AE4DAEE16E3C43B14D7FAD2BC
-:10DD80007EE877A4EF4BBD522FDF23FB97F9FA3BD8
-:10DD9000E13F2513B3917EC65C53ACF37E4B7EF01E
-:10DDA0004AF3FA65BC6813FB9548EFD759A4FB4AC0
-:10DDB000F3D588D24C72F2B19402F143F50776772D
-:10DDC000022B1595C69B38FFA5C9C6AFAE060FC876
-:10DDD000E922EDCBC3F67AC4F2FCDDB0AD1EB8B8D3
-:10DDE0002E8E7860652FECDB6BCBD5E25520B7BF6C
-:10DDF000E2FE54517D10CBA65F7FCDECCB5FC3B666
-:10DE00007C3E925F0576C446B942E3F5C1F3FCB5AA
-:10DE10008AD433B14FDA93C8477BDADEF8787B21B6
-:10DE20007F9E73C4BD52D8535E2DAEF33D215F1665
-:10DE300028C6F5D8C4E329753AC45796FE192E189A
-:10DE4000AFC2BF60FDBEC85937EAC18A0EC5486679
-:10DE5000D1FB4176D221F03F96DEBF51B52308AF0A
-:10DE6000C9A68BF801BFBE8F6F22BC8D4D0AD99F0A
-:10DE7000D35EC6D672F98DAD4DCB692CD16F70BC17
-:10DE8000BE69F1F188174099774A06FF0A4177D8B1
-:10DE90001D3F7413E8417B9BA2A33F5AB9716547AC
-:10DEA000298C99E60E8D87CB049414CC6B0F96F9D0
-:10DEB000D10FBC24D6437C1ED8478C25C122826357
-:10DEC0001A5CA7C7D61FC5E97FA930AB70DDEAF899
-:10DED000CE08B235AB71DF51BCDE036E1AF3944D40
-:10DEE00073BE16AF85FDEB99E90EA1AA4176D63334
-:10DEF0000EE86A107469C6BC37D930A8A23C2C94CD
-:10DF00009A8671DD1FDA0CF71B9A3E3E9F55024C34
-:10DF1000DC3DD0EF43664C76B90CF16A03FDE55C5D
-:10DF20006697C1C72DDAE8CE8C91367CEECB3C5F8C
-:10DF3000722BF74FCB6A419E16BDFB91E0EF474233
-:10DF40009E3B80869E8984209FA1DDB0B52E94DF04
-:10DF50004A81ABA76DC95DB7017D97CA5908C75EF5
-:10DF6000E44FCDF077768CC6F963867FC148585769
-:10DF7000ECEBC916F075FF0268DB804FE047539762
-:10DF800017A42C7A7C7298C94298B79527B630D0DE
-:10DF90009388B9D3DD0F74DCDAF4F65ACCFB5698CB
-:10DFA0005E7D1E9078FFDA401DE6B54B4C2197F957
-:10DFB000EE73C8B70FFE43B978526FBEE04139CF58
-:10DFC00056D828C0BF30CA9F4BB9789976CE2A1749
-:10DFD000CD31DE78BA74FBF316F84FD5E6179FFF04
-:10DFE00008FC31954DBD0C7C82035980F45CEA50ED
-:10DFF000026A2981B918F0E9F1F17DDCDBB1FE2577
-:10E00000B4D315412DE4D2913E46F26B146BBCD7CC
-:10E01000A26F7F1E72D5C8C69D5DA877F7F7AACC00
-:10E020000B70EDCBF72226FCF9109F26F4C295F772
-:10E030009F3D1AC069FFA6325C4FCA11E41D980EBD
-:10E04000F7CFF5C17C00BDBF1AE404EBDE63787541
-:10E050001DE07267BFDD8672CA65CDA9E130BE37AB
-:10E06000E862295F862FE03B21E4E2BAACD05ABADD
-:10E0700026D775D99E935C723F17610C7D77C2E8F5
-:10E080001907708BA4DE76F0FD5C64F0FD90FBCA8E
-:10E09000A25C5FE5BEE43AF4D55BEDCEE867167DA1
-:10E0A00075EE43D2B10F7B356E27677B55CA8FCE95
-:10E0B000EE2ABEA71AE491D8E5223B863A6DBF52FC
-:10E0C000007FA414A681FCEF13F4D20FE0F63617FC
-:10E0D000263B4B33FB715FF9B13F2A958C438DCCC6
-:10E0E000F82386452C8CEF15A3FBBE9228423BFDFE
-:10E0F00028EB76A35D3FC0FADDA8FF1FC352504551
-:10E10000FF18F2E0FD465FC08372DCBBEB483EFACD
-:10E1100091D4CDEEC2F3E5642ACCEA279D5794C48E
-:10E1200079C93700A7A4FFF49941F2CB7EB8929F3A
-:10E1300036188E0BEBA23E334B1C3936D5FC31FA28
-:10E140002339D602CD0CE9D83335FE13EE77F9FC2E
-:10E15000F195C64FD17FEE9F629CC0FBDFC07C0F64
-:10E16000E2C3C5DA47A82EF94B857112EF3BFDD803
-:10E1700039F4637A461F163BF441FAB153E8C7E01D
-:10E18000D162B457901B8B5D9F1F3B2BF5E07676D9
-:10E190003BCA07F8F925F97F0DF801B99CC17D9FAD
-:10E1A000C4B0FB966245C4A61E00FA14411FDE5798
-:10E1B000C0BF2B1B7FFC4765181FCF023845EC2BD7
-:10E1C0009691751837BE1EF2F9C6A2BF304F21DFF7
-:10E1D0004EB9406076535D163C760AF5C695F7C396
-:10E1E0003166963898DED775EEB7D27CA11D4126F0
-:10E1F0008F7C28CC745D467E0240C4A8F7D38B0484
-:10E20000E941FB0285F86B2F658DE8CFDBF0D14C3F
-:10E21000D0F7054A37EAFBB722453C5F1AC7F3C27D
-:10E22000CEC26430C4FB2C04CFCA436C494506EF10
-:10E23000B7222AC14F9A66E461E082BC8FF2259929
-:10E24000AF4AB84084E795C3233CCFA8A88C1751A8
-:10E25000A02B0E91DC218F1A4E637F2AE91A29FA2E
-:10E2600022FCA7BB2C7944DFE824C33C24D7C89EFA
-:10E2700037DC1249C7F55B22C8C72E19D78D5B1151
-:10E28000FFDCE18106F4731EA07B7769265EFF60E8
-:10E29000C1175458967D24524AF45537ED6C1D0928
-:10E2A000FB1D0E8FF563DA94AA4906318FE81C0531
-:10E2B00072C8622F1B233C0E4EBB45C00979C9B8FA
-:10E2C000EF83F4DB0DEB6099EFC23CA084E7010F14
-:10E2D00044CA689ECC07003EE101B8F00493F0B454
-:10E2E0008FCFBEDE03429E99781B2A407FCD5833E4
-:10E2F000C58BB88827AFB51867064029FB5A6274EA
-:10E3000005FFDF130507774A4BE487B2C86F61DD6D
-:10E310001E1FC6EDD6F255BE7ECCFF8C08E16D5CAB
-:10E320001E3E3360F1B79D256C0CE601F736DC79B3
-:10E3300066C0626F3DF99C5E8C33096F06EF52D464
-:10E3400013A0F768D89B9A0B02CD0DB2A457A1ABCE
-:10E350005B473B88E8F43C6EAC6426D6E3D5673572
-:10E36000EA7F15B234FC26D89A483973235DF160F0
-:10E3700092E1BC5C18237C7CF6DB04BFB05A6509D3
-:10E380000B9DE07F56901E38F2A51DA86080B77DDA
-:10E39000A692DC0C781B826B28FE6C9A934BF7617B
-:10E3A000DDA417EEDF33BE89E296CCAFDAA3D1103D
-:10E3B000C5A7EBCCA78E4D8D3F84FAE809A6FDEAF0
-:10E3C000C34467C6AF6E8870BFFA19BC4AFFB1FB81
-:10E3D000E86BE43FA00621397782BCBF9B651F37FD
-:10E3E000093BE82CE47AE87CFE55A1AF7FA988B709
-:10E3F000221D06C4B4E0946BCF37DB65BE29E478F8
-:10E40000BDF201797C2962F1CB208F2F679303FC49
-:10E41000DAD05FA8D25B3CAD68A8FF3962F824333C
-:10E420009338CFC79A0948F5C719C6BBC178520CB3
-:10E43000E72D13FC7D507FFC1D486FB85F339E8E27
-:10E44000505DC8F559FA65B04B1E7FAFD16FF7BA72
-:10E45000C09F023D1D786B66E6F921B1CFCF55997B
-:10E4600087701F2794F856A2FC1F558CA05FC5BE6D
-:10E47000A7D9887E84E9536CF306AFB389F0F4958D
-:10E48000996BD1AE99BEF80AF09BC5BA824F9DF345
-:10E4900001EB7E25776C667C25BE7E10317E86F290
-:10E4A0006A35E3BF40BB7BB9DCA52714BA921D7661
-:10E4B00056E724151807A698AFF37D043F0AA83B3A
-:10E4C000CBDFA1BC68E17C85F2B4853EA8E0B2F860
-:10E4D000C9F322DE2CD4F97376DA085AFB1D855174
-:10E4E00097BDEE059530ACFD8BA86B15F6E5653C48
-:10E4F000C3BE49367BBB28EC49F5BE5D827EF5651F
-:10E500007776BFFD4EC443704A54F42544FC5BEA61
-:10E51000E5F5157B11E8B3C4D7E7AA6AFF8FE2627D
-:10E520008225144B5CEC1B7D91FC1D3DB1DC5F280A
-:10E53000FA4EACD78E47F2591465B675415F5D51FE
-:10E54000DEC750A396E74B55C6FB1E3D7679013DCD
-:10E55000BE28AFBB9B94E959E919C7A667A1E79408
-:10E560009D9EA228DF97E7AA8C22C407F17938D2B2
-:10E57000D1510BFA9745BEFB26D5DE84701A4B7439
-:10E580009495BE6FDE7A0BE291634BDEAA47EDFEF7
-:10E59000B534CAFD6B5994FC4AF6752B85DCAED7B1
-:10E5A0003F5CABDD6F73D8BBBC76F67F2FAF12E854
-:10E5B000F07A139F267B9D7875F6FDB15B7A462332
-:10E5C0009F87847EA26FC77CC3D0793EF26094EBB4
-:10E5D00071784292E09E1D22FF48C38160B02F37C0
-:10E5E000541E32F31AF390CED97D7988A7F5DDDD7C
-:10E5F0007958C73F3B509B350F3954D245743AF395
-:10E60000900343E4216BA23C5F3DFABF1ECA2B6A14
-:10E610002EF0385F73A14BD5413FD745B93F9B39A9
-:10E62000D0A39AA027359887009E03220F41F84D6A
-:10E63000A0BA9177BB54A46BE6851E9A570363CCAE
-:10E6400043660E918700152AEADDFE9ACE5771DFE8
-:10E650009CFCBE58696E885AEAADEAFE1E7A4F22CB
-:10E66000E775966FCE33699FED7A736C2AA73733BF
-:10E670008FEBBB136E28FDAA53FDE5D81FD8CA72D5
-:10E68000432887F7728655B2025ED7605EBC15419B
-:10E6900081EFADA7F39209ACAB7DFCF9677387ED11
-:10E6A000C6ABF43F3E6117EFE5DC92147590510064
-:10E6B000F33FAB1AA9B9100FB68EFB6280F3B39E7D
-:10E6C000EC6883904DED4E8DEAE93B827C1F64FE41
-:10E6D000F5D25285F24340337F01C0CF10F83DD3CD
-:10E6E000787D58AFFA096E5B39CF23EF485CA4FE02
-:10E6F000C5CC7E8FAEC37846FF1A5E2FAA3F3C9EE4
-:10E7000087F9FE4734A6C2FDA56DF156D2CFD31EC0
-:10E71000EA67C8FE42556F37C92D6FC063EB73E4DB
-:10E7200082274B59F2168F63CCD4E505D9FC90BCF7
-:10E730003AFB10FBA2A2FEAC64932E835C2EB14781
-:10E740003A9037EFF8DAA34FB1C1F3657FE1C149E1
-:10E75000C633A81FE3DCFDDF7E06E475E02D0FF570
-:10E760002D0EECDA757725F097E8D2A8AF2BEB19D0
-:10E77000905BD122AC675106D4973EB90AF5F2609E
-:10E78000BE1C834303BA0FA6DFD77F629561199F32
-:10E79000886E398771EFE00809FF269F2FC789FE31
-:10E7A00055785EE3E0283EBE14559F4AD0FEF66BD6
-:10E7B00054476FFCA53F9B7F3C5967D7D77BAAD7AF
-:10E7C000737DBDC23CF0EBAF47B3CCCB59606EABB1
-:10E7D00000791C1C70D1FB21A8B352981F3C38C98A
-:10E7E0007C03E11F3DC5E57AF0AD8702B84FDEE15D
-:10E7F000FD0F67F3F3BF11F1285DE74DE6FE83B12E
-:10E80000010DE3D68E39CF9EA884754ECE1C3F45B0
-:10E81000051640163ECC97E57C6F1DAFE332F4BD84
-:10E82000A2AE42FFF3D6B9866CF65E15357F1FB5F2
-:10E83000C1F3F7A2AD5D1AC9BFE8D8BCDD78EE27F9
-:10E8400055D3D5A3C1FE1EF88D8B619D72A042D415
-:10E85000E143D11502BA8AAE8AAE5D33B2E81BD06D
-:10E86000E5A91B3198AE97EB18C9E7C54AC387CF16
-:10E870009D7432D1C79C25FC7DCE9B5FA4BEE381F5
-:10E880007E17354F2E0DEC5651F564FFBBF354192E
-:10E8900066406CEEFCB32AAA94F9886AB3BB19A748
-:10E8A000726DE3079A87DBC6CBD68ECED821FCBF2C
-:10E8B000383AD636F6066FB78DC36CAA6DDC30FFDA
-:10E8C0000E1BBEBA40C4369E17BCDB067FA7BEC473
-:10E8D00036BEBB7C990D7E4168B5ED794D60E7167B
-:10E8E0006C1FC5274ED68633D2C7C975B00F79BD08
-:10E8F00006E9E3A3A71E0AA05EA46AE26350DFFA5A
-:10E90000F27B4AB07FFD923B7BBDF6489D2AE377C0
-:10E9100009C67B83F17A4DC287CBFA6D7DF9D57537
-:10E920003C3EAFA853B2F6099CF158C66119979DB9
-:10E93000EB3BE3AE33DE2EBC6DB78FF7FB79DC5FCC
-:10E940002AF4A0B5FC677EACD75F6AE07D84CE92E6
-:10E9500038F50DFA447C3EBAF4BE31F85E2DB7DCD2
-:10E960001CEE2DCDC4EB487992FD12FB3C81241B9B
-:10E970005B81CF936C7505F5A5B5C8447E7F82B8E1
-:10E98000BF06AF10A7EB2D7273C6DFB06FF20B0599
-:10E990002C93AF34FCC18816007D7735EDD38AE126
-:10E9A0001AF11FD6AC7EE864CDAF8A8788D39FB4B6
-:10E9B000DBC72B641F070616BF6F1C78A385F7DD26
-:10E9C0007FD0E26329E0EF744B80AE3F6F09D2FD48
-:10E9D000575A74BAB6B794D335D512A2E7AFB65426
-:10E9E000D3F5F91683AEC75A62743DDE1227B89F7D
-:10E9F000B634D2F5C51693EE6F1776FA61A1C72823
-:10EA0000977D85F8519742726DC0A3BAB32E18AAAC
-:10EA1000D5CF835CFF239B5CAF359EA46ABA47A326
-:10EA20009E41BCCA6A4FDD7532AF4FEF37D125F337
-:10EA300061AC5F504F649F0EE8FB26D2E7C5FE5CD9
-:10EA4000D1F5D37750E1741D2CE4FD1BC4B3281F0E
-:10EA5000FDF9D7E2B5E4CF474C267F1E649ADD9FCF
-:10EA6000970EF2E72BC9EED871EC93627F91DE53DB
-:10EA700038FA2005F53ACD937D90397FE07D902BD3
-:10EA8000F10F7C1F47BF25FDF6D5F2EDE4F7D85412
-:10EA9000E365C423E3F3A0F861AEA3F8512D6C96AF
-:10EAA00069EF529E9827F8D9716E7101FA172F12EB
-:10EAB000C8EB748355E33E33791E60F7DA92C17870
-:10EAC000DFA8E9A678BE2D9DE7BC4D79CCE0F865BE
-:10EAD0009703E642D6F80E7278B3AE6AB07ED6A936
-:10EAE0003FECDF0CF1F9603FE37DB269FC7D9D8C6A
-:10EAF00083072FF03EC6254D4932D8BA5AD6DC35A9
-:10EB000003AEFBBFC08AE3F8BE698C2BB41740F399
-:10EB10008E1CD07D0017EE3787E7C0F3EA540ECD88
-:10EB2000AB9D3F3989E386F8DBE49F6A357B9CC463
-:10EB30000C351D77A80956E418DF9C8157717FCBEF
-:10EB40003263C0BB6EAAA9D5035F8B2F36331DF08D
-:10EB50007B4B989BCE870C8EEFEB144B9F4D63A1A4
-:10EB60000EE443FBDC36FE5ECFA16F524EB2DF26D1
-:10EB7000EBF0279911C0F59CF8DBC47B17E7FB96F7
-:10EB8000F72ACC20C22B8163F4BE85AD65FC7C8462
-:10EB90000BEA1394DF304F726FE960BDDB3FE5CEC7
-:10EBA00031F564DF09E5C6D4ED5D0AD5EDA26E62EC
-:10EBB000FAA75CD63A46D64DCEFAE831E167655DF4
-:10EBC000F4989B51BDD5AEE486761393CD93F8FBB4
-:10EBD000B8E61978ADA9977EE90BB63AC91FA83FE8
-:10EBE0003330355B1DC7EB11777ABF4B02E7F33249
-:10EBF000FBEDF798413CDFD83E79DD5756A2BC4685
-:10EC0000F8E8FD26D3E23AFA9BC7F1443FDA7320D5
-:10EC1000C18AA767F65765DA79ECC77640F282EFCA
-:10EC200077E3F53C9F70D2E5BE46BA7023E93DB567
-:10EC3000B4771617EF25791EE913F7DB746EF70C1E
-:10EC4000FD96E53D799BDFF0052CFBF828CAD93B02
-:10EC5000F4BEAAA56D01EC6777F95D64A71DBAB68D
-:10EC6000B514C61D7E8DE729BA2B96ED7D5247BDA2
-:10EC700022F8E67405045D6A7831E53343ADD7299F
-:10EC8000F65D8E73279A06D9951E8A63BDDBEA2F3F
-:10EC900056B0CF299FAFAA57C4BE77911CB68AFC45
-:10ECA00028B7BC3BE5427D19B5662A8ACD07F9CE67
-:10ECB00079B8EF9BD84DF951FB089FED7C96BC3E8F
-:10ECC00026F06D75876254BFE7BB18D6EF5B4BB378
-:10ECD000C7C387C5FEB6EA53E2089F00B98C570642
-:10ECE000C3AD11705BDC5DC100ACBB75FCBD74DEF7
-:10ECF0006BEB1872356CF48F6F7B6A937FB07DC0BD
-:10ED000098F6CF1D60F23DBAEDDC43ABDED0B81211
-:10ED1000D6D55E6121340B6937DB313F81AB7BD4C3
-:10ED2000E246D4DF4BD5B92184AF535F4CA01CDB46
-:10ED3000438CFA165A61930FE97EB444A3730E9282
-:10ED40005EC8BB77A3FFC80FB96CF9794175AEC334
-:10ED50008FDAE981F548EF86DA5F277D94924F7963
-:10ED60001FF842B3319E05DFAB697BB7EB97FB0A17
-:10ED7000FA75257E6C71B22413278F1CFBD7D5F84A
-:10ED8000BEE371C69F3F7F6C0ED5EDCEF18DB2F321
-:10ED900056ADAB11F7A5759C87F4CF397F6B29A7CA
-:10EDA000ABB57E965837A0A0FE6FAF2ECA413FED9F
-:10EDB00047876B91EB0B95E6CFEB2D71B830DA4CB2
-:10EDC00071F8BBF58CE4E8D7E38171A017FE5E15FE
-:10EDD000740AE4EEFAF31FCEEAD72E47D66590DE2A
-:10EDE000FA59E6F76790CB30C6F5C4CF1EEBA1B851
-:10EDF000C436109C94D7F65B4F86526CE875FDD5EF
-:10EE0000F63ED307ED23FDA93EBF98E49CC37250A4
-:10EE1000CE97D8230AC5E1A841761748FB557EFE58
-:10EE2000A4580E811D1C93CA2999FE12C3F71768B6
-:10EE30005F26A33C8520478A57573AED0BCD1B2D03
-:10EE4000D0DC8C076354D47FEE772FB1B7F8FA305B
-:10EE50000DCF9F280917C5CB5B51AF01AE94997FA9
-:10EE60003C9BE55CCE9840D3BED5702D9E27FA62C0
-:10EE7000829F2BC943D2FDB7D25B19E79DFD50D9C4
-:10EE80002F7D06FBA5CA95FBA14CBB48729379ACBC
-:10EE9000B33F0A712D0FE5FEDE048D7592DC791EFD
-:10EEA00090A9D74D9FF51C9D8C97ED81C5B63EFB73
-:10EEB0000CA94B0E3EBF7785B8D8D90B7E13F3E172
-:10EEC000E066EAB3EF3FBDEA38D6E397821E9D596C
-:10EED000FC7F7BBEFD3D80C4FBF979A29F3EAA9ECC
-:10EEE000E17CADC76478FECE130C515C6855B2BFAF
-:10EEF0003F689D27F209679C70BC67F99F1C7FD211
-:10EF000053C6D2F14315FE59C657A641141D699D3B
-:10EF1000CFFDA894C77E9157761EF9049D176041D6
-:10EF20004BFFB62CCBFACEFCCF30F4C0F44C3EAA4B
-:10EF3000F4F33C54AEDF2EEAE7D6D37C3F72C5B97A
-:10EF4000A141FA5A617E7A1EF67FCA5D8E3E95DD3A
-:10EF5000DF38F35AAF8F25722DFE0FF2DA8DF328CA
-:10EF60001FB1E7A5C3638C9FEF293419F6712241C5
-:10EF700053C5BECBF4DE669501DF334EBFFF7E2C5A
-:10EF80009AC7F39CF6F25571AC7F641F79C79CBB9E
-:10EF9000C8BF421CDD3ACF52C7CA730B1FB4AF249F
-:10EFA000F575BAD847896FD0F992D91BF8FB9FD372
-:10EFB0000F9D407DDC0FFA8871BE3D3FB1AD02F37D
-:10EFC000935754B6571FDC8772F225FB49FE18D7BA
-:10EFD000534FB0FDE85C97453EFDCDAA4EF2311887
-:10EFE000BEEFD1C4FB1E67FFC8EB359A317EA76A1E
-:10EFF0008C466BFF58CA6D91D0E7376A9AE97DD489
-:10F000003343BCFF9570F89918D6D3B21F553AC94F
-:10F01000FC3EEEEBF4D87A15DD48757C3D9DA3CC23
-:10F02000FB77467520CB55927B61A923739EA53A49
-:10F03000F1F74146FD320FD689C55817F23A51D63D
-:10F040009FD24FD4A94F7794E1F98C5E8DCEDBE54A
-:10F050001DF9840FF3DE70EF6AAAD50C65691EEE08
-:10F06000A33C7F24E9BCDE3AB30AEB4CCB7B928C09
-:10F07000DF88FD02F5A0B325FE8B28E8C781168343
-:10F08000C6ED2D8D74ADD29206F253554E951B9B55
-:10F090003500CF2D7454F5C46CE31D95E619D4CB1F
-:10F0A000BCF2B8EDBE3708F82C7A0175EE3992EF54
-:10F0B000692E4FCF7C85CE152CEC675BB86DFFD3E6
-:10F0C000F8212D7663FC504EEC7DFD107F5FEAE960
-:10F0D00017EF4B1DF6B6679E4E7690B63B7C6F4A97
-:10F0E000712E41F3E9DDDF4CE067D827B9DFCA9C18
-:10F0F000CFA0EF12C3E27B693D366B0FE6B3EDAFF5
-:10F1000033F99DF01EC3F21CFE6AC2EF440E63B1D8
-:10F110000B79E6E65861137D4F2DBE87893416962C
-:10F12000F4B1CCB945A7BCB6C45CB6733161C6FBBB
-:10F1300062F2F92763A26E03765C96730FB978EEDC
-:10F14000214BFEDE24F0350B397578F8B983B98E82
-:10F15000EF3C66C6785D30D4771E9F1378AEF45DC1
-:10F16000C76201773FAE5745E722C331A4372EBEB1
-:10F17000CF1274CCEA4DB60EC32431C8B2E2B93313
-:10F18000C6CFEFA562FC3CB1276868B82F80EF6E50
-:10F19000C2D7C8CF59CAE7B32EA49F2F243D69E038
-:10F1A000CF675D30A91F24BFAFBBF3F8D83D9BC626
-:10F1B00065CED7B4633FC28FDF99F0734BBB04FDBC
-:10F1C000CEABFCCEE4DE8038A793B8758F81780C87
-:10F1D000FE5D65EDF10903098DD6FF18D127BEABA1
-:10F1E000992CF885FBAB882EC7BF0FF0C0F1E01E4D
-:10F1F000F13DCE1A9AD7CCE9CEFC7B07A13DD6EFE4
-:10F200007B261FAF6C12F0EB087E2D87CFA20F423A
-:10F210001FA7ECC15EEA55E0FB0CD1B79CD3571693
-:10F22000D3F977590EBD05B8CFD3BAE23B9FDEF8CC
-:10F230006A1FFAF3CCF7FBB7D17A5721A736C2631E
-:10F24000CAF59838CFC4ED42EABFD4876F08FDBC39
-:10F250003DA648BD7A8CE86DBA61FC7F89E8717C77
-:10F260005774253E2A2AE34FD0BC60FA5CF1D78957
-:10F27000AEEBA4477E07E6B48BEF0BFE61DDA7691A
-:10F280009D92109D2F8275BF7D23D605BCCF101E89
-:10F290005F1AEFFE58767FF381F0B292E2AB3A1F2D
-:10F2A00022C7FF0F94B0BE363046000000000000B9
-:10F2B00000000000000000001F8B0800000000009C
-:10F2C000000B93E46660F8510FC181486C62F11A3B
-:10F2D0007606866816068699AC0C0C15402CC74934
-:10F2E0009AFEE540FD8B80782E10CF00E2C940DC0D
-:10F2F00007C49D40DC02C49240F34480981F88B943
-:10F30000809815881980F8370703C3370E8439377A
-:10F3100080620F48B41B84AD7810EC3340FF6F045B
-:10F32000E2AB6484C3281E1E389D9F81A15A00C190
-:10F3300017104495CFE047B0B94429B34B1AA81F22
-:10F3400000656D40B4800300000000000000000074
-:10F350001F8B080000000000000BE57D0B7854D5E2
-:10F36000B5F03A8F79666672F2204C4280134830CD
-:10F370006A8A03840882F52420C696DA9152C5FE73
-:10F38000D60E34224A2051B1722BFD726002040164
-:10F390003BBC1414E9E00D8A8A362256ACE83F20C3
-:10F3A000B5B4B56D6CB9D55AED0DB5AD2F0C88520D
-:10F3B000FCFBEBE5EEB51F99734E661250F1B7F703
-:10F3C0000F9FEEECB35F6BAFD75E7BEDB577DCB232
-:10F3D0000FF287029CC49F8B00EE7003C0D8743A72
-:10F3E000EAB66FCC7DA49AFCFE7FDD916D7ABA9E61
-:10F3F00048878244EB01180045001779C9AFA4DEA5
-:10F40000A49F1FFED37985007B41010FF9945227F9
-:10F41000157C8DF4B3F7238860B9FCF3406957007D
-:10F42000DB99B4DD9781B54B95E9A55A156640C6C1
-:10F43000EF8697FE4EFA19BEB999B43FFE6180B6C9
-:10F4400077C22152F84886146F737218F6AB7ED0DB
-:10F4500055C9F3654006070EEF64809A34BCFB5F24
-:10F460007B83C2BB4F25F0EA19C6F712F80BD3F025
-:10F47000EF856FE4421583DFA849C37FBAF0D0F966
-:10F480000F0058DEA23F5DEE0258DD024F97570095
-:10F49000AC6CF1D2FCD2168DE6E32D619A5FAE9290
-:10F4A00026040FCBDB216992F6A16A525FF447FE76
-:10F4B0000B54796D79772169EF4DE7D540D896F7F0
-:10F4C00096EAB63C01E76098CCFB1C3E9FA52D0454
-:10F4D000071E1CDF0BC65958FE6D8A171FC75B3C01
-:10F4E00038E2CA61042F6D2F2A84D2002EDD988164
-:10F4F000F09507DC7A92B0C63981D9536124193767
-:10F50000140320F5E21B00D612B8CF0E4C790B4243
-:10F5100000F793FEDB48FF4AA8ED650F295F51E62F
-:10F52000D615C4CB76F52F5D640C2FF987783B6B2D
-:10F5300023CBA7E745F296799E0D9672D2FE977976
-:10F5400077BE2C1138E2E56EDD23A5C7E9A14B3F5C
-:10F55000FD5724EC7967FFE5BA51877C2AFAAD8024
-:10F56000E8122DF0C5EDF71C82DB82FC74BF629CB3
-:10F570007EFB25E48F92B6151B21992AEB3D4EB9EF
-:10F580001EA9374979F946159265EC7B219187725E
-:10F59000F62B2C2FADF3C7AA7AC303D67186A5E943
-:10F5A00052AEBB67CA842FCACBAF982B11BE8184E1
-:10F5B00085CEC31883A2BCFCB045A3FCB8BAA59203
-:10F5C000A6ED2D5A07959F8F95191D55BDE5F0AFF6
-:10F5D000A8A748BB3B5C40F9D0DC06C96D12F61702
-:10F5E0009D3193E4578D2A1A7DBB8EF91932EA05B5
-:10F5F000C1DFAB249DF2B749F81BF59F533E56BBC4
-:10F600008CAF607F2B46C9D212C47339E3F77257AF
-:10F61000CA3B1CFB4D0C1B65623F91DF7561BDF25F
-:10F620008A11BA42C63DBB9CF1FF2FC7DEE9453DBA
-:10F63000D833FF85451DE56300721D7CA09D221F08
-:10F640006813FBE60331CE672D0F678EBF127DF284
-:10F65000D7AAC8DAB7506FB49733BDE184AB7868E6
-:10F660002A1C0DF4E6B7F272C26748A748DF7CE6B1
-:10F670004C37B424E175C243EB5AC294EFD6B4E8D8
-:10F68000345DC9F9D0853C554CF29C0FA1B09AE687
-:10F69000B3AE57B098AE4703A6272146E05C87FC7F
-:10F6A00079017E5F6A18A5A479A5C8434A26BA7F66
-:10F6B0000D9697D0BC01A5C89FA2FC31D320EDF3D5
-:10F6C00079FD29D263669C20699D8FE5EBA56EC309
-:10F6D0002CB5B65F691813D3F5493E55576EED8FBB
-:10F6E000F45F6585E7395A5FF4D7201D324C925F8D
-:10F6F000E363FDB5492F7F2EFDDF2E25C2B8D0ACC8
-:10F7000070F473BBC89B09C3A84A8F53B6F851C3A2
-:10F71000B496C3A3B6F29AC509D32478BB0BA2C38F
-:10F720002542DFE2A9D13010FAFBA2491397DA345F
-:10F730007C0CDFE9F9DD49E1F597B3F22AE9F746F8
-:10F74000DC429F5AE93726C22FEC1B85F3ABFCF352
-:10F75000D29B5F20FCAAE4BA23D4CE282499F1647A
-:10F76000BCE931D0091C723806A80F94B0FA77AB07
-:10F770001C08FE23708EA3704E8ECEC802A769852A
-:10F7800053C0D11FDC028EEC7CCAC677F253DD6514
-:10F79000E37E3B91B0B8AFD315413BAF00F144F4E9
-:10F7A000007CB4CE7091EF05D308EE754AB71930DE
-:10F7B000BC77BF85534B206959C73F6BBA0EC7FC56
-:10F7C000588AB7EF4863D3F425F999563C8EE3F590
-:10F7D0009CFC27E6E7EE35BFEFDAE6076A221C0D50
-:10F7E000F63FBF35BEC88C68A077BD5F4ACC8EAEF1
-:10F7F0009B32EEEBC0C6030FD15F7938DEE8F478B8
-:10F80000795F21E361676A32E378F993C978DE337F
-:10F81000874FA73C0A787DBDE05D6783F776179137
-:10F82000DB0CF43FD3F09EAAFCF989FEA5F257D970
-:10F83000B7FC7DD6FDE5E1AF849FDE57217511C190
-:10F84000D7828BBD49534AEBB9CF1B5F055844E8BB
-:10F85000B7E0D7630E5D246386F0F597D2E3CF97C8
-:10F86000740A7736FECE361F80A4AD9FFF57F3C9CA
-:10F8700086D733AD874E55BF2EF9839FEEEF969610
-:10F880004312E569E9818BE93E73E90B930602E9CE
-:10F89000C7D5762E18645279DCCE588A7606F63FA4
-:10F8A000F9D4EC8CDB5BA0A395185D4F84A2D42E19
-:10F8B0005A2A016DBF8AD86D4962BF54BFD8EE9DE8
-:10F8C00019A076154D97BA80DA31D52FEED726914B
-:10F8D00029F82BF24721EF2FF589EF07EBD1CE5D09
-:10F8E000594EBE13D6581A64FD91EF51AC9F53C1C7
-:10F8F000BE67832BA792C063C1BBCF9D8C65D28F9F
-:10F900005F96658A9F4DDCEE5A8D761751C83E7F13
-:10F91000228676B5BFC8ADDF27F56E37436676FF22
-:10F92000FA8A9F98E8D25881F61B99FFBECBEF87E1
-:10F93000AE2A5C0713868CED23CC35B0C9B1DE0747
-:10F94000D086A3EB66589A44D64CBF23BF5AD4370F
-:10F95000F55AB4D74295ACBC76C985B5716B399C64
-:10F96000578BEBAE28BF66C9585A5EEC8DBE3C91F2
-:10F970008C5F4CF4679CE0A9584D48CD949E99F952
-:10F9800065FDB5DE194902C3FACBEF2CBB36039EE9
-:10F990000815299D45BEA4C12E5F9B38DE56733CD9
-:10F9A0008651C62D7ACDC7AAF6E835DF594CAFF996
-:10F9B0002B138B11CF250D10413B7B3DC15FCC320A
-:10F9C000BEAFD2AEDF8A55FBBCCED47CEE02E32ABA
-:10F9D0007940F6FE9DF27517C46662FD62BE8EFB2D
-:10F9E0002B9352ACAAFFF93BE79B6DDE5FE5F82451
-:10F9F000E3CCCF34CEE78597E20019A7FAB31FC74F
-:10FA0000DF60D793A78A77686C37705F8DA626EE84
-:10FA10009B7D303992A2FBB9DBA81FEE160E3BC4CA
-:10FA2000366968D7C40132EA33B5DC9DF6A7E1FF39
-:10FA300094AB7333D145A40B5F7D2F6FBFA57E526E
-:10FA40000E16FE3D87FC723E9C7F5249B707EEEFD3
-:10FA500053051C817CDBBC4EB41CCDDB4FF4C61AB5
-:10FA60006D1AD5C7D9C67B90E8D11491AF075ABC9F
-:10FA700034DDD6A2418AC8D9BF1379C3FC56227F90
-:10FA800098FE88EC1731BDB72542CBEF691947F3D3
-:10FA90009B5A0C9ABFABA59EA61B5AA2F4FBBA9622
-:10FAA0001934DF83CF8FC87835946501EDAAB36729
-:10FAB000244DD463B003221504BFCBF1BB05FED5A2
-:10FAC00072EDB332FA3D67F8A87F23C8E7E987A44F
-:10FAD00081FA1B0E2AB00DB2CFEB0E3EAFAF28322B
-:10FAE000F39FAA957470414FB91DA85FA5A89AAC61
-:10FAF0005B44E5E65ED89A8FFC5E54CDBE07038476
-:10FB000091C877A51A52BE101D5AC5F61A6FDF3676
-:10FB10004EA6F5566B2A6DEFE48B73A193AE33605E
-:10FB2000782308A777BCCAEA57B1753278FE3EA49D
-:10FB300020B44D94E9FAB9BA9CC1A168767E09D681
-:10FB4000DC0768EF879561741EAB2F50370D473681
-:10FB500080CE9787937E3690AD0DAE6B0F6CDEA98D
-:10FB6000CDB4D0D9AB30FBFCDCE93BA315088F4A00
-:10FB7000E49A8C5FB8D99FC47587D0434178737C71
-:10FB80006C3EE7E298048EC24590BCAF2C5D1EC867
-:10FB9000E3F3D18C5AEA9710DFB9E23957EF48C93D
-:10FBA000D86E2344EE8374B94FB433ECED7CA29D40
-:10FBB0009942DC42E12A7B3BBF6807B5B6767ED12D
-:10FBC0000ED61A74BC0469A7A7CB15DEAE47EE2B80
-:10FBD00035D92A674A409799DCD8E9948D7F34E07B
-:10FBE00074D8674A27115FD52C2F49DEB69332AE01
-:10FBF000B3763AF951CEAD7A2660C913D245517623
-:10FC000071BFC6E9953433D36B9D1AF94539CEAF30
-:10FC10004AB5CD4FD0699D97D3D1F467A4D33A8D1F
-:10FC2000D33106363A0B7AAD13F46AB4E34FD06B96
-:10FC30005D167AAD13F46ACE4CAF7559E8B54ED067
-:10FC4000ABC1DE4ED0CB490FB1EEA4E9D62C21DDFD
-:10FC5000CE143D9C7AE10559A7DFE5F6A39D680F18
-:10FC6000162D50D93EA9B21350CF43697E3F76ABD3
-:10FC7000C9ED93665A7F2DFE2AFC5F28A76E96BFBA
-:10FC8000267EA816EDF07C4994EFAB457F5812CB49
-:10FC900089FD7573FC382D7F528EC614DA5F1270A1
-:10FCA0003FE2C497279A848D04A40A357A6905FA3D
-:10FCB0002537CB11F4DF0A783C20F004FCFCE6D4B5
-:10FCC000F81F80E10BC13B39FC94E0BC45A1F84C26
-:10FCD000323C39E124FBCB8D645F3384F3F710F3BE
-:10FCE000CCC0090D6CBDE8599FB99DE482CCFD5490
-:10FCF0006E966D7C3362BDDFC637E5ABF26DE5C352
-:10FD00005A4B6C797DD1305BFD210BCEB195973686
-:10FD10008EB69597345C60CB87AFAEB3E57BF10BC5
-:10FD2000CFB72BAF2CB6F18B39A20EF76D496074AB
-:10FD3000D81E1F5187FBB6FECABF7E8B6A7809FEAC
-:10FD4000D542375D870805297E04BE723530DDE86F
-:10FD50001F280C242F21E57ECD30A93F403300F72A
-:10FD600073B216A37957D82E5F5F4301227CFAF550
-:10FD7000AD2A780BFBECDFF824FDF7372F27BF887F
-:10FD8000F55D2964EBEA06B25DC2F33593E8C76D11
-:10FD9000645C97C6D67597E01FC2CFA8573455E26A
-:10FDA000F27B7A72367CA31DDEB2843D3FB4CD6116
-:10FDB000079E227F7F5EF2DB1FFED641C4544E01B8
-:10FDC0007F1155E2E7D5A727FFA58D76FC9434B8BF
-:10FDD0001D72E2D0E79F33FE5AC57A01D13AC44B77
-:10FDE000CE7AE64341BB2B935D21F865C3F49BFCBF
-:10FDF000D6F50CACEBD4B0F43834AF64CA7FD1F88C
-:10FE0000A4AB16ED8B9C8564FE65CC8EC9387F4E05
-:10FE1000EF755365BFD50EFBA2CF3F4DE71F9C5634
-:10FE2000FB700FBCA51ADDAF89BC635FD6BBBDC933
-:10FE3000F44DCC275BF524F9A954ABD135E98F20DB
-:10FE40009F9DF08546422ED91F7A597AA6F76D0FED
-:10FE50004C67FB12F3D59C6405E293C771AC7DF54A
-:10FE60004B4984273955863BF19C79B29CAC20F9EB
-:10FE70005BFDA1FB10AE6F2AB15BD50108EF9024AA
-:10FE80009E1783AAE74D0B5AE6C9ED2231FF6CF6A7
-:10FE9000D192D69BEDEB194CAFB3F2E35DADCB69DC
-:10FEA00039B13B5A554AAF2F8A7D9415CE4DEA178A
-:10FEB000D83E12E703CEF6FF2AF6D101B57189DDEF
-:10FEC0003EDACDE8008C0E2FB4EEAE3B9572611F8A
-:10FED000F9036EBEAF77D82F95C43EC2F3A300B727
-:10FEE0005F2A93D45EF1552699FD5229EC19FB7ACD
-:10FEF00076231AA063D3F6511FFD1B9FA4FFFEE6D5
-:10FF0000956D7DF705847D9460F611C135C69928FD
-:10FF1000446DF846225FD8D7F76A5796F5FD7F8C77
-:10FF20007D94597EFBC3DF3A4830FBA81FFC4DCFC0
-:10FF300086BF7F71FB68BB0AFF9FD947D9F8E47F72
-:10FF4000B67D94A6F36763E738ED1A61479C69FBB9
-:10FF500046D827C48EA1769649EC2CB4734EC89A25
-:10FF6000EF4E32CF5B15DD877EEAB55C5E17AAD116
-:10FF7000352EBA7EEB7968676C447D3E80EB59B4D0
-:10FF800083023C3E4F8DC0B42F61FDD84697E51CDF
-:10FF90004209E8793DE7365F203C103BAF522DB473
-:10FFA000CC9FE345E061972B8FD3BBF9FC289BD70F
-:10FFB000E3140FA04BD4DE52751FA64FF3F58DAEA0
-:10FFC000C7D5567CB0BC52AF27511E48FBA75D0376
-:10FFD0006C78F1D9F042D621361E28CC9E336DF1D3
-:10FFE0006CFE6A4D42BF39C97622FFD2F3721D20E2
-:10FFF0000889FA11A4FF82D8B21B311E33F8EAA592
-:020000022000DC
-:100000006F615C6341D74C1ADFD85A35FA401DA99D
-:10001000971BD12E9FA2E3BA0AD4CFB8023BA3E725
-:10002000A110AF0DF0731C22DFBF597A9CAF9B0665
-:10003000D8ED725957853F69587679213FD2494F9B
-:10004000EFF6D9E4C365956B2A9F379D9A7C4E6580
-:10005000726D927FA82FF21CFDE41A8EF304B0E4B7
-:1000600049F9879C8F8985F2B98CA7C15AAF4EF8A0
-:10007000CD552E6B181F990B5A1EF29F7FB20A297D
-:10008000F4BF141E35D105DB1F5D5AB91F1D25F0C5
-:1000900072CB7E22E866F21A9ED55AB68CF47BBCEF
-:1000A0009AC5DF1768E4BFD1BDE7B392CB574FBE07
-:1000B000EA3E7A6E1A27FC340CF9B84AA6F70856BD
-:1000C00094333D2EEA9DE7966CF7082CFB365DAD28
-:1000D000E1F634C18F522E1B68077C5AFE503E2138
-:1000E0007FE44CB5DB05A74BAF89FC5EC5A9F2C721
-:1000F000A71D4FD0B5B75C2DE6746DF0A2DDBF2C07
-:100100003CADCF73D4DE745D4BE9EA2F072399A190
-:10011000FF5AB794317ED6B93F72DAEBCAC09A194A
-:100120005BFBA25BA1D32E63FDFA162AFA5F51791D
-:10013000A91A5D07BCBCBF15FA5A13D793E36833FD
-:10014000107C28895129D49F500EF41C111906CF18
-:100150004D7DBA41F7E17405AA49C3E72E956DE3D9
-:10016000A9857EBB5D3DC394ACF0FB16BA291C5E2D
-:100170001C0FF5B4C6CE3DD58038F774EC1F1D7644
-:10018000C3F2D2D119E30CD4CF6ABF3ADD0EEF2906
-:10019000B70BA8FADF2D7654F6762AFCDD624FAD58
-:1001A000427EB7D07F990B764B641D8E87AF8098C7
-:1001B0004EF258540CD086E978E4C3D11A5DBFB62C
-:1001C0004BF47C988AB48EFFB173A2ABDC3AED4756
-:1001D000F6C6289E948001B4BE7E6AE7482706B31F
-:1001E000B8A56112D8EA3FEC76D37215A2F43CFDB3
-:1001F000C46B978469BF06F9549386C3D9EF55EE53
-:10020000D8C36E6CA73178B001F5478C637E81B09E
-:1002100097B53B31B3EFB8818D285F6759F23C2E1B
-:100220000BDA4E2DAEEB0419B3B38AF2BF1FF7B54C
-:100230009060F6D0504EB3AD8BF2E9F7ADAD7DCB0B
-:10024000F9DD5CCEB770FBA81DED238BDCB7F3782E
-:10025000B36D12D8EE595478587CD63B5CEEB77A21
-:100260004D1FBDAFF0DC0ADF088C7739A8447C0451
-:100270000FE5D71AF9B13EF05091B0CBDBE9C67764
-:10028000BCEACE1CDF91ADBD88EBF8B478D9C6F7D7
-:1002900031159ED971BA6F495D44E5B398F34DF1BC
-:1002A0001CA076ED5013923AD6FDE82458F983FC51
-:1002B000EC433F454903190BE915930DD41F251B4A
-:1002C000DC4999CABB763BB60F1F5458AC21188144
-:1002D0009935945569FBB0F2422D8ADA706E9FC150
-:1002E0002AFBBD8BD245F6FB52258E7B1261B4EF03
-:1002F00042E877B5D42BFBF4F40879083DCEFDFC39
-:10030000E9D1AE1A7ECDD2BE5C82684786FECA3D78
-:10031000CCEE285FB39EC5813504E07531DF6148BE
-:1003200057231F17832D89FB16E3399BD9C0E26B36
-:100330000635826CE5E3319E1CDA8F0B0CF32C82C0
-:10034000B7A5DFBEA2EB19A4EB44B0E9B10CFA6388
-:100350008C87C88BAB90E98FF6C434967EA4D0F519
-:1003600023BC08924B08889363B1C52EA4FF1CA040
-:1003700071E8E186E6BD185F5DDC08111C86F015AA
-:10038000E5AFF00C481A945FE06098F0C76036154E
-:10039000188C7C81EBCF02465FC117258DF6FB36AA
-:1003A000E1067BBE88DBFD45CEFB5B8E7E8A7576E3
-:1003B0000F4A5F2403DEFB83E9F6FB3661E87AF03F
-:1003C00001846F7F2092427E351DE338FA572176F3
-:1003D0008587E0F389EF4FFDE559A4FE8F16D5150B
-:1003E000205EB67AA3B9F45E515BE6B8B35EFC2A30
-:1003F000EC8E2CF5D37AD4B4C5353BD3651545378F
-:10040000CF2270AC081A40F59A7915D5EF0A97DF1C
-:10041000E78AAFF0623CE9D2C0E85CD4B37B314FED
-:10042000D2A5E111346E57F4A3F0F85D918F737D7E
-:10043000EA1CEF160FD3A37F07E316C4C3284F2C83
-:100440008CF376858B1E9FA9D3F3422399A1DD758A
-:100450001E3FB32F75F59F56FC93055CA372087081
-:100460005AFE85599E581BF2A75947B613C8FFC3B9
-:10047000201947FA3727B8DFBDA7DE6A5ECFA47E12
-:100480004F512F9600EBBE93D45B8BF321F50C5BA1
-:10049000BD68AF7A77F17A601BD7E835EE66011F49
-:1004A00058FB8BF4EA6F2BEF8FDA833DF5F45EFD9A
-:1004B000DDCFFB336CF5B45EF51E16F0D9C605FB37
-:1004C000B83DE5E7B89371AAB7593CFDBE8A2994B7
-:1004D0005FF6574CA99F45C6B9F9172EAE23AEA1BA
-:1004E000EBB6E0ABBDBC5E2BF25515DEC385B64660
-:1004F000BC07CCEF09C703D3BC31CBF71EBE0A4CF7
-:10050000D3327F9F65ABAFB6F9C01843BFD3FAAD06
-:100510001F2BDCEF9D3719FD71CB0B65EE9FFB5B4D
-:10052000DC50891E1BA0DAF26D61563ED2FBB7B8D3
-:1005300089778AF83D18A22B9FAEB2C877CFF89F73
-:1005400017FCFC3C230DFFFB71A3DC0A3FCB0BF82F
-:1005500045DE5BCCCA47B7BD3F092F56897B00C338
-:10056000DB0A5AA9FFE20B3B3FA9D53E3F964FCF8E
-:100570008FE5C5FCAADBA4C9FF5AF3CB6DB5F31F09
-:10058000CBA7E7C7F2627E356DB9A7353F673DBCA3
-:10059000AF847A7E45C5FD615C7756E0424AFA1D1C
-:1005A000D7F6527C31C9DF3E40D8DB3AD5EFA3C045
-:1005B00038C73BB6FF76BFC2E037D2D61B64E7C16F
-:1005C00050E1E6E7C18930FA39DFF0683C8E8EC130
-:1005D000A978EDF9A1981F90CE935FFE89EB308644
-:1005E00029B2FDA443CFF7B3AE2D2D66EBC9B2609F
-:1005F00044B6AE6B220EFAB9013554FFC435A67F5E
-:10060000F60EE0FAA890AC6BCC9F47EBBBB8BE5A95
-:10061000DBC2DE0B48F0FBB0F1C2D1143F09711F01
-:10062000D69C62D36FFB6AA71C40FFD5B183EC9DBB
-:1006300088A7BC6CDD5BDA021DECDD032FBDD7FDA6
-:100640002CE937462AEC21F61EA63F25F61EA6BB4E
-:100650005BC234FD498B4ED39D645C4C1F6D894059
-:100660008C8CBFA3651C4DEFE2FBAB0D682F92F4A1
-:10067000CB8532F55B6C6D2196B20BFDBD5E9ADECB
-:10068000DBA2AD522BD0DF1BA6F963D2B4EBBC7456
-:10069000FFDA15CF25703EF1BB727A4F7C62A14A1A
-:1006A000D75F50534A6E75FABBC0EB31A9AE11DB70
-:1006B0005D1096593D6F321ECA5CEF46AC372EACCA
-:1006C000527820602AA1C28CF5BE87FC5513E0FD4C
-:1006D00069B17830737FB7617FA303BCBF423D1E11
-:1006E000C8DC9F89FD8DD4181E20DCB5242773BD7E
-:1006F000A558AF4AE3F32D4DC93999C7BD1DEBE5A8
-:10070000E727E8FD9D8BAE066A8FBA0AF5ADD46780
-:10071000C1EB25074441267C9E5F9068C67A17C6C8
-:1007200022308C8CAF872220137E7605487915DE27
-:100730002527FD9074C274528EE74258FE254B392E
-:10074000B627E9F819BC7DAEBD5C8CE76A839EFBD9
-:10075000D37869DCD56ACFE7C94C3E1F6ABB6A32E1
-:10076000CA7D1E3F7FFA35E6C9B8AE4520F411AB0D
-:10077000EF67E5CF88FA2156FE1ACFE7E7B379FB9A
-:10078000A67869BCF0BDB78C289E55959EEFE0EF2A
-:10079000559E3DCB32BF7BBF7741F1AC407A3E8363
-:1007A0006F9D78F6AC3EF63D05F572CF9B24A8B759
-:1007B000F21255547F8EF244A97D386A608D81F221
-:1007C000ACAC6270BDEB2D6B5DA252B84C7A4F930E
-:1007D000C375CF3C3B5C83E6DBE1BA67BE1DAE412F
-:1007E0004D7DC3F59497E9B56CF091F10DEBF85B95
-:1007F000FECD3EFE90EFDBC7DFF27DFBF8436EFBE4
-:10080000D4E3A7AC74D97CA37DFCD29BECE36FBE90
-:10081000C93E7EE9CD9F6EFCCFCA1EBFD01BFBA791
-:1008200097DBBB8AD5EE6C8ED9EC5352EF24AF67C1
-:100830002A563B3616B3D9A7A49EEAE3F6AEAD5EC0
-:10084000B4573D9F8FDBBBB6718D5EE386787F2901
-:10085000D9DA5FA4577F05BC9E295BFBD37BF517D4
-:10086000E6E31AB67A5AAF7A83057CB671C13E2E9A
-:10087000F038B05B791C189577527FE1D5649F5DA5
-:1008800086FBD0A884FB7DAD0046EDC7FB26C3D90F
-:10089000BB477953160EC5F55C9AB2F02C5CFFDAB3
-:1008A000F2C0B66F9BE2637E84B13E85A65A0E34D9
-:1008B00053FF9DB7B9F872CBBDD72DBC5E4F79A061
-:1008C000B9F81B96F24B78FB367E6F70B2EFB7D457
-:1008D0001ED10691FA19FC66978AFE783914463AB9
-:1008E0000D02F75D574D1B6BD5CF5B7C2E3A7F6DAC
-:1008F000281FB734335C6D656CDC7B71DC007E17C0
-:10090000F6477331C5B7C652F17D4370B6F457C48C
-:100910006ABB97AEEB6EBEAEE7B99B1F282370C4CF
-:1009200007CB80F7229697F6EDCF696DB19F2FA880
-:100930005AD4C07D5FC91C6D348A47B67677D7CB51
-:10094000F599CE1F1AF87C5AE7D425CAC9F8B0DF4A
-:10095000EEC7250C0ED6FBC857B9630DBE4C7EDC26
-:1009600056AFCDBEC92B9A960B7DCC23DE62F7E342
-:1009700012D56B64A2DB4A1F3F1F39E8B5D95B79FA
-:10098000F932DD771EAF62E7066016533F610F5EF6
-:100990004BEABCD6F15738C6F3C13403D7015CA685
-:1009A000505EDCE5EC5D157F61422BD3D17FD049F1
-:1009B000CF0381DF7713FDB686A7D1FDF8717E0FD7
-:1009C000560D276A99DF91C3A7715DC5C729D9A8BC
-:1009D00042AA808CED8AADF48DB5D2CDA4F74B4EF2
-:1009E000B89297D2F79ECA08FDA5DEF3BFD3C7FC25
-:1009F000C577EBD37E5B9681BEF7A0B3D8D26FC923
-:100A0000876E488DC95E3F5D8FC1D5C3B761C2AFE8
-:100A100028FF3AE75BB7F1235FA6780BA11FF839EF
-:100A2000F8AC71C07FF42BFF44E671FD01177B77B2
-:100A300041DCB7E1A5D773BFE92CEE776D8068087C
-:100A40000BDF05B91EE5EC5DF85D688C85FE4FFB9C
-:100A5000DC0CAE3617F5778973DF6B132E9B3FECFA
-:100A6000BA8DF6FC6C9856847A6BF67A17F5AF5D02
-:100A7000EFF0D33ECCE77B1D342F433B5EDCDB9EA7
-:100A8000A5818AEFF2CC7BF2DE1ABC1FB5CFC7EE90
-:100A9000EFBD4DF846B7C8DB0D81A41BEF01BCBE0E
-:100AA0006BCC151300DB279795A0BECD838CEFBED2
-:100AB0007DB7CD0E5F7FF03BE10558D2271CEA766B
-:100AC00029A37FABD327CE8919BDB2C57988B88B4E
-:100AD000639C8F7AFC307FCEE17E18167FD15FFB5E
-:100AE00013FDB49FE7ED72A3FC34A9CDF5929C3EB3
-:100AF0009FF2B862C620324FD7EEDAD420B0D56B61
-:100B0000EBBBDED12940F5657314F948D49B0FA4E3
-:100B10001ECAE59ECB4D5BBD72526F78F67ADD5CE6
-:100B2000AFFE7CC7BFBBD11FF9EE43872E43B99CF4
-:100B3000FBB4025E326EF78E20A4E83E36E9C6FDB5
-:100B4000DC0DBB948CE7B9346280F43FF7C741BA3F
-:100B50005EDEB0D3939C4ADADFF093D74702C143FD
-:100B6000F792A3CF0FC275F721899DAB9A5D2371D0
-:100B70005DBB4185EF4433F437C0CFF8F0F0533913
-:100B80003390CED2F6BDD7D07E3BAE74792CFA220C
-:100B9000E077897ACC1FF7A044E3A37BC3C7CEC11B
-:100BA0000E3F2831F876BB923E846FFB56778CC09F
-:100BB000D1B4FD3DCA57937EFC4808F1D0B45BB177
-:100BC000F9899BB62B29CF489A1EC214CF57A41A75
-:100BD000C427D38FF377CDA3FEF3F91D2BDF534248
-:100BE000D8DECEDF042F9114E2F525253215F38FE0
-:100BF0003F10D209AADEEEDC1642BC927E67BA73C1
-:100C0000F11CD8EEF7C6FE3FCCEFDD1FC05137F226
-:100C10005753C70A36DEAEAFBD81FAA5C921476F6B
-:100C2000E32FC5BDCF5D2EF43BCEC1B6179C927DA0
-:100C300039F791E35B4C32EEE19DEF6C3109FC8DAD
-:100C4000FFF5FE96DBD00E7AD6A7A11E687AE83FA4
-:100C500042605937AFF43379EC7EF081FBEF26F236
-:100C6000D1FD470F5D3FBA9F7963884EE6DDFDD821
-:100C7000FF29D249FD05CF5C4CFD050B9E9834B091
-:100C8000AFF513F935697D978CDF3FD77793710600
-:100C900092EC1E9E3AE8F3DC2E057C04CE775FF6DC
-:100CA000D07B524DE4DBC2D148AF79542F637E1123
-:100CB000C1F3FC1DCBDF534666C2B73948C64B07AC
-:100CC00040C4308CF4FEC6D72FACC6D445CF579A5B
-:100CD000E028D5ABCE764D07095DCFCB4EC7E3F00C
-:100CE000911BE3569A76AC60E376103A867AD3F19C
-:100CF0005DFC657C6F3A7ECF41C7E3D0F8233C1F93
-:100D0000845D0519CF85C5F9D9BC27BED9A7BD25F6
-:100D1000F4427F789E2331B8EAFCC6323FCAD7CE70
-:100D200087EFBFBB90D1792A414CF723C78700E1F9
-:100D300093375D47AF41FD78F4198F86EBFD0DCFFA
-:100D4000BC44E5ADFB8917DD3AB5BF2120117BA37B
-:100D50001B7A7E3AD1FE982FB14C537B30E509A522
-:100D6000E9353F7979BD1EA2DF0FD1EF492607F3A0
-:100D7000937BA74B19E8F7AC9FDDE786E4008A97E1
-:100D800079ED7F72D373700B5DA57148CF4353F03B
-:100D90007B367A8AF96B38FFF32D746D67F29B4DC1
-:100DA0004EBBB77A548C6B70D2B9DBC5F6094D498E
-:100DB000E9A54C7417EBE0E99EAB3EE5946F3EEF7E
-:100DC000FEE4BBFFF99C1EBEB6FB751BDF08BC1D15
-:100DD000FE28B3DE3FE897381CCDF525C37BAF83F3
-:100DE0002A44CD416569780FD3B7C948FA9042DFEC
-:100DF0003B5DD6F11CD5DF4E3D313F8B9DFD37AEBF
-:100E00009FE6EFDE3B12F5D9E17D4F517E9CBFE3BB
-:100E1000901BF737CF6F7FDCDD5595E67F5C17AC15
-:100E2000EF5B1C7E74EF48AABFB1FF0CF439C6FB20
-:100E30006FDA63EFBF69C77BB6FEE79A1D6EEA5FA4
-:100E4000ED679CB755E34A9CEFDB9D2EC07793DEA0
-:100E5000EE50EA33D9412FF175B127AE2658F3325F
-:100E6000FA27957CB78EFAAF75B1F112BE9B68BEBA
-:100E7000E862EF56AAC6CB1E229FF13CB78EFBDE7E
-:100E8000D6E015A05BF478C2814FAD50ABC5FD80B4
-:100E900036395A6DDD7F09F8F30CD906FF8260FD03
-:100EA000407CEF0AF7713ABE53A14698FF3A34A549
-:100EB0009EDE7BD464CD9771DD66FDA1DF0EF9DF88
-:100EC000A5C9A05BF86BD4A42BCE45979D0ABA6D3B
-:100ED0003FB066323B0F16F35F33183603D1C36B56
-:100EE000A4A307F09D08F352166728EC3BE0FBFE35
-:100EF00010EEFBCB7ADB7B60183AEA23AA8E7436BD
-:100F0000BE61B9E79C8EE3055D56309E39423701DC
-:100F10002AC468108617E36C87E3BEAB83A601A2E0
-:100F2000DE309D98338CF1371CA5F9B5F57FA171A2
-:100F30008F8539D1513903309F2FB179A4E83E4FC5
-:100F40005CE397734A8BFBD20730593D6CF52779E8
-:100F50006033DDCFA03BF364411A2F22DE4EF4BB99
-:100F6000C63751C2F508E73908DF69C3478E2CEF51
-:100F70007088F8C90122EF18076B6A357C09A6A2B0
-:100F800019935CC3F17C3F21E1FC4AA083A6A5D064
-:100F900049D37CAF26A914BE57A9BF4B86BFC0C991
-:100FA0001C077CA760C73BEDEF5B15FD9518A1639F
-:100FB0009CEF73EECBB3C7237D3B87E9991B73642A
-:100FC00011FF1CB3EEDBE2D04871E02B64CF93F548
-:100FD000C8414EECDA1C0B9F29814E165FE6D82FD4
-:100FE0005FAC2CA2E7FBCBC37DC7752DC5F8F0B372
-:100FF000B297270678676E050A3FF383495E16E7C6
-:101000006D80AE59F91163796AAC719386ED3D1D1F
-:1010100017F2A182783669EA43B922690EF215A166
-:10102000C34ACE8741E8E29D1CA5FE8F2DEE581CD9
-:10103000F97060794C62C1445189F9D50CC5CA0771
-:1010400072CED5C57DC56DC174C22796B899FB38DF
-:101050005D541554FF68846733A7BF933FED71B0AB
-:10106000C2AE0BF09C87C7E3FDACFA77F4FD17B571
-:101070003040E35F02D5AD37E2FBAD2A346BA857B1
-:101080000322BE25C2E216C5BEDA57698F17F538AE
-:10109000E2635D7CFFDE2B5E9CAFC777E0870C765A
-:1010A000B3733D7E3827739C138CCB1C9728ECB40C
-:1010B0004FCAFF62FFD9E8ED7C9E02A11934AE53FE
-:1010C000E57E8BDAE91AF5B71FD921B1F7361CFC9A
-:1010D000746467EE48D49728CFF87E790EFF2EED22
-:1010E000D8BB17EDABD6101879F954FFE90AC1FF48
-:1010F0003269945722E9BC5DEFFDE669F4E3EF51F4
-:1011000000DF753B42E6D889F3548D3C245A0EAC7F
-:10111000B2D1F993CEABF7392693BF9B34217F012F
-:10112000DAEED80E89BDF303E7DE85EF5D351D707D
-:101130004192941F03D6EFB1CDCC6EB8EE178FD786
-:101140001049808D1C1E5CBFACEB4C41BD1F740B65
-:101150009F84C5BA601A9DF8DE7303C7CF8068BE4E
-:10116000AD9E98DF3BB3EA0F50FF4F8CBDFF3C7044
-:101170004689AD7FE0FE119DFC43BEECE5679063C0
-:101180006EA0EB4A343745ED20B29FC6FD47528A28
-:1011900020DC4E7FCAFCDD125DCFAE27EB19BEC747
-:1011A000767DD2B11F75C45309FC3BF9560E703BD6
-:1011B0003200812C788EA4AAE9F92C95BB9B7EA1E4
-:1011C000507BECA647A4248DA7EE3A2B1728DE15FA
-:1011D000EA977A039AEF242B4C9ABF1DF8F384ED1B
-:1011E00078F7E976BCE754DAF11B8CD8F1E8C473E0
-:1011F000EEB861B6FA73954637653E8EEF4AF20F48
-:10120000F14DF4249DC77C328F94DE1B9F73F6ACA6
-:101210005986FE927EF1E8C0DF390EFC1D873D7BCA
-:10122000592944BD4596F84F3545E5CA2987024FEF
-:10123000A55A672DFD1609523F7598772235B0766D
-:1012400025DE0E2654A323540E459C724ECFBAFAC7
-:101250003A9C24E9CD97EF3F340BB2CB5D478B37F7
-:10126000D2E0C2F371883454E079B946D3CD58FF47
-:10127000BCBED65B838EE7828886E91DFCDCE44831
-:10128000157B17A923F54111DA7F778C3E7A19DA9D
-:10129000FD4DD74294BECB1464EBEF2E9E4E0EB2A2
-:1012A00038EBDBA33218E82FD8A32425F44369C612
-:1012B0002F2E42BB6D8F4BA7EB9F76F437FF8B969B
-:1012C0008FD1F01CA3584E8CC271497DEAEF3FB21A
-:1012D000E7F5D0772DF651F7EE7567E3FAB4498656
-:1012E0003999F6010D01367E77E55F8A902DE77911
-:1012F0008FD27DF9F22EBB9FCDBD8BF9E1E6EFBE1B
-:101300009CDAA3FB67B3F7389F38CCEEA54E51AEFD
-:10131000FEEA97487EFC7FF0778CC0983AB38885C8
-:1013200072203DE33E826782C7F53C7EB3E9AF326F
-:101330008DDF1C7F214828AFE3FF08111351DB3CF0
-:101340009BAE574F87A61CC074F21E89FA8F9A0E67
-:10135000B3F56D6CA7DD4F74FE64A21748FF357BB3
-:10136000987FABA68B9D0F9CFFB2BDDEF82E7B7ED7
-:10137000423FFCBB24C0D7AD10149D4E7CEE1E979F
-:10138000B122C0CED3E8BDB2889A79FFD515647674
-:1013900018C1079DFF91A3105942E671A4A1A4169C
-:1013A000EF291DF9809D371CF948A9CFB4BFDA1287
-:1013B00060FCB2C9CDCE8F37CD0E24179379EC9B4C
-:1013C0007DC350DC57FDE3DF6243B5BEEC12A222C1
-:1013D00064BA261AB9300EE5A395DD77834471A669
-:1013E000F793855C083911F2513CDB1FCBE4171DE4
-:1013F0001664FBBFBAD99512C66F773F2BD133A6BF
-:10140000EE2504AE3EF068C29241084FD3EEF7A934
-:101410009FC2BB27B3BFFBD94088CEBF7B89B978B9
-:1014200002C1D7F788709B280FEE4459A6FE4D588D
-:101430004FFD57DB028C9FBBBD6C1F0E6AA218DFED
-:101440008DE8DE3DE9D26504CEBB89FCE1FABDC979
-:1014500015A1709BF380BEFF07FC7E61E965B0F5C6
-:1014600076CB7EED40A0F620D2FB6080C51F15C470
-:101470002212C21DF9F84408FB3FF2A187D2AF84C3
-:10148000FB8B44BB23017E0E17347E43F9654E214E
-:10149000558A915828D23006E0BCDD04DF16FD9D48
-:1014A000A69B49C7C98F01BD479F1F90D97918D9FD
-:1014B000A7E1FEA309C48F49F72B42FEF0D29B6A35
-:1014C00089BB97F648A920D19FD5DE400AFD32F9A5
-:1014D00073647C8387D8A35ED65FA7DD6E450D8CD1
-:1014E000FA177500D03CDB1F097D2CF4786B1ED3F6
-:1014F0007FAD6B54AA1F37AB5D3EF44B97197A9DB5
-:101500004AC6CD57751A6F31780E93F79CE1F7E60E
-:10151000F5D84513001EFB58C9E81F392B28F015D4
-:10152000FB07E26BE481A3FBD0BC8AF8A000E93D95
-:1015300085DB3DE3DF65FA48DC3368EAB94760D70D
-:10154000479B7CDC8E81C4EFF1DCFEA9BFAAF4FED0
-:10155000408FFE993D85AEA7A0543D87FC35E157ED
-:101560007C7BC0F50FD9ED51BC9CFF422C8E7038AE
-:10157000F5CD38207A49EA5FEF38E94C8CF09E7C53
-:101580002941CA980344CE2CED9D7A6A6090AFB38E
-:101590005C4F1D8789032FD6D3FC347A61E4398FE1
-:1015A000857F849E4AF35392E2D5398E04DE9EBC39
-:1015B000361CF5CB0B0AFA518ED4B2BFF393E2720C
-:1015C00094F741F252E487F57B2EF121DFEF3C30B6
-:1015D000C98B62755398DD3B53F74E3781B38FF556
-:1015E0005CD9055E3D5089F890291E148DE42DE3E9
-:1015F0001F4B48FCDEA59E3B3DC3FBD822BD29CC3A
-:10160000EE95ED3C302C97ED475394EE3D7CCFFDAD
-:1016100017422E04BF3BF95BC8439CB4922D7684DD
-:101620002275F0FDA3DD8F10E776445CBC3F6316A6
-:1016300053FB7001B70FE381112BF1CF1CB4A6EA65
-:10164000343CF758101C46E3AB170C60F873E243C8
-:10165000A44D1F127BD11207DFA41EA5FEB1A60F59
-:10166000DDB6EF02BFD9F022F07B01E257FAE4F8D1
-:101670003D3FC8E8ECC4F3A79D7FE94DE332DEE7C8
-:10168000FB5799FF04883DDD45FDB1EC3E89E0370D
-:10169000A13F6A6E6E8BE7E8697D21EE8308BD236A
-:1016A000F4CBF98D89E77232E80FA7DE88B8B4EF82
-:1016B000AE22F88BFC2C40DFEB70EA910FF09762C2
-:1016C000EA77BB2748E07DECF9B765F49B3CF15322
-:1016D0003277521ED93B99F9053B4FEDBC4BD8AD43
-:1016E000C25E75D613F6AA5877C479D3AF83B18793
-:1016F000707C693791A710C6C7B27DF28140EC11AA
-:10170000FC9E4360F6632C6065AA8CED67EDF29A4F
-:101710004D3E731CF2D79152D93B3201F62E9413F1
-:101720000E317E4390BF2B40B80EED9AD21A6083E3
-:10173000CD67EF06948E8418AECF78BD14E7F92BF1
-:101740006E97BDC0D71B911E0844F723FC2E154C85
-:10175000CFE84F0EB7F02FFE3A68ECC3FEBCF5069B
-:101760009DC7200D2268EF0F523BA4088123BF5173
-:10177000977A9C3D625D27FD0D9AAAD7A21C0DC2E7
-:101780003B05581FEDA30CF4F97390C535CDF376E6
-:101790003D8F267CD3D4E6FA501FE7EBE9F7102201
-:1017A000DCCF658F0339F2CC4B83F1FCF3B51FBC62
-:1017B0001FC473ADFF548F0611CE3717FD3E88F757
-:1017C000215E5BC4F61FD738EC9CE31C7FD343D16A
-:1017D000C341927EA7E5E31ADB3B240BD9F9CCF594
-:1017E000490537A53DFC3E777B0EF5ED89FCBC8EA7
-:1017F000025B5EF0E93C0F8BDB72CEBF2AC4E2686D
-:10180000AEDFB1D53D48C7F163FF85E3BFC9EDB891
-:10181000377705A9FF43C0336BC72837E2E13FF7AD
-:1018200078F8B97FA78BE1DF988AE773314E0A27F2
-:101830009CCF3F9B43FBBB768342ED8E9964AC8586
-:1018400084BF637BAEA7FB70E73CAE7D4D9F3290BB
-:10185000D0EFDA1512B557B1FE22C20FB185CBE930
-:10186000399E739E334D47FC08B72B9C7126D7EDEC
-:1018700061E7EF0DA0AF9C589621EE64CFA5F4DC94
-:10188000EDBA7EF63D65216E4FD4C0F918377F1C46
-:10189000AA7E58A5F7BFEF79B3056810D9DB2D5E96
-:1018A0009A1E6ED158CAF5E7DCDD7B9FA77CA67631
-:1018B000D6A0DCEF3CF07ACEB7F4B41EFFF2D6F738
-:1018C0009FBB87E4C700F3F3087FFBD51CEF1771BC
-:1018D0007D7E1DB717C67CD8B73EBF1AF131B2372F
-:1018E000BC428F5F8D7F6FD08207A1D79DF838767D
-:1018F00060780EF2C7E490F3BCF9D3E1255BBB79C5
-:101900004AE67846214787838CAF1BDA2F5F564221
-:10191000C68F3FF3C6902EA6270EA29E107C0AD03B
-:10192000EC463976F2A3E0931EBEDBB39AE249F0AF
-:101930000791AB303FE70CE3FED0C97FFDC537759B
-:10194000BBBA86A05E70F259B7E35EB448AF083107
-:10195000FF7B836E4CC1FD2A596E96B1F340A68F72
-:10196000DE5413CFDF86F2DACEE465DE938FFC041B
-:10197000F5D00D3FDE10423DF4969A28C2F11AB719
-:101980002D0DE1B9FA9BAA19C2F66F25958CF18F3E
-:101990003B4292784FC31627016DE66528C7FFD8F2
-:1019A000E6D2F01CAC69BB879DBBEF6278237976E9
-:1019B000DEBE2B739CC40D0F6C28D259DCAD3D5E8E
-:1019C000A2DD45FD17E85FC361B29D17F79C3F7725
-:1019D000F47D9EDEB48BC7D9ECBA3463BC84884BEB
-:1019E00070F2F16607FF12FC50BF9F49E0A2EE764D
-:1019F0007E4E1E7FF0AE9187087C87DB7F1592AA12
-:101A0000ACFE78761E7FACE3BB3FF2CAD9F9B79B38
-:101A1000F37BDA9E48668C9F6874A542B8AF6ADC97
-:101A2000EAA2FBC0C64714FA5E1DFCD143D7F3B946
-:101A30008FFCEC0F1710F8E63EE62A9CCAA641E39D
-:101A40002404BD7AE258387D6E78FC67EC7C59E757
-:101A5000F12C9C4E731FDBEBC6B81C273E2775ECA0
-:101A6000757739E22028BD3A0E4DA1F7091F3CE1F8
-:101A7000C675F6AD67251858D6BBFD9CAD3F0BA1CA
-:101A8000BE403CD138004EB7EC714BA9CB7E5A4DCD
-:101A9000EB51BF5D7F745C84B23896F2FBA33F25A7
-:101AA00070CC79C543E3A7E63C7A338D337A436D36
-:101AB000667C7FEFD2225C7FE7B8CC228DA6ECFB60
-:101AC0009C2DB7507EBCEEC55B8AF87DA462E6EF24
-:101AD000318B719ED76EFE269DE76C88517E9C737C
-:101AE000AF12453FCB7115EA1FCB2037237299DC2B
-:101AF000BC719F071FD38137B89FD3FC9DC2FF5E87
-:101B0000A4F3BC8ABD1B739CEFBFFF19EA396FF4C5
-:101B10005AF7634DEDCB3B914E6F0F36066A349EFC
-:101B2000403539DEE8FBEBCA8B170FE4FA8DBE7740
-:101B300023ECA049F81DEB77BAE8BB379676B67769
-:101B40006B16F0F109DC7EE93C921665F6837E3374
-:101B5000571271F02CFE46F059363DD0CEE2593E78
-:101B600038C8F40CC6E5D0F24E576AA02D1EC763E4
-:101B70007B17251D67E2E2726E2F2770D278991EBF
-:101B8000FC3E2B25F11D64C12FB3D77BECF1793DD1
-:101B9000FCE37CB7C71E3F739DC32E1369AFF53FAF
-:101BA000D7715EB7F9D4E2671A5D491AFFD4F847D6
-:101BB0000FDD9F343EE28A225EDED9F1DC1FBE4596
-:101BC000F8FE9D0E21C776BDEB94E3393BC7422654
-:101BD000397E2710818C724CBE6794E340FA5C43D7
-:101BE0008733AF77AFCBA277BFEAC027B11B723183
-:101BF0008EF8ED87E60EA5FE0A077E85BE75EAD152
-:101C0000D7433AC573EF783FB6EEA7E331191E0507
-:101C10007FDEF0F03C3A4E0F1F0B3E157C9C256E8C
-:101C2000CC894F67792EFACEC6F6F68B9875508917
-:101C30007FA729EE06F6DE9BEC8F20FFF677DEF914
-:101C4000DBDC32F1FEDB796C5FC8CE3B23010DFF9C
-:101C50006205DE9753329DB34726C919EDFF1FE495
-:101C6000323B09DDB2983E99CBF0D7AA44B923AFF5
-:101C700083DE63A067AB08675E88CA998BC7A990AB
-:101C80009EE97DF4488EFCBE4EFAB8FB87FB2F51CF
-:101C9000D13F3B46BE7938C9EFFCE1CB97A884DE43
-:101CA0009109F2E3C3487ED70FFFC8CACF93C7B8E4
-:101CB00008AB6E375FB96432C9CFE7F39E2FFC24BF
-:101CC000AD636D7E12553E74279EE7A83F657F8FFA
-:101CD0006825917BEFE8F439738E074C1FC9E7B88C
-:101CE000494AF2CBCA7EBF0C3791BFF2C736E652E3
-:101CF0007CD5E988E7C39A97C6EF2C78EA621A4741
-:101D0000FA642EF3479FFBF804FA771DCF201C0FCF
-:101D1000E60EC80E47AB8BF57378E7B99310CFE7A3
-:101D20000E459F5A9A1EA3559D7EF711B49BCCEE8B
-:101D30000FE3FD96789E9BF6F324E7B3534D45DC05
-:101D40008B92C3F842C9959B1F23E9B39C1FFE7772
-:101D5000AE26D621BAEF3EF2CCC0FBD8BB314787C6
-:101D600020BD15E5D89FD1DE3CFAED1CFA774B5E1D
-:101D7000F133BCBDE26778BB327795EB1CF27DB4E2
-:101D800077C8CDC8F4AF483B6EC174AB16FB25A332
-:101D900007A4B0DF6F5DA3B07E03CD417C374E3228
-:101DA000981D2E1166BA9AE0236E80EE1E8E226C6C
-:101DB0008FFF5094D1475374FCA06D7C2825EB26EF
-:101DC00091F32BC7337A11DCD275F4A5712C2FE077
-:101DD0009B911C16EFD2293C7F4278467992837101
-:101DE0003FF52D625631BEB7EFEBBBFDEC7CB31B6C
-:101DF000DB8F4CC70F34FD4DA6FBD9269C03C93F92
-:101E00007E18F8DF2B64EFEB08BFC7F85FDF44FDF7
-:101E1000DFD5BBE7B23813EEEF12E7F935FBD9F99E
-:101E20009CD3BF350156517D3ADEA14727ECFE2AEF
-:101E3000D5AFFD9DCFFD43E8D5122839CDF3B98F3D
-:101E4000734FE17CEEBF013359118B00800000001D
-:101E50001F8B080000000000000BB55A0974545590
-:101E60009AFE5FBDDA92AA54AA2A450804E34B02FF
-:101E700024210B45122004D42220D0314A8016811F
-:101E8000F64881B298AD98B4DB699D438520D2DADB
-:101E9000A319756CCE69BAE785D61125E92924D135
-:101EA000E05432C52204254E9045A01D3BED74231D
-:101EB000DA64313D824BF761FEFFDEFBA82541E984
-:101EC0003E67C8E1DCBAEFDD77DF7FBFFFFBB77BA2
-:101ED000DFBA4409600CD03F1D2403D49BF1970264
-:101EE000307C3C2311F200F47A00D9096054642854
-:101EF000C1F62AFDBB0DA06D338E3385FB6F252AFD
-:101F00006C9EFC53F6FBC1462DAC86828879ED7C35
-:101F1000DEDB652B4031CE7F1154533AC0B4BEECAA
-:101F20009FCFC1BEA1DB002ABD979EA0FB6775AA0B
-:101F30001F459B71ECD74521BCB435CE560053F1FB
-:101F400095293A50CC6C5EB88AFFE3947850B2C3BE
-:101F50007D4BB633AA2FC7DB764122FEF07B7A5346
-:101F6000508E227E0B12DCE3A3E679DBB6A89BE45D
-:101F70002EB2AFAF20B9134B32A2E681E3FA4FFA8B
-:101F8000B09F8D7F573300A643656208E52F844AD2
-:101F90008F84F2BA3F027708E59F718A8FD39E73D0
-:101FA00087FCB217712CF928FA7A2944F4719EC77C
-:101FB0003EFAC27138429EE9F604D7050BFE180FAF
-:101FC000E3AFCAA3E2E80E114EA76437AA01EA8F75
-:101FD000E12017B69F810A88DB3428480486AB0CC1
-:101FE0002AF6DF04EF0B73B0BDB279C871785218CE
-:101FF0004F87271ACFA445D1788EA98CC673EC8A57
-:1020000068DCC679A3714ADD3825EAFE4D9B0AA338
-:10201000FA373F561A353EDD5F16D5CFDC5E1E35EA
-:102020007E52D3D2A87ED68E5551E373D4B551F7E4
-:10203000737757DD90FEF303F551E362F53FB5E3A7
-:102040002751F396CAF7CA9011E6811FFF880785CA
-:10205000A462D23FEA210423F53FD3E527C6FFCD92
-:10206000FA7F98F49F1BA17FF9DE44AF356C6FB106
-:10207000ADA6D79FD05AC7905E714E14EE0AE919EB
-:10208000AF0D1AACDB256C1DC89D7BF1FA63667E33
-:10209000FD5181CF95B83495D6EF081EFD5AC21672
-:1020A000D5C2ECD0FFB1456D44DE3C2A2B0DC4AB4C
-:1020B00017E54A09509E54549D2E1379A4838D012F
-:1020C000E4F7B33ADDEACA08F99EB373BFF29C5D48
-:1020D000C7DA5F18D156F1BDA916F09B0BD973B4BE
-:1020E00036FAE7015CB72D8981822F2CDF3E7F0E07
-:1020F000DE77F4652B0E0033F56F01381FCFE53D19
-:102100001FCFE55C65521AFBC87FC8EA2492A7D9A5
-:10211000EEDD69C7F79C979E30E09BC1E0F21BC8DB
-:10212000EE52CDE0B7E1FB1A0DB0BA12FB0E7049CA
-:10213000F5D826C24E3BE18B622857911487AA72CC
-:1021400013FBF0FAFB24D138B231B70E6600ACD4E1
-:10215000FCE1C61CE60F87718DBDA450BD9208D866
-:102160000E3F90C9AE9FBB0FAD10EDE99C91E3A16E
-:10217000E17051F8C9CF379B597B69B33DCA6F6E87
-:102180006C7E2141C179CE65C3A240047E5D84DFAF
-:10219000746A6586DF80FAC764826770DDB7934929
-:1021A000689FD4BBCD8A439EDAF10F95807A30B612
-:1021B0002DF1A34E60A55161E3B5797CC1B94038DA
-:1021C0001063E9FA3D1FC22692EF9E6FB18D785FD2
-:1021D0008FDDC0DED743EFC376393676C46D39EA7A
-:1021E000C541EDD1390BC82EF07A48C2FEE26E30FF
-:1021F000903D2CF1A61B489E93E03EDD8EF29CB5EF
-:102200002BECF91F42A581E43A735F6D028DBB365A
-:102210009F360F0AEBC078F2A1C36F4846BF3574F2
-:102220008BE4DEA5B0F799E97AE5BDA94F5A95F0A0
-:10223000FBCE80B7FF34EA7B29B8D9BCDAFC6879D9
-:10224000517EF18D8DD5BF4BCA207FA80333F9C3D2
-:102250004E13F3878355575A5FC2FBAB53FB6E3265
-:10226000E273E7ABBE9D4CB8ACDC218382FAFF245D
-:10227000C1FB07FBF4301EE71EF87302DD5F6552F9
-:102280005F7909ED00F698DCAF003DB7873DA78D7B
-:102290001BB0CFFD8C78072508D4ACEBDBA786FFFD
-:1022A000BCD773C612CF347E3D28F855FF5AD65896
-:1022B000E2537DC2357EF1FE2B9963895F3324CED4
-:1022C000CBD879BB905F4A16AE1B79A520AFBABEBA
-:1022D0002A4B223FB1EFB8B388E4D483F76AE4BA5B
-:1022E000F6BDBF2A97EEC359D70DC94BB6E947399A
-:1022F000EF012E678FB08F15C1A422D23BDA9DC5A6
-:1023000081E356FDC76BFDBF257C3AF7BCF2388DE3
-:1023100029BE313C34FFB4379EC7231071CE2D70D7
-:10232000C13897AD47510721DE4DF9C2F5FCD65EA5
-:10233000F20BC8AB2B3A747C99E4AF2A81FC82057E
-:10234000DC0AB5E865DE9B8D7A6C3CA083A7B16B97
-:1023500023A7A6F99F12ECCB3AEE7FB06F4EC1389F
-:1023600022FCD324C7BF2EDACAECC7635D3383B91E
-:10237000442657F1E1AA0A7A2FF4A21F47592BF1FC
-:102380008FE2C16CD874280EE59CB103F3031C37AF
-:10239000F32CBFAFF9F55921DD1A63228DFBD91754
-:1023A000B28D208A8E03B30F977F4AF3CE8688E7DB
-:1023B00046890FB31C7F5F7C98EFE0FE2190CDFD36
-:1023C0007B2014AFFAD3D9B44595F9C817278F1FCE
-:1023D0002D8839D9B1511AC836A31F5EE468DEBE14
-:1023E0007D02D26122C785FA8DF45B29623CBE96DC
-:1023F000371E9EC2FC21FC05A522BCEC42E61879E2
-:102400008AD1EE78307647E59DA123DFD8FA701D9A
-:10241000AD4EE5BF485F4398D7905F88D3F7191D4D
-:10242000A3ACEF4DF2AFC8FFE71C3A26AFB943F2B9
-:10243000A8F87EB3E20109D71067B74F93A5F0F86B
-:1024400032078F4BB547CEA719515FFDBAE3B63CB3
-:102450009CBFA6FD0D1B2E1F7E6CF3AE73E03CD51A
-:10246000E73E9841A10B199E569940386524923D4C
-:10247000E5EBC1AF2F1C29876F072E06295FB72315
-:1024800089B5391D125B9F2FC4D739D0D1E88CF4A0
-:102490001BD79EFBCFCEF1A4B73D636005F9E3FCEB
-:1024A00060D106E231C962405DBCFE552E9BEF094A
-:1024B000473ACFAFF5A0A7EB00AA6E290EDA63C0AA
-:1024C000E770DE81AF64364E9B37BF63AE6C471E4C
-:1024D000E5859A0E525E18173429A4E7B89781E370
-:1024E000128C637ED1D7B510287F1D74805BC2FB30
-:1024F000ADF1431F132F863A4DCA2E89F06B022788
-:10250000CEDF6AE4F133070DE10D6BF8BAF6BEB821
-:10251000E0CF81FC15F2C3A3D27D7D13DC628DC4B4
-:102520003D81C9FF4B07E7576B7C486725BF8F9CF0
-:10253000DCC5E40ACB09ECBD9A9C39AC0E68350EBB
-:102540005D78DCC5E4B2131F7280CB09C12CE515A0
-:102550007ADEEE61EB88B32B6EBF34522E5F01E65C
-:10256000C56877CF6E816B764E76EF8B0FF7CD68AF
-:1025700013AD1920FCC229968784FBE8B04AC2CF6C
-:10258000BFF1CF67B66F9DC3EA23BF8C7CB0609B61
-:10259000E0A47572FBC2B2C933A690E3E0469C2C5E
-:1025A000667EFFDA78E4BB95FA563ECE9D68B79416
-:1025B0004BCC6E80ECA64EF89987A4D085DB50B545
-:1025C0005F860E1628284BCDD1B7196FAB75C19712
-:1025D000F2F17E59BC3748FEF7AD8F7460C3F57FCA
-:1025E000FE5A9C5A817864EF6F4EF65847CEF7D466
-:1025F000D92DCFA792BEF74B0A228D79E1501AC987
-:102600005717FCD4E8C17661C7EF8D149F5639BDCA
-:1026100047C80E4A3A1AE6117EB3A0A9D16E657E6C
-:10262000D14B3C0DA470FF317C6AF2AE8608BC2F02
-:102630003978DE0243DE9BC96E82C23EBB28FFC1F1
-:10264000B65DE461ED0756662AF9E1E7FC703015E6
-:1026500070CE2D70389570D6AE0FAAFA45C4A7DC9F
-:1026600033E6D59E08BE5D10F67E41BCEF1F9DDEB1
-:102670008F0887EA039F186DB82EDF1F0269149F29
-:102680000298A7D9BFC32FFA62ECC6A71F32D2782F
-:10269000DF45607E04F5BA3511F5B4E74CC79435D3
-:1026A00056263F24E2BADBCF9998DF6C4FE7F6D786
-:1026B00070FA7201F9ADCB9DD537135EEF3B0C1A62
-:1026C000CFCBE2C99EF602F3639A3DE6913DA2E8C4
-:1026D00079C4F362EAE7B0F95A8DBDE5CCFEDA754C
-:1026E00040F6873C67BC479EDB29FFC8B323EFD980
-:1026F000F359CC9E5B7B31E061DF8F7E7C12EB97E0
-:102700002DA37E6BEF7C3BB3671D425B4876193A85
-:10271000C8E609604C23D549501999A796396C4CE5
-:102720005ECD3F563AB8FF0F642B896E5C8F45969D
-:10273000A3EC20225EF2BE88A72B9F37FCF4C509CC
-:10274000644D222E88BCAC4BE4C1E02D62FEFEC776
-:102750002296D5BF53BAB805D75BDF2373FF2F7816
-:102760007250E4C98737A7B03EC50B05F5341D5B31
-:102770000FFAD3199E4DF3D0C6A06451D3216A4BF2
-:102780002B03F3107198B3A2F790819B732EF1AFD6
-:10279000EDE00F72F5C4F77326884311DBBE19FA1A
-:1027A000F875C4E1912EC47F94B884CB61FC4304D6
-:1027B000181FAFC79B41A9EFAED96E4CF99F1FFB05
-:1027C000037D1CDA0F1103F1C87B7ECC4FFD28502E
-:1027D000BBD333D58938FE36C93BD589380E9EF830
-:1027E00026997C7AFBA94F6CE4EFDB8C9E5CE25966
-:1027F0005B06D60BA3F0738293F3A7D8149DA76B47
-:10280000ED5227E7FF643F3C43FCA96B93ED2AEAB6
-:10281000BBBF4DF618318FBAE0F126EB11D28BE039
-:102820005F3E9BE2BBA87FD771D8611DE52F18677B
-:10283000D6BF6888AA4B6BC4BE4616F46D4B459C48
-:102840007C2F4BACAEDD18938FD450FE5240F54533
-:10285000B391D653F572CC3C94C714D0B8EFAE7395
-:10286000973AC53E472664521E833C62F5F4D06910
-:10287000D9BD8B62A01EBA4DC8DF3D3A8E13FA4D0A
-:10288000668F5A3E637279E691DDCFD3E28AA85B08
-:10289000875A2595D9CF6EF4F3D82FBDA83403C736
-:1028A000E154CA0C5A0FE765A99E8F2F0DA633FB82
-:1028B0002BF1603D8FEB5E8FF5BC4AEBD6F23CD539
-:1028C000C0D68FE197E579B3406DB4E1B80DBB2573
-:1028D000B6EF53BDDB1095E7F9043E353B4E1CA126
-:1028E00072B23610735FE0E38BC1E70DFA316B24EF
-:1028F0004E8F3A45BE97066991F91E743B47AD0B62
-:10290000347CB43CFB4F069E5F7C20E6D7C6FD8B33
-:1029100093D7E7751E60FB4735AAACAA3C1FB4AE3F
-:1029200041BEDC2FF872BFE08B0FF8B8DADD921AE7
-:10293000A278F533AE7733FE112EEB026B16A42A84
-:1029400023795525F0D8D86260F92FC02623D9E71E
-:10295000C69D31E3042E5531B8D479A518F9783ED7
-:10296000FEB7CA576DE0FB35D5C82FBFF2FF276F02
-:10297000ACFEFE5DD3DF149812A5BF454937A4BF56
-:10298000D83C79EF9129167A7EB83B83ED4368BC39
-:10299000899D6781C8B317EEE0F9687FC73C4B3E5D
-:1029A000D553C7F56E09E729EAF95F5B3EE251D8D6
-:1029B0002943054E31182C7AC68FEBDCD73D71992F
-:1029C00082F1A1B047CFE24B514FA14A754D614F03
-:1029D000A1253381194F12D50B380F8BCF83C72711
-:1029E0009ECC233FDB3DBF98606F385E68A13C62A0
-:1029F0001FF07D0DA9A738A92F22DE743BF9BEC6B2
-:102A0000B694FF7996F2FC857B0D6ECA47161A863E
-:102A1000DE9FEDA2F7EBDD0DD8AFE959BB258EF4B3
-:102A2000FE9AE4A674FC486FBDEB47A4DFA0C16E1C
-:102A300062F23E7C90EEFB5B24F7241CEFEBBC3D86
-:102A4000B715FB85CD456E82597B5FA14379A18285
-:102A5000F2C5711656C72FBCC9C0E2EEA5F1965F4C
-:102A600053BE54E5695E40FEF8D2DBFB8CE40F06F2
-:102A70005B2548C1851C4939F41B3FAEF3D29B2727
-:102A80008C9494CF6B3B61ECFB8E7CA25F9521C450
-:102A9000EAF72623D541B5CD5ABFCF487AAA14F913
-:102AA00055DDCBBF67FD2AAA13F07D553B6555C1A7
-:102AB0009F873ADF3212DE752D128C4D8FB8FFB230
-:102AC000C4EE6BBC5F0B9C076B857FAA16FB90D591
-:102AD000B40F89D7613BF7371AEF1FD8BDE40885DB
-:102AE000EF754DD17EE841C1F30D5497B2FADB6B1F
-:102AF00024BD6ED811334EF0FCC1EFE1B93549F871
-:102B0000F31CC8219E5F9ECBE3C9E513F1963C5CA4
-:102B1000D7E563B21BE03BF9CEE2EF71912F0C8752
-:102B2000742C9E69E3063AFECCE28DEFF8B091F288
-:102B3000DB05C12F983E2A8207E613DE7782B7862F
-:102B4000F0BB3368B193FD57F4717F501E34A9B4C4
-:102B50000F7E2704B6929E07BB5EDDEA24DEFC1BD7
-:102B6000E70D087FB741E0BA41E0BA011D7E12BA15
-:102B7000D8AABC032F61BA0FE5C0FD507940F8A177
-:102B80009DD13863E4B98FF4551734C1D378FF0E63
-:102B9000E18FEE68E1FE28364ED6897D80C171B99D
-:102BA0008BD97E2BD6BB94C7D5B444E35F27F605FB
-:102BB000EA62E2F0CD497CDFEEFBEAFF583DCD8DC5
-:102BC000D153C510E74F39C53D5C7F77684B1EED8B
-:102BD000DB6978C5EAA95BC94C1CAD9ED5DAF7451F
-:102BE000DEAFF517237129DF0CD89BAC9175FCABD8
-:102BF000493CFE54CD92FDA4E76BF5CEC443058A53
-:102C00002E5CEF609DB332690CAF7BA6E1D4472701
-:102C1000C8E07285EB9DA7525EA828A47CA585FB21
-:102C20009181129C2F91F27960FECBD76252A94E0E
-:102C3000F1217F589D43BCC1B63228DD4EBCC1FA9C
-:102C4000611DCDBF84B68E1187251D3CEF5932FF23
-:102C50000BC6B76313F97A87F5CAD8D1EA09AD8EE6
-:102C6000A8FB8AE7A9DAF53AB47B1A5F1794585D96
-:102C7000DC76F0EBB474F49F839D57D2D660FBA250
-:102C800058BF96A70E619E9A21F214CA9FD77395DA
-:102C9000C1064C871F431EAE17710EA4ADCC4EEA81
-:102CA00028D925BEB54B7C1F673F5E9889FEF78308
-:102CB0007896C70C9CE1E743F4FC1398470DAC0DE4
-:102CC0001C76E2F8CBAD128B7FEB31C7BDB570A49B
-:102CD000BDD70A5E36C01651976D656D79F6DE4F29
-:102CE0001E277FD46256C8BF0E74341AD9FEB21A9A
-:102CF000F17CC6C87CA856F0B7F67BF6B55E4D12DF
-:102D00007152F012D7C1F2DBC163B2DD2431FC7E17
-:102D1000353E122791FFB41D8C637A1E3C61552904
-:102D2000CFFF5CF0EF92D8776F2891192EBA59BC7B
-:102D3000CDED7A2B83F44A7AF0D23E4AD75B533CEE
-:102D40006C9F4F65F654BD5BA6C3BEB0FC010BDBA8
-:102D50000BD5FA1ABE3E812FCA35D9E80ACBD5AEBB
-:102D6000EFB3B947B11B493AC8F4A693A2EB5CDFB5
-:102D70007EB9528DB0275CCF6AF26FFB053F403FB2
-:102D8000944C7EB9334961F23504B99E759DBCC53A
-:102D9000F72FE7FB3606F6FE11F7CBFC3574FF7212
-:102DA000BA05184FBEF25750FF910C99F9A9473E4A
-:102DB000A8CA8288F783C4EB719F612899D5C3277D
-:102DC000744C3EDF89E1E48956F283CDF3ED79E47A
-:102DD000DFB87F389261D948FCF6D37BC786E759C4
-:102DE00098C4E33CD07A53289B7991CF2BD6BB056E
-:102DF00096321CB6089E75897C14EBA633648FB19D
-:102E000075D3F5F2DD88FA8D3D7F79AE72F247C851
-:102E100083C2637A3FD5EBFBCE723FD1D0B9E17765
-:102E20005407FBCE9B80FCC4235D1BB2280E83D7C6
-:102E30003B95F2BBCB5D0F4E65FB97D21626979F55
-:102E4000E44BA1BCE97432E543B59DA793595C6F8F
-:102E50009FFE02E5499817DD41D7315F61FC2BECFD
-:102E60002966FCDB77BC3829930407B785E6AD3DBE
-:102E7000A6AF247C6A8F15BF5741F94B4F19CB93EE
-:102E8000B4BCA888EA71CA938E4D8CCA93FA057EA9
-:102E90008307E2D8FE8704199C3F30318A3F356DA5
-:102EA000EFB07CA2A643F644F2E8DA732E3DE38D40
-:102EB000C1A5B0F91A029287F1632F6F6B3AF6B190
-:102EC000F5551B024CDF0D2D067EBF95B7004DEC6E
-:102ED000793F38FD84C77B7409F5506E5427D0FEC6
-:102EE000FABBE9BCBE88D5C77617DF4F78F79CF7E9
-:102EF00066E2CBBB73BD59F651E2861FCA78DD2D61
-:102F000009BCDB0C2CAF8C1DB7CDC5F77B6C491011
-:102F100075DEA8B5F52ECE9F7223DFA78ABD7FABE5
-:102F20008BD7CDF8EF191DF2E26485C1FEB4A82756
-:102F3000C6A1BFBD4BF8DB65771A58DE71529C33D2
-:102F4000DDA5F9DD121EBFB5FDFE253BE1492CFFD5
-:102F5000E14BC863E7604B3CD17EEF6E915F2D5B28
-:102F600014735DE453777F4F3E35C325FCE16498CD
-:102F7000CCEB06AB85F645BFEC36D86526B73AB143
-:102F8000327FE43A357F73449C0F75A31FA4B621AA
-:102F9000E743B64FF5EE8173BF71303F1A07197CD6
-:102FA000DF91EDD7D75E67BFBEE19A9DFE308A778D
-:102FB0009A9EFA29CFCF1BA9A7A502EF5AF3252382
-:102FC0003BB7844DDB7572F89CD264F07A52711D68
-:102FD000868EB9213ABF6CC831B17CA9FF764925EC
-:102FE0007F8F72A69922FC7DFF389E7F3DB25C6286
-:102FF000FBC207723E6471BC36D46B245E4D6E5BBF
-:10300000F324B35F3F9CA27A49D3E762338F9FD703
-:10301000F4A8AD976E2AB43EA79FFB65176B693C79
-:10302000C5CBBB447C5C5C12ADBF2CE85D40FB2390
-:10303000F77824962F5D4FEF4B574C7B87DCDF8D65
-:10304000EAFF9F5CDE875D64EFBDC3CB697FF7DD80
-:103050009C4FD328BED65D87CF7E81AFCFC2CFC570
-:103060007C167E1EE6CE521AFB101FBDC3BBD9458F
-:10307000FB4FBABFD8A600CDD3F7AB7A89F4030CC7
-:10308000FFEBD9D13631EF36979DDB8B8B9F0FC588
-:10309000519FECD9A04E203F01793776CED7B0FFB3
-:1030A0006801E969E0C0B10263843E2FD5A33FA067
-:1030B000F8D2792859B146F24D27F8A667AD242DEC
-:1030C0001571339A7F97887FA4FFBD87EEA2BAB0AF
-:1030D000BF6D994B5222E26AFB49DBA48879FB83DE
-:1030E000321B8FF5D8E4BB1322E57C92C9D91FE0CF
-:1030F000F301F44D5E961F79BF919F1B99FB188FCA
-:103100009FCADEC4CEDD351EEB81F3B8AE6309B0D5
-:103110003825D61D30E20FAA33BA4C2A9D53D07EF3
-:10312000BB23C24E8E0A9C67627140FC9C057E994F
-:10313000E69D8933DE4B7D3D84E84C6E3684647EAB
-:10314000DE3D0188D73304AF67EA4307A402368E19
-:103150009D4B95422F1B772B0CB1D603763DB56561
-:10316000E0666D89397407B993BC40807D97144A35
-:10317000D63B2E98D951298CA6BFF0FAF57041E3C1
-:10318000290EC6A487EDE3C78E1B1676EFA6DA825A
-:10319000F4DC0F6C1FEE16E893E925B3F5B088BE9A
-:1031A00027BB450FE6789477EF611DB3E7AE3E4548
-:1031B000257FE64E12CF7D86CF617FA687DB2D85EA
-:1031C00020FA6E455B6F2C0EA5381FED0BCED46335
-:1031D000E5CB700CB1F7DD4682E3BAE782A2A7FE29
-:1031E0001F5DE9623F85D769F3449DA633FB191E35
-:1031F0007F12F191CE736C384F69930467E97C2696
-:1032000093AF579BBF14B3C1C4421ACFE31B6D8564
-:103210009F75F2731E1B3B9F9B6F27BCA450B2EEA1
-:10322000AAE5C6711D4C0626B7EDFEA181C78BC36A
-:10323000E75DEEE0D1B3F45D8EE4F1B0EF7ADC66E9
-:103240006B88F27364C7A5C8BCFBAA6BED5FC9DECF
-:1032500025C5CEF0022F28947F8C0D7FEF02579367
-:10326000C2DFD3108C1793C3E7FBDAF735BBD5A5C4
-:103270008A0EF5B2C26576935E0ACD6945540F3663
-:10328000DBBD7F75B1EF6C5A26B1C9F4EAF4CA848C
-:1032900030DF2DE02921BCB5737D49E8EF7AE7F6F0
-:1032A00064ABC4730BBA7DFA2EE819B417B373B4C8
-:1032B000EF8FF8793E5AA142DF1DC113F314FA2EA5
-:1032C000609BC3EC7E5AA2141FD76709AFAFD1CC65
-:1032D000BF276834F3EF0260EB74B67FF690388F47
-:1032E00068B4EAB2A9DE6A84783795F49ABC0F25EF
-:1032F000703E3EF4DF16763E1A2BF7D7F1DE9C3196
-:10330000D3C3F23F2ABBCF62EE1385E71C0D4F5D9E
-:1033100018CF156A46639FC2F09B46CF4F33A9373B
-:10332000D1BEC82A13FF7E49C30D15CA486D17FACE
-:10333000D0F0B393BE691D1ED4B7C6978C307ECF34
-:10334000C473DC0CF4E544267B56217F1D8BCBFF38
-:1033500001AF6B7F8EF0290000000000000000002C
-:103360001F8B080000000000000BFBCACFC0F0A3B9
-:103370001E8143D1F8E8389D0F534C941182D7B386
-:10338000E0D78B0D5B3122D8FEDC0C0CCA9C0C0CF8
-:103390002A40DC07C4FD40FC1E880DB818180C81BB
-:1033A000380DC84E07627B2076E386E86966676061
-:1033B000E806E2C9403C9B9D74FBCD251918CECA96
-:1033C00022F8B2720C0C510AA49B338A87267633FA
-:1033D00042E5C76BA3F2BB7419184E23A949D02646
-:1033E000CD7C466306062663DCF271E6A8FC504BF2
-:1033F00054FE5D3354FE4577080D00AEA32483B818
-:1034000003000000000000001F8B08000000000007
-:10341000000BC57D0D7C54C5B5F8DCBB77EF6EF6AF
-:103420002B9B0FC20642721302040CB8C480C14A1F
-:10343000BB89A0A0C85B502B585F5D02242004828A
-:103440005A492BFE73212104126041D4A0881B3EEF
-:10345000142BD8A0A0B6B576F9D0529FCF4645A57B
-:10346000ADA50115D4024DB5C8F63D7DFCE79C998C
-:103470009BBDF76637E0EBFBBF7FFAABC3DC993B44
-:1034800077E67C9F33676665318564E6117211FECD
-:10349000BE47C8040B21644CBC244155206309F984
-:1034A000919DE09FD6CF5C36D61312B511129B4B7F
-:1034B00048A78B76946AEDA49896B7DE28922C42A2
-:1034C00052E17D859026A1F6C8E05242D44122D92E
-:1034D000491FADCA999E1A72251F77371FF7B97A0F
-:1034E0003B961DF55E2C9FAFF761B9AF5E21D161B0
-:1034F00084BC585F84E5CBF57E7CFE8BFA322C5F72
-:10350000A90F60F96AFD242CA3F5412C0FD6CFC07A
-:10351000F2707D08DF7BBD7E1E9647EA6BF1F91BDA
-:10352000F57558BE59AFE2F3B7EA9BB1ECAC0F6347
-:10353000F94E7D1B9647EB23D8EFFDFA5D581EAB85
-:10354000EFC0E77FA87F19CB0FEBA358DE4ED20860
-:10355000E947C86DB79DB7CFA2EB1DF6C47DEF4C10
-:10356000CE2464FD18D10FE01AF6C4C7BE50717C9A
-:10357000DDEBBFB1CCE8480097EF1301C759EF2648
-:10358000D8BEFEC0EF893292907563BA7C2AAD4FE7
-:10359000E6DF19BEF3A87D5671BC9F799C4F8885E4
-:1035A0008D63A5EDB4DFD0CDACBFD63E19BE3326BA
-:1035B000DEFE54DB3BF6D92E7D3B7BFFE92DEFD8B9
-:1035C000017F6B63128922DE554268E950BADBFA4B
-:1035D000513CA71CB3115B3EC5BFD241BAE838EBE2
-:1035E000C63D12154B61DDB49B02EB7C9708140EAF
-:1035F000AA9B203D2830C6D5F1EF5C4D449CC7B056
-:10360000278EB2EFDC7A1ECB57FF211342DF5B77A8
-:103610009B1071D2F1D78DFFC217007A539FB10072
-:10362000BD21B92AF09F2E5F908EBD7EFCFB3E959A
-:10363000C269ED37EFCE980DF4379AF8E17B6B0F46
-:10364000FC9C28D03EB21BE1D7C0D7BD76E6AC3C8F
-:103650006F7172BAA49444C432BA5C17094412C0A0
-:10366000F75F0108143E166F04D7E4A0FD12E1E1F4
-:103670005F898CFDD6BA83EF015CD4DBACFE9D7410
-:10368000DED7F9A3E4942B3E6FA87F44EBAEBF478F
-:1036900089C50DF3FECC67A1EB7796C957A5D0D9A4
-:1036A000B8BABB8FC1FBAE6BAB02B0F675A3BB7CE7
-:1036B00055B4BFBDA813D74BFCC43F848EEB285232
-:1036C000C9EC62808305F16A9ECF6C80773FC0D3DE
-:1036D000573EC0894687EFDDFAAEBD52D7FF698DF0
-:1036E0003E04465FA4356A9FE68EB73FA1B5A7307A
-:1036F000FA217663FB66131D939C24ED560A68C479
-:103700009718D92920DCEDD347F69E776BF4B7C81C
-:10371000072E7FD41E4AB02ECA2776903BA9A5A2B9
-:103720001FE0B56E3CE597E2F83A2FC577CD1C2E29
-:103730006B4BA7BB61FC4BC9AD911D2289167199DA
-:1037400049FF7FE5CB0E3AF3787D7434DD50BFEA54
-:10375000C80043FF319D0586F6AB8F8D30B48FEBEB
-:103760002A31D4BFF3E93586FEE3BB2B0CF5EFC558
-:103770006E34F42F27B718EAD7D97F60E83FD13BE2
-:10378000DBD07E836F81A17DB272AFA17E53D10366
-:1037900086FE37FB1B0CEDFF52D662689F1678C879
-:1037A00050BF65D2E386FEB705B71BDA6F9FF1AC59
-:1037B000A17D66E80543BDC6113A0EF8F9C1BC5FAC
-:1037C0001ADEFBD7DA4386FA7B844C4A845F2230C8
-:1037D000394329C87BEA0ADE9F8A382FD01CD07172
-:1037E0003F46A745ED49E4246F7F66C73BF6B9061F
-:1037F000396965749CCDDA7745DE49FCFE20CE2719
-:10380000A4D33EDDAD6F67F3BAE21F54BE42BBA442
-:103810007E2BF9EAF6FAB1BF2657297D13720D8582
-:10382000AF3A5055F17B743C2A2F2D6CC9A48E30D1
-:103830003945C8BDF85CD3FB2487442D74DC06777A
-:103840004EFB1A80091D5BCA847AF136A88B4A8028
-:10385000742580ABC52B1BF064862F71A55362EED7
-:103860004BCEAA083F75222992E0FB82C3BF9CAED3
-:103870005722A101027D7E410CF960F24B2DEA6FC7
-:1038800042F9F1FECBC7D37F42FF13426405F657DE
-:10389000108E0D234900F4869A2D4776E6233C6D61
-:1038A000204FB4F7E803A58BCD57BD38D85067F348
-:1038B000BD64FDEB61C6BA36EE4F8CF0A47086FA9B
-:1038C0005DBCD26BDD7E394EB716E8C7EA8A289018
-:1038D0008B28078DEDDA772EA4784691548A473BE2
-:1038E0002B973A3CDBA0BC90921B211E428AC5500C
-:1038F00005C04DAD60F0518F3B230D385EEDD5C155
-:103900009100DFC4F602212B187F7C3859D4AF23F5
-:1039100019DE1AC06E1BA6A3831C3FCA71BA6AD4F3
-:103920006FE6FEB70B321BDF455145C7B711466343
-:10393000A996D0EDC218586D9048384F3F0922BE65
-:103940002611B04BED1A3CC373B1EEE276E601F7F7
-:10395000D863218AE7B501D90F63550A0AC783DF07
-:10396000077AC056269235B4B65679C70EFCD19C5C
-:103970002F67835CB749B5C44BEBB642CA0709F45D
-:10398000C8E21E39F120B91CBBD88CA722FA3A9B99
-:103990000741386AF30F0FEAB417005D8EA776313E
-:1039A0009DEAFA6BFBD62F2B397C5BC02EA6E53A3D
-:1039B000657A2A41BE253381BE9BF3B344E4530E9E
-:1039C000A71EB8E4BF6F073E5DCDDF5FEB7F07ED5D
-:1039D000F4D59A1E37C1B179F44984CF2C81E9E33B
-:1039E00096918E19910470992578B0BD19782A1393
-:1039F000ED2BC65F267AA12DBE4ADA6E57BC256B29
-:103A0000E8F813464A33812EDC6544B121FF065C99
-:103A1000D9F4FB0EDE5B524483FC706732BAB57F8B
-:103A2000284414DADFE563DFB3B9482480EF2F318F
-:103A3000E0C551169A4246513BE91F167C8FCE9144
-:103A4000D9114727233F5ABD6C9DA488E1C94BFF7C
-:103A500077B1808EA7C806BDB1BC5CF647E9779602
-:103A60007A5C484F563D5EE9779DDFBC1084F15784
-:103A7000E5DCE3584EC7BF50DEB40AD8D2F2E1E429
-:103A8000CF80EF2CE6FE83A6FF6E70023ED04A6721
-:103A90009787443360803BFBA403CF87ED6F1CD630
-:103AA000CDF315C19D89F2F56A7235CA854BBC7F8D
-:103AB000A13EF2C6E121080FF172E879A589AF9B1A
-:103AC000F235BDA5FAA6E9ECB2F302D36B442D475B
-:103AD000384B9C9F9BC6936EB05BD7E5CBCA0ADA86
-:103AE000452A93A3403AF0D74DBF0FB6190179ADDF
-:103AF0003475B2E73F32C8CDD5FDA7FAA37DC04DDE
-:103B00002A34E99B4BACBF0EE0A7EBFF31C0CF19C5
-:103B1000879F8D0453A3402FE149063F7655F9FD59
-:103B20004A94FE73D580470227880E8EDFA37CA8B7
-:103B3000E30F5B4E84E8BFAFC9C55BC44037C861C3
-:103B40008BEC4739450A64F447CCF32B1299BC89B6
-:103B5000C3D92E111D7F902911843BFD0BDAB33898
-:103B6000FCE85F8AEFF57F00FCA88E8E3A47E1F310
-:103B700046A984CE2793A8CE2BE9FB1291A03E48FC
-:103B8000CC47BEA5ED13E474E0DFEBFD20079BB846
-:103B9000DF47BCED3EBD5D3E4864788DB7477CB7DE
-:103BA00019DA99BDD3A4D9F5DEED06BAE8793F8DCF
-:103BB00024F43FFA89CCCE1E247A39FD6C47FF6D80
-:103BC00075E69418A02125FB7A7F25F0AB97201C81
-:103BD000343DA1E905AA2F0689FDE2E3C98541220A
-:103BE00060BB51FF2695D726BD9B52649403446F5A
-:103BF000CF14C07F73BC482FC4ACEF7919BCF1B2AD
-:103C0000F8AA97BE2489FDC5692293C344CDC4F5A3
-:103C10006B7C45B83D61D5E882307AF5F0EFCA306B
-:103C20009FC180E7080EEEA46E15D4DDA416EBE765
-:103C3000CB4AA200279BD4D54CB87E54F313F8513D
-:103C40003C0E936C1DEBC727D60FE5A207F16971F7
-:103C5000D59210D2F19D68070A6A885C447B30CC0B
-:103C6000F5AADF07785C555F473EA28B711C9C8CE0
-:103C7000FEB9941308807F6F0122C8A6FF7795B222
-:103C800052F22B7AFAECC123598EE3592958609DE0
-:103C900056977D16E801ABCB3B0DCBA211730528DF
-:103CA00053AFAF1391AD12D393361EA5AB79228CCF
-:103CB0009719427E96BC412C892B13ED57DA5F0988
-:103CC000269C07A703DE2F29DDF5D08D0607458644
-:103CD000F1CCF4E428A51E8988D54E986F7F8EED2F
-:103CE000FE739A960088DD24DC3C94E2AD7FD7AC6D
-:103CF00029A077DCA07FE83A5716971C01932FD5AF
-:103D0000EFDD70BD02710022001E56C360D7C0787F
-:103D10003F585E8EF10FFA37800A8B15C172E61F8D
-:103D2000044C76ABA8489A7D26F669EF08176DBD5E
-:103D3000DF4FB67E1BD1F115EAF17B2ECFBEBA93D1
-:103D40007D4FA5FF037E4C33E9D9D480511FB84D78
-:103D5000DF790E6089F05EF2BFF23D2FD96857C05F
-:103D60005E2914BD114ACBA9C49B067E946302F55B
-:103D7000EF68DD9BD3ADC2942E859795DC8F25949B
-:103D80009FF5F47F88CBD7ECAA4DB39AE8B8E74B00
-:103D90005D7EA0E7FE549C66A4F75E4F4B3D31F07C
-:103DA000734BF136A4EB06AAF00AC03F2816D15E89
-:103DB0005F5DF8BC57AFC73ED1E4502FFA208A347C
-:103DC00096FB93143E9642319032EA9FA70FB3FDC3
-:103DD00074B9F4E1BCD3888F6F8BAF2FBE257DFC07
-:103DE000B3DF5B992C3EC1E559765523F35794BE5A
-:103DF000FD83DE78DD88787550BF26917CBED08348
-:103E00004FB57769D02BC6B880F586EFCFD8D107EC
-:103E10003CAC33CCFE3F1B37A5CEA27C0CF6ADE408
-:103E200035F841AB958D2AD8F3E7C12E07FB305CFE
-:103E30008EF16152C8E2B5308048EB294A20C2FCBD
-:103E40009B08D1EB4139C71877B3643A8CFA7B866B
-:103E50002AE8E79F5227E33CECF0BD4C8CE746E0B4
-:103E6000BB162F89A6A0FDC9F0079F62F180072E1F
-:103E70008B0E347A053398D1ABF1BD553925241119
-:103E8000FE7A7DEF56E37C93CA25F37B2E4939A554
-:103E9000B35392BF2791533A7BA742DBF7E178A255
-:103EA00076DECB422A9507BEEF9310856F133465FB
-:103EB000433C94A03E6BF29578519FEF124C7EBB31
-:103EC000C2E84749C7FEA29DE94DAD9E7C3EECBBD2
-:103ED000F17D2405FDDA64FD1BEACB1E9628713ABC
-:103EE000EB0E6D92281E1B97076604D1BF3DB249A9
-:103EF0001A12EF5763D1FC76AA3EC7C6F7072442D1
-:103F0000FB21DC4472F12A78E825CA588026FBB3ED
-:103F1000934E6CA74F391E89D0E3CFD021DB609D33
-:103F2000189F3886FD60A08B186FEA6275FA22D45C
-:103F30005BAC8100CE4B0ADBEFA1F06A49E17585ED
-:103F4000D7D378DDCBEBF9BC4EF505D49D32ADD39C
-:103F500032C51AF662DDC1EBF9BC9ECEEB69BC5EE0
-:103F6000C0EBC246ACB7C86CBC3552848DEFE0756F
-:103F700085D7D379DDCBEB05BC4EB6B1EFDB58DD91
-:103F8000618DB0F19DBC9ECFEB19BC9EC6EB8379D1
-:103F90005DD886F564F8731452F81BE44367BC8E51
-:103FA0004A84C3B5A7DE656A67F49221106E87A9BB
-:103FB000D960B71D98757F36C4431F3D71B50FE8B2
-:103FC000A7E1668D9EFC283F49CE4D28C7FA737F36
-:103FD000AEE1CE1518876808C98C89787C26DE5E2C
-:103FE0007204F4F6F919A21F1ADB92F82FCF723B74
-:103FF000FE191E97799AEF57EEE4FB95DBF97E6583
-:104000003BDFAF7C92EF573EC1F72B1FE7FB959B41
-:10401000F97EE526D8AFA4FD36F0FDCAF57CBF7267
-:104020002DDFAF6C81FDCA6140EF7558AEE2FB95A4
-:104030002BF97E6503DFAF7CE4CE92DF16D2F59DCF
-:104040007789680F24C347F16EA3FC1CB1C3283FD6
-:104050008BB6A41BEA43370D30C8F7C256E3BE4502
-:1040600041E308435D595662A8E7DE778D61BC9C49
-:1040700085C67D8B01736E34D4FB05A71BFAA74F51
-:10408000B8C350F75E5B69A87B4AEF36D45DC5F7CD
-:1040900018C67314FEC450B7E7AC30F47FDC52800E
-:1040A000F42567AE31F4935C1B0DFD6A1C81CF2DA6
-:1040B00020EFA6645E967C237F57B3F4F2D2AC1F48
-:1040C0002CB92410403DC7F411C66821AE3688C50E
-:1040D000AFEC1FDE7004FC175B21D353E6789579B3
-:1040E0003CD9F5D431957EA7DC73C4D7A5A35BE298
-:1040F000D3BD47979A2A3139B9E64146DFAD0F263D
-:10410000A673D404741DADDF248E17BB258B418F9D
-:10411000687E4DEB8302F6FF67C7D7DACDE3C6BFF3
-:1041200047713D566FB744F87CA88ED0D90BD6AEF8
-:10413000B4D904F53CF3972D9CDFCB27F84F3452CC
-:1041400078AFF412BF8DD657BA2A02CC2E1115942F
-:104150000FCB6E46BF5EEBAFCDABD1359DC917A27D
-:104160008B5BA29C7218E20A2B33FBB6DFE4980546
-:10417000E37F969840A2542FC95270523EE55FF9F2
-:10418000A8C5BF9CA07E4A181F206423DB77F619C0
-:10419000E3A68D734CF28FE7655835F9965981CFB8
-:1041A0001BBD7DCFCB06F382F9F07959634E2C2DE0
-:1041B000B1149CEFB85806D6CB6269585E1D1B88B7
-:1041C000E5D8583696636283B12C8DE5637955EC5A
-:1041D0000A7CAF24361CCBD1B1ABF0B93F361ACB39
-:1041E0002B63DFC1E7A362E3B01C19BB0E9F17C7A7
-:1041F000CAB1BC2276133E1F119B8CE5F0D82DF876
-:10420000BC28360DCB61B11F6039343613CB21B1D8
-:10421000D95816C666613938B600DF2B88CDC7324B
-:104220003F762F3E57624BB0CC8B3D80656EECC71E
-:10423000580E8A356099135B8EE5C0580BBE372047
-:10424000B61ACBECD843F8DC17DB8065566C339696
-:1042500069B1EDD8EE8DB563991A7B169F7B62CF5D
-:1042600060E98EBD80CF5DB1BD583A63BFC4E78EB3
-:10427000D8CFB14C891DC2E7F6D8012C2F85A74BAA
-:10428000D9C1651F1BF79FC77E68DC7F2E3D6A94EE
-:10429000E3256F1AF79FFD878DFBCFA35E31EE3FBD
-:1042A00017EF33CAF111BB8DFBCF453B8C727CE815
-:1042B000963B8C7A6493518E17B4DE6DD4238D4671
-:1042C000399EBBEC27463D72DF0AA31E59B8C6D003
-:1042D000EE9B6394DF59E431A39F3E619B518F5C59
-:1042E000FB53C378AED2E74D7E4D04E58BA3F817A0
-:1042F00086F7EC85074D725965F2C9146F0790C0B7
-:10430000FEE652E2F0835F63C6673A970719C0770B
-:10431000B4CCE47CD70FF88E96E9372DF4013D64D8
-:104320004C2D9B0576CC85138202B132616ADD305B
-:10433000D8EF491F48583C818CB80EE2684DD95AD5
-:104340009DA8026D6F1A4430BE40D4E5150117C612
-:104350009BB1FE5BE9C10AC88B69B2F276B292B535
-:10436000A7B0FAB1C6392BA03D3DB5231B12991E4B
-:10437000B72696E75D12DBDF1B28057E27D1F5FF08
-:10438000B5BCEB7E88CBFDBB3DF4AE449F2FB4871C
-:10439000F2606BEDAC35F434A88E02217014FA8D06
-:1043A0001402EF4928B78D71D629A038E9F37C298A
-:1043B000F807E89731D527C0FA353834B9FB9ECFD6
-:1043C0005B5C3F35A511F437D5D57C3F18FE34BD75
-:1043D00041F5E1A34E0FCAFDC86A799B8DD9854688
-:1043E000FDA166CDC6786273D312D4C7805F4BA29D
-:1043F000386B17D653C1BA1C0C7181EE5C89968B51
-:104400006CD126D0275FA5751E172C088FF3B09EA0
-:10441000FB6F0C61FF15CEA965B01E0A8FAF383C4B
-:104420002EF4050FFA17F4D1F9F934AADA2D18E2AF
-:104430009AA9969060EDC7F653617C5FC88F7ED9CC
-:104440001F25166FD7E047FFEE4BD7E23804DF4B4E
-:10445000B18EE93D9E368E000003BAE67A51A3EB99
-:10446000BA247A4A8B7713F5E66FB5EF7444E67E8B
-:104470009CE93B16C98FFBB6E6F72497510E5A5DAF
-:1044800021CC8790A5C4FBBBB28DEF5B6D997A59A7
-:10449000FBDC3BB47534DE7C59FDDBB5FED43184E6
-:1044A000FE391C8E64CBCD4877055C1FE770FBEEB0
-:1044B000D09F6E58D14AF939429FD912C41122CDEA
-:1044C00022EE6BE6D45082CB8FC37BA0C2EC42EDD0
-:1044D000BB036B8D7198031A1C375D1EFCB5FCCEB7
-:1044E0001C4AF8BF28E93D0FB2632A5B8F9755A598
-:1044F0000D417B0A9D5701A3253290BA23FA38A0BB
-:10450000793E84EF5F0CE4C30D74B1FE649771DCF7
-:104510005EDFB5BC32BA2F3DD8EB3BDF723FB0CA8D
-:104520009A783F95E20BF13DD064FF69A5B61FA8CC
-:10453000D50FFDA9DA0E7677D3C24ADC6F6FF23160
-:10454000FD4DBEA6A38E8DAFDB3CCE4E0EF7EDDC4F
-:104550009FDCB9A902F31FC96E237D0E79F8564777
-:1045600088D96FE9503ED5C6FA0DDD3C873FAFC410
-:10457000E7DB5BD9F3C16B4BF9F3127CBE23CC9E16
-:10458000176E98E080784EA3B7221DE33A75F44F7A
-:1045900027EF86784322C4E386B491003C1BECF5F8
-:1045A0008B20FF0BBD012CB5790FDAB4AD7C38ED53
-:1045B0003F6861703AE4B952C2C4FC430221153A23
-:1045C000EFC7F87A73B5F690B1BD8D7F2FAFAD729E
-:1045D000F970FACFBC85A18D934BF1997F0889F7CB
-:1045E0007B848F63D7DA03C6F6306F575A4FA21811
-:1045F0005016FADF9904FD9A8DDF5BC7FBB928B32B
-:10460000C1BC0B16061CC3615E45ACDF131ADF9AF2
-:10461000E482146E249375DF6BE5F3B62C64715657
-:104620004D3E6CE37180AD10071816EFBF46EB6F7F
-:10463000DFFEC4C7548F4B0B593EA9D6DECCE7A58D
-:10464000E5E514DC678CDFFEC2CAF8B85B66F15B97
-:104650008DAE92D13799271AFC3D127218EB337444
-:104660007621D403038CED6505C676FF0863BDA8EB
-:10467000C45857AE31D42FF4C4613A53F471182D95
-:10468000A6F384B712FD9078FCAF3B459F479ECBC5
-:10469000F9EDC9BA12ECD7E0E27C64CAA769522AE4
-:1046A000ECFA7DF8BD9C8FF6413C84962F40FE3697
-:1046B0002DF78F0ED8F341BFBF67F16F23C9E1B665
-:1046C00095E3710BE7C3C7009FB46CE3F87C84C724
-:1046D00075D6F3B8CE5A1ED76981B80EC667585C36
-:1046E00067158FEBFC8CE7A1EFE1719D67795CE7C3
-:1046F000191ED7799AE7A1EFE479E8DB795CA79DE9
-:10470000C7752672F9BD7F624736C4D91E9F98D8F7
-:104710004F9E28337D168480262DAF224A8315E8CC
-:104720009AC206F6754AEA148B0DF262030CAE25A6
-:10473000F3148BCCF271F06F3AFF0EE815CC9F7931
-:1047400093E7F5E450AB4847EFA30F4709E47564DE
-:104750004DF08E8690682AA747DAE6837E5C0D903E
-:10476000ACC35E307388640978E57E303EC17EF963
-:10477000BBC307C19C1911ADAD70D2F78B5E0E564D
-:10478000504F9B0C2DF21F1414C8170A8880E7FDA8
-:10479000E5FE234A691C5F741606BAA073447D9631
-:1047A000A7E9876B8D7471556C2BDACB4D753C5F27
-:1047B0004A2109FD78ADF45E2B9AE249463FAA6989
-:1047C0009931DFC35C8ED861F4C38BB698DE57FA9B
-:1047D0007E7FE826D1145F33E61137B9A6F7191F9B
-:1047E000CF8F4DEDD35FBCC552799D3C265E77C619
-:1047F000BE8BFDCDF6A004761EB557A5A37200ECC6
-:104800005DE9A837007113E9A8C24B3F7F1EE0F5B0
-:1048100020D6A9DD1884F1295E0C76A3850A7CD800
-:104820001BD90FC21DFD908B2B02D418DA7F1B41C0
-:10483000BF224D765EA7827114988BF891397E3233
-:10484000E4DAA7210E12A911C9365A7F7C61DFF282
-:10485000AE575E852B80FB4939B5DE124B1FFCBE7F
-:10486000A9569C94689F6C31A7EB95B5D3BDA83F22
-:104870000E5F326F60B1ACCB1BE8772BCF1B38C318
-:10488000F2E20669EBBABF6F3A78D4B48EFE49EC17
-:10489000EAE735BE73B1BC138DEE330AFAA6935521
-:1048A0005C3EC62222E904792B05507EF6BB358496
-:1048B000F9F1A0A0F57CD2F4CD75C887EA83EC1C91
-:1048C0004FBF5B03449F77AFCD63504E17B875A4BD
-:1048D000E9C03896C741E10FFBD74D0708FF8E8A24
-:1048E000C2C17E1FA980EFD9492DB1437CB3CEAFA1
-:1048F000C2738B8BC10BFC55DE1FE7D5BC4CC49437
-:104900008A86092C3EAAC97F8D4E1A7C3C5E3F41A7
-:10491000C278B7E4AD8D02DE9B46133C6F43EDAE2B
-:104920008B1735FF06F2BC323BF1DFD6A26814E8E4
-:1049300092042621FCB4FCC026775639ECD3ABF3A5
-:1049400035FB82E7A14A7E3CB790D3368AC5C33295
-:10495000C3985771BF187A4EEEA7A7BB0E844F536A
-:1049600092F3056B6596F7E44B82D7F7B91CCE90AE
-:10497000A393993F4AE93F419CA093F7DBD23CFDCA
-:104980007743499C7FB5F63F4A0AB66BF59C988CF5
-:10499000F3266DDFCE0FB85EF3F74CFE9B550A1A77
-:1049A000FCB05CAB82FDB4BA9C699467973F4F89B9
-:1049B000E54316DF68C073C680BEF9A689F3CD85CE
-:1049C0004126BBA3B088ED1BF7D81D22F150B86E6D
-:1049D00035D193A647AC45DE0DC3F27BD3C5D66572
-:1049E00095AA00FB2A7E82FB426E7F4700F6055D9A
-:1049F000399172B08F291DFC15E840A38B9CB6B18C
-:104A000008EF1735BD57472A0209E6AFD975E06FA1
-:104A1000F9D2616493DF43825EF0AF7296331B720A
-:104A2000208F2B0C54FBF6FB2E77FF5ADB4FCEA5C5
-:104A30007FE0F7FC42C3F7A7A6B89597B2EC589D64
-:104A40007EFF3443B0E8E8B2C7CF37BD47FD0B6FF8
-:104A500022B92D594259361DBD98FD77B39F4D7A25
-:104A6000E5BD9512C89BB24C997404F21F7BFCED16
-:104A70002D5399FCE278B3727FB4B73F79A7BF2F6B
-:104A80007D627599F659BEA53FE9B719F34B2F3BE7
-:104A90003FF75BC6231A789E5E2FBFC3348E180E75
-:104AA0008889CE6D0C091BE12EB98C76C79556C648
-:104AB0009F839B8D71E4BCBA0189E39D3C5FADB2DD
-:104AC0004CC39372FB1F29BFCD3F62653E10F78335
-:104AD000B578D37C9E375D09796C144F7348D00349
-:104AE0008D678988F93167C93B9EAB747C536563D8
-:104AF000E7E848B3F5249CBFD0F2B3E686595D9B46
-:104B00004F759BB15E45A66741DCB56A9395403E03
-:104B1000D67C229DECD2E64FF9FDFB366607559315
-:104B2000DA26906B2B793CB1D24B24C8A7AA79E93D
-:104B300089B1709EA7C6C6E4F7E714FE8A2EEFE699
-:104B40006E574406FEFE68DF55DFFF0E81F7234DEA
-:104B500003406FA6253E0731BBD938BF4BCDDF3CA4
-:104B60005FED9C46B27948BB8484E7151FD0E25EB6
-:104B700097798E64BB8DE13FD939924BBDBF0BDE77
-:104B8000EFE31CCAA5DEDFF34FBEFFFC25E65F6343
-:104B9000EFBE1EE4C4AACCDA20C8552D9F651109CA
-:104BA0000520566379659A3A50D1F5F35D66BF1CCE
-:104BB000DACF7219FD0AFB1EEF1CD7C3BFD9BD5D4A
-:104BC00006FE3DFBD31353C12E58F04B0BB1533AA5
-:104BD00038B7DBCDCF8B4564D08F77EFB360DC8007
-:104BE00048D1B1B7E8F20531B3908EBFE0676EDC13
-:104BF0005FBEFB795B640A7DFFEE173F1A45281CF8
-:104C0000CEADE87E7D20D83D3F1558FE95DA35EAD9
-:104C100016FAFC6E89DC154CA0B73A391F9CF9B91D
-:104C20007306D099B0EBC00F71DC8EDBAD369D5EA4
-:104C3000F88DCD8AF0A7FDD879AC6784C81081CDF6
-:104C40004F9F2FAEE5BD9D794660F37BD91A498110
-:104C5000F9ED6A9743B4DFE25D7F43BABEEE677B4E
-:104C60003C0087C52F5B0CF267F12E4BD4360ACB84
-:104C7000133694F701973016E049500F2CDA57831A
-:104C800079B28B3A5AFE66F1C0FB46FEA270C17340
-:104C90001F0B3EB0F8A740FD85A73D60C77EDEB97B
-:104CA000D30370A5E3CE92295D7DF7EF3A3E246CE5
-:104CB000FC587AEFF1205203F4B5B86335FBDEBE41
-:104CC0009B4F837C5B6CE2E3CFE11FD9BDF547CC02
-:104CD000668C479E276F8E857D0AB22B23617E717D
-:104CE0008FFEE07CBD60CFF9AD709EF8CCF37FD92C
-:104CF0000A76FDC2FFFA72EB03100F7835C50BF28E
-:104D000068F14FDFF3101DFC33ECCC8E3FF7CCD3B2
-:104D10004F3D46F9E4DCEF6D68E79CFBD5E95C8527
-:104D2000AEFFDCDE7F64C1B9DBFB7E35B13FC0E3A3
-:104D3000BEFDD7F5EFCBCF00BA8DD8F4F88D207E2D
-:104D400095970596CCFC0A2F4D783AB4EF502ECCAF
-:104D5000F3EC311B9EBF594C9FD59500DE6A503F46
-:104D6000407D1985F7A2DDABFE66199508EEEA4095
-:104D7000113745A203C1C85EB4EF967F195F0AA53B
-:104D8000D5AFC078A41BE5BBF9BDC547297EAF4CA4
-:104D90008ECFF3E46B19E0BF78F76AF6DD0E8A4F29
-:104DA0004F6F7C9E857F8CEB8DCF12BB199F0B9F25
-:104DB000C4D8E8BE8C8479241A3E6BF6DFD6A7DD12
-:104DC000A0C9874BC1791ECF9BFA2F5BA0C20E7C76
-:104DD000F6BC53F5313C47A6D0B6737BCEE7124AFA
-:104DE000279F5ABB7F0872B2FB57362FF81D77FFFB
-:104DF000EA03E4BB73FBDF961576FEC42550BBE2E5
-:104E00001CE9F9EB043B6311DF335BBCC31DB579CF
-:104E1000E2F85A14993649F1E0F313F83CC2F8610C
-:104E200051E4C0AD4202FC2DB31730FD14E9877088
-:104E3000A9A19E0E9CCFD7E35528037C9EB81EE8FF
-:104E40002F193EB5F57B61FD57EBF0BA83F1B1B98F
-:104E5000FF22CAAF20877BE137227C00E5B9769B31
-:104E600004F991E7AC2CFE66C67B1CFEFCFCE4B7A3
-:104E7000B417EFB727D97FE070B814BF5F6A7DDF42
-:104E8000167E73EC0A8E6B86E399AF13EB838D5C11
-:104E90007E2C22B59306E8F499CD4AF5593ED87B8D
-:104EA0004175A0109F6F538705E5FC995D9608E852
-:104EB0000BB3BC584412EFDB45ECCC7E59F4F281C5
-:104EC0005120D7CE1CFC39A74B46F78B769F9055C7
-:104ED000AE1F227AFD90C4DFFE291F6FF12B89C718
-:104EE0005BBCFB6F09C7FB5C0ADC0EF3FFBCD34A5B
-:104EF000543AC4E71D964989ECAD4D76AB31CFD617
-:104F00003DF6582A7DCFE27128B0EE8615810F5408
-:104F1000B04BDEB1629C9648FE4F6D78DEDAA1ACF4
-:104F2000A1706BF054613C451BAFD10427C91744F5
-:104F3000BF54CA0C96329B3A62F0A7ADD4DFD5CFEE
-:104F40009BEADD1CD04BC7479FB6C23AFF6CB21F2D
-:104F5000FF2C91A6FE74BC3FAB827FB992C85F3430
-:104F60008E1F5A66218A5E1FDABA8FC37CC8AF5380
-:104F700008E4AF595E4D51419E2CDE9A12817DCDE1
-:104F800043FB2F3C05703BF7A48DEF73B23CDB6A0B
-:104F9000BEEF777AFF85ADFF49DB4FC3CBF4FBD57E
-:104FA0005B697FB0DB773B315FF3AFCFA78E2254D5
-:104FB0004E57FFFA81A9205FAAC1C7A2FDAB7FD6D9
-:104FC0003FD240C73BD58FD54FED191401BC2C7C87
-:104FD000E1578B409F2C78CE4980240FEDFFE0876E
-:104FE000503FF76B37E67B9DFBF5E9EF021F507BE7
-:104FF0005BD1EBF5F9FAF3DE74DC055067EDC245E1
-:105000002EEBC08F590025A5F7052FA7E2F9075D04
-:105010003F7C6FB1ADFB7E1688520788E8134507C9
-:10502000001F2ED865FCDE5FEDCC9E5A2C7757B161
-:10503000FEE1018C5F3BF1BDAF353AE5EDE6F7B53A
-:10504000FEFF612F308DC3DE5F6423B589E8DF96F4
-:10505000C2C65DB0EB9B61C6F118BDF6FE0E7BFECD
-:105060002381E5E793BD29B84FB0508E0E4D2FC672
-:1050700078C73CE0DB859EE8D034FABD5F7279B931
-:10508000D041EBF4F9003E0FE80F7562EF7A0EF0B5
-:105090005BF3520A017AAFF9B51BE3C9352F5E38CD
-:1050A000F5387D7E66BF13E37A35BF5E8AF8AEB110
-:1050B000457F08F1BDEEBD36B28DF63FB3F7B7B907
-:1050C000608F9CB14673D3FB880FD574D87832B803
-:1050D000711DD42F28AAA5F35137B0BC9C3AC2EE5B
-:1050E0001DA883A00ED0F18729EC1C31DF97BA8769
-:1050F000C7A3BE98A3A4E2FCAFBD893DE7F1867BC0
-:105100006E56FAA7E9E6017973E42AEA97C8B5C3AF
-:1051100040CE5A62371105F6FF6283B1D4FA59E0E6
-:10512000FE8662C8DF62FB7ED64C3FA9A6E5D2743C
-:1051300012C2F397AE1B7BF8EC7714C5F76C56FAE6
-:10514000C378FE14265F6A1C81F129980F69BC7729
-:1051500041DDCFD67581DFA7609EEF05AB6A03798D
-:105160001EDFAF6379837592F201C47DC9112E975A
-:105170007AAD9FF1D917DE74E4336D1D2DF55E9481
-:1051800027ABEB7D58AEAA2F220AE629FBB16EE1D0
-:10519000F0B015AB04EE99001E843F9B2B1880FBEA
-:1051A0002C604C88B75B5C21A42F9BAF16630576FF
-:1051B0007EFF8EC5A5926A17C467189C206E0C707E
-:1051C00092795D6A9B8270A5EFE3F3898ED09C94FF
-:1051D0003190EF3BC220A7E4CC1243BD17DC34BAB8
-:1051E000D8F3BF0D3F82F05A5D6FC772557D19C26B
-:1051F0006D657D00EBFF1FE0D7CAE0770D5174FCB1
-:1052000023675618EA49E1B799C22F33CE5766385B
-:10521000D4F1FC1C8D9F92F1EF23F504375F36D655
-:10522000B761A93D4F4FA2D7CFA6307BA48E8496FD
-:10523000E33EA897C56148A64A7274F127E253F18C
-:105240001C089E3785F69C9B307EA9E1D7E2954EDF
-:1052500019E59FF201AC67E91B5611E495A56E3B79
-:10526000F92843C7C75382290AC2D98F71E006AE15
-:105270005F57F6E0D3C81F2DF50A966B399FACE750
-:105280007CB201F00EF13DBF88386D9D44507F3EE9
-:105290004CEBCCDF8F127D3C3CCDDF11B552FCA333
-:1052A0004C52B064F7701CB34586D0F79CC52400FF
-:1052B000F49276ECC7115C2BE9C0F3D669DA3D3085
-:1052C000AF14A4CDC4FD1F62657A8A585819B682FE
-:1052D0001F65866F83FF20DE2F916C3EE5C7E70BCD
-:1052E000F0BD0B33D99E59E69D1DC7E03E0857AB74
-:1052F00013FDCA2C7F6D5E2ECA571BD2ABCB1F127B
-:10530000AA7578CC4A62FF2D734CFE23D0E38790B8
-:105310009748F1BBB16D700AC0B9C5DAE10379D81D
-:1053200092C6F48D3283424177BFD86B5C4E7A4A85
-:105330008D724093CBDE6B4B0CF4ACC9DDF40946A7
-:10534000BAD7E4EECF7AE46EF02CC8DD8CD816E440
-:105350004B331F34586555B812EFA361F1A7130200
-:10536000DB57EF2D0F70DFFD8BAEFC6D701E5BE326
-:105370001FF3FAA5E6C9F89D1E7BD09A381F60205E
-:10538000BF97A199D21BA174D44AE90C10B18ED257
-:105390001994614A678C9FCAB0D4E8780561324499
-:1053A000DD27B279F278ADB67FB2C25E12003CAEB4
-:1053B000EC603C34C8C1F7493345CC0B90A83FE9B9
-:1053C000A28FA403E3EC605F4A56B68FDFED163B75
-:1053D000601F7FA56BBA1DF24A85B452A49FAFDC53
-:1053E00095797DEDEBC0FD6B407F5E979F9C2C8E89
-:1053F0009F9BB4784B08F8A57B5C9D98DFE472888E
-:1054000086FDA71A47A8C0A1AB8F84AF73BCC3B0F9
-:105410007B929CBF1CC5D743725452A893133DF78F
-:1054200025292A29D2C98B1543AEC7FB987ACB8987
-:1054300024F270E7FF8C3C6CC88B205EAD66F9935C
-:1054400019C03BA068A9C2D50AD43A5FF983D148F4
-:10545000A7D739C00F716DEBB183BE57D07B9E6665
-:10546000F917D76B0AC6C1A85E7BB40CE46952BDBC
-:10547000567B17D271EB4005E8F8C0BA079E84FA54
-:1054800047EB6C78EF4B556C3551E87CAB63E3B080
-:105490009CD7F61096956DED94890859BEB67ADDC5
-:1054A0004CE8BFD982F19F5391ABCED5D1FAA95622
-:1054B0001BDAEFA7B6DC9B07F6DFA956A762017BD4
-:1054C0007FCB18637B33BBFFE5549B356261F47B74
-:1054D000D102FB1184CB778802E9E64B4A15B4E38D
-:1054E000BF30EDB754AEB705044F72F857B625B6C6
-:1054F00027F1FC36E45C93DA61205FCB8FFF380F35
-:10550000E84393334BD3A9DC03F81DB79144FB0266
-:10551000131D1317039E263A024B19BE2EEFDEAC65
-:105520008F446A77239E429E6986B82F8BAB7EC4D8
-:10553000ED72624FD2EEE1EF7B13B7D7B4FEE5F523
-:1055400007696D55B131AE6D8178B500FEF83496BE
-:10555000EFA0ED03F5A66B664FB7DA50AECCE1F1E4
-:10556000288DCEE37416F2F07C31031DCE8F6D4092
-:10557000B927B48C7C741C85DF9794FE803E84969A
-:10558000F1FD01BECBD77C67FD9D74FCBFBF69C137
-:10559000E7F36229D8FFB307FD8FDE09FEC2BF5BC8
-:1055A00009C89FBF1F9988FBC89F598D718C7227AE
-:1055B0009397AF72FEAF8AB518ECF3AAE6D932C45E
-:1055C00041AB62EBF079156C22611EFD1DAFC10687
-:1055D00070152CFD1A78FFF6892B509F96601CAD34
-:1055E0007AAD2D619EFFAB0EC520AFAABB5A715C90
-:1055F00042EDB3CC2C3E9E4EEE54C732903F8857BE
-:105600002590F75DC5E54FCFFCB6580DF2E7B39492
-:10561000C4719AB71C6C9D55B1EF20DFF55EDF7742
-:10562000F17995F6DD2EC6A7F1F53C3A2ED17AE256
-:10563000EBB816FB7F9696F8FBE7397C4FD5CF2366
-:10564000012ABF2A6DB49F0BBE7F6F5319F8F95B17
-:10565000D2D205DDBAAADB1690806E5DD55B66C935
-:10566000FAFB29E378B8CF8087F36B16231E9639AF
-:105670008227400F54B68C1F15423F7F35C2F92355
-:10568000AB3F17E4F1E9B67B3D89EE913C6FC64F25
-:105690001BC70FB5BB4B75F8D1F0627EFFD49FAA34
-:1056A000BF7A10E4D466B741AE98CB5E78CB4F0C8E
-:1056B000B7544E9FA7A8FE0E21DC94178F015DAF53
-:1056C00075627E5C72F85D41427DC12F89FD4CEDB3
-:1056D0002CBB730C7C97201CAADB181D5C0A6EF196
-:1056E000EF723A284FBC9EF14E8D0EEA884A19F6A9
-:1056F000A47C293A7880A8F63ED6D143076DAF95B1
-:1057000017C6E960BC333C7105EDF729D83FC37A71
-:10571000E3FFA4AC7AAE017B678D05F7BD4E3AD4AA
-:10572000AC3B587D34C8E7939EF0D46B4AE3F5F95F
-:105730003B8778F4F73A9E6EA6704800BFF1CE24FE
-:10574000F453A892E2B1FFEFE8E7A324E760263A1A
-:10575000CACB019F249C389EAC959AFCB6A4BA7A19
-:10576000FC5ED0A3275D055F4568EB3A47E86627F6
-:105770006D6F4CBB1FF5FCC99302EAE1E57F5A3A15
-:105780000CE4702FFBB73EF6D8C743306EF9F8C76C
-:1057900056B4A7705C42ED1FD003986F8E7EC04058
-:1057A0008CB324DBCFBD172EFF1D13DFD7D5F66FCB
-:1057B00057D6773E04E313BB4ABCDA797D054A66C7
-:1057C0008FFD07CC43179F97AD21AF1FFC5D810470
-:1057D00081EEAD52A819F20CADBECCD1AA0ECE4BC3
-:1057E0009C2C2F27E5F0E1E67CFA7ECADCDF7921EC
-:1057F000CE67A3DF81D29E237DA18F975B3359DED5
-:105800001729D43D2F8073C8B46E883BD0F9F6E1D8
-:1058100037FF52E8B9670DEF379EA95DF405A0A3E5
-:1058200074F37B2D7F456A64ED695A73236BE771CE
-:10583000D4C5952C4E7A68562AC24F5BD7CC5756A2
-:10584000E17D6B335FC9C6F34C335DC33E0178FE27
-:1058500012126B80EED3987E36D3C5435CFEFCA05B
-:105860005D54AD74BCC3D6EE834EE08B1F09E85780
-:10587000DFF1DE612B90FC1F8E9EB4425ED45D9002
-:105880005844D7338B283233A223F8FE6CD2E1661A
-:10589000F58E7E70FF697C3CEA32C3784BD8FEF30C
-:1058A0001DEF1D9D086A948EB712CABBDE24328C90
-:1058B0003F6B9FD2C48E43F1F15EA1E389F1F17A8F
-:1058C000E027D9111E71F8D8115EBFEF395FA2A28F
-:1058D0007DA1832FDA2B1A7C1B006E147E33536755
-:1058E000DC484625E79799AEA19F9051F1F998E1E0
-:1058F000FB7768A2FCF68433B017F8AFD119781E95
-:10590000F867A1BD3B572AC073602FC2F34596507C
-:105910005E16A5ABB38342C3FAC1BD1E9D89F7795C
-:10592000CD7C7A1CF8E54A28295FC03CF879951FA0
-:10593000F2751EFAF169379E47D9FF412E943596CC
-:10594000AEB5B703BFFD9B05EDCF2FF60DEB33AF23
-:10595000EE388FBBBCE514F9796BB6CEBBB83D779A
-:10596000D73E6704EE41BCABCED2E35F015DDF55AD
-:10597000C7F24F88D439EA56833DD9C8F7437A8FA6
-:1059800003FE82791C6D9D0773075C01FEE593633E
-:1059900064F4230EBCF9C5EFAB69DD31C88E7EC25D
-:1059A000DA344EBFE5CC6F7D322DE01C09F1AF3506
-:1059B000E97E95AE73CD6BA443A4703A38FCFE48E3
-:1059C0004529DC0B2D62EC6C7D6C7BB802DE2B660E
-:1059D000F7CE78B95DBABEF3641BD0E3E96336DC79
-:1059E00077F8CCCDCE11AEB10673C18EFFA45D4E5B
-:1059F00078FFD99FDD12CEB75DE81280CE6793B0F5
-:105A00001DE4C5BECEE9FD613E1E3FF102F99FDEF9
-:105A10006211D9FD685ABC252AB178BF2AB17A80B3
-:105A200097DE14FD7D63AB274DC03C8F39AD6F63AE
-:105A3000329EA734F13D3FA92E365F7767FA64BCEA
-:105A40007773828879D86E7FB700EFE57556C8F80E
-:105A50007E58E8F3FDBC655ECC4385F741CEE75D3B
-:105A6000E6FB3617CBD3DAC0FDEC76ABBF69021D7F
-:105A7000A77D6D9A00F8D0FA292E26574E4FD0E216
-:105A800048618C23E5167A53E01E8BDC00323771B7
-:105A90009786F1BEEF6DD08FC559110EEDC35F8CA7
-:105AA000C23EF61A88AF009EAD8C9ED6AC1530AEC5
-:105AB0004AE13700F4C4270FDB6E8275E4350B5ED4
-:105AC000F0DD699970DE33DC7646E7AD8FA25F08C2
-:105AD000615A183777CBBB382F7792F5AE70B37B0E
-:105AE000F23FB9047D7CE964F726E6D675F2FBF156
-:105AF000A2780F5E18E004F54029BBDF440A28FABB
-:105B0000FC9838FF2CE7744802B0CF56592647203E
-:105B10008E2036B7CF8075CF0EDBC80D747DAD42B9
-:105B20006700F8451D23F2FB9402C7014EEB36F4E3
-:105B3000C73CBC55622017F4B0FA7F64DCA73B1861
-:105B4000F86233DC1FBFB54C46BE381860E70D9FC6
-:105B50005C56D00EFB94EEBA8AB6D974BC88574610
-:105B6000C9D2504ADE1806FB94CB44AF40FB878372
-:105B70005ADEB6D7017431DAF2E5E422D8C7CB1683
-:105B800031A6745A60F736AC5C56E105BCAEF466DB
-:105B90000A7AFFE5764E07C7D383B7BB287C7C0F14
-:105BA0006EF452338EF267C6151047549B65453B21
-:105BB000B70BF73D6470BC64748AD12A0FD65DF3CD
-:105BC000D2E13E5D162F7DE8C6108B73C2DEE85829
-:105BD0008C73F23F1FE23593D7D68C706065D38A01
-:105BE0002AEC0FE364D171324AC5E8583AEEB6B4F4
-:105BF000C0568CDB4DB4239C88D4D506708A4C1CCF
-:105C0000E0877B6D378E1BFA369C5FC938D23D1D0D
-:105C1000F4686490E30FED20A756CA0AF079C6B283
-:105C20005377C2F334FF23F74299D1F8FE0320A73C
-:105C3000D3BAFE568FCF27C986F862C6879F7D03E9
-:105C4000ED1941D910A7FC3A3DF81380CBD6E2708C
-:105C500018EFC5048C66C5D7B16779E724B8EFF8AB
-:105C6000F434D1BF8DB7E3BA3679236B18DC4A41DF
-:105C70002F68705B252A1D5158D7543BD24721E924
-:105C80004479950DBBD983E378C9F870F512C8D76C
-:105C900030CF679D4BE8B97F03EE09045C417E8CF1
-:105CA0009CCDCE15EE2DE9F4813DBF362D717CF2F1
-:105CB0002D377BDF26B238ABB9FD0D37A30710892E
-:105CC0006D252C5F7E24942EA2A64299630F40FE80
-:105CD000F35E51F923D2F9468B02F881FE568ABF52
-:105CE000036F7C8EF1C503E177B17CC65DA4E5DD71
-:105CF00047B3E8FBEB4AD97DC7EBBC8C46AA9B991E
-:105D0000BCA8F675D961DFA4BA9878B7717A533513
-:105D10003843BC8CEBABCA5B195C338B09EEFB429E
-:105D20002C08EE9BCA827E147E99CDCB97201E490B
-:105D3000A73A98F65B07E3027E1A45C2C6EDB22386
-:105D4000FF862DB8EF49F9FD2D886B55B6F6C77D56
-:105D50007F38360CE3A5F3EFA6F3F1DAE938103F0C
-:105D60003CDD6CC17301907E03756519A565A4CFF8
-:105D7000EEF2223AAE52EAF5AED1E84093639435A2
-:105D8000E6507D01709BA3AA4B80FE4EDABD6FC02A
-:105D90003C9C9B6C0AAC7FCEA6979682FDE2F47584
-:105DA00035837CA82E63F34D6FA5CFD1CE51DE8213
-:105DB000FED5AD36857D8FC3AF94D31987C35C3EC6
-:105DC000EFB95BD8BC1D832261A0CFEA6514AED0C9
-:105DD0001662740F21D18B22F2D51158BF5BCDC250
-:105DE00071FBCD30F18589FEB47555F275552E6382
-:105DF000EB229C9FE8B4A2306E65295BE71CC2DEF3
-:105E000017E1391D7F2E5F4FA5FA2296739B6D8691
-:105E1000F1B716EDE884F9E417CB0A9E1321ECBE26
-:105E2000C35CBEAEDC46F6BDDCE217115EA44E37A5
-:105E30005F8CABEAEA94AF4EFF9632165C0A00071D
-:105E4000D8E8B8277F2CE37E4EE126E3BA4EAF1E9A
-:105E5000B6BD95B67FF4B08CFBDE7B45FFF13CF41C
-:105E6000476585C91FFFBB53404ECF6DF4831CDFD0
-:105E700053CEE07FFA6612017A187224980EF01E53
-:105E80007224C4CB5ADC4FA700117AE41E9D1F7503
-:105E9000999A059097B1C1CFCE033950C6EE231F12
-:105EA000A49F379D5F46735605E4436596A557C882
-:105EB00078B5ABA9FDC863D345683FFCD8BDF09D5C
-:105EC0006CA25B0F6D973D83D97996C3B415FAD553
-:105ED0009D7A10F0D1CACFB90E8199A5637918CAFD
-:105EE0000CCADF2DE9304F894C2889CB839D0F8F59
-:105EF0001D0D7205539E4AB08C9292DE7243D77F7D
-:105F000038EFAF0A09FAB93D8AC13FDFF9F0F5C3AE
-:105F1000C18F5F0776622ADCC7E6FD12F27454BFB8
-:105F200088705F678DDA8B697D15B51BC17E595FFF
-:105F3000F4BE087CB76E1FF1037D6404FFCBA6C7D7
-:105F4000E30D6EF6FB3C924C5A80FF0F0E3F350975
-:105F5000F0143940ED4EDABFE237AEC79C600FFD5A
-:105F60009EE5C1B4FFB616F5F7FDB972C2FB78C95C
-:105F700025EC4473FFF421D3319E97B76903DEEF1C
-:105F8000593D49F2DF407B676E2A2F073B46095295
-:105F9000EAEA4FE7BD65F4726042650ADB2F5326DB
-:105FA000B1E7CA0456B6D41F7908FCF6F02E29A52D
-:105FB00090CE77C46A76AF584BF117F610B54B4BBD
-:105FC000CB9FB7DF4C9F7F5C4AB5207DFEF1B55F6C
-:105FD000A4C0FECE93A5151900CF7DCD46BB8EC0C3
-:105FE0006557D41F1A690B07DC745EADEF1184A7E7
-:105FF000C5166DABA475CB4B2EB0707AF939AB5B7F
-:10600000DB67009DCE2992316C6F5EEFFB5C9FCC0D
-:10601000AEEB9E04F7EBE7AB84C5F7C38FA2509EAF
-:10602000CB4546BEDA8942C7BD89F9276129F03AD6
-:10603000C8E570714886573479D63AA4F22990673A
-:106040007FE2761DA99D87E7C890FF2D600F7597A9
-:1060500027F29B4A5D0EEC7F7ACB2D1F409C7A4E37
-:106060001DB3F7F3B67C29203EA8DD974DC7CF2B93
-:10607000C5AB06C99C6561FB48C04FA1481405E645
-:10608000D341C04F0853FDA3878336EE7FF7FD252C
-:106090006E1BF26129D8CEBAF5B8F87A72FD743D5C
-:1060A00009F47409FFEE8F9EF8F2C03880FF32E6E3
-:1060B00022E5854F0876DD3CF2D4CB9BC755301ED8
-:1060C000D8AF6E2F8EEB2EEDC2FB5CCCF21DCC79DF
-:1060D000E0DBADCE73A3997F6F94A7BDEA9CAECCF5
-:1060E000CF734DF26AA4ADE346C4EF1E76EF35647C
-:1060F000C442BB404485DDFB19D1EEA7AE857E23AB
-:10610000DC2E2FD041EBF0F74B003E6BB9BD30B722
-:1061100098A0BF3A37A713ED85D98DDC5E90FC4D72
-:1061200020649D5BD2C81A9DFD80A612B8D08DDC7C
-:106130005ED0F43FD7DBD5BECE66D4AB8DECBC5F72
-:106140008F9DA132BD9AE7637ABDBA997E47E1C4BB
-:106150003C566F97303DAE6CE2F603D7C319FCBBDB
-:1061600099CD4C5F65801DE181340815F532EE61F3
-:1061700065C5ED967EC54C5F66B4EE45BDD6013F64
-:106180002E3306E406D39783DE3EAA02987CF47190
-:106190001B95D38FF3769F97DA67E971FB6C95C8EF
-:1061A000F79B08B30F31E79FCEF321E8AFB31B771E
-:1061B000F0F9ED3D9C7E13C8D79DE1023C57AEF14E
-:1061C0002D463F693DB794E5AFE4D6B17D72B7BFC8
-:1061D000EA29FDF9B3796E76EFD03C8DAEEAA23EA6
-:1061E0001817EF8540392E637C7135B59730FEC4A2
-:1061F000FDAB6B5C3CAEC1E927993ED1E4909B04BA
-:106200003CC514BE1F479E4279AD527F09D6F67138
-:10621000B861C0DDC0EFE169A530FF75E3BEC2FC27
-:106220008FBC24FEE29F353FF35BCA75F7A4A3CC75
-:106230000FED14139EEFC9F1B0F84387449C00CFD3
-:106240009430BB472EA54C4ED83FD5C3ECECCF398C
-:10625000DCD68D7B0ACF6726D5CF12512D09F4A944
-:10626000A66F5B01CFD7D0FEEE379A54F4D323410B
-:106270000BCA57767E314CBAD08F548B648C1BB6C8
-:106280005AC376C0C7FA528E57AFBD1DEEB7F9D6C6
-:1062900078A1F0003CAF0E8811211FF01CF18E6434
-:1062A000711D3CB77C9AFAEFFAFD8AE11E91C34951
-:1062B000C11FE6CB6B66F4B56E9C8CF358333AABDA
-:1062C000DD92AF97BF02979FEC9CD89A71AF237D68
-:1062D0005DEEFCAAEA9EC57B3FB4E7A7363F5D00B2
-:1062E000708EDF7F11E8F33C4555DDDF36ED48B0B9
-:1062F0004FD0D30E7E940BFCC0C81D867D4D8EDF23
-:10630000091ED1107703F96A45E7223200E24B7B80
-:10631000C6473CF01E59C6F66DE7F37DDBCF77DC50
-:1063200082E7C94752B2B226C0FB67F5C6F3EA9FBF
-:10633000ED7C7A008B6B440C79C2F39FFAF908C3A9
-:10634000FE7080289963F915ACC0EFAFFB559B2513
-:106350007EFF800CBF57007176E0E0C170AB620732
-:10636000962EE05F5A7A4837965E504783C14FF2C7
-:10637000639949825866915A2C7D248CE500D2811C
-:10638000650EF8B983412F7463A910AF487472BFCA
-:1063900080F8B15E4882584A80B78CF8BE84B4CB8E
-:1063A0008EF91BB07F017C9FECDC99DF53B9C4836D
-:1063B000FC5D7B25FB1D23B65F31DD13B8C78378F9
-:1063C00088A2FC9ECD45F991E74674C0F9A37BD61F
-:1063D000B2732F9A7C47FF867EE7D974A60FD48DBF
-:1063E00002CAB115CEA9DF4578B65ACFE8F71B88A7
-:1063F000DD5E08BF0FA28D3B9BC71966733D08E1A8
-:106400006E767ED08FE7936643BC41D74E7ADAD959
-:10641000BD34DA38A2F3DAA17DEDF7E9DEC7FCE896
-:106420004A931F7049FD6DAACF31BFFF359D50566D
-:106430003C1EF7EC77955CA457AEBF294129F85E66
-:10644000B3ED04FA63E189013D5C9EE17CA0E9952E
-:1064500039A67C0F733947E2FC611A876AC0343869
-:10646000D78B774AE8F85BBB9F54BBBF677E20247D
-:1064700067B3D77C80472F9F77986CA9C8A6E5A7FC
-:1064800050D7C5F78FA6865EF2E8FC116FA056D4F0
-:10649000DF77B390F3E3444B6B39C8B9D321E207FC
-:1064A0003F623EA9F57C07E2F9472D28E706D2793D
-:1064B000CBF07B2FB0C1918E75157EEFE56C3D3B27
-:1064C00027748ADF33FC14DC4743CBBFF07B85475E
-:1064D000B62D9D0A74F039BF5FB868DFEA20C47D2D
-:1064E0004676386781DE1FD931BE1ADA47EEB2B17F
-:1064F000DFF1E172429B171C7377A4E33976D59ED6
-:106500000EF284A0DE3DDBEA88C0EFFF9CEDB0B068
-:106510007B558B45BCBF0CAE21B4F0F9A5A6C3F7E3
-:10652000FEF387608F7CCEE5C9194F1AC397A40A82
-:106530006A26A4A5103FD8351B9C8BF01C64952BB4
-:10654000F2D46399901F6EF7AFA0DF3FB0F7A55C60
-:1065500078FEA87311967FD9FC412EC8ADB3FB3FDE
-:106560009013D16D8D1495213EB5609F20C2FE49D8
-:1065700079C72C19F647AA761FC0B8728D3784EDFB
-:106580000BDBF6627DC2EEB771FF6470AA82F33A4C
-:106590009B1DC2386F619B2D0ABFC7B1A7207C77B6
-:1065A000C27DFB54A66736385FC5F11F75BEFA3A47
-:1065B000C265B30DCF7F1CD8FC1B1CF7CCFE97F82F
-:1065C0007C09E60B9E4DE938FE13D05F7BF9794CD0
-:1065D0007BA7471F0F965205837C3DEBE6FB5E3998
-:1065E00097E8C7F30589ABD3C3E452A707F6CDAA52
-:1065F0003A181CFE628DCA60472EE81014F83DBDA3
-:10660000F2DDED781E70C13E3B9E975800F000B859
-:106610005178215CDA0EE0FC0B002EFD601DEF626C
-:106620003E7EE13E0A9751F1752F7085905FB5F57A
-:106630005238B075EFB9149E42463CB5BD2D435C4F
-:1066400066E13E01E1B770379B47D53E36AF09BBE7
-:106650006721FECFEC270AC45B4EEDFDE07358CFF7
-:10666000D9FD76BCCF579B17DCB7E02901FE6174DA
-:106670004AF631B9AAD9DD35912CFCDD819EF6DDD3
-:10668000EC7749016429945E47EE9B86FB82A54026
-:10669000BCC0FFDE8E11ECF705C3B900D73DE3A304
-:1066A000B930EF33DAEF2349E15CC08BDF132A4DB9
-:1066B000D5E1E3B3132FA15E2C126BFFFC20F0F1A8
-:1066C000F3EC7738967EB841D4C3E33AF841AA3167
-:1066D00000B7B73C08B79EFB5BC22C5F8A84901F53
-:1066E000AB383F9E6DA77E275DFF676D2F60FBD99E
-:1066F0006C637ED55FDA0EA503DC2AF9790C12B93A
-:1067000005E511854BB33D819EEF39D71661E7153D
-:10671000CF09FC3ECD2734B8D5CAD30DFB7C4C1E27
-:10672000E66CC93F8C7E4624F13947B39D64BE2F89
-:1067300035593EC0492ECF3EE6F774697A77BA27BD
-:10674000342BB55FF2F3DE952D35B900EF4A381BD7
-:1067500089F79C1EB801E215786E88DD931A05F85A
-:106760009CEAB907F5A51B20CFF4541AABD7A57640
-:10677000AE02BBF69476AFAAFA1A7B3F9FB56F8242
-:1067800076DAFF394FB03695D9F702FB7D1F6B1AC9
-:10679000FC4E83A63792C3C1F83B0D4FD3B5025CC4
-:1067A000E8783FC1F1243ADEC87F7E3C4D4EFFD3EE
-:1067B000E3D8FF67C7D1F417F027A43E12BF7FC408
-:1067C000FF04FCFEBBEF93F05C035F5DD83CB809AF
-:1067D000F6D1CEFBD83D30B6D6E504F4F9DC4D1B3E
-:1067E00012FEFE5B4F9DE7E5C88329BFE9F8FA4832
-:1067F0002AB3CB8F70390D7FB0BF0577E5A05D4C14
-:10680000FF5AB3307509FDE761FC1EF3221246FB07
-:106810007404E9C0B2987462398A746389DBCC83EA
-:106820002154EAC7F2AFE55D6361F10BEDA1275397
-:1068300044CC3B780DE4D0D941A1A7E1A2B615CE56
-:1068400045D7C0FCDF48F57278450DBFB742F4BFAD
-:1068500087A1803D38C5D7973D48BCD2999EBC974B
-:1068600002BCCFF6ED545C5FB2DF515B62BAF786D3
-:106870009D0BD7E050433A308FE4B52DF7BC319CE7
-:10688000C2FFEEDD6EB493876E695C02F2FC6ED2DD
-:106890009905E78487F27B44481BBB0F47BB1F6405
-:1068A000789BCDF83BC2A6DFE359C07F3F6B81F9EF
-:1068B000F7A9F839DC167890201FC37C8EF7AFA9B2
-:1068C00089EF7D21C5897F0FC57C8E77778788F911
-:1068D00051F740DE95CEBF18BEA3D666A42FE5DFE4
-:1068E0000AADBABAE067F108B723B053E8FD9DFFDF
-:1068F0000B82D8B2B4008000000000001F8B08009B
-:1069000000000000000BDD7D0B7854D5B5F03E3360
-:10691000679E99849964924CDE131E21C86B0221F4
-:1069200045A47A122246A43A3C6AC15A9C8040800F
-:10693000BCA068B1C59F8144081425D488400107D4
-:1069400044C5FAE8A417E561B00344448BBDA15ADD
-:106950002F522F1D901F1111466DD1F66AFDD75A87
-:106960007BEF6466480AF4FADDFFFFFEF4B3877D2F
-:10697000F63EFBB1F67AAFB5F70C77288CA532F668
-:1069800082A2DCE31DC4D837F87753D773AA5DC75A
-:10699000D808067F8D6C5C31630DD5AA7D15941ADD
-:1069A00002564DEF84A75D1750F219CB4A2C33CF16
-:1069B000853273E8ECFDDC8C8DD58F3EEC86F6C617
-:1069C0001A75B809CAEDDBE67618F07B97CA4C3029
-:1069D000649603FA8532CBD005FA41B9D1FE1BC7C4
-:1069E0000C18BFC006EFA19F1C3B0BB8A1DFFD5BDD
-:1069F000EFD761B9A19EB1741C47F175B8E93B9519
-:106A00003D85D362DAF8A234C6F2F09F308ECA56C2
-:106A10007FAA4F62ACBCE6B4256C83F7E1CAF16C87
-:106A20000863A5F67C5AA7FAFEAD1F6179CBA25385
-:106A30000E1F8CF7C6D6E57F180BFD1902302FE824
-:106A4000A2F0EB86E36361BCC85623DBC6BAE090D4
-:106A5000BB583D1536D380EC1BF82F7B616CD9C831
-:106A6000A05C28CAF9388FA87A280F17E333368537
-:106A700085D2B05ECCD7A93106F364769BF3CC40C7
-:106A8000C66EB22BEC9BDE5DE511A2BCC3D05C668A
-:106A90008579EEF84FC5B314AA0F6C9D9587EBBBB3
-:106AA000B4C7976787752C32270D61BD2EDF3F83F2
-:106AB000DD2DF6CF6FD1B9F019B2305757FB01DB9E
-:106AC000EB4D3EE8A77109F39CEEC79839D06E1DD7
-:106AD00088FB78D8E081227B4861538250AFDA98F6
-:106AE000168471860B7C897F3EB4C4FDBBBE86AE26
-:106AF000711FFA7AD214DCDF48A255DBA65C3E2F68
-:106B0000F99D6A77FB717F0DD9CC9300E3199C1D29
-:106B10009976F86EE02EA3C706201BFBEB41BDC2A1
-:106B200030EEC08353993B91C30BE7AB2E327A4EC4
-:106B3000A730665AE4F4A8C3B19D8DF0F1339B31C0
-:106B40006042F82FFA7933D6376C2D71B9A3F07AF9
-:106B5000F912BB4785796E5A62F6A8B0C0E5627D2E
-:106B6000F1F3CB71E8BC01F8CEA8633EAC5F00FB4B
-:106B700080705C604FA0E77C51DEACFA27E2FC3706
-:106B800003FE2C457C5DC8F1774186398078BEE0F4
-:106B90008D3EE9AC1BBA92CFA797B83C7D611E9B96
-:106BA000164E7731F8B4747EBBE51658FF8244B3B5
-:106BB0001DF1519F54F0F868C4F7370D0CE9AA2174
-:106BC000B1C43D23AA3F7DD24817C243AFF3673219
-:106BD0003B632BECD32AD40CC417FF46E6616C4D03
-:106BE000F3CDBC9CE8CF54A0FEF1E65B7939D5BF6C
-:106BF0005181FA279ABFC7CB39FE4C1D949F699EDD
-:106C0000C0CBFDFC1BB1FCEBE6EFF3F26098432632
-:106C100063BB9AA756F861FC0683678A07C67D1195
-:106C2000E63F08E61F14CF3D76BEAFB2FE37F81E32
-:106C3000E0BD533CE3EB5F16DFEDEEA17EAFA86F46
-:106C4000EBA1FF57C577A11EBE3F20BE6BEFE1FB56
-:106C500043E2BBC33DD4BF29EA8FF4D0FFEFC57731
-:106C60001D3D7CFF07F1DD3B3D7CFFAEF8EE580F8C
-:106C7000F5C745FDFB71FD9F10EDC3E27D7662D344
-:106C8000713FE05D36F02DFC2B4C6C4A46BCDB546A
-:106C90005F4CF8DF3002F07C5017BE672BCC8BE5E1
-:106CA000210E95FA1B82FC189E6F8BFE4BE7F75D59
-:106CB0008378B7E02DBD07F1B041F11CF341FFFE31
-:106CC000F93A0FF2DD056FE8399ECF57032C8ABEE3
-:106CD000DF8E9BFF1631BF4631DFDFD97B13DDE44A
-:106CE0002D7279C64B7E89746F8F2D9B819E3418CF
-:106CF000BFD1C9E54BE1FC32737F941F205F906FD9
-:106D00003E6433864C30FE437695EA1B9D6576AC37
-:106D1000F7DB55923F0F39CBCC3390AFDA80D99562
-:106D2000C07876DE77A35DAD0820FF709453FDD860
-:106D30005F8FB7231F6D64114729AE6F31C815F8F7
-:106D40007E7F7D19BDCF73FCC581FCF968325F572A
-:106D50007BE2214B3EB453EFD391BC28B0AB24C7A8
-:106D60007A2FD605DCD0A4DDBE4087E5271BB9BC51
-:106D700082BFC42218BF2F1F9EEDB8BFE4CD42943E
-:106D8000670FAB1EB79BBF53A3E4415F94574938CD
-:106D90006E728CBCDA5CCC34ECD7EF32079E827E0C
-:106DA000FBAACC9592DC05F73C879ECB17FD780FAC
-:106DB000CAB53ECDB1F229BF294A3E319497B1F20E
-:106DC000295E5EE5D4037F8CFADEE4B2C7942D8E93
-:106DD00044924FC0633CDFC0D00B5A17DC62655D44
-:106DE000FC3A5E1E3508F920F96EC3D7C363E4830D
-:106DF000E4CBF1F2E1CAFCF5ED5BFB131E02B772C6
-:106E00005F99CFBE8D7800F867F029243F98EA7328
-:106E10007913AF0C2F83C16BB7DBAE0C3743EA3B62
-:106E2000A457187C2AF57F995CB9025C653BA3F9ED
-:106E3000C9CDA741AEFDE5FD9F14322099E5001BA9
-:106E4000DAFF545DE0295877F6A2E73663FF5987E9
-:106E5000AC8D0867A36BC6E6465C4FF3E38C013E3E
-:106E6000E9CD1C9F8C196576FC5ED569AEE43E5079
-:106E70007EF6DDBB14C0277D4ABD87C1BE1D7EF1F5
-:106E8000CDE4DB107E6F1988CE4D3AAF9DF5A1E9B8
-:106E900010BEADC8B16E5D4578EC33239CB27798D7
-:106EA000490E30FFF6951A2075036C071B85F553C4
-:106EB000566AB0EE1D4A67F9562C070346DE1E5887
-:106EC00034FE5FAB4E11F54C535DA4778AFADF5464
-:106ED000948F86F6AA7DA00A7267C1DA979A0C3958
-:106EE00058AF93DF6B6C24AC17C7136515F6E7B981
-:106EF0007651EF3FD8540E44D46A94E3333FB66FD3
-:106F0000D5E978D9DFD684FDBF5026BEF73FBD5204
-:106F1000CBA6F9DCA67740D1F17A93EDFAAEF9AEC3
-:106F20004D7EAB6929ACEF1377380996C16AB69EDE
-:106F30004E43F9BC624ABD17E18688EF0599D84BEC
-:106F4000EF263CEDDCB79D13FC59507BF1D0DF936D
-:106F50000641559D3E7C2801E057B3BBDE6C80EFB7
-:106F60004D06AF3F2BBFEBBB9A9D95A4CFD4B51573
-:106F7000D1B39BEF0EABBDFFA5EFCCC6AB18EF9323
-:106F8000D01F6A9F87AA1A7D7D934D4FED19DFFFB1
-:106F9000EED727BFFFE4F93FDC89E35D7087D3C6F6
-:106FA00041EB1521804B37DFC9F6B5BB27D0F3582D
-:106FB00082B6C601EF6703EF227EA5D67BB07DD0F7
-:106FC000DC6CF700A02D86662FCA0D007D4037B21D
-:106FD000EBF90B475F6A1FFF3E9EBE826696321E2C
-:106FE000F978B54A722A68F6270C81F26AB043969E
-:106FF000C2949615BD3B6C10965FB231B44B1AAA81
-:10700000DB5D8390AE3C4686FAEEEAEB831948E7F7
-:107010008D35C629DB117F430B5C33A3F4ADB5C9B5
-:10702000069AC7CAD780EE86C2D3107428F87D3F6F
-:10703000901B0AF2459F19ED1C4B4632F3E7633B68
-:10704000DB6AA4CF95065F4519B6CBD0917CB1F42D
-:107050009B5C5106F370A5EA143DCDA3FCD82C949B
-:107060006F76234A50762279FA6E84D373AAA71ECC
-:10707000E9F0399BCDEE870AE0911AF23FB59F33D4
-:107080008065939ED5A31CCF2A02791EA5C79E10AA
-:10709000FCF384C348FC6EB52538A114FAB12ED098
-:1070A000D9FD30DECA9A751D63619C5FD6BC7C74C5
-:1070B00029BC5F95A6329C87CDA9868C207F0CDFEA
-:1070C0008339C2BC5F58EAB5237F8DA4AA6C1BD458
-:1070D0005BFB1A993B8A5FD90641398A4FA638551E
-:1070E000CD02DF7F95ECFB77078C3BFCAD77CCF8CE
-:1070F000BD6B844E87641354F93E2715C7F6631F92
-:107100001DDB4F72796CBD737C6C7DDAE4D87AD765
-:10711000DDB1E5CC7B63CB5324BE01CFB1813CB65E
-:10712000F22A660D7FBA04E52DC0E73D84BFB54065
-:10713000E741F8586AB69F9D05F559C84FD01E1A09
-:10714000C248EE1EC8FDA91BF5025372BDDB31E833
-:10715000727864E5986FC3FDB2F555ED0CDADBDEAD
-:10716000FFE86BECDFC6A2DAE5237CB488239597B1
-:107170005D309F44FC871BE15DFFE707512E1ED564
-:107180007B10DE59352A8DFFF0647740CFF5091763
-:10719000EA3349A27D927975871EF879D2FB2BE7F5
-:1071A000A3DD1B0FD73456AF205D027E707BBB92F0
-:1071B00091FC58A1635588376823607FA41E01BFE6
-:1071C00098946224389992156137AA3AAC4F13FA11
-:1071D0009331E35E0BD2F1438738FE3F64E4FD74E4
-:1071E000F6E7A64111E519F2C994645D4C3FEBEC5A
-:1071F000A28D28A73A78B9B53DF936A4CB759393FB
-:1072000087219E98D0EE82FE7A659BB501B03ECB79
-:107210001B46BF029DF65259BB01F6B2D5CAEEF12C
-:10722000C23C361CB6FAF5F0DE32F31776D4D38AB8
-:10723000C5BC5B9779DE463E10A954098E96D4668C
-:10724000FBB0417C0D7E981FA203CAC5D27E2DA43F
-:10725000E7594A9B49BE5B8A9A9B114E1BC6EB4875
-:10726000DF48BE5747F86CC9091EED8B7E82993AFC
-:107270003BF6970C82DF089D3C9ADDEC45BF090385
-:1072800098EB4A38AA60BFB442182745C0D5E9DC5C
-:10729000F91305FA49C1FE86F0F608278780D3E87E
-:1072A0006437C1DD29FA4DE90BED87F07E1A4BBA40
-:1072B000FA91FBB8A18205707E725CD94F67FF4CD2
-:1072C0005390AF1A7E0770837D5272CD34B987E632
-:1072D00032B28F5B9779EBB7125DDBC8CF91E9CC07
-:1072E0002E433CCA3CBC71A26E087E67A5710C336C
-:1072F0005900F1385365E61B9351BFF1121CE3E9C5
-:1073000035A3BD7912EAA9725FE2E93743654DFA08
-:10731000E4CBE938C3E92C2B18D20D3DC7D14BC6BD
-:10732000E1C87D88F4F174BD25E14211C28545B7FD
-:10733000D75FB9ACD7078FA29F87A5839C00D0E702
-:10734000C68DC7D83F4C585698CEFD4D1FE4FB0E56
-:10735000E1BF017905C4DA3ACC3EC686743A9F1182
-:107360007E95ED5A7DD7EFA0BF4BFD8C76942B39DF
-:10737000879B3B503EB2DDBEFEB80F9B54DF130926
-:1073800050BFE9583A43BEBDD2C2ED3155E079BC99
-:107390007C592BE8C68D72CEF5AF3FA57E18EC9BCD
-:1073A00036D00EB4B7F617156F9853FF07F52CF6C5
-:1073B00002E959D9ED1D4B6D38FEDAC34D6680AF39
-:1073C000E52DDEBE19CA7E15E1574DFEAC0339B37B
-:1073D000084EEA7113433C1DACD70258667FB230A9
-:1073E000E4BF3B5EBABBCA8DFC276D9C1BF9D0364F
-:1073F00041EF01619FC5AF5F356A3ED427E2DF6F81
-:107400004CD689FDF49EAD847D1CFCA491AD82CA4E
-:1074100042DDF426B4EF222B81FF42ED74BDBBF6B2
-:10742000E751F6ED23D6D26032DA254BCCCC070AF1
-:1074300073F6970AF30171E638FF508AFC279785A7
-:107440001494B3B9F5A0F0225E2DB4325F14BE6778
-:107450007FA952FB47AC5A3079047F6F063E60E04B
-:10746000FF64CF257B59A593F328D45F0CCF5B4FE6
-:1074700022DF60CE72ADD31EE98DF80B721FC6DB22
-:1074800027D66D00181A86C17F365DC834E4F2F63F
-:1074900007049C54B32D84FC52B51D3946FCC5AE7F
-:1074A0009E8F6E87763731B16A467E59840B957F01
-:1074B0006CA77216F05FD330D2FBFD687FFB93B8E8
-:1074C0003DC234CDED4C437A6104E46C336B3243FE
-:1074D0003BC276A0B70CD66121BDB99DB9911ED033
-:1074E000C3762681581643B86E62AC229A0EE453D6
-:1074F000FA25D4457AB2A7061EB4D07C0CF52C60D0
-:10750000417D08E706F05617B2809ADFE5171CE2C6
-:1075100070D37746564FFAEC0B5F9FC8443E6D3DE3
-:1075200004FAD850DC671DF129AB3596FE185B4A8A
-:10753000708A08FCD8BCC44EFBDC69BFF9DE11FBC5
-:107540001C5E8AF222776172CCFECA76D95F663100
-:10755000DFF0E87E03D46F76DF7605FD32D95FE693
-:1075600052FDE625EE2BF4DFBB87FE33088F7AEE63
-:107570003F9BEA3787DE71DC0EA0D814697778DD8F
-:107580005DFA753C9CB317C6F2E5A1BB63CB122E26
-:107590001683E69C0030B7DCA7F36C85FEBE732C27
-:1075A000B65D45FE1FC9FEED6A1F724EC2F6609FB2
-:1075B0006F85B7379C8D6DEF2D7DCD8174DCD59EA9
-:1075C000CFEFA62F63DBC5EF4FFC7C615EA9DF8F99
-:1075D0009AD718B329A67E4AE565F34AFD41D4BC83
-:1075E0006E71C5B6F72DED7E5EB7159AFEE9BC64E7
-:1075F000BB3B465E5DBBF8754CAA30F50077DEFEFE
-:107600000753AEAEDF1F56FDF376F72C8A1FC74F28
-:10761000F8BE40A78D4981FAE9F80AF5459B95F433
-:10762000DECBEC2C219FC6A1E201DF7992B471F888
-:107630005D85A43BE16738FCE275E9C8D7B3841FD8
-:107640009D09BF426BB58BFC0A3ED11EE44923F273
-:107650008BD61DF05D129F57B4FE9452CDED0A3BC0
-:107660008B103D4B7D2999D9156E8F737DA7A7711E
-:10767000E2FB7F18154098EF8C4563D80740872FB1
-:107680001BEDA52ADA675B14D20766946BFA44C037
-:107690008F514D0AF995663CF0F6A3E88FB9FEB418
-:1076A0007B7718DECF08383C386C6D07D3304E90AE
-:1076B000AE9F5FF4203C1F3BC0288E86E5F9886FA3
-:1076C00036CD8DF64625CE08FA396FA82FB223DFC6
-:1076D000FC914D43BE5939597B8FD6FB156825D097
-:1076E0006E265F3ADBD532C188F18ECABBDD2351ED
-:1076F000EFA90C5A347A9A996A857554823E86CFDE
-:107700007423532DF8B432333E4B9671FD2B69A48C
-:10771000D75809E357B63DF357FC6EB61ADACFF5E2
-:10772000C900ADBBB2ED8DBFA1BE3653F31A915F58
-:107730000CDC61E43AA9C087C1C1D832F283E87297
-:107740005128B63CFC706CF9D3140EDF51C28F7512
-:10775000609F89F8F6BC8FADA47FEE05818776B275
-:10776000FF0513C98F31F36CB45F1F9FB36E45BF24
-:10777000DEFEE3566A3FF7390B6FAF0BBE8865FF3D
-:107780008B096467CF4B099624C3BC5FF95A4FF04D
-:10779000C66519B0FF17076C5D85F5C383251817FB
-:1077A0007BF93AC63AB05E0D0CC175BEFC0FEEB760
-:1077B0008E3C6B0A6C837E3FDEF3CC8B3FC3719FA4
-:1077C000CD4A56607F6E40B900ED463D69B6A2BD18
-:1077D00031EAE3E7FB20DF98B7C314B3BE175314B5
-:1077E000A13FB89310EF7AF23B9E5AF90C7D5F7877
-:1077F000F618E1DD5E835F87713CFF4A8E677B2D63
-:10780000DC4FBAD7921BC07DDA97C2E9EA06DDB633
-:107810005FD6A27EF916D7437AEABFD03563737973
-:10782000377EC6CE7A18371FF6F9E247D67BD01FCF
-:10783000D77F7DEC3E0D08C4965F4BE17AC274168B
-:10784000F53E1FE7D37BB90BE7B395D17C0ACFBEDA
-:107850007F573EEAE326AE87C48FFBFB142E3F7FA3
-:10786000F52BE887F3193DD7C3016240D7F3043DF8
-:10787000BCA2703D18FE166601FECF4305A277D765
-:10788000FB7971F390FD2F1570FADC9CB40DE5B90E
-:10789000D3C8F1FEDC92C38F621C53B63BB344D312
-:1078A000CAA3FCCAB3D6CF3F9401FB5FDD9A4A76E8
-:1078B000A67C5FFDECC1B41FC2FBF33B540FAABE14
-:1078C000D5539F7E6414B67B561FC47962BD06FDF6
-:1078D0009F0FBE9684ED666D720C437F89FC7EF629
-:1078E000FA9BB5F2287E7AADF424E9BF5AD8C7BB1B
-:1078F00046768CCD0278CF5BAF78B0D9BCE0F72765
-:107900007D0F759D4D7A0FC6374A54E6D50F23D3A8
-:107910007D323EAB5B5F3A9409F575FB4694E0BA65
-:1079200056E9BCB70D467AD962203F58FCFE189D37
-:107930001C7FE1FB900EBE5F75A7AD0AE322D06FFE
-:107940003B960F146ED3A31F3FE92CF037FEFE9831
-:107950000E78E6D9B6878680CD02786C6B42FAD86D
-:107960008B8E0B1CE7053DC90916E2EB1825FCCFF1
-:10797000F3FEB3C5A8C2F3ECD96549A59CFE689F88
-:1079800090A93B617D554F0E267A9DBD3E96BE6403
-:107990003B39DF3981D8FA78BC28704A7F052B8CB7
-:1079A000C6AFF87629E3FD46A4C7EA45C0CFA3E8F1
-:1079B000A6FA74B311F5AEF871508364725FF58462
-:1079C00097CC4DEBB5F0F582CA6B86F59EC37F71FF
-:1079D000BFB98276FD5C8596C8E65DC7CADD00CF7B
-:1079E000791359053E253F3C3F323804DBEF35849F
-:1079F0009FFE25F1C144E207E7EDA124F42B650ABF
-:107A0000BFDE79772809F9DC4511B7C37A2CCF6D31
-:107A100003790074FDF12746920B4B83079370BFE7
-:107A2000CEBF68D1E9605F3E6E4D29437FD0F9E05B
-:107A3000EF92705DE7822965E8D7EB894FC4F33791
-:107A4000A90F9CC47F5E0F7A8F531BEB44F86290A2
-:107A50002103E44D4A7D517D37742FBF731AEB8BA0
-:107A6000304F23F2239B671B8713C5F33E3B9CB229
-:107A70000DF75BF2D94A85F72FBF9FEABC3ABE5A91
-:107A8000B16A00C5993E63EE5EC8E7EF46DA80F959
-:107A90001DDE5FD00BF50DF9FEC134EF3D4EE8CF92
-:107AA00055D641F901AE71CCD3004D3FD07BEEB736
-:107AB00003FCEF6520FFF059EC3392DFA63195D639
-:107AC0003743652115F07D06CAE72154267D68C637
-:107AD0002625D000EBB977752CBC66B598BAF004B2
-:107AE000FE9BC380B122216E8A6A07FDCF41390C0B
-:107AF000FB30D7CC4209D0EFDCEDB1DFCD63219A6A
-:107B00004FF5F3DF98BADB8FBF8AFD78304D5B8489
-:107B1000FBA14C34D3BC7EFC824272D229FC9591ED
-:107B2000C77A0530AE364FCAFD77F8BED53D50A9AD
-:107B3000DD0BF87771D10CEDDE144A3DD1501F6199
-:107B40002D8984CFF3CA592807E637AF4D090D4E6A
-:107B5000EAEA8FFD46E1761EE3F1CEBFBEC3F7F140
-:107B60002EA13FCD84D7A88FDCA0E3793D910D0AEB
-:107B7000C9D751CF2BFE44E0CF33CD602A229F12CC
-:107B8000EBC6F6BDA03C9BF9094EBF74E6D3FAE6FE
-:107B9000B00E23A7A340431A8C5B7B167813BB1A45
-:107BA0007CB89EF6FD73E6A17DDF82734E457C288E
-:107BB000213C91EF414F6296E4CBBFC7FDD3A2E0D9
-:107BC0005DB529B6CCB647957BE3FE40396ADF6ADE
-:107BD000777E63D2BAD9AFC73AE55B60C084C1D1C2
-:107BE00074C2F5F013623F1FFBFEAC0CE44B6B500C
-:107BF0009FCE141D8C443ECEA49F256486FEADC34B
-:107C0000598CDF05F43D2ABFE2FCD1B8F5D98CAD23
-:107C100033F8287E3143EF3D84A1B6A274DF6F11A3
-:107C20004F66E8B45C95E0AA1590FDBD88E3C3E318
-:107C3000C3EA07D4776377CBF9AF5382211DF2A74C
-:107C40003D5C5F492C8E187C5174FF9EE0BBBD0EDD
-:107C5000840F6521DEBDA4509C6083C21A1580B3D9
-:107C60000BF619E5D306E5E42194671B6E75B306A0
-:107C7000A82FDE3961FE6B64BB5B29CFA86667A9BC
-:107C8000BEC646EBE7FA7342FD561DD4A7DF533854
-:107C90000CE90DD67DCF44787FC2E9A67965D83846
-:107CA000FEB896F9F317A09FF88077FE6B8877836C
-:107CB000ADE48F4B07582526D3B309F562175BAAAD
-:107CC00060BBE5A90ACF83A864537E3388B059ED21
-:107CD00095CC9FC7E0A9A8AC11FDCBE92AE8D9FC57
-:107CE0007D238EF358129F57AA4E7FCF04D4F3877B
-:107CF000F172F26245DB46F26C2DCD2BDDC42A70A9
-:107D0000DDF81EED029886D64AF5018253FA98FAFC
-:107D1000229C477A1FFE741A43D9D8CF914E3CF16A
-:107D2000E9507E2C147AC0C2AD65E9C8EF8F9C374C
-:107D3000ABC8D78FB8A43E1BB2A13ECBFA16F2F661
-:107D400042DE2E2C1A938E44EDCC8D6D77D1A0F5AA
-:107D50001A8E72EBA89EE24F7FB169BD1CD0EE0671
-:107D600023EB36EFAF572ADFD7BA2F151688F26309
-:107D7000D44DB944F642DD976ACCFBF34BCC2C10C2
-:107D8000E5C7A8AE3A3016DBD5B08EE5888F35C191
-:107D9000041688A28F1BACDD8F2BE9A2EE4B3DF3BE
-:107DA000773BAE31F6FD9729CC9FD25DBBB4D8F7B7
-:107DB000B08E98F2EE2F3AD781EFD9C87012FA75CB
-:107DC000C7A37C86F2C580CE6F00BE75C4C0E5EE49
-:107DD000057B38462E5F7087B95C46BF958DCBB367
-:107DE00009B8CF6A24696262D738B21EBF4F8E5A73
-:107DF000EF85294616A2FD89D03C107EFEFE8C6DD3
-:107E00006CFBD488F93AD56DFB097E126FA2E1E8CC
-:107E10008F8E8335748474C033C6A56E5F35680059
-:107E2000A0E001C91F9E5EA58D867ABD2E865F24C7
-:107E30001477F20F62578F61548EF8CD33ABD06F49
-:107E4000DB55E6EDBBBEDF310EEB8B07F1EF27A76D
-:107E50003EFBE6324A6A69E67A971AC9F5264695E4
-:107E6000CD71651B94074795ED71F5CEB87A575CD7
-:107E7000399BB73F9F18CAD57B18BB27F585712A58
-:107E8000F0CDF319A16998C7B6BAE1D7E3CA819FCB
-:107E9000D51473395FDBA678485C09F8D57AB81E2B
-:107EA0006BF3848D983F9750DC7108F94BF56EC5E4
-:107EB000AE003DD882AD212AE377EEA8EF820A7D9D
-:107EC000571D3C49DFF5D87FA18EE87D55E129DEBD
-:107ED0002EF821E9132B1AE753BE808C87EB994FBC
-:107EE000CB52BAE2E192CF5EC8D00E129FDDA7D886
-:107EF000913E3BF114FB8DF243C9F67F1ADCF64745
-:107F0000545712167EBA14F5EBFFACF97004EA9BD5
-:107F10007F12F2649D121880E36E64BE01284F7FC9
-:107F200054D36FBF0EDA9D30843763CC6F4BEA6B4E
-:107F300004BF1389E11CCC0B0C3CF6EFBC9C1ADE91
-:107F40008CF0BCF458C738CCFB3B9113CEC13CC07D
-:107F5000EDA9FFC5CBFDC29BB17CE4B133BC3C387D
-:107F60009CA387EF7BFB3F1C570EDF3F65EF9EAE68
-:107F70001F13FC44CEAFB6AFD69C8A7A5E359743CA
-:107F80009BC1463303DF9C36F7DC0B4F011CA6FD7B
-:107F90003481F8D953E7278DE3F682DFAB96A03F13
-:107FA00099FF919C247EAF929E9181B231B96B3F33
-:107FB00012733BDC2447AEAB6F45FD257DDA209282
-:107FC00023E54EED0B1C573EF767C113DA7F916A2C
-:107FD000E7FC5BAFA3F87AFACF1249CF5B63E1EB22
-:107FE00001BAA1FDB589FDF89558CFAF52B91D7AF8
-:107FF000BFF366EAE72EA1DFB7AC0C3C6B01F81FBC
-:1080000097793B6BB9BDF0C3ADC057808FB738B41B
-:108010000CE4273F147978927FE0FBE4283BA9A584
-:1080200008CAB62E7BB86582966175E2334D8771BA
-:1080300024C98F5AF2F977522EA537F071D3D70C95
-:10804000D886EB4850B93F6CE694826D4B492F9827
-:1080500048F3659A96A1407FA7E7F4D6A19F4CEE1E
-:10806000CF9ABE5A3BAD47C419E43EC9FDFC2295E8
-:10807000DBF733F4A057C03A2DE93EEA0FF48C2128
-:10808000C21F477AC617B8C751F0656A7804BEFFA9
-:10809000FF084E1F7D1B70AA5904FC427715FC4255
-:1080A000C06F9D1232A4737E41F63DBE47B9D3EE38
-:1080B000F47D9D1A95AF33ED6735A457CA7925FC39
-:1080C0006457C50FD8E57416AFF799D2F87E49FD0D
-:1080D000D423FDAA629C13C7CD144739610C12DF6B
-:1080E0003C0176D552E42F220FA0E4A7F38EA07DA9
-:1080F0002AFBAD49D373FFB4DC77C5DB3A2B1FF302
-:108100006298DF8CEB9860A47D9772B7C5C1F35C71
-:108110005A1EC8A23C978B2CCCC83F3B92117F04BF
-:108120003CA0FAC8D434A27F68EFB760FB39D751BE
-:108130007BC00B3FF187A956B2835A306E8EF55340
-:108140000B03989783763CE1DB1C1D8DDB0DBE7025
-:10815000FF777F9EF721F126AD81FB9998AA0D99B3
-:108160001025E76F4DE3FB9C501C7EE93F50AF5D4F
-:108170006D21BD16652CC5A89AD3A91FD8FF6169CA
-:10818000DC4F417876EF238922BFCE5382705D9118
-:10819000C8F1729385C7CF36811E4D7C51E0AFCCBC
-:1081A000EFF3097D2F5CA54B427D414B937633C89D
-:1081B000F512E1BF87FAE961E524DA7FD3FDFA9091
-:1081C00009FDCC4D376BE1283B06FF30FE788FE090
-:1081D000AB6C3D233BEB1EFC2E09FBB72661BCF5C7
-:1081E0001EFC1EEDC8C537C7C41527A671FA96F345
-:1081F0008BE7FB13E5BC9A1FD7A2C791FDC7F70712
-:1082000076EDA4B4548273A817EEEF523DED5FFCF7
-:108210003CC3EBB91F3EBC3E8FF04EF6D7D33CFFBC
-:10822000AC8FDCA7801C9C3586DBFBD2FE9929EC49
-:1082300071B638D6BE43BF4F67597F7939DE5EC409
-:108240007C81D8F65C6F4918143112DDBA9598F923
-:108250004B78F5048707AE116E52EE3D6E013A0081
-:108260007C598F7995805FEB1F482039E6340606EC
-:10827000205E6DC47C1D92A7DC8EFFFC48AC3F26BF
-:108280007EFF7E9E26FD6AD7667F3F8278D18DFD78
-:108290005D678D6C41F8D75919D1E7857D89448F89
-:1082A000AC6F781AE6D15DDC6B62480FB54AB80056
-:1082B000F9E00545ABA4764B13DC4897D2DFF1C15A
-:1082C000CBDCDF51873B03EBADF3FF17E571D5ED59
-:1082D0008EB5CB2FC07F5540471774E112EC4FF29B
-:1082E00017D0CB35D2B7AA787CAB56C7FC68B7DDC0
-:1082F000A09B3E87F38D4CB68DDE9F2C5810A5F7C2
-:1083000043BB762599A323D261B5D8975ADD296A54
-:10831000578DF958B83F68BFA11F102BA3FCD6B5E5
-:10832000AB3FA67CB0DA9DB1F853DD855FCA370A52
-:108330007E17856FC41FFC82BF30EE8F29E7F1F9ED
-:1083400044514EA8E8A0FCB03AE18F493D101E8B85
-:108350007C2AB138C8A6C3B3EE2CD75F46B56D3DB5
-:108360008876BAA3A22307C9AA4EF84125FEC87988
-:108370005EDFB6568F76A4D47BA2ECD8011363FCE3
-:1083800018CBE83BB48B71BC30BECA40F4E2F27249
-:108390009D9097096860A35C6DEE4F7215E51EF223
-:1083A0003B695723FF43FC2A4A2F3B8EF4FF467A52
-:1083B000D91F399F04BC453B018DB4EB7BC63F09F7
-:1083C0001FD90EEDEB7FEE9F147C9C71BFE48237CA
-:1083D00052FF291D9CEFE4AF57F44BA623BE2F504C
-:1083E000DCE988EF17057F3CBCBF80E2A0F2FD19F5
-:1083F000BD8FFC8FD2FF3507FD7EF0AC16FC689672
-:10840000F097CD927EB2F5B1F15AF4534797E74A0F
-:10841000BFD90E53571E13FAA9CA592811FAAB41F6
-:10842000BF1B3E83B1DFD5B2087D57B7FB1B534C52
-:108430003CB885C3F11E814F8EF2801EF9D8060B21
-:10844000F79F49FE366AF156C2935EC3B4FC87902B
-:108450006EDE3090FFE57F0B3C90707930ADECCF55
-:10846000B8AF56BDF00F3E6422BE7E1AF48556E1C9
-:10847000F7998876F212A6E13901A6DA73A3ED68BE
-:10848000F95CB5D75285F89899AE8BC1D7F634030D
-:1084900095C91F46722381F402607343105F4B7AC3
-:1084A0004BB9CD86A01FEEA4B0EB6BEFB4F9B0BF13
-:1084B000B08EF3C5FEE97C9FFBA7F3BC5959EEB41F
-:1084C00043053ECA382BFAA5A2E314433ADBAF15A5
-:1084D000FA2EA3F5AE9B23F2E83BE942477C2E61DE
-:1084E0009097E4C30DBA32E273918F6C6E844BC5E2
-:1084F000C7D573701D9F4DB1D279C97B859FFCC6CE
-:10850000749E8726FDDBD7EA272F4DEFC4C7183F9F
-:10851000F95EC117F7323E5FFF592BF7F7AACC8FF0
-:108520007C726F704000E75B29FC23A87F21BF8E1F
-:10853000BCC4F791A95C5FDBDB3638807474D2E091
-:10854000DB3013FD4DAD06F21B3235F0ECD3D8CF46
-:10855000AB191ECCB3BAA08B6CF93DB4DB7BF657DC
-:10856000591857DB2BE21BD5C65001E9F522AFB4F1
-:108570003A2954807EAA57C47E555BA10CEF532C38
-:10858000BEBBD253BBE28FF81DBE3F15E076C329B8
-:10859000C6F1C0BF9AC79701BE193371BE2BD3294C
-:1085A0007E89FB82FBF0C1BEC1B4AE7506D17E0FE1
-:1085B000F7732B130BA7919C59654A41F85FF41A86
-:1085C000292FBA6E0DD76B67E8DC5B1621EF7D357E
-:1085D00081D637B3E528C595EA1E994DE74DEBE600
-:1085E0002EBE9DFD93780BCAA968FFFE0516C9250E
-:1085F0007BBDAA773004F3B8D036C0C3C3A5FCFC5A
-:1086000052ADC8BF3D6D601ACE3BB2CF10E8EE5CF4
-:10861000654FFD9383B384CB4B1CA72E3AAE45F236
-:108620002536CE75A5F20543B8E001187F758A6F2F
-:1086300075BAD03B115E75AF66101FFDE0E12F7279
-:1086400049EF69E6F194D3066D1AD289A33C649C84
-:108650001EC55FB70B3A9E6112FA2DF0C168BA973A
-:10866000F52565B174269F4F0A7A4B14791897D770
-:10867000CB3CBF492694C7DCF585FDBAF9393411E6
-:10868000DF1C7536B21FF3D9AA8345143FCD5B1C9E
-:1086900022BA047887D03E39BD2191F3135826F6CB
-:1086A000336B2423FD7A969EE795CC3281BECEF5BE
-:1086B000026A7F66433AC1A16419D753232F29C4A4
-:1086C00017659CB792F1EF77359EF4EBA17DE50E2F
-:1086D000A508582BAB6C2CA5BC93B99BF269FF473E
-:1086E00009FE3BC3A4156C407CDBC5E384301ED976
-:1086F00005D5985B378CF89211E56BD50E85E22590
-:1087000072FDF1715516888D478D0A72FE8D728348
-:1087100045E993520EA1BC60717A6E2C5EF8AF4AA7
-:108720009EC6CB8377D3AF56AF8C95A7EF21FF4A78
-:10873000BD5C9E82DD701CF1B0A48CD371A495C782
-:108740009F6A583D8FC30979D6B92E210FCFE8B95A
-:10875000FC9D655A4BCF8BE93C0E359785451C2A0D
-:1087600062C4F9F5845F17D3657E7B2C7E49BC8A91
-:10877000209E417FD56759E8BB305EF56216AA1985
-:10878000C29F894348BE73396FE6721E9FD6AB9075
-:10879000F7F1723E5EAEC7CB73146728B7253E452E
-:1087A000C723504F1AB538A0E7FEE66C3BE665CA12
-:1087B000FDBDDFA939B253BBF4C0BA6366B37B28F1
-:1087C00096BDACB70DFD68A59B73A0BE4EE5E7C393
-:1087D00013004E5BE1FD666187ACCAE174E612F9F5
-:1087E0005706D5CB8A6CB84F1DE43788A432CAA788
-:1087F00097F0DD9C08DF613E420EC78FCEEFCDAC17
-:10880000D11AF57DD95E0BC9A94B7B12E91C205307
-:108810007D790EE82FED4F603F40F9C2DE44D21360
-:108820002E08B9E194FE19B69CF6A38F8BEFB39F87
-:108830009565A19F9B29E3B2189D8FE7FA6C8DA3E4
-:10884000A7F884A8CFEFB893E39989E4F52547F812
-:108850007E2CC37C28BF3BCBC5F7BD6EE798A29F9B
-:10886000615E86D7E6E150F515A1FE61D22FBCD33B
-:10887000ACC77B1216471E8075D4E4D8286FBC3C69
-:10888000EFFD77A742F9A39D063A5F3AE7A949BDF4
-:1088900042F899AAB9BAA393390143CCB9C5793B37
-:1088A00062CB35C1D8725DDC3D058BDEDFFA667BBD
-:1088B000547DB94B9CEB74330FE6BD33FDDDBD7CBD
-:1088C000DDF05DF9FC6249E0CDF67E9437789B8B54
-:1088D000D3B311F5A3E9880FDD7CA773F17D35993A
-:1088E000EACFE2F903D32B26BACF20DDE59BEC4A91
-:1088F000453B2A7208F7D394777E08CAD3B2BCAF3F
-:10890000286E78E941E641F85CB294929E746983DE
-:10891000C58D76634BAE8DF0A0E55525A070BB628A
-:10892000FC08E0AF55341558EFFA5B3FE2876598D5
-:1089300099DF7F0056950BF9954676DE990956FB2F
-:1089400032F8AE6A3D97DBD5AC2309F9C006B97F92
-:10895000FAE78D66F8677EA3366029CC779ED74A02
-:10896000E7A4D4AF55BA1F600576196597D4BB3814
-:108970003FA831878DA538FE570B2BD00528FD79F0
-:1089800026834FC3F37886DD45A12C78357BD14112
-:10899000B2BF3AE3F6FB38DF9AFDC07E7AAF4CAC4B
-:1089A000A0F59E81F5225C0E6E30D17ACFE4D8C856
-:1089B000FE3DB399DBF9B3EDC68099F4962F53F0E1
-:1089C0001CF399CD06BA3FE07278DC42E7893FDCC0
-:1089D000F43AF91B3F647C5CFF4E3DE93D1FDA230E
-:1089E000252184A3BB3E09F5E6AAF573E83CF2EC29
-:1089F000CD7A2FF2B3D99BEFFBFDF5E8279B785793
-:108A0000312EE926C7C234B7ADAB5EEABB6AF2C805
-:108A1000A7910E6FFA7A4CC74DA8776D063AC9E751
-:108A2000E71D50DF6FDF7C0BE9B7B327581DB82E69
-:108A3000F7A6A7C6A21CFA7042269D9F9EFD82C281
-:108A4000F0CA8CD98E4569F87EB6A27ABBC3A7A1BD
-:108A50002E7EEEB934CFE609E1777FD4139E005D18
-:108A6000DD8972B866B381F4E7F689C7DF9DEAEC69
-:108A7000A22B65E2FADB4761FB670CD4BE536FDAC9
-:108A8000F43D892F2C5482F619875B3C9D99F21690
-:108A900017E0BCE2E96DF6B2FA021EA7BB36BA6374
-:108AA0009B38DDFD9B4BDCFF71F574B7D7957AF5EC
-:108AB00074C7B29363E4F0E5FCCD4FF094710EB34C
-:108AC00087694FD928AEAD29C07F3FC080FE087CA2
-:108AD000F27362EADF16EC780BF1D8E53B82F3C85B
-:108AE000635A11CA4D77C45E8667C06C422F649B7F
-:108AF0004CD29E203B615D2A7B7A55945FE4CFA2E5
-:108B00003FE0037FC47E2EBCF7D521DCA7DADCF37F
-:108B100043D0BF5DF7E55F282E6A6BE371759B2735
-:108B200042F90606A797F050F2F73A0F973FF1EB9C
-:108B30002AC8E0F6619D3342FDE833DD546E1171C1
-:108B4000A48D8BACE437DEE80C58B8DFC3CF503EC1
-:108B50008D1FA9E7F140A1B77D4FF85DCDC507197D
-:108B6000C601D9689E8FF756F1413505CABF1F79F6
-:108B7000B387CE51163FD9D41BD73DDA20EAFBD0BC
-:108B80003D27FFAE9552FD0297DE8DF43DBE98E77E
-:108B9000A3B2AA24F2E7BC55FC81F3DEA8F97B99C5
-:108BA000D96D03BC9908C41A9DFF78FB688BDB164E
-:108BB000853F9F352B155C7F76F79A3C98FB6B4879
-:108BC0001E17C7C26381CB48E3BE915ECA3200CE96
-:108BD00037DDC8F7E3DC0BA600F2C173E25C523C60
-:108BE000FC7A6508FC5107C4E427388DC15C949376
-:108BF0001F2BB1DFCD6DD2537EC09C26850560BC96
-:108C000073CFEECA457EFED153BB72A747CD27FE78
-:108C10003BF9CCC888F57FC6FBB37BF263CB7617F4
-:108C2000D7339FB94F57FB8B557F273FF6F436E17B
-:108C300007D7B4BE4EB4AB44FBF8FECA057E28BBD2
-:108C400015F29F483FEEA9C34F62C4A873FF2C6D75
-:108C5000F9BAE83C52F91C25F66D12EE1B2CC5D270
-:108C6000C4CB3DED574FF47842C821B96FA79AFAAB
-:108C7000F442381A6B6D2AE3E7030B51EFDFCCACFB
-:108C80001EA4A72F443EB1D30A4FD0D38C992E1BDC
-:108C9000F233791FC34FAC49DBF0F985C837765AF8
-:108CA000E109FDE46416527F5FE8BC641FFE44DF07
-:108CB0004CE7466FC9E0704867214541563BEF6578
-:108CC00085F2E49A62E19DD6C0E548A4D248F24B11
-:108CD000C2FD86E9F7931DDCCD7EAD473CCA1CC9B9
-:108CE000DFF933F2851E1DA678896524B3A39FA002
-:108CF000E17A3FCD43EE571D6FCE943685F467CCB5
-:108D0000F34948A6B8B05F3C992D9975C6491284BD
-:108D1000DDCCE2E222E9A077633B394F2853BED095
-:108D20001A47B0B980C795492FC57EF1FDF4412A95
-:108D3000C515B09D71D895F1AF134F453EE878F950
-:108D4000BECADA6D1C663C9ECBC27D00F9887A21D2
-:108D5000F31862CE656D027D1AED3D19E7D6EB8200
-:108D6000452EB24F3AC2E887319698DD286F13F44A
-:108D7000C142DCBFF8B837B4CBE7F916D90E94334B
-:108D8000F2DC55EDA2315E8CC781FEE137E3FE4D8A
-:108D9000E0FB57FB4029BD5726162E45FCAA5BCCAD
-:108DA000E87E88316DAD940F5657C1F5B1BADD2715
-:108DB0008D0CF077BAF00B31E1174F13FB7A4AE8CC
-:108DC000DF5D71BDF016CCB76F99934DE7ACE3F35F
-:108DD00067AE35AE7B31110032342A5ED7CBCCE59D
-:108DE0008CD87F49DF327E9738C89B8F9AB861BD97
-:108DF000E98875C4B5E4C7841F2ECFFE27F931FE7C
-:108E0000FADB313FC68C5ABEA8C769801CED3C47CF
-:108E10006971537CAFB31EEFBF30EF56C47839B7DA
-:108E2000DFAC529EAF289F5A8D7EB1351616335E49
-:108E3000F4FCD4B8FE0DD0BFCD2DDBEBC6637F8F25
-:108E40000D13657FE56ACC075A6388ED8F50509EFD
-:108E5000FB34778DB7393BF8F0EAD15DF21CE4FBC7
-:108E600061941752AEAF383EBE79A81BE9EB73CAC6
-:108E70009B96F2B9CEC9F365E2F9D8DB829F835E97
-:108E80003C1645EE8A29F3E9BE88CE38775BA58685
-:108E9000FAB08C73D72DF652FE34E803FF9141FAF5
-:108EA000C0F933FB19EA9DE7C82EA8FB52E5FE2660
-:108EB000D02BF0FE1F735B29F955319DB75FD4FEAF
-:108EC000CF15720A7578A487BA4D3F784A0FF543DB
-:108ED00033B530F56BE8FEFEAFBF65703DBEAEB09A
-:108EE0006C03F203B65DA1FBB756157E467A47EDDB
-:108EF0009E9B4744E7FFCFD9FD18CF1FDF61E8767F
-:108F0000FD7FCBE07A6AED9E97C86F7A2EC08F2DD9
-:108F100055A98195A8875655E950F362C581CAA91C
-:108F2000A40F4C8175C0BAFE9CC1E153B763921F78
-:108F3000CF23D4C17F0ABCDAE89D4576C1C6296635
-:108F40001BC697EA0AA7CF27FCB75B355C7FFC3CC2
-:108F5000BBE2E9563A37BE6AB7A102F5A812D09B28
-:108F6000FE0DE69B933CAEC2037C294BDF5AF463B3
-:108F70001BE617742F97B764713DA051F1FAEF28E3
-:108F8000267F298BCE57CADBCDF5337BA631C63F72
-:108F90006FCFE4F74C8DF6778C419C7B550D27A065
-:108FA0009E5CC7B44FD1FE655E9B9BFCC48CE713EF
-:108FB0003897B8C94F6C76867F3E94F42895E2E9DD
-:108FC000D2BEB8B087FBD79665FA7232D13FA80FF0
-:108FD0003F7A07C2EDE7AAF037733E933BC9360CE0
-:108FE000FD611667F8D10A37E519915FA2D7771BA3
-:108FF000691F5E75323BC2678CBF5255A2E48CE498
-:109000001B633ACF4D39C90F5BC6D91AEB07BB7545
-:10901000C64C28DAF84D4A979E70F8ABC92ABE9420
-:10902000FA83CEEC233BA77C0AD88D8897CB238785
-:1090300074E8F7777690FE581354689C9AC2DF5014
-:109040001EE03C916FD699F7A586290FEE3B990952
-:10905000C28FD9C8F19275905DCC9EE7F007FE44AF
-:10906000F9715D7AFC526A27FB338A78458DF0E30B
-:1090700000A0A8BE2C53FAE19689A7CCE7E3E3321F
-:10908000D55D12ED775837012409CDCB9D84F37D52
-:10909000C4EABD2D13E6750AF017D779AA2981EE27
-:1090A000035BA77468E8D7F417F1BCE1783CF28958
-:1090B000717B1D888C457912D9D353DE30CF13DEF6
-:1090C00030E23ACADB2FDEFDE958C40F56C1881ED4
-:1090D0006B775F5DDEF04CB11FFFCFE40D7B146D4D
-:1090E0001B3CEFCF7470FD4AE60D7BF87EC9786BB0
-:1090F0007CBEF0858C90CAF3FAC25B9E42BB7DB702
-:1091000089F261C6EF7EFD18FA35C79B5990E2CF10
-:1091100071FA43C4396909D2C9C54FCE6C798861E7
-:10912000BEF9CB1E7E1E36561FE8C91EA098499474
-:10913000DDB83653E8E7DF923D20F9759DB0AF3ECC
-:1091400056228F14E0FAF6E9EDDD9D5FDA22C7EFD3
-:1091500029DFA5ADFB7C17E98FAE08E7C7C4BF7652
-:1091600074F6776DF1B4E7507676134F5345FE9A57
-:10917000AA70D6C11C3CBF49C6D3D4D6011427332C
-:1091800075C5D342AC9B789A2AE2532B0C5A25F929
-:1091900069F699DCDC8EF612FF6A6C4DF5207FAB28
-:1091A0009B7BEE453C7AA13AC6BAF09C5FA3807FD8
-:1091B000F5D5C7D3DA33BB89A76D157ADB0785BA36
-:1091C0009011E0BA9571FEEB6F9371351DD9B59191
-:1091D000877368DECA4433CDFB83574DDBD03F3500
-:1091E00043C6CB5EE5FEB519222EF6C1C402F23F9E
-:1091F000F504E7194DB1718777059C2F594AC94F7E
-:109200007FFF2F26907F7E16FAF7FBA07FAB59F8E1
-:10921000EBB99FCFDDC4EF3170EF50E81E59441316
-:109220001DE9A476BA4F761EB0D18DC87AFD80357F
-:10923000DF81D78A4E417DC8DD086550FAD595AAF1
-:10924000DF05EDB61E4B20BFE20AA75BE4E7F1F8AD
-:10925000B57FB512E8C7FBA5FBE3FC8D3A0DFBB962
-:1092600094C9E57C5296B1DBFB281A0D224E22C62A
-:109270005BCA60DFE1A953F87385B89F301E1EB248
-:10928000BF4643BD19FD7B911C7E0FCD25A33685BE
-:10929000FCCEC90574DF5463627D5305AF279ABDC8
-:1092A000648978A9FEBB2A5748993B99F2A83345AF
-:1092B0005E621C9C6736C796E3E347F1E7E36630DE
-:1092C0005FFF8C3E979F1F3B8FFC16FABFB42A5F4F
-:1092D000EC8B87E2288D06F71FF2290ECBEF935A0D
-:1092E0009ACDE1A6CBE1CFDE8E72BA1710E885EBFE
-:1092F000718CCFBFF7779D0AD24BA383E3ED7F77C5
-:10930000DEF1F34DCB2AE07A8D83D36BE34A25C09F
-:10931000E1C5E77DB57E92E2AC6FD74FF281E2798D
-:109320003A944FDF117FF03F6C20BADB6BE1E75ED0
-:1093300025BFA28423B43F85BD7B232AD318573D84
-:10934000BB9CEE85DA58D53B09E3AE6326D9681D90
-:10935000B5AFF273D5358BC3B988D7B565E182FA5D
-:109360006EE08A03A892BF42BBE94EC6EF176A8A35
-:109370008D23C6C78757A768E3B346A0BDF441EB6A
-:10938000EBB8DFAD1692AFB58B234FA3FFC097E2CA
-:109390009B9405F871FE81E36315377D46FAFCC5A1
-:1093A0007DFDE93CE8F4C6D873716C756C7C923530
-:1093B0002593DF9DB5C4BEC7735B31DF5D16AFE497
-:1093C000FACD3AA36F00EA9F37DDC8F3313E99A387
-:1093D00063B8AF9F58F8FEFB1F4E14FCDA53102DF4
-:1093E0000FEA7BDC5F683708F302789EAC6C5F8322
-:1093F000FB0BFB5A2DF6F79397BE5380FB7BBEF514
-:109400003B05B8BFEB0CCD1AD24751BA6F21C2E36E
-:10941000F4CD5ED20F655EF0D5E25DC3B78C77D731
-:109420002A8F9BB3FE35798C7FD17E9357BFD2FBB9
-:109430002D245FF879E22EFFDD39BA57EDE2973A35
-:1094400005F9714FFDE50B3DCF65667ED4C34ACA71
-:10945000C2F45DC9DF750CF541A907C7CFFF4931DB
-:10946000FF9D599A09E5A0F4F75689BECD81CFB981
-:10947000BEBD5D217FAED9ED4F1A45F6D5CCE17A60
-:10948000E22FFF46E742589B62473B65CEF6A55464
-:109490007F61F70CAAD7994321B4C76AA01ECB2BD2
-:1094A00046C7E6791B77F27890B47F611E7AD4D7ED
-:1094B000129C1123E2672DEAD730C55A95FBBD6B8C
-:1094C0009DCCE367A80FC7DA8B32AEBBD1CBEFEDF3
-:1094D000D9D8A6D0FD5D69465F7E36EE6B5C7C77A1
-:1094E0007F96760EF14EC6E71F4CD30E22DD3A8DE5
-:1094F0002C97F2F90CF25C5AECB9CF9EF2E48E761E
-:10950000E2C195F4A8A9A42FFD9579495F7A072FA8
-:10951000CD243DEA4ED2AFE4FBCBF3E40231F1FCC3
-:1095200059E29CEE2C714E17F97E288EEF4797ABCF
-:10953000A3F2E442DDE53B44E5C9457F179D2717CB
-:109540008AE18F9C9FA4EB17501CBD0EE866D1B03A
-:109550002EBCAE66E26F7DE4033A37B4C3447EBAF4
-:109560006A91C75B57758AEC9F3A3C87C4E95BE315
-:10957000E7E9B97E550D7625E5330763F37D95EC74
-:109580006F57FF96ED7AF2C7DBB2A59DC8E95BAED7
-:109590004BAEA3BA4DE1F41837CF787B3ADEAF2E4D
-:1095A000EDE1ABE573EE6F79DDD7CAE706C7C1E140
-:1095B0005FE57397C527FA46923CDF427CE223774A
-:1095C000731ABA28659E74D33E9E273D566FD37892
-:1095D0003C54CFF325E2E3C2EEB114F7947168F383
-:1095E000CBFAC0B27C6AEFC17CB49A7D8994BF503B
-:1095F000E5AE223D3E3E1E3A97B58EC5ADF82B3BFB
-:1096000042E7DEFEBB7908DFCF4E74129F72B3FCD7
-:109610006BCC43B83BFB1AE2A1076D9FA7F8A2F001
-:10962000A56C101804837ACE379B2BF63F41E4AB30
-:1096300098553F73447DDFD3770BB2B93FF1A0C893
-:10964000935A939840F737B88CFC9C874BC7F3B973
-:1096500086667A17E2FCCD6EBE9F4FECF901C373AC
-:109660007B4F1882749F82BFC6E641B928FD58B26D
-:10967000FF76E15FBD5A3A5AF93FCC3F1E957473AD
-:10968000B5F1BCF5008328FA8AA7879EBEEB89BF97
-:109690006CCFF63EC1F1421B427190ABE44B09C561
-:1096A000C0B751EEEF34B9D11E41BF0CC9DBD5199B
-:1096B000D29EE7F742ACC921B9F88985DB27F2DCF5
-:1096C000945CFF2EB9FE6F496FB4A47BF764437FAF
-:1096D000A74B353A27B12291CB97C8B33C1F29FE3F
-:1096E000FC50BC5C91E75FE478BFFBBFCC578F7D3B
-:1096F0004B7C15E42CE91D3DC67D2FFBDECFEFC171
-:1097000029EBD044FE0D9DFB90F3AAEBE0797C673A
-:10971000C5FCE4FB90D07306E7681F215E9D7FCFF8
-:109720006CC6B86A7131E79FB55E1BC5256A833C7C
-:109730005FA77631233F823C273CDBE5FB1CF76FBC
-:10974000C5711BDD5F5BBB7B6B536FCA67F091BE5E
-:1097500078E13DFE3EDDE5FB02DBD52D0EC7C43FC3
-:109760004ABEF97C794531CD97FC004E53ECF9ABFC
-:109770008C1CCE6FE4332D47C217EC1DF8EE7C1520
-:10978000CF3FAF736AF652CA63E0FEF5047707F97C
-:10979000956A77929060940C8BF53FCB26BCA9DD3F
-:1097A000595A44F736042D45740FD19FF8BD5DE733
-:1097B0001FC80CE8B93F3E2967049E3B09DC8A7A42
-:1097C0006B1E8C832AEEF9D65B8BC8DF1847779225
-:1097D000DE3ACFDDFED01C6850BAE8719D81CB49DE
-:1097E00029DFFE91EDE6F110A7C8476C9BC066DA51
-:1097F000BACA36676C9EE6CEAC9BFF81FBF38F6CDA
-:1098000055C4D179DC3EDF0CD66CEFCBF1305FC4B0
-:10981000ED27887C0BE63777E559F4BE72DC5ECE27
-:10982000AF93EF8BB87DC297E27722EC46C28BC430
-:1098300026CE3718E005EAEDA3231D63F0BC5BDFFD
-:1098400096D06884572F043F9EA361E19F0FC5788F
-:10985000488A3A1AE3215B160D3B80715A7565C739
-:1098600077716BDCCDF632345967BBBC37E4107FBF
-:10987000A92F44FC2FFBA381E747AE4C2079DF9250
-:109880005B4DF991178E9B62CE23C53FFD6C990B02
-:10989000FD50BD9BDEA67844E24EA5DBBCD79FE61B
-:1098A000D844FEE43217FAB5129B3AFC23D14FF3A9
-:1098B000B0C2EF0085D92B2EF427A83AD43B66EC32
-:1098C000E6E7E567343BCACCC44F151ECF19ED243B
-:1098D0003EA9AEBC4D87769FBA94D17D7BF373B819
-:1098E0005FBC5F8B5D87FBFEDBAFF5DDC6E97C39D6
-:1098F0003A19573422B86A4C914398DA29E38B32EB
-:10990000CFAEA77BECA53C8AD7672FD363853CEA13
-:10991000D4E7E3F0B8A7EF247E4B7CFEAD81911E27
-:10992000F65BC54CE7DE245E37CAF3075F733F7111
-:109930009EC8DF39B5EABF86F07B02647C26C0EFA3
-:10994000713584976711BCC237FA71DD3B1DBADAF5
-:1099500041E45FABA57E56F27BF2F29AFA2C1B59DA
-:109960008C4F3B53600AA7F6CECB43BAF4031EF4E8
-:10997000EB060F6ECAE17952EACA04DA37752DDDBB
-:1099800010CE54471AED9BFA18DF9FEB73383C65F5
-:109990007C58FA4107E7F8D6603E70E739B545567E
-:1099A0007E4E4D9CAB4E5C74FC053CFFB545F8A368
-:1099B0000FBC3A907EDFE3D24A55413DF592A39227
-:1099C0007ECF6AA3D8D744B583D96DD1F87980F218
-:1099D000747BEFE3F986AA3837AEAE746E4578969D
-:1099E0003B7D948FFCDDC610FD04C6ABF6D314F7A7
-:1099F00003BD88CE079FDBA348BD28461E4ABB2D6A
-:109A0000DE1E7B51F2CDFF213D694F279FBE463BB5
-:109A10008BC5DA9B9DEDA5FD186F4FC47DDF93FECE
-:109A2000C3347F4CDECD11B1EF52BE670ADE28F39E
-:109A3000713ACF89B38005CF714C41A21CD1959763
-:109A4000C444BED27AC5EA417DA9A7BCA4CEBC213C
-:109A5000563F94FB37EBBF834F99D724F3962C984E
-:109A6000BF927279FE8A05F35752F07750F87973F6
-:109A7000997FD26070533E8BFF4146714965620504
-:109A8000F9FF92BD46C2BF8B2CB0017F07C03FD902
-:109A900046E7EAF19C13E27D447151BF632A34D951
-:109AA0005E87ED3BEF93AC64549FDC57CB403DCCDD
-:109AB00002F578CF75E739F399FCDEFDF8FC1599CE
-:109AC0004725E3CA99FD5F56D0CF8A6104CA67F87B
-:109AD000B1F82E9FF7D3F22337F18DB4069E2715E8
-:109AE000B99ED9D1CF5F26F98F39765FD729BE7C51
-:109AF000A4CF75567ECFC266E669D243B93DA7377B
-:109B0000EDE346E6DEAF2386DD4CBFDBF1BC53D38D
-:109B1000E7A676E1939C175BCFD77D11CFAD295D8A
-:109B2000E35D9CF3F75CD4AFCADA4C1C2FE3C6DFCD
-:109B3000D879CF4DC082F2C495CBF1C113A7EFCA3B
-:109B4000A72B5789C9FB93E3F7B43E899F57D2E30C
-:109B500025FEF5846FFE32B14F271248FF90F8764C
-:109B600060C90EBA4FB27D49909E172D4A508FE7BB
-:109B7000872D9169C81973F2B2EEC07B502E26462C
-:109B800072F11E95016EB717EF51B9981A3981E538
-:109B9000EB9FF8BE97EAFB45B6E0BD2A77E41DBB14
-:109BA00083EA713F33192BDA72E40EBF0DCFA9841B
-:109BB0009777A0DC2A8ECB8B89BBFF2141FC0E540A
-:109BC000BACD48FA64BA8813B272A1D763440BCAFB
-:109BD0000D19451417B431F7CE0EACCF36F17B22F8
-:109BE00018E03FD6F7CBE7F9158CAF9B650B7F37B5
-:109BF0000BFBE9771DF31DF47D271FDF6912F12EA2
-:109C00003EFED197785C52E6093366CF417DC8E6C7
-:109C1000663165797F0A53ED39785F4283F4278A8C
-:109C2000F22B09BE49B95172F9E8CD3F1944BF2F53
-:109C3000F3F2CFFA22DFBCC5187B3FB77C26BB39D5
-:109C40009FBC28EEA1BC2FC17777EE08FC7D9969F7
-:109C500063F14AE12929A54607E96FCFEA914FA5AB
-:109C60000AFC704CE6F373947B15FC5D17790F6466
-:109C7000AA4F253F01F3B5E851AEA69EF652FE610C
-:109C8000B539928BBFBFF396D95785F3BC5479F29F
-:109C90007E8A3F661E3D81F922470DCD6392508E2C
-:109CA000E48B7B3830C00BE5435979640F76F2873B
-:109CB0007E0AC547C74FE6E771C7B1A08AFB3CD60D
-:109CC000CECF878D2DCEF734C078E345BEC9D8639B
-:109CD000DE24E46F637F1056F93D2111353ABF430E
-:109CE0003E99CBE08EA6875BDD516586F755C7961A
-:109CF000BFE7892DDF31F2EBFED1E5C18AD680EBDB
-:109D00007C4511F76D007FE1EBE2798CBF12F6DC48
-:109D1000401733E7619EA553F1A3BD30705726C5A8
-:109D20006D768D64544EDB61DE668E5EFF5A1D8F4C
-:109D30006B0BBFBAFC7D2AAC4379FBF27B6904AFA5
-:109D4000341BF05B27711FC2B703826E0F083A2DD8
-:109D5000C9325B91FF1F30B837119E279ADDE8A703
-:109D6000DA9F68A4FB7F1BE6F3DFB75092CCCC08E8
-:109D7000FDEAA7F332B4633742BDBEC44CF92907EC
-:109D800044DE77C3832AF9B9B01EEF41D43F622580
-:109D90007F797952E1DD58AF4F32D2B98BFD8925F9
-:109DA0003E311EFD2EC1F64473087F2723FE1ED6CA
-:109DB000A3382F841BCCEB293E0FA2477D8991F459
-:109DC00070793E1FFAA1789E3ED34CE31D70D8F700
-:109DD00023DE357C449A1ED48F74633E99C4EFF21F
-:109DE000A491F4BB33407D7DA3EFD9D7A779DCFCE8
-:109DF0001C30FF3D95C2CEDF578161A11DBAD51938
-:109E0000D12D8F0FE648B83355C3F6194C96F9F9A2
-:109E1000B5B4CE72A94AF72D29B2BC94CA8F8B7AF9
-:109E2000796F6C6A1EE7534ADBEB7F43BCED9B0402
-:109E300070817DF224747F7EEAB4E0EF97EF5F8952
-:109E40000BFDFE0AAE7350D7FA0F383C2E6F54B993
-:109E50009B7D0920BEC5EFCB018BC78D7EB62BF74E
-:109E6000C7E12AD7A1CFE4F0EC5C474AF7EB48CD35
-:109E7000E3EB088A73E3F1F54A9EEEDB5E67B7F821
-:109E8000F72FAF332D769DDFE23CC3CAB7304F7D4D
-:109E90002ECCCFD6353FFAF9B812E49B1CFFC68909
-:109EA0007C6956189BE7C4467ACC5C5F8CCD6BBA54
-:109EB00045D9D488F2F57111377F5DD0D5A184FFE3
-:109EC000D517F5ADD7A715B413BFEDB5B411894BB0
-:109ED000F267C9FF2F659C2CC132C88101792067C8
-:109EE000EEEF7D741A76DEEE78BC2FCA2BE09BD79E
-:109EF000E58DB87C9E927E3BE70BF48B7424E937AA
-:109F00007EFE928ED8ED414A10DDCC42F474319E33
-:109F10008F0F7A09DD73CFDC395DEB03221F6BAE47
-:109F2000E7EB58EAA779DFE27894F2106FC9F7DD22
-:109F30009407FB3D65E8A774FF147355F6273B4D66
-:109F4000D1B4FF9BF3C58C7F7C2FF5FC78BDFE4A16
-:109F500079E9729EF1FC50CE4799B883F4F83AD073
-:109F6000E379DEBA42FCBEAE4AC7F9F06E85F4FA78
-:109F70005A903328A7E4BDCC3715581BF19ECDBDB0
-:109F800006EE4FF5BF6472C7DE4B159FBF2EEC89FE
-:109F9000C54CDA0BFC7E8B1A3BBF774AC89996FBFF
-:109FA0007ACB7BA9B83C043915732F55A53BF65ED7
-:109FB000AA1EEC05B00B483F63BD74C22EE072BA16
-:109FC000E57AB7DDCFC8FFCC7F2774AA51E88300BC
-:109FD0008BB4AE7BF3C00EA0FB001BF3F2C5BD64D7
-:109FE00001FEBB2C42FF8FF74717A5FB56209ECCE6
-:109FF0001CA4E5E24F04CD30727F33E0DBA60E8671
-:10A000006998F5DBF15ED95B59FD3BBA3E846F0F71
-:10A0100013BE0DFC94DF37DB856F8FE4A572B98426
-:10A0200042E64A741C71FA1EC7715B1CC13FE13DD8
-:10A03000F81BDB4C046F99E71A4FDF51F3396DE0E1
-:10A04000F371EAF5349F27BA9BCFD5E07D345EA546
-:10A05000338EDF3DE13F9E27491CD685FF8315DF08
-:10A060008B386E271D2CE776D765F3D6DB68BFEFFC
-:10A070009CCAE3727509D24ED6C667A4A11F928FFF
-:10A080007FE74A8E177756F2BCA4096D35148763B3
-:10A09000E53CAEE681FFD1EFFC08FE36D9596440BD
-:10A0A000D4FB2BBBDB807ECEC9E363E36F53CCB71D
-:10A0B00050BCEFCEC98698DF39957098227E477DD7
-:10A0C0004ADCEF9BC6C3253E6ED7C90FC47AB3F0F6
-:10A0D000777FE099CDF8399E0CF17B7447F33AE332
-:10A0E0007BFDAF31BE772CEF1AE27BED8608DD3BBE
-:10A0F000F15AEAEC4DF3816EFAFF7210DDDB7F73EB
-:10A10000DA9CED6BA1FCCCC6EBA8FC5ADA0F171E4B
-:10A11000C5FA2D05542ED77D3A0DE9A0B064EA3872
-:10A12000FC9D83760BEFC765F5B5E0EFDFB886F4ED
-:10A130001E86F9C8E5C608B5BB6D68CD70CCAF2AE0
-:10A14000B7F2F291A2FF1846E5DEA23CEC95EBB027
-:10A15000DCAE7C3AADBBF8E0C0422584BF73579EAD
-:10A16000CCDB8F1FF66C26FA8BCACB7879A0A7744C
-:10A17000651FACD77D36AD3B7DC428EC21A95F7B44
-:10A1800005BDEFD24E36E2B944AF4DF1E0F913EF21
-:10A19000C893FC3E3A33CF53F93F722300BD008091
-:10A1A000000000001F8B080000000000000BE57D90
-:10A1B00009789445D270BFF3CE9564924C0E20215D
-:10A1C000102609840492300987288703048C0A38F2
-:10A1D0005C028AF08633E42011748DBBEC6620802B
-:10A1E000E8A28615151574404070118302A206BEC0
-:10A1F000E1505151E3B1AEE82E7FA2ACDC1283AE48
-:10A20000B8EBAE7F55757766DE37C902FBFDDFF32D
-:10A21000ECF7FCF8EC76FAEDABBAAABAAABABABA7D
-:10A22000C7EBC935CFCA626CB847F1F8211DE158B8
-:10A230009268EFC7D858CDDA4F5518733A5296390D
-:10A24000E3198B1E38AC3F7341B99D59582A6337C7
-:10A25000A468E1AE0E8C4DB9E6DBE4289531E62822
-:10A26000ECE98D849405181BC0D838FC13EA8FB331
-:10A270003B026A0EFC9D6F39D790C1E8DFCFD03E1C
-:10A280005BF1385DFD31D725E6EBDE8C61173F5F72
-:10A290004FFD76C0EF53067D9B6CC68F09BCDF0B6C
-:10A2A00016C74A253AD8FF4DA27FE661DDE33B326F
-:10A2B000A688FC4D72BC0CFD78F84F817A9D98F809
-:10A2C000BBEEAD1F15ACB7A25661690005F351BADC
-:10A2D0009ED528084CB6A2A5E3FCACA67A177EEF63
-:10A2E000A6B87B39119E816EBB37BB35DC12BEAE82
-:10A2F00026F890D71A2EFC67867C1293FF14A7B31A
-:10A30000238ECBCBA19D87C506E182F107107E5637
-:10A310007078D62B1594624306ED1688760BE47C94
-:10A32000F7EAE73B209CF9C2008E04E65EA962BB17
-:10A33000F8DC5EFF0AEEF2F0A81CD687B18976EF52
-:10A34000833698C3A4985944E7C9CCB73B06E6FFC7
-:10A3500062845680F0A826DFBE0698D41CE6B1229F
-:10A360005E808E37723A72BA48B88CF86881D388AA
-:10A370001703DC463C04E9539F886922ABA07CCBE1
-:10A38000BC0CF3A9461E047E6DCAB5F937E22066FF
-:10A39000F81FF0F3D1C274FF034A10AEA30ACB300A
-:10A3A000433D9F12EEDE9CC2D80F61307FF81E2F16
-:10A3B000F03068E62FC6B2A8D6F056DA79BD7BC277
-:10A3C000A336627A7D7AF8325334B64FF663FDF8DD
-:10A3D00070487382F0FF60629A1DE0BD47AD25FAB8
-:10A3E00075614D4BCC29413E7BD80593EE8F7C297E
-:10A3F000E7E353904E569332C3EB8039E1BFEB83D2
-:10A40000E9C32E4068078E2F3BC0354370D38C06BE
-:10A41000A55141785D290E5C2F33EC6AC096D39A22
-:10A420005F704676A0D3CCCBF00FAB799C61BBE1DB
-:10A43000765E6F26F68FF5168FF484D69B89E3E05F
-:10A44000B82BE1BB3DF85D01BC27C5B6A60FCC8F8C
-:10A45000E01F5339C27B220EF06515F4BA3792E83B
-:10A4600035E6DE61F45D199FA134C0FC4714B828BD
-:10A470008DEDF7A1996513DDA6D46605E9A876D41C
-:10A480009EC275CACC0DFDC7C1BCDFEBFF5CAE063A
-:10A49000E5C74DAC08EB19F1F75C107F57B48EDAC5
-:10A4A00083FFF508EF36E4FBF34AFD002CCCEFEC1C
-:10A4B000243A32A6A520FD629C29C36210DF3FC169
-:10A4C000B880EF8958047CB0A7A3B613E19DCCBC3B
-:10A4D00023CD30DFD802CDA239683813C2B3D0C93A
-:10A4E000E119A93A886F9BB72B7E1BD4CBF7643E4A
-:10A4F0003E18F2E5472CCC0FE5CD8CF375F33AD539
-:10A50000EF037E9AF7F6CB036005B2AF041FF75C4A
-:10A510006B622E490FF85FA63F9CB93282F9DE5B71
-:10A520006375F9ECDACEBAFA7DF6A6EACA7303BD12
-:10A5300074E57D8FE4E9F2FDEBAFD3D5BFE6B3E17F
-:10A54000BAFCB50D37E9EA0F3A355E971FD2749B16
-:10A55000AE7E7518ACAF3E886E4F7D06E065B6A046
-:10A56000D3F59766EADA9D8D1A7504D7DDEC55F3BD
-:10A5700046E3BA1BC64A74FDB01ACB97C89715F0CC
-:10A580001FD2732EF34607005F2359D39B4980BF28
-:10A59000057EC58D789BB796D793EDE6EFBD7378B2
-:10A5A0000CA67EFDF712660EE6A19FCA3F6D78E706
-:10A5B000704879BEB3D084FC77DE1519FF7504228C
-:10A5C000825DF3B3DA267DDD01A4DF27AADB069FD7
-:10A5D00016BEADD23A58F882E267D06F3AEB118DD1
-:10A5E000F9F2232AF303FD4FB28AC70643FA4395D3
-:10A5F000FF9DC33D82F8B125E8E91CE6D2D339229C
-:10A60000434FE748B79ECED103F5748EF1E8E91CBD
-:10A6100057A0A77307AF9ECE9DA6E8E99CA8E9E9DD
-:10A620009C54A4A773D70A3D9DBB55EAE999E22B38
-:10A63000D6D3CF407F299FD3562ED4D56BE1036F5D
-:10A64000D1684C7BD4FC52D76F895A6A65A6203FEB
-:10A65000F8E03FE4879E8CB90380E705408780AB34
-:10A66000351F14D5AD5E91F46FF041760AD0BF77F7
-:10A6700008FDD569D15A1BF25CA692AEA04FFBA68D
-:10A68000F4273B6800A6537A821D04728379DBB6F7
-:10A6900083A4FC0AB53BCC0382FAAA3DB9D64ACFC3
-:10A6A0008E95FAA91D3DEBEA1A94838090638CDBAA
-:10A6B000018CAD32211C53055F1F0CE77C79118B97
-:10A6C000AE857A506720C0750CE186718E85F73EA5
-:10A6D0008CEBF436566BC1FEA7B17A4AA7B3264A73
-:10A6E00035E624BB622673533A9B79297DCFAE4D64
-:10A6F0004901B9596A6F188076C95F0B3F3CAE209B
-:10A700003047E310D876F12AE5F5C7F827D47B3037
-:10A71000C5AB215EF3EDAEBB1E854F07514FA0FCCC
-:10A720001D1D47F032B3377B7C765BFD2C25F9FE8F
-:10A73000BAA26928777D8976F766985BEF24664F21
-:10A74000443D97E04F1D0FF4294FD1EB975E8227D0
-:10A750005EE85CBB10ED28C6FCB1A81FAE76DC5FDE
-:10A76000A5787E8170CBFA979BAFD55A7B27C2D94B
-:10A7700054E6706F04FEFC44D0E3D95B6D01352ACA
-:10A78000C8479F454C7FB303D0EDEE086D19F1DB50
-:10A79000E41B57605E3918E75A08F05D28047C73A3
-:10A7A000FCAFC4F252BBD6AD234CF17C57AD67343D
-:10A7B000E2DFCBF10F7F647BDB849FC33342E1E3B5
-:10A7C000BF1EA1ADC67E0E9AEA93DD880F73FD0011
-:10A7D000B24B1D1DA89FF3568E97F6F0303CA2EBAE
-:10A7E000349CD76C9BCD8DFB93E10AA7EB89B819FC
-:10A7F000D3CBE1CF39266FC780AA83FB1982DB59FF
-:10A80000D82D11F8E6BC45C06DEF20F0EECAC27538
-:10A81000D51EDCD5D83FDA89BF56FC6827D23FC8A1
-:10A82000BFE28BF13F00799BE9E22713D07EC93666
-:10A83000B93742D1BA70E81AF8FD0381EFF516C8AE
-:10A84000C7D2F795F83D219CB74F78CCE4AF86F698
-:10A85000DEE1AF129D9E5DE0A0F91432971517D985
-:10A860002C615FFF65D8DFF735003DF6A5687B7189
-:10A870001E33E24CC99F101C5A6FB477D8E02BE30B
-:10A880007FB94EC73BF914E608BC4D601E5A77935A
-:10A890009866C1713FFAC6EA41F9F991902760FFC5
-:10A8A000D3F7A9CC4FE9ED2C40F5EF600D94FF30C4
-:10A8B00022A76B25C037EEF19E3D50BE86E0FD7DA0
-:10A8C000BE5EB519F19C5F4E7642BCAFE97045FCA7
-:10A8D0003B4EF00BACD74FB11F58AFFD725343D670
-:10A8E0004D3EE7176676F6F857EBA6BE99EB0B10D0
-:10A8F0008C8E4498FF0D828437784A484FA09D156E
-:10A900000FF8AF77A96467150C6B3423FC5BBEE5C9
-:10A9100072ECAD252CD207E56F0D5319D26BECDA32
-:10A9200051A7B1DD511688EF07F5475ED20E47C338
-:10A93000FCC7827C0789CC0ABA809E08D14B372598
-:10A94000ACCE473BE2A6EEFAEF37B31A15F1373A31
-:10A950004BAF57C6A25E91F560BC038887D8D6FA84
-:10A96000E547A95F7AB15E57A35F169A3C2C95EC38
-:10A97000549715F97EA69979DA5A6F937B2AC29E6D
-:10A98000E576CB2D62ECE6D117AD1760BE0353B56B
-:10A9900008EC67E198BF4C47790CFBACF7FAA21EB4
-:10A9A0007D5F650F40F99755807150AE27AAECCCBA
-:10A9B0000306CED7554ECA9FAA4AA0F44C958BD217
-:10A9C00073551954FE4D959BF25353BDF1D8EFCCFE
-:10A9D00095DF9AD18EBA2F4CD28FC3B148F0EF7D5C
-:10A9E000617C9FB52872D1678530EE225280A0AF7E
-:10A9F0006B6B46A1D955BCB7F64D4CE1BBEAC0F232
-:10AA0000D58A1BF5D39CC3DA0A649F79471BC6A27B
-:10AA1000D8E9FF87131D116F659714A6C1523AD06C
-:10AA2000C39386E39FAC1A48709DAEF2105C9EBA49
-:10AA3000C637E3A0FDD9AA02CA2F4CF566A6764018
-:10AA400075FBAD15DB8FD9DE684E82F2911EC58392
-:10AA5000EB7BA887F9FD40BFB516AE2FD682BE406E
-:10AA6000FE19963D7EFD5D0CE5B9D617C799143BDE
-:10AA70006B641CF2D5C04233D69BFC13D85C2941D1
-:10AA8000FEBEDC3A39BF5F21FC9CDF1F43F89078A3
-:10AA90002A13F43ABFA7F72D83A0DFFD6047AA0071
-:10AAA0005FF32513C1D7FC59B81F8D0463FB85BB29
-:10AAB000D33A3107CE131ADB30DFBB13033A9C7D48
-:10AAC000E19E04A44786623655825C381B5BFBD747
-:10AAD000CF51EEFD99CB3DC66ABF7E12E562970469
-:10AAE000F70390FBC602FB34DAD75444A05E5C60E7
-:10AAF000651ACF6BBD317F369CD1FE76C08EA4E146
-:10AB0000B89E703C57CFA05C4BDFF178EAAF5CC1D8
-:10AB1000F96E79E189E6D75C58EE27BEDCB6637D35
-:10AB2000E7A72057BA737938C2F53ADA19B04E5E02
-:10AB30005F1D41F2EB758BFB7825CAEDF50EF766CC
-:10AB4000A8F7DC43F77EB917D307CBF2EE45FE48F2
-:10AB50008DA57E66FF6E7E2F6C0F7A9C25C2BC7E13
-:10AB6000FF8A120843FFCB9A034B1361BC3EEB1ADA
-:10AB70004D9D21CDDDA45463DABB6BC111D49F156B
-:10AB8000A92E6ADF777B8A8AF661AFCEFECFAF2728
-:10AB9000FDAED7FB596BBE1DDE9905F57F2FA5F6DF
-:10ABA000CC12A0EF7D5D3FCDE3FBBE1AEA6777DDF7
-:10ABB000848F6F67380FB02C10EE422BF92570BAD6
-:10ABC00016C89FDF95B601FD177B4CBE0DA48F669E
-:10ABD00072FBE3BCD7F704F24D19D4F741BE2CD772
-:10ABE00017751D9497FDB9BB1B3884757DFA8602D5
-:10ABF000C4C7825D8F8EEA0CF5CE0F666E05402FBE
-:10AC0000DA7D7114B6635DC156C67E765577BC0D8C
-:10AC1000DAFD366B787FE413AF5A4BE3B0723ECE69
-:10AC2000E3428FB1861CF20B904A817ABF85CFF840
-:10AC30003DB62EE600F76D71FA94D72D4941FF4AD3
-:10AC40003FCDEE56711DA4F8122B1C41BD08FAEC45
-:10AC500077B87E12ADA25FE78464EF55E833ABD0DE
-:10AC60004FB2BFC7ADCC1716CBED6005F5AD95EB78
-:10AC7000E1CD202F905FA51E867137A6F2F664FF06
-:10AC80002681D2CD0538931EB7F949D75FE1F84642
-:10AC9000BF99B443A6C455EF6B40FF4E84B603C7BB
-:10ACA000917E326676BBD0CE5916E1793195ECA80B
-:10ACB000A6649C03E8C997B1DE0215ECAAB410BBE8
-:10ACC000CA7E657AF2C508CFABD8FE4AEB1BE5E831
-:10ACD000A2EF4D2C17F860D1A336DA77560BFF415F
-:10ACE000B5F06755470EB0E3FA67874DA56F82FE52
-:10ACF0001CC27B68E97751641EC9876AC6DAC4DB67
-:10AD00007E58D71AC89100E8010DD6F7D04B4D2ACE
-:10AD1000E7FBFA43D1FD507E324FA40BF7F526A690
-:10AD200085E847633F40B76338CF612C8269217A59
-:10AD3000D0C362ACB87E9923F6DF9AFF60413F39F9
-:10AD40008FC1C27F37B8F9B30894838BBECF237904
-:10AD5000D8DEFCF689F9FD17CE0F526F4FEF39841C
-:10AD600073C8774E33CE7388795C32DA2D007F3327
-:10AD70007E1FFA9D490FFF4FE1BAFC95CEE36E8529
-:10AD8000F94CB83EBFB5FA717DD6017FE37AAE9B30
-:10AD90009FE54739B007D603FAF17DE3AD64B7D636
-:10ADA00009BF685D0727F98B5EB7F0BC6FAA681F03
-:10ADB000C6482FD44DED4CED3BDB2ADECDC6FEABB5
-:10ADC00023487ED659FC2B53B1FF5FC7B97D402F76
-:10ADD000D5FEECFA137D61FFE037F92CC82F96C041
-:10ADE000ED2AF6F7AD95E1786B620249E5507FCD2B
-:10ADF000FCCE54FF33308DD01F37C8649A31CE81DA
-:10AE0000E59EC458C8EFF9A74A7A604D2EE41D2488
-:10AE1000C7C9BFB7669C27313C1ED38E26824765C3
-:10AE200015F43D85B7FBDCC2EBDD26E8774CD00797
-:10AE3000D639C9016D6C8419F9F8DAB49959696485
-:10AE4000C778121580E7C9D93D18CAD1DB8A6F4C83
-:10AE500021BE117ECE298206B23F26FCA493F8675C
-:10AE60003675CEE630A4E7A4A230F2837E56B43421
-:10AE7000D205ED2769C2FF3951EF17BD36CD43E347
-:10AE800096D566A69D08E1EB9936901BD0FF43E16D
-:10AE90005ADF34E4C7BDB954BE178C959F615D7D00
-:10AEA00039BBC70EF253CC96FBC2C02CA4EBFE26D6
-:10AEB0003BC3FD467BFC508D74807EBB215DE2046C
-:10AEC000BF22FDA784F37D8B19F805F2D5B599B49F
-:10AED0006F79C6C23C0AD26BB78DE85F30DEEE21D7
-:10AEE0007FE294F00D36289F21E459F59470FA5EC4
-:10AEF000BD2FD26F52683F4479DF4E0BB52BB5FAA8
-:10AF0000B76D817E4AF76792BED96315E3BE16C15D
-:10AF1000CBA33C29CBFB617927E283D72DAE682AEE
-:10AF20007F5B65541E1E488F013CC6856913111F47
-:10AF30009D6D406707F6CBBF1F17FC751CBA45FA1D
-:10AF4000F92A22A95F5AFA90D7AABB6E447A6A56A8
-:10AF50005ECE7EA952F971A727710EE48F57241196
-:10AF60005CD26F74DC6B25BE3F5EAA90FDF3A74AEE
-:10AF700035600DF5DB8FDF7A7F3AB4FB6ABF85FC65
-:10AF800072D31E2E398ADFA72D2D23FFE2B4E2C52E
-:10AF9000742EF0CDE2AF06AC85F9342CFD22590BAE
-:10AFA000F1334F2B855621EBF937699E32E4832725
-:10AFB000D3B40A9C5F7956C35CB497BFB1D63F8DBA
-:10AFC000F67F7ABCB608BF5F78F5E4166E4737A502
-:10AFD000A39E5860E67C22F56DB9E0C35EDDB57BCB
-:10AFE000B13EE06D3AEA9588AC7A2EFF165F99FC87
-:10AFF0003F53B7798F02E39484D72DA054F5E760CF
-:10B000003F67954094924678D4705D9D7306A21078
-:10B01000FF9A89DB6D255BF5F3C27F789E55827FB1
-:10B0200040BB925AD51386EB80F9AD087F09B30671
-:10B03000EBA704E905FD10BD98E34FD37F05742805
-:10B04000DE969987FB859298BD0F0DA27AD04EAE01
-:10B0500017B5755ECEA7353C7C7EE7C43A38075FEE
-:10B060002CC82FDB6D72DF4EE37FF36A271ABFA374
-:10B070005827DF28825FB78571BE72C3BC10CE1718
-:10B08000395F3D26E5E436DE4F499CCF8472A9A4A2
-:10B09000CA497C25E512C042EBEBEC8E246A27E519
-:10B0A00018F33246F577246EE4F69BD8BF22C050E1
-:10B0B000BFF8F77C1CCCA33C3FF37C921C97EC6759
-:10B0C000A33E36CE7B7F9A89EC2DD0D39DFED5FE54
-:10B0D0002F2361D6FAD97D43E613691572C19D30DD
-:10B0E0002E1BCF0BACBA7EBF89B4CEF038F0DC405B
-:10B0F000FF5DF6F74E1ADF1F7633D0B9B3DA74C0AE
-:10B1000086EBF059467AC308C787A2DDF3CFB7D0E4
-:10B110005515FE71E692FCE4E2F63CD1EF9855D26B
-:10B12000EFAE2490C72588ABD4201EF7E46A49A867
-:10B1300037BE11E73D7B62209F85F614A78BCC4B71
-:10B140007A18F972E9B1B94978BEF4CF34EEB73361
-:10B15000E27B09E015CBAB2DB05FC9C27DEB914717
-:10B160004EF408CEE7EB2A8F6776487EEEDA5C3B3A
-:10B17000AEC779EB72ED3343E851BDB5EF1117E07F
-:10B18000FDDC56B31BC57BB5D9FF10DAE9D55BD51D
-:10B190005AE42328B723BECF390EBE8FF5E6AE8B17
-:10B1A000C9433B5CB69FB776A46776081D7A6FD516
-:10B1B000D325BB569FEFB3579FB7776734BFAB6DAF
-:10B1C000971BD0E7FB1ED1E75913506F00DA039CA1
-:10B1D0006EAF0C741F7101DDBAF955377EEAE618BF
-:10B1E0003F610CDA11EB54770F28EFB6D87B33DAD6
-:10B1F00015A7D6CD7123D98B54DF825F014D8BBE4D
-:10B20000187504F5EA5956FBE918A0CBDCBAD556F7
-:10B21000B30BE7ADE7F73D26C1BFCF737FDC7CBF43
-:10B22000BEBCB55C5822FD1819A1FC65E40318F7F3
-:10B23000560F00545AF9F12328178A4603E3A31E38
-:10B24000AF5D6D45FBEFF2E3F8B87DE9F0B8101F94
-:10B25000850379D9759523D857B0EED8AA0F472121
-:10B26000DC85BF55C8FE287CB9E761E4AFC69D53B5
-:10B270006FA2F4D6029ABFF4FBCDAB530291907744
-:10B280000E74ED6D807673FCDC7F3173992D280F81
-:10B29000199E7B19E05813520EF0CFDB7BE0473C40
-:10B2A000172E5AA76F371FE434EA9FE24D3FDB4267
-:10B2B000BFCBFDE875751B549CF71C01BFD49FCC18
-:10B2C0003794CE1DAEE34DD809FC3FD03BBFEEA86E
-:10B2D0008DEEDE3FA847AF5BC3DB83D82DC47997E3
-:10B2E00039AC2E9C77999D0522009E2391560FC65E
-:10B2F000955C5C1B497EB7B936B057F3286518B723
-:10B30000008298CEBFBEFE4025BBA72C8ED3BDECDD
-:10B310001985F66965E82CC5FCB33C3F9F05683E7E
-:10B32000C82F9ED079FAF57956C3F777A5E6C00104
-:10B33000C44B316BE0FB33A0A727E4FCBA14E6F959
-:10B34000592CDA6F86F6CCADD1B99C83DB63E57BF3
-:10B350007FB68596CB7DA6DC074B7FF033E9DE70A8
-:10B360001CC722ECE635F77BD211DEE5164F3AE238
-:10B37000C1B73A8CF6FBB76DE0FA6B4D0CD8B1F162
-:10B38000643F933D7E9BC2ED733695CBC341A69738
-:10B3900002A86F9A1E8D716F74517DD2636B1ECCA3
-:10B3A000E4F6FF3F55B2879A56F3388835B91C7FCB
-:10B3B0006B1ECCE6F6BFD47B1D18F5D7DADEF6A4FB
-:10B3C000A31F823DC2E1FA1CA714625FE776D21E7A
-:10B3D000E81E323F6997B3A22B3B9FD82CE2329AEA
-:10B3E0005687F9F17CE284E27DD31462DF3ED59D7D
-:10B3F000EB8901C33D5B443D3AC7986D1AF7C0F530
-:10B4000000D7ECC74C2EF4A7B5E0DBE34947FD7944
-:10B410006275581EF2D980E1DCBF743C97CBFD8881
-:10B420007E8CE29B36897E377537E9D28470E03FA7
-:10B43000E8E7C448EEDF8EECE725BFDE661797FB32
-:10B44000C679D48A7E665BBDEF0C69031E891796A8
-:10B45000CFED8E13772A1B395C406FC80FF85D184B
-:10B46000F9034F08BD24F10B7C43710C526EC5B437
-:10B47000F08B7F5B18F0CB6A0BE703B96F0BE1171A
-:10B4800041FFAE44DFDB047DD98361825F4CEC6F0A
-:10B4900088C7914ECE0F57B9FF027A1F417A1BF72A
-:10B4A0006192DECCECEFFFAFCE51CA5E79618F0FB7
-:10B4B000EC8CE2171F8D6250EFB4B9A6A31BDA978C
-:10B4C0006E5E1EE581F494D917E584F14FFBD50239
-:10B4D0007F1BF8B6F690FE688F430939F73CF3FC02
-:10B4E0006FC7E23CFFBAD9E2449150BED546FBB1EA
-:10B4F00005BBE693BD0EF9469EBFEF5B3C072DDF13
-:10B50000ABF7B7173FF7684717E1DB97644AC034DA
-:10B5100090C4205DB0C9D2722E0CC380FDDDB40290
-:10B52000E133B647382E01BDCB6BD5426B74EBF2DD
-:10B5300072215FCA77FDF65BF41B96EFBAF124CA5D
-:10B54000FB72839FBF489C7718FDFC7FEDAE3F47A1
-:10B5500006FC50DC800FE0EA41ECC2FDC4D5DB1EE6
-:10B56000CF6944FB61D3BB514A56D0DF2FCF419AFC
-:10B570006B673D83FED3F6D6E537C2DF1BA41B976E
-:10B580005FAEBD0A0F9AABE369A925103508F77BBA
-:10B590001B2C64FF96BEF0EC962791CF8ED948BF46
-:10B5A00097BCF0C6A7D7A1FDBCD3123F9A4FC3A149
-:10B5B00084C4D994BBB83F4ED2A7F8E537ACAE6C83
-:10B5C000FE7D716C904E253B0F5831DEC788CF1140
-:10B5D000B507AC0D8E36E855DB388AFC50DB7EB003
-:10B5E000E2FA38BD5F619D525AB72FDAF04614DA9D
-:10B5F000678827D44F926E2D7434D487FEC7BED689
-:10B600008FEA39719F72393A7E2AECACB2572259CF
-:10B610000CC051F4B9CD3F1AE9BB635114CEE7A475
-:10B62000B982F3FDFAE51DD1DE2BB2F83A3A29E5ED
-:10B63000DF8B9EBE9BF8719E52D1D19945FC9E68CE
-:10B64000225BC29788F39CB36E12CD732ED3881FF2
-:10B650008BD6AB5E3FA4DF9B59C1CE36D6CD52B15F
-:10B660006E4E6E04E2C23C4F8A782BDF47AAD84761
-:10B67000DF49FAFC6E3167C61652FE7B61CF4DEC96
-:10B68000D1729E6D0FDD87966FBAAF1EE974A6ABBF
-:10B69000A713C20978F009BC293F43BFEA87233BBF
-:10B6A000713A3117C623503BD0AB23F03BD6AFB72E
-:10B6B00078D0CF1ED24EEC13F9F87789F101EE70F5
-:10B6C000DC079FECD8763CD7CE16B9C0EA43E3B985
-:10B6D000DA95039BEE27FEFAEE132E6716F8C715D0
-:10B6E0005079BD25D009CBFD07262A24276C2CD004
-:10B6F000D63ADF6411EB5C5F0E709A9550FCEEE772
-:10B70000F6A9E497B960970542EC8420FF5883DFDF
-:10B7100069FEBF13F86EA0F33979AE374FC807E35F
-:10B72000FC8DF262718FB6E34ED8BAB6CF938272B7
-:10B73000C247E396827E477BA4F4988DEC88D217AB
-:10B740002C5EC4D3D9ED873EBD0DF7B7B5725DEB66
-:10B75000E5B0715D17BDD4BFCD757D76556EDBEB61
-:10B760001ABEB7B9AE572924EFFEBB7218341FF9C1
-:10B77000252EB77EE7B523879F33E0F57B96153DF1
-:10B78000080B9D85DD884E06FC4ABC1AE5EA1014BC
-:10B79000921D5ACB5586211A21F8947894FCCA98A8
-:10B7A00046E3B4F0B5E45BC9D72D7C6B9CB71E9F14
-:10B7B000C6F2F9487B80C7FBAA85EC85D23A1E6F9A
-:10B7C00008ED283EAE1CFDF354BBE6CDA4F8D0BC7A
-:10B7D000DF90AF35D4F718F25E437DCD90AFD0D572
-:10B7E0002FDD7BC8CAF70F015D3D5BE5CDB41F6956
-:10B7F0006D67F8F9B9D3AE6FAD3EE48F2E4D569418
-:10B800009396A5CC1709ED9BF6A964F75C703545B6
-:10B81000A1DDB23C8CDB75179C221FC3F34D1DAC20
-:10B820002B504ECAEF4D61DC0F73C1DB141513B200
-:10B830009F6FAC53A3D0FFDBE067056DC7AB54131C
-:10B840005E1B587BE5DCBEBB10CEFD0D17C2B9BF39
-:10B8500061A4EA48AE443F6C0D8F0B9CBD6472142A
-:10B86000C555D4A5DD3205BECF795BE561E03E8FDD
-:10B8700019E319667152B253CC47F181B3EA785C8F
-:10B88000C3EC557A3ACF756CA2F8B7EFD9624AE7A4
-:10B89000AED1C72314B355C46745EB0CDFEB6EA6DE
-:10B8A00075526C58279AF00F1BD789235DC43DE66B
-:10B8B000B25C5DDCA390E723D5AC5BA6003D2E1CFB
-:10B8C00051990DF2CD752A5BD18FC7B9E2F9136E8C
-:10B8D0004870FD2D80F58A7693C4D7395C473DDBEF
-:10B8E000B75FCEEDFEF3805F21DFECF92207CF8555
-:10B8F000CFED3996FE3AE65FF963F217AC75FD11AC
-:10B90000FB7F9C8E72FAC27E1B437EBFB0FFAD648C
-:10B91000F4475E78CD46FBEC0B4B6DDCCFBD3FD2E0
-:10B920008F2AE642576E1757EFFB21A781F4F232B8
-:10B93000A2DF35E9566E5FD5FDFD38FAD39BEB608B
-:10B940005628F7F747D07A2A7F2D8CFCCC17F6FDC6
-:10B950003020D43FF7DF9D8F3C4FBF10C9A6BC8479
-:10B960007C1CC3F705E5AF5FFB2C9E2F97ED3A607B
-:10B970009D05E523FEEB1F3928572FBCC4EDA96FA9
-:10B980002C0D4FA38F73F896A8472C89E8E783CE38
-:10B990003A33F6C596B1137C596DE185E3E102E0D7
-:10B9A00001E7057829427DD01E3EA6223E3AFC27BB
-:10B9B000E2E3DBE95CBE5DC3F03C3A8817C5C3BF78
-:10B9C00047FAED0ACD9F7FDFFF430ECA9FCBCDF72D
-:10B9D0009EFFCFE6FBE87FEC7C39BF774D77119C6B
-:10B9E00046BE6FCDD7AFFC82F23B22DD04EF15AE31
-:10B9F000F7DDFFB1EBFD7F86DE1FFFC7CEF772F4E8
-:10BA00007E5BD03BD289E79917F6FD23995DC5BCD3
-:10BA10009BFF97CE5BDAF1C355F7915CA8FF2EAB85
-:10BA2000FDC49D42D6489B7648B7609C1FED9F465B
-:10BA300030AEA747D84BC8FE1CD1E541B297AB59F1
-:10BA40001E9D5FF8BAA874AE4341208087B712727A
-:10BA5000E95E153307BA2C82FCF0A4328AFF32EE7D
-:10BA60002B47848F2940FBF4D012800BFA391469DC
-:10BA700072E219757E177E4F09D2464CDF4CBE9993
-:10BA8000E2F8F31DFAFDD5CD867DD28D2E7D7901AC
-:10BA90007B291ECFED0AB22C745F6214D60FD957E2
-:10BAA000FE23DD4978B991D52C733AAE1E4FB70805
-:10BAB0003CB5C6C3BFC65B2B3C897DB459D437E2C5
-:10BAC000CDEC78A01EDB9919EC8BF97C693F2DF742
-:10BAD000C597C32713FB6DB3185AE2D7DC859FCFF8
-:10BAE00086F44B789178BF5A7C4B3A19F12EF12BA2
-:10BAF000F166A4432AC6F8F50FE2BF8B39D78CEB69
-:10BB00006E88B0EBF3CD313CDFA55EF5D27AF473ED
-:10BB10003EFFCE6D46BB7E982386E2428DF71166CE
-:10BB20000E8C19A0C07C93CCCC67837D289EBD91E0
-:10BB3000DFF57EB37F690A8EC3FDBB5DCDDC7F0D73
-:10BB4000ABDB179E47F53D56C8173E328F79A07E76
-:10BB50006112732BBC3E8B8EA5F038A6C6F27B9B80
-:10BB6000D8AE309AF75BD889F997727A125DD0ED2A
-:10BB700083FE0DE8D7638AE5EDA3F2A8BDCFC4DB51
-:10BB80007BCC90764BE3710A4DCBB95FBEF0BEAE75
-:10BB9000E9283F460FD7FB99DFEAC9FDD232ED9B7A
-:10BBA000E1227CA9267702DD8F589649FB2335DCFC
-:10BBB0005BB61BFDF43B789C4EE18A3BC6F447F82C
-:10BBC00076C4B911BC3363770EE0F5A7DEFD07F844
-:10BBD000AE6D0DA3EF9333B4A53D311E40714DDF23
-:10BBE0000D1F664E3A644D8021B4DA71E7D14F38AB
-:10BBF000D6B7F37D3C9F1C3B51A5FA63198FF764C0
-:10BC0000CB601C281FE3FBD69C00FD8D814D079661
-:10BC100037863993EF04F80B857FF8215C2F086F86
-:10BC200038D35E72205C5DD353E1FB18D676BCF14D
-:10BC300051597FB8B20ECF99BA8DE0FE7B591FFBE8
-:10BC4000C17E3FEAC9FD514F8854E601AF547FF6EB
-:10BC50004A5B631AEE7F565A023D2175F41ABEBE46
-:10BC600027E06F742A1BB516F17EAFCA3612BC4DA1
-:10BC70008574AE1099E1423A68C0D274BE5293E224
-:10BC800042BF58E3B0DA009E27343E91E2AE76110F
-:10BC900095291E48EEB71A8705BAA31FBF29979F9B
-:10BCA0004B1C773644E27E7196C3CEEF498AB8A228
-:10BCB00039E25E4CB7EA8607AFC17DE8A32A9DD77B
-:10BCC000CC7994DFF7FA8BC3EE5770DFB646DCD73A
-:10BCD0005CA58F23624E37F98166D50CB3E27E7383
-:10BCE000B6C363C579FE31437B1DE725EF17F642E6
-:10BCF00022409785358514AFA246C1BAC3756276D6
-:10BD000045E13ED81887542EE28E64FEA170ED30D6
-:10BD1000F2C3CC68D70EE4972F2BD3C83FAA0ABE34
-:10BD20001B8D7195789E616E484478EEEEE922BED7
-:10BD30001C1DEB4C77103F8731C443A3C5998EFC83
-:10BD4000DDB83CCC84E772A39772BE867566374334
-:10BD5000FBFBCD2C1CCF197E27DA4F5B62F66E8081
-:10BD60007C173B3347C6225FE5125FDFD24B7B0275
-:10BD7000E777EAD76C20F2C3AC55ABE93C46F20555
-:10BD800033D7E7C7C138A736A7E4A1DC6C91D3BD90
-:10BD9000867F81ED5AF861A2427C00E98134E28716
-:10BDA000F10D38CFD1C303DD1766E17EB49479502D
-:10BDB000BF273037DA09CDAC89CE2B9B1D5617FA39
-:10BDC000BFA43C917203E8EAC17BB7920FB680BE74
-:10BDD000375B18DB5A65A7F4F92A2733F7606C7BC9
-:10BDE0005502E57754B928ADADCAA0EF2F55B92952
-:10BDF000BFAB6A20E5F7547928BFB7AA80D2D7AA8B
-:10BE0000BCF45DCA25C00BC9212957A43C9AE5B0F2
-:10BE1000D27D5F29978C7C331DD03B348FDA93DC45
-:10BE200093F20EE761CA0BCA2349DF54C5EB4B48B6
-:10BE30004139D63015E93F523DF7C22BB82F2F724A
-:10BE4000B8699FCEB8DC6B067E45BC245BD95EF436
-:10BE5000CB56DFE969BC2F2588FFDB8B14660EE12A
-:10BE6000AB3B2AC29839446FCCA88CD1E5A7557E4C
-:10BE7000FC4627E8FF9E0E5A7C06C071FC375FAF78
-:10BE8000FF237C7FE637677A20BD018ECD8FE3B834
-:10BE90008BC35BE088C5FC320B9D737513FE936EFC
-:10BEA000C27F82FF903EF27EF333BFF91BADF3C633
-:10BEB0004A9B0BEDE2CF915E80DF3F097ACDACB4B7
-:10BEC000111E0B977FF5C22BB8DE175B49DECD5CE8
-:10BED00026D6A3E15EF397898CFC126055B34AC065
-:10BEE000DF97BFB60622A0FF2F15BE8E15300EA617
-:10BEF00061FCE1CAB73E4339A0541EA1F3770DEFB0
-:10BF0000E1217C3ECB39DD3DE9CA37A91E6BE81241
-:10BF1000837E1379CF38A29FC7EA82F9236F23FD6E
-:10BF200066661C648978CE52A338D185385B7C9FC5
-:10BF3000BD92BFDB80713C13C1FE1B92A1123D2B51
-:10BF40007B9A29FD14F52DF9936B484F49BE9DBD91
-:10BF50000ADAE1FAA8C9B5CE0D91C733C5F7591968
-:10BF6000264AE5F731D82F9EFFADCC9D82764567F6
-:10BF70002CCFC2346F0AE2B7B363945909E1831B33
-:10BF800032CC020E46ED3EC54507E90319A9D63964
-:10BF90005974BF8FF4981C676646DE0A8C2F9DB9D2
-:10BFA0006A184A61566D7127C4433D6F4B3FDC7E72
-:10BFB00063761E475DDA8E1E917EB553F8E7B53481
-:10BFC0006FF2FB16EFF8FD8ED7A0E7E22F6C44DF8F
-:10BFD000E23E226E2BCB3F60023920F5FEECFCDF07
-:10BFE000FF398ACE2976F1F84E48B99F757111F75D
-:10BFF000CBBA617DB5715E7478C717516DFAB177B0
-:10C00000A957E4C72E577E8A423B42CE67E4BEEF73
-:10C010003B121CCA253A272ADFB7BC635B715E4618
-:10C020003F768BBF5BF8F5CA1717B4E9EF36FAEF26
-:10C03000966518CE0FCC8CEE8D49FF1D53B3A2F13F
-:10C040001CE07B719FA4BD7D8EF47F97AF854EE28F
-:10C0500060BD9A5DD178BE75A11DFBFA6806D7FF59
-:10C06000E785BFFCC27695F63D17B647D2BA5AB0FF
-:10C07000FD9137F1DC71C12685C02863F5843FC08E
-:10C080002BB387EA358C638B6B0D77B3BF4734EAEC
-:10C090009592DF475620BFCDAF553C9B019E66BBB6
-:10C0A0002BBA43083C5B91DF807F4A6CB50308DF05
-:10C0B00002FEA7514EF60FD69B5FF708F997A1DE57
-:10C0C000376417BD1881B10288F7F711CEB3EBFAC8
-:10C0D000BAF1BC707EEDCE0564576C8F70A25FE143
-:10C0E0008C885B96FDEC12FCBD2B83DB3167C5F9B8
-:10C0F000D1D91DFC5E3FC289EBEC8CC2FDD0B2DD14
-:10C100006B02CED732F8BEE48E0CBECE65FDF9B51B
-:10C110008D51DDA1FEC9BD1F537A58D49FEFA8CF22
-:10C12000417D7C7257049D7F9DDCF5D4A8D761BC0E
-:10C13000F3B5C3E2715DC8FE3FCAB050FDF3EBD466
-:10C1400002C417F3F3B89932C46FDF5038E336F8FE
-:10C150005242D71F8F1F3ABBEBE5285356909E657E
-:10C16000F60A7BA209D7D19D5EE4EF68641E80D7F2
-:10C17000BA6B9C0F7558795D2E43BEA6F59748F5AE
-:10C18000579A42EAD92C6E8A33B5EC2DF48837548D
-:10C19000F83D2711C73F52CDA273C5E97D5C936F6F
-:10C1A0004739F9AE85E8B130D33519E5D3C57A956D
-:10C1B000219C0B535800ED9345F7466E403D26E118
-:10C1C0009EDE97CB83D2950AF3C0FC4AFD2AD3208A
-:10C1D000ED0CF4F7213F2534F4C738C9C6146E5767
-:10C1E000C8F8D1278B4C1E2BE8C19F3262E5FB0FAC
-:10C1F0004FCCC1F3B3F119B49F3B6E653E15FD4AB8
-:10C200002FF1F8D2D2541ED7FCA488872F8D0DA40D
-:10C21000C7417FE7047D4BC707D231EEA2F4A544A6
-:10C220008ABB3867E5E79EF81DCF594BF3A0BD8365
-:10C23000DECDD064FB98107E2A9DE976613D35D62F
-:10C24000EDCA7520BCCE6FC8CEDD1DC9D0CE35BDC0
-:10C2500012C9E3A69E0BDB680BA19B3393F39F7C73
-:10C260008F83DDC6E38C1EB3F0B8D4C73627FAFD42
-:10C2700021F87ACCA24D453CE03CD0BE9F6FAD4941
-:10C2800047FB57C23B3FAA86E03C27F87D7E780DEE
-:10C290008FE716F77BB13EE61B451C7AD3361BC5EC
-:10C2A000019D49ACDF83E39FD996892FF200FCFE04
-:10C2B000B97BA91CEC4BA067F1F3B600CEE7F436CE
-:10C2C000EE8F3E6DE1F6DAE971092EA46FC1F8B583
-:10C2D000D3C95FB3C9A6A09FEFB4C2AC0958BEB919
-:10C2E00003C59F17575552FC7631880DBC3F046932
-:10C2F00001DE033ABD3993E2CD4EE33B0C0A7D5F8C
-:10C3000089DF355633FD97888FAD7C7F75E6F9BFA1
-:10C310006786C67BCBB478933EBE4EF2892CCFCDD8
-:10C32000E4F22D57E0B97F267F2FA42CA2F6B1545A
-:10C330009A27C73BD089BF5BC31A229FEA87F114B3
-:10C340003D1494234FB240FA53E877D8CAF75F6799
-:10C35000B65B286EBDF895480FC5B1DD778D89E2D3
-:10C3600029546EA7179B007D902ABFD94AF165F129
-:10C37000CF87E5D9C83E67B4CF6DDAAC8A71C026E5
-:10C38000C6796FE171C7A3D196A4F26C2A3F2DF252
-:10C39000A7F76493DD07FD7BF07E55F12F7FC5F194
-:10C3A00038A1E828B7BBEC246F4B5BCE790647A3D6
-:10C3B0001E2CBB6F5034DE3F641FA80CED16239E6D
-:10C3C0002E9ADD9D50CE2ECB147277CF7A3A9F2ACB
-:10C3D00011F7084A9E57F83934AC43BC9F59B262F2
-:10C3E000D0E3C49FEF5B580F98CFB9DA47A242E978
-:10C3F000B12093CBD396FA5637D52F81FAD84FC9AF
-:10C400008A77A3089E2D168A5731D2F18ADB3FAF77
-:10C410005E51FB16FEA8E57E9656F367F5BFF8025F
-:10C42000FAFF6E7B98DB475F6BE91EDC594BED5CD6
-:10C430009CFFD917C2486E9D8DE1F2E124C8535F7D
-:10C440004F84E3E68729BEEBA309747F6F9E5FDF0D
-:10C45000AF1C77512697E36571EE688C172CFB8033
-:10C46000CB41A0CB2DD4FE030BB537CE63BC68D730
-:10C47000B23E5F88207E38DB99D3E5EC8E9EA49F88
-:10C480001A63389F03BCC978DFEFEC0B3D73E91EDC
-:10C490001D1A3DC00FC562FF7B36A636D91952DE84
-:10C4A0006811FBB800D444BEC13620DF8B2BB9BD68
-:10C4B00055625F45F12518AF3B208FD2802DB675B0
-:10C4C000DC2DF02BED2FDFC9147E4C1CAFA388139D
-:10C4D000273BA8D68A725B13F662E97663DC2E2FBF
-:10C4E000DF26DB03B4F1324E18F9D0A7509C4AC9BD
-:10C4F000B23BE753FC7DC5EADB719D49F84BCCAC00
-:10C5000000F7698D8A4A703486B119E3D1AE0C1DEB
-:10C5100027C49EDB151C87E1FB5FA5F807ACD9BDDE
-:10C52000992EFA8EF91AE8AF7499B28AC64991FB2E
-:10C530005D3E2F8927408715E3041B8789F276E645
-:10C540002DE134CEBBC5EECAE4FEA5C614D7C38325
-:10C5500091CEEFA9749FF7E24F7DA363DBB0D38246
-:10C560007ADE1A8C9705F88F6532EA677D26B7D395
-:10C570004B301E17E04C5FA78F17CFD8A4CFF7DA48
-:10C58000AECF67EDD2E773EAF479F7617DFE8018EC
-:10C5900017F7E1787F18F7E198E23EDC65E3FB707E
-:10C5A000CCE33E1C53DC87E377DC87631EF7E1981E
-:10C5B000C77D38E625BE713F8E79DC8F6379782F91
-:10C5C0008EA752116F8974407E67AF86E9EE235DB6
-:10C5D000D8C7EF97001FF07533D54AEBE649AC4159
-:10C5E000FB11EE77EA3CC1EEC2F8E15571DA7799BA
-:10C5F000FDF11E4AFD8A44A49BB981E258CB5FE35A
-:10C6000071ACA579610EF47F342C3FB902C343B5F8
-:10C6100038ED47AC7FC1D2B405F15B567988EEDFC7
-:10C62000372C717D703DA71FF96158512CD9518568
-:10C63000A8E762DBA7A3319E9CADD2C78F1BE3C9DD
-:10C640008D71E4463E90F6DF3396A64494EB5F6D21
-:10C65000B3AF42F8BF0A13F761A6D80DF1000E92EE
-:10C66000270B1F5436A2BEEEDC8BDB51CD47C05EDC
-:10C670006F43CFCA74D6A5BE6497B7E45729268AFC
-:10C680004FD73CA4871609989295A6C6FB50CECDED
-:10C690003791DEBC08F61AD9839FA8643FE03B5966
-:10C6A000A1F3C177B242F90BDFC9D2DF97E8ACAB97
-:10C6B0008FEF64E9EF4BF4D2C7E74F5C7200F7FDF0
-:10C6C0001356F5D5D59BED1D64C0A3805BD8B3B3DD
-:10C6D000417F78D0BE5CBC3619E9BB687E73E37DD0
-:10C6E00040DF45BBC3DC585E84FF0772B108FAC463
-:10C6F0007B9745BBC4FDE54ABD1E9E25F45091992C
-:10C70000F99CB1413E2C72324F0CB49FDFAB3E0717
-:10C71000DFC39AFFF6C7039CA9B8CF18D609E55125
-:10C72000B2C54371B5A53B7BC42C817E7BF7D06E2F
-:10C73000EC05EBFA44CDA187A6A13EDCC9F77F5FEB
-:10C74000AD7A398AE2CB04BF255B9CE148F70D3511
-:10C750003CBE0EFD676A6C902F36D4C48577770493
-:10C76000E71BE4839F884E401FEEE7293A48E72203
-:10C77000CDB562BEC3141FDAD9727EF21D2DB68C00
-:10C78000F77397C89F10FB0D39CF739907725C78C8
-:10C79000AFA36A6FB28AF2DCB47D0BEE43FE69D3BD
-:10C7A00066F7EA8FF1A03DFE88EFAA15FF81CFE77B
-:10C7B0002F6B46445D8BF6E70B16F768C8DF57F31F
-:10C7C000AC15F715C566BF95E233B76DB062BCF224
-:10C7D0000D5B37D0F7B95B0B291E731EABA0FDE8CC
-:10C7E00029F9EE81C047D170659D13E07E47C88F5F
-:10C7F000A2707EBE07F6D11BF8EEC8C5AD4A2EC6A4
-:10C80000F94CF4EEB416C2F75F8B7AC675D27C741D
-:10C81000C2C80E840F7E0FE40F0C76F769ADD7C542
-:10C82000844B29B42E265EEA4DFBB449814CBE1FD1
-:10C83000CE32EC878FAADC9F57C7D7419135103F86
-:10C8400001D7C97E0BD9B96566FE6E5319FC7D1DF3
-:10C85000A4DEC1AA8E5FCBF32374FC3C85C5EAEE4F
-:10C86000D3DC8A412521F989A3D374F5274FEC6DD8
-:10C87000E0FFBC6039C991EB74F7FECA16FB5CF4AB
-:10C88000BE211BAEFFCE787C21BD086A0FFD3E3E67
-:10C89000580FF97B93C2F73DBB6236A21FB0C8C4E4
-:10C8A000F74F5334FE7DC15EFE9D4D61BA75D82DA4
-:10C8B000CDFD47AE172D746E20FDED53F0EF36F031
-:10C8C0000F9AA2E51E3BDEE347FF84EE7EB7382FCA
-:10C8D00044B8910E65C29F5496C1FD4965BE7A2B3E
-:10C8E000BE9300F837C7C5523D7B1CC655D628E419
-:10C8F0006FC47431C559EAE3B4B03F8C7F5C7044B7
-:10C900002DC475622C2FC2778790BEAFF1B8D405C5
-:10C91000E8178A6AFDDED902F413A17FCBF0BE9935
-:10C92000A3B74BF811FD2B3A231E472BB9746F7335
-:10C93000FB012BC6E74D9C18938BEBC7C86752BE13
-:10C94000C3BAA6B8C2E6A38788CF9A8BCCC4C797D0
-:10C95000C3C7020FF7B31AF96F2EABB7E2FD94B954
-:10C96000BB1437EE4BB11EE2A533F2A5012F71B116
-:10C97000ADF121F1D4823743F93CC6F1356FAFE216
-:10C9800047F9D80A4F027F46F8DBC39F9CD75C4D1E
-:10C990001B857242CE6F1ECE03C78179E038F2DC70
-:10C9A000820D34AED734F25F2DF0F2385B237F8CEA
-:10C9B000BFC4FD32B75E32533A71B47E7D623B5CD8
-:10C9C00027932E75A4F2ABE59F050027EA85ABE51A
-:10C9D0001B391F298F83EB84DF4BB8DCBB4546FF37
-:10C9E00064426FE19FECCFFAEBE29B85BC35B63732
-:10C9F000C6374BFBC0A8770A234D146FD9EC4825E6
-:10CA0000BB43CA5F4DE8156DF9F7544F837A1C1A82
-:10CA10008F4E0F69C24FB8303295DE91485E12D703
-:10CA200011E95518E6A4B8FEC2252AC55117423DA2
-:10CA30005788DDB262595A32EA912FEFEFF9B40FFD
-:10CA4000ECF92FEF8DEF3810C6F96AB925DEEE0A42
-:10CA5000D6FB72F9C8648CEFF86AB56D8ABF0D7C9D
-:10CA60000DEFCDFD0A65BFF98CF4DC79D3D1A8298F
-:10CA7000D0BE74F9EE28BC3E50B29CEBF7F7BA6B0F
-:10CA8000C37AD3B9EF862DF49EB173430EFA89BDF4
-:10CA90001CA72D7645F1F2919DD0EE28FDE7A1A7C8
-:10CAA0009D782F7C89A523DAA5A73F013DA9909EFB
-:10CAB000237BE254187441E77091F49ED92985795B
-:10CAC000F03CEA9CE9C05FEFC3FD626E6D7A40C145
-:10CAD000C353CDDB1BF7F7CB9F257BA6F88125E958
-:10CAE000F8AEA0B6A447745BFE14996E11FA1CED63
-:10CAF0007A4CD1AEC7F81AB4EB318F763DA668D721
-:10CB0000E3F7F2B57ABB706A4F2EB7A4DFB95B7555
-:10CB1000532E9EFBF986B38C0AD2C30E7A07789106
-:10CB200012EE46F9B4086D28CCFF3982FC0EEC9366
-:10CB30001B757496EF04CB7780873481AD16B24EA7
-:10CB4000AEBF6467A1F77487B1185D7E843D51570D
-:10CB50007FA43345577E4342A6AEFC4657AE2E7F98
-:10CB600073C6B5BAFA63DCC374F95B06DEA8AB3FE3
-:10CB7000CE334E979F503055577F92B750573E79DE
-:10CB8000CA7C5DF954ED4E5DFEF6A27B75F5EFA80B
-:10CB900058A22B97EF22D7E17ECC86EFBFD82995FC
-:10CBA000EF23DFA3327A5F6DF00813F733DAB83E74
-:10CBB0005AF45E0F47281F3C29F8F95296E751E4D2
-:10CBC00057F9BEA57CB7722BEAA3FE788E1950F8F0
-:10CBD0007EB83E11F9D858CF583E38E2E04517D01C
-:10CBE0003266FBA94966901783AF39D8370DF253E7
-:10CBF000B7E7DC4AF941075F4E857C61D6DDB79A1D
-:10CC0000415E0DEE73F022969FDDDE97974F6064D4
-:10CC10009A94657D3209E365075F9FBACACDFD2806
-:10CC20006DDE779729E203EF89233E300D001F6305
-:10CC30007A10F818D3C3C0C7B32D8CBD097C8CE91A
-:10CC400011D89FE2F777607F8AE951D89F62FA3E58
-:10CC5000EC4B31AD877D29A61F554DA1F4932A8D4C
-:10CC6000DA7D5A5544E9675515F4FDF3AA4A4AFF9F
-:10CC700054E5A3EF877B4BFF4340F77E687BEF844F
-:10CC8000CA734E79AE595DC11A22506E349863BE94
-:10CC9000B607CF2BDBF71398D9D721F65AB6E2F9AE
-:10CCA000A0378DDFC54971E2E2FB1D29DA2748E78D
-:10CCB0003FA44CE8D157453D56F10686DAFCC1D475
-:10CCC000F67B905B7B733BF9DD2CCF31EC6F889D5D
-:10CCD000DF4F1E62E7F78F8798EBAB91BFAA7F64A7
-:10CCE0002E8CFF3910C9DFFDA8BEDFEC473FA872CC
-:10CCF00089AFF3A1F18CF2D53F36D07DE5214E7797
-:10CD000002EA2B996F39F7C77F21713EF21C5EC68C
-:10CD1000F7E45FAA1F81F6C25087D5857224346E6E
-:10CD200000CFDB0F447E2DE161389E3CDFDFF42332
-:10CD30000B987282E7F843ECF529E837187A97DD0B
-:10CD40001D1AB724CFEB954B0D2AFA55657C921C22
-:10CD500047C21B6986FEF282F147439CB5B978DE73
-:10CD6000515DE6A0FE3AC1776B1ED5F3A8D4AE366E
-:10CD700017FD72434B1D14072BE3043A8979433D99
-:10CD80009A67FE258DE224868A3809ECC7CECB7DD2
-:10CD9000D8CFD0F84022C6810DADE0EF90AD57F866
-:10CDA000FBF3326E01EB4784AC5B8413FBEDFE3783
-:10CDB0008017ED288F87F03B41EEEB5C222FCF1DD3
-:10CDC000EDC3C9BF3542C89A8F53B4CE59786FC5E9
-:10CDD000E6FC7304ADEFB4AEE8371D27ECFA7FC173
-:10CDE0002FDDB0DD7F9F5F3C9CDEF8807F4A6BBE0D
-:10CDF000917491746E8F8F24DD43E2CC88CE2D71B7
-:10CE000063A21F237FB5C757929F86D839DD91AEA5
-:10CE100018A726F948B9C4DF751B5A6A277D27F978
-:10CE2000C8C807ADF988F365F5DD76EAAF351F05AB
-:10CE3000E98FF8F8F7F9A841C5F3ABABE59F194DB9
-:10CE40006C5434143D94AA6D45395278C9F526E6E0
-:10CE500067B161A390A564F9E358DEBF75B9F65DCB
-:10CE600093253A84CF86083EDBDF4E7FB29E7CF767
-:10CE700042F67FBC9DFAEF0ABBE1DD3019A7E271F3
-:10CE8000E40E08C68D2E1AC9F9AB204525BB6344B4
-:10CE9000167FCF9C39B89DED82FF501EDFC4B4C30E
-:10CEA000D129F8EEA897DE1B1D156F786F54D8E7CF
-:10CEB000058673FE9BB26E20FBFCA6CBBC5BBD2C33
-:10CEC0004BDCDF49612957F9AEE86FB3687F78A57D
-:10CED000EF8AF2F768F3C57A4F12FC94E652D9E074
-:10CEE000587C9F5D33A372398CEFD1E6E0BBAD3E39
-:10CEF000CADFC8FC94DECC0264478C014584F95B30
-:10CF000018A37BFB8722C64EC33B8723FA8EE88E8D
-:10CF1000DF43DED9F3237C0B54EDFF3843DED93BEE
-:10CF200098EFA2FBAB07ED696487E27AB584F84B12
-:10CF3000DF06FDDC1DE67708F437A66F80FEEE0EF7
-:10CF40007AF42DD0DF98BF296309C376A35CFAB8C1
-:10CF500027D9FE66E708D8A8B58FBF9B735EED8220
-:10CF6000F87D37A6673EF2C5BB31D7E4E37CDF8DA1
-:10CF7000E964E2A9CD4A69F62BDDDBB293E57A08D4
-:10CF80008E378AC633E257E2D3884789DF7F039F13
-:10CF9000EFB485CFADB88FC0FB21F68FA31252F14D
-:10CFA0007C93CBD9B28864F1BEE87B396A2AC6FB90
-:10CFB0000E223887565ECBCC78DE6EE7783A59C5BC
-:10CFC0007C88DFD3380574781BFC7BCC3CDC141ADE
-:10CFD00007FD8A4DFB13C271729D4AF7F5CFBF144E
-:10CFE000467EBB537EEE975C68D21AB3D06FAFBA61
-:10CFF00056B9D1DE7C57253F30FBE950F2F8C8AB7B
-:10D00000E0D74DFC9D8352FBA836E929F797CFA5C1
-:10D010007A68FD33C3EF4B74B1F1F720E4BB94970A
-:10D02000FBDD962E362EAF257DD759851D00FD0CD4
-:10D0300000399BF47038EDB7F674F4FC88F3837D07
-:10D040000CBD3FD5DC2592F4D34111173734D09B6A
-:10D05000DE5B2B10BF23F096789FFDA08897FB7BAB
-:10D06000BA66CE0678DF721DEC82FE87EB193F07A9
-:10D07000BAD1C1DFC3BFDAFDB9235BECCF7358CEA1
-:10D0800055FDEE410795EE530C65E9740E3F02E144
-:10D090004539F7F62C33EAC990DF3DA079FD6FFBE7
-:10D0A000DD03C69A549C579253614FA65CFDEF2056
-:10D0B000A8625F257F0FA18017B5FA1D84A7A20A79
-:10D0C000785CBE636E9BBF839024DEA9662EAE376C
-:10D0D000E4EF208C4CD0EB9111CE61879D94EAFD5A
-:10D0E0003C4997891F1B9D2DF4C7D5D2BF8C11FDDC
-:10D0F0005BE24CE379FCD350ADD7C3E89F1F116FBF
-:10D1000071FB5DADF9E03FED774EDAA393F1F74F98
-:10D110008C7432FE1E4A925A6AA67720059DA6C0DC
-:10D120007F48A7EBC5EF55E4E3EF55B0FF7774AB4D
-:10D1300036D0ED7BB6AA3FBE5B7AA190CBF5F6F474
-:10D14000FE0D299EFBB341FE3C2AFC47D23F22E361
-:10D15000728DBF9724FD00325ED7379CD3DB773CBE
-:10D1600082CEAFEE511B2251CF1C37F1DF471AD8C8
-:10D17000417B1CE5D38CAC0A05F191C0BC3BE702B6
-:10D18000FCD3FFCB968CF9E9DDF87B912C8BFFFE6D
-:10D190008F846F7A128FE77A265BE17E3F378FDFCD
-:10D1A000DA98CDF701916E27C599176631113FCBFB
-:10D1B00092A767237F1E0DEB89FCB786FB031BF04C
-:10D1C000BDCAF8E07B9568A7A35DDC55D8A5D5C797
-:10D1D000EC76CE874CA7FF33FD765D9C73EFAD4EAA
-:10D1E0005D3EBB364157BFCF5E97AE3C3790A12B1B
-:10D1F000EF7BC4ADCBF7AF1FA8AB7FCD671E5DFE45
-:10D20000DA86025DFD41A7BCBA7C126B7A02F17B23
-:10D210002C3B95DF9F50849FC4C5E931FD9E8E74E1
-:10D220005F49EE3F64DCBB26F8D9B8AFE966E57626
-:10D230007D7522E3FB56BBD89F32FDFE461371EB92
-:10D24000D2AE673E7DDCBA8C576FD907897D8EDC04
-:10D250004F84C4AB7B107E19AFDE4277F17EA8917C
-:10D260005FBF167437CEA39B95DFAFABBED74AF72F
-:10D2700084247C46B8D40CCEDF9BED6DBF07F55DF2
-:10D2800036B713F2BB7BCF21BF3E0DE28AF0D96ADD
-:10D290003C7703FE9E40F5AFADEEA5AECB8F37BD1C
-:10D2A0000F9FCF347C37378BDE5FA57B81725C7339
-:10D2B0000E1FF75C1FC1E786F1A647F3F838166D1D
-:10D2C000A57B2DED8FC7F19A6065CBE8DD2A71CF84
-:10D2D000E38E55B50FA20B759AB5C6C21F1EF05B43
-:10D2E000D08F367A38D889B9E85F7DF85107D86988
-:10D2F0004F579AC92F1691639FECEB1EBCB7D30D05
-:10D30000F669C827A391FED0EF923E3C3E3D0B6DDF
-:10D310009F0EE47F6FB96F61D3C97F46F2BF0DBE28
-:10D32000237E94F3F89FBA7F21F9D78827B92F6716
-:10D3300042AF75177049FCC97521F127EFBFB8EEF0
-:10D34000B478373AE81E4D01C6E549FAADE9C3FDA8
-:10D350009CD3053EB01ECAA3F6EA8D54B3A2F1BC1D
-:10D36000A099B9A29D97F19BFF0FDD4B21FCB777E8
-:10D370009FAE3D39D14A3EB473BFAE3DFEA47F5748
-:10D3800071CF2E444EF07829410F7F7713C525DCED
-:10D3900017A95FC70FE570FCE689F504FADB91ABCE
-:10D3A00097130CCF3FAA97AB424ECC6DF9FD10FC02
-:10D3B0003E67B985EC6EC6BC8F619CC65FD658E8E7
-:10D3C0009DC7A11E46F6CDCC758A7F8312FCDDAECB
-:10D3D000429FE19D16F527B20FBF5FA538F1F71FF9
-:10D3E00066ADD497CF73F0DF1D99637CAF469EC7BF
-:10D3F0005D665F5F9523F4BB9BB9C92E137114451D
-:10D40000A28ED12E6BF6F3F346DC97ABDC8F45F1A1
-:10D410007752EFBBF0BC2BE41D16C06B7806EAF127
-:10D4200065E636E3225BF0DA4EDCC7398788FB70AD
-:10D43000F03897E65D61FC7C589EC389FAE77C175B
-:10D44000A91CEB636FE77379FC8A3C7F339EEF3551
-:10D450003B4C743ED5BC2B92E21CF0DC2B1AF8E15D
-:10D460008C6967C7812941F8B40655776E644CB55D
-:10D4700025BB693FF95E776D5B0EC6E99BDD7637AC
-:10D48000E4EF771CA477BC460B3F9811DE96DFF1E2
-:10D490001BCCDFD569F6717BB7B980BF7702F291FB
-:10D4A000E17A92F11CE3185877901606AE2578AE13
-:10D4B000F6FC6BC2A55C7EFE7B6910B5D7565E4B51
-:10D4C000F96ECB1EBC13EF194DAA9E67C150808622
-:10D4D00027168F0C87A60D5DFD4BC3916EC3943646
-:10D4E000CF2FDEC9E17AA5C1706F41A6D7F5E17AE9
-:10D4F0007532C6E6F40F89E75AA2D07A58A83019D7
-:10D50000DF45F25CE62FD688FC489E5FB49CE71BA3
-:10D51000C4EF2A6C11FE169C37A6386FF40B6C17FB
-:10D52000FE189C37A6386FFC8EF20BF328BF308FA5
-:10D53000F20BF328BF3045F985DF67326F72AECA50
-:10D54000CFEDF243D6079EDBE587D847786E179A72
-:10D55000C773BBD0FA786E175A8EE776A1E5786E5E
-:10D56000179AC773BBD0FA786E179A67036F0CE6E9
-:10D5700051DE79C6E9F213C0FECF0F59DF786E177E
-:10D58000DA3F9EDBE9FAD3EED4B5BF9D55EADAE384
-:10D59000B95D68FD19958AEE5C6F86788776D6DA74
-:10D5A00038E29F7D295E5B1FA0EFFF89F8E7DD165B
-:10D5B000DC2FAA75F3F9BE2DDCCDE95C53C0E96E12
-:10D5C000E2F72C94A6A944E7C5569E1FC9E3BC8D7B
-:10D5D000FC83E762F9167E2E86299E8B618AE762BC
-:10D5E00098E2B9587E0F7E2E86299E8BE1773C17F4
-:10D5F000C314CFC530C573314CF15C0C533C17C319
-:10D6000014CFC5B01D9E8B618AE762F81DCFC5306F
-:10D61000C57331FC7E1CCFE72C41B8D09EEFAEDB4A
-:10D6200057021FEAF6954E5D1EEDF9D0FA68CF87D6
-:10D6300096A33D1F5A8EF67C681EEDF9D0FA68CF8E
-:10D6400087E647E5B8687DA15D1FDA0EEDFAD07C6C
-:10D65000768DEF0DF49D8D59F7CD614C1B2295A76A
-:10D66000151019057DFC93F1FCB2214C498E01C9BE
-:10D670006959B279723EE435114799C39A4CF4FB6B
-:10D680007BB879C4388700A3B8D5EC1F13A97CAA4E
-:10D69000BC7F87FF80EEB9BB18FD1E8D3C5F97ED08
-:10D6A000DDCCA9622AEB07F36DD7338E2FEB91FC0B
-:10D6B0000C81036F5A63BC4FEE62471EC6CD6E11DC
-:10D6C000BF8FBB65298FB736F2D562612F6D31ED03
-:10D6D0003C88F7699A0A15BA779D6E66472C798857
-:10D6E000A78A3CB42366F789117AA9E23AFC1D3176
-:10D6F00009B7F483829CA0FB89839BEA4744433F9C
-:10D700009A6F18FD3ECE682BB71FB01DEE2B7BFB2A
-:10D7100014CFC610FE5E20EC71CDC7C77FEE99B165
-:10D72000BC5D386FF7DC335184C7B1CB148A3B1B27
-:10D73000BC9D79F01EF43D429EF6DE1E5071BCC2C7
-:10D74000657C3CD96FE1BA64BA175AC81AF2F15E27
-:10D750000BEBA73094DB126F30BFC338BF74582A6D
-:10D76000E8C7BED2FB5443FAC58CC4784456C7E818
-:10D770005DD131FD3ED4CD97C83E80FA25BDD6D3CC
-:10D78000A7D03BCE637D4B96225B8CF1DDF946073B
-:10D79000ACBF89B9535CA48AE8FEB184A79767A798
-:10D7A00009D422CB62F5A63005E9CD0EC585F00F70
-:10D7B000ACFC8948EF5CB785DE551E67765AE89D5C
-:10D7C0008E76E2752E3A64BC8EC15E30C4E5542F6D
-:10D7D000FE2C19FDCD0B234DE43759B83B82EC06E6
-:10D7E0006DAD42724DDA418522DEEFE2B2373A4C3E
-:10D7F00046BCEFB4507F325EA72CCD9F6CC2FB09B4
-:10D800009D37E4C4AA64073C8FF2F0ACEFE55B07F8
-:10D8100062BDE5FC5DD18BCB76F3DF1915E73BF2FA
-:10D82000774B678BF8AFC26C6F34C6C3C8DF4793C2
-:10D83000F764E4EF924A3F4FE17B7DDF44FA16AE96
-:10D8400017EF7EAF2CA4FBEFC6B8AB1261FFCD5F24
-:10D8500066A1B8ADF906FBB044C4655DEEF74A0FAA
-:10D86000F531D887F27772441DA676F914FDC2F21D
-:10D87000DEE7340B9703D376323AAF9AB664840965
-:10D88000DFAB66BB39FF4C5BC2ED9C69AF7AE8FE4B
-:10D89000A6B41B3F10F6CCF84B4984FF8F85FD32B0
-:10D8A00009E35501CFA31BC2441C5B22A5932FF1B2
-:10D8B000F8D5F10E2E0F1AF6F177379A7D366E579E
-:10D8C0001D66FCDD38037F8E33FB4D78A1D13D18FA
-:10D8D000F813F263D01E82FEA6A07D1487FC9E3250
-:10D8E00092E2210B14BA4764E4F7D1968A3730DE0E
-:10D8F00076F466E6F6B1507E073EC6FE7C0ABDC7EA
-:10D90000A0897DAEE46323DF4F8F10FE2907F73F28
-:10D91000B5F829D056C547D47D7F9B8CF1C4D3D1AF
-:10D9200067D899A6E1C1B8BDC82C5EFE8F17FF3637
-:10D9300079196E7ADAF15BA8BFB4123E34F9EE447D
-:10D940003B7E04F41FA0BCBCE3AE5CEBCC1079F9C9
-:10D950007F018165E5A90080000000001F8B0800A1
-:10D9600000000000000BED7D0B7854D5B5F03E7340
-:10D9700066269364122621901048980422A906383E
-:10D980007941401E87C82358B40349143009C33B6A
-:10D99000A878236A0DBDB499908001C11B340AA2F6
-:10D9A000E880CAA5966AB4DE0A4ABD838855EB03AF
-:10D9B0008354EF6F1B86A7A0B546B8D6F67E5EFDF2
-:10D9C000D75A7BEFCC9C9399006AFFFF7EF76BF8E8
-:10D9D00074679FB39F6BAFF75AFBE4ADFCD28CFC2E
-:10D9E0007E0C7F2CAC3F630B5CF43B9BA2E6A50650
-:10D9F000F3185BB12E27953919FB067F26F62C17F5
-:10DA0000FEF54AE6EECB584D9FE01D8AC6D8208D24
-:10DA1000E993D3189B83838CA5A1022C97B1B9A25B
-:10DA20003E5D1BF2410B8C5713CFEB69ED8ED93E57
-:10DA3000A82F7704A7AAF0E89FF2EACA065818EBC5
-:10DA4000A3BA198375C5D8BCFAC02CC66C7BF20387
-:10DA500003E1919AEBA2E7CC1A1CE04960AC7A434F
-:10DA6000FBC6616E1C17FE57CC5895BDD5C67020FD
-:10DA7000E6B77986C3FAF298EE77627BF8AF88B1A1
-:10DA8000E3EB9E7F6ABD125AFF711B9BDD1E617F17
-:10DA900093340BCDB3B38131F730C6763538A87CDB
-:10DAA000B2C1C5DC318CED6E48A3FA530D6E2ADB92
-:10DAB0001B72E9F9B30D1AD59F6B28A1FAAF1B743D
-:10DAC000AAEF6928A3F285060F3DDF3FD05BA0C116
-:10DAD0007A1FB0E8C7EE82FDA5ABAD8C0D8135B6DF
-:10DAE0006E66780E8B700B6E829FEE18C598971F2E
-:10DAF0000B1B6CD7ED2C85B1A6758A6B35F4F33A08
-:10DB0000EDC79444285B9440CC0868E09BA207735F
-:10DB100079DB6FB2115E1C8E2CB7EBC127A05F4D75
-:10DB2000839DAD87478F5EC6741CE7D19FD8FDBE2D
-:10DB30002C84DBA1838EAC101C3FACBFD7061881B0
-:10DB4000C797E3867673EB62B5F5F0FEAD7C4F19AF
-:10DB5000AE3B3E4FB37B016E19F98CC6BFAE9FE75B
-:10DB6000871A94CB37EC7FE47D3CC77D59762FE054
-:10DB7000CFFC3DF96BD3DCD8CFEBC17EF39D2EBB40
-:10DB800007FADDD29C6477231EA4B2BAF63C9CA7A8
-:10DB90002B73564208FEB59A42EBC82AE0E37F8613
-:10DBA000E744ED5A6D330DED2CD40EE0A63BFA8719
-:10DBB000E09461653E4B01C2CBCB7484D700A621B3
-:10DBC000BC06C2F39802FE3E3639043F33DCEC005B
-:10DBD000770BBC1F08A5BD2004C70C78AFC2735BD0
-:10DBE000EEF1392C1BE1C6E67922E0CF83B87E84C2
-:10DBF000FB6C07D1D562073F4FA0ABA9A980872B4B
-:10DC000036292E4003B6C8E9BE7E0CD417BD666324
-:10DC1000ABA13E23D96D1F00F52E38DF1D505F707C
-:10DC20007BBEDD0DFBAEC2B380752CDA3286E86DAB
-:10DC3000911FCAC2E87479C3A603197B117F02BA87
-:10DC40001DE964914BB727E785D16DAB427461AE96
-:10DC5000AFD3545A77156393117ED5B767D9173868
-:10DC6000B1FE9A6D451EEE8BC341F68376016C378B
-:10DC7000239BBD8AF4D505FBDA91C5E72B081B7FF2
-:10DC8000018E1F363FB49FE781FA7D5A028D37DF40
-:10DC900005FBCEC2D245EB0438109CBA36C2786E72
-:10DCA0009A87CE6361C06FD3703D569817EA735D53
-:10DCB0007E1BCEB3A039DF8E7CCABB81CFE36D491A
-:10DCC000B20F87FA7CABCB9E81F08B0358A4D0FABD
-:10DCD000FC3BE06816015C929D380F9B37CBD91353
-:10DCE0003EF3C57A17B526D9171B9E6FB2E17900AE
-:10DCF0007FD323F18D83E2DC17344FB233EC6FD541
-:10DD0000ED1AAE47C0F7D4ADB1EB591FE8DFB6D975
-:10DD10009605F57F13F87B50C07546762047C17D88
-:10DD2000DF1AABE13AE7B85A697FDDF0BD1FE001C9
-:10DD3000CF17BB3C045FC00B1F03382C6A339E67B0
-:10DD4000683D1CBE8BDAE613BD2DB17AEDAEF075E1
-:10DD50006CD99FA3005CE6007D2B007FE6F2662273
-:10DD6000BE9CBEFFFA4CDA27AC13E19AA0B9A7A675
-:10DD700015119E101E4B7CA929E4F42BE7FBA3662A
-:10DD8000A5F9FE28F86774BAD45F4D43BA84F35DF1
-:10DD9000ED8E4E977664DC30AF7D91E26F527AD291
-:10DDA000A9A44F4997924E25FD3E62F304D29410E8
-:10DDB0009FA9E9C3EA9E8D00A78C7C7E0E73C5B92E
-:10DDC000025C5F41B8CAF7F67CCE8FAAB28DF48EA2
-:10DDD000E3E1B8E704BFAA2A0DE4DC9A176A2FE74B
-:10DDE000AD4AE6FD10EF11DFCE8973C7F62BA8BD53
-:10DDF000E063825F2CECE617BBD7F4477EF18CA280
-:10DE000021BF58B1F140C69D00B715BF8CD7100691
-:10DE10009FDCFCC42D03B251BEF9E9DCE4BA16FF65
-:10DE2000359FF8C412219F170522F38BEB73BD6A4F
-:10DE30007E71A8BEE8BE5F5EE6E5FC2680FCE60FCC
-:10DE4000BF7CF1C85877489ECAFD2C6879D736DF69
-:10DE5000190E3FBEDFF5B9E7E6E3792D74DADD2A66
-:10DE60003C5AD83C9FF82F4B635A8E123A7F335E50
-:10DE7000CC6F5674EA573FCAAF7E8F7C7AE18699A1
-:10DE80000CE5943C379898B15121F92AD77F593E37
-:10DE9000A7DB1FE4F3FE73057ECFAD9D641F908268
-:10DEA000FB9D5F886AC51CF17CCE22E3F3EE7373A1
-:10DEB00075F3F9B5482FE7DAF9B99DDB6023FE73F6
-:10DEC0006E77829FC1FE3E59F1FCDBD741BB8F1FAD
-:10DED000D89E89FA4AF8B9B1427E6E582E8573638E
-:10DEE0007D239EDBD8F0735BFA283FB7854FBDF5E5
-:10DEF000C717DCB45FCEEF36C6F8911F2F687F8658
-:10DF0000CE714ECB265B16B4BB3A3F8BCEAB9BFF9C
-:10DF1000D7E5BB18C0776ECB761BF289AB251C4CBE
-:10DF2000F400A5CEC2E80CE592921CD2C7647BE453
-:10DF30008FCFC03CB7DF1A9BC84686E6B92D9FF34A
-:10DF400085857549C938DFC2BAF9F7B01121796002
-:10DF5000DEE789584E2F0B603CA4DB1393B4CC153D
-:10DF6000849F968872F74681870F01B863011F0668
-:10DF7000C6B7FF1CE130F09FE234E41F438706FD83
-:10DF8000382FE237AEDB0EFCD301ED86DE1CFC1C25
-:10DF9000D73114300CFB6199904C25EB0FF51DB077
-:10DFA000EC1228B3555EB6E6733D09DE07F03D4B33
-:10DFB0000916E3FE257E9BF1D7CE1E6FC9463E961D
-:10DFC000C2B42677085FE538125F253E47DB5FCB9A
-:10DFD00045EEEF441687A73D0EF6977C09FB0364D8
-:10DFE0002D490EED4BAE0F7478DD82FAE33F0FDF63
-:10DFF0008EFAF389462DB3CED9DB7EDBA6F48FB043
-:10E000005FF33E25DD2C72709A06BAE98376C7B9B4
-:10E01000D6217D50EE9C5040BE41BF13B7C65A700A
-:10E02000FD725FA897B318AE9763897A391BC6F55E
-:10E0300072ACA35E8E25EAE5F43C3F99CB23164CE7
-:10E04000403D13F401CE0F029C4E3AEB87D0BEE464
-:10E0500073A91774BA8209C961FCFB649D909B2C5B
-:10E06000B811E99BD50F614FC0549DAD27122C7993
-:10E07000889F7C7DB2DFEDB62EE2872CC1EE7E025A
-:10E08000482EFEF677A7A4C27C8BDBB2F215E857C8
-:10E090005D5FD8590FEFAB9B5335E41B8B9DEEB5FD
-:10E0A000281717FBB234948BF16DF9A7B7C0FBC5E5
-:10E0B000CD5768D8FE76857990BEA49DB08475FF53
-:10E0C000909DB054F0B5A5C82F015E4BEA0F0C75BA
-:10E0D00041FF255A6C3ECAF7A55BB89D30C3C25AB2
-:10E0E0001494C34D9EA9C8C7BA1E5434D437D9C39B
-:10E0F000C05F1D21FEFA7EAEE7B7C867D857807FA4
-:10E1000030FEE5288355DC57BB8EFB60A08F3CC1F9
-:10E1100070DD1ED2EBA70ABED1D9762CC19DC7E116
-:10E120008DFA3AF3EA16E4BB2B845C1B6CEF3A766B
-:10E1300017EA3309166D07E797EFB8719FAFAB2C5D
-:10E1400086E48D682FF8E9E09F953890BFAD48C808
-:10E150004E25BD6A8B4AFC51E24FAD58F3E2EDE526
-:10E16000FD116F16C37B94775BF121B0D0B56D576D
-:10E17000F547BC5AB469CA033E906399028E27AD35
-:10E18000C199783E67B6A72637A25EB8BCE93206C9
-:10E19000EF176DBF2B13CB33DB636723BF9FEC9A65
-:10E1A000393909F6BBE4E1A47C354C6EFC45D0E37B
-:10E1B0008DCBAF4A457BE0E6AF0F3CE2023B6E31D0
-:10E1C000C01AE1FE457BBCDF074D6E6ED893A902F5
-:10E1D0008D7D1DE3FD1CE1799365DF756390FF2B59
-:10E1E000FE9D03A8BD3BD5D58B9D7D1AED50C0E7A4
-:10E1F000E53FFB80C6F9D4F2E6B573A0FFCDCB7F37
-:10E200009588E3DC74FFE1512E78FED650EF7FA3B2
-:10E210003DFFB1B27DA70B05D396ED23506E7F8DE8
-:10E22000765A31E2B5E7BA3908F7D755827BB4F9A7
-:10E230006AF728045F59AFF6F7217DD61B60761781
-:10E24000962E46FAF21995D5A33E20F51AF93CA967
-:10E2500080C3E54C9FD64CC48B653B3767A25C39C5
-:10E260009BC0EB553BAF7F03F994F7F118AEB75B5A
-:10E2700019E9C90B7D5CEF66B540AF0342F30F2C83
-:10E2800088A7F1966D2934C843D04BE8F9592B2B58
-:10E29000C3750C6EEACA47FDEB436B60319EEB879A
-:10E2A000A0D7A27DFB17C1C73E6C55A7E2731F1014
-:10E2B00012EA231FB6FE2A61A833A4C72514B507A6
-:10E2C00090CF2D7F2EA940E52845F8754BB75FC448
-:10E2D0003975600AE9632EC4D3157B0F4E65BC0EF9
-:10E2E00082303A3C6F147A5877FDB967C8AEBB7973
-:10E2F00037D7276E6E7FE6D57418E7963D429F109C
-:10E300007ACA7241CFB73CC7E1B2FCB963F685E186
-:10E31000F6486EF2DA81A0094E78F6F2D9F7BBD151
-:10E32000DE56C8AF52A965CE691C8AA5F4977491D0
-:10E330007EB83EB783ECF2E5CD62BCDC8EB5D9B4D5
-:10E34000DF997DC3F5A1890536EA27FB033CA8DFE9
-:10E3500097B1892390FF0596C7B5A05CD76F715A16
-:10E36000B16C5AEE2439FF709D25D70AF0D5953847
-:10E370000DF5B87A076F7F675CE20E2CF7C5F1FAEE
-:10E3800097B19924A7BEB4789E5902EDEE540FC5FB
-:10E39000A2FF6300EB3A60817A493FEF7505306F69
-:10E3A0002A03EA51517E04147CFFD96F3E2AC475BA
-:10E3B0004C181C3CCF6069B6C6BC3993014F6A0A41
-:10E3C000C43EF3828588EFFD5EE6FC7A9B8DB5A0A6
-:10E3D000BC63560F9B05CF03C8BFF0FCFF66F1235B
-:10E3E0003FDEA7041E0BD7BFEE1378EB8971B6286A
-:10E3F000B0CEC7B3BC4B711D3F526CC35175616E3B
-:10E400003507C7FFCCC6DF4B3DB65430E10C618FFA
-:10E41000D9D3D39CB8BF26012F45D7593DAC6375DE
-:10E42000DECB0B115FEEEE72B01898BFB42B8EF4FA
-:10E43000DA8CF432926F4D022E8A3B05650E7B39E1
-:10E44000CFE28B81F5DECD1C7E6CCF1C26FDD71272
-:10E45000AB633F65DF6FFF86FC7EA0FAF9813ED09B
-:10E460007EE09D8AD6046D6ACE9DDEF60E43FBD912
-:10E470009F8FF0BBB39FB7B100F6D779AEEC98177A
-:10E48000CEFB6E57BB43CBE3E385EF63DFCABF250B
-:10E49000265B42EBFBACEBF42F9F2FC2D24172A85C
-:10E4A000749FCAFD4DA6F57C96E6B6D23975390241
-:10E4B000166CEFB4F81505DB1FF800D757EA7006A5
-:10E4C00054D4E31DB63F85CB19762823E9F41524EF
-:10E4D0005AD837A02CF46FE2E737A18FD1BEDC59B0
-:10E4E000C0EDA49DE29C247C25DC985B67E172E68C
-:10E4F00025E7CE6AEEC7E274FC4FE2F9B9BF669336
-:10E500007E716E1FE81911F44E591E463D03F487C3
-:10E510002FB3F5A7106E52CE564AA92BE4B02AC6E7
-:10E52000AD14F0AA745A387C2A4CF0117863C60BEB
-:10E53000F3B9CBF3643F3974B04F169DE3F07F61BC
-:10E54000747E7B111F3BFFF6E61A203796AEEAC7B2
-:10E55000BC59FF13CF2F103B0CF58AFB2DA457A0FD
-:10E56000DE877AA2E41F5EE40323E939D703731937
-:10E57000F18D1A358EFC8C66BE21F985370ECA11D5
-:10E58000C8375A891FDCA9761DB428213E31B82C22
-:10E59000381CE5702798FEF83E6869A7E7DF146429
-:10E5A000137F18C40E0D203FAB35588C7AA0EA7843
-:10E5B0006CDB4910296DEB387D34D9FC0F2E41FE00
-:10E5C00050E9D450AFFBCC6FF1D9609D6D499C6F81
-:10E5D000B42D4B2779FE19137C64B69DF8C89516A7
-:10E5E0008B8FECAD39E9646F75B7CF71937FF5D739
-:10E5F0005FAB976DC1F7331D2477DB501E43BD6DB4
-:10E60000E3707AFFA2E44BCB385F6A9BA90F88C303
-:10E61000F733FB5B70BEDD29DEBFE1B9A7ABFE9F20
-:10E62000C7A23E79531C7B029EB765E90350DE3ECC
-:10E63000A078E62CC6FEC3F9BA8373E29EDAC98FCE
-:10E640002780FEA4CEFA841DE17E6FE9471FEC3BD4
-:10E65000F620C2CB57CA72519FEF44FC1C193A2FC7
-:10E66000B0CA597D72E8DC524CE726F1D56783F3D6
-:10E670004BE1E7B75A897E7E29E2FC947AC06FE2CB
-:10E68000FFFC7CEE54397F672F696E2CD5FEDED4FB
-:10E6900042585FD3AD702E2410837720BCB6AD4CAA
-:10E6A000D0711F9D1656DB1E816EB30B85DF09A549
-:10E6B00031D0C33C410FF324DEAE32E16D7050D255
-:10E6C000E97881B7D0FFC578CF509CF753E5F028A3
-:10E6D0007CF8E67FABB323CD33BC90FB0BF68356BF
-:10E6E0005A48F2B5D4A0AFBE99FF5106CA29F6D553
-:10E6F000814128775F49F18C2C04FE113BB48BFCDF
-:10E70000E69D03BA6CB8CFCE391F67A05E34AFFE6A
-:10E71000B7445F17BBCED5F135361C27A922CB16DF
-:10E720008432B522EB20E2CF91E931EE98087AC825
-:10E73000FEE9C33250FFEDA81C96817CAF030EF0BA
-:10E7400010AECFEA4E40FEC7F654131FAB147CAC9C
-:10E75000A362087F2EF866D8F38D45A8D73A2D5AC4
-:10E76000B8BE602ECF02DF0C00DFFC08EC332C4F6C
-:10E77000817D1600FDF504D867583F06F6199647C7
-:10E78000C13EC3B2A341A3F74D1543F604E19CBFBC
-:10E790006851687CF4DF46D28B6F7C5C6501091F91
-:10E7A000F8AFF6E17816C80DD597B4F535D4176DE6
-:10E7B0001868A82F681E62A84B3DD2BBEA0AC3B8EE
-:10E7C000E565858676ABE347D8F05C93CAF239DC21
-:10E7D000CBF209EE1DD74481FB35A309EE87A78F45
-:10E7E000CE40781E46B8A3FD66D512F01C24DC6727
-:10E7F00089390F9715F2E702EEA1E7E5BDCAA94FE7
-:10E8000010DE31087707951F21BC09EE1CDE2710AA
-:10E81000DE3108F75C2A8F22BC87E1B800EFA20B3B
-:10E82000C3FBE6DDAA010E373E6E8477EDC37D4D56
-:10E83000F01F6880E3A20D430C7509EF05CD467803
-:10E840007B57159ADA31B601E0508EBF001D1C2EA1
-:10E850009E467129AB83F9E281AF2421BDC1FAAD97
-:10E86000150AD78FE0A715E87016FE02F46575F259
-:10E87000F7CD73143FF225D489D0AE00B806E281FB
-:10E88000CECA5D979D42BE743D723015ED7A3F95BC
-:10E8900037B000D167350B527D1EEBCAB443798B7C
-:10E8A0001A588BFEBBB71CDE27919EFF32FDDD4E52
-:10E8B0000589529B3F0CE99C3993C9DE8C764EC08A
-:10E8C00029257F62CE51625FF05381FC1FFA75C427
-:10E8D0008FB8E30E3887CFE60747E1FC373BBC8FA4
-:10E8E000A65868BE3D38DFA736EFB0BEF0FCADE2FB
-:10E8F000D11948FFCCD3CF6027459B6F136E16E02C
-:10E9000030BF0CE0A4601C8EC3E5642587CBFE4DB0
-:10E910003176F4679C5C67237FE5E6F8CC4CC4DB7A
-:10E92000936BA66522DE356E1A9689F83EAB65DAE2
-:10E9300059E4DF53D41935144F6DE578CFD8ADA421
-:10E9400077DD21CEEEB89B6901785F393D41F3C197
-:10E950007EBCBEAC445A2FD39DF9D06EA1D8F7C26D
-:10E96000D6A533703CB9FF051B620CE7FFA3126309
-:10E97000BD92D943789685E76C0FBDC7F357ABFAC4
-:10E98000787BB1A3EBFFB0FD8D57C2C63B5E98907C
-:10E99000827A0B1BCD467FA386FA4783EB970DFE49
-:10E9A000375EC909C155E2D36F0A3D9FE0F9C063E4
-:10E9B0008AB7012D913CB8A5DBAFB52F11E1B7297E
-:10E9C000FEA57BAE44B8BCC7FD1C9BE36B887F7C77
-:10E9D000827C3B0BF9F4F519C130BE20FB07053FE3
-:10E9E0003DF2CBEB898F1CA84CA5784CC773DCBFDC
-:10E9F0007C54D07D47C5F5D57700FFECD8AD929E0D
-:10EA0000D7B1E7FC41F4D374B42B9A00B9257CDC70
-:10EA10008E3DC0CF91DF7A6CF47EFFEE5FD13ABFBE
-:10EA20002F7E5EB157F0F32D7CFEC5560FF117E631
-:10EA30009D6DD8DFDF8BAF5F889F1FB1713CED38D4
-:10EA4000A292BF8DF9F443B9FDC3F0B38CE36763C1
-:10EA5000650CE3F295F39959154007A8E733773130
-:10EA6000DA949FEC29EF47F27283ED38EAD32EF85F
-:10EA70008772DB0CC74A663D1E0CC3DF9B9F83F683
-:10EA800061EB9B85EFC3F0D98CAF2545467CFD82B9
-:10EA90007D9569CFE6EF0FF50FF13DFC09E72F9269
-:10EAA0006F49FC05BE55837C0DF8CA554580B73FBC
-:10EAB0002EC8FA4D5009E32B17C9C736C57F4D72D2
-:10EAC0007073FCD784C7872B051E839E81CF3BAE16
-:10EAD000E1FA06F3CF267A9827F5089B2701FDA4D3
-:10EAE0004756F54DC4F7C79ACB89EE243D99E73BCD
-:10EAF0002AF04FB69B67EDB26911E4A17795117FBB
-:10EB0000D8AED984EF7798F02CDAF8E6F6729E79D1
-:10EB1000A678AF799EDB8A84DED95E7D51F3211918
-:10EB200076F727FD362E84972AF2812F1382A47F51
-:10EB3000CD36E86547CB46935E76B8E27C44FDEC83
-:10EB400068C5F9B74623BD95D904BDD752FF72F108
-:10EB5000DEBC8E8F84DE704AF08F1382AEE57B754B
-:10EB6000FB9AFE7311EF57A91AF2AB23330A09CFB0
-:10EB7000CFF82B69FEA3152AF99BEE2F9A3217FDC9
-:10EB80004D723D72BEF26BCE27A03FED0B8017FA9F
-:10EB9000C7CA6D5ABF48FA85191ED1C695F803FA3F
-:10EBA000EC11DCE761E4A3F8D66B84D361EC0FEFE2
-:10EBB000676D5729DE6686D381E9C3882F1DDD2561
-:10EBC000F827C015F5F0DA878DE7BAA42DDEC46FFB
-:10EBD000FA1ADECFAAE47A99E4D7727D87570DE955
-:10EBE000179E3775A1F396E35C2CBEDC28FAA3D8F8
-:10EBF000FC86E46FB2613CB0144DF3659BDE5F6E42
-:10EC00007A5F60AC5F241E1F13F823E5CFB158ADC7
-:10EC10003A521CEFE8D531B5E1F9099D45DC7FD3C7
-:10EC20005924E2DE9728B7FFA328B2DC8ED65FF224
-:10EC3000BDA70B3D41E4772C504EF1EC8BE57361A1
-:10EC400072FE4C11D27950B1637FA957DD58C6E5E9
-:10EC5000C2E6F8A7284FE3D346AE17ED6F8C213CF0
-:10EC6000FCF335FCFD9FFFED23D2A70EECDD9C18D5
-:10EC70002EE7255E9EDD332D11FDC2272B1E4B0C8A
-:10EC8000B703E4FB8F2B1EBB672CD1B7AAF5762EFA
-:10EC9000DFD61EE8A810F680D0176EB2B6FF3FB1DF
-:10ECA00007CC76C014F5E144E47F667BE0AC5B4FB3
-:10ECB00074117C04DD09B972A380CF9F6D7A22C5DF
-:10ECC000E9761572B962C24F0987D3120E1BCA7B4F
-:10ECD000C59B53422EC8FA622B2378781D8CF465AD
-:10ECE000D6A66818FFC234951238974315F98FA13C
-:10ECF000FF4AB67FA65825FC96F31CD9A6B4A37F7D
-:10ED0000E5B7CDE5D57760BEC38C78E2ABB2FD1236
-:10ED10005FEFF2EBC8C6A46B711EEF1655C3475EDA
-:10ED2000DFB17EE1EB977A9AB9DF326BEB45D9D14F
-:10ED30005EDFF644B46F83629DC1FDB1767742CF4A
-:10ED40007E18AFC1FD2F9BA16A8DB0FE651BF8BA7E
-:10ED50002A7DAA960DF5DFB63E762DD2C1897A9B23
-:10ED600085DB072E039EBFD95AF836B63F59C6E554
-:10ED7000CAB18AAB12310FCEB7C5A6E5B87BCE5764
-:10ED800053CCF3D2CEEE89B1A0FFF46CBD8D05C893
-:10ED90007FE1217BF9C88621549E45F871FB9ACE0C
-:10EDA000FFC662EEE73AD1BAB03FA72737AD43E2DC
-:10EDB000CBB15D6A993F02BFBA519CDBA9AF9E26D9
-:10EDC0007C7B755739C9E313157C9E53ABB44484DF
-:10EDD000E7EF36A844C7277D7CFCFD7BEF4A1C0B80
-:10EDE000FB385BC1F77576CF9D6F8F817D062BA4B5
-:10EDF0003CE6724AE6F704370CA178EFA7CDDCFEBB
-:10EE000096F42EE3E157AD3C9248FDA59CDB3DDB3B
-:10EE1000B0FE8E5D27C80E3BBB0166E372CE998FB4
-:10EE2000F986BC3B5B32C378BEB32AE20DF5792D7F
-:10EE30004679D6B897F32BB39EBB7803E8C1E89721
-:10EE400032D9790B1B0B134B907E510FC63C932785
-:10EE5000CA0FA6E23EDAABA95D85889B2D6C8B318B
-:10EE6000F083CA66A35DB7C064C7F5B0EB4CF24847
-:10EE7000C2697914F924F5B90E61AF1CB579AA23DA
-:10EE8000E553B41773F9330FE8370DE3444CAFBCC7
-:10EE900052C07B3DC2C7DEF5450EE8D31DAA361E23
-:10EEA000F5EA1E7460D203CBCB8CF0659A8F95483F
-:10EEB0007F849BF4FBD3A8FFB7F41572DB0772289D
-:10EEC00001E592FE6C31CA958BF51F5CB47E5E2322
-:10EED000F4F31A837EDE814DC2FAEFAFBC9EFC5480
-:10EEE00047AEB99EF4F523DD7E2A8FC14F25F5BAD2
-:10EEF0002333CA0DFA67D8F33EBDE58B47D3378F6E
-:10EF0000213F263ECDE5D25A6147360B3BF2C80C75
-:10EF10006147A630A223AB556791F8D9A5EA6F0BDC
-:10EF20009A8D72C9BBCA683F3E3FC97B16CF252662
-:10EF3000ED72C3739BABC0E83F34E1E740C6FDE729
-:10EF400077A12F00E0DE54C9F34EF139E6BF48B98E
-:10EF5000C4A03DF28BCA0D97FBD7F3F73EB500D3A3
-:10EF6000E518AA74D4DECAEBBAC2EB3EA778AF8A22
-:10EF7000BC371BD48F6569B351EFC2BC9EF864FEE9
-:10EF80001E516420E075627248FEA15F3F9687D6ED
-:10EF90007D89D06F5045D62B48D798EF735901DA49
-:10EFA0008C3C2F2C0D5DFA05347E00F37A824D13D4
-:10EFB000C9DF5CEE48E4F179B0A37BC7BF46AED7AA
-:10EFC00095F5A5C90659F97AA2E2B36877217C0EB6
-:10EFD000D3C3068C223F9A85FC2D9BE247D8107F35
-:10EFE00067393D190807C07792AF1DBFB1131FDE07
-:10EFF0005FC9FDB01DD3476FBB1D9E8F78DA49BE38
-:10F00000F48EC5D20FDE95108EB747579DB0205FA6
-:10F01000FEFD1EA6611EE3D1DD5507DF80710EAC3B
-:10F020005AB8B118E9E84D95EC06B3FF76D2D3E3B0
-:10F03000C8FEBAEE1A95F2BB0F97A90CE5DAE10DFE
-:10F0400071063B24E4D755093FBED867A5F768EAA7
-:10F05000E462FE15FA37314FAB8C9FCB0B829FB524
-:10F060008B73FCB9D063760ABA69137473AFA09B33
-:10F070007566FFEEC39C6E0EEF01C301E4FA3B33ED
-:10F08000169692DF7A0BA33874D674757D11ECEF67
-:10F090008A18CD86F09B34239FC3B342B160FCA68F
-:10F0A000BC2CDF86F47E455FB70DF96879D94CAA90
-:10F0B0004FAEC8223B7FFF2A908F68EF2768194820
-:10F0C000974367C4042C89683716129FB8F28CC521
-:10F0D000402FF9813803DD5DFE78B2E1FDB02DE906
-:10F0E000867A3F4FB6A17DDF32233DC60D2D30F22B
-:10F0F0005DC6F54209E729EA38F2731D0DC9517A58
-:10F100002FF511E9AF93ED015A06BED622E4C808E7
-:10F11000A8633EDDBA8A2607E64D7CD16ED5F8F8A5
-:10F1200055A41F38B29E73209D606815F3AB5AA496
-:10F13000FE29FCF74C67A6756D6018673D5AC60836
-:10F140009F62873205F5AF3671DEF7897981AF4E60
-:10F15000B2919F8E9F63DF191E6AC73C46FB200D4C
-:10F16000E9AC00F184F7FFB9E8BF53E0CBD1B2C7F7
-:10F1700056C7213ECC66A46F4C516F5E8DF1C4A37F
-:10F180003318D1497BE0E5385C3F8E83F9812F4409
-:10F190001BA7E2571FDE82EBD965A771CA1F671351
-:10F1A000104F2EFFD1B18FDF46F06D711D88653D88
-:10F1B000E5F088C7750D81937B86056C540674E471
-:10F1C0003FB9670EE9180FBCFCCFBB3E7E8AE1BC9D
-:10F1D0005C2EB408FC36F3D75F3CF1EB05289F7F2B
-:10F1E000B1736BC10750FE60F583E9F550FE7CF505
-:10F1F0004D5B6F7787FCA53BAF5DBAA30DEAC37E7D
-:10F20000F8D3279F43BCBAF6A7FFE7395CEFB57F79
-:10F21000FBA313D67F59530243FA96EB33CF93C621
-:10F220005A148C8B221F25BE6CF5517DBECF68FF12
-:10F2300098E53EB6B702FCCAEB7F41F1E534D1FF59
-:10F24000F03577292ACCFBC17CCE573A1ABADA2698
-:10F25000DBA87D00DB039FA47CCD818380AD607F34
-:10F26000BB4FC1B83828481AC67B07C07BE4E7CC3F
-:10F27000ED26FD2A53E2AFE02B78CD81913FD04AB5
-:10F2800078962BE291C87F91DFBF312A9BF8F2403C
-:10F2900027D3F17CCB5EDCA0609EDAFB5EB7467ABA
-:10F2A0004103BB7F32D8C997AB3CEF22B7ECFDB925
-:10F2B000782EB055ABB72034EE2EA1D795BDE8A47B
-:10F2C000BCEDF77739B7939E7FE85A4BB87E58FA72
-:10F2D0008B3F3DFB3BC4AFF9B1845F66BDA543D016
-:10F2E0004777DDE6DE763BC0C7F71B07B7AB747721
-:10F2F00006D9E99A3B03F377BADBFD54C6D3B43F92
-:10F30000223F9F55154F7106195752CB3E5F83F42C
-:10F3100038AFA4AE18F5F7743C87BEA138F607CB1A
-:10F32000EC946FE053E2282F3D5ABCFABF843C6452
-:10F33000AC6E24AD83D58DC6F2FCECA66D767774E9
-:10F3400079D52CCE35DA7B9B9D7923C595FF6B143F
-:10F35000F72336E139D8C2CEC1F9FBB9181F8E7632
-:10F360000ECCEA2FA03C4B876328E681A48AC79B7A
-:10F37000E37FF616CAABCE235C5EA5D67FD980F4B8
-:10F3800027FD163569AC3B6EA6433F9BE8972AE202
-:10F390002C48C3A87FD78878516735A378516AFD78
-:10F3A00047FF8DF0D924C6AF798F8F6FB706F6234C
-:10F3B000BED438DD24773AFB256A78AF897DC5F362
-:10F3C00053D219C747393E13E3E3CA59D8BA53E3B6
-:10F3D000AADEA1EB101358201EF14771D0BCE9AB97
-:10F3E0006228AF55EA57A9F577DDAA8E308CA7A021
-:10F3F0005EFD7E15B7B7D1ECEC1E37CBA057919EC2
-:10F40000655E87ECD769637BD0FE0DD3B3480F638D
-:10F41000E1F30C31D4851FCD58B7A5D90D7CE2FDA1
-:10F42000AFCAFBD47139E04E19C5FD77080FA98F1B
-:10F4300049BDADC7B882DEC3F44B1FF20B9947D16B
-:10F44000AD27D586D94DD93DFBC97C35790E129EA5
-:10F45000D1FA3F3F499F329AF4AC008DE315C3586F
-:10F46000E29D99045F13BF04B6C5F3E9851E0A5AED
-:10F47000A4218F41EA95923F770ABE1BCC0A92DF06
-:10F4800050E6890F823E99D0FF86D149DD79F6A8F2
-:10F49000071D6DF88CE2EF35A887C2FCC1D59F1817
-:10F4A000EEA114954EBA81D66BCA97088BBBD27A5F
-:10F4B000BD826F4E519D94B7D2C9E234E45F9D3E48
-:10F4C000A18FFD219EF431C92FCCFCE11ACDC8FFDC
-:10F4D0007F5462E4FF33F5BE26BBD018A7AAF49888
-:10F4E000E2E1EF4D37F04DC97FEE44379F8AEE25BC
-:10F4F0000FC575DE14FCF26DA107DA591D3D77309A
-:10F500007E7F348EB553E96487A84C645D54BA9805
-:10F510008BF26B929946650AF350D99FD55199C6E3
-:10F52000783E553A6BA772103B446526EBA2D2CDCC
-:10F530005C162CB39946E550E6A1D2C35C14277F34
-:10F540002F21987118E037E37A26EEFD1EBA418725
-:10F5500073EAAC64A17BC04857539840BEB7F9FB2F
-:10F56000E9B2FECE0D3ABE9FC4DB6F7DFEBD87F0D3
-:10F570005E30F01BF1BE83BFEFAEBF7BC324EC6FE8
-:10F58000B3507DA7687FAA487F08CFFFE9D18CCE12
-:10F59000BBAC48DF36BA38543F53A83F1A5EEF3F42
-:10F5A0004ADF1E5E1F5DA83F16DE7F49A1FE44F8BC
-:10F5B000FB7DC5FABFF2BA8BF0F23D9B4EFA2EFCF2
-:10F5C000EC5246717CC39F3EAAF769C2C3DD8A151F
-:10F5D000CF3546D09B1DCF51453AD21C31587A7851
-:10F5E000DE4F30D6198CB7F462FF98E82888FC0902
-:10F5F000F070B8E2DD47F398F889E213F98329C681
-:10F60000B809E03BF95583ABB89DCE58E4F772DEFC
-:10F610000BE139D3C3FCBCD9A171A3EDC38CBF8767
-:10F62000849ED721F4BCF7441CB97BDF416BD269BF
-:10F6300047888EA3DB8756763A9C5FF6D8F79FAA59
-:10F640006D40D7C1FA1817CABBCE58F636DA69BE74
-:10F65000232A433DE352D7DB5638F50CE78B835C16
-:10F66000C867BAE7157CA6137F053DE78A3ED2BE80
-:10F67000D41C1CDEDCEE4812EB6A9A9C7C752EF9D9
-:10F68000F3B95E9F673B34731AAC337503F7AB264F
-:10F69000227D63E8ECE93FB8308ED63AC5C2904F80
-:10F6A000AD917E5E933F6ED3E415AE707FF09A44C9
-:10F6B000BF82F1CBF4402CF743A4307F2CCAD13267
-:10F6C000AD8CF2667CAAAB0CEB55ECDA5CA82F682B
-:10F6D00053DD6530EF81B65FAD403FE0A22A3BC508
-:10F6E000316CFAD4B3DCFFC7F33792059E37AF8B8A
-:10F6F000D10208C77E4EF2DBE6AD2928437BB7C9AD
-:10F70000999C8CB8985CB584FC864D4EED35BCDF79
-:10F71000E17359283F91B9744739E82BDB6FB796ED
-:10F72000211FCF78A628510D5BF789E673B1180722
-:10F7300079D465A1F78FAE2A752C71E23D46B017DA
-:10F74000A03CE03AAEA3FEBE15DAA0BFF19EDAE31C
-:10F75000AD97F5728E89657603DEC66BC67A8CC965
-:10F76000DF6833E905C34A1252E89C47B15178CEAD
-:10F77000239FFC8AECDF794E37F9D54B5B14CA8F97
-:10F7800009EED73251DF3CB17118E5BB34B718FD33
-:10F79000D1C10C9689F77DE6B72AA4AFAACD9F37D1
-:10F7A00062BFC1B9EE0138CE60AD6B802B8CFE1EFE
-:10F7B000FDE98F6351DE35E38535C223C6E342C2DE
-:10F7C0005E95F7CAE7BBCE55A3DEBFA8F55D0FC2B5
-:10F7D0003F49B710CD1CB5F9D3F0FCD74F9A45740B
-:10F7E00089F7B4508FE9A18FFE15D619763F614D88
-:10F7F0004A761CCE1BC25F3D11F77BB2B590F4A3D5
-:10F800001D2DA5741FC03CCEDD0DAC1DF5D6350DEC
-:10F810008EF648FAEFDD999E4CBCBF7D6AD3A4B545
-:10F820000CCEFFD4FE656978DF7D716B0C8B75F7AC
-:10F830006C7F72D3689A6F31DEA3C6795B67DA5149
-:10F840006E4C6B9B6447B8DDDD30FB99F0791E2A66
-:10F85000F5569700FDC5B73E4378E264011FC2F537
-:10F86000DFC7EB99A85F9CCC6111F33997962844C8
-:10F87000B7BF1BEFA1FB29A73222B7BBA984EBE7D7
-:10F88000C11237BFB76E656F2F4D217BD085F47ADB
-:10F89000A2A590E277368CBB0FC1EF567CD580F8DD
-:10F8A0007FBE6AE1074BE1FD9AE9D79DC172A4BD15
-:10F8B0008EF466F67B95E801F442BA27F69F150EA2
-:10F8C0005753581E21EA8FBAC1AFE161687FD85AF9
-:10F8D000D4801DF8BB6DDF69D2C3115FF530FCA584
-:10F8E0009F51429F17F92169A3E8DE1DFDACB9FACB
-:10F8F0003A7F00CAE32D0B1D91CE31FAFC61E3A2E1
-:10F900007E3B99E9B161F383540C905FDBCBE7EB6D
-:10F910006E27DE8319AAD3FA845E6E7EDF4D6F5B9D
-:10F920008CF4B94D9C8FD4CFA3ADF7077E63BF177E
-:10F930003038818644FBB5067AB95C6D5F817115FC
-:10F94000F63EE7FF60D7314F84385788CFC2DAFBE5
-:10F950000BF8013CD7A6CC22FB24DA3AECFE437A22
-:10F96000D68890FDF68334E3BA64BB17C4BE62FC4C
-:10F970002C604BC43240F73962A03FCAEF2FAA6E09
-:10F98000735D1D812E6469E65BF8E30E8BFF98F9C9
-:10F9900004A2C150A98F58787F3D8CCF25DCCFF5CC
-:10F9A000DF935B14D27FD76FE279145FF8A14ECA60
-:10F9B000053F27542DBE11CA8E33ECDEE192175B52
-:10F9C000EEB9DC6D80DBA2F0EF999C79F2276FE352
-:10F9D000FB8F9EFA8907977B57CAA244CEB78E2D1C
-:10F9E000C0794E5D61277F0CFE38247E40C3A5FEA2
-:10F9F00018031EAEDFFBE496052877F63A344CC7B1
-:10FA00005BBCC5F83E262D6C5F8CE397CF00A760EA
-:10FA1000F64CA0A3A33FFD57BA1F1E87FC13E97144
-:10FA2000550CDD0B33C3795C49F77746086F1784B3
-:10FA3000E250741F44D2D5F10D4DA7541867ED2A3A
-:10FA4000BB9BBEA760B2BF8EBA67EA6961F161FB7A
-:10FA50002A7E4F9385DB89D9A1FDCB718FFA163AA7
-:10FA6000DCCE9EE3F5C0BB28E3F529D5BF46BE98A2
-:10FA700056EA6163281EBD90F65DBF67D5D137A0F9
-:10FA8000CD3D715EEB987EB8FE21A314BC2F63754B
-:10FA9000D3BDC1E6664B2CF2FDD6766BEC50847775
-:10FAA000B385E47C6B7B4ADC50944B4E0BC54F51C5
-:10FAB000AEA861FEFDD16338BC42F2C39318AEFF1D
-:10FAC000C4097C3C952BF49FC95CFF519EDE477AAC
-:10FAD00047F31A1EA792FA864BE08FAB99C721A372
-:10FAE000E93FC87870DD09C58B5CC8D7D624F2EF32
-:10FAF0006F2C9AACF9F03EE7554E467263305EAA21
-:10FB0000403DCBC9FCD3601ED5C5F51B6F2B237DB3
-:10FB100026D9E9D410D4A96D7E1FAD5BE774E680C9
-:10FB20007F08CFB85C9DE1F856935E6137E90DAA76
-:10FB3000A9AE8D11792B428F6042FF96F1E0848D42
-:10FB4000BDE70149BF6EABF04F80FEE4A37B2325E8
-:10FB5000CC8F78CB74DD9DD23F6407A489EF1EA5BE
-:10FB600095B0ED4D61F127457F95FC06D22F29FD1B
-:10FB70000FD2CF31A204ECB5C4307FC44B605AAA77
-:10FB8000140F9B8E789205EC80ECC93CA6F0EB1923
-:10FB9000DF524FAFBFB8B8CF432FF3FB41CD9638FC
-:10FBA0006D4756CF76378DE3F8167700F6867AEDF7
-:10FBB000F50EBA873345DD4DF7EE371759785E33CA
-:10FBC0003BE4427D60E118CE77B34A3D0BC6503C22
-:10FBD000D593857803F0F0D9F0FE9EF0DB66DC91DA
-:10FBE0001D87FAF007034E6F42BDDCB7C642FC46E4
-:10FBF000C231ABD1722FA261587C2E602D08C5D9BD
-:10FC0000D67BCEF9F0BEF0B5E3B8DF356EE6C9FDC0
-:10FC1000E8075D37D4427EF6BB12748ADB01FD38FB
-:10FC2000541EAF7B0DE36D2DEEE464FCEECE534924
-:10FC3000FCBDFC7ED50309FDB787E797948EE3FAF8
-:10FC4000C8034A647DA5EF3885E759ED0540F621E4
-:10FC5000BF16B7C77D5F54E9CEB03AD21EF4FF1786
-:10FC60001FB7A75BF67E51E51B4A7692789F534DEE
-:10FC7000F63AFA18E1FD89BD2F55F9A0FE4856E481
-:10FC8000797F2BE67DE475EF60D467837B017FFA93
-:10FC9000443ADF00B394D0B89918970AAE8C991DF6
-:10FCA000E93B3683C6F37D6E8677317D427AECE69A
-:10FCB0002AB39EEA277E75BEF6F8414AD306FE5166
-:10FCC0000CF490C422F3CB0BEBAB5A1AEA9D4D2BEC
-:10FCD00095B5C83F9A405FC5B860AACB4EFA6A7323
-:10FCE000D28F27E1B99CAF652EBCEFBA03D43EE4B6
-:10FCF0005FE857C57BACD3EA399FF1BAB89F15ECE2
-:10FD000038CF55888F03AC848F527FB55671FE7300
-:10FD1000450CCF47EE4C7292DF34A99EE71FC7FB1C
-:10FD2000409FC5FD4DE6F9C33AFC433E24F55B67B1
-:10FD30009ED590476C37E5195B4D79C5FBC718ED2B
-:10FD40009984E2A25EF5AA97C0FEC575EE03FE8314
-:10FD50006500EC602C5F06BB1DCB57C06EC7B8C1F9
-:10FD6000AB0DB954BED6A0D1F3371A4AA89C981946
-:10FD7000A4B822F991C97FC3020AF9F1247E7D3A21
-:10FD8000A814EA4F4DE2EFFFF3853B1FF50D82F714
-:10FD900029A2BDEFEA6AC4D7EE3AABAFC6F6356921
-:10FDA000BC5E3DF6C7D5E8FFE99AA27F88F2AD9F19
-:10FDB000C5337F0DB6FD498C16C9BEAF1D2BE47946
-:10FDC00014FB9DE127128CFE9CB3637AF1E73CA003
-:10FDD000F075F4DDF7D2C348177D665A3D88C799A0
-:10FDE000D9463FFFD563395D3C3896F39FCC3780C9
-:10FDF0003E7A81BBA48F68EF9BF6020A44A02B5980
-:10FE00006E4E6013E87E76B57D76A43CA7F3827FC4
-:10FE1000441DDFC9DC312343F4D6E434D35B90E2E4
-:10FE2000BBE7EB6FDB8FF2F2BBD31B23FB3058AD8C
-:10FE300093BC0E02BD213F576B39BDA9567E3FB31F
-:10FE4000E64DEE1FD981F485F970486FF0EB341F51
-:10FE5000AFA79AE8ADC94C6F4E23BD0591DE60BCDB
-:10FE6000241FD72FE2ABDABF577A1B39F6BBD1DBA1
-:10FE7000BF8F0F525E436756DD0084CF66F13DBCF5
-:10FE80004BA5C337C7DAB93C18AE935FA0597CFFC6
-:10FE90001058CC06FCCECAB4418DD66480DF8C9459
-:10FEA0007CFA0EC16D63FB0B3A39E4447F4DE224CA
-:10FEB0007DDA58A4AFEBCED0FDC67E164EBFB5633B
-:10FEC000BBAA90FE32D674CC9C8674B75225396991
-:10FED000DED78B1338DD35297C5E38B901E171BD81
-:10FEE000B963393EBA5736290ED4C7E7332D278B6D
-:10FEF000BE2B43DFBBF997E6FF74E1B82F4EE0DF7E
-:10FF0000737137BE97E4E5FEB534B4DFE84A734158
-:10FF10004F7A849F765B7F033D2FC47D44A3E70B1C
-:10FF2000F18FE01845C085511EB057DCDF94719108
-:10FF3000A8F46CF2E346F51F0E8FFC5DCAC9E3F925
-:10FF4000BC4DC2FF6BD6F7E4FE0F4FF2FE6C2C8C5B
-:10FF5000A3385FE57EE07DCC8DEB9471B3EE3C235E
-:10FF6000A91FFA98BF09F56D2BA832FDB9BA81E334
-:10FF700075E71F093D7159A9771D8EBB9DB9F7A380
-:10FF80007C736A3C5FE1F949FA7A82E7B7D4034BA4
-:10FF90004AF57B71DC6878B56C9AFE406FEFD957F3
-:10FFA00030CAA8505C6BD24C2BE70BF58AE003CE2D
-:10FFB000B576A86F4E027EE646BD9DEFDB057CC39D
-:10FFC0004D7686D18E988ACE48E41BC84708B8FA89
-:10FFD0000CCCAB4C14E387E475F020EAA54180ED2E
-:10FFE000BDF02AD1C7E575D39B9CAFD881AF505CDB
-:10FFF000BA84DB09F25E507C9E46F697AAF76E3F04
-:020000023000CC
-:10000000584DF6FD9EB1C27E28604508B74C8BFB6B
-:10001000BE31F0BCF0C12987C7C0E3E26D8BFBA203
-:10002000381DBD7D4D397EEF6BD913A7B6A39F74E4
-:10003000CC7FC430F15D35CA33F83BCA193A97F327
-:10004000FB58B5CF8AFC2A321EAF19CFE59F8CB37F
-:10005000F682C7EF131E8B38E725E0B1F302787CF8
-:100060001CF135021E9FF88E78FC09F6BF170F01B0
-:10007000D61D3B4DFFB437BC9D3A55FFBC377E1AA9
-:10008000163FE0F943AC96EC6719BFEC015794AF0B
-:1000900039BDF8A5D6ED88457BB6A976C7EBF8DD66
-:1000A000C7A67A6E677726688E12B46FDE55E97B35
-:1000B00056D1FAA3DDED0366B96A3CCF8F3EB0326C
-:1000C000263011C6497772799BEED419E68B5B5DB9
-:1000D000419B3701F5350F43BDCD9E6261BE307F38
-:1000E000CC48DB2192CB9D20C7913E803E39BD2577
-:1000F000F171A47C9EB8F23E8CE4B0F15DC0FBC20D
-:10010000E8E4F5BD25E4874B287E6E05F653ABED9C
-:100110006EC4EF897F05B91936CF24D044C2EB579E
-:10012000390618C699E2CA32BC9F96F603C3FBABE8
-:10013000015FEC14C7E6F702A55E33DD9D6F68979B
-:1001400024E21C3FCC1D6318CFAA7E75EF68A47F04
-:10015000A1478C837FF45D5E93BE60D627CCFAC343
-:10016000E82B8DF75D4658451E9A95E7476C660E5D
-:10017000FA2E05F041FAEE414D284F80E864843DA7
-:10018000B8E36EF4ABCC71683E78D6BCF7EAB4F94C
-:100190004521FFD9E67AEEF76BDAE3D88EF4B05555
-:1001A000D0A5A4AFBC84E37318C9753B43796CA692
-:1001B0005799EF24FD05D29FA0D4723FC3D90959A6
-:1001C0003CEF48F09FCD55DCFE7D4809C42A4338FA
-:1001D0005DBA9343DFA74B638A6F3AA76F3D59948B
-:1001E000AAC8479579AF380EDAD9697C3EF61ACF9E
-:1001F0009B6CFC67ECEF62BE41C29F91911CF25375
-:10020000607EC2CDBC9F6FBAE83758E45BF6E1EB85
-:100210000F4C11F38D8052ADD3857FDA4B650CC640
-:10022000C3A1CC56B438F47F0C513D14684914F185
-:10023000F574114F8F57029C797C4B3E3212D828AF
-:10024000E625B064FE7D91D25F38994AF461DF8182
-:10025000F2E8AE63DA3BC5F0BC39E1C76F4D84E725
-:100260002DEFAA1AFA49EFCAF07D80746D0564F08B
-:10027000915FCB331FCF4DAD70B8A6413FD5B7BD11
-:1002800011E3BB23EDFEFD749EAB6388DE83D00FCC
-:10029000F1616B02D029E22B7ABA4685F281641CA7
-:1002A00023384673A01C0D623BEE6F36F83F23E403
-:1002B0009B90BFD42AEACDCE1DA4BFAF4DB1E317AA
-:1002C0005331BF27B31EF1B25F1CBF7FCB78DC6018
-:1002D00030FE12966F6F7745F66B82BE4670083619
-:1002E0002E4DEB4DEF8A1A47715A02F6C48B8FA33D
-:1002F000ACB9F13A7F206C9D72DF6B9D3B9405ECAD
-:1003000052E667C6384A2DD363474488A304FD0AE2
-:10031000AE73702D8FB30C16FEFA6F1B47A99CC0ED
-:10032000F5C74B8DA3C8FD5E237E9F01882DEE1976
-:10033000533C81CECB125A5F18FC1E277E44B82155
-:100340005004EA3F12F5B77677FCE949F8F5CD5D40
-:100350002FEFC652EA7133C5FB6B877DB90F73B7B8
-:1003600066AE5B21E258C6F8C33560D585FBF9F16E
-:100370007B01E1F599A6F5945A8D7182C94E63FB14
-:10038000A929C6F76583627A9C1BFAE569BF4ACF43
-:10039000FDDE157F0FE3DF9B0A3B07F5C27507E61D
-:1003A000CD61DCC7DD134FC2E3009EDF58597211E7
-:1003B000E28B85F4D2ADBEA5F75702FDAC0539CA74
-:1003C00079B1DB407FA1B847998EF824FDFDD1E8D3
-:1003D000E9B8339BFCFF83EBF7B74FEECBBAE300F2
-:1003E000F7C4791DE3F07B41CE730AEA2183EB5F0A
-:1003F000A1F7D7CD29EE158F72EA0FB44F0EFB8E01
-:10040000608ED56341FB39A7FE557A1E559FEFC913
-:1004100047286F2D47E085CC0BDC8A798100F79C5B
-:100420005AF17DE0B6DEF3DFA43C6C0ECBEFA364A3
-:1004300006B7C2C2C79772AF873F9D71BFAF9CAF6F
-:100440003B2FD0346FB7FC7371F9F7FC24AF36AE95
-:1004500038EC5E86B8C701FB8E98073A5AF8B37B32
-:10046000C963E37667C56B1FE0F8976C7746197729
-:10047000626630E23DA9A9C26FD5191BCC40BF41CD
-:100480006794BF9BF0D094A93F1CD78BBE8B79B3E8
-:1004900008CB68EBFCB679B37522DE24E3AD327F7E
-:1004A00056E6C55E287FF6BBFAE1570A7F40E93879
-:1004B00016310E615EEF6DC23F9E55EA598178118B
-:1004C0002DFE20DB7F30C01ED12F7E6442E4EF0E74
-:1004D000C8FC50586F4AB81D24FBC9BC7CF3786037
-:1004E00017AD1917E60FF436E690BF2FCCDE92F960
-:1004F000B0441F9B851FA29B0ECC7AA1888798F5DC
-:1005000042191F51AAB87F02E8A30DE745BD0BF3BE
-:10051000D2A59D27F34965DE28E685523CEA5BEAD1
-:1005200055DFBB3DD53885F2BA9A5CA5AF7D177B08
-:10053000EADF2718ED29AF93FB1DBC684F0DEF696B
-:100540004F15957A5F447899EDAAA33FFB84F26337
-:10055000C10EDD37EEFBE01326FFD4DC311CBFA556
-:100560009C96FEB4FD432D06BFEB5475D57ECA178D
-:10057000AFE5FE9674BD9DEC34BBD3EE467F8B7524
-:1005800032A7235B1EF3EB3CCE4BFE15995796EC3E
-:100590005C12F1BEA9B41383D24EF4F1FBA99D6F96
-:1005A000F2B86D3CFA5BB06119976BD2DF624B1108
-:1005B000FE16533E76BCC9BF62F6B79C1E27FCB63A
-:1005C000C2DFF288E2BE1B49FD575BA6FC0E41F17B
-:1005D0006F0F2F8E4753FF79FF9A1F0A7FCB834EF1
-:1005E00058DFDE0F8CFE1673FC2B42DC8B9C57838E
-:1005F000C6FF8EE26E12BE926EA53F2BBD9E7FBFE0
-:1006000069AABA5B41FEB2D9C9E1ABA23F2B25E48E
-:10061000CF529EFE53B75F8AEEE3F68893D7BD8E26
-:10062000EBB402C3591FC9BF25E06A8E4725D68B9C
-:100630007BC0DF933F2B79BC11BE050F16DE87DF31
-:10064000352EDA567E18CB51DB6FEB3B17CA92275B
-:10065000EE2BC7F22FAF07B350EF34FBB114047E7B
-:10066000714FF89AE128F1D45B2BF1D46927BAAD28
-:10067000E27034C32955E7789A03780A2A4237FE94
-:10068000752671FA4C9FACBD86FEB5C17956160928
-:100690008FADF5FC7B59128E5B051C936B97909F79
-:1006A000D08CA783DB2E0D3FC79AE0F7EC96C2BB38
-:1006B000116ECF3D5CFE3B2C7FEDBF2D1EE1B6E7FA
-:1006C000F1FB7E28E03780BEA76B82DF03F811E9DB
-:1006D0007E3DE13751E3F6F5E7A5DEB2F100DFAB91
-:1006E0008143A03F64474B81C3180732F2D3D4EF54
-:1006F000C93F15ECE6A7ECED9C4BE0A71F9BFC5314
-:10070000A93E4E37A9BE63449FE9409FB1E8AFAA16
-:10071000E57A24887D7FBC823637E7AF52AE21CBA5
-:10072000B180F0D9EAE271E7087ECA007DEFD7C454
-:1007300087D181138E772057EB107E52DE6DADE5A9
-:1007400071B4DBA678568CEF178AAB3D3F49BF6D7D
-:100750003CDD5FF8D6FEC77FC6FED2FF08784AFBB5
-:100760005701DFF1FBE657813C41FBDF5A1BB4A187
-:100770005CA9A9BF55F142D9E74A4E3FA9695E86F7
-:1007800071FE9EFEBA6002EAED138776E3C37A9C9F
-:1007900047E2C3C895E7EF433F57347C488F92AF99
-:1007A00074617C2835C8D7CDDDF850B7EEB2948B94
-:1007B000C787B809FCFB11DDF820E83FB536F82003
-:1007C000D2AF55E083D5057C0CE0A1221EE485E282
-:1007D0009E921E8222FFC00C9FA06F48943C8415FD
-:1007E0004A492FEBBBE8FC03110F6D12F1506F3D2E
-:1007F000CF97ED5C1933D5987FA0D1BAA739EB9488
-:10080000F03CFE0879B22FE3F9C938A78C6B7E5E05
-:10081000EA79059F4FCCE5E71C8C1E670AE0FD5680
-:10082000403F9709CFDF223C97F70F841E77DB14F8
-:10083000FD6D1C7784DD4F79CEA0EF1DC6765BF78A
-:100840003EC9BFB72BFC90322FEF3BFBCD12ED7EA4
-:10085000BC2F29FD669B13EC3BF0BCE7B3E014FA18
-:10086000CE2FC629D0EFB43186F21A172A6078232A
-:100870005FBCCAFBD1788AEB79281FD75BE170A1F6
-:100880009EDF9C34350DF946CD5A95E47A34FB460B
-:10089000D25B0DF01BA2B77ACE6F5201BF08DF7C8E
-:1008A0000AF19B74E0379CFFE80CF53A2BD29DB31C
-:1008B00027BFD9DC0BFC2F92EF7C83708FC077941D
-:1008C00009C506BE6399F01DF8CE4FC6336E1F8A68
-:1008D000FD633C80F68FF415BE7FB33EDBBD6F2316
-:1008E0007D49BAFB5F4067232744A6B3FC09DF8D2F
-:1008F000CEC662FF087476E504239DE913FE67D235
-:100900005905E1DB05E8ECA3F14CD8B7D71AF48A16
-:10091000CBD5F6733938FFFFE7FCED8357723BFE0A
-:1009200042F9DBF87331FE53733EF73FFCA9FF6BCE
-:10093000FDA9CF4EF81EFCA9AE716EC23FB35FF5A4
-:1009400093D1FABE09BDC495259FB64A3E0DFC1849
-:10095000796F0DF033E4CFA9555D9F3ECFED4D2D5E
-:10096000DE4DFE86D771BC74C1AFCD7C19F4CE3795
-:1009700026FC1DFD0D7F2FBFE14AE167BDD07DFB49
-:100980009502CED1EEDD3709FBBE09C6C07B7A5B8E
-:1009900057DAFDCDB0608FD0AB47D45E773512D932
-:1009A0003BCBEC71C15EEC26F977245A1BBC2F9E21
-:1009B000CC09DF1F8B28B7BAF767D293C3ED26F7B0
-:1009C00025D84D33261AF5646B2DB773AD20EF286B
-:1009D000AEAF9704905FA7FB94764C0DF6A6D42992
-:1009E0002807536B3D940F7FA9717D331E458BF310
-:1009F0007FDF717D73DEC0FF94387FD14461CF9B70
-:100A0000E2FCD2FF6A8ECB8FB0B796917CADB6E098
-:100A10005FC060CD7B3FDE71379EF71C07DDD330B2
-:100A2000E703448BDB8F48B607E3B3A3C7EFA5BF4B
-:100A3000E0115BDDEB68873FD268A1F335E70DE499
-:100A400025F0FCF1B313766DA3FC1FA90F57093EE7
-:100A500053AFD8E9BB8E557EE2335E7D5723C693F4
-:100A6000539DAC1DF5ACB8896EC23F354D273E6332
-:100A7000ADF2125EC9F8444D26BF37172BF04B1D5F
-:100A80005AF7168E9F7448D530BEBD119B02CF48D1
-:100A90004059897AC4180BE545B42975E4F76855BF
-:100AA000DCF4F73F92F25CA41F3D95A4FD7E36AEC8
-:100AB000BF1FFF3B2507A62F49433EB8B6B1310DF6
-:100AC000EF27DE3491F3877BA79FAEA6387A2EE816
-:100AD0007F0A9586BF672BCB1DBA22FEDE929FF25E
-:100AE0001161DD5BA8DF503BF9D954FD81DB900F2C
-:100AF000A8974D25BC6E555C7316E079E5D8498FF3
-:100B000069CE19357B11EC6B5D3F4F59169E6BD248
-:100B100050DA677352FF44D447D70DC8A6F95B1467
-:100B20006F5916F61B6021BA56457C7E5DCE92D772
-:100B3000F0EF8034A55B18DE3B68CB39DD82EDDA5F
-:100B4000C6F03F82635EAFEA32DE93C20F1F21FF21
-:100B500056D3785C5C157171D514572ED51599FF55
-:100B600048718758C1B76A7256CFA6EF2738ED2E65
-:100B700044B2A6846025E1C74A1BC3381DB3B61A28
-:100B8000F4B4BB1B8CDF7F71E619D7D3D27D3F2134
-:100B9000CB8B7C86FE062CDD5F48F2227E20BFE5F3
-:100BA000497FF1BC1E2BEA019BD717E17CFE51FE69
-:100BB000A3FC47192AFF2F0D22483C0080000000AB
-:100BC0001F8B080000000000000BC55B0D701CF5BA
-:100BD000757F7BBBB777279D4E7BD2C93E816C5614
-:100BE000B6446410F25AB68494D8684FDF322EBDF2
-:100BF000387C88C476CED8B8CE34932A4E49EC845B
-:100C00005667EB64C95FB2A414E44C3AD3B34932DB
-:100C10006DF08042661AF33967700821D028811080
-:100C200032930461885B529A310127A2434BDF7BE8
-:100C3000FF5DDDEDEAE4AFB81331CCDFFFDDFFFE91
-:100C40003FDEE7EFBDF73F00F0C00200D90F003AEA
-:100C5000C0A6224F122200E7AA200D95D8F74E9782
-:100C60006941800FE9AF25DB1EE807C8F8B2FD60D7
-:100C7000AD0A660DF0DF87A271CD3B6E5AF3C29FBD
-:100C800073DEE16AB5371D9C3BAF3DAED594001ACB
-:100C9000F2AE03D225AD73E6673A8E4FFE4C866AFC
-:100CA0007DEE7AEEEFEDEF3615AD2F86DAFFBFF170
-:100CB000F3D175A9E90128137D68C47353BB44744B
-:100CC00075A48302820E039D8DE90CFE73424A0CCB
-:100CD00057D2F9C21EE39B30970E762B6B73F897B1
-:100CE0009D5F16D347ECF9710BF2CE801908D12B1A
-:100CF000FC0E69AFE1B63F449628110F3F076BBE6B
-:100D000028C0B31FE2FE8E67F905DA82ECBCF2065A
-:100D100095C72F57FB5E6C5885CF5E918D6FEAD9D2
-:100D200079793F95C00B80FD5D65F6BD62ADFB91A5
-:100D3000232A64ECF1F8FF0933CC749AD8783F2465
-:100D400090BE3FDFF089E2441E39B0DB6569E7F70A
-:100D50006FE09CC07483F437F1DFA95F8C4ABCF864
-:100D600009F13CB5424BEFC7E7FBA5F4FEEB68DCAD
-:100D7000DD82BE361F0A2D3EE05FB40AE9E8B5F811
-:100D8000E4759F0BFF94054C278B38397C58C27350
-:100D900054D1B907ECF974230348A703CBEB56EC05
-:100DA000D7E9FCA3FFF26DDCC791E37BDEFA36BE28
-:100DB0000ED4D68D34E17E0A0C8F21933C7FEAC499
-:100DC0000964170CD5DE334AD36E1D954C0DDFFB3D
-:100DD000B5E03199CEE8974C9A4F39BC90CF13DDEE
-:100DE000EA948309C958504EE71B9380F85268383B
-:100DF000DFFBF49CF3E0FF4788CF2C9F39CF916E47
-:100E000048BDDEC9DAB9747FC5926705C727ED7999
-:100E1000912EE35EFD16A2F3F83E199238E5F82E06
-:100E2000548AAB007E6B4E7E7A3732FD9E412FF3A3
-:100E30006122A6A6251C3F51A4DDDE4BFD328F7139
-:100E40008C898AFFE3B946975DCBE7B2D7FB6C8B01
-:100E5000CEEB8DC51694933EE2B8F2F80D73E5CF54
-:100E6000BDFF4B95BFED668925EFA340F3C3E42D8D
-:100E70001ED227BF35E63A79B27E09ADF7731984E1
-:100E8000DCF441BC682E7D06C91E7C242B27AA25D4
-:100E9000477B23EB7F4CD3CF27CF6A7ACAACACA376
-:100EA00075A08FE8BE2CEADC9F3DEE7316BF7C690F
-:100EB000C87843D4664CA8A376CA94B03DB7E10B7A
-:100EC000DA5A7DFE757C90336F25CD077C6E2F241A
-:100ED0009858C4573387AF7B0AEBEE24BE0CDEACC8
-:100EE00002CB9F9BCE17E8AB4AE6A4142279F80800
-:100EF000CB4712E5A31AE7F1469D72187F72154C95
-:100F000007059F92FCBCDB243E255ABCB376C89FE4
-:100F1000632F41DFFD1B19E7FB6AB7AAEFC77D7E90
-:100F200035BEEDBEDB48CF5F900D89DFEB6C0FEF78
-:100F3000B1D680D109968762CBEFEC3C71EF6BCFD5
-:100F4000138FBAD5D7896EA4C7B37411F6D9F43705
-:100F500066D73BDC747A7829D221359C7FFEBB4A68
-:100F6000F5CF11FD6C3ACF37EFACFDDE7972B27D73
-:100F700065B63F529008C4F09C2341038D00BD3FED
-:100F8000C5EF6115CA65F9FCFC448AB23CBC46FF5A
-:100F9000C4713DEDA616C3BE7C02B7BE1CED6291C6
-:100FA0007ECB7A7CD511797D23D17F6BD0A3C939D3
-:100FB000FA3570D00B99201102D745B95B07D31BC6
-:100FC000D7E338A8F2B29CCB9115FC7C4B515CF175
-:100FD000607B6D6C09AF677FDF03FFA0ECC0E7CBE0
-:100FE000BDDA2B2427A988443BC2E74840DCFA5AE3
-:100FF00005CC10B65D7ACC4F7EADFB095A08A02512
-:101000003C1E21BF54F7D8918A04E975D29CAA41AD
-:10101000FE842D765DEF9B8AB7E17C032FCAC61E46
-:10102000EC8783DBD601CA91F47090EDC400DA79C5
-:101030001FF25D0976BE45CFD79C0568CF91A79674
-:10104000193FB4E7D8BD18CE9CDB6FF3973BC6774A
-:1010500068958EF732984606E9D4155DE61857D4A0
-:10106000B04AA3FDF6E82B1CCF6FAE69767C0FED7E
-:10107000CAE969ECAFC6FF88EF32883EBFAF249C57
-:1010800080FD9CEF15C8E9E3FBB5B1A2C819724A0F
-:1010900037C28DA447C8976307C8FEF4FAD96F0D0D
-:1010A00078E184540CA4FA49A827629BECEF254B05
-:1010B0005E93B14AE693147CF67D96C327A63D84E1
-:1010C000B3E031A827FBFA8F9A7ED28343AEA629DC
-:1010D000F1FB280ABA8E7C4218960CD4F37373691C
-:1010E00009F93929D983FD45382E2A44119EA37167
-:1010F0007ED8FD15310E16D1380D9215D8D70C2893
-:1011000020BE56E03C9F2DE1EF923DD677D788EF89
-:1011100092C52562FEBA7AF6A3990E6C8F82013EC3
-:10112000B63F71044D6445FAB8BD867685CF1F0081
-:10113000A39EFAD530CD760AD92F517F214C6AC2B1
-:10114000C86784DD9E56C267FCC2EEE7D397ACDE6B
-:101150002870C6E6070EBEBDC5FC12E9CDED773698
-:101160009C1777283B9F71E8ED23315DF8C39D5DA7
-:10117000AC27CACE67F9FD4BB1F81E9A8F48EFAF86
-:101180009F4BEF3A350364BF523130923845EAD174
-:10119000B5D1CDC8DFE4A37EA31AAE1C3F2E950FB8
-:1011A00069D00A88AE72DFE5F201D8CF074FF88F19
-:1011B000EE676134D94FFE097CF9F6E5F0C5CD0F35
-:1011C000B8B714A0F9C276F4EB5226202D657A98B0
-:1011D000D1FA2CFDB19F5C66D1ABC4E2872CDA8CCE
-:1011E0006C3D574AE6E70BCD575A92E5CF85F8128A
-:1011F0008DE3FBFA2C7FE43E938967FB691F9C65B6
-:101200007CBB4432985F4BE5B887FA8552C6023DF5
-:1012100069F69B21D0983F57411FB711EFF466C67E
-:10122000C33B7121C2B31FA097CD89C752C1567F5E
-:1012300025D9D71AC5F060BFB6C8134F231DAF56C6
-:101240002043E72B572049F61C9101CF9F7A14BD0C
-:1012500015FA9914BA690F7DB7CB9F4E49D9F5EBB2
-:101260002CBBFDE3A26F69D3B5593A9F26FBB55C51
-:10127000D0C3C3F6673243DF47BBC118D0E7DA33C8
-:101280001C97942D3B45ED267AD1CC744B86B02F1C
-:101290000DFFE07DC219349F82FDEFC512EF923F32
-:1012A000259C1E2C61BB345D48C07A2E2E30095718
-:1012B0006CB6D6E9BD495F1CC77D6E1EF6BD4EF308
-:1012C00041CAE7C405EEEF750972BFB7BF9B952B06
-:1012D000F7F797A907B0B3ECA27040ECE1D5C5D3FE
-:1012E0007970FB2CCE243D29CDFD4EF0498D24187C
-:1012F00077A8A42FA5179EC7EBC22FF63C5E145CFF
-:101300009AC76BE117DB4F6D83B35E65A9B54FA438
-:10131000D716B0FF224CCF4D16FD3E4DFE2A44F4A9
-:10132000C44005CFBD15E22AC9ED5F2184261CBF4C
-:1013300064DFD610E30568D7883E52E663F287D7AC
-:101340005F021D2D3A6DCABCE5D5C92EED2C823742
-:1013500072E337EBFDBB1B3E21E274BFBFCA9F1394
-:101360001F169EF8A09F8CFA9EC2BF7FB105B73EA4
-:10137000F8926CC895F45EE0E60008FF5D487A8A52
-:10138000FB2E7CE2CCFFD0F84217AEA69921675E17
-:101390004FE141C6B3852155679CED92331B47C38E
-:1013A000070207072DEAE5CC2B115EB6E31E9E5718
-:1013B0009ABBEE0D163EC757B10F2F02CFBB713A45
-:1013C000CCE273F13E1854859E609C9971C4C17A39
-:1013D0005E3DB3F76D7F57A6C62B8DDA3CDF5B7C95
-:1013E000A8A5401CEDC2C20A48EFC6FD0E0FEF884B
-:1013F00015627FAC0C748C3061A8F38B12E18DD632
-:101400008810A57093C085B404D8713CFE85FF4355
-:10141000DF5F83EFB755040DDC192C7C1B7132CED6
-:10142000737785DF30F1410AC4FB649347C4934965
-:101430007899F0E8568B3FDE2704CE64DEA01E1EAE
-:101440006C15F86AEB89CFAE23FE8E94DC6A64706B
-:10145000DC56B44FA584C746BD8CE710D73970BFA2
-:10146000AF290707E2FF771FF13AFA5E174E3CD02B
-:101470008A3810E5DBC681F7B702EB19ED8BFCC9A2
-:10148000955A078211B6A73728539E7CF9379B1FC0
-:1014900036FE7EB24CD0D9FB9EA00B06CC3BE8B901
-:1014A000EF3D118FA1010F362C20EF2FE8E76B40A5
-:1014B000FAD0D3F7843FC02F79DF26FE47FB76E3CF
-:1014C000619F0B0FBBF76BF3E1619B3E8DD048F43E
-:1014D000417CCE38C13E8FFB1C4F607CDE8E42F1DA
-:1014E00054BF9FDB4CBFC6EDD3FD516E4FF5EBD023
-:1014F0008E00ECD9FE1A6E9FEB37F8F9F3FD4DDC48
-:10150000DA74984B1F91D7BCC6DAB3523B15273F0C
-:101510007A55BB875561EC5E0FD3ED1CCA27295F56
-:10152000C8A0DC1B8EEFF6A429A4B7E39F8596BC68
-:101530005EEF3B7BD287E347CAC1D883DF2F6CDAEB
-:10154000C672B6E6AC27AB2740714E81234F10839D
-:101550005247BFCD7FB5637C87B6D4F1BE2436CD6C
-:1015600076AA2B7ABD639CCDE77FA2380BF737D6DE
-:101570007E5A23BAF6E82B1DE3947B91FF7514FF86
-:101580007CCC312FC8EB0CB2D3251B9C721872F1A6
-:1015900055DD7EFE38C8E6F3DBADCE78683EFEBA98
-:1015A000E5D5A66BC92C5D455C99A2B812E95AA293
-:1015B00009BADAE71DB1CE6BAFAB3489F35DE9F858
-:1015C0003244F16565BEF8F24D8BCE17882FBB9D76
-:1015D000F1A59BAE178A2F17B439EDCAC5D273D3C4
-:1015E0006291772B7941E6B845EEEE633F583A2594
-:1015F0001B5D64122D5C56443600C76D6A50D3845F
-:1016000033C7603A4AFEFCB0845445792BAD35CAE5
-:10161000C9CE3C14365EE925DCD823F280CFC46EF7
-:101620008F12EE18DC7D348ACE0A9ADB3C6CEF46D2
-:101630006367387FA1E8C0F90B6CCD741E7C628FA4
-:10164000B7F38D8737AA6909C71FB6F28D877B6606
-:10165000F38D5CDF986810F9C68FB6E9569E29199C
-:10166000A578E5AB1B1BCBD95929D8BF81861BAC0C
-:1016700027FB035A88E2E8D4468F46E79257DDFFFE
-:1016800005928F4352DFBE2A8ADFCA3C9C774D8584
-:101690001BCB37E3387913C218EA6F6C7C956CF674
-:1016A0004499BEAF8ABE0F5731FD0657DFEEA775CE
-:1016B00046C20B7A283F32D2E1611EC98433423CD4
-:1016C0004FCDF9E21E771D40268B4BF15BC4935141
-:1016D000C95F11FEC8C9FBDBFCDF1F56393FBBA544
-:1016E000EDC1A3C92A7ECCF66BA15D97D9D8CA7982
-:1016F000E6738427A4F9EB327BAD7CE7ACDF893A53
-:10170000F793671DC605765D82FE743B4F8B7FA9FC
-:101710005B3AD3E447C721DE4DF633193C7F1D44C5
-:10172000099EBF0E325FDD63579BC8A37E99F82EDA
-:10173000EA338E7A89D26DD545ACF8F530E5C349E8
-:101740001E5C75127B1F03D67CA9593972D54D5684
-:10175000ABD67C06E4CB5FFFA9F593FBDB44BDE68B
-:1017600052EB26DF6D03B15F2BDFEDB5F87F9D3CBB
-:10177000B983E4F1CF9DEFFE6EDB95CD77CFAD134E
-:10178000A5595FE0C4D93758AF972DB0F0CBF9EB2E
-:1017900040FB09E823FFC657202EA5FA87D54FDE68
-:1017A00020E675D78502561EE5876D4B45BC45F68C
-:1017B0008498AB188B89AE41E53B490DCF51101C85
-:1017C0008330B6BEC8E624B52D8B75AE0F8D2FF3D2
-:1017D000B0BF1A2F4A1C1DA4FD2F0BE6D58B572D29
-:1017E000FB376CD56F48803DA46F92AD1C90F02004
-:1017F0009F2640F0F9EDB6308F57B4D1A6BB506E9E
-:10180000DE247928E3F3E4ADFF9C6913F59F9CF98E
-:10181000BF41729AB226A77936E33CFF65C923908F
-:10182000E35840C18E58CFAF8F36112EF85D9B26FE
-:10183000DE2B2B0CD287F170FEF57E679D072815F5
-:10184000D398C5470B378879C02FBE3F2C9DED3DFF
-:10185000BD8AF9CAFA44FBA0F7EEFA977BFE408DE9
-:1018600033BE512B9CE33F983D87332E3A344F7D56
-:101870006C51BB90D796C542CE483EF6E4910FB767
-:10188000BEAB94F7A478AA3D6CAD27EC4E50996A94
-:10189000A57827580B06D71495937CDEF893552727
-:1018A000A657919D0F191407297E3495F5D938D183
-:1018B0007DEE0BC5798A02496FFDDC780FE7358B29
-:1018C000EB859F49E6CC774DBB901339371EACA40E
-:1018D0007044BF85EB785407A4FE2E5F6F3E3F5DDA
-:1018E000DD76FEBACE9138C61114A43E7C70DF16A8
-:1018F000ECBFAB79341F8FD1F3D67534AB3F5BD7D8
-:10190000895F5C5D67B4BDA4A7EA52EA3AF3CC3BB9
-:10191000EB8FE7D675DADBF19C6341515F99ADEB54
-:10192000DC1AB9A87C0E587EB9C4B2CB453D561C12
-:10193000B153E238E2E9867F3FB09CE4ACC1CB72A0
-:1019400000072720574FD66DD0BF564A7EE6551F59
-:10195000540BBB66D27C765C6CD34FB5E66F7DF0E2
-:101960000585C68F977B1A793EC8F83C5CEC4EAA79
-:10197000562B53BB5CCDC8C5346F095875F48C44E5
-:10198000CF6348ACDCF86064E6A76DC59427098294
-:1019900041266824A6ED2EA67F501588F04EA59E00
-:1019A000267BDBE62F74D8FF911E55D8D76A715F6E
-:1019B00066FCA4FEB5AD387E68678071D3A10A8F3E
-:1019C000D0AFA4C4F5E40ECD19F78C4F2E1178ECEE
-:1019D000A0D7A07B22C727C5F82DB1C6B4CCB8DBF1
-:1019E0001917F5E8CEB8684B79FD2B841761D0CB79
-:1019F000F978CDC2B537D738E3A4A2CABEE708A7A5
-:101A00006C1A1478786FB464C116B47FBF6AD71D9E
-:101A100071E2E6C1BBB96E34A802D7534736AAAC0F
-:101A20001F23DED78F6C61DC58C0749CD8A8962722
-:101A300072F4A5B4C367DD8B10F803E1656232CFA1
-:101A4000FBD20E617750B0D98FDBF2F2179F117481
-:101A50000E55405A271CD7B3234371E578059E09DC
-:101A6000DF0F46AB7A4ED2FA2FCB40E774CB6165DD
-:101A70004735EBE9AC3F6DF238E8E4F5C5FB687E2D
-:101A8000B81974B26BEDDDD8A73CC00615283FE04D
-:101A90008BFE2D9FB704FB01ECFBBB47930AF6FDC1
-:101AA000558995848B9FD975C7702C42FE4EE8B737
-:101AB0006FC3B6F82768FC2A2F04687FA04B51DA61
-:101AC0005F52DC6770EBC3DED4F7DB894F7B0D8997
-:101AD00059B4A967FD76BEB7142960DC34EA8D6F6E
-:101AE000667B749B5F4BB20F9CE638C2FB151F9060
-:101AF000DC4DECFA4D19E1EF1FB58BBA664077C6A5
-:101B0000D77E1865BFBDDA9CDA40DFAD6E52A9E220
-:101B1000014F379F61BE4D34F80C1FEE63A259622E
-:101B20003AFFA1C19BA6759E52A7645AF7A93FE050
-:101B3000DA95F9F43BBF5ED97AE41E3FD2B4DE4FAA
-:101B400072B117A66E25FA2467449ECA3D2EDE2187
-:101B5000FCD5DED46D350AE7B354AEB72B670DB3B1
-:101B600018670FCFC4FF9972AFC97645C449E59E87
-:101B7000A484F30DF5887B194345896192E721948C
-:101B80007B8E9322E23ED27879C4D89FB3DE78F37D
-:101B9000ED3564CF5E6C0830BE1F38F5377711BE67
-:101BA0006F95DFFEEEC3145755A8CCCF216FDFAB86
-:101BB0001407251B02BCDF538B54F0933D88DCF5E2
-:101BC00000C5D9707C03E4CAEB44B7D0D3890AA11D
-:101BD000F7D2C31B380E189764A6B359764C223C33
-:101BE000E6EBB6F34E22CF14B3CCD9C48647380FF8
-:101BF00075558FC8A3C6BAAD7C931C4CB25CDE1879
-:101C00007880F4DF54BC8EF878CD5967BC7C952B76
-:101C10005E76E7A3FEB7DDCA475879275B2E43D629
-:101C2000988926CB4EAFF2A5851CF6956BB573F55A
-:101C3000FBDF2CFC3CD5EFE77B643FEDD7B81F32D0
-:101C4000DFD95D8AF3BCDC1FE5E77FB9FAA894FB16
-:101C5000DDC8AADBFC3ADB93E928CDEBB6236EB9ED
-:101C6000D8DF5EE0F027F63E8B9A5BC5FDBBB36C18
-:101C700091614D70BA8D7D234C0573F17EA65FDCBA
-:101C8000737BDADAE729DAA78FF264627FCFF5EBAC
-:101C9000DC3EDF5FC3EDC60E10F500DB3E5C83F675
-:101CA00001E9D05E21FA640F88FF2591BB384FE629
-:101CB0008B2A1AE9BBBF623423E5D88789A2BE5FAD
-:101CC000DC4D76BF2CC8F2E83ED79A0E4FDE736D1E
-:101CD0006ADEC176E71CAE43F4473BB39DED10DAF4
-:101CE000055E77837A27EFC344BBC476A1EF6B7799
-:101CF000B05DF002C9B9DB0E9424857E277491BFD4
-:101D0000B3EF09CDDA055C278DEB3C8D769DFA4368
-:101D10006807689DA1E6D7FF9AD6FDC3FB057C2F17
-:101D20006A62E32B6C175E3C8736FB0ADA055B0FB1
-:101D30005F3B153B961BCF67F9BCFE8E13821E1AC4
-:101D400008BAF6C6F3C48997CA67302F0EC7A495A0
-:101D5000E93B45DD51653ACC5B774C7A0C4A0B0C7C
-:101D60004C2ADD56DD11A8EE68D71F73EA8E05CE2A
-:101D7000BAA39A4E31BE495B75C7DBD78ABAA35A5C
-:101D8000301DCCEEC3AE370ED2A3F26C7DFEAE8E0C
-:101D9000C4AE8E866C9D5197441DFCA598F9657A5A
-:101DA0000E9112F6FFEE3AA55D8F4478272572EA70
-:101DB0009B75F8DC5F92AD7FB9EB99F6BD8C3A75F7
-:101DC000FAD801A4CBC09D7EC60FF6FE061EFDE824
-:101DD000AB8948F63E805DEFB4EB9976DD13F73DB5
-:101DE00096BB6F7802D8EEC063FEA3E4DFDCFBFD98
-:101DF0005E2C717F47599E7D5F647D711D58F32372
-:101E0000EE227D7ECDA2A33DEE414B1F97AB22BFBC
-:101E10000D2195E39DD607832013CE2E528F915E20
-:101E20006C86E90EA2EF4058E0BCD4212FDBC9E359
-:101E30001D3AF3AF4C35F93E44D99703C66E9C2644
-:101E400075520B51FEA9A7DD3CDEC1FB18BD753DE7
-:101E5000ED03713BD9BB5F57DF17E17A3FDD7B2A8A
-:101E6000A6F8CF584C7990173AF2DF576A597C762A
-:101E70003DAF5BE4018ACF5201E339BE57FCA4C2F7
-:101E8000F3F5E014663DDF5F6A574B681E713F75DE
-:101E900020789AF9D552ED5BC179BDA2FC71E0B30F
-:101EA0001D226E5D8B73A938CF675A13DFA77D5350
-:101EB000AE34CA722CE2BB17C84E0AFB75AFA7310D
-:101EC0009B072B96132FD078382E29E41F7D96DCA4
-:101ED000D871E23BADE68BC477E48749EBDBF78052
-:101EE000ECF55FB2F890EC307F4AE35EB7D6A9D349
-:101EF0009231D2C3BA04CA83C4FAE3AAC30BB9703D
-:101F0000CBAB2D6FB375784B0E254DD46B51AE5EB8
-:101F1000E7FD3EA59FF448546F4F1C3D40DF5E66D1
-:101F2000BDFBEA36F32DDA77716BFC3F69DE5FEFBC
-:101F3000BA83EF055FEC3D8E96C57D51AAE30F0590
-:101F4000046E7E286638ECDDA24EC19F459D022FAF
-:101F50005D8F3233C5F74B0DBEF70DB09D71B46D7B
-:101F60009F46FB138FBF599DFD3ED50F93540F9A8B
-:101F70006F1FDE7D3B38AF3B50D1EA27FB83F6ADC8
-:101F800098FA43156634771FA92221E7C945226FC5
-:101F900041F9B464CE7DF2924E99CFD35601199295
-:101FA0001D5F50D4DD7CA8B83AFA1F9FD9C4F78BC7
-:101FB000F1F924A518AEEAD4455C1E31C0A478B36B
-:101FC000220EA4DF3E2DFB3DD551DB2AFAF8BEE5FB
-:101FD0007CF3C851FBFB047F7F53A7C6F3AA118F84
-:101FE000230F7021BAB9E9324874AB9E9F6EEA455F
-:101FF000D34DE89D9B5E8D16BD9E097F91CF071F37
-:10200000B4B19EF9343C27B6AB3B857D9183262441
-:102010008AC846C51141529EBD0FA80E6DD359D630
-:10202000049D65AD8FBFF3551890B881E89260BAF2
-:10203000B8E9807602C84EFCF0D12311C2A72DD892
-:102040008F0AFB013E6CBFDE21F862EBE93AF849EA
-:1020500050E4BF9DFEC26D4FEDF6212BFFEC7E2EAE
-:10206000750584FDD0C141F722EBF70BC786EB194C
-:102070001FA0FF4CD2BD98CEF2EA02EA5FE93AA275
-:10208000BB7EE8AE13BAEB8359B931FDB4CF77B557
-:10209000D3C98FE79117BB3D60E9DB60BF3FAFDE7F
-:1020A0001D407D27FE0D359B49AA1BED0D4F47595D
-:1020B0006E4EBEC5B858794136085F2A8AE073E78C
-:1020C000A269E663579309546F3AD0DFFB9DDC7930
-:1020D000BFDE9AF84A27CA49A13669D23C41C824D2
-:1020E000C9FFAC2D35FBF2E1A621CB8EBCD31ADFA4
-:1020F0004DDFD1B575E2FF9B31730FF52FD66ECD55
-:10210000A74F8A4DBB4BD6A7D3429F9A76B03E8D40
-:1021100054F431CE1AF9894C482A8B232D7D1A6943
-:102120003EC3FA6EEB55DAB63F4D422F288F40FE84
-:102130003B5461B2DDF896A54F0AEA09E993CFD284
-:10214000A790961D4FF9F136A2333E572AA6F9BB48
-:102150005093A57FA44F41BA3F0C8C038650EF28C3
-:102160002FE2D6AF962AE1379F684D3CD449F862FA
-:10217000D17ACECB0F55FCBE94F18B25FF59BC5BB9
-:10218000CFFEFCDCB0C7207DA823005D9FD503FBFC
-:10219000DCAB6764C8206BD6CC48DCDE3453C86D3A
-:1021A000CB4C805B73A694DBD84C98DBD699ABB94B
-:1021B0006D9B29E7B67D06F56025EAC34C25B79DE2
-:1021C00033D773DB35B38CDBEE99953CAE67660590
-:1021D000B76B673EC6EDCD33CD629D1A71AE3CFA4A
-:1021E0004065B02BA00F46128A480F3EF32ADB77DA
-:1021F0004DE53B4AA97023D7897CCA34EBC3B1268D
-:1022000061EFBB82824F6E7D78A735F1AB7CFA30EF
-:102210008B6F15D088FE2A587F2EFC80F8E737F4A4
-:10222000BD8D7BD5A8C97286F8E40CF1F37271C23A
-:102230002CCE5CAC321EB571E6C822C49995599C6F
-:1022400039D42CE2B2D4211FC76F5B2471BFECEAF2
-:10225000B6C47FB37E82C813256EF56B849B53E1B1
-:10226000CE6890F27A7B65A07C01E2900F789F4A5D
-:102270005CDC67BD487D7E3326ECBE3DBE0E4E7BEA
-:10228000FA2E01C7FC9AFED93CBF5D28B95C3FEB32
-:102290006D13764113762155D137CC7569975DB0B2
-:1022A000FD2CD2C3611796765976C1D2F3920AE11A
-:1022B0002F4BC82E207D9675D976C1E967151B87EF
-:1022C00074DB38C4B20BDDE23BC4ED0E3F8BECF6A1
-:1022D000430E2E46395ADE950787B03FCFF1730380
-:1022E00055D531FA2D41F82CC4483C4333FA5A23D2
-:1022F0008FDF4969F5AC07279536C8CDAF5CB29E34
-:10230000856DBF63B2DF718FB3F56DE8648F38A759
-:10231000E5874EE2F9CD1C7DEBD2843F42FF73335B
-:102320009DD3AD6F2D8BCD443CCF3E3FD925F0FEE4
-:102330008FD658B81771A511647C9F17377C92F817
-:10234000D7207EA7F118DA9F8EEE644AD159CF3F8D
-:1023500049EBAE6E9F92290F7453D3E8CB541241D0
-:102360003DFD5457C3E5EB6953AB55EFDB592A2EBE
-:102370003B5BED85E4DFC645B61EB8C73D5469F644
-:10238000E6A3C7B3163D06863D3D74E1CF968B9319
-:10239000CA52C63F79ECAD695C117B7B71F8E324CE
-:1023A000FA41E2FB79F0C7817CFC9F0F7F8C77CDEF
-:1023B000E28F31E2534BADC01FCF76C179E39BCBA7
-:1023C000C615B1D34CB7CBC5150F769D1F577CA74B
-:1023D0004BD84D459B66FB11BA4C5CE1B613881F88
-:1023E000FE95E96308BF6BFFDE842F50E6F82FB43B
-:1023F000338FD338C20D7479EC58B03529B11EC46F
-:102400009FA4E7A3E61296A32BA50F88137FD09570
-:10241000D3BF905E5CF4B8C98D9C07B4EB997F0C78
-:1024200084EA283FB2D32FDA2F15848E513BD62F62
-:10243000F2D07F0C2C4E53DE6CCC0B5C3F18940A10
-:102440008C63223FBA9C7F5F037D37527BA6CBAE65
-:10245000CBFF9DA35E1AD6B63DFE6669BEFD88FB26
-:10246000BD948AFF90EF8157689C3FB7E84169208F
-:10247000F6CFD5058CFF00614B538EDD4F75AC1345
-:102480007172A59FEB79322867281F3F4C6BF1FED4
-:102490007AB98E19B0FC212849FDE3BC5F9107B5DC
-:1024A0007FF7B76FF5FA627109793B8FB7E57F5F08
-:1024B00070D4AFD53AF4DDF1BB6E772BAF38A5B54C
-:1024C000E17EC77485EBAE078D4880EB2615227B35
-:1024D000EE5FE489A7F3E8E9B5DDB3F722785F6141
-:1024E0006B5FBE0E11AFCDB7DEFE7EE73DAB82DA8D
-:1024F000B849FEC45FD91727BAF9174524CAABCE2D
-:10250000D2BB5BB2EE69189916A4F7B0A587053562
-:1025100093190FD139BC6D25D1D65F938633344FD3
-:10252000ED24BC41FEA2D2DF9B6FDFD759FB1EF624
-:1025300026E38493862B15AE5F0E57E6F72F25DD35
-:10254000C2FEFA17EDE0F1B048E1FAB37B9CD22D60
-:10255000E4689FDAC7758CA145F7F37DB721FA21AE
-:10256000CD47D1EEFD70E681DDF8FC50FFF6C7DF08
-:10257000F4929C26B8DD77ED7E8DEE711EAAF76889
-:1025800094870BFB337EFA7D6678B5C87396B4E307
-:10259000B8DC7855AE08909D0DADC27972E2D031AD
-:1025A000D002B4EEBE906D1FA7FDC23E0A792AB2DA
-:1025B000C68EAC1275A9917576FE5FF02FFB7E7CFE
-:1025C000BBB82FA7EAC079685197E2D49E4EF7674F
-:1025D000EBC374AE324DD4A30E59F23568E5D9DDA4
-:1025E0007439B4788AFDC9A13553BDE43F429ADFFE
-:1025F000E826B93EEEDCD7DEE66907DE1869386DFD
-:10260000EDDFBD3F21F7CAD36F093B69E1FE90F1D1
-:102610007BC659F63DAEAED5420F8BAD7BF4C5916E
-:10262000B849F3EDBEF6B749AA131D2EB7EF167CD5
-:10263000DE790F03A6191787565B7539F96DBEFF52
-:102640000BB78A7B12F63D6F35A23AF202A5AEFBBC
-:102650005921571FE40DE7BDCFB6F397479F3F952C
-:10266000C3CFCF773BEF835FE8FB3FF6A79F3F8564
-:102670007E6E6CD5F9F5CFE6D3E1FE266E6D39B4EA
-:10268000E5324C47AC9FFFFBB1703C6FBDE5114B91
-:102690004FDCF2EA96D3625F9CFDFEE81AE73CF756
-:1026A000597A7E9F358FBA18CA090F8D86855E8E3E
-:1026B00006A0F7913CE77AAC5BE5F159B977E28285
-:1026C000A2CBC5052B5AADB8A284F56D6C55EB7342
-:1026D0002437EF915EE4D82777DEDCC6054A8FC049
-:1026E000A5CF845589FCBA169C66BC3CEBD72D1C43
-:1026F000E0F6EB7E6FB297F4CF5FA9DA7689ED470B
-:102700006577E01BC920FB0329D70F1ECADCC9F37C
-:10271000865D797388387F87B2B71B984E61DDB2CA
-:102720002FDD8AB887356A42EE3D9A31CFDB336FB1
-:10273000E8E2DF1FD838A292DE1F9CE2DFC7C03D6F
-:1027400090BBFEDE964DFC7B880BF1DDDE17DDCB0A
-:10275000CAD59B4BD58B976DBD084080F4E21CDC3D
-:10276000CB757418ED76F821AE282C601320FEF09E
-:10277000984AA365C7A4ACBE409755DF4E883A3D42
-:102780005198BE33ACCFCAE99604C5D790E1DF1D9E
-:10279000DAF6E51CFC92D74D3E2D49B3B8E96A0C38
-:1027A000DFE9F78C4B690B9A875AF7FE9780C1CF08
-:1027B000AB20CEEDB5D0C76D0D8C727B1D4C725B1E
-:1027C0000B53DCD6C1596E57802ED3222BC1948176
-:1027D000AF5E26B87F2324B96D86C4FB742774B01E
-:1027E0006CDB0AB257EFBBE864D3398FBE332EB42B
-:1027F000E961D3FD2132D20D17E66B2A2CEC6F5B19
-:10280000D314E3D7A2A01DFF0A39B7E7990FC7BABF
-:1028100071979F70D7CAB9727021DC65E3C4FF035A
-:1028200008E97101B048000000000000000000004D
-:102830000000001800000000000000000000004040
-:102840000000000000000000000000280000000060
-:102850000000000000000010000000000000000068
-:102860000000002000000000000000000000001038
-:102870000000000000000000000000080000000050
-:102880000000000000000000000000000000000048
-:102890000000000000000000000000000000000038
-:1028A0000000000000000000000000000000000028
-:1028B0000000000000000000000000000000000018
-:1028C0000000000000000000000000000000000008
-:1028D00000000000000000000000000000000000F8
-:1028E00000000000000000000000000000000000E8
-:1028F00000000000000000000000000000000000D8
-:1029000000000000000000000000000000000000C7
-:1029100000000000000000000000000000000000B7
-:1029200000000000000000000000000000000000A7
-:102930000000000000000000000000000000000097
-:102940000000000000000000000000000000000087
-:102950000000000000000000000000000000000077
-:102960000000000000000000000000000000000067
-:102970000000000000000000000000000000000057
-:102980000000000000000000000000000000000047
-:102990000000000000000000000090000010000097
-:1029A0000000000800009008001000000000000275
-:1029B00000009000001000000000001000009DA822
-:1029C000000000000000000880000000000000007F
-:1029D0000000000080000000000000000000000077
-:1029E000800000000000000000000000000091A036
-:1029F0000000000000000008000093C00001000477
-:102A000000000001000093C8000000000000000268
-:102A1000000093D00000000000000008000093D4E4
-:102A20000000000000000002000094980000000078
-:102A300000000008000093D8000800000000000813
-:102A400000009B3800400000000000400000941887
-:102A50000008000000000008000094580008000072
-:102A600000000008000094A800C8000000000098C2
-:102A700000009638009800000000002800009678BA
-:102A800000980000000000280000C0000540003051
-:102A9000000005400000CB200008000000000001FD
-:102AA0000000CB2100080000000000010000200809
-:102AB00000100000000000100000200000000000D6
-:102AC0000000000800009D600008000000000002F7
-:102AD00000009DA0000000000000000100000000B8
-:102AE00000000000000000000000000000000000E6
-:102AF00000000000000000000000000000000000D6
-:102B000080000000000000000000000080000000C5
-:102B10000000000000000000800000000000000035
-:102B20000000000080000000000000000000000025
-:102B30008000000000000000000000008000000095
-:102B40000000000000000000800000000000000005
-:102B500000000000800000000000000000000000F5
-:102B60008000000000000000000000008000000065
-:102B700000000000000000008000000000000000D5
-:102B800000000000800000000000000000000000C5
-:102B900080000000000000000000000000000000B5
-:102BA0000000000000000000000000000000000025
-:102BB0000000000000000000000000000000000015
-:102BC0000000000000000000000000000000000005
-:102BD0000000000000000000800000000000000075
-:102BE0000000000080000000000000000000000065
-:102BF0008000000000000000000000000000000055
-:102C00000000000000000000800000000000000044
-:102C10000000000080000000000000000000000034
-:102C20008000000000000000000000000000000024
-:102C30000000000000000000000000000000000094
-:102C40000000000000000000000000000000000084
-:102C50000000000000000000000000000000000074
-:102C60000000000000000000000000000000000064
-:102C700000000000000012C800800000000000807A
-:102C80000000000100000000000000000000A000A3
-:102C9000071000000000071000001EC80000000020
-:102CA000000000080000AEC000080000000000089E
-:102CB0000000AE4000080000000000080000AE80E8
-:102CC00000080000000000080000200800100000BC
-:102CD00000000010000020000000000000000008BC
-:102CE0000000A01007100040000000400000AF40AE
-:102CF00000080000000000010000AF4100080000D3
-:102D00000000000100001ED00000000000000001D3
-:102D100000001ED8000000000000000200001EDAC3
-:102D20000000000000000002000012B000080000D7
-:102D3000000000088000000000000000000000000B
-:102D40008000000000000000000000008000000083
-:102D500000000000000000008000000000000000F3
-:102D600000000000800000000000000000000000E3
-:102D70008000000000000000000000008000000053
-:102D800000000000000000008000000000000000C3
-:102D900000000000800000000000000000000000B3
-:102DA0000000000000000000000000000000000023
-:102DB0000000000000000000000000000000000013
-:102DC0000000000000000000000000000000000003
-:102DD0000000000000000000000000008000000073
-:102DE0000000000000000000800000000000000063
-:102DF00000000000000000000000000000000000D3
-:102E000080000000000000000000000080000000C2
-:102E10000000000000000000800000000000000032
-:102E20000000000080000000000000000000000022
-:102E30000000B00000180000000000180000B300FF
-:102E400000400000000000400000B300004000020D
-:102E5000000000010000B30100400002000000007B
-:102E600000008000004000000000004080000000E2
-:102E7000000000000000000000008000000800408A
-:102E8000000000040000800400080040000000046E
-:102E90000000BB0000280000000000280000BC402B
-:102EA00000100000000000100000880000800000FA
-:102EB0000000008000008800000800800000000280
-:102EC00000008C000020000000000020000020080E
-:102ED00000100000000000100000200000000000B2
-:102EE00000000008000011080008000000000008B1
-:102EF000000011680008000000000008000011A890
-:102F00000008000000000008000012700008000027
-:102F10000000000100001271000800000000000124
-:102F200000008D00001000040000000400001320C9
-:102F300000300018000000100000132800300018B6
-:102F400000000002800000000000000000000000FF
-:102F5000800000000000000000000000000011E8F8
-:102F600000000000000000018000000000000000E0
-:102F700000000000800000000000000000000000D1
-:102F80008000000000000000000000008000000041
-:102F900000000000000000008000000000000000B1
-:102FA00000000000800000000000000000000000A1
-:102FB0000000000000000000000000000000000011
-:102FC0000000000000000000000000000000000001
-:102FD00000000000000000000000000000000000F1
-:102FE00080000000000000000000000080000000E1
-:102FF00000000000000000000000000000000000D1
-:103000000000000000008308008000000000008035
-:103010000000000100000000000000000000200887
-:103020000010000000000010000020000000000060
-:103030000000000800008D100008000000000008DB
-:1030400000008D700008000000000008000084509F
-:10305000046000280000046000008EA0000800004A
-:103060000000000100008EA1000800000000000127
-:1030700000008408000800000000000800008448E8
-:10308000000000000000000100008DF400080000B6
-:103090000000000200008DF60008000000000002A1
-:1030A00000008E04001000000000000480000000FA
-:1030B0000000000000000000800000000000000090
-:1030C0000000000080000000000000000000000080
-:1030D00000000000000000000000000000000000F0
-:1030E00000000000000000000000000000000000E0
-:1030F00000000000000000000000000000000000D0
-:1031000080000000000000000000000080000000BF
-:1031100000000000000000000000000000000000AF
-:10312000000000008000000000000000000000001F
-:10313000800000000000000000000000800000008F
-:1031400000000000000000008000000000000000FF
-:1031500000000000000030000040000000000008F7
-:1031600000003008004000000000002800003390FC
-:1031700001C0001000000008000032000020000024
-:1031800000000020000037200000000000000008C0
-:103190000000102006200038000000080000A000F9
-:1031A000000000000000200000003EA90000000018
-:1031B0000000000100003EC8000000000000000206
-:1031C00000001C4000E00008000000088000000033
-:1031D00000000000000000000000400000080000A7
-:1031E0000000000100004001000800000000000194
-:1031F00000004040000800040000000200004060A1
-:103200000008000400000004000040000008000066
-:10321000000000040000400400080000000000045A
-:10322000000040400000000000000008000040488E
-:103230000000000000000008000080000000000006
-:1032400000000010000050400001000400000001D8
-:1032500000005000000000000000002000005008A6
-:1032600000100000000000040000500C00100000DE
-:1032700000000001000052C7000000000000000133
-:10328000000052C6000000000000000100003000F5
-:103290000030001800000004000030040030001866
-:1032A0000000000400003008003000180000000298
-:1032B0000000300A00300018000000020000300C4E
-:1032C00000300018000000010000300D0030001830
-:1032D000000000010000300E003000180000000166
-:1032E000000030100030001800000004000030140E
-:1032F00000300018000000040000500001000080B1
-:1033000000080004000050040100008000080004D0
-:103310000000000A000000000000000000005068EB
-:1033200001000080000000010000506901000080E1
-:10333000000000010000506C01000080000000024D
-:103340000000506E0100008000000002000050707C
-:1033500001000080000000040000507401000080A3
-:103360000000000400005066010000800000000220
-:103370000000506401000080000000010000506067
-:103380000100008000000002000050620100008087
-:103390000000000200005050010000800000000406
-:1033A000000050540100008000000004000050584C
-:1033B00001000080000000040000505C010000805B
-:1033C000000000040000507C0100008000000001AB
-:1033D0000000507D01000080000000010000401846
-:1033E00000100000000000040000409000100000E9
-:1033F00000000004000040980010000000000004DD
-:103400000000411000000000000000020000411216
-:103410000000000000000002000041140000000055
-:103420000000000200004116000000000000000241
-:103430000000604000080000000000020000604240
-:1034400000080000000000020000604400080000C6
-:103450000000000400006080000800000000000878
-:10346000000060C00040000800000008000060008C
-:1034700000080000000000020000600200080000D8
-:1034800000000001000060040008000000000002CD
-:103490000000634000080000000000080000638096
-:1034A0000008000000000004000063840008000021
-:1034B00000000001000063C00008000000000002DE
-:1034C000000063C400080000000000020000640067
-:1034D0000008000000000004000070000010000060
-:1034E0000000000400007004001000000000000450
-:1034F00000007008001000000000000400007000D0
-:103500000008000000000002000070020008000037
-:10351000000000010000700400080000000000022C
-:10352000000070400008000000000002000070442D
-:1035300000080000000000020000704600080000C3
-:1035400000000002000076480008000000000008AB
-:10355000000070800008000000000002000070847D
-:10356000000800000000000200007688000800004B
-:10357000000000080000804000080000000000017A
-:1035800000008041000800000000000100008042AF
-:103590000008000000000001000080430008000057
-:1035A0000000000100008000000800000000000290
-:1035B00000008002000800000000000100008004FC
-:1035C0000008000000000002000080C000080000A9
-:1035D00000000002000080C200080000000000029D
-:1035E000000080C40008000000000002000080808D
-:1035F00000080000000000010000808100080000B9
-:1036000000000001000080820008000000000001AE
-:10361000000080830008000000000001000080849A
-:103620000008000000000001000080850008000084
-:10363000000000010000808600080000000000017A
-:1036400000006000000800000000000200006002AE
-:1036500000080000000000010000600400080000F5
-:10366000000000020000604200C0001800000002DC
-:103670000000604000C00018000000020000604C24
-:1036800000C00018000000080000604400C00018DE
-:10369000000000080000605700C000180000000192
-:1036A0000000605400C000180000000200006056D6
-:1036B00000C0001800000001000066400008000083
-:1036C00000000008000066800008000000000008FC
-:1036D000000066C000080000000000080000D94299
-:1036E00000180000000000020000DE4000000000A2
-:1036F000000000000000E0000000000000000004E6
-:103700000000DD4000000000000000040000DD4477
-:1037100000000000000000040000DD480000000080
-:10372000000000040000DD4C000000000000000468
-:103730000000DD5000000000000000040000DD5427
-:1037400000000000000000040000DD580000000040
-:10375000000000040000DD40000000000000002028
-:103760000000DA0000000000000000040000DA00A1
-:1037700000000000000000680000BB6000000000C6
-:10378000000000000000D000000000000000000465
-:103790000000B0C000000000000000040000B0C441
-:1037A00000000000000000040000B0C8000000009D
-:1037B000000000040000B0C0000000000000001085
-:1037C0000000D6B000000000000000040000D6B4E5
-:1037D00000000000000000040000D6B80000000057
-:1037E000000000040000D6BC00000000000000043F
-:1037F0000000D6B000000000000000100000D34818
-:1038000000000000000000080000D3580000000085
-:103810000000008000000010000000000000000018
-:103820000000D35800000000000000080000000065
-:0838300006020900000000007F
-:00000001FF
diff --git a/firmware/bnx2x/bnx2x-e2-6.2.9.0.fw.ihex b/firmware/bnx2x/bnx2x-e2-6.2.9.0.fw.ihex
deleted file mode 100644
index 8405e719e7fb..000000000000
--- a/firmware/bnx2x/bnx2x-e2-6.2.9.0.fw.ihex
+++ /dev/null
@@ -1,15473 +0,0 @@
-:1000000000005310000000680000070C000053803F
-:100010000000318000005A90000000B000008C18F1
-:100020000000C13400008CD0000000D800014E0850
-:100030000000F26400014EE800000074000241502C
-:1000400000005250000241C8000000B40002942099
-:10005000000121EC000294D800000FFC0003B6C898
-:10006000000000040003C6C8020400480000000F9E
-:1000700002040054000000450204005C0000000679
-:100080000204007000000004020400780000000078
-:100090000204007C121700000204008022170000F6
-:1000A00002040084321700000604008800000005E6
-:1000B0000204009C12150000020400A0221500009A
-:1000C000020400A432150000060400A80000000489
-:1000D000020400B802100000020400BC001000007E
-:1000E000020400C010100000020400C42010000030
-:1000F000020400C830100000020400CC40100000D0
-:10010000060400D000000003020400DC0010000020
-:10011000020400E012140000020400E422140000B3
-:10012000020400E832140000020400EC4214000053
-:10013000060400F000000003010401240000000098
-:1001400001040128000000000104012C000000004F
-:100150000104013000000000020401D00000890603
-:1001600002040258000000360204025C000000365F
-:10017000020402600810000002040264081000007B
-:1001800002040004000000FF02040008000000FF59
-:100190000204000C000000FF02040010000000FF39
-:1001A000020400140000007F02040018000000FF99
-:1001B0000204001C000000FF02040020000000FFF9
-:1001C000020400240000003E020400280000000099
-:1001D0000204002C0000003F020400300000003F39
-:1001E000020400340000003F020400380000003F19
-:1001F0000204003C0000003F020400400000003FF9
-:10020000020400440000003F020404CC000000018E
-:1002100002042008000002110204200C0000020069
-:10022000020420100000020402042014000002193D
-:100230000204201C0000FFFF020420200000FFFF3A
-:10024000020420240000FFFF020420280000FFFF1A
-:1002500002042038000000200604203C0000000FAB
-:1002600002042078000000210604207C0000000F1A
-:10027000020420B800000001060420BC0000000FAA
-:10028000020420F800000001060420FC0000003FEA
-:10029000020421F800000001060421FC0000000F08
-:1002A0000204223807FFFFFF0204223C0000007F07
-:1002B0000204224007FFFFFF020422440000003F27
-:1002C00001042248000000000104224C000000004C
-:1002D000010422500000000001042254000000002C
-:1002E00001042258000000000104225C000000000C
-:1002F00001042260000000000104226400000000EC
-:1003000001042268000000000104226C00000000CB
-:1003100001042270000000000104227400000000AB
-:1003200001042278000000000104227C000000008B
-:10033000020422C00000FFFF020422C40000FFFFED
-:10034000020422C80000FFFF020422CC0000FFFFCD
-:100350000C042000000003E80A0420000000000153
-:100360000B042000000000030605400000000D0003
-:100370000205004400000020020500480000003291
-:1003800002050090021500200205009402150020CD
-:1003900002050098000000300205009C08100000D3
-:1003A000020500A000000036020500A40000003095
-:1003B000020500A800000031020500B000000004A2
-:1003C000020500B400000005020500C000000000A6
-:1003D000020500C400000004020500D40000000172
-:1003E00002050114000000010205011C00000001CB
-:1003F00002050120000000020205020400000001C5
-:100400000205020C0000004002050210000000403E
-:100410000205021C00000020020502200000001C52
-:100420000205022400000020060502400000000A28
-:1004300004050280002000000205005000000007B3
-:1004400002050054000000070205005800000000EB
-:100450000205005C000000080205006000000001C9
-:100460000605006400000003020500D80000000635
-:100470000205000400000001020500080000000160
-:100480000205000C00000001020500100000000140
-:100490000205001400000001020500180000000120
-:1004A0000205001C00000001020500200000000100
-:1004B00002050024000000010205002800000001E0
-:1004C0000205002C000000010205003000000001C0
-:1004D00002050034000000010205003800000001A0
-:1004E0000205003C00000001020500400000000180
-:1004F000020500E00000000D020500E80000000019
-:10050000020500F000000000020500F800000000F5
-:10051000020500E40000002D020500EC00000020B0
-:10052000020500F400000020020500FC000000208D
-:10053000020500E00000001D020500E800000010B8
-:10054000020500F000000010020500F80000001095
-:10055000020500E40000003D020500EC0000003050
-:10056000020500F400000030020500FC000000302D
-:10057000020500E00000004D020500E80000004018
-:10058000020500F000000040020500F800000040F5
-:10059000020500E40000006D020500EC00000060B0
-:1005A000020500F400000060020500FC000000608D
-:1005B000020500E00000005D020500E800000050B8
-:1005C000020500F000000050020500F80000005095
-:1005D000020500E40000007D020500EC0000007050
-:1005E000020500F400000070020500FC000000702D
-:1005F0000406100002000020020600DC00000001DA
-:100600000406020000030220020600DC00000000D5
-:100610000718040000AD0000081807D800050223E1
-:10062000071C000029920000071C8000312A0A657F
-:10063000071D000034A216B0071D80002E7A23D9B2
-:10064000071E000003502F78081E07F03F02022506
-:10065000021800BC0000003001180000000000007B
-:10066000011800040000000001180008000000004C
-:100670000118000C0000000001180010000000002C
-:100680000118001400000000021800200000000102
-:1006900002180024000000020218002800000003D5
-:1006A0000218002C000000000218003000000004B6
-:1006B0000218003400000001021800380000000099
-:1006C0000218003C00000001021800400000000475
-:1006D0000218004400000000021800480000000159
-:1006E0000218004C00000003021800500000000037
-:1006F0000218005400000001021800580000000415
-:100700000218005C000000000218006000000001F8
-:1007100002180064000000030218006800000000D6
-:100720000218006C000000010218007000000004B4
-:100730000218007400000000021800780000000495
-:100740000218007C00000003061800800000000270
-:10075000021800A400007FFF021800A8000003FF99
-:1007600002180224000000000218023400000000F9
-:100770000218024C00000000021802E4000000FF12
-:100780000618100000000400021B8BC000000001CE
-:10079000021B800000000034021B80400000001893
-:1007A000021B80800000000C021B80C000000020A3
-:1007B0000C1B8300000864700A1B830000000157B3
-:1007C0000B1B83000000055F0A1B83400000000034
-:1007D0000C1B8340000002260B1B8340000000011D
-:1007E000021B838000086470021B83C00000022685
-:1007F000021B1480000000010A1B1480000000008E
-:10080000021B944000000001061B944800000002F7
-:10081000061A1000000002B3041A1ACC00010227C5
-:10082000061A1AD000000008061A2008000000C8A6
-:10083000061A200000000002041A1BF8009002288B
-:10084000061A371800000004061A371000000002CC
-:10085000061A500000000002061A500800000004AA
-:10086000061A501800000004061A50280000000460
-:10087000061A503800000004061A50480000000410
-:10088000061A505800000004061A506800000004C0
-:10089000061A507800000002041A52C0000202B882
-:1008A000061A405000000006041A4068000202BA0E
-:1008B000041A4040000402BC041A8000000102C077
-:1008C000061A800400000003041A8010000102C10F
-:1008D000061A801400000003041A8020000102C2DE
-:1008E000061A802400000003041A8030000102C3AD
-:1008F000061A803400000003041A8040000102C47C
-:10090000061A804400000003041A8050000102C54A
-:10091000061A805400000003041A8060000102C619
-:10092000061A806400000003041A8070000102C7E8
-:10093000061A807400000003041A8080000102C8B7
-:10094000061A808400000003041A8090000102C986
-:10095000061A809400000003041A80A0000102CA55
-:10096000061A80A400000003041A80B0000102CB24
-:10097000061A80B400000003041A80C0000102CCF3
-:10098000061A80C400000003041A80D0000102CDC2
-:10099000061A80D400000003041A80E0000102CE91
-:1009A000061A80E400000003041A80F0000102CF60
-:1009B000061A80F400000003041A8100000102D02E
-:1009C000061A810400000003041A8110000102D1FC
-:1009D000061A811400000003041A8120000102D2CB
-:1009E000061A812400000003041A8130000102D39A
-:1009F000061A813400000003041A8140000102D469
-:100A0000061A814400000003041A8150000102D537
-:100A1000061A815400000003041A8160000102D606
-:100A2000061A816400000003041A8170000102D7D5
-:100A3000061A817400000003041A8180000102D8A4
-:100A4000061A818400000003041A8190000102D973
-:100A5000061A819400000003041A81A0000102DA42
-:100A6000061A81A400000003041A81B0000102DB11
-:100A7000061A81B400000003041A81C0000102DCE0
-:100A8000061A81C400000003041A81D0000102DDAF
-:100A9000061A81D400000003041A81E0000102DE7E
-:100AA000061A81E400000003041A81F0000102DF4D
-:100AB000061A81F400000003041A8200000102E01B
-:100AC000061A820400000003041A8210000102E1E9
-:100AD000061A821400000003041A8220000102E2B8
-:100AE000061A822400000003041A8230000102E387
-:100AF000061A823400000003041A8240000102E456
-:100B0000061A824400000003041A8250000102E524
-:100B1000061A825400000003041A8260000102E6F3
-:100B2000061A826400000003041A8270000102E7C2
-:100B3000061A827400000003041A8280000102E891
-:100B4000061A828400000003041A8290000102E960
-:100B5000061A829400000003041A82A0000102EA2F
-:100B6000061A82A400000003041A82B0000102EBFE
-:100B7000061A82B400000003041A82C0000102ECCD
-:100B8000061A82C400000003041A82D0000102ED9C
-:100B9000061A82D400000003041A82E0000102EE6B
-:100BA000061A82E400000003041A82F0000102EF3A
-:100BB000061A82F400000003041A8300000102F008
-:100BC000061A830400000003041A8310000102F1D6
-:100BD000061A831400000003041A8320000102F2A5
-:100BE000061A832400000003041A8330000102F374
-:100BF000061A833400000003041A8340000102F443
-:100C0000061A834400000003041A8350000102F511
-:100C1000061A835400000003041A8360000102F6E0
-:100C2000061A836400000003041A8370000102F7AF
-:100C3000061A837400000003041A8380000102F87E
-:100C4000061A838400000003041A8390000102F94D
-:100C5000061A839400000003041A83A0000102FA1C
-:100C6000061A83A400000003041A83B0000102FBEB
-:100C7000061A83B400000003041A83C0000102FCBA
-:100C8000061A83C400000003041A83D0000102FD89
-:100C9000061A83D400000003041A83E0000102FE58
-:100CA000061A83E400000003041A83F0000102FF27
-:100CB000061A83F400000003041A840000010300F4
-:100CC000061A840400000003041A841000010301C2
-:100CD000061A841400000003041A84200001030291
-:100CE000061A842400000003041A84300001030360
-:100CF000061A843400000003041A8440000103042F
-:100D0000061A844400000003041A845000010305FD
-:100D1000061A845400000003041A846000010306CC
-:100D2000061A846400000003041A8470000103079B
-:100D3000061A847400000003041A8480000103086A
-:100D4000061A848400000003041A84900001030939
-:100D5000061A849400000003041A84A00001030A08
-:100D6000061A84A400000003041A84B00001030BD7
-:100D7000061A84B400000003041A84C00001030CA6
-:100D8000061A84C400000003041A84D00001030D75
-:100D9000061A84D400000003041A84E00001030E44
-:100DA000061A84E400000003041A84F00001030F13
-:100DB000061A84F400000003041A850000010310E1
-:100DC000061A850400000003041A851000010311AF
-:100DD000061A851400000003041A8520000103127E
-:100DE000061A852400000003041A8530000103134D
-:100DF000061A853400000003041A8540000103141C
-:100E0000061A854400000003041A855000010315EA
-:100E1000061A855400000003041A856000010316B9
-:100E2000061A856400000003041A85700001031788
-:100E3000061A857400000003041A85800001031857
-:100E4000061A858400000003041A85900001031926
-:100E5000061A859400000003041A85A00001031AF5
-:100E6000061A85A400000003041A85B00001031BC4
-:100E7000061A85B400000003041A85C00001031C93
-:100E8000061A85C400000003041A85D00001031D62
-:100E9000061A85D400000003041A85E00001031E31
-:100EA000061A85E400000003041A85F00001031F00
-:100EB000061A85F400000003041A860000010320CE
-:100EC000061A860400000003041A8610000103219C
-:100ED000061A861400000003041A8620000103226B
-:100EE000061A862400000003041A8630000103233A
-:100EF000061A863400000003041A86400001032409
-:100F0000061A864400000003041A865000010325D7
-:100F1000061A865400000003041A866000010326A6
-:100F2000061A866400000003041A86700001032775
-:100F3000061A867400000003041A86800001032844
-:100F4000061A868400000003041A86900001032913
-:100F5000061A869400000003041A86A00001032AE2
-:100F6000061A86A400000003041A86B00001032BB1
-:100F7000061A86B400000003041A86C00001032C80
-:100F8000061A86C400000003041A86D00001032D4F
-:100F9000061A86D400000003041A86E00001032E1E
-:100FA000061A86E400000003041A86F00001032FED
-:100FB000061A86F400000003041A870000010330BB
-:100FC000061A870400000003041A87100001033189
-:100FD000061A871400000003041A87200001033258
-:100FE000061A872400000003041A87300001033327
-:100FF000061A873400000003041A874000010334F6
-:10100000061A874400000003041A875000010335C4
-:10101000061A875400000003041A87600001033693
-:10102000061A876400000003041A87700001033762
-:10103000061A877400000003041A87800001033831
-:10104000061A878400000003041A87900001033900
-:10105000061A879400000003041A87A00001033ACF
-:10106000061A87A400000003041A87B00001033B9E
-:10107000061A87B400000003041A87C00001033C6D
-:10108000061A87C400000003041A87D00001033D3C
-:10109000061A87D400000003041A87E00001033E0B
-:1010A000061A87E400000003041A87F00001033FDA
-:1010B000061A87F400000003041A880000010340A8
-:1010C000061A880400000003041A88100001034176
-:1010D000061A881400000003041A88200001034245
-:1010E000061A882400000003041A88300001034314
-:1010F000061A883400000003041A884000010344E3
-:10110000061A884400000003041A885000010345B1
-:10111000061A885400000003041A88600001034680
-:10112000061A886400000003041A8870000103474F
-:10113000061A887400000003041A8880000103481E
-:10114000061A888400000003041A889000010349ED
-:10115000061A889400000003041A88A00001034ABC
-:10116000061A88A400000003041A88B00001034B8B
-:10117000061A88B400000003041A88C00001034C5A
-:10118000061A88C400000003041A88D00001034D29
-:10119000061A88D400000003041A88E00001034EF8
-:1011A000061A88E400000003041A88F00001034FC7
-:1011B000061A88F400000003041A89000001035095
-:1011C000061A890400000003041A89100001035163
-:1011D000061A891400000003041A89200001035232
-:1011E000061A892400000003041A89300001035301
-:1011F000061A893400000003041A894000010354D0
-:10120000061A894400000003041A8950000103559E
-:10121000061A895400000003041A8960000103566D
-:10122000061A896400000003041A8970000103573C
-:10123000061A897400000003041A8980000103580B
-:10124000061A898400000003041A899000010359DA
-:10125000061A899400000003041A89A00001035AA9
-:10126000061A89A400000003041A89B00001035B78
-:10127000061A89B400000003041A89C00001035C47
-:10128000061A89C400000003041A89D00001035D16
-:10129000061A89D400000003041A89E00001035EE5
-:1012A000061A89E400000003041A89F00001035FB4
-:1012B000061A89F400000003041A8A000001036082
-:1012C000061A8A0400000003041A8A100001036150
-:1012D000061A8A1400000003041A8A20000103621F
-:1012E000061A8A2400000003041A8A3000010363EE
-:1012F000061A8A3400000003041A8A4000010364BD
-:10130000061A8A4400000003041A8A50000103658B
-:10131000061A8A5400000003041A8A60000103665A
-:10132000061A8A6400000003041A8A700001036729
-:10133000061A8A7400000003041A8A8000010368F8
-:10134000061A8A8400000003041A8A9000010369C7
-:10135000061A8A9400000003041A8AA00001036A96
-:10136000061A8AA400000003041A8AB00001036B65
-:10137000061A8AB400000003041A8AC00001036C34
-:10138000061A8AC400000003041A8AD00001036D03
-:10139000061A8AD400000003041A8AE00001036ED2
-:1013A000061A8AE400000003041A8AF00001036FA1
-:1013B000061A8AF400000003041A8B00000103706F
-:1013C000061A8B0400000003041A8B10000103713D
-:1013D000061A8B1400000003041A8B20000103720C
-:1013E000061A8B2400000003041A8B3000010373DB
-:1013F000061A8B3400000003041A8B4000010374AA
-:10140000061A8B4400000003041A8B500001037578
-:10141000061A8B5400000003041A8B600001037647
-:10142000061A8B6400000003041A8B700001037716
-:10143000061A8B7400000003041A8B8000010378E5
-:10144000061A8B8400000003041A8B9000010379B4
-:10145000061A8B9400000003041A8BA00001037A83
-:10146000061A8BA400000003041A8BB00001037B52
-:10147000061A8BB400000003041A8BC00001037C21
-:10148000061A8BC400000003041A8BD00001037DF0
-:10149000061A8BD400000003041A8BE00001037EBF
-:1014A000061A8BE400000003041A8BF00001037F8E
-:1014B000061A8BF400000003041A8C00000103805C
-:1014C000061A8C0400000003041A8C10000103812A
-:1014D000061A8C1400000003041A8C2000010382F9
-:1014E000061A8C2400000003041A8C3000010383C8
-:1014F000061A8C3400000003041A8C400001038497
-:10150000061A8C4400000003041A8C500001038565
-:10151000061A8C5400000003041A8C600001038634
-:10152000061A8C6400000003041A8C700001038703
-:10153000061A8C7400000003041A8C8000010388D2
-:10154000061A8C8400000003041A8C9000010389A1
-:10155000061A8C9400000003041A8CA00001038A70
-:10156000061A8CA400000003041A8CB00001038B3F
-:10157000061A8CB400000003041A8CC00001038C0E
-:10158000061A8CC400000003041A8CD00001038DDD
-:10159000061A8CD400000003041A8CE00001038EAC
-:1015A000061A8CE400000003041A8CF00001038F7B
-:1015B000061A8CF400000003041A8D000001039049
-:1015C000061A8D0400000003041A8D100001039117
-:1015D000061A8D1400000003041A8D2000010392E6
-:1015E000061A8D2400000003041A8D3000010393B5
-:1015F000061A8D3400000003041A8D400001039484
-:10160000061A8D4400000003041A8D500001039552
-:10161000061A8D5400000003041A8D600001039621
-:10162000061A8D6400000003041A8D7000010397F0
-:10163000061A8D7400000003041A8D8000010398BF
-:10164000061A8D8400000003041A8D90000103998E
-:10165000061A8D9400000003041A8DA00001039A5D
-:10166000061A8DA400000003041A8DB00001039B2C
-:10167000061A8DB400000003041A8DC00001039CFB
-:10168000061A8DC400000003041A8DD00001039DCA
-:10169000061A8DD400000003041A8DE00001039E99
-:1016A000061A8DE400000003041A8DF00001039F68
-:1016B000061A8DF400000003041A8E00000103A036
-:1016C000061A8E0400000003041A8E10000103A104
-:1016D000061A8E1400000003041A8E20000103A2D3
-:1016E000061A8E2400000003041A8E30000103A3A2
-:1016F000061A8E3400000003041A8E40000103A471
-:10170000061A8E4400000003041A8E50000103A53F
-:10171000061A8E5400000003041A8E60000103A60E
-:10172000061A8E6400000003041A8E70000103A7DD
-:10173000061A8E7400000003041A8E80000103A8AC
-:10174000061A8E8400000003041A8E90000103A97B
-:10175000061A8E9400000003041A8EA0000103AA4A
-:10176000061A8EA400000003041A8EB0000103AB19
-:10177000061A8EB400000003041A8EC0000103ACE8
-:10178000061A8EC400000003041A8ED0000103ADB7
-:10179000061A8ED400000003041A8EE0000103AE86
-:1017A000061A8EE400000003041A8EF0000103AF55
-:1017B000061A8EF400000003041A8F00000103B023
-:1017C000061A8F0400000003041A8F10000103B1F1
-:1017D000061A8F1400000003041A8F20000103B2C0
-:1017E000061A8F2400000003041A8F30000103B38F
-:1017F000061A8F3400000003041A8F40000103B45E
-:10180000061A8F4400000003041A8F50000103B52C
-:10181000061A8F5400000003041A8F60000103B6FB
-:10182000061A8F6400000003041A8F70000103B7CA
-:10183000061A8F7400000003041A8F80000103B899
-:10184000061A8F8400000003041A8F90000103B968
-:10185000061A8F9400000003041A8FA0000103BA37
-:10186000061A8FA400000003041A8FB0000103BB06
-:10187000061A8FB400000003041A8FC0000103BCD5
-:10188000061A8FC400000003041A8FD0000103BDA4
-:10189000061A8FD400000003041A8FE0000103BE73
-:1018A000061A8FE400000007041A62C0002003BF7C
-:1018B000061A1AF000000042061AAF0000000008E5
-:1018C000061AE00000000540061AD0000000007271
-:1018D000061AD24800000010061AD6B000000020F8
-:1018E000061AD47000000090061AD46800000002A6
-:1018F000061AA000000001C4061A30000000001003
-:10190000061A308000000010061A31000000001096
-:10191000061A318000000010061A33000000001281
-:10192000061A339000000070061AD4580000000216
-:10193000061AD34800000002061AD35800000020FF
-:10194000061AA710000001C4061A3040000000105B
-:10195000061A30C000000010061A314000000010C6
-:10196000061A31C000000010061A334800000012A9
-:10197000061A355000000070061AD46000000002FC
-:10198000061AD35000000002061AD3D80000002027
-:10199000021AAE2000000000061A500000000002EB
-:1019A000061A508000000012041A4000000203DFF3
-:1019B000041A63C0000203E1061A7000000000046C
-:1019C000061A320000000008021AAE2400000000CF
-:1019D000061A501000000002061A50C8000000123B
-:1019E000041A4008000203E3041A63C8000203E576
-:1019F000061A701000000004061A322000000008C9
-:101A0000021AAE2800000000061A50200000000252
-:101A1000061A511000000012041A4010000203E7D9
-:101A2000041A63D0000203E9061A702000000004C3
-:101A3000061A324000000008021AAE2C0000000016
-:101A4000061A503000000002061A51580000001219
-:101A5000041A4018000203EB041A63D8000203EDD5
-:101A6000061A703000000004061A326000000008F8
-:101A7000021AAE3000000000061A504000000002BA
-:101A8000061A51A000000012041A4020000203EFC1
-:101A9000041A63E0000203F1061A7040000000041B
-:101AA000061A328000000008021AAE34000000005E
-:101AB000061A505000000002061A51E800000012F9
-:101AC000041A4028000203F3041A63E8000203F535
-:101AD000061A705000000004061A32A00000000828
-:101AE000021AAE3800000000061A50600000000222
-:101AF000061A523000000012041A4030000203F7A8
-:101B0000041A63F0000203F9061A70600000000472
-:101B1000061A32C000000008021AAE3C00000000A5
-:101B2000061A507000000002061A527800000012D7
-:101B3000041A4038000203FB041A63F8000203FD94
-:101B4000061A707000000004061A32E00000000857
-:101B50000200A2A4000002090200A270000000001E
-:101B60000200A274000000000200A2700000000049
-:101B70000200A274000000000200A2700000000039
-:101B80000200A274000000000200A2700000000029
-:101B90000200A27400000000020100B40000000175
-:101BA000020100B800000001020100CC00000001A9
-:101BB000020100D000000001020100DC0000000171
-:101BC0000201010000000001020101040000000107
-:101BD0000201007C003000000201008400000028A7
-:101BE0000201008C0000000002010130000000042E
-:101BF0000201025C00000001020103280000000055
-:101C0000020160580000FFFF020160700000000741
-:101C10000201055400000030020100C40000000170
-:101C2000020100F800000001020100F000000001C4
-:101C3000020100800030000002010088000000283E
-:101C400002010090000000000201013400000004C5
-:101C5000020102DC000000010201032C0000000070
-:101C60000201605C0000FFFF0201607400000007D9
-:101C70000201056400000030020100C800000001FC
-:101C8000020100FC00000001020100F4000000015C
-:101C9000020C100000000028020C200800000211B5
-:101CA000020C200C00000200020C201000000204B4
-:101CB000020C201C0000FFFF020C20200000FFFF90
-:101CC000020C20240000FFFF020C20280000FFFF70
-:101CD000020C203800000000020C203C00000037FD
-:101CE000020C204000000021020C204400000020D3
-:101CF000060C20480000001D020C20BC0000000162
-:101D0000060C20C00000003F020C21BC00000001B6
-:101D1000020C21C000000001020C21C400000001DF
-:101D2000060C21C80000001C020C223807FFFFFF30
-:101D3000020C223C0000007F020C224007FFFFFF44
-:101D4000020C22440000003F010C22480000000069
-:101D5000010C224C00000000010C22500000000089
-:101D6000010C225400000000010C22580000000069
-:101D7000010C225C00000000010C22600000000049
-:101D8000010C226400000000010C22680000000029
-:101D9000010C226C00000000010C22700000000009
-:101DA000010C227400000000010C227800000000E9
-:101DB000010C227C00000000020C22D80000FFFF72
-:101DC000020C22DC0000FFFF020C22E00000FFFFFB
-:101DD000020C22E40000FFFF0C0C2000000003E8CE
-:101DE0000A0C2000000000010B0C20000000000382
-:101DF000020C400800001011020C400C0000100002
-:101E0000020C401000001004020C401400001021CD
-:101E1000020C401C0000FFFF020C40200000FFFFEE
-:101E2000020C40240000FFFF020C40280000FFFFCE
-:101E3000020C403800000046020C403C0000000C40
-:101E4000060C404000000002020C40480000001850
-:101E5000020C404C000000F0060C40500000001F37
-:101E6000020C40CC00000001060C40D00000003AFB
-:101E7000020C41B800000001060C41BC0000000348
-:101E8000020C41C800000001020C41CC000000011E
-:101E9000060C41D00000001A020C423807FFFFFF79
-:101EA000020C423C0000007F020C424007FFFFFF93
-:101EB000020C42440000003F010C424800000000B8
-:101EC000010C424C00000000010C425000000000D8
-:101ED000010C425400000000010C425800000000B8
-:101EE000010C425C00000000010C42600000000098
-:101EF000010C426400000000010C42680000000078
-:101F0000010C426C00000000010C42700000000057
-:101F1000010C427400000000010C42780000000037
-:101F2000010C427C00000000010C42800000000017
-:101F3000020C42D80000FFFF020C42DC0000FFFF51
-:101F4000020C42E00000FFFF020C42E40000FFFF31
-:101F50000C0C4000000003E80A0C400000000001E7
-:101F60000B0C400000000003060D400000000A00BA
-:101F7000020D004400000032020D008C021500200A
-:101F8000020D009002150020020D009408100000C0
-:101F9000020D009800000036020D00A000000000B5
-:101FA000020D00A400000004020D00A800000004BF
-:101FB000060D00AC00000002020D00B80000000297
-:101FC000020D00C000000001020D00C80000000268
-:101FD000020D00CC00000002020D015C00000001B7
-:101FE000020D016400000001020D01680000000202
-:101FF000020D020400000001020D020C000000208E
-:10200000020D021000000040020D0214000000400A
-:10201000020D022000000003020D0224000000183F
-:10202000060D028000000012040D0300001803FFDB
-:10203000060D03600000000C020D004C00000001C2
-:10204000020D005000000002020D005400000000CC
-:10205000020D005800000008060D005C000000049E
-:10206000020D00C400000004020D00040000000185
-:10207000020D000800000001020D000C000000012C
-:10208000020D001000000001020D0014000000010C
-:10209000020D001800000001020D001C00000001EC
-:1020A000020D002000000001020D002400000001CC
-:1020B000020D002800000001020D002C00000001AC
-:1020C000020D003000000001020D0034000000018C
-:1020D000020D003800000001020D003C000000016C
-:1020E000020D011400000009020D011C0000000A8D
-:1020F000020D012400000000020D012C0000000070
-:10210000020D013400000000020D013C0000000B34
-:10211000020D014400000000020D0118000000291A
-:10212000020D01200000002A020D012800000020FD
-:10213000020D013000000020020D013800000020D7
-:10214000020D01400000002B020D0148000000209C
-:10215000020D011400000019020D011C0000001AFC
-:10216000020D012400000010020D012C00000010DF
-:10217000020D013400000010020D013C0000001BA4
-:10218000020D014400000010020D0118000000398A
-:10219000020D01200000003A020D0128000000306D
-:1021A000020D013000000030020D01380000003047
-:1021B000020D01400000003B020D0148000000300C
-:1021C000020D011400000049020D011C0000004A2C
-:1021D000020D012400000040020D012C000000400F
-:1021E000020D013400000040020D013C0000004BD4
-:1021F000020D014400000040020D011800000069BA
-:10220000020D01200000006A020D0128000000609C
-:10221000020D013000000060020D01380000006076
-:10222000020D01400000006B020D0148000000603B
-:10223000020D011400000059020D011C0000005A9B
-:10224000020D012400000050020D012C000000507E
-:10225000020D013400000050020D013C0000005B43
-:10226000020D014400000050020D01180000007929
-:10227000020D01200000007A020D0128000000700C
-:10228000020D013000000070020D013800000070E6
-:10229000020D01400000007B020D014800000070AB
-:1022A000060E200000000800020E004C0000003264
-:1022B000020E009402150020020E00980215002064
-:1022C000020E009C00000030020E00A0081000006A
-:1022D000020E00A400000036020E00A8000000302C
-:1022E000020E00AC00000031020E00B4000000033A
-:1022F000020E00B800000000020E00C40000000042
-:10230000020E00CC00000006020E00D80000000102
-:10231000020E014400000001020E014C0000000109
-:10232000020E015000000002020E02040000000133
-:10233000020E020C00000040020E021000000040DD
-:10234000020E021C00000004020E02200000002009
-:10235000020E02240000000E020E02280000001BE4
-:10236000060E030000000012040E0280001B04177A
-:10237000060E02EC00000005020E00540000000CE6
-:10238000020E00580000000C020E005C000000006D
-:10239000020E006000000010020E00640000001039
-:1023A000060E006800000003020E00DC00000003BF
-:1023B000020E000400000001020E000800000001EF
-:1023C000020E000C00000001020E001000000001CF
-:1023D000020E001400000001020E001800000001AF
-:1023E000020E001C00000001020E0020000000018F
-:1023F000020E002400000001020E0028000000016F
-:10240000020E002C00000001020E0030000000014E
-:10241000020E003400000001020E0038000000012E
-:10242000020E003C00000001020E0040000000010E
-:10243000020E004400000001020E01100000000F17
-:10244000020E011800000000020E01200000000032
-:10245000020E012800000000020E01140000002FEF
-:10246000020E011C00000020020E012400000020CA
-:10247000020E012C00000020020E01100000001FBF
-:10248000020E011800000010020E012000000010D2
-:10249000020E012800000010020E01140000003F8F
-:1024A000020E011C00000030020E0124000000306A
-:1024B000020E012C00000030020E01100000004F3F
-:1024C000020E011800000040020E01200000004032
-:1024D000020E012800000040020E01140000006FEF
-:1024E000020E011C00000060020E012400000060CA
-:1024F000020E012C00000060020E01100000005FBF
-:10250000020E011800000050020E012000000050D1
-:10251000020E012800000050020E01140000007F8E
-:10252000020E011C00000070020E01240000007069
-:10253000020E012C000000700730040000D60000DD
-:10254000083007D80005043207340000322B0000A1
-:1025500007348000314B0C8B0735000038C518DE7E
-:10256000073580002F90271007360000268F32F5A0
-:102570000836716031D40434023000BC00000030F1
-:1025800001300000000000000130000400000000E5
-:1025900001300008000000000130000C00000000C5
-:1025A00001300010000000000130001400000000A5
-:1025B0000230002000000001023000240000000270
-:1025C00002300028000000030230002C0000000050
-:1025D000023000300000000402300034000000012E
-:1025E00002300038000000000230003C0000000112
-:1025F00002300040000000040230004400000000EF
-:1026000002300048000000010230004C00000003CE
-:1026100002300050000000000230005400000001B1
-:1026200002300058000000040230005C000000008E
-:10263000023000600000000102300064000000036E
-:1026400002300068000000000230006C0000000151
-:10265000023000700000000402300074000000002E
-:1026600002300078000000040230007C000000030B
-:102670000630008000000002023000A400007FFF4E
-:10268000023000A8000003FF023002240000000016
-:1026900002300234000000000230024C0000000052
-:1026A000023002E40000FFFF0630200000000800B6
-:1026B00002338BC000000001023380000000001ACA
-:1026C000023380400000004E023380800000001082
-:1026D000023380C0000000200C33830000086470C7
-:1026E0000A338300000001570B3383000000055FAD
-:1026F0000A338340000000000C33834000000226B0
-:102700000B338340000000010233838000086470B3
-:10271000023383C00000022602331480000000014F
-:102720000A3314800000000006328000000001021D
-:1027300006322008000000C8063220000000000217
-:1027400004328520008F04360632875C00000009C1
-:1027500006323EB00000000606323ED00000000205
-:1027600006323E800000000A04323EA8000204C582
-:1027700006323E00000000200632500000000940F2
-:102780000632400000000004043294C0000204C776
-:1027900006324110000000020632D0000000007036
-:1027A0000632DB00000000D40632DEA0000000028A
-:1027B0000632E00000000800063324000000011883
-:1027C0000632100000000188063250000000002090
-:1027D00006325100000000200632520000000020A6
-:1027E0000632530000000020063254000000002092
-:1027F000063255000000002006325600000000207E
-:102800000632570000000020063258000000002069
-:10281000063259000000002006325A000000002055
-:1028200006325B000000002006325C000000002041
-:1028300006325D000000002006325E00000000202D
-:1028400006325F0000000020063284F00000000223
-:1028500004328500000204C9063285080000000227
-:102860000632DE90000000020633286000000118E6
-:102870000632162000000188063250800000002039
-:1028800006325180000000200632528000000020F5
-:1028900006325380000000200632548000000020E1
-:1028A00006325580000000200632568000000020CD
-:1028B00006325780000000200632588000000020B9
-:1028C000063259800000002006325A8000000020A5
-:1028D00006325B800000002006325C800000002091
-:1028E00006325D800000002006325E80000000207D
-:1028F00006325F8000000020063284F800000002EB
-:1029000004328510000204CB063285180000000254
-:102910000632DE98000000020232845000000000FF
-:102920000632401000000002023284540000000011
-:1029300006324020000000020232845800000000ED
-:1029400006324030000000020232845C00000000C9
-:1029500006324040000000020232846000000000A5
-:102960000632405000000002023284640000000081
-:10297000063240600000000202328468000000005D
-:1029800006324070000000020232846C0000000039
-:10299000063240800000000207200400007300009F
-:1029A00008200780001004CD072400002AE400005E
-:1029B0000724800027670ABA0824D35063FC04CF99
-:1029C000022000BC000000300120000000000000D8
-:1029D00001200004000000000120000800000000A9
-:1029E0000120000C00000000012000100000000089
-:1029F000012000140000000002200020000000015F
-:102A00000220002400000002022000280000000331
-:102A10000220002C00000000022000300000000412
-:102A200002200034000000010220003800000000F5
-:102A30000220003C000000010220004000000004D1
-:102A400002200044000000000220004800000001B5
-:102A50000220004C00000003022000500000000093
-:102A60000220005400000001022000580000000471
-:102A70000220005C00000000022000600000000155
-:102A80000220006400000003022000680000000033
-:102A90000220006C00000001022000700000000411
-:102AA00002200074000000000220007800000004F2
-:102AB0000220007C000000030620008000000002CD
-:102AC000022000A400007FFF022000A8000003FFF6
-:102AD0000220022400000000022002340000000056
-:102AE0000220024C00000000022002E40000FFFF70
-:102AF000062020000000080002238BC00000000117
-:102B00000223800000000010022380400000001219
-:102B10000223808000000030022380C00000000EED
-:102B20000C238300000864700A238300000001570F
-:102B30000B2383000000055F0A2383400000000090
-:102B40000C238340000002260B2383400000000179
-:102B50000223838000086470022383C000000226E1
-:102B600002231480000000010A23148000000000EA
-:102B7000062210000000004206222008000000C8C3
-:102B800006222000000000020622B00000000330F0
-:102B90000622F400000000530422F54C000104D189
-:102BA0000622F550000000030422F55C000104D267
-:102BB0000622F560000000030422F56C000104D336
-:102BC0000622F570000000030422F57C000104D405
-:102BD0000622F580000000030422F58C000104D5D4
-:102BE0000622F590000000030422F59C000104D6A3
-:102BF0000622F5A0000000030422F5AC000104D772
-:102C00000622F5B0000000030422F5BC000104D840
-:102C10000622F5C0000000460622E2000000044043
-:102C200004221240009004D906223000000000C0A7
-:102C30000622670000000100062290000000040048
-:102C400004226B0800200569062211F0000000062E
-:102C50000422120800060589062212200000000244
-:102C600006224000000005C00622C0000000000649
-:102C70000422C0180006058F0622C0300000000A9A
-:102C80000422C058000605950622C0700000000A04
-:102C90000422C0980006059B0622C0B00000000A6E
-:102CA0000422C0D8000605A10622C0F00000000AD8
-:102CB0000422C118000605A70622C1300000000A40
-:102CC0000422C158000605AD0622C1700000000AAA
-:102CD0000422C198000605B30622C1B00000000A14
-:102CE0000422C1D8000605B90622C1F00000000A7E
-:102CF0000422C218000605BF0622C2300000000AE6
-:102D00000422C258000605C50622C2700000000A4F
-:102D10000422C298000605CB0622C2B00000000AB9
-:102D20000422C2D8000605D10622C2F00000000A23
-:102D30000422C318000605D70622C3300000000A8B
-:102D40000422C358000605DD0622C3700000000AF5
-:102D50000422C398000605E30622C3B00000000A5F
-:102D60000422C3D8000605E90622C3F00000000AC9
-:102D70000422C418000605EF0622C4300000000A31
-:102D80000422C458000605F50622C4700000000A9B
-:102D90000422C498000605FB0622C4B00000000A05
-:102DA0000422C4D8000606010622C4F00000000A6E
-:102DB0000422C518000606070622C5300000000AD6
-:102DC0000422C5580006060D0622C5700000000A40
-:102DD0000422C598000606130622C5B00000000AAA
-:102DE0000422C5D8000606190622C5F00000000A14
-:102DF0000422C6180006061F0622C6300000000A7C
-:102E00000422C658000606250622C6700000000AE5
-:102E10000422C6980006062B0622C6B00000000A4F
-:102E20000422C6D8000606310622C6F00000000AB9
-:102E30000422C718000606370622C7300000000A21
-:102E40000422C7580006063D0622C7700000000A8B
-:102E50000422C798000606430622C7B00000000AF5
-:102E60000422C7D8000606490622C7F00000000A5F
-:102E70000422C8180006064F0622C8300000000AC7
-:102E80000422C858000606550622C8700000000A31
-:102E90000422C8980006065B0622C8B00000000A9B
-:102EA0000422C8D8000606610622C8F00000000A05
-:102EB0000422C918000606670622C9300000000A6D
-:102EC0000422C9580006066D0622C9700000000AD7
-:102ED0000422C998000606730622C9B00000000A41
-:102EE0000422C9D8000606790622C9F00000000AAB
-:102EF0000422CA180006067F0622CA300000000A13
-:102F00000422CA58000606850622CA700000000A7C
-:102F10000422CA980006068B0622CAB00000000AE6
-:102F20000422CAD8000606910622CAF00000000A50
-:102F30000422CB18000606970622CB300000000AB8
-:102F40000422CB580006069D0622CB700000000A22
-:102F50000422CB98000606A30622CBB00000000A8C
-:102F60000422CBD8000606A90622CBF00000000AF6
-:102F70000422CC18000606AF0622CC300000000A5E
-:102F80000422CC58000606B50622CC700000000AC8
-:102F90000422CC98000606BB0622CCB00000000A32
-:102FA0000422CCD8000606C10622CCF00000000A9C
-:102FB0000422CD18000606C70622CD300000000A04
-:102FC0000422CD58000606CD0622CD700000000A6E
-:102FD0000422CD98000606D30622CDB00000000AD8
-:102FE0000422CDD8000606D90622CDF00000000A42
-:102FF0000422CE18000606DF0622CE300000000AAA
-:103000000422CE58000606E50622CE700000000A13
-:103010000422CE98000606EB0622CEB00000000A7D
-:103020000422CED8000606F10622CEF00000000AE7
-:103030000422CF18000606F70622CF300000000A4F
-:103040000422CF58000606FD0622CF700000000AB9
-:103050000422CF98000607030622CFB00000000A22
-:103060000422CFD8000607090622CFF00000000A8C
-:103070000422D0180006070F0622D0300000000AF4
-:103080000422D058000607150622D0700000000A5E
-:103090000422D0980006071B0622D0B00000000AC8
-:1030A0000422D0D8000607210622D0F00000000A32
-:1030B0000422D118000607270622D1300000000A9A
-:1030C0000422D1580006072D0622D1700000000A04
-:1030D0000422D198000607330622D1B00000000A6E
-:1030E0000422D1D8000607390622D1F00000000AD8
-:1030F0000422D2180006073F0622D2300000000A40
-:103100000422D258000607450622D2700000000AA9
-:103110000422D2980006074B0622D2B00000000A13
-:103120000422D2D8000607510622D2F00000000A7D
-:103130000422D318000607570622D3300000000AE5
-:103140000422D3580006075D0622D3700000000A4F
-:103150000422D398000607630622D3B00000000AB9
-:103160000422D3D8000607690622D3F00000000A23
-:103170000422D4180006076F0622D4300000000A8B
-:103180000422D458000607750622D4700000000AF5
-:103190000422D4980006077B0622D4B00000000A5F
-:1031A0000422D4D8000607810622D4F00000000AC9
-:1031B0000422D518000607870622D5300000000A31
-:1031C0000422D5580006078D0622D5700000000A9B
-:1031D0000422D598000607930622D5B00000000A05
-:1031E0000422D5D8000607990622D5F00000000A6F
-:1031F0000422D6180006079F0622D6300000000AD7
-:103200000422D658000607A50622D6700000000A40
-:103210000422D698000607AB0622D6B00000000AAA
-:103220000422D6D8000607B10622D6F00000000A14
-:103230000422D718000607B70622D7300000000A7C
-:103240000422D758000607BD0622D7700000000AE6
-:103250000422D798000607C30622D7B00000000A50
-:103260000422D7D8000607C90622D7F00000000ABA
-:103270000422D818000607CF0622D8300000000A22
-:103280000422D858000607D50622D8700000000A8C
-:103290000422D898000607DB0622D8B00000000AF6
-:1032A0000422D8D8000607E10622D8F00000000A60
-:1032B0000422D918000607E70622D9300000000AC8
-:1032C0000422D958000607ED0622D9700000000A32
-:1032D0000422D998000607F30622D9B00000000A9C
-:1032E0000422D9D8000607F90622D9F00000000A06
-:1032F0000422DA18000607FF0622DA300000000A6E
-:103300000422DA58000608050622DA700000000AD6
-:103310000422DA980006080B0622DAB00000000A40
-:103320000422DAD8000608110622DAF00000000AAA
-:103330000422DB18000608170622DB300000000A12
-:103340000422DB580006081D0622DB700000000A7C
-:103350000422DB98000608230622DBB00000000AE6
-:103360000422DBD8000608290622DBF00000000A50
-:103370000422DC180006082F0622DC300000000AB8
-:103380000422DC58000608350622DC700000000A22
-:103390000422DC980006083B0622DCB00000000A8C
-:1033A0000422DCD8000608410622DCF00000000AF6
-:1033B0000422DD18000608470622DD300000000A5E
-:1033C0000422DD580006084D0622DD700000000AC8
-:1033D0000422DD98000608530622DDB00000000A32
-:1033E0000422DDD8000608590622DDF00000000A9C
-:1033F0000422DE180006085F0622DE300000000A04
-:103400000422DE58000608650622DE700000000A6D
-:103410000422DE980006086B0622DEB00000000AD7
-:103420000422DED8000608710622DEF00000000A41
-:103430000422DF18000608770622DF300000000AA9
-:103440000422DF580006087D0622DF700000000A13
-:103450000422DF98000608830622DFB00000000A7D
-:103460000422DFD8000608890622DFF00000000AE7
-:103470000422E0180006088F0622E0300000000A4F
-:103480000422E058000608950622E0700000000AB9
-:103490000422E0980006089B0622E0B00000000A23
-:1034A0000422E0D8000608A10622E0F00000000A8D
-:1034B0000422E118000608A70622E1300000000AF5
-:1034C0000422E158000608AD0622E1700000000A5F
-:1034D0000422E198000608B30622E1B00000000AC9
-:1034E0000422E1D8000608B90622E1F00000000439
-:1034F0000622153800000002062211E80000000232
-:103500000622F3000000000802221148000000001B
-:1035100006225900000000060622330000000002C7
-:1035200006226040000000300622F3200000000860
-:103530000222114C0000000006225918000000066B
-:10354000062233080000000206226100000000305D
-:103550000622F34000000008022211500000000083
-:103560000622593000000006062233100000000237
-:10357000062261C0000000300622F360000000084F
-:1035800002221154000000000622594800000006E3
-:10359000062233180000000206226280000000307C
-:1035A0000622F380000000080222115800000000EB
-:1035B00006225960000000060622332000000002A7
-:1035C00006226340000000300622F3A0000000083D
-:1035D0000222115C0000000006225978000000065B
-:1035E000062233280000000206226400000000309A
-:1035F0000622F3C000000008022211600000000053
-:103600000622599000000006062233300000000216
-:10361000062264C0000000300622F3E0000000082B
-:103620000222116400000000062259A800000006D2
-:1036300006223338000000020622658000000030B8
-:103640000216100000000028021700080000000207
-:103650000217002C000000030217003C00000004C9
-:10366000021700440000000002170048000000029A
-:103670000217004C0000009002170050000000905C
-:103680000217005400800090021700580810000034
-:10369000021700700000000602170078000009FF02
-:1036A0000217007C0000076C021701C4081000001C
-:1036B0000217034400000001021704000000008A02
-:1036C00002170404000000800217040800000081B3
-:1036D0000217040C00000080021704100000008A8A
-:1036E0000217041400000080021704180000008173
-:1036F0000217041C00000080021704300000008A3A
-:103700000217043400000080021704380000008112
-:103710000217043C00000080021704400000008AE9
-:1037200002170444000000800217044800000081D2
-:103730000217044C00000080021704800000008A79
-:103740000217048400000080021704880000008132
-:103750000217048C0000008002170038007C10045F
-:10376000021700040000000F021701EC0000000225
-:10377000021701F400000002021701EC0000000231
-:10378000021701F400000002021701EC0000000221
-:10379000021701F400000002021701EC0000000211
-:1037A000021701F400000002021701EC0000000201
-:1037B000021701F400000002021701EC00000002F1
-:1037C000021701F400000002021701EC00000002E1
-:1037D000021701F400000002021701EC00000002D1
-:1037E000021701F400000002061640240000000247
-:1037F000021640700000001C021642080000000182
-:1038000002164210000000010216422000000001D2
-:10381000021642280000000102164230000000019A
-:103820000216423800000001021642600000000249
-:103830000C16401C0003D0900A16401C0000009C8F
-:103840000B16401C000002710216403000000028D8
-:10385000021640340000002C0216403800000030F0
-:103860000216404400000020021640000000000143
-:10387000021640D8000000010216400800000001B6
-:103880000216400C0000000102164010000000016A
-:1038900002164240000000000216424800000000EC
-:1038A000061642700000000202164250000000009E
-:1038B0000216425800000000061642800000000276
-:1038C00002166008000012140216600C00001200BC
-:1038D00002166010000012040216601C0000FFFFB8
-:1038E000021660200000FFFF021660240000FFFFA8
-:1038F000021660280000FFFF02166038000000205A
-:103900000216603C00000010061660400000000235
-:1039100002166048000000230216604C00000024DC
-:1039200002166050000000250216605400000026B8
-:1039300002166058000000270216605C00000011AB
-:103940000216606000000000021660640000002B98
-:10395000021660680000002C0216606C0000002D4A
-:1039600002166070000000EC021660740000000097
-:1039700002166078000000290216607C0000002A10
-:10398000021660800000002F061660840000000D03
-:10399000021660B800000001061660BC00000008B6
-:1039A000021660DC00000001061660E00000000462
-:1039B000021660F000000001061660F4000000032B
-:1039C0000216610000000001061661040000002DCF
-:1039D000021661B800000001061661BC0000000874
-:1039E000021661DC00000001061661E00000000420
-:1039F000021661F000000001061661F400000003E9
-:103A00000216620000000001061662040000000DAC
-:103A10000216623807FFFFFF0216623C0000007FBB
-:103A20000216624007FFFFFF021662440000003FDB
-:103A300001166248000000000116624C0000000000
-:103A400001166250000000000116625400000000E0
-:103A500001166258000000000116625C00000000C0
-:103A600001166260000000000116626400000000A0
-:103A700001166268000000000116626C0000000080
-:103A80000116627000000000011662740000000060
-:103A900001166278000000000116627C0000000040
-:103AA000011662D400000000021662D80000FFFF79
-:103AB000021662DC0000FFFF021662E00000FFFF5A
-:103AC000021662E40000FFFF0C166000000003E82D
-:103AD0000A166000000000010B16600000000003E1
-:103AE0000216804000000006021680440000000517
-:103AF000021680480000000A0216804C00000005F3
-:103B00000216805400000002021680CC000000045F
-:103B1000021680D000000004021680D400000004C9
-:103B2000021680D800000004021680DC00000004A9
-:103B3000021680E000000004021680E40000000489
-:103B4000021680E800000004021688040000000647
-:103B5000021680300000007C021680340000003D18
-:103B6000021680380000003F0216803C0000009CD6
-:103B70000216E6E8000060000216E6EC00006000B5
-:103B80000216E6F0000060000216E6F40000600095
-:103B900002168234000025E40216823800008000FC
-:103BA00002168094000025E3021681F400000C0840
-:103BB000021681F800000040021681FC000001009E
-:103BC0000216820000000020021682040000001786
-:103BD00002168208000000800216820C000002001B
-:103BE00002168210000000000216823C0000001342
-:103BF00002168220008F008F0216821C008F008F19
-:103C0000021680F0000000070216821801FF01FF73
-:103C10000216821401FF01FF061680F40000000264
-:103C20000216811C0000000502168120000000051C
-:103C300002168124000000050216812800000008F9
-:103C40000216812C000000060216813000000007D9
-:103C50000616813400000004021680FC00000000FB
-:103C600006168144000000020216814C0000000488
-:103C7000021681500000000102168154000000026B
-:103C800002168158000000050216815C0000000544
-:103C90000216816000000005021681640000000524
-:103CA0000216816800000008021681000000000072
-:103CB0000216816C000000060216817000000007E9
-:103CC00006168174000000060216818C00000004B4
-:103CD000021681900000000102168104000000001D
-:103CE000021681940000000202168198000000056F
-:103CF0000216819C00000005021681A0000000054C
-:103D0000021681A400000005021681A80000000828
-:103D1000021681AC00000006021681B00000000708
-:103D2000061681B40000000202168108000000009F
-:103D3000061681BC00000004021681CC00000004BD
-:103D4000021681D000000001021681D4000000029A
-:103D5000021681D800000005021681DC0000000573
-:103D6000021681E0000000050216810C000000042C
-:103D7000021681E400000005021681E80000000838
-:103D8000021681EC00000006021681F00000000718
-:103D900002168110000000010216811400000002CA
-:103DA00002168118000000050216809C0000004CDD
-:103DB000021680A00000004C061680C4000000021D
-:103DC000021680A400000000021680A80000000077
-:103DD000021680AC0000004C061680B00000000502
-:103DE0000216E6F80000020402168240003F003F7F
-:103DF00002168244003F003F061682900000000435
-:103E000002168248008000800216824C00800080EA
-:103E100002168250010001000216825401000100C6
-:103E20000616825800000002021682600040004020
-:103E30000216826400400040021682681E001E00C6
-:103E40000216826C1E001E000216827040004000A6
-:103E500002168274400040000216827880008000C2
-:103E60000216827C800080000216828020002000E2
-:103E700002168284200020000616828800000002BC
-:103E8000021680900000004B021680600000014086
-:103E900002168064000001400616808800000002BF
-:103EA00002168068000000000216806C000000000E
-:103EB00002168070000000C0061680740000000525
-:103EC0000216880C0101010102168810010120046C
-:103ED000021688142008100102168818010101201A
-:103EE0000216881C0101010102168820010120042C
-:103EF00002168824200810010216882801010120DA
-:103F00000216882C200810010216883001010120B9
-:103F100002168834010101010216883801012004CB
-:103F20000216883C20081001021688400101012079
-:103F3000021688440101010102168848010120048B
-:103F40000216E6BC000000000216E6C000000002F7
-:103F50000216E6C4000000040216E6C800000006CF
-:103F60000216E79400000001021680EC000000FF3A
-:103F700002140000000000010215C024000000002F
-:103F80000215C0EC000000010215C0F000000001A5
-:103F90000615C10000000002021400040000000128
-:103FA00002140008000000010214000C00000001CF
-:103FB000021400300000000102140034000000016F
-:103FC0000214004000000001021400440000FFFF42
-:103FD00006140004000000030214000000000000AA
-:103FE000060280000000200002020058000000329B
-:103FF000020200A003150020020200A40315002005
-:10400000020200A801000030020200AC081000000B
-:10401000020200B000000036020200B400000030CE
-:10402000020200B800000031020200BC00000002E1
-:10403000020200C000000005020200C400000002ED
-:10404000020200C800000002020200D000000007C7
-:10405000020200DC00000000020200E00000000597
-:10406000020200E400000003020200F00000000170
-:10407000020200FC00000006020201200000000015
-:104080000202013400000002020201B0000000013F
-:104090000202020C000000010202021400000001F2
-:1040A00002020218000000020202040400000001E3
-:1040B0000202040C00000040020204100000004054
-:1040C0000202041C00000004020204200000002080
-:1040D0000202042400000002020204280000002062
-:1040E000060205000000001204020480002008BF40
-:1040F000020200600000000F0202006400000007DE
-:1041000002020068000000000202006C0000000EC5
-:10411000020200700000000E06020074000000039E
-:10412000020200F40000000402020004000000018A
-:1041300002020008000000010202000C0000000161
-:104140000202001000000001020200140000000141
-:1041500002020018000000010202001C0000000121
-:104160000202002000000001020200240000000101
-:1041700002020028000000010202002C00000001E1
-:1041800002020030000000010202003400000001C1
-:1041900002020038000000010202003C00000001A1
-:1041A0000202004000000001020200440000000181
-:1041B00002020048000000010202004C0000000161
-:1041C000020200500000000102020108000000C8C5
-:1041D0000202011800000002020201C400000000F7
-:1041E000020201CC00000000020201D40000000223
-:1041F000020201DC00000002020201E4000000FFF4
-:10420000020201EC000000FF0202010000000000B9
-:104210000202010C000000C80202011C00000002A2
-:10422000020201C800000000020201D000000000EC
-:10423000020201D800000002020201E000000002B8
-:10424000020201E8000000FF020201F0000000FF8E
-:10425000020201040000002002020108000000C860
-:104260000202011800000002020201C40000000066
-:10427000020201CC00000000020201D40000000292
-:10428000020201DC00000002020201E4000000FF63
-:10429000020201EC000000FF020201000000001019
-:1042A0000202010C000000C80202011C0000000212
-:1042B000020201C800000000020201D0000000005C
-:1042C000020201D800000002020201E00000000228
-:1042D000020201E8000000FF020201F0000000FFFE
-:1042E000020201040000003002020108000000C8C0
-:1042F0000202011800000002020201C400000000D6
-:10430000020201CC00000000020201D40000000201
-:10431000020201DC00000002020201E4000000FFD2
-:10432000020201EC000000FF020201000000004058
-:104330000202010C000000C80202011C0000000281
-:10434000020201C800000000020201D000000000CB
-:10435000020201D800000002020201E00000000297
-:10436000020201E8000000FF020201F0000000FF6D
-:10437000020201040000006002020108000000C8FF
-:104380000202011800000002020201C40000000045
-:10439000020201CC00000000020201D40000000271
-:1043A000020201DC00000002020201E4000000FF42
-:1043B000020201EC000000FF0202010000000050B8
-:1043C0000202010C000000C80202011C00000002F1
-:1043D000020201C800000000020201D0000000003B
-:1043E000020201D800000002020201E00000000207
-:1043F000020201E8000000FF020201F0000000FFDD
-:1044000002020104000000700728040000B300004D
-:10441000082807B8000908DF072C000028CB000097
-:10442000072C8000365D0A33072D0000347017CB4F
-:10443000072D80003A9424E8072E000036C7338EFB
-:10444000072E80001CE94140082EC5D0274608E110
-:10445000022800BC0000003001280000000000001D
-:1044600001280004000000000128000800000000EE
-:104470000128000C000000000128001000000000CE
-:1044800001280014000000000228002000000001A4
-:104490000228002400000002022800280000000377
-:1044A0000228002C00000000022800300000000458
-:1044B000022800340000000102280038000000003B
-:1044C0000228003C00000001022800400000000417
-:1044D00002280044000000000228004800000001FB
-:1044E0000228004C000000030228005000000000D9
-:1044F00002280054000000010228005800000004B7
-:104500000228005C0000000002280060000000019A
-:104510000228006400000003022800680000000078
-:104520000228006C00000001022800700000000456
-:104530000228007400000000022800780000000437
-:104540000228007C00000003062800800000000212
-:10455000022800A400007FFF022800A8000003FF3B
-:10456000022802240000000002280234000000009B
-:104570000228024C00000000022802E40000FFFFB5
-:104580000628200000000800022B8BC0000000015C
-:10459000022B800000000000022B80400000001869
-:1045A000022B80800000000C022B80C000000066FF
-:1045B0000C2B8300000864700A2B83000000015755
-:1045C0000B2B83000000055F0A2B834000000000D6
-:1045D0000C2B8340000002260B2B834000000001BF
-:1045E000022B838000086470022B83C00000022627
-:1045F000022B1480000000010A2B14800000000030
-:10460000022B944000000001062B94480000000299
-:10461000062A9A7000000004042A9A80000408E325
-:10462000062A9A9000000002042A9A98000208E7DD
-:10463000062A900000000048062A2008000000C852
-:10464000062A200000000002062A912800000086A9
-:10465000062AC00000000120062A9348000000033B
-:10466000042A9354000108E9062A9FB000000002C2
-:10467000042A9418000208EA042A9CD0000108ECDD
-:10468000062A9CD400000011042A9D20008F08ED0A
-:10469000062A9F5C00000005042A30000002097C05
-:1046A000062A300800000100062A404000000010E1
-:1046B000042A40000010097E042A84080002098EA2
-:1046C000042ACF4000040990042ACF600002099414
-:1046D000062A9FA000000004062A60000000054092
-:1046E000062A9D1800000002062AB00000000050B3
-:1046F000062ABB7000000070062ABB68000000029A
-:10470000062AB94800000004062AD000000008006C
-:10471000062AC48000000150062A942000000032BE
-:10472000062A502000000002062A50300000000235
-:10473000062A500000000002062A50100000000265
-:10474000022A520800000001042A9AA000020996D9
-:10475000062A95B000000022042A96380001099824
-:10476000062A963C00000003062A96E0000000227C
-:10477000042A976800010999062A976C0000000333
-:10478000062A981000000022042A98980001099A2D
-:10479000062A989C00000003062A99400000002287
-:1047A000042A99C80001099B062A99CC000000033D
-:1047B000062ABB5800000002062AC9C000000150AA
-:1047C000062A94E800000032062A50280000000261
-:1047D000062A503800000002062A50080000000295
-:1047E000062A501800000002022A520C00000001A4
-:1047F000042A9AA80002099C062A96480000002272
-:10480000042A96D00001099E062A96D400000003CF
-:10481000062A977800000022042A98000001099FC8
-:10482000062A980400000003062A98A80000002227
-:10483000042A9930000109A0062A993400000003D7
-:10484000062A99D800000022042A9A60000109A1D2
-:10485000062A9A6400000003062ABB6000000002DA
-:10486000022ACF0000000000042A9AB0001009A21A
-:10487000062A50480000000E022ACF040000000063
-:10488000042A9AF0001009B2062A50800000000E97
-:10489000022ACF0800000000042A9B30001009C241
-:1048A000062A50B80000000E022ACF0C00000000BB
-:1048B000042A9B70001009D2062A50F00000000E56
-:1048C000022ACF1000000000042A9BB0001009E269
-:1048D000062A51280000000E022ACF140000000012
-:1048E000042A9BF0001009F2062A51600000000E15
-:1048F000022ACF1800000000042A9C3000100A028F
-:10490000062A51980000000E022ACF1C0000000069
-:10491000042A9C7000100A12062A51D00000000ED2
-:1049200002101008000000010210105000000001E9
-:10493000021010000003D000021010040000003D1F
-:104940000910180002000A220910110000100C22A0
-:1049500006101140000000080910116000100C3210
-:10496000061011A00000001806102400000000E04E
-:104970000210201C00000000021020200000000196
-:10498000021020C0000000020210200400000001FC
-:104990000210200800000001021030D800000001C1
-:1049A00009103C0000050C420910380000050C47B6
-:1049B0000910392000050C4C09103B0000050C5172
-:1049C000021040D400000030021040D80000003037
-:1049D00006104C00000001000210402800000010EA
-:1049E0000210404400003FFF021040580028000021
-:1049F000021040840084924A0210405800000000D7
-:104A0000021041380000000102104138000000018E
-:104A1000021041380000000102104138000000017E
-:104A2000021041380000000102104138000000016E
-:104A3000021041380000000102104138000000015E
-:104A40000212049001F680400212051400003C108E
-:104A500002120494FFFFFFFF02120498FFFFFFFF02
-:104A60000212049CFFFFFFFF021204A0FFFFFFFFE2
-:104A7000021204A4FFFFFFFF021204A8FFFFFFFFC2
-:104A8000021204ACFFFFFFFF021204B0FFFFFFFFA2
-:104A9000021204B8FFFFFFFF021204BCFFFFFFFF7A
-:104AA000021204C0FFFFFFFF021204C4FFFFFFFF5A
-:104AB000021204C8FFFFFFFF021204CCFFFFFFFF3A
-:104AC000021204D0FFFFFFFF021204D8FFFFFFFF16
-:104AD000021204DCFFFFFFFF021204E0FFFFFFFFF2
-:104AE000021204E4FFFFFFFF021204E8FFFFFFFFD2
-:104AF000021204ECFFFFFFFF021204F0FFFFFFFFB2
-:104B0000021204F4FFFFFFFF021204F8FFFFFFFF91
-:104B1000021204FCFFFFFFFF02120500FFFFFFFF70
-:104B200002120504FFFFFFFF02120508FFFFFFFF4F
-:104B30000212050CFFFFFFFF02120510FFFFFFFF2F
-:104B4000021204D4F800C000021204B4F0005000B5
-:104B500002120390000000080212039C00000008EB
-:104B6000021203A000000008021203A400000002C9
-:104B7000021203BC00000004021203C00000000582
-:104B8000021203C400000004021203D0000000005F
-:104B90000212036C00000001021201BC0000004080
-:104BA000021201C000001808021201C4000008032C
-:104BB000021201C800000803021201CC00000040EC
-:104BC000021201D000000003021201D40000080309
-:104BD000021201D800000803021201DC00000803E1
-:104BE000021201E000010003021201E400000803C8
-:104BF000021201E800000803021201EC00000003A9
-:104C0000021201F000000003021201F40000000390
-:104C1000021201F800000003021201FC0000000370
-:104C2000021202000000000302120204000000034E
-:104C300002120208000000030212020C000000032E
-:104C4000021202100000000302120214000000030E
-:104C500002120218000000030212021C00000003EE
-:104C600002120220000000030212022400000003CE
-:104C700002120228000024030212022C0000002F5E
-:104C80000212023000000009021202340000001972
-:104C900002120238000001840212023C000001836B
-:104CA0000212024000000306021202440000001932
-:104CB00002120248000000060212024C0000030625
-:104CC0000212025000000306021202540000030602
-:104CD0000212025800000C860212025C0000030659
-:104CE00002120260000003060212026400000006C5
-:104CF00002120268000000060212026C00000006A8
-:104D00000212027000000006021202740000000687
-:104D100002120278000000060212027C0000000667
-:104D20000212028000000006021202840000000647
-:104D300002120288000000060212028C0000000627
-:104D40000212029000000006021202940000000607
-:104D500002120298000000060212029C00000006E7
-:104D6000021202A000000306021202A400000013B7
-:104D7000021202A800000006021202B00000100495
-:104D8000021202B400001004021203240010644056
-:104D90000212032800106440021205B40000000152
-:104DA000021205F800000040021205FC0000001984
-:104DB00002120600000000010212066C0000000151
-:104DC000021201B000000001021207D80000000327
-:104DD000021207D800000003021207D800000003E7
-:104DE000021207D800000003021207D800000003D7
-:104DF000021207D800000003021207D800000003C7
-:104E0000021207D8000000030600A0000000000CFA
-:104E10000200A050000000000200A05400000000AA
-:104E20000200A0EC555400000200A0F05555555565
-:104E30000200A0F4000055550200A0F8F0000000A8
-:104E40000200A0FC555400000200A1005555555524
-:104E50000200A104000055550200A108F000000066
-:104E60000200A19C000000000200A1A000010000BF
-:104E70000200A1A4000050140200A1A8000000003C
-:104E80000200A6A8000000000200A6AC000000007E
-:104E90000200A6D0000000000200A45C00000C008C
-:104EA0000200A61C000000030200A070FFF55FFFD7
-:104EB0000200A0740000FFFF0200A078F00003E0F1
-:104EC0000200A07C000000000200A0800000A00002
-:104ED0000600A084000000050200A0980FE000007A
-:104EE0000600A09C000000070200A0B8000004001B
-:104EF0000600A0BC000000030200A0C800001000D3
-:104F00000600A0CC000000030200A0D80000400072
-:104F10000600A0DC000000030200A0E80001000081
-:104F20000600A22C000000040200A688000000FC7D
-:104F30000600A68C000000070200A6F40000000096
-:104F40000200A10CFF5C00000200A110FFF55FFF52
-:104F50000200A1140000FFFF0200A118F00003E00E
-:104F60000200A11C000000000200A1200000A0001F
-:104F70000600A124000000050200A1380FE0000097
-:104F80000600A13C000000070200A1580000080034
-:104F90000600A15C000000030200A16800002000E0
-:104FA0000600A16C000000030200A1780000800050
-:104FB0000600A17C000000030200A188000200009E
-:104FC0000600A23C000000040200A6B0000000FCA5
-:104FD0000600A6B4000000070200A6F800000000CA
-:104FE0000200A030000000000200A0340000000019
-:104FF0000200A038000000000200A03C00000000F9
-:105000000200A040000000000200A04400000000D8
-:105010000200A048000000000200A04C00000000B8
-:10502000020090C40000E000020090CC0000F300F9
-:10503000020090D400000003020091A000000001D3
-:105040000600917000000003020090EC0000600078
-:10505000020090F400007300020090FC00000003C6
-:10506000020091A8000000010600918800000003E2
-:10507000020091000000400002009108000053006F
-:105080000200911000000004020091AC0000000139
-:1050900006009194000000020200919C00000001B3
-:1050A000020090D800006000020090E00000730051
-:1050B000020090E800000003020091A4000000013B
-:1050C0000200917C000000010200918000000001BC
-:1050D00002009184000000000200912800000300FB
-:1050E0000200916C0003F0080200912C0000030004
-:1050F0000200913000000300020091340000030020
-:1051000002009138000003000200913C00000300FF
-:1051100002009140000003000200942C00000001F6
-:1051200002009430000000010200943400000001ED
-:105130000200942C000000010200943000000001E5
-:1051400002009434000000010200942C00000001D1
-:1051500002009430000000010200943400000001BD
-:105160000200942C000000010200943000000001B5
-:1051700002009434000000010200942C00000001A1
-:10518000020094300000000102009434000000018D
-:105190000200942C00000001020094300000000185
-:1051A00002009434000000010200942C0000000171
-:1051B000020094300000000102009434000000015D
-:1051C0000200942C00000001020094300000000155
-:1051D0000200943400000001021300780000003047
-:1051E0000213003C000061A8061301080000000340
-:1051F000021301040000000002130134000000004B
-:10520000061301080000000302130104000000005F
-:10521000021301340000000006130108000000031F
-:10522000021301040000000002130134000000001A
-:10523000061301080000000302130104000000002F
-:1052400002130134000000000613010800000003EF
-:1052500002130104000000000213013400000000EA
-:1052600006130108000000030213010400000000FF
-:1052700002130134000000000613010800000003BF
-:1052800002130104000000000213013400000000BA
-:1052900006130108000000030213010400000000CF
-:1052A0000213013400000000021100B800000001E8
-:1052B0000216E6E8000020000216E6EC00002000DE
-:1052C0000216E6F0000065550216E6F4000065558A
-:1052D00002168150000000000216817400000001D7
-:1052E00002168178000000010216817C0000000196
-:1052F0000216818000000001021681840000000176
-:105300000216818800000001021681B4000000012D
-:10531000021681B800000001021681BC00000001E5
-:10532000021681C000000001021681C400000001C5
-:10533000021681C800000001021681100000000062
-:105340000216824000BF00BF061682440000000221
-:105350000216824C00BF00BF0216E6C40000000126
-:105360000216E6C8000000030216E79400000000E1
-:10537000042ACF40000A0C56000000000000000084
-:1053800000000034000000000000000000000000E9
-:10539000000000000000000000000000000000000D
-:1053A0000000000000000000000000000034003594
-:1053B00000000000000000000000000000000000ED
-:1053C00000000000000000000000000000000000DD
-:1053D0000000000000000000003500600000000038
-:1053E00000000000000000000000000000000000BD
-:1053F00000000000000000000000000000000000AD
-:1054000000000000006000910000000000000000AB
-:1054100000910095009500990099009D009D00A1C4
-:1054200000A100A500A500A900A900AD00AD00B134
-:1054300000B100B500000000000000000000000006
-:10544000000000000000000000000000000000005C
-:1054500000000000000000000000000000B5031183
-:105460000311031B031B03250325032C032C033308
-:105470000333033A033A0341034103480348034F0C
-:10548000034F03560356035D0000000000000000B8
-:10549000000000000000000000000000000000000C
-:1054A00000000000000000000000000000000000FC
-:1054B00000000000000000000000000000000000EC
-:1054C00000000000000000000000000000000000DC
-:1054D00000000000000000000000000000000000CC
-:1054E00000000000000000000000000000000000BC
-:1054F00000000000000000000000000000000000AC
-:10550000000000000000000000000000000000009B
-:10551000000000000000000000000000000000008B
-:10552000000000000000000000000000000000007B
-:105530000000000000000000035D035E00000000AA
-:1055400000000000035E035F035F0360036003610C
-:10555000036103620362036303630364036403651B
-:10556000036503660000000000000000000000006A
-:10557000000000000000000000000000000000002B
-:10558000000000000000000000000000000000001B
-:105590000366036D036D0379037903850000000042
-:1055A00000000000000000000000000000000000FB
-:1055B00000000000000000000000000000000000EB
-:1055C00000000000000000000000000000000000DB
-:1055D00000000000000000000000000000000000CB
-:1055E00000000000000000000385038600000000AA
-:1055F00000000000000000000000000000000000AB
-:10560000000000000000000000000000000000009A
-:1056100000000000038603B100000000000000004D
-:10562000000000000000000000000000000000007A
-:10563000000000000000000000000000000000006A
-:1056400003B103E0000000000000000000000000C3
-:10565000000000000000000000000000000000004A
-:1056600000000000000000000000000003E0040F44
-:105670000000000000000000040F04160416041DC2
-:10568000041D04240424042B042B043204320439A2
-:1056900004390440044004470447047A0000000031
-:1056A00000000000047A047E047E048204820486E2
-:1056B0000486048A048A048E048E0492049204965A
-:1056C0000496049A049A04EA04EA05000500051603
-:1056D000051605180518051A051A051C051C051ED2
-:1056E000051E052005200522052205240524052682
-:1056F00005260693000000000000000006930698AF
-:105700000698069D069D06A206A206A706A706AC59
-:1057100006AC06B106B106B606B606BB06BB06BCAD
-:105720000000000000000000000000000000000079
-:105730000000000000000000000000000000000069
-:10574000000000000000000006BC06E000000000B1
-:105750000000000006E006E206E206E406E406E6D3
-:1057600006E606E806E806EA06EA06EC06EC06EEB9
-:1057700006EE06F006F00705070507080708070B01
-:105780000000000000000000000000000000000019
-:105790000000000000000000000000000000000009
-:1057A000070B074F00000000000000000000000091
-:1057B00000000000000000000000000000000000E9
-:1057C000000000000000000000000000074F07E19B
-:1057D00000000000000000000000000000000000C9
-:1057E00000000000000000000000000000000000B9
-:1057F000000000000000000007E107EF00000000CB
-:105800000000000000000000000000000000000098
-:105810000000000000000000000000000000000088
-:105820000000000007EF082C00000000000000004E
-:10583000082C08350835083E083E08470847085038
-:1058400008500859085908620862086B086B087408
-:10585000087408D508D508EA08EA08FF08FF090215
-:1058600009020905090509080908090B090B090EB0
-:10587000090E09110911091409140917091709203A
-:105880000000000000000000000000000000000018
-:105890000000000000000000000000000000000008
-:1058A00000000000000000000920092600000000A0
-:1058B00000000000000000000000000000000000E8
-:1058C00000000000000000000000000000000000D8
-:1058D000000000000926092B000000000000000065
-:1058E00000000000000000000000000000000000B8
-:1058F00000000000000000000000000000000000A8
-:10590000092B0933000000000000000009330934AE
-:10591000093409350935093609360937093709388F
-:10592000093809390939093A093A093B00000000E8
-:105930000000000000000000000000000000000067
-:105940000000000000000000000000000000000057
-:105950000000000000000000093B09AC000000004E
-:105960000000000009AC09AD09AD09AE09AE09AFF0
-:1059700009AF09B009B009B109B109B209B209B357
-:1059800009B309B409B409C809C809DB09DB09EF7F
-:1059900009EF09F009F009F109F109F209F209F337
-:1059A00009F309F409F409F509F509F609F609F707
-:1059B00009F70A1600000000000000000A160A1984
-:1059C0000A190A1C0A1C0A1F0A1F0A220A220A258F
-:1059D0000A250A280A280A2B0A2B0A2E0A2E0A3020
-:1059E00000000000000000000A300A330A330A36C3
-:1059F0000A360A390A390A3C0A3C0A3F0A3F0A4277
-:105A00000A420A450A450A480A480A4900000000B5
-:105A10000000000000000000000000000000000086
-:105A20000000000000000000000000000000000076
-:105A3000000000000A490A610000000000000000A8
-:105A40000000000000000000000000000000000056
-:105A50000000000000000000000000000000000046
-:105A60000A610A620000000000000000000000005F
-:105A70000000000000000000000000000000000026
-:105A80000000000000000000000000000000000016
-:105A9000000100000002070000030E0000041500D2
-:105AA00000051C000006230000072A000008310042
-:105AB00000093800000A3F00000B4600000C4D00B2
-:105AC000000D5400000E5B00000F62000010690022
-:105AD000001170000012770000137E000014850092
-:105AE00000158C000016930000179A000018A10002
-:105AF0000019A800001AAF00001BB600001CBD0072
-:105B0000001DC400001ECB00001FD2000000D90001
-:105B10000000200000004000000060000000800045
-:105B20000000A0000000C0000000E0000001000034
-:105B30000001200000014000000160000001800021
-:105B40000001A0000001C0000001E0000002000010
-:105B500000022000000240000002600000028000FD
-:105B60000002A0000002C0000002E00000030000EC
-:105B700000032000000340000003600000038000D9
-:105B80000003A0000003C0000003E00000040000C8
-:105B900000042000000440000004600000048000B5
-:105BA0000004A0000004C0000004E00000050000A4
-:105BB0000005200000054000000560000005800091
-:105BC0000005A0000005C0000005E0000006000080
-:105BD000000620000006400000066000000680006D
-:105BE0000006A0000006C0000006E000000700005C
-:105BF0000007200000074000000760000007800049
-:105C00000007A0000007C0000007E0000008000037
-:105C10000008200000084000000860000008800024
-:105C20000008A0000008C0000008E0000009000013
-:105C30000009200000094000000960000009800000
-:105C40000009A0000009C0000009E000000A0000EF
-:105C5000000A2000000A4000000A6000000A8000DC
-:105C6000000AA000000AC000000AE000000B0000CB
-:105C7000000B2000000B4000000B6000000B8000B8
-:105C8000000BA000000BC000000BE000000C0000A7
-:105C9000000C2000000C4000000C6000000C800094
-:105CA000000CA000000CC000000CE000000D000083
-:105CB000000D2000000D4000000D6000000D800070
-:105CC000000DA000000DC000000DE000000E00005F
-:105CD000000E2000000E4000000E6000000E80004C
-:105CE000000EA000000EC000000EE000000F00003B
-:105CF000000F2000000F4000000F6000000F800028
-:105D0000000FA000000FC000000FE0000010000016
-:105D10000010200000104000001060000010800003
-:105D20000010A0000010C0000010E00000110000F2
-:105D300000112000001140000011600000118000DF
-:105D40000011A0000011C0000011E00000120000CE
-:105D500000122000001240000012600000128000BB
-:105D60000012A0000012C0000012E00000130000AA
-:105D70000013200000134000001360000013800097
-:105D80000013A0000013C0000013E0000014000086
-:105D90000014200000144000001460000014800073
-:105DA0000014A0000014C0000014E0000015000062
-:105DB000001520000015400000156000001580004F
-:105DC0000015A0000015C0000015E000001600003E
-:105DD000001620000016400000166000001680002B
-:105DE0000016A0000016C0000016E000001700001A
-:105DF0000017200000174000001760000017800007
-:105E00000017A0000017C0000017E00000180000F5
-:105E100000182000001840000018600000188000E2
-:105E20000018A0000018C0000018E00000190000D1
-:105E300000192000001940000019600000198000BE
-:105E40000019A0000019C0000019E000001A0000AD
-:105E5000001A2000001A4000001A6000001A80009A
-:105E6000001AA000001AC000001AE000001B000089
-:105E7000001B2000001B4000001B6000001B800076
-:105E8000001BA000001BC000001BE000001C000065
-:105E9000001C2000001C4000001C6000001C800052
-:105EA000001CA000001CC000001CE000001D000041
-:105EB000001D2000001D4000001D6000001D80002E
-:105EC000001DA000001DC000001DE000001E00001D
-:105ED000001E2000001E4000001E6000001E80000A
-:105EE000001EA000001EC000001EE000001F0000F9
-:105EF000001F2000001F4000001F6000001F8000E6
-:105F0000001FA000001FC000001FE00000200000D4
-:105F100000202000002040000020600000208000C1
-:105F20000020A0000020C0000020E00000210000B0
-:105F3000002120000021400000216000002180009D
-:105F40000021A0000021C0000021E000002200008C
-:105F50000022200000224000002260000022800079
-:105F60000022A0000022C0000022E0000023000068
-:105F70000023200000234000002360000023800055
-:105F80000023A0000023C0000023E0000024000044
-:105F90000024200000244000002460000024800031
-:105FA0000024A0000024C0000024E0000025000020
-:105FB000002520000025400000256000002580000D
-:105FC0000025A0000025C0000025E00000260000FC
-:105FD00000262000002640000026600000268000E9
-:105FE0000026A0000026C0000026E00000270000D8
-:105FF00000272000002740000027600000278000C5
-:106000000027A0000027C0000027E00000280000B3
-:1060100000282000002840000028600000288000A0
-:106020000028A0000028C0000028E000002900008F
-:10603000002920000029400000296000002980007C
-:106040000029A0000029C0000029E000002A00006B
-:10605000002A2000002A4000002A6000002A800058
-:10606000002AA000002AC000002AE000002B000047
-:10607000002B2000002B4000002B6000002B800034
-:10608000002BA000002BC000002BE000002C000023
-:10609000002C2000002C4000002C6000002C800010
-:1060A000002CA000002CC000002CE000002D0000FF
-:1060B000002D2000002D4000002D6000002D8000EC
-:1060C000002DA000002DC000002DE000002E0000DB
-:1060D000002E2000002E4000002E6000002E8000C8
-:1060E000002EA000002EC000002EE000002F0000B7
-:1060F000002F2000002F4000002F6000002F8000A4
-:10610000002FA000002FC000002FE0000030000092
-:10611000003020000030400000306000003080007F
-:106120000030A0000030C0000030E000003100006E
-:10613000003120000031400000316000003180005B
-:106140000031A0000031C0000031E000003200004A
-:106150000032200000324000003260000032800037
-:106160000032A0000032C0000032E0000033000026
-:106170000033200000334000003360000033800013
-:106180000033A0000033C0000033E0000034000002
-:1061900000342000003440000034600000348000EF
-:1061A0000034A0000034C0000034E00000350000DE
-:1061B00000352000003540000035600000358000CB
-:1061C0000035A0000035C0000035E00000360000BA
-:1061D00000362000003640000036600000368000A7
-:1061E0000036A0000036C0000036E0000037000096
-:1061F0000037200000374000003760000037800083
-:106200000037A0000037C0000037E0000038000071
-:10621000003820000038400000386000003880005E
-:106220000038A0000038C0000038E000003900004D
-:10623000003920000039400000396000003980003A
-:106240000039A0000039C0000039E000003A000029
-:10625000003A2000003A4000003A6000003A800016
-:10626000003AA000003AC000003AE000003B000005
-:10627000003B2000003B4000003B6000003B8000F2
-:10628000003BA000003BC000003BE000003C0000E1
-:10629000003C2000003C4000003C6000003C8000CE
-:1062A000003CA000003CC000003CE000003D0000BD
-:1062B000003D2000003D4000003D6000003D8000AA
-:1062C000003DA000003DC000003DE000003E000099
-:1062D000003E2000003E4000003E6000003E800086
-:1062E000003EA000003EC000003EE000003F000075
-:1062F000003F2000003F4000003F6000003F800062
-:10630000003FA000003FC000003FE000003FE00170
-:1063100000000000000001FF0000020000007FF804
-:1063200000007FF800000A90000035000000000126
-:106330000000FF00000000000000FF00000000005F
-:106340000000FF00000000000000FF00000000004F
-:106350000000FF00000000000000FF00000000003F
-:106360000000FF00000000000000FF00000000002F
-:106370000000FF00000000000000FF00000000001F
-:106380000000FF00000000000000FF00000000000F
-:106390000000FF00000000000000FF0000000000FF
-:1063A0000000FF00000000000000FF0000000000EF
-:1063B0000000FF00000000000000FF0000000000DF
-:1063C0000000FF00000000000000FF0000000000CF
-:1063D0000000FF00000000000000FF0000000000BF
-:1063E0000000FF00000000000000FF0000000000AF
-:1063F0000000FF00000000000000FF00000000009F
-:106400000000FF00000000000000FF00000000008E
-:106410000000FF00000000000000FF00000000007E
-:106420000000FF00000000000000FF00000000006E
-:106430000000FF00000000000000FF00000000005E
-:106440000000FF00000000000000FF00000000004E
-:106450000000FF00000000000000FF00000000003E
-:106460000000FF00000000000000FF00000000002E
-:106470000000FF00000000000000FF00000000001E
-:106480000000FF00000000000000FF00000000000E
-:106490000000FF00000000000000FF0000000000FE
-:1064A0000000FF00000000000000FF0000000000EE
-:1064B0000000FF00000000000000FF0000000000DE
-:1064C0000000FF00000000000000FF0000000000CE
-:1064D0000000FF00000000000000FF0000000000BE
-:1064E0000000FF00000000000000FF0000000000AE
-:1064F0000000FF00000000000000FF00000000009E
-:106500000000FF00000000000000FF00000000008D
-:106510000000FF00000000000000FF00000000007D
-:106520000000FF00000000000000FF00000000006D
-:106530000000FF00000000000000FF00000000005D
-:106540000000FF00000000000000FF00000000004D
-:106550000000FF00000000000000FF00000000003D
-:106560000000FF00000000000000FF00000000002D
-:1065700000000000140AFF000000000100000000FD
-:106580000020100100000000010090000000010048
-:1065900000009002000090040000900600009008A7
-:1065A0000000900A0000900C0000900E0000901077
-:1065B0000000901200009014000090160000901847
-:1065C0000000901A0000901C0000901E0000902017
-:1065D00000009022000090240000902600009028E7
-:1065E0000000902A0000902C0000902E00009030B7
-:1065F0000000903200009034000090360000903887
-:106600000000903A0000903C0000903E0000904056
-:106610000000904200009044000090460000904826
-:106620000000904A0000904C0000904E00009050F6
-:1066300000009052000090540000905600009058C6
-:106640000000905A0000905C0000905E0000906096
-:106650000000906200009064000090660000906866
-:106660000000906A0000906C0000906E0000907036
-:106670000000907200009074000090760000907806
-:106680000000907A0000907C0000907E00009080D6
-:1066900000009082000090840000908600009088A6
-:1066A0000000908A0000908C0000908E0000909076
-:1066B0000000909200009094000090960000909846
-:1066C0000000909A0000909C0000909E000090A016
-:1066D000000090A2000090A4000090A6000090A8E6
-:1066E000000090AA000090AC000090AE000090B0B6
-:1066F000000090B2000090B4000090B6000090B886
-:10670000000090BA000090BC000090BE000090C055
-:10671000000090C2000090C4000090C6000090C825
-:10672000000090CA000090CC000090CE000090D0F5
-:10673000000090D2000090D4000090D6000090D8C5
-:10674000000090DA000090DC000090DE000090E095
-:10675000000090E2000090E4000090E6000090E865
-:10676000000090EA000090EC000090EE000090F035
-:10677000000090F2000090F4000090F6000090F805
-:10678000000090FA000090FC000090FE00009100D4
-:1067900000009102000091040000910600009108A1
-:1067A0000000910A0000910C0000910E0000911071
-:1067B0000000911200009114000091160000911841
-:1067C0000000911A0000911C0000911E0000912011
-:1067D00000009122000091240000912600009128E1
-:1067E0000000912A0000912C0000912E00009130B1
-:1067F0000000913200009134000091360000913881
-:106800000000913A0000913C0000913E0000914050
-:106810000000914200009144000091460000914820
-:106820000000914A0000914C0000914E00009150F0
-:1068300000009152000091540000915600009158C0
-:106840000000915A0000915C0000915E0000916090
-:106850000000916200009164000091660000916860
-:106860000000916A0000916C0000916E0000917030
-:106870000000917200009174000091760000917800
-:106880000000917A0000917C0000917E00009180D0
-:1068900000009182000091840000918600009188A0
-:1068A0000000918A0000918C0000918E0000919070
-:1068B0000000919200009194000091960000919840
-:1068C0000000919A0000919C0000919E000091A010
-:1068D000000091A2000091A4000091A6000091A8E0
-:1068E000000091AA000091AC000091AE000091B0B0
-:1068F000000091B2000091B4000091B6000091B880
-:10690000000091BA000091BC000091BE000091C04F
-:10691000000091C2000091C4000091C6000091C81F
-:10692000000091CA000091CC000091CE000091D0EF
-:10693000000091D2000091D4000091D6000091D8BF
-:10694000000091DA000091DC000091DE000091E08F
-:10695000000091E2000091E4000091E6000091E85F
-:10696000000091EA000091EC000091EE000091F02F
-:10697000000091F2000091F4000091F6000091F8FF
-:10698000000091FA000091FC000091FEFFFFFFFF64
-:10699000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF07
-:1069A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7
-:1069B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE7
-:1069C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD7
-:1069D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7
-:1069E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB7
-:1069F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA7
-:106A0000FFFFFFFFFFFFFFFFFFFFFFFF000000038F
-:106A100000BEBC20000000000000000500000003D4
-:106A200000BEBC20000000000000000500000003C4
-:106A300000BEBC20000000000000000500000003B4
-:106A400000BEBC20000000000000000500000003A4
-:106A500000BEBC2000000000000000050000000394
-:106A600000BEBC2000000000000000050000000384
-:106A700000BEBC2000000000000000050000000374
-:106A800000BEBC2000000000000000050000200047
-:106A9000000040C000006180000082400000A300B0
-:106AA0000000C3C00000E480000105400001260092
-:106AB000000146C000016780000188400001A90074
-:106AC0000001C9C00001EA8000020B4000022C0056
-:106AD00000024CC000026D8000028E400002AF0038
-:106AE0000002CFC00002F0800000114000008000D2
-:106AF000000103800001870000020A8000028E006E
-:106B000000031180000395000004188000049C001D
-:106B100000051F800005A300000626800006AA00CD
-:106B200000072D800007B100000834800008B8007D
-:106B300000093B800009BF00000A4280000AC6002D
-:106B4000000B4980000BCD00000C5080000CD400DD
-:106B5000000D578000005B0000007FF800007FF808
-:106B60000000022A000035000000FF0000000000C5
-:106B70000000FF00000000000000FF000000000017
-:106B80000000FF00000000000000FF000000000007
-:106B90000000FF00000000000000FF0000000000F7
-:106BA0000000FF00000000000000FF0000000000E7
-:106BB0000000FF00000000000000FF0000000000D7
-:106BC0000000FF00000000000000FF0000000000C7
-:106BD0000000FF00000000000000FF0000000000B7
-:106BE0000000FF00000000000000FF0000000000A7
-:106BF0000000FF00000000000000FF000000000097
-:106C00000000FF00000000000000FF000000000086
-:106C10000000FF00000000000000FF000000000076
-:106C20000000FF00000000000000FF000000000066
-:106C30000000FF00000000000000FF000000000056
-:106C40000000FF00000000000000FF000000000046
-:106C50000000FF00000000000000FF000000000036
-:106C60000000FF00000000000000FF000000000026
-:106C70000000FF00000000000000FF000000000016
-:106C80000000FF00000000000000FF000000000006
-:106C90000000FF00000000000000FF0000000000F6
-:106CA0000000FF00000000000000FF0000000000E6
-:106CB0000000FF00000000000000FF0000000000D6
-:106CC0000000FF00000000000000FF0000000000C6
-:106CD0000000FF00000000000000FF0000000000B6
-:106CE0000000FF00000000000000FF0000000000A6
-:106CF0000000FF00000000000000FF000000000096
-:106D00000000FF00000000000000FF000000000085
-:106D10000000FF00000000000000FF000000000075
-:106D20000000FF00000000000000FF000000000065
-:106D30000000FF00000000000000FF000000000055
-:106D40000000FF00000000000000FF000000000045
-:106D50000000FF00000000000000FF000000000035
-:106D60000000FF00000000000000FF000000000025
-:106D70000000FF00000000000000FF000000000015
-:106D80000000FF00000000000000FF000000000005
-:106D90000000FF00000000000000FF0000000000F5
-:106DA0000000FF00000019000000000000000000CB
-:106DB000FFFFFFFF000000000393870000000000BA
-:106DC0000393870000007FF800007FF800000BA30A
-:106DD00000001500000000FF000000FF000000FFA1
-:106DE000000000FF000000FF000000FF000000FFA7
-:106DF000000000FF0000FF00000000000000FF0096
-:106E0000000000000000FF00000000000000FF0084
-:106E1000000000000000FF00000000000000FF0074
-:106E2000000000000000FF00000000000000FF0064
-:106E3000000000000000FF00000000000000FF0054
-:106E4000000000000000FF00000000000000FF0044
-:106E5000000000000000FF00000000000000FF0034
-:106E6000000000000000FF00000000000000FF0024
-:106E7000000000000000FF00000000000000FF0014
-:106E8000000000000000FF00000000000000FF0004
-:106E9000000000000000FF00000000000000FF00F4
-:106EA000000000000000FF00000000000000FF00E4
-:106EB000000000000000FF00000000000000FF00D4
-:106EC000000000000000FF00000000000000FF00C4
-:106ED000000000000000FF00000000000000FF00B4
-:106EE000000000000000FF00000000000000FF00A4
-:106EF000000000000000FF00000000000000FF0094
-:106F0000000000000000FF00000000000000FF0083
-:106F1000000000000000FF00000000000000FF0073
-:106F2000000000000000FF00000000000000FF0063
-:106F3000000000000000FF00000000000000FF0053
-:106F4000000000000000FF00000000000000FF0043
-:106F5000000000000000FF00000000000000FF0033
-:106F6000000000000000FF00000000000000FF0023
-:106F7000000000000000FF00000000000000FF0013
-:106F8000000000000000FF00000000000000FF0003
-:106F9000000000000000FF00000000000000FF00F3
-:106FA000000000000000FF00000000000000FF00E3
-:106FB000000000000000FF00000000000000FF00D3
-:106FC000000000000000FF00000000000000FF00C3
-:106FD000000000000000FF00000000000000FF00B3
-:106FE000000000000000FF00000000000000FF00A3
-:106FF000000000000000FF00000000000000FF0093
-:10700000000000000000FF00000000000000FF0082
-:10701000000000000000FF00000000000000FF0072
-:10702000000000000000FF00000000000000FF0062
-:1070300000000000FFFFFFFFFFFFFFFFFFFFFFFF5C
-:10704000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
-:10705000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
-:10706000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
-:10707000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
-:10708000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10
-:10709000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
-:1070A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
-:1070B000FFFFFFFF00000000000028AD00002918BE
-:1070C0000000291900000005000000070000FF0073
-:1070D0000FFFFFFF0000FF000FFFFFFF000000FF9A
-:1070E0000000FF000000FF000FFFFFFF0000FF0097
-:1070F0000FFFFFFF000000FF0000FF000000FF0087
-:107100000FFFFFFF0000FF000FFFFFFF000000FF69
-:107110000000FF000000FF000FFFFFFF0000FF0066
-:107120000FFFFFFF000000FF0000FF000000FF0056
-:107130000FFFFFFF0000FF000FFFFFFF000000FF39
-:107140000000FF000000FF000FFFFFFF0000FF0036
-:107150000FFFFFFF000000FF0000FF000000FF0026
-:107160000FFFFFFF0000FF000FFFFFFF000000FF09
-:107170000000FF000000FF000FFFFFFF0000FF0006
-:107180000FFFFFFF000000FF0000FF000000FF00F6
-:107190000FFFFFFF0000FF000FFFFFFF000000FFD9
-:1071A0000000FF000000FF000FFFFFFF0000FF00D6
-:1071B0000FFFFFFF000000FF0000FF000000FF00C6
-:1071C0000FFFFFFF0000FF000FFFFFFF000000FFA9
-:1071D0000000FF000000FF000FFFFFFF0000FF00A6
-:1071E0000FFFFFFF000000FF0000FF000000FF0096
-:1071F0000FFFFFFF0000FF000FFFFFFF000000FF79
-:107200000000FF000000FF000FFFFFFF0000FF0075
-:107210000FFFFFFF000000FF0000FF000000FF0065
-:107220000FFFFFFF0000FF000FFFFFFF000000FF48
-:107230000000FF000000FF000FFFFFFF0000FF0045
-:107240000FFFFFFF000000FF0000FF000000FF0035
-:107250000FFFFFFF0000FF000FFFFFFF000000FF18
-:107260000000FF000000FF000FFFFFFF0000FF0015
-:107270000FFFFFFF000000FF0000FF000000FF0005
-:107280000FFFFFFF0000FF000FFFFFFF000000FFE8
-:107290000000FF000000FF000FFFFFFF0000FF00E5
-:1072A0000FFFFFFF000000FF0000FF000000FF00D5
-:1072B0000FFFFFFF0000FF000FFFFFFF000000FFB8
-:1072C0000000FF000000FF000FFFFFFF0000FF00B5
-:1072D0000FFFFFFF000000FF0000FF000000FF00A5
-:1072E0000FFFFFFF0000FF000FFFFFFF000000FF88
-:1072F0000000FF000000FF000FFFFFFF0000FF0085
-:107300000FFFFFFF000000FF0000FF000000FF0074
-:107310000FFFFFFF0000FF000FFFFFFF000000FF57
-:107320000000FF000000FF000FFFFFFF0000FF0054
-:107330000FFFFFFF000000FF0000FF000000FF0044
-:107340000FFFFFFF0000FF000FFFFFFF000000FF27
-:107350000000FF000000FF000FFFFFFF0000FF0024
-:107360000FFFFFFF000000FF0000FF000000FF0014
-:107370000FFFFFFF0000FF000FFFFFFF000000FFF7
-:107380000000FF000000FF000FFFFFFF0000FF00F4
-:107390000FFFFFFF000000FF0000FF000000FF00E4
-:1073A0000FFFFFFF0000FF000FFFFFFF000000FFC7
-:1073B0000000FF000000FF000FFFFFFF0000FF00C4
-:1073C0000FFFFFFF000000FF0000FF000000FF00B4
-:1073D0000FFFFFFF0000FF000FFFFFFF000000FF97
-:1073E0000000FF000000FF000FFFFFFF0000FF0094
-:1073F0000FFFFFFF000000FF0000FF000000FF0084
-:107400000FFFFFFF0000FF000FFFFFFF000000FF66
-:107410000000FF000000FF000FFFFFFF0000FF0063
-:107420000FFFFFFF000000FF0000FF000000FF0053
-:107430000FFFFFFF0000FF000FFFFFFF000000FF36
-:107440000000FF000000FF000FFFFFFF0000FF0033
-:107450000FFFFFFF000000FF0000FF000000FF0023
-:107460000FFFFFFF0000FF000FFFFFFF000000FF06
-:107470000000FF000000FF000FFFFFFF0000FF0003
-:107480000FFFFFFF000000FF0000FF000000FF00F3
-:107490000FFFFFFF0000FF000FFFFFFF000000FFD6
-:1074A0000000FF000000FF000FFFFFFF0000FF00D3
-:1074B0000FFFFFFF000000FF0000FF000000FF00C3
-:1074C0000FFFFFFF0000FF000FFFFFFF000000FFA6
-:1074D0000000FF000000FF000FFFFFFF0000FF00A3
-:1074E0000FFFFFFF000000FF0000FF000000FF0093
-:1074F0000FFFFFFF0000FF000FFFFFFF000000FF76
-:107500000000FF000000FF000FFFFFFF0000FF0072
-:107510000FFFFFFF000000FF0000FF000000FF0062
-:107520000FFFFFFF0000FF000FFFFFFF000000FF45
-:107530000000FF000000FF000FFFFFFF0000FF0042
-:107540000FFFFFFF000000FF0000FF000000FF0032
-:107550000FFFFFFF0000FF000FFFFFFF000000FF15
-:107560000000FF000000FF000FFFFFFF0000FF0012
-:107570000FFFFFFF000000FF0000FF000000FF0002
-:107580000FFFFFFF0000FF000FFFFFFF000000FFE5
-:107590000000FF000000FF000FFFFFFF0000FF00E2
-:1075A0000FFFFFFF000000FF0000FF000000FF00D2
-:1075B0000FFFFFFF0000FF000FFFFFFF000000FFB5
-:1075C0000000FF000000FF000FFFFFFF0000FF00B2
-:1075D0000FFFFFFF000000FF0000FF000000FF00A2
-:1075E0000FFFFFFF0000FF000FFFFFFF000000FF85
-:1075F0000000FF000000FF000FFFFFFF0000FF0082
-:107600000FFFFFFF000000FF0000FF000000FF0071
-:107610000FFFFFFF0000FF000FFFFFFF000000FF54
-:107620000000FF000000FF000FFFFFFF0000FF0051
-:107630000FFFFFFF000000FF0000FF000000FF0041
-:107640000FFFFFFF0000FF000FFFFFFF000000FF24
-:107650000000FF000000FF000FFFFFFF0000FF0021
-:107660000FFFFFFF000000FF0000FF000000FF0011
-:107670000FFFFFFF0000FF000FFFFFFF000000FFF4
-:107680000000FF000000FF000FFFFFFF0000FF00F1
-:107690000FFFFFFF000000FF0000FF000000FF00E1
-:1076A0000FFFFFFF0000FF000FFFFFFF000000FFC4
-:1076B0000000FF000000FF000FFFFFFF0000FF00C1
-:1076C0000FFFFFFF000000FF0000FF000000FF00B1
-:1076D0000FFFFFFF0000FF000FFFFFFF000000FF94
-:1076E0000000FF000000FF000FFFFFFF0000FF0091
-:1076F0000FFFFFFF000000FF0000FF000000FF0081
-:107700000FFFFFFF0000FF000FFFFFFF000000FF63
-:107710000000FF000000FF000FFFFFFF0000FF0060
-:107720000FFFFFFF000000FF0000FF000000FF0050
-:107730000FFFFFFF0000FF000FFFFFFF000000FF33
-:107740000000FF000000FF000FFFFFFF0000FF0030
-:107750000FFFFFFF000000FF0000FF000000FF0020
-:107760000FFFFFFF0000FF000FFFFFFF000000FF03
-:107770000000FF000000FF000FFFFFFF0000FF0000
-:107780000FFFFFFF000000FF0000FF000000FF00F0
-:107790000FFFFFFF0000FF000FFFFFFF000000FFD3
-:1077A0000000FF000000FF000FFFFFFF0000FF00D0
-:1077B0000FFFFFFF000000FF0000FF000000FF00C0
-:1077C0000FFFFFFF0000FF000FFFFFFF000000FFA3
-:1077D0000000FF000000FF000FFFFFFF0000FF00A0
-:1077E0000FFFFFFF000000FF0000FF000000FF0090
-:1077F0000FFFFFFF0000FF000FFFFFFF000000FF73
-:107800000000FF000000FF000FFFFFFF0000FF006F
-:107810000FFFFFFF000000FF0000FF000000FF005F
-:107820000FFFFFFF0000FF000FFFFFFF000000FF42
-:107830000000FF000000FF000FFFFFFF0000FF003F
-:107840000FFFFFFF000000FF0000FF000000FF002F
-:107850000FFFFFFF0000FF000FFFFFFF000000FF12
-:107860000000FF000000FF000FFFFFFF0000FF000F
-:107870000FFFFFFF000000FF0000FF000000FF00FF
-:107880000FFFFFFF0000FF000FFFFFFF000000FFE2
-:107890000000FF000000FF000FFFFFFF0000FF00DF
-:1078A0000FFFFFFF000000FF0000FF000000FF00CF
-:1078B0000FFFFFFF0000FF000FFFFFFF000000FFB2
-:1078C0000000FF000000FF000FFFFFFF0000FF00AF
-:1078D0000FFFFFFF000000FF0000FF000000FF009F
-:1078E0000FFFFFFF0000FF000FFFFFFF000000FF82
-:1078F0000000FF000000FF000FFFFFFF0000FF007F
-:107900000FFFFFFF000000FF0000FF000000FF006E
-:107910000FFFFFFF0000FF000FFFFFFF000000FF51
-:107920000000FF000000FF000FFFFFFF0000FF004E
-:107930000FFFFFFF000000FF0000FF000000FF003E
-:107940000FFFFFFF0000FF000FFFFFFF000000FF21
-:107950000000FF000000FF000FFFFFFF0000FF001E
-:107960000FFFFFFF000000FF0000FF000000FF000E
-:107970000FFFFFFF0000FF000FFFFFFF000000FFF1
-:107980000000FF000000FF000FFFFFFF0000FF00EE
-:107990000FFFFFFF000000FF0000FF000000FF00DE
-:1079A0000FFFFFFF0000FF000FFFFFFF000000FFC1
-:1079B0000000FF000000FF000FFFFFFF0000FF00BE
-:1079C0000FFFFFFF000000FF0000FF000000FF00AE
-:1079D0000FFFFFFF0000FF000FFFFFFF000000FF91
-:1079E0000000FF000000FF000FFFFFFF0000FF008E
-:1079F0000FFFFFFF000000FF0000FF000000FF007E
-:107A00000FFFFFFF0000FF000FFFFFFF000000FF60
-:107A10000000FF000000FF000FFFFFFF0000FF005D
-:107A20000FFFFFFF000000FF0000FF000000FF004D
-:107A30000FFFFFFF0000FF000FFFFFFF000000FF30
-:107A40000000FF000000FF000FFFFFFF0000FF002D
-:107A50000FFFFFFF000000FF0000FF000000FF001D
-:107A60000FFFFFFF0000FF000FFFFFFF000000FF00
-:107A70000000FF000000FF000FFFFFFF0000FF00FD
-:107A80000FFFFFFF000000FF0000FF000000FF00ED
-:107A90000FFFFFFF0000FF000FFFFFFF000000FFD0
-:107AA0000000FF000000FF000FFFFFFF0000FF00CD
-:107AB0000FFFFFFF000000FF0000FF000000FF00BD
-:107AC0000FFFFFFF0000FF000FFFFFFF000000FFA0
-:107AD0000000FF000000FF000FFFFFFF0000FF009D
-:107AE0000FFFFFFF000000FF0000FF000000FF008D
-:107AF0000FFFFFFF0000FF000FFFFFFF000000FF70
-:107B00000000FF000000FF000FFFFFFF0000FF006C
-:107B10000FFFFFFF000000FF0000FF000000FF005C
-:107B20000FFFFFFF0000FF000FFFFFFF000000FF3F
-:107B30000000FF000000FF000FFFFFFF0000FF003C
-:107B40000FFFFFFF000000FF0000FF000000FF002C
-:107B50000FFFFFFF0000FF000FFFFFFF000000FF0F
-:107B60000000FF000000FF000FFFFFFF0000FF000C
-:107B70000FFFFFFF000000FF0000FF000000FF00FC
-:107B80000FFFFFFF0000FF000FFFFFFF000000FFDF
-:107B90000000FF000000FF000FFFFFFF0000FF00DC
-:107BA0000FFFFFFF000000FF0000FF000000FF00CC
-:107BB0000FFFFFFF0000FF000FFFFFFF000000FFAF
-:107BC0000000FF000000FF000FFFFFFF0000FF00AC
-:107BD0000FFFFFFF000000FF0000FF000000FF009C
-:107BE0000FFFFFFF0000FF000FFFFFFF000000FF7F
-:107BF0000000FF000000FF000FFFFFFF0000FF007C
-:107C00000FFFFFFF000000FF0000FF000000FF006B
-:107C10000FFFFFFF0000FF000FFFFFFF000000FF4E
-:107C20000000FF000000FF000FFFFFFF0000FF004B
-:107C30000FFFFFFF000000FF0000FF000000FF003B
-:107C40000FFFFFFF0000FF000FFFFFFF000000FF1E
-:107C50000000FF000000FF000FFFFFFF0000FF001B
-:107C60000FFFFFFF000000FF0000FF000000FF000B
-:107C70000FFFFFFF0000FF000FFFFFFF000000FFEE
-:107C80000000FF000000FF000FFFFFFF0000FF00EB
-:107C90000FFFFFFF000000FF0000FF000000FF00DB
-:107CA0000FFFFFFF0000FF000FFFFFFF000000FFBE
-:107CB0000000FF000000FF000FFFFFFF0000FF00BB
-:107CC0000FFFFFFF000000FF0000FF000000FF00AB
-:107CD0000FFFFFFF0000FF000FFFFFFF000000FF8E
-:107CE0000000FF000000FF000FFFFFFF0000FF008B
-:107CF0000FFFFFFF000000FF0000FF000000FF007B
-:107D00000FFFFFFF0000FF000FFFFFFF000000FF5D
-:107D10000000FF000000FF000FFFFFFF0000FF005A
-:107D20000FFFFFFF000000FF0000FF000000FF004A
-:107D30000FFFFFFF0000FF000FFFFFFF000000FF2D
-:107D40000000FF000000FF000FFFFFFF0000FF002A
-:107D50000FFFFFFF000000FF0000FF000000FF001A
-:107D60000FFFFFFF0000FF000FFFFFFF000000FFFD
-:107D70000000FF000000FF000FFFFFFF0000FF00FA
-:107D80000FFFFFFF000000FF0000FF0000001000D9
-:107D900000002080000031000000418000005200FF
-:107DA00000006280000073000000838000009400E7
-:107DB0000000A4800000B5000000C5800000D600CF
-:107DC0000000E6800000F7000001078000011800B5
-:107DD00000012880000139000001498000015A009B
-:107DE00000016A8000017B0000018B8000019C0083
-:107DF0000001AC800001BD000001CD800001DE006B
-:107E00000001EE800001FF0000000F8000007FF8FD
-:107E100000007FF8000005F60000350010000000AB
-:107E2000000028AD000029180000291900000005F5
-:107E3000000000060001000100090206CCCCCCC9FC
-:107E40007058103C0000FF00000000000000FF0020
-:107E5000000000000000FF00000000000000FF0024
-:107E6000000000000000FF00000000000000FF0014
-:107E7000000000000000FF00000000000000FF0004
-:107E8000000000000000FF00000000000000FF00F4
-:107E9000000000000000FF00000000000000FF00E4
-:107EA000000000000000FF00000000000000FF00D4
-:107EB000000000000000FF00000000000000FF00C4
-:107EC000000000000000FF00000000000000FF00B4
-:107ED000000000000000FF00000000000000FF00A4
-:107EE000000000000000FF00000000000000FF0094
-:107EF000000000000000FF00000000000000FF0084
-:107F0000000000000000FF00000000000000FF0073
-:107F1000000000000000FF00000000000000FF0063
-:107F2000000000000000FF00000000000000FF0053
-:107F3000000000000000FF00000000000000FF0043
-:107F4000000000000000FF00000000000000FF0033
-:107F5000000000000000FF00000000000000FF0023
-:107F6000000000000000FF00000000000000FF0013
-:107F7000000000000000FF00000000000000FF0003
-:107F8000000000000000FF00000000000000FF00F3
-:107F9000000000000000FF00000000000000FF00E3
-:107FA000000000000000FF00000000000000FF00D3
-:107FB000000000000000FF00000000000000FF00C3
-:107FC000000000000000FF00000000000000FF00B3
-:107FD000000000000000FF00000000000000FF00A3
-:107FE000000000000000FF00000000000000FF0093
-:107FF000000000000000FF00000000000000FF0083
-:10800000000000000000FF00000000000000FF0072
-:10801000000000000000FF00000000000000FF0062
-:10802000000000000000FF00000000000000FF0052
-:10803000000000000000FF00000000000000FF0042
-:10804000000000000000FF00000000000000FF0032
-:10805000000000000000FF00000000000000FF0022
-:10806000000000000000FF00000000000000FF0012
-:10807000000000000000FF00000000000000FF0002
-:108080000000000000000001CCCC0201CCCCCCCC24
-:10809000CCCC0201CCCCCCCCCCCC0201CCCCCCCC4A
-:1080A000CCCC0201CCCCCCCCCCCC0201CCCCCCCC3A
-:1080B000CCCC0201CCCCCCCCCCCC0201CCCCCCCC2A
-:1080C000CCCC0201CCCCCCCC00000000FFFFFFFFE9
-:1080D000030303031342020250505020706080508B
-:1080E0000200020006040604000E0000011600D67D
-:1080F000002625A0002625A0002625A0002625A0D4
-:1081000000720000012300F3002625A0002625A010
-:10811000002625A0002625A00000FFFF000000008B
-:108120000000FFFF000000000000FFFF0000000053
-:108130000000FFFF000000000000FFFF0000000043
-:108140000000FFFF000000000000FFFF0000000033
-:108150000000FFFF000000000000FFFF0000000023
-:108160000000FFFF000000000000FFFF0000000013
-:108170000000FFFF000000000000FFFF0000000003
-:108180000000FFFF000000000000FFFF00000000F3
-:108190000000FFFF000000000000FFFF00000000E3
-:1081A0000000FFFF000000000000FFFF00000000D3
-:1081B0000000FFFF000000000000FFFF00000000C3
-:1081C0000000FFFF000000000000FFFF00000000B3
-:1081D0000000FFFF000000000000FFFF00000000A3
-:1081E0000000FFFF000000000000FFFF0000000093
-:1081F0000000FFFF000000000000FFFF0000000083
-:108200000000FFFF000000000000FFFF0000000072
-:108210000000FFFF000000000000FFFF0000000062
-:108220000000FFFF000000000000FFFF0000000052
-:108230000000FFFF000000000000FFFF0000000042
-:108240000000FFFF000000000000FFFF0000000032
-:108250000000FFFF000000000000FFFF0000000022
-:108260000000FFFF000000000000FFFF0000000012
-:108270000000FFFF000000000000FFFF0000000002
-:108280000000FFFF000000000000FFFF00000000F2
-:108290000000FFFF000000000000FFFF00000000E2
-:1082A0000000FFFF000000000000FFFF00000000D2
-:1082B0000000FFFF000000000000FFFF00000000C2
-:1082C0000000FFFF000000000000FFFF00000000B2
-:1082D0000000FFFF000000000000FFFF00000000A2
-:1082E0000000FFFF000000000000FFFF0000000092
-:1082F0000000FFFF000000000000FFFF0000000082
-:108300000000FFFF000000000000FFFF0000000071
-:108310000000FFFF00000000FFFFFFF3318FFFFFB1
-:108320000C30C30CC30C30C3CF3CF300F3CF3CF391
-:108330000000CF3CCDCDCDCDFFFFFFF130EFFFFFF3
-:108340000C30C30CC30C30C3CF3CF300F3CF3CF371
-:108350000001CF3CCDCDCDCDFFFFFFF6305FFFFF5D
-:108360000C30C30CC30C30C3CF3CF300F3CF3CF351
-:108370000002CF3CCDCDCDCDFFFFF4061CBFFFFFEB
-:108380000C30C305C30C30C3CF300014F3CF3CF323
-:108390000004CF3CCDCDCDCDFFFFFFF2304FFFFF2E
-:1083A0000C30C30CC30C30C3CF3CF300F3CF3CF311
-:1083B0000008CF3CCDCDCDCDFFFFFFFA302FFFFF22
-:1083C0000C30C30CC30C30C3CF3CF300F3CF3CF3F1
-:1083D0000010CF3CCDCDCDCDFFFFFFF731EFFFFF3C
-:1083E0000C30C30CC30C30C3CF3CF300F3CF3CF3D1
-:1083F0000020CF3CCDCDCDCDFFFFFFF5302FFFFFCF
-:108400000C30C30CC30C30C3CF3CF300F3CF3CF3B0
-:108410000040CF3CCDCDCDCDFFFFFFF3318FFFFF2F
-:108420000C30C30CC30C30C3CF3CF300F3CF3CF390
-:108430000000CF3CCDCDCDCDFFFFFFF1310FFFFFD1
-:108440000C30C30CC30C30C3CF3CF300F3CF3CF370
-:108450000001CF3CCDCDCDCDFFFFFFF6305FFFFF5C
-:108460000C30C30CC30C30C3CF3CF300F3CF3CF350
-:108470000002CF3CCDCDCDCDFFFFF4061CBFFFFFEA
-:108480000C30C305C30C30C3CF300014F3CF3CF322
-:108490000004CF3CCDCDCDCDFFFFFFF2304FFFFF2D
-:1084A0000C30C30CC30C30C3CF3CF300F3CF3CF310
-:1084B0000008CF3CCDCDCDCDFFFFFFFA302FFFFF21
-:1084C0000C30C30CC30C30C3CF3CF300F3CF3CF3F0
-:1084D0000010CF3CCDCDCDCDFFFFFFF730EFFFFF3C
-:1084E0000C30C30CC30C30C3CF3CF300F3CF3CF3D0
-:1084F0000020CF3CCDCDCDCDFFFFFFF5304FFFFFAE
-:108500000C30C30CC30C30C3CF3CF300F3CF3CF3AF
-:108510000040CF3CCDCDCDCDFFFFFFFF30CFFFFFE3
-:108520000C30C30CC30C30C3CF3CF3CCF3CF3CF3C3
-:108530000000CF3CCDCDCDCDFFFFFFFF30CFFFFF03
-:108540000C30C30CC30C30C3CF3CF3CCF3CF3CF3A3
-:108550000001CF3CCDCDCDCDFFFFFFFF30CFFFFFE2
-:108560000C30C30CC30C30C3CF3CF3CCF3CF3CF383
-:108570000002CF3CCDCDCDCDFFFFFFFF30CFFFFFC1
-:108580000C30C30CC30C30C3CF3CF3CCF3CF3CF363
-:108590000004CF3CCDCDCDCDFFFFFFFF30CFFFFF9F
-:1085A0000C30C30CC30C30C3CF3CF3CCF3CF3CF343
-:1085B0000008CF3CCDCDCDCDFFFFFFFF30CFFFFF7B
-:1085C0000C30C30CC30C30C3CF3CF3CCF3CF3CF323
-:1085D0000010CF3CCDCDCDCDFFFFFFFF30CFFFFF53
-:1085E0000C30C30CC30C30C3CF3CF3CCF3CF3CF303
-:1085F0000020CF3CCDCDCDCDFFFFFFFF30CFFFFF23
-:108600000C30C30CC30C30C3CF3CF3CCF3CF3CF3E2
-:108610000040CF3CCDCDCDCDFFFFFFF3320FFFFFAC
-:108620000C30C30CC30C30C3CF3CF300F3CF3CF38E
-:108630000000CF3CCDCDCDCDFFFFFFF1310FFFFFCF
-:108640000C30C30CC30C30C3CF3CF300F3CF3CF36E
-:108650000001CF3CCDCDCDCDFFFFFFF6305FFFFF5A
-:108660000C30C30CC30C30C3CF3CF300F3CF3CF34E
-:108670000002CF3CCDCDCDCDFFFFF4061CBFFFFFE8
-:108680000C30C305C30C30C3CF300014F3CF3CF320
-:108690000004CF3CCDCDCDCDFFFFFFF2304FFFFF2B
-:1086A0000C30C30CC30C30C3CF3CF300F3CF3CF30E
-:1086B0000008CF3CCDCDCDCDFFFFFF8A042FFFFFBB
-:1086C0000C30C30CC30C30C3CF3CC000F3CF3CF321
-:1086D0000010CF3CCDCDCDCDFFFFFF9705CFFFFFE5
-:1086E0000C30C30CC30C30C3CF3CC000F3CF3CF301
-:1086F0000020CF3CCDCDCDCDFFFFFFF5310FFFFFEB
-:108700000C30C30CC30C30C3CF3CF300F3CF3CF3AD
-:108710000040CF3CCDCDCDCDFFFFFFF3320FFFFFAB
-:108720000C30C30CC30C30C3CF3CF300F3CF3CF38D
-:108730000000CF3CCDCDCDCDFFFFFFF1302FFFFFAF
-:108740000C30C30CC30C30C3CF3CF300F3CF3CF36D
-:108750000001CF3CCDCDCDCDFFFFFFF6305FFFFF59
-:108760000C30C30CC30C30C3CF3CF300F3CF3CF34D
-:108770000002CF3CCDCDCDCDFFFFFF061CBFFFFFDC
-:108780000C30C30CC30C30C3CF3CC014F3CF3CF34C
-:108790000004CF3CCDCDCDCDFFFFFFF2304FFFFF2A
-:1087A0000C30C30CC30C30C3CF3CF300F3CF3CF30D
-:1087B0000008CF3CCDCDCDCDFFFFFFFA302FFFFF1E
-:1087C0000C30C30CC30C30C3CF3CF300F3CF3CF3ED
-:1087D0000010CF3CCDCDCDCDFFFFFFF731CFFFFF58
-:1087E0000C30C30CC30C30C3CF3CF300F3CF3CF3CD
-:1087F0000020CF3CCDCDCDCDFFFFFFFF30CFFFFF21
-:108800000C30C30CC30C30C3CF3CF3CCF3CF3CF3E0
-:108810000040CF3CCDCDCDCDFFFFFFFF30CFFFFFE0
-:108820000C30C30CC30C30C3CF3CF3CCF3CF3CF3C0
-:108830000000CF3CCDCDCDCDFFFFFFFF30CFFFFF00
-:108840000C30C30CC30C30C3CF3CF3CCF3CF3CF3A0
-:108850000001CF3CCDCDCDCDFFFFFFFF30CFFFFFDF
-:108860000C30C30CC30C30C3CF3CF3CCF3CF3CF380
-:108870000002CF3CCDCDCDCDFFFFFFFF30CFFFFFBE
-:108880000C30C30CC30C30C3CF3CF3CCF3CF3CF360
-:108890000004CF3CCDCDCDCDFFFFFFFF30CFFFFF9C
-:1088A0000C30C30CC30C30C3CF3CF3CCF3CF3CF340
-:1088B0000008CF3CCDCDCDCDFFFFFFFF30CFFFFF78
-:1088C0000C30C30CC30C30C3CF3CF3CCF3CF3CF320
-:1088D0000010CF3CCDCDCDCDFFFFFFFF30CFFFFF50
-:1088E0000C30C30CC30C30C3CF3CF3CCF3CF3CF300
-:1088F0000020CF3CCDCDCDCDFFFFFFFF30CFFFFF20
-:108900000C30C30CC30C30C3CF3CF3CCF3CF3CF3DF
-:108910000040CF3CCDCDCDCDFFFFFFFF30CFFFFFDF
-:108920000C30C30CC30C30C3CF3CF3CCF3CF3CF3BF
-:108930000000CF3CCDCDCDCDFFFFFFFF30CFFFFFFF
-:108940000C30C30CC30C30C3CF3CF3CCF3CF3CF39F
-:108950000001CF3CCDCDCDCDFFFFFFFF30CFFFFFDE
-:108960000C30C30CC30C30C3CF3CF3CCF3CF3CF37F
-:108970000002CF3CCDCDCDCDFFFFFFFF30CFFFFFBD
-:108980000C30C30CC30C30C3CF3CF3CCF3CF3CF35F
-:108990000004CF3CCDCDCDCDFFFFFFFF30CFFFFF9B
-:1089A0000C30C30CC30C30C3CF3CF3CCF3CF3CF33F
-:1089B0000008CF3CCDCDCDCDFFFFFFFF30CFFFFF77
-:1089C0000C30C30CC30C30C3CF3CF3CCF3CF3CF31F
-:1089D0000010CF3CCDCDCDCDFFFFFFFF30CFFFFF4F
-:1089E0000C30C30CC30C30C3CF3CF3CCF3CF3CF3FF
-:1089F0000020CF3CCDCDCDCDFFFFFFFF30CFFFFF1F
-:108A00000C30C30CC30C30C3CF3CF3CCF3CF3CF3DE
-:108A10000040CF3CCDCDCDCDFFFFFFFF30CFFFFFDE
-:108A20000C30C30CC30C30C3CF3CF3CCF3CF3CF3BE
-:108A30000000CF3CCDCDCDCDFFFFFFFF30CFFFFFFE
-:108A40000C30C30CC30C30C3CF3CF3CCF3CF3CF39E
-:108A50000001CF3CCDCDCDCDFFFFFFFF30CFFFFFDD
-:108A60000C30C30CC30C30C3CF3CF3CCF3CF3CF37E
-:108A70000002CF3CCDCDCDCDFFFFFFFF30CFFFFFBC
-:108A80000C30C30CC30C30C3CF3CF3CCF3CF3CF35E
-:108A90000004CF3CCDCDCDCDFFFFFFFF30CFFFFF9A
-:108AA0000C30C30CC30C30C3CF3CF3CCF3CF3CF33E
-:108AB0000008CF3CCDCDCDCDFFFFFFFF30CFFFFF76
-:108AC0000C30C30CC30C30C3CF3CF3CCF3CF3CF31E
-:108AD0000010CF3CCDCDCDCDFFFFFFFF30CFFFFF4E
-:108AE0000C30C30CC30C30C3CF3CF3CCF3CF3CF3FE
-:108AF0000020CF3CCDCDCDCDFFFFFFFF30CFFFFF1E
-:108B00000C30C30CC30C30C3CF3CF3CCF3CF3CF3DD
-:108B10000040CF3CCDCDCDCD000C0000000700C003
-:108B200000028130000B8158000202100001023067
-:108B3000000F024000010330000C0000000800C0DC
-:108B400000028140000B8168000202200001024007
-:108B500000070250000202C00010000000080100DF
-:108B600000028180000B81A8000202600001828067
-:108B7000000E829800080380001000000001010030
-:108B80000002811000090138000201C8000101E85B
-:108B9000000E01F8000002D8CCCCCCCCCCCCCCCC94
-:108BA000CCCCCCCCCCCCCCCC00002000CCCCCCCC15
-:108BB000CCCCCCCCCCCCCCCCCCCCCCCC0000200005
-:108BC000CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCE5
-:108BD00004002000CCCCCCCCCCCCCCCCCCCCCCCCE1
-:108BE000CCCCCCCC4100200003030303034202029F
-:108BF0005050502070608050131313131342121200
-:108C000050505020706080500301020000000000AE
-:108C100000000000000000001F8B080000000000A2
-:108C2000000BFB51CFC0F0038A0F093230688A2055
-:108C3000F8C4E05C760686751C0C0C5BB849D3075B
-:108C4000C32C0C0C0CDA4CE4E905E1FBBC0C0CAFBA
-:108C50008098850F559C871342FF015AC0C7CAC030
-:108C6000A0C1865DFF3A35043B408581A11C88D9AF
-:108C7000941818CC5411E2D2EA0C0C3380FC04A8EE
-:108C8000D81D201DAB46BE9B47F1E0C1378D51F981
-:108C90005B0DA169012A7E0B4D7E1B54BE4A074223
-:108CA000DF36C66E6EB50E71F69FB546E5AFB4C63B
-:108CB000AFFEAE3D2AFF209AFAAD503E00C5D55B0F
-:108CC000A7D8030000000000000000000000000022
-:108CD0001F8B080000000000000BED7D7F7C14D589
-:108CE000B5F8999DD9D9D9CDEE6608096C20E02454
-:108CF000861AFB82DFE577A841878034B63CDF8A9D
-:108D00005AD3D6F6BB506C551456BF3EE1F56933C5
-:108D1000F941122262049FDAD61F2B554BFB6C8956
-:108D2000942AAD3FDE024AF1F5C743AAD5D7A22F58
-:108D3000FE80AA455FC4D2D87E51DE3DE7DEC9CEB3
-:108D40004C76930DD01F7FBCF081E1CEDC1FE79EF7
-:108D500073EE39E79E73EE8DEA0BC2C7CE05388EEF
-:108D60003FECD913028059D9A771F5BCAEBE99006A
-:108D70004721D2D35D0AD0A68009AC6C1D88A41F00
-:108D800094007F6A14565E2D7F3CDE5D097067D1CA
-:108D9000D7EEC3FA6B2C0502ECD9DD0C9039837D3C
-:108DA0000F453743314011A4B6E277F6937890F53A
-:108DB00037109C9C866876FC32F0D1B80015FAA179
-:108DC00022AA07C765F6CF81E47C18072083FDB38C
-:108DD000067A593FCAF3721AC795E5C5FA8B55D979
-:108DE0007EBC4F595721A389FEF01FF9B2E26438C7
-:108DF0007FFD35072AB73E5D93AD7F06444A0FFDE0
-:108E00001DFB8F020AC123AF07C4C3D130A4E5CA3A
-:108E1000FCFD0C341B5B9FF6231EBF509C989ABF31
-:108E20009E8DA7AE668D9E1DCD3A6402000C64B384
-:108E3000B7963DC3606EAE1DDA6E0148842FCDB08B
-:108E4000089EF6B02F5D5489502701187EFD881FBB
-:108E500009DF2FD1CC1CEDED279432FCD8F36578D7
-:108E60000C02EF0FD8FC1E64FD0571FC1CF8BA085B
-:108E7000C72F63DFAB878E6FCD3CF1F1436702EC08
-:108E80000B23BE4D84017C7A0AE282DE9F9486E940
-:108E900047D05931783F23E1BDA8C6971D97FD0DF6
-:108EA0001A21179F0462256EBEF1F225E2A90CE992
-:108EB0006548AF4FC9F6AB22DD72E0EB4A81AFFEE9
-:108EC000F989A604C3C7DA66B05E73B4936360A67B
-:108ED00073E069B568678FA794B27A39FA076811A9
-:108EE000EBC772D52F14BE9B4E10BE9BFF42F0DD28
-:108EF00026F89D49287AF6CF4F129CDEFE72AD2FE0
-:108F0000B68807CB21256DF990BF4B21FE207BF859
-:108F100035BECEECEFDF073FF5B303250E1BA74DA3
-:108F2000C0D73F9FCBBFB5D3D4F46689E4910BCEB5
-:108F300087517EB1769224F0A1F502F25FD1070A43
-:108F4000C05884CF844404605D7583369CFC015D09
-:108F5000F9539FCD775543F9EEE36C18842B14CE6B
-:108F60008DA7EF0FCAD1CBACD7583F5A90BD3F1D4C
-:108F7000FB2D8D55CC069C1DFDF8C577907CF271BC
-:108F80005CB7C758BDD942CECAD43FC911A8009218
-:108F9000F7B2A84FE3B0FA01362D733A7BE2FB1A21
-:108FA000318E34B45F6FBB0128E1F811F0D8725DE7
-:108FB0008627A89F41789404E1CBFBDECFDEEBE16E
-:108FC000937F7FB265BF9167BC1E89F869A4F6AF35
-:108FD000087E19C29F79E8BA5FAC33057A4D383DF7
-:108FE000CB47367F9D281F9D349FB0E1495FE4E168
-:108FF000130B52B46E5835AB7BDAE8F925079F6442
-:109000009CF5174B63F83C9438F10B834721BED590
-:10901000393C65D34BA93F09D7F819D88328231EBB
-:10902000D87C97D9ED214EEB3584768EA33D9B1CE1
-:10903000C12BC99290FBBCDE0D629DCF6BA8E0F006
-:1090400083E8DF032FEB4F73F627438587CF39DCA7
-:109050001B242EDF58FD0CE1D33BBE2211BC322471
-:109060002C1F6BB7598CEF955FF673BBE86FBD048F
-:109070004DBD61BE9E9638F4618324E484C6D799C1
-:10908000573EF991AF669C385F152AD7174BB9F553
-:109090000EB38A621746F2EB9D629FAD0F323141EB
-:1090A000B751D1FD74A9C445F742E15D7682F04E17
-:1090B0001C0A6F417C76A6E41B959EBCE104E10B83
-:1090C0007AE03B557C3D43F059A1F0DBEB60B4F016
-:1090D000CB43F15BD03A9A3B4AF8369F207ECB7C5B
-:1090E000B69D24E0CBB36EE7097A5BC0F9436176A5
-:1090F00038EE730A85EFD191E103F804FB6BBD6A8A
-:10910000990AD96B0013009E6E79D5B2942C7C26F7
-:1091100070B93EDAF1F78C4C3F31FE5B96599D1DDC
-:10912000FFF996B75CE32B8C7F90D90A1DF7854237
-:10913000E70DEFB9E6FDBAF49E6BDC13C5FBC18207
-:10914000C7FFA36BDEEF4B7F74CF3BCCE67D7AE1AC
-:10915000E3FEFE04F9B152AC97064977E9817CF64B
-:10916000FB0C41D7BBEDFA36BC79EA9F29E06A2FA8
-:10917000B0FE44D1FFE70AACDF2BFAEFC5FA652356
-:10918000D73F5DD44F15585FF2F175984F7FCE975A
-:109190006CFC816BFFD1A6713F88D9A640F09CA1E1
-:1091A0007E13AB21F5ED3E467BAB35A0B79592DF44
-:1091B00084FC226B0012E837F92624EB7CAC1F6399
-:1091C000C74DF761BD238AA677EBC01724FB1E3C71
-:1091D00010D9DC5D991D6FB59C6C929097DAA2FA5C
-:1091E00083E45F493549EC59668575F4DB0C5425F9
-:1091F0005A9696E23C0CDD62FDFCFA8A8B76627927
-:109200009326E9322BFFCB39736FFB0C6B35F0E102
-:10921000CE974EC37AD3C655B592BC3425C44F6998
-:109220005C35E5287B5E7C71561FE03F8B1D6566D3
-:10923000077CB6E9122EFFC5F7CF27DDE54B1A2FC5
-:1092400071B5BF34E1FE9E9D0FF07DC7B9DCFF30E4
-:109250005095FA2F0ED7C72A2DEE5FA0F9EA565483
-:10926000EF66F35CFFE1B5545EDF52ABB7B2F2E7F5
-:10927000AEF4B72C65CFB004BACC9652715CA5F9A8
-:10928000029BAF5AC7768FE73CDB35DBC8BFFF2AAE
-:10929000363DF38C5F9C8593CDB3E9EADC70ABFA85
-:1092A000FB13DE60F6D2C0CEA089F084F7CAE9A035
-:1092B0004474DD3909E9621527397D40AA66CF2358
-:1092C0008D3AA07FA4A13169C8ACBC31A6C5030604
-:1092D000DAC9190DF11E411ACC65EFE3BE20DA633D
-:1092E000AAFE07EA5F17DF7BE255E3D13FF2E3E630
-:1092F000351315B6DE77345BF47CB4B98B9EDB9BFB
-:109300007B262ACC88DFD27C173DEDF9A12431ECF5
-:10931000F9C9B8AF365B91DF06FCCC34423CCEF7DE
-:10932000D1FE7603CA113FCAE1745B14DFD7C1B422
-:109330006E40B9C4E5CBC6F8B6DDF87E633D4C435C
-:10934000926D3437B745D93CAE2B87E9D8F7CE9725
-:109350001FE3DF2B607A8095773536905CED89FBD3
-:10936000D2814A82FF7CE4E79E461F3093078AEB56
-:10937000185C0EBC0662EEF2AE4626B066123ED215
-:1093800001293B7F852D33C4C746B32AE8DC57CF7C
-:10939000DAE76E7F66DA5DDE88ED87F14BCDED733F
-:1093A000D79FF392BBCC24DB2B837CC0F1F8AF3E7C
-:1093B000260F76BF3CDE67E1BC4D3E4FF6E4FEC2B1
-:1093C000982F8DC6E716813F1BBF03112E5F3636DF
-:1093D000733F603E78367EEAAAD8707E03B5B1232B
-:1093E00081FE54B5B1270167E1332D9EBD09A79FCA
-:1093F000D57EBE88C68FC35FD211DB58B2B4360BA0
-:109400008FB7FE785925793750C6BF77C45ED3979A
-:10941000D63AFB93BCDFB5CBC3CEEFDCAF32506E98
-:109420007F3FA22D0DE7683F897DCF4197A532FF91
-:10943000FEF4CB81863B901F057E77BFFC13AD1AEF
-:10944000F1FDBC0CC8671BF73590BC453E4379B1B4
-:109450008BF1455F2DD27FFD2BCE755B5CE72E3304
-:10946000BEE2FCC5FAC5A17E86F4601DFEBBF0CB52
-:10947000EE157ED93DCD317A3EDD6CD07357730D3C
-:109480007DCF34C7A9FC54731D959F6836A9FCE3B2
-:10949000E6462AEF684E50F9D1E6267A6E6F4ED234
-:1094A000734BF315F464FC4BFCBCA13925FCC06B79
-:1094B0005CFCF0F7F1808BFF3E5DE32E9F6F9C918B
-:1094C0005DD7ECEF2763EEF279FA275DE5059ABBED
-:1094D0003C1FBEE2EAEFDC0FBEEC2ACFEBEF70D50B
-:1094E0003FFB4D77796EDF439EF5E22ECFDAB7C7AB
-:1094F000B31EDDE5E2BA43AEFE023177F97E1432E7
-:109500005C4E117F74C45A4B72F2CFE0F78DA12FDD
-:10951000B9BECBD47E64FE59D65589FC93F6C52DD1
-:10952000943B26E7275BEE78F9C4A6DB48FC65C3CD
-:10953000F197E6ABFFE5A7E1F9A9607EA85772F2C3
-:109540008397EE5EFE18226704BFFC2F1FFC6DF0B0
-:1095500001CC64C42ECFAF5773D877649F061240F6
-:10956000F69D1FED34477B75722A69E6D09F57F947
-:10957000E66F95593F8152E8C0786840C9E3E795A6
-:10958000F93E25A0F1EFC16A93ECB26230A6CB633D
-:1095900000AE796C5EF932F6FEE7421F765C089603
-:1095A000C4FA1B37414DE23EA6B8DABDDF7B46E682
-:1095B000FB18FBB9E9879126FC0EA5334798378F36
-:1095C000D7C8136737FDC660CF0B666F59CBDE86F1
-:1095D000AA9319F2019596927D9A0C19D4AF5997D6
-:1095E000B67CA518478338DA8972D884241B67AE05
-:1095F000CFFC05CE9BD947FF21CFCADA3D9BC4F3F0
-:1096000047621D5EE4337F29EA3D3F5C3D7BDC1110
-:10961000E905494BE2FEA9F8830C447F69DC653F0C
-:10962000D9F353948499C8616FFC4EE04BD2E34D5B
-:10963000DC0FA202CA877CF50FCAB6FFC972ED071C
-:109640008BA13F23231C311E6F82631719174E1DF8
-:109650000A87AA2492380EC6AB37B371DAC77CC624
-:10966000483AC6F948E67E2A2966123CAACEE1515C
-:1096700095B899C8C14703021EBB1F3B6E26C5FAA9
-:10968000A12F9C856F6D30D184FB256B8C4A786A45
-:109690008FB8EDAF190AEFA75A3CDBFDB9ED438057
-:1096A00056BE1F1E57A761FF6D750D1ADAD78C1DA8
-:1096B00068BFD21E5E523C9CBDBD5ED8BFDD280F88
-:1096C00003180FD785BC8AD1B33DBCAD11D7C1D12A
-:1096D0005A8687CAFCFD44E2EEB86E514DC813C7E6
-:1096E0004D139C41A3C413EF9DE06AE71FA7F8EC5C
-:1096F000B8364823C3DF21E0B7EB752A294DCF895F
-:10970000273EBE5D0EC4DCF0FEF9F0C7DB17F97B27
-:10971000F55C709D2ABCE58BC3DA4F75AC9A4A7331
-:109720007F4ACCB90E3E2BF84B1DABA5483E69F9DC
-:10973000BE8778FB7082FC5B5A38614055361EABA1
-:10974000E17A70E0E95AD1EED78A4FACCB540CFDE8
-:109750005C92916A427ED22AD83A9286B6B39F49E9
-:10976000D1BEF3C3FFF712AD93328DD68964B075C5
-:1097700094631C4931AF56D8F31DD9BC46C1F8CC0F
-:10978000477232D77A5921E0D116270CAD8A427838
-:109790003CDFC303C73A85EB834336FC568AFC564D
-:1097A00085C2BFA640F8ED7118FCED02FEB5C3C13D
-:1097B000DF26E02901A3857C990697B300171ACE0E
-:1097C000BC8B37C4F825424E314C11DDECEFFF2540
-:1097D000FA29743E1B059C23CDE78D2C3DEEC579FF
-:1097E000B0F9DC87F3CA379F7B041C6F285CCF6815
-:1097F000898411AB22559F93AF9E1070F42B228E5B
-:10980000665D3B2ABEFAD702E7F144962E8F09BA6D
-:10981000EC186E1E8F8A79F4C830F70DF4339E2E43
-:10982000F40E2C71D1E5A8C04F4FC0A6CB752EBA4F
-:10983000FC4ECCABD0F93C53209F1DCDD2E5393145
-:109840009FFDC3CDC751FF4551FF25519FFCE74701
-:10985000952B5AAD5AFC9E38A0CCCA8EC7EABDECF7
-:10986000AC776DFB2CBBDEABC80F5223D783ACDECD
-:109870006BCE7A605DD08AF6DB5A8C897E02E081FD
-:10988000F6AF3688766F52BBC583FDBF25D607B5C8
-:109890005BD73EBFD50A53BD77F07DCB828FEC7A84
-:1098A000EFBAE15D61C37184E04D0CC2F1BEB3DE7D
-:1098B00013CAE7A9BF217947B19282EC1F7F699251
-:1098C000F2F74A20D283FEC50E2545FE640C36A071
-:1098D0001F7275204EA92A23F9A3CB2EE6ED7445FD
-:1098E000237F6A005270177BBFA154A1F8C862257C
-:1098F00019F1A31D21252D0AAE827E590BF63FD604
-:10990000A0FC2F1B9EDB8ABED845FD3078B0DF3B24
-:109910008BA23B91AF364E520DE4AB9D936E20BFB0
-:10992000F96D2D3C7FF0B6F355DA676D7A3942FA5E
-:1099300077AD12FF2CD6B74CD5403FFAEAD0472F6F
-:109940002D67E5BE96625D3A87E641705B3E48B49E
-:10995000CD74E42332B80371CAA7233FDC6D8D3C7C
-:10996000AEC37ECAB1FDEA0546BCDB40F1C5E418D2
-:10997000FBDE59A792FD7A5B45D57C1C6F539D4653
-:10998000F6C6A6C5552DE4C7AB0B91BFB2246C48F3
-:10999000E8678FCE519901CECAA5460BDA9B91D9C3
-:1099A0002140BF5349051F2F7206901FCA0F3D89E2
-:1099B0006AF68C76A990198BFD2DC97C09ED99BAB0
-:1099C00000F9E1D9C4F6D78EA39437FE23FF0C101B
-:1099D0001EFF441910EF367DA33D83ED87CD638CC8
-:1099E000A60BAC9729AC5EA44B81CC8C02EAF51493
-:1099F000582F5D60BD0CAF17800B87CDE78338CF44
-:109A000023D4D81F9EC7E8C82BACE4F6BBD36EF1B5
-:109A10007BBE8F362FF42ABFC80B9D0373785EE898
-:109A2000F0EDED7CD091E60BE0CBC2298F5C7F6D31
-:109A3000F3F07E63FFB81B62987FD959F655F1BCED
-:109A4000913FCBC5FBF2353194779DE5E27BF98DF3
-:109A50004DB9F6AF77FAB91CAE81C4B0742811F0D5
-:109A60001F62B0637E4F8DC2EA47F2D7574B7DC36A
-:109A7000E6596A8AD540EB76B18FD66D008501AE86
-:109A80009B0ABE8EFD904A54F37855B4DCB17EFC3F
-:109A9000F57B68FDFCA25C06A98EE813473C7AF9C9
-:109AA000C4CB170170942B4F9E4FB6FE99F8C4DFBC
-:109AB0002517B47EFC3D05D64B17582F53583DB59E
-:109AC0004B2A48AEA83D05D64B17582FC3EBAD9D8A
-:109AD000AB727D0E7F68C578BFFF139AABBCF613DF
-:109AE00021F7F7B3C3AE72C72C777B75B6BB7DC7C2
-:109AF0006C777B750E6F1FEC800518CF2F749D1C43
-:109B00003CC17552A30D5F3F5237C2BAD2F420B6A2
-:109B10002F510CC89492BE4A0BBD95331E7E9ACA33
-:109B2000D77F959FC7CF6F53F420EE23FFD6E72949
-:109B3000A93C9FC09EEF48F0DAF2F7B7B2B0B7F297
-:109B4000E47D438C9F7FF043288E768EB1506B78F6
-:109B500085E1D1FF2CCF7BF7F6FB8A9A9CA63AF6DB
-:109B6000C5CC3E83A4C30F737E99C2F36D181DD07C
-:109B70001E5221D158C9FA6BABF0913DA28447D057
-:109B80001B150EB995232F2FEB970213CF53D02718
-:109B90000360FE9B7CDC501C08EE08F4D166BA180A
-:109BA00053E54E07180386C493BEE212CF13ACD719
-:109BB000519E95064F75BF9751BF92791B1C2F1A66
-:109BC00045BF4A1FE5CB9CF27E478037087753BFDD
-:109BD0006C97547A7C6CB65F7F2C452F314F56764C
-:109BE000E4CBE1B908CA37F1C53394DF30214AFB31
-:109BF000B2B5A5D7B9F2C1FF59AD72F98754BDE32B
-:109C00005A09E3BA15579B7DC3F079331357E4F72C
-:109C1000AC586EF6D5E4AF3798A78FF99E39D64188
-:109C2000879A4CA3FD6E4D0EF3FDBC92227F63A775
-:109C300054321DF32DEC7A4A0593B40CAEC84CD3C4
-:109C4000C2FD5EE7585F1CED5405D6EF93CE62ED82
-:109C5000E4C571A7FFD2FB542A94B79DF3B95D65A3
-:109C60007A12E1147AB26D047E1FD1EE51E3C95C21
-:109C70007ED16FAB7C5FEB0FE5FEDE176A78409D0F
-:109C800035146F8F217E717F3B06BAA4FFC3D9873D
-:109C9000F2A52AF6BC8478585BB62836DC7CD90657
-:109CA000EAF0205D18897F16321F4179300C1C3F85
-:109CB000CC0507840BF37FEB0BE3C48783F65229B3
-:109CC00088FD98199518DF870457DE32737306CF25
-:109CD00043F897864DA49F6C6E01F457DB76936C26
-:109CE000865EF5113DEBB9FD54C3ED2193FDC179BD
-:109CF00044EB87B7AB654FF939D56D0FB535EF003C
-:109D0000679E9BF75C85FD4C871A5ECC8D8FC2F6F3
-:109D1000C3B7337EC13CFB8DCD1A22057A9A752AD2
-:109D20006F688E51797DB341CFF6E61A7ADE8C4D9D
-:109D3000E7E2F9A7545725C35B57EC81D8E5ACCAD5
-:109D4000ED283B288FEFDE05682F770F96D93690E8
-:109D5000C1DD3D09785E9F7AEB02DCE7770741F8C9
-:109D600015DA16A05D9D2DDFD1361FCBC2CF10EACC
-:109D7000BC6F01EEF76F17F90FA098DA250EBD77CB
-:109D80005AC04FFC477B576A6FB5617F414594E1EC
-:109D90009105EE3298084F50E3E505816DD43F8977
-:109DA0000036DEA7033FE0E34D11F96DB54B46C029
-:109DB00023F7EF5BAAC1FD5DB525143F52E3717433
-:109DC000BFC2ED6304DC05F6034A92EB3B718E2FB4
-:109DD000FFBA1941AF093846A23F4307F9D1EDF365
-:109DE00069CA0BB9F5F4A91EF776FFE8F0A2D6F51B
-:109DF0005B7886ED09353927C0DA47CCDE4C252B58
-:109E00004717672C5ABE058E3B3660E7392669FD39
-:109E1000DB7856746E77ACF0D0D15FCAE3754171D0
-:109E2000FEA4507893AA1847F4030F37940F67AF36
-:109E300095257C68840DCA8BB18D21E19CE1E531CB
-:109E40006689AB5C5C37C1553F12AF727DF7EB1F83
-:109E5000777D3F513A5DE299C7A784DD6897CFF5DA
-:109E6000CEB3C07E0F1627560570DD34404D8AE113
-:109E7000F5CE2F3C44F80F0DAED385ED6605E58396
-:109E80008B753D8F9775FB7B5DBB59CFCA86FD7D7A
-:109E9000062F9BF6F738AF6FD9DFA7F2EF28F759F7
-:109EA000F96B9D67B45BF81D5AC96F0B152958E211
-:109EB000A0CFD8F10DAD08DFF8CBD2318BBDEFFECE
-:109EC00050E6F2007A62CE7A776ADC0FFDCC943BE2
-:109ED00062E8AF5C77E64331207927E58C07FE3CEA
-:109EE000C0F3C5CA42899E00AD77B3BF98F1E1A126
-:109EF000876483EB21E535D4873E8BE7E3AB10DF46
-:109F000067A25D54C3FDD521F19DE85899AD3F4846
-:109F1000574FF9EF34AED77F87491B0CCEEF159B17
-:109F2000F7D0B890961AD97AAFB0A01FCF1F81B0E2
-:109F3000FB26F2A6509A48939F6F12C3A7CCBE4F40
-:109F4000BEB8BFC5CF706D5CA6FB7089542D8FFB6A
-:109F500048C00DDA9163A5E3ECF93DA417CAE39B71
-:109F60005280FA7BED990F35215E02997F0283E1E1
-:109F7000ED1F27A5C040FF6F80C315B8AC07483E52
-:109F800057F7109EBDF85A3788F7B40BEF3F0970AA
-:109F90007F7E2CC9DB0DD65358BDA943EB75077BDB
-:109FA000E6AB68BF4DE178F48EF35E4012E776DDF4
-:109FB00070D8FD7AEBDF1210716D2D4DF18D67CEEB
-:109FC000BC21867EEDCE298CFEB5F9E97F4B80E77A
-:109FD0005B19C76E22B9DB3D6923C533D7556F26A0
-:109FE0007BF228B323F0FC747765EEF69DCD3C3F01
-:109FF000E65CB8BBB18AD1A7F37999FCB4DE7ADF0D
-:10A000000954B9E28D5A857B3FC8F8AF0FE5E8489F
-:10A01000FC27471EE0EB72947C8766213FCF50D629
-:10A020008EF6805F94EF0E1C6F13FA9FE47FF9F2B7
-:10A030001E70E64BBE2FF82213E0722658C1F9A31A
-:10A04000DB6F494EFAC5D8FBF98E76F9E8968F1F7B
-:10A050001E17EBE17D25DE44CA5F49E9B9E4B3127E
-:10A06000FBF42F173ACE7BB52B694D47F86B364A78
-:10A070004EBBF61B6632A439F627A1D805BF5C8813
-:10A08000FB1F259E739FFE29D38C6A6CFC9B9B61F2
-:10A0900046359E4B50AC00D6BB59C934D2BEA2DA6D
-:10A0A00047FEF27515D7EDC53C2BABD617C76A6DC9
-:10A0B00015BB1AAB0CE4976D9467FAA6BE2486FD17
-:10A0C0000462EA8CEAB194DF9DC079876B59BF0EB8
-:10A0D0007ADBE3DE2DF8F65BBA3959E3F2E034EDD2
-:10A0E0002F200FDE87788C1B590CCF39F65743F1A0
-:10A0F000CCF3043A2B86E0798EE6E0EB00E27906B9
-:10A10000C9FB9CFE0B86E7B35D780686E7A9593C40
-:10A110007757703C77D66CEEAA72E2B966D7DE4A02
-:10A1200003C7E7787E48E3E773438867079C5E3C94
-:10A1300087255BFF7CAC1DF9D6CBF70CEF7F8FF04A
-:10A14000D8EF3F0AFC82ECE1B1E313176AE43F4920
-:10A15000D1FEE94E29AF5EBA442B402F758A757443
-:10A16000A7C03FEBFF0BD47FA9E8DFD6B7421FFEA5
-:10A1700083F66F0B501FB27ACBA89E9EA27DF06033
-:10A180003D0B86D5A3ACDD95C447614FFF268C4AB5
-:10A190001FB37EAEA37E34CFF8069C949E67FDDE8F
-:10A1A00044FD2A9E7E4FB13DC1C6E926FC81070FC2
-:10A1B0007F663B2696F4F083D2E3927B363F942F62
-:10A1C00077D7CBAFD77AB85E1B6AD710DFFEBC73E8
-:10A1D000CF6EDC27BDA99BDF46BC8E761DD876608E
-:10A1E0005928B94DE376209D83B0BE51946E636DBE
-:10A1F00095E33D511E7F77EBA3F1B63D54CDF5407D
-:10A2000070947A699FB0D73AC6301955CC9EFE44F7
-:10A21000532E3FC3339A9DB7E6B69B7F8373243F8B
-:10A220005182FC6BEDB1CFECE863B4331B7B20971C
-:10A230009C4F86923FC7F9A9BA65927A15FE917C28
-:10A24000FD9626AC9D7B6792DCEDC7BC461072186C
-:10A250004D6BF4C74519DE0E69E4C288A37FADECEF
-:10A26000626B3ECAB10AC62F587F5CD33E29992B38
-:10A270003E6EEF7F10881CFB97719F9B9DA47CB85E
-:10A28000C53347D8DFB4D8F6EB6F715E87D49E0B29
-:10A29000A638F06ED3E90E2971E179284FE7713ABB
-:10A2A000158F924E03824EB098E7A19E7BEC5C8D99
-:10A2B000FC8B115F02FDF0417F8F5EE2E0A3713EF7
-:10A2C00048F68E02FE7AE8DF7D1CF77F611FED778E
-:10A2D000BBC3CBBE83F7EF58BA1A9F6264C7ED6663
-:10A2E000FABEC4A17FBCFEAAC17DF4E2C2F265A79A
-:10A2F000587328DE9FBD3FC89D7FC018AB06F3860C
-:10A3000056CBDC7F7E67D1D7280F618D15D003A592
-:10A31000A4C7C8FE5B27F2D93A453EDB5A91CFE687
-:10A32000B7566FC5FA9B0012E8976C9997A2787F91
-:10A3300054D1F4D638C2919A837A225A6AAFCF1F89
-:10A340002FC4F53958B6BED1DEC0E61B8DD9E58DD8
-:10A3500064BFB5B77079F3D9E00B0BAD7A64C53E35
-:10A36000A2C7A6BA25C5308C3F325CEBCE9F0B55F9
-:10A37000875C65ADA2C455564B270C1BB7F819FA7C
-:10A380008966E17CFA208E70E6C9179E12E476B6E3
-:10A390002C4FEBCF60BEC1D96A7CB381E7A8DD79D1
-:10A3A0009CED416E0F3E8A0E218AE30ABEA8E3713E
-:10A3B000D5A2B955BD180782319C2F304FD0C90F97
-:10A3C000F9F8E2AF8D1F5FD1E118E65DDCD21A0526
-:10A3D000CC73B965EEAFE21903E56A5F0CF333DACB
-:10A3E00098246965DF37CCFD9591CB9F7C404B2E3F
-:10A3F0000F22FEC209B2BF223393F4FC6BCF6B2451
-:10A400007ADE19E47A6E8AA0A782F49C99A5E7BA4D
-:10A410003A46CF99D975BE4EE9D10AA1E7F9387EFF
-:10A4200019CAA1FFA67DDBCD75BE46944306F45242
-:10A43000FEED865A9F0FFBFF6BE1C5862B3C97C94B
-:10A4400047A25326817A61435CF1A11CF99BE3C3C7
-:10A450008FFAE87D017CF8C35C7CB85CD0432EDACF
-:10A46000D7942BEF6E4A5072E1653DD28BE3A591F4
-:10A47000E3C5F757C1CBA0BED0922B916FAE88A990
-:10A48000B4EF564ABA3A285EC4F41EC61B56C8A694
-:10A4900081F126F8969FDFC7847ADBA15FFE180C56
-:10A4A00072FB445EBF88E2186C6AB82F63E58F0DBB
-:10A4B0001B0F4DFBFB9DF79478F3325E0BBAE31054
-:10A4C000472A961423BDF2F5F776F35E1DCFD5DA51
-:10A4D000F919DEEF2B6448E53AB72885346167F651
-:10A4E000AA84871B99AE9D86F8F8D8423C9FD9591B
-:10A4F000D13A8EEC1871AE61C5966775C501E70A51
-:10A5000085A9BFE943E763E37705AAC91247FBF4CE
-:10A510005E577B6FBBC1FE447B66B7F9430C3E536D
-:10A5200049EDC578B37D7E43DD323F436A330FDCAE
-:10A530008C8E270577A1E7388E3CD0D681FB6DB491
-:10A54000BF3EC1F8E4B78FC8F156F6F58ABBCF58C5
-:10A5500088E75A0F01E7179B3E6F3DD0362E175FF5
-:10A56000E4A3CF79A12087E714F3D759210F7FF512
-:10A570005E549C8153CF5F8BF3F197C0CFE15E8E29
-:10A580000FB86B6C4E3AE59BCF209DEC7682CFBC2A
-:10A59000EDF3B5637C95E07C95899E5D085F097855
-:10A5A0006DFA9D2CBC23F155608D6CE079AE4A2587
-:10A5B0004172B3B3F43A4BDCEB48F99E72CFB48CE2
-:10A5C000B8D74AE4B54306ED8940A949767448DC1A
-:10A5D000CFA355BBE5A612739F9B8835253276BF66
-:10A5E000E8BF0CAC5169DCC1F8711832C12896790A
-:10A5F0009C14C51FEE2B02F04DF27BB27639FD9E06
-:10A60000F65311F96A98CB4BF7B2C1E747C86F719F
-:10A610008F13BB78F8FC1A6F7D082BC62107DEF379
-:10A62000B753E090639FB341DC2B6AE3DFDCB29465
-:10A63000F2CA83E08BD3FE20D661E1BEAF43ACE724
-:10A640004E7CCEC573BCD375DAAF55F0788B257DC3
-:10A6500099FC0CF6B9337B3CFBBC995D6F24FAAFD7
-:10A66000C6F594637DEF0A717D3AF0B5D47FE33E81
-:10A67000C4FA1318780FC5E3CD1F509CFA9CCC5B2D
-:10A6800032FAF79F098DA37ECEE9EF931738D6E50E
-:10A6900039E21C0740AF9CEB9C97DF0AEC427E78C6
-:10A6A000EA30DF8F3D75F808D9E14FFDDE9746BEF1
-:10A6B0007BEA83E1F31E1E17FB22BBDEE3BFE7F656
-:10A6C000D9E34A6F512EFB2E3B7E9AEF070FBBF961
-:10A6D00015945E19F965E0A67D32FA071E6FD6A4BF
-:10A6E000D799FC9927E679CEE13E19F74D23CD6B3A
-:10A6F000AB87BEF63CB7D6737B746BFD9110FAFF47
-:10A70000B73EC1E77BB49E9F8FCD07EFAE669EDF5D
-:10A71000B1F589DCF86898C7F7C70D7EA334A75D4B
-:10A72000EB3967B54093DDE7BB4E317CBBEBB9DD60
-:10A73000B55B89874F049EBCEBBBAEA711DD08510A
-:10A740004836CE9708BDFB5D7E92035F6FF932E617
-:10A750006B2C0D9B12EE65A12FF3249B5789A92525
-:10A76000F0DE98E2FA1E6932E677C4781EF937AF58
-:10A770007E2DF3322BDFDC5444655D379E5B84F81D
-:10A7800028D5C99F72337A5C48407F732DE627D065
-:10A790007A64E5C0CD3DE7A13F4B012E2F98C56BF4
-:10A7A00028E3E85E3F72D2E4931BEC473A1EC8B63A
-:10A7B000CB3B4F4FDE6D00960C2FC796F3FA16FB7E
-:10A7C0008372A8C49367A22F74E7A5443DFD4F454B
-:10A7D0005BB5AC80BCF2931C670C6CD30CDC67D708
-:10A7E000FAF434D607630CE60D861B9981C4E83968
-:10A7F000460709CDE591F0BE0EA091FBBF33E03CCA
-:10A80000A7D350C4E5D584AB6E97709F7134CEB892
-:10A81000621A96DFCC997FD52EE4C76059DF45F2E6
-:10A82000B4037AF7525C20E9233BFCE6DAD631CE5A
-:10A83000F64B8B24DB1F28E80F86323B4B7F363FDD
-:10A840003378D65F8EFEB1E56EBC8F962ED714712D
-:10A85000793512FD4F761C9B6E43D7478BA0DB03E7
-:10A860001417EDAE195EEE0FA5DB36D277E1DADC18
-:10A87000F9BAD715492E796C3F3548419CF1892C9E
-:10A88000EE6796C7CF6EBA7F18F9233BEF67866CE9
-:10A890003FE38C1E13E356E3A1C7C473DF8CA7E329
-:10A8A0001940FE3601ED24661E111FC99EFDDC46CF
-:10A8B000C14741789EDAB35560E9A45752A03BF2F4
-:10A8C00054CE93C371F45FACD3C3742F12CA4F9E9E
-:10A8D000BFC3F3FC8B39480CBFFD80F22D542E838F
-:10A8E000857EBF7A01AFC4F80EF3FB0FBC7500F78D
-:10A8F0002BE1996E3A29078A28AF2DE43D2772E0B3
-:10A900009A6B687FE3A1E368F3FEBF5F24ECFF224C
-:10A910000893DD24DAE7CBDFB3ED7E1BBFC6B108B9
-:10A92000E5ED741C90081F659313F7E3FE0C7E257C
-:10A9300003CFCB0413F3F656FF74167D1F1A574846
-:10A9400054225DDE3A50A4B75616922F9948B6B0FD
-:10A95000FAC68140BCD520D5E2D3908E7D12D1516C
-:10A960001AA751BED6EA7FF7DF1F18265FCB8E3FAE
-:10A970000E96158BE29B5DC674CD294FCA42C95F06
-:10A980001639E3F622AEEBF5AF07C3EDB16760F41D
-:10A99000F18FD2F120E2F29F5F84F64B17AE019E59
-:10A9A0001747797A5DE5BCFC46D1944518DFE98A02
-:10A9B000F07271F8C8792D246713E4FF5BC3180E99
-:10A9C000F1087BFDE21E4963FC85C3C80BEFFCD791
-:10A9D0002BFB284FFE9EF0FEF3CF40FAC47DE48FA0
-:10A9E000BBE7FA6DAEFB93DED41BDE2FA2F5AAB750
-:10A9F000637C7A62D2CED774C74526A0D660F39B1B
-:10AA0000C408E3677838ED626845B6A9BCACB71CEA
-:10AA1000F7C96B4BB78DE1E7FD17EA87C86E972939
-:10AA20003E9D0F5EAF9D9E6FBE76BCDDDBFEAE0829
-:10AA3000BF47D51B17F3FA831E44FC9651FE2C60CA
-:10AA4000FE6CA7BF2F673CEA8D22EED76CAF5894FF
-:10AA5000B81CE7A598730F327CDC5B1AA57D90FFCC
-:10AA6000A2DA4B7D0E7BC3CE6753C47ECE5F9A22A3
-:10AA7000B9A86866D719182F7A5EC61505153D3B2B
-:10AA800025B4E7EDFB2010AD174FE5F3C579058040
-:10AA9000DBC5785EE1B863DE1073F8C1509E88FDB7
-:10AAA000DB29A0F7B4F0ACA1F49DDFC5F3D0635768
-:10AAB000F0F34D1395DCF41E7F99EEE3F1AF534BA9
-:10AAC000E77CEDF3C53DEF8AA8B47EA6E8ABF7E2DC
-:10AAD0003D771D567112E33103FE5417CAAB0DFFCB
-:10AAE000E883CD34FFD1E937454FD03D7A15297D34
-:10AAF0003A2EEF7CEDEE48ED0A129E2D9ECFE0FD42
-:10AB00007E7998EB9B9E94EF36FC6E3E9DDAE9C70A
-:10AB10007D678CEFABED7D783294BC3CECB0CF75AB
-:10AB2000D3223E9A92BC94E4C0405961F72F0CE2C4
-:10AB30002B4F1EF31D11AE97A718AB79BF9386F765
-:10AB4000CBDA78F9A04B16BF1721134438FC8C914F
-:10AB500013B82E6EE472E2EE35BBE8BD7263DF7CA3
-:10AB6000FEBDBF05F5EA1D3EB82297DFA82DC2E362
-:10AB70004193CDCC3AD41B93533E40FBF4F688412D
-:10AB8000EFC75FC6F1D43509E238EC69D81FFBCFB7
-:10AB90009E4A95F4D2D852A0FB92C6AE01D2DB6396
-:10ABA0006B206DB072D7CEB93BD1BE55AB218EAE06
-:10ABB000EBDD953758680F6CAA0013F5B8FF46B661
-:10ABC000C0587DD5F0A53150BC29B58CEE6959CB64
-:10ABD000D6255263ADD140F6C3D1182F072AF839D4
-:10ABE00098AE331582C3BE7F9CEC4EA61FFCB5FD0C
-:10ABF000265EFD65C015D48F7F2EA7AB71573D9D96
-:10AC000053EB1AF310DD4B635D033CDE69C7A515FA
-:10AC1000C65F6C9CF62BF49CFE9523A1E4B79DFCCB
-:10AC2000C0F891E44C17E613E4C0676798E3F30EAD
-:10AC300021E706FCF0298A97B4F8E83E176FFD6516
-:10AC400002FF775B4BFEE10C23AB6FECEF078B0C45
-:10AC5000977FA3E20395E6B348BE1174A43BB39378
-:10AC6000E8FE17BC18F4745A9617943BCEB3DC1B5D
-:10AC7000EF85C98867DB2EAAE5F68C7DEE91E12190
-:10AC8000730FFBAED705E87ED1F14DB9ED23B5408A
-:10AC9000FBA8ABC8FC6918F30D443EFFD7972F21E2
-:10ACA0007D9FEFDEDABB235CCEDF2559951D489FE3
-:10ACB00049FCFE196FBD83C25E64F620F1CD268B80
-:10ACC000DFBBB5896D7D1E45BEBA9EDFF3C7DEF3DF
-:10ACD000730E06D079F1D80DCBB45CEBD51B57CEF3
-:10ACE000B7EE826A5F3257BCA556D0AD24AECFF71F
-:10ACF000F1E983E9B0478B6A81EEFFD2197DD0F686
-:10AD0000AD805E4ABADFD858528971A15B6F540D8D
-:10AD10007C7F5F65AFB510E72D41EF839823A3F4E7
-:10AD20009A781EBD223ECEE8769CF72EAE7894CE61
-:10AD3000C3DFFE54000275783FA9E7F7D938E9234D
-:10AD400067E96CEBAB7CF32BF4790BC397F3F780DB
-:10AD5000308833388F220B0CBA1FD9E8253BF4A872
-:10AD60001544DD0A467D2FD72BED2178308EF7CCA8
-:10AD7000F2F2A6F054C0FB6735A597EC754DAFA273
-:10AD8000725175A29BECF369DBF55CFAE153914AD1
-:10AD900097DF24E4895369C91B9AB89F56852939DE
-:10ADA000D6D9C12285DBD3AC29C573ADE1E5EDC9A8
-:10ADB000F2C79B42DFE8D97D32F107C92E468F707A
-:10ADC000C5A2B764C77D9C61EFF9622F3D3DE59355
-:10ADD000A5E73AA4A723BEA0D52735A49FC1EC249C
-:10ADE000B2FBEB019CF7A66FD22C7E0F8361F82C8F
-:10ADF000077ECB85DDA77CA0D079DBBB9676D0FE25
-:10AE0000632CEB03F37AD933E7BDD3078B785E78F5
-:10AE10005751624984F27281EE195E27E4C679F2D5
-:10AE2000CF8298871504A6E7908F16FBE0C11C74AB
-:10AE30002D8F703CA743E6E722B3F2CFF77129F7D5
-:10AE40007DA276FB83C20F50B81CE6F39D620ED044
-:10AE500079D2819B0AD3DF036C6EFBD02E57E25C64
-:10AE60004FF719D03E93EE7F4AA3DEDD145B4278A4
-:10AE7000BF0FF529DA56B55C4FFA53DC4F0C864408
-:10AE8000F7CA86C4BD1BF7A58E3C8B76CFD11A05B9
-:10AE90003D3E10AC485AA85F8BABFB2C09F56C69A2
-:10AEA0009AE2C74C8F598867E3AE4504B75FE96DF6
-:10AEB000417D99562084FA7C008D4966C73D127EFB
-:10AEC000A403F35DFCB5695064DCD70338EFF737B2
-:10AED000602FD9597EA687C96E52FA5A502EB5D71F
-:10AEE000EB14D739EDC63E70EEEFD8B8B7E2B81321
-:10AEF0004AD97846567F7AED8D7C7606D3B3222FD9
-:10AF0000674107EEDF6829B1F2C3E1ED1D686F7E8E
-:10AF10004B37BF4EFC93679FC1F8E29E48D9E8F9D2
-:10AF2000E2B9B09B2F06FD27C2EFBAAC4E087A30CB
-:10AF30002EFD0D83FBCABD7EC0F99F7BECBE3DF7A5
-:10AF4000307CC8A84FC972E9D9F324FBBE1CFDB000
-:10AF5000AC7CE581A92ACABD5F4D90F1EC30F25975
-:10AF600014F9E71DF0917FE81DD81F9DE180676708
-:10AF700084AF13E8F2BFD6E7F03F5EDEC3CBB6FC8A
-:10AF8000FBCA5DEEF29761C938B4BFBE7CBB1FD26D
-:10AF900012FEDE29F7BEF99108CF37FF0AA43A1056
-:10AFA000CF6BC5F9A46B1E9BAAA2FD74E50CBD1264
-:10AFB000E39F361CCF0A3DFD36E363C3210FAF0A82
-:10AFC000A755CC977A7DFB8CCF9C0DD84FBA6302E6
-:10AFD000FA0FC7404E3DFEA52E379C23CDC30BB7BD
-:10AFE0007DDE281F1CCA1629A71FECC588DB0F763B
-:10AFF000B2F7B31F45FB7856F6F7D7D9796627DB4A
-:10B00000EF9FF2F47B8D86175103AC527A1AA5AAF2
-:10B010006CDC2BE8B7CC8968FFED989FC1DC7547E5
-:10B02000BDAE02EB35FA86A937D27C5687EE8DA2EB
-:10B03000BFA84F8244AEFB77CA42C931D15943EF12
-:10B04000E101F1FB820EBD62DF63DFBF08FD7C0121
-:10B0500060FB7B7A2AC407E4FF91D05EEDC9989526
-:10B06000183F565CFC5184F11466F7AE12F6655138
-:10B070008DFBBBD71F747A94AFEB7AE823FB3FAA12
-:10B080008533329E6BAD73E73FDD59F44592BB2BA0
-:10B09000F7F9C9CE5C09C6ADF533691D921FECFA0C
-:10B0A00075A7539CF8FA32236EA15C83B8496D3DB5
-:10B0B0007CB7EA0309D20E3FC12AA55FC5F5B68A5F
-:10B0C000E90FE7FBEB62B2F1468EDFDF643FFDA0E4
-:10B0D00019E11AC4838F9FA7D559D931CF233D5287
-:10B0E000238FCB19C5170FB37FBF2EA6D238CBD66F
-:10B0F0004D29E6FE21B7DC7C57E8A99F3CFC2D9545
-:10B10000EEA3FAEEAB17201E563C2E83C6C67DF783
-:10B11000E10864487FA555D45F576D9773EA77CCF3
-:10B1200074A2BC94ADDC7F79D5B6407A316B7FD503
-:10B13000A3AF9F050CBE775BFBF74CC475F05DEECB
-:10B140005704ABEFAC8BD8FBAB14F8BFB9ECA9CF6D
-:10B1500047B9BD7DF847454DB8BEA52D3BBF48FD5D
-:10B16000F65EEA0F38E2734BA2FC7C2CABC7FDA065
-:10B17000DF91D25372C4EF6CBFFBE1EF481CBE1DE0
-:10B18000FE7410E1DB72BF9A6470ACDAF21EC993F0
-:10B19000055BBF17453CACDAE18ED3ADD8FA610749
-:10B1A000E6A1AC90A17F31F2B37C8CCA474DAD5F74
-:10B1B00026B9CFCF57AF2492B07A3FF8EDA2DFB0D7
-:10B1C000EF6FC7640832D1FBF6BE83EAE3584E86C0
-:10B1D00053B8C35DB5C32DF7566D799DF222741F28
-:10B1E000F4579C8DF9016EBEF6D667EB4745FB69B7
-:10B1F00055EFBAF7D0AE5CB5FD9D5FA3FC58E59165
-:10B200009F6FE37FCA87FAA9DBA29EFB69B61496FB
-:10B210003FB1E27B47EFB5D8B887B7FDEE5ECCB360
-:10B22000BFFAA3F7EFFD67B4179E0AEA28FF577D20
-:10B23000F7852838F8F11EB1FEDE9D045639ABF7CC
-:10B24000EE7F06D278A0F5DD277F3B19CFC9BDFB85
-:10B25000C81FC719ACFEF54F9E47F7F25FFFC30545
-:10B26000E387B3AB905FD301275C69A2ABB143E244
-:10B27000C6CB13E2E9A1C7E1470654B477FF2041EA
-:10B280003FEAB995BD1FAAB83FD963423FE267F7CD
-:10B29000F6D7F77C9595DF61F409E4A00F9BFF4496
-:10B2A0001FE96F2626D973E5F6D71721BCABA09FFF
-:10B2B000F4E9107A3ECFE839334B4FEFF7A3704CE7
-:10B2C000C57DC1AA8719FDCE423A32FA9D35947EDA
-:10B2D000EFE07FE60EA5DFE351F7BD0947E1EAFBAA
-:10B2E000CA7163BA7D6CCE3C886C9C61F87B506CF3
-:10B2F0007930127EAF90385C5D51F3A728EF0F6F65
-:10B300002B1AA4EF62A4EFF78E4E46E3ED4D7FFFBC
-:10B3100017110FFD4F0674FCFD12573DF922ADB316
-:10B32000777FF89C6A505C07A2D26C5686C19FFD5D
-:10B33000C0CA2BB90F1CAE79E0FF2FFA356B7F0D19
-:10B34000EB02F7998C6E54DEC3D61DD1217D61A32B
-:10B35000817A335D46F35E99E6EB61657AE7C578FD
-:10B360001F8517EFFE62FB3ED02C3DF1BE8395DBBF
-:10B370005F5D847C978F9EF6FC759CFF1CF6FD013B
-:10B38000F77AF5D65FC9D627E9292F7DD33B7F8190
-:10B39000CF77EF0F28783EE35D71AFAE97EE59FCA3
-:10B3A0008B73F3A38C431DF7F0C7601C4AE0293F61
-:10B3B0007FF0753ED2FC468BBF77A2868B8F6C3CAC
-:10B3C0001E3E965BFE4F2CE6726325F434A2E9EC38
-:10B3D000B55714485A132BB3F01E46FB82C17BF8B5
-:10B3E000BB32F9853A7A77931CF7CA8B9590FBF7B5
-:10B3F0006FD516737B71E58E9D67A15C3BBCEB47F7
-:10B40000C49F2B1F7E55C57DC79E2D3F50FB6AB341
-:10B41000EB01F543DA81EFC3DFDF79169707B9FD5A
-:10B420005E73C57C563DE1EE7FD5C3EFB9FA5F612F
-:10B43000F592BD30D2386F2BE6A538DFB7F7F9E9C2
-:10B440001EC2B77BE5C65C76F0E462BFCB0EEE7839
-:10B450006ED16FF03CECCCFD21BA7F717BAB39FE35
-:10B4600016B4DFF6FB457CD1FC1DDAA5DB9F0B9102
-:10B470009F67FBFECF503E90DDDF631E7CCE79DE02
-:10B480005A1061FDCDE94BCC948DA172A3EE00DB87
-:10B49000EF39F8E0FAE71AC7A3DCC7FDB181BF5F57
-:10B4A0004E89D3392C39BA88F2CC65DDA70773EA07
-:10B4B0006FDE9F3FCCF7937EC698CEFBDCCF3DF688
-:10B4C0001FB47FEF88FB72E2E13E817FFBF73FD93B
-:10B4D000EFD74B9C6FAC67793C24DFFADAD81C8B32
-:10B4E000573354DEDA5C17C7B8CFB5C5FCBE9EB182
-:10B4F0006F18129E2D99DB674CC7F917432FE0791F
-:10B50000FFDB9BF5B8333E5476D86CC17A67BF0930
-:10B5100071AC87E3E27E6DB4E35AC5FCDCF3907155
-:10B520006B7B092F858CAB9DC0B8B79E8271C327FA
-:10B53000806780CD058DEBCDB3F28EAF4EE379639E
-:10B54000DEF192B63E10F1055A7AC3F8DBFCA29FF9
-:10B55000A5C586EBF7958192A17BABB3791769A955
-:10B560007326C6EF06CF1B2734C77963F69DCE1B23
-:10B57000B7993C0F96B5A375D025FC1318CF5CE6A0
-:10B5800080F705219F0215A918DA5F9D79E211AFB6
-:10B59000083EEF8C346838999DFAF4E2BE61F48677
-:10B5A000B2E69B339CE792153D23B9E2C8E6EB7403
-:10B5B0007F56BEF6DEF8A20D7FE7CE7F82AAA9985D
-:10B5C000379B80D61C706E17EB07EB5562BD581287
-:10B5D0005A1CF5D4189FA75DEE147EA1576E7DA569
-:10B5E00093E2F679F0B443D0F30574CC97D1F64DDD
-:10B5F000C3F86F57C44772B22B98FB1EFBFF2CF6A3
-:10B60000B9E4A48AE71FC90FBB8FF68DC6B1974D69
-:10B61000BC1FE9D65A95FC6091FAFD543E6AFAC8FF
-:10B62000FACF871FFB3E83C1721EFF53BDCEE9BB1D
-:10B63000DBDC46F9B1D74D558DE1F22D426BA6C545
-:10B64000316F425B73761CCF6B876AF8EF61D8303D
-:10B650000FE26106DF863CFCF13F58523CAB0080B4
-:10B66000000000001F8B080000000000000BED7DB3
-:10B670000B5C54D79DF0B93377EE3C813B30C0F082
-:10B68000BE8310D1623A28A2363E2E0F0D3E62468E
-:10B69000C4A809D6D13C4A2218B436A11B1B2E02DD
-:10B6A00082F8C2266BCDAE4D47A22D6DD31653DA6C
-:10B6B000358FF61B4C74ED635B626CE2F6D30613B8
-:10B6C00037AB59D365B7CDD6ED9736DFF9FFCFBD90
-:10B6D000CCBDC30C68DAF4B7FB7D4B7EC9C9B9E7B2
-:10B6E000F53FFFF37F9FC77C4AE4089949C8EE2DD8
-:10B6F000840C151342F8B08DB808D95762B2433A9A
-:10B70000284F4F1AA6E987F0B7606C6A6DFEDB1907
-:10B71000553322F9CEBC442E48FBD999F73819A6E7
-:10B72000A9F5831612A0EDAD3C91FB69EA96C960BC
-:10B730009287E6E55B7C561F4D5D24C3544ADB953A
-:10B74000DFC2EDF08DED7F30E711EF5BB45DBA4CF9
-:10B750003220ED2C17324C3A787ABED04402749CD9
-:10B760008E72612DC0690D7F9E480991F2274513A5
-:10B7700021A9F47B5D8F2CC3FC08C90824C03C4977
-:10B78000468DAE5E0F47D6F4178F1DFF10E087B6CB
-:10B79000DFAD96EF9BF3CEA17B29FCA22C95986997
-:10B7A00037FB06AF92FC69341FBE2A73302F0F9906
-:10B7B0006E2763FB817A3E5A2FD11B241B00CEECEF
-:10B7C0006112A4E327160D1398BF43229249C27E4B
-:10B7D00010FEA4D92344A1F592E60E7B9569BA7EAA
-:10B7E000FE608E09A719E649D7D1D15CEA2F48211E
-:10B7F000C4D63CDF5F40D725811F2222ED2741625E
-:10B80000F88F6EF7CF490C3F1A5E7ACA6F490AC6A5
-:10B81000E87F747D5BCEA4F1165DBEBC670DE0DFF2
-:10B82000E2092A30FFC4D90C2F5A79A2344C643A69
-:10B830006E2261F324A5443E4693845285C0387439
-:10B8400048593F9F07547A7C409D0FFCC969588F27
-:10B8500010FA29415E74D57C2BE479F256112BFF46
-:10B86000D0477041DFB2A979F3D87CBCF94C94EE93
-:10B870006A21E42DDD7C6DD974FE5ABFF4DF1E0B06
-:10B88000C900FC7E54BC09DE61A407EDFB3675FEE1
-:10B8900016CF30E2670CFE8A19FE9CC50C7FCE28BD
-:10B8A000FCED55DBEFFD2F86BF513C71A63540877F
-:10B8B000D178D4EA578CC2AD205DD276847C0AF26E
-:10B8C000816AE0DF1E3BCB1F12EFAC06FE00BE9A82
-:10B8D000805F08C9A44D7AB82E28CF1545ECDF7AD1
-:10B8E0001F9507FA7C50930F6C5C97CF5F4D283DF6
-:10B8F000139F891CA328ED9AAB7861BDBA9153229E
-:10B90000FDFFA33809EB774A8289FB244DCF2C4CED
-:10B9100007B9D966EBB1C17CBB2C3DD84F5B8E49D2
-:10B92000EC8D21DF4EABF335373B671C9D111F8F2C
-:10B9300066810463F1FDDBAA7C6B1B7CEA8C99D2E7
-:10B94000072F09929DC20B4CFFB6B6BEF9B43DE974
-:10B950001FF2F9609C441CC7A5C2E52A349156DF4A
-:10B96000C4701E57E98A6FB68F0B270F70C69033CD
-:10B970001A9CED00A7273E9CCE9C0AA453BED985F5
-:10B98000E30C8A125B0F4B936D239D9FAB35496A85
-:10B99000A5E92EBEA9AB0ED2210B5168150B91CF94
-:10B9A0005450B8F969D309A1FD745C9A659B04B43D
-:10B9B000DFDC43023A391F74042F89B43F5E0C92D6
-:10B9C00020859377293280F1AC4A07DABA91A264D4
-:10B9D00042E6D0F182FC0C90A7CEA080A9D68F467B
-:10B9E000274E8B4CC462E8C7248740DF416773222F
-:10B9F000F5E6BB19DEDAE6860354F691EE129EEC0C
-:10BA0000A09FDA8B28BD24D1BC45EEAAA3F8E87E1E
-:10BA1000D5427A757CA08D9BEB66FAC74E6A93C2BD
-:10BA2000D0B7F9B037388E3EB603DE68BBE60BBE42
-:10BA3000EFBCA2E115FE15133CEF38917633809FE1
-:10BA4000DF27C5AB4DA6F8FDFCAE45FACE2B3A7903
-:10BA5000D54C98FE20444A5F312D7EBBDD2D6446D7
-:10BA6000416124BF870F213EBB5DBD5DF9749E8A95
-:10BA7000DFE42FA4EB45B24B0D788A4E096965725D
-:10BA800070CCBAAE96C2B47D779189B702BD1690DC
-:10BA90009019F092ED41BED4D635E8607463F13070
-:10BAA000396976C998DA008F20EFCC7BBCE3C96B8B
-:10BAB0001BF0490C3C16B9291E3FF1DF0F8F1E37D2
-:10BAC000C1D499509304F8232FEF22D23400C3C875
-:10BAD0007F5A3B8DDEA3E75FFDDF7CFE1A9DC4AF7E
-:10BAE000AF68F6103F48AB660549A89BC37CC0967B
-:10BAF000864D29E854A5D8C2ADA09A72EAFA334E11
-:10BB000011D0CFEDE23B36145DFE0F53C6EB9F27FD
-:10BB1000EF68F83447C6D3E3C7047AE78C25748C02
-:10BB20008BE02941FCB47790DC089E9A6C208F3A18
-:10BB30005D5BCFF84A2378EACC7E4EDCA0A3F72BDE
-:10BB40006285E2A6F8D809766D0C7972AFBBA21DAA
-:10BB5000CA05536C797E48956B5480F30BE9380B1A
-:10BB6000468C789AA7E2697EFA3B8FC134A994E4A7
-:10BB70000915C815017F15E0AD6A4D00C882085946
-:10BB80001F7C2288F45025025E3865B2E943E78DB8
-:10BB9000E32F1EBE5C1C09C482FB19B1E6881BF4AE
-:10BBA0004931C59BCEFEA08421A27CD4D6C5E5999F
-:10BBB00080AED8BABD7C31DDA4D0AA9D5E5308FC0E
-:10BBC000190B69EA02BC93736602765A5A3803CBA2
-:10BBD000ADDEFC10E8BBB4B09DC8E82788213BADC2
-:10BBE0007F70ED5D7ED443D76F23614A3728CB4009
-:10BBF0008E65CB61B0A779512A374B30CEA336F092
-:10BC00006F3ABD354984D9DB24961ED8E20EFE007A
-:10BC1000D68DBF3E1FFB33D998DCBBD1F97C69655B
-:10BC200022013BC07E810B812E3BB0727ED77029F2
-:10BC3000C8CD841E2B4DDB78250C7A4CB96097005B
-:10BC4000DF5B0B95DB4D342DFF95BD88A7DFBB383F
-:10BC5000871FF0D05548979CF6F3BBA79C2142F371
-:10BC60003B572E1F49827E8E9A25287FF2C3A64F0E
-:10BC7000823D65FB603FFA8736D53F247CD32C5844
-:10BC80003FFB479413BBF91EA4FF5D05D36D7AF902
-:10BC90009EEA080E035EB4BCDD4BE5DB0CA4A7B73F
-:10BCA00086293D99148E7C48E9D3E6DAE63D25C124
-:10BCB0007CE9778D3E7C917A11BE35E63D14D760E4
-:10BCC0006712726431D8919D206FD06E250A07EB00
-:10BCD00096C1CADF3FB06231D8A19D76AD7CE562E6
-:10BCE000599F57FE7006F3AADDEB4FF6EC82FA9EE1
-:10BCF0002CD2C4F01320AB74F64C41328FEBD6E754
-:10BD0000967FEFD6D9CD1A5D761530BA7CF9626789
-:10BD100035C8CD4E4A975609E87097C14FD6528D17
-:10BD20000E3B0B189DC5C3BBE57A0909EBEC408BB4
-:10BD3000A707E9D1E609A01D1D5D7F450AB363345D
-:10BD4000FAB77909F2834D0A3E753FF287CB0FECC3
-:10BD5000672D68221CA5138BC8FCE189E6110F3EF4
-:10BD60008DFE3B0BF215A0D7F745E227E3D4B75C75
-:10BD70002FC5F96C71CB93927578F4E451BCC798D8
-:10BD8000CF5792D97C3A027581FB69BF72BDA4205E
-:10BD9000DF7889BF1BF412257FB03BA9BDF9C9E448
-:10BDA000543D9E983DA2F5AF704D8316E0730F6D24
-:10BDB00047BFB6939714587A8B2764E0EF2FA604F9
-:10BDC00067EBFBE145E61F2E34BB4CE423E0673F05
-:10BDD000F5CBC293A99FD82262BAA7C58B69578BAE
-:10BDE0008469778B4CC256EAFE90EBE7EF053BDBAC
-:10BDF000E540F826A28B8E163FB66F6F99CDFAE11B
-:10BE0000343A9FBA0BE8C261D2F8C4BF0BE83CC910
-:10BE1000AC959761BE8763E58F242F58AC14E37C03
-:10BE200050EE754D30AE395486EB77F3FDABF25BD7
-:10BE3000C5DFFE798F54E703FDBD6126FA38C618C9
-:10BE40007A09B3F16EB4FFAE6C13CAD3FDF3769EDC
-:10BE5000F1D1BCE575DAFF78F4D8C3FA8FDB9F0621
-:10BE6000EFE02E84D74AD7DB4EFBB38A4CDEC7E324
-:10BE700087E8F9D294207F7808CAE9FD836BC9CBA3
-:10BE8000C09F7458BB087C1A9021DE25B4531CFB5C
-:10BE900041DF06C2CF80BEB571E418CD0B2ADF505A
-:10BEA000B5AFBC4CFB11641BE9A6ED06E7DD45A070
-:10BEB0005DE72B360A13A5D3947CB417EC85B5A4A3
-:10BEC0008DD6DB596D2766FA3D69FE1A02FDEDFC41
-:10BED000991DFBF79D9982FCBA4B647C34A11CF23E
-:10BEE0009A4858AFC76D8E483E1FE4E57D24300D5B
-:10BEF000F9FA693D5F533DD90BFC24902A8570A067
-:10BF0000871FF0333B4451E569E05832DA81016C18
-:10BF10001FB10B9B8808FC7ACE1CEA06BFC4DC80EC
-:10BF200046DF22F361DB30F2B5BC3CA38C10170373
-:10BF300081ECF287492EE025C34C6D31204B818482
-:10BF4000A9DEE8A1FF007CFC85AB17C8AD84A4AFD7
-:10BF5000110CF3E02F382F996E05F8587D4D0FF135
-:10BF6000171A1BA13E4F74F5D19FA94B1ACF2F8CE6
-:10BF7000B6E30793557FD0497240EFB5B79C206F69
-:10BF80005B22FDF05171252DD5ECF9875358DC6209
-:10BF9000949E2446DF2F503F1DE8B1E31766D21B65
-:10BFA00083BEAF27FB0CF66E46D014991FFDF795A4
-:10BFB0008BD68A8306FA1C7FFDB3EA8DED739A1C3B
-:10BFC000063CE635271BF23E25D3507F5257BEA1D3
-:10BFD000BCB067AAA17CF2A1E986FC94D0A70CF5BD
-:10BFE0003FD15761C84FEB5F62A8FFC91335867C0C
-:10BFF00049F86E43FD1967361ACA670E3D64289FDB
-:10C00000757EAB213F67F8AF0CF5BD41F1E409E067
-:10C010004F4A8F668AAF5D19CA21D09FC36DD48EF7
-:10C020009BCFEC63D0B7249BA8F631554C694057A1
-:10C03000ECAF1DF400C8F93D8F85BF807AD2E407CC
-:10C04000FEE50B16C91BA15DBB68225E9D1C911607
-:10C0500011F85EB1C78DDFE5D256E40F81AA0D7BE2
-:10C0600022E86DE37A10F376D20FF0BDC1E0E3452C
-:10C0700025A67C12B28DF46F25F72405C6B1FB2CE2
-:10C0800092B1FECDD2BF2F45A5FF1C4AFFE689DB4A
-:10C090006B74FF90499E9CC2FCC3AA731E83DF830E
-:10C0A000781DF57B6CA41DD8A9BC6E24EB14ABAE37
-:10C0B000FA3756D3879FB871FF269ABF684A714EE8
-:10C0C000D7C9CBE4B566DF8FD587330CF65974DA60
-:10C0D00096F810CA3B2A17CB530C72315005F31354
-:10C0E0007819E5A2F6DDD73715E57297C8EC944EBE
-:10C0F00089F2E538F88A96CB5F4E9698BF18473E8E
-:10C100000B54CE82C2DDB9F2D35D8037791B41BDBD
-:10C11000447510CAD9E8FEA95D7537C2E965F4A473
-:10C12000F9439ABF65A3F203FC2B9B44105F568A28
-:10C130002F27DA478FA27D49E721817D64F550FBE7
-:10C1400013F43DB53F99BDF9E7B52FF361DE7AFBF6
-:10C150004FD5972187DC94921ABFFF17E3EC479DD8
-:10C1600049D6FCEEFF9EF427A718F1A1D1A146679E
-:10C1700056203A3ADEFB125B77DA2291D3F62F246F
-:10C18000F84F10E9E5D4ECB34A25AC5BD0255BA9A8
-:10C190005EDD37BB06DB0993780272266178C33215
-:10C1A000D093A494C90985FE03F4E62836CA0D5B32
-:10C1B000941E15401F278ED5BB9A7CD0FCF389E4D2
-:10C1C000CBB752D438D92C324B2F5FE2F9E19A7CAD
-:10C1D000D1F0B0E0831611ED8E0F68B9664FD07EB6
-:10C1E0002C397C00E2CC829FC84762F0DFCBAA5E8C
-:10C1F000EE3B6997812E5D6B04F4B332FDE172C8AA
-:10C200006736113FE067F670980469FF3FF4B0F5B8
-:10C21000C8F48738B0CF332F873880F3A085C58521
-:10C2200032B785387DDCE89AEAC7FDEEE2A37E5896
-:10C23000F78A3C17F2E9671713A48F21EFC69E72A5
-:10C24000D857984BFCC03F2E0F4F32217FDE1A4249
-:10C2500079E21F51A8AF4392E944614DAFB490E930
-:10C26000F751FFFDDD161BA6D75A444C2BF38A0766
-:10C2700017D07A5B7D0E8C1774E43B709CCE5C010A
-:10C28000C7F98F9C87F2C02EF8758B17EB773DDED0
-:10C290005404F184CE93FF8971CD083D53AC7901EC
-:10C2A0009E30EEF710BEC90BFBBE49F20CDC27ED49
-:10C2B000B404FF7103C413D70AFE6331F837E9E50C
-:10C2C0001FA19F0CF8013CB4DB195EACCE26BF1B4E
-:10C2D000E2FD93C8FA15B1F854C513A530B340E98F
-:10C2E0003789910611E686DA1241AFFA493F059B7C
-:10C2F000583A421CEC8790074509E245D9B6D02050
-:10C300009467D78BFE36AC4F705F415B278B9D04E3
-:10C310008EBBA05E98DB42BFBFE811D9FA0D8570D5
-:10C32000DFFD37176E1FCC21F1F97B4F4BF5D92A72
-:10C330005D3CD64562EF0BFFCB6D15160FEDF77622
-:10C34000806D26ACF7AC71F5E38DF67BBB8753E3CC
-:10C350001393D3C15E6EE663DB996691AD0FC47F24
-:10C36000C08FDE5A28A5BB5DFA7E183ECC279FC73A
-:10C37000F57116B3F9B77DEF8DCD8F513AF977DAB4
-:10C3800010E255AF5CFC0CFA8FEF254BFBC1EF526E
-:10C390007E6C26B0CEEF7D7FD669589431F36E392E
-:10C3A00093CCEBE249EF7DFBD5320BEDFFBDE75EB1
-:10C3B0002DE3510885101F5A79E387AF9541FC4A58
-:10C3C00068FE4DE6650AAF52418A9A204F0D68E635
-:10C3D000876E591A1E076F07D31ED802F1C2509BF1
-:10C3E0004BE4A8BDF625E71F05A0C766809FA60FF2
-:10C3F000DB4676727489B9F4779754D1FEB6728AA7
-:10C40000E2E2006F8A15FC0A72C1EA07BAD95AC87B
-:10C41000F4E5D607C59002722CDCC4C8DDF65AE6F6
-:10C42000652A87ED3F0DC11900D2CE052A13207E63
-:10C43000378D20BDDF76AD290FF695DD44C8073A6C
-:10C44000B498CCD8CFC84567A817E56FD32C9043D4
-:10C45000AD171F9D0CEBF57B55BE6871B73453D3F8
-:10C46000813A1FC4DDFC1877DBCDF7639C3EDE7C90
-:10C470009D5EB6AFC0571235DEF5DBEE7076841EDA
-:10C4800034FE8A6EB7B785F861BC975A6C98BED0F7
-:10C4900022627AA2C58BE9F75B244C075A8A30EDF9
-:10C4A0006BF1FB0B2C00E76C4C3B2C647D40476729
-:10C4B0005FF0B0FDC87B92CABF0074FE24EDF73276
-:10C4C0006DF745DAFE32AD3FAF366C86B8CCBC11A5
-:10C4D0002A2F2528EFC2EFFB697F506F6CB9AD049E
-:10C4E000CA4BABFBC380C7D262FA9D407F7D587FA9
-:10C4F0007FCB093F2B1FAAB450FC96FE96953BE7D5
-:10C50000D27E68DEA9F643C72F61F567637F745C4E
-:10C51000CCC7E8B784C173A224163CD1F5A9956FA6
-:10C5200026548F88F0BFE0EF59240EF75138123EA1
-:10C5300006F2F882B51CF4E79E12926FA2FACD9231
-:10C540005AC041FEA966229A4BA8CACBA8D9554E1B
-:10C55000A09D8CDF95557CE8980FF513F6ABE9A705
-:10C56000E4EA30EA9D243FC937BB69CAD381A753A7
-:10C5700054DF4722E70D503EB13CAE076D2756937E
-:10C58000C8790332717DAA5FA2CA63D3DB474D210C
-:10C590003EA63FF771701EB1835F4B7DFD7E924BCF
-:10C5A000F3AA7DF645B5DEFE7965491B21BFF8810A
-:10C5B000A7200EFE1BE2E5603F7EB47D943D77B878
-:10C5C000E54C5A55A1AA1440DE6F138FE8EDDC6CE0
-:10C5D00085D2AB8E0F7A9AF8EA5E8C2F04336A7498
-:10C5E000FAADC312CCA0CC4BAE3FF18F8B413E8055
-:10C5F000BE06393D7784E9F751BDFE5B261F357BCA
-:10C600004250D76B9FBCB12D01F7D3A83E92C0AE6C
-:10C6100008920ADA3EB17CEBCBF09D9418BF270854
-:10C620008C8F32BD210EF2999EC04F3CB0DF907CC2
-:10C63000487E86CEF7B7035609E8AFEFE4DA7A888A
-:10C640001B3E4C12253BED27F3A54B02C0D1611ACE
-:10C65000168008473CCD4B786A0775089A9CA486DB
-:10C660000F5DFF8E34552E90DF7757D1FA074DC1FD
-:10C67000AB54578ED63FE8086E813CFD936D54AFA6
-:10C68000EF1D8DA36FEB96294DEC55E3E6239ECF6E
-:10C69000762BD990A7F5DD2CDF4EDBEF750F794DAA
-:10C6A000349FC86DE93E930379ADFE966E85B6BFA3
-:10C6B000EA61E700882BE803B9379A17693E41978A
-:10C6C000E7599ED858DA77F23F05D0431D6923A772
-:10C6D000B3009F3FE4FA41BE36BEFCF541C86FAEE1
-:10C6E0002712C4E7324F1CC175F8AAB97C04F0D6F2
-:10C6F000D7724644431DFEB475A176EA142FC17863
-:10C70000B210E242F960BF15F798D07EDB4E49B017
-:10C7100004F0DD9506EB5C91C6FC812921DA8F8E51
-:10C720007FA650BEB34E0775651919D6FB5BC46F63
-:10C73000027811E5F01FE57F2F01FDD4375B714CC6
-:10C74000A5E36DDAC0FB5B25D03FA15601D6FF04FF
-:10C75000877AC2772663C73768FE5A7F4A2FF81B4D
-:10C76000961D8C3E37F9FAD3A6D3B4C3CEE86293B4
-:10C770005BCDBB8DF976D59EF4BA157732FDBEF947
-:10C78000C4815C3000AF1E9B857EE4660D1E720086
-:10C79000E1B93A3827E9363ADFC69FB2B866E340D6
-:10C7A000C912987FE31E13013F6EF300A5271D7F7A
-:10C7B000ECA37C284FA6F3907BA6F2943E02070BD5
-:10C7C00096DAE9FA7E3D5F16015FF569B7EEB6517C
-:10C7D000E7E8EB823805E8A13EAD7437D0D3A6393F
-:10C7E0006F213D26A596FEA49AE2EBE8DDD54B40ED
-:10C7F000ACA599185F5282433967766F43FCFF6B93
-:10C800003919B1BA119DB8CF9907FF47E19B2CCADE
-:10C8100015505F5C465D22A053217012EC10A5C23A
-:10C820008671D20A711996E7AE21A66E0ACF112938
-:10C8300039B99536B517C826B053F2030E8C7F9AD6
-:10C8400013AA76803F7AEC1CCB47D6E912E2C55199
-:10C8500014EAB7D17E6E71F122F8226966D906EB2F
-:10C86000467979E85829F00BB303942F1663BCE797
-:10C870006022A97F8EB63B6ADAD8FD235AEF68B2F0
-:10C8800087805DD9C171EB6BF07BC5D4AD743D8EF3
-:10C89000AAEB6776FB4558AFA36E637E2FB7F141D5
-:10C8A000C0DB23A92F2E81F9A559E59E140ADFE7E5
-:10C8B000525FECF666209EF36DB4FC737FFD42B7C9
-:10C8C0008DE2FD68AB9C29EAF293FF40A536CEE3EA
-:10C8D00005E453DEFDC587808F69F98F6D54FF7EB7
-:10C8E0003D59B307587941BEC6D7D4AF9D4DE168D5
-:10C8F0001DCD2BB622D8F78AD4AFA27CFED5A7CD0A
-:10C9000044EB1FEC09C79C7E9BC38CF3200EB067E1
-:10C91000A6F168CF38DC6C5D1D53F2D14E3A6A67E0
-:10C92000F81AC93161F922F3B322C407AC53781362
-:10C930009EE5214D01D0CF7C364F58BCF7B03C4529
-:10C9400082B029DB1FE47A56A07F682FD2ED071250
-:10C95000F0638DFB877C54BED03A9C61A27AD87379
-:10C960006105974BFBFB6CAAEA2F7A4806C4631F4C
-:10C970004D6572E6D18072BB45021A1B66E75649C7
-:10C98000603AA4E9EB0AD2C73BBF32F65C4018ED2F
-:10C99000B23D2E938AB749BBC305D45E763D27824C
-:10C9A0001CA16A7EC761D06F1E1EE9A610F89FE623
-:10C9B000B7B9591CDED7B7E44BB3C13E7CB5D00440
-:10C9C000FCCF8B7E11CED99527942681DDC68FD2E0
-:10C9D000E9EB4BC240378373EE043F5000FEA59F46
-:10C9E0000FDBD9F9D0910CD20F7161DE2B13FD3E14
-:10C9F000A1C6BF3B5B6C98527FFE5DD01F5FEB22F0
-:10CA0000B84F2078039897DA09077CF1F2A7EEC6B1
-:10CA1000719FE10349EB40DE9E63763D900BC63982
-:10CA2000C24F7010E778DF16488279EF771BEDBFB1
-:10CA3000B23466C776A632F9D9D9C2E2A0C2F54FA0
-:10CA4000605CA7C3A2C923D7D2F05CB0E783788E1D
-:10CA5000D61ADC2683BCB21145117571725BB631F2
-:10CA6000DE255CBF95C58752D938D1E70D5C9CD6D1
-:10CA70007FC1EEF1FC032D8D3E9FD04C02288FC864
-:10CA8000103BF7B06D57657AB2AE9F6D9C9C2E8EB1
-:10CA9000431F0F5F379390EE9CCAC3FC8800F37965
-:10CAA000F8BA80DF897738B115F66528C175C33AC1
-:10CAB0003EFF5DD44B0ED213860373568853E8CEE7
-:10CAC00085122F3F324AFFF911FEC07D752E067F79
-:10CAD00048C67CF47EFAA3E03BD37F77387F2DC035
-:10CAE0003CDFAB242360871232BC08F8B7B1D28197
-:10CAF00071EA87498FCD06062EDF23EAE3C58D0351
-:10CB000097123794E23E960476F0C32F951BE254B9
-:10CB1000DAF9302DBFF9C4068C1F3E7CF49A30B58B
-:10CB200014C118B2507FACD1D673C69A1FA96FB783
-:10CB300004952CA0FF975AE52CFAE95B00279CABE3
-:10CB40006A9E340BFCBFDF8AF519802727AFEA8F76
-:10CB50003536D41FED76EAAF019D5E9C8CFA9416B3
-:10CB6000F3A09FB5F15778181D8EA8FE7C023533CF
-:10CB700001BF1D8EC01566B41399A7F64E47B24685
-:10CB800037CDDDA0FF0E0A11B908933DE860F9E446
-:10CB9000B4E6EE76A687B1FEC893FC6EB0873AEC99
-:10CBA0006ADE43307F50E8413F41F9BE5502380FFD
-:10CBB0003A027EF007951D5324D02755E92E9C8715
-:10CBC000E5EFACBD200F333DC1AB60B7100FB38FA5
-:10CBD000DE4BBD904B5C31FB19E16EA41FAFB11F62
-:10CBE000FB5C36FE7B9C39B0A334528FB60FE3B9A1
-:10CBF000807B6C18FFD1EA1FB618ED642D9D92C69C
-:10CC0000E20C204F80AFB5EF42F03EE45F2B69426B
-:10CC1000FEB57A8DFB451A3F0BD7A718E297DF4A7E
-:10CC2000F5E1FA687240B85E8CE59D2A9DEE847D40
-:10CC3000F471C7498E33CE0C9413F1C72953E5081C
-:10CC400051E3493C9E33D3F824BEBC30C671A3E502
-:10CC50009F966AF2EF884AC7FF600F2E4CA3FFFF32
-:10CC600050A87F91035B076F85F5F9A36AF716F566
-:10CC70001D3809E47745945B5353E13C957C1CD205
-:10CC80009BE59BFA3436DE5839C6E20FDB1E945022
-:10CC90003F3FC3FB1DFE1870D75F771AE4577EAA8B
-:10CCA00084FDD5F30ACAB1FAEB8958FED1FBB793DC
-:10CCB000D08CF1FA7761F968FFFDACFF973FF5E39F
-:10CCC00083B3A1FFE3169355E7CF6D3BBE301DE262
-:10CCD00095DBEC542E1BF95606BEE57D64D40F029D
-:10CCE0003EDFAFF945CAA2DD5573C16ED5F1F96CCF
-:10CCF000B0BF22ED79BACEFB1D5AFB3B77833D34A2
-:10CD0000A6BE33AA7EBED6FF6AEC3F1A1E4D8E40E9
-:10CD10001EEC2DFE0F560D3E9443074C51FD8DCA5F
-:10CD2000A520F6B7690EB33392FEBAFE270A0FF4B8
-:10CD3000172ACF023BEB4122C139E768BC27A9740F
-:10CD4000587F7D92615D23F8BEC5F0FD9F5BBC24DA
-:10CD5000A4E3B7CF04B72D027E4BD2D689283BB1CE
-:10CD6000DDE12C12D2F1DDFFC0F151E1B82D0E1C36
-:10CD7000F3FFC270F80C7C1981A3C0F0FDA3C2615F
-:10CD8000B65DCFBCACCB5B4492A5CF97846D599771
-:10CD90007576CB8C33A2213F73C86BA83FEBBC6484
-:10CDA000289F335C6428BFED8ADF909F3732DB50C9
-:10CDB0007FC175D9902F278B0DF52B6D2B0CF98525
-:10CDC000E25A43FD696A9CFC76EF0643BDC5D283F7
-:10CDD000867A4273CA77C07E59F0C1021BF8173BAE
-:10CDE0005DA6EA10C5CF4E3E684B8E211FCBD47E88
-:10CDF00047F59D370DDB2F149BDA411E2EA4AE7034
-:10CE00001BB5D7D2EB02EDA0F7AB45229AD16F0E3E
-:10CE1000B1F8C9072BABE0FB9D8B89D8ED8EE46F91
-:10CE2000FF2B42206FCD96F15C9BBDD884E7067640
-:10CE300017D78CBBFFB04FB5DFF744E9FB51FA3190
-:10CE4000B3F393D1DF8BD3195D1D58B08FC03E81F2
-:10CE5000CD15C27B3E8353767A21FFA505DFF6828E
-:10CE60009FD135E5112FD04F67CE570DE7F21C0546
-:10CE70006C7F26BADFBF55FB2DB8FEA80DF4E7EE98
-:10CE80006C86CFE87ADAF9F4DD361637FFB8E6B902
-:10CE9000F8639AE7E5746667EDB68530FEDF5DF40A
-:10CEA000F1C07FAF3ACE81058F1306EFE3780EB95C
-:10CEB0002B4790F47A564BE1DE28CCA7D3B7D30B9F
-:10CEC0007AB7CBF788C1FEB7C27C628C63F3323C81
-:10CED000ED163FDEF93CFE27CF6767CC7D775B9C84
-:10CEE00079156BF3F2AAF7283EA6793DF5179E5700
-:10CEF000581D2F359DD9A7BB25C64749E6C0CFF39E
-:10CF00007DF1F92F69B6F19C5282DFE807E417043E
-:10CF1000C63D7F745EC54F3C7E5D635152018ED726
-:10CF20005BD839DB7380479A9E0F4EAA80FB0AAF0D
-:10CF3000C3792D0EDAEF48186F1DD606CD063827B7
-:10CF4000920F25E9F9888FD56B8CED56059CC6F3B9
-:10CF500052EA39038AA7FD105FD6F036669DFF4C72
-:10CF6000788A476F378AA7EEA29BC3D344F49D9A71
-:10CF70002E21BD4C84278D8EE2F5F3FF2A1D2DBE98
-:10CF800071FC20FD7CDCF8F9AF463FF7A64B37C4B7
-:10CF900067FFBFE2E7F11BC4CFE8796B81D4C73AE2
-:10CFA00007D2E915900E27734D6717839FBDD88C64
-:10CFB000F1B3D70E1734927C7D3DA6075E5B36A990
-:10CFC00011CF8F553BF1ACD65953EC7E5F53F1F145
-:10CFD00090D7AD9EA7F3A782DD7BB67AE5B8F322A2
-:10CFE000CBCCC6F38BC411999F99F64BA40A8C9FA6
-:10CFF00051BC1E1B67DDB5758B37DE8DAEDBD9EA04
-:10D00000B69B5A376D3C8AA798EDEEF6E6DF10DF47
-:10D01000C309768637761EA0EF7166B7F701BE6941
-:10D02000BFBF84A20CB0FF09C6FD56AF493F02F056
-:10D03000BEE665F1F001416AC47741562EDB0DE78B
-:10D0400051CEAD727310D2D0E038A6AE67595D6C88
-:10D05000BBF339B53CD29E2393A5B1F58EA876CF0C
-:10D06000AA3A0EED07C2CB39FA773FFE21AA3CBAA5
-:10D07000FD4BDE442C3F17E73CE6B7D4F6AB6BC75D
-:10D080006F4FEA53F0DC1F21528EFE3EFA285DA955
-:10D090007CB0C21BFCBE97D67F9D0B7EF973104FF0
-:10D0A0009DE2C2F33D84273ED8F71FED8797F1BC80
-:10D0B000C6E54686F7E87E75FD85BDA9F1FB8B8741
-:10D0C0005F6D5EDA78A524807E1DA926E27E36BEDD
-:10D0D00019CE39DC59499A707C5E427852DEA4FE42
-:10D0E0009C2F421F174CD23ABC48A3F633F0FBCA20
-:10D0F000A5D0CFC05993B8C3171FEE78F2E09F5464
-:10D10000FAF198833BE05C0159CFC53CB7F72BAFF0
-:10D110001DEBEDF78EEED7E338B73C19B448B4DF1A
-:10D12000BBD4736784047356E8C6DFAFCE3BBA9DA9
-:10D13000C7CCF6C7C91B66C45F5FEF4339B1F8E7D8
-:10D1400035D55EDEEF2D32F8C7B5812D16B06B6B8D
-:10D1500097ADB0482E289718DDA970F409C19C122C
-:10D1600057044F71E58F8A9F81F3413CB7B1BE9957
-:10D17000C373C7C5DB19FDADDF3E686AA4E911952D
-:10D180000F57C03E93AE3F77069B5F5FAF2317E01C
-:10D19000EFD39FBFA0707CFA10C1B89D2DE3E93D8D
-:10D1A00010B71BE6881AE7332D87FD8661755FACE3
-:10D1B0009096B702BC55A9C8E7EBB7AF403FFF96C2
-:10D1C0006AE6E70F0804CF01BD392F2104EF1D10D7
-:10D1D0009B3CF828CDBFF58724D2ED8FD0C71342F2
-:10D1E000781AD0476A5BE073B1E2D35206E3F3DF0B
-:10D1F000BAD83E5E3CBC9C55E5A956AF86972CB18B
-:10D20000EAAFAC36CA350DFE146BF83D12239E3ED4
-:10D210004A8FA1F1F5DD2F5439FD5A94BF547B3E5E
-:10D22000B6DF3237433DA71BAAD884FA4AB14A7801
-:10D23000B65885C7A3AC467C7EB8948890BFD32AE5
-:10D240003D0DF0DD556B8E92C321EC67FD32A76179
-:10D250005E4FF4FE781ADC4BCA2F60F2F7FD2217FE
-:10D260009E137F80340970FEAB8E28F3912F896462
-:10D2700001FA3EA7E24F83EF1C91136682BC683629
-:10D28000C7E4AFBB543A3A17A85C85E7DFDBCD783B
-:10D290001EE1526DCA72887F2B018B1F8E375D6A2B
-:10D2A0005F9970BF6E5D35BDA7D935E78395E3EA19
-:10D2B000AF5501E37AF5093DB8FFA75490A66394F2
-:10D2C000CE267FF9F2DE59347F36642A61E7DCD856
-:10D2D0007CCF86B2B473F1844FA3EBAE165D350DEF
-:10D2E000637DE56FD8BCD6D58516C296D83D877AC2
-:10D2F000F6CDA2F9860CB7BAEF387F1EF0EBAF9AE5
-:10D30000C7B707A2E9E996271D867CD97922E07B79
-:10D3100014DB62EB87F7B29C6C5F87F7E7C23AAC2D
-:10D32000DB1EBB9E3BDB85F5AEFED15C1FCBEF3E2B
-:10D3300090C5D6637D3D17539E1FC84A60E50DB169
-:10D34000FB5F95E954E59D980BEBB23E0EBC2B328A
-:10D3500013118EB73B56AF83FDFB2B51F655452677
-:10D360008343CA64E72BAFF6BED09106F4B09313A3
-:10D37000E11CD95B6EFF14A0BF0DED97D0CF4F57C6
-:10D38000EB3BD2034F66D0F4EEF3CF9D82FA0375E8
-:10D39000C4CF49F1F5C0E10C4D0F68F7A2357DD837
-:10D3A00063077D04FF0BFBAB1404252919D65D79B7
-:10D3B00008CFC5F43A44760FCA3F536F577F43A551
-:10D3C000E7AB476F6EBDEFA937DA4567C1FEF3449F
-:10D3D000ECBFAB82B4B7948E7B95D25B2B9D0FF9DB
-:10D3E000E0895BF5FA46E38778E3DEA81D78F5E887
-:10D3F000CDD98113CDF36719BE1BB203DFAF7E62B7
-:10D400005FA904F3ECB93596BCD5E4F22F55B918F1
-:10D410004D2F5AFA4B55CE5F098D0FD7670E19E184
-:10D4200059D7648447E38F2BA13607BCAB45479F90
-:10D4300006EBACD9A5A46AE60DBD17120FCE5FAB03
-:10D4400074F2AB66338F72EF2887F1E95F353F9155
-:10D45000182B6E153DFFAB264A0F401F4FF3287F58
-:10D460000AEB379C4C9322F4F87F543CFCA974A837
-:10D47000C9574D9F44B7FFAF4A779A3E9B88EE3C11
-:10D4800071E28F07326C88BF0DBC28C0FED1810CC1
-:10D4900089E589B8C80BF6EB6C76EE9D4AA85C78F6
-:10D4A00057E26AAF03EF8329DDD650215DC72BBD5C
-:10D4B000B74DD1AFE3EC4CB61EEB1BDC3B61CBFAB6
-:10D4C0008AC9BF381DD6AF86BDEF71EE7CF2A2745B
-:10D4D000DAFE892113BC9045D66DDB6086F9CDCC90
-:10D4E000647A64FDF657D1EEBB59BA5EDF64D4E7C7
-:10D4F0005FCE10553DC1ECF03BA95D00E708E3E1CC
-:10D50000A13093E1E19EFAE3284FEFDDCEA13CBDCF
-:10D510002593E1E35E3E847299B433FB99D8283EAB
-:10D52000A85CBA0493007CFC35C7CE77F30141FFB9
-:10D53000FEC6FD7B562F043B309A3FBEA7E2E92B87
-:10D5400099EA3B84E9C13B33D13F0C70D0DF5B9F4C
-:10D5500067F0AEDFBE05CF275FCC50ED6B953F2F58
-:10D56000C23ACD8CCC2F459DDF05C7C836D0179465
-:10D570006F4C78BEE47533C275F5ABDF6C827AE22E
-:10D580005417DEF7423B96E6FB9627845A75F13A2C
-:10D59000CDAEC9F7337EA8E565835DD890E933D871
-:10D5A000E9D1F6C6FFE80396F6A878FA4BE983C3FB
-:10D5B000AA5DF0A7EA834754FE8FD60BA37CBC93E9
-:10D5C000F1F1A5F3FFBE10F2D17CFCADCC8FA69794
-:10D5D000A2F9F74AEFDD48D7CA1222161AFCA39C1B
-:10D5E00010F8C1A3F41FF1933838DFF644EF4FA6CB
-:10D5F000419CEBD2DED5EB628DFF4416B3B33626E9
-:10D600004A267C1FF2754667D17222BADD285FC4B4
-:10D61000892FD6D6CC41FFF05CCD6DB970EF2DDAF5
-:10D620003F18539F935357817FDCAAFAC7FBACF591
-:10D63000BD31E0F566317CE6178C9C027CBFDFC013
-:10D64000E17D62F8D3DBE9779FF7FF60581A0BEFB3
-:10D65000685EF34FB6B3F1A2C779575DB751FF4487
-:10D66000A1FE09C5F370AD3911CEB16AFEC9B0F2A1
-:10D67000E7F54FDE2423FF300BD6F9686CB81CEABF
-:10D68000FCAF08C17D73281C579798FD0AF08B8961
-:10D69000B6D3F925D1EDFEA8CEE7CDED37298FCE53
-:10D6A0001BE3C9F1F86D14AE3F91DFFA84911CE0E1
-:10D6B000FB378F7C70F15198CF1107BE3F16DDCF3D
-:10D6C000D7B2CCAA7FE0403ED0F4EF80D0B3F905CA
-:10D6D000DAEECD3B32FD3B888E2F08E50BFAFDC21A
-:10D6E0001F295FF851BE211FF7F53AEB63F9298333
-:10D6F000AA3F141DB7117BBFD1047EB14CFC167D2F
-:10D70000DCE90D75DD7FA1CAA5A22CA63FEFAA5DBD
-:10D710002140BCE8FED1781141E7429C9A7D04FC8F
-:10D72000CBD7D47B02CAC68498F1DE992A5E278AB9
-:10D730001FACA933FAF577D51AE5C73BA1FC513DDB
-:10D740005238CE7E9446BFF1C6BB51FDD117BAB94F
-:10D75000FD8089E6F7D9AC1BD31FAB48D33C8C7353
-:10D76000D0F581B496344D7B81C2F3CEA19509608A
-:10D7700047FD82906AB4E33FF8EC34BD5D1254F18A
-:10D78000FC7EED67EF00727943689A164BFF44C741
-:10D79000697E118A7D2EE32E55AEBEA1DDA7B82B82
-:10D7A000763C7F8B3AEE1B75E3F34D74DCA67699DD
-:10D7B00071DE4A16B387DEA86B7304995FCDC6FD90
-:10D7C0001B362EE82DBD5DAA64FD79F4E330C4EF6D
-:10D7D000619CED84403CA54F50A6EACF5DA5643323
-:10D7E0003CE4178DBF0FA5EDA768F5A2EDAC9F67D0
-:10D7F0004A867BB3B5CB8C70B569F62D11310E72AC
-:10D8000015F4A527A22FEFB4FA1F043A202E09CB56
-:10D810004FA878BFBBFEDF2C307F2A3F3BF01EDBDA
-:10D82000599308F2B3EC7CC8A2C7CB851BF4AB2E8E
-:10D83000A8F6C2447234BF6804E5DBFB2117DE8F13
-:10D8400078F30BBFB3C4EAB7F67A96E11CF1FA405D
-:10D85000ECB88A98258C8B6731CB88BFF5D773F1EC
-:10D860005C703CFBFF10C8AF99608F1EE9D0DBFFF6
-:10D870004F6549AAFDAFCA339ED9FDF1E2AF432AF5
-:10D880009D4D147FD5F4B3562F7AFDB5345A5F0EF3
-:10D89000ABFC1C5DEF52D68DD1DDA81D1387EEE2E7
-:10D8A0008DABF91F5ADC37BF98B68FB12F33661C8A
-:10D8B000B55EF4386F46ADCF183F224EDC2E299B63
-:10D8C000E13718276E9794CDE2766709D38B4AC863
-:10D8D000897AECCAD17BF781B9F7C0E2CF9D06F512
-:10D8E000D6A8C66BEAEA5F3D057EAAE65744ECF18E
-:10D8F000601BEC935DDDC1A1BD113D4EB45DDE0842
-:10D90000EF15822055E307456619E3D4E43176BE6E
-:10D91000DFD3BC1AED4B2D3EDD27047624D0EFB7C4
-:10D920006CFFB76DA05F353FFE2D8BFF411667661C
-:10D93000F6EE855E17DE73DD3AEAFFF931DE38CAAE
-:10D94000FF6AFC71A2F518953771D6632279132FFF
-:10D950002EA2A5A3FB2C8254F80A9C4BE512FDBD18
-:10D9600034AD11080F78A859CEA19F5923C84B3167
-:10D97000DEFCAAC90479DF72DF6E3807BFB2DA2293
-:10D98000DBA5C8FE4BE96B0D85AF807F41270C7E80
-:10D99000ECC02FA57F82FBC1AF2FB64BB03F727694
-:10D9A0009E34E8A1F9B3777022D83D558BEF374FFD
-:10D9B00083F15671F80E8DB399A8E7B56F5D5E5986
-:10D9C00040C8370044DDBD8F1A6D9F4659BB0FEE2E
-:10D9D000CD4E4D1D30B9284ABF7B78ED3E1B85AB3F
-:10D9E000A335E085FB78F76597EC83FB786969F2EE
-:10D9F000D0026A471DCC9EB11CF2037FA3F557BA33
-:10DA00000FEEDFBD680AFA385AFE83EC65CB79D891
-:10DA10008F98A48DBF1ECBEF5AF2E0B16DB4FFB763
-:10DA20000F6F590E67D7CBEAB4F11F595EC953FA8D
-:10DA30009FABE51F4B84BCC74922FB4CB309B144E3
-:10DA4000EEF7E179F781D1FB7C2DCBE1FCF8EBE53A
-:10DA50004D95708FB3ECCB1DFB8AA710326B59B973
-:10DA600028D3FCDC9C2F2F77C2FE31A1F448F3723F
-:10DA7000CE57107E8FD9A4F61FDA2767033CCA540D
-:10DA800028E79467F655BBE13EC2F06920CB879B3F
-:10DA90007B6C69867B098A0CA68970A23C9C85E018
-:10DAA000A8FBDAD9E169ECBE9D9A2F62718AD1BCDC
-:10DAB00097E50776C4BE7FF2610E935F038ED8E5CB
-:10DAC0003D2ADF6BFBAF49E789FC6C0CFEFF3CC4D1
-:10DAD000FD6746F8E914C4433CF8E45C532BECC3FF
-:10DAE000DA189CF1F671F7A9E314B426E13B45CBB3
-:10DAF0009A9CF8AECE243F9337948BF89520FFCDB7
-:10DB0000268433D5CCE17B26690E123C4ED3D41447
-:10DB1000F6BEC9328A6A787764E1A4C0513CDF9BC3
-:10DB20009E51D206E7EB5A7FCE831DA6B51F0BA7E9
-:10DB3000B805E04C35D7946C29D6E1AF98C14DD7E4
-:10DB40005D6D277F13DE7B19189A9A0F767565B67F
-:10DB50006488CB940DD558E05CEAE51C554E48AC82
-:10DB60007D6A25932B235BD4F72A6CFE12435C5FFE
-:10DB70009D7F65E7B22F41BD86210B817388DB8EC7
-:10DB800097E33BFDF1F8BF01CEBBEBF476031FC674
-:10DB900073E60D70DE7D06F4F75301CE37423FE0A9
-:10DBA0001FC0BD0EB09B52DB62AFB716576EB8EE0A
-:10DBB00026CA0CFD7786AF48FF1E2C9F685E91FE3B
-:10DBC0008CF7F8C6F6A7DEE7D3F0CEAB781762C3C2
-:10DBD000F9AA469714DF261D3DAD52E98B4A3F7CDA
-:10DBE000D7F7C2F2E25EFD7B0584EC60E73A78BAD3
-:10DBF0008E604F0E39F07DE0329EC9C7B2A16451EC
-:10DC0000E1C6D285B6AE03C94DF83ED1C80A2EE6AC
-:10DC1000EF0F9CD7E052EDA7F4BAA079830E3E8DAA
-:10DC2000FE23FD0F7D41E38F75C8B77B197C606FC4
-:10DC3000C03CFCE169FA73201AFCB753D981E7496B
-:10DC4000DB54FCDFE10AF57211BC8DC57FD604EB15
-:10DC5000998BE5654327059867431C3EFD650E3BA0
-:10DC600027927E3E9C08E703966633FD35D03FC37E
-:10DC70007E1BF0C53213E124366FB033CB34F94A42
-:10DC8000DEFB590595AFE9A3792A5F2558875179BD
-:10DC90001BB6D922F57F9AF3DEF276AA3F3C567680
-:10DCA0001F8CDA8F36A2BB8768CD61F1DBD9C1D872
-:10DCB000FBD6C3390906B9F5547325799BCE6F6538
-:10DCC00036D3E7B387157C2749E3EB68B95498C38B
-:10DCD000D6D197C3ECF18F5F2E7113C8A515AA5C3E
-:10DCE00062E5C4136880F234937A2F4164EBBEF18D
-:10DCF00047330A210EB7D56B96E09EC34ACE9FF3F9
-:10DD00002D3A4EAD4DEA489022F4514B6C920BF0F7
-:10DD10004D47807BAF35CBEC98873FB03BFEBD874E
-:10DD200063F447A4A4DA71EC5A0D9EAD5E01C7DB23
-:10DD3000B8AB3029A887930F3C8BF13DA70AA72DDC
-:10DD40004A5FF1C67C5A5AB8D164D695BB98FEEAB0
-:10DD5000F6CAE539605FAAE79BA2EDA27BB23983E0
-:10DD60001CD6ECA2DF79199F50FE45FF319DFA8F3A
-:10DD700004EE7BF407F03C183C605488F775D9FB3F
-:10DD8000C66F1D2773C14FD2FAB92BA7D8D06FDD4C
-:10DD90006ABA489FA4CC69AB942FEBE4D919F57DFE
-:10DDA0007A4A0F33815F57E710633B73201BEE9570
-:10DDB0009374AB1FE4CD29217018D757246E58DF18
-:10DDC00085E62D87912ECCC4DD86E7A48E60FBEA24
-:10DDD000BA9152B4533F308741EFFC3C3703E339EB
-:10DDE000A94E46B7A7EC4DD88E275232CA1155EE30
-:10DDF000FD3C770ABE7FA1C9CFC87D16AD1F567EF8
-:10DE00008A5B910DEFC49E4A9D5CD2C619ED1DB090
-:10DE10007F22F6D2F3FB6EA7FC38ABBA3F4C61A66B
-:10DE200052E5A5E58FD2FA5B7298FE3BE50B0CC07C
-:10DE3000B8A7DC4404F8670F079F85FC62AF13DFC7
-:10DE400071D3D623CDC47E1F264DFDFD15E01348AA
-:10DE5000C55CC66F8773D93ABEA3E6D31263FF9E33
-:10DE6000CC7FA8F57AE0FE1FADD75D1EFBDEE81E75
-:10DE7000958F1B6D3DD570955E77CF13EF2DF38495
-:10DE8000DA55B4CADE1CD60FD56788AFCACE3AFCC5
-:10DE90003DB1F78756E1BBAEA3BFF301EF54D17597
-:10DEA0000F9395FB01EFC22FCC787EB3C3C2E8522B
-:10DEB000700745B88794E28CEDEF7E578527C5CC77
-:10DEC000DEEBD6EE2F58D4FBFCC7547B2CD15B8BFA
-:10DED000721DDE58937CF02EDB08DECFD5D631FAEA
-:10DEE0003CAE45BDC77FF3F643491CFBA1D4603F60
-:10DEF00068E346DB1117E13D6E5DBC7B9DF7DC42BC
-:10DF0000A2ABFF6932DC01FD7D7A5B96212E11CF39
-:10DF1000FEF8912A6FC15E5062C22518BE5FA47ED2
-:10DF2000A0A21FFF0A1B3F32AE9328BA71F7E6C8C2
-:10DF30003FCEC1F8CD5C11DFB1B0133C0F5BA6BE84
-:10DF40005F47F513BE5748F55235C86FCD2F02BE57
-:10DF5000179380AFCBCFE6A4EAF4A4DA2E5A1EDDE5
-:10DF6000A1DA0177A8FA26E9BC66373A248E8BE855
-:10DF70009DB17A8B53EDE868F918AD178C7635A50D
-:10DF80005B456F078CE11715AF374F1F93E2D0C782
-:10DF90002D7F11FBB26C6ED03C0DE4663547601FDF
-:10DFA00064569551DF3B7299DFE1C8751ACEE1D610
-:10DFB000D419EB25423DE0AB5CE70DF9297A7DC42D
-:10DFC0009941EEB1FE36ABF4E07BF7AC00EF372EB3
-:10DFD000C965F650499E9C9A4BD3237FA8EC83DFFA
-:10DFE000A11869E549AF07DAC97DC31E98974D04AA
-:10DFF0003FB57C6D55D1115A6EF9A905DF9D2427D7
-:10E0000062FBF7AE664EBE8FF273BE2AE71A3C6C17
-:10E010005E0D9EB05040E1C86C60F064F70F72BCBA
-:10E020004EEE65D7B37AC5B91683FEF1439EC2772B
-:10E030006BAE16BF0CB5C2EFA164D7CB3CE8BBCC2E
-:10E040007E8EA8EF6EE27BA9997ED6BFCB1FE2EE53
-:10E050002D8ECCBBCBB4A218F445579AD30FFAE25D
-:10E060007379C1329877C3857018D036EBC2100F20
-:10E0700076DFFE3C79167CD7E62799C54CD81F770A
-:10E080005E60F0F544D13F21BBD575E965F0B9027A
-:10E0900025004F5AA284EF10D1BF7CD0AB69C9AA2A
-:10E0A000DE482341782F88D8683DB0831CB49EFE9B
-:10E0B000DE260994C23E412875DA74D0730B1DFE2A
-:10E0C0009336D0AFD37DD3E15DA1170EC78EA7D70E
-:10E0D000AA7A87C27FA71EFE78FC31FADEBA5ACF31
-:10E0E00012C78FD6E8DE591DDB5EA59A00CBCBD7D1
-:10E0F0007AEE86F934B40BF81B5D1ADEF7E70536C5
-:10E10000E6A6C23A1DE1805F33FBCB91AE32159E8D
-:10E11000805DD1EEC80DC13BB2EDC99F4A07FCC777
-:10E1200083BBA1D92CDFA7E7E77601D7E348D4F971
-:10E1300035CDCF782C97E9A3D37981AD30FEE613A6
-:10E1400007F09CE083472F09E3BDEB73A378E3EA74
-:10E1500099FFD2B086BD9751BE96473ADCD42EE0E7
-:10E16000BBEA0DCF1E0FE37EF17682FBA00DFDC74B
-:10E170004FC33BAD590DF24CFDEF126435B077E360
-:10E18000D212467F1F5400BD9DD9BFA201E95A2477
-:10E1900022413A0AA2DD956D63F6A886DFD34238A4
-:10E1A00017E267A74DC4DF46CBAF59942289E6AF8B
-:10E1B000F91C7E787FE1EF8FBF213D067886B81885
-:10E1C000BC7B9017FC12E0A3BB959D27EF5E48ED4A
-:10E1D0001E5A6FA1936C85FCC2361701FEB8513CE4
-:10E1E000CC8AA28B59DB199FFC283751E55782EF67
-:10E1F000291DCF4D50EDA8601DDAAF741E9D731020
-:10E200002E9C87982B7F15E9564CC671331BC29CF8
-:10E21000FEFE899646E84A7E3637F566E0ECC77D15
-:10E22000C64DAA9C295F7B947B5B47072FE69A919A
-:10E230006E329F3DC2817F48CB5B177AB03EC607E6
-:10E24000339F657ED3265A7EBF41AE6CC0F97439C8
-:10E2500098FD48E5CA4980EB94690BBEEF776A3AAE
-:10E26000C17766EFB8103E8DE25985F794C0D6931A
-:10E27000A77868A5F99FE54A38FE6921781FACFBAD
-:10E28000E94C76BFBBCBB403DF3BD5F83E9A4F7F5A
-:10E2900096CBFCC9CC3547398827789CCC9ED4E0F6
-:10E2A000D3EA95E4559C05FCCEAA1E423C34AEE16F
-:10E2B000D97D0D159E8542A000FCB461B5BF93AB1E
-:10E2C000BF6D3E44E16B2CE6909E9FFCBB57912EA8
-:10E2D0001B7B38F6BB413DAF0AAB74FED5C1EFBD29
-:10E2E0008A7A65E9008B1F340E1CE7EF7581BE3911
-:10E2F00089F4D948E9CF5E0AEBC6ECD86B96702E4C
-:10E30000E8CB68FA745633B90831D742F60E1CEEE2
-:10E31000FF86D6DAD0EED7E4AFA8C209EF08827C38
-:10E32000FD8DCAEF5AFF117FD5EE07FAF6BD3BFD12
-:10E3300024BCEBD6E8E7FC701EF93F46F50993D7FD
-:10E340005222FC7660A4FF68FCE5E631F91A438F9F
-:10E350007C184B8F687AD6F77405BE97ACAD1FAFAB
-:10E36000E27D54BFE7B1FB578979BC0A8FEC853851
-:10E37000B644F9B9BB14DEF50B144B809F54A71FAC
-:10E38000E23B7FEF7E5DDAA0C3D76981F23BCD9F90
-:10E39000CE77203C942F92F274EBD750CC7E67EA74
-:10E3A000C9EFAE40BC36C0DA51BC3604EFBB0FF14A
-:10E3B000EC25E231902F4126BF1AD6DCC5DE05D709
-:10E3C000F4DF731CE2BF4171E13BD74BFB57207D6B
-:10E3D000128FDD5FC8A15CC375D6F84CCCD5F61D95
-:10E3E000D8BB43D4AF6F857889E6D727D605940488
-:10E3F000692C9FA6A87EFD4CD5AFB7CCB6FD59FDC4
-:10E40000FA4DCD3F41FFE721EF8F30D5F884FA8DEB
-:10E41000067EBA2D8FD92D929A56E431BEDC54DA9D
-:10E420008FF4BFE97213F28FAB9AC911D705A3FC21
-:10E43000D3E260D4836374E8EC5F04FB110BBFC2CA
-:10E44000892007E2C1FD19AEE967705E851C67E7A8
-:10E4500028167CF0F344FD3BA435798CBEAFF599CA
-:10E460004918F0CD3709E3D9BFF1FACB0957CDF9F7
-:10E4700027BA7EFFD29784E782AE3DBBF2F3905776
-:10E480008E26E139929C702DD2C535CF1C3FD081AC
-:10E49000A78DE1E95A7F25D2CFBBE99209DE096B4E
-:10E4A000ED7F623EFC5E74BD0AD7BBDF3537031ECD
-:10E4B000767CED3BF3E15DC94D212E05EE9B5DEBD6
-:10E4C000FBCA1F41EFD51F7D18CF7DB57DF37FA11E
-:10E4D000DD6D0A1D61DFFB9244A877F59903F30116
-:10E4E000BF6DFD6D58FEEE3347307FF26BDF311F9D
-:10E4F0002A8DD0F1BBDF3DF2C3DF433E9088F77237
-:10E500001A824F3E0E79529BC8EE5D055F11F4BF33
-:10E51000DF75F0F820F2A146174BFB39F5DD30012D
-:10E52000CF7968F4FB56457119F01DA550BF793EAF
-:10E53000CD7727D4C78A23EE51E7DB00B408E3AEDA
-:10E54000E142C0075D82D287F25CECCF0579EE2C08
-:10E550000E0BF02EE9EABAE3F3D9CF10B662F94A0E
-:10E560001B3B2F368DF20BBC1F457B3BFA21C4F7BA
-:10E57000BA1E5C07FD1D3613D19C118177B320A113
-:10E580007FB4B986F3530E231CD9762A15F6C79AA1
-:10E59000897AAE8BD5EBA2EEA52D19F510B1D3B4C7
-:10E5A0006C5BEC38E893792E953E19BF660EACC8CB
-:10E5B00006F9413C567FA12FD25FCEF9A66E78DED8
-:10E5C0003FB37E6811CC6349D18619300F0FC4FB6D
-:10E5D00040BF282EECBF11E293949FBEAACAC73455
-:10E5E0003180EF8CD8E4402AFC269B640DE0396E24
-:10E5F000697DC0D20A72861FC95D858AF09861FF65
-:10E60000F0A025983113FAEB52F5D351063F6D8FE8
-:10E61000FD4995B207DAD3FEB13F5B9DCCE36FBEF7
-:10E62000D9D83AFCEB0F6E3F668C9787C6F45FEA49
-:10E6300002FDA2ACC17593049CEFBB5015F1ADDC9B
-:10E64000AA8F6347C77B409EC17EEFE9BCF2C1BC85
-:10E65000D448AAC581A2F1CC4BB49CF65321C998E9
-:10E6600092BE1BBB77A6C9EDCD7B54BDFBE22594C2
-:10E670003B9B833CD3BBC1CBA877FFA545266F53FB
-:10E68000C3F2E0F39790BEEF3DC1F4EEE61325022E
-:10E69000D0B3F61EF2E68A6BA87F153341BADE2CA2
-:10E6A000F49FF642FFDDC44D2D7BB279FEF02D20A4
-:10E6B000FF7EFDBC7D0DB43F653221BD9DEAFDC4EA
-:10E6C00091364E0F1FF303B8FA10F2E366D52E28E9
-:10E6D0005F7BDF01F0C71AEBD9EF116C1E50F98B8D
-:10E6E000FA6380DFCD275E45FAD1EC5EDFD3354893
-:10E6F0006F6E4A6FF8BB095543081FFDF317D2D45C
-:10E700005DC5DEC55D52545206F47672F50F778210
-:10E71000DEDE5C4544E8FF608EFC3CBEFFFB3C87D0
-:10E72000EF511EB4F454C03DC9830B2511F8637337
-:10E73000B076543FE1F9EA60ED00F28F679D1FEC7F
-:10E7400087EED620DAD5DD194EB40B0E3EDF8AFAFD
-:10E7500073B3E4F0C3EF992C3DC16DC5F68A8B30DD
-:10E76000F839B4F397866EC3735B1A3E96560DE77D
-:10E770003279C1E0FEB565E8D330EF5F7FCF0A6F35
-:10E780007E8FD2DFFF05D640AE560080000000002D
-:10E790001F8B080000000000000BDD7D0B7854D5B6
-:10E7A000B5F03A73CE3C1226939327E1E9C90308EA
-:10E7B00098841308EF872704102BB583F2B2220E3A
-:10E7C000C823424846C48AD77E37830331526F6FCD
-:10E7D000AC2FEAA576A06AD12B106DAC51030DA821
-:10E7E00014ABB5D1528A16BDA3222F918CE083DEE3
-:10E7F000D2F2AFB5F639C9CC640262EDFFF9FFE998
-:10E800005737FBECF7DAEBBDD7DE9336D9BFF18E85
-:10E8100032802BD561BAAC03A42B6DBE3B3201D242
-:10E8200000F435986FB07B9D3A9647FE430A6DCE53
-:10E83000C5EFD3C0081501E4DF23192137408A262C
-:10E840000164516A335307C008C0BF0691AA811200
-:10E850006F31C027B5067C3800F84FCB0658CEFF85
-:10E860000058B1A8D5A1617F554F89FE329D46E978
-:10E870002D989EA3BFCB305F013778B13C4B966E8D
-:10E8800098C1A98D53ABDC4A8799F3C87D64E1BD7B
-:10E890005370FEDFA9043D0987E85D88DF310F7EF4
-:10E8A000080DC0F9F7AEF4F6D5A83C73A92E633E67
-:10E8B0002B03BE4FE591350ED82C75ED7724AD6B4B
-:10E8C00004D5F39649582FAB678A1EA4A1E4725B66
-:10E8D00012B52B95F4CD1AE5AF7E14084E59BD74D0
-:10E8E000EA072064C2C15B66C37A47B353F4F5F408
-:10E8F0003DF407E56A84C7244DB5CA4BA99DE601DE
-:10E90000585FDAD96E4ABE97FB9BD233490FE23C7F
-:10E91000A737044A204FC0C1EBEE8443684DF2DCB8
-:10E9200050143CC6131CB07D6830CC6D2C22F87B93
-:10E93000ABA89F6C9B9EB11E3715DC81926B526811
-:10E940009C20C36B00CD03D329B83E3FF59BEF5D00
-:10E95000C5F0C84AD113C163CF25021EBBE76C9333
-:10E960003760BDEA2229E4C4F9DDFFE28C525A6720
-:10E97000F54CB70E98AFF6290B695C08B8E031CCBE
-:10E98000836FD1BD53305F5DE9D5D76BBCEE455485
-:10E99000DE3733495F8FE50F3E2F1994AF0EB84332
-:10E9A0004998BFB259E04375F3D3CA8D98F620BC9D
-:10E9B0007353BB40C98CE2CEF900ACE1F9544F3A35
-:10E9C000D1FF656C1F9041972762DE111EA8E3FA04
-:10E9D000AB27860712BC4E3E9F3497DABF62B30561
-:10E9E000689C57365FBA292875EDE7A4DDDB44EB58
-:10E9F0003F89EB0F60F96F9FFF7388E8612DD28329
-:10EA00009C837BB4462BA7F2F55340A57DB1F66BF2
-:10EA10008F23504878B5272F99F183E6E945381FB1
-:10EA2000A77FF602B8F5126F8D8670AEB6B5D629FF
-:10EA3000D46E4B06C018CCBF70F7409FBB2B9CB167
-:10EA40003DEF8B4B01C65F57A847281885572E17F7
-:10EA5000D2DA304E036E4C7BAC16F089EFE74ECD28
-:10EA6000CDFDAC7085F7E0CE41CDEA065736E29198
-:10EA70002F59E3EF49F680D107E7E3682E6FED8366
-:10EA8000E5D9E9F81FDAB7CD3D42B46FD9D9E07BBB
-:10EA90002641BFAB4C3CB3F6A5211D182FB33DA2B8
-:10EAA000FECF4DBAF98949975BCC348A2E62F1DEEC
-:10EAB000EDCB253E919D0CBEC604E359ED717E5C05
-:10EAC0006ECD0B5CD84F26B5D36C8CDF717417CA32
-:10EAD0002A1E4674372559DFED227A1A963B2C08F8
-:10EAE0009DE320247267A474C5035A07D10FAD8B30
-:10EAF000E8ACBB7A0DBB047F8AC7CB674C3AA9222E
-:10EB00005CC7796F93901E13EEB3E8A7DE966B7B1C
-:10EB100010E7FBA3FD32F3D9F87A56BAAB16A0750D
-:10EB20001040DEC66B53BDC5DDD7DB66D6FB71ADCD
-:10EB30008B53B7AEAD51B0FFA12D5AA90C349E3600
-:10EB400089C60BE078B4CF2913E15319E1E319DD4D
-:10EB50005078672EE179E35C5AD750256C2B25BE9F
-:10EB6000EBB5416BA1E0DFE7F0FF3DE72643ABAB40
-:10EB700033DFCB971E93EF53D93BA67E3F7F5E4C8E
-:10EB8000F925AB87C494E70686C5E4F3EBC7C6D482
-:10EB90001FD03029263F68C37762EA0F0E5D1D93B0
-:10EBA000BF74CBF763EA17372E8C299FF48FFCDDF7
-:10EBB0003F253CA7F527E073561AD17279FF8636B8
-:10EBC000C7AE3F7574ECFA158800D1FBA4E4BFEA28
-:10EBD00089E8D94A5341F92C6CB5233EE0D26C0F39
-:10EBE000E23CCAFF2C87D627988785CF567E922293
-:10EBF000C78C6BF1890BE1579EEFFCF8F263C217EB
-:10EC0000E779E6FD0F39215DAAB9820F28E0E5F525
-:10EC1000A74E9C7BDEF5DBE3D70F1AE3BD87D69FBB
-:10EC200000EFE3D79F3A3A761FACF5E7F90637874E
-:10EC3000B19FCFE74A2C5FF651D198AEFDBD1BB70F
-:10EC4000CED9AB52599F01EF3509EB77CEE34E9EFB
-:10EC5000C7F54EF02782C374130E95B982DE2F4498
-:10EC60009FEF9BF3F81FA24F4CDD6B73991E619FC2
-:10EC70001C1A805D2DAC9776F544BC48F7B9592F26
-:10EC80005BA8B44269949CBFDFA4EF074DFADE5045
-:10EC9000AB723F0FD7E670BAB156E3EF8FD416725E
-:10ECA0001AAAD5F9FBE6DAD19C3E8AFA18A58FD7C5
-:10ECB0004EE3744BAD97EB3D593B97D3A76A7DFC70
-:10ECC000DDDA9FEBCDFD016F06CBB3F8F5CC5F9598
-:10ECD000182F412EE2F6F391CEE4F3F0B52EEDE5D8
-:10ECE00079A9E7C3A3D50773B7BF1C8507D7E5A6E6
-:10ECF000641EEE81FF1805A3CEC9176EFF65ADB681
-:10ED0000FD65FB85E9C2C21738FBE18044F5AEA77B
-:10ED100031C722BFC9DDDC1070770F9F4E3C8AC31C
-:10ED2000572FE22B7E2D21D9DE8BCAC3BDA3C7F995
-:10ED300093B9CF567EE64C81AFF1FDDE6FE2DF2C5A
-:10ED4000C24F2C9F1D47AFA77385FC3C9D2BF4F44D
-:10ED5000FDDDF08B7B726DA6FC14FB3E6B9FE04BE0
-:10ED600077F6983FC197605C294F8BA1CFD9336369
-:10ED7000F771BF5DF0B7FD7F92436B12ECFF85DA50
-:10ED80005BEB896FF72773BD9FFE7F466FFBAF4D2F
-:10ED9000617D7EBFDDD72F2B6A7FF65FDB636EA2BE
-:10EDA0007DFFDF5CBBD8AF421548BE433A18A407CD
-:10EDB000E192020ED2E5A0403D4C7482C610D145CE
-:10EDC000F778A9C0618B9E64826712EBE39FCF4CFA
-:10EDD000E1FD079F6A4054FFA0A8AC976EFB2EEAA6
-:10EDE0000A349E82E3A11E0ABAAD73FFF2E8BFC9DE
-:10EDF0009DFC5AEE9EDE2E8407161F994D7CE43C46
-:10EE0000F2BA6BBB8BE32387888F5CFACDF3118B4F
-:10EE10008EE1EC8D03BC295DCB67111FE90DF0D3AA
-:10EE2000DCB7998F7C6D3859746BEA13F1FCA4DB65
-:10EE300076CD9917907F263F57FCF561C48BDBE4B4
-:10EE40009486F5D8E42EC5FF73CA07020A3C86A94A
-:10EE500073F5E9DE878673B7850AD71BC2F69D5323
-:10EE6000F1FF32CCF6A053A57A0FF5F8F7ED945FD9
-:10EE70008D1CD389E99749FD4380B640699EE03FE8
-:10EE8000B2EB4CEF4351F3B3ABD0273A5FDAEAEA87
-:10EE900073286ADF86EF5563F223DA7262EA8F3AEB
-:10EEA000A0C5948F0917C6948F3BAAC7E427444690
-:10EEB000C7D4BFEC8C11932F872B62EA57B866C476
-:10EEC000E4A7A8D7C6D4BF3C67414CF915DA4DB1C9
-:10EED000FD157887E7E1BA173ADCF5522ADA69B905
-:10EEE0004619E59393ABFD0BC84E5AE3516122D509
-:10EEF0000E85086E750E97BA1EF9D40792D11F10B1
-:10EF00004FEFB3A1D59D8FF5E530507AD0A697523B
-:10EF10009A676CF1119D6E2F4CD6681F920702B450
-:10EF2000919C52F424407EE2E811F95D01EDCB6F33
-:10EF30006CF01826DB5554F4A97E736688ECDFACC0
-:10EF400064DF15348FF5B606CF1ADA671B781FCB4E
-:10EF500064BCFAC968CC1F7E41B1119E6D6FB1DDF2
-:10EF60003316F39F61F7329637B59DF8C995981F10
-:10EF7000DA66D7A9F65090D94E5CAEC03D4A7AF712
-:10EF800078F6F10F843D15FFFD677982DF6755083C
-:10EF90003B33BEFC8E3C21DF3E76242E5F6EB6AF47
-:10EFA000B86BFA43C4D7EC6D7620BFC5AA2CA32753
-:10EFB0009C4F5F3D930FA1E15179C50BAA9BBE0FFA
-:10EFC000E4EF1577CD83B05BF4437EAC5549464FF3
-:10EFD000F23B7C3C29F13C6E31E7613FD3A39B7E41
-:10EFE0003DFCFDE3BCF3AFD37E2609421989DABBB1
-:10EFF000F97B563071FB7BCCF13F4E4F5C5EDFD12D
-:10F000007F2F086444B7137CA7739CBE5C6E3F934C
-:10F01000068184EBC8E4EF9063E410DEEC423A270B
-:10F020007E519E96ED0024F1F91079C540F8CF206D
-:10F030009300F1145C7A29F12950EC91B04517281E
-:10F040003F1680F201D90B3644C67338B51B56DB28
-:10F050003F0847D1D10C23360F543F4ADE7C427D16
-:10F06000E37A928714A612BE9F022D554D805F56FB
-:10F070003ACF257B95A8F51CEC464F6A33E178B072
-:10F080005762383E6FF2B191F320A1BED696E711D8
-:10F090007659A1DEF37C7283E0EBCB88EE377E1FDE
-:10F0A00032B9FCABC219F182E57AE4BBEE10FB2960
-:10F0B000BF71785BF8DD27062F3EC98F9F777F2EC3
-:10F0C0002FE8EB7D2B8FE58A3690E4629349BF4DA4
-:10F0D0008AD163989BF8185426827F9F7C534F8D6A
-:10F0E0005B771318390BC8AFA1D875E267C932F83E
-:10F0F0009F4E00FFF875A79AF3C6F6735BA93D789B
-:10F1000074C1E7C0EBCA463D9FFE854B280FBC6922
-:10F11000A7FEE7F93DFA7A54813ECF13FAF40208CC
-:10F12000DB890F77819F3BD34E7EDB78387A419B1A
-:10F130002FE55F189EE905C6E7041F9B4BCDDE8ACD
-:10F14000EB9C1FF000F9696E98079E629C8FEFBBE5
-:10F15000E96F185877E155434AD6527AE9F83A9957
-:10F160005B4F66BD4F0AF491CF5DFAD5F5BE3A8F7D
-:10F17000AF90E8E390A42D61384808079237BD8F1F
-:10F180000F5C1005C715FDCA7F9F9F45E7036064AC
-:10F1900090BF788793FD56B001580FADD9397813D9
-:10F1A000C9852FF27DAF51BD51934DFFAD11197837
-:10F1B00075CAC5C30BFFEC44271782976CD2FB417D
-:10F1C0004F62BC19972FF6EBABD24B66BE8043045F
-:10F1D000E1B0B9EC9BA717845F0CFF782D5FF05F5F
-:10F1E0002BB5E0366A5AAC7FF735731DAFE57B3837
-:10F1F000FD22DFCB706EEFF7E9E12492FF0E5C7F1A
-:10F2000002BCF7764337DDADBF3B7AF9A6F8F2C111
-:10F21000E4C4F35CFC2D99E71B344FE2F32589E746
-:10F22000F96F17894FB83F4B5CF9DFFC3CBFC8371B
-:10F23000DEC8A779A6279EE74F2F129EC8EC96B48A
-:10F2400062BDD9C807A9DE373D5F082C984272E835
-:10F250001A9FF0FF1723C7253E845379F4DC70D240
-:10F260006FF5751B88EFACF4E80195F9C81BF982BE
-:10F270000F8281F399394D627F52FB884F97288422
-:10F28000EFD9D09A46FC6AA793FDD9F1EB0F99EB21
-:10F29000473A799CE004D32303899F1C1C98984F1C
-:10F2A0003C1E5FBF3EC2F2697D7962FD749B49AF2F
-:10F2B0002B5C0DD3B26DD1E72BB84099B86CC0E888
-:10F2C00043F2B64C5D4BFCC4817289E0EAE833A49A
-:10F2D00027ED07E6BD12F981735E3F207918DE271E
-:10F2E0003AE097D739CEF1DABD6A81BD7B7EBE5C4C
-:10F2F0007E66A43FC17AB66ABE5DF95176E3F22D0F
-:10F30000AFAA05D1FE7108DB800547C4E6E5F341ED
-:10F31000D36FD0132ECA6F509C29E865453F2FCB81
-:10F3200007921B643FD7BD30A6943617F50F20FB1C
-:10F33000209292CCF222D87B6CA11605CF0FF32D30
-:10F34000FD53EE46AF74C47C7FB7D685266567FE55
-:10F35000FAA3FBA6903E3F1FC2EBA8FEFC553DE87A
-:10F3600008B2639D1DFD9D9162F4DBCEFE15FE5E2D
-:10F37000EE72B7CA433175FF2EE17E6CD58CA304C3
-:10F38000CFB5FD8C63B4CE78F805EE1A9FC67E0427
-:10F3900082DF655DF7BDBB7DFEAB669CA6FE5EE8C9
-:10F3A000A75A7E1D9DCFE392ADF361453DECEA8403
-:10F3B000F757DD9764D3BF88FAC4399AB701557EF1
-:10F3C0009ACF3C8BBEE3F41C2814FE803A4FDBBA84
-:10F3D0005D517478832D9225E476781D3999FE6706
-:10F3E0004712F38FF61DBFEDE7E3F3344BEFE8214F
-:10F3F0009FEBF1D5E767F917ECC989F569EB1C6359
-:10F40000B7BDA880F5123AE71D8D79495B44F6AA8D
-:10F41000A2821EC4F5955F8ED884FD4D92FBB68402
-:10F42000711D9FC3D9E40998FE2788F5AF7AF3A32D
-:10F4300074F2634E52ECC7A3F953BC1F684041AC51
-:10F440003FF914CC4B6D25B88C4F67B86C6F99940D
-:10F450004AFD943C3FB927A5BB6AEB55C5DEE90FD1
-:10F460008A9F7F793776E9B002A177BE9E6C0C2B1C
-:10F47000C0B4BC9BF58F32EB85938D5105599DFD32
-:10F4800051FD44F1106D832C3FAE80EB358105AC0E
-:10F490006FD95CC857897FA2FE2AABE4272CB03312
-:10F4A000BD1BA0A9D9EC3714FB8F7C5DC1FC0433D4
-:10F4B0002FD5BF1DA4761B6FF1F03938F83420F931
-:10F4C0008080E173813AC9CF7E0717C57D60BA5E3F
-:10F4D000D237902E26DB2219822E4222AE017C0AE0
-:10F4E000E57F2B85831427B0D6F5EF3F273FB81172
-:10F4F00054206922E615603F63E0600A9FCBF1CC9F
-:10F50000701E4E6B5E663EC5CCB7CF9A3A6D00A6B4
-:10F51000B7253FE2213C0D4BC847B19F2F93FFBD5C
-:10F5200095E9C69FACDB7B937FE93DCE4B2B937572
-:10F530002987FC4F9E42D2535743B2EEC4710C77D9
-:10F540007180C67568C0FEF86468E475B8DD9F0414
-:10F5500008282AA812DB4FC9BE65056CAF009F932F
-:10F560001F7E2F6533AD3F493DD57A077ECA0083A4
-:10F57000EB65C4C9C72CF72A89E337BC4A9C5CF405
-:10F580004904FF9E73E3BFC7CA4B171C54899F48A9
-:10F59000ADDE9C73C89FDA086E659D706B53845D09
-:10F5A00067C12D30C9FF4B826BE04EA71ACCECDE51
-:10F5B000DF86001A45FA789BBA642BD547C3096CDD
-:10F5C000D45F8E585FA0D229F641F16DA5F6EFD831
-:10F5D0007354B27B2C3C7B68A0C9AFBBF1773C5025
-:10F5E00020F4A3EAF4C3D524E70007B5F50738995A
-:10F5F000727424F10D9497F5242F93EC06C3DB92DB
-:10F600009B2B9AD600D15575F30220BEF28EE41BD7
-:10F61000F032DB23C076D99C6981576C1AF9B26647
-:10F62000AE7363FA49411EE3D7FE57A6BEC26C48CB
-:10F63000761753BBD2CBBC53B270DC6031E8776233
-:10F64000BD60926FEBB3B4AE3765FD318DE2212A18
-:10F65000E0C3E12632E1F74DB333D86F9A5911A9CF
-:10F66000A37881C8DDA0527C4F17FA388BEB1B09B9
-:10F67000F00B1E0BFB59A4B612FEF4427C93D4CEC1
-:10F68000F247A93C5FE42FC37C8DD852C86F29FF95
-:10F69000DE0882479B0C141655D322D968FCFC99CE
-:10F6A000C359AF29A0F2CCE8F2B4E54F61BE60EED9
-:10F6B000049DC849B3F97E762B95BF01BC0E30F985
-:10F6C000F7A838FA1DD749375C5EDA91F757D07C36
-:10F6D0005FB919D88EAD31E56D0CBDD162B1CC18D2
-:10F6E00049F8D7D10F503F15667E9CA2723F7DFD31
-:10F6F00060F205EFC607F89CC0A6937FB24E6A6021
-:10F70000F840C0CFFA1EC5CD10BDF49FB76BB79DB2
-:10F7100006CB1474A7EF157457065E99E03552BDF9
-:10F720003B48E3CF9997CB7C66CC5160B830E5611C
-:10F730007E429AC4FB943F209FF165BC4BAF97116A
-:10F740008F64B9343F09C79B3B4FE2F38959735D1E
-:10F750002109FF390BE983E3A1145FEE6CC4F7398B
-:10F760003E499CFB627E5E943F1EB5613E379BED39
-:10F7700004FFD309F0397F80C077AB7DCD5A478C29
-:10F780007FE792016EE1E71830F59302E6BF22AE03
-:10F79000252BD91B117CA381F9D4611BEADFA4FFBF
-:10F7A00082C1FAF63526BD5BFC6296710BDBC1B3F4
-:10F7B000BCB17AF43BB4274407D74AACE7CE997B77
-:10F7C0007E3DFB5C8164C6DDF455599E99DF35D0E2
-:10F7D000D89EBE9AF49C12FC380DF59028FD7EDE72
-:10F7E0006D67D3B87ECFC7579CBB0451A152F09729
-:10F7F0001A8427F1CBF26B15A697EAB50E8EFFAAF5
-:10F80000695E63CF267CFE21E8025FDFAFEB83F306
-:10F81000EC53658C90B528BF4D554822BACE269E34
-:10F82000C3F08F38C82F37DBA157D1BA66A7831A28
-:10F830004843BCBCF68A8DD4FF5A17A832CADBDE17
-:10F840002D6F8608AF9095EB849388391CD7D657D7
-:10F85000EDC1E70BF5B6611CB755EF49D1A3E3A4A1
-:10F86000D6AFE9C43B8AD7D29C304C35F737919D4F
-:10F87000346480E0570F4AC0F22270AD8BE19C9552
-:10F880002FE295B2527547308DF88D66D5E338BBBF
-:10F8900007EDBE5EC3310DA15A29F647B48BA7FB15
-:10F8A000AC0CB39F1E9A1444629CD9525A6623B87A
-:10F8B000B953748A4FB4FAAD4836ECC4B72A8648B7
-:10F8C00023820CCF4DCA22D24F9362F9BEDD2EF6B1
-:10F8D00005DE157C3F5E0EA21C60BE4F7EFB6019EC
-:10F8E000CBAF8A01592C0FB89FD58A4B75EAD0450A
-:10F8F0009E657A2185FC5CC31064A4AFB7E5786788
-:10F9000050FC5EE07585FD6A6573F5EB1647EDEB1F
-:10F91000E60E391099CFF1503FD4FB503CD4DAF2C7
-:10F92000CE3CC53D56428383F0BD324E3E2E73BF62
-:10F93000CC7AE4B247ED9DF80B1427AAE713FFA891
-:10F940007AAA8B3F88F954273F8BB32F417D89D604
-:10F950003302F931F121A3204566FF32CC13721432
-:10F960001E97C82F267B56D793DC6B97521AE4B2AA
-:10F970004E3E39C2DCAFBB14EF4B141F1B407DE978
-:10F980003115BACA01F0B3FE3211E526E9D152CBE6
-:10F990001C99C6DDB814FBA6F37C255C41F9DB9607
-:10F9A0008A735208DCCCE760E3024E95E8FFCBE4B3
-:10F9B000FE6BCD71FD7664D6C7D41F727F80FB428B
-:10F9C0007A8B44FC10CB7B4FC3A64807E35A8E705A
-:10F9D0007F1B33045DC4EB312FDBDC219B8DF86E84
-:10F9E00080E54E128472087E4681E0B36507049F6D
-:10F9F0007D2E801AB44CAAACFF9AE9B9AC0772F913
-:10FA0000D80870FCCC0EF0559BFACE5D034650B47E
-:10FA1000A85FF071535FB0F4B82971FB78B9FB7E31
-:10FA200085F8D6E5395DF64BA6FEA781C4FAE21546
-:10FA3000DAF9F99661F12588E54BB97096F70FEE82
-:10FA4000DE732BF90982717A50F022F5A05EB9BEFF
-:10FA50005FD0FAE2F5A1EEE2299F1A7071F194A845
-:10FA600041CC27F935D6B2B3E2F0A77ACFF1F9F756
-:10FA70004027DE75E07360D375B40E94E72AD97D14
-:10FA8000D26F1E62BA5E8BF5E4F104CD83C1FFC272
-:10FA90007CAB0DFC14AF003EF534E1A92577911342
-:10FAA000319ED42D1678374A11F9BEA8C8125E06C9
-:10FAB00047C7EBEBBE5CF2471B65C51C1F6BC9E378
-:10FAC000E13683F16404E81954CFC2939161518EF9
-:10FAD000F8F11AF19371D3105FF228CE76541FD249
-:10FAE000BBCA4163FC288F936B15EE990AD17985C7
-:10FAF0002B7EFF0D3E779C6CE2C714F5EBE1C7252A
-:10FB0000841F96DC423DF9AE38FBE2AE38FBE22BB7
-:10FB1000E0C7918BC18FC845E247BBFD87EF05CA9F
-:10FB2000D89EF5CBFDBBE287D472DB927B88DE8367
-:10FB30002940FBFE74925AE1C679D6548AB8F3E1A3
-:10FB4000BF2F08523E7B452EEB854FA7E92F71B999
-:10FB50005F9497B519720AE6F3576139E69FCEF5BF
-:10FB60005650BE66359663FD11FB7C41CA17FC50AA
-:10FB70009497DEE97F2985E47C40B47FE1589DECD1
-:10FB8000C1F2509DD9BEBCA182F235F5A2FDC803D9
-:10FB9000A120E507DF23C6B7F4CECB4CFEF9B47441
-:10FBA000EAA5DBA93FE49F9B917F8E3B61946EC3E6
-:10FBB000FC22D56623BC5D1C09D8091F0EDBAA46B2
-:10FBC00012FEC0425F0EE19993EC56B9937FD9C8FB
-:10FBD000A983ED262A76D6FB5E95FC0AD59B4624A2
-:10FBE000417276B4EE22FE4EF1C89B51DE1499F2BA
-:10FBF000C88ADFA57B0433A2F6AB68A090F356BD9C
-:10FC0000EC748117F0B0C00B2BBEB8F52190C8DFA3
-:10FC1000426B633F449778633FCBEF50BFE2618410
-:10FC2000B797539C31965F3E56C419979E3B3D351E
-:10FC3000915D347CA0B0E78F9AF722ACEF95A15C80
-:10FC40001BD1CFD3843CBD099EDA1F495F7A9AC687
-:10FC50001ACB200DC068DA47912F7FBCEF7DF57D70
-:10FC60000196DAFC0AE111F497749AFF556DFEC90A
-:10FC7000BC9E2A80EFF54AB00E53DE2F093A368B30
-:10FC80003811C17F6699FB764C9DF7CAED6C3F7BBE
-:10FC9000743B8E3369FC00A6FB9973258BEEBF3352
-:10FCA00090F4603AC1607FB68FE3DD6F8290830687
-:10FCB000B9298EEE97BB3F7B8FE4D2F22DB174BD94
-:10FCC000025A1DC2DF1C79E46DECBF72438A4AF20E
-:10FCD0006745636CBDCA0DBF3F209574E50395165B
-:10FCE0001F08C5F2015438041F7868089F7FADCC07
-:10FCF00091B54319E4FFF0B3BC4F0221EFEF52F48A
-:10FD000030D35F8B53D851A67E7E9B2CF4F32470A6
-:10FD100069EE42E2C336335E55E4ADF1212ECEE505
-:10FD200054C3CDCC6FAC78180420CBFB5381CBD51A
-:10FD3000683F5B079F8FA3F7D2969EAD74DFC0F23A
-:10FD4000B3A07EC0F6152C424E378EF910EF9BB44F
-:10FD50000CFF3F86D6E5E0753DD4A33FF3F7D548C9
-:10FD600010CE52B28B95E256EA7388A02717D111B4
-:10FD7000F1F769B1F65612083D7E789BF0E38CE806
-:10FD800094FB75B4BF4ED05D42EE3700D157B7F645
-:10FD90008A7B55427B852514F63F7B9AE0EB17B2B0
-:10FDA00057BAB3473AF63309F5364C67FA92B6D3E9
-:10FDB000BA2F3B9B9A92289E6A66B9EC25BB6CA62B
-:10FDC000DDC84A4FA0E73F60EAD91DF57D6EEE4FD2
-:10FDD000F1656CA7F825ECB795F87FDBEB8E8471A5
-:10FDE000C98AD9BF6237D444FD5F454EA9287FBB7D
-:10FDF000E2CBE67EBF017DE579DA977879E4D81D1C
-:10FE0000774E098181D171054F0F12FC6E4281F14D
-:10FE10009B81744E94D49FF99D568AF6541FCE73DD
-:10FE20007F076FBE9CE3243E03E38271126BA3FC49
-:10FE3000E707D3129F8BBC61F2D7148A7DC3F47697
-:10FE4000CDF8038D7FD421CE5D8E269BA9479C5B88
-:10FE5000BDD3515FF0C788C5276DA2FC687AEC79E5
-:10FE60008D55EF94D9EE50ADCBBB36CAFFAA3DE419
-:10FE7000F4939CCECA37EF71AC02B69FDB9F4FDB89
-:10FE800014BDAF670796A70CA2F8A27CC3D18BE084
-:10FE9000F8BC907FD54AD841FBFBF025BEA334EFD8
-:10FEA0006A0D8C67A81F2DECB8A698EC06111FD21E
-:10FEB0006E1776607B9248AD799D1D382365109D45
-:10FEC000CBDE1C66BED8919F1166BE7776A097C721
-:10FED0006D9F65959BF9FF10790D549DE65BEE32A1
-:10FEE000ED8742752DFB5D51EF23BF4DFCF901C03D
-:10FEF00078A11F9BF19E46DFBFF3395E777E7E9B24
-:10FF0000ABED95FFC2EFF34D7FB0AFF9D357EED015
-:10FF1000187F0ED3B80B4249C071DFFFA45FBFBD8D
-:10FF20005F1BAF677D79A4FFC3651C2FC07EB5152D
-:10FF30002DBF65BEBEC2A2FBA658BAEF65C2F14294
-:10FF4000E76AF1E72DDF009D0D1C9440EFFB35C9FA
-:10FF50006BC4AF29F274E66BA79A24F68768D05673
-:10FF600047705E29897D59F9EA8D150ECA2F0695CD
-:10FF7000F97C533C3FF305494F585E0F2CEF4A2163
-:10FF80003F95E05DB357261F02DFB7D1A2F824DD0D
-:10FF9000B7D1A2EC62BA6F139DA7FB36D1F5E9BECB
-:10FFA0004D7439DDB7892EA7FB36D179BA6F135D51
-:10FFB0009FEEDB44E7E9BE4D747DBA6F139DA7FB4E
-:10FFC00036D1F58F80FFC1F112C175E206826BD385
-:10FFD0001AA74A70C5ED7AAB289BC519E31FDDCB84
-:10FFE00089EE67B967AA6305C2614F8E0CD268BA01
-:10FFF00077B32CA6DFE57215FB0950ED6039E2C737
-:020000021000EC
-:10000000FF313CE522B6933F6F962003F175E986F8
-:1000100038FDA1E5DE3AD2B76F0AC57E5F0E517E8C
-:10002000F7DCAEE7404B0699F1C0BDA137E1F31410
-:10003000D9ADD33E9FDA27EB4E305D00B4CF5B8560
-:100040003FB214063D349EF7D10E218D8E4744F900
-:10005000A98D722890DB793E746AEFAF0EFBB0DE9B
-:10006000D25EB24A74E7CC89DDEF242D76BF7B14D3
-:10007000C6EE778A1EBBDFA9A363F73B1ECE694697
-:10008000ECFE833C9DE1BCBC0F9A77387EC6B45829
-:100090007CB0E03B1AFF27F05563F82E41F83E2C68
-:1000A000D1B9DA3D7BFA685DE15CDD7CAF83F4D7E2
-:1000B0008B85F37D7170FE1CC657B819B830D335E7
-:1000C000B2535F2ADBEBE72081636ADF0AF35EAF9E
-:1000D00038DF31E18AFA0BDB0B51E750F5B2CCFA8D
-:1000E000CC26A267233385F980BEA107EFD73097CE
-:1000F000E86F31F8983F2D8ED36B96BAEF77905E0C
-:1001000013BF4E9A0DF95D2A5B845E13BFDE2EFE8F
-:10011000A842B5B58FE0DB8D0FEBB4CC168B4FFB4F
-:10012000C88F91096D0ED263BAE38333728C5F93EB
-:10013000DC402E06040F610AF05F427DB2A6A35890
-:10014000F8E79D7EE1E787401ACF6314887970A3B2
-:10015000287FFF2825C47E073429D8BF64D963F1DE
-:10016000F084BED2DAB7B05FF92530E1A8CB92AD0A
-:10017000D37F8F56A041FAF5C8CF84FE34DAD51864
-:1001800054B4AEF6F927F9E639B762C67F5EE01CD3
-:1001900092E64F7E8E6BCCF8BB092DA35EA17CC787
-:1001A000B9E4CE57FBD07E8DDFF9FB0C4ADF92B469
-:1001B000C7EEC0F1AF96045EC4DB95C11DE334DA2F
-:1001C000FFCB242FFB2BA682BFAFB047423CAF89A9
-:1001D0002E1FEBB5369761E7F328D37F09109E4AAF
-:1001E0007AFA32DDC1F358AB7E3095FC31CBC1F4E5
-:1001F000C734C7EE5F177B28CE0EAAC2FDA77EE3E9
-:10020000ED9E047814170F102BEF17145AF7CA45F8
-:10021000BC8A06E2FE77A5E947AA746DF4887338B4
-:1002200094737DA18BDDA410E0C7F07985BD90EDBE
-:1002300062B407F8BC5F73248AD7033593CFD56FB8
-:1002400074CF64BE7C637D17BF0EE3F5E2860BAC12
-:10025000CBD413C6D3379CFFE1419A90FBC9D3F7A7
-:100260001A545CD6D63F5A9FAD7188FBB9E0CF884F
-:10027000B9B730B8509C7B97997A53A5CB8453611A
-:10028000A08EF4E30EBDA98BBDF8F5EEC958F12E92
-:1002900008AFA242C6E306CF9ACCCEF31D6B1D9FDA
-:1002A0008C687BBC15E125A74C76117F5CD1CF37DC
-:1002B0008CEAF73B103E4C74036E8DF5F593CDC779
-:1002C000F6CB799DEB423C7B701CADA35956C5BD66
-:1002D000F940DD38ECB7BD54E05DF7F6AF8027CECE
-:1002E000EBB2C2ACAEF3B2E2ECA7C845A9E128BDBF
-:1002F0003DC3845FFB10EF146A57F6C7BE1E9AAF6A
-:100300003DAF714F6FD28B6F157A31EE2BFB41648D
-:100310003B48A4974E91CFDE42F95339A092FD9904
-:10032000D923207B48CF5B00EC2702DDAF13AAC89E
-:10033000FD8AD84ECEBE15ED27ECF7DD5537A6D198
-:10034000FDFEEC944569F96E8A6FC2A90EC0BC64CB
-:10035000F38AFBD9CFBCF76F65543E8FFDD2D73BF4
-:10036000C53973EE0FFEB69CE900B474E7181ACFD6
-:10037000C7EF0B44D2649E5FF9B59F0D27FDAAF726
-:1003800059F730D2CF7AD1392F8274A8491F9755A7
-:100390004486FBDD9D70CACC4F6CBF649BF03898DF
-:1003A0007C72369D8758F7301EEAF1069F879F348E
-:1003B000CF4FF28C69A984E707075AE75AAD59E491
-:1003C000B2AA4E3252E7D03CDF94F97EC567AA91BB
-:1003D0009A86E527C1CBFA63A0CDCEE744ABEEAE5B
-:1003E000E899EEEE3E6E7F4DA1B06FAAE2E2A2AABE
-:1003F0009456079D6755FD9371514D6871273A0FCB
-:10040000B3D65F9DA68032145309BCE7ABF7E23F39
-:10041000E48470DC629677777FE3E7E6FAACFB1959
-:10042000D5743F033FAD7ABEBC279CC70EAD3E33AB
-:100430002EE61E04D96BB4BEEA3313F97BC55D27E3
-:100440001C84DFD40F3D8560DDCFE80ECED985C298
-:10045000DEA8A67B0D19D1DF051D77F69FC9E54FF4
-:100460009A707B72AF6DDAE604F37CBD50D8DD4341
-:10047000B214F6175CDA0AC6A604E35AF5ACF70D17
-:10048000BA9B57D3A4F07C9A37C505271A6FA709E2
-:10049000476BBE4DE9E1255E71CE3A90DE2FE8C88C
-:1004A000AB91FE5747F1D3B3A67FA0E93BE1FEFC39
-:1004B0005EC615C28EED6E9FE7F4F3A5137F18A9F3
-:1004C000B4DEFA4A269B5D407EB49EF35A6D242723
-:1004D0003BF84F37FBDD096739E61E4C57383BB810
-:1004E000BCE3FE19181E299BE410B03EF0D01F4B50
-:1004F0001C0E1CFF980D22C477A6C87DA7BE4079AC
-:10050000B41F882E8FB1ECC07483CCF7998E3D9ABE
-:10051000EF20BB6C49394464E45BC7DEEA5F477196
-:1005200097DA02D424C7A1BAB336F6FCB1128C3DD7
-:1005300029D8EEC603DED456CC2FBA27568E1D7BA3
-:10054000EBC70EB207A4856E3FC515E13CA7BE8080
-:10055000F9C5CD0EBE9FB5E4FEF8FE62F5E06C5322
-:10056000DEC6EBC39F179AFAF048184972E685DA9F
-:1005700066F17E8E791F11F53F23119E587A7028FF
-:1005800079D2DF99EF43A34C7C699C92B8FE92220A
-:10059000B10F2B1F3BEDF068DDD3D971E42705388F
-:1005A000FE895A95D3ACC1866B30F63F60B02F659B
-:1005B00030B697B548FF4FD8CF29CE4111DF385F0D
-:1005C00043F7D448DECE157A8253BEB992F5D13EB8
-:1005D000A006597FF1FBD99F6E43FD248DE2376E53
-:1005E000913DEC6F10EF078DF968511AAD37F3BFED
-:1005F000E73C4D70A53B0E40EFB0941BA5C4DFD780
-:10060000CF70F379FF265B80FBA140ADBB109EA1AC
-:1006100027C7EC26F77941E3BD93C8EE535B76B567
-:1006200092BD526FFB740FC525D44F043DC8D00E48
-:10063000F138352D339EA6F6FD67BA75BA5FBA3E1E
-:10064000D72855A3FAD720F21EE99927AB6CEC37CF
-:100650003DD5FC0B3EAF42FB2E42CAF7A9AA3CF6A1
-:100660009B59713F7CF697C06F7802E51B44DDE72C
-:100670005ED1B4C946FAF8A5B451517155D6BCAA99
-:10068000EE6CCDBE8EE4EE130ACBD1CCDF5CC1F1B3
-:1006900003B98A26113CAF9354A18F9A7AF2B560C0
-:1006A000FD35BC42FAE942D293110F3F94421CAF90
-:1006B00069839667A9FDDC1CA10F82D63882FCD71E
-:1006C000E12AF37DA2E5F634D26FAC7382EEF0A19D
-:1006D0003B3F0FF6B4E41D1CF7A404EC6FAAB14530
-:1006E000FAD3FC8EDB13CBD779834D3E30D01F621B
-:1006F000799E0EEA6334AF025F2ED165B54D5BC9BA
-:100700007EAF7D5E8E0F6997D4F498775ED4865F56
-:1007100093DE5D6353857D73C028A5F398F6194574
-:10072000FCEECB497BB83FF311E47B149775EB13D8
-:100730004D3315845B756FD4BB30BFF9895D3315BC
-:100740007A87272FBCC486F95707FF45940F091FE6
-:10075000A6FC1F9FF848940F0B2FA1FD39F9C4691F
-:100760009127030C11EC6F4FFCEFCC00AEEBB8E916
-:10077000FF043D3C9FE659FDC2205BB47FF1C86099
-:10078000C1378F27897AC773E186AB49FF280CF3FD
-:100790007D18ABDE6B83CDFB0426FEDFF462522BAB
-:1007A000C5095BED202771FF41B3DD4DE67B59485C
-:1007B0007FBFA27A2FE768E9BCCF479147115C9EC3
-:1007C0001FCCE73D370D4EE7FA049FF4A2AEE32DB0
-:1007D00023394F72C01E7BFFADC1DC2F2812FD579D
-:1007E000F756D3683FB2D3859D811B927617BF63BE
-:1007F000B0C9D4ABC4FE64CA6A695065B9339CEC15
-:10080000E697CFF62D65BBB9A29BFB9E83851CBBEB
-:100810002928C689F4D2D4CD7CEF1C0C8A4779B93B
-:10082000396973F47B29274DF81E199C26E0D7B14E
-:100830000F3D251E2768C2A52FC2BBB8137FACF69B
-:10084000175AF7F67FD1BABBEC5399989FB51E8023
-:100850007B051C707E69A8E71F5F63B61B6DCD43E7
-:10086000637AB8E9C5DB3708FEA7A5B3DD0E3F11F3
-:10087000707059E316F1F9E40A530F96036F38C804
-:10088000DE5851DFC6EFAFAD6814EF6D75D29DB184
-:100890002A9ACE32F3C53A33652333C8F488EB6322
-:1008A0007A34CC788358FCE980773C1D77E94F4B4C
-:1008B0008FED4FE3FEBADB87B08917DFD83E041314
-:1008C000C3B383BFC4C1AF831E73CD76458867654C
-:1008D0005DE9F18FDDD171EED71CCFBC77B2E27646
-:1008E000335E558BC5E3154DB9B685459DF5EF6E65
-:1008F000BCD71B1D4FEB6A5A1020F957D352CE714B
-:10090000B52B9EDBFAEB00B65FB6FD010F05531F5A
-:10091000531AB2492FAE7A6C9DC7A0731625E021F9
-:10092000BE792C244F4B747F75D41029461FABA67B
-:100930007F62FFC79FFC5BDDBFE1FCBF9050BF4201
-:10094000785737FDB58EECB73D862B4272FBA81267
-:100950009E4A72F4A6056E3FBD2F58D31CAB4F2D97
-:10096000FBE503D91A077707FAD8589F6AED43EDDC
-:10097000AA1FB5EB64BF57EF93751C066A20524758
-:10098000F38B6F5FD3F8A183E0AAA23ED8775CD740
-:1009900072E4248CF7354D3FFA54F6507AEC1D285A
-:1009A000A1FEA2FC1108F7CA6EF4B2C221B1F7028F
-:1009B0002CF840288BF59BE0130F95BC8FF33AF190
-:1009C000E86B1EA9285A5EDE29CEA91A6FFCF90B26
-:1009D0005AF772F524E907CEAE7A80D62C0925BBEA
-:1009E00045A455F6560FF905AA36D9F5007EAEDABC
-:1009F000FA8BC7E95C05DE76EA74F458B5F5B48382
-:100A0000DE3FAB928C88C47A1678A4919DFBB47CAF
-:100A1000EB47C25FD54B86E9B84FCB7EF5B9A86FDF
-:100A2000402409EB2F7FFA7DF66F55F9DC7E578263
-:100A30007DAA68DCE508BB13EC53E3FB53490F0ABE
-:100A40003EF125EFC3B19D12F4CCEDDABE72D3476F
-:100A50000EA29B13B8211969025E649FD634CA0B9B
-:100A60001CA989F6ADF52AD2FFB09CFD2017DA3F0C
-:100A7000D7101074F1DCD66D640F54BEE3D4A7D345
-:100A8000B8DB6EF100EEFF11C52FF0FD67EBB20D84
-:100A90001CB7D21EC8563915DF2B1FB995F170E966
-:100AA0009BB766B35E07462FDB685E6F2F5AE7E29F
-:100AB0008DB3789D4BC0C77858F933E1CFF85C818E
-:100AC0006989EE1B6F1F22E487136E2E21FAF81C32
-:100AD0007B223FCC11078878DEB7C43B644EB83A1E
-:100AE00035FA9DB93B8708391080D07BF4FE640D40
-:100AF000DAC5C417E4373F9F4AFDACCA55FC4E9592
-:100B0000D71F30E1259D13F11C9A62C59DE6E17E59
-:100B1000BD39A527D9C14E38E5B8BE8CDF69D0C82C
-:100B2000FF1BD58EE17664B33359423BFF4876E232
-:100B30007B84EF99EBC0BFB7200A9F6AB61C617C2B
-:100B400002B4BB527344FE61A243B48B52116E9F38
-:100B5000EDFBD0D19BFC1D99361840F36DFB88F35B
-:100B6000A0676954DFEABFA6D919F32E49CDA31FA8
-:100B7000C5D1B333EEBD133FC3B3065235D2378F61
-:100B80003822535FA471705C8AD75C72BF33E6BDB4
-:100B9000B04E7C71747ECFEDA44FCBBE5A6AD27F2B
-:100BA000FCFAE3F9C19371FC0036667DA5F79FAAB4
-:100BB000ECA1C7093E5548AF01A657417FA8A347FE
-:100BC00006203D7CFCD44BFBBF4F7EBA467BE674CF
-:100BD0001E2D96CF563E83F44BFE348477924E7C86
-:100BE000F64B07E9BD39156807E3BC3F76EB74297E
-:100BF000AD2BDDE2F78474EB063ED7FABFC55F97F5
-:100C000076C35FF7C5C1F373284AA53B0CC79F5C49
-:100C10007E09FB15E2E06BD9BBF17CB37A88C67024
-:100C20008EE79BF8B71FA2E0B8ECBF3F61BCFDA206
-:100C3000973807AB7EF4AF2CBF10AC1127E26D756F
-:100C4000E853CEAF23F9C5F95D33E9BCBAEBBA631B
-:100C5000E1195FBEC1E4471DF7DCEE8400C5DD4548
-:100C600076C8FC0E433BCEA58EF4F3A772F99C70B8
-:100C70009DA9EFB7AB110FE9E7EBD2AC3CDC40EF3D
-:100C8000C1B4074AD400B54F32E30FBC114F5A9498
-:100C90009EF47E8BEC21BD2E1C826989DF050CF24F
-:100CA0003CC2D05DF91A715F4B3EBB2D6CDAF54E3C
-:100CB0001C2FBCE6CB6D746E7E4871F1B9E5A23590
-:100CC000733C7CFFAF25FF3F092F16BF8A70247A43
-:100CD0000A188E5E08E71B0508D0FC08F079B09C66
-:100CE00052B6E745ACB704014CE724F1FE9465E049
-:100CF0004D6DCDEDEA374139E820F9BF14E511FB20
-:100D0000BD37C6962F6BF998F16C591C9EF908CF28
-:100D10007A75C5B3DC4B4DFF4A29949AE7BA6CCF7C
-:100D2000B7EF95F93CFF940B58DFA0735EDC3138C8
-:100D3000D522F3FE9C7A4A0A71BC61204BBCDF8A43
-:100D4000F84E7A968587F1F67D7C7AE2D97747D29C
-:100D50003DB1AA5FFFA5E4BF303DF1EBB707BE4848
-:100D6000F9E7FEDCFF2FD0B57EC5CEBFB21DD3BEE6
-:100D7000D3C9FED0F69DBFED4F72B9FD05A74EF861
-:100D8000DB7EA753C435EC4CE177CCDAFB09BF5DC1
-:100D900070C7972561965B6B791FA75FEAE0FD3E00
-:100DA000D5F2379623A75A9C1AADA366670FF68F24
-:100DB000D5BC901422FF40FB8E2F4746BF77F5CF5E
-:100DC000AEA7DABC4FD39E0273296EA63D4DC4591F
-:100DD000D6BC38E6176BC81E69DAE520FF7FC56F01
-:100DE000FE5E427CA9FD995D0EE25B68973E02883B
-:100DF0001F732EFDE903F65E745F0CD8DE3E7DE9BD
-:100E00003BB3E87DACAE701170684738D0BA102E95
-:100E100095A49775078FEA6F2D3C3E657BA2AA6566
-:100E200014D351275C24437C4F09B9245AFFF31E85
-:100E3000F21BB5E7A1FCD769DD5F9690FE74A17542
-:100E4000FFC7A5E27DEEFFE7D76D838B5AF753DF2F
-:100E5000DA750BFC1F76A926DEA78AA383AE78FE7F
-:100E6000DC0F38BF2D45E7F97E45FA7FFD5BBBFE01
-:100E7000AFBCEF25E4B7BDD87DFFF85BBBEE0BED53
-:100E8000FBABE6BEA7A874BFAE7DC7DFFBF37ABF9E
-:100E9000E2BA938BBEADFCEDFCEBEED08F64AF8B72
-:100EA0009ED8BA075ADB344CD775A3A78C2AB2FC5C
-:100EB00010C21E914D7D631D0C3336915D857A06FF
-:100EC000D901EB3245BE1EF50799EF0F72B00AD477
-:100ED000F7D5C5BBB68A1F54CCDBFF7C23C7B3ACA8
-:100EE000CBFE0EE495D17985F06304D7E8BE5DD8DA
-:100EF0003E9866D3823A3D57B5D2B709CBD5DEB21C
-:100F00004AF6CD3AED6A57F43B168ADB1163A7B86F
-:100F1000E3EC8DE402478C5D9204BB55F2C327E9F4
-:100F20000AC7FF3921AA3DD6CF2A12EFF42743285A
-:100F3000A0BA2F1E4E8BBE3E9C5C7CAF5235E104A6
-:100F40008641EB766A0AEB610AA0FD28D621EC4EB9
-:100F500084A316054730ED50C504B9A20D6338A22D
-:100F600001A14D1A4D70F5331C83BD6495E1DAD9AA
-:100F70001FAF3B7E1FD6699320CFD4C725FD9B872B
-:100F8000F3D822111F100F672BCDF795AF21FD77F6
-:100F9000D51A71CEF5CCEFBEC3F9263BEAC374CFA8
-:100FA00030D5B7A288FC8E5E43223A5D3543BC2F14
-:100FB0005846F7C032C9D41771B899AEBEA0B0BFB9
-:100FC00012ED0CF657AA40F69F3C091AD91FE855B6
-:100FD000E2E27A558E7B0ADE2CE29EA01034F14EBE
-:100FE0004B6CFC4F601214525CC314B9AA81E675B5
-:100FF0000A521A28EED2616FEDCFFEE17E008F918A
-:10100000BFA5FC8B8D549E8B7A3DD07D32A5F53DDE
-:101010008A6FB84D4E058EAB8AE0A728B85D76C6BC
-:10102000054A149CCB212D267FA2DFE126B213F2C4
-:10103000024E9582C72A5CBD62DA9FE87586C70BAF
-:101040003A5D2AD94753D4DC98F6B267EF7B64D770
-:10105000BC916E63BBE0F29CC131EDAFFAE0C4C657
-:101060000526CED23ABEF7AEB8A78AF6D623AF632E
-:10107000BB37EF0720BFF1155A694CBB66D3BF12CF
-:101080009962E7F766AE2C1C13336E737837C3A5ED
-:101090002A0B243A0FAEB2214960BDEFEAE531F5E3
-:1010A000BE37FA8A987E67183362F255ABBF0025C7
-:1010B0000360DCEAB340EF0796B636C6B41FBEB78E
-:1010C00039A6BEE7753485302DDDA705291D75507D
-:1010D000DC231D8EFB41E71BCDE1853AC5EB14D324
-:1010E00005D0323A16F0565018F2C8A3FE9728BD24
-:1010F00050FC3298EFB2269BE7AFEB6DA1C605B965
-:1011000014FFD3F0E35D12C743EE263C1D1D69A812
-:1011100048C5EA63CF34BE446953DBF87A7AC7B373
-:101120000AA08DE5AFDBC6E70253E4961289ED9F76
-:101130001EC39D51E72EDDBDD7F9A3D2F27D4548F0
-:10114000476B738C865DC4F727BD3B5FCEEB5A0FB0
-:101150005425128DE73F2AF51EA6384D2B4E2AB98D
-:101160004216BF4771B98893A9B3E94926F362FDD6
-:10117000409D6AE738FE65C582BF8D6CDBDCE82EDA
-:1011800023BBD3A5D1BE2667C4DEF3BE71B4B8B706
-:10119000F7459179BEA2A859D7931FBC3845B4270B
-:1011A0001F1F8D37DDC6FA94E780BEC78EF9FB0A94
-:1011B000F7A9C4CE9AA67F10E0F74D0FB44D903436
-:1011C000809EF794DAC80E87BD76FE7D99A6C2C9C7
-:1011D000A70BA87CFA5B1CC3B86BC22F0B49BEAD32
-:1011E0001C3CE4BCEF8C7ACE48A045C5412C2BD6E4
-:1011F000783E1E25CCEF1279CE285CEE99A7DBFA5B
-:10120000478DB77282D0FF560E4EDE4A78EB3960BA
-:1012100088B8A842B73680E9239CC37C4209E75CC2
-:101220009F22E2ABB4F3BCF37F7CCB88349263198A
-:10123000E57A1AF94133B6CA1DF7CE683D3FA6FFDD
-:10124000D0C13AACDF3F19E7B58562D744792BF2BC
-:101250002458EFB0CA9125613E43B2CAD7CF9E5CF5
-:10126000C4EF31C6D41F9AD751DF70E574F6AF15BD
-:10127000AFDFBFB688E037CA467125EB7F67E777F7
-:1012800006709DAC4FAC447A06E97CF0EC710178B5
-:101290007AB8FC90A4C5BD9FDB5A4CF982BEBE4112
-:1012A000C558FF92B3A9FC0EC067F5492CFF2E3933
-:1012B000FB3D7EAFB3C961F4BF9DFD37491C6F365E
-:1012C000E3E68F37AC26BABEEA7821C52858EF5737
-:1012D000D6A85F303FB0E2EC3AE187F88B78FF6345
-:1012E0005B679EF883A7139E06BDCFB53E0ABEF48A
-:1012F0009B2F334C78FA8A37CE5E8BFD6B8BA6E53D
-:10130000105D9E0637C7F59D561F9F4DF33DBDC529
-:10131000CE41B44D26BF0C149AEF11648673E85E7B
-:101320007EF19B368E473A88F860203EE4B7BE993E
-:101330005E4CED3295748A6F383DFECFFC6EC2E98B
-:101340001F0207172F0B3B185E4D998B2ACA19FFF6
-:10135000B574F23F58F06D34FB79B8D4B8B298FD4B
-:101360005CE67D1163EC45BD3FB96BC2977C2EB046
-:101370003617F5FC340A393E5347EF4BAECCB5B3C4
-:101380005C5A99F6C5D44CC2F7725784DE81A859CD
-:10139000FD19C317BBC98DBE07A69C91418B8ADF7F
-:1013A000D2868AFD571483F75F39E3E0F2AAD5A706
-:1013B000996F5BED4F98E7ABF42E23DD17AAFA8700
-:1013C000CCF746911FD64BC328DDED5819C54FA069
-:1013D000F1D30E3E3F14F7EABEE96F25939F728664
-:1013E000A4CEA2F9B56C3B339BE2056624A9B328D1
-:1013F000DEA06EDBFBB329BE60463F7516C517DC69
-:10140000573C790E97F7521FB0A1FC7AB964BEC859
-:10141000E7AA7FA2FC535BEF98C3F553C4BEDFB6C7
-:1014200075CE9C00F36337D3C1A9FA1E21E779E892
-:1014300060E9EA1721FA3DDB2EE5E6EF49C15CC120
-:10144000F73EB9BB0FBFDB09056D1C2FB6BE58F8C0
-:10145000FB3BCF5741A5F3D5CC7C30C8DF9CF95C72
-:1014600092F85DA2436DFD097E4736DEF203F2A7D6
-:10147000AE9080DFD1AF026D24D1D5425BF83D4AFA
-:101480005F1CEEBBB798F5A9368E775DBA7A27CF89
-:10149000EF53DD8C5B562345DEAFF54E04F69FF02F
-:1014A0009D88D838E30F6CDA40EA5731E1B2506ECC
-:1014B0009BEF10F37A94E6B5227D17C7392B6A5B50
-:1014C000B64FE851856C3FE524F37BD175BDDF292C
-:1014D00049F43B088DB528EF91E49EA96DE674F5BB
-:1014E00050607CEBA9841D3AF6537D40C89D916DF8
-:1014F0001F38A2E319779BF04D357FEF2A3E1E7708
-:1015000037C9A5A8B88315BD5BFB927E68ED6BE774
-:10151000BEB4F635F70568BE99192F3D45EF9D50CD
-:101520009CEB0FE93CE3B9A456F25B778F27D63EDC
-:10153000887937250BBE11793689F5A6F8751C34E4
-:10154000E76DAD2762CADFEED61131E5EBBF6A1D4C
-:101550001193BFC7AFC7A26FEBBB45DF5DDB8BF954
-:101560005F3CDE897B6D17C23B8BFF5483AF50DC41
-:101570009716FCC682B7354F0B6E4DDDC4E32AAB20
-:101580009F8F598FD236898C1E482D11EF5F298D80
-:101590005700ED87B2BA85EB75B71E39E5333EC704
-:1015A00059A6819FF4DEF875554123B7EBBAAE0812
-:1015B000F3E3159AE0C75DE3F823CC9FABD13E235C
-:1015C0007DDC5A77079FC6F5137D4F4086C37C9319
-:1015D000EE124A645FF862F4E372BA31117D6EE58F
-:1015E000BA39263F45BD3DA6FEE5396B62CAAFD08C
-:1015F000EE8E29BFB2F0DE98FC77F59FC6E9F79B27
-:10160000E2F4FB2762CAC787DB58FF7EA3761AC7BE
-:10161000A74F3C1A613DBCB556E5FCEEDA1C4E5FA7
-:10162000AED598FEF7D41672BAB756E7EFBFAB1D2A
-:10163000CDE9EBB506A76DB55E4EE3F946595BB84B
-:101640008CFCFBA33353F93C6AE350DFF525140708
-:10165000B92F5244F837F640E34B240AF2439FBEB9
-:1016600047F54EAB0E8E475CBB6BCC1F6EC17CC684
-:10167000EB322469E7D38B6430A2F0C7333D0C749E
-:10168000FEED01F13E567CFD8525424F9E0B61F13A
-:101690009EC06A3E0187B92EF5152393C54684EC9A
-:1016A000F6B9E0673DD4B65ABC5333177428237B90
-:1016B000D607FE7B381E29F67D01AF3163DDAFB062
-:1016C0007C36DD3BC5F6DF7737F2BDF267F6A64F15
-:1016D0002EC5EFD77A25FE9D8F033BEFBAD5C5F611
-:1016E000AF75FFF41DDBC5E8130B4B047DB54B7ADA
-:1016F0001BCD379026DE2F8A6F37CA5CE755C108AD
-:10170000EB1F11D43F28DECCA2CB19EA2173FD9A3E
-:101710002D750CD1C71ABEDF50D5A6E94184F798C4
-:1017200043822E46205DD0BE8D3D2AE86024D20142
-:10173000CB41D33EB4E800EDA997A8FDA983A03B17
-:10174000B17DDDC41FC9647F8DF92C14A4F4B2B33C
-:10175000915DE7B07C5C9BF8DDA40BD993965EDAD3
-:10176000523B97F16867AD8FD3D6DA4A133FFD9CA1
-:101770007FB97635E7F7D40638DD5B5B6FE2670348
-:1017800097BF5EBB81F36FD4864C3CDDC2DF3592E0
-:1017900067089FBB4B4C39ED2A37ED0A917A8D359E
-:1017A00076BEE78F9F889FCCA5B9127E544A21E26E
-:1017B000DF75E9013BE5EB92690F68D601AE7F9DCD
-:1017C0001B5A490E54E5BC28F4B0383C29CFBC86DE
-:1017D000F164A619C77A20BDEE5607E2C389C6FB9D
-:1017E000ECB1EF8D5E1C5E2C73AFE57B7DF17CF17F
-:1017F000267A8F42EECA0F0174BDAC4CDCEFA238E2
-:10180000BDAFCAEF555B9B795F4CDC7FA9EEEBE681
-:1018100038DB7F9D9C514D39030BA87E87FD9D7C55
-:10182000703EBD8FD7052E71F6F7E141627F2DFB2B
-:101830001BF54CF64BB58764B6BF2A731B3C6C7F17
-:101840008F8E78683F6FDA2103EB8B8A38EF5D4A21
-:101850001D6914D7D3BA7F1CCB99557B882F2D33A4
-:10186000CF7BE3CF6DABE9BC574A04EF30C7D52F30
-:1018700037CF7BE3D75D3DFE089FF7565FE05EE91B
-:101880007B25B1BFE7137F7FB73B7CA17882E8F768
-:101890005C4F9EAD653BEDC8B63B1E0AF4FDD7ED2F
-:1018A000DFADA5DECF4A441C35DF9BB3F6B3CEFCDB
-:1018B0005DCEBA492EBEC7D03E42E5F76FDA25F1BC
-:1018C000FE4EFB5F415FA3D1FB3AEACB24172ED338
-:1018D0001DCC574787C57B01E3E95E6282F702268C
-:1018E0001C0A0553A8DDC100FBA3C6ECF305E9DE25
-:1018F000EDA8D70D99C8ABF465AF4C7860C9274BFC
-:101900005E75D295796F8E6232F2BF3AFD698B4671
-:10191000E7907ED761B7BAA7F23B45A75B81A349A1
-:101920002DBFD8F083864CF712461CF20549DED64F
-:101930009976E6A813013915BF4FF8CCCF76D018A9
-:10194000B453E552718FDA8882AFE5D7B2F89CC5FF
-:10195000D7AC7B7BAAC3B785FCCFF04212BFFF1286
-:101960003FEF41436DD67BD6838612DF33EFE94DDF
-:1019700091CFEE3A4776419B8817B8E46CFBE3645D
-:10198000F7AC7AB607DF53BB907D50A39E4EA89F5D
-:101990005A698D4D9CA30CABD08693BD497A2BD947
-:1019A000A1965D1A5FBFAC74D2D8A15934AFF16D66
-:1019B00006E1B76A3B2F7ED7ACFEF4BC76A1357E3C
-:1019C000CD8E11EAC228BFD5EAA19219C7F2F5DE81
-:1019D000A19E10991B23C7BEED7A1FD26119E11792
-:1019E000D98624A7BE4F3B80EBB80E5A595FB9DEAB
-:1019F000FC1D8B1B001CD1F7646F0483F9C39F741B
-:101A00005F0DE1CD6288CCA77C8D14A97A1141F8D5
-:101A1000C9C4716AAED6555E5FAC7C4E36EFC1C6A6
-:101A2000C3FD4E136F2DFEDFEDFEC4F1FFF65295A0
-:101A3000EF41B73F3BCE46E738EDBF97F9FD54ACD9
-:101A4000C87C25384CDC3B1D3ECF7C8704F9CA009E
-:101A5000BD2B5F393D7ECE64F61FD1C106C59F2ADE
-:101A60007AE1F551F7CD82E6EFBA6CC194E22553E5
-:101A7000E78595E8F3B39F9AF32FBF7632903D74D4
-:101A8000952AECCE292EC84C225E78F674D12C64AF
-:101A90001057913E3B9CDF617F98E0DCF10E08F12E
-:101AA000A34B70DFDE17E77C7093C4FED2E626916D
-:101AB0002F5E9CC6EBFAAAFB883DF728C1F52F6E76
-:101AC0005286117D0F4D8FE4115D168F793B5DC2FB
-:101AD000799598F7B170DAF510F5FB56EF9AEBF8B7
-:101AE0007CA8B18DE63734BD6DFD7DA45F3E6B03F0
-:101AF000F21B1E1973FB128892CB9ED249BFA27AA9
-:101B0000DB25F39DBA1DE2F70CB04576B47FEB4FB1
-:101B10007AC5F354AFD5F433C0AAE7F91EFF0C55CC
-:101B2000EC014CCE327F4F32D23FD1EF0B59E75907
-:101B3000430996C2FFC8EF8A6D37FD936F0EFD60B3
-:101B40000EF917A1359247F3389224EE517B4A7D66
-:101B5000BF233E3394FCBCB48E9F09FFC091343F39
-:101B6000DF23791BF9339D1FFFA5D6C5E9BB681F8D
-:101B700051FA3F681F51FA3EDA47947E88F611A564
-:101B80008BCF60A7B87F3374E36DE6AFDDACA37B8A
-:101B9000FE1230F5FBC4BFD3F49609FF92A643773B
-:101BA000F6203C6896393EBAF85985F5D3932DA3B3
-:101BB000627E9714E9F530ADAFA4F98F3FA17BD6D3
-:101BC000254D8A2A69742FFB7436C71FC6CD8FE056
-:101BD00040E70D911D0EF17B4AE67CB7A7B5ADA796
-:101BE000F6DB9FCDA319D2398EC0C31DCE84BF377B
-:101BF0006CC5DB3D3154E85FDF7346CAA2CF1FE3FB
-:101C0000E3D3D80F3C86F0B9E00F344E60AF0C033D
-:101C1000182F63FD1BFD74710FC14A8B7738384E46
-:101C200079FB8EFD575F89FDFD1F8FB61B3100804C
-:101C3000000000001F8B080000000000000BCD7D9D
-:101C40000B7854D5B5F09A39F34A32934CC2000957
-:101C5000123809AF00018664121212E024048A8A45
-:101C60007482D482A28EB462541E23D29ADED23FF2
-:101C700027244012830605CA558401C1C7FDFCAE66
-:101C8000D102175BF44E50A9F6B73422E2A354C731
-:101C900047552C4A8A62EBAD2DFF5A6B9F939933BF
-:101CA0004C0222FC97F0E9CE3E7B9FFD58EFC73EE9
-:101CB0003BB3265E5E24C900A7E9670A80CBDB1729
-:101CC000A008604CE9D70FDCEFC1F2599BDB0400A0
-:101CD000F360DB3437F6BBCED1F1A21BEBD7BBDF11
-:101CE0009B968EF51B334D07A8BC49CE999E812546
-:101CF0004088DFFF515EC5810CACCDF456DB024E4F
-:101D0000800A9000F2807F4EE37F531D29008E6889
-:101D10007D9ABB8FA1FEBDCCCB0CFD2F978718DA27
-:101D2000AFCC1B6D68D7E79DE92D34F41B97D19597
-:101D30001B74D23EBEBAA71CF70326080FA37DED85
-:101D4000FEF2EDDBB19C35719E8FF67F0CDAAE1999
-:101D50008D1BFDA4A479E3FDF4B245B165F503B88C
-:101D6000857EC7F6E3103E5286ED926BF9813BF11A
-:101D7000BDDB322590BC00359BADEF4762D6B10488
-:101D8000FC6961EC77DB0EE37380882DEC03B83DD2
-:101D9000E00CB62000173D81ED0E433B8FBB78AFC2
-:101DA000CD4DED4BC0126DCF01A83D9AF3E40B3140
-:101DB000E38DCBE8BCEF7E1C6FDC9E39EE065CDF6A
-:101DC00093A55F0F90719FE55E97E723040D4C800C
-:101DD00009A711E42039CD80FD4EBD2485245CD7B0
-:101DE00034E99BD4483E3EAF423C67E17B26F90F85
-:101DF00065D8AEBE2CC14E1CE76F75F2932F5869A3
-:101E00007CB8D19F1FA50B80950C5FBD7CAB0E7F6E
-:101E10001D01F0C73A07977FAA7373F96E5D269785
-:101E2000EFD5C95C7E5097C7E5AC431068C7F1FE9B
-:101E3000FCF7F1007D681C15A06FB41C67F39A07CE
-:101E4000E03ABA7E2F85B6E37EBF289F9006B4CED7
-:101E50006F70FE620D0F4802D5448CA5F8DF8FB776
-:101E6000BD98E5E3E7AA0BA75AF27709141C77B9E6
-:101E7000D724C65DD4F1629627DA0ECBDF33F48720
-:101E800015A603867A638EB1DE5A7120F67D1D0E8B
-:101E9000F1E52D9BEFB0055C58AE372921E799EDB0
-:101EA000FA7AA6ED4F524C389E659F3D64C7FD2DD2
-:101EB000712BA0607F0B80D29E7FE67B00F50CE744
-:101EC000791204DB138C5B47E312BDEF4F02E93C50
-:101ED000C67D0B6983D6A3FE973DB413DF7B2B4DE4
-:101EE000017FCC3C2DDAF89FA5B7FDE22BECF7D9AA
-:101EF00033404FB00E73693D63777D6C3663392E86
-:101F000059D0C95877C49C81E5899A7F6C3CE261BD
-:101F100032F59B26637B6ED71107A2FCBEF6AB366B
-:101F200039106F6F9BCD00034020BE04FBE31854B3
-:101F30007FD07BD5DC46FCFDCAFD4961F379ECE737
-:101F400041E445A6A34AC1EF3710DD88791440511A
-:101F5000B37415E8F32A241F68FF547FADDDFFE654
-:101F60007AA233E8DA48F2E13840B885D7AFA4C6A0
-:101F7000F2FFD2677FC2FCB9280BF99E04E066C16C
-:101F8000BF0EFC773A97F83534DD89EBBD358CFC14
-:101F90000F179FFF9FF13AA37C3E22219F1FBA1289
-:101FA000EB4B9F91BC766C3EB96F98E0278DEF7537
-:101FB0003ED7E1B87493C47CA9D73FDF27CD08256D
-:101FC00080F7368D2E86285DB369BE65CF5AA00591
-:101FD000D7B76CD288FEB1E3C7BFB7B44902396640
-:101FE000FC279FB3D710BFC8D0D5AF1AF967DCB3B1
-:101FF000A7322AF24559CFF868D3E44DD720FF180D
-:1020000094D726FF9F7E8EF301E27127C2A7327319
-:102010006E36CD3FDB094ACB7806CB1C07CA89ABAD
-:102020000588E0EA92EBB201E1B919D12521DDCDB5
-:1020300051AA5FBF0EF1F80373E02A92F3C7BC43C5
-:1020400078FC6B5CCBAD606672CD36E17873E7D817
-:102050000B693FB31A045DBF9EDE759C9EBF3E298F
-:10206000C5D480EFBD6E8246C888EEE375AB3F9B5A
-:10207000E80D37EEFE08F163524649A7537A9617EA
-:1020800044C91FE97894A2F26F9AE454699E936E52
-:1020900033D3BD25ABD546EBBA154207149C7789DF
-:1020A000376C23F9773BB82D5462D1D54D1F447F4F
-:1020B000E5FFE8388DEF2FE9944226ECDF5ED70E7E
-:1020C00016C4EFD3757BB91CFCCDE0C6CB101ECB7C
-:1020D000C7DBBC2DA4B734FA32AB26389D405F9DD8
-:1020E000499F96683BAEBBC2E10C4BA9F4D87A3C41
-:1020F000761D8DD94ACA78DC8FBAA63C9DE99368D3
-:102100006170749FE36C004E92F33B5358CE1F7B7B
-:10211000AED84C783AF63B6BC844F52D23DEB8D3E5
-:10212000C7752079732CC36BB6517B466E48C5F6D4
-:102130005BCCA0925C86ED426E3D3FE9AE77488E67
-:102140002DDFE932D94D828E653401A447D7BEF325
-:10215000EF38CEADC8AC766F546F2C9AF2E8C62734
-:10216000900E1699DBEE29C767A7203CD68DF0FCB0
-:102170008BA97D38E9ED8F1FB287CDF4DEC323B77D
-:102180004B38FECBA98191B41FC854FAE7E0F39A0B
-:10219000437DA105DF9FFAE83F0F92DEBCF5C9BE83
-:1021A000CC5F3ADD4F233EC4F59C403EA4F59CDC59
-:1021B0003784F92E8A7F0187C5280FC8246ADEB1CB
-:1021C000CE4FF80C24CBFCDC02AA7219E17BEF4D58
-:1021D00040765381645288CEBB9A115EA633E9499A
-:1021E000196FE6F7169951BF121D06E44282C7091E
-:1021F000935CA0F105D07ADE7F6EE4F6167C7FAEAC
-:10220000D63F4A774797FC86E86EB3DD6BC7251C3F
-:102210004F32EA7DBD9C393E9DF9E516C79760298E
-:102220008C3E5F52FBB5B19E0F0AC98D8206B9F094
-:102230000E2CEFD4E07EC548FFF7C7E3FBB7B5AF80
-:10224000DBF38A4CF36EFEE9DB34EF4B4E9E175EF8
-:1022500011F03B6112FAA55BBF3AFECAE3A3E4E1C9
-:10226000F5EACF3F7EE88DB1011CFFE3DDA38703D4
-:10227000D2DD02A9F3A307115F9FBB3ADFF93996BC
-:102280004FBF74A81FC12F7EBD8B6ABF004B8C1C33
-:102290003A6E32F17E17D13EF0F96F0AFD3733BE48
-:1022A0002DA827106E0B5AC66C2779304DCA4F23C4
-:1022B000BBE9C431E3FAE2D7A98FAFAF4F1F5FEF9D
-:1022C000B78CE08F709838CE2DF4ABADF373C2EFBE
-:1022D000677B469B9015A3CF333AC7A6E747F1E447
-:1022E00057EAADD4EF1A12F5888AB90E81D7B935FD
-:1022F000A650430EF7E3F6EBF039E1BDC2D3C0F5CB
-:10230000394ED467D87F51E66F785D24E81CA8D792
-:102310007E00FA4FF5AA5F61BF3797A5B25C987B44
-:102320004B9B95ECDC6E79A6BE6D3E3DFADBCB3364
-:10233000849EECEE07CCC3A43F013767C1FA24ADFD
-:102340006E2AF963C3AF483EDF99EA95D064841AD8
-:1023500019C2C4D7272144F05E6D0AB2BDE7203D03
-:1023600080658BC99B69C1523277F5019E27C47085
-:102370009A06010BD57F6B8A3400BEB7CA539949C0
-:10238000F4FF2638FD6417FD207DF51892A395EE25
-:102390009973E9F96C35D5DD82FB6DB4CA77E793A3
-:1023A000FDF303C94B76AF0E175D7FCCB578AD0456
-:1023B000DF7E41D9AB22FD16BEA2384C0C7F874A86
-:1023C000E3BE6109F6A575BDE55C3FC664263B2DFD
-:1023D000E41A839B7DFBD07F14FD1EDFFF2328932F
-:1023E000C81E98F35B07CBF19B40667EFF11282C3B
-:1023F000C76F8600D76F8188F54B7CEFDDD2FFD9A0
-:10240000B91FA2FB7A77E257BBC9AE9F2BB5F7CDB8
-:10241000C176B512F248CFFCDAF17FB646701D4A9C
-:10242000830592D0BEFA35D129D9EF475DA19DD859
-:10243000EFAEE42DA91D588F9884FDA556069FA4E4
-:10244000FEAA19FC0D58F64D0E3C4F7CF8CB14310A
-:102450004EADC5E126F94806168DF3D13B2EA67781
-:10246000D2BB3761BD0CB145F03AD157D09BFA577A
-:1024700060B97BC2EAED5468DC53B27727BD3AD528
-:10248000CCEFC36999D75116A75F7CA3CDFC3EFC66
-:1024900043E6F72775590CFAC537CE1C7C1AF73777
-:1024A000E5EF965EF5CECD05827F7C7DCCC144F60E
-:1024B000E0FF68FC851092683D0D7B4DA116264219
-:1024C000611F94E9F40891D5446FE50041A27BD8DF
-:1024D0008B7A4C9F2797F7FFB9EA233AC476B60761
-:1024E000DB9F2739690F0A3EC1FA54DA8F23085E51
-:1024F000B2D750218305EB49F8A290BB6E203BB6C2
-:10250000A502DAA93E092212E17B0A417A08F9C341
-:1025100032D3ED5450B8AED3F1F740E5F272087102
-:1025200079258485BE07B9F1299CFFAA4F40EC6745
-:102530005498E91D1D19F747686FC0E5B798C9EEB3
-:10254000F0FD30B1BF30A840870B22C473EE709904
-:102550000E814C31BF80879D9EFBA2F070C4C123C9
-:1025600089E0E18DC203E710F03803BE023E931408
-:10257000840FCAA7C9D025D13C8A66DF548297CB85
-:102580002AF073D90B5C5EA8F79C09979248C01299
-:10259000C84F009FA989E96684069F3F1600CB2F8C
-:1025A0005DFE5C5B20F3735D0E217F66923D1A2F0A
-:1025B0009FF4E7BE94CA2F64A487AA82AC7916D48C
-:1025C00067BEC2CA3B8760FDEAA7F344BDACF257C1
-:1025D000B958FF41C128511F5759684578D59B46C6
-:1025E000CFABC2FA90806923F1E5F27AB4AB715FA8
-:1025F00081A47B8244C7A60C709BB03D505FE42D44
-:10260000C07A00E912106E7629A79EE06CFF397837
-:102610001B7015196981C905B8DEFCF99DAB053E33
-:102620002BFBCFC5FEC73BAD6CB7ACB10583842790
-:102630006477777D69747FC79FFE790D3D7F7A004F
-:10264000B849BF80472EF4BBCE5C8FD9015C5F8C4C
-:102650007283E21F38DF4C9A2F80EA49A6753D2528
-:102660008508FECBEBA7B13F7024CFFFFD82BE31C2
-:10267000E3E33EA4F134AFD073E0C92924B8958CCC
-:10268000F45F4BFD4EB850BEA651BBC0434F6563CF
-:10269000813297E68D7F6E4EF9E6862538CF52A4BB
-:1026A0001192D38B0B0237D2B84BCD914185F86C88
-:1026B00065CA3B36A60B05E993E403F12BEDB7069B
-:1026C000E991E87ABFE057E40077B7FD8AF8F5F8BA
-:1026D000BB6E58E813224EC2FF15CF0D3E8F6635F4
-:1026E0008D7F3BAD63A9D4B590E8F2F3F4D76C7F4E
-:1026F00066BE1C28E84E935B4B9FFB9AF9E7593363
-:102700000425CD3F8618BE5BFA5C9285FCC3A59F6D
-:10271000422805DF2FDBF77803F93BA5E8FF939FFD
-:10272000BC78D753CC6FFB485F22E896FEF7B3CF57
-:102730003F487C7A6512C7A126BD767408D94153FB
-:102740008E461A106D70E2D9372E13F4AFFB257F39
-:10275000339D8F1E9F26ADB887F0BD0CF16FC7F972
-:10276000969982A26E75B855967BC24FAED1F6F19E
-:1027700019746E9CCF72453D504AFBC99480E56345
-:1027800048F81332FE23FEBFFD686835AD13A46F11
-:102790006C246F4EA15F4CFBBAFDB178BFA3EB4038
-:1027A00029F9DDE417E33E17B71BDB97C6EA870478
-:1027B0007EF296022D1E960DD9B4AF5FA33FF4C1F1
-:1027C000309A777E1AD9871329AE90405EEAFE715F
-:1027D00028B9F29102B697DB25E287324BE2FE0B75
-:1027E000F3855FACDBFFCB1E92D88F5BF6509F5119
-:1027F000EC276BFC0A612FF3EF93A45788CE022FCE
-:1028000003D1C12DDA9E60731FA6B95B9B4CECC748
-:10281000D8A53BBCA4F7C73DD2FFB67F63BA4975C4
-:102820004326D527CC7DCCC3F655908435FA556C1C
-:10283000673E99DE954BF33F992E838AF3352475D5
-:10284000E5929C559F757849EFC6AFFBED02E10F0D
-:102850000C098FDF14F1083C139FE7BC54BA89F0D0
-:102860007C12F99CF0B7CC35BC3F38C96E989C19E6
-:10287000C1B241B3D3731E1B95361BE1E2A3F5C66B
-:10288000D8D51DAF5E9342F6F26E8B3FC58DFD4EDF
-:102890001ECE35F841F16551189153D84BFB1B33CF
-:1028A000870412C05D2F7D9B2C0C2F9D6E7F5DA732
-:1028B000C00756C247B9D8876A77DB7D447FA1A994
-:1028C000E44F2EBB19DC2DD87BD9CB0F3738A8DECF
-:1028D0000C4CCD27E97FD4FF137388ECF15FA68CF5
-:1028E000BDB71CEBBB8E59849FA22A87F263EC58BC
-:1028F0007BA6196403BD764A8B491E13DD23BD26D2
-:10290000C9C920C7D0634A5E86A1EEF20E30BC9FD3
-:1029100056926B684F574619DA8BA13612C0F514E0
-:10292000654AEE10AEB8CF8C0243BB1DE93A4CEBC2
-:10293000FC52D85125F84FE8DB20DB4365118007B6
-:10294000900E261E37DA59259136F637930E5B0C1A
-:102950007100FB59E250C9851A7F0D8481C45F481C
-:10296000FF5E9263270F8BB893ACC17359B6D0CF7B
-:10297000CB5E96D80E5C76CCCC7AE22478BBF14361
-:10298000F251E7BB78B8F7F51BE1DC7FAE11AE5929
-:1029900001235C2FAB31C2353B6884EBE05A235CEA
-:1029A0007354231C87344D34F41FD65669A88FD82E
-:1029B0007485A1FFC8D06C437DF463D71AFA8F6980
-:1029C0005F60681FB7F736437B3C5D8D0F2F33B4D4
-:1029D000DB538F305D1D40BA32A13E287CE9DFE237
-:1029E000E8C2C2702F1AE8F48662F0AFE23FC27FFD
-:1029F00099969798006A03F1E385C2FF1584FF94C6
-:102A000028FE75B9DA139FEAF81D42FA9AE565794E
-:102A100084F07EB22485E9E5E04B270F2B40F84F88
-:102A20008502DCEFAC29228E22C9C126A2934E700A
-:102A3000B591FDB9C61264FF4545B3702729E53845
-:102A40007FF3FB25E86FC6ACB35A49024BCC7EC777
-:102A500087DB0DF5C297F61AFA1775860DF5F18723
-:102A600041227D55F0A6F7792A8B3E5438FC55FC5F
-:102A700049F0792A4BBF0CDE45FA37DECFBD5AAD9F
-:102A800097D2C8AFFF7BFBF368D6A07F364825BF3F
-:102A9000377247AAD73400E191FC4E03F9DF807604
-:102AA000B4159511B80FB23E98EF10EFFF2D69F2F3
-:102AB0002AEA6F42FF9CF08E70C9237BAF1692BD4D
-:102AC0000417B25BC80F832B843DBFDAA4B23D9AD2
-:102AD00084F628D9230D157EB697A74370203DBFF5
-:102AE000069455C4779219ED577CFE3F23028D85DD
-:102AF0004562B1443F777D21B3FF3D85FC6906A661
-:102B000002A4F74ED0EFB43E78691EC5E34F902E75
-:102B1000C3F5B7B5BC304F253BC303EE08AE3B2031
-:102B200040069B0B03F7D0B8EF9BDCAB0BF1DD83CA
-:102B300013FF3288EC917585C2EEB34B0829A4814E
-:102B4000FEF315A0E78DD9CA7D8545D1384B4FF4EA
-:102B5000A3C733F5F8E6AEBA309716B75722BA8B4B
-:102B60008F3B46CCEEAAF1A4FF9699D8EFFC0B2D33
-:102B7000AE94E7496539EF804E7B3A2F99FDFFEB24
-:102B800035BC991D9DAB7E8EEFDD1014F6D60293F9
-:102B900097FDF5DB338F731CC52E99C047FE505A45
-:102BA000FE76117FD1E3259749DFC6CE3ADB7E6FF3
-:102BB000CF3C668857C1137D12C6D7A3E3ABACFFE9
-:102BC00062F6B9659347E835F2F3DF6FCEAE84D491
-:102BD00044F37CCEF1ABEB83AF1AF8E2C6DAB70C64
-:102BE0007C7093FA9EA13DE2E9B252BC32B2276BEF
-:102BF0003AC5D73FDB6D2F263C20FE0F16C6C4EB2F
-:102C000022CDA3AB60ECB9ECF72FBC8EA3759D8CE5
-:102C1000577DBFEFD4BDC9F5485D84CBF8FDEAF11F
-:102C200011BD4471D844F6CC5D12CA0BF277495EEF
-:102C30007862E405401ED9FF7749A3BC44EFB6FD96
-:102C4000C147A9BDABDEEEDEEEE3F808C74D6A91E1
-:102C50002EC86E00A7787F81CDC176E81D3EE12F9A
-:102C60001EADF8EA06B25F7320D58B32107FC27FAB
-:102C7000A2B8C97C531AEBFFD55907B8FE61338857
-:102C8000BC514DF821F25797A6A60ABB58C1FE5871
-:102C90003F9161E6FAA11181AF981FF3C39CDF5801
-:102CA000DA5FC4F3C01319447CF833D9FFB5E05799
-:102CB0007780DA6B32D0DF46FAFDC4AC8E35116B0B
-:102CC000ED1A70AD05F1FE49B2FA395934637CFD55
-:102CD000AE253FF3139BE0DF49BB4ECF53113E1FA0
-:102CE0009A24F6CFD5674C1CAF0167C4568D7ED8A9
-:102CF000038303561F8EDF66457BD2299ECF1E13AA
-:102D00008DCB9EB0624971D024513A7DC2EE75F9E7
-:102D1000449E532F4710CCB09CE4D3E57CEB708AE3
-:102D2000BF9DDC6C07925B38BF42FE96FAAC88E32D
-:102D3000F7CBF02F028117F71A5CAF6788FC05F11B
-:102D40009F4742BF16F721FB720CF167726053B1C7
-:102D5000FDFD3DF66D84BFEEF51E16F1B0CF9A472E
-:102D600073BC5BA713D9A7C5BD7F0C20DA2FDB4648
-:102D7000ED8B5F7EFF1D8ACFFDA63030D487ED0B33
-:102D8000CC7231C9C9C5A91D1CA72BF6C93C2FAEF1
-:102D900097F78B72AB117D7158EC88705CEF6CF11A
-:102DA000FB9EF6FFD9CD9D1BF3395E2D8F25B9A271
-:102DB000CF8BEB28A675E8FBD4D7111DA777FED1E2
-:102DC000E3D07AFDE387D60CD7F20837FA13E8E5AB
-:102DD000AB743AB6268EFBD768F88CC74FC18860B3
-:102DE00088E3796E703760FD5A0D4E9FCDC3FD703C
-:102DF0003C44194FF85D3CDBE92538EBE3F7CB8029
-:102E0000C053BDCC73C548FF1CA2BFDB82224FA0BC
-:102E1000B723FD893867730AD3EBE2E7DE7AE7E789
-:102E200038CBAD8F8E2924FDA1BF1F0F6784EF70B3
-:102E30005ACF0249E4CF10BE37D1F8F1F981F385BA
-:102E4000EB89EC4ED60B27B6FD2C44EB3B91056E7F
-:102E500013F2E3E27DBF7DD33496E8C41996B084C3
-:102E60005DC6F857BC9E7243E03A92237694236481
-:102E7000DFD8F5F7065A0CEF55672A77F9D81F55B2
-:102E8000EE2679645785BF362450C1F5E556E1AF8B
-:102E9000EDEA34CBC4DFBB2C10223DBEFCD50C9533
-:102EA000ECC7E56877B0A79317E4F54232FA41E939
-:102EB00009EC069357E6785C5A600DC14BFAD1D401
-:102EC000079FC889FAA3BABE2CD2F4BD927F6303D0
-:102ED0008DEFD3E281686772BCB314029A1DA1C55D
-:102EE000E19A0F701C4297DB3698EBA0F8CF9ABEA0
-:102EF0000B1CE41FCA382CC7D73CB3D3A0173B72B6
-:102F0000551D4ADA11D1BAB5073F5E3F1FC06BECC1
-:102F100047DB0512D6D07AD5814823FEDA3AEB7723
-:102F20005D2F60D932E691C84A6AFBE6B44476A4C4
-:102F300043B303B8E847EB14EFD906AEBEC384FA37
-:102F400033D96B81F763F4A00339FFFD3C6D5EB2AA
-:102F50000732BBDBFF4078EB691F17AB24F8BC6F6F
-:102F6000EDA5DDE6AD49240F12C28BC8C433FD18B0
-:102F7000D16332C4EC9BED9E98BA14072F89CAEE38
-:102F800076E57482FCE577DDD7AABAF0AB1F1AECC0
-:102F90008110AFDF6AF18317E9C9E6C176C3390C46
-:102FA00055CB7F220117C7ECEF1CF64576B955DBF0
-:102FB00097F522EF8BC6F5F7BBA4D7A75EE2EB0B24
-:102FC0005FE2F885EA4B1B7E4AF5A50D3FF5125FDF
-:102FD0005FF812C72FCCBEB4D7A7CCBEB4F1AB5E9E
-:102FE000E2EB0B5FE2F885AB2F6DF829575FDAF063
-:102FF000532FF1F5852F6DFCAA6C073ACB81CFCD0D
-:10300000A6379A4374CE46AA0A73DE3857058E4710
-:10301000A73603E72BB67B851FA5C7E947D2103239
-:10302000FA2D567716D9D1DB1BEFABFC318E732A04
-:1030300013174FF9FCEC230A8DB36D1A70FEC2D939
-:10304000F8D1518A7FE540D81BCEA1B89A04E11887
-:10305000BBF4FA600A8463FC896AA58FA15ED43947
-:10306000C0D0FF964D430CED37B78D36B4FFA8A9FD
-:10307000D050BF492D33F4B7434E4B1EE55D1B2D99
-:103080005ECA8359686FA567C20D76D8F83D05FF03
-:10309000911F9383167DF7B8B88F74D56618D7192A
-:1030A000D77EB67C407C3E614EB1964FE8FE7E41B5
-:1030B000BC0F6E4FC2B8A79E4FD0F139DC92C4F856
-:1030C0005AA78A7CD39A69C28F9C1A729B286FA9CF
-:1030D000E36FB44672FABEB7D519FDC9F446772539
-:1030E000FBA34DC0F9DCDC2A7348C9A138C1C04A32
-:1030F00007E239B443D04708047D841A81F385A1DF
-:10310000AADC95D47E2A047C0A46A78FD1550B678A
-:1031100052DCB53EBB5F16C51972AA043D2CDD6BAF
-:10312000A4034AE7D256D30F4BBCFEF4FA8C02CA72
-:10313000E79D819727049CF5F3E7E97170CFDB6188
-:10314000C44B3CDEBE2D5ED614C77F57F2EDF06255
-:103150009B2177A4519C540599E2322F660F373397
-:103160001C9ABC8C9F19D88DF830A70938DF134FF3
-:103170008FAD7510AE8AE1DF1C6F5821FC4C93F2C5
-:103180002B99CFF0DDFEC0A744195FDB9A44FE16F1
-:10319000CB641A1FF6CA0328AE105267F3BAB737CA
-:1031A000DB92E93CDF57F566A0F3F2DB73E40194B0
-:1031B00017DBFE8C696EECF920A40ABB3993F7612A
-:1031C0003797706911A5A2956011ED6189EA835660
-:1031D00098E3F0A94AD49E3E2339EEB962A2FE5B81
-:1031E0008A73193E694A86015FD61223BF23180FDE
-:1031F000E5A37C1C4CBFCB4457824E42AF4BA195FC
-:103200001C5FE932D510DD68E72DD257CD06CA47DD
-:10321000D567FF742ECBAF7A1BC31D5608BAD0F307
-:1032200082D6264187F1F4E3F21AE9C72A0D3489E0
-:10323000FC96E01F7D1DDB146DDE2C0954967BB6D9
-:1032400001C467D6B8F1EC243C49DE78045F3A61EA
-:1032500036D07BCE123BE7B1413ACAF8B74E00E810
-:1032600013734E217EBD675DE777A4F30FBF239DE7
-:10327000EBF267AD57933F45E25CE429A46B8A1FEC
-:103280004DADEA04FEFE0ADC26A247A4835959C5C7
-:103290007CF4817F76911CB213BCAAD3A8DDD5A99A
-:1032A0004C25FA9D2EBDA2B8709CB587059DA37EC6
-:1032B0007989EAADCD16A0732628674C3FA2794BD9
-:1032C000EDEE952479A481E369DD853E943B1447B6
-:1032D0007CC5282F8A3A8D70CB8D97EB3DC0B127E6
-:1032E0003D110F47D7040D8EC508C721DF1E8E364E
-:1032F000AFD0C3E92542CEBE98FD537ED57D589C04
-:10330000AB495780E1FA852AF4F274E97898E4CB66
-:103310003A05E50BB6CFD0DADD25429EE870CED572
-:10332000E0ACCB9375F32183F8DE4DF2C44970FD18
-:1033300088F5765B9180334084F39FA98AE09335CA
-:1033400056F0529CB6ADD4E9A57861AEA2C1B7499A
-:103350008397094C04DF78BA9421A68EEB4B8DAB92
-:103360007F5BF8964ED0F4643F283E1FF8AE4B4981
-:1033700015FC3654C0C7EA8CF0B9E6A61C8B77253D
-:10338000F275470EC21BDB9B5E17F0FEA5D67FD5FC
-:1033900018E07A53DFD5990CAF9C859944CF4DD670
-:1033A0003695F2584D3AFD69E7C25C9A9C9886FCC6
-:1033B000BD00DF5F8DF289F290A92501078DD794BA
-:1033C0006F0189F7BFD99B68FF0E9FCD20072FABF8
-:1033D00031C235250E8E49DF91FF7F3CE1BBF1FF05
-:1033E00076FA15FBAD1906D0C979C89083E0642B35
-:1033F00099984C74D4D2BA9DEB32849A7271FF0FB3
-:103400003B85FDD5D23ABBD7F351214D2E6CA97324
-:1034100070795F9D9BCBB6BA4C2EEFA993D97E698C
-:10342000ADCBE3B2A5CECB65535D0997ABEA14EE05
-:1034300027ADCDA860395C051CCF5E99F239E7DF76
-:10344000E3E7CB518D7A6C706DB201EE7D6618F5B5
-:1034500055BA62D457748E29B6DDE51D65684FC92B
-:103460002B30D493E48986FE5326047E3981E48090
-:10347000A7324E0F223F8E899EB36B6915DF4BE951
-:10348000F0D3F59353E3F33556EF00CA3B395B05B0
-:103490009F366B765E13C111CB6405F8DC8CEDB002
-:1034A000E40D01F1FF6AA6F38771EEFE488B1DD98A
-:1034B000D7286427B4C8C28EB78238F76BCBF4879D
-:1034C0006BF07912EA2FCAEBDAE6A6B05C78D8E3A3
-:1034D000F4D239DB96D6656E5E8F579CA771E3BF39
-:1034E000447980F8F3358EA1C67339D6B39C6FFC4E
-:1034F000754FF4DA9491508E9C2167BBF32FEF6BDC
-:103500007429F22FF778043CED3DC8A3D6387BD957
-:10351000A9E55F60A02F61FFA83D25F20BAD717199
-:103520007BF4C312E66FDE9A2071FF3F4F9085BF98
-:10353000660903C96B9717DF8FF53B14F17DE8B976
-:10354000CE8F3F3E4F8C7C0A2407FE3C019F2B4FC1
-:10355000083B254916DFA1D84051583E81C887D085
-:10356000591FD237A95ABEA75BCE908888A13BE7E6
-:1035700019FEAEC88BD06716443F96E8FB17C4BF50
-:10358000FDB66523F9C3C37A69A7FC5002B9E02AE6
-:10359000D1BF1F832E4F3180EEBA23FC5C2589E119
-:1035A000172678359AD6CDC8C5E7A95E8B173100A6
-:1035B0001525F25E3A5FB14A4965FDBEAA446E2701
-:1035C000FEF942717A091FADF955ACAC93867DC8FE
-:1035D000A2B7B1C4C676BA8E87246D5E444F679594
-:1035E0000E67ECEFCC9B11ADE37FCD6336725EAF1F
-:1035F000E5AA4738DFD732EB3F38DFB73A6B7A1EA0
-:10360000C9BDA492E9C7F82097861F660DD2237919
-:10361000C6FCDEE9D3A2CE70A0F8849607048F31F1
-:10362000CF6791FD86F92F349E60A0D0436051F89A
-:103630007B8333E95BF0B5DEAF673E50F5EF4E5765
-:10364000D2F9E0268F90A34DE07D3340F55724AFAB
-:103650002AD3F38237E9BCE9EA8116C6CBEACCD992
-:103660004DC28E177E53936725E76DE3F5369DD7E0
-:103670008C95DB745E3356BE37C9B37BD5CB59010D
-:10368000739CDE37BE9F1D34EA1FFDBDA4CC2B5FAB
-:10369000AB8A392FD56CF13B485EACF2DC678AD53A
-:1036A000730F2881052531E793AC99B3F83D7BB6BC
-:1036B0002FE1BAAE50948544DFB8FF5EED81F59AF4
-:1036C0005CDCA8E997B3ED7393D6FF01ADFF66D23A
-:1036D000EB23A2F8193EF4F26496CFEB441C8379F5
-:1036E00020665EA524B082D615C5AB390A17A4D3CF
-:1036F000E1F957B0DDD1B06E7632E169E7FADED795
-:10370000A3E7D5F57E7A1E353EBF6EF3980DF0DF48
-:10371000A3C985175C0B2B1F40D0EC6C13F4D4B0FD
-:103720004EE891E14F887D9C4987C6F5EE6CEBDD54
-:103730000E8AEF4F91C56E3AE17A465C7D405CFFA0
-:10374000DCB8F65171ED0571F58971FD2BE3EA578F
-:10375000C4F59F1D57BF36AEFF82B8F6DBE2DA979D
-:10376000C5D5FFCD884FDFB56989E0188F3FBDDF34
-:10377000B9E2EF5D5FC57EA2A3E13083E945A7B75B
-:1037800073C543D4DEF5339DD94A46B17CDF81F65B
-:1037900015D9433BDB2ADDE27C4760E56E8D3E4870
-:1037A0003F58368879D0CE4AE6F89CD36390236799
-:1037B000C3B709328CEDB17668EE85C7F7D9E93326
-:1037C000A4D917BDAF5BE7E32913FC27490E414895
-:1037D000F899BA5DBB4D15FCB34D5D50B99EE46DD3
-:1037E0009359C49FB5FB50E86E1D11270F684A38E6
-:1037F000C2F18426CD4F68D3E4C95A4D9EDCADF9A1
-:10380000094943839B28EE9B7C988FE740B3AFE048
-:10381000AF0B103FF797166FA3EFC7EE1E53F2F8EA
-:10382000C35877FD5D827021DAE9635B14B259DA1F
-:10383000948C243A4F946272B4939FB8AAB0CD3F4F
-:1038400014FBADDD7FACFD79C4B39C69F3A2CE0758
-:10385000D9D265227A837C2F7F9786EB54C9C6B272
-:103860009677D5253A77BAF60AB7898CB0F419B2AB
-:1038700099CE11F79910E85B8AF018DC046605EB25
-:10388000196A98CFE25C532A0BFFEA196428DE6FAD
-:103890005716C1EBAB66DB7EAAF68C0F90B438DD11
-:1038A0007995FA38698234E887E38EB245ABAB8FFD
-:1038B0006CA6F3D04E49D4A73CF3F8FC95F9D1FAA5
-:1038C00098671E1FB812DB5B0B0799489EA67B52B8
-:1038D00013DE137375A9909FDB9B170E4EE48FE9DF
-:1038E000A53C13383021E76B25D1D4042C876AA579
-:1038F000AC3DCF14F52B35B8C9B55ABB4794177AF0
-:103900009EF8F1E794BA753B7B809F8D6CC877F683
-:1039100033D88B5797F6622FA279CCF1DAAD56796E
-:10392000009D23DCDA6C03BAFF616B3688EF905799
-:10393000D9F8DC2858DC03AE7145D71D5AD56F1E67
-:10394000D14DC80486386EA6065FFB4493768EF28E
-:103950009B307DC7B755CBF36C8588DB9D1F8BE70C
-:103960005FCD27BCEA78DE57FAAFCD449F1DD90B57
-:103970002B37E27BEB1ACD1C3759D798CB744EE32B
-:10398000907D746AC52133D9ADF9D06E263B7F1482
-:103990007D793D84AE400A70D9AEC9E7FFD4FCF80A
-:1039A00061A0F0F341D0C5C0F9B438F01382CB1058
-:1039B000126D12F18FDBE4C07996EC4BAF48A4B7DF
-:1039C000EB4AF5EF7AA1C652ACF91732C3B78EF8BD
-:1039D000281EBE74429FE38E8ABF9EDA9D7B5F0DD8
-:1039E0005F86D5DD6F18E993F0363B46CF6CD4E0A7
-:1039F000E7F6FA15C2E1B5C581167A7FC9A6BF1EE2
-:103A0000207354565533BDFF14E11D9F2F0C07A79B
-:103A1000D33063BCE14AEA3FBA76DB7E8AA7E5058C
-:103A2000EFA8EC8FEB1BAE54577A888694C0FD3418
-:103A3000CED0CE48850BEBCE4DAF86B3783D6379C3
-:103A4000BC5C7D3D480FD54C476E11C7D7F04BF895
-:103A5000A773CB0B370BF8607B16EFCFE2CE8A5DF6
-:103A6000FFB669FDF8BB8578BA68D5E0F758148EC3
-:103A70006035FA358F2582A34EA73A3C6E78A26B4B
-:103A800015E53AE7873A5F2439E8DFE49EC6F2B0ED
-:103A900038F024BDEF6BF337701E7057275D47D4A5
-:103AA0000D1FA7D249D7BB603FE569C2FBD615EF12
-:103AB0005772BC782F88B8589C3ED44BAB129F6786
-:103AC00010F7E58CDB6BB493915E958D9E587A353B
-:103AD00073BE33A4E9935013D22FCDB742D06F48B1
-:103AE0005DE64E44678F687A658746B7FAF3A13D75
-:103AF0009CBB3C54DAED27664A46781EEA8DEFD32C
-:103B0000C0CBFC807C7084FA65101F607DF00A37A2
-:103B1000D3A7CE074BF6FEF500DD67E3F4C905B188
-:103B2000F7D745343C227DBE43EF2FD9D475807C36
-:103B3000C5C12B047D7E4C77871545E90CFDC7F781
-:103B4000A89F4E3FF1FB78571B4F2EF67F4C785CB9
-:103B5000B829C8E321FF1C2BE5713AC349CC724A4E
-:103B600025ED676B1BB8693FF65F1474905C3855A0
-:103B70006B62B8DE981F5E65C6F2FAA160A5EB869F
-:103B8000AA33916C72298F6BCCFF0D6B33E20FE976
-:103B9000E76F344F91276013C1EBA08DE5690F7477
-:103BA00011D57BAA0EFF157172D73CB1177A3ED79B
-:103BB00071D7162B8E8945DF621DE7D84F8F379D51
-:103BC000193F1DC5FE434BD36CFD9CF00CBA8F67AB
-:103BD0003BC54F11AEAB9A7AB7572F58FCB4F9A436
-:103BE000889FAE008E03AD4C196B4A44379740FC5A
-:103BF00074CAC444F1D3C87B063B735593900B3A07
-:103C0000FC86578D4C16792948A57C891E1FD3F751
-:103C100075B7664F3669706B21B8313C05DCDA0840
-:103C20006E0C4F1D6E33843F425F8853BCD66316C3
-:103C300079B1910B3651BEE054A6C893D767DB44E7
-:103C40007B8EC82F9C411F9931F634F2C19A667160
-:103C50009F08BECF79B517B30F3886509E33D3CCAB
-:103C600071DAED9EFB6AB6733D99F9CF0A6A5B1E65
-:103C7000CE3BFCC3B9EA027A5E62E773F27A3EA7F2
-:103C8000A5AFC8E7B8F2B47C4EDC7C76B8A9B28D9B
-:103C9000E6CB137E4B8F74ECD3F2115A1E2823DF30
-:103CA00098AF70C4E52BE2F3956B9A17ECDF2EE228
-:103CB0002B2C9F87FF7824FB63F1F3B8671AFDB7BD
-:103CC0003523753FEA1147A2EF1852AB8CF4D8A206
-:103CD000E1BBA1AFC8479C6D7C284F36F8552D79C4
-:103CE000E71647D0FB911FEA4ED03FDE0F3D1FFF86
-:103CF000D6CDE31BEF074CE0DF6E99C8F11441DF2E
-:103D00006B9AC5FEBBE3699A5FA59F3FD2C7B16AB4
-:103D10007E1CD773A2724ACF870D75DB985E876AC7
-:103D2000F74535FC7B4A68650EE5D76675513E72EE
-:103D3000E80E89F3EE439D7ECE43746C98CEF9F184
-:103D4000BEC981A727C6C49F76B87E9AC9F9022D3D
-:103D5000DECFF7E6A0DE53D715762A64EF8E04BED9
-:103D60006727392E1F107F3F4E7C7D4E99D0C39917
-:103D7000D741C27B4F3E9F28DACFF4DFAF6038A136
-:103D8000BF9B2CE4ADA2D7FFBFE4A976B61DE2EF3E
-:103D90007D4EF94093B3FF0997A29C3D5112389E86
-:103DA00050CE5ABA58CE8627289F919E5C4E177DDA
-:103DB000101E6E4C7C3F8F5C76A9E2E16981877CA6
-:103DC0001D0FF75C92F942C4437659223CA05F452F
-:103DD000F06AF32983A85D29510653D98D8F1F26D8
-:103DE000E68B5965C2EEBB58F858A7E1E35EC207FF
-:103DF000C769642D4E93C7CF9B357CAC39031FEF49
-:103E00000B7C94E8F878EEBCF09151956168779757
-:103E10001BF191EACB35D49DF9467C240F2D308CD3
-:103E2000B7BC4C16F7240D9C68E877263E8CFEC084
-:103E30009DF45E2FF6E8C04067057D4B34606E7BD5
-:103E400007C9E64C7F5B0595FA3E37C7F9737AB927
-:103E50005CC35FE6D4C4F85DA0F15BC644E526030D
-:103E60003D7C2F317FD668FD979728B794C5F2F334
-:103E70009589FB2FD1FADF3641591CDB1F7FD64BCA
-:103E800031F6784FFB0E242BCBCB78FD224FB6A317
-:103E90003E95F3663B92E476CA57ABF54EC3BD75CB
-:103EA00083E937AC67FEE89B0E95CED9D13D4168DA
-:103EB000596DBBA35FEE1A6CDA96317C25C1B1A9AE
-:103EC0006C88B8BF7591FF6DCAEF28EA09ED1CD266
-:103ED0007CBEEFC814EE63A27BB2C09D714EF92385
-:103EE0009467E25EB7C120BE238620EB41C90FE98B
-:103EF000F4DDB205FC225F4EFDC5F785BCF9140860
-:103F000073DD0511AEA7697EDE0365393C6E3AC8E4
-:103F1000260124AF89E4A8CEA70E4F90E9DF53EB2A
-:103F200036AD245FCE0250467EA073207FCF0B9526
-:103F3000A0523ECB040EB6334DEB0F7CCD793AFD4B
-:103F4000FBC397FB88EF0FCF717FE7DAAF91EEE508
-:103F5000F344EFE56BD4EC01FD5E3EB532C8DF976C
-:103F6000AB2BEDEE06CF99DF973F3A31B08BF0FDEA
-:103F7000B7A4412191640E4E98EDBAA0E3872FF2C9
-:103F8000F8AF5CE4F1DFEC6DFCBBE9D752CAEBF9AA
-:103F90008F123F37B88AD9EED4CB78BC5DA12811F7
-:103FA000EA27395E1BF0619FA83DE73C6A627FA863
-:103FB000C124CE9FA9EF99D8EE827C41074E19F219
-:103FC00072C645C7717A838345DC49C45FEAFF74D2
-:103FD000D708B2BF7F99322B9286E31D7C55D87FDC
-:103FE00096A991CD74BF73FF349B773BF2DD3DDA28
-:103FF0007AEDA513EEBD137FBD798A90172E8BF74E
-:10400000F2023EB7343342F6A3ABD82253AEC01906
-:1040100097D76CB5B42553BCB275C77D15A3B0FB5B
-:1040200063752FB91B137CEFE9D4F29A23A5C472F0
-:10403000F09F939244DCCB67BC4FD85AAE9D2B497E
-:104040008554B2232DFF52D2129D07D04B7DFE2204
-:104050004FA48ABEBF8ED0256E88E7A292EAA464E0
-:104060000F9F8BE824F8567AC30EB27F1F5F10BCF7
-:1040700035F6FBD3D61270911DEF9B22CEC36E5046
-:104080002417DDAFF160C4C2F78E3FB8E8E9E6144B
-:10409000ACEF3D6A76133C5AFDEF3993B1FE388E92
-:1040A0004BF2EEE00E71CE529D0FA16108BF56F2A9
-:1040B0002AB1BE5B11E7B2D9212BD6AEEA43F8FF95
-:1040C00075725F016F0856D3BD9DEB5226F37D9646
-:1040D000D973443C78BA74B483DE7FB0C4CEF81B85
-:1040E000A29DD331A9D57C9F65DFF9C6733A0F2E07
-:1040F000EF5409BFEE52BB5BE5F3974ED7587CDF18
-:10410000F5A8192456715D3CF974C929D6E5157EC8
-:10411000EEE37258A5FB8EFBE27BF56EBE35D170E7
-:104120001E68F726E19FA68D777A91D271BD71E75F
-:1041300085F475B5E1BAE8DE63D7508E4764CC31BB
-:10414000AE2F2DCE6F70C6D5A79677DFE3339CF0E8
-:10415000FD85FFA785AF71AB574EE47FB6D64167AB
-:1041600055CCB904670F71C09AC982AE6D592F380A
-:10417000C84EF9C27FC4433878E59F073EBC97CA52
-:104180007FFD6ED75284CFEFBF7E73C793B4BFDA83
-:10419000BB0F11BDEAFE189FC1C4F5BC586D63B8D2
-:1041A000F96768E7397D1D2F587DDCCEF9A5B5FB91
-:1041B00093B87D64398492B07DA445C9BA99E8AEBC
-:1041C00053F2D6CB3488388FA8E37FED0D7E138C65
-:1041D000213CFA25BA0F639A76BE76C3229009FF76
-:1041E000B645ED7C5EDDB75C9C57F729D5497CDE92
-:1041F000748E99CF87D4575F73F930ACEFBA5CDC1B
-:104200004F3563B9328FE75704BDA475169B9713DA
-:104210005D6689FB9AF4F3A645D0C5DF7F8CF4B6C2
-:1042200077D848DECC4700D3FA5A357C69718322AF
-:104230005FA74AF6A4CB6BC463461CDEE2F1BA4228
-:10424000C7E34818497894A12D99F4E14300ED742F
-:10425000AFC086E54FCFA3F36C5FA8690CAF9EF8A3
-:10426000F91DB4579511740F8B83CB4EB457A9DC4D
-:1042700085F62A95AE60C575CB71DD7BDE38F8D248
-:104280000F71BA594AF5957444AB48CB7B81BA7427
-:104290005025AEFF06E25E51DF4289C4777D92A1D0
-:1042A000BED66389FE3D00FCD595A5FF7D80D35B1E
-:1042B00094A108964C8B968F11F559E487C4B4EFFE
-:1042C0009E69EC5FB63F66FC81B8DEC5366E0FEDC9
-:1042D0005BBA45B5C4B43F87F572805735FBF1FA38
-:1042E0009D66FFF604F2EDDD7261475AFE052AC9AC
-:1042F000B52FD14E23FF5E322B2CDF21D72227BAD8
-:10430000570F00E561AC5F2E1BE5EBE51A5F58FC2B
-:1043100015A0E5C7E01B3DFE803F7BFE388BEF63B9
-:104320005A35C4C2F70FA13EF0F696AFB3782C9F72
-:10433000C6DEDBF5AC2EBF87C1309AFF4B28FF43AA
-:1043400005F341CCBD0DC4F76DCF5FB614E7F11D89
-:104350004DE638AAE45A9FC2F731D535B13C7F40CB
-:1043600009FCB63CE67C4963FAC242922FFA3999BD
-:10437000E8BD47D798BFCDBDF71DD50780F4C297DC
-:10438000485AF65EE8B0B16EEF115AC7EABA762E17
-:104390009D6E85858DDD12E4B8CF154AE04FB43EA1
-:1043A0007B26B6C7F089D58DEF19FC0EE37D9CB254
-:1043B0003BE224B86F28F9C049F3B71E167CBDE173
-:1043C000F0EC24E2BB56EFA124E29B2FE8E2C7EF1A
-:1043D000C0273EE5559661BBDF48BD9EE8674F4369
-:1043E0001ADB150797DF7F2DF1CF8DBFF801C3BB17
-:1043F0009B6FE0E14195CE18BE818799AEBBF9462F
-:10440000ABF7CC377F67BEDADDCD37A2EECB074303
-:10441000FDE04C63FF6EBEA0F1912F1EAFB073BBE9
-:104420007DD2C35BD418BE3A49F558BEF909F24DA6
-:1044300002B93F7D9246DF17986F522E32DF0C9DF6
-:10444000A4C9CFEFCE3763275D14BED9633A1FBE30
-:10445000B9EC4CBEA99AD4F7DBF34DAB3BCCE7E902
-:104460005AE79813FE7D900F347939757EA0B28D8E
-:10447000EC1A45DCDF374D9A99E5F3109F497487B4
-:1044800034EA4FA1CF0F5EDFFD7D06EB67FDFEF541
-:10449000F58450B293160BBAE9AC1371DF6952F987
-:1044A000B4C5A477E93B024A3553F694EC02D4FB39
-:1044B00032D985D05EE1C179365499A04DA62D0739
-:1044C000AB87F1F861B6CF8668717FA7942FBE677E
-:1044D0009A29FEEE85FE5D4CB562BC5FB6FF59ECD5
-:1044E000265C770AF931EE12F17750164D8AD7BF64
-:1044F0006887E0FA3A07DA984E362857F71A273ACB
-:10450000E35CB52F98302FF9D6249376CFBEF233E3
-:10451000A2B3DD6F6C49A673127B24E0F339F383F9
-:104520004FCD23BE73A942DEB4AEF833A52361D7C5
-:10453000B41F1AF5347C6AD4D3F0A9514F6BF51E21
-:10454000E58D7AC2A8A7B57AB79ED6EADD7A5AABCE
-:1045500047E5CDA7063DBD61D2A70679F31ED5CFAD
-:10456000414F1F9E7471F4F4A88B2C6F9EBE70F2A5
-:1045700066DFA4BE1743DE1C392F79937DA6BC39B4
-:10458000743EF2C6B5B943A5F4CCC21EF8A056C31A
-:10459000FB5B65CADB343E949C5BBC269EBE3AAA9C
-:1045A00017AEA6BF2BF3A557F87F3DBDEFAAFDD5EB
-:1045B00091C6183FDC65E914DF23D4EEE1E7B76C60
-:1045C0007E95E3B1675D2F5D105A74A65E45BBC84A
-:1045D000C1F4EB35732EFC7CD7D13A47F0DB95CF95
-:1045E000DEC1FC945C6E9C4FB77F3BAA6D669EAFAC
-:1045F00044C8E99EECA19EE6FDA05C16F7FFC5CD80
-:104600001F4FBF489FE9938B981E2D742FF8179D5D
-:10461000C07FA7EABF4E6EFCBF8A7C49E9C51193F3
-:10462000CF834EA76BF84CB06FEFC5DDF705E3CF36
-:10463000E993CFC38E3E4CFBEE9B70DFDF67385EA5
-:10464000B47D5F30FFE1E6F3C1F7BBE5DDFBE6EFEC
-:104650005132B47D6FF8E735EF515C63C3BFAE7D77
-:104660008AE21AF77D9DB78DE21AFABD726910FDD4
-:1046700091F5EF8F102E2EBFF89E24634ECC774518
-:10468000C0FE7DF4BB13B2377CDDEDFF2BF7CA9182
-:104690007DD2DBBD72AD36635C4F2FAF2A17F64A71
-:1046A000AB691DC72336A05F558F78EB9823E211C5
-:1046B000AD68A7B0DC9953D0AB7DB4AB4EE1B85335
-:1046C0006B9D9FCB7BEB6670B9EBB5256524777D41
-:1046D000AF2D62BDE7F3FAAF7B1881E4AEF8D049A5
-:1046E000CFEFF5E8FE90B05FD2C87EC1FAC393D792
-:1046F0006F8D8D0B8CFAEFE15BD481D178555B66C1
-:104700008CDD23C7FA51A012B944FD28AC1BEC9AEA
-:1047100011EC47ED26BB06EBED934718EC1A7D9E96
-:10472000B566A821BB66ED0EF38C4476CDACF2C421
-:104730007E14D6390FE27039F8FB7F49FBFB5F51DD
-:104740007EE9DDAEC99D7271ED9ADF4FBE30F18713
-:104750006E3ED6EC990714E50D4DAE7C47F9B1D10C
-:104760004CF1E36F2B3F4692FCC837C88FCFCE4742
-:104770007ECC2A771BE2A20765B5CF58B2D37798D3
-:10478000A15ED6F42FD63BD1AF31219C7E5221B110
-:104790009FB3C10BFCF7FDA64BF35F267AD8BDC8CB
-:1047A000CCDFBB3FA88873220FCD11E7A91E5E5E48
-:1047B000309B3E235A9772C3DD4914D72E17F70456
-:1047C0004C97CA39CEFDE00C61E7643BDB2FA7FDB7
-:1047D0001FACB000D1D5D9E2DC146EE778B5E6475E
-:1047E00081B499FD0ED70F2D6E3AAF1A1FBF769682
-:1047F0007CCCDFCD83F40A7FDF7DB6F8F5B78D5B27
-:104800000F98F29DE3D6CC8F35CF0DBF41759E49F1
-:104810009F4726CBE25C620F7A2C9E9F3BAAA7A7FC
-:10482000457A3917E524FB29E61E59FD7BD659E563
-:10483000621E27D94F8551BAE8A82EEEF55EDA94AC
-:10484000DA678EC4E685522CED3C5E4AED3E7EBEB4
-:104850009ECE2F90CCB27859AE3E5E89F239C178A7
-:10486000FBEA8287092EBFAEAB3D4C71EA49964EFA
-:1048700089FE9EEBDE3A95EB7BEA9AB8DC55D7C60B
-:10488000FDD6D76DE2F2BEBA103FBFB7EE31AEDF54
-:104890005DD7CEF5C773C53C132D211E6752178E09
-:1048A0001FC30F659FE03C31782E8DA886F6096FF7
-:1048B0003619DA8B3ADB0CF5BEFE4D86FE7D66843A
-:1048C0000CED6F950502538AE85CC363867ECEFCCF
-:1048D0007643FD5CFD850BDD6F654AAAE51FC8AF19
-:1048E0008302484F4867E9B5B2CA79F31AC197FD08
-:1048F0006BBD61AA6F71D998BF75BAE433CB26B18D
-:104900007E53CC3DB51D2E717EB2A1AF88A734FC7D
-:104910004CD4B76489F391C3AB447EA461A0B8972B
-:1049200044CFC36F7169F793F8C43D1A83F223FC37
-:10493000DDED20EDEFC139CB45FECC0D6ECECF378E
-:10494000D481F67D6284F31D1960F68AFBD5159932
-:10495000FF9E920542F5385F43BE5BBD85E44C3057
-:10496000D56BF6F29F960D99298F48E2899330ED29
-:104970009ADED1F2F2491F009F3BE886CFE7E27B47
-:1049800084DA2EBEB7A97F6D17E7E3B6FC42DC637D
-:10499000130FD78E5F7CC5F72A6DFDD95759C4D444
-:1049A0005BBBCFED7425C57E8FB6A52695EF5BD892
-:1049B0005A9BCBE728B6D688EF8D6510FBDDB2C8D1
-:1049C000C6E730B6D69ACD24274F2DB2305CF4F529
-:1049D000C7CFAB7FBFB94E3BD773AF76AE67AD766F
-:1049E000CEEA6EED5C4FB376CE6A8D763E76159D3F
-:1049F000EBB1133CC5B99EADB50B14ED3CAB7E2FAE
-:104A000003C35742F8F2772A56D86B1A07F4870C7B
-:104A1000196EF1DFC7665425C79DE7319EB74AF589
-:104A20000D30D49DF9C6F356C9434719CFA90E34AA
-:104A30009EEFB1798CE77A2CCE4AE3F9D058FA444C
-:104A4000609A566CAC27FC77FF7D477AD88FFF7E43
-:104A50005C37FD86F47340129D4349637ACDAC12F6
-:104A6000F499A17D0FE3864E2E53915EA874529E59
-:104A70005DA273902AD351F4FB37A5577A3ADFBF72
-:104A80000720AD4CFCF700F473087FD1ECA8A553C8
-:104A9000944FA71445E7BB7F8A723CB6AE973DC9D9
-:104AA00085FFADF2FF01C18CE32B00800000000008
-:104AB0001F8B080000000000000BB555CF4B1B41B9
-:104AC00014FEB2BBD144A35934B6865A481A520DCB
-:104AD000A4B06D37A225D2D5869283C8163C78E85B
-:104AE00021879CFAE358E86D635B904A24A9422F22
-:104AF00052C8C11E0A821EFC03621B7A8E680B52CA
-:104B000029C18AE7405B7A11D23793AC899BC47A7A
-:104B1000E940F2F266E6FDF8BEF7E6E50D68798158
-:104B200090A2DD137D40245A2A3848065468B930D3
-:104B3000305324E9A2FDB5AA94359114C0A9095CAB
-:104B40009ABA1E2F4912D9C9163BFDD4CECEEF8D8D
-:104B500031BB0126252EAF1F39000FB015B3E51666
-:104B6000FDC0C20E9DABC0EF315B0E7E96DC49A549
-:104B700032CA4D01917D69BDDE4BC02CFB49F17AF3
-:104B8000C73D0309F29F3180FC30BBF3D0CD745791
-:104B9000343BE5A33C427B4548E42F5284DC078646
-:104BA000AFAC81F6E7AFDE17258AFB6109B84CFB95
-:104BB0000BF652EC11DDDB1AEF945F28CCCFB4FD7D
-:104BC000299DCF5C1121325DB71F962855D860AB67
-:104BD0005C237EA25255A755A1CF0334E894F70C6D
-:104BE000D347EABAFB243029535ECF0FFC1B8591D3
-:104BF000BA5D805261FBB7B51ECF71376D8410AAC4
-:104C000088751C15B6EE36CB3F866FA360673821DA
-:104C100030BED43D21E7A738BD5F96BB183EB1A892
-:104C20008B25B2478C508F13CE3DDD8D73FC7D6795
-:104C3000FC7502078683CBA22173B9650C72796C6F
-:104C4000F8B83C3246B83C34142E4BC61897408A0C
-:104C5000D7B3D3061E2F63C47763C1F6F1645B59E3
-:104C60006775C78484F7ACCE432AB76BBA17253F64
-:104C70000D7C115DBC190A3D6F2799FDBB27028F82
-:104C8000B91ADDF4EAE166FBD56753E7E24E1B7320
-:104C9000BBAFECEDCF5D1D486CB6F0FBB2D6C740A4
-:104CA00096E711880B58A43CBC0EC529D3FDF4B679
-:104CB00093F7754871E49C0CDF9A0B3F4C1CD43F72
-:104CC000CB696A19829CD524997AEAD46F8F42F90C
-:104CD00034F45560FAE320AB677A223FA8138ED5EF
-:104CE0009B9FE786C92EB5232288E6BC5E6B369E65
-:104CF00097892B202982DC027F3B5C8F6BF618F2B0
-:104D0000F0B960E5DF7ADFAC3BADB4345A7BA2B4D6
-:104D1000125D898C4675D2D66D9C07A70FFC7D77F6
-:104D200040CB33BC17C80FB8433CE7238994AB9EF4
-:104D30004FBB3A997974D7FACF9B2C3B12846FF909
-:104D40001F7DD8672F3A58BD9692423CD7228FF5E7
-:104D5000DA9C5B526F39D97B44B8751EFD716B9F2D
-:104D600056F35991C83F9B4F2AF96FC1F737C67761
-:104D7000B59FF745AA6B46137CAC9FFB891B8D4200
-:104D8000F547904B116FD9A8A0E4E9FC97DAA17020
-:104D9000F796F9D0145F6DE8A36BCD73675B73551D
-:104DA000E74D1041366F7E0ECDBAF32DEA6B4A9374
-:104DB0004773EE34F358AEE24C567122DCFA3DD71D
-:104DC000EB355F1BEA488867FBE6EB797DD38E7F86
-:104DD0006B1FAC2475779EFE1FF0691FBE1B8C8F66
-:104DE000B3EFAF1D6F569E8EFF334FD6F3A23957E8
-:104DF0002E88F3A2F74CFD2FDBA790A6F00700004A
-:104E000000000000000000001F8B080000000000F0
-:104E1000000BFB51CFC0F0030977F3A0F2BFA3F161
-:104E2000D7F3A3F2CBB851F99E68FC2634FDE7D145
-:104E3000E4591820B4233BAA38B158988381410E15
-:104E400088353950C5F3A1E6D6002DE807E215AC48
-:104E500084CDFA2C05748F1C03C32920DD00C4D730
-:104E6000651918D8817C216906065F204E00E2CFC3
-:104E7000320C0CB380F43B20DE2A0DD1C707143B63
-:104E800027439EFBBB85C8D3378AA9831F28A1F27D
-:104E900067683330DCD66160D0D683F0AF20C9BB01
-:104EA00003C5666A43D831AA0C0C877419184E28BA
-:104EB00061373716287F18281FAB87DF7E572354AA
-:104EC000FE2E6B54FE4F4354FE134F547E9F372AE1
-:104ED000BFD107420300BDE0D98DD8030000000018
-:104EE00000000000000000001F8B08000000000010
-:104EF000000BCD7D0D7C15D595F8998F376FDE674A
-:104F000026C90B3C20C02404891AE8000182224EE5
-:104F100042B0C14DF181546997EA93B53622C81366
-:104F2000B1A6AE6D26DFE1AB8DE85656AD3E586DAD
-:104F3000A9D51A2D6D6957DB04D0C52D8548A9B5B3
-:104F40002DFB6F50575B16D9E816755D5AFEF79C1E
-:104F50003B93CC3C5E3EECC7CFC6ED0E77E67E9C25
-:104F60007BEE39E79EAF7B9F220640BF1CE01CFE14
-:104F7000B1E7452200CC197C462BA0542E07D8243B
-:104F8000048D70117BFE415AD91566DFC08A2F9FB0
-:104F90003ED8EE5A10A8FEF3456DF13EF6BD63EA29
-:104FA00057E350C6EA4F14A8BE53CF79DE0812402B
-:104FB000014049E76A35C1FAD934AE49C5FA1DFA4C
-:104FC000F695C0C63B53A28084E315656FDFD6001B
-:104FD000D03D0DE072D8AA16C758F998646C866C5B
-:104FE000E314D1384ED91F17A1BB14E8EF1CFBDF27
-:104FF000A62F2621C1C66D9DFAD59508B7D27D335F
-:10500000E811803BC6254167EF678248F3522A2C9E
-:10501000305959D5ADB835FDFC713A102F65D86BB4
-:10502000677C7964F0FD32072F0C1F197801B804F2
-:10503000408359DD16960340ED33FB35EDF1B5F8AD
-:10504000E8C63F7FFE7CFC19A0131E40ED8C272292
-:1050500083F06CF2F5774B0CDF5611188FB12A39BB
-:105060006C9C4A573F99E30DCC53EEF4ACFF74842B
-:10507000B380E621C8AEFE32E1996BD79BCB668E3A
-:105080004F675E390BF83823F57F25A2B800EB7720
-:10509000C6AD888B1E65CB83F7A05D5F33BDF586FB
-:1050A000C24F08F13307F163C5911E1D3A96C27ACB
-:1050B000630D9B4F8105FD522E918D096300F2F126
-:1050C0005FAC89ACE99548AF634C56977D1F1BB325
-:1050D0001A25F67EDC82B420B367041ED2DE0801F6
-:1050E0004253728E1A599CEEBB6677F431BA3D0377
-:1050F00091CECDECD92CB37E116FC723E9C71848E8
-:105100008D97A51EE963E588254353398D4B7C783F
-:10511000A77491B19991F4669BFE3B1A547AB63507
-:1051200068D0ED07686988D3F3FED097BE81FDD7BC
-:105130005B7ECDCF9E72D7ED4F61B9192081E345DB
-:1051400062BC7F9055ED310DCB6022DE2325FCF94A
-:1051500012E285C1F9558649C4CB0F6D3CE9D04DAB
-:10516000FCDA6C2CCF812CF8749EA1522F9F05F491
-:10517000206B3958F6C7F33C659F36DE531FA0906D
-:10518000F04665262AEA042E8F22722F180827C3BC
-:105190005756B960CB15499AD9DFCDE6179EA718A7
-:1051A000BB58D36D8297BFC6099C3ECA04959E31F9
-:1051B000E8DF7F0EF16288E9CD6CACE0CCE2AEEEC8
-:1051C000188EA91853D93A067D692D2F0B7F41B946
-:1051D0007CAACF81BBF8A3C78F24F5A41259C6FDC2
-:1051E000BDBD7E979F3DA222FFAB33C544BA0CE103
-:1051F000B5126CF2B05597459CF74707F7F0EB7581
-:10520000C2E6E73650A9BE8CEB553EB85E1D065B84
-:105210002FE49F72BE5E1DB2A58E66BD1E07F0E034
-:10522000253480972E8E97B28F182FCDFB5626B23D
-:10523000CCA3CD5E4F190CA394F0A0E808E7D646A6
-:105240004EB716A3DB6CF277283C4839C7E3C9B2E6
-:10525000F3F17E8DC0C75964F38983A74D865893B7
-:105260000E239E3A6B506E6D2D1145944B1F159E6B
-:105270001CB8360FC095E670957EB47049A1EE95C6
-:10528000D9F8B12D831FB720DC9CEE6A38DD891F69
-:1052900029DD397005901FF83A27F83ACB7F13EBD8
-:1052A000DC36B0CE49BECEF18F669D9DFD1C5463A9
-:1052B00025AE5B9DC6F890C1718B642937E0FE1A5C
-:1052C00012E03183D101C23F8EE999E1A697751DA5
-:1052D000E03E21C0F50D69554ED2056F9DCC749608
-:1052E00059F87EEB05C961E601695F7F9F0327E3FB
-:1052F000DFFAE38DED075C707E5188C408CE79300B
-:105300000FE17C27BC3CA71B86EEEF6483DA28FB09
-:1053100000DE6BB0DA0FF8CEFF7E8B04A96CFAE5E5
-:1053200083B65C00B54BA1F9DFCD787026E2E1824F
-:105330006A88B2F508378DC17940987D9CCFFAD93B
-:105340001D68945DF81D6A3E037875DA3175C79F54
-:10535000777EFBA1DA7D20241F11187E5B63623506
-:10536000C2A596401AD7C0BF7B59F778181ADED667
-:10537000D85F06DE21D7CDAEF74EB8A90D58BB6673
-:105380009F71506774D252201A4D300887432FCE38
-:10539000BA38781CEDBAFC6680BEB65E01A467829E
-:1053A0002ECDFCF3E9EA20D2D5C57F7DBA7AE36F32
-:1053B00097AE4E0A057FBB74A5D44BFAEBCCCE2832
-:1053C000924D2E27B5D516AD3F8ECDE492D439B38C
-:1053D0001BE525C4997DC68701919515CDE47A2FEB
-:1053E0001880FAAB5AE29593BE42AF9C8CAF34BBA7
-:1053F0009D7E37EB38AE42E3A27984E3CA61E80EC2
-:1054000044B1AC503F48CEE7A6303CC18335C5BC63
-:105410009D81ED869A8F8CEDD878A87E9C2BC276E4
-:105420007F9F93C862F70ECEDF3B4E7C452227114B
-:10543000197D7D08CBFA1B2EBC0FDD4E86371CBCB8
-:1054400030FA2F453F49C120FECDDDB791FF220044
-:10545000A241765D619B855FDBF1FFCDC77D9FF348
-:10546000757BE12C0DF52D60FB0DBEB784CF039647
-:105470003F1074E25B673C299C00A21BBBDE48EB3B
-:105480007F27F25316FE5E25727DE3BD2FA5FE1B1E
-:10549000ED416BB3A03FC6F07AB8E17D788DF1E5C0
-:1054A000EAEE0B15F47B5C2F8EA17AAB1714298BD7
-:1054B0005CFDAC066E1702F4C9CB22EE711BB91E5F
-:1054C000DA25EDC379BF5A21A571FF7BB5E27F488C
-:1054D0003F7FD594D288E4573BAECE194EEE1C6E7A
-:1054E000E0F6AC53EFB029D1FE7E58EE0B67D3E364
-:1054F00007C74FD3F8575548DE7D5AEE9371FDDF4D
-:10550000FB22F8507F3EDCA00AAF4D65C62FCE933C
-:10551000D1D1EA8A2205FD0E23CD6B89ED0773F008
-:10552000EBCCB3252CD23C5BC255E4B76AD1DE216B
-:10553000FBF10C7B8FF26028781DBF558BB63C2B9E
-:105540003E9408D7B7145F32BBBD69CFD72967FA3D
-:10555000B31CF8DAC2DC2E6A0B73B8DA62621AF98D
-:10556000BF2D9E7D5CE7D96CC3E7D46B8971BDB458
-:1055700085C993D1C02387BDF030B41D457FC94490
-:105580005BD6E4D7F6367E0EEDEC64D8940C7CD373
-:105590002B4C62E5097109366B6CDC9AAA8E6AC6DF
-:1055A0000279AB122F3230602C7456A21F70F217A2
-:1055B00037F67C8DCD6BC27CBF86EDF26A523DCF53
-:1055C000B176E399989358BBB1C7D7AD4339FB4F38
-:1055D0006827A220B66E6A443F560B0E7109C0C3FD
-:1055E000E2AA4AF4B3C9C0E502937ABA3C06FD3395
-:1055F00040CE99A1E403FB13CEF907DB0D85B788F4
-:105600002DAF68DE24AF960F2FAF36F2FE2DF61FBA
-:10561000CA9B0983E351FB71758A078F6333BE1FF1
-:10562000B0E9D20FCBFEAAE38C87E501D44F222B41
-:10563000442D8DF5A12B17FD5063D6CAD08DDFCB3D
-:105640003B1B99F81811EF4CEED570BF715258E61C
-:1056500082F79722F7334DBAEB9820A0DFD7602A64
-:10566000FD4C2CD7CFCC46A7DB6DFA1C28D7AC1647
-:1056700092345E62C954946BB522D9BDFFB46256B0
-:10568000AEBBFDFBF63883EB0FBA3C17CB7CFDE5D8
-:1056900015A21998F1A7AFBFFC21D73F7FA3E2D98C
-:1056A0004F3FECBAC8687B148CBCFE7FEE38CEBA94
-:1056B0009DCF1F5C3E4EBAAB3A80F2EFBEC4F07293
-:1056C000E5FC755B4EEB36660598E92C72252009E2
-:1056D0009E7DD579AA900283ADB3744C22F9268DB4
-:1056E0009DBB72270C3DAE145332EC37BB3FCBDC75
-:1056F0005FC2D6FF13E0FCF5CA28876A510EA15C91
-:105700002AF7BDEEF68F308C0F9619EEDFFAC2FE47
-:1057100003288F2C268FD07F9AF9BD16CB2E7AB80E
-:1057200042E2FBEFBEEFFEE202818D73C4F0EB7E3E
-:10573000F6EA90D0FB06F97D2B25DA8F113E752E07
-:10574000B607524E8E989259CDEAF7960BB48FFA5F
-:10575000E1A5EBFE91DA8728DED1BBE0B52F5FCA69
-:10576000DA7FE2321F720EC704B68FB37FA25E7378
-:10577000B6EFCB97B2FA872ECB1F56DFAAC5F9BA80
-:10578000E8E4AA67BDE555486F08FF7FBC59FB20D8
-:105790001BEF08E424FCF8ACE0F01D41F890EEFBB0
-:1057A0007EF506EA85874D81FC51472A7E16437BAC
-:1057B000BCD214485F5CBA4048FBB3CC73E982DBCF
-:1057C000264F62FD258C901660DF0F55BEBDF55249
-:1057D00006EF553F90B6E1F3F45EA920593634BC8C
-:1057E000CEFBAB4CEFFB01BD189216E21D341E97A9
-:1057F000F0C58CB89B5E07F418396166F3B7AD95B8
-:10580000B8FF51D00CD2EFE4B002388FA1EADF34F8
-:1058100004FDE6407FB7847038FAF7D9AB75B73C22
-:1058200074E050E44412C791340576A19E917B8DBB
-:10583000EE9E7F83C4E34242DC2478148DC3A3C868
-:105840008699CDDF546FC3E3F403D069B7EF87BE09
-:10585000F0207CAD81C44AF45B58B9DC7FD812F1EA
-:10586000FA03F7D8FD3CE6F4E783AC71158026EA2D
-:10587000BF6A4C858AFD3757703D490783FCE32D8D
-:10588000CC6E8461F4BAADB6BCD88CF10D3FC6398C
-:10589000343BCE11E7FA53F819F2939D2913C9AEA0
-:1058A00019AA9F88E1D54742A55E3BC6D15F027A1F
-:1058B0005E861FC8EBF7F18D914547EF437A1D09CE
-:1058C000FE013DCFAED72EA7542D2B9ED2C3EA7337
-:1058D0007F3DFCF1F6215F97960DAEBF14DE1CBA3A
-:1058E000CAEC5FC95752698ADB25E21E7DC09693D8
-:1058F0004ABE9AC27D01D4A1BE0779FB30FB8EF16E
-:105900008C7042477F8A043C2EA4221FB8F0F3B665
-:10591000DDEED3B268EBF3298A830A7A8AFC766AD1
-:1059200021E31FE1FC76CEB3CF6EDFFE87DB5F2184
-:10593000FE2850893F049DF14F96719A24F394C438
-:105940009EB74AE65BF8F4FD514A66E393FFB2E581
-:105950008A5A9BD0D5628A2B923D92094740E6FD38
-:10596000DEE4C06FA5284E395AF8DF1F25FCCE387B
-:105970000C7E592E20F87DF81C0A7EC986270FF46C
-:105980004619E59ACEE52BC032DDAD97DC28737958
-:105990009167CB2780DBE26E7BEB7ABB9FD1CE2772
-:1059A0004F1EDD7C9C71D97C26C97C3D26CBC3ACC7
-:1059B000C7441B8E1B65BEDFA9D5093DCED6257712
-:1059C00008BA5A60C39192455BAFB8ED43D1D5C5D3
-:1059D000A39CC782C1759967AF4BC570F3986BCF15
-:1059E000A35382F9AFA35E3CC5F1F72CF7ACCB1DF6
-:1059F000367E3AFDCEBA6CF0ACCB2DF6BC463B9F62
-:105A0000C5767F23CDE78EC1755966CF67F970F3F0
-:105A100071D5BFD6AEBFD2AE4F76C71D726913DA4D
-:105A2000194D5262955C30381EABF71977BDB79BA4
-:105A3000CF34DAF56EC0F7420DDFFF58BDD5EE7AF0
-:105A400060459BD03FD08AB602B3634A5A2EA9B2B2
-:105A5000DBD551BBDA81FE6FB6F983DA055A8426AD
-:105A60002B4CF5D661BDC6457F74EADDEA85F76249
-:105A700007DE0D046FF5001CB7BBEB2D9027507FA0
-:105A8000E7C51D46E90FF2C5921D18E7CF834827E9
-:105A9000E679B4C9A947300FC0B264780CF309FCA9
-:105AA00086803EB66845EA1B582FD762F635AE5B56
-:105AB00055EA292C5B22249ACB299F80F205EA65BE
-:105AC00055F31B987F61C00E56D662721AEDF356DD
-:105AD0002169E1BEF85329F96599E4ABB6AA11FB37
-:105AE000CFD7B99E0E7DB46F3970DD13BA8EF21F19
-:105AF00072195CE88F6ACD80EBFED0A41EDC6FEFDC
-:105B00002D50484F66065629CA973BA5A081FDF542
-:105B1000147C9EE0DDDEC8F31BB67FE2F304EF7D6C
-:105B20000250DCF63E1FCF6FB8C7A76A4D1AF617B2
-:105B30001DF759CA87C8D1FCE5361C08DFDF1513ED
-:105B40007CF9A055DE2890F8EA41FBB6B542217DEC
-:105B5000797B6C5625F557A1929E7A5F625623E9B0
-:105B60001D1541F2D1E7870DB25BA3F314B0B01C51
-:105B7000331A51CF8CCC0D620E0CE417022617405D
-:105B8000641AA4B1EC83CECE12F68C7630BB249F7F
-:105B9000EC26B811EDDE0A8677B4232CF328DA253B
-:105BA00061B0FFA44326CEDB374102F47B38EB1B08
-:105BB000ED1C683FACDD154D8FB25EF7E8EA453A63
-:105BC00098DD3F7B14F53A47592F3DCA7ADDBCDE9C
-:105BD00088FE0E83DB7B2AFB0FEDB640A6DD1CF6AC
-:105BE000DAC3BE8CEF99F1B8CC67663CE4A4EC8DC7
-:105BF000878CD4DE89838C345F744A0CC0298D5C19
-:105C0000DFD13787FAAE8CBF266EB2F6ADE33E1D0C
-:105C100027B9366E157F4EB4DF4F5C69973F6D979D
-:105C200057AD34B3C8F7B13E2E874BD11F329CDF3E
-:105C300001B8FEF80683FD9C80C94BC3FB4F32F5CB
-:105C4000DE4C79A7CA5615F2EBF604F76BFA9119F8
-:105C5000910F0B81FCB03E487596A09C0033BA783A
-:105C6000CC20FFF8CC174CE4E7C3E324102A687D6E
-:105C70000CF2A767D049265DF833FC397F2E9D7C56
-:105C8000CCE78DC7FEA5E844E99046C53F4AE72822
-:105C9000EBA54759AF7B74F5FC1DC2E8EA758EB2DF
-:105CA0005E7A94F5BA79BDB6F90ADFCFE17B4D662D
-:105CB0000983FB12D5536EBB24E8FD7E69D8536E71
-:105CC0009FA3D0FEEF94FD73554FB99DC979CFF7CF
-:105CD00079612A6F6AEDAE625BD9A8F9E43FFF44AF
-:105CE0003E295547F04B578819765B065FA97A0025
-:105CF000DBE7CB3A60FE547E8CEF53EC69A6B3E051
-:105D0000F7119BFF77C93C7F73BBAC07D07EFC5B70
-:105D10009F67A38FC3EBCC7724781DF9FBA664EBB8
-:105D20005B43E57D54F3BC4C1982949759526D56F0
-:105D3000994C2EC92FF2385866BFD729C9A77D2E96
-:105D40007B58D6923CBE67F7B7A44026BD44667226
-:105D50000DF51E05123545144714C9DF278747D8AE
-:105D6000370A5D72AB7818B8ED3C56FAA40354FEBE
-:105D7000968F1B3480E46B04FAC898CE41AD670A55
-:105D8000EA69BA00D4DE10B8FF7C8186FB5E2CF095
-:105D900097EE7715F52B98F7C0B9D087E857EE2323
-:105DA0007FE75FBCDF11E00D607EEFC5144288B96C
-:105DB000F37B7DF114BD84B3E7CE49738137A1BF76
-:105DC00024C5D765D1207F288C8F925DD61ADBA0A1
-:105DD000BAD7F5FF7CC51EBF89A2B5DD2644D9B36D
-:105DE00070ADD9370C9D9FC3600CFA470A6F34FB26
-:105DF00086D94F07E29918AFCFC2076D4A328DFAA4
-:105E0000BB3529CCED7939457EC676216FD6E67251
-:105E100017FD162ADD0857A4DCB4D0DE6BCF170DB2
-:105E2000D45365D8DA2BCC60EDA45A2399458F184A
-:105E30006C2F9F74CF27A678F5A9E611E8BD7504ED
-:105E4000BDC7A718C96CFED0690AB76B7DC1ECDF6E
-:105E5000EF12AB4A9439E7E38DA9F9DCBECD850E8C
-:105E6000E1639C7C28DFA1F08557100FAD0557C476
-:105E7000879B2F68DEBCCB9B4473A6323C1C73B25D
-:105E8000C131DA7C10ADDA203A1CD097629CAE5159
-:105E90004F12C660BE07FFDB56BEAB1BF3407C371C
-:105EA000F0B8AC64EE06F4533B7A9364064F88B4C2
-:105EB0009E0BB8FE54CAF52193FD87F3882E185E19
-:105EC000AF9632CACB14AF3ED4DCB017303EEFC031
-:105ED000EFF8F132E7758958756D767C8CCE1EBE71
-:105EE0008FD10B4CC378948A4881CE068DCA5F6EE1
-:105EF0008853796B834ECF9686527A6EC1A6F39102
-:105F0000CF531D450C6F1DF147E39F6555EE43D9F7
-:105F100041FBFE758B504FDE3C50666620837B3321
-:105F200006BC991E71BB72D522B4DF3707C0F62BB1
-:105F30002C5A647ACAD7345762D9F6336C6EBB9E3A
-:105F4000EADF3711EC7310A6FA49D7BEF788E223CF
-:105F5000FEC6BD85B7379BB1BF806C97E1B645DE05
-:105F60003298084F40E5E5FDCA06EA9F44001BEF62
-:105F700027CAED7CBCA9DC8F0F65CB47C023F7EBAC
-:105F800083A273F9599647F92C8A61A0FB15EECBD1
-:105F9000B5E11E6D3F7292EF77C7B2EF97837C3306
-:105FA000C2BE66C331D2FA3374D87E88245838EE24
-:105FB000CF791CF1AF3DEE7DBE0F8717A5A2DFC2E2
-:105FC000F3230B94E4F791DE23665777112B476B8D
-:105FD000BB2D62DF518E7BAFA2D9F34E12FF3B780F
-:105FE00076F48EFFF279D7D11733290F2910E6FC0A
-:105FF000375A78FB50BF9A33D80F3C51356E387DF5
-:10600000AD2021A21236202FF26B82688C0D947382
-:10601000CD3C4F39A762BCA77EC428F67CF7691730
-:1060200079BEFFA9EBF4F38C79FCBBAD373AE51FE1
-:1060300067CE7394FD3AE59EBE4562295B87976BF8
-:1060400025D2EF5EAE7DEDBED9584E4814BF3DB3AC
-:10605000B2D9878C740CCCC81CF4872525DB9F6EC5
-:106060004E447CFE1CFFC9C67B09F73D269F8ED897
-:10607000E77F989C9888E79F8E5C366F22AEEB1185
-:106080001FE76FB03A493EFDCC071E79F0335BFE47
-:1060900018ED3B9AD10F794CE065A97DC7228BE2C0
-:1060A000835BDB3ECEF496AB390A6179AD90D51EA9
-:1060B00088F815C2C7074232E267F334ABF5D61849
-:1060C000E6BFE940FAAA1F12A497D5835529A2BEBC
-:1060D000C3E88FE2DC727F6136BDE367F67EEE8750
-:1060E000AB49DF5F5E9BEB4363DE5F33D3877ED4D8
-:1060F000AB6B2A7D60EBCB9A0B3E3121D0F9A91511
-:10610000B5FE5D88D715B2E9CB16D7BA3AE1F7EC00
-:106110005333190E11FE63F6B90780FE4277BC694E
-:10612000A69FDB3BF192E1ED05076EA7BCAC76E6DE
-:10613000F38807866D3A8F026A7FE1751177BF2178
-:10614000272E1CC17E5F5EF90F7C7F6674817EC541
-:10615000174F7CCE4771D915F91EFE5B5E2D79E095
-:106160004F2C0879CAD7D45E9D33ACFE91F467C832
-:1061700033CB3E8729921CDE7C5C20F99033A93F0B
-:106180008D799AF0B2045CFF73FCAF9790FF353ABB
-:10619000A15F477D017E13D21E73C9CF169B2E8748
-:1061A0001AFF393FD76BE5BC1A8A6FBF7742D071AF
-:1061B000BE425EFD349CAFAC984D386E4B9198C694
-:1061C000B8F79DC5DB555CEF4D251F4E0FF4C57824
-:1061D000BC5FB7B459C8FE43B54B9BFC1C41E6FB02
-:1061E000B57E1E6F69B5966B25B88C07B44A9C7F47
-:1061F000A010B29E3365F4BFD68F7EFB98053CBEDF
-:106200009E20BDBA445D4D79B8F2F8E1E3B59978C6
-:1062100093ED386066BD276D7A2CA9D845FDBE7711
-:10622000E1F0FD3A7879DF10A1D7D627B0BE0A6C2D
-:106230003E0CFF5B4A791E6E4BD9338467C9AC2490
-:106240007DD6A7A54CACB7A56C35D1652BAB93CF4C
-:1062500086CEADEEA2739A5BFEC0E3134FB61F6805
-:1062600046FD614BCFCD807995C1781A507E6C99EF
-:106270007E938A78D8B213A017E958EE22A75CC89B
-:10628000F687873448334B0A426526A05CC8D3F8AA
-:1062900099CA7DF12AC075DB520E06B2667E3AD5E8
-:1062A00088A19F2D711EFF0E969A354508F73891EB
-:1062B000C4800EC90E2CB7D4CA348F368DE303EDDB
-:1062C000AE734E7E17E6C19470BBAB04FDFBAC7F92
-:1062D000E58B7CDEFA8E12F2136DC97DD9447DD731
-:1062E000FA04185381EBB5A427C88C8EB0FF7A2D21
-:1062F000EBBA6F1593DFF2BBE2F7B2A60B48A79992
-:10630000F879CF0757E2BC5B668AB02B8BBEB1D75A
-:10631000CFE3756963F955C559C679CEAF7BF204F1
-:10632000F4F715827BA8FA83F564F2EBA3E1B1845C
-:10633000CDA3A086FB4B21E31C6B0C9264DF8E0582
-:10634000AB11F9D139BF3AA13AF1CB247B4A91156F
-:10635000944F37D4795627CF7375852D9041BFF66A
-:10636000D76CBE371FF401E2EDF2B38FBC80F95257
-:10637000BE0ABF46F955D0F902E66FDEC8D4312C0B
-:10638000DF7C7CBA82F93F2F8F97303706F9278A56
-:1063900074F81688947FF6161C8DCE76D1F9297B79
-:1063A000DF41C98A72A43997CF4B0EB7F54A515CC9
-:1063B00077D9EA73F2F74861E279ED1066EF55CAD2
-:1063C0003E6A24F9D7C1F3859CFCC8CF767AF3875F
-:1063D0003EB7C35BBE09968F41BEB989297469D6A1
-:1063E000EFCDEEBC2F36FE313FD70F3E07A936DC8E
-:1063F0007FDAEDFC9875DF9FAE205DDF3C5B2BC242
-:106400007318CE3C7EEFE776E849C6A7BA8BFFD774
-:10641000C4D2949F9C39BFB7F62CEA4EB2F26BBA45
-:106420009CE276B6779EEDBEDEA598EF656DF3D95A
-:106430007A8337CF71CDEE4A13F3C518F6F47C6F2B
-:106440007B82FF1F3ABCF31D091F99F377F4C1A1AA
-:10645000E6A3EC16B2E6FB85546FBE54B3CAE38DD7
-:1064600066B30C8185E79F8FB6AA5274BED96AF2D3
-:106470006BCD318A4F52FCAF9E110EC6F7CA559DA7
-:10648000FA792F30290D740E21350FF5A33FB7DFB0
-:10649000F92AE7C3BF74BF0B8780779DDAA7207FF7
-:1064A000AE973B6B84E2C1F301019F654E60F8F645
-:1064B000EF5DD63D013CF53A4659EF201E811E4561
-:1064C000BD1A7198FE4EDBFBD6BF3DF12F0AEEDF01
-:1064D0006F3D7E6229CAB95BFE550295D53BFD44EE
-:1064E00004BA69DF492B2897D7EC9168FD41EE9EED
-:1064F0007BB527DFBE99E67FCB5311DA1FD63CE38D
-:106500004FD7B2F66BBEF7DA0C607C7BBAA9FF8579
-:106510000988BFC7059EC760F5CDB89ABD5F23C384
-:10652000F5D9F2106E50395F9DFA416825EEEFC241
-:10653000EE9EEBA8DFAE6B7D7E97FC5DA9727B9A29
-:10654000D533F1BBF54D213D55E0F065CBCB3BF5A7
-:106550004DEE4759B3D797C63CC535BB772A495648
-:106560006FFDEEB789BE173DF56414F1B07EAFF74D
-:106570003CC22D4FFDA1ED92723AEFD45F8BF24FEA
-:106580003A4BE533A6DACFF3E0B93FE656E2585688
-:10659000EF3B6F5EF16BF6FD645C82001329277B95
-:1065A000FF53F9572C27C32926CA58FFBE57DD7C55
-:1065B000B87EF76B74EE481399027B299E87C8F862
-:1065C0009E519FE9B90ACAC3F55D9BDE4679B97E43
-:1065D000CF5BBF42BA5B0FF2AB6E7E3E89FF18778E
-:1065E0007E3C6B93EAF5D39D814373C901B03B3F79
-:1065F000ABBDE8C4B31CFEBEE5C9330FA31E71EAF0
-:1066000099FF7A18EF6758FBC7FF7918F35AE147EB
-:10661000010DE5D6FAC77F1E0517FE1FB5E5C3E9D4
-:106620006F7EE3EB0F303C9CFEA59FB076FAB93746
-:1066300027E13D1DA79FFEDF31A87F6C7C6EF158DE
-:10664000A4B38DDF5D3476B873A048B769BF7B7D96
-:10665000D3FC7E83BD026E8200CFDACF8C7581437E
-:10666000FD0AEABDEF0AD0BF3997BDEFFA8382FA7F
-:10667000CB0B26F4239EF6EF79ED85BB58F92DB6AA
-:106680004EFE2CEBC4E63F41A4FD8DB10F7BDEBA7C
-:10669000E7EAAB2E2BC7A7CFC0EED7433FED1BE7F2
-:1066A000ADEF31B6BEE583EB9BF9FD0C9C5510FFB9
-:1066B000EB9F60EB3903D795ADE78CF3D7F32DFC57
-:1066C000C7FCF3D773BFEAF5C79D81B58F3C801F28
-:1066D000F7E467B56F9DF55CF7DD4F0EAB973BF2C6
-:1066E00061243CD3F95E06D75754F3672AF2ED33A1
-:1066F000DFFAFA0331BECEB50C31A79F3C33090F48
-:106700006BFCD6D77F1DE2A1FF39BF867AD49AE70A
-:106710007E417C77FABB2FD1B91EF61715D87E774C
-:106720001A06FE8E022BDF2AF0C23ABDFF8A5FB145
-:106730007ED7B12E2C83D6EF8A5F95E3FAA9FDB4FC
-:106740001EE965353ACADF7401CDFBD634E78F5BAD
-:10675000D33D2BD09F9D89F748C0C9271C5C57F4B7
-:1067600097DEBAE7C415487F43ADA7337F0DE73FF7
-:106770008F7D7FD4CBBF43F2ABBDBEA777BEA7A0B2
-:106780007ED5FDAF8A26323BFFB4AF5F198FFBCDBC
-:10679000D39286E78D33D77D10FF4D59CF1D673ECD
-:1067A00033E9C31FC81EBF76F03412BF8F3CBF0F42
-:1067B00087BF33F63E9C89C75367B3EF075302DCAC
-:1067C0009EBB153A6B50C5CCDCCF7C90B226140D25
-:1067D000C2DBD625919C3FB59BFB6932E5C5AD4335
-:1067E000D867339D71F6F6CC40B9766ADF0F6CBA84
-:1067F000E4747FEB132714CBDE1FD22EFCAE1FC236
-:10680000DF7DA9DDDFFA67B3F7B7FE89B7B3F677A7
-:106810005236AF45F84FF6FA282FE9649794D5CE53
-:106820009D1AF079F4AEB6C8DC5772583B291AA409
-:10683000BCABE626F317E827B58EFA6C3F80F15B18
-:10684000CCB76A8E04E99C7B73F426BA2FC9E9AFF2
-:1068500025034F723C41F6931C4B94F31858DA63AE
-:10686000C7F81841B8E106D92A44BDFF70D19B3260
-:10687000F67B04F548975D7F4486D6FC723C172171
-:10688000188D90C5BF91D17F628104BADB4FD83D8E
-:106890004EFC3D6BEF3F26A511B5F590EAA67301BE
-:1068A00085D0F55896FE1E6AD0C97E2E4A5C4FFEF2
-:1068B0001F7F2A65A2BE56B8512B16F5A1C79D9819
-:1068C000F2C6AFC733CAFF3D8E73D047FA20EC7EC5
-:1068D000FCF1C7C7F02D05F5F217F0C9E4DFE57547
-:1068E0007A21961FB2E7CD7880CE314EB41232CAEB
-:1068F0003921B64C46FD62712A21AF76ADE7E298A8
-:10690000301EF7D3F410F7407D3FC0F7CFC6C66BFB
-:10691000288FFDC12F8A44D70F063E5E887C7620E3
-:10692000775E18FD6B3DEBE61E9AC6E09C10960064
-:106930004DCEFDE1E1CF6D3E6CFB1776D9F70F3DF3
-:106940006AE7977FDDC6DBEE86527A3EDE60D0F7DF
-:10695000271A2AA8DCD55043CF671A12F43E7A577B
-:106960003089F4B9A76125BD9F006F0BB8FEDF6BBE
-:106970004852F9D1402EC13FF96E1093ECFD62C42C
-:10698000477870DE0E3C69DBEEFE7EE0C72DC8174F
-:106990000378CCC0F7E5D02BA8E8BF8A093AAE7BD4
-:1069A0007D40E779AE19F89DE4EF17302E577F3719
-:1069B000CF877858F09E77B8DF96FFDFB1F9F4DD26
-:1069C00068F2C9007BBE53B3A294F421D0CA906E82
-:1069D0001E1612478C22C2B3E7DCC9FABCE4770268
-:1069E0002EFFF0A40E6ED7EF08D8F26D2388486F03
-:1069F0001353A023BD39F3DE57A917A25CDC270887
-:106A0000B4DE486FA52E7A1BA0DF809D971CCFBEF9
-:106A10008F0FD22FE7FFF825A5F754235E3688E4C1
-:106A20000769C64FAE761FD874C4EC16D1427AAE51
-:106A300013C99F3BF9F8096112834FD7BE15C07B7C
-:106A4000BBE293C0F637750590BE1EACE3FEC5AF42
-:106A50001DE7E798CE6C2C5E368DD55FCAF083C1FA
-:106A6000A8BC25251EBFA5737EE16B6A22471BC605
-:106A7000BF9599F776FFE42FBD9FC3C699703CA4DC
-:106A8000E379987B26FFA84761E5F17D02F993C67B
-:106A90008753D3703D2BFFDF37C7F5B9D6E181753A
-:106AA000A9C9A837B64DFEB6807C30FEEC8F05DC58
-:106AB000474AB4E49BB83E1364FB9CB09C9A87762B
-:106AC000C1F57989DFE1FB4461FA53484F676A36C3
-:106AD000FE1BF6EFC421EBEBF5DC692EF990799EF5
-:106AE000E2A1D4F0FE4C67FE0FE1FC87A9E7CCDF02
-:106AF00059BF3335B1B5281733F199D96FDE9215E7
-:106B0000C38EFF907D8F189BBF3FE8926B85A93E97
-:106B100019DB39ED878ABB66CE77C04F34CA386D32
-:106B2000970FF2912E9EFEBF49DF3902483A0909BC
-:106B3000FD53FB02C97108CF5C4851994947CA67A8
-:106B4000377239FF3E30E6EBE388EFE47411E57D00
-:106B50008C72BC5648242A719F334423DB3E303D5F
-:106B6000C8E97E01A4C83F2A86EE1E3ECE5FE88DAE
-:106B7000F36F059A0458DDAA1DFF0059437FD841E1
-:106B800098857EC8FC20E7F74A99DB97B30FEA3B6C
-:106B900025EEB79296455CF8B3FD763EDE3583FB75
-:106BA0006ED0743CF735B34770F1EB7BA1E4C220A3
-:106BB000ABAFC4B93FD2174BD279CBC55258247F63
-:106BC0006E2797FFF590502FE47119C079EB1017DD
-:106BD00071BF7F68233FDFAE6B2182FBA1984EE53A
-:106BE0007A5B4FF9B14D473FB0E5FEF76D7AF92E6C
-:106BF000CA7DA49B3EF3400E83EB3BB6FC7FDA9646
-:106C0000FF4FD9F27FCEB13EF86639C96303F39ED8
-:106C1000BFBC3DDE84D37CB2C1A47ABB1AEAE8B91A
-:106C20003F77ACB897D57B74A3B80BF9F9516DECED
-:106C30009578DF55DA140D81357EC8DABE28CAE0B2
-:106C4000DFA90A143F7BB82145ED76AA7A938AF131
-:106C500014662D5B4806F5BD14F6A8FC6DBF56C33F
-:106C6000EA7DAD33EF4A8CC3DD5B23533B878FF462
-:106C7000391BB03944F3FC4164ABBC826E750ADA4F
-:106C8000E91B45EAE72B81CFA88BD873E2C4A3EABE
-:106C9000C7755C8C13668A7D5FC4908CF3A8E8EBA3
-:106CA000B3B05CF27A98F2B5E7BED2074FB3725137
-:106CB0005D84CA132D2F5F4CDFD367753238269E53
-:106CC000E2DFABF37E6775B1FA391BA2D45FD5EB77
-:106CD0007D02D2B3AFDC7BFE6A87EF97FB236CFCAF
-:106CE000D8A1848078DB27688B3025C4FA143F7FD5
-:106CF00033F62054E1FB787409ADC3F66011D1CFAF
-:106D0000D75A8EC66F463C6D8CB5A099B37FE3060B
-:106D10003A9FE0DFB891EB4129EEFF9E78C701E191
-:106D2000732EF950D82267F5DB6D0FFA799C64E376
-:106D30008AC4340EDE8130EA7B25DC5F59D45AEDFB
-:106D4000C96B72E2231F08C9ED41B29B789C44D6FF
-:106D500052F4FE32097545F6FA4E91EB4989DE8010
-:106D6000DB0FA3DFC1EF67CB8463575026385AACE3
-:106D7000EA3A9417DBE6287200E19866DFCF62C733
-:106D80002107F63121B9CB2DD7648DC33591A132BE
-:106D9000847077F77EAA8BF5F37ECAD9C7CC20E939
-:106DA00049F788C41F5BCBF939C0FDC63BDD78CFFE
-:106DB00085C34FAD8648FCBB5D16D202EB677B797D
-:106DC00071EE85483F31DCBD69BE2AE2B944F6F177
-:106DD0001C0E30F7A15FDC8F7E71B6DE25C743271E
-:106DE00044F2FF79F3BF8B2CEFFA8BF5DE73771348
-:106DF00099D2E3CE57064634037446FB6BF5BEFFCB
-:106E0000407E5819223A03CB8C568EC1F445FB4F75
-:106E1000AAA5F3CF2519E70C1EB0EDF787ED738413
-:106E200070F63640B9F5807DFEFA81B5625067781C
-:106E300079DE3A4AFBE6C4FAEE4A0ACC687E4F7E17
-:106E4000B5FF6EAD09F7D7A294374FA832232FA80C
-:106E5000E4CFCCB33E1EF4DAA9FB4E060DBC0F2FD7
-:106E60007D4C32509FFDF25DB349FE596BB8DE9206
-:106E7000AECB7B00CFBBE40B60E07BA75FC77E7D22
-:106E80002798477C939ECFBEE730B912E95A5287C4
-:106E9000EB05395A530CCF43DF09DFC6FEEBF8FA96
-:106EA000571602DDAF5318033AE7CC9E9B2F40FEE6
-:106EB000DF28624C1CCEA19C4739AEF6BE88EF732A
-:106EC000AF14E9FE9CA216EB429CE7BE4BC68F476F
-:106ED000FAD81AE6E75E9A851468086F01E7879D7D
-:106EE000916ECA07DD562342135214C3A581FDAC2F
-:106EF0000EEEA23C1684770ED11DE95D18A3407EEC
-:106F0000B46E08F27DE7AC7521FA95A3A1BEAEFD83
-:106F1000AC9F70BB62EC62FDECACF4DE533735C461
-:106F2000F7BB404870E2FB81107B9A5B81F216D977
-:106F30005C88BF195F5940FB8246769513DF8FEE60
-:106F40005B22164DE7CF6217FFEEB2E56CDACE5B3F
-:106F500078D8DE3F1C7DE301DB6ED86AEF1B45E687
-:106F6000554D0AD26D1DCC443C95ACED125667B31D
-:106F7000EF3BBC7235935F2667F24BCA7B4E75427E
-:106F80005DB1E77BC4B8C8F39D4231B8EE6CFF46F3
-:106F90003CB707CA24D4FB6643C274CB95A1F6FF65
-:106FA000FCA03923F421F49F68289142FD3353FF5C
-:106FB000BED45E97EB0289F9B81ED14B56521ECF54
-:106FC000BA40E252EA5F4E0B284F1760BB58567822
-:106FD00029F96B14F0567F18784136E83CD79D921A
-:106FE000739FADF73C1764DC5F9B793FEDC2FFBB3D
-:106FF0009BEEA76D1598A287E51CFB7E5A3FBF9FAD
-:10700000B635C2EDAE563B8FEA561B0FD787F87DDB
-:10701000AF6B6D3A5D18CA7EFF91E3F74AA16CC071
-:107020007A63B3DF3B861A15F6B77042F6EFA91004
-:107030008F3B2E9C3CFC381B701CD6CFDCA0B92E9D
-:10704000E4F2AFCC0E99EBDDE5DB43767E919C203C
-:10705000BDD294F97E5814343786E6B8F06B3FF30E
-:107060009694D379BE33F6793ED66E87407895B440
-:10707000D1E0DDD1FF5B05FD1E92833F677A5F960D
-:10708000F5782F18B5C49CC17894A31FED0E717BC1
-:1070900092D1DB263E8F34E5418741BF07EF8198CF
-:1070A00080F770EBE85738FEF0BFA0BCBDACB70668
-:1070B000F5A7753F94E87EBBF3F0B596D19D2B1FE5
-:1070C000C5793FFEFD0964074F9692F7875CF6F19C
-:1070D000F8BA7E05E91DE1AFE6F0F3FC69217D21F8
-:1070E000B70780E238AD37C73DF98499F6481EDE10
-:1070F0007340724521BD2E132EC79E70CA99E711A9
-:107100000EDB74847FFA18BC271CB8322B9B12F25A
-:10711000D71C48D2731EE8F464764B17CE83F19FD8
-:107120008E703685265D8AF3F82BE2ED47A1397F14
-:107130007B7873E8B82879F9001D67BBFFFAFE5029
-:1071400094E46DFDF108E9FDD17D5F20BA96185DEC
-:10715000076283F932F560E7D187A10BF5DEA264FF
-:10716000039D0B3DC3E818FB95347E8E55062D819B
-:10717000711B29C6F9C327976AA2867159CB8F79EB
-:1071800007563118286BD11FE986B73C9C7CD38DFC
-:10719000C73B8FDF43F2F6BA40F224AEE79D259657
-:1071A0001F353B971C3EE596C3028475E4BF856797
-:1071B000F97E5999D465A487458CD311EF8B214969
-:1071C000E58F8345CF2590A6E7DFE19546A4C7D993
-:1071D000E716BAAF15DDE71606F2B9CB9D7C0E1E99
-:1071E000A72AB0E9106C3BF5F995CB1B17B3F1D981
-:1071F000E29B188FFAEA4A9ECFE39F27D3F9D58204
-:10720000BE1B6A314E042BB85EE6E441E4D57AF544
-:10721000B4F3EEB73AFEBBE3D82EF39C9CA3AF6564
-:10722000EE5BCE33535FCB0B673F3F39D4BE931930
-:1072300057A8C77F72FBD5B6AB1339EE7BE3339FFC
-:10724000871BFA5B0EB8F2CC8FE0FD4659F7011EA2
-:10725000EF8DEEFB5DED8A72BA5FCEC094C9DE861B
-:10726000EE85AF4F1DB483130B729F477F74A23A14
-:107270007796C4F0BE34FE6ECB817C806566CFC24B
-:10728000D75DF3ECD518B459F48481F14CDF07EEE7
-:10729000FDF72D85CB97567BBC881D1F6B172D3FA7
-:1072A000F1ABED7FFB7D21B7D31DFB3EDB7C5B08A3
-:1072B0005F7D61A487A1E6FB0F61BE9F8E5969D0F7
-:1072C0007DF9CDF67DF9CD139DFC2D43437DF2A6CE
-:1072D000702EBFAF205C42F1D5E69EF9E44F2E3808
-:1072E000E4237FFA981549C172ED8BF73670FFEBF6
-:1072F00057987E87F9205B985E87E57D957355B436
-:10730000176E8FCCA278EDE606C3932FE23CF13ED8
-:10731000BAA4CBBFD79CA8D230DEDB523B4B45BBD7
-:1073200043FA443995E50B677556317EFECCD61984
-:107330005714605CA28CDF47763D2B3796303B3A82
-:10734000CCF7D9C3C6EB61C453555877E887D6D17B
-:10735000B72269FA502EC4B52ACC9571DE834D5FF1
-:10736000EC3DE9D76F29C99BC36CFE87ED7BB1DA91
-:107370009554E986323C17CF040EFA8955EE27441E
-:107380003A68993D08F7061BBF97D8E33281243E3F
-:10739000ED5A3F25CED7AF5D84BA6CEB737798EB8F
-:1073A000372D9AA90D4B479AFC81E7FED0F218CFF2
-:1073B000CF8F313A72F1F3F9F4CEF9A93C9C680908
-:1073C00017A05C84D214CD3F4CF287DA4983F7587A
-:1073D000C6C36607D63B9A6BEB2F853C0F9ABDDF81
-:1073E0009243F34B917C77F4C17699EB73A3D50765
-:1073F000F3966C247DF01DC65A649F7D6223C9ED0F
-:107400008D3E95EEFFDBB740A67856740A5CEFB66A
-:107410005BA4887DFF7F84FBE5F17712D2D3B8DED1
-:1074200083E73CA221A0732EFD13797E693BECAC6F
-:107430009942F04DD5DCFB59E544EE67D85615ACC2
-:1074400073FB1B16E6F278D98BB995BFC3F9978504
-:10745000D355C89A176BD087F93450C5CF8F09859B
-:10746000FC9C8D0F0C95F36BB586F7860A90A4F300
-:107470006743AE1F78EF177D5C4E3705116F31EE15
-:10748000D789EC1028694FEA32BBF1EC4E7BEEF263
-:107490001F223D32B967207FF7CC0D92BDF76E8F6A
-:1074A00042F6E7BB37C3AFD19FF4AE2F072CB654DB
-:1074B0003F12C55F3FC5E6DBCF987517E67F69FCD5
-:1074C000FBCCAD02F99B7EF4417002D2BB110511D9
-:1074D0007FCF6229D32778922084303E1B5D04DD64
-:1074E0009763FB9E30E1CF17FFC9C2D767D3FE1366
-:1074F000122BF0BC96F820CEFF9938E461FBD9FF3F
-:107500005B25A1FFCAD187BEAA258F22DEE6815561
-:10751000D7C3DA6F53387F6DCB53D218A79C552051
-:10752000921E02BE507A2AFBBEF4E0EBD598DFB97A
-:10753000B46226D6C4F169BD4BB4E4719C77B5B68C
-:10754000AC3A97D52F3FA693FCBD227EDB012CCF12
-:107550003DCECB3E3FD7E3518F719F0F58FAFE24AB
-:107560009AD79B61AECFB6C4CD5E531896AF32EEBC
-:10757000E5F59E2F70E8806DEB3AE6A5D3BF75A2C6
-:107580008BA44F1CF43F4185619F3F71E8C1143EBD
-:107590000C3DEC09F37DA11DF3CD6283F966EDB6D8
-:1075A000FE36DA7CB34C7ECA5B22D33ABCC3F42DE0
-:1075B000BCCFE37C3EB98DEEFFCCE42707CECDE512
-:1075C000793194C30EDF68F3EE26B9ECBF41A1FB1D
-:1075D0004C1D3E72F8E7D29C013EBA0FE5C58AB059
-:1075E000BE98A76898E0E693AB47E0ABA5D07F20B4
-:1075F000C6CA4B65B07298083A3CFFB725935C7CCD
-:107600009289CFA50B0478D5230779D9856F6DE0D2
-:107610001EE02C76F250EB7254E6E71E1C3EC5DFEE
-:1076200063C1F3631DA201B81FB5E7AE36226CDD5E
-:10763000E4DADCB5C80F5B84440AF92132EF54E880
-:107640002686F777C7302D12FD87FAEAA788DF5F15
-:1076500009915DB66DEE1A8A4BBD7B737232EE2FC7
-:107660009B18DE5FA5FD3C3D56A45CDBBEB13C6FC4
-:10767000428FF36732CEDF83FD3D6D974DBB5E1FBA
-:10768000D563EBEB919B3F8D723EF86994EF539B72
-:10769000944E15E9A1BF48D5B2E52BA722BCFEE563
-:1076A0007E28C7FB18D968941FD0AA4A353BC95910
-:1076B000C2E5C4E5534A77B9CF5739EDEE6DE822FC
-:1076C000BD6653C35E7AE6D7A601F3E882A5968E1F
-:1076D000FA87FAC74502EEC770118FCBE3FB4697D6
-:1076E0005EF7695BBEAB785F101B4F6DB274F7FD40
-:1076F000B4AA2864BD47E84894FB89D526A0EFEAE0
-:10770000BE7FA6FC85FC1243F82C969B3AE9F765F0
-:1077100002DDFC7DACC4146E74F51BABEDF2ECA382
-:10772000AAD82793DD540F9A8546A0DC578DFEB961
-:107730008EE5C14ECC6BCEA437FC7BD54537EA1F16
-:10774000AF26FD098E72FDB5BA58253A6FAD577652
-:10775000A2FFEFF7B12ACA67EF88089EFC02E7890B
-:10776000F177A611923FCDF2F338BC358DC7E1B168
-:107770008C71787C621C1E9F1887C7EF1887C7F230
-:10778000B71B4C2A633C1ECB188FC732C6E1B18CA5
-:10779000F1777CEE6DA8A3E70F1B52F4FDD9867A32
-:1077A0002A5F6ECB5728E5BF07D6F105C5C4FCA9F3
-:1077B0006E7B7DF69BCBEB7E86FE42881AB8AF07C8
-:1077C0000E35BDF2EF7699EEC98E17E7A3FF126270
-:1077D0002260DCA12DBE9DE9A283F30BC8F7824E87
-:1077E0007177AB0EF31EBFB1ADF70A99E91F25F112
-:1077F000DBAAF258F9C96D2FB7619EE9057AE3CA91
-:107800009DAEB21E99B5E6696DB03CB96CA71C641B
-:10781000DF9F89FCB20DE54520C6F5C367B7FD9A29
-:10782000F4C3EE62A600A1BC2B52D248EF37E23A75
-:107830004DC579F07CEEBF83E638E6F94DD6955913
-:10784000C8A7AC7E37E78F51D6C760CD9CF3DB0D60
-:10785000574F2C1F553D3AA73B643DF65D18A69F38
-:107860005668D67A19EC5B7C7C1FB60AB89FB8C301
-:10787000C7E54347803FA7E438F90D55CDD102CC89
-:10788000FBE17CDC11E0F713F44F17E9777BA05E96
-:10789000F87BECE7F3E341C3FCC859D38BF3D14E3B
-:1078A000F8854D0F532747F8FEFE8F2AEDEF1F9FF7
-:1078B000FC644B1E2B4FFD17C3C0FD7A0B1841947F
-:1078C00027D6562E4FBE553E256F19AB7EF19CEF45
-:1078D000E6A17E3CCF964F69DB8E696CBD6932DADA
-:1078E00011EFBEC4E5E31BB67CD9E9EB4DD17ACEEE
-:1078F00009D3790B804ED25F1AE332E58989E3F828
-:1079000053F1699FA6FB335B15BAAF49F9C33C95A8
-:10791000FCAEEFFBEDFB8A7B49AF5102492D97BDD1
-:10792000EFB444F253346BC134DE9BB5253C8B7EFF
-:10793000BFC12A93296EB6A58CC77F42916BE85EC2
-:10794000ACAFF404A87E6B58A57CE174D99E835536
-:10795000317C8A1AEA07697339DD636969A246795D
-:10796000C7EC5FF47D6D8CFC4174FE18BFAFE5F190
-:107970000ADFD843546EFEA446FD839DDF4F2A9A4A
-:1079800088BF2791E8F1DE4BDBFF938FA1BF640D29
-:107990003FBF32435BDEF31CFBDE62AA8962C60F87
-:1079A000ADDA3BFB42585E05144F0D4D7FBD298477
-:1079B000F56FD40C9EAFC5CF4B807D0F724BD98A2B
-:1079C0009EFFC0FE578660AA81F5AB55E4576881DB
-:1079D00017F0DEAA428288BDCF9D25A0DED65A4B85
-:1079E000D77332F8BCE70C5AF2AE54916EA4A57965
-:1079F000344E2B982AD6B76A65DA3F0BC36A37FA3A
-:107A0000170A6DFF84230FF253AEF306EC7FE3D722
-:107A1000CA9EF308636FF4960B32EEE12DB7E927A7
-:107A2000136F99F3CC8F3D938BF0E4AFA59313E7DD
-:107A3000C17F6F6CD6329CD7386D9FB0B39C4C1F02
-:107A40004DC77BC821D5E8CED7F873E19D51D6D27A
-:107A50008BF4304397416778F918F43761FF5B6C1A
-:107A6000FAEF28F2EEE3BFB0ED1FC6A76BA37330A9
-:107A7000EE2182E5EA1FE322960B9E291D799EF2F4
-:107A8000D4CEF19EFAD376147BBE5F98BEC8F3FDC8
-:107A9000E2DDB33CE5E95D9778EA7F6C6F95A73C42
-:107AA000B3FB4A4FFDD907977BCA737A3FEDA93FD5
-:107AB000EF95D59EEFF3FBD678BE5FFADB0D9EF215
-:107AC00065FD7779EA3BFA7FE6BE795394CBA30F45
-:107AD000ABF7E3EF03B9CF1D67DA15E7DDAFF3C707
-:107AE000661DE38410E5F7E9CAB8BFB3F2862F70CC
-:107AF000FB4C5D68E8286F5645B97C5D9F67DE8E5C
-:107B0000F2B532AAD23E2187793D397C05E923932B
-:107B1000763039359BECB681EF18AFEE68B016962B
-:107B2000B8FC5A01AD13304FAC325A43F70A3AED64
-:107B300065CD04CC9F5B15D5B91EC4AC5EBA2F4091
-:107B400067ED5DF36276225D31D1CFEC48D4FF075B
-:107B5000EC443987E2C3CC4E243BD20872BB11CE31
-:107B60004AF4DDF88A40F7F8333B90ECC867C2CCA2
-:107B70008E9C89765BDF169443FD3F9529DEC8FE17
-:107B8000C84E2C6776E2E65CB7BFBCAF089F69D0F1
-:107B9000C6E3B347E916C71691DDF8CF48CF9FD9A2
-:107BA000F8521DF63BBD9CDFBFD731A6368EFA7466
-:107BB000475117F1497F91CCF7213951EAF6031E5D
-:107BC000B0F7AB90FA2DB257D93A905C76D6618B6C
-:107BD000D097C67B0EAD2F04C92F3EE937FEA3C850
-:107BE0006F6AB13A01F3048DFD8A89E3DD6BE3B975
-:107BF000589B59853F0759125FB60F9F17E84C1FD6
-:107C000061CFD2D27BF6E1F37B51327AE122E3E914
-:107C10002A9431EA42EEDF966728E92601FDD20C6C
-:107C20008E2CF689F394A23BF8BD4025F21B487FC9
-:107C3000681D9C6353A8CC5329BE1C40BA10E84968
-:107C4000F4149043B4BF04F0B02A962B843486C455
-:107C5000507FC5BCD1CABC1D44078E5E8BFA6E92A4
-:107C6000DBD10790DE62B5DEF50FA9DF263CB5D883
-:107C7000E7A23B72F543556CDC8E82E23CF4EDA248
-:107C8000DF65994BFE1CB4F7DD477344474F20F97D
-:107C9000B30073190A06F522C60F3BC429086F8288
-:107CA000E2F0814312D9FD81BB3BE97758039AA5E5
-:107CB00003E9FF968EFD5617AF243FE1FFC466919E
-:107CC0001E1CA8FF5156BC05FA2430670F8DCFE863
-:107CD000050F903E0063823AEEB3F5B1A0B9338B45
-:107CE0007D5017B1ED9F498EDF3341E7625BD12FA5
-:107CF00017C6AD4D15319FE7F69F1678EC9ADB0B52
-:107D0000B81F73A8F103CC1E4DBAE0DBC4FA4539A5
-:107D1000DE7A76590DDDBB8ADB4C399E1B2DDB49A3
-:107D2000FEFCB3CD3AE67DD5D9784D61320FC3DF85
-:107D3000240516ED447992C7F42386D24ADBFFE28C
-:107D4000F86926E6F0F8BF6181C4FD773E67DF126F
-:107D5000CFE17D353AE8CA5CFB2A005281F9BEC604
-:107D6000FEAF07CF0F4EE970ED7380FB81B73C6D1E
-:107D700087B77C61DA5B665AF4CBA807AC00E0FEFB
-:107D80008FDDDEEF61307D186F19EFDCB39FE0E728
-:107D900009550601D2775957BAE76B6C7E09E73E61
-:107DA000CC8C7BF5A7EF4993FE7295FDBB1F99F72D
-:107DB000BD8FC7DF019941F3F2ECA3B37C12F92523
-:107DC000D09F64B8FC49259AEEB1AB1CBF50A65CAD
-:107DD0000F1EBF07D817B2EB937EBC37552B43FF5E
-:107DE000435BE1977E73A27CD00FD326A7DE3C4194
-:107DF0007E4EA67FC5B89F04FDD7B7FFF48EFF3E29
-:107E0000E1F267BE1B4DCE46BFC7FD93797BE75EAF
-:107E100055E7DCDF3B35F2F382CEE148BAE0B8B398
-:107E2000D4FA385757D2E3D08FE4F8611C7FC3F5FA
-:107E30007926E9E75B8CA3A9FDACDFAA5FFA01FB19
-:107E4000592C1D3AD880F26EA24C7925DABCB58F38
-:107E500004D1EF89DF59B9AA481F4BFCF1A28FFC6E
-:107E60000EED36DF3BE7571DBF4D2287F347AD6D63
-:107E70000FB09906ED731B41D4932FDECDD6D0B34E
-:107E80001F72BFA1E31F9CDEE5FD7E111E0527FFCB
-:107E9000E84ECA8332E6F33CA8312BD3FB709D3FFA
-:107EA00066AF33C6B72AE70EC659C7AE4AEF433DA1
-:107EB00074869DCF54F6E2F3F493BF20154A485FD1
-:107EC00017611E136B671C903DE746C68040F94062
-:107ED000638E49469AF533E359EFF73270958B106C
-:107EE0003E6F39337EC5D4ADB76F10F0F7535302F0
-:107EF000CAB3ADAB988DC0CAEB72EC3CA40BE002E8
-:107F0000A4DBC552D8C0FBF536FC5CA23C64FF89FB
-:107F100069BFC0382ABCC4F32EB5293C2EABFD4442
-:107F2000329804042D0433678607E35D5F3D67E004
-:107F30005DFB037EB4C7D9BAE33EF404B3FB4B7CCC
-:107F400068C76B54EE62763F969F61763F3EF7308E
-:107F5000BB1FDF7F8FD9FD58DECBEC7E7CFE90D936
-:107F6000FDF8FE5966F763F9C5DCCA2D397330BEDA
-:107F7000554AF4149CB987F21EDB559F86F4932969
-:107F8000CF2A2B6F575730FC6E0E2FA6784BD56239
-:107F90009E77BF256731D9D303FEBC0C7FE8A07F55
-:107FA000AF4F70FC7B78043A6EDBB3037ED2A44102
-:107FB000F71B8CDC8FE9F4437ED6F3FAB1FDAD6F8D
-:107FC0007DE1575F6F669FD6CDD9DE112CC6733F1A
-:107FD00029FEDDCE3FCCFCDDAD757B1A291F501983
-:107FE000772C85EBBAA73C4CFA06FE2E13CAED4C53
-:107FF0003BD1B10F33F571E799B91F66E6CB446CFD
-:10800000BD64A4FC8D6DBE14C5B7AD46265F70BFC0
-:1080100068482F7CDD77BE7F77B29697714E99E7DF
-:1080200067F90FF2BCBD0E486AEEF93BE723C8E6DC
-:108030002BE67E46B77F375892A6FB1B826193F4EE
-:108040004581E991A4576A498A17B60DF1FBDAA771
-:108050006C39D138EE1ADAEFDB5EF491BE556DE77C
-:10806000C9358F53A9DC3C6E6E9CF22B2373D5BEB1
-:108070002CFD6C88140FBBBF4A6CFFD787D9FF2536
-:108080003F3F17D6BC6FBE8AE7A73AC2AB7BD16E23
-:10809000EF88C7284ED0336EAEE77E72295E41F777
-:1080A000594861AE674B7195F46C19E75F3658DF3C
-:1080B000A9773087D30F6373F26306C29D54CF2F25
-:1080C000274CF4B7F8633C0FD9AFF1B862B0440461
-:1080D00035CB798D1EDB2FDE5196D4D0AFD31197DF
-:1080E000E9DC47873E6BA8B82CBFEF42F3FA079B49
-:1080F0006DBF43739D427A61A23E57ABCEA7730B0F
-:108100006790CF3BC24D2AC669FF3F82909C4F00CB
-:10811000800000001F8B080000000000000BCD7DD8
-:108120000B7C14D5B9F8999DD9577637996437C91E
-:10813000E6C90402060DB8818487C6380991A222D7
-:108140002E0235B4B42C0414E415D1B6ABD5B2214B
-:10815000098F2025581F282DDD50B02FBD8D96DEAC
-:1081600052ABFD6F04B9A8A8A97A15FDA146B43E8B
-:10817000EECF6A04BDC547FFFCBFEF3B33C9CE64F9
-:108180003604B5F77FB1653833E7F19DEF7CEFF347
-:108190009DB38EBCCA60CCC758CB3FC5862E2F3C42
-:1081A0008B18EB8127934219AC9C318F2C3096CDE4
-:1081B000D869FC73317CEF76ABAC129ECB1C717727
-:1081C0000963E168454EFD44C6166685990CF51CA9
-:1081D000BEC5720CDADB1953B13FBD9DFE0C627F48
-:1081E000558C89F26F6BDEF20FFEAE3FC5F41D2C8D
-:1081F0008270944A6FF7BA18B3294C386D8332F302
-:10820000CA6F9FC7E8CF6911FFEE09867DA9FBF110
-:10821000B9FEADE6AD8983DBAD2AEF75880A639BB5
-:10822000F7748419943F131482CBCE626A01CC6B2D
-:10823000F5FEEB5904E6BF55EA71C900C7D62F8495
-:1082400085E1F2C1FD2FD3F003088B219CF0C776A6
-:10825000FA7CF85B618A63126305F866243EF9775D
-:1082600018A5FB34F45F91807299060FFC7FE261E0
-:1082700063B9AAC7589E7CD458662C640F8F63ECF0
-:108280008575D0E9398CCD39F6DE3196CED8DC58FB
-:10829000E8F147038CE5ABAE705C666C1E0B3DFEEF
-:1082A0002A940B1A3C2C1182C16D6C19AE0B4CF345
-:1082B000A55280AF8111ACAC60591A63AE81FEBF8C
-:1082C0002B67123E1A7A17CD64E319FBF1CD2D8C82
-:1082D000413FB13A21BE17E09F5DBF67F62878DEC7
-:1082E0005B692BBA0F1B45EC6FE1FC5CD0D9699838
-:1082F0006FA6EDFA1123A17E789A4768817A3FBE76
-:10830000E0DCCDA550EE993E3A8478077CBDD53FA0
-:108310001FC0FFBC306FAF8FFF6CE589B9A3E0B918
-:10832000B3F2A1D9F89C935C1FFA9B35A5B3D90190
-:10833000FD5DB9529980FD85EB8DED0BAA8D6580B1
-:108340009CD609E7EBCF1A0CEF99E0318FAFF777A6
-:10835000EF3A85F0CFBE007A007C86F113B40F4B64
-:108360007D5208F09C5F2DA871A09B0255503B2DBB
-:10837000F8619B463F66FC8BB10C867C56374F8C70
-:10838000B743957C979DF09F3F53882B307EFEB27C
-:10839000BEC469287FD3658F8BF03D2BB34BC0EFF4
-:1083A000F7AE64ACA384C04BAF4D5ADF7B5D6DF676
-:1083B00062F83E2F4F6436A003563D8AC6233846E6
-:1083C000123E8E737CB8081F052B438FFF0CC6BF6F
-:1083D0007A8A5316A1FED50DFCBB0EDF5609E80CB8
-:1083E000BE6F053A8B119D49C793F133E7D8AA5563
-:1083F000488F734CEFC7CA8CE8EAEF538F8E29067B
-:10840000B856091D333C008ADBDEC4182E346010D8
-:10841000E95AE7471D4FABF635133F26F199FD3476
-:10842000F233FE3B8750437CF698EBF732CA8DBFA0
-:1084300064F6EE6440C2BF9059ACBE9AB1FF93D6C9
-:10844000779E00E5DF74346CDA74117C77F7FD9663
-:108450005530E6DCF89D19338A06CA69EDCB67CC46
-:10846000B808FBE3E3C014627CBDFBC725FAE893C0
-:10847000397C5B54B65D84B26493B7874A06DA658B
-:10848000613B61887661B65DB268E7D5DB019E36F7
-:10849000C0FAA569F34AD3BEDB347892C797106F50
-:1084A000B2E215603DA4E9928CF4F255E1C839D3EB
-:1084B000BC236CBB7DD4E0760076B30EBFCD1AFE34
-:1084C000387E4F1EDF3E04FC5F373ECED49F43FB19
-:1084D0007ED6F041F5F539A9E78B70D9515F298A2D
-:1084E000D796D4CFB6EE4F9F3A1F88579ACF426E99
-:1084F000E843B2AB7208E8BC5CBEC3859D4B99F5FE
-:108500007204F86133945578BFB9ABC3A5C0FBF2D0
-:10851000D2DB3721D19727D218CA83714CCEBC1F2A
-:10852000FA1D274B2C81AB76D1419B07CAEC0A166A
-:108530001A0DFD6674A7913CC92CB9E017028C9BFB
-:1085400099E952B1BD2773D22F18D10753A4247CC7
-:10855000786A5FA8F3205CB35908595112E2AC164F
-:10856000996C2C637BA19C79C91E560FE5097FF796
-:108570002922F2B4C4F55D3BB6473DDDCA0EA17EAB
-:10858000C9D3E4CF2687BC9DF4C7751243FDE1191A
-:10859000778780F0DC0B5D89C097E5E559B3EBA1E7
-:1085A0005C7EC41652149C4F87508CF3098AA4B782
-:1085B000747CEA7264C24709CEF463597C2FC0DF31
-:1085C0006A8F27505EC5A65E2DEF0578F29724C905
-:1085D0006BFCAB0F7080F03E7DD5DEF612A46FE928
-:1085E000ADE4FE323E8A27509EB1DA8630B60FCC1B
-:1085F000940CF23F4D936769263DD09A65273AD196
-:10860000F50153254586790BDABCD98FC2A40F9C9E
-:108610002CE47290BDB280EC1081F50AA73D307F4A
-:10862000AC887017F1790C6A3F89B767C1900BED80
-:108630001C675A5313D6878F59CD805CE1BA341525
-:10864000F5B3E060AEBC09306F1B8B74019D340B39
-:108650004CC2F2C0780986E3395D9E56B4BB1E73E6
-:10866000B5D8107F2D87417FC03C36DA19B7FFE4BB
-:10867000902B0BDA4735FB6D6DC5C85C2C67E4E8C1
-:1086800076615846BA5C9B5D9A8BF661BABFF7DBA0
-:108690002867676EFFE30C17CAD53AA87301E89DF7
-:1086A000CC8736C540EE3A4F153025C9CE734A4DBA
-:1086B0000CED29E7A962C3FBC43A98D1390365D50B
-:1086C0006BABC771D6642A84D75A26B762BB5A40AF
-:1086D0008692B42ECE53794C9968D57FA1E17D0264
-:1086E000EC24C5399CFE3D4C294BEE7F548AFEC7D5
-:1086F00098FA972DFB1FE8D76FE8B74D626447C71C
-:10870000025E5A77B35DB031B3EEC64CB4479DAC50
-:10871000A9CBC2EEDC906923BADB186CEA51A17DCB
-:108720001D03C6073AB9F88BE322237B06560AE8F5
-:1087300085154A7DFD743C12EB71FAB5C50486724D
-:10874000E962C96EE0931A662C9BEDA27361AD11CC
-:108750005F365F650FD2CFDAEC34C56901BFFEEC3E
-:1087600059C76A4A47C37CD3C2CB18F0F1CFB71FB1
-:1087700076B505A19CCEE9E481EDAFCE88C1FC7A47
-:10878000044E7F6D011BE1255C97DB2926F51B76E6
-:10879000B0D12817C348DF5E0E0F8EDF935DB8BBE4
-:1087A000DD627C10BB06FB61B62AD49426CDAB47B4
-:1087B000B383FBC79B56D0897CD03F9E9355D1781D
-:1087C00022E03F79BC9C2F37DE5F717EE503E3CD6D
-:1087D0009E6E9CDF6C874CF39BADF1AF3EDE5F710C
-:1087E0007E255F623C9C5FF278DF30CE6FB653A689
-:1087F000F9CD16397DF58F97F3E5C6EB59574676D7
-:10880000F04607C827A093B48A7DAE5130EE469754
-:108810005D16948176B5B537B8E6A2EEF54E9B9E0F
-:108820000DE3D45D0295F3B19769D36B4B19DB2E41
-:1088300070BAE8CBFCAF4DE8479E9CB9B68CF48982
-:10884000665F5F8955411F5F29717867157AE3CDAF
-:108850004978BC17E4880A70FC14F85D057EDC05D5
-:108860007C89E5F8BA203D7783BD8ECF3D002F7E11
-:10887000BF6F5D88CABF5A37859E7A3F6553B8DDA2
-:108880003EB6DADA6E3F2F8BDBEDDBF3E4F94B50CB
-:10889000AFD5A685502FB229173235D9AE664D8F88
-:1088A000B9E1FBD66FB20AD48D637670B803F5399F
-:1088B00064B7A7551CEC5907E58D925D41BDBC51CD
-:1088C0006133ACFCE631A867603CA793B7671772C9
-:1088D0003F2C10EE3D887A6F0EDAE980D7ECB9BDF7
-:1088E00007D1FFBB0AEC72D2CBEC8D83AFC2F71776
-:1088F000C0FF6BC7B2E865329467CDC9A6F1E14FFE
-:108900007A6D0EDAEFFCCF4F669E20BF22ECE67A3E
-:1089100021C0663FDE8DF0861C4A9CFA6377869103
-:108920000F54BBD24EA2206C473D9D8D7A1ABED704
-:10893000BEE1643684EF1207C9B5B9738D7EC37684
-:10894000774246FB677B45803543FF57CD347E77C2
-:108950003A39BF854D7EC32C5319AC2DAE77C50572
-:108960001968EF6FC4575307E32D7AAC79E3C1243C
-:108970003A55B27C81B73DB8106C0CCAB34F58F968
-:10898000B67AFC589845C68AB9FD3FD6C5361E044E
-:10899000D4BF80720FE5AD83CB8DC1FCC1E1A9D1FD
-:1089A000E4E3BDEB7A6ADE1A3D005FBE1417500F98
-:1089B000142C83F749F395027101FD1D26DE5F81BA
-:1089C000FE8D791EF70AF7E7318BF1F4673E93DEEF
-:1089D00046BCE052A23C37CFB766D07CAB9F2D653A
-:1089E00056FCA46C477B6ED66131D4AC0CE0439F3F
-:1089F000FFFF345FBDABE19BA90196007A7916E8D1
-:108A0000BD9DFB310CED549D5EA102D94F575E090F
-:108A1000DF912E54B508F1F9ECC8BE3DD7603B900C
-:108A20001D2DE8EFEA7650E2651BDA415FB6DF2BD9
-:108A3000AF7390BDC558BDFC76D9407FA9D607FB62
-:108A40007D3B497FF6DB89F8679226FA10C6E6502F
-:108A500090EC819BC03E467F3F5AFF9E94CEBF1F45
-:108A60004FB253F1CFF1A4FE5ABA7F2D280057E739
-:108A7000BAAE9AB7EC03E3962C936D6D68CF35C709
-:108A8000058A4324A01ED803239729B656C0FF1297
-:108A9000EC07E9D324D747B6423FC9764AF55CF9DB
-:108AA0007EA087D6F2BA8E103C37EFE0F132BD7E61
-:108AB0007FDC2C1023FFDCCE9A9800703ADC3FFA62
-:108AC000792FCC476D9198BB06CA766EEFB0577D73
-:108AD0002417446FD32FF17B3006720BE75DD7F478
-:108AE0003B2CC76C2CDC02CFBB3DBC7D5472C94E05
-:108AF00058BF76B975064E3F272F726F168CD796E2
-:108B0000934672D0F19A6F37CA2947E6846568F7B1
-:108B10002C88FE308CF148D9CF16862DE86B816603
-:108B20003FECD5E8EC983D519409704FCFABDB9BFF
-:108B30005565513FFA23EAAF46B4B6C31ED5FAD9FC
-:108B400069B3960BFF9EC5E39D57AF7AE8BDFB6006
-:108B50003E9E526F08C96DF3F96C9F601B5CBF3B72
-:108B60003BF287ACA478ABBB5496280ECABAA6A237
-:108B70003DB7F9F39F76FD0E509EF5B997E46C96DC
-:108B8000E88B0B2586F68F26CF436FFF974F5F0C40
-:108B9000E2FAFCC5CD48BFB2D8D397AA18D7D4CB38
-:108BA000F046C072A65EFEEDA5E86F0E94AFB9B4B4
-:108BB00016CB48BB409435FEE866D4CF5B05A611C2
-:108BC000F14DBCBE9DD72FD4BED75CF6FE2FB6A10B
-:108BD0003E98E4203F74AB6607E9F0A97E91F0A3CC
-:108BE000FA87C6E36B1A9E5DC3C7E36B567838906D
-:108BF000A7BE8EF875B32E01E9D8FDB9EB466C7FA0
-:108C0000CF3A165E02B0EF54F6FD7A9B42EDDFB626
-:108C10005A87F3F3D477B2088EE3BFD80670F8749E
-:108C20003826B31B53C0F1E150EBF9A71C2EE7BE69
-:108C300015E0CF2CCDDE74387A82B3E12957DE758A
-:108C4000830CF2664349578355FCF9333FF70332EF
-:108C500053C4DB037E4E7FDDB9E1D30847ABFC9004
-:108C60000BC74F135818EB6F99D2CB84A47E4301E6
-:108C70008E6780DBE987766953998A74E663BE382C
-:108C8000033AF35572F8B7045F600AB4F395C1D3A1
-:108C90008BEF7B89FFD1E5E0F400820ECA0E8D3E9A
-:108CA00002FEAD97A29D9F25EAF457D48EF4E2B060
-:108CB00069F563459761B9338B9727DD51D41E2B36
-:108CC000043DE380362817F21D64EF98E75718E05B
-:108CD000F3DB96ADE6FBB32DF0E9ECA575DA3ACE01
-:108CE000118AC1BAD6D87A1A1AF1DB655EB2D7E01A
-:108CF0007D433C69FE976BF8BADCCFEDADAD9FBA12
-:108D00001AE216EB918A4E276AEDCF824E27FA2D92
-:108D1000E803E8B412F19F44A71F336B3ABDD06F4C
-:108D200041E740A7D5F8DE8C0F735964EA8E450001
-:108D3000A0F4D9F45F6D436D7579F58EDFC1B3E6AC
-:108D400073AFE4873AE2184676A2CDC5E5FB80DC36
-:108D50008F5C86704B7213BD17BD61DAAF792E2B15
-:108D600045BF9327ED40B9358C7EE721DCE67E4B8D
-:108D7000FD8CD6A3E6326F246E81F77FFA256E1F35
-:108D80000778BD54FC322E60A3EF29F945A7FFDC1C
-:108D9000F05284E34CFC523FC02FAB86C72FFB88B8
-:108DA0005F3CE59C5F3C29F80523D1289F3794F070
-:108DB000F28FFCB9C40FFDFCC3CAE87B3FFFB0B221
-:108DC000CBB0ACF3CF658132AA6F6E9F8EF3B6C085
-:108DD0004B9B5F9F47B815D7553D4F6E15C9DEE8D1
-:108DE0006528A73A595FB713F9B05A08ED85B7B3AC
-:108DF000623DF52E05BFF7B0D9607F6CD5E87E17D0
-:108E0000C283FED0242D9E25F5B0AB7C83F9D857C4
-:108E100099288B24E17FA486C76F07C277E0F89D6D
-:108E2000AC772CDAA5A9D6E91E6DBC9B82EA3D562B
-:108E30007C7F26BDF328EA9D6C7CF27EB23E7735BE
-:108E4000A11C30F379CDEA87DFBB6F887E1ED6F098
-:108E5000F6D0D9F3FD4329F8FEF726BEAF14465AE3
-:108E6000F2FDC329F8FECF567CFF15F8FC3FACF8A5
-:108E7000BCD33F3C3CBB035CBFBBB5F5FDB2787EC9
-:108E800047C3EFEBFEB3B6035EB7C213E0B9779802
-:108E9000787EC76A9D00CFEFFA69BD6D31DC17405F
-:108EA0007E47FF7DD3E4581FEE875AC0D197DC8FF1
-:108EB0004BE1FD8069FFB100745EF3D9A650C48216
-:108EC0002FA1DD3F92E1D7DBDDE397B5B8B3723D6B
-:108ED000DAD53B2FF7F2FD846CF5732B7EF80AEBA5
-:108EE000EF0C58C8E31A1B9743DFF6BF4576DE57F1
-:108EF000E8DF6FD5FF331A7D9D49FF8F49D2FFD838
-:108F00008F59DE75321E4FD9961D290910BE7A2F52
-:108F100045F9B4EBE62C01FDBA423521A0FD9FAF27
-:108F20008D77BB5F21FAD2DBED92128284F59B64D0
-:108F3000212618FA3B6FA8FECC70007CE30324DFE7
-:108F4000D4F3F1798FA6CFCED61EBA30A84E0E70CC
-:108F5000393D15C757CF31CA697D1EB67017EB452D
-:108F6000FD02EE77DC82AEF2357D09FDD4513F9AE9
-:108F7000BCBF20206BFE29EFEF6CF50DC07739F6F2
-:108F800007FD5E61059F192F6782F3960138AF0ECA
-:108F900058E825737FBA7FADAF13E9D3A4B8CE12DA
-:108FA0008D5E80AF1A113E579B2DC60203FCABEBC2
-:108FB0006B904C69D8FF4E078FA3EE5C797B2DE652
-:108FC0001B74DE2257204AF297713DA7AC2CA6B83D
-:108FD000EA6AAD5F33FCFDED1D5D632796D3B86B88
-:108FE00071DC8BAB5902E54606DA09147F90258CBB
-:108FF0002F64393B821897DD2C74342C463D7AA9B6
-:1090000097F42D0BCEB58C4FE94F3DFEA4CF9B05B9
-:109010002BCF50BF99EACB9E8E26B493865DDFD9C5
-:10902000616957FD44B3AB607E3F1E12AFC100C5FE
-:10903000B774FC0E1E87AF5F6DB849407CA795C31F
-:1090400090C09269E10EDA6CB595C6592FDA4F657A
-:10905000402FD4DF0B9671BF81FE36E8707522FD7C
-:109060007C55B8F47AA9C7E3F570FF8CE21D5E2E3B
-:10907000B7E803944F1CF65BEE1FE8CF8DEB645509
-:1090800002FD73425632305EB851D383E09905AF8A
-:10909000F2FDEBEB0DCC23CEE39DA6FA51C6E99E83
-:1090A000055D64DF61183E996E8E6A74B02D27FCF1
-:1090B0007480E4482884740DE567495EBAA0ECA387
-:1090C000F25FA92CF7979FA7FA415E9FC9F2B0F013
-:1090D0000CED5EA176527F3FC7A8ECED1FF7351A65
-:1090E00027D05FEEA5EF85BCFE70C7495A573EFFFB
-:1090F0001E91E6FFB1A466E0FEE837A38D14279A1F
-:109100001F5D4ECF4DEBE45A8CC73DB3AEAFB515E6
-:109110009EDF9CDF28A3DD3F7FE94F68FF5EEFFF06
-:109120004AF42B90DF156906D94525B6F01EEF00ED
-:10913000BF0DC0D1AAE9FBDE7AA42397CAFADA2BC5
-:10914000A0FD948F5A5B0D794E1D943FE356A4CF3A
-:1091500092E3EABA1CFCBB433D1D383B3A36CD973F
-:10916000B18330FEC7DED2788CE8BA4EB6E2177D06
-:10917000DEA9FAD7E79D4ACEE8F8D3DF6F2E9D200F
-:10918000F3FC9FB8012FEED1F594EF73A5A0C1E9D0
-:109190007369FCC6EBCD82711E2A27FA50907E6758
-:1091A000697E9C592FE8E3FEDD1119938DEDE0CD2A
-:1091B0002D132CF03B4CBC1D5DB72C5C6F4779DC4C
-:1091C000E5A6FD7B26539C5FAFD79062FE75D95C08
-:1091D0008F30A74AF3D9726B461CED8E2D8BFE2083
-:1091E0006370C533EEE32ACCD7F4087D9F2C46F993
-:1091F00072AB8FF2311A167D52D59CD4FFC2037F19
-:109200007261BCB761DCFA6C8CBB2C64D2C7C9F943
-:109210000EE6711BA2AB896E63CD428395BF752CA0
-:1092200087F3F5424C9111A9BFE3C9FBC88B9409A0
-:109230000E8C4F2C8A19F77340433A903E1A379997
-:10924000DF27EDE788D83FA379C770330FF55E9B22
-:109250008DE86D27E00DFDC0625097F83C9693A510
-:10926000F1410FE1F35F0DCFB11C6E0F395D2CE6BC
-:10927000C91AA09BDC480743FDE4AB14687F33E0C8
-:10928000D3F323BA484FDDE1D5CBA0B700FFE1729D
-:10929000CDCE29E5DF6D5846FFC7D373D0067CDC01
-:1092A0009EFDF865C1B1D05F79246893A9FCA44400
-:1092B000F6212F33F6F89307C99E95CF1542C0FFCC
-:1092C00052F793878BC89FD7ECB1EE27C91EEB2FBF
-:1092D000B30483F974A6F597555710CA23FBCB3115
-:1092E0002CEFD2ECF8F6ECEE275BC93E09B7652708
-:1092F000E9EF5AC6E3CB5FB77EEC0C2EE9C07CA247
-:1093000058A98DFCBD34133F3E98EDA07A637223BB
-:109310007767C373D62D7D12C61B1C792F04500EA0
-:109320008C283DA18E04FA1F51CDD36458191FB764
-:10933000B3742DD90D9DDABAC0FFD6A3DE1B589F9A
-:109340001ED3FAF0F50857F6D0FAF8CA7B68BD6C60
-:1093500058A6B81FDF8FBFA292DB1BB293EF2BFC86
-:10936000269BC75DFF942D6A4FEE976694DE4EF103
-:109370001DF70C1BD5CFD09E6639FEA76CC9A05730
-:109380000EE445FE909D64B7C2FB705925CAB740F4
-:1093900016EEB3D6964A37223DFF5CF34F619DEE41
-:1093A000A0752A09A445F8BA3D62B96E65C35BB7DA
-:1093B00017D745485EA55AB76FCE17C35671B76722
-:1093C000353C7CD0F0B7BB902D57B9FA1CB80FB321
-:1093D000B974BB21AFDAB56F760273A1F5BCEAF5BB
-:1093E0009EF46A94DBE6715FFCE23F0288DF999F9E
-:1093F0003A2DE5E37F6BF2F185750DD40E16589189
-:1094000072480E309EF7D29F27269C76D2F45EC417
-:109410003CB4EF12EB333637FC06ED572F0E8A0CB7
-:10942000F7C71732635E198BEA79C13C0FF645091D
-:109430005C5340E18B31210498628BA4D9BA5C3132
-:10944000E487CD9B3BFB10EEC3376AFBF0205F0C3B
-:10945000DF979AF2C6AE6E5814AED7BE9FA4BFE394
-:1094600034AFB90AB71BE77ABDA45FE785E787EB9E
-:1094700093F6E35EFAA76899875E97A3E3251CAE8F
-:109480001F3D182F8BC3824356CE8C1F333E6A2557
-:109490008EAF451ABECCF831E3A171EE6C5A7FF362
-:1094A000FC5F7485093F2F027E305FD88C0FC62287
-:1094B0005720DDBE345F64681F4F1767DA314FA055
-:1094C00071B6C030BF68290BA5F3FC6075D625497D
-:1094D000F09AF168C657E3A32C94807E1BEFF4D179
-:1094E000FA3DA7E1474C7C48F30AC3BCDAF9BC8ECD
-:1094F000F3FC5599E675955AF17800BE475A41DA62
-:109500002A567A84CF6731CCA75D1EAC4F3E61D519
-:109510004D48274B4D790B66F8CCF0CF4439387560
-:10952000F03EFEE41C5F80CE2F8C67216D1F3F83D1
-:109530008E3584B287CC5B18E0734E5F0BA3B3FB10
-:10954000C7C37E0516E92FCB80DF994FF8B7CE83CE
-:109550007FAF0D8A0AE609CE9E3FAA0DE71F66E19E
-:109560008C4409DAFB7D76942357313063A1DDC545
-:109570003049D4B7E17A3795F57E4F747C64273D46
-:109580001E614D7B69FF5DC9983B2EB57C591B74EC
-:10959000D078663B6566C5E80C9417667CE878FA77
-:1095A000568E96DF309E8D3F1BBCF4A0EC457F1697
-:1095B000E368B08E7DCB19DB5D31B07FCC0A556E90
-:1095C0004FE630DAFF5F9D93A9D91D4D147758A05F
-:1095D000E9856376D6F0A097EF234F48928F0BF37F
-:1095E0006A57E724C5FBF47D642FEB25FC7DD7E5A6
-:1095F0004D88E389EEDEEFA70F925F7ABE6684F2B4
-:1096000035C58C950AC5C53CE9E35906D8C58CCF4C
-:109610001BFC989B7230AEE7298EA31130F3895F53
-:109620006C9AA70CACDBE6257B3B105CF7D2DFC75E
-:10963000A87385E77378B475ABD5D6ADDF8E2E836E
-:10964000F749F83DD1A1D961655A1C1FFF40F94483
-:10965000A91A1FCA7FD5D7D15D06FE87218FB08397
-:10966000F0A7AF2738117DC89791A04439C336E6DB
-:1096700022FF387213CFC758C8945D981FB4306A60
-:109680003F91DC4F244F2238229BDD5ADC2444FDDD
-:109690002CCEE3FDB032EEE7F5D37D0CDA27E53FC3
-:1096A000DA5C604A62FB4C1642FF09FACB417DCF7F
-:1096B00036258D3372F0B8A9FA33B713B5FD5BD1F7
-:1096C000190A8592E4F46F72B89E3C11ACECB28D2D
-:1096D0004C8DBFC52EBF2A25E5C51ECF733558C595
-:1096E000C5F4FE74FDDD6F27C6963F956C277A376B
-:1096F000343E75F8A2243B31D6F814C515F5F2595D
-:10970000DA89CFDFD5F8542BCCEF1FAF7E83F2C7B9
-:109710004F3481C0043CFAA3D3D89B7E940F32E926
-:10972000AFE206F0A830F95B52C622BDBBA305AA82
-:1097300094942F7B2C4721B8FDA52AED9741D32E79
-:1097400074C5FD524840BCDDAEC5CD8070C7CEF6B5
-:1097500025B7E37E883E9ED325131C0E7D3C166AFA
-:10976000A6FCFA998CF4889E07A2F3B5DECFBB392C
-:10977000C678DD30F8F9DD9CAAC1FC2C8A4DAFDF3C
-:109780008A72E22991FCB0EF046FA2F7E678C089F3
-:109790001C6E1F8E102327502EF4343CFF9D1F405B
-:1097A000BB35FB9C2154C3ABBEFFDE8FAB14C4138F
-:1097B0005FFFF94B1BEFACC2798D9664DADF28E2CC
-:1097C000711847B340FEABBBC411DE07CFB703B57A
-:1097D000237293E07A3B504FE59133385C27A0CF5A
-:1097E0007605DB6D6F207FD1C7F7BD4F280A9DEF4F
-:1097F000133D8CEC09D1C99F99B9DC2ECDCCE5780D
-:10980000766B4FD729811609E9BA09F72DA418E517
-:1098100041BB4E49F4DE210896F69ADE9FEB140810
-:1098200067C497C7DCDE41EF713ED85EF433837DB9
-:10983000938FEDABF0C9E9DD75CAC3E1F09BFB493D
-:10984000E7EF35FE33C37163CEB462C4CBDB017581
-:10985000442E8F6F7339EC7DF2A8307E38F298E792
-:10986000EB5F9127B928AE77AB101F0DF2A9BDECC5
-:10987000441BC9AD1257139E934AB29F047EEE86D5
-:109880009FAB18B04FFB2E995389D16BA6DC1B1AE6
-:109890006C6FBD5EF9C9BC3958D0CE4F7C5797BDAF
-:1098A0003128833DF79A565CA48CDC80A1FE2BAB5B
-:1098B000B97DD688F65988E496C1EE32DB675ED072
-:1098C000F773802E96062519E9C26CA7B557CE23EB
-:1098D000BBA61DEC1ACCD71E6CA77179735BD4C6DE
-:1098E00054A8F74CB5487EC63365BD4F5C8CFA6210
-:1098F0008A5D217D51D677DB1CFA3E91C6F16AFE66
-:109900001DD4E7E71D429EF86878F76CF59BDEC62C
-:10991000A4F57E66CA9B63D12FD89522BF428FD310
-:109920001CBC99E77FBD7E87107722DE6E116DD853
-:10993000EFC20A1FE5AD5E227A699CC6AD62DC49C2
-:109940003854D32FC919B01B99589DF33CE2619B41
-:109950009DE1F9C1A21B7B0D76EEC2A8D19E8B348E
-:1099600081FDA39CBD1D68B6FFCC76CCDA5CCDAE84
-:109970009BC026A0FDF2CCBAFDECCDD10376CCACD9
-:1099800014FBDFBA1D7381ADEEE65C1E17A4FD83E8
-:109990005992F5FEFE559A7FCA42DC1FBC447C9F5B
-:1099A000D6EB444852107FDE9B9EA4731DDE7F8A57
-:1099B00061ABF1B6E7727F7C978391BCDD35C14323
-:1099C00079D7DD379F9BDB4BEBA5DC5D8DEBFFA4EF
-:1099D0009DE4602AFDE68E8AAC1426E68B0AF4D458
-:1099E000D77344D4CD92F5C38814790ABB73B9DC1C
-:1099F000CEBE85D9D0CFCE8C31D5CA2FD5EB813F05
-:109A00003A1D63D4503F9109F0AD2EB551DC5FF79C
-:109A10004BDD767EDED7FEC8F531F44F47007C087B
-:109A20008702F0A11C2E897AA83C32EAA7E7A86831
-:109A3000263D4BA305F47D7474143DC7444BE8FDEB
-:109A400039D1F3A85C169D48CFB1D10A7A9E1BBDCF
-:109A5000909EE781DEC27AE5D15A7A8E8B5E4EEF18
-:109A6000C747E7D0F3FCE86C7A86A2DFA6EF15D1F2
-:109A7000467A4E882EA2F713A32BA85C19BD81CA83
-:109A800055D1EBE93929FA437A4E8EB6D0734AB4F0
-:109A900099EA4D8D6EA1F205D19FD0F3C2E8767A96
-:109AA000564777D2779D9F3D9A3DFD74708F4CF954
-:109AB000F62C518EF231151FBEA1E9856FE4AA4F35
-:109AC000A03CD5EB1DD1CE1D98EBBD9A3B74DECDED
-:109AD000D15C4E9F1F848EDF85C769F575DB1C1C2A
-:109AE0003A8EC0CA0367D8B7E2F33B9CCBDBEF9258
-:109AF0003AC8DED8D5C4281FCC57D923503E43508E
-:109B00009A61454799417EBE6B4C6EE45D9CA737D8
-:109B1000EFAD83B81F7565AC27300DE92514489B60
-:109B200006FD8D68B5917BAD3059C0B252CFE404CB
-:109B30001B88E7807D65D06BEEA04D8BFFF4CC9C3D
-:109B400088F09C5B3A81EC576D3FF9C8CD2319FA38
-:109B50001DBB1C09414279B996B1643B7CD786C5CF
-:109B6000F7259FD370071D9C8F36B1C7304E56D254
-:109B7000A1D4E179C2513BD4C730C573743C52972C
-:109B800006E5737E157B0C9F63BBE2751E789EB75E
-:109B90003FF118BA4FE312BD755E289F7F981DC034
-:109BA000F053458F32CD07E58947D503B84D52D5DF
-:109BB0001B9996AE203CF196748067D76B60684124
-:109BC00079CAFB1D22B82503EB0F76DB8349EBE254
-:109BD0002EED5145F867E18D7205CAD95D52AF3B54
-:109BE000B37CF0FA74E2BC719EA057F66AFBE8728F
-:109BF000D27A5405053D1E9817AC1A880776B63EF2
-:109C000047F1C0CE34B916435D7D973079B7827481
-:109C1000CCFD84B4B691A49F74BA03FC1AEC49B786
-:109C2000D6EFAE7E7BD31ABF55FFCBF07B50A3E7B8
-:109C300054F87D1AE79177663E9E1EE47615F07122
-:109C40005D303B75BD15412E4FCD78DE25C9E7123D
-:109C5000BEBCCC16AB1858B76B34FA3E135E23FF6C
-:109C6000CBF07A517068BCB24A3F8F336BF969A967
-:109C7000E4CD9114E744BEA7E13149CEF178A90CB7
-:109C8000726E546A39578B70650F21BF52E43BAC3A
-:109C9000D7E8BB3B3B1C0B669F39AE7F9B4DAEC5E7
-:109CA0007C97D878467E02D897AD98BF3322A64CD1
-:109CB000A06D2C14CA88C709E7919F5E02F686340E
-:109CC0008161AA63029F575466DA1697635E83C662
-:109CD0006FF2A26032BFE9FA7E801F75BAC8EAA4AB
-:109CE000731640AF984FD8ADE169A01F1E8FD87092
-:109CF000537E677B921CEC0C155059AF9F8A7E5F98
-:109D0000D7E9B7F539DAEFBFA2DA3ADFE4CF41514C
-:109D1000CB3BEA5391CE63354CA6F3CEADC7493E5B
-:109D200065827C124A787808C72F8CA6DD8771DAA5
-:109D30008783399A3F2EA77DD3F7FF8F9EB781AFD8
-:109D40004E7E66B5DC8DE72A46801E52504E560385
-:109D5000EC95A8E71CB4EE0AE3EBA854B3784220D4
-:109D6000BC25D06F8ED9F8F98C238E2E95F48E23D6
-:109D700053C6FC93EEECC813C121F842F62815B87F
-:109D8000A8AF0457CDF4E6615E8E9C86E597A07C73
-:109D9000DB14CC13EA655AF936EFD42F1F7F7865B0
-:109DA000C78A23B84F7561503D8AF0005DBF827449
-:109DB000AD9E234B141F1EE6FE93CE9F03FC24573B
-:109DC000E8FCB4A89CE4E15BC1A4FDAC54F6CD2E44
-:109DD0004D7E7E121CDABED1E9FEACED1B0DDE37E6
-:109DE00035B9948AFF673EF1FC8E3D6C20FEE7CBCF
-:109DF0007FB14752D0DE9EC6DE9C8871AF1E4EF703
-:109E00008CC7F9548CFF011DB82B5DA6B8AD30434B
-:109E10008BBB0C19AFD5E3C97ABC4F8FEBA56B7424
-:109E2000851706A01E4F9F224B8BA9BF5E7615E6B5
-:109E300037E5D90C7C8D720BF7E75D6D59D2C8F20E
-:109E4000817E196B2239D5D9C0E4F64CBEFF9A0148
-:109E5000F2A5633D233F2FF68C48FD9F546DEF61C3
-:109E6000CEF7C94A4020CA059529728E760E8188A0
-:109E70005C267A7532D685FE36FB51C8E5C038F7C8
-:109E800067025301EE239F89F49430C20D8DAE0812
-:109E90005584B0716D467508F703C537A10C70D6AF
-:109EA00067546760F9C89189216611BFBB3AB2C88F
-:109EB000105F32E3A9BFDE77DA285F61E719F63F6A
-:109EC0002FCA73E876E7E43CDCFF5CD2D7EA5006A1
-:109ED000F63FF57DBDBCD2872EC57B76F25672FB70
-:109EE000339FC59B93EDA6A4FDC5DABC2ADC4FEFDA
-:109EF000DF5FEC1993BCBFB826FF163CBA7F4FFF5B
-:109F0000FE62A412EBABFEAE0AA44F3D1FF688839F
-:109F1000EF03B0894F05140BFA5850F17836D1A3EE
-:109F2000E64F0CFAAEC5CDCC7EF09C3C631CFF64C2
-:109F3000684E46023FA688E3EBF13CDD0FC6789DF4
-:109F40006CC97746FCEBE32F10B81FCBEC02C93B82
-:109F50005D6F823C598AF88666148F569D02E56BC8
-:109F60009D0C352AE417A5902FFDFB062C31DA6AEB
-:109F70009F75819677627EFFA33CAE9716D8799C39
-:109F800052B87E6904C75D90E7129C4976D28A3C3C
-:109F9000AEC7F5FD1747FEA92AC4B3C31151ACE6FD
-:109FA0006DDE475981B66015C753C842EFA5C2D3CD
-:109FB000517B07EDCB1D5D2AD279DD9391C974EFFA
-:109FC000432AB9F00AD2CF68C6E6E5733D34B08EB5
-:109FD000D678D3F364CCFB55FDDF17B9E9FC8D3996
-:109FE0005FE6210D6F4F6978F957E7CB3CA5E1EFAC
-:109FF000692D3EA3C7B3AE4821EF2FB0D53D90C722
-:10A00000E38C43C665CED3F37D34FCB00363E95ED5
-:10A010008E2D3DF6B85B40786CB47FD9F09F620816
-:10A02000ED2FBD9DD7242FF4FC1DBDEC3925B07854
-:10A03000D23E8247EAA238A9E79444EFCDFC775B91
-:10A040005EFFFE22F19FBE2EA9D6595F17F3FBFBE0
-:10A05000B47539BAE84F413CEFB2C5CD2CF38958FD
-:10A06000BE31FE6ECE0348B5CFFD9AD6FFC9C8D427
-:10A070005C94CB0D8ED8E8E1F0BD8E9F17BFF8A39E
-:10A080000BF96CCB29E70CABF57849D34FA04F37D0
-:10A0900025EF83FAE63FDF8ABD7A24E33EA8AE4F80
-:10A0A000F57D504FA5791FCD7A1F740BB3968FA9FC
-:10A0B000F64107ED7F6AFAF6B3BC14FB9FE5439FB8
-:10A0C000673F90C78695F771B5839F9735BFEFD1EE
-:10A0D000F8EE646473D15DC057372C7252965262A9
-:10A0E0009193F8B071919BE2B28D153CDEDB78A7BD
-:10A0F000A0EDD719E3B04F83BC5809E33FABE99D0E
-:10A1000037597812DAA3B32A05C33E79B8DA6D2835
-:10A11000CF5FFA93A7F1DE8467A6D8158A3F435F25
-:10A1200031B40BAA799E2253FA6EC338B71E7FD67C
-:10A13000D7FF99EA37E91EB418D8F9A343187F1658
-:10A1400089BF9E796122BF974E18D80F57C04ED84D
-:10A1500072C128CAF778B9FC5B14E7DD8271719887
-:10A16000E9962FFE3883E80894720CF9757C561C2A
-:10A17000E563E3B80939489707C67FE6C3B8E8EB5B
-:10A18000B79CCCC675EA5DD7447907E67537C799A1
-:10A19000CDF1E5B38D2757E71BE9E169533C5997AA
-:10A1A0005766F991144FAECF1F463C59975BBA9C46
-:10A1B000D0E5D7CBE5EDAFEE867FBE1C71124CAF7C
-:10A1C00068F3EEE74B8D2E5FD6F9F00B27D9230706
-:10A1D000C63F4CF9567ABDD6BC4CA2AF6F95C7EDC1
-:10A1E000B43F8B790A6503EB323FB2BCBF8CDD7E96
-:10A1F0007BD9F506FAE8975367946343CB29573E1A
-:10A20000B7C352E56BF6A4D43FA3C94EF5FCD51EE7
-:10A2100077957C793DD4B0E80F0AB683E70E6A3FA4
-:10A22000DE11895BE827333C9E53228B4F4C7EAF77
-:10A23000F0F7FD7AC041DF6375CAFAF5016E4FB7DA
-:10A24000107FC69CB8EE52B6DA8A749097ADB6E528
-:10A2500043BBDF06D40DF949F2B4C5CEF723451B45
-:10A260008B3C688197C7F235BCB07010FB6BAB3587
-:10A270009EE7D29FBFC997B4F3189382685FB7BCBB
-:10A28000511144FE39E89B44F676AA75DBA6F31318
-:10A29000CAAFD103FEC4566DBD814555DCC76DB351
-:10A2A0008783C9F1C6ADF99CAED2A73ED48376733D
-:10A2B0008B6CA33CC11699E75FB77AA5197BB4767E
-:10A2C00001433B493F4745F765485E637EF5636858
-:10A2D000EF54A59EE763F9DC3FB4B3C41DD5C2803B
-:10A2E0005EB11FAF75D1FD0F4C95797E53C8904F6D
-:10A2F0006DD7F44B9D295F4394BF9CDF569C1DE9AD
-:10A30000C6F534FB6D8702EA63F83E2AC59C481FF8
-:10A31000519735DF1FD6D6B5459BAFF95E55D17441
-:10A32000EF8368BAF72156D7F4CB5EA4B7F54EB9E0
-:10A330002540F73CD0BD0F51BC72099EFF70F37CE5
-:10A3400016F0FF26F3F306A15E94AF2CE8A2785432
-:10A3500047A1AA164259F4D976AF87FE5AD43A15C6
-:10A360008FAE74786D9DB8CF979317790DE731CD87
-:10A370002791DEE9B82C8DF4107C777339C26461C3
-:10A3800012F98374690AFAE078BECC1E74503CABB3
-:10A3900025C27A9DA3F8F97FA4F75A9638525D82B8
-:10A3A000F6B6AB12F17424343123622127F4A77975
-:10A3B000FFFFD5EFBD544CF9AA62E4A37CDAF76F36
-:10A3C000DC8AFBFA6BF68B21DC47F8CEF75F1EC305
-:10A3D000CF1B19F799EFF6D4F4A23E8B7A1D54AF38
-:10A3E000DB37A903F1D422F83AD0DF6D79E3FA9F85
-:10A3F000231E5B9A799CDB8CE783BEEFD3FD1A2783
-:10A400006139B1BEF97E0DD6713D5F27A78BF62D60
-:10A4100061BEF6822ABE8E141F3CE6A37BA04E1EB0
-:10A4200039E045F8BEC2BC65EC37F5BC0B65D257C8
-:10A430001AFD3029BC09E7F503D1D7D11EC07BD264
-:10A4400060BD11EE47ECE4EFDFED49A7758D027CAE
-:10A45000B8AEA2AF5E4597ECC3FD22AD73546AA2BD
-:10A4600079B198C4F6E2FB473EF9F18548076A16D0
-:10A47000ED6A89454D84970F012FEB2DF002F433DF
-:10A48000A600FDE5476EA07E3A1C2E192D9B16DF17
-:10A49000243AAF3CDCFB452A0A847E7F4BBB5FA499
-:10A4A00002FB1D545FF3B3D0DFC6EFB532FB38CEED
-:10A4B00006F09E2A7F452D30DACFC3C85F510B2CA2
-:10A4C000FCBBAFB0AE97170C49CFC6756D71FDDF01
-:10A4D000E96867A9627AC85D0C655C27C43FAE1362
-:10A4E000AE9716B72115A4201DC88902A4831BD2DC
-:10A4F00043489F67921B12E3EB6E97809EC1AE7339
-:10A50000CA91A37476518BF7E8F2C4CC672D2EA3C1
-:10A51000BC6AD1EFE53B363C7905F4B202F16096B6
-:10A520005BC3A593EF0FA693EF0F45276979E12849
-:10A530007E473C154CA078C5CD583E7244DCE718E8
-:10A5400089E3F1B8595F1E937727E565E9F06CC69A
-:10A55000CD6ED2CB3C6F4A6A600CF3E0FC652141C2
-:10A560002E1F161D6DFE9AE9E88EA1E48397F5D0A3
-:10A57000798D557A7ECEBEA1F373BEAAFE81F5BC5D
-:10A580000FE169F17D9FE87383DD25F37BD4CE6E07
-:10A590005D1F2C10CCF70B3D988CB7C1EB1AD987F7
-:10A5A000EBA8164CA27B8CD8944564377567ABC773
-:10A5B000305F8C4921835C1CC43F9ADCFEC1390AA0
-:10A5C000E5ABFEA5599373CD4E19EDF1C70337FCEA
-:10A5D0000EEBDFCE9430C6436B6C6B094F1FC2FC91
-:10A5E000768748AE96E1BE4F94A585343DFA1F08A4
-:10A5F000CF0CA559C882F781058A8DAE2155B63397
-:10A600005BF9F0F1F0DC603C3C37141E400EFEA715
-:10A6100046CF37223DEBE7ED53C9C137B4FECF42F9
-:10A620000EBE91CC5F5F03FDBE3FB47EFBDAE5CD8D
-:10A63000A7389E59DE78357EFE6E8885305E3EDC1A
-:10A640007C36B03715E4AFDA7417D14FCB8302E50F
-:10A650004B811D1EA1B2CF45C2E6A0CFC1F37FF74B
-:10A66000F1EF621DC7B3194F42213F9FB5AAEBFA24
-:10A67000B064C8938AF1F39AEA09B954C4FCFE6A3B
-:10A68000A267BF66CFE879FDE99AFCEFD7F3336D97
-:10A69000349EBF88CB773FD83B681731A997A11F5D
-:10A6A000FF83029EBF0FFC40F40DA384911F32A6CE
-:10A6B00048A63C2DCE2FD912B77732034C205D83AC
-:10A6C0007962F0FE13B027F07E824CD5D8EE076990
-:10A6D000DF15506FF52EF23609740E3EDCFD33287F
-:10A6E0006761BE17F08D7F86B17E364B2A5BF8E737
-:10A6F000B13A5686798B15855ABCCDC182A41F35D7
-:10A700003F5DBF2F503C73DED7D4C261F8E9171705
-:10A71000EA79C2467DDCE56696F1B523855C1FD5F6
-:10A72000F7D6D6A15DBDD6C7C8AE5A8BBA13CB99A2
-:10A730000EBAD726D45DE9B2BAAF2253B519EEE707
-:10A74000F5CF4833DC7B9B1DCE3294731BF20DF5A5
-:10A75000F322230DDF0B969D6BF85ED434C1501E9F
-:10A7600011BDC050BF04109C5C1EB5E93243FDD141
-:10A770001D5719CAE7ECF896A1FED8F862C3F7F3A3
-:10A780007E759DE1FBB8AEB586F2F9FB6F36D46FEE
-:10A7900061D6F777766878057E2739D6ECAD6BA061
-:10A7A000DFD1901D8638FF755ABDEECC4965180F74
-:10A7B00069395E5146FE70FA0543FAC366B9984A94
-:10A7C0001E9BDF6F2EE4F2F383C7DE9EB412E91CFA
-:10A7D000853CC8A50FBCAF6CC0396D2EE77909FA6E
-:10A7E000EF6298EFE5EFDFA794549ACF822C07B37E
-:10A7F0003A1F705DA162B9BFD02A845CB857940A31
-:10A800006F478689B7EDDA3CBE2ADE8E09C638105E
-:10A81000EA93072DE07A42E32BD057BF453E047DF3
-:10A820005599461E06BFC7E16CF5890E07E8937F70
-:10A830002FCC1E9C1FFE41C3F3D7DCAD60FD6B78AF
-:10A840007D5BA80CD725D5BED21385E67DA5AA656C
-:10A8500028E716F8D284E4FB9AF76BF5F478764B88
-:10A86000FA67B4AFD4E208950D675F697F21E3F71B
-:10A87000E0E2FA6627ADAB5D0DCA96FE9DD98E610A
-:10A880004FE03D1831AF4479C366FF2EAAC96DDD94
-:10A890009F930ED692BFDFE21D49791F2DEA5AD24F
-:10A8A000971D29FC5CD097BDB83ED37C371AFCB904
-:10A8B0008178804AE3415BB29B5A92FC7F6CA7DEB1
-:10A8C000CDEFD5FE1AFCE08F0ACFC2FF5718F783F1
-:10A8D0004F328EA793AA8DEC84936027A0FC6D93D2
-:10A8E00018ED7BC72A05C5CA2FEE58AFD987EB39BB
-:10A8F000DECCFBDD663BE38AD0F584B736A0275774
-:10A9000025CE9FDBBF6D767EFFA6EC0F0751DFF6ED
-:10A91000653BD86E80F660368FCFE978F9B2F228C1
-:10A92000A76890FF93533484FF738958DE85F7B688
-:10A930009E38C5E3220A1E450CE03DE47CFDD63E70
-:10A940003127B606F55489D484F9EB225332102FFF
-:10A950006B0E8B2C2EA01C33E6E7DB59D35D188FD2
-:10A960006301FE3EC65CCD6827654C31EAB14CD52B
-:10A97000A8C7FC33B24C7ACDA8C7721B8C7A2C2F97
-:10A9800062D46305CB2698F49A518F8D88D699F4BA
-:10A990009A518F8DDA749549AF19F5D8393B8C7A75
-:10A9A0006C6CDCA8C7CEFBD55A935E33EAB1F3F7E3
-:10A9B000AF377CAF48B41BBE4F3C7CBBA15CD573AA
-:10A9C000AFA1FEE4A3BB0DDFA7F6FEC6F01D10FD90
-:10A9D0001C9E67C07B6871112F7CF721E377A63A34
-:10A9E000301F7F059ECF8475BCA8EF61437FAC8389
-:10A9F0009F5B88C17FB85EEFB008DD030072EC504A
-:10AA000001B45B1D17420986FAE9C1B771DF6679A7
-:10AA100050243F6E0D065B911EEEF7C5911EAEDD14
-:10AA2000613CFFB03C6E2CC7807E148C2B00FD2057
-:10AA30007DAD30FD6E04D883446F2B14A909ED4A17
-:10AA4000337DBDA3D3574C7D0ECF73E8F3D5E767B5
-:10AA5000D7CF9F6AF4A76AF4C7C44708EE1505224A
-:10AA6000FDFE8E3E5F15FEE3DFDF77E03C3ED92F33
-:10AA7000303FC0710D8B1D2AB098CFEAFDDB1DC899
-:10AA80009FE67999E761B653DB8A8CFB489788DEAD
-:10AA900010F1DD0B22E9239A02F2D903FCBCDEDAC5
-:10AAA00027443A17837C88FE82186B20BCAC01BC1B
-:10AAB000E0BDE1BADD7A426B77E2A7229D6F3E13DB
-:10AAC0003F2A1A3E9C41233FBA9534133D19F1EBBE
-:10AAD0002933F2E78AD72E75A0FC3A04F816A6307F
-:10AAE000E60B19F97585B892F6F9743C2BF01F8EB8
-:10AAF0002B81A98BF35E0DF34E2883F1BBEC91ED16
-:10AB00001B0A2CE8E64CF87DB0C8B8DFAEEFCFD515
-:10AB100002761C1679A53AFEBAB3D53FA27C4CE565
-:10AB20000F1F283A6B7FF840D1D7EB0F3F5334A467
-:10AB30003FDC370BFD29274B0FB55BC4FD242627CF
-:10AB4000305E6B6FE271BF81F8DDD71EE7790BE1F4
-:10AB50009464AE27DD921EE7091D8DA07D92716E73
-:10AB600008F3A2861BE7F870B01EFB70283D06F6BE
-:10AB7000C5313C4FA866E4D7DB9099A45019DDEFAE
-:10AB80008C20F03CA4FF46F806E5EB966669F9C711
-:10AB9000CA90F9C75768FBBB1706D57F221CD0DFC8
-:10ABA00069ECAFFF3EB6CA6CEA27FD0CFDC4EAB8FB
-:10ABB000BD16B3F93A5AB8BD46FB4C5F431CC35FA0
-:10ABC0008C712D2FC77F8B83C76DCF36CE565C3CE3
-:10ABD00028BE545C3C447CE91FAFE6F273AB21B065
-:10ABE0000E2A52D3B77E0E532F6FCE34FACB1B26CC
-:10ABF00070B8CE2DE6EB1ED1CEE3D668653DEF12E0
-:10AC0000F316DD13A03C939F53D2CFB5EAFDD414C5
-:10AC1000FBA8FEA7C1BA1AC4C786127EFFCE864C17
-:10AC2000E33D3C278A6A6B705E53B4FE6B8A193F22
-:10AC30003731523BB7698A177CAED5FFBCA88E9ED0
-:10AC4000788E16FD1287285AE2735AB14DBBEF86F3
-:10AC5000D173BA7E7EEE4E7EBECE7CEF02F0C98B03
-:10AC6000F8FB506FDE66277F0FF4119D9F5B5AC083
-:10AC7000CF219AEF538894C98750BC7EC2CA2DEF6A
-:10AC8000E51994E770EC26CABF7B662A9385BC332E
-:10AC9000E73D7CBBB85F5F85BEE439BAC6E261E4DC
-:10ACA0006B2DD1CED1F5A6713DD697E78AEFB6F0E0
-:10ACB000776FD5E8F236CDAFC5FD69DC27C7FBBDA0
-:10ACC000ADF6CB6F2DE6FBC3C33D577DBB231241D1
-:10ACD000BE359FAB4E759EBAD7D1DB968BF08E6595
-:10ACE00021B4DF7317C8DDB9502FAD5EA1F38F1B00
-:10ACF0004A58FA14FC5E610BE1B98ECCB9F2063BFE
-:10AD000094334B599600E5DED81C1AFFB606268B05
-:10AD100000D77DC5FC3E8485B77C44E36557C3D42A
-:10AD2000143A773E1DFDB35803A37B0BCDF3BC5BF8
-:10AD3000A35F571BBF2727A3D43A0FFFEE62DDBFE7
-:10AD40000EDF85F45B5BCAF6F1F3B3FC9C025E4B4D
-:10AD50004FF99BA134DA17BC12D68DEF9FF7D0FACA
-:10AD6000DD149CF6536CA7F39B43CB53309F27BF56
-:10AD7000AFF8ECCE93A72DB08637A1ADF735D9E16A
-:10AD8000FB918ED2CA3AF8EF977E71FAB43849FB3C
-:10AD9000694705DB4722A8FFDCA0FF047C2A329D1F
-:10ADA000A3652E81CEC3BA9426A22BF794901F7F61
-:10ADB000178D2DB131BCC7659AD65E6D6002FE9EBF
-:10ADC00004E502929C36FDBE841A6A6D86F697E011
-:10ADD000BE5908F3BE43CBB0BF7A6F9A8CF14D7762
-:10ADE00069532DAED7E30B791FB7A7382FA19FB3B7
-:10ADF0001FB87F6ACDB3867B051CCB9F35DC2BC08B
-:10AE0000963FFB55EE1578AD78F9B3FF13F70AE8D6
-:10AE1000F20DD4901DEDFAA322BF47EFC347AFB6A2
-:10AE2000E33A6CA8655D88F7D8678067D7009EED28
-:10AE300075E1C777A25DB2363DC47F4F24F61D840D
-:10AE4000F3350F93B1BD9E6F28B032D2D7731B0478
-:10AE5000B21F98D4B71ACBF31FF1C8E83F7CF8E8CB
-:10AE60004B4531A0CF576F3DE9C3FCD4D7A53E1F5A
-:10AE7000C2F5EE2DCFFBF0FEAE576F11290F85CE38
-:10AE80007D27E5890923387D2D1A113E85F4B5709B
-:10AE9000DD3F2725DB672C9A4DFA7E791C204EB6C4
-:10AEA0007B7FE531FCAEE8AA2EBFA1ACEBF9554E95
-:10AEB000EB73F35347703E5C7E7FA7A340C1F12341
-:10AEC0006923A0FEBBDA39A077F7F9C88ED7E1591C
-:10AED0007C7F8503EDE1D71F71B204C5057BECCC07
-:10AEE000CBF507E65D44F8D083E03CF4970207F227
-:10AEF000D95281F53989B9D921C4F7DF34FFCF3C64
-:10AF00008FA5AFCA0E5CDFA5B5AC0FCF9D2DBE518E
-:10AF1000D8F003A8BF38E225BFDF3C4FB3BEB91657
-:10AF2000EFB311ACEE816B3AF467E86709F483F68E
-:10AF3000E7D20EE3F713876F38B413C6DDB7DF41EE
-:10AF4000F6E2B56788F78F1FA1E9A5496CF2E951D0
-:10AF5000A4FF32C629A9ED0E5D1FBDBB8E5192CA5A
-:10AF60007FE1EFFBC2F3FD75323D4F152BB41E2B75
-:10AF7000F6771FA2DF16967A26A1BC9BF944A3E7B9
-:10AF80005B6C20AF685267CB819D5455CF574D50B5
-:10AF90007C6F8A76FFCBB5DAF98FAAA3E67CD5EE73
-:10AFA000C7FF8C761BCCFF6CEEED5930CC7B7B4E13
-:10AFB0001C9EE6413A993D42F37F26035EC4AF8E64
-:10AFC0009754ED56A5F8DD169D9F4E697A66C99E89
-:10AFD000D91BF261FC9647DF29C6F8718C71FAAE75
-:10AFE000FA29FFFD9F2A6F0ED19B0BE9330F9B9827
-:10AFF000EE7988B11759127D5FFB8887E82408F63F
-:10B0000090730ABEE1F45A85F776227DBFC0DBBBA0
-:10B0100034FF36F2C8ADBCFE9F1DB233487C19B474
-:10B02000D13311B44DB1B867CB7CBF5887B1FC8127
-:10B03000BDB718E5CAB5263FF403C13A3FAD71C4A8
-:10B0400048C2C712459D8E79004B5978038FDFF2B5
-:10B050007B7BDE953A0EFD10F97D8FC06280A7558F
-:10B060007F7CE0DF518E5DF7BB3BD3518EBD2775F2
-:10B07000E4E0782BF7B6A5A31E78578AA563FBF703
-:10B08000E25C9E0DD29723044D0EABE902C8E4D5D5
-:10B09000446AF0FF257D1B6E8671FE1BF08C7CBF21
-:10B0A0007ADFA7543EA4BAFA5810FBED9D8E702C9F
-:10B0B0005FE46D6A0EA17F69E4CFEB7E79678E4213
-:10B0C000791EB1020D7F05D86EF51E3BE5F9A21F72
-:10B0D0008FC3AC617D343F73FB355D6F3A505ECBFF
-:10B0E00036D65778E1E0EF60213990DFD6ECDBF21D
-:10B0F00091988ECFF75EC1DF835A63B24F9769F2A2
-:10B10000DB4CFF5D26BA07FC507C210670F19F6383
-:10B11000E272BCE5D7778F7F03E07B7FCF53E9F8FE
-:10B120007B133AFDEBF73C9FE86A5CE818E21EA14E
-:10B130000F343EE9D70F9A7E52F60360B9507C84F3
-:10B140003F57DA13E917C27C5776DA4348F32B1FCF
-:10B1500010552FDA552F3BC91E59F9C049A2DB956E
-:10B1600082DA27909E63E928C7F5F55AF1C0DFA679
-:10B17000A39C5E9127B299C08AD7FDFE135E1FE89B
-:10B18000DC0DF5573CF8C6F41F6219E489CB62BDAB
-:10B19000A675753B7ABD16EBD5F5C6748CCFB7FC9A
-:10B1A000FA1FB41EEFFD4560B92583DB2FEBFC1BB6
-:10B1B000C5C1DE8785F167727CA1BE59D3252E7289
-:10B1C0006458AD5F62D6C395F49DF2C2CFB48E1DB4
-:10B1D0002318D78F7F7CE0DF1E063896BDE20CCDAA
-:10B1E000C471FFED86740674F08ED4C4E9FE676DF9
-:10B1F00039A8BF97D96339323DF9FB65BBBE47F427
-:10B2000078ED5FBF97A3ED37E4D9481EC4F2709E76
-:10B210004B7F3A8FE6790D8B103D2EFB19BF67F1FE
-:10B2200013F0B3ADFC84A90AE71B27BB7EFCCD015C
-:10B23000949B78670BC0E160FCBEAEE778FEBB93E1
-:10B240005D95916CE77A146ECFC558FC35B43BD749
-:10B25000805A46B9F6FF003503B31E008000000097
-:10B260001F8B080000000000000BE5BD0B7C54C5DF
-:10B27000F5383E77EFBE425E4B5E8457B8791224B4
-:10B28000C485249040D485400C0AB8404494884B2F
-:10B29000C010202101AD60A5CD860002C53628551D
-:10B2A00014B40B8245451B31086AC08D2886EA1705
-:10B2B000438D165BA18B2008045810EAFA2DCAEFC3
-:10B2C0009C33F766EFDD243C5ABF9F4FFF9F7FFA08
-:10B2D000A9C3B93377EECC79CF9999B3E2814BF911
-:10B2E000BF8C62ECE1787DA5C9C25805D33B3D66B1
-:10B2F000867FC215814A493F189FC35F0263790761
-:10B300004675F3A4316662178CF767327611EA9FAF
-:10B31000B36ADE6357E2193BB1D1D445B819CA18F4
-:10B32000565A07EDAFE0DF6DFEB25482CEA3A9F905
-:10B330005F18F43F97BE04FD6C3991BF0EFA65B1FA
-:10B34000220B8FE5F073303E4B71486578367CAF49
-:10B35000E5A8B107D43BA3742C19C7DBFC0DC1CC05
-:10B360001A2D617BA5FF8A9D26E656C603FFAFD83E
-:10B37000F48D91613F3AE6ED35AC7D3D6395E9880A
-:10B38000870A162EAD84F284D19BFF2E7E07BEBBAA
-:10B3900019BE53B206DAA7AAFAAB3FF937968EED7B
-:10B3A0008DFEE7F1F8DFC58C65412116853B42181B
-:10B3B0009B8938CC693FFF855F553FFE81AABF0C52
-:10B3C0002934EA7830FC63081B7245F4BFCFD603FA
-:10B3D00092BAB77FFFFB2AE7E31F18F06D27E1B1B0
-:10B3E000CCE07A09F154F6A5C9EA043C96BD76C9C9
-:10B3F000A88B422A326F7257C64E6FDDF3C57D307F
-:10B400009FD37586A831F4555B9810E3C77BE9B6E6
-:10B410006FF2D7417B03E03D08E839B7FE7BA30E0E
-:10B42000DAC7E631AF09C67F3ACACED800C49BE17D
-:10B430006B8F0A6F79F0DC1342E3E8A98BC5D2DD8C
-:10B44000934139378A59DDF0FEDC16D12A21BE98A6
-:10B45000779925A4FDFB15754703E8A2AD67CC6B72
-:10B46000B4E377EB7F735E0C53E35DFFB5478577FD
-:10B4700005CF81789D8A78EDEFC7EB2596160E9F54
-:10B4800061A75E99D3C791D61EBF0A5ECF563164BD
-:10B4900072FFF33E12E159DA091FEA06750D72C90F
-:10B4A000D8174C85C7D9AF9E21FEFD67779189C01B
-:10B4B000377337FDB00CF90AD0EA3501FFCE759D20
-:10B4C0002778A9CDEC650437160AE91DCD5B8BCF33
-:10B4D000C0FA78446AB49FFE86C5CC190AFD7A7713
-:10B4E00089AE8D30B47392372C02E6B734883D6054
-:10B4F00087F29C4586BB2A307B601A8CF39C33DD37
-:10B50000E2C4F782D8E43AA0CF39BB37AC6B887F6E
-:10B51000DE471AC43009DA7B5CACA02EA43D1F3292
-:10B520005643DFF7B0CEEAAB491E4689975FF7C0B6
-:10B53000F72E38F5CC04DFF3547FFFBA07CA637ADD
-:10B54000B305F134A3FA9E30A683EF3724DE351914
-:10B55000DA3DB80FF047D3B319BB037EA7F3A9B305
-:10B560006F99F3E95C989F189AB9F75D78BF04105A
-:10B570002B02BFCE58A5C5CF6C660F77C7A3DC1AC8
-:10B58000FC7C42FF7519DDF0DE4C4748E54AF86E59
-:10B59000E97A6DFDEC86D3C45FB303F8CB81FCD5AB
-:10B5A000BD3D7FBDA2C8ED403610F96B9418A24393
-:10B5B0007E3ED724BA4CF0CE852506B60CE00B5B58
-:10B5C0000517837E2E3440238477729839A3896FC0
-:10B5D000153E57F0D68AFCD7B73D3EDBEAB71F1AB7
-:10B5E000FC1834297BEBEFE9EBA06C7DEBCB947777
-:10B5F00011DEF1D7B8BFB3F6EDF376FF3095C6B5DF
-:10B60000DBC4705CE7767F14F718C2EF98ACC8B75C
-:10B61000E7169B6C0CF5DDEE505732D6F7067E0030
-:10B62000BAD7ECFA3E1DF53D634B888E9F4B462AF8
-:10B630002F34FCEBB080F3683049388F8ADD80040A
-:10B6400078BFE29D2017C3F7777D3FD811F2F3CD85
-:10B6500067AE9139883F43D9E46DC8BF5D990DE766
-:10B6600053F16ECE8BD5F0FDF2FA46E374A8CF7B92
-:10B67000EFC774D447E7B6351A515F9D35785E60E1
-:10B6800056E4DFFB6B0D80E7B3A1D0590FC61EDD7A
-:10B69000F0BCDD19D2115E381ECE011E705E80979F
-:10B6A00052575AE7F8F8FEBF161FE7A7E2F7CB1A82
-:10B6B0008630315E8D17C1C69F87BACC02CD9F3FC1
-:10B6C000DFFD7D3A0BB9F67CA3E38D24EFFF7F9974
-:10B6D0006F46FC7F2B7D39BFBF2B4934BE40BE6F08
-:10B6E000CFD73B1E21F8F5502B8DF73AE57DE27F51
-:10B6F000EDFCFF6FE83DEFBF76BED7A2F73E99DEC7
-:10B70000A11613EAAD5D3FC6B11B9877EDFF47E781
-:10B71000DDE6FFE8ACE64C18DFDF98EBEEE10279FE
-:10B72000251DFA23BBE2B5EB8E71B25F51C3BE1E7D
-:10B73000390DBEEB047F02FDFD9A90AFF52D003769
-:10B74000839F80FE0543E704F0D05C38D0B512ED4E
-:10B75000B6BE925900367C319DE0C9C53FE833A1A1
-:10B76000FDDDE0E761FBFDD59E19D550BFBFAB4EB7
-:10B77000AA01F82EDBC4E47A802D3D440BAE636A47
-:10B780006C19664935BEBBB2B5EB91FB02D615F715
-:10B790004CD6D64F621BA3F5D0DFA4520373C194DD
-:10B7A000EE0E68BF2EDE42F8BA87552EB584DC381F
-:10B7B0009E4ECB78AA61839A24C48B4DB46E66EDFD
-:10B7C000F1C6106F8897D80CB6D28A5FF1E85B009B
-:10B7D00036C9FE15FC913CDE1D657E09F16462F3FD
-:10B7E000D923D0DF25495F89ED4D0CD68D7CDCB4A3
-:10B7F000DE0CC41B93D79F26990477D91E628867F5
-:10B800007CDE2756F33ECD3B10CF378ED7C5C94FD0
-:10B81000235E0B43AD2EE40BDB8BD17AF85E0DE09B
-:10B820005910FCF854F0148877F43969FD27E35B6C
-:10B8300029D398772AFA9D612CCCBA12FA0F33F7E4
-:10B84000627A3E0FAFA93B161686EB357104AB5BEF
-:10B8500009EB3596AD6F6D9B5702D5BB1F83F76A19
-:10B86000E6C1FB88D75E4CB213FF1759707D2330B9
-:10B8700007BB12ECF73F3FCD06FF339E4AE2DB4F9A
-:10B8800037717FF352EE9BCB0682283198B3733029
-:10B89000FAB9F29FD35384EF894C67C5F52FB3D91A
-:10B8A00024CB60EC97D1BA263C5BA759FF76B575DF
-:10B8B000D1E02DB220420347DB7B68DA779B9CA066
-:10B8C000A9EFEEB84953DFB3749006EE5D3954D357
-:10B8D000BECFC2111A38DE7987A67DE2F2091A3886
-:10B8E000B9F63E4DFBBE6B8B35F5FD5CB335F5FD12
-:10B8F000B7CCD7C003EA7EA9697FF3CEC59AFA8197
-:10B90000EE959AFA8CA627357056F3739AF6430E85
-:10B910006ED4D4E7785ED1D40FFB769B06BEC5FB10
-:10B920008EA6FD6DBEF735F070F6B1A67D9EF9339B
-:10B930000D3CCAF2774DFBDB638F06C43B2CCE87F0
-:10B9400032518D013F819C8D964E6BDA83C75C84AA
-:10B950007C6390F9E1CED4EF34F563ADFFD2F467A8
-:10B960006495400464AB5A2ABBB03A2A43583395D5
-:10B97000BF1EE0B027A05CBCE05C864CB53FE7FB97
-:10B9800038B4239FE63EE444BEBB14CB2CE24018FF
-:10B990000FF3EA91AF75C1977B395471A3309FC8FB
-:10B9A000DC19C0873E814A8B2F98B923810F7D41D6
-:10B9B0005446F822E979A4AF2B9551BE9EF43CDAA7
-:10B9C000D79DCA185F2295DD7CF154C6FAFA53D987
-:10B9D000DDD78FCA1EBE0C7AAFA76F2095BD7CC382
-:10B9E000E8796F5F0E9571BE3C7ADEC7379C4AC915
-:10B9F000772795F1BED15426F82652BB44DF782A2A
-:10BA0000937C53E879B2EF5E2A537CD3A9ECEB9B8D
-:10BA10004665AA6F0E95FD7CB3A8BCC9F710BDD7CB
-:10BA2000DF378FCA34DF63F47C80EF512AD37D3552
-:10BA300054DEECABA6D2EAFB0DB51BE85B41E5207A
-:10BA4000DF53F43CC3B79ACA4CDF3A7A9EE57B9643
-:10BA5000CAC1BE17A91CE2DB4065B6EF552A737C4C
-:10BA60002F5339D4F726BD37CCF70695B9BE77E901
-:10BA7000F92DBEB7A9BCD5B7879EDFE66BA4D2E689
-:10BA8000FB989E0FF7EDA37284EF337A9EE73B405D
-:10BA9000E548DFDFE9F928DF9754E6FB8E5279BBF2
-:10BAA000EF089505BED3548EF69DA4F20EDF77F411
-:10BAB000DE9DBEF3548EF1FD8B9E8FF5FD40655BE0
-:10BAC0003C21D710A017DBF49FEE0AC67942223A38
-:10BAD0008CB7B5BD2FEBE3D5C12F308C7B8CAB146D
-:10BAE000689DFE4CF0D90F484FE69824849762D3A6
-:10BAF000EEFC3B9618C6EEC77F488C35E69868FD8D
-:10BB0000BEFF57FCBD65C38F7EF510DAC779268668
-:10BB1000F63150FF2ADFFD347B4F34FA61CB0679D2
-:10BB2000CA30FEF244BCA708CB860481ECC59B72E8
-:10BB3000F94E828ECA3503B8FD2E9A971C4E71AA13
-:10BB4000A8EB9BD7FFA2DD8FF6B77F2189F7C34211
-:10BB5000BC71642FAEB39FEB6DB7D4FCEB3F605C60
-:10BB6000C756A36741B702ACE7F6DEF955A86B33B9
-:10BB70004CC939A2F28F18E7712E36596AA210CF3C
-:10BB8000BFFE13B65FC898DD04E51F121C9F254059
-:10BB90003FDF07C5B9C038C25FE59009A13F6BFF21
-:10BBA000FFF83FEEFF34EAB5CEFAFF87CC476312C9
-:10BBB000EDE7701C4C6F4B473A8C58DC5D8C82F77C
-:10BBC000A7AD122CC847D3970CCC47FE18C46C14F1
-:10BBD00027BD3F923D60EFC02FEB96A893FD0BC9A8
-:10BBE000780F8CE70CB81CE84F144B8CF8B2B841B6
-:10BBF0007039290E6D0B1B0BF6BB54E6DBE2E5D565
-:10BC0000C605D0AEBC3B8F9731178F9799E17F283F
-:10BC100047736A37ECA570A37899E26397D0EF0574
-:10BC2000D699B3A57D3C7601C699771A2D6837CA97
-:10BC3000EB02E2B90171B3C0789925518EC75A99C8
-:10BC400095C7B9434AFE8ADF63619218756DBC28B7
-:10BC5000F1598949DD108FA3C4B4705CC75C684A90
-:10BC60000E67584A52376CE7005A344329E81D439F
-:10BC7000F039E0D38974F55607BB36C2B88E803DE3
-:10BC8000913270408E21468C47FEAD375B2910D52E
-:10BC9000C80FABD824925FEF59FCAF6518C79E154B
-:10BCA000AFA775C0348CB9E3F8DEEEEA720AD42F80
-:10BCB000E1DDFB9A407157279B1F8B71DDC07D141E
-:10BCC000FBD2E871D948A7E55D079990564EDB177E
-:10BCD00049312AFA2CA921BC16C74672FAEC3490D5
-:10BCE0005F0BF4A946FACC72198EA9F17C895D36F6
-:10BCF000E27E4CF1F2F344AFD97E7A69DA95D73619
-:10BD0000125D814E9AE71595279438FAB1ABD12B85
-:10BD10003F805E183FBF072B1745927E285AEC4E96
-:10BD2000AE54F169E0BE44D28CA1E1769087821EC8
-:10BD30009C1E4C6F8D417A7EB72A8BE81548A782EE
-:10BD40009FA6133DD8DF42D96618CFFD89EC810943
-:10BD5000F0FC0139FE7A7FCDE8028C974F4DE4EB81
-:10BD6000934F61FD6983F5E7812A33B3816AFEACA5
-:10BD7000CA42F0E755B104FFB54AA2F2CBAA542A51
-:10BD80008F1959699D4ABE80018C38BE192857D138
-:10BD9000582AEBC3876331EE5EF0D367593A52A954
-:10BDA0006F8E1FD51BD7178004157E261706932F7D
-:10BDB000ADC01E83253F16F5C70AC1BA19E96A1F2F
-:10BDC000A669CF5233FC30DA2F3DE727E08B8DC8D0
-:10BDD0007FF78E89D4B49FB4BCA7065E9428D1F8AF
-:10BDE000C617246A9EDF57D45F034FF3C17A1E3E05
-:10BDF000952415E89CD0FFC54F0CC4CF172B877432
-:10BE00005BC061E2BB40FC1F333A298EE0DC68B2C4
-:10BE1000A2FEFB3688F3F7B79F8BAE1A5AF73A2982
-:10BE2000EE72C96C91709DF2C874671CD63F120CFB
-:10BE30002EF940C497C8307EC05E3191FE9CBE563C
-:10BE4000604E94112FA3F5F2C32F9B689E33D68AC0
-:10BE5000CC91417C1287ED1F8E96A8BFFB13A53AAB
-:10BE6000E467EF66937523D44EF7C8EF0B83681F22
-:10BE7000A47CFE5F0FEB511E529AD371AD5514EFA7
-:10BE80008E463DD8BAC940FB5EE5E286921020D1CD
-:10BE90009C27DE0CCB9148FC08BFA70E446FC0F96D
-:10BEA000FBE7EBA2B8C8377DEC1B13419F9E2A71BC
-:10BEB000A5D33A79118FC7B7C70B233DE5D4854980
-:10BEC0009B71BED31D432C696A7BC8F7FDA61BACD2
-:10BED00031D634E4FECCEEA8078EAD321460DC051A
-:10BEE000F4FE38C4D3B1DA48DD4A5A546D23FE2A31
-:10BEF000D64B46F5778B5789366A0FFA7D3CDAEBDD
-:10BF0000D5A2830D41B896FA772E171CB8EF94C4CA
-:10BF1000B2BB21DF3E346F48379CC7D44EF619CFF1
-:10BF200082CC3854FB58B3778976177E2FD3A32F52
-:10BF30001CA01E3F8F03253996F79A8F747A23C869
-:10BF4000BA5242BD9A188EEBD4932D6037E01BB3E2
-:10BF50006A1AD32560BDB28776101D4AC7D5A5B829
-:10BF6000E1F901B3E313C4E3B7DDEB9E1E8671A2D2
-:10BF70008617E39C680717F2FDB5D9AFCCEAA3F6A4
-:10BF8000E7DBFB132C56978D853B4600BC38249687
-:10BF90008FF89DC2EAE4F8858BC627A1D2057C58AC
-:10BFA000CAF8FEDB749D75EA679988FE500BD2458E
-:10BFB000E9EFA881C7B9FE21CBB362877B24713F2B
-:10BFC0006BBA8ECB1DDB2D109F02C1BE4852D9CB60
-:10BFD0000AB68AEC656C4F91E1BEDDD9C408592FD1
-:10BFE00070FB3707ED1FEE0B5B04928FB22D269787
-:10BFF0000BF82B3589CBE76CE36B4F0FC2E6F1955D
-:10C0000046FCCEAC7A813D074D4F195C25CDB82F4B
-:10C0100065D9B02482DE33585DC8A7B27E3783422B
-:10C0200040BD3013FF09F5E56B04979BF8C54E76CC
-:10C030006806C64D70FD8F7A5EA547DAE9F700BD48
-:10C04000FE200BD8D7AFD5DA177B70A819C7397B7C
-:10C050000DF76BFDE311D915C05589C3B5771C8D5C
-:10C0600057A0B848E0F767E2F870BC303EB7F5C6B5
-:10C07000C75362E5725A562BB85C1D8C4FC16B7862
-:10C080002E93D03ECFD924B8901F4745CD23FCCE68
-:10C0900006FC46225E9DF6B07B002E014672517C66
-:10C0A00085E3BF623DC73FD0F92F6ABBFB4D94D7F4
-:10C0B0008878FD06ECA713F7032BBF27BAEF05FA24
-:10C0C000A2FCCE7AC365C48DC8D3AC362C04F97EED
-:10C0D000ED81BDB82CF866CD9B31B87E2D8A7027D6
-:10C0E000EB406F45B2E8270B6EF1F35FA0BD6E67C2
-:10C0F0009703F0E36476B243EDF0645ED58CFBDE2B
-:10C10000EDE827C7C51EC47F017E1EDC24DA82D27B
-:10C1100035EDE4F3084EC25BA9D34B7E4229CCB384
-:10C12000C6824F9DF9889707AD8CF4EE8D8E3770DF
-:10C130009C4C2C22FEC4B81EFA21FFEE7803FD8F22
-:10C14000494957F73F02F548A0FFF195C1A65B8C1E
-:10C150007EDF01BE2F7E51EFEE8DF27B312AC10AC8
-:10C160002DFC7A347A5037D4F38A1E2D91ED96D275
-:10C17000EF8368AF003EBEF6CD30A4BB42FF9968A6
-:10C1800027D2FC76E291E9D03F7CEF911D41D4FFAC
-:10C1900099B160A7A0CFA2E73F0A632AFDF7781FF5
-:10C1A000C7FC24D4278A5D1337C45980BF147D7916
-:10C1B000AD7557A7F30A099857A8765EC538AF0C36
-:10C1C0007F7FD3E5797DBD9CCFE7E82A3EBF19ED9F
-:10C1D000E6C5EDFE232F9AAC4EF20BDCD12887DFAB
-:10C1E000BE21B21AA22FF71B2E99819F0662FC6610
-:10C1F00015D9F593D14CC2B84EA7F67BB589FC8210
-:10C2000059DBF97EEB29617837DAF8FFC01DF62893
-:10C21000CAF53691A11DF28FA7CD6E3F9BA4B6DB68
-:10C22000D789378CB3A23D9B0BA843BE9FDBD08D33
-:10C23000E1399755C3599D48FBF01ED263C04214A3
-:10C240009F063F5C136F3031ABD98C74EA24FEFA41
-:10C25000CFE4F353E7133EBC29887FE5FB155DDC93
-:10C26000866EE8D7BC21905F53FEF0F0B0E10CBFC2
-:10C27000C3E3663B92B89D7A07F51CCC4BB0555290
-:10C280005C0C7C1ACBEF705CEB797C98BDCFEA102C
-:10C29000BF0853FC58C7E7214816563488C7E5CD78
-:10C2A00068D7427464D702F17042FE4EB9A823FFEA
-:10C2B000B7CCC8FDE073023FFFF1916C1F3F4AE22B
-:10C2C000EBCC4F92783CE11CFA81D0EFB95B4CAEDD
-:10C2D0006A01DD563DAD93F5B92617FA337A7388B6
-:10C2E0005B4C47F4EACFB6C933E06B2A6B36203D8E
-:10C2F000C765CFDB82F339DC8359C4AE546DC77D8B
-:10C300008429A41918DB6FF8EA438C473AA1AD08D9
-:10C310006B8529D9277A63FBF508C3FC0F07D57D08
-:10C32000887196C3F17A86FB02CE5D26B2FF861134
-:10C330009EDE14A7ECC258CD408CC7EC598A7CB461
-:10C34000373632D502ED1FD077B18A5CFF8C3C8F37
-:10C35000E32D15F8FECD124F16D2E766B6C472DC97
-:10C360004C5B0BF55722AFC63F7A765CE10318535E
-:10C37000D908F8C750C6192B9BF0A98101AF045FFB
-:10C38000DEF4C88435B9B869220D403A972578F5AE
-:10C39000B89FE215987723E0E1EE6CAFDE86F4B249
-:10C3A000B1BABB807FDDFB9880DF4111C0EFDEE3D7
-:10C3B0004E18857860A9120B87FABBF412C1BD0A2A
-:10C3C000588428EF1B601CEBE03081E8A0334B065B
-:10C3D0009CB7BD401884FBA2658BAF6F9C61C9D52B
-:10C3E00034CE329D8EAF671FE5EBD929CE23A3C88B
-:10C3F0004FCA6502F26145449D81D6D1202F38FE97
-:10C4000081D08D1A7F53F41E3EBE52185F0ECA456E
-:10C4100012F1F17D9502F99315C68EE31A3D9295BE
-:10C42000759745C2F673E05FC8D7731A7624E3F7B1
-:10C4300056099C0FE6287CB6552B97B9C9ECAA7C07
-:10C440009D93CCF93A2799F37572DBF7EAC8EECEE3
-:10C4500069F8E820AE2B3BEBBFDCC4DC84975D269B
-:10C460008A1F083A6F12D1051109749882FE24B808
-:10C4700088439223B89F2EF36709FA1F8958F2B8B0
-:10C48000880E9427DAC3D2DA178D88B4C0F347E058
-:10C49000F8D039A0D99B029FABE22AA246EF50DC2C
-:10C4A00053307A67E078845B83ACA88FA718EB6879
-:10C4B0005D1ED8CE50CBFD2CC372EE67D1BE1AC024
-:10C4C000A655DCCF9CD2CB3B80919EB3E40BF1AC64
-:10C4D000CD2F2EE19F86E7651ABFD88471048C7B2F
-:10C4E000ADE5FEA05EF65F8B5769FD85294B54FED6
-:10C4F0002275EB2DC7F11A160553DCC584FE84CADC
-:10C500000FF8876EBC13F5B033414FE72F0D2CD0D9
-:10C510009FB0331ECFE4CFF5B29F383AD9A0D97F70
-:10C52000738E60A9888722D44389A86AECCB319E98
-:10C53000778185D662DC6C94B888E27F45D5FC5C57
-:10C540005A60FCEF42E587CF637BACC7E70BBAFCD0
-:10C550001487FB9BB02CB50BB782BFD1E5F0250744
-:10C56000CA07282AC3508C03EEFF06614117CE8408
-:10C570006CFCBEFB79ECDF69345B506F3D131C46ED
-:10C58000FD2C5C28507C788985CBDBA1AF4237A29B
-:10C590009E52E2BDCB8667ACC5734B359B1B27987B
-:10C5A0007BA37A60746E8939F7FEC506F329BC0C4B
-:10C5B0007243F047136CE1C0E71F7AA79A014FCF8F
-:10C5C00026374DD0839C9CFBBDF705845F4D3EC054
-:10C5D000E127BC7141086FFE9CC3D54A7F9F4FC0C5
-:10C5E000FECE3DCBE1E550EF84EF17A17EC3790F7E
-:10C5F0001568DDFF8AEC7F2BF19E22DDFBBC1CC1A0
-:10C60000DC683FAFD5AE3ED9FE0AFA3B62E8B150D6
-:10C61000F42FDEEE6B7B05EDF78E44FB53C948AF7C
-:10C6200016574C34C6B174AC19E90276CCD6D1BEDB
-:10C63000F42B493C4EF3568A9DDE57F005FDACFFC6
-:10C6400077FA1999C2C7A5EA67F3BFD34F78DF76A7
-:10C65000E3793D39FAC6FB9917D08FE2B781032CF5
-:10C66000A19EF2A6DAF6E1F8E6FCDA36A21EF5CFD4
-:10C670007E91F8F4BBCA1D2968F7BFDB6A8A44FBC8
-:10C6800037E7F5B7E34A308E20FB45A71BBF344A96
-:10C69000F0FE5C9FC86CA0A72B7C029573EB1B8DF2
-:10C6A000F96978AEB6D198A71A57993C4EE074FD57
-:10C6B00004951FB33F5927EBCDD554CE79FDA41E69
-:10C6C000E9394757771CCF1FB3A13CEE1538BF1D82
-:10C6D000B2DE3D8CE70D3A8803B4C8FAB9777FDB48
-:10C6E0006788B7B7509F030CE6CAD111BE7AA5F090
-:10C6F000711475E17A3EABC55AF219ADFBD27522C1
-:10C7000094830F561A8BE1F9C1C41187105FEDE3D2
-:10C71000905E1E876CE071C8A288E687C198B16EF2
-:10C720002F5D7CD20CEBB83B9F91E503450FF44B9A
-:10C7300081499197E0892373799C0BE1FF4D363C49
-:10C7400085E7089BBA34FFE233B40F2B42D94690F9
-:10C75000B3FB8784C66D83714C77860B603BD970C1
-:10C760005368CA3468D79A30BC5B0AE92746FE6131
-:10C770006B82FD02CED7131FAC036784398C3C9EBD
-:10C78000E5F8B348F12C477AB0C3D501BEBC323EC0
-:10C79000BBA5F0FD9D261D8C73108E839FEF85BF7A
-:10C7A000B86D186F5ADC4740BE53BE3F2671788C77
-:10C7B000FAFB6312ED624AB4BA7D38C3F6D73B0E7A
-:10C7C00096C2C71193C2E965CF05FE52E9FD092360
-:10C7D000833570E198486653AFEF0A7B6AE0C9453C
-:10C7E000899AF6F7CDE8AFA91F6B6ACEACBC017F82
-:10C7F0005F0C4B0DA7F57F165F871C6AB8F4C51454
-:10C80000F46337895601E6356BD7E62F8651EF1270
-:10C81000C5B94E3589648FC0BD35AAF74FCEB06615
-:10C820003A77ACEFBA84ECDF9C587EBE7B964BBB6C
-:10C83000FFA1C4E53BDA37417B5686E7623ADA3737
-:10C84000F1C7E3AFBA7F929D22AF8707B1417C3D2C
-:10C85000DCBA1766CAF2763612BD6AF6895664D516
-:10C860009ADE0213609CB7D79B5C4130EE336F1F9A
-:10C87000314AAAFD930A5F35062DE0BD23463C4FA1
-:10C8800075305922FACD6D386F64C017B737CC2395
-:10C89000B96E6E744445A3FD027F757B26F2575D29
-:10C8A00026DABF269DC58EFB6173968FA63873B8B6
-:10C8B0006F0A9565B5A3A9DF72DF4482E7FA8209A2
-:10C8C000FE546CAE3F80FD3C136E417B5EAE776ED6
-:10C8D00045BA944BC119B85F35B7FEC0C55FA21DFC
-:10C8E000B5F07B1D63C5BF6462FDD83E165D4D5734
-:10C8F0001C6F10F5D33CE2EF9968970A705D00CF8A
-:10C90000CBB6E53850EE87D7845A50EE453C4FD62B
-:10C91000019FCE48E1FE9EC1C3C73BCA379EFA5372
-:10C92000EA67A72450BD021BA237E9517F28F330E4
-:10C9300080C1C7F20E5F7F2A2BEAC7EBF15CFC9F38
-:10C94000535F8C423C41FB102C93460E233DF35D1C
-:10C95000E59070D681DE524A93AC87A7A01E86FE72
-:10C96000EE4DB555A11C8E5BE4D19B518F86982D61
-:10C97000B8FF312E7BA054A29A8FF8FEBDB892006A
-:10C980005FC56B40BB3D054AB5DE7EA013FBB234EC
-:10C9900045D1DBD54467C50EB12D4F325C874DE5DF
-:10C9A00067B5DAE46ABE2CD7CAFBCD02F7079CDB79
-:10C9B000795C7F7EAA632DEA91E6E16CF236D2A71C
-:10C9C000CD71E3437FBEF187E99B89CE611649872C
-:10C9D000FB0A4AFDF36DF3E0F27DAD79AC94DB7FA9
-:10C9E0002AB285C8179FDE765BB30DFA6D7C2C23C7
-:10C9F0004354D9A9D753F8F94766F15E267DB13B78
-:10CA000058423D3016F71E32FD7E3F9E87C4B84621
-:10CA1000C56ED3463C0F561106EB7CF8FEF8FE8E31
-:10CA2000D7917E8DEFE55CC47B34365C98819CDBCE
-:10CA30001A865CC473F63633681B2BFA41B63F91F5
-:10CA4000BEED64BCD7D2674923E744A13FF11D0C7A
-:10CA500009ED2DD8FDCC160EDB115F8EE55CFE1CBA
-:10CA6000B21C4E93F9B75896C3697A2E870FAC095A
-:10CA7000B760BCB378913000CFCB3129D48A2AC0BB
-:10CA8000807C9981FCC9F9B2CCD75596E778B91F5B
-:10CA9000CEFF81F239D71749ED1439FD53AAE310BF
-:10CAA000B72BCD990B615C77805CA3DE732CEE9E77
-:10CAB0008972E2E713A305F909F824B644C50735DE
-:10CAC0008D3FE8914F0CB902F18909CA3C151FD975
-:10CAD000DBFC134B7E0CFA554BE2752B99BFFEEB3A
-:10CAE00014659FFCFAF8FD53B97D7108F81114FF25
-:10CAF0000963185FBB1025519C74FE0A1824A060BE
-:10CB0000BEC19D8C7198F9F382280E56D252B92C71
-:10CB1000546A4FAF7B7DE9B4BF3CD19744E5C14433
-:10CB20008717E5659A6F928CC7F4EBDA9FCBB2F169
-:10CB3000B89BC165B26E88C7B89B43A4FDB8DECC74
-:10CB4000F214D929653F8EC7DD309E87F1BDC0FD47
-:10CB5000358CC3E17ADA14A5D3EC13B68BC70DD7A5
-:10CB6000EEA79535FE65B00EEA4FC5DB282EF74DD2
-:10CB70001F47505F98C7EC09AED70DEA7D36198F75
-:10CB8000757A7732DAD1BA4A8E9FBA556201ED379B
-:10CB900031163C5E755EF75A7C3CDB9748F851ECE9
-:10CBA0008BA2B77754D1A1CF36FD7D2DBB532EF389
-:10CBB0007B39F2BBB5BD9D51F835909F15FD6C8852
-:10CBC0006E213D7407BC82FE83A2AF0BF286E5A204
-:10CBD0009D1FF67262FD3B30FFD854470EE2E5B66A
-:10CBE000577B67AE03F80EBD4B6F09B91E7DF88306
-:10CBF00081F4E1A2F18CF421946A7D68E8C40FBF4E
-:10CC0000B5EF8DF1779ADC1EFC58EE1F82BE56F709
-:10CC1000373F75C4F8BED074525F6E277FAE717710
-:10CC2000A6C727F5BD313D9E278FFF5A7A7C565FF8
-:10CC3000AEC703F5366863D2DBE776F5A338D96172
-:10CC4000067A1EED5943B0B4395E75CEBD4BB84B74
-:10CC5000ADD77BF79F3E0BE97A1D7A7D36B6FB7721
-:10CC6000F57AFEF837C8AF823FFB5DB7C2FAE3370B
-:10CC7000B0BE43F85358DFC5B79787403908E47B07
-:10CC8000588FD41F80F1353DDD87E20E2007C4F7B1
-:10CC9000E5C0F728078ABCCCAD1F188EFB06EC1345
-:10CCA00091A1FE0F948382BC57F518A7423D8EF8E0
-:10CCB000DA03328F7A26D04EFCD8D7F12CF28F22AD
-:10CCC0000F8A1C5C9B8FDE36E0BAD450769EEB79DF
-:10CCD00028D57ABE337FE6851BE4FF55D7C93F6F61
-:10CCE000FCFCFCF3C675F2CFB6FF847F9246BE4BC8
-:10CCF000FC83FA13D76F777E6C0D5FC0F987CE2562
-:10CD0000023F6462DCB969706F2BC669EEBCC2FD7C
-:10CD10007AD0E9E4D707FAD55364FDF7801C2738A9
-:10CD2000986AFFBC2F9757F2DB8727060F447B7565
-:10CD3000BDFEDE94A84A6683E70F40A9D61326A459
-:10CD40005B07FEFADF6E90BE4DD749DFD37DFF63F0
-:10CD50003FEF52DFEBF0F3926CE68988CFEFDC7A9D
-:10CD60008678BAD67AC0B096E3B9CD5F77EB15BBBB
-:10CD700019897613F8E39FFF097F8CCDABBB68065A
-:10CD8000BA466D3116EAA1FD243C6B41F10CD31A71
-:10CD90005B12EA1BA6EC0B50BCE35351869DE69652
-:10CDA00091308E3B9F62FE7D03A81F951BDE161FF0
-:10CDB0001198BF7DE41643CB2A8A3FF0F32ACCE1D9
-:10CDC000D1F37D3219CE043854056707C0EB79FBE7
-:10CDD00030BD87F1731FF27359FF8CB3F07D01FFF3
-:10CDE0007E9E37BF2BFA7FF58205F717EECB3D67A6
-:10CDF000C478CED83CCFDE9ED02E654B7861483FBC
-:10CE0000785E2FD07807A7765BE34CA2235B363C95
-:10CE10006F5896CDF74D4C758DF9B60EF87070AA17
-:10CE2000D64EE19F3E86E263F467AA13983193F7EA
-:10CE300093107F7DEF23FDE8FD047ADF6D8ABAFE53
-:10CE4000F7EFC9653657077C345269877161A57F52
-:10CE5000A0C9C43AC1D651DC664C2A9797669DAEEC
-:10CE60009C019E0A53FBAFC1B8D728C6F96252EAAB
-:10CE70004D854E1E4762B680F95E6DBC433B98AF50
-:10CE8000A47DDF7D357CD95215B957DE97E95FAABD
-:10CE9000E59370BDFD83EF601CE1518205FDD4B9BF
-:10CEA000F6A0552C1CE92EF335CB2AB4E5C2FC8242
-:10CEB00098268ED7C6D76C70E1C834F9DE3ED567A8
-:10CEC000AF41FADB756DED399F37086DEFA7EA19B1
-:10CED0007E82DEAF4C1DB206E37E400FAA2738E902
-:10CEE0002A7C5E1700E706C805E330C925EA65C05D
-:10CEF0004F7207FBB74FC8F83D23F0F34DCD23B871
-:10CF00003FD79CC0CBADA9DC7F5B23E371BDDCBE0A
-:10CF1000B98B0A0FBDFC74863F37AE0754F3263C2D
-:10CF2000DD1BA5CC7B52E118985773041B20009F92
-:10CF3000BC943A61CD92DEFEF7B7A44E223EF1F7E3
-:10CF400057D88276FC5E194F5B53EF6EC17A3C7204
-:10CF500082F2569ECDF75F4DF5073A94B705EDF98D
-:10CF6000C789F915CA8991F03DC166C8E4FD2474EA
-:10CF7000809F5FB57FDF16F03E3344DDC8FB327D16
-:10CF8000C604D0AF20807E2303E0222DECF783A1DE
-:10CF900067F09F8A77AE5E1A83F1B32D02DDB1028E
-:10CFA000FD6C14E079E396070A43703D2A4A869E99
-:10CFB000D0F6C32DD35ACCA0BFC6A3FE227D5C4CB5
-:10CFC000FA7A22CA39C1D30B6D3723DF542E8D85EF
-:10CFD000F61F6F99B106EFBDDEB764B50191FEE9AA
-:10CFE0009692357AE8F7DECC3FEDC5FEF4D5A52D57
-:10CFF0006384ABF0696DC03CD607C0CE80F66BAEE3
-:10D00000A1CF9704BCBF28A07E5500BC36005EAE01
-:10D010007D7FDA0CBE7F390DE88788BB96BC7C9398
-:10D02000DAE617B4D92F01EDD9C75A7EBFB386C34C
-:10D0300067531F295C1EA282B72C2854F3AF41B658
-:10D040001753A2ECB68EF8F75067FC931A68D79C7A
-:10D050009A73898719D3D8DF3DA2166E1495F12EE5
-:10D060006D79384DB51FC89614E23E51E7FB158B1C
-:10D070000B71BFE2CEDF29F58B0B6DAAF929EDF319
-:10D080007FBC22E2F7F42F57176EA2FD3F79FF2EE7
-:10D090008297B75DBE128674C9C7F3A358DFC59DDA
-:10D0A0003C5F6DE7595D0ACEAFF1317EDFD05903A9
-:10D0B000F400392F6656DAFF6E0C0F5FF812B4DFFA
-:10D0C000F398B810EDD7E1859174DEA8B01FF7C7CB
-:10D0D000F684F7897910E0C6E0078C18576D7C7CE0
-:10D0E0001495EF8BB6655E407EFCCBB564C71B83A1
-:10D0F000C3092FBDFBAD2AC42D59A99F44787444A0
-:10D10000586276A21FBAD2C070FF8931EB0BC427D8
-:10D110004F98C84F9D56DD9FF67B8A7F3F3EBF3BB1
-:10D12000B42B5E6AA0F83FFCD17D0CC7CA5146AC57
-:10D130009FB1442E9DB753F9DE4F6F7E9C4EFB3A54
-:10D14000229DDBD9ED8B380E92CCBE760EA0FB0A69
-:10D1500047E5FC2A6FF773A4F583797CDD9A44F9DF
-:10D160005298450A9B807EDB4DB601FDA2FDEDDEA7
-:10D17000FB49A4FDAA775B8B63906E43FA717ED95D
-:10D18000ED2B8E2956D9F592337AC2F37B46E961AD
-:10D19000D41BEF75E92D38496EEB2231CE3A43F6B8
-:10D1A0009B814F16BED9011F26F513A9DF63A68503
-:10D1B00078169635FE263A17C7A5BC97D5E2A8C1C2
-:10D1C0007C31865ED220B57F7C6BF2883C9C879F49
-:10D1D000BFFE48FA9CFC6380C7BDFCE21A27DABC9C
-:10D1E0003DE0D7E338A26CF958AF9CC763B175290D
-:10D1F000EAB882DF0F5D2CCB3F6F77080F07C3F7CC
-:10D200000F6D0DA2735F879C7F0F55FBC78A7CCC87
-:10D210000CFBD5E1665A17874B421CF08DBEEAF82D
-:10D22000A3F05EC9F306D29B25CF472FF2623DD013
-:10D2300013B70C03BFBBA51F3F0FD0B97CD407C8E1
-:10D2400047FD55E5A3F4E5370B378574241F5531A9
-:10D25000C847F9CF1BE87C755197CA4918472CD2AB
-:10D26000DDCC6A607C239EFF450CEEB3CC7CDE44B3
-:10D2700074F584861EE7F3EA138FF36AB33FFDB8B3
-:10D28000BEF254E790BD1075E09D81FE16971968B7
-:10D290003D22C61849EF8961565EDF85C52F06BB62
-:10D2A000BC34345B42FA6E4679C8A27A09F92C2F55
-:10D2B0007CF21D78AEE5F0C244DA073B99C9F7C1AC
-:10D2C000663DFA6218FA9F871EE6E7BB6763BE1DDC
-:10D2D0005CE7FE9BFB5E1572BE9DFFAB7DAF67FA00
-:10D2E00005EE7BF173A07B16666472BC30C984784E
-:10D2F0008A1B4878B9DDCCA420C08B18C15250FFDE
-:10D3000028FB5EE22FB97E127502ADD38F55392905
-:10D310007F415E98993FFF25BFB7273E3D9ED13E96
-:10D32000585425ED8345C8789D26303BCACFD1207F
-:10D330006BDCBC34E4BF20A2E7CC17667DF16C2621
-:10D34000D26D6C94269E80FC17ED7FFF44F52D3442
-:10D35000BE1302B3A0BDCFFB43DF91489F46D1F17E
-:10D36000F4BDA4378369FF9C593C4F0C01786635A6
-:10D37000ACB319F24DF7B884347F3F33173F968230
-:10D38000F4CEFB43901BCFDFCC5812B416CF619480
-:10D3900035F07BDED3567C47E77159BCBE12E39C67
-:10D3A0005F2F09E2E7D4EB8710FF4CD3F1732E2CEB
-:10D3B000CE48F1A5B21019EE954DB0EAFE9211E9F2
-:10D3C000A1DCBFF918F50A7CFFB4820FF41B51EF02
-:10D3D0002AE7E859A584F25FA4133A3CE7F5553FE4
-:10D3E000EE9F4E8BB3D279D1F2DF9AAC8BE3399DAD
-:10D3F00045559EB9729D377F2DF6AB63D2760BAE45
-:10D400001F9A4B70BDCDEAFB521E820A3DD31B23EF
-:10D41000E0B9C4F599329E0A69FCEDC44F7A7650A2
-:10D420001F81786CFEA219F96371A8847191F2AE24
-:10D430005607F51B6AB6703B217F17C79E887CE0B4
-:10D440003346201F7C21E84C3CFF804D07F5E71850
-:10D45000AF6FFBCE921569346FB34537A23BF2DD57
-:10D46000F9FCB5F0DEED4C4AE88EF7C456444E9A0E
-:10D470008CF5AF89A49740987E9B8DFEDE6B62068B
-:10D48000AE53A7ADD843F39BF3C640BC41C0A6BD85
-:10D49000FE19D9A739327F79E4736BC500BF01A5A6
-:10D4A000FE266E271C22ABAC2358D0EC572AF5E59C
-:10D4B0002B0C448FF2A526A27379F55FA9DFF2D079
-:10D4C000E618A447F97603E5EF08BD49A2F6C5D5ED
-:10D4D000BD730FC2B88B0DE116011E9539C71A1125
-:10D4E0002EAB150856BE57BEE2F3185D1AEF0F4B70
-:10D4F000938EEFB3FAFB8D8E437B767A6B64DC34CC
-:10D5000015DD4F2FD91186FBCE4783DCC978CED7E6
-:10D510003B2FC88AE70A9578DAE925C9FC3E90A531
-:10D520003914F7AB673C9C188176EEB0C56DC4FA30
-:10D53000C375F178648ED92C965C846DFA9B093E94
-:10D540002D9F23A13FCC1F2870BE29DBBAC79800AE
-:10D55000DF1B24E3E7CC6B47F70E457C001F5950D7
-:10D56000FFC435A7A01D2ED735A7F444FABC2290DE
-:10D57000BF00EB531BE61F998B7C3508F4A1CC57F9
-:10D5800073EB772C40F92C7FEB643EE2F5CC5866C8
-:10D59000C4F858B93C7F583F7EA087F6E5DB36E4F7
-:10D5A00033FEFE07C8778ABD07788901E026238706
-:10D5B000336EE2FCD364F450DEBBA6498CD1FE99F5
-:10D5C0009E8DC47640797E0F4014E5FB6995B113BA
-:10D5D00078DE3DA7FAFCDC5CAC4FF3D777C6378525
-:10D5E000325F14579BC82E15CA78F1ACD81E867CC2
-:10D5F00071E6B53D7B87A25C6C132C4C2D0F8A1C09
-:10D60000C679793DE0EF49C4DFB6F3F998876276D1
-:10D610006BA8843454F0A4C89B82970AC6F1A0E09A
-:10D62000A5422FE349AEBF5BC64319F3527FAC75E9
-:10D6300080B419FB7FEB07DA6F3B338D09FC9C301C
-:10D64000CF8BA6CCCF11A1DDDF5F26CF6FFA4DDCEB
-:10D650006E9659B85D2C8B6252F540E2339B51C9EE
-:10D660002F094DCEBC714433FEE7653968A337CE30
-:10D6700003C6E9D1F17B8281FAEB51197F47AAA752
-:10D68000B851AFCC76423F99280F96A9B8CFC95E62
-:10D690001765FD0D32A9FA6EDEAB47880F41774959
-:10D6A00011B066316C8171A0FFD5DA9BE28579DD1E
-:10D6B0003C34EFCD632C4C07FAE488E009DD89F6B1
-:10D6C000E05191F494324E9BF363A287AD8ECB2749
-:10D6D000F20BC60715390D1CEF3279BC269DD58398
-:10D6E000E782D96281EEAF898BCF841EE4F68E2269
-:10D6F00089FEFE6FF900F7236D17C324816AAC7AA7
-:10D700006C37F7625802DAEF2372DCE1C8D21D6190
-:10D71000C52A3AACEBEC3BCB864848FFBC90838FE4
-:10D72000A11C3D759320F3BF75E442D40797C22432
-:10D730003C2FD514E14C433FAA49C796B308CE8786
-:10D74000FA183FFE405E087F502F3D65F1CBA532B1
-:10D750006EA09B1BE906ED6D5C8EACB48F31378AF1
-:10D76000EF8B5E5B9E323CA49FAA056963A6BF9DBA
-:10D77000722FEF7179DE2423317E7B80FC89F6CE17
-:10D7800024E7310ACC837A7BAFAE7188BF8A10B3AD
-:10D790000E977081F581B07F3D55A9473F9F2D8938
-:10D7A000DDABBE977634C849F7CFBCDD45B611E88E
-:10D7B000513DEF237E9EB781DFDB52EC34FCAD6A36
-:10D7C000E33F78AF34F37C3EEAD73FE698E85E5318
-:10D7D0004C7F7EDEE514AB330E47FBFF6D737E9806
-:10D7E000E45F9FDC72D12D8693BF10AF591F94B5B3
-:10D7F0007E40F25CCE9AE93EF6B4159F8D1D82F410
-:10D800007ED940E70766D4C6939D3BB9697A06CEB8
-:10D8100077DAD26482676D7E90C32B78FEC3694B42
-:10D82000B35E42FFEB68902D1FF9D9BB5AB0E0FA06
-:10D830006AD8E6AC45F741FDB0D03E5D71DC873675
-:10D840001D1D8B743FB45024FD64DBF4D424ACB7AD
-:10D85000ED14F1C618AC672C8B30AF29D3875BD0A1
-:10D860002F50CE17D618B8BE3D2FEB87936D25E706
-:10D87000D3BC9A9A14F497BC1BC01EE1BEB7D15B0F
-:10D8800042E7BB058B7523F0CBB782936066B1246A
-:10D8900054E7E07D96F5941FE75CB2C9827EF2FD05
-:10D8A000266645BFF6FEF77A0FC2A5824D5E578DFC
-:10D8B0008DE4DF55F0A57CDF2BF33D135795D0BEEB
-:10D8C00043A49480FAAD493E377E541EEFC9252FFC
-:10D8D0004F42BFE0E496E408A6C2FB49394FD32C7F
-:10D8E000D083DB3A58EFFD7893127770D1774AE511
-:10D8F00078E03E436D2FCCFB1978BFEBC486203314
-:10D90000E6E70DBCE775C2C0ED47BBFB5E3BB570FB
-:10D91000609EDBC0F12865BBFBFFFD433AF4E315D5
-:10D92000390B7CBFDD7DF2A4EB3B5F8579C9F0BE8E
-:10D9300077D34D8CC63932F8C737515F97D49A2CBC
-:10D9400078FFFE589044EB2167169336A39D314B28
-:10D95000E1B89E3FB62F83CEFF957CC548AE4AEA1C
-:10D960004517A62AFE6075DFDFE502FC60BDC18AAF
-:10D97000EF9F5CB37A1217336D9E856CC6E57326F4
-:10D98000AC93DC16FFBA2870BD347BED1B748FF0AE
-:10D99000E75A2F2971A4407CDFDA5FCE4FDAC9FD48
-:10D9A000B9F7806DB207B5C7776B9583D64567AB7E
-:10D9B0004AA9CCA9DB90D753C2FB14477E3B0CE5A8
-:10D9C00026349CE221AD5595B489777667C665BC4F
-:10D9D0001FFA6E48B805F5C5D9AA85F2E502994F38
-:10D9E00064BEBCA5BE51ECC9A87DC33068BF3B2452
-:10D9F0009CEEBA24D9B2C3D1CE2B740DBCDFACCC13
-:10DA0000EFD4A39CAECA784F6D991E867E67E3BAA9
-:10DA1000C8869C283C9E1B6E417F7BA67CFEE5F859
-:10DA20005AAE6FBE3587BF3406CFCFAC9F1883EB9D
-:10DA3000BA070D5EA315FAB5EE1A1F8671BC6FF416
-:10DA40009E30BC6FFC0DB477A39DD0BB44D4734310
-:10DA50000B18EDE30D75EB99144F5BE6C41739AD68
-:10DA60007A17D2F5B4FBE29E2BC847AD3A8A77010C
-:10DA700066F65C81F6D6D03E14277CF06DBEDE647F
-:10DA80003F76E1F501F7169FE9CFFD9613EBDF1C1A
-:10DA900047EBF34D060B8EF3ECA6CF63F01CCE6C78
-:10DAA000C6CFD77FBB45A079CC067E0C8A47FDC088
-:10DAB000E3A0B341EF9B85F67C98B7A59AF8703642
-:10DAC000F021E6F59E6DE3F99867633E6689B5CB74
-:10DAD000FFD155E6BB39C077787FF7E7CEFBF13B46
-:10DAE000850F03E45EA1BB821785FE7E3E649AFC2F
-:10DAF0008211750387F7647E7DA0DCEF607ACF2A00
-:10DB0000BCA7B1400CADC57C55FBF5957FA0BC2DE5
-:10DB10004E3DDB4CF69CA562BEBC05E24D568C0723
-:10DB2000D6182BDBF2BA607D605E173184BF3F1ED2
-:10DB3000F313C37CBBA6C5D3F72658ACA310DD8670
-:10DB4000280FC505C43C9D8DEEE5D59868DD1CA861
-:10DB500087EA64FADE95C6F5D0FFF4E7E7B5957B72
-:10DB60007F4A099AB137F2FBF8E0884B1234D9D5D5
-:10DB7000FFD0DDB84F3B7E58C42F12E1FB7B5F3DE9
-:10DB8000CAE18C88ED090037F5FFFA6EBCC731FE9B
-:10DB9000E6882C03FA01D5C7EE1E09F0F1FEB67730
-:10DBA000FBABBEA3F40BCF77E3F37FC439DEEF4FBB
-:10DBB000CFBD2548EF734218CFF796E4A538A8F2F9
-:10DBC000DE01811D7E57F0C31E038BC3BC06FF839D
-:10DBD000BA3BBAF3B27B9AED63FE7DED73A4D077C6
-:10DBE000B8CE94F77F7466C988FE9FDD6AB4F2FCF4
-:10DBF0008ACC6E06BFEA2E997F8BCD974792FDADFA
-:10DC0000645613263059AEBD8FD5CF7F6F6FFD8D13
-:10DC1000DCDB634E9E87AF46CEC3D7D93D4AA1E138
-:10DC2000A31FD0BF0CBC3F95F149F35BC827E3802D
-:10DC3000AFD05E643673F82E994FCA778CA57CCF2F
-:10DC4000F30F185CE827CC92FDB12447172641BB9F
-:10DC50004B20BFA8175AC7B953507F9CA862B5493B
-:10DC6000A0B00ACC8E4BFD014F4DF11F515EB41395
-:10DC7000EB6BC2D0EF3903EB8931D04599ECDFB3C0
-:10DC8000CBA2FB36F483E3FB6D5CA9E2B79F643E55
-:10DC90006B8D77C7E1FAC6196FE2F91A2FEFA13C35
-:10DCA000CF0509A3B3308EB4BF6A273B9AEC7FAF90
-:10DCB000B3FB284375230C69AA7DC971FA8ECF691D
-:10DCC0009C51F2696EE2F6DBA4AFA53C5A40CACA89
-:10DCD0006A82ED14578A451EC5F8B0F410C1CB66B0
-:10DCE000310BDD63F5EFD3D17D5085FE36EB959199
-:10DCF000D86E1CD01FF58DCEECD5236C2FE0E753EA
-:10DD0000FA01E1509F28F41F252EFA2DD261BE7C26
-:10DD10008F6BBE50C9618399CEB906EA478C6B16EA
-:10DD200091DE74EECD417F0CF424E55590F5A2040C
-:10DD3000FFA3BC48D91B8CD4ECDA7991F6E6FC073A
-:10DD4000FA31234D9B475CA193E25F754627454F0F
-:10DD500002BD86A5455F3FBD943C65F39FE7F1CECC
-:10DD6000F9CF4F8F1D44780389437F28ED4F44C47A
-:10DD700099F21CD8FA48E263C308BB84FA76ECCE69
-:10DD80009E4C8247B3760A74BE75CCCE4882C37C63
-:10DD9000DD795E25D9DE8FFD63B711189F3CF9D27E
-:10DDA000DF1FC6BCF7637EC3287EAC0B0EA17C13BD
-:10DDB000E208398F8318F221DE63BD20F1DFA1B0C4
-:10DDC000B376F9037444FF267E4E1656794E4E27DD
-:10DDD0007EEF6FFE3E6EE7E70FE7FB8217F00D6800
-:10DDE0007FA150A43C4DCF04A793FF5673B781EE9B
-:10DDF0004730A7ED2FB8AE9A2CF383291616962A32
-:10DE00007A054920AF2AFA3C1EF4DB0F1DD0BF076C
-:10DE1000D65D420FC682532334F57A67D037983FD8
-:10DE2000D6102B5A5C30FE506B0F4D7F76B1CC80F4
-:10DE3000F114E6E07EB4C25F4C6CD5D3BDF95C9EB4
-:10DE4000BFE2EEC9DA7B9286DCF323C9DEE46AFD29
-:10DE50006FFB35F236FD4AE1A77EAC9F9C979EECA6
-:10DE6000FF85167E3F4462F6B58ABCA0FE07EFE64A
-:10DE700019C4CFA42603734984BFD7B0FE82D364EC
-:10DE8000C178409B1F9E04EF45A19134139F635EB0
-:10DE900050F53C312FA81A2F9817540D635E50751A
-:10DEA0007BCC0BAAAEC7BCA0EA7ACC0BAA86312FDA
-:10DEB000A8BA3DE60555C3981754DD1EF382AA6142
-:10DEC000CC0BAA6E8F7941D5F59817545D8F7941A7
-:10DED000D530E60555B7C7BCA0EA7ACC0BAAAEC7C9
-:10DEE000BCA06A18F382AADB635E50753DE6055557
-:10DEF000D7635E50358C7941D5ED312FA81AC6BC59
-:10DF0000A0EAF69817540D635E50757BCC0BAAAE51
-:10DF1000C73CA0EA7ACCFBA98631EFA7BA7D335B78
-:10DF2000928C766C77BCE37FD268DFE95BE2E783B3
-:10DF3000F7033FA31C364DB450FEC21B5C277E9EE8
-:10DF400026EFF7C8FC7B89854CC573E89DBDAFF013
-:10DF5000E7EBB2BF01F66039F12F0BAD457FEE71F3
-:10DF6000BD8DEE4339EBF8FD44A6E77EC00251F6C5
-:10DF70007FE4BC100B4489FC00CC1DAC578DA7ABD3
-:10DF8000CDCCF42A3C4416583470B43D56D3BEDB95
-:10DF9000644953DFDD91AAA9EF596AD5C0BD2BB3FF
-:10DFA00035EDFB2CB469E0786781A67DE272BB0693
-:10DFB0004EAE9DAC69DF77AD4353DFCF55AAA9EFD5
-:10DFC000BFA552030FA85BA8697FF34EA7A67EA04A
-:10DFD0007BB9A63EA3A956036735AFD5B41F72D04F
-:10DFE000A5A9CFF16CD1D40FFBB64E03DFE2DDA9BA
-:10DFF000697F9BCFAD8187B37D9AF679E6031A7866
-:10E0000094E54B4DFBDB638F68EA474B2735F5659D
-:10E01000A7B97FCF6A607D8071CA109E5F63AE9B97
-:10E02000D5A17F7167EA794D7B4314AC17807FCA15
-:10E03000411FA2DFF77D9738CAC7CC2AC3AC78EF5F
-:10E04000DB39A2F20FEA7BDE63AD3F68BEFF4C70A6
-:10E05000983B88D61766B2B7230624907D6CCB27F1
-:10E06000A2DC67675E161B4521212FFA4702FEC21C
-:10E0700012C061369E171AFC20F29F2CE017A1BF38
-:10E08000D9B62ED2C5C7A35D0EF6FBC5BDAEA8F2AC
-:10E09000BC5CCB2FA66F67519EDE5103301E5EF72E
-:10E0A000463EAEB36631E732DC4F54F22CEE0FD26F
-:10E0B000C6B79472B419F0ABFADEBEA0DA5E83AED6
-:10E0C00022EFA3CDADD4BEAD5F39FE25C064E7AB72
-:10E0D000FAFF2DACFFF420D7B555207FE00F3D5956
-:10E0E0006521784D552CC14F574954AEAD4AA5F224
-:10E0F000B92A2BD5AFAFCA26F8852A1BC1AEAA0212
-:10E100002A3756D9E9F9A6AAC904BF54E5A0724B2B
-:10E11000552995AF545552FDD6AA8504BF5EE5A496
-:10E12000B2AE6A393DDF56554B707DD55A82DFAAB3
-:10E130007251B9B36A0B95EF54D5517D03F86F084E
-:10E14000EFAE7213ECAE6A22F8FDAA66823FA83ADF
-:10E1500048F0DE2A0F954D55DF52F9E72A2FD57F7B
-:10E1600052E523B855DE87583440D0DCC753603DB4
-:10E170003BC6FD3DCC5B817918B20D67AF961F376A
-:10E18000900EA7E4FE0D23C05DC238728F948D35CA
-:10E19000AA75C5F201DC5FACD6F1FC2DD53D98A582
-:10E1A00086FC761BE3E7B4B8DF3E13FF25C1D3A896
-:10E1B000AABDB8DE28A9E479CAB3901F53891F3FCE
-:10E1C000B9A1759ABC2ED891687F6600AE43425CB7
-:10E1D0005FC467FAEFD11F4C743C877C7AA1F2C10F
-:10E1E000BDD87AA6C59A821F196B724763FE2FEFBE
-:10E1F0003ED1BA51EAFC7B15F2FD874EEB779FECDE
-:10E2000085F6AAE02791E2FAFB0DA193719F7FABFF
-:10E210008C8FAD03749AB228C9FE2A8EE74472E54A
-:10E220004B0F09FEFBFB77E1121FE47B3C93280FA9
-:10E23000CE4466FB105DF0BBC11144F81EE6A4B2EB
-:10E2400035C1518FEFDF0B0B10841D434D711DCD78
-:10E2500027703CBBE5F1EC96C7A1940B92ECBB1088
-:10E260006FC7926D9AF16C95F3338C63DE17705C17
-:10E27000FFDC75FEB890E8C7775B3C8555529E8CF5
-:10E2800022C6E3298F635E8C287F5E0C65FD50B447
-:10E290008FFFCE11FDA1FD5C104FEBDBC0BC19CB95
-:10E2A00086EFE17930603D86F77F8BE6FD82F42FC3
-:10E2B000FE1E14DEDB5DD0E530E599F1CC025EEDAB
-:10E2C00049793578DE1B0720B027E5D5A07AE1260D
-:10E2D000F87F771C9739554FE3EB42F94E9E09DEE4
-:10E2E0004F796930A660EA8A798F79BC66BFFD3CB8
-:10E2F000F7BBA3BC743F7547A2E3EB013C4EFE7431
-:10E3000006C689909FF03B16179D5F037E320A80F8
-:10E31000A29951C04F1DF81B0ADFCC95EFE128CF21
-:10E32000811F5B11DF67DF1E928A7C53B13B47423E
-:10E330007CD7E8F87D3AE79FE57D41F9F710C4F016
-:10E34000B40D74EF009D71A46F4E28DD3B6814D9A5
-:10E35000C2373AD0AFA1E95CDEF7C7F27C92350153
-:10E36000FB93C6744E77633AE787B1EFEFA33C6443
-:10E37000739B78BC9A657AD2EC1D9CCBAA58F89B0B
-:10E38000A79354F3A8D879849FE7629E34F539AEF9
-:10E3900064F9FB0AFF89C650C78610F5F878FC01BE
-:10E3A000E420243D8BE4E038DEEB1E6792C2EF11DF
-:10E3B000E8F7C1CE627E19C71F2C741E503917387A
-:10E3C00083D9A99C099613F9DEEE5C4DF7E767B394
-:10E3D0003A7A3E377B7A1CC215CC3B3216D747CBF4
-:10E3E000AB3FC470D0C4DAD5A3BAC3BC26B8A67DEF
-:10E3F00088E5F84DC271A74472D43B1DF7B785CAB2
-:10E40000A53DE07BF76D1DBE14E3D6E3444E07F651
-:10E4100031A74311F0B318D17E7E203749E95C6EF5
-:10E4200068FC8ADC142D66363C7FA0DC0F6993A360
-:10E43000EC39FFE8897B38E04F22BF56EC3645D0F7
-:10E44000FA14F3CCA0BE92E567A99EFB974E4C6DE3
-:10E450004AFA93FB1B069B9CCF8B717F648E93AF14
-:10E46000C74E19B8BC9D3A14EA42FE5ED0E5F538B5
-:10E47000920F83221F3F4DA5F33D0CFC8F5BDBFB0E
-:10E480001F6D79667A31F237589C237650A2DF9E51
-:10E490009FD2B90687F1BCFCA3105F7B63F9FA79C0
-:10E4A0000EE6A1C1FAAE7609E3A5A7A2CD745F2856
-:10E4B00030CF1963569A9F419E1F8C6C32FAD32637
-:10E4C00039AE561330DFEF83E268BED27056C7D044
-:10E4D000B1D05B9CD351EE1FE2766241975F3BF077
-:10E4E000FB9E20661186D17C281EEBD4317B0D8FDC
-:10E4F000CFD2FC16EACD163C97B36C9AE811C84E01
-:10E50000C038319E1765B6F2BCAA4AFEEDC0F1DAFA
-:10E51000B4E333C7319C9F4D64DEA0617CBC383EC0
-:10E5200027D083E803F034D5F8A05F17E5FF0996FC
-:10E530002CE88735FDF8108F2F5773FF11C6BF8564
-:10E54000E8D31DC6DFF3DAE337208BC2F817A4C780
-:10E5500013DFD5E00EA28876B62BE9DF0941F64736
-:10E56000900F931C2B7BCDC7B8468EC98AF13B76A2
-:10E57000B9A617EAA91026515EAD71369E570BBA9F
-:10E580005B82FC301EF3D659C80F6855E761630102
-:10E59000F135200BC55727607C8DDF25FA00E3B3EA
-:10E5A00013E5F3CDFDD8570AFE28BE26E2F8285E13
-:10E5B000EDA0719A90B25006619C87E8E0A27904C0
-:10E5C00033B71CCF6E26FF60B5CC87430F32B21332
-:10E5D0004343B89DD87D84B9F0DC57E30F93F242F2
-:10E5E000A17EF7793DE929C013E5037CE7736E57F7
-:10E5F000769F3CDE13F703AA7FD8DB13FDC4DD064C
-:10E60000875881EFE7982C8BADFEB846C3C1101E2A
-:10E61000D791E37CB7C8F36C60CD3515509FDD5DB5
-:10E62000641807CC6A7107A33C638EDA8EF61B73FD
-:10E630002F1A35BF6B61B068E16CA682E3F1E85137
-:10E64000C0EF7FDEE03A775BBAF6F729DB7EF7B3FF
-:10E6500035EABA7EF733539EC7AA74FBBBE964D789
-:10E66000268832DE05C417E88146C4F773E546FA0A
-:10E670005D83C67263778F6A7CB5B3FE49F87DEF20
-:10E68000C77F92DD7A2F4BC98F531784CF8DCE5021
-:10E690008ABB3D77594771B775A55FD3FAA4369BFE
-:10E6A000D1EF88D55E2E263FE05201C34D24567D22
-:10E6B000EBFF9622FCBB5BCCF4BDC0F1EF027FDE2A
-:10E6C0000D847A17FC79775FC6DE067F1E61BCCFAA
-:10E6D0008AE576F0E7B174813F8FE50BE0CF633BCD
-:10E6E000F4E7B17C0EFC792CD7823F8FE5D3E0CFE5
-:10E6F00063BB35E0CF63F924F8F3F81CC69547E314
-:10E700003AC8E8DEFEE2E0B015E86748CE50F237DE
-:10E710003EB50DEAE251D9D95B2FEA3474CE6DD5FE
-:10E72000FEBECDD063119ADF3FC9FEAA87A67E70D8
-:10E730004B82A63EDEA9FD7D9B3E0BAFFEFB363D28
-:10E740004B4704FC3ECE1D01BF9FA3FD7D9B68FB94
-:10E750007D01BFBFA3FD7D9BDFC9F932153AA648F5
-:10E76000AF05215FAC2B9D10CE3AF02F94F2499962
-:10E770001E0AFCD4A3E2E48EE2C85137737BFFFE8D
-:10E7800021D3BE4D80CFF758B81DE3EEEFD974A466
-:10E79000979E5B1B4271589367E849E49FF76C4C66
-:10E7A00042FE79EEF2882E389EE140467CDEB3943C
-:10E7B000DBA73E374BC4CF3D4BBD22DE17BDEDB2CC
-:10E7C000D78AFCF85418FF9D2DE8D7B518FA7B7F3F
-:10E7D000ECE07E18C7792E04F819E5CDED0D4E0258
-:10E7E00038FC8A8EA17E045B4979FE9DCF86C8E7FE
-:10E7F00051AFD07DB870D4E9A097DE2BE5DF4FF1A3
-:10E800005C0E56FB43BFFBE95A7861C4579DD6DFC7
-:10E81000313B01C7EBC73BA84628535829FB2DE2E3
-:10E82000A38CCB4F6DA98EE4E912C813E207664DA5
-:10E830007461CD5A797F12E5434D87B2841538CF84
-:10E84000E7D6E869B76C94B875DFCDF0CABA16910F
-:10E85000B6D9258B37B823FF4E19F73A1B9F5F8433
-:10E8600095E9D0CE45003E5DB49F6DAD56FF9ED577
-:10E87000B3B27CFE5E96CF67647EC0F536C2A3C499
-:10E88000F5A353701CD95C5F033D05BC8F75690609
-:10E89000A3DF11FD7D6142978EF27CAF91C7F182BB
-:10E8A0003CAFF5D82FC93397FB5162D170EC679D0F
-:10E8B0009D911E5F67FBBA1AE376970A79BF7D16B2
-:10E8C0007904C46FAF4AAF80FDF77ED84DA54B1ECB
-:10E8D000678FD266AA57FA93AC2ECEEF655FB32648
-:10E8E000982F1EB215C95EB4527ED4757A3D433B53
-:10E8F0008CFA0CE14B663D9E91603D661D63789FEE
-:10E90000B936444FFB14EBE69E2278B585C361CE41
-:10E91000CA343C7FF1B63C9F30A7936057C07C520D
-:10E92000A407C2D5BFE71A58EE90F1BC5DC6C7DB9D
-:10E930000687EE028C63C85F45FAFD8ECEDE53EC8F
-:10E940006CF657BA00FDD34523FFF81B7BB25DF888
-:10E95000F5CDB87E76DAC92E28EBB6ED63B87D5DCD
-:10E960001D3CF5635CF717CA7CF44CF0B80FB1FEA0
-:10E97000B3D1FC77701A47DFDE5BAD2777CAE3DEE1
-:10E9800021E33DC7693BF430B41F6F37E1C8C08C49
-:10E99000D97AFF02FAB38F11AD6EA05B4B96220FAE
-:10E9A000F66094BBF7C74C6707B1FF02BEEFB4BD7A
-:10E9B00060223D9798FDCE01F0DE5F9AF5E4CFC06E
-:10E9C000F3ABCAE37E19FF9FC8E3F8B38CFF269927
-:10E9D0004FF7A21DE98B7196542ADF97ED885BB63D
-:10E9E00023BB653BD220DB91B7D18EF4C5794DA610
-:10E9F00072BB6C4732473F457ED225CC8B2BA01D86
-:10EA000099CB96C138F361FC6207F6EDAE6C31E04C
-:10EA100077B2823574BA333552038F967A06FC4E3C
-:10EA20005762C0EF78F5D7D4E79933027E076C9828
-:10EA3000A6FD6DBE1101BF23A6B523438F4DD0FAAD
-:10EA4000335FDDA7A91FDC52ACA977E23F60BE5956
-:10EA5000C718CF2F1B9CFB04F24BD671BDF2FBCC29
-:10EA6000B48FA6F85B81FE4F166BDBC7D3D13E9EF9
-:10EA7000934978AE93B6961334F5E43FB518EC3D60
-:10EA8000F1FC61F578E03B3C87D8523286D13E3CC0
-:10EA9000F02FC85396FDC457946F542CCA203FE9F9
-:10EAA000A25EB39F9613B02F661FA9DD37CBBAC6FF
-:10EAB000BED9B19B3BF91DF6D688EBF2C7409E4408
-:10EAC0001CF733C153F720DEDEFE92DBA9C62F1FF1
-:10EAD000E989CF3FC0A6D0CF8E6F1E21BF6B479B69
-:10EAE0007C3882D5FED6760FB7176FB524ECC47587
-:10EAF0004666B4407A30F3C8FC29C48F2D3AFA7DBB
-:10EB0000CE94828A60C4CBF6838B83B5F7A754FA80
-:10EB10008108A5D20F22B232FFBDBEFF07E9D10F97
-:10EB200034008000000000001F8B0800000000007F
-:10EB3000000BED7D0B7C14D5B9F8999D7D25BB812B
-:10EB40000D09B08104260960AA3C36EF4D48C22465
-:10EB5000048C1AC8427804C1304978A48A9AAAB5AC
-:10EB6000D86233211062A4121F55B08A2BADDAF699
-:10EB7000F6B65425A0A22CCFAA5058306844D4052C
-:10EB800014ADA5F7A284D6F6CFFFE73DDF77CE24FC
-:10EB90003BC32640DB7B5B7B6FF8E9E4CC3973E653
-:10EBA0009CEFFD3A134208F94AA4FF8B1F4E0269FD
-:10EBB000047FBE4A81FFA7F4B6A19F5C4D02F6F028
-:10EBC0007686A19D6F185F62685F6F183FD3D0BED5
-:10EBD000D130BE56D7BF2D3473A0E2A4BFC3CFA49B
-:10EBE0008BAF5B1A09095CD53B2EDBEC133D632F21
-:10EBF0001E97D369EA9D97FEB7F3FD25A6F3F1842E
-:10EC000074748A7E5B32BD1E5F42D42C3A4FA7C912
-:10EC10004F04BC9A08EDDFD6C5DA36A23AC6D3FE59
-:10EC20002D9D664F9B44C80EFEDE31BE85037D31AF
-:10EC3000844C329F8DF85EF982A9777F04E69B3978
-:10EC4000904418A75D77F179038D76BC6E6F74914F
-:10EC500080ADB75F8CC9EEF4D17574844C1E7A9B7D
-:10EC6000AEBF248ED07DEF762E76C0BC74BD840CF2
-:10EC700023E4DACD23AA9A461122D1759BE83EB649
-:10EC8000844CA48DEE33EB287B7F96458E734580B4
-:10EC90002B21263DFC2F9A8FFE009C9CA2BF8DC28B
-:10ECA00065D7FB73E2C6D3F95FEA1409ACC7AAD4EF
-:10ECB0003B7CE368BB8BAD4B9B77B25DD4C1A19825
-:10ECC0003874F8283C3B48D7CE3A41D7499FB74AD9
-:10ECD000157100DF4BAD939068031D0D32B487E9C9
-:10ECE000C68F9128DEC6F58D8797381EB6001EE8C0
-:10ECF000C65E8AF254F922C06BCB07D67A7FD8FD64
-:10ED0000660F054A365C4D78CD3A61F204287CCE18
-:10ED1000779A3C00BC3C57BBD810619EFC8FF4F442
-:10ED200099D319AD83171117F4CB07CB8F37ADD912
-:10ED30001336FEFB9E98F8D3D7D05F72492EEEFFB4
-:10ED400012CFFFA9515DB3C742E99892EC663A8EA3
-:10ED5000B82A0949E87B3C212B717F1A1C892B8E2C
-:10ED60006EEE72F0D48ECF5D84AF3E9EEF9D472550
-:10ED700064308527052F8C5B3BDEF7B887B6496882
-:10ED80008608EF7FD0719B18A2EB7ECC71DB6EA062
-:10ED9000CF037FB64AC0D73BFFDC9108F7F7A76FD8
-:10EDA0004D04BADF4FDF1D84FD9929D668DBAADE4A
-:10EDB000E400FA7AB3F308F28F4482374CC882B683
-:10EDC000C9D34687BD9A563990F403B7D7399DEC1D
-:10EDD000E3FCBA87F3EBAE4637E76309AFAF35A67E
-:10EDE000E1FDED8D1E6CBFDCE8C5F6B64619DB1DF6
-:10EDF0008D65783DDCE8C3FB871AABB0FDDB46854B
-:10EE0000D161DA9DA5208FCE275200D07DAD744C04
-:10EE10003747C2E775929ECFAE75EBF96C0A8573E2
-:10EE2000787BB27DB8812F5375FD93BEBC5AD75FF6
-:10EE3000783643D79EF869BE6E7C5EA844D7CEED87
-:10EE4000BA5E377E6669A5AEDF57305FBF3ED189B7
-:10EE5000F265874B40B93C3DAB4ED7BF037E0139CD
-:10EE60006C17FC6A32C0A5B25F791A00FCD8008E1C
-:10EE70008C8F7FC3F1B317F06303BC30F8BF0AF087
-:10EE8000A7ED5700DEF49ADDADEC1E28811CA8C763
-:10EE9000B6356DA0D343E1FFAA5344F9BFB5B10124
-:10EEA0009FDB7FBEB65BC4F53A24C0CB0EBE9EFD91
-:10EEB00016A55B8C87B620AD142E5E5776979EDF25
-:10EEC000C7942D44B9B9A3F3A403E8EDB52F2F4F90
-:10EED000EF69E37E432A27037D1475525D957C69B3
-:10EEE000FDA7E9AD4BCDAF8D03BD1A495F18E7BD56
-:10EEF000FE4B4524741FAF76A90FC7403BF04D5120
-:10EF0000A2ED9C2E6532E06D4F9AE012051C375938
-:10EF100086755F387203DC7F2D6436C1BA0F5C18CA
-:10EF200044601F3BA8DEB5D1716F92D4B51328BCE5
-:10EF3000035D5FEC07BE549D16CF6872F13A52D361
-:10EF400045942B5BC6DA4CC204D0776612180B7C52
-:10EF5000AE203C3BBE4C71C2754B9AC8EF0791DFA7
-:10EF6000C7A7BBF0B9572F64C443DB4482280F0204
-:10EF7000DDA6327F84FD8E87F750B9937DE143870C
-:10EF80008B8EDFD75DEB00F9F25A179B3F7B45C8AC
-:10EF90000170DAFFE52627DCDF919689F3EE1CB7D6
-:10EFA00014ED8B1DDD26A4EB1D63D73833B2709FA3
-:10EFB0001E80DD8EEEDAB5E940D75D666C4B4421EC
-:10EFC00041A0B734A667B774D79223B4FFBC47F407
-:10EFD000039D6593F67D03E0FE90355692C2E06F87
-:10EFE0001E42C8ADEC6132D9A59703255D7A7D62DA
-:10EFF0000D2D983503EC08A067DA9E668ED3F5EFE9
-:10F000007F7765FC4CC00B8537DC7BADFB8EFDE369
-:10F0100040FEF859FB0FC77F621D48AF4DE3D60C89
-:10F02000BF0DC66D71786C12F428E40BDACEED36A4
-:10F03000FBC1DEC876EAD7B1FF1B9508F72DDDCC02
-:10F04000BE3A9FC6F6B3C353471EA0CFBDCAEDAFAD
-:10F05000C9274695C3FB0E50FB09EC8A573C2FC4C9
-:10F0600065823CF38A3A7AA3F0417A39DF49701E0F
-:10F07000FA33601A8543011B42F9D0D77C3BEDDFA0
-:10F080009F6773ADA4A8DE7161D7EE3B683B374143
-:10F090002422DDC937FDFAF5E5FDD4A16BDFFAA91D
-:10F0A000DE2EB11181EB7327CA81BEF867E259AB3E
-:10F0B000EEB969669B6EDE5C12D68FF8B4F6F62761
-:10F0C0005FDA3ED9CAE59A669F6CB528F37D40D7D2
-:10F0D000C15997D0A32BB9FE6D4079B18D104F5B0C
-:10F0E0003A95EBDF1065E0C3F3C7ED08C7DCC766F0
-:10F0F0004C24A8AF9589C00F488C61F680F7F8259D
-:10F10000EC15974AE273F8AB085CCDA743747C2BEF
-:10F1100055F35F810EE7FADC386F5F7AFF41C70075
-:10F1200094FB05A54C2F3CE638887ABEE37DAAE720
-:10F1300005F68E10C5FB6CF805F4FEFB561CFFCAE5
-:10F140007502CA11CD6EA824B285AA3832DDDB6DF6
-:10F15000FE01C59FCF5E3DEE567A7DE5DD8EE1C0B6
-:10F16000BFAF807D80F2A1C1C1EC8318358E2E71B6
-:10F170007B970DF970EB5913B183DFB0DD86744ACC
-:10F18000F9F4FE71F43DDB83CC5EE838CBEDBDEDE8
-:10F190000EE4939D7F60EBE858E1607EC619AB0CEE
-:10F1A000F6F8D6153108E731524CC00CF32D67F351
-:10F1B0007771BCBECDF1BA9FEBAB37B8BEFA0DD8B4
-:10F1C00013A8BF983DB11BEC097ADDC9ED891DA0DC
-:10F1D000CFE8F5C5B3CFBF077C797E7B14DA9D639A
-:10F1E00048DA6658D776A715D76984F33C45CF0728
-:10F1F00073ABF47643F958BDDD70FDA8E1BA7659DA
-:10F2000062AAEEF9A9F1D7E8FA4B9D997A79649E42
-:10F21000A86BCB17F4764385F7063D3DC9617603AD
-:10F22000CA3BBDDF383BDC6F4C063C313F676BD7D8
-:10F230001D88C7ADC753062A6176C2360EE7ADC733
-:10F2400099FEDC16FA22468960477CCAC77DC6F162
-:10F250007186E3E33F46C8BF4B1F0CFCF20593BF2A
-:10F260007DD0B1F6BCF6DCA7FE5303C2F5FA4851D7
-:10F270004226D1DA7FE8786F0CF45F2E5F503A6D4A
-:10F280000D513C7F478C696FA38FAC31373C056DC6
-:10F2900055359367B2101C6966ECBFDA03F2B839D2
-:10F2A000A6E139E8DFD264736D8A073EFAFEAFA0AB
-:10F2B000BD9CB2828D5EFF1435C24F28AB39324CF3
-:10F2C00038FFB316DF700FE84DC137FF563A5EDDE9
-:10F2D00060F53C235DBC9ED80C4163F66DA087446D
-:10F2E000CEF77F1194D80C7A5FFE8580723A4A225D
-:10F2F000A8176CC41700FE21F5F27CE00F62A2FC97
-:10F3000043AF8D99CA50184F6422B9E83CC8DAF46B
-:10F310007D4270DF9F05BA2E0B6950611E5B3D95E3
-:10F3200030949F1F4D5746E078F34C9CFFC569848D
-:10F33000803CA3DBC176D6DDC4D5164B286B2BA64B
-:10F340002F687B3EF5F7E1FD26C732D453EFFDCEA3
-:10F35000E41723D84B3D705E6639130A8B8F18E98A
-:10F36000A783D3C5B6641FCA5FE3F3B900170AC702
-:10F37000AD1F4E1781BEB2EC0364B02BE806C51971
-:10F3800054BE6F3B79BDA326C273D767D5E4660C24
-:10F39000EE6D6705378B354EF4E745D8D716FA3B47
-:10F3A000ECEBE54E5300F07BDE694579D2D73EF2B7
-:10F3B00042FA38442ED80361FC46C80217F88B0283
-:10F3C0006917BEBA269CBEE4FBC3E9EBC58BE90B0B
-:10F3D000E1FC9DB7D210AECD02A32F95D217F4ABAE
-:10F3E000250D485FAA89F89AB390DEF0F9E566BB6F
-:10F3F000CB4625E4B28C147C4F474CF97B0109DFE6
-:10F40000973A13FDB96AEECF55A39C7FE32893F397
-:10F41000C67DED3C3A677808EC89D17387039F7706
-:10F42000800218068BCA9B27EBDA248076E0140250
-:10F43000212B80C03CB03F3BAED3DA5ED62E66E3D4
-:10F440006F79FED10D2AB46FE2FDEA6CD6AFB549F3
-:10F45000FEBC62685B4CD83E09E3E9FB1EF3C8CBF7
-:10F46000006F8FA6CBB7025DE680D142AF9F4D9073
-:10F470006F87F6B20C82FBFDDE04F95B304E6B6FDA
-:10F480001B2FDF19DEDED2E3A7B6733FF556B44B70
-:10F49000DFE89A89F6AC447C3780DE7923C8E251F4
-:10F4A0005B46F5EF071DE4F6FC01EEA7BE09F2E8A6
-:10F4B0002AD027CC4FDDCBFDD4DD5CAFECE47EEA77
-:10F4C0000EAE575EE57ED22BDC4F7A09FCD4ABC082
-:10F4D0000EA9E27112E6A7668D9E5C8A76844BF3D4
-:10F4E000534744F4532BBC7A7D33CDA3D73737A48D
-:10F4F000C519F48B5EDF4C8DD7EB9B52E73506FDCB
-:10F5000092A91B2F5FD0FBA945DD25BAF10567F451
-:10F510007E6AFE473375E39765488847EFF11B75B0
-:10F52000E3723A6B75E37AF1E6433C59D5279D6067
-:10F53000C76D1955C7F1C6EC050D6F1D97C0DB6F80
-:10F5400038DEF672BCEDE678DBC9F1B683DB03AFDB
-:10F5500072BCBDC2ED819738DEB672BC6DE1F1853B
-:10F56000831C6F0738DEDEE4FE6ED6E8DDE89F9D83
-:10F570003F4B38DE368A91F05696281AF0E030E09C
-:10F58000418FB712F370031E520C78B85AD72E3839
-:10F590009361C043BEAEED3D5E6280FFF506BBA148
-:10F5A00052D7AFE16D9A67BE81BEEA74E32E9BDF4E
-:10F5B0009CCCCEFB6BF96D1FB7E3F670BCED02BCC3
-:10F5C000619CC8C3E3115E1EF76576DCCB1C6FDB64
-:10F5D000785CA803F006F61DC75BF3A87368C79FA5
-:10F5E000BFA0E1ED6044BC5D29BF5DEBD6C785A639
-:10F5F000B8F471A1C9763DBF1513BD7D37E94B3D08
-:10F60000BF159ED5DB77133FD5F35B5E68A6AE4D85
-:10F61000ED8084CC6CD05337EA9ECB0ED6EAC6512F
-:10F620003F89F92D1EAEF7FD95A88F5AA631FD48EA
-:10F63000F910EDEF67BF4DED80F45E78BC68F09F88
-:10F640005EEC437F5F93C9F477C77BD508D76CD056
-:10F65000DF91F20B7C5C4EA60BAF363351A33370B7
-:10F66000997B86D1F5984731BBC71CB316820CF045
-:10F670001334E5F4DA49A2D347607E6A2FE5648645
-:10F68000E97DB3AB8180DD20DA1E5A00FB22A2C9DE
-:10F69000837AD7601F917A977C07DCBF6380A78D40
-:10F6A000C2E296CC585C879B6CB6809DD198294F5E
-:10F6B00002788A93193CB62451DF9DC2634B146BC8
-:10F6C000AB145ECFD0B6387001C2AF83C24B4C874B
-:10F6D000F9E3C9DD745D55995606877984E953F5D8
-:10F6E00039A65F7BF421351868FBD968D6BEF18551
-:10F6F0009FCE53137BF56F5DE64BA84FC73887D578
-:10F7000091F174DEF5EA20B033C7D2F5817C34394B
-:10F71000B62745B2BFFBB2C3568F97E7C17EBEC7BF
-:10F72000F5EB180A117346DFCF3F1BEDBB05F09BCD
-:10F7300005F0088B7BCDCC64766B15CC3318ED4B84
-:10F7400039DCBE24C14A6CB7A433FAFAF1DA99481D
-:10F750006F4E0A2F3116D6CFE037FF2E465F57BACD
-:10F760000F6DFDFDD0892FDC9E0EA393EF45A213F4
-:10F7700052EE71A3BFDE973DA7B2F53673FB51B3CE
-:10F78000936D899ADDECC7F558287BE40FC22B995D
-:10F7900042E13AC845305E53ED32F9FD14645160E0
-:10F7A000F083DC2915882B19669709C363B9142ED9
-:10F7B0007F8CF141EFF168837C1F64D0C3C374ED8B
-:10F7C000A2EE14839F7875BF7ABED439D1A09F264C
-:10F7D000EBC69725DE60F0632B0D7EAE5E4F9889F9
-:10F7E00059E5F83261DC421524730EDC27889FB09E
-:10F7F0007EF43B7BE0FC845C85FCCAFD1A23BF36AB
-:10F80000664A0867C1C5FC1A8D1FB4E735F859DD93
-:10F810000CAFEB7234FDE441BD630B7C93405C950F
-:10F82000DAD0F2E6307ADBD4687FAF7434213F69F6
-:10F8300024EF9552E4F91B5D78DDD8E8C6EB138D13
-:10F84000125E1F6F4CC371EB1B3DD87EB4D18BD7BA
-:10F85000471A65BCFF506319B6DB1B7DD85EDB58C9
-:10F8600085D7B64605EF8F322BAA9DEE6B542BF150
-:10F87000A8742BA3DBE9FBC2E096DA4AD71106F79E
-:10F8800064D5A56B8F5CEED68D4F6A9074FDC3EB8B
-:10F89000D374FD098A47D71E5AE5D58D1FEC9375A1
-:10F8A000EDB8B232DDF858D9A76BC778AA74E31D5A
-:10F8B000698AAE7F5751FEC0503F7CFC506320C820
-:10F8C000E0120C3238BD1E64F0E9C2EBE75CFE0EBC
-:10F8D0003207515E0CCA7251D2A1F8B2B3FC5A9CE5
-:10F8E000D923C486CD1F5746E74B0B5F2F9D4FE7AB
-:10F8F0009FF9915E623C41DD7D475A97EEB929A29E
-:10F90000B304F211870B448C7B1D2E888B01FBE521
-:10F910007E8B6B5A16A5C7434745CF26780E1E88A7
-:10F92000202F4F70BDE8186F47B950B14AD8242234
-:10F93000D1B2E76B3B5323C63D0FDD4BAA605F8E10
-:10F940005D2F494017150535715161FE5A45E0CFCD
-:10F95000A56EB8BF2A3D278ACE56D19A6CAD1BDB67
-:10F96000BB2F6D5CED2ABD7DD94BF77E3BEC638CE4
-:10F970007AAF1DE45B5BE2266CB7A5F59F27F98C97
-:10F98000DB619F723BEC348FC37CC4EDB093DCEF42
-:10F9900009713BEC036E871DE7F6F3316E877571D5
-:10F9A000BFE76D6E3F7772FBF908B7C3DAD29E9F4F
-:10F9B0008AF2F017021123F8A9DAF5969FEAEDB062
-:10F9C0006FFAF576D8D2F57A3B6C71BBDE0EAB6B75
-:10F9D000D5DB6135AADE0E5BB85C6F87DDD4A097FE
-:10F9E00087F3EB27EBDAF3147D9C6D6E95DE7ED604
-:10F9F000F033DBA7978B95657AFBB9AFFDBE12B8E4
-:10FA00000EF33F80C453617AAF279F0B7A85D245AE
-:10FA1000D605AA57300EEE6B86FCC9361842F56F34
-:10FA2000A129F816E47DC8DB2281B8D3AEF339E50D
-:10FA30001511E82F47D5D3CD82E3FAF8C68D77E9C3
-:10FA4000E13A6399DE2FB196E9E12A27EAFD924A6D
-:10FA5000A39EF1E9E1AA1285005D1AF58DC9B14CAA
-:10FA600002F97DA57AC74AA85E616D9DDEB1C29D8F
-:10FA7000145D3FEA9D1F64B17A831CBA0E30169A5A
-:10FA8000A2720F7828DC76BD6BC63A11BAC023A3E8
-:10FA9000A8FE2982DF29FC5EB5286A03E4D9785ED6
-:10FAA00084886776DF4EC75B87B3BC08F9D2FC1148
-:10FAB000CCAFD07F80AF1C42DB617A2E3BC8FAC34B
-:10FAC000D6ABEBF703CE06F7B71EF9C8A89CFFC963
-:10FAD000F5C4C49F06A137814CC07A83D0A0CB8ADD
-:10FAE000AF1AEF6705981D9495C8EC206FD24C9122
-:10FAF000E79F08843CBC2662C778E608E27F06E2FE
-:10FB00009CD1071CD369B319A64C003F49CFFFB362
-:10FB1000CAFBCFCF1BFDB0EBA45483DF768DC1AF02
-:10FB2000D3F3BF8D18EC971091C09E441C9874FDC0
-:10FB300008A777381D359D68990FFB7A2989E75703
-:10FB400038FD4CE4F82264F3EE1ADAEF758B04FC0E
-:10FB50000D1B51E326407D51B04186BC43AED7E634
-:10FB600042BC892B3C68979E61F8F1D27F803F2F81
-:10FB700009C317E0EFB81E7F3643FFEF393D5DBC88
-:10FB80002E4647FFB87519E8CA39E8B2EA588CF72B
-:10FB90008B83B21843D7B7D725601E756FB0215835
-:10FBA0004CDBE7DCAC6E684DE24C33AE97C803A685
-:10FBB000503C4CE5FBF5F2BC56472341BBE3C54640
-:10FBC0003B5E096910411EB5B8EF8803FDD831428C
-:10FBD000190EF5691D836357417E7E8B25363152A0
-:10FBE0005DCB4E4B2EEAD38E9D0966893E5F6C76C7
-:10FBF00099E1B9E2C45A11FCBD6BBB08DA05C589AD
-:10FC000004F3592F36060EB3F729588743F73119F5
-:10FC1000ECD35257CDE4987888CF52DB46023B377D
-:10FC200016FDD73D836D88379B6B69E9B7E8FE0EFB
-:10FC3000268844F052FC788827007A20D1E9F1C365
-:10FC4000746ECB4980733DFD0778D1F402E5F393E0
-:10FC5000E1F8C825616DCC2BE8DB23B3F5F891887A
-:10FC60008275162D5DACBE8C8422E7593EE4768306
-:10FC700016DF3FCEED86633CEE7698DB0D2D86F8E1
-:10FC8000CD5BDC6ED8C3ED867DDC6E789DDB0D6FC1
-:10FC900072BBE100B71B7AFC05A236415E711EB152
-:10FCA00087C05F3858C3E0EC5E25F8CB201FAEB4A8
-:10FCB000FB4AE87DDB2A0BCACF91896A13C4C76D62
-:10FCC00055EA14D8877B417B135C9B8ADA12E0FEED
-:10FCD0003CE5F471F0B3815EA6E5707EA7785867C5
-:10FCE00065705EBF38C6B312E85959528EE31219D7
-:10FCF000DCECF41FC03B61912A001DB8158B0EDEB1
-:10FD00003506F8CE837698FC88067AA4F09C9ECDC2
-:10FD1000EBCF32492683BB1A05708FAAE1704F8B57
-:10FD20008FC827EB39DC35B8EC2CBAD9A4D2A16F37
-:10FD300025B2BA89B70A6E361DA4EBEF9445CCBF45
-:10FD40007626F23A41FE5EE37CEF707B765D49FFFA
-:10FD5000F1BA437C5C4FBB9548B68161F394DC6F8C
-:10FD600091E8F35581FB92802FD60DD0F2C41EB4DA
-:10FD7000AFA78805BF4DA6EB0CF23A484D5ECE21E9
-:10FD80001C3686F7BDC5F7D9D77ADE2AB9C122D18C
-:10FD9000796705EE21F03E9BB9C11D5E5FDAC9D7D8
-:10FDA000B766C69D04F83238E26C3DFAF13E9B041A
-:10FDB00076F7C844CF6AA00377A262F936BD3F9DAB
-:10FDC000CA43C905CB6ADF190FE3E8338F13A09745
-:10FDD000AB37033DBC956447B9D3D77A2ED2237E87
-:10FDE00082F6485F7A84CA1FB4876CE59F1C07BF00
-:10FDF000B692347802F4B960966730F031A9B2A0B7
-:10FE00007E4EA3FFC2F36ADAB5D2A0BF1D5E4BBF20
-:10FE10007278E485C656F03BDE02FEC13C2889813B
-:10FE2000FA9C60F99D76804F4552CA2EC00F29B6C4
-:10FE300087465338AC29587D13C06B4DF952970053
-:10FE40007455988AFDC162FB69A8C8E92A5E9324AB
-:10FE500085C17BCD7DA448017827DDED5E42F79515
-:10FE600092F8C74685F24D9785F93DEF94FC3E31F7
-:10FE7000396C7C4676F1BF67435CC7CDE87C8C5516
-:10FE80004989541FACD179535134C6654ED6B07AE6
-:10FE9000057A7FF572FAA842F5559BA7978F1773DD
-:10FEA0007A8A1ADD5D0FE395FB6C12FA67E282969F
-:10FEB000E5B45D05F612D84F8F58902F357E4E6A07
-:10FEC000D0CB4DC5C0B75506BED6F8E9379AFCEC85
-:10FED000E5E318C06B540DE3276D7FC67DCDFB9223
-:10FEE000DA39718418FDBB7717A546333D1666DFF6
-:10FEF0004E40D92459E9FE66717A9AC5E98992E49F
-:10FF00004E58CFA17B52A701BED426EA07C0DA56CD
-:10FF1000587AEDDF14D82719E0A5FB9FB55C4C0794
-:10FF2000FF94DC65E9A5C714DDFBB05E604E781B6D
-:10FF3000E85595DF013B02C299F0D23F9D38BCB72E
-:10FF400099BEAF73581C69F2E07C1F31F928E17C3F
-:10FF5000870AC4015EE8FFEEE87448E193707AA571
-:10FF6000F38754D65F7D4F6A069A9BBCFDE18AC138
-:10FF70005041467CE596DEF1F0BF5233E27FF60A4F
-:10FF80006113C4FFC6889F9FDD4DC7CFAAB4799A7D
-:10FF9000E9FCB31FACB580DD5FA92A7BEBE8B84A6A
-:10FFA0004A177E17EE43C72747CCC402F31C9105BE
-:10FFB000D24EDBB366E9F9A67A85BE6DB4478EC62C
-:10FFC00028234CF4F94F041BD944AF3B372CDD08F0
-:10FFD000F37DFCA00DEB0A09BC2B07F400E1F1490D
-:10FFE00079E33DB4BF76BD8D405E641EB7F7E37222
-:10FFF00092715E9363013E5FD316837EF1E90D43F8
-:020000022000DC
-:10000000C703FE5B0735DC06F5D41FC72AD580D7AA
-:10001000DA35D798203ED21ADD3E05C67F6222AE81
-:100020004DE9B42D3D6481F57451FB00E2ADDA3A3F
-:100030006B5AC3F00FFBCA6171DCE926A26C8E60BB
-:10004000D73C9A23703D4B545BD8FA37E448787F0D
-:100050007ACAA09687E13D14FB2E0F870BEC7B0A32
-:100060008B8BB6267AAA07D3F6470271AD8C87AB85
-:10007000FC01F0A7FA031B7906D14F70BC75F8B0EC
-:10008000A7DBC2FCFF4CFEDE53B1ACFFA43BDA0F92
-:10009000FB3C29B1B6EA76FA919ECD4ADA9C18B6B5
-:1000A0001F61089C8260EB3B1A235953101F447A4E
-:1000B0009EAEABF691C710BF5B287C803FBB5C5205
-:1000C000CB4EBA8ED35459ABD0EF7E7C0AC0F3CE60
-:1000D0000C4AA80917C3A9316710AEE7F4FAE6186D
-:1000E000AC337111C53AA4171E35ED5BBF238C47A5
-:1000F0003DAF32F9C1F84F2061F29DE2777ADE0F11
-:100100002DB5B0DF28D20E7831ED59658775CEABAD
-:10011000B1607ECC497C65204F6B1E11B04D7FD6FF
-:1001200082BEA8E5FCD52A0DDA07747C12EC71F4C6
-:10013000F79ED80BF501355C7E552DD2D3E962B719
-:1001400059C72F3396EBF987EE53D7DE98C3EA3AB7
-:10015000BBBC1FC7837E6EA5DB06B87CD222F837F6
-:10016000A17CF58D08AFAF1B9363D2E2F092250C12
-:10017000FEB594FE6A416FD8497B09D83579A3A7AB
-:1001800002BD5B8F46E33A8DF0FD6787C3A924A9C2
-:100190007A305DCF294AC750FF73724333DA2FF0AC
-:1001A00023EAF8DAD502F4BD84AEF27117D2A7754E
-:1001B000C6B85E7AD1E053B33E791F8C73FF678C6B
-:1001C000449D2752E3CE5F0AF6640F1D19E0037BBE
-:1001D000366BEF49EDA533EC8F406765742CC38B0C
-:1001E0008AFC5253DA93D71BD15FFD32E23B9FE288
-:1001F000B5237D3EE4A13439B7AEE84DA483732E18
-:10020000E217995FFB36C8FD18BE3695C881BA78EB
-:10021000502654EFBAF01EFACB717CBFB1CB856388
-:10022000A599840C5A2E1E2BA537634B8301D0133E
-:100230003637D7BBDB737F3566089C6E2018A7194D
-:10024000105DEE09E06E5C09784EC1E24A00FBE702
-:100250004141A882B8FD00A2B7ABE20CF02059E6FC
-:100260008FC2EDF2682EEF974E4915D0DF29D3FBF0
-:10027000A766835DF4AB1C93E65FE055825F291CA3
-:100280005BA8FF06726A50A0BD1DE8B39ADAAD7E86
-:10029000DCBF07F33AD652813C2EF4C6AFFE51F1D3
-:1002A0008B8BE2603C7ED1571C4C8B0754B25BD4E5
-:1002B000DF51DC90F7AB74533F6700D85937BBD19F
-:1002C0006F729F46BBD4CAEDD2A8D18B5C2C7FC67F
-:1002D000F8478B0718E9CA185732F29FD12EFDCF85
-:1002E0001C6E3F5D4DAEBE92F88016C75F93C6FC94
-:1002F0009E3569B52BA17EED3CF77B5CAA09F138F0
-:1003000067968078D4ECB539DEB3B380FFB4FA8356
-:100310004BF93D6D063F24DAFBB42C47D09F8E5C31
-:1003200046478E02D63FC74ECCF6B0FC813397E9E4
-:10033000DF39540FDAE916A7F3734415449F9F1A67
-:100340009ACBE4AC76A53FC18C1C5DBDE0D0DCB09F
-:100350007CA88DE743EDBC5EB038BD7BF757705F7E
-:100360006675C036B9E6C96F533844CF8AF19890A4
-:100370007E95677E087EF22C07CADBF83409EB5EB7
-:10038000AB12ED1EA47D557E1BFC32B43325D892F2
-:100390008CF2762EE5DF80AB1F7FC7DE7FDCCCA939
-:1003A000F93B058CAE7AE24B3E26BF4DF41FD0D30D
-:1003B000EC2A3DBDCC55FAA79FDC5CFD39AE31A1DE
-:1003C0000B3BBF42BA60FCBB6E04CB479F2FA763B9
-:1003D000207FDB873DAEF9B74E0BF58B285E82F2AE
-:1003E0006EA4F7601AB184E3DB5720EAEA1B827936
-:1003F00024DA45FD9EA085243D48C70D90E75EEFB9
-:1004000002DFB7D81653837AC3AFB3EF0FD1794F5A
-:1004100038FB5E8791CEEF1BBD04E3FF0F5C4741C5
-:1004200046D77F1F249CB15E6FCB7CF0DB1E8036ED
-:10043000D6DFFDFBFC62684769ED6D3F92C3EA0DB4
-:10044000EEC90DFC482DA07E8D9DEA5B3A9F4322AC
-:1004500098A7226433CA6711E281209FC786C1171B
-:10046000FD063DBC8D76BC58C0E228A281EF8DEF21
-:10047000BD3D97F339C7535FFB363E477FAAAED6E3
-:10048000D3FF7772FBA997353EEF84FA89982BAF9B
-:100490003BA08214F3D3223179C05F262504DF27E5
-:1004A000B8185D8184013D686918E041B8D17614BF
-:1004B000E805BF438BABE2A2A300FF22E41303A82D
-:1004C000CFE95242422A8CD7EA0F14F295E3F2E5C3
-:1004D0001E95C7388F54C6F2CBEFCA2404EF1BF326
-:1004E000F87A5F0EF8EB47A99E95408FDFAC42BCCF
-:1004F000AC7B05C1FC80C3A5609BBE2AD4EC82B84E
-:10050000156B575318815EB6B9F5F5AF3B8B1E2FAF
-:10051000B6D2FE9652166F3DD418787715A5B596CB
-:10052000827C9497AB6060D87A83BBA2AC10875171
-:10053000D46FD9C16EFE708568856B70658D0A9B1E
-:100540007E3741DD2C4810775008F8F9D615CD5389
-:1005500080AFDEB5A89E414ECCAB629EB875A57A41
-:100560002BF83DB2545E964CF96853AB19CF199DE8
-:1005700028F97DA214C6879FE732BFE1E0CEA80725
-:10058000000E6B047B280AAE1665D37DF1F03EABFE
-:10059000A7892EF1DDA68793E03D6B16AFF1EC82C3
-:1005A000FE261B9C40256B36D8AB60DE35494BDC04
-:1005B0004BC2E6B50FB736C0FDE0B016AC6B51CA02
-:1005C0003CD6A858D8D7E731909F6D5D911907B4F4
-:1005D000D892601D5107E396FCE9B7B98077C984CA
-:1005E000795BABBBDD02FB1EE95654C88F9B72944E
-:1005F0000340AFF3969F98827573A5B1ABE13AF2D1
-:10060000C2EDAD00FF77793C2694508BF9DA964520
-:100610007576586F4542CACAF0784C4BC162FB18D8
-:10062000FA5C8ADB54B374C0C5F4D102F19709B007
-:100630002EBA9F7130EE8F8D0A1D174AB256453A79
-:10064000A7F509D747F6E6A529101769D96087F4F9
-:100650000C691194F5901F50939D11EBD833BC0C8D
-:10066000EED58A6B8A5542FC20BF7DBEF5D88FD46B
-:1006700051605732FCD9CDC46E09D37F19D9C567F3
-:1006800072C3FCE88BDE9BD082FAA04560FC9BE144
-:10069000FDE247502FFC7CB6AF1BE0B7A655590FC3
-:1006A000F022AA9D0C28EA9B4F42F7911184CAE3DD
-:1006B00096265B55A43AB4D022713AF009E5A0130E
-:1006C000034684C9E5957529101F09355D85DCDD74
-:1006D000337E83FD03C04368435A2CE8C350526DF8
-:1006E0004A0AD02DA74BE3FC5BB81DF062A62FDAB7
-:1006F0000B76E55896F79C91EB73629BB4BBC1CE29
-:10070000FD1AD06D2AACF71F48B7A8E73ED9FA1FEB
-:100710004857C47579F9481F0999319F5AF4178CC5
-:10072000F7B68DD3CE3FB1F8A066F7468DFE6815BB
-:10073000F8ADBE3C2DDF55B017FCF5E95A3EB59C2F
-:10074000C5075DF45FA4F8A0CF101F9C6E686BF620
-:10075000E60D5EBD7D9B28B5FB4A40EE1E103DE0D8
-:100760004F2411A65766940B7EB0B39B8AA2EDB8B6
-:10077000EE3C1EE7E4FED73CBEEE638D7602F92424
-:1007800093A36035AC7F7A3E5BBFA33E3D3B2081A7
-:100790007C67716E526F93306E02C84F203D7E9A17
-:1007A0000F26A1FB9957BF14EDFD5EF835B1F81087
-:1007B000D1FB133E62F01F16317B4CF3B7E61BEC06
-:1007C00003A3BD6F8C53F7E60536DB819EBAC7667F
-:1007D0001C4A91B05B0D68F9003A6EA1B773752899
-:1007E0004CFE7472FD70A4513EB68AEE7FB5EFC721
-:1007F00076A0D336B3DF0EFAA4ADECCE18A0BFB608
-:10080000056219F07DB0B10CC71D6CF4E1759597C8
-:10081000C9BB60B6BCC21B1677AE2C2B3EB62ABC39
-:10082000EE41BEEED8AAB0F5577867E8DA1A9D55C2
-:1008300088A4617304F9F2BC97D9ED66AAF7B1CE2A
-:1008400050FC85A7BFFA1BEAAF7687C3EF41AFDE46
-:100850009EBD7F6CC9C0FEEC166D7F1A5CB47D6BCB
-:10086000FD7DADF37B7FE33A9FF5EAEDB94BADD368
-:10087000B83E6DDD7D8DAF0061350CD659BA00EA0A
-:100880006283D94A07C8A3CA526135E44B8FF07816
-:10089000E29182183CE7BE378DF97BD1F58C6FA2CF
-:1008A0004B6760DEEF4AF17BA397D995B30A04BF8B
-:1008B0004C7F9DCACFDB1F4B63F9DCA6A29FFF16BE
-:1008C000F2D0EF145A58BC97C8D3A785E5B1D659D2
-:1008D000FD01C8271DEBA9D358B6FA6EDA8ED6E40F
-:1008E0004A953EEF306B963E7F5861C833441BE417
-:1008F000CA518D3E7228DC537BE1DE973FD1177DD4
-:1009000010F3D92CD04346F8DC66808FD17FA9D86C
-:100910006EE087CBF46336B566ED85BC9A4AEDC9C7
-:10092000D1803FE8A2CF45CBBFC634C8803C468FBC
-:10093000634267D6825EECA42A00F4CBBA9977AE04
-:1009400087F679AAF7012F7DBD47F3DF9ECF96BFCB
-:10095000F446A81FE89123601F4C80BC6064FBA094
-:1009600073D1E46911ED83997529D9B0AE197AFB79
-:10097000A07343D99399701FEC03FAD39957A7B387
-:100980000F4859E625E0C3E46ED4E8AC88757AB325
-:10099000B395C17961FB71A43590F07AC6EE1C79EC
-:1009A00008F4CFE07104ED7DD4FEDA638950BFA86E
-:1009B000BD2FD7CBEAF049591CD30FFC7A293C6AEA
-:1009C00075D4F75B64FCDE8B16F7D2C665E731FBA6
-:1009D000B03545AE877EE2CCB8C4BC4D5A9C232DC1
-:1009E0007D08AF1B96488F3FF41741C2FE08FE1EDC
-:1009F00081BC6474E2D93D2E3AE433AF929F970DE7
-:100A0000E728FC2AE4436CE502DA4BB6448276CD53
-:100A1000E5FA57973BAE158A03C0DFAA65F1F2E20B
-:100A20007433B6A3157113C8854917060A20377C9D
-:100A30008AF834AC375AFEFCD31F83BEA67A1FE275
-:100A4000303ED280E7AC9D161FC627DACAE9CCE952
-:100A50001087596949C1787AF2AF63DCF0367F2B91
-:100A6000C4CB6D1E761EAACAABAE86EF6654148E3A
-:100A70001608ED9FEE63F19B3910BF8179679DDD0C
-:100A800009F19FD95E26BFC06F03BD39B7EE3BE3C6
-:100A90001E95FE9AB88DBF352E0BE34912C60B0C7E
-:100AA000F1215BC1548C0F69752ABE0211CF779377
-:100AB00044277E87C218DF31C6738CF11E637CE742
-:100AC000EE3C5627ACD953DFCED3DB532BE00CC220
-:100AD00060B097A8A8A47CDD662149ED943E0F156F
-:100AE0007F42EEA2EB70FED00435E0749C21CE78FC
-:100AF00099722B48E5CA29D8C8EE372CE0DF2E9032
-:100B00006B30BE67A4FBC7B8FCBA2FCFA9ABEB080C
-:100B1000362EE7CF47A980E705A3ACFEA8E4DE792F
-:100B20002E973F9ECA911FCE637EC50F81CE894707
-:100B3000C1F30433725D3ABA250D83C9A9B0F88DAB
-:100B4000F1BDDA7AB4F9AF741D0F71785F2E9FACE6
-:100B50002BCAB75BE9FBCF511C8BA82FA9411D16EF
-:100B60009FD6E2E7DA73D59037C8043B52C0FC81C8
-:100B7000763F2C8E6D06BA8D4E54E448DF9B7A3B4F
-:100B8000AF276E8A794CED3D4450502ED4F17C8DC8
-:100B9000369F99B89B900F80B6B5758911E2E6C46F
-:100BA00063B75192A95D2B1288FF3889DC0EF1677B
-:100BB0006BAB05DB44ADDA0776FA22CE17D682A9F5
-:100BC000FB20AEA6F185316F631513A7C2B475ED96
-:100BD000FAFC95313F65B4A7B5F8BA99BE04D6754D
-:100BE0000EF0C1F6EB172F6FBF4FE37EBEA6FBD50D
-:100BF000E8AA3CF31637D49FB44429EB6BE8BAD487
-:100C000027ED18AF70C0DA002601FA0FE4E493DE96
-:100C10001FE379F67CF65D9A1681D5A3EC49F8635B
-:100C20007CF8F905533EA39B9FE549388EEACF0037
-:100C30009C972263E3912FB4FA934309CC0EAC281E
-:100C40005C1CB893B6FF8DD74B5E53F88C96EF1FA4
-:100C5000509C43B0F403E0B2CECAEAD20E7DC38CFE
-:100C6000F564443CB0EBCEF8DEBADD6B36EBFDCA82
-:100C70001BD2F4F6A0D1FEB31ADA43F38D75648A61
-:100C80001DEBC812781D195FBF914F7EDAC8F21AAA
-:100C90003FE775FFBFE0E72F7FC9EBF736F3F39728
-:100CA000CFF373B31ADCEFB728188F3E711DB5E987
-:100CB000627BE380EB8ABEEBC6F3FBF9CCCF9A22D2
-:100CC0003A77819EEA3D67D1FF77C22ACBF479B3A8
-:100CD000D93E7DDE6C6E953E6FF6FF32E5ECFC6C26
-:100CE000388751BF12BE5330639588F9CA752DE716
-:100CF00050CF9E2F406BFBA2F71CE6E730B4731C6D
-:100D0000DAFD6BF3D9F7911CBB122C508F3F635562
-:100D1000EC54889F1357C665D96F15107387FCCFA5
-:100D20004A9705BE0731239080F1D09AD62B9BE7D6
-:100D3000BED143304EDD13E757C7DE04F2F9B016DB
-:100D4000E727D7DC0471FEC33CCE5FF3F2B827C1BE
-:100D50003FFA599E3C17E0D1942757C1B586AF871B
-:100D6000B66FCC1FDCDBA63FAFC7EABF3F5193DFB6
-:100D70004F3C5D9C2C3444AA17B939BF27CEB5141B
-:100D8000E627F69E38D737613E626FC77376F7E67F
-:100D900033F9D47C8CD4C33CCD2F93FAE723D8DD30
-:100DA00077E50BDA7CDFC2E7DD9A7EF3DDC9E6D7B3
-:100DB000CF27DA624780DF7F82D79719E7BB37DF1B
-:100DC0008AE3E87CDFC3F9127BD6776FF8FA7ACF33
-:100DD000CFB86280691DD58AA98BD2136911B1EE93
-:100DE000C4D1E19A067549646A2AD6B11C2EADFCBD
-:100DF000A7384F73B8F4857FC9F334DBF2932FEB38
-:100E00003C8D63265122C535029C2E7715640E0C4D
-:100E1000F58327EBF2FD41B0337ADA668540DECF09
-:100E2000BAFC20DEBF3FCA551DD1BEE0F2ADA574AD
-:100E3000910F52426B92A68AE1F6CBD92CE5CDFCFC
-:100E400008E713CF8DEADE0DAA6966A96016E2D124
-:100E5000DEF608547E66AD9821BA2542BC0D0F4ED1
-:100E60001E4AFB672552FF2E6CDFF9F5BFDE4DD918
-:100E70009514941E6E8EA7E376E4286F03FD16B9D1
-:100E8000A53DD09EE54BC7BAF7FB6309DA79274643
-:100E90005BFD9B922F5EF7EF7AE5F24AF315C8E50A
-:100EA00096467DFE7B4DD29895B0FE3125240412E6
-:100EB00036C57DB618F27F19D9CAEF605D296E225A
-:100EC000DBC6E37D9984E56F8CF30E98C8F0342679
-:100ED00094F80388271FD2FCFDA22BF6F7FF180E0B
-:100EE0006FE3F584E6EFAF8EECEF9F581417391FD0
-:100EF000D052570BF98013ABF5FEFE890DEE6A3820
-:100F0000E77782FBFB27A6507F7F6CDFF9006D9FA0
-:100F1000540E3927EAF201DC6EE771EDD9D9F2C03F
-:100F200089D9E8CFBBE0DA9829C7E278D575139E56
-:100F3000472691CFC992275C32F839DAB9F65CAF0F
-:100F4000320C9ED7CECB8E01D13608F2A2AEDB2278
-:100F5000D1F368BEBEBF3E4FDA93C734E139EACB66
-:100F60008CD35FEE38C9BB99D5E398599D61544243
-:100F7000891BF253E7C7DA51BFB7C2FFC2F46A6AEE
-:100F8000BE3271E2E0F0790CDF57952EEFBD5A9D2D
-:100F90003EE82BD02F9D849481BC7920B601E31EBE
-:100FA000D771B819AFE513395E892B1EE0999AEF16
-:100FB000BB01F0415EDC2CE17760F9FDBEEAFB8D00
-:100FC000EB78D6EA7B1FCFD7978812ABCB23C81715
-:100FD00057A5B9504F6BF6D7D2894C6EDA48689452
-:100FE00095EEB359DEEDCCA4E33E7CC29C0E8F3D62
-:100FF00017432CB06E5F1A9573741F256E65647F5E
-:10100000F211BE4864F2C2352098DC788D635755E2
-:1010100080FB17F1E313DD83C11E7FEE49969FBA73
-:10102000EAC945F6DAB0F99F98C8E566225B7FB554
-:101030002CF8A56458CF59CC43CD904C1E9940DE76
-:10104000F8FCD1B91027A4F6DB686C9FC376503248
-:1010500065425EFB43F7174761FC55F72E1E82F48D
-:10106000CFE1B17045E6B368E7E728DF05FC070B81
-:10107000CEC5A48E453B7E3DD0FF4281F822D909E2
-:101080000F71BC5D2F37DC087476BD6C23706E2D3C
-:10109000586C43B83F572848E0B75600CD433CE76B
-:1010A0000933C69B293C9641FF018F03BF1B5D227C
-:1010B000FFDA0CED3F8E13C8D07EF4F115C3B5E016
-:1010C000DC60E0C70F81FE22AC7F295FBFC64F14F2
-:1010D000EE25B82E99D58BF44557DD79F2934097DC
-:1010E000AD294A3D7E17D135F3B2BE8B58F1533F3F
-:1010F000D6EED97ED2308C44A8FF3AC4F9C478FF2A
-:101100009713997D770BE78FAB9EEC3E701DF0F542
-:101110000A8B0BF0FAB33CDF66584F8FDFF57796FA
-:101120002353C40588BF60395D3B7EC781C4407BC3
-:10113000FA2833E24F2DE1DFF9B89BB89A63F12921
-:101140006CDB5708C8670E677B1518CDE6BC86A315
-:10115000B3E1B96211CFF5879D73E9B78E2CC4CF87
-:101160009FB5C0F9336ACB075789DA77B7884065EE
-:101170005BB0D4CCEDFBCF9E94E9AFCFF2FACC9329
-:10118000AF5A36421DCB51136BBFFDAA65C44AFA54
-:101190009ED008B68EB607054F9304D7A7D743FE57
-:1011A000B26EB9E029A3EDEAC03D5D10E25AF288C3
-:1011B0008D80ABF0F10F974E85FD9C7313FCBEEC58
-:1011C000DC04C6374A90F84DC9BDFEED0749C4AFEF
-:1011D000E54BE11C9D97EB9987E01C1B5DF7B5EA99
-:1011E000B7D4EF40DE94FABD10571BE461F9CCE8A8
-:1011F000A0D9E327E0EFB2FAC8961F08E421984788
-:101200005CDB0CFEB98DD7EB46CB35E83F0EA2F484
-:101210002981060D9975E7D8EA8882F41B5746396B
-:10122000231DAE7AFF38EB12E7D9E6DE343816F824
-:10123000E52F13F5E732FA8AAF6B57F8DE0DE0A71A
-:1012400083E757B751BB1DF6FB32B5DBE1BA9DDA38
-:10125000ED701FBE530D5738CF06D75DD46E872B68
-:101260009C67832B9C67832B9C6783E7E03C1B5C1C
-:10127000E13C1B9E3F2C540303013EC5D104F243C5
-:101280002D1646676A9215FD8D4021C1FC7D30C93F
-:10129000BA6925C4EB0486273596F50763949BB19C
-:1012A0009D3C96E577CD9E11708E7095305602FB71
-:1012B000A9D5AA60FDF289956602F5CBA169C2FBAA
-:1012C00090772182C92352FB66C757B721FC17CB01
-:1012D000C40475E92BE1BBA1208F3F259B587C2ED0
-:1012E00028C2F7E59A6308A7C73ABF4C65F669417B
-:1012F0006B1F52C09F9D043101A4DF030AF42F5ECF
-:101300002EF076D02F8F82BA06DEAF1E7A0AFCD777
-:10131000558676A7497B3EE52998EF68CFFB465472
-:10132000CB40EF295A7FE242689F8AD29EFF7C2100
-:101330009EE7D2D6A37E8AF38592B4F1A9D5D01FB9
-:10134000EAA9935B82EB0D0D66E3FF6D57E7D3E0EF
-:101350002FFFBDE76B56548CE3ABB3087926F662DA
-:10136000FAFA7892A88F87CA822E1EAAC5DF4D8E00
-:101370000543F1FCD90336948BA79208FA217DC569
-:1013800045C3E2F51817FDD524AD9ED910FF240AF8
-:101390008179AB201EE8C1B72AE1E7D388D040A00D
-:1013A0004EDD772646023BD29A1816BFE332A0BF25
-:1013B000786173038B0F06150B51937BEBFAAD0528
-:1013C000BCAE9FC70BB53A066BC1A3BABC81315EF8
-:1013D00048C465988FF62DD2C7032B942B8B172EFC
-:1013E0002001CB50A07F59F080FFBEC0A57C300407
-:1013F000EDFDABD9F719A5D7316EAA9D1B833BF044
-:10140000DDA92ABEE7B65B4FBC3F848EF3AF8C925A
-:10141000E030FEFC65C5F87C1EDD21C4B76A0AF128
-:10142000F02DC9FED4F3BA04F2D46DF23033CD7787
-:101430006F02D80B8B62316F72D35DE91FC03C8B9A
-:1014400055073E47ED4A4EEF2F6D047A1221701971
-:10145000D6CE1AA1D15BD546E0AF49715A3BE629F9
-:10146000E08762ABF6BC17DBF3148DFFAE790AF4AC
-:10147000C7D1128DBE0F54C3F3B3537BE643FA9E1C
-:10148000E4D0DAD317427F6BCF7C4B36C27CEFC0FF
-:10149000978DB03DF529E0E7E2195C5FA91F6D84E7
-:1014A000F95B1668F34FF0C3771EE79BB4E7A3FC24
-:1014B000B07E85686D2ACF68FB3DCEFFC70A5EA867
-:1014C000067EB9B1A7FF05DCEF02DE3E5E50F714E1
-:1014D000F4FFCBEFEF7FF87DC6F64D2438656856F4
-:1014E0002F5F18E5D56F8B981CF1D6FF1AC8952C85
-:1014F00068781ABFEF06F10096CF4A98E503796144
-:10150000173D943388CFEDC238A7719E9B0B595C71
-:10151000FD4C813E2FD662C88BF9787EAAAF798EBA
-:1015200014B1795A4B22FBB119D9257F2A80FA01CF
-:10153000725684F95C1460F07DB2964CE5FFC37D71
-:10154000CABAF8DD4D2AB23C709FFAC52AD899D3A1
-:101550002938210FDB54F438C6E9437916DDF7400A
-:10156000B43CE73AAB8CF2F1635ED731BF449E7274
-:101570000FF0FF30916CC23A0F27E61BCCC3AD4F82
-:10158000A35CE7794FED7B1CD32F712EC2782EA57B
-:101590009BC3FF5C419B05E4B34AD429A55928AFFE
-:1015A00083506F6C72ACC53CB0ADC88279042DFF1E
-:1015B000ACF0EF7F6B79DF49170632FD9EA6C5754B
-:1015C000FBCFFF2ACB77FAD03E68178949B8381F7E
-:1015D000BCD8A726413DCBF4D2183C2F5055FB0672
-:1015E000CE7F7804C1EF0447CF6AC0F341666A1F1B
-:1015F000CA00179E2FD6EA63465EB81DCF8DD66906
-:10160000F5E662F941B0536D8F513F0BD997C14553
-:10161000CB17CF30C8FBC50595A86709B5E347C709
-:10162000C27BFA3FF7FCF0A458A49B8FDA593D7FA8
-:101630006121CF97F03CF0FD1616E76B4DD1D3D565
-:10164000CF27317F65FD244677BB8A7E5E85F633E2
-:101650003179202F469E60DF8583180B9EB7327E3E
-:101660008F396D0EDA754F8CA45BA4B6B679F97B11
-:10167000185714D6B3E73E1D4F1AC06F319B599BC4
-:101680005E54C8FFE77A9599855097B5FC031CDF37
-:10169000ACB27AEFBEE237D5859ABE67F19BF9EE20
-:1016A0007D5D70AEEC6F8EE318CEBDFA24565FD22E
-:1016B000562069F946FC2E21255C0BD88BA9F9BE72
-:1016C000FA428C6F6D96601D9ABCD957741BCA275D
-:1016D0002247CE4B6B7CDF62C84BFBDCECF923AFBF
-:1016E000DD530D7F17A2AF3CC4B3C53D7983E5F848
-:1016F000FE782D6F20DF03ED5E3D4A37E4D5E9D15A
-:1017000085F5FF0BF4688FDDAE76A11DFB755B3FA1
-:10171000A5AB1710AF652C7EF6755BBF3C517E13F1
-:10172000F8F9BFFB3DE9137D5D00A7FB04B9CAC909
-:10173000927B1E419FE7FBA0B09F3CDFA5E20FFF1D
-:10174000176FE83FDE602FD2E7E1FF59E20D0E3858
-:10175000433518F928B108F8A880F1D1BFBADCA345
-:10176000FBCD2F827CBAB0D91F9DFAF7F7F753F360
-:1017700095B222D4838A6917A59FFB8AEDCC9E0976
-:1017800030F8F6C633E8FABDBA78C653F5FF0DF166
-:101790000CBADF2AC46F297FFFD71F7F77207C65B3
-:1017A000664FFC0BD2E703B8BFCD6C7FFF80F76FAD
-:1017B000447AF905A3975EF8303B290C3E0BEBFF0A
-:1017C00031F0791EE1B38DADEF6B80CFD7119E1E46
-:1017D000B6DE4BF9D7270A044D2E1FC27D66313A7B
-:1017E00038C5ED6BEA774F1E2AF5FADD4FE5C86F75
-:1017F00015313BF76891AEFE537E1BEEF7E3171FE2
-:1018000083FE087E7108EE7FDDFCE2D8429647EC4D
-:10181000CDBBF8D9776F49D5F5DFA0EFF980C21BB2
-:10182000E26D6DCB45B42FCE2712FC1E80666F840F
-:101830006259FDDEC5E7C14A099C47B4E5B1EF8CAA
-:1018400068DF07308B0B0606A48BE17A7080628517
-:101850003AAF25727A0B9C6F9DBCF6733C77659509
-:101860006DF8773547BA3D96BBC08FA67EEEB510B2
-:101870004FAD77E1393AED5C9976FE634960DE3E23
-:101880003867DB46E92181BEA7A2D472327CFF46CD
-:101890007BC36C681BFFAE69C2247DDE83C21FED73
-:1018A0009FF3EB597D5C9B99EC82FA8F3A55F437A4
-:1018B000D1F6336B05FC1EE7220A27F0F727B7277E
-:1018C000633DB935917DEF4CFBBBA7940EDAF3C0B5
-:1018D000FE3B2A12FC3B76FC3C99F69DEFA869671B
-:1018E000F17B5BA7E8FEE1FB3DDA772666703AD133
-:1018F000E019D5148770394FE142002EFCBCCDF4BD
-:10190000E52C1FDCB2607110C8BBBAE0F35591EA58
-:1019100052E6B8F5DF4B37C6338CDF1B3713DF4099
-:101920003857575150AC82BD6AE3F59AD144C6EF9F
-:101930005A9C5AFB63F65D8B528BEE3B22C6F746F0
-:101940001BE8D466883B18E9D4889772035E9E3101
-:10195000B3EF0CB6748A1E95DE6E7964512B9CCB66
-:10196000571F31B1BA7922E3779F5AA8C58BE7CFC9
-:10197000E962215E3F97C353C30B210D16E0B70503
-:10198000DA397453C36A384F3A8F9F43BF916CC69C
-:10199000730637810541DFBB1042E4227C5746B213
-:1019A00032E7C045601D7555EC3B1926D803E409A4
-:1019B0001E3121BFB6B877E1DFFD0A0CB3C49E4EDD
-:1019C00063FE44247BB627AE4021713A2C8EFF7F04
-:1019D000F1ABBF2D7E35B17010AB9B880AB8F29287
-:1019E000D9F726A09E6962A1C4CE2758941178DE4B
-:1019F00061C3272AD08176DE81FEAC18A2FF6EC2B9
-:101A0000C649FDF87F258584D54727879240AE7D5E
-:101A1000D0475DE5E1E29EBACAE72661FE9DDABFE6
-:101A20005920F798FD3B23D7F7B3496817B373CE16
-:101A30005A1CE933AFF24B185F087F3F270BCFE703
-:101A4000F8E1FC4E8553D82B48BDEF27C63AF6FF88
-:101A5000A579AB7BB8DF168C22F81DA46032A97A79
-:101A60003E023E9E29617644303D32BEB47E6A67B6
-:101A70001C9FC4FDA1018C28CE58F5F18193809F55
-:101A80003EFF0E1DC7E3E829F2478877DE7E385710
-:101A90002132D4F72ABEF701AFA7555102BD420249
-:101AA0000A7ECF6FFAF74557A4BFA7F8CF7EFD2F68
-:101AB000E87FAE8400800000000000001F8B08005B
-:101AC00000000000000BED7D0D7854D5B5E83E73A5
-:101AD000CEFC24998409061C24E849001B6DC0E152
-:101AE000279000813393842490C0F0A741221E08E0
-:101AF000D0DC5EB44111634B9B0381102222BE8B6C
-:101B0000AFBCFEE824185AEFB37DD4CB6745D48E22
-:101B1000012D5AD4E0851A2BA54110B1CF7E8F5EDE
-:101B2000E5B5CFE7FB7C6BAD7DF6CC39930920C6DC
-:101B30005EFADD3B7E7E877DF6DFDA6BAFFFBDF6BA
-:101B4000492D8B3AAFCD628C6952A0131EB53EFD74
-:101B5000E4502CB39B59E74478A88723F224C65657
-:101B6000B2D84F7540B986FEC558DB5DA77E3F14DD
-:101B7000DA4536A6A86C3A634B5607A97F11F332B3
-:101B8000199E6DD372181BC258C1B9C06115CABA6B
-:101B9000DF11906898F0778741BFF08A4CB50DC689
-:101BA00059560CAF0A183BE984E714F8DF98B64C95
-:101BB000CB87FE58BE8E3A680CCA4B065BCAD9D09A
-:101BC000F4186F5FA8FD35628C82F199D9DF6CFF44
-:101BD000AEC4DB9F0F66470C2F63B79BF550D6B1A1
-:101BE0002CFA33969E1354A07FBD24CAED9A629DB1
-:101BF000EFDA766D1A63679CF6F16BCDF16669AE2C
-:101C0000761C2F1C9BDFD5AE41F97402FC77305E49
-:101C1000BE557350FB95B1F60E5AEF594994C7EA79
-:101C2000583EEE12FDF39769B0DEED39BC3E1C1A4A
-:101C30001B31B2AF3E78BEEAF1BF303CD354A2AB09
-:101C4000C2FA5F945C0BFFAC6D6897752FD259F8A0
-:101C5000F70CE8D17844523BA14F21DB2B3399C0DC
-:101C600076C94097533489B5C15CEB4212F50F7BBE
-:101C70001D7C1EA328A2019D2D992EE8745904E70E
-:101C8000ED8FEEFEF4D29AC70CEB3A8D354B6D70AA
-:101C90001B636D702FEA82F6505E72F73FF811CE2B
-:101CA00025B9627D2511A4BF964CD1EFC38BCE7BA5
-:101CB000EAA56AA2F725B179E653FB25A962BCDB48
-:101CC000A91CC7E79D767C1A372EC3F9045CA1D006
-:101CD0009D84CFB02FB219F93DEC670103F0797BF9
-:101CE000FD0659CFB7F09151A5121FF963E5889D04
-:101CF0008F0A888F061AAE9153C23FD440CEB0BC33
-:101D0000BD6A78CC57B16E9093B86E43A2750B3A0A
-:101D1000AAF559E8DD03EB564539B0ACDE3B10F3CC
-:101D20007697D1BC1F01BE599C9F98919BC03F974D
-:101D3000375EB377B90BE15EA5495A04DA7F8EBFEF
-:101D400019F1E7E9699CDE019F2F6BF0648580CF74
-:101D5000747CCF488EEF9B107E95F0ACEA8E2E807F
-:101D6000CBA579581BE060DEE4F06FA83DDBE147CE
-:101D7000FC0300D4BEE5285390CF80B7028EA95053
-:101D800076B29ABD49E6FD69C841F3363356B117BC
-:101D9000E09BB8D1B72AEC8DD7E79671B8547CC2D6
-:101DA000B8C7D37BEF1802F3F732E6DB08E3371B43
-:101DB000C0BCF07CBF5E8A48B0E6F7B3C3738AA0AC
-:101DC000DC9DE3086C84E9BB1F708F580BED7B72C0
-:101DD000BC0184AE277347BA0FC67F3F209BF8BA79
-:101DE000E73DE4EBE3E9317E3250BF749BF83DA759
-:101DF000853A908FDF5179F967A56BDF43FE6279F1
-:101E0000CCC786021EB007F0AA236D9AC70DF3BA9D
-:101E1000668238C1BE3EA6BBA0DE8DF5B0C4798F08
-:101E2000EE7E74018E61D4BC32CAA2475D4C317A19
-:101E30003D34AFF2395790CC39293EAE6B67F3CBC6
-:101E4000CDA88FFD320B216FF9797B3FEBDDF0B927
-:101E500003C787721E43127CE97358BF6496F1F77B
-:101E6000392CD1CBC2153908571E0BA0BE9DA73BFC
-:101E7000CFC4EAF9639B32C98413E191D75714C1E7
-:101E800033B5DEDE6E761E943DF1F2AC9D7521C455
-:101E9000FB2C0DBA8D63ECC8CEBA681DC079A4D0F6
-:101EA000ED9300D3AE6CC5D67E36DBBB09F10E7662
-:101EB000C52119F0B2D49CAFD937EFF70CFAADCAEF
-:101EC0008312ACFFF87782E90559C86F72C061B61A
-:101ED00071087C306AE77470391D90A07DF37362DD
-:101EE000DFB40EE403394DB295832E513FA903F9B7
-:101EF000E2784CAE8E598EE5452305DF0CED403D72
-:101F000039234D94072D47BEED559CA63CBBBE031F
-:101F1000E559AB18CFD8457CFD3613F5691D484708
-:101F2000E198FC9BDB8EE55B7D263CC60F491E36A7
-:101F30006B5C9F4C7DE9D55EE30ADA037F16059161
-:101F40000FC35CDE25D64F391669CE30EDBAD16AA3
-:101F50005F7EDB1694898FC2DA9F65DCBFD206C034
-:101F600019EC5F498D74AC00E953612390EF5B9AE3
-:101F700080F74743F9608A4B4D47B9EE9BA925E1AD
-:101F8000DF57830E1AAF2AE8CD3AFB75683F814DC3
-:101F900040BA6B696A14FD0DDC5F7D942B9292D37D
-:101FA000FF38A74AB81CE8967C0BB97E9619EAE779
-:101FB000E02323BD452CDEEEC5122E0F5A26688B7A
-:101FC00083F09C03E297C11E6E98FE837008E63989
-:101FD00053E40CB889CFB4B790CFE69B34F4B04B40
-:101FE000630FA0DC2872FB36A2EC96F39D8D505651
-:101FF0008603BF62B982D3B70EFF7D9E8BE32A7141
-:10200000FA0738E635DAF9416116FA86FAD5C1746D
-:10201000BEFE9BD9CDB8FE079DBEA528C75A737DCD
-:10202000775BE5D9FE122EC79E36D7DB35FD9F6B59
-:10203000103F1F334700E5C79ED430C9B353198CF6
-:1020400075A0CED798EA1B8A7CCDD721E5DDCAB032
-:10205000FD8F6E80250C03381ADFED2E9D00EF7783
-:10206000F17EE7C6B20686EF155E8687618CC37681
-:1020700027A9DDD6602ECDCF1E0B783C48FBD01CA7
-:10208000F7DBCBF63AF1E9487B7E849E647FC4930C
-:10209000AD767E14C303F21268425CB7C474C7E71E
-:1020A000B87E53FE039D6E273AADE17A64CAB9F358
-:1020B000367A2B0DAAD42E91EEA0DFA3D46FA1E81F
-:1020C000C79CBAC55EDF168C443628A48F7E48EDC7
-:1020D000BCA08FB26CFAE8C7F43E411F4DAAD41ED3
-:1020E0000F16C4CBD07F3795FBF6EF0C26D167D007
-:1020F000FEA734AE47277CCD9BAC3D89E589D70B45
-:1021000079020D0B417E5C23CAE977D64FB3CA9F93
-:10211000C2C751DE2CD625B3FEEB8F237F1F0F09DC
-:1021200079736429CA93983C62358FDBE4119B7301
-:1021300027D6C7E40F5BF5188E17933F6CE6E328AC
-:102140003F82F3845E3BF3188EDF522BC6BF25120D
-:1021500044BBC421FAA744900F7526CA763BF27798
-:10216000D3FE65A9D56F62EC5F1ED32C7EC689694C
-:10217000758F931E3486B0D3820F72FBF2BB90032F
-:10218000827E847D78EAE093BA01ED5654686F59F7
-:10219000F7256667F672BB276E5F9EE7F6F7C0DB32
-:1021A0008FA769FE7C4E6F5FC1F8FFCB3ABEB0A728
-:1021B000E0FDBF59DF5F6DFE1CC0E70A21BD4FE4A3
-:1021C000F05D41FF8C10AE2FC0F5D4DF00DE6C9ABD
-:1021D000CFF403AE427C064243AE6AF84A09BE2AF7
-:1021E000BEDF2F6A313A2D4F4E07974DFF73695F5F
-:1021F0004AF9BA2DE3CEA7F755822FD4A4FE3AB4FC
-:10220000BBCDDE2ED6FF7682CB1CF722FDEFB4B716
-:102210008BF55F6EA5CF01E0F3D5D6FDFD0AE4484E
-:10222000238D3F8A8FBF328EC7EF58DFFF67DCEC0C
-:102230009274DE4EFBDEC0E9E932ECED9F60FBAD4F
-:10224000D25E3D83E24486C0FB3F23DEE17DAF0BDF
-:10225000DEBF65EEC79345E19FE17B2CFAC75BFCCF
-:10226000136309AD2FEE9FC040F9567DAFB75BF504
-:10227000FDA1505D3BC22B97F0F6FBBBDE5C86EB0D
-:102280004F2C835D7280D6930576C918B24B9EC7DA
-:10229000F2A5C605F8BBA8DFB39C6E92D4BF42740A
-:1022A000F514AF6F75713BF6EDDA8FC98ED3D6A8F2
-:1022B0000EB4E3845E3F1AE27E00D82315116F5FEF
-:1022C000BBF1684812783B4AE3EEE5F83F1696D337
-:1022D000D1DE8CD92DEC55F283E276D55DEDB88F49
-:1022E00071BBAA81CAD3CD7D3E13BA779909EF0994
-:1022F0008E07733D976EFF1EC1E1E7ED93D49FA556
-:10230000F1B2399CCC7BF80CFAAD44AFFC37CA0172
-:10231000E5556621E85C549C05764BD74E4945321D
-:1023200059B94BECF3FA769BDF68F2E162938E9534
-:1023300092E665185F58FC89E0FF437CFD313FB5AC
-:1023400099E07FC78C4F3C8CED397C9F12FC2A872B
-:10235000EF2B18DF55427619C74F0D339C689789CC
-:10236000F382C4FDCD287188FD4D2F213B99C355C3
-:10237000A34B64BF87579C7222BD2F3DC6B464F443
-:1023800031A4C425E24F43A8BFD7F46F033C2E9479
-:10239000D87E78492C5E359CE0F4F1F936148547F7
-:1023A00060FF69FAD192A17C6B3C688F864BA5488F
-:1023B0005B0EFA37DEB25228CF73B05EF2FB18DB49
-:1023C0008C715FF7F30A6B0B506B55B1C475804B82
-:1023D0007F8B7EE422739FE7B1587CC581F11A4B55
-:1023E000FC86FC4077C9FD793B558ABB50DCC6E5CD
-:1023F00097C9AF083EB482E223A9856E9F1BE7917F
-:10240000B3C9CF75FDD08C172DE4FEA503FE433B69
-:102410003AB59191FF36679B1451A1DEADD9E32FF8
-:1024200075EBCF37937FB782F934F01395427BBDBC
-:102430002BC17F6D99A087104F6777D539101FC1C9
-:102440004AEE879DDD35D28BFC97E8479F453F9A42
-:10245000A4541F3FDA7800E36B163F7AED00FAD1FF
-:102460008B4AC08F465964FAD1238BC2B7113D28DD
-:102470001AC9B7AEE953E693BFBC4D666E687F7A62
-:10248000E7C4370AA16C6C5302186E78DFA92DC51A
-:102490007A03FC69F97ADA2686F1ADB926FCA78BB6
-:1024A000CE9722FCDABDD70790DE4F3FE4263C9F53
-:1024B0005E99194983F132B6FD65530AF47F2532DE
-:1024C0001C836C31FF3AD10F672C6220DD9C6623A0
-:1024D000581BEE83E26338AED290113002717F7BDD
-:1024E0006E9ECFC0F1F4481AC37D8FBECAA4B379E3
-:1024F0008C8E1C908EE731D58985054C7322FE1792
-:10250000319DCAB701BF492371BE3C83E800F80E74
-:10251000E3774D13F4EF10BDFF88D307DBAEB4E3D0
-:1025200079C569E39174E4B33DA9F6788378B698E8
-:10253000FCE9413F7FCC80FAF90F5AE5C465C895A4
-:1025400047F87E727E7595301A07F4643DF279B7CC
-:102550001907DE9EC9E3277BCC3849E213183E0BEE
-:10256000FB7F513D01FAB29DE08DFBF11D08CF6567
-:10257000E8CB9F12DCFBF83A7721DC5CFEFCF7121B
-:102580006E07A819144F01513C89EF2FFE3E95F4B8
-:102590005FE07CDA5312ED578ACA480EB95938CA3F
-:1025A0008989E3117EEB87DAFB3D7BB17E6B827C10
-:1025B000FE3F16EA2FE0FCC5E78142A19DBB8AC71A
-:1025C000C1E77AA5972535DEEE38C6A192ECF779FA
-:1025D000538E42B3A803EC958733600FF2717F02EC
-:1025E00083505EBFDDA49D441BEE7853053D7B9474
-:1025F00006921F3DBBE4C806E8FA4613EB2E1DDD2C
-:1026000077DC9ADAE0C933167934B7EC090F08455C
-:10261000D69CD77158C278BDE656DDD0BF3B3DBCD5
-:102620001DE3F5C651997502BCB72EAC3C79C622A4
-:102630001F12C785F998012CFB61894C701F0CBAD9
-:10264000A333308E60481194072B8C534E8C572E39
-:102650006D5CC674D82757E12905EDC29AA08FDAC0
-:10266000CF2D94996181EBF149DA7B8867A08B3398
-:10267000B4BF81981DF53E96834E2DC3971F8F439F
-:102680008A7381174B9E22FBB83B93D1FC613F8B31
-:102690006C80F94BB465AE5E3C67F187296E7AB207
-:1026A00044A57957EE6C277852A7FD99E001DB39F4
-:1026B000EA18DC17DF820F8E9A786F31F1DE1F9EE9
-:1026C00095521ECF13E5B9654A3AE2F92D45A57337
-:1026D0008EFEF87B7EA97D7FDCFE0A5BB959BBD7F5
-:1026E00081F47476A71CC17D82E7EBB86F9FC0BEF2
-:1026F000B19CF838DDE9ACC6AA9FC5FECC29B5EF80
-:10270000CFD26D7C7F966E0B125E969656BA86F18E
-:1027100073B5BD40DB4C2F5CC6102F2EED9482723A
-:10272000ACBFFD027E1B568AFC6BDA8F57103FCF81
-:1027300029B5D8B55F757C1FE6BBA534899DFDB76B
-:102740003A5F10F4740CE56A7E5CAEDE56CAE5684A
-:10275000E253C8558B3D49714D0B1CCBEBAF000EBE
-:10276000C127C8A728374A7648CEDE7CDC7FE0D771
-:1027700031689F7DB819F35156F919D14356A94ACA
-:1027800074ED9A36CF85F278E5AE3F2BA8AF009F67
-:102790008B4B2D72B8A494093D544BEFEB395DFC83
-:1027A0007B9FEB003C77D3BED77238AFB673A7756B
-:1027B000D5E18DA5740E0472C98BF1789FD04323A7
-:1027C00078DCFB8B9D6FBEBFF35E8676E0BC3FA5D9
-:1027D000AB6807DE5ED4A9E5A849CF3755C976BEF8
-:1027E000591762E45730161AC62E79BE99787EDAE8
-:1027F000F7BCD378B9392B6E77279E77269E6BB2BC
-:102800007ECE3FFB9E771EAC2A02386705649FAAE6
-:10281000C6CF335DD3CE9E6063FB9E770E32F52E1E
-:1028200043ED6D596FCF08756F14F3A38679021DC0
-:10283000BC399327C5F1087AC0E38679369501FC47
-:10284000682FE7743CBA80D9F0E8223C7C413CD246
-:10285000F936E265A714D988FD950603E5F94AE63D
-:10286000537F1088EF676CBCBC751ACAE7EFD47948
-:102870009903F87F73D63D6C19B44F3D92C26468DA
-:102880007F44BD87F6FBC847E92A9EF7BAFD967DCF
-:102890003071A908F8E4BE7ED2DF601F3DC8727DAA
-:1028A000F651ED28453D7BB9FBF76451F803E4632D
-:1028B0000FE86B657CFC7DCF088ECFDE9B58A44370
-:1028C000EABB8F806F8DFCCE3CD6BE91EA1B18C64A
-:1028D0000736498CE33B812E1C69EB0D3CD7762DE6
-:1028E000F7921FD5DCD040F83E0AF8367C9CBFF04A
-:1028F0009CEA22FC25E88249432F9F2E12F7FDC84F
-:10290000CE3AD67875EF6B3FFCB9BB14ED9ECBDDAC
-:10291000D77953B59CB202EB3E6B23CB8658F9D6E0
-:10292000E07E0938C0E44F2E64AC33B3AF1D956F21
-:10293000E6A5C0785FC7F1C69431330EA88DC1F209
-:10294000821B5843B2BC976BCBB93F560B2622C5AE
-:10295000558C54CABBACF5EDF83DE5611A37A9D6E4
-:102960003CCC3ABE0476FCE1F61EAC9F0B8B756442
-:10297000D12BCACB14F80995E5D0B845AB4FBDAE05
-:10298000527580C67781F0473FB5165F523E098B7E
-:1029900074921CD0D97C90F777AC95289FB3C64829
-:1029A00063E8D7C6F32AF626E455F0F2DC6CB3DE12
-:1029B00078B1C37E8EF9DA72DB39A6D19BA0DFFE37
-:1029C00048FACF665F58F4D9072F7FB2DC50ACE7E6
-:1029D000989FD2F8276BC57CC1DDC17CEB39A66B13
-:1029E00037C223E2D4F0DB6D3DA704C8A92CE2C8AE
-:1029F000A933B53A8C87ED9BA0AFC0FD914BA406DF
-:102A0000B48F40C16812C56B7C1DE84F83FDBF12B7
-:102A1000EBFFDED70976485399E5FCE3EF0DFED3D3
-:102A200022BE6F1C5F8EF05DEDF002BE7F46F8AEF9
-:102A3000E0F8FE3B80F7605952FFE4AA81EF6D8217
-:102A40002F760EF1EF0ECF876596F38BAF7A3E6D42
-:102A5000AAF6BF71FD5FC13A1C33711D66FEC165E8
-:102A6000B4F7507BF3BC34B1BE69A6E93F98E7C424
-:102A7000EFC4CEF1AEADC3F17AE3E77A74EE153F61
-:102A800047CC1B89E78871F8F3687E718E189E79B0
-:102A9000731DE545F7738E391FEB4759FBDFB41BF8
-:102AA000F9AC2D613E9759BF6AE6448237BEDE0914
-:102AB000345F7742FB1A737D6B674EDD6D58F00112
-:102AC0009DA87D4C2E31AD0EE78B9F3B4EAFB39E44
-:102AD000DF7E6FA6B65B9CFFCF443A36CF69FFA37B
-:102AE000E363C14C1EDF11E7E5820E474ED116228B
-:102AF0009EAE367861FFEAADF4FF37986FDD4C0B80
-:102B00003F7DD1FE317E34F5BEC89F00FC1A88DFC0
-:102B1000A6723569BE84F013C3BD2C827ECB5416D9
-:102B200091F15C221CD019C641637C6D54125FBBCD
-:102B300062F723E6ED46F917BF1FD1B61BED8BB840
-:102B4000FEFE559D3DCF616E9DF57CBEFD955F8976
-:102B5000753F6AE593811EFF7BE576BCC4CA267E7D
-:102B600096DCFDDF46D8EF5F2CA679DE89DDBFA8B5
-:102B7000DB6DBFC7D0B0DB9EDFF15D3B5CACD50E3B
-:102B8000176BB1ED574679EB6E03CA2E33EFCDB517
-:102B900042EAE77EC572920BE25C17CA36B940E59D
-:102BA000EC8187EBB7828E4C3E8DC1D9273FEF9BDE
-:102BB000BBEDF9790333BF452EBC8DFC30F078E7CF
-:102BC000F73B04DEFBBBDFB15815E5C6BAFAFC2FB4
-:102BD0003F2FE6FF59E5C9975F07BF2FE24ABC2F99
-:102BE000C236D6D9E5CF65C3E72A4F2A7F2EAFFF7D
-:102BF000A0F27EE58F0FC76DF63AE83E8AEE674990
-:102C0000EFA33495F373A9187F9AF751163C9CDC17
-:102C10009FFEAEE94F8B7877D0757E85F5BC6B74DF
-:102C2000398F6FE796C7F25072697D8D1CBE00CA5E
-:102C3000433CEF610AD380A7162E18918DF035FF23
-:102C40008E8FC7FCE027A7C7C7AB36E713F3BC34AA
-:102C50002FBDC69AD730D69C27109F2F40F3ADE7E3
-:102C6000EB9007ADA67B5E31BFDAF831E1B5C5293F
-:102C7000FCEC4EE2EF78DCB883E4CE22B7A0FF276D
-:102C8000775BFD89DB7EFD14C9370C5FE0395EBCE4
-:102C90005F7BDDE5F42B2B37F5F12673BF8CD87EF7
-:102CA000CD44B82FD5DFE24747A5ACB81FBD6F8232
-:102CB0003607FB833F3DB7BCE0D2E3009E16119E72
-:102CC000D6DAFD114BFDE2725B5ED2F9D517CB4B24
-:102CD0005A61EE7B7F79492BCA6379242BCA2DE791
-:102CE0004AC17925E905182719E6487A8FE21E734B
-:102CF0005FE3F95DBFA4F5B408BE33CBDB3379FDE8
-:102D0000B77EFD6C9DC9576BCA2DE717E2BC85E500
-:102D10001F8E629CC7925FA439AC719F92534EA4E0
-:102D200087A5DBA4A4F9337DF8A5D51C7F5B6C1FB8
-:102D30009BCA797C5FC7B8E36231EE3736D0B835CD
-:102D40002BF8B8897CB3D5C4DFD6389EB6129EB4B2
-:102D500058BECD8358C69401F7F8F8F8E27E4FD0FC
-:102D6000197E01CF755A0C4945F9AA372EA3734530
-:102D700056013C09FB141C96BB0D4587986F5C05FA
-:102D80009F0FFE598AEDFCC042C630B06B2B96D126
-:102D9000B9F3248DE7AD4CAEDA200F5129AFE547EA
-:102DA000B8AEA285EDCDB8BCDB6A7F2127CB67E941
-:102DB0008EE5B3B0B7460D05FE36E1C37B216B61EE
-:102DC0009E7762F92C5565EBACF92CE12F97CF2259
-:102DD000E27F4B428057CBBE8D34D739B282E33588
-:102DE0007E0ECCE8FCF6465633EB268C2FE3BD2D49
-:102DF00078DD6DDE73BB90CD2278FEBF617A2AC587
-:102E0000F17A33199DABC28664544FC23C12FE4B1B
-:102E1000195D4A715C37AC0BD781E7B2D1AFC1F015
-:102E200072EDA068127A7E234367012FC6FD8DCD17
-:102E30000CCFD5F447E87CEE86157FAEC77997EACC
-:102E40006E15496071BDAF8CF2B856079CEB300E21
-:102E5000E9979986F1EC2AE77BFC9CC643789A5B5C
-:102E6000CACB022F6EA6BC67C58B92506E3CB16177
-:102E7000CB214B7B5734251DCF05DF2E4FB7DD2BE4
-:102E800062B297E8E082DF11C173A86E85752900F0
-:102E9000479D2ED3F97BE7B635AFE3FDB1A57E257F
-:102EA000E0807596344A94FFB5D8C7F1F49726634D
-:102EB000CB21B0615386E5D239CC059F87A2F12D95
-:102EC000B59D14B7077AE95630AFE70199E1B9B774
-:102ED000C87F9A67D28BC063CAB28F092F17F03CA4
-:102EE0001CF1529849795073001FAA8FCEF93721EF
-:102EF0009E525943F41A98F756BF83452D7168586E
-:102F0000BF2D8F0CC6A6BC3385DED8EA093FA90FBA
-:102F100094F07C34B92A8AFB7AA190EF2B94034871
-:102F2000EFAC94D3A9C07F6A029DBA13F2C312E931
-:102F3000B40FFE2BEC78EF5458208AF4764C26FB25
-:102F4000A277A7924179573B1D9477C55884EE31FB
-:102F500075B2C18136949B5189CE096E33F126F04A
-:102F6000CE58C3E6E518E76EC80860FC9F391A36EC
-:102F7000637ED4E2481AE5DFDDCEF6521ED41DE8AA
-:102F800021C3BC77329F0BCBCB59809E12CBA7FBC2
-:102F900025B7EA12F185CEA2D53701FEA2D7393383
-:102FA000AD7955FDE635C1CACF5ACE23465598F2C4
-:102FB000D2A3FB799EA76EDEFBD1283F28B3ACD409
-:102FC000A32791B7A545FAD72B0A2C7918BE064638
-:102FD000E7D345E1311543E2FD9F9AA08DC5F2E4A8
-:102FE00042ED166CBF07ED3CD0078B0E8F7D02F5CE
-:102FF00059CB046D3CD627CAABD3FDE7DF451B8117
-:10300000EE7A505E511E613EF1E140E5DF9555F4E8
-:10301000C9BF2BA7F598F977279DFC5E19E5224FCC
-:10302000657DEFA735DE46F5E27E5AE2BD34F62334
-:103030005E8605196DE3F0FE6E03AD5BE03D113F6A
-:10304000CCBC97B6C4FF4A8F347600F2D67C60DCE5
-:103050000DBB187D18FCFE72F59A9E2CCA235428CD
-:103060008FB02587DF5FDE844D30116814B7070706
-:10307000557239BE25B3C11F80FA2D4E9E0FC3F283
-:1030800074B6604C7CDC4195B238176A403A00BB9C
-:103090008FEC2561AF8A76F7997AA1B14212F7CE0B
-:1030A000EEC7F696FCEE46DA0F6F34E210E776FCD8
-:1030B00047E740C27E383EBC81F269DC5A727BA190
-:1030C000B922A6CF9B69FC9D429F6B9B70FC19D7D0
-:1030D000F816229FB94A64D6817A6CEE5D24779FF8
-:1030E000C1BC51B06926EB1B4A86C27E3F52619E2D
-:1030F00037D56722BA58B7C6F349A3C50D7ED47732
-:103100005B8625BFF77DB282DBCF13AF3F2FE3B8DD
-:103110005B9681A7320EF167501E9BB1086409943B
-:10312000C1DD3F84E7321EB4038A502FF2F6BE7A27
-:103130006803FBD865E22B7823D00FDACFA3EDF933
-:1031400048E229DA25E65B81284FC77527E6B98969
-:103150007CAB1EC5480F24817F6ED95A0FE56B6585
-:103160002FF7A09E6CD14A68BCC4BCB72DD96C04A3
-:10317000C29598D726F2A644BE9418F7B90A4E27EE
-:10318000226FCAEDE77A0B9E942713AD50CDFBBB9F
-:10319000F6FC36915F83ED29BF269BF1FC1A7F0375
-:1031A000C37E6E2863FBB0997F9698570572E8201E
-:1031B000D1411FFB88919DD15264E60D306DF332F1
-:1031C000B48FF0FC3690C4BE0281807AD005FA0933
-:1031D000EB15797505A6F27C593BAAB428DC83F07F
-:1031E000B9FC3139FB3B82372E67DF35E5EC09ABA3
-:1031F0009C75BFBAF509B4BBB7489C0EB700DE9FFB
-:103200004E421F1F98FCB6253339FD7C6ED26BCB26
-:1032100084F08738BE96C5EF777C513BB3256E6747
-:10322000723C0E909D09F8F8CC2AA7011FFF2F19B8
-:103230001EE0B709E58625CFD45959D07F9E696233
-:10324000FF2BBD277C0DC80DE43FF0077D95E40FF3
-:10325000723A16F2387EDFF6CAE4F53107C85180BB
-:10326000076D026BFBDC4A2EE7C64DD5732B492F49
-:10327000F3FBBE5B83FCBE2F8B6AA4F78FA7EB35F5
-:10328000C8A72C6FFC25E6DB60E6D3EAF56192F374
-:10329000F32FD17EA339BFB9DEBCC1A43FB64ADA51
-:1032A000AE54395EBED4FAAEABD42623FCCD7A98A8
-:1032B000BE97B025CFA11AB0B47F9AAC17E3FB2D0F
-:1032C000791B69FFDA80E024909B731CE71FCA9585
-:1032D000281FF85969103C3DE0B125A1EB59959C98
-:1032E000EEC18AA57A7642F35BE31C6B4DFD16CFE7
-:1032F0000778FA09EB3DA61595FB5618163D86F1A1
-:1033000092A793D0C5C24ACE3FB27B8D4D4F26B611
-:10331000BBB5D245ED56569AF10853EF2D72733F67
-:103320008A1D01F82C7A75DCD4D0EDB4AF063324B5
-:103330008B3E14FA8F6A2CEFDD7E7EFF841DB38FE7
-:1033400023D6799F49A7625EA0D755C81FA077BF33
-:1033500081F388FA4532E3F18E6E3BBE009ED59C28
-:10336000CED88A587E96051ECDC1C78DC1D1638740
-:10337000E33E733FC64DD5EEC371401FAFC3676BCD
-:1033800008E82D095EC71784BE8DF50A335A73739A
-:103390002E6AAF6EC076A26CB1579B2BEDF6EA2673
-:1033A0005C2FC8D1CDF87E4F6AF2797798F81AB0C1
-:1033B000EF065C269F3F88FF4CC22F6DBDFBD2C637
-:1033C000028BB9DDC6BDC497F9E32FC1579C8FEFBF
-:1033D000BCBE81F4DB0BA6FDF1829329985703BC98
-:1033E000154896EF73B452D81B91E18897E7FAB16C
-:1033F0003762EDFAC9ABFF1ADB9176257647DBB46D
-:10340000E36964777CD29186FAFDB933A1A476C7CB
-:103410000BD93B8627B33BF6F76377BC6ADAA7077D
-:10342000DF77911D517C8EDB1DC5E776C8683FBCF8
-:1034300059A9D27A8ACE74CB3AC05D8C76078CB308
-:10344000DFB43BB03DD91D9FEC9011AEA273DDD42B
-:10345000AF18CA687714F56377001432E2E1D9E255
-:10346000B67FC5FD4B5CEFBC897A8F956E0B7BBB3D
-:1034700029BE23FAB5E56D4CD369BFEDF4535AA4C8
-:10348000DAF2E20B7B39BD27B6EB8FCECAE4AAD6BF
-:103490005E58D75696BE83F2319586C7B16C180A2E
-:1034A000FF3E1E7E5F039EF7CF051832B15DC34F0E
-:1034B0007A51AF186E1F7ED7E02FA94BB99FB396F4
-:1034C000F99C53E37288960EA01921733C97C7D7D5
-:1034D0000C76D2F7D332088F8D3E11CFD951910B94
-:1034E000FDEFFFDA28BAF7137A040682F2D46332CA
-:1034F000D58BF8CFEBC318E5E703FFCEA986F127FC
-:103500009BE3839ED3EE85F68B4C3B6CA6ECA5F635
-:103510000FE6F1F6538DF3F5582EEA75A978BF8CB6
-:10352000C9EBE5BB316E8BF608B47FF0F9709907F3
-:10353000EA538F032438DE0917C52F447CA1E0D855
-:103540005EC267DA19972DAE910A122F6AB15B5CE1
-:10355000096526D70E4A269FC433310E71ED2CD350
-:103560001F1DCB6EF91CECAC0B6C7D2BAED13D3A24
-:10357000747037EBDB5FC419CE4FD446CC827D1C10
-:10358000E5D4C96FD95F01B8867DDABF73E7ECB1C6
-:1035900088F71D0AC5754F7E3B8DF6E9C0234A3B6F
-:1035A000C6934E029FF2F8ADB112E9F5403A13E727
-:1035B00040518CCB1D88DD67CE5EA959CAE35E2BD6
-:1035C0007C1FF5E08121A2FD8F79BD281BFFB4127D
-:1035D000F3360E0CE3E525AF3DD369101DF72AE461
-:1035E00057379EF626939F9366DBE9784EE11A4E95
-:1035F000C797E807F27EC6AC24FD52AAB97F75A032
-:1036000016401A8778D24B67015FEFEFB9A7750CA8
-:103610004C3571DAB7BB498E5ED3BB3699DC5F306F
-:103620008BDB53D1E208F95BE0C3737F97298730C6
-:103630007F750E53C7A35FFFF0F4E77E3316E6797C
-:10364000A368F47839095FDF3D2B97C689C37754A7
-:103650005E8E72E9A3F716269303DFAFD417DBD78C
-:10366000C3CF479B772884FF0766FFDF2730EF2112
-:103670005ABC83E277FBFFE460E8AFEC1FC3ED7E4A
-:10368000BCA187DFA51C00F8764E4E427700DF5DB7
-:10369000B30AFAC2377936E3F9A113B56F617D2217
-:1036A000BC2AC6B9015E30AF022847523EFC2FDD6E
-:1036B00018CFDCDFEBA0A0CA85331D3292605B4FD0
-:1036C0006E299AAB33AA4EC94852C5BE4736E3D1DC
-:1036D000AFBE5EB6F1DFE49E545BF98E866B6CE59F
-:1036E00025F5C3E3FCC8F01ED0485BD9EDBFD95621
-:1036F0000EB209B6F2C2AAA9B6F1CA7C25B672B951
-:103700007FB6AD7DA5BAC0569E9DB7C4D6BE3A5011
-:1037100067AB0FE78F53F00A1FD0E5F771BFD38E69
-:1037200069C4E75B7AEEF1215D448BC3E44F1F4F20
-:10373000EFCEC678F5EBFD7C57EED42CAECFEEBCC9
-:103740001E4C239493A0CF3766C6DB07737B6DF1C5
-:10375000F8C3B3B87D7A7056623CBEBF7B705C3FE5
-:103760005FEEFDB7443D3CF7A67B482EB52D942374
-:10377000789FAA39EF2D2FDE1B7B7D218F23B46527
-:10378000C33ABD948F41FC7570D16D23F05C2D352B
-:103790004FBF06E5BFD0DF257911761AEA537D11B8
-:1037A0003612EF9741B9CEBC675692CFDFDF68BEC5
-:1037B0005F854FD0DB332DF84AD4C741CFB897C1CE
-:1037C0005D60D3FFEAA3EFF72DCCE7F19ED24F2245
-:1037D000A5789F7AB6F6D2217E6D9ACB9F378AFF65
-:1037E00098D58FDE7ED3CEAF47891FF69F997F5144
-:1037F000F9FF87261E5F7FA6C9C3A2B0BE134D3E48
-:103800007AFEAEC94FEF8F36A9F46C69CAA367B4CC
-:103810002940F5FFDA5448CF434D1A3D5F69AAA00D
-:10382000E7E1A630B57BADA9869E479A747AFFF191
-:103830002CCE97570B3C5A9E8827840F3A24C2EB14
-:10384000424CD59D724E93ADF21DF0FA6932BC5ECA
-:10385000A91E8916EF1D1EE67A2A291F0D9D2DEE41
-:1038600085713B798E4E323F069F0BE37359F1F819
-:103870009C1B4D9AC104E7A0D9050307E701337EDD
-:10388000732093D53CCDFDBA4D12E91BDF382ECF06
-:103890007F100E913C1F322EB93CCFE923CF979178
-:1038A000DE6287316E8A6945288CD7E1FCC9E32145
-:1038B000C6A09C8BE281CE2B051E2CFB15B8123CBA
-:1038C00024AEBFB4489B8CE3E03D14E7E0BE7AE44D
-:1038D000C6DECF348C493D9BCFE17DF8BDF983D066
-:1038E0005E7163308AEC1570F00A71BF99698FB40C
-:1038F00077D667F71DE70FC57B49AF3F18B3739EB7
-:10390000203B26B11DFC0E111E506F59F090440E45
-:103910008493ADBF4C7EBE7723F43FD0CB285EA608
-:10392000A24D0DF03FA7F0EF341C38E7203C5FF0CC
-:1039300048241FDD0FDCEBC1D8F6B3DFE5ED8C6A60
-:1039400089EE2FA475ED57D14E0DF6EAD7E0F7C6F4
-:103950000AA3954EFC3E6868DAB8408A850E428A12
-:103960005D4FA2A51AD33B140C1B9C50BE2EDE5EED
-:10397000C6FDCF8D9773E8DEF53FCE063A9D7FBE3C
-:1039800081A9F9667C35399E564B96789BC202AD6B
-:103990009373C8EE3C741D9EDB8C661199E8CA20B7
-:1039A000FF5BC02B7BC3742F4FF8E99F4ADAFDB34E
-:1039B00093D80FAC5EA37337E670D0B95BD304BD68
-:1039C00069369DCF279CCBF85EF93F12E8B45607C5
-:1039D0008BA27D6164B8087F89FB35B9B07213AEE4
-:1039E000CBFFA5FDFA1D92F53B0137AA33C89FBA5C
-:1039F00000FE14DE436956F8FD28E3447AA4938060
-:103A0000647968B7DD2FDF1CC0FDFF7EDAF7C83FA1
-:103A10006A047F0BFDAF6DA61CBE3F35A383818278
-:103A2000DAE66CF81F58DF22B17007FA5B29D74736
-:103A300058461CAECED95C9FBBD91D8390CFBCBE6F
-:103A40009927CF4C48E6EF71FFC419DBF76C1FF9DB
-:103A50001B66D9EBD2FD98F7D8326EF52EBC8F6578
-:103A60000CF1F0F34E25ACCE03FC3C64DEAB653EBE
-:103A7000836559EEEFCB4C398BF1D9563066F07C2B
-:103A8000F79709F038AF101E174A18F447B35C11C6
-:103A9000CCAF51511E015CAD7E07F1CD2695F3FDF3
-:103AA00026AFE6F125D9B72D884777FFFB29E76CCC
-:103AB000F2611C7B87D7417CD9AA2A5B73A0DCEA20
-:103AC00055F8F75A554745B27CAD8F6673BB099AD6
-:103AD000A4507E53703ED931FDCDD366EEA728A702
-:103AE000E6EB1AF18F1A08E37A9ABD5912C63745E8
-:103AF000FDAFCDF1459C78AB6917A5E6ED8D62BCB5
-:103B0000A665D8AA09882E0FD83967E1BD277F2F6F
-:103B1000D9452D433C35C9CEBFCECFE671B6ADCE2B
-:103B20004005E2736BBA831980BFAD39C9F5608F68
-:103B3000B97FCDEAF830D12DE063B4D4B7DD6F4C56
-:103B40007DB9D9B9C38FF7D0B68EBE95F2BCB68E0B
-:103B5000E072B7F1C889CE0DF9C80FDF62FF86FCAD
-:103B600090A5D0BEA92CE041FDD5E2537CE8EF4FF3
-:103B7000CC5AE7095AE497A0FFED6887C0D3396CA7
-:103B80007E0DD2E385C2D40022BD4C3E42DF0969DE
-:103B900009803CCDC13CA4069FF5FE3FD8D37215E9
-:103BA000C0951E70D8ECED4185767F4165BA87E8F7
-:103BB0007318A7A3FEF62F111E2F4A9CF117699FB9
-:103BC000A9D724FB2EC9B82A8E574137CE4BD0CD6A
-:103BD000A5E0B7E9BBECB8BECBA91AB10ACF2F1E3E
-:103BE00062BC7EE491F39DE8AF2796BF2C7F362B15
-:103BF0003B481E378F72113D25F6DF9AC3E1F9600D
-:103C0000F647341F861570DF323D3C8EB4BD7070B0
-:103C10004A32793B6BA25E5465B18B324BF7921EF0
-:103C20001D5CC5087F5E35EC1B05E3788FC940A39A
-:103C3000806FC7677F3DA55E391E951D0D2CCCC7D3
-:103C4000233983BFCF40BE6598FA64CB0D6F30CC6B
-:103C50009FD93E5209C89487702470313BDA5B6863
-:103C60008F137DD138504D95998F92C252781E5046
-:103C70005548A1FC1B07D79F1AFC3FD4BCC22E9904
-:103C8000FB3FD43C5A52F1158F7F65D5325A4F2CE9
-:103C90001F05BF2783E3E88CEC0CBC108BEDAE5BFB
-:103CA000CDEDA86CD62BE1F9DE0D98952323BD73DD
-:103CB000F97981653B281F07A6C17C12C97090BEA7
-:103CC000FBAF379C9482F0767BD1AA71B83F89EB29
-:103CD000585365C6B362EBB8381E049C034DA74227
-:103CE0002F377BB89ED54021A7A0119C10D72C93CD
-:103CF000D7535CB3C570FB500F372BA077B3A877B1
-:103D000098E2A00971CDBFA4F0B8A7B48EF9A4229F
-:103D10008A6BE6E13E35B2D400C61D0729BA07EB2F
-:103D2000D346298CD355C3643C3F89FBDBAA97E774
-:103D3000BF35529EE0AF50AF41BBAECF2E2E8FF6B7
-:103D40005D42AFB51D1BE5A5B8B9A72E0DFDEC670B
-:103D5000FCB947D06FB9E0E1F95BA25D57C2F74CFF
-:103D60005A4C39D75365C6C753FE2263FF197E5597
-:103D7000C13CB990671CC9F76629F93940AF29DF02
-:103D80006E54DFE474B65A7C876C35C9FF77D34D27
-:103D9000FAADD79750BCD8B4E398A6A9BE4971FB39
-:103DA0004DE84BBFE233EEC271CCFCA93EEBECFA1E
-:103DB0000786DF57617E4BDC3517E71F14CB9BC3AB
-:103DC000F913EDB6FEF0D966FABDCDFE10E55D5CE7
-:103DD000409995E45C443CC1FEEC463955D06D9762
-:103DE0002F697976F9D2EA68A03C2EE366E6C33CF7
-:103DF0000F5615F05BED5FB0438F571133DBEDC904
-:103E0000FBAAB9BCEBCA54158CBF9478820CCF1BAB
-:103E1000946C9DE17EB8FC818BEEC7CFABB8DE6FB2
-:103E2000C95B1E467FE5E1E9DF24BC4CACE079A527
-:103E3000A21DE8CB0FAA2C7E8BC83BB8ECEF23F970
-:103E40001C948F78B9F1A1B6692BF9F791FCCBE9F5
-:103E5000FB48CF78F8F791BAD2F534B4BFBEE8F793
-:103E600091EEAEE6F41AF27CE3E08C5C0B9E7A7481
-:103E7000CA0771F9CFD3B9CC0C337F24310EE47665
-:103E800037D0395AB4B86189350E2CF0F77393AE38
-:103E9000FF50AC539E4F7F7FDF41B4438CE1BADCCF
-:103EA000669C734BF1B709FFF32B3229CEA49871AE
-:103EB00026D7799DF27A3B27EAD7565BF49D3BDB08
-:103EC000207D97F63DC6EFAF7FCAEFAFA76D6421A7
-:103ED000BCAF1EFA6C3C9D3F85A229C467D33F0945
-:103EE000D0F7A7CBE4A75A73A1BEEB9842DF85EFCA
-:103EF0009A9E9A857AEDE363DCBE4DEBBAE9C82D54
-:103F0000502E3E5687BE3EC81D806570DF754CFF43
-:103F1000C4F1A5FCC702F41F2DE72062DC5F361D4B
-:103F200026FAD8D7D44DCFFD4D517AB635F5D0B35A
-:103F300050D14A703D85DD7426C9A69C817A0B1C40
-:103F40008527A0BF851E864CD4B56AE2BF6E5BBBD9
-:103F5000B4BC1E5B3BF05F4BAB0B308F87E3D3856C
-:103F6000DF0D83F1E7F6B0CD92FA1F4A5EADAA1ECF
-:103F70001879F58FD505179357FC9C34D4637E27A9
-:103F80002C811F1DD52AF90D31BE34CF4B859E6E75
-:103F9000C57F823E6DCEF826976FB17C0C7EFF50B8
-:103FA0007C677EE3EB1FEDA1BCD277CC7A83FD4426
-:103FB000B3D433F6C92ABC0FF2123AAF60879E7BA6
-:103FC000BD6B15DE9BBEB52653D100BE123C58CD4D
-:103FD0008CDF7F11798A8978FB9FD59CAF8FE7FAB8
-:103FE00028BEDE92CBFF5E4162BB37ABB9BC409AC4
-:103FF000B0FE1D8FD47EEEFDBC2AC635F1D6EAE2B6
-:10400000F907FDDDEF78ACFAE2F73BFE60D65FEA38
-:104010003EC72FCD795FC4790B282F720FD285F858
-:104020003B1B51F37DECEF6BF859D2717E6ECADD0C
-:104030001BE7F8CCFDD414F33BD47B893ECCBF877F
-:1040400020EAA79C8BD5EFA3F9627FF740A7F88FF2
-:10405000B85FF7F3EADFEED960F99E574BEC3B8986
-:104060003C6FE95313FEC4A7B85F12FB1E147B6BB1
-:104070008F66F91ED44FAADF396B7EAFEA10C16795
-:10408000DEAB79348E875FD3FB84EF0374BDFEDA39
-:104090001EF33ECE6FA8BE21F1BB5BEFEDB1DEEFAC
-:1040A00079B4FAD42AB3FD515AA7F99DAE247461AC
-:1040B000D2ED993D789FF032C67B97C633BFB3B53A
-:1040C000D9E4A3FEE819DA9FA2F6B1EF0FD7795031
-:1040D000AFC4EFF1BFBBC7F6FDACFEF1F5475AB771
-:1040E0002EE665667E13E717911F26E8C23B87EF31
-:1040F000C776931FF0FE1FF55F316078F88CD69578
-:1041000070AFE852EBD837212CCF4138FCB1FC62BC
-:1041100085CA5F121E711F2C913F86CF91445EF3BA
-:10412000609A273BF61DCE6B06625E1877048D13EE
-:10413000FFBEE7F57392CB9F2F342E532F2F6F4482
-:1041400094FF3F19A999BA607100000000000000B7
-:104150001F8B080000000000000BF3176060F8518F
-:104160008FC09C687C5AE3BF4C0C0CFACC0C0C97AB
-:10417000D818189C39191884F8C833E7229ABE7BDE
-:1041800040B366F030302C636560D809C47A5CD8DF
-:10419000F5D90822D847817E5F01C417E91C06A320
-:1041A00078F0E01A11068649A208BE9E18AA7CADD6
-:1041B0000882AD2345995D4E40FD008850BECB80FE
-:1041C00003000000000000001F8B0800000000003A
-:1041D000000BD57D0F7C54C5B5F0DCDDBB77FF2728
-:1041E00037C9029B10E24DF863D04037103058D4E5
-:1041F0004D041A90D7AE69ABB1A576A14A151156F8
-:104200006B9567D5DCFCDF841002A202455954107F
-:10421000ADB6A9A2B59FE5BD0D508A7D7E9FE8533E
-:10422000AB56FB62A5B45AA5F1594AFA7D086FCE88
-:1042300099B9D97B6FEE6E962A6DBFF86B87B9F38B
-:10424000EFCCF93767CE9C99956C6E52760E21A70C
-:10425000E1EF12421EF21242C6A4D2CAEF7DF986E5
-:1042600027AAE8BFBDCED04E9A54FE626E71B4222A
-:10427000557F1611B05EED2F96FC91D07AFF4EEC73
-:104280008A937EDAE71FF486685E15EC04DA394912
-:104290004DC1BF0468F9902DD445F3C993361FA1D1
-:1042A000FD4C2776E8842844F645A6D1EFE29773C3
-:1042B00089AE7F737AF16691240B08D97F27112389
-:1042C000B45E9BFF8225033E425E6C4CFEE5C864F3
-:1042D00042C2C9A9A242FB39D07808F3FFD678F8C8
-:1042E0002F471C8444491E8E533BF72371296DB719
-:1042F000DF411AFA68BBDAB0E058AA1B2FCAE7B34D
-:10430000DFCDCBE51AD1B2DC4FCBE9F7DAC0E596C9
-:10431000E5513A23AC97C7FB191AB0433D850C7A97
-:10432000719E27EB2DE7398EB7D3F255036CBEFB98
-:10433000DE3E7119D0214972234E484F96BD05F8D3
-:10434000EE77090A29A5F81D5884F84D027E6917F1
-:1043500027DE61F8DEFF892DD444F15DEB927D21EB
-:104360009A2722A5072DAFF59130C225D294C271AC
-:104370001987FB2A9ED6438A7451902EFD2E4A1728
-:10438000DFE8F05EB2594278B579F6C33CB368A76E
-:10439000D1957EF545FCB41DB1E68391F8A1E3CD3E
-:1043A0003C733835BC46E6F6FFE5888BE0DF69FAFA
-:1043B000BFF9F2F37F39529ECA5F3274D890A71CBE
-:1043C0004D5CB329BCF04F0552F1CF035A79292B2C
-:1043D0008771E28DCA9F2751FEEB6D247F9E44F9C1
-:1043E000AFA7D185F9EE4619F35D8D41CCC745DA0B
-:1043F00084D231DE4D122A6D9F17A6F575E3E5567E
-:10440000D3763AF8FC21D990F796070DF5DD8A624C
-:10441000288F2B37DB1294EE9D15B6845D0038A8EB
-:104420008C9C0B70B830A5E0BE16A4F399C49A908A
-:10443000750EE5576500CF4B76D24CF3394AD8B6A6
-:104440008CE64B82769208D1F1730609A1FDC5EF87
-:10445000246423EDAFBB72B66D19CD77CD71CA76EA
-:10446000999004ED3FEEA4FD9C4A2A2DD0CF34292B
-:1044700004FD905EF1B7802717FDEF741921131525
-:10448000E91D5B0E21A52AFDAE9F9F530D825CE7BF
-:10449000561BBF4F5496DF4868FD8944F7BD34452D
-:1044A0004F6D5C2D6F1ECF3CCE396B4CFD9BFA2DB2
-:1044B00051066AE48A54BFE790C126D9F7CFDC6F72
-:1044C000B856003A858892A83C7B70FBD67C9C77D6
-:1044D00064660ACFDD0EA607CDF236406CA83F8891
-:1044E000388684295C8A624B74D17EBA4A6DC83F93
-:1044F0004A1B4980DE5A37E1700CF25DA592D24C1E
-:10450000F3A5E5071B84E984AC9D2023DF75ED75D9
-:1045100092E610832340F9B444E3D353033565C0D6
-:104520008702096DA4E5A5CAD126A82FBFE6511CB4
-:10453000D523E747D6B0F9639ECE7F10FE316B647A
-:10454000BFBF9C258523C0B72A4938293C9D939A33
-:10455000EB543ACE03AA48407EBAEEEC7B1DF01C29
-:104560009FCCE035CFBB449196025F13FDF874BC3D
-:10457000924957DC00F332C3A1E98BEF37CA288F89
-:104580005B1ACB317DA051EE033DB1E513BB257E17
-:104590002F13987EDEEA88D8003E758E2DB113F574
-:1045A0004F74EBF5347FFF77C7CE8075E0E6393680
-:1045B000D42F7FEE66F8BE5FE8BD8A607D49C1FA00
-:1045C00026F97F400C377F8BD6BF3F5840542ACF07
-:1045D000258EC30BCF85FED69455AAB4BFFB6FD9E9
-:1045E000F80EB42F993345B1D3F613AB8FBE4517F0
-:1045F00071B2E5D44030E2833C93EB923563FB2605
-:10460000513E19AFF4DE04E397544B4AA234C597E8
-:10461000C52484E39CD3E025497974FE2C5E9999E6
-:104620003FCF9E1EF8FBC85511C855410AEEADDCC0
-:104630003E31D37DB160437E1996AB6A26574F5EFB
-:10464000C8E8ACC9D59609BDEFE5D27CCF37189F35
-:104650009AF9BCB4FA680DD0B59BCA4F7E909042CF
-:10466000A7F2B140F33D4BB91C561F1596D3F67F08
-:104670007AD5A31090A725D6FA3A1D3FA752E3B8E2
-:104680000FDC62AB8DD07ABFBC76CA1F9D30DE12C4
-:10469000490139EB11CB717CE5BB92A2EAE859B232
-:1046A00084CA13E5AF925BB8FC98E46AB4F1E38D79
-:1046B00009F22E95A30D8D4112A6745BDFA8A07C94
-:1046C000ADE37206B62829A4792E67A47C06E6D34A
-:1046D000D99F8434A1DCB994248952FA6CA07D93CB
-:1046E00022F89E0C87E712920FBAEA42042769A3C8
-:1046F0006BFBFAE17212A64C4F7A049E57FFA88614
-:10470000E9787288E59F6BFAA3DA428570839BE5AE
-:10471000F70AE535EA5C7DFB83D8BF569FE693B583
-:104720009374FD41FF157A786C35505FEBEF8DA6E1
-:10473000A21A958EBF9EE7A5E63C963FCBFD770B70
-:104740007D41CAF464ADA99F6E81E349FD8F70D8A5
-:10475000971AE73EE1BDB06A28FF4318F0A495FF21
-:10476000A0E93F5495D6FF8844B608940E33E64539
-:104770008B08A5BBB72E49C094DA60C2776A7E2F3A
-:10478000E1FC7C152CFF60D32761C0B756FE8CE09E
-:104790006F027C03DFF8C6121244212164F3CFBB01
-:1047A000AF7F01FE5D9E4FC81C3A8ED24B14DA8754
-:1047B0006D524C807D47708978D4200F9CEF287C07
-:1047C0004F08349D3137FA35580A2DE053F5F0691A
-:1047D000E38F06AF06477AFE64E39BF9A87641F5BE
-:1047E0008B73A97C790F3B424E05E6210BA0C7F3E2
-:1047F0000128AAD7F24EED473A11B12F0876B4B985
-:10480000DFFC794524A19BE7674DCF2D9067787B2E
-:10481000454F579A7F4D8FC727A0DEAC917CA7CD1F
-:10482000CF0DF3236007D3F955E9E7F75403CC2FF5
-:104830001DDECCF35BEFEE6D8858E8DF8B6D7CBF3F
-:104840007B71F597A07F3A1E01FDE5560651FFCA20
-:10485000301EDD6AE69EDADF005BDB74E3C973E9D4
-:1048600078E5670F9FA3F1B18FEA2F85D6B3853224
-:10487000F3B1599EB5797B61DE02F011DB0F98E749
-:104880004D08E523FFFFBFF3FE5864F4BC85F6AF87
-:10489000B27931F9F807CDEBE3170A505E011E3B00
-:1048A000E3E7A0157FBD2B28867DAE99AFD3CDEB76
-:1048B0001FC5A723E79519CF675B0F65AB5F9B5FAC
-:1048C000F3201E7BAE61FB849E43F3D1EFD0F3C295
-:1048D000A5E3008E9CF8F9244CEDDF29D03FEDAF25
-:1048E00047B32F36578DD23FB32FEE6B247DAD9358
-:1048F00009793A6700F7C3144E6CBF95DA9F09AA8D
-:10490000E0AA5EBAC5BD948EB7F5BA8D6EF02BF5F0
-:10491000707BB1EAA587372CA0F81C776D7EA59D2A
-:10492000B2428F5BFBBEE7F929F4FBE66BF877EE4A
-:10493000BFA2DF5F82FA415E3F1D5C85D2403482B8
-:10494000F242E1D2E15F2B7FCAC6ECD227C1CE3A58
-:1049500017F633CCCE2AF4F42E05FAE66C959407BC
-:104960008591FDFE6FAE4FEF033B8DCE77CBB5ED5E
-:10497000456057EDDB317BBF0FE0BA86A03E3F3785
-:10498000B1ABDFA1C0F8AA00787ED241343B0BD78F
-:10499000F9A26B34BAD60B974EC276DCCE62F9EF31
-:1049A0000FAFAB5F47BBA538CAF2CF347FB7A64580
-:1049B000D495ABDFAE0917A7CA5F6CBEB106D6DDD2
-:1049C00019AEE89B7329E96650BDD742E198212AC8
-:1049D000F618F0CBE680A5BDB8FB79574382E277A5
-:1049E000F78E2913AFB55847281591CE5A7EE62188
-:1049F000A39C3D09F873021E99DDDA4DD10BF583B6
-:104A000051A505F039F31009C17E349DBE4B47C74F
-:104A1000E036A3BE9B211AE775B6E6F31191D97E65
-:104A20009BF74FD7F5976D6C3E7690A3992293FF35
-:104A30004F3B9F24E089D911BFB1EAFFEF35DF1961
-:104A40003E3A4EE0B31F27681A275DBF667DA5D6A4
-:104A50001241047F7C1109013C79F36204FCF87671
-:104A6000DFE1A04AED3D511EC0D411180CAA54EF4D
-:104A70004A41A510526771A810BED3FD11978F8EC1
-:104A800026D4ABC3F9CE26D0A3EB218FF2B716CB39
-:104A9000370EE7D761FEEE094C3ECFB1DFD30F7A78
-:104AA000B80C940D856B5DFF1B0DE0072838E00BFB
-:104AB00081A951E00B11D0C35A794FFF7B4117D820
-:104AC00071077CC44DF93D5F0E137DFBF5FD7F0D35
-:104AD000CAB4DCC7CB7D8188A17C63FFD4C22045EA
-:104AE0009187977B82512CBFBB7F4EA10276CC0170
-:104AF0009F0CDFBDC5311CF7D25FACB4A13F76B1CE
-:104B00002DE1D4E9ABF8E219A8DF9708D1A9764ADC
-:104B10008F9A5F74BBC07E881FA81807DFD1E6415B
-:104B20007F92F87F613F0AD9D36807F9E4A3E7735E
-:104B30007AD953F4E886F30AF403B3738A383FA7AB
-:104B4000506B9349185FCD6174A21C9DF23F63FBCB
-:104B500043297F35E60F1BF27E3911867DB418A0FC
-:104B6000FA81B6F786D530D05D2A6679BB2F9404DA
-:104B7000FDB1F91B2404608B149F507FFD1C9A57D4
-:104B800080FE116CDF398BE5A56054857CBC92E515
-:104B90009DC5B124E4D74E65F9CD1A9DC9A3463E03
-:104BA000207F42BA770EE7DDCD501ED7F886789B7E
-:104BB000A17CED454CCF168935FB00FF9BFB3B0BE1
-:104BC00097D3FE73811F68FFB94B42482F8D2EF794
-:104BD00029365C6F35BADCA7CCC07382CA5C8A09FF
-:104BE0009C9082F4A83CE7669B0CE71DE7DB123B38
-:104BF00005389FEA760FD07A9BCB6760798968E7A2
-:104C0000FE01E60FDFC9FD0165D4BA00BB63275F73
-:104C1000AFF7DD332517DAEDDBFABF90DE17DBF3F4
-:104C2000B0DDDA72767EF32C5DA7C14FF74CA30B93
-:104C3000D31FD1FEA2545F3FD1E8C2F4078D32A644
-:104C40008F523D0E69372D4F82DF81962769BE6FE7
-:104C5000C05607F27F4F2335CD68FBBB1B5D1F8B12
-:104C600093C15F21637E7D6310F3DFB6D5AFB133AF
-:104C70007F8AB782CEEBE99727A17F2FF4862D920A
-:104C80008079CBA4607155EABB869F6FDB6AEF0425
-:104C90007EFDE18088E31071A0EB7CEB7ACD506F54
-:104CA000FA1B22EB2F30B0F1B28065BD0EA8F7F8E9
-:104CB00011063771253D69FAEB06782BDEE6F00523
-:104CC00093F969FADB00F51E3BC2E1F325BACEB3D6
-:104CD000AE772F8C7BDEDB1CBEE2C4C645D6E37EFE
-:104CE0001FFA73E5337BE573E0CFA8C2756087A038
-:104CF00093E74D4B55C146E9EC2A188841BD6955EB
-:104D000031A18C8E1FB83A26D8A6313BC346F36E2C
-:104D1000E887A6E797D3725A6F1394FB75E5D09E88
-:104D2000A6532B5879E09BC6F261BDDD40343B357C
-:104D300009CED6E0578CF92936A61F9FB3FFB606D9
-:104D4000F87D8AC4CAFF1BF260772D36D5F7B0FC18
-:104D50006FB5FA39ACBD4D6479573E9B77CE565747
-:104D600002ECAE0DF3DB83CB7CA9F9E62D889743EB
-:104D70005E9BDF86055B83CB74F3C9FBC2B6F2652D
-:104D800015E9D715B7622361DDBA3BA5B782840B5D
-:104D9000FEF9F5CB5775EB06AC2BE3F8BA30AE9ABB
-:104DA000AD2B146F2AB35719DED65F64C45BEEC512
-:104DB00046BCADBFD888B7DC4B32E3ED977CFC74C2
-:104DC000F8A3E387F5E36F5C681C3F7F9171FC8D6E
-:104DD0008B8CE3E75FF6A9C74FEAF9A6B7C638BEE2
-:104DE0005C6B1CBFB7D638BE7CE9A71B5FA34F67BF
-:104DF000FF16E3BA5E15217AFAC5FB3B8386753D43
-:104E0000C4D675AD7C6DFF4F83B0BEBB617D07FF1F
-:104E10004C395BDF2BDFFD28087EFBF5171D0CC22C
-:104E20003E633DAD7BB822B56EECBBE856DB63B4A8
-:104E3000DFEF4C65EB4CFF45CFB840FFAF2D67EB84
-:104E40004C9C9FE77635268FAF74A4E6E58FBB7147
-:104E5000BFA7E587ED25F2BB1AE0C378B98DDB4B20
-:104E600085CD616A8BBAA68A867C67052BBFBDB5E6
-:104E7000B059055F8AA816C23AE42D277FAEB0D894
-:104E80006F69E36BF0A41F9FED8B53E34F348D3FAD
-:104E9000D130BE96774F63E5AA38A916E0D9CCF792
-:104EA000CDB788BF43FD72F6E09BD61C9EA4878FCA
-:104EB000E553F0B1BC06DF5DE2F45A75D2DF13BEF4
-:104EC0000B4CF8BBC084BF0B0CF85B23569F11FE44
-:104ED000CCF5BA4DFC790309DF268E013922686FC3
-:104EE000C644999F07B1FEAA442E5F303EC4ED2C04
-:104EF0009512934B59793D5DD796887C1FC6EBD7A9
-:104F000099F29AFD0ACBD169F4C358DBAF12617AEA
-:104F10009BDA1DA19DA8D743284FA97D07F363887D
-:104F200062241CB1D007F78AEC7C5890430D00A78F
-:104F3000E893D08F9AAE7EAF2870FB5A359CEFE491
-:104F400092C1A41DE008128C4F2227BFAC5C3E6DBD
-:104F5000241C921889C2387659220FD2715AF3AEA6
-:104F600050F4714C8F6AF004C3088F2433782431D5
-:104F700014B6F2033F2832BF85D60F8590B71F24A1
-:104F800060276AF0B5B9230D4BC19ECF93104FAD8A
-:104F90007EE379F96FF8BC5EE4696B9A733F02D1E6
-:104FA0001810BF34B61AEDD096EA5A17F0A542424F
-:104FB0002EF0D7B7FAACE389B4D46C77C6A95D0AF2
-:104FC000F9766A9742DAEA7BB20ED69DE3C0C7163D
-:104FD000E7DAC37A2E642349DDFED35BEE214983F1
-:104FE000FF348170BA957CC37767B0C8D0CE315694
-:104FF000447BBED5674B40A8D168F0B773F8B57A4B
-:105000001D62CC2567B15F76068DF09E3DFCB1F642
-:105010005E479F6C05D76785378DAFCCFD4B05523A
-:105020000CED623112D4F3BFDDC1F8542A70C5987B
-:10503000BD9EAEDCC3DAFB6839D8C5BE8802E72F57
-:1050400054E4314ECC0572A0C3CF78DEAED5C1CFCB
-:10505000A3490CFDB582126B003E72154B783E6081
-:105060006EA7A51EDEBEE393EFBC8EF231C685F2BD
-:105070002128547E2CC6795C0C8F75D074B3181E11
-:1050800007A9E3943D6A2527631C4C8E5D9188E255
-:1050900062A12696F0CFE4FDF66AF0AB313CF7CA88
-:1050A00016FEB22CE19F99827FBA6316C2FF39487F
-:1050B000D3C13F8DC3534042FDB06F0706857E09C3
-:1050C000B95CD19FCBF5F07E0B387C84DC8474D343
-:1050D000CA3B391EB29DCFDC2CE7D3939A4F1D9F5C
-:1050E000CFC24CF3F9029F4F8F83AD57AEBA8812EF
-:1050F000A47C959F862ECB79FF5B87E972D319F14B
-:10510000D557B39CC7F2D43C9672BE5A96691E51CD
-:105110000E4FAF9DCC3902F13313F97A43EA0D7487
-:10512000D9AEF19593AD1B84DC6CA0CB3DBC9F6CDC
-:10513000E7B33ACBF96C4FCDE77B9C2E77649A8F1F
-:10514000AE7E13AFDFCCE50AED96ED8EBDCD607F70
-:105150003C2E46DA1DB352E3D17A1DFA7AE3DBBA6C
-:10516000B47A6BE1BBB078B85E371F9FDB450FE1C7
-:105170007EAC0D6C0C6ADF7CB1EDC55AB0C769BB63
-:105180008DD87F84AD9BB4DDDDFAFE67B6DDDBCC68
-:10519000EBDD07F59A2E3DA5F5BF59DFFF764752A7
-:1051A00083631BC25137DCDFFDFA7ACB1D7DCDEC6A
-:1051B0009CB0583EEAD5D935C1ECCE7D1C81687CC7
-:1051C00000FC95C4DF0B7647BB18DB3E00FC408D2E
-:1051D000BC9DF4FB6DCEB020D0F5530EC71E817A76
-:1051E000F9AA53B603DD6A633F82BC6A2311888B38
-:1051F000BCCF7BD776C8AF115DB23304F696824739
-:10520000433D0111E379DA84A80AEBE20931FAACF3
-:1052100003ED1EDA251DE7B60225D12580FF96088D
-:10522000CCEE60706DF05E1D07389C142E880F6EFA
-:1052300033C145C7C37D79E718166F4344522E42E8
-:105240007F764F08FAEB1F732BC21B6F72CAD03EDA
-:105250003EF95684979645303ECF1143783B1C2E3D
-:1052600019E2F1EEF3AEDA0CF1766BD45CAC8F7030
-:10527000C0FC279621FC6E124B2E2D05F5D51BB6D2
-:10528000013C8B258C4B8E0736E2FEB66B315DE41C
-:10529000E8B85DE51B5568777CB107E3EBDCBE5EE3
-:1052A00002F15605974904E280DC815EB433F317BE
-:1052B0007958BE98E038F99F67F1B20E322097D145
-:1052C000B420CEE28EBBCAEBD5A560C754B37854E8
-:1052D000A2865F86F8B63CC2FFECC5FDD0BF63BCBA
-:1052E0009DD84329FA16F40EB7CF8D5AC8CB70BD9E
-:1052F0004496F592D9D5CB8F8BD9D5EBCDB25E2222
-:10530000CB7A4956CF492ECFB58AF718E6FB7912EA
-:10531000DA1F5A7C5B0EB5FC87ED935266B7EBED56
-:1053200015079152F60AF0997D494638D6BCD51436
-:1053300038A0B36F02923F80FB8D0BC8052897A35E
-:10534000B43FD1A8060E38469F2F485852E7271F72
-:10535000ADFE5AB0F79CE9CBBDD3AF08A23E9BF699
-:10536000359E2E616925FD5E016903CF7F8DE7972C
-:1053700034842DC6AB91981E2E27918C747073F8CF
-:105380008FC2993F6D522ED2FA16E7E35AEAABB0BC
-:1053900099EC46A3BE73896A2D9E7394B3F8412796
-:1053A0000823C84D88A07E7190A45C86E78BE19CA1
-:1053B000A56353F2E3088E45F9F93F85762254231D
-:1053C0007D428047339F98F9C267E28B4FCB2757C6
-:1053D0009D253EF1C6ED59C98FB737CB7A892CEBA5
-:1053E00025B3ABE78B0BD9D5EBCDB25E22CB7A4997
-:1053F000566FEDBF48DCDF7A590BF861BC5F74195A
-:10540000F26BBFE831967FC967C8772F34B6F72DA6
-:1054100032B6EF5E646CEFBB8CB57FAAFDAB9782B2
-:105420009F275B39F9DDDF2827E5AECCF5F3178F31
-:1054300022572E15F7936E5121C900AC5F749D124F
-:10544000300D272CECBBE7B9FCBFE0607E9CB8A810
-:10545000E2BEF69F7D9E3F9098DF489BEF68F06A22
-:10546000FAF7F7766E6F99EDAF61BFCEC9D3A76734
-:10547000831E21102C4D64854E8DEA1B0FF1842074
-:1054800054C4539EC0F36973FF5D705EC7FC2EC1A8
-:105490007A1D1CCF3B995FE5E7A5ED413CAF9DBA76
-:1054A0002B08FBF4AE0982A59FE594C4CE05CBA2E0
-:1054B0005EB4333A1417EAC3AE09EC1E5397238146
-:1054C000FEE3AE52637B17B71F4E496CBCAE3B6325
-:1054D00004ECFFB6A9BB1A605C67F25F8942E1FE8B
-:1054E000EE8418C68FB63BD93EC0195609AC0B2EB8
-:1054F00045C5F377333C712D6E882482F5BA79D790
-:105500003B19DFFC9CCE279B79BD2B49585F0E339E
-:10551000FCA5C3D7DE33C4D7B54ED6AF127423BEB5
-:105520008E57135C4F8090F6D9048FC6D9DF20D1F7
-:10553000F387793D060A337E3B8D7945BC2A233FAC
-:1055400099FD30CAB6AF65E4E70EBE9E3BC9D7B140
-:105550005FA7120B83BEF35624C832C42F0993B140
-:105560009CEF14F8BF56D546E5977241682B6575D8
-:10557000EF98CE50D2227E6998FE1592515ECE7081
-:105580003D9BE9A4EB9937B59E1D27DDE884EDB678
-:1055900091EBACF0AEAD674AE0AA8CF3EE6A647EA4
-:1055A0002B42EE207D309F57EC481F5B395137501E
-:1055B0007A392B443CE7704E4A10A0B3AB9C24DDF3
-:1055C00039E9E7F51AE73B259879DC1E8EEF6E4E38
-:1055D000A774F5BAF9B9E76B1D0FB5C0FE2D6F1EA4
-:1055E000938361BE171306FE1C92985FA3CBAD3464
-:1055F000613C4B29F38F8C983787D32C57F134F7C4
-:105600006934B9FDABA4303DE44AA0DF41932F4596
-:10561000F957D4735D139A5DC0D471E541F4131F3B
-:105620002F9708DC8331EB032DD5ECC84B48B70B23
-:10563000EE2BAD7DC51EEAB280D70D44D0F9F5CC76
-:10564000FA7A347D72DFA7D4273FD1E47EA43E41AD
-:10565000FA5CDBD1BA1FE8D3E566FEEBFC3A952C89
-:10566000D5CDB79B8FBFC4C9D7856206479743AED8
-:10567000D1D3298F7EAFD1EBCD34F44947F72B211D
-:105680001870560A0EF3FC763959BD7C18BF627447
-:105690003C8CA403C3438BD39A0F3EABF9343BB38A
-:1056A000E3E36DBCDE368E576D5EA3C989D67F1FDE
-:1056B000C757DE3C93DE175503FDED1ADEEA4CF5C5
-:1056C0005CC67A1A7E4427B357B47562B4FEDF967F
-:1056D000187F98FB4F2787BF19964315FDB2DA381C
-:1056E0004EF21CFA0F8E53BDDC5549F7A3BE418C18
-:1056F0002FA07B7D8C6F82F82FBDDE35EB2F4DFF09
-:10570000A7D347E67DCB68F5A58094D14ED2EC9A1D
-:105710007C7E6FD2C5E381370AD6E73C435C8EA816
-:1057200062CF2AAE0FC244001F2442F8FDBF707F33
-:1057300013CD8F0D494A17F83FC4F9FD3B687ECC65
-:10574000CF9CA42B042E9779FDFD94DFD6865D11A6
-:10575000281FE72A1DBEA7D53B1BFC5ACCEE22F61C
-:105760003B5E877BC063AF1409E0D549E6609CF6D9
-:10577000F13594769523E1192B12323E9FA6DC3F3A
-:1057800080E787B0A5FC8A119F64B12E0F7E6097D9
-:1057900071DDCB76DE6678D2B51B159ED43EF4085B
-:1057A0008CEF2499D7B5339DDFB05D9BE5BCB4FB8E
-:1057B00068DAF7D2213B51E07EFB9080E939435E05
-:1057C0004C4B86DC984E182A200A255AF1501EA60A
-:1057D000E387C6E3F7A2A1424C0B8726621A1C2A74
-:1057E000C5346FE87C4CE5A1A9986EE072983B3413
-:1057F00013F3DAFDB79CA14ACCFB873E8FA96F68F3
-:105800000E2BE7E7A91BEE8C12F0574BB00E51F9A7
-:10581000689BBF1CD725F3BC36B8D83ADCCEEF095D
-:10582000B79BF4761F2F7FCCC5E47E03970B22C66F
-:1058300088DE6F7E3FAFB7A12C8AF677BBB61E1607
-:105840002E37AC87E6FAED69EE273FA395737848CB
-:1058500079FD28F461E7AFCE4014EF0D101245BD7D
-:1058600044C4A841EFB66BF067798F70C3FC6790B2
-:105870008FDD549021B4D0FD856D0D0F83DE5970FE
-:10588000EB7507A8DC7DE88CDEE68271BFB002997B
-:10589000EEFBAB6E0F82DF77C3FC7BF17E1398DFEC
-:1058A00010D7DCB1E08ED8C3C87551B4B369BBBBA7
-:1058B0005CBA73D0CEE5B737ECA2FD29AD36A2E8CD
-:1058C000F8B5E40E0F51F4FAEB644121B42FBE2574
-:1058D000DFF0BD686591A19D764F22784D99A19E1C
-:1058E0003CEF3C43BD9CB9338CEDF839B9AFEA428B
-:1058F000433BA74FC32B3B47A4F437AC1F1D823556
-:105900001D632EA62FD3F1CD152EB6AEA5FACF4C22
-:10591000B774FD677B2F24C51F69E781E710B1F8D5
-:10592000E279604F39E528DE5339F3FA67771ED9FB
-:10593000D633EBAB1CD05705A04F044C7DA0AF0A6B
-:10594000408FB831D5EA9DE97DDB75A06F7C3A7D4B
-:10595000338BCABD053FF8DC99F5CDF9BC7CB29B11
-:10596000E99B759CAFCC7C13E4F5D681BEA9185D8C
-:10597000DF04DD99F54D251FEF1FAD6F3A67DC1B86
-:10598000FD16CDB92FD8D6F0104D3B2A6FC53CD5AA
-:1059900017A29B9677CCBE23F6904E8F9093FFC9AB
-:1059A000F892F3436EB5517F68FDFB43263DA2C9D3
-:1059B000C3DF28D7A738BFA6A3CF914F29D7A7CE3B
-:1059C000925C9F7275CD83F3C56CE57A64FDB33B41
-:1059D0008F6CEBA9B5247909EC4BA678122DE0BFAA
-:1059E000B4F586D8BDBC28C6ED743EEFE07E1EE659
-:1059F000FF9BE10A2F02FE99E18A2C76D3F63797B6
-:105A00002AE3609DA6F92FC2775D3E62CAD79BEA62
-:105A10007FC594BFC254BF415F1E57947170BE18BA
-:105A20003FE4C0F3C1B862ABB3E2A7856EC62F876F
-:105A30005C9128F4776EE2BC7140179A5F86FDB9DD
-:105A4000597F347F8D29BF1CC74FE5AF3395AF30E9
-:105A500095AF34E557E9EB779E9A781FBEBFF14BBF
-:105A600007D969E14F7A95EB898EC9B7479B995C55
-:105A7000DE06ED3BA6DC115B46902F08C06DF79962
-:105A8000F67F94CFF4FC7288F7F3F309B7E2BEA96E
-:105A900083EE9F308E11FC7816F8F9B59BBFC3A535
-:105AA0005C8FF71FE28537A39FA3A3B819E3148E79
-:105AB0002B129ECFC64BADDB7736323F5347B1F545
-:105AC00039C2AF210857678F9049CCFF076270DA5F
-:105AD00006EF0931FDDE56DA8EFA554A5ECFFC1B21
-:105AE0008551F46F3CC8E927F962E8577016C72C56
-:105AF000F7F51DC3F830FA35F769F8E0FB481D3EAD
-:105B0000500E9B3B3F3C00EB6BDC6D2D673F7633CB
-:105B1000397304B31B7FE4FCD9FAB01D2EB558ECE1
-:105B20006BE30E1627AF4E607E00918EA3F72B9885
-:105B3000C71B9EA7699FFD00C753DCCDE2ECB5FEF5
-:105B4000CCF03CC2EB3DE2667E056D5EA2CCC61990
-:105B5000ADFFE7E0B216F80164B31FC2A8E7EEE0BC
-:105B6000F51D0163BD74F8B973183F2C1E4BE3DFBC
-:105B7000D1F85D1BE710C085FB59EB7DB872B21AF6
-:105B8000E3378E137F6F17EC9B45F97588E3B88D6B
-:105B90006E93C0CFDF22AAE85F501522EFC4F34F07
-:105BA00076FE709BFDBC10E83B178FAB20105711A1
-:105BB000D0C525829FF35C8CB37804CAD7A84E1950
-:105BC000DE3719724F6471AB27D7603C4527DDA9DA
-:105BD000C3B827DC250978CFCA9EDB8DF6BCDD5E15
-:105BE00019B38A33153D8C6F2F39B91EF56CBBC2C2
-:105BF000EEDDB48B51577E05B8AA5594D74E257368
-:105C0000FCA2390ED2219BE30F8DF89AE661F48D48
-:105C1000F3F537EE0E35E8E393821E37960FB98D14
-:105C2000F075007C3E802B86F1A4F1629B0DF0762E
-:105C3000B6E0D3C6954A6D11C04B8044315EC515A0
-:105C400014715C9B97E137DDB844113FD0BF1F73DF
-:105C5000B6F039BCFE46193F89C483FCA4CC73D589
-:105C6000EE86FCF3CC2F6F1EE788277A8147E71773
-:105C700016E528FAB7B4FE168E6171DE6231C1FBFB
-:105C80008A1289D495D2F9B714B3771645DF2871F3
-:105C900011C5667F45BA7339763E824554446BFE22
-:105CA000C0C6F5F078013F19C060D15C50E91321FE
-:105CB0005E4011D83B102181C595CFC538F280FBDD
-:105CC000B3EE7709F62B843790D3DE33E8571C40C8
-:105CD0003FD767DEEF28F0BAC936EC1742534F17AB
-:105CE000A4FA05FD8B4EA593A74FC3B9999D687F74
-:105CF000CC0E176DEC5E1529CAC1B8C3B6C0CD2E47
-:105D00003D5D9B3C6586F55592DB6F1272E0DEE7E8
-:105D1000CAF04006BE6C0339023F62F135E181F200
-:105D2000F4F53438453A7D2B7F68BB144D3481BD82
-:105D300058E263F1AA620CCF473A84FC195D553AE8
-:105D4000FE2D96920097BF2AAC423C6347812D04FA
-:105D5000715822E93E8CEF3BD9178732C9AB582CDA
-:105D6000BEAF9FCF568F310EA465147E6FE3FA3A13
-:105D70005DB9430A45ADF4F0131EBE8E79ACCB3F3E
-:105D8000F6D63EE6B15877F6723DD5914755E9E72C
-:105D900018FB001F88C5075F073CB48D5990593F19
-:105DA000C946FDF45FDEF04F609C0C703C67050750
-:105DB00081C714B2B0FBE579188C988A070A30BE07
-:105DC000863820612C9CD2B2BF75550F26C1EE7665
-:105DD0002CF585817EF6F06E02EBA81617640F7B1A
-:105DE000DEB1213DE7B2F8A072E6670DD3FF308E39
-:105DF0006C6EE6B831BB29FF2B339D1B9FC5F72284
-:105E000034F8B53875F3BC9EF2D6BEED9965858F32
-:105E1000ECF6419B28BF10CA2F1BE9FA4E91427A3B
-:105E20001B65CCF7340631DFDDA860DADA588EE97D
-:105E30005A683A07E23F62F152D88F041F0E5E4B58
-:105E4000AB6C029A605CCB8EF9B08FEC1ACE135516
-:105E5000807325B81F4FEDD0BF7A36CEE7E76C3C94
-:105E60006EB67D3E9EA30DE7B7B4815DD8C5E368ED
-:105E7000E5B50FCE87FDE3A609DA3E39ECFAAACEE6
-:105E8000FE9AEC75B073A652AD7D4B1BF4E7167904
-:105E90009EEC996FCC9330C0E376B1FC42EFD3080F
-:105EA0000FAA003ADEE5DE6730BF6932F73B54D413
-:105EB0008F8247E6C768F728CC0EAAC8473F8514EB
-:105EC0000AC1F502B2298FC39D653FB0FFC1F5EE4F
-:105ED00015EBF5322537A3AC6B1C8ED1E84FD18181
-:105EE000F605E86115C67DD58EF270B6C7DDE438DB
-:105EF00033BC48D5832A5CFDDAE7895EE4A5EDFD75
-:105F0000E1BE6429CDE72C4EAA28BE598E5BE8E598
-:105F1000F7C9E87C41FE353C6B76C74D40C731A9D7
-:105F2000FE1C8130BE23E1E6EF09670BEF728F6C38
-:105F3000E8873C5E5B98E9DC654CC4064146C3FAE1
-:105F4000A2A0CEC38335583E2F9C6FC8E7561719C1
-:105F5000EAFB43658672877C9EA1FC6FA5D3D73D83
-:105F6000B281AF23A679CD379567DBAF7B8D5D819D
-:105F7000F7204B45CD1EDD88F7928F038E413FF60B
-:105F800056E23D5D3249BB8740C210AFE256C2C8FF
-:105F90009F1E12C2755A2A36DAA962C068A7061B6C
-:105FA000D4A4D62FC425B8D74838EEF03AE563F12B
-:105FB00020DA3919EED72782AAFBDEA152D6CE32DB
-:105FC0009E414B457E5E8677EF4B473F4F358F13A3
-:105FD000FC4AE63835737DE21395A33AF94BDF4E60
-:105FE000244775EF6AEC00DACF4AE13FBC7B29FA1F
-:105FF0003D9C84DAD114CF2DC12B4894CEB31DAA79
-:1060000050FAC521A57CDE1E9C21631CBEC2E86A35
-:10601000733139F98E5731C473D87D4C4EB47AA39D
-:10602000D1FF363B8959AD67AF7AD93EF9C45DB12E
-:106030003FC1FE527D99E03BAE7D8D43F8CE655564
-:1060400072A11DFC26AF7BC7E27CAA0E84ED97EA05
-:10605000FAA922ECBD6FFA67D7FB5335FF3039E957
-:10606000C2B8E03D491617BC27F9DFFB4F43FE904D
-:106070000DDF15DD7338B37DD5C7ED2BAD5EDF21A8
-:10608000B65FED1389373F939DC3EFBF55264D7122
-:106090008722B103FD4FDCA9D8C1DEE96B7409B0DA
-:1060A000EECFE0F3AC4A86EDB09E8E36AF7D26FA99
-:1060B0006AF384FB8730CF561FBB0FD82AD3F9224F
-:1060C0005FB3F7B2D3C13BBCEF97ADF121F9D9BBB8
-:1060D0001792232A5BCD7BB47B8A1A7CED009F004C
-:1060E0002983AB3DC0E8D01ECC4C87160E9F56AF1F
-:1060F00035C0E8D04AED836CE0117D4678A88D2745
-:10610000805DE823893A7CD34C252FC33E08558512
-:106110000278D897BC1FE0857B1760CFE75509D779
-:10612000C2BD8F28B30FFD55C9E4DE009A2711B810
-:10613000975130D09F7C9B961F6CF0E2634FF2B575
-:106140004792D08F280FA2FC74C160681F4D6C0766
-:106150007BA70DFE4955FAB8EEE002B03F44C2F409
-:10616000029538451CCBED130B79D79DEF0BA79DFE
-:10617000A976E9F066B63B9DA43EB3BEE2E7FD2AF0
-:10618000FD0FF48D6CBA1F61B673CD71F017813EAF
-:106190001F93C53D8C4F394E2E79D005EF21D8CBBA
-:1061A0006D32BCC34C557A1EDCFFF1864502718D01
-:1061B000B9BE017C3A6B34BC53FD57C7E246FB883D
-:1061C000FE1E69BD8FF98102F55582C0EE1128F0DF
-:1061D000EE66A0FE50C88A4F35FE1CCEFB9E44FDE5
-:1061E000D8461271883B51EB6CB8AE759597E5E9CE
-:1061F000F74737F904BE0FD5E84F1471768AFE745D
-:106200007E61F7F4BF1FFDF3171BF17EA674B9D3AF
-:10621000C7F4D268F4FFB4E368741B291F4D9C6E69
-:106220009B50FF754ECA4EAFA4E8F620CAABB79C90
-:10623000841316ED9A39BDCCF7F65D2446E0F728B5
-:10624000ECAF307BDA3E6E76C30E92812E23E2AC49
-:10625000583F761FF3A7AD133C21186A5D1AFFF271
-:1062600024BFC0F5FF008BE79B733008E7C7DDB3A1
-:106270008E06E19CA3E713EB73C8857E7E2E127E0B
-:1062800003F7013DB3985F10FE40EFDCC6FE49CA3C
-:10629000D4F736C33B66EBDEF21AECA1F6C6CCFEB1
-:1062A00006A9E8BA28D81927DE1114586F84A23538
-:1062B000E7025CFD7396E3BB23ED55FBF01CA63BA8
-:1062C00094992E5A9C6FBB29DE36DDB9E1092EAFB9
-:1062D00065EA0D685FF614BE8CE3ACABCA3C0EBC3D
-:1062E0009795299ED7652351F4179BCE75DFE4E37C
-:1062F000BDE9E3E7138EC8972696C2EF72A8E81FA0
-:106300001B5B1EE9B751BCD5FBA3AFF9285D7BE64B
-:10631000DC5A0870C03B317ABA07A07F0BF8C6FA86
-:106320006D06BBE94459ECBFEEAC82DFA79882EF63
-:10633000D66BF5BAD3C4B19FA7D15971E3BEA71DDF
-:10634000E2FE297CDD85D9E15FA3F325E405D7448E
-:10635000680F71BE19F8D9BCDE8F8677331E7A1CA0
-:10636000031807D52358CF67A19FC95DCF9D4976F4
-:10637000AE36E7289EABF9926F60FCC477671DC606
-:1063800073B5123FA387DF378071A539D5EC3DC0C7
-:106390007472F400A79F281BEB1171C070EEB3DD7F
-:1063A000C7CFCB0299FBD3E024AE0176DE33522E69
-:1063B00071FDD9D9FDF0417C378524F15CA1FD55F3
-:1063C0003BDC4D1DC6C308B98AB3DF85E9818DC7A3
-:1063D0008530CE5DEDE027E9D1CED92AD9BE49ACD2
-:1063E0004AE2399BCBAF18E3AF43DABB88D9CDD3B0
-:1063F000076B11F30F8BB0AE823F1EE06BADBC029A
-:10640000FD69E9E8FA1D6F74A67F8CDEAFCFF65DFB
-:10641000FF6C7C78C2A718EC43333F3AC937CE688B
-:106420005F97CEBF7C82CB67002AEAF649DFF44B48
-:10643000D6F87DFBCAD1F0FB4D6BFC5EE501784FD1
-:10644000DC63FDFB445ABAC5A4EFB668F128F0231B
-:106450002185D85FE9E516F3D6D6D5137EEDFD9EEE
-:10646000A807D68D3275AE07C6DFD5BDCC03E3EEE7
-:10647000DA9C999EDAF8DBF9F96282DF77D1CA13E8
-:106480009C2F7798F4FC2B5CAEEFE7F2B5CB15F1BF
-:10649000E0EF55ECBF6AD1548ABF32CA17E05254BC
-:1064A0003A497EA6F14B55D3BEE40CEFB5F4F84D56
-:1064B000F1BD59DED3FCB478D901FC7321E0E1DFF2
-:1064C00051EEEDC95C94A7B2958C6FCAAE194CC25F
-:1064D000BE76E2265B42C1389628E2A570A5A86088
-:1064E0004C1BBFF77A2E5FDF89FD0E5B0994C3BD9D
-:1064F0007119DC2EF2D7301E669BF1F73F76B9C2D8
-:10650000CD12D8BF718C742465DDC6DFCB184F74F3
-:10651000BF5741C72D7CEB3DFCFD9442D3EF827CFD
-:106520005ABCEFFD07E13D21128F5E1F2B028958F7
-:10653000E9FDFFE47CA9341D60EF18C47CE45DDD57
-:106540003907A55F3ED805DBD58D35804F354E42E6
-:10655000932DF4D86FFD5EED777C0EC03B0B8E6201
-:1065600076FFAC6DE915037BA9CADA7E472DB13AF7
-:106570005FA17AE1B77E5C9F985E48A8F52C3D69E3
-:10658000473E99DC4D12F03B28F336C5FA1D20EA50
-:106590002BD93BD48571559068BE8C9AAFB47B32B1
-:1065A000F13AC2EA2F218930F211792D3836F57B84
-:1065B00027250337F5C3BEF820DD17C3EFA868BF52
-:1065C00057A2F1CBF898913F26C78DF971267E31FD
-:1065D000B72F53C822187F52B78DC0BE6E4C83AE02
-:1065E0003EF44706DF7B848E3FF9003CCC48D3DE87
-:1065F000CCFD8B24EAC8A1F87CFA2EDF2FCBE9046E
-:106600001FEAAE2D00BCEC721176EF22E2C27717C2
-:1066100048C4FA3C6904DF6A767F9AFA297DC9EAA0
-:1066200069EB5EC75B027BE7A2447EA714FC9CAFCC
-:10663000B1DFAD4BBD5B7121BE5B112431663F9272
-:1066400008A6AD9C3FE54B8B4BC11F1A7FDB2BC3CC
-:10665000FD2CB9C0E84F13F3EBF03DB061BB3B9F9D
-:10666000DADDB43C9E67D4A33539CC6E0DE5B07B42
-:10667000A1B297F5435C6AA15EEF6FCA118CE53E4B
-:10668000B5F0CBBAF25ADE3ECEDF2DBF24675107FC
-:10669000D833F2785ADF823FE7F171B57212081DE4
-:1066A00086F73F367FA37E967E3DDF94C3CE77E4A8
-:1066B00073F8B8C5D670C54BD9B877F37137E518FC
-:1066C000DF8D23324BB5EFF7FA6F158E507C9F703C
-:1066D000905A88576919634BC0BB69B78DD5E2C220
-:1066E00032EB098D0EC3F896593C52D175F20CBBB2
-:1066F000851C6BE9D63AE6A7327FBF9ACFA3F5BADD
-:10670000DADE4914AEF0012677CE00B13C07A2F2E2
-:106710007D75CE2C8B75BFB50EF77127F232AFFBAE
-:10672000E67DAEC8FD8BE67A4D9C4ECA2B417C8A35
-:10673000BB35C8FC895AFF270A995FD1DCAED3D498
-:10674000BF9BD48721CE18CE57E15C559A4412499D
-:10675000DA8F27D02B972A101F705885FD91422879
-:106760001EC1CF162268D7B506D97E540CF6D6D8EE
-:10677000209E84D4C97A3BAC88FFAEA29677F8A25B
-:106780004D39680F8505C48BC8CEF34F38120B0105
-:106790009F2DA53662F54E7F770EB373B72AF52F7E
-:1067A000965AD06F438E62B09F8B8698FD9DAE7EC9
-:1067B000AA1E836F981F832ADE3F200AE3C77A7FD1
-:1067C000F89E1CABF35B4DAF703FE4B26AAE7089CC
-:1067D00072E5AFE93CAE3FE4C0D8F44B4E6E3F08E3
-:1067E000FAD74EF56F17FE8E5CEF41F0435E03F76C
-:1067F0009F68FEFAB7A64925B4FCB5223B7F743EDC
-:106800009203E37E486CE82FF990BC9C335347BF5A
-:10681000A77224B6DEC41DA847357FDCB5BD0E8344
-:106820005EFDF666637E39A91F0B7E8AE59B1C24FC
-:1068300041F17BBD49EF3E94C3CE89BE4D62EDB0C0
-:106840007EB6F1F3BF1B7F324D02B9B97EA65C6AFA
-:10685000D7DDBB7A2E87D977EF533E527472B6C21A
-:106860009790601FF7EE9E99577C9E403F89F622D5
-:10687000F0A7E559C7017E2B6E8473B47998E1D6F1
-:10688000CEF3D2C121EE162CFD42CFE708067F7C65
-:106890008B8BBD87146E1189FB6288C3A3020B70BA
-:1068A000BFE5C7F7BBD5DA18C6D5A9CD4EB9258047
-:1068B0007176184FB786120CDE1F3ACAF94F8BABB0
-:1068C000A306C505B04FBBD13520815F79B518ABA4
-:1068D000839F4ED3CE659C8E68783C85DFF16C4DEE
-:1068E000723C31D48B6759EF90509655BD3A5B8618
-:1068F000FE8E713DF98BC71F9260FDF9F0B177BE36
-:10690000087278C373760257F38E3DEE2749DC3F59
-:10691000242490F3157BEC96EF48508C61FF37FCF4
-:10692000C88F7A71C593CEC462DA7EC533EF4E2725
-:10693000549E8E350F1E1C0FF87B4C60E785EAC015
-:1069400074589F5688E49B56EF8EB97399BC7FF0BC
-:10695000536F03D04FD8DD7F35F6DB77A543FF2E8D
-:106960003EC965EB0FADC7E2261F1512932DF487C4
-:10697000B61FFAE0511657B2E2594702428257EC6D
-:10698000DE2145291CAB777F84FC72E98F9EC8010C
-:106990003CAC7ED66EB0236EF8D127ED17523ADFAD
-:1069A0006027838B418EED27317F3CEC1AB4A35CCA
-:1069B000B3F89455A80268BDA77EBFE0D7B4FCFD2C
-:1069C000A09D4088EBFB877F273D07F9A88F5A6E73
-:1069D000D0BF91AF57EF7E57C2DF31B291C1E2CF46
-:1069E000C3F987D14E32D7276450023DB5BAAFF311
-:1069F000233BE5B7D57B3E7C13F86EB5493EDE8779
-:106A00007F148EB4CF2B734DF6F9EE82ACECA31B42
-:106A10009E38FE00F8233E78F28F0FC03DDA95A72E
-:106A20003E7EE07B1017F66F6E19E47BF563AFE6F0
-:106A3000109DFEBF2C97AD9BC71E7D64D7563AFFB5
-:106A4000636F38115BC7F6FEBE04FC3FC77EFCD700
-:106A5000B1E00FBA65EF7CFCDD9A5B9EBE745CA66C
-:106A60007511F835A1FF7D457E6EA43C2B80314920
-:106A7000C8CF786AA207E91D94605DFB8B4006BB16
-:106A8000F2E8F7BE4F24B0CF0E86C920E067FF9E24
-:106A9000770FDE4EF31F52FA382DE843E73FDE86CC
-:106AA000FA998A0D4D57EDF9F2972EAA82D4817684
-:106AB000F86A32887A73045D5FA174AD4AD1D55CFF
-:106AC0007E9C9C94E0DC60F5E3948ED3819E948E52
-:106AD000D347D2F143F8C79C91745C916B8C4B3ACD
-:106AE0004E566EDF0A857B0A2CCF79B57DD68D4F49
-:106AF0007F35A3FDA4E985D1F07C9DC0E09A9D1B64
-:106B0000BE3D17E4EBC91FECDA1A60745E4C1173DA
-:106B1000EC89E32584F2C91F1C8357031E06F73A4C
-:106B20006558DF57ECFD15CADBB1A75F92148C6F77
-:106B30002139C26C9A27C37F2F139A5F25B0CC8D61
-:106B40000FFFBF056FD2F637C2431E32D20FF307D5
-:106B5000A9FC213D1297D729A077136370DEAB12F1
-:106B60004C2E5625FABF02717D66BC3F956BD3F45F
-:106B7000FF305D216E6CD59E771600FFA5A3A7366A
-:106B80007F19E67F012D7FD828B769E594D3F7D820
-:106B90008E1312D807C9E724D946EDE1638E410967
-:106BA000D7C71FDBE59DA191744FE19FC71F9DE1F2
-:106BB0003EFC876639E7F8194DCE479FD799E16DBE
-:106BC0005BAEC2F65726FC7D70D25AFF3FCFF5C6AA
-:106BD0002A12AB2B9A3872FD1249441D5F9A82F734
-:106BE00003881FA3F07EF0981DF787ED7DFB518F82
-:106BF0009BF5C5AA3476F49BB9CC1E58F56CFF748E
-:106C0000D06B1FECFB29F2E5AAC7DF91C07F737040
-:106C1000F753D240454A0E607DD0FF0ECE073FECC1
-:106C20009F0EFA6B759A38C0DFF3F9ACFE99B1FF8D
-:106C3000D58F7F64E8FF06B54F423FD928E3BC2FCC
-:106C400086AF84F9BE7FD8012718E4FD3E7B9D9571
-:106C50009DF3025F1F353CB5FB67BF9E0BE75EF9F6
-:106C6000EC1DC6D6A6F0AFF0F77B5F72F0FD6DF8B5
-:106C700075B0675AF224BC8FD0EABF02FDF55A7F87
-:106C8000BD267CCA01B906F603F2BC48957E5FA515
-:106C9000C19F17B619E0BFC55F374EF1B1FD9942EC
-:106CA000F71FFF03B64D466E008000000000000095
-:106CB0001F8B080000000000000BD57C0B7C54D516
-:106CC000B5F73A73CE3CC24C2627AFC9D37892F0C1
-:106CD00094804312DEB40E0491226A505AA9F5AB97
-:106CE00003F28821C9A4F8E25ABFCB8444F4029F7E
-:106CF0008D95166A693B70A152217690A0B10DDC8A
-:106D0000012C06056F105F78B18D5A152B24631482
-:106D1000B4575BEF5A6B9FC3CC9C4C84DEFBFBBE2D
-:106D2000DFEF0BBF76BBCFD9679FB5D7FAAFD7DE02
-:106D3000EB0C28DEDCEA5400D93D6B366461AB5ABB
-:106D4000D41409E02BFABB2AD6028400C603585D8E
-:106D5000D5E07761AB5A407300FF7D45FFA7785BB4
-:106D60007BF0F97BE5D4D6B5348FB5F157D48726BF
-:106D700005B657F2B0914A25DDBFC2BBB61860A375
-:106D8000F39F1FA7FB2B8376D58E6D73EA3DBFA5BE
-:106D9000FE0609AA65EAD3F3383E6875A8DB55BC40
-:106DA0009E0E0BC265317AF25424321BA00CE9A06E
-:106DB00016FFFC3001DF2B488266A8031C0129590D
-:106DC000A120B5C6730FAAFE62757CAC2FBBBAC1F9
-:106DD0008FF35E2DBB2CB4FE07732D217B31B537AD
-:106DE000A641D9403E18ED03ABAA213262F0FBADBB
-:106DF000D98E855B80E90E5A681D9223B49D08F1F7
-:106E000081A67A8069030DFF873C74C4D18D037C11
-:106E1000B40E45BF6FC565D14D3B04B94D213960F6
-:106E2000EB84084029D2AD96B05C52A1479F240A5A
-:106E3000D563006E4CF57F93D6993BB451A2EB1EFF
-:106E4000A8E6B612FC12DDB738EBF2FC5FB33E5891
-:106E5000A09CE919A9CB175FB1C12AF8AF28A00CF3
-:106E600029273A36ABEF8FC679E87E268D0AB21C09
-:106E7000C6557D67740BC181888FE3F32333676444
-:106E8000126E8C71CD8EA29312F2DB27A7A8294532
-:106E9000D8579033C4A753A9CCA71F4DC399F1FE6F
-:106EA0008F4FA56E95511E8F48024F41C213E10AC4
-:106EB0001A1F277CB8113F6BE9B9198DBF65BC5803
-:106EC000A0BAB952E7A487F827FE106F8CA7958A5D
-:106ED00043B57B89B73E4DA1796C105A2B11BD7E0D
-:106EE000E6A7035AB91D02616E5DD0CDED5DC4E722
-:106EF0006C928397FB69D0D33A149F9BA356D7AA71
-:106F000078FDC7B333245A9F0B549DBF8579D41F96
-:106F100094BF3391BF8E187FEDC44FE7407E3A4057
-:106F2000653EA47BC1BB761CCF0B115CC723D3216C
-:106F30002433885450112F39FA3A33C127117D84F4
-:106F40001F5A5FF602B13EF3FB72A195C7E5439865
-:106F5000DB42E8E636C3A14A0AD3734A97EF3BF017
-:106F60009533468FD1DA09C138FFB9429CBF98B931
-:106F7000ED963CB47EE3AF9A71F887CA83BE2A1CB3
-:106F8000A7F85D3E3B2EE5FF54CE201082F572053A
-:106F900048AEAE9E8573C18DC3BD36888CA4D9839F
-:106FA0004C5FCA48D137EC8B1D051531E8C7E7ACFB
-:106FB000A73E3C45CF59216E1CD121DF9A467C7FEC
-:106FC000982E4C1EC8F795A79AB29E8B9B77AB9ACA
-:106FD0009A45EB848930F12B39F63C4CCA40233377
-:106FE000F0F9CF5605B39EB3C6F8D0E2F867C6A550
-:106FF0000F019CF24DEC138EB36238465CB29D0BD0
-:10700000AEB6ABCD598C43C6E94A64901DDBCF5276
-:107010008A42BC7E689C7823DA618BC3274978BD9D
-:107020004E7587883FF5AEF02CB61326BB317DBE7A
-:107030001AC9C7717D8DE025BE6EDC73C369E26B32
-:107040009F07347BBAC0856F02D909C38E8026A3FF
-:107050007CD748E31C12B6F5ED1FBFF47B1C9FD212
-:1070600029838CF7FB70CDDDB46EC5974E4274C298
-:10707000FA04FD6E7608FD31D669D6D77F749D2857
-:10708000799E9FE52093FD5DFF2FF47C3FA4B6D24F
-:10709000F84D0ABE9AE6EFB286B6231F561C911928
-:1070A0006F2BDAA410909C152D8DFAF7BE2883C0A3
-:1070B0001FF0FD7B7F55CA789461F48FA6E1F381C0
-:1070C000CD562F5A4C48F725FAABCCD943408BC349
-:1070D00001047D2FE722BF16EBFCDAE87C780BD1A8
-:1070E000B3A949F8A7ECEA8C84F19FA55C6F5B8A91
-:1070F000F36B7948D714C24DE7F035D85F5E20AB0B
-:10710000329A889C05F989FEB1D5FA0EE99F86FF6F
-:1071100008DF86FD5A4AF68BEC907C3FFBBF73205C
-:10712000FC9F02C2FF35A0BD8AE07CCB3689E78D8B
-:10713000F96A3A1F595380ED1DA1C4EBCB4189F583
-:10714000D9CFBA47921D580943BC766920FE2DE974
-:10715000887F02890B5C420E2E2FD997FE5764AFB1
-:107160005DB082F595F84E7644EE19B1711ACE17DE
-:10717000E8B24248237989FBFD9BE550B038A61F51
-:10718000FD5D7B981FCBF2901F884F7B6E22FF53D3
-:10719000B444FE3B47667CAD3C52BD267ECA739923
-:1071A000FFC86FA0F9D32695243EAFF37B24FE13CE
-:1071B000FCF6319D4B3B24784C223EAF3F5CA00D4A
-:1071C000E46B43C72336D2FF8BF1D5CCC7D1E9BAE4
-:1071D0001DD1F9780E3A0FE8A8AC7678D894F03A39
-:1071E00014B5753AE1B410F5967062D66B837FD60C
-:1071F0002CD567C37197D1385C5FBE232C94D10B1B
-:10720000CA09C2CB2261779B551FFB23C3DE3A2FED
-:10721000D8ED77E12B6CB3E6553E4438BA534A6D4E
-:10722000952B07EAEDBA31F7B0FD2A5C8DF698FD93
-:107230006A629C165EE5F02E467A9E5C05DEC5C34A
-:10724000009E5AA5726B8EDF0C7DDF8CF19B5DF882
-:10725000679E5741FCAE55C9FE7855A2F3611BB03D
-:107260009EF69541682BBE3F1CF9D4A391BD2E8F8D
-:107270005E5F8DF145600954539CF1AF1922AE7BDE
-:10728000466F6765D8B85D5B6D011FBEA7B7530E2B
-:1072900049485FAFEA3B7215D99D4EABC6F1951ACE
-:1072A0007DE97B7CBF425D8BFCCCB3B48EA3F7E25F
-:1072B000F8D9219CB7AFF35DF7ED717EB9B7E3D193
-:1072C000511407FDCC0235E124F1D0F2740BC73123
-:1072D000BD23DFF1E0B2A1DE11B501E2E9C19EC636
-:1072E0006A8AA7EE746A4C97AD7D7AA480F1338FD9
-:1072F000E3E3E7960E61BCED3D0321D2BB59F2AD4D
-:10730000D78EC1FEE45715AF9D95CA77FDC2093CE3
-:1073100084E5BEE1CB8A4DC4BF00F273355F6C3D9E
-:1073200041F27AF6CF0A90DE55363EFDAE1FD77990
-:107330003817D1300960822F5C11C151333BD3A77C
-:10734000937E074E01EBEBF86E2501B720D71D2A7F
-:1073500020BBF286080F27BE61BA0F4199E2FFC930
-:107360003D89D7A75E04EFFF62D80D377808EF8F0D
-:10737000ADEA8077C92FEAFE331F17988C9F06BEAF
-:10738000F738673C922EE2769970EB55928F7F2703
-:1073900043C4F91BBE9425C2655F14BCAB915F7DED
-:1073A0008BF379DD7D9F524086ED97F2EC709278F9
-:1073B000EBD7E93696DFCF6C02F73F5BEA0A35E19F
-:1073C0007A0E2EADBDBC07DF77FE9FFC97AB5F1733
-:1073D00007A369B14C6279A511DFEF9CD722B11EDA
-:1073E000426B1EF1CD3CDED013436F0C7DC95B3A7E
-:1073F000C41F4AF29EE1B43EA46FC6D291928D7032
-:10740000BB5F029263EF6AA4EB6BE2C720AC2E2055
-:107410007A021D9FD8C85F3B3A255F28C9F8C3E9A7
-:107420006EE65FEFEA60D354E4D73D8BF059D20BA0
-:107430005B6B71B2F983B0A1008343684BD704EE54
-:107440001D701BE92528AD79E4B77B3BAABE4576C4
-:10745000FD31D4438A1B7E66F532DDC17A80EDC4EE
-:10746000160A3CB15F783D6C591B974776A74F3F92
-:10747000958EF39D4A5779DE4CBF5722BABD7FFBEC
-:10748000CC4DF3F77D6E67F9E5930EC7C56D9FA6EA
-:107490000BFEACC9F0BDC678A9C96263EAF5BBBDF5
-:1074A0008B2B00AEEC407EC7E13226B720AF3BC34A
-:1074B0001F647A32BA3171E2FCCBA751BC1CD08D6B
-:1074C0003344245026C4EC73A5A3305220F28770B5
-:1074D0000EF237A3E6C76CAF53D00E53280EDD89EA
-:1074E00079115B647C9E749FEC42B32AE2AC967483
-:1074F00061E75A1E5142CDF8DECD4A4FCA306C8B3F
-:107500007DDA0C45237B5FC6F3E6DE05ACDF16476C
-:1075100048223BE42CFD45FA85B86B2AC0EEBFC972
-:10752000CC7FB39C46EB7AB126C3FF05F1756C574F
-:10753000F420856FDE14C824B9CE925DBCEEC96715
-:1075400085FD31DB1B39F2AB9F91BDE9D3F3A72455
-:10755000F6E676F2AF86BD01B9EC10E167EA8B7A08
-:107560009AA9DB19CC3E980F138FFA9B5D49ECCB9F
-:1075700024A84E43165FD4BE98E588C1FE857E21BF
-:1075800032A3A20BF528EE79B33D2AC8D0FDAF6E29
-:107590008FCEC1B49CABB5185ECA577A0FD9E3F051
-:1075A00061D8A1185E428C33F37B24705CE8ABA5F4
-:1075B000643F8ECA696477A6A3DC71FE2E5D4FD24C
-:1075C0003F0D7D8BE4BFA1F39A14C2F5535D550EB8
-:1075D000529B15B9B2F6678C9F9503F383A0C385C0
-:1075E000EC9DF15E2B3834D748E28785F920ABD883
-:1075F0008F7B7F7FAB349BEC220A2D6DFE98C1ED13
-:10760000C18A5C1BBFE7A9AE9234C2910B30BF4563
-:10761000F955764A1C2798716DC67133BEC0C27980
-:107620006335C713B214D6F71D12F3D2E2E064F645
-:107630005377611E4E716B7F17FA2D6C9F423F4F3F
-:10764000714AB36B16AFDB58AF41DF5DA93372A04F
-:107650006CE0FA8D36F0B90CA1CCB8BE12B5118E23
-:10766000039FDB12AE1BFC1C8C0F063FA7103FA52F
-:10767000FF3E3FA76608B99AF9FA3F5D7FE18A4964
-:10768000906C5FE0FF97F54F05FFEF7B44BEF55A26
-:10769000AE27664F0A57CC9697211F26503CEE8D99
-:1076A000D90707FE237C8DED68657B3309ED0DC599
-:1076B00099057561B62F137345BE64B61B5776C224
-:1076C0004D641F2747302EBD04FBF129FD471EEFF7
-:1076D000E3FC3203E91EF7FC82E5BBF0D2580D3221
-:1076E000E7E27BC6762B5EF27BD09D99745FC0EC9F
-:1076F000378CB8D48847CDE38C78D4F0270D3A1F67
-:10770000FE3DC3FF64065D57D520E91BEA55F831FD
-:107710002FC35EA378A13BBD7A37DF1F190E721EFF
-:1077200050022AEDEBA0BE721C56E97045E4B1038D
-:10773000F5D369D2C330F285F609822E4B689834AE
-:10774000900E0CB78314F7E103FCFEA5BABF28C462
-:10775000312CB406E0F8BF702CF8C9EF1696638B95
-:10776000EB3CA6C7232F995AA4FB79E2AB5581A025
-:10777000BDFC1FA797482C2827FEF8FE40EB77CCCE
-:10778000F631FD052A78298E2F50C29217DF9F51BE
-:10779000A7491736910C3F8DF315CCD5D85F160C41
-:1077A000C53E8DA77827895C7A32ACBCCE7A47CFAC
-:1077B000611BF22130B771B6DB128BD3ED56BFAF30
-:1077C00080F68F3A44BC0EB4DF379EED9244EB5105
-:1077D0006608FE0454915FB94065BB59A9CBB1D28C
-:1077E0003197F777C827DA270F5CB7A4F97870FECE
-:1077F0007CD082936376D5C87F701AA0F798ED6A23
-:10780000DFBED72F0BA23EBEF5BF3F4905BCFF2709
-:10781000259A4AFC387DFF89541FF2E3ADFB45FEF3
-:10782000F27D537CA4640AB92ECEACFE82F87ADBDA
-:10783000AABF4D88B72FB0329BF5E28E904CC9F0AD
-:1078400005FD59BEC3C97BCF46BF3E9C99D037F4D6
-:10785000A0DE0E8DC9E2EA6999222FBA63D7161B02
-:10786000E5D18B33FDA999D83FADC77FA7DB53790D
-:107870003FC0A067D1AE7136E2F79F3AED106103C9
-:10788000D96D1572F65D2F4DA0CD7BF167A6F3F093
-:10789000FE021BED9F2F91202AF6B5E0F0CFB1FF3D
-:1078A0005EAE0C6BBD03D7B1E42DD56641F92C99C2
-:1078B0000ED120EAD5A2BBA435F7E2F8457E1745E4
-:1078C0007003D6B9309898E72FD3E395DB1FB29AAF
-:1078D000F2A4C6C3B45FB618E7A17C76496BE2FD9B
-:1078E000FEAE3B0FFF9CFC40878DFDC0B28BE44F8A
-:1078F000E332F57865024CFCAA94E295B21F9569D3
-:1079000083DB25235E39BD0A083CF097550E6ECF08
-:10791000AC52B9FD42B7D7CB3B0E1C665C2BDD13D6
-:10792000C8CF3ED5F5AEF3162DE637BEB9E5934385
-:107930003FC77E05ADB398EC65C44A78BC4AF71BD7
-:10794000CBF438A4E273B3DF38F087DF539E8DEBBE
-:10795000DFCE19D7A5C523B782F2693C1F0C3F6261
-:10796000E6477F57A99370323F33713FF67FCA973E
-:10797000C19EAB9711D749EC87A14F5F64087C2F5C
-:10798000DE366F4D3EBEBF79DF07453DC22EBD06D8
-:107990009E185ED1D033DE960144D7223EFD9DFF76
-:1079A0007498F87498F03689FA97F1FDDC2AC42FA0
-:1079B000EAEDB2CE0FDF84B1AC5FB9965C6A23B951
-:1079C000945F9A7168C69F196FBDD69E22B20F66EA
-:1079D0009CF54A89E76446BB34539C5F2CD67CB344
-:1079E00028DF45B7B646E5F508FB775A693DFC4305
-:1079F000D2DB6D12E787F5CFB43D4DF6A8F6B73F61
-:107A000071933DFA5069F5D0FBEAB63FE0F6915D1F
-:107A100052826E7AFEC390B04BE6F775EA7C34CEA4
-:107A2000052EF8A587A26BEE437E9C477D26FD6D53
-:107A300068FFEB9AFB28CFF039A294779E567A66BE
-:107A4000111D772C7435367929BF4D5C77EDE33FF6
-:107A5000F168BC7F1C2CD0F9C7F96AC336AB3782FA
-:107A6000F336BC227BE9350188F2FACCCF07C2EFAE
-:107A7000DAC87EAB1688164E1D781FC56823BD096F
-:107A8000B4AFFB5876532BE415203EC79D33D4E8A2
-:107A900076D88CE35D99FABE888E5FE40FEFA70677
-:107AA000912EDA3F8290B0C7CDBFD938F66DA4EFE2
-:107AB000CCB617DD5259FCB9C26A96477FF8F65F1B
-:107AC000392C83E3B757C77B2C6E09F1735A87248F
-:107AD0000E833A455B678DB8296FABDB62F506F123
-:107AE000725D9B0C0EF25F27ED1C37D4B57DC2F89A
-:107AF000AC937C51691C2FC32DC5C511CBDBDE9B1C
-:107B000045F676799E0C7351A56AF79C13E37D10B8
-:107B10004DC1F1CB77BF3DEB87D447BC3B92C8AB9F
-:107B20002A7CC026F4C624AFF0DBB3281E6EFECD3F
-:107B3000672C8F0FF74B90533CF0F99A2DEFD9C873
-:107B40009F9C41C164A60B7E91DF0884E585B6B495
-:107B500064F28B5CFFBB4ABECFFB7F1793E37A3A9C
-:107B60006B1BCF787FF2774847CD9B76EF5C7AEF3F
-:107B70009377BA0171F081D22870FF8B073CE487BC
-:107B80006BAC418FCAADB85EF3CBBB198FCB8EDF28
-:107B9000ED11F98D2F4FEC1705F3689D4B367F9B48
-:107BA000D7B914FC8CC79A5FC8D5B44F734E81D92E
-:107BB000BB93E84D659688B7ECF083B1F789F30085
-:107BC000A0FCFC037DDF34F8B2CC719B1D6E4C9B96
-:107BD00017B7FF64CF12F62A08A13FD2B96A00DDB9
-:107BE0002B9F831C3F378BE6B9AB5869A473225C8B
-:107BF0007F50E797F415EF0B80A6C4C55955C7AF62
-:107C0000CEA17D313BF4DBFE5725C7D51AC53D71AA
-:107C1000CF31DF3ED86A1F225D89AD27F9BEE9ED7D
-:107C20005986FEC3CB1087A7C08E0F184F80FE3B2E
-:107C30002D57F41F237D5CE46A4C43BE7DFACABB1A
-:107C4000363AD70AE27A8611BDDDEF711FBCD91A28
-:107C50008D37E60F74D863E781A4D7DBDE33E9758F
-:107C6000E27DF4DFCCCF00A46994B77D608BCE2297
-:107C70007F1EC4F7527DC1D20DF684F3C6185E4C48
-:107C8000E78BBA7E1AFB9CCB4CF198D19AEDC2954A
-:107C9000598976013667273D5F34E72175D6D0AF25
-:107CA000893F7527ED9CBFD4B509FDC3803A3A0CD6
-:107CB000F5E1A35D875EBB05D7F151D89A3597DF13
-:107CC00096686F6B9E42FDC5F132F23B85EDED6724
-:107CD0001C4F19FEE823175E1C93446FF17A52BDC6
-:107CE0007501DBB3FF577676D92076F6BB5903E2F0
-:107CF00084347C0DFCE589E597537C61E6AF615FD8
-:107D0000CD76F3934C2DA9DD04DDCF1B7CACDD7962
-:107D100096717B3E4F9C37356CFB2BFB31646BD4EB
-:107D20008EB86D087DCCFD07C88F71FFC07C696C73
-:107D3000B27527F2D37CFF32922DE723D1EF139F48
-:107D4000658BDB2BF6E7543ECF6F26BF49765A533F
-:107D500081E40833204C7187D4F9FC5FE97DE6BCEF
-:107D60002238034636F2B92EAC8BAFCF092B7A3DC1
-:107D70004530797D4EB32D769E4BF7073BCF7D5F27
-:107D8000B7575E97CAE508D62C4D4E5657E2ADB2AE
-:107D900024CD237E9225CE774AB3C5BA8F65097963
-:107DA000B4C8D5FA46A3C897680F95ED5FBA9BCFC4
-:107DB00083AD7A7D06CE9CCBE7074ECB27C812D881
-:107DC000BDA17A8E42FBC315963B4BB1DFB5E1F600
-:107DD000390AE2C73BD5B2A704FB2F6C582CFA57DF
-:107DE0005A2AAC08FDC7834BE6CCA47D03CBDB3F0E
-:107DF000A5F529AB15A0FA91D296F7B87F97559CB7
-:107E00005F353CBBB786DEDF20A12090FF2DEE70F2
-:107E100023D731E482BA9A368FB53D7EBABF260F9A
-:107E2000F379944724CDFFDB2CF22B8E885B2BA1BA
-:107E3000BCD2B7F17B785F79D94A3921AE53EC8354
-:107E40008FDE333597ECEEFF85F7FF5B56F6E0EFFC
-:107E50003FF3D4B50B68FC68195419E72B57B42AC3
-:107E6000EADB31BFA6BCCD9043B922F85EE6B27121
-:107E70003ED792EECB253C1D239C665F7ADBACD7C8
-:107E80000FC94E810339CDD2B81BDB5774F9BFAA95
-:107E9000F383FE685FA06F5FCE56AE5B816811C949
-:107EA0005796B7B6113FA24D0A6CA5FDD77D8FB787
-:107EB000113E5FB73978FFE8E6B4F5D62B90E4724F
-:107EC00047D19D04FE37A55D7753BB2FDBDF93259C
-:107ED000E68DD0BCB77C5F16F3BA1A53C97F820F08
-:107EE000F54AECD370FC0E7ED42BA2F920EAD538EB
-:107EF000320589754E663AE4B45D4CC7CD7641C70C
-:107F0000825049730FD231CE1EBA8CF22B7C7F94F3
-:107F1000E4700B865B84E760217491DC5EBFEDCA80
-:107F20002D627D85ACAFACFF7CFE7EE6499A2F804A
-:107F3000F3D3396A40EAE1FE1EC5A1065561DF1799
-:107F4000C6EDBB3D0BAD27CAC4FE7E33E51D53F520
-:107F5000BCD8D87F33EA0D2676F9AB5C64B0E54E29
-:107F600099ECCA398CD7C88E99F7DD269BECEFD4F3
-:107F70008E8FD82E5FEC3CD099ADDBE37CC8A77523
-:107F800084E93C90025EDD4F7AE93C3089FEC79D72
-:107F90000766660B397DED79E09DBABDD1A84E0E1E
-:107FA000D7D18F1393DCFA8F2E82F24AAE476884C2
-:107FB000F4C1FD6ABBC9FE1B381FF38A7A3BD9B3F3
-:107FC00031AFC06DB4DEABF5F393FED3C0F580E303
-:107FD0007A1C5C1F68EDB28642525C3DCA490BD7E1
-:107FE000A3F48337C4F52B41BB1A647B3996EB4F5E
-:107FF0005A4EEAE7BD7A3D438560D93F5C0F61AEDA
-:108000007F98E29E242FACE4F31990260DAC7F9864
-:1080100022DF2A935D81A3429E17EA20E43299D69B
-:10802000752E024029DA8457E2E48DFF9B9815945F
-:10803000B9FCE954E2F529265C98E57F6DB61EDFB0
-:10804000E8F21FB48EE443B1AF360EC6721D89D577
-:108050005C47F286850B366375241521D2B7094D2E
-:1080600062DFF862753CE63A1D731D4E9E3F914FEC
-:1080700005355724DCBFACB13CA17FF9CA2909E31F
-:108080008BD1A1C6F74B1F9A93307E58EB8D09FD1B
-:10809000119B6E49183F2AB428E1FEE81DB549EB53
-:1080A0005E0C9C8C09AF48B8BFD1F9E4BB84AF9695
-:1080B0003C59A578FECA8EFB4C7531D31817538CEA
-:1080C0007D785DFE465D1D9581119FC7A3FC1F2B2A
-:1080D000A6B8E9FE2A491B88036F24C87EFC1FC589
-:1080E000C17A931D30F4FF62FB373FD6FD849C526A
-:1080F00024519CE3C3B82A652AD5118B737B784B36
-:10810000D4AB7C96F2778E8B34C9ED856FD25B55FC
-:1081100089E2A07BAB348E83EE1D527480F60F7A19
-:108120007EE0F64AF903EB42CD75A0190EDF64E05C
-:10813000AD115107D982869EEC7F708683E38C87D0
-:108140002D96DBAAE3E87F225BD89F27B245BEF5D8
-:10815000735B7837D901C5016A539E789E8A1F8068
-:108160002A7B502EEE4C10F561F0C6DA9985E43F7B
-:108170007B466AE9543F8BFD6FE06525C4FEE496BB
-:108180006685F3BCD5CE27D99F942BC29F8C93854F
-:10819000DF403FD241F6F14DE97EAB88B382569283
-:1081A0004F810382EE72F6AF7C4E9C0E59D28A321A
-:1081B000AA4FBDE0B7B4AF104C876AA75A884FFDED
-:1081C0008B653E0F7E8948427AFB6B46719D73FF3B
-:1081D00085FA3F2D8DF2EBFEC58F9EBDBB32A69773
-:1081E000276DC9F3BC8BEDBBD56C793495CE514E60
-:1081F0008E8484FA8C37B3457EF866B62CEA0C423E
-:10820000EF79884D7D4BBE184E4407A4EE352E1CE9
-:10821000F2E0A61F54935C6CEDF382B4AF69ECE31B
-:108220005FC8033BA773FDB6912FDDFCBAD8D7BB5F
-:10823000F98BC47DEB8FB2C5B9C047F43E6CCBBBA4
-:10824000FCE3496E379042F0BEB27F3CC507D52AA9
-:1082500068E4F717F817DE7D14FBF3D64B1CEFD359
-:108260007D1A7F23CA90EE9F00EFAB7B91BECFB308
-:10827000053DF3A1DA4A74BEF6FDFA54C2D3EBE928
-:10828000627C54026D6BDC7C37E8F3BDFEFDE57B60
-:10829000294FA7F7D1FB891E7AFF3C154AA8FF1A80
-:1082A000F8CFBE5A3CF0BD3781CFAAD77B59C94F12
-:1082B0009642A8ED69B2AB472CDEB5C06D2493FDA4
-:1082C000929DFD525F53F4C97B90CE3FD5FE75AFB2
-:1082D000847CFDE3C2E8AF9FC6EBDFDD248386B874
-:1082E000F838C32F7BE2EAB44F2EFE2495F889F1CB
-:1082F000CAF69F92DEEDB47BA9AEE3CDDA9DC3E36F
-:10830000E3FA54CF74073D07932EED3CADEA89C9DB
-:108310008CBF15DB05FE56FC66440EE16C45EA0594
-:10832000DC89FEF6523E279D2041D2FC783FE24D8B
-:108330001BC17535A021CEF67F2EEACAF71CCDA849
-:1083400020FA14F05F16BF9E3D2FDD329AEB79DFE5
-:10835000C8BA243A496783687F6F665389F181AE52
-:10836000270B3A332BF478729487E2B9DFFFE6ECFF
-:108370007F105FF6EDDCFE43D6914BE3C3C03A5A63
-:108380007527DB27230FA3BA57CAD30E59D84F5EE0
-:108390002DDFCF7918D56970DE35A488C7A3C15108
-:1083A000ADC2BE89EF24300E6EF672BD27EBEB4AEC
-:1083B00055C42D469E245BBCB98AF8C8E0C5A93CCB
-:1083C0007F09D0FE989B122BC35E611CE1962DBAEB
-:1083D000BD029F03F3D3D1BA3D9BE5F15EDB22CE14
-:1083E0006B12E24FEC57ED4A127756E33F8E3B3764
-:1083F000FB9B53D82F6D96CB28EEF03922E4C7CDE6
-:1084000071E75458CFFB0003E2CFE7FE7249F1E772
-:10841000F73CFF3DBFB3D4A3B1FD098F14762E1CEA
-:1084200019C2790EFE55907E0DA5BD003A07CD13F9
-:10843000AD4DEA1DE940FDACF594AF7B681AC2650D
-:10844000A8E00FF551A450AA7D72E82B8A03BB1552
-:10845000965FFF73577CED772495A887E4EC23871C
-:10846000A770BD735F97D08FB60CEDDFA7529E81CA
-:1084700071E656243145E9B1A52759CFD3647F5120
-:108480001FC21E9147393AC4B9A843F301D99714C2
-:10849000551D4789B9317EB147D8DDFAC36F16D96A
-:1084A000503E672D47DD74BE52B7F729372E179A15
-:1084B00033FD0F90FE2C3FF9F20495EBDCB614511E
-:1084C000FE1D8EBC3C83E3B3D9C8DA7183AF27B0FD
-:1084D000A9823E4280864D99DC8EA27D15BC14880F
-:1084E0008875F676346724DB1F08FCDB5B0769BD03
-:1084F0003B8FA570DCB233BB9BF520380F603BF29D
-:10850000FB89CF47F37C0830A6E38A6A4D227FFFC0
-:108510000B7D3D3BF5FCB2F77399C719F38EE998D3
-:108520002EAB88ABB248EB41AEE3EAB46B24DF94E8
-:108530006D20F8D399C2756181FDD788BC335D9CED
-:1085400047B70D89FE91DE13DD67D7A84E35456D1F
-:10855000850C9CBFCD26FCEC2804FE53AED875E3F9
-:108560007D299D1BF92308C405D7E3A528ADF00D8F
-:10857000573CFF5399DEFD1E11EFB40D89585CE4A2
-:10858000273057DACA74C5E8047EAF41E7288E8BDE
-:10859000DB6CD1F769BF1DE9520917A340D0099DD3
-:1085A00023348A57525471AE9EA26ADEA03490AE34
-:1085B000C058086170000FAF860B7ACE7584436295
-:1085C0007D07EA425B891EC70417AF9B392DAE4F6A
-:1085D000866C52ECF9139E65EB5A0A695DC20F2A4C
-:1085E0004A98CFC7DD0B40A5F3EF14C5C77952CA2F
-:1085F0007CD09A505E4E878FEF7B708EA6C9DC8F41
-:1086000010FD2ADDA77D9B34D53907E94EFB328D5D
-:108610009F6BE8B672DD79DDDF6F4A2BC3F59DB144
-:108620001CBC6717B61F2D0C0FA773DA0969FEB7BC
-:10863000C81E3F736AD1BA3138FE2F6D56EF5CB257
-:108640004B3DC11FD3B97DED13568DFCE2836FF412
-:1086500047BE22F93E2BB15DECB38AFBD8D79AF026
-:108660007E43E707363AD7BAA6E36D1BED7FAFCC62
-:10867000F1BF4F7A30A9A3A98AF836195A9B699F8E
-:1086800013ED21D74B847385BDE87F65F8D6A638F6
-:108690003EBB72F47DEFA8FF72D29B4E5D3FF75355
-:1086A0007C84ED5E3D4EDB7BE0BBA55ADCF96910B6
-:1086B0000EF27EE06A788EEB3A8DEB7D216536E135
-:1086C00068F46B8EDB7C7138B3E5087DB7E9EFFBAE
-:1086D000798EFF4BD6DB03EFD8DCB8FEC09FC345D5
-:1086E000E4AFC218CF7D5D1D69C0A42F17EA8E4E7E
-:1086F00003DB919DAF7570FCBDF33E359DF41EE923
-:108700008734ECEFC5F882F4686FB1D0BBA657CFC1
-:108710008FA5FDE2F3FB965F4EFCEAF5580D7CCF8A
-:1087200018427AB41BD88E197A58467A28D1F77B2A
-:1087300062BFA78CF04D7A67EB9EC37AB7D702A4CD
-:1087400077886FC63BE25BA538A44C45BCF3F323A6
-:10875000588FDBBA5FBE82EBD991BDC3C651DFC271
-:10876000F86A8BCC0949F87CA53572909EAFC4F7A6
-:10877000376931BDAC9412EB7A167B449DAC611F16
-:108780007FA0EB6778A496E6C5F14E594EC07F9C5A
-:108790009F147DDD8FDEBBF127EB36A0BE94FA2A55
-:1087A0002C1328DE3926B31FD8AFC7C92BFE30E5FE
-:1087B000865DE23AFBCF888E8B837ADCFCDCAA5C98
-:1087C000EE935FD0502EE3B1F55550BD7763156D34
-:1087D000C54D9ADD7A88DA29D5E12A3A2E9CB6A0D1
-:1087E000FB90F8C6CD379AF0D67EF05BA3B94EFA6F
-:1087F000A41DE83BCEF6FF8CFEF1095CFF3DFB912A
-:10880000DF90342E61BCA1C766FC0D86933EA9E7BC
-:10881000FAA96897AFDBF8EB6B1574E80D04045CFC
-:10882000FF9C8DDBD605D1079EC8F15D9783F8FBD1
-:1088300022D77F5D0EF2ADEFF87F7AC89FEC7DE521
-:108840001D37F9E1769B6F34E1AABD04F3882478E3
-:108850009C926365FF5A3948BD49638EC8B7860745
-:10886000611DE1A5A15D5643E4A77DDDD793DF78C7
-:108870001F5949FBDA4BA707DD942FD5EC3DC47592
-:10888000FA463EBD04F43FF9D659C4FF73B9223FFE
-:108890005EBAC19A90DF8E80888DCE91037E576339
-:1088A000044552638A3BEEE8D8C2DF8DD46E4B7C20
-:1088B000AE8EE2148450DD45F2E3C61C7D9FA41405
-:1088C0004A294E41DCF03E49F455D9BB15B8BEAA41
-:1088D0008BEAAB765A049F9C0E6849CB88C52B2344
-:1088E000F27C4BC8DE2D31FC875EAF146D93F87BB4
-:1088F0008A513B44BE3CE5B4B685BF930AFAB84EF4
-:10890000AF860840BAA728415EFF94DC5208E2FA1D
-:1089100027A179267D59DA2985989FFA772F0AFEB3
-:1089200013FB459B65FECE6FB30499C5346F94F974
-:1089300053ABEF1F2EDF91787E51B7E9F8610A95AE
-:10894000EAC3A6F3209D3FE6F39DA7E83F929CEF84
-:10895000FC24478FE78AA028E1BBBCAE4BFB2EEF7F
-:10896000238A075C74F8080971F91E1D470DFABACD
-:10897000EB42B258378A82EAA36FD76112002FF315
-:10898000A91E71423880F542DE463D632D54DBA8B6
-:108990008EACBEBDE9309DBF2DD5E35A339E90A16C
-:1089A000CCAF657ADD50CDE6C4FBB53A5F6A4D7C4D
-:1089B00069F04B26FA44DC7DA9F4A1E5FA0EE1A0AA
-:1089C000769795EBB9CFC1AD5C7F55DFBE85E95990
-:1089D000AACB6F20BD415ECF325C0FE9D3A5D26B2D
-:1089E00096DF3103E757C01509F29B9D7949F22BB9
-:1089F000057539ADAFBF4BE4B5FD5D25BC2F61E01A
-:108A0000C5FCFC2C3D8EBE66938837CF7654392941
-:108A10001EE83BAA7825C47DC5B14FDDF4FD4DF9B4
-:108A20003E19E89CB4AFB3625D10EDE59EAEA13790
-:108A300069E807CA8F29EC372A8E9587528AA95F81
-:108A4000EE2CE53A132D93F2009C87FD70DFD1A147
-:108A500027CA384E9F5949296AD3D17227C50B7B43
-:108A600040EC6F48C72A337BE2FCCA7B3962BF61A6
-:108A70004DEEBB0F939DBA66B795F783AFB1465FD6
-:108A8000A23C6C4F97E26DC27EDDB145AB5348DE30
-:108A9000BF91BC14761FEE5E9145E735F59D56D526
-:108AA000CEF4DE7D90EE077749DE61383EB0EFEA26
-:108AB000D16DB44FB4A5C24BEC35DE579EAE3D4AE6
-:108AC000F5AE90E7E4BCFD9ACBACEC5FCFE43BFFA6
-:108AD000752EAEABD6B76516D9E133BFDBC37515BE
-:108AE0007D6D12E44AB48F7CE849AAF739F3F4713A
-:108AF0001B9D0757B51FE7BA8DC1FCC1D910E28E87
-:108B0000F3F6561BE537F55B8C7E0F7F8F52ADC7B2
-:108B1000510DDBDEE67E2DE50184C7CD7248C3FF33
-:108B20003CB4EF193E1F6ED825EA3E2EDCDF26F15D
-:108B30007D03EF8B74BBB51C34C6FB7203EF7A7DEB
-:108B40009481F7733097EBB496EF7A84F1BD44C704
-:108B5000B7B96E0A2DB0AD2C4BE82BEDB799BFFF1E
-:108B6000BB43C7F71D17C1F7A85C1DDFA36014E165
-:108B7000FBFC74514F77FEF81027CD7FFE08EFBE47
-:108B80007E1DCED9EF1ED5E382FE88C567BB323687
-:108B9000AEB7E313FE0E3170B4DF467527B33A3F2C
-:108BA0006679CCED3C3093F87D1DF8EB887FD77566
-:108BB0003A558A83E7F6087B36A7D3CEE713D74129
-:108BC000B885E4DCB7FFF1960CC2CDAF056E0C3B67
-:108BD000B74CE7EBB5653F9845F97BADEE0FFBBBB6
-:108BE000EE9CC576671C1453BC3747FFCE7B4E58AE
-:108BF000B7439B13F94EE7D424B7864E3BD79B5C13
-:108C00000B3D36F267D7EAFED3EC27FBF29C2CE74C
-:108C100020FAAB6138BE6E97A98E52E9617AFA3BB1
-:108C20006C7CDED560F2BFD372AD09F51783E1D35A
-:108C30002CAFDB72757FA2CB6B6E54D431CC7945EF
-:108C4000F6D2F94357647519C50B06DFCCF2EAD2A8
-:108C50004AD3BEEEF7125ED2E37CA37F83FEFD5BB8
-:108C6000586D75C5E7EDCFE75AF473CED04F2B7032
-:108C70009D7749D04D38C4FCE6867229697EB332AF
-:108C800017C73F5F78FBFA71F1F98D6FCB708AF7E8
-:108C90001E44BB5251C9F53BDD7C5EA8B4CEA57322
-:108CA000B0C02EAB97F29A4087CCF14060973D64FC
-:108CB000C179AF211C215DD59DD2D58423CC1B5A0F
-:108CC00072D13ECDA32D651C37AF03E3117C6EDE60
-:108CD000CC8F197F47868A75F72B5A4EB23CC2C893
-:108CE0001F1A3E17F1AA71BD01ED008D6FD0BF4B69
-:108CF0006B3FF8D7A2E2543AB7FDAC6821C5A9B9D9
-:108D0000227F31E2D528C6AB257ABC4275174B8548
-:108D1000E860E973F7D9C87E1DA61FB6A0FA49D549
-:108D2000BF86F261D50F8D3FA240436A613D6A2044
-:108D30009D221CEE95C4FECDB356AA0D81A6978741
-:108D4000705D60EF6BE21CCAACEFBD8BBAD95E9C64
-:108D50005FE86A24BC2D2FDBB206230C18BDFF751B
-:108D6000B637A37F67532D6A6C5D4DF4DD1DE7694F
-:108D70002D09F1726F47B38DF7A1E3BF1B2E1918B0
-:108D80001FD55F641FEB79935D41FA39DEED3B221D
-:108D9000ABB42F847CFC657E3CBFF478A8FD600AF0
-:108DA000FBAFBEE3AE10C5FD7FD1F17846DF976F14
-:108DB0009A24333F2C93453B7AFF3325245F9287D7
-:108DC0001FEDFDCEFDCF5CE1E37DF490A823DE91A5
-:108DD00058875D1F4EACB336F81AD0F98A740DA7C8
-:108DE000EF950DBAF62A3D6E6F123D92A4832C2F9B
-:108DF0008B9498E7069E95ABE3EB48713DB791DD08
-:108E00003B69E88B12F5901F7E2B5763DC34750AA3
-:108E1000F95AF68916DFFF1DB15F63E5F70FB83F1A
-:108E2000235847F7CF173BB9BE013E0FCEA5FE3DF5
-:108E300025E2F703EE79B97644FC3E1D48221F0F68
-:108E400058A35CEF17386E61FA02C7FB3D435D64BF
-:108E500017B7CCA43ADA6B757B71B8C45943380F95
-:108E6000D27B7362F32CC915E71B40EBCD8D7D5F80
-:108E700069AC7735DCC87C58ADE3EA3FF4BC1EF33F
-:108E8000A8F3B949F2A8C1E2DF0B74EBF1D3F9E919
-:108E9000DA89EF210ECA8F2841CAD7F7BC91122276
-:108EA000FFDFB46FD99F281F0EBC69078A43EED934
-:108EB000BF6C04D7E1FBFD57923D39BFFF8E2BB944
-:108EC0008E5112DF970689BE5C8AA75EF5509C54CE
-:108ED000BFEF55AE73ACDF3BFE518A9F305EBA9652
-:108EE000AE631CC3F82B3F56C9F8DB73B432B3949E
-:108EF0000807AF93E6AD3FA270DD63FD91CA17E7A7
-:108F0000525C736C06C74F46BC5441F938C54F4795
-:108F10008626C44FA979827F7D075278FF4382124B
-:108F2000811F189A809FBAF63F709C5187F62E1EBB
-:108F300047C673C5790ACF332C4FC74F58F2313E1D
-:108F4000768BB6AE630FAF6FB935CCF26EDA6515BE
-:108F5000F7DB446BD44907212348FC78912EA11CF0
-:108F6000E6D84285946FBE502CF20DB33C9EC813D8
-:108F7000E7852F9C14DF19BF30DD3F22D9F7C641AA
-:108F80009821F27049E777BB7576B2EF7977E4897B
-:108F9000FD097726249C4B1AEDA379425FE6D8C4DD
-:108FA0003E95F9BE3FCFF03FB08ECE634ECCB5AA12
-:108FB000C6EFB7E4A1DDBD1E8C3FEFABF3B3E89C79
-:108FC0004BE4D5003D33C91E7E9BF6F929FE9A2459
-:108FD000FCBAB1CF3F6F333C20F6F96FB5925D30EC
-:108FE000EA4BE6F9CCF157F5D534CF8DE8DF699E31
-:108FF0009B6627DEFFF645E2AE0579BA1F1F0EC35A
-:10900000455EE172923F38D76555655E476868B244
-:10901000EF0B0DFB737895383FEA42BB486DD3A840
-:10902000D779DFEA8503279F4C67BB9A0225C8E200
-:10903000ABBEFC9327D93C4D17F4757E02FE0C792C
-:109040009DA53CA06CA0BCEECCB3E8DF259DB1F1A2
-:10905000F926343E649107FF2EA969D4672DA44FE9
-:1090600067F5EF5E90BE227B9CDD3F9BF731DFBF53
-:109070006706448378FFC0283BFBBFFA99129F1F05
-:10908000D447843FAC9F2FFCE1F0F6792C97EFA0FA
-:109090005C7C5E3613AF515DAE21EFABBEEC9B69DD
-:1090A000E493748ED34438673B9DC56D7DFBDB2D07
-:1090B0007C5E897E97E2C21B2625CA6D04F81FC814
-:1090C000C6FB37CF96BCE84106C8FDE65BE7B1DCDE
-:1090D0006FD2BF8FB998DC7F9BE7FF691EE97D7770
-:1090E000FF77C6208B5E18F54111F9D7864170BD18
-:1090F00055E72F0C8D3E4DE765DE0BE7E97F7F3AA4
-:10910000FE3CBDC4E3DF924776D5F2A5FB0AA0F989
-:109110007A7EB942223901EBC5607AB5439F7F4719
-:109120009E2ADE9325CE8746E9FD17ACA142FE9E1E
-:10913000A2ECD2CE019B9E7D7E2CD9B9DE0347C620
-:10914000DAE2E47A6605DA07F237FB0EF1F78731E7
-:10915000DC5974DC29DC4AD28DBA1F4DC4E119C236
-:1091600021D9E7DD87AEA7FCF16CFB4D599216E7DC
-:1091700067F79E700F8B9BF7ACFEBB1898B70DFF7F
-:10918000766A3C9D0F309D67C3623ED4FFE1378D08
-:1091900089BFDF6C7C67C7787E7064239FD31B78A0
-:1091A0005640E0D9F83D8C0BDF55DA80BF7B0CEEE2
-:1091B000B7737D459F355A941EA72F1F1A72449886
-:1091C0001566312BB9DE75226CA8E273024CDED72E
-:1091D0004DA6CFEFC2B2A80F6DE4BAC5698DE025E8
-:1091E000DC4AB099FB13668BF3F229D02D135DDFB7
-:1091F0008428B73E50156A67508519B6931C61994B
-:10920000C2ADB6F6834EC257C4A3A4BFEF10A5A744
-:10921000C9E4175BBF02EF1B78C5C1180425FD4EDA
-:109220003F2B5FD87FAF53E863F4ACF8DD936F401A
-:109230000FD33F55E9667A53352D83CE4B763FB732
-:1092400042A6FA97FDA04549CFBC998DBCFF169D5B
-:109250000EE1ADE9B1F54EA2F5AAB1FE940560A10B
-:10926000F54AB04BACBF1132E87C6C3244F83D5744
-:1092700011C1B8DEE9A029D4B7E517EB7C16F95B7C
-:10928000959EBF591C41AEFB49CD17B8762A2139AE
-:10929000AF92B7B6C38FD0F94CA958E744BCCEE71C
-:1092A000388D82EE0BFE3A5FD8BB29106639430D2C
-:1092B000A82FF28F2BCC54895F52C463A1DF13BB5C
-:1092C00054BEF67980E977DF1EEDFD6165ECDCCBFD
-:1092D000DB99C3F5D0EB254B5426BA1C85A21E3A68
-:1092E0000261FE2E3392F87B67C5F9375E9E4F7E92
-:1092F000CF2FBEC335D775EE086DE5BA9B05416427
-:109300000FCD530870DA13AB03B09684F8BE95CE38
-:10931000D955AE33ADA07C715FB6FFF2FC6CAE37B1
-:109320001DC69329A1F1D5A931BC2365FCFB3B4E99
-:10933000486D257BD4ACD7D30655B75ECF54C4EB6C
-:10934000D0D0CEF38F4828A2AEFBDE2A517F7AEF31
-:1093500090FD5CE7DB23812A15D0F9FF7EAE03A6E2
-:109360001F86B3167CCDF97F96FEBB0F25FE3726F0
-:1093700096EA461E9F6B3E95CAF5AFCA0C9F46758E
-:10938000BCE67AF1D296F10FF5705E6AD06BAA1343
-:1093900057BC7CFF5EDDBE363BC4EF0049ABEDAA97
-:1093A000348DBE7F5FC1BF63D54CA141257DF7BE23
-:1093B000829FA73A662A02ED4DF3DF44FC32FF2E6E
-:1093C00015C2ABFF059A376D38EFF72593C73443C5
-:1093D0001E9681755228875B49BE46DDAD516F4BA5
-:1093E00080A0753B7DE277F054C409FFEE1F42C9AF
-:1093F0004EB8F4997FCF43D4FFB6E8FC47BA7670F5
-:10940000DDA7437CA76D7CCF6BE69B81DFFF02B9B4
-:10941000D77EA250530000000000000000000000B2
-:109420001F8B080000000000000B9B25C3C0F0A3A9
-:109430001E8145A551F9E8F81C9A3C0B0303C34F64
-:10944000205ECC835F1F2E1CCB82607B893330185B
-:109450008B32309800F12C209E0DC43F81D8508C67
-:1094600081C108888B81EC1220F6056247A0DA2FB3
-:109470001C0C0C13851918E600F1726154735F30EF
-:109480004268252E060653206664C66E3FA73AD072
-:109490005E5D04FF23906D6F409E5F46F1D0C35523
-:1094A0004EA8FC7C6B54FE2C5B0606666704BFC0AE
-:1094B0009A34F3ED817A1D9C71CB77BAA3F21B3DF0
-:1094C00051F97FDC50F935E1101A008D579524B819
-:1094D00003000000000000001F8B080000000000D7
-:1094E000000BED7D7D9C14D595E8A9AEEAEAEACFA4
-:1094F000A9197AA04706A8611A19E3A0050C30281B
-:1095000048CDA0384693349890D1D5BC168821090F
-:10951000CFD7F1ED2A1AC9F47CCFC0800DB2067DF9
-:10952000515B0C89262621899B3559B3698DC92346
-:10953000D96C168D9B47B2B86F243C379F9B79EE50
-:1095400043FABD90B0F79C7B6BA6ABA6BF00DDE4F1
-:109550008F37FCCCCDA9BA1FE79C7BEEB9E79C7B8B
-:10956000EAB6EAF1437C1EC059FC5B03F0A6170083
-:10957000964D95E94E33076DACFC1C98FDECD1A5DA
-:109580007AAE5362E5A2D0B84732002E8F66003C17
-:1095900000F1C38F8287D51B695461671380DFD8C0
-:1095A0005003A1A97EDD657F0F406E61E9F7F20BE4
-:1095B000A33123CCFA7B6A79B7C5FA19F9727BB764
-:1095C000D53AF5BE010765F8CD07864D3DC0E09C54
-:1095D00007C113051866632F64FF69F72521C1DAF7
-:1095E000A9B951301661BD5AAAAF3D73D4731B7B24
-:1095F0003EEC85EEC3ACD49E4DE7820CEFCB9ED300
-:1096000097C88C1EBF62797EC5607FCC934D231DA9
-:10961000B17DD4EF2946170EF576D1B314E9617404
-:10962000ACAA929E55A5E8792E9D467A2E7FD658F3
-:109630005C488FD6C8E9D11AFB689E4EC5183D4DCF
-:109640001742CF3D44CFB0A067D845CFBB043D1BE8
-:109650006D7A1A86889EA1398C1EF6C8775F1A1219
-:10966000ACBE86F484B19E939E21A4A7B5083DDAD2
-:109670001F879E0F09794B213DCB2AD393427AEA6B
-:10968000ABA02794019D3DF783641D6E9D8E975F6F
-:10969000F071D13399589AF53BFA7B99E699ADC8A8
-:1096A000D8864553F5C6055EDF691A8A8DA37C2DE1
-:1096B000783006ACBFD13912D577F7FB10A8547FAC
-:1096C00066A3D58BFDBFE34967FFA37338BE76FD64
-:1096D000DF8879FC0DC8D46E5628318AF0E882AF55
-:1096E0004112C7F166623AB66BE2ED06172CEF1E27
-:1096F0000F156BCFE919DD912679D672F710BFFEF1
-:10970000624E060C06FB9F4C02F25F8D717CECF6FC
-:109710000C2F802B90ECBB2C8BE30770119BA7F4D4
-:109720005DB9341B2F9EB9434B307E8C36F46948AB
-:10973000F788B1AF1BF5D6A9B80A7213E2559C0F92
-:10974000B65CAC81316D3E9BCFFE576473274CAF46
-:109750009746E1AA9F82959007722D407F6701E9A5
-:1097600049D2FC0F2E7890E85691AE4548570A0C26
-:10977000F6FC1B427E7CCFA401E54A33D2B1F4A2B1
-:10978000E9E38C20FF5BB1D74C6C4301FD3FB5E7AB
-:1097900097CDAB6B7E892F0F81954B235FFCCE79E4
-:1097A000B3CBEF09BE5FDE9826FE561A7F3AFD7CEA
-:1097B000FCBF0683FA012D134B84A7F019F58EF731
-:1097C000A15CB335691E62552E63E37414F0DB3D72
-:1097D000DE249D4AC621C75F137C1AF54FBC50D8C2
-:1097E0009F1B9F6F897ADF029D4A9BAECB9EE5E36C
-:1097F00054EAFF47C8E27AACEF5A574ADAC1F77B1E
-:1098000045FDCB9F73D62BC59F8F4FF2271D437904
-:10981000B4D723FE59330184C8D05F6839C025F816
-:109820007F5893DFDE367E172EADE3D1E4296CBF7F
-:109830000D92F302CD6CBD78939FC5729D62BD49B8
-:10984000FD42487FFD52217732E9013E1EEB1E5852
-:10985000FF61D19F2275013079F6B543762743ED3C
-:109860001AF9784E62FCDC0760CED20BF6F5137C59
-:109870005F5FA967D7E27E7EA5C20861E3D580EE6F
-:10988000C712EBE758BDC8B290C946021FFC594D3C
-:10989000A288DCF8DB20EDAF61E3B7AB8E75E1B7F2
-:1098A00092807A211C839C3F02A04BE128E1BF02F9
-:1098B0005670FC0D09FBAB538C5E858D23C73DE6CE
-:1098C00041F6B46615ACDC54208786C4E5B737EEA4
-:1098D000F1205D434CFFFBD8928CCC61EB1DD7434C
-:1098E0008CD91B45E47652BFE765C8CD60FDE625FF
-:1098F000C82D657008562659BB8C0F569EA471C1A1
-:109900003C5844CE364A7C5EA5F8C4D9B3641740AF
-:10991000F65AB20B32B48ED578C6C27D40B322A6B9
-:109920000FA7FDCCFD5CAF2960A19CD4C633B91A4A
-:109930007C6F5CDC84F8CE8AA7E0B5565E9E28C0BA
-:10994000570BA563643F355D2CF515EC63CF33F9F8
-:109950003951206F233BB81D30D83424F4CC8749CB
-:109960007FDAEF3F20F8A48E3364902E43CDCE975C
-:10997000A6CBF588545C4F6C16F4E2DFD5CB9DF294
-:10998000AACC14F2CA86F02940F235FC1464115FA7
-:10999000C6C9176E63F0A52F6AB093C9572B1CF583
-:1099A000A0FC5C0613549AA0CB582E0193CA3648EB
-:1099B00050F9DB0E26F7ACDC6631799F4FF2FF3EA3
-:1099C000898DFF9B39C98511F6DC1F4F5F81FB0B29
-:1099D00093FF8DF89CC98984F2546741D1FDB2563A
-:1099E000E2EB75AFA2FBB1DE5E0B483FEE97FAD318
-:1099F000B84F8C083B69C40F8E75BC47D03D22CA56
-:109A0000DA7812C6717ED9BCA05E7FBEE9765AC7ED
-:109A10003E85C3436C5E48EE56F37DCC8D8786F35E
-:109A2000B2E8FCE761E31F7F1E86A4FAA2F3308C44
-:109A3000F3B051E2FA53FD391FBF0C7DB44F6FEE06
-:109A40007D9CF8AF9E3CB7FA36FDCB5D7A7385D02E
-:109A50007357C2C45C85E9913B7C39559108EF4747
-:109A600010EF377F72F403480F8C2717E23EC5F0E2
-:109A70007E54223D9982A36C7CE515398B7E8A2722
-:109A80007883962CE3A780CEF49926F4D97CFCDF6A
-:109A900046FDF5E074FD7BF1E10F1D237B03B4E48B
-:109AA0004ED44FAB531ACA457FE3060DE568B89113
-:109AB000C128373155932E676508BA50FE6CFB6399
-:109AC00028B669A4298A768FB91CBBB5C75F1B4B22
-:109AD0008244CF93337C4DCEE73FC3F5AF2763324B
-:109AE000A34FCD5EAB219D83FA06ADD0EF5243C9A3
-:109AF00098CAE47018C7C3F1BDA9234D6DA83F6192
-:109B0000691FEA733D054B51BE639D84E7DAC68445
-:109B100086EF7DB125E03390C509B2AB86A24E7FBA
-:109B20006EB8F14EB89DEAA7E0F5D074FBDA174A9B
-:109B3000815AB04FE03872C13CFB94540EE99263F5
-:109B4000C5F5EE3F09F9F71809DA6F20F3494B63C1
-:109B500072EF1532E08DC14FA4CB0AE6295AB0EF5F
-:109B6000B0791AF29BDDC5D625DB419CFD9A1268BF
-:109B7000CBABEF776ABF15F39E5931324EF31ECE51
-:109B8000E0BCF733BD4FFBEAF170F61023A1777507
-:109B9000EA317CEF4D2BD017A56E5A709FBB5B7ED0
-:109BA0008789F2B707F9C6368EB11E8DCA9D3D3A38
-:109BB00095233D312A3F19FCC467C759BBED699F06
-:109BC000EE4339C8DCFD25EC8F79DD899DD86F9493
-:109BD000F58FFD2A9A7E484798EF3BDE382F6FF1CC
-:109BE000703ED67802846F9B87DBE10658242F19DC
-:109BF000BDBC9F5ED3EEB473C366606A3DB0FF82A6
-:109C00002D750ED86F5CE4A8EF5E2F2F79B8DEF0CB
-:109C10002A09305BB12CAEC7CF4A32D593E5C513C4
-:109C2000687F28B354B20B0625A7DE7ED4C3F7BBEA
-:109C3000273C1AD11983896F9F65FCF0EA1EB27B1D
-:109C400022B5F30FE7903FF5AAB9801511EFB85E82
-:109C500057643C882ABF1E2F58E74F4956DCF3272C
-:109C6000C0A769F4F7763AE47A9787EF7767C57A01
-:109C7000917D5637EA9918134320F9301E473E78F4
-:109C800082ABCC16C687C15AD5407F68A0D7537423
-:109C9000DF71F341AEB92586FAD1CDF76F09397A74
-:109CA0005AF07DCD99F7909ED8AD7BBAB221E4DB16
-:109CB000D12ED4F3036D1E0FCAF99F0CFF5C746C98
-:109CC0009FE4DF241DC4B78128B79BC774263FB823
-:109CD0009EA35C7E0CC875D17B93D1254DA7CBCDBF
-:109CE000BFB79B3E9BEF35B59E44B615F19B481020
-:109CF0007EAB94A2F8FD47F1DDC62B3489578EE385
-:109D000065FE69E0F594943C88EB7B8F90D73DCA63
-:109D1000B8867A216ECB4D90AFA3E97A4972C83BE1
-:109D2000EBE7F3D8CFFDD80FAB7FBF32E1E8C7AE8A
-:109D300017463EF07591E0EB42F9A3AE0B1BAF9DC9
-:109D4000026F03B25CAE5B8ACBF5DB8D97BD9FF6ED
-:109D500005AF02D437B5A104D9DFB342891CF2ABF9
-:109D6000BF5E35D0FE618E12EDD7D4D428F093EAD1
-:109D700037C6B0FE607823D9E583DE04D9E947EA27
-:109D8000BF66DDC6E8EA3F53033E93F903C1AB8EDD
-:109D900018A8178FC8E4AFF59F699E952A32CF4166
-:109DA0008C8F31FC03881FD9D5EAA4118EF8F68771
-:109DB00098E263FDBCD10A59D4A7DE901543BBBB22
-:109DC0007F9166F651AD04207FFB821F684FB64E2F
-:109DD0006F1F0C0D7D4CBE6C6A1CF6279D45DB97F2
-:109DE000EDE1E8C7137D92E37D513C2AC1DE29589D
-:109DF000A7FE196C68D8B5649D6D9EE23BA3A5458E
-:109E0000C17D130226CE7F3CD1D5F73BE4D3F76466
-:109E1000D2836EFEFCB59C0CC8CBA6606F3449F3B0
-:109E200066F7775DBD427A546984AC4FC251135DC9
-:109E300068DFF6377A28BEA68436D494B5BB1BAB50
-:109E4000B3BB41C43D6C79E8F8391F376072FD1D22
-:109E50008671C0B84A0DF0B8462D1812507B534A8F
-:109E600050B06415C553A2FEB7BADF5BA85FC9DA6C
-:109E70000B6783E7D0AFC2FA6D7E1BFAAD80AF1FD0
-:109E80003E45FD32F5103D3B63AA5F6F2C450FE167
-:109E9000CCD9B3F272E04DE82F49F2AD784C5A9F1D
-:109EA0007051C43CC48AC1E89D0E7FEABDF27C4774
-:109EB000DC54D5873E264558D9B8CD1A2FD00FEEA1
-:109EC000F9EDC681D0BF6CDC628D57A137D0EC2E86
-:109ED00016971A5293D95EDCBFE786288E084A8A05
-:109EE000E2C2C352DD12B49FED7A4AA39A43BCC2C8
-:109EF0006D561AF5C5F00C8F299BD8EFD851F40791
-:109F000040BEC14C96892F298DCA2F0BE9F9CF721B
-:109F1000384A788A38577F05791FEA297F3EA1AAF7
-:109F200066B2983F9396B9FDA2068ABFBF5AEDDC90
-:109F3000212F9BCEB70CF28E3D1FAE652EF7E55C50
-:109F40007C500E94C6EF1E433E0C35AC8B95A31788
-:109F50007466E714F845A66AED94CBE3B1A7181E22
-:109F60001062C2B3B2CC38627EF5AB4D1EEF40A595
-:109F700088E771C23E637847A4995C4FE3DFEEB691
-:109F800083398CA3796F0B59387FB2F524C8ACFEA6
-:109F90000F1B6490DA110EBCE6A1F95C6592BE6AF3
-:109FA000E1FE9DC5FE211D9155AA63DF42FD39B931
-:109FB0006F35A1FC3BE1CFC9CE78667FCFB3F0B35C
-:109FC0000553F8B34756B178B1A2761E2ECE8FBA9C
-:109FD000AAF8B19FC90B3079D9C7FC46C614C8305E
-:109FE000BF11E13DCC6F04F2270D2A077A5AA8DC95
-:109FF000854D57E2F9596AA4A909E3A59F8E7D9082
-:10A0000055D98FBA83CE55029D183FDF69C3EC89BD
-:10A0100084B03867F941FFEF3A301EB3D3CF618087
-:10A02000890ECB01CB7D18EFDF19E6ED7F26873A4D
-:10A03000F13C62BF384702C5D2DE57E0FFE7652F2B
-:10A04000D18136106FFF9B5EECCFAF08383D87F0B3
-:10A050009984191F111FBFC6E1C681B9D43FA90059
-:10A06000365E7C601E1F6F01B7EFA17543053EF69B
-:10A0700091FCDF84877048736B1D1E2A836A9A8067
-:10A08000DBCDFE5A817795FD8092E4FB9D882B9570
-:10A090005E3715F6358147A5F907F44B317EC1F4DB
-:10A0A000701AC7FDC7E2FBF45B3DEE7EEFB9F145E8
-:10A0B0006D9F482B8CC57F29277585C161EB70AEDC
-:10A0C00089C1911B72695ABE558EFB6B5917F1D02D
-:10A0D00024AD7F9BCF8ACEED8EAB5DF3E88D5A74B5
-:10A0E0002EE90FF1F5572DBE2B719C827EE0E9CE53
-:10A0F0008644B874BBFA8467CADE62FFCDE80A4CB6
-:10A10000D96BECBF5AABCE01D7B45FE4A81F36E7DA
-:10A110003BDE7BF57738DE9FEF3C5DE6A2A3D9E618
-:10A120009F80636E3AAB963BC510FB5C9ADB8F93C6
-:10A13000B0D88F2BC167163A61DEAF0F6EAEE1F675
-:10A140000DB763FE13883A6E3CCC02FD2B633D0EC7
-:10A150001B1E096CFB36D732BDFF7EED131487B38F
-:10A16000FA15F05F353D4E97EE4C519C2DDDE7D34F
-:10A17000FBA31477A338DB7666C8FB58B9CD9BDC0C
-:10A180008AF27BDA3F370B11EC37B502E3D6FDAE2E
-:10A1900078825B9EE29FBAA9E879995D8EF4F0F827
-:10A1A0009F0D6B8DC5F300EE55F879FD77BDC97B2A
-:10A1B000110FD48D40715AA075E035F8FEF87CD3AC
-:10A1C0003AF805F9FFFC7C4C85F4B166464F86F9F8
-:10A1D0006B3B0DA49BAF9391A6755A9C3DDF5BEB47
-:10A1E0001136DD04D94F998E990DB89E6A94093ABB
-:10A1F000B7AB8917C7E77EC523E6EDD6B2F4B9E75A
-:10A20000E3560CB4B2767BE7481EE2FF1C4FF61013
-:10A21000C6A31A3DB4AE775BEAE378D4BEBBADEE1D
-:10A22000268AA75BAA47263A725AB1753828ECA647
-:10A230007E113FDDD3C8FDD6E73B5ED7F0BC668F0D
-:10A24000D949F9004AE687D47E58F03BB3F804C5F3
-:10A25000C9874B9CBFF429DCCFEF0F07BAB345DFAA
-:10A2600047E87DA6A9E38587900EA67F0F917F061C
-:10A270000D5B181DBAA52F417EEF9D63797E81721B
-:10A28000B5DA437216C1B89C8CE7A24EFF79EF6A2B
-:10A290000F9DB366F49089F6FB29EB0DA08D48D194
-:10A2A0001BF07CB1E6F8953AED95CCDE6928B0F369
-:10A2B0006B56A556E07CD974F9607DD1F990E66EB5
-:10A2C0004F223FEF5E0206FA63BEB95DB94758BF41
-:10A2D000A757FA7454055787AFCE7D13E5896D2BC8
-:10A2E000E827FBA2560EED267F77100CF63E123BB8
-:10A2F0004C76941693C142BBEAFFCA345F4C671098
-:10A300005DCAFE9547D7B0F6EA6ACF2CB2CB5AF9B0
-:10A310007EA3B37FB8DF6871A75D257B73D4DFFDB3
-:10A32000E38FD3B9B2EAB2AB1428A88F76D7EA0D7F
-:10A33000EF692EA20FEC521E8FD0B92EC8B794B57C
-:10A34000B343C73FFC0F2F16F0FD84E2B2D385FD67
-:10A3500066F753CA7E3BDDB3F51F5E64B29CF4F230
-:10A3600038A8A25ABFC47579429C2FEE75E5DD244A
-:10A37000BD7CBD9C16EB186716FD6DF48F915F03D5
-:10A38000D76CE47E16980E3F86ADF7D34A819F6D59
-:10A39000EF7719ABBC3F3195D712F2C7CBE4B5AC20
-:10A3A00057928AB74C5E8BBD5E47575B1063F33B99
-:10A3B000560BD93E9CDF35166C467995C0ECD379A7
-:10A3C000FD09FB1CA509E5F01AD882EBD7504C3CDF
-:10A3D000871C6C7E3773144BE3AB449DF251691EAE
-:10A3E000B7BBE671B6D769877B2151936BC23846FC
-:10A3F000EC26C463775435713D7A3DB76CDD644C0F
-:10A400009F4758C1F586379A8362E3DAFCBCC36B79
-:10A410002DF4629C5D358F2551FE3B55F27BDDF5B9
-:10A420006FF58A3C962650D03E4BE33AC1F5DB658A
-:10A43000F1BC31494F3D6C12FA09C7B956FC4DCAFF
-:10A4400067FB940CA919AB006EF436713DD3B19142
-:10A45000DB3DD78324D762FD24ED5F0D962EB1BE80
-:10A4600061D4B6CBF4DB62EB0BF4E48D423EA7DEA5
-:10A470002763EF73BCF7723CC3C26ED637C7D62FC3
-:10A480002AD2BEB6B89EBC5EC8F58D5E614FA437B9
-:10A49000535ED0A0714B02F93CB0C632B7A0D64291
-:10A4A00019C17C941038EC6326DF37223FEDF89118
-:10A4B000A227A8B4ED8152F3EFB603BC3167DE49A1
-:10A4C000B5E7B6F1FD37951DC7BD3FDBF96DA8F9BE
-:10A4D0000AF9E4157C6815EB65CA5ECA88F56E5208
-:10A4E0003E90AC5A498C4BCA1238ECADBD425EE48A
-:10A4F000007FEFC683F9CF77E13A952316F9D7109D
-:10A500006AE3769B621AEB8BE06F9F733E21F278D1
-:10A51000E39977D3FE3756DB49FBDE805E5E7FD85A
-:10A52000FBEA1AB841C3B8DD6069FD3156A83FD4D3
-:10A53000A8C7B98E857FCFE8378AF1D9E6534CC4D6
-:10A540004BFBC31B6365E382AEF31553B51E22BEFE
-:10A5500094E6DB23E7C3B7319157B763F0E51744BF
-:10A560001E82535F2F2EA9AFBFE0D0A7425FBF8DE1
-:10A57000FC7FEEADE07FB57118FF76D9383983A93D
-:10A5800078254DF48C1AFBD2148FC1F58D7640A638
-:10A5900083F215200EA417B121EA3BBF6111DF023F
-:10A5A00022CEA4363AF719391A70C0B1EE3460BE23
-:10A5B0001AF68B74FBB7AB34AECD6F66B3503E99D1
-:10A5C0006D5FE272427FA4547E9A5DDAF11B3CC655
-:10A5D000394BFBD4C78F207F4F8580F687D2F43B61
-:10A5E000C789BD37515E3FB9EA4348315E2F722EAD
-:10A5F00038BD9D02AF17E8B5FFE3D227D693B775F4
-:10A60000931E058F89F1CBFED8464832BC8780EB7C
-:10A6100093112C57623EC9121DFDDFEF7A0DDEDE6D
-:10A62000E0FE9D4713717AA33A7FEF6EB60F15B324
-:10A630007F2E56B97D7CFA13A9DF625E427AA76449
-:10A64000E0FE76B2274FF6D3A6DC252AE6A55DA26A
-:10A65000CEA47A9BF637A96B0BD6E726E0E7FE0C73
-:10A6600011B5508FDAEB4FCDF85E403A4F64785C0D
-:10A67000E344E6DFE85CFFC401398B4C3D31726393
-:10A68000D9F57352E86DBBDEC903B285FDA547A4B9
-:10A69000EC02D6FEA462458AE60140969F070BF8BD
-:10A6A0008319D92197A7772455D433277B34E967B9
-:10A6B0006C6E6E473A19FE9B324D2AFA6495E89A01
-:10A6C000A13AE7D3A67310F3159AA6F27706A36F03
-:10A6D00010BDA7D873B94C3C69A7D01383D1E2FA57
-:10A6E0002420CE5F03DE6CF1BC0717BDC116E7BAAC
-:10A6F000B4F11B16F914C33AC76B38E6A179186E8A
-:10A700002CAFC706C43CD8F50663FCBC755049683D
-:10A71000D5E0E3D59DF8941A475B75B80BB7F91AE5
-:10A7200048767536117B5FC63802850E0DF49F9E04
-:10A73000923EC4D6CB0F6F0B59520C1F4EE4BEC9CC
-:10A74000E898C5FC1DB44F752B2BCD6DC3BC4E19BD
-:10A75000306EFCC89FBF917B15FD51E6FF205C6BFE
-:10A76000A4D65F6B601E5C52C275B51B953F75FE2B
-:10A77000AEFE8E56B1FE18FCD1A1CEB5188754207E
-:10A7800021E2191E03F3F568E97B4AEB09D49E67C1
-:10A790007D53ED4AD2E9F28B7CB0A1BCFFBD95D7C9
-:10A7A0004FB37FA87766B9FCACDA6EA7DD5DE37ABC
-:10A7B000BF57C86B29BFF2AD1A6726BCACE1B9AC74
-:10A7C000D6E6D1B3581F52B5B8DF466E5100EDF84A
-:10A7D0009986DE8B21BE4A7CDF053CCF0DBF8828E1
-:10A7E0005C7F9F51B91DDB78E7A725DC9F4EA197C1
-:10A7F000BD18E1BC594C7EDD76DF887182E2894369
-:10A8000070B4AB19EDF92D1E3A4FDADDB6AFB6B024
-:10A81000FD77C43853F30F86B29C4E65C99F57DB52
-:10A820003C16EE5BE73BFF6E3FB9D2FC376C75DA46
-:10A83000C5E73A2F2F21E2CB2ACFFF858E63CFDBEE
-:10A84000F4F5C1F566E39D2F521C67CC2CAF6FA6C3
-:10A85000CFDBCB346F9136B08AC5717E2CF6317761
-:10A860005E9F062930313FF115BEFFC8CDCB63078F
-:10A87000CBE81F39EEF23F443FF90F021CC5FD56ED
-:10A88000312A7C0F7778BFC2F6CDE0F62BF72B4B41
-:10A89000313FCBA23CAFD11E8B9E4FCEBFCF23F01A
-:10A8A00095C0B35CE81583CE3FF72B646F78E02C3E
-:10A8B000C6414007C3963BC07A5DFB158AC7182284
-:10A8C0008F80559D89ED80F4D2624CF6ACA7737AE7
-:10A8D000EA073BE271986E0EB386344F5ECB22BC22
-:10A8E000948C7627E3E72EBF800D01D70A581770A6
-:10A8F0009380611FC14195C11897F7667482030266
-:10A900006E12709D806B053C5FC0D23E8277A9BC01
-:10A91000BF9D4A96F71F10B021E03A01EB029E2F2F
-:10A920006038C8C7F77118F7438283026E12F00CC3
-:10A9300001D70AB859C0D241824BCD5F206E117F3A
-:10A94000A7E6BF8BF30D40F89B0917DC3D55BFC050
-:10A950001F1DEC31A4C2F3436F89F8D3121FD73304
-:10A96000131D09CA5362FE42FA44E1B963ACB8BC94
-:10A970005BA2DDE4B97994D52B1ABFEE2DBA2EAACD
-:10A98000C56FDD79E2F7DEFF20FC6EF6D9EB9EFBAA
-:10A99000E7131D26E1E9EECFDD0EED2D2838A70FD8
-:10A9A00028D934C66B988D44FE8E5773E6B3DEED1E
-:10A9B000E3E79CBD3E9ECFDA2FF09BE8E0E70F83F4
-:10A9C0000B02D983D2F438E35FF8783CE1FB369E82
-:10A9D000DA61F27B8279B662C90FE27ED468BCB3D9
-:10A9E00042FEBAF2FF0AFD65771CE4DFF01D1B276B
-:10A9F000102ACEA7BB27F5CD2DE913ACAEE667CF65
-:10AA0000D19FD1A3B1C6C2BC69F11E248F4CFAE517
-:10AA10000CAB67E78BC8D43F8F1737F278B12CEABD
-:10AA2000D3384DFC3B066B09EE33EC798B18479A13
-:10AA3000DEAFBB5DCE57C7E74BE063E7A7C8F01CAE
-:10AA4000F533898F92207EB99F631EB21EBAF0E75C
-:10AA5000170A7B8D12E365F8F94BA5F69F15F232C4
-:10AA60004D3E4BCCEB7FF3D976CA610BF3816C3949
-:10AA7000B2E5EB7CE5E882E50437A4B6D2729286B3
-:10AA800014AD1B055DCEC5E72E2F45E4245758BFF6
-:10AA90005EAB15E7F926C90BC34721B9D5393EF599
-:10AAA0004BA2D49F846B7C21F62060E403A3F75271
-:10AAB000AD56F081C7290278CE58D09E1147F84A8A
-:10AAC000B224F43EAFB746E3EB7C756723C71F445F
-:10AAD000FF2E7C597F5A617F3234BAE49CE3FD7EBD
-:10AAE0008DCF2FAB4FDFF94D1B5F91085F191269B6
-:10AAF0000F6BF75151DFADBFEC7287C06FD4035BB2
-:10AB0000F977920928FCAE32A879C4778F7C9DB979
-:10AB1000F59317E56AE9F9CB55B57ABD5E2BBEEF23
-:10AB2000303DDF82F1BE52FBCE316D723F6811F3D2
-:10AB3000764EF3FE6BD443CBA6E6B35A7C2F15E3D7
-:10AB40009E2BBE27A7E35B959CBD21F444B5F8ADD1
-:10AB5000394FFC5E76E1F756C9F519B11F558BFFE9
-:10AB6000FBCF531E7E309DBF55AD238F766EFCFD0F
-:10AB7000E879E2F7CF6EFC4AAC5B55E3FC4A0397F9
-:10AB80000F459CBF548B5F4F65FC44BED8BA012B68
-:10AB90004EF61AF9E3BBB5750369650A3F0BB85E5B
-:10ABA0003FD7F1EFAF7AFC770F58CAD4F88F68EF30
-:10ABB000768CAF2826095BB5E33E5AEDB8E9F73944
-:10ABC000E87E7AE47D8E71CF97EF5FAC7AFC5B1DF7
-:10ABD000743F3772AB93EE9049F9C4D58EFBCDF339
-:10ABE0005CEFBF14F80635DDB10F94B2DFCF08BBC0
-:10ABF000F6839AEE90E352F5DF10F6CABBAAAC7F5B
-:10AC000052F4DF6CE353A1FE3D02FF7BAAACFF6B65
-:10AC100081CFCA2AF1F9BE5887A5F6CF80E07B1014
-:10AC20007564815F73A1794B5B7C49C98FE79CCFC9
-:10AC3000F4D077826F289A8EF14EE802B2C7FDC732
-:10AC4000C307795E495AF8FFC9B4C4F530C5B7BC2B
-:10AC500051D3711E67FB5D8A92B08A9DB7D5FAB950
-:10AC6000FE9374B39BAF7715300FA954FDA0BF7846
-:10AC7000FCA5062628FF0462E21CE9CC8D46D173B0
-:10AC8000022541792DB2AEC24136CE40ED46A33009
-:10AC90006F396EE313B3081F55E7F8A88A6915CB1F
-:10ACA000539EE3E7F36AF763FB87526C02F83D0EAD
-:10ACB0001CBF417FA21BF3C4D3B52AF16920EC3C31
-:10ACC0001FBF49F4F34E41DF80B77C9E58E7CC7636
-:10ACD000CA57EA6FE7F94A069894DF39102A7FAF1E
-:10ACE000C1580F8FFFEF14F94F23F8FD287E4F8CCA
-:10ACF000DF8F2EC4F65FA1EFF04EB57ACADE8F1358
-:10AD0000369D71F6608BF37B1E3B2EEF379CDFF593
-:10AD1000F862CEEF7ABC3315CAEB1A08F1F3814A18
-:10AD2000F8DB79EF76BD6125A5E945F994759C0BB3
-:10AD3000F8624E7CDF3EFEF1F641EF61BD185E6FBA
-:10AD400015DF4AC51B26E9AD515359AE371CF91919
-:10AD50003D42BE7C355A0AF532D3BB25DE0778FB6F
-:10AD60005082F243B458C2A078B4D807345C0F05BF
-:10AD70007CFAA4BD2E031E3BDF98F23A24C3A2F353
-:10AD8000470DD79134BDDDE4BCDA72FFFBB5315A13
-:10AD900027F51AAD13C998A0EFBADCE32CF45BFBDE
-:10ADA000FC783EE6B71EC0D2FB0739596CBDECF506
-:10ADB000733DAADD9030B4F9E4AA92DDE3C6E34B1B
-:10ADC00062FD856CFCD316E55F548BFFA355E26FE3
-:10ADD0008FC3F0FF1CEA5986FFE7B12C85FF534271
-:10ADE0001FD581D14B7BB6C1F52CC07AA330BE1ED6
-:10ADF00008F07EEB849E02E870E4F578055DD5D21C
-:10AE0000F3ACADD72AD0638FCBE87951CCC777CAE2
-:10AE1000CDC7B7053D8100DFB7B40309832D4DB819
-:10AE2000B8C4BC9C1078CC0C88B852BAE39CE4EA55
-:10AE3000A52AE93831352FAF8A79F9E772741C17E2
-:10AE400072959161E549DC4F9BEDFC850D8E7999FA
-:10AE50002DF893F1D9F3D2E99897DA739C975F555F
-:10AE600049CFECA979392DE6255F4ECE0AEAFF5E7F
-:10AE7000D4FF83A84F76E2ECC0EF06F0BC6CA13F94
-:10AE8000E109D44FED6FAC9E1C583655EF93A347A4
-:10AE9000EC7A3EAAD735594F0B14F407E9D706F0E0
-:10AEA000FC7B507CFFF1FDD1F035A25D84DADDC082
-:10AEB000E961ED6A0AFBFFD2E82B76FF33B05EEF63
-:10AEC000DA3FD8F5A285F56607FE60D78BE173E916
-:10AED000C0647F0D85789CF0FFEB00CFD771E57BD8
-:10AEE000E9D5E53B78A349BACFA10EC2199995439C
-:10AEF0000ABF5F21CD8CEA43983FEB4BE6A00ABB2B
-:10AF0000CBA3F1763E666FE1F9F10C1D9EF71BE8CD
-:10AF100082987080BDDF1355C81FB8D39F6C0BD4C7
-:10AF2000733C290FE0556E8FF586DA441C85E3B536
-:10AF300037F88111EC4F677861FF9F0C469EC7FA86
-:10AF4000FBE6A894CFFBFC9CBBC84EDCDBAB00BE91
-:10AF5000DF7B9D4A76E203AF86691F1E54CC9B2897
-:10AF6000FFC1520DB41BEF0EFCE118E6298FF7D696
-:10AF7000E8D255440FE19FF640A29FFAE776E776C4
-:10AF8000863FE603D3D685FD76713F06449EF3DD0A
-:10AF90006B0DCA9B3180DFDF34DCAE529ED2DEC641
-:10AFA000F91D38DE03ED1AD91D0FDC30BF97F2B959
-:10AFB000DB0394FB56173224CCEF89AC50013F04DD
-:10AFC000A98B1ABD6877869707F0CE2FA86BE4E3AC
-:10AFD000851702DDF3E7854C22CECAC8884AF738C8
-:10AFE0003D70C386DC66B46BDA79FE3223ECE5F89B
-:10AFF0007280906025C83F00C4C73B9B9FE7DBF38E
-:10B000001CC94CB62F7B8E18C956592F575DBDF001
-:10B010008842F9C915EB65AAAC97ADB25E8ED7AB85
-:10B02000787E2FF22935F60FE3707E773E76A8FC06
-:10B030007771E79AAFBB37E0CCBBAED4DECED3ADF1
-:10B04000442F1E664EE22957AE6FE7D9957AEF9DE1
-:10B0500079570CBF4B1BAEBF5794F7F1B2413C6F11
-:10B06000D81EA3FB221BC4FB86FBE8FE48773F7F6C
-:10B070002BF4710B24CACE439DC0FF75863BC6B32B
-:10B080005B940AF900EE7C3F97DED3947427ADDB26
-:10B090001B787ED1E4F7938DE2BB114825E214CFF3
-:10B0A000B2228B674EAD1FEFAAEFD2FAB1BF9B64FD
-:10B0B000F3C3BF9774C9895B2E7CAEFC940B959348
-:10B0C0001FBF4D72E21D91AB5A3FDE4C95F5B25554
-:10B0D000D6CB55574F1D91AAD22B6AA6CA7AD92A28
-:10B0E000EBE578BDC195AAD8D7470731BEE5BD428B
-:10B0F00073C08357049CEFAF0C39E0A165CEF6EA2C
-:10B100007267FBA1E5CEF6EA0ADEDE0CEEBF261D75
-:10B11000AF7E9DFCAFF35C272D5AF9FAE1F60AEBFE
-:10B120004AD3FDD8BE4E3100EF1762FB5556EC5B9B
-:10B1300045E33FEB827CFD5F17D01DF7D3FDA9D31C
-:10B14000D912E4F8DAF456C2D7D6BFFF220BBBAB54
-:10B1500044DE3D7E564079D830DE80FD3D7FCFCC49
-:10B1600006B4E7F6BEB682EEEFE87F979D376352EE
-:10B170003EA472EC9764BFECDDCEEF977EB4D6ECC4
-:10B180008AA3BD12F600DACBCC8DA27B3DF6C63C7D
-:10B19000648FF45F5DFEFE924FF5F03CA187D1EF26
-:10B1A00067FAFF80B877EB4171EFD6FD3D0695BB9E
-:10B1B0007B5AA8DCD5635239DAD3CEF3197B2CF154
-:10B1C000DD5917955FEA49D0F32FF47453F9F99ECE
-:10B1D000243D7FAA672B959FED49D1F3433DDBA921
-:10B1E0007CA2274DCF1FEF19A1F2B19E0C3D1FBAD3
-:10B1F0007A03DD9371EA3E0F7D1D520AFF392967FC
-:10B20000DC61F65667DCA121E98C37CCEA76C61BF7
-:10B21000F455F31DEF236DEF70C0A1D6258EFA8192
-:10B22000F8150E586BEC74C04AE89D0ED87C6E83FE
-:10B2300003BEEC999B1D70EBD39B1CF03B3EFD11B4
-:10B2400007DCF2A93B1DF0C5FBEF75E0171FEB73A0
-:10B25000C0EB83F3F97DE0033B1DCF8DFBF639E0B6
-:10B260008FCCB41E0B623C3413E1F6EC7189F6C14D
-:10B270001973CDDBF03B29F8B14CF204519E0F3F1E
-:10B28000637EEA72BCA70C94D48A1BC395EF91B677
-:10B29000E33D72A43D89F27AFA35C9407B578A6C46
-:10B2A0005F58E8CFD9E5D65329388C71499167A604
-:10B2B0005F0496C5DA05983EA1C34548E57650DCA3
-:10B2C000D243DF5165A424E59B309BD9FC2B1DF3B1
-:10B2D000E8DDFB6F90ECF253519ECFDED1A9350D26
-:10B2E000B0FABB17A926A6784DC3D775BFDDAF82CC
-:10B2F000DC0FDEB583C72BF517FC4D1A6B1F32939D
-:10B3000033D055B5DB8572DFA3EF944286B91CFDBF
-:10B310009A503C039B43588F7FD7C7EA7F3558200C
-:10B32000BFA164CE5259FDD89664B387D5DF2DFAFC
-:10B33000DFBDECC7748F6038F713B898FC9DCFD091
-:10B34000F8E1B6A3707B18F5D338AC2BB28E77FF3B
-:10B35000BEF8F748E34199DAEFEECD82C9DA05721B
-:10B360005FA77B38ED7909B61E8524F6BB6A82BEDD
-:10B37000A1DDBD43A27E764B2FC56282CE5E179DB6
-:10B380008817D2753BEB27D49D94D6B5F2E7CDE173
-:10B39000A97EF1FD667C7F4B4AC23CF76AF8A72282
-:10B3A0009F928C7FB8DEB664A4B2FC337216F25B57
-:10B3B0008B57E2DF839C7F8C6FB7B74EE7D764FD76
-:10B3C000F45158DE5AC06FD11EF9727B11BE4EF295
-:10B3D00089B54F52FB97606988B7433E8419DD9B5E
-:10B3E0008BB5935E12E3649DE3303EDE4ECFD322F5
-:10B3F000BEC8EFF5B4F344ECFAF8D7B55CE42932F3
-:10B40000BABDE3B59BF1FBEB8ED624DD033C18F20D
-:10B41000D0FD4283A1AFE4E89E7E1DE8FB5945B113
-:10B42000FA7E14E571E83EA9D83A75FA09F8654A3A
-:10B43000E1F76403213B0FBF82BD24EE1596C5BD25
-:10B44000C2AA92E86AE2EBD9EC85A9F8EAF4F1F72E
-:10B4500011DD72CCB9FF0E6C71EE7B71FD668A63F3
-:10B46000F747ABFB6EC897E7F6A52AF0F1E683FC39
-:10B47000BEE3BC9FF0B4F233A85C93AFA5F2AAFC84
-:10B480006C7ABF3ADF40F0AA7C33C157E69BA8BC78
-:10B49000227F293D5F99BF84E0F6FC522A57E417CA
-:10B4A000D3F3E5F92B095E965F49705B7E2D954BD2
-:10B4B000F31D542EC95F4FEF17E7AF23D8CCDF48F9
-:10B4C000E525F9F554B6E4FF8CDE2FCCDF44F0C55A
-:10B4D000F9CD042FC8DF46703CFF51829BF31FA6B5
-:10B4E000727EFEBF52D994FF18BD37F21F27785ED7
-:10B4F000FE1E82E7E6FB099E93EF25B831BF8BE085
-:10B50000D9F9512A2FCA3F4065437E2FBD9F957FB1
-:10B5100088CA99F927E8796DFE712AF5FCE7C57D9F
-:10B52000D14F5119C97F95CA70FECBF43E94FF1BD1
-:10B530008283F9AF5319C87F9B4A2DFF3C9595E64E
-:10B54000A9D2F74F6B6086432E56E72F72C0574E35
-:10B5500038F7EF953F77EEDF2BC69738E065C79C4D
-:10B56000FBF7D2A39D8EF78B8FBCD3015F9273EE56
-:10B57000DF0BB3CEFD7BC1814D8EFACD998F38E0C4
-:10B58000A611E7FE3D2FEDDCBFE76CEF73DA2FA9C4
-:10B590009D0EB861AB73DF9E050FBBF2C90F3AEA8F
-:10B5A000D7589F73D40FB77FC575BE92E5FADFFCFD
-:10B5B00086D38E6979A1E8394C7CFF75F4DDFEA94C
-:10B5C000468FB86748DCDB2AEE4773CF679DD00310
-:10B5D00033F2DC7F8A8A75578FEBAE20EF89D91959
-:10B5E000AFA17EB0ED8C19F38D2FBFC8E0D373559A
-:10B5F000B397C1B69D61D7AFF8BB15AA399E6678DF
-:10B600007A8FFBE8DE3929D26D615CEDEE1312DD35
-:10B610006F57371B449EC0755D3C3E01F67D3A7402
-:10B62000BFCFF01CFBFDE66B298ED1C4E123A11D29
-:10B63000EB308E3AECB5DF7FFE5A6AEFE7F0FF0899
-:10B640006D19C2F775358763681FED2A71BEF93F22
-:10B65000432AF1B33664FD30B46CEA9EE9E3D1E4E9
-:10B66000CB21F67C9B969C875776E33DF7788FF34A
-:10B670003AC5FA11D65BAF58AF84685F70FA0FEF26
-:10B68000C7DCD765742FE04FF0BD1C7996F6A3BADE
-:10B69000EBEFA3FBAA86C30C9F50697CFE3E244FB0
-:10B6A000EE3760EF37F3299E4AF6E05013D0BD190C
-:10B6B000C3B58934DEE797FE8E06874CA43BC3935F
-:10B6C00095447EE2F025862D178EFD092091C33822
-:10B6D0007E301932D05E0BC151CABF88C004953A82
-:10B6E000E892E3BE6D9BFE399C7EBCFF3F44E7F0D1
-:10B6F000D6B3E314674D81B8BFFA4D7CCEF8723AE9
-:10B70000B4AC345FAE91EF039D8DFF28B327918ECB
-:10B710004781E33B86FEA98478A6F466EAD7798F51
-:10B720008472FCEB243776BC47915769CD488FB8BB
-:10B73000C7A18BFD43FBB03E513EDEE3BEB7E15CEB
-:10B74000E33DD1B03BDE13A2F3E453ADE5BF83B3D9
-:10B75000E33E63ADE5CF7B9F157EDFD7C479EF3342
-:10B76000E2BCF72BC2EF3B2CFCBE2FA2DFC79E3FF3
-:10B770002DFCBECFA1DFC7E027D1EF2BF8BEE4C977
-:10B7800012F7BF2CAC95849C6D27FB3E28EE2B62F4
-:10B7900023903D1F10F6FC98D93713FD8E602D6461
-:10B7A000D14FD87ADD41FA7E969162E2FD0077FCB6
-:10B7B000E2F599FF85C1F11838EE770AB4BAEE4B7D
-:10B7C000A8348E92B5B0DF20F31B326669FE9C73FD
-:10B7D000BF5A16FCE7D52FBFE7C7BEB78D71328DB4
-:10B7E000F21744BA7594ABBFA1714E897140FEC186
-:10B7F00011BACFF07205CAC9C1B471CE51FEB68478
-:10B800005DBF4FE1923FC0840D46EF3CF1BDA611F4
-:10B810004A37EF61EF9FB84F757C9FED96C7DED733
-:10B820007C14871D5CCCEFE579B17EDD45E80F7EA9
-:10B830007AEF9B4D889FFDDD52BFE98C5BCCBB0F3F
-:10B84000A4C27C9603623FE8D7CBCBB97DAF78FF2B
-:10B8500058F97A0F8A7A5F0C5A7D61D22B13741FC4
-:10B8600064FB89AE9B11DFC77668745EE36EF7C533
-:10B8700060726778D9743C0BDBA3BC9569BFAF5C81
-:10B88000FBE53FEDFA29946FFF70B8BE74FBB697E5
-:10B89000BB1EAE80FFC1E2E3A71FC376F3623CCEBE
-:10B8A000D4DB3044F3BB6B07F79F5F5CB48EEE993B
-:10B8B0001DA8E5F356A4DF2F54E04B7705BAFEAA86
-:10B8C000527BA93C5DDF2CC717C6D76315F8F29DE4
-:10B8D0000A7C3D5001FFBF2FC1D77988F73CFC7D22
-:10B8E00038D6AE770EE32BFA6FC85798BE1E8AF48F
-:10B8F0007BAC1C5E55C8EBF805CAEBCF2BF0B592BC
-:10B90000BC4E5CA0BCE64BC92BE27D01F22A47CAC3
-:10B91000F3B592BC06231726AF33CAB5AF425E67B4
-:10B9200097C3BF0A796D2E36BE0F8216DAD5A75A95
-:10B93000F939D9D60E7E3F99B785EFC3C1E39F256C
-:10B940007B6980ED5733DA71DF3EF1E01D6D53FB0B
-:10B95000B47B1F72F7E7DE47EFF8DF9FA17D342449
-:10B96000F67D1B1FBFE1EEA7FCFD16E73A6E007FD8
-:10B9700097A9E0F72E1A926FF578CE7D3E60F2F12E
-:10B98000818DBF96CE159FA673C59AF60B1DB77C09
-:10B99000FD59DD1766177C28E2B40B666FFFEA637A
-:10B9A000741F89E867B662D1EFF8297035BFFF646C
-:10B9B0001BCF1F92B77FF9B1934B0BEE9982C35205
-:10B9C00061BE90BCEDF063270BF0CA63FC87C79B98
-:10B9D000298F31AE5F11A07BEBC6CA9F67FC40EC9C
-:10B9E000E3DF17E71947C479C677855DFBA2B06B23
-:10B9F0005F10766D4ED8B57F2BECDAE7845DFB0DDA
-:10BA0000719EF1A0388FC8F41C20784F4F56FC4E21
-:10BA1000C993E2774A0E8B7CC967F9B9454F8EDB33
-:10BA2000C78F7FAD19F93145873B8EC5E9B0EF4728
-:10BA300077D3F12ED379DFC6F52D41C7BC5D6738CA
-:10BA4000E322D7C6663BEA5FA3373BDEAFD52E7550
-:10BA5000BCEF80A5CE384BFE0A679C65C21917B9AA
-:10BA6000F2E7CE738D95E3CEB8C88A63373BE32CFB
-:10BA7000479DE71A4B8F38E3228B73773AE0CB9FD1
-:10BA8000BDD7517FD161E7B9C6A54F3AE322B3BA1A
-:10BA9000F739E05AEB61E777F5EDCEB848D874C6D0
-:10BAA00045822D5F71C0EF61FB3DEA4FBFE18C8B9A
-:10BAB000F862CEB8C84F43FC1CD0F6B359BBBF8B5D
-:10BAC00090BF19CA5DC9E4FD8928BFE7FD09485246
-:10BAD0009E2CC09F93DFA04CFA0D16AD7B59E81D3C
-:10BAE000B5E1E48FD1AF517673BFE70E69454E2BB8
-:10BAF000F47BBCFF2215CA87ACBBFD870AFD7B4DDA
-:10BB0000F277940A7EC9F47EB9BE9ABAE7BC2D8D4D
-:10BB1000F954CAA45F72BDCB2FD996A1DFB39A5155
-:10BB2000DE2F9936CE39EA9FD391127E49CC43FC61
-:10BB30003314EE97EC32855F02FC7B29BB3F5BFF41
-:10BB4000A80DE5F5887D5F8BBA88FB0D4AA8F879CA
-:10BB5000B67DDFA4BAB87C7FB65FF37711714F5C16
-:10BB60000D88B8FEFF978FB7523EAEAC29113779DA
-:10BB70009BE5A354BD73950F057506E5837C70188E
-:10BB8000F3417C2E581370CDFDDBD6E1F74DDB8100
-:10BB90009FEFC02BFCDED552FDDBF95DF155B7966A
-:10BBA000CD83B0E3AC522D3FFF8CB7DF4AF993A7AA
-:10BBB000D818E5EED576E75BC8D114FEE81E7ECF37
-:10BBC0005EF4DCE79FEA785C28DEFD81B2F68AFB52
-:10BBD00077C1E256F97B764705FEDF7E7516D9A957
-:10BBE000BBB6717DAC747FF37994C74FA33C9A14B4
-:10BBF00057D12E41BAB62974AF5AC8008A0FCE0D5C
-:10BC000041B6B709F96AA6F13E2FF647E7CB93F2A2
-:10BC1000B9CD79BFC9EF74BE9EE389F27CADF8BBA4
-:10BC2000062B0F77D0774206A4F45A5A3FF07A9445
-:10BC3000F023391D6E37F9EFDF317C747D7A7B3765
-:10BC40005EEEF5A96CB98AE24AB3257B7D064DCC40
-:10BC5000D739150A95BDEF6D5ABFE7B81EBF306DD5
-:10BC60003DDED0F78F38EE9888236D677F05E79D1E
-:10BC7000EEFEECF568C3DF7EF56EFABE6578EC4E3D
-:10BC80007E6F71A3B81F6C8CEBC752781D1272B413
-:10BC90005BD88587F677F6217F07D8BA29D4470B7A
-:10BCA000FEF2BD81243F5FACC3F23307F877DB17A8
-:10BCB0003FB4453CDF44CF1744F9FD470B983C6146
-:10BCC000CC3BBCEC158DBF7F59A7FAD1F1117C7F1D
-:10BCD000B178BFA7BDCDC2DFAA8CD4CEEFC4521EAF
-:10BCE0003B4A7A97CDB9B5C0C07115FA1D9DB923ED
-:10BCF000F038D231772CB1E13AF40FD2C07FAF2DBA
-:10BD00009ADC89F21AC900F597060E1BDB759ABFFB
-:10BD1000F858721FD56FE5F5D97B82E7A6F8FBE0EE
-:10BD200018C317C733D97B03DF73FC1BB7E814AF05
-:10BD30000B8D1D4DAC257FC46ECFE1865B787B6596
-:10BD40008CD183ED6376FBF10CBE9F15E5EDD5310B
-:10BD5000BE3FEE69DF44F7EAB1F1E9DE29AF78FED4
-:10BD600084E07FBCFB5F336BA35379196966FFAE38
-:10BD70002FB29EED756FFF0E60BFF80E49D3663F80
-:10BD800072B2E05E06FB77430363CEFDF94C0D5FB4
-:10BD900097FF1DF5CCB2CAF7B3FD3B5950D3F30062
-:10BDA000800000001F8B080000000000000BC57D14
-:10BDB0000B7854D5B5F03E67CEBC3293E4E43D79C0
-:10BDC0004D4E2040944007081810DB495444458DDF
-:10BDD00068DBE0B53A04E419202296A0D89C9004D0
-:10BDE000F20206EB2F111126281A2BE86041B15AF6
-:10BDF000EF80B9147B6D9B5A2FA2A28DA05114B86D
-:10BE00002915C9DF5FAFFF5A6B9F43E64C2609EA4D
-:10BE1000EDBDF93ED8D967BFD77BAFBDF60E6B102D
-:10BE200059C8C6E8E79B61F09F1A63CC5725B2500A
-:10BE30007E58BE32C3989F3BCC58FFF64B8D79D7C6
-:10BE400078633E798AA1FDF91B18EB744246F2D85B
-:10BE500018A4D2D1DB6CA56318AB4D5E4EF9DEBBE6
-:10BE6000F4726F0CE6F3E418912533B6AD400C3450
-:10BE7000E532F644D5F2C3C320BF3659A43ED7BA43
-:10BE800066C6FBA0DE37F8F3A3FE69433563212BBA
-:10BE900063DBABFD946EAB6EA5B43E79F0767BB5FB
-:10BEA00076CF57DB58681463C16A99F2CF56BB2826
-:10BEB000BFAB5AA1F457D5F9F4BDBDDA43F927ABAE
-:10BEC0008B287DA2DA4BDFDBAAA7537E6B7529E5B1
-:10BED000B7549751BEB5DA47E9C3D50B28F5575784
-:10BEE00052BAA1BA8AEAB554AB94365537D0F7C0E6
-:10BEF000B860596941FF79D6CA00871428BFDA9320
-:10BF0000510AEB79FC6A56168C5A4FA07A1B6500D1
-:10BF1000DA44C6DCCCCF1C85F07B2B633B15C6EC2A
-:10BF20009D7ED50970BD74177CC37CC8AF3A209F35
-:10BF3000FF04CF6FD2C6A962CCCBB05D150BEC0469
-:10BF40007CD8143F9B0DE379B35576732C63376926
-:10BF5000E3E07784AF9AAB32C4EF098BB7544EC19C
-:10BF60007EF8F8313E9F00CB63692B588D05D28453
-:10BF70008A2E668771E21F0A796D900E6BE864BEA7
-:10BF800002C4AF586282799CF38B011374AD4C6587
-:10BF9000A208E337BB383D44AED3DDBB8D852640D8
-:10BFA000BDE42E3B8EBBAE6A663C8B020F3D1DDDB1
-:10BFB0002EF6D127FCBB2410C60FF06F9D7FF0F644
-:10BFC0006965C6F609DE88F605D01EE0102806FC75
-:10BFD00045A1B7F82263FB584F447BD7E0E3C7F491
-:10BFE000DEC8424903D3F3294B790DC25DCF8FECF4
-:10BFF000FD21D57FD729131E12AF5FED4238C3CF85
-:10C00000550867298B059A04CC7AD902C89BE1B7F9
-:10C010002699E76D90374990F7403D55F1B2B198B8
-:10C020007ABC2C0E532FE50F997D1BE589982FE5DF
-:10C03000DF651FD141E012E82203E58DD2E0CD8219
-:10C04000FC8FE1F7298CDD2C8F9EAE42FEBCD927F8
-:10C050005641FFCDD9626007E075A57B7C0CAEFB35
-:10C06000F196C1F9B416F974545FDEE4F43201FAC2
-:10C07000C9AC90C79BD8C0ED1EAA10A707A2F4BBFD
-:10C080005BA3DFFA8A99F2085C7507CA30C6AC4E2A
-:10C090001695DE60BDBB71BDE664BECE945B4B29D8
-:10C0A000CDDB35D9560AFC703E7670FC3546CCDFC8
-:10C0B0000E4306A3E1519B57DE1B2F91BC3C3F86EC
-:10C0C000D3D540FD366BF2AB3720B24EC4AF544AE5
-:10C0D000F235E5561FCB83F5AC4B17034E58CFBA5C
-:10C0E000AF6F69C8057E5237892407F4F9478E6B14
-:10C0F0002AE8124C50BEEEC042A6C0F8665729533B
-:10C100000B30AFCBEB20C3FE1DCE90175390980C95
-:10C11000D7EFA8F2A998B7B854E2E775E917EADBB8
-:10C12000102ECD7E91E4FBDA2C31C0044A9913E63F
-:10C13000736E35A37C4EFA838C24FD57309F49D013
-:10C140000FFE6E42783355C475E4325A471E3BCC1D
-:10C150004CD0CE3686799AA04A7C1E3B80EDD6A57F
-:10C160007F79C08AEBBB97794628D8D847F2080870
-:10C1700094A11C595B2953FDCCD6B1C417FABA7FE0
-:10C1800062F17D1ACE3716179767EBBE364595AF2D
-:10C190008735F9183300FEE21378F97973F05A9471
-:10C1A0009FCD90DF11859EEC5ABD47E5997FCA5718
-:10C1B000FAF8532F7FD7A910DFEAF9CC5E0BCD3BFD
-:10C1C000EFD69FC5E3BA06A287B51A9DF9E3B9FC7D
-:10C1D000CD9B7A8517E17E0EE68AFC1E597F51BC05
-:10C1E00042F3D0F392D328A72E7E7E12C9E3BC532C
-:10C1F000AB383F640F4EB7FA3CCF671BED04316F8D
-:10C20000818A7C5DAF007E15B417D63091EC02E6D2
-:10C21000615C45B138C83FB15A935FF95DF64B2078
-:10C220006F7BCBC410BFDBAA4A4415E09E932B055D
-:10C230004C00F7F82CBF97813DE2286002CE1FF03A
-:10C240003D322105E96012C1337B754810A1D31E30
-:10C25000947D29B4EC3AD7243E0EFE077C3F26019C
-:10C26000D6E9DD2570F9E0E2F2C10CD3B191FCAC66
-:10C27000624118CFF19689BE033F841E807C8C2CCE
-:10C280007A509EB678D6A4221F3A1218E9B505D77F
-:10C29000EE20B905F2D6B30556B4F46477EA32C895
-:10C2A000E7B9F87A74F8C414580CFA61C871A4801C
-:10C2B00017FB7508CCE3F70CA247BE6DBFB600B301
-:10C2C0007FA77E4191A4129F683FEDAA80E3E0BA68
-:10C2D000A15F2B7B99C639A78DC34C6F1C467E8905
-:10C2E000F981C44C51F865C0714CB70FAA37AA8EBA
-:10C2F0002DFC5347183DDF95109BDC3D1A7EB98C11
-:10C300005DF60D2A0E13103CCE03EC4E13AD9FAD1F
-:10C31000413CE7C8DCEE509CEAF00D50FEF86A0B99
-:10C32000C90FBDDFF3D50BFED401486C29E072BF05
-:10C33000E6436B09F6533F4E0C58A15D47CAB48CD7
-:10C340002EF8FEC4A62F73717EBA7D5AEB31F245EA
-:10C35000CE6A4E977ABE55E38B5A79707DB241EF23
-:10C36000AF65F07A0F6BF59E75786B918E81D20573
-:10C37000E4CFA2E3D36FC3F96E7FC0C64C51E4C2D1
-:10C38000B30E5F73C2C4FEF30C6F8FF43648FB5FCD
-:10C390000ED67ED2BBD3DF6583B77F342165E0F64E
-:10C3A000856F4EDF32C4FC1F8F3EBEBA1DDBE5B881
-:10C3B0002C0CF15B93BE96F0DBFC80C563057EEF31
-:10C3C0001833CD8578AB4BE0788BD2EFB383CD0BB0
-:10C3D000E05236C4BA5E18AABD30F8BA5E1D02AE8D
-:10C3E000478780CBA1C1DA035C5B8798FF1FA3CF8F
-:10C3F0005FCDC179E7645948CFD464035C518E2383
-:10C400005C597F7E88D2EF3B43C065287AFDF07B84
-:10C41000D2EBC9C1C6BF087AFDDBF7A4D7FF3B103A
-:10C42000BDE2BCBF07BD4A89DF8F5E9D8983C375AE
-:10C43000287A4D1EACFD45D06BD660F3BF087ACD8F
-:10C440008B36BE9539BC2ADA45055C9F2F281649E4
-:10C45000BF9BF3B91E761C7BCA8BEBAA037D955458
-:10C46000847AFBF8C34B0BFBF474A41E8AEC2F52A6
-:10C470008F2EFDDB93A4479D9ADED7E7635722FBFF
-:10C48000F99741EDBB6F3B6E8C8B85EC63FBDAA7B4
-:10C49000FBFEBBC733EAF9180F1F9FC1F85716A15F
-:10C4A0007EDDE541BA8C2FFABEE30E5E3FADECFBBC
-:10C4B000D9050B12C12E70F4D9059955BFDEFE5176
-:10C4C000525F3F999297C9403712BB8AEC3756C1E9
-:10C4D0003C3BB1B86ACFF68F26F4D903007F01FD4B
-:10C4E00023FA38A68AE0F68FC2E6D53B9769FBB4FB
-:10C4F0004ADA17E5C95362908ED7B50C6E2FBFA1EB
-:10C50000E9F1DF6B7EAAC39A9FEA10FAA920ED40F9
-:10C510003F15A407D14F05E521F45341FE55CD4FFA
-:10C52000F58AE6A7FA8DE6A77A58F393F9D14F4634
-:10C53000FEA880E68F6AD7FC51414A1BAAF753BA7E
-:10C54000B63A44F5DADB5E188EF0E85B07B7DBF34A
-:10C5500064DDBFC7D7C158298B86AF1B3C26C3FEFD
-:10C56000E2FA7C87016FD72A4986FC35AE4C43FD41
-:10C57000ABE5E186F22B6DA30DE5C56C8221FFA32F
-:10C58000DE2986FA57F49418F2977F7A9DA1FEE48B
-:10C59000AE9986FC65476F33D49FD8596E289F703B
-:10C5A0007891A17C5C68B921FF83FDF719EA8F09B6
-:10C5B000AE31948F6E6F3294A7953D18E167DA62C1
-:10C5C000A81F5FB423C28FF42B43B923FF7943FE26
-:10C5D00026D0F728FFECCA6F0CEDACAE8386FCBF0B
-:10C5E000C531DAFFD89D41AF378A3DF9553CDFAF01
-:10C5F00082DD5E4CF632C8B1A671D8BAD28FFBF19B
-:10C600004CF81DED63C0AEC08643EA31CA1D5385A8
-:10C61000C538FE10FC8C1E00ACEF861FE4C7AFF4DB
-:10C62000FD6CBB5DFD218E9FC7E5B02AABE47F8822
-:10C630006CAFFB8BF2DA67C563799D5C2247930789
-:10C64000272CBE93E1FA2172FF9BE78D655E1CAF3C
-:10C6500042F797717967E25558E6B16B0E0BE8FF28
-:10C660002A7B3501D7A3FB79D6697C5AAFF991AD06
-:10C67000EC72F2639CD3E43F334DF50C269F22E12C
-:10C68000F56DE5999814B9CF9911FA18C7AF9002D2
-:10C69000D1F4A49EEA722CEFAD3B07C58F0E5F1D4F
-:10C6A0008F2639E845BD6A532A59B9B33F9C4C5986
-:10C6B000400F71FFFC75E72619E5F839F64AB177A6
-:10C6C000D845ACB7EC0E5A878ECFC87AFA7EAB0548
-:10C6D000F14AF291CBDF5A0DBF6291770DC2370E4E
-:10C6E000F6D1B8FF133D21D6F51DFCC08EFC4443A6
-:10C6F0005E726618EA9B3D952C88FE5B1887113D9B
-:10C70000FA18FA73F11FFA4B4C3287F3C07C773971
-:10C71000F909CE45D82103F11F0EF1CDF0A1F9F5AD
-:10C72000BBF277C7DC54EAFFBE78A6F95F549EAA35
-:10C73000EC4DA49FF2228D8098F2D3F760DE0B0FB0
-:10C740009B49CEFCE8ABED871E03BE341559E526A8
-:10C75000F20CF90FFD16CAE77A6DA5985F786C8C1C
-:10C76000C50DE5473280085C585E1A8772E03413C5
-:10C77000A7A3DFEE347B336E42989CBB27C942F2FD
-:10C780008535988F77D9707895CEB1EEF2F3BCBE2F
-:10C79000AEF9ADC6FC3C3633558271E63D646601A8
-:10C7A00000D642261DEFD2E10074302789FBDFE777
-:10C7B000B3CAB5328C5B6FE6E7364B5E1C63413C17
-:10C7C0002C9C20E79AC6F5CDE3FE2491EA7F06F47F
-:10C7D000A658FBBE2F72062C28974FEC9DF093CBEA
-:10C7E00019F613589B81FECE04B04394FEF09DD3FE
-:10C7F000609CE750EB889C37BA41069B87D42E7823
-:10C80000A3F9D51B9304031E6B6DBFD8DE05F3F4AB
-:10C81000D64ACCFE43C84BFC5C493D161BD889F276
-:10C82000BBA4F2A92E8083BAC62AD742BAD9F18B0B
-:10C83000E7B07E15200CFDB9CF2729348FF376772A
-:10C8400000CF1940DF5C3633F6FBF7FBE23FA9DF90
-:10C8500057B0DF94FEFD2EB17559D09FB84CAA9CFD
-:10C860002E88E857E4F5AC669F3713FD89FBC78532
-:10C87000321543BD868BAC7758187651F5A68B835D
-:10C88000F47746936FBFDBF5B805E5D6E95F7D78B1
-:10C8900023EE8716BF6C6236A87766572C0B91BDC6
-:10C8A00017B0A0DDBA68AFC91BA07C68D22DB1E17A
-:10C8B0007C5D4BFD2F7E2E96F6538B9EB706664011
-:10C8C000FB452F9C18CB401E9C59D3732813E1F7CE
-:10C8D0002B81EC67A6768DBD05BE2F92D89DD1CE5B
-:10C8E0003DFF9AC4ED8E532F39CA90DE84F603774C
-:10C8F00050BFC19F9AAD617AEC489299F009F5C892
-:10C90000DFAD3E2D0446087C7E378F099F5F0DAF5B
-:10C91000F734F7E72EDA6F0ED8717EED6D161FD45F
-:10C920005BD6FE37A2EF2B9FDB1D877058B6DF6802
-:10C93000AF2E7EEEEBB55300CF8B4DAC6706E9F121
-:10C94000AF287FCE6BEB31911CF2C60920B79692CF
-:10C95000C8827ABFFE64DA7B50FE99CBC4EC200A11
-:10C960003EEBFCD8F232E67DCE4AF4682FDB6FE472
-:10C97000C365ED272C382F59643D59C0E83FFC2290
-:10C980008C2F59FFFAB00FB6A09C5D166CFC9B096A
-:10C99000E86DD9DED3EF22DD2D8BE0E7CFF097F401
-:10C9A000FEFAD29A1CA92FDF9884FE72D60E9B9FA6
-:10C9B000C903EB4B9DBF17EF3EB74D85F14F3DFFD0
-:10C9C000F93615505EF15F7FDF763FEE8F5EB5CBB7
-:10C9D000289796FDEA3FE25818FC872573F970E620
-:10C9E000E9A79EDC027038F38E95A076E6B79FB873
-:10C9F0001580FB993DFF3715CF9D56FCF6EA34A410
-:10CA0000B315FBAE4C1B6C5F84741BB086E33740E0
-:10CA1000F855F6C33869907D454B23F0726ACF799B
-:10CA20000B9E0B7D29B01E94BF4B835F5BD03E3BBA
-:10CA3000E4653D08A7D7F69E38741FE44F039EAC0B
-:10CA400051F004EBCF1449AF843251BF2CDD7BCBC6
-:10CA50004D5714626AF6288827D643F2BE1F7EDF40
-:10CA600002FC16F6E137B2FC1CFBCA82F05FB60B83
-:10CA7000F03916F10AF81CDB1F9FA7F197C9FDF1E9
-:10CA8000599C6CB4FBCEB18AED5BB0706F12E17F44
-:10CA9000207C2ED9F7E341ED2C5D3E0C05E7050225
-:10CAA0009F576CB2F7E664E4DBE71DAA8BE33930ED
-:10CAB00003CACEEC3EE76640279F9A7BEE4038F4EF
-:10CAC000FCD62AEF80EF8B7EFB36F1DD997D7FB6B9
-:10CAD00020FEE1274E98047976E1E74D06F9A5DCC2
-:10CAE00006674B58CFB4770B31653DAA87F047F9FD
-:10CAF00043C087848FC0CDD31594BF81145AF7D219
-:10CB000000E78FA58103B70A63FBC3BD3959D4F58C
-:10CB1000D605BC0A4588CF0FA721FD0D844F7DFDAA
-:10CB200032AEFF32287FC2C8BF91F59702BFE2FE46
-:10CB3000A81F7E0307FE88E99936AB24802D740672
-:10CB4000ED04677FBCF7C19FEBE76F6B1FD747F022
-:10CB5000BBDE5E87D350FC3ED4FABE2DFCEE4956B8
-:10CB60000C74A4C3F1D457D1F5411BCA8F8908C7EF
-:10CB7000CAE919C3FBEB33132B553385BEF9AE0D50
-:10CB80009A48CE9F6A07BB5CE82F2F96E2396E94D5
-:10CB9000719ED3E4D4D2FD07C6A25C3B75F0258D0F
-:10CBA0002E39DD2FDDF5A145D5F443205C3E0F7015
-:10CBB0002EFC9236EF65AF44EF6FD9AEBF45EDEF77
-:10CBC00033C9FB539CFF679D66A642179F054D51D5
-:10CBD000E3191E4FE6FAEFC2BA63271D8DC77D41E8
-:10CBE0005C8C82EBAE5DE37D1BCF45D537CD74FE0B
-:10CBF000CF24CFA75628AF8D8D51D08F571B378F9D
-:10CC000029617ABC2E024E92AB94CEEFA4E4D242BC
-:10CC1000BEA70B18CE7FCD4010E1F306BD9B857AF1
-:10CC2000E983719F98719D7F8DB023FF2AB1B5690B
-:10CC3000D0DF5F55C153A344DB1F18FBF7AD36317E
-:10CC400025ACFFA5D69E0F703EEC5FED0CED32D308
-:10CC5000AB7601E5C9B26D66DA7F2D836D15C2ED45
-:10CC600093C7EC0115F29B7F5D7D07EAA5FFDC66AB
-:10CC700065781EF1DABE95DDAB502E3D2A30F4A367
-:10CC8000FFE74BD55FA25E5EB8155607F264BEA300
-:10CC9000E7496C3FFFB94C560BED3F178293703359
-:10CCA000DB9D129A84FB90EEDDE91E95FA797129DD
-:10CCB000F67BE63907F57BE65FDFA671CEFC6B2CD1
-:10CCC000E9357DFE606F2BE17A1CEC6DE5021F906B
-:10CCD000BD1D96877116639ED717BED1641ECABF4D
-:10CCE000C59802DD2FDE1FEF45FF4A583DEA6799E0
-:10CCF000B5E7E71EDA7FAB1922ED9D4219C88F8B8D
-:10CD0000DB8DE37FA3C9BB65969E79BCBE3F83F3F1
-:10CD10006D27B573A668F4AA9547B6D7EBC7A40CE0
-:10CD20008BE887B75F6A6595D1F8204DEB7771FB8B
-:10CD3000D7A38CFD71BAED3F0EFF7EAFC0E340D8A4
-:10CD40001E3BC5A35558422313816F5FB0B005C881
-:10CD5000BF1571A1910930DECB9ADCAC88813C7C97
-:10CD6000CFD0E681F531CF6C5D6710AF4B5EB4D3A9
-:10CD700079CA9217DEFE12F1790A610C183B95D23E
-:10CD8000F9E5FD4007A71E333115ECB525D690FB1C
-:10CD900051D4537BAC6C07F2F7ABAF93DE3AFDBCDA
-:10CDA000551CEC9C7A4910A8C1D67F1D6A09CBAFEF
-:10CDB00074621C8E576CC37DC36153A006C6AE92CD
-:10CDC000BC6B9EC3F51D36D33EE3EC5C968FFBCA6D
-:10CDD000B32CC3A312FE95B725285FF97BB3102DA2
-:10CDE0003EC9DC0B427D02F041EFF54C8154EA1D57
-:10CDF0004EE94A4BE52894BB26191657407E02B2ED
-:10CE0000DBCDC91E361FD29589CC87F063CEEB2EC1
-:10CE1000F0D79F00A5CB1F51D2B0DD8F52CC34EF9D
-:10CE200045A9DEEB53483F3A65B22F343A55F7F146
-:10CE3000799E17623C35189FD37BDF9D08DFE51F85
-:10CE40000A4A783C43643C6895A4BCAD14D27A4944
-:10CE50001EE5C9310CE17A563B773F3B57894F08B5
-:10CE600093CBCDD532C98FC66A17A5EBAAF39942E9
-:10CE7000FE350FE54DDAFAAD052AC507214FE38FE0
-:10CE8000D559EA453B0FE784714126A78FE8C8EAE8
-:10CE9000AA24DF94CDC9681F6B72AA6C3EA46627D2
-:10CEA000878FC9594AF0B16879A97506C113DAD3D9
-:10CEB000F7AB537D77233C6C59971AE4922579BCE4
-:10CEC00021DF0F5E3AFE77FF4FC18D119C1AAB6DCB
-:10CED00094AEAB2E2278D5577B29FFBF00B7D694EE
-:10CEE0008908B7294CB185C3ADC4901F106E8F005F
-:10CEF000DF2487F30DC011F986C5787646597F6423
-:10CF00008AF11028A81FAC6EA554FF9E3880DE3E23
-:10CF10009F2268F1B0BE1A338E23737F0B4B565994
-:10CF2000D6A43EFF2673A94CC13CF22AE2E5680C68
-:10CF3000C16EF9FB76F21B9B64A93B5CAE2DBF4131
-:10CF40004943F965AA7A9C9D088B4733CD28B52BB8
-:10CF500004570F9D53D66A7AB3FE02FE8C7CD05CD8
-:10CF6000AD50BA5EE3878D1A3F6C423C631C8987E3
-:10CF70009F6BB64C67A417FF0FE4F93E3EC4C2E3B3
-:10CF800046123CC19019F04D3252A13444F1BF47D2
-:10CF9000AD8111B9143FE545FA4838BA8AFCC78C0F
-:10CFA000055DE84F4BD0E0C65E1996302B9696672C
-:10CFB000E67A879978EA37A33D1E09D75ACF411BF5
-:10CFC000EEAF079A4FF1070B051CEFFC2C42134BF9
-:10CFD000BE3D78B41CCF4F5B1CA457533D9539E838
-:10CFE000DF63C7AC449F4E8F4F981F86BFD401ECC0
-:10CFF000BA55A9D77E8C7CDB8DB20CE8F0C1D6E1A6
-:10D00000768473B339E84279D79CC0F587520650CD
-:10D01000B8ACAFDD9F3439185768E4775DBECA53AA
-:10D02000C71BE85797AB895719E95C97AB2FA570D9
-:10D030007B6D516AE9799C4F52EF56E2C348BACFF3
-:10D0400093A794F992510F304F13DA6B6833A21DF6
-:10D05000F7A110E0F4CEFD5367BB7277A09D03BB30
-:10D0600002922B2AF203E1A9E7B56F9231DE95CB4C
-:10D070008735B699365C6F03D0111B85FE6C850031
-:10D08000BC01E887D179A047E38F224A75FA74A7DB
-:10D09000E61AE2044D798744C4573DD811144F0C69
-:10D0A000FB3B278C271D986C437B4F327B0EA39C48
-:10D0B000EA891583A837EB9D336D5EF4DF241412E3
-:10D0C000DEBF8C2DCF192C6E09EC16F2DBCA4E0F89
-:10D0D0003B8EE330467E5B933C9EE13E71B7B333BB
-:10D0E00006F72DB1A9A2615E8B527DC353C3F263D3
-:10D0F00070740D5FD8ED6EAD9FC8F17E90AAF92DCA
-:10D10000B354E60D3BB7A8D2E95B51D95561FCBDDC
-:10D1100066C434867117917C3DA0DCDAF9FDE456D3
-:10D120006D4E80F0658E9417C920C79D94AAA28C7D
-:10D13000F3569AFF2581E8EA4A840373EEB86087C4
-:10D14000FC685814FA3A7A691AC56B5ED033B06B32
-:10D150002E203DB3B988DB239A9EE1FAE96C8B83DC
-:10D16000F4D3D9B995144775B6254D41BA3BB0E112
-:10D17000F2B1088F79BD8D4C81F9CDEF9D4CE982DC
-:10D18000D65F525ADEDA0644CE58CDFAF91B664114
-:10D19000BB138F98282EA83B30E14C15E4BB5BAC49
-:10D1A0000CE38EBBB7DE93837EF16E1807EDABEE1A
-:10D1B000AD2388BEBA016E946F30D6C7786113E094
-:10D1C000A59C313D68D38BF5E7BD6E6A8B662795CC
-:10D1D0006FB47AA39DEF5C286F8D6EB7D5E2AFE98F
-:10D1E000F85FE5288457F107AB7270BD3AFFAF4C8A
-:10D1F000047984F0FAC0CAA2F9E3AF4EBDBA227531
-:10D2000022A6DE159832676254FF5A1FFDF3714F54
-:10D210008860DF125E7C71371BFCACDC8F7942B317
-:10D220007F996D80F238ADBD1CBD7C49CBE7871E70
-:10D2300060787FA1B214895EDF4F9B18ECA705DCF4
-:10D24000FFDE4CF1D0FA7CC04E253A66800F942F59
-:10D2500073357F0FC0FD260B7C3FF1BA4940FAE8D9
-:10D26000A3275F1CDA2D42F30D6B7643F9DF0FF332
-:10D27000FDD9C2DE4D24EF84E6319B27C3F77B5EE8
-:10D2800037939CAF69BA7CE3ED80DF2FDE30517EAF
-:10D2900041AF9DEA9D7CC0B3F976A8D7F30733D997
-:10D2A000E15F1CBE9AE21E4F9A8D7E82A9699C8F17
-:10D2B0005FD2F8795E6F33D91F7AF9BC863916854B
-:10D2C000E874037D9F878736785F8195FD7B711EAB
-:10D2D0009EE730BAAFF0D2C3B75EBF86F4DA78B259
-:10D2E000F7E7AFB77AA2C54FBF94AA18E4CFFCAE58
-:10D2F00016EA97815D949CAAF5172647E6F7261152
-:10D300001F30596518673C4F932717E6B7D56C90C7
-:10D310002727EDD1FD20AFA7F27DD4BCDECB89BF9E
-:10D32000FAAFEF87F47D9E3E6E17E7C7BEF56C9EA1
-:10D330001C6D3D7DEB984AF54F26441FBF471BBF30
-:10D34000BB7A01F3825C2AB7423D278E7FCFDAA2F7
-:10D35000425C4742A210B6AEF9AD8B99376C5DF3D3
-:10D36000B7CEB69487F5DB8787E5FF5E2CF5E1A1A4
-:10D37000277509E161556AE931E49BF2E62BC62283
-:10D380003DCE6F6D24389F307BDC285F3F69BD2721
-:10D39000CE17759E8AC18F30BF55C30FD8BB85612C
-:10D3A000F8D1F112D9BEFBFDF95F3E80F2E7116EB4
-:10D3B000DC0C04AF7E78CB8D0EB7188D3EBB41DF01
-:10D3C000FA086ECA0B4791AED73B3C48D703C36FF0
-:10D3D00034F30D06BF01EC57B0774C69785F017DDF
-:10D3E000B4780ED9CAE96028B8F58DABD14171F493
-:10D3F000F514A5E97450C55460D8E396A1E8E07E21
-:10D40000A6DA0659C7053A78D84007459BD7131DB9
-:10D410007C8AF6CAA8FEF83F6E51E3A6E0B94F93A6
-:10D4200089CE958EC7A8A9B7F1FC3894C7C7E3FC8D
-:10D4300037E2398D9E5FB87344DCECB0713F690010
-:10D440003844815F51DA00F493A7B28249FF3CFA75
-:10D4500039618E7EBFEFEAD4E2A969A83FFCD1FD15
-:10D46000B57AAACB6B53BCF3C23E13F5E771E7B0B4
-:10D470002F0350DA9CEA9B8E745197F0F33B511EB8
-:10D480001C3F2E90BEAD797FE528D46B917602ECDF
-:10D490003F1BF0DC73A529D64F76A854B99DCE4129
-:10D4A0005589ED2CC47D4AE5968F46A0DFB08A529F
-:10D4B000A6D9A12B4D977A9AC82F5BF9149E930297
-:10D4C00091C8585F6295746E0A82B014F39B1DFC7C
-:10D4D000DCB54AB2C9D6B0B884E51ABFD45797FEB6
-:10D4E000F223F443DB5426A7627B2E3725C6EDAF2B
-:10D4F0007FE03CC3F4BDC5EC933DB80F155829F24D
-:10D500008559F2D1FD27B32B799C1A8687CA347EC0
-:10D51000DE6EEFE868C885F6F6BBFE20A31EB4C237
-:10D5200038E867B3654967C3FDD5E6E420DD6F627F
-:10D530007961DFC1AE721640DEE00780F90E621736
-:10D54000BE2C785C5F223DD67078142188207D67E0
-:10D55000EEF03694CB45529D09E38E66DD3582F2BE
-:10D560009BE77C33B22B0A3DCC7A655D27DA33B377
-:10D570005E499F83E707B39C233FC614B60BB618DA
-:10D5800068FF9AC0824D905E657B9CE2195FD3FC78
-:10D59000631D980FD38B1D1ABD819D337D0FA4B3DE
-:10D5A0006C7EF3DD057DFEB4C871376B7CDF610EE8
-:10D5B000A65C8A7400E3E03A7EF64AE0C7A0FAD996
-:10D5C000EDC1C00D63003F77B01E33C2D1C7643ACE
-:10D5D000F7D0FDBAE5CCA3E519ED4FDFAB30EF4056
-:10D5E0003A89ECEFF610EFEF671DD01FA4771CEE21
-:10D5F000F93754CBBEA03CCDC1C2FADBEF39E460B1
-:10D60000FDFB8B84B347B299D430B8028AC470B89A
-:10D61000F7836F7CD9756CECC07CD6076F3E8F4862
-:10D620007C7C8145C0A76D69DE5F23BFA969DEBD33
-:10D63000C8BF15B61EB70474732CD9B71FBF2F35DA
-:10D64000F97252011EA7B37DA352102E9DD1CF5F58
-:10D6500023F93BAFECF463C83777D4480CF1BC76C0
-:10D66000DF278F215F9E36031FC17EE0B5559FC423
-:10D6700022DD2C01060C97271F548D20FBE9ECDEE0
-:10D680005183DE1FF940F397746A7CA2AFF34E64B6
-:10D690004018EFCEBD0EDACFDC5965BAB0CF427A72
-:10D6A000BFB38AC78730A973ECAD06BBB36EC07E2B
-:10D6B000701F11D94F77B56F3BF1BDE49B8476F7AE
-:10D6C00089EA05DB51BE44CE73A4CB77228DF4DB0F
-:10D6D0006C43BCEDDC9685DBC3F950AF5F3B807CCF
-:10D6E000F58CD2CE016D7C3CA6FCA0D83989EE6BBE
-:10D6F000D28F3D64FB5008A387A1C6637957792F69
-:10D70000C805DC7FF944E64CEDDF5F643DBD7F5723
-:10D71000D595ECC4045C9FF7FFA5A50C3D7F8B8BD2
-:10D72000CFDFAEB5D3BFDB7D7E8676A1FDAB78B211
-:10D73000133CA3B8FFE11F9A5DC09CB05E6430FF4C
-:10D7400066EFFFC67A61608A17B66FB5468D2BCA41
-:10D7500074491C2FC143C5B628F3EBD75F48621745
-:10D7600053CF338AAF1FDD64E4EF1A1943FB9AF2FB
-:10D77000AA5ADA673782FC407D10399FE34D8F2A21
-:10D78000A807EC16BF827ED1C691A9B96BA01D482F
-:10D7900035F2FBD863FC8A14FE5DF307D9D7F81580
-:10D7A000DCDF368EC8A0EF7A7F8D0297B33A5F3404
-:10D7B000C2BEEF79F28B795C3331AEF4ADC0F45870
-:10D7C00068B7632D0B99DC8C1D74678CC67DAEBF6A
-:10D7D000DE42E77B8DF962FA5CC8C765DBC83FD6DD
-:10D7E00096109A85F76B554122FDEA4F50AE8D4554
-:10D7F000FFEE9AB44E947F07EFB6D07A9B27F3FBE7
-:10D800006AD6291FF9AFC4FE57300FEAD51DBDBF38
-:10D810006EC57702D4A3B09F45BF21760AF268C7D0
-:10D82000F4B376DCCFB930AE0EF0B1D51CA4796D6F
-:10D83000A9B152BF5BDA2C65D1F0F779BA44EB0A93
-:10D84000085D141F9CC4827684EB83D3676ECE83FD
-:10D8500076B9794CC6FD7C73C1596DBFE935F1F3DA
-:10D8600028DD8FC8ECDA79964D3BA7B285C7173E05
-:10D87000EADF4BFE43C78C204FA78BE47F8E9CC70B
-:10D880000A17A77BC7D4CEE9A8271C852213D0BFCF
-:10D8900099C7045C973C7D075DD2C8CD6703B43758
-:10D8A000517BD90BED0B797BF409C917D9BEC2C5E1
-:10D8B000E30CD7A31F0ACA03668F702DCC23708395
-:10D8C0002CA84A5FBD7A17D7AFDBA1FF10C9D100E2
-:10D8D000ADCB9D1F0C21BDB92B44C2D3FAA2E3747A
-:10D8E0002EF060A1EE47F5D03CB6D61C3980F6D7B5
-:10D8F000D67B19D9495B518642BBAD37B0003F4F4B
-:10D90000621928DFB62CB45C4FE7F905007F81D29D
-:10D91000A8F39E9D6E237CBB573F18C2FBFB311EB4
-:10D9200020D45C4AA3D66F4CE770DA620EA4A37FC2
-:10D930006420BA287371BFAABB4AB3AB98DF85785D
-:10D94000DDA0C187DD3A9EFB1724AF121EC7D5A705
-:10D950004FB81F03D64771AD497516D247E28CD038
-:10D960002C5C5762BE855D938BFCC5E1A68E117958
-:10D97000DC190BB4227FB65D924AF1A4EBC4800B94
-:10D98000FDCD6A8985CE930F1689B3F05D848D75C0
-:10D9900016F243409EF8C5EF1DD686FCE6985A5213
-:10D9A000B6A010DFB9B0C808DFDA02D98E745CEB1C
-:10D9B000156501F21B4AF5FB118CDE37186732D969
-:10D9C000F3A17C7BBA883E5AB65D1088DFEBBD259B
-:10D9D000FEE1F0BD5E4E16C2FD002FBBB8DD7B77C9
-:10D9E0004EE9CB2E4803DE07FDC3158E4B6912E3CB
-:10D9F000572CE02796851660CC4D5BFD934771BD93
-:10DA0000EBC7D9E8FE6CF60A7F19CE37F6128B8287
-:10DA100078DDD19B349AD6576751909F3709816B37
-:10DA200091EFB7DE7D4845BFBAFD6327C60E336769
-:10DA3000D7DFAA317ECC59688938C76222CA717D86
-:10DA40005CE75B21A2A72EC1F79758F2FF1434E5DB
-:10DA500027533CF32484E78629EFE6CF8B4217D087
-:10DA6000DE993A1EED653134692CCA29AEC7982477
-:10DA7000A787E3775376C63BE867DA560CF3C7F11E
-:10DA8000AABA6FA779798FDC8F7695F3D8C9AFA33F
-:10DA9000CFF34DD223B1C71C21712CA64B66907DCC
-:10DAA000165E0FE4FEC61CEFC72EA09BDD355CEEB4
-:10DAB000B7DCC5E83D0AFCC90F836F4B014869FE1E
-:10DAC000048D42F50A64F2A3AF13956008E139D6DC
-:10DAD00046F494C67C24D722D7EB38D67837C61DB7
-:10DAE000393CC679F66AFC8D3F522A9D57A025CA5B
-:10DAF0002CE973ED28FFF68C57D271BFFD6042749C
-:10DB00003DFF5E3A6FBF5B886E9F9F4BB7737D0989
-:10DB1000B232348950C528AE0FF2622A9DDB909351
-:10DB2000DB2A72B9C0AE63A4F7E2C675D93D61E3E2
-:10DB3000ED49EF9B27C61FC46BED98DC13AA81F556
-:10DB4000B701D5E27DEEB86C0E47A7DA0747AC2FD8
-:10DB50006BEB023EA81955884094A93E2BB5D0B96D
-:10DB6000084843F51BB10F0EB15AFD2D459280EFC9
-:10DB7000900C036008503F61BAC5708E22D71D51CA
-:10DB8000B1FC7E1353128BFAC67F6C1C0BAC81F177
-:10DB9000E3BD4678C7AE786125DAE591748033B885
-:10DBA000D02F868ACF35B64BBDBD1F1F103C699E56
-:10DBB000009A96B7D80E0B00A5A55DD2E36349FE87
-:10DBC0004E3475AAE80FC580A47D30FF4B9F7ECBF5
-:10DBD000BB0BF22D3ECE67B1F92FAC44BA4CC8E076
-:10DBE000787A077DCB00E74799FC778CDB51AB4413
-:10DBF00005F1B12D348CF47823934A114F8D95475C
-:10DC00004494EBCD7B99471090FEFFCB1A3EBFDBCF
-:10DC1000D2F9390D9314927F929BDF1B6D2E101D4C
-:10DC2000285F0FDEFD02E9BDC70E880CF9BFE4775F
-:10DC3000C71EC1F7815ADEB152BEE5F54A921B3FBD
-:10DC400087766A14FFF9507A39B27EDE921D029E01
-:10DC50004FE42C08BE3E12E5B35FF25C83F858D067
-:10DC600049EF872885FC9CCD392344EF8728A8D528
-:10DC7000C02655FC5ADAC2CBD9AD89B48F1A63EDF0
-:10DC80006AB80EE6F7E8D312437D69B206D3E743DC
-:10DC9000BFA6179DA809FAED8F1E9D114A47391E90
-:10DCA000534961D0FDE677229DCB59F70CE5F72368
-:10DCB000A1DF84A91C96767FDA0194976833E3BDCF
-:10DCC0000A87CAF5DC0629E0C538EF0D2B7C161C47
-:10DCD0009F69FB97C625E54F229C4F6A7A8F552E88
-:10DCE000A0774CDC1ABF38AA5871B47D56AB2B868E
-:10DCF000C7B73C201E40FE707B19E90FB92A181ADD
-:10DD0000A5E9659CB8BCFAF946D42FCE0A91D6B1E4
-:10DD100041EAACC1772536AC60728DD2BFBFEFDA75
-:10DD2000BE2ADD4AF36F451CA7F4AD835C7220DF89
-:10DD3000DC0BA2AFE3611C7762DF3A62F475E47733
-:10DD4000515E9FC7766FF0A2E6B1595BC7A6749982
-:10DD5000524701681A677F79BFC6F101BD2B1300D6
-:10DD60005BDD44F7D182D7615E794E64FCBE96914B
-:10DD7000BFFBE535BA8AFCAEB0B0717291EE389E49
-:10DD800081EE34FB09F8CE86224054BE213F869FA7
-:10DD9000D61F498FFF74B9183E6FE83FB68109144A
-:10DDA0001757C19492F4FE72916972D1C6D410CA09
-:10DDB000BFFF69B9087290E4620BAC3409762AB1EE
-:10DDC0001D4D77A31ED7E5E144C4C914645FDB0D84
-:10DDD000254EDA1751FEB247FED082F191EB44EDA9
-:10DDE000BC4B830BBAA1102E5FBB14833E7D187F02
-:10DDF0008175ECE948BCBE00C6DB5C366C1CEE2FBE
-:10DE0000ECFE17C93E7017F0F81577153F3F77E421
-:10DE1000CD7B32FC5E5C653AB7D32B75FAABF2BBB7
-:10DE2000709C0DD82FCAE73C0BE9CB475990EB43C8
-:10DE3000CD3EDDE6D2FC241A5D45F249A47C9AF081
-:10DE400087E41294EFE98255C6FD1CEAE783A946F0
-:10DE50007D8DF4A2EBEBD6CE3509E80FCBD5FCFDDA
-:10DE6000B936639CC365195C9E99D3F93CD68995F4
-:10DE7000B4DF544B44DAC7E9F477418F47C031121D
-:10DE80007E48A86B27517C0CE5E38A7B18F2EF36BD
-:10DE900020597CE32D2E5DD1E2A6658273DBCFC4D1
-:10DEA000F1282FF77494DBD1BF2EB86DD7E2FE7046
-:10DEB000A3C04228373716BF4971254D55D0332CA2
-:10DEC000CA992FCEB68CED8F67E063DAAF3A546B08
-:10DED00027FAB582A11D14B7D01438348B713B9644
-:10DEE000615C4A53FE9A8C4528DFF34B0B11BF6DE2
-:10DEF000F5168A9B91F359543FC2E7B88F213AF93E
-:10DF0000767ACCA1EF2F2BA2EF2B4B33F8FE3628DD
-:10DF100081A882F964E58B1EE4FFAC3A4BD4795CAE
-:10DF2000A9E1293383DF0F6BAB3F944EEF668995F0
-:10DF3000013618BE60FA6B52C3F03179007CB874B8
-:10DF40007C483A3E1266131F76758A5CDE925EDB71
-:10DF5000C0E4DB503FAA9516B2631BCD7C5FBEA325
-:10DF600040E30BD9D686C4F66DE93A6E8948F7705E
-:10DF7000B28B44DA273A2A9EA7B8A64759CFEB2896
-:10DF8000EFD4027E7F3EB2FD1D19DC7F159414C1D3
-:10DF900043FB698E47C02BCD67EB88D4B6703E6DCE
-:10DFA000D5ECE8561787E3D6FA87894F2F769EBAC5
-:10DFB000DCAED5ECE8855E9F05D5812A944E4B47B3
-:10DFC000FDF9047F878A999C64977F8A4DC2FCB2D1
-:10DFD000ABB27C951961E743B2B752C47A57E3BB41
-:10DFE00042D0FE9320BF0FFA49F0D7C5F40E978FA9
-:10DFF00011332F649D023139C8D09D907749412A51
-:10E00000772D80B924D0ED48CADB6CA0176142A7F8
-:10E01000ABF9FD8B6E7C5F92DE9FE4EF4B7EAEBD75
-:10E020002739A6755DC9A3389E22F950667C86EF14
-:10E030004BE2FDE7A277292EFA14C8DAA6048C87F2
-:10E04000E1F7B7E5FB982C4EC6FCFA128C7BBEE7D5
-:10E0500055AB764FB2730DDE7B795C8475439B665E
-:10E0600009F4FD702C6A102AC3E878F7159D7178C1
-:10E07000CE773A78CBA0FE63BC3F48F3CDE078DAA8
-:10E08000E4584AF7CBE639436E6C7F60CF534F6E4E
-:10E0900081F13EDF67A3F74C363B96BAB1FCF347FC
-:10E0A000DE76A3BE38BDEF6D4BB4F3C92552701AAE
-:10E0B000DE23AB50E3D91A987F7170B685E24F76B4
-:10E0C0001DA0FB694B649F05FBAF68DD43F9AB7690
-:10E0D000FDD98DE5EF67703D713ADDE746BF445EDF
-:10E0E000AB352482FED93DCCBF28EA397B86A8CD4A
-:10E0F000FB55EA7FB3E3D5438897D38F58C9EF76B2
-:10E10000E091DF51BFA7F6BD48F3FD7CF7DB77A0B8
-:10E110003D5DC19807E5F969BBE6D7B375C685EFE4
-:10E120006F5FD5E0A1E74FC76AFBE0AC21EA69E782
-:10E1300031CC09F0A7FB039D7178BFF073B3CF8298
-:10E14000F0588CF080B418E080727F7150A0792E66
-:10E150006E6DA3FB568BF772FFE0628017C1A5F5C9
-:10E1600000CDFF5806971BA7F6FDC54DEF52ECB545
-:10E17000D2FE595FF762A7CF8DF0D1D70B70E0EBDD
-:10E18000DE7D71789AA7E3A9F5CF34AF8ABD7C5EB6
-:10E1900015BBF83CE6ED053C39114FB309FFA7F676
-:10E1A0003105EFC174EF79FB33B4674EEFB32968E3
-:10E1B00057E8F3CA02711B371EF988EB63B6572084
-:10E1C0007DCCA44E3ACF5922CB32BE4F70A13C60D9
-:10E1D000097079DA599209E5CF3C24D2FB964C0EAE
-:10E1E0005E8AFED53319FAF946A71BFD62BBAFF074
-:10E1F000137D9E8CD5E02D75BA317E6673A6EF4CEB
-:10E2000038BF9FFEF0C54B71DD2B4D95BFCBC6715E
-:10E210009EE2F1A1E78755FEF5019AF770C3796395
-:10E22000640A708BC3F3EF7C91F9E85EF2DED7628B
-:10E23000C2CFA14D99DCEFB6D9F101DD473C8DEF9E
-:10E240003CD27C8214A735D25BEEC673BE93CCE978
-:10E25000C373D9CF9F788DE26DBAD375FF5327D59D
-:10E260003BB5F7B5444CCBB5787816B885E418C003
-:10E27000B1C1363E9A7CD4EE1705F8BDB133020821
-:10E280004CD4138FE970AEB4CC349CEB70399AB592
-:10E2900035B783FC2D81E8F7CD22E56FDE4393E9A6
-:10E2A0005CF91C8B7EAECCB438B995A6188ABFD960
-:10E2B000ECF805DDBFAD52AD32DE5F39AEC9C58FBA
-:10E2C000B4F716CEC7C4A922D0CD4B99BEE199139D
-:10E2D000FBDFC32D6F5EE246F896E3B9076D6A7601
-:10E2E000DC807189140F3A85B46D88E067D6CB5B0A
-:10E2F000797902CF4FC9DCB31EDFC344F8723BF516
-:10E30000495E9ECBCB7FA295CFCF281D9F49FA8532
-:10E31000D13B4560912574DBB80A8F068F3EB84823
-:10E32000AC5BB7ABA1F2C24CC6E336324AA7E27A85
-:10E33000A058E07CFFFDFA03BCABB6C4FF867E6C40
-:10E34000FF5DFD04492F893E7CE30ABE79B8FE7B60
-:10E35000BC84C94D09DFBFFFEFDA7EA5C92B9E44FF
-:10E360003A8C1789EE75BEEE7E64D438DCFF5B1AFA
-:10E37000EE0EA1DAEC8E2DB1A4C3F7730A3F3FB9BC
-:10E38000EBA14D86F755F534F21D5BFD1CCF32DC59
-:10E39000783EDB92C9E5514B669FFF0DCFE546E223
-:10E3A0002F0ACFB7A452280CB7D359A588F187F903
-:10E3B0001D367AC7F712068202E63F9A8544D4DFFB
-:10E3C000635817E57F802080FC38A698303F81F5A0
-:10E3D000B8A5E178FE1C5A8B76DAB1645F13D2D906
-:10E3E000978F747E2040F9CF337CBFE982EFEB3307
-:10E3F000F93EC8096621D2B38C29D0A1E898E18AF8
-:10E4000026F72FC053964E859FB7DD2C791F223AF1
-:10E41000665972B7A30FCEBA3C58A4BDBBA4B7FFD0
-:10E42000ECE9A786D17B437DEF850F7A1F785ED517
-:10E43000C2879E983048B9266777D7046E0BD7F706
-:10E44000ED1A9C9FC9D4F5805FD70764C7FDEA66C3
-:10E450006E3FEDBEC2BBE67194B7AD26DA4F9F6C3E
-:10E46000FD0BBDFB78AE94915D37D0B82723F07ECD
-:10E4700072E75319FCBC2360D0EF0B9F7CE9D2F00C
-:10E48000784B00B3923C89BFC341783FE451AD263D
-:10E49000A4D252F2C75858258F53C1F90EC777B886
-:10E4A00082943A5927A571AC875299C9E49F4E646A
-:10E4B0001E4A935929A5A9AC52E0F69D9FD20C168D
-:10E4C000A4340BED53F4F7B01E4A15BCF11916BF76
-:10E4D000310C4F4C87E37BBCA5FC7B447C9084785B
-:10E4E0009C10459E47C40549ED5524CF312E684404
-:10E4F00072FFF71474F9BD39B3E43D94A72F657A20
-:10E500008F617AF8D9DFF3FB15EB05B2AF4FD8670F
-:10E51000581440DD33895E7A07441559E94ED0EF2F
-:10E520007375FF3FFEE871C208CC16F3A9F0F81D21
-:10E530006673E6E379F11CADEA1CED1C648EE60718
-:10E54000C1F7CDF83D3D0FDDB79FA39D3FCC89F0CE
-:10E55000BF30BFD5E04751F11758C71CBF40E70691
-:10E56000736266BCDAC506A693B0FEE8DE5F798406
-:10E570001F6A487F56447E6E647B9BC06CA9F89DE1
-:10E58000D3D3333F54C8AED3FD5940700AB56BB0F6
-:10E590007E487E21FFD5DE70382565F17DABDD7FBD
-:10E5A0004D5CB47797F4742ED867E6C4FEED6147EE
-:10E5B00098807CAFCB619DCE7371638B7C946F0927
-:10E5C0000C1697AABF77DDF4809FE1BCEDA155F44E
-:10E5D0004EF5BDD92AF96A6D0501BA1F10931F7057
-:10E5E000A951E6D784EF3A037F35C51ACF4D966718
-:10E5F00071FE5F9EC5CFB50F5D925A82E7D9EB14CD
-:10E6000091EE0DAF53F8DF2D589735D43BE536C367
-:10E610003DF9B549DBE81D20FB57DB19DA93762974
-:10E62000FABD94DBB4F13769F537276D233F49C351
-:10E63000087EBE1F59FFC08887E9DDC7C65CD8EFDA
-:10E6400062FA804AFDD78F78B80CDBDB428D86FBFF
-:10E65000BCB3B3F8BEDAB697D3A329CF121886F4A9
-:10E6600020F929BE40AFD738C079D28D595C2E36FB
-:10E670009903744FA649B3879667C56D407B675D64
-:10E68000D68EA3C8AFE7F2189D37DA434FD339824D
-:10E690002DDFC2EC82F6770230BEA32048F8416736
-:10E6A00053C840B7317DEF6C98FAF75FF78DDF857F
-:10E6B000EB6BCCF5D3F843ADF74A8D4E1B35FDDA45
-:10E6C00068379EA35568F0BE5E5B97ED1546F26411
-:10E6D00010B890BD77E3D61137A27FCAB67F48380D
-:10E6E0001AEAE7B2B2F868FC1229FF9D0562C43B42
-:10E6F0004A02CDEBDC5E417B6F91BF63D1670704BB
-:10E700002DD8EFBF6D2D3F782DCC6791CFE9C5F89F
-:10E71000C9A7B6EEA07BFA8B5F34537CC2C8AED9D2
-:10E720005C0EB6F27712F5F78D2E69B51ADE9B5A9C
-:10E73000C2C2DE5184F1161F3B798CD13D63E37771
-:10E74000FDDD8066FC10254E2DF2DD8187B222DFD3
-:10E7500023D3DE1D2888EEA7897C7760575024BD1F
-:10E76000B11CE358691FB0AD04F73D55C704F21B57
-:10E77000F4E743E5B13C73585EF0103DAAB131DED9
-:10E780009D51F8E9BD6C4E2FBBF1508DECFEEA0DAA
-:10E79000A12C4CEB189E37D5AE90643CD7AE0DC47F
-:10E7A000D0FD925A590C60DC48766C890DFD8F2C97
-:10E7B0004194F11EDA34D354BAF764B9579A40EF52
-:10E7C000B3EE58D489F7EA6A5D12433ECE4EE0714B
-:10E7D000042C5DA4F769EAE43713E6E03ECEC9EF06
-:10E7E000E9E5C82CA00868D779199E2FC366A53221
-:10E7F00004A657B6E00DE17B576CB255DEC9DF9930
-:10E80000B971DC24F203D3CF81B669A1DFE2385EAF
-:10E810005B29E2FFAA7B93C91E0CB84C0CE3003FB6
-:10E82000CDE2E78296D892D0FB38BF590EF2ED06C2
-:10E83000543111F1F07ADBDA99D7C0777340A278BE
-:10E8400087FCAF6B6FBB06DAF7B459E8BE850E27BD
-:10E85000A54E32BCDFE05E6DCC5B22DEAB9058583B
-:10E8600039E4DFC179905D55C642E171BCC95E7E75
-:10E87000E82E3B894EBA813FE9FC43CBBF8779A0A4
-:10E88000D776B39FF0DEFEBE40FED5836DF37248AF
-:10E890005E3A966EC7BF635275949F630E249F9F26
-:10E8A000CE52F47712ECDA3B1576F47B45D2535D09
-:10E8B00035F3609CA12DD011331AF17BD8ECC1B097
-:10E8C000E67A4D3E4A4E2EC775BA894CEB23E8AF27
-:10E8D000DEECC9F743FDFAAF4DDABEF1F48D485FC7
-:10E8E00092ACD0BEDA9CC53C680E9B933B336498D7
-:10E8F000C7E8172D1EFC7B07D39E2B8847393FFAAC
-:10E90000B55924DF104E882FA9CAE2413BD95A9548
-:10E91000EC9126603D27D1E559A785EC21A9CAE1F4
-:10E9200027FBAB6D924B09937B6BAB658F64C6BFC6
-:10E930008F63A374ED00F23E27412C45BFAB45B376
-:10E9400097D3B475A5653B284DCDE6F273BBA4CE35
-:10E95000A4F77B816E30EEE6C06A4EDFCBD36DA4A8
-:10E960003797BF3E3C6D30FFE093D52E4F1E0076AB
-:10E97000DBEA72F2DB16AFFAA811E96E79AC4D460C
-:10E980003A34C58DDC3C15E9FEF766BAE7591B3B06
-:10E99000499913D69F29AEC885F030896A06D2738B
-:10E9A000C163C11BA5C94827EA16BCCF5F98DD7AB1
-:10E9B000A304F2A53D56CDC0F3B2A9D95B793E457B
-:10E9C000DD22209F6407783E5BCD10213F23FB09A9
-:10E9D0009E1FA16EC1FCADD9ED3C3F86EBA3DBB31E
-:10E9E00077DD88FAA8D6EC2943FFF4B330FF821113
-:10E9F000F87783787A870617BDFC79FC6EC6BF333B
-:10EA0000C4D3C8F217B476FB0728FF8D56FECA00A0
-:10EA1000FDBFAAB50B0DD0FEA0D6AE6380F687B4BD
-:10EA200076870728FFBD56FEC600FDFF516BD7391C
-:10EA300040FB37B5766F0DD0FE88D6EEE800E5EFE7
-:10EA40006AE5C722FAFF40ABDFA57D77C736BC8BEE
-:10EA5000F69A1BE415CA93FCD806F2776DAB2A240C
-:10EA6000FAAF9DC8F5BF4EEF6EED5EC0916C7E6E45
-:10EA700073249BDB01551A9D17AFCADB3815E9F0EB
-:10EA80000FFC9E22E88FA3780F575D25927F6FF9C8
-:10EA9000EBFC5D99E5AB243ADFB8A0F7B4F6FAFCDD
-:10EAA00003DA3CEBB4B4329BBF9791ABBA3C33C2B0
-:10EAB000F4A35936E66DC04F18FF5F97CCF54CFEB6
-:10EAC000AA92063C37A9053D83EBAB775A42E8FF93
-:10EAD000AA97252AAF4B2EF1E379BF2A4BA487EAE8
-:10EAE000931343F84E735D5DA1E1BDCF3A59A2F790
-:10EAF00063A484AB6C739C283766C8283FEB989C52
-:10EB0000584CE76AB04F437D525522A3DCC94D48AB
-:10EB10004E44B93C3787AFAB23B6DB8EF728A4074A
-:10EB2000447A2B60A42C11BFE7D5890105E6D121D9
-:10EB30002F27FFEBCE16ED4C91F1F3445DCEB7FFDE
-:10EB4000621AE9B15AD0630AE931163F2EB5EFFED9
-:10EB5000A6746CB405F5969C61626690CBBFCB4EF3
-:10EB6000A471773EC4F5D608D05BF8CEDAF642C67B
-:10EB7000DF7973D9C8AF5B2E315752981FF377D91D
-:10EB8000DC8E67A6191EDC678FC0F710C3E03BDC84
-:10EB90006FD45BB943E8AD9C2A909761F5AD2ED94F
-:10EBA000900F666BEF2A799807ED9B69CF6D257DF5
-:10EBB0007216F50943FDF2C798D1A85F408F5859E6
-:10EBC0007F39A8CB63DD6ED1E574ADA6376A23F437
-:10EBD000C6D072F7EFAF8F22FA140DEFD00C247F5E
-:10EBE000AB304E00E8DFEC1348AF30C947F7FB8786
-:10EBF000829BD95C2ACBCEA1E1674EF92201E5B414
-:10EC0000D927793E8A724F6A28F8EAF52CB6CCC724
-:10EC100050AF7D716C653EFABDD69A3B67EF42BA44
-:10EC200015E2E97E87A2F91DB655EF672746603CDD
-:10EC3000FC7B5BEB26E0FD71AF4CFE92F41205DB32
-:10EC4000D9619F9E44761CDF6F32D9E75F84F6FC62
-:10EC50008B1605CF050E3FABBDDF90ED2478DEB3FC
-:10EC60006705B5330B952E7EDECF08DEEB3212F949
-:10EC7000DF0969B76976E3998DDE3CE857EC1250FD
-:10EC8000FFFC474EDB461BEA0F6D3FC058DB4DB81B
-:10EC9000FF09062C5A7DBCE8CED81E51D0FDCF5EB0
-:10ECA000C9156E875A6EBA2A0BCF43E5D112F49775
-:10ECB000B1CDBED17C05968B7A7B2F5E1E42F1A52D
-:10ECC000E725C0C3331D5AB99AB6F12A98CF1E8BD7
-:10ECD0003E3E18D445389EA8D193BC11FBDF5DA2FF
-:10ECE000B7EFD9E89D4AF3B9DE047BB07C77E646FE
-:10ECF000677ADF7C87E7E46EAC81B59F56BAE27035
-:10ED00001BB7A4EDA354D4DBEBCAF8FD616400F497
-:10ED10008FE8F7882FE06DEFCD2ABA62FFF3D03F7E
-:10ED2000E20AA06899A9EB9003E0B6647FA5CD2C18
-:10ED3000E2FB5DA52ABEDFA5B75BB27736D939CB3A
-:10ED40005E194769947687F1FECC776867B35CC437
-:10ED500078A7436F2EDDA5E0BD99CA06A789EA33DF
-:10ED6000EEFF8ABE3EBDFDE95D6FFE04C73BA374A6
-:10ED7000A55E07B5D785002E51DAE9F5F5FBD55329
-:10ED80005CDECBDCC07FFF70733E6452A507EB07EF
-:10ED90006D7EBAC76637FB4B519F002A0318A7A0A8
-:10EDA000A753DC79FC5DEC88EF91FC15B4B1A41994
-:10EDB000282F574874EE1EB4A98EB1906F817D4AFA
-:10EDC0000D4C69CDB823E3315EA0659F93E47AEDE5
-:10EDD0008A0E5701F295C7C2D0EE6DB9A2331DDF7E
-:10EDE000BFAFBBD752F604D26F68B9EBAE303B6C05
-:10EDF000780E8FABCF4EF097213FDA811F511F372E
-:10EE00009A7D367C37454D1729AEDA0EE56F50797D
-:10EE1000B656EE997E0DEDCB4419E7559F37777ABC
-:10EE200009EA355722FFFB8423AE2A9B0FE501D95F
-:10EE3000222379DD9D53EE43383D23792A91FF9EAD
-:10EE4000713A658CC7025949FA401A914CF15956EA
-:10EE5000EDBE53F638AEE7F57936B9B9FDD0E4B674
-:10EE6000101E5A623B6F2E867631F789B20AFD3743
-:10EE7000DEFB7029C6273E76EF913F637C6B53AA79
-:10EE800044EF0CECAE0979B15E8FC03A77801DB9C2
-:10EE9000BE6A6627EE47D73345417B7DB730D38FB7
-:10EEA000FAB92745623BA07E4C9E315ED559608CF5
-:10EEB00097CAAA30E637E6F8EEC7754DF8436131D8
-:10EEC0008E9322280A3E1D5CD8C9283E3F352F4F1D
-:10EED000C6B8EEB8C28838D8A9C67E12AF32962717
-:10EEE000CF8888DBBAD558EEBADD98CF986BCC7F47
-:10EEF000AED3A38B9F3FE87FE7E1B17B9F64A8A7D8
-:10EF00001BBF8AA778568423DAED3123250F9E8B09
-:10EF1000645B3A67611C1CBB3486ECA583EE18A6C3
-:10EF200040DEBA94913CB526060FE07ED52ACAA5EC
-:10EF30002A69A8E081F7A1DC01FB5594BF91F0CBD1
-:10EF4000CEE6FE416725FF7B7141294476847D55DD
-:10EF5000BC5CE3C1AD63841FB6222CCFE3BD1F7739
-:10EF6000F3F338BA774F477284575819E26D320B72
-:10EF7000E03B94D9F77EA486601EEB95BC4AB4337F
-:10EF8000D6895D348E5AEEF4E1BE3B05E3BC4D18E4
-:10EF9000EFAD521A898FE7DDDC4E52D85C3FE2D1EB
-:10EFA000355BA4F891FA43317578F852AFBDD7A01C
-:10EFB000C7B1E974F9B29BFBE7F67488A217FDE0CC
-:10EFC000B7E7ED407CEBF9565F721BC5F58FABECF4
-:10EFD00042BA6437703B14F400DDCBD6E3C4F4B816
-:10EFE000C2EE1C1EBF763A47BC80BF901E47141667
-:10EFF000074E4777263CBAF0CB78DE933DAE5446B9
-:10F0000039F34BFDFE05E3FDE2F385746E3043F406
-:10F010005EA2F9D3D1AE4BD2C64B4A96BCF4BE3BEE
-:10F02000CC4984FA0F315E3F296FEF4ABC77B507B0
-:10F030000907F9E72E0EE748BA4DEFF0978E4178B1
-:10F0400009A00FB3FAD3B1E06EA5F3C0FAFB58A242
-:10F05000755C7FBA9E68E2F64FCF4285E22C87A2AC
-:10F06000F393EE04EEC74ED922A37D9B91F7500D8A
-:10F07000DD83B98FC9A8EF323A3A6F46BF57243FB4
-:10F08000041C71E3799CDCB7F3C39B4C9C3F589AFA
-:10F0900044788B8C2F8D8C271D9E93A0F929400FCF
-:10F0A000C4E27D00F94A8C13EC59C5E89D809217A3
-:10F0B0005B6EFB77E8EFCB111619E575CE5BBEA74B
-:10F0C0001C30AF2F5FF2E5A09CDE2675D913C2FC81
-:10F0D0009E92C8EF9F45CAEBE139A246AFA0375CCC
-:10F0E000DF3DCD46FA06E20AE6A58E968108876FD7
-:10F0F000DFF4275BCAFFA0DDA2DAFCF8F746DD1DCE
-:10F100007A3E8BECB09CB778BE685BD6465542B869
-:10F110005590BFE860F63CF21749EF727FD1189323
-:10F12000378079F69E9DE2EEDAF7DDBE00E3D5EAA0
-:10F1300053AF53503F176AFB9FF139425478491639
-:10F14000AF0FF926F27B81065FC64A3F9D0DF81B83
-:10F15000F3B885E2EEF2C5F2865CE4874613E1B3CC
-:10F16000DCA42C6D0EDBA735A71697E44CA47D011B
-:10F17000F3C18641E915980FDF614A3E5E8CF49A2F
-:10F18000036C86F22547E506644E550CF385D1A93C
-:10F19000D22B51FDE6546F498E26F7F0DCC7ACB197
-:10F1A000F43389A56C36EA65F8867AD7BC2B869F3E
-:10F1B000F7241BEF479A4C3C5EE4266DDD663CD796
-:10F1C000198FEFBD8921EBD8FEF56FD5EA49366777
-:10F1D000C8148F7EB2378ED2BDCB887360DCDF520D
-:10F1E0005C4E05233F28C285F2F7C8FCDDEE2A1EDF
-:10F1F0000F50BB9A09781650ABDD5351EFE07F8F6B
-:10F200009879BD0ABEAF425B4C05FF0B11FFBA6C8B
-:10F210002C11EBA7B34E8A63641D4CE1F112C67347
-:10F22000A76D03BC03A5FB01A42A13ED5346BF66DB
-:10F23000E77F17AA8AD13BE1F46613EE7F57B380CC
-:10F2400024F4F9E18E642BD44E3F8FDDFDF50719D0
-:10F250002897F3C51DBE37C86E889577A07E8C3180
-:10F26000F2A17E7FAD56A3936DD532E15B2F77ABD4
-:10F27000C729DE3E87F5D4E03E2BA72AD180E70BD5
-:10F280007ED9DE4CE69B10DE6F80BFAB9B27D13B67
-:10F290005D4AAF9BCAB7552B43F43F6C80FED389C0
-:10F2A0009E06EE3F8BCAB787BE48B81140B1ADE7A6
-:10F2B000A38452A5CF6E8D84B37BB5517EFF607F52
-:10F2C000643C39878BDDEC4DBE19E0667F40F4B4B9
-:10F2D00031FC7B3CC67AD373CF25F0F372BD7E2818
-:10F2E000F916AC0FFBDE3605FFBE8FB17E69F1C7A4
-:10F2F00009FCDC5DAFCFE7F7A35E63BD48FC44CEFD
-:10F3000017E695F2E3B0795D69B31ACACB66F79B4D
-:10F3100057CA4FC3E6758DCB58DF57137D5ED7E7CD
-:10F320005B079D975EEFA6A28BAB17B98E5BA65BC2
-:10F3300007803BAFFFD3B28BEBF75F160C5EEFCECF
-:10F34000AAC871542E272CDE2328E7CA99B216DFEB
-:10F350000967CE98A871C1259A1D7316FD14180F60
-:10F3600097E97D1FE55A4F368F4B39FCEC223F9EC3
-:10F37000C32CDF6751F0BC235BF35B83E0598CFC4B
-:10F38000BBC72627603CA0CDAD68FBABCE5C8CE74D
-:10F39000DBD37EE436927BCC68CFC07EAD18F535EA
-:10F3A0008830BA97F126B64B098FA3F092FD572FFC
-:10F3B0007AFE42FBAA9FF07D951EBF1F6E67B14982
-:10F3C0007D76961EBFBD491BE7BF7286D17CC0CE3D
-:10F3D000A7BF7B9B9A27517CF32F6D9D9BF0FED19D
-:10F3E0002F939313703F73589BB76E37EAF71AD277
-:10F3F00066E78D334581D7FF0791B1925A008000AF
-:10F40000000000001F8B080000000000000BDD7DE5
-:10F410000B7C54D599F8B973EFBC9299C99D64F2ED
-:10F42000E211EEE4C5044298608801AD4C12A0A838
-:10F430002C3BC147412D0E893C227921A8A1B2F570
-:10F44000864484F8206840A0A043148A56ED6011D9
-:10F4500001C11DA2A6764B6DECF661A94B47602950
-:10F4600002C2A8BB487F7F2D7BBEEFDC9B99B99978
-:10F470005150B6DDDF9FFEECCDB9E79ED777BEF7E2
-:10F48000F79D33172FD27F93087928892C0C1413FA
-:10F49000FCC7951162CFCFEFE9741232BCD42B8E2A
-:10F4A000A3EFDFC9D111329E9087E983D07AB9509A
-:10F4B000F06FE3E8DF22212BCBE9F7D030979027DC
-:10F4C000C57EBB40EB9F7408A2CC413B09DBED7CC1
-:10F4D0004BA7F3380879EA8EFC1EDE19296FF03944
-:10F4E000B64279B88EF80216E8445C44E8FB9D26E3
-:10F4F000D1DE594A8B42BFB3C64ACB3B7E7F1B67E6
-:10F500002364C40882FDD5B55693635711B2DB104E
-:10F510007EF322CC673DE7DF46FB79ADBB74AA40A2
-:10F52000DBCF3B4988997E5AB7ECA6278FA71132CB
-:10F53000E1B85809EFEB36DBDD3C7DDFD4DF321577
-:10F54000C6212DC45DE0262493AFE4ADB49FCC4723
-:10F55000DE73B7D329AFEB95F6846839BC9573F7A2
-:10F560004850BFB87431C0C7E2912C74BD7361AA12
-:10F57000F8DE3E550FED6E32B83B683F67F4641617
-:10F58000C0F1A20257F539F70EA982D0F9CF0D2CA0
-:10F590009B8BE38A1464D9B46C12711E26494C6D9E
-:10F5A000A3E5CC2462328F23A47C85D8F7008C5F3E
-:10F5B0006F157B288C6D1562DF8F605D2D3922EF12
-:10F5C00086C1FD0807B5FF791EAF81D07147EF30C6
-:10F5D000D0CED83E5EA4FF8D09C496C7EE892D9784
-:10F5E0000663CB57BD135B7E5562F09E681ABAE581
-:10F5F000388577EF012381F92E3A9DE4375278EF71
-:10F60000D31302EB975F32223E542FB278003F4E65
-:10F610009F4ADA6AA4E5838793F0FBBB7F6266DFCB
-:10F62000EB022F43597E3999C0F78BD202E5A974BA
-:10F63000DEAF7FC9DFE92D66CBD243FF2F176DED1B
-:10F6400084FAAB02E5227DBF7B1421FD502FF84BDD
-:10F65000609DBBFFC663BFE1E78DFE1EDAEFE9BD2B
-:10F660003F7E19E075FAF9A1A91C9DF335BA9EAB4E
-:10F670003AA1BECD2AF5D0F7134FBF98E78BDA97A2
-:10F68000453B8C31EB5C2C71B8CE56C1B3E259D8F6
-:10F690009F437AC4A725F3FC7541DA7E0997E39668
-:10F6A000A11F03C5D36228BB33ED145F27DA18DE30
-:10F6B0002E31D3729C7D579FB51B78E2BB2A523EF8
-:10F6C000BAFAC7381FD7C9F711AFF7E9655D12C09D
-:10F6D0007135E7DE46E7BFCF6C2B2129F0CCF10373
-:10F6E000DEC81225BC745CD78F9A002F7EC5BB7B09
-:10F6F00048E2F15C597FDA3CF9AAAFA8A7E33A4B9C
-:10F700000839F751D29D1E3A8F911B62F7BDC81F71
-:10F710005B5EA5C0A79644BD77C27C725766219DEB
-:10F72000109C8FEBE407B739E97C8718490BC0457B
-:10F730003BEE5A651D2FBC40FB716137FC459EF5C1
-:10F740002765D07D51E8EA758ED111FDB77428A5E3
-:10F75000B7451CE32FEAFB459A79A8FD4F94189F03
-:10F760007218DC6B42B8FF4611F6FFD483D39E3C7F
-:10F77000AE1F3C9F130F7A3C93A3DECFDFB0B82FB0
-:10F780009BB66BD8993E8E8F826FC3F36F66DC4E4B
-:10F79000DF9FD921B8810536CCDEFEF844F8EE793A
-:10F7A0003E00F3857A0F5DEF99C0DB36F86EFE669A
-:10F7B000FB385E8AB45FB0618A67B22B02CFCBA5FB
-:10F7C000D3D72A189F5B14D0FB4D401781DF4D1D06
-:10F7D0000A78BA817317D071CA051F0F74672DF3A9
-:10F7E000E8E509844CFAE25FFB86D0FAE603E3CB56
-:10F7F0003B697DA7CE7BD33F01DD3DCDBBB7015D2E
-:10F80000FFF69E0C5FD4FEBC03FB4BF7A5F3D606B8
-:10F81000EC47A6B85140997AAFABB61ACA138B0918
-:10F8200067A4FCD8769278FC16188FBCAF4B25E401
-:10F83000E4FE874A041DF2A3DB814E4E139B1BE8B6
-:10F840006E9FB5E5DF71BC97F438DEA4600A07FC53
-:10F8500077DF739CBB93003C62E9EFE4C915B64ABD
-:10F8600046D7777A510EE88883F6B7F0D931C807C2
-:10F87000D4F7DAFDABF7C7F6A3C58B8F9475016A91
-:10F8800046E397F6BBB4E9B201E8B1A195CA8B286B
-:10F89000BA6938DE652096C1E3103280BF04F09764
-:10F8A000E2259170BD66E41BF41F67A2787B0AFE17
-:10F8B000CA636542C7BF9BC3A59145A30285C0E744
-:10F8C0003841ACEAC88EF05752E1473E7F86FED9F8
-:10F8D000E906BE103802F40EB2741BC817317876F0
-:10F8E00013D4CB233CC08F860092D227F96932F221
-:10F8F000DF3352683BB67F718C5BA6AFCF01BD583A
-:10F90000B09D2D358A3FB505DEB48568F9F4CEB4D7
-:10F910002ADE0678FB4B1BACF35420ADCA604BCCFF
-:10F9200037B47C93CE0CE1FB21FC49F14E747A9202
-:10F930009D00EF0E2A74419EA5B594B6C4D937B583
-:10F940009DC3D0522A01FFF8BEC5DDC3E0463CB4DA
-:10F95000FCE93B693DB0EFD7E8742817E672AC7F4D
-:10F96000B57D913311BF9666071D117EFD84228FF0
-:10F97000557EFD8495C1E372F9B5F639ADB328051E
-:10F98000E0F7299152403EA59AEA9E013D43AD7FA2
-:10F9900022811E50EA64FCE99D838529214BA4FD48
-:10F9A0009FF3BC6500B7ACAA7E0F4FE79F7503714C
-:10F9B000B7D3651DE3DDF789147FEE2254BEC3B3D0
-:10F9C000CC67003E483AD211BE84B8A7C2FE2F9839
-:10F9D0004EF1A59495411ED77B0DEE4EAA37D40962
-:10F9E0000C3FEA7670FE760AB2BB1E8DDDBFF9DDF4
-:10F9F000C6081EC3FF6D8EAAA7E3D40BFE95206731
-:10FA000087514D29AD82E2EF73B1DF2F22419C5720
-:10FA1000C38B178DF1F0E2BF15BCF8739E6706AC7F
-:10FA20008F9B69C2F92C7989437DC06108A0FE13C0
-:10FA30005E4CE5079D2FF92DC39BFFE4BDB8EEE6B4
-:10FA400065733D77D17D38D75AE7B98B56216B80E6
-:10FA5000FD0E307D6FD1E4401FF24122BE727B1655
-:10FA6000F4E74578501889DB101E028EF7DFBF657A
-:10FA7000F8749BA2375EA39B89EB0AD713B187F278
-:10FA8000B9892F1EC432FDD772FB4478B07EE6B729
-:10FA90001011E0BA80C8064269ED01A713F7AF9EC6
-:10FAA000F41B185DFBDB3368BB26AA6F025F8BA3D8
-:10FAB0003F7C3F1A1F0F6BF0F1F015C3C709884F49
-:10FAC0009F1137E2D36D1A7C3C9C001FDB07F0B11D
-:10FAD0001CF1596D4FF550624E1DFC3DE08B276ABD
-:10FAE0009F176E8E2D93E7A2CAB98017B41C852F7D
-:10FAF0004DBB2E1A3D71F064DD80BCF717D58C89A3
-:10FB0000E6136D38BF230A1EADBB657E36F0E935BE
-:10FB100060700C513AA800F946FFC27D234113EDF5
-:10FB20003FE9AA8132D697AF6065FFD65F7B375C2D
-:10FB30004BC87ABD2F5BA4F0AAE3BD7D3A902FF9A4
-:10FB4000BEE79C6057E83C3902EEABA7D03B0636D7
-:10FB500094E1E353E35A8A5AE2C04F9DFF7A2E1094
-:10FB6000D4019FDECBF4376B59581F2D5FDF703205
-:10FB70003994D21B427C0DBFCA11B02B36726BB3C5
-:10FB800001CF36664B5C3B5D53D9AEB64AC45FCA03
-:10FB9000EB0B28DE35EEFAB06F282D974DEB07F40E
-:10FBA000A3EBF62E7E1BF8E5F824669724B76CD5F8
-:10FBB000D1FE32EF748D6BA7F8F6A653C27192AEE8
-:10FBC000EA3A08FD84174B620FED276B85ECBCA762
-:10FBD00018C66F6943BCAF21F83EFD7BCBDBE0BBB1
-:10FBE000478690541EBE236D1C7CB7329DC3FD58C2
-:10FBF0003997CC7AA518A84844BD7ED82C916B9B28
-:10FC000000E5964AA41749B4FF321BA9AC2385DA54
-:10FC10002DEB6C04F975BA8EBFB3863ED78D63E5C4
-:10FC2000D4E59CA70789772DCE2FD348A671A9ECE0
-:10FC3000BDBF18598E6727D6FB71BF33AB5B4A61D6
-:10FC40001E9979ECE930F874F974FC43EFE9FD2B67
-:10FC5000E83A0F29F8B2746B5566B45C3B74C6245D
-:10FC6000E8A8DE7C284BB5178216B0179696566723
-:10FC700002F3C8CD9F9602FBEAC889AD3FA7F7A45F
-:10FC80005C05F2FB3D9EC0FEFD97C59302F4798DA5
-:10FC900081CD5FBBEF9F29FBD97C8123FE28BA6C05
-:10FCA0009E751EEDB0E60B42CCFB330F9A08A810F0
-:10FCB000037AC5C2DEA9F05D23E95F0978D8184848
-:10FCC00026FE28BAB82629FEB82A3D345FE0891CF2
-:10FCD000775C43ECFB0B69444E8BF75D46EC7BBADB
-:10FCE0008E98F29ECF07D601EF4945C8E6A576F873
-:10FCF00074D05368F99C5F27EBC7029B63FCEBACA5
-:10FD000018B201FFA2FA480BECCB592984FAC63984
-:10FD1000CA9AA01EE4780DECAF10B6CDB446C65119
-:10FD2000EBA17DF43E9E9D652041DC9F30CE03E03B
-:10FD3000278F2464D3FE4F0C12E869FB0F22FC547A
-:10FD40007C8986A31CC56F32DAFB833A4A5725B9F2
-:10FD5000196B8B8BE896F5AA7C216BAD87F2810C31
-:10FD60005E17C32792CB06F806B2A9753A5EE13357
-:10FD7000D96B275F1B5D66DF47DA0FA981FAB26294
-:10FD8000D6BE2277E87B2B40F6922E9C1F5D470E55
-:10FD9000C06FA06CD2942DB43C26AA2C6AEA1D9A9E
-:10FDA000FA2C4D7918FBFE8C359803FE81EADC11A4
-:10FDB0003502A5D333D9C1391C2D3FDAEEAC994CAD
-:10FDC000E9B4B18CE9174DFB39374722F06B723338
-:10FDD000BDDEE20E19EA8A010EFD7DC0571AF670EB
-:10FDE0002247E9C112D819C432B493A2DA05386C9B
-:10FDF000D710F810DB25ECDFA5433AEF741D65DF63
-:10FE000005FE827ACCC31D8BBDC0D8FAF48C6F512D
-:10FE100029E7194A1B36EDA9213E4B84BF9ECDF63A
-:10FE2000BC89FCF50027027D0EE029F46B89D085A2
-:10FE3000FAFD9FC6ECFF1DA849C94B3F6913E8F7BF
-:10FE4000FFD1F897F1A077FF499123EB397F118C0F
-:10FE5000BB89F88A408E7FBFB1E0A08E7E77441FB9
-:10FE6000DA02BCB73DF76A84DF116B683847F59258
-:10FE70008772AB6A040ABF23E9A12D00CFFFC8AD8A
-:10FE800066E5E1A1E13A5A5EDDD3C4CA05A12D5071
-:10FE90007EA567362B8F090DE769FB3CF93684FF99
-:10FEA00036313E5D2FCB65FAAC3ABF87CA3C4B7307
-:10FEB000418F6E60F267CEDD876703BF9DA323226B
-:10FEC000A17C7ADB99632F6DA3F0D8D69A4C7A186F
-:10FED0003A7A056A6F6432D4A772A20BF97AD8C94C
-:10FEE000F41BCAED42E0D74B1E6F923A9D917D51B3
-:10FEF000C7CF1CD5B213FACF9C538C72C4ECF41C40
-:10FF000081F1D5E7F451EC79245764FC9BD779F063
-:10FF1000FB07AC7EF87E8D99AD8BD20FEEB345D941
-:10FF20009735CABAD6E4323D63BA73CA91DCF1A000
-:10FF30009F28F6CEAA40FA283AAF6E8E04C06EA46F
-:10FF40007A8A6C063E5C9F84F64C37CC1DEAD766F5
-:10FF5000FB653ACEED1CF1027F51F949B7DD939D67
-:10FF60001A65377697D2B225E227E8AEF1642739D1
-:10FF7000E099A1031B4AE54FDD4ED64E954F99ED12
-:10FF80006C9CCC35453DB09E6481A0BC9B37ABB02A
-:10FF9000A70DF58399386FE2F16473B4BFE3F5B947
-:10FFA0003A80A3BA5FDBCB3C2FE0BA78E6F750F794
-:10FFB0004D85EF915CE6F7A8E3A97E41F1EEF17C77
-:10FFC0001FF647F58D1214EC8ABE710490767C04FE
-:10FFD000CE44088D87F7FF1FC2AB1FF0E9DBC2AB31
-:10FFE000B195F211DD25F011058EEBB9A03E93F12C
-:10FFF00011F44BC07B9047CF3B7DC773A3E861CE24
-:020000023000CC
-:10000000038DA867AAF34ABEFFB569DF234087A71F
-:1000100090EEE6FC2019FD085A3D50B503557D359C
-:10002000911DF8A9420F6ED5EFADCC23B938F4D2AB
-:1000300063145EA9C42A021F3D62088D71D3F6477E
-:1000400074BE675F83790FE145CA4306F5F7421E28
-:100050008FE39B553C2161DB2847044F56533C31CD
-:1000600041FB1A03DA25DD76FFC6F98027B70C734A
-:10007000CB12CA61A467B93519EBAFD11D25E0C712
-:100080000F4F1045D033295E617DF7EC42BFCCFCA9
-:1000900031B219FDD349FE1EC0BB520A00E86FF60B
-:1000A00028AC077F08FA91669BD87883F18AF92DEE
-:1000B000461256EF54F0B63E17F136A39D303F90EE
-:1000C000E029A989D217BE9FC7F022B92CF4EA1FF4
-:1000D00040FF7CD4EC2E20CC6405FF12E9CAC4FE9C
-:1000E00028BE8CC81BCFE438F47BD7E3D6AD8CEFA9
-:1000F000B9CB01CE0F5BBBC832F40FEA71FE9BCDCA
-:1001000041D4C37526C90E7EF8393C595F08FDB548
-:10011000EB45C0132DBC2BF312F91F42F746FB8BA6
-:10012000E71865630ED43F6846BB40B5FBE6A430D4
-:10013000BA52ED3ED5CFA11D47B5FBEED4D873031F
-:10014000F59D7F2DA8A5FDFD59C13377EF8582B9B7
-:1001500016B66EF03FD5C25F74DCDAE5E60FC1CFAC
-:100160005C2BEB83461BF091299E50949D4636B044
-:1001700075F87EA5F7039C5A05B27E3BEC8FCCD672
-:100180004FEDD8FAE8756D32B075C93FB0C6AC6BAB
-:10019000938DC591BEFDBA3E1A1FBBAE93E3957514
-:1001A0001153066DA7C8B93B5BAD1F7225F409EB6F
-:1001B000A24FB29CAECB1559D7B23CC64FE7287CB4
-:1001C0006C90DCCD637A7C1CBBFDFFC67ABB9EF2D3
-:1001D000C45BAF769D7FCEF3FC202F1DE9262896C9
-:1001E00045F0DAB791AEAB0CF635DDDF86FBCAF031
-:1001F00093109B1BF8D89279745DF06CCB447FE12F
-:100200001CA3B407FCE6E44729CA3A09F281251B7E
-:1002100087235D52BC6574FB14F3BF2C317BD17F07
-:10022000B364B1E8964558FF2B680787297F45BD21
-:10023000A43596AF7F3D1CCC39B5C5D17030E5CC27
-:100240002D8EB3EFB211F139D1BEFF990FDFCBE59F
-:1002500025F69790E5B17E0AF0E70E94F9C165ADF9
-:10026000DF8390BF1963BF9713E051E8FBD1787427
-:1002700044AFE0D13233CA1F158F8E5815BF900698
-:100280008F08D5A2818ED5756BE13807E018C72F8E
-:1002900044F1A900E07844B1CF283E15001C553A3E
-:1002A000B8B395F1032DDCFE9498AF7DBB7568F073
-:1002B000F8DBAE43AD4FB40E55BFDDC02DDE08F800
-:1002C000B9219B88EDA80787C6809DE430F88B6034
-:1002D0005E9B0C947E91AF303FE1678762FDCEDA82
-:1002E000F95CB8647EC1FA4DC42712E1E5E5FAF97C
-:1002F0006A35703BAAC06910BEE733B9A9F5F3357A
-:10030000DBC24F83DED49CC4E4F7D90356A47392B6
-:100310001F9A03F6C2B97D4602F2A0890B15C27777
-:100320006739CF5CFCAE2D590239AEFA738FED669A
-:10033000FE5C99507B9D961B7CCC1FDD2CFF7225AB
-:10034000C0E5629ED002F672F39E587F20DD0F1B3F
-:10035000ECCF591DE987EF9B787F3D98D8EB0D4C8A
-:100360007F59AF23018067C48F70B410ED9A6C91F0
-:1003700080FFAA49F761E13D517E8726A5BE298706
-:10038000F9D3203F01E32E309473305C9A1E3DFD7B
-:1003900025C4579B7669E93B96FE1B2265EE220732
-:1003A000FD45D53B23F48FFE03C08BC9C45FC081DC
-:1003B0001F909593A7F5FB21CFA159F13FA7F78691
-:1003C000A6827E632D0B10E0FBCD2799DD3471FFF3
-:1003D000D637C13F689FD63F1C54A866251EA5B5D9
-:1003E000D726EC5FCB833F4BB5B7A2FC67453363A1
-:1003F000FCA72BB01DF8E360BC10BC82B881C0F430
-:10040000F2F58A5E4EF577E4F3F3BA46A2FE0EFAF1
-:1004100035E849AA3F0FF426D09F77E757CDC8A704
-:10042000EB9C5D50757DFE78361EFA29C04934215B
-:1004300031DEAAF051BF03BFDE57C78514FD8FB070
-:1004400078D03DBF48FF4ABA5C949F307E7F7BB432
-:10045000FF7D9FC6FFBEEFCAC5833281AEEEE1A429
-:100460004CA0AB891AF9B62F811DB0247F201E94B1
-:100470000974ADB63FC1FB30FEA1C61DEA21CE8294
-:100480007226887189BB5B88BB13F3407C2BA1DC8F
-:10049000B890889D14DF1B26FB58FCA38588374E37
-:1004A000607156298ADE208E195D263B6839460E1A
-:1004B000F6631CA489F6B0C90D7E9AD8EF9B89BF5C
-:1004C0005A003CDE73D118D34F37DBD73B15FCDE27
-:1004D0006866F18389CBB7F224CA8F9332CEE37C6E
-:1004E00008E8F7177AF45FFFA7828F2A3CFE9C5733
-:1004F0007513E05512F8D5E0BB878CA8C71CD791BF
-:100500008580DF6BECE4CE99F479F641E2C9D7033C
-:100510001E8B39D1FE44F5D9B9CFBC10E8E219855C
-:10052000EFA9EF2BA051BA120F40FD3F19F3472856
-:10053000FB2F01BA29CF55ED0E520271880F157E9F
-:10054000DA74ABC507FD85748CAFBF98CFE4C08B60
-:10055000F906DC3FB53CE08F53E8828E83FD255DD4
-:100560004562E2D73F53F055F58713254EB7BE3E9F
-:1005700089D92903F4A943FE9B5CEC35F890FF551B
-:1005800021FF0D7F6491002ED34E37D4C33A3E9D98
-:10059000954420DFE62E254EFA6EBE1DFB55E38BFB
-:1005A000FF40BA8889935E2A5DFC3E421731715242
-:1005B0000AD764900BFB74CCAEDD47110BFD8201B2
-:1005C00025EE2E100FC8AD7DBB46A21D3357F15747
-:1005D00053BE81F66B98CA37B6DFBE8DF3E0BB40E1
-:1005E00001E6237CA8F73FBF1DF49903CC4E53F7D7
-:1005F00063DFBEA17EE03B134F7F9103F0DF77F214
-:1006000085A190E7B14F89AB37188285E84F31302B
-:10061000F9DE600B1602FC5E57F0A6218996E9FB15
-:10062000BC745F18F05ACD8B8176765C8F64037F43
-:10063000CE31C54E3F4AED769817A5967E88F7D302
-:10064000FDCE8672787526D3A7E9BC002F8E1D18C3
-:1006500083EB5BAF67782CEFE5D0FF73541F3ED17F
-:100660004ABF3F9A7D156913413E5FD8DE07FD3FC3
-:10067000CD13A30879479F9FDF43BF3F378417C13E
-:100680002F59A7F34ECD067EB19BF943B4FB00F280
-:100690003A3AAE7B968473D06FBA303700F87376EF
-:1006A0007F11E6D3118748645A6EDECBEC476D7E2E
-:1006B000C4717D2CFE6BFB857581FFB219FE067D32
-:1006C00024BA7D9CFEBEAE7C561F2A5C46E13145B5
-:1006D000F24905517E80E637B2518E1C7BEC73DC0B
-:1006E0004FD2C5E2E8C7F59E39303FFBE4A0A13602
-:1006F0000A1FAF2E50FC5046A65F50FE6B88E637AF
-:100700006A7D7915899B9F525EC0E8DCDACFE4F4FC
-:10071000E07A86E7F7926779E0175743320FED6F7B
-:10072000849267732FF9ECA011F4A94029E6F18CAB
-:10073000581E443E40E78BF8797C630AF247F22862
-:10074000C3D7F93F3222FF984FE507F367B0BC42A9
-:10075000F228CB1F3AF19013F1B97C45B01CE9C1E6
-:100760004EDCA047BDD6F1A1CCD3FAB93BB852C8F4
-:100770009B9CDBE1443BF0EE5D4EDCDF890A5FAF22
-:10078000337A304F923CC3E29C773D518FE334265D
-:10079000133B8FFAB5DF007AC4C21D1CC6C32706FF
-:1007A00018FF6F108207414FD7E6FD107F6CBE0126
-:1007B000C82312A5C783FC211ABB2B76DFE54BD2D9
-:1007C00017B472667141427DE1EFA4C77F337D614A
-:1007D0005981AAC7C7EA0B60FF17303C64726D27C6
-:1007E000C7F89CA22F3482BE00BAB022A75539BFE9
-:1007F0004091F32778A667CC37AEC5E79A0296E713
-:1008000070370929790E6103E87F89F0788D322FDE
-:10081000158FBB008FC747F0B8E164B0CF887E0763
-:10082000F76EC8D368584E82566AB7CF175A509E93
-:100830000D118988F9AFD53E9C57E6126AAF51BCBD
-:100840009C0FB1FC7197AFC70CD25B34FA8A3A6F38
-:1008500015AFB5FAF5C4E57E1EE28BBE9104DFABA1
-:100860004F91044A61BE352666DFD4982C411EFCA8
-:100870000F93F567A2EDCF1AC1F322E33BC3EC2738
-:1008800046234B23D0EF74A7E737A3D2237A7B729A
-:100890005978E563B43F3D29D1015F57C7373B2BFA
-:1008A0003F298638AFD08FF62BC962F92C478A19B9
-:1008B0005C93E93E6CA570D50B32C24F6F12ED6DA3
-:1008C00076D8FF7E8CD385D309FA6DD5FDDA622503
-:1008D00032E4151F2966787FA458C4276D8FF9006C
-:1008E0007A176D4FFBAFDA67463E727EAFD50FFACF
-:1008F00004959323ECB43EE34FD40EA4E5B3FBACD4
-:10090000A8579D55E49B43F5DF9395B8FFEF2A78F0
-:100910002393AAA160EF11EE86A174EE44B5431AA9
-:10092000ED89E2DA4ABDB3FF5686BF46D46FCEDB0F
-:1009300043F74199CE0773E0FA14BC6ADE555DFABD
-:1009400000C81BAFC5CDA0EE2B057DCDC82FBDD5F2
-:1009500044813D955F1E5E06783FDC221A6993C98B
-:10096000233EF8FD6C5AFE68979E18017FB6DD9411
-:100970001284668227CB3B66F07CEAFDFAA3A128AD
-:10098000BEB368476CB931105B6E26C2D15094BCBF
-:100990006AFDA0FED76F45E1DBB902AB03F08048EA
-:1009A000C47D91D2D3F107F7906320BBF93B52800D
-:1009B0009FDF45D9563C7AFFFCC185BF7E8B7E27E1
-:1009C00018AA3E2F40FD5232007DD5523D279E9DF4
-:1009D000BF4DE16B4663CBC9AD143EC6D78DEE3635
-:1009E000DAAAB7C0470AD3C13E0EF7C1BE1A479C68
-:1009F0002981F846D5882F30BFE4FCBF1037C0E905
-:100A0000BCB912F1E9FC46B3047E80EE1C0BF3CBBB
-:100A1000BFC1F9396617CE184FEDE9853815E0BB2F
-:100A2000E1951B41AE4C308A2B445CAE4987FB4DAF
-:100A3000AD63FAEC36C82BC1CFDE4D0DF43637D896
-:100A4000D1FD362086A98512CB9FE05F3498E89FC0
-:100A5000CE0E4F511BFD6E91378940DEACF0A5E004
-:100A6000053C7B18BA8AB22B8715323ED3680A1927
-:100A70002AE977CD5F2C9D96AE8BC47D8C7A9F67DB
-:100A8000289DB77E4F6970287DB5A0B51AED672AFD
-:100A90001F185F3CC0F8E2826595F89E9B390DD720
-:100AA0007B82AE17E0F2E64623AEF7C4700BFA3352
-:100AB0004E6CE1B0BC403460DE2DD5A7D22A1DF0CB
-:100AC0005E2F1AC96078346F7878E5465AFF6E3623
-:100AD0004F388AFF7FD9FC738C4FFD85B0F1E55DFF
-:100AE0003CEA697F11C3E54180A7D4628BB6D71772
-:100AF0006CE1BDC02F176CB9F7DD0900B799B79548
-:100B0000013C26D99766489648BDAA9F0AA915DBDD
-:100B1000812E277D59DD3F09F4C42D946EE8BC0574
-:100B20001DF181BDF4D696EFA27DB0A026C90EEBD3
-:100B300093366F9B0AF2F82F354374B8AE9738227C
-:100B4000023CECAD19F07E012778E3E1D5E1021E0D
-:100B5000F1AA7284C50DF271C1EF78C4174A67B764
-:100B6000425CA9718B1EED8FB7661EFEFD6C47843B
-:100B7000CEB8991B664C84EF7FACC7EF07F4BFCDAE
-:100B80001F7F007E17F84735119043083F2DDD1970
-:100B9000472C2F847969E96FC18A964296EF717963
-:100BA000744836333AF41572C8A7BF011D2E2CBC09
-:100BB0000C3A24C35263F48EC17C4F46BC55E3E526
-:100BC0002637F16CB3607E9487A3FC7A6DA180F523
-:100BD0006B0B999D29FCF59E1DBFA2704A2BF4FD5D
-:100BE000A010E42BF194827C96C26215B8E62D8A9F
-:100BF0009E4B36B3F318600FC1FEAF4F27DB3BA30C
-:100C0000FC5F8F417FE9C817DAA19FB37FFCA20F79
-:100C1000F6AB29E74C09D801CD17FE0BF36C2CFB82
-:100C2000597E96C51DC6BC35BDC38BF8A8F2FD66BE
-:100C3000379343DA755D28D4333EED08633F635C38
-:100C40008C3ED5F8F4A6D6248C136E72F8CDCC8FDA
-:100C500045F553DAFFF4321EF98CA9AC9D801C23B4
-:100C6000153CC6F7267DF16B02F1D077AFAD7683E8
-:100C70001E6C297B5348837556E895FA9FAECAA52A
-:100C8000F5BFBE760ADA73F764F112E853D3CBF2FC
-:100C900064949F1E96273FE98B14A4C319F5335023
-:100CA0000F56E7EB2526C942F1642625D6E8F30462
-:100CB00033AE354B9628FCFAB48B9BC6EC0029E585
-:100CC000E631CCEF162866F23C1A0EF7641970FC78
-:100CD000D905952F01BE4CBA8EEDC3A9978CFE1590
-:100CE00074DC53E6F8FADDFE42E647C815AE47BEAF
-:100CF000B4F42523E66B9CE6E27F7FF72A1EF3CC53
-:100D0000EA5771C44FC73BF5FC6B39C0D73FDAF6E1
-:100D10005A4E6DD47C12B5FF6361227F76F0AE68C7
-:100D2000FFC074038B139171C6187FFF749B721EF2
-:100D3000E612E35FFF9430EEF38B6130DF5F0DC4AA
-:100D40007DDE19161DFF1A8863BA59DC471BBFCC1C
-:100D5000AFF83765BEECFC41ABA0CCD76D6471AC8D
-:100D6000792C4F62C98134C4BBE986F0E318DF7C7B
-:100D70008317953897C784EDB3587D8275118F27F7
-:100D8000DF518EFE319C0FB7870B5A6DDF627D8479
-:100D9000C5B5B4EBABDDCFC78DD336BB585E48725B
-:100DA0007118EDC0A3EF3C0B991803F86EDEEFD479
-:100DB000459F5B19D06715FCBE09F09BAECFBC8A7E
-:100DC0009513E175227EF5A822B755FC3EBA2A2F6D
-:100DD00005F0ED215353A88FC2CFC3A710F3105ACB
-:100DE00056F241E40FACC88778052E4491835B3EF0
-:100DF000B0A27DD6AE6F7906CED9C96D02D946DFD5
-:100E00003B929AFC6DB42CE9AD9847777FD28CADBC
-:100E1000608786A882CBD1F2E74947B6829E404CD4
-:100E200029444FC791AB94F60693D84EF58BA79201
-:100E30006DC85F5AEF2228BF334990E32840DC2376
-:100E400073991F7CD16E0EF3E729C583DEE7CE8B45
-:100E5000AF8F168C64FCFB8F905045D7EBAE8EFFA6
-:100E60009D7BA4EAF7137CA128BBF461CE2D29F960
-:100E7000E404F265F5A47F36F265AAC7FF9ACA8337
-:100E8000A1FC2BE8FF3EF6A0EF9978E792D4E75D4E
-:100E9000D5F1FD0A1394715D5D9C5F6F43FAD56DCA
-:100EA0008DA15F25AE6BCD70530903F17C16B7CDD4
-:100EB00027EAF9940D10171952C1E668F38408E87F
-:100EC00017595DD7135F1AD0D3C44C906F4BE6C54A
-:100ED000DAB959B5ABB2D10F597BDF0C90DF1BF4F7
-:100EE00096555C0A3C63FD871B34FEC3AFE30B5988
-:100EF00009E9664216F8633644E2C1883FED73455E
-:100F00003FCFE12A48749E4346BBD4E7033DA8D2B5
-:100F1000E4EE710FA61F52E1CE8275BDA8EE9B4292
-:100F2000CFCD0A6A72FB39B44B07F343059E8DC3DC
-:100F3000109EE6AEFBD16E4A2E657EF7E4FA5A1F8C
-:100F4000F09F64CA7FC08E33185A38DCFF89CC6E9C
-:100F50005BC2B1F2924A5194E9F7069B923F7D033E
-:100F6000ADB7039C7CBE68BFC335BA7B2AA3F3B47C
-:100F70004542DB031F9EC5C69B6E5ACEF2C47D540C
-:100F800047CA8EC0B14A81637E45123B6771AF0983
-:100F9000FD719BCD5D385F9DC4ECECDA4E33F2BB46
-:100FA000A1BC0BE352BD7A861FB2D584F4EAEE7D74
-:100FB0001FF305875E9D25F1CE28FC59CAEA55BC72
-:100FC000209A3C138341EA037F239D881BF2949669
-:100FD00070525F15AE4B0CCB6E58B7C2974B9298C0
-:100FE0001CA1E66616832B8B3B6AF68BE20D8B0306
-:100FF0008CB1303F17F149A87769D63B186FF6BA24
-:1010000080DFF60EE0CD1E573C7EBBC62EF5F544C4
-:10101000E30B9156821FF8111D0977C6C31F77ACE9
-:101020009DAFCD9BD4DAFB4DADD55EC5FE904DB8DE
-:101030009F06B43F9A96557A99FDE16A037F59F36A
-:10104000722AA9689BEAFD9C09FA6B9E6543FBBB6B
-:1010500079CF4ECCA7689A46DC308D5AC59FADAE8D
-:10106000F3A89EC549A9CC0A403E47B73DF4349C3D
-:1010700083EDAE57F3BA589E93BC8753F2BAD43C73
-:10108000C0F011F0D7767312FA6D07CED3D2FD6798
-:10109000F95C979717682DF63AC112FF69C17FFC7A
-:1010A0002629FD32F2AAE582755F9D579D742BD4E7
-:1010B0009B602F947A4003AA2FAB658F59827CAE38
-:1010C00048BD40ED4ED31E8EB597D7DC3245C07378
-:1010D000704AF9F327E1BCEB1A3389192F7A7E8223
-:1010E000A67F302D2D92FAFD1F664EC9C73C48657C
-:1010F000FE154F7A86D1FEF4B1FD21CA28EDA1A0DC
-:101100008EF7C2E863DD8F0E8BE8ED548FFF6CE441
-:10111000F888FEFEF0E1E95D63E958C9E26778EE20
-:1011200050D5C39B1D2CCF5A8BE77F53E414B58752
-:10113000A7826AFDF0ACC55EE877200F72FF5C0FF6
-:10114000D8C16A1E64F3722F9E3FA47ABFCE057980
-:10115000D57F3C73E220013BF314FA039A2F08CCAD
-:101160004F4EED078EE28B69FF5AC41FB243EF0763
-:10117000D74EB75D26808FDD07B8F1805F84B4E479
-:10118000DC42617F9BCB9384FD25C83FC873313F10
-:1011900077B3AB6A6321C0FA398E803EDEE9FA1478
-:1011A000ED8AA6BD53C6479F97ADDFB38E9DBBDCCE
-:1011B000A18FBBEE3C17CB776CDAFB2AC67B4EF9CE
-:1011C00039A4B985827F35D89B0B17EAC0B2226556
-:1011D000FEB998374D661908CCDFACD821CD3B6EEF
-:1011E00092E1FC6E33FD8F9200D9E49D8FFAF6A652
-:1011F00059260BE40934BB6A1723BF13933C60CA1A
-:1012000069E739900FB92C09F3AA3AF7E8A7819D4D
-:10121000544EE9E26716E0ABEF39B702FF4C1BC74B
-:10122000B78B90771A5FFF2E1AC5E45007E795FF3A
-:10123000B90CE338243ABF7DC41E667F4D74196231
-:10124000FD932E66175E2BF75703AEBD218492C126
-:101250001E6E269E4FC0EF45BC1609E3582480FE43
-:1012600040C78312DA4D2647E891B1507FAD8076B2
-:1012700093EA4738BB3713F5B1975DBEEFC23E9690
-:10128000F3A127FF19E0F688A0C4C3185FC9B9C944
-:10129000320EEC2BBD83E93366AACFC0B9A1EB5661
-:1012A0001FFF6535F0568717F50842851CDCEF50A7
-:1012B0006DE2583C48A33713D13D19DA4F55FCD2A3
-:1012C0000574B74E9810353B2EA6813FC32103BC51
-:1012D000DFA10B48A3F55388A783ED0BDBBFF50611
-:1012E000A6AFAFD799505F57F5E164473FDA898DD4
-:1012F000010EC76974BD82E7471629E71406CE0BB5
-:1013000008213C3F51EB4A56E2B01D0C3F493FFAE1
-:10131000C3C88B6C1FA8E689E72A54B8ABE70CD486
-:10132000FE0C4A7CB751F1E75280317A74A9F1DDA5
-:1013300015CA533D07C2C62582541EED775C5F4334
-:10134000483FCE4BB2C17C1FC9F0DEE7A2DF1FA52C
-:10135000780C78767455B29F708047FD1E88D3C88C
-:10136000A52CFEA2C5A7475C9C72CE2C3C15F3F0C1
-:10137000F6263867B627F69C19E50F8BDFA6E394AF
-:10138000951D76037EAFB12BEDAF2778BE407BCEA7
-:10139000AC4BD987FF73E7CCDC9CA7873EB7BAEC90
-:1013A000B1E7CCDC6CBFD43C19EDF9B2B3D94181C3
-:1013B0009D07093DBD0DE5A511EDC2D73FEEEB0040
-:1013C0003FF3B952831BCED564DCF64E07E62B7192
-:1013D000420BC44FB5FAC0EF9CD53F01FA5977CB09
-:1013E0006E37E68F6BF481447E008CED46F9890EF2
-:1013F000B8AEAC1FC0DCF5B90DF0ED34177E1CF2B1
-:101400009AE5037CDCBCE60F5C89E2629E59D1FA66
-:1014100069879AFF674F8AC987ED4890FF9748EF21
-:101420001712E6FD5D8FFA5BC740DEDF34557F8B18
-:10143000CD6B1693BED25E56C79F1672C6E4117C62
-:1014400072C9EB54EC9804EB4B64B75D6E5E841686
-:101450000E1D09E4E85F5D03F13F4D5E8447843C67
-:10146000820EC823A04F812332FACF760EE44504C2
-:10147000D15FFCEA48F47B1913E645B0FC3EE1C0BD
-:101480004809BE7B58EFF5803D23EFD42B72C0FF97
-:101490003CF84D3A0E64A39F8DB84225C01F05FB52
-:1014A000D42CD0AB3A14FC6CB8F4BC88B4A2387914
-:1014B000115BFDE31ECF65F6737F32D5CBB61226E6
-:1014C000A7E4FDCCAF49E78D7EBDF063C3515FE576
-:1014D000669A701DC7DE30F618510F77639E436D14
-:1014E000162F827CE9AE293F01F2EB18555C818E04
-:1014F000EBEE5E8EF66BA2FDA95B151B7756DF5FE8
-:10150000EA3E8D2B62FB7414EC7B14B432FA8B1719
-:10151000AEE20E62FEB626EE5D56441439119BC74C
-:1015200070DE5C89F1D8FB9EA8C138EC7CD282CFFA
-:1015300085A44B89CBB2788BB44A403921EDE0FCCD
-:10154000929391890E6D7B5187F7F550F1B609445E
-:10155000A24CA9E66AFA9AD371A0A74A1DB49C4985
-:10156000D7B55A90B3E8775BDF4F46FFEBC30E4920
-:101570003957C3EC2FF9510EF53FDA2FDACF720746
-:10158000C51BDACFCD452C2ED050C4FCC91445FC68
-:10159000381FE5D9A1E47DA8E3B5115D109E3A8E10
-:1015A0003D1F168569F1F43BB5BF0E7D8B09E22D19
-:1015B000E1E13A8C679E377866613C30B59080BD3A
-:1015C000D8616D59358DD5230F3D6F0E7BB1FE3B34
-:1015D00002331488940AF3BD41D90FEDBECEEB8AD5
-:1015E0002D6BF313B4F77ED411DFC8ECBCC1F760E8
-:1015F000DC50C4E4E1F94EA7B22F6E8C9777E8A5D2
-:10160000DF38413EAE16500EB70D6370D30D67CF75
-:101610005CFBE4592887ED543FC5F9B2F9E77EC772
-:10162000C101FD75D8197E7DDB796BE7BBB4A810CD
-:10163000F7AD038C063A5EC76ACECFE0C5E67DA95A
-:10164000FEEA278AAEAC9C3AC6B9B70701CF2CFE9A
-:101650001F81DFAFAECD28023F3BCD29F4BF9A47B3
-:101660007EB669612A968FAE2A403FD000DD9E5C2F
-:10167000B918EE33B9D47C8AE714BC7857E387AB4A
-:10168000ADE0DE837EB47007841254F9439B56DFCD
-:10169000543C15F863938E4899A00FACD2E4B3681C
-:1016A000E8798AE47BA508EC0F437F1FE353A1424E
-:1016B00001F56FB31BE0B64E776CE7CF015F769A0A
-:1016C000313FB26979783BF82B3325DF5E68776666
-:1016D000D9E1A99C84DDA19E74EEC048BC1FA7B6C9
-:1016E00043738FC7A3B1793464552ACBFBE88E7D51
-:1016F0000FF737C4B41B945FC3F4D6F5065F11D857
-:101700001793AE6379891FD7EB08E0C5C766863F9C
-:10171000F2635645CEB80BA3F5DADF6BF1E3313354
-:10172000E2479D72EE4DBB1F8D801F74DF1A14FCC3
-:10173000F8F8D5AB0B013FCEECBCBA10F063BDBEE0
-:10174000CB03F4B53BDF7718E0717C8AB74FC7F85D
-:1017500052E1E5E0ED4757186F2F55BF328D4A141F
-:101760006F91EE888EB7F4EA999F4C36C79E1BEBBB
-:10177000BD4CBF6A62FF58517EAC7FCC951F57BFEE
-:101780003299BF52BFBAFC75103C37A8C6617AAD1A
-:10179000E1C7B747C16B8999E5A32C291245B91454
-:1017A000D6579B87E710FF6872F77057749D317E9C
-:1017B000C037BEC85BD905F3F030BFE51B82D477D4
-:1017C0000D1DF70DC2FC96DA75DFA8C46154BB5B32
-:1017D000B503B5E3978C627AE6A4519E52B00B260E
-:1017E0007D7111FD0827E11E2C3AAEC9FF33B4E725
-:1017F000C87E4EC4738C128B8336ED9DF72CF85D3A
-:10180000EBFD4AFC721787F67AFD739F60FDD93DA8
-:1018100075586FD9CF05210EDA3C4C87725BCD7FAE
-:1018200050FD3FCDFB4BD1EFA3FA7FE83CC6805D76
-:1018300099EC081B906F817D49DB35092CBEDBE4F8
-:10184000206E1958ED9E58BF899A1FB5C96B407A12
-:10185000DFB49FF3833D9E61F03987213C87892760
-:1018600092237C63FA28CF4AC87352F3EEE0FE9FBE
-:1018700051E3D10F9A83E710F4EA7D2FB1F7F324F7
-:10188000C2E70509E986CC89C6B790260E11BA626F
-:1018900079CCB351DFFE6FE2457DDBA7C1B75002C3
-:1018A000F9D23C4ACD63BE15F57DB5FDE0FC7E3F27
-:1018B000CBEF1FC8CF6379FC0DD309E9B4B332DC99
-:1018C000EBD408F73AB999BC0F6AE47D7419F2E1D8
-:1018D00082517CBE41E8C77302EA3D4E901F17FD5E
-:1018E0007D139CDBC963797231FD28FC3F93BF07F0
-:1018F000E35571E2C47744DB4B8754BBB0543D17CA
-:101900001636803F6A499B230C718F4356E5BCBA5B
-:1019100092AFBCC41C3E06FE9A25CF67E279A201B5
-:101920007BE425A3E2EF6774DAC0FE24CD0B8FA21F
-:101930005FA219EEA5E022FB363DA11DF98B7C8844
-:101940001F1D1AB023DFC987F363AA5C687033FEDA
-:10195000D6B08763E70803B1E7C85E1E7565E58406
-:10196000FA5DA2F6874625B24BBF0ECE0CDF0F25DF
-:101970003A7FA7F075158E5ABCBF5CF8A9F503F045
-:10198000A37C08E583067E5ABF9FEABF231D22FA87
-:10199000F7A80E1580FC53D57F77A9F2FB43054EBF
-:1019A0007F6FF94D4627E243DF6E7F12F1A3CBDD57
-:1019B0009741F21BF6A724B1FCCEAFF83765DEDA0B
-:1019C000BC0965DE9ABC8943FAF00C760F0B858F53
-:1019D0007370DE4442FCFB9ABC896FB04E4DDEC48E
-:1019E00057AF539B37F1CC81A76C105A84F38BE02F
-:1019F00027E9DDA6C77C81A9BCC5C3F2D97896FFCB
-:101A00004A3C785F6FB3C98CFE106DBE1FE5542B46
-:101A10005B401FAEA0760A9C97DAD28E7A4463367A
-:101A20008FBE55C86F14A538F9A4424D4A501A9C70
-:101A3000D706E70BF05E8BCBCC6BBB66B4D581F2DF
-:101A40005722CE6F985F5A3D1AFD0F5F9DD7F65C07
-:101A500001C3FF372D9FA545DFA75B552C13885386
-:101A6000253A0751339A1BC85BC6F38A824CA2E51C
-:101A700071A276B34733FBEC4D43F8FD00E881B427
-:101A80001B88D36619A8F55F16B9AFE13697F7F64C
-:101A9000D1E9A83FE1FE9EDDFB078C4F3C934D440E
-:101AA0003897F08C5EC67D96D309E2B59A7FA18EF9
-:101AB000734E89A35D2AFF593CFAEF2B171EFFBF17
-:101AC000CE7706E569317AFC06FC06E96F809FE86F
-:101AD00059FC4ABDAFE56BE5DC95E6339AFC9244D0
-:101AE000EB6A065AA4F8F3CA68EF8B8C8E3CE817B1
-:101AF000BD5CF9975C46F52180C72EA304A466520D
-:101B0000EE65218F66AB7E5C769FE79AE1A82F7F1A
-:101B10006C66F355EF9B51D7F3B6163FBFA5DDFDBD
-:101B200078BEF7E7405FC72B3D780EFC612BD3DB17
-:101B3000C2CFB33C7DEDFD29946ED87D32CABDE0A5
-:101B4000DA7B20FE38FA1F23BF2F8CFEDFD1AFFED9
-:101B500051F2FBF2D7116B7F1FB2B23CC888FDFD7A
-:101B6000BFB6AECB92D76A5E747955BF129FE008BC
-:101B7000C427D4719AFBD9B9A2A1CA7916F5FD8DF3
-:101B80008A5E7867B167189C9F292B0B3E0DE76B27
-:101B90009A880D7FD7A02970FF8E5F39D8F9662CFF
-:101BA000BB587C95782D785E3FADD057588CF41B90
-:101BB0005A09F439C241CA21CED1E99A49EA2C988E
-:101BC00037310AEA472C0F3DFDAB32CC1B6B017A53
-:101BD00055F3A6CB2F7EB6725A19CE17FDD50E63DC
-:101BE000ECBD333716337B507D4E53E64FB73D1B6C
-:101BF000E67366213BEFDBECF088E0F756E3F4C9CF
-:101C0000523FE63934ED62465139D88A50FFC03030
-:101C1000A4AFA65D95A510BF25017329DE07FE2799
-:101C2000760FFF996543D03FFAB2CB5709F3B696CA
-:101C3000F9AF07BB7F041D07E2BC67765E5FEA8BE6
-:101C4000C33733F95419E2E0993C093C2946F816A8
-:101C5000B5F767A37F7B6518FD6EA5C5EC7DB383E3
-:101C6000C9F5E6FD35649E2552B63862CF8B4D1A14
-:101C700035A514E6515A2C2879A42C6FD549D530B6
-:101C8000F0736AF1C9A9E4ADD62879D9443645F292
-:101C9000B173BF3E6F559D9F5A56F356932F30BF79
-:101CA00043AE68C03C17EB2AC657C97282718E6B6F
-:101CB000C3FDD529144EF9DDC16B014E290076BC58
-:101CC0006F39F4C858FADE91265C0BFE9BA75BC700
-:101CD000F582FE2BACEEFF0E6C89D42556814B3479
-:101CE000ADD0DB887824B4B8802F55FD4ECFCE55CB
-:101CF000AD4E46BDB23BA701CF559D3D6C8C7B2FB1
-:101D000085FA94C98A2C8893E4AEFA77CC63B0EE56
-:101D1000E2E29EBF7BB7D8A29CBB5A91057117EB3C
-:101D2000AA7EB982F69FFB184714333A9BCB027FF9
-:101D3000B6A003F95AB787DDCF58D765AF32A1BC3B
-:101D400061FE2572AD03E588B0FA461DF009A18D4C
-:101D50006AB1749D6F17B3787A41B7A80339F5AFAC
-:101D60005FF271E35E4F1447CEE700B81A8DE1BE13
-:101D70002C67242F493D97A3FAA706E4CFAEB9E814
-:101D80009FBAFC3CF4F0ED98E7F86506C683A6DB45
-:101D9000983D420591723F516CFB41F713297A8BB4
-:101DA0006A176BE9409BD79D5F3104E982F2D1C08D
-:101DB000263186EFC5CDEF6E1598DE4DD7615802FE
-:101DC000F3A8CC72833FF152F3E9B5F6F4809EA3F9
-:101DD000E825EABCBF69FEB95ADF0079E771FC1F4C
-:101DE000AA5ED3A19E33FF92DD1F3742B1278E76C4
-:101DF000FEBF12764FA79AE7E267E754F4947F227A
-:101E0000FE84AE93010F76D9754DC5180F6BC27E57
-:101E100056B3DFFF18B12A6F4545193C45C25178CA
-:101E20001FDDB76804C69B295D14C4A18BC5C5EC32
-:101E3000FE06617532E2B1B09660D6A660CF403C36
-:101E400016D6317C5DA4D0BD9A67A7C62DEF2CF6BF
-:101E50001D2B4E8FBAA7A53589DDD3A2E4AB5B5B02
-:101E60000FBF04F79F3CADC4AD7BDF183D13E38982
-:101E7000AB050EECC3F3F6B923C07F7756E1DF560E
-:101E8000A19F8896687AEDC5F38EB907D8392D41A0
-:101E9000C9AB15563BB6027E9A9D3E3CD7F99D8E46
-:101EA000208F795BE2F127A7496077840D906777EF
-:101EB000AA4D08AFB0A3FE14E327D3FABD8810C023
-:101EC0003C22DD982BAB47A9DF256A2F8D49A83F1F
-:101ED0007DABF322E46BFC53DF16AF13F9A72E7F23
-:101EE0001DDA7322CC3E216FB07CAC38EB8AF15FF7
-:101EF0005EF175A97E4B6D7EDD203A66FE0FD51E24
-:101F000052E325C423C7E4BFF7EAC520E83D904F5C
-:101F1000FCAA1BF4EA1F9BA3F3DFAE1FA38BBDB784
-:101F200092F8CD701F429D723E9A08EE5510B7BDD3
-:101F30009FB776817DD70EE71240BF04F87251E754
-:101F4000333EB0629E46ABC0CE6F10999DFF5832B3
-:101F5000AFE5C7D07E495BA608F097AB5A7E8AE70B
-:101F60003B74C4DB4E9F9F2BBF87A3CE473DAF90F2
-:101F7000487E0E3AAFF035E72DB2139CB758A0E07B
-:101F8000BDEB2E82E72DC82ACF569857779B40206D
-:101F90003E9D3A8D95470826FC7D2633E47DA7E1DA
-:101FA000F958CCCF0E5378429EB919F2BED3E03C1B
-:101FB0000CBBA7939B390DF12F95C207F482763D98
-:101FC000BB9753BEC582F8543D8DC55B53BD06E437
-:101FD0003FE7881BCF09C8707F9F03F06C05E2675D
-:101FE000D89A81F1E2D47CA6479ABD069DC9897929
-:101FF000DD88AF614ECDEB667CAF7BAE84F9F60336
-:10200000F774CE23B83FAB0BA666C3EF920CB9C9E9
-:10201000C0417C499533550A7E746F55DA37B2F664
-:10202000708F27CC8F2C61ED07EEF1FC3EAB6F1566
-:102030004278AF14D561947B2459FD92D919483F59
-:10204000BC722E97DCA69C2BE0D83D644B660F61DA
-:10205000F536C607C9DD498A3C57DADF9BEA57E205
-:1020600005EC7C40BD4EB9EFA08B44C79F553AD3D9
-:10207000FE3E4784CED8F9922722E704909EDBAF3C
-:1020800017310F52BD87B4CA6260E7CE4CB17435C8
-:10209000694C2AC3FB0AB709C65DEBF4FC644C5CCF
-:1020A0003F8D7F6E345F19A2F295BB0D1ABB2C9346
-:1020B000C1D5167E9A9D4F335E965D96380EFA7C9A
-:1020C000766C1C744776741C54DDDFAA8506E42BFD
-:1020D000DD76E92DC897DA44410BF73A6AD7BD6936
-:1020E000E07E76BF19F452AD3D7828415ED4E931E7
-:1020F0004C3F7427F0439C1E93C8CF9520AE5C6A7A
-:10210000FC5F8A8F33FEDB9BE03CE200BC54BDC920
-:10211000A48D7BC897E5F7E935FD10F9A0A75D20F0
-:10212000E6EB6859737E8EF241E48BF20AA3D8EE97
-:10213000003EFA43E48BADD4723546F1456A8E5EBB
-:102140000DFCB8F74117FEDED55B0FBAF179CECCA6
-:1021500005F8B1F00CCF018DE993970DDF83FBCD2E
-:10216000CF59C33970BF794A207516DC577E2E3D92
-:102170007C04CAB69FDEC1CA05E1A7E1BEF3FC9F9D
-:10218000FEF27B58061A1B42975B12FC9E5C0CF712
-:10219000EE8756F6837E5FA63977A0B97F19CEC742
-:1021A000C27A322D068C53672AE792C964C53F0470
-:1021B00099694077D9A598576821D2AE7EA81FC6E5
-:1021C000E42EAD6F83FB7DDB0B9C2C6E4E181F2025
-:1021D000C394BC131292C11FD5EEB463FB01FD6E14
-:1021E0009751C95B63E3BFF72ABB37493D6F4D8801
-:1021F000381CEC468B4462CAEA7DE6441087C3FD76
-:10220000C3ED6ABC5A291FC8F48D2A89B25FDE9BD0
-:10221000727F31ACF3E3DD0FE4833EF55DE577E2F9
-:10222000B478F5D7B14C8EAC48FEDB1CE0E3EFF39D
-:102230003637F80F9666FACAA0BF798EB6F1768A5D
-:102240003F93C54AFC3DAA89F26C0EF88AFD6636BA
-:102250003FFB642F37AF38F23B55E93E01FDF4C434
-:10226000D7CD83BE9D7EDC2B027C1A4CE11C81F60F
-:10227000F381C33709FA3D3FF7C3FB308F70C87B4A
-:1022800047E05ED4F7F45DD536C027A7720F36114C
-:10229000F01C50DFD0113DCAEF6DB1F340059C1228
-:1022A000870D4E06B9700361780B65A8BF51B987D9
-:1022B0006EAAC8EE8D9D5AE6C4DF4F9C41C202E073
-:1022C000C3D4F7BD3602F471B3AF2CDE3D1BEA93E5
-:1022D00064E9A568FAB95E8A2A13C8B7882DFF9306
-:1022E0003BB6FCCF155F8E8C2ED7089E3B60DDAFD2
-:1022F000734CFEC81398FC11496005C8C7175AC42F
-:102300007118577770329447BF3604F3A84816CB3C
-:10231000BF1865CBF53338E46D867585A99CEF71E0
-:10232000C0EFB0B1FBC532DE376C85FB2088246D71
-:10233000063ADCAD77619E6986A5F6676DA8CF5831
-:102340004901F2296933E2B5D524C1EF961CB4B234
-:10235000FC89F6B53A8C37713693CE43BFE37B04E4
-:1023600026FFAD0BABA19E2FA71B426575AF9DFD50
-:10237000AE5BFB78A25F510AFBE67E1FF522AB093C
-:10238000CF274CB6B9EE807ADE66C0FB2B0E5ACB57
-:102390007DCA7804FA7FCEBA10DB038FD653FAEDEC
-:1023A0003533FF3A4FEDE3156C7CFCFD46FE1EA273
-:1023B0008C6F220628D7123C6FD06B17D97CEFD5D3
-:1023C000613C04EAAFC3F999B05EBDCF3272BEB7CB
-:1023D00052C0DF21E088121F6BC3F2530A1F6CD773
-:1023E0008B07014FE58F0881FD986CBB8074C0EBB3
-:1023F0006C6EBC1FC843F21D1984F92CE8F77C866B
-:102400001884FC7BFE1E1BDACDA0F940FD50F813AA
-:10241000E95AF09072C53583E3798E021E8FE08809
-:1024200017F6E354492EF2A36775EF6DC0FC0A8BD3
-:10243000D7E8A6E3186E23B8BFEEE4F8E77AF7967C
-:10244000303A1DBC7FE55990C7C1D92A2478B65BC4
-:102450002B2438A7D46B776779A3CA71F6C50F7898
-:1024600013D91753505702FBE19640BFF8FAFE68A4
-:10247000BD05D623E1BCF8216E09ECD07C1BED87AD
-:10248000F27D775AFC759C52D61150EE2DD4D6FFB2
-:10249000BE4477A5D7A9C1BF6FB9CE8CD8755EC130
-:1024A0007986B82B304F3E87CECF12991FFD13EFA0
-:1024B00051BBC1A243FCBA41BD1FCA157B4E447B30
-:1024C0002E8490E51B81CF7C57C977AD4AFE17F467
-:1024D000E35F4FF57C906B7DC93FCC877CD3A92906
-:1024E0006D1D8C385ACECC037E6CE290EFDC4882B6
-:1024F0002BE1FDB94ADF33F63CE4FB7F2B190FF7E4
-:10250000E9FA46A6D2F2C7FAAEFCC54EE48B1781B3
-:102510002F5A4818E9EE06F8BD46A0BBE9FE0E2882
-:10252000D3315AF09E304A8740B72A1D0E9E3FA5F0
-:102530004BFAFDD0161B9EDFDA428278002F8B7497
-:1025400071CCDFD282728B48C323EBA4443BD5D439
-:1025500082EBF8799B8CF2E1BBF6270528DF5CEA79
-:10256000738CA5F39A35F613FCBD0792357724D802
-:102570009D74BEE963FF81F31D7CAEFEABF3C8FE24
-:102580005EF6E884B1B1F6A823E96F9807277136A3
-:1025900037A1FAE3807DAA37615E42E41C72B80E6F
-:1025A000CF3B73295E9067EA39642DDF9D741DE38C
-:1025B000BB1F2FB6B957E03D923BD02E6DBED9A2BE
-:1025C0009E5346FDAB79A14E39A7CCA15C6922266A
-:1025D000BC2769E0F72CE93F2E23F2BB34FBE0BCBB
-:1025E00072D9579D5796F03CB4BC9CC5E907ECBB2B
-:1025F0004691D9AFEAEF9BDC9BABFE0E05D3531699
-:10260000934BB26FE39C6346BD91A4E814FB95E93C
-:102610000BDD13245126185F657AF86C03D6AF4F93
-:10262000F2E3EF05D5F15D88240D63EDCAFD0F7E61
-:1026300033FEAE98C15D087C428DB3EECEF7358F88
-:10264000A5FB34AFD893C3D1A5D41958FC94D2C1FB
-:10265000E67EDA6A1A69790E7E6FEE7AD2F25B5DF7
-:102660001ED2C1BDF0FDACD19FB0DFA18BD0C17D2A
-:10267000400726C2FC01372871A2D73FDEDE01FBEE
-:102680007E8E23EC3C9A4B7B1ECDFBC3B12C9EA5CA
-:10269000FC9E542CDF899AC7713D9B8783E7711E8E
-:1026A0002BE3CD63101D123F8E4FF7B705CFCB6BD9
-:1026B000F0483B1F6EFFFD789E6FF3ED44E42780EA
-:1026C0001CEF37033C870146E4C13A7DEB609DD99E
-:1026D0009062099354ECEA41F3E62DB8AFB7CE1EF1
-:1026E000C8D399915D0E712236EE53C94DEBC0EF00
-:1026F000D17CBB1EF97BCDFE31A8A7F5C94611924E
-:1027000020C964965FE3A6FF8379CD229E2976DAFD
-:10271000CF4D620DDE0B77F3746D5E8EFC500B6D4A
-:102720007F8B92E773EBCDFAA3D1FAE639FDA37A5A
-:1027300080835C6769E127427F42A4BD73305C06F9
-:10274000DD4BD5C1F813A17A0EF4DF5E1140FE9483
-:10275000884FED1D3B709FDCC86F98EF73702CE2C3
-:10276000ED57E7FB6C57EEB17A4B1FC6FB51DF4EBE
-:102770005FB079315DE7C81F15E3EF1B4FC9A87F34
-:102780006E2D2DFF78D3282CBF9D71FBD2F7A0FEB4
-:10279000E9422C4FD67D3207E8C1553EFB06F85D75
-:1027A000E8B7CCAC9FAC245F770DFD2EAB24771C33
-:1027B0005C6033D910C6EF6E1CDB7815F8632627F2
-:1027C000B1F2A1D23F8CC372AE521EF7FA2828BFD5
-:1027D000C57D32271E5F1CEDE2824554DE4E4E65FC
-:1027E000DF4F1FF7FC10B0E32757B1F26877E5EA37
-:1027F0003CA8D77D3A279EBE7456E1AB93BE38D72E
-:1028000091E680B030FBBDE2D73C1FE2EFCB78A968
-:10281000BC85FB06BC152C0EE7F5940AF07B6655CB
-:102820001E56AEB6B465031F9CE1339441DC55B42B
-:10283000383B44DA2EA5A2723CEC7B3555B721CE4D
-:1028400049E9EB53A4AFAB3FC9B1A15EAAD297A8A7
-:10285000477A4F7CAFE4E76CDF62E981F6F705CA9F
-:10286000CF6B62E5E7207AD5E0E1FF008B7F42C5C0
-:1028700000800000000000001F8B08000000000026
-:10288000000BED7D0B785445D2769F3973CB7D429A
-:102890004248088409F74BC01912205C1D02645994
-:1028A000050C171514E1041002B98DE0EEA2EB9AA5
-:1028B0000901441777E38ACA2AE88080A0C80E0A73
-:1028C000C86A644764237EBA1AAFEBED631345E52B
-:1028D0004E0CA2B89FFFFAD75B7D0E99338405BFDB
-:1028E000CBF3ECF7FC3F3E3E9D3ADDE77475557542
-:1028F00055757575CF55CE4EE15FE60921FC891EF1
-:10290000473E95BD6D271A7B0BFEF74357592A6941
-:10291000427410FABF9521457413A2930870B95EF2
-:10292000D42A421562B2558BF70C12C26E6970E35D
-:102930007917C5D3D745CF45BEC759D41F2F764A7F
-:10294000FEA29F4053F1C395429CB67D922D5285C5
-:1029500008D00375383DF489EEA9D48F82A66ED9CC
-:102960009595E04CA35FA1B85C69E857D62B757FBD
-:10297000E5F7D739E8FD0CEEBF93A73DF093F8AC2F
-:1029800057FC5CBA84F6B8A0F155A40BD73D5EBCE9
-:10299000DCB8324CEFA5D388EFF110B8D73CDE9A03
-:1029A0007CCFA264F5427C2DCEE65961FACE3491FB
-:1029B000E851E9FDF79616B5F712B2D709BF0DE356
-:1029C0007D282E31904CCF2BE724041DF47C670723
-:1029D0006D00E8A15A022F36127CB3F0D9D16EB245
-:1029E000D577059EC70BF9BD0AFADE3D289D448FB9
-:1029F0003C898723A30D7A44E1193DFE56BE346419
-:102A0000A0CC107E86D3856795DAC67884D57F778B
-:102A100023BDFF0B35A1F61E2A1FB2FA2C1BA8FFFF
-:102A2000C0EBB6E06685C72380CFD24F12363AB2EC
-:102A3000A9B40A8685C7C1F54B6E26FCE9BD254AB7
-:102A4000962740CF6B12FC8FE17BCDD556B1311567
-:102A5000DFF76D00FC7A757781F1458F27BDF6A70A
-:102A6000424BA17AC5FF04DA05AA1DAECDD4EEDB38
-:102A7000D87FCCDDC874482AB265111C3369432362
-:102A8000C18ADDE9528869E973D2595ED7DE427C9A
-:102A900020FE050A42DDE603EF475551E38AA40311
-:102AA0006192DD2A9FEB3D44B4F69063831E0105DD
-:102AB0007269B728B38BE28926F877656BB9DE6354
-:102AC0001182F8D43DBFA30FE35EE2151EC80FD1FB
-:102AD0004101DDC55E45A703C913EA15973FE0BA7A
-:102AE000904F4B1BB36F45FD7E0BE14B6501F12B06
-:102AF00005EFC7A9F27DC5D32199FA2F4812FE1020
-:102B0000954B62DCB746D275B8C532BB28477ECF3D
-:102B100049F49BADCF0603CF396B55A1E50A31C609
-:102B200039F7B1C3B9C0775887A28488FA7BFAE431
-:102B3000CCA1F75FB689E9F8BE677FEF9CE21C1E67
-:102B4000872F94C37C5C1102FEA3D33D010FF06B71
-:102B50005EE1017EAA68DEEC011E014716F089C91C
-:102B6000F40404F0AC15B7E545E01F43F803BF3BA0
-:102B7000C6F922C76DE07D313CA3E97D313C2139A6
-:102B8000CEC154AFCBCD1C675C933200A51A7690B2
-:102B9000888A55D4AF33525F45C9B90830DF272E34
-:102BA0001D537498E42DD54E8F20A7B725043712F6
-:102BB000FE136F1BCDCF9529E7589EDBD17C745057
-:102BC0003966BC5B69243CDAE5BD6515FD21A78447
-:102BD00017F0B1360E9A4CF43DD6557B12FAC6C0AA
-:102BE000FF2F839EF06A547FC8224A4239178E6FA6
-:102BF000B72E4F2ED16887DC5538E3C3EA800BE54A
-:102C0000E562F8BFD8A1E839E88D934AC36054560D
-:102C1000F676F17321B46C7C2FD9953D3A197AE29E
-:102C20007BEA6F30F414FDA379D0B7BBF627BC77ED
-:102C3000BD281A67A5F1B61BAFD9341AD738359E0F
-:102C4000E773CB7685F5D5585F8C0574A93C680B86
-:102C500006095EFCAACA745ABC5E0D62D2B608CFE1
-:102C60005ACCC39680C305B97C286EC06F4750F913
-:102C7000D97A9BC7817E03BEB77B53BFF3743EF501
-:102C80005A6B116E832FF47F9F60AC70F76E85FBDB
-:102C90006D6D6782FB873A9ADA5FB1B7ABA9DE1B2D
-:102CA000EE6BAACF3D38D0040F6A18666A3FE48302
-:102CB00002133CB4F12A53FBE147A698E091CD37CB
-:102CC00098DA5F796E8EA9BE34B1B07E298DB73E99
-:102CD0005D150AD9C9D1A2D4D4BE542DB30B62B1AB
-:102CE000A8B57D0A79F4D37FCC4F75A615743EBB89
-:102CF000571129A48F16AC95F5C67B2575F7AD84C1
-:102D00008D5B18343F2F15D65618FAF793856F1E32
-:102D100088E8AF576AB12599CABF7B1252212F624A
-:102D20008818F283CA7CF540DFB4BCAB7A1C42370A
-:102D3000A5042F7E5A09DE437CEC297A3C04BE119F
-:102D40009F45D00DBECAFA96756A3040FD7C5B5532
-:102D5000F2E6011BC10773D7422F2F20BD0CBDE542
-:102D60004837F333C66DE6675C6F333F133C667ECE
-:102D700026E59BF999EC33F33365BC999FED8BCC39
-:102D8000FCEC30DDCCCF0CCDCCCFCC12333F3BFBB9
-:102D9000CDFCECB2D4CCCFECC022537DB4FC765B3E
-:102DA000B5D854FF50DCBE2F34A2436A47D5E5A006
-:102DB000A9D7A3F676D3F7843AC1BE82E8559AA97B
-:102DC0000AD5D52A0701FA4FCE6B3FCFAFF92407BA
-:102DD0000F131FCE8AD5F599EE0BE5A162EF7D7634
-:102DE000CCCF1F2B0FC3BD663920B94BD2DAB06BE5
-:102DF0004669F099FC91D15ED20FD3BCDA582FE925
-:102E000093E9BDBECAB292DE1045C5BD60472EC76C
-:102E10004FB10EFE117ECAA410DBE38BFA29EECE71
-:102E2000ADFA8F9DBF80057AF9C3793696DF65715B
-:102E300003B6432E3FA8917279064D860A71830826
-:102E4000B11FF661EC239DD15F01115C198ACADACA
-:102E50009B80FF4CE04FF6EC26D168C3C7C98EDAE1
-:102E600051160B37977375FFEC66115E89C17C9222
-:102E7000AACD075D2A54AD4B1AE8D1A9218BFDD804
-:102E8000D75380F445E96AE8EB77F027B57BC45B5C
-:102E90005481EF8C71BA6F7DC00D3F80EC03F1451A
-:102EA0004C4861BC85B5A8FF94FE6D7D6719DB8B2E
-:102EB00017144D03BD03194E0FECAD480F3DA3D0C1
-:102EC000F8FAB6730FBC27B9B5FDAFBC867D21C734
-:102ED00086DA3FB92B96E9D5AFC3867618D78FED42
-:102EE000F76EAF6F39F036DA5F6ABC76BB67D1CF69
-:102EF000A8DF6645F8371212EFEA7CC974483F3103
-:102F0000534DF4D4806F71B3EADB131D6EEDA0FD59
-:102F10000EDF9F7EFD4F570256F6A7B817137EA708
-:102F20008B1B07035FA2FF83A82F7312FD6968271D
-:102F30003B6BBD9220144592FEF447FFA236F197F9
-:102F4000F81CD0E9FF6207ED31C8F57E4B439607C8
-:102F50007CB4360C663EBAE4B84EDA255D2E468760
-:102F600082B8CE3341FF790E8747257A1628F2BB07
-:102F7000879366CFAA24BC6FB614A5855513DE4F80
-:102F8000A3BFB2F8E22E19C0DBA6E3ED6CAFD3DD30
-:102F90009D13E99F45E35D83EFC31FFE15F997D9A4
-:102FA000781EDE06F839E1E2F58BC322ED7273B5C7
-:102FB00012DC48F56FEA745E6FA37698974ED1AE37
-:102FC0009AF0BB66E48A0D68F76BCDC9786F169EE0
-:102FD000BE6BB2C10FC1FA3EF32E2558930DBFCA86
-:102FE000C3723F4F1465EDA276AF79B57AE0FFB7B3
-:102FF000B87F0CCAB6F0341EF42E7D67CFB20E9E99
-:103000007B008DB83CF9EF4D9A03FD4F9928EDCE2A
-:10301000CD3ADDA689229EA7C6BA8926FCC90A6ACE
-:10302000379DFEE2F59870F7077E33007B5BE7F58E
-:103030004CD1C0E52CE1E2F5D4DBD51D7E761BB585
-:10304000996269CEB2AB98A7346FB399FEFF0EB9FF
-:10305000F966DC5B8714D0FD0ED263E0F79AF69731
-:1030600025C79315494F9AB79FEBF3360F53EBFCE7
-:10307000FC19DB5ECA9FD5D5E39FCD1F528C891901
-:10308000E4AFFF44AA42F1D09944914AE36CE8AA24
-:1030900006B19E1AA7DE61DD45E36C207FC2817117
-:1030A000FB8A3B9EA6FAF1646FEF91FA352140F05E
-:1030B000249F2AEE6139685CBE909EBF9E4FF5D476
-:1030C000FE956A919047F02B5E9BA786E470DC39F1
-:1030D000ED4012959348EF87A9F555E9F78D857F67
-:1030E00030BE13D991083B715577334C13A113F8B7
-:1030F00074B54EEF093966BB330976C768DF86DDE4
-:1031000021FDAA82BE710375FBD357F485FD79B901
-:103110006AAFF88CEC8B6187C608B9DEB8981DB22F
-:10312000DA0B5206B23FEBB6637ECCC1FA04F476FA
-:10313000691D2747CC97D2210AF3C94D86C742E3C0
-:103140007FF3A01A047DACBEF070D06FF18B0ACB78
-:10315000E9D503B5AC81C48753B6C6F9909B8611F7
-:10316000B94982FAFFB48A10E945F3B7CA297C3419
-:1031700017BEA872317CA42A9DCB63556E2E4F5486
-:10318000F5E6FA53551E86CB0716F5027E73567D7B
-:1031900065859FEF167EF68F96D07A17FC5A92B00F
-:1031A00058C236A70B4AF8AECEF5963882EF0A2AF7
-:1031B0001ED8C585BB822BE308AFD23A9F3D9EE067
-:1031C000259DDB8D8947FB071496FAF907FDF51855
-:1031D000EEA9773FBD6EA2681D6FF93985D7C9EF9B
-:1031E0000FF20D46FF5F56E5335E47AB7C8C97AF21
-:1031F000AEA93E85BE77BC6A3CC3770D2C1A81719F
-:10320000FBC457EC474CDCDE64859F31CEA7F8C089
-:10321000E7513E110C12BDD6DAA45D594B76057A02
-:103220006074FF29EB6F15D0FB5A21DEBFB6DDDCE1
-:1032300071F05727E517B3FF7AFDF782FD5743FE7C
-:103240002F358FDCA2E15426F5773220E9D3B2EB9B
-:103250001D865BAC441F1AF1BE5DA5A582FC83965A
-:10326000736FCBE7D48EFDD4DDB2DD629B6CB77893
-:10327000F7AFDBF9002BA25944ACB78E131F85239F
-:10328000027EFA17E95A847C1D6F17FAE623E8C913
-:103290007FB77836B29C6A9F3D0F3DBADCC57AE6AF
-:1032A000942DF4C5C3D0B39DC9AE72BD3F6E0AC99B
-:1032B00059855D682C7742EB07F878ACE0F800FAA6
-:1032C00073F792CF218F3D773CD4F597EED6FEB6BB
-:1032D0003CFDFB96E7DDA80FF2FCDFB6637DC74738
-:1032E000082ADBB92216787D76EF7399185F2F557F
-:1032F000F8559A67737FF3C7CC3F52FF4F906E41EA
-:103300001CE3059BE7D45EE0B39EF0A1EF3C716F38
-:10331000F940E8B779BF5BD817EF07065A98AE4F68
-:103320003DB793ED3FC998670CE9A9FE6B5E5A96CD
-:1033300041EDAF58D764E948A577935283B274FB47
-:10334000CEB7ABA9BF5C97C50F7F74C54037BF3FF1
-:1033500030B461A302BDFEFDE31D31CF72D67C55B2
-:10336000D0515CDC6F782AEB8396621E572D8F6BF1
-:1033700077DDD4776E14F04BC82301BEC5760FDB22
-:10338000291AB60DFCDED56D03DEDF6309B0FD0939
-:10339000CC917ECBC9A2C0EF31FE726A1F20B8DC8F
-:1033A000DBD0741BD597277715883B1C092E998194
-:1033B0007A9ADE2ED0A762D703851D093E3942785E
-:1033C00014EABF64F79942B66F9DC9F7C6F776D580
-:1033D000A4DD00FB96533048A5FA2235C4FD894A86
-:1033E000D95F65DD4EA7E0F5BC68A792224CAE1B05
-:1033F000FD7266047F2C8DBFC9B6D2F7DA937D04C7
-:10340000BE6BB30319FEF8567BFA9AB7680BEB2331
-:10341000D7FDC5F8CEE78417FCADCBB57F768B7FA3
-:1034200021E3932E5C81A1ADDFED6C092FC43848F8
-:10343000DA5D01FACE6657C30C6E47F06FB95F6D67
-:103440000FE65FA64A544F95F6BA06FDBAA6668106
-:103450005F97DBFF4371FF60BFABD292E871E4B5C9
-:10346000FA2DD3536A5E6C247E6DE8A0EDC7F88C0C
-:10347000B8A4B07ADCD0E3810EBE97F1BCCC49761B
-:10348000D5C2F6F415C0861F7CDE0F735E9E3DDD4F
-:10349000D9C1F717A6E365B677EB7186F37AF5EC39
-:1034A00040935EAD49B00B2F3DAF59E3E0B884388F
-:1034B0006029ABA7F5C7487CC2D2FABD2509033BFA
-:1034C00040DFD708D126BDF6D17CD688B661B203DD
-:1034D0001ACDEB51E79A558DE77DC3CB4979D09F43
-:1034E000C297E0461CC022B4087B17FD1DE2D70935
-:1034F000F06BB488135A84DDF489643BE6AD886FC1
-:103500007799E30E3F6EB627FB1F8F1CF788960F47
-:10351000E2E052113D3AA0BCD8B85ED4C7F5278C82
-:103520008BCA79438AFE01FC467EEDB2627C23ADF4
-:1035300093B3BC5D196F6B2EF53BEA6B8B19EFEF04
-:10354000634DF0E5E2FF3385166A90E3AFEC1C179C
-:10355000AC83EDA771D42DCC0962BEEFB18B801383
-:10356000EB982976F66BEB1202097D51AFB84288D1
-:1035700027BD606B9821D739C2B5D90BF97DE3110E
-:10358000C8FF0D2D7605F1A98E0EF105FC25A126AB
-:1035900089CDA911DF6FEFE2B885EACC5C8FB86204
-:1035A000DD50FDF90C3B3FAFB109B67B8119B18C01
-:1035B000D79A64FF6BFDA97E4DB58C677E2082ABE8
-:1035C000BAA2FE0E95EDC070CBC6CD0F621D333989
-:1035D0009DEDC69AE4706625DA2FECEB09903CEC81
-:1035E000F987CAF6608DD797D12E1E7A50C605D7B7
-:1035F0004CF665C4A6A24CB360BC1D49CFF3F36C76
-:103600006A47E54736D9EE439D6F44E90CE8DB870E
-:10361000E7F510D03F57E7168CCC65FF47C63BAFA8
-:10362000952C10336E7E80E3AD0F6B6A50CD065D36
-:103630007E736F4F826F98A3BA1077BBB62486E370
-:10364000A1D76A7A3C749A390E7B75AE6F642EF1FD
-:10365000BF3CD4A7DBE108399E71738F9F433F7C49
-:103660002A645CFAD769DA38B4137BBDDC6E2F3973
-:103670002B3FC04E38DD03D87F9E67AC1BC3734120
-:10368000DF7DCD4EF64B2F260F42789C7DE9FB0F58
-:103690005A4408F2DC05FC4961B90DC06F0B846225
-:1036A000580EC64F71727CBD25DEC2FB0C8F11BF58
-:1036B00060DF02BBE53E03294AE6DF83FB3AB35DE8
-:1036C0009AADEBB19AE9B1FC5ECD4E5BD0023E2BD8
-:1036D000C16D5BF0DE8B316C3FCBF4386FD9F3FDFD
-:1036E000580EF6D87DD92BD0EF3E07F3B92CD19DDB
-:1036F000C4F5FF962250FF821E772E8B0DF7443CB7
-:10370000BB5B7B6D3EE84172C771F932BB7C7E28A2
-:1037100058C0FB1A82FC95B851040B1FEF4F04C828
-:10372000AFD9EC91FC035E5A4DE78DC057233CC0E6
-:103730006771BB8C971FA2B98CF11DF27766BC94A0
-:1037400029E3336EA6FACF16C7711CF55051FD5907
-:10375000F80187D2559EF7A4A1EE1D42F564731BB4
-:10376000EE21B872E1A76F0CA1A715351F66ED75A4
-:10377000B7D27DE6B2F20982E460E6A23B2689C4B4
-:103780008BCFD799650EAC115BE7B7B063B12661FB
-:10379000D2EB6B727D3590C350AEB612E3AFCC2145
-:1037A000FF99E4E894BDE151C4498EBAB5BB517F9D
-:1037B000FA8F5F6EC173616DEEC9F2E16C2C449CAF
-:1037C000A5CC22E344A3F3B4DFE6B29D4D64FE55DD
-:1037D000861CCCBFB89C06A917EFB83C7B70AC6EBA
-:1037E000F31E85FA298DADABE0520D0E80BD3AAEC9
-:1037F0008413956E4C5F0DF3EA842B9C08FE6816CB
-:10380000E9BF956E8D1EA7DC4F2CC51FBCEE0CD9F1
-:1038100087135E8B48F53EECC2737B6BFBEC563E28
-:10382000D277988F22FE9359BF44FB6D7D06DE430D
-:10383000742F4DDEFB9BE1D917D22F1A36C67321A8
-:103840003EFA3C290A27629E1C57E43C3921A4FE1B
-:103850000A6C8DD1D7FF128F537FECC078A4E9F3A7
-:10386000E894A2B7DBE690ED48F6E0CF94FE41CABB
-:10387000DD8336CF5AB9AF66657D599A22E152474A
-:10388000BA0BFE5647356089855C56099E2F841B0E
-:10389000CFCBE33B32F97D43AF892221A0D74A77D2
-:1038A000646C947E9DBE0EC600A8FDA2A7647F80B6
-:1038B000A1FF8F3D99A9F72FE753345FA3E9F07E6D
-:1038C000AE8C5BD5240CEEF0CFE295BDD33F5E0706
-:1038D00015F4A04DCEEB4082B423E4B7A44FEE8F95
-:1038E000FD06BBE9BBA712ECB37DF1D877303F37BB
-:1038F000BEF769AE5C477689E27B47B5F925F84BA0
-:10390000E271C17A221A8FA3788FF07DF2C9F37C1D
-:103910005625DF49900CF97233FD840DFCF9D06E09
-:10392000F0F1D64CD2EBA5A055D7563AEEF16A99F4
-:10393000B023A7F47DA33DC904E7C0DF92F6C3809E
-:103940000D7E44CBE9B20FE767629F2A2D4FAE0F81
-:103950006A6212078824945941E8816AA22BEAC955
-:103960000EF27EDCB1AAF1F71FB6B58EE78B2A9F67
-:103970008F4CD07978FE5AAF13F373C13AAF734EC0
-:10398000043F6AB6E61E7413DD4F6CB562274BD454
-:103990005883BF19968AE76A2820B8DE097A9F887B
-:1039A000DFFF06DACD5F973C508DD04F0BD68EF3FC
-:1039B000CD8BE043BFAD66BEF40F99E12BF69A6163
-:1039C000377832E8C7BFE70D9BE1DC8366F8B9FCC6
-:1039D00066F507D8A7784BD0A9A06C517F807E0FE1
-:1039E000AA41AC33BADC51347522C147D6CDF5803B
-:1039F000CD0BDE5B3618FC3BB9FBAE3DE5F4DE914A
-:103A000076160FD657C745E8FD89C48FF975F7D9E3
-:103A1000AD6E8CD72CE77B2CBADC3E29E37A0B8386
-:103A2000E6FA0BF543B51E4712BD23E52A9AFFD4EB
-:103A3000EF753E42AC6CE9D4FBE1FF944C2081274A
-:103A4000FC8686EEB38BF8CBE927C072634D14E198
-:103A500074C2AFE9AE048EA70C5B3A467C46DF2BFE
-:103A6000B7BA0663BF7D8E5371617FDB889337EDF4
-:103A7000CCA8803DDDECB278904CE1CAF7D767E680
-:103A8000613D21422E0FE2F477AEC43ABEC49FC816
-:103A9000F45928821C679FB3DCD1AA1FE9FF79ABD8
-:103AA000A3F05913514FE32859676EBF68D30F8EA7
-:103AB00048D858970EABDBA062BC37EB78AB0199C6
-:103AC00037304C8F3F1C4653B2377FEB56549C87A0
-:103AD000F66B46CB7AAB53B7B33E5EE795C7DBDDFB
-:103AE000ACCFAC6FADE4FD1A9A87B00F0713E6FFB9
-:103AF0001CFAEE8C53B81C9C47A231FC458A5C171B
-:103B0000F23E04B53FB34E61BB5E9E22E1F2C79523
-:103B10002062BAE508C2027E42C65DCB747A404E8E
-:103B20007C11E301BF2261516BC4BBC3BCFEADF08D
-:103B30000B0FFC00417CF499F6BDC3F623B0B30132
-:103B400025F4B017FE9EF93B957B7F7044C2E7E3F6
-:103B5000C5C4BA6AFE7E90E9A8DA850F7A5CBD33E7
-:103B600096FD763200B1B0EF36DDBF16AB82ED6167
-:103B7000AFD6C05E51B942F7C303F7497BB526D92A
-:103B8000D7D385FAFB323CA0C30D8ABEBE855F9FAA
-:103B90000CFF7A3FF7DBACB85C1B93D15E0462523A
-:103BA000D9BF96EB847FA86CEF9AC97FC7FEFC1A39
-:103BB0006F280C7CD63C90CDFEFA0B86DDBB3746D9
-:103BC000FAF317FADDEC5F89FBA5FFF891E0BEC5BB
-:103BD0009EEEDA863C92F3B96A116F2ECD5BE6CB8E
-:103BE000C077E74DB15BC00F517279FB1C9BF53C70
-:103BF00098661A2FE2EF8795A27A4B841FFC4C9EA1
-:103C0000B40F830B7C5BF4761EB49B67798BE93031
-:103C1000CF225C58CF6F3EA70A2BC19B6B1DC1659D
-:103C2000F4CABCAEBE9E8B73F09E8C371DF24A7DEB
-:103C30001F97277C41E87FFDBB2FE4594CA5182B2B
-:103C4000E32C8763A41CCE1445851CEF770B53FE31
-:103C50008551BE9227EDDE3C7B83199F4F5E66BE89
-:103C600090CD732D837C8F957EC7E15B14B6E734CE
-:103C70009E9E2E8207FF2E86E38587757B64D097F4
-:103C8000E487F3220CBD95ACCBCB9ABB83DB628877
-:103C9000DEF7D9486EC037921BE4F910DFD92F5CEC
-:103CA00033238DF97E83CE57716F02F36DB8C52231
-:103CB000E97C6F06D399DA8BBFE3BD716EE9CF5F04
-:103CC000E63A8CF8FE37F03D7A3D66F05B58838328
-:103CD000FED97E4CF9734FEF0990FC2FFAC303898C
-:103CE00082DA1DB5D6A679E8FDB2CD2B127D541E21
-:103CF000B106125DD4FFD1A03A3ED806BD3B0F52AB
-:103D0000F4F5902F11797415BA1E3FF6E47FACBC20
-:103D10009DF0FC4611CDD08F15BBBE5B793B8DAFBE
-:103D2000DEE76C863E3D626D2C84DE5D581CEFAF95
-:103D3000F660FE9AE3F28B9E7820CDCDF40E645AA5
-:103D4000D279FE67E2BD8A4D360FD67515EFAA1EF1
-:103D500037E6BD685E09FCA2DFAF0C7D6607FD5D3E
-:103D600016D1DC69781BF5A291F57CE5AE5F7FA5E5
-:103D700026A23CFA11D6179551FB0125FA7E49F48B
-:103D8000BE40C2A084D42F10F0D6F7A3893E9C97E2
-:103D90001020BC7AB0B8C83872CDB6870634C16F6F
-:103DA000D8F45AA292D3BA1F60ECA3B484E63E863C
-:103DB000B8EAC5E6E5A9A838B0A1C7DC7B1599B477
-:103DC0005827CB325B3811FE7ED9061BEB91B2A788
-:103DD0001FDFF230E4ED4387A7871BF0193BF44166
-:103DE00099E26B5658BF8B4465702BBF4A9FFEBC4F
-:103DF000F011F8D719AA9840FC5AF4EC59D9DE27EB
-:103E00009A63A87DE9CEA642AC0FCAB478BFB30DC1
-:103E10007E8D09BD646F8C6F835FA1A6428E536D4A
-:103E2000FB96F971749F223A645FF87EC986CFEDE4
-:103E300042AE0F9A539225BD60EF2A436AB13DE925
-:103E4000C2F6F4FD49CFE771BD0BEB954BF1F124C0
-:103E500068C1F29E2090C758F291233801FCDDB171
-:103E60002411F94F5F5AFD52EED7AF48839F576236
-:103E70000BA4B9B894CF4B1EFD19CBE302C59FE646
-:103E8000E2BC2DD2AFF93CDE0C8CF3E675D7F238EC
-:103E9000E70B8DE5B164BD5A14A4F2AC558CDFD9A3
-:103EA000C6BC796890D4770E71CB00CC93B3F4255F
-:103EB000D8F12FF5757DE06DB99E7688294991FB83
-:103EC000432583A45E0C88E021D881CA061BC7293C
-:103ED000D4B7CE16E23BB7665BFDC8DFA0F107742E
-:103EE0007A293FC8F58B1B790C95F88BECE998B7CC
-:103EF000C67568CCC1F75BEC3751BF5F639DE83195
-:103F0000BDC774FB72A32356B982CAB4B6F3BEEA26
-:103F1000CFCF7FF1B68890A7CAAD5FB23C89745508
-:103F200024A54B18FB11AE39F1FE24A2DBD7EF7E9E
-:103F30006647FC3B906A113D806FC3E70C0B4F7BDB
-:103F400037DA1BDFAFDCEB10E1C879BBE9F3A87906
-:103F50006DAE17C2CFF4AC14496ED8EF2FEDCD85FE
-:103F60002FA01FEA7733F5339FFCAFB0C9BF6A2E8D
-:103F70007C04FA64AFDDC5F107F23FC31172737EB2
-:103F8000BF53DFE75BA0EB83683A44EB87FBA2F407
-:103F900083F1BE58D7F6FE52AB5E08303DCB6C22A3
-:103FA000003FA3EC4307DB8FB2A7E57C14A44F7B53
-:103FB000D0FC38BEFDE5F76FC07A36644B9DC0BDBE
-:103FC0009AF56FC9339FF3B8E612FD633CD0BFDFAB
-:103FD000DAB1FE4D1F239A1D84FFF1D55E3BE4FE4E
-:103FE00082794CCFDB9CC7AB15D66FFF55BD4BF428
-:103FF000E6FCC04BCDD70517D1BB7551743D2B7274
-:1040000092905E2D5CC55D78FF208ABE065DA3F5AB
-:10401000E8B441EE36F528FD7B5F44D051884696E2
-:10402000E36F482F625FAD62D3776CD788ACCDC8A1
-:1040300027AF087EC5F00AD835865F9A8678E58571
-:10404000E336D333BAFE4EC818FD5FF4471BFB05B9
-:104050006575326F91DEE3754725E2F5DCBAB63E51
-:104060003335120E46C1A1A8F6BE28B828AABD163F
-:1040700005FB4DEDCBF6BECCEB2CC2DBD4CEB1F4C0
-:104080006A5E875CE85704791C95BBBEB207201FA7
-:104090009D9AEDD08BB665229040EF37BFA8B2DF76
-:1040A0007BDADD9C083F65458CF4E34EBB7438D960
-:1040B00080C5EC62C2E37460800B7902CD3132DEE0
-:1040C00072BAA839313962DDDE54A726BAA97D63F8
-:1040D000508C6F3BCFA586E753A3B858BDF4E7C615
-:1040E000A9DFEF90F99F5681FCD8C6EA6F77209E32
-:1040F0007498D64FF05FE6555F9F88FD97D375DDC6
-:10410000AE998E75E0ABAA9069D63E3BF220E64AA6
-:10411000568A2322F0E0081A9F9A9057FF02D6573A
-:104120002428D8FF9CB73ACABF11454961ACA7D72C
-:1041300044E72B04EDF06F16909D853E2A5967AE3B
-:104140005F54779CE7CBA2A8F9A2E971E3E8F9D222
-:1041500075B09EB7E0155E3D7F92F3F44E1F545943
-:10416000BE5A96DBC4CA5499278BFC92963A997F23
-:10417000D3B257C222A0E7F5E8F3D6A0DB09CCA75B
-:104180005E17F75B4EECFEF7C1BF84FCECF97800DC
-:10419000F6894FECF9B0E70B809FFB6BD6C7E2C204
-:1041A000F663F67D378BF1DAE710C0EBF4BE57B259
-:1041B000E06F9C7EDEC1F905A79739D85F0FEC4B05
-:1041C000E0B8C5E9CED21FAE79F1DB018D6C8F97D7
-:1041D000331F270EB64BBFAAEE3FD83EB6D439DC0C
-:1041E0001847E5BE389E5795CFC7F0BEDAE917BF2E
-:1041F0001D1C198FFBAF8EC7D8573F9D20A63F03CC
-:10420000F9D5FDFFCA17863E5E8DF5F2AE97EC73C9
-:104210009127F2A7FF3300FAF5F4332FB1FE3D6585
-:104220006B7C14B1CDE97B321EB10D455C8F3ED65F
-:104230005188AFF6CCB811F3E742BA483A9C263A17
-:10424000605C449712F8E517A347E5BF2C3DBE9A82
-:1042500025F5DC10817D9F56BA283EF93C81E35557
-:10426000347EF97CDFB703A0872E35DE7BFF1F1B72
-:10427000EF53186FFB7FC5F14A79CF1DEC66FCA2A6
-:10428000E5FE42B97EEEE70CEF48F030BE9739DF2D
-:104290005FFB971DFFFF0CBF8FFECB8EF752FC7E9E
-:1042A00055E777820BFBA0A75FFC3F59E2478CDB09
-:1042B00039E45F755EFFF3711BFE7C81EA39E8A586
-:1042C000F6AF89D0BB9E6CF64ADAF447060D518CE6
-:1042D000B838AFA7C6E02F37DA0F5C8E734C01F207
-:1042E00027B08EA9891F78E02D825F213F41E57DAF
-:1042F00059194F7A25DD1B94F15DBF403CABE0AF0F
-:1043000073197EDDFB9303C82B2954653CE6E56AEF
-:10431000CFA6061AC7CBC91637CE958DED34F7F068
-:104320004EAA7775545D589FD574CA75BA23F01B91
-:104330001B6F5E675D1DB54EFAA9DB5C3F5E3C936B
-:104340008AFDBAF1393681F33685681FB1AE4C1952
-:1043500022CFF7FC54D42E77C5FF783ACDD5E94467
-:1043600074E17D9B402755CF7333D34D806EA9A058
-:104370004B2EFBEF01E139F016C156DDBF12FAFEFC
-:1043800063A133610BD6D10E51100E127CD66DE5B0
-:10439000F3935641EB61394E5E4747D34DE8EB6AE4
-:1043A000ABCE82B19DC68441673CEF926E7A9FC7C7
-:1043B0001D4DE71F4FD7FD9D9680AEE9099E20E475
-:1043C000A2D3B3A988B3D6109D15A5959E069DA22C
-:1043D000E99E8FCDF541ADF4EE64F55A31CF46EA52
-:1043E000FEFC586BB2843B35A8F25C5E90DB8FF923
-:1043F000DA63853F323A3E99F343857E6E42D5F7C4
-:10440000C39161C778D0FA1479B693ADDA92219C42
-:104410005FEF120558B7168810E2B74ADD2BDF614F
-:104420007D84F32245BCAF59FF01E05E382F86FC46
-:104430008E75D613A6F36E51E72526E5EF1C0D7E8B
-:10444000CD594ACF10C772B9EB311F8BEF77B8C186
-:10445000BF4ED606AEA7B596AB7A2876AB430CC74F
-:10446000CE234F3F03ED5E19CDED970897928C74E4
-:10447000BB109F778C77C97C355ABC7E03D8BE3C75
-:10448000C15D23E32602F2D41D65577C5FB64F1F42
-:104490004BDF43BE9BD0D85F8EEDCE9120D1552906
-:1044A000E2FDF72EDD645E44F30A07AF778AEFEA98
-:1044B000DC137A694281396EFDC510B9AF69945336
-:1044C000F3DD729FC2E249C777E62CEFC3EB2F35CD
-:1044D000B6A87C37E8B8238EE5BC78E54D1307D144
-:1044E000F78B77A47880E6B1493B07CBF6337EF6AD
-:1044F0001E3DD7B6C6F0F39FE76B8F0F419E81E25A
-:104500009EB59B1ECCB9F6657B3A75A185269F4466
-:10451000DC715260E71BD8E79C344DE5F69384CC00
-:104520002B15CBE378DF7C62E02B6B3A7D6F222D7D
-:104530006A50DF14E3CABA85F02FD6E3CD7FD0E707
-:10454000A11A2BB467E28157E79E5DE9F94421F394
-:104550009BA3E7ED71BD7D97311E772AE8A3C4B810
-:10456000701ED6688FEFE0BB5FE9F4785E2F0D9880
-:10457000E8CA71F179AB1C4DDD1251DAC2BDA8EC6D
-:1045800033AC601FE46D425751B816DFBD4D151BAB
-:1045900019DFE6628EB327F476830F9AD0CF77AE19
-:1045A000E9C1FB394DA305CB4FD37DD906BF393FB8
-:1045B000C958CF358DF6D4237FAB79B4D3B3D1832B
-:1045C000FC9650187194436BE57E4D979A7077E88E
-:1045D000D966AFDC07F97C69AE1B7272F303531323
-:1045E000A13FE7AE51C30EC8FB6A73DE9270793803
-:1045F0000F7C6EED683BD6AFF3E27D768CEB4CBE64
-:10460000F611F8659C73EC0B9C708EA7B6F875AC30
-:10461000FBD4449ACF987F567722D6D5D1794F953F
-:104620007A7E9301FF3A4DFB0CDF9B93E4DE01F9A8
-:10463000F87469378EAB76CBD7CF575AC3DD419F1D
-:1046400047692E607E3E3844CADF8476AE9EF12CE8
-:10465000BF3102E36AB2B97A429E9B56C45840A762
-:1046600009CBA41CDF6D95F32BE8735B02F4FEB35A
-:10467000789FBE3BB3DA5AB481FAE9E414D6847663
-:10468000B4CE1DA63D0FFE4C0C541FC2FA7AAE6E7E
-:10469000AFE6AE96E7C1BA8C917C15D686B129F407
-:1046A000FCC8E6EC81C87337E466FEB082BF0F89B0
-:1046B000E0FF84025F617BFACE048BBB057A78DE73
-:1046C00034E5A56E520E7E18C2EBF93A9EE72DA492
-:1046D000271CC93807D82061E4AB426FD43EE4738D
-:1046E00046ACDBED6217D7DBE7C97CD42EF670351C
-:1046F000E75FDD225CCB08DE427E84D526C4D62A65
-:1047000027974F5691BEEB21C4F6AA74867754B909
-:10471000B90C55F5E6E7CF547918DE5595CFF09EE4
-:104720002A1FC37BABC673F97C55113F8FD63F73ED
-:10473000E3E7B33E71F5245E0FBD506E66B9092FF5
-:10474000E81FA770DD85F34742EABBE4DE52FF08AD
-:104750005D1F75ED23EF03E8962FF9615B35DAC233
-:10476000E737AD8D1990BB71EA89A79F43BCA3249D
-:104770009EF3B25A4423CF931661E173D9D03F0E12
-:1047800092BB2E778ECF8ECC3BBFB14411D608F9A9
-:10479000BAC91F23AC11F669F6D264133C73E93B26
-:1047A0007FEE40DFBFB1AB96974F781CBAF38BF525
-:1047B0007FA5E78FDD79AC873CA7FBFD86C8B84BAA
-:1047C0008B6896B0D5C9FBF18FDD9E9196A2DFD3A1
-:1047D000007E19E7A4BBD89B8F3E8179B842F52CA7
-:1047E00023F823F087E8F989CE9FE215DD56FE0213
-:1047F000F3DAE7F428F49D43B7F72BCCA7F68FE95B
-:10480000FB51179CAB4E97F6EB53D8AF6469CF0AB8
-:10481000A047C3D26E7DFAABB4C05DA8BF25D183DB
-:10482000130DDAAA0E810504AFF6DA3D2AE27A7595
-:1048300082EF5D201A4BBF226033DBB1C64EC988C0
-:104840005B1AE79EE3F2824E3E77451D613F664E5E
-:10485000EFFD22037AA9567161BF06E7349DEDA0F2
-:10486000DF14DE1F451ED034B29737E5AB3C3F7FE7
-:104870003FC4CAE559D873A26B8CF0707C66DE6ABF
-:104880006A0FFD58EBB5CF8FD0BF73F4E7737B5B36
-:10489000B8349E97E17BD83F5CE59D0EF9E888FA35
-:1048A0001C9403A703BF8EF185562562FF777EBE59
-:1048B00055EF5FF67B169392E07B7A77B5DF9CC36A
-:1048C000E7ADD86E19FDCCE93D706557D8EBD5A39F
-:1048D000411D5163F3A4A752BBCAF3DF71497FC4E2
-:1048E00029F3B3CB2E62378C38DD11FC29CF3DF292
-:1048F0007817ED786A07CE3D2CFAD8C1F66BD11542
-:10490000D22E899CE0E0A91CD034C7C5C73E75B241
-:10491000FE2EC2E724CE2521DEBFEB333BF24369F6
-:10492000DAF8933200AB4DC8338D8ECF1ED8F171BB
-:10493000629B71F15DEAE5C5C595EF1361178CF1D6
-:104940008C7BF16C1AFCAC4AE51CEF3355BEB822E7
-:10495000ADADFCB0E8B8F8F9F8B958FD15CED757A9
-:10496000DE71A4CDF879741CF0F1FCE8FD88F80242
-:10497000E889B307D520F6D35B823D92441BFD1B2B
-:10498000F1F3CAB5F4520AE6A53B09FB61A72FE291
-:10499000971FC997F6FDA41E6F3FBD5DE5F5D2E9EF
-:1049A000ED0941F8A715DBEFAFC73E65C52685DDEC
-:1049B000F372D1C0F4223A0A67A41D43BE5B0A9C7D
-:1049C0006B7712F495815FE953097EC8D5C290E2F6
-:1049D000DB4C78B438DD49ED23F03800B96A8F3C00
-:1049E000C0D060A6AB8EF7F3BA1E34DA2DACBB9FF5
-:1049F000E3D2D4EE14FB3B7F88139C27289ADF0078
-:104A00007EC7D7E57AB0AFB830B4B382F33BB6C750
-:104A1000B9108738A6E7391BDF69D0FB6BC897FE52
-:104A2000C9717DFFEEF80E79DE1C78623E1D53CC15
-:104A3000F982EFEBEFBD9F2FF7CFEEC05EE2A0D67D
-:104A4000F60B434D89DDA9FD977BDFE1B2516FBFC6
-:104A500030BE6100ECEE97BBE2783FFECB5D8F1479
-:104A600022CE7C32343A15F26F7CFF54BE8DDB9F30
-:104A70005CA78E07BD4450E6D99483AEB99178A661
-:104A80006C086447CE33996F747CD7B389969C5673
-:104A90003E963BFD4E9CF7ACDC754B11E4B8DE2630
-:104AA000E969DF35398063CC95755E01F9E5799662
-:104AB000C1ED575922DA396C1EF68B6D7B8B7D6800
-:104AC0006FC4A117EFB6F179C15957B8AFBF11F351
-:104AD000F0351BF361711FF7F59C8FD4A072FEF2C5
-:104AE000E26C1186FFB1E4B6840DD80F33F09D95CA
-:104AF0002BE77BD92A45F8685C6541790F4747E287
-:104B00007B00394AE98D83903FD9941DBCBB672A4D
-:104B10009FDF0DE3FE1623CF94E6714F9C73EC30BC
-:104B2000B41D8FFBC119856CEF0ED945007A21F0B9
-:104B30008CCCC329EB2AF3A31F86DCA3BF76E19EAE
-:104B40002934DE133A5FCBA6847B222FA3EC990C89
-:104B5000CECB386197FBA5788EFDE2B281F47E3C26
-:104B6000DFCFA119EF2747C851D91C8F1BEDD47691
-:104B70001EB7371EF8BA4EB1DFBA3B41C06FB53C25
-:104B800097A0E757C5701EB9F15EBFA152EE8C7BAE
-:104B90003FC40D321FF3419BCC577D707306DF7706
-:104BA00061B47FD0A6CD80FF8471C05F5F68AFED38
-:104BB000897D1703DF8589B58CE7095DCE17C6D6D9
-:104BC000CABC70FD1C31DA036ED2F3D89BB73938FA
-:104BD0007FE55846C337C0F7D8B63EC88101BDE768
-:104BE000EFE57AF21F899F8B9E7484517F749B8CB2
-:104BF0005B1FB505BF811E3EBA3E85CF471D6D1FA9
-:104C00001CCCF9018ACB02FFECA8A2C33617FB9596
-:104C10005DEC0453FBD4586141FECEF8296B67214B
-:104C2000BFA1659303E2298E6D79288DD735C29D8A
-:104C3000C47936075501BE1D7BF23FFA44FA2F4670
-:104C4000B9689339EFAE295B98EEC9B97AA89C97F9
-:104C500057EBF4BD66A8B453E571A107BBF2F82485
-:104C6000BD893FBCBEA3199AC0F9134FF750A037B6
-:104C70001E16C19F7F9CC7AB6C37F2E6CB9ED9F660
-:104C800006F66B8F594403FC0FE5CEAD3FC77D1B85
-:104C9000A9BF49623B24C4261EDF51973CA74A1393
-:104CA00096C7BFB08384174DDDDA13703DD91C85DC
-:104CB000E6D7228BC2FD2FDAD39FF3ED881F16DED5
-:104CC00027DBA9EAF8904F09FA6D91F9CA13DA05C2
-:104CD000B7C0DF6B5EDF4DE0FCFA3875DD00F0EF4A
-:104CE000CCA6380BE4A9FCAEE149C341B737550166
-:104CF000FFE38CD5D321328E104DAFE83CF0E0506D
-:104D0000A99FCA700F0ECDABD23DEBF9BE9052C831
-:104D100025E8F2A4C2FBD8A52B873FC472FA864DC2
-:104D2000F4A07E4F84EE4F8CE4CF3D43A55F70FE30
-:104D30003B760FB72FA5F6F2FDD71219CF2D36CE41
-:104D40006B89E6EB65BFFFA47A59EF9F1F7F88FC54
-:104D5000820117D2E18C68F8F9C7F4FDAFB7C7F04C
-:104D60007A9056007C8EEDB82D341FE33EFE740C15
-:104D7000EBAFE3C9524F7C49FA34D00B785CFD5B52
-:104D800096D3B7A7F279BF0541F3778D7E7F3B5469
-:104D9000EAF1F2144F12D69DE56F4A7D48FCBA86BF
-:104DA000DF7FD3C6EF478FA3427FEFFC3C7D3A8E77
-:104DB000E5E27847C98FE33B7AB17D6A4A76099686
-:104DC0009B6D36596F0B65C10F3EFE742F6F4DC43E
-:104DD000778F2787B25C11CF9B6CC19543A43E6D42
-:104DE000C6BA588449D50E467E91603D6FBC57EADD
-:104DF0005CDD003F05F9BD8307721976B4BB304F07
-:104E000077423BB99EFC529F779CB39AA6E793B337
-:104E1000DF13B2438F6BBA7F58B63D3ACF57D6D720
-:104E20001BEFD3BC4B35F28A2DC037644FE7788334
-:104E3000703F43F8962EBF6521F2C74BFDF7DD08A2
-:104E4000FFA9D42AC6DB09AF2645653C9A62C4ECAB
-:104E500029F02323FB89F0DFDE6AED47E0DEB6327E
-:104E6000FC41F3E0BDA16E293FB0A4F4BDB2E5CA98
-:104E70006A7CDFD02F1C284C6BA513F25A91DFD32C
-:104E8000345AAFBFC8B89B6CB23E7ADC063E478747
-:104E9000CABCA0A66CF76F47802F7F51F97CD799C9
-:104EA000EF7393DAB5E1A7B5DA7B7B6B9E2DE1FF5B
-:104EB0000D7C6BFACEF3BABE2B25FC8067CF75E66E
-:104EC000BCF2DE9BCC70DFED66386797191E506729
-:104ED000863D07CCF021BD5FACB3710E19EB6C942D
-:104EE0005867BB1D729D0D18EB6C945867E339D65B
-:104EF000D980B1CE068C75366083DE586F03C67AD2
-:104F00001BF5BD86497D2E7CE134E46B5658649ECA
-:104F10002FF1C3C7E79866D84DE7524EBF28CFA5FB
-:104F2000903C487DBF309EE7C9C36831147649CEB6
-:104F3000A7D4E71DC165F4DE38B7963C0C7662ED68
-:104F400057F32177155D1B39EFB569C52B3DEFA7E9
-:104F5000768D4A82805F51B1F6AB59F0A33AB8B56D
-:104F60000EC3089FCAD8869543386E1F66FDD15878
-:104F7000ED7EF34AC9478EBF14ABB8F982EA4BDA2B
-:104F8000B5993F149D772E569BF3CC2F95771E2D08
-:104F900007861FF898AD39C3C5EBF4118F22CEBB3D
-:104FA000584970619DFE598C5886FB8002AFCA3CFF
-:104FB000B59683369937B05AD92822FC93413ABD29
-:104FC0000D78EEB95CF6C7CFC3AB158BB84288EE4F
-:104FD0005A7313D6D7674A2CEC779F2929286C0F70
-:104FE000FF8FD6659813B86F2B125FDCB715293F7A
-:104FF000B86FCB7C6EA2A3A93DEEDB329F9BE86B22
-:10500000AA9FBA3AD7543FAF68B8A9BEBB90F82D53
-:105010005928F19B47F6C197027819E72D2E01EF29
-:10502000C84FC952022B592F6F50F8DCB87BE9AA40
-:1050300042D0E5048933E20886DCCCD5ED8BB0069E
-:10504000EC90BBB3A9B2FEA8D2F0C55DF4DE496F07
-:10505000ED165C8572D2B2EEC1116EE4D76FC872E4
-:10506000D13CBC5509A541F5140CD234C8D9616BAB
-:10507000E364DE4FDCD9BE5D35FCCE8383DEC847FA
-:105080007FDB55CE9B30E425CB26E3741B689D0166
-:10509000FF6A43ADCCE7DD509B12DB3D62FFC518D4
-:1050A000670BF820502E4B4BE5B89068C038C86F9E
-:1050B0005F06BFEDCC41E9B71BE3E9BE3CDC690903
-:1050C000D5DFBA3386E973585F379CE8F3D20037EF
-:1050D000CE6F54EDCD52E10F58B66FC13A22215533
-:1050E0005B0AB92FD9D0E3AFB8AF6BD17BAAC07937
-:1050F0009ACFD78C491C4ADF39F6B4CD3381E0BB57
-:105100006A1FB7639DBCC81AB4731EE6B60D76E479
-:1051100025FF64EB067E3E7F6B31E75D2E107E5EE1
-:10512000471ED1CF6519E32E2950D6B948BE3E1A85
-:1051300026F56349ACDCCF2379FE33C67566ABE256
-:1051400085FF38AD68A7BD989EDFA7B7734F9F3E18
-:105150000EF2D71292F76DB4BCAECA7BC4A6A932C8
-:105160002FE622F7F34C3D97CDF23DED5C3F5E67B5
-:105170005D1BEE23D7B139527FB4D4A9BC1FD7F23F
-:10518000FACBA953F1BD3A1BEFDE95D81BE4F97FAA
-:105190008BF0E31C817B7A8394AB6CE187FFB7E4EF
-:1051A0002FEFD463DE2DC976BA311F8A46A826F9BF
-:1051B000AC1C1B6792DFE9A29DE91CCD75482A89CA
-:1051C00080A74DE8666A7FFDB47E51FA60606B3D52
-:1051D000EB836151E7000B4C70399577403F89AB09
-:1051E0004CEF958B29ADEDB01EDE24FDD6F25DC9E6
-:1051F0001BB12F5E6291EBA1E99A7C5EB1573E171D
-:1052000022F6FCB9749CC7477CC0746E5BDFE74331
-:10521000BF1C0FECD6C0719DE60CD29744D1F2DED4
-:105220008D76C4D3C85D6E469CB43C4030FAF58997
-:10523000E61A9C1FB14AFAC67B5C5D9765B4CA4505
-:10524000C52E73BE55C5C177B89D91CF185D4F9ED1
-:10525000EFCA8EC07B82E2E57393DB9BEC88074D3F
-:10526000D33AF1BD14D1F79F95859A18CF6BF7A665
-:10527000B9B06F5B1175EF59A7E16E699FF4F83F04
-:10528000EE0D927E42835DC66DE3F75B78FEC97BCF
-:1052900076CECB658945DE1710459709DEF7B8BF96
-:1052A0008E19320F0D74B146D0255A8E40276B04EB
-:1052B0009DE60B49A7F9A44D820477849C45D2E76B
-:1052C00047D26B01FEA0FA057B9520F2DFA2E933FD
-:1052D0005F6B64FACDD7E2FD41D785E3A9B8E383DC
-:1052E0007AE8A71D19F29EC268FA2D100D2BB1EEB7
-:1052F0005D4076239CCC726177F23A4DF1C06EBB73
-:10530000F31BED36A9CF38CEDBF2FA3B3CEF5A3C2B
-:1053100034AB211782EAA97DBCCFDDBCAC8D3CDF6C
-:1053200029E764FCE4BA73562EA74D30CFBB6BCF90
-:10533000A5F1F31F4B970AD019728EB85E621BF766
-:10534000E621CE9778E1788DFD10430FB7FA75E628
-:10535000BCE58BF97FD171C2DEC3F538E12031C8DD
-:1053600094B77C11BF233A6FD9B0E32DF1D24E8EA2
-:105370005373DEC4D9C6E257555EA7BBA78FB7F0FB
-:10538000F9F157E57D77DA8AB34D904F2DC1C27A96
-:1053900070714257BED742D3E376463F59D529694B
-:1053A00088FF15C7B8381FBFB85A2D82FD2AA676C8
-:1053B000EE88762B9777CB825DF8F4EE5E8F0668E9
-:1053C000BE7C7A5B6A1AE2FE9FADB0A592E63CDF36
-:1053D000EED315E3B2909FF1D97D8EE9C136E85343
-:1053E000345CDA81F23B3F60BB75D2F27AE2747AC8
-:1053F000BF6CC5EE4484EA4A57BC33D8452EC5E19C
-:105400003CED9AE1BCBFBA610BDF07EDDAC0F709EA
-:1054100068484A6E8F7D8815CCF7458ADCAFBE554B
-:10542000097F7125B53B11735FE2F46CDC6E2A389D
-:105430004FE3ECA604FD3C5A35E70D9D88257F809F
-:10544000DA1F8991F43CB233C1C37762780259BC48
-:105450007E6B2FF7774A2D75D7019F6B52356DF80C
-:1054600020E011DC92AE723B3EB7AE55F7486A2B96
-:10547000FE61945B743B0D7F1B25FC6DE4CBC0DFAC
-:10548000060C7F1B25FC6D3CAF5C6BF6DF6ED7F71F
-:10549000FB8C7870979A662FFCDD4081E8ED673BC6
-:1054A0003BA1E0F7B05BAF4A7F6189E259D5C8FE06
-:1054B00052422DD69D3556E967073E91E7A22082DC
-:1054C000D04FBF50FB7AB09FFF50DC9D8FA1FD52A3
-:1054D000EC0FE5E11E53F2BD22E4F5CA734E1179DB
-:1054E000EE7634396191F0186786A9FD3857B6A970
-:1054F000FE27E97D4CF53F757B4DF0D5BD879ADAE7
-:105500004FF48C36C1D7E4FFD4D47EB26FB2099E7B
-:105510003A7E86A9FDB545C5A6FAEBA72F34D5CFAF
-:10552000D06E31C13796DC666A7F93BFDA542F8420
-:10553000FF09D0C71790F7AAD561FDE4C0FD2F4E33
-:105540002EA9FE0FC8631E4D22CDF7AEFCE5677C89
-:105550008FF57EE435D38C1B31C6E26F2B8EFF07AF
-:105560005DFE6347FAB60DE7756E03DF8B89D82DB4
-:10557000E46E1FECD4A0D6E79DAC46DCAA2143DE46
-:10558000876E6E7FB17623E2F69F7193C8F5AC3BD0
-:10559000739395F4D78821FB73BB21EF79C4E0594D
-:1055A00056D2372386EF7FB62BC1FEBA3B6771FD1B
-:1055B00015FBCFA0FE1F75C3243C55B06B72FB8852
-:1055C000BFDD84FC941157765DED91719136CFB7B4
-:1055D0001B25E88473E1A013CA30C93DCAFD24F736
-:1055E000280F90DCCF23BD564F728FF220AD33F1E0
-:1055F000FCDF689D89F2755A67A27C83D697281BC9
-:10560000687D89F2EDAAE95CBE5BA5F17BEF579559
-:1056100070F941959F9F7F54B594CB4FAA02FCFC33
-:10562000C3E1328E108F7B9313FEC9BDC97E17DF95
-:105630007F50A3DB2D51A7E7D5ECA7F52BE8D96860
-:105640004DFEC2D9BABF78F1F5BE557C11E1B74D18
-:10565000B6FA3E97FCEDE462BDAF3F2FF56AC7A0F6
-:105660004FDECB9EDA235785BDF3FF3989EADEB3DF
-:10567000B47D9FE43E5D5E3E1EE13B8DEF8D741E6A
-:10568000E2FD74770679ABC31956C07F65A08C5FC5
-:105690008EB436D4A0BEE63BE1C6BAF9A584F7794C
-:1056A0001FBC86DC659C3F56CEC9F5CA287DFFBE6F
-:1056B000E63BB97F3F0AB853FD4897ACAFB9992C88
-:1056C0009D17F521FEFE289C7696E7DB4C793B631F
-:1056D000CF358CE1FA78BB1BF9A6A39C61F93DA7F5
-:1056E0007021BEFC52C21ED9FF38D9FFA6EFC2FC02
-:1056F0007DAC3E91973DD2D98ACF32C6AF41DE37DD
-:105700009723DBD7E8ED4769D47F32F0F34BFC8A6F
-:10571000A9BDC49FF5DC287C3319AB6D591F9B2EA6
-:10572000CF278F3DA7D77BE4783B58258C3325A81E
-:10573000CF4CD1848FFACBCC141EC4DF46A536647F
-:10574000707B3D9F21C12ABF97E491F77175FFBB24
-:1057500026F7038800C0DFC84B32E66DE776E10C20
-:10576000F8799D17DBF97B99EA4E2FF4F5A75EAD2A
-:10577000EF08AAB73A2D3CBE1A9F3C2FFFD68BEEFE
-:10578000CEB85F74B2EEAFFF13FE5F81F7473AF712
-:1057900049FEE392B7CC5658994FFF0F6D93FF9295
-:1057A0005E242F183FF19FF9017EEAFC570CFAE8BE
-:1057B000FC3FCFAF6591F5BA7C5CC8FF90E4B72E93
-:1057C0004FA39C326F02EDC1FF9156290F35313244
-:1057D000DFE3A584C287714F16D1A608F1F991863F
-:1057E000BCF8E5F9E1FFADFCCFB3CA7BE41C654E24
-:1057F000BEA7EE52F230BB5914E2DECD8D03B57D6B
-:1058000098D7C5E7DCF580E78AD18570CF8DFAA7F8
-:105810002E52AF7DDD6C036C3C7F1BED06B5D65B75
-:105820009D6FC741EF19DF31DA7DA57FAFB5DD4050
-:10583000FE9D8D25E342EB60BFC6575B396E4D9EE2
-:1058400009C307C99EC97C4E5FA2372D32FFD373AF
-:1058500060711EEE0B95E7B744BCF4ABDDF41FF4AA
-:105860006AE1F745CBD19F50B75BB1EE388B7C5ADC
-:10587000FA4E61AAD93F1F1FB5BF7E55CE97EC8F58
-:105880005F75897BAB7F3742F7A7B345F67FF2DEC2
-:10589000D08747B07EBEBC7B437B8B3A9683B1C535
-:1058A000329F8BC66F1988B88D4FF801170ABF1544
-:1058B00072305ED45AE5BAD277A2228F57ED4C9F50
-:1058C000AB45989F4F24830263720D890FE097E3E5
-:1058D00026CDC47DC06372C774C7F388FBF3FE0096
-:1058E000FC2A54ED6FAE88FBF3F68F95F36DF1B59E
-:1058F00032DEB4DFD9AD4D3FF455B2B7DD7B802E3B
-:1059000082CB3F933DEE4EE37E85EC31E0AB7A57A0
-:105910000BBC57E836E71D19EF5FED1A23AC2917CA
-:10592000B777570FF86327D0F9B5E45E63C1AFD7F7
-:1059300092878C453CFEB5E40E16593AEC5CF67F36
-:10594000AE7B5BF819F3A3B5BF42EECFB8FF776C1F
-:105950007B79FF6F345DAF1221137D27E8F4FD11D1
-:1059600074FD087A349AAEFBF475C57EE73B7B8CF8
-:10597000BC29C493BB2F6F60F8569B9C07E5CF4DA5
-:105980002C405EF4E2F7647EC751A002BBBB7438C2
-:10599000E33F6AE95061CDE5FDA800E85DE6947457
-:1059A0003C19786900EE29AF4FD18E83AF5FAE53BB
-:1059B000F9BCFDC96762381E7724F86C22E869C813
-:1059C0007199EA5ECDBFA7F19A2AEF59FAFEE52C4C
-:1059D000DC2B7A31B92679FE7AC4A036E4399EE40C
-:1059E000B9FF85F22C36C97B0CCA9C856DF2D9585B
-:1059F00077BE30D0C7FAC225C2B740FE2B845C1FE9
-:105A000055385F97F754128C73AFD17ED5E0586A42
-:105A10004FF576A7CC1736F89DE990F75866C6097A
-:105A200017E22042CBED0B7CFB76F7C58DE4FCC280
-:105A30009CED91796BA3C2FD78DF79FC4195F3DD94
-:105A40005F8995F7B837123F14F24F7FD2CF1FDF2F
-:105A500095F8983C444B1B8971A9DFABE8F7F51E1C
-:105A60008A48E1F8796E3CAFB37FE47A3D6BA4AE2F
-:105A70005F068801FFF4F711DACB7B8417BF9A1B0E
-:105A800004DE8BABC9AAA5F2EF5CF03D7135589FDF
-:105A900067B7EA9D51A227FFFEC598541BE799FFFF
-:105AA0006FFB7D844CA1F1FCFBCFFE4EC278F9E880
-:105AB00082DF49C84C5C75404B6DFD9D8CE8DF4929
-:105AC000C8D4EFA7166E693F8CDF47B852F8382F5D
-:105AD0007F5CBAD9AE8C718D3EE0E2D21CEFC9BCBE
-:105AE000443ED74D23F5739D97E27BB9D0F92ECF75
-:105AF00075420EF4DF3B09423E8DDF3B31F86EFC10
-:105B0000EE494D7BF9BB27FF6ABF7312CD9FE8DFDB
-:105B10003D89E64FF4EFA08CD262994E63CAE259F8
-:105B2000AE0D3E4DA7FFD81FC0B95CE5BF9F5FF724
-:105B300047CDD3B362F520DC537ABA58EAF58BD956
-:105B4000FF695EDFEFA16FB6E97ABFC629E321BE28
-:105B50001AAB881925703F21E7CBFEA246DE03551C
-:105B60006395F18000F115F7E27D1BFB0F799F2310
-:105B7000F947B68E88CBF8F9FD80DDE9AAF144FC3F
-:105B80000ED652791EF89045FE9ED4EC1CBF82FDC5
-:105B9000CB4E5DB5A7A0AFD245D1CEF91C97F70F7C
-:105BA000817E9FF5274716EA677591F7478A1CF9AA
-:105BB000BB4106FEB332655ED6B323753DEE9179E7
-:105BC000587B46CAFDC0048F8BCF3514E7083DBF14
-:105BD0005564CDEA0F39FE84FDF816B7F4AB1B6DA2
-:105BE000F21ECBC0AB329F679DFF6DF6FB37935F14
-:105BF000AB4AFF66EDBD1C674814D8C77D2CA6399B
-:105C000019F8F75A2B4CFE429FA0D39497DC6FAB48
-:105C1000CB04F70FA59BDA5FB1D76DAAF7867B9B04
-:105C2000EA730F7A4CF0A0867C53FB211FF84CF0EE
-:105C3000D0C6F1A6F6C38F1499E05323BB4A3A416C
-:105C400026693CB396B882F25E7C1927E96297FE1A
-:105C500054CD6D723D61E4AF6BFA3C88CE5FEF6C62
-:105C600095F9EB76BFB46B5ABC5CDFBADA0997CA18
-:105C7000E7621A18C6DD109C371E30E7997772CAA2
-:105C8000F59565AC5C7FD8F53CF3D8DEF2DC8B9102
-:105C9000574EEB0A1FE8DD5D34CEE0DF2FD0EF1367
-:105CA0008D96E7BF8FD4EF738AC2BB8B5D9EA7AB87
-:105CB000B9CDCEFBE75ABCBD4949BC109F6E7A7E78
-:105CC000E46667DBF73E39474939BB21AF488CA210
-:105CD000768F92D962FFEB82FE3C8DD07735BFB2D2
-:105CE00073DEF8A5FA9B75851CCF4C8B65F6E41C1A
-:105CF0005E0FF23940A3DF74F44BEDFAF874398F7C
-:105D0000EA6F565233DFBB2692EC6EC8AF16BF92D5
-:105D10006157AC4856DBA07BEBB90C99A77FD3EA5F
-:105D2000D0BDBD08CF99F65A9BBC702068833C4C0F
-:105D300028203FD28BF8EB43EBE3891F8FE207EC7F
-:105D4000C8CFE8B2AFDDEC4077F899CD2C0F4844CE
-:105D5000C17E22FC4F75602BDE6BAE9479DFBE51A5
-:105D6000C2B8FF80F16AD1E3232D2274FEFC44A067
-:105D70000D79D3E2EBF91C826BB194A7CE11E7AC9D
-:105D8000B0FEFC9F3A2F21B0434AFDD86A853CE71C
-:105D90007809FA19E754DCB7D88A36C6E3BC881804
-:105DA000AF44D0E1892BA55C2E061DDACB76D04717
-:105DB000176B477E5F12F6175A843BC97589B8FA8C
-:105DC000FFC4F833AD32CE90E594E7453A5B35D663
-:105DD00017F6DEFA3D7717C8BBAE37F4385927AB54
-:105DE0009CF79D3C725E5FA8170EF0F7ED9ABC37EA
-:105DF0002D9ABEFC2F22AE629C5F891D2BF588A1D7
-:105E000017CE9F43E921D7A1365D3F04BB5B38EF36
-:105E1000E0AE04F33C7E7C94A46FA13E8FC9CE27F4
-:105E20007A079BF484C0BE5ECD0A95F504E9C97A71
-:105E30008DF02CC6BD2CAED6DF7BBBF90169C74601
-:105E4000F98A1EC4BEC99C3536B181F715E4FDB090
-:105E50000BF438797120EA7E16DD1F3FBB5A71E1E1
-:105E60007720E6AE32D72F88FFE213AC1F6F8EBECD
-:105E7000A7C6D8AFBB441CE0FE51BAFDF7088F9E01
-:105E80007FBF0CF89D0DCA7BAFCF9F57D2E33F2D4C
-:105E9000C167257C87E07851B45F60C06EEC9345A4
-:105EA000DCC342F48DED0DFBBEDCDA667EA341DF80
-:105EB000F3791EFA3E1D95CB56F07A46E637903EB2
-:105EC000E07DB913540F3FF044E00CB73FB12B868F
-:105ED000F34A4E7A1B0660FFD6D8A7EBAEC97DAC5D
-:105EE000965D0932BF21DE22E1ADF21EFB457F0F38
-:105EF0000EC03AB631F0ACE99C83D668DEE78B2E53
-:105F0000B5EADDBCDE3C9CA7D58D427EBDD5E3F471
-:105F1000107C77FC7EBEA76B02AD1FA1D79097B215
-:105F20002255E2CFFA2B7046D2CF2FE9770D397A7E
-:105F30009C9F27487B228E2968554B65717828F7EE
-:105F4000FF63F7C1A69EF3CAFDDF73C3F97D6DD56C
-:105F500050867B079B477F40FD5EA7C5BB1147BAB4
-:105F6000B6E617E362E9D38DBF8F5FC16567F3F9CA
-:105F700001A3FC58B7238DB6B6EB27E8FA67E19585
-:105F800086BE96F2BEB85AE17DB5C59071C0F7CA1B
-:105F9000FB390DF84CAD0E8F93F092151286698285
-:105FA0001F3C47FFDDB32D7AFC05E34789F1232E23
-:105FB000B05D8FCF60FC28317E3C87BE020C7D0532
-:105FC00018FA0A30F4154AE82B3CFF3C790CEF6BC9
-:105FD00063DF6E6CC47CC2BEDDD888F9817DBB48AE
-:105FE00018FB7691EDB16F17598F7DBBC87AECDB4A
-:105FF00045C2D8B78B6C8F7DBB4858E4FFB415867B
-:106000005EF34D36C153693D3036623E63DF2EF29A
-:10601000FBD8B7337D4FBBC5F4FE8D62A9E97DEC9B
-:10602000DB45B69FBD5431EDEB09D1CC767DEEDA80
-:106030001496A3D7BC451957B6E7DFA9FA99AD2B3B
-:10604000EB078E632C2E8FF5487ED78E97FCB7C852
-:10605000F3114A33FFBEC0993BEC121E67CEDF3608
-:106060004AEC7B8DB5C97D2F94D8F742897D2F945A
-:10607000D8F71ADB43EE7BA1C4BE179E63DF0B2566
-:10608000F6BD5062DF0B25F6BD5062DF0B25F6BD75
-:10609000F01EF6BD5062DF0BCFB1EF8512FB5E78CC
-:1060A0007E88F09817A1C7E0AF7737AD33490E4D22
-:1060B000EB4C970986BF1ED91EFE7A643DFCF5C8DD
-:1060C0007AF8EB9130FCF5C8F6F0D723E11B46B91E
-:1060D000799EC16F8F7C0F7E7B24DCBF36F067C456
-:1060E000D626AE3B7500656382F228CE1BDE70E5D6
-:1060F000B6D9D8BF6C8C51B29249A7DBAA77CC1E17
-:106100000B7BABE73F0E10CD16E81F0D8BC93C3E55
-:1061100067C879A5FDBFCBE0FADBF5FB11F81FF1ED
-:10612000DDBB4BF0EFCE18FBEDC6FB1E32DB288D3E
-:10613000F6AD70DBEDA2FB37DA716E55041E38D177
-:106140008CBC19EF1DF103B10ED9A2FF8EF096653C
-:10615000322F3A5AAE7EABEBA72D969DFB710EA661
-:10616000B958F1E0DC47F75A8DCF99F59F292CAA51
-:10617000B7753CBD1E4BE4BCDA5F5C29ED9181BF75
-:10618000111F257DC1E7074734378C49A2F65A60B5
-:1061900034FF0ECE04BBD07F2FD83F0CEBC97E015D
-:1061A000C5B73142CEABF5EF690189C7138F4D9268
-:1061B000EFC5CAF79E782C91FB9FB45CE13CB3110C
-:1061C000DB850FE794EFD1F1EFB73DACA2BFE2E57D
-:1061D000B23FE3BBC5EBB2EC38CF6DD0AB58348ED9
-:1061E000C57DD2224FC19DB2A2A75563BFB4C34C97
-:1061F00097057ED0E59E831A99973C0E7988A24E2A
-:10620000F0BDA113F3DE328D97C93518BF6B2A7824
-:106210006DA8056EB1A0DF49448014C49309C67807
-:10622000344DF8B389BED74D2F667AF79E2914D026
-:10623000BBCFCC0D96547AAF9FF69205FE5AFFDA8B
-:10624000462E8D71784624AB8027D85CE380FF848E
-:10625000710AEB8FE83C1EF8070C2FB7B13D37FCF5
-:1062600087C509E7F37CFE8A3C9F33076D9CE77383
-:1062700066F959AE2FDE1DC3793DDA5A85F59AE1EC
-:106280003718793B65B7BC3718F439961DDC92DCBA
-:106290008DEDFC1FAF441E4BD79D89381A7762F9EC
-:1062A000EEEBE0529E59BE5BFEFEACBEBF63FC8EC1
-:1062B000A9C8F1713E98E1070AB5CE1EB98F63FCFB
-:1062C0001E1AE94F6E7766AFDDC5BF47A7FF7EA9EF
-:1062D00011F729FE4B6E3DE85ABC5EFE9ED99C55D7
-:1062E000F7154E2778BECF19C6EFA147E7632D8C6F
-:1062F000F2032FF5FBA5C267F6FF2EE6EFFCFFF2D7
-:10630000BFB7FCBF73A5703700800000000000001D
-:106310001F8B080000000000000BED7D0B58556539
-:10632000BAF0B7F6DA37606F5C080AA8E002454DAC
-:10633000C936225EBA2EB9282AE206C4B441DC204E
-:106340002676AC21B3911ACA8D7B4348D6C04469E6
-:106350008ED5D6D433534DD1654A27EB6CB59A2EE2
-:106360009A263975A682ED25B53BE9F1D49CC799EB
-:10637000CEFBBEDF5AB2D776836633E73FFFFFFC22
-:106380007B9E66F1ADEFFE7EEFFD7DBF25136D06B2
-:10639000369EB1337B459F98C258C5BE3DA52C8E15
-:1063A000B1533526C6A05C562F322CB367992F4DBA
-:1063B000C0728E2102CA657F501C82CCD877ABAAEE
-:1063C000F7BF064DF7AF823616C68ABF1FCC5826D8
-:1063D000631DAB642A977E3F86B158C60A0211F44A
-:1063E0007EEEF789F4BCFEFBCBE87DB10DFAC1FC73
-:1063F000811DCCB71AE63BE5B650F9D44EE6C3F999
-:10640000F1173781B111F8070C99C1A43C368CB152
-:10641000D18AB007BAB359DF5F45E3CDFB3E83C6EF
-:10642000BB667C45C300E80FBD1D69D07ED6F8F77A
-:1064300072FAC17A5DEE295922948B8DFE39387E2D
-:10644000B1C3C4DC29F8FE564302D417325613EB0D
-:1064500080F650C6FDBA5CAC468861ECCE89D06946
-:10646000009459CDEB03100E5B98632BBC9AE7AAFE
-:10647000C8C67663CA9820C2D4E551ACA61DF7629F
-:106480000B64155DCED80FF8BB0EDEE322AFC4C59A
-:1064900027BA14A82FEF077F0EA26D29CCCA983D0A
-:1064A0009DD75FA924BABCC3E1EF96758A7520CE4B
-:1064B000C77F43CDD00EE611EF34FB5603FC5D36AB
-:1064C000EB61612C54B8F394C028DEE68754C6868D
-:1064D0004D823FB2E05C0C86854E9867C18A0C7392
-:1064E000657ACF3ACCD9D9F3A6C03EF2F0BC61BCF4
-:1064F000E56B4C3E4B0A3ED3E299ADA75DE87311C4
-:10650000C0578EC575076E17003EF314A6E4C25C33
-:10651000F399B62FE667B08E1BD4B2D7AF049A6C4E
-:10652000040F2ACFF18F70B9611D375B03530193BC
-:10653000D8CFD36BF2130D8CBD61E270B5985CCAF5
-:10654000605887697B867FB08CFB90E83D330612EC
-:106550009D76D8C7DAF6FB46C27BAF22F3FD995B86
-:106560004C0C07623E9313E0BC289D293E84BB91EE
-:10657000E3D191352F3DDD2CF4ACFF8889CD6B0F35
-:10658000B3BF3AC540F36C03BC954732F6DB5556B2
-:106590007A3EB14A6232A0E053AB12A8FC34E0313B
-:1065A0003EDB578DA2F7CFAD7250F9855593A8FC0D
-:1065B000E22A85CADB57E5D3F38FAB9CF4BE60B407
-:1065C000EB1605D6FB9041397C0FEC6F90D8C210CA
-:1065D0006FF1DCAD137ACE37A2E5BB0A3C8F2A9B64
-:1065E00059C6755701685CB08F4AC5EAA8075000C4
-:1065F0006C1B13A05C2EB2EE6647B873E7707C6C20
-:10660000FE7F2D3540BBC7EE8A24BAD5E057663EE3
-:10661000F0BA35A5077E1FD5FEDAC40C746C69325A
-:10662000CC7B434D84A33905F1C3E9C1F546A53BB5
-:10663000CC2E80D7BC298CC6BD32D5D988EF6F5EF1
-:10664000BBEBD10FF0FC76A6985D709E15DB331A7C
-:106650001364ECE7BA5781761536C98C78778B3797
-:10666000C62CE3F9C7033D206EB3EEE4627B0FDC7A
-:10667000B728028D7B7D361FFF1B3C1F6AD7622A1D
-:10668000D2B5E3E7733E3D1C9882F0F200FB581D43
-:1066900083F4F0E2143C77E94EA091C9B01EF63EB7
-:1066A000D59B1398E489391F5E83D90101EB13014F
-:1066B00096EEC93DF06B1E55497CCE043428C604C5
-:1066C000C38F113D85E2CFFBB80F804BE50A6175A2
-:1066D00003CC5FD526FA0401E9ABE00DA2AF564129
-:1066E00026FA7A70983991E84D90907F15F497A723
-:1066F000C643FBEEFB0469B38CF40A738DEB19B748
-:106700006AFD64A2B72A1F3C337BA7CB9FB5EE4935
-:10671000DA21E3312A665C6795A498FB07D1FBA2D6
-:106720001681E822B4FC9A22723A626F9A106E6562
-:10673000C365C19381FBE1F8B160458AB9D286F5A2
-:10674000CC6F807515A4B237B05D772BAC3785CF91
-:10675000332E68DC4A1C37685E68BFD009E57715C0
-:106760003BC1B54292CD8928572489D657B9629743
-:1067700009E1B308E02C64203C1C661B8EBF14C6E4
-:1067800007F8DD20F9F3B0FE867499D5C339547A41
-:1067900033CCC89F5C6BF93CAEA618F3E550AE3025
-:1067A0004AE624289745323A37589F0FFB57013C59
-:1067B000FADB705CB610654B285C2AD4F556B5C47C
-:1067C0009817EBDEB79AE474E26B4A387E214EE10B
-:1067D000785BE92D4A5E87E7EDB64B44B746C5ECDA
-:1067E000C075A9F09DDFB6CE9412D4FF5B158FC59E
-:1067F000291CCF0A52FD6902EEF7D60807AE77BE14
-:10680000D46242789E83F3831C0E8B257F1A8EBF41
-:10681000D8CAE1700E3FDAF4E7DAB33E0EEFAAB65B
-:106820000AA2BF1B8DCEE475D0FF4658A71B9EF36E
-:10683000D7EF4A13F009F42E207F905CC9CE207A5E
-:106840003BFEE0F5C9B47F583FC2DBEE90A722DFE4
-:1068500001BC21B9ABE14F7926A76BADDFE029463A
-:106860009A77F0944BA3D7AAB5EF51FD22A0579485
-:10687000B766F68280F5666084E1E837094786F6F8
-:1068800036C01F77620FFDCE6781F9C85F17AD2D47
-:1068900062AE20FE03F2B6E6B930F09A87EBCD2265
-:1068A000B945E70D74F81AEBDF539FAD9E7759AAEF
-:1068B0009EFE713C1CD7A1D567FBD36E4DEF69AF2F
-:1068C000CD5BD69FF7437A403C74A8F0C1F6CBA9C4
-:1068D0003D2F833C5EDD80FCE13ED16711F0F9780D
-:1068E000C3402C3F0BD216B6F6C5F297DE9D0BCFF8
-:1068F000CF1FDA548EFBD3D6B118F41DE41337AA98
-:10690000F2B9CA1F9E5FFC6292EBBA295941F8F3B3
-:10691000C0EF4720FFFEE2E977D210CE1FDB39BF80
-:10692000FBD9EF1F37B1D49EF55736BD67AAB00526
-:10693000C38BF3BBE65107E9FC168DE2FD1679BF68
-:1069400025F9C5407EA5A59C7FFE15DE6779FB5A1B
-:1069500007B577D9FECCCF7F1093C4C40B9FB77611
-:10696000BEA1E7FEA8C9E94F407D34B54547FFA168
-:10697000FBAF50D75D3585F3B71B543CBEA1BA952C
-:10698000FA5536553C8E7AEF7C8D7EABF4EFB5F33D
-:1069900039B5D644E7736A6D5A23EA8BA7DAF9F959
-:1069A000FC8BD83E7625B4FB62D9D65B1253492FB7
-:1069B0004946BD04CF07F5D21B55FD74099C0FEA6B
-:1069C000A761CEE736D4CBB4F292C7F8F92C7A7A25
-:1069D000DF277F9409FFF8FEEEB3F890FF56B63F2D
-:1069E0007BE84A783FBFA9D59402ED3C5352083E5C
-:1069F000E7F87C4D86C4A2617F4D9B4CC8073CDA0A
-:106A0000BE43F05C832B33723EF328E8F0CD315C5B
-:106A10001E09FD7BDACF674A3CF211E61EC2B6C6FC
-:106A20009DBFFEA7553A2A48759849AE3544B1CD69
-:106A300012AEA3E27E36B677F9753482D305485D8F
-:106A400005E9F3E8144732D285A6BF86B6DFAAD29D
-:106A5000D7E0A8F6F9B8DEC1B120DF01C4BF895480
-:106A6000B251EFF9CD9556C9E3C0FE2E19EB2D5664
-:106A700026A17CDF6C90C7117E827E7F4F22C232BE
-:106A800090857C6FF8B2C0B7B83E44A78871FC69A6
-:106A9000877DBFA3C20B55F181FCBD1F9F49C67600
-:106AA000E25391B51CFF42F50CAD5FA87E11AA57C9
-:106AB000F4B6BF3D17B9BFA3292E1FC98908266D9B
-:106AC0008EA1FD2DC7F2B9FD8D628A01FA97FFF202
-:106AD000F24DA84F1EAD57769BA1FEE81D36EAFF8A
-:106AE0008FDA6FE83EE75755E8F6798E6E5A44B272
-:106AF000334EB56426935D07360F83FAA3B7461865
-:106B000010FE4753B8BE0016A01DF5C46DAA1D891E
-:106B1000FA383E511F6723B93E8EE5A755BB12F5E3
-:106B2000717C7F5CC5BFB248251AE57277BD5DDA1E
-:106B30008CF0F073BAE9AC1D4670003D81F36355EB
-:106B40002FE89402F6FE417C1AE4C77D28EF58ED49
-:106B50003086F65D67CB51BB211DF192AF4F6BBF05
-:106B6000C2D4C2EEC0760F0BBEAD306ED48AF7F23F
-:106B7000E2514EB7A56408D06F41ED69E2870B6C16
-:106B800003658672DCE66A9C88F5EB53A4D5D02DAC
-:106B9000AA2DA3B316FA2FF68E24FB798520937EB7
-:106BA000CFEA05B22B996A1F2CC1BFA0BCC4F6C6A0
-:106BB00070955F1A905F2EBAFF8EC644281F36B0BC
-:106BC0006E11405360289A8AE5820D310E0FCA5B20
-:106BD0000FDF0FDB087CD4DAC3474F4F72B26CA4CF
-:106BE000F7B3806F30FE68581BDA512B4CED0AAEBC
-:106BF0009F81DEB195E17A9DA4C7AF52F1A2B3EDBA
-:106C0000B05D56CF07F5F3E1AEEEC3F7E0B9DA0CAD
-:106C10008E6619E5BBBC5F46B8BF2532D4678733A3
-:106C20005EBFDCCEEBE149FAF1F24DA28F917E5CC2
-:106C3000363080FAD77A91F8E2E24D250351DF58D9
-:106C40000C65945F1B702AC0A7C6B61CDEAE35EF7C
-:106C50002137F0D3648139911F1D33068A101E2716
-:106C600037C5F7AF477DEF66CF0806F5559BEE4970
-:106C7000C6E7C94D11F3908FE74A45B931A8FF6CBB
-:106C80008CC940BB5FA3B3F46C2E0F6EBA39271EBC
-:106C9000E5DDB2BFEF795402B9BA187054423F48EB
-:106CA0007B94CF0D4D96ADDA9E2C026AD9E35C231E
-:106CB000116EFF62D8397732CA61C1B72D91DACB34
-:106CC000F1521F76F371B42B014F6FBEFB431AE7ED
-:106CD0002BC3DEC2F9D07FD9CDCF47E338FFF260B6
-:106CE000C70409DE1F1BEFCAC4F13F17366D93D0EE
-:106CF000AE5DBF692CCA8FF1AA7D54D0DF39773ED3
-:106D000087AF63B3DCFB7CD5DB0582A7565EE0EB87
-:106D10006766A897FA9959C2A7C4480F3E29B25A84
-:106D200094EF9A5EA2BD9F96CDF9CFC97E2DC9780A
-:106D3000FE4BB7AD4B46F9F1999D975D5BFEB4F8FC
-:106D40004E5887ABCD2031C03B979191DEBBC8CD6B
-:106D5000F569560DCC24B167FEA2EC2882F3D2F57A
-:106D6000993AB9878E197CFF9991E5E33A867ABA08
-:106D700033507FFAC8E85F8CE7FA11E8A7E8974933
-:106D8000CFE6F8F7518B3815DFBB57080CFD4F1FC6
-:106D9000B53C6F1FCEFD28E4C7602F9B7C5BA1BD77
-:106DA0007D7CBB1FF9DECD2FC48C4330E689E9F131
-:106DB000883FCB7798A60EE6FA145AD36C99D16F18
-:106DC0000E776E37A97AD4B9F20BCF9A11EF973DAF
-:106DD000D54A7E0550537CA8DF2C6B7FF68D413061
-:106DE000DE2DDB2B32711EADFD2D2F703844B080AF
-:106DF000B92448AFAE18D5BF7130F0C8E5D9F9AEA7
-:106E000007511FC273BA12D424655245BD119F1297
-:106E1000ED9319BB491F07FD8AECEB9BBD7CBC9B26
-:106E2000471D6C4CA57D15C5B2A0F3BF2DDB44E713
-:106E3000A5F5877D533F8FF5EEC702B05EC563644D
-:106E400011D742D9C83EDE86F063D1D256DC879195
-:106E50001D7B039E2BC57EAC199E1B6B96FF2BB52D
-:106E6000AFB748223C3D37D73D1380F964913919BB
-:106E7000F47767D7D0786E33973FEBA29E7EF846C3
-:106E800028D7CEB13900BDA11C4DF0D9F90B03F1C3
-:106E9000F944D6BDC700CF78065404001A92EA6AB6
-:106EA00021BEC3383F5E799BEC437E0C1C5C403CAA
-:106EB000FFE6951399B8EE6B87064E235E99EAA715
-:106EC00057E402FDAFCF56E1921EC8C4760376ABFD
-:106ED0007CCD7880E4A32941EE8FFA8A1FC7C2F5E2
-:106EE000FDD54078B053F03F8EF36A70DAA7D2FB3D
-:106EF0007319AE4DD9F05404D3ED7E683F5B8876AC
-:106F0000E07E0FF417D3C60D433FC4C72938AE1B2C
-:106F1000D0561CDCA3C766AB4B370F9AB41EE132C8
-:106F20000500CAAE065B26BD3F3342F95E66E8B691
-:106F3000C03AB2BBFFB2A91ECAD2AFFB3111449511
-:106F400027229965C3F8C26ED828EC6777FAEE4518
-:106F5000B8CE7BBBAD0CE1C4AC7A3DD76C48F4FF36
-:106F600012F1B926DAC112500EB567203F62B7D8C8
-:106F7000C83FB3E06C20EDE72897FEBA97F4F49F82
-:106F8000A5BA5E46B80E1295C32EA8BF57F20FFBE6
-:106F9000158E5F1BE5A8E7728405AF7FE71D7F8D27
-:106FA0008E857EDF748F303E03EDBE51AC0EF4E76C
-:106FB00075DE39E6B5ABA07CB52A4F42D7F54D82D8
-:106FC0006C44BBE39B6EAB1FF5906F6C06F2736471
-:106FD000EFDCF321FA21B3AD36BF188DFD4C5F060F
-:106FE000CB1B762029E6F8181231EC0780E74055D4
-:106FF0002E5DDB4F6F3F7666733BA853E53F46D966
-:1070000041703EE536B266C44306659CD768959AE2
-:10701000617DAFDAB62D40FFD5A9EF53FBA1DC3877
-:10702000B573583F96DE3B5FEC407D02F484884C9C
-:10703000E5533C7F4DBE96AA708968B9DE84F0F0B6
-:10704000003CD0BF566A33F82DE85F9DA38703ABA1
-:10705000ED2E47BC61866807D20D9E2F9EBF2C186F
-:10706000BAD955E79FF7756725FF2FA1BC00CE134E
-:10707000E15A7EEAF8E5BF62746EDFE23AE01C1B7B
-:10708000AE603DE7F7BFEDBC98D1D184E7B052B414
-:10709000B7E039788C5CDF73036E6D8DA16EDBF029
-:1070A0005C567A86D3390DF4009F403B0598DAE6AA
-:1070B00038E42B07A9FD56CD9F36AA86F84CB9C7F0
-:1070C0002221FCBE8B8CA6FE0CCED534281C9FE161
-:1070D0007CA5B68A115F59985E23E0B927E00CB011
-:1070E0009F4E43C08EFB0C44801609CF6B725255E5
-:1070F000FD1B3882EA67C5FE8FDC61DF8CFC46B47D
-:107100000E7EE4188822D6D41D3D1AD6D526B07638
-:10711000DA9749E51F4B6DA4CFB5C5F888BFB59583
-:107120000E71E05EBF616A7D7524F197AB0C062A93
-:1071300077CF1F48F6585B0CB0561C6FFE68D21B09
-:107140005EFC3B8F9774A7315E9FC146ACC7FAA225
-:107150005134DECB1ABFBACF4EE3B515298991540D
-:107160003FD080FD5B535C137388AE793B503CA8E5
-:10717000DD860D4A229EE7866233B57B4870CE5F7E
-:107180008CE35C6E23BD31303FF2E96DFC38FDE8E5
-:107190005FEAACE5FBD6E840F3AB0F751F7E18F94C
-:1071A000873B1B4E04ED43EBD70B10AF1531DA01D3
-:1071B000287CDE397F770ECF59370097C545769208
-:1071C000BD2EA73104369C9FC4B2114FF6003CA1DE
-:1071D000BDDB04E71CC7CF79751C9E73E1A6E07385
-:1071E00086F1DC2BE1BDB03CDA214CA2731E85E3B5
-:1071F000D7B24807DAD7E7CEEF555F063E4583237F
-:10720000C102B0F83CD5353F27AB478E3CF209ECC4
-:107210000FE0526E0964B5A07E6E60D5ED61F8C0D6
-:10722000A21C6E1F48ACDB84F275A186FF7521F8A5
-:107230001F1812733C4AC57FE8F74ABC73319EC3DE
-:107240005742C7047CB9F76FE2BC70E3DF9CC3F917
-:10725000D68138E7325CDF70E3EE21B7A1BE7187DB
-:1072600085F45F7676CF109CF77729CE9FE378116F
-:10727000C3BBC9BFDE99D86DC2FD75CEFF3C09F511
-:10728000AC85B57F22FABCD8F5AD8E1A6B42B91920
-:10729000939F610A40FFF8FC8CD7F15C0ECEB2C818
-:1072A00096307E905DB32626A13ED4317D6212F2E7
-:1072B000CB8E245833C953871DF9A869FBE5765C4A
-:1072C00067477E26956526ABE5923EF9EB17C05FD2
-:1072D000FDA0087C06F61A3E4F80BDE6077EFB291E
-:1072E000D86BF83C0AF61ABE3F0CF61A3EBB56396C
-:1072F000E87D47FEB0ED8817675AB81F6591D11138
-:10730000562F5BF694C8FC1A7F83FF6EDA12A52B0A
-:10731000576F8CD5956F6C030CB2F694ABD60ED329
-:107320009535FDB3D23B46F7DE5597A92BFF3F03BA
-:10733000DF260E5FF497FF6F822FFED682BC2BC133
-:107340003F00BFF7654D233EDA21B09A5878C64812
-:107350009CFF199D02F9DDF0D70272BB18FF00BA3D
-:1073600031DAE406ACF742FB5F435BB47DD1FE60EB
-:10737000CC61AA80F7A5F91112CAF3B9AC86E86C02
-:107380001E6BA1E70DAC9D9E65EC003DCB19A7C31C
-:107390006F2A0213F0F9719CEB53A4D36556D7639F
-:1073A0007168B725B946C6223FB2F527BBB4B7739B
-:1073B000420D9BA97AAE6D82BA2FF8CDC1B543BFFD
-:1073C0008351636FBF5DEE99471B1FE63B8D7CE3E6
-:1073D0002B139F675FD6C424E40FCC3940674FF569
-:1073E000365FAB2A272BF2399CD0678BE563A50269
-:1073F000C58B77B55ACCE85F38B6C6A4EAEB77936D
-:107400009D7BF810F7CB1C6B98968CF857DF3A32BF
-:1074100019F1FC98496EA805F81F9B0CFCDB417E16
-:107420001C07CA8723F976EA0F92223A03CE6D91A0
-:10743000BABF23B2C37C07B42F4D1499DB81F1F49A
-:1074400094685CBFB6EFD07557AEB5E8F060F6242F
-:107450007DB994997BF02D05CFDBDC538F7A925860
-:10746000D6CFD587DD5DFBF1D2FDAF05E16B72AE06
-:107470003D0EF51A36914DFC41ECE9DF1B7CB57CE5
-:10748000060DBE1A5E7D9FE31C999B45AF29DE86E3
-:10749000717494C71DDB391C5BA3AEBDEF2A80431A
-:1074A000F1FB22E3702E777F84F8BC83FBF543E782
-:1074B00009205D8F447AE5745DE17D8FECB78575B9
-:1074C00045265C5FB1AD3B09FD4EBBEE1A9984E7E2
-:1074D0007270D6C824E41B7BA68F7C64058CDB55B8
-:1074E000203A2C804FBB0A4EDF87E58E3A51C27995
-:1074F000BBB69F56F94BF7BE89B0BEAFF34D24879C
-:10750000BAB6FF73F84CF10EE03330FF191FE733C2
-:107510004B8C4ED608F32E01B8A01DFFCFE63717CF
-:10752000E233074DCE3CCCDBE8AA171CE87FAB9FCB
-:107530006E21FDE120D08785E353C30AE49393C015
-:10754000FE9510DF9C596853766C1F3600E1C5DC50
-:10755000CAC151137AF07D51DD9202F4AFB3B5A6E2
-:1075600023A877A33304E57331331E0904E1A9EBA3
-:1075700005534F99F0DA78241084D7A1787A1BE26A
-:1075800069540F9E9E616793CDA9BCFEC0C01EBE0C
-:1075900087BF60FE728BE86FC478BF86B7FF39FD86
-:1075A000BD72541280AFDC9D0BF8FB8B7129AF04C8
-:1075B0008420BE72917CAC35EAEF24F7D645FD9D60
-:1075C000E4DEA1E95CEEED9A7EFDEEBF20DEDFC5D4
-:1075D000F1BEA37422E1658709E419C0EB605D6622
-:1075E00034968FAE2D213AD3E827749E2E15FFB521
-:1075F000760B8DDD264718FC74D589BAF34C7B6178
-:10760000413FE7E5BDAF5F1B576BA78DBB3024AE95
-:107610001B3AEE13B9DC0E4DDB52D6E7F86000F6EC
-:10762000F4A33C94C81E7C15510FB89EB9013E5D71
-:10763000F91C3E5D05D7133D1ECAD7E8D2C5301EE2
-:107640007B708EE843FDB52BFF34D1E919A0531AA6
-:10765000A397794FAAF4795CA5CF632A7D6AF5E2F6
-:10766000D607E7DE80E3D689C4A70FCEC91C80F316
-:107670007DB6258DE685F550DED15BAF2DACAC1F18
-:107680004EFCC18EFCEB10C001ED8492D212B2A769
-:107690004B4C8E01E1F484D07D878EB76B9685F2DA
-:1076A000C8603CE277C57795B046E40B0007C4CFCD
-:1076B00043D81EEA8BB7723FF01E6C1F170CA791C0
-:1076C000A4AF1CFAADE040D161DAFE373B9EC35255
-:1076D0009F9E5F2C591FA53BB7C52DB1BA72F1749F
-:1076E000BE8F4375C30684CB6BBAD0F969FD2FF604
-:1076F000FC6F52FBE39A7F203DA5BF6E3C04927E57
-:10770000BED490FAD121F5E374E50BE1E361152FC6
-:1077100034397238425E102EBED45568A90ECED3CD
-:1077200088CEE3764B749E1AB7FF917235224FCF05
-:10773000AF2ED45FE34F9FE738A53C94A3FE12CA57
-:10774000DFBA587E14248713F270BD01C18CFD5B33
-:1077500055395BDDCEF16E5DD4FD947FF395AAA71C
-:10776000035E12BFFF5AE5F75FFF412DFF5E20BCAD
-:10777000DCB3636534EAED27B68F8C463BEC48BB3F
-:10778000271AF9BECCDCD157023E7EE904F909D3B1
-:107790009D6CEF5B7E7EA6F29D13780E2437253A12
-:1077A0008FA3AAFC3C8CF293E4FD287A1E44F909CD
-:1077B000F5739E55F5F4DF0A44FF4B8D2DE1FDD3A3
-:1077C0005BF4FCAA7A6354889CD4CBCDAAB58375AC
-:1077D000E54AEF305DD955A7979B796219F1F5130A
-:1077E0003E0EC792FC4C5DFB13B21C2D117C381C65
-:1077F000BE36C9D18867477CB1D1C1F4A2F1DF831D
-:10780000217038867040FCF496F4892747D5FE5ADB
-:1078100019EC4213CE5B6275BC1E877E84B5820371
-:10782000E35498EF3709CEF1C09C8CC79B83F48C4E
-:10783000F7F344C297C3DE3DE5987775060C30F444
-:10784000F3FEA96E4F32FA572B9E8A22BD2974DEB1
-:10785000AA023D9FF9B2A128FB23E857F2BEE8B384
-:10786000223C0A62887FCD7956F48950EEAACB89F2
-:107870000EDEC709950E35B9B3C45813F61CAB37E5
-:10788000EACFB1A4A09EC6E978506817FAC173D7B1
-:107890006490A4E7F72B31F2FD2F794A24FFEE1212
-:1078A000EFB7FB30AEB804F4405413FED4E42944DF
-:1078B000BC3EEC3419889FB6C716227CDC7344CAE0
-:1078C00083DDDB348CF0FC4853CE409CAF4985D33C
-:1078D00089ED168370053C9D26E6277BD54FE7F999
-:1078E000A5B784E4C609840BEA414689E8E2813CF5
-:1078F000EE973F0CE360BD01E804F5E12E9F98EFA1
-:107900000B431F0FA8F31C3DFB2BC29F377C7BA2B0
-:1079100051AF38DCCEC73F5A2745637CEA1D6FA6BE
-:107920009DD65700E3A2DEBBE37A929327BC1C1FCF
-:10793000719D641F3671F9D1E15D74FF6480C75792
-:107940006B45D23BBF6A2A299C8CE7BDD644E59C97
-:10795000A2528A6F74F8B87C39E43B5A8EE777C23A
-:107960000BA70FE5FA1D13F78D8FC37336113E5425
-:107970003DA53F97D2B57AFA825F74C604CACFA4F8
-:10798000B82CA81353D14EAA4C00F909947BB8A087
-:1079900084F22A8BDD7A7964614526C43BD42FB109
-:1079A0005DE52325597EA43FB740F272E10B3CEF21
-:1079B000DAB4E56A9277152D16DDBCC5757AFBA899
-:1079C00032C41E0AB5977EB4BC30D5948793171D78
-:1079D0009A5C60D25484FB1130AC9B33E0FD0B22E7
-:1079E000E5239FF14610FFAC5878EA1A552FBD16D3
-:1079F000F18039DC6C9266A707D159A5570CD1D319
-:107A0000F5F005FDF938EAC74DB1AA1C759790BF8E
-:107A1000EEF31CE510F1FB8BB5BF2F5ABF2D57F5C8
-:107A2000DB72D26F3B4A2D94AF79109B04F5DF5582
-:107A30007A3DF9750ECDBA9EF4DC43E7FC3A4ED59B
-:107A4000AF730D9DDBA102C067921B0EADDCA71EBC
-:107A5000A1F18B4FD57338AAF2C9C32A9FEC52ED1E
-:107A6000AD46555E78557971A840B5B7E218C90B97
-:107A7000A3516117C3676E6C8B0A910FB12176D445
-:107A8000E090F3D1CB8B6545AEC8A940F79684D181
-:107A9000BAF726699CAE9CB66527F98FCFC83C9F84
-:107AA000E81EC4098C9794F2FC2C666D27FF71A91F
-:107AB00043A6FAC1182784F66852611E89869FDAA8
-:107AC0007B298EBFD7CAFD61D7F5D82EA59DCA9E4A
-:107AD00052C6300F66B8360E80A31EF484C1E8C7C4
-:107AE000867912C040C3F61ABE0F99D34AEDB2ABE5
-:107AF000992440BBF4A929C4CF129842FC65E03216
-:107B0000A660BE0BF33D4FED1EBF1BF601781FF0C4
-:107B10005C47767989359AC7BB413EF68D67F53C5F
-:107B20007E991F4B7ACB102347CD5EF1566D77219E
-:107B3000BC0DD283264F25FA34903FA2356AAC099A
-:107B4000F1B4D8E624BF01E0F582DBD15FF98A9970
-:107B5000FB094AB97FF2E0F4898FA0BD3BF6191BFF
-:107B6000F9920F2E067C26FEDECDED84BA1237CABE
-:107B7000BD3FE7733937E6992FE97E44D776E6C0F3
-:107B8000F29EBAE74FBD8DF43247203BA3A32E8768
-:107B9000F365C69C98BFD9919FB39ACA93C030CE63
-:107BA000407A50561B711D00D766AA5F745FD67865
-:107BB000BA6F42F89BA0E6194978AE893DE5384591
-:107BC0002DB3ED544E28E0F9817F54F58376F53CD2
-:107BD0007FA7DA41DB54BA6953E9E6D72ADDAC095D
-:107BE000F5876EE47433C2E8B82F0ACA23DC7692B4
-:107BF00033FB0B8ED2BA81FE258CE7A64C179BC7B0
-:107C000003DCC65802C4A74B40ECAD86FD4C29A846
-:107C1000A7FCC51217A37845F19C7A5A5F00634B05
-:107C200057A1DE542F886A3DF2C731B17E6A5F6C7E
-:107C30006512F62FC97F7617E6E196BA003450CE6A
-:107C40009D532F107C2A603C68BFABEE011AEF50A9
-:107C5000355FC7413BEFDF51C1243794D358FEEE67
-:107C6000157C9D4E8C871EAA7B7E17C17B0E87F7E5
-:107C700055270D3A7ACCF047EAE87AF496FEBAFA3C
-:107C800091EB07E9CA039CA9BAF6B1F97A7A8F1C7D
-:107C90003E4E57DF915F6240397B668E96DFC3FDB3
-:107CA000629A5D37E5199B01E1317796A8F9710D6C
-:107CB0006C205A5D8CFCBE4DAA9EC85A8631CCDF22
-:107CC00078FC4E03E507AC99E3B162DEC3997623F5
-:107CD0009D178C4B7CE4D04E238D6B4DF10AE8C789
-:107CE000BC17E02C06E97F4D9A7C53FDEAB81E6371
-:107CF000D07AFACB0C33C6CEB56F53F1E901751DBE
-:107D0000C0B7A798705E27C793D802663041FF01BD
-:107D100073B89C0EA5CB76B5FFEFD4FEDB547CEC9C
-:107D2000CA7F7C7524C2651E237D244F5CB63A024F
-:107D3000D751C0881EDBFDBB2383F5C73FF636CE87
-:107D40009CCC3C1AC7CDF9E8E8D9822702CF7563ED
-:107D5000E0F377E1F9F2578DABA361BD4F08AC1D9D
-:107D6000294AE39F9AFE7DD5D74D543F7A1C9868E7
-:107D700050FFF2D7CDBCFD0426A3BFEB8FAADC6970
-:107D800052E9276D4B3AF917CFAC3793DDB3AD709D
-:107D9000C9E63658EFC899773DF102E24BE15D7FC5
-:107DA0007941EED1F34B0A133B317F7FC42A3B4329
-:107DB000FEA0CD9BB6E5CB6C5AB7646488A74F6E26
-:107DC0007DB112C7FBDDB6488302E33FB9D948FC59
-:107DD000E5B27B1FD9BC9E9DEF8F29C9D7DBF9BFC8
-:107DE0005BB3EE89EDF8BEF6F9C78E05E5E974CC14
-:107DF000BA2709FDA6075755B7E5A6F5CE3F4BCCE8
-:107E0000CC85F1BBFC97BF7CEE1D98FF03D765E3E3
-:107E100082ED80CFA7727DE7E0AADAB65CB0534767
-:107E20008BEAFD15A37B35C263F44B0365D4DF8079
-:107E3000148C2E8065FE8C088302FBFBC067DC443B
-:107E40007C60C69A343CCFEC270B769FC4733EA46B
-:107E5000E27B2FFAC841F59CCE954D32C1DDFD8AFB
-:107E600095DB378A9C44F6B1434E2A0ED2E70EDEEC
-:107E7000A5C5971C9F201F2F2E8BA2B8B216771175
-:107E8000F3BF6D403EBF70524D9644EBD7C7F1072C
-:107E900021FC3231CECBE3F56EB791515E106C0D03
-:107EA000E964A5389AF24D3E5CFA0B8AD7BBEB2DFC
-:107EB000525A1CC50D9EC1722DF01DCB788AE3FA73
-:107EC0005068274DE37E84D3F33C8F98E5DEE1EFE5
-:107ED000BDC0F998D4F3097D9F348D9F8B07CF25C2
-:107EE0004D772EBBF19ED479E7126D25FCD2CE459D
-:107EF0008C6EA2736156DB28CCFB88E72885FBD902
-:107F00008772A8F310F7977D50765BFD4A289F3A59
-:107F1000DB8F215D687195F2049E7F4047027CCB28
-:107F2000A4F68F57F56EE463A87797AB7197CE05EB
-:107F30008CE22EDA78676AFB497CBC5B486F2EAF17
-:107F400001FA475912F52AE9170DC3787E44B9ADF5
-:107F50007B01E5AB0A0607C6CDE343F47A37ABA154
-:107F6000F5C6BF2F923FDF10B596FAC70378F0FE33
-:107F70002166E8B260BF1218AD984F42570DE52058
-:107F80003D4BCDD78DAF7D89EB4739D03351379FEE
-:107F9000F003ADDFF3A9887CA0D62223DFC3DC2C5D
-:107FA000E4DB04BF14C4A375D45FBA8949788F8316
-:107FB000294CC67B9A823A5FE8FA613CAE17827E12
-:107FC00086FB15EAF8FC1B67F27B206C279383ED98
-:107FD0001616BC9E61BAB2EA27D3974D09669D9CDE
-:107FE000FAE06C49BF9A3EFC35A1FD0DB2B36FBFFC
-:107FF0006F7590DD95DAD35ECB13D3E03CA8D672D3
-:108000005888EEBDDFB222E5E7D3804E6DCC99FDF6
-:1080100036C0C3F5BE48F2CE10B597E01188E0F047
-:1080200039A7CFCEE3FA2E68E7F5946F0DF20ECFA5
-:108030000FF3B44700BE33B73E4F409B578B2F75AD
-:10804000AAFC38901258E00C038F46A4DF2CE4E71A
-:10805000DF50BCBB1CF55BC0E5C0EA2F74F73F4E98
-:10806000164D69C47587E621687AA976AFB4D3CD79
-:10807000E56CA73B93F8CE19666F21FD3F94DF189E
-:1080800019E57DAC14231DCDE4B7BB9BF2466ADD38
-:1080900016C902CF590EBD3F66F624BD3C28526278
-:1080A00043E485DEDF55EAD4C78986B7DD41FCEBC2
-:1080B0000CEA4DC4EFF87A8C6A5E9909EF978868EC
-:1080C000AFBBE9B957E5CFEFAA7A6604F257781F3C
-:1080D0008589E5808F7616A0723F44F96198D22E8B
-:1080E00053BE632C53A83C80B9A8ACE54126321F8F
-:1080F0003DB5FC962416A0F250D487442429999EBD
-:10810000C3D00E19867A9EE35CBC87F22673522890
-:108110005E50C4944FB05D41E65724F70AAE67EA5B
-:108120003DDC138B14287796B29E7BB9986792C773
-:1081300054E4FC7411DE3FEE9CAE958FF3F214DE36
-:10814000FECD3F7DF138DED305FEA5D67FC6EBCF51
-:10815000954F2E9A82659381CAEF637B280FC8538F
-:10816000DE9A06E7FFC9344678E4C955DE092E0FCA
-:10817000CF55F621DE68E5095395FDC1E59539CA6D
-:108180007BC1E5C773948EE0FE5D79CA215ECFF3B3
-:1081900097DE37294968EFC2EFB7C2048E87F87BB4
-:1081A000C3E4FA04DB294F09042F0BF0ED66E2DB90
-:1081B0004E86740A6463C53C22E033E6DBA19E8DE3
-:1081C0003353BE9F21CA96DC973F3294BE0226B637
-:1081D0001DFD744546D717440F217C4F70FFE9AF52
-:1081E00098C703F4908D7A7E408D8704EAB83F40AB
-:1081F000A313ED7DE87C17C27BA604F979537BC6F7
-:10820000ED6DFDA1787C40D5F70EAAFADEFBAA5FE2
-:10821000FADC7E03C698E3D61EFAEE9D7F1AD9F1EA
-:1082200020FE79FE7E8F2E3071F921A1BCE88C08EA
-:108230007F0FBBB7F5EDCF991A974FF95E43248AAC
-:1082400033308DEF737ED3897F021F1CD34FB35F12
-:108250001D5684431A4B98310AE66DCD67A4BF7A48
-:10826000727717D3F70DCA4082C1BA8EAE38861422
-:10827000C78467B83DD192C468BDF6142902F5A53C
-:1082800006956F5A58CCF4E1B8FE214692B7A1EB9F
-:108290006E88F60918571CE48FE0FE8D38E68B8057
-:1082A0007106E53BF2296FC52D4AF9582E6385A367
-:1082B000A05CD926CAF930CE9EB6125605E3564DBB
-:1082C000023E4719E93C9FA2BF8AC7632C8CF22D5E
-:1082D000D60DB051BCDABB66E4AEC5C837134596BF
-:1082E00006EDD31BC6E5A3DFD363EBDF9F624EEA47
-:1082F0007A3C36C79B780FC32D19F83D1249B162FD
-:108300001EFAA615C67CE4E749CF8E8F1683E07F60
-:10831000D47B2A02F3DB1F930C54FF585DB6F5465D
-:108320001BDE23F42B9467201D516C30EF0668137D
-:108330000FE3DD5F7DA46504EB1D1FA2F3CD3A3C86
-:108340008D729843FCA07ABFA529443F28C957F3F2
-:108350003426B00978CE573C71D6847AEE429B4CD5
-:108360007EF4EC2681F25302BB1CC9784E47EF1B0A
-:10837000497E736F93A8FAAD1DE4B70E24B164BCB7
-:108380005F53D122905E2C7ABFADC77E4347C98927
-:1083900038CED0F1DD89C1FEB2C7EEFA4504F25104
-:1083A0006F9941F573331A4796156B0AECFF53AF7B
-:1083B000C0F3274C9280F798ED0F8A11B8AE2E13B8
-:1083C000F75334033FC5FBB9CD538AFBA443D3F71E
-:1083D000B0CE20BBA5212E3512E7EDC15F85FCEBA9
-:1083E000C75A32293EB2B9299BF24142C7B9771523
-:1083F0006B47FBA46195959EE7D5273B931DD0FF66
-:10840000D3D6298D20A4D8A7BB9626E0FDA0C52DE4
-:10841000161611068F8FB54EA4F916E33D669CB76C
-:10842000A5C88C72645ADB1433C2EDDE55CAB3C1E1
-:10843000F31416BBD6205D46B53C4B7862637E379D
-:10844000C2F3DFAE519251BF3896C6C2E6493E90A4
-:10845000CFED8477AE71D27D924F93C2B75B97CF49
-:10846000F335A3A7CBFCFEB891BDBB04E05C01F4DF
-:10847000540FAF8E36654623DE9AD83262521F946F
-:1084800095B8D19E3B8D7A3BF0F3C6BBE6AEAF828A
-:10849000760D778FD88FECE30A33D79BD99F45A20F
-:1084A0000BD00B2B903EFF638E55F204F15FD41F6F
-:1084B000155D7E1A971BA626D16F067E6EDA79FCB3
-:1084C0006F68EF20DE2A41784CBF09AA5DA0E66BF9
-:1084D000244C206D9C7E0D33E6FAFC0CE32E8BAC15
-:1084E000789EA17AFA797872DE3A82C6473D37974C
-:1084F000291141EB0096E0277FB98BCF7BAE9D5AC7
-:108500006F0406F34390FE1E5AAFED63E47A3DBD5F
-:10851000BE93CFF542806F9FF1BACB7CFA7E9FE588
-:10852000333AB7D1A2B2FB38CAD97522E5558F5973
-:10853000C7E3FF678630F213F5369EC67FF1671CEE
-:10854000A8C211E0DA18574CE7D95B3FB3EF80922D
-:1085500032B6C73EBC2C41BF2EADDD67E7F6751BBA
-:108560008BE4FA603BDA67161FF0BDB1F83CA0A0BF
-:10857000FC1EB56985D4D7BE43F919FE6458EF6275
-:10858000F5C864C035E40F9FAE17543D84250C9F99
-:1085900040571749FE607F2588FF015FE1797B3EE8
-:1085A00081E0D3DC7A74F3BDE487B13B782B7E5E47
-:1085B00063992607791E90764F9061686A604F7CB8
-:1085C0004A83E3C9DFAE7EFA097875E2A9E55FE385
-:1085D000D332A0321AE1794FDC9C6B13A1DD58B382
-:1085E0002F01F9E9129FE53CBCB36AF89282F7F3D8
-:1085F000F4F59684A0F5C37FCD3B9E585F89726ADF
-:1086000087D581A9E1885F6E1D7C02A9F85D9CAECB
-:10861000BBFE95EEE7474AA716507E7B9D85EE751B
-:1086200085C27789CA07987A5F43A3A78896910C79
-:10863000FD8B4754BBE9C85AB053A1DC586796F18B
-:10864000BB065D8E222521CC78E63A33FF6E4EB014
-:108650009D98DAB34F6DFC2E37F74336C2F84218B7
-:108660007FDF85C6DB53A48C990EF8BFB7C879F9B4
-:10867000F42CCC6F5A44FBADDD5ED7F536B4B97738
-:10868000A02B03EB8FAC1D36414047A451A6FB7EC7
-:108690005EEF73244F5AF03B3E60CFB7B41B2350BC
-:1086A000FF707B0D14BF6D698F8B1C8E72CA6608BC
-:1086B0001B675D349DC3AB479E38A383F5A1E65C81
-:1086C000AE0F09CF94DD9F0AF0F21EE2798A9AFE7E
-:1086D00021A97833C622117F96BC3CCFAD471FE25B
-:1086E0007AF519D4AB515FCAAA9282E5534334FF9D
-:1086F0000E4655AEC38DF730736C8CE4C750BCACDE
-:10870000807E0B1BF34D4BC1EF643818E6E7F6078C
-:10871000FD4706CC8E6FE3FA4EA4CDE650108F15C0
-:108720004E5756F81FC2337294C2701E63887E6122
-:108730000ED11FC490F282E97A7D42668E6884B3BE
-:10874000FDBEBEF338347F2EE84D74CFCCCD00FE95
-:1087500088A756379D4F34181244CF8A22C70DEC94
-:10876000D1FBF13E1BF7AF48142F129446F2DB6F9A
-:10877000CCE4FE8D44C6E35E83146ECF8F9DE4A6E9
-:1087800032D80F148762AFB248E4CBCB8A5CB723F0
-:108790007EA4001B40FBAF7F3A1388DC2F512F676C
-:1087A000B5171757FACD6EEEFFF31A221D9BC3E0E3
-:1087B000FDAF0BB81F2E720FEC0DF5DBEBAD74BFE8
-:1087C000254F7CAA89F069BC81FCDA5E7640427E46
-:1087D000F2ABE95CDE1F2A72DE3F9DE2B2CE14846A
-:1087E0007F82112C2A5076CDAA1F37E9F6D448D4BF
-:1087F0008B3F4C7C91E0E106D8A5C17F9B6AE3FAF0
-:108800008F82F78FD6AE26B8CA03B89F4CBB771EAF
-:108810002BF1FBFDCDCE536EBCDFBBA22095AFAFDD
-:10882000C8382315CA43EB0202D2DD3D76651EEA45
-:10883000254DF273741E2919B201FD65838DEC4D2F
-:10884000CB38C69E8EE1F5DAF7A31EB20FDC149C7E
-:108850004F52ADEEFB2121BCBE725501DF67E70E22
-:1088600000643FB48F996A7FDB16933D7EAE0C7037
-:1088700043B8B8B9FDFCC274DB62F770B28B78BD47
-:10888000FB2ADE1EE3A5502FBDFD7E15DAE38FA681
-:10889000849FF74B75DE47DFEA7E04E358FF59CF2C
-:1088A000E358BD9FB39F1980B76CB0B3647605F0F1
-:1088B000B9A5E679E1BE2373CD2CCE473A6DED0420
-:1088C0002F06F23CFA2ABA471FAAAF5A918E4E4B96
-:1088D0009BEB27CA9C8F644DA0ABFD1CF742C6BD25
-:1088E000B0DEEA4840FDD3B3B4BB01F98767D7D205
-:1088F0000FF15E7A799999F4D67263CDBFA31D64A6
-:10890000DCCBF35FF01B13880783801FE17DD36905
-:10891000D5FCFC164ADC5F2B3CF3B13307FDB18973
-:1089200046C24B4D8F1D6351DCE897DDA0E6B7339F
-:1089300071483DDEF7320E16C9EF1B55077A2DEE52
-:108940002F97E7EB2AF03FE4439A9E6B4B37EAF20E
-:108950007ACD2179BDC6903CE0AFA7AB79722A1FD2
-:10896000B2678DEF539F7A15EC605CE74EE043F8F9
-:10897000F4833D8CCFDD60AFE3F335B0D7D10FFE8C
-:10898000C6AA51F47C739583DEBFBD6A123DAF4B1E
-:108990000E98109FC91FCDBF33E717C8AFA7E19945
-:1089A00098966DC3EF76F0FA21331BFFD57D35D451
-:1089B000C7A9EDDDAEC5F49D3AADCCD62ECE4E277F
-:1089C0003F38959B67342F46BFCFE652C53A03F038
-:1089D0006480C15981DF7960775A286E11BA9F0788
-:1089E0006768723CBC1DCFF013067A3FCEC0197D7C
-:1089F000F8711E12F83AAEDAFBFE16A48F7E4546D9
-:108A000027E27172AA3E7EB07206D7F35E579FC905
-:108A10006FBB86F6755F5FA38FDEEA3D3B0005FA0C
-:108A2000F55EEFB5B36BB1DE13139EAE06AA74D537
-:108A3000EBF8366E4FB219406F83B11C6A1F0628DF
-:108A4000BFE4746D8E9FC8ED27D35B7712D25B575E
-:108A50008CAF1EEDC4AE5D4BD7E3774244A4372400
-:108A60000BA4378C7F68F456CBCF6321D21BFC3923
-:108A7000ADEE3D670ED26302A72FE1999DCB291F72
-:108A8000E32E9E47A3D15B8C9A2F1F25B593BD483B
-:108A90001FE6C07E407B1B04BCC773FC634AFE100C
-:108AA0000B1CAE7074F723E9AD6CC64FA3B77FBB48
-:108AB0002640F9139D294A02EA335EF5FB813F9671
-:108AC0000ECFCC3073B970B92F11C7D9A08E336DCA
-:108AD000C861F2FF15581D22CAB37C99C3356F7C5B
-:108AE000267D6FC8A7F6DBED5456CC80E780B9270A
-:108AF000C9CF3BC0C0E9F7C1B7CD8B11EF931A0EB8
-:108B0000164D437CB943247D3B745F1F14AA713317
-:108B100081CF0B9A5762701CF11E952EE53B3A38B7
-:108B20009F8F61521AAC27C12D15E7635CE86A0379
-:108B30007D4FA45FD1C11894CFDA78707009986F17
-:108B400082AAAF75DCF9F408BF76D3401D3DB7E0CB
-:108B50003E7AA3E70BF10FFB0C41E31394EFEB52CA
-:108B6000EF49FE58BF6DAF7EC4CBC3FB25AB66712A
-:108B7000BEE131F1FC0F682DE177019A8A5C4FE28A
-:108B80007ECED3FF764A7E17EE637934F995138C47
-:108B90005CDFC36F24F2EFE5B809CE5AFC4DD31762
-:108BA0006585E7172517BBFE80E36E62F22E94679A
-:108BB00036079B47F13590678817CB8A9417675023
-:108BC000FCE5D2F4C02F8B9457895FF7824F03AE38
-:108BD0005776F7856F538AFE63CF0F48FF65DC5FDA
-:108BE000BAB0AC8672B306819D84EB9DAAE6677825
-:108BF00086F07ACDBFEA1DA0C54F9542CC9F8C561A
-:108C0000E135C6E26415D0BF0BE530DEDFDB1BF0DB
-:108C1000E3BD600BDE2393D08FCAA87F4CADE093F9
-:108C2000B1BFF8E5EB182F32E5D0E744189BC4ED4F
-:108C300001EDFE8D94FBE3FC8D87353E318E8D4733
-:108C4000F8241BE40726C3FBCC87F33AF078B21E66
-:108C5000591C8BE272E2A68612FCDED6D2AD9F6E64
-:108C6000427FE8E47FB7303C0FD01FFDC6B0F95C0F
-:108C7000FF303942743570563CD71353C2E3E9E3F1
-:108C8000B354FD13F1344E87A76C66783C25FDE79D
-:108C900027E069E44C3D9E1684E06914CD7BE978B9
-:108CA0001A3B13F0F4559083B8AF17E72A0366F622
-:108CB0008197DF952A897DD507C507C8EE1BC12698
-:108CC0005983BF7BA83D5B515EF6919FD07FCD114C
-:108CD000CA8FF3D49EA63CE52EDB917D6807FD4745
-:108CE000AD450EF66781FEAED3D75B40AEB8C19EF0
-:108CF000DC304B247EB2E70E8BFF3AD46BEBF87D71
-:108D000084F2BA4D02E67B0FAAAE115CC0DFE21519
-:108D1000301DA17F8C62E8F19FC07F57980E903E76
-:108D2000BB0EE4B19BD817BF97A6C9FF31969AB77F
-:108D3000D04EF5FCCDE8588DE7CCA45DC88FA603D6
-:108D40003D617CF39A6E906F41E3BDB56312F9D536
-:108D5000AEFB1EE45F901F670A8C185CCEB126EA5A
-:108D6000FAE54929BAFA690997E9EA35BAEF8C5167
-:108D7000E32A595B72117FC40A9EA7305DCED0B53D
-:108D80005F57964DDF03B86232BF7F3773D464DD1F
-:108D9000F8A17AC1D5F03FA47731440F08D513422A
-:108DA000F5828533F5F740D71803D9C49F18CFABA8
-:108DB0001B7AF6DF880ED6C91CCFBD65A7281FC356
-:108DC00003F63FFA9B0607E597225D8C3507C83FFF
-:108DD000B761BE95CE63C38E27E8BB119AFF0BE83F
-:108DE00086E8686CB64479AEE9F65F537FB694CBFB
-:108DF000D950BA14EA5E22FD6FE36CD81B7E6F6D0A
-:108E0000760A977B3B03E48760779A19CA4DAF6473
-:108E1000A0BCB1DF08FE086118D2AF42F28925304C
-:108E2000C94BF992EFF1EF2932E6589388A6BF4279
-:108E3000798D80F6DD6FA979B488B711F9CCB17A54
-:108E4000327EEF97D377FFF1FC7C6C0E5E96AEE638
-:108E500065CDDE8E49602D98173B18C783B671B576
-:108E60004CF2905FC34FF543F2D9010FCDCFFBC752
-:108E70005731671394C51A45F537BBD4F87A37C50F
-:108E8000BD53054724FA3786894E8A7B473389E2EA
-:108E9000E283580D3DA3043F671E97C847AE00000C
-:108EA000A0BC603799E9FB19D94FDA187DDF68A9B2
-:108EB0007933E5650564F223DE7388DFC3DB60FF89
-:108EC00005C5099AF6F1FB04F724B93FC478E6A07A
-:108ED0003A81BE132E56F33882F8A6E89806F5625A
-:108EE0005D2B7D072EBEDA407EAD2BCC35BBE81C5A
-:108EF000EEB6D0F7E3BAA03FFAB9D6D90D8CE81593
-:108F000098C7397F2AFCBAAE7152DCA2EB6FFD48DC
-:108F1000DEB1103FA7C7C5F56F4F9C99E397EDD41D
-:108F200027C8B71BE322E97EDCBC6B6BF6211FD997
-:108F3000F09EE858ADFA9FD1FF3F14FFC0FC03B389
-:108F40003305F54E7375783FA59939F767A1BFF4DE
-:108F5000AE25097DE951BDC6456C06BF39FAE2E38D
-:108F6000220DE53C0EA2AD53DB67A36DB95029E39A
-:108F70005F3F312E52D64B5C24502320BF1F8AF511
-:108F800063113EDC6F7DA971919AC24B8B8B68FB9C
-:108F90009EA5FE5D0088ADE677505C80CECDD0B357
-:108FA000BE20386EC1F595E35F327F8F7186D96A36
-:108FB00079DF5307BF44BFFEDEDFEE7E0A9FD79DF9
-:108FC0007DAC6C39E045D1243BF97BF7FF32E641BB
-:108FD0003E9C3E7E30CB61D1F9EFF187F849EB1032
-:108FE000F8BDFCE0FAA29075651BF5F1805C9BBEB4
-:108FF000FDD4387D7DFE107DD9CC6A084F43F7BB88
-:109000003AEA6ECA936BBC8D39788678D079881726
-:109010002E9B8798C3EE4BC337E64821BA5FF73ED5
-:10902000A77BE72B2BDE5A4976AC81EECF9F9ED7EC
-:1090300070CF3B32E28799B9699C7C05F1E8BBDFD0
-:10904000A7BF4B311DC9E5BE11DA57E6F0EF459DCC
-:10905000174F50FDF9436B77B5E706C57BEF1DE869
-:10906000721400DE0CB59D12500F195AFB1AD5CFA1
-:109070009D9FD5271EA5D5EE69CF0DFAAE5F9AD17B
-:1090800069403F465AED1BF4BE37BDC720BB79FE91
-:109090005E9959267B4BCD534B53F126AD8CFB5B30
-:1090A000A5542E6F3698B87C7343B57815FC5F5B7A
-:1090B00068BE1BE7EB6726F17B1D0CB810F22B6D29
-:1090C000BC5079A6C9019BC2F5C8B4B287B85CD1BF
-:1090D000F205DB42F3E25C73113E427523B5DB9887
-:1090E000A3B6DBC9F5533683492897619F61F344E2
-:1090F00017A87EDADEF2D398663FCE79F343CCCF61
-:10910000FBD1F6632FE35E971C087BDFF636D56E46
-:10911000ED8C082439B81F38ACFE3EA374EAAD05C7
-:109120007DE8AF98578B30EDD55EB8C4BCDA8D6A58
-:10913000BC488B976AF9B5CCE81B87DFF91C65FB47
-:10914000F30D1407ED25AFF61EBB2380F7DCBD152C
-:10915000118ECDECD2FDEB5BA7737E5A5DC0E81992
-:109160001A5F085DF78602DEFE5091F3E1823EE26F
-:109170000A5AFB0F13C3FBE3BE2DE4FB3F775F29C5
-:109180009FEB7D8A4961E1F240B57CF7D0F7600F33
-:109190003D89EBD0CAAEFA34F2DB794C1C6FDD327C
-:1091A000FF9EA0A63FDA507F243DAA85EAA3ABB973
-:1091B0003EA9E959921AD708A527A08F3FE23C8221
-:1091C0008DD3ADA6279EA38FB9401F409743188F1C
-:1091D0002B19D4BCD121569E827EA97AD4F9F6D31C
-:1091E000F7F64BB29FEAB74690FD54BDF92DD4ABCC
-:1091F000D6D5723F61A7BDE62DFCFE81FB3D91F403
-:10920000A6DEFA6B76D447857A3B0AE38A888FF12B
-:10921000369F205F8E7654C0E482F595A31D65C30A
-:10922000BC555700E1166A4F75DDFD05E5BB82BDF3
-:1092300079B820EB1FC01F42FC4B8DD3393EEF1A8B
-:109240007E8AFC26622DB7F7C45A1E0F3596F1B8F8
-:109250008551E17E1433C82374056A7E940D0EBDDA
-:109260001FA52B89FB51E2736BFCA8079A26592492
-:1092700085E423F7AB6879ED632CBEB7F03E862713
-:10928000C3C8300F1D1455B2032D6A7C03FF410B78
-:1092900094579ADF24346FDA16E22709F5A358674A
-:1092A000E9FD268F0AF2BD93619EE7D7E7BD83688B
-:1092B000FB878D8BA3D06FF292AF61A6EA37791846
-:1092C000D7B3E343EE37E9DAC1ED22172A305785E9
-:1092D000C3BFF3E254E407B966DFE12AF483687E92
-:1092E000A8F86A151E6ADC07E18BF014F3393C63B9
-:1092F00042E0E91DA2C58554780EE0F02D2F709252
-:10930000DF4942784A3DF0D4FC54DEBDEDF47D6D7A
-:10931000CB1D16D94DF0FC92EC5513C213E1FF138F
-:10932000FD50E342E039EEE1CC07F03BC1E31F29F9
-:10933000E9C0E7844DB7C5DE00CF495B1F28C127D0
-:109340007B93C709FE7316E75798D91D4C8F636747
-:10935000C8BA3883064F0D0F7BFC778CFCB1E51241
-:10936000F7E797AB789886700BF6E739F470DBA0D7
-:10937000E64B1A736BDC68EF0E0D819B86871E84AB
-:109380001BF2BB18B3EC26FF5D9D80F6506F78385A
-:10939000B4EDC7E1E1FC59AA3DAFC2EDB9F599F7CB
-:1093A00022BC5ED858F20E3E5FF4DD1685F0DABEC0
-:1093B000E58199BDC02D3198CFEF991E1E6E5B8B54
-:1093C0005DD5B3E0FD750E9F91F82CE01BDABD9BD7
-:1093D0009BC659F5F1198D3FE65BC3C98F0BFB970F
-:1093E00096535EA1A76C39F1C7AE73FCB1DB8E79E1
-:1093F0008817CB1F2D85FCBE7D79ED77AF5F077099
-:10940000CDA93D4CF46704FAA373AB3B6C50F33128
-:109410005804C88BF832E6C7F8F12066F545099480
-:109420009F407CD38B79CEF881D2503F85F4C65FC4
-:1094300005220E261812808F63EED4152407EF9FA5
-:109440001586CFAE2B3390FF67B3EA1F944B9D2D4B
-:10945000D84E8B6F2D2B525A67FD347FE1C3D85FF6
-:10946000F31776C6B073FE35FC3E784EED2601F359
-:109470005006D5DD4AF221BE4C61281FB266CAFCF7
-:109480007BB3B912EDF77C7F5B770EDA099D78A389
-:109490003D83F0E077384F67EDE38407572CE5FE16
-:1094A00091CEDAD3B1E1F1A036E2D2FC8C9B757299
-:1094B000D25BCBBF63D26957DE4CFB11783042C51B
-:1094C000034D4EA2BC417C3296051E463FF620C09D
-:1094D00087881494979C1F8BA0FF44C17EC45EFCB8
-:1094E0008F1A3D74C1DA2CFDF09E70683E400DADC0
-:1094F000FB7459B67F621FEBBBE83C00352EE95187
-:10950000E3920B6B79FE6AE71DDFE5E17A4F978105
-:109510007D0070D95CE660787ED340B10AD882E7DE
-:10952000392F6F358074ACC521B578FED662E7114E
-:109530003CD7EB00A712FA635EAF1AEF19A27E07C1
-:109540003A04FF01CF3FC77130DE837240F3A3338B
-:10955000D41BED88DFCA17583FD65C9328117EBB19
-:10956000BA71FC753BEEA4FC851EFF20CF87FBC9BA
-:10957000FEAD6833E5576AFE2DAF9DFBB72A5880D4
-:10958000FE9D3C8A2320DF6EB5D0F71AAA04D98C41
-:10959000EFF717BB8C85A4F738291FD635C72A915A
-:1095A0001F6CE9B644E417E58D22C9EBDEEC92F3BB
-:1095B000E9EC47F21995EE2E81CF0C2EBC383E9384
-:1095C00054A8E733C9853F217EB67E969EBFA0DEB4
-:1095D000590FF3E4A8F4746EDF6A1C1FE3571119E6
-:1095E00041FAA8BADF503A3A4F2FFDBF8FAE66223C
-:1095F0009CC3D0D5ACC21F4757A58503FAA4ABB90D
-:10960000857ABAFA1996FF17D2D5CF691F17A02B02
-:109610006321D3E749C7F2EF3C8F8935F03CCBFF9C
-:10962000C379D25FCDE4FE8BD03C69C66AA85C00EA
-:109630006743E7A3960BC73319E34C964DAFAD1DB7
-:109640002DF3F182FD9D2CC4CFC942FC9AA1FA5D95
-:10965000183FA8CEEFB9F789BFEC1D0D7F3EF9F496
-:109660007F915EBB6FAA40F7C90B477EB71375D0D9
-:10967000A23595EA3C7DFB3DFFD97E4EFC05FB55AE
-:1096800043F7D51875B77A6FE0C7F93999E356FAF9
-:10969000BEF9BA1AE640B85FC8EFB9AE8EE74D6BB7
-:1096A00079CDCE57AA1E2C1DCFF3E9D0EF19EAEFE2
-:1096B000D4F2953DB64AD2F38F2856EE8F0DF1774E
-:1096C00056C6CAB7D03DC6F3FD9DEF16FE03FC9DFE
-:1096D000930A64FE5DC610BF677CBEF261611F7EA7
-:1096E000B3CE1807437E9763F30918AF656733C994
-:1096F000AF33C816A0EF6B95D74E213DF06491EBC8
-:10970000535CA731B7FBAB97C653BE8103870AE50D
-:10971000CBA0671E2FFC27FA09FE597E3E5F01F79A
-:10972000735DECFD791FC23BAB8F7BF472E0912837
-:1097300078FF68BD9DBEAFB552D5A33B4DDD492D29
-:1097400050BFFFAE13BBD13FE16B3330BCDF76B10E
-:10975000FEA3860BE8C5E610FB68C339BDD8F7D673
-:10976000C420BDB86155FE8E6361C6D1F4E29B662C
-:10977000EBF5E2721BD78BCB6DDD26B40FCAE3BECF
-:109780007F1DF34E8DD5AC1DE5E220A586F4E17872
-:1097900089513EF1FF8FCBB37F685CBE78B63E2E19
-:1097A0003F56CD47411E8FDFFFE9D2FCA893B8DEBC
-:1097B000B0C6C8ED15AF02EFC2C4D143E3F243CF48
-:1097C0003E4371F975DBAD748F6FC38E663EDE1458
-:1097D00026619E792253F5B502EE2F0DD53F1E3539
-:1097E00029D694F188EF06BA4F88F704C92FB2DD65
-:1097F000BA09FD4DE9769ECF6DDEFFF256B73148CE
-:109800003F043D94F4E2B2007D97A95C7230E23BE4
-:109810007193FC141FAF1308BF46CCE6F4B330D7E6
-:1098200047FAE1A03249E0F7C4DCDC8E4FE671E78D
-:1098300048C42F682A8EE2715FE980E8C0B8F37DE2
-:10984000D87432DE5F65FC7B15930DF4EF50AC13DA
-:10985000BA13902FB70A4A223E4167A27B8F4FC7A7
-:109860002803F1DF93F22419E8DF93DA93D7988085
-:10987000EB6BAA6F4D40BD70CD6C1E4769CD3B4E62
-:10988000F90FA674D00753E819F6DF1D9DEB14D429
-:10989000BCC0F604FA1E026BF990F06A9499F17F4D
-:1098A000E7C7E15F84F474CC46FAC2AF041FBF2758
-:1098B00064B7D27DBC96CBCC8955B09E66BB99B4BB
-:1098C00009EF65530FA4C0FBE6015234C601BC2961
-:1098D000A912FA8FBC318D6FA21FA439259561BEE4
-:1098E0007F53D9048A9F379D0506033D3DA347EC6E
-:1098F000CF82F76B84007D37C83DD9C0309FB0ED73
-:10990000B2A989C1F7324529544E3A482E88B2810E
-:10991000EEF9896A3C5B3C2F9EAD8F4F7F3F9BEFFA
-:109920005B662DF3E81E689C59C2FD965F56FC21CC
-:10993000DD738B33535E50B989F1EF7E5CC6E85C12
-:1099400042E1E759A58F2B186DFAF5ADC1C034E59A
-:10995000619F5D82F8D18030A53CEEAF96205F6AB2
-:1099600038577F92D747F0F2CED94797A01C941969
-:10997000FFF7491A46F1BCCBF201C5C487CB4D8134
-:10998000B0DFF9BDD07A64E653D4F1D8FFE4786B48
-:109990002E33CFF3A55F78BC9E7301F5F912C6D5BF
-:1099A000DA858E1BDAEF7FAA7D6FFBFC68F6B9FBC8
-:1099B000719407412AA27A9F0DF564A3CA0F3DD97D
-:1099C000137C7E19F9819BD3458C419767FBDFA6F9
-:1099D000F2D6B800800000001F8B080000000000D5
-:1099E000000BCD3B0D545CD599DF9BF7E6CD10669F
-:1099F000E00D0CC910093E082831045F1288A04907
-:109A000079046240A94EF809B825E944A346DBB3BE
-:109A10009DBAD6923DD932094320989009A9256E66
-:109A20006D8BA9D9B5B547A9DBEDAA47BB9398F5CE
-:109A3000F81FDA5AAB7B3C16539BDDF6B83DF42792
-:109A4000969ED336FB7DDF7D0F6626432069F69C0C
-:109A50009D1C72E7BE77EF77EFFDFE7FEE9C3B87A4
-:109A60009F5A8073562B6B2A9865C09F73607DD672
-:109A7000E0736AF93FD0FD0B0114FAE6C047DD4DF3
-:109A8000F1A24AF1BC25404370BE1B4003889F935E
-:109A9000F0A9050F5FBD74AE182014C4877902AC1D
-:109AA000B67006EE4FBB56C7EFF4039C4538B9C6F7
-:109AB0000C1CDE47113040B0C763FF5A35FCEE9DE9
-:109AC000B4EE35601CD367C62BD6BA571F51216E32
-:109AD000CFC7BFCF5AEBFEB4AB353BE499396F6AC1
-:109AE000BB6C3479DE8774065C27E283D163F83D72
-:109AF000FA6E4CE24D3C837FB8DFE84A6D74109FEC
-:109B00003F688FF3E2B822315FC7FD66C0CC47598A
-:109B1000C878B05E428903E7EFBBBAE2519AFFF022
-:109B2000E3C3DFFA363E3EF29D3DBFA4764149C510
-:109B30005035C2CB341C86403B044A900E4EFA8608
-:109B400078F47CEAC814A21FFBC978DA5B7E678CC4
-:109B5000C99748471C7FC77EC9D4703D97C77354C7
-:109B6000A6FDB92593F62B1F5EC4FB0F6C4FA6FB19
-:109B70008864BE1DC0F19103121CC37E8691B00E95
-:109B8000FEA905C9E39B09BF55D44B18871B3F2885
-:109B900041E7581A7C3F1874303D886E9184FD1F50
-:109BA00072EAB7105E0FED932182200FED74012C45
-:109BB00006F846F0DFEFDE5D02F0853E27E37D64C8
-:109BC0009D3A2AE1FB11AFB6B993FA4B1CC6511D61
-:109BD0000463E2B90EAEB88ACF65AF3778ABCEEB8F
-:109BE000C5D6A9F9E0A1719381A097F9E88D2AE281
-:109BF000A3B765E6A3D4FDA7F2DD5C7C5618CCB113
-:109C0000F0300AC115C89EB279E20CEE0FAE763084
-:109C1000FF2CBFDAC1FB3B5B8003A4D9F9B0AF07CF
-:109C200017B87A866F548BEE7BFD2DA708FC6CF37A
-:109C3000D4D171B3A882D685F05839F27320797FD8
-:109C4000F6B8926979F83B5850C9723726E3595DE6
-:109C5000A371132AA81D37256CCB1EBD5FBB90BC1A
-:109C6000B820017E11C1053E7FAAFC3A21C448DC20
-:109C70009359781B9DBF6FA30AB29406DF73F40F4C
-:109C8000EDBCDB24FA473E0F4629EA096720992FED
-:109C9000832F9430FFC80332B8A444FE6A34895E2F
-:109CA0005FBAD539AD7FDCB61E23BA1B45E0C07D57
-:109CB0001D7E4B66BE391CDCFB0B99E4BB51D525E0
-:109CC000DC7F46ECEE87DAF1FDA1D765631087777C
-:109CD0003FB3EB67AF627BBABA788D544C44322302
-:109CE000DB71FCE9F56E63D010F2378D97626E4C34
-:109CF000F79A99F50E5517F37A515C4FBA001F2861
-:109D00008DEA0744875478D3FABAFBF858C3EA04BB
-:109D1000B95A187A2188E71BF2E0263CF4FE24BFEA
-:109D2000874AE4CBFCD9D7418C325E7E465F71DC3A
-:109D30005F5ACD9304A7A9B42A9249E7826C207C8C
-:109D40007CE8356EF4E190F79D86DB289F99DF1B58
-:109D50007342BC9CF080EB62DB0C135B5A88EF4BC8
-:109D60009CAC3F64FF4A7EBEDD1B541CB8AFFF0CA9
-:109D700016F37AF6FC26F8B2721FBEBFD639DA4067
-:109D8000FC11DD0E5A04A76CF3C614EA6FA00DE2B5
-:109D9000C21BF53A7711C26D7C9E1602A8F50DFB29
-:109DA000C90E553C77A42044EB47CC1F95219E7DDE
-:109DB0000255B0DC351EACC7F9BD6FC8C61E7EA209
-:109DC0001D0FE17C252003D1497A6A6D6002F7A35B
-:109DD00078CEBC075900EB26011A12F8A976CA0DF5
-:109DE0000D097AAE0E2127F6EBDDF949E337684518
-:109DF00049EF65308D38D277636059D2386F55A5F9
-:109E000046FB6DD257263DBFB9AC26693E3428A724
-:109E100027B0BF16FF11DD65107D5BAE3CE5D84F66
-:109E200098AF40421FDFFF25E8F59FC9C4CE75708B
-:109E30001DC94F33189D241F68BC8D63889785CF3B
-:109E4000B92732C9909826DB75C9E2CFAA4D454C97
-:109E50001FC973C641F87F0461C8C81715DA848327
-:109E6000E804DA98C4CF516F0C22B2038AC9E3D058
-:109E7000C069511C77056A6F0DFBDE00C4A8BF04E2
-:109E8000623C1E3FB1C335C8166E313FAB058C83B3
-:109E9000F83EB33C2249D8CF69044346781E635C40
-:109EA000A27D6A385F5E492C19E77E41238CF73228
-:109EB0007C730FCDCFEF06AD2F9FF997DF8F7641E3
-:109EC00084F6F32818E092091FA890969216097359
-:109ED0007B25E839A487BE09C62AEA97C204EB2588
-:109EE00034EF12F517C19826947D9CF5374C28BEA7
-:109EF000336EA1FFD3C9CD8CFC2870C6A60B0EBE55
-:109F0000FF56B37C13EAC1CDB7555DD0DF50BA5FC1
-:109F10004C92DFBB37E98C77A57B23CB8BD2FD122C
-:109F2000BF1FD814BC6E133E2755E05E75F1F8AF25
-:109F300050053EA31218E8CB40F4D99B02DBC85F62
-:109F400079D66D94B2C8233E892FAADD93AFD48809
-:109F5000F9440F3FD283F09D530E12E16009D10105
-:109F60009FAB48877D4CC718C32D0C83B1DB5A9734
-:109F7000FAF94807A2CB28680B08AF72F8E2E8C0EC
-:109F80001F84B3E81937FB470AD165E965A1CBA760
-:109F9000098F174B97547AC0AE5C809AB9F5E95790
-:109FA000A57886B494C882F4C1F348481FC26700FC
-:109FB000043DD0AE1B84A774F8A77E4625E87BB885
-:109FC0002FC6133D233533FC9F8DFC2FFA42BE7CF8
-:109FD0004807D11774F293BC603F101CE3F939DBDA
-:109FE0002178209FE86132F26CBBEC8249F66B8BE2
-:109FF0002583E9B55446070DFB9952DC727E46D99C
-:10A00000AE6781C6F4590C616EFDCEC9E3E7485FC7
-:10A010007B1CA391226A9FAEA3757A9B51C390CA01
-:10A02000F70ED7315FDE035A29F25DA16AB2FE2E28
-:10A03000BC4631227A22BEF608BF49378F90BD292F
-:10A04000747861B07266DDA8D308C4905EA7BC675F
-:10A050004E84F0F9827CB4EFC60C9E4F3BC5F908E4
-:10A06000A67C05C983908F4035EEC577BE7E0B2850
-:10A07000826F3D3B107F888FADF402F1240DFC1BF5
-:10A080003F7FA45EE8BBCF6E0A3D4EFC42FA89F1E9
-:10A09000678246FA493380F5A6438FB09F7076C039
-:10A0A000A5139F426CC424BF629BB5CEB601D707EF
-:10A0B0005256C239A3AE243BEED083D9CCCF86040E
-:10A0C000E41FCC77DEA5F23F74E7CDCB0FA87B6A07
-:10A0D0006DF644F9ECE354928FDCC479824EAA3FCA
-:10A0E000C47E874A72923B371C678AFF62C371063F
-:10A0F000820CC769FB2F64B7909E77A1DD1A447C60
-:10A100007FDA448788F972F23FC89EDF1ECE62BFB5
-:10A110008B5184E3EE8849A383C88F774258253E4C
-:10A1200095A02442F4DB1A91D87F2BDEB73D8BFD3E
-:10A130000568D0083F52FC06F9DCF28BC0A385A766
-:10A14000ADF15F3A752FE1D50B3F4F88B7ECF7BF04
-:10A15000EB5A7AAA4A27A5ED2923FA665AF445B59F
-:10A160001D790DF7E9FC53360C6AE4177FE98D5A27
-:10A17000DC5FDF8F6583E2B34C10F1D50210763CD3
-:10A1800093E47429F1CB58FC33C46FDDD91A9DD701
-:10A190001E07D6B80884D83FCE443D40701D99FBB9
-:10A1A000993F33B354DDF6B721F11C6E89FD608F02
-:10A1B000A572F3D4789CE42B0FFDD8DDC9F02511EE
-:10A1C000CF03C7437C0EE9FCF55758FE3ABEAA3BC5
-:10A1D000370FFF3ED57F87C47890C663DC194FC028
-:10A1E000EBB4BC587266EFDBE35193E525659E4DF9
-:10A1F0008F72A7E08FC5187FEDC6FD0E0C1CAD2336
-:10A200007D3392073A469AD0BFF59F248AB3D693FE
-:10A210002E26FBD300A3144778401F2CC3BEB3C027
-:10A22000C3FCB3E8BF83F1CF209CBBAB5D9A8E38F3
-:10A2300059FC91A9D5E1FBBB0ADC8689F48D5AE370
-:10A24000230DE86789E5DF26BFF44E6BBF4C0B9406
-:10A2500043B3A588F95DF1B5ED7D8DE2DEC532C869
-:10A26000A4D7E42E83ECD39D1830E4A2EB0E5F76E6
-:10A27000B2DF87FE1D9FC7D590ECF7DDF58833A9C7
-:10A28000EF4CF1136B5B92FDC0A616E075693FB908
-:10A29000ABFE7AF8E0F1B3FE5CA18C3BB43476D52A
-:10A2A000C6BFF49487F1FF421EE295F32441F37395
-:10A2B000D877211E895F11235955882793BEEAE478
-:10A2C000277FEF3E1AEF3A8BFC4BE3654FC3E788DD
-:10A2D0000E57587802B12F13FFD1BE53FD61578A34
-:10A2E0003F9CBA6F9B0E77D8F859036B083FE89FE5
-:10A2F000B37F609F2BF53CCF637CDE80BCF4831E74
-:10A3000037B7F11E8DDB133D016E4FF6E8D0808E1E
-:10A31000D54B3D65DCBEDC63F0F3577BAAB9B5F1E4
-:10A32000319BBEF1E639D85F38B4CBC17902A55C68
-:10A330007BE56AE2DBB764561F1AE819CA52B643D6
-:10A34000A0E0B82B1B955193CE62C53F8B2C3E5B92
-:10A35000EE9A3CEEC279B17C30F6D044B4DBDB2B14
-:10A3600067E29F75938E1939018A771624E50BEA07
-:10A370002037A95FEFBE2269FC066D69D27B9BBEC8
-:10A38000DFA81372B331B03C69FCA186F5F1BBC9FB
-:10A39000AFAF7169946F68D25727BDBFB9EC8624FF
-:10A3A0007820371BA4A773BA12E8C6E74FA6ABBA4A
-:10A3B000E3C271904DE7D11439988DBEA97C6BE34F
-:10A3C00035671AAF22AE8C525CA9D3B9CBA56D0804
-:10A3D0006A68DA2F3181F24BF6BA4A35C69715977B
-:10A3E0003FBECCA2F8B2285D7CF921E76DE68C2F48
-:10A3F0001B93E3CBAC14BCCD155FBE7A89F8DC5A55
-:10A4000028F26E39AFCBEC07CA8D61B67FB9E3B2E3
-:10A41000B191424FCB1FF392CCE3B8AD552AFB97D5
-:10A420008760220022AF984FF630B7DCC8277DF353
-:10A43000A4CF5C781BC5F94D0EE3284E79B1EE2B05
-:10A4400001F23BF6ED7E34804609FEA7C5C1FA2E27
-:10A450005677660BC995A2A31F27716B8EA6F14F85
-:10A46000ECF176BEF1E016916F3C68E51B0F5AEBFC
-:10A470002042D8DE8E54897CE3AF5B742BFF17E15A
-:10A48000FCE2E12D6BAC7C23F657D07083EDF8A095
-:10A49000D730EF20FEF9850722F8E880A4654964EB
-:10A4A0002FB63834CA1F8F34AE7A97F249FB3CAAD4
-:10A4B00041021FF5ADC927FE92B7A2DB83FDE1C6BD
-:10A4C000E19769BE52EAE07E74CB559C171CC9D354
-:10A4D0009A8A29CEDB504C9806F9993FF5505E23B5
-:10A4E000EA3B13A0F9BDD78BF9B3D12735FF2F93E2
-:10A4F00026A6F8ADC41157118EFCFC993F13BCF38E
-:10A50000F2F3297EC5A04FE5BC6DFE8FF77E2B527E
-:10A5100042AADCE47CF308CA3CE169EB96966C8ABB
-:10A52000A7B63A27F2D2D90B3BFF39ED6FFA93FD6C
-:10A530008454F8FCB1F36B0ED1D5EDBC2D7EA2B7DF
-:10A54000DC381A27BC41ACB198E25E8FB0CBB3E1E6
-:10A5500041F15CB80E22776798190978B0EB1DD7E6
-:10A56000B68A3CB8D1AADB79C6A47A89D2E8E07968
-:10A57000B67EB0F3E3A975127B1F35AD224F7BFD8C
-:10A580000CBCA4BA89BC56B5E0191C17A7E6B3E702
-:10A59000AAA3CC95CF6EB6CE73B175937B5B81E7E2
-:10A5A000FD7FCD7FDFDBFA7F93FF3EBF5E34CAF2D3
-:10A5B00003CF4CFE9CE43BBA6CA13E28EA4349F52C
-:10A5C0009CD43ACE60868033BC52F8A9C3563FB2C1
-:10A5D00042C04DADEF6458799548EB521187812107
-:10A5E00088AC9885C4171EE5BB110DF96181E71091
-:10A5F000F8B075F9B745A8AD2DD487AA715FC3CB64
-:10A600001C6CC786BDA147FB480F2DF3A4958F8313
-:10A61000AD422F0E10DF72FC04A683E44EB2850417
-:10A62000420EA4D708733EC0D1569FC86769B1EAED
-:10A63000DB118F5F25BEC8E3F3F0FC54F85F3B1FCE
-:10A64000FE63C4AF510B38C1D98670BED93A5D479D
-:10A650008CD07BB7B59E5B8F5593BFF058AB26F47B
-:10A66000B0B2D2A0F30FFBD2AFF798B59EE9084B7A
-:10A67000346E5197980F6E31EFA034D9795AD09338
-:10A68000E589D6A7F79946B27E48859B5176E17A4F
-:10A69000D9D3D3FB4F8E870E48E9F7F9634B0E6B86
-:10A6A0000B81ED11F1C59E347C912AEF2AE53F1113
-:10A6B000EE098B0EB6DEF128E3EB332BC9BE83D156
-:10A6C000CB883DCEE7DD93790BC7C97D378B3C87BF
-:10A6D000AA08BD5DD089606AA8BED210E1BAE1FDCA
-:10A6E000A0B97CE7E3E162E33DB2379184F93FB181
-:10A6F000F823B52E18A3BA20F9B15417A4FE4E576B
-:10A70000673ABBFD6E8BD3B2BFE9EB3B47A8BE8374
-:10A71000F38F545BF59DA0A8EFD43DF508ECC4F78A
-:10A72000BF331DECB74ED7771A8AD7480E9623A0B1
-:10A73000FAF47CEB3BB18679D67782175DDFF9635B
-:10A740002BE2E79047D459A6EB3B6DFE79E5757493
-:10A7500088C5BB49AF7401E3C1DB340C3B299F10B2
-:10A760001071C6892A97E0AF9D92159F4103D87A50
-:10A770000A3FCD5DFAC3B9645FDE714129BE5FFF58
-:10A78000C4EB0AF587F31D6B287EBE569D78F05A00
-:10A790007ABFC6C9FAA30E29194FE28FB8CBC145BB
-:10A7A000F0886AB5B268E312B5F5EECC247DBD4100
-:10A7B0004B8E3F86A64EC8D9C49F1A1812E279A8BC
-:10A7C000CE30B349F71813BDF47C68836E0CEAE40D
-:10A7D0000F27C729434DAAD0A745C2EE0C1FD71F8C
-:10A7E00026FFAABF3B83FDCF03050E71EE1218258D
-:10A7F0007E68D293E39AE1B1E27D2524673127E7B1
-:10A80000CBBF3326C66FDFBD7294E252CDF257B78D
-:10A81000E7AF673F14FAC4B89BCB96A79C7F5C2335
-:10A82000BE88ED7402E1BFBFE0F601CA877E1075F5
-:10A83000AE2671196AD3997F6DBA6DEBBB93EB4469
-:10A840007D2A70DD74688BCAFC3F94F7C1913B4848
-:10A850004FE72D603C8F6C51F34309F270A2CDC5D8
-:10A86000F41ED922FC8B3C0784C6D2BC3FD126F40F
-:10A87000D027EF013E4F16DA651D1FE94A38EE2258
-:10A880007C1400FC231D27F0E1437CFE460794E284
-:10A890001687FD5DECBFA5F2D9785B69525CEBAA27
-:10A8A0007624E1D1E90A8639CF7D33E8A4AF1A1ABC
-:10A8B000B14FF17D970AC46FAEC0FD7CCE1CEC6732
-:10A8C00060DFDD188B28D87797845693DFFAE2CEC5
-:10A8D0008E01CAB3B8FC0E8DF8CDD57557B095C6AC
-:10A8E000573A2103DFF7812E05689F1109485FEB76
-:10A8F000106A247F7D38E0D0286FD31C6DDF41EBD8
-:10A9000037FB1700D1796B9383D73B6BAA9CB4CAF2
-:10A91000234783F25F0B3D6C77DF77861FEEC0F134
-:10A92000EF23BD223073AE5D6DC54CA70C3D397E63
-:10A9300076438CEDF05A73BC8BD6595BAD52450310
-:10A940004ED49C3942FEFA4895CB70E1BE466A244B
-:10A95000C6F7C755CE51BAE7F003755CA6757FF010
-:10A9600031F246513AF9BDB0DCA48E1FAA6E7113C4
-:10A970003FEC458A107E22530EB65FA9E3FE6CD1F0
-:10A980007F2FE285F01CC1FD96525C34897285D020
-:10A990007D53C1C7EFC076559BC2E3BE90EF885090
-:10A9A0005DA8BF496539E9F78606E8FE4F3FF23BEF
-:10A9B000C743FE10F3F370BE9FE5D05E67B86673C1
-:10A9C00019F1CB1B5519ECB757B535DE4B7EFB7A29
-:10A9D000F9A37F798AE2A70295E9D9EF0CC65F2532
-:10A9E000BE6E12FEE2C9250FB0DCF575DD0E8437B0
-:10A9F0008884DFA1BA555F650DC3B7F30DC34B441F
-:10AA00003EA9CF7F5F84F21BF16A915F30F38E72B3
-:10AA10003ECFCE2BD5597A6CB92BFC4A29CDBB47FA
-:10AA2000117561B9204AFAC04579259AA724E7BB78
-:10AA3000D64D26C7C18B53E2E0D43C13B8C74B5A5E
-:10AA4000D19E3ED986F1F17298CE2BD111588E2B22
-:10AA50005D1C2F8E548B3828E60CE76BE5E7CBF1B5
-:10AA60009B961F3CDEE3460E00F8518FC6FD2CF38B
-:10AA700037BB7311D45B3D017E7EEBDA47A5C47909
-:10AA80004395ED6E9DF5C64480E0A6EA8B543E5892
-:10AA9000DBB6C0B20F26107D872681F1EBAD5915CC
-:10AAA000273E3DFB7BE038F4130DE31E283E7F7EFE
-:10AAB0009CF6E9A2FC97D8E749DAA78BF25F627FA0
-:10AAC0002FF7E8DCBEDA53C6ED827610797E5B1F85
-:10AAD0005C89FA00F1D65020FA24FF648773FCB732
-:10AAE0000789BF5C014523F97617C4E252823E18FC
-:10AAF000F186DF25BBDC9FE761FE4BDDD7AFDA1CBB
-:10AB0000D6B9C2B711DC21844B787F71E77F3DB4A1
-:10AB100094D6794B66BECAE9DABC83F50EEA850C99
-:10AB2000F637843E8CE57938EF30B2B354A2FB504F
-:10AB30005B770B47774EB9C7754671DE09D4D7D41A
-:10AB4000EF4739A7F3F4D77CF0195AE7E33F2EE03B
-:10AB5000FB4D235BDE66B97F030390DCCB28F7B6A1
-:10AB60009CC5DE5AFC6D117F073B9E11E7673D389F
-:10AB7000E21D8FD1F9FB7F22433ABC5D2A5DC19C67
-:10AB80009F1F32AA4C1E3FE74F53373445DDB07745
-:10AB9000EC7BDC8F34039462FFEB4ED34D7CF0F5FD
-:10ABA000DD8E0BD60DBFBEFBC275C3D12F3BC0A53A
-:10ABB000CDECE30A98E03C2B85F05407ECA357D882
-:10ABC00066B787AE6E673F52D415F51ACA39505F23
-:10ABD0005B40FEF3C026B38CDFFB73D8EE0794B165
-:10ABE00038D9F500D5CB75BABF10E1BA27E567E9CA
-:10ABF000FE42EAF97B9D13EBF97C3884EA95A9F5CE
-:10AC000049C9F37D51DF5F2AEA90767DB2429D38D3
-:10AC1000FA20E1E93637E3A1F7D9EBDFA1FA975D36
-:10AC2000C70F5875606D0768BBC539CC76F2FB9FBE
-:10AC300017F550B81ECFB192169928DEB482EB9B5F
-:10AC40001BE81C73ED7FBE75C3664BBF2173F33DDC
-:10AC5000C89F59F8B4C7FD4DBB90C76B5591B786D7
-:10AC60002C95F5FCFA273C2093BFEC558F929C6CF9
-:10AC700083890D244FBD3EE1B7450F39D96FFB5491
-:10AC8000BBCE74CD534DBEBF90F7F719C66E0413FB
-:10AC90003DAE65511EE92FADE6A7DA791FB1B616B4
-:10ACA000DAC780CCFAEEFDD20D7C8FA949CA66794D
-:10ACB0005434B330515FEE6A4F7F1FA9B670B2852E
-:10ACC000D7F73A80E2AD6886F1B24EF87E4161B8BE
-:10ACD0004D20EE2BC1764D1AC073F67A4E337D6A45
-:10ACE0004B5D2B493FED6A17715BD49B3EAE7BA059
-:10ACF0005DC49F852DA12F101D6E82C97AD26F2849
-:10AD0000DA4684EFB588786D17E94B11EFEE72AC37
-:10AD100099C96BBDE40CEDA2F39ADF11FE842B20E0
-:10AD2000FC7A8CD4381F74ACC5FC0782DB4C7C5E8B
-:10AD3000C98A0A8EAD3C7F1F519B2EED662FC13B09
-:10AD40006CE9E70ACDE4BA6B05388C5E7F425D5D45
-:10AD50009F5F5D5DD2BE2FEAE937083E86E723821A
-:10AD60000FD78346F284FC7798D6B3EF97543CB75D
-:10AD7000A388EB2E9758DF3ED5627E95E0BDB829BB
-:10AD8000F8353AF7FB3B3B80E1CDF3BE466D6138C9
-:10AD900010443AF56708BFF9C93AA3339890FF7990
-:10ADA000D3A2D79B165D97233B8D8B7B6F6CC7AF70
-:10ADB000826A37D12B157E5F0F8C511D68B6F5D591
-:10ADC0007DF7B9294FDC5BB0DE4DF7D1A29EF5D9F6
-:10ADD000D4EF2F3003B47E5F4FE3B31F96121F09E9
-:10ADE000BE8F2C11F98818EAE748429EF4C576997F
-:10ADF000F7555F0071CAA7BB3CC22F7261BCA8AFF8
-:10AE000020BFB99AED393E1FA3D4C16B963CC9A6A9
-:10AE10000126DD172C0089F0853A727A3E99BCFA3A
-:10AE20008230D0BE66832337E07C8A470B34F643FA
-:10AE30007EDDAE313E7DA663268E87F9E3EBD01C26
-:10AE4000F8CA99035FD37C6DC95D2A9ECE109E8897
-:10AE50004F7C0FF0B9E04FF52C672E547854CFFF9C
-:10AE6000C8C68BC7849097C37F89F013A50B36E5BE
-:10AE700033F8455F91F12B6B619EE72A3020B48255
-:10AE8000F0A149848FD4F3573CF77803E1ED956D39
-:10AE900042AFD62A96FE08E359903F6FB2D605CB53
-:10AEA0002E356508BBD30C3FF488BCB6E0D30A74DA
-:10AEB000C7DD39E7EB57BB7D72967BD74F6ECE105F
-:10AEC000FE903EC6FABDB751C0F77A851F7A74600E
-:10AED00015FB0F37E6972E48D48F97BB4E985A171D
-:10AEE0009CAB0E38C337A69BF6F93BEDBE085D95CB
-:10AEF0009B8D3F1E24FE7192DCB8B93DEF7D613021
-:10AF000060905C2D31238074DBEB0B07887FFA8E19
-:10AF1000EF7C87EA24CAEBB241FEA6A20481C6DD1B
-:10AF2000981766F9D8586002D5951EEC31BF9B087A
-:10AF3000F7969650F966A45BA63666121C0FC423DA
-:10AF4000648F6ECA35C3C13474A8DE2CF4C7B196C1
-:10AF5000E02A9A574BBA7315C0C39BCCD5D49FAF88
-:10AF6000BE3A5F9E1ADDA4F72F5D9E5ADC74BEFECA
-:10AF70008220DFD3EAFFA14C1ED6F4B87E4B9EFAA6
-:10AF8000973C00A104B90A6E4ED13B7E4BEFF84DC1
-:10AF9000968BCD9B752B0F1C64F970923C9527E81E
-:10AFA00019BFAD674C9647C56FCB93257F244F1EC5
-:10AFB000BA1F3C594F7E4A1F887B8CA9F2156E0937
-:10AFC0006DD94C762CEFB7AD45FACCFD4F5D17F23D
-:10AFD000D45F60F1FB92A799FFCF22FFD365E15EBA
-:10AFE0004F7112BFDBEDDA2919E2488A755312B7A7
-:10AFF0009F98CAE4B6762A835B732A97DBBA291F27
-:10B00000B7EBA7AEE0B67E2A9FDB8629E4FBD5C866
-:10B01000FF5345DCDE38B59CDB8D53CBB86D9C5AB5
-:10B02000CDE39AA656727BD3D40DDCDE3C5523D6F5
-:10B03000A19A504E5AFEA772D665E07F2342F5D101
-:10B04000BEE3F7BC43F8716A2AE751A2BE355CEF54
-:10B05000712A61E6FFA30542BF6FF408FAA4F2FF6C
-:10B06000B196D0FE74FC0F4E716F4BA17B5B95ECDB
-:10B07000E70C337F9FE7EFBEF447CA83A2FF7198C6
-:10B08000DF5FA2FD9FF62B1726FB95FD79C97E6534
-:10B09000DF12DBAF748D521D6CBBA4F33DB1532D99
-:10B0A000A17FE6F521B88DDE87DADC1AF95351DF8E
-:10B0B0008D010FF6B7EE9581F27DE85F7C8BF80C81
-:10B0C000503F90DD98AFBC3EBCC9D2EFD6F80A38ED
-:10B0D000ED085F847FF23E7DAD395FEE679B67CB05
-:10B0E000FD55509691CECEE638EB85DC6B42EEA353
-:10B0F00005C101CAB74453E4DEB6A3888724B93F2B
-:10B1000065CBBD25C7397E71EF2387E41EF9EA2799
-:10B110009BC579D1DF4EB2A38A35DED928EA5BF52B
-:10B120007EA1579546A12F142DD98E22DFBC4B74DA
-:10B130004995F78822FCE3A6D27F9DB667645773D2
-:10B14000FC3E291B97D67E3F11A13CD6716529CBC9
-:10B1500077AA1C45B555CCE7C7957A4827FFF396E3
-:10B16000239F6D474CB623A9E36C79EA3BDEC47894
-:10B17000B1EDCA713CB799604F366A020F684F3E15
-:10B1800026FE4A95A7DA4233144CB34FB543F8A5CF
-:10B19000AFAD0B0A7F11FD44F253A2CEF47E80DAEC
-:10B1A00021FC9F9C46EBF7153A8473510F3636C647
-:10B1B000EBA98681F2AC7620BC75E6442FC960AF5E
-:10B1C00067D84FFB47F97475FC15F2F9D126E117E2
-:10B1D00042772EFB2D763B17DFDBFE8ECDFFA9E3FA
-:10B1E0009E2C323BD3E1E5F3165E8E0E3C9DC41FD0
-:10B1F00043CAD29B0C3DAD5E358DCBA257E7E757D6
-:10B200001C473BC77A7576BFE2BA8E347C309B5FB1
-:10B21000F1890E91CF45BF621DCDAB2D177EC5E7DD
-:10B220003BE0F2FA0B35F731BE2ED55FD86CF1DF7B
-:10B230006CFE425787AD37C2AC375C96DEB8587F9C
-:10B24000218D7F703BF32F4CCA54FF43541B221FA8
-:10B2500022F408EA99BBE83DC6F1EC2F1CF5087E04
-:10B26000312D3D736D7B7007E175A85AF80B974B34
-:10B270000ED0EFBBAF236FFEF230DF71A58FAD1D97
-:10B2800098203F07BC31BA37DD4BF795287E7CCF3D
-:10B290002BEE11009451DEFF8BF23506D9B991CC1B
-:10B2A0002F7D83C6774714A07B83433D22FFF7C5DC
-:10B2B000055947017967C8197E6AC2CFBF770D1E4D
-:10B2C000C5F60F1985A39070EFF6B0256F2ED8C282
-:10B2D000F774B3B45B9EFD3037DDFEC4FD5CBABAD3
-:10B2E000728E7FD751A0F13D320B3F596A10227EFA
-:10B2F000922307D747D0DB83EA84BC475F4D5727AB
-:10B30000C7C1F922EF25837286F2EF03B49638178E
-:10B310009FB37FB1FB513A970E218677D0EFE0BC07
-:10B320007BFF5A11EFF47BC26E2D8DDED8D7937C54
-:10B33000FF28B595973D16A33BC287038A4169CF85
-:10B34000C1B2CA26CA4F4635AE0083EA7304D3D5CC
-:10B35000A7C72DF9D4C1607BAC7CB2253B9DBDB0A5
-:10B36000DB010BFF76DF5D326612DFA94566907F59
-:10B3700087E3F34B9184BCF11316FCBD9211AF45EA
-:10B3800064EDF50AFDEFD66326FDDEB82FEF2EAE95
-:10B3900033BAF5089CA1E72531F839E9A77C77E7AE
-:10B3A000689A7DBCD521E294BDCE10AFB7375FE17E
-:10B3B000FAE3DEA2F4F9ACE73B441E49F5AD0F72A7
-:10B3C0005EDFA7709D3875DC53169FF4AB6640E3D3
-:10B3D000B8FA81323A577409708E72EC9D379FD853
-:10B3E0008DFDFD3D41CE7B0C51FE0385B5BFF05E6A
-:10B3F000C6FBFE6B1C1A9D6383FC11DF47385C0D96
-:10B4000006E98FEC6A1C9710471E86D101BA0F77A8
-:10B41000782D70BED46B0493DEF723038E93FFA5C3
-:10B420004CB03E734237D7010EF855BEA73354795E
-:10B430009AFD231DC6394F315429E865D793FC1670
-:10B440003FFAFD773527CAC1018B6E0F52DE9CEFA4
-:10B45000318D41A2FF75A0709CEDF38175E39D5481
-:10B4600017CCF2BB0D0A45F6D70481E474A8CA9143
-:10B47000F67ED450D569DE67EA7E9C277EC9FA2F16
-:10B480004B99E0FC4456D96FD9AE3C64ED63E35A66
-:10B49000E0CD66570B3D9BDD1606FA7D58DE5BF26C
-:10B4A000A88EFDDD85BF8A38493E6E0358A4D37E41
-:10B4B0002778BF879B9F8EF3FEACFBBA203FCFF768
-:10B4C000712128E4D7BE77BDB04D4D8ADFB352EE6F
-:10B4D0004565A6F441EEBAE07DB2EEF7EE3975327D
-:10B4E00001DEA2CEE4FBD973CDFF43CF8E5327916B
-:10B4F0005F0E575E58BE0E59758D584F35D3C9E64D
-:10B50000339BEFB2E88839B3CF1FF28D75A6B3C372
-:10B510001D9D420E52F93195FF34D718DBF143EBF4
-:10B5200092E1DCD029E4F8060B4E4EA19E4FEFEDE0
-:10B530007B4C747FEAE934EB7EBA53E5F1337C6DE2
-:10B54000DBF9772ECDCE2F6B1176DEBF2A83EC3C54
-:10B55000E2F365BAC7F67B940F4890EB3E6FB29F5B
-:10B5600069DBF9C73B457CF062DE5512D9E91CCF97
-:10B5700004FBBF59D5C97980543BAD3A431C37AA67
-:10B58000F9AAAD6FB89EF55AC7FB4F4410CEFEF82E
-:10B590003EAE0F6522FF66484CA7483A3A4179F221
-:10B5A000BD9AF24E10BF63D3855EC85AAB70BD63BF
-:10B5B000C8F15EF587D82AB130042DB883CCB7FB2B
-:10B5C000C7F97E8EC5F773D1933E7F5A63FD2E85F2
-:10B5D000EA88F56F56A78B2BEC96EE4F25DF77BFE9
-:10B5E00038B9F8FB4EABBE9C0119422E9A1D7D6402
-:10B5F000EF9B1D7C2F85AEEF2A6BACD201D5F56990
-:10B6000067F8DE4FF77F24AB5EB474465EE0567198
-:10B61000AFE5EC0E714F867F47B8947EF739C1BF16
-:10B620000FBC926EB1CAEC07B3DC9C850207D583D0
-:10B6300023272469DA0FBA82AE341A0E9A570241D0
-:10B640006E53F77D1584F97919C4B8BD06C6B82DB7
-:10B6500087716E2B60925B9326E07E8D93A2AEB1D4
-:10B660000A0C999E574290DB3510E6B61A62DC7ED2
-:10B67000A5FE6F7F733B4EF9DA797811784D23DFA1
-:10B6800071043A7D7E1BCFAD9D3AF3C95CF4EEF3B5
-:10B690004DB01F5F5F3DCE7EA8D71364FE76FA05DE
-:10B6A0007FDB709CB3E4836D3F49253F69751AFECB
-:10B6B0009DC34F4AFD1DC9FF0229F7D0B3D04500F5
-:10B6C0000000000000000000000000180000000062
-:10B6D000000000000000004000000000000000002A
-:10B6E0000000002800000000000000000000001022
-:10B6F000000000000000000000000020000000002A
-:10B700000000000000000010000000000000000029
-:10B710000000000800000000000000000000000021
-:10B7200000000000000000000000003900000000E0
-:10B7300000000000000000380000000000000000D1
-:10B7400000000000000000000000000000000008F1
-:10B7500000000000000000000000000000000000E9
-:10B76000000000000000000C0000000000000000CD
-:10B770000000000E000000000000000000000004B7
-:10B7800000000000000000000000001800000000A1
-:10B79000000000000000001C00000000000000008D
-:10B7A0000000001C0000000000000000000000136A
-:10B7B00000000000000000000000003A000000004F
-:10B7C0000000000000000001000000000000000078
-:10B7D0000000000200000000000000000000000166
-:10B7E0000000000000000000000000100000000049
-:10B7F00000000000000000500000000000000000F9
-:10B800000000000000000000000000000000000335
-:10B810000000000000000000000000AB000000007D
-:10B820000000000000000008000000000000000010
-:10B830000000C00000100000000000080000C00868
-:10B8400000100000000000020000C0000010000016
-:10B850000000001000009FB0000000000000000881
-:10B860000000C08000100000000000040000C0883C
-:10B8700000100000000000020000C0800010000066
-:10B8800000000010000091200000000000000008EF
-:10B8900000009340000100040000000100009348F4
-:10B8A00000000000000000020000935000000000B3
-:10B8B0000000000800009354000000000000000297
-:10B8C00000009418000000000000000800009358D9
-:10B8D000000800000000000800009AB000400000CE
-:10B8E00000000040000093980008000000000008DD
-:10B8F000000093D800080000000000080000942019
-:10B9000000C8000000000098000095B000980000FA
-:10B9100000000028000095F00098000000000028BA
-:10B920000000C480054000300000054000009D205C
-:10B93000000800000000000100009D210008000038
-:10B9400000000001000020080010000000000010AE
-:10B9500000002000000000000000000800009CD84B
-:10B96000000800000000000200009D180000000018
-:10B9700000000001000000010000000000000000C5
-:10B9800000000009000000000000000000000002AC
-:10B9900000000000000000000000CF2000000000B8
-:10B9A000000000200000CF46000000000000000161
-:10B9B0000000600000200000000000200000730074
-:10B9C000000800000000000800009FA00000000028
-:10B9D0000000000100009FA800000000000000011E
-:10B9E00000009F60000000000000001000009F6346
-:10B9F000000000000000000100009F610000000046
-:10BA00000000000100009F6600000000000000012F
-:10BA100000009F67000000000000000000009F6819
-:10BA2000000000000000000400009F6C0000000007
-:10BA300000000004000000520000000000000000B0
-:10BA400000000003000000000000000000000003F0
-:10BA500000000000000000000000000500000000E1
-:10BA600000000000000000020000000000000000D4
-:10BA700000060000000000000000002000009F7091
-:10BA8000000000000000000100009F900000000086
-:10BA9000000000080000005300000000000000004B
-:10BAA00000009F98000000000000000200009F9C22
-:10BAB000000000000000000100009F9D0000000049
-:10BAC000000000010000000900000000000000006C
-:10BAD0000000000100000000000000000000004421
-:10BAE0000000000000000000000000010000000055
-:10BAF00000000000000000500000000000000000F6
-:10BB0000000000890000000000000000000012C8D2
-:10BB10000080000000000080000000010000000024
-:10BB2000000000000000A000071000000000071047
-:10BB300000001AC800000000000000080000AEC0AD
-:10BB400000080000000000080000AE4000080000EF
-:10BB5000000000080000AE8000080000000000089F
-:10BB6000000020080010000000000010000020006D
-:10BB700000000000000000080000A01007100040B6
-:10BB80000000004000001BF8000800000000000159
-:10BB900000001BF9000800000000000100001AD09E
-:10BBA000000000000000000100001AD800000000A2
-:10BBB0000000000200001ADA00000000000000028D
-:10BBC0008000000000000000000000000000AF0046
-:10BBD000000000000000002000001B78002800008A
-:10BBE000000000040000E000002000000000002031
-:10BBF0000000F300000800000000000800001AF038
-:10BC0000000000000000010800001B3700000000D9
-:10BC10000000000100001B0F0000000000000001F8
-:10BC200000001B70000000000000000400001B74F6
-:10BC300000000000000000040000005000000000B0
-:10BC400000000000000000030000000000000000F1
-:10BC500000000005000000000000000000000006D9
-:10BC600000000000000000000000000700000000CD
-:10BC70000000000000001BC80000000000000001E0
-:10BC800000001BE800000000000000080000005158
-:10BC9000000000000000000000001BD000000000B9
-:10BCA0000000000400001BD400000000000000049D
-:10BCB00000001BD8000000000000000400001BDC96
-:10BCC00000000000000000080000B00000180000A4
-:10BCD000000000180000C00000400000000000400C
-:10BCE0000000C00000400002000000010000C00190
-:10BCF00000400002000000000000E2000020000000
-:10BD0000000000200000E204000200080020000201
-:10BD10008000000000000000000000000000E200C1
-:10BD200000080020000000040000F40000280000CB
-:10BD3000000000280000F540001000000000001086
-:10BD40000000F5C000200000000000200000F5C049
-:10BD500000020020000000020000F30000200000AC
-:10BD6000000000200000200800100000000000106B
-:10BD70000000200000000000000000080000110882
-:10BD80000008000000000008000011680008000022
-:10BD900000000008000011A80008000000000008D2
-:10BDA00000001240000800000000000100001241E5
-:10BDB0000008000000000001000040000020000416
-:10BDC00000000010000059000030001800000010B2
-:10BDD0000000590800300018000000020000570061
-:10BDE00000080000000000010000570100080000EA
-:10BDF00000000001000011E8000000000000000148
-:10BE0000000011F00000000000000001000011F827
-:10BE100000000000000000100000124400080000B4
-:10BE2000000000040000400000200000000000208E
-:10BE30000000530000100000000000100000153842
-:10BE400000000000000000010000000300000000EE
-:10BE500000000000000000000000000000000000E2
-:10BE600000000001000000000000000000000004CD
-:10BE700000000000000000000000150800000000A5
-:10BE8000000000010000152800000000000000086C
-:10BE900000000050000000000000000000008308C7
-:10BEA0000080000000000080000000010000000091
-:10BEB000000000000000200800100000000000103A
-:10BEC00000002000000000000000000800008410B6
-:10BED0000008000000000008000084700008000056
-:10BEE0000000000800060000046000280000046054
-:10BEF00000008520000800000000000100008521EE
-:10BF000000080000000000018000000000000000A8
-:10BF10000000000000008408000000000000000194
-:10BF2000000084F40008000000000002000084F615
-:10BF3000000800000000000200008504001000005E
-:10BF400000000004000087600000000000000020E6
-:10BF500000006000002000000000002000007300CE
-:10BF600000080000000000080000000300000000BE
-:10BF700000000000000000050000000000000000BC
-:10BF800000000006000000000000000000000007A4
-:10BF90000000000000000000000088080000000011
-:10BFA00000000001000088280000000000000008D8
-:10BFB0000000005000000000000000000000881099
-:10BFC00000000000000000040000881400000000D1
-:10BFD00000000004000088180000000000000004B9
-:10BFE0000000881C00000000000000080000300075
-:10BFF0000040000000000008000030080040000081
-:10C00000000000280000339001C00010000000086C
-:10C010000000320000200000000000200000372057
-:10C02000000000000000000800001020062000387A
-:10C03000000000080000A000000000000000200038
-:10C0400000003EA9000000000000000100003EC802
-:10C05000000000000000000280000000000000005E
-:10C060000000000000006000002000000000000848
-:10C070000000400000080000000000010000400136
-:10C08000000800000000000100004040000800041B
-:10C0900000000002000040600008000400000004EE
-:10C0A0000000400000080000000000040000400400
-:10C0B00000080000000000040000404000000000F4
-:10C0C00000000008000040480000000000000008D8
-:10C0D0000000800000000000000000100000504040
-:10C0E00000010004000000010000500000000000FA
-:10C0F00000000020000050080010000000000004B4
-:10C100000000500C0010000000000001000052C7A9
-:10C110000000000000000001000052C60000000006
-:10C120000000000100003000003000180000000492
-:10C130000000300400300018000000040000300847
-:10C1400000300018000000020000300A0030001823
-:10C15000000000020000300C003000180000000158
-:10C160000000300D00300018000000010000300E0B
-:10C1700000300018000000010000301000300018EE
-:10C18000000000040000301400300018000000041B
-:10C19000000050000100008000080004000050046E
-:10C1A00001000080000800040000000A00000000F8
-:10C1B0000000000000005068010000800000000145
-:10C1C0000000506901000080000000010000506C78
-:10C1D00001000080000000020000506E010000809D
-:10C1E0000000000200005070010000800000000408
-:10C1F0000000507401000080000000040000506640
-:10C200000100008000000002000050640100008076
-:10C2100000000001000050600100008000000002EA
-:10C220000000506201000080000000020000505039
-:10C230000100008000000004000050540100008054
-:10C2400000000004000050580100008000000004BD
-:10C250000000505C01000080000000040000507CE1
-:10C2600001000080000000010000507D01000080FE
-:10C270000000000100004018001000000000000451
-:10C2800000004090001000000000000400004098F2
-:10C290000010000000000004000041100000000039
-:10C2A0000000000200004112000000000000000237
-:10C2B00000004114000000000000000200004116D0
-:10C2C00000000000000000020000604000080000C4
-:10C2D00000000002000060420008000000000002B0
-:10C2E00000006044000800000000000400006080BE
-:10C2F0000008000000000008000060C000400008C6
-:10C3000000000008000060000008000000000002BB
-:10C31000000060020008000000000001000060044E
-:10C320000008000000000002000063400008000058
-:10C330000000000800006380000800000000000406
-:10C34000000063840008000000000001000063C0DA
-:10C350000008000000000002000063C400080000A4
-:10C36000000000020000640000080000000000045B
-:10C3700000007000001000000000000400007004C5
-:10C380000010000000000004000070080010000011
-:10C3900000000004000090000008000000000002FF
-:10C3A000000090020008000000000001000090045E
-:10C3B000000800000000000200009040000800009B
-:10C3C000000000020000904400080000000000028D
-:10C3D000000090460008000000000002000096489F
-:10C3E0000008000000000008000090800008000025
-:10C3F000000000020000908400080000000000021D
-:10C40000000096880008000000000008000080403E
-:10C41000000800000000000100008041000800004A
-:10C420000000000100008042000800000000000140
-:10C4300000008043000800000000000100008000B0
-:10C440000008000000000002000080020008000058
-:10C45000000000010000800400080000000000024D
-:10C46000000080C00008000000000002000080C240
-:10C470000008000000000002000080C40008000066
-:10C4800000000002000080800008000000000001A1
-:10C490000000808100080000000000010000808290
-:10C4A0000008000000000001000080830008000078
-:10C4B000000000010000808400080000000000016E
-:10C4C0000000808500080000000000010000808658
-:10C4D00000080000000000010000600000080000EB
-:10C4E00000000002000060020008000000000001DF
-:10C4F000000060040008000000000002000060422C
-:10C5000000C00018000000020000604000C00018D9
-:10C51000000000020000604C00C00018000000088D
-:10C520000000604400C000180000000800006057D0
-:10C5300000C00018000000010000605400C0001896
-:10C54000000000020000605600C00018000000015A
-:10C55000000066400008000000000008000066803F
-:10C560000008000000000008000066C0000800008D
-:10C57000000000080000DA4200180000000000027D
-:10C580000000DE4000000000000000000000E000AD
-:10C5900000000000000000040000D0C00000000007
-:10C5A000000000040000D0C40000000000000004EF
-:10C5B0000000D0C800000000000000040000D0CC43
-:10C5C00000000000000000040000D0D000000000C7
-:10C5D000000000040000D0D40000000000000004AF
-:10C5E0000000D0D800000000000000040000D0C00F
-:10C5F00000000000000000200000DB000000000040
-:10C60000000000040000DB000000000000000068E3
-:10C610000000B94800000000000000000000D00049
-:10C6200000000000000000040000B0C00000000096
-:10C63000000000040000B0C400000000000000047E
-:10C640000000B0C800000000000000040000B0C0FE
-:10C6500000000000000000100000D6B00000000044
-:10C66000000000040000D6B4000000000000000438
-:10C670000000D6B800000000000000040000D6BC96
-:10C6800000000000000000040000D6B00000000020
-:10C69000000000100000D348000000000000000867
-:10C6A0000000D358000000000000008000000010CF
-:10C6B00000000000000000000000D358000000004F
-:10C6C0000000000800000000060209000000000051
-:00000001FF
diff --git a/firmware/cis/.gitignore b/firmware/cis/.gitignore
deleted file mode 100644
index 1de39847f261..000000000000
--- a/firmware/cis/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.cis
diff --git a/firmware/cis/3CCFEM556.cis.ihex b/firmware/cis/3CCFEM556.cis.ihex
deleted file mode 100644
index e4d92b173e17..000000000000
--- a/firmware/cis/3CCFEM556.cis.ihex
+++ /dev/null
@@ -1,13 +0,0 @@
-:1000000001030000FF152D050033436F6D004D65A2
-:100010006761686572747A2033434346454D3535D0
-:1000200036004C414E202B2035366B204D6F6465D9
-:100030006D0000FF20040101560521020000060B9F
-:1000400002004D000000006B000000FF001303439E
-:100050004953210206001A060507001067021B0912
-:1000600087011901556430FFFFFF00130343495313
-:10007000210202001A060527001177021B09A701B9
-:090080001901552330FFFFFF00B8
-:00000001FF
-#
-# This card is MFC-compliant, but identifies itself as single function
-#
diff --git a/firmware/cis/3CXEM556.cis.ihex b/firmware/cis/3CXEM556.cis.ihex
deleted file mode 100644
index 895010b230ff..000000000000
--- a/firmware/cis/3CXEM556.cis.ihex
+++ /dev/null
@@ -1,13 +0,0 @@
-:1000000001030000FF152C050033436F6D004D65A3
-:100010006761686572747A20334358454D353536CB
-:10002000004C414E202B2035366B204D6F64656DA2
-:100030000000FF20040101350021020000060B0230
-:10004000004C0000000069000000FF00130343495A
-:1000500053210206001A0501070008631B098701E6
-:100060001901556430FFFFFF001303434953210278
-:1000700002001A0501270009631B09A70119015590
-:060080002330FFFFFF002A
-:00000001FF
-#
-# This card is MFC-compliant, but identifies itself as single function
-#
diff --git a/firmware/cis/COMpad2.cis.ihex b/firmware/cis/COMpad2.cis.ihex
deleted file mode 100644
index 1671c5e48caa..000000000000
--- a/firmware/cis/COMpad2.cis.ihex
+++ /dev/null
@@ -1,11 +0,0 @@
-:1000000001030000FF151F0401414456414E5445B1
-:10001000434800434F4D7061642D33322F38350013
-:10002000312E300000FF210202011A0501050001F6
-:10003000031B0EC18118AA61E80207E8030730B864
-:100040009E1B08820108AA6030030F1B0883010869
-:10005000AA6040030F1B08840108AA6050030F1B0D
-:0D00600008850108AA6060030F1400FF006E
-:00000001FF
-#
-# Replacement CIS for Advantech COMpad-32/85
-#
diff --git a/firmware/cis/COMpad4.cis.ihex b/firmware/cis/COMpad4.cis.ihex
deleted file mode 100644
index 27bbec1921b3..000000000000
--- a/firmware/cis/COMpad4.cis.ihex
+++ /dev/null
@@ -1,9 +0,0 @@
-:1000000001030000FF151F0401414456414E5445B1
-:10001000434800434F4D7061642D33322F383542D1
-:100020002D34000000FF210202011A050102000127
-:10003000011B0BC18118AA6040021F30B89E1B082B
-:0C004000820108AA6040031F1400FF00AA
-:00000001FF
-#
-# Replacement CIS for Advantech COMpad-32/85B-4
-#
diff --git a/firmware/cis/DP83903.cis.ihex b/firmware/cis/DP83903.cis.ihex
deleted file mode 100644
index 6d73ea3cf1b8..000000000000
--- a/firmware/cis/DP83903.cis.ihex
+++ /dev/null
@@ -1,14 +0,0 @@
-:1000000001030000FF152904014D756C74696675C4
-:100010006E6374696F6E20436172640000004E531A
-:1000200043204D46204C414E2F4D6F64656D00FFBF
-:1000300020047501000021020000060B02004900A7
-:100040000000006A000000FF00130343495321022F
-:1000500006001A060517201077021B0C970179017C
-:10006000556530FFFF284000FF001303434953212B
-:100070000202001A060507401077021B09870119C2
-:0800800001552330FFFFFF00D2
-:00000001FF
-#
-# This CIS is for cards based on the National Semiconductor
-# DP83903 Multiple Function Interface Chip
-#
diff --git a/firmware/cis/LA-PCM.cis.ihex b/firmware/cis/LA-PCM.cis.ihex
deleted file mode 100644
index a0ff0c7b393d..000000000000
--- a/firmware/cis/LA-PCM.cis.ihex
+++ /dev/null
@@ -1,20 +0,0 @@
-:100000000105D4F953E9FF17035338FF20040FC04B
-:1000100002002102060315390401416C6C69656414
-:100020002054656C657369732C4B2E4B00457468C6
-:1000300065726E6574204C414E20436172640043CA
-:10004000656E747265434F4D004C412D50434D0019
-:10005000FF1A0602100000020B1B08810108E06075
-:1000600000021F1B08820108E06020021F1B08839A
-:100070000108E06040021F1B08840108E060600284
-:100080001F1B08850108E06080021F1B088601080D
-:10009000E060A0021F1B08870108E060C0021F1B70
-:1000A00008880108E060E0021F1B08890108E06081
-:1000B00000031F1B088A0108E06020031F1B088B38
-:1000C0000108E06040031F1B088C0108E06060032A
-:1000D0001F1B088D0108E06080031F1B088E0108AC
-:1000E000E060A0031F1B088F0108E060C0031F1B16
-:0D00F00008900108E060E0031F1400FF000D
-:00000001FF
-#
-# Replacement CIS for Allied Telesis LA-PCM
-#
diff --git a/firmware/cis/MT5634ZLX.cis.ihex b/firmware/cis/MT5634ZLX.cis.ihex
deleted file mode 100644
index 72500b9d95d8..000000000000
--- a/firmware/cis/MT5634ZLX.cis.ihex
+++ /dev/null
@@ -1,11 +0,0 @@
-:100000000101FF152204014D756C74695465636824
-:100010000050434D4349412035364B2044617461C3
-:10002000466178000000FF20040002010021020266
-:10003000001A05012780FF671B0FCF418B01550177
-:10004000550155AA60F80307281B08970108AA6004
-:10005000F802071B089F0108AA60E803071B08A70E
-:0B0060000108AA60E802071400FF007E
-:00000001FF
-#
-# Replacement CIS for Multitech MT5634ZLX modems
-#
diff --git a/firmware/cis/NE2K.cis.ihex b/firmware/cis/NE2K.cis.ihex
deleted file mode 100644
index 1bb40fc4759f..000000000000
--- a/firmware/cis/NE2K.cis.ihex
+++ /dev/null
@@ -1,8 +0,0 @@
-:1000000001030000FF1515040150434D4349410011
-:1000100045746865726E6574000000FF2102060079
-:100020001A050120F803031B09E001190155653089
-:06003000FFFF1400FF00B9
-:00000001FF
-#
-# Replacement CIS for various busted NE2000-compatible cards
-#
diff --git a/firmware/cis/PCMLM28.cis.ihex b/firmware/cis/PCMLM28.cis.ihex
deleted file mode 100644
index ffdfe8522ef5..000000000000
--- a/firmware/cis/PCMLM28.cis.ihex
+++ /dev/null
@@ -1,18 +0,0 @@
-:1000000001030000FF151504014C494E4B53595391
-:100010000050434D4C4D3238000000FF2004430196
-:10002000ABC0210200001A05012FF803031B10E4E6
-:1000300001190155E06100031FF8020730FFFF1BA3
-:100040000BA50108E06120031FF802071B0BA601A6
-:1000500008E06140031FF802071B0BA70108E061DD
-:1000600060031FF802071B0BA80108E06100031FD3
-:10007000E803071B0BA90108E06120031FE8030741
-:100080001B0BAA0108E06140031FE803071B0BAB31
-:100090000108E06160031FE803071B0BAC0108E0E7
-:1000A0006100031FE802071B0BAD0108E06120039C
-:1000B0001FE802071B0BAE0108E06140031FE802C6
-:1000C000071B0BAF0108E06160031FE80207140083
-:0200D000FF002F
-:00000001FF
-#
-# The on-card CIS says it is MFC-compliant, but it is not
-#
diff --git a/firmware/cis/PE-200.cis.ihex b/firmware/cis/PE-200.cis.ihex
deleted file mode 100644
index e6dbdab6eb79..000000000000
--- a/firmware/cis/PE-200.cis.ihex
+++ /dev/null
@@ -1,9 +0,0 @@
-:1000000001030000FF151E0401504D582020200060
-:1000100050452D3230300045544845524E4554002D
-:1000200052303100FF210206031A050101000101CF
-:100030001B0EC181190155E051000F100F30FFFF59
-:040040001400FF00A9
-:00000001FF
-#
-# Replacement CIS for PE-200 ethernet card
-#
diff --git a/firmware/cis/PE520.cis.ihex b/firmware/cis/PE520.cis.ihex
deleted file mode 100644
index 97a745b5496e..000000000000
--- a/firmware/cis/PE520.cis.ihex
+++ /dev/null
@@ -1,9 +0,0 @@
-:1000000001030000FF152304014B544900504535FE
-:10001000323020504C55530050434D434941204508
-:10002000746865726E65740000FF20046101100041
-:10003000210206001A050101D00F0B1B09C101198D
-:0A00400001556530FFFF1400FF00BA
-:00000001FF
-#
-# Replacement CIS for PE520 ethernet card
-#
diff --git a/firmware/cis/RS-COM-2P.cis.ihex b/firmware/cis/RS-COM-2P.cis.ihex
deleted file mode 100644
index 0801ca5da80a..000000000000
--- a/firmware/cis/RS-COM-2P.cis.ihex
+++ /dev/null
@@ -1,10 +0,0 @@
-:1000000001030000FF1516040150434D4349410010
-:1000100052532D434F4D203250000000FF21020269
-:10002000011A0501030001011B0EC18118AA61E834
-:100030000307E8020730B89E1B0B820108AA615033
-:1000400002075802071B0B830108AA6160020768B8
-:0600500002071400FF008E
-:00000001FF
-#
-# Replacement CIS for dual-serial-port IO card
-#
diff --git a/firmware/cis/SW_555_SER.cis.ihex b/firmware/cis/SW_555_SER.cis.ihex
deleted file mode 100644
index 9b9348acee7b..000000000000
--- a/firmware/cis/SW_555_SER.cis.ihex
+++ /dev/null
@@ -1,12 +0,0 @@
-:100000000101FF17034100FF20043F0110072102F7
-:100010000200152A070053696572726120576972E0
-:10002000656C657373004169724361726420353594
-:1000300035004135353500526576203100FF1A050F
-:1000400001030007731B0BE00118A360F8030730DE
-:10005000BC3F1B08A10108A360F802071B08A2010E
-:1000600008A360E803071B08A30108A360E80207D0
-:0A0070001B04A40108231400FF0084
-:00000001FF
-#
-# Replacement CIS for AC555 provided by Sierra Wireless
-#
diff --git a/firmware/cis/SW_7xx_SER.cis.ihex b/firmware/cis/SW_7xx_SER.cis.ihex
deleted file mode 100644
index 11e44ad86437..000000000000
--- a/firmware/cis/SW_7xx_SER.cis.ihex
+++ /dev/null
@@ -1,13 +0,0 @@
-:100000000101FF17034100FF2004920110072102A4
-:1000100002001537070053696572726120576972D3
-:10002000656C6573730041433731302F4143373579
-:10003000300047505253204E6574776F726B2041E9
-:1000400064617074657200523100FF1A050103008B
-:1000500007731B10E00119784D555D25A360F80367
-:100060000730BC861B08A10108A360F802071B0823
-:10007000A20108A360E803071B08A30108A360E826
-:0C00800002071B04A40108231400FF0069
-:00000001FF
-#
-# Replacement CIS for AC7xx provided by Sierra Wireless
-#
diff --git a/firmware/cis/SW_8xx_SER.cis.ihex b/firmware/cis/SW_8xx_SER.cis.ihex
deleted file mode 100644
index bbcfe6348328..000000000000
--- a/firmware/cis/SW_8xx_SER.cis.ihex
+++ /dev/null
@@ -1,13 +0,0 @@
-:100000000101FF17034100FF2004920110072102A4
-:100010000200152F070053696572726120576972DB
-:10002000656C657373004143383530003347204EAB
-:100030006574776F726B20416461707465720052F1
-:100040003100FF1A0501030007731B10E001197846
-:100050004D555D25A360F8480730BC861B08A101FB
-:1000600008A360F847071B08A20108A360E8480737
-:100070001B08A30108A360E847071B04A401082389
-:040080001400FF0069
-:00000001FF
-#
-# Replacement CIS for AC8xx provided by Sierra Wireless
-#
diff --git a/firmware/cis/tamarack.cis.ihex b/firmware/cis/tamarack.cis.ihex
deleted file mode 100644
index 1e86547fb361..000000000000
--- a/firmware/cis/tamarack.cis.ihex
+++ /dev/null
@@ -1,10 +0,0 @@
-:100000000103D400FF17034100FF152404015441EC
-:100010004D415241434B0045746865726E657400F2
-:10002000410030303437343331313830303100FF33
-:10003000210206001A050120F803031B14E08119B0
-:100040003F554D5D06864626E551000F100F30FFE7
-:05005000FF1400FF0099
-:00000001FF
-#
-# Replacement CIS for Surecom, Tamarack NE2000 cards
-#
diff --git a/firmware/cpia2/stv0672_vp4.bin.ihex b/firmware/cpia2/stv0672_vp4.bin.ihex
deleted file mode 100644
index bd0b9cf65640..000000000000
--- a/firmware/cpia2/stv0672_vp4.bin.ihex
+++ /dev/null
@@ -1,73 +0,0 @@
-:1000000001BCE302E303E304E305E306E3079344EF
-:1000100056D4934E5651934E51D6934E4F54934EC1
-:10002000924F92A4930592F4931B929291E692368A
-:100030009274924A928C928EC8D00B4202A0CA92BD
-:100040000902C9100A0A0A81E3B8E3B0E3A8E3A0F1
-:10005000E398E390E100CFD70A12CC9508B20A18D2
-:10006000E10001EE0C084A12C818F09AC022F31CF5
-:100070004A13F314C8A0F214F21CEB13D3A26316B4
-:10008000489EF018A403F393C058F713519CE9203D
-:10009000CFEF63F9922ED35F63FA922ED36763FB9F
-:1000A000922ED36FE91A631648A7F020A406F394A2
-:1000B000C027F714F513519DF6136318C420CBEF36
-:1000C00063FC922ED37763FD922ED37F63FE922E34
-:1000D000D38763FF922ED38F6438922ED3976439DF
-:1000E000922ED39FE100F53AF43BF7BFF2BCF23D0C
-:1000F000E1008087908051D5022202324BD3F71164
-:100100000BDAE1000E0202400DB5E3024855E5129C
-:10011000A401E81BE390F018A401E8BF8DB84BD10F
-:100120004BD80BCB0BC2E100E302E30352D360597F
-:10013000E6930D2252D4E6930D2AE398E390E10072
-:10014000025D0263E302C81202CAC85202C2826898
-:10015000E302C81402CAC89002C20AD0C9930ADADC
-:10016000CCD20AE2631202DA0A980AA00AA8E39043
-:10017000E100E3020AD0C9930ADACCD20AE26312A0
-:1001800002DA0A980AA00AA84991E56AA404C812EA
-:1001900002CAC8528289C81402CAC89002C2E39037
-:1001A000E1000860E1004853E897085AE100E302E3
-:1001B000E30354D36059E6930D52E398E390E100D2
-:1001C000029CE3025513931755139317E390E10034
-:1001D0007530E302E30355556059E6930DB2E39899
-:1001E000E390E10002AEE792E918EA9AE898E81095
-:1001F000E811E851D2DAD2F3E813D2FAE850D2EAA1
-:10020000E8D0E8D1D30A03094823E52CA003482409
-:10021000EA1C0308D2E3D303D313E10002CB059316
-:100220005793F09AAC0BE30792EAE29FE506E3B03E
-:10023000A002EB1E82D7EA1EE23B859BE91EC89016
-:10024000859402DE05805793F0BAAC0692EAE2BFCD
-:10025000E506A001EBBF8588E93EC8908581E93EAF
-:10026000F0BAF339F03A6017F03AC090F0BAE10012
-:10027000003FE302E30358106059E6930DA25812C1
-:10028000E6930DAAE398E390E1000301E100030384
-:100290009B7D8B8BE302E30358566059E6930DBABE
-:1002A000E398E390E100030F9311E100E3024A11A8
-:1002B0000B4291AFE390E100F291F091A3FEE100D7
-:1002C0006092C05FF013F013595BE213F0115A19FA
-:1002D000E213E10000000327686176616E610006A9
-:1002E000032CE302E303E9385915595AF29ABC0B7F
-:1002F000A40A591EF311F01AE2BB5915F011192A7C
-:10030000E502A401EBBFE398E390E1000342192862
-:10031000E100E9306079E100E303E3076079934E9F
-:10032000E3B8E398E100E91AF01FE233F091E292BA
-:08033000E032F031E1000000B1
-:00000001FF
-
- Copyright 2001, STMicrolectronics, Inc.
- Contact: steve.miller@st.com
-
- Description:
- This file contains patch data for the CPiA2 (stv0672) VP4.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
diff --git a/firmware/cxgb3/ael2005_opt_edc.bin.ihex b/firmware/cxgb3/ael2005_opt_edc.bin.ihex
deleted file mode 100644
index c1d6e5d3bea7..000000000000
--- a/firmware/cxgb3/ael2005_opt_edc.bin.ihex
+++ /dev/null
@@ -1,69 +0,0 @@
-:10000000CC002FF4CC013CD4CC022015CC0331051C
-:10001000CC046524CC0527FFCC06300FCC072C8BF5
-:10002000CC08300BCC094009CC0A400ECC0B2F7207
-:10003000CC0C3002CC0D1002CC0E2172CC0F301241
-:10004000CC101002CC1125D2CC123012CC131002DD
-:10005000CC14D01ECC1527D2CC163012CC171002DF
-:10006000CC182004CC193C84CC1A6436CC1B200755
-:10007000CC1C3F87CC1D8676CC1E40B7CC1FA74634
-:10008000CC204047CC215673CC222982CC2330028D
-:10009000CC2413D2CC258BBDCC262862CC273012A1
-:1000A000CC281002CC292092CC2A3012CC2B100262
-:1000B000CC2C5CC3CC2D0314CC2E2942CC2F300287
-:1000C000CC301002CC31D019CC322032CC333012AB
-:1000D000CC341002CC352A04CC363C74CC37643591
-:1000E000CC382FA4CC393CD4CC3A6624CC3B5563D5
-:1000F000CC3C2D42CC3D3002CC3E13D2CC3F464DC1
-:10010000CC402862CC413012CC421002CC43203289
-:10011000CC443012CC451002CC462FB4CC473CD452
-:10012000CC486624CC495563CC4A2D42CC4B300296
-:10013000CC4C13D2CC4D2ED2CC4E3002CC4F100230
-:10014000CC502FD2CC513002CC521002CC530004F0
-:10015000CC542942CC553002CC561002CC572092B8
-:10016000CC583012CC591002CC5A5CC3CC5B03176C
-:10017000CC5C2F72CC5D3002CC5E1002CC5F294289
-:10018000CC603002CC611002CC6222CDCC63301D39
-:10019000CC642862CC653012CC661002CC672ED2BB
-:1001A000CC683002CC691002CC6A2D72CC6B300264
-:1001B000CC6C1002CC6D628FCC6E2112CC6F3012E1
-:1001C000CC701002CC715AA3CC722DC2CC73300209
-:1001D000CC741312CC756F72CC761002CC772807D2
-:1001E000CC7831A7CC7920C4CC7A3C24CC7B672452
-:1001F000CC7C1002CC7D2807CC7E3187CC7F20C4FC
-:10020000CC803C24CC816724CC821002CC83251482
-:10021000CC843C64CC856436CC86DFF4CC876436F1
-:10022000CC881002CC8940A4CC8A643CCC8B40168C
-:10023000CC8C8C6CCC8D2B24CC8E3C24CC8F643518
-:10024000CC901002CC912B24CC923C24CC93643AD9
-:10025000CC944025CC958A5ACC961002CC97273165
-:10026000CC983011CC991001CC9AC7A0CC9B01003E
-:10027000CC9CC502CC9D53ACCC9EC503CC9FD5D5A0
-:10028000CCA0C600CCA12A6DCCA2C601CCA32A4C1E
-:10029000CCA4C602CCA50111CCA6C60CCCA7590093
-:1002A000CCA8C710CCA90700CCAAC718CCAB0700B4
-:1002B000CCACC720CCAD4700CCAEC801CCAF7F5092
-:1002C000CCB0C802CCB17760CCB2C803CCB37FCE7F
-:1002D000CCB4C804CCB55700CCB6C805CCB75F11B8
-:1002E000CCB8C806CCB94751CCBAC807CCBB57E18B
-:1002F000CCBCC808CCBD2700CCBEC809CCBF000010
-:10030000CCC0C821CCC10002CCC2C822CCC30014CE
-:10031000CCC4C832CCC51186CCC6C847CCC71E02D7
-:10032000CCC8C013CCC9F341CCCAC01ACCCB04464C
-:10033000CCCCC024CCCD1000CCCEC025CCCF0A0074
-:10034000CCD0C026CCD10C0CCCD2C027CCD30C0C3A
-:10035000CCD4C029CCD500A0CCD6C030CCD70A0094
-:10036000CCD8C03CCCD9001CCCDAC005CCDB7A069A
-:10037000CCDC0000CCDD2731CCDE3011CCDF10012D
-:10038000CCE0C620CCE10000CCE2C621CCE3003FAB
-:10039000CCE4C622CCE50000CCE6C623CCE70000C6
-:1003A000CCE8C624CCE90000CCEAC625CCEB0000A2
-:1003B000CCECC627CCED0000CCEEC628CCEF00007C
-:1003C000CCF0C62CCCF10000CCF20000CCF3280617
-:1003D000CCF43CB6CCF5C161CCF66134CCF76135D8
-:1003E000CCF85443CCF90303CCFA6524CCFB000BC6
-:1003F000CCFC1002CCFD2104CCFE3C24CCFF21051A
-:10040000CD003805CD016524CD02DFF4CD034005D4
-:10041000CD046524CD051002CD065DD3CD070306BE
-:10042000CD082FF7CD0938F7CD0A60B7CD0BDFFD2A
-:10043000CD0C000ACD0D1002CD0E00007CC7AE59C8
-:00000001FF
diff --git a/firmware/cxgb3/ael2005_twx_edc.bin.ihex b/firmware/cxgb3/ael2005_twx_edc.bin.ihex
deleted file mode 100644
index 9b5e9e51fcb7..000000000000
--- a/firmware/cxgb3/ael2005_twx_edc.bin.ihex
+++ /dev/null
@@ -1,93 +0,0 @@
-:10000000CC004009CC0127FFCC02300FCC0340AA22
-:10001000CC04401CCC05401ECC062FF4CC073CD4AD
-:10002000CC082035CC093145CC0A6524CC0B26A25E
-:10003000CC0C3012CC0D1002CC0E29C2CC0F3002E9
-:10004000CC101002CC112072CC123012CC13100242
-:10005000CC1422CDCC15301DCC162E52CC1730121C
-:10006000CC181002CC1928E2CC1A3002CC1B10029A
-:10007000CC1C628FCC1D2AC2CC1E3012CC1F1002A9
-:10008000CC205553CC212AE2CC223002CC231302BF
-:10009000CC24401ECC252BE2CC263012CC271002DB
-:1000A000CC282DA2CC293012CC2A1002CC2B2BA28A
-:1000B000CC2C3002CC2D1002CC2E5EE3CC2F0305CD
-:1000C000CC30400ECC312BC2CC323002CC331002BB
-:1000D000CC342B82CC353012CC361002CC37566360
-:1000E000CC380302CC39401ECC3A6F72CC3B1002A4
-:1000F000CC3C628FCC3D2BE2CC3E3012CC3F100288
-:10010000CC4022CDCC41301DCC422E52CC433012BB
-:10011000CC441002CC452522CC463012CC471002EC
-:10012000CC482DA2CC493012CC4A1002CC4B2CA288
-:10013000CC4C3012CC4D1002CC4E2FA4CC4F3CD422
-:10014000CC506624CC51410BCC5256B3CC5303C493
-:10015000CC542FB2CC553002CC561002CC57220BC7
-:10016000CC58303BCC5956B3CC5A03C3CC5B866BCE
-:10017000CC5C400CCC5D23A2CC5E3012CC5F100274
-:10018000CC602DA2CC613012CC621002CC632CA2C8
-:10019000CC643012CC651002CC662FB4CC673CD452
-:1001A000CC686624CC6956B3CC6A03C3CC6B866B2F
-:1001B000CC6C401CCC6D2205CC6E3035CC6F5B53C3
-:1001C000CC702C52CC713002CC7213C2CC735CC395
-:1001D000CC740317CC752522CC763012CC77100264
-:1001E000CC782DA2CC793012CC7A1002CC7B2B8229
-:1001F000CC7C3012CC7D1002CC7E5663CC7F0303C6
-:10020000CC80401ECC810004CC822C42CC833012A6
-:10021000CC841002CC856F72CC861002CC87628FA2
-:10022000CC882304CC893C84CC8A6436CC8BDFF424
-:10023000CC8C6436CC8D2FF5CC8E3005CC8F865689
-:10024000CC90DFBACC9156A3CC92D05ACC9321C299
-:10025000CC943012CC951392CC96D05ACC9756A30E
-:10026000CC98DFBACC990383CC9A6F72CC9B1002E6
-:10027000CC9C28C5CC9D3005CC9E4178CC9F565354
-:10028000CCA00384CCA122B2CCA23012CCA3100209
-:10029000CCA42BE5CCA53005CCA641E8CCA7565381
-:1002A000CCA80382CCA90002CCAA4258CCAB2474BF
-:1002B000CCAC3C84CCAD6437CCAEDFF4CCAF64378F
-:1002C000CCB02FF5CCB13C05CCB28757CCB3B888B5
-:1002D000CCB49787CCB5DFF4CCB66724CCB7866AAC
-:1002E000CCB86F72CCB91002CCBA2D01CCBB301196
-:1002F000CCBC1001CCBDC620CCBE14E5CCBFC62101
-:10030000CCC0C53DCCC1C622CCC23CBECCC3C623EA
-:10031000CCC44452CCC5C624CCC6C5C5CCC7C625A2
-:10032000CCC8E01ECCC9C627CCCA0000CCCBC6289E
-:10033000CCCC0000CCCDC62BCCCE0000CCCFC62C74
-:10034000CCD00000CCD10000CCD22D01CCD33011C8
-:10035000CCD41001CCD5C620CCD60000CCD7C62139
-:10036000CCD80000CCD9C622CCDA00CECCDBC62358
-:10037000CCDC007FCCDDC624CCDE0032CCDFC62551
-:10038000CCE00000CCE1C627CCE20000CCE3C628DC
-:10039000CCE40000CCE5C62BCCE60000CCE7C62CB4
-:1003A000CCE80000CCE90000CCEA2D01CCEB301108
-:1003B000CCEC1001CCEDC502CCEE609FCCEFC600BA
-:1003C000CCF02A6ECCF1C601CCF22A2CCCF3C60CB0
-:1003D000CCF45400CCF5C710CCF60700CCF7C71806
-:1003E000CCF80700CCF9C720CCFA4700CCFBC728D3
-:1003F000CCFC0700CCFDC729CCFE1207CCFFC801FE
-:10040000CD007F50CD01C802CD027760CD03C80377
-:10041000CD047FCECD05C804CD06520ECD07C8054C
-:10042000CD085C11CD09C806CD0A3C51CD0BC807DB
-:10043000CD0C4061CD0DC808CD0E49C1CD0FC80906
-:10044000CD103840CD11C80ACD120000CD13C821FF
-:10045000CD140002CD15C822CD160046CD17C844D4
-:10046000CD18182FCD19C013CD1AF341CD1BC01ACA
-:10047000CD1C0446CD1DC024CD1E1000CD1FC025AF
-:10048000CD200A00CD21C026CD220C0CCD23C027C3
-:10049000CD240C0CCD25C029CD2600A0CD27C03001
-:1004A000CD280A00CD29C03CCD2A001CCD2B000050
-:1004B000CD2C2B84CD2D3C74CD2E6435CD2FDFF487
-:1004C000CD306435CD312806CD323006CD3385654B
-:1004D000CD342B24CD353C24CD366436CD371002B7
-:1004E000CD382B24CD393C24CD3A6436CD3B404524
-:1004F000CD3C8656CD3D1002CD3E2807CD3F31A7DD
-:10050000CD4020C4CD413C24CD426724CD431002D0
-:10051000CD442807CD453187CD4620C4CD473C2466
-:10052000CD486724CD491002CD4A2514CD4B3C64FB
-:10053000CD4C6436CD4DDFF4CD4E6436CD4F100238
-:10054000CD502806CD513CB6CD52C161CD5361345A
-:10055000CD546135CD555443CD560303CD57652455
-:10056000CD58000BCD591002CD5AD019CD5B2104C6
-:10057000CD5C3C24CD5D2105CD5E3805CD5F652485
-:10058000CD60DFF4CD614005CD626524CD632E8D55
-:10059000CD64303DCD655DD3CD660306CD672FF7C5
-:1005A000CD6838F7CD6960B7CD6ADFFDCD6B000A45
-:0C05B000CD6C1002CD6D000052A76B0E48
-:00000001FF
diff --git a/firmware/cxgb3/ael2020_twx_edc.bin.ihex b/firmware/cxgb3/ael2020_twx_edc.bin.ihex
deleted file mode 100644
index 8b1337f4c329..000000000000
--- a/firmware/cxgb3/ael2020_twx_edc.bin.ihex
+++ /dev/null
@@ -1,100 +0,0 @@
-:10000000D8004009D8012FFFD802300FD80340AAEA
-:10001000D804401CD805401ED8062FF4D8073DC48C
-:10002000D8082035D8093035D80A6524D80B2CB229
-:10003000D80C3012D80D1002D80E26E2D80F30227C
-:10004000D8101002D81127D2D8123022D81310029B
-:10005000D8142822D8153012D8161002D817249296
-:10006000D8183022D8191002D81A2772D81B30128B
-:10007000D81C1002D81D23D2D81E3022D81F10023F
-:10008000D82022CDD821301DD82227F2D8233022E3
-:10009000D8241002D8255553D8260307D82725225F
-:1000A000D8283022D8291002D82A2142D82B301241
-:1000B000D82C1002D82D4016D82E5E63D82F0344BA
-:1000C000D8302142D8313012D8321002D833400E05
-:1000D000D8342522D8353022D8361002D8372B52C2
-:1000E000D8383012D8391002D83A2742D83B3022BB
-:1000F000D83C1002D83D25E2D83E3022D83F10022D
-:10010000D8402FA4D8413DC4D8426624D843414B9F
-:10011000D84456B3D84503C6D846866BD847400C5A
-:10012000D8482712D8493012D84A1002D84B2C4B45
-:10013000D84C309BD84D56B3D84E03C3D84F866B9E
-:10014000D850400CD8512272D8523022D8531002C5
-:10015000D8542742D8553022D8561002D85725E215
-:10016000D8583022D8591002D85A2FB4D85B3DC481
-:10017000D85C6624D85D56B3D85E03C3D85F866B5F
-:10018000D860401CD8612C45D8623095D8635B5349
-:10019000D8642372D8653012D86613C2D8675CC39E
-:1001A000D8682712D8693012D86A1312D86B2B522C
-:1001B000D86C3012D86D1002D86E2742D86F30221A
-:1001C000D8701002D8712582D8723022D8731002EC
-:1001D000D8742142D8753012D8761002D877628F41
-:1001E000D8782985D87933A5D87A25E2D87B3022EA
-:1001F000D87C1002D87D5653D87E03D2D87F401EBB
-:10020000D8806F72D8811002D882628FD88323047D
-:10021000D8843C84D8856436D886DFF4D8876436A1
-:10022000D8882FF5D8893005D88A8656D88BDFBA7A
-:10023000D88C56A3D88DD05AD88E2972D88F301228
-:10024000D8901392D891D05AD89256A3D893DFBAA7
-:10025000D8940383D8956F72D8961002D8972B45FF
-:10026000D8983005D8994178D89A5653D89B0384AA
-:10027000D89C2A62D89D3012D89E1002D89F2F0594
-:10028000D8A03005D8A141C8D8A25653D8A303821C
-:10029000D8A40002D8A54218D8A62474D8A73C84B4
-:1002A000D8A86437D8A9DFF4D8AA6437D8AB2FF51B
-:1002B000D8AC3C05D8AD8757D8AEB888D8AF9787AB
-:1002C000D8B0DFF4D8B16724D8B2866AD8B36F72D9
-:1002D000D8B41002D8B52641D8B63021D8B710010D
-:1002E000D8B8C620D8B90000D8BAC621D8BB0000FB
-:1002F000D8BCC622D8BD00CED8BEC623D8BF007F8A
-:10030000D8C0C624D8C10032D8C2C625D8C3000080
-:10031000D8C4C627D8C50000D8C6C628D8C700008C
-:10032000D8C8C62CD8C90000D8CA0000D8CB2641EE
-:10033000D8CC3021D8CD1001D8CEC502D8CF53ACFF
-:10034000D8D0C503D8D12CD3D8D2C600D8D32A6EE2
-:10035000D8D4C601D8D52A2CD8D6C605D8D7555753
-:10036000D8D8C60CD8D95400D8DAC710D8DB0700C3
-:10037000D8DCC711D8DD0F06D8DEC718D8DF0700D4
-:10038000D8E0C719D8E10F06D8E2C720D8E3470064
-:10039000D8E4C721D8E50F06D8E6C728D8E7070074
-:1003A000D8E8C729D8E91207D8EAC801D8EB7F50A6
-:1003B000D8ECC802D8ED7760D8EEC803D8EF7FCE6E
-:1003C000D8F0C804D8F1520ED8F2C805D8F35C11A1
-:1003D000D8F4C806D8F53C51D8F6C807D8F740611C
-:1003E000D8F8C808D8F949C1D8FAC809D8FB3840A4
-:1003F000D8FCC80AD8FD0000D8FEC821D8FF0002EA
-:10040000D900C822D9010046D902C844D903182FFF
-:10041000D904C013D905F341D906C084D9070030E7
-:10042000D908C904D9091401D90ACB0CD90B000485
-:10043000D90CCB0ED90DA00AD90ECB0FD90FC0C045
-:10044000D910CB10D911C0C0D912CB11D91300A02B
-:10045000D914CB12D9150007D916C241D917A0005B
-:10046000D918C243D9197FE0D91AC604D91B000E86
-:10047000D91CC609D91D00F5D91EC611D91F000EF9
-:10048000D920C660D9219600D922C687D923000475
-:10049000D924C60AD92504F5D9260000D927264132
-:1004A000D9283021D9291001D92AC620D92B14E501
-:1004B000D92CC621D92DC53DD92EC622D92F3CBE57
-:1004C000D930C623D9314452D932C624D933C5C50F
-:1004D000D934C625D935E01ED936C627D93700000C
-:1004E000D938C628D9390000D93AC62CD93B0000E2
-:1004F000D93C0000D93D2B84D93E3C74D93F6435AA
-:10050000D940DFF4D9416435D9422806D9433006B1
-:10051000D9448565D9452B24D9463C24D94764362E
-:10052000D9481002D9492B24D94A3C24D94B6436E6
-:10053000D94C4045D94D8656D94E5663D94F030202
-:10054000D950401ED9511002D9522807D95331A78A
-:10055000D95420C4D9553C24D9566724D957100200
-:10056000D9582807D9593187D95A20C4D95B3C2496
-:10057000D95C6724D95D1002D95E24F4D95F3C644C
-:10058000D9606436D961DFF4D9626436D963100268
-:10059000D9642006D9653D76D966C161D9676134D1
-:1005A000D9686135D9695443D96A0303D96B652485
-:1005B000D96C00FBD96D1002D96E20D4D96F3C24C0
-:1005C000D9702025D9713005D9726524D9731002EC
-:1005D000D974D019D9752104D9763C24D97721054D
-:1005E000D9783805D9796524D97ADFF4D97B4005E3
-:1005F000D97C6524D97D2E8DD97E303DD97F2408C4
-:10060000D98035D8D9815DD3D9820307D98388872A
-:10061000D98463A7D9858887D98663A7D987DFFD61
-:10062000D98800F9D9891002D98A0000878C30D97D
-:00000001FF
diff --git a/firmware/cxgb3/t3b_psram-1.1.0.bin.ihex b/firmware/cxgb3/t3b_psram-1.1.0.bin.ihex
deleted file mode 100644
index 140893005171..000000000000
--- a/firmware/cxgb3/t3b_psram-1.1.0.bin.ihex
+++ /dev/null
@@ -1,162 +0,0 @@
-:10000000FFFFFFFC000000000000000300000000F4
-:1000100000010100FFFFFFFC0000000000000003E2
-:100020000000000000000000FFFFFFFC00000000D7
-:10003000000000030000000000000000FFFFFFFCC4
-:1000400000000000000000030000000000000000AD
-:10005000FFFFFFFC000000000000000300000000A4
-:1000600000000000FFFFFFFC000000000000000394
-:100070000000000000000000FFFFFFFC0000000087
-:10008000000000030000000000000000FFFFFFFC74
-:10009000000000000000000300000000000000005D
-:1000A000FFFFFFFC00000000000000030000000054
-:1000B00000000000FFFFFFFC000000000000000344
-:1000C0000000000000000000FFFFFFFC0000000037
-:1000D000000000030000000000000000FFFFFFFC24
-:1000E000000000000000000300000000000000000D
-:1000F000FFFFFFFC00000000000000030000000004
-:1001000000000000FFFFFFFC0000000000000003F3
-:100110000000000000000000FFFFFFFBD03403E6FA
-:1001200080262A430000000000000000FFFFFFF8C7
-:10013000007000000000000200000081C604000002
-:10014000FFFFFFFC000000000000000300000000B3
-:1001500000000000FFFFFFFC0000000000000003A3
-:100160000000000000000000FFFFFFFC0000000096
-:10017000000000030000000000000000FFFFFFFC83
-:10018000000000000000000300000000000000006C
-:10019000FFFFFFFC00000000000000030000000063
-:1001A00000000000FFFFFFFC000000000000000353
-:1001B0000000000000000000FFFFFFFBD03403E25E
-:1001C000802829230000000000000000FFFFFFF846
-:1001D0000600023701C5C00013940481C6057000F3
-:1001E000FFFFFFF88200020637030803000000004B
-:1001F00000000000FFFFFFFC000000000000000204
-:10020000208000818DF40000FFFFFFFC0000000053
-:10021000000000030000000000000000FFFFFFFCE2
-:1002200000000000000000030000000000000000CB
-:10023000FFFFFFFC000000000000000300000000C2
-:1002400000000000FFFFFFFC0000000000000003B2
-:100250000000000000000000FFFFFFF9C4310000B3
-:1002600000282C830000000000000000FFFFFFF0CA
-:100270004E70021D00C5C00000000001C118000042
-:10028000FFFFFFFC00000000000000030000000072
-:1002900000000000FFFFFFFC000000000000000362
-:1002A0000000000000000000FFFFFFFC0000000055
-:1002B000000000030000000000000000FFFFFFFC42
-:1002C000000000000000000300000000000000002B
-:1002D000FFFFFFFC00000000000000030000000022
-:1002E00000000000FFFFFFFC000000000000000312
-:1002F0000000000000000000FFFFFFF1C00003E667
-:10030000802828230000000000000000FFFFFFFC01
-:1003100000000000000000021394040000017000BF
-:10032000FFFFFFFC000000000000000300000000D1
-:1003300000000000FFFFFFFC0000000000000003C1
-:100340000000000000000000FFFFFFFC00000000B4
-:10035000000000030000000000000000FFFFFFFCA1
-:10036000000000000000000300000000000000008A
-:10037000FFFFFFFC00000000000000030000000081
-:1003800000000000FFFFFFFC000000000000000371
-:100390000000000000000000FFFFFFFA103400041E
-:1003A000000001030000000000000000FFFFFFF05C
-:1003B0006000000620030802700000F080259A907B
-:1003C000FFFFFFFC00000000000000030000000031
-:1003D00000000000FFFFFFFC000000000000000321
-:1003E0000000000000000000FFFFFFFC0000000014
-:1003F000000000030000000000000000FFFFFFFC01
-:1004000000000000000000030000000000000000E9
-:10041000FFFFFFF1C83102060A000242000000811E
-:1004200080000000FFFFFFF9C83103C60A962A4288
-:100430000000008180000000FFFFFFF00431000495
-:10044000000004030000000000000000FFFFFFF0B8
-:1004500020B000000000000213940401C1197000D4
-:10046000FFFFFFFC00000000000000000000000192
-:1004700000001000FFFFFFFC000000000000000370
-:100480000000000000000000FFFFFFFC0000000073
-:10049000000000030000000000000000FFFFFFFC60
-:1004A0000000000000000003000000000000000049
-:1004B000FFFFFFF00000000400004000680C200176
-:1004C00000001090FFFFFFF9C031C3E600266A402C
-:1004D0000000000100001000FFFFFFFA10F4000010
-:1004E000000002430000000000000000FFFFFFF8D2
-:1004F0006050080000000000700C20F080259A90E9
-:10050000FFFFFFF0060000000100400000000001B6
-:1005100000001000FFFFFFFC0000000000000002D0
-:10052000288C108085C01000FFFFFFFC0000000039
-:10053000000000030000000000000000FFFFFFFCBF
-:1005400000000000000000030000000000000000A8
-:10055000FFFFFFFC0000000000000003000000009F
-:1005600000000000FFFFFFFC00000000000000038F
-:100570000000000000000000FFFFFFF04E00000040
-:10058000000000030000000000000000FFFFFFF17A
-:10059000C00002DE00061A40000000829035C00054
-:1005A000FFFFFFFC0000000000000003000000004F
-:1005B00000000000FFFFFFFC00000000000000033F
-:1005C0000000000000000000FFFFFFFC0000000032
-:1005D000000000030000000000000000FFFFFFFC1F
-:1005E0000000000000000003000000000000000008
-:1005F000FFFFFFFC000000000000000300000000FF
-:1006000000000000FFFFFFF1CA31C3C20A966A432F
-:100610000000000000000000FFFFFFF84E501439FA
-:100620001CC5C0030000000000000000FFFFFFF039
-:100630000000000000000002288C108085C010001F
-:10064000FFFFFFFC000000000000000300000000AE
-:1006500000000000FFFFFFFC00000000000000039E
-:100660000000000000000000FFFFFFFC0000000091
-:10067000000000030000000000000000FFFFFFFC7E
-:100680000000000000000003000000000000000067
-:10069000FFFFFFFC0000000000000003000000005E
-:1006A00000000000FFFFFFF3CA3323D60E966A4313
-:1006B0000000000000000000FFFFFFF8000004063B
-:1006C00020D002430000000000000000FFFFFFF800
-:1006D00000D0000000000000000000839031C00046
-:1006E000FFFFFFFC0000000000000003000000000E
-:1006F00000000000FFFFFFFC0000000000000003FE
-:100700000000000000000000FFFFFFFC00000000F0
-:10071000000000030000000000000000FFFFFFFCDD
-:1007200000000000000000030000000000000000C6
-:10073000FFFFFFFC000000000000000300000000BD
-:1007400000000000FFFFFFF3CA33E3D60E966A43B2
-:100750000000000000000000FFFFFFF000501A1032
-:10076000003002430000000000000000FFFFFFF81F
-:100770000000020620030800700000F990118A9022
-:10078000FFFFFFFC0000000000000003000000006D
-:1007900000000000FFFFFFFC00000000000000035D
-:1007A0000000000000000000FFFFFFFC0000000050
-:1007B000000000030000000000000000FFFFFFFC3D
-:1007C0000000000000000003000000000000000026
-:1007D000FFFFFFFC0000000000000003000000001D
-:1007E00000000000FFFFFFFC00000000000000030D
-:1007F0000000000000000000FFFFFFF9C0501BA632
-:1008000000D202430000000000000000FFFFFFF0E4
-:100810004000020700100002700000E890344A9087
-:10082000FFFFFFFC000000000000000300000000CC
-:1008300000000000FFFFFFFC0000000000000003BC
-:100840000000000000000000FFFFFFFC00000000AF
-:10085000000000030000000000000000FFFFFFFC9C
-:100860000000000000000003000000000000000085
-:10087000FFFFFFFC0000000000000003000000007C
-:1008800000000000FFFFFFFC00000000000000036C
-:100890000000000000000000FFFFFFFA10F4020853
-:1008A00000C002430000000000000000FFFFFFF056
-:1008B0000000000000000000728CC8D893891090DE
-:1008C000FFFFFFF082900000030000030000000023
-:1008D00000000000FFFFFFFC00000000000000031C
-:1008E0000000000000000000FFFFFFFC000000000F
-:1008F000000000030000000000000000FFFFFFFCFC
-:1009000000000000000000030000000000000000E4
-:10091000FFFFFFFC000000000000000300000000DB
-:1009200000000000FFFFFFFC0000000000000003CB
-:100930000000000000000000FFFFFFF000000000CA
-:10094000000000030000000000000000FFFFFFF2B5
-:1009500000000320002612430000000000000000F9
-:10096000FFFFFFF040000203101000030000000032
-:1009700000000000FFFFFFFC00000000000000037B
-:100980000000000000000000FFFFFFFC000000006E
-:10099000000000030000000000000000FFFFFFFC5B
-:1009A0000000000000000003000000000000000044
-:1009B000FFFFFFFC0000000000000003000000003B
-:1009C00000000000FFFFFFFC00000000000000032B
-:1009D0000000000000000000FFFFFFF1D03403E63C
-:1009E00080262A430000000000000000FFFFFFF205
-:1009F0000834023000C005030000000000000000C1
-:040A000070EAA57F74
-:00000001FF
diff --git a/firmware/cxgb3/t3c_psram-1.1.0.bin.ihex b/firmware/cxgb3/t3c_psram-1.1.0.bin.ihex
deleted file mode 100644
index c6504803852f..000000000000
--- a/firmware/cxgb3/t3c_psram-1.1.0.bin.ihex
+++ /dev/null
@@ -1,162 +0,0 @@
-:10000000FFFFFFF4000000040000000100000001F9
-:1000100000010100FFFFFFF40000000400000001E8
-:100020000000000100000000FFFFFFF400000004DA
-:10003000000000010000000100000000FFFFFFF4CD
-:1000400000000004000000010000000100000000AA
-:10005000FFFFFFF4000000040000000100000001A9
-:1000600000000000FFFFFFF400000004000000019A
-:100070000000000100000000FFFFFFF4000000048A
-:10008000000000010000000100000000FFFFFFF47D
-:10009000000000040000000100000001000000005A
-:1000A000FFFFFFF400000004000000010000000159
-:1000B00000000000FFFFFFF400000004000000014A
-:1000C0000000000100000000FFFFFFF4000000043A
-:1000D000000000010000000100000000FFFFFFF42D
-:1000E000000000040000000100000001000000000A
-:1000F000FFFFFFF400000004000000010000000109
-:1001000000000000FFFFFFF40000000400000001F9
-:100110000000000100000000FFFFFFF3D03403E205
-:1001200080262A410000000100000000FFFFFFF8C8
-:10013000007000000000000000000080C604000005
-:10014000FFFFFFF4000000040000000100000001B8
-:1001500000000000FFFFFFF40000000400000001A9
-:100160000000000100000000FFFFFFF40000000499
-:10017000000000010000000100000000FFFFFFF48C
-:100180000000000400000001000000010000000069
-:10019000FFFFFFF400000004000000010000000168
-:1001A00000000000FFFFFFF4000000040000000159
-:1001B0000000000100000000FFFFFFFBD03403E25D
-:1001C000802829210000000100000000FFFFFFF847
-:1001D0000600023701C5C00213940480C6057000F2
-:1001E000FFFFFFF88200020637030801000000014C
-:1001F00000000000FFFFFFF400000004000000000A
-:10020000208000808DF40000FFFFFFF40000000458
-:10021000000000010000000100000000FFFFFFF4EB
-:1002200000000004000000010000000100000000C8
-:10023000FFFFFFF4000000040000000100000001C7
-:1002400000000000FFFFFFF40000000400000001B8
-:100250000000000100000000FFFFFFF9C4310000B2
-:1002600000282C810000000100000000FFFFFFF0CB
-:100270004E70021D00C5C00200000000C118000041
-:10028000FFFFFFF400000004000000010000000177
-:1002900000000000FFFFFFF4000000040000000168
-:1002A0000000000100000000FFFFFFF40000000458
-:1002B000000000010000000100000000FFFFFFF44B
-:1002C0000000000400000001000000010000000028
-:1002D000FFFFFFF400000004000000010000000127
-:1002E00000000000FFFFFFF4000000040000000118
-:1002F0000000000100000000FFFFFFF1C00003E666
-:10030000802828210000000100000000FFFFFFF40A
-:1003100000000004000000021394040000017000BB
-:10032000FFFFFFF4000000040000000100000001D6
-:1003300000000000FFFFFFF40000000400000001C7
-:100340000000000100000000FFFFFFF400000004B7
-:10035000000000010000000100000000FFFFFFF4AA
-:100360000000000400000001000000010000000087
-:10037000FFFFFFF400000004000000010000000186
-:1003800000000000FFFFFFF4000000040000000177
-:100390000000000100000000FFFFFFFA103400041D
-:1003A000000001010000000100000000FFFFFFF05D
-:1003B0006000000620030802700000F080259A907B
-:1003C000FFFFFFF400000004000000010000000136
-:1003D00000000000FFFFFFF4000000040000000127
-:1003E0000000000100000000FFFFFFF40000000417
-:1003F000000000010000000100000000FFFFFFF40A
-:1004000000000004000000010000000100000000E6
-:10041000FFFFFFF9C83102020A000242000000811A
-:1004200080000000FFFFFFF1C83103C20A962A4294
-:100430000000008180000000FFFFFFF00431000495
-:10044000000004010000000100000000FFFFFFF8B1
-:1004500020B000040000000013940400C1197000D3
-:10046000FFFFFFF400000004000000020000000095
-:1004700000001000FFFFFFF4000000040000000176
-:100480000000000100000000FFFFFFF40000000476
-:10049000000000010000000100000000FFFFFFF469
-:1004A0000000000400000001000000010000000046
-:1004B000FFFFFFF80000000000004000680C200172
-:1004C00000001090FFFFFFF9C031C3E600266A422A
-:1004D0000000000000001000FFFFFFF210F4000415
-:1004E000000002410000000100000000FFFFFFF0DB
-:1004F0006050080400000002700C20F180259A90E2
-:10050000FFFFFFF8060000040100400200000000A9
-:1005100000001000FFFFFFF40000000400000002D4
-:10052000288C108085C01000FFFFFFF4000000043D
-:10053000000000010000000100000000FFFFFFF4C8
-:1005400000000004000000010000000100000000A5
-:10055000FFFFFFF4000000040000000100000001A4
-:1005600000000000FFFFFFF4000000040000000195
-:100570000000000100000000FFFFFFF04E0000003F
-:10058000000000010000000100000000FFFFFFF973
-:10059000C00002DA00061A42000000839035C00055
-:1005A000FFFFFFF400000004000000010000000154
-:1005B00000000000FFFFFFF4000000040000000145
-:1005C0000000000100000000FFFFFFF40000000435
-:1005D000000000010000000100000000FFFFFFF428
-:1005E0000000000400000001000000010000000005
-:1005F000FFFFFFF400000004000000010000000104
-:1006000000000000FFFFFFF9CA31C3C60A966A4125
-:100610000000000100000000FFFFFFF84E501439F9
-:100620001CC5C0010000000100000000FFFFFFF03A
-:100630000000000000000002288C108085C010001F
-:10064000FFFFFFF4000000040000000100000001B3
-:1006500000000000FFFFFFF40000000400000001A4
-:100660000000000100000000FFFFFFF40000000494
-:10067000000000010000000100000000FFFFFFF487
-:100680000000000400000001000000010000000064
-:10069000FFFFFFF400000004000000010000000163
-:1006A00000000000FFFFFFF3CA3323D60E966A4115
-:1006B0000000000100000000FFFFFFF8000004063A
-:1006C00020D002410000000100000000FFFFFFF801
-:1006D00000D0000000000000000000839031C00046
-:1006E000FFFFFFF400000004000000010000000113
-:1006F00000000000FFFFFFF4000000040000000104
-:100700000000000100000000FFFFFFF400000004F3
-:10071000000000010000000100000000FFFFFFF4E6
-:1007200000000004000000010000000100000000C3
-:10073000FFFFFFF4000000040000000100000001C2
-:1007400000000000FFFFFFFBCA33E3D20E966A41B0
-:100750000000000100000000FFFFFFF000501A1031
-:10076000003002410000000100000000FFFFFFF028
-:100770000000020220030800700000F990118A9026
-:10078000FFFFFFF400000004000000010000000172
-:1007900000000000FFFFFFF4000000040000000163
-:1007A0000000000100000000FFFFFFF40000000453
-:1007B000000000010000000100000000FFFFFFF446
-:1007C0000000000400000001000000010000000023
-:1007D000FFFFFFF400000004000000010000000122
-:1007E00000000000FFFFFFF4000000040000000113
-:1007F0000000000100000000FFFFFFF1C0501BA23D
-:1008000000D202410000000100000000FFFFFFF8DD
-:100810004000020300100002700000E890344A908B
-:10082000FFFFFFF4000000040000000100000001D1
-:1008300000000000FFFFFFF40000000400000001C2
-:100840000000000100000000FFFFFFF400000004B2
-:10085000000000010000000100000000FFFFFFF4A5
-:100860000000000400000001000000010000000082
-:10087000FFFFFFF400000004000000010000000181
-:1008800000000000FFFFFFF4000000040000000172
-:100890000000000100000000FFFFFFFA10F4020852
-:1008A00000C002410000000100000000FFFFFFF057
-:1008B0000000000000000002728CC8D993891090DB
-:1008C000FFFFFFF082900000030000010000000124
-:1008D00000000000FFFFFFF4000000040000000122
-:1008E0000000000100000000FFFFFFF40000000412
-:1008F000000000010000000100000000FFFFFFF405
-:1009000000000004000000010000000100000000E1
-:10091000FFFFFFF4000000040000000100000001E0
-:1009200000000000FFFFFFF40000000400000001D1
-:100930000000000100000000FFFFFFF000000000C9
-:10094000000000010000000100000000FFFFFFF2B6
-:1009500000000320002612410000000100000000FA
-:10096000FFFFFFF040000203101000010000000133
-:1009700000000000FFFFFFF4000000040000000181
-:100980000000000100000000FFFFFFF40000000471
-:10099000000000010000000100000000FFFFFFF464
-:1009A0000000000400000001000000010000000041
-:1009B000FFFFFFF400000004000000010000000140
-:1009C00000000000FFFFFFF4000000040000000131
-:1009D0000000000100000000FFFFFFF9D03403E237
-:1009E00080262A410000000100000000FFFFFFF206
-:1009F0000834023000C005010000000100000000C2
-:040A000070EAA741B0
-:00000001FF
diff --git a/firmware/dsp56k/bootstrap.asm b/firmware/dsp56k/bootstrap.asm
deleted file mode 100644
index a411047e6db3..000000000000
--- a/firmware/dsp56k/bootstrap.asm
+++ /dev/null
@@ -1,98 +0,0 @@
-; Author: Frederik Noring <noring@nocrew.org>
-;
-; This file is subject to the terms and conditions of the GNU General Public
-; License. See the file COPYING in the main directory of this archive
-; for more details.
-
-; DSP56k loader
-
-; Host Interface
-M_BCR EQU $FFFE ; Port A Bus Control Register
-M_PBC EQU $FFE0 ; Port B Control Register
-M_PBDDR EQU $FFE2 ; Port B Data Direction Register
-M_PBD EQU $FFE4 ; Port B Data Register
-M_PCC EQU $FFE1 ; Port C Control Register
-M_PCDDR EQU $FFE3 ; Port C Data Direction Register
-M_PCD EQU $FFE5 ; Port C Data Register
-
-M_HCR EQU $FFE8 ; Host Control Register
-M_HSR EQU $FFE9 ; Host Status Register
-M_HRX EQU $FFEB ; Host Receive Data Register
-M_HTX EQU $FFEB ; Host Transmit Data Register
-
-; SSI, Synchronous Serial Interface
-M_RX EQU $FFEF ; Serial Receive Data Register
-M_TX EQU $FFEF ; Serial Transmit Data Register
-M_CRA EQU $FFEC ; SSI Control Register A
-M_CRB EQU $FFED ; SSI Control Register B
-M_SR EQU $FFEE ; SSI Status Register
-M_TSR EQU $FFEE ; SSI Time Slot Register
-
-; Exception Processing
-M_IPR EQU $FFFF ; Interrupt Priority Register
-
- org P:$0
-start jmp <$40
-
- org P:$40
-; ; Zero 16384 DSP X and Y words
-; clr A #0,r0
-; clr B #0,r4
-; do #64,<_block1
-; rep #256
-; move A,X:(r0)+ B,Y:(r4)+
-;_block1 ; Zero (32768-512) Program words
-; clr A #512,r0
-; do #126,<_block2
-; rep #256
-; move A,P:(r0)+
-;_block2
-
- ; Copy DSP program control
- move #real,r0
- move #upload,r1
- do #upload_end-upload,_copy
- movem P:(r0)+,x0
- movem x0,P:(r1)+
-_copy movep #4,X:<<M_HCR
- movep #$c00,X:<<M_IPR
- and #<$fe,mr
- jmp upload
-
-real
- org P:$7ea9
-upload
- movep #1,X:<<M_PBC
- movep #0,X:<<M_BCR
-
-next jclr #0,X:<<M_HSR,*
- movep X:<<M_HRX,A
- move #>3,x0
- cmp x0,A #>1,x0
- jeq <$0
-_get_address
- jclr #0,X:<<M_HSR,_get_address
- movep X:<<M_HRX,r0
-_get_length
- jclr #0,X:<<M_HSR,_get_length
- movep X:<<M_HRX,y0
- cmp x0,A #>2,x0
- jeq load_X
- cmp x0,A
- jeq load_Y
-
-load_P do y0,_load_P
- jclr #0,X:<<M_HSR,*
- movep X:<<M_HRX,P:(r0)+
-_load_P jmp next
-load_X do y0,_load_X
- jclr #0,X:<<M_HSR,*
- movep X:<<M_HRX,X:(r0)+
-_load_X jmp next
-load_Y do y0,_load_Y
- jclr #0,X:<<M_HSR,*
- movep X:<<M_HRX,Y:(r0)+
-_load_Y jmp next
-
-upload_end
- end
diff --git a/firmware/dsp56k/bootstrap.bin.ihex b/firmware/dsp56k/bootstrap.bin.ihex
deleted file mode 100644
index 233f21fe72b0..000000000000
--- a/firmware/dsp56k/bootstrap.bin.ihex
+++ /dev/null
@@ -1,26 +0,0 @@
-:100000000C004000000000000000000000000000A4
-:1000100000000000000000000000000000000000E0
-:1000200000000000000000000000000000000000D0
-:1000300000000000000000000000000000000000C0
-:1000400000000000000000000000000000000000B0
-:1000500000000000000000000000000000000000A0
-:100060000000000000000000000000000000000090
-:100070000000000000000000000000000000000080
-:100080000000000000000000000000000000000070
-:100090000000000000000000000000000000000060
-:1000A0000000000000000000000000000000000050
-:1000B0000000000000000000000000000000000040
-:1000C00060F40000004F61F400007EA9062E80005D
-:1000D000004707D88407598408F4A800000408F4EE
-:1000E000BF000C0000FEB80AF080007EA908F4A052
-:1000F00000000108F4BE0000000AA980007EAD08DF
-:100100004E2B44F40000000344F4450000010EA00F
-:10011000000AA980007EB508502B0AA980007EB88D
-:1001200008462B44F4450000020AF0AA007EC920CC
-:1001300000450AF0AA007ED006C600007EC60AA9C5
-:1001400080007EC408586B0AF080007EAD06C600B1
-:10015000007ECD0AA980007ECB0858AB0AF0800053
-:100160007EAD06C600007ED40AA980007ED2085863
-:07017000EB0AF080007EADF8
-:00000001FF
-/* DSP56001 bootstrap code */
diff --git a/firmware/e100/d101m_ucode.bin.ihex b/firmware/e100/d101m_ucode.bin.ihex
deleted file mode 100644
index 12971ed458a6..000000000000
--- a/firmware/e100/d101m_ucode.bin.ihex
+++ /dev/null
@@ -1,38 +0,0 @@
-:10000000150255003704FFFFFFFFFFFF8907A70612
-:10001000FFFFFFFFFFFF580501000C001213100047
-:1000200008000C00160238009C001000564020000A
-:10003000CC802300560038009C0010000B4C24009C
-:1000400000080000184812003804380000000000C2
-:1000500000001400550538000080300062061000D2
-:100060006105100008040E006148130002000C0036
-:10007000933010000080300024061000610510004D
-:1000800008040E00610810007E000C00212C2200E4
-:1000900002000C00933010007A0C380000000800B9
-:1000A000903010007A0C38000000000000000000C2
-:1000B00000000000000000009C0010002D4C2400F7
-:1000C000040001000010040037043A00104004004E
-:1000D0008A07380000000000990010007A6C2000A8
-:1000E0009C001000484C24002408130001000C0060
-:1000F00013121000750C260000100400040001000B
-:100100002608130006000C00A806220026C91300CA
-:1001100013131000A80638000000000000000000C3
-:1001200000000000000000000000000000000000CF
-:10013000000000000000000000060800101B100076
-:10014000040005002608100010121000340C3800BE
-:1001500000000000000000005B1521009900100065
-:10016000596520009C0010005945240036081300F2
-:1001700000000C00620C220001000C00131B100098
-:100180000E9C22000E0C21000E6C22000E6C210031
-:100190000EFC22000E5C21000E4C2100550538009B
-:1001A0000400010000100400678C27000008040010
-:1001B0000081010037043A002608130001000C00FA
-:1001C00059052200131310005905380000000000E3
-:1001D000000000000000000000000000000000001F
-:1001E00000000000000000000000000031081300C3
-:1001F0000B0910001348120080FF0C00AB0626000C
-:100200000010040004000100A806380000000000EF
-:0B02100000000000000000004E417ED6
-:00000001FF
-/********************************************************/
-/* Micro code for 8086:1229 Rev 8 */
-/********************************************************/
diff --git a/firmware/e100/d101s_ucode.bin.ihex b/firmware/e100/d101s_ucode.bin.ihex
deleted file mode 100644
index 102c7feb666e..000000000000
--- a/firmware/e100/d101s_ucode.bin.ihex
+++ /dev/null
@@ -1,38 +0,0 @@
-:10000000420255007E04FFFFFFFFFFFF1808FF06B6
-:10001000FFFFFFFFFFFFA60501000C0012131000F9
-:1000200008000C00430238009C00100056402000DD
-:10003000D0802300560038009C0010008B4F240015
-:1000400000080000184812007F043800000000007B
-:1000500000001400A30538000080300010061000D6
-:100060006105100008040E006148130002000C0036
-:10007000933010000080300024061000610510004D
-:1000800008040E00610810007E000C00A12F220061
-:1000900002000C0093301000900F380000000800A0
-:1000A00090301000900F38000000000000000000A9
-:1000B00000000000000000009C001000AD4F240074
-:1000C00004000100001004007E043A001040040007
-:1000D000190838000000000099001000FD6F200092
-:1000E0009A001000FDAF20009C001000C84F2400B3
-:1000F0002408130001000C0013121000F70F260053
-:1001000000100400040001002608130006000C0083
-:100110000007220026C9130013131000000738003F
-:1001200000000000000000000000000000000000CF
-:10013000000000000000000000060800101B100076
-:10014000040005002608100010121000B60F380039
-:100150000000000000000000A91521009900100017
-:10016000A76520009A001000A7A520009C001000A1
-:10017000A74524003608130000000C00E40F2200FD
-:1001800001000C00131B10008E9F22008E0F210017
-:100190008E6F22008E6F21008EFF22008E5F210065
-:1001A0008E4F2100A3053800040001000010040058
-:1001B000E98F270000080400008101007E043A0056
-:1001C0002608130001000C00A705220013131000DD
-:1001D000A70538000000000000000000000000003B
-:1001E000000000000000000000000000000000000F
-:1001F00000000000310813000B0910001348120022
-:1002000080FF0C000307260000100400040001001A
-:0B02100000073800000000004E438093
-:00000001FF
-/********************************************************/
-/* Micro code for 8086:1229 Rev 9 */
-/********************************************************/
diff --git a/firmware/e100/d102e_ucode.bin.ihex b/firmware/e100/d102e_ucode.bin.ihex
deleted file mode 100644
index 9e806da854de..000000000000
--- a/firmware/e100/d102e_ucode.bin.ihex
+++ /dev/null
@@ -1,38 +0,0 @@
-:100000008F027D00F904420E850CED14E914FA14F8
-:10001000360EF70EFF1FFF1FB914E00000000000AE
-:100020000000000000000000BD14E000000000001F
-:100030000000000000000000D514E00000000000F7
-:1000400000000000000000000000000000000000B0
-:100050000000000000000000C114E00000000000EB
-:100060000000000000000000000000000000000090
-:100070000000000000000000000000000000000080
-:100080000000000000000000000000000000000070
-:100090000000000000000000C814E00000000000A4
-:1000A000000000000000000000062000EE14E00048
-:1000B000000000000000000080FF3000460E9400A9
-:1000C0000082030000201000430EE000000000004A
-:1000D000000000000000000006003000FB14E000FB
-:1000E0000000000000000000000000000000000010
-:1000F0000000000000000000000000000000000000
-:1001000000000000000000000000000000000000EF
-:100110000000000000000000416E90003C0E8000D6
-:10012000390EE00000000000FD6E9000FD0E900012
-:10013000F80EE000000000000000000000000000D9
-:1001400000000000000000000000000000000000AF
-:10015000000000000000000000000000000000009F
-:10016000000000000000000000000000000000008F
-:10017000000000000000000000000000000000007F
-:10018000000000000000000000000000000000006F
-:10019000000000000000000000000000000000005F
-:1001A000000000000000000000000000000000004F
-:1001B000000000000000000000000000000000003F
-:1001C000000000000000000000000000000000002F
-:1001D000000000000000000000000000000000001F
-:1001E000000000000000000000000000000000000F
-:1001F00000000000000000000000000000000000FF
-:1002000000000000000000000000000000000000EE
-:0B02100000000000000000002A362E55
-:00000001FF
-/********************************************************/
-/* Micro code for the 8086:1229 Rev F/10 */
-/********************************************************/
diff --git a/firmware/edgeport/boot.H16 b/firmware/edgeport/boot.H16
deleted file mode 100644
index 4bf8e91a975a..000000000000
--- a/firmware/edgeport/boot.H16
+++ /dev/null
@@ -1,29 +0,0 @@
-:0004000000010C0002ED
-:000200000400FFFB
-:000600000002008002000373
-:0003000B0002000BE5
-:00030013000201B82F
-:0003001B0002001BC5
-:0003002300020023B5
-:0003002B0002002BA5
-:000300330002003395
-:0003003B0002003B85
-:00030043000201BDFA
-:0003004B000201D0DF
-:000300530002012186
-:0003007B0002007B05
-:01660080007EB0007AB33FF27EF800237E00017E100012075F6920000ABE240000780575900D800375901DD2B57E0000A5D8FD75A80075B100A9D587CA291209CC1209A0F5097AA1201201E6DA29A9D0C77E00057A01F175E110A9D7F4A9D7E4A5D8F175F10075E13F75A20375A30075C00075C100A9D1B1A9D0B1A9D5D3D2AFE47E0428008DEF1B0478FA04A934D30330E0EEBE240000780563903080E3B29580DFBEB00222C0D0A920DF0FA931DF030201B575080112083380FE7508FE12083375A8007EB33FF230E04B300146C2927E2480007E1109740819B20010740E19B200042E240100A5D9ED7E2480007E1109E4D5E0FD09B2000820E00A09B2000009B2001880EB2E240100A5D9E4439030D2AA8005D2AA439034D2AFA9D1870000000000A911DF03A9D2DF7508FF120833C0D1CA02FFCA06830032D0D032C28BC2AA32750808120833A9C0B1A9C5D3A9C6D3A9D2B132CAB8750802120833E5C0540368051201EE80F5DAB832AE
-:00011BCA00001A
-:064D01E600E47AB33FF1020263CA0BCA1BCA2BCA3BCA4BCA5BCA6BCA7BCAEBC0F17EB3012BB400028019B4011630C00875F10012024D801F30C11C75F1001202DE801430C10875F1001202DE800930C00675F10012024DD0F1DAEBDA7BDA6BDA5BDA4BDA3BDA2BDA1BDA0B22C2C07EB3012BB4020712026F02026322B401FC0202A97E00007A03012B7A03012C227EB3012354606005B4401580137EB30124B4050C7508711208337EB30126F58F2275F60022BE57012928047E5701297A0F012E7A5701320202A97EEF012E7EF701327E0701324D0068217E00007EEBB0F5F3A3A5081BF46804A5B808F07AEF012E7AF701327508061208337A01F622C2C1750803120833A936E216E5F554C06807A9D7F4A927F4FC53E13F43F2880203557EB3012CB4020FA9D4E47EB0007AB3012C7AB3012B22B401397E21E67C327E13012D2C217A23012D7E00002E040134E5E37A09B00B04A5DBF6A9D4E47508701208337EB3012D7EA3012ABCAB78031203EC22020755E5E6B40865A9C4E27E01E37E11E37E31E37E21E37E51E37E41E37E71E37E61E37A0F01237A1F01277508041208337A01081208337A11081208337A21081208337A31081208337A41081208337A51081208337A61081208337A7108120833A9D4E4A9D7F4A9C6E21203C0226D007E1401027A0701327A03012D7EB3012320E70F7A23012C7A33012BBE0701296809227A33012C7A23012B7EB3012354E3232330E002D2E530E702D2E430E50630E403020755543EF5F003541FC325F09004187584FF7302056C0204600206090206240205050204C602063D02063D0206400206400206400206400206400206400206400206400206460206FA0206430206430206430206430206430206437EB30124B4062A7EB3012560567C0B7E1301267E1701277508721208337A01081208337A110812083312075F4035020294B408107508741208337EB33FF1F5F375F60122B4001C7508751208337EB33FF230E00575F302800375F30075F30075F602220207557EB30124B400357508761208337EB30128540FF5F17EB3012820E709E5E130E70D7401800BE5E130E60474018002740053F180F5F375F30075F60222020755C0F17EB30128540F42F17EB30126B400457EB30124B401247508771208337EB30128540F780553E13F80377EB3012820E70553E17F802B53E1BF8026B403177508781208337EB3012820E70543E180801143E140800C43E1C0D0F175080712083322D0F10202907EB30124B409237508791208337EB30126BEB33FF16811CAB8C0F112011DD0F1DAB850767AB33FF1806DB4050875087A1208338062B4031975087B1208337EB30126B401557EB33FF244017AB33FF28046B4011975087C1208337EB30126B401397EB33FF254FE7AB33FF2802AB4072A7EB3012560247C0B7E1301267E1701277508731208337A01081208337A110812083312078B40030202900207557EB30124B40BF675087D1208337EB301267EA301284CAB78E480DF7EB30124B40ADB75087E1208337EB3012670CFF5F375F601220207550207550207557EB30124B404207508C31208337E0400017E1701257E1801347A1C00007E47012912083F0206F4B4063A7508C11208337E5800007A5C00FE7DCA7ED701257E7801347A7C00007E7701297508C1120833C0A8C087C2AFA9D5871208D6D087D0A8404F804AB4001CC2AFA9D587120290E48DEF8DEF8DEFD5E0F7C0D1CA02FFCA06000032B409127E5701254D556805A9D2B18003A9C2B18016B40716C2AF7E0701277E170125C0D1CA18CA38CA28320202900207557EB30124B403157508C21208337E0400017E1701257E570129020294B405397508C0120833C0A8C087C2AFA9D5877E0801347A0C00007E2400FE7E3701257E47012912083FD087D0A87E0801347A0C00007E57012902029402075575080712083343E1C022C0A8C087C2AFA9D5871207CA40197E0801347A0C0000CA0BCA4912083FDA59DA0BD087D0A8C322D087D0A822C0A8C087C2AFA9D5871207CA402B7E5800007A5C00FE7F617E7801347A7C00007E770129BD7478117508C11208331208D64006D087D0A8C322D087D0A8D3227E2400FE7E347FCA0B1A50C5F07D627D757D877E347F037E1BB0BC0B50493E003E000A502D750B3A3069530002BD3850022D38BC1B50303E103E100A512D35694100020B1A30BD3850022D38BE44FFFF78057E1B900A494D44680CBE4400FF28047E4400FFC322D32234
-:00407FC00040010200CA1B010C0200007C0000010000000000000000000000000000000000000000000000000000000000000000000000000000000000F17F0000000000005D
-:1397083300CA087E01087A033FF0DA082280500B1A600B350B1A700B350B1A800B350B1A900B350B1AA00B350B1AB00B350B1AC00B350B1AD00B351B0A600B151B0A700B151B0A800B151B0A900B151B0AA00B151B0AB00B151B0AC00B151B0AD00B159E44001050AA2E440010680E7E1BC07A0BC00B140B341B4478F2227F6F7FF01BFC7C547D328008CA1BCA1BCA1BCA1B9E44001050F22E4400106806CA481B4478FA7FF689E4CA6B5ED4003F68207E8400409D8DDA6BBD873816CA797D78120900DA7940089D7868028005C2D722DA6B43903074AA39B55555745539B52AAA74A039B555557E0400409D7050062D707D076D777C317E7B007A6B000B7C0B6CA5D9F37F161B1C7E5427107E1B10BC1068061B5478F5802C6D007C207F169F107F279F207E2B007E1B10BC0178160B2C0B1CA5DBEF7CB620E0036390304D777893C2D722D2D7220004000400000604020400020104010200000000000000000202020202040008100210040208000101087E187FBD7A1C00FF0B1A00BE1014381A0A51237E1809767A1C00FF2D350B1A506008A5B802034EA0082280FE7EE87FBF7AEC00FFE0F52254C068167EE87FBE7AEC00FFE0600C1209A0F5097AA120020F0A22C295D2941219FB5390CF1219FB80F10D0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0D0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A45646765706F72742F34202D20486172647761726520446961676E6F73746963732C2052657620312E30303B20436F70797269676874203139393820496E73696465204F7574204E6574776F726B730D0A0050617373004641494C202121005061737320202020004641494C20212120000D0A4465746563742052616D3A2020202020202020202020202020202020202020000D0A52616D20546573743A20202020202020202020202020202020202020202020000D0A416464726573732062697420302D313420746573743A202020202020202020000D0A57726F746520416464726573733A2030303A0020207769746820646174613A20002C20616E6420726561643A20000D0A4F6E65206F7220626F7468206F662074686520666F6C6C6F77696E6720416464726573732062697473206C6973746564206172652073686F727465640D0A746F20736F6D657468696E673A200020616E6420000D0A44657465637420556172743A20202020202020202020202020202020202020000D0A53637261746368205061642C4669466F20456E61626C652026205253543A20000D0A0A202020556172742054657374732020202020202020202020202020202020202020506F727431202020506F727432202020506F727433202020506F7274340D0A2020202020202020202020202020202020202020202020202020202020202020202D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D000D0A506F7274204465636F6465723A2020202020202020202020202020202020202020000D0A4469676974616C204C6F6F706261636B3A20202020202020202020202020202020000D0A416E616C6F67204C6F6F706261636B3A2020202020202020202020202020202020000D0A5258442C54584420746F205254532C4354532C52492053686F72743A2020202020000D0A5258442C54584420746F204454522C4453522C43442053686F72743A2020202020000D0A5254535B4354532C52495D20746F204454522C4453522C43442053686F72743A20000D0A5254535B4354532C43445D20746F204453522C52492053686F72743A2020202020000D0A4454525B4453522C43445D20746F205254532C4354532C52492053686F72743A20000D0A44545220746F204354532C43442053686F72743A20202020202020202020202020000D0A52545320746F204354532C5249204C6F6F706261636B3A20202020202020202020000D0A52545320746F204354532C4344204C6F6F706261636B3A20202020202020202020000D0A44545220746F204453522C4344204C6F6F706261636B3A20202020202020202020000D0A0A2020204520522052204F2052202121212C204520522052204F205220212121202C204520522052204F2052202121210D0A0A446961676E6F7374696373206E6F772077696C6C20656E7465722061206465627567206C6F6F70206F6620746865206669727374206465746563746564206572726F722E000D0A0A4E6F204861726477617265206572726F72732064657465637465642E0D0A00436F7079696E6720636F64652066726F6D204D617374657220746F20536C617665277320454570726F6D202E2E2E00446F6E650D0A0A2D3E205475726E20756E6974206F66662C20646973636F6E6E656374206361626C6520616E642072756E207374616E64616C6F6E6520646961676E6F73746963732E00C2AFC209C20A75900D201702D2B54390306C007E1003120F387E680A017A6C00FF121A930B0030B4028024021B3C20091DC294D2951219FB5390CF1219FBC295D2941219FBA5D9E64390301219FB227E680A947A6C00FF121A937EE410007E40557AE9400BE47E50AA7AE9501BE4BEE94068197E680A7A7A6C00FF121A93121A083009137AE9407EE91080F87E680A757A6C00FF121A930B007E680AD87A6C00FF121A937E7800007E700E7EA4FFFF7EB4BFFF7DCB0EC47DDC5DDB6CBB7DFA5EF47FFF7A7BB00BB07DFB5EF47FFF7A7BB00BB07DFC5EF47FFF7A7BB00BB07DFD5EF47FFF7A7BB06CBB7DFA5EF47FFFBE7BB078410BB07DFB5EF47FFFBE7BB078340BB07DFC5EF47FFFBE7BB078270BB07DFD5EF47FFFBE7BB0781A0BB0BEC4FFFE78920EB4A5DF8B7E680A827A6C00FF121A938077CA5BCA6B7E680A8B7A6C00FF121A937E680B2A7A6C00FF121A930A47121AC97E680B797A6C00FF121A936C77DA6BCA6B0B700EC4BEC4FFFF78F61B700A47121AC9121A08300930DA6BDA5B6CBB7E7800007DFA5EF47FFF7A7BB07DFB5EF47FFF7A7BB07DFC5EF47FFF7A7BB07DFD5EF47FFF7A7BB080D47E680AB67A6C00FF121A9330170E7E7804207A7C00007E447BE0800C7E7800007A7C00017E4480000B007E403A7C547F577D846C667A5B500B5C0B50A5DE020B501B8478F07C547F577D846C66BE5B50781A0B5C0B50A5DE020B501B8478EE7E680A757A6C00FF121A93804B7F457E680A7A7A6C00FF121A937E680AFA7A6C00FF121A937D4B121AC97E680B0F7A6C00FF121A936C887C95121AC97E680B1D7A6C00FF121A937E4B90121AC9121A083009057E4B9080FB7E680B7F7A6C00FF121A930B00D2927E24800009B20008BEB001780B09B20014BEB060780280177E680A7A7A6C00FF121A93121A0830091109B2000880FA7E680A757A6C00FF121A937E680BA17A6C00FF121A930B00C2921219EE7E2480007EA05519A2001C7EB00119B2000809B2001CBCAB783709B200085EB0C0BEB0C0782B7EA0AA19A2001C6CBB19B2000809B2001CBCAB781609B200085EB0C0780D7E680A757A6C00FF121A93801B7E680A7A7A6C00FF121A93121A0830090A19A2001C09B2001C80F67E680BC37A6C00FF121A937E680C457A6C00FF121A937E2480007E11097EB00119B2001C2E2401000BB0A5D9F37E2480007E11097EB0010B0009A2001CBCAB78167E680A827A6C00FF121A932E2401000BB0A5D9E280257E680A8B7A6C00FF121A93121A083009E47E2480007E110909A2001C2E240100A5D9F580EC7E680C697A6C00FF121A9312138A7E2480007E11090B00741019B200101213032E240100A5D9EE7E680C8D7A6C00FF121A937E2480007E11090B00E419B200101213032E240100A5D9EF3000030218B70213BB740719B200081219FB09B2000009B2001409B2000009B2001409B2000009B2001409B2000009B20014C20B7EB0551213647EB0AA1213647EB0001213647EB0FF121364300B0F7E680A8B7A6C00FF121A93121A08227E680A827A6C00FF121A932219B200001219EE09A20000BCAB780122200903D20B22121A0819B200001219EE09A2000080F3D2921219EEC2921219EE7E2480007E1109748019B2000C7E54000219A2000419B20000740319B2000C2E240100A5D9E1227E680CB17A6C00FF121A937E2480007E11090B001219EE09B200187EA05519A200001219EE09B200185EB005780D7E680A827A6C00FF121A93801A7E680A8B7A6C00FF121A93121A0830090919A200001219EE80F72E240100A5D9B67E680CD57A6C00FF121A937E2480007E11090B001219EE09B200187EA05519A200001219EE09B200185EB00A780D7E680A827A6C00FF121A93801A7E680A8B7A6C00FF121A93121A0830090919A200001219EE80F72E240100A5D9B630040302168C7E680CF97A6C00FF121A937E2480007E11090B006CAA19A200101219EE09B200187EA00219A200106CAA19A200101219EE09B200185EB00A783C7EA00119A200101219EE09B200187EA00319A200107EA00119A200101219EE09B200185EB00A78147E680A827A6C00FF121A932E240100A5D99E80207E680A8B7A6C00FF121A93121A083009E67EA00219A200106CAA19A2001080F17E680D417A6C00FF121A937E2480007E11090B006CAA19A200101219EE09B200187EA00119A200106CAA19A200101219EE09B200185EB005783C7EA00219A200101219EE09B200187EA00319A200107EA00219A200101219EE09B200185EB00578147E680A827A6C00FF121A932E240100A5D99E80207E680A8B7A6C00FF121A93121A083009E67EA00119A200106CAA19A2001080F17E680D897A6C00FF121A937E2480007E11090B007EA00219A200101219EE09B200185EB050BEB050781F6CAA19A200101219EE09B200185EB050780D7E680A827A6C00FF121A9380207E680A8B7A6C00FF121A93121A0830090F7EA00219A200106CAA19A2001080F12E240100A5D9A27E680DD17A6C00FF121A937E2480007E11090B0009B200187EA00119A200101219EE09B200185EB0A0BEB0A0781F6CAA19A200101219EE09B200185EB0A0780D7E680A827A6C00FF121A9380207E680A8B7A6C00FF121A93121A0830090F7EA00119A200106CAA19A2001080F12E240100A5D99E02182B7E680D1D7A6C00FF121A937E2480007E11090B006CAA19A200101219EE09B200187EA00219A200106CAA19A200101219EE09B200185EB006783C7EA00119A200101219EE09B200187EA00319A200107EA00119A200101219EE09B200185EB00678147E680A827A6C00FF121A932E240100A5D99E80207E680A8B7A6C00FF121A93121A083009E67EA00219A200106CAA19A2001080F17E680D657A6C00FF121A937E2480007E11090B006CAA19A200101219EE09B200187EA00119A200106CAA19A200101219EE09B200185EB009783C7EA00219A200101219EE09B200187EA00319A200107EA00219A200101219EE09B200185EB00978147E680A827A6C00FF121A932E240100A5D99E80207E680A8B7A6C00FF121A93121A083009E67EA00119A200106CAA19A2001080F17E680DAD7A6C00FF121A937E2480007E11090B007EA00219A200101219EE09B200185EB090BEB090781F6CAA19A200101219EE09B200185EB090780D7E680A827A6C00FF121A9380207E680A8B7A6C00FF121A93121A0830090F7EA00219A200106CAA19A2001080F12E240100A5D9A20218B730170302193BC28A1219227E2480007E11096CAA19A200041219EE0B007EA00819A200101219EE208B3E20893B7EA00819A2000409A200104EA00219A200101219EE308B2330892009A200105EA0FD19A200101219EE7EA00019A200041219EE208B05208902801A121A083009147EA00219A2001000005EA0FD19A20010000080EC2E240100A5D98902193B2017FA12138A1219227E2480007E11090B002089267EA0FF19A200041219EE7EB05519B200001219EE30890F7EA00019A200041219EE2089028026121A083009207EA0FF19A200041219EE7EB05519B200001219EE7EA00019A200041219EE80E02E240100A5D9A802193B7E2480007E11097EA00819A200101219EE2E240100A5D9EF22300A197E680DF57A6C00FF121A93D2091219EE1219EE1219EE020F1030171C7E680E6F7A6C00FF121A937E680E917A6C00FF121A93121B3C0219E60B007E7819A07A7C00FF7F677A6C00007E703E7E7BB07A6BB00B7C0B6CA5DFF37E7819A07A7C000089787E7800007A7C00FE7E687FBF7A6C00FE74AA39B75555745539B72AAA74A039B755556C997A6B907E5427107E6B80BC8968081B5478F58AFF19DE8AFF19E6121A087E6B8080FB7E10FF121A8580F8CAF97EF400FF1BF478FCDAF922CAF97EF400001BF478FCDAF922200919D20A1219FBC295D2941219FB1219FB1219FB1219FB43903022CA0B7E10037C306C220B209E300A50F92E300B1B2068181219FB1219FB5390CF1219FB1219FB1219FB439030A5DAE81219FB1219FB1B3068191219FB1219FBC295D2941219FB1219FB1219FB439030A5DBE77E200A1219FBA5DAFAA5D9A7DA0B2220090A1219FBB2941219FBB2942230173220092FCA2BCA7B7E7880007A7C00FE121B1C7E6BA05CAA681029B70014546068F839A700000B6C80E91219EED2B5DA7BDA2B22121AD47E68000B121A9322CA59CA5B7EB4000B7CB8C4121B047CB8121B047CB9C4121B047CB9121B047EB0687AB9B00BB46CBB7AB9B0DA59DA5B225EB00F7CAB9EA00A40052EB03780032EB0307AB9B00BB422C2B5C2921219EE748039B7000C7E54000639A7000439B70000740339B7000C227E7800007A7C00FF7E5800007A5C00017F657E7420001208D640547E787C007A7C00FF7E5800007A5C00017E687C007A6C00017E7404001208D640337480121BB1402C5390CFD2087E0400087E14000084A5DBFCA5DAF9A5D9F67440121BB1400E7E680EC07A6C00FF121A930219E6C295D29480FEF50A7E78000A7A7C00007E687FBF7A6C00017E7400010208D6D2
-:0000000001FF
-//**************************************************************
-//* Edgeport/4 Binary Image
-//* Generated by HEX2C v1.06
-//* Copyright (C) 1998 Inside Out Networks, All rights reserved.
-//* This program is free software; you can redistribute it and/or modify
-//* it under the terms of the GNU General Public License as published by
-//* the Free Software Foundation; either version 2 of the License, or
-//* (at your option) any later version.
-//**************************************************************
diff --git a/firmware/edgeport/boot2.H16 b/firmware/edgeport/boot2.H16
deleted file mode 100644
index 8b14295e1f3e..000000000000
--- a/firmware/edgeport/boot2.H16
+++ /dev/null
@@ -1,28 +0,0 @@
-:000400000002000003F7
-:000200000400FFFB
-:000600000002008002000373
-:0003000B0002000BE5
-:000300130002025690
-:0003001B0002001BC5
-:0003002300020023B5
-:0003002B0002002BA5
-:000300330002003395
-:0003003B0002003B85
-:000300430002004375
-:0003004B0002004B65
-:00030053000201F5B2
-:0003007B0002007B05
-:02160080007EB3910120E30C7EB33FF254FE7AB33FF2800A7EB33FF244017AB33FF274007AB3910074017AB391127EF800247E00017E10001209D06920000A5E401FBE24000078097E00037A03900080077E00027A03900075B0DF7E00017A0394007A0301247E00017A0393007E0000A5D8FD75A80075B100CA29120C66120C37F5217AA120200908200A0A7EB00C80087EB00080037EB0087AB39200120296DA2974107AB391017E20047CB2C2D7131313137AB3910074007AB3911074607AB3911C74027AB39112A5DADF74007AB3910074607AB3911C74107AB3910674107AB3910774347AB39113743F7AB3911474027AB3910674017AB3910774037AB3910674447AB3910774EF7AB3910474077AB391067EB391077AB10A750901D2AAD2AFE47E60024D2278037E60037C767E0428008DEF1B0478FA047E20077A2391067E2391077E310ABC3268227A210A7E21096817CAB874037AB391067EB3910744027AB39107DAB875090030E0C16C677A63900080B9BEB00222C0D07508FE120AC074027AB3910674007AB3910774037AB3910674007AB3910774027AB391047EB33FF230E00874187AB39101800674107AB3910174107AB391040202367508FF120AC074017AB3910474037AB391067EB3910754FC7AB3910732CAB8750802120AC07EB3910320E50830E02B12029E80F17EB3910430E005DAB802023930E105DAB80201F530E60512040380D530E205DAB802008080CBDAB8326D
-:082A029600E47AB33FF1020341CA0BCA1BCA2BCA3BCA4BCA5BCA6BCA7BCAEB74007AB391007EB3012EB40002801CB401197EB391145414680512030580237EB3911430E51C12044380177EB3911430E505120443800B7EB3911454146803120305DAEBDA7BDA6BDA5BDA4BDA3BDA2BDA1BDA0B2220E41975080A120AC07EB3012D700A7EB3012EB4011F02039D02098B75080B120AC074147AB391147EB3012EB4020C12034D02034174047AB39114227E00007A03012E7A03012F227EB3012554606005B4401E801C7EB30126B40515750871120AC07EB301287EA0017AA391067AB391072274007AB3910074107AB3911222BE57012B28047E57012B7A0F01317A57013574107AB391122274007AB391007EB3911A70537EB3911420E44C7EEF01317EF701357E0701354D0068217E0000E07AB39117A3A5081BF46806A5B810F080197EB0007AB3012EBE0010680D7EB0007AB3012E74807AB3911E7AEF01317AF70135750806120AC074047AB3911422CA0BCA1BCA2BCA3BCA4BCA5BCA6BCA7BCAEB750803120AC074007AB3012D74007AB3910074017AB391121204B2DAEBDA7BDA6BDA5BDA4BDA3BDA2BDA1BDA0B22750803120AC07EB3012FB4021174007AB3012F7AB3012E74207AB3911422B401467EB3910420E6427E23911A7C327E1301302C217A2301307E00002E0401377EB391167A09B00B04A5DBF474207AB39114750870120AC07EB301307EA3012CBCAB78031205522202098BDA5902041574E07AB391007E0391107E1391117E3391127E2391137E5391147E4391157E7391167E6391177A0F01257A1F0129750804120AC07A0108120AC07A1108120AC07A2108120AC07A3108120AC07A4108120AC07A5108120AC07A6108120AC07A7108120AC074007AB3910074407AB39104120526226D007E1401027A0701357A0301307EB3012520E70F7A23012F7A33012EBE07012B6809227A33012F7A23012E7EB3012554E3232330E002D2E530E702D2E430E50630E40302098B543EF5F003541FC325F090057E7584FF730207390205C60207D20207ED0206D002065B02081E02081E0208210208210208210208210208210208210208210208210208270208F902082402082402082402082402082402082474007AB3910074607AB3911C7EB30126B4062A7EB3012760797C0B7E1301287E170129750872120AC07A0108120AC07A1108120AC01209D04058020384B4081C750874120AC07EB33FF17E0801377A0C00007A0BB07E540001020384B40033750875120AC07E0801377A0C0000CA0B7EB33FF230E00774027A0BB0800574007A0BB00B1474007A0BB07E540002DA0B02038402098B74007AB3910074607AB3911C7EB30126B4005F750876120AC07EB3012A540FB402057EB0608017B400057EB000800F7EB3012A20E7057EB04080037EB0207AB391007EB3911130E0047401800274007E0801377A0C0000CA0B7A0BB00B1474007A0BB074007AB391007E540002DA0B02038402098B7EB3012A540FB402057EB0608017B400057EB000800F7EB3012A20E7057EB04080037EB0207AB391007EB30128B400267EB30126B4010E750877120AC074017AB39112801BB4030E750878120AC074017AB39111800A74007AB3910012098B2274007AB391000203777EB30126B4091F750879120AC07EB30128BEB33FF1680DCAB81201F1DAB850767AB33FF1806DB4050875087A120AC08062B4031975087B120AC07EB30128B401557EB33FF244017AB33FF28046B4011975087C120AC07EB30128B401397EB33FF254FE7AB33FF2802AB4072A7EB3012760247C0B7E1301287E170129750873120AC07A0108120AC07A1108120AC0120A0A400302037702098B7EB30126B40BF675087D120AC07EB301287EA3012A4CAB78E480DF74007AB3910074607AB3911C7EB30126B40ACF75087E120AC07EB3012870C37E0801377A0C00007A0BB07E54000102038402098B02098B02098B7EB30126B404207508C3120AC07E0400017E1701277E1801377A1C00007E47012B120ACC0208F3B406427508C1120AC07E5800007A5C00FE7DCA7ED701277E7801377A7C00007E77012B7508C1120AC0C0A8C2AF7E40017A439400120B637E4301247A439400D0A840658060B40024C2AF7EB0017AB394007AB30124120377E48DEF8DEF8DEFD5E0F7C0D1CA02FFCA06000032B4092074037AB391067E2391077E5701274D5568054E200280035E20FD7A2391078016B40716C2AF7E0701297E170127C0D1CA18CA38CA283202037702098B74007AB3910074607AB3911C7EB30126B403157508C2120AC07E0400017E1701277E57012B020384B405417508C0120AC0C0A8C2AF7E40017A4394007E0801377A0C00007E2400FE7E3701277E47012B120ACC7E4301247A439400D0A87E0801377A0C00007E57012B020384B401207E00007E1001750872120AC07A0108120AC07A1108120AC01209D0400302038402098B750807120AC07EB0027AB3900074007AB3910074407AB3911574017AB391117EB391155460BEB040680874207AB3911580ED74017AB3911274047AB3911474FF7AB3012D22C0A8C2AF7E40017A439400120A57401F7E0801377A0C0000CA0BCA49120ACCDA59DA0B7E4301247A439400D0A8C3227E4301247A439400D0A822C0A8C2AF7E40017A439400120A5740317E5800007A5C00FE7F617E7801377A7C00007E77012BBD7478177508C1120AC0120B63400C7E4301247A439400D0A8C3227E4301247A439400D0A8D3227E2400FE7E347FCA0B1A50C5F07D627D757D877E347F037E1BB0BC0B50493E003E000A502D750B3A3069530002BD3850022D38BC1B50303E103E100A512D35694100020B1A30BD3850022D38BE44FFFF78057E1B900A494D44680CBE4400FF28047E4400FFC322D32248
-:00407FC00040010200D73102000300007C0000010000000000000000000000000000000000000000000000000000000000000000000000000000000000F17F00000000000044
-:10430AC000CA087E01087A033FF0DA082280500B1A600B350B1A700B350B1A800B350B1A900B350B1AA00B350B1AB00B350B1AC00B350B1AD00B351B0A600B151B0A700B151B0A800B151B0A900B151B0AA00B151B0AB00B151B0AC00B151B0AD00B159E44001050AA2E440010680E7E1BC07A0BC00B140B341B4478F2227F6F7FF01BFC7C547D328008CA1BCA1BCA1BCA1B9E44001050F22E4400106806CA481B4478FA7FF689E4CA6B5ED4003F68207E8400409D8DDA6BBD873816CA797D78120B8DDA7940089D7868028005C2D722DA6B7EC0037ED0007AD3900074AA39B55555745539B52AAA74A039B555557E0400409D7050062D707D076D777C317E7B007A6B000B7C0B6CA5D9F37F161B1C7E5427107E1B10BC1068061B5478F5802F6D007C207F169F107F279F207E2B007E1B10BC0178190B2C0B1CA5DBEF7CB620E0066CDC7AD390004D777890C2D722D2D7220004000400000604020400020104010200000000000000000202020202040008100210040208000101087E187FBD7A1C00FF0B1A005E101FBE1014381A0A51237E180C0D7A1C00FF2D350B1A506008A5B802034EA0082280FE7EE87FBF7AEC00FFE0F52354C068387EE87FBE7AEC00FFE0602E120C37F5217AA12020090C200A127EB00E7AB3920080107EB0027AB3920080077EB00A7AB392007AB10D020CC4227EB0027AB3900012190C7EB0037AB3900012190C80EAC2AFC211C21275B0DF7E00017A0393007E00007A0390006C007E1003120CF57E682C667A6C00FF1219C40B008032021A6E20112B7EB0017AB3900012190C7EB0037AB3900012190C7EB0027AB3900012190CA5D9DC7EB0007AB3900012190C227E682CF97A6C00FF1219C47EE410007E40557AE9400BE47E50AA7AE9501BE4BEE94068197E682CDF7A6C00FF1219C41219193011137AE9407EE91080F87E682CDA7A6C00FF1219C40B007E682D3D7A6C00FF1219C47E7800007E700E7EA4FFFF7EB4BFFF7DCB0EC47DDC5DDB6CBB7DFA5EF47FFF7A7BB00BB07DFB5EF47FFF7A7BB00BB07DFC5EF47FFF7A7BB00BB07DFD5EF47FFF7A7BB06CBB7DFA5EF47FFFBE7BB078410BB07DFB5EF47FFFBE7BB078340BB07DFC5EF47FFFBE7BB078270BB07DFD5EF47FFFBE7BB0781A0BB0BEC4FFFE78920EB4A5DF8B7E682CE77A6C00FF1219C48077CA5BCA6B7E682CF07A6C00FF1219C47E682D8F7A6C00FF1219C40A471219FA7E682DDE7A6C00FF1219C46C77DA6BCA6B0B700EC4BEC4FFFF78F61B700A471219FA121919301130DA6BDA5B6CBB7E7800007DFA5EF47FFF7A7BB07DFB5EF47FFF7A7BB07DFC5EF47FFF7A7BB07DFD5EF47FFF7A7BB080D47E682D1B7A6C00FF1219C4301F0E7E7804207A7C00007E447BE0800C7E7800007A7C00017E4480000B007E403A7C547F577D846C667A5B500B5C0B50A5DE020B501B8478F07C547F577D846C66BE5B50781A0B5C0B50A5DE020B501B8478EE7E682CDA7A6C00FF1219C4804B7F457E682CDF7A6C00FF1219C47E682D5F7A6C00FF1219C47D4B1219FA7E682D747A6C00FF1219C46C887C951219FA7E682D827A6C00FF1219C47E4B901219FA1219193011057E4B9080FB7E682E287A6C00FF1219C40B007EB0807AB391007EA0557AA391107EB391077EB39110BCAB78207EA0AA7AA391107EB391077EB39110BCAB780D7E682CDA7A6C00FF1219C4801B7E682CDF7A6C00FF1219C412191930110A7AA391107EB3911080F67E682E4A7A6C00FF1219C41212310B007EE410007EA0A5CAA87AE9A07EB0307AB395007EE9A07EB0007AB3950012190C0BE57EB0207AB395007EE9B07EB0007AB395007EE9B0DAA8BCAB780D7E682CDA7A6C00FF1219C4801D7E682CDF7A6C00FF1219C412191930110C7EB0387AB395007EE9B080FB80007E682DE47A6C00FF1219C40B0075B0DF7E24800009B20008BEB001780B09B20014BEB060780280177E682CDF7A6C00FF1219C412191930111109B2000880FA7E682CDA7A6C00FF1219C47E682E067A6C00FF1219C40B0075B0EF1218FF7E2480007EA05519A2001C7EB00119B2000809B2001CBCAB783709B200085EB0C0BEB0C0782B7EA0AA19A2001C6CBB19B2000809B2001CBCAB781609B200085EB0C0780D7E682CDA7A6C00FF1219C4801B7E682CDF7A6C00FF1219C412191930110A19A2001C09B2001C80F67E682E6C7A6C00FF1219C47E682EEE7A6C00FF1219C47E2480007E11217EB00119B2001C2E2401000BB0A5D9F37E2480007E11217EB0010B0009A2001CBCAB78167E682CE77A6C00FF1219C42E2401000BB0A5D9E280257E682CF07A6C00FF1219C41219193011E47E2480007E112109A2001C2E240100A5D9F580EC7E682F127A6C00FF1219C41212317E2480007E11210B00741019B200101211AA2E240100A5D9EE7E682F367A6C00FF1219C47E2480007E11210B00E419B200101211AA2E240100A5D9EF30000302173B02126A740719B2000812190C09B2000009B2001409B2000009B2001409B2000009B2001409B2000009B20014C2137EB05512120B7EB0AA12120B7EB00012120B7EB0FF12120B30130F7E682CF07A6C00FF1219C4121919227E682CE77A6C00FF1219C42219B200001218FF09A20000BCAB780122201103D2132212191919B200001218FF09A2000080F375B0DF1218FF75B0EF1218FF7E2480007E1121748019B2000C7E54000219A2000419B20000740319B2000C740619B200082E240100A5D9DB227E682F5A7A6C00FF1219C47E2480007E11210B001218FF09B200187EA05519A200001218FF09B200185EB005780D7E682CE77A6C00FF1219C4801A7E682CF07A6C00FF1219C412191930110919A200001218FF80F72E240100A5D9B67E682F7E7A6C00FF1219C47E2480007E11210B001218FF09B200187EA05519A200001218FF09B200185EB00A780D7E682CE77A6C00FF1219C4801A7E682CF07A6C00FF1219C412191930110919A200001218FF80F72E240100A5D9B630040302159F7E682FA27A6C00FF1219C47E2480007E11210B006CAA19A200101218FF09B200187EA00219A200106CAA19A200101218FF09B200185EB00A783C7EA00119A200101218FF09B200187EA00319A200107EA00119A200101218FF09B200185EB00A78147E682CE77A6C00FF1219C42E240100A5D99E80207E682CF07A6C00FF1219C41219193011E67EA00219A200106CAA19A2001080F17E682FEA7A6C00FF1219C47E2480007E11210B006CAA19A200101218FF09B200187EA00119A200106CAA19A200101218FF09B200185EB005783C7EA00219A200101218FF09B200187EA00319A200107EA00219A200101218FF09B200185EB00578147E682CE77A6C00FF1219C42E240100A5D99E80207E682CF07A6C00FF1219C41219193011E67EA00119A200106CAA19A2001080F17E6830327A6C00FF1219C47E2480007E11210B007EA00219A200101218FF09B200185EB050BEB050781F6CAA19A200101218FF09B200185EB050780D7E682CE77A6C00FF1219C480207E682CF07A6C00FF1219C412191930110F7EA00219A200106CAA19A2001080F12E240100A5D9A27E68307A7A6C00FF1219C47E2480007E11210B0009B200187EA00119A200101218FF09B200185EB0A0BEB0A0781F6CAA19A200101218FF09B200185EB0A0780D7E682CE77A6C00FF1219C480207E682CF07A6C00FF1219C412191930110F7EA00119A200106CAA19A2001080F12E240100A5D99E7E68309E7A6C00FF1219C47E2480007E11210B0020B1267EA00219A200101218FF30B1196CAA19A200101218FF20B10D7E682CE77A6C00FF1219C480207E682CF07A6C00FF1219C412191930110F7EA00219A200106CAA19A2001080F12E240100A5D9AE02173B7E682FC67A6C00FF1219C47E2480007E11210B006CAA19A200101218FF09B200187EA00219A200106CAA19A200101218FF09B200185EB006783C7EA00119A200101218FF09B200187EA00319A200107EA00119A200101218FF09B200185EB00678147E682CE77A6C00FF1219C42E240100A5D99E80207E682CF07A6C00FF1219C41219193011E67EA00219A200106CAA19A2001080F17E68300E7A6C00FF1219C47E2480007E11210B006CAA19A200101218FF09B200187EA00119A200106CAA19A200101218FF09B200185EB009783C7EA00219A200101218FF09B200187EA00319A200107EA00219A200101218FF09B200185EB00978147E682CE77A6C00FF1219C42E240100A5D99E80207E682CF07A6C00FF1219C41219193011E67EA00119A200106CAA19A2001080F17E6830567A6C00FF1219C47E2480007E11210B007EA00219A200101218FF09B200185EB090BEB090781F6CAA19A200101218FF09B200185EB090780D7E682CE77A6C00FF1219C480207E682CF07A6C00FF1219C412191930110F7EA00219A200106CAA19A2001080F12E240100A5D9A2201F681212311217A97E2480007E11210B002089267EA0FF19A200041218FF7EB05519B200001218FF30890F7EA00019A200041218FF20890280261219193011207EA0FF19A200041218FF7EB05519B200001218FF7EA00019A200041218FF80E02E240100A5D9A80217C202184C7E2480007E11217EA00819A200101218FF2E240100A5D9EF22301F0302184CC28A1217A90B00121816208B2474037AB3910674027AB39107740C7AB3910674007AB3910712190C308B06121816308BAD1219193011A712181674037AB3910674027AB3910712190C12181680E97EA00074027AB391067AA3910774037AB391067AA391071218FF74EF7AB3910474807AB39103740C7AB3910674087AB3910712190C223012197E6830C27A6C00FF1219C4D2111218FF1218FF1218FF020CCA301F1C7E68313C7A6C00FF1219C47E68315E7A6C00FF1219C4121A6E0218F70B007E7818B17A7C00FF7F677A6C00007E703E7E7BB07A6BB00B7C0B6CA5DFF37E7818B17A7C000089787E7800007A7C00FE7E687FBF7A6C00FE74AA39B75555745539B72AAA74A039B755556C997A6B907E5427107E6B80BC8968081B5478F58AFF18EF8AFF18F71219197E6B8080FB7E10FF1219AC80F8CAF97EF400FF1BF478FCDAF922CAF97EF400001BF478FCDAF922201120D21212190C7EB0027AB3900012190C12190C12190C12190C7EB0007AB3900022CA0B7E10037C306C220B209E300A50F92E300B1B20682012190C12190C7EB0037AB3900012190C12190C12190C7EB0007AB39000A5DAE012190C12190C1B30682012190C12190C7EB0027AB3900012190C12190C12190C7EB0007AB39000A5DBE07E200A12190CA5DAFAA5D998DA0B2220111412190C7EB0017AB3900012190C7EB0007AB3900022301F3220112FCA2BCA7B7E7880007A7C00FE121A4D7E6BA05CAA681029B70014546068F839A700000B6C80E91218FFD2B5DA7BDA2B22121A057E68000C1219C422CA59CA5B7EB4000C7CB8C4121A357CB8121A357CB9C4121A357CB9121A357EB0687AB9B00BB46CBB7AB9B0DA59DA5B225EB00F7CAB9EA00A40052EB03780032EB0307AB9B00BB422C2B575B0EF1218FF748039B7000C7E54000639A7000439B70000740339B7000C227E7800007A7C00FF7E5800007A5C00017F657E742000120B6340587E787C007A7C00FF7E5800007A5C00017E687C007A6C00017E740400120B6340377480121AEA40307E00037A039000D2107E0400087E14000084A5DBFCA5DAF9A5D9F67440121AEA400E7E68318D7A6C00FF1219C40218F77EB0027AB3900080FEF50B7E78000B7A7C00007E687FBF7A6C00017E740001020B6374
-:0000000001FF
-//**************************************************************
-//* Edgeport/4 Binary Image
-//* Generated by HEX2C v1.06
-//* Copyright (C) 1998 Inside Out Networks, All rights reserved.
-//* This program is free software; you can redistribute it and/or modify
-//* it under the terms of the GNU General Public License as published by
-//* the Free Software Foundation; either version 2 of the License, or
-//* (at your option) any later version.
-//**************************************************************
diff --git a/firmware/edgeport/down.H16 b/firmware/edgeport/down.H16
deleted file mode 100644
index 7e36fe1f2182..000000000000
--- a/firmware/edgeport/down.H16
+++ /dev/null
@@ -1,29 +0,0 @@
-:000400000001100004E7
-:000200000400FFFB
-:00060000000200800244B082
-:0003000B000244723A
-:0003001300020013D5
-:0003001B0002001BC5
-:0003002300020023B5
-:0003002B0002002BA5
-:000300330002003395
-:0003003B0002003B85
-:000300430002004375
-:0003004B00026EC47E
-:000300530002758DA6
-:0003007B0002007B05
-:00070080007E14000002405154
-:088230000012372812303E1230541230E51231681235201238581231151231401230A080E0E52360197E14000009B101CFB4000280051419B101CFA50BBE312F78EB22C2AF7EB33FF1B4010AC0F175F1021270EFD0F1D2AF22C2AFE52260437E0701E1BE04038038397E0480007E200013502109A000044EA00519A000040A320953678E5E5127680B09A000104EA00119A000102E040100A50ABE212F78D1752200D2AF22C2AF7E20007E30017CB2230A2B4932018FBE34000068127EB121A54B7AB121CA19492230D59924DA193E30A50ABE212F78D6D2AF22460F49674CBF5017536F56C75A1F5D77C2AFE53260147E2000135007CAB8123102DAB8A50ABE212F78EFD2AF22CA281267ABDA2840090A2209B2678EF4523222C2AFE53460147E2000135007CAB8123132DAB8A50ABE212F78EFD2AF22CA280A220942003E1269C2DA2822C2AFE53560147E2000135007CAB812315DDAB8A50ABE212F78EFD2AF22CA287E4000126C5BDA2822C2AFE52360147E2000135007CAB8123185DAB8A50ABE212F78EFD2AF227CB2230A2B49223190892431A03210328032F0336033D0344034B07E27018FBE24000078247E24800009B20014CAB85EB01EDAB8680BCA197D121249307D21DA1930E6187E6000801EBE27019F680D7A27019F7E609C7A6301CF802E7E6301CFA5BE00267E60017EB0007EA0C81262B640187531B3127C15C2186C007A0301CFC0F175F101126FD9D0F1227E270191BE24000078247E24810009B20014CAB85EB01EDAB8680BCA197D12124C887D21DA1930E6187E6000801EBE2701A1680D7A2701A17E609C7A6301D0802E7E6301D0A5BE00267E60017EB0007EA0C81262B640187531B3127C15C2196C007A0301D0C0F175F101126FD9D0F1227E270193BE24000078247E24820009B20014CAB85EB01EDAB8680BCA197D12124FE07D21DA1930E6187E6000801EBE2701A3680D7A2701A37E609C7A6301D1802E7E6301D1A5BE00267E60017EB0007EA0C81262B640187531B3127C15C21A6C007A0301D1C0F175F101126FD9D0F1227E270195BE24000078247E24830009B20014CAB85EB01EDAB8680BCA197D121253387D21DA1930E6187E6000801EBE2701A5680D7A2701A57E609C7A6301D2802E7E6301D2A5BE00267E60017EB0007EA0C81262B640187531B3127C15C21B6C007A0301D2C0F175F101126FD9D0F1227E270197BE24000078247E24840009B20014CAB85EB01EDAB8680BCA197D121256907D21DA1930E6187E6000801EBE2701A7680D7A2701A77E609C7A6301D3802E7E6301D3A5BE00267E60017EB0007EA0C81262B640187531B3127C15C21C6C007A0301D3C0F175F101126FD9D0F1227E270199BE24000078247E24850009B20014CAB85EB01EDAB8680BCA197D121259E87D21DA1930E6187E6000801EBE2701A9680D7A2701A97E609C7A6301D4802E7E6301D4A5BE00267E60017EB0007EA0C81262B640187531B3127C15C21D6C007A0301D4C0F175F101126FD9D0F1227E27019BBE24000078247E24860009B20014CAB85EB01EDAB8680BCA197D12125D407D21DA1930E6187E6000801EBE2701AB680D7A2701AB7E609C7A6301D5802E7E6301D5A5BE00267E60017EB0007EA0C81262B640187531B3127C15C21E6C007A0301D5C0F175F101126FD9D0F1227E27019DBE24000078247E24870009B20014CAB85EB01EDAB8680BCA197D121260987D21DA1930E6187E6000801EBE2701AD680D7A2701AD7E609C7A6301D6802E7E6301D6A5BE00267E60017EB0007EA0C81262B640187531B3127C15C21F6C007A0301D6C0F175F101126FD9D0F122C2AFE52460147E2000135007CAB812353DDAB8A50ABE212F78EFD2AF227CB2230A2B4922354889243558359235CC36063640367A36B436EE7E24800009B20014CAB85EB01EDAB8680BCA197D121249307D21DA195EB0017EA09012629340127531B8127C15C220C0F175F101126FD9D0F1227E24810009B20014CAB85EB01EDAB8680BCA197D12124C887D21DA195EB0017EA09012629340127531B8127C15C221C0F175F101126FD9D0F1227E24820009B20014CAB85EB01EDAB8680BCA197D12124FE07D21DA195EB0017EA09012629340127531B8127C15C222C0F175F101126FD9D0F1227E24830009B20014CAB85EB01EDAB8680BCA197D121253387D21DA195EB0017EA09012629340127531B8127C15C223C0F175F101126FD9D0F1227E24840009B20014CAB85EB01EDAB8680BCA197D121256907D21DA195EB0017EA09012629340127531B8127C15C224C0F175F101126FD9D0F1227E24850009B20014CAB85EB01EDAB8680BCA197D121259E87D21DA195EB0017EA09012629340127531B8127C15C225C0F175F101126FD9D0F1227E24860009B20014CAB85EB01EDAB8680BCA197D12125D407D21DA195EB0017EA09012629340127531B8127C15C226C0F175F101126FD9D0F1227E24870009B20014CAB85EB01EDAB8680BCA197D121260987D21DA195EB0017EA09012629340127531B8127C15C227C0F175F101126FD9D0F122C2AFE53360147E2000135007CAB8123745DAB8A50ABE212F78EFD2AF227CB2230A2B4922375089243760377F379E37BD37DC37FB381A38397E248000CA197D1212481BDA19100402800CD201C0F175F101126FD9D0F1227E248100CA197D12124B73DA19100402800CD201C0F175F101126FD9D0F1227E248200CA197D12124ECBDA19100402800CD201C0F175F101126FD9D0F1227E248300CA197D12125223DA19100402800CD201C0F175F101126FD9D0F1227E248400CA197D1212557BDA19100402800CD201C0F175F101126FD9D0F1227E248500CA197D121258D3DA19100402800CD201C0F175F101126FD9D0F1227E248600CA197D12125C2BDA19100402800CD201C0F175F101126FD9D0F1227E248700CA197D12125F83DA19100402800CD201C0F175F101126FD9D0F122C2AFC0F175F101A932F21A7E0701E1BE0400007810E5F53382E74009853131127C1575F600D0F1D2AF2247
-:3C154000007E0400017E147FF87E2400FE7D310B1A501B0A507E14401B02406A7EF8006FD204C294D2957EF4402C02407C127D30F52F7AA1307A116E1275CA1240DC7EB33FF160031243D475F10012766FD2AF0230007E0400FF7E18405F7A1C00018918A9258703A9D587D29389087E0400FF7E1840787A1C00018918C29389087E0800207E4404007E40007EE4408E027C307E08016F7E44287C7E40007EE440A0027C307E08006F7E4401007E40537EE440B2027C30756D20756C307E040008756A58756B08756708756901758901758A01758C00D28C7E0400027A055889F475B77F75B87F75B30775B207D2A922D292E4D5E0FDC2927E2480007E112F7EA00819A200102E240100A5D9F27E200012417E0B20BE212F78F6227E0480004C0274BF19B0000C741019B00008748019B0000C7E54000219A0000419B00000740319B0000C7407A920300BA9353005BE20012802740F19B00004A933301874BF19B0000C7428A9203002742019B00004740319B0000C74A719B00008740C19B00010227E0480004C02E419B0000409B00010540819B0001074A719B00008227CB2230A2B492241A5892441B541D441F3421242314250426F428EC210C218C220C2087E0409E37A07016F7A07017F6D007A07018F7A07019F22C211C219C221C2097E040DE37A0701717A0701816D007A0701917A0701A122C212C21AC222C20A7E0411E37A0701737A0701836D007A0701937A0701A322C213C21BC223C20B7E0415E37A0701757A0701856D007A0701957A0701A522C214C21CC224C20C7E0419E37A0701777A0701876D007A0701977A0701A722C215C21DC225C20D7E041DE37A0701797A0701896D007A0701997A0701A922C216C21EC226C20E7E0421E37A07017B7A07018B6D007A07019B7A0701AB22C217C21FC227C20F7E0425E37A07017D7A07018D6D007A07019D7A0701AD227CB2230A2B492242B8892442C842E9430A432B434C436D438E43AF305007206804C2288016304007206004C228800C304807205804C2288002D22822305107206904C2298016304107206104C229800C304907205904C2298002D22922305207206A04C22A8016304207206204C22A800C304A07205A04C22A8002D22A22305307206B04C22B8016304307206304C22B800C304B07205B04C22B8002D22B22305407206C04C22C8016304407206404C22C800C304C07205C04C22C8002D22C22305507206D04C22D8016304507206504C22D800C304D07205D04C22D8002D22D22305607206E04C22E8016304607206604C22E800C304E07205E04C22E8002D22E22305707206F04C22F8016304707206704C22F800C304F07205F04C22F8002D22F22443843E5BEB002400122230A5B495543D09954D322A9C5871244437E0405E37A0701D77A0701D97E0401E37A0701DD7A0701DF7E0474AD7A056175F10175E11F75E40475F40475F10275E10375E40475F40443A21C1240EB7E200012419A0B20BE212F78F6D2A822A9D587124443D292C2A82275A30053A20375C10053C0037E00057A01F143F48043E480E5F2547F4408F5F2E5E2547F4408F5E275E110A5D8E122CA09123020100112D5671E6369017E006A2E0169A5E6F567801220021E756900856A67D2027400800D30020FC2027E006C2E0169A5E65390CF4290DA0932C0D0C0D1C0E0C0F0CA0BCA1BCA2BD201753189127C157E14800009B1000820E00302454F20785AA50A09B1000820E00302456720794BA50A09B1000820E00302457FA50A09B1000820E003024597207A30A50A09B1000820E0030245AFA50A09B1000820E0030245C7A50A09B1000820E0030245DFA50A09B1000820E0030245F730040CC204C0F175F101126FD9D0F1DA2BDA1BDA0BD0F0D0E0D0D1D0D032753180127C15543E0A5B7E4400FF6952632BCA06C6448954753181127C15543E0A5B7E4400FF6952636BCA06C6448954753182127C15543E0A5B7E4400FF695263ABCA06C6448954753183127C15543E0A5B7E4400FF695263EBCA06C6448954753184127C15543E0A5B7E4400FF6952642BCA06C6448954753185127C15543E0A5B7E4400FF6952646BCA06C6448954753186127C15543E0A5B7E4400FF695264ABCA06C6448954753187127C15543E0A5B7E4400FF695264EBCA06C644895410080122202803D208227531A0127C157E1480008006202803D2082209B10014CAB85EB01EDAB8680312493020E603D20822303049D2707E37018F7E2701AF9D3240317D022E05487A05487A37018F7E37016F7D432D42BE440DE238687A47016F753194127C157A5131127C1512652B1070C422C2702D2368786D33801A7E27018FBE240000686ABE2701AF28047E2701AF7E37018F9D327D022E05487A05487A37018F7E37016F7D432D42BE440DE238137A47016F753194127C157A5131127C1502652B753194127C157A5131127C159E440DE39D2412652B7E3409E37D242D437A47016F12652BBE2520780302467F22D2087E0409E37A07016F7A07017F753194127C15753100127C1522753192127C15D20409B10014CAB85482DAB878707E3701E17E2701BF2E2400022D32BE340400383C7D022E05467A05467A3701E17E3701DF7D432D42BE4405E238447A4701DF7E2400002E2701BF1B38200B357A5131127C15BE503878030266160265FB753199127C1509B1000454FA19B1000430380A09B1001054FE19B10010D21022807D7A5131127C159E4405E39D247E6400002E6701BF9E24000240171B38600B351265FB7E3401E37D242D437A4701DF0265FB7A39C07E3401E37A39D00B341B4480E59D327CB6540F23232344007A69B07A79700B35753193127C157A7131127C15BD0468297A0701DF7E4701E12D437A4701E12E35467A35462209B1001420E013227E0401E3802A7E0401E3802C7E0401E380D1D2047E0701E17E2403FE9D2028407E0701DF7E4405E37D600B04BD0468D07D700B04BD0468CE7D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E70247E3753199127C1509B1000454FA19B1000430380A09B1001054FE19B10010D21022DAB830E0D8BD326807CAB81247E3DAB802493009B100187EA088753190127C15F531127C15A5FC5EB0F0A5FD09B100184C4B5EB0F0BCB578F15E400F4C547CB55E500B682AA5FD5E50106804D2688002C268A5FD5E50206804D2608002C260A5FD5E50806804D2588002C2581242C8026293753191127C1509B100147AB131127C1520E008D2047EA080026293D20430E1067EA080126293CAB85EB01CDAB868127EA0C0096100001262B609B1001420E0DB22024835753195127C1522753196127C152210090122202903D209227531A1127C157E1481008006202903D2092209B10014CAB85EB01EDAB86803124C8820E603D20922303149D2717E3701917E2701B19D3240317D022E054A7A054A7A3701917E3701717D432D42BE4411E238687A470171753194127C157A5131127C1512652B1071C422C2712D2368786D33801A7E270191BE240000686ABE2701B128047E2701B17E3701919D327D022E054A7A054A7A3701917E3701717D432D42BE4411E238137A470171753194127C157A5131127C1502652B753194127C157A5131127C159E4411E39D2412652B7E340DE37D242D437A47017112652BBE252078030249D722D2097E040DE37A0701717A070181753194127C15753100127C1522753192127C15D20409B10014CAB85482DAB878707E3701E17E2701C12E2400022D32BE340400383C7D022E05467A05467A3701E17E3701DF7D432D42BE4405E238447A4701DF7E2401002E2701C11B38200B357A5131127C15BE503878030266160265FB753199127C1509B1000454FA19B1000430390A09B1001054FE19B10010D21122807D7A5131127C159E4405E39D247E6401002E6701C19E24000240171B38600B351265FB7E3401E37D242D437A4701DF0265FB7A39C07E3401E37A39D00B341B4480E59D327CB6540F23232344017A69B07A79700B35753193127C157A7131127C15BD0468297A0701DF7E4701E12D437A4701E12E35467A35462209B1001420E013227E0401E3802A7E0401E3802C7E0401E380D1D2047E0701E17E2403FE9D2028407E0701DF7E4405E37D600B04BD0468D07D700B04BD0468CE7D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E7024B3B753199127C1509B1000454FA19B1000430390A09B1001054FE19B10010D21122DAB830E0D8BD326807CAB8124B3BDAB8024C8809B100187EA088753190127C15F531127C15A5FC5EB0F0A5FD09B100184C4B5EB0F0BCB578F15E400F4C547CB55E500B682AA5FD5E50106804D2698002C269A5FD5E50206804D2618002C261A5FD5E50806804D2598002C2591242E9026293753191127C1509B100147AB131127C1520E008D2047EA080026293D20430E1067EA080126293CAB85EB01CDAB868127EA0C0096100001262B609B1001420E0DB22024B8D753195127C1522753196127C1522100A0122202A03D20A227531A2127C157E1482008006202A03D20A2209B10014CAB85EB01EDAB86803124FE020E603D20A22303249D2727E3701937E2701B39D3240317D022E054C7A054C7A3701937E3701737D432D42BE4415E238687A470173753194127C157A5131127C1512652B1072C422C2722D2368786D33801A7E270193BE240000686ABE2701B328047E2701B37E3701939D327D022E054C7A054C7A3701937E3701737D432D42BE4415E238137A470173753194127C157A5131127C1502652B753194127C157A5131127C159E4415E39D2412652B7E3411E37D242D437A47017312652BBE25207803024D2F22D20A7E0411E37A0701737A070183753194127C15753100127C1522753192127C15D20409B10014CAB85482DAB878707E3701E17E2701C32E2400022D32BE340400383C7D022E05467A05467A3701E17E3701DF7D432D42BE4405E238447A4701DF7E2402002E2701C31B38200B357A5131127C15BE503878030266160265FB753199127C1509B1000454FA19B10004303A0A09B1001054FE19B10010D21222807D7A5131127C159E4405E39D247E6402002E6701C39E24000240171B38600B351265FB7E3401E37D242D437A4701DF0265FB7A39C07E3401E37A39D00B341B4480E59D327CB6540F23232344027A69B07A79700B35753193127C157A7131127C15BD0468297A0701DF7E4701E12D437A4701E12E35467A35462209B1001420E013227E0401E3802A7E0401E3802C7E0401E380D1D2047E0701E17E2403FE9D2028407E0701DF7E4405E37D600B04BD0468D07D700B04BD0468CE7D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E7024E93753199127C1509B1000454FA19B10004303A0A09B1001054FE19B10010D21222DAB830E0D8BD326807CAB8124E93DAB8024FE009B100187EA088753190127C15F531127C15A5FC5EB0F0A5FD09B100184C4B5EB0F0BCB578F15E400F4C547CB55E500B682AA5FD5E50106804D26A8002C26AA5FD5E50206804D2628002C262A5FD5E50806804D25A8002C25A12430A026293753191127C1509B100147AB131127C1520E008D2047EA080026293D20430E1067EA080126293CAB85EB01CDAB868127EA0C0096100001262B609B1001420E0DB22024EE5753195127C1522753196127C1522100B0122202B03D20B227531A3127C157E1483008006202B03D20B2209B10014CAB85EB01EDAB8680312533820E603D20B22303349D2737E3701957E2701B59D3240317D022E054E7A054E7A3701957E3701757D432D42BE4419E238687A470175753194127C157A5131127C1512652B1073C422C2732D2368786D33801A7E270195BE240000686ABE2701B528047E2701B57E3701959D327D022E054E7A054E7A3701957E3701757D432D42BE4419E238137A470175753194127C157A5131127C1502652B753194127C157A5131127C159E4419E39D2412652B7E3415E37D242D437A47017512652BBE2520780302508722D20B7E0415E37A0701757A070185753194127C15753100127C1522753192127C15D20409B10014CAB85482DAB878707E3701E17E2701C52E2400022D32BE340400383C7D022E05467A05467A3701E17E3701DF7D432D42BE4405E238447A4701DF7E2403002E2701C51B38200B357A5131127C15BE503878030266160265FB753199127C1509B1000454FA19B10004303B0A09B1001054FE19B10010D21322807D7A5131127C159E4405E39D247E6403002E6701C59E24000240171B38600B351265FB7E3401E37D242D437A4701DF0265FB7A39C07E3401E37A39D00B341B4480E59D327CB6540F23232344037A69B07A79700B35753193127C157A7131127C15BD0468297A0701DF7E4701E12D437A4701E12E35467A35462209B1001420E013227E0401E3802A7E0401E3802C7E0401E380D1D2047E0701E17E2403FE9D2028407E0701DF7E4405E37D600B04BD0468D07D700B04BD0468CE7D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E70251EB753199127C1509B1000454FA19B10004303B0A09B1001054FE19B10010D21322DAB830E0D8BD326807CAB81251EBDAB802533809B100187EA088753190127C15F531127C15A5FC5EB0F0A5FD09B100184C4B5EB0F0BCB578F15E400F4C547CB55E500B682AA5FD5E50106804D26B8002C26BA5FD5E50206804D2638002C263A5FD5E50806804D25B8002C25B12432B026293753191127C1509B100147AB131127C1520E008D2047EA080026293D20430E1067EA080126293CAB85EB01CDAB868127EA0C0096100001262B609B1001420E0DB2202523D753195127C1522753196127C1522100C0122202C03D20C227531A4127C157E1484008006202C03D20C2209B10014CAB85EB01EDAB8680312569020E603D20C22303449D2747E3701977E2701B79D3240317D022E05507A05507A3701977E3701777D432D42BE441DE238687A470177753194127C157A5131127C1512652B1074C422C2742D2368786D33801A7E270197BE240000686ABE2701B728047E2701B77E3701979D327D022E05507A05507A3701977E3701777D432D42BE441DE238137A470177753194127C157A5131127C1502652B753194127C157A5131127C159E441DE39D2412652B7E3419E37D242D437A47017712652BBE252078030253DF22D20C7E0419E37A0701777A070187753194127C15753100127C1522753192127C15D20409B10014CAB85482DAB878707E3701E17E2701C72E2400022D32BE340400383C7D022E05467A05467A3701E17E3701DF7D432D42BE4405E238447A4701DF7E2404002E2701C71B38200B357A5131127C15BE503878030266160265FB753199127C1509B1000454FA19B10004303C0A09B1001054FE19B10010D21422807D7A5131127C159E4405E39D247E6404002E6701C79E24000240171B38600B351265FB7E3401E37D242D437A4701DF0265FB7A39C07E3401E37A39D00B341B4480E59D327CB6540F23232344047A69B07A79700B35753193127C157A7131127C15BD0468297A0701DF7E4701E12D437A4701E12E35467A35462209B1001420E013227E0401E3802A7E0401E3802C7E0401E380D1D2047E0701E17E2403FE9D2028407E0701DF7E4405E37D600B04BD0468D07D700B04BD0468CE7D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E7025543753199127C1509B1000454FA19B10004303C0A09B1001054FE19B10010D21422DAB830E0D8BD326807CAB8125543DAB802569009B100187EA088753190127C15F531127C15A5FC5EB0F0A5FD09B100184C4B5EB0F0BCB578F15E400F4C547CB55E500B682AA5FD5E50106804D26C8002C26CA5FD5E50206804D2648002C264A5FD5E50806804D25C8002C25C12434C026293753191127C1509B100147AB131127C1520E008D2047EA080026293D20430E1067EA080126293CAB85EB01CDAB868127EA0C0096100001262B609B1001420E0DB22025595753195127C1522753196127C1522100D0122202D03D20D227531A5127C157E1485008006202D03D20D2209B10014CAB85EB01EDAB868031259E820E603D20D22303549D2757E3701997E2701B99D3240317D022E05527A05527A3701997E3701797D432D42BE4421E238687A470179753194127C157A5131127C1512652B1075C422C2752D2368786D33801A7E270199BE240000686ABE2701B928047E2701B97E3701999D327D022E05527A05527A3701997E3701797D432D42BE4421E238137A470179753194127C157A5131127C1502652B753194127C157A5131127C159E4421E39D2412652B7E341DE37D242D437A47017912652BBE2520780302573722D20D7E041DE37A0701797A070189753194127C15753100127C1522753192127C15D20409B10014CAB85482DAB878707E3701E17E2701C92E2400022D32BE340400383C7D022E05467A05467A3701E17E3701DF7D432D42BE4405E238447A4701DF7E2405002E2701C91B38200B357A5131127C15BE503878030266160265FB753199127C1509B1000454FA19B10004303D0A09B1001054FE19B10010D21522807D7A5131127C159E4405E39D247E6405002E6701C99E24000240171B38600B351265FB7E3401E37D242D437A4701DF0265FB7A39C07E3401E37A39D00B341B4480E59D327CB6540F23232344057A69B07A79700B35753193127C157A7131127C15BD0468297A0701DF7E4701E12D437A4701E12E35467A35462209B1001420E013227E0401E3802A7E0401E3802C7E0401E380D1D2047E0701E17E2403FE9D2028407E0701DF7E4405E37D600B04BD0468D07D700B04BD0468CE7D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E702589B753199127C1509B1000454FA19B10004303D0A09B1001054FE19B10010D21522DAB830E0D8BD326807CAB812589BDAB80259E809B100187EA088753190127C15F531127C15A5FC5EB0F0A5FD09B100184C4B5EB0F0BCB578F15E400F4C547CB55E500B682AA5FD5E50106804D26D8002C26DA5FD5E50206804D2658002C265A5FD5E50806804D25D8002C25D12436D026293753191127C1509B100147AB131127C1520E008D2047EA080026293D20430E1067EA080126293CAB85EB01CDAB868127EA0C0096100001262B609B1001420E0DB220258ED753195127C1522753196127C1522100E0122202E03D20E227531A6127C157E1486008006202E03D20E2209B10014CAB85EB01EDAB86803125D4020E603D20E22303649D2767E37019B7E2701BB9D3240317D022E05547A05547A37019B7E37017B7D432D42BE4425E238687A47017B753194127C157A5131127C1512652B1076C422C2762D2368786D33801A7E27019BBE240000686ABE2701BB28047E2701BB7E37019B9D327D022E05547A05547A37019B7E37017B7D432D42BE4425E238137A47017B753194127C157A5131127C1502652B753194127C157A5131127C159E4425E39D2412652B7E3421E37D242D437A47017B12652BBE25207803025A8F22D20E7E0421E37A07017B7A07018B753194127C15753100127C1522753192127C15D20409B10014CAB85482DAB878707E3701E17E2701CB2E2400022D32BE340400383C7D022E05467A05467A3701E17E3701DF7D432D42BE4405E238447A4701DF7E2406002E2701CB1B38200B357A5131127C15BE503878030266160265FB753199127C1509B1000454FA19B10004303E0A09B1001054FE19B10010D21622807D7A5131127C159E4405E39D247E6406002E6701CB9E24000240171B38600B351265FB7E3401E37D242D437A4701DF0265FB7A39C07E3401E37A39D00B341B4480E59D327CB6540F23232344067A69B07A79700B35753193127C157A7131127C15BD0468297A0701DF7E4701E12D437A4701E12E35467A35462209B1001420E013227E0401E3802A7E0401E3802C7E0401E380D1D2047E0701E17E2403FE9D2028407E0701DF7E4405E37D600B04BD0468D07D700B04BD0468CE7D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E7025BF3753199127C1509B1000454FA19B10004303E0A09B1001054FE19B10010D21622DAB830E0D8BD326807CAB8125BF3DAB8025D4009B100187EA088753190127C15F531127C15A5FC5EB0F0A5FD09B100184C4B5EB0F0BCB578F15E400F4C547CB55E500B682AA5FD5E50106804D26E8002C26EA5FD5E50206804D2668002C266A5FD5E50806804D25E8002C25E12438E026293753191127C1509B100147AB131127C1520E008D2047EA080026293D20430E1067EA080126293CAB85EB01CDAB868127EA0C0096100001262B609B1001420E0DB22025C45753195127C1522753196127C1522100F0122202F03D20F227531A7127C157E1487008006202F03D20F2209B10014CAB85EB01EDAB8680312609820E603D20F22303749D2777E37019D7E2701BD9D3240317D022E05567A05567A37019D7E37017D7D432D42BE4429E238687A47017D753194127C157A5131127C1512652B1077C422C2772D2368786D33801A7E27019DBE240000686ABE2701BD28047E2701BD7E37019D9D327D022E05567A05567A37019D7E37017D7D432D42BE4429E238137A47017D753194127C157A5131127C1502652B753194127C157A5131127C159E4429E39D2412652B7E3425E37D242D437A47017D12652BBE25207803025DE722D20F7E0425E37A07017D7A07018D753194127C15753100127C1522753192127C15D20409B10014CAB85482DAB878707E3701E17E2701CD2E2400022D32BE340400383C7D022E05467A05467A3701E17E3701DF7D432D42BE4405E238447A4701DF7E2407002E2701CD1B38200B357A5131127C15BE503878030266160265FB753199127C1509B1000454FA19B10004303F0A09B1001054FE19B10010D21722807D7A5131127C159E4405E39D247E6407002E6701CD9E24000240171B38600B351265FB7E3401E37D242D437A4701DF0265FB7A39C07E3401E37A39D00B341B4480E59D327CB6540F23232344077A69B07A79700B35753193127C157A7131127C15BD0468297A0701DF7E4701E12D437A4701E12E35467A35462209B1001420E013227E0401E3802A7E0401E3802C7E0401E380D1D2047E0701E17E2403FE9D2028407E0701DF7E4405E37D600B04BD0468D07D700B04BD0468CE7D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E7025F4B753199127C1509B1000454FA19B10004303F0A09B1001054FE19B10010D21722DAB830E0D8BD326807CAB8125F4BDAB802609809B100187EA088753190127C15F531127C15A5FC5EB0F0A5FD09B100184C4B5EB0F0BCB578F15E400F4C547CB55E500B682AA5FD5E50106804D26F8002C26FA5FD5E50206804D2678002C267A5FD5E50806804D25F8002C25F1243AF026293753191127C1509B100147AB131127C1520E008D2047EA080026293D20430E1067EA080126293CAB85EB01CDAB868127EA0C0096100001262B609B1001420E0DB22025F9D753195127C1522753196127C15227C027E1480004C2009B10018A5FD5E50106804D2688002C268A5FD5E50206804D2608002C260A5FD5E50806804D2588002C25802627F7C027E1480004C2009B10018A5FD5E50106804D2698002C269A5FD5E50206804D2618002C261A5FD5E50806804D2598002C25902627F7C027E1480004C2009B10018A5FD5E50106804D26A8002C26AA5FD5E50206804D2628002C262A5FD5E50806804D25A8002C25A02627F7C027E1480004C2009B10018A5FD5E50106804D26B8002C26BA5FD5E50206804D2638002C263A5FD5E50806804D25B8002C25B02627F7C027E1480004C2009B10018A5FD5E50106804D26C8002C26CA5FD5E50206804D2648002C264A5FD5E50806804D25C8002C25C02627F7C027E1480004C2009B10018A5FD5E50106804D26D8002C26DA5FD5E50206804D2658002C265A5FD5E50806804D25D8002C25D02627F7C027E1480004C2009B10018A5FD5E50106804D26E8002C26EA5FD5E50206804D2668002C266A5FD5E50806804D25E8002C25E02627F7C027E1480004C2009B10018A5FD5E50106804D26F8002C26FA5FD5E50206804D2678002C267A5FD5E50806804D25F8002C25F02627F54F0C4A5FFC4A54F753190127C15F531127C1522CA195E20074CA27E7429E3CA797A79A00B747A79B00B74DA797E30027E6400020262DECA195E20074CA27E7429E3CA797A79A00B747A79B00B747A79600B74DA797E30037E6400030262DED2047E2701E12D26BE240400382E7E0701DF7E4405E37E79A07A09A00B040B74BD046823A5DBEF7A2701E17E25462D267A25467A0701DFDA19C2D72275319A127C15DA19D2D7227E0401E380D748B64625471C491544C644C6481B44C6495944C644C644C644C644C644C644C6496044C644C644C644C644C644C644C644C644C644C644C644C644C644C644C64C0E497D4A744C6D44C644C64B7344C64CB144C644C644C644C644C644C644C64CB844C644C644C644C644C644C644C644C644C644C644C644C644C644C644C64F664CD54DCC4FC544C644C64ECB44C6500944C644C644C644C644C644C644C6501044C644C644C644C644C644C644C644C644C644C644C644C644C644C644C652BE502D5124531D44C644C6522344C6536144C644C644C644C644C644C644C6536844C644C644C644C644C644C644C644C644C644C644C644C644C644C644C656165385547C567544C644C6557B44C656B944C644C644C644C644C644C644C656C044C644C644C644C644C644C644C644C644C644C644C644C644C644C644C6596E56DD57D459CD44C644C658D344C65A1144C644C644C644C644C644C644C65A1844C644C644C644C644C644C644C644C644C644C644C644C644C644C644C65CC65A355B2C5D2544C644C65C2B44C65D6944C644C644C644C644C644C644C65D7044C644C644C644C644C644C644C644C644C644C644C644C644C644C644C6601E5D8D5E84607D44C644C65F8344C660C144C644C644C644C644C644C644C660C844C644C644C644C644C644C644C644C644C644C644C644C644C644C644C6CA291E50400D7E540B109CB5A42E54654889547E39007A19000B3480E90B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B350B38007A19007A19100B35DA29221E50400D7E540B1C9CB5A42E54661689547E19007A39000B3480E97E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B357E19007E19101B38000B352267966963697B6A496AE46B8E6BA96C3B6BC46C05699669AA7CB3BEB00B2814753109127C15756D10C0F175F10143E1C0D0F122C0A8C2AF236CAA2E54674B0B5850895401020408102040807531B0127C150A3209B3678E423219430036D0A8227CB2230A3B493367CB0A220932003609B2678EA5BB0005F4523380024233893467DB680968376865689368C168EF691D1241B5D228D208C240C248C238C2306D007A0301CF7E0400207A0701AF7E0400387A0701BF1241161260CF02694B1241D4D229D209C241C249C239C2316D007A0301D07E0400207A0701B17E0400387A0701C112411612610502694B1241F3D22AD20AC242C24AC23AC2326D007A0301D17E0400207A0701B37E0400387A0701C312411612613B02694B124212D22BD20BC243C24BC23BC2336D007A0301D27E0400207A0701B57E0400387A0701C512411612617102694B124231D22CD20CC244C24CC23CC2346D007A0301D37E0400207A0701B77E0400387A0701C71241161261A702694B124250D22DD20DC245C24DC23DC2356D007A0301D47E0400207A0701B97E0400387A0701C91241161261DD02694B12426FD22ED20EC246C24EC23EC2366D007A0301D57E0400207A0701BB7E0400387A0701CB12411612621302694B12428ED22FD20FC247C24FC23FC2376D007A0301D67E0400207A0701BD7E0400387A0701CD12411612624902694B7EA0D07E600F1262B6400CC0F175F101126FD9D0F1C2D7227531B1127C150A52236D005905004812417E12419AD0A8227531B2127C150A2209B2678E42237EB09C19B201CF123185D0A8227531B7127C150A2209B2678E422412353DD0A8227531B9127C150A3209B3678E42341943003E1269C2D0A8227CB2230A0B7CB420E0046D3380044930018F7EA0D8A5EFCA0BCA291262B6DA29DA0B40627531BA127C157CB430E01E6D335930018F7E3409E30A827E940400AD892D395930016F5930017F7CB430E1107E0480004C0209B00008440419B000080A0209B0678E4221F452347CB2230A0BCA19490030D59904DA19C0F175F101126FD9D0F1C2D7227E0480004C020930000C74BF19B0000C09B000081930000C7C745E700168124440CAB809B00010440219B00010DAB8800254BF7C745E700868044408800254F70930000CCAB874BF19B0000CDAB819B000081930000C0A6209B6678E3E200A627C745E700268204227CAB8746119B000087E440010594601BF09B00010440119B00010DAB88011F4522774A119B000087E440038594601BFD0A8227C747E0480004C020A6209B6678EA5FDF4A5FECA283E200A62A5EE52267E440020594601AFDA280930000C74BF19B0000C09B000087C745E7001680C4480CAB8A5ED422ADAB8800A547FCAB8A5EE522ADAB87C745E700868044402800254FD19B000081930000C7C745E70026810A5ED422842267E440008594601AF8004A5EE52287C745E70046810A5ED422942267E440008594601AF800BA5EE52297C745E700278001242ADD0A8227E0480004C020930000C74BF19B0000C194000101930000CD0A8227E0480004C020930000C74BF19B0000C194000181930000CD0A8227531B5127C157E0480004C0209B0000C444019B0000CE56EB4072309B000104EB00219B000100930000C74BF19B0000C09B0000454F719B000041930000CD0A8227531B6127C157E0480004C02E56EB407180930000C74BF19B0000C09B00004440819B000041930000C09B0000C54BF19B0000CD0A8227531B4127C157A2131127C157A4131127C150A3209B3678E4235126C5BD0A8227EB0017EA0C87C641262B640130A3209B3678EF45235C0F175F101126FD9D0F1226C8C6CD36D1A6D616DA86DEF6E366E7D753155127C15753100127C157A6131127C157A7131127C157E17017F7E27018F2D237E09B00B047A19B00B14BE140DE2380F1B3478EC7A17017F7A27018F02460F7E1409E380EB753155127C15753101127C157A6131127C157A7131127C157E1701817E2701912D237E09B00B047A19B00B14BE1411E2380F1B3478EC7A1701817A2701910249677E140DE380EB753155127C15753102127C157A6131127C157A7131127C157E1701837E2701932D237E09B00B047A19B00B14BE1415E2380F1B3478EC7A1701837A270193024CBF7E1411E380EB753155127C15753103127C157A6131127C157A7131127C157E1701857E2701952D237E09B00B047A19B00B14BE1419E2380F1B3478EC7A1701857A2701950250177E1415E380EB753155127C15753104127C157A6131127C157A7131127C157E1701877E2701972D237E09B00B047A19B00B14BE141DE2380F1B3478EC7A1701877A27019702536F7E1419E380EB753155127C15753105127C157A6131127C157A7131127C157E1701897E2701992D237E09B00B047A19B00B14BE1421E2380F1B3478EC7A1701897A2701990256C77E141DE380EB753155127C15753106127C157A6131127C157A7131127C157E17018B7E27019B2D237E09B00B047A19B00B14BE1425E2380F1B3478EC7A17018B7A27019B025A1F7E1421E380EB753155127C15753107127C157A6131127C157A7131127C157E17018D7E27019D2D237E09B00B047A19B00B14BE1429E2380F1B3478EC7A17018D7A27019D025D777E1425E380EBCAB8C0F1753102127C15E5C0540368051275CD80F530C20875F101126FD9801430C30875F101126EFD800930C40675F1021270E9D0F1DAB832753110127C15CA0BCA39CA59C2C3A921E25CE5E554C0684FE5E66CAA7E3701DB2D35BE340400384A7A3701DB7E3701D97D432D45BE4409E238407A4701D9753111127C157AB131127C151271B8A921E51FA9D4E4A924E4FCC2C3A921E23BE5E554C078B412745ADA59DA39DA0B2280298058753116127C1580ED753112127C157AB131127C159E4409E39D541271B87E3405E37D542D4380A1E5E554037812753113127C157E0F29FF0B0C7A0F29FF80A7753114127C157E0F2A030B0C7A0F2A03A9D7E4A927E4FC809D753115127C157E0F2A070B0C7A0F2A0780E5753118127C15CA09CA39CA2BC2C2A921F252E5F53382E740447E3701E17E5400409D3540437A3701E17E3701DD7D432D45BE4405E238527A4701DD7D45127316A920F522753119127C157A9131127C157A81F77A91F6E5F53382E750BCDA2BDA39DA0922804180642D536D3370B77E0401E37A0701DF7A0701DDA932F2DF853031127C1575F60080D4CA599E4405E39D541273167E3401E37D542D437A4701DD127316DA498099E5F55403781F7E0F29EF0B0C7A0F29EF809D7E0F29F70B0C7A0F29F7A9D7F4A927F4FC808A7E0F29F30B0C7A0F29F380EBE5F55403781F7E2F2A0F0B2C7A2F2A0F80347E2F2A170B2C7A2F2A17A9D7F4A927F4FC80217E2F2A130B2C7A2F2A1380EBDA2BDA1BDA0B22753128127C15CA0BCA1BCA2BC2C4A921F2B6E5F53372E740E07E0D467E1D4A7E2D4E7E3D527E85567D904D914D924D934D944D954D964D974D9868727A11F37A01F37A31F37A21F37A51F37A41F37A71F37A61F37A91F37A81F3307B1A7AB1F37AA1F37AD1F37AC1F37AF1F37AE1F37D787AF1F37AE1F3A930F5030270D6753129127C15207B0B75310A127C1575F60A8009753112127C1575F6126D007D107A0D467A0D4A7A0D4E7A0D527A0556DA2BDA1BDA0B221EB0400C7EA00AA47E0472FB9D0589047EA1E37A39A00B3480EAB440E37EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B357EA1E3E5E31B38500B35221EB0400C7EA00AA47E0474599D0589047E39A07AA1F30B3480EAB440E30B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B350B38507AA1F3F5F30B3522C2AF7E3701DB4D33683B7E0701D77E5409E39D50BD3540027D35CA397E65619964DA397E0701DB9D037A0701DB2E3701D77A3701D7BE3409E228C77E3405E37A3701D780BDD2AF22753153127C157E15638011753151127C150B08100B059E340002284D7CB220E7275407230A2B49226C7C7CB254780303037C2B9D13401A68127A15637A25657E6475377A656189240275457E6474AD80F22D139D31CA397D312D10CA19CA299924DA29DA09DA3980A27A15637E6475234D3378097CB220E72A7E6474A27A656122753152127C157E21637E09300B041B34788980D4753154127C157E15637E256580905E200754787E4475C130E6164D3368261B347E09400B047E44676320E3047E4475C9CA09CA399944DA39DA097E6474AD4D3368A689647A1563F5657E64758680997E1563E56580C4C0D0C0D1C0E0CA19A920DF12A921DF1B753101127C1553DFF71240DC800D7531FE127C157E140053024051DA19D0E0D0D1D0D03203A5CB19B180002222027642CA0BCA1BCA2BCA3BCA4BCA5BCA6BCA7BCAEBC0F17EB32A33B400028019B4011630C00875F10012762C801F30C11C75F1001276BD801430C10875F1001276BD800930C00675F10012762CD0F1DAEBDA7BDA6BDA5BDA4BDA3BDA2BDA1BDA0B22C2C07EB32A33B4020712764E02764222B401FC0276887E00007A032A337A032A34227EB32A2B54606005B4401580137EB32A2CB4050C753171127C157EB32A2EF58F2275F60022BE572A3128047E572A317A0F2A367A572A3A0276887EEF2A367EF72A3A7E072A3A4D0068217E00007EEBB0F5F3A3A5081BF46804A5B808F07AEF2A367AF72A3A753106127C157A01F622C2C1753103127C15A936E216E5F554C06807A9D7F4A927F4FC53E13F43F2880277297EB32A34B40204A9D4E422B401397E21E67C327E132A352C217A232A357E00002E042A3CE5E37A09B00B04A5DBF6A9D4E4753170127C157EB32A357EA32A32BCAB78031277C022027B29E5E6B40865A9C4E27E01E37E11E37E31E37E21E37E51E37E41E37E71E37E61E37A0F2A2B7A1F2A2F753104127C157A0131127C157A1131127C157A2131127C157A3131127C157A4131127C157A5131127C157A6131127C157A7131127C15A9D4E4A9D7F4A9C6E2127794226D007E1401027A072A3A7A032A357EB32A2B20E70F7A232A347A332A33BE072A316809227A332A347A232A337EB32A2B54E3232330E002D2E530E702D2E430E50630E403027B29543EF5F003541FC325F09077EC7584FF730279400278340279DD0279F80278D902789A027A11027A11027A14027A14027A14027A14027A14027A14027A14027A14027A1A027ACE027A17027A17027A17027A17027A17027A177EB32A2CB4062A7EB32A2D60567C0B7E132A2E7E172A2F753172127C157A0131127C157A1131127C15127B334035027673B40810753174127C157EB33FF1F5F375F60122B4001C753175127C157EB33FF230E00575F302800375F30075F30075F60222027B297EB32A2CB40035753176127C157EB32A30540FF5F17EB32A3020E709E5E130E70D7401800BE5E130E60474018002740053F180F5F375F30075F60222027B29C0F17EB32A30540F42F17EB32A2EB400457EB32A2CB40124753177127C157EB32A30540F780553E13F80377EB32A3020E70553E17F802B53E1BF8026B40317753178127C157EB32A3020E70543E180801143E140800C43E1C0D0F1753107127C1522D0F102766F7EB32A2CB40923753179127C157EB32A2EBEB33FF16811CAB8C0F11243D4D0F1DAB850767AB33FF1806DB4050875317A127C158062B4031975317B127C157EB32A2EB401557EB33FF244017AB33FF28046B4011975317C127C157EB32A2EB401397EB33FF254FE7AB33FF2802AB4072A7EB32A2D60247C0B7E132A2E7E172A2F753173127C157A0131127C157A1131127C15127B5F400302766F027B297EB32A2CB40BF675317D127C157EB32A2E7EA32A304CAB78E480DF7EB32A2CB40ADB75317E127C157EB32A2E70CFF5F375F60122027B29027B29027B297EB32A2CB404207531C3127C157E0400017E172A2D7E182A3C7A1C00007E472A31127C21027AC8B4063A7531C1127C157E5800007A5C00FE7DCA7ED72A2D7E782A3C7A7C00007E772A317531C1127C15C0A8C087C2AFA9D587127C5AD087D0A8404F804AB4001CC2AFA9D58712766FE48DEF8DEF8DEFD5E0F7C0D1CA02FFCA06000032B409127E572A2D4D556805A9D2B18003A9C2B18016B40716C2AF7E072A2F7E172A2DC0D1CA18CA38CA283202766F027B297EB32A2CB403157531C2127C157E0400017E172A2D7E572A31027673B405397531C0127C15C0A8C087C2AFA9D5877E082A3C7A0C00007E2400FE7E372A2D7E472A31127C21D087D0A87E082A3C7A0C00007E572A31027673027B29753107127C1543E1C022C0A8C087C2AFA9D587127B9E40197E082A3C7A0C0000CA0BCA49127C21DA59DA0BD087D0A8C322D087D0A822C0A8C087C2AFA9D587127B9E402B7E5800007A5C00FE7F617E782A3C7A7C00007E772A31BD7478117531C1127C15127C5A4006D087D0A8C322D087D0A8D3227E2400FE7E347FCA0B1A50C5F07D627D757D877E347FC27E1BB07E347F03B401047E347FCC7E1BB0BC0B50493E003E000A502D750B3A3069530002BD3850022D38BC1B50303E103E100A512D35694100020B1A30BD3850022D38BE44FFFF78057E1B900A494D44680CBE4400FF28047E4400FFC322D322FA
-:00047FC60001100400A2
-:014A7C1500CA087E01317A033FF0DA08227E1BC07A0BC00B140B341B4478F2227F6F7FF01BFC7C547D328008CA1BCA1BCA1BCA1B9E44001050F22E4400106806CA481B4478FA7FF689E4CA6B5ED4003F68207E8400409D8DDA6BBD873816CA797D78127C84DA7940089D7868028005C2D722DA6B43903074AA39B55555745539B52AAA74A039B555557E0400409D7050062D707D076D777C317E7B007A6B000B7C0B6CA5D9F37F161B1C7E5427107E1B10BC1068061B5478F5802C6D007C207F169F107F279F207E2B007E1B10BC0178160B2C0B1CA5DBEF7CB620E0036390304D777893C2D722D2D7220004000442080604020400020104010282080000000000000202020202040208100210040208000101080001000200020208020420047E187FBD7A1C00FE0B1A005E101FBE101A381A0A51237E187CFA7A1C00FF2D350B1A506008A5B802034EA0082280FE73
-:0000000001FF
-//**************************************************************
-//* Edgeport/4 Binary Image
-//* Generated by HEX2C v1.06
-//* Copyright (C) 1998 Inside Out Networks, All rights reserved.
-//* This program is free software; you can redistribute it and/or modify
-//* it under the terms of the GNU General Public License as published by
-//* the Free Software Foundation; either version 2 of the License, or
-//* (at your option) any later version.
-//**************************************************************
diff --git a/firmware/edgeport/down2.H16 b/firmware/edgeport/down2.H16
deleted file mode 100644
index 2f4b4ff3ab7b..000000000000
--- a/firmware/edgeport/down2.H16
+++ /dev/null
@@ -1,29 +0,0 @@
-:000400000002000003F7
-:000200000400FFFB
-:00060000000200800245141D
-:0003000B000244A507
-:00030013000263ABDA
-:0003001B0002001BC5
-:0003002300020023B5
-:0003002B0002002BA5
-:000300330002003395
-:0003003B0002003B85
-:000300430002004375
-:0003004B0002004B65
-:000300530002675FE2
-:0003007B0002007B05
-:00070080007E14000002405253
-:0B663000001230641230FF12312F1230B080F2E52360197E14000009B101B9B4000280051419B101B9A50ABE212E78EB22C2AF7EB33FF1B40103126567D2AF22C2AF7EB33FF1B4011D74407AB391007EB3911A6CAA600FCA0BCA39CA59126424DA59DA39DA0BD2AF22C2AFE52260437E0701CBBE04038038397E0480007E200013502109A000044EA00519A000040A32095335335E5127680B09A000104EA00119A000102E040100A50ABE212E78D1752200D2AF22C2AFE52660367E20007E3001E526A55B68217CB2230A2B49320179BE34000068127EB121A54B7AB121CA19492230EF9924DA193E30A50ABE212E78D0D2AF22464F497C4CA94FD653035630595D5C8AC2AFE52460147E2000135007CAB812311CDAB8A50ABE212E78EFD2AF22CA2812354CDA2840090A2209B23533F4522422C2AFE52360147E2000135007CAB812314CDAB8A50ABE212E78EFD2AF227CB2230A2B492231578924316731D0323932A2330B337433DD34467E270179BE24000078247E24800009B20014CAB85EB01EDAB8680BCA197D121249457D21DA1930E6187E6000801EBE270189680D7A2701897E609C7A6301B980277E6301B9A5BE001F7E60017EB0007EA0C81261364011752FB3127335C2186C007A0301B9126486227E27017BBE24000078247E24810009B20014CAB85EB01EDAB8680BCA197D12124C727D21DA1930E6187E6000801EBE27018B680D7A27018B7E609C7A6301BA80277E6301BAA5BE001F7E60017EB0007EA0C81261364011752FB3127335C2196C007A0301BA126486227E27017DBE24000078247E24820009B20014CAB85EB01EDAB8680BCA197D12124F9F7D21DA1930E6187E6000801EBE27018D680D7A27018D7E609C7A6301BB80277E6301BBA5BE001F7E60017EB0007EA0C81261364011752FB3127335C21A6C007A0301BB126486227E27017FBE24000078247E24830009B20014CAB85EB01EDAB8680BCA197D121252CC7D21DA1930E6187E6000801EBE27018F680D7A27018F7E609C7A6301BC80277E6301BCA5BE001F7E60017EB0007EA0C81261364011752FB3127335C21B6C007A0301BC126486227E270181BE24000078247E24840009B20014CAB85EB01EDAB8680BCA197D121255F97D21DA1930E6187E6000801EBE270191680D7A2701917E609C7A6301BD80277E6301BDA5BE001F7E60017EB0007EA0C81261364011752FB3127335C21C6C007A0301BD126486227E270183BE24000078247E24850009B20014CAB85EB01EDAB8680BCA197D121259267D21DA1930E6187E6000801EBE270193680D7A2701937E609C7A6301BE80277E6301BEA5BE001F7E60017EB0007EA0C81261364011752FB3127335C21D6C007A0301BE126486227E270185BE24000078247E24860009B20014CAB85EB01EDAB8680BCA197D12125C537D21DA1930E6187E6000801EBE270195680D7A2701957E609C7A6301BF80277E6301BFA5BE001F7E60017EB0007EA0C81261364011752FB3127335C21E6C007A0301BF126486227E270187BE24000078247E24870009B20014CAB85EB01EDAB8680BCA197D12125F807D21DA1930E6187E6000801EBE270197680D7A2701977E609C7A6301C080277E6301C0A5BE001F7E60017EB0007EA0C81261364011752FB3127335C21F6C007A0301C012648622C2AF7E0701CBBE040000782874207AB391007EB3911530E51B7EB3911ABEB03F380C85312F12733574807AB3911E74207AB39115D2AF22353B36E83700371B37B6384E386938FB388438C57CB3BEB0092822752F0912733575570274207AB3910074017AB3911174407AB3910074017AB3911122C0A8C2AF236CAA2E5434E60B585089540102040810204080752FB01273350A2209B235334224D0A8227CB2230A3B4933355789343567359535C335F1361F364D367B36A91241BAD228D208C240C248C238C2306D007A0301B97E0400207A0701997E0400387A0701A9124127125FB70236D71241D7D229D209C241C249C239C2316D007A0301BA7E0400207A07019B7E0400387A0701AB124127125FE00236D71241F4D22AD20AC242C24AC23AC2326D007A0301BB7E0400207A07019D7E0400387A0701AD1241271260090236D7124211D22BD20BC243C24BC23BC2336D007A0301BC7E0400207A07019F7E0400387A0701AF1241271260320236D712422ED22CD20CC244C24CC23CC2346D007A0301BD7E0400207A0701A17E0400387A0701B112412712605B0236D712424BD22DD20DC245C24DC23DC2356D007A0301BE7E0400207A0701A37E0400387A0701B31241271260840236D7124268D22ED20EC246C24EC23EC2366D007A0301BF7E0400207A0701A57E0400387A0701B51241271260AD0236D7124285D22FD20FC247C24FC23FC2376D007A0301C07E0400207A0701A77E0400387A0701B71241271260D60236D77EA0D07E600F1261364005126486C2D722752FB11273350A52236D005905003212418312419FD0A822752FB21273350A2209B2353342237EB09C19B201B912314CD0A8227E0480004C020930000C74BF19B0000C09B000081930000C7C745E700168124440CAB809B00010440219B00010DAB8800254BF7C745E700868044408800254F70930000CCAB874BF19B0000CDAB819B000081930000C0A6209B635333E200A627C745E700268204227CAB8746119B000087E440010594601A909B00010440119B00010DAB88011F4522774A119B000087E440038594601A9D0A8227C747E0480004C020930000C74BF19B0000C09B000087C745E7001680444808002547F7C745E700868044402800254FD19B000081930000C0A6209B63533A5FDF4A5FECA283E200A62DA287C745E70026810A5ED422842267E440008594601998004A5EE52287C745E70046810A5ED422942267E440008594601998015A5EE52297C745E7002780A52267E440020594601991242A2D0A8227E0480004C020930000C74BF19B0000C194000101930000CD0A8227E0480004C020930000C74BF19B0000C194000181930000CD0A822752FB51273357E0480004C0209B0000C444019B0000CE558B4072309B000104EB00219B000100930000C74BF19B0000C09B0000454F719B000041930000CD0A822752FB61273357E0480004C02E558B407180930000C74BF19B0000C09B00004440819B000041930000C09B0000C54BF19B0000CD0A822752FB41273357A212F1273357A412F1273357EB0017EA0C87C64126136126486D0A822392E397539BC3A033A4A3A913AD83B1F752F55127335752F001273357A612F1273357A712F1273357E1701697E2701792D237E09B00B047A19B00B14BE14082C380F1B3478EC7A1701697A27017902464F7E14042D80EB752F55127335752F011273357A612F1273357A712F1273357E17016B7E27017B2D237E09B00B047A19B00B14BE140C2C380F1B3478EC7A17016B7A27017B02497C7E14082D80EB752F55127335752F021273357A612F1273357A712F1273357E17016D7E27017D2D237E09B00B047A19B00B14BE14102C380F1B3478EC7A17016D7A27017D024CA97E140C2D80EB752F55127335752F031273357A612F1273357A712F1273357E17016F7E27017F2D237E09B00B047A19B00B14BE14142C380F1B3478EC7A17016F7A27017F024FD67E14102D80EB752F55127335752F041273357A612F1273357A712F1273357E1701717E2701812D237E09B00B047A19B00B14BE14182C380F1B3478EC7A1701717A2701810253037E14142D80EB752F55127335752F051273357A612F1273357A712F1273357E1701737E2701832D237E09B00B047A19B00B14BE141C2C380F1B3478EC7A1701737A2701830256307E14182D80EB752F55127335752F061273357A612F1273357A712F1273357E1701757E2701852D237E09B00B047A19B00B14BE14202C380F1B3478EC7A1701757A27018502595D7E141C2D80EB752F55127335752F071273357A612F1273357A712F1273357E1701777E2701872D237E09B00B047A19B00B14BE14242C380F1B3478EC7A1701777A270187025C8A7E14202D80EB64
-:33354000007E0400017E147FF87E2400FE7D310B1A501B0A507E14401B0240747EF8005975B0DF7EB0017AB390007EF4403002408B12744EF52E7AA12D7A1158126B021240EB7EB33FF16003124379126BDED2AF0230007E0400FF7E1840607A1C000189187EB0017AB394007AB32C357EB0017AB3930089087E0400FF7E1840827A1C000189187EB0007AB3930089087E0800207E4404007E40007EE4409D0273507E0801597E442ADD7E40007EE440AF0273507E0800597E4401007E40537EE440C10273507557017556007E040008755458755508755108755301758901758A01758C00D28C7E0400027A054289F475B77F75B87F75B30175B201D2A92275B0DFE4D5E0FD75B0EF7E2480007E112E7EA00819A200102E240100A5D9F27E20001241830B20BE212E78F6227E0480004C0274BF19B0000C741019B00008748019B0000C7E54000219A0000419B00000740319B0000C7407206802740F19B00004306B1774BF19B0000C7428206802742019B00004740319B0000C74A719B00008740C19B00010227E0480004C02E419B0000409B00010540819B0001074A719B00008227CB2230A2B492241AA892441BA41D741F44211422E424B42684285C210C218C2087E04042D7A0701597A0701696D007A0701797A07018922C211C219C2097E04082D7A07015B7A07016B6D007A07017B7A07018B22C212C21AC20A7E040C2D7A07015D7A07016D6D007A07017D7A07018D22C213C21BC20B7E04102D7A07015F7A07016F6D007A07017F7A07018F22C214C21CC20C7E04142D7A0701617A0701716D007A0701817A07019122C215C21DC20D7E04182D7A0701637A0701736D007A0701837A07019322C216C21EC20E7E041C2D7A0701657A0701756D007A0701857A07019522C217C21FC20F7E04202D7A0701677A0701776D007A0701877A070197227CB2230A2B492242AD892442BD42D442EB4302431943304347435E304007205804C228800C304807205004C2288002D22822304107205904C229800C304907205104C2298002D22922304207205A04C22A800C304A07205204C22A8002D22A22304307205B04C22B800C304B07205304C22B8002D22B22304407205C04C22C800C304C07205404C22C8002D22C22304507205D04C22D800C304D07205504C22D8002D22D22304607205E04C22E800C304E07205604C22E8002D22E22304707205F04C22F800C304F07205704C22F8002D22F224466438ABEB002400122230A5B495543759954D3227EB0007AB394007AB32C3512447A7E04282D7A0701C17A0701C37E04242D7A0701C77A0701C97E04667F7A054B74207AB3910074607AB3911C74127AB3910674407AB39107741E7AB3911074487AB3911274107AB39113743F7AB3911474407AB3910074607AB3911C74147AB3910674407AB3910774167AB3911074087AB3911174207AB39113743F7AB3911474607AB3910074607AB3911C74167AB3910674207AB39107742F7AB3911074487AB3911274107AB39113743F7AB3911474027AB39106740F7AB391071240FA7E200012419F0B20BE212E78F6D2A8227EB0017AB394007AB32C3512447A75B0DFC2A82274027AB3910674017AB391077E20047CB2C2D7131313137AB3910074607AB3911C74027AB39112A5DAE522CA0912300E100134D5514074007AB3910074027AB391067EB3910774037AB391067EB391077EB391147EB391046353017E00542E0153A5E6F551801220021D755300855451D2027403800D30020EC2027E00562E0153A5E67AB39000DA0932456F458B45A745C345DF45FB46174633C0D0C0D1C0E0C0F0CA0BCA1BCA2BD201752F891273357EB3900060287E1480007E0000135013CA0BCA597CB0230A2B492245049924DA59DA0BA50AA508BE012E78E180D2300405C204126486DA2BDA1BDA0BD0F0D0E0D0D1D0D03209B1000820E014752F80127335543E0A5B7E4400FF695261AB89542209B1000820E014752F81127335543E0A5B7E4400FF695261EB89542209B1000820E014752F82127335543E0A5B7E4400FF6952622B89542209B1000820E014752F83127335543E0A5B7E4400FF6952626B89542209B1000820E014752F84127335543E0A5B7E4400FF695262AB89542209B1000820E014752F85127335543E0A5B7E4400FF695262EB89542209B1000820E014752F86127335543E0A5B7E4400FF6952632B89542209B1000820E014752F87127335543E0A5B7E4400FF6952636B89542210080122202803D20822752FA01273357E1480008006202803D2082209B10014CAB85EB01EDAB8680312494530300620E64FD2082230E602D2607E3701797E2701999D3240317D022E05327A05327A3701797E3701597D432D42BE44082C38687A470159752F941273357A512F1273351269F01060C422C2602D2368786D33801A7E270179BE240000686ABE27019928047E2701997E3701799D327D022E05327A05327A3701797E3701597D432D42BE44082C38137A470159752F941273357A512F1273350269F0752F941273357A512F1273359E44082D9D241269F07E34042D7D242D437A4701591269F0BE252078030246C222D2087E04042D7A0701597A070169752F94127335752F0012733522752F92127335D20409B10014CAB85482DAB878687E3701CB7E2701A92E2400022D32BE34040038347D022E05307A05307A3701CB7E3701C97D432D42BE44282C383C7A4701C97E2400002E2701A91B38200B357A512F127335026A63752F9912733509B1000454FA19B1000430380A09B1001054FE19B10010D21022807F7A512F1273359E44282D9D247E6400002E6701A99E24000240171B38600B35126A637E34242D7D242D437A4701C9026A637A39C07E34242D7A39D00B341B4480E59D327CB6540F23232344007A69B07A79700B35752F931273357A712F127335BD04682B7A0701C97E4701CB2D437A4701CB2E35307A353022D20409B1001420E013227E04242D80287E04242D802A7E04242D80CF7E0701CB7E2403FE9D2028407E0701C97E44282D7D600B04BD0468D27D700B04BD0468D07D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E702481E752F9912733509B1000454FA19B1000430380A09B1001054FE19B10010D21022DAB830E0D8BD326807CAB812481EDAB802494509B100187EA088752F90127335F52F127335A5FD5E500A681DA5FD5E50206804D2588002C258A5FD5E50806804D2508002C2501242BD026113752F9112733509B100147AB12F12733520E008D2047EA080026113D20430E1067EA080126113CAB85EB01CDAB868127EA0C00961000012613609B1001420E0DB22024872752F9512733522752F961273352210090122202903D20922752FA11273357E1481008006202903D2092209B10014CAB85EB01EDAB86803124C7230310620E64FD2092230E602D2617E37017B7E27019B9D3240317D022E05347A05347A37017B7E37015B7D432D42BE440C2C38687A47015B752F941273357A512F1273351269F01061C422C2612D2368786D33801A7E27017BBE240000686ABE27019B28047E27019B7E37017B9D327D022E05347A05347A37017B7E37015B7D432D42BE440C2C38137A47015B752F941273357A512F1273350269F0752F941273357A512F1273359E440C2D9D241269F07E34082D7D242D437A47015B1269F0BE252078030249EF22D2097E04082D7A07015B7A07016B752F94127335752F0012733522752F92127335D20409B10014CAB85482DAB878687E3701CB7E2701AB2E2400022D32BE34040038347D022E05307A05307A3701CB7E3701C97D432D42BE44282C383C7A4701C97E2401002E2701AB1B38200B357A512F127335026A63752F9912733509B1000454FA19B1000430390A09B1001054FE19B10010D21122807F7A512F1273359E44282D9D247E6401002E6701AB9E24000240171B38600B35126A637E34242D7D242D437A4701C9026A637A39C07E34242D7A39D00B341B4480E59D327CB6540F23232344017A69B07A79700B35752F931273357A712F127335BD04682B7A0701C97E4701CB2D437A4701CB2E35307A353022D20409B1001420E013227E04242D80287E04242D802A7E04242D80CF7E0701CB7E2403FE9D2028407E0701C97E44282D7D600B04BD0468D27D700B04BD0468D07D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E7024B4B752F9912733509B1000454FA19B1000430390A09B1001054FE19B10010D21122DAB830E0D8BD326807CAB8124B4BDAB8024C7209B100187EA088752F90127335F52F127335A5FD5E500A681DA5FD5E50206804D2598002C259A5FD5E50806804D2518002C2511242D4026113752F9112733509B100147AB12F12733520E008D2047EA080026113D20430E1067EA080126113CAB85EB01CDAB868127EA0C00961000012613609B1001420E0DB22024B9F752F9512733522752F9612733522100A0122202A03D20A22752FA21273357E1482008006202A03D20A2209B10014CAB85EB01EDAB86803124F9F30320620E64FD20A2230E602D2627E37017D7E27019D9D3240317D022E05367A05367A37017D7E37015D7D432D42BE44102C38687A47015D752F941273357A512F1273351269F01062C422C2622D2368786D33801A7E27017DBE240000686ABE27019D28047E27019D7E37017D9D327D022E05367A05367A37017D7E37015D7D432D42BE44102C38137A47015D752F941273357A512F1273350269F0752F941273357A512F1273359E44102D9D241269F07E340C2D7D242D437A47015D1269F0BE25207803024D1C22D20A7E040C2D7A07015D7A07016D752F94127335752F0012733522752F92127335D20409B10014CAB85482DAB878687E3701CB7E2701AD2E2400022D32BE34040038347D022E05307A05307A3701CB7E3701C97D432D42BE44282C383C7A4701C97E2402002E2701AD1B38200B357A512F127335026A63752F9912733509B1000454FA19B10004303A0A09B1001054FE19B10010D21222807F7A512F1273359E44282D9D247E6402002E6701AD9E24000240171B38600B35126A637E34242D7D242D437A4701C9026A637A39C07E34242D7A39D00B341B4480E59D327CB6540F23232344027A69B07A79700B35752F931273357A712F127335BD04682B7A0701C97E4701CB2D437A4701CB2E35307A353022D20409B1001420E013227E04242D80287E04242D802A7E04242D80CF7E0701CB7E2403FE9D2028407E0701C97E44282D7D600B04BD0468D27D700B04BD0468D07D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E7024E78752F9912733509B1000454FA19B10004303A0A09B1001054FE19B10010D21222DAB830E0D8BD326807CAB8124E78DAB8024F9F09B100187EA088752F90127335F52F127335A5FD5E500A681DA5FD5E50206804D25A8002C25AA5FD5E50806804D2528002C2521242EB026113752F9112733509B100147AB12F12733520E008D2047EA080026113D20430E1067EA080126113CAB85EB01CDAB868127EA0C00961000012613609B1001420E0DB22024ECC752F9512733522752F9612733522100B0122202B03D20B22752FA31273357E1483008006202B03D20B2209B10014CAB85EB01EDAB868031252CC30330620E64FD20B2230E602D2637E37017F7E27019F9D3240317D022E05387A05387A37017F7E37015F7D432D42BE44142C38687A47015F752F941273357A512F1273351269F01063C422C2632D2368786D33801A7E27017FBE240000686ABE27019F28047E27019F7E37017F9D327D022E05387A05387A37017F7E37015F7D432D42BE44142C38137A47015F752F941273357A512F1273350269F0752F941273357A512F1273359E44142D9D241269F07E34102D7D242D437A47015F1269F0BE2520780302504922D20B7E04102D7A07015F7A07016F752F94127335752F0012733522752F92127335D20409B10014CAB85482DAB878687E3701CB7E2701AF2E2400022D32BE34040038347D022E05307A05307A3701CB7E3701C97D432D42BE44282C383C7A4701C97E2403002E2701AF1B38200B357A512F127335026A63752F9912733509B1000454FA19B10004303B0A09B1001054FE19B10010D21322807F7A512F1273359E44282D9D247E6403002E6701AF9E24000240171B38600B35126A637E34242D7D242D437A4701C9026A637A39C07E34242D7A39D00B341B4480E59D327CB6540F23232344037A69B07A79700B35752F931273357A712F127335BD04682B7A0701C97E4701CB2D437A4701CB2E35307A353022D20409B1001420E013227E04242D80287E04242D802A7E04242D80CF7E0701CB7E2403FE9D2028407E0701C97E44282D7D600B04BD0468D27D700B04BD0468D07D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E70251A5752F9912733509B1000454FA19B10004303B0A09B1001054FE19B10010D21322DAB830E0D8BD326807CAB81251A5DAB80252CC09B100187EA088752F90127335F52F127335A5FD5E500A681DA5FD5E50206804D25B8002C25BA5FD5E50806804D2538002C253124302026113752F9112733509B100147AB12F12733520E008D2047EA080026113D20430E1067EA080126113CAB85EB01CDAB868127EA0C00961000012613609B1001420E0DB220251F9752F9512733522752F9612733522100C0122202C03D20C22752FA41273357E1484008006202C03D20C2209B10014CAB85EB01EDAB868031255F930340620E64FD20C2230E602D2647E3701817E2701A19D3240317D022E053A7A053A7A3701817E3701617D432D42BE44182C38687A470161752F941273357A512F1273351269F01064C422C2642D2368786D33801A7E270181BE240000686ABE2701A128047E2701A17E3701819D327D022E053A7A053A7A3701817E3701617D432D42BE44182C38137A470161752F941273357A512F1273350269F0752F941273357A512F1273359E44182D9D241269F07E34142D7D242D437A4701611269F0BE2520780302537622D20C7E04142D7A0701617A070171752F94127335752F0012733522752F92127335D20409B10014CAB85482DAB878687E3701CB7E2701B12E2400022D32BE34040038347D022E05307A05307A3701CB7E3701C97D432D42BE44282C383C7A4701C97E2404002E2701B11B38200B357A512F127335026A63752F9912733509B1000454FA19B10004303C0A09B1001054FE19B10010D21422807F7A512F1273359E44282D9D247E6404002E6701B19E24000240171B38600B35126A637E34242D7D242D437A4701C9026A637A39C07E34242D7A39D00B341B4480E59D327CB6540F23232344047A69B07A79700B35752F931273357A712F127335BD04682B7A0701C97E4701CB2D437A4701CB2E35307A353022D20409B1001420E013227E04242D80287E04242D802A7E04242D80CF7E0701CB7E2403FE9D2028407E0701C97E44282D7D600B04BD0468D27D700B04BD0468D07D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E70254D2752F9912733509B1000454FA19B10004303C0A09B1001054FE19B10010D21422DAB830E0D8BD326807CAB81254D2DAB80255F909B100187EA088752F90127335F52F127335A5FD5E500A681DA5FD5E50206804D25C8002C25CA5FD5E50806804D2548002C254124319026113752F9112733509B100147AB12F12733520E008D2047EA080026113D20430E1067EA080126113CAB85EB01CDAB868127EA0C00961000012613609B1001420E0DB22025526752F9512733522752F9612733522100D0122202D03D20D22752FA51273357E1485008006202D03D20D2209B10014CAB85EB01EDAB8680312592630350620E64FD20D2230E602D2657E3701837E2701A39D3240317D022E053C7A053C7A3701837E3701637D432D42BE441C2C38687A470163752F941273357A512F1273351269F01065C422C2652D2368786D33801A7E270183BE240000686ABE2701A328047E2701A37E3701839D327D022E053C7A053C7A3701837E3701637D432D42BE441C2C38137A470163752F941273357A512F1273350269F0752F941273357A512F1273359E441C2D9D241269F07E34182D7D242D437A4701631269F0BE252078030256A322D20D7E04182D7A0701637A070173752F94127335752F0012733522752F92127335D20409B10014CAB85482DAB878687E3701CB7E2701B32E2400022D32BE34040038347D022E05307A05307A3701CB7E3701C97D432D42BE44282C383C7A4701C97E2405002E2701B31B38200B357A512F127335026A63752F9912733509B1000454FA19B10004303D0A09B1001054FE19B10010D21522807F7A512F1273359E44282D9D247E6405002E6701B39E24000240171B38600B35126A637E34242D7D242D437A4701C9026A637A39C07E34242D7A39D00B341B4480E59D327CB6540F23232344057A69B07A79700B35752F931273357A712F127335BD04682B7A0701C97E4701CB2D437A4701CB2E35307A353022D20409B1001420E013227E04242D80287E04242D802A7E04242D80CF7E0701CB7E2403FE9D2028407E0701C97E44282D7D600B04BD0468D27D700B04BD0468D07D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E70257FF752F9912733509B1000454FA19B10004303D0A09B1001054FE19B10010D21522DAB830E0D8BD326807CAB81257FFDAB802592609B100187EA088752F90127335F52F127335A5FD5E500A681DA5FD5E50206804D25D8002C25DA5FD5E50806804D2558002C255124330026113752F9112733509B100147AB12F12733520E008D2047EA080026113D20430E1067EA080126113CAB85EB01CDAB868127EA0C00961000012613609B1001420E0DB22025853752F9512733522752F9612733522100E0122202E03D20E22752FA61273357E1486008006202E03D20E2209B10014CAB85EB01EDAB86803125C5330360620E64FD20E2230E602D2667E3701857E2701A59D3240317D022E053E7A053E7A3701857E3701657D432D42BE44202C38687A470165752F941273357A512F1273351269F01066C422C2662D2368786D33801A7E270185BE240000686ABE2701A528047E2701A57E3701859D327D022E053E7A053E7A3701857E3701657D432D42BE44202C38137A470165752F941273357A512F1273350269F0752F941273357A512F1273359E44202D9D241269F07E341C2D7D242D437A4701651269F0BE252078030259D022D20E7E041C2D7A0701657A070175752F94127335752F0012733522752F92127335D20409B10014CAB85482DAB878687E3701CB7E2701B52E2400022D32BE34040038347D022E05307A05307A3701CB7E3701C97D432D42BE44282C383C7A4701C97E2406002E2701B51B38200B357A512F127335026A63752F9912733509B1000454FA19B10004303E0A09B1001054FE19B10010D21622807F7A512F1273359E44282D9D247E6406002E6701B59E24000240171B38600B35126A637E34242D7D242D437A4701C9026A637A39C07E34242D7A39D00B341B4480E59D327CB6540F23232344067A69B07A79700B35752F931273357A712F127335BD04682B7A0701C97E4701CB2D437A4701CB2E35307A353022D20409B1001420E013227E04242D80287E04242D802A7E04242D80CF7E0701CB7E2403FE9D2028407E0701C97E44282D7D600B04BD0468D27D700B04BD0468D07D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E7025B2C752F9912733509B1000454FA19B10004303E0A09B1001054FE19B10010D21622DAB830E0D8BD326807CAB8125B2CDAB8025C5309B100187EA088752F90127335F52F127335A5FD5E500A681DA5FD5E50206804D25E8002C25EA5FD5E50806804D2568002C256124347026113752F9112733509B100147AB12F12733520E008D2047EA080026113D20430E1067EA080126113CAB85EB01CDAB868127EA0C00961000012613609B1001420E0DB22025B80752F9512733522752F9612733522100F0122202F03D20F22752FA71273357E1487008006202F03D20F2209B10014CAB85EB01EDAB86803125F8030370620E64FD20F2230E602D2677E3701877E2701A79D3240317D022E05407A05407A3701877E3701677D432D42BE44242C38687A470167752F941273357A512F1273351269F01067C422C2672D2368786D33801A7E270187BE240000686ABE2701A728047E2701A77E3701879D327D022E05407A05407A3701877E3701677D432D42BE44242C38137A470167752F941273357A512F1273350269F0752F941273357A512F1273359E44242D9D241269F07E34202D7D242D437A4701671269F0BE25207803025CFD22D20F7E04202D7A0701677A070177752F94127335752F0012733522752F92127335D20409B10014CAB85482DAB878687E3701CB7E2701B72E2400022D32BE34040038347D022E05307A05307A3701CB7E3701C97D432D42BE44282C383C7A4701C97E2407002E2701B71B38200B357A512F127335026A63752F9912733509B1000454FA19B10004303F0A09B1001054FE19B10010D21722807F7A512F1273359E44282D9D247E6407002E6701B79E24000240171B38600B35126A637E34242D7D242D437A4701C9026A637A39C07E34242D7A39D00B341B4480E59D327CB6540F23232344077A69B07A79700B35752F931273357A712F127335BD04682B7A0701C97E4701CB2D437A4701CB2E35307A353022D20409B1001420E013227E04242D80287E04242D802A7E04242D80CF7E0701CB7E2403FE9D2028407E0701C97E44282D7D600B04BD0468D27D700B04BD0468D07D549D50BD2540027D257D3209B10014CAB8541FB40131DAB87E19B07A09B00B041B2478E7025E59752F9912733509B1000454FA19B10004303F0A09B1001054FE19B10010D21722DAB830E0D8BD326807CAB8125E59DAB8025F8009B100187EA088752F90127335F52F127335A5FD5E500A681DA5FD5E50206804D25F8002C25FA5FD5E50806804D2578002C25712435E026113752F9112733509B100147AB12F12733520E008D2047EA080026113D20430E1067EA080126113CAB85EB01CDAB868127EA0C00961000012613609B1001420E0DB22025EAD752F9512733522752F96127335227C027E1480004C2009B10018A5FD5E50206804D2588002C258A5FD5E50806804D2508002C2500260FF7C027E1480004C2009B10018A5FD5E50206804D2598002C259A5FD5E50806804D2518002C2510260FF7C027E1480004C2009B10018A5FD5E50206804D25A8002C25AA5FD5E50806804D2528002C2520260FF7C027E1480004C2009B10018A5FD5E50206804D25B8002C25BA5FD5E50806804D2538002C2530260FF7C027E1480004C2009B10018A5FD5E50206804D25C8002C25CA5FD5E50806804D2548002C2540260FF7C027E1480004C2009B10018A5FD5E50206804D25D8002C25DA5FD5E50806804D2558002C2550260FF7C027E1480004C2009B10018A5FD5E50206804D25E8002C25EA5FD5E50806804D2568002C2560260FF7C027E1480004C2009B10018A5FD5E50206804D25F8002C25FA5FD5E50806804D2578002C2570260FF54F0C4A5FFC4A54F752F90127335F52F12733522CA195E20074CA27E742C2DCA797A79A00B747A79B00B74DA797E30027E64000202615ECA195E20074CA27E742C2DCA797A79A00B747A79B00B747A79600B74DA797E30037E64000302615ED2047E2701CB2D26BE240400382E7E0701C97E44282D7E79A07A09A00B040B74BD046823A5DBEF7A2701CB7E25302D267A25307A0701C9DA19C2D722752F9A127335DA19D2D7227E04242D80D748F14665475F492A452A452A4856452A496E452A452A452A452A452A452A452A4975452A452A452A452A452A452A452A452A452A452A452A452A452A452A452A4C1E49924A8C4C57452A452A4B83452A4C9B452A452A452A452A452A452A452A4CA2452A452A452A452A452A452A452A452A452A452A452A452A452A452A452A4F4B4CBF4DB94F84452A452A4EB0452A4FC8452A452A452A452A452A452A452A4FCF452A452A452A452A452A452A452A452A452A452A452A452A452A452A452A52784FEC50E652B1452A452A51DD452A52F5452A452A452A452A452A452A452A52FC452A452A452A452A452A452A452A452A452A452A452A452A452A452A452A55A55319541355DE452A452A550A452A5622452A452A452A452A452A452A452A5629452A452A452A452A452A452A452A452A452A452A452A452A452A452A452A58D256465740590B452A452A5837452A594F452A452A452A452A452A452A452A5956452A452A452A452A452A452A452A452A452A452A452A452A452A452A452A5BFF59735A6D5C38452A452A5B64452A5C7C452A452A452A452A452A452A452A5C83452A452A452A452A452A452A452A452A452A452A452A452A452A452A452A5F2C5CA05D9A5F65452A452A5E91452A5FA9452A452A452A452A452A452A452A5FB0452A452A452A452A452A452A452A452A452A452A452A452A452A452A452ACAB8752F021273357EB3910320E52030E005126B05803030E105126486802830E2051263F5802030E31D12656180187EB3910430E10302675F30E605126C6A800620E203020080DAB832752F10127335CA0BCA39CA5974407AB391007EB3911A6CAABEB040280A126424DA59DA39DA0B2274207AB3911480F17E3701C52D35BE340400382F7A3701C57E3701C37D432D45BE442C2C38257A4701C3752F111273357AB12F12733512679F74207AB3911412663022752F1612733580F4752F121273357AB12F1273359E442C2D9D5412679F7E34282D7D542D4380BC752F18127335CA09CA39CA2B74207AB391007E63911A74107AB391147EB0809CB660386CAA7E3701CB9D3540377A3701CB7E3701C77D432D45BE44282C383B7A4701C77D451268D47EB3911E20E513752F191273357A912F127335DA2BDA39DA092280342D536D33600280C17E04242D7A0701C97A0701C780E1CA599E44282D9D541268D47E34242D7D542D437A4701C71268D4DA4980B07E0F2C3E0B0C7A0F2C3E74207AB3911E74607AB3911C74027AB3911280A57E2F2C5E0B2C7A2F2C5E74207AB3911E74607AB3911C74027AB39112801FDA2BDA1BDA0B22752F28127335CA0BCA1BCA2B74607AB3910074107AB391147EB3911A70DB7E0D307E1D347E2D387E3D3C7E85407D904D914D924D934D944D954D964D974D9868B87A1391177A0391177A3391177A2391177A5391177A4391177A7391177A6391177A9391177A8391173073227AB391177AA391177AD391177AC391177AF391177AE391177D787AF391177AE391177EB3911E30E50302653C752F29127335207308752F0A1273358006752F1212733574807AB3911E6D007D107A0D307A0D347A0D387A0D3C7A0540DA2BDA1BDA0B227E3701C54D33683B7E0701C17E542C2D9D50BD3540027D35CA397E654B9964DA397E0701C59D037A0701C52E3701C17A3701C1BE342C2C28C77E34282D7A3701C180BD22752F531273357E154D8011752F511273350B08100B059E340002284D7CB220E7275407230A2B4922391E7CB254780303037C2B9D13401A68127A154D7A254F7E6467097A654B89240267177E64667F80F22D139D31CA397D312D10CA19CA299924DA29DA09DA3980A27A154D7E6466F54D3378097CB220E72A7E6466747A654B22752F521273357E214D7E09300B041B34788980D4752F541273357E154D7E254F80905E200754787E44677D30E6164D3368261B347E09400B047E4434FA20E3047E446785CA09CA399944DA39DA097E64667F4D3368A689647A154DF54F7E64675880997E154DE54F80C4C0D0C0D1C0E0CA19752FFE1273357E140053024052DA19D0E0D0D1D0D03203A5CB19B1800022227E2400007FE17EA002A47E0468B19D057EB0287AB395008904CA29B480E27E2400007FE17E00287A039500E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A37E00007A039500DA29227E2400007FE17EA002A47E0469E69D057EB0387AB395008904CA29B480E27E2400007FE17E00387A039500E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A37E00007A039500DA2922CA29CA19CA587E2400007FE1DA587E5402209CB5A47E50305E20072C527A5395002E546A178954E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A37E00007A039500DA19DA2922CA19CA587E2400007FE1DA587E5402389CB5A47E50205E20072C527A5395002E546A888954E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A3E0A37E00007A039500DA1922026BA8CA0BCA1BCA2BCA3BCA4BCA5BCA6BCA7BCAEB74007AB391007EB32C7FB40002801CB401197EB3911454146805126B6C80237EB3911430E51C126CAA80177EB3911430E505126CAA800B7EB3911454146803126B6CDAEBDA7BDA6BDA5BDA4BDA3BDA2BDA1BDA0B2220E419752F0A1273357EB32C7E700A7EB32C7FB4011F026C040271F2752F0B12733574147AB391147EB32C7FB4020C126BB4026BA874047AB39114227E00007A032C7F7A032C80227EB32C7654606005B4401E801C7EB32C77B40515752F711273357EB32C797EA0017AA391067AB391072274007AB3910074107AB3911222BE572C7C28047E572C7C7A0F2C827A572C8674107AB391122274007AB391007EB3911A70537EB3911420E44C7EEF2C827EF72C867E072C864D0068217E0000E07AB39117A3A5081BF46806A5B810F080197EB0007AB32C7FBE0010680D7EB0007AB32C7F74807AB3911E7AEF2C827AF72C86752F0612733574047AB3911422CA0BCA1BCA2BCA3BCA4BCA5BCA6BCA7BCAEB752F0312733574007AB32C7E74007AB3910074017AB39112126D19DAEBDA7BDA6BDA5BDA4BDA3BDA2BDA1BDA0B22752F031273357EB32C80B4021174007AB32C807AB32C7F74207AB3911422B401467EB3910420E6427E23911A7C327E132C812C217A232C817E00002E042C887EB391167A09B00B04A5DBF474207AB39114752F701273357EB32C817EA32C7DBCAB7803126DB9220271F2DA59026C7C74E07AB391007E0391107E1391117E3391127E2391137E5391147E4391157E7391167E6391177A0F2C767A1F2C7A752F041273357A012F1273357A112F1273357A212F1273357A312F1273357A412F1273357A512F1273357A612F1273357A712F12733574007AB3910074407AB39104126D8D226D007E1401027A072C867A032C817EB32C7620E70F7A232C807A332C7FBE072C7C6809227A332C807A232C7F7EB32C7654E3232330E002D2E530E702D2E430E50630E4030271F2543EF5F003541FC325F0906DE57584FF73026FA0026E2D027039027054026F37026EC202708502708502708802708802708802708802708802708802708802708802708E02716002708B02708B02708B02708B02708B02708B74007AB3910074607AB3911C7EB32C77B4062A7EB32C7860797C0B7E132C797E172C7A752F721273357A012F1273357A112F1273351272374058026BEBB4081C752F741273357EB33FF17E082C887A0C00007A0BB07E540001026BEBB40033752F751273357E082C887A0C0000CA0B7EB33FF230E00774027A0BB0800574007A0BB00B1474007A0BB07E540002DA0B026BEB0271F274007AB3910074607AB3911C7EB32C77B4005F752F761273357EB32C7B540FB402057EB0608017B400057EB000800F7EB32C7B20E7057EB04080037EB0207AB391007EB3911130E0047401800274007E082C887A0C0000CA0B7A0BB00B1474007A0BB074007AB391007E540002DA0B026BEB0271F27EB32C7B540FB402057EB0608017B400057EB000800F7EB32C7B20E7057EB04080037EB0207AB391007EB32C79B400267EB32C77B4010E752F7712733574017AB39112801BB4030E752F7812733574017AB39111800A74007AB391001271F22274007AB39100026BDE7EB32C77B4091F752F791273357EB32C79BEB33FF1680DCAB8124379DAB850767AB33FF1806DB40508752F7A1273358062B40319752F7B1273357EB32C79B401557EB33FF244017AB33FF28046B40119752F7C1273357EB32C79B401397EB33FF254FE7AB33FF2802AB4072A7EB32C7860247C0B7E132C797E172C7A752F731273357A012F1273357A112F1273351272714003026BDE0271F27EB32C77B40BF6752F7D1273357EB32C797EA32C7B4CAB78E480DF74007AB3910074607AB3911C7EB32C77B40ACF752F7E1273357EB32C7970C37E082C887A0C00007A0BB07E540001026BEB0271F20271F20271F27EB32C77B40420752FC31273357E0400017E172C787E182C887A1C00007E472C7C12734102715AB40642752FC11273357E5800007A5C00FE7DCA7ED72C787E782C887A7C00007E772C7C752FC1127335C0A8C2AF7E40017A43940012737A7E432C357A439400D0A840658060B40024C2AF7EB0017AB394007AB32C35126BDEE48DEF8DEF8DEFD5E0F7C0D1CA02FFCA06000032B4092074037AB391067E2391077E572C784D5568054E200280035E20FD7A2391078016B40716C2AF7E072C7A7E172C78C0D1CA18CA38CA2832026BDE0271F274007AB3910074607AB3911C7EB32C77B40315752FC21273357E0400017E172C787E572C7C026BEBB40541752FC0127335C0A8C2AF7E40017A4394007E082C887A0C00007E2400FE7E372C787E472C7C1273417E432C357A439400D0A87E082C887A0C00007E572C7C026BEBB401207E00007E1001752F721273357A012F1273357A112F1273351272374003026BEB0271F2752F071273357EB0027AB3900074007AB3910074407AB3911574017AB391117EB391155460BEB040680874207AB3911580ED74017AB3911274047AB3911474FF7AB32C7E22C0A8C2AF7E40017A4394001272BE401F7E082C887A0C0000CA0BCA49127341DA59DA0B7E432C357A439400D0A8C3227E432C357A439400D0A822C0A8C2AF7E40017A4394001272BE40317E5800007A5C00FE7F617E782C887A7C00007E772C7CBD747817752FC112733512737A400C7E432C357A439400D0A8C3227E432C357A439400D0A8D3227E2400FE7E347FCA0B1A50C5F07D627D757D877E347FC27E1BB07E347F03B401047E347FCC7E1BB0BC0B50493E003E000A502D750B3A3069530002BD3850022D38BC1B50303E103E100A512D35694100020B1A30BD3850022D38BE44FFFF78057E1B900A494D44680CBE4400FF28047E4400FFC322D32274
-:00047FC60002000300B2
-:0148733500CA087E012F7A033FF0DA08227E1BC07A0BC00B140B341B4478F2227F6F7FF01BFC7C547D328008CA1BCA1BCA1BCA1B9E44001050F22E4400106806CA481B4478FA7FF689E4CA6B5ED4003F68207E8400409D8DDA6BBD873816CA797D781273A4DA7940089D7868028005C2D722DA6B7EC0037ED0007AD3900074AA39B55555745539B52AAA74A039B555557E0400409D7050062D707D076D777C317E7B007A6B000B7C0B6CA5D9F37F161B1C7E5427107E1B10BC1068061B5478F5802F6D007C207F169F107F279F207E2B007E1B10BC0178190B2C0B1CA5DBEF7CB620E0066CDC7AD390004D777890C2D722D2D7220004000400000604020400020104010200000000000000000202020202040008100210040208000101087E187FBD7A1C00FE0B1A005E101FBE1014381A0A51237E1874247A1C00FF2D350B1A506008A5B802034EA0082280FECB
-:0000000001FF
-//**************************************************************
-//* Edgeport/4 Binary Image
-//* Generated by HEX2C v1.06
-//* Copyright (C) 1998 Inside Out Networks, All rights reserved.
-//* This program is free software; you can redistribute it and/or modify
-//* it under the terms of the GNU General Public License as published by
-//* the Free Software Foundation; either version 2 of the License, or
-//* (at your option) any later version.
-//**************************************************************
diff --git a/firmware/edgeport/down3.bin.ihex b/firmware/edgeport/down3.bin.ihex
deleted file mode 100644
index 7935e520878a..000000000000
--- a/firmware/edgeport/down3.bin.ihex
+++ /dev/null
@@ -1,815 +0,0 @@
-:100000000450000087329A0227BF0221B20000008C
-:10001000000002001E0000000000000000000000C0
-:10002000000002011A853F8C85408AC0E0C0D0C024
-:10003000F0C082C083C000C001C002C003C004C0C1
-:1000400005C006C007E53E2408F8E6602BE53E241F
-:1000500010F8A681E53E75F021A42405F582E4346C
-:10006000F8F583788CE58104C398F9942240030263
-:1000700011DCE6F008A3D9FA7408253EF8053E081D
-:10008000E65480700CE53EB407F37808753E0080B6
-:10009000EFE53E2410F88681E53E75F021A42405A5
-:1000A000F582E434F8F583788CE58104C398F9E0AF
-:1000B000F608A3D9FAD007D006D005D004D003D0D3
-:1000C00002D001D000D083D082D0F0D0D0D0E032A6
-:1000D00030014D30B44810004590FF08E05420F83E
-:1000E00090FF48E05420F990FF10E05420FA90FF70
-:1000F00050E05420FB7400F58274F8F583E0C8F0FA
-:100100006860027E04A3E0C9F06960027E04A3E097
-:10011000CAF06A60027E04A3E0CBF06B60027E044A
-:1001200022C0E0C0D0C0F0C082C083C000C001C007
-:1001300002C003C004C005C006C0077415F5827470
-:10014000F9F583E060237466F58274F9F583E014B1
-:10015000F0701674FFF0741CF58274F9F583E0609A
-:100160000414F07004C29080FC90FF937481F0E559
-:100170008194FD40030211DC85418D85428B74B270
-:10018000F58274FAF583E0B4011BC082C08390FF4E
-:100190004AE030E72C90FF4EE030E725D083D08254
-:1001A0007402F08020B4021DC082C08390FF7AE008
-:1001B00030E70512284E8009D083D0827403F08086
-:1001C00004D083D082A3E0B4011BC082C08390FF1F
-:1001D00052E030E72C90FF56E030E725D083D08204
-:1001E0007402F08025B40222C082C08390FF7AE0BE
-:1001F00030E70512284E8009D083D0827403F08046
-:1002000009D083D08280030202907416F58274F9BB
-:10021000F583E02004F12002033001EB7419F5822C
-:1002200074F9F583E014FCF0A3E0FDA3E0FE6404A0
-:10023000700FEC70627E011200C97C0A7DFA020226
-:10024000611200C9EE6404601DEC704B7C0AED1471
-:10025000FD7015EE640260077E027D320202617E4F
-:10026000017DFA0202617C0A7419F58274F9F58342
-:10027000ECF0A3EDF0A3EEF014601820E10F2001E4
-:1002800006D2B1C2B08010C2B1D2B0800AC2B1C22F
-:10029000B08004D2B0D2B1781979097A07E7700436
-:1002A000A600800BE6600816E67004E74480F708B5
-:1002B00009DAEAE53D601314F53D700EE53E2408C9
-:1002C000F87600121157D28CD28DD007D006D00507
-:1002D000D004D003D002D001D000D083D082D0F09F
-:1002E000D0D0D0E03290FF04E090FAB9F090FF0651
-:1002F000E0FCA3E0FAECFFEAFEEFC39408EE940101
-:10030000500280047E017F088E3B8F3C90FF02E00C
-:10031000FCA3E0FAECFFEA90FABDF0EFA3F0121CA8
-:10032000E0E4F54DE54DC39402500F121CC1E412F8
-:100330001AE8054D04121CB280EA121CE090FF007E
-:10034000E0FF546024C070030208F32440600302FD
-:100350000F6E90FAB9E0FE540FF54DEE30E703D37F
-:100360008001C3920A90FF01E0121BFC0384000489
-:100370005701056A0306310506730607D508081DEF
-:100380000908790A08B90B00000F6EE53520E7036C
-:10039000020F6E90FABDE07002A3E06003020F6EE0
-:1003A000E53C6402453B6003020F6EEF541F14608E
-:1003B0002B14604724026003020F6EEE6003020FED
-:1003C0006E121CC17401121AE87867E630E0081258
-:1003D0001CC17402121AE87F0202326EE53520E178
-:1003E0000990FAB9E06003020F6E90FAB9E0D39475
-:1003F000014003020F6E7F0202326EE53520E10EEE
-:1004000090FAB9E0FF600764806003020F6E120F7C
-:10041000FA4003020F6EE54D7019300A0B90FF8011
-:10042000121CBE121AE8802490FF82121CBE121AFF
-:10043000E88019154D300A0B121D55121CBC121AFA
-:10044000E88009121D63121CBC121AE8121CC112AA
-:100450001AA260057401121AE87F0202326EE535B5
-:1004600030E703020F6EE53C453B6003020F6E125E
-:100470001D7914602D14605924026003020F6E90E0
-:10048000FABDE07004A3E064016003020F6E90FA0D
-:10049000B9E06003020F6E7867E654FEF6E4FF02EF
-:1004A000326EE53520E10620E003020F6EE53530BF
-:1004B000E00990FAB9E06003020F6EE53530E10C17
-:1004C00090FAB9E0D394014003020F6EE4FF0232C8
-:1004D0006E90FABDE07002A3E06003020F6E120F8F
-:1004E000FA4003020F6EE53520E10620E003020F1B
-:1004F0006EE53530E007E54D6003020F6EE54D70A7
-:100500000F90FF82E054F7F090FF80E054F7F02264
-:10051000E54D24FE602024FB603424067035300A4B
-:100520000CA20AE433FD7F03122E798026E4FD7FBE
-:1005300003122E79801D300A0CA20AE433FD7F04D9
-:10054000122E79800EE4FD7F04122E7980057F87BC
-:100550001231EF154D300A0B121D55F583E054F79B
-:10056000F08009121D63F583E054F7F0E4FF0232D6
-:100570006EE53530E703020F6EE53C453B60030254
-:100580000F6E121D7914602D146055240260030251
-:100590000F6E90FABDE07004A3E064016003020FE7
-:1005A0006E90FAB9E06003020F6E7867E64401F6D8
-:1005B000E4FF02326EE53520E10620E003020F6E13
-:1005C000E53530E007E54D6003020F6EE53530E1BB
-:1005D0000AE54DD394014003020F6EE4FF02326E30
-:1005E00090FABDE07002A3E06003020F6E90FAB9CA
-:1005F000E0FF12323F4003020F6EE53520E1062096
-:10060000E003020F6EE54D7009300A03021E14026A
-:100610001DDFE53520E103020F6E154D300A0B1288
-:100620001D55F583E04408F08009121D63F583E051
-:100630004408F0E4FF02326EE53530E703020F6E46
-:10064000E53C453B6003020F6E90FAB9E06003029F
-:100650000F6E121D796003020F6EE53530E1030263
-:100660000F6E90FABEE090FFFFF0E06005433501A9
-:1006700080035335FEE4FF02326EE53520E70302C6
-:100680000F6EE53C453B7003020F6E121D7960034F
-:10069000020F6E90FABDE0FCA3E0FDEC24FE603A90
-:1006A00014607524026003020F6EED6003020F6E8A
-:1006B000121CE0121E0D7D03120FB56003020F6EB7
-:1006C000120F7290FAB6E0FDA3121D2B120FD1503B
-:1006D000028004AE3BAF3C021002121CE090F916FF
-:1006E000E030E40D121E0D7D14120FB56010020FE4
-:1006F0006E121E0D7D041210096003020F6E120FA0
-:100700007290FAB6E0FDA3121D2B120FD150028099
-:1007100004AE3BAF3C021002121E0D7D0512100903
-:100720006003020F6E7B017AFA79B6121D287D01F3
-:1007300012269890FAB7E475F003121B1C90FABECB
-:10074000E090FAB5F0E4F54C90FAB5E0FFE54CC363
-:100750009F5024121D22121014FFFD90FAB7E48D51
-:10076000F0121B1C90FAB6E0C39FF0D39400500324
-:10077000020F6E054C80D1121D2212101424FEFFB0
-:1007800090FAB6F0FDA3E475F002121B1C7AF97919
-:10079000727B018B368A378938E92402F9E43AFA08
-:1007A000121D281226988F4C054C054C121CC1E5D1
-:1007B0004C121AE8121CC19000017403121AFAAF0D
-:1007C0004C7E00C3EF953CEE953B50028004AE3B5F
-:1007D000AF3C8E398F3A022CD8020F6EE53520E7F8
-:1007E00003020F6EE53C6401453B6003020F6E900F
-:1007F000FAB9E06003020F6E90FABDE07002A3E068
-:100800006003020F6E121D796003020F6EE5352042
-:10081000E00620E103020F6E75360075370075386B
-:1008200032020FF1E53530E703020F6EE53C453B40
-:100830006003020F6E90FAB9E06003020F6ED3906E
-:10084000FABEE0940190FABDE094004003020F6EFE
-:10085000121D796003020F6EE53520E00620E103EA
-:10086000020F6E90FABEE0F532E5327008433501B2
-:100870005335FD80065335FE433502E4FF02326EE8
-:10088000E53520E703020F6EE53C6401453B60035C
-:10089000020F6E90FAB9E06003020F6E90FABDE0AD
-:1008A0007002A3E06003020F6E121D796401600301
-:1008B000020F6EE53520E103020F6E7F0102326EFA
-:1008C000E53530E703020F6EE53C453B6003020F60
-:1008D0006ED390FABEE0940090FABDE0940040031D
-:1008E000020F6E121D7964016003020F6EE5352060
-:1008F000E103020F6EE4FF02326E90FF01121E242C
-:10090000EF121AE890FAB9121E24900001EF121AA1
-:10091000FA900002E4121AFA7403121CB290FABDA3
-:10092000E0FFA3E0853882853783CFF0A3EFF09016
-:10093000FF01E0121BFC097B02099D0409BF0509A8
-:10094000EB060A09070A27080A45090A630B0B1870
-:10095000800DB7810DE8820B5F830BA8840BC785E0
-:100960000C0C860C57870CE8880D73890A81920A53
-:1009700081930DA0B00E9BC00EC7C10ED8C200005F
-:100980000F5DE53520E7057F050231A9121D716075
-:1009900003047009EFFD7C007F0702115EE4FD7F18
-:1009A00007022FB4E53520E7057F050231A9121DA6
-:1009B000716003047009EFFD7C007F0C02115EE49E
-:1009C000FD7F07022FB4E53530E703020F71121ED9
-:1009D000425006E53C453B70057F020231A990FA82
-:1009E000B9E024FE24FD5002800302322C7F07026E
-:1009F00031A9E53530E703020F71121D7160030460
-:100A00007009EFFD7C007F0802115E7F070231A9AB
-:100A1000E53530E703020F71121D716003047009A0
-:100A2000EFFD7C007F0902115E7F070231A9E535E9
-:100A300030E703020F71121D716003047009EFFDAE
-:100A40007C007F0A02115E7F070231A9E53530E79D
-:100A500003020F71121D716003047009EFFD7C0029
-:100A60007F0B02115E7F070231A9E53530E70302F3
-:100A70000F71121D716003047009EFFD7C007F0E81
-:100A800002115E7F070231A9E53530E756121D7964
-:100A9000704A90FF02E0F54CE54CB48205754C615C
-:100AA0008012E54CB48305754C628008E54CC45453
-:100AB000F004F54C121C22121E3B1225FA121D895D
-:100AC000121ABB600512327A800685333985343AB2
-:100AD0007536017537F9753875022CD8E4FD7F0538
-:100AE000022FB4121D7960057F050231A9121E4242
-:100AF00040057F030231A990FF02E0F54CE54CB4BC
-:100B00008205754C618012E54CB48305754C62809A
-:100B100008E54CC454F004F54C121C2202322C128D
-:100B20001E4C122AC7121D33E0547FF0000000E073
-:100B300090FABAF07868121BD8900002121ABB30F3
-:100B4000E7F2900002E4121AFA90FABAE04480FF49
-:100B5000F0787CE6FC08E68C83121D3BEFF0123245
-:100B600084E4FF0231A990FAB9E06401701F90FAA1
-:100B7000BDE0FF7E007006A3E0F590802DC2AFEFD0
-:100B8000F4529090FABEE04290D2AF801D90FABD30
-:100B9000E0FF7E007006A3E0F5B0800EC2AFEFF478
-:100BA00052B090FABEE042B0D2AFE4FF0231A912D7
-:100BB0001CE090FAB9E0B4010A121CC1E590121AC7
-:100BC000E88008121CC1E5B0121AE8020FF190FA91
-:100BD000B9E0FF2413121CF120E133121D80EF2431
-:100BE000FC601804702890FABAE0600990FFA4E055
-:100BF0004410F08019121E56F0801390FABAE0608B
-:100C00000990FFB4E04410F08004121E5DF0E4FF90
-:100C10000231A990FAB9E0FF2413121CF120E13946
-:100C2000121D80EF24FC601B04702E90FABAE06065
-:100C30000990FFA4E04420F0801F90FFA4E054DF5F
-:100C4000F0801690FABAE0600990FFB4E04420F01A
-:100C5000800790FFB4E054DFF0E4FF0231A9121DD9
-:100C600080121D71604D046003020CE390FABAE03B
-:100C7000600F90FFA4121CEA30E16F121E2C020CD0
-:100C8000E390FFA4E054FB121CEDFE30E15C30E287
-:100C90001130B405121E2C805190FFA4E054FDF0D9
-:100CA0008048309505121E2C804090FFA4E054FD32
-:100CB000F0803790FABAE0601290FFB4121CEA306C
-:100CC000E12890FFB4E04402F0801F90FFB4E054AC
-:100CD000FB121CED30E11330930990FFB4E04402A5
-:100CE000F0800790FFB4E054FDF0E4FF0231A91258
-:100CF0001D8090FAB9E024FC604004707890FABA44
-:100D0000E0601D90FFA2E04440F0A3E0FF30E76503
-:100D1000D203A3E054DFF090FFA3EF547FF080559F
-:100D200030030E90FFA3E04480F0C203A3E0442010
-:100D3000F090FFA2E054BFF0803B90FABAE0601D53
-:100D400090FFB2E04440F0A3E0FF30E728D204A3D4
-:100D5000E054DFF090FFB3EF547FF0801830040EC2
-:100D600090FFB3E04480F0C204A3E04420F090FF81
-:100D7000B2E054BFF0E4FF0231A9121CE090FAB9CE
-:100D8000E024FC600F04701690FFA6E0121CC11254
-:100D90001AE8800A90FFB6E0121CC1121AE87539F1
-:100DA00000753A01022CD890F9157401F090F91CE5
-:100DB0007419F090F96674FFF0E4FF0231A9E4FFC2
-:100DC0001231A9121DE77F0312126190F916E0306B
-:100DD000E40890FF937480F0801090FFFCE0547F53
-:100DE000F07FFF7E001230D3C290C2AF0080FDE4DE
-:100DF000F54EF54F90FABF743EF0A3E4F090FAB7C9
-:100E0000F0A37415F0E0543FFFC374409F90FABC08
-:100E1000F0D39400E4943E400890FAC0E090FABC0D
-:100E2000F0120F98E53145307073121CFA90FABF3A
-:100E3000121E066027D3EF9440EE9400400890FA0B
-:100E4000BC7440F0800890FAC0E090FABCF0120F39
-:100E500098E53145307046121CFA80D1754C0290ED
-:100E6000FABFE4F0A304F090FAB7E4F0A3740FF033
-:100E70007B007A00794C90FAC0E0F54A7D0F7C0047
-:100E80001229607530008F317B007A00794CE4F5CF
-:100E90002DF52E7D01122698E4F530F531AF3102A3
-:100EA00031A9121D8030E710E0540F90F967F0D39C
-:100EB00094004015C295801190FABAE0540F90F951
-:100EC00065F0D394004002C294E4FF0231A9121EDF
-:100ED0004CBF0104D2938002C293E4FF0231A912F5
-:100EE0001D80540314600A14600F146008240370FA
-:100EF0002BD2918027C2918023121E56120FC06000
-:100F000004D291801790FFA4E04410120FC0FFBFDD
-:100F1000A004C2918002D291121E56F090FABAE05B
-:100F2000540CFF1313543F14600A14600F1460082C
-:100F30002403702BD2928027C2928023121E5D124E
-:100F40000FE06004D292801790FFB4E04410120FBB
-:100F5000E0FFBFA004C2928002D292121E5DF0E4B4
-:100F6000FF0231A9E53530E707E4FD7F05022FB424
-:100F70007F050231A912327A227B017AFA79B69082
-:100F8000FAB7E0F52DA3E0F52E7D0112269890FA30
-:100F9000B7E475F003121B1CAB36AA37A93822AA96
-:100FA0004EA94F7BFF90FAB7E0FCA3E0FD90FABC9E
-:100FB000E0F54A1229607530008F31221223617EDC
-:100FC000008E308F31EF22F07F0112126190FFA668
-:100FD000E090FABBF054A0221226988F4C7E00C3FA
-:100FE000EF953CEE953B22F07F0112126190FFB627
-:100FF000E090FABBF054A022753900753A01022C3A
-:10100000D890FAB9E0FF02323F8E398F3A022CD8DD
-:101010001223617E008E308F31EF227D01122698DF
-:1010200090FAB4E022EF90F804F022C0A8C2AFEE2C
-:10103000600AC0057D7FDDFEDEFAD005EFC39415A2
-:101040005003D0A822137003D0A822FFD507FDD0EB
-:10105000A822C000C001C002C004C005E53E2408AB
-:10106000F8860553057F7CFF1210C07F007E00E5E7
-:10107000436046FC90F91DE0547F6D700FC083C043
-:1010800082A3E0FEA3E0FFA315438007A3A3A3DC94
-:10109000E68026DC06D082D083801EE0F8A3E0F94B
-:1010A000A3E0FAD082D083E8F0A3E9F0A3EAF0A3AA
-:1010B000C083C082A3A3A380DA121157D005D00445
-:1010C000D002D001D0002285A84475A888EC700217
-:1010D0007C3F8C3D22E53E2408F876001211AE805C
-:1010E000FBC000C001C002C004C0067CFF1210C0DB
-:1010F000E5436042FE90F91DE0547F6F700BC083A2
-:10110000C082A3A3A315438007A3A3A3DEEA80267E
-:10111000DE06D082D08380D8E0F8A3E0F9A3E0FA1D
-:10112000D082D083E8F0A3E9F0A3EAF0A3C083C0A3
-:1011300082A3A3A380DA7808087918097C01E65411
-:101140007F6F700676007700800608090CBC08EEF9
-:10115000121157D006D004D002D001D00022753D24
-:10116000008544A822C0F0C082C083C3E54324E8C0
-:1011700050051211AE80F4EF6031903111E493C349
-:101180009F402FC0047CFF1210C0D004430780E5AD
-:101190004375F003A4241DF582E434F9F583EFF0E0
-:1011A000ECA3F0EDA3F00543121157D083D082D009
-:1011B000F0220211DCC0047C20D28CD28DD504FD3B
-:1011C000D0042275A80075880075B80075F0007508
-:1011D000D000E4F890F804F0900000F608B800FBA6
-:1011E000020000C2AFE490FF48F090FF50F090FF83
-:1011F00008F090FF10F090FF80F0A3A3F0D2B1C2EE
-:10120000B07EFF7FFF1210247EFF7FFF1210247E2E
-:10121000FF7FFF121024D2B0D2B17EFF7FFF1210E9
-:10122000247EFF7FFF1210247EFF7FFF1210248098
-:10123000CCC3EE940250047E037FE8EFF4FFEEF49B
-:10124000FE0FBF00010E8F428E4122C3EF94BCEE11
-:10125000940250047E077FD0EFF4FFEEF4FE0FBF40
-:1012600000010E8F408E3F22EF700122C000C0A807
-:10127000C2AFE53E2418F8A607E53E2408F8C65498
-:101280007FF6D0A8E630E703D000221211AE80F43A
-:10129000C0007F01EF2408F8E660090FBF08F512CF
-:1012A00011AE80EED00022C0F0C082C083C000C06A
-:1012B00006C004ED2410F8769AED75F021A42405FB
-:1012C000F582E434F8F583C082C083A3A3E4780DEB
-:1012D000F0A3D8FCEF547F75F002A424F3F582E567
-:1012E000F03430F583E493FE740193FCD083D08214
-:1012F000ECF0A3EEF0ED2408F8EF4480F6D004D033
-:1013000006D000D083D082D0F022753E0075430015
-:101310007A0879187808760077000809DAF890F8E2
-:1013200004E0FC903111E493C39C5005E490F80470
-:10133000F078087480447FF674014410F58975B81C
-:1013400000D2ABD2A92275818BD28ED28CD2AFE5DE
-:10135000436036FF90F91DE05480602878087908D2
-:10136000E0547FFA7B00E6547FB502027BFF08D988
-:10137000F5EB7010EAF0C007121289AD07AF021248
-:1013800012A0D007A3A3A3DFCE1211AE80C18F2479
-:10139000122AC71222B5A3A3E0A330E728787E1251
-:1013A0002299E04401F01222FA12229DE020E0F698
-:1013B0001223507402F01222DAE0A330E507122360
-:1013C00050E04401F07880E6FE08E6FF8E832408B2
-:1013D0001222A1E0FD1223398A83240A1222A1EDF0
-:1013E000F012230624071222A1E0FF12235A240937
-:1013F0001222A1EFF090F916E030E420081222B793
-:10140000C083C082A3E025E0FF0582D58202158358
-:101410001582E033D082D083F0A3EFF01222B5E042
-:10142000FCA3E0FDECFF1223398A8324081222A1D9
-:10143000EFF0ED12235A24071222A1EDF01222A997
-:10144000E030E60A12234124091222A1E4F012221C
-:10145000A9E0FF30E71B12231E24091222A1E0603D
-:10146000091222A9EF4402F080071222A9EF54FDCD
-:10147000F0787E1222B7A3A3E0FF5307C708E6FC6B
-:1014800008E6FD1222E0A3E030E3128D828C83E5B2
-:101490008224051222A1E09032519342075307FBA8
-:1014A00012231E24061222A1E060034307045307FF
-:1014B000FC788012232924041222A1E0420743076A
-:1014C00080122339F5828A83A3A3EFF012235A24D2
-:1014D000041222A1E0FF8D828C83A3A3E0FCA3E091
-:1014E000FD30E1055307DF8003430720EC30E405BE
-:1014F0005307EF80034307101222A9E0FE54036054
-:10150000735307DFEE30E16912231E24091222A172
-:10151000E0121BFC152C0015600115650315600514
-:1015200015650715600915650B15600D15650F002C
-:1015300000156DE5246403702190F916E030E20D8A
-:1015400030B405430702802C5307FD8027309505F2
-:10155000430702801F5307FD801A3093054307029B
-:1015600080125307FD800D43070280085307FD805A
-:10157000035307FD12232724041222A1EFF08D82CA
-:101580008C83A3A3A3E0FF1222A9E0FE54037003FF
-:10159000021660EE20E10302165D081223202409E2
-:1015A0001222A1E0121BFC15BF0015F50115F50371
-:1015B000162905162907160F09160F0B16430D16C7
-:1015C000430F00001660E5246403702390F916E0D1
-:1015D00030E20F30B10653077F02166043078002E6
-:1015E000166030940553077F807D430780807830F4
-:1015F000920553077F8070430780806BE524B40316
-:101600000990FF9EE054EFF0800790FF9EE054DFCA
-:10161000F053077F8051E524B4030990FF9EE04416
-:1016200010F0800790FF9EE04420F053077F803742
-:10163000E524B4030990FF9EE054EFF0800790FF8B
-:101640009EE054DFF0430780801DE524B403099039
-:10165000FF9EE04410F0800790FF9EE04420F0439E
-:101660000780800353077F1222DAE0FCA3E0FD30FD
-:10167000E00543072080035307DFEC30E305430711
-:101680004080035307BFEC30E0054307108003534D
-:1016900007EFED30E40543070880035307F7ED300B
-:1016A000E50543070480035307FBED30E6054307D8
-:1016B0000180035307FEED30E70543070280035323
-:1016C00007FD787E1222DCA3EFF01232847F002225
-:1016D00090FFFA7408F0A37416F090FFF97402F00A
-:1016E0007B017AFA79CFE4FD12236190FACFE47599
-:1016F000F003121B1C121992E52330E702D2027B81
-:10170000007A00792490FACFE0F52DA3E0F52E7D44
-:101710000112269890FACFE4F0A3740BF07B007AC4
-:10172000007923752D00F52E7D01122698E52324DE
-:101730008090FFF8F0E5236407601EE523640660EF
-:1017400018E52364146012E5236441600CE523640A
-:101750001A7046E52464027040E523B40716D2945B
-:10176000D295D292D29390F916E04402F0A3E044CD
-:1017700002F0801EE523B4411290F916E04406F011
-:10178000A3E04406F0D2B1D2B4800790F916E04449
-:1017900001F090F917E04401F0E5236442600CE5A4
-:1017A0002364436006E5236444702E90F916E0FF3D
-:1017B000E523B444047E4080027E00EE24804F90F6
-:1017C000F916F0A3E0FFE523B444047E4080027ED6
-:1017D00000EE24804F90F917F090FACFE4F0A37454
-:1017E0000DF012199290FFF5E523F0E4F535F5338D
-:1017F000F534F532121E34121CE0121E3B90F96AC9
-:10180000121BF390F96F121BF390FFFFE4F090FFAF
-:1018100083E0E4F090FF817480F0A37484F090FF83
-:1018200080F0E4F523E523121D57F583E4F0E5236A
-:10183000121D65F583E4F00523E523B407E7787A04
-:1018400076FE0876F090320AE493FF7878F6FDADE4
-:1018500007903217E493FF08F6FFED540FFD121DB9
-:10186000477484F0ED75F008A42447F582E434FF52
-:10187000F583EFF0C374F09F787BF674FE94001844
-:10188000121CD8CEC313CE13D8F9FFED121DA8EF4A
-:10189000F0ED121DCEE4F523E52390320493FF789A
-:1018A00078F6FDE52325E0240BF582E43432F58358
-:1018B000E49308F6ED30E75318E6540FF9121D478C
-:1018C000121DB62447F582E434FF121CC8CEC313A0
-:1018D000CE13D8F9FFE9121DA8EFF0121CCFCEC32A
-:1018E00013CE13D8F9121DBB2445F582E434FFF55D
-:1018F00083EFF0E9121DCEE975F008A42446F582C5
-:10190000E434FFF5837480F00219677878E6540FA9
-:10191000F9121D9A121DB62407F582E434FF121C39
-:10192000C8CEC313CE13D8F9121DBB2401F582E42F
-:1019300034FFF583EFF0121CCFCEC313CE13D8F9CA
-:10194000121DBB2405F582E434FFF583EFF0E97541
-:10195000F008A42402F582E434FFF583E4F0E9758D
-:10196000F008A42406F582E434FFF583E4F00523AF
-:10197000E52364046003021891903209E493FF7830
-:1019800078F6121D98E4F090320893FFF6121D4588
-:10199000E4F090FFFD7405F0227B007A007923903B
-:1019A000FACFE475F001121B3285F02EF52D7D0182
-:1019B000022698E709F608DFFA8046E709F208DF11
-:1019C000FA803E88828C83E709F0A3DFFA8032E355
-:1019D00009F608DFFA8078E309F208DFFA807088F8
-:1019E000828C83E309F0A3DFFA806489828A83E032
-:1019F000A3F608DFFA805889828A83E0A3F208DF21
-:101A0000FA804C80D280FA80C680D4806980F280CF
-:101A100033801080A680EA809A80A880DA80E280F5
-:101A2000CA803389828A83ECFAE493A3C8C582C84A
-:101A3000CCC583CCF0A3C8C582C8CCC583CCDFE9B4
-:101A4000DEE7800D89828A83E493A3F608DFF9EC50
-:101A5000FAA9F0EDFB2289828A83ECFAE0A3C8C5DB
-:101A600082C8CCC583CCF0A3C8C582C8CCC583CC02
-:101A7000DFEADEE880DB89828A83E493A3F208DF71
-:101A8000F980CC88F0EF60010E4E60C388F0ED2441
-:101A900002B4040050B9F582EB2402B4040050AF44
-:101AA00023234582239019FC73BB010689828A8314
-:101AB000E0225002E722BBFE02E32289828A83E40D
-:101AC0009322BB010CE58229F582E5833AF583E098
-:101AD000225006E92582F8E622BBFE06E92582F8B7
-:101AE000E222E58229F582E5833AF583E49322BB7D
-:101AF000010689828A83F0225002F722BBFE01F39D
-:101B000022F8BB010DE58229F582E5833AF583E8E9
-:101B1000F0225006E92582C8F622BBFE05E925829F
-:101B2000C8F222C5F0F8A3E028F0C5F0F8E5821568
-:101B30008270021583E038F022A3F8E0C5F025F0AA
-:101B4000F0E582158270021583E0C838F0E822BB08
-:101B50000110E58229F582E5833AF583E0F5F0A3EB
-:101B6000E0225009E92582F886F008E622BBFE0A49
-:101B7000E92582F8E2F5F008E222E5832AF583E917
-:101B800093F5F0A3E99322BB010A89828A83F0E5E9
-:101B9000F0A3F0225006F709A7F01922BBFE06F3C6
-:101BA000E5F009F31922F8BB0111E58229F582E578
-:101BB000833AF583E8F0E5F0A3F0225009E92582A5
-:101BC000C8F608A6F022BBFE09E92582C8F2E5F0B6
-:101BD00008F222A42582F582E5F03583F58322E61A
-:101BE000FB08E6FA08E6F922EBF608EAF608E9F659
-:101BF00022E0FBA3E0FAA3E0F922EBF0A3EAF0A3D2
-:101C0000E9F022D083D082F8E493701274019370CB
-:101C10000DA3A393F8740193F5828883E47374028F
-:101C2000936860EFA3A3A380DFAB36AA37A938E59A
-:101C30004C121AE874012538F538E43537F537AB1E
-:101C400036FAA9387411121AE874012538F538E407
-:101C50003537F53790FF06E0AB36AA37A938121AA8
-:101C6000E874012538F538E43537F537AB36FAA98D
-:101C700038E4121AE8042538F538E43537F537AB7F
-:101C800036FAA938E4121AE8042538F538E435376D
-:101C9000F53790FF04E0AB36AA37A938121AE8747A
-:101CA000012538F538E43537F53790FF05E0AB36D8
-:101CB000AA37A938121AE874012538F538E43537FF
-:101CC000F53722F583E05408AB36AA37A93822F558
-:101CD00083EFF0FD7C00C3787BE69DF618E69CF66A
-:101CE000E6FE08E67803227536017537F975387215
-:101CF00022E04404F074132FF582E434F9F583E014
-:101D00002290FABCE0FF7E00C390FAC0E09FF09002
-:101D1000FABFE09EF090FAB7EE8FF0121B1CEF2591
-:101D20004FF54FEE354EF54E227B017AFA79B4909D
-:101D3000FAB7E0F52DA3E0F52E22787CE6FE08E662
-:101D40008E832404F582E43583F58322540F75F0E5
-:101D500008A42440F582E434FFF58322E54D75F0B4
-:101D600008A42448F582E434FF22E54D75F008A468
-:101D70002408F582E434FF2290FAB9E0FF24FC2223
-:101D800090FF00E0541F2290FABEE090FABAF022D1
-:101D90007533008F3490F96F121BEA9000022254C1
-:101DA0000F75F008A42400F582E434FFF583227552
-:101DB000F008A42441F582E434FFF583227480F016
-:101DC00008E6FFE975F008A42274B22522F582E442
-:101DD00034FAF5832275F008A42442F582E434FF36
-:101DE000F5837480F02290FF82E04408F02290FF97
-:101DF000FEE04403F090FFFCE054FDF0227867E63B
-:101E000054FDF690FFFD7465F022121BCCE0FEA39A
-:101E1000E0FF4E227B017AFA79B72290FF80E044FE
-:101E200008F02290FF83E0547FF022E0FF90F96AEF
-:101E3000021BEA90FFA4E04402F022753901753AD2
-:101E400009227B017AF9797222D3E53C9408E53BBB
-:101E500094012290FABEE0FF90FABAF02290FFA41B
-:101E6000E054EF2290FFB4E054EF2212104B788838
-:101E7000EFF6122AC71222FA8E8324091222A1E059
-:101E8000FD1222E890000A122302240A1222A1E085
-:101E900090000B121AFA1222FAF5828E83A3A3A3E2
-:101EA000E0F55312230624041222A1E0F5548F8298
-:101EB0008E83A3A3E0F555E553C41313135401789F
-:101EC00088F6D394004006E55430E101067888E6B0
-:101ED0001222E790000CEF121AFA1222B5A3A3E027
-:101EE000FEA3E0FF53070C5306E6E55330E503433A
-:101EF0000701E55420E50EE553547F7008E55320B3
-:101F0000E703430702E55330E303430710E553308B
-:101F1000E203430720E55354036003430740E553BE
-:101F200030E103430780E55330E403430601E55302
-:101F300030E603430608E55420E40EE553547F7071
-:101F400008E55320E7034306105307FB5306799037
-:101F50000005EE8FF0121B9FE55530E3125430FF61
-:101F6000C4540F1222E7900008EF121AFA800A12E6
-:101F700022E8900008E4121AFAE55554031222E709
-:101F8000900007EF121AFAE5555404FFC3139000AE
-:101F900009121AFA900007121ABB70131222E8E90C
-:101FA0002409F9E43AFA121AA2FFC313121AE8122A
-:101FB000232724081222A1E0FE8D828C83E582244F
-:101FC000071222A1E0FDEEED1222E7900003EE8F52
-:101FD000F0121B9F1232847D0AE4FF122FB402100C
-:101FE000CE90FAE6E0B403067E007F4080047E00D7
-:101FF0007F0890FADAEEF0A3EFF0900005121ABB1A
-:10200000FF7E0090FAD6EEF0A3EFF070037F082277
-:10201000900008121B48FF90FAD8E5F0F0A3EFF00B
-:10202000AE02AF018E508F51740A2551F551E4353F
-:1020300050F55090FADBE0FF14FE90FAD9E05EFE16
-:10204000C3EF9EFF90FADDF0C390FAD7E09F90FABD
-:10205000D6E094005006A3E090FADDF01220A960CB
-:1020600003E0FF22122E2B90FAD6E0FEA3E0FF4EF3
-:10207000602B90FADAE0FCA3E0FDD3EF9DEE9C40EC
-:1020800007E090FADDF0800890FAD7E090FADDF0F2
-:102090001220A96003E0FF22122E2B80CA7B007A57
-:1020A000007952E4F52DF52E7D011226987F00224D
-:1020B000AA50A9517B0190FAD8E0FCA3E0FD90FA68
-:1020C000DDE0F54A12296090FADCEFF022EF24AE51
-:1020D000605224FE602E24FE7003022169240660F3
-:1020E000030221B17871E654FBF690FFA5E0F522DA
-:1020F000440FF0743390FA94F0E522A3F090FAB212
-:102100007401F0227872E654FBF690FFB5E0F522F8
-:10211000440FF0744390FA96F0E522A3F090FAB3DE
-:102120007401F02290FAA0E0A320E5030221B1900F
-:10213000FFA6E090FACDF0A3F090FACDE0FF540FA7
-:10214000FE601090FFA612230D90FFA6E090FACD3E
-:10215000F080E690FACEE0FF7434FE122D85EF7029
-:102160005790FACEE0FF743490FA98F0EFA3F02283
-:1021700090FAAAE0A330E54090FFB6E090FACDF0E7
-:10218000A3F090FACDE0FF540FFE601090FFB6125E
-:10219000230D90FFB6E090FACDF080E690FACEE005
-:1021A000FF7444FE122D85EF700E90FACEE0FF749E
-:1021B0004490FA9AF0EFA3F022C0E0C0F0C083C0D0
-:1021C00082C0D075D000C000C001C002C003C004EE
-:1021D000C005C006C00790FF92E0FF90FACCF090D7
-:1021E000FF92E4F0EF121BFC22692622692E220CDA
-:1021F00030220C32221A38222C3A225E3E224944E6
-:10220000223E462254502254522254542254560004
-:1022100000226E90FACCE0FD7C007F0112115E80FE
-:10222000627C007D017F0312115E90FFFEE044207E
-:10223000F080507C007D017F0212115E90FFFEE075
-:102240004440F0803E7C007D017F0512115E8033AA
-:102250007C007D017F0612115E802890FACCE0FFA1
-:102260001220C6801E7C007D017F0412115E801347
-:1022700012284E800E90FACCE02400FFE434FFFEDA
-:10228000122D85D007D006D005D004D003D002D0BF
-:1022900001D000D0D0D082D083D0F0D0E032787C92
-:1022A000E6FE08E624048E83F582E43583F5832276
-:1022B00074132524F582E434F9F583227880E6FE50
-:1022C00008E6F5828E83227880E6FE08E6AA06F804
-:1022D000AC027D017BFF7A3279567E007F0A021ABA
-:1022E0007C7880E6FC08E6F5828C83A3A322FF902D
-:1022F000F96F021BEA90F96A121BEA900004021AB5
-:10230000BB787EE6FE08E6FF22ED121AFA8F828E77
-:1023100083E58222EFF090FACEE0540F4EFEF0EF0C
-:1023200054F04EF0227880E6FC08E68C8322787E1A
-:10233000E6FC08E6FD8C8322A607E6246EF8E6227A
-:10234000787EE6FA08E6FB2208E6FE08E68E83229F
-:1023500026F618EE36F622EF240BF582E43EF583DE
-:10236000228B828A83E582228B258A2689278D28E3
-:1023700090FAD2E4F0A37402F07B017AFA79D1905A
-:10238000FAD2E0F52DA3E0F52E7D0112269890FA01
-:10239000D1E065286046A3E0FFA3E0A3CFF0A3EF60
-:1023A000F01223F090FAD1E0FF90FAD4E48FF0120B
-:1023B0001B1C1223F090FAD4E0FFA3E090FAD2CFD6
-:1023C000F0A3EFF090FAD1E0A375F000121B1C907F
-:1023D000FAD2E475F004121B1C02237290FAD3E0C7
-:1023E0002401FF90FAD2E03400AB25AA26A9278F5A
-:1023F000F0121B807F00227B017AFA79D190FAD209
-:10240000E475F001121B1C85F02EF52D7D010226CE
-:10241000988F62122AC71222FA8E83240B1222A1ED
-:10242000E054FBF04402F0081222DCE0A330E50C9B
-:10243000122306240B1222A1E04401F0787CE6FE70
-:1024400008E6FFF5828E83E054B8FDF0E56224FED5
-:102450004420FC4DF0E58224041222A1E054B8F09F
-:102460004CF08F828E83A37403F018E6FE08E6FF1B
-:102470008E8324051222A1C083C082E0FD749925B9
-:1024800062F582E434FAF583E054FC4403FCED4C3D
-:10249000D082D083F08F828E83E04480F0E5822466
-:1024A000041222A1E04480F0123284746E2562F896
-:1024B000740446F67F002212104B7F0212126178DC
-:1024C00067E64402F6D2B0D2B190F916E030E707E1
-:1024D00090FF9EE4F08036D2B390FFA4E090FA7EA5
-:1024E000F090FFB4E090FA7FF090FFA2E090FA7CC9
-:1024F000F090FFB2E090FA7DF090FFA47430F0907D
-:10250000FFB4F090FFA27440F090FFB2F090FAE7B1
-:10251000E5A8F075A88190FF92E06004E4F080F6F1
-:1025200090FFFD743AF043870100000090FA7EE0CE
-:1025300090FFA4F090FA7FE090FFB4F090FA7CE076
-:1025400090FFA2F090FA7DE090FFB2F090F918E0D1
-:102550006002C2B390FAE7E0F5A80210CE8B5C8A65
-:102560005D895E122E0D90FAC3121BF3AA5DA95E5F
-:1025700090FAC6121BF390FAC7E475F00A121B1CFE
-:1025800090FAC6121BEAE92401F9E43AFA90FAC972
-:10259000121BF3AB5CAA5DA95E122E19E0FFC313F8
-:1025A000F0E47882F690FAC1E0FF7882E6C39F50AB
-:1025B0004A90FAC3122DEEFF7883F690FAC6122DD8
-:1025C000EEFEF45FFF7883F6122DEB5E4FFF78830B
-:1025D000F6122DF475F002121B1C90FAC7E475F088
-:1025E00002121B1CAB5CAA5DA95E900004121ABB10
-:1025F00030E403122E0378820680AAE490FAC2F037
-:10260000228B568A57895890FAC27406F0E490FAE1
-:10261000C1F0121AA2246E6026147070122DDA60B6
-:1026200009243070121225568062122E24121FDAED
-:1026300090FAC2EFF0805590FAC27481F0804D128A
-:102640002DDA60092430703E122D30803FE5582489
-:1026500003F9E43557FA7B01C003C002C001122E12
-:1026600024900005121ABBFD900008121B48F52E9D
-:1026700085F02DD001D002D00312269890FAC1EF38
-:10268000F0E4A3F0800690FAC27481F090FAC2E000
-:10269000122E24900002121AFA90FAC1E0FF228B47
-:1026A000298A2A892B8D2CE52C7003AF2C22122E1F
-:1026B000537016122E72E52D90FFF1F01231D850A2
-:1026C000F2122725400B7F0022122E72122725506E
-:1026D000F890FFF374A1F0E52CB4010790FFF0E04F
-:1026E0004402F090FFF1E4F0F52FE52C14FFE52F04
-:1026F000C39F502A1231C14003AF2F22C3E52C954E
-:102700002FFFBF020790FFF0E04402F0122E650594
-:102710002F7401252BF52BE4352AF52A80CC1231B4
-:10272000C140037F1822122E65AF2C2290FFF1E5E5
-:102730002EF00231D812104B788412233130E10888
-:102740007F131231A90227BC7884E6F924131222E0
-:10275000ADE0FF30E7405403601EE9B4030D90FF85
-:102760009EE054FEF0E04404F0804690FF9EE0546A
-:10277000FDF0E04408F08039E9B4030D90FF9EE0DD
-:1027800054FBF0E04401F0802890FF9EE054F7F005
-:10279000E04402F0801BEF54036014E9B403099095
-:1027A000FFA4E054DFF0800790FFB4E054DFF0C2F4
-:1027B000B390F918E004F0AF011222EEFD122FE5FC
-:1027C0001231A90210CE75A840787FE4F6D8FD75C5
-:1027D000818B02280902318CE493A3F8E493A3408F
-:1027E00003F68001F208DFF48029E493A3F854078C
-:1027F000240CC8C333C4540F4420C8834004F45687
-:10280000800146F6DFE4800B0102040810204080BE
-:10281000902BA9E47E019360BCA3FF543F30E509EF
-:10282000541FFEE493A360010ECF54C025E060A8BE
-:1028300040B8E493A3FAE493A3F8E493A3C8C58251
-:10284000C8CAC583CAF0A3C8C582C8CAC583CADFBF
-:10285000E9DEE780BEE4F522121DC2E0B4040DE516
-:10286000222403FF123013121DC2E4F00522E522D8
-:10287000C3940240E3E4F52275F002E52290FA9455
-:10288000121E03602C122D85EF605275F002E522B6
-:1028900090FA94121BCCE4F0A3F075F00AE52290B4
-:1028A000FAA0121BCCE0A330E633121DC27404F070
-:1028B0002275F002E52290FA98121E036016122D7E
-:1028C00085EF601975F002E52290FA98121BCCE4AE
-:1028D000F0A3F0220522E522C39402409B22E4FFEC
-:1028E00090FF83E0540FFEEFC39E501774F02FF556
-:1028F00082E434FEF583E0121CC1121AE80F121CA8
-:10290000B080DDEFFDC3E53A9DF53AE5399400F579
-:1029100039D3E53A9400E53994004006E490FF830A
-:10292000F022121DDF121E34121E26121AA2246E6D
-:10293000601E14601B248E702D900001121ABBFFC4
-:1029400024FC600304701FEFFD7C007F0D02115E0C
-:10295000121E3B1225FA121D89121ABB60030232A5
-:102960007AE4FF12326E228B458A4689478C488D65
-:1029700049D200122E537016122E72E54890FFF1C4
-:10298000F01231D850F21229D5400B7F1822122EA6
-:10299000721229D550F8E4F54BE54A14FFE54BC314
-:1029A0009F50171229C540037F1822054B7401253B
-:1029B00047F547E43546F54680DF90FFF0E04401F7
-:1029C000F01229C540037F18227F0022AB45AA469A
-:1029D000A947121AA290FFF1F00231D890FFF1E559
-:1029E00049F00231D87B017AFA79CFE4FD122361F4
-:1029F00090FACFE475F009121B1C7B007A00792352
-:102A000090FACFE475F001121B3285F02EF52D7D82
-:102A10000112269890FFF7E523122A3990FFF6E578
-:102A200023F090FACFE4F0A37406122A39E523309C
-:102A3000E00790FFFC7494F02290FFFC7490F02269
-:102A4000F07B007A00792390FACFE475F001121B35
-:102A50003285F02EF52D7D0102269890FF9374812A
-:102A6000F090FFFFE0600690FFFC7410F090FF9183
-:102A7000E04490F0E490F916F0A3F0122B3912160E
-:102A8000C91230697E077FD012122A7E0F7FA012F2
-:102A90001244E47877F67877E6FFC39406500B7417
-:102AA0006E2FF8E4F678770680EC7F031230B29050
-:102AB000F916E020E4057F041230B290FF9BE4F0A9
-:102AC00090FF9AF090FFE8E0541FF0D2A82215651D
-:102AD000A865A6073008051211AE80F8D208A865CF
-:102AE000E6FFB4030F787C76FF0876E00876FF08EF
-:102AF00076A0800D787C76FF0876E20876FF08766F
-:102B0000B0788076FA08769EEF24FD75F00AA4AEC0
-:102B1000F01223497B017AFF79487868121BE1A8FB
-:102B200065E624FD75F008A4FFAEF0786A1223492B
-:102B30007908786B121BE1786DEF12234905652245
-:102B400090FFF0E054ABF0E04420F090FAE674021D
-:102B5000F07B017AFA79CFE4F52DF52E7D0112266E
-:102B6000987E0090FAE4EEF0A3EFF064017010900C
-:102B7000FACFE0B4520990F916E054EFF0802990B2
-:102B8000FAE4E07004A3E06401701090FACFE0B4BE
-:102B9000100990F916E04410F0800D90FAE67403E5
-:102BA000F090F916E054EFF090FFF0E04420F022AE
-:102BB000036801FF48036B01FF080266000044FA46
-:102BC000980000000044FA940000000042FAB200AD
-:102BD0000042FA7E000042FA7C000042F96DFFFFDD
-:102BE00042FA7A000041F966FF41F91C1941F915D2
-:102BF0000043F9190A320241F9682041F96920417C
-:102C0000F9650041F9670044F8000000000042F94E
-:102C100016000041F9180001200041F804000012DC
-:102C2000104B788AEFF6122AC71222EE30E029788C
-:102C30007C1222B7E0547FF0786B121BD890000210
-:102C4000121ABB30E709900002E4121AFA80E97800
-:102C50007C1222B7E04480F01222EE30E11E1222F4
-:102C600097E0547FF01232197868121BD890000256
-:102C70007480121AFA122297E04480F0123284E42F
-:102C8000FF1231A90210CE12104B7885EFF61231E7
-:102C9000501231A97885E6FF24131222ADE0FE30F0
-:102CA000E716EFB4030990FF9EE054FAF0802290FB
-:102CB000FF9EE054F5F08019EE54036014EFB40366
-:102CC0000990FFA4E04420F0800790FFB4E0442086
-:102CD000F090F918E014F0E07002D2B30210CE12B6
-:102CE0001E1CE53A64097004E53964016048C3E5D7
-:102CF0003A9408E539940040117F08EFE53A9408CA
-:102D0000F53AE5399400F5398005AF3A121E34E4FE
-:102D1000FEEEC39F5019121CC1121AA2FD74F82EA8
-:102D2000F582E434FEF583EDF00E121CB080E2EF84
-:102D3000547F90FF81F0228B598A5A895B122E1999
-:102D40007005A37408F022AB59AA5AA95B122E0D84
-:102D500090FAC9121BF3E55B2403F9E4355AFA90A3
-:102D6000FAC3121BF3E490FAC2F0788BF690FAC122
-:102D7000E0FF788BE6C39F5012122DEBFF122DF46B
-:102D8000122E07788B06122E0380E222AD07AC06C6
-:102D900090320AE493FF7874F6540F121DA8E008ED
-:102DA000760008F618121CD9C333CE33CED8F9FFFB
-:102DB0007875EEF608EFF6EE44F818F6EF08F690A0
-:102DC000FF7AE020E7037F00227875E6FE08E6F54B
-:102DD000828E83ECF0A3EDF090FF7A7402F07F0115
-:102DE00022AB56AA57A958900003121ABB54F024DC
-:102DF000A02290FAC9121BEA021AA290FAC3121B6F
-:102E0000EAEF121AE890FACAE42290FAC4E475F0E4
-:102E100001021B1C900008121B48AAF0F97B01223A
-:102E2000900005121ABB90FAC1F022AB56AA57A91E
-:102E3000582290FADDE0FF7E00C390FAD7E09FF0C1
-:102E400090FAD6E09EF090FAD8EE8FF0121B1CEFAD
-:102E50002551F551EE3550F5502290FFF0E054FE2B
-:102E6000F0E054FDF090FAE6E064032290FFF2E017
-:102E7000AB29AA2AA92B021AE890FFF374A0F0222A
-:102E80008F64ED700FE564B403057F010231EF7FBD
-:102E9000020231EFAF64122AC7746E2564F8E6307F
-:102EA000E20BD209121D33E0547FF08002C209E523
-:102EB00064B403077F811231EF80057F821231EF06
-:102EC000300907121D33E04480F0123284221210C0
-:102ED0004B90FFFDE04460F0D20190FFFCE0440223
-:102EE000F090FF00E030E71390FF83E04480F04370
-:102EF000358090FFFCE04401F0800D121DDF53355A
-:102F00007F90FFFCE054FEF090FF81E04480F012DF
-:102F100002DE121DE70210CE12104B7889EFF6D2B6
-:102F200000122AC790F96A121BEAE92403F9E43A6D
-:102F3000FAC0027880E6FE08E6AA06F8AC027D0137
-:102F4000D0021222D31232847889E6FF121387123C
-:102F500031A90210CE8F63122AC7787C1222B7E003
-:102F6000543FF0E58224041222A1E0543FF01223E2
-:102F700041240B1222A1E054F8F0123284746E2521
-:102F800063F874FB56F67F002212104B122AC71208
-:102F900022FA240612229FE0FD1222E8900003127A
-:102FA000230224051222A1E0900004121AFA123220
-:102FB000847D02E4FF122FB40210CEAE05121D8EE6
-:102FC000EF121AFA0E0E0EEED3953CE4953B40023A
-:102FD000AE3CEED3940874809481400A7E03900046
-:102FE000027402121AFAAF0612326E22AE07ED54C4
-:102FF00003640160037F1022ED547CC394045003EA
-:103000007F0B22746E2EF8740246F674992EF582A8
-:10301000E434FAF583EDF07F0022BF03067CFF7DE8
-:10302000E080047CFF7DE28D828C83E04480F0E5CB
-:103030008224041222A1E04480F0746E2FF87404FC
-:1030400046F67F002212104BE53A64097004E53918
-:103050006401601690FF83E0540FFFC3E53A9FE5DB
-:1030600039940040051228D7800312327A0210CE1C
-:1030700090FFFCE020E71FC2AF7DFFAC051DEC60B8
-:10308000157E047F00EF1FAA0670011E4A60EC90B7
-:10309000FF92E4F080EF2212104B7866E6FE08E61D
-:1030A000FF30E01230E10F90FFFCE04420F07F049D
-:1030B000121261121DF60210CE8F23C208122AC707
-:1030C0001222C0787E122342240B1222A1E054F86F
-:1030D000F0123284AF23121387228E5F8F60E56077
-:1030E0001560AE5F7002155FD39400EE9400400946
-:1030F0007E077FD012102480E52211DC2EC724B079
-:1031000032603090303E316F2F82272E2C8031126A
-:1031100031311E642F112C180E12104B7886122399
-:103120003120E1077F121231A9800A7886E6FF126A
-:10313000240A1231A90210CE12104B7887122331C3
-:1031400020E2077F111231A9800A7887E6FF122F4B
-:103150004E1231A90210CE8F61122F4EAF61122A8A
-:10316000C71222C0123284746E2561F874FD56F6BF
-:10317000AF611213872212104BE53A64097004E51F
-:103180003964016005122CD88006121E14121E1C10
-:103190000210CE122A5412130390F804E0FF6005C7
-:1031A0007D011212A01229DE12133F1211BC80E31E
-:1031B000121D8EEF121AFAE4F533F534EF600302B4
-:1031C000327AE4FF12326E2290FFF0E0FF54A060EA
-:1031D000F7EF30E50890FFF04420F0C322D32290AF
-:1031E000FFF0E0FF542860F7EF30E50890FFF0446F
-:1031F00020F0C322D322EF30E708121D45E054DF50
-:10320000F022EF121D98E054DFF022810182028348
-:10321000038740004000400040004000400008009C
-:10322000787E1222B7A3A3E0FF30E706547FF04474
-:1032300080F022853B39853C3A90FF82E054F7F0DC
-:10324000A3E0547FF022E4FEEE90320493B507022F
-:10325000D3220EBE07F2C32200081828380181903D
-:103260000A02000011130012104B7F021210DA1232
-:103270001DF60210CE7539008F3A121CE0122CD8C0
-:0E32800022121E1C121DDF121E1422C2082272
-:00000001FF
-//**************************************************************
-//* Edgeport Binary Image (for TI based products)
-//* Generated by TIBin2C v2.00 (watchport)
-//* Copyright (C) 2001 Inside Out Networks, All rights reserved.
-//**************************************************************
diff --git a/firmware/emi26/bitstream.HEX b/firmware/emi26/bitstream.HEX
deleted file mode 100644
index 044d3f664385..000000000000
--- a/firmware/emi26/bitstream.HEX
+++ /dev/null
@@ -1,4391 +0,0 @@
-:10801000FFFFFFFFAA9955663000800100000007AE
-:10802000300160010000000B3001200100803F2D75
-:108030003000C00100000000300080010000000995
-:10804000300020010000000030008001000000012D
-:108050003000400050003E040812100000000000F4
-:108060000000000000000000000000000000000010
-:1080700000000000000000000000000000004004BC
-:10808000800000000000000000121000000000004E
-:1080900000000000000000000000000000000000E0
-:1080A000000000000000000000000000000040840C
-:1080B000800000000000000000020000000000003E
-:1080C00000000000000000000000000000000000B0
-:1080D0000000000000000000000000000000080098
-:1080E000C0000000000000000002000000000000CE
-:1080F0000000000000000000000000000000000080
-:10810000000000000000000000000000000000006F
-:1081100080000000000000000012000000000000CD
-:10812000000000000000000000000000000000004F
-:10813000000000000000000000000000000000043B
-:108140008000000000000000081300000000000094
-:10815000000000000000000000000000000000001F
-:10816000000000000000000000000000000000000F
-:10817000900000000000000000120000000000005D
-:1081800000000000000000000000000000000000EF
-:10819000000000000000000000000000000000845B
-:1081A0009000000000000000F710011400250005F9
-:1081B0004001500094001500074001D000940025B4
-:1081C00080016002D800F6002F8002E004D8374416
-:1081D0009000000000000000C005F200CC903920A3
-:1081E0000D9803D200E78037040EF1837E00DF9004
-:1081F00031E48F79037C20DF2233C00CF022300081
-:108200007000000000000000801062008024222026
-:10821000089812E2008B8120940874022E008A01D3
-:1082200022C80892023D808B60228008B0022004A0
-:1082300030000000000000008805C800A0002000F9
-:108240000B1002C000A10024094A32024800B1000C
-:1082500062C009A046CC2493492A8048302262019A
-:108260007000000000000000C015A812A800220045
-:10827000089002E0008980224408B012A800A940BA
-:1082800022C0089082AC009B042AC408B00270048B
-:10829000600000000000000000148400E980B26467
-:1082A0004DA003EA20E9C036400EB0034400FB9025
-:1082B000B2880DBC03EC085B0038602CB06340044E
-:1082C0007000000000000000E001B426DD9037409F
-:1082D0004FE013F280FD003DA00D700375005E00BD
-:1082E0003FA40DF9035C10EB0037200F3003B800FA
-:1082F00060000000000000004010AC00E980324047
-:108300000CA183E800E90032420EB003AC48E9005A
-:108310003A800EA403EC00EB00B2030EB00B100485
-:108320002000000000000000C8052E8089D12040F8
-:1083300008A002C0008180225808F5022F408B005F
-:1083400020C00830437C008700224008F002320041
-:108350004000000000000000E00542019A4428A20D
-:10836000081802C080A180A0000830028E00AB0077
-:108370002C400A30020C00A30020440A30023800CE
-:1083800050000000000000006001320096822BA225
-:10839000885A02F200058029A0087842BE008E8427
-:1083A0002F610AD8024E10A78020280878021800F2
-:1083B000400000000000000048080800F224388057
-:1083C0002C1A03C400E058A0802E30038841E30239
-:1083D0003C400620038C00E30010000E31431202E3
-:1083E0000000000000000000401D9800EE013784EE
-:1083F0009FD903F048FD1037C007B0035C00F610AA
-:1084000033C00DE103ED20DF103F480FF023D0060D
-:108410006000000000000000A805E402CB8030C02E
-:108420000CA003E202C9003A400DB6036400EB0061
-:108430003EC00FB003ED00FB013EE00CB002EA00CD
-:10844000700000000000000048119400870021C067
-:10845000286002D00085002D8048F0821C00B70003
-:108460002D000B5002DC00B7A02F80287A02D20426
-:108470006000000000000000C100BE00878021E015
-:10848000286802D70084802DE04979065309B58019
-:108490002DE20B7802DE80B7902DB0087902F00053
-:1084A00020000000000000004814CC10830128C800
-:1084B000082002C20681002CC88830620E21B3A0B9
-:1084C0002CC10BB602CC00B3002CE0083002D20461
-:1084D0003000000000000000E815A800CA40B0808D
-:1084E0000C2C02F800C6203F900DA0037B01EEE0AB
-:1084F0003FB40FEC03E800FA003FA00CA003FA041D
-:1085000060000000000000004800E300F8092600B9
-:108510000FC183E010F8403C000F8003E001F80039
-:108520003E000F8103E004F8003E100F8003D200EC
-:1085300030000000000000000810E402C9003E40C6
-:108540004F906326843902B2400C91032400F90055
-:108550003E400F90032400F1003A440F9003C20400
-:1085600030000000000000008004450089402E40DB
-:1085700008920A2400B931226088948A2420B90024
-:108580002E400B90022400B90022680B9002E000FC
-:108590001000000000000000180524A08D842F406A
-:1085A0000BD1022400B900224A0810022C40B90065
-:1085B0002E400B90022400B9002A400B9002C60006
-:1085C00040000000000000000804140085802D40D9
-:1085D000085002040CB900A0500814220400B10095
-:1085E0002C400B10020400B128204A0B1302C201D8
-:1085F0000000000000000000B80D6000C0503E8088
-:108600000FC0432000F80030002C80232000F851D8
-:108610003E148F850B2140F8703A080F8483EE03D7
-:108620005000000000000000981DC400F9043E4006
-:108630000F9023D400FD003F500F9403F404FD007D
-:108640003F418FD043E50CF9023F4A0F9203E60207
-:1086500070000000000000008805D401FD003D40CE
-:108660000CD013F400D500336A1CDC833400D10431
-:108670003E500C9103E6C0DDB0336A2C9C83E600CB
-:1086800070000000000000003810E009F8802E00A3
-:10869000888000E800BA0022B0088E02280088A86E
-:1086A0002628088A22E20088E42230088C02CE04C0
-:1086B00030000000000000000805C400B1282E4072
-:1086C000081002C400990020424810026401918001
-:1086D0002C48081002C4C08140204A081202C2017E
-:1086E00070000000000000001815A494A9022E409C
-:1086F0000A90026400B90082600890026600891046
-:108700002462089002E40089022240189002C60404
-:108710006000000000000000A015E600B9043E4023
-:108720000C9013E400D1C012502890034400D900EB
-:108730003E40289203E402D90032428C9012E804B1
-:1087400070000000000000002801A620F9003E4152
-:108750002D9003E400F9203E404F9001A400F90061
-:1087600036408F9207E400F100BE400F9003CA002C
-:1087700060000000000000002810A000C8003E209B
-:108780000C8003E040F80036122C0003E0C0F80033
-:1087900032100D8403A000F8023E080F8000CA04C6
-:1087A000200000000000000028053A908E002DA057
-:1087B00080E802FA00BE40238008E802FA008A003E
-:1087C000368008A002E800BA002F800BA0038A00C0
-:1087D00040000000000000002805460283002C80B5
-:1087E000082242C680B1602EF4083822CE00A300D1
-:1087F00020C0083002AC00B1002E400B3002CA008D
-:108800005000000000000000A0011E0285012DC2E2
-:10881000A84402D400BD0129401868D2DC008F8032
-:1088200025CC287342DC80B5302DC01B7202E800D5
-:108830004000000000000000A8081E04C6823DE0C1
-:108840000C4812D610F5803CA00C7003DE00E790B7
-:1088500023EA047A039E00F5803DE00F7A03EA02E2
-:108860000000000000000000080DAC009C003EC0AD
-:108870000F8003E410F90036010FA003C000EB00E5
-:108880003ED84EB083EC00F9003EC00FB4438206E0
-:108890006000000000000000C005DE00CF8431E071
-:1088A0000EC843D600CD8033E0CDD9033A00FF880F
-:1088B00033E00FF913FE24FD803F200CF6831000F7
-:1088C0007000000000000000A8119C00850021C479
-:1088D000284082D000D500238048C9021C00B70080
-:1088E00021C00B7102DE80B5102DC028F0022A04D1
-:1088F000600000000000000010009C00960021C0F5
-:108900000A4102F5408D0021400952029820B7002B
-:1089100021C00B7006DC80B5002DC0087002040079
-:1089200020000000000000006014CC10980000C07F
-:10893000880482C000910420030900028A00B30A5F
-:1089400020C48B3402CC00B9002CC00030021804C3
-:108950003000000000000000F815AC00DB00B0C0E3
-:108960000E9C02C500C110B2C00DB00BA708FF00DD
-:10897000B3C00FFA03FC00FD003ED40CF00B2E0434
-:1089800060000000000000008000EC04ED003E40AC
-:108990000F8403E540F9403E60CEB4436400FB80A1
-:1089A0003EC20FB013EC00F9023EC04FB003E1002D
-:1089B00030000000000000009010FF00CE0033C027
-:1089C0000EC0077404EC0011800CCA03FE60FF00A7
-:1089D0003FC00FF0833C00DD00B3502CF0032004B7
-:1089E000300000000000000081004C048B0B22705E
-:1089F00008080367208A88A200288402E700BB00D9
-:108A00003EC00BB0022C00B900226108B0036040E8
-:108A1000100000000000000080052C008B2022E2E6
-:108A20000A8C022600A9802AC008B442ED00BB00CF
-:108A30002EC00B30022C00B90020800830026000EC
-:108A4000400000000000000008040E018100A0C0EA
-:108A5000088102440081002881083202CC00B30062
-:108A600028C00B30020C80B10020C0083012420137
-:108A70000000000000000000800D6C00C20132C048
-:108A80002E80162C08E9003A400C8003EC00F70019
-:108A90002FC00FF00B2C00D90030400CF003600306
-:108AA0005000000000000000A00DF808FF003FC0CB
-:108AB0000FC217FC00F70037000F8403FC00FF0013
-:108AC0003FC00FF003ED00FD003F400FF003E8064C
-:108AD0007000000000000000C005FC00CF30174807
-:108AE0000C5903B900DF2835240D82A37C80FF00D8
-:108AF0003FC80FF203E4A0EF803FE18CD843300081
-:108B000070000000000000008010ED488934A37060
-:108B100028B02360008BC0224008B4822F40BFD110
-:108B20006FF48EBD02E700BB803AE008980A280483
-:108B300030000000000000008805C4B09100A8507B
-:108B400008B202C884930024490B02024C00B3040B
-:108B50002CC00B30428400B3002E000AB012220158
-:108B60007000000000000000C011AC0299182A44F7
-:108B700008B882A201BB0028600AA0126C00BB00EA
-:108B80006EC00AB002E400BB002A002AB00238041A
-:108B900060000000000000004011E408DAC03A6004
-:108BA0000C180AEB04DB0036E00785836C00FB0041
-:108BB0002EC00FB043E400EB003E880E18031004F3
-:108BC0007000000000000000E0419C10E9003760E8
-:108BD00087F0177000CF0137C04C9803BC00FB0032
-:108BE0003FC20FF003E400FF403FE40DD903F00063
-:108BF00060000000000000004010A400F4003040BD
-:108C00000FB4039900FB003EC00D04232C08FB8821
-:108C100032C00FB003E600DB103E020FB083D00479
-:108C20002000000000000000C8052C00B950A24838
-:108C30008BB0032000D7802ED80080023C00BF807C
-:108C400023E88BF002F4408B400C4203B602F200A2
-:108C50004000000000000000E0054C00B24400C8E5
-:108C60000B30128C00A38024C80B000ACC00B34444
-:108C700004C01B3602C501830C2CA00B3002F80087
-:108C8000500000000000000020011E08B790216481
-:108C90000BF8024A0497812FE40A78029E00B780FD
-:108CA00021E08B7882D68687842DA00B7802C000C5
-:108CB000400000000000000048080400F20030C03E
-:108CC0000F30038C00E30A3CC00F18038C00F30242
-:108CD00030C01F3001C680C3003CC00F1203DA024F
-:108CE0000000000000000000400DBC00FF003F41FC
-:108CF0000FF003B808FF083FC00DF0033C20FF0849
-:108D00003BD20FF003F440EF003FC40FD003D00676
-:108D10006000000000000000A805E400FE0032C270
-:108D20000C300B2600FB8036C00DA003EC00FBE0EE
-:108D300032D00FB8436444DB043E800FB003E2003E
-:108D4000700000000000000048119C00B700A1C0A6
-:108D50008870031000B72021C0087002DC80B33097
-:108D600031C80B7402140087402DC04B7002D20032
-:108D70006000000000000000C0009620B68020E0E7
-:108D800028F8029410B78127E2097802DE00B7A024
-:108D9000A9E80B3802760087802DA00B5802F0005E
-:108DA00020000000000000004814CE10B30020C4D2
-:108DB0000820028010B30022C808B002CC11B30210
-:108DC00028C00B3002040093802CD20B1002D20476
-:108DD0003000000000000000E815A800FE4032A0AE
-:108DE0000CE4039880FA0037A00DE083E800FE0051
-:108DF0003A800BA0036800D8A03F900FA003FA04AC
-:108E000060000000000000004800E008F8083E0094
-:108E10000F80032000F8403E000F8003E000F804BC
-:108E200030100F8003E002E8003E000F8003D20004
-:108E300030000000000000000810E400F1003240A3
-:108E40000E9083A400C9803E400E9003A400F90058
-:108E50003E400C9003E400C8003E408F90030204A3
-:108E6000300000000000000080046400B940A062EF
-:108E7000081002241089002E400890022400B90036
-:108E80002E52089402C40089402E400B100360103B
-:108E9000100000000000000018052400B91822444A
-:108EA0000A9002AC0089102EC00A9002A400B9807A
-:108EB0002E60089802E60289082E400B90020600F8
-:108EC000400000000000000008040480B120A04819
-:108ED000089002240881232C500810020480B1203D
-:108EE0002C48281202E48081202C400B9802420575
-:108EF0000000000000000000B80D6140F850320092
-:108F00000E8503A1E0CA003E000E8503A000F80014
-:108F10002E009CA003E000C8283E000F80032E0115
-:108F20005000000000000000981DF440F5103F4480
-:108F30000FD003F400F1103D408FD403E450F9103A
-:108F40003E450F9103D440FC003FC08FD023E60480
-:108F500070000000000000001805E620CDA8334096
-:108F60008DD0032680CD003D500C9A036400F9A0FB
-:108F70007A6A0F9A63E680C9803E400F900306002C
-:108F800070000000000000003810E10088E03600AA
-:108F900008800A2142C8002E290CA4422000B840B3
-:108FA0002E000B8102E10088023A010BC0020E0480
-:108FB00030000000000000000805C40281082440C1
-:108FC000091002040091002C404B14024400B5101B
-:108FD00029400B5002F500B5002D400BD0020201D4
-:108FE00070000000000000001811A6018900264052
-:108FF000089402240189002E401A90026C00BF02DE
-:109000002F400BD002F402BD802B408BD83A0604CF
-:109010006000000000000000A015E400C905364112
-:109020000D1C032400D9003E422F94036400F90074
-:109030003A400F9003C400F9003E700F100328045B
-:10904000700000000000000028018408F9243E4060
-:109050000F9103E400F9003E410D1003A400F90054
-:109060003E400F9003E400C9003E640F9003CA0025
-:1090700060000000000000002810A008C880320234
-:109080000F80030000C8083A10CE8403E000FC0003
-:109090003F008FC003F080FC003F180FC043CA049C
-:1090A0002000000000000000280528008E00A1809C
-:1090B0000BE0022800DEC2239000A002E800BA0004
-:1090C0002E800BA002E800FA002E800BA002CA003E
-:1090D000400000000000000028054C00998160C09D
-:1090E0000B10020C0090102AFC0B3002CC00B300D5
-:1090F0002CC00B3002CC00B3002CC00B3002CA00D5
-:109100005000000000000000A0011C82954021C01A
-:109110000B50021C8090802301097212DC00B60003
-:109120002D000B4002D000B4092D004B4082E80016
-:109130004000000000000000A8083E80DD80B1E093
-:109140000FDA030F80D48039E00B7A03DE00F5805C
-:109150003D200F4803D610F6813DE08F6803EA02F8
-:109160000000000000000000081DAC00ED003E0003
-:109170000F910BEC10F8003E000EB003EC00F8006D
-:109180003EC04FB003E800E9013E000F9003C20665
-:1091900060000000000000000005FE20BF8133A435
-:1091A0008C19033E00CD803FE00FF8833E00EF8036
-:1091B0003FE00FF913FA10FD803FA40FD803C00061
-:1091C0007000000000000000A8119C00BF2031C208
-:1091D000085A023C0287002D940B700A1C4086102E
-:1091E0002D000B4002D400F6002D404B6002EA0433
-:1091F000600000000000000000009C00B701238018
-:109200002850021C0084002DC00B30021C00B50049
-:109210002D000B4006D040B4082D800B4802C00042
-:1092200020000000000000002014CC00B308A020A3
-:1092300008118A0E0080002C900B37020C00900061
-:109240002CC00B3042CC04A3802C500B3002C8043D
-:109250003000000000000000A815BC00F98032605A
-:109260000CD4033C8088003ED00FF8032800FA009D
-:109270003EC00FB007EC01BB803E540FB006EA04BD
-:1092800060000000000000008000EE08F9803AC095
-:109290000F9003EC00F8403E580FB043E900EB4458
-:1092A0003E000F8003E00DF8003E800F8003E000D9
-:1092B00030000000000000000110DC00CF0033404F
-:1092C0000CD0033C30CC003BC02DF003D802CC00C6
-:1092D0003D000CC003F400EE0237400CE003C04434
-:1092E000300000000000000081046C18838420001E
-:1092F0004A10020C00A8482E6008B002E90089401C
-:109300002EC008B002E810B10120800A9003A040EE
-:10931000100000000000000080052C008B82220855
-:109320000890022C1488042C0808B012E8008A0067
-:109330002EC00AB002E801B9002604089002E0003D
-:10934000400000000000000008040C008380A2C060
-:109350000A92022C00A2002C00083402C8008300EC
-:109360002C00280002C401BA0022C0022006C2015B
-:109370000000000000000000000D6C00CA00B200F8
-:109380000C920B2C04C8043A000CB403E800C8008B
-:109390002E000C8033E140E80036000C8003C0034F
-:1093A0005000000000000000A01DFC00FF003D0078
-:1093B0000FD10BFC01FC003F000FF003D800FD00B3
-:1093C0003FC00FF003FC80FF003FC00FF007A8066E
-:1093D0007000000000000000C015F300CF80356071
-:1093E0004E68435C00E78039C00CC1037E00CF3477
-:1093F00035E14DF2037C00DF383FC80FF803F00081
-:109400007000000000000000C018C800DB8422606B
-:1094100008AC0A2C008B8022300891222C90276106
-:1094200022CA88FC22BF008B622FD009B803B00487
-:109430003000000000000000C805E280A9022440BE
-:109440008234420400A90028C54832024C208330EF
-:1094500020C00831020D00B3202CC40B3002F201F1
-:109460007000000000000000C005AA02B9042260DC
-:1094700028B2022600898802C0083112EC008B0055
-:109480002AD008B002AC002B002EC00BB002B004F2
-:109490006000000000000000C005E200E30036208C
-:1094A0000EA4636E00E1C01AC10C80036870CB008B
-:1094B00036800DB0034C00FB043EC10FB003D00456
-:1094C0007000000000000000E001B804DF003F0071
-:1094D0000FE803FC00FD003F002B98033A007700E3
-:1094E00027E40FF003FC00DF003EC00DF043F8005E
-:1094F00060000000000000005000A468CB203A90FB
-:109500000F24A3AC00E9503AC00EB4832C08EB0042
-:109510003A900EB08BEC80FB003EC00EB00390047E
-:109520002000000000000000C8010A008BA020807D
-:109530000DA8022C04894028E808B2022C00AF00D4
-:109540000280087C033D803F002FC008B002360037
-:109550004000000000000000E0054900034028C072
-:109560002B284A2800A10068D20A2042A401A300A7
-:1095700002400A34020D0033002CC00A3000B8004B
-:109580005000000000000000B8011A00879021E49C
-:109590002BC8123A0085C02B21286802B600A78488
-:1095A00023600838801E00B7802DE00878022E0066
-:1095B000400000000000000048080800C1003854C6
-:1095C0000F26838000E03428C80E2C0B8C00E300AB
-:1095D00078450E30038E80F3003CC80E30039202B3
-:1095E0000000000000000000401DB800F5023F44EC
-:1095F0000D9003F800BD141FC00FE1235C449F428F
-:109600003FC00FF4827D40FF103FC04F7007D0066F
-:109610006000000000000000A805E802CB0038C090
-:109620003CA003EC00E9003EC00CB0032004FB2189
-:109630003E804FB403CF00CB003ECC4FB043EA0096
-:109640007000000000000000C8919800870021C051
-:10965000084002DC04B5002D002D70021C1CB7026E
-:109660002DC00B7202DC0087402DCA8B7002F20401
-:1096700060000000000000008000BA0087882BE036
-:10968000187822D611A4822FE00878021200B7942D
-:109690006D604B7A02DE40B7A02DE00B7806E0004B
-:1096A00020000000000000004814C912838228D462
-:1096B000980006EF05B1902CC109B4020C04B30167
-:1096C0006CF00B3002CC00BB002EC00B3002D20479
-:1096D0003000000000000000E815B840CA803BA040
-:1096E0004CE502F880EE003D802CE00F3880FA0057
-:1096F0003FA90FA003E800BA023E808BA003FA0442
-:1097000060000000000000004800E010F8002602A1
-:109710000F8403E024F8003E004F80A3E030F800FF
-:1097200036020F8023E00408003E000F8003D200C1
-:1097300030000000000000000810E400D900B6412D
-:109740004E990BA40069103E400C9003A410C90070
-:109750003E400D9203E600F9003A400E9003C20429
-:1097600030000000000000008004640081002042FE
-:1097700008149A240089006E500090022410D90227
-:109780006E400B9403A700B9002240089003E0004C
-:109790001000000000000000180506009900A64116
-:1097A0000A90062C00A9096E5008910284048900D1
-:1097B0000E400B9402E549B9000A400A9002C60027
-:1097C0004000000000000000080406008100224064
-:1097D0000812220481A1002C4008160204009120E6
-:1097E0002C400B12428489B1202048081002C2018B
-:1097F0000000000000000000B80D6140D8003600F5
-:109800000A8003A140E8002E000C0023A140C850AC
-:109810002E140D8003E000F8503A000E8003EE0392
-:109820005000000000000000881DD400F500BF407B
-:109830000FD103F444DD023D502BD123F400F91085
-:109840003F400D9103A448F9123E4E1F9003A6021B
-:1098500070000000000000001815F400C5043B4033
-:109860000FD803A780FD00B3680DD843A510C9A089
-:1098700032514F5A433600C9A07A680BD003C60153
-:1098800070000000000000007818CA8888020200FA
-:109890008D84222342F8002204288AA2AA9488E90F
-:1098A00020A80A800A214080E22E280B8002CE04E4
-:1098B00030000000000000004805C420A104A8C03A
-:1098C0000B1C2A2400390420402A1E02E480B11017
-:1098D0002A48091446040081382C5B0B1002D20080
-:1098E00030000000000000001805A412A924224046
-:1098F000299002240039000258081810E601B90026
-:10990000AA44089002240089000E410B9002C6046C
-:109910006000000000000000A005E400E1012A64EE
-:109920002F94132402716012604D9000C502F9005B
-:109930003A400F90232402C9023A400F9002E804F3
-:1099400050000000000000006801A400D9003E6043
-:10995000AF90836488F9203E62039083A400C9001D
-:1099600036600F1003C400F9007E400F9003DA0048
-:1099700060000000000000002800A100C882320042
-:109980006F0003A000D84030000E80036004F8018F
-:109990003E104F808B2200F80032010E8003CA0473
-:1099A0002000000000000000280138000E00A990EF
-:1099B0002FE62088009E8023800AE8032800BA0052
-:1099C00018800DEC023880BA00A28008A0038A003B
-:1099D000400000000000000028056C02838020C8C1
-:1099E0000B20020C01921068C03A3C02CC103B02E2
-:1099F0000CC0283C024E00B30028C0283002CA0028
-:109A00005000000000000000A001140087422BC09D
-:109A10002970229C00B6002BC20A60861C00B72168
-:109A200029C00074025C00379101E0087402A800AC
-:109A30004000000000000000A8081E00C78021E0D0
-:109A40002F78029E00968039E02EF803DE30F7D0A2
-:109A50002DF20078035200F7A23BE00E7807EA02ED
-:109A60000000000000000000081DB400FB000CC056
-:109A70000F3003EC10D300B4C02F80036C48FB0000
-:109A80003EC84D9003A400FB201EC00FB003C206C9
-:109A900060000000000000000005FE00CC802B2CC0
-:109AA0002FF8037E006E803BA10DD8433E00FF904F
-:109AB00033E00FE933FE00CFC03FE20FD803C00010
-:109AC0007000000000000000A811B44087002104CD
-:109AD0000878021C00860021C0289002DC00B71024
-:109AE00021C00F7302CC0087002DC00B5002EA008A
-:109AF000600000000000000000009D00A400294854
-:109B00006AF0824C00AE00A1C42974025C40A3102C
-:109B100061C20B6006C80087002DC00B5002C00454
-:109B200020000000000000002014E601A3022040F5
-:109B3000283C020C00834220C8081002CD00B3006C
-:109B400028F00B3002CC0183042CC0831002C8041F
-:109B50003000000000000000A815AA80EB0038C00B
-:109B60000A90037C22A24032480DB00B3E00FF0059
-:109B700033F40F9003EC008F023FC00F9003EA0410
-:109B800060000000000000008000E000D9023EC03C
-:109B90000EB603EC00FA203EC04F2423AC60FB005D
-:109BA000A6C00E9003E400FB003CC10F9003E00050
-:109BB00030000000000000000110F802CF0033E088
-:109BC0002CF013BC002E10B1642EF0023C00FF02FA
-:109BD0003FC14DEC63FE00B7003BC00CD803C0444E
-:109BE000300000000000000080046C28818122E029
-:109BF0000A38023C04BAC932E02084022C00BB00BF
-:109C00002EC00B9C02E781BB0422C00A9902E0002F
-:109C10001000000000000000800528408880228895
-:109C200028BC42AC00BA002A80088402AC00BB0009
-:109C30002EC00BB082E890AB0062C008B012E0000A
-:109C400040000000000000000804000089002A8095
-:109C500028B2020C00BA0020C00800028C00B30039
-:109C60002CC00B30204C14B30020C0083002C201BD
-:109C70000000000000000000000D6800C800B2C035
-:109C80002CB203AC00FA003AC04EA503BC00FF00A2
-:109C90003FC009A003E904EF00BAC00CB001C00145
-:109CA0001000000000000000A019FC00F50035C005
-:109CB000AF3403FC00F40039C00FC2037C00FF0185
-:109CC0003FC00FF003FCA0FF003FC00FF003E8050A
-:109CD0006000000000000000C005FC00FF293D20DE
-:109CE0008EC1033248DC8023250EF2033CC0DF84A2
-:109CF00033C90FF203FC00CF8033400CF203300075
-:109D000070000000000000008010ECC0BB602E0856
-:109D100008810220048820204808F1822DC0830099
-:109D200022D409F502FC088B01224028B402200449
-:109D300030000000000000008805CC20B3092C8210
-:109D4000081016A010900828480A32020C00BB0028
-:109D50002CC00B3002CC02930120008A3122E20198
-:109D60007000000000000000C015AC04BB002C8097
-:109D7000088602A020A0002A600AB0102C00AB0CBC
-:109D80006EC009B002CC009B0022600AB002F00451
-:109D900060000000000000000015EC00BB003E3435
-:109DA00008A00B8300D9023AE02EB00B2C00F880FB
-:109DB0003EC04FB003EC00CA40B2720EB00BC004FC
-:109DC0007000000000000000E001BC10FB003F003C
-:109DD0000DF8137048DD4037C28DF003DC00DDC89C
-:109DE00013C00FF003FC00EE407F400D70033800FD
-:109DF00060000000000000004010AC00FB0132C019
-:109E00000410032040E8103AC00DB003AC08F8403D
-:109E1000B2C02CB033A482DA40BA400FB003D004F1
-:109E20002000000000000000C8053C08BF8022C8D8
-:109E300008B700234488D022D0087082FC00B2E02A
-:109E400003F408F50237048BD122604BFD02F200C7
-:109E50004000000000000000E0054C00B310A440EA
-:109E60000800024800A0422AD00130028C00B380D2
-:109E70002CC0093102CC00890022E8033802F80026
-:109E8000500000000000000060011E00B780276441
-:109E9000684A0252008C8021E0087802DE00B78018
-:109EA0002DE21939025E30859821E40B7902D80041
-:109EB000400000000000000048080C00F3203400BF
-:109EC0000CB8034880E22238C00D30038C00F30048
-:109ED0003EC00D3103EC00CB0038060F3083D202B8
-:109EE0000000000000000000401DBC00FF003B011E
-:109EF0000FD0039000F6003FC00FF401FC00FF01FB
-:109F000033C20EF513BC00ED003FC40FF003D006C2
-:109F10006000000000000000A805EC00FB003CC051
-:109F20000EA0016401D80032E02CB5032C00F20031
-:109F30007AC00DB4032D80C90232C00CB0032A00D0
-:109F4000700000000000000048119C80B7002DC088
-:109F50000D6002D001840021C00830021D00B7004E
-:109F600021C80BF4031EC0860021C0087C035204E4
-:109F70006000000000000000C0009EC0B7902DE00F
-:109F8000087806D601B48221E008780A1E00B5C020
-:109F900029E809780236C1978028B00A7A02300091
-:109FA00020000000000000004814CC00BB002CE0A2
-:109FB000093582C0C1A05120E40830028C00BBC426
-:109FC00020C00B300206009318AAB02A300A5204AF
-:109FD0003000000000000000E815A800FA013DACC8
-:109FE0004CEC137810F680B3900CA0032800FE0010
-:109FF0003A810DA00F2A80DE043BA00EA0033A0494
-:10A0000060000000000000004800E000F8003E0092
-:10A010000D8002E100D8483E120F80136000F86006
-:10A020003E00078003A002E8042608058003920092
-:10A0300030000000000000000810E400F9043A407D
-:10A040000C12032482C90036440F10032400F900C7
-:10A0500036400490030400C90012400C900302042F
-:10A06000300000000000000080046400B98122403C
-:10A0700008901A2400890022680B99022400B90074
-:10A08000224068900A24008900A24008900A20001B
-:10A09000100000000000000018052400B91022E0A4
-:10A0A00008940004048B0826C00B90022404B90C09
-:10A0B00024400A1002240023022A40A810020600AD
-:10A0C000400000000000000008040490B12022407D
-:10A0D0000812020C108102A0500B12020480B1057C
-:10A0E00000480A100204A0A100284A081200020138
-:10A0F0000000000000000000B80D6140F850BA14E4
-:10A100000C85030142C85034000F85032140F8003C
-:10A1100036000E80132080E0001A080C00032E0386
-:10A120005000000000000000981DE444F9103F407A
-:10A130002FD113F404F5003F400F910BE440FF28AA
-:10A14000BE4E0D9683D4A2DD28374A0F9383E606D0
-:10A1500070000000000000009805E410CD003F40B2
-:10A160000FD00335025D0131440FD0032400F90004
-:10A1700032600C9883E640D900366A0C9E83260133
-:10A1800060000000000000003810E00088002E0091
-:10A190000B804202808A0022208880032008B88237
-:10A1A0002221088882E24288A8222008CE020E04DA
-:10A1B00030000000000000000805C4028100684073
-:10A1C0000B10028401B900204049100A0400B508B0
-:10A1D0002146085002D4008D20254A0B500242012E
-:10A1E00030000000000000001811A40089046E5423
-:10A1F0000B1012A401A900A2401890162400B90067
-:10A20000234018D002F4008D40214A0BD0024604AE
-:10A210006000000000000000A015E400C9003A50F2
-:10A220008F960B8402F10130488D90032410F900C1
-:10A23000B2402C9003E640D1C036502F900B6804FA
-:10A2400070000000000000002801A400F9003E603A
-:10A250000F99C36400D9283E400D9003A400F94033
-:10A260003E400F9003E420F9403E400C90038A00EA
-:10A2700060000000000000002810A000F801360077
-:10A280008F8003E002F80432000D80432002CC00EE
-:10A290003F000FC0139002DC403F104CC0230A0463
-:10A2A000200000000000000028052800BA002280DD
-:10A2B0000BE820F8004EC023A008A00368008A0025
-:10A2C0002E801FA0022A068A002EA00260030A0028
-:10A2D000400000000000000028056C00B30020C012
-:10A2E0000B3D02C003230020E001B0064C008B00B0
-:10A2F0002EC04B30028E0883802CC400348E4A005E
-:10A300005000000000000000A0011C80B58061C06A
-:10A310000B4002D400840823C20850025EC08401AE
-:10A320002D008A0802102484086D000A03122800F8
-:10A330004000000000000000A8081E00F582216017
-:10A340000F7803D604AE8031E00D58237E00C6801E
-:10A350002DE00B78038E00D7823DF00C7A036A0261
-:10A360000000000000000000081DAC00F100BAD899
-:10A370000F8003E412F800BE800E1003EC00F90019
-:10A380003E005F8003E008F8043C000F8003C20633
-:10A3900060000000000000004005FE20FF803FF04C
-:10A3A0000FF803D200EF84B3610CB903FE00FF8005
-:10A3B00033E00CF8132211CD903F600CE80310003D
-:10A3C0007000000000000000A8119C00F5002DC0E6
-:10A3D0000B0002D40484202340085A02DC00B4009D
-:10A3E000210028C2021E0486042D8808D0022A04F7
-:10A3F000600000000000000010009C00B5002D402F
-:10A400000B7002F420A70421C00A5002DC00BE0039
-:10A4100021C0087012000085002D4088680A0400E1
-:10A4200020000000000000006014CC00A1002EC03D
-:10A430001B0806C420800020981A1002CC00B10826
-:10A4400020000800020C0182C02CAC2890221804C5
-:10A450003000000000000000A815BC00B3003E4022
-:10A460000FBA03E502E9043290AEB003FC10FB40E2
-:10A47000B2000C800B2C0282183FA00CD0032E04DB
-:10A4800060000000000000009000EC04FB013E4072
-:10A490000FB643E400F8003E80019003EC00F88121
-:10A4A0003ED00DB453E000F9403E400FA003E00061
-:10A4B00030000000000000008010DC02CD8033601E
-:10A4C0002CDA03FC00EC0033400FF2037C04FE00A6
-:10A4D00032000CC8033C00CE0031800CD1032404B0
-:10A4E000300000000000000091046C0009002A64A4
-:10A4F000088E02C210A0103E100B9802EC00B900AA
-:10A5000002D808BE2220008900225008A002204064
-:10A51000100000000000000080052C000B202240ED
-:10A5200008A002E542AB0422180BB0026C00B30095
-:10A5300020040801020004A8402210088002200024
-:10A54000400000000000000008040C0883002840C0
-:10A55000080402C402A8002C000B1202CC00B000B8
-:10A5600020C04030020C008B00A8C008300202114D
-:10A570000000000000000000800D6C00C9003340A6
-:10A580000CB003EC02EB0032400FB0036C00FA0099
-:10A5900032000C80032080C80030000C80032003B0
-:10A5A0005000000000000000A019FC00FD003F402A
-:10A5B0000FC213F000F4003F004FD403FC00F5007D
-:10A5C0003FC08FF003FC40FF0037C02FF003E806C8
-:10A5D0007000000000000000C005F000CC00330057
-:10A5E0000ED00B3300CC0033E00FC0837C00CF20B3
-:10A5F0007B098CF803FE50CF383FE10DC203F00019
-:10A6000070000000000000008010E2009808208028
-:10A61000089802200088D022E00EB4227D199F699C
-:10A620002E900830922881DB642EE18816A2E00487
-:10A6300030000000000000008805C80090242001C0
-:10A640000810160082830128C10B02820CE0A310BF
-:10A65000280E1B9202848493202EC0083102E2014E
-:10A660007000000000000000C015A81098002280B3
-:10A6700008900200608A102AC00A20026C18BB00F1
-:10A680006E602B900246208B002EC208B182F0042F
-:10A6900060000000000000004011E402CB00B24066
-:10A6A0002C920327008800BAC00F88032C00EB040B
-:10A6B0003AA0CF2CA3ED009B003CF02D8C33D004AE
-:10A6C0007000000000000000E001B404EF003FC093
-:10A6D0000D5103F000F18137C00EF4039C10CF0040
-:10A6E0003D800CEC07B808FF021FC40FC803F80038
-:10A6F000600000000000000040109E00C3003840D1
-:10A700000C9203A480FB203AC00D94032C40FB0064
-:10A710003E010F8003E500EB003AC00D840B1004EE
-:10A720002000000000000000C8052C088B0222C099
-:10A7300008920321008B4822C00BB7023D403F0125
-:10A7400022740B90022804BF00B2C00B85023200B5
-:10A750004000000000000000E005400180002800EB
-:10A76000082C128840B04008C00B18020E00B3003D
-:10A7700028201130020C00B3002400090006380024
-:10A78000500000000000000020011200848021A081
-:10A790002868123A00848025E08B58021E40B78258
-:10A7A00021A60B78021A00B78021200B580208005E
-:10A7B000400000000000000048080800C8213809D7
-:10A7C0000C28038001F10038C00D85020C00FB004D
-:10A7D00038850F10038C00EB103CC80D30031202BB
-:10A7E0000000000000000000401D9800FC013F80B8
-:10A7F0000F6803D040FC003BC00DC003FC20FF00ED
-:10A800003BC50FF00BB440FF183F000FF103D0061B
-:10A810006000000000000000A805E400EB00B0416B
-:10A820000CA003E004CA04B0E00EB003EC80CB201F
-:10A8300032810CA003EE00DB003E000EB0032A00C4
-:10A84000700000000000000048119404870021C03F
-:10A85000486002F000870021C0087002FCA0832835
-:10A86000A380086002DC0087202DC00B7002120458
-:10A870006000000000000000C0009C02A380216076
-:10A88000086802D200878021E0297802DE80879064
-:10A8900021A0194802FE0097802DE00A388230007E
-:10A8A00020000000000000004814CC01838020C07C
-:10A8B000082042C0308370A0C0893402CC028300DB
-:10A8C00060C0290002CE0083002CC80BBC02120419
-:10A8D0003000000000000000E815A900EAE2329014
-:10A8E0002CE003FB02CEC032800FE403E8008A00B4
-:10A8F00033880D64C3FA00DA003D900EE00B3A0491
-:10A9000060000000000000004800C024F8083E126B
-:10A910000FC003E048F0003E000E8093C000F80036
-:10A920007E010E80C2E040F8007E008F8403D200DA
-:10A9300030000000000000000810E500C1013248AE
-:10A940000C9803E640C90032400F90036600C9002E
-:10A9500018610C90036420F9053E400C90830204BA
-:10A9600030000000000000008004662089002052B2
-:10A970002810C22602A90022400B900A2700A90035
-:10A9800022700890022408B9002E400A900A200084
-:10A990001000000000000000180524028D00234074
-:10A9A00008D1028420890022600B11F224B08100BA
-:10A9B0002A460890426408B9002E40089202060018
-:10A9C0004000000000000000080414808520234897
-:10A9D0000852028408810020400B12020480A1204A
-:10A9E0002849289002040031202E4008320202013A
-:10A9F0000000000000000000B80D6000C850B21454
-:10AA00000CC003A140C800B2000785032140C85014
-:10AA10003A150C85036140F8513E002C85032E0346
-:10AA20005000000000000000981DC448F9103E448A
-:10AA30004F91037400F5443E400FD103E440F910F8
-:10AA400037440FD003D400F9103FC00FD103E606FE
-:10AA500070000000000000001815F6A0DD8C3378AF
-:10AA60000EDA033500CDA033400DF80B3681E980B6
-:10AA700033700C9103E440F9C03EC00FDC03C60004
-:10AA800070000000000000003810E104B840203CD5
-:10AA90000C850202848A402200088F822300B8E8D5
-:10AAA0002220088802E200B8D02E000B8C02CE04CF
-:10AAB00030000000000000000805C400910060485C
-:10AAC0004B1002048A814060404910028DA0A141D0
-:10AAD0002050091222C480B1202C404B3E02C201FA
-:10AAE00070000000000000001815A408B904A04080
-:10AAF00048B0022400890082400890A6A400B9044E
-:10AB00002254299502E540B9006E400B9202C6041A
-:10AB10006000000000000000A005E4009100324049
-:10AB20000F90092400899032400D9403A400E9029B
-:10AB300072600D9403E401F9013E600F9003E80494
-:10AB400070000000000000002801A440F9003E4011
-:10AB50004F9003E710F9803E400F10136400F1009E
-:10AB6000BE400E9003E608F9013E640F9003CA0050
-:10AB700060000000000000002800A000F80032087B
-:10AB80000C010B2040C84032000E84832000F804E2
-:10AB90003E040F80032100E8003E100F8803CA0422
-:10ABA0002000000000000000280538003E0423803B
-:10ABB00008EC123944A600288108E0003808BA00E1
-:10ABC0003F800BA002A8008A022E800BE002CA0080
-:10ABD000400000000000000028054800310024D09B
-:10ABE000083E12AE0881A02CC00A38004C00B30009
-:10ABF0006EC00A30020C00A3006CC00B3002CA0009
-:10AC00005000000000000000A0011800B51025C091
-:10AC10002860129010A5082DC20864225818B700A9
-:10AC20002D800B7902BEC087016DC00B6002E80069
-:10AC30004000000000000000A8081E00F584352038
-:10AC40008C18029210C5803D600EC80B5A0877F32D
-:10AC50003DA00FF8031EB0E7853DE00F7803EA0240
-:10AC60000000000000000000081DAC00F104BA0163
-:10AC70000FA0436009E10038400EA003A814FB2098
-:10AC80003A800FB41B4C80FB293EC00FB023C20694
-:10AC900060000000000000000005FA00CD803BE0ED
-:10ACA0004EF803F202D4813BE08E98073E44EF91C8
-:10ACB0003FE04FFC07EED0CF9833E40FF803C0001D
-:10ACC0007000000000000000A801980085102DC44D
-:10ACD0000D1102F000852031C40B7B003840D710E5
-:10ACE0002D800B7062FEE1871439C00B6002EA040C
-:10ACF00060000000000000000010BC40A5002940DA
-:10AD00000B5082DC4084042DC00B10065844A71061
-:10AD10002D800B7102DC00870421C20B5002C01091
-:10AD200020000000000000002014CC0AA1012C40EB
-:10AD3000891802C100A10820C00B34064000930509
-:10AD40002C140B3C86CE10830128F10B1402C8048E
-:10AD50003000000000000000A815A000ED003AC07F
-:10AD600007BC63ED0081403EC00E88036400EF0025
-:10AD70007E500FF002FD42CF0072C01FB403EA0400
-:10AD800060000000000000008000E80099003EE044
-:10AD90004FB483ED9009403EC00FA183A801EB01A1
-:10ADA0003E000FB113EC0CFB003AC05F2023E00023
-:10ADB00030000000000000000110F800FD043FB06A
-:10ADC0000D60033E00CD0033F00FF201F000FF03F1
-:10ADD0003F030FF001FC00FB0233C20FF0E300441D
-:10ADE000300000000000000081046A00B9022EA0BB
-:10ADF0004AAC020E80F9C036E10BA0022A08BB0063
-:10AE00002E200EB002EC00EB0022C08BB0022040DE
-:10AE1000100000000000000080012300A90028C0ED
-:10AE200009B2226C4089892AC00B14062600AB02A5
-:10AE30006EE009B0066C00B30222C00BB002200025
-:10AE4000400000000000000008040800B1002CC011
-:10AE50000A30022C00BB0064C00B320A0800330029
-:10AE60006C80023046CC18A30020C00B28020211CF
-:10AE7000000000000000000000056800E90038C183
-:10AE80000DB10B2C0089003AC00B90036000FF024B
-:10AE90003E800FF003FC80FF0032C08F800B000368
-:10AEA0005000000000000000A011D800FD043FC0C9
-:10AEB0002FF203FC11EF003FC00FF4437000FF00BE
-:10AEC0003F0046F003FD00EF003FC00FC003E8065F
-:10AED0007000000000000000C005FE00FF803DE0A3
-:10AEE0000CF913DE007F80B3E00FFC03BE40CF807F
-:10AEF00033F00FF8037C04CC8033A00CF00B30014E
-:10AF000070000000000000008010E02088002E206B
-:10AF1000088212E080A88122020B80022080A88093
-:10AF200022080B80022C028804AA2008B002200408
-:10AF300020000000000000008805EC00A3082C8021
-:10AF4000083202C420A30028400B92028400A90109
-:10AF500028C81B1282CC40A80024E00A30422201FB
-:10AF60003000000000000000C011A880A8022E40A0
-:10AF7000688010C800B8402A900BA0002800AA08DA
-:10AF80002A020320028C00A8882E200AB002300476
-:10AF900060000000000000004015E804FA003C409A
-:10AFA0000CA003E800EB003AC00F2053A800E340D8
-:10AFB0002A400FA0036C00A88034201EB0031004A8
-:10AFC0007000000000000000E001B4009D913F808F
-:10AFD0000FDA23F400CC20370007D0137400BC0034
-:10AFE000B7800BD0437C00DC043B006DF003F8001D
-:10AFF00060000000000000004010A800FA803A0045
-:10B000002CA00B2002CB623E500E88032000D910EA
-:10B010003E708C8033EC80D8403A020DB0031004AF
-:10B020002000000000000000C8010C00398022C090
-:10B030000C9D822C10D0402EA008B8034E028A40EE
-:10B040000EA00DB0033D00D09036100BF002B20000
-:10B050004000000000000000E0054C00B10060C0AE
-:10B060008A18028C0880400CA0023002CE00824870
-:10B070002C802B30068C008102209009B002380011
-:10B08000500000000000000020011200B690A33024
-:10B0900008E822B21487802D600849121261959049
-:10B0A0002D610A48161E80958025200B78028800A5
-:10B0B000400000000000000048080C00F100288C4F
-:10B0C0008E1003848080002C020A9A02E400D000D3
-:10B0D0003E800B91038E80C20838800DB0031202AF
-:10B0E0000000000000000000401DB000F6003F44DA
-:10B0F0000F21137800FF003DC00FE0037800EF043C
-:10B100003F408DE803DC04F6003F000FF083D006DB
-:10B110006000000000000000A805E800E880324060
-:10B120000F880B280078023E800E28032800CA8072
-:10B1300032000FA003EC00C98032800FB0032A0058
-:10B14000700000000000000048118C008F00A180FA
-:10B150000B70421400B7002D410B50421400A500A3
-:10B16000A1C00B5002FC80A50021000BF2021204CA
-:10B170006000000000000000C000BA00A480293078
-:10B180004B48065208B4802D200B48423200848080
-:10B1900021200B4812DE40868129A00B780A30005E
-:10B1A00020000000000000004814CC00830520E0CF
-:10B1B0000B34026C10B3002CC00B364A0D0DA300EB
-:10B1C00020C00B3482CC02A20028000B30021204F3
-:10B1D0003000000000000000E815A920EA4030A07F
-:10B1E00007A0436940FA003C800FA0030840CA0052
-:10B1F00030A00FA403E800CE003B980FA0033A0450
-:10B2000060000000000000004800D200FC083F0081
-:10B210000BC203B000FC003F000FC003F000FC00B5
-:10B220003F040FC003E000F800B6020F8003D20015
-:10B2300030000000000000000810E400D9003E6863
-:10B240004C9101E408C9003E402C9203E402C9A0DD
-:10B250003E700E9003C642C9003E400F1003020428
-:10B2600030000000000000008004640089860E6049
-:10B27000089802E40889102E60089002E400890C06
-:10B280002E60089002E68889002E400B9002A000F4
-:10B290001000000000000000180524009D102F4041
-:10B2A00028D006F402AD002F6008D002F4008D0013
-:10B2B0002F400AD002E40089002E600B90020600A5
-:10B2C00040000000000000000804340085002D400C
-:10B2D000085802D400A5022D40085000D400850073
-:10B2E0002D40085402C48081002C600B140282019E
-:10B2F0000000000000000000B80D6140D8523E0080
-:10B300000C0503E140E8043E140C8503E140C8004D
-:10B310003E140EC003E000C0023E004F80232E0307
-:10B320005000000000000000981DF400F9013E40AC
-:10B330004F9013E400D9001E400F9003C410F10099
-:10B340001E400F9003E4E0FD283F400F9403E60603
-:10B3500070000000000000001805A400FD003F4040
-:10B360004D5002E4009504334028D003F400FD0062
-:10B3700033400F91033400CD4033400F98810600D5
-:10B3800070000000000000003810E010B8002E002F
-:10B390000B8002E010B8002200088002E000B80034
-:10B3A00022000B8803C280888022000B8C020E04CE
-:10B3B00030000000000000000804C400B1002CC0F0
-:10B3C0000B1002C400BB002240081002C401B900E7
-:10B3D00020401B90020422890020600B128202018F
-:10B3E00070000000000000001815A444B9002EC031
-:10B3F0004B9002E410B9020240089142E400B98087
-:10B4000022400B9202C400994022404B9012060445
-:10B410006000000000000000A015E600B9013E58E1
-:10B420000D9003E600D10032600C9802E640F9006E
-:10B43000B2400F18032400C98032500F9023280413
-:10B4400070000000000000002801A400F9003E4246
-:10B450000B9003E708F900BE480F9003E400F900E1
-:10B460003E400F9803A400E9A0BE400F100B4A0015
-:10B4700060000000000000002810A000D8013E007D
-:10B480000F808B2000F8203E010F8103E000F808B8
-:10B490003A000C8003E000D84032000F80130A0409
-:10B4A0002000000000000000280528008A802F915D
-:10B4B0000BEE022801BE0020800BA002EA80B648F5
-:10B4C00022800DA002FA028641A3A60BA0030A0067
-:10B4D000400000000000000028054C0093802CC0B4
-:10B4E0000B30020C10B30028C00B3802CC00B300A4
-:10B4F00028C0093002C601836020700B300A4A0060
-:10B500005000000000000000A0012E8885082D805A
-:10B510004BF8061C80B70021C00B5002D400B600C7
-:10B520002960097002D0A08D0021400B3202280052
-:10B530004000000000000000A8081E00D5803DE08B
-:10B540008F78031E84B7823D600F5903DE00F780B9
-:10B550002960157803DE00C78031600F7C036A0222
-:10B560000000000000000000081DAC40E9003E8023
-:10B570000FA003ED30FB0036C10F9603E400B300CB
-:10B5800034400FB783EC4021003E400FB003C206A9
-:10B5900060000000000000000005FE00FF8133E0B5
-:10B5A0000FF903DE20CF813FE00778033E00FF80E4
-:10B5B0003FE004F813FE02DE8033600FF803000062
-:10B5C0007000000000000000A8119C00B70021C41A
-:10B5D0000B5A02DC4886502DC00B31029460B4181F
-:10B5E0002D40487002E800A51021400B71022A048A
-:10B5F000600000000000000000009C00BD0021422F
-:10B600000B7002FC02850025400B50029C00B70025
-:10B610002F40287102DC00A60021C00B7002000040
-:10B62000200000000000000020146D80B120A05018
-:10B630000BB206CE00A0342EF00B18028520B34AC0
-:10B640002C54883802CC10A10020B00B3002080422
-:10B650003000000000000000A815BE80F308105460
-:10B660000B8813FF00C0803E640FB4830700F9C04D
-:10B670003EF00CFC13F400EA0032700FF00B2A04C9
-:10B6800060000000000000008000EC00F9003E10A7
-:10B69000079103ECC058003E440F9203E400F90008
-:10B6A0003EC08FB303E000BB00BE440FB003E00018
-:10B6B00030000000000000000110FC02CD0433E067
-:10B6C0000CC0033C08FE0033602CD002B480CF00D5
-:10B6D0003F5207F013FC00CE1033420CB003C044BD
-:10B6E000300000000000000081046C0089002AB0D6
-:10B6F0000888022C00BA0036440890002600DBC0FF
-:10B700002E400BB002EC0083C028400AB002E0409B
-:10B71000100000000000000080052C008B002208B3
-:10B720001AA2022C10B92022400830022C04AA547C
-:10B730002EC00BB012CC008B08224008B002E000F3
-:10B74000400000000000000008040C0083042A00F0
-:10B750000A08820C00B8006440083002A400B0005F
-:10B760002CC08B3010C8028B002A400A3002C20164
-:10B770000000000000000000000D6C00C900320055
-:10B780001A82033C00F90032400CD103AC00EB00FC
-:10B790003E400FF003ED00C30032C08CB003C00385
-:10B7A0005000000000000000A019FC00F5003F0060
-:10B7B0000D804BFC007C003F400FD20B7400DF007B
-:10B7C0001D408FF003FCA0FF003F800FF003E80650
-:10B7D0007000000000000000C005FC00DF843BE0BA
-:10B7E0000FF80B3E00EC8033E10C30033C80CF4877
-:10B7F00037C00E4003E0C0C791B3040CF003300023
-:10B8000070000000000000008010EF048B802241D7
-:10B810000BB0822E008880A2E00AA292AD808742FF
-:10B8200023D88AAD02E0C08B00204C48A40220043B
-:10B8300030000000000000008805CC58BB002880C4
-:10B840000BB2422400A8002AC00A10020460A32000
-:10B8500024D20800428C839B0120490833C2220174
-:10B860007000000000000000C015AC00AB8822A0F2
-:10B870000BB802260CA8002AC00A9202A400AB064C
-:10B8800022C00AB002E8009B00024008A042300437
-:10B8900060000000000000004015EC00D3803AE09A
-:10B8A0000F18010600E83038660EB8032A40EB0096
-:10B8B00036C10E9603E280DA0832802CBB031004F6
-:10B8C0007000000000000000E0019C00DF003FC0AD
-:10B8D0000FD003F400DC8037600FE803FA00DF01CB
-:10B8E0003FC00FC043E64CEFA03F440FA003F80059
-:10B8F00060000000000000004010AC40DB0036801B
-:10B900000C98032600F8003EC00E18038402E301E1
-:10B9100038C10EB403AC80CA183AD02C30031004DE
-:10B920002000000000000000C8053F40B9882E80BC
-:10B9300008BC02A300B0000EC008B00620008F04AF
-:10B9400023C108B9122F008380364008AD023200AF
-:10B950004000000000000000E0054C00B2002CC0D8
-:10B96000093202840033002CB20A36128C08930587
-:10B9700020C00B1802ED0091806A00081002380008
-:10B98000500000000000000020011E00B7802DE0E4
-:10B990000978029740B4802FA008E8020E409782F1
-:10B9A00021E09868821A189D902DA118580208006D
-:10B9B000400000000000000048080CC0F3003EC03A
-:10B9C0000DB0438440F0003C820E38128C44F330BA
-:10B9D000BAC11E10478E22D11038180C30831202C3
-:10B9E0000000000000000000401DBC40FF003FC000
-:10B9F0000EE003F440FC003DC40FD001F441EF1809
-:10BA00003FC41FF003F848EF1433800FC103D00682
-:10BA10006000000000000000A805FC40FB003EC0E4
-:10BA20000F98032400CB003E400FB003A800DB2892
-:10BA30003EC41F9023EC00CA0032E00C9003EA00E1
-:10BA4000700000000000000048119C80B7002DC06D
-:10BA50004B50521400D4012D800B6002D800A72057
-:10BA60002DC50B4016DC00840023C0084002D20420
-:10BA70006000000000000000C0009E80B7802DE044
-:10BA80000B780A960094802D601B7806D200A78060
-:10BA90002DE00B7822DE00878221E0085802F000BA
-:10BAA00020000000000000004814CC00B3E42CC0CB
-:10BAB0001B2102810090002CC80B3902CE00A3008C
-:10BAC0002CC00B3002CD008B2020F008B202D20433
-:10BAD0003000000000000000E815A800FEA03F8232
-:10BAE0000FE8039830D6003FA00FE003BAC0FA0079
-:10BAF0003E800FEC33F802CE00B3B82CEC83FA048E
-:10BB000060000000000000004800E018F8403E001F
-:10BB10000F80026084F8052E048F8041E0007802D7
-:10BB20003E000F8183E020F800BE020F8003D200A8
-:10BB300030000000000000000810E618F9203E4028
-:10BB40000F9C03E440C90032610C9013C408C90182
-:10BB50003E410F18032400C9A032400F984302044D
-:10BB6000300000000000000080046500B1C02240E9
-:10BB70000B9C02E71089002844089422E4108900F5
-:10BB80002E400B9F222660898022400B910A2000C4
-:10BB9000100000000000000018052480B9002EC02D
-:10BBA0004BB402E42089202240089402EC00890072
-:10BBB0002E410B90020400894022400B90020600A7
-:10BBC000400000000000000008040400B104204010
-:10BBD0008B1002E40581002840281212C4828120C3
-:10BBE0002C480B120A0482810020480B1202020129
-:10BBF0000000000000000000B80D68A0FA023E142A
-:10BC00000F8503E000C80032000C8503C140C85313
-:10BC10003E140F80030148C050B2140F85032E0359
-:10BC20005000000000000000981DE400FD00BF402F
-:10BC30000F5013D402FD002FC00FD103F440F910B0
-:10BC40003E440FD103F440FF00BF440FD103E6068A
-:10BC500070000000000000001805E6A0FD013E4451
-:10BC60000FD103D400C50033410FDB032720D9E0F7
-:10BC7000B2700DDA83F640CF1032782DDA03060069
-:10BC800070000000000000003810E100B8002E280D
-:10BC90000B8842E010D80022000B8C0A230088C0D9
-:10BCA0002228088402C28080A0223048AA820E0482
-:10BCB00030000000000000000805C400B1002C4066
-:10BCC0008B1202C400990228408B160284819130A5
-:10BCD0002058091002C5008100644D083402020199
-:10BCE00070000000000000001815AC0CB9042E48CC
-:10BCF0000B9406E4009940AA400B9222A40089000C
-:10BD00006040089402E4008980A65008920206046C
-:10BD10006000000000000000A015E400F9983E4813
-:10BD20000F9803E520D9003A640F9483A4C0D90288
-:10BD300072404D9042E482C94036400C900B28047A
-:10BD400070000000000000002801AC28F9883E4087
-:10BD50000F9913E700F9C036600F90036600F100F9
-:10BD60007E400F9907E460F90038400F9803CA003D
-:10BD700060000000000000002810A000F810320051
-:10BD80000F820B2100E80036040C8603E100D80086
-:10BD900032000F80036100C80032000F00030A0464
-:10BDA000200000000000000028052820BE0022809E
-:10BDB00028EC021904820003800DE482E8008A0165
-:10BDC000AA808BED823B808E9036800BE0034A0088
-:10BDD000400000000000000028054200B38020C0A1
-:10BDE0006B341640C08310247288B002EC008300CC
-:10BDF00024C00B04026F099B0024C00B30020A0010
-:10BE00005000000000000000A0011400B78023E4EF
-:10BE100028788274148F0061E0095012DC048722B4
-:10BE200025C81B780214009440A5C00B602268004E
-:10BE30004000000000000000A8081220B780B1E018
-:10BE40008FF8031202E78035E00C6806CFC2CFB04E
-:10BE500025F40F58035A02D58075FA4FF8032A02C9
-:10BE60000000000000000000081DA590F3003DC088
-:10BE70004FB013A804FB003CC00F8043EC80EB6084
-:10BE80003AC90F3003EC00E9003EC80FA003C20618
-:10BE900060000000000000000005F600EE803FE0BA
-:10BEA0000D8903D240E58139E03CF907FE00CF88D7
-:10BEB0003FE00FE803F208CE8033E00CF803000007
-:10BEC0007000000000000000A8119444C6002FC0BC
-:10BED000085802D0C485242190085412DC8207003F
-:10BEE0002DC00B7006D4008E4821C00A60022A04BF
-:10BEF000600000000000000000009C00A7402DC072
-:10BF0000084202D000AD0029C0087022DC2887005A
-:10BF10002DC00B400298009700A0C40870020000DA
-:10BF200020000000000000002014CC0893002CE04A
-:10BF3000083C22C10081002080881502CE30830099
-:10BF40002CC00B3C02CC0493C020F44A0C820804A1
-:10BF50003000000000000000A815A000E3C01FE0B2
-:10BF60006C1083E004EB003A524CB403FE02CF00A5
-:10BF70003FC00F8443E102D8C233C00C840B2A04B3
-:10BF800060000000000000008000E900EB103EC4EB
-:10BF90000E9403E400FB183EC20FB603EC00FB0155
-:10BFA0003EC00F3503C428EA423EC00F8103E000C3
-:10BFB00030000000000000000110FC40FF0033C012
-:10BFC0000CC0A33028CDA033C00CE8030C00EF0553
-:10BFD0003DC00CCA833C00CD083FC20CA003C04446
-:10BFE000300000000000000081046700BB8020C01A
-:10BFF00008AA020800A10134D108A4122C008B0069
-:10C000006EC088B2022C0889802EC00AA803A04006
-:10C01000100000000000000080052C00BA80A2C0C3
-:10C0200008A80AA0008B00A2C0481102AC048B0033
-:10C030002EC00080122A088B142CC0088802E00051
-:10C04000400000000000000008040C00B20022C004
-:10C0500008B2128000AB0124C00800020C04830067
-:10C060002CC00830020700820024C00808028201A8
-:10C070000000000000000000000D6C00FB0032C05A
-:10C080000CA203A000C90032C02494033C02CF00DC
-:10C090002FC004800B0902CB013FC02CA003C003BA
-:10C0A0005000000000000000A019DC00FD023FC0AD
-:10C0B0004FE4137000FD003FC00FC283FC00FF007F
-:10C0C0003FC00FF003FC00FF003FC00FC003A806F5
-:10C0D0007000000000000000C005FC20EF303F04AD
-:10C0E0006C88033A42E4913F0D0D48033CC0FF02C7
-:10C0F00033440CF403FC82DF3033600DF103300075
-:10C100007000000000000000A010ED008B702E18E1
-:10C1100088224A2C82EA262E0C0BB8423D80BF9022
-:10C120002A5428B402CD00DB402A4A483002A00439
-:10C1300030000000000000008805CCB0A3006C10A7
-:10C140000900822082A0202C884B80000C40B30183
-:10C1500020480B36028CE0836424402832022201FE
-:10C160007000000000000000E011AC008B002E0009
-:10C17000098080A600BA112E880BB0002C00BB02EB
-:10C18000024009B002EC008B002CC808B882B00451
-:10C1900060000000000000004015EC00EB003E9243
-:10C1A0000D80030A20E9003E504580012C04F30075
-:10C1B000906009B003EC008B0226508DBC03100484
-:10C1C0007000000000000000C001BC00FF023F80C2
-:10C1D0000EF9027C22AF003F6003C00BFC10FF0091
-:10C1E0003F4A4EF003FC00F7002B600F7003F8008D
-:10C1F00060000000000000004010AC00FB00B00038
-:10C200000F820BA900C90032D20FA083AC00CB1063
-:10C210003E400CB003EC00DB0032502C95031004C0
-:10C220002000000000000000C8053C04BF0222807E
-:10C230000B98002900CB4022C00B24023C088F50F1
-:10C240002E500DF002FD428F5822E048B502320018
-:10C250004000000000000000E0056C00B300244036
-:10C260004B940049009080043009000E4C008380FC
-:10C270002CC00930226E42838020480838023800E2
-:10C28000500000000000000020011E00B780652063
-:10C290000B78827A088CC025A34B78025E048784D1
-:10C2A0002D61897802DE048780E96208780208003F
-:10C2B000400000000000000048080C00FB0034486B
-:10C2C0000F3B034800934834500D00036C00C3102B
-:10C2D0001CC2053003CC40CB0032400C20031202BC
-:10C2E0000000000000000000401DBC20FF010340D2
-:10C2F0000FF0231C00FF003B800FB0233C02FF50D7
-:10C300003DC40FF103EC00EF00B7C00FE103D0060E
-:10C3100060000000000000008805EC00FB023EE029
-:10C320000C80034802C88132000F9042ECA0FB1041
-:10C330003EE00CB103EC40FB1032401FF0032A003A
-:10C34000700000000000000048119C00B7242D8000
-:10C35000087042D8108C0221400B5002DD00E7200B
-:10C360002F40087002DC05B70021C00BF002120458
-:10C370006000000000000000C0009E00B7902F4049
-:10C380000A68027A00978021E00B7802DE00B7800D
-:10C390002DE0087806DE00B7A021600B784230005F
-:10C3A00020000000000000004814CC00B3002CC0A6
-:10C3B0000A3402C800834A20F80B3102CC00A300E3
-:10C3C0002CC0083002CC00B30020B20B2042120473
-:10C3D0003000000000000000E815A800BA003F8807
-:10C3E0002EE0435988DE0033B00F6C03E800FA00FA
-:10C3F0003E802CA003E804FA0023B80FE08B3A0437
-:10C4000060000000000000004800E004F8013E0069
-:10C41000098221E000F840BE140F8481E000E800AA
-:10C420003E001F8003E000F800BE000F8803D2002A
-:10C4300030000000000000000810E400E10032407D
-:10C440000C9043E420D9003C440890032400F901F7
-:10C450003E480F10432500C900B2400C900302046F
-:10C46000300000000000000080046400B900A0401B
-:10C47000089802E608A9602E490894022400B90031
-:10C480002E700B900226028900A0400A900A20001C
-:10C49000100000000000000018052400B900224030
-:10C4A000089804E60099802E400AB1022400B900E1
-:10C4B0000E400B900A0400810122C0081002060001
-:10C4C000400000000000000008040480B120224861
-:10C4D000081806C400A1002C482A30020480B122AA
-:10C4E0002C480B12020580816022500A14020201BE
-:10C4F0000000000000000000B80D6140F850321448
-:10C500000C8503E140D8503E140E800B2140FA0008
-:10C510003E940F85032000C00032000C80032E03E0
-:10C520005000000000000000981DE441F9103D4556
-:10C530000FD003F400FF003F450DD003E440F91095
-:10C540003F440F9103E442F9103F400FD403E60645
-:10C5500070000000000000001805E400F9003E40F3
-:10C560000CD003F4088D023F400FD003E400CD004F
-:10C5700033400C90032400F90032404C982306000D
-:10C5800070000000000000003810E000E8002E00FD
-:10C59000488002E800D0002E800B8012E002880064
-:10C5A000A2000A80122200B881222808CF020E04BD
-:10C5B00030000000000000000805C400B1002C405D
-:10C5C000281002C40081002C400B1002C40091000E
-:10C5D000264009100254A0B52CA542085082020141
-:10C5E00070000000000000001815A400A9002E50E3
-:10C5F000589002E4809B002E458B9202E400990043
-:10C6000026440B90026408B500254A08510206042E
-:10C610006000000000000000A015E400F9003E5496
-:10C620000C9043C400C9903E700F9803E400D900F9
-:10C6300034604D900A6400F90036402C9E032804B3
-:10C6400070000000000000002801A400F9003C4038
-:10C650000F9C03E630F9003E620F9003E400E9000E
-:10C660003A404E9003A400790C3A400F901BCA0048
-:10C6700060000000000000002810A000F8003E004C
-:10C680000C8113E108C84832003C8003C000F01060
-:10C690003E060C8003F008CC0033040CC0030A04EF
-:10C6A000200000000000000028052800BA002E80AD
-:10C6B00008EC42FA208E0023A008E842E800BE8081
-:10C6C0002F8008A002E800DA00228048E0020A0079
-:10C6D000400000000000000028054C00B3002CC002
-:10C6E000093482C900838020F0083082CC00B380F6
-:10C6F0002CF008B002C1208000A0320800020A001D
-:10C700005000000000000000A0011CC0B7012FC8AD
-:10C71000895002D80287C421E2487082DC00B70049
-:10C720002C40087202CE00970823C008700228002F
-:10C730004000000000000000A8081E00F7E13DE8EE
-:10C740002D6803F200C780B0E0086803DF80F68040
-:10C750003DE08C7E03DA00CC8031200CC80B2A022D
-:10C760000000000000000000081DAC08FB003CC0F9
-:10C770000E8003E008F9003E400FB002EC00FA0022
-:10C780003E402FB003E400FB003CC02FB003C206C4
-:10C7900060000000000000000005FE00FF927FEA3C
-:10C7A0000CF803FE00CCA03F200DF9033E00CF8023
-:10C7B00033600FF803F600EF8433E02CC803000069
-:10C7C0007000000000000000A8119C00B7002FC8F6
-:10C7D000085402D800D6042D010869021C00850007
-:10C7E00021430B70039AC08C00A30208F1022A04B3
-:10C7F000600000000000000000009C00B7012DCC8C
-:10C80000087002D40094282DC208C2025C00860081
-:10C8100021800B7102DC00A71021C00848024000F3
-:10C8200020000000000000002014CC08B3002CF011
-:10C83000080502C02090802E000800824C02800073
-:10C84000A0610B3002A0008000A03088B10A48042B
-:10C850003000000000000000A815BC00FF002DC83B
-:10C860000C3D03E400DB023EF02C904B7C00C10049
-:10C8700032204FF013E000E80132008CAC036A0470
-:10C8800060000000000000008000EC00FB043EC2DD
-:10C890004FB003E004FA403EC24E9823AC10F800BB
-:10C8A0003E5007B013AC00FB003EC20F9203A00045
-:10C8B00030000000000000000110DC00CF003FC08D
-:10C8C0000CC8233682CF803F800CE003EC00F920B7
-:10C8D00033C00EF003F810DC0033004CE8210044B4
-:10C8E000300000000000000081046C00AB002EC08E
-:10C8F0004A8D4221008B422ED208B003EC00B8884A
-:10C9000034620DB002E4008B0022C008900A20407F
-:10C91000100000000000000080052C008B002EC0DD
-:10C9200008A0020D0089102E08289202EC04BB001A
-:10C9300022A008B0026402B30220C008A202A00034
-:10C94000400000000000000008040C00A3002EC0FE
-:10C950000A90220C1080002C00180282CC00B0003B
-:10C960002640093002C820800020000810068201FD
-:10C970000000000000000000000D6C00CB002EC085
-:10C980000CA102240088003C000C8003EC00FB009A
-:10C9900032800EB003CC80DB0032C00CA0038003D9
-:10C9A0005000000000000000A01DFC00FF003FC080
-:10C9B0004FC213D410FC003F000F0003BC00FC006A
-:10C9C0003F400FF023E012FC01BF000FD0036802CC
-:10C9D0007000000000000000C005FC00C78033C0EC
-:10C9E0008BB403B0C0CF2E1F0C4FC3033080FF01A8
-:10C9F0003F080FF0007C00FF2133E40CE00330001F
-:10CA000070000000000000008010EE008B8223F018
-:10CA10000BB5120D8888C00E980B86022100BBC092
-:10CA20002EE44BF7832F44BF9022C848A6822004EF
-:10CA300030000000000000008805CC098A0020506A
-:10CA40004BB20A80CC83010C8C0B230A0460B31414
-:10CA500024404B3002CC10B30020C8E9110662011B
-:10CA60007000000000000000C015AC018A80A244E4
-:10CA70000BB002A10488402EA00B20022820BB404E
-:10CA80002E400BB0022C08BB0022C009B00270047B
-:10CA900060000000000000004015EC00C38332E09D
-:10CAA0008F0003A002CBC43E28078B032100F9C0EE
-:10CAB0003E100FB003EC007B0032C00DA003500409
-:10CAC0007000000000000000E0019C02FF003FE059
-:10CAD0000FF4435E80FC943F000FC02BF250FD2109
-:10CAE0007E848FF0036C0CFF003FC00E6203B80021
-:10CAF00060000000000000004010AC00EB0032407D
-:10CB00002C80036900CB30B2004FB343E500CB402B
-:10CB100072182CB003EC28C3213AC10F94031004FF
-:10CB20002000000000000000C8053C008B202250BF
-:10CB300008B002280088C02A008BB402E800DB009D
-:10CB4000623008F002FC008F8022C00B9547320053
-:10CB50004000000000000000E0054C00B10020C2D1
-:10CB60004830024980834260120B3002C8008202C2
-:10CB70002C3009B002CF0183502AC00B2002B8002C
-:10CB8000500000000000000020011E009D80A0E079
-:10CB90000879225E60879029A00B7802C6009281F6
-:10CBA00005E0097802DE40878021E00B29020800B9
-:10CBB000400000000000000048080C40F20030C0B7
-:10CBC000083A034404C31430C00F2203CC80C200CF
-:10CBD000A4D20D3013CC20C30038C44F044312023A
-:10CBE0000000000000000000401D9C00EE003FE03F
-:10CBF0000F7003B402F4103FC08FA003FC007E004E
-:10CC00003BC00EF083EC00F7003FC00FC003D0061E
-:10CC10006000000000000000A805FC00F9003EC014
-:10CC20000FA003AA12CB0132800FB0132814F98091
-:10CC30003A4003B403EC42CB183EC00FB0032A00C5
-:10CC4000700000000000000048119D00B5002DC4D8
-:10CC50000B704B7C00840021800B70029410B2009A
-:10CC600029C00B7282DC0087202DC10E70021204D5
-:10CC70006000000000000000C0009E00B7802DE0B2
-:10CC80000B68029E00838021E05B38021E00B4C066
-:10CC900025E0097832CE0097802DE00B5C4E300005
-:10CCA00020000000000000004814CC00B3442CC059
-:10CCB0000B3C02CC40930820E00B30028C10B3C038
-:10CCC00028D81B3002CC0893016CC00AB882120429
-:10CCD0003000000000000000E815A800F6103E80BB
-:10CCE0004BED83B800CEE4B3A30FE0033800FE00A1
-:10CCF0003B800DA002E800DA003E800FE8023A0413
-:10CD000060000000000000004800E010F8403E0015
-:10CD10000F80136000E0003E00430803E000F808C5
-:10CD20003A000F8003E000E8403E000E8023D2006E
-:10CD300030000000000000000810C400D9C0BE4050
-:10CD40000F9003E600F9003240019A032400F90035
-:10CD50003E400F9003C44009100E400F9A03020496
-:10CD60003000000000000000800464048904A26018
-:10CD70008B9D80A600B98022404898022400B9000B
-:10CD80002E408B9002E49489602E400B940B20007F
-:10CD90001000000000000000180524009908AE48AB
-:10CDA0004B1002E581B91020441B94022410B900F5
-:10CDB0006E600B9002E40089002E400B9402060086
-:10CDC0004000000000000000080404808900A06802
-:10CDD0000B12028489B12020481A12120480B12259
-:10CDE0000C480B1202C481A1202C400B120202013C
-:10CDF0000000000000000000B80D6000D800BE0078
-:10CE00000F050BE140F80032140F85032140F800B4
-:10CE10002E800F8513E002C8003E140F05012E037B
-:10CE20005000000000000000981DE440FD00BF44D9
-:10CE30000FD103F4407D10BF4445F12BF440FD10A9
-:10CE40003F440F9103E440D9103E400FD103A606A2
-:10CE500070000000000000001805F600FD001F62D1
-:10CE60000FD8823600BDA03B680CDC8326C8D9A051
-:10CE700033600D99835620D5A82E440CD8838604A0
-:10CE800070000000000000003810E148B8002E00DB
-:10CE90000B0A822220B85022BA088A2222808800F7
-:10CEA0002201080C02200088002E28888802CE0467
-:10CEB00030000000000000000805C400B1002C4054
-:10CEC0001B100A8440B10028580A3202050099401C
-:10CED0002065091042C40091002C400A3082C20132
-:10CEE00070000000000000001811A400B9002E40DE
-:10CEF0001B9002A580B910224808104204100900B6
-:10CF00002240089002E4009B002C400A9422C604B0
-:10CF10006000000000000000A015E400F9203E4081
-:10CF20000F9013A710F960BA502E9C0A2584D1F0F7
-:10CF3000B2600D9003E400D9003E400E9003A800BB
-:10CF400070000000000000002801A40CF9903E6A67
-:10CF50008F90236600F1083C400F9C43E440F98029
-:10CF60003A440F90032404E9023E402D9113CA0075
-:10CF700060000000000000002810A000E8203E0132
-:10CF80000C0003A120E85032102C8C032100E80093
-:10CF900032020F00132088C80832000F8C03CA0029
-:10CFA0002000000000000000280528208EE32F90BC
-:10CFB0000AE0063B00EE04239008E00228088A02FB
-:10CFC00075908BA04158908E802A810BE0038A10C7
-:10CFD000400000000000000028054E00A3006C6027
-:10CFE00008381A8E40A08020CC0930020C05A3041A
-:10CFF00028C40B30020D0183C020C00B3002CA00D0
-:10D000005000000000000000A0011E0887002D62F3
-:10D010000B70921C08A00061C00960061C80A7006C
-:10D0200021C00B72025801878829C00B6012A8002A
-:10D030004000000000000000A8081E00E6803D60DF
-:10D040000C78429600E480A3600D78033F00E380F3
-:10D0500021E00F7B031608C78031E24F7843EA02D4
-:10D060000000000000000000081D8C01F8003C409A
-:10D070000EB002EC00F8013E404E3033ED20DB01F3
-:10D08000BEC00FB403EC00FB003ED80FA003C206E5
-:10D0900060000000000000000005FE00C78423605F
-:10D0A0000C780BBE00FD803FE00FEB033E00CF800D
-:10D0B0003B250CF8837E40CD8033E20BF903000062
-:10D0C0007000000000000000A8119C0287001548B5
-:10D0D0000870021420B600359A49C8039C84A70042
-:10D0E00039D00A70021A08A40021C00961422A043A
-:10D0F000600000000000000000009C00870021404C
-:10D100000871029400B5002D400BF1225C02070863
-:10D110002C50087002500087002DC40B50420000B4
-:10D1200020000000000000002014CC0083022440F6
-:10D13000183D0A0100B05824200930028F4083E0D6
-:10D140002CC10A30420800B3016CC009081608045B
-:10D150003000000000000000A8158C008B00324059
-:10D160000C2503A848F8813E800F80637C00CB80AB
-:10D170003AC00CF0036C00CA02BFC00F988B2A049F
-:10D1800060000000000000008000EC00F9003E504C
-:10D190002FA40BC800F0403ED00FA033EC20FB04BE
-:10D1A0007AE00FB003ED08E90332C00D9003E00010
-:10D1B00030000000000000000110EC40EE003EC016
-:10D1C0000CDA037004CC02B1A00EF023EC00FF00D7
-:10D1D0003720CDB073EC88FB803FC00F3003004494
-:10D1E000300000000000000081046E0088802CE107
-:10D1F00008940AA902884022D008B942EC04BB0076
-:10D200002CD40DB002ED20BBD02EC00BB002A0403C
-:10D21000100000000000000080052400AB802EF00C
-:10D2200029A0826D0088082204089042EC00BB000F
-:10D230002A8108B002E409BA042EC14B988220006A
-:10D2400040000000000000000804040083002CC01F
-:10D250000A210284108200E000180A12CC00B300F8
-:10D260000CC0093002CC90B0002CC00B100282011F
-:10D270000000000000000000000D6400EB003E0014
-:10D280002CB40364088800B2000CB243FC00FB001D
-:10D2900056000CF001E400FB003FC00F800B0003C0
-:10D2A0005000000000000000A01DF400FF003F40FF
-:10D2B0002DF061F000F40027010DB111FC00FF0218
-:10D2C00007C00FF003EC40FF003FC00FC00368062B
-:10D2D0007000000000000000C005F600EF903D4C1B
-:10D2E0002CC013F408FD20374C8E82837484DCC27A
-:10D2F0003FD80DF203ECC0FF813F000CF803F000B3
-:10D3000070000000000000008010E6008B242E5CFE
-:10D31000088D02FF48B9902F540B84823E40A080B4
-:10D320002EC40AFC42ED80B9802E600A9812E004F7
-:10D3300030000000000000008805E401A300284838
-:10D340000A0042C400B1002C490B0A4204A29121F8
-:10D350002CC90831028CC1A3002C40081802A2017C
-:10D360007000000000000000C015A0208B822E4439
-:10D37000588002E400BB102E400BA1120C01891052
-:10D380002EC00AB002EC01B8802EE20AA102F0041D
-:10D3900060000000000000004015EB40EB403E60E4
-:10D3A0000E8733E400B9A136C00EA80B2600DAC000
-:10D3B0003EC08DB003EC00FB853EE108B80390054C
-:10D3C0002000000000000000E001B800FF022F6014
-:10D3D00003E883FC10FD801F401FD013BE40EE0405
-:10D3E0003FC00FF043FC08FD003CC00FD011F80017
-:10D3F00060000000000000004010A400DB00B2400C
-:10D400000E94032400D900BAC00C2003E490FB0062
-:10D410003AC00CB003EC01FA003ED02C9803900403
-:10D420002000000000000000C80503008B00224817
-:10D430000884222C00B90022C008A002ED008BA0B5
-:10D4400021C008F002FC00B9802EC008A002320002
-:10D450004000000000000000E0054520930022F895
-:10D460000B300A8440B2002040081002C4008080C3
-:10D4700028C02839024C00B1002CC0083002B80086
-:10D480005000000000000000200136009F80216055
-:10D490000938029E00B2C02060484812D6C686D025
-:10D4A00021E0087800DE80B7822DE008F80208004D
-:10D4B000400000000000000048080C20D31030C8D5
-:10D4C0000F30038400F1003040241903E4C0E04031
-:10D4D0003AC00C3203CE80B1283CC00C301392020B
-:10D4E0000000000000000000401D9C00E6007FC01E
-:10D4F0000EF0237440FF103F404FD003FCD2CE0407
-:10D500003FC00FF403FC00FE003FC00F7103D012B8
-:10D510006000000000000000A805EE00CB0016C06F
-:10D520000D80032720CB003EC20AB053E428C181FE
-:10D5300032C10EB9032C00F18035E00CB8032A0487
-:10D54000700000000000000048119C0287102D4070
-:10D550000870035C00A7002D40287002D4048704E3
-:10D56000A1D00B72021D00F70021C00D5002120461
-:10D570006000000000000000C0009E00858025E0E3
-:10D58000097802370387802FE0087812C6108D8053
-:10D5900025E80B38021E80BC8425E0085802700084
-:10D5A00020000000000000004814CD8083882CC0BB
-:10D5B000083C024E01A3D22EC408B102CC008380E5
-:10D5C00024C10B30020C00B340A0D209301252002B
-:10D5D0003000000000000000E815BA00CAC0368024
-:10D5E0000D67132800CE003EA00CED03E800CEE04E
-:10D5F00036801EA00B2804FE00B7B20CE00B7A00A8
-:10D6000060000000000000004800E040F8102E100C
-:10D610000F8003E001D80A3E000F8003C002F80823
-:10D620003A000F8003E010E820BE000F8013920044
-:10D6300020000000000000000810E500FB003E4054
-:10D640000C91032600618032400C90032400C90035
-:10D650001E400C9C03E401F9003E400F9003C20001
-:10D66000300000000000000080046700B9002C407A
-:10D67000009C02A600790022402890022400890024
-:10D680002C44089802E400B9802E400B9002E0017F
-:10D69000000000000000000018012400BB0026501C
-:10D6A00028908224849920224049900224008900F5
-:10D6B0002E40089002E400B9602E400B9002C60490
-:10D6C000400000000000000008040600B1002E48E1
-:10D6D0000812028480B120A04809120A0480810047
-:10D6E0002C48281242C48831002C400B1802C20179
-:10D6F0000000000000000000B80D6000F850361473
-:10D700000C80032000E80032140C85032140C8502F
-:10D710003E140C8003E14038003E008F8003EE038E
-:10D720005000000000000000981DD400FB043D44A0
-:10D730000F5123D448ED103D444ED123F442FD0057
-:10D740003E448F9103E458FD003F500F5003E6061E
-:10D7500070000000000000001805F400F9003D40D2
-:10D760000CD003F400DD023E400C9003E440C910ED
-:10D77000374007D0072400E5002F6A0F700306002A
-:10D7800070000000000000003810E000B8003A000F
-:10D79000808002E00088002E000A8053A2802CA026
-:10D7A00022000B800A2000B8002E100980030E040E
-:10D7B00030000000000000000805C400B1006C400B
-:10D7C0002A1002840181802E40091002F4008D0489
-:10D7D00020400B10028400B1002C400B9802420143
-:10D7E00070000000000000001811A420B9002A40B9
-:10D7F00088B402E601A9202E480A9000A440AD405A
-:10D8000022400B9012A404B9012E410B9002060491
-:10D810006000000000000000A015E400F9C03E60B8
-:10D820000C9413A602D9421C600C9E01C604C100D0
-:10D83000B2401F9002A400E9083E684F980B6804AC
-:10D8400070000000000000002801A640F920387098
-:10D850000F9103E400D9803E400F9C13A400F9000F
-:10D860003E400F10036410F90A3E500D9A03CA009F
-:10D8700060000000000000002810A100D8043E0055
-:10D880000C8113C002D8203E002D8403E000CC0898
-:10D890003A000F8043E000F841320007818B0A0410
-:10D8A000200000000000000028053A608A002FA830
-:10D8B0000AE022E8027E482E8008A042E8048E009A
-:10D8C00023A80BA882E800EE00A2804B60020A00A9
-:10D8D000400000000000000028054C0093006CC0D0
-:10D8E000083002CC0013812CC0083002CE408240A8
-:10D8F00028E00B3802CC00B31024C08B38020A0099
-:10D900005000000000000000A0011E0087202FC072
-:10D910000A7002DC0AB6002CC8887206D80086009D
-:10D9200021C00B7002DC84AF80A5C00BD0022800A0
-:10D930004000000000000000A8081E00D7803DA0A5
-:10D940001C7813D602D7803DEC087E23FE00CE80E3
-:10D9500039600F7803DF00F68075E00F78032A0244
-:10D960000000000000000000081D8C00FB103E803D
-:10D970001FA021CC00FA003EC00EB003E802FA005E
-:10D980003E400FB013EC00EA013AC00F9003C2060C
-:10D9900060000000000000000005FC00FF803F6008
-:10D9A0000899077E00DD803FE20CF803F602DF8075
-:10D9B000B3E00CF8033E41CC8033E40FF803C00021
-:10D9C0007000000000000000A8119C40B7002DC0AE
-:10D9D0000D5A22DC8075002DC0087102F0208700EE
-:10D9E00021C00A70021C00D42821C00B7202EA0474
-:10D9F000600000000000000000009C40B7002D0007
-:10DA0000087222F40087002DC2087002D4008780BB
-:10DA100025400930025C01AD0029D04B7002C000E6
-:10DA200020000000000000002014CC00BBC82CA087
-:10DA3000092002CE00A3002CE0A83D42C2008B804A
-:10DA400024400B300A6C08A340A8E00B3402C80441
-:10DA50003000000000000000A815AD00FF483C2881
-:10DA60000CA9236C808B003FC00CFC03EC00D88019
-:10DA700034400D30037C02A34038680F2403EA04CD
-:10DA800060000000000000008000ED88FB003E50B8
-:10DA90000FA103EC043AC03EC00FB083E802F810B7
-:10DAA0003A410E9003AC009B08B6400F8103E000A2
-:10DAB00030000000000000000110FC00FF00B32057
-:10DAC0000C50131C09CD8333C08370003C00DC1064
-:10DAD00032600EF1432C00CE043B700CF083004406
-:10DAE000300000000000000081046780BB0162215B
-:10DAF0008A89202C0080E022C00BB003D8108C044F
-:10DB00002240059002AC00D88036400A90022040A6
-:10DB1000100000000000000080052600BB00220667
-:10DB20000880022E00882022C009B002A4009900BB
-:10DB300062C408B0062C008880224108A0022000A0
-:10DB4000400000000000000008040C00B30020406A
-:10DB50000A00820C00800020C00B3022A00081004F
-:10DB6000A0C00930028C00900024400A2802020163
-:10DB70000000000000000000000D6000FB0220001B
-:10DB80002C92032C02880031C00BB502A400D104F2
-:10DB900032400E90032C40C9003A408CA003000391
-:10DBA0005000000000000000A01DF400FF002F0046
-:10DBB0000FC003DC00FC003FC10FF043F000FD008C
-:10DBC0003F404FD003FC00F5003F400FE003E80664
-:10DBD0007000000000000000C005D880CC00B70431
-:10DBE0004EE1033C20DF10318006F0037F00FFC0D0
-:10DBF0003BC00EF2035E00EF1033D02CF203300076
-:10DC00007000000000000000C010E90088C6205C21
-:10DC100008A45765008F522AF009FC020400BB00DB
-:10DC20002DD90974836428834422848806823004B1
-:10DC30003000000000000000C805C9008010200866
-:10DC400008311204B2A30020841B34020C80B320DC
-:10DC50002CC70936028C809340ACC80831283201A9
-:10DC60007000000000000000C015A9008800A2504C
-:10DC700008350224008B042EC109B0022494BB0095
-:10DC80002EC00BB002CC608B002E800880003004C8
-:10DC900060000000000000000015E702CB18B28011
-:10DCA0002CAC0A2E08EB0032124EB0032B80FB0086
-:10DCB0003AC00AB003AB08EB042E480CB88300044A
-:10DCC0007000000000000000E001B680FF8039CA4B
-:10DCD0000DE803D640E7043B664E7003B800FF0131
-:10DCE0003FC06CF0037006E70031040FC143F80039
-:10DCF000600000000000000040108500CB40329022
-:10DD00002FB00B6480FB08BA100DB0A72D00FB04E8
-:10DD10003EC08EB0036D00DB0132408C33039004B3
-:10DD20002000000000000000C005240083E0A2D015
-:10DD300040B0022504BF80A05008F80220008B02EA
-:10DD40002FD008F00224008F80360108844236006C
-:10DD50004000000000000000E8054400834820C4A3
-:10DD60000900024600B301A8901930128C00A304E8
-:10DD70002EE20AB0020C00834928C0093C02380098
-:10DD80005000000000000000F0013604838021E113
-:10DD90000838121E28B39821A0193882960087836C
-:10DDA0002DE2087822368C87802DE00979023E002A
-:10DDB000400000000000000048080400C33030C8E4
-:10DDC0004D000B4C80F31238C00D3A028C80F300EA
-:10DDD0003CC00E300B0E00C30C3AC00D30031202D3
-:10DDE0000000000000000000401DB406FF103FC00E
-:10DDF0000FB013BC00FF107FC00EF1A37C00FF1218
-:10DE00003FC20FF523BC41EF183780AEC003500668
-:10DE10006000000000000000A805E400DB003EDA1E
-:10DE20000C800366108B0032808CB6034A004B8056
-:10DE300032C80CB4030A10DB003EC10CB0432A0008
-:10DE40007000000000000000C811B40087042CC05E
-:10DE50000D70031C08874820810D72825C00D7007A
-:10DE600021CC28F0021C1087202C0008400A320424
-:10DE7000600000000000000080009600B7812DE0E7
-:10DE80000848020E04878021E00878023E0187805E
-:10DE900021E01879023A0197A02D6008380220008D
-:10DEA00020000000000000004814C600A3C62CC0DB
-:10DEB0000930020C01830020E00930024E0093007B
-:10DEC00020C04930220F6483026CD428300212042F
-:10DED0003000000000000000E811AB80FAE03C8850
-:10DEE0000CE0022802CA00B3A90CA0033B10CA0030
-:10DEF000A2800CA00B3800DA003FB00CE6033A0415
-:10DF000060000000000000004800C02098083E00AB
-:10DF10000F800BE100F8013C104F0003A040F80017
-:10DF20003E100E8003E000F8003C022F0493D20064
-:10DF300030000000000000000810E400C1C13240C1
-:10DF40000C98032640F90032400C98032424F90071
-:10DF50003C600C1003A400F98232400C90030204D0
-:10DF6000300000000000000080046400890022509E
-:10DF70000D98022580B90022520D9C022400B900A0
-:10DF80002E600890422400B940364008900A2000D4
-:10DF90001000000000000000180524008D00234040
-:10DFA0000812022400A110A26008928A2400B9017C
-:10DFB0002E46089002A400B150224028908206000C
-:10DFC0004000000000000000080404848520A1D85F
-:10DFD0000910020480B32020402912060400B10178
-:10DFE0002C482812020400B1202448081202020121
-:10DFF0000000000000000000B80D61428A00B3007C
-:10E000000C05032140E050B2002C80022140F0506A
-:10E010003C140C8513A150F85032140C85232E03A8
-:10E020005000000000000000981DF440F9103E442C
-:10E030000FD40BF444F9103F504F1103F400F900D2
-:10E040003E440F9153F414F9103F440FD103E602FC
-:10E0500070000000000000009805E6A0DD88B366AF
-:10E060000CDC833688BDA0376A0CDA0B2502C94068
-:10E070003F784F98B3E504CDA072780CD88B261466
-:10E0800070000000000000003810E30088422231D8
-:10E09000080A0222A0B8F922100D84126A80888032
-:10E0A0002E200B0802E280A8A8A23848A8020E0081
-:10E0B00030000000000000004805C4A28100204894
-:10E0C0000812424500B100244009140224008120B6
-:10E0D0002C580B1082C4049140646C0830821205E5
-:10E0E00070000000000000001815A4008900224103
-:10E0F00008908A6480B9002250099006640899004B
-:10E100002E400B9006C401B90226618890020604D5
-:10E110006000000000000000A015E400C9002240DB
-:10E120002C94236400B90036400990130500C900FF
-:10E130003E404F9013E5C0D90026402C94032800A0
-:10E1400070000000000000006801A402E9083C40E3
-:10E150000F900BA400F1003E410F9043A488E90406
-:10E160003E400F9003E600E1003A409F9263DA00E0
-:10E17000600000000000000028108010E001320064
-:10E180008F80032000D80830018C0003E102C8040E
-:10E190003E000C800B2100C80078000F86030A00A7
-:10E1A0002000000000000000280528008E402B827F
-:10E1B0000BA0023A008E80238208E20228108A0017
-:10E1C0002F9828A01228008E202E804BE4020A00EF
-:10E1D000400000000000000028054C02A240208002
-:10E1E0000BB0024E4093C0A0200836028C00930072
-:10E1F0002CE20830064C12930828C00BB0020A002B
-:10E200005000000000000000A0011C0882402940CE
-:10E210000B70025E08840823400870061C8087008B
-:10E220002D200879125C0094002DC00B304228008C
-:10E230004000000000000000A8083E00E48031A17A
-:10E240000F58137600D08031C00C3803BE80D781C0
-:10E250003F208C79037F01D68039E84F68032A007C
-:10E260000000000000000000081DBE00FA003E0093
-:10E270008F960BA400EA003CC00F9003AC20FB403B
-:10E280002E000FB203ADA0EA003EC00FA01BC204D7
-:10E2900060000000000000004005FE08DE8133A49D
-:10E2A0000EFC133E00FC8013200C68033E20FFC8C8
-:10E2B0003F601DF8037E00C78033E20CD8031000D6
-:10E2C0007000000000000000A8119C00864131C4CD
-:10E2D0000879429C00BC1021408535035C00B700E2
-:10E2E0002DC00872022C00A70137C00851422A0035
-:10E2F000600000000000000010008C4082002481BB
-:10E3000008D8021420B50020400960021C40B70064
-:10E310002C400B3022DC00970021C408400244004E
-:10E3200020000000000000006014EC009206209025
-:10E330003815028600B80060500930024E01BB005B
-:10E340002E400B3002CE20B30024F048020A5804BD
-:10E350003000000000000000A815BC00CA00A69410
-:10E360002C90032E00FB05B2850D90033F90FF001B
-:10E370007E801FF043FC219A0033C83CB2036A043C
-:10E3800060000000000000009000EC02EA403D80C8
-:10E390000F1093ED00FB403E908F3003EC80FB00AC
-:10E3A0003E911CB0032C10E8003EC81F9003A5103E
-:10E3B00030000000000000008010FC02E40073A0A8
-:10E3C0000CFC037C02FF1013C41CC0033C00FF00C4
-:10E3D00037E00DF003FC00ED8031C00C3263200407
-:10E3E000300000000000000084006C008AC022B1F0
-:10E3F0008AB8434A10DB2020F00A94036C00BB0764
-:10E4000022B808B002EC11E8C0B2C02A921A20006B
-:10E41000100000000000000080012C00AA8022985B
-:10E420000890022F03BB012A8308B24E2C04AB02D2
-:10E4300022C428B022EC09B35062C008B002200008
-:10E44000400000000000000008040C018300608010
-:10E4500008120A440093002A804A30020C00B300DC
-:10E4600060C0083002CC00B30260C0080046020160
-:10E470000000000000000000800D6C00E802228017
-:10E480002CF2432C00FB00BAC008A5023C00EF00B0
-:10E4900036C04DF013FD51FB0032C00CB00320011B
-:10E4A0005000000000000000A01DFC007E043F8022
-:10E4B0000F3143F002FF0037C00FF003FC08FF00EC
-:10E4C0003FC00FF003FC00EF003BC00FC003E81695
-:10E4D0007000000000000000C005F240FC803F24F6
-:10E4E0000DD853D604DF323FCC4CC043FC00DF6074
-:10E4F00037C00FC4037CD0DF2033D80DF843F000C1
-:10E5000070000000000000008018E880B0012E08B4
-:10E51000889002EC208B702FCC08B382FDE0BF40C6
-:10E5200022D80B9302FDC0AF1028F008BC12F004F3
-:10E5300030000000000000008805C400B0002E017B
-:10E540000A1282EC80B3002CC80A00328C00A3307F
-:10E5500020D20900028C80830028D80B3412F201EB
-:10E560007000000000000000C005AC01B8022E00E1
-:10E570000A9012EC108B002EC00AB000EC00B30021
-:10E5800022C10B9202CC01AB002AC002B002F004FF
-:10E5900060000000000000004015E000FA0C3EC0E2
-:10E5A0000FA013EE20DB003EC02E8853EC00FB00D2
-:10E5B000B2C08FAC83AC08DB001AC04FB003C004FC
-:10E5C0007000000000000000E001B800FE003FC045
-:10E5D0002DE003FE807F003FC00DD203FC00BF0191
-:10E5E0003EC00DC803FC0CFF003FC009F023F8003B
-:10E5F00060000000000000004010A400FA4032C19A
-:10E600000FA0032908DB003EC00E8503EC20CB00E1
-:10E610003AC00EA403EC00FB003AC20EB003100493
-:10E620002000000000000000C8052C00BA6020C0D7
-:10E630000BA0020800AF002FD00BB502FE028F0026
-:10E640002FC00D800A3C00B70023C205F02236001F
-:10E650004000000000000000C0044000B18820001D
-:10E660000B10020C0083002EC80B08064D408300DF
-:10E6700020C00830060C0893200AE04A3002380017
-:10E68000500000000000000020105A00B59021202A
-:10E690000B58423E00A7802DE00B6902DE408792B6
-:10E6A0002DE00918029E01B78029E00370023E00A8
-:10E6B000400000000000000048084400F101300064
-:10E6C0005F18030C1083003CC40E0403EC008300AD
-:10E6D00030C40C31038C00F30038C80E3103120231
-:10E6E00000000000000000004015BC00FD04BF0455
-:10E6F0004F5803F808EF083FC00FF001FC00FF4C33
-:10E700003FC10FD0033C00F70037C20D7203D006A3
-:10E7100060000000000000000805E200DB0032C0DD
-:10E720004DA8032C08FB007EC88FB00B6F45EBC2D1
-:10E7300036C007A003EF20CB50B2C00C79032A00EB
-:10E740007000000000000000481998008F0021C0F0
-:10E750000B60035C0037002DD20B30020CA887241D
-:10E7600021D0097002DD88872A23E808700232046C
-:10E7700060000000000000002000B600978021E04B
-:10E780000B68021E00B7802DE88B48821E80A38490
-:10E7900025E80B6802CE02878021E0087A0220007B
-:10E7A00020000000000000006804CC08838220E004
-:10E7B0008B2A024840B3002CC00B30820C0083002F
-:10E7C00000C1093102CC00830020C008300A1204C5
-:10E7D0003000000000000000E815E800DAA032A8D0
-:10E7E0008DA8033B00FA003E800FE4036800EA02B4
-:10E7F00036800FE403E800CA0032802CA0033A04FC
-:10E8000060000000000000004801A010F800BE20D9
-:10E810008FC103E024F8003E100F8403E000F801EC
-:10E820003E000F8003E000F801BE100F8003D2000D
-:10E8300030000000000000000810A400F940324041
-:10E84000CF9003E400C9000E500F1A032600F90010
-:10E850003E400F9081E400F98032400C9003C204E6
-:10E86000300000000000000080046404B104224075
-:10E870000B9002E400A9002E530B920A2648B9041B
-:10E880002E400B9002E400B9800250089002E00094
-:10E89000100000000000000038052400BD002340E7
-:10E8A0000BD012C40089022E400B90222400B90024
-:10E8B0002E400B9002E400B1202040689022C60058
-:10E8C000400000000000000028141400BF12A14006
-:10E8D0000B5002C400A1202C480B12020410B111ED
-:10E8E0002C480B1322C400B140205A081002C20168
-:10E8F0000000000000000000B80D6140F840321434
-:10E900000F4503E140C8503E158F850321E8F868A4
-:10E910003E140F8403E1E0F02832A8CC8023EE03FC
-:10E9200050000000000000009815C410F9203E407F
-:10E930000F9003F400F9103E440FD103E400F920D6
-:10E940003E440FD303E400F900BE400F9403E606F3
-:10E9500070000000000000001815E400FD103340B6
-:10E960000CD0032400D9003F404CD003F600FD90AA
-:10E970003A400C9003E6A0FDA837680CD883260027
-:10E9800070000000000000003810E008C8A022005D
-:10E99000088002200088002E000C8012E000B88061
-:10E9A00022000D0A02E380B0C020340884034E0424
-:10E9B000300000000000000048008409A100204150
-:10E9C000089002240091002C40081002C500B1609C
-:10E9D00020400810A2C420B128244A081002520185
-:10E9E00070000000000000001814A4018100A24083
-:10E9F000A89000254089012C40089402E400B90049
-:10EA00002A40099002E401B90422414890024604D8
-:10EA10006000000000000000A014A520E9003240C2
-:10EA20004C100B2600D9003E402C9803E400F9005E
-:10EA3000B2400C9003E400F90036402C90036804C7
-:10EA400070000000000000004801A400E9003E4002
-:10EA50000F9003E600F9003E400E9A03E400F9002F
-:10EA600036400F9003E400F9003C400F9003DA00B9
-:10EA700060000000000000000810A100F800320053
-:10EA80000F8013A000C80032048C8003A0C0F800DF
-:10EA90003A000F80032000C00932004C80010A04B4
-:10EAA000200000000000000028052800BE00208093
-:10EAB0000BE0028800AA0003A00AE602FA008A001E
-:10EAC00032800BA00228008E80A3802820028A00BA
-:10EAD000400000000000000028056C00B348204002
-:10EAE0000B10020C00830020C00834828E049900B1
-:10EAF0000AC01B30020C02905020600830020A004D
-:10EB0000500000000000000080111C80BD0A214858
-:10EB10000B52029C40A3A020800A6002CE008520F8
-:10EB200021C40B7A061E80952021900870022800CF
-:10EB3000400000000000000088081E80F780B179C6
-:10EB40000FDB023E20C7A0B160CC78139600F1F035
-:10EB500039E20F7B130F00D4A031602C70032A021E
-:10EB600000000000000000000815AC00F7003E4067
-:10EB70000F9003ED80FB103E400BB023EC00F9201A
-:10EB80003AD80FB00BED81ED103E800F3003C20676
-:10EB900060000000000000000004BE20EE80336032
-:10EBA0000CD8831E006F8033E00FB8113204F5805B
-:10EBB00033E00FF8832F40FE80B3E00CF803100021
-:10EBC0007000000000000000A8189C00BC00A144D8
-:10EBD0000810035C008F0021800BEA221C80B50125
-:10EBE00021C00BF0021E80BE0023802A70022A047E
-:10EBF000600000000000000000009C20A7002340EF
-:10EC00000B500A3C00A70025C00A43021000B500C3
-:10EC100021C00B70821C80B40021C0087002040067
-:10EC2000200000000000000020048E04B3002240F9
-:10EC30000914024C00830020C00B24820400B100A0
-:10EC400020C08B3A022C01B00020800A30021A0446
-:10EC50003000000000000000A8159E00EB043340C7
-:10EC60002DDC031D60EF003200CF9A032800FD0069
-:10EC700033C18BFC0B3C00FC0032800C90032A0457
-:10EC800060000000000000008000AC10F8003E4072
-:10EC90000E9823AC04FB003C000F8420ED00F9002B
-:10ECA0003EC04FB003EC00FD003E800F9003E40037
-:10ECB00030000000000000002110FC00CF80334035
-:10ECC0000CD083FC00EF003F400CF1413010CD0030
-:10ECD0003FC00070133C00E400B1D00C10032004CE
-:10ECE0003000000000000000A1042C008AE42A404B
-:10ECF000289002EC008B003E020A80022C828904DC
-:10ED00002EC10AB00A2C00890222F22A98022000A1
-:10ED1000100000000000000080052C0280142A4032
-:10ED2000089002EC08AB042E84081082801089033E
-:10ED30002CC04AB0222C00AA002280089102200098
-:10ED4000400000000000000008142C008000284053
-:10ED5000081102EC0083002C810A005A880001008F
-:10ED60002CC00A30020C00820020800A100202012E
-:10ED70000000000000000000000D6C00C9003A40D7
-:10ED80000CD403FC00EB003E400C9203A0004D00AD
-:10ED90003FC00EF0333C80E80032C00C90032003EB
-:10EDA0005000000000000000A011FC00FC003D40ED
-:10EDB0000F5003FC023F043B014FC4137000FD00E1
-:10EDC0003FC01FF001FC40FC003FC00FD013E8061D
-:10EDD0007000000000000000C005F8E0FF803DC0AA
-:10EDE0000DF382F080FF4031CB0CF303FD04EFC143
-:10EDF00033E00F7903FE00CF4233F04CF8033000CC
-:10EE00007000000000000000E010E908B9812FF058
-:10EE100008F452E920BF4023F00AF302FD088B00FA
-:10EE200036E00B8022E8808F4022C008B082300498
-:10EE30003000000000000000C805CC00B1802CC5E7
-:10EE4000093242C8C0B33120C1083202CCD4BB2041
-:10EE500068C00B3002CC2093602088083202320157
-:10EE60007000000000000000E015A000BB802EC074
-:10EE700008B002EA00BB0062C10AB002CC00AB00DD
-:10EE80002EC00BA000E800830022C108300230042D
-:10EE900060000000000000000015E890FB803EC00C
-:10EEA0000DB003E210FB0032C04CB013EC00E9548B
-:10EEB0003AC00FB003E600CB00B2400CB00304042C
-:10EEC0007000000000000000E001B800FF003FC03B
-:10EED0008FF003F000F702BFC10FF023FC00DF0644
-:10EEE00037C08FC907FA92FF043F502FF003F80094
-:10EEF00060000000000000005010AC00C9003EC2DD
-:10EF00000EB023E400EB003AC80EB003EC00F900A9
-:10EF10003EC00FB403A400FB003E800FB083D004BA
-:10EF20002000000000000000C80528008B742DC0E0
-:10EF300008F002E4008F0021F008F002FC10D3007A
-:10EF40002EC00B90122C00EF002EC00BB602F60064
-:10EF50004000000000000000E8054800A3002CC4A9
-:10EF60000A3002C000A30068F00A3012CC04A200EC
-:10EF70002CC00B3002EC00B3012EC00B3402F800A1
-:10EF80005000000000000000B0010C0087802DE858
-:10EF9000087842DA00878025E0087902CE00968062
-:10EFA0002DE00BD902DE00A7802DE00B7802FC00DB
-:10EFB000400000000000000048080C40E3103CC086
-:10EFC0000A3803E800EB0038C20A3003CC00E34003
-:10EFD0003CC00F3403CD00F3203C880F3003D20235
-:10EFE0000000000000000000401DB480FF043FC886
-:10EFF0000FF083F840FF183BC00FF483FC00EE02D3
-:10F000003FC00FF0033C00EF083F800FF013D00625
-:10F0100060000000000000008805E800CB003EF220
-:10F020004DB213E804CB0132F84DB2136D20F80055
-:10F030003EC00F30032400FB003E408FB8032A007F
-:10F040007000000000000000C8118C0086002CC079
-:10F05000087302D812873020CB08F2021D05B500D4
-:10F060002DC00B60035010B7092DC00BF002320405
-:10F07000600000000000000080009E0087802DE4FA
-:10F08000097A02CE01878021EC0978025E80B7C040
-:10F090002DE00BF8021E00B7A02D600B78022000B7
-:10F0A00020000000000000004814EE0082802CC008
-:10F0B000083002EC008300A0C00830020C00B380CE
-:10F0C0002CC10B30024E00B3002CF10B300A12049D
-:10F0D0003000000000000000E815BA80C6003E8045
-:10F0E0000DA003F840CA0032800DA0136800FE0294
-:10F0F0007E800FED833910FA003F8C0FA0033A0495
-:10F1000060000000000000004800E012F8903E009F
-:10F110000F8003E000F8053E000E0003E000F880D9
-:10F120003E000F8003E060F8007E000F8003D200F5
-:10F1300030000000000000000810E400C9803264C4
-:10F140000F9043E406C1043A400F9003E400E90045
-:10F1500032400F90032400C10132400C9003C204DE
-:10F1600030000000000000008004640089C02240DC
-:10F170000B90022400890022501B90222400810061
-:10F1800022400B90222408C9002040089402E0008D
-:10F190001000000000000000180524009920224003
-:10F1A0000B1002A40089002A580B90028400A900C9
-:10F1B00022400B100A0400990222C1089082C60066
-:10F1C0004000000000000000080404009102A0C8F4
-:10F1D0000B12020480812220489B120204908901B4
-:10F1E00020400B1002040281222240081002C201BA
-:10F1F0000000000000000000B80D6142DA01320199
-:10F200000F8503A140C0503A018B8523A144E850EB
-:10F21000B2000F85032148D85132142C8503EE0328
-:10F220005000000000000000981DF500ED023E4473
-:10F230000F9103F440F9103E440F9103E440FD00A8
-:10F240003E400FD003F400E910BF400F9003660664
-:10F2500070000000000000001805E621C5003368BA
-:10F260000F9A036F88C9C033680C9E032780D9406A
-:10F270003E400F9003C510D9E836500CD003E6008D
-:10F2800070000000000000003810E10888008200D3
-:10F290000B8E82EBC888E02200288842A2808A80F8
-:10F2A00022000BAA02E20088C022A9088A038E0469
-:10F2B00030000000000000004805C400810020D09C
-:10F2C0000B1132848481606050081606050091207D
-:10F2D00020400B1082E409912024400810C2D20182
-:10F2E00070000000000000001815A40489042240EA
-:10F2F0000B9002C400A9002241009002A4008100EA
-:10F3000022400B9222E58099012261089002860436
-:10F310006000000000000000A014A582819032402F
-:10F320000F90136702C90032400C90232404D9C007
-:10F33000B2400F9C03E600D90036500C9003E8045D
-:10F3400070000000000000006800A680F9003E4048
-:10F350000F9003E700D900BC420F9053E404F9106A
-:10F360003E400F9803E604E1003E402F9003DA0090
-:10F3700060000000000000002810811048103208D2
-:10F380000C800F2102C8003A040F80076000F8408B
-:10F39000B2000F840B2000D80036100C8003CA0482
-:10F3A0002000000000000000280428048E80238034
-:10F3B00008A04228008A0023A04BA002E800BA005F
-:10F3C00076800BA00208008A00328008E003CA00A1
-:10F3D000400000000000000028054C00820020D002
-:10F3E0000830020C009B0028C01AB0026C00B30267
-:10F3F00020C00B30020C00A30022C0283482CA00B7
-:10F40000500000000000000020011C00870020E0E8
-:10F410000878020C00972025C00B7102DC81B72010
-:10F4200021C00B7A423C80872021C0087002E8008E
-:10F43000400000000000000028080E82C780B1E0F4
-:10F440002CFA061E08D3B139604E78125EA0FFF088
-:10F4500021E00FF8031F08E3A033E00C6803EA0281
-:10F460000000000000000000081DAC40FB003EC092
-:10F470000FB203EDA8EB103A800FB0C3EC40FB00D5
-:10F480003EC00FB083EC80EB70BEC40FB0038206A9
-:10F4900060000000000000004005FE00CE80B36068
-:10F4A0000FFC837E20EFB03BE00FB8033E00CF811E
-:10F4B0003FE08FF883EF40FFC233E10CF803D00048
-:10F4C0007000000000000000A8119C8287182180B5
-:10F4D0000B30021C60D71021D00B7B023C00D70000
-:10F4E0002DC00B7002DE00BF00A3C4087003AA0485
-:10F4F00060000000000000000000BC11870021C077
-:10F500000B30021C00932069C00B70021C008700A6
-:10F510002DC00B7102DC20B71021C00860028400EE
-:10F5200020000000000000006014CD00834020C0D7
-:10F530004B30020C01830020C00B30020C00938082
-:10F540002CC00B3002CC01B30020C008302298043C
-:10F550003000000000000000A815BF20CAC03280A3
-:10F560000FF0033E009F003A800FF00B3C00CF9855
-:10F570003EC00FF603FF00FF0031E02CB003AE04E5
-:10F5800060000000000000008000CC80FB003E50C6
-:10F590000FB003AC02FB007E500FB003EC00FB0089
-:10F5A0003EC00FB203EC20F3003EC60F9003A00054
-:10F5B00030000000000000000110FC02CF9873C86A
-:10F5C0000F70033C00FF0033280FB0021C004F00F7
-:10F5D0003FC00FF003FC00FF0133C00CE403E40460
-:10F5E000300000000000000080046C008380A2F85E
-:10F5F0000BB0422C00BB0032100FB0036C04AB0008
-:10F600002EC00BB012EC04EB0022C04A9482E00042
-:10F61000100000000000000080056C008A0022003D
-:10F620000BB0022C00B300A2C00B3002AC00AB0444
-:10F630002EC00BB042EC00BB0022C008B022E0009C
-:10F64000400000000000000008000C008B012000BA
-:10F650000B30060C00B30020C00A320ACC00A30015
-:10F660002CC00B3002CC00A30022C04A0012C20101
-:10F67000000000000000000000086C008B0422C0A5
-:10F680000FF1031C00FF0432C00BF203BC00EF00BB
-:10F690003EC007F003FC80FF00B2C00CA003E003F3
-:10F6A0005000000000000000A019DC00F5003FC081
-:10F6B0000FF003FC01FF023BC00FF1037C00FF00D1
-:10F6C0003FC00FF013FC40EF003FC00FC003E8063F
-:10F6D0007000000000000000C015F240CC80372010
-:10F6E0000CD803B044FC083F0E0FC103FC00CC94BF
-:10F6F0003F0A2EC4037D80CF103FC00FC08330006F
-:10F7000070000000000000008008E0908802228164
-:10F71000089213A4403B6022180B8102FCD48100A4
-:10F720003AB00A94023D40AF632FDF0B98002004EB
-:10F7300030000000000000008805E0008800204044
-:10F74000883082C000B00828800A1002CC208001D6
-:10F750002C401B06028C90936068C04A0042220134
-:10F760007000000000000000C005A002880022C058
-:10F7700008B002E420BB8826980B8042CC188A008F
-:10F780002EC21B9802AC00AB002EC00B9882300436
-:10F7900060000000000000000011E3C0CB02320056
-:10F7A0002C8003AE08B9003E700FB903EC02484844
-:10F7B0003CC00F8C93EC00DB001AC00EAC031004AD
-:10F7C0007000000000000000E001B200FF00BB80FC
-:10F7D0000FC043B640BD003B600FE803FC00FF9440
-:10F7E0003BE40E600F6C08EF013FC00F6003F800B0
-:10F7F00060000000000000004010A100FB003E601F
-:10F800000FA003ED00F9403A000F9003EC02C90489
-:10F8100032D00F90032C08DB00B6C00DB403D00427
-:10F820002000000000000000C8050000B3892EE0A1
-:10F830000BA403A401B9002E010B9042FC108950C7
-:10F84000A2C08DB4023C448F0023C008B002F20075
-:10F850004000000000000000C0040C00B0802E003A
-:10F860000B1202C800BA002CC00B2002CC00A20070
-:10F8700020002B2D9A2E42830028C0082002F80079
-:10F88000500000000000000020001E04B4802DA0E5
-:10F890000B58029200B6802DE00B6802DE40A68075
-:10F8A00021242948021E80878069E0086102C8007F
-:10F8B000400000000000000048180C00F0303C4CF4
-:10F8C0000F3203C880B20038800F1B03EC00E03019
-:10F8D00030040FB1030E85CB003AC00C3103D202C5
-:10F8E0000000000000000000401CBC00FC113FC4F0
-:10F8F0000FB813B004FE023F800FC003FD00DF12FB
-:10F900001D040FD043BC01EF1033C40EF303D00627
-:10F9100060000000000000000805EE00CB003E0083
-:10F920000F80032800F8003E403DB003EF08C900F7
-:10F930003A000CA003EC98FB2032D20CA8032A0258
-:10F94000700000000000000048119C0087012D801D
-:10F950000B40421C043700A140086002CC808700A5
-:10F960002D802E7002DCA9B72821D0087002120069
-:10F9700060000000000000002000BE0287802D60B3
-:10F980004BE8025A01B48828E08878C2DE5286C06B
-:10F990002960086802DE40B392E1E828280270007E
-:10F9A00020000000000000006814CC008B802EC0F6
-:10F9B0000B20024D809B2020E0083802CC00838081
-:10F9C0002CC00AB002CC08B30020C0083102520497
-:10F9D0003000000000000000E805A800CAE03E80FA
-:10F9E0001FA40B7900FE003F821DE003E800CE401B
-:10F9F0003B882CE403E801FA0032800CE8037A0427
-:10FA000060000000000000004811A000F8093E005E
-:10FA10008FC083A018F8003C200F8803E000F8088E
-:10FA20003E200E8083E101F0003C000F800B92002D
-:10FA300030000000000000000810A400F94232402D
-:10FA40004C98030400C9003A400F90232400B98168
-:10FA50003C400C92032400F90532406C90C3C20470
-:10FA6000300000000000000080042414B900A254FB
-:10FA7000089B1A240289002240289002A400B99011
-:10FA80002E40289C822504B9002240089812E000EC
-:10FA9000100000000000000018052400AD00234005
-:10FAA000085002640089002A400810026400B9006E
-:10FAB0006E400890022500A9002240089106C60069
-:10FAC000400000000000000008041400B510A1442C
-:10FAD0002850024480813020480812028440B180BE
-:10FAE0006CC80812020480B1342048081202C20116
-:10FAF0000000000000000000B80D6140E8403290B6
-:10FB00000CC5036140C0403A140F850321B0F85082
-:10FB10003E000C85032140F840B0140C8003EE0138
-:10FB20005000000000000000B81DC404F9220E4877
-:10FB30000F1013B440FD303F444FD100E484FF0167
-:10FB40003D440FD10BE440F9303E440FD103E604AD
-:10FB500070000000000000003805E400DD403F5068
-:10FB60000CD0032C00C90036400F90132704F50178
-:10FB700037400CF003F620F9A832680CD003C60019
-:10FB800070000000000000001800E00088A02E288F
-:10FB9000288002200088A022000B800A6280B80022
-:10FBA0002200088002E100B8E0223A08A002CE0458
-:10FBB00030000000000000004800840281002E4058
-:10FBC00008100A4402810824400A10024580B90046
-:10FBD0002440291002C400B1082444081002C201C4
-:10FBE00070000000000000001814A40489012E50C9
-:10FBF00048B2026400910022460B90026400B901F1
-:10FC000026C009B012E400B1002640089002C604E4
-:10FC10006000000000000000A004E400C9003C40B7
-:10FC20000C90036400C90236500E93032400F9902F
-:10FC300036480D9483E408F900B6400C9403E804B8
-:10FC400070000000000000006810A400E9003E40C1
-:10FC50000F9013A400E9022E61059003A400F9009F
-:10FC60003A400E9043E410F90038402F9003CA0048
-:10FC700060000000000000002810A000D80132043D
-:10FC80000F8043C001C800B2010C80032000C840AF
-:10FC900030008C8483E000C80032006C8403CA0406
-:10FCA000200000000000000008042800BA002380A3
-:10FCB0000BEA02E800AA00228008A00228008620A1
-:10FCC00037A08DE402F800DA00228008A002CA0002
-:10FCD000400000000000000008056C00B30020C0D8
-:10FCE0000BB8024C04830020C008B0020C02830051
-:10FCF0002040283402CE908300A0C0083002CA0001
-:10FD0000500000000000000020011CC0B588214008
-:10FD10000B7002DC80A32021E04832420E908E015D
-:10FD20006550097002DE20932121C0087002E800AE
-:10FD3000400000000000000028181E00FF80B1A055
-:10FD40000F48027E0087A033E0287A0B1F00C48092
-:10FD500031608C5803FE00C7C833E80C5803EA0230
-:10FD60000000000000000000081DAC00FF003E0085
-:10FD70000F9023ECA0FB403EC08FB503ED80F80050
-:10FD80003C400FB003E800FB023ED00F9003C206D8
-:10FD900060000000000000006004BE00FF803FE043
-:10FDA0000FD903FE20CFC833EA8FFC033F00FD804C
-:10FDB0003F600EE803F200CF802FFE0C78030000B6
-:10FDC0007000000000000000A8009C00B5022DC0DB
-:10FDD0000B5842DC80CF0021C10B30121C40B40212
-:10FDE0002D46087112C800E7002DC40870036A048C
-:10FDF000600000000000000000009C00B7002D0221
-:10FE00000B4602DC08970021C90A30221C00B4000E
-:10FE10002D400A5082C400B7002CC8285002401060
-:10FE2000200000000000000040148C18B3002E20B9
-:10FE30000B1802CF4A83C220C10B34220C04B858DD
-:10FE40002C400B2802C800A3002CC0081402480450
-:10FE50003000000000000000A805BC00FB003E8050
-:10FE60000FA002FC00DFA0B3C00EF00B3C00FBC0F3
-:10FE70003CA00EBD03EC00FF003FC00C30036A0441
-:10FE80006000000000000000A010EC00F9003E013E
-:10FE90008FB143EC00F3003EC04FB013EC00FB0009
-:10FEA0003E800C8403E10073003EC10FB243E000CA
-:10FEB00030000000000000000150FC10FF8037C03F
-:10FEC0000CE003FC20FF0833C00FF083BC00FF00F0
-:10FED00033C02E40031C01CF0011C04CD00300449E
-:10FEE000300000000000000081046C04B3022272A4
-:10FEF00008A116EC00BB0422C00BB042EC00BA19FA
-:10FF0000B6D0089C4A2680DB0022C00890036040DF
-:10FF1000100000000000000080052C00B9106220D5
-:10FF200048A002EC00BB0022C00BB002EC10BB00EA
-:10FF300066080AA81226109B002AC028B0262000B6
-:10FF4000400000000000000008000C00B900200084
-:10FF5000083202CC04B30020C04B3002CC00B30006
-:10FF600020000800020100930028C008300642115A
-:10FF70000000000000000000001C6C00F900B2400E
-:10FF80000C8202DC01FF00B2C00BF103BC00F900DF
-:10FF900026402E80032104CF00BBC00C9003000339
-:10FFA0005000000000000000A01DFC00FD003F40CC
-:10FFB0000F8103FC00FF003FC00FF023FC00FC009A
-:10FFC0002D402FC003F088FF0037C08FD003E80218
-:10FFD0007000000000000000C005FE40FF8033C23A
-:10FFE0000CF8037CA0FF903FC42CB403BC80CF402E
-:10FFF00037E00FF1936E44BF303F202CF863F004DC
-:1080100070000000000000008010EC00EB2023F056
-:1080200008B8523D00B3002EDC08F4421C428B40DD
-:1080300022C80BF6036C88BB302E0008B202E004A5
-:1080400030000000000000008805CC00BB0820C004
-:108050000830024CA0B3202680883602CCA0936062
-:10806000A4C20A32424C90B3202C0B883082E20129
-:108070007000000000000000C015AC08BB22A2C0C8
-:1080800008B0022C00BB002E9008B002EC009B0050
-:1080900022C00BB0026C00BB022E2008B002F00020
-:1080A00060000000000000004015EC00B18332C009
-:1080B0000C1A036C10FB0034C00CB003EC08DA009F
-:1080C00036C00EB00B6C00FB003E280CB002D00096
-:1080D0007000000000000000E001BC00ED803FC027
-:1080E0000FD403EC00FF003FC80FB0033C00EE408C
-:1080F0003FC00F7003FC00FF003F800FF003F8004B
-:1081000060000000000000004010AC00FB20B0C088
-:108110000FB403AC02CB0032900EB0036C00EB0046
-:108120003AC00CB002EC00FB003E910FB00390008F
-:108130002000000000000000C8052C00BB8023D7F1
-:108140000B90023C148B006A0828F000BC008300EE
-:10815000BEC088F0132C00EF002E800BB007B200D9
-:108160004000000000000000E0054C00B34020D0BB
-:108170000B28028C00830120C01AB8006C10A100EB
-:1081800068C02A30028C00B3022E004B3002F80483
-:10819000500000000000000020011E00B7A021E0F8
-:1081A0000BECC21E04878029E40879829E40AF90C0
-:1081B00029E00A38001E00A7902D240B78028800C1
-:1081C000400000000000000048080C50FB0930C0CF
-:1081D0000F20028C40C30020C00A38034C44E10049
-:1081E000AAC00E31438E00F3003C000F3003D202D0
-:1081F0000000000000000000404DBC00FF203FD008
-:108200004F7003FC00FF003DC00FF343FC40D7005C
-:10821000BFC00DF4C3FC40FF003F400FF003D00689
-:108220006000000000000000A805EC00FB0032D058
-:108230000D9001EDC0FB003EC01FBA03ACC0C800EA
-:1082400032E08DB443EC00FB0036A00CB0036A00B2
-:10825000700000000000000048119C00B70021C819
-:10826000086002DC20B7002DC00F74A21C28D600C5
-:1082700035C00872025C08B744A180487002120041
-:108280006000000000000000C0009E00B78020E4F5
-:10829000097826DE00B7802DE20A70128C88818072
-:1082A00021E0097802DE00B3A025A028780270043E
-:1082B00020000000000000004814CC01BB8020C05A
-:1082C000083042EC00B3002CC00A30220C009300AE
-:1082D00024C1083002CC00B30020E008B002120430
-:1082E0003000000000000000E815A800FA08B28085
-:1082F0000DE203E800FA003F800AA003A800CE5078
-:10830000328005A003E800FA0037A80CA0037A0425
-:10831000600000000000000048006008F8003C0019
-:108320000F8801E000F8043C004F0013C000F80083
-:108330003E000F80036000F8023E010F8003D20070
-:1083400030000000000000000810E400F990124026
-:108350000C9003A400C9003E700E94332408C90099
-:108360002A400B9003E400F9003A400F9003020406
-:10837000300000000000000080046400B942226068
-:10838000081002240089032E40089002A4018104F1
-:108390003E400B9002E400B90222400E9002200001
-:1083A000100000000000000018052400B9402A4A0F
-:1083B000089102A40089002E401A900A2404890022
-:1083C0002A400B9002E400B1002A400B9002060004
-:1083D000400000000000000008040400B101A848AB
-:1083E000889002048081402C5018140A841089401F
-:1083F0002C400B1002C400312020400A100A020158
-:108400000000000000000000B80D6140F0503A008C
-:108410002CA002A142C8003E00DE002321428800B9
-:1084200038140F8503E140F85038140F05032E016E
-:108430005000000000000000981DE408FD003644D4
-:108440000FD0036440F9003D500F9403E5007D40D8
-:108450003E400F9403E400F9103F400E9003E60401
-:1084600070000000000000001805E400FD403368C3
-:108470000CD003E781F90033780DD81326A0CDA0E6
-:1084800032400D9B032400F9A03C442C9007860049
-:1084900070000000000000003810E000B8A0A2103A
-:1084A0001880038284B880362C2E0F02A3A0D8E057
-:1084B00036228B080342A0F8E02E28088802CE045A
-:1084C00030000000000000000805C400B100A0500A
-:1084D000283002C580B10820400910A24408814814
-:1084E00020400B14020480B1382C4808128282010B
-:1084F00070000000000000001811A400B10022402C
-:10850000089202E400B90226584A9002E408994011
-:1085100026400B90026408B9012C48089012C6044A
-:108520006000000000000000A015E400F980324067
-:10853000089883E404B90130400D900B6402C9002F
-:1085400032400F90032400F9001E580C9003A80439
-:1085500070000000000000002801A400F9203C4049
-:108560000F9803A400B9003E428E104B8404F9001A
-:108570003E408F9003E400E9003E400F9003CA00A4
-:1085800060000000000000002810A000D8003208A1
-:108590000F8483A004C8043E008380012000C00033
-:1085A00032000F0003A000C80032104E8013CA042E
-:1085B0002000000000000000280528008E90A38005
-:1085C0000BE4022800CA002F804AA013A800AA00CA
-:1085D00036810BA00228008A00228008A0038A00AE
-:1085E000400000000000000028054C0093C020D08F
-:1085F0000B34028C008B002CF08B18024C00830093
-:1086000060C00B30028C02830028C10A3002CA000D
-:108610005000000000000000A0011E00B40B69C063
-:108620000958061E8097102FC24870829C80A708A8
-:1086300025CC0B70021E8187A2ABC4087302E80030
-:108640004000000000000000A8083E10DC8421E08B
-:108650000F78429F02C7883DE02F71034E00CF8004
-:1086600021E20F78839E49CFD039E80E7803EA02E1
-:108670000000000000000000084DAC40CA003600B9
-:108680008F3023ECA8EB403CC00F9643ED80FB00FD
-:108690003ED88FB143ED80FB2036CA0FB0A38206CF
-:1086A00060000000000000000005FE80FC8031E05A
-:1086B00005AA10FE44FF903FE1CFF9173F20D78075
-:1086C0008BE40FF8033E30FF8037E00FF8004000E6
-:1086D0007000000000000000A8119C00BD1021C027
-:1086E000084A02DCC0B7002DC20CD3021C808700F0
-:1086F00029C04B72021C00B70121C00BF0122A04E2
-:10870000600000000000000000009C903400218008
-:108710000970005C0CB7002DC408501A0C009700BB
-:1087200021C04B30021C00B70025C00B7002400076
-:1087300020000000000000002014CC00B000600009
-:10874000083E02CC00B3020CE02BB0020C009300F8
-:1087500028C00BB0022C10B30020D603300208044E
-:108760003000000000000000A815BC00FB00B200B3
-:1087700005BE037C00FF003E200CB0033C00D98006
-:1087800033C08BF0033C00FF0037E00FF0036A04B6
-:1087900060000000000000008000EC00FB043E00D0
-:1087A0000FA423CC00FB003E81089003EC00E914E9
-:1087B0003EC00FB003EC10FB003EC00FB003E00062
-:1087C00030000000000000000110FC00FF003780B6
-:1087D0000FFA03FC00CF003F9006DC233C00FD10A5
-:1087E00033C00FF00B3C00430033C00FF003C04414
-:1087F000300000000000000081006C09BB1922322B
-:108800000BBE036C008B002C900DB802AC00B100C5
-:10881000F2C00BB012AC008B0022C00BB003A04022
-:10882000100000000000000080052C10B30026207E
-:108830000B9012EC018B002AC20A90022C00BB00A4
-:10884000A2C00BB0022C00AB002AC00BB002E000AB
-:10885000400000000000000008040C01B3002000EC
-:108860000B00028C0083002EC00B34028C00BB0076
-:1088700020C00B30020D00A300A0C00B300282010B
-:108880000000000000000000000D6C00BB043680FA
-:108890000FB202FC02CF0238C00EF0033C00FB0016
-:1088A00023C00FF0033D02EF0033C00FF043C003BD
-:1088B0005000000000000000A01DFC00FF003F0071
-:1088C0000FF4237C00FF003FC00DD003FC00FF002D
-:1088D0003BC00FF003FC88DF003FC00FF003A80689
-:1088E0007000000000000000C005F050CE1233D030
-:1088F0004C868330805F6833C40FF3833CC0CC3830
-:10890000B3080CC603F1A0FF0033240CC203F0002F
-:1089100070000000000000008010EC80D22023D8FE
-:108920000D96028860AF4023DC0BF6023CC28860E3
-:108930002252089122E100B724A2488A848260046E
-:1089400030000000000000008805C4008100E0C481
-:108950000A00020480A320A8C01B300A0C00A0005B
-:10896000280C090202C480B31C2208190302E21178
-:108970007000000000000000C015A400998062C0D3
-:108980000BA032A451AB002AC08BB0000C00A9C0D0
-:108990002A2108B822E200BB0022841BA8427004EE
-:1089A00060000000000000004015E200CBC932C0AA
-:1089B0000E8B132210DB0132C00FB00B2C0068812C
-:1089C0003A222C8823E300FB0030308D9C83D004B6
-:1089D0007000000000000000E001BA40F7043EC251
-:1089E0000DD823D8007B0037C00F7033FC10D200A5
-:1089F00035C08FC003F400F7023FE00E8003F8009B
-:108A0000600000000000000040108120C80830C055
-:108A10000C00832440C3893AC00EB00B2C08C9480F
-:108A200072540F9103ED02EB8A3A628C800B1004B2
-:108A30002000000000000000C8052B048840A3C2ED
-:108A400002AE1227428F4423C20BF4023D000A40BB
-:108A500022E00BB502EC208F44A2408DBD233200F2
-:108A60004000000000000000E0054940838124C16F
-:108A700008280201009300A0E80A30828F60B390BA
-:108A800060B80B28124A0093002090092002780059
-:108A9000500000000000000020011E0287A825E011
-:108AA0000A7B021A04878021E40B78828E02969159
-:108AB00021210B6940DB40979223A089588208004E
-:108AC000400000000000000048082582C30034C0B8
-:108AD0000C9B4308D0D32038C00EB0038C00B300E9
-:108AE0002080071003E000D31038180D3003520225
-:108AF0000000000000000000401DB4007F201BD0DB
-:108B00000FF103F840EF003FC00FB4037C20CF0407
-:108B1000BF400FF003E410EF183DC00FE003D00694
-:108B20006000000000000000A805E800E300B2C4F7
-:108B30000CA0032400DB6832C80CB403EC80C880AE
-:108B4000B6E00CA0032E00CBE0B2600CB80B2A00FC
-:108B5000700000000000000048119C028700A1C8BE
-:108B60000870021C08970221D4087402DCC00700B8
-:108B700021C08870021800830821C0085002120426
-:108B80006000000000000000C0009E20AD8029E0D1
-:108B90000858021E0097B021E8087802DE10158000
-:108BA00021A10848025E0087A465A0087802300071
-:108BB00020000000000000004814CF108170A8C001
-:108BC00038300A0D009300A0C1283002CC028388FF
-:108BD00020E038340A4D72830024E82834821204DD
-:108BE0003000000000000000E815BA40EEC0BA8076
-:108BF0000CE0033910DA0032800CA003E800DEC874
-:108C000033A00CE0037B00CA0037B10CE4233A0424
-:108C100060000000000000004800C100F8003600BD
-:108C20000F8003C02038003E000F0003E000F80270
-:108C30003A240F8083A001F8043A040D8013D20077
-:108C400030000000000000000810E444C100324081
-:108C50000C9032240CC10638400D90090400D90054
-:108C60003E400F18032400F9013E400F9003C20458
-:108C700030000000000000008004640689002A50D3
-:108C800008940A2400894222500A90122500890083
-:108C90002E500B9C0A2510B9002E500B9002E000BC
-:108CA0001000000000000000180524208900204268
-:108CB0000810C2AC1089082A4209900224209900A9
-:108CC0002E420AB1822C20B9006E420B9002C600DF
-:108CD0004000000000000000080404008300284851
-:108CE0000812628C80810020400210028480812062
-:108CF0002C490B12060484B3026C400B1202C20111
-:108D00000000000000000000B80D41E0C8783014F9
-:108D10004C0513A142C078381E0D87830140D05006
-:108D20003C140E05030140F8783C140F0503EE03D4
-:108D30005000000000000000981DFC00FF000E44E1
-:108D40002FF1037440F9003E400D90036440FD1084
-:108D50003F440FD101F440F9013FC00FD103E606B3
-:108D600070000000000000001805E622E988B2400B
-:108D70000F90032416C98C367B8F9C83A790C90063
-:108D80003E500494132450C9E03E500F9003060057
-:108D900070000000000000003810E28088A0222847
-:108DA0000B8A022A8088A42230088E0A220288A018
-:108DB0002E2888AA12229088F42E200BC8020E04B6
-:108DC00030000000000000000805D420A508214262
-:108DD0000B50821431850825400A502294408508A2
-:108DE0006D40085002540295002D480B50824201FC
-:108DF0007000000000000000181584008D10234052
-:108E00000BD00034018D00234158D00234008D086E
-:108E10002F5008D20274809D002F480BDC024604BC
-:108E20006000000000000000A015E740E9C03240EB
-:108E30000F90092600C90436401F9023A408C9409A
-:108E40003E400C940B6420D9023E410F9403680409
-:108E500070000000000000002801A400F9803E40DE
-:108E60000F1403C508F9003E401F9023E400F900E9
-:108E70003C40AF98038600E9003E400F100B8A008B
-:108E800060000000000000002810B000DC40B300CB
-:108E90000FC0033102C404B1003C40031000FC4089
-:108EA00033000CC403B100CC00B3000CC403CA04EB
-:108EB0002000000000000000280528008A8022A071
-:108EC0000BA0022A008A8422A108A0022808BA0165
-:108ED000228008A02B28008A802A8008E002CA008D
-:108EE000400000000000000028054C029B8120E0AB
-:108EF0008B3806CE00938020C00838020C00B38067
-:108F00006CE00AB0024C00930020E0083002CA0076
-:108F10005000000000000000A001100480082102A1
-:108F20004B4406D020900821028044021000B4C0B7
-:108F30002D10484002000094892930084002E800C2
-:108F40004000000000000000A8083200D68031A0D8
-:108F50000FE80BCA00D68023A004F80B1A00FF808C
-:108F6000BFA02EC813DA025E8073A02C7803EA0239
-:108F70000000000000000000081DAC00F9003E40A9
-:108F80000F90032400E9003E400E8003E400F80047
-:108F900032400FB003E401E90436400F8003C206FB
-:108FA00060000000000000000005FE00CD8033607E
-:108FB0000CD8433600CD8033600CD923BE004D80E1
-:108FC000336008F80B3E00FD843F600FF903C000DA
-:108FD0007000000000000000A8119004DE00238053
-:108FE000086002B8208E04238008680210008E20DA
-:108FF00023820840021200F6002D800B41A0EA04F3
-:1090000060000000000000000000900084002100CB
-:109010000841025040940021000A5202D800850203
-:1090200025040840221808B4002D100B7840C00019
-:1090300020000000000000002014EE22930020C059
-:10904000083802EC00930020C12A2002640282103A
-:1090500024F00A3C422428B3002CE00B8882C80488
-:109060003000000000000000A815AD00CB00B2C029
-:10907000ACBE036E02DB00B2C01EA003E400CA1146
-:10908000B6D0ACBC032400FB003EC0CF8403EA048E
-:1090900060000000000000008000E040F8003C009C
-:1090A0002F8203A000E8003E001D9013A800F900E5
-:1090B0003A00818343E800E8033E040FB003E00078
-:1090C00030000000000000000110E000D6003780F2
-:1090D0000CA003F800CE0033800DA0132008CE00B2
-:1090E00033820C40733018CE001F804FC1430044C0
-:1090F000300000000000000081047C008D0023404F
-:109100000AD002F4008D00234008D4803E428D40F6
-:10911000234008F0023E408D000F400BF402204037
-:10912000100000000000000080052C009900A640FF
-:10913000089006E400910020408800022408804046
-:1091400020400AB002240089000E400B8402200057
-:1091500040000000000000000804000082002080A1
-:109160000A2106C801820020800832820808830094
-:1091700060800A0012088082002C800B300A0201F5
-:109180000000000000000000000D6000D800360064
-:109190000C8423E000C80032000D820B2002C800BE
-:1091A00032000E00032002C8003E000F80030003BF
-:1091B0005000000000000000A01DFC00BF003FC0E8
-:1091C0000FF003FC00FF00BFC08FB003FC08FF02DC
-:1091D0003FC00DF003ED00FF023FC00FF003E806B3
-:1091E0007000000000000000C001F08CFF003D6036
-:1091F0002CB2837C90DF3831E00FF8033C00FF2075
-:109200003FC40EF4037C00F48033000DF803F0003B
-:1092100070000000000000008010E120BB622E42C0
-:1092200028F4423E408F4422E00BB0837F44BFC10C
-:109230002DDC2AF6023F45B880226188B802E0049E
-:1092400030000000000000008805C580B2182EC85C
-:109250002930320C08B32020C04B92020C00B340DE
-:109260002CC08934124C00B00024C1493002E20104
-:109270007000000000000000C011A400BA0C2EE035
-:10928000A9B0062C008B00A2C00B90006C00BB00A4
-:109290002EC00B30026C00BA8026F008B002F00439
-:1092A00060000000000000004011EE00FBC43E78AA
-:1092B0002DB0036C08FB0032C08B24832C00FB0014
-:1092C0003EC08FB00B6C08B2E016608DB023D004A6
-:1092D0007000000000000000E001BE98FF403FC0A9
-:1092E0000E7003DC00FF003FC00FE003FC00FF0036
-:1092F0003FC00EF003AC00FE00B9C00FF003F80051
-:1093000060000000000000004010AD00FA403ED0B8
-:109310000EB203EC00C3003EC00CA0032C01FB0006
-:109320003CC00EB803EC00DA003AD04FB023D004B2
-:109330002000000000000000C8052C00BA002CC06E
-:1093400008F407BC14DF003EC01AA052BC00BF04E2
-:109350003FC08AF003BC00FA0022C80FB003F2003D
-:109360004000000000000000E0054801B1006CC2B0
-:109370000A3042CC0083052CC00830028C01B304B3
-:109380002CC00A30228C00808028C00B3022F800CC
-:10939000500000000000000020011E08B7806FE0B0
-:1093A0001878028E40B7802DE00A78029E00B780C0
-:1093B00029E10A78029E01BC8029E40B7802C800EA
-:1093C000400000000000000048080940F1203CC4B3
-:1093D0000E3902CC00C3002CC40892038C88B31051
-:1093E0002CC40EB0078C00C20838C00F3043D20224
-:1093F0000000000000000000401DBC10FC007FC009
-:109400000FF083FC21DF083BC08F9001FC21FF0C93
-:109410003FC20FF103EC00EF0077C01EF00390068F
-:109420006000000000000000A805E801F90032C05B
-:109430000FB203EE90DBE13AC04D38132D30FB0044
-:109440003EE04FBA432C40FA003FC08CB003EA0024
-:10945000700000000000000048119C00B10021C015
-:109460000B7102CC20A72821C00B70135C08B71029
-:109470002DC44B34831CC1B7022DC01A7002D20414
-:109480006000000000000000C0009A20B4C425A2C3
-:109490000B7806DE00838029E01BF8025E80A7A01F
-:1094A0002DC80A72021E00A68028E0087802F0008B
-:1094B00020000000000000004814ED00B34024C369
-:1094C0000B3042CC00A30020C01B34024C00B30080
-:1094D0002CC04B30020C00B3882CD40A3002D204CA
-:1094E0003000000000000000E815B800FE40B7A002
-:1094F0000FA003E800DA003A800FE2036800FA00E8
-:109500003E800FA00B2800EEE03FB004A003FA0459
-:1095100060000000000000004800E004F0083A107D
-:109520000F8403E010F8003E004F8083E000F80055
-:109530003C000F80038000F8403E090F8003D200FA
-:1095400030000000000000000810E420E900324470
-:109550000C90032400F9003E400F9013E400B90082
-:109560001E400C10032400C9A03C640C900382042C
-:1095700030000000000000008004640089002268C0
-:109580000813022408F9002E481B9002E400B900D9
-:109590003E400C90022408F9402E600A9006E0003C
-:1095A000100000000000000018012400A900204065
-:1095B0000890022400B9012E400B9002E400B9008B
-:1095C0002E40089222240089002E40089002C600F6
-:1095D0004000000000000000080404808121E050E9
-:1095E00028160A0480A1402C404B1422C400B1006C
-:1095F0002C500914020404B1002C400A1002C201CC
-:109600000000000000000000B80D6140E85032008A
-:109610008C80022000B8003E000B8033E010F80080
-:109620003E000C80032008CA003E000C8003AE03FD
-:109630005000000000000000981DFC40FD102F416C
-:109640004F9103E440F9403E404FD063E500F940BC
-:109650003A502E94036500ED003F500F9003E6064C
-:1096600070000000000000001815E600F9E033501B
-:109670000CDA03A600D9803F400F9103A600F988B9
-:109680003E680CDE036600ED003B690C9003C600EB
-:1096900070000000000000003810E108B8E0202051
-:1096A000188E26E10080A02E004B8842E150B84081
-:1096B0002E2A0D0A022008B8002E140D8002CE04B6
-:1096C00030000000000000000805C500B160204027
-:1096D0000831A2C50091482C401B12028400B10041
-:1096E0002C500916020500A3042840081002C201EC
-:1096F00070000000000000001805A400B9082070E8
-:10970000289002E40089002E400B9002E408B9037F
-:109710002C402990026400B9002E62099002C60410
-:109720006000000000000000A005E500F9D0B27064
-:10973000089003E400D9043E400F9003A410F902FE
-:109740003E400D902B6400E98D3A600C9003E804D4
-:1097500070000000000000002801A400F9803E42D3
-:109760000F9003E400F9003E400F9A03E400F90073
-:109770003E402F1003A400F9223C404F9003CA0042
-:1097800060000000000000002800A000F04032004F
-:109790000C8003C000F80032201F8003E000C800E6
-:1097A00032000C80022000C8C03E000C8003CA04B6
-:1097B000200000000000000028152810BA0023A097
-:1097C0000AE402E800BA002BA10BA002E800AA00FC
-:1097D0002A810AA003E808DE002E800AA002CA003F
-:1097E000400000000000000028054C00B304A0B1B8
-:1097F000083622CC00B30020E40B3002CC008300FA
-:1098000020C00818020C0091012CC0083006CA00C4
-:109810005000000000000000A0011CC8B32121C2BC
-:109820002A7002DC00B7A029C00B7202CE00A7810B
-:1098300029C04A7402FE0097012CC00A7012E80089
-:109840004000000000000000A8081E80F7C031E0C2
-:109850000C4803DE11F78021E00B7A03DE00C380A1
-:1098600033D86C78033E00D6803DE00C7803EA02E2
-:109870000000000000000000080DAC08FB803EC0A6
-:109880000FD003EC04FB3C3EC00FB6076C01FB009D
-:109890003ED00F9407EC01EA003EC00FB003C206B1
-:1098A00060000000000000000001FE00CFA43B604B
-:1098B00008D9037E00CF803F254FFC87BE00CF80B4
-:1098C0007FFC0CFC037C00F69033E00FF803C00033
-:1098D0007000000000000000A8119C088F282140A3
-:1098E00008D0021C40A72031041B7802DC80D7007E
-:1098F0002FC41AD0021E48B60061C00B7006EA04DD
-:10990000600000000000000000008C008730694407
-:109910000850220C0087012D448B70068C108700A4
-:1099200029C90850021C44A60061C00B7002C00087
-:1099300020000000000000002014CD00838860405B
-:109940000010024C002B002C411B3002CC00930075
-:109950002CC00A30420C00B24020F10B3002C80487
-:109960003000000000000000A815BD41CFC0BAF0D3
-:1099700028901B6C08CF002CC00FF003AC008B00AC
-:109980003FC06CB04B2C01FB4022C80FB003EA046F
-:1099900060000000000000008000EC04FB043FD4E5
-:1099A0000F1003AC00FB0032C05FB003EC00FB04FF
-:1099B0003EC04F1013EC00FB883EC04FB003E000E8
-:1099C00030000000000000000110DC00C70033621E
-:1099D0000CC00B3C00EF0033E01CF0133C08F70018
-:1099E00031C00ED803BC00FE003DC60CF003C044DD
-:1099F000300000000000000081046C00CB0322470F
-:109A00000898422C009B002AC00AB0022C00BB041C
-:109A10002AC00AB002AC08FA002E6008B002E0408A
-:109A2000100000000000000080052C009B0020407A
-:109A30000898022C00BB0022880830022C00BB00D2
-:109A400022C08A9202AC00AA802EC008B006E000B4
-:109A5000400000000000000008040C008300A0404B
-:109A60000810020C00B30028800A32120C00B30464
-:109A700028C00A30228C20B2002CC0083002C2015B
-:109A80000000000000000000000D6C02CB00304020
-:109A90001C94032C00EF0032C088F08B2C00FB00DC
-:109AA00033C0AEF003AC80EA013EC02CB003C0036B
-:109AB0005000000000000000A01DFC00FF002F402F
-:109AC00007D283FC00DF043FC00FB003FC00FF009F
-:109AD0003FC00FD00BEC00EE003F400FF003E80654
-:109AE0007000000000000000C005F500CF083F48EE
-:109AF0000FC39370D0DC303FD80CB2033CC0FF40A2
-:109B000033C42CF1036250FC3433000F5C03F000CB
-:109B100070000000000000008010C4808B002F5AED
-:109B20000BA61221C089702FDC08F2C23DD0BF40C5
-:109B300037DC88F50A2080E8102A160B9002E00432
-:109B400030000000000000008805C00083082C449D
-:109B50000B02020C0080002CC80833428C90B330FA
-:109B600028C84A3212800CB0A028280B1202E20149
-:109B70007000000000000000C015A2008B002E48FD
-:109B80000BA022202088802EC028B00AAC00BB0089
-:109B90002EC00AB002A000AB822AA00BB202F004D1
-:109BA00060000000000000004015E700CB003EC050
-:109BB000CF9C0B2100D8883EC00CB003AC00FB004A
-:109BC0003AC00EB043E840F8803A600F9803D004E2
-:109BD0007000000000000000E001B400FF000FE092
-:109BE00007A103E802FB003FC00F70237C00FF02C7
-:109BF00035C04DB0037420FC013F000FF803F8009E
-:109C000060000000000000004010A500CB00BA403A
-:109C10000C140B2F22C94032C08EB003AC00FB00E5
-:109C20003EC00EB003E400C90032002C90031004C3
-:109C30002000000000000000C80124008F00224026
-:109C40002CA54229008B04A3C10DF00A3C00BF00E3
-:109C50003FC008F0016900DA0522D00894037200C1
-:109C60004000000000000000E0056040830120C0CB
-:109C70000900022000826022C00830424C10BB0262
-:109C80002CC008B01205009B002082093202380067
-:109C9000500000000000000020011690878020E0A6
-:109CA0000858021614848121E02939025E00B78029
-:109CB00028E00878027A80968121E009F8024800BD
-:109CC0004000000000000000480808098B103844DC
-:109CD0004D25120C00C21022C80A3803CC00F31024
-:109CE0002CC00C30038AC0D91032402D1003120250
-:109CF0000000000000000000401DBC80FF003F404D
-:109D00000FF003F440ED003FC00EF303BC04FF006E
-:109D10003FC20FF00BD400FF10BF800EF003D0063F
-:109D20006000000000000000A805FA00CB023EC061
-:109D30000F9003A000CB003ACA0CB313AF24CB485A
-:109D40001EC80FB6032C00FA003EC00F9003EA00B5
-:109D5000700000000000000048119C0887202DC4FE
-:109D60000B5012DC0487002CC00870A21D00A74015
-:109D700025CB8B74821C00B7002DC10B7002D2045E
-:109D80006000000000000000C0009A0187902DE0F4
-:109D90000B7802CE0086802DE4297A029E8087A06F
-:109DA0006DE80B78021E00B5802D600B7802F00084
-:109DB00020000000000000004814CD0083022CE0C9
-:109DC0000B3002CC0083E02CC00830020C00A30052
-:109DD00024C00BB0020E20B3082CC00B3002D204FA
-:109DE0003000000000000000E815B882CA003EA85C
-:109DF0000FE003F8028E803E800DA05BA800CA0031
-:109E00003E800FA0033B80FE422F800FA803FA0480
-:109E100060000000000000004800E020F8003E0064
-:109E20000F0603C000F8113E000F0003E000F80029
-:109E300036000F800BE000F8043E200F8103D200B3
-:109E400030000000000000000810E400F9003E406F
-:109E50000C9A032440C9C03E404C90032400F900F2
-:109E600036400790032400C90432600F9003C204F7
-:109E7000300000000000000080046400B9022E40A1
-:109E80000A9202250289E02E409890022400B9002F
-:109E900022400990020400D90022440B9C02E000F9
-:109EA000100000000000000018052C00B9002C4034
-:109EB000089002242889002C40689042240CB104A8
-:109EC00026400B900A2C8081002240CB9282C60053
-:109ED000400000000000000008040400B1202C48ED
-:109EE0000A1202048081212C4C0811020408B110CE
-:109EF000204C09120224019120A0480B1002C2013B
-:109F00000000000000000000B80D41E0F8503E14D1
-:109F10000C85032140C8503E1008068301F0F86804
-:109F200036100F05032940C85032940F8503EE0305
-:109F30005000000000000000981DF400F9103F449C
-:109F40000FD10BF440FD122E4C03920BE400F920CC
-:109F50003E4C0F9103FC00FD103F440FD003E6067A
-:109F600070000000000000001805F620C9013E4006
-:109F70000FD0033C00BD0032630C9E432700E9C0B4
-:109F80003E680C98033400F9103F400FD003C60020
-:109F900070000000000000003810C220D8002E0021
-:109FA0000B80522804B8002238088803620088F029
-:109FB0002E3A488F0A2000B0802E000B8002CE047B
-:109FC00030000000000000000805C48081002C4023
-:109FD0000B10020400B10020424814420580A12069
-:109FE0002C440810820400B1202C400B1002C20146
-:109FF00070000000000000001815A50199002E4017
-:10A000000B90022440BB0122410890122400A900B9
-:10A010002C400810402408B9406E500B9202C60430
-:10A020006000000000000000A015E714C9053E41D3
-:10A030000F900B2404F908B2402C900A2400E90088
-:10A040003E402C90032700F9803E600F9003E80407
-:10A05000700000000000000028018488F9003E48DC
-:10A060000F9903E600F9023C40AF1003E412D90453
-:10A070003E400F9003E500F9C03E640F9083CA0094
-:10A0800060000000000000002810A100C8003E0091
-:10A090000F80032100C840B2000C80032010C800CC
-:10A0A00032000C8003E080F80432002C800B0A049C
-:10A0B000200000000000000028052800CA002E80B3
-:10A0C0000BE80A38108EC022800DA00228000A0476
-:10A0D000028028A002FB00BA0037B048EA020A005A
-:10A0E000400000000000000028054C0093012CC037
-:10A0F0008BB0420C909B2020C04830422C00830043
-:10A1000020C0083002CD40B30024C80838020A003D
-:10A110005000000000000000A001140087002DC0C6
-:10A120000B24061600930821C80931020C8087A071
-:10A1300021C0187202DC00B7B424E30878022800BA
-:10A140004000000000000000A8081E0297A03DF09B
-:10A150000F48033E00D68030E02C7A021E82C3F006
-:10A1600033EC0C7C03D600F78035E00CD8032A02D0
-:10A1700000000000000000000819A5A0FB003ECA76
-:10A180000F8003EC02EA003EC60FB40BED40FB006B
-:10A19000BEC00FB643E000FB023E800F9003C20634
-:10A1A00060000000000000000005FE02CF883FE0D4
-:10A1B0000CB903FE00DD8133E08CFC033F04CF804B
-:10A1C00033E24FFC033E00CFC033640CF803C00001
-:10A1D0007000000000000000A811944087002FC10B
-:10A1E0000D69A2D040BC0023C008F0029C0087008B
-:10A1F00021C00B700A3C048710214C086002EA045D
-:10A20000600000000000000000009E0087002DC0DC
-:10A21000096202D800970021C40870020C40970020
-:10A2200021C40B30025800A7082180086082C000BA
-:10A2300020000000000000002014E42583002CC052
-:10A24000092202CC20B20020C028B0028C0093006A
-:10A2500020C00B30426C20830820E208B802C804FA
-:10A260003000000000000000A815A400CF003FC08F
-:10A270000D9C03E800DB8033C00CF00B3C06DF00D4
-:10A28000B3C00BF0076800EF4032A80CA803EA0443
-:10A2900060000000000000008000EC00FB002EC009
-:10A2A0000F9403C540FA303EC00FB0036C00EB00C2
-:10A2B0003EC00F3013AD40FB023ED00FB403E000B0
-:10A2C00030000000000000000110E400C70031C1B0
-:10A2D0008CD0033400CD003DC00CF0017C00DB01CC
-:10A2E0003DC04CF00B3002C30032000FD0030044DD
-:10A2F000300000000000000081046E408B002AC086
-:10A30000288442228088803AC00DB002AC088B00BD
-:10A310002EC008B00223208B0022308B8C022040FC
-:10A320001000000000000000800524008B0022C007
-:10A330000838862A0089802AC008B002CC009B0019
-:10A340002EC008B04226008B0022710B8C02200028
-:10A35000400000000000000008040C00830028C03A
-:10A360000832420000810028C00930528C08830066
-:10A370002CC018300600008300A0000B0002020170
-:10A380000000000000000000000D74028B0033C0CC
-:10A390000C920B2002C8003BC00CF503FC00DF014F
-:10A3A0003FC104F0332140CF0032000F800B000387
-:10A3B0005000000000000000A019FC00FF003FC09A
-:10A3C0000FC403F0009C003BC00FF003FC00FF0033
-:10A3D0002FC00FF003F080FF003F000FC003E8061E
-:10A3E0007000000000000000C005F0C0FFA0312494
-:10A3F0000EF0631004EF643FC04CF3031C80DF08D1
-:10A4000037C00FF003F0A0FC0031082CD203F0009D
-:10A4100070000000000000008010E100BBC1224875
-:10A4200008FD022E0097002FC24871237E40BF0016
-:10A4300021C54BF502EF00BB4036E008A802E0045E
-:10A4400030000000000000008805C584B311A2C9D7
-:10A450000A30020001B33028C40832420C00A308BD
-:10A46000A0CA0A32828010B0412411083102E201F0
-:10A470007000000000000000C015A500BB0022E134
-:10A4800028B0022C809B002EC008B0026C00B300E4
-:10A4900022C00BB000EC20BB0026C0088002F004F4
-:10A4A00060000000000000004015E340F70432C0E7
-:10A4B0004EB0232E20EB001EC00CB0012C00FB0080
-:10A4C00036C01FB003E140FB0036980C9003D00467
-:10A4D0007000000000000000E001B604FF023FC071
-:10A4E0000FF003FE00EF023DC00FF023FC00FF0061
-:10A4F0003FC04FF003FC00F4003B400FA013F800F6
-:10A5000060000000000000004010AA20EB1036C0E0
-:10A510000DB007EC20DB0032C00CB0026C20EB0069
-:10A520003EC10DB003E020DBA032904CB00B100414
-:10A530002000000000000000C8052D008F8020C111
-:10A54000087012CF008F00A3C00DF0023C008F00F6
-:10A5500037C088F002EC00880020400880023200FA
-:10A560004000000000000000E0054C00A3802481B2
-:10A57000093006CC40930028C108B002CF40A300A8
-:10A580002CC0093002CD00904060402810023800F5
-:10A59000500000000000000020010E00878023E032
-:10A5A000487902DE41978029E01978069E0087806D
-:10A5B00025E0087802D203838021A0086802080001
-:10A5C000400000000000000048080C00A30034C058
-:10A5D0000D3042CC01D3103AC50C3903CC00E30452
-:10A5E0003CC40D3003CE00D00030400C30031202CA
-:10A5F0000000000000000000401DBC00F7003FC04C
-:10A600001FF053FC00EF0837D10FF0837C00F740B8
-:10A610003FC10FF103D000FF00BF840FC803D00675
-:10A620006000000000000000A805E000FB003EE024
-:10A630002CBE83EC00EB403EC00FB403ED20FB10BA
-:10A64000B6D20FB483EC00DB8036C10C90212A0017
-:10A65000700000000000000048119400B7002FC0F7
-:10A660000836020C0887302DD98B7286DD00B320A6
-:10A6700021C80B7402D0028400A00028200212041A
-:10A680006000000000000000C0009A00B7802DE0CC
-:10A69000087A029D00A7A02DE00B78029E80A7807B
-:10A6A00021E4087A269E18830421E008780A7000C5
-:10A6B00020000000000000004814CC00B3002CE093
-:10A6C0005830120E8283002CC00B3002CC01B30034
-:10A6D00020C10B3002C00888D2202008000252049A
-:10A6E0003000000000000000E815B860FA003F826A
-:10A6F0000CA003FA00AA001E808FA003E800F2005D
-:10A7000032801FA003E800DA003688ACE0037A0448
-:10A7100060000000000000004800E100F8003E205A
-:10A720004F8003E100F0003C000B8003E000F802E2
-:10A730003A000F8043F100FC0A3D000FC003920075
-:10A7400030000000000000000810E600C9903E4004
-:10A750000F9203E400D9003240049007E700F9109B
-:10A7600030400C9043E409D98022402C100B0204A5
-:10A7700030000000000000008004646089C02E40AA
-:10A780000B9826C58089002240289012E710B90056
-:10A790003640289012C583C980B640089002200038
-:10A7A00010000000000000001805040089402E4140
-:10A7B0004B9002E4009900A2400A9002E500B90023
-:10A7C000E241089042E4009D50AB4A08D0260600C2
-:10A7D00040000000000000000804048281202C508A
-:10A7E0000B1002E400814020504A1432C400B140F2
-:10A7F0002451181412D40085402D4008500602013F
-:10A800000000000000000000B80D6140C8003E00DC
-:10A810000F8002E000D80032000A8002E010F80049
-:10A820003200048003E000D8003A000CC0032E037D
-:10A830005000000000000000981DF440F9103F4156
-:10A840000F9403F500F9403E500D9403E510F940D4
-:10A850003E504F9403C500E94136500F9403E6067D
-:10A8600070000000000000001805F600FDA83A4046
-:10A870000CD8233600E9A03E780F9E03B680CDE2C7
-:10A8800032680C9B0336824DA037688C9803060013
-:10A8900070000000000000003810EBA0B84020203D
-:10A8A000088502215188C02E290B8E02E100D8E0D4
-:10A8B00022320D8D23614898D4A2102884020E0400
-:10A8C00030000000000000000805C500B3002A4A5F
-:10A8D00028104EA408A16828440B1402C50081402A
-:10A8E000A0500810020402912A204428144A0201B0
-:10A8F00070000000000000001815AC80B900224074
-:10A90000489006A400A9002E400B9022E400990074
-:10A9100022400910026402990022400890020604B5
-:10A920006000000000000000A015E400F9003858A5
-:10A930000C90538414A9043E400F9003E400C90016
-:10A9400032400C90032404D900B6404C900B2804EC
-:10A9500070000000000000002801A400F9023E4938
-:10A960000F10436400D9003E400F9003C400F10271
-:10A970003E400F9003C402E9043C400F1C03CA0090
-:10A9800060000000000000002810A180C8203E00E8
-:10A990008C800B2000E8023E000F8003A082C800DC
-:10A9A0006C000F80032010C80032020C80030A04E0
-:10A9B00020000000000000002805380086002E80DE
-:10A9C00068A8803A008A002E800BA002F8008A0056
-:10A9D0002E800BA00A3A008E10238008A0030A00E4
-:10A9E000400000000000000028054D0083002CC03E
-:10A9F0000838000C6023002CC00B3002CC408300D0
-:10AA00002CC00B30020C028A80A0E028300A4A00D9
-:10AA10005000000000000000A001162087022DC198
-:10AA20004870127C00A7202DC90B7200DC0087083B
-:10AA30002DC41B32021D01874221C208700228006A
-:10AA40004000000000000000A8083E02C7803DEC66
-:10AA50000C58031E00E7803DEC0F7F039600C78073
-:10AA60002DE20779030A06C38030208C38036A027E
-:10AA70000000000000000000081DAC00FB003EC00C
-:10AA80000F10438C00DB383ED80FB003CC04FB44DE
-:10AA90003EC08FB613EC02FF023E000FB003C206A9
-:10AAA00060000000000000000005FA00FF8031E3B4
-:10AAB0000EF823FE02DF80B7E20EF8037E006DD0B1
-:10AAC00033E00CF89B76C0DF84B3E004F803C000E9
-:10AAD0007000000000000000A8119040B70221C4DF
-:10AAE000087B42DC00870021C40B300010808D0001
-:10AAF00023C00DF20204428F0029C8287002EA0424
-:10AB0000600000000000000000009400B60023C0B8
-:10AB10000A72028C00870021C00A30020401A702D9
-:10AB200021C0087042008A870021C0287002C0003E
-:10AB300020000000000000002014C500B000A0D0DC
-:10AB400008B002C9428B0020C00B302204008300F1
-:10AB5000A0C0493002454093C0A8D4003502C804C3
-:10AB60003000000000000000A815AC00BB0031C0A0
-:10AB70000EB023CD00DF0037C00EF0016800E30007
-:10AB800033C01CF0034500DAC892D42CB403EA04A5
-:10AB900060000000000000008000E520FB003EC0D7
-:10ABA0000FB003EC00FB003EC04FB003AD00FB0054
-:10ABB0007EC01F3003A480E9203CC00F3203E000B8
-:10ABC00030000000000000000110DC00C70033C2AC
-:10ABD0002CF0033E20DB0013C00C70033C80EF041C
-:10ABE00073C10FF0223000C600B2C00CF003004465
-:10ABF0003000000000000000810069008B44A2C109
-:10AC000088B0036C008B0022C028B00A2D00BB0066
-:10AC100062C00BB00226028B8022C008B003204025
-:10AC20001000000000000000800528018A0822C0F2
-:10AC300008B2026C409B0028C048B0162904B90134
-:10AC400022C049B006AE098B8022E048B002200045
-:10AC5000400000000000000008040002820022C042
-:10AC600088B0024400830028C00830020800B10008
-:10AC700020C00B30028C00838020E008300A0201E3
-:10AC80000000000000000000000D6400CA0033C096
-:10AC90000CB2032C00DF003BC04CF5132C04EF007A
-:10ACA000A3C00DF003A840CB00B2002CB0030003FA
-:10ACB0005000000000000000A01DF000F4003FC0A4
-:10ACC0000FB103F000FF0037C00FF003FC00FF00DE
-:10ACD0003FC007F00B7C08FF013F000FF003A80600
-:10ACE0007000000000000000C005F0C5ED333BCC53
-:10ACF0000CF0033040FF253FCC0CF3833CD0DF4801
-:10AD000037304CF303FD80CF2833D80CF1033000EB
-:10AD100070000000000000008010ECD0BB3120CC9F
-:10AD200088F3422050BF902FC40AF6027DC08F40A6
-:10AD300026408FF602FD00FF0839C808F602A0047D
-:10AD400030000000000000008805C480A12028C950
-:10AD500008309A0009B3002CC02030024C908320A8
-:10AD600002080B3312CD80932024D808342222010C
-:10AD70007000000000000000C011AE00BB1022C037
-:10AD800008B00226013B016EC008B0024C088B00DF
-:10AD9000A2890BB002EC00AB006AC128B002B0047B
-:10ADA000600000000000000040156E00E8C13AC0DD
-:10ADB0002CB0432600FB063EC10CB00B2C02CB008E
-:10ADC00034229FB043EC009B0236C18CB0031004C8
-:10ADD0007000000000000000E001BC00FC803DD0DD
-:10ADE0002FF003FC00FB003DC0073003BC00EF0464
-:10ADF0003FE05EB001FC00FF001BC00FF003F80055
-:10AE000060000000000000004010AC00CB013EC913
-:10AE10000CB0172084EB00B2C10DB0036C00C3006E
-:10AE200032500FB0030C40C3007EC00C300310043E
-:10AE30002000000000000000C8052C008A582EE009
-:10AE400048F0022D00EF0123C008F0223C048F607F
-:10AE500036540BF00A3D408F002FC008F0037200FB
-:10AE60004000000000000000E005400089802C1038
-:10AE700008B0024900A3A024C00930024C0083C9D5
-:10AE800020904230124D0083006AC0093002380021
-:10AE900050000000000000002001160085806D6257
-:10AEA000087E025640278025E01978060E00838030
-:10AEB00061A00B78024E0087826DE009790248009C
-:10AEC000400000000000000048082C02C3613C88DC
-:10AED0002CBA124910E32C36C00D30534C44C30039
-:10AEE00020010F31034C00C3013CC02DB1031202FD
-:10AEF0000000000000000000401DBC00FF003F00FB
-:10AF00004FF109B000FF003BC00EF401FD24FF40EB
-:10AF1000BFC007F003BC006F103FC41EF183D00612
-:10AF20006000000000000000A805C400E804320032
-:10AF30000CB603E802CB0036CA0FB503AD00FB2008
-:10AF40003E400FB303EC80FBA832C68CB6032A0048
-:10AF5000700000000000000048119402E60020008C
-:10AF6000087302DC0087702DD00BF0021C84B72020
-:10AF70002DC00B7082DD24B74034C9287282920440
-:10AF80006000000000000000C000BE02AC80A120F4
-:10AF9000087900CE04878065E00B7A029E00B790A6
-:10AFA0006DA00B7802DE00B78021E0087802300047
-:10AFB00020000000000000004814ED82ABE020E417
-:10AFC000083002EE0483002CC11B30020C08B300D1
-:10AFD00064F60BB002CC04B30026C0083002920421
-:10AFE0003000000000000000E815BB80EE4931A0F1
-:10AFF0002CA003FA00CA0236800FA003A800FA02B0
-:10B000003F900FA063E800FA0032800CA0233A04BE
-:10B0100060000000000000004800E00AE8003E0870
-:10B020000F8003E350F0003E000F8013E000F800B3
-:10B030003E000F8003E001F8017E000F8003D20084
-:10B0400030000000000000000810E440C9A13240B8
-:10B05000201101A640C98436400D900344004100F0
-:10B0600032400F900B2400F9003E404C10030204C4
-:10B070003000000000000000800464008982A240CB
-:10B08000089C02250089C82240089042240089209B
-:10B0900022600B90022410B9002E4008900360003B
-:10B0A000100000000000000018052400890422CAD6
-:10B0B0000A900A2502892020402810026401A90074
-:10B0C000224B0B90022401B9002E41289002060069
-:10B0D00040000000000000000804049081A0204807
-:10B0E0000A320204808100204408110204D0A12009
-:10B0F00020400B11020600B1312C48081402420115
-:10B100000000000000000000B80D6142C854321475
-:10B110000E85032144C828B21A4C86936114E85066
-:10B1200022140F86832140F0401E140C00032E03CE
-:10B130005000000000000000981D7444F5103F44CA
-:10B140000D91037440F9003E480B9203E4C2D910FC
-:10B15000BF400F9203E504F9303E440F9443E606E6
-:10B1600070000000000000001805F622CDA1336138
-:10B170000CD8D33410CDA83E608E9C93A708CD8008
-:10B1800033400E9AD336A0C98032600C9903060072
-:10B1900070000000000000003810E3888AA020281A
-:10B1A000088022201288402C28088A022200880069
-:10B1B00022000B8C03210088D0A23E288D020E04B1
-:10B1C00030000000000000000805CE20A1482052F9
-:10B1D000291002240381002C520A1012851091407C
-:10B1E000A4400A128244009128244028120202013D
-:10B1F00070000000000000001815A400A9142240EF
-:10B20000099002A40189042C4008900224009900AE
-:10B2100022444B10422414990026400810020604D0
-:10B220006000000000000000A015E440E940B27892
-:10B230000D900B2422C9033E410E9003A402D900B5
-:10B24000165806900B6402D90036400C900B280467
-:10B25000700000000000000028018400D9803E4AF0
-:10B260000E90036420F9083E410F9003E400E108CA
-:10B270003E400F9003C400E10038400F9003CA0025
-:10B2800060000000000000002810A009F040B0108D
-:10B290004C000B2000F8003A001C0003E000C8003E
-:10B2A00036000C80032000C80032000F80030A041F
-:10B2B0002000000000000000280528003E8823A28E
-:10B2C00048E0001980BE882E800DA042E8008E0064
-:10B2D000239008A00A3A00DA0036800BA00A0A0080
-:10B2E000400000000000000028054C00B38020E072
-:10B2F0002830C20F10B34028C00B3002EC1183403D
-:10B3000028D20A30020CC0830020C00B30020A0091
-:10B310005000000000000000A0011C00B60021C089
-:10B320000820C21C10B5002DC80A7202DC40850836
-:10B3300029A21A72220C00933005C40B3222280075
-:10B340004000000000000000A8081600B280312074
-:10B350000C58031E00F78039F80B7C22CE40CF80BA
-:10B360009B602E3B031A00C7A811E00F78032A0246
-:10B370000000000000000000081DA400FA003EC00C
-:10B380000F9023E800FB003ED02DB603ED02F9003C
-:10B3900032400DB007EC00FB603EC80FB503C2069B
-:10B3A00060000000000000000005FE00FF8033A0E8
-:10B3B0000CF80B3240CE8137F00CBC03FE00FF844A
-:10B3C00033E02CF883E602CF8533F00CFC03001445
-:10B3D0007000000000000000A8119C00BE0035C6EF
-:10B3E0002830023040870023C0087A02DC00BE000B
-:10B3F00023C0087012FE00870021C008F0022A0452
-:10B40000600000000000000000009520B6002080D1
-:10B410000831025C01870025C0087202DC00B6001A
-:10B4200021D0097002D408930020C00870020000E7
-:10B4300020000000000000002014C400B0E02460E0
-:10B440000820064801800020C0083002CC04B30068
-:10B4500020840B3002E8009B0020C0083002080462
-:10B460003000000000000000A815AC00B9E03280F8
-:10B470006CB0236F00C30037C13CF003FC00FA003E
-:10B48000B0C009F003EC10DF0073C00CF00B2A0011
-:10B4900060000000000000008000EC10F8003E4258
-:10B4A0000F2403A860F8003CC10FB003EC00F94082
-:10B4B0003E8004B023E100EB003EC00FB003E0008B
-:10B4C00030000000000000000110F400EE003D30EC
-:10B4D0000CC0031400CCA0B3C04C70035C10DF00A0
-:10B4E0003F000CF003F800CF0023C00CF003004035
-:10B4F000300000000000000081046400BA812E5872
-:10B500000888022780892022C028B0022C00888366
-:10B510002E2005B062E3008B002AC008B003604013
-:10B52000100000000000000080052600B9812E40B8
-:10B53000088C062600880022C008B0166C00988887
-:10B540002E2008B004E3010B0028C00830022000C0
-:10B55000400000000000000008040400B0002CC0FF
-:10B5600028000E0010800020C00832020C00800469
-:10B570002E20093002C412830028C0083002420184
-:10B580000000000000000000000D6C00FA003E000A
-:10B590002C910320008A0033C00CF0037C00D800FB
-:10B5A0002E400CF003E080CF003BC00CF003000302
-:10B5B0005000000000000000A01DFC00FC013F4006
-:10B5C0000FC013F000F4003FC10FF423FC08FC008F
-:10B5D0003F000FF003F040FF003FC00FF003E8060C
-:10B5E0007000000000000000C005FC20CD1039C82C
-:10B5F0000DC1033C80EF9023D80FF800FE00CF80F0
-:10B600001FD00FF903FF00E7C033C40FF003B000F1
-:10B610007000000000000000C010FE02894023F00E
-:10B620000885103C008B00A3DC4BB282EC208B0021
-:10B6300026C04BB002EC10B9042AC90BB580F00447
-:10B640003000000000000000C805CC00816428C460
-:10B6500009B20A0CF0A32020C80B3202EC028308C6
-:10B660002CC8093202CC80ABA020C80B3200B2013A
-:10B670007000000000000000C015AC10890022C05E
-:10B6800008B2122C020B0022C00BB802EC008B0097
-:10B6900026C04BB046EC00B9000AC00BB002F00463
-:10B6A0006000000000000000D015EC10C9E03AC0B6
-:10B6B0000D28032C00EB1032C00F8203C400CB0016
-:10B6C0003EC10FB006EC08E900B2C00FB013900401
-:10B6D0007000000000000000E0019C00F5A03FC0E9
-:10B6E0000FE803FC08FF003FC08FC003FC00FF0011
-:10B6F00037C00FF003FC00FF043EC00FF003F8005A
-:10B7000060000000000000005010AC00F94034C0A0
-:10B710000DB4032C00DB403EC02C80036408FB10FA
-:10B720003EC68FB003EC00F98032C00CB00B14049D
-:10B730002000000000000000C8053E20E9C837D402
-:10B7400048AA221C008B006FE0088582ED40BB8474
-:10B750002FC04BB803AD40B30023D408F70232002A
-:10B760004000000000000000E0014C00B164A4C0F3
-:10B7700009200A0C04B8006CC0083802C840B38025
-:10B780002CD10B3002CC04B30028C00830023A00A0
-:10B790005000000000000000B0011E00A58025E060
-:10B7A000883A121E00A6902DE2087902DA00B782CC
-:10B7B0002DE00378829E00BCC129E00878022C109D
-:10B7C000400000000000000049080C00F30034C0F5
-:10B7D0000D3E030C00F0402EC00C3043C800F300B7
-:10B7E0003CC0073003CC80F20038C00C300312029A
-:10B7F00000000000000000004019BD20F7003FC21B
-:10B800000FF10BDC20DE043FD207F013F840FF00FD
-:10B810003FC007F003FC00FD0037C00F7003D006E7
-:10B820006000000000000000AA05CF00DC003ECA56
-:10B830000FA000AC92C90032C00FB011A408FB00E9
-:10B840002EC04FB023EC00F9003EC40FB003EA0055
-:10B850007000000000000000C8919C00840001C03E
-:10B860004B70221CC0870021C04B70021C00B70126
-:10B8700025D80B7022DC00B6002DC00B7222F2041A
-:10B88000600000000000000080009E809780A9E01A
-:10B890000BF802CE08858029E80BFC021700B78060
-:10B8A0002DE08B7802DE00B4C02DE80B7902E000B9
-:10B8B00020000000000000004814CC008308A0C055
-:10B8C0008B3C024C008300A0C01B3C0A0F29B30034
-:10B8D00024C00B3002CC00B3802CC00B3002D20449
-:10B8E0003000000000000000E815A800DE003A80EB
-:10B8F0000FEA02E800CE003A800FE0033800FA00B9
-:10B900003E800FA003E800FE003E800BA003FA0477
-:10B9100060000000000000004800E000F804BA01E8
-:10B920000F820B8004F8803E000F86036000F80051
-:10B9300036000F8023E100F8003E000F8003D200A4
-:10B9400030000000000000000810E401F90032405F
-:10B950000F9003E400490032400B9003240049009B
-:10B960003C400D9003E408C9003E600C90030204C3
-:10B97000300000000000000080046400B940A264B0
-:10B980000B18022500D15036504E900A24028940EF
-:10B990003A51089402E52289442E6028900A20003A
-:10B9A000100000000000000018012400B10822402F
-:10B9B0004B9282A500A90822500A10020C00A9404F
-:10B9C0006E500B9402C40489446C488810024600EF
-:10B9D000400000000000000000040400B140E0400E
-:10B9E0001B140A0400B90024401A10220400A1000C
-:10B9F00028400A1012C40081026C40081202420161
-:10BA00000000000000000000B80D6008B000320027
-:10BA10004F8002A150E05032140EA5232140E8507F
-:10BA20003E140F8503E140C8501E140C85436E037D
-:10BA30005000000000000000D819E500FD403E5015
-:10BA40000F7403A5005D003E500A5013F400D900A6
-:10BA50003A500D9013E400FF003E500F9103A606EC
-:10BA600070000000000000001805F690BDE8236B90
-:10BA70000BDA0B3680C9003268469043E400490077
-:10BA800032680C90032440F90032600C9C03C6011C
-:10BA900060000000000000007810E100B8E0A21192
-:10BAA0000B8E0A232288802A31288802620088802F
-:10BAB000A23028888A2200B8A8A23908CA02CE0477
-:10BAC00030000000000000004805C50821000040CB
-:10BAD0000314828580AD0821529850823423850852
-:10BAE00021520850065400B520215A095402D201AF
-:10BAF00030000000000000001811A400B9612240CD
-:10BB00000B90060400AD00694008D0027400850067
-:10BB100001400070067404B500234009D002C60439
-:10BB20006000000000000000A014A400E900324002
-:10BB30004F950BA400E90032408C90032400C9000B
-:10BB400032400C90036408F90032403D9003E80451
-:10BB500070000000000000006801A408F9003E40E9
-:10BB60004F908BE404D9013E400D90036400D9014D
-:10BB70003E400F9003A400F9003C400E9003DA0011
-:10BB800060000000000000002810A000F8403620EF
-:10BB90001784032021C8007E022C80432000E80285
-:10BBA0003E010F8003E000C8401E000F8003CA045E
-:10BBB000200000000000000028052A88B60223A00B
-:10BBC0000BEC422B00D2806EB108A0220800EA04E0
-:10BBD0003A809FA003A8008A042E800BA802CA0006
-:10BBE000400000000000000028054C00B200A4E165
-:10BBF0008BB432474583902CF44B38120E44A3018A
-:10BC00002CC04B3002CE0093006CC00B3802CA002F
-:10BC10005000000000000000A0011C00B74421C239
-:10BC20000B5402540587002C409B6C021810A7048B
-:10BC300029C00A70029B0097040D800B6082E80007
-:10BC40004000000000000000A8081E00F38035E05E
-:10BC50000B3802521084802DA00FF80B1E00E680D6
-:10BC60001DA00B6803FE02D6803DE00F7803EA02B8
-:10BC700000000000000000000A1DAC00FB003EC1F7
-:10BC80008B900B800AB8012E000CB003E800FA007C
-:10BC90003EC00FA043EC00EB003E800FA623C20283
-:10BCA00060000000000000000005FE00FE80332060
-:10BCB0004EC912F650EF903FE00C1900B642CF216A
-:10BCC0003FE00EF902E6C0FF803FE04CDC0340009D
-:10BCD0007000000000000000AA119400B70081402D
-:10BCE00008030214C487012DC8086A12384087026D
-:10BCF0002DC0087112D280B7002D800860022A047E
-:10BD0000600000000000000000009C00B7102180CF
-:10BD100008F4129404A6002CC018D202144886100D
-:10BD20002D800A6132D400B6182DC40858020010C4
-:10BD300020000000000000002014C400B30020C058
-:10BD400040B022040082810CC008300A0A008A0038
-:10BD50002EC008A002C400BB002E800820020804E8
-:10BD60003000000000000000A815AC00FB00A0C0DF
-:10BD7000249423AC10EBA00EC00CB0022E20C900FE
-:10BD80002E400E9003EC00F9803E406CA00B2A047C
-:10BD900060000000000000008000CC00FB003EC0FE
-:10BDA0008990032C00FB023E404FA0036D01FB4134
-:10BDB0003EC08FB403E800FB203E500FA403E00018
-:10BDC00030000000000000000110FC00C320B2C0E1
-:10BDD0000DD0033800CD003F800DF003FC00FD02C4
-:10BDE00036000CD0033F08FC0412C00CA003C04472
-:10BDF000300000000000000080046C028BC822C0EC
-:10BE000008980A2A4089202E018EB012EC80BBF0DF
-:10BE100022E508BD022E00BB9022ED08A202E00040
-:10BE2000100000000000000080052C008B012200A3
-:10BE300049A81E04008B012EC0499002E400B900FD
-:10BE400022400A90022C00B9002A40088002E0003B
-:10BE500040000000000000000804040081002040B1
-:10BE6000082002040083002CC00A2042CC00B3004A
-:10BE700020C00230020884B3040840082002C21126
-:10BE80000000000000000000000D6C008B00B2807C
-:10BE90000DB1032402CB013EC04D9043E400F900F4
-:10BEA000B2002E900B2C80F800BAC02C8003C00387
-:10BEB0005000000000000000A01DF4007D003FC005
-:10BEC0000F7203D400FF003FC00EF147FC00FF00DB
-:10BED0003BC00DF013FC50FF0037C00FE003E80635
-:10BEE0007000000000000000C005F0C4CC333F0427
-:10BEF0002CF6033860CC90B3200FF123F060FF01E3
-:10BF000023C80CF28A3C81DF303F640CD803300434
-:10BF100070000000000000008010E0C28A302E187F
-:10BF200008F530A594582222214BF302E1009F70BE
-:10BF30002BE40AF4121D40AF722C492F3082A00668
-:10BF400030000000000000008805C48080A02C980C
-:10BF5000083222080082002800033202C084B30C99
-:10BF600020C05832928C30A3202EC0481242620169
-:10BF70007000000000000000C015A8008B002E20FB
-:10BF800008B00A200198002A220BB002E6009B00AC
-:10BF900022C00AB012AC04AB002EC003B002F00005
-:10BFA00060000000000000000015E500C8003EB081
-:10BFB0000CB0032900C8003A204FB003E220FB0177
-:10BFC000B0C00CB0032C00FB023C410C9043480471
-:10BFD0007000000000000000E001A280FE403E0072
-:10BFE0000FF063EC00BFC417420FF003EC00FF003A
-:10BFF0001FC10FB0035C00FB003F404FF000B800D2
-:10C0000060000000000000004010A502C8003E9043
-:10C010002CB00B0106CB013E505FB0132110CB00BA
-:10C020007EC00CB00B2C00CB0032C00C900310046F
-:10C030002000000000000000C80528018BD02C342F
-:10C0400048FF023000AA042E690FF0036810DF00D9
-:10C050002FD40DF0023E005F04B6C008B00372009A
-:10C060004000000000000000E005699081802C0085
-:10C0700048B802080999004CB00B30020C008B0044
-:10C080002CC009B0400C40830000400A90023000F0
-:10C0900050000000000000002001160084882DE4FC
-:10C0A0004839021600B4802DE00A7B065E009780B6
-:10C0B0002DE20978021E90978025648A7802480054
-:10C0C000400000000000000048080D0081102C9680
-:10C0D0000831230C0090203CC41BB8020840C30068
-:10C0E0002CC40D30030E40C31030C04E10071A127E
-:10C0F0000000000000000000401DBC007D053FC5A1
-:10C100000FB10BF400EF001F450FF043FC01FF409F
-:10C110003DC41FF006FC10FF003BC12DF103D0060B
-:10C120006000000000000000A805EC04CB043EA065
-:10C1300044B6032804CB8032800FB3936008FB2001
-:10C140003ED21FB3032D80FB617E408C98032A00F2
-:10C1500070000000000000004811840C86052DC00E
-:10C1600008F4828C908500A1C00BF0025C003700BF
-:10C170002DD00B71021CC8B7482D400A7002120462
-:10C180006000000000000000C0009E0087802DA11C
-:10C1900060784A16D0A78029E00B78529601B790B4
-:10C1A0002DE80B7A225E40B7A02FE14850223000E4
-:10C1B00020000000000000004814CC1083842CC034
-:10C1C000083002A41083CB28E00B302A4F409300A4
-:10C1D0002CC00B30024C10B3022CC0AA3002120447
-:10C1E0003000000000000000E815B800CEA03F803D
-:10C1F0004CA02B3A00CE403BB80FA003B900BA00C8
-:10C200003E800FA0036800FA007E801CA00B3A0459
-:10C2100060000000000000004800E002F8003E045A
-:10C220008F0003E04AF81026180F8003A080F80260
-:10C230003E008F000BA000F8023E000F8013D200DA
-:10C2400030000000000000000810E420C900324067
-:10C250004D99032400C9023E680F90022400E900B2
-:10C2600030408C90030440C9003E400C900302040F
-:10C270003000000000000000800464208906225085
-:10C280008B9CC22400D9012E400B90422408B90196
-:10C2900022460D900A260289002C400A1002200036
-:10C2A00010000000000000001801060091404270DC
-:10C2B0000B90122C028B002E400B1022E410B100C8
-:10C2C000A240489012240899022E400890020600CD
-:10C2D0004000000000000000080404929120E048A3
-:10C2E0000B1202040291102CC00B100684C0B11076
-:10C2F0002048891102058091402E442A94020201AF
-:10C300000000000000000000B80D6140D85030145B
-:10C310000F850B21E080403E000F878BE10CF86C0D
-:10C3200032008406832004D8283E100C00032E031C
-:10C330005000000000000000981DF440AD103F4583
-:10C340000F9103FC187D201F410F900374C0F92149
-:10C350003E440F9201E440E9003D484FD003E60619
-:10C3600070000000000000001805F780FDE0337049
-:10C370000CDA032620C94031400E9A032400F980CC
-:10C380003B600F9C8336A0F9A1B0400F9103C6001B
-:10C3900070000000000000003810E290B8A02228D1
-:10C3A00028880A220288A02200088802C280B88851
-:10C3B00022040B8E032280B8D02A200B8802CE04E0
-:10C3C00030000000000000000805C580B161005881
-:10C3D00048168A04A0890122401A14880420B1401A
-:10C3E00028400B100A0420B12C204A0B1202C20173
-:10C3F00070000000000000001815A590BB40204010
-:10C40000089002244089426258081002E500B903EE
-:10C4100022C00B9002A41431002A440B9002C604DF
-:10C420006000000000000000A010A500F9013240EB
-:10C430008C90032700C19430400E90032400F90033
-:10C440003A400F90032400F9003260079027E80576
-:10C4500020000000000000002800A418F900BE44DD
-:10C460000F9003C400F900BE618F9003A400F10097
-:10C470001E400F10032408F9007E400F9003CA00ED
-:10C4800020000000000000002810A181F800320404
-:10C490000C00D32100D8043A149C80032101C80069
-:10C4A00036000C80132010C80032002C8003CA0410
-:10C4B000200000000000000028043A00BE8423850C
-:10C4C00008EC8368048A002F904DA0022801DA004E
-:10C4D00023B00AA0022A08DA0122800FA002CA00B3
-:10C4E000000000000000000028054C00BBF020C048
-:10C4F000083C0A0C00930128C88930064C008302CE
-:10C500002CF60830020400A30020C00A3002CA0042
-:10C51000500000000000000020011D11B300A0C069
-:10C520000850025C1087016D814932521EC387009A
-:10C5300028E00A32261F00370023E00B7202C800F1
-:10C54000400000000000000028081200B7823120DF
-:10C550000808370F08D7E03960197A0B5E0C83B2F0
-:10C560007DE00C7A0B3E02AFA0B1E00E7A03CA0266
-:10C570000000000000000000081DA010FB003EC0ED
-:10C580006FB043EC11FB003E400FB503EC20FB50B5
-:10C5900036000FB543E5A1DB783EC00FB403C206F9
-:10C5A00060000000000000004005FE00FFA03FA06A
-:10C5B0000DC9133E00CFD03DE802FF133E00CF82ED
-:10C5C0003F600CFC233E10EF8033F20CFC83100024
-:10C5D0007000000000000000A8119C40B5012DD0A3
-:10C5E0000858021C4057102D5A283102BC019710E0
-:10C5F0002D000A70028404CF0029C00AF0022A0428
-:10C60000600000000000000000009000B72A2D82AA
-:10C610000842223C0087110DCC8832021D00970091
-:10C620002CC40830021400A70023C0097082000047
-:10C6300020000000000000006014C020B0202C503A
-:10C640000810022DC093E22C210830020E0893003E
-:10C650002C400A30028C0093002AC00B30021804D0
-:10C660003000000000000000A815AC00F8C03E80BB
-:10C670002CA00B3F00C7603ED00CF00B3C00CF005D
-:10C680003E800CF00B2C00EF0033C10DF00B2A04A0
-:10C6900060000000000000008000EC40F3403E50CD
-:10C6A0008EB403EC10FB003E090FB013EC42EB001C
-:10C6B0003C008FB013C411E3003EC00EB003E00095
-:10C6C00030000000000000000110FC00FC8031225E
-:10C6D0000CA8033C00CF0033A00EF003DC00CF0019
-:10C6E0001FF00CF003F400CF0233C00CF002005432
-:10C6F000300000000000000081046F00BBC0227009
-:10C700000AB9422C108B00761183B002EC10AB00FA
-:10C710002EB00AB003EC048B00A2C028B002204067
-:10C72000100000000000000080056540B820224491
-:10C7300058340A2C008B0022844BB002EC008B0092
-:10C740006EC008B042E6048B0002C0083002A001AF
-:10C7500040000000000000000C000000B10020C0FC
-:10C760000A300A0C008B0324800B3002CC00A3009B
-:10C770006C000A30028D00830020C0183002820055
-:10C78000000000000000000000086400F800300015
-:10C790004CA00B2C02CF0022400EF503FC00CF0171
-:10C7A0003E000CF012DD02CF0233C04CF00B8003D0
-:10C7B0001000000000000000A419F000FC003F4041
-:10C7C0000FB103DC00BF013F000FF223FC10FF009C
-:10C7D0003F000FF001F484FF003DC04FF0136806E6
-:10C7E0007000000000000000C005FE40DF8033C87C
-:10C7F0000CF8033C0A9FC03FF008B8023E00FF80DF
-:10C800003FD80CF9612E406F903FE48FF1833000E8
-:10C8100070000000000000008010EC048B8023F00A
-:10C8200008B8023D40AB000E084822826C20BB00D5
-:10C830002FD048B0022C00BB002EC10BB002300438
-:10C8400030000000000000008805CC028301A0C574
-:10C8500008B04A4CA0802428C80932024C00B30812
-:10C860002ED129B23A0C84A3212CC84BB20A320132
-:10C870007000000000000000C015AC088B0022C052
-:10C8800008B0024C008821242109B0466C00BB0688
-:10C890002EC009B0022C10BB002EC00BB002300419
-:10C8A00060000000000000004015EC00CB0032C02A
-:10C8B0000CB9026C00CBC83AC02D900B2C08FB00C1
-:10C8C0003EC00D30422C00EB003EC00FB013000400
-:10C8D0007000000000000000E001BC00EF003DC05F
-:10C8E0000FF003BC06EF823F404EC983BC00FF003F
-:10C8F0007FC01CF0137C00FF043FC00FF003F80062
-:10C9000060000000000000004010AC00FB023EC0D0
-:10C910000EB003AC20D8403EC08C900B2C00FB0026
-:10C920003EC90DB033EC08FB023EC00FB00B5404FF
-:10C930002000000000000000C8052C00B3002FC03C
-:10C940000B3012FC0088A02E402894022C10BB044F
-:10C950002DC028B002EC00BB002EC00B72063200C6
-:10C960004000000000000000E0056C00B3002CE077
-:10C970000A1002CD0093002CC008B0024C00B30096
-:10C9800028C0083002CC00B3002CC00B30023A00A3
-:10C99000500000000000000020011E40B7802DE282
-:10C9A0000B5802DE0297812FA00868025E00B78153
-:10C9B0002FE0087902DE00B7812DE00B78023C0001
-:10C9C000400000000000000048080C00F3003CC0DC
-:10C9D0000E3203CC80D3003CC40C39034C08F31A4C
-:10C9E0003CC60D3003CE20F3083CC00F300352028A
-:10C9F0000000000000000000401DAC00FB002EC045
-:10CA00000BB003CC20EB003C800FB041AC00FB002E
-:10CA10003CC20FB003EC40FB003EC00F3003D00619
-:10CA20006000000000000000A805EE02C38030CEC8
-:10CA30000D9803ACA0C380B2C00FB003EC00FB00A4
-:10CA40003ED24FB0092E084B013EC024B003EA008D
-:10CA5000700000000000000048119C00870121C008
-:10CA60004850124C00870035C04B6002DC04B7010F
-:10CA70002DC00B70021C0087002DC10C7202F20445
-:10CA80006000000000000000C0009E00878023E0DE
-:10CA900008F802DE808F8121E04B7812DE043780B7
-:10CAA0002DE80BF8023E1887802FE0097902E0009C
-:10CAB00020000000000000004814CC008300A0C04B
-:10CAC0002830424C00830024C00B3806CC04B3004D
-:10CAD0002CC00B30020C0283002CC0083002D204A0
-:10CAE0003000000000000000E815A800CA003180F6
-:10CAF00008E0029802CE0033840BEA03E800BA0093
-:10CB00003F810FA0032800CA003E800DE003FA0415
-:10CB100060000000000000004800E000F8003E0057
-:10CB20000E8423A000F8003A100F8003E000F80004
-:10CB30003E100F8013E000F8003E000D8003D2008D
-:10CB400030000000000000000810E401F9003E4041
-:10CB50000C9A13E400C9003E400C9823E480F900CD
-:10CB60003E402C98036400F9003E400C9003C20440
-:10CB7000300000000000000080046404B9002E4072
-:10CB8000689C22E40289017C508D9822E480B920BF
-:10CB90002E5048100B2500B9442C40289000E0008E
-:10CBA000100000000000000018052400B9002E50FD
-:10CBB000089002E40489002E500A9202E400B900B1
-:10CBC0002C400891022400B9002E40089002C600B3
-:10CBD000400000000000000008040500B1012C40E6
-:10CBE000483002E40081002A404B1002C400B1002A
-:10CBF0000CC00890020C00B3002E40481202C20183
-:10CC00000000000000000000B80D6000B8013E0008
-:10CC10001C8007E150C8502E141E8503E141F850D6
-:10CC20003E140C85132148F8503E140C8543EE0346
-:10CC300050000000000000009819C400F9003E51A7
-:10CC40000F5003E500FD003F401DD003F410F90034
-:10CC50003E500F50009400F9003D400F9103E6064E
-:10CC600070000000000000001801E450CD003160A9
-:10CC700004D0033680C1422E501F9403E500E90220
-:10CC80002E720A90220508E9403E50409C0326007F
-:10CC900070000000000000003810C28288002215D9
-:10CCA000088002235888A02E280BAA42E28288809E
-:10CCB0002E382888022280B8A03A2808CD020E0417
-:10CCC00030000000000000000805C4008100A640FC
-:10CCD00028100A242695000D400B50027400850888
-:10CCE0002F4079D2AA1400A5012F4038500212011A
-:10CCF00070000000000000001815A4048900264000
-:10CD000008910224109D082F400BD002F4008D02E0
-:10CD10002F4009D0003400BD000B401870020604FB
-:10CD20006000000000000000A015C400C9053641E5
-:10CD30004C90632400D9003E400B90034408C90086
-:10CD40003E401510032400E9003C400C90032804E9
-:10CD500070000000000000002801A404F9003A401F
-:10CD60004F9803E400E9993E404F9003E420F90A0C
-:10CD70003E400E90436424F9083A420F908BDA004B
-:10CD800060000000000000002810A000C800120091
-:10CD90000C8043E000C84032000F8453E010F800DC
-:10CDA0003E000D80232000D8003E000F80030A04BF
-:10CDB0002000000000000000280538028200A18841
-:10CDC000086022C8008A4036A10BA002E910BA44CC
-:10CDD0002C800CA41229028A442E980BA4020A006B
-:10CDE000400000000000000028054C10830020E0F7
-:10CDF000183092C408934020E00B3002CD00B340BD
-:10CE00002CC00B3A42CD0083402CD00B38024A0094
-:10CE10005000000000000000A0411C00870021C05D
-:10CE2000287002D1009D8025C24B6002DC08B70249
-:10CE30002CC00A7402FE0087002DC00B340268006B
-:10CE40004000000000000000A8081E00C78431E078
-:10CE50000C6803D600978031A00F5813DE08F782C4
-:10CE60003DA00FF80BDE00C7803DE00F788B6A0213
-:10CE70000000000000000000081DAD80F3003EC16E
-:10CE80000FA023C002E9003E810F8003EC00FB00ED
-:10CE90003EC00DB0132C00EB003EC00FB003820269
-:10CEA00060000000000000000005FF32C780336012
-:10CEB0000F78033EC84E8023640CF8033A00CE80FE
-:10CEC00013EC06D8033A00DE8033A40CC803D0006C
-:10CED0007000000000000000A8119C00871001C035
-:10CEE0000B7002185084002B4408601298008613BF
-:10CEF00021C4885002188086002180086102EA045B
-:10CF0000600000000000000000009C00870021403D
-:10CF10000BF1025C800600210088D0025C008700D3
-:10CF200020898AF1021C0887102181884802C600E6
-:10CF300020000000000000002014CC108304A0C1D9
-:10CF40000B300A480C88066038080442EC018B0458
-:10CF500022C108300A2C008B002280002002D80455
-:10CF60003000000000000000A815BC00C3002280B3
-:10CF70008F9003640ACB02B2F2203512640AC90012
-:10CF8000B2400EA003240AC900A2402CA003EE0464
-:10CF900060000000000000008000EC00FB003C800E
-:10CFA0000F9003A500DB403ED04DB413A408FB0155
-:10CFB0003EC01CA0036C00FB043E504FA403E000E5
-:10CFC00030000000000000000110FC00FF0033C032
-:10CFD0000CE8432600DF80B3E00FF8037C00CD00AF
-:10CFE00033040CE0233440CD0023400CE003E00484
-:10CFF000300000000000000081046C10BB00A2D2D1
-:10D0000008280204608B1922C60EB18A2E408B902C
-:10D0100022C108A4822C008B90226448A402E00064
-:10D02000100000000000000080052C00BB00220062
-:10D0300008912E24009B0022C08BB012200488008F
-:10D040002240081022200088012AD0088042E000F7
-:10D05000400000000000000008040C00B304208021
-:10D060000810060410830020C08BB012000082005C
-:10D0700020C02810420906820028C0082002C201F0
-:10D080000000000000000000000D7C00BB003240EA
-:10D090002CB0032400D30032C05FB5030C02C100E2
-:10D0A000B2000CB00B0500C100B8C02C8013E00327
-:10D0B0005000000000000000A01DDC00FF001FC0A9
-:10D0C00087F001F400FF003FC00E7043FC107F00AA
-:10D0D0003FC00F7003FC00FF0037C00FE003E806FD
-:10D0E0007000000000000000C005F184FE6131D82E
-:10D0F0000CB2C3FCE0CC807BC00EF1037CE0CC839F
-:10D100003F200FF0CB3244DC843F254CF24330000B
-:10D1100070000000000000008010E448B01022DC25
-:10D1200008B602FD92888523F440F102ED00882DB7
-:10D130000E600BBC122C10A8822E000AFC22A00448
-:10D1400030000000000000008805C080B32228C025
-:10D15000083082CC0188002CC04A3202CC00010188
-:10D1600028004BB002A00080002C090834026201A4
-:10D170007000000000000000C015AC04B2102AC10D
-:10D1800008B002EC10898022C008B002EC088800C8
-:10D190002E4083B002A040B9802C210AB002F004D6
-:10D1A00060000000000000004015EC00FA00BAC06A
-:10D1B0002CB043EC00C0803EC08EB0034C0CC810B5
-:10D1C0003E808FB0038210D8823E280CB00B5004F2
-:10D1D0007000000000000000E001B680FD0237C1D1
-:10D1E0000FB003FC00FD003EC00FB053FC02FF0176
-:10D1F0002FA48BF0837C00AD022F40037003B80096
-:10D2000060000000000000004010AC00FB0432C0D1
-:10D210004CB0232C00F8403EC20CB0032C00FB4164
-:10D2200032C20FB0432D00C8503E400CB00B10046A
-:10D230002000000000000000C8052F90B95003C076
-:10D2400018F01A3C00B9322DE038F0603C04F900C7
-:10D250003EF00B7C802C00D9C02E400DF002320035
-:10D260004000000000000000E0054B24B21002C1A5
-:10D270002830026C04B2C12CC00830000C00B2008F
-:10D280002824033C0A000082C82CA0083002380081
-:10D29000500000000000000020011600B48021E4CE
-:10D2A000487B025E00B6806DE24879221E40AC8465
-:10D2B0002DE00BFA00524096802DE8193802080044
-:10D2C000400000000000000048080840F310B0C40F
-:10D2D000083A024C90F3103CCC0831030C49B040A2
-:10D2E00030050F3007214043013EC21C304312027B
-:10D2F0000000000000000000400DBC10FC103FC505
-:10D300000FF101BC04FF043FC40FB14BFC64F700F4
-:10D3100037C00F7253AC44FF013FC90FF403D0066E
-:10D320006000000000000000A805EC08FA003EE0E4
-:10D330000CB0032C00CB023ECA0FB2072E00DB025A
-:10D3400032080F31032C00CB043E800C35032A0039
-:10D35000700000000000000048119400B5002DC8C6
-:10D3600008700A1C2287002DC90BF2829C80A6003F
-:10D37000098B0B700A1C0285002D40087002920474
-:10D380006000000000000000C0009E00B7802CEC90
-:10D39000087B025E4085892DEC8B7B024E848F805A
-:10D3A00025640BFA02120897806FE1087A023000B8
-:10D3B00020000000000000004814CC20B3642CC002
-:10D3C0000830060C10838A6CC05B3042CC00AB1076
-:10D3D0002CF20B30020D0093042CD508300A920475
-:10D3E0003000000000000000E815BB00FEC03E80D9
-:10D3F0002CA0036800C6403F800FA0026800CE4406
-:10D4000036904F60031B70DED83FA00C20033A0417
-:10D4100060000000000000004800E040F8103E00FE
-:10D420000F8003A010F8423E101F8003A000E80CFC
-:10D430003A041F8003E000E8457E022F8003D200FB
-:10D44000300000000000000008106400E980324055
-:10D450000F900B0408D98036400F10132408F900F0
-:10D4600072700F91132410C9103E690C90030204CE
-:10D47000300000000000000080046408B9802240F1
-:10D480000B1002240089C422520B90422400B900E0
-:10D4900022E00B90122404D94A2E60089003600009
-:10D4A000100000000000000018052400B118224000
-:10D4B0000B900224008B2026490B90026400B900D7
-:10D4C000A2400B908A24008B002C40A890020600FA
-:10D4D000400000000000000008040484B120A048BF
-:10D4E0000B11060400830000404B11020449B110E7
-:10D4F00028400B1002244191002C500810024201D8
-:10D500000000000000000000B80D6940E85032142F
-:10D510000F869321E2C800360A0B868B61A8F8407B
-:10D5200022800F82A32108C8023E000C80432E03F4
-:10D530005000000000000000981DF448FD123E4419
-:10D540000F1203C4007D011E400B9203E480F520FE
-:10D5500036400F9003D4907D003D400F9403E606C3
-:10D5600070000000000000001801F6C1DD88327272
-:10D570000C98032622DD003F622C998346A0C94007
-:10D58000B2400FD8032400FD0033512CD88306008D
-:10D5900070000000000000003810E3C288C0223094
-:10D5A000088C4222118A012E00088852230080A391
-:10D5B0002A004B804222A0B80022280884028E0450
-:10D5C00030000000000000000805C400812D204844
-:10D5D000681480042081002E400B12120424812044
-:10D5E00020400B94320490B900204048104A0201B8
-:10D5F00070000000000000001815A40089202240DF
-:10D60000089012240089002E4008900224088940C6
-:10D6100022500BB0022420B909A2440890028604CB
-:10D620006000000000000000A015E400D908B2402E
-:10D630004C10230404D9C13E408F900B0408C14014
-:10D6400012400F90432404F14130780C90032804D9
-:10D65000700000000000000028018664F9803E4050
-:10D660000F900BE400F9983E402F1003A402F9102C
-:10D670003E400F900BE640F9903E600F9003CA00C9
-:10D6800060000000000000002810A000C841320027
-:10D690000C80072010C8103E0C0E8003E004C80068
-:10D6A000BA000F81432000F8703E000F000B0A04FF
-:10D6B0002000000000000000280539028E20A38011
-:10D6C00028E00A3810AE043DA18EE002F8008E007A
-:10D6D00076800B60037800BE402F820BA003CA0047
-:10D6E000400000000000000028054D008B8822C08B
-:10D6F0001830020C0083442CD01B3012CC0683005F
-:10D7000020C10B30820C01B3002C400B30020A0008
-:10D710005000000000000000A0011C00850020CC8B
-:10D720000870061C84A70129C00B7222DC80873494
-:10D7300061800B10025C00B7002DC00B7002E80086
-:10D740004000000000000000A8080E008C8031E0BE
-:10D750000CFE023F00C5802DE00E7803DFA0C7A0BD
-:10D7600021600F78031E80F7803DE00F78032A02C6
-:10D770000000000000000000081DAC00F9003EC0E1
-:10D780000FB003EC00FA003EC006B003EC80FB28AB
-:10D7900036D84FA003EC10FA003E500F3003C206FB
-:10D7A00060000000000000000005FA00CC80B3E03B
-:10D7B0000FF8033E00CF903F604FF8C33E00EF806C
-:10D7C00033F00C7A033E70C59033F10C78030000FF
-:10D7D0007000000000000000A811B800870021C000
-:10D7E0000B704A1C0087102DC04B710A3C448F12ED
-:10D7F00021860D72021E008700234008700A2A0449
-:10D80000600000000000000000009C00840025C0B3
-:10D810000B710A0C00A7122D840B700A1C00B708AC
-:10D82000234009F31A5C869708254008700200001F
-:10D8300020000000000000002014CC20812026C021
-:10D840000B30022C0082422C800B30220C089B8073
-:10D8500020E00920024D08920024E508300A08045F
-:10D860003000000000000000A815AE82CAE0B7C07A
-:10D870000FF0133C0AC9C83E400FF0033C04FF847C
-:10D8800032C00D90137C00D900F6C02C10032A047E
-:10D8900060000000000000008000E400F3003AC1D6
-:10D8A0004FB003EC00F9083C000F3013EC00EB0420
-:10D8B000BE180F9023AC60E9023A404F9003E0009D
-:10D8C00030000000000000000110FC00CA0033C05E
-:10D8D0000CF003FC00CD027F400CF0423C00CF086E
-:10D8E00037100FD003FC10CD083F662CD90300443D
-:10D8F0003000000000000000810463808BE022C043
-:10D9000008B022EC00D8806E2068B01A2C01FB0011
-:10D9100022180B88434C0088A02CC01D9002204088
-:10D920001000000000000000800108808B2022C051
-:10D9300008B022EC0088882E6248B01ACC008B0018
-:10D9400026C04A8802EC0008842E4009900220007C
-:10D95000400000000000000008040000830060C0D8
-:10D96000083002CC0090066C000830028C00A30442
-:10D9700020008B00064C2180006CC049100A020177
-:10D980000000000000000000000D6C00CA00B2C1E1
-:10D9900088B403EC10C8002E000CB00BBC088F003C
-:10D9A0003600068003EC80C8023FC10C90030003E0
-:10D9B0005000000000000000A01DF000FF003FC06C
-:10D9C0000F7283FC18FC033F008F70037C00FF0084
-:10D9D0003D000FC0238C06FC003F400ED003E8063C
-:10D9E000700000000000000000C541037040DC1022
-:10D9F00037040DC1037040DC1037040DC1017040C5
-:10DA00009C10171405C1037040DC1017040DC031C1
-:10DA1000000000000000000000C5440571015C40EA
-:10DA2000571015C40521015C40571015C401710140
-:10DA30005C40171005C40571055C41571015C011F5
-:10DA400050000000000000000080020120804820FB
-:10DA500012080482012080482012080482012080DC
-:10DA600048201208048201208048201208048020E7
-:10DA7000000000000000000000800000600058006E
-:10DA80001600058001600058001600058005600042
-:10DA900058001618018001600058005600058020CB
-:10DAA000000000000000000000C5480522011C80A5
-:10DAB000472011C80472015C80572011C8047241CC
-:10DAC0005C80572011C80472011C80472015C031AA
-:10DAD000500000000000000000C540006000180079
-:10DAE0000600018000600018000600018000600050
-:10DAF0001800060001800060001800060001803157
-:10DB0000000000000000000000C548042201088059
-:10DB10004220108804220108804220108004230142
-:10DB20000880422010880422010800422010802131
-:10DB3000000000000000000000C54A05428150A01E
-:10DB4000442C110B04428110E05428110200428140
-:10DB500010A04438110B0542811021142815003102
-:10DB6000500000000000000000800C01570054C06D
-:10DB70001530044C01130054C01570054C015300BE
-:10DB800054C01530854C01130054C0153005402198
-:10DB90004000000000000000008000004000100075
-:10DBA000040000400010001062040001080441005D
-:10DBB0001000441811000010001080040001012022
-:10DBC0000000000000000000004560020800820024
-:10DBD00020800860021800820020800820000820B1
-:10DBE000820000808020021800820020800801311D
-:10DBF000500000000000000000C54005640158000E
-:10DC000056001580056001580056401580056001DA
-:10DC100058005600158005600158007600158031C7
-:10DC2000000000000000000000C540036000D800B4
-:10DC300036000D80036000980036001D88056000E6
-:10DC4000D80016000D80036000D88046000D80319A
-:10DC5000000000000000000000C5420430810C20DC
-:10DC6000430810C20430810C22410818C2043089D4
-:10DC70000C20030810C20430810C20430810C0108F
-:10DC800050000000000000000080000030000C0088
-:10DC9000030000C00030000C00030000C000300092
-:10DCA0000C00030000C00030000C00030000C001A5
-:10DCB00000000000000000000080020130804C20C5
-:10DCC000130804C20130804C20130804C3013080C3
-:10DCD0004C20130804C20130804C30130804C021CA
-:10DCE000000000000000000000C5420560815820CF
-:10DCF0005608118205608158205608118300608102
-:10DD0000582046081182046081183056081580306A
-:10DD1000500000000000000000C5420020800820E4
-:10DD20000208008200208008200208008200308063
-:10DD300008200200008200208008200308008031B3
-:10DD4000000000000000000000C5420460811820AF
-:10DD500046481192046081192046281182003481BE
-:10DD60001820464811920460811820430811801140
-:10DD7000000000000000000000C5600458015600CB
-:10DD80005580156004580116005580016004180183
-:10DD90005600458011600458011600418011403141
-:10DDA000500000000000000000800601418050602B
-:10DDB00014180506014180506004180506004180D2
-:10DDC00010601418050601418050601418050020E9
-:10DDD0000000000000000000000002010080402060
-:10DDE0001048041201008041201008040201048040
-:10DDF00040205048041201008440201008040020F4
-:10DE0000000000000000000000C546035180D460FF
-:10DE100030180D46035180D56035180D4603058036
-:10DE2000D46015180D46031180D46035180D4031AB
-:10DE3000500000000000000000C5460571805C60D5
-:10DE4000971815C60571815C20571815C603708197
-:10DE50005C60571811C60531815C60771815C031B8
-:10DE60000000000000000000004546037180DC60F7
-:10DE700037180DC6037180DD60371805C60175813E
-:10DE8000DC6037180DC60371845C60171819C01167
-:10DE900000000000000000000045460571815C6044
-:10DEA000571814860571815C60571805C6043181C6
-:10DEB0005C60571815C60571805C60431815C01169
-:10DEC00050000000000000000000020120804820F7
-:10DED0001208048201208048201208048201708008
-:10DEE000482012080482012080482017080480007E
-:10DEF0000000000000000000000006016180586082
-:10DF0000161841860161801860063C058604618010
-:10DF10001860161801860061805860561815801028
-:10DF200000000000000000000045400570015C009A
-:10DF3000570015C00470015C00570010C004700049
-:10DF40001C00470011C00470015C00470001C011B3
-:10DF500050000000000000000045420060801820D2
-:10DF60000608018200608018200608008200608098
-:10DF70001820060801820060801820060801801120
-:10DF8000400000000000000000054204208108203D
-:10DF90004208108204208108204208118204208057
-:10DFA00008204208108204208108204208008011C5
-:10DFB00000000000000000000045420540815020A4
-:10DFC000540815020540811020540C154200408170
-:10DFD000502044081102054081102014080500114A
-:10DFE00050000000000000000001030150C0543048
-:10DFF000150805420150C05430150C05430150C0AE
-:10E000005430150C05420150C05430150C05401019
-:10E010000000000000000000000008004200108026
-:10E0200004200188006200108004001108004200F2
-:10E03000108004200108004201108004200100002B
-:10E040000000000000000000004542020080802027
-:10E050002008080202208080202028000202008080
-:10E060008020200A080202008000202008080011F9
-:10E07000500000000000000000454005600158000D
-:10E08000560005800560015808560015800760029B
-:10E090005800564015800560031800760015801161
-:10E0A000000000000000000000C540036000D80030
-:10E0B00036000D80016000D80A36000D8005700919
-:10E0C000D80136000D80036000D80057000D800095
-:10E0D00000000000000000000000000430010C00FF
-:10E0E000430010C00030010C00432010C004600148
-:10E0F0000C00434050C10430010C00460010C00029
-:10E1000000000000000000000000000030000C00D3
-:10E11000010000C00030000C00030000D00020000F
-:10E120000C00034000C00030000D00020000C000E1
-:10E1300000000000000000000000050131404C50CC
-:10E14000131004C40131404C50131404C511314163
-:10E150004C50131404C50131404C50131404C0003A
-:10E1600000000000000000000000230568C15A30D4
-:10E17000568C11A30468C11A30568C11A30568C0CF
-:10E180005A30468C11A30468C15A30168C15800091
-:10E190000000000000000000000000002000080057
-:10E1A00002000080002000080002200090002000F3
-:10E1B00008000240008000200009000200008000EA
-:10E1C0000000000000000000000008446201188404
-:10E1D0004621118844621118844601118844621056
-:10E1E0001884462111884462111884062111800088
-:10E1F0000000000000000000000000455011540421
-:10E200005501114045501114004501114044500082
-:10E2100014044500154044501114045501114000E8
-:10E2200000000000000000000000082142085082A9
-:10E2300014208508214208508204208508214208C4
-:10E2400050821420050821420850821420850000C5
-:10E25000000000000000000000000A01028040A051
-:10E260001028040A01028040A01028400A01028000
-:10E2700040A01028440A01028040A0102804000099
-:10E28000000000000000000000000C035300D4C098
-:10E2900035300D4C015300D4C035100C4C035300E5
-:10E2A000D4C035300D4C035300D4C035300D400080
-:10E2B00000000000000000000000080572015C8002
-:10E2C000172005C80672015C80572015C80272012C
-:10E2D0005C80572015C80572015C80372011C00092
-:10E2E00000000000000000000000231840C61231AA
-:10E2F000848C21230848C61230840C61231048C244
-:10E300001231848C01230848C61231048C6100004C
-:10E31000000000000000000000003FFF4FFFD3FF9F
-:10E32000F4FFFD3FFF4FFFD3FFF4FFFD3FFF4FFF23
-:10E33000D3FFF4FFFD3FFF4FFFD3FFF4FFFD0000CD
-:10E3400000000000000000000000000000000000CD
-:10E3500000000000000000000000000000000000BD
-:10E3600000000000000000000000000000000000AD
-:10E37000000000000000000000002CDB0FB6C2CD42
-:10E38000B0B36C2CDB0B36C2DFB0B36C2CDB0B7E76
-:10E39000C2CDB0B7FD2CDB0B36C2CDB0B36C0000E4
-:10E3A00000000000000000000000333C4FCF13339A
-:10E3B000C4CCF1333C4CCF133FC4CCF1333C4CFFC5
-:10E3C0001333C4CFFD333C4CCF1333C4CCF1000026
-:10E3D000000000000000000000003B7E4EDF93B70D
-:10E3E000E4EC793B1E4EDF93BFE48DF93B784EFFA2
-:10E3F00093B7E4EDFD3B1E4EDF93B784EDF90000CB
-:10E4000000000000000000000000010270409C10AD
-:10E41000271C09C10130401C10670409C10270416A
-:10E420009C11071401C10270409C50071C01C000E0
-:10E4300000000000000000000000040571015C40C5
-:10E44000571055C40131005C40571015C4057101C7
-:10E45000DC4017181DC40571055C4057101DC00035
-:10E4600000000000000000000000020120804820A1
-:10E4700012000482012080482012080482012080BA
-:10E48000482012080482012080486012080480009D
-:10E490000000000000000000000000006000180004
-:10E4A0000600418000600018004600018000600006
-:10E4B0001000061001800060001820461001800046
-:10E4C00000000000000000000000080472011C8031
-:10E4D000472011C80472011C80072011C804730072
-:10E4E0001C80472011CC0472011C80472011C00001
-:10E4F00000000000000000000000000060001800A4
-:10E5000006000184006000180006000180006040E1
-:10E510001800060401810060001800061401800044
-:10E520000000000000000000000008042201088034
-:10E530004270108C04220108C002201088042200BE
-:10E540000880425010080422010900424010800057
-:10E55000000000000000000000002E044A8112A00C
-:10E5600044A8112A044A8112A004A8112A044B804D
-:10E5700012A04488012E044A811220049801000050
-:10E58000000000000000000008C00E00530014C08E
-:10E590000530014C00530014E00530014C005300DD
-:10E5A00004C00530004C00030014C00530004010CA
-:10E5B000000000000000000008C00400400010003F
-:10E5C0000458010400400010000400010000410054
-:10E5D00004004458104400000011800450104030E2
-:10E5E000000000000000000008C0400200008000A1
-:10E5F0002000080040000000002000080002000089
-:10E600008400000008400200008000200008403024
-:10E61000000000000000000008C040006001180079
-:10E6200046000180066001980046001180046001E8
-:10E630001800460011800420011800660011803087
-:10E640000000000000000000100140006000980081
-:10E6500026000980026001980006000C800260001C
-:10E660001800060001800260009880060001820008
-:10E6700000000000000000004045420030810C20F6
-:10E68000430810C22430818C20030810C20420806B
-:10E690000C20030818C20430810C20430818C01154
-:10E6A00050000000000000004000000030000C009E
-:10E6B000030000C04030000C000300008000300068
-:10E6C0000C00032000C00030000C00032000C0003C
-:10E6D00000000000000000004001021030800C200B
-:10E6E000030800C20030800C20030800C201208013
-:10E6F0000C20032C00C20030800C30432C00C000E2
-:10E7000040000000000000004045420460811820E5
-:10E710004608118204608018204608118204608136
-:10E720001820460C11C20460811830460C11C0112B
-:10E73000500000000000000040014200208008203E
-:10E740000228008200208008200208008200208029
-:10E7500008200208018200208008200308018000B0
-:10E7600000000000000000005001420460811820F9
-:10E7700046281182046080182046081182046081B6
-:10E780001820460810820460811820430810800079
-:10E79000000000000000000040454004500114004B
-:10E7A00045001140250000140045001140045001AF
-:10E7B00014004500004004500140000100004211D7
-:10E7C000500000000000000048000600418010607A
-:10E7D0000418010600418010600418010600418001
-:10E7E0001060041801060041801060041801000048
-:10E7F00000000000000000004800020500804021E9
-:10E80000100804000100804020100804020100806C
-:10E810004020500814021100844020100814000009
-:10E820000000000000000000404546015180D46017
-:10E8300035180D46035180D46015180D46035180DC
-:10E84000546015180D46035180D46035180D4011E1
-:10E8500050000000000000000001460471811C60AF
-:10E86000451811D60471811C60671811C6047181A6
-:10E870009C60471811C60471811C60671811C000A4
-:10E8800000000000000000004005460271809C600E
-:10E89000271809C60071809C60671809C60271803C
-:10E8A0009C61271801C60271809C60071801C00096
-:10E8B00000000000000000005045460571815C60CA
-:10E8C000571855D60171815C60571815C6057181BE
-:10E8D0005C60571818C60571815C60431818821176
-:10E8E0005000000000000000400452012080482039
-:10E8F00012480490012080492012080482012480DB
-:10E9000048201248009201208048201748048001C6
-:10E910000000000000000000400006006180186058
-:10E92000063C0186006180186046180186006180FF
-:10E930001860061801860061801860461801800181
-:10E9400000000000000000000041600478011E008B
-:10E95000478011E02478011E00078011E00478014F
-:10E960001E00478011E00438011E00478011C011CD
-:10E9700050000000000000004001120060801820DC
-:10E980000648019200608019200608018200648018
-:10E9900018200648019300208018200648018000B6
-:10E9A0000000000000000000400142042081082017
-:10E9B000420810820420810820020810820420816D
-:10E9C00008204208108A0460810820420810800054
-:10E9D000000000000000000040454204408110207B
-:10E9E00044081102044081102004081102044081EF
-:10E9F0001021440801020450811020040801001174
-:10EA000050000000000000004000030050C014301F
-:10EA1000050C01430050C01430050C014300508028
-:10EA200014300508014A0050C014300508014000A8
-:10EA300000000000000000004000080042001080BC
-:10EA40000420010800420010800420010800420058
-:10EA500010800420110000420010800420110010DA
-:10EA6000400000000000000040454202008080207D
-:10EA70002008080200008080202008080202008090
-:10EA80008020200808020200808020200808001151
-:10EA9000500000000000000040014000600118002C
-:10EAA00046001180066001180046001180046001D4
-:10EAB00018004600118004600118006600118010E3
-:10EAC00000000000000000004001400264009800C7
-:10EAD0002600099006600198002640098002600027
-:10EAE0009800260000900260009800070001800056
-:10EAF00000000000000000004045600438050E00E2
-:10EB0000438010E04438010E00438010E0043801D7
-:10EB10000E00438018A00438010E004680188011B2
-:10EB200050000000000000005000010030400C10B8
-:10EB3000030400C50030400C10031400C100304035
-:10EB40000C10030400874030400C100204008000C9
-:10EB500000000000000000004004050035400C509B
-:10EB6000031400D50431410C50035C00C500310092
-:10EB70000C50031000940031400C50431000C200B0
-:10EB800000000000000000004045430520C118308F
-:10EB9000460C11970060C01830461C11830460C1F8
-:10EBA0001830520C11870460C11830460C118011C6
-:10EBB000500000000000000040010000214008005B
-:10EBC00002000080002000080002000080002000F9
-:10EBD0000800020000800020000800020000800001
-:10EBE0000000000000000000400148442201188499
-:10EBF0004621119800621018844420118844621143
-:10EC00001884422111804462111884462111800029
-:10EC100000000000000000004045400450111404B2
-:10EC2000450011410050101400450111404450119D
-:10EC30001404450101404450111404050101401120
-:10EC40005000000000000000400008204208108230
-:10EC50000420010820420810820420810820420874
-:10EC6000108204228108205208108A0422810000A8
-:10EC7000000000000000000000040A01028440A11E
-:10EC80001028000A01028040A01028040A01028016
-:10EC900040A0102C140A00028040B0102C14000078
-:10ECA000000000000000000040454D035340D4D058
-:10ECB00035300C4D035340D4D035340D4D03534003
-:10ECC000D4D035340D4D021340D4D035340D40111D
-:10ECD00050000000000000004001080472011C8088
-:10ECE000472015C80472011C80472011C804721106
-:10ECF0001C80472611C84472011C90672611C00071
-:10ED000000000000000000000000230840C612318F
-:10ED1000848C01030848C61230840C61231848C251
-:10ED20001231848C01030848C61231048C010000A2
-:10ED3000000000000000000000003FFF4FFFD3FF75
-:10ED4000F4FFFD3FFF4FFFD3FFF4FFFD3FFF4FFFF9
-:10ED5000D3FFF4FFFD3FFF4FFFD3FFF4FFFD0000A3
-:10ED600000000000000000000000000000000000A3
-:10ED70000000000000000000000000000000000093
-:10ED80000000000000000000000000000000000083
-:10ED9000000000000000000000002DFB0FB6C2CDF7
-:10EDA000B0B7FD3FFB0B36C2DFB0FB6C2CDB0B7E3C
-:10EDB000C2CDB0B7FD3FFB0B36C2CDF4B7FD0000AE
-:10EDC0000000000000000000000033FC4FCF1333B0
-:10EDD000C4CFFD3FFC4CCF133FC4FCF1333C4CFF90
-:10EDE0001333C4CFFD3FFC4CCF1333F4CFFD0000F1
-:10EDF000000000000000000000003B7E4EDF93B7E3
-:10EE0000E4EDF93FFE4EDF93B7E4EDF93B7E4EC7EC
-:10EE100093B7E4EC61231E4EDF93B784EC610000EE
-:10EE20000000000000000000000000C524A14A24EA
-:10EE3000630114024400810B2871021082403811D2
-:10EE4000410450081882873831C32C520A10000040
-:10EE5000000000000000000000000845128144800E
-:10EE600071211C0A071A8102A0522014480712813E
-:10EE7000C680602008884702014A80702010000088
-:10EE80000000000000000000000002C52C014A0044
-:10EE900052091C800724210808710210804520A116
-:10EEA0004928520114C0450091C4007202100000AC
-:10EEB0000000000000000000000002072001C10067
-:10EEC0007109108007000101007008188007000117
-:10EED000892052010C8046308145046000100000FA
-:10EEE0000000000000000000000008C202200088AE
-:10EEF00020220008C22280408802220008820AA044
-:10EF00000CA802220008800A00808C022200000067
-:10EF10000000000000000000080002430000402044
-:10EF200030080440413010C8000000000203001007
-:10EF3000C000110800C2431080C020010800020078
-:10EF40000000000000000000080008C30A20C18C77
-:10EF500012220488013620C3081228040801040084
-:10EF60004AA8220104C8412630C0880221000200BC
-:10EF70000000000000000000080008000A10C18026
-:10EF800032210C88430280448012290408420A90EE
-:10EF90008A8000200448030A1082800020000200BA
-:10EFA000000000000000000000000A8702A180AC01
-:10EFB0004329148A8402A100AC412010080626319E
-:10EFC00080A46020144A44328181AC602A18020077
-:10EFD0000000000000000000080008072201C580B2
-:10EFE00073211CC8072A010C807220104847261183
-:10EFF000C58073201C88072A1149807020140200E4
-:10F000000000000000000000080000451031C90C9D
-:10F0100073021CC04704010A0C510A1082472031B8
-:10F02000C80072021C40053011C4007201180200B1
-:10F030000000000000000000081010062401450434
-:10F04000518118904714010404718810120534018D
-:10F050004404514018D0073801C404520114C204BA
-:10F060000000000000000000000000870021890C63
-:10F0700060011CD0452401C10C42010000C52031B3
-:10F08000410840001880450021410C70421CC2001C
-:10F090000000000000000000000002011C80C420ED
-:10F0A00031081042420880C62031090020031C901C
-:10F0B000C42001490C424310804420310810000054
-:10F0C0000000000000000000000030832030480CE9
-:10F0D00032401090812420C80432401020C3208088
-:10F0E000C800024A0CA0012410C8083241100000D8
-:10F0F0000000000000000000001090030000C904A0
-:10F10000304000900020008000104010004020108F
-:10F11000C20000800820430810810032400CC00467
-:10F12000200000000000000000003000400000004F
-:10F13000100000F01020000000100000F0108040CF
-:10F140000000004000F01090800000000000C000AF
-:10F1500000000000000000003C3C108090400000D7
-:10F1600000801090A09000000000001090808000AF
-:10F1700000000000109080900000000040108F0FF1
-:10F180000000000000000000000024C6BA06C01CF9
-:10F19000492861142B1C0E403FD9BFD9AABC1A5F65
-:10F1A0000010A6503B61B325BC4019BFFFE98000A9
-:10F1B0000000000000000000000010921494800C79
-:10F1C000073F2B948614848028000049140486127B
-:10F1D0008000412734D0908492002D8A211E800027
-:10F1E000000000000000000000000000000008A275
-:10F1F000B10101000000000884B17828000000007F
-:10F2000008B13214140000000008A8235421400063
-:10F21000000000000000000000003FFFFFFFC000F2
-:10F220000000002FFFFEF7C0000000002FD7FEEF08
-:10F23000C0000000003FFF7FFFC000000000000092
-:10F24000000000000000000000003FFFFFFFC000C2
-:10F250000000000FEF77FFC0000000003EFFFEEF50
-:10F2600040000000003FFFBFFF4000000000000022
-:10F27000000000000000000000003FFFFFFFC00092
-:10F280000000003FFFDFFFC0000000003FFFFFFF66
-:10F29000C0000000003F7F2FFFC000000000000002
-:10F2A000000000000000000000003FFFFFFFC00062
-:10F2B0000000001FFFFFEFC0000000001FEFEFEF96
-:10F2C000C0000000002FFFFFFFC000000000000092
-:10F2D000000000000000000000003FFFFFFFC00032
-:10F2E0000000003FFFEFFFC0000000002FAFDFFF76
-:10F2F000C0000000003FEFFFF7C00000000000006A
-:10F30000000000000000000000003FFFFFFFC00001
-:10F310000000003FDFDFFFC0000000003FFFFFFFF5
-:10F32000C0000000001FFFDFFFC000000000000061
-:10F330000000000000000000000002C424A1002C16
-:10F34000520B18C2862CA18038620A0840C42CA136
-:10F350000828420B14008514A10828430A10000055
-:10F3600000000000000000000000080412010380FB
-:10F3700061201008071241428070201C08041A0105
-:10F3800084814020180846368105806320100001E2
-:10F390008000000000000000000000842421000C18
-:10F3A00052021400872821810872061C82842021C1
-:10F3B0004818420354804530254A18530210000172
-:10F3C000200000000000000000000804220101806D
-:10F3D000422018C8442201808442201C8804220153
-:10F3E0000080402010884436014080410010000019
-:10F3F0000000000000000000000000C00820000C19
-:10F4000022030440810020840803000080C2002001
-:10F41000C408000308888216A040883222800000B9
-:10F42000000000000000000008000201008004202D
-:10F4300010080CC2121084C82212080402030088AB
-:10F440000021000C0C404130008420100800020014
-:10F450000000000000000000080008820620088C60
-:10F4600032220C888126204D882322808883062022
-:10F4700008880023048A8136204B8832220000004D
-:10F4800000000000000000000800080202000980DF
-:10F49000322004886022008984002008980002003D
-:10F4A000008000200008023A8048803020000200DE
-:10F4B000000000000000000008000AC41AA180A893
-:10F4C000412A10CAC71AA104AD712A184AD406B13C
-:10F4D00000A8712A100884262906AC522A100200BE
-:10F4E0000000000000000000080008042A0141801C
-:10F4F00042201C00040A01098451201C8844020196
-:10F5000008804020104A4702014880632010020012
-:10F510008000000000000000080000C41021810CE1
-:10F5200041020C00C020610D0E72021C40C4083163
-:10F530000418420210808720B1C40C53021000004E
-:10F540000000000000000000081020072401CC008B
-:10F55000724014000424010800734110C0073011E8
-:10F56000CC007101100204208146104240100204B8
-:10F570000000000000000000080000C51021000885
-:10F5800062021C90C52421000C70821C10C4203122
-:10F59000880240061C008500A1000C4042000200C9
-:10F5A000000000000000000000002205148001207F
-:10F5B00030080C42060080012451080C02410080F2
-:10F5C0004C2000080C304204000420000800000019
-:10F5D0000000000000000000000010C62420000C05
-:10F5E00032C20480C73020000C53C20410C22870FD
-:10F5F0000C0902024C80810430090C024210000008
-:10F60000000000000000000000108001380002002F
-:10F6100012400C200734040200630108100024107B
-:10F620000400020104820108800910024010000455
-:10F6300030000000000000000000302010800000BA
-:10F64000208000F02010800000208000D08000008A
-:10F650004000000000301000800000000000CC409E
-:10F6600000000000000000003C3C10808000000012
-:10F67000000010908080000000000010908000903A
-:10F68000800010000010A0800000002000108C08F6
-:10F6900000000000000000000000341ABE178000C7
-:10F6A0003E40266FBAE32480001659BD828182D87D
-:10F6B000800000199986806480C03FD9998000013C
-:10F6C000F000000000000000000006160294001682
-:10F6D000C01694829016108021182828020A020869
-:10F6E00080000000000282801400011411A040007C
-:10F6F000000000000000000000000000000008847E
-:10F700000284A8800000000891228441A2082401FC
-:10F7100030000000000000000008840144010000E7
-:10F72000000000000000000000003FFFFFFFC000DD
-:10F730000000003EF7FFF7C0000000002FE7B7FF12
-:10F74000C0000000002FFE7FF7C000000000000096
-:10F75000000000000000000000003FFFFFFFC000AD
-:10F7600000000036BFFEDFC0000000000FF7DFFF23
-:10F77000C0000000003DB7B7EFC00000000000006F
-:10F78000000000000000000000003FFFFFFFC0007D
-:10F790000000001FDFDFFFC0000000000FDFDFFF01
-:10F7A000C0000000003FEFFFFFC0000000000000AD
-:10F7B000000000000000000000003FFFFFFFC0004D
-:10F7C0000000003FBF7FFFC0000000003FFF7FF749
-:10F7D000C0000000003FDFFFFFC00000000000008D
-:10F7E000000000000000000000003FFFFFFFC0001D
-:10F7F0000000003F7EFFFF40000000003FFEFFFFD3
-:10F80000C0000000003FFFFFFFC00000000000003C
-:10F81000000000000000000000003FFFFFFFC000EC
-:10F8200000000037FF6FFFC0000000003FFFFFFF38
-:10F83000C0000000003FFFFFFFC00000000000000C
-:10F8400000000000000000000000000000000000B8
-:10F8500000000000000000000000000000000000A8
-:10F860000000000000000000000000000000000098
-:10F870000000000000000000300020010200000035
-:10F880003000430C000000000000000000000000F9
-:10F890000000000000000000000000000000000068
-:10F8A0000000000000000000000000000000000058
-:10F8B0000000000000000000000000000000000048
-:10F8C0000000000000000000000000000000000038
-:10F8D0000000000000000000000000000000000028
-:10F8E0000000000000000000000000000000000018
-:10F8F00000000000000000000030C00000000030E8
-:10F90000C000000000000000000000000000000037
-:10F9100000000000000000000000000000000000E7
-:10F9200000000000000000000000000000000000D7
-:10F9300000000000000000000000000000000000C7
-:10F9400000000000000000000000000000000000B7
-:10F95000000000000000000000000030C030C000C7
-:10F960000000000000000000000000000000000097
-:10F970000000000000000000000000000000000087
-:10F980000000000000000000000000000000000077
-:10F990000000000000000000000000000000000067
-:10F9A0000000000000000000000000000000000057
-:10F9B00000000000000000000030C030C030C03047
-:10F9C000C000000000000000000000000000000077
-:10F9D0000000000000000000000000000000000027
-:10F9E0000000000000000000000000000000000017
-:10F9F0000000000000000000000000000000000007
-:10FA000000000000000000000000000000000000F6
-:10FA10000000000000000000000F00000000000FC8
-:10FA200000000000000000000000000000000000D6
-:10FA300000000000000000000000000000000000C6
-:10FA400000000000000000000000000000000000B6
-:10FA500000000000000000000000000000000000A6
-:10FA60000000000000000000000000000000000096
-:10FA70000000000000000000003FC0000000003F48
-:10FA8000C0000000000000000000000000000000B6
-:10FA90000000000000000000000000000000000066
-:10FAA0000000000000000000000000000000000056
-:10FAB0000000000000000000000000000000000046
-:10FAC0000000000000000000000000000000000036
-:10FAD0000000000000000000000F0030C030C00F28
-:10FAE0000000000000000000000000000000000016
-:10FAF0000000000000000000000000000000000006
-:10FB000000000000000000000000000000000000F5
-:10FB100000000000000000000000000000000000E5
-:10FB200000000000000000000000000000000000D5
-:10FB3000000000000000000000136B00C000CF2C8C
-:10FB40004000000000000000000000000000000075
-:10FB500000000000000000000000000000000000A5
-:10FB60000000000000000000000000000000000095
-:10FB70000000000000000000000000000000000085
-:10FB80000000000000000000000000000000000075
-:10FB900000000000000000000000000F000F000047
-:10FBA0000000000000000000000000000000000055
-:10FBB0000000000000000000000000000000000045
-:10FBC0000000000000000000000000000000000035
-:10FBD0000000000000000000000000000000000025
-:10FBE0000000000000000000000000000000000015
-:10FBF00000000000000000000030C00F000F0030C7
-:10FC0000C000000000000000000000000000000034
-:10FC100000000000000000000000000000000000E4
-:10FC200000000000000000000000000000000000D4
-:10FC300000000000000000000000000000000000C4
-:10FC400000000000000000000000000000000000B4
-:10FC500000000000000000000000003FC03FC000A6
-:10FC60000000000000000000000000000000000094
-:10FC70000000000000000000000000000000000084
-:10FC80000000000000000000000000000000000074
-:10FC90000000000000000000000000000000000064
-:10FCA0000000000000000000000000000000000054
-:10FCB00000000000000000000030C03FC03FC03026
-:10FCC000C000000000000000000000000000000074
-:10FCD0000000000000000000000000000000000024
-:10FCE0000000000000000000000000000000000014
-:10FCF0000000000000000000000000000000000004
-:10FD000000000000000000000000000000000000F3
-:10FD10000000000000000000000F000F000F000FA7
-:10FD200000000000000000000000000000000000D3
-:10FD300000000000000000000000000000000000C3
-:10FD400000000000000000000000000000000000B3
-:10FD500000000000000000000000000000000000A3
-:10FD60000000000000000000000000000000000093
-:10FD70000000000000000000003FC00F000F003F27
-:10FD8000C0000000000000000000000000000000B3
-:10FD90000000000000000000000000000000000063
-:10FDA0000000000000000000000000000000000053
-:10FDB0000000000000000000000000000000000043
-:10FDC0000000000000000000000000000000000033
-:10FDD0000000000000000000000F003FC03FC00F07
-:10FDE0000000000000000000000000000000000013
-:10FDF0000000000000000000000000000000000003
-:10FE000000000000000000000000000000000000F2
-:10FE100000000000000000000000000000000000E2
-:10FE200000000000000000000000000000000000D2
-:10FE3000000000000000000006335D80C000FDAC43
-:10FE400002000000000000000000000000000000B0
-:10FE500000000000000000000000000000000000A2
-:10FE60000000000000000000000000000000000092
-:10FE70000000000000000000000000000000000082
-:10FE80000000000000000000000000000000000072
-:10FE90000000000000000000000000000000000062
-:10FEA0000000000000000000000000000000000052
-:10FEB0000000000000000000000000000000000042
-:10FEC0000000000000000000000000000000000032
-:10FED0000000000000000000000000000000000022
-:10FEE0000000000000000000000000000000000012
-:10FEF00000000000000000000030C00000000030E2
-:10FF0000C000000000000000000000000000000031
-:10FF100000000000000000000000000000000000E1
-:10FF200000000000000000000000000000000000D1
-:10FF300000000000000000000000000000000000C1
-:10FF400000000000000000000000000000000000B1
-:10FF5000000000000000000000000030C030C000C1
-:10FF60000000000000000000000000000000000091
-:10FF70000000000000000000000000000000000081
-:10FF80000000000000000000000000000000000071
-:10FF90000000000000000000000000000000000061
-:10FFA0000000000000000000000000000000000051
-:10FFB00000000000000000000030C030C030C03041
-:10FFC000C000000000000000000000000000000071
-:10FFD0000000000000000000000000000000000021
-:10FFE0000000000000000000000000000000000011
-:10FFF0000000000000000000000000000000000001
-:108010000000000000000000000000000000000060
-:108020000000000000000000000F00000000000F32
-:108030000000000000000000000000000000000040
-:108040000000000000000000000000000000000030
-:108050000000000000000000000000000000000020
-:108060000000000000000000000000000000000010
-:108070000000000000000000000000000000000000
-:108080000000000000000000003FC0000000003FB2
-:10809000C000000000000000000000000000000020
-:1080A00000000000000000000000000000000000D0
-:1080B00000000000000000000000000000000000C0
-:1080C00000000000000000000000000000000000B0
-:1080D00000000000000000000000000000000000A0
-:1080E0000000000000000000000F0030C030C00F92
-:1080F0000000000000000000000000000000000080
-:10810000000000000000000000000000000000006F
-:10811000000000000000000000000000000000005F
-:10812000000000000000000000000000000000004F
-:10813000000000000000000000000000000000003F
-:108140000000000000000000001374C0C000F0EC4C
-:1081500040000000000000000000000000000000DF
-:10816000000000000000000000000000000000000F
-:1081700000000000000000000000000000000000FF
-:1081800000000000000000000000000000000000EF
-:1081900000000000000000000000000000000000DF
-:1081A00000000000000000000000000F000F0000B1
-:1081B00000000000000000000000000000000000BF
-:1081C00000000000000000000000000000000000AF
-:1081D000000000000000000000000000000000009F
-:1081E000000000000000000000000000000000008F
-:1081F000000000000000000000000000000000007F
-:1082000000000000000000000030C00F000F003030
-:10821000C00000000000000000000000000000009E
-:10822000000000000000000000000000000000004E
-:10823000000000000000000000000000000000003E
-:10824000000000000000000000000000000000002E
-:10825000000000000000000000000000000000001E
-:1082600000000000000000000000003FC03FC00010
-:1082700000000000000000000000000000000000FE
-:1082800000000000000000000000000000000000EE
-:1082900000000000000000000000000000000000DE
-:1082A00000000000000000000000000000000000CE
-:1082B00000000000000000000000000000000000BE
-:1082C0000000000000000000001986108030823D90
-:1082D000800000000000000000000000000000001E
-:1082E000000000000000000000000000000000008E
-:1082F000000000000000000000000000000000007E
-:10830000000000000000000000000000000000006D
-:10831000000000000000000000000000000000005D
-:108320000000000000000000000F000F000F000F11
-:10833000000000000000000000000000000000003D
-:10834000000000000000000000000000000000002D
-:10835000000000000000000000000000000000001D
-:10836000000000000000000000000000000000000D
-:1083700000000000000000000000000000000000FD
-:108380000000000000000000003FC00F000F003F91
-:10839000C00000000000000000000000000000001D
-:1083A00000000000000000000000000000000000CD
-:1083B00000000000000000000000000000000000BD
-:1083C00000000000000000000000000000000000AD
-:1083D000000000000000000000000000000000009D
-:1083E0000000000000000000000F003FC03FC00F71
-:1083F000000000000000000000000000000000007D
-:10840000000000000000000000000000000000006C
-:10841000000000000000000000000000000000005C
-:10842000000000000000000000000000000000004C
-:10843000000000000000000000000000000000003C
-:108440000000000000000000376525E48000B088CF
-:10845000AB40000000000000000000000000000031
-:10846000000000000000000000000000000000000C
-:1084700000000000000000000000000000000000FC
-:1084800000000000000000000000000000000000EC
-:1084900000000000000000000000000000000000DC
-:1084A00000000000000000000000000000000000CC
-:1084B00000000000000000000000000000000000BC
-:1084C00000000000300020010202000030004300E4
-:1084D000000000000000000000000000000000009C
-:1084E000000000000000000000000000000000008C
-:1084F000000000000000000000000000000000007C
-:10850000000000000000000000000000000000006B
-:10851000000000000000000000000000000000005B
-:10852000000000000000000000000000000000004B
-:10853000000000000000000000000000000000003B
-:10854000000000000000000000000000000000002B
-:10855000000000000000000000000000000000001B
-:10856000000000000000000000000000000000000B
-:1085700000000000000000000000000000000000FB
-:1085800000000000000000000000000000000000EB
-:1085900000000000000000000000000000000000DB
-:1085A00000000000000000000000000000000000CB
-:1085B00000000000000000000000000000000000BB
-:1085C00000000000000000000000000000000000AB
-:1085D000000000000000000000000000000000009B
-:1085E000000000000000000000000000000000008B
-:1085F000000000000000000000000000000000007B
-:10860000000000000000000000000000000000006A
-:10861000000000000000000000000000000000005A
-:10862000000000000000000000000000000000004A
-:10863000000000000000000000000000000000003A
-:10864000000000000000000000000000000000002A
-:10865000000000000000000000000000000000001A
-:10866000000000000000000000000000000000000A
-:1086700000000000000000000000000000000000FA
-:1086800000000000000000000000000000000000EA
-:1086900000000000000000000000000000000000DA
-:1086A00000000000000000000000000000000000CA
-:1086B00000000000000000000000000000000000BA
-:1086C00000000000000000000000000000000000AA
-:1086D000000000000000000000000000000000009A
-:1086E000000000000000000000000000000000008A
-:1086F000000000000000000000000000000000007A
-:108700000000000000000000000000000000000069
-:108710000000000000000000000000000000000059
-:108720000000000000000000000000000000000049
-:108730000000000000000000000000000000000039
-:108740000000000000000000000000000000000029
-:108750000000000000000000000000000000000019
-:108760000000000000000000000000000000000009
-:1087700000000000000000000000000000000000F9
-:1087800000000000000000000000000000000000E9
-:1087900000000000000000000000000000000000D9
-:1087A00000000000000000000000000000000000C9
-:1087B00000000000000000000000000000000000B9
-:1087C00000000000000000000000000000000000A9
-:1087D0000000000000000000000000000000000099
-:1087E0000000000000000000000000000000000089
-:1087F0000000000000000000000000000000000079
-:108800000000000000000000000000000000000068
-:108810000000000000000000000000000000000058
-:108820000000000000000000000000000000000048
-:108830000000000000000000000000000000000038
-:108840000000000000000000000000000000000028
-:108850000000000000000000000000000000000018
-:108860000000000000000000000000000000000008
-:1088700000000000000000000000000000000000F8
-:1088800000000000000000000000000000000000E8
-:1088900000000000000000000000000000000000D8
-:1088A00000000000000000000000000000000000C8
-:1088B00000000000000000000000000000000000B8
-:1088C00000000000000000000000000000000000A8
-:1088D0000000000000000000000000000000000098
-:1088E0000000000000000000000000000000000088
-:1088F0000000000000000000000000000000000078
-:108900000000000000000000000000000000000067
-:108910000000000000000000000000000000000057
-:108920000000000000000000000000000000000047
-:108930000000000000000000000000000000000037
-:108940000000000000000000000000000000000027
-:108950000000000000000000000000000000000017
-:108960000000000000000000000000000000000007
-:1089700000000000000000000000000000000000F7
-:1089800000000000000000000000000000000000E7
-:1089900000000000000000000000000000000000D7
-:1089A00000000000000000000000000000000000C7
-:1089B00000000000000000000000000000000000B7
-:1089C00000000000000000000000000000000000A7
-:1089D0000000000000000000000000000000000097
-:1089E0000000000000000000000000000000000087
-:1089F0000000000000000000000000000000000077
-:108A00000000000000000000000000000000000066
-:108A10000000000000000000000000000000000056
-:108A20000000000000000000000000000000000046
-:108A30000000000000000000000000000000000036
-:108A40000000000000000000000000000000000026
-:108A50000000000000000000000000000000000016
-:108A60000000000000000000000000000000000006
-:108A700000000000000000000000000000000000F6
-:108A800000000000000000000000000000000000E6
-:108A900000000000000000000000000000000000D6
-:108AA00000000000000000000000000000000000C6
-:108AB00000000000000000000000000000000000B6
-:108AC00000000000000000000000000000000000A6
-:108AD0000000000000000000000000000000000096
-:108AE0000000000000000000000000000000000086
-:108AF0000000000000000000000000000000000076
-:108B00000000000000000000000000000000000065
-:108B10000000000000000000000000000000000055
-:108B20000000000000000000000000000000000045
-:108B30000000000000000000000000000000000035
-:108B40000000000000000000000000000000000025
-:108B50000000000000000000000000000000000015
-:108B60000000000000000000000000000000000005
-:108B700000000000000000000000000000000000F5
-:108B800000000000000000000000000000000000E5
-:108B900000000000000000000000000000000000D5
-:108BA00000000000000000000000000000000000C5
-:108BB00000000000000000000000000000000000B5
-:108BC00000000000000000000000000000000000A5
-:108BD0000000000000000000000000000000000095
-:108BE0000000000000000000000000000000000085
-:108BF0000000000000000000000000000000000075
-:108C00000000000000000000000000000000000064
-:108C10000000000000000000000000000000000054
-:108C20000000000000000000000000000000000044
-:108C30000000000000000000000000000000000034
-:108C40000000000000000000000000000000000024
-:108C50000000000000000000000000000000000014
-:108C60000000000000000000000000000000000004
-:108C700000000000000000000000000000000000F4
-:108C800000000000000000000000000000000000E4
-:108C900000000000000000000000000000000000D4
-:108CA00000000000000000000000000000000000C4
-:108CB00000000000000000000000000000000000B4
-:108CC00000000000000000000000000000000000A4
-:108CD0000000000000000000000000000000000094
-:108CE0000000000000000000000000000000000084
-:108CF0000000000000000000000000000000000074
-:108D00000000000000000000000000000000000063
-:108D10000000000000000000000000000000000053
-:108D20000000000000000000000000000000000043
-:108D30000000000000000000000000000000000033
-:108D40000000000000000000000000000000000023
-:108D50000000000000000000000000000000000013
-:108D60000000000000000000000000000000000003
-:108D700000000000000000000000000000000000F3
-:108D800000000000000000000000000000000000E3
-:108D900000000000000000000000000000000000D3
-:108DA00000000000000000000000000000000000C3
-:108DB00000000000000000000000000000000000B3
-:108DC00000000000000000000000000000000000A3
-:108DD0000000000000000000000000000000000093
-:108DE0000000000000000000000000000000000083
-:108DF0000000000000000000000000000000000073
-:108E00000000000000000000000000000000000062
-:108E10000000000000000000000000000000000052
-:108E20000000000000000000000000000000000042
-:108E30000000000000000000000000000000000032
-:108E40000000000000000000000000000000000022
-:108E50000000000000000000000000000000000012
-:108E60000000000000000000000000000000000002
-:108E700000000000000000000000000000000000F2
-:108E800000000000000000000000000000000000E2
-:108E900000000000000000000000000000000000D2
-:108EA00000000000000000000000000000000000C2
-:108EB00000000000000000000000000000000000B2
-:108EC00000000000000000000000000000000000A2
-:108ED0000000000000000000000000000000000092
-:108EE0000000000000000000000000000000000082
-:108EF0000000000000000000000000000000000072
-:108F00000000000000000000000000000000000061
-:108F10000000000000000000000000000000000051
-:108F20000000000000000000000000000000000041
-:108F30000000000000000000000000000000000031
-:108F40000000000000000000000000000000000021
-:108F50000000000000000000000000000000000011
-:108F60000000000000000000000000000000000001
-:108F700000000000000000000000000000000000F1
-:108F800000000000000000000000000000000000E1
-:108F900000000000000000000000000000000000D1
-:108FA00000000000000000000000000000000000C1
-:108FB00000000000000000000000000000000000B1
-:108FC00000000000000000000000000000000000A1
-:108FD0000000000000000000000000000000000091
-:108FE0000000000000000000000000000000000081
-:108FF0000000000000000000000000000000000071
-:109000000000000000000000000000000000000060
-:109010000000000000000000000000000000000050
-:109020000000000000000000000000000000000040
-:109030000000000000000000000000000000000030
-:109040000000000000000000000000000000000020
-:109050000000000000000000000000000000000010
-:109060000000000000000000000000000000000000
-:1090700000000000000000000000000000000000F0
-:1090800000000000000000000000000000000000E0
-:1090900000000000000000000000000000000000D0
-:1090A00000000000000000000000000000000000C0
-:1090B00000000000000000000000000000000000B0
-:1090C00000000000000000000000000000000000A0
-:1090D00030000001000044723000800100000003F5
-:1090E0003000400C00000000000000000000000004
-:1090F0000000000000000000000000000000000070
-:10910000000000000000000000000000000000005F
-:109110000000000030008001000000053000A001C8
-:1091200000000000300000010000E15A00000000D3
-:0C91300000000000000000000000000033
-:00000001FF
-/*
- * This firmware is for the Emagic EMI 2|6 Audio Interface
- *
- * The firmware contained herein is Copyright (c) 1999-2002 Emagic
- * as an unpublished work. This notice does not imply unrestricted
- * or public access to this firmware which is a trade secret of Emagic,
- * and which may not be reproduced, used, sold or transferred to
- * any third party without Emagic's written consent. All Rights Reserved.
- *
- * Permission is hereby granted for the distribution of this firmware
- * image as part of a Linux or other Open Source operating system kernel
- * in text or binary form as required.
- *
- * This firmware may not be modified and may only be used with the
- * Emagic EMI 2|6 Audio Interface. Distribution and/or Modification of
- * any driver which includes this firmware, in whole or in part,
- * requires the inclusion of this statement.
- *
-/// VERSION=1.1.1.131
-// DATE=2001dec06
-// PRODUCT=EMI 2|6
diff --git a/firmware/emi26/firmware.HEX b/firmware/emi26/firmware.HEX
deleted file mode 100644
index 1ca400eb1413..000000000000
--- a/firmware/emi26/firmware.HEX
+++ /dev/null
@@ -1,1261 +0,0 @@
-:0300000002435662
-:03000300024BCDE0
-:03000B00024BD2D3
-:03001300024B920B
-:03001B00024BD5C0
-:03002300021B3984
-:03002B000243E2AB
-:03003300023FF396
-:03003B00024BC0B5
-:0300430002470071
-:03004B00023FFC75
-:030053000237FA77
-:03005B00024BC78E
-:030063000246FC56
-:1005000012011001000000406A080101000101020F
-:1005100000010902B80103010080A00904000000E5
-:10052000010100000A2401000156000201020C240E
-:100530000201010100060000000015240605010269
-:10054000030000000000000000000000000000099F
-:1005500024030204030005000C240203010200022C
-:10056000000000000D240606030203000000000046
-:100570000009240304010100060009040100000130
-:100580000200000904010102010200000724010128
-:10059000000100112402010202100344AC0080BBE0
-:1005A0000000770109050A05840101008F07250174
-:1005B0000100000009058F01030001060009040184
-:1005C000020201020000072401010001000E2402C2
-:1005D000010602100244AC0080BB0009050A054C6C
-:1005E0000201008F0725010100000009058F0103AA
-:1005F00000010600090401030201020000072401B2
-:10060000010001000E2402010603180244AC008020
-:10061000BB0009050A05720301008F0725010100CF
-:10062000000009058F01030001060009040104020E
-:1006300001020000072401010001000B2402010255
-:1006400003180100770109050A05460201008F071A
-:1006500025010100000009058F01030001060009C2
-:10066000040200000102000009040201010102006D
-:1006700000072401040001001124020102021003FA
-:1006800044AC0080BB0000770109058C05840101A2
-:100690000000072501010200000904020201010215
-:1006A00000000724010400010011240201020318C4
-:1006B0000344AC0080BB0000770109058C054602AD
-:1006C00001000007250101020000050C0901A1013C
-:1006D000050C09E9050C09EA1500250195027501CB
-:1006E0008142950175068101050C0900050C090080
-:1006F0001500250195027501910695017506910376
-:10070000C004030904180345004D00410047004997
-:10071000004300200047006D00620048001E0345B2
-:10072000006D006100670069006300200045004D16
-:10073000004900200032007C0036002A0343006F8D
-:10074000006E006600690067007500720061007449
-:100750000069006F006E0020005300740072006991
-:10076000006E006700220349006E0074006500728D
-:100770000066006100630065002000530074007291
-:090780000069006E006700000032
-:100789007400F58690FDA57C05A3E582458370F983
-:01079900223D
-:10079A00907FD6E04480F0438701000000000022E9
-:1007AA00C0D0C0E08FE0C0E08EE0C0E08DE0C0E0E5
-:1007BA008CE0C0E0C082C0830586C084C085E5188D
-:1007CA00B402030207D9B401030207DE0207FA7D65
-:1007DA0001020816E51914F519C3B513030207F542
-:1007EA005009B400EA75190A0207D97D00020816F1
-:1007FA00E51914F519C3B514030208115009B40018
-:10080A00CE75190A0207D97D020208167C05907F67
-:10081A0099E05440DC03020843B4001D907FE3745E
-:10082A007BF0A37480F0907FE27440F0907FE5F053
-:10083A00907FE27400F00208180586907FE27480C7
-:10084A00F0907965E0B4010302089EB4020302083D
-:10085A0096B4030302088EB40403020886B405039F
-:10086A0002087EB406030208760208F40586907F21
-:10087A006C0208E90586907F6C0208DD0586907F88
-:10088A006C0208CF0586907F6C0208C00586907FAF
-:10089A006C0208B20586907F6CF000F000F000F060
-:1008AA000DEDB42DF40208F4F0F0F0F0F0F00DEDD7
-:1008BA00B42DF50208F4F000F000F000F00DEDB4EC
-:1008CA0031F40208F4F0F0F0F0F0F00DEDB431F587
-:1008DA000208F4F0F0F0F00DEDB461F70208F4F05C
-:1008EA00F0F0F0F0F00DEDB461F5907FE27400F0F5
-:1008FA00D085D0840586D083D082D0E0FCD0E0FDBC
-:05090A00D0E0FED0E08A
-:06090F00FFD0E0D0D02271
-:10091500C0D0C0E0C082C083907F6FE50CF0E50DCC
-:0D092500F0E50EF0D083D082D0E0D0D022DB
-:10093200C0D0C0E08FE0C0E08EE0C0E0C082C083E3
-:100942000586C084C085907970E0FFBF0003020A6B
-:10095200B8907F96E04480F0907FE27480F0907FC0
-:1009620062E00586907FE27400F0907F96E0547F0B
-:10097200F0907FE27480F0907988E0B4010302097C
-:10098200BEB402030209C3B403030209ACB40403F4
-:1009920002099A0586020AB2EF5403FEEF030354DA
-:1009A2003FFF907F6305860209C9EF5403FEEF0300
-:1009B20003543FFF907F630586020A360586020ACA
-:1009C200A50586020A8EE0E0E0E0E0E00586E0E0D0
-:1009D200E00586E0E0E0E0E0E00586E0E0E00586B4
-:1009E200E0E0E0E0E0E00586E0E0E00586E0E0E06F
-:1009F200E0E0E00586E0E0E00586DFCAEEB4000351
-:100A0200020AB2B40103020A25E0E0E0E0E0E005F8
-:100A120086E0E0E00586E0E0E0E0E0E00586E0E098
-:100A2200E00586E0E0E0E0E0E00586E0E0E0058663
-:100A3200020AB2E0E0E0E00586E0E00586E0E0E000
-:0D0A4200E00586E0E00586E0E0E0E00586E6
-:100A4F00E0E00586E0E0E0E00586E0E00586DFD641
-:100A5F00EEB40003020AB2B40103020A80E0E0E040
-:100A6F00E00586E0E00586E0E0E0E00586E0E005F1
-:100A7F0086E0E0E0E00586E0E00586020AB2E0E00D
-:100A8F00E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E057
-:100A9F00DFEC020AB2E0E0E0E0E0E0E0E0E0E0E01E
-:100AAF00E0DFF2907FE27400F0D085D0840586D02D
-:0E0ABF0083D082D0E0FED0E0FFD0E0D0D02285
-:100ACD00C082C083C0E0E8C0E078D1E814F870FBC4
-:0A0ADD00D0E0F8D0E0D083D08222F0
-:100AE700C0D0C0E08FE0C0E08EE0C0E08DE0C0E0A5
-:100AF7008CE0C0E0758600C082C0830586C084C0D4
-:100B0700857E0090798EE0B400167401F09006CAD5
-:100B1700A3A3A3A3A3A3A3E0FF90798DF0020B39AE
-:100B270090798DE0FF90798FE0FD907990E0FC025D
-:100B37000B469006CA0586907F000586020B518DED
-:100B4700848C850586907F000586E0A30586F0A343
-:100B57000EEEB44003020B6C0586DFEE90798E74BF
-:100B670000F0020B820586AD84AC8590798FEDF09D
-:100B7700907990ECF090798D1FEFF0907FB5EEF0C3
-:100B8700D085D0840586D083D082D0E0FCD0E0FD2C
-:0B0B9700D0E0FED0E0FFD0E0D0D02284
-:100BA200C0D0C0E0C082C083907FAEE054E0F0903D
-:100BB2007F96E0440854FBF0907F97E054BFF0909A
-:100BC2007FE3747BF0907FE47440F0907978E0905A
-:100BD2007B40F0907FE27448F0907FE5E0907FE206
-:100BE2007400F0907F96E054F74404F0907FE37431
-:100BF2007BF0907FE47440F0907979E0907B40F054
-:100C0200907FE27448F0907FE5E0907FE27400F01C
-:100C1200907F96E054F3F0907FAEE0441FF0D083D3
-:070C2200D082D0E0D0D02207
-:100C2900C0D0C0E0C083C08290792FE064FFC324A4
-:0B0C390001F0D082D083D0E0D0D022A8
-:100C4400BB010689828A83E0225002E722BBFE02AE
-:090C5400E32289828A83E49322E1
-:100C5D00BB010CE58229F582E5833AF583E022504C
-:100C6D0006E92582F8E622BBFE06E92582F8E22296
-:0D0C7D00E58229F582E5833AF583E49322B0
-:100C8A00BB010689828A83F0225002F722BBFE0149
-:020C9A00F32243
-:100C9C00F8BB010DE58229F582E5833AF583E8F08E
-:100CAC00225006E92582C8F622BBFE05E92582C83A
-:020CBC00F22222
-:100CBE00C2D5EC30E709B2D5E4C39DFDE49CFCEE51
-:100CCE0030E715B2D5E4C39FFFE49EFE120E40C37B
-:100CDE00E49DFDE49CFC8003120E4030D507C3E476
-:060CEE009FFFE49EFE22C0
-:100CF400C5F0F8A3E028F0C5F0F8E582158270028B
-:060D04001583E038F02227
-:100D0A00BB0110E58229F582E5833AF583E0F5F027
-:100D1A00A3E0225009E92582F886F008E622BBFE04
-:100D2A000AE92582F8E2F5F008E222E5832AF5834A
-:080D3A00E993F5F0A3E993220F
-:100D4200E88FF0A4CC8BF0A42CFCE98EF0A42CFC50
-:100D52008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4CE
-:100D62002DCC3825F0FDE98FF0A42CCD35F0FCEB2D
-:100D72008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39F2
-:0F0D8200FEE43CFCEAA42DCE35F0FDE43CFC225F
-:100D9100EB9FF5F0EA9E42F0E99D42F0E89C45F0B8
-:010DA100222F
-:100DA200BB010DE58229F582E5833AF583020EA1A6
-:100DB2005007E92582F8020E95BBFE07E92582F865
-:100DC200020EADE58229F582E5833AF583020EB97A
-:100DD200BB010DE58229F582E5833AF583020ED542
-:100DE2005007E92582F8020EC9BBFE07E92582F801
-:040DF200020EE122EA
-:100DF600BB010DE58229F582E5833AF583020F06EC
-:100E06005007E92582F8020EEDBBFE07E92582F8B8
-:040E1600020F37226E
-:100E1A00D083D082F8E4937012740193700DA3A367
-:100E2A0093F8740193F5828883E47374029368607B
-:060E3A00EFA3A3A380DF7B
-:100E4000BC000BBE0029EF8DF084FFADF022E4CC96
-:100E5000F875F008EF2FFFEE33FEEC33FCEE9DEC5F
-:100E6000984005FCEE9DFE0FD5F0E9E4CEFD22EDA5
-:100E7000F8F5F0EE8420D21CFEADF075F008EF2FEF
-:100E8000FFED33FD4007985006D5F0F222C398FDE0
-:050E90000FD5F0EA227D
-:0C0E9500E6FC08E6FD08E6FE08E6FF2289
-:0C0EA100E0FCA3E0FDA3E0FEA3E0FF22C4
-:0C0EAD00E2FC08E2FD08E2FE08E2FF2281
-:100EB900E493FCA3E493FDA3E493FEA3E493FF224C
-:0C0EC900ECF608EDF608EEF608EFF62255
-:0C0ED500ECF0A3EDF0A3EEF0A3EFF02290
-:0C0EE100ECF208EDF208EEF208EFF2224D
-:100EED00D083D082E493F608740193F608740293CC
-:090EFD00F608740393F674047303
-:100F0600A8828583F0D083D082120F1D120F1D1286
-:100F16000F1D120F1DE473E493A3C583C5F0C583AB
-:100F2600C8C582C8F0A3C583C5F0C583C8C582C835
-:010F36002298
-:100F3700D083D082E493F208740193F20874029389
-:090F4700F208740393F2740473C0
-:100F5000C2AFD22C907F937430F0907F9C74BFF01E
-:100F6000907F96E05430F0907F947430F0907F9DA5
-:100F700074CFF0907F9774A0F0907F9574CCF0E4DC
-:100F8000907F9EF0C22DC22AC22BC22E907974048B
-:100F9000F0122E941249E2124BE612320D123B0D62
-:100FA0001241FD123E99E51F7018751F011217FFBF
-:100FB000122FFF1249C8124BD8124BDA12496F1286
-:100FC0001B4012398D907FAFE04401F0907FAEE07E
-:100FD000441FF0907FAC74FFF0907FADF0907FDE07
-:100FE000F0907FDFF0907FABF0907FA9F0907FAA28
-:100FF000F05391EF43D820D2E843D82043A8802271
-:10100000907963E014604414700221D0147002419E
-:10101000D914700261D7240460028156E490797873
-:10102000F090797BE0907979F04401F054FDF090F4
-:10103000797BF0E4907988F0A2AF33F512C2AF1259
-:101040000BA2E51270028156D2AF2290792DE06496
-:10105000017079907FF2F0907FF37430F0907FFF11
-:1010600074FCF0E4907978F090797BE0907979F0F5
-:101070004401F04402F090797BF0A2AFE433F51222
-:10108000C2AF120BA29079787402F0907984E0904C
-:101090007979F090797FE0B40109907979E054FE94
-:1010A000F08007907979E04401F0907979E054FD7F
-:1010B000F054FBF0907984F0120BA29079827404C2
-:1010C000F090798814F0E5126002D2AF90792DE0AB
-:1010D00064027079907FF2F0907FF37434F0907F27
-:1010E000FF74FCF0E4907978F090797BE090797966
-:1010F000F04401F04402F090797BF0A2AFE433F5C4
-:1011000012C2AF120BA29079787402F0907984E049
-:10111000907979F090797FE0B40109907979E05481
-:10112000FEF08007907979E04401F0907979E0440D
-:1011300002F054FBF0907984F0120BA29079827443
-:1011400004F090798814F0E5126002D2AF90792D06
-:10115000E0640360028156907FF2F0907FF3746444
-:10116000F0907FFF74FCF0E4907978F090797BE068
-:10117000907979F04401F04402F090797BF0A2AFCD
-:10118000E433F512C2AF120BA29079787402F0909A
-:101190007984E0907979F090797FE0B401099079D1
-:1011A00079E054FEF08007907979E04401F090797D
-:1011B00079E04404F0907984F0120BA29079827463
-:1011C00004F090798814F0E51270028156D2AF22B3
-:1011D00090792DE06401707A907FF2F0907FF37443
-:1011E00088F0907FFF74FCF0E4907978F090797B40
-:1011F000E0907979F04401F054FDF090797BF0A211
-:10120000AFE433F512C2AF120BA29079787402F0FA
-:10121000907984E0907979F090797FE0B401099039
-:101220007979E054FEF08007907979E04401F090FC
-:101230007979E054FDF054FBF0907984F0120BA220
-:10124000907982740CF09079887401F0E512600254
-:10125000D2AF90792DE0640260028156907FF2F067
-:10126000907FF37494F0907FFF74FCF0E4907978B1
-:10127000F090797BE0907979F04401F054FDF090A2
-:10128000797BF0A2AFE433F512C2AF120BA29079D2
-:10129000787402F0907984E0907979F090797FE029
-:1012A000B40109907979E054FEF08007907979E0F3
-:1012B0004401F0907979E04402F054FBF090798495
-:1012C000F0120BA2907982740CF09079887401F07E
-:1012D000E51270028156D2AF2290792DE064017040
-:1012E00077907FF2F0907FF374CCF0907FFF74FCE6
-:1012F000F0E4907978F090797BE0907979F054FC83
-:10130000F090797BF0A2AFE433F512C2AF120BA2DA
-:101310009079787402F0907984E0907979F09079FE
-:101320007FE0B40109907979E054FEF0800790796C
-:1013300079E04401F0907979E054FDF054FBF090AD
-:101340007984F0120BA29079827412F090798874EB
-:1013500002F0E5126002D2AF90792DE0640270775E
-:10136000907FF2F0907FF374E0F0907FFF74FCF0D8
-:10137000E4907978F090797BE0907979F054FCF002
-:1013800090797BF0A2AFE433F512C2AF120BA290BA
-:1013900079787402F0907984E0907979F090797F8F
-:1013A000E0B40109907979E054FEF08007907979F2
-:1013B000E04401F0907979E04402F054FBF0907938
-:1013C00084F0120BA29079827412F09079887402E2
-:1013D000F0E5126002D2AF90792DE064037077904F
-:1013E0007FF2F0907FF37494F0907FFF74FCF0E450
-:1013F000907978F090797BE0907979F054FEF04420
-:1014000002F090797BF0A2AFE433F512C2AF120B79
-:10141000A29079787402F0907984E0907979F090D4
-:10142000797FE0B40109907979E054FEF08007906B
-:101430007979E04401F0907979E04404F09079847E
-:10144000F0120BA29079827406F09079887404F0FF
-:07145000E5126002D2AF2299
-:10145700C228C229907FE8E0120E1A14840014E013
-:101467000114F602167C2116BE2215918015D18132
-:10147700162E8216CFA11705A20000170A907FE942
-:10148700E014601124FE602824FE603B24FC7040B9
-:10149700124A2AE116124BE04002E116907FEAE079
-:1014A700B40104C22AE116907FB4E04401F0E116CA
-:1014B700124BE2907FEAE0B40104D22AE116907F52
-:1014C700B4E04401F0E116907FB4E04401F0E11686
-:1014D700907FB4E04401F0E116907FE9E024F570D5
-:1014E7000512479CE116907FB4E04401F0E11690A5
-:1014F7007FE9E024FD605424026002A188124BE0DA
-:101507004002E116907FEAE07038907FECE0F454F7
-:1015170080FFC4540FFFE054072F25E024B4F58261
-:10152700E4347FF583E4F0907FECE05480FF1313FD
-:1015370013541FFFE054072F907FD7F0E04420F0AB
-:10154700E116907FB4E04401F0E116124BE240024D
-:10155700E116907FEAE07020907FECE0F45480FF82
-:10156700C4540FFFE054072F25E024B4F582E43478
-:101577007FF5837401F0E116907FB4E04401F0E158
-:1015870016907FB4E04401F0E116907FE9E0601225
-:1015970024F860092402702912171EE116124BA0C5
-:1015A700E116124BDEA22AE433FF25E0FFA22BE46B
-:1015B700334F907F00F0E4A3F0907FB57402F0E121
-:1015C70016907FB4E04401F0E116907FE9E06037C0
-:1015D70024F6602E24047041907FEBE024DE600E39
-:1015E700047016D229907FB4E04401F0E116D229A5
-:1015F700907FB4E04401F0E116907FB4E04401F03D
-:10160700E116124463E116124BDEE4907F00F0A36B
-:10161700F0907FB57402F0E116202907907FB4E0BF
-:101627004401F0C229E116907FE9E024F4603424F4
-:101637000C7039124BDE907FECE0F45480FFC454F9
-:101647000FFFE054072F25E024B4F582E4347FF53B
-:1016570083E054FD907F00F0E4A3F0907FB574021F
-:10166700F0E116907FB4E04401F0E116907FB4E01A
-:101677004401F0E116907FE9E024F6601214601A45
-:101687002402701DD228907FB4E04401F08012D26A
-:1016970028907FB4E04401F08007907FB4E04401D4
-:1016A700F020280F9079857401F012496F907FC55B
-:1016B7007402F0C22880589079867401F012496F3D
-:1016C700907FC57402F08047907FE9E024FE6012A6
-:1016D70014601A2402701DD228907FB4E04401F0F0
-:1016E7008012D228907FB4E04401F08007907FB445
-:1016F700E04401F0202803121A7BC2288011122C23
-:101707002B800C124BE45007907FB4E04401F0901B
-:071717007FB4E04402F02260
-:10171E00124BDC4002E1E3907FEBE024FE601E14EE
-:10172E00604614606E147002E1D424046002E1DCA1
-:10173E007405907FD4F07400907FD5F022907FEAEC
-:10174E00E0FF123FA28B338A348935EA496011CE0D
-:10175E00EACEEE907FD4F0CFE9CFEF907FD5F02296
-:10176E00907FB4E04401F022907FEAE0FF1248003F
-:10177E008B338A348935EA496011CEEACEEE907FFA
-:10178E00D4F0CFE9CFEF907FD5F022907FB4E04434
-:10179E0001F022907FEAE0FF907EC0E0FDA3E0FB27
-:1017AE001244D28B338A348935EA496011CEEACE9F
-:1017BE00EE907FD4F0CFE9CFEF907FD5F022907FDF
-:1017CE00B4E04401F022907FB4E04401F022907F17
-:0517DE00B4E04401F03D
-:0117E30022E3
-:1017E400C0E0C083C082907FC4E4F05391EF907F47
-:0B17F400AB7404F0D082D083D0E03250
-:0117FF0022C7
-:10180000E4907815F07B0190781204F0A37478F0DE
-:10181000A37458F0907812E0FBA3E0FAA3E0F990EB
-:101820000001120C5DFF90799AE06F6018907815B6
-:10183000E0C39406500FE004F0907813E475F00FC5
-:10184000120CF480CF907815E0B40608907FB4E0D5
-:101850004401F022907812E0FBA3E0FAA3E0F91231
-:101860000C44FF24BF7002417A24E07002414C24F2
-:101870002160024173907997E024FE7002219A144E
-:10188000700221EF24026002414490792DE0A3F020
-:10189000907923E0FFE4FCFDFEFBFA7901F8120DDC
-:1018A00042C8ECC8C9EDC9CAEECACBEFCB907922C9
-:1018B000E0FEE4FCFD2BFBEA3EFAED39F9EC38F8EA
-:1018C000907921E0FFE4FEEB2FFFEE3AFEED39FDCB
-:1018D000EC38FC907812E0FBA3E0FAA3E0F990006A
-:1018E00002120DD2900002120DA27B447AAC790054
-:1018F0007800C3120D91700590792D04F090781244
-:10190000E0FBA3E0FAA3E0F9900002120DA27B80B5
-:101910007ABB79007800C3120D91700690792D740E
-:1019200002F0907812E0FBA3E0FAA3E0F990000245
-:10193000120DA27B007A7779017800C3120D9170A5
-:101940000690792D7403F090792DE0FFB4010975AC
-:101950000C67750D06750E0BEFB40208E4F50CF577
-:101960000D750E0CEFB40308E4F50CF50D750E18AB
-:10197000EFB4030D90792EE064036005D22F123D81
-:101980007990792DE06403600AA3E0B40305C22FC7
-:10199000123D7912100012280122907923E0FFE411
-:1019A000FCFDFEFBFA7901F8120D42C8ECC8C9ED46
-:1019B000C9CAEECACBEFCB907922E0FEE4FCFD2B46
-:1019C000FBEA3EFAED39F9EC38F8907921E0FFE4D2
-:1019D000FEEB2FFFEE3AFEED39FDEC38FC9078126D
-:1019E000E0FBA3E0FAA3E0F9900006120DD22290EA
-:1019F0007923E0FFE4FCFDFEFBFA7901F8120D42C9
-:101A0000C8ECC8C9EDC9CAEECACBEFCB907922E0C9
-:101A1000FEE4FCFD2BFBEA3EFAED39F9EC38F890D8
-:101A20007921E0FFE4FEEB2FFFEE3AFEED39FDEC0D
-:101A300038FC907812E0FBA3E0FAA3E0F990000AEA
-:101A4000120DD222907FB4E04401F022907997E009
-:101A5000147018907921E0FF907812E0FBA3E0FA6F
-:101A6000A3E0F990000EEF120C9C22907FB4E044AA
-:0A1A700001F022907FB4E04401F081
-:011A7A002249
-:101A7B00E4FFFE7B0190780F04F0A37478F0A3745D
-:101A8B002BF090780FE0FBA3E0FAA3E0F9900002B3
-:101A9B00120C5DFD907FECE06D6013EFC39405506D
-:101AAB000D0F907810E475F003120CF480D48D3385
-:101ABB0090780FE0FBA3E0FAA3E0F9900001120C81
-:101ACB005DFD907FEDE06D6013EEC3940B500D0E3A
-:101ADB00907810E475F003120CF480D4907FEDE055
-:101AEB00F534EF64056003BE0B08907FB4E044014E
-:101AFB00F02290780FE0FBA3E0FAA3E0F9120C447C
-:101B0B00FF24F06008240F700E12492A22124B8317
-:0E1B1B00907920E534F022907FB4E04401F090
-:011B29002299
-:0F1B2A00907FEAE0B4FF04123416221238002232
-:071B39005398FE5398FD32A2
-:101B40000000000000000000000000000000000095
-:101B50000000000000000000000000000000000085
-:101B60000000000000000000000000000000000075
-:101B70000000000000000000000000000000000065
-:101B80000000000000000000000000000000000055
-:101B90000000000000000000000000000000000045
-:101BA0000000000000000000000000000000000035
-:101BB0000000000000000000000000000000000025
-:101BC0000000000000000000000000000000000015
-:101BD0000000000000000000000000000000000005
-:101BE00000000000000000000000000000000000F5
-:101BF00000000000000000000000000000000000E5
-:101C000000000000000000000000000000000000D4
-:101C100000000000000000000000000000000000C4
-:101C200000000000000000000000000000000000B4
-:101C300000000000000000000000000000000000A4
-:101C40000000000000000000000000000000000094
-:101C50000000000000000000000000000000000084
-:101C60000000000000000000000000000000000074
-:101C70000000000000000000000000000000000064
-:101C80000000000000000000000000000000000054
-:101C90000000000000000000000000000000000044
-:101CA0000000000000000000000000000000000034
-:101CB0000000000000000000000000000000000024
-:101CC0000000000000000000000000000000000014
-:101CD0000000000000000000000000000000000004
-:101CE00000000000000000000000000000000000F4
-:101CF00000000000000000000000000000000000E4
-:101D000000000000000000000000000000000000D3
-:101D100000000000000000000000000000000000C3
-:101D200000000000000000000000000000000000B3
-:101D300000000000000000000000000000000000A3
-:101D40000000000000000000000000000000000093
-:101D50000000000000000000000000000000000083
-:101D60000000000000000000000000000000000073
-:101D70000000000000000000000000000000000063
-:101D80000000000000000000000000000000000053
-:101D90000000000000000000000000000000000043
-:101DA0000000000000000000000000000000000033
-:101DB0000000000000000000000000000000000023
-:101DC0000000000000000000000000000000000013
-:101DD0000000000000000000000000000000000003
-:101DE00000000000000000000000000000000000F3
-:101DF00000000000000000000000000000000000E3
-:101E000000000000000000000000000000000000D2
-:101E100000000000000000000000000000000000C2
-:101E200000000000000000000000000000000000B2
-:101E300000000000000000000000000000000000A2
-:101E40000000000000000000000000000000000092
-:101E50000000000000000000000000000000000082
-:101E60000000000000000000000000000000000072
-:101E70000000000000000000000000000000000062
-:101E80000000000000000000000000000000000052
-:101E90000000000000000000000000000000000042
-:101EA0000000000000000000000000000000000032
-:0E1EB000000000000000000000000000000024
-:101EBE000000000000000000000000000000000014
-:101ECE000000000000000000000000000000000004
-:101EDE0000000000000000000000000000000000F4
-:101EEE0000000000000000000000000000000000E4
-:101EFE0000000000000000000000000000000000D4
-:101F0E0000000000000000000000000000000000C3
-:101F1E0000000000000000000000000000000000B3
-:101F2E0000000000000000000000000000000000A3
-:021F3E000000A1
-:101F40000000000000000000000000000000000091
-:101F50000000000000000000000000000000000081
-:101F60000000000000000000000000000000000071
-:101F70000000000000000000000000000000000061
-:101F80000000000000000000000000000000000051
-:101F90000000000000000000000000000000000041
-:101FA0000000000000000000000000000000000031
-:101FB0000000000000000000000000000000000021
-:101FC0000000000000000000000000000000000011
-:101FD0000000000000000000000000000000000001
-:101FE00000000000000000000000000000000000F1
-:101FF00000000000000000000000000000000000E1
-:1020000000000000000000000000000000000000D0
-:1020100000000000000000000000000000000000C0
-:1020200000000000000000000000000000000000B0
-:1020300000000000000000000000000000000000A0
-:102040000000000000000000000000000000000090
-:102050000000000000000000000000000000000080
-:102060000000000000000000000000000000000070
-:102070000000000000000000000000000000000060
-:102080000000000000000000000000000000000050
-:102090000000000000000000000000000000000040
-:1020A0000000000000000000000000000000000030
-:1020B0000000000000000000000000000000000020
-:1020C0000000000000000000000000000000000010
-:1020D0000000000000000000000000000000000000
-:1020E00000000000000000000000000000000000F0
-:1020F00000000000000000000000000000000000E0
-:1021000000000000000000000000000000000000CF
-:1021100000000000000000000000000000000000BF
-:1021200000000000000000000000000000000000AF
-:10213000000000000000000000000000000000009F
-:10214000000000000000000000000000000000008F
-:10215000000000000000000000000000000000007F
-:10216000000000000000000000000000000000006F
-:10217000000000000000000000000000000000005F
-:10218000000000000000000000000000000000004F
-:10219000000000000000000000000000000000003F
-:1021A000000000000000000000000000000000002F
-:1021B000000000000000000000000000000000001F
-:1021C000000000000000000000000000000000000F
-:1021D00000000000000000000000000000000000FF
-:1021E00000000000000000000000000000000000EF
-:1021F00000000000000000000000000000000000DF
-:1022000000000000000000000000000000000000CE
-:1022100000000000000000000000000000000000BE
-:1022200000000000000000000000000000000000AE
-:10223000000000000000000000000000000000009E
-:10224000000000000000000000000000000000008E
-:10225000000000000000000000000000000000007E
-:10226000000000000000000000000000000000006E
-:10227000000000000000000000000000000000005E
-:10228000000000000000000000000000000000004E
-:10229000000000000000000000000000000000003E
-:1022A000000000000000000000000000000000002E
-:1022B000000000000000000000000000000000001E
-:1022C000000000000000000000000000000000000E
-:1022D00000000000000000000000000000000000FE
-:1022E00000000000000000000000000000000000EE
-:1022F00000000000000000000000000000000000DE
-:1023000000000000000000000000000000000000CD
-:1023100000000000000000000000000000000000BD
-:1023200000000000000000000000000000000000AD
-:10233000000000000000000000000000000000009D
-:10234000000000000000000000000000000000008D
-:10235000000000000000000000000000000000007D
-:10236000000000000000000000000000000000006D
-:0E23700000000000000000000000000000005F
-:10237E00000000000000000000000000000000004F
-:10238E00000000000000000000000000000000003F
-:10239E00000000000000000000000000000000002F
-:1023AE00000000000000000000000000000000001F
-:1023BE00000000000000000000000000000000000F
-:1023CE0000000000000000000000000000000000FF
-:1023DE0000000000000000000000000000000000EF
-:1023EE0000000000000000000000000000000000DF
-:1023FE0000000000000000000000000000000000CF
-:10240E0000000000000000000000000000000000BE
-:10241E0000000000000000000000000000000000AE
-:10242E00000000000000000000000000000000009E
-:10243E00000000000000000000000000000000008E
-:10244E00000000000000000000000000000000007E
-:10245E00000000000000000000000000000000006E
-:10246E00000000000000000000000000000000005E
-:10247E00000000000000000000000000000000004E
-:10248E00000000000000000000000000000000003E
-:10249E00000000000000000000000000000000002E
-:1024AE00000000000000000000000000000000001E
-:1024BE00000000000000000000000000000000000E
-:1024CE0000000000000000000000000000000000FE
-:1024DE0000000000000000000000000000000000EE
-:1024EE0000000000000000000000000000000000DE
-:1024FE0000000000000000000000000000000000CE
-:10250E0000000000000000000000000000000000BD
-:10251E0000000000000000000000000000000000AD
-:10252E00000000000000000000000000000000009D
-:10253E00000000000000000000000000000000008D
-:10254E00000000000000000000000000000000007D
-:10255E00000000000000000000000000000000006D
-:10256E00000000000000000000000000000000005D
-:10257E00000000000000000000000000000000004D
-:10258E00000000000000000000000000000000003D
-:10259E00000000000000000000000000000000002D
-:1025AE00000000000000000000000000000000001D
-:1025BE00000000000000000000000000000000000D
-:1025CE0000000000000000000000000000000000FD
-:1025DE0000000000000000000000000000000000ED
-:1025EE0000000000000000000000000000000000DD
-:1025FE0000000000000000000000000000000000CD
-:10260E0000000000000000000000000000000000BC
-:10261E0000000000000000000000000000000000AC
-:10262E00000000000000000000000000000000009C
-:10263E00000000000000000000000000000000008C
-:10264E00000000000000000000000000000000007C
-:10265E00000000000000000000000000000000006C
-:10266E00000000000000000000000000000000005C
-:10267E00000000000000000000000000000000004C
-:10268E00000000000000000000000000000000003C
-:10269E00000000000000000000000000000000002C
-:1026AE00000000000000000000000000000000001C
-:1026BE00000000000000000000000000000000000C
-:1026CE0000000000000000000000000000000000FC
-:1026DE0000000000000000000000000000000000EC
-:0E26EE000000000000000000000000000000DE
-:1026FC0000000000000000000000000000000000CE
-:10270C0000000000000000000000000000000000BD
-:10271C0000000000000000000000000000000000AD
-:10272C00000000000000000000000000000000009D
-:10273C00000000000000000000000000000000008D
-:10274C00000000000000000000000000000000007D
-:10275C00000000000000000000000000000000006D
-:10276C00000000000000000000000000000000005D
-:10277C00000000000000000000000000000000004D
-:10278C00000000000000000000000000000000003D
-:10279C00000000000000000000000000000000002D
-:1027AC00000000000000000000000000000000001D
-:1027BC00000000000000000000000000000000000D
-:1027CC0000000000000000000000000000000000FD
-:1027DC0000000000000000000000000000000000ED
-:1027EC0000000000000000000000000000000000DD
-:0527FC000000000022B6
-:10280100907964E0146046147002413C2402600235
-:10281100812A907FFC74CCF0907FFF74FCF090795A
-:10282100787401F090797CE0907979F054FDF0446E
-:1028310001F090797CF0A2AFE433F512C2AF120B34
-:10284100A2E5126002D2AFE490797AF02290792D5C
-:10285100E06401600201F1907FFC74CCF0907FFF95
-:1028610074FCF09079787401F090797CE09079793A
-:10287100F04401F04402F090797EE0B401099079CE
-:1028810079E04404F08007907979E054FBF0907985
-:1028910079E090797CF0A2AFE433F512C2AF120B6C
-:1028A100A29079787402F0907984E0907979F0902F
-:1028B100797FE0B40109907979E054FEF0800790C6
-:1028C1007979E04401F0907979E054FDF054FBF01E
-:1028D100907984F0120BA290797A7401F090796565
-:1028E100F0E5126002D2AFE490798CF090798BF030
-:1028F10090792DE0640260022196907FFC74C8F00B
-:10290100907FFF74FCF09079787401F090797CE00D
-:10291100907979F04401F04402F090797EE0B401BD
-:1029210009907979E04404F08007907979E054FBCB
-:10293100F0907979E090797CF0A2AFE433F512C29E
-:10294100AF120BA29079787402F0907984E09079BB
-:1029510079F090797FE0B40109907979E054FEF043
-:102961008007907979E04401F0907979E04402F0B0
-:1029710054FBF0907984F0120BA290797A7401F0F3
-:102981009079657403F0E5126002D2AFE490798C1E
-:10299100F090798BF090792DE064036002812A90A8
-:1029A1007FFC7498F0907FFF74FCF090797874014B
-:1029B100F090797CE0907979F04401F04402F09054
-:1029C100797EE0B40109907979E04404F0800790C0
-:1029D1007979E054FBF0907979E090797CF0A2AFBD
-:1029E100E433F512C2AF120BA29079787402F09021
-:1029F1007984E0907979F090797FE0B40109907958
-:102A010079E054FEF08007907979E04401F0907903
-:102A110079E054FDF04404F0907984F0120BA29017
-:102A2100797A7401F09079657405F0E5126002D24B
-:102A3100AFE490798CF090798BF02290792DE0645D
-:102A410001600241E0907FFC74B4F0907FFF74FC60
-:102A5100F09079787401F090797CE0907979F05474
-:102A6100FEF04402F090797EE0B40109907979E0BA
-:102A71004404F08007907979E054FBF0907979E093
-:102A810090797CF0A2AFE433F512C2AF120BA290A1
-:102A910079787402F0907984E0907979F090797F77
-:102AA100E0B40109907979E054FEF08007907979DA
-:102AB100E04401F0907979E054FDF054FBF0907915
-:102AC10084F0120BA290797A7401F090796504F088
-:102AD100E5126002D2AFE490798CF090798BF0909E
-:102AE100792DE0640260026185907FFC74B0F09002
-:102AF1007FFF74FCF09079787401F090797CE0901C
-:102B01007979F054FEF04402F090797EE0B4010945
-:102B1100907979E04404F08007907979E054FBF0F2
-:102B2100907979E090797CF0A2AFE433F512C2AFED
-:102B3100120BA29079787402F0907984E0907979FF
-:102B4100F090797FE0B40109907979E054FEF0804A
-:102B510007907979E04401F0907979E04402F054EA
-:102B6100FBF0907984F0120BA290797A7401F090C5
-:102B710079657404F0E5126002D2AFE490798CF0CB
-:102B810090798BF090792DE064036002812A907F27
-:102B9100FC7468F0907FFF74FCF09079787401F018
-:102BA10090797CE0907979F054FEF04402F09079CC
-:102BB1007EE0B40109907979E04404F080079079CE
-:102BC10079E054FBF0907979E090797CF0A2AFE460
-:102BD10033F512C2AF120BA29079787402F090799A
-:102BE10084E0907979F090797FE0B4010990797966
-:102BF100E054FEF08007907979E04401F090797912
-:102C0100E054FDF04404F0907984F0120BA2907925
-:102C11007A7401F09079657406F0E5126002D2AF22
-:0A2C2100E490798CF090798BF0229A
-:102C2B00E4FF7B0190781604F0A37478F0A374583A
-:102C3B00F0907816E0FBA3E0FAA3E0F99000011204
-:102C4B000C5DFE907FECE06E6013EFC39406500DAD
-:102C5B000F907817E475F00F120CF480D4BF0608B0
-:102C6B00907FB4E04401F022907816E0FBA3E0FAE9
-:102C7B00A3E0F9120C44FF249F7002C1662421606B
-:102C8B0002C18C907FE9E0247E7002A130147002A7
-:102C9B00A1C824026002C15E900002120DA27B4407
-:102CAB007AAC79007800C3120D917013907F007489
-:102CBB0044F0A374ACF0E4A3F0907FB57403F090F0
-:102CCB007816E0FBA3E0FAA3E0F9900002120DA244
-:102CDB007B807ABB79007800C3120D917013907FC3
-:102CEB00007480F0A374BBF0E4A3F0907FB5740381
-:102CFB00F0907816E0FBA3E0FAA3E0F99000021243
-:102D0B000DA27B007A7779017800C3120D916002D6
-:102D1B00C193907F00F0A37477F0A37401F0907FC0
-:102D2B00B57403F022907816E0FBA3E0FAA3E0F968
-:102D3B00900006120DA27B447AAC79007800C31286
-:102D4B000D917013907F007444F0A374ACF0E4A366
-:102D5B00F0907FB57403F0907816E0FBA3E0FAA334
-:102D6B00E0F9900006120DA27B807ABB7900780007
-:102D7B00C3120D917013907F007480F0A374BBF09D
-:102D8B00E4A3F0907FB57403F0907816E0FBA3E01A
-:102D9B00FAA3E0F9900006120DA27B007A77790175
-:102DAB007800C3120D916002C193907F00F0A37461
-:102DBB0077F0A37401F0907FB57403F0229078162E
-:102DCB00E0FBA3E0FAA3E0F990000A120DA27B440A
-:102DDB007AAC79007800C3120D917013907F007458
-:102DEB0044F0A374ACF0E4A3F0907FB57403F090BF
-:102DFB007816E0FBA3E0FAA3E0F990000A120DA20B
-:102E0B007B807ABB79007800C3120D917013907F91
-:102E1B00007480F0A374BBF0E4A3F0907FB574034F
-:102E2B00F0907816E0FBA3E0FAA3E0F990000A1209
-:102E3B000DA27B007A7779017800C3120D9170484F
-:102E4B00907F00F0A37477F0A37401F0907FB574BA
-:102E5B0003F022907FB4E04401F022907FE9E0245C
-:102E6B007F7016907816E0FBA3E0FAA3E0F99000D0
-:102E7B000E120C5D907F00F022907FB4E04401F0C5
-:082E8B0022907FB4E04401F045
-:012E9300221C
-:102E9400753625753724907974E064017054F0F523
-:102EA40035752201E52264017048907FA5E04480D5
-:102EB400F0907FA6E536F01246C0744F2535F582B2
-:102EC400E43479F583E0907FA6F01246C07435258A
-:102ED40035F582E43479F583E0907FA6F01246C09C
-:102EE400907FA57440F0120ACD0535E535C3940DE5
-:102EF40040B2907975E064016002E1DEF0907920DF
-:102F0400E064056002E18D7B0190795C04F0A374B8
-:102F140078F0A374B2F075330790795CE0FBA3E01A
-:102F2400FAA3E0F9900001120C5D700F90000412F6
-:102F34000C5D90792FF0120C29800690792F74FF84
-:102F4400F0E4F535752201753402E5226401703927
-:102F5400907FA5E04480F0907FA6E536F01246C04D
-:102F6400AF340534907FA6EFF01246C090792FE07D
-:102F7400907FA6F01246C0907FA57440F0120ACD4F
-:102F84000535E535C3940640C1907920E0640670A8
-:102F9400497B0190795F04F0A37478F0A374FFF087
-:102FA40075330390795FE0FBA3E0FAA3E0F99000A6
-:102FB40001120C5D701C900004120C5D907933F0CA
-:102FC400700374FFF0907933E0547FFFF025E0F054
-:0A2FD4008005E4907933F01247DF26
-:012FDE0022D0
-:102FDF009079787403F0907983E0907979F0A2AFCB
-:102FEF00E433F512C2AF120BA2E5126002D2AF2288
-:012FFF0022AF
-:10300000E4FE907920E0FDB405119078257401F07C
-:10301000A37478F0A374B2F0753507EDB40611907F
-:1030200078257401F0A37478F0A374FFF07535036C
-:10303000907FEBE014601114605B24026002410594
-:10304000907FB4E04401F022907FE9E0247F703D5E
-:10305000E4FFEFC39535502F907825E0FBA3E0FA0D
-:10306000A3E0F9900001120C5DFDCCEECC0E7400D3
-:103070002CF582E4347FF583EDF0907826E475F04A
-:103080000B120CF40F80CB907FB5EEF022907FB442
-:10309000E04401F022907FE9E0247E606414700235
-:1030A000215514700221A92403600221FDE4FFEFE1
-:1030B000C395355046907825E0FBA3E0FAA3E0F9EC
-:1030C000900003120C5DFDCCEECC0E74002CF5824A
-:1030D000E4347FF583EDF0900004120C5DFDCCEE3E
-:1030E000CC0E74002CF582E4347FF583EDF09078FB
-:1030F00026E475F00B120CF40F80B4907FB5EEF05F
-:1031000022E4FFEFC395355046907825E0FBA3E01D
-:10311000FAA3E0F9900005120C5DFDCCEECC0E7424
-:10312000002CF582E4347FF583EDF0900006120C5C
-:103130005DFDCCEECC0E74002CF582E4347FF5837B
-:10314000EDF0907826E475F00B120CF40F80B4903B
-:103150007FB5EEF022E4FFEFC39535504690782519
-:10316000E0FBA3E0FAA3E0F9900007120C5DFDCCB0
-:10317000EECC0E74002CF582E4347FF583EDF090F4
-:103180000008120C5DFDCCEECC0E74002CF582E430
-:10319000347FF583EDF0907826E475F00B120CF493
-:1031A0000F80B4907FB5EEF022E4FFEFC395355069
-:1031B00046907825E0FBA3E0FAA3E0F9900009121D
-:1031C0000C5DFDCCEECC0E74002CF582E4347FF562
-:1031D00083EDF090000A120C5DFDCCEECC0E740075
-:1031E0002CF582E4347FF583EDF0907826E475F0D9
-:1031F0000B120CF40F80B4907FB5EEF022907FB4E8
-:0C320000E04401F022907FB4E04401F0B3
-:01320C00229F
-:10320D007B017A78792B907800EBF0A3EAF0A3E9B3
-:10321D00F07401120C8A907800E0FBA3E0FAA3E0B1
-:10322D00F99000017401120C9C900002E4120C9CA8
-:10323D00907801E475F003120CF4907800E0FBA394
-:10324D00E0FAA3E0F97410120C8A907800E0FBA369
-:10325D00E0FAA3E0F99000017405120C9C900002B5
-:10326D00E4120C9C907801E475F003120CF4907844
-:10327D0000E0FBA3E0FAA3E0F97402120C8A907847
-:10328D0000E0FBA3E0FAA3E0F99000017402120C38
-:10329D009C900002E4120C9C907801E475F00312EE
-:1032AD000CF4907800E0FBA3E0FAA3E0F9740112AE
-:1032BD000C8A907800E0FBA3E0FAA3E0F9900001FE
-:1032CD007403120C9C900002E4120C9C907801E4A3
-:1032DD0075F003120CF4907800E0FBA3E0FAA3E084
-:1032ED00F97410120C8A907800E0FBA3E0FAA3E0C9
-:1032FD00F99000017406120C9C900002E4120C9CD3
-:10330D00907801E475F003120CF4907800E0FBA3C3
-:10331D00E0FAA3E0F97402120C8A907800E0FBA3A6
-:10332D00E0FAA3E0F99000017404120C9C900002E5
-:10333D00E4120C9C907801E475F003120CF4907873
-:10334D0000E0FBA3E0FAA3E0F97402120C8A907876
-:10335D0000E0FBA3E0FAA3E0F99000017404120C65
-:10336D009C9000027404120C9C907801E475F0039B
-:10337D00120CF4907800E0FBA3E0FAA3E0F97402DC
-:10338D00120C8A907800E0FBA3E0FAA3E0F990001C
-:10339D00017403120C9C9000027404120C9C907822
-:1033AD0001E475F003120CF4907800E0FBA3E0FA51
-:1033BD00A3E0F97402120C8A907800E0FBA3E0FA06
-:1033CD00A3E0F99000017402120C9C9000027404A9
-:1033DD00120C9C907801E475F003120CF4907800B7
-:1033ED00E0FBA3E0FAA3E0F97402120C8A907800D6
-:1033FD00E0FBA3E0FAA3E0F99000017401120C9C2C
-:08340D009000027404120C9CF3
-:013415002294
-:10341600E4FE907920E0FDB4051190781F7401F068
-:10342600A37478F0A374B2F0753507EDB406119065
-:10343600781F7401F0A37478F0A374FFF075350358
-:10344600907999E014601114605B24026002C10651
-:10345600907FB4E04401F022907997E014703EE446
-:10346600FFEFC39535502FCDEECD0E74212DF5828D
-:10347600E43479F583E0FD90781FE0FBA3E0FAA33E
-:10348600E0F9900001ED120C9C907820E475F00BA9
-:10349600120CF40F80CB9079757401F022907FB4F2
-:1034A600E04401F022907997E024FE6063147002F4
-:1034B600A164147002A1B224036002A1FEE4FFEF2E
-:1034C600C395355044CDEECD0E74212DF582E434EE
-:1034D60079F583E0FD90781FE0FBA3E0FAA3E0F91D
-:1034E600900003ED120C9CCDEECD0E74212DF582CD
-:1034F600E43479F583E0900004120C9C907820E483
-:1035060075F00B120CF40F80B69079757401F022E9
-:10351600E4FFEFC395354002C10DCDEECD0E74210B
-:103526002DF582E43479F583E0FD90781FE0FBA366
-:10353600E0FAA3E0F9900005ED120C9CCDEECD0E5D
-:1035460074212DF582E43479F583E0900006120C9F
-:103556009C907820E475F00B120CF40F80B4E4FF15
-:10356600EFC395354002C10DCDEECD0E74212DF57C
-:1035760082E43479F583E0FD90781FE0FBA3E0FA5E
-:10358600A3E0F9900007ED120C9CCDEECD0E742150
-:103596002DF582E43479F583E0900008120C9C90B6
-:1035A6007820E475F00B120CF40F80B4E4FFEFC33F
-:1035B60095355053CDEECD0E74212DF582E4347938
-:1035C600F583E0FD90781FE0FBA3E0FAA3E0F99015
-:1035D6000009ED120C9CCDEECD0E74212DF582E482
-:1035E6003479F583E090000A120C9C907820E475FB
-:1035F600F00B120CF40F80B6907FB4E04401F02279
-:07360600907FB4E04401F0E5
-:01360D00229A
-:10360E00E4FE907920E0FDB405109078287401F066
-:10361E00A37478F0A374B2F07F07EDB4061090781F
-:10362E00287401F0A37478F0A374FFF07F039078F0
-:10363E0028E0FBA3E0FAA3E0F9120C44FD907FEA28
-:10364E00E06D6012EEC39F500D907829E475F00B7B
-:10365E00120CF40E80D8907FEBE0146011146046CB
-:10366E0024026002E19A907FB4E04401F022907F40
-:10367E00E9E0247F7028EE6F7008907FB4E044017B
-:10368E00F022907828E0FBA3E0FAA3E0F990000185
-:10369E00120C5D907F00F0907FB57401F022907F48
-:1036AE00B4E04401F022907FE9E0247E6040146093
-:1036BE006F147002E16024036002E192EE6F7008F5
-:1036CE00907FB4E04401F022907828E0FBA3E0FA6A
-:1036DE00A3E0F9900003120C5D907F00F0900004BF
-:1036EE00120C5D907F01F0907FB57402F022EE6FA8
-:1036FE007008907FB4E04401F022907828E0FBA39C
-:10370E00E0FAA3E0F9900005120C5D907F00F090B6
-:10371E000006120C5D907F01F0907FB57402F022CE
-:10372E00EE6F7008907FB4E04401F022907828E0AC
-:10373E00FBA3E0FAA3E0F9900007120C5D907F0066
-:10374E00F0900008120C5D907F01F0907FB574022E
-:10375E00F022EE6F7008907FB4E04401F022907872
-:10376E0028E0FBA3E0FAA3E0F9900009120C5D90AB
-:10377E007F00F090000A120C5D907F01F0907FB5F3
-:10378E007402F022907FB4E04401F022907FB4E006
-:03379E004401F0F3
-:0137A1002205
-:1037A200C0E0C0F0C083C082C0D0E8C0E0E9C0E0A1
-:1037B200EAC0E0EBC0E0ECC0E0EDC0E0EEC0E0EF5C
-:1037C200C0E05391EF907FAB7410F0907983E05496
-:1037D200FDF0122FDFD0E0FFD0E0FED0E0FDD0E020
-:1037E200FCD0E0FBD0E0FAD0E0F9D0E0F8D0D0D0C5
-:0837F20082D083D0F0D0E03258
-:0637FA005391BFD22632FC
-:10380000E4FE907920E0FDB405109078227401F078
-:10381000A37478F0A374B2F07F07EDB4061090782B
-:10382000227401F0A37478F0A374FFF07F03907802
-:1038300022E0FBA3E0FAA3E0F9120C44FD90799892
-:10384000E06D6012EEC39F500D907823E475F00B8D
-:10385000120CF40E80D8907999E01460111460482D
-:10386000240260022185907FB4E04401F022907927
-:1038700097E014702BEE6F7009907FB4E04401F074
-:103880008017907921E0FD907822E0FBA3E0FAA375
-:10389000E0F9900001ED120C9C9079757401F02212
-:1038A000907FB4E04401F022907997E024FE6043D9
-:1038B00014606E147002214F24036002217DEE6FAC
-:1038C0007009907FB4E04401F08021907921E0FDFF
-:1038D000907822E0FBA3E0FAA3E0F9900003ED1258
-:1038E0000C9C907922E0900004120C9C90797574E5
-:1038F00001F022EE6F7008907FB4E04401F0229056
-:103900007921E0FD907822E0FBA3E0FAA3E0F990B2
-:103910000005ED120C9C907922E0900006120C9CA0
-:1039200022EE6F7008907FB4E04401F0229079217C
-:10393000E0FD907822E0FBA3E0FAA3E0F990000715
-:10394000ED120C9C907922E0900008120C9C22EE63
-:103950006F7008907FB4E04401F022907921E0FE7E
-:10396000907822E0FBA3E0FAA3E0F9900009EE12C0
-:103970000C9C907922E090000A120C9C22907FB45B
-:0C398000E04401F022907FB4E04401F02C
-:01398C002218
-:10398D00A2AFE433F512E4907983F0122FDF907F2C
-:10399D00E07490F0907FE17404F0E4907FDDF0909E
-:1039AD007FA1F0538EF875880575B82075F8014321
-:1039BD008E30F5C875CA7F75CBF843A82090797401
-:1039CD0004F0C222E4F50F907978F0A3F0907962BB
-:1039DD00F0A3F0A3F0907966F0A3F090797BF0A3BB
-:1039ED00F0907984F090797DF0907975F0A3F0A343
-:1039FD00F0C223C224C225C226C220907F9BE0F5CF
-:103A0D000A5420F50A700690797EF0800690797E32
-:103A1D007401F0907F9BE0F50A5402F50A70069050
-:103A2D00797FF0800690797F7401F0907978740237
-:103A3D00F0907984E0907979F090797FE0B4010984
-:103A4D00907979E054FEF08007907979E04401F0A7
-:103A5D00907979E0907984F0120BA29079787401C5
-:103A6D00F090797CE0907979F090797EE0B401095D
-:103A7D00907979E04404F08007907979E054FBF077
-:103A8D00907979E090797CF0120BA2E4907978F03E
-:103A9D00A304F0E4907988F0120BA2907FFC74DD02
-:103AAD00F0907FFF74FFF09079787401F0A3F0121D
-:103ABD000BA2E490797AF090798304F0122FDFE471
-:103ACD00907930F0907985F0A3F0A3F0122E9490B8
-:103ADD00792D7402F090798814F0C22FE4907968F2
-:103AED00F090798AF090796AF0A3F0751308751447
-:103AFD0008F516F515F51790798CF090798BF02265
-:103B0D007B017A787958907803EBF0A3EAF0A3E97A
-:103B1D00F07440120C8A907803E0FBA3E0FAA3E066
-:103B2D00F9900001740A120C9C900002120DF6001F
-:103B3D0000BB80900006120DF60000AC4490000A08
-:103B4D00120DF600017700907804E475F00F120C59
-:103B5D00F4907803E0FBA3E0FAA3E0F97440120CB3
-:103B6D008A907803E0FBA3E0FAA3E0F990000174DA
-:103B7D008C120C9C900002120DF60000BB80900080
-:103B8D0006120DF60000AC4490000A120DF600016D
-:103B9D007700907804E475F00F120CF4907803E040
-:103BAD00FBA3E0FAA3E0F97440120C8A907803E0CD
-:103BBD00FBA3E0FAA3E0F9900001748F120C9C9026
-:103BCD007804E475F00F120CF4907803E0FBA3E099
-:103BDD00FAA3E0F97441120C8A907803E0FBA3E09C
-:103BED00FAA3E0F99000017484120C9C907804E41F
-:103BFD0075F00F120CF4907803E0FBA3E0FAA3E04C
-:103C0D00F97461120C8A907803E0FBA3E0FAA3E04B
-:103C1D00F99000017481120C9C907804E475F00FFA
-:103C2D00120CF4907803E0FBA3E0FAA3E0F97461C1
-:103C3D00120C8A907803E0FBA3E0FAA3E0F9900060
-:063C4D00017401120C9C41
-:013C5300224E
-:103C5400C0E0C0F0C083C082C0D0E8C0E0E9C0E0EA
-:103C6400EAC0E0EBC0E0ECC0E0EDC0E0EEC0E0EFA5
-:023C7400C0E0AE
-:103C7600907FA2E0F50B907F74E0907970F0907FD2
-:103C860075E0907971F0907983E0FFFE5402FE7042
-:103C96000DEF4402F0122FDF9079747401F0E50BFA
-:103CA60020E228907970E0FEA3E07C002400F51164
-:103CB600EC3EF510907982E0FDAE10AF11120CBE0D
-:103CC600907970EFF09079897401F01248431248A8
-:103CD60076907989E064017032124108907989E41E
-:103CE600F0907F98E04440F0907F9EE04440F09052
-:103CF6007F957480F075E80112093275E80D907FA2
-:103D06009574C0F075E80DD220800575E801C220D3
-:103D160020202B90792DE0FFB40109750C67750DF5
-:103D260006750E0BEFB40209750C00750D00750EC5
-:103D36000CEFB40309750C00750D00750E1875CAE5
-:103D46006F75CBFED2CA5391EF907FAB7402F0F041
-:103D5600D0E0FFD0E0FED0E0FDD0E0FCD0E0FBD02C
-:103D6600E0FAD0E0F9D0E0F8D0D0D082D083D0F01D
-:033D7600D0E03268
-:103D790075332575342490795C7401F0A37478F057
-:103D8900A374B2F0202F02C117E4F5357522019012
-:103D9900795CE0FBA3E0FAA3E0F9900004120C5D62
-:103DA900F53675350674422535F582E43479F5839F
-:103DB900E536F00535E535B40CEBE535C3940D4032
-:103DC90002C198E52264016002C198907FA5E04490
-:103DD90080F0907FA6E533F01246C0744F2535F583
-:103DE90082E43479F583E0907FA6F01246C07442EC
-:103DF9002535F582E43479F583E0907FA6F0124603
-:103E0900C0907FA57440F0120ACD053580ACE4F569
-:103E19003575220190795CE0FBA3E0FAA3E0F99003
-:103E29000004120C5DF53675350674352535F582B5
-:103E3900E43479F583E536F00535E535B40CEBE581
-:103E490035C3940D5049E52264017043907FA5E084
-:103E59004480F0907FA6E533F01246C0744F2535B3
-:103E6900F582E43479F583E0907FA6F01246C074B8
-:103E7900352535F582E43479F583E0907FA6F01293
-:0F3E890046C0907FA57440F0120ACD053580B079
-:013E98002207
-:103E99009078097401F0A37478F0A374B2F0E4FF88
-:103EA900FE907809E0FBA3E0FAA3E0F9EF120C8A8F
-:103EB900907809E0FBA3E0FAA3E0F9900001E4128D
-:103EC9000C9C9000027415120C9C900003E4120CD7
-:103ED9009C90000474FF120C9C900005E4120C9C49
-:103EE90090000674C3120C9C900007E4120C9C907D
-:103EF9000008E4120C9C900009E4120C9C90000A42
-:103F09007401120C9C90780AE475F00B120CF40FF2
-:103F19000EBE078D9078097401F0A37478F0A3742C
-:103F2900FFF0E4FFFE907809E0FBA3E0FAA3E0F9D3
-:103F3900EF120C8A907809E0FBA3E0FAA3E0F9906C
-:103F49000001E4120C9C9000027415120C9C900064
-:103F590003E4120C9C9000047480120C9C900005E0
-:103F6900E4120C9C90000674C3120C9C900007E4A8
-:103F7900120C9C900008E4120C9C900009E4120CAD
-:103F89009C90000A7401120C9C90780AE475F00B5D
-:083F9900120CF40F0EBE038DA3
-:013FA10022FD
-:103FA200E4FE753DFF753E05753F12AB3DAA3EA985
-:103FB2003F900001120C5D6402702FCDEECD0EED2C
-:103FC2006F700122900002120D0A85F03BF53C62EF
-:103FD2003BE53B623CE53C623B29FDE53B3AC9EDF2
-:103FE200C9753DFFF53E893F80C17B007A007900AB
-:013FF20022AC
-:093FF30053D8EF43D820C22D324F
-:043FFC005391DF32CC
-:10400000907987E0B4011D907985E0B401031242F4
-:10401000AA907986E0B40103121800E4907985F043
-:10402000A3F0A3F0122E94907F9BE0F50A5402F5C2
-:104030000A700490797FF0907F9BE0F50A5402FFAC
-:10404000F50ABF020690797F7401F0907F9BE0F53E
-:104050000A5420F50A700490797EF0907F9BE0F579
-:104060000A5420FFF50ABF200690797E7401F09073
-:10407000797FE0FF907981E06F6038907978740201
-:10408000F0907984E0907979F0EFB40106E054FE85
-:10409000F08007907979E04401F0907979E09079A7
-:1040A00084F0A2AFE433F512C2AF120BA2E51260A6
-:1040B00002D2AF90797EE0FF907980E06F60389017
-:1040C00079787401F090797CE0907979F0EFB4011F
-:1040D00006E04404F08007907979E054FBF0907991
-:1040E00079E090797CF0A2AFE433F512C2AF120B05
-:1040F000A2E5126002D2AF90797FE0907981F090D2
-:08410000797EE0907980F02245
-:1041080090792DE064017035907970E0FFD3942D9B
-:10411800402B9079697401F0907968E004F0E0D35D
-:10412800940F4019E4F0EFD39431400890792D743E
-:1041380003F0800690792D7402F012100090792D0A
-:10414800E0B4022C907970E0FFC3942F5022EFD393
-:10415800942A401C9079697401F0907968E004F021
-:10416800E0D3940F400AE4F090792D04F012100087
-:1041780090792DE0B40226907970E0D39431401DF7
-:104188009079697401F0907968E004F0E0D3940FB5
-:10419800400BE4F090792D7403F012100090792D03
-:1041A800E06403703F907970E0FFC3945F503590EE
-:1041B80079697401F0907968E004F0E0D3940F40D5
-:1041C80023E4F0EFC3942F500CEFD3942A400690C9
-:1041D800792D7401F0EFD3942F400690792D740255
-:1041E800F0121000907969E07005907968F022E487
-:0541F800907969F0223E
-:1041FD007B017A78794C907806EBF0A3EAF0A3E98D
-:10420D00F0E4120C8A907806E0FBA3E0FAA3E0F943
-:10421D009000017401120C9C907807E475F0031264
-:10422D000CF4907806E0FBA3E0FAA3E0F9E4120C9D
-:10423D008A907806E0FBA3E0FAA3E0F99000017400
-:10424D0002120C9C907807E475F003120CF4907830
-:10425D0006E0FBA3E0FAA3E0F9E4120C8A907806DD
-:10426D00E0FBA3E0FAA3E0F99000017403120C9CAB
-:10427D00907807E475F003120CF4907806E0FBA338
-:10428D00E0FAA3E0F9E4120C8A907806E0FBA3E0D3
-:0C429D00FAA3E0F99000017404120C9CDC
-:0142A90022F2
-:1042AA00E4FFFE7B0190780C04F0A37478F0A37409
-:1042BA002BF090780CE0FBA3E0FAA3E0F99000025F
-:1042CA00120C5DFD90799AE06D6013EFC39405506E
-:1042DA000D0F90780DE475F003120CF480D48D3331
-:1042EA0090780CE0FBA3E0FAA3E0F9900001120C2D
-:1042FA005DFD90799BE0FC6D6013EEC3940B500D4D
-:10430A000E90780DE475F003120CF480D38C34EF20
-:10431A0064056003BE0B08907FB4E04401F022906C
-:10432A00780CE0FBA3E0FAA3E0F9120C44FF24F0B6
-:10433A006008240E700E12494D22907920E534F05F
-:0B434A00121B2A22907FB4E04401F017
-:014355002245
-:0C435600787FE4F6D8FD75813F02439D9E
-:104362000248A9E493A3F8E493A34003F68001F280
-:1043720008DFF48029E493A3F85407240CC8C3335C
-:10438200C4540F4420C8834004F456800146F6DF2B
-:10439200E4800B0102040810204080904661E47E14
-:1043A200019360BCA3FF543F30E509541FFEE49320
-:1043B200A360010ECF54C025E060A840B8E493A3E7
-:1043C200FAE493A3F8E493A3C8C582C8CAC583CA12
-:1043D200F0A3C8C582C8CAC583CADFE9DEE780BECA
-:1043E200C0E0C0F0C083C082C0D0E8C0E0E9C0E055
-:1043F200EAC0E0EBC0E0ECC0E0EDC0E0EEC0E0EF10
-:10440200C0E0C2CAC2CF90797AE0B4011F124BAEAB
-:1044120012475853A8A0907FAEE4F01207AA124B9D
-:10442200B7907FAE741FF043A805800353A8A05332
-:10443200A8FA75E80112091575E80D43A805D0E040
-:10444200FFD0E0FED0E0FDD0E0FCD0E0FBD0E0FA0F
-:10445200D0E0F9D0E0F8D0D0D082D083D0F0D0E054
-:014462003227
-:10446300907FECE0F50914601D14602A1460371482
-:10447300604424047050907962E0907F00F0907F54
-:10448300B57401F08047907963E0907F00F0907FEE
-:10449300B57401F08037907964E0907F00F0907FED
-:1044A300B57401F08027907966E0907F00F0907FEB
-:1044B300B57401F08017907967E0907F00F0907FEA
-:0F44C300B57401F08007907FB4E04401F0D3227C
-:0444D2008D368B3761
-:1044D600123FA2EA496057120C447E0029FFEE3AC9
-:1044E600C9EFC97538FFF539893AAB38AA39A93AFF
-:1044F600900001120C5DFF64046005EF6405702EE8
-:10450600EFB40415900002120C5D6536700B900036
-:1045160003120C5D6537700122120C447E0029FFE0
-:10452600EE3AC9EFC97538FFF539893A80BC7B0088
-:044536007A0079008E
-:01453A00225E
-:10453B00E4FF7B0190781C04F0A37478F0A3744C17
-:10454B00F090781CE0FBA3E0FAA3E0F990000212D4
-:10455B000C5DFE907FECE06E6013EFC39404500D86
-:10456B0090781DE475F003120CF40F80D4BF04098E
-:10457B00907FB4E04401F08014907921E0FF9078B3
-:10458B001CE0FBA3E0FAA3E0F9EF120C8A907FC5C5
-:03459B007401F0B8
-:01459E0022FA
-:0E459F00C0E0C083C082C0D0EEC0E0EFC0E03C
-:1045AD00907985E064016005A3E0B4012D907987D1
-:1045BD007401F0E4FF907FC5E0FEEFC39E501B74C5
-:1045CD00C02FF582E4347EF583E0FE74212FF58251
-:1045DD00E43479F583EEF00F80DB5391EF907FAAF1
-:0445ED00E04401F0B5
-:0F45F100D0E0FFD0E0FED0D0D082D083D0E03237
-:10460000E4FF7B0190781904F0A37478F0A3744C54
-:10461000F0907819E0FBA3E0FAA3E0F99000021211
-:104620000C5DFE907FECE06E6013EFC39404500DC0
-:1046300090781AE475F003120CF40F80D4BF0408CC
-:10464000907FB4E04401F022907819E0FBA3E0FAF7
-:10465000A3E0F9120C44907F00F0907FB57401F054
-:014660002237
-:1046610001180201190A011C00C128C129011F01F9
-:0F46710044799F000000004179A3004179A40023
-:0446800041798900F3
-:10468400012201417931FF417934004D79353F3FB1
-:1046940000080001000000000000154D79423F3F72
-:1046A40006080407000000000000154D794F0A0AAF
-:0B46B4000900010902030405060708C5
-:0146BF0000FA
-:1046C000120ACD907FA5E0F521E5215401F5216482
-:1046D000016028E52264017022907FA5E0F5215455
-:1046E00002F5217003752201907FA5E0F5215404A5
-:0C46F000FFF521BF04D375220180CE220B
-:0446FC0053D8F73266
-:104700000249FA00023C54000217E400024A120077
-:104710000237A2000247FF00024A410002459F0003
-:1047200002498E000249AB00024A5800024A6F005B
-:10473000024A8600024A9D00024AB400024ACB00A7
-:10474000024AE200024AF900024B1000024B270025
-:08475000024B3E00024B550034
-:10475800E518701490798CE004F090798BE0C3949C
-:10476800004015E014F0801090798BE004F0A3E08D
-:10477800C394004003E014F090798BE0D394144084
-:1047880004E4F518F090798CE0D39414400575187A
-:0447980001E4F02226
-:10479C00907FD7E0F533907FECE0F50914601114AD
-:1047AC00601B24027024907FEAE0907962F08021F3
-:1047BC00907FEAE0907963F01210008014907FEA09
-:1047CC00E0907964F01228018007907FB4E04401F6
-:0247DC00F0D318
-:0147DE0022B8
-:1047DF009079787404F0907933E0907979F0A2AF02
-:1047EF00E433F512C2AF120BA2E5126002D2AF2270
-:0147FF003287
-:024800008F36F1
-:10480200E4F5377538FF753907753A01AB38AA39BF
-:10481200A93A900001120C5DB4031FAF370537EFC0
-:104822006536700122120C447E0029FFEE3AC9EF70
-:10483200C97538FFF539893A80D27B007A00790050
-:014842002253
-:1048430030262FC22690792DE0FFB40109E4F50C40
-:10485300750DF8750E0AEFB40209E4F50C750DF049
-:10486300750E0BEFB40309E4F50C750DF8750E170F
-:03487300D222222C
-:1048760030252FC22590792DE0FFB40109750CC0B3
-:10488600750D14750E0BEFB40209E4F50C750D10D9
-:10489600750E0CEFB40309E4F50C750D18750E18BA
-:0348A600D22222F9
-:1048A900E4F532120F50202E10E532C3940250095C
-:1048B9000532D23012490580ED302E05121457C247
-:0F48C9002E302D0612079A1248D912400080EAAD
-:0148D80022BD
-:1048D900907FD6E0F51D5480F51D6480701DC2AF30
-:1048E900E04480F0E04401F07F0C7E00124B6C90B4
-:0C48F9007FD6E054FEF05387FED2AF22C1
-:10490500907FD6E054FBF0E04408F0303004E044FA
-:1049150002F07FDC7E05124B6C907FD6E054F7F0F9
-:05492500E04404F02253
-:10492A00907FEBE0147014907FE9E0247F7004120A
-:10493A00460022907FB4E04401F022907FB4E04424
-:03494A0001F02257
-:10494D00907FEBE0147013907FE9E0147004124532
-:10495D003B22907FB4E04401F022907FB4E044010B
-:02496D00F02236
-:10496F00E4FF74E82FF582E4347FF583E0FE74965C
-:0E497F002FF582E43479F583EEF00FBF08E4E3
-:01498D002207
-:10498E00C0E0C083C0825391EF907FA9E04402F053
-:0D499E00907FB77403F0D082D083D0E03258
-:1049AB00C0E0C083C0825391EF907FAAE04402F035
-:0D49BB00907FC77403F0D082D083D0E0322B
-:1049C800907FD6E030E712E04401F07F147E0012B9
-:0A49D8004B6C907FD6E054FEF022F5
-:1049E200E4F51A751B0190799104F0A3F0E4A3F0A9
-:0849F200A3740AF0E4A3F02213
-:1049FA00C0E0C083C082D22E5391EF907FAB740186
-:084A0A00F0D082D083D0E0322D
-:104A1200C0E0C083C082D22D5391EF907FAB740867
-:084A2200F0D082D083D0E03215
-:104A2A00907FEAE0F508E4907962F0A3F0A3F090B1
-:074A3A007966F0A3F0D3221E
-:104A4100C0E0C083C0825391EF907FA9E04401F0A0
-:074A5100D082D083D0E032D7
-:104A5800C0E0C083C0825391EF907FA9E04404F086
-:074A6800D082D083D0E032C0
-:104A6F00C0E0C083C0825391EF907FAAE04404F06E
-:074A7F00D082D083D0E032A9
-:104A8600C0E0C083C0825391EF907FA9E04408F054
-:074A9600D082D083D0E03292
-:104A9D00C0E0C083C0825391EF907FAAE04408F03C
-:074AAD00D082D083D0E0327B
-:104AB400C0E0C083C0825391EF907FA9E04410F01E
-:074AC400D082D083D0E03264
-:104ACB00C0E0C083C0825391EF907FAAE04410F006
-:074ADB00D082D083D0E0324D
-:104AE200C0E0C083C0825391EF907FA9E04420F0E0
-:074AF200D082D083D0E03236
-:104AF900C0E0C083C0825391EF907FAAE04420F0C8
-:074B0900D082D083D0E0321E
-:104B1000C0E0C083C0825391EF907FA9E04440F091
-:074B2000D082D083D0E03207
-:104B2700C0E0C083C0825391EF907FAAE04440F079
-:074B3700D082D083D0E032F0
-:104B3E00C0E0C083C0825391EF907FA9E04480F023
-:074B4E00D082D083D0E032D9
-:104B5500C0E0C083C0825391EF907FAAE04480F00B
-:074B6500D082D083D0E032C2
-:104B6C008E338F34E5341534AE33700215334E600A
-:074B7C000512078980EE22FB
-:0F4B8300907FEAE0B4FF041230002212360E22B7
-:0E4B9200C0E0C28BD224302302C223D0E03216
-:0E4BA000907F00E508F0907FB57401F0D322FD
-:094BAE00302405C224751801220F
-:094BB700302305C223E4F51822A5
-:074BC00053C0FE53C0FD329B
-:064BC70053917FD225325C
-:054BCD00C289D2233271
-:034BD200C28D325F
-:034BD500C28F325A
-:024BD800D322E6
-:024BDA00D322E4
-:024BDC00D322E2
-:024BDE00D322E0
-:024BE000D322DE
-:024BE200D322DC
-:024BE400C322EA
-:014BE60022AC
-:00000001FF
-/*
- * This firmware is for the Emagic EMI 2|6 Audio Interface
- *
- * The firmware contained herein is Copyright (c) 1999-2002 Emagic
- * as an unpublished work. This notice does not imply unrestricted
- * or public access to this firmware which is a trade secret of Emagic,
- * and which may not be reproduced, used, sold or transferred to
- * any third party without Emagic's written consent. All Rights Reserved.
- *
- * This firmware may not be modified and may only be used with the
- * Emagic EMI 2|6 Audio Interface. Distribution and/or Modification of
- * any driver which includes this firmware, in whole or in part,
- * requires the inclusion of this statement.
- */
-/*
-VERSION=1.0.2.916
-DATE=12.02.2002
-*/
diff --git a/firmware/emi26/loader.HEX b/firmware/emi26/loader.HEX
deleted file mode 100644
index 77c439f6565b..000000000000
--- a/firmware/emi26/loader.HEX
+++ /dev/null
@@ -1,116 +0,0 @@
-:0300000002031CDC
-:03004300020400B4
-:10010000907FE9E0245B6060240260030201BE90FE
-:100110007FEAE0750A00F50BA3E0FEE4EE420A90E8
-:100120007FEEE0751500F516A3E0FEE4EE4215E55E
-:1001300016451570030201BEE4907FC5F0907FB4B0
-:10014000E020E3F9907FC5E0F50C120277AF0C7E5A
-:1001500000EF250BF50BEE350AF50AC3E5169FF502
-:1001600016E5159EF51580C7907FEAE0750A00F543
-:100170000BA3E0FEE4EE420A907FEEE0751500F579
-:1001800016A3E0FEE4EE4215E51645156030E49056
-:100190007FC5F0907FB4E020E3F9907FC5E0F50CD7
-:1001A00012028FAF0C7E00EF250BF50BEE350AF532
-:0F01B0000AC3E5169FF516E5159EF51580CAC31F
-:0101BF00221D
-:1001C000C220D2E843D820907FAB74FFF0907FA983
-:1001D000F0907FAAF05391EF907F95E044C0F090AB
-:1001E0007F98E044C0F0907F9EE044C0F0E4907FB0
-:1001F00094F0907F9DE0440FF0907F97E054F0F0F2
-:10020000907FAFE04401F0907FAEE0440DF0D2AFBC
-:10021000907F97E054F0F020204275140075130091
-:100220007512007511007F487E927D007C00AB1432
-:10023000AA13A912A811C312049A50DB2020D87A5D
-:100240000079007800E5142401F514EA3513F5135C
-:10025000E93512F512E83511F51180CA3020FD128A
-:1002600001005007907FB4E04401F0907FB4E04477
-:0602700002F0C22080E64E
-:010276002265
-:10027700E50CFFE50BF582E50AF58375927E74C000
-:08028700F8E208F0A3DFFA22FF
-:10028F00907F96858392A8827902900000E0B40057
-:10029F00377401F0907F93E054FCF0907F96E05418
-:1002AF00FCF0907F9CE04403F0907F94E0547FF04B
-:1002BF00907F97E04480F0907F9DE04480F0907FA6
-:1002CF0097E0547FF04480F0E50CFF907EC0E0F59E
-:1002DF0028E4A24733F269F2E4A24633F269F2E46A
-:1002EF00A24533F269F2E4A24433F269F2E4A24385
-:1002FF0033F269F2E4A24233F269F2E4A24133F23B
-:0D030F0069F2E4A24033F269F2A3DFC222DA
-:0C031C00787FE4F6D8FD758129020363A8
-:100328000201C0E493A3F8E493A34003F68001F22A
-:1003380008DFF48029E493A3F85407240CC8C333D6
-:10034800C4540F4420C8834004F456800146F6DFA5
-:10035800E4800B0102040810204080900484E47EAD
-:10036800019360BCA3FF543F30E509541FFEE4939A
-:10037800A360010ECF54C025E060A840B8E493A361
-:10038800FAE493A3F8E493A3C8C582C8CAC583CA8C
-:10039800F0A3C8C582C8CAC583CADFE9DEE780BE44
-:1003A800C0E0C083C082907FC4E4F05391EF907F97
-:0B03B800AB7404F0D082D083D0E032A0
-:1003C300C0E0C083C082D2205391EF907FAB740111
-:0803D300F0D082D083D0E032AB
-:1003DB00C0E0C083C0825391EF907FAB7402F0D02A
-:0603EB0082D083D0E03255
-:0103F10032D9
-:0103F20032D8
-:0103F30032D7
-:0103F40032D6
-:0103F50032D5
-:0103F60032D4
-:0103F70032D3
-:0103F80032D2
-:0103F90032D1
-:0103FA0032D0
-:0103FB0032CF
-:0103FC0032CE
-:0103FD0032CD
-:0103FE0032CC
-:0103FF0032CB
-:100400000203C3000203DB000203A80002046E0023
-:10041000020458000203F1000203F2000203F30099
-:100420000203F4000203F5000203F6000203F700E2
-:100430000203F8000203F9000203FA000203FB00C2
-:100440000203FC000203FD000203FE000203FF00A2
-:080450000204AB000204AC0041
-:10045800C0E0C083C0825391EF907FAB7410F0D09E
-:0604680082D083D0E032D7
-:10046E00C0E0C083C0825391EF907FAB7408F0D090
-:06047E0082D083D0E032C1
-:10048400020A000F010C11040D00000000410000DD
-:010494000067
-:04049500021700004A
-:010499000062
-:10049A00EB9FF5F0EA9E42F0E99D42F0E89C45F0B8
-:0104AA00222F
-:0104AB00321E
-:0104AC00321D
-:1011000012011001000000406A0801010001010203
-:10111000000109022000010103A0000904000002EF
-:10112000FF0000040705820240000007050202409C
-:10113000000004030904260341006E0063006800F8
-:101140006F007200200043006800690070007300A7
-:101150002C00200049006E0063002E00280346008A
-:10116000690072006D007700610072006500200068
-:101170004600720061006D00650057006F0072004C
-:101180006B0073002A0343006F006E006600690065
-:101190006700750072006100740069006F006E00E6
-:1011A000200053007400720069006E006700220383
-:1011B00049006E0074006500720066006100630003
-:1011C0006500200053007400720069006E00670023
-:0211D00000001D
-:00000001FF
-/*
- * This firmware is for the Emagic EMI 2|6 Audio Interface
- *
- * The firmware contained herein is Copyright (c) 1999-2002 Emagic
- * as an unpublished work. This notice does not imply unrestricted
- * or public access to this firmware which is a trade secret of Emagic,
- * and which may not be reproduced, used, sold or transferred to
- * any third party without Emagic's written consent. All Rights Reserved.
- *
- * This firmware may not be modified and may only be used with the
- * Emagic EMI 2|6 Audio Interface. Distribution and/or Modification of
- * any driver which includes this firmware, in whole or in part,
- * requires the inclusion of this statement.
- */
diff --git a/firmware/emi62/bitstream.HEX b/firmware/emi62/bitstream.HEX
deleted file mode 100644
index a0f4f570f076..000000000000
--- a/firmware/emi62/bitstream.HEX
+++ /dev/null
@@ -1,6107 +0,0 @@
-:10801000FFFFFFFFAA9955663000800100000007AE
-:10802000300160010000000D3001200100803F2D73
-:108030003000C00100000000300080010000000995
-:10804000300020010000000030008001000000012D
-:10805000300040005000581A80121000000000004C
-:108060000000000000000000000000000000000010
-:108070000000000000000000000000000000000000
-:10808000000000000000014004800000000000002B
-:1080900000121000000000000000000000000000BE
-:1080A00000000000000000000000000000000000D0
-:1080B0000000000000000000000000000000014877
-:1080C000048000000000000000020000000000002A
-:1080D00000000000000000000000000000000000A0
-:1080E0000000000000000000000000000000000090
-:1080F000000000000000000000C0000000000000C0
-:10810000000200000000000000000000000000006D
-:10811000000000000000000000000000000000005F
-:10812000000000000000000000000000000000004F
-:1081300000800000000000000012000000000000AD
-:10814000000000000000000000000000000000002F
-:10815000000000000000000000000000000000001F
-:10816000000000000000000004800000000000008B
-:10817000801200000000000000000000000000006D
-:1081800000000000000000000000000000000000EF
-:1081900000000000000000000000000000000000DF
-:1081A000009000000000000000120000000000002D
-:1081B00000000000000000000000000000000000BF
-:1081C00000000000000000000000000000000000AF
-:1081D0000000000000000008049000000000000003
-:1081E0007F100034000D00034000D0003400050073
-:1081F000074001D00074001D00074001D00074004A
-:108200001D8007E001B8006E001B8006E0013837D2
-:10821000C490000000000000C001FC80FB3036C8A4
-:108220004E0903FC84FF103BC00EC8072280FF22CA
-:1082300033C00FC8336E00FB803F200DC253D48083
-:10824000CC3A3F000CF103F0007000000000000089
-:108250008000ED60BF6023F00D82123C608F7023C0
-:10826000F0088802A540BFD063D60B88022E0CBB55
-:10827000802E20888D02E64080602E300AB11220C8
-:1082800004300000000000008805CC80A3402CC40E
-:108290004A00128C88A32220C40A904204A9A30099
-:1082A00024C88B8002CC00B3002E01090802840090
-:1082B00080202C100A3242220170000000000000D1
-:1082C000C015AC04B3002AC00808A28C008B00A221
-:1082D000C1109842A700BB0166C10B8002AC04BB71
-:1082E000002E000BB812E40289080E400AB00230DA
-:1082F00004600000000000000010AC00EB003EC075
-:108300004AB823EC18EB0032C00E2C122210EB00FE
-:1083100026C04F0043ED00FB002E240D8013E40027
-:10832000C8D07C120EB003400470000000000000B2
-:10833000E100BC00FF0035C04FE0037C08FF0117DF
-:10834000C24DC003F408F7003BC007C0037C80FFA8
-:10835000243F400CF001F404BC083F280FF00378E0
-:1083600000600000000000004010AC08FB043AC8A8
-:108370000F9403EC10F30034C00EB0036104FB0053
-:1083800036C00EA3032C80FB723E020F8A03E40268
-:10839000C9802A500FB003D0042000000000000064
-:1083A000CA443C00BF0003C00880037C00BF003FFC
-:1083B000E20890436000BF0037C00890016D00BB29
-:1083C000402C100BB042D7C089002A7C0BF002F27F
-:1083D0000040000000000000E2054C00B30020D582
-:1083E0004A00000C0493000CF00B09020801B320B2
-:1083F00028C00A0C0A0E00B3002430090002C6107F
-:10840000804220008BB002F8005000000000000005
-:1084100022011E00B79421E448D9125E40B790298A
-:10842000E08B6912D68037822CE8084A025E00B7DA
-:10843000A42D200B7902D608869029A00B7902D8AA
-:10844000004000000000000048000C00FBA028E8ED
-:108450000E2A028C00D30064C00F00430EC4F30048
-:1084600078EC0E0A430E2073E03C024F0003C44038
-:10847000C30038C00F3003D202000000000000002B
-:10848000401DBC00FF00BCCC0EB003EC20FB003C48
-:10849000C20C20036C50F30036C40F4003FC08FFED
-:1084A0001A3F800FF001E430FF023FC00FF063D0AD
-:1084B0000660000000000000A815EC40FB00B2D8E8
-:1084C0000CB0012D20DB013AC88C3803A800FB4812
-:1084D0003EC90F8003EC40FB013E000F0803A408D7
-:1084E000FA80B2800FB1026A007000000000000044
-:1084F00048191C80BF3021CA08F00A0C808F502117
-:10850000C20870509C00B70039C40B40029C04B7ED
-:108510002025400B70021480B60021800BF8021257
-:108520000460000000000000C0009E00B7B021EC15
-:108530000B7812DE8497800DE028F802DE00B790F9
-:108540002DE40B68825E80B7A029200B48029600BC
-:10855000B78021E10B7A027040200000000000008B
-:108560004804CC00B30020C00B38028C04830028E0
-:10857000C08839024C40B30428C01B10028C01B3E0
-:108580000424884B31020400B38020F20B30020235
-:108590002430000000000000E805A800FA00328046
-:1085A0000FE803E800DA013A808CED03FB04FA00DF
-:1085B0003E800F6C03FBC8BEC21F800FE503A800FE
-:1085C000FE4833804FA0037A0460000000000000E2
-:1085D0004800E000F8003C000C81936000F8013690
-:1085E000100F8003A020F8002A018F8413E100F807
-:1085F0001836000F8013E000F8203E140F8003D2DD
-:1086000080300000000000000800E400F100AA40F3
-:108610000C90032400E10038401C9003E400F9A012
-:108620003A40479A93A280F8103E400B9403E640EC
-:10863000F9C03E680B100302843000000000000007
-:108640008004E404B9002240089002240489003622
-:1086500040089002E404B9802E404F94036110E872
-:10866000402E400B9042E604B9002E400B900220B1
-:10867000001000000000000018042400B90022408F
-:108680000A10520404A9042A4008B002E401B90007
-:108690002E400B9002A80DB8402E40099402E50030
-:1086A000B9042E400B9002060040000000000000BC
-:1086B00008040480B12020C80A10420490812004DC
-:1086C000C8083026C400B1202C480B90024501B1E7
-:1086D000402C400B1282C400B12B2C4A0B12820298
-:1086E0000100000000000000B8082148F8503200E6
-:1086F0004E850B2140A8522A00088023E140F80053
-:108700003A140FA043A800F8003E000F8203E000D7
-:10871000F0203E884F820B2E035000000000000026
-:108720009819E440F91134442DD003E450791038FD
-:10873000442FD003F510F9103E45065003E500E93B
-:10874000403F400FD043F500FD283F400F9283E6A5
-:1087500006700000000000000801E600D9903769AB
-:108760004D90236780D9E037680ED007A4000586B6
-:108770003E660D50232600C9823D400DD8073602C3
-:10878000CDC033600C9C03060070000000000000A8
-:108790003810E28088A22210288A82238488A022AE
-:1087A00014488042820088402E30088002A200D8FF
-:1087B00090260008840A2100C8A0A214288C020E6A
-:1087C00004300000000000000805C52091402C4442
-:1087D0001810028504B1400C400A10068430814014
-:1087E0002C4859101A046081092E401B14022500E0
-:1087F00091E02060081602000170000000000000F7
-:108800001815A40081002A41089002A400A1002AA2
-:108810004108B08224118B002E40189102A00498C8
-:10882000202E541B90822C0089102244889002062E
-:108830000460000000000000A015E400D9003E40E4
-:108840004C9003A410F9003E408E1002A4C2C9004F
-:108850003E400D16130184C8203C600F90120400A6
-:10886000D94032500C9003288470000000000000B2
-:1088700028018400F90036404F994A44009900B419
-:10888000400F9013E600F9003C400F9003E300F81E
-:108890000136400C9903E402F9803E604F900BCA08
-:1088A00000600000000000002810A000D8003C007C
-:1088B0001D80032000E80032000C8483E010E820D3
-:1088C00032008E84032180C8003A190F0403E0248B
-:1088D000F0023C000F80138A04200000000000001A
-:1088E000280528028A010FA268A00028008A0077C4
-:1088F0008068E012E800DE00368108E0037A08AE06
-:10890000C42F8008ED02FA00BEA03B800BA0420AF3
-:10891000004000000000000028854C0093002CC09F
-:1089200088B0020C14A30420C4183802EC1093542D
-:1089300028C00A00024E00834968C0023942CE4076
-:10894000B3002CE60BB0028B0050000000000000CA
-:1089500020011C0887202C8018F2221C008710217F
-:10896000C0087082DC8096802DC00A40027D4027BE
-:10897000646DD0486042D805B60429C04B72022805
-:10898000004000000000000028083E88D7E03DE0DD
-:10899000087C423E00E38220E00C6803DF04D780BD
-:1089A0003BE04E480A5E80C7C219E00E7803D60845
-:1089B000F7803DE00FF803AA02000000000000006D
-:1089C000081DAC40FB407E800E3683ED40DB603EF0
-:1089D000800FA003ED28DA0032C40CB00BCC00FBF2
-:1089E000003EC00E8013E010F8003E000FB153C2ED
-:1089F00006600000000000004005FE00FFC033E0FC
-:108A00000CF9037F04CFD03FE40FB803FE00FF94BE
-:108A10003FE00FC8037E10F3803BE00FF803FE48F1
-:108A2000ED80332404F803300070000000000000E3
-:108A3000A8119C80BF04212808F8021EC0CF9021F5
-:108A40004C0B5A42DE00B7802CE80B04021C00B726
-:108A5000A035108F7113DEC0841021800D71022AA1
-:108A6000046000000000000080409C08B70025C89A
-:108A7000087102CC80970029C08B7206DC08B50013
-:108A80002DC80B40021C40BF1021C00B7402D480C3
-:108A9000A7402141087002040020000000000000EF
-:108AA0006014CC00B3002400083482AC1183002091
-:108AB000004B1826CF20B1062CC10B32020E08B392
-:108AC0008824320A301284088000A034283002182A
-:108AD0000430000000000000A811BC00FF00B640F8
-:108AE0002CF443FC01DF003A00039203FF88F900F5
-:108AF0002FC01B0E4B2E90FBE030320B9802EC087F
-:108B00006BC032C008F0093E0460000000000000A5
-:108B10008000EC00F3003AC00FB0016C00FB003A9B
-:108B2000100FB403EC00F0003CC00F800BAD20FB35
-:108B3000403E1007A863E000FB803ED80FB003E082
-:108B400000300000000000000110FC00FF00720077
-:108B50000FF023FC00DF003F400FC003DC008F005C
-:108B600033C10CC003BE00FF903B280E59032E00FA
-:108B70007B0032C40FB003D00430000000000000BE
-:108B8000C1046C00BB0062A00FB002EC098B002E88
-:108B9000300BA803AC00FAC122C1088C022C00B330
-:108BA000812A000D88B22200B3C022C80BB04261F6
-:108BB000401000000000000080056C00BB01226234
-:108BC0000BB002EC048B002EA2498826EC00A88092
-:108BD00022C028820AACA0BB0822C008800A2884D0
-:108BE000B9C0A2000BB002E000400000000000008D
-:108BF00008040C00B31020480A3202CC8083012400
-:108C0000000B02068C60A02020C80801020C00B3F3
-:108C10000028000920020880B100A0800B30024229
-:108C2000010000000000000000096C00FF00A20E1F
-:108C30000BF103FC08CF203EC00F8003FC84A8206A
-:108C4000B2C88C8003AC44FB703AC00E90032CA4D5
-:108C5000FB00B2400FB003C0035000000000000052
-:108C6000A01DFC00FF263E000FB613ED00FB103FD9
-:108C7000000FC113AC80F8123EC64F4243FC04FF04
-:108C8000313F000FF003EC00FF00BFC08FF003E89E
-:108C90000670000000000000C001FC40FC8036C8E7
-:108CA0000F0903C200F8C033CC2C4C036390E09052
-:108CB0003AC00D500B3C04DF643FC88DF1432C00DB
-:108CC000D50033C045F223700070000000000000A2
-:108CD0008010ED80BA0221DE8B8222E020B0002BD2
-:108CE000EC098002E340BA202FDC0898122C008B9C
-:108CF000512AD00872222E008D8021D008B6822001
-:108D000004300000000000008805CC40B92824C0D1
-:108D10004A12128885A82020C00B2202C091A1000F
-:108D200028C20B00128C40A32020C40B300A0C1167
-:108D3000990020C5090102620170000000000000D6
-:108D4000C011AC00B88022C00B8802EE01B8C12A65
-:108D5000C01BA806E200BB802EC08A8002AC00AB1C
-:108D6000002EC00AB0022C00990024C008800230F6
-:108D700004600000000000004015EC00B08036C028
-:108D80000EA813E285F3C032C00E9C23E724E882CC
-:108D90003AC10F9403AC02EB003EC00FB0032E109B
-:108DA0005100B2C00DB0035004700000000000007C
-:108DB000E001BC00FF003FC08FD003F004FD043F82
-:108DC000C04CC003F010FC001FC00DD1231C00C715
-:108DD0000039C00DF083FE44ED003BC00F7403F872
-:108DE00000600000000000004010AC00F901BAC1B2
-:108DF0000CB003A108FA0030C88F94032500F900D5
-:108E00003CC00F0483EC00FB003EE00F710B2C40D4
-:108E1000FD0837C04E9103900420000000000000C0
-:108E2000C8053C00B90023C00890022400C80037E0
-:108E3000F00B80016400490233C0849C033C00BFF6
-:108E4000020FD008F4020E10BD8033E008900A3201
-:108E50000040000000000000E0054C00B00620C00B
-:108E60000800428400A00020F00B0022CC009000FB
-:108E700028C0023D028C00B3002CC29A38020604BE
-:108E8000B11220E00830023800500000000000005D
-:108E900020011E00B68021E028EA02368086906517
-:108EA000E01BDA065E019E8425EC0A78025E00B7BC
-:108EB000802DE008794A1640BD8025E00838020878
-:108EC000004000000000000048080C00FB0028E003
-:108ED0000818028A88A1A020C21F2A23E6C8F0C071
-:108EE0003AED4E34028C08F3811EC00E30030EC0E2
-:108EF000F100B0CA0E210392020000000000000041
-:108F0000401DBC08FE103FD20FE003EC04FF147EAE
-:108F1000C00FB123FC01EE003AC40DB013BC00FF3A
-:108F2000003FC00EF083FC0CFD103BC02FE103D0CE
-:108F30000660000000000000A805EC40F08032D080
-:108F40000CA0036C00F38032DA0FB003EC00FB00DE
-:108F50003ECC4C98132C10FB043EC40CF283A6109C
-:108F6000DD203FD10CB003EA0070000000000000DB
-:108F700048119C80B70021C80C7002DC08B70021A2
-:108F8000C80E7022D800B7002CC20A700A1F08B79A
-:108F90000039C80A70021400C5692CCA2A7002D2AE
-:108FA0000460000000000000C0009E00BF8164E17A
-:108FB0000878025A01BF8021EC4B78469F08378021
-:108FC0002DE88818021E81B7B02DE0097A028E00C4
-:108FD00095A02DE4087802F00020000000000000B9
-:108FE0004814EC00B36020C008B602CC00B30120E6
-:108FF000C08AB086CF00BB106CC10A38020C01B326
-:109000000228C00BB00A0C0081002EC00AB482D224
-:109010000430000000000000E815A800FE40B68003
-:109020000CE4037880FE7432800BE603F900FE0046
-:109030003E800CE0032800FA003E804DA003A8000B
-:10904000DA043E800CE403FA046000000000000033
-:109050004800E000F8003E002E8023E000F8013CCC
-:10906000000E8003E020F8203E018F8903E000F825
-:10907000003A100E8001E000E8407E004F8003D2ED
-:1090800000300000000000000810E402C9017E402A
-:109090002C900B2400F9003E68059013A404D9001D
-:1090A00032410E9103E400F9003E600E900324006B
-:1090B000F10032406890438204300000000000005C
-:1090C0008004640089006E400890422400B9002E9C
-:1090D000708890032400B9002240089812E400B977
-:1090E000002E400A900A2600B980A2400890122063
-:1090F00000100000000000001805240089042C4026
-:109100000890022401B9002A400BB002A401B90062
-:10911000E0400A9082A400B9002C480A98022480FA
-:10912000392022402A900286004000000000000002
-:109130000804048081002C480810120410B1042C8B
-:10914000D80A10020400B1002048081002C480B1FF
-:10915000222C508A328205A0B12A204A0A128202A9
-:109160000100000000000000B80D6150C8522E142C
-:109170000C85032140F8503A001F8503A140F850A8
-:1091800032140E8003A140F8503C800E0203208070
-:10919000FA2032080E8213AE0350000000000000D7
-:1091A000981DE450FD003E440FD003F400FD003E46
-:1091B000448DD001BD00FD023E440FD400E4487947
-:1091C000143E500F92A2F408FD003E4A0DD283E6F1
-:1091D00006700000000000001805E700F9103A6E64
-:1091E0000CB103E440F9443B618E9403E400E94090
-:1091F00032660FDA0BA728C9E03F680CDA83B32088
-:10920000EDA0337908D8034600700000000000008C
-:109210003810E200B8A02E38088A02E288E8812ED1
-:1092200014090A03E280B88032300B85022101A8BC
-:10923000F4382A080ECA2390C8543438088A920E8B
-:1092400004300000000000000805C500B1002840FF
-:10925000191002C400B12028400B1006C420A1A29E
-:109260006C480B1002840881202C50091002C404A1
-:10927000B1002458083C02420170000000000000C8
-:109280001815A401B9202C40099002E410A9402E21
-:10929000400B9002A400B1012A400B94022400A9C3
-:1092A000002A4001105264008900264000980246BE
-:1092B0000460000000000000A015E400F9613A40DD
-:1092C0000D9083E520F9013A402E9002E440E90137
-:1092D0009E400F9403A40089003E402D9002E608B2
-:1092E000B90136402C9001680470000000000000B5
-:1092F0002801A400F9003E402E9003E480F9003CD0
-:10930000400C9C23E400F90036400F10438400F920
-:10931000023E400E90038080F9003C402F90038A6B
-:1093200000600000000000002810A000C8403601C6
-:109330000D8403E100E8403E080C8003E100F800E2
-:1093400032008F8003A010F80032040E808360008A
-:10935000F8003E000C00030A04200000000000009A
-:10936000280528008A01228008A024E8000A002F8E
-:10937000801AA0022800BA0016800BE0032808EA31
-:1093800000339008EC1B2280C6142F9108A0434A9A
-:10939000004000000000000028054C00930024C09D
-:1093A000093012CC04A3046CC00930028C00B30055
-:1093B0002CC01330028C00B300E6B80A380244080F
-:1093C00082502CD23A30028A005000000000000087
-:1093D000A0010E8097B421C4497102DE8187212D3E
-:1093E000D00B7B021C01BF2029C40B30025C00A7FC
-:1093F000A121C04A708A0C8184002DD00A5002E855
-:109400000040000000000000A8081E82DFA034EC2D
-:109410000D7902FE80E7E82FA0097A029E00F7A2EC
-:1094200025EA0B48039E04FFC065E40E68035F0055
-:10943000E4803DE00EF803AA0200000000000000F6
-:10944000081DAC48EB053ED90EB203EC00FB603EB4
-:10945000C00EB283AC00F350A6C04FB003AC00FB0B
-:10946000803FD80DA003EC0AF9003EC00D900342E6
-:1094700006600000000000000005FE00BB903EE01A
-:109480000839039E20CF8277E01FF803EE00FFC06B
-:109490003FE50DF903EE00FB9037A008F80F1E0022
-:1094A000CC9433600DF803C0007000000000000091
-:1094B000A8119C00B7902FE4087A021E008F122595
-:1094C000D80BBB021E00B7002DE8087D82DE40BB32
-:1094D000A027900A76025C80850037C44D7103EAAC
-:1094E000046000000000000000009C00B7202DC0B8
-:1094F00029F222BC80970025410B70129C00B7080E
-:1095000029C0084212DC40B70029C0096022DC10E3
-:1095100080002140097002C000200000000000000F
-:109520002014CC00B3C02EC00834822D0093002438
-:10953000C00B30020F8013002CC00A34A2EC00B321
-:109540000028C00B0002CC00810020C00930028935
-:109550000430000000000000A811BC00FFE03FC084
-:109560000CF483BD00DF0836400B7542FC20FF8001
-:109570003BC02C3C03FC00BF00BEC08D900BAC0276
-:10958000CA0022800DB002EA046000000000000062
-:109590008000EC00FB081EC00FB013EC00EB003A9B
-:1095A000100FB023AC01FB003EC03C8403EC00FB79
-:1095B0000026400E940B2C00F9403E900E9013E0D4
-:1095C00000300000000000000110DC02CF003FC0AE
-:1095D0000DF00B3C20CF003D000EF0079C01CF02A8
-:1095E0003EC00FC4033C00CF000FC00E44031F0257
-:1095F000CC003F802C7003004430000000000000CD
-:1096000081046C008B022EC00DB0022C00AB000652
-:109610002008B003FC00AB002EC00F8006BC00ABDE
-:10962000043AF00C88022C00C9803A9208900AA0F3
-:10963000401000000000000080052C00AB002EC090
-:109640000930022C008B0026600BB002AC008B00AE
-:109650006EC00BB0422C009B004CE00A90222C0004
-:109660008AC22C4008B042200040000000000000E8
-:1096700008040C00830D2CC60931020D81A31124AE
-:10968000008AB1E24C80A3002CCC0B02028C80A398
-:109690004808C008000A0D00810028C00830028276
-:1096A0000100000000000000000D6C00CB202FC85E
-:1096B0008DF6132DB08F0036400FF002ADA88F103D
-:1096C0003FCA0B80922C10DB403FC00E00032D04DC
-:1096D000C8023E400CB00300035000000000000030
-:1096E000A01DFC00FF003FC80EF103EC84FF2037F3
-:1096F000000DB203BCA0FF003EC90E8003FD11FFA8
-:10970000003BC00EC003FC80ED003BC00FF043687F
-:109710000670000000000000C001FC90CC923BC825
-:109720000DF0837310FF2837CA4FB203FC00DF200F
-:10973000B3C40D6843FE14CB8433E00D7803BE0040
-:10974000FF8037A00CF30330007000000000000021
-:109750008000FC48822103F40FF64220048A602B2B
-:10976000DA0BF9023F048F5223D54D8802AE00DB9D
-:109770008036C00880022004B80022600D7403E027
-:1097800000300000000000008805CCA0800108C067
-:109790004B30824290A3082CC81A30228D009300CF
-:1097A00024C809A0120C04AB0062C009B002CC00AE
-:1097B000B3002880083606A20170000000000000F7
-:1097C000C015AC00880822C00A301A001182000AB5
-:1097D000C00BB0422C008B0026C0099102EC20BBCC
-:1097E0002866C00880026000B8002A4081B006F8F0
-:1097F00004600000000000000015EC02C8043AC03C
-:1098000089B0036800E9C11EC10E3003EC00DB0023
-:1098100036C10D00230E00EB8032C8CD3032EC088B
-:10982000F3003C800CB006800470000000000000D3
-:10983000E0019C007C003FC00BB043FD00BEC4377C
-:10984000C01FF0035C00FF013BC00EC803BF20DF58
-:10985000003FD00FC013B0007C00B7400FF01BB02A
-:1098600000600000000000004010AC0CD84132C085
-:109870000EB007A8016940B2C08DB0A3EC08F30098
-:1098800032C00F8003ED00FB483AC00DB0832C00BE
-:10989000FB203E800F7023D0042000000000000059
-:1098A000C8053C00880023C008F0062C10885137FA
-:1098B000C008F0077D608F0237C00B8C002D00B30D
-:1098C0000038C00880822000B8002E500BF0003213
-:1098D0000040000000000000E0054C00980028C097
-:1098E0000A30028404A30000C06839060C109320DB
-:1098F00022C09B01A08F14331428C0093C020C0124
-:1099000093402C880B3002B800500000000000008B
-:1099100060011E10878029E00878023E00839024B1
-:10992000E0087810CE04079125E083C9021E04B731
-:10993000842BA408484212CCB4802D640B78021901
-:10994000004000000000000048002C00D01028C893
-:109950000E3B028400E34030C80C38628C00530098
-:1099600030C41F00238C3CF38018C00D30030E80E0
-:10997000D3103C800F300392000000000000000074
-:10998000401DBD00F912B4C007B003CC004A0077F7
-:10999000C00E71436C00F3003FD01FD053AC68FB86
-:1099A000183DC00FC013F050FC043F400FF403906B
-:1099B0000660000000000000A805ED40F8043ED25B
-:1099C0000FB313E010F900B2CC0EBA036D80DB02C6
-:1099D00032DC4F00036C04F30236400EB003CC00BF
-:1099E0004B003C800CF1036200700000000000009E
-:1099F00048119C00B4002DC90B7082DC00BC04210E
-:109A0000C44B37020CA08F7421C00B40021C81B7DD
-:109A1000202BC0084002D00284002D400AF202121E
-:109A20000460000000000000C0009E80B4C02DE46F
-:109A30000B7A02D200B58821E80A7802DE4097004E
-:109A400021E80BCC465E28B7C421F00A7802FE0854
-:109A500097842DA00878027000200000000000000C
-:109A60000814CC00B0C02CC09BB002CC20B3602244
-:109A7000C00B30028C00830120C01B06164F00B3C0
-:109A8000A02AF0080002E00090002C400A300202F8
-:109A90000430000000000000E815A810FEC03E8061
-:109AA0000FA003F908FE4022800EA003E800D200B8
-:109AB00032808FE0035800F60033B00E2002E80C2D
-:109AC000D2023C800CA0037A046000000000000079
-:109AD0004800E000F8203E010B8003E000F0403E2B
-:109AE000005780230000F8003E000F8403A03038A8
-:109AF000003A080FC403F000EC003F100F8003D2BF
-:109B000000300000000000000810E400D9013C48CB
-:109B10004C900B2401C9C03240AC9003E400D94002
-:109B200030400D9A032284C81432400E9003240062
-:109B3000C90082682C90030204300000000000007D
-:109B40008004640089002E4008902224008902824B
-:109B500040089002E740898036418D1802A024A871
-:109B600004624008948324008901227208900B202B
-:109B700000100000000000001805040099002A40B1
-:109B8000289012040089002240089002A420990025
-:109B900022401890062001880862400A9002341082
-:109BA0008D812341081002060040000000000000E3
-:109BB0000804048081042C48081202040283202037
-:109BC00048081202C48083602448193462A504A1A5
-:109BD00002604008D00254008D0029400812820221
-:109BE0000100000000000000B80D6140D8503A802C
-:109BF0000C85022144885032144C8043E000D80088
-:109C000022140C80032000C800A2000E8003200054
-:109C1000C80033000C82032E035000000000000037
-:109C2000981DE444FD003E440F9103F410FF103EE4
-:109C3000440F9103E440F9103E440BF013E510F992
-:109C4000403F4A2F928AA4A2F92836400F9283A659
-:109C500006700000000000001811E6C0C1003F6956
-:109C60000C9A436C00FDA03E782CD807D602D596FE
-:109C700032780D90032700FDA0355006D403E5008F
-:109C8000FD40B3400F98A3460070000000000000A4
-:109C90003810E3C288882E14A88AC222A0B8C02C2B
-:109CA00024488402E10098C4203C088A822380B8BA
-:109CB000042220088803A200B8A022000B88020E0C
-:109CC00004300000000000000805C480A1206C40A2
-:109CD0000A14024404A1682C48081402C5008160DB
-:109CE00020481990028581B14024680A1242C4803C
-:109CF000B92020408B10824201700000000000005B
-:109D00001805A410A9006EC00A10022414B9002E70
-:109D100040089012E40099002240088006A060B933
-:109D2000092260089002A400B90002400B10060648
-:109D30000460000000000000A005E400E9803E414E
-:109D40000E90036400E9C03E400C9002E400C9009C
-:109D500022410D8002A304F14036400E9002E4003F
-:109D6000F10012400F900368047000000000000032
-:109D70002801A400D9223E420D9003E400B9C43C5E
-:109D8000400F9003E400E902AE400F804B6210F9EF
-:109D9000203E400F9003E400F9027E410F9013CA69
-:109DA000006000000000000028008000C8003800AB
-:109DB0000F8020E000A82032000C8007E080C8005F
-:109DC00038000D80832110F86032008E80B32008A7
-:109DD000F8003E000C8003CA0420000000000000D0
-:109DE000280528048A00339043A02228008E80761C
-:109DF0008008E1031900868022800D60017800BE92
-:109E00000036800CE402A810BEA02F800DA0020A2C
-:109E1000004000000000000028114C0403042CD472
-:109E20000B30024C01A3C420C02835028600838079
-:109E300028C00838060E9430C0A2C00B3C020C00AB
-:109E4000B3802C480830028A005000000000000057
-:109E5000A0010C048F8021C11B72421EC083882187
-:109E6000C01828061021863821C019F7025DC0B439
-:109E70004127D00878C69C00B7002F6009720228DD
-:109E80000040000000000000A8081E02C7802DA0AE
-:109E90000F3E03FE80A780A1E00C7802940085A00D
-:109EA00039E40C78131E90B58431E00FF8871E0456
-:109EB000F7803D600C3B03AA020000000000000098
-:109EC000081DADE4FB543E800FB423EC32FB003E92
-:109ED000D84FA003E400F9003EC00F3033EC04F289
-:109EE000013EC00FB203FE10FB683C410FF04382FD
-:109EF00006600000000000004005FE00CFE43FE4E3
-:109F00000CFC037E80CF8133FA0FF803F600FF804C
-:109F10003FE20F79033E40F48033600CE8033E00DB
-:109F2000FF8033600CF883500070000000000000D8
-:109F3000A8119C00D7A02DC408BA023CA0872021FC
-:109F4000C00F5203D400B6102DC08B73035C40B415
-:109F5000B02B482841020C00BF1835462872422A0F
-:109F6000046000000000000018009C0087412D44A0
-:109F70000A73029CC481006DC88B7002D400B700C4
-:109F80002DC00BF0469C55B42025401860821C0063
-:109F9000B700234008704644002000000000000085
-:109FA0006014CC0093002C400BB0020C8280C020C7
-:109FB000C00A10020400B3002CC01B3000CD01B059
-:109FC00040AC78888C060D60B34C241208300A1817
-:109FD0000430000000000000B815BC00C7002E408F
-:109FE0000EF02ABF00C8C8BFC00B9002E404BF0037
-:109FF0003FC00FB20AAC00F88034490CB90B3F00E7
-:10A00000FBC030F00CF0036E0460000000000000A4
-:10A010008000CC00FB803E412CB013AC00F8003E29
-:10A02000C10FA003E800FA403EC00FB00B6D40F82E
-:10A03000103A400FB003EC10FE403EC00FF003E1B9
-:10A0400000300000000000000010EC0CDF003B803E
-:10A050000FF00B3C08E70833C00BD023740054000A
-:10A0600033C00FF083BE20FD0C3B602CE0033C00AE
-:10A07000CF1233500C300380043000000000000089
-:10A0800081046C04AB0022A00BB0060C00AB403680
-:10A09000C00BA8026600B80036C10B3443EE00B214
-:10A0A00000226008B4828C048A21224008B0022079
-:10A0B000401000000000000080052C009B002A20BA
-:10A0C0000BB0022C0088C522C00B8882E601BB08B9
-:10A0D00022C00AB282AC60B8024AC408B1022C00A5
-:10A0E000830022C008B002A0004000000000000071
-:10A0F00008040C00AB2020010B32062C00A000202D
-:10A10000C0090422C400B20024C18BB0024C00B0CC
-:10A110000062C0483002AC10820020C00830020249
-:10A120000100000000000000000D7C08DF2A3A005A
-:10A130000FF5123C10C900A3C00F8053EC01DA00E8
-:10A1400033C00EB003AC04F8703AC00C60432C422C
-:10A15000CD00B2402CF0038003500000000000004E
-:10A16000A019FC00FB013D000FB417FC003C003FB0
-:10A17000C04FC0037408FE003FC04FF003FC08F856
-:10A18000303FC00FF003FC04FC003D000FF003E87B
-:10A190000670000000000000C005F490EF003FD8FA
-:10A1A0000EF3032C01D48037CC0D89431250EC2CD4
-:10A1B00032050DB0533CD4C5947FA08FF0433000DE
-:10A1C000DC0033000C4807F00050000000000000E5
-:10A1D0008010E6408B702FDC08F7020C808A20008C
-:10A1E000C84A2202A0008A48225888FD02AD02A96E
-:10A1F000201EA00380022C048B0022C04C88076024
-:10A2000004300000000000008805C000232C2CC989
-:10A210000230020C68A0282CD00912028400A02170
-:10A22000201819302280D083060CA00BB006001233
-:10A23000A000200029000EA2017000000000000014
-:10A24000C011A8308B002EC04A300A2C14A0800AFE
-:10A25000C108888687008300224908B006A040AB69
-:10A260002022200B800A0C04AB0222C0888002F05E
-:10A2700004600000000000004015EF40EB063EC007
-:10A280000EB0032C02F9A03EC00D8C03AA10E940C9
-:10A29000B2480DB043AD00CB862E200F3003240012
-:10A2A000F98032C00D0CC290047000000000000064
-:10A2B000E0019400FF003DC00DF0037C00DF00379B
-:10A2C000C00FE003F000FE203F400F7003FE00FFD0
-:10A2D000827F000FC003F904DE20BD000FD90B7C84
-:10A2E00000600000000000004010AC01CB003EC048
-:10A2F0002CB00B2C00E8403EC00F94072900C94049
-:10A30000B2C00FB0030102CB0032044FF04334C09F
-:10A31000B51A3FC10F8093D0042000000000000058
-:10A32000C80528008F002FC008F0023C04D8002B7D
-:10A33000C00C804560007B5822C80BFA0161408B3D
-:10A340000032044BCE0228003A402E070B90022622
-:10A350000040000000000000E0054C0083014CC0FC
-:10A360000B3002EC1090002AC00A8006C00483045F
-:10A37000A289193006CC00830020900B30C248001F
-:10A38000B24024200B0900B800500000000000007B
-:10A390002001060487A42DE0093802DE009E8129F1
-:10A3A000E0087852FAC0968001A08B3A22CE408F06
-:10A3B000B025A00B08025608B5902DE44BD8220C0E
-:10A3C00000400000000000004808080283802EE8DA
-:10A3D0000B3813CE41D31028C00E3A02C6084B40AA
-:10A3E00030600D3B27CFC4C3A030000F304348403E
-:10A3F000F2003C040F020392020000000000000083
-:10A40000401DB800FF003FC40EF1033C00FF0133C4
-:10A41000C04DB1077C90FF003F4003F1037000FB8B
-:10A42000103B000FC00BB400FD003FC40FD00390E1
-:10A430000260000000000000A805EC04FB843AC2A2
-:10A440004CB4932C04E9003AC48D08032E00CB01D0
-:10A4500032808FB283EC00CB8032000FF9033C10C6
-:10A46000DF81B3E08CA003EA007000000000000070
-:10A4700048119408B70424C81A304A1D00B7012DAA
-:10A48000C08870061C00820021804B7612DC008799
-:10A490000029408B40021000BC002001287003B24C
-:10A4A0000460000000000000C0009A00B3902DE49A
-:10A4B0000979021E80A7802CE819F8125E018780B6
-:10A4C00025E04B7806D200978021620B3A021E00ED
-:10A4D000B78629F0086806E00020000000000000B0
-:10A4E0004814CFC0B30024C08A30320C00B3082C0B
-:10A4F000C00830120E20830024F10B3006CE0083FA
-:10A500009028600B002A2180B008280008370292AA
-:10A510000430000000000000E815B900FA003E8099
-:10A520004DA0032800EE413E800DE00378008E40F0
-:10A5300027A80BA003FB02CA8233A00FA013290097
-:10A54000FA403A800C6C03FA04600000000000003E
-:10A550004800C000F8003A000C8003E008F8003E14
-:10A56000008F8023A042F809BA104F8003E060F802
-:10A57000003E200FC003F000FC0027008F800392F4
-:10A5800000300000000000000810E50089003E4097
-:10A590006E9003A408C9003C400D90032410F9A05C
-:10A5A00032420C9013C400C9003E400F9003E440B7
-:10A5B000C9203E52CF900902043000000000000084
-:10A5C0008004660089042E400890022400D9003AD5
-:10A5D00041089005A400B940A2400D9002E54689CB
-:10A5E000002E400B9012E500A9C82E618B944220EA
-:10A5F000001000000000000018012400A9006C40B9
-:10A600004810228403A9002E40099002E404B108F6
-:10A610002840189802E50089002E400B9002F42093
-:10A620008D002F400B944286004000000000000087
-:10A6300008040480A1242C481812020480A10028D8
-:10A6400048081002840091202048091202C4948115
-:10A65000002C610B5A82D4A0A5282D4A0B900282AF
-:10A660000100000000000000B80D6002E8502E1448
-:10A670000E8503A140A8503E140D85018140F8527B
-:10A6800032940C8013C142C0513E008F8203E0809F
-:10A69000C8203F080F8003AE0350000000000000F8
-:10A6A0009819F450D9113E448F9143E440DD003AAB
-:10A6B000444FD027B400FD123F444F9143F440FD76
-:10A6C000003F410F9283E4A0F9283E4A0FD0036671
-:10A6D00006700000000000001811F680E9C03E7806
-:10A6E0008F9B03A780C94036780F1023E504DDA4B3
-:10A6F00033620FDA03F660C91033400E9893E630E8
-:10A70000C9C932788CD00B06007000000000000030
-:10A710003810E00088E22E300B88422340A0A122AE
-:10A72000380B8A02E280AAE022300B8023AB028839
-:10A73000A02A000B8C02E30088E023380880020E78
-:10A7400004300000000000000805C500A14428589E
-:10A75000431622848181202C58491080C48191485D
-:10A760006C4A0B14024484810160400A5286D4A0D2
-:10A770008500A150689006D2017000000000000022
-:10A780001805A60089002E400B90020400A9602243
-:10A79000400B9502E410B1004E400B9066AC8089EE
-:10A7A000002A600B9052F40085002140089002C6F8
-:10A7B0000460000000000000A005E620E9003E4023
-:10A7C0000F9003A410C90036400F9401E520D94032
-:10A7D000BA688F9007E600C91032620E9002E41842
-:10A7E000C90032400C9003E8047000000000000033
-:10A7F0002801A400F9043E400B90036400F9003ED8
-:10A80000408F9003E400E90272680F9003E600F9BC
-:10A81000013E420F9003C402F9043E404F90031AD8
-:10A82000006000000000000028008002C800320024
-:10A830000C80036000C84036000F8403A000D8508D
-:10A84000B2108C8103C120C8003E000FC013F00479
-:10A850004C003F000F80030A0420000000000000AD
-:10A8600028152A008A04228128A01228008A01368D
-:10A87000800BA0102810CE0123810CA812FB008AA7
-:10A88000013B8083A042E8108A002F800B60420ABF
-:10A89000004000000000000028054C008300A0C01C
-:10A8A00018B000CC009B0024C00B30066C00A3083D
-:10A8B00028C8093002CC438B002C800B3002CC021C
-:10A8C00083012CC04B30004A005000000000000003
-:10A8D000A0010C24879421E4183102DC8097102514
-:10A8E000CD0BF2027C00A00028E0187002DC01878A
-:10A8F000342940094002D00484042D004BD0226842
-:10A900000040000000000000A8081600CFA070E979
-:10A91000187B03FF4097A035E80F74025E20E480A7
-:10A9200039A02D7803FE00C7803DE05F6843C20078
-:10A93000C4841D600F78036A02000000000000005C
-:10A94000080DA4003B002ED80FB4032D8AEB623A09
-:10A95000D00FB2870CD0D80032C04F9043EC00FB30
-:10A96000083E408F9003FC00FF043F800F002B82C5
-:10A9700006600000000000000005F600FFA03EF4A5
-:10A980000EB803EE084BF07FF40CF923EE487890F4
-:10A9900032E40CF903FE00FF803FE41C79032E40F3
-:10A9A000FF8033E02C7807000070000000000000FA
-:10A9B000A8119400B3000CE50B3802FE808F806173
-:10A9C000C42878004E00F48425A80C7002CC04B38F
-:10A9D0009025400C41835240B410A3000C52036AEE
-:10A9E000046000000000000000009400B7216DC862
-:10A9F0004B7002DC42A73129C4087202DC00B72880
-:10AA00002480087006D420B7012DC1086002508050
-:10AA1000B4082162097406800020000000000000D4
-:10AA20002014C704B3002CC00BB002CC00A30260FA
-:10AA3000C00838024E44A0C02491083002C000B3C0
-:10AA4000002460081C024C88B3C020A008000A88BB
-:10AA50000430000000000000A815AC00FF002FC06B
-:10AA60004FF013FC08E78A3FC00CF5C2FE10BBC0D4
-:10AA700032D40C3013E304BF002E6208B9026E001A
-:10AA8000FB0132A44D9402AB046000000000000002
-:10AA90008000EC60FB001EC00FB013EC005B003ABE
-:10AAA000C00FB041EC007B45BA402EB015E001FB71
-:10AAB000003E500EC003F040FC203F508F900160DC
-:10AAC00000300000000000000110F400FF003FC053
-:10AAD0008FF0031C02CF0036C00DF0037C007F2AEC
-:10AAE0003F800FF8139021CF003F620CE00330004D
-:10AAF000F8003F000FD00380443000000000000049
-:10AB000081046411BB002EC00BB0022C00DB0432A8
-:10AB1000C00EB002EC00BB842E400BB94222428B27
-:10AB2000012C720A90422C00BB002EC28F8806E0D6
-:10AB3000001000000000000080012400BB006EC077
-:10AB400048B0422C008B0026C00AB012EC00BB407B
-:10AB50002EC80BB0122C008B002E480A30026C005D
-:10AB6000BB002E804B9802E0004000000000000077
-:10AB700008040400B3006CC24B31020C509B20202F
-:10AB8000C00A3212CC80B3006C0C0B31020C428331
-:10AB9000082E400A00020080B0002C410B10024237
-:10ABA0000100000000000000000D6400BB403FCC2D
-:10ABB0000EF0833DA0CF2037C00CF7C3FD48F30053
-:10ABC0003E880FB413A5008F303E400CA003608078
-:10ABD000F8003E000F9023C003500000000000006A
-:10ABE000A019F400FF293FC90FF013FC94EF123BAA
-:10ABF000C08EB207FD04FF103F0C0FF003F000FB06
-:10AC0000203D400FD043FC40FF043FC00EC043E84E
-:10AC10000670000000000000C005FCA2C7203F2411
-:10AC20000CF0033C80CC0933D10CF123FC20DF363F
-:10AC30003FC00E4803FE00FF8037E40D780311A0EB
-:10AC4000CF0037C80CF00330017000000000000096
-:10AC50008010FF008FD12E080DB6123D45F96427F4
-:10AC6000D088BA14CC048F4023F00B88022E04BB8A
-:10AC700080AEC008B80A210088D0222028B0022067
-:10AC800004200000000000008805CC0093002E0086
-:10AC90000A34828CA0A00824D8093102CC20B33217
-:10ACA00028D04A8002CC0CBB00224089B0026080D0
-:10ACB000930024D00B3002A20130000000000000FD
-:10ACC000C011AC009B002E2009B04A2C02A0000647
-:10ACD000C009B000EC00AB002AC00B88026C00BBBE
-:10ACE000202AE241B82A600A980026000BB002B878
-:10ACF00004600000000000004015EC08DB023E206C
-:10AD00004CB0032C028B2012C029B012EC00FB00C7
-:10AD10003AC00E8803ED20FBC834F00DBA0347603B
-:10AD2000C90036400FB00B90047000000000000016
-:10AD3000E0019C00EF000F000F3000FC00DF90BB33
-:10AD4000C0CEF003FC04CB0017C00FC003BC84FFCF
-:10AD50000037C00ED063B800EA003A800C300370B0
-:10AD600000600000000000004010AC00FB02320058
-:10AD70000FB0532C00FA0032C08FB0072C00FB003C
-:10AD8000B2C00F8007AC80DB247ED00EB0237404E9
-:10AD9000DD08B5400CB003100420000000000000E6
-:10ADA000C8053C00BFC0A0001BF0023F60EA502372
-:10ADB000C008FA07FC00DF0063C04818022D00B38A
-:10ADC000006EC00D3A032400828032800DF0033201
-:10ADD0000040000000000000E0054C14B359208042
-:10ADE0000930022E05B0442EC0093482EC00AB04B9
-:10ADF00020C00921B28E0493C024C00A18064C005A
-:10AE0000925020C008300270005000000000000086
-:10AE100020011E00B78061E00B780A5E01B1A02D11
-:10AE2000E00A78025E00079021E018C8021E00B711
-:10AE3000802DE08AD8023EC085802120197822002A
-:10AE4000004000000000000048080C00F3942010AF
-:10AE50004B30070C00F3003EC80F3003CC0023102A
-:10AE600000CB0520028C60930A2EC40A01074C8097
-:10AE7000D20130C02C300B5A02000000000000004C
-:10AE8000401DBC00FF010F400FF013BC00EF267304
-:10AE9000C20CB083BC40FF183DC04AC103FC00FB9C
-:10AEA000123FC44DC10BFC81FD003F200FF003D0C9
-:10AEB0000660000000000000A805EC20CB483E0022
-:10AEC0000CB0032D20E980FAC80DB003EE00DB249E
-:10AED00076F38E8033EC44EB103EC00F9003E80411
-:10AEE000DC00B3610CB0032A007000000000000019
-:10AEF00048118D0087202F012870020C848D0431A9
-:10AF0000CCC97202DD00373321D8084002DC00B71B
-:10AF1000203DC0095022F000970021800AFC0292D7
-:10AF20000460000000000000C0001E8287B02D20D9
-:10AF30000839021E41A78024E0097A328E8207A0D8
-:10AF400025E08B48021E00A7E12DE04B5800DA00F7
-:10AF5000A0802460087A0230002000000000000079
-:10AF60004814CC0083002C000830028C009300228F
-:10AF7000C1093042CC00830060C0081A02CE04B37D
-:10AF8000E028A0091C824B08A38024A02A30029A42
-:10AF90000410000000000000E815A800CA002F8877
-:10AFA0000CA0132800EE002E802DA003E800DA008C
-:10AFB00076800EE803BB80EE402FA28FE603EB867F
-:10AFC000FA8037820C20073A04600000000000007D
-:10AFD0004800E000F8401E000F800B6100E8C03A16
-:10AFE000000E8003E001F8007E101E8103E008F8E7
-:10AFF000003E000D8003C028DC503B000F8003D2D0
-:10B0000000300000000000000810C402C9003E42E9
-:10B010000F1003A600C9013A400E9401E410F10498
-:10B0200032400F9A232060F8040A420E9013240045
-:10B03000C10032400F900302043000000000000005
-:10B0400080046708A9006E400890022782890026C4
-:10B0500040089C03A410B90036409B1C1A2304B876
-:10B06000003A400E10022402C9A0A2400B900A2010
-:10B0700000100000000000001805258089042C4005
-:10B08000089002848199402E401A9006E401B9008C
-:10B09000A6411B90822100B8102E400A920AA401FA
-:10B0A0008F2223400B9002060040000000000000A9
-:10B0B00008040480A3202C4109120204808120246A
-:10B0C000480A3602C480B12004C84B14020500B1FE
-:10B0D0000528500A90020502850021400B12020249
-:10B0E0000100000000000000B80D6000C8006E14F0
-:10B0F0002C8502A140C8503A140E8002E140B050A5
-:10B1000032000B80032000FA003E000E8003A002F4
-:10B11000C80013000F82032E03500000000000003F
-:10B12000981DE448F9143F400C9103E442FD1036A9
-:10B13000440D9123A448F91138440FD003E5143984
-:10B14000427B408ED001F500A9403E50079683E631
-:10B1500006700000000000001801F680DDAE3A50D5
-:10B160000D9A0B7680CF8832702DDA03A701E99211
-:10B1700037680D9403E700EDA03A500FD003E702C3
-:10B18000CD8033680CD883060070000000000000FA
-:10B190003810E100884020200C8C02230088E02237
-:10B1A00030088402E300B8E022148D8802E300B87E
-:10B1B000502EA88B8022E34888502200088C020E73
-:10B1C00004300000000000000805C44091002A4837
-:10B1D0000914820520810820580911028588B14090
-:10B1E000A040081202C580A10028400B1802C484A8
-:10B1F000A10024500810920301700000000000001C
-:10B200001815AC109B002240089002040689042007
-:10B2100040099002E401B902224189A082E0A0B96C
-:10B22000282E440BB002E402B90026402810020682
-:10B230000460000000000000A015E400D9003840C0
-:10B240000D90032400C9A0A2408D9003A400F90032
-:10B2500036400C8413E200E9003A500F9C02E68469
-:10B26000E900B6400C9003280470000000000000C4
-:10B270002801A400E1003E680E1003A400F1283A62
-:10B28000400E9003E400F9003E420F8023E200F9F3
-:10B29000003E400F9123E440C1003A400F900BCA9A
-:10B2A000006000000000000028108000C80032008C
-:10B2B0000C8003A020C8403E000E81636000F004B3
-:10B2C0003C010C8403E000C8003E000E8003C10076
-:10B2D000D81032000C80230A042000000000000077
-:10B2E000280538608E0022800AA0023880BE003A0D
-:10B2F0008008E0022800BA00239818EC02F820AE7B
-:10B300000022800BE482E802CE4428800DA00A0AC5
-:10B310000040000000000000280540008204A0C09A
-:10B320000930028E0483506CC00A30860C00B300D2
-:10B3300028300A3612CC80810024C00B3206CC00A3
-:10B3400080886460281002020050000000000000A5
-:10B35000A0011012844021C80A72021000B7002D0B
-:10B36000CC0838121C00B3302000087182FE00A403
-:10B370008021C80B7002DC0187002C420951022099
-:10B380000040000000000000A8081200C28031F850
-:10B390004CFC139209C7803CED1E78271E00F78CE9
-:10B3A0007920087A03DE8184803DE00E7803FE2058
-:10B3B000C58135602C58032A0200000000000000FF
-:10B3C000081D8000F8043ED00FB013E000FB023AE5
-:10B3D000D00FA00BAC40FB003A002FB003CC00F024
-:10B3E000003AC40FB003FC41F3003A400F5093C23F
-:10B3F00006600000000000000005F600CC813FFC64
-:10B400001CF8037640EF923FE48CF803BF10FF80F6
-:10B41000B3200EF913FE24FD9437E01CF903EE006F
-:10B42000CD80B3E00C580200007000000000000066
-:10B43000A811944080002FC4087202DD08D7002DA7
-:10B44000CC08DE035C00B7042180C87083DC00B444
-:10B45000A02FC00C7002DE80870021C20A51422A50
-:10B4600004600000000000000000900084002DC86F
-:10B47000487002540CA7002CC08972025C00B31003
-:10B4800020000A7006DC00B4202DC0087002DC80A9
-:10B49000930020C0085002000020000000000000BF
-:10B4A0002014C00080002EC0083002C408A2422C24
-:10B4B000C10920024C00B3002080083C228C20B03F
-:10B4C000082EE0083810CF0A9340A0F00A100208B6
-:10B4D0000430000000000000A815A800C1003FC013
-:10B4E0002CF0036800AA003FC02D80037C00FF0001
-:10B4F00032000EB012ED24FA0827C810B8A2FF607F
-:10B5000098A0A2E00C50032A046000000000000094
-:10B510008000C906F8413EC00FB003E9105A203E32
-:10B52000C00E8003EC00F3007E010FB093ED00F835
-:10B53000403EC00EB003FC00E3083CC20FD013E055
-:10B5400000300000000000000110F302CC003BC2FC
-:10B550000CF023AE40DF8139C006D003FC00FF04AD
-:10B5600031410CF003FC00CCA037C20CF0037C048A
-:10B57000CD0033F00CD00308443000000000000080
-:10B5800081046000888022C00AB002E900AB442E2A
-:10B59000C0088802EC00BB00A2700AB402CC00A074
-:10B5A0002022C00FBC02CC0A8B80A2C00D900220CA
-:10B5B00040100000000000008005200089802AC0A3
-:10B5C00008B002CC0688602EC00A9806EC01BB00C9
-:10B5D000223102B202ECA08A0026C048A802EC0484
-:10B5E000A9802240089002200040000000000000D6
-:10B5F00008040000800020C00A3042CC0080012CEA
-:10B60000C01A1202CC00B30020004A3002CC00A0C5
-:10B610000008C00B2006ECA0A300A04029100002E7
-:10B620000100000000000000000D6000C8503BC099
-:10B630000CB003AC00C9003BC00E9283FC00BF00FD
-:10B6400012000CB003EC00882616C00C80175C803A
-:10B65000E90132402CD0030003500000000000003C
-:10B66000A01DD000FC203FC00FF003FC00FC003FF9
-:10B67000C00D8003FC08FF003F000FF003FC10F832
-:10B680004037C00EE021FC08DF003F400FD003E050
-:10B690000670000000000000C005FCC0FF217124FE
-:10B6A0000FF183F240FF0037C49FF2473D04C720EB
-:10B6B00033C00C7823FE40E81027C40FF2133C84FB
-:10B6C000C48133204CF023700070000000000000A3
-:10B6D0008010ED40BF5462C80BF602E000BBD022E0
-:10B6E000F01FF9123D809F812BE00AB812E8008F0D
-:10B6F0000422D008B38ABF428B8222E0288C022029
-:10B7000004300000000000008805CC00B3282808A1
-:10B710000B30068080B30224D10B30028D80931051
-:10B7200020CE8B3002CC84A1212CCC0A300A4C00D4
-:10B73000930028C0083C02220170000000000000B5
-:10B74000C015AC10BB026AE00BB002E108BB042AD2
-:10B75000C00AB0128C009B002AC00BB106C8808BB7
-:10B76000826AC10A3002AC1888102A480880023068
-:10B7700004600000000000004015EC00FB00AA304F
-:10B780000FB003A800F301B6C10BB002AC084B0028
-:10B79000B2C00FB802EC10A9813EC00FB0030C007C
-:10B7A000CBA018D00CB00310047000000000000003
-:10B7B000E001BC08F70037000FF003FD00FF003781
-:10B7C000C00FB0077C00E7003EC00AF003FE00F7A0
-:10B7D0000036C00CF003FC00FF8037E00FA003B878
-:10B7E00000600000000000004010AC00DB003600EC
-:10B7F0000EB0036900DB093AC01F3023EC08CB20F0
-:10B8000034C02FB003EC40EB483EC44DB08B6C000D
-:10B81000CB0032900F3003900420000000000000A5
-:10B82000C8053C008F00220048F0222C008F002326
-:10B83000E08BF5103C008F8023F08098032D44DBD3
-:10B840000023D408F8023C00830022C00BA48232FB
-:10B850000040000000000000E0054C0093002400C0
-:10B860000B30028400B30128F60934328C01B3D0C6
-:10B8700024E80A310A860083002AE00030028C00A6
-:10B88000830028C08938A278005000000000000022
-:10B8900020011E00979423E0093802320097A1216D
-:10B8A000E40B78021E40B7A025EC08FC023A009396
-:10B8B000B821E00878829E4087C029A00B58024832
-:10B8C000004000000000000048082C00DB0034208D
-:10B8D0000F3A038E00F3B028C40B3A03AE40F3A036
-:10B8E00034EE0F30238400E3F038C00CB00B8E42EE
-:10B8F000C30038C00F3063D2020000000000000017
-:10B90000401DBC00EB423AC41EB10788D1E3003FA2
-:10B91000C58FF163AC10CB503BC30FD103C800BB44
-:10B92000203BC02EF1031C00FF0037C04FD1039015
-:10B930000660000000000000A805EC40FB44B2C017
-:10B940004FB3432400DB1036C04CBE226D20CB50D9
-:10B950003EC94CB0132400CF2033C03DF0232CC08F
-:10B96000D8003E408F30032A007000000000000025
-:10B9700048119C04B76021C18BF0A2141087000FFE
-:10B98000C80D710A1D0087002CCC48702A9C0087C6
-:10B990000C21C00C72020CA287002DC00B70021289
-:10B9A0000460000000000000C0009E00B38021E0A1
-:10B9B0000B7A02DE00B78105E40879025C8087A07B
-:10B9C0002DE008F806B600878020E40A7B121E905E
-:10B9D00097882DE00B780E3000200000000000005A
-:10B9E0004814CC00B30020D00BB0026E34A3002C5E
-:10B9F000C10930024C0083002CC04810028D8083A6
-:10BA0000C000C08A30120C0080002C160B380212C5
-:10BA10000430000000000000E815A800FA00338898
-:10BA20000FA0037990FA0136801CA0036800CA00B9
-:10BA30003E812CA00BB90CCEE2B2808EA00B280068
-:10BA4000DA803CB00FE0833A0460000000000000A0
-:10BA50004800E000F0003E000F8003A000C8002E68
-:10BA6000000F8423A000F0403E100F8403E102F891
-:10BA7000483E100C8003C010F8803E000F0003D237
-:10BA800000300000000000000810E400D900364239
-:10BA90000F90032418F9103C48689213E400A91190
-:10BAA000B2600E91032600C90032600C1003240816
-:10BAB000C9003E400C90230204300000000000004A
-:10BAC00080046400890022400B9002A40889002EA3
-:10BAD00042489402E40089802270081422A402895A
-:10BAE000422A7028900A2400A9002E40289002A023
-:10BAF000001000000000000018050400990026C096
-:10BB00000390022401A9000E400A9046C40A89004D
-:10BB100020480A900205808141A05888900224089C
-:10BB20008D802FC008980206004000000000000031
-:10BB300008040480812020400B1202840081242C00
-:10BB4000580A3222C584A100205008B0028508811D
-:10BB500040205A0816820400A5002D400812828257
-:10BB60000100000000000000B80D6140D8503614FC
-:10BB70000F85230140E8003E000E8043C008CA0044
-:10BB800032800E80032000C00032082C02032008FF
-:10BB9000C8003F000C82032E03500000000000008C
-:10BBA000981DE440F9103F400F9143F404F9103E12
-:10BBB000440D1103E44459403E504F5043D402FD1C
-:10BBC000403E400F900BE500F9003E404FD003E6A9
-:10BBD000067000000000000018056660C9E03244ED
-:10BBE0000F9C03E400DD843F688FD842E6A0DDA40B
-:10BBF00033680D70032500C9E0B2680C9AC32600B3
-:10BC000099003E400F9A03060070000000000000FB
-:10BC10003810E3008880AA208B8802E288B8012EC1
-:10BC2000000B8402E2B088502214088002828088CF
-:10BC3000E0B63A08CEA2210888002E000BC4020EFE
-:10BC400004300000000000000805C48081606848DE
-:10BC50005B1602C420A1406C500B1402C400A1006A
-:10BC600024400B90221490854221505B501A1500FD
-:10BC700095002D400B510A82017000000000000069
-:10BC80001815A40189002A400B9046E400B9012E42
-:10BC9000400B9020E400B900264018B802A4028DA1
-:10BCA000082F408BD00224008D202F480BD0028615
-:10BCB0000460000000000000A015E400C90032404C
-:10BCC0000F9002E41049003E400F9002E400E901A9
-:10BCD00036400F18132410C98232407F902324006D
-:10BCE000D9203E720F9003A80470000000000000ED
-:10BCF00028018402F10116404F9003E510F9082E47
-:10BD0000400F9013E400C9013A401F9003E400F98A
-:10BD10002034408C9003C408F9003E600F10034AA1
-:10BD200000600000000000002810A008F8003E009D
-:10BD30000C80036000E8003E024F8013E000D0005A
-:10BD40003E000E81033000CC4033000CC00B20209D
-:10BD5000E8003E100FC003CA0420000000000000ED
-:10BD600028052804BA00228008A0022800BEC86F57
-:10BD7000800BE122A8008E202F800BE02368008A30
-:10BD800000228008E00229008A002EA80BA000CA29
-:10BD9000004000000000000028054C00B30024C053
-:10BDA0000930020C00B3C12CE00B38562C101300E4
-:10BDB0002EC00A386A2000880020000980224C42E8
-:10BDC000A3002CE00B2480CA0050000000000000FB
-:10BDD000A0011C08B7242FE00939021C01B6002D70
-:10BDE000900B60928E0086822DC20BF0025C06875B
-:10BDF0000060C02970025C0086002DC00B6002E864
-:10BE00000040000000000000A8081F40F3E43DE8E7
-:10BE10000D790B1EC067802DE00F70431D80D5008B
-:10BE20003D600E78031E00CD8031E00DC8034E004A
-:10BE3000E5803DE00F4803EA02000000000000003A
-:10BE4000081DAC80FB0070C06EB613AD40FA003E1A
-:10BE5000C00F20432D1859003E0003B00BE000FA3C
-:10BE600000BE000EB013AC00F8003EC00F8003C24D
-:10BE700006600000000000000005FE40FF803FE675
-:10BE80000FF8232E04FF903FE40DBA03FF40CF804C
-:10BE900022E10C39433210EC9033208EC803F200BB
-:10BEA000DF803F600FF803C000700000000000005A
-:10BEB000A8119C40B7903CE00B3A034E80F3B12DA3
-:10BEC000044C3823AE00808034E84D78023E8087F1
-:10BED000A029C0087002C08086022D410B7002EAC2
-:10BEE000046000000000000000009C4837012DC9DC
-:10BEF0000B72221C84B5160DC4194042DC808700E9
-:10BF000020C888730A9C80B50029C00A4802C00274
-:10BF100095002D420B5802C00020000000000000D8
-:10BF20002014CC00B3002AE00B30024C20A10124E5
-:10BF3000C10800028C008100248009380A608092C8
-:10BF4000402A000A3002C00080C82C720B1402C8BC
-:10BF50000430000000000000A815BC00FF002FF412
-:10BF60008FF0033C00B9003E40099003FC02C3017E
-:10BF700032C048B813A100BA002A000AA007EC009A
-:10BF8000DBC83E900FA202EA04600000000000003F
-:10BF90008000EC00FB023EC40FB063EC01F8403EB1
-:10BFA000400B8003CC00FA423EC00FB500AC58E90C
-:10BFB000823EC01D9003EC04FA003E800FA003E017
-:10BFC00000300000000000000110FC0CDF007FC00A
-:10BFD0002CF0037C01C70033408FD003FC00D80055
-:10BFE00015440CE01B3C00CB0E33C05C62021C020B
-:10BFF000C5002B800FC08780443000000000000087
-:10C0000081446C10BB002EC008B0520C01FAC4224F
-:10C01000610B88036C0088472A000E1C02200288EE
-:10C0200000AA0028900A2C04A80022900B8002E0AD
-:10C03000401000000000000080012C00BB002EC159
-:10C040000830126C0088882A300BB802EC009B087C
-:10C050002A4008B80220008210220008A022A00076
-:10C060008B002A020BB002E000400000000000003C
-:10C0700008000C00B3202CC20836022CC0A00820F7
-:10C08000000B3346CD28802028C00B32020C2081C3
-:10C090003028C00810028100AA002800033002C224
-:10C0A0000100000000000000000C7C00FB282ECCEA
-:10C0B0000C70537D098800BA000F8003FD80DA60A0
-:10C0C0003A508CA2832C804B2030C028A003A100C2
-:10C0D000C9003A000F9003C00310000000000000E8
-:10C0E000A01DFC04FB007EC90BB603FCC0F80C3F8E
-:10C0F000004FC3432C00B8383F8E5EF043E010F889
-:10C10000303F010FD0037000FC0037000DD007E96D
-:10C110000360000000000000C005FCE0CC8033C0DC
-:10C120000DF083FC80DC9433C01CF1037D8CFF3068
-:10C130003F308FC8037E10CF9039A08DF803AE003A
-:10C14000D58013E00C5803F00160000000000000EF
-:10C150008010DD08880023C408FC02ECA8CB202155
-:10C16000C20DF7121C40DF3022A00B88022E04DB28
-:10C170002122C008B8222E00B9802A600A8802E075
-:10C1800004300000000000008845CC10802C28CA34
-:10C190006830028D009B2028C4083202CC10B30006
-:10C1A00024080B80426C0083002ACA3AB0028C0437
-:10C1B000B00428C0081002E30130000000000000B5
-:10C1C000C0158C028040AAC008B002EC009B202A57
-:10C1D000C088B002AC009B0026E00380822C289B24
-:10C1E0002022E10BB202AC80B8802AC10A9802F08A
-:10C1F00004600000000000004015EC00C8503AC088
-:10C200000DB003EC00DB88BAC008B0036C08FB007B
-:10C2100036600F8C636C00CBC03A800EBE03AF84D7
-:10C2200079803A88049801D0047000000000000072
-:10C23000E001BC00FC8035C04FF003DC00EF0037AC
-:10C24000C0AFF0031C016F0013000FC123FCB8FF47
-:10C250000437C00CF8437E04FD003F040FD003F800
-:10C2600000600000000000004010AC00C8403AC070
-:10C270000CB003EC00FB4038C10EB0432C08C300E7
-:10C280003E400E82036D00DB4032C15FB4A3ED205F
-:10C29000C94032E08F984390042000000000000065
-:10C2A000C8053C00880023C028F5C2FC00B3042365
-:10C2B000C148F022BC06AF000E40080002CD00BB12
-:10C2C0000120C0083002EE0081E034A00B90023261
-:10C2D0000040000000000000E0054C02800028C083
-:10C2E000093C024C00B3002CC00AB0020C008301D0
-:10C2F0002C000A0502CD58BB0020000A3D02CF40A9
-:10C30000212060C0091002F8005000000000000069
-:10C3100020011E00848028E4887842DE00B7906502
-:10C32000E4887A429E40A7902DA00A4822DE04B7F6
-:10C33000802360487842FE80AF9065E00BE802C839
-:10C34000004000000000000048080C00C80038C091
-:10C350000C3003CC00FB003CC00EBA030C00C30041
-:10C360003E004E2202CCC0FB4030C00A3003CE80DB
-:10C37000E14130C90F3003D202000000000000008C
-:10C38000401DBC20FC0037C20EF123EC40FF043AF4
-:10C39000C00FB023FC00FF043EC00DA003FC58FFFB
-:10C3A00000BFC006F083DC62DF003FC00FF0031067
-:10C3B0000660000000000000A805ED80C9013EC035
-:10C3C0008CB207AE04CB803AC84CB2032C84CB307D
-:10C3D000B0E00D880B2C00EB0030000CBC832D80EE
-:10C3E000FB0032C00C9003EA047000000000000063
-:10C3F00048119C4087002CCC0876823C8287002123
-:10C40000C28D32820D4CA72821800840021D80BFBA
-:10C410002035400972435CA0B70029C0087002D2E1
-:10C420000460000000000000C0008E0084802DE049
-:10C43000087802DEC08F8028EC287B0A9E948384D3
-:10C4400023E00958509E10A7B023E00B78021E206D
-:10C45000B78021E0097802F0002000000000000011
-:10C460004814CC02821C2CC02830024C0083C0200F
-:10C47000C00830020C00A30060D2081D020F20BBD0
-:10C480002424C00B3C024F00B38028D8093202D2CA
-:10C490000430000000000000E811A800CE843E80B7
-:10C4A0000CA003E800CEC03A8008A003A800CA0090
-:10C4B00033800DEC033B80EE8233800AC08710404E
-:10C4C000F6C03390AD6403FA006000000000000085
-:10C4D0004800C002F8003C001F0403A004F8303EEE
-:10C4E000000F8003E000F8003E040F8093E000F8A6
-:10C4F000103E002C8403E000F8183E100E8003D29A
-:10C5000000300000000000000810E400D9003E40A8
-:10C510000E9003A410F9003E400490032400410053
-:10C520003E400F9113E108F8003240088983A200D1
-:10C53000C98032400C900B02003000000000000067
-:10C540008004640289002E400D90022400B9002E60
-:10C5500040489002A400890022408B9442E220B817
-:10C5600000A240089402E504A990346008900220DB
-:10C5700000100000000000001805241099002E4053
-:10C580000A9002E400B90024400A10020400A90045
-:10C590002A400B9082E001B80020403A9002A44467
-:10C5A0008904226208980206004000000000000092
-:10C5B0000804048A81002C480932064480B1002C0A
-:10C5C000480A12028480A12020500B1402C500B139
-:10C5D0004020500A2402C900A3002440081102028E
-:10C5E0000100000000000000B80D6140D8503E146A
-:10C5F0000E8003E140F85136142E85432142E85065
-:10C600003A000F8012E000F80032001E8043A000C4
-:10C61000C80132000C80032E03500000000000000F
-:10C62000981DE440FD003E444E1103A440B5003E79
-:10C63000440D9103E440D9103F400F5003E500F949
-:10C64000403F400D4403F100F5023DC02FD203E608
-:10C6500006700000000000001805E700E9003660E1
-:10C660000DDA03E640F9403E680C9A03662089A083
-:10C6700033400E9007A600F9803E500CCA03F380A9
-:10C68000C50233400CC003C600700000000000006B
-:10C690003810E30488A22038088002E340B0802EDE
-:10C6A00028088A82238088802200DB88026204B8FE
-:10C6B000B02EA8888EA2EA8088002A002888038EDF
-:10C6C00004300000000000000805C582A9082C52B3
-:10C6D0000B1402C480B1210C5288140244209169C9
-:10C6E00020400A1082C6E0B10C2C48080102E193F8
-:10C6F000A10124410A1002C20170000000000000E4
-:10C700001815A40089042240089000E40039020EA4
-:10C71000400810622400910062408B8002E054B90E
-:10C720000C2E4009B652EC00A9002A400A928086DD
-:10C730000460000000000000A011E400E160364049
-:10C740000D9023E400F9303E402C90436406C9006C
-:10C7500032490E8D93E000F9002E402C9403C7401F
-:10C76000E92030550E9003E804700000000000003E
-:10C770002801A400F9001E400F9003E400F9803C5A
-:10C78000404F9003E400E904BE400F88336200F993
-:10C79000C23E482E8833E200D9003E600D8003CAB5
-:10C7A00000600000000000002810A000C8003E004B
-:10C7B0000D8003A004E840BA000C8003E004C80028
-:10C7C0003A000E8C03E000F80232000E8003612074
-:10C7D000F80032160F8003CA042000000000000099
-:10C7E000280528008A002E8008E20328008A0022FB
-:10C7F0008008A002E8048A002EA209E802FA04BE1A
-:10C8000000A28008CD823320B6C037A04BC882CAB0
-:10C81000004000000000000028056C00830026C0D6
-:10C820000938024C00B30024C0083002EC00830039
-:10C8300028E00B3002CE81B30062C0083C024F00FA
-:10C84000B3A020B0033002CA005000000000000076
-:10C85000A0010C4187342DC00860029E40B7A02D76
-:10C86000C0087302DC0087202DC00B7082DD85BFFD
-:10C870008163C8887B021C00B74065001B7202E818
-:10C880000040000000000000A8081E00C7813DE035
-:10C89000DD7003FE80F7903FE02C7903FE80C7A097
-:10C8A00039E00F7A02DE84F7C231F20C79035E04BC
-:10C8B000F78431600F7E03EA0200000000000000F0
-:10C8C000081DAD0AFB607ED40F30036C00CB003234
-:10C8D000DE2FB203ED421B603EC10DB103EC50F7F9
-:10C8E000803DD82E3203EC30FB003E400FB003C237
-:10C8F00006600000000000000005FF00CBD03FF004
-:10C900004CF813FE00CF883FE00CF8433F00CFC83F
-:10C9100033E00CF803FE00FF803FE02CF803BE205C
-:10C92000C78033E00CF80100007000000000000038
-:10C93000A801BC4087903DC0084002DC80D7002D94
-:10C94000C00C30037C00871021C41E7020DC44B76B
-:10C950000039C00C71021C40D70229400870022A1D
-:10C96000046000000000000000009C0087322DC021
-:10C97000087002DC0187002CC02B700A5C00830069
-:10C9800023C0087002DD00B7002DC40BF0029C200C
-:10C990008718294008708200002000000000000075
-:10C9A0002014CC00830228C0081002CC0883402E3B
-:10C9B000C02A30020C008B0020F20A3002CE00B3F5
-:10C9C000882AD00A30060C0092002878083C4208D9
-:10C9D0000430000000000000A815BC02C7002FC0F2
-:10C9E0002C9002FC028FD83FC04BF0027C02CF009B
-:10C9F00020F208B013EE80FF003FD42EBD83AC00C0
-:10CA0000CB803AA0ACB8032A04600000000000000C
-:10CA10008000EC00FB103EC00F8403EC10FB003ED6
-:10CA2000C001B003EC00FB00BEC00EB023EC08FB5D
-:10CA3000103FC00DB403ED04F9001E14CFB083E025
-:10CA400000300000000000000110FC00CF0030C0EA
-:10CA50000C4003AC00FF003FC02CB003BC00FF0043
-:10CA6000B3E00DFA037E80CF0033C00CFC43FF20FF
-:10CA7000FF003F4008F803C0443000000000000001
-:10CA800081046C10AB002AC00A8E422C04BB002E1D
-:10CA9000C008B0026C00BB003AC00E30020D088323
-:10CAA0000222C00ABC02EF00BBC02C680AB902E037
-:10CAB000401000000000000080050C008B0022C028
-:10CAC00008B802AC00BB022EC008B002EC00BB00EC
-:10CAD000264819B0026D008B0022C00AB002EC0497
-:10CAE000BB1C2E200AB002E0004000000000000045
-:10CAF00008140C00AB2028C00A00020C0093042C80
-:10CB0000C10830024C00B300244109B8020C028372
-:10CB100001A0C00A3002CC1093002C000A3002C2DF
-:10CB2000010000000000000000057C00CF2833C099
-:10CB30000CA046AC11BF003FC05CF043FC00FF04FA
-:10CB400032400DB0036C08CB0431C00CB033ED4063
-:10CB5000FB043E400EB003C0035000000000000084
-:10CB6000A015FC00FF003FC00FC023FC01FF003FE9
-:10CB7000C04FF0877C00FF0039400EF003FC00FF3F
-:10CB8000003FC00F7003DC80FF003D400F7003E8E2
-:10CB90000670000000000000C005FC40EB483EC2EB
-:10CBA0000E0903BC60C02035240ED2132C60FB6A32
-:10CBB00033C00FCA032220C08037C00DF0037C00B1
-:10CBC000EF0033240FC803300070000000000000A5
-:10CBD0008010DD008F602FD808A202FD80C870226F
-:10CBE000002CFD07DC84BF6023D20BBD022300882C
-:10CBF00080A22088B0223400BB5022C80BB0022093
-:10CC000004300000000000008805CC40A3032CC2C3
-:10CC10000A00428C82A30A24800B3002CC90B3001D
-:10CC200028D80B10028C02900020C00B10424C0040
-:10CC3000B30424C00B300EA20170000000000000FD
-:10CC4000C015AC109B042CC0F89806EC00AB8026F5
-:10CC50002008902AAC10BB000AC01BB022AD00987F
-:10CC6000402A704BB0022C00B300A6861BB082B0E5
-:10CC700004600000000000004015EC00EB003EC026
-:10CC80008E9803AC08E8C036304FB042EC00F98013
-:10CC90003AC08F88422010C81030F00F30136C104B
-:10CCA000EB0036F00FBD03900470000000000000A0
-:10CCB000E001BC00EF047FC00FF043DC00C4003B88
-:10CCC000408BDC037C10F99036C24FF9236241ACF3
-:10CCD00001134004B003E400FF003BC00FC0037821
-:10CCE000006000000000000040108C12CB00F2C079
-:10CCF0000F8003AC08D9003A800F1203AC00E100AA
-:10CD000032C00C9003ED02C8403ED00F90132C02AD
-:10CD1000DB003E500CB403100420000000000000B3
-:10CD2000C8053C008F0017C00890023C088D002207
-:10CD30005408B4033C00890023C0403502CC248051
-:10CD40000022744CB0022C008F002ED40AB00A329C
-:10CD50000040000000000000E0014C02830024C0FD
-:10CD60000900028C0190006A410A30204E10310205
-:10CD70002CC0092006CE00800060E00A30820C083A
-:10CD800083082CD009B00278005000000000000099
-:10CD900020011E0487B020EC09E9028E589DB02BBB
-:10CDA000A5405B06DE4095942DE4197B06DE0084E9
-:10CDB0008060E00A780A161087802D680B79024897
-:10CDC000004000000000000048080C00CBA024E058
-:10CDD0000F2A038E00D2D038FA0F18C3CE2431B0F8
-:10CDE0003CE50C3B17CE04C08238C29E10030C00F9
-:10CDF000C3013EC00D81035202000000000000008C
-:10CE0000401DBC00EF103EC20EB1232CC1AB013659
-:10CE1000800FB0232D90E98472C862F117FC00FCEA
-:10CE2000003BC41DF003EC00EF083FC80EF1039077
-:10CE30000660000000000000A805EC80FBA43AC8D2
-:10CE40000E90032C04CA0030602D1A276C84CB602E
-:10CE500032D20CA0132D84CB023EC00DB803AC809F
-:10CE6000CB8132800CB003AA0070000000000000EB
-:10CE700048119CA4B72873C208F0023CC08F00314F
-:10CE8000C00970829C80870C20D80970221C3084D5
-:10CE9000003DC0087002142487A021C0087012123F
-:10CEA0000460000000000000C0009E40B39529E926
-:10CEB0000A68029ED086F0A3E00878129E44A382FE
-:10CEC00021E80B38020E1087802FE00B18028E022B
-:10CED000870021E0087802300020000000000000F8
-:10CEE0004814CC00B30024C04830020C04838020D6
-:10CEF000D00910028C06A38020C00B30020C0280E7
-:10CF00004028D20A30020C018300223C088702121A
-:10CF10000430000000000000E815A818FA003A806C
-:10CF20008EE4422802CE8033804DA083E800EAA040
-:10CF3000B2800AA00A2800CE182F800FA013A800E4
-:10CF4000CA0032902CAC0B3A0460000000000000D4
-:10CF50004800E000F8043A000F8083C008E8033A74
-:10CF6000000E8022C000D0007E10A48003C000F814
-:10CF7000003E100D8403C000F800BE000F80015277
-:10CF800000300000000000000810C402C900364054
-:10CF90000C90036402890432420D9203E642C900F8
-:10CFA00032700E120B2408C9003E450E9903E402AC
-:10CFB000C10032500494030204300000000000005D
-:10CFC0008004640089006E400890022400890022D9
-:10CFD000540B9003E6008900224008900A2400893F
-:10CFE000003848089082E404D900224008900220CA
-:10CFF00000100000000000001805240089012C40EA
-:10D000002810426400A1042250019042E4008904E7
-:10D0100020420A9042340089006E400A9000E400E9
-:10D02000890023400AD002060040000000000000F2
-:10D030000804048081242C480810020480A12028C0
-:10D04000400B100285808120204808506214028124
-:10D05000032E40881682C4A0912821402A50020243
-:10D060000100000000000000B80D6140C8502E14FF
-:10D070000C85036140E850B2154D8002C000485055
-:10D08000B2151A80133008C8003E000E8203E080FB
-:10D09000C02030000E400B2E0350000000000000A6
-:10D0A000981DE440F9103E440FD003E448DD1037EA
-:10D0B000400FD407E440FD103E450F9403E508FD02
-:10D0C0000239D00FD043F4A0F9283E4B0D9283E6ED
-:10D0D00006700000000000001805E680C9A632684E
-:10D0E0000C9003A681E9E93B400E58033620C9A005
-:10D0F00037780DDA033626C50037690EDE03A682BF
-:10D10000CDC033500FD003060070000000000000B7
-:10D110003810E3A488A9223A08080022A0B8E53014
-:10D120002028802243A008E82A3D08A46220008825
-:10D13000002E10088E0323A088A020280B8A820EC0
-:10D1400004300000000000000805C4409140204465
-:10D150000890A28510A1202C420B14128C01911072
-:10D160002C4809110AC40081002C500B1112C50172
-:10D17000B14024480B180E020170000000000000AE
-:10D180001815A400910022410894422400B14020C7
-:10D190004049B262240099000A40089002E5808963
-:10D1A000002E4009B0022480B90026504B900206A0
-:10D1B0000460000000000000A015E402D900B240A5
-:10D1C0002C9513A410E900BE608F900BA410590099
-:10D1D0001E409D9423E402890034400F9003E6082A
-:10D1E0007900B64007980328047000000000000092
-:10D1F00028018400E9023C402F9802E400F9423AF9
-:10D20000680A1003E410E9003E400E900F2600F972
-:10D21000043E400E1C03E600C1003A500F9983CA39
-:10D2200000600000000000002810A000E8003A00A4
-:10D230000C84032000D84232040C8813E000C8009C
-:10D2400030000C040B0000D80036000E80230000D4
-:10D25000C88032000C80010A042000000000000099
-:10D26000280528108A002E8028202228008A0023E2
-:10D27000B088E0022810DA00A3B408E81028008E75
-:10D280002023A048ED1A2800DE0023900AE0020ABD
-:10D29000004000000000000028054C00A30028C04A
-:10D2A00008300A0C00930020C22A3022A400BB00E0
-:10D2B00008E018090A4C00930224E80208064C0012
-:10D2C000930020D80A90024A00500000000000009D
-:10D2D000A0011C8087042DC00870020E0087102555
-:10D2E000000A60025E009700298208501254008FE5
-:10D2F0008061D00804025C01B708A9A00A508268C6
-:10D300000040000000000000A8083E80E78038E4EC
-:10D31000087E031F00DF80B1211E7803DC04F38048
-:10D320005BE10828035E00D78035600E68034E007D
-:10D33000DF8031E00EF80B6A020000000000000000
-:10D34000081DAD02FB743ED04FB283ED007B683AFE
-:10D35000008D8003A420DB0136806FB0418400EB98
-:10D36000003CC00FE683BC40DB00B6800FB00382F8
-:10D3700006600000000000000005FF20DFC03BE663
-:10D380000EF813FF44C7823BE00FF903BE10CFC86D
-:10D3900033608DEB033E00DB823FE00CD8033E4060
-:10D3A000CE8033E40FF8030000700000000000009E
-:10D3B000A811BC40870021E40B78A2CE90C7B02012
-:10D3C000E80B2892B68887A020640B3503140087E9
-:10D3D000B239C02CC0035E02CF0031CE0B76122AC8
-:10D3E000046000000000000000009C00A31029C899
-:10D3F0000B7402DC808F0029CC0A30061480871061
-:10D4000021C00B66025C0087002DC00B51021C80FE
-:10D41000960021C05B748200002000000000000024
-:10D420002014CC08A30020C00BB802CC008B40A86D
-:10D43000C08B08228C02830060C00B304204008342
-:10D440004028FC8A00026E008300A0D08B380208BE
-:10D450000430000000000000A811BC02EF003BC037
-:10D460004FF802FC02CF0038120E98022C00CF00B9
-:10D4700032C0099003640281C03ED00F90073C0384
-:10D48000D90032600F88032A046000000000000009
-:10D490008000CC00DB003EC08FB003EC00FB023606
-:10D4A000C04F9002E400FB00BE900F9C13EC00E91B
-:10D4B000183AD004D503EC40E9003A008F8003E02D
-:10D4C00000300000000000000110FC00CF003DC152
-:10D4D0008CF0032C00EF0AB3122C7023140A4F00B7
-:10D4E00035600DB0030400CD8007E80CC4032C00A8
-:10D4F000CD0031E22CE003004430000000000000C9
-:10D5000081046C02AB022EC00EB0022C008B0032E4
-:10D5100030009C036C008B04223608344A2C0889A6
-:10D520009020B80F8400AC02890036A008A4022025
-:10D53000401000000000000080052C008B002EC071
-:10D5400008B0020C008B0022D10888122600A3002C
-:10D5500026400BB00226008B0026C05810122C0467
-:10D5600082802A49083002200040000000000000AC
-:10D5700008040C00A3142CC81A348A0C848340229B
-:10D58000C80803624CC0A36020400A30020C008B24
-:10D590004508C00B10028CA08300264008300A0208
-:10D5A0000100000000000000000D7C00CF402FD2E1
-:10D5B0008CF6033C22CF4032D64CA6C13DA0874812
-:10D5C000360D0FB1022442CB6016C00CD0032C8064
-:10D5D000CA0032C00C3003000350000000000000FD
-:10D5E000A019FC00FF203ECA0EB003EC20DB343A49
-:10D5F000C80F8003E410DB213E180DF203FC80FF0E
-:10D600003035C00FC013EC00FF003BC00FF003E843
-:10D610000670000000000000C011FC00FB0B2FCAC8
-:10D620008DF203FA0096803BC40DF1037C80EC8000
-:10D630003B080CC2037402CC803F480EF00330A0BC
-:10D64000D5803F400CF803F000700000000000009F
-:10D650008008EE40BF802FF00BF722EE208A802357
-:10D66000FC8875123D00880022002880022408886A
-:10D67000006F5000F502290089002E540D9011A072
-:10D6800004100000000000008805CC00B3002CC18D
-:10D69000093082CC82BB0028C0493202CD00B800DC
-:10D6A0002C500901020C4080006C4409300220001B
-:10D6B000B0002C40183006E20170000000000000AD
-:10D6C000C001AC00BB012EC00BB002EE00AA004AA4
-:10D6D000C008B052EC00980226400980026C01AAF2
-:10D6E000042E4009B0022200A9802E41099002F0C8
-:10D6F00004600000000000004005EC00FB003EC09C
-:10D700000DB003CE84FA001AC08DB043EC00F002D5
-:10D710003F000DD1033500CB482E402FB0092280A9
-:10D72000F9C81EE008B1E2D004700000000000005B
-:10D73000E001BC007B003FC00FF023FC00DE0024B2
-:10D74000C04FF0032C00EC203B000E98039402DD48
-:10D75000003F404EF001F800DD003CE40FD803B874
-:10D7600000600000000000004000ACC0FB2032C898
-:10D770008DB003EC00F9003AC22C30036C04D802DF
-:10D780003C448D1003AD03EA003C400C7023E400E0
-:10D79000C8403AC00DBC0350042000000000000047
-:10D7A000C8013D00BF4223F00DF002E500E2013761
-:10D7B000F108F00E3DC0A8002E542890022C008ADB
-:10D7C000053B4148F5038C00890022D40E9502F2F6
-:10D7D0000040000000000000E0054C00B30420C041
-:10D7E000893002CC40B2002CC44830022C02A20086
-:10D7F0002C2019201A8008B0006C40083002C400A8
-:10D8000081002C40083002F80050000000000000A9
-:10D8100020011E00B7A0E1E0097802DF04AE802DF0
-:10D82000E00879021E1087902C282968028281B4B2
-:10D83000802D60087810BC008F802D600B6802C8B6
-:10D84000004000000000000048000C05F39230CAC0
-:10D850000D3003CC00F3003CC00C30020C80700093
-:10D860002C400D20038900B1003E402C3003EC50C9
-:10D87000C3203C400C3003D2020000000000000036
-:10D88000401DBC00FF003CC00EB083EC40EA0036F7
-:10D89000C20FB083AC00F8003E480EE00B7A80CF98
-:10D8A000003B440FF003ECC0FF0003440EE003D044
-:10D8B0000660000000000000A805EC00FB233EC845
-:10D8C0001DB003EE00CA003EC80CB2032D90C88400
-:10D8D00036002DB00360189B8033500CF203E20039
-:10D8E000C98032400CB8032A00700000000000001C
-:10D8F00048119C00B7280CD2287302FC0086042C27
-:10D90000CC2870830C20950120000930121004856A
-:10D91000002152087502D8008700214008600212D9
-:10D920000460000000000000C0009ED4B7B109E10F
-:10D93000087822DE0095802DE008780A5E4294C0C7
-:10D9400021600878025A0087802D68087A02D70083
-:10D95000978020600978023000200000000000005D
-:10D960004810CC00B3002CC008B002CD8092002C2F
-:10D97000C008B002CC009080A04009360248028363
-:10D98000A0AC402A3006CE029304A04009200A121F
-:10D990000430000000000000E815A800FA003A80FA
-:10D9A0000DA003FB02DE803E800CA0032800CE8089
-:10D9B00032800CA4037800CEA43F800CA007F900AD
-:10D9C000DE0032802DE0023A04600000000000001A
-:10D9D0004800E100F8007C000F8003E040E8103CC4
-:10D9E00001CF800F2000E8003E000E04039000E805
-:10D9F0000020000D8007E000E8003E040E8003D206
-:10DA000000300000000000000810E400F9107E4122
-:10DA10000E90032400F90036680E900FA408C90088
-:10DA20003A400C900B2412E9003E442C90036424ED
-:10DA3000F9022E400C9003C20430000000000000E8
-:10DA400080046510B9803E4008900A2600B1102A73
-:10DA500072089007640289402E40289012250089A0
-:10DA6000453E500D900A2500B9402E40289403E011
-:10DA7000001000000000000018052400B9002E402E
-:10DA80004890422601B94026400A904284018B0802
-:10DA90002C4009D0823432A9086E4208100224209A
-:10DAA000B9082C40189082C6004000000000000019
-:10DAB00008040480B32028480812020401B1002899
-:10DAC00058081202058981402C5808560615808195
-:10DAD0004028500914020580B1402C5A081402C293
-:10DAE0000100000000000000B80D6800F8002E00E2
-:10DAF0002E85032148F80036008E0502A00880001C
-:10DB00003E000D800B1004E0002C004C8003400010
-:10DB1000F0003E080C0003EE03500000000000007F
-:10DB2000981DE440F9103E440F9103F400FD003EBF
-:10DB3000440F9103E440FD033F441F911BE440FD6B
-:10DB4000013F500E9403F440FD003F400FD003A668
-:10DB500006700000000000001815F400CDA07168E8
-:10DB60008D9803D400CD0033600C988F2720C940D6
-:10DB70003E780C9E8B2720D11130608C9C032500B1
-:10DB8000F9403E780F90034600700000000000004E
-:10DB90003810E01088012201088C22E80088022A4F
-:10DBA00014088C0B239088A02EB0088C4223008888
-:10DBB000A0362A188A022200B8A02E340BCA820E80
-:10DBC00000300000000000000805C400814024501F
-:10DBD000091682C400A9002040081292540885004A
-:10DBE0002F4C09521214809D002150085422148099
-:10DBF000B5002D480BD00242057000000000000067
-:10DC00001805A4028901A240489002E402A9002A52
-:10DC1000406890026410AD002F4128500234008DFE
-:10DC200044274039D0023500BD142F400BD00246A6
-:10DC30000460000000000000A005C400C9003640D8
-:10DC40002D9003E700E1E032400C900B6402C9081C
-:10DC50003C500C90022602D9C032400C9013270091
-:10DC6000F9203E400F90036804700000000000009F
-:10DC70002801A402F90038400F9003E680D9A03CA7
-:10DC8000400F1003A400D9103E400F9003C492F936
-:10DC9000213C402E900FE680F9803E400F90038A91
-:10DCA00000600000000000002800A040E8103E04D2
-:10DCB0004E80032080D8603A020C80132000F84088
-:10DCC00036102D8003A008E84032000D0003210229
-:10DCD000C840B2000FC003CA0420000000000000CA
-:10DCE00028113B1086012FA00DA00238008EE023E2
-:10DCF000A208A0022800BA80228008A00228008280
-:10DD0000002A8028A0022A048A8022A00B6002CA6E
-:10DD1000004000000000000028054380A2002CA065
-:10DD20000830022E00920028C02830022C00B38058
-:10DD300024C009300A8C00A30060C008300A4C00DF
-:10DD4000830020E00B2002CA005000000000000009
-:10DD5000A001100086002DC0093A0235008600217E
-:10DD6000C00873021000BF8821000870021C088FD1
-:10DD7000002BC00820125E20878821830B6002E8F8
-:10DD80000040000000000000A8081200E5813DA04E
-:10DD90002C7A0B1E00D48038E00CFA0B1E00F680A3
-:10DDA00034E00D28038A00E68031200C78037A04E1
-:10DDB000CE8431E04F7843EA00000000000000000C
-:10DDC000080D8000F8003EC00FB523E400F00436D3
-:10DDD000400FB687E000F2003E001FA00BE800FAFB
-:10DDE000003E000EA003A800FA003E800FB003C260
-:10DDF00004600000000000000005F600CC8033A0A5
-:10DE00000CFC033E00FC8037E00FB9213E00FD8290
-:10DE100033E02CF8037E10DF843DE00CF803F600BD
-:10DE2000FD803F600CE8230000700000000000004F
-:10DE3000A8119840841021C00870021080B40021FD
-:10DE4000C80B7A021000FD0021040870021C4287F2
-:10DE5000002DC4486102D680B5002F040861822AD3
-:10DE6000046000000000000000009000810021809C
-:10DE70000830021C10BC0825804B300E1C00B4007A
-:10DE800020C0082002580096002F000A7002D0809F
-:10DE9000B4182D4009F80200002000000000000026
-:10DEA0002014C8028000A0C00830220BC0B0C022DD
-:10DEB000800B30020000A004220028A0022B008A60
-:10DEC000002C0008A006C000B0C22C0009BC1A0833
-:10DED0000430000000000000A815A000C80032C0F7
-:10DEE0000CF00B2600F9C036000FF0132C10BB40CD
-:10DEF000F2C00890036700D9803EC0089002EC0091
-:10DF0000FBD03EC0298C002A046000000000000005
-:10DF10008000E000F8443CD02FB003E400F9203E3C
-:10DF2000400F3003E000FB083E000F9013E442F97D
-:10DF3000103EC00F8003EE00FB003E800E8203E027
-:10DF400000300000000000000110E008FC8032E416
-:10DF50000EF0037400FC003F400CF00B3C00FE0090
-:10DF60003FC00DC1032020CC1033000CD10358005A
-:10DF7000CE002FC00FD1030044300000000000008D
-:10DF800081446200B0402AF108B0122608B8C82EB9
-:10DF9000700AB0022000BA002E00288003224088B8
-:10DFA0000120000A800228008A012E808B90022026
-:10DFB000401000000000000080052600B828224222
-:10DFC0000830026600B8802E3088B0022C00B901FB
-:10DFD0002EC0889002A400890022C0089002240C60
-:10DFE00089012E401B8002600040000000000000FC
-:10DFF00008040000B00028C02830020000B0002C47
-:10E00000400A30020000B1002C0008100A04008110
-:10E0100001A2C008000A048081002C001B000A0233
-:10E020000100000000000000000D6000F800324018
-:10E030000EF0236408F8002E000CF0032C00F8000A
-:10E040003EC00C80032002C80432001C9003200054
-:10E05000C8013E419F904340035000000000000073
-:10E06000A01DF000FC0C3FC00FF003F010F4003FC7
-:10E07000000FF423F000FC003F000EC003B000FCD2
-:10E08000003F000FC003E100FC003F011F5003E808
-:10E090000670000000000000C00DF0D0FF203ED050
-:10E0A0008EB003ECA0DB283ECC0CB303AD08F83CEB
-:10E0B00032230E48237A00FD943FE00F7833EE08B8
-:10E0C000BF803FE40FF90330007000000000000043
-:10E0D000A000ECC8BFD10FC80C2682FD248F002EF3
-:10E0E000990AF2621DD099612271888802AC00B849
-:10E0F000222E204B8803A00080002E080B80236076
-:10E1000004300000000000008805CC04B3030CCCF0
-:10E110000A1312CC14A30E0C580A33028C10A3203D
-:10E12000A00A18900248A0B02024800A2002CC093E
-:10E13000A1002C800B3242A2017000000000000000
-:10E14000E011AC20BB002EC04B80A2EC00AB004E17
-:10E15000462AB0022C049B802A608A9C02AC00B93B
-:10E16000812E400B9802A3008A002E400B8004F001
-:10E1700004600000000000004015E100FB043EC008
-:10E180000EB403EC0ADB022ED10EB003AC00FB820E
-:10E1900032281E0C036800B9003E404FB043ED002A
-:10E1A000EA003E400F800390047000000000000071
-:10E1B000C001B818FF021FC00CE203FC00DF032FF0
-:10E1C000A10F7003FC04AB0437422DD0027C00FC8D
-:10E1D000003F800FC003B000FD003F800FF00378C8
-:10E1E00000600000000000004010A900DB003CC0FF
-:10E1F0002E94016C11CB00B8C00CB0036C00EB0185
-:10E200003210079203A800F8003E0C07A203AD00ED
-:10E21000D80032000C8003D0042000000000000071
-:10E22000C8052808BF002FC08880023C08EF0322E1
-:10E23000000DF5003C008B822260039C022C10B97B
-:10E24000B022F00B90022000BB0022E20DB002F2DF
-:10E250000040000000000000E0054000B3022CC0B8
-:10E260000830026C00830020C0093404EC00A800D0
-:10E2700022F00B00028800B30028E00B1402A0007B
-:10E28000930020C008B002F8005000000000000019
-:10E2900020011E04B7802DE80878020EC8A790213F
-:10E2A000A81938529EC1878021E20BD9829E00B600
-:10E2B000A02D200B68021E00B4C12120094802C80D
-:10E2C000004000000000000048000C80B3103EE059
-:10E2D0000E3A074E00CB903A610D3803CED1E1984B
-:10E2E00030A48F10038800BAA13C8407000382D4B5
-:10E2F000D10072800C3003D2020000000000000048
-:10E300004015BC04FF003FC00FC223ECB0FF003239
-:10E310000406B4237C10BF003E840FB0037C40FF92
-:10E320000033400FF003FC00FE00BF400FC803D0D5
-:10E3300006600000000000008805E400CB333EC802
-:10E340004CB003AC90DBA036C00EBA436C00C900E1
-:10E350003E400F000F2800FB003E400F18436000B6
-:10E36000FA003E404F080B2A007000000000000039
-:10E3700048119C1007082CCA0820021C2087283F3F
-:10E38000808AF0021D4087042DC00B70021C00B66D
-:10E39000002D800B60031C00B5002D800B70021255
-:10E3A0000460000000000000C0008E0087A02DE483
-:10E3B0000A58021E01839021700B79029E0185C0CC
-:10E3C0002DE04B58121A00B6802D200B4802520047
-:10E3D000B4802D200B480230002000000000000017
-:10E3E0004814EC0083002CC08836020C0283006CB9
-:10E3F000C00B300AAC009BE06CC80B32020C01B3BE
-:10E40000002CC00B30020C10B3402CC00B3C82120D
-:10E410000430000000000000E815B802CA003E8089
-:10E420000EE48B2800CA0033950FA007A802CE4047
-:10E430003FB00FE4822800FA003E800FA02368005E
-:10E44000FA403E814FA4E33A04600000000000005F
-:10E450004800E080F0003C002F00026000E8003C33
-:10E46000000E80012000E8045E040F8003E000FC41
-:10E47000013F100FC403B000FC093F000FC003D2DE
-:10E4800000300000000000000810E400A920364021
-:10E490000E90034404D9003E400D9003E404C900EB
-:10E4A00032408F900BE408F9003E440E9803E600DA
-:10E4B000F9003E400F9003C204300000000000004D
-:10E4C0008004640089002240189002240089002EF4
-:10E4D00040089402E400D90422400B1C0B6400B9EC
-:10E4E000942C50089C02E414B9900E400B9002E06A
-:10E4F00000100000000000001805240289002640DA
-:10E500004A9002640099042E40089882E400890031
-:10E510006A400A9282E400BD012F5012D602F440F4
-:10E52000BD000F400BD002C60040000000000000FC
-:10E530000804048081202048081202048081222CD3
-:10E5400048A81206C490912028500B90024500B5AF
-:10E55000406D40085012D404B5022D400B5002C249
-:10E560000100000000000000B80D6140C800361432
-:10E570000A85034140D8502E140C8503C140C85071
-:10E58000BA000E8023E00078003E000E8003E00415
-:10E59000F8003E000FC003EE035000000000000032
-:10E5A000981DF440D9103E4407F103E440F9103FB0
-:10E5B00044AF9103E440FD1037500FD003E400F95D
-:10E5C000003E400F9003E4A0F9283E4A0F9283E6F4
-:10E5D00006700000000000001805E6D4FDA23A70A5
-:10E5E0008C9E032680C9A032680CDB4327809DA245
-:10E5F000B7400F50036500FD003FC107D003F5048D
-:10E60000FD402FC00CD003C60070000000000000C9
-:10E610003810E388B8502238088E00A2A088E8227B
-:10E62000384888036210A8E83C000B80036280B879
-:10E63000012E800B8021A200B0842E2A288A82CE4F
-:10E6400000300000000000000805C440B100285858
-:10E6500080134005008140205228160285809BC20D
-:10E6600064418B98020400B1092C401B1020C400A7
-:10E67000B1002C40481002C20570000000000000EC
-:10E680001815A584B900204008900224000100203C
-:10E69000500890426400A910AE580398026400B973
-:10E6A000002E400B9046A410B9002E41089002C6DF
-:10E6B0000460000000000000A011E700F9002A40FB
-:10E6C0002C940B2402C900B2440C90032404D9807A
-:10E6D000B6418F18032400F9603E400F9603E40012
-:10E6E000F9803E428C9003E80470000000000000B6
-:10E6F0002801A600F1003E400F1C03C400F9003EB3
-:10E70000408F9023C410F900BE400F900BE400F935
-:10E71000003E40079023E400F9203E408F9003CA5A
-:10E7200000600000000000002810A100F800BE00FA
-:10E730000E84032000C80032000C00832000F80083
-:10E740003E000C8003A000F80036100F8043E00864
-:10E75000F80032000F8003CA04000000000000002F
-:10E7600028052800BA00228048A0036800AA002AD1
-:10E770008008E003680082002F8008E6022804BEBB
-:10E780004023800BE802EA00BE0122800BE002CAAF
-:10E79000004000000000000028054C01930120C14A
-:10E7A0000A30020C00A30020C08838420C00A300ED
-:10E7B00024C00A3E428C00B24C24E04B3802C441D3
-:10E7C000B30022C00B1002CA00500000000000007D
-:10E7D000A0011C00B70020C9487002DC40A7142C1F
-:10E7E000C82830825CC185002DE02AF0121C80B759
-:10E7F000A021820B7082D411B68021404B5002E8D8
-:10E800000040000000000000A8081E80D58029EA12
-:10E810004E3A070E80E3B031FC0C48030E41E7800E
-:10E820003DE00E78039E80F4C435E00F7827DE00CB
-:10E83000F580B1E00F5803EA00000000000000007E
-:10E84000081DAC0031043AC40FB5936D08FB403A83
-:10E85000C8638023EC98E9003EC00DB043EC00F3A0
-:10E86000803E404FA003EC00F8683E408F9803C202
-:10E8700004600000000000000005FE60EB903EE434
-:10E880000FB8003F40CB807FE00EFB032E40CB80D3
-:10E890003FE00F79432E60CA8133648FD903FE00B5
-:10E8A000FF8133E00FD98B000070000000000000F2
-:10E8B000A8019C00878119E40BFA135E8087B22DB2
-:10E8C000EC0D79019E00D5902DF80B78037E08ABF6
-:10E8D0009129850B5102DC48B64021400B50022A99
-:10E8E000046000000000000000008C14B5206DC81A
-:10E8F0000B72025C80872069C0885302CC819750DC
-:10E900002DC80BF70ADCC0840121441B7022DC00F7
-:10E91000B50021C40B50860000200000000000005C
-:10E920002014CF3091002CC00B34024C0083002CFB
-:10E93000F20B10220C0091002CC80B180ACD01A379
-:10E940000028600B2102CE20B840A0540B1802080A
-:10E950000430000000000000A811BD00F9002FC025
-:10E960000FF4027C12CF033FC20EB003FC049B02E3
-:10E970002EF20FA40BDC00CE00B0C88FA403EF0072
-:10E98000F88032F51FDD032A04600000000000005B
-:10E990008000EC40E9003AC00FB103CC00F3003E28
-:10E9A000C00DB409EC18F9103E104FB10A6C80F993
-:10E9B0008936820BA603EC50F9503EC01F900360CD
-:10E9C00000300000000000000110FC00FDA03DC070
-:10E9D0000C70832C00EF0235C00DE203FC04FF0233
-:10E9E0002DE08EF0033C10DC003F800CD803FC00CF
-:10E9F000DE1833F04FD003C04430000000000000A8
-:10EA000081006C00B9002EC04CB0036C008B023644
-:10EA1000C00DAC12EC0079002E300D3D42AC0089E7
-:10EA2000881A100D8602EE04BB4022E00B9002E033
-:10EA3000401000000000000080052C01B9002EC02D
-:10EA400008B042AC000B0526C0099420EC00B98048
-:10EA50006EC488B0822C009B822E42088102E48022
-:10EA6000B80022C10B9002E000400000000000004E
-:10EA700008040C10B1252CCA083446CC08830024A5
-:10EA8000C20B0252CC8183002C0019B242AC8081AF
-:10EA9000082880090002C440B10020C00B1002C247
-:10EAA000010000000000000000056C00B9003FD02C
-:10EAB00008F607BCC2AF3075DC0D1602FCE0B95099
-:10EAC0003ECC0CB0232C10D9003E000C9003EC007F
-:10EAD000DE0132C00F9003C00350000000000000B0
-:10EAE000A019FC00FD103FCA2EF6036D949F303A2A
-:10EAF000C90C8393FC80FF117E190BB103FC40FD10
-:10EB0000083B000FC003FC807700BFC00F5003E834
-:10EB10000670000000000000C001FC00F49437C83B
-:10EB20000D69637C10FF6237C00DB4037C60D48034
-:10EB30003F400F48233200CE00BF408FD10330E06A
-:10EB4000FF303B600FD803B00070000000000000F1
-:10EB50008010ED20B82423F449A2023F408F5123B6
-:10EB6000DA08F6123D809B802E494B80034000D985
-:10EB70000122740BD5022100BF422E490B9C02E0FA
-:10EB800004300000000000008805CD80B82028C1B6
-:10EB90001BA0024C0093202CD80B3402CC00900117
-:10EBA0002CC61AA00268088300A4400B10020000C3
-:10EBB000B31028420B1402A20170000000000000F4
-:10EBC000C015AC00B8602AC01BA08EAC019B052606
-:10EBD000C003B0426C009B802EC003A00669009960
-:10EBE00080AAC00B900263003B002E584B9002F0AD
-:10EBF00004600000000000004011EC04F880BAC07E
-:10EC00000F30036C10DB0336C08FB003EC08D880E4
-:10EC10007EE00688034108CBA03E640F900B2A00DB
-:10EC20007B003A010F900390047000000000000088
-:10EC3000E001BC00FC8432C00CF9035C10EF003B27
-:10EC4000C00C70039C00EC013FE44FD103F100F3D2
-:10EC50000533600FD003BC04FF003F210FD003F841
-:10EC600000600000000000004010AC00C8403AC640
-:10EC70000DB4036C00F30034C00EB0036C00E91057
-:10EC80003AC00F84032C60CB0032600C500361004B
-:10EC9000CB003E900E90A3900420000000000000E6
-:10ECA000C8053C02880101F020B0013E003F00335E
-:10ECB000C00BF0323C08898022C0011512AC008BD9
-:10ECC0000022C048DB022F408F002E0108D4803282
-:10ECD0000040000000000000E0054C00080008F0C3
-:10ECE0000800124C00330124C04A30024C00A0201E
-:10ECF00028C00B10024604830420C02918020440D7
-:10ED0000B3002C400A1C42B100500000000000007B
-:10ED100020011E018D8021E018C8021E00B3A02131
-:10ED2000E01B38020E01A78021E009D840D64087B9
-:10ED30008001E0095902160097842D6008584000B0
-:10ED4000004000000000000048082C40C00038C40B
-:10ED50000C30274C20F30134C10E3A034CC4E000C0
-:10ED600018C80F34034440C30030C00D90032E0078
-:10ED7000F3003E400E10019A020000000000000067
-:10ED8000401DBC00F9000ED40EB003EC20FB203F68
-:10ED9000C40FF103EC60DB103FC04FF003A446FB4F
-:10EDA00000BDC00ED00BB400EF483F400F5003D061
-:10EDB0000660000000000000A805EC00F80032D456
-:10EDC0000F8003AD00EB0822D20CB6036C00F2807A
-:10EDD00036C00EA0032810CB00B2C00FD6032810F7
-:10EDE000FB203E404F99132B0070000000000000F4
-:10EDF00048119D10B40121C18BC0021CA0BF042783
-:10EE0000C80875021CC0B60021C008F04218108F57
-:10EE10000021C00B54A21C00B7042D410B5202125A
-:10EE20000460000000000000C0009E80B688A5E0DD
-:10EE30000B78129E81A79025E48878021E80BF80FF
-:10EE400024600B68021E00878461E00A1A0A1A0017
-:10EE5000B7A02DE00BDA0230002000000000000017
-:10EE60004814CC00BAC0A4C00B34020C00B3002478
-:10EE7000C008B00E2C00B39820600933022C00A308
-:10EE8000C820C00B10020C00B3002CF00B100212B3
-:10EE90000430000000000000E815A800FE80368164
-:10EEA0000BE003A800EA00B28008A0036800FE009F
-:10EEB00036A01FE8133B82CEE022808EA0033800EC
-:10EEC000BA003FA20FA0033A046000000000000057
-:10EED0004800E000F8203A10078003C100F800382D
-:10EEE000002F8003A001F8423E050E800BE080D881
-:10EEF000003E000F8403E100F8003E000F840BD2B7
-:10EF000000300000000000000810E400C9003A5082
-:10EF10008F9083A402D100B2404C90232408C901F1
-:10EF20003E400C90032400C10032400F140A2520FB
-:10EF3000E9003E420F9003C20430000000000000D0
-:10EF40008004640A890022700B90122580C9002277
-:10EF5000400A9003640089202C400A900A2400890A
-:10EF6000C132400B9802060089902E400B9412E0AB
-:10EF700000100000000000001801040089006A422F
-:10EF80000A1002A4008900A2400A9002240009008D
-:10EF90002E4058100224008980AA600B9002A4041D
-:10EFA000A9002E400B9402C60040000000000000A3
-:10EFB00008040480810060480B10020481812060F5
-:10EFC000480A1202448881000E590A140205008181
-:10EFD000C028504930028C8401602C500B1002C2B2
-:10EFE0000100000000000000B80D6140C0542A007C
-:10EFF0000E8503A000C85032151E05222142C8000C
-:10F000003E000C80030004C8003A004F8503A14075
-:10F0100068003E000F8003EE035000000000000077
-:10F02000981DE440FD033E440FD003E448E9103E40
-:10F03000450F9113E440FD003F440FD003F402FD5F
-:10F040004033500FD4237440F9103F400F5403E66F
-:10F0500002700000000000001805E400F901336AA6
-:10F06000099003B634F9C832640C9A03E6A0DD00B7
-:10F070003C700F9003A500898033320FD8133C00F9
-:10F08000FD0070500FD0030600700000000000006B
-:10F090003810E280B8A822100888022100B8C020E9
-:10F0A000300D8E87838888002E340B8A822280DC84
-:10F0B000E022380B80022000F8A82A280B80020EDC
-:10F0C00000300000000000000805C420B10020400E
-:10F0D0000A92928411B1246858091102C420910146
-:10F0E0002C481B500274849548AC480B94020404CD
-:10F0F000B10224480B10020205700000000000005D
-:10F100001811A400B12022400A90062C01B9002A4F
-:10F1100040099002A4009B082E480B121A74009517
-:10F12000452E600390022400B9002E400B90020689
-:10F130000460000000000000A015E400F9803040E9
-:10F140000E1603A400B90432400D9002E400D94029
-:10F150002E401F9803E580D900AE6007100B2601F2
-:10F16000B900A6400F900B280470000000000000BA
-:10F170002801A400F900BE40AC9203E400F900B4F9
-:10F18000400F9003E400E9003E600F9003A480F973
-:10F190000032000F9083E685E10032440F1003CA6D
-:10F1A00000600000000000002810A000F8003200FD
-:10F1B0000F8013E094E00032000C80036000C80070
-:10F1C0003E000D80432008F80032000F8003E0402D
-:10F1D000F80032004C8023CA042000000000000028
-:10F1E00028052800BA0023800BA002FB046A002235
-:10F1F000800AA003680A8E883A8008A0020800BA34
-:10F2000000B72203E402FA008A00228008E802CA5A
-:10F21000004000000000000028054C00B3006041E1
-:10F22000033002CC41A30004C00B30022C00A380A9
-:10F230002CC00938020C00B300A0C00B3402CC80F3
-:10F24000A10020C0083802CA0050000000000000E1
-:10F25000A0011C40B70061000B7102DC00A3002577
-:10F26000C81938025C80A7000FE80964221000B3B7
-:10F270000025C80B6002F200850123E8087082E8CF
-:10F280000040000000000000A8081E20FF80A1A090
-:10F290000F7A42DA00E7E835F02F7B621E82E680C3
-:10F2A0001DE00DF80B1E00F78031F00F7803DE0C27
-:10F2B000EF8031F82C7803EA000000000000000025
-:10F2C000081DAD84FB683E000FB003E800FB00FAA8
-:10F2D000D80EB503ED00DB003AC08EA003E000FBC2
-:10F2E000403EC00BB043C404EF02BFC00FB003C226
-:10F2F00004600000000000000005FE42C7383364CF
-:10F300000E7C035E00DFA037F00DF803FF20CF81F5
-:10F3100033E20CD803BE007FC033E00CF9037E005B
-:10F32000FD803FE00FF803C0007000000000000007
-:10F33000A8119C0087A021140871021410D7203551
-:10F34000C00C7003BC0085082BC04D4602D100B72D
-:10F350000021C00860020880F5203DCA0F5403EA6E
-:10F36000046000000000000000009C118F01208458
-:10F370001AF0021800A73465C0097102DC008E0083
-:10F3800029C00850069C00BF882DC40A6026582456
-:10F3900097006DC09B7002C00020000000000000BC
-:10F3A0002014CC008B4020001830020000BB022447
-:10F3B000C0083020CC0081C028C00B0482E010BB04
-:10F3C000A02CE00A20060000B30028C00A10028822
-:10F3D0000430000000000000A815BC00CF1032006F
-:10F3E0000EF00B2400EF0037C00DF003FC06C150F7
-:10F3F0003BC00CB403AC00F8C0BEC82EB0036E0115
-:10F40000FB002DC04B9002EA0460000000000000E9
-:10F410008000EC04FB003E000FB003AD009B003EFB
-:10F42000C00F3003AC00F8002EC005B403ED00F8A7
-:10F430004032C0090003E091E3003EC00F9011E0AC
-:10F4400000300000000000000110EC00EF0033204D
-:10F450004FF003B400EF033AC00FF0033C00DC00B0
-:10F4600031C08DF803FE04CF0032C80CF00B1C0035
-:10F47000CF9333C08C4002004430000000000000F5
-:10F4800081046C00BB00A2040B30020E00AB002A0A
-:10F49000C009B0036C08A8C036C008BC02EF02ABBC
-:10F4A000D020E008B82226108B0022C0209C022029
-:10F4B000401000000000000080052C00BB0026006A
-:10F4C0000AB002A208AB006AC00BB00A0C008B8025
-:10F4D00022C009B102EC40880822C008B802260008
-:10F4E0008B0022C0089802A000400000000000002D
-:10F4F00008040C00B30024000BB0020001830020BC
-:10F50000C00930024C00000424C00830064C0080C2
-:10F51000002CC008000200418300A2C008100A822B
-:10F520000100000000000000000D7C00EF08260034
-:10F530000EF002A000E7003BC00FF5433C02DA00EA
-:10F5400032C00DB003EC00CB00B2C00CA0032810F9
-:10F55000CB0032C00C80038003500000000000008C
-:10F56000A00DFC00FB003B000FF003F000FF023F8A
-:10F57000C00DF203BC00F4003FC00FF003FC00F725
-:10F580000033C00F6003F088FF003FC04FD0036816
-:10F590000670000000000000C005FC40FC313B0884
-:10F5A0004FF943EF00DF3032210F94077D80EF38B1
-:10F5B00032091C3803F221FD0033C40CF002FC00B8
-:10F5C000DF0033C00FF003300070000000000000C7
-:10F5D0008010EC888B6022E50EB222EC80AF112AFD
-:10F5E000200BB113AC488B4534CC48B0026B00BA49
-:10F5F000823600088822C0048800A2088B88622016
-:10F6000004300000000000008805CC00A130280074
-:10F610000B3202CC00A3222C008B1206C880A30060
-:10F620002002CA3006C401B10068800920028800A7
-:10F63000830020C20B000AA201700000000000003D
-:10F64000C015AC008B6162C00BB202E800AB022AAD
-:10F65000611B9002A800AB0020C00AB0026C04BA83
-:10F66000002E40899002E608980022000BB002B0FC
-:10F6700004600000000000004015EE00F8013A04AC
-:10F680000FAC03EC90FB023EE00B90426780A8C4F5
-:10F690002248228603E140B8022A40299003EC0266
-:10F6A000C94832400FB01390047000000000000001
-:10F6B000E001AC40FB001FA20EF882FC08FF003FF7
-:10F6C000C00FFA439644D4913F400DC003FA00FFA7
-:10F6D0000825800EE003D000EA003F800FC00378C9
-:10F6E00000600000000000004010AC00E1203A5033
-:10F6F0000F90032C00EB0876050EB027E010EA40CF
-:10F70000B2C00CA4432500F80032080F8043E80083
-:10F71000D108EE400F0003D00420000000000000DC
-:10F72000C8052C008B0022D00B90822C0087402231
-:10F73000608BB002E000D85022D00CA0036C00B364
-:10F74000C83ED00BB80225088A202A808BB882F2E6
-:10F750000040000000000000E0056400A0C024C0DC
-:10F760000938022C0083032000103022CC008300D3
-:10F7700060080A30824C00B1C000D10B380284808E
-:10F7800082012080033802F80050000000000000D1
-:10F7900020011640849825E00B7A02FA48A32061E4
-:10F7A000240B7900CEC093A421A60B7812DE80B67C
-:10F7B000802D240B4B021A40858121600B4802C822
-:10F7C000004000000000000048080C00E2A0B4FE69
-:10F7D0004BB80B0E00A3B024A80E1B02CEC1C3C0B1
-:10F7E00030682E3A474E80F18030800F22838000AF
-:10F7F000C21038804F0007D2020000000000000055
-:10F80000400DBC10FE043BC107F0031CC8DF2A0BEF
-:10F81000C48FD143F8027F003FC00CF10F3C00F2CF
-:10F82000113F411F5203BC0EED143F400FF803D0AF
-:10F830000660000000000000A805E400E900328036
-:10F840000EBE4B6F00CB827AC02CB0032C00C900D7
-:10F8500032002C10032C08C00026406C9013241298
-:10F86000C8013E000FB80B2A007000000000000025
-:10F87000481194008D0021800B70823C2083322936
-:10F88000C008F0201400800023000850069C04D714
-:10F89000022880086002081087002DC00B40021269
-:10F8A0000460000000000000C0009E00A78021E06E
-:10F8B0000B5C121E0487820DA00978160200B4802A
-:10F8C00025E00B78029E00848021220808021201A4
-:10F8D00084C02D200B080230002000000000000032
-:10F8E0004814CC008342A0D80B34820C00A3022021
-:10F8F000E008B0020C88B32124D80B3E028C0093A0
-:10F900000828C00838022C058B012CE00B300212AD
-:10F910000430000000000000E815A800EE0033905D
-:10F920000FA00B6800CA017FA80CAA033A12FEE2DE
-:10F9300037B00FEE021800CA4036A008A08B28008E
-:10F94000CA812EA00FE0033A04600000000000000E
-:10F950004800E000F8083E000F8003A202D8403EB5
-:10F96000080F8013E0404840B8040884036100FC9D
-:10F97000003F004FC003F100FC003F040FC003D262
-:10F9800000300000000000000810C400F9003050F2
-:10F990004CB9036C18F90036400E9C23A4024100B8
-:10F9A000B2440E9A03A680C9003A600A9003A4806C
-:10F9B000C90034400C9003C2043000000000000075
-:10F9C0008004640089402278089402E410B9003C65
-:10F9D00062189482A40089C82270481E016780D1F1
-:10F9E00000BC42081002252089022240089002E053
-:10F9F000001000000000000018052400B12822407B
-:10FA000008B082640439412E480A90020418A920E3
-:10FA100022424A90022C0489042B4802D002B40AE4
-:10FA20008D8023C048D002C60040000000000000C6
-:10FA3000080404808120A048281002C400B1242AB0
-:10FA4000400812428580A120A048089002440095F9
-:10FA50002C2D5A0A728214A085A8214A085282C20B
-:10FA60000100000000000000B80D4140F8503200D5
-:10FA70008C05036140F8512E000A85022000E850F1
-:10FA80003214068517A000C8203A080E8203A08011
-:10FA9000C82032082CC203EE035000000000000012
-:10FAA0009819F440FF103F440BB003E400F9103DF7
-:10FAB000400FD103F4589D103F444FD003D500F9B7
-:10FAC000003E408D9003E4B8F928BA6A0F9003E62F
-:10FAD00006700000000000001801E700FD883E608D
-:10FAE0008FD0032401DD8073400FD803A604CDA27C
-:10FAF00033781CD0033401F5883B680CDA47378033
-:10FB0000CD8832620CDA03060070000000000000AD
-:10FB10003810E380B8802E140B0A822280B8F8A235
-:10FB2000000B8FA383E088EB22A9088812A005B8F8
-:10FB3000002AAA88801362828880222888A4020E64
-:10FB400004300000000000000805C500B10A2C4187
-:10FB50000B10060420A10000408B1046C401911137
-:10FB600024586890C20400B100A85009140A0595F1
-:10FB7000A108A04228110A02017000000000000044
-:10FB80001815A418B9202E500B90062409B900228C
-:10FB9000408B9102840099642440589002A420BBB9
-:10FBA000002A4009B0020501A900224088920206FD
-:10FBB0000460000000000000A015E600F9403E408F
-:10FBC0004F980B2480D90022720B9803E484D9004B
-:10FBD000B6700899022400B9002A400D94C225008D
-:10FBE000A90022400C9403280470000000000000CB
-:10FBF0002801A680F9083EC00F9143E400F9003EB9
-:10FC0000500F9803A500E9003A640F9003E400F94F
-:10FC1000003C406E9003E420D9003C400F9082CA23
-:10FC200000600000000000002810A000E8003E0076
-:10FC30004F840B2000F80036010E8003E000C8401E
-:10FC400032102D8003E054C80036100F0483E050BA
-:10FC5000D80412000C000B0A042000000000000071
-:10FC6000280528008E422EA28BEA022808BE89377A
-:10FC70008448E01228028EC023B04D6062F80086EE
-:10FC80000023800BE002F8000E00228008E4020A44
-:10FC9000004000000000000028054C00A3002C805C
-:10FCA0001BB09A4C109B8024C00A30000C049B208F
-:10FCB00020D60830028E08A30424C0193402C707D6
-:10FCC000AAA4A0C04834020A0050000000000000AE
-:10FCD000A0010E0087002DC00B40025C40B314252C
-:10FCE000E0087A029EC09240A000496002CE028ED7
-:10FCF0000121C08B5402C408864021C88810022804
-:10FD00000040000000000000A8081EC0E4803DE2A2
-:10FD10000F58035E90B6A235E00E7C231C00D680FF
-:10FD200031E0847803DE00C78035E00F6803DE0031
-:10FD3000E38033E82C78032A020000000000000072
-:10FD4000081DAC90FA007E400F9003AC01FB003C14
-:10FD5000410F300B2D04EB013EC00EB003EC00FA56
-:10FD6000003FC00F8003EC00E9603EE40F9003C247
-:10FD700006600000000000000005FE20FF903E200D
-:10FD80000CA9072E44C99130A00CB8632F44CBA115
-:10FD900036208CF8033600CF8233E00CF8232E0097
-:10FDA000CEC03BE00C6803000070000000000000C3
-:10FDB000A8119C84B3542CF428BA8A3E4081A0290F
-:10FDC000B00F7842AE00839033E80DE100854082A9
-:10FDD0002423C60D71035EE087002BC10D44022A67
-:10FDE000046000000000000000009C0835146DC095
-:10FDF0008872325C8084302B880A70425CA891083B
-:10FE000025C80970024C22830A61C009200204003F
-:10FE1000870021C0086002000020000000000000F0
-:10FE20002014CC10B3856CDC0834024D21810028ED
-:10FE3000024A3112EF0C91C220F00830428E00824B
-:10FE40004020C8192802228183C028D409000A084A
-:10FE50000430000000000000A815BC00FBA03EC05C
-:10FE60008C04127D10CF023A5008C0427D525801D6
-:10FE7000362269D0132A00888232F009B8822F0016
-:10FE8000C9C823C00C8A032A0460000000000000D7
-:10FE90008000EC00B9403C504F8023AC12FB002A9C
-:10FEA000C06D8013AC00E804BA100F8003E800F3C3
-:10FEB000083C800F9083EC04F9602CC20F8083E033
-:10FEC00000300000000000000110DC00EC2C3FF0CE
-:10FED0008CFA8BBC00FE003F000F79033C00CE087B
-:10FEE0000BC20CF003BC00FC0033408C7A033A00D8
-:10FEF000C50033C04CC803004430000000000000BF
-:10FF000081046C0088C02EE00894022C00BB80663F
-:10FF10003016B0022C00DA4C22F008F003EC00EBB3
-:10FF2000C022680094022C02A98022C0080C02A002
-:10FF3000401000000000000080052C00AB042EC023
-:10FF400008A4062C04AB102E604380826C018180D3
-:10FF5000280A089100E000B88002E00880022D80A5
-:10FF600088C022C00882022000400000000000007B
-:10FF700008040C0080442CC828A0220C04B3262CB2
-:10FF8000C88801060CE09120200C380422C048A348
-:10FF900042A0810800020C80810020C0280002825B
-:10FFA0000100000000000000000D7C00A9403E445C
-:10FFB00008B1032C40EA492E0D0BB6137D80C940D1
-:10FFC000BAD00CB403AC00F80032400C800B200017
-:10FFD000C500B2C00C800300035000000000000008
-:10FFE000A01DFC04FC003DC50BF100FCD0772937B7
-:10FFF0000C8E7403FC08FD693FD80FF003BC00EFC2
-:10801000003F4007C003F040FD003FC00FC003E831
-:108020000670000000000000C00DFCC0DC803FC8EE
-:108030000F48037C20FF6837E00EF1039C00BF204F
-:1080400037E00CC8133C40ED60BBE42C434B70A000
-:10805000CC2C3F090FD843700070000000000000D6
-:108060008000EDC0B8802FF40F98023F00BF42227D
-:10807000CA08F4023E00BFD0226028880A3D808DE5
-:108080004022C80881022180DBC02EA50B98422027
-:1080900004300000000000008805CC10B0002CC0A7
-:1080A0000B2002CC00B32026C08A36128C41B300CC
-:1080B0002E400800020D81A13022C889A24208206A
-:1080C000B0002C400B902662017000000000000000
-:1080D000C015AC00B8502EC00A9002AC00BB002204
-:1080E000C008B0622C10BB042AF04A88020C008140
-:1080F0000022C009B8802600B8802E210B900230E3
-:1081000004600000000000008015EC00D8C03EC0F4
-:108110000B8003EC00FB0036800EB003AC00FB00CC
-:108120003CE00C0C032C00E90010C00C8C03060092
-:10813000F8CD3E220F18034004700000000000003C
-:10814000E001BC00FF003EC00FF0037C00F7023FDF
-:10815000E40F70037C04B70037400DC003FC00FD42
-:108160000037D00EC043F400DF003F808FDA03F801
-:1081700000600000000000004010AC00F8103AC0A1
-:108180006DA613EC00CB003AD00FB0032C10DB101F
-:1081900036D80D8403EC06C9083AC00E8603A860E1
-:1081A000F8203A400C900354042000000000000026
-:1081B00098053C00BB4023D00830023E10AF0020A1
-:1081C000C00BF0023C008F502EC8068A02FC008DC6
-:1081D0002482D60832022D083A4022800D90036294
-:1081E0000040000000000000E8054C00B02028C25C
-:1081F0000804028C00130228C00B30020C3093805C
-:1082000024D0092002CC00914008C02A1402810029
-:10821000900068000818023A0050000000000000BA
-:1082200070011E00B4A021E008C8129E00B3822194
-:10823000E00B7A0A1E0097802DE10A4802CE409595
-:108240009029E40858029A00B78821E00958025C96
-:1082500000400000000000004A000C00F08038C41C
-:108260000C25038C20930038C40FB0030C80D3007E
-:1082700034C00D0413CC0899002AC00E21038804D1
-:10828000F30038C00C11831202000000000000004F
-:108290004215BC00F4003FC30EC0031C00AF4A7F70
-:1082A000C40FB203FD01EF103F840FC003FC00E9CF
-:1082B0000037C20EF1477C00F7003DC00F5003D0DD
-:1082C0000660000000000000AA15EC08F8003ECA95
-:1082D0000F9003EF21FB807A408FB2A12F00CB607B
-:1082E0003EC00FB003EDA0E93032C02DB003E40072
-:1082F000F8003E000FB003EA00700000000000002C
-:10830000C8919D00B4012DC80B7002CC808F202134
-:10831000C08B76035D00870A2DC00B4022FD008DC7
-:108320001023C8085012D400B7002DC00B7002F201
-:10833000046000000000000081009E00B4802DE079
-:108340000B7C02DE40A7822DE00B3A028E00879064
-:108350002DE00B58025E00A5A265E0086882DA00F5
-:1083600095802D600B7802E00020000000000000E6
-:108370000884CC00B0092CC00B3802CC0083002E3E
-:10838000C00B30424C0083002CA00B0402CC0081B7
-:1083900000A0C008B006CF80B3102CC40B3102C3BC
-:1083A0000430000000000000E805A800FE803E80C8
-:1083B0000FE813E800EA003FB00FA003A802C200D4
-:1083C0002F880FE003E800EA0036000CE003F920F4
-:1083D000DE803FA04FA803FA046000000000000008
-:1083E0004800E000F8103C100F8083E100E8002214
-:1083F000060F0013E001F8003E000F8083E000F854
-:10840000003E000F8423E000F8003E100F8003D2EE
-:1084100000300000000000000800E400F9103E44B5
-:108420000D9003E400F9003E400C90122400F91076
-:1084300032408F9003C400C90032100C9C0124000C
-:10844000F9103E700F9002C20430000000000000DE
-:1084500080146400B9C02E48089102E400B9002ECF
-:10846000400D90036700B9802A600B9902E40081F7
-:108470000022402C90122520B9482E520B9402E085
-:10848000001000000000000018052400B9002E4074
-:10849000689046E400B9002EC0089002A460B900BC
-:1084A00022480B9006E4028900A040089002A61022
-:1084B000B9000E400B9002C6004000000000000012
-:1084C00008040480B1002C48081002C484B1202C98
-:1084D00040091202C480B12028400B1002C48089D8
-:1084E0002020404B120A8484B1202C488B1002C2F9
-:1084F0001100000000000000B80D6140BA002E001D
-:108500000C8003E808F8503E140C85032000B800E6
-:1085100032000FA003E140C85032140CA503A14063
-:10852000F8003E000FA003EE035000000000000022
-:10853000880DE440FD003E440FD003E440B9113FF4
-:10854000400F91036444F9103F400FD003E440FD15
-:10855000103F108CD1037440FF103F440FD003E64E
-:10856000067000000000000008056620ED00336979
-:108570004D50435600F9A034400F9A0B3400DD8073
-:108580003B400B5003E400F90032E00ED003F4004E
-:10859000FD003F400CD003C600700000000000004A
-:1085A0007810E280880422100B80022009B8F022A3
-:1085B000000B8E12A000B8522E000B8002E005B80E
-:1085C000AA233E0D8002E000B8003A00088002CEE7
-:1085D00004300000000000004805C420A900A444A5
-:1085E000099002C500A1082C400B11820400B100C3
-:1085F00028400A1042C400B500A140081002C4007F
-:10860000B1012C40081020D20170000000000000D1
-:108610001815A400890422400B9000AC0039002AF0
-:10862000400B1002A400B9002E480B9012E400B9D0
-:10863000002160099222E428B9000A50089006C679
-:108640000460000000000000A015E400E9003640CE
-:108650000D9003E400F9003E480F90032400D90078
-:108660003A780E9803E400B900B2400E9223E60077
-:10867000B9503E702C9003E8047000000000000028
-:1086800068018400F9003E404F9C236400F90436E1
-:10869000480F9003E400F9003E600F9203E400F9F4
-:1086A000003E408F9083E444F90078640F9003DA31
-:1086B00000600000000000002810A000F8003E004C
-:1086C0000F8203A040E8003E000D800320C0C88058
-:1086D0003E120F800360007C0033000D8013E01019
-:1086E000C8643E080C8203CA042000000000000099
-:1086F00028052800B6E00FA00B60823800AA002EE3
-:108700008008A042BA00AE202F880BE5022800BAEC
-:10871000D8378008EC02F8048E002F900DE002CAD2
-:10872000004000000000000028054C00B0242C6030
-:108730000B38028E80AB002CC00930020D0800807F
-:108740006CD00B3402CC00B8C02000483412CC40AE
-:1087500083002CE00A3502CA00500000000000002F
-:10876000A0011C40B7002D028B60029E0087202FC5
-:10877000E00872029E00A4002DC00BF8029CC0B35A
-:1087800002A5C0085086FE0087002FD0097002E8BD
-:108790000040000000000000A8081E00F4803D20FA
-:1087A0000F58039E0067803DF80D38021A10448070
-:1087B0003DE00F5803DE20B48033A02C6803D600C0
-:1087C000C7813DE00C7803EA0200000000000000D1
-:1087D000081DAC08F8003E008F80036C003B123E81
-:1087E000CA0FB503C800F8047EC00F90036C80FB6D
-:1087F000043A400F9023C800F9013CC00FB003C2F7
-:108800000660000000000000C005FE00AC9031488A
-:1088100008F803FA00CF803FE00CFC133E04FC8014
-:1088200035A00C7803BE00DF803B2024F8032E40E7
-:10883000CF8033E003F903D0007000000000000097
-:10884000A811BC0080000100087202D00087002D32
-:10885000C80AF0029840F50061410074021C00B49F
-:108860000021C80860023E20860821D80F5002EA85
-:10887000046000000000000018009C00A40021001B
-:10888000085002D80097002DC08871021400B00073
-:10889000259008C0829C40930029A1886002141290
-:1088A000874029400B6002C4002000000000000047
-:1088B0006014CC0080D0A000081C02C00093002CE3
-:1088C000D00AB0268000B30024E40808028C00B06F
-:1088D0000202410808020301810028421A0042D81E
-:1088E0000430000000000000F815BC00E8C0328031
-:1088F0000CB503E4009F003DE00CF00B2400F800F1
-:1089000036E00C2503BC05D8022A0008BA022A006A
-:10891000C1023A508B9003EE04600000000000009A
-:108920008000EC00FB083E800FA103EC04EB022E5C
-:10893000C60FB0174400E8003A400F80026C00FBFD
-:10894000003EE00F9093E100D90026708F9001E186
-:1089500000300000000000000010FC00FC03372481
-:108960000DF803E000FF003FC18DF00B3800CC0094
-:108970003FC00FFA033C0CFC043B800CA003942086
-:1089800089053B004FD023C00430000000000000E8
-:1089900080046C00B006201388A802EB00BB002EF8
-:1089A000C008B0022A00A8802EE00B941A2C00BB4D
-:1089B00000A240299802E200A98422200B9802E03C
-:1089C000001000000000000080052C00B80022000C
-:1089D000098202E600BB002EC00BB0022600888090
-:1089E0002EA00BA0022C00B3002A00099802EA2056
-:1089F000A9802A609B9882E00040000000000000EF
-:108A000008040C00B8002000090802C400B30026C6
-:108A1000C0003002000081002C410B00020C00B0AD
-:108A20000020C00B0002C880A80020410B1002C229
-:108A30000100000000000000000D6C10F850B200B2
-:108A40000D8003E000FB003DC00DF0132402C806BA
-:108A50003E800FA0033C04FB0078800CA003E400E0
-:108A6000E9001A400F9003C003500000000000000E
-:108A7000A01DFC00F4203F000EC002F001FF003FEB
-:108A8000C00FF023F000FD003FC00FC003FC00FC4E
-:108A9000003F409CC003F040FD003F400FD043E842
-:108AA0000670000000000000C005F000ED23B7488C
-:108AB0000CE1C37CC0DD8037E00FCB03FE08FC284F
-:108AC0003FF01CFB237C01FF1477E24FE8237C007E
-:108AD000C48033482CF822300070000000000000F1
-:108AE0008010E0E0C9C0225B8896222D00892222F6
-:108AF000CA0B9E22E2A0B9612CE0889F023D85BF8F
-:108B000060265048A0023C008800225008B0022095
-:108B100004300000000000008805C080B11020442F
-:108B20000BB202CED081082CC00B01028C08B30816
-:108B30002CC90810628C60B33224800AA0026C0336
-:108B40009A01264448B04262017000000000000013
-:108B5000C015A4A08B0222E00BB062AC9899002A49
-:108B6000C20B9806E400BB022EC00891422C10BB39
-:108B7000006E800A80026C001B00064048B80A7034
-:108B800004600000000000000011E700A1007678FA
-:108B90000FB003E810D9003ED04B9E13AC08B8A02C
-:108BA0007EC608A8022C01BB0026304E20034C18BC
-:108BB0009980B4404C3A034004700000000000006B
-:108BC000E001B200FDC53BC04CD0036A02ED0633A4
-:108BD000C40FD053F800FC907FC10F7803BC04FF92
-:108BE0000037640CF103A400EDA13B400BF083B807
-:108BF000006000000000000040108C00CB203E719F
-:108C00000FB3039802FB0236480F9003EC20F800E4
-:108C10003ECC0484032C00DB043C100FA003EC00CA
-:108C20009B0032400C9003D00420000000000000A4
-:108C300088052C028B482EE00B34036B008BF52249
-:108C4000F20B9C03AF00B8502EC008B0027C008F1E
-:108C5000000E5D0B8002F54083502354089C02E611
-:108C60000040000000000000E0044C0081812E4024
-:108C7000032C020433990020F04A2880CC40B00035
-:108C800026100820024C0083002CC0092002CC00D2
-:108C9000A00228400808027A0050000000000000EE
-:108CA00020010A0085802DF80BDA02D64085A0212C
-:108CB000E00B48069204B5802D210800024E008783
-:108CC000A42D600B6802DEC2AD902B60285882DCB8
-:108CD000004000000000000048084C40C3102C6C0D
-:108CE0000F300386A2F9B0B0E00F2983CE44F380A1
-:108CF0003CAC0C30030C00C3003CD50F2003CEC1AC
-:108D0000E010B8400C0003D2020000000000000098
-:108D1000C01DBC00EB003ECC0F32036408F9003BE1
-:108D2000900FF043E440FB343F8107D103AD20EBCB
-:108D3000207FC40FE103FC50CD1035400FD003D08D
-:108D40000260000000000000A805E404FD043D40AE
-:108D50002D30023C00C9013EC04FB843EC10FB006F
-:108D600032400FA023EC80CB3632804DA8032C106C
-:108D7000CB0032400C90036A00700000000000003D
-:108D8000C8119008B5002DC0085002BC0285042D02
-:108D9000C08E6006D804B70421400B7002FC80AF7F
-:108DA0002821C00B70020640870021500850023273
-:108DB000046000000000000080009E20B7802B703F
-:108DC00008F8061E0087802DE00B7032DE04378421
-:108DD00025E00B6806DE80878021A11B68021E400B
-:108DE0009F80206008580220002000000000000042
-:108DF0004814CC20B3002C8088B4228D0083902CA2
-:108E0000C00A3802CE08BB2024D00BB302CC00A38A
-:108E10000060D20B202A04089350204008170A0251
-:108E20000430000000000000E815BA00BAA03F843A
-:108E30001CE00B38408E062E800BE303F880FEE426
-:108E4000B7900FEC02E8008A00A3A009E4032A020D
-:108E5000DEC0F3800C6C033A0460000000000000E8
-:108E60004801E000F8403E000F8413E000F8002EB7
-:108E7000300A8403E004F8003A020F8013E000F89F
-:108E8000003E040D8083E040E8203E002F8003D2A6
-:108E900010300000000000000810A400F9003C643D
-:108EA0004E90832480C90032E00F10032500F900A2
-:108EB00032440F92236400C10032400C9013E4004E
-:108EC000C90022400C9003020430000000000000A2
-:108ED00080046400B9202E404896222500D9C0A203
-:108EE000700B98022400B940A2704B90022400D964
-:108EF00000A2402C9422E4028900A240289413206E
-:108F0000001000000000000018012400B9002E40ED
-:108F10000A900204008180A2440B910225001940AE
-:108F200062400BB402440089002040089082C401D2
-:108F300083022840489082060040000000000000A4
-:108F400000040580B1006C5108141A05009300203C
-:108F5000408B14020500B12020500B1406048091B0
-:108F6000202040091002C4A88100284A08904A42E3
-:108F70000100000000000000B80D6000F8003E0095
-:108F80000E80032801C85032948BA0032000B050FB
-:108F900032800F80076151C85022000C0003E0842A
-:108FA000C8043A080C00032E035000000000000023
-:108FB000989DF440BD413F500FF403F510FD003E75
-:108FC000400FD403F400FF102F404FD440A448F9C1
-:108FD000123F5A8ED283F4A8F52C374A0FD283A6BB
-:108FE00012700000000000001805E680FD283F4CCC
-:108FF0000F50033C44CD403FD00DD0021401FDA0E2
-:10900000314003D003E789F9907E500C9403E6C009
-:10901000C910326D0F9102C6007000000000000000
-:109020003810E080B8012E0C8B8482204288A06E1C
-:1090300020088003600098E82200098002E3C0E86D
-:10904000D02E28088A23E284D8A0223D0BC802CE65
-:1090500000300000000000004805C5B0B1002C48F9
-:109060000B13020402B1202E40881022C400B11458
-:1090700024400B1052C400B1212D480A5202D500E1
-:10908000BD00AD400B5202D2017000000000000094
-:109090001855A500B9822E498BB012241099022EC2
-:1090A0004008B200650099802644099102E409A9AC
-:1090B000042E460AD402B400BD402F400BD002C695
-:1090C0000460000000000000A015E740F9802E6257
-:1090D0000F9C42240099012E682C92026400B94032
-:1090E000B6600F9A03E400B9002E703E9906E402C0
-:1090F000F9003E400F9803E80470000000000000F3
-:109100006801A600F9003E401F12ABE400E9903E62
-:10911000490E9803E400F1003A400D9803E400F989
-:10912000013E60059013E400592032408F9103DA2C
-:1091300000600000000000006810A000C8083E01A8
-:109140000F84630022E8203E130F8403E1C0D84C53
-:1091500032000C8443E000F80022100F840300006A
-:10916000C800B2000CC0030A042000000000000088
-:10917000280528008E002F864BE00239088E202D0E
-:10918000900BED92F8028EE0A39808E002E808BA8E
-:1091900000628008A00228000280028048E0034AA2
-:1091A000004000000000000068054C0083102CF017
-:1091B0000A142A0D1AB30124D00BBC32CC080300C8
-:1091C00020C80B3002CC00B30222C00930020C11BF
-:1091D000830020C02820020A005000000000000088
-:1091E00020011E0185002D000B7002183286002D13
-:1091F000C00B6016FE04860027A08B7042DC80B78F
-:1092000080210108F80A1800860820A008E80A68EA
-:10921000004000000000000028083E02C6803DE03B
-:109220000F48030604F58235E00F7803DA00D38097
-:109230003160077803DE20F3B081E04F68070E024B
-:10924000CF8031E00C78132A0000000000000000FD
-:10925000081DADA0F9003F000FB053F810A9003E63
-:10926000000F8001EC00FB023AC00CB003EC00FBE5
-:10927000743C000F2003E800FA003E800F3003C268
-:1092800006600000000000004005FE028F8035E00F
-:109290008DD9032EC4F68032A40CB803DE00CF9023
-:1092A0003CE40CB803FE65FF800FEC8FF803FE0072
-:1092B000C58033E00F68031000700000000000005C
-:1092C000AA119C8084B0202029730A0E82A2A0A239
-:1092D000A04F3B038784B2802CA00A7D02DE80F77A
-:1092E000202506087002C840840035800B60036AA0
-:1092F000006000000000000000009C10863827C0BD
-:1093000049540654401D2021CA096140F880B72005
-:109310002F00897012DC81B7042DC90A6002CC00CD
-:109320008D002DC00BF8020400200000000000009A
-:109330006014CD288000240009B0224C02A1012035
-:10934000301B2302AF20B3082C801B3000CC04A3B9
-:1093500001263008AC22E80280082E804BB4025867
-:109360000430000000000000A815BC108B8036F00F
-:109370002DBC0B6C01DA0422407D9422E400AB4446
-:109380002EC009B802FC00BF003EF0CA9202E402FF
-:10939000CB006E400F84012E04600000000000002E
-:1093A0008000EC00FB003AE02EBC039808EA40364F
-:1093B000438C9003A4442A403E100EB583EC14FB6A
-:1093C0000026000E9203E040FA0016000F8013E022
-:1093D00000300000000000000110EC02FA803FE2C3
-:1093E0000FB00B2400EF92BBE01CD0037400CF053C
-:1093F0003B400FC8035C00CF0032C24DC123344054
-:10940000CF0017440CD1830004300000000000009E
-:1094100081046C008B842E540BBC0A29808B803213
-:1094200000089C03A700AB842E7C0B80022C10DB71
-:1094300001360008800220008200220008900224E9
-:10944000001000000000000080050C0089106690EC
-:109450000BB8026E12A34120040A9822E200891977
-:109460002EC04B31226C08830022C00990022400D8
-:1094700089002A400880022000400000000000000F
-:1094800008100C0080202C0E1B300204418020208C
-:10949000121816420050A0402C881B30020C8193F9
-:1094A00000240008102A000A8800280028000A0268
-:1094B0000100000000000000000C7C11E80026986C
-:1094C0000FB013210CEB603AD82884A2E180C820A9
-:1094D0003E5E1F82037C00CF0032C04D8007250016
-:1094E000C90032400C900300015000000000000051
-:1094F000A111FC00F8131E000BF001F0D0F9191FA8
-:10950000084FC013A100F8623FC00BC407ED00FF75
-:10951000003F000FC023F0A0FC0033000FD003E891
-:109520000670000000000000C005FC00FF0C3F209A
-:109530000CC9033200CF383FD00F4803FCA0CE2225
-:1095400033000FC1033C00FF003DC44CC0238CE43A
-:10955000FF10372008F103F0007000000000000049
-:109560008010FE00BF802E74052202A210DF612F42
-:10957000D08B90023DA4AA9022F40B07121D20BBB1
-:10958000C02FD8889782FD80EF72220828F623E04A
-:1095900004300000000000008805CC40B3002C001F
-:1095A0000882022200830108CC8B2082CC0090002C
-:1095B00020004B12020D80B3402CD80820428C8032
-:1095C000B3202602183326E20170000000000000DC
-:1095D000C015AC09BB002E60088002A2009B002EC3
-:1095E000C00BAC022C00BA0622C20B9402AC10BB1A
-:1095F000002EC108A802EC00AB00220008B006F063
-:1096000004600000000000009015EC00FB043E60C8
-:109610002882130E08CB003AC00F8C03EC11DB201C
-:10962000B2904BA80B2C00BB002CC00C8813AC00D4
-:10963000F300360648B012C40470000000000000B9
-:10964000E001BC00FB083D408FEA01F400FF012F60
-:10965000C00FD022FC04AF003FC08FE9037C00FFA5
-:10966000003FC00F9043FC20EF023F008FF003B893
-:1096700000600000000000005010AC08EB00124039
-:109680000F90032820AB003AC08F8583AC10F350B5
-:1096900032904C34136C00FB003EC00C98032C40FD
-:1096A000EB8032120DB00B500420000000000000CF
-:1096B00088013C100F05A2500C100222108F0023CD
-:1096C000C00B88123C009B8222C008B0023C008F75
-:1096D000A02FC008B0023C088F02200008F003262B
-:1096E0000040000000000000E0054D20930020B283
-:1096F0000B10020100A30068C00B8402AC00B38011
-:1097000020400A30024C00A3042CC00800020D00C7
-:10971000A3002024083002380050000000000000A0
-:1097200070011C20978023600878123A00839129E9
-:10973000E40B59021E00979020FC0A78021E008755
-:10974000902DE01959021E80838061A008780218CC
-:10975000004000000000000048080C40D3323006F2
-:109760000F30030464E30138C41F30078C18F10084
-:10977000304C0E30034C00E3002CC00C20030E00D4
-:10978000E30032080CB103120200000000000000E8
-:10979000401D9C80EF103D444FF107CC00FF083680
-:1097A000C6CFB003FC009700BECC0DB103FD04FF93
-:1097B0000C3FD29EE04BFD20FF023F800EF013D005
-:1097C0000660000000000000A815ECC0CB283EC0D9
-:1097D0000F8003EC00FB0132E90C28032C00FB0096
-:1097E00032C00CB4832C01EF00B2C80C20036D0012
-:1097F000CB103E000FB203EA007000000000000032
-:10980000C8919CC487602DC00B6002DC00B7122099
-:10981000CC0A70021CC0B300A0C0C870221C80B764
-:109820002421C84850020C8087102D400B7282F210
-:10983000046000000000000081008E0287802DE09F
-:109840000B7812DE00B7A021E008F88E1E40B78822
-:1098500021E00838021E40B3A120E848F8825E02E9
-:1098600087802D220B7902E000200000000000001C
-:109870000804CC0483022CD40B3002CC00B300A02B
-:10988000C08A38060C00B38020E14839122C00B39E
-:109890000022C008B0826C0083002C480B3002C24A
-:1098A0000430000000000000E805A800CA003FA046
-:1098B0000FE403D800FA0032800CE8032800FA40D5
-:1098C00032A82CA0092808F20032800CE4036800BA
-:1098D000CA003F800FA003FB0460000000000000EE
-:1098E0004800C000F8013E120B8003E040F8003E43
-:1098F000004F8403E004F0083E004F0003E000F84E
-:10990000413E002F8403A000F8003E000F8003D2E8
-:1099100000300000000000000800E600C9123E50C0
-:109920008F9083E420C1003A410F9003E400F900D6
-:1099300030680C90032400D9003A400E98032400AC
-:10994000C9903E690C1003020430000000000000C2
-:109950008004674A89802E500B9002E480A900227F
-:10996000400B9002E400B9012240089002241089C3
-:10997000002240089302242289422C604890022051
-:1099800000100000000000001815240099002E406F
-:109990000B9002E40089002A400B9002E400B90019
-:1099A000234008D002240099002A400A900624404F
-:1099B00089412E400890020600400000000000008F
-:1099C00008040C8091202C480B1002C400A1202018
-:1099D000480B1002C480B120A14908524A0480817A
-:1099E00000204848120A048081202C4028120202DC
-:1099F0000100000000000000B80D6008D8043E809F
-:109A00000F8503E000C0503A140FA503E140F802AF
-:109A100032802CC5032140DA003A140E85432140E0
-:109A2000C8523E140C850B2E0350000000000000AD
-:109A3000881DE444E9103F444FD002FC00F9123E77
-:109A4000440FD003E440FD103E444F9103E440E94D
-:109A5000403E440FD103E440F9123F400F9103E62A
-:109A600006700000000000000805F6A0FD80B3406D
-:109A70000C10031400FDA032400FD103E400F58662
-:109A800033602C9A832404FDA822400D5043F40037
-:109A9000FD0033400F90030600700000000000003E
-:109AA0007810E100B80022002880022000B800A24F
-:109AB000000B8A12E000B80422140884022000B8C7
-:109AC000402000888002E000B800A2000B80020E57
-:109AD00004300000000000004805C400B1422040EE
-:109AE0000810020400B14020400B1006C400B14031
-:109AF00024400810024404B1006040091002C40070
-:109B0000B10020400B1002120170000000000000A4
-:109B10001815A400B90222600894022400B9012299
-:109B2000400B9006E400B92026400894026408B96E
-:109B3000002240089202EC08B90422410B100206F0
-:109B40000460000000000000A015E410F100326085
-:109B50000C940B2500F90032408F94D3E400F900F7
-:109B600036404C900B6400F10032400D9212E4003C
-:109B7000F90032400F900B28047000000000000034
-:109B80006841A400F9003C408F9203E400F9003ED4
-:109B9000400F9C03E400F900BA402F9023A400F981
-:109BA00008BE40CF9003E410F1013E410F9003DA6C
-:109BB00000600000000000002810A0C8F8003E036C
-:109BC0000C8403A110E80032008C8583E000C00003
-:109BD000380C2C00036000C8003C000D80022010EF
-:109BE000C820B2020F8003CA042000000000000059
-:109BF00028053910BE046FA008A0023A008200A216
-:109C0000808DEC03A8008A00238008A02228008E03
-:109C1000CC2F8008E8C2B8008E6023900BA002CA47
-:109C2000004000000000000028054E08B0722CD053
-:109C300028B0068C01A10220C0083802CC008300A5
-:109C400020C02930024C0081002CC00832020C4098
-:109C5000830020F40B3002CA005000000000000016
-:109C6000A0011C00B4002DD048F2021E2185202046
-:109C7000E80972028E808F0120C00972020E80876F
-:109C8000002DCC1858028E00850021C00B7202E80E
-:109C90000040000000000000A8081E00B4802DE075
-:109CA0000C78839A00EDD031F40C6A03DE82C78011
-:109CB00039E00DF8835EC2C5803DE80C68031200F0
-:109CC000CF8031E00F7E83EA020000000000000038
-:109CD000080DAC08F8003CC00FB303EC00F9023EDD
-:109CE000C80FB003ED40FB00BE800EB303EDC0FB18
-:109CF000003ED22E8003EC02F9003EC00FB003C23A
-:109D00000660000000000000C005FE00F09133E096
-:109D10008FF803FE00FD803FE00C78833F00CF808A
-:109D20003FA00CF8033E00CD803FE00FF813FE107B
-:109D3000FF803F200FF943D00070000000000000BA
-:109D4000A8119C00B4C131C00B7002D410E5202FC3
-:109D5000C80F40035C0087002D800870021C4087FC
-:109D6000102DC00B7602DC80B7002DC00B7002EA0C
-:109D7000046000000000000010009C00B62221D00A
-:109D80000B7082D840B5022DC08865020C00871880
-:109D90002C040830028C0285002DC00B70469010F8
-:109DA000B6002D000B7022C400200000000000004F
-:109DB0006014CC08B200A4C00B3042C610A1002C25
-:109DC000C00A00024C0083002C080830028C00837B
-:109DD000002CC00B1882C400B0002C400B3012D8ED
-:109DE0000430000000000000F815AC0038003250CC
-:109DF0000FF003E620FD003FC008D0023C02CB80FC
-:109E00003C502CF00ABC00C9003FC00FBE03AC00A0
-:109E1000FA022EF74FF003EE04600000000000008D
-:109E20008000EC00F1003AF00FB003E900F9013EC8
-:109E3000C00F9013EC00F9003E550FB0016C00FB11
-:109E4000023EC00F9073E000F8413E000F3001E089
-:109E500000300000000000000010FC00FC0033C0D7
-:109E60001FF013F008FD023FC08DC0033C00CFA0DF
-:109E70003F800C70033C10FC0037C00FE003B000C3
-:109E8000FE003FC00CF0030404300000000000009E
-:109E900084046E00B9C2A2F00BB042EB00B9002EF0
-:109EA000C00F18036C00D9812EB00AB0422C00BA42
-:109EB000C62EC00B8C02E300B8C03CA00DB002203F
-:109EC000001000000000000080052F00B88022E292
-:109ED0000BB002E620B9002CC008B8020C008B00C1
-:109EE0002E3048B0022C00B9C02EC10B8802EE10F3
-:109EF000B9C02E2019B00220004000000000000070
-:109F000008040C00B00020C00B3006C00091002CEB
-:109F1000C04980024C0491002C008A300A0C04B124
-:109F2000002CC01B00124910B1002E200930020283
-:109F30000100000000000000000D6C00B82022C0ED
-:109F40008BF003E008FD003FC00CA0033C00CB00F9
-:109F50003E004CF00A3C00B90037C10FA003E000FE
-:109F6000FA003E000DF00B0003500000000000005E
-:109F7000A01DF001FC403F804FF002F000FD003FCB
-:109F8000C10FC003FC00FD003F004FF063FC00FD6B
-:109F9000043FC00FC003F080FC007B000FF043E8DB
-:109FA0000670000000000000C005F800C81033046F
-:109FB0000C40023400C8851FC02DD903FCC0DB282B
-:109FC00037640FDB033E00FF253FC80EF203FE207F
-:109FD000FFA437C40CC80330047000000000000068
-:109FE0008010E80088202200088812260489822E2A
-:109FF000F448B802FCC498C2227C4B9D422608BF9C
-:10A000001877E408F182EF00BBD022D80890836073
-:10A0100002300000000000008845C804A0002400B1
-:10A020000A00020C0082042CE0081002CC8083009D
-:10A0300024000B1006C801B3202CC0293202C80826
-:10A04000B10024D00882026201700000000000000C
-:10A05000C015A800A80C26000A80022C148A026EE3
-:10A06000E008B0024C08A80026200B9C02E400BBCC
-:10A070000422C019B002E801BB1102C0889002F0AE
-:10A0800000600000000000000015EC02EA40B6602D
-:10A090002E980B2002C8023EC00D9803EC02DB880C
-:10A0A000B6210F8803AC08FB002CC00EB043E5803E
-:10A0B000F06036C00C01434804700000000000004E
-:10A0C000E001BC00D6013B6485D903F00CFF003EE3
-:10A0D000C10FFC21EC00D7903B400F50033C00FF28
-:10A0E000003FC08EF003F440FD883FC02FD00278BF
-:10A0F000006000000000000040108C00DA403C408E
-:10A100000F10034800F9223CC20E9083EC02DB04DE
-:10A110003A080F8487E800CB003EC40EB003ED0080
-:10A12000E8423AC00F800B1004200000000000003D
-:10A1300088052C088A002E428B90022818BB4922E1
-:10A14000D038BC82FC00E8022262CB9C00EF60DFCA
-:10A15000002FC00BF002EC00094037C00B90023218
-:10A160000040000000000000E005481011002CA095
-:10A170000B2002440090C06434283402CC00938445
-:10A1800028400B0800CE0093002CC20A3002C00009
-:10A19000B24022C00B20023000000000000000008E
-:10A1A00070011A4085802DA00B68061680BD902591
-:10A1B00024187B42DE40A08021E00B6802D6009785
-:10A1C000902DE00B7802CE4092806DE40B7802086F
-:10A1D000000000000000000048082800D1803C88F2
-:10A1E0000B22034E80F2A13C242A3903CC40D3AC8D
-:10A1F00038C50F3082C800D3003CC00E3013C000F9
-:10A20000F10038C00FA0031A060000000000000093
-:10A21000401DB810FD343E800FE003EE0072003A9E
-:10A22000000FB063EC40F8223EC00FF003D440FFB3
-:10A23000003FD20FF003EC00CF0037C00FF003D087
-:10A240000620000000000000A805EE00EB0036E04C
-:10A250000DB0032000F08033C008B8032C80CB0081
-:10A2600032800FA0136E08CB2832E00DB483E200D9
-:10A27000CA003EE00CA803020070000000000000CD
-:10A28000C8118C04830021C04870021000B702215D
-:10A29000C04A70020D48D40035C00E6002DC00A731
-:10A2A0004029C0097202D410A6022FC808700212F9
-:10A2B000006000000000000080009E00A78020E0F9
-:10A2C0000A38021A00B58021E008F8225C818380F8
-:10A2D00021A10B78825A1083A020E80A7B02DA00C1
-:10A2E00097C02DE408E802080020000000000000EC
-:10A2F0000814CC00831020C00A30020808B3702074
-:10A30000F80A30424C04931426C40A3802CC00A345
-:10A310000028C0AA3002CE40B3882CC028300A12D0
-:10A320000430000000000000E815A900EA80B690A3
-:10A330002F240B3904BEC033920CA00B6818CEC07A
-:10A3400033800FE9437800CA0032800FA013F84829
-:10A35000DE003E800CE0023A002000000000000019
-:10A360004800E024F8003E120D8093B028F800BCAD
-:10A37000000F8403A000F0003E020E8000E000F811
-:10A38000013E000D8003E000E8003E000F8003D294
-:10A3900004200000000000000810E400F900B27082
-:10A3A0000F90010400C9003E400C9803E404E90842
-:10A3B0003A480C9A03E400F90036400B100B268053
-:10A3C000F18032400F9003C2042000000000000022
-:10A3D00080046400B90022610B9002240889002ED9
-:10A3E000400D9A02E408A90022780D9406E410B901
-:10A3F0000022500B90022580B98036400B9002E07D
-:10A40000000000000000000018052400B5002342F1
-:10A410000BD00EB40089042E60089102C404B90464
-:10A420002AC0089402E410B10026420A90022400D7
-:10A43000B92162400B9002C60040000000000000FD
-:10A4400008040500B54021504B5006940281002CB1
-:10A4500060291406C500A1222051891402C400B14C
-:10A460002020480B14020401B10004500B1002C25A
-:10A470000100000000000000B80D6008B8003200C4
-:10A480008F8003B00088003E000C8003E000E804E9
-:10A490003A000C8002E000F85036000F80032004E0
-:10A4A000F80112004F8007EE075000000000000086
-:10A4B000981DE510F9403E500F94026501FD013DE5
-:10A4C000504F5013E500FD101F5007D443D400F93E
-:10A4D000101E440F9403D500FD403E500F5283EEF2
-:10A4E00006700000000000001815E440F9603F44C9
-:10A4F0000FD0C3E430F9013E420CD003E780DDA069
-:10A5000033400CD003FC00C9903F681E9103340017
-:10A51000FD003E680C94030E007000000000000077
-:10A520003910E000B8422E090B8402E104BE002E6F
-:10A5300010088022C280884022000A8002E000A821
-:10A54000D02E104B8A036000BA002E30088A028693
-:10A5500000300000000000004005C580B1606CD0F4
-:10A560000B1000DC0CB5002C41081002C5809110C6
-:10A5700068C0083002E40C81222C5008104204000C
-:10A58000A1002C5A28900252102000000000000068
-:10A590001815A400B9002E410B9012F480BF002EB4
-:10A5A00040089002E400A96060420A9412E500A904
-:10A5B000002E400B90026420B9000E40099002C6A4
-:10A5C0000420000000000000A005E400F9003E4166
-:10A5D0000F9023E400F9003E400C9003E404D1C046
-:10A5E000BA700C9803C400C9003E400E9003254089
-:10A5F000E9403E400C10036800200000000000000D
-:10A600006801A414F9003E400F9023E408F9A03C2F
-:10A61000C22F9003C400D9803E700F9143E400F92B
-:10A62000003E401F9013E620F9A03C404E90039A54
-:10A6300004200000000000002800A000F8003E02F6
-:10A640000F8013200CFC013E000C8003E000C8507A
-:10A6500032000F800B2008F80032002C8043E040CD
-:10A66000F8023A008F80030A042000000000000076
-:10A67000A88528083A000F804BA1022800BA822E34
-:10A680008848E402E800AE90A3900BE0003800BADE
-:10A690000037A008A002F8009EE022800BA0234211
-:10A6A000000000000000000028054C1033002CD0F2
-:10A6B0000B14020C00B2912CD0083E024C008340D7
-:10A6C00024C20B36008C00B30020C009B002CE00BB
-:10A6D000B3CC68C00B300202005000000000000044
-:10A6E000E0011C88B7252DC08B581A1C08B6002D18
-:10A6F000C0087402DC40A50025C01B78029408B78E
-:10A700008025E30A7102DC00978321C88BF102489F
-:10A710000060000000000000A8081F00F7E27DE0D4
-:10A720000F58431E18F6807CE02C68025E90C380B0
-:10A7300035E00FF8039E04FFA120A10D7803D60099
-:10A74000F78039F80F78030A0600000000000000C7
-:10A75000481DAC00FB407F410F1003EC04FA003EA3
-:10A76000D00FA003ED00E9002A000FB0036400FB46
-:10A77000403EC00DB003E400D30036C00F3803C222
-:10A7800006600000000000004005FE48CFC03360B6
-:10A790008CC843D600CC943FB00DF8037F00DF8017
-:10A7A0003F600FD803DE00CFCA3D600CF8133A4477
-:10A7B000DD803FE00FF8431800200000000000009B
-:10A7C000A8119C008F1133C0484112C44884112C39
-:10A7D000EC2ABA033C40D7482D410B6002D400D785
-:10A7E000013DC00DF0035A0084182DC00B70036AA0
-:10A7F000002000000000000000408C08870021407D
-:10A80000094002D400A4922DC80962825C0087002E
-:10A810002DC00B5002FC0087002D040870021C8024
-:10A82000B5002DC00BF00200002000000000000069
-:10A830006010CC0083002040090022C700A0412CFA
-:10A84000C14B08022C0093402C7C0B3802C720938C
-:10A85000002CC00930024F84B0802CC00B32105045
-:10A860000420000000000000AA15BC02CF00B24086
-:10A870000D1003E824EBC13EC02D98137C0AC2439F
-:10A880003EB00FA903E920CF003EC08CF0030D209D
-:10A89000FAC03FC00F74012A0060000000000000F1
-:10A8A0008000EC00FB023A408E9003E8145B503CC1
-:10A8B000504E8403EC00F8403E80078103EC08F31F
-:10A8C000003AC09F3003EC00CB203EC00FB023E81D
-:10A8D00004300000000000000190FC00FF003F4039
-:10A8E0000FD0033820CF0832C10ED003FC00FE0881
-:10A8F00031E50EE4033A00FF0033800FF02B240013
-:10A90000CCA03FC00FF00300443000000000000066
-:10A9100080046C00BB003A690B906E0800834136DE
-:10A9200040C888C6EC00884036800DA8036E50BB36
-:10A930000036C00BB0022400D9082EC00BB003E0D3
-:10A94000401000000000000080052C00BB002E60BD
-:10A95000038002200089012258089822EC01AB00F4
-:10A9600022000A10022800BB0022400BB00228007F
-:10A970008A002EC00BB042200050000000000000F2
-:10A9800008040C00B30028408B0002024089012417
-:10A99000D2281002CC00831024200808024E00B3F5
-:10A9A00004A0C00B3002088892002CC00BB002C279
-:10A9B0000000000000000000000D6C00FF003E00E1
-:10A9C0000F80022010895022D82E9622FC00EB40E6
-:10A9D00032C00A90032800FF0022000FB0032CA011
-:10A9E000C8003EC00FB003000610000000000000C9
-:10A9F000A019FC00FF0C3B000FC0027090FD003E50
-:10AA0000C90F96C3FC00FF003FC00FF003FC04FF1A
-:10AA1000043FC00FF003EC00FC003FC00F7003E8E0
-:10AA20000670000000000000C005DC80FB283F002D
-:10AA30000CC10BF102ED0037302CF103B240FF00E6
-:10AA4000BBC00F4806B200FC803BCC0CF00370800A
-:10AA5000DF2833040FF40330007000000000000012
-:10AA60008010FF40BF602E210882022000A9282A02
-:10AA70000009FA022000BF5123D8099802E430B03F
-:10AA80000023D008F5A225A48F423C100BB00A2069
-:10AA900004300000000000008805CC00B3082C0042
-:10AAA00028001AC084200024C84B3142C000930201
-:10AAB00020C6080006C081B3002CD8093202A0408D
-:10AAC0009301244C0B3202220170000000000000B0
-:10AAD000C011AC00BB022E0A0880826000A8002EC4
-:10AAE000E01BB00262013B0022C1099002E200BB00
-:10AAF0006026C108B02A26009B042E210BB002302C
-:10AB000004600000000000004011EC10FB003E104B
-:10AB1000088413EC02A90436200FB003EE80FB007A
-:10AB20003AC00CA003A28079401EC08CB0636A10AA
-:10AB3000D30036A207B0030004700000000000003C
-:10AB4000E001BC00FF003E204D41039C00FD20AB16
-:10AB5000000CF003B800F7003FC04DC903F400FF3C
-:10AB6000003BC02EF000F000EF003F004B7003F8F8
-:10AB700000600000000000004010AC80EB007E1080
-:10AB80002E8403EC00E00032500FB0862500DB205D
-:10AB90003AC00DB063E110FB4838C10F30032C04FC
-:10ABA000FB0832C00CB00B90042000000000000035
-:10ABB000C8053C008F006429288003EC02E804A843
-:10ABC0005608FC07E0000FA0BFC00B9502A000BB19
-:10ABD0000537C089F00A0DC8BF082A8008F0023284
-:10ABE0000040000000000000E0054C01B30224E03A
-:10ABF0000A30128003A300A80002B822C000B300EC
-:10AC000028C10B04020800B94028C00B300203041D
-:10AC1000B34420004A300238005000000000000019
-:10AC200020011E2017A065EC083802C241B3922B08
-:10AC3000640A38023601B7902DE003F8009A00B597
-:10AC4000802DE08978121E00B78029E00A7802087A
-:10AC5000004000000000000048080C0073B024C849
-:10AC60004E300A8002E20038940E31A2C800730010
-:10AC700018C40500030000F30038C007B10300004A
-:10AC8000F30130410EB0039202000000000000000A
-:10AC9000401DBD00EF1026C803B103E000EA817833
-:10ACA000C50CB5E3DC00C3003EC10FF083B000FF6C
-:10ACB0000037C00DF403E400F7003F400DF003D06F
-:10ACC0000660000000000000A805ED10CB283EC083
-:10ACD0000DB013AC10FB003A8004B403AC00FB04CD
-:10ACE0003EC00FA4B3E000FB8032C00FB003E80009
-:10ACF000FB48B2800FB043EA007000000000000083
-:10AD000048119C02874438C08D30024C00FF00215E
-:10AD1000C00870039C00B35021D44E6202D000BF23
-:10AD20000035D4097022D800BF2221C00B7202D294
-:10AD30000460000000000000C0009E4087802DE0FD
-:10AD4000097802DE00B68029A1287A32DE0037A019
-:10AD500025E0097806D200B78021E80B7902DE00F1
-:10AD6000B79021E00B7902F0002000000000000005
-:10AD70004814CC04830128C089B00A4F00B20020D7
-:10AD8000C4883016CF00BB0420C10A3206C200B30B
-:10AD90000024C0093042EF10B30020C00B3002D2B3
-:10ADA0000430000000000000E815A8004A003E80C2
-:10ADB0002DA00BAA80FE002B800CA043FB30FA00D4
-:10ADC0003E800FA083FA04FE1822800FA003FA84AD
-:10ADD000F20033A20FA003F20460000000000000A4
-:10ADE0004800E000F0003E002F8003A020FC023E5F
-:10ADF000001F8403A000F8403E004F8001E040F8AF
-:10AE0000403E000D8013E000F8003E000F8003D2AA
-:10AE100000300000000000000810C600D9003640D5
-:10AE20000F900B0400C90036686C9403E420B990BD
-:10AE300036400C9403E40029803E400F9003242008
-:10AE4000C90036400F9003C204300000000000002B
-:10AE500080046650890020500890022409D90020FF
-:10AE600048489006E40499A022400DB822640009E5
-:10AE70005032400B9002279089402A400B9002E00C
-:10AE80000010000000000000180124009900664234
-:10AE90000AD0123400850026404A9002E401B9012C
-:10AEA0002440589012C40029402E400B100A2480E0
-:10AEB000890526410B9002C60040000000000000FA
-:10AEC00008040480812061480852021481952020E2
-:10AED000400A3602C400B12000484110424401A19A
-:10AEE0000024480B12120480812028480B1202CA49
-:10AEF0000100000000000000B80D6000D8503600CE
-:10AF00000E852321428C5434140E8002E140F85007
-:10AF10003614048003E144E8507E150F8503214276
-:10AF20004A0036140F8003EE0350000000000000BA
-:10AF3000981DC440F9101E444E9103E440F9103F9F
-:10AF4000C00D9103F400D9143E440F90037400DD4A
-:10AF5000007A440F9103F440F9383F440F9383E79C
-:10AF600006700000000000001801F680F9A43F6898
-:10AF70000E9E436780D9E43F410FD8430400EDC0E3
-:10AF800036400C9003E400D54032400C9003F400AE
-:10AF9000DD0032402C9A03C60130000000000000A2
-:10AFA0003810E000E8C02E144D8F2223C0F8F0AA1C
-:10AFB000000C8003A2A0D8822200088002E800D8FA
-:10AFC000802A00088002E80888A83600488A82CED5
-:10AFD00004300000000000000805C500B1482E4004
-:10AFE0000A122244009104A4410A940624009142CA
-:10AFF0002441091002E40191202440091002C401F7
-:10B0000091002C40091402C2013000000000000031
-:10B010001815A400A9002E404810022400B940AA27
-:10B020004018B002E40899002240199046E4809943
-:10B03000042E40099002E40199042650099002C6AA
-:10B040000460000000000000A011E400F9063C408C
-:10B050000A90036402D900B6500E90232601F9002D
-:10B060003640299483E400D94836400D9003C70048
-:10B07000D1073A50CD9003E8042000000000000002
-:10B080002801A408E9003E408F9003C408F1003A6B
-:10B09000688F9003A441F900BE400E9003E400F9CC
-:10B0A000C038402E9003E640E9003E68069003CA8F
-:10B0B00000200000000000002810A000D8053E007D
-:10B0C00007800B2000E8403E100D82036000C8009E
-:10B0D000B2008D8303E000D8503A001E8003E124C3
-:10B0E000F800B2000F8003020420000000000000FE
-:10B0F000280538008A042F846AA00BE8088E003DDA
-:10B100008088EC036810A601368008A800C8108E5D
-:10B1100010228008A002FB20BE512A800BA00282D0
-:10B1200000000000000000002805412193002CF0E1
-:10B130003930060C00A300280828BC022C008380AC
-:10B140002AC0083000CC009A8028C00A3002CD0006
-:10B15000B30462C10B30020A00500000000000007E
-:10B16000A0011E0407112CD00A3222DCC187006D19
-:10B17000D00834027C00A70824C8087002DC800FC5
-:10B180000021C4087306DC00B20061C80B3A0288D3
-:10B190000440000000000000A8080A0057812DA00C
-:10B1A0002D7C023E82E3E03BE00C78031E20C7804A
-:10B1B000B9E82C7803FF80D6803BEC027A03DE00EE
-:10B1C000F78131EC8F7C030A0200000000000000D0
-:10B1D000081DAC00FB001E8023B683EDA0DB643E9F
-:10B1E000C00EB003EDC0F2003ED40AB003EC30EE66
-:10B1F000643EC007B0C3E800FB013EC80FB803C2FD
-:10B2000004600000000000000005F600EF803BE055
-:10B210000FF8637E04CFC0B7200EF803FC00C78090
-:10B2200033F00CCC03FE08F7C133E04FF803B24013
-:10B23000FFA031E60CF803100470000000000000CD
-:10B24000A8119C00EF0221402D70021C00F710296C
-:10B2500040087022FCC0A7003DC0084002DC00B7D7
-:10B260004021C00B7002DA80B72429C648F0022AB8
-:10B27000066000000000000000009C00A700288479
-:10B280000B30020C00930025800A6102DC01A7103C
-:10B2900024C0084082DC009F0025C40B7002942566
-:10B2A000B73223C41B700200002000000000000021
-:10B2B0002014CC0CA300200029300A0C00A3006C41
-:10B2C00000081042CD10AA00ACC0000402CD00BBA3
-:10B2D0001024C0033042C309B3002CD00A30021836
-:10B2E0000030000000000000A8158000EF003A4088
-:10B2F00007F0433C009FC0B6140E8006FC01CB0152
-:10B3000037C0ACB402FC00D90137C04BF013AE0813
-:10B31000FB0033D02EF00B2A00600000000000007C
-:10B320008000EC00FB053E400F3003AC14FBA03A5C
-:10B33000C00F8443EC01F9403EC00FA203EC21F999
-:10B34000003AC00FB003E420F000BAC00DB003E033
-:10B3500000300000000000000110F800D70135683F
-:10B360006DF0033C01E70033C00DC003FC24CF02A5
-:10B3700037C00DD202FC00DF0133C05E70331C18F1
-:10B38000CF4131C20CF0034040300000000000000B
-:10B3900081006C008B0022522AB0036C00AB0028A5
-:10B3A000C00A8C02EC108BE022C00F8002CC008B14
-:10B3B0008022C008B0022A10D98022C0C8B002E0A2
-:10B3C0004010000000000000800524019B00268042
-:10B3D00029B0620C00AB016A00089802CC009B8384
-:10B3E0002EC0CBB412EC038B8028C00AB006A2009A
-:10B3F0008B0262C008B002E00050000000000000B4
-:10B4000008040C01831420000A30024C0083002A37
-:10B41000400A1000CC02930028C00A2002EC00036E
-:10B420000020C00830160080910060C0083002C2C1
-:10B430000100000000000000000D6C00DB00368001
-:10B440002DF0033C00AF003A800D8003FC005B0050
-:10B4500037C0099003FC00DF0033C00AF003A420CA
-:10B46000CB00B3C08CB0034002100000000000000D
-:10B47000A01DFC04FF200F0027F003FC00FF002D9F
-:10B48000000BD027FC00EF0037C00FC043FC00FFCB
-:10B49000003FC00DF00BE000F5003FC01FF003E8D7
-:10B4A0000730000000000000C001F4C0FC227FC093
-:10B4B0000CD0433600C48134C01C8907F280CF8091
-:10B4C00033600F79033CE0CF0833480DC403F050DC
-:10B4D000DC9037CC0FF803F0007000000000000093
-:10B4E0008010E990B8807EE488990A2608A9802215
-:10B4F000F42C9903A702898022340B9A037D00DF84
-:10B50000482B60080502E500822022C48BB002E0CF
-:10B5100006300000000000008805C500B0102CC0F7
-:10B520002A0002A408A804E0800B0002C441B2046F
-:10B53000A40A0BB0028C81832060509812128B8079
-:10B5400089002CC80B3002E20170000000000000EE
-:10B55000C011AC20BB022AC00A8802A408A980A29C
-:10B56000E11B9C22E600B84026300B9002CC0193F0
-:10B57000042A40399882EC148B652AC00BB202F879
-:10B5800000600000000000004015E700B8482E00F1
-:10B590000E88438400E3C136E80F9C12E280F3C0BA
-:10B5A00036705FA823AC01CB0422404D8403E20037
-:10B5B000D8003EC00F9003D00470000000000000CF
-:10B5C000E001B309FE103E810DC003740CFF003D85
-:10B5D000C18CD0831400CD203A400DCA017C00FFFD
-:10B5E000001F400EC023F246FE8437C00FD803F878
-:10B5F00000600000000000004010AC00DD023D4093
-:10B600000E9003AC00EB483ED00C8063A208CA0049
-:10B6100032080CB003AC08EB003E400CD483582039
-:10B62000F94232C00CB003D004200000000000003A
-:10B63000C8052802DB002EE0283A022E00DB6076E7
-:10B64000E00D8C02E000880236586815837C08BF44
-:10B65000002D60089002A900B30523C008B002F2D3
-:10B660000040000000000000E0054C1080000CC10C
-:10B67000081C82060093C020F60A200208009300EE
-:10B680002460093C020C0083002C60090112004078
-:10B69000B000E0C0083002700010000000000000A0
-:10B6A00020410A4086812DE058180A16A09780256F
-:10B6B000E9197882D600978025A019F8025E00B7B4
-:10B6C000802D602848129600B48021E0287802C8B6
-:10B6D000041000000000000048080C0081303CC24B
-:10B6E0000E00028400E34028E84C29030C00D3003C
-:10B6F00034C40D31038C08E3003C460C2003008069
-:10B70000F20032C00C3003D2021000000000000032
-:10B710004019B800FF102FC00FC023C4807F103E17
-:10B72000C00FB103DC00E7003F8006F143FC00FFDF
-:10B73000087D500EE123B408FE103FC40FF003D083
-:10B740000460000000000000A805E402CC003E00F8
-:10B750002CC0030401CB0033602C9013E80073006D
-:10B76000B2C10FA003EC80FB283E541FD003FE02A1
-:10B77000C98032C00FB003CA007000000000000092
-:10B780004811800086002D800820021408870029B7
-:10B7900040087002DC00B70021C00B60025CA0977B
-:10B7A000202D480B5002DC108D0021C80B7002D2F6
-:10B7B0000660000000000000C0009F0085812C6032
-:10B7C000185802DE20B78228605A7852DE10BF80F7
-:10B7D00021E04B7806DE40B7A02D699B7812CE00A1
-:10B7E0008780E1E40B7802C0002000000000000028
-:10B7F0004814EE0083002CC20836028C0883F068DF
-:10B80000400A3E02CD40B30020E00B32064C009BC4
-:10B81000000C400B3002CD80830820C00BB102DA4F
-:10B820000030000000000000E815B800CE083FB06E
-:10B830000CE423DA02DE40BBB20EE243FA00FE0063
-:10B8400033900BE003E800FA003E810BE013F908A7
-:10B85000CE4032800FA803FA047000000000000000
-:10B860004800E02498083C040F000B6000F8402ECC
-:10B87000030D8003E000F8003E060B8003E000D8D3
-:10B88000003C00038C23E100F8007E000F8003D20F
-:10B8900000600000000000000810E402C9003E4003
-:10B8A0008C90032500E98032440F9402E420F900D3
-:10B8B00032700F9A43E400F90032400C1033241028
-:10B8C000F9013E400F900302042000000000000038
-:10B8D0008004640089822E40289002248281C0A2C4
-:10B8E000700B9C02E4003142A2600B9482E400B928
-:10B8F000002A400894A22500B9002E400B900A208F
-:10B9000000100000000000001805240089642E408B
-:10B91000089042A400896022420B9002E600B980A0
-:10B9200022400B9002A404B9002240289002240473
-:10B93000B9002E400B90020E0040000000000000F5
-:10B940000804058081002CC1481002A40281002057
-:10B9500040833402C400BB0020D00B1402C480B169
-:10B9600020A06818141A0D00B1402C500B10020AC8
-:10B970000500000000000000B80D6000C8003E0097
-:10B980008C800BA004E8003200078003E000F80080
-:10B9900032001F8003A140F85032000C80032000C9
-:10B9A000F8003E000F80032E03500000000000004E
-:10B9B000981DF446FD403F5023D4137404F5023F14
-:10B9C000500FD403FD00BD002F500FD003E440F909
-:10B9D000103F440FD403F508FD063E500FD283E616
-:10B9E00004700000000000001805E640ED043E4829
-:10B9F0000CB283F400C10032408CD0033400FD004F
-:10BA000037400FD003E620F9883D620CD803FE24AE
-:10BA1000C1003E780FD00306007000000000000057
-:10BA20003810E10088402E1008C423A00888062A98
-:10BA3000140880036004B80022000B8002E200B802
-:10BA4000802E00088C02E38088022E380B88020EBC
-:10BA500006300000000000000805C580A1C02D7060
-:10BA6000085042C400A90020E02A100A0410B100C6
-:10BA700024404B1006C420B1086E400B1682C4202F
-:10BA800081002C500B928252002000000000000028
-:10BA90001811A400A9012E4028D020A404A9002A2E
-:10BAA000401AB0122400B90C22420B9402E400B9EF
-:10BAB000006E400B9602E41189206E400B90024606
-:10BAC0000020000000000000A015E4C0A9C03E5006
-:10BAD000089C83E402E900B2402A92122640F94011
-:10BAE00036700F9403E404F9013C400F9803E6021A
-:10BAF000C9223E400F1002680470000000000000E0
-:10BB000028018604D9401C400F9223A4B0DB043CDA
-:10BB1000C00D9A03E400F9003E440F9003E400F9DD
-:10BB2000003E422C9023E480F9003E408F92039225
-:10BB300000600000000000002810A100C8203200B2
-:10BB40004CC08B2002C83132202D8403E104F84818
-:10BB5000BA000F8903E000C80032000D81132010E5
-:10BB6000F8003A000F8123020420000000000000CA
-:10BB7000280528000E40228028A40219005280A225
-:10BB8000804DED82E800B64223BD0BE802E804DAFE
-:10BB900000378008E0023A20BA0022800BA80A0A87
-:10BBA000004000000000000028054C00838060C0B9
-:10BBB0000829020D00924024C008B402CC00B30052
-:10BBC00068E01B3002CC00930124C06938026C008D
-:10BBD000B3002CC00B30020A00500000000000002F
-:10BBE000A0011C4083C020400828069C189C022409
-:10BBF000C0097002D400B70021C00B7002CE40977C
-:10BC0000B0254008781A5800BFA265C80B780220FA
-:10BC10000440000000000000A8080E028780B1A0C8
-:10BC20000C68031A08D69235E4287842D610F580BD
-:10BC300039A00F7823DE30D3A235A04DE8035E0093
-:10BC4000F7D03DF80FF003220200000000000000D2
-:10BC5000081DAC00FB043E000BA0034804FA413A67
-:10BC6000500FB003E400F1003EC00FB003ED88FBBD
-:10BC70004D3E000FF003BC08FB203AC00FB003C2DA
-:10BC800004600000000000000005FE00DC80B3E05E
-:10BC90000CD803CE00C8A031A08DE903BE00B2804D
-:10BCA00033E00CE8437E040F8131E40CD803F60046
-:10BCB000FF803FE00FF803000420000000000000B8
-:10BCC000A8119C00B4403540085082DE80D49021F9
-:10BCD000E00D5102D440B6B02B900EE5029C40D747
-:10BCE00022195C0D7002D800B7202DC00BF0036A3A
-:10BCF000042000000000000000009C009310218040
-:10BD0000085802DCC0940023D00870A0D420B502EB
-:10BD100029800960820C00870225C0194002D400E6
-:10BD2000B7006DC00B700200002000000000000092
-:10BD30002014EC00B3C02001481802CC028144A0BA
-:10BD4000C0893802C780B1002C094A0062AC09934F
-:10BD5000012840193002CD10B3902CC00B3002C81E
-:10BD60000420000000000000A815BC20DB6222E0D7
-:10BD70006CA003E400980032C0EC9823AE08FB08E6
-:10BD80003A780990037C10CF0026400CB003EC00F9
-:10BD9000FF803FC00F90032A0460000000000000F5
-:10BDA0008000EC20FB483C610FA043ED00F8243EEE
-:10BDB000500F9083E400FB003A500F8043EC08FBE7
-:10BDC000003E400F4003F000FB003EC10F900360B7
-:10BDD00000300000000000000110FC00DDA03280F7
-:10BDE0000CE001FC00DC9139C03C40033400FF80D2
-:10BDF0003F000FD007FC00CB003D400CE003382093
-:10BE0000CF023DC00CD00308443000000000000009
-:10BE100081046C000140220028A002CE86836422A7
-:10BE2000F4088C0F6400BB102E600B9C03AC01DB8C
-:10BE3000003E60088F0223408B003AC00D1043681B
-:10BE4000401000000000000080052C009900A2C0F6
-:10BE5000089002A607980002C24888022C00BA0285
-:10BE60006E600A9802EC008B012E600890020500BB
-:10BE70008B002EC008B1022000400000000000002E
-:10BE800008040C1081002040281026CC808020A0BF
-:10BE9000CC1814420400B2206C400B00028C0083CA
-:10BEA0000028402800020000830028C009B0024298
-:10BEB0000500000000000000000D6C00D900228089
-:10BEC0000C9003AC80DA292AD22880022400FB20BF
-:10BED0003E000F9002FC008F002E400C800B2002D1
-:10BEE000CF003EC00CB00300035000000000000073
-:10BEF000A01DFC00FD003F000FD063FC49F5003E93
-:10BF0000C00BC001F4007F403F401FD003BC00FFC6
-:10BF1000003F400FC003F000FF003BC00FF003E8FC
-:10BF20000470000000000000C001F240ECA03FE0FF
-:10BF30000D48037D80F480336C0EC8033200DD9021
-:10BF40003BA02DF003FCC0FF003BE08EF0033C045F
-:10BF5000EC6031000CF003B0007000000000000045
-:10BF60008010EC00D9C12EE10D88023C80F88036AB
-:10BF70007D18A00228B0EA202220087702FD50BBDD
-:10BF80008022400BF4423D808831221208F602E004
-:10BF900004300000000000008805CC0080112EC194
-:10BFA0000800024D80B80020000A0282000099209B
-:10BFB00022C0093082CC00B30028CA0B34820D2085
-:10BFC0008000A08C083482A20170000000000000F4
-:10BFD000C015AC4099802EC20994022C00A980267D
-:10BFE000600838422220BA4162463BB002EC01BBF5
-:10BFF0008022400BB0460C1888C0222208B006F000
-:10C0000004600000000000004015CC00C9813CC164
-:10C010000CA9236C00B28032780A8A0B26009901A1
-:10C0200030E00DB003EC00B9003AC01EB0032C00A4
-:10C03000CB8032610CB0139004700000000000004F
-:10C04000E001BC10DD003FC20FE803AC00FE003D84
-:10C05000400FC043F810EF14B7E00CF003FC00F5FC
-:10C06000023F444FB04BFC02D4043D402FF003F894
-:10C0700000600000000000004010AC00F9083E60C5
-:10C080000DA003AC00E85032000C8403A500E900C9
-:10C090003AD80FB0032C00F9003AC00F30032C003F
-:10C0A000CB443ED40EB003D00420000000000000BA
-:10C0B000C8052C08B9802EC00A30423C008904769D
-:10C0C000600890622000820422D008F0437C00BB0C
-:10C0D0008222400BF0423C008AC02EC108F002F2DE
-:10C0E0000040000000000000E0054C10B2D02CC061
-:10C0F0002918028C04A100249C0810028000A101D0
-:10C100000CC12B30528C04B30128404B30024C0040
-:10C1100090202C200A3002F800500000000000009F
-:10C1200020411E00B7A225E88A68021E00858025EE
-:10C130008088E8023E0085802FE4287802DE00B780
-:10C140008061E00378025E82B7822DE0087802C841
-:10C15000004000000000000048080D00F0103C8086
-:10C160000D10838C00E25026040C11038840EB0074
-:10C170003CC40F30038C00F30838400730036E4096
-:10C18000D0083C880E3043D20200000000000000BE
-:10C19000401DBC00FB343CC94EB023ED20FB043FE6
-:10C1A000C88F70534C00EB1031C50EF4036D00F3D3
-:10C1B000003FC00FF40BBC00CD003FC00FF483D094
-:10C1C0000660000000000000A805CE04C904B0C14C
-:10C1D0000F98136C90CB023EC04FB063E400F18027
-:10C1E00012C00CB503ECC0CF8332400FB3232DA493
-:10C1F000FB003E000FB4032A0070000000000000A6
-:10C2000048119C00870021C02D60021C00D7003916
-:10C21000C00B6002DC00B50021C02A7012CC808700
-:10C220000035C00B72521C00B7002D410B320212B8
-:10C230000460000000000000C000BE0081C0232098
-:10C240000BD8025E0006C02DA00B7C12DE08BF805A
-:10C25000A1E22A7A02DE00938025600B781E5E50F0
-:10C26000B7802DA00B7802300020000000000000F5
-:10C270004814CE00836020C00931022C00930028AE
-:10C28000C01BB006CC80B34820F00A3002EC00930B
-:10C290008024C00BB0024C10B3C82CD28B300212D9
-:10C2A0000430000000000000E815BB00C6C4318166
-:10C2B0000FE0036800CE803FA20BE803F900FE40C8
-:10C2C00031806EA007E800DA0026810FA002680125
-:10C2D000F6E03D920FA0033A046000000000000069
-:10C2E0004800E0C2F8043E140F8013E010F8013E4D
-:10C2F000100F8043E000B8003E00478003E002E8F2
-:10C30000103E000F8007A000F8002E000F800BD217
-:10C3100000300000000000000810E400F901324085
-:10C320008C9003E400C90036420F9003A400C900BA
-:10C330003E420D90036400D9003E400F900B640014
-:10C34000F99032410C90030204300000000000001C
-:10C3500080046400B9C8A2600A9202E40089402EF9
-:10C36000580B90020400D9002E42089002E4048980
-:10C37000002E400B90062404B9082A404890122051
-:10C38000001000000000000018052400B91022442D
-:10C39000089002E400890022458B9002A4008900E5
-:10C3A0002A40099002E40099802E400B9026240038
-:10C3B000B9012270091002060040000000000000D0
-:10C3C00008040408B12020400A1002C48083002C15
-:10C3D000504B1002240091002E40081202C48181AB
-:10C3E000A26C400B12020480B9202A4829120202D2
-:10C3F0000100000000000000B80D6140F80032802C
-:10C40000088003E142C80032001F8503A140C850E4
-:10C410003A008D85036140D8003E000F050321409E
-:10C42000F85032140D850B2E035000000000000060
-:10C43000981DF404FD103F400F5003C440FD003F21
-:10C44000510FD003F400FF013D400F9103E440FD84
-:10C45000103F4A0F9103E440FD103F440E9103E664
-:10C4600002700000000000001805C500CD0031403A
-:10C470000DD043E400CD0033404F1102E404C1006D
-:10C480003D400C9003E400EDA432500F9003E40013
-:10C49000FD003F400F9003C6007000000000000048
-:10C4A0003810E208D8003201008012C0004800367F
-:10C4B000800B8A02E000A8002E000F8002E00088B6
-:10C4C0005034280B8002E000B8002E000B8002CE12
-:10C4D00004300000000000000805C48081002640F0
-:10C4E000091802C408210028408B1002C400B101C1
-:10C4F0002E40181002C400A10120481B1002C400E5
-:10C50000B1006C400B1012C201700000000000006E
-:10C510001811A4009980A242489002E400A92A269A
-:10C52000440B9082C481B9002E400B9042C4008914
-:10C530000026400B9002E400B9012E410B9002C688
-:10C540000460000000000000A015C520C984307000
-:10C550000D9013E402E90032700F9403E400F940F7
-:10C560003C480C9003E400E10032400F9001E400ED
-:10C57000F9903E600F9026E8047000000000000073
-:10C580002801A500F1043A448F9003E410C9043E49
-:10C59000600F9003E400E9203E400F9003E410F99F
-:10C5A000903E400F9003E400F9803E640F9007CA6C
-:10C5B00000600000000000002810A100C8043A003C
-:10C5C0001E80038003C8402A041F800320008800C7
-:10C5D00032300C80032000F8003E000C8003E000A5
-:10C5E000C8803E200F8003CA042000000000000025
-:10C5F00028053800AED0378008EC463800D6042332
-:10C60000A00BA0417804FA0037800DA002A810EE1C
-:10C61000212E8008A002E8088E802FA08BA002CADD
-:10C62000004000000000000028014C0283C0A8E880
-:10C630004A36028C0013A028C20B30060C00B3004F
-:10C6400024840930020C00B32028C0093002CC0039
-:10C6500083802CC00B3002CA0100000000000000E3
-:10C66000A0013C44AF4025C248F8821CC89F082165
-:10C67000C08BF8025C00BFB02780093A029C00A57D
-:10C68000022DE8097002CE8085082DC20B7302E8E6
-:10C690000040000000000000A8081E00C782A9E0BA
-:10C6A0000A78029E40978439A00B7A833F80D79105
-:10C6B00035A00D7A091E44F7803DE82D7A03DE820D
-:10C6C000C6803D204B7B23EA0200000000000000F2
-:10C6D000081DAC00D3003EC10F3003ED80E3003EE7
-:10C6E000800FB621EC08DB213E800FB5036C40F9CA
-:10C6F000003EDC0EB203ED40F9023E800FB003C2F3
-:10C7000006600000000000000005FE00CF803DE054
-:10C710000FC843FE00FE843FE00DF8C3FF10AF904A
-:10C7200035A00CFC033E14EC843FF00EFCC3FF0864
-:10C730004F8033E40CF8030000700000000000009C
-:10C74000A8119C00D7A22DC40C41C2DC00740025A6
-:10C75000800F7242DC90D7382D980A70021C048634
-:10C76000003FC00D7002CC00860837C62870022A30
-:10C77000006000000000000000009C0087602DC2E7
-:10C780000A5002DC00B61025C2097086DC30970022
-:10C7900025800830025C0087082DC0087002CC405C
-:10C7A0008600210009700A0004200000000000003B
-:10C7B0002014ED8093000CE1281802CC08A000247E
-:10C7C000121A3402CF0493402C800AB0224C02810A
-:10C7D0008028E0283002CC008882242008B002089B
-:10C7E0000430000000000000A815BF20C9E02CF1B3
-:10C7F0000EBD03FC00B940364009F502FD40FF8044
-:10C8000036A208F00B7C00EB802FE00AF043FC021C
-:10C810008BD032F00DF0032A04600000000000000D
-:10C820008000EC10FB003EC80F9413EC00F940367A
-:10C83000401FB003EC10FB013ED00FB003AC00F979
-:10C84000003EC40FB001EC00F9043E480FB003E015
-:10C8500000300000000000000110FC00DF003FC0BD
-:10C860000CE007FC00FC0A27004FF003FC00FF0867
-:10C8700033800CF0002C005F0033C00CF001FC0092
-:10C88000FE0023400FB00300443000000000000011
-:10C8900081046C008B862EE0488F02EC08B8A0362D
-:10C8A000304BB003AC0C9B023CA00CB0436C00B10D
-:10C8B0000028C00DB012EC10B980A2610BB00220AC
-:10C8C000401000000000000080052C009B882EE036
-:10C8D00008A002EC01BB8026620BB002EC00B301A1
-:10C8E0002A2108B0122C00B80022C008B012EC14A3
-:10C8F000B98422A20BB002A000400000000000009A
-:10C9000008040C0493002CE0080002CC09910020DC
-:10C91000400B30064C0413002600083002CC04B251
-:10C92000002AC0013000CD00B00020800B300A0288
-:10C930000100000000000000000D6C00DB246EC050
-:10C940002CA002FC00BA0426404FF057FC003F0127
-:10C950003A002CF0013C00DB0033C084F003FD08FA
-:10C96000FA0032000FF00300015000000000000048
-:10C97000A019DC00EA403F0007C003FC04FC003FB4
-:10C98000400FF0039C00FF003F000EF0037C00FD11
-:10C99000003FC10FF003FC84F4003F000FF003E8F8
-:10C9A0000470000000000000C001F080FF0003C21E
-:10C9B0000FC2033E00DFC03EC04DDB02B0C0DC3022
-:10C9C0003FE00FDB23F620FF2633E00F52035E002B
-:10C9D000FF8033C04C4903300070000000000000AD
-:10C9E0008010E1E0B70823F00BAD0A2E009A042E68
-:10C9F000B0098F03A040B9302EA00B9F03A700BB46
-:10CA00008026E00BDD022E00BB8022F40A9202A0F9
-:10CA100004300000000000008805C880B31024C066
-:10CA20000B8002AC00A3242CD0081006C080B201F9
-:10CA30002CEA4B0012C204B31008C00A90020C008A
-:10CA4000930424C0098202A20170000000000000CB
-:10CA5000C015A500BB0022C00B8002AC08BB182E7D
-:10CA6000E0188802EC01BA002E800B9886E200BB29
-:10CA70000022C40B90026C00BB00A6C00B9000B05B
-:10CA800004600000000000004011E700FB00B2C09D
-:10CA90000FA803AC02EB003E600D9E03EC00D840F3
-:10CAA0003E400F8843E200FB2032C00F100B6F9016
-:10CAB0005B8236C02D080190047000000000000069
-:10CAC000E001B708F7003FC00FF9037C08CF823CB4
-:10CAD00000AFD021BC08FD103F808FC003A400F739
-:10CAE00001BFC007D003BD30FFA438C00EDA03F881
-:10CAF00000600000000000004010A800FB00B2C170
-:10CB00000E8103EC40FB443AC10E9503E000CB419B
-:10CB1000324D0F8103E020C90072E84491036D009B
-:10CB2000CB023EC00C8003900420000000000000F7
-:10CB3000C8052400BF0033C4081D038C00BB983611
-:10CB4000484D9822ED40DB0036B00B9802E300DB45
-:10CB50000032E088D8022C02C3802FC008900372F4
-:10CB60000040000000000000E0014400B30020F09D
-:10CB70001808024F84B1C024C0890602C400910085
-:10CB800020F01B1882C60093002CD1081E020E4410
-:10CB900093942CC0082002B8005000000000000050
-:10CBA00020011E04B78020E20868069E80BF84250D
-:10CBB000A8096802C60093A065E40B7812DE009312
-:10CBC00000A1E008D8021ED0A7802DE008F8024896
-:10CBD000104000000000000048080800B32030C0EA
-:10CBE0000A2202CE40F3A03CE80B3002C100D0C1C3
-:10CBF00030C00B2113CC21D3002CC02C100B0C8087
-:10CC0000D3613CC82C200392020000000000000009
-:10CC1000401DBC00FF403BC00FE003FC00F7507F0D
-:10CC2000C42EF003FC40FE003FC00FF047FC00FFA5
-:10CC3000007DC20FD001BC805F003FC00FF003D069
-:10CC40000260000000000000A805E400FBC032C83C
-:10CC50000EE003ACA0EB2032408CA0132C00D900D6
-:10CC60003E600CB003E800FA8030C03C9203EF60F5
-:10CC7000C32031C40CA0032A007000000000000093
-:10CC800048119C00332021DA0B70439C01B5002130
-:10CC9000000AE0021C00B7002FC00D70039C00B614
-:10CCA0000031C8085702DC00875021C00A70429248
-:10CCB0000460000000000000C0009A11B79021E05D
-:10CCC0000B6882DE08A78024600870121208958025
-:10CCD0002D60096C02DE00B18023E00A5862FE007C
-:10CCE00097A021E809E802301020000000000000B1
-:10CCF0004814CD00B30020C08B3C028C00BB002444
-:10CD0000C41A3D022F88B3482CE0893E028D8093DF
-:10CD1000D9A440881002CC0493C820C00B300292E2
-:10CD20000430000000000000E815B940FA00B280AD
-:10CD30000FE003E800EA8037A00CE8133B08DE01AF
-:10CD40003F820CE043FA80FE8031280CA003F00201
-:10CD5000C4C0B2800DE0033A04600000000000008F
-:10CD60004800E000F8003E100B8083E000F8303A05
-:10CD7000006D8083E144B8043E100F8013E000F89A
-:10CD8000003A104F0403E300E8103E000E8003D287
-:10CD900000300000000000000810E400C900384026
-:10CDA0000F1A032E00FBA036600C9803E604D10096
-:10CDB00036480E9102E600F9003E000C99036240ED
-:10CDC000F800A0680C90030204300000000000008E
-:10CDD0008004640289042E64889402A500B980202E
-:10CDE000640D9C02E642890022600B9C02E410B9AB
-:10CDF000403A50089C022720B900224008100360E6
-:10CE00000010000000000000180504008900224006
-:10CE10000A9082254CB9000240089602E41089006D
-:10CE20002650139402E440B9082E4008908A24004A
-:10CE3000B9012A40089002060040000000000000EE
-:10CE40000804058081402CC80810068400B1042025
-:10CE500049091442CC89812020500B1446C400B1EA
-:10CE6000002AC02814020101B0042840389402426C
-:10CE70001100000000000000B80D600088003A00BA
-:10CE80000E80232000F850B2000C8012E140D850F0
-:10CE900036000E8003E000F8002E000C8053600482
-:10CEA000F8003A000C80032E035000000000000040
-:10CEB000981DF440F9443E440FD403E400F1003FD0
-:10CEC000440FD453F444FD102F400FF403FD00FD34
-:10CED000403B100FD423D1047C4336500F5003E65F
-:10CEE00006700000000000001805A600F9102E6270
-:10CEF0000FD283E400BD423E610FD003F6C0C9A249
-:10CF00002B400CD0033400F9813E6808C143FA007D
-:10CF1000F5803F620C140306007000000000000062
-:10CF20003810E12088112E100B8002E000B8822E0C
-:10CF3000100B8000E3C488F022000B800A2000E878
-:10CF4000402F14088802E200B8002E000888028EE4
-:10CF500004300000000000000804C500A1002C40BF
-:10CF60000B1002C418B1226CD10B1026C40081082A
-:10CF70002A408810020404B5C00F400B020241A0F1
-:10CF8000B1402C40081202021170000000000000A5
-:10CF90001815A40089062E400B9012E400B9402E0B
-:10CFA000400BB082C402894422400A90022400A9A6
-:10CFB00000274809B012EC18B9012E4040900286B3
-:10CFC0000460000000000000A015E784E9013E4075
-:10CFD0000F9003E400F9003E720F9003E7608910A0
-:10CFE0003A400C90032400F9443C402D9003E76044
-:10CFF000F9713E40289003280470000000000000F2
-:10D000002801A448A9003EC00F9A43EC00F9207EF5
-:10D01000C80F9A07660079807E400F1C03E700E97D
-:10D02000A03E40468003E020F9003C400F9003CA38
-:10D03000006000000000000028108000F8003A00A6
-:10D040000F8003A008E8403A100C8303A1C0F04011
-:10D050003E060F8403E100F8003B000F810320002F
-:10D06000F810B2004C800B0A042000000000000001
-:10D0700028052800BA002EB00BE802E9003E900215
-:10D080008108E4127800BA002DB089E822F80CBAC1
-:10D09000006E8003C5033000BA0022A808A0228ACF
-:10D0A000004000000000000028054C00B30028E804
-:10D0B0001B31128CC4A3922C408834068E0093003E
-:10D0C0002CF01931A2CC04B30028800138024C00A6
-:10D0D000B38020E00AB012020050000000000000FF
-:10D0E000A0011C00B7142D420B6002DC00B78127A1
-:10D0F000E01860025818B7222D80097022DC00B7B2
-:10D10000002D800B3B021DD0BF8028C08AF202A0F8
-:10D110000040000000000000A8081F80F7A039E2CE
-:10D120000F68039E00ED843DE24478039E00F7B44F
-:10D130002DE00D6803D600F68039E00F79035E908C
-:10D14000F78131602E7C032A0200000000000000FD
-:10D15000081DAD00FB423EC80FA003EDA0BB003888
-:10D16000C80FB0036800FB113E4009B041EC00FA63
-:10D17000023EC00FB20BED803B0036400DB02342A3
-:10D1800006600000000000000005FF00CFD033E47F
-:10D190004FF903DE40DC8036E40CB913FE00CF907B
-:10D1A00037E50FF843FE00CF923FA40F78031F002E
-:10D1B000C58033600CF82000007000000000000003
-:10D1C000A811BC000F1021810B600384008B082183
-:10D1D000600A7B0398008B1029840E6422DC40D700
-:10D1E000022D840B70021C00851821400AF022AA2F
-:10D1F000046000000000000000009C00A71469C04B
-:10D200001A6012FC01A4102DC00A52024540870C7E
-:10D2100021801B6082D400860325E01B70025C40E5
-:10D220009D0029400870020000200000000000005E
-:10D230002014CD00A30028C01B20228C11A300685D
-:10D24000F60A3C068200838028840A8C82CC4492B1
-:10D25000002CC00B30024E00910028400A3002889A
-:10D260000430000000000000A815BE22EF04BAC080
-:10D270000F1493EC02F1C33EF00E90836600CFD200
-:10D2800032500F9C03CB00C9803E280FB0034F00E3
-:10D29000D1C0AAC00C71032A046000000000000085
-:10D2A0008000EC20DB0026800FA003EC081B00367A
-:10D2B000C00F8601E540FB023A480E9403EC80F172
-:10D2C000843E004FB003ADC0EB2036C00FB023E06A
-:10D2D00000300000000000000110DC00CF003F60C3
-:10D2E0000CE0833E80ED0833D08F50039E00DF00BA
-:10D2F00033400CC0033000CC1033680CF0033C8486
-:10D300008D9030400CF00308443000000000000015
-:10D3100081046C008B022CF408A8620C808B802A9C
-:10D32000600F9C022E008B0020600D98022C80D88C
-:10D330000014400834122E008B8232400DB003607E
-:10D34000401000000000000080052C008B002ED053
-:10D3500008B8022C008A8422C00B8802E4A0830053
-:10D3600022620A98022800890022000AB1062C00D5
-:10D37000AB00224008B00260004000000000000046
-:10D3800008040C02A3002CC10820020C028B002808
-:10D39000C20A00024410831022400B10060C0091B8
-:10D3A00004AA002830022C00A101204009B002424A
-:10D3B0001100000000000000000D7C008F003EC046
-:10D3C0002CA0032940A84032CC8B8002E000CF4043
-:10D3D00032000E800A2000880022400CB0032C048A
-:10D3E000EB00B2408CB0034003500000000000008E
-:10D3F000A01DFC00DF003F400FE003FC80FF283D44
-:10D40000C00BC103B014FF003F000DD003DC00FCD3
-:10D410000037400FF021FC001D007B408FF003E03F
-:10D420000670000000000000C005D200DF0031A03F
-:10D430004DF0433200CE141B680EDA23B2C02F0029
-:10D440003FC22CE8033C40FD083BC84CF0833CA0A5
-:10D45000CF0033C40CF307F00070000000000000A0
-:10D460008010E2008FC022A008FD422F008B7022A6
-:10D470001E48890227C08F5A2E50483002BDC0BDB9
-:10D480004023C548F4823D2C877022C008F103E098
-:10D4900004300000000000008805E00093102681A1
-:10D4A0004930028040832028400A10028000A324D3
-:10D4B0002CCA0832820C00912820CA1B32020C8828
-:10D4C000830920C8093202E2017000000000000058
-:10D4D000C015A3148B04268908B002AC228B882ABD
-:10D4E00020089882A610AB002ECA08B082AC00B902
-:10D4F0000022C029B00A2C018B0022C009B022F002
-:10D5000004600000000000004015E300DB0034E28E
-:10D510000DB003A300CA80BA700E8803A600EB000A
-:10D520003E900CB5032C00FB10BAC00EB0032C02C9
-:10D53000CB0232C009B002D004700000000000002D
-:10D54000E001B008FF00BBE00F70036500F4003598
-:10D55000400F40035400DF003E400FF803EC00F79B
-:10D56000013DC10E3003EC00FF003FC08EF003B858
-:10D5700000600000000000004010A040EB083E806A
-:10D580000DB003E000C8003A510F82036420DB00B5
-:10D590003D820CBC032C10DB0072C00DB1030C20CB
-:10D5A000D30032C00FB00B50042000000000000078
-:10D5B000C805010087C02EA808F112C540880022C6
-:10D5C000400B84022700AF002EC008BC123C008B29
-:10D5D0000123C028F54A3D28DF0033C04BF0033259
-:10D5E0000040000000000000E0054880A3902C00EF
-:10D5F000083002C100920428000B14124300B30447
-:10D600002C300AB00A8C00930060C0083C060E0162
-:10D61000B3002EC08B300638005000000000000020
-:10D620002001120087802D24087802D200958021E5
-:10D63000A00B68025A2087802D661A7C029E008704
-:10D640008021E11879029E40B780A1E00B78024862
-:10D65000004000000000000048080000E3A03C403B
-:10D660000C3003C422D90038D40F30836840F30053
-:10D670003C800A32028C00DB00A2C40C30030C0098
-:10D68000F3003CC00FB103120200000000000000D4
-:10D69000400DB000FF103F400EF003FC00ED003FD6
-:10D6A000C00F3013BC407F103FC12DF0037C00FB46
-:10D6B000403FC20EF4837C00DF003FC20FF00390B6
-:10D6C0000660000000000000A805EC00DBA032C0EE
-:10D6D0000DB703E000CA043E800FB8032C10FB0016
-:10D6E00033008DB0032C80E9403ED20FB4032D806F
-:10D6F000EB20B2C00FB203EA00700000000000008F
-:10D7000048119000B71011C0087082D80A87012D07
-:10D7100080897003D808B70A21402C70020DC0859B
-:10D720000179C80B32020D208F2821C00B7282D2E2
-:10D730000460000000000000C0409610979023E0B5
-:10D74000097A02D60097802DF00B78821E00B3B0C4
-:10D7500021A00878021E00A5802DE00B7A021E8011
-:10D76000A7B021E80B7902F00020000000000000C3
-:10D770004814C000B30020E2083002C64093702C69
-:10D78000C0093C028E00B30020D80818020C0081AA
-:10D79000902EC00B302A2C108300A0C00B3002D278
-:10D7A0000430000000000000E811B900DA0233B8CC
-:10D7B0000DA003F800DEC03FB04FEC063840FA0081
-:10D7C000B3900C6C0B2808EA017E800FA0032800A0
-:10D7D000EA0032800FA003FA04600000000000009D
-:10D7E0004800E000F8403A000F8403E100E8023E00
-:10D7F000000F8403E140F8003E000F8103E000F8D1
-:10D80000003A000F8003E000F8003E000F8003D2D2
-:10D8100000300000000000000810E420F9C03E7055
-:10D820000E9002E480C90032420C9883A484F9006F
-:10D83000B2600C90832400C9003E400C1A02240000
-:10D84000C100B2400F9001C204300000000000008F
-:10D8500080046500B9812C600D94C2C7088900223C
-:10D86000400895C7A400B9002870A8940A2400892C
-:10D87000042E4028902A2600890022400B9002E0C6
-:10D88000001000000000000018052400B9402E40E0
-:10D890000A9002E5008100A040099042EC00B1002E
-:10D8A00022580890A2040289002E40089002A4A0E9
-:10D8B000890022400B9002C60040000000000000DA
-:10D8C00008040400B1202EC0891202C480812020E7
-:10D8D00040611042C500B120284818904204808160
-:10D8E000282C4808128284A0812020480B1282C272
-:10D8F0000100000000000000B80D6800F8002E00D4
-:10D900000E8003E008C85032140D8017E804F85068
-:10D9100032144C050B2140C8203E000C8703A1C2E5
-:10D92000C80032148F8203EE035000000000000094
-:10D93000981DF400F1103D400F9102D442FD103FBC
-:10D94000510E5413B500F91035442FD003E450FDA7
-:10D95000283E4E0F90036400F9383E440F9283E650
-:10D9600006700000000000001815F400FD003D40A6
-:10D970002CD003B600F9823E400CD003F400F980AD
-:10D9800033700C50033400C9C03E400CDA031680DB
-:10D99000C9403E622C988306007000000000000021
-:10D9A0003810E000B8002E000880022800B8502689
-:10D9B0000008A002E800B8002A342AAA0A20008839
-:10D9C000C02E2A0880222100A8802E000880020E86
-:10D9D00004300000000000000805C400B1002E4023
-:10D9E0004810068D00B1002C40281002C400B14040
-:10D9F0002C48081082440081602C4028140A0440FE
-:10DA000081202C400810020201700000000000007C
-:10DA10001805A440B9002E4008B0022400B9282EF1
-:10DA200050089022E400B9002E600B124264008975
-:10DA3000002C400990022400A9002C400810024646
-:10DA40000460000000000000A005E600F9003C4270
-:10DA50000C9003A740F9403E700C9802E540F90095
-:10DA60003E400C98036406C9012E400C9003240428
-:10DA7000C9003E400C900B2804700000000000001C
-:10DA80002801A400F9003E400F9083E610F900360B
-:10DA9000680F9C03E600F9003A400E9893A400F941
-:10DAA000003E400E9083C400F9003E400F90038A70
-:10DAB00000600000000000002800A000F8003E0404
-:10DAC0000C80032102C84032000F8003E100F00007
-:10DAD0003E020C80032000F8003E000C00032000F2
-:10DAE000C80032000F80030A04200000000000007C
-:10DAF00028153A00BE022FB008681238008A042A9E
-:10DB0000800BE042FB20BA002F9108E0022800BA07
-:10DB100000268008EE0A38008A0022800BA0028AC4
-:10DB2000004000000000000028054200B3002CC2A5
-:10DB300028380A4800830422C00B1002CD80B300AD
-:10DB40002EC0081C022400B3002CC00834120E4062
-:10DB5000830020C00B30120A0050000000000000BB
-:10DB6000A0011100B7002FC00870A24E008FB02195
-:10DB7000CC0B6012DC10B7302DC008D0821480B7F7
-:10DB80001225C8286002140087B221CC0B3102A8EC
-:10DB90000040000000000000A8081200F7803DE0EF
-:10DBA0000C38035600C790B1E40F7803DE00F790FD
-:10DBB0001F602C480B16A0F7803CF40C38031E00A5
-:10DBC000CFA0B1E80F7B032A020000000000000094
-:10DBD000080DA000F8003EC00BB003AC00F3213EDE
-:10DBE000C807B002E400FB203F400F8003E480FB45
-:10DBF0000036D00FA003E008FB423ED80FB003C2AE
-:10DC000006600000000000000005F080CF8031E1D8
-:10DC10000CF803DA10EF803FE40FD803FE10FF8208
-:10DC20003FE04CD81B1620CF803FE04CD830EE4070
-:10DC3000FFC0B3F40FF803C0007000000000000044
-:10DC4000A8019820834021C0087102DC8487202D20
-:10DC5000C00B6002D960F7002DC008F08214048761
-:10DC6000002DC008F0031E00B72021C08B7002EA0F
-:10DC700004600000000000000000B0008700218068
-:10DC8000087002F50427002DC08B7002DC00B7007D
-:10DC90002C50084002140087002DC00850025C047C
-:10DCA000B700A1C08B7002C000200000000000007F
-:10DCB0002014C80080000080083002CE0083C02CF1
-:10DCC000D04B3002CE00AB022C4048BC0204008393
-:10DCD000002CC00810020008B30020C0093002C8A0
-:10DCE0000430000000000000A8158340C80030C0C8
-:10DCF0002CB003EC00EF883FE607B183E100BF00E2
-:10DD00003EE00CB8033400CF003FC02CB0036810D5
-:10DD1000FF0033C00FF003EA0460000000000000C1
-:10DD20008000E400F1403EC00FB403ED40FB083E2C
-:10DD3000C00FA003E520FB003EE00DB083E400F33C
-:10DD4000003EC00F8003C400FB003EC00F3003E064
-:10DD500000300000000000000110F000CA0033E0B5
-:10DD60004EF0033400FF003FC08FE803F000FF00D7
-:10DD7000B1400CE0033400EF00B3C00CF0033800F6
-:10DD8000CF003DC00AF00300443000000000000056
-:10DD900081046222889022E0083C022E08BB012EFA
-:10DDA000C00BA0026600BB0022A008A9022400BB91
-:10DDB0000022C0282C02A200DB002EC00AB002A064
-:10DDC000401000000000000080052200980022C8DA
-:10DDD0000A98022704BB002EC00BB102E200BB0070
-:10DDE00022E208B002A400AB0020C00A888223000F
-:10DDF0008B002EC008B002A0004000000000000010
-:10DE000008140400914022C00810020C00B3002C3A
-:10DE1000C04B28224004B30020C028300A0404B3B9
-:10DE20000060C0080002842093002CC00A300282E7
-:10DE3000010000000000000000056000DA40B28030
-:10DE40000E90032400FF003FC08FA003E009FF00F5
-:10DE5000324008A00B3400EB0031C00C8003288056
-:10DE6000C7003FC00CF0030003500000000000009A
-:10DE7000A015D000EC203F000FC00BFC10FF013FAD
-:10DE8000C00FE003F400FF003FC00FF003F400FFF9
-:10DE9000003FC04FC001F008FF003FC00FF003E893
-:10DEA0000670000000000000C005FC00CC90372088
-:10DEB0000EF013BD04D4C1332C4CD9233260FF20A3
-:10DEC0003DE04FC103B640CD0037E00CE28B10C0FF
-:10DED000CD0033C60FD803300070000000000000F2
-:10DEE0008010EE088A20220008B7022D008A00B6B2
-:10DEF0003C0899022784BF682E820B01022440D976
-:10DF00004220C08AAC022DC28248A2D00B820220DD
-:10DF100006300000000000008805CC008804268040
-:10DF20002A30C2A580A92128008A00020000A3107F
-:10DF30002CC80B0002C490834224C1080002408810
-:10DF4000A360A8C00B00C222017000000000000006
-:10DF5000C015AC068A0022E048B0022E02AB802E2B
-:10DF6000204A8C022620BB006E800B30C246049BE8
-:10DF70000AA2C00A80126C40A8002AC00B8C023092
-:10DF800000600000000000004015EC00C10936618F
-:10DF90000E3203AB20F8843A782E98032600EB006B
-:10DFA0003E404F9003E200C94036E00CB4036E00DF
-:10DFB000EB003AC00F88031004700000000000005E
-:10DFC000E001BC00FD003F400FFA13F810DC04270D
-:10DFD000400D5043F400FF003F400FD903B000F95B
-:10DFE000013FF00FF023B200D4A037C00FC00BF8F0
-:10DFF00000600000000000004010AC20EB10F200B8
-:10E000000EB4032180C9403A480F9013E120FB0071
-:10E010003EC00C84032400FB0136E00C740B9C0012
-:10E02000CF0032E00F8403D0042000000000000085
-:10E03000C8051E008B80204008B802838081A02282
-:10E04000780B9183E300BF000EC10AB4036404B9E6
-:10E050005032C00AB2022000880023D40B8802F29A
-:10E060000040000000000000E0054C42A0802000BD
-:10E070004800020D0680802AD0030002C800B300C9
-:10E080002CC00836024000B90222C28B26020C10B6
-:10E09000010224C04BA102F80010000000000000A3
-:10E0A00020011E088E8021210828C29E008E80211A
-:10E0B000600B78029E20B7822FA10A78025E00B51D
-:10E0C00091A1E00B290232448680A5E00B4C02C8E6
-:10E0D000001000000000000048080C00E100228051
-:10E0E0000E000B2400C04428AD0F2002C800F3002E
-:10E0F0001CC00C0103484CF20430C00F15038040D3
-:10E10000C10014C80F0003DA021000000000000074
-:10E11000401D9C40F7003FC08FC003E400FA013F60
-:10E12000C00FF023FC08FB003F800FF001FC10FF44
-:10E13000003FC00ED103FC42FE803BC00FC003D0A5
-:10E140000660000000000000A805EC40C8003EC0CA
-:10E150000F9003EE08CB0032C00FA023E603CB4C98
-:10E1600032400FB007E800F90016400CA00B6C001D
-:10E17000CF0232C50C8003020070000000000000D6
-:10E1800048119C8084042DC10B4040DC0087042191
-:10E19000C04B7012FC018F6029400B70139C00B5BE
-:10E1A00000A3400A60020000840021C0084002125F
-:10E1B0000660000000000000C0008E0087802DA2D5
-:10E1C0000B4C16D608978821A04B6802DE04A78066
-:10E1D00021E00B4802DA04B68225600AE8621E00DC
-:10E1E000878020E8084802080020000000000000A6
-:10E1F0004814CC008B806CF00B3C02CE469BC020B8
-:10E20000E40B3C02CC20A30028E00B30028D80B14F
-:10E210008022440A210A03828080A0C008060A12D4
-:10E220000030000000000000E815A802CE803FA0EA
-:10E230000FE003FA40DEC0B3900FEA13F908EA04D6
-:10E2400033828FE403FB08FEA036A00CAC0B6B827C
-:10E25000C6A032802CE4033A0470000000000000E5
-:10E260004800E000F8903E020F8083E100E8203E85
-:10E27000030F8203E140D8003E200F0093A040F836
-:10E28000003E108F080BF000FC003E000F8003D210
-:10E2900000600000000000000810E400E9003640C3
-:10E2A0000F9407E600F980B0400C9403E440F900B5
-:10E2B00032400F940BA40071C032402C94232402EE
-:10E2C000C90032400C90030204200000000000004E
-:10E2D00080044400890022400B9802E660B90022C5
-:10E2E000600A9C02E624B90436400B98002400B969
-:10E2F00080A25208900224008940224068940220A3
-:10E30000001000000000000018052400A9002640AD
-:10E31000039402E401B9102255089022E400B100F0
-:10E3200026400B90002C09B900226008900A1C04BA
-:10E330008D08A0400810820E004000000000000080
-:10E3400008040600810020500B1242C480B1042052
-:10E35000500A1402C500B12224400B12220401B15C
-:10E3600040205008100A15008540285008140A0A59
-:10E370000500000000000000B80D6000E850360005
-:10E380000F8502E140F85032000CA023E010F85055
-:10E39000B2140FA503A148FA00B2000C80032004B8
-:10E3A000C40232000C00032E0350000000000000E5
-:10E3B000981DE500FD003F400FD103D444F5003F18
-:10E3C000510FD403F500F9103B400FD100F510F5C3
-:10E3D000407F400F542BE500F94036500FD003E644
-:10E3E00004700000000000001805F610BD40334026
-:10E3F0000FDA033780CD003F400FD003F400E9A0CF
-:10E400003E400CDE17A408FDC033418DDA1326A070
-:10E41000F9A832780CB40B06007000000000000070
-:10E420003810E100B8A036200B8A82A2802AA82EDC
-:10E43000000B8012E004B8A12E284A8E022AA0BA4E
-:10E44000C022280885022108B8E8A23C08C8020EAC
-:10E4500006300000000000000805C500B900204A91
-:10E460000B1402058001002C410B1002C404A14AC8
-:10E470002E420814028410B160A04A091002440020
-:10E48000B501294018D2021200200000000000004F
-:10E490001815A400B92126400B9602A410A9002E3D
-:10E4A000400B9612E420B9002E410A90422400B994
-:10E4B0000022410898226400B9202B4128D402068A
-:10E4C0000020000000000000A011E400F9E0325834
-:10E4D0000F98032640C9403E580F9C03E400E90012
-:10E4E0006E400C9A02A600F94432400D9A0B6484E7
-:10E4F000F900BA400C180328047000000000000066
-:10E500002801A400F9003E500F9003E600F9043EF4
-:10E51000480F9003E440F9003E650F9981E450F9FB
-:10E52000203E408F9003A480F90034400F9203D224
-:10E5300000600000000000002810A000F8403E101D
-:10E540000E84036008C8003E080F8083E028E804BA
-:10E550003E000C8403211CF04832000B0003E00253
-:10E56000C00032000CC00B020420000000000000BC
-:10E5700028053800B2882E8008E0037A808E002FAC
-:10E58000A00BE802F910BA002C8028E4022800BE93
-:10E590004023B808E802E804CA20A28008E8020A7A
-:10E5A000004000000000000028054C01B3002C4092
-:10E5B00008B8426C0283002CE00B3800CF40B30057
-:10E5C0002CC008B40A0C00B340A2820A3902CC0065
-:10E5D0009380A0C02920020A005000000000000023
-:10E5E000A0011D00B7002D64287402400087052D8E
-:10E5F000900B7402DC10B7302DC80834061C80B7AD
-:10E6000000A1C00A7002DE80830001000960822040
-:10E610000440000000000000A8081A00F7803D60D8
-:10E620000ED80B5E00C7803DE00F6803DE10F7A92F
-:10E630007FE84878031F30FF9433A00E7803CF247F
-:10E64000D680B1E00DF84322020000000000000077
-:10E65000081DAC00BB000C400FB003EC08F9003EF5
-:10E66000000F9041EC00FB617ED00FB003EC80FB0B
-:10E67000403F9B0CB003ED90FA003C000EB003C28B
-:10E6800004600000000000000005DE00EF80336041
-:10E690000DD8033640EF903EE00FF903FE00FF80F7
-:10E6A00033FE0CFA03FE00CF80B3E00FF803FE0048
-:10E6B000CD8033E00FC843C0002000000000000000
-:10E6C000A8119C0085083540087003522087112C42
-:10E6D000EC0B7102D000E70035C4087402DC4087FF
-:10E6E0001021C00B7002FC80850821000B4182EADA
-:10E6F000062000000000000000009800AF0023503A
-:10E700000950021C80A70129C01B6006DC40B7101D
-:10E7100021C84A5202DC00830021C00B7002DC13C6
-:10E72000840025C00B5802C000200000000000003B
-:10E730002014CC0081802440083E026E0089002C09
-:10E74000C00BB402CA80A30024C00A0402EC4082B9
-:10E750000A20C00B3002CD1080C0A4000B1C02C8E0
-:10E760000020000000000000A8158400EB8033406A
-:10E770000D8C832600E9A03E788F9083E100FF0096
-:10E7800031D10E8423FC00CB8232C08FB002FD4019
-:10E79000CB80B6C00FA403EA0460000000000000B4
-:10E7A0008000EC00FB003E400FA003E000F9013EBA
-:10E7B000420F9003E554E3003EC8059303EC80FB51
-:10E7C000C13EC00F2003CC48F3083A000FA043E03D
-:10E7D00000300000000000000110F000CF003F40BA
-:10E7E0000F30012C0ACD1033000FD0831400CB0260
-:10E7F00033C00CE103EC10CD0033C00CF0333C000F
-:10E80000EA0033C00CF083C8443000000000000070
-:10E8100081046E008B002E400BBC022E000B0022E8
-:10E82000300B9C022780AB002AC008B802EC00899C
-:10E83000C020E008AE022C088A00220008B042E89E
-:10E84000401000000000000080052E008B042E40C8
-:10E850008B8C02AE10890022700B8C02A2008B01FF
-:10E8600022C0088002EC108288A27009B8022C082D
-:10E87000890020C0288022E0104000000000000035
-:10E8800008040C0481002C400B200280008104A0AD
-:10E89000504B000A8000A3012AC1201002CC14832F
-:10E8A0000022C00820020C008100E000080002C223
-:10E8B0000500000000000000000D6800CB003E4095
-:10E8C0000F900BAC80C90032100F8003A400CF0260
-:10E8D00031C00C8013FC02CD0033C02C90033C02ED
-:10E8E000E800B2C00C9003C003500000000000001C
-:10E8F000A01DFC02F5003D408FF0236D00FF003F9E
-:10E90000040FC003701CFF013FC04FC003FC00FD9B
-:10E91000003FC00FE00FFC18FC003F000FD003E8E1
-:10E920000470000000000000C005FE00D7020F3098
-:10E930000CF2017E0644303F200EF0027C84FD2064
-:10E9400027080CD0013600FF6033CC0BF1132CC428
-:10E95000FF300FCD0CF403F0007000000000000049
-:10E960008010EE008FC02E0008FC022E008A302896
-:10E970005208F6823C68BD903234489C122600CF83
-:10E980004023CC0BF6023D00BF102FCC88F602E0EE
-:10E9900004300000000000008805CC0093102C0813
-:10E9A0000931024C009B2064580331624C81A10064
-:10E9B00020004814024400933024C00B33028D849D
-:10E9C000B3206CC02A3602E2017000000000000093
-:10E9D000C015AC109B022E410BB002A4009A004A55
-:10E9E0006088B0526C01B9002600089122EC08BB87
-:10E9F0000026C00BB002AC00BB056EC10AB002F02D
-:10EA000004600000000000004015EC00DB013E3017
-:10EA10002D30034760D8A016388FB0036C00790200
-:10EA200031600CC80A6600BB00B6C00FB00BAC006A
-:10EA3000FB013EC10EB003D00470000000000000D6
-:10EA4000E001BC10EF083F240CF0037620EE903577
-:10EA5000400E7003AC00FD00BB640F88133480CB04
-:10EA6000003BC00FB0036C08FF003EC00DF003F880
-:10EA700000600000000000004010AC01FB8032107C
-:10EA80000EB003ED00CB503E408CB0432C10F9008B
-:10EA900032600C400B2600C30436C00C30032C003F
-:10EAA0009B00B0C00CB003D00420000000000000A8
-:10EAB000C8050E80BF042A4000F500E60082D2227D
-:10EAC000400DF0223C00950236400A80022E008F55
-:10EAD0000037C00AF0423C008F0023C028F002F249
-:10EAE0000040000000000000E0054E00B3002220BE
-:10EAF0004A3000CC0081C028000830020C10A10070
-:10EB000028801830220404830024C0083002CC0876
-:10EB1000930020C0083006F80050000000000000FC
-:10EB200020011E00B78029A0087802FE208D8029D0
-:10EB3000E55B38421E40A18125A80879023700878D
-:10EB40008025E00A780ADE81878025E5487802C8BA
-:10EB5000004000000000000048080C00B310301214
-:10EB60000E3012CCC0C30038800C31060C40F100CE
-:10EB700038800C30430442C30036C00C3203CEC090
-:10EB8000DB0030C00C3003D20200000000000000A7
-:10EB9000401DBC00FF103D844FF103D040FC1033FA
-:10EBA000805DB183FC50DD0A25890FB803D400FFD6
-:10EBB000103FC00FF4033C40FF003BC00FF003D0F8
-:10EBC0000660000000000000A805EC00FB203E00ED
-:10EBD0000FB5032920F90032A00CB083EC0049C81E
-:10EBE000B2C08CA0036400FB0812EA0CB00B2C80AE
-:10EBF000FB202ED26CB643EA047000000000000037
-:10EC000048119C00B7492D000B30821001B50283DA
-:10EC1000C01A7222DD41850061C01820201400BF97
-:10EC20004035D00D34021D20B72825C1087482D28A
-:10EC30000660000000000000C0009E0437A02D20E8
-:10EC40000B7A121601B38021E20878429E0085807B
-:10EC500020E11868025600B7A025E0087A021E00DD
-:10EC6000B7902CE5887A02F0002000000000000038
-:10EC70004814CC00B3006C241B30020000B000200C
-:10EC8000F80A3002CC00810020D81820020400B31A
-:10EC90000024C00930020C00B30026C0083002D2A4
-:10ECA0000030000000000000E815A800FA003D80D8
-:10ECB0000F200B2880FE0033A00CA003E802CA023C
-:10ECC00032902CE4037800FA0032800CA003280074
-:10ECD000FA003E800CA003FA006000000000000073
-:10ECE0004800E100F0003E004F8003E080F8003E65
-:10ECF000000F8023C000F8023C000FC0836000B802
-:10ED0000003E000F8023E018F80136000F8003D288
-:10ED100000300000000000000810E600F921326019
-:10ED20000C90032C44F900B2400F901B2400E90022
-:10ED30003E400C1003A400F90032400F10332410A1
-:10ED4000F10032400C90030200300000000000008F
-:10ED500080046400B940A2410890022480E90022A6
-:10ED6000400B9012240089006E411890422400B993
-:10ED7000042A410B90036400F9002A400A900A20FB
-:10ED8000001000000000000018012480B942624811
-:10ED900028900A2400B10022400B10022410B9026E
-:10EDA0002E4008D002A400B10022400B900224049F
-:10EDB000B9002240081002060040000000000000D8
-:10EDC00008040C00B12060400812020400A12020B9
-:10EDD000400B1202048091202D680852120400B1E9
-:10EDE00028284A09128244A0B12C284A0A12820219
-:10EDF0000100000000000000B80D6000F8003214AF
-:10EE00000C80032000F85032140F85030140F800F5
-:10EE10002E0028C003A000F82430080F8223208091
-:10EE2000F82032080C82032E03500000000000007E
-:10EE3000981DE408F9103F408F9113E400ED103F56
-:10EE4000500F9103E440A5103E440F9103F404F9E0
-:10EE5000283E4B0B92A3E4A0E9283E4A0F9283E69A
-:10EE600006700000000000001805F400CD003340DB
-:10EE700080D001F400A50026400F90032600F18801
-:10EE80003E680D98834400C9C03A400C980324089A
-:10EE9000F9A032780F9A030600700000000000000D
-:10EEA0003810E0028800A200088002E0000A002278
-:10EEB000000B80022000B8402E14088043300088E8
-:10EEC000A0222A0A8A42A005B84232380B80020EDC
-:10EED00004300000000000000805C4039100244035
-:10EEE0000B1002C411B10420411B10224500B500D3
-:10EEF0002540095002540181402C400914924400DD
-:10EF0000B140244C0B140A420170000000000000C4
-:10EF10001815A400990024420B9002E401992026C0
-:10EF200040CB90026400BB002F410AD0023400891C
-:10EF30000026400B1002E400310062400B900246B4
-:10EF40000460000000000000A015C400D901365084
-:10EF50002F9003E660F98036520B900A6400F900A6
-:10EF600036400D9003640209003E400D900364009A
-:10EF7000B900B6400F900368047000000000000064
-:10EF80002801A400E1003A410C9023E620E900BAF0
-:10EF9000700F9003A400F9003E400D1013A700F974
-:10EFA000003A400E9043A408F9003A400F90038ABB
-:10EFB00000600000000000002810A020F8003200CF
-:10EFC0000F80832100F0003A11098003E000C8019E
-:10EFD00030010C8003B000D00034000D800320000D
-:10EFE000C80032000C80030A04200000000000006A
-:10EFF00028053800BE00228003E8021A08BE482215
-:10F00000800AA003B800CA0822800FA40208008A60
-:10F010000022808DA0022800DA002A8108A0028A3E
-:10F02000004000000000000028054400B30020401C
-:10F030000B30020800B06468C108B022CC0C938089
-:10F0400000C04836028800B30024C00830060C0116
-:10F05000A3022CC008B0020A00500000000000000B
-:10F06000A0011408B50021400B38821C21B70023F1
-:10F07000E84A72269E408F81AB404270523800A30E
-:10F080002220C44931021E0AB7222DE8087202A8C4
-:10F090000040000000000000A8081200F68021E0F7
-:10F0A0000B780B1E00B4823BE84C7C13FE02978069
-:10F0B00033A00838039A00F78835E20C78E30E0095
-:10F0C000E3E834F80C3C232A0200000000000000B2
-:10F0D000081DA804F1003E420FB013EC00FB00BE77
-:10F0E000CC1EB607ED80FB0036000FB0436800CBA6
-:10F0F000303ED80FB60BED40CB003AC02FB603C25E
-:10F1000006600000000000000005F240FB913D4C4D
-:10F1100080F803DE40C6801BF04FFD07FF00CD8066
-:10F1200033E00C6803BA00FF8033E007F8033F10B8
-:10F13000CF803FE00CFC03000070000000000000E6
-:10F14000A8119000B5C02D40086202DC20D6022133
-:10F15000C88F7002DC81B50081440D61221804B7AC
-:10F160000035C00B7002BC00A7012DC0087003EA77
-:10F17000046000000000000000009001B6012FC0F4
-:10F18000187002DC0A961029C14B7006DC1085004D
-:10F1900025800860821A20A30025C00B31025C4044
-:10F1A00087002DC008700200002000000000000051
-:10F1B0002014C800B1002C40882002ED008A602095
-:10F1C000C00A3002CC04B10024002824020A003313
-:10F1D0000024C00BB002CC00A3002CC088300288F1
-:10F1E0000430000000000000A815A000FB003EC68F
-:10F1F0000C8003E50009C8ABE20BF002FC004A00FA
-:10F2000036C0089003A600FF0033C00FF0037C0057
-:10F210008F002FC028F0022A0460000000000000C8
-:10F220008000E100FA013EC00F8003EC00F9403E8F
-:10F23000C007B003EC00FA003A400F9023E500FB52
-:10F24000003EC00FB003AC00FB003CC00FB023E099
-:10F2500000300000000000000110F000FC203FC062
-:10F260000CC803FC20CD81B3C24FF003FC00CA00E0
-:10F270003C800CD0823601FF003FC00FF0033C08F9
-:10F28000CF043AC05CB003C044300000000000006E
-:10F2900081046204B8402C60088902EE80A9602ACB
-:10F2A000C00BB0038C00AA402E000810022681EB90
-:10F2B0000026C08BB0136C00DB002EC03DB002E016
-:10F2C000401000000000000080052300BB032EC892
-:10F2D00009B002EE008B1026C00BB002EC00A800B3
-:10F2E0002EC0088822A480BB002EC04BB0220C0088
-:10F2F0008B002EC00BB002E00040000000000000B8
-:10F3000008040000B2002EC0292802EC01A002204F
-:10F31000C0093002CC00A0002C40080042840093B9
-:10F32000006CC00B30064D0093002CC0083002C2A8
-:10F330001100000000000000000D6000F8202FC048
-:10F340000DB003EC00CB0033C00BF003FC18E80059
-:10F350002E80088003A400BF003FC00FF0433D1182
-:10F36000CF033EC15DF023C0035000000000000049
-:10F37000A01DF000FC103F400EE003FC00FC003F2D
-:10F38000C00FF003BC00FC003F002FC0037400EF6F
-:10F390000027C00FF003FC18FF003FC00FF003E888
-:10F3A0000670000000000000C015FC889C293F0882
-:10F3B0000FD283EC00FF083F280FCA033C41CF2047
-:10F3C000732C0CC0033020CF6033D80F78033F80FC
-:10F3D000DD9233C80F5003300070000000000000C1
-:10F3E0008010E54088402E048B9402E400B9000EA2
-:10F3F0007F8F9E836582CF683E508D04922F04D309
-:10F400004074DC0DA2022040890022F00B980220FB
-:10F4100004300000000000008805C809A0852C0108
-:10F420000B0010CC40A2082C00DB110289009330A5
-:10F4300020050813028008A36060C00AB082088417
-:10F44000812020D00B1002A20170000000000000FB
-:10F45000C015A41288806E200B8882EE00BA812E1F
-:10F46000605A9802A2008B002A6008111A2C00BB77
-:10F470000022C008B80A2800812002C00B9002B008
-:10F4800004600000000000004005ED00D9803E202F
-:10F490004F9800EB20FBE02E600B8C62AE208B00BF
-:10F4A000226008BC03A020EB0022C10A180B250033
-:10F4B000D900B2C00F900B90047000000000000053
-:10F4C000E0019488FF003F010FD001F008DD013F0B
-:10F4D000420740035C00AF003F400FF800F000DF40
-:10F4E000003FC00FC023F450FD803FC00FD0037811
-:10F4F00000600000000000004000AC00D9003E4069
-:10F500000F9403A820CA403A400F9403EA08FB0076
-:10F510003A004CF6232C30CB0036C00D9003A102EC
-:10F52000D900BAC00F9803100420000000000000AA
-:10F53000C80524008A002E400B9502E0088880222E
-:10F54000708F8C02E000BF02200008B8020E00DFBE
-:10F550000023DD0898822A00898023C00B501A32CC
-:10F560000040000000000000E00544008305244145
-:10F57000091002CE0083902C801B2482CC00BB009B
-:10F580002C8008040804018B0022C02812026C8021
-:10F59000814824C40B100238005000000000000015
-:10F5A00020013E4286802D600B6802F6908D8021FE
-:10F5B000220B5802D740B79021E00849921E53977A
-:10F5C0008121E048C80A5222858825E00B580208AC
-:10F5D000004000000000000048080C00830034C018
-:10F5E0000F0003CE20C3307C940B3483CC14F30281
-:10F5F0003C800C04030460C300B0C00C1003EC009A
-:10F60000C9003CC40F1103120200000000000000FA
-:10F61000401D9C00EE013FC04FE103D440F5167A37
-:10F62000C04EF003F41037053DC00FC00BDC40FFA7
-:10F63000003BC20ED007BC02EF003BC60FD003D088
-:10F640000660000000000000A805F400DD8433809F
-:10F6500004F0036C02CB027EC01FA053EC00CB2051
-:10F6600034400CD00B2010EB001EE00F300B2C00B0
-:10F67000C10032C00F9103EA0070000000000000DA
-:10F6800048119C0087002180086000140085002D2F
-:10F69000800B7052D404832829C02850035000875F
-:10F6A0004025C80F60020400A7003DC80B5202D2DB
-:10F6B0000460000000000000C0008E00958021E082
-:10F6C0000938021E11A7802DF00B7852CE0A9795AB
-:10F6D00021E0195C020E00A78029C80BF8021E2049
-:10F6E0008D8021E00B5802F0002000000000000097
-:10F6F0004814CC0082E0A0E82930060E50AB802CE4
-:10F70000F00B3142CC00930028C40998024C2883A6
-:10F710000024C00AB0020D00A25828C00B1002D26B
-:10F720000430000000000000E815B900DE8031A0C0
-:10F7300009E20B7804EEA42FA48BEC02D800DA00C7
-:10F7400027810DEC061B00EA043E800BE0033B0022
-:10F75000CEC022800FA003FA046000000000000069
-:10F760004800E080F8103E050E8803E00898403E0F
-:10F77000000F8483E140E8003A020E8043E140F844
-:10F780000036000F8003E020F8003E000F8003D217
-:10F7900000300000000000000810C400E9003E40F6
-:10F7A0000C90030420E99032680E9803A400C10075
-:10F7B00030400C94832408C9003E400C9003A40000
-:10F7C000C90030500C1A0302043000000000000091
-:10F7D0008004640089402E5028900A240889061667
-:10F7E000610B9C02E420A90036400D90022760A91D
-:10F7F000002E4028901A24008900364028980220C4
-:10F80000001000000000000018052C00A9082EC2FE
-:10F810000910002400A9000640899606E600890028
-:10F8200022C00890022402890024400890020C069D
-:10F830008300224008900206004000000000000003
-:10F840000804050081442C500814020580812064BE
-:10F85000701B1402E480A120644019120A0480A1E4
-:10F86000002C5018140285008140244040100202F0
-:10F870000100000000000000B80D6000E0003C0046
-:10F880000D80020000AA5036000F8003E140C852EC
-:10F8900072140C05162008C8503E010C8003A00409
-:10F8A000C800B2000C800B2E0350000000000000C6
-:10F8B0009819F502FD403FD00FD423F444FD147F86
-:10F8C000500FD407F440F9103F5007D123F440F90A
-:10F8D000401E5007D00B7500FD023E500FD403E6CA
-:10F8E00006700000000000001805F600C9A83E726E
-:10F8F0000F9803E6C0FDA0B3400FD0037780CD90F2
-:10F900007F400FDAA31690A9C032604CB1032400E7
-:10F91000C100336A0BDA030600700000000000002B
-:10F920003810E34088E02E300B8D02F340B8E876C3
-:10F93000004F800A228088906E288F8A036144F8E5
-:10F94000E13E2A08880342A0DCA03E100B850A0E87
-:10F9500004300000000000000805C4A085082D4800
-:10F960001B5282D480B11420400B18020582810002
-:10F970006C420B12820400A16021500B50021490C3
-:10F98000952C28400B1002020170000000000000BE
-:10F990001815A4018D442F400BD402F404B9082299
-:10F9A000400A92022C8489002E400A14026C80A91D
-:10F9B000012A4009500A5C028D602A400B904206E1
-:10F9C0000460000000000000A015E662C9023E5479
-:10F9D0000F9003E400F94022460B98036720C90109
-:10F9E0002E690B940B2520A90022402D920A262275
-:10F9F00099002A408F900328047000000000000046
-:10FA000028018602F9003E400F9003E680F1A03EF7
-:10FA1000620F9883C620F9003E490F9083E400717D
-:10FA2000023E400E900BE680F9803E400F9003CAE4
-:10FA300000600000000000002810A010C8003E0078
-:10FA40004F8043B000C84132000F80032102C8023A
-:10FA50003E104C80030120C8003B000CC003B000E6
-:10FA6000CC0432000F80030A0420000000000000D4
-:10FA7000280528008A802E800BA002F8048E00231F
-:10FA8000B20EE082F9048A002E810CE00A3A80DA94
-:10FA90000022B608A00228008E002A800B600B0A04
-:10FAA00000400000000000002805440293812CC0A3
-:10FAB0004B3002C80083CA20E019B0068C008104D4
-:10FAC00044400834020D0083002A0008000A8040E8
-:10FAD000880020C00B30024B0050000000000000E6
-:10FAE000A001040297082DC00B6006CA00830921FB
-:10FAF000C00A7002DC0085312D680930021C1493A5
-:10FB00002020C008F0429C028F0029400370122878
-:10FB10000040000000000000A808160096843DA0E8
-:10FB20000F78039A028780B1E00B7803B600C5A076
-:10FB300035610C78131E02C78029000C4803900021
-:10FB4000C48031600F58036A02000000000000000A
-:10FB5000081DA400EA003E800FA003E808FB003E59
-:10FB6000800F9013E408F9003C502EF003E808FBE6
-:10FB7000403EC00B30136C00FB003E400F3003C210
-:10FB800006600000000000000005D600CD8033E0D4
-:10FB90000CF803FA00FD803FA00DF803FA40CDD029
-:10FBA000777E0CE8431E00CFD83FE00CC8033AC470
-:10FBB000CC8033E00CF8030000700000000000006F
-:10FBC000A81194028D0021C0086003D81035208B45
-:10FBD000D40D6403D8C085002F4E0764029C02D761
-:10FBE000302F040DF10B5440AF0035400870022A4D
-:10FBF0000060000000000000000094408418218094
-:10FC0000087002DA20B5000900087002D4048500EB
-:10FC10006D4C8960025C4097006DC00940025880BD
-:10FC20008488254008D00200002000000000000069
-:10FC30002014C6488000208008AC02A800B100A8AB
-:10FC400088092202864281006C520B2002C752832F
-:10FC5000002C000834826700A3802040083002088E
-:10FC60000430000000000000A815A300CBC0B24083
-:10FC70002C9082E600BB80BE78088E02EE008D00DC
-:10FC800027600D900A6F009F022E0009B403678061
-:10FC9000CA40E4C00C30032A0460000000000000E9
-:10FCA0008000E080FB223E400F8013E400FB803E9A
-:10FCB000400F9003E500F9003E400E7023AC20FB9E
-:10FCC000003EC08F8003E920F9083E400FB013E0EA
-:10FCD00000300000000000000110F000C6003200FB
-:10FCE0000FD1833440CF003D400CD003DE500D00D7
-:10FCF00073400CD1037C408702B3000DF403240051
-:10FD0000CE2032400CD00300443000000000000040
-:10FD1000810461228A0022000B8040250089C32EC5
-:10FD2000200A9803A100890036408894020F01AB95
-:10FD30000032C008040A2900A902A2400DB00A201E
-:10FD400040100000000000008005000089002261D2
-:10FD50000B900225019B882E60088802E800B10202
-:10FD600024401890022C00AB0120C108B4422C00A2
-:10FD7000820022C008B00220004000000000000005
-:10FD800008040000010020400B000A044683012CF7
-:10FD9000401A000680008100244008200A0C01A3BC
-:10FDA0000024000880020000A10020400930020267
-:10FDB0000100000000000000000D6002C8002200E9
-:10FDC0000F90022500DA003E400C9002CC00FD00AE
-:10FDD00037400C10132C02AF0032C00DB0032C00C2
-:10FDE000CA0032404C900B0001500000000000009F
-:10FDF000A01DF000FC003F0007C003F41CF4003F0E
-:10FE0000001FC023B0029D013F408FC007FC02FFCE
-:10FE1000007B000FC003F000FD003F400F7003E8BF
-:10FE20000670000000000000C005FA00CB803F24EF
-:10FE30000AC103FC24CD20370A0CC2833080DC02C7
-:10FE40003FCC0DD9033C58DF3033C80DF4233C4080
-:10FE5000FF003FC54FF023B000700000000000001D
-:10FE60008000EC020B822E080DB702FD0083180AF9
-:10FE7000580A84A2A5A089302255081262BD908F2D
-:10FE80006221D648F3023CC5BF482FD84BB702E0E9
-:10FE900004300000000000008805EC0083002E897B
-:10FEA000280002ECA08922288208120228409A0821
-:10FEB00028C888B20A0D109310A0C82830024C0040
-:10FEC000B3602CC40B30C2E20170000000000000DF
-:10FED000C015AC408B002E8008B102EC028B0020D4
-:10FEE000D00A9002AC000B0126400894028C008BD3
-:10FEF0000022C008B0022C10BB002EC00BB002F0D4
-:10FF0000046000000000000000148C20CB023E2D95
-:10FF1000088003EC08C9801E040CB00301085018C7
-:10FF20003E400C04032C00DB0132C00CB00B2C084B
-:10FF3000BB003EC00FB00380047000000000000052
-:10FF4000E100BC00FF003F600FC023EC00FFC0BE1B
-:10FF5000608FC923F650ED80B850AFC003FC00FF9E
-:10FF6000003FC10EB003FC04FF023FC00FF003F8D6
-:10FF700000600000000000004010AC00EB00328088
-:10FF80000D90032C0089003E988C30036180FA406C
-:10FF90003E402CA5032C00FB013CC02C30032C0060
-:10FFA000DB0232C00FB003D00420000000000000CC
-:10FFB000CA002E808B82A0C08C90023C008BF02265
-:10FFC000C20D800227008B1022400880223C00BF17
-:10FFD000002FC008F0023C00BF01A3C00BF012F2DA
-:10FFE0000040000000000000E0054C00B31C204071
-:10FFF0000800062C009B0020D00820024C00A30023
-:108010002CC008100A0C00BB0028C00930020C005C
-:10802000B30020C00B3002F8005000000000000038
-:1080300022111E0097A021A00879021E009790210E
-:108040006009E8223E00AF8421E4485C021E00B7CC
-:10805000902DE00978001E09B39021E40B7802D836
-:10806000004000000000000048182C40B3B032402F
-:108070002C81130C42D100B0C08C30034820E301A6
-:108080003CC00C30030C00F3103CC0CD320B0C4054
-:10809000D30030C00F3003D2020000000000000007
-:1080A0004015BC00E7003F800BF103FD006D00327E
-:1080B000401F7007D841C3103BC00FD103FD00FF24
-:1080C000103FC00EF003EC10FF083FC30FF003D0C9
-:1080D0000660000000000000A815EC04FB023E4012
-:1080E0000BA003AC00DB0036800DB003AC00E80051
-:1080F00036C12E90032C00CBA036DC0FB0032D68C8
-:10810000FBA092C20CB103EA007000000000000066
-:1081100048119C0837002DC00BE0021D80B70423D6
-:10812000000A40021C18840025C01850320D80A39C
-:108130003021CC0B34821C10B73021C8087002D219
-:108140000460000000000000C0009E20B7802D6089
-:108150000BFC229E008D8025A008F8229200B4809E
-:1081600025E008F8021E0087B021E0097A021E18F7
-:10817000B38021E0087802F0002000000000000039
-:108180004804C520B3012CD80B3C022C08B90020B0
-:10819000030A00822208900D26E40810020C00A3B6
-:1081A0000022C00B30026C00B30022C0283002C293
-:1081B0000430000000000000E8059900FA023F903A
-:1081C0000FEC23A800DA0035800DE002BA02FEC2EF
-:1081D000B6A00EE40B2800CA00B2800FA00B280046
-:1081E000FA0032800CA003FA0460000000000000D6
-:1081F0004800E000F8003E000F8203E000F8003E77
-:10820000000F8103E040E8103A004F8483E000F85B
-:10821000003A000F0003A000F8003E000F8003D2D8
-:1082200000300000000000000800E500C9023E40E8
-:108230000F90232400C90032682F10032400E91492
-:1082400032400D900B0400D9001E400C9003240016
-:10825000C90036400C90030204300000000000000A
-:108260008014640089012E404B9012240089C2A220
-:1082700060889003640089C1A240481603640289A3
-:10828000002E40089022240089003E4028900A20B9
-:1082900000100000000000001804240089022E4095
-:1082A0000B1002240089102240899002AC00A10822
-:1082B0002240099802A40089002A40089002240064
-:1082C000890026400810020600400000000000005F
-:1082D0000800240081002C410B120204818120221D
-:1082E00048081202C481812402480A900284A081B5
-:1082F000286C4A0812D204A181282C4A0812820252
-:108300000100000000000000B8086140C8002E1401
-:108310000F850B2142CA5022140D8543A140E8501D
-:1083200030000D8502A1C0D8203A082C820B208293
-:10833000C82034098C82032E035000000000000086
-:10834000980DFC02F9003F404FD103E440F514BF03
-:10835000440D51235C40F5101F4E4D50036408F945
-:10836000283E4A8F9283E4A0F9283A4B0F9283E685
-:1083700006700000000000000805F440FD003040D9
-:108380000C90032400DD003B400E900374005D0060
-:1083900036640DD000A600F94032780C99032440D1
-:1083A000C99032500F9B03060070000000000000CF
-:1083B0003810E280B800220108800A200088002AD4
-:1083C00000088002200088002220088A8BE100B883
-:1083D000802230280D022200D8E422280B8F0A0EBA
-:1083E00004300000000000000805C480B100A04077
-:1083F0000810020400890008400A904244009100DD
-:10840000205828900285008120A04C09120A04807F
-:108410009140A0400B10020201700000000000001B
-:108420001815A400B9022040089002040089012216
-:1084300040289022040089102240089002E400B1F4
-:108440000022408190020400910022400B9002061D
-:108450000460000000000000A015E500F10032609B
-:108460002C92132402D1103A400E12036604D90054
-:10847000B6400D1903A400F9003240099001240010
-:10848000D90222400F900328047000000000000071
-:108490002A01A500F9003E640F1003E400F9813EB3
-:1084A000668F9023E480F9043E408F9003E404F942
-:1084B000003C400E9003E400F9003E400F1003CA58
-:1084C00000600000000000002A10A000F8243E0018
-:1084D0002C84032000B8203E008C8003A000708212
-:1084E00032000F80032008F80032002C800B200897
-:1084F000C8003E000C8003CA0420000000000000F9
-:1085000028052804BE803A8008A00228048E006D49
-:10851000900DA0023A008E80A2800EE00B6800BA97
-:1085200000228008A0022800DA002E8008A002CADB
-:10853000004000000000000028814C00B1002CC069
-:108540000830020C18A3022C108830068281A0008B
-:108550002AC00B300A4C00B30020C01AB0028C01B4
-:1085600083002CC0083002CA005000000000000048
-:1085700020011C10B40A2BC80831261C0086002DCF
-:10858000C00972021D00A54029C00A60025C88B3C0
-:108590002025C80A72029C8097202CE8807202E88D
-:1085A000004000000000000028081600B5803DE2F1
-:1085B0000C7A8B0EC0A7812C200CFC039202EF805A
-:1085C00039E40BD8011F00F780B3F48E79038E00D5
-:1085D000C7C43DE82C7B03EA020000000000000055
-:1085E000081DAC00F8003EDD87B603EDCCE9003E87
-:1085F000400FB007CC100B0036D80F8043AD80FB86
-:10860000283AC00DB4036CE2EB603ED40FB003C255
-:1086100006600000000000004005FE00FE903FE5FF
-:108620000EF8033E10FF9017600FFC037A00EE80F7
-:1086300037E20E780FFF40EF881FE00CF883FE80D2
-:10864000CFD0B3F00CF8C3100070000000000000A1
-:10865000A8119C40B4100FCC0072021C00B6020995
-:10866000C028F0029800A60021C00B6003FC02871E
-:10867000002DC0087002DE008F1021C008F0036AD0
-:10868000046000000000000080009400B6022FC2C9
-:108690001A30801C00B60801400AF002180087005A
-:1086A00021C00BD0029C10870029C0087002DC4456
-:1086B000871064C00870020600200000000000005F
-:1086C0006014CE60B0002CC008340A0C08B004005E
-:1086D000400830A28980A26220E00B000ACC088307
-:1086E000006CC0083052CC00830024C0083002580F
-:1086F0000430000000000000A815AE00F8003FD0D4
-:108700000EFC033C00F90092840FFC03640080001F
-:10871000B7C30FB883BC04EF003FC03CF003FC02BA
-:10872000CF0037C028F0132A0460000000000000CA
-:108730008000EC00F8413EC80F3203EC00F8003A2C
-:10874000C40FB103C400F90036C00FE40BEC04FB06
-:10875000003EC10FB043EC04FB003AC00FB003E48D
-:1087600000300000000000000110F400FC803FC059
-:108770001FF0033C08FB0033802EF013A404CB0051
-:10878000B9C02CD80B3C00FF003FC00970002C047E
-:10879000FF003FC00FF003C00430000000000000E5
-:1087A000C1006C00B8802EC00BB0036C00B9162855
-:1087B0007208B0222740DB0022C008BD822C08BB13
-:1087C000002EC048B0022C00BB002EC10BB002E04E
-:1087D000401000000000000080052C00B8602EC092
-:1087E0000BB0022C00B1002A844A3022AC209880C1
-:1087F0002AC0083002AC003B002CC00AB002AC0812
-:10880000BB002EC00BB042E00040000000000000A2
-:1088100008040C01B0002CC00B30024C04B0002A3C
-:10882000800830020000100428C00820428C00B3E9
-:10883000002CC042300A8C00B3002CC08B3002C226
-:108840000100000000000000000D6400F8503FC06F
-:108850000BF0033C00FA0432800EF023AC00D90088
-:108860003BC00C9003BC04FF003DC02EF00B3C004D
-:10887000FF043FC00FF003C00350000000000000E1
-:10888000A01DFC00FC003FC007F003FC047C02B507
-:10889000000FF003F000FC0037C00FF0137C00FF66
-:1088A000003FC00DF0036D00FF003FC01FF003E864
-:1088B0000670000000000000C005D200D580330A19
-:1088C0004CF803F200FC0037261FCA03BCC4CF20BB
-:1088D00033E40F78033E44CF003BCE9F6813D000B3
-:1088E000CD80B3600FFA83F0047000000000000038
-:1088F0008010E080C928223008B222EA01B8822024
-:10890000504F9C00A8D1DB10A6E017B803EC80DB29
-:10891000081FD00BB802F600FB8022400BB00260AB
-:1089200004300000000000008805C4208180200081
-:108930008B3082C000B01028088B1130C48490287E
-:1089400024C80B30024C00831004C80B3002CC004A
-:10895000B30024400B3002E2017000000000000070
-:10896000C015A600810022100BB012EA20BB002A1D
-:10897000700A9C026200988826C802B2028E088B98
-:108980001822C00BA002EE203B0026400BB0027064
-:1089900004600000000000004015E000CB003280C1
-:1089A0000FB003E700B8523E204B0C43EF829BC050
-:1089B00032C00BB0026C018B802EC00BA083E6008E
-:1089C000FB0036400FF003D00470000000000000F0
-:1089D000E001B002FF043F900CF101F4087D803704
-:1089E000000FC0239800F7002BE00FF823FC06FBD4
-:1089F00083BFC087D003DC00EF003BC00FB001F89D
-:108A000000600000000000004010A600CB00338092
-:108A10000FB003E110F240B2003D94172D44FA412B
-:108A200032C09FB0232C02CB4032C04F90033D0098
-:108A3000CB003E400FB003100420000000000000F7
-:108A4000880526008B7120D5039902E000BB8022A7
-:108A5000601C80036000B80222C20B32022C018F1E
-:108A600002D7C00BA0036D4053802EC00EF043729E
-:108A70000040000000000000E005680280002400C3
-:108A80000B3526C200B09020C08800024F20B302F0
-:108A900060E21B38020C00880060C00B34824C027C
-:108AA000A1902C400B30023001500000000000006B
-:108AB00020013A088CA02D204B7802DA00B29021D8
-:108AC00066487902DE40B791A1E0DBF8021E4084DF
-:108AD0009001E08BF9025E0197802D600A780048D2
-:108AE000041000000000000048080C00800024046E
-:108AF0000F3203C4A0F14230C42C31024400F11102
-:108B0000A0C00B300B0C42830000C00F30034C029E
-:108B1000E3003C400B3001120200000000000000A6
-:108B2000C01DBC00FCA533C00FD003FC01BF003F3B
-:108B3000C40E7103740075103FC005F003DC40FFE4
-:108B4000043FC00FF043FC007F003F400EF003D015
-:108B50000460000000000000A804E800F204B380F4
-:108B60000FB80B2C00EB8032C00C20132E08CB0169
-:108B700032C50FB103EC48C81032FA8C38033C9070
-:108B8000CB003E400FB013C2047000000000000094
-:108B9000C8109800F60061810BF0021C00D700B7E6
-:108BA000800C7002BC108F0021C88B7243FC88DCE3
-:108BB0000037C80D50021C2287002DC00B7002D355
-:108BC000046000000000000080009E00B680A9A0A4
-:108BD0004B7C025E30A38821F00878021600858065
-:108BE00021E00B7802DE008780A1E408D8024E0065
-:108BF00097802D700B7802C8002000000000000054
-:108C00004814EC00B20028C00B10024E90930222D0
-:108C1000F00838428C42830422E44B38028E4083B1
-:108C20000020C00938224E2193002EE00B3002DBD9
-:108C30000430000000000000E815A801FA003B899C
-:108C40000FA0027808AE4023802C6C0B3A008E8C6B
-:108C5000B2000B8082E0028E0022800CE8027B8052
-:108C60009A803E800FA003FA04700000000000000C
-:108C70004800E009EC0036210B8013A100F8603EAB
-:108C8000000F8103E000F8003E000F8043E010F881
-:108C900000BE000F850B8000E8103E000F8003D25D
-:108CA00000600000000000000810E402C902304823
-:108CB0000C9913A402C9003E420C908F2400F900C5
-:108CC00032280C8803E000C900B2400F9003E7008F
-:108CD000C9103E400C1003020420000000000000F8
-:108CE000800464018980A248289242C50089402EF0
-:108CF000402C90062500B9002250089802C4008933
-:108D00000176404B9202E50289002E400D900360EF
-:108D100000100000000000001805240C8520A2406F
-:108D2000089006E50089402E40099042A4A0310039
-:108D30002250189102E400810022400B9006E400CA
-:108D400089002E400990020E004000000000000043
-:108D50000004150085402040081426E40081002C02
-:108D6000401810028480B120A050081402E502814E
-:108D70004020480B1006CC0081012C500914024AF7
-:108D80000500000000000000B80D60008C003200FB
-:108D90000C8023E000C8003E140D8012A144F8515D
-:108DA00032002C8003E000880422140F8007E000CA
-:108DB000C8003E000D80032E03500000000000009C
-:108DC000989DE400F9003F500FD003DC01BD423F05
-:108DD000504FD4437441FD103F101FC413F100FDE8
-:108DE000407E440FD043F501FD003F400F9403E661
-:108DF00004700000000000001805F400DF05336176
-:108E00000F50533410FD0433444F500376C1CDE06E
-:108E100033600CCE03F6C0E1C0B6648F500B3682CF
-:108E2000CD003E444C9EC3C601700000000000000F
-:108E30003810EA2880A0B2040B8A836000FA00365A
-:108E4000288B8003E3C8C8842214088A02E280D8F1
-:108E50008234341B8003600488002E200A8E42CEA8
-:108E600006300000000000004805C480810804416D
-:108E70000B92020400B1002C400B18022400B160D8
-:108E800026400A1602C500A1C020480B90024700E8
-:108E900091012C48181202D201600000000000006D
-:108EA0001815A40C8B04A2500B91022404A9012EC6
-:108EB000420B9002A400A90026600A9002E60081FD
-:108EC0000022408BB002240899102E401A9002C64E
-:108ED0000020000000000000A015E500C900364099
-:108EE0000F10022500B1002E600F10122402B9A04D
-:108EF000A4402E9103E600A90022400B19806404CF
-:108F0000D9812E404C9003E814700000000000004E
-:108F10006801A40AE900BE480F980BE400F9C436C2
-:108F2000701F9203E690C1903A408D8803E400F9E7
-:108F3000903E400B9803E640E9003E400F9003D27C
-:108F400000600000000000006810A102D820B210EC
-:108F50000C80832140C858B2104C800B2000F8428E
-:108F600032000F8003E002D80072001C8000200055
-:108F7000F8043E000F8003020420000000000000FF
-:108F800028053804CE41238008E0023910AE402283
-:108F90008008E0021A00BA002BAD038002E800CA84
-:108FA000002A800AE0021800BA001A800BA0034AC7
-:108FB000004000000000000068056C128900A0E07D
-:108FC0000838020D88830004E00838320E2531018C
-:108FD00024E08B3802E401830020C00830028C00BA
-:108FE000B3002EC00B30020A005000000000000049
-:108FF000A0011420862029B008F0823E04A7002199
-:10900000708870921C20BD0069C00B7602D4808FDE
-:109010002129E00A60869801B7002DC80B3B026049
-:109020000440000000000000A8083E00C7A0B0E017
-:109030002C780B1A00C38037E02878031A08F590C3
-:1090400035E00F7C12D682C79021E40878039E0099
-:10905000F5803DF10F7803220200000000000000BF
-:109060000819A400EE8036C14FD003C800FB003EB3
-:10907000510FB003E408F1603EC00FB003C500EB30
-:10908000103EC00FB0096C00FB003AC00FB003C225
-:1090900004600000000000000001FE00FD88336055
-:1090A0000FF903CE40D78437700CD8233600C5881B
-:1090B00033E04FF813F728DF8037E20C58033E0007
-:1090C000FF903FE00CF803000020000000000000CB
-:1090D000A9119C08F600A1000B6302D6308541312E
-:1090E000C80850231C00D520B1800F7003B400C7FE
-:1090F0000021C00F40A35840B7003FC40AF0022A25
-:10910000062000000000000000009C40B71021D2A3
-:109110000B7002DC42860025610851025000950068
-:1091200025C0097082D400870024C00850025C006A
-:1091300095042DC00870020000200000000000000F
-:109140002014CC08B2D020E04B0802C4008080205C
-:10915000F0081A028548811020400A3002C6109398
-:109160000020C00A1C020D40B30068C40AB0020906
-:109170000030000000000000A815AC01FE0032F035
-:109180000F8803E600C8C836F628A60A6D009D00C1
-:1091900032000BB003F603C70037C0089C0A6E000C
-:1091A000BB002FC00CF0032A046000000000000088
-:1091B0008000E401EB403E804FC103E400B8083A70
-:1091C000408FA4136C20F9003E700FB003A440EB55
-:1091D000003EC00F9223E800F9803EC00FB063E06C
-:1091E00000300000000000000110FC08CE0833C071
-:1091F0000FDA033000E40435C00DA0032800C500D9
-:1092000033000BFA03F403CB0031C00CD403142059
-:10921000CD8023C10CF002084430000000000000A3
-:1092200081044410CBD022C00B94022284B8C60221
-:1092300040082802A580890022600BB80264008BD8
-:10924000002AC0C800036600810000C00DB00AA853
-:10925000401000000000000080052C001300224098
-:109260008B24022A00BB82224000AC0284008900C9
-:1092700022220BB002C4009B002AC008B0022E00BC
-:109280008B102AC008B002A01040000000000000AF
-:1092900008040C10830020010B20020080B1002084
-:1092A000C108200288018100A0000B300244019B0C
-:1092B0000028C008B002480689002AC0093002828E
-:1092C0000500000000000000008D6C00C300B2C06B
-:1092D0000FB0032820FA00B1400DA007A000CD0078
-:1092E00022000FB003F4009F003BC02CB00B240001
-:1092F000C900BAC00CB00380035000000000000099
-:10930000A01DFC06FF02AFC00FC003F010FC003F21
-:10931000C09FE013F000FD043F404FF0037400EFE6
-:10932000003FC08FE002B401FD0437C00FF0436876
-:109330000470000000000000C005FC00C720B3C896
-:109340001CF1037C20CF0A3FD00DF0037C808F32CC
-:1093500033C40FF1833CE0CF1033C40DF2833CE201
-:10936000C78017CC4CF38330007000000000000071
-:109370008010E3408868223008060201A188C40EEC
-:109380001408878001C0285002048B8602A19888A7
-:10939000412A040A8482BD808B082BC488F40360B0
-:1093A00004300000000000008805CC088240201036
-:1093B000082112440482042C0889900244218B0065
-:1093C00024888BA00040848930224888B002CC08D1
-:1093D0008820A4C800320A220170000000000000AA
-:1093E000C015A000890022C1889062280889082E33
-:1093F000C008A0022808A80026420B9002CC508A80
-:10940000222A860A8002EC0088842AC108B026300D
-:1094100004600000000000004015F002CF0033C0DF
-:1094200048F84379008DC03F308D60837860C45820
-:1094300037200F58137B02CCC431200C4403EC02BC
-:109440008B8036C024B012100470000000000000B1
-:10945000E0019C00F4103D006FC913D412FE903F50
-:10946000F00FDA23F414FF023BF00FEA23B600FFFB
-:10947000823FE18FF403BC00FF003FC0AF7003F8F0
-:1094800000600000000000004010A000CA00320888
-:109490001CA003A520CB40BA101FB003AC00EB000A
-:1094A00072900CB4032904C95232500CB4030C005E
-:1094B000F84032C10EB00B50042000000000000044
-:1094C000C8052D80898022D90890222A008854223C
-:1094D000C08B80222019C80022408D801A2410D20F
-:1094E0004422810D80037C00B00037C088F0023236
-:1094F0001040000000000000E0054E008100A0F0D8
-:109500000890028902800022C00B0022A000B00057
-:1095100020400800020400826020800800020C083D
-:10952000B20022C0083002380050000000000000E5
-:10953000200103108E902324086B0216608F802177
-:10954000280BF9061E408F8023A44979023A409DDA
-:1095500090236409F8025E40BE9024E42879020852
-:10956000004000000000000048080C42C009300024
-:1095700028020384008A2030C48B11038450B30076
-:1095800020C00CA4220400CB4030C50C30030E4098
-:10959000F31030C40CB00312020000000000000001
-:1095A000401DB004FB043DC00FF243F804FD013F31
-:1095B0000C0F6103F848F4003D010FD003C800FC14
-:1095C00004BD040B4803FC18FF143FD50DF00390B5
-:1095D0000660000000000000A805E000F90132C0AC
-:1095E0008E90032802D10032C00DA80B0800E800BD
-:1095F0002E400C980B2E02CA00B2A06C80232D8046
-:10960000CA8032D00CBA032A0070000000000000AB
-:1096100048119C00B600A3000860020400860429DB
-:10962000000850421404A7000D804A600200008127
-:109630000021400870029D42860120C0083282123B
-:109640000460000000000000C0009200BC806320A5
-:10965000820802520084C22320880C0233008480D6
-:109660002F21894C02121494C56421084C020E80EB
-:109670009782A1EC08790230002000000000000071
-:109680004814CD44B30020C00830024D8003882820
-:10969000C0083C060F00A3432CC21B38020F009BDE
-:1096A0008864D008B8028C10930020C008300A12D9
-:1096B0000430000000000000E815AA00FA0532801E
-:1096C0008EA00B6900CA4032A03CA8032A00EA26FB
-:1096D0003EB00DA1632820CA4036A00CE013280933
-:1096E000DE0032802CA0033A04600000000000007D
-:1096F0004800F020F4003F000F4023B000EC003F92
-:10970000061EC213F088FC203F048EC003F080ECDC
-:10971000403B0C0FC0A3E000E8003E004F8003D2A6
-:1097200000300000000000000810E400F9003240A2
-:109730000C90032400C98032400F9053E410C900FC
-:1097400032400D9003E400F90036408F900324105E
-:10975000C9013C400C9003C204300000000000002E
-:109760008004474489002040089002250A81102285
-:1097700040489003C40089007640289002E410B964
-:1097800040B2400B9003640089002E41089042E0F3
-:10979000001000000000000018052402BD0023484E
-:1097A00008D0061D048D0029C04AD022F40085008F
-:1097B000614018D012FC00BD40A3404BF0020401F0
-:1097C0008B002E40089002C6004000000000000000
-:1097D000080436808520A34808520A148185202970
-:1097E00048085202B48085202548885202D480B5AA
-:1097F0002021480B520244A281002C4A081282C246
-:109800000100000000000000B80D6000F8512200C7
-:109810002C85022148C800BA140F8512E142C850B5
-:1098200022000C0003E000F85032000745032080BE
-:10983000C0013E082C8203EE03500000000000002F
-:10984000980DE440F1103E44079143E458F9113477
-:10985000444F9102E450F9103C4F0F9383E4F0F928
-:10986000113A4F0F9103E4A0FD283E4A0F9283E680
-:1098700006700000000000001805F6A0CDA0B36837
-:109880008C9A033680C5A022600C9A232604F9A086
-:1098900032660C9A830620C5A022600C9B032648E2
-:1098A000C9003E780C9A030600700000000000001A
-:1098B0003800E10088442295088512A142884002C0
-:1098C0009008840223A0BA4022A0088E92A3A0A8E8
-:1098D000402A1008AE02234088002E380884120E59
-:1098E00004300000000000000815C4008B12224064
-:1098F00008900244008140A05008110A0500B110F0
-:10990000A04808900204008140205028110244829F
-:1099100081002C50081102020170000000000000BC
-:109920001815A40289402240089412A50089282213
-:10993000490894022448B9142240089402A440A182
-:10994000502A50089142640089402E4008100206B7
-:109950000460000000000000A015E400C9003070A1
-:109960002C100B6600C94032500C90032620F9C021
-:1099700032700C90032620C90032400C9C03640016
-:10998000C9413E402C900B280470000000000000EC
-:109990002801A400F9043E480F9003E488F900343C
-:1099A000412F9C03E410F9003E442F9903E410F981
-:1099B000003E500F104BA410F9203C400F90034A7A
-:1099C00000600000000000002810A000C8003E1049
-:1099D0002C80032002C04032001C040F2100C00470
-:1099E00038000F80032108C86030100F800220006B
-:1099F000F80032000C8003CA0420000000000000C0
-:109A000028051A2082042F8008A00238008E8022A8
-:109A10008008E00228008A0022810B20022800DE54
-:109A2000E436800BA0422800BA04228008A002CAB3
-:109A3000004000000000000028054C0083012C803D
-:109A40000830022E608290A0C04830020C028300D1
-:109A500028C00B300A2C0083C220C00B302A2C00F7
-:109A6000B300A0C0083002CA00500000000000008F
-:109A7000A0013C0087012DC208F3123C008F012198
-:109A8000C86872221E04872021C40B70023C849F88
-:109A90000025C44B70021C04B78121C8087202E87B
-:109AA0000040000000000000A8001E00C7813CA08C
-:109AB0004C7A0B1A00C68030E008F8820E40CFF0D6
-:109AC00039E80F3A031E20C78031E30F38231F08FF
-:109AD000FFC033F20C7E03EA020000000000000029
-:109AE0000815880A7B003EC10B3423C810FB023ED8
-:109AF000CA0FB743EC80FB002EC20BB483EDD0FA43
-:109B0000003ED90FB383EC80BB203ED82FB403C2F4
-:109B100006600000000000000005FE00F59131A085
-:109B20000CFC03FE00C48131EE8DF80A3E30CF8478
-:109B300033E02CF883FE10FE8033E00CF9193F4827
-:109B4000CFC033E004FC03C0007000000000000040
-:109B5000A8119C08B7A121C8087102F0A085202196
-:109B6000CE0870023C808F002BC5087102DC10B457
-:109B70000021C10AF3820C00870129C00871026A22
-:109B8000046000000000000000009D00BD2127824D
-:109B9000007002FC048C00A7CCA870023C08AF0047
-:109BA00021C0087002DC00B70021C40870161C0A2E
-:109BB0008F0021C0087002C00020000000000000DB
-:109BC0002010C800BB4424E208B102C280018024F6
-:109BD000D08830020F52839128E4883D02CED0B065
-:109BE000B2A2C00A34120C02830028C00830024816
-:109BF0000430000000000000A815AC00FB01E440A8
-:109C00002CF043E5008A8837E000FA023D00EF00BF
-:109C100033D10CF403FD00F94033E80CFC013C04A3
-:109C2000CF0233C02CF003EA046000000000000003
-:109C30008000EE08F9103AD00FB093EC00FB0B3A1D
-:109C4000C08EB083EC80FB097EC80FB213EC00F924
-:109C5000003EC28FB24BCC04FB003EC00FB003608D
-:109C600000300000000000000110FC00FF0833C0BD
-:109C70001CF0037040C4C033C20FF0031C10C700B7
-:109C800031C00C70031C00C54133C00CF0232C0004
-:109C9000CF00B3C06CF0038044300000000000002F
-:109CA00081046A00B99032F108B0020A10D900228A
-:109CB000C10BB0022C00CB0622C088B0122C008849
-:109CC0008022C10DB0022C00830022C108B046E002
-:109CD000401000000000000080012E00B90022F0BA
-:109CE00008B01264008A0022C00B30422C008B00A6
-:109CF00022C008B0022C008A0022C088300A2C0042
-:109D00008B0020C008B002E000400000000000000E
-:109D100008040C04B102E4C108B022200293002020
-:109D2000C00B30120C028302A0C028300E0C02803F
-:109D300000A0C049300A0C028B0020C0083002C2CB
-:109D40000100000000000000000D6C00F92432C08A
-:109D500008F0036400C800B3C01FF00B3C008F0084
-:109D600033C04CF0433C08C30031C00CF0033D4805
-:109D7000CF0031C00CF00380035000000000000051
-:109D8000A01DF004F9413BC04FF003F011FD003F6E
-:109D9000C0877027FC00EF063FC00FF002FC08FCF4
-:109DA000003FC047F043FC0077003FC00FF003E8DE
-:109DB0000670000000000000C005D200C701370C8B
-:109DC0000FE823104AC4C031300CC9033446CF1009
-:109DD00033D00CF4033C58CF0033C02DF1033E02C6
-:109DE000CF213FE40FF203300070000000000000BC
-:109DF0008010E4840B40224C0BA8022CC08B202244
-:109E0000C84A32022480832020C008300220008B00
-:109E10002132CA4832022C308F902E880BBD12207E
-:109E200004300000000000008805CE20A340E04878
-:109E30004B20220C0282002A00082002048080208D
-:109E400020C80802020C00800C60000820122C8838
-:109E500083002CE80B30026201700000000000005B
-:109E6000C015AE00AB01A2600BA002200181002250
-:109E7000C00A901204208A0822C108A00228008883
-:109E800000244408A202AC008B042E8803B00270A8
-:109E900004600000000000004015EC00EA90322849
-:109EA0000FB6032008C9043AC04C90222400CB40CE
-:109EB00032A80CB2032C00CB80B2E00CB00B040033
-:109EC000CB003EC04FB00B500470000000000000FB
-:109ED000E001BC00DF803B810FF0C3FC00BE011F2E
-:109EE000000FE023F400FF003FB04FF043D402FF27
-:109EF000913AE04EF0037C0CFF002F800F3003B846
-:109F000000600000000000004010AC01CA00725068
-:109F100004B4032C82CB0032E00CB8032704C8C879
-:109F2000B2A20C88032C00C1003E002C301B2C0474
-:109F3000FB103EC00FB00310042000000000000022
-:109F4000C8052C040350A2E00834423300880020E6
-:109F5000100D840325008A40229008A5022C008958
-:109F6000A43A4008B0022C00BF842E800BF052327D
-:109F70000040000000000000E0056C808180248823
-:109F8000893C2621009000200208808200209B004E
-:109F9000224088B0120C0883802CC00810020C00EC
-:109FA000B3802C400B30023800500000000000004D
-:109FB00020013E0A85A0A56008FB823E849F816344
-:109FC000E089791252809782216C187802120087FA
-:109FD000A129E0085B021E00B7C02D600B780208C3
-:109FE000004000000000000048080C00810826C264
-:109FF0002C32130EA4D200B0001C21122402D12056
-:10A0000030C80C10030C00C2103C800C23030C4021
-:10A01000F3003C480F300B1202000000000000006B
-:10A02000401DBC00FD20BB40077202F010ED103F48
-:10A03000C40FD163B480EF003FC80FF003D800FE17
-:10A04000343FC40FEB43FC00FF087F400FF183D087
-:10A050000660000000000000A805EC00C800338086
-:10A060008F28032000490232C00F90032000CB004C
-:10A0700032404CB00B2C00CB8032C00E9E0324002B
-:10A08000FB203EC00FB0032A00700000000000005B
-:10A0900048119C008D0121C00B60021D00D60021DB
-:10A0A000000BE00200008304204008704234028765
-:10A0B0000123C028510A1C04B7302DC00B72039233
-:10A0C0000460000000000000C0009E00A64021A027
-:10A0D0000B68020E008F8021E00B78021610A5801D
-:10A0E00021E00818021E00838021A00878021F00CA
-:10A0F000B7802DE00B380230002000000000000087
-:10A100004814EC12A16420E60B20020010904A20B3
-:10A11000204B00420400830020C20830028C0083E0
-:10A120000420C00830020E00B3002CE04B30029235
-:10A130000430000000000000E815B800EEC03390C5
-:10A140000FA01B0800CA40B2820FA00B2802CA0051
-:10A15000B290ACA0032900CA40B2808EA4032A00AA
-:10A16000FA003FA80FA00B3A0460000000000000B6
-:10A170004800E20290003E000F8803F100FC023F1D
-:10A18000200FC803C100F0003E008F00016002F8FC
-:10A19000083E000F8083E000F8002E008F801392AD
-:10A1A00000300000000000000810E402C900B264A2
-:10A1B0000F9103E404C90032406C90032502C9905A
-:10A1C000B0400C90032420C9A03E404C9023E400F2
-:10A1D000F10092400C100302043000000000000067
-:10A1E000800464008980A2400B9642E50489002225
-:10A1F00040089002240809412240489042240489E2
-:10A20000802640089002E400B90022400894022011
-:10A2100000100000000000001805250089202240E1
-:10A220000B9002F4848500214048500224208D08C0
-:10A23000234008D00294008D0029400AD002A408CF
-:10A24000B90028401890C20600400000000000003D
-:10A2500008040500810020510B1002F58085C1A182
-:10A260005008540A050685402150885402950085FF
-:10A27000442D502A5412C501B100085008100202A2
-:10A280000100000000000000B80D6000CA503280DC
-:10A290000F8003E802C80132002CC0032000C8026E
-:10A2A00032002C800BA000C8003A004E4023A008CA
-:10A2B000F8003A002C800B2E035000000000000034
-:10A2C000981DDC04FD403F504F9063E440F1023E96
-:10A2D000410F9013F504F9413E500F94436502F984
-:10A2E0004136504D9403F400F94137404F9403E652
-:10A2F00006700000000000001801FC00CDA83370BB
-:10A300000FD013F688CD0032504F142307A0C9C0D8
-:10A3100032780C9E033702CDC032640F98032400BC
-:10A32000CD0032402CDA030600700000000000006F
-:10A330003810E20888EB22300B8012E804A0A02A33
-:10A34000200B8A0A23008880222800C842238080AC
-:10A35000D420280980022294A8002A008885020EB1
-:10A3600004300000000000000805C4A0830024D8C9
-:10A370008B1002E514890A21480B52025480854053
-:10A3800025580956024502812020500B1402043042
-:10A39000810020400810024201700000000000000F
-:10A3A0001815A4128900A6400B9042E498A9802BAE
-:10A3B000400B510255009D08274809F602440081D0
-:10A3C00004224019918A2480A9002A40089002465C
-:10A3D0000460000000000000A015E702C904365820
-:10A3E0000F9003C500C90032400F90136402C900EA
-:10A3F00036402D900B6604C9E0B2488F9847240080
-:10A40000C90072400C1003680470000000000000D6
-:10A410002801A508F9213A400F9003E604F9003E0F
-:10A42000404F9883A400E940BA600E9003A480F9DD
-:10A43000A33E480F980BE400F9001E400F90038ADA
-:10A4400000600000000000002810A248C820320868
-:10A450001F8083E122C80133002CC0033004CC40AC
-:10A46000B1000C44032012C84132002D840B60005F
-:10A47000F800B2004C800B0A04200000000000002D
-:10A4800028053A00A600239003E492F800820036E3
-:10A490008008A0036800CA00228308A00228038A5B
-:10A4A00000228008A0022800B68022800DE8020A5F
-:10A4B000004000000000000028056E00824220C01D
-:10A4C0000B3402CD09800020000800020002980031
-:10A4D000202028000A0410818020C008B0022C002F
-:10A4E000B30022C01831020A005000000000000032
-:10A4F000A0013802A30021401B7002DC2084056506
-:10A50000E008F0027C10970024C0083002548887CD
-:10A510000921E80933021C80B60863C809381228EB
-:10A520000040000000000000A8081E00C7A0A1E035
-:10A530000B7803FE00C58233200C48031E01DF8028
-:10A5400031200C48030640878231F80D7B035F0001
-:10A55000F38031F20C60032A0200000000000000CA
-:10A56000081D9C00FB012F4007B003E804F9003EE2
-:10A57000C10FB003E006E8023AC00FB001A410F921
-:10A5800040BED006B003EE00FA003CD80FA003C2D4
-:10A5900006600000000000000005F600CF8833646C
-:10A5A0002CF803FE02C4B033208CD8033200CCB4A4
-:10A5B00033A00CC8031620CFC033F00CF803FE0004
-:10A5C000CD803FE00FD803000070000000000000C5
-:10A5D000A811B5048712A1500A7412C44084112333
-:10A5E000C028E0021C02A711215848700A14008DEF
-:10A5F0000023C00B7002FC4086002DC00B50022AC5
-:10A600000460000000000000000095008740210069
-:10A61000187102DC009528E1020850023C42A72292
-:10A62000218088410214008500A1C0097102DC006C
-:10A63000B5102DC00B4002000020000000000000FB
-:10A640002014C41083842011083002C310912020EC
-:10A65000C00828120000A08420400830020426838D
-:10A660000020D00B3002CC00B2002CC00B0002083E
-:10A670000430000000000000A815AD00CF88B2E84B
-:10A680000C3013CEC2D08232000C0E0B2000C888D2
-:10A69000B2402CBA433702CB00B3C02CF003FC12FB
-:10A6A000FB007FD10F300B2B046000000000000086
-:10A6B0008000ED02F1403E410FB023ED00E8013E85
-:10A6C000C80FB013EC04DB003C800F0403E440F936
-:10A6D000003CC20EB003EE004B413EC00FB003E0A1
-:10A6E00000300000000000000110FC004B0032426E
-:10A6F0000CF0033680CD0033004CC0833C04F700DF
-:10A7000032400CB1431400CD8033C00CF003FC0088
-:10A71000FF00B3C20CA003004430000000000000A2
-:10A7200081044F028B80203008BC02201089002257
-:10A73000C000B0036004B800A290288C1A24028BD9
-:10A740008322C108B002FC00B36020C00DA003E06A
-:10A75000401000000000000080052E00ABC0226009
-:10A7600008B8022900880120000890022000B800E3
-:10A7700022C008B002E4008124A2C009B046EC0067
-:10A78000B90022C008900220004000000000000034
-:10A7900008042C00A100A04108B00A205388002022
-:10A7A000C028A0024C00B30020008800028400836F
-:10A7B0000420C0283002CC00B30262C0091002C2DB
-:10A7C0000100000000000000000D6C00E900220004
-:10A7D0000CB0030004C900B2000C90032C00F3007D
-:10A7E000B2C08CB003B4028F0023C004F003EC08A5
-:10A7F000F90033C00C80030003500000000000008B
-:10A80000A01DFC10DD043F000FC023F090FD002FC1
-:10A81000C00FE043D000FC003F008FC0227400FD59
-:10A82000043FC00FF003FC00FF063FC00FC043E829
-:10A830000670000000000000C005FC80EF2011C081
-:10A840000E7203BDB0CF31BFCC02F003FCC6CF0106
-:10A850000BC50FF1033C04EF6133D807F0033480DC
-:10A86000CD3073CC0FE80330007000000000000012
-:10A870008018E90088692210088C00218488412210
-:10A88000108886920100886222104B870221A088DE
-:10A890006020100B86A235A0AB60A1C40BB80220CB
-:10A8A00004300000000000008805CDA8334120C618
-:10A8B0004A31008C10933328CC2934128C50931CCD
-:10A8C000288401204A4C41831024CC4B31424C4017
-:10A8D000911024C00B8002220170000000000000D3
-:10A8E000C005A820900222000880002030B8082669
-:10A8F0000001808220201808424003910260000875
-:10A9000001A6000B80006C10BB0126C04B900A30E2
-:10A9100004600000000000000011FD00FD4133A1B3
-:10A920000ED203B502DF423B010FD443B500CD4048
-:10A930001BC40D78037002EC0017A10FE80B2C026A
-:10A94000D99026C00FAC0300047000000000000086
-:10A95000E001B800EE001F644FE003D810C41833C4
-:10A96000C00CA0A1B809E60936220F8823BC00FB61
-:10A97000003B640FD9039C00E3043BC00FF403F8D1
-:10A98000006000000000000040108D00C940B6804B
-:10A990000F1003A720FB50B6084C14036522D940C2
-:10A9A000B6800EA00B0000D800768228A023640099
-:10A9B000C90412C08E800390042000000000000033
-:10A9C000C8052B608A09205008A023E900B8C022DE
-:10A9D000F008AC0228048AC222500890062C008B92
-:10A9E000042251089402E4048B0437C0081842265C
-:10A9F0000040000000000000C0044B0082C8244357
-:10AA00000B260A8800B08022E40B20426900A29045
-:10AA10002840E810020C00BB002850889082C40136
-:10AA2000830020C00A1002BA00500000000000009D
-:10AA300020104E80810021A8085802D601B79068E6
-:10AA4000200359825600A5842DA2186922020034E1
-:10AA50008029A8086806C614858225E00858821C4B
-:10AA6000004000000000000048084800C2F03440E8
-:10AA70000F20038880F81030C027210B4880EA207F
-:10AA800038000C00120C087300B8400C12234C0262
-:10AA9000433430C00E110392020000000000000099
-:10AAA0004015AC90F9012E884B90116400FB1032D8
-:10AAB00000009103A400C90032C44DB043E004C8B3
-:10AAC0000036890FA803ED00F9143EC00F1043D0E3
-:10AAD00006600000000000000805E800C8003A0019
-:10AAE0000C0053A000E80132010E80532010C80072
-:10AAF0003A400C90032010E804B6008480032D1225
-:10AB0000CB002ECA049003EA007000000000000091
-:10AB10004C198C00870221C00870020C00830021B0
-:10AB2000C00830624C048300218048E0123C00875A
-:10AB30000021C00870021C00850124D00A5002F2D6
-:10AB4000046000000000000020009A00808028209F
-:10AB5000084C22D200A48024300B4802520084C04A
-:10AB600021200948681300A48060200908025600CB
-:10AB700097802DE0885802E01020000000000000BF
-:10AB80006C04CC00838020D80830024C4083002421
-:10AB9000D109B9424E00830020C18930420C0083A4
-:10ABA000F0A0D9193622660691000CC10A1002C223
-:10ABB0000430000000000000E815E802CAA52A9150
-:10ABC00028A803EA02AA00B6A00FA00A2A92CA8304
-:10ABD000BA8029A0032B00EA4066902DE40B6A801E
-:10ABE000DA003E800CE003FA046000000000000080
-:10ABF00048018000FC003D000FC003B014FC003B86
-:10AC0000120EC043B114FC003D000EC003F020F44E
-:10AC10000031000E4413A000E80636004F8013D226
-:10AC200000300000000000000810A400D1003660D1
-:10AC30001C180B4600D98030402C98058600C18036
-:10AC400092400D10034402890032700C98012400D8
-:10AC5000C90430400C9003C2043000000000000022
-:10AC60008004640089002240089402248089012223
-:10AC7000404891022400D990224108901224108962
-:10AC800000324008951224028100A2410D9042E05A
-:10AC90000010000000000000380524029D0023443D
-:10ACA00008D2067480B52023401AD00635908D0254
-:10ACB0002F4419D00274008D00634018D402A411EF
-:10ACC0008900224008B002C60040000000000000D9
-:10ACD00028140480852021680852021480A520A130
-:10ACE000480A7238148095242D4828520214808511
-:10ACF00020214808520684808120204A091002C27F
-:10AD00000100000000000000380D6140D850B2146E
-:10AD100028A0036140F85032944E85042142C85067
-:10AD20003C140D800361408850B2142CC509A14029
-:10AD3000C850321C0C8003EE0350000000000000DD
-:10AD40009815E440F9103A440F9103E440D9143EB9
-:10AD5000440D91436440E91032440793C3E450D159
-:10AD6000107E440391015444FD143E400FD003E68D
-:10AD700006700000000000001805F680DDA03368B2
-:10AD80001EDA033690CDA03B680AD823760CED80FE
-:10AD90002B620B9902A780F9E137680CDA03278050
-:10ADA000C9A222684C5003C60070000000000000D9
-:10ADB0003818E1408850221408802260008804225C
-:10ADC0000008042601008850221008AF02230088E2
-:10ADD000C0A0108884022380A0402A100880124E50
-:10ADE0000430000000000000480084008101204081
-:10ADF0000A1402450081412C500B14020504A100E5
-:10AE000028408210028440A132805009140204C4F8
-:10AE100091106444281002D201700000000000006C
-:10AE20001804AC02810022C1089002440289022663
-:10AE30004109900A240C8904225008902624008994
-:10AE40000022410910222440B9012E4008900246F8
-:10AE50000460000000000000A015E41089003240EA
-:10AE60000A900B241089001E409B90022410290098
-:10AE70001A400E9441A4002900124005904126007A
-:10AE8000D90024400C9003E804700000000000008A
-:10AE90004801A402A900BC400F9003A404F9003AA1
-:10AEA000410E90838400F9003C400E9002C408E9F2
-:10AEB000003A402E900BE600E1043A400F92035A0C
-:10AEC00000600000000000000810A020D80036023A
-:10AED0000E00A3E018C00030030F803320004000B4
-:10AEE000320D0F040BA002C80232028C8203200232
-:10AEF000C80416004E80010A042000000000000073
-:10AF000028053B008ED8238008E002F8808E1023AD
-:10AF1000A20BE0827A208E3023A10BE00228008E63
-:10AF2000002B8808E44238008E04238008A0020A1F
-:10AF3000004000000000000028056F4093C6244038
-:10AF40000A3802CC008301ACF00BB4024C04A3809D
-:10AF500028D04B30024C00AB042AC02A300AAC1077
-:10AF6000930020C10A31020A0050000000000000D6
-:10AF700080111C0082002142887406DC0B86022DA1
-:10AF8000800B702A5800A600A9C00B70025C88A72D
-:10AF90002029C00A70029C109720A1C808D8022856
-:10AFA000004000000000000088080E00D7803760D5
-:10AFB0000E6813FE00CF803DE00F78231E00EF8265
-:10AFC00031E00F3CC37E04EF80B1E00EE803BE80A9
-:10AFD000D7E033EA0E78032A0200000000000000E8
-:10AFE0000815AC00FA013E000FB003E004F800328F
-:10AFF000800F8043AC0AD80036400FB0032C0CDB26
-:10B000000026C109A0136C40EB403ADC0F900BC244
-:10B0100006600000000000004004BE00CF8133E95C
-:10B020001FF913B650EF801FE404C8037E006D8142
-:10B0300033640CF81B3E202F8893E80FFB032E800F
-:10B04000CFC073E02CD903D00070000000000000D6
-:10B05000A8189042891821C01F710214C0F7202738
-:10B06000404071121800872021804871023C0887F7
-:10B070002021820B61A21E44DF0131C8087302EA5D
-:10B08000046000000000000010008C00870021C850
-:10B090000B70029C0987022D829940020400A509C9
-:10B0A00021401970021C00870525484B72020C4094
-:10B0B0008700A1C0485002C400200000000000002A
-:10B0C0006804C120894CA0B40A38022200A1D0240F
-:10B0D00030098002274481C62214093D2A0F028BC1
-:10B0E000C0A6200B24000C10938120C0483006D845
-:10B0F0000430000000000000B815A10089C132D161
-:10B1000003BC03A92089413E6085BC8B2540EB41EF
-:10B11000A2A00DF0133E20CF9036304FBC0B3C0068
-:10B12000CF8033C10CB103EA0460000000000000CE
-:10B130008000ED00F8013CD00FB303E882D8203640
-:10B14000802EB213E100FA007EC82EB003EC80DB43
-:10B15000103A084FB223CC02FB103AC00F9003E420
-:10B160000030000000000000A010F000CD103342BD
-:10B170000CCA237C00CF00336206F0013A00CF08EE
-:10B1800033801CF0813C00FF0033A00CCA01FC049A
-:10B19000CF003FC00FF003C00430000000000000EB
-:10B1A000A1046D408848A231081002201088B42202
-:10B1B000A00880006A848820225208B00A2C10BBA4
-:10B1C0000032B3888002EC00DB002EC00B9012E14D
-:10B1D0000010000000000000000500108A0122A0FD
-:10B1E00008B0426020800020441A801AE442A00681
-:10B1F0002200783002AC00BB00A24408B012EC0080
-:10B200008B000EC00B9002E0004000000000000028
-:10B21000081400088000208108300240128000A03D
-:10B220004008B002C000820000800830028C00BBE1
-:10B23000002000082002CC8093002CC00B3002C2FA
-:10B240000100000000000000000D6000CA14320080
-:10B250000CB0034C00CA0032000E0012A000C00067
-:10B26000700028F013AC00FB0032402C1043EC00BF
-:10B27000CF003FC00F9003C003500000000000004B
-:10B280002015F002FC001F00677003B000FC003FB7
-:10B29000002DC0033010FC01BF000F70037C00F7CD
-:10B2A000043B000FC013FD10FF003DC00FF003E88A
-:10B2B0001270000000000000C005F4C0CF803360B1
-:10B2C0000EC9133650CE863F080CC0033E02D7800D
-:10B2D00039E00FF8133E40C7303BCE0DF6033D88F2
-:10B2E000CF3133E40F78033000700000000000001D
-:10B2F0008010E5D0DB807260889202E4108A802E94
-:10B30000344A8C032E00AB8002E00BB8022C808FF5
-:10B310006013D84A76029D84AF3022480B8812A071
-:10B3200004300000000000008805C4008B002400E9
-:10B330004A0002AC8083002C01280402AC008B017F
-:10B3400020C003B0020C80834020C1A834228D139A
-:10B350008320ACC80BB00262017000000000000046
-:10B36000C01586009B04AE000A9002EC000B142E60
-:10B37000C602B1126C00AB202AC10BB0422C008B6C
-:10B380000226C10AB002AC00AB042A400B9002F0C6
-:10B3900004600000000000000011E700C301364017
-:10B3A0000E88132402CA001E202C8E0B2C00CB000A
-:10B3B0002AC00FB8032E06CB003AC04CB013AC0C19
-:10B3C000CB003EC80FB043500470000000000000E6
-:10B3D000E001B408FF91334009DC01F4207E022E25
-:10B3E000400D9801BC80EF80B7E48FF40BFE407FE6
-:10B3F00000B9C04EF003FC08F70037C00FE002B8F8
-:10B4000000600000000000004010A144CB023200A8
-:10B410000D800A6D00EB04109028220B2CC2CB206B
-:10B4200076C00EB103EC01CB0632C10C30032C0206
-:10B43000CB003ED00CB00310042000000000000040
-:10B44000C8052148AB0020000095234C08BB012211
-:10B45000C008B2020C08838892D5283402EC028F0F
-:10B460002023C04DF0017C00DF002EC00D300372A0
-:10B470000040000000000000E00544008310206050
-:10B480000925020008A0004C000B0C224F1293402B
-:10B4900000C0093E02EC00AB80A4C00930222C0899
-:10B4A000B3010C8108300238005000000000000099
-:10B4B00060011609B78021640878061200B4822D55
-:10B4C000A41B69067E04179225E6097806DE80A78C
-:10B4D0009025E00979505E04B7922F6109C80248AF
-:10B4E000004000000000000048082500C300B00331
-:10B4F0000DA3420940E100BC400F11034C001300B2
-:10B5000020C0093203CC10A30026C48D302B0C8040
-:10B51000F3007C800C3001120200000000000000EB
-:10B52000401DBC00E7103D012FF142E800F59003FB
-:10B53000C10CF1439C04EF083BC20CF081DCA0DF9E
-:10B54000003BC33FF083FC05DF0C3D400FD103D02F
-:10B550000660000000000000A805F400CB80304029
-:10B560002CA003E000F88032C02EB80B2C46D3008C
-:10B5700030C00C30030C00DB4832C01FB4032C88F1
-:10B58000CB4832800C30132A00700000000000000D
-:10B590004811B40087012140087042D008B4002946
-:10B5A000C00870021C00870021C80C720A1C848F1E
-:10B5B0004009C48F73129C40832021C0086002920E
-:10B5C0000460000000000000C0009601AF80212050
-:10B5D000086802DA00BD8021E00978021E008F8829
-:10B5E00083E229F8825F8087A025E00B3A120E5093
-:10B5F00097A421A02978023000200000000000005C
-:10B600000814CC02A1810000487002C800B1002CCF
-:10B61000F80931420C10830020E00838124E0083F4
-:10B62000006AC00B30028C04930020E009380292BB
-:10B630000430000000000000E815B940EE20308022
-:10B640000CA003E800FA0033B00DE4033288CC808C
-:10B6500023000DC0036202CA0036800FA0432806F3
-:10B66000DA0033A00D6A033A046000000000000015
-:10B670004800E0009801BE000F8003F000BC0038D5
-:10B68000040880A3E000F8003E000F8013A000E053
-:10B69000003E000E0003C000E800BE044E8007D24A
-:10B6A00000300000000000000810E480C9003E687F
-:10B6B0000C90036400C9003E400C9043E000C800B9
-:10B6C00032000C80132000C90036400C9003640047
-:10B6D000810032400490130204300000000000009A
-:10B6E0008004650689402E601A142A052089002EE0
-:10B6F00040089002C408C102204008101A240089A2
-:10B7000010324108901224008904364088940A209F
-:10B7100000100000000000001805042089552E408C
-:10B7200008D50234008D002E40189002E4009900E4
-:10B730002640089002040A8900264038900A240016
-:10B74000A90020400A90820600400000000000008E
-:10B750000804050081002F400AD402340085012C22
-:10B7600040081042E40699002240081002050081BA
-:10B770004028500814120500A14024505A1002021B
-:10B780000100000000000000B80D6000C8043E0089
-:10B790000880032142CC003E002C8002E000D8004B
-:10B7A000B6002C80022002C80036000C8003600224
-:10B7B000E80032008E80032E0350000000000000DD
-:10B7C000981DF500F5003E40879003E400F1003D30
-:10B7D000500F5403D100EC403F100BC443F100F96B
-:10B7E0004036500F9413E510D9443D402DD003E668
-:10B7F00006700000000000001805F660CD023B4016
-:10B800000CD003B440FD063E400C90036604C98290
-:10B81000B6620F180B3600CD4032610C9023240A1B
-:10B82000C90032404CD04306007000000000000008
-:10B830003910E380D80022000D80022294B8002E37
-:10B84000000D80032100884022000BC42221508873
-:10B85000802222088002201080012A000A80034EE4
-:10B8600004300000000000000005C60089002A40E6
-:10B8700088100A8408B10029400A700AB5008F4078
-:10B8800029C00BF4022400812028448910020404FA
-:10B8900081022A400810020201700000000000002E
-:10B8A0001815A600992022400990122480B9002F73
-:10B8B0004403D002F4008D002B410BD002261089E6
-:10B8C000042A4009906E240089002A400A94024606
-:10B8D0000460000000000000A215E600C900384224
-:10B8E0000C1013A60479083A78069203A408C9003C
-:10B8F0003A608F98230602C9023A400D9003040073
-:10B90000C90038400C9003280470000000000000BB
-:10B9100028018410F980BE404F9002E400F9003CF9
-:10B92000608D92032442E91032500F9403E400F931
-:10B9300000B6412E1003E400F9002E400F9003CA18
-:10B9400000600000000000002810A008C8003E10A1
-:10B950000F88032008F8C01E102C4003F200CC0012
-:10B960003F000CC0132002C00030000C802B2010C0
-:10B97000C00432000F80030A042000000000000011
-:10B98000A8053A8086E02FA01BE0023A80BA042E78
-:10B990008008A0038808C2002E8108600228108E4B
-:10B9A00081038008E00178008E040380096803CADF
-:10B9B000004000000000000028054C0083602C447B
-:10B9C0000B38020F80B1002CE5033010CC1083003F
-:10B9D0000CC02930220409911024C0C830004C0446
-:10B9E000930224C00B31020A005000000000000046
-:10B9F000E001188087002D400B74421C01B5012C1A
-:10BA0000C00B6002B00094042F2009C0021490976C
-:10BA10000025C80870024C80972025C0097002E8F4
-:10BA20000040000000000000A8083A82C6802D6097
-:10BA30000BF80B1A00F5803DE08F7803DE02C7801B
-:10BA40002DE00D780B1702DF8024F82CFD035E0C2F
-:10BA5000D7E035E00F68032A020000000000000074
-:10BA6000481DAE40FA043E400F8013EC04F9003E3E
-:10BA7000C10CA013C010E8003C004E8043C42089D4
-:10BA800000BAC007B621ED06EB68BACC0F2013C28E
-:10BA900006600000000000004005BE00C680316066
-:10BAA0002D780B3E48EC923D600C58035A40D580EF
-:10BAB00031610C58233600CF823FE00CF803FF6061
-:10BAC000CF9033F00C520300007000000000000023
-:10BAD000A811B8848614B5C00870021EC0C4002D19
-:10BAE0004008400214D0861021804C62423440A5A8
-:10BAF0000035C0287042DCC28F3023C00850022AB3
-:10BB00000460000000000000020098288E00A5409C
-:10BB100008F1021864B4006D42085002180185084B
-:10BB20002140095822540085102DC4097002DC04FC
-:10BB3000970025C00844020010200000000000000B
-:10BB400060148C00828024C00880022D00804A2C62
-:10BB500042080A420600928420A08828424400A39A
-:10BB60000624C00B3002CC10930424C10900020843
-:10BB70000430000000000000A815BC00CB003640D7
-:10BB80000CB4132C00F9003EA00CA2030408C280E0
-:10BB900030A80D2A035400CB003FC00DF003FC0871
-:10BBA000DF0037D00CB0032A046000000000000062
-:10BBB0008000E000FB103A400EB003ED90F9117EDA
-:10BBC000804FB053E840E9003E400F9003A608F9CB
-:10BBD000013AC00CB013CC00EB023AC68EB803E0B9
-:10BBE00000300000000000000110F00CCE003FE02B
-:10BBF0002CF0833A48CD0135800C6012340ACE0017
-:10BC0000B3802CE00B7400C910B3C10FF01B3C00D3
-:10BC1000CF00B7C02CE0030044300000000000005B
-:10BC200081046E1088802CC01898022D8081003607
-:10BC30009108B0036800C9002240089002240083E4
-:10BC40008036C00B30022C02830020C00820036025
-:10BC50004010000000000000800506008A802E458C
-:10BC6000288802240288020202088002A2009800AA
-:10BC700022000880122400890122C10AB0026C004F
-:10BC8000AB0022C1089012600040000000000000DC
-:10BC90000804000080002CC04808120080800224A4
-:10BCA00000081842AC028B8022E008B8120402831C
-:10BCB0000020C00B30420C00A30160C048100242BB
-:10BCC0000100000000000000000D6808CA002E40BE
-:10BCD0000880030000C80632000C8002A000D800D3
-:10BCE00032000C80037400CB0022C00FF0033C0034
-:10BCF000EF0037C00C80014003500000000000003E
-:10BD0000A019FC00FC043FC00FC003E100FC003B95
-:10BD1000000FD0037C00EF002FC00FF011F410FDD6
-:10BD2000023DC04FF003DC00DF043FC00FC043E919
-:10BD3000067000000000000000C541027020DC1009
-:10BD400067040DC10270209C1037040DC1067040BD
-:10BD50004C10371415C1037040DC1013040DC107DB
-:10BD60007040DC1037040DC03100000000000000FE
-:10BD700000C5440571215C40571015C40571055C70
-:10BD800040571015C40671014C4057100DC4057181
-:10BD9000055C40531015C40771015C40571015C075
-:10BDA00011500000000000000080020120804820A7
-:10BDB0001208048201208048201208048201208099
-:10BDC00048201208048201208048201208048201C1
-:10BDD000208048201208048020000000000000009D
-:10BDE000008400016000580056000580016004587E
-:10BDF0000016000580012001580016000580016032
-:10BE000000580056000580016000580016000180AF
-:10BE1000200000000000000000C5480572115C8091
-:10BE2000172015D80532111C804720148800720194
-:10BE30001C80572005C80472015C80572015C8017A
-:10BE400072015C80572415C01150000000000000F2
-:10BE500000C140006000180006000180402000186A
-:10BE6000000600019000600018000600418000609C
-:10BE70000018000600018000600018100600018014
-:10BE8000310000000000000000C5480422010880C5
-:10BE900002201088046201088042201088002001DE
-:10BEA00008804220008804220108004220108800F7
-:10BEB00022010880423010803100000000000000A4
-:10BEC00000C54A05428150A00428150A0552811078
-:10BED000A04428111A00408010A05428050A0542E9
-:10BEE0008151201428150A01428150A054281500C0
-:10BEF000315000000000000000800C01534054C08D
-:10BF00001530055C01574054C01530055C015300E5
-:10BF100055C01574054C01530055C01574054C01EE
-:10BF2000530054C0113001402110000000000000F7
-:10BF300000800000400010000400010000400010DC
-:10BF40000004000100004200100004001100004045
-:10BF50000010C104000100004000100001100101A8
-:10BF6000200000000000000000C560020800820000
-:10BF7000208008200208008200208008200208009B
-:10BF80008200208400200208008200208408200211
-:10BF9000080082002180080111500000000000000C
-:10BFA00000C54005600158009600159005640258D0
-:10BFB0000056005590056001D900164015800560B7
-:10BFC0000159007640158005600158005600158023
-:10BFD000310000000000000000C440036000D800F1
-:10BFE00036004D80036000D80036000D80076200E7
-:10BFF000580036000D80076000D88016000D8003C1
-:10C000006000D80036001D803100000000000000F4
-:10C0100000C5420430810C20430810C20430810C5A
-:10C0200020430810C20430C10C20430810C206305F
-:10C03000810C20430810C20430810C20430818C032
-:10C04000115000000000000000C0000030000C0093
-:10C05000030000C00030000C00030000C0403000AE
-:10C060000C00030000C00030000C00030000C00002
-:10C0700030000C00030000C00000000000000000C1
-:10C080000080020130804C20130804C20130804C33
-:10C0900020130804C22530814C20130804C201304B
-:10C0A000804C32530804C20130804C20130804C075
-:10C0B000204000000000000000C5420562815820B9
-:10C0C000560815820460815820460815820160C117
-:10C0D000582046081582016081583056081582059F
-:10C0E00060815820560805801150000000000000B3
-:10C0F00000C542002080082002080082002080083D
-:10C1000020020800820020800C200208008200200B
-:10C110008008200308008200208008200208008098
-:10C12000210000000000000000C5420466811820C4
-:10C13000460811820464811820460811820060813B
-:10C140000C204608118200608119204308118204E6
-:10C1500060811920464801801100000000000000A5
-:10C1600000C56005580156005580156004580156F9
-:10C170000045801160005800060045801560015898
-:10C1800001160001801560055801560055800540D4
-:10C19000115000000000000000800601498010607E
-:10C1A00014180506017980506014180106014180B9
-:10C1B000506004180506014180106014180506013E
-:10C1C00041805060141805002000000000000000AD
-:10C1D0000080020104804020100804020004044092
-:10C1E000201008040201008440201008040201000D
-:10C1F00080412010080402110080412010480400F2
-:10C20000000000000000000000C546035180D4601B
-:10C2100035180D46021180D46035180D4603118083
-:10C22000D46035180D46035180D46035180D46038F
-:10C230005180D46035180D403150000000000000DE
-:10C2400000C5460570815C60071815C60471811C25
-:10C2500060171815C6053181DC60571815C60571C1
-:10C26000801C60771815CE0571815C60571815C069
-:10C2700011000000000000000005460271809C6172
-:10C2800077180DC60271809C6037180DC20331808B
-:10C290005C6027180DC60371809C6017180DCE03D3
-:10C2A0007180DC6037180DC0110000000000000034
-:10C2B0000045460575815C60771815C60575815C7B
-:10C2C00060571815C60531810C60571815C60571E1
-:10C2D000815C60431815C60571815C60571815C0F4
-:10C2E00011500000000000000040020120804820A2
-:10C2F0001208048201208048201208048201208054
-:10C300005C20120804820120804800170804820182
-:10C310002080482012080480000000000000000077
-:10C320000000060163805860161805860161805878
-:10C33000601618058601618158601618058601612E
-:10C34000805860561805860161805860161805806F
-:10C3500000000000000000000045400570015C0086
-:10C36000170015C08574011C00470011C00570013D
-:10C370005C00530010C00570015C00570014C90434
-:10C3800070011C00570015C0115000000000000093
-:10C390000045420060C01820060801820060801835
-:10C3A00020060801820020801830020800821060F8
-:10C3B000801820060800820060801820060801808E
-:10C3C0001100000000000000004442042081082009
-:10C3D0000208108204208108204208108204208173
-:10C3E0000820460811820420810820420811820496
-:10C3F0002081082042081080110000000000000089
-:10C400000045420540C550201408150004408150E5
-:10C4100020540811020500801020450C11420440F0
-:10C42000815020140C15420440811020540815003E
-:10C4300011500000000000000040030150C04430D3
-:10C44000150C05430150C04C30150C05432150C05C
-:10C450005430150C05430150C05430150C054301F0
-:10C4600050C05420150C05400000000000000000E2
-:10C47000000008004200048004200108004200047B
-:10C48000800420010800020010000400010800429E
-:10C490000010800400010800420010800420010008
-:10C4A00000000000000000000045420200808420DF
-:10C4B0002008080202008084202008080202008070
-:10C4C00080A0202808020200808020202808020284
-:10C4D00000808020200808001150000000000000AB
-:10C4E0000045400560415800560015800560015820
-:10C4F0000056001580052001D80056001580056003
-:10C50000015800760015800560015800560015801E
-:10C51000110000000000000000C540036000D800CA
-:10C5200026000D80026000D80036000D80076001F3
-:10C530005C0036000D80036000D80057000D8002BB
-:10C540006000980036000D80000000000000000030
-:10C550000000000430210C00430010C00430010C26
-:10C5600000430010C00430011800430010C0043024
-:10C57000010C00460010C00430010C00430010C044
-:10C5800000000000000000000000000030000C006F
-:10C59000030000C00035080C00030000C6001400B2
-:10C5A0000800034000C00030000D40020000C00041
-:10C5B00030000C00030000C000000000000000007C
-:10C5C0000000050131404C50131404C50131C04C2A
-:10C5D00050131404C50531414C50131404C50131E6
-:10C5E000404C70531404C50131404C40131404C036
-:10C5F00000000000000000000000230568C15A3060
-:10C60000568C15A30569C15A30468C11A70168C024
-:10C610001A30568C11A30468C11A30168C15A30465
-:10C6200068C15A30568C11800000000000000000E4
-:10C630000000000020000800020000800024000824
-:10C6400001020000800024000880026000800020B9
-:10C650000009400220008000200008000200008045
-:10C66000000000000000000000000844621118846F
-:10C67000462111884462091884462111886062109D
-:10C68000180446011188446211188006011188447B
-:10C690006211188446211180000000000000000093
-:10C6A00000000045501154045501154044501154E8
-:10C6B00004450111404050105404450115404450B8
-:10C6C0001114001501154044501154045500114037
-:10C6D0000000000000000000000008214208508215
-:10C6E0001420850821420050821420850820420829
-:10C6F0005082152005482142085082142081402193
-:10C700004208508214208500000000000000000054
-:10C7100000000A01028040A01028040A010284409F
-:10C72000A11028040A01028040A00028000A01028A
-:10C730008040B01028000A01028040A010280400A8
-:10C74000000000000000000000000C035300D4C0F3
-:10C7500035300D4C035300D4C035300D4C0353001D
-:10C76000D4C02130084C035300D4C03530084C03EA
-:10C770005300D4C035300D40000000000000000020
-:10C780000000080470015C80072025C90472015C68
-:10C7900080472015C8007205DC80572015C8057237
-:10C7A000011C90672015C80572011C80572015C018
-:10C7B00000000000000000000000231848C21231F1
-:10C7C000848C61031840C81231848C61031848C4FA
-:10C7D0001031840C41231848C61030040C61231812
-:10C7E00048C61230848C21000000000000000000C8
-:10C7F00000003FFF4FFFD3FFF4FFFD3FFF4FFFD38C
-:10C80000FFF4FFFD3FFF4FFFD3FFF4FFFD3FFF4F5E
-:10C81000FFD3FFF4FFFD3FFF4FFFD3FFF4FFBD0049
-:10C820000000000000000000000000000000000008
-:10C8300000000000000000000000000000000000F8
-:10C8400000000000000000000000000000000000E8
-:10C8500000000000000000000000000000000000D8
-:10C8600000002CDB0B36C2CDB0B36C2CDB0936C21A
-:10C87000CDB0B36C2CDB0B36C2CDB0B36C2CDB0B64
-:10C8800036C2CDB0B36C2CDB0B36C2CDB0B32C00AE
-:10C8900000000000000000000000333C4CCF1333C8
-:10C8A000C4CCF1333C4D4E9333C4CCF12B3C4CCF34
-:10C8B0001333C4CCE9333C4CCF12B5C4CCF1333C78
-:10C8C0004CCF1333C4CD3100000000000000000045
-:10C8D00000003B7E4EC793B7E4EDF9237E4E4793AD
-:10C8E000B7E4EDF93F7E4EDE1237E48DF93B7E4E24
-:10C8F000DF93F7848DF93B7E4EDF93B1E4EDB90011
-:10C9000000000000000000000000010270409C11C7
-:10C91000670419C30270409C10270409C1027040CB
-:10C920001C10271401C10270409C50070409C10269
-:10C9300070409C10671411C000000000000000004F
-:10C940000000040571015C40571015C40571015CBD
-:10C9500040571015C60571015C40571010C4057191
-:10C96000015C64031055C40571015C40571015C08B
-:10C9700000000000000000000000020120804820AC
-:10C9800012080482012180482012080480012080BE
-:10C990004820120805C2012080482417080482019B
-:10C9A00020804820120804800000000000000000E1
-:10C9B00000000000600018004600118400600018AC
-:10C9C00000060001800060011800061091800060E0
-:10C9D000001846461801800060001800061001800B
-:10C9E00000000000000000000000080473011C802B
-:10C9F000072001C80472011C80472011C80472017D
-:10CA00001C80472211C80472011C80072011C80431
-:10CA100072011C80072811C0000000000000000007
-:10CA2000000000006000180006000180006000188F
-:10CA30000006000180006000180006000180006010
-:10CA40000018004604018000600018000600018004
-:10CA5000000000000000000000000D04220108801A
-:10CA600002200090042781088042201098042401AD
-:10CA7000088042481088042201094042601088045E
-:10CA8000220108C0024010800000000000000000E9
-:10CA900000002A044B8112A004A8012A044A811232
-:10CAA000A044A8112A04488012A04488012A044AFC
-:10CAB00081122004AC112A044A8112B0449C110056
-:10CAC000000000000000000008C00C00530014C06B
-:10CAD0000530014400530014C00530040C0053001D
-:10CAE00014C005B0014C00530016C00130014C00C9
-:10CAF000530014C001380040100000000000000086
-:10CB000008C0001040001000040001100044801014
-:10CB10000004000110004600000004600100004015
-:10CB200000116002400100104000106001501040F0
-:10CB3000300000000000000008C04002000080003B
-:10CB40002000080802000080002000080002000009
-:10CB500080002000080002000080000000080002A1
-:10CB600000008000210008403000000000000000AC
-:10CB700008C04004600118004600118004600118DC
-:10CB80000046001180046001C80046001980006062
-:10CB90000018006600118004600118000600118072
-:10CBA000300000000000000010010002600098004A
-:10CBB00026000981026001980026000980066200B3
-:10CBC0004800262001C00260019800070009800289
-:10CBD0006000980026001182100000000000000094
-:10CBE0004045420430810C20430810C20430858C3B
-:10CBF00020430810C20430810C20434811820430C5
-:10CC0000818D20460810C20430810C20430C10C0D6
-:10CC100011500000000000004004000030000C0033
-:10CC2000030000C00010000C00030000C000300032
-:10CC30000800030000800030000C80020000C000EB
-:10CC400030000C00032000C0104000000000000075
-:10CC50004000020030800C21030800C20030800C2C
-:10CC600020030800C20430C10C20030C10C20030A5
-:10CC7000800CB0430800C20030800C20032810C094
-:10CC800000000000000000004045420460811820C0
-:10CC900046081182046080182046081182006081D5
-:10CCA00018204608118204608018200608118204AA
-:10CCB00060811820460C11C01150000000000000D7
-:10CCC00040014200208008200208008200208008E5
-:10CCD00020020800820020800C20020800C20020F0
-:10CCE000800820420800820020800820020801807D
-:10CCF0000000000000000000500142046081182084
-:10CD0000460811820460801820460811820060C124
-:10CD10000C20460C10C204608018304208118204B6
-:10CD200060811820460810800040000000000000CC
-:10CD300040454004500114004500114004500014C7
-:10CD40000045001140005000040045000040045020
-:10CD5000001400010011400450011400450000427D
-:10CD600001500000000000004800060041801060F3
-:10CD7000041801060041801060041801060041807B
-:10CD800010600418010600418010600418010600BC
-:10CD90004180106004180100100000000000000035
-:10CDA0004800020100804021100804020100804078
-:10CDB0002010080402010080402110080402010034
-:10CDC0008040301008040211008440201008140034
-:10CDD0000000000000000000404546035180D46080
-:10CDE00035180D46035180D46035180D4603518027
-:10CDF000D46035100D46035180D44035180D4603DC
-:10CE00005180D46035180D40115000000000000022
-:10CE10000001460471811C60071811CE0471811C49
-:10CE200060471801C60471819C60471819C60471D7
-:10CE3000801C60671811C60471811C60471811C0FE
-:10CE400000000000000000004000460271809C606D
-:10CE5000271809C60671801C60271809C601318091
-:10CE60001C60071809C60271809C60071809C61269
-:10CE700071809C60331801C00000000000000000B9
-:10CE80005045460571815C60571815C60571805C78
-:10CE900060571815C60131810C60171810C605714E
-:10CEA000815C60031815C60571815C605318188297
-:10CEB0001050000000000000404012012480482073
-:10CEC0001208048201248048201208048201208074
-:10CED0005820520C0582012080492002080482015A
-:10CEE000208049201248048001000000000000005A
-:10CEF00040040600618018600618018604618018ED
-:10CF00006006180186006181486006181486006179
-:10CF10008018604218018600618018600618008041
-:10CF200001000000000000000045600478011E00C0
-:10CF3000478011E80078011E00478011E004780165
-:10CF40001E00438011E00478011E00038015E004F8
-:10CF500078011E00478011C0105000000000000042
-:10CF600040011200648018200608018200648018C5
-:10CF700020060801820060801830020801820060EB
-:10CF80008019304208008200608019200648018024
-:10CF90000000000000000000400142042081082041
-:10CFA000420810820020810820420810820420815B
-:10CFB00008204608108204208108204208118204BB
-:10CFC00020810820420810800000000000000000BE
-:10CFD0004045420440811020440811020040811065
-:10CFE000204408110204408010204508010204403A
-:10CFF000811021000C11020440811020440801001E
-:10D0000011500000000000004000030050C0143028
-:10D01000050C01430050C01430050C01430050C002
-:10D020001430050C01430050C01430050C014300BE
-:10D0300050C01430050C014000000000000000004A
-:10D040004000080042041080042001090042011041
-:10D050008004200108004200100004200108004262
-:10D06000001000040001080042001080042011009C
-:10D0700000000000000000004045420200808020C7
-:10D08000200808020200800020200808020000801A
-:10D0900080A0000A08020200808034622808020290
-:10D0A00000808030200C08001150000000000000BB
-:10D0B000400140046001180046001180046003181C
-:10D0C000004600118006600198004600118004604F
-:10D0D00001180066001180046001180046001180EC
-:10D0E0000000000000000000400100026000980005
-:10D0F0002600098002640098002600199002600052
-:10D100001D00260001C0026000990006401980023F
-:10D110006000980066000180000000000000000030
-:10D120004045600438010E00438010E00438010ED1
-:10D1300000438010E00438011A00438011A0043835
-:10D14000010E00028040E00438010E004380188088
-:10D1500011500000000000005004010030400C108D
-:10D16000030400C90030400C10030400C10030402B
-:10D170000810030400810030400C78021400C10044
-:10D1800030400C100304008000000000000000008C
-:10D190004000050031400C50031400C50035400C20
-:10D1A00050031410D50031410D50031410C5003147
-:10D1B000400D48435410C50031400C40431000C29C
-:10D1C00001000000000000004045430460C1183029
-:10D1D000460C11830461C11830460C01870460C1FC
-:10D1E0001830460811830460C11820060C0183041E
-:10D1F00060C11830460C1180105000000000000083
-:10D2000040014000200008000200008000200008CB
-:10D2100000020000810020000880020000C0002001
-:10D220000008404330008000200008000200008019
-:10D230000000000000000000400148446211188412
-:10D240004621118844630118844621018804621133
-:10D250001804462110C8446211180543018188440E
-:10D2600062111884462111800000000000000000B7
-:10D27000404540045001140445011140445001143C
-:10D28000044501014045001014044503004044508A
-:10D2900011140401054140445011140405010140DA
-:10D2A00011500000000000004000082042081082D9
-:10D2B00004208108004200108204208108004208F6
-:10D2C000108205208108204208108A0520050820C8
-:10D2D00042081082042281000000000000000000CB
-:10D2E00000000A01028040A01028040201028040D0
-:10D2F000A01028040A01028040A00029040A0102AB
-:10D300008040A40028040A01028040A8102B1400C9
-:10D31000004000000000000040454D035340D4D0C1
-:10D3200035340D4D035340D4D035340D4D035340A7
-:10D33000D4D021344D4D035340D4D96134040D036E
-:10D340005340C0D835370D40115000000000000098
-:10D350004001480472001C80472011C80472011C5F
-:10D3600080472011C80472009C80472019C80072B1
-:10D37000011C88672011C80472015C82472211C019
-:10D3800000000000000000000000230848C2123125
-:10D39000848C61231040C01231848C61031048C416
-:10D3A0001031848C41231848C61030040C412318D6
-:10D3B00048C61230848C010000000000000000000C
-:10D3C00000003FFF4FFFD3FFF4FFFD3FFF4FFFD3B0
-:10D3D000FFF4FFFD3FFF4FFFD3FFF4FFFD3FFF4F83
-:10D3E000FFD3FFF4FFDD3FFF4FFFD3FFF4FFFD004E
-:10D3F000000000000000000000000000000000002D
-:10D40000000000000000000000000000000000001C
-:10D41000000000000000000000000000000000000C
-:10D4200000000000000000000000000000000000FC
-:10D4300000002CDB0B36C2CDB0B36C2CDB0B36C23C
-:10D44000CDB0B36C2CDB0B36C2CDB0B36C2CDB0B88
-:10D4500036C2CDB0B34C2CDB0B36C2CDB0B36C00B2
-:10D4600000000000000000000000335C4CD71333C4
-:10D47000C4CCF1333A4AD69333C4CCF12B3A4CCFD7
-:10D480001333C4CCE9333C4CCF12B5A4ACC9333C04
-:10D490004CCF1335C4CD690000000000000000002F
-:10D4A00000003B7E4EDF93B7E4EDF93B7E4EDF9309
-:10D4B000B7E4EDF93B7E4EDE1237E4EDE13B7E4E04
-:10D4C000DF9231848DD93B7E4EDF93B1E4EC610075
-:10D4D00000000000000000000000008404A1832C74
-:10D4E000030A1082C134108F004009140203149102
-:10D4F0000008420B1882C40031CA0C520210808509
-:10D5000000218228400A10000000000000000000F6
-:10D5100000000A0402014080732810480706010435
-:10D52000A44121140844061140807020140A04020A
-:10D5300000C88441211C08061201C080602014002C
-:10D5400000000000000000000000028404218208A6
-:10D5500053021080C500814A0442021400042021B5
-:10D5600080A872221C88C406A1428C52221C888585
-:10D570002621C08850221800000000000000000092
-:10D5800000000244000101006200100004000101DB
-:10D590002040001C00440401022062001C8004049E
-:10D5A00080892050081480042401C1005000180014
-:10D5B0000000000000000000000002803820040C81
-:10D5C000310A00000218208CA810280888C1141005
-:10D5D000C600220308020108B0000C21020082806C
-:10D5E00008004908000200000000000000000000E0
-:10D5F00000000001008008200300040243200040D6
-:10D600000020000442011080842011080400000062
-:10D6100000442420090840030090C42020080C0284
-:10D6200000000000000000000800088108200488B5
-:10D6300002220808C32A90408410200480C22620B9
-:10D64000498822220C08C126A0C98C122A048843CA
-:10D650000EA0CB8810220C02000000000000000089
-:10D6600008000A4032000180312800000112808D3C
-:10D670008400280C080132008C8002200C08012E46
-:10D6800000C38002200408430200408010200402EE
-:10D690000000000000000000080008870A2104883C
-:10D6A000112A1C0A06222140A0422A1088850AA1BC
-:10D6B00006A462221C0AC40221808C5222144886CD
-:10D6C000222008A8602A14020000000000000000C8
-:10D6D000000008450601898063201C884034110140
-:10D6E000A450281848040E014B8073281C8A040695
-:10D6F00091490463201C8A06260185807020180247
-:10D7000000000000000000000800008500B1452C6A
-:10D71000700214C00708214900420114820500115B
-:10D72000840052021C00C40021C42C53021C02813C
-:10D7300004A1CD0850021402000000000000000007
-:10D74000081012043401CC0073401C9045040148B9
-:10D7500004604118C0440401050473481450473460
-:10D7600001452062081CC2040C81C700738018C2E6
-:10D770000400000000000000080010841021CC28E4
-:10D7800042021412C51021840440001C80840091C0
-:10D79000000873821C90050C01CF0C400214304528
-:10D7A00020A1C0085002100200000000000000008C
-:10D7B000000000450C8100000108080005189105D3
-:10D7C00004000104400618000224704004004000D8
-:10D7D00001C4240088040043100040200088000099
-:10D7E0000000000000000000000012852431020C3F
-:10D7F00002C20410C42821490C02C004B2061C2035
-:10D80000030850420C800104A1490C00C20C1043D3
-:10D8100024A0C10810420000000000000000000029
-:10D820000010A2002000CD000040042001100009DB
-:10D830000402490C92073000000033080C924100AA
-:10D8400080CC0000000C00432880C20010000000C3
-:10D850000420000000000000000030105080000094
-:10D86000100000F00010800000008000D0808000D8
-:10D8700000000080109080800000000080109080E8
-:10D880000000000000C01080000000000000000048
-:10D890003C3C10808000000000001090A080000040
-:10D8A000000040109080A000000000C0109080A0F8
-:10D8B00000000020801090A0A00000000080108FC9
-:10D8C0000F0000000000000000002CC2E481803F37
-:10D8D000D9BFD998719D428000267FE672AB7C3A11
-:10D8E000400019802648DD3C91C026402640383152
-:10D8F000DB61C01999BFC980000000000000000072
-:10D90000000010801014800684979686960690007A
-:10D910003FA1280102901200801788169E90900463
-:10D92000100036BEBE9E861612848013BE97AE804F
-:10D93000000000000000000000000000000008825D
-:10D940008184214000000008A13801780000000017
-:10D9500008B8217268800000000898448868800038
-:10D96000000008B80178014000000000000000003D
-:10D9700000003FFFFFFFC0000000003FF7AFFFC007
-:10D98000000000003FFFFFFFC0000000003FFFFF5E
-:10D99000FFC0000000003FFFBFFFC000000000000C
-:10D9A000000000000000000000003FFFFFFFC0007B
-:10D9B0000000003FFFFF7F40000000003FFFFFFF2F
-:10D9C000C0000000003FFFFFFFC0000000003FFF5D
-:10D9D0002FFFC00000000000000000000000000059
-:10D9E00000003FFFFFFFC0000000003FFFFF7FC0BF
-:10D9F000000000003FFFFFFFC0000000003FFFFFEE
-:10DA0000FFC0000000003FFFFF7F8000000000001B
-:10DA1000000000000000000000003FFFFFFFC0000A
-:10DA20000000003FFFBFBFC0000000003FDFBFDFBE
-:10DA3000C0000000003FEFFFFF80000000003FDF5C
-:10DA4000FFFFC00000000000000000000000000018
-:10DA500000003FFFFFFFC0000000003F3EAFFFC0DF
-:10DA6000000000001FFFDFFFC0000000003FE7FED6
-:10DA7000EFC0000000003FFFFFDFC000000000001B
-:10DA8000000000000000000000003FFFFFFFC0009A
-:10DA90000000003FFFFFFFC0000000002FF7FFFF66
-:10DAA000C0000000002FFFFFDFC0000000003FF7B4
-:10DAB000DFF7C000000000000000000000000000D0
-:10DAC000000002C400B1C32C50091482C43091C7B5
-:10DAD0002460081C820734914C04430A10C2840459
-:10DAE000918424520B1802C424B1C32C400A108024
-:10DAF0000000000000000000000008050201C480D2
-:10DB000060201C08442201C08450019C08070A01BF
-:10DB1000C08472201CC8041211448041011C80077B
-:10DB20000811C4007000100000C0000000000000D8
-:10DB3000000000862C214A0C52021C80042021CABD
-:10DB40001062021C81470421C32051011C80042C57
-:10DB500001CB0452031440C72031C80C502210805E
-:10DB600001200000000000000000000620018900E4
-:10DB700052001480042801450462001080463011D0
-:10DB80000D00420114C0440011050050001C004467
-:10DB90002801490070001080000000000000000013
-:10DBA000000008C002300C8C30220888C226000811
-:10DBB0008020220C88810210C48010220C084002B0
-:10DBC000104888012304C8420210468C122200002B
-:10DBD0000010000000000000080002000080C820C3
-:10DBE000110900804110900824300804424100903F
-:10DBF000C420000804420010804C20230904C243C2
-:10DC000030804020110800020000000000000000E9
-:10DC1000080008810220C98C122004484122000912
-:10DC20008830200C88030E00498C10220C88402E6E
-:10DC300000C984132104C8C32200CB8C3222000007
-:10DC400004000000000000000800080102004B80F2
-:10DC5000322108884102100F8010218C08410200F7
-:10DC6000878410200488000200478010210C88411E
-:10DC70001610468030200002000000000000000066
-:10DC800000000AC422A108A4722A140A8502818411
-:10DC9000A042281C0AC5029140B8732910CAC402C8
-:10DCA000A180A4422A14CA85229180A8702A180251
-:10DCB0000080000000000000080008041E01C88069
-:10DCC00043201808453E010C8061209C48061281C3
-:10DCD000C08073001088060201C800422010C807E7
-:10DCE0000211CD80512014820000000000000000CD
-:10DCF000080000C42421C80C420114000028104C64
-:10DD000008520214804524294004720010C00524E2
-:10DD1000114408430114C04724204808720210002F
-:10DD200000000000000000000810000710110600AD
-:10DD3000720018D04620014D00714010500730117C
-:10DD4000C300714110B0052C01490043001C50452F
-:10DD500030018C0061401842040000000000000007
-:10DD6000000030C50021C00C40011412440431846D
-:10DD700024408014A1C70001400840011420052060
-:10DD800011C002608218008724114008404210022E
-:10DD90000000000000000000000002000C80C4240D
-:10DDA00031480C000108C14100004900420308103D
-:10DDB000802021090C02021880C12430080C420185
-:10DDC0001080832011080000000000000000000007
-:10DDD000000010C10420480C1242040083003148A6
-:10DDE00000024104A0070C20400012C20C80C12098
-:10DDF00020C80012C10CB0412000490802420000B6
-:10DE000000000000000000000010800100108100F0
-:10DE100030400820030010C12002000480403090F0
-:10DE20000114024004804020000904320108A003CC
-:10DE30000410080022400000043000000000000030
-:10DE40000000300010800000004000F000000000E2
-:10DE500000108000F00080800000200000F010A082
-:10DE6000000000200000F00010000000208000CC26
-:10DE700040000000000000003C3C10A080000000BA
-:10DE80000000109080C040000000001090808000D2
-:10DE900000000000109080800000000000109080C2
-:10DEA000E00000000000108C0800000000000000EE
-:10DEB0000000094DB1E90026402A7FE3F25498C0E2
-:10DEC0003FE64000014291D0C013E5876383B8CD9F
-:10DED000F900267F0000352ED503403FD9BFB18021
-:10DEE00001F0000000000000000004021614001CF5
-:10DEF000A83F881600808480379EBAA05010021276
-:10DF0000001796972650101082801E80DEBE941453
-:10DF100002108017BE819400000000000000000085
-:10DF200000000000000008A84494288000000008B9
-:10DF30009421445100000000088442410100000087
-:10DF40000008A17223414000000008B80178324067
-:10DF5000000000000000000000003FFFFFFFC000C5
-:10DF60000000003FF7FED7C0000000003FFFD7DFF2
-:10DF7000C0000000003FFF7FFFC000000000377FAF
-:10DF8000FFFFC000000000000000000000000000D3
-:10DF900000003FFFFFFFC0000000001EFFDE77C053
-:10DFA000000000001FEFFFFFC0000000003FFFFF68
-:10DFB000FFC0000000003FFFFF7FC0000000000026
-:10DFC000000000000000000000003FFFFFFFC00055
-:10DFD0000000001FCFDFFFC0000000003FFFFFBFB9
-:10DFE000C0000000003FFFFFBFC0000000003FFF77
-:10DFF000FFBFC000000000000000000000000000A3
-:10E0000000003FFFFFFFC0000000003FFFFFFFC018
-:10E01000000000003FFFFFFFC0000000001FFF1FC7
-:10E020007FC0000000002FDFFFCFC0000000000015
-:10E03000000000000000000000003FFFFFFFC000E4
-:10E040000000003FBFAFFFC0000000003FFFFFFF28
-:10E05000C0000000003EDE7FFFC0000000003FFF68
-:10E06000FFF7C000000000000000000000000000FA
-:10E0700000003FFFFFFFC0000000003F7FFFFFC028
-:10E08000000000003FFFFFFFC0000000003FFEBE99
-:10E090007FC0000000003EFFD77FC00000000000EE
-:10E0A0000000000000000000000000000000000070
-:10E0B0000000000000000000000000000000000060
-:10E0C0000000000000000000000000000000000050
-:10E0D0000000000000000000000000000000000040
-:10E0E00030002001020000003000438E00000000DC
-:10E0F0000000000000000000000000000000000020
-:10E10000000000000000000000000000000000000F
-:10E1100000000000000000000000000000000000FF
-:10E1200000000000000000000000000000000000EF
-:10E1300000000000000000000000000000000000DF
-:10E1400000000000000000000000000000000000CF
-:10E1500000000000000000000000000000000000BF
-:10E1600000000000000000000000000000000000AF
-:10E17000000000000000000000000000000000009F
-:10E18000000000000000000000000000000000008F
-:10E19000000000000000000000000000000000007F
-:10E1A000000000000000000000000000000000006F
-:10E1B000000000000000000000000000000000005F
-:10E1C000000000000000000000000000000000004F
-:10E1D000000000000000000000000000000000003F
-:10E1E000000000000000000000000000000000002F
-:10E1F000000000000000000000000000000000001F
-:10E20000000000000000000000000000000000000E
-:10E2100000000000000000000000000000000000FE
-:10E2200000000000000000000000000000000000EE
-:10E2300000000000000000000000000000000000DE
-:10E2400000000000000000000000000000000000CE
-:10E2500000000000000000000000000000000000BE
-:10E2600000000000000000000000000000000000AE
-:10E27000000000000000000000000000000000009E
-:10E28000000000000000000000000000000000008E
-:10E29000000000000000000000000000000000007E
-:10E2A000000000000000000000000000000000006E
-:10E2B000000000000000000000000000000000005E
-:10E2C000000000000000000000000000000000004E
-:10E2D000000000000000000000000000000000003E
-:10E2E000000000000000000000000000000000002E
-:10E2F000000000000000000000000000000000001E
-:10E30000000000000000000000000000000000000D
-:10E3100000000000000000000000000000000000FD
-:10E3200000000000000000000000000000000000ED
-:10E3300000000000000000000000000000000000DD
-:10E3400000000000000000000000000000000000CD
-:10E3500000000000000000000000000000000000BD
-:10E3600000000000000000000000000000000000AD
-:10E37000000000000000000000000000000000009D
-:10E38000000000000000000000000000000000008D
-:10E39000000000000000000000000000000000007D
-:10E3A000000000000000000000000000000000006D
-:10E3B000000000000000000000000000000000005D
-:10E3C000000000000000000000000000000000004D
-:10E3D000000000000000000000000000000000003D
-:10E3E000000000000000000000000000000000002D
-:10E3F000000000000000000000000000000000001D
-:10E40000000000000000000000000000000000000C
-:10E4100000000000000000000000000000000000FC
-:10E4200000000000000000000000000000000000EC
-:10E4300000000000000000000000000000000000DC
-:10E4400000000000000000000000000000000000CC
-:10E4500000000000000000000000000000000000BC
-:10E4600000000000000000000000000000000000AC
-:10E47000000000000000000000000000000000009C
-:10E48000000000000000000000000000000000008C
-:10E49000000000000000000000000000000000007C
-:10E4A000000000000000000000000000000000006C
-:10E4B000000000000000000000000000000000005C
-:10E4C000000000000000000000000000000000004C
-:10E4D000000000000000000000000000000000003C
-:10E4E000000000000000000000000000000000002C
-:10E4F000000000000000000000000000000000001C
-:10E50000000000000000000000000000000000000B
-:10E5100000000000000000000000000000000000FB
-:10E5200000000000000000000000000000000000EB
-:10E5300000000000000000000000000000000000DB
-:10E5400000000000000000000000000000000000CB
-:10E5500000000000000000000000000000000000BB
-:10E5600000000000000000000000000000000000AB
-:10E57000000000000000000000000000000000009B
-:10E58000000000000000000000000000000000008B
-:10E59000000000000000000000000000000000007B
-:10E5A000000000000000000000000000000000006B
-:10E5B000000000000000000000000000000000005B
-:10E5C000000000000000000000000000000000004B
-:10E5D000000000000000000000000000000000003B
-:10E5E000000000000000000000000000000000002B
-:10E5F000000000000000000000000000000000001B
-:10E60000000000000000000000000000000000000A
-:10E6100000000000000000000000000000000000FA
-:10E6200000000000000000000000000000000000EA
-:10E6300000000000000000000000000000000000DA
-:10E6400000000000000000000000000000000000CA
-:10E6500000000000000000000000000000000000BA
-:10E6600000000000000000000000000000000000AA
-:10E67000000000000000000000000000000000009A
-:10E68000000000000000000000000000000000008A
-:10E69000000000000000000000000000000000007A
-:10E6A000000000000000000000000000000000006A
-:10E6B000000000000000000000000000000000005A
-:10E6C000000000000000000000000000000000004A
-:10E6D000000000000000000000000000000000003A
-:10E6E000000000000000000000000000000000002A
-:10E6F000000000000000000000000000000000001A
-:10E700000000000000000000000000000000000009
-:10E7100000000000000000000000000000000000F9
-:10E7200000000000000000000000000000000000E9
-:10E7300000000000000000000000000000000000D9
-:10E7400000000000000000000000000000000000C9
-:10E7500000000000000000000000000000000000B9
-:10E7600000000000000000000000000000000000A9
-:10E770000000000000000000000000000000000099
-:10E780000000000000000000000000000000000089
-:10E790000000000000000000000000000000000079
-:10E7A0000000000000000000000000000000000069
-:10E7B0000000000000000000000000000000000059
-:10E7C0000000000000000000000000000000000049
-:10E7D0000000000000000000000000000000000039
-:10E7E0000000000000000000000000000000000029
-:10E7F0000000000000000000000000000000000019
-:10E800000000000000000000000000000000000008
-:10E8100000000000000000000000000000000000F8
-:10E8200000000000000000000000000000000000E8
-:10E8300000000000000000000000000000000000D8
-:10E8400000000000000000000000000000000000C8
-:10E8500000000000000000000000000000000000B8
-:10E8600000000000000000000000000000000000A8
-:10E870000000000000000000000000000000000098
-:10E880000000000000000000000000000000000088
-:10E890000000000000000000000000000000000078
-:10E8A0000000000000000000000000000000000068
-:10E8B0000000000000000000000000000000000058
-:10E8C0000000000000000000000000000000000048
-:10E8D0000000000000000000000000000000000038
-:10E8E0000000000000000000000000000000000028
-:10E8F0000000000000000000000000000000000018
-:10E900000000000000000000000000000000000007
-:10E9100000000000000000000000000000000000F7
-:10E9200000000000000000000000000000000000E7
-:10E9300000000000000000000000000000000000D7
-:10E9400000000000000000000000000000000000C7
-:10E9500000000000000000000000000000000000B7
-:10E9600000000000000000000000000000000000A7
-:10E970000000000000000000000000000000000097
-:10E980000000000000000000000000000000000087
-:10E990000000000000000000000000000000000077
-:10E9A0000000000000000000000000000000000067
-:10E9B0000000000000000000000000000000000057
-:10E9C0000000000000000000000000000000000047
-:10E9D0000000000000000000000000000000000037
-:10E9E0000000000000000000000000000000000027
-:10E9F0000000000000000000000000000000000017
-:10EA00000000000000000000000000000000000006
-:10EA100000000000000000000000000000000000F6
-:10EA200000000000000000000000000000000000E6
-:10EA300000000000000000000000000000000000D6
-:10EA400000000000000000000000000000000000C6
-:10EA500000000000000000000000000000000000B6
-:10EA600000000000000000000000000000000000A6
-:10EA70000000000000000000000000000000000096
-:10EA80000000000000000000000000000000000086
-:10EA90000000000000000000000000000000000076
-:10EAA0000000000000000000000000000000000066
-:10EAB0000000000000000000000000000000000056
-:10EAC0000000000000000000000000000000000046
-:10EAD0000000000000000000000000000000000036
-:10EAE0000000000000000000000000000000000026
-:10EAF0000000000000000000000000000000000016
-:10EB00000000000000000000000000000000000005
-:10EB100000000000000000000000000000000000F5
-:10EB200000000000000000000000000000000000E5
-:10EB300000000000000000000000000000000000D5
-:10EB400000000000000000000000000000000000C5
-:10EB500000000000000000000000000000000000B5
-:10EB600000000000000000000000000000000000A5
-:10EB70000000000000000000000000000000000095
-:10EB80000000000000000000000000000000000085
-:10EB90000000000000000000000000000000000075
-:10EBA0000000000000000000000000000000000065
-:10EBB0000000000000000000000000000000000055
-:10EBC0000000000000000000000000000000000045
-:10EBD0000000000000000000000000000000000035
-:10EBE0000000000000000000000000000000000025
-:10EBF0000000000000000000000000000000000015
-:10EC00000000000000000000000000000000000004
-:10EC100000000000000000000000000000000000F4
-:10EC200000000000000000000000000000000000E4
-:10EC300000000000000000000000000000000000D4
-:10EC400000000000000000000000000000000000C4
-:10EC500000000000000000000000000000000000B4
-:10EC600000000000000000000000000000000000A4
-:10EC70000000000000000000000000000000000094
-:10EC80000000000000000000000000000000000084
-:10EC90000000000000000000000000000000000074
-:10ECA0000000000000000000000000000000000064
-:10ECB0000000000000000000000000000000000054
-:10ECC0000000000000000000000000000000000044
-:10ECD0000000000000000000000000000000000034
-:10ECE0000000000000000000000000000000000024
-:10ECF0000000000000000000000000000000000014
-:10ED00000000000000000000000000000000000003
-:10ED100000000000000000000000000000000000F3
-:10ED200000000000000000000000000000000000E3
-:10ED300000000000000000000000000000000000D3
-:10ED400000000000000000000000000000000000C3
-:10ED500000000000000000000000000000000000B3
-:10ED600000000000000000000000000000000000A3
-:10ED70000000000000000000000000000000000093
-:10ED80000000000000000000000000000000000083
-:10ED90000000000000000000000000000000000073
-:10EDA0000000000000000000000000000000000063
-:10EDB0000000000000000000000000000000000053
-:10EDC0000000000000000000000000000000000043
-:10EDD0000000000000000000000000000000000033
-:10EDE0000000000000000000000000000000000023
-:10EDF0000000000000000000000000000000000013
-:10EE00000000000000000000000000000000000002
-:10EE100000000000000000000000000000000000F2
-:10EE200000000000000000000000000000000000E2
-:10EE300000000000000000000000000000000000D2
-:10EE400000000000000000000000000000000000C2
-:10EE500000000000000000000000000000000000B2
-:10EE600000000000000000000000000000000000A2
-:10EE70000000000000000000000000000000000092
-:10EE80000000000000000000000000000000000082
-:10EE90000000000000000000000000000000000072
-:10EEA0000000000000000000000000000000000062
-:10EEB0000000000000000000000000000000000052
-:10EEC0000000000000000000000000000000000042
-:10EED0000000000000000000000000000000000032
-:10EEE0000000000000000000000000000000000022
-:10EEF0000000000000000000000000000000000012
-:10EF00000000000000000000000000000000000001
-:10EF100000000000000000000000000000000000F1
-:10EF20000000000030002001020200003000438099
-:10EF300000000000000000000000000000000000D1
-:10EF400000000000000000000000000000000000C1
-:10EF500000000000000000000000000000000000B1
-:10EF600000000000000000000000000000000000A1
-:10EF70000000000000000000000000000000000091
-:10EF80000000000000000000000000000000000081
-:10EF90000000000000000000000000000000000071
-:10EFA0000000000000000000000000000000000061
-:10EFB0000000000000000000000000000000000051
-:10EFC0000000000000000000000000000000000041
-:10EFD0000000000000000000000000000000000031
-:10EFE0000000000000000000000000000000000021
-:10EFF0000000000000000000000000000000000011
-:10F000000000000000000000000000000000000000
-:10F0100000000000000000000000000000000000F0
-:10F0200000000000000000000000000000000000E0
-:10F0300000000000000000000000000000000000D0
-:10F0400000000000000000000000000000000000C0
-:10F0500000000000000000000000000000000000B0
-:10F0600000000000000000000000000000000000A0
-:10F070000000000000000000000000000000000090
-:10F080000000000000000000000000000000000080
-:10F090000000000000000000000000000000000070
-:10F0A0000000000000000000000000000000000060
-:10F0B0000000000000000000000000000000000050
-:10F0C0000000000000000000000000000000000040
-:10F0D0000000000000000000000000000000000030
-:10F0E0000000000000000000000000000000000020
-:10F0F0000000000000000000000000000000000010
-:10F1000000000000000000000000000000000000FF
-:10F1100000000000000000000000000000000000EF
-:10F1200000000000000000000000000000000000DF
-:10F1300000000000000000000000000000000000CF
-:10F1400000000000000000000000000000000000BF
-:10F1500000000000000000000000000000000000AF
-:10F16000000000000000000000000000000000009F
-:10F17000000000000000000000000000000000008F
-:10F18000000000000000000000000000000000007F
-:10F19000000000000000000000000000000000006F
-:10F1A000000000000000000000000000000000005F
-:10F1B000000000000000000000000000000000004F
-:10F1C000000000000000000000000000000000003F
-:10F1D000000000000000000000000000000000002F
-:10F1E000000000000000000000000000000000001F
-:10F1F000000000000000000000000000000000000F
-:10F2000000000000000000000000000000000000FE
-:10F2100000000000000000000000000000000000EE
-:10F2200000000000000000000000000000000000DE
-:10F2300000000000000000000000000000000000CE
-:10F2400000000000000000000000000000000000BE
-:10F2500000000000000000000000000000000000AE
-:10F26000000000000000000000000000000000009E
-:10F27000000000000000000000000000000000008E
-:10F28000000000000000000000000000000000007E
-:10F29000000000000000000000000000000000006E
-:10F2A000000000000000000000000000000000005E
-:10F2B000000000000000000000000000000000004E
-:10F2C000000000000000000000000000000000003E
-:10F2D000000000000000000000000000000000002E
-:10F2E000000000000000000000000000000000001E
-:10F2F000000000000000000000000000000000000E
-:10F3000000000000000000000000000000000000FD
-:10F3100000000000000000000000000000000000ED
-:10F3200000000000000000000000000000000000DD
-:10F3300000000000000000000000000000000000CD
-:10F3400000000000000000000000000000000000BD
-:10F3500000000000000000000000000000000000AD
-:10F36000000000000000000000000000000000009D
-:10F37000000000000000000000000000000000008D
-:10F38000000000000000000000000000000000007D
-:10F39000000000000000000000000000000000006D
-:10F3A000000000000000000000000000000000005D
-:10F3B000000000000000000000000000000000004D
-:10F3C000000000000000000000000000000000003D
-:10F3D000000000000000000000000000000000002D
-:10F3E000000000000000000000000000000000001D
-:10F3F000000000000000000000000000000000000D
-:10F4000000000000000000000000000000000000FC
-:10F4100000000000000000000000000000000000EC
-:10F4200000000000000000000000000000000000DC
-:10F4300000000000000000000000000000000000CC
-:10F4400000000000000000000000000000000000BC
-:10F4500000000000000000000000000000000000AC
-:10F46000000000000000000000000000000000009C
-:10F47000000000000000000000000000000000008C
-:10F48000000000000000000000000000000000007C
-:10F49000000000000000000000000000000000006C
-:10F4A000000000000000000000000000000000005C
-:10F4B000000000000000000000000000000000004C
-:10F4C000000000000000000000000000000000003C
-:10F4D000000000000000000000000000000000002C
-:10F4E000000000000000000000000000000000001C
-:10F4F000000000000000000000000000000000000C
-:10F5000000000000000000000000000000000000FB
-:10F5100000000000000000000000000000000000EB
-:10F5200000000000000000000000000000000000DB
-:10F5300000000000000000000000000000000000CB
-:10F5400000000000000000000000000000000000BB
-:10F5500000000000000000000000000000000000AB
-:10F56000000000000000000000000000000000009B
-:10F57000000000000000000000000000000000008B
-:10F58000000000000000000000000000000000007B
-:10F59000000000000000000000000000000000006B
-:10F5A000000000000000000000000000000000005B
-:10F5B000000000000000000000000000000000004B
-:10F5C000000000000000000000000000000000003B
-:10F5D000000000000000000000000000000000002B
-:10F5E000000000000000000000000000000000001B
-:10F5F000000000000000000000000000000000000B
-:10F6000000000000000000000000000000000000FA
-:10F6100000000000000000000000000000000000EA
-:10F6200000000000000000000000000000000000DA
-:10F6300000000000000000000000000000000000CA
-:10F6400000000000000000000000000000000000BA
-:10F6500000000000000000000000000000000000AA
-:10F66000000000000000000000000000000000009A
-:10F67000000000000000000000000000000000008A
-:10F68000000000000000000000000000000000007A
-:10F69000000000000000000000000000000000006A
-:10F6A000000000000000000000000000000000005A
-:10F6B000000000000000000000000000000000004A
-:10F6C000000000000000000000000000000000003A
-:10F6D000000000000000000000000000000000002A
-:10F6E000000000000000000000000000000000001A
-:10F6F000000000000000000000000000000000000A
-:10F7000000000000000000000000000000000000F9
-:10F7100000000000000000000000000000000000E9
-:10F7200000000000000000000000000000000000D9
-:10F7300000000000000000000000000000000000C9
-:10F7400000000000000000000000000000000000B9
-:10F7500000000000000000000000000000000000A9
-:10F760000000000000000000000000000000000099
-:10F770000000000000000000000000000000000089
-:10F780000000000000000000000000000000000079
-:10F790000000000000000000000000000000000069
-:10F7A0000000000000000000000000000000000059
-:10F7B0000000000000000000000000000000000049
-:10F7C0000000000000000000000000000000000039
-:10F7D0000000000000000000000000000000000029
-:10F7E0000000000000000000000000000000000019
-:10F7F0000000000000000000000000000000000009
-:10F8000000000000000000000000000000000000F8
-:10F8100000000000000000000000000000000000E8
-:10F8200000000000000000000000000000000000D8
-:10F8300000000000000000000000000000000000C8
-:10F8400000000000000000000000000000000000B8
-:10F8500000000000000000000000000000000000A8
-:10F860000000000000000000000000000000000098
-:10F870000000000000000000000000000000000088
-:10F880000000000000000000000000000000000078
-:10F890000000000000000000000000000000000068
-:10F8A0000000000000000000000000000000000058
-:10F8B0000000000000000000000000000000000048
-:10F8C0000000000000000000000000000000000038
-:10F8D0000000000000000000000000000000000028
-:10F8E0000000000000000000000000000000000018
-:10F8F0000000000000000000000000000000000008
-:10F9000000000000000000000000000000000000F7
-:10F9100000000000000000000000000000000000E7
-:10F9200000000000000000000000000000000000D7
-:10F9300000000000000000000000000000000000C7
-:10F9400000000000000000000000000000000000B7
-:10F9500000000000000000000000000000000000A7
-:10F960000000000000000000000000000000000097
-:10F970000000000000000000000000000000000087
-:10F980000000000000000000000000000000000077
-:10F990000000000000000000000000000000000067
-:10F9A0000000000000000000000000000000000057
-:10F9B0000000000000000000000000000000000047
-:10F9C0000000000000000000000000000000000037
-:10F9D0000000000000000000000000000000000027
-:10F9E0000000000000000000000000000000000017
-:10F9F0000000000000000000000000000000000007
-:10FA000000000000000000000000000000000000F6
-:10FA100000000000000000000000000000000000E6
-:10FA200000000000000000000000000000000000D6
-:10FA300000000000000000000000000000000000C6
-:10FA400000000000000000000000000000000000B6
-:10FA500000000000000000000000000000000000A6
-:10FA60000000000000000000000000000000000096
-:10FA70000000000000000000000000000000000086
-:10FA80000000000000000000000000000000000076
-:10FA90000000000000000000000000000000000066
-:10FAA0000000000000000000000000000000000056
-:10FAB0000000000000000000000000000000000046
-:10FAC0000000000000000000000000000000000036
-:10FAD0000000000000000000000000000000000026
-:10FAE0000000000000000000000000000000000016
-:10FAF0000000000000000000000000000000000006
-:10FB000000000000000000000000000000000000F5
-:10FB100000000000000000000000000000000000E5
-:10FB200000000000000000000000000000000000D5
-:10FB300000000000000000000000000000000000C5
-:10FB400000000000000000000000000000000000B5
-:10FB500000000000000000000000000000000000A5
-:10FB60000000000000000000000000000000000095
-:10FB70000000000000000000000000000000000085
-:10FB80000000000000000000000000000000000075
-:10FB90000000000000000000000000000000000065
-:10FBA0000000000000000000000000000000000055
-:10FBB0000000000000000000000000000000000045
-:10FBC0000000000000000000000000000000000035
-:10FBD0000000000000000000000000000000000025
-:10FBE0000000000000000000000000000000000015
-:10FBF0000000000000000000000000000000000005
-:10FC000000000000000000000000000000000000F4
-:10FC100000000000000000000000000000000000E4
-:10FC200000000000000000000000000000000000D4
-:10FC300000000000000000000000000000000000C4
-:10FC400000000000000000000000000000000000B4
-:10FC500000000000000000000000000000000000A4
-:10FC60000000000000000000000000000000000094
-:10FC70000000000000000000000000000000000084
-:10FC80000000000000000000000000000000000074
-:10FC90000000000000000000000000000000000064
-:10FCA0000000000000000000000000000000000054
-:10FCB0000000000000000000000000000000000044
-:10FCC0000000000000000000000000000000000034
-:10FCD0000000000000000000000000000000000024
-:10FCE0000000000000000000000000000000000014
-:10FCF0000000000000000000000000000000000004
-:10FD000000000000000000000000000000000000F3
-:10FD100000000000000000000000000000000000E3
-:10FD200000000000000000000000000000000000D3
-:10FD30003000000100005FA73000800100000003D8
-:10FD40003000400E00000000000000000000000035
-:10FD500000000000000000000000000000000000A3
-:10FD60000000000000000000000000000000000093
-:10FD700000000000000000000000000030008001D2
-:10FD8000000000053000A00100000000300000016C
-:10FD900000006B9700000000000000000000000061
-:04FDA000000000005F
-:00000001FF
-// VERSION= 1.0.0.191
-// DATE= 2002oct28
diff --git a/firmware/emi62/loader.HEX b/firmware/emi62/loader.HEX
deleted file mode 100644
index 0edb2dc310eb..000000000000
--- a/firmware/emi62/loader.HEX
+++ /dev/null
@@ -1,107 +0,0 @@
-:0300000002028772
-:03004300020400B4
-:10010000E4FFFEC220D2E843D820907FAB74FFF01A
-:10011000907FA9F0907FAAF05391EF907F9574C0E3
-:10012000F0907F9EF0907F98F0E4907F94F0907F25
-:100130009D74FFF0907F9774A0F0907F93E054FC43
-:10014000F0907F9C7403F0E4907F96F0907FAFE096
-:100150004401F0907FAEE0440DF0D2AF0FBF00013C
-:100160000EBE07F8BF08F520204275140075130075
-:100170007512007511007F487E927D007C00AB14E3
-:10018000AA13A912A811C31203ED50DB2020D87ABC
-:100190000079007800E5142401F514EA3513F5130D
-:1001A000E93512F512E83511F51180CA3020FD123B
-:1001B00001C75007907FB4E04401F0907FB4E04461
-:0601C00002F0C22080E6FF
-:0101C6002216
-:1001C700907FE9E0245B606024026003020285906F
-:1001D7007FEAE0750A00F50BA3E0FEE4EE420A9021
-:1001E7007FEEE0751500F516A3E0FEE4EE4215E597
-:1001F7001645157003020285E4907FC5F0907FB421
-:10020700E020E3F9907FC5E0F50C120313AF0C7EF5
-:1002170000EF250BF50BEE350AF50AC3E5169FF53A
-:1002270016E5159EF51580C7907FEAE0750A00F57B
-:100237000BA3E0FEE4EE420A907FEEE0751500F5B1
-:1002470016A3E0FEE4EE4215E51645156030E4908E
-:100257007FC5F0907FB4E020E3F9907FC5E0F50C0F
-:1002670012032BAF0C7E00EF250BF50BEE350AF5CD
-:0F0277000AC3E5169FF516E5159EF51580CAC357
-:010286002255
-:0C028700787FE4F6D8FD7581290202CED4
-:10029300020100E493A3F8E493A34003F68001F280
-:1002A30008DFF48029E493A3F85407240CC8C3336C
-:1002B300C4540F4420C8834004F456800146F6DF3B
-:1002C300E4800B010204081020408090046EE47E59
-:1002D300019360BCA3FF543F30E509541FFEE49330
-:1002E300A360010ECF54C025E060A840B8E493A3F7
-:1002F300FAE493A3F8E493A3C8C582C8CAC583CA22
-:10030300F0A3C8C582C8CAC583CADFE9DEE780BED9
-:10031300E50CFFE50BF582E50AF58375927E74C063
-:08032300F8E208F0A3DFFA2262
-:10032B00907F96858392A8827902900000E0B400BA
-:10033B000D7401F0907F97E0547FF04480F0E50C52
-:10034B00FF907EC0E0F528E4A24733F269F2E4A205
-:10035B004633F269F2E4A24533F269F2E4A2443384
-:10036B00F269F2E4A24333F269F2E4A24233F26996
-:10037B00F2E4A24133F269F2E4A24033F269F2A350
-:03038B00DFC222AC
-:10038E00C0E0C083C082907FC4E4F05391EF907FB1
-:0B039E00AB7404F0D082D083D0E032BA
-:1003A900C0E0C083C082D2205391EF907FAB74012B
-:0803B900F0D082D083D0E032C5
-:1003C100C0E0C083C0825391EF907FAB7402F0D044
-:0603D10082D083D0E0326F
-:1003D700C0E0C083C0825391EF907FAB7410F0D020
-:0603E70082D083D0E03259
-:1003ED00EB9FF5F0EA9E42F0E99D42F0E89C45F066
-:0103FD0022DD
-:0103FE0032CC
-:0103FF0032CB
-:100400000203A9000203C10002038E000204580087
-:100410000203D7000203FE000203FF00020484006F
-:10042000020485000204860002048700020488009A
-:100430000204890002048A0002048B0002048C007A
-:1004400002048D0002048E0002048F00020490005A
-:08045000020491000204920075
-:10045800C0E0C083C0825391EF907FAB7408F0D0A6
-:0604680082D083D0E032D7
-:10046E00020A000F010C11040D00000000410000F3
-:01047E00007D
-:04047F000217000060
-:010483000078
-:010484003245
-:010485003244
-:010486003243
-:010487003242
-:010488003241
-:010489003240
-:01048A00323F
-:01048B00323E
-:01048C00323D
-:01048D00323C
-:01048E00323B
-:01048F00323A
-:010490003239
-:010491003238
-:010492003237
-:1011000012011001000000406A0801010001010203
-:10111000000109022000010103A0000904000002EF
-:10112000FF0000040705820240000007050202409C
-:10113000000004030904260341006E0063006800F8
-:101140006F007200200043006800690070007300A7
-:101150002C00200049006E0063002E00280346008A
-:10116000690072006D007700610072006500200068
-:101170004600720061006D00650057006F0072004C
-:101180006B0073002A0343006F006E006600690065
-:101190006700750072006100740069006F006E00E6
-:1011A000200053007400720069006E006700220383
-:1011B00049006E0074006500720066006100630003
-:1011C0006500200053007400720069006E00670023
-:0211D00000001D
-:00000001FF
-/*
-Source: EMILOAD.HEX
-VERSION=1.0.2.002
-DATE=10.01.2002
-EMI26_62
-*/
diff --git a/firmware/emi62/midi.HEX b/firmware/emi62/midi.HEX
deleted file mode 100644
index 32a0d65176ba..000000000000
--- a/firmware/emi62/midi.HEX
+++ /dev/null
@@ -1,1266 +0,0 @@
-:030000000246B9FC
-:03000300020FFDEC
-:03000B00024E0F93
-:030013000217FDD4
-:03001B00024E1280
-:03002300024DEF9C
-:03002B0002480088
-:03003300024DE695
-:03003B00024DF67D
-:030043000249006F
-:03004B00024E035F
-:030053000248FA66
-:03005B00024DFD56
-:03006300024E0743
-:1005000012011001000000406A08110100010102FF
-:100510000001090208020501008032090400000000
-:10052000010100000A2401000156000201020C240E
-:10053000020101010002000000000D240605010275
-:10054000030000000000000924030204030005006A
-:100550000C24020305020006000000001524060614
-:100560000302000003000300030003000300030074
-:100570000009240304010100060009040100000130
-:100580000200000904010102010200000724010128
-:10059000000100112402010202100344AC0080BBE0
-:1005A0000000770109050A05840101008F07250174
-:1005B0000100000009058F01030001050009040185
-:1005C00002020102000007240101000100112402BF
-:1005D000010203180344AC0080BB00007701090549
-:1005E0000A05460201008F072501010000000905E8
-:1005F0008F01030001050009040200000102000050
-:1006000009040201010102000007240104000100A5
-:100610000E2402010602100244AC0080BB00090552
-:100620008C054C02010000072501000200000904AE
-:1006300002020101020000072401040001000E244F
-:1006400002010603180244AC0080BB0009058C05BA
-:1006500072030100000725010002000009040203E3
-:10066000010102000007240104000100112402011D
-:100670000202100344AC0080BB0000770109058C26
-:1006800005840101000007250100020000090402A1
-:1006900004010102000007240104000100112402EA
-:1006A000010203180344AC0080BB00007701090578
-:1006B0008C05460201000007250100020000090424
-:1006C00003000001010000092401000109000104E8
-:1006D00009040400020103000007240100012400B2
-:1006E000062402010700092403020801070100068D
-:1006F0002402020900092403010A01090100090575
-:10070000010204000000000525010107090581021E
-:100710000400000000052501010A04030904180370
-:1007200045006D006100670069006300200047001C
-:100730006D0062004800220345006D006100670003
-:1007400069006300200045004D004900200036008C
-:100750007C00320020006D002A0343006F006E0011
-:10076000660069006700750072006100740069002E
-:100770006F006E00200053007400720069006E006C
-:100780006700220349006E00740065007200660075
-:10079000610063006500200053007400720069006E
-:0607A0006E00670000007E
-:1007A600E4907666F01244AD202613907666E0C398
-:1007B6009402500AE004F0D242124B7F80EA3026BF
-:1007C60005122801C22630252B907696E054FCF0BF
-:1007D600908003F0121496907696E04403F0908091
-:1007E60003F0E4907667F0907667E004F0E0B44BAF
-:0A07F600F61247FA12411B80C522DB
-:10080000E4907631F0907631E0FF75F003A4240F88
-:10081000F582E43475F583E0FE907FEDE0FDEE6D4A
-:10082000600EEFC3940B5008907631E004F080D551
-:10083000EFB40B08907FB4E04401F022EF75F003B1
-:10084000A4240EF582E43475F583E0907633F02429
-:10085000F0600A240E60028187124BC722907FED60
-:10086000E0640570519076187405F0907637740145
-:10087000F09076397403F0907621F0E4907620F0D1
-:10088000907FEAE0F4602F907620E0FF75F00AA4F4
-:1008900024AAF582E43475F583E0FE907FEAE0FD5A
-:1008A000EE6D6012907621E0FEEFC39E50089076C8
-:1008B00020E004F080D1907FEDE0640670529076E5
-:1008C000187406F09076377404F0907639740AF054
-:1008D000907621F09076207403F0907FEAE0F46047
-:1008E0002F907620E0FF75F00AA424AAF582E43464
-:1008F00075F583E0FE907FEAE0FDEE6D6012907684
-:1009000021E0FEEFC39E5008907620E004F080D1F5
-:10091000907620E0FF75F00AA424AAF582E43475ED
-:10092000F583E0907229F0E490763BF0907621E038
-:10093000FEEF6E7008907FB4E04401F022907FEBF0
-:10094000E014601314700221E224026002817F909F
-:100950007FB4E04401F022907FE9E014707C907F46
-:10096000EAE0F47048907637E0907620F09076399F
-:10097000E0FE907620E0FDC39E502B90763BE0FE9B
-:1009800004F074C02EF582E4347EF583E0FEED754C
-:10099000F00AA424ABF582E43475F583EEF090768A
-:1009A00020E004F080C790763F7401F022907EC072
-:1009B000E0FEEF75F00AA424ABF582E43475F5830C
-:1009C000EEF0E0B4010890763E7401F08005E4900A
-:1009D000763EF090763F7401F022907FB4E04401BF
-:1009E000F022907FE9E024FE700241A314700261BE
-:1009F0003F14700261DB240360028177907FEAE09C
-:100A0000F4706B907637E0907620F0907639E0FFC6
-:100A1000907620E0FEC39F504E90763BE0FF04F0BE
-:100A200074C02FF582E4347EF583E0FFEE75F00AA2
-:100A3000A424ACF582E43475F583EFF090763BE0C6
-:100A4000FF04F074C02FF582E4347EF583E0FFEEFE
-:100A500075F00AA424ADF582E43475F583EFF090C7
-:100A60007620E004F080A49076407401F022907E1D
-:100A7000C0E0FF907620E0FE75F00AA424ACF58279
-:100A8000E43475F583EFF0907EC1E0FFEE75F00A77
-:100A9000A424ADF582E43475F583EFF090764174CB
-:100AA00001F022907FEAE0F47066907637E090766D
-:100AB00020F0907639E0FF907620E0FEC39F400260
-:100AC000818E90763BE0FF04F074C02FF582E43411
-:100AD0007EF583E0FFEE75F00AA424AEF582E434DF
-:100AE00075F583EFF090763BE0FF04F074C02FF5CE
-:100AF00082E4347EF583E0FFEE75F00AA424AFF5BE
-:100B000082E43475F583EFF0907620E004F080A263
-:100B1000907EC0E0FF907620E0FE75F00AA424AE3F
-:100B2000F582E43475F583EFF0907EC1E0FFEE7559
-:100B3000F00AA424AFF582E43475F583EFF0229037
-:100B40007FEAE0F47066907637E0907620F0907659
-:100B500039E0FF907620E0FEC39F4002818E9076C0
-:100B60003BE0FF04F074C02FF582E4347EF583E0AF
-:100B7000FFEE75F00AA424B0F582E43475F583EF36
-:100B8000F090763BE0FF04F074C02FF582E4347EF1
-:100B9000F583E0FFEE75F00AA424B1F582E4347524
-:100BA000F583EFF0907620E004F080A2907EC0E024
-:100BB000FF907620E0FE75F00AA424B0F582E434BC
-:100BC00075F583EFF0907EC1E0FFEE75F00AA42486
-:100BD000B1F582E43475F583EFF022907FEAE0F41A
-:100BE0007066907637E0907620F0907639E0FF904E
-:100BF0007620E0FEC39F4002818E90763BE0FF04AA
-:100C0000F074C02FF582E4347EF583E0FFEE75F0DA
-:100C10000AA424B2F582E43475F583EFF090763BB4
-:100C2000E0FF04F074C02FF582E4347EF583E0FF2A
-:100C3000EE75F00AA424B3F582E43475F583EFF081
-:100C4000907620E004F080A2907EC0E0FF907620B5
-:100C5000E0FE75F00AA424B2F582E43475F583EF62
-:100C6000F0907EC1E0FFEE75F00AA424B3F582E4B3
-:100C70003475F583EFF022907FB4E04401F02290C8
-:0F0C80007FB4E04401F022907FB4E04401F02201
-:100C8F004176680141766A0241766B0AC120C12123
-:020C9F00C12F63
-:040CA1004176230075
-:100CA500417201014572050002C9000045720A0042
-:100CB500010203044D720FD100D1000000000000B5
-:100CC500282809004D721C010001020304050607CE
-:100CD50008090A0B41722E2241722F2341723020DE
-:100CE5004172312162D2723A00000000000000001A
-:100CF50000000000000000000000000000000000EF
-:100D050000000000000000000000000000000000DE
-:100D150000000000000000000000000000000000CE
-:100D250000000000000000000000000000000000BE
-:100D350000000000000000000000000000000000AE
-:100D4500000000000000000000000000000000009E
-:100D5500000000000000000000000000000000008E
-:100D6500000000000000000000000000000000007E
-:100D75000000000000000000000001010101010168
-:100D8500010101010101010101010101010101014E
-:100D9500010101010101010101010101010101013E
-:100DA500010101010101010101010101010101012E
-:100DB5000101010101010101020202020202020216
-:100DC50002020202020202020202020202020202FE
-:100DD50002020202020202020202020202020202EE
-:100DE50002020202020202020202020202020202DE
-:100DF50002020202020303030303030303030303C3
-:100E050003030303030303030303030303030303AD
-:100E1500030303030303030303030303030303039D
-:100E2500030303030303030303030303030303038D
-:100E3500030304040404040404040404040404046F
-:100E4500040404040404040404040404040404045D
-:100E5500040404040404040404040404040404044D
-:100E6500040404040404040404040404040404043D
-:100E7500050505050505050505050505050505051D
-:100E8500050505050505050505050505050505050D
-:100E950005050505050505050505050505050505FD
-:100EA50005050505050505050505050505050606EB
-:100EB50006060606060606060606060606060606CD
-:100EC50006060606060606060606060606060606BD
-:100ED50006060606060606060606060606060606AD
-:100EE5000606060606060606060606070707080896
-:100EF500080909090A0A0A0B0B0B0C0C0C0D0D0D40
-:100F05000E0E0E0F0F0F10101011111112121213D9
-:100F15001313141414151515161616171717181874
-:100F250018191919191A1A1A1A1B1B1B1B1C1C1C18
-:100F35001C1D1D1D1D1E1E1E1E1F1F1F1F202020C8
-:100F45002121212222222323242425252626272761
-:100F5500282829292A2A2B2B2C2C2D2D2E2E2F2FD4
-:100F65003030313132323333343435353636373744
-:100F7500383839393A3A3B3C3D3E3F40414243449B
-:100F85004546474849494A4B4B4C4D4E4F505152A7
-:100F95005354555556565757585A5B5D5E5F6162B7
-:100FA500636465666768696A6B6C6D6F717273748B
-:100FB50075767778797A7B7C7E80013701013800F8
-:010FC500002B
-:100FC600E4FF74462FF582E43476F583E0FE742060
-:100FD6002FF582E43480F583EEF0744E2FF582E42B
-:100FE6003476F583E0FE74302FF582E43480F583A1
-:060FF600EEF00FBF08CC75
-:010FFC0022D2
-:030FFD00C2893274
-:10100000E490762CF090762CE0FF75F003A4240F8A
-:10101000F582E43475F583E0FE907FEDE0FDEE6D42
-:10102000600EEFC3940B500890762CE004F080D54E
-:10103000EFB40B08907FB4E04401F022EF75F003A9
-:10104000A4240EF582E43475F583E090762EF02426
-:10105000F0600A240F6002817D124BA422907FED84
-:10106000E0640570519076187405F090763874013C
-:10107000F090763A7403F090761CF0E490761BF0D2
-:10108000907FEAE0F4602F90761BE0FF75F00AA4F1
-:1010900024AAF582E43475F583E0FE907FEAE0FD52
-:1010A000EE6D601290761CE0FEEFC39E50089076C5
-:1010B0001BE004F080D1907FEDE0640670529076E2
-:1010C000187406F09076387404F090763A740AF04A
-:1010D00090761CF090761B7403F0907FEAE0F46049
-:1010E0002F90761BE0FF75F00AA424AAF582E43461
-:1010F00075F583E0FE907FEAE0FDEE6D601290767C
-:101100001CE0FEEFC39E500890761BE004F080D1F7
-:10111000E490761EF090761CE0FF90761BE0FE6F68
-:101120007008907FB4E04401F022907FEBE01460FF
-:101130001314700221BF240260028175907FB4E015
-:101140004401F022907FE9E0247F706B907FEAE019
-:10115000F4704A907638E090761BF090763AE0FF93
-:1011600090761BE0FDC39F502BED75F00AA424ABD5
-:10117000F582E43475F583E0FF90761EE0FD04F01F
-:1011800074002DF582E4347FF583EFF090761BE058
-:1011900004F080C790761EE0907FB5F022EE75F0E7
-:1011A0000AA424ABF582E43475F583E0907F00F067
-:1011B000907FB57401F022907FB4E04401F022905A
-:1011C0007FE9E0247E7002417E1470026123147076
-:1011D0000261C824036002816D907FEAE0F4706DC3
-:1011E000907638E090761BF090763AE0FF90761B90
-:1011F000E0C39F504FE0FF75F00AA424ACF582E4F1
-:101200003475F583E0FE90761EE0FD04F074002D49
-:10121000F582E4347FF583EEF0EF75F00AA424AD97
-:10122000F582E43475F583E0FF90761EE0FE04F06D
-:1012300074002EF582E4347FF583EFF090761BE0A6
-:1012400004F080A490761EE0907FB5F02290761B8B
-:10125000E0FF75F00AA424ACF582E43475F583E070
-:10126000907F00F0EF75F00AA424ADF582E43475A8
-:10127000F583E0907F01F0907FB57402F022907FBB
-:10128000EAE0F4706D907638E090761BF090763A54
-:10129000E0FF90761BE0C39F504FE0FF75F00AA47B
-:1012A00024AEF582E43475F583E0FE90761EE0FD11
-:1012B00004F074002DF582E4347FF583EEF0EF75D1
-:1012C000F00AA424AFF582E43475F583E0FF90764C
-:1012D0001EE0FE04F074002EF582E4347FF583EF07
-:1012E000F090761BE004F080A490761EE0907FB52D
-:1012F000F02290761BE0FF75F00AA424AEF582E49C
-:101300003475F583E0907F00F0EF75F00AA424AF08
-:10131000F582E43475F583E0907F01F0907FB57439
-:1013200002F022907FEAE0F4706D907638E09076DB
-:101330001BF090763AE0FF90761BE0C39F504FE0A1
-:10134000FF75F00AA424B0F582E43475F583E0FE5D
-:1013500090761EE0FD04F074002DF582E4347FF5F4
-:1013600083EEF0EF75F00AA424B1F582E43475F54C
-:1013700083E0FF90761EE0FE04F074002EF582E418
-:10138000347FF583EFF090761BE004F080A4907634
-:101390001EE0907FB5F02290761BE0FF75F00AA466
-:1013A00024B0F582E43475F583E0907F00F0EF75AA
-:1013B000F00AA424B1F582E43475F583E0907F014E
-:1013C000F0907FB57402F022907FEAE0F4706D90A7
-:1013D0007638E090761BF090763AE0FF90761BE04E
-:1013E000C39F504FE0FF75F00AA424B2F582E434A5
-:1013F00075F583E0FE90761EE0FD04F074002DF597
-:1014000082E4347FF583EEF0EF75F00AA424B3F59F
-:1014100082E43475F583E0FF90761EE0FE04F074FC
-:10142000002EF582E4347FF583EFF090761BE00424
-:10143000F080A490761EE0907FB5F02290761BE0BD
-:10144000FF75F00AA424B2F582E43475F583E090C8
-:101450007F00F0EF75F00AA424B3F582E43475F54B
-:1014600083E0907F01F0907FB57402F022907FB40A
-:10147000E04401F022907FB4E04401F022907FB478
-:05148000E04401F02230
-:101485007400F58690FDA57C05A3E582458370F97A
-:011495002234
-:10149600907FD6E04480F0438701000000000022E0
-:1014A600C0D0C0E08FE0C0E08EE0C0E08DE0C0E0DC
-:1014B6008CE0C0E0C082C0830586C084C0857D0004
-:1014C600907FE3747BF0A37480F07C11907F99E0A9
-:1014D6005440DC030214F3B40013907FE27440F02E
-:1014E600907FE5F0907FE27400F00214D29076903F
-:1014F600E0B4011290768FE02DFD907FE27480F0CB
-:10150600907F6C021557B4021290768FE02DFD90F5
-:101516007FE27480F0907F6C021596B40312907689
-:101526008FE02DFD907FE27480F0907F6C0215E1D4
-:10153600B4041290768FE02DFD907FE27480F090D7
-:101546007F6C021610907FE27480F0907F6C02161A
-:1015560040F0F0F0F0F0F0F0F0F0F0F0F0DDF27DB9
-:10156600020586907FE27400F0907F9BE05404B4FD
-:1015760000050586021640907FE27480F00586F02D
-:10158600F0F0F0F0F0F0F0F0F0F0F0DDD4021640FC
-:10159600F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F045
-:1015A600F0F0DDEC7D020586907FE27400F0907F1E
-:1015B6009BE05404B400050586021640907FE27451
-:1015C60080F00586F0F0F0F0F0F0F0F0F0F0F0F0DA
-:0615D600F0F0F0F0F0F06F
-:1015DC00DDCE021640F0F0F0F0DDFA7D02058690CB
-:1015EC007FE27400F0907F9BE05404B40005058604
-:1015FC00021640907FE27480F00586F0F0F0F0DD8A
-:10160C00DC021640F0F0F0F0F0F0DDF87D0205861B
-:10161C00907FE27400F0907F9BE05404B4000505C9
-:10162C0086021640907FE27480F00586F0F0F0F0B0
-:10163C00F0F0DDDA907FE27400F0D085D08405867E
-:10164C00D083D082D0E0FCD0E0FDD0E0FED0E0FF33
-:05165C00D0E0D0D02217
-:10166100C0D0C0E0C082C08390767CE0907F6FF0F4
-:1016710090767DE0907F6FF090767EE0907F6FF0C6
-:09168100D083D082D0E0D0D02249
-:10168A00C0D0C0E08FE0C0E08EE0C0E0C082C0837E
-:10169A000586C084C085907687E0FFBF00030217E5
-:1016AA0001907F96E04480F0907FE27480F0907F12
-:1016BA0062E00586907FE27400F0907F96E0547FA6
-:1016CA00F0907FE27480F090768EE0B40105058692
-:1016DA000216F6B4020505860216EB05860216FB0B
-:1016EA00E0E0E0E0E0E0DFF80216FBE0E0E0E0DF67
-:1016FA00FA907FE27400F0D085D0840586D083D03A
-:0C170A0082D0E0FED0E0FFD0E0D0D02282
-:10171600C082C083C0E0E8C0E078D1E814F870FB6E
-:0A172600D0E0F8D0E0D083D082229A
-:10173000C082C083C0E0E8C0E07878E814F870FBAD
-:0A174000D0E0F8D0E0D083D0822280
-:07174A00907FC57402F0223C
-:10175100907EC0E0907645F0907EC1E0907644F0B6
-:10176100907EC2E0907643F0B40003021778907641
-:10177100197403F002178E907644E0B4BB09907699
-:10178100197402F002178E9076197401F090764266
-:03179100E4F0225F
-:041794008D298B2AE6
-:10179800124A55EA4960571236927E0029FFEE3AFE
-:1017A800C9EFC9752BFFF52C892DAB2BAA2CA92DB8
-:1017B8009000011236ABFF64046005EF6405702EDB
-:1017C800EFB404159000021236AB6529700B900037
-:1017D800031236AB652A7001221236927E0029FF69
-:1017E800EE3AC9EFC9752BFFF52C892D80BC7B001B
-:0417F8007A007900FA
-:0117FC0022CA
-:0317FD00C28B326A
-:10180000907690E014603714700201D814700221B1
-:1018100072147002413B240460026103907FFC74E7
-:10182000CCF0907FFF74FCF0907695E04401F0548A
-:1018300005F0908001F0E490761AF0C22E229076A6
-:1018400095E04401F04402F0303E06E04404F080AC
-:1018500007907695E054FBF090761AE0B40108907A
-:101860007695E0908001F0907619E0FFB401229027
-:101870007FFC7474F0907FFF74FCF090768F742B73
-:10188000F0907697E054FDF0E4907681F0907680C9
-:10189000F0EFB40222907FFC7468F0907FFF74FC3C
-:1018A000F090768F742FF0907697E04402F0E490F9
-:1018B0007681F0907680F0303F09907697E054FE84
-:1018C000F08007907697E04401F0907697E054FB23
-:1018D000F0908002F0D22E22907695E054FEF044F3
-:1018E00002F0303E06E04404F08007907695E05424
-:1018F000FBF090761AE0B40108907695E0908001B4
-:10190000F0907619E0FFB40122907FFC7430F090E3
-:101910007FFF74FCF090768F742BF0907697E054F4
-:10192000FDF0E4907681F0907680F0EFB4022290A2
-:101930007FFC741CF0907FFF74FCF090768F742F06
-:10194000F0907697E04402F0E4907681F090768013
-:10195000F0303F09907697E054FEF080079076973C
-:10196000E04401F0907697E054FBF0908002F0D2D2
-:101970002E22907695E04401F04402F04408F030C5
-:101980003E06E04404F08007907695E054FBF0902A
-:10199000761AE0B40108907695E0908001F0907698
-:1019A00019E0FFB40125907FFC74CCF0907FFF74A8
-:1019B000FCF090768F742BF0907697E054FDF05405
-:1019C000FBF0E4907681F0907680F0EFB402259001
-:1019D0007FFC74C8F0907FFF74FCF090768F742FBA
-:1019E000F0907697E04402F054FBF0E4907681F0BA
-:1019F000907680F0EFB40325907FFC7498F0907F90
-:101A0000FF74FCF090768F745FF0907697E054FD51
-:101A1000F04404F0E4907681F0907680F0303F0955
-:101A2000907697E054FEF08007907697E04401F0BE
-:101A3000907697E0908002F0D22E22907695E05436
-:101A4000FEF04402F04408F0303E06E04404F0802A
-:101A500007907695E054FBF090761AE0B401089078
-:101A60007695E0908001F0907619E0FFB401259022
-:101A70007FFC74B4F0907FFF74FCF090768F742B31
-:101A8000F0907697E054FDF054FBF0E4907681F00E
-:101A9000907680F0EFB40225907FFC74B0F0907FD8
-:101AA000FF74FCF090768F742FF0907697E04402EC
-:101AB000F054FBF0E4907681F0907680F0EFB40380
-:101AC00025907FFC7468F0907FFF74FCF090768F17
-:101AD000745FF0907697E054FDF04404F0E4907663
-:101AE00081F0907680F0303F09907697E054FEF0D8
-:101AF0008007907697E04401F0907697E09080021E
-:041B0000F0D22E22CF
-:101B0400302C38C22C907619E0FFB4010E90767C0C
-:101B140074C0F0A37414F0A3740BF0EFB4020DE4DA
-:101B240090767CF0A37410F0A3740CF0EFB4030B64
-:0C1B3400E490767CF0A37418F0A3F0227B
-:101B40000000000000000000000000000000000095
-:101B50000000000000000000000000000000000085
-:101B60000000000000000000000000000000000075
-:101B70000000000000000000000000000000000065
-:101B80000000000000000000000000000000000055
-:101B90000000000000000000000000000000000045
-:101BA0000000000000000000000000000000000035
-:101BB0000000000000000000000000000000000025
-:101BC0000000000000000000000000000000000015
-:101BD0000000000000000000000000000000000005
-:101BE00000000000000000000000000000000000F5
-:101BF00000000000000000000000000000000000E5
-:101C000000000000000000000000000000000000D4
-:101C100000000000000000000000000000000000C4
-:101C200000000000000000000000000000000000B4
-:101C300000000000000000000000000000000000A4
-:101C40000000000000000000000000000000000094
-:101C50000000000000000000000000000000000084
-:101C60000000000000000000000000000000000074
-:101C70000000000000000000000000000000000064
-:101C80000000000000000000000000000000000054
-:101C90000000000000000000000000000000000044
-:101CA0000000000000000000000000000000000034
-:101CB0000000000000000000000000000000000024
-:101CC0000000000000000000000000000000000014
-:101CD0000000000000000000000000000000000004
-:101CE00000000000000000000000000000000000F4
-:101CF00000000000000000000000000000000000E4
-:101D000000000000000000000000000000000000D3
-:101D100000000000000000000000000000000000C3
-:101D200000000000000000000000000000000000B3
-:101D300000000000000000000000000000000000A3
-:101D40000000000000000000000000000000000093
-:101D50000000000000000000000000000000000083
-:101D60000000000000000000000000000000000073
-:101D70000000000000000000000000000000000063
-:101D80000000000000000000000000000000000053
-:101D90000000000000000000000000000000000043
-:101DA0000000000000000000000000000000000033
-:101DB0000000000000000000000000000000000023
-:101DC0000000000000000000000000000000000013
-:101DD0000000000000000000000000000000000003
-:101DE00000000000000000000000000000000000F3
-:101DF00000000000000000000000000000000000E3
-:101E000000000000000000000000000000000000D2
-:101E100000000000000000000000000000000000C2
-:101E200000000000000000000000000000000000B2
-:101E300000000000000000000000000000000000A2
-:101E40000000000000000000000000000000000092
-:101E50000000000000000000000000000000000082
-:101E60000000000000000000000000000000000072
-:101E70000000000000000000000000000000000062
-:101E80000000000000000000000000000000000052
-:101E90000000000000000000000000000000000042
-:101EA0000000000000000000000000000000000032
-:0E1EB000000000000000000000000000000024
-:101EBE000000000000000000000000000000000014
-:101ECE000000000000000000000000000000000004
-:101EDE0000000000000000000000000000000000F4
-:101EEE0000000000000000000000000000000000E4
-:101EFE0000000000000000000000000000000000D4
-:101F0E0000000000000000000000000000000000C3
-:101F1E0000000000000000000000000000000000B3
-:101F2E0000000000000000000000000000000000A3
-:021F3E000000A1
-:101F40000000000000000000000000000000000091
-:101F50000000000000000000000000000000000081
-:101F60000000000000000000000000000000000071
-:101F70000000000000000000000000000000000061
-:101F80000000000000000000000000000000000051
-:101F90000000000000000000000000000000000041
-:101FA0000000000000000000000000000000000031
-:101FB0000000000000000000000000000000000021
-:101FC0000000000000000000000000000000000011
-:101FD0000000000000000000000000000000000001
-:101FE00000000000000000000000000000000000F1
-:101FF00000000000000000000000000000000000E1
-:1020000000000000000000000000000000000000D0
-:1020100000000000000000000000000000000000C0
-:1020200000000000000000000000000000000000B0
-:1020300000000000000000000000000000000000A0
-:102040000000000000000000000000000000000090
-:102050000000000000000000000000000000000080
-:102060000000000000000000000000000000000070
-:102070000000000000000000000000000000000060
-:102080000000000000000000000000000000000050
-:102090000000000000000000000000000000000040
-:1020A0000000000000000000000000000000000030
-:1020B0000000000000000000000000000000000020
-:1020C0000000000000000000000000000000000010
-:1020D0000000000000000000000000000000000000
-:1020E00000000000000000000000000000000000F0
-:1020F00000000000000000000000000000000000E0
-:1021000000000000000000000000000000000000CF
-:1021100000000000000000000000000000000000BF
-:1021200000000000000000000000000000000000AF
-:10213000000000000000000000000000000000009F
-:10214000000000000000000000000000000000008F
-:10215000000000000000000000000000000000007F
-:10216000000000000000000000000000000000006F
-:10217000000000000000000000000000000000005F
-:10218000000000000000000000000000000000004F
-:10219000000000000000000000000000000000003F
-:1021A000000000000000000000000000000000002F
-:1021B000000000000000000000000000000000001F
-:1021C000000000000000000000000000000000000F
-:1021D00000000000000000000000000000000000FF
-:1021E00000000000000000000000000000000000EF
-:1021F00000000000000000000000000000000000DF
-:1022000000000000000000000000000000000000CE
-:1022100000000000000000000000000000000000BE
-:1022200000000000000000000000000000000000AE
-:10223000000000000000000000000000000000009E
-:10224000000000000000000000000000000000008E
-:10225000000000000000000000000000000000007E
-:10226000000000000000000000000000000000006E
-:10227000000000000000000000000000000000005E
-:10228000000000000000000000000000000000004E
-:10229000000000000000000000000000000000003E
-:1022A000000000000000000000000000000000002E
-:1022B000000000000000000000000000000000001E
-:1022C000000000000000000000000000000000000E
-:1022D00000000000000000000000000000000000FE
-:1022E00000000000000000000000000000000000EE
-:1022F00000000000000000000000000000000000DE
-:1023000000000000000000000000000000000000CD
-:1023100000000000000000000000000000000000BD
-:1023200000000000000000000000000000000000AD
-:10233000000000000000000000000000000000009D
-:10234000000000000000000000000000000000008D
-:10235000000000000000000000000000000000007D
-:10236000000000000000000000000000000000006D
-:0E23700000000000000000000000000000005F
-:10237E00000000000000000000000000000000004F
-:10238E00000000000000000000000000000000003F
-:10239E00000000000000000000000000000000002F
-:1023AE00000000000000000000000000000000001F
-:1023BE00000000000000000000000000000000000F
-:1023CE0000000000000000000000000000000000FF
-:1023DE0000000000000000000000000000000000EF
-:1023EE0000000000000000000000000000000000DF
-:1023FE0000000000000000000000000000000000CF
-:10240E0000000000000000000000000000000000BE
-:10241E0000000000000000000000000000000000AE
-:10242E00000000000000000000000000000000009E
-:10243E00000000000000000000000000000000008E
-:10244E00000000000000000000000000000000007E
-:10245E00000000000000000000000000000000006E
-:10246E00000000000000000000000000000000005E
-:10247E00000000000000000000000000000000004E
-:10248E00000000000000000000000000000000003E
-:10249E00000000000000000000000000000000002E
-:1024AE00000000000000000000000000000000001E
-:1024BE00000000000000000000000000000000000E
-:1024CE0000000000000000000000000000000000FE
-:1024DE0000000000000000000000000000000000EE
-:1024EE0000000000000000000000000000000000DE
-:1024FE0000000000000000000000000000000000CE
-:10250E0000000000000000000000000000000000BD
-:10251E0000000000000000000000000000000000AD
-:10252E00000000000000000000000000000000009D
-:10253E00000000000000000000000000000000008D
-:10254E00000000000000000000000000000000007D
-:10255E00000000000000000000000000000000006D
-:10256E00000000000000000000000000000000005D
-:10257E00000000000000000000000000000000004D
-:10258E00000000000000000000000000000000003D
-:10259E00000000000000000000000000000000002D
-:1025AE00000000000000000000000000000000001D
-:1025BE00000000000000000000000000000000000D
-:1025CE0000000000000000000000000000000000FD
-:1025DE0000000000000000000000000000000000ED
-:1025EE0000000000000000000000000000000000DD
-:1025FE0000000000000000000000000000000000CD
-:10260E0000000000000000000000000000000000BC
-:10261E0000000000000000000000000000000000AC
-:10262E00000000000000000000000000000000009C
-:10263E00000000000000000000000000000000008C
-:10264E00000000000000000000000000000000007C
-:10265E00000000000000000000000000000000006C
-:10266E00000000000000000000000000000000005C
-:10267E00000000000000000000000000000000004C
-:10268E00000000000000000000000000000000003C
-:10269E00000000000000000000000000000000002C
-:1026AE00000000000000000000000000000000001C
-:1026BE00000000000000000000000000000000000C
-:1026CE0000000000000000000000000000000000FC
-:1026DE0000000000000000000000000000000000EC
-:0E26EE000000000000000000000000000000DE
-:1026FC0000000000000000000000000000000000CE
-:10270C0000000000000000000000000000000000BD
-:10271C0000000000000000000000000000000000AD
-:10272C00000000000000000000000000000000009D
-:10273C00000000000000000000000000000000008D
-:10274C00000000000000000000000000000000007D
-:10275C00000000000000000000000000000000006D
-:10276C00000000000000000000000000000000005D
-:10277C00000000000000000000000000000000004D
-:10278C00000000000000000000000000000000003D
-:10279C00000000000000000000000000000000002D
-:1027AC00000000000000000000000000000000001D
-:1027BC00000000000000000000000000000000000D
-:1027CC0000000000000000000000000000000000FD
-:1027DC0000000000000000000000000000000000ED
-:1027EC0000000000000000000000000000000000DD
-:0527FC000000000022B6
-:10280100C220C221C22A907FE8E01237F9283000A5
-:10281100288C0128A2022A1F212A6A22293D802907
-:102821007D8129D1822A84A12ABAA200002ABF90DF
-:102831007FE9E014601124FE602824FE603B24FC43
-:102841007040123FE541CB124E1D400241CB907FBB
-:10285100EAE0B40104C22241CB907FB4E04401F02C
-:1028610041CB124E1F907FEAE0B40104D22241CB4A
-:10287100907FB4E04401F041CB907FB4E04401F09B
-:1028810041CB907FB4E04401F041CB907FE9E0245B
-:10289100F5700512486341CB907FB4E04401F041EB
-:1028A100CB907FE9E024FD605424026002213412C0
-:1028B1004E1D400241CB907FEAE07038907FECE002
-:1028C100F45480FFC4540FFFE054072F25E024B4D3
-:1028D100F582E4347FF583E4F0907FECE05480FFEF
-:1028E100131313541FFFE054072F907FD7F0E044D8
-:1028F10020F041CB907FB4E04401F041CB124E1F58
-:10290100400241CB907FEAE07020907FECE0F454EC
-:1029110080FFC4540FFFE054072F25E024B4F58253
-:10292100E4347FF5837401F041CB907FB4E044013E
-:10293100F041CB907FB4E04401F041CB907FE9E0DE
-:10294100601224F86009240270291243E741CB1276
-:102951004DCA41CB124E1BA222E433FF25E0FFA258
-:1029610023E4334F907F00F0E4A3F0907FB574022D
-:10297100F041CB907FB4E04401F041CB907FE9E09E
-:10298100603324F6602A2404703D907FEBE024DE5E
-:10299100600C047012907FB4E04401F041CB907F51
-:1029A100B4E04401F041CB907FB4E04401F041CB6D
-:1029B10012474541CB124E1BE4907F00F0A3F090EB
-:1029C1007FB57402F041CB907FB4E04401F041CB7C
-:1029D100907FE9E024F46034240C7039124E1B908E
-:1029E1007FECE0F45480FFC4540FFFE054072F251F
-:1029F100E024B4F582E4347FF583E054FD907F0058
-:102A0100F0E4A3F0907FB57402F041CB907FB4E085
-:102A11004401F041CB907FB4E04401F041CB907F81
-:102A2100E9E024F6601214601A2402701DD220908D
-:102A31007FB4E04401F08012D220907FB4E04401E1
-:102A4100F08007907FB4E04401F0202018907FEEE1
-:102A5100E07004A3E0600BD229D22712174AD22AD0
-:102A61008003120800C2208061907FEEE07004A311
-:102A7100E0600BD229D22812174AD22A804C123890
-:102A8100748047907FE9E024FE601214601A2402EA
-:102A9100701DD221907FB4E04401F08012D22190C8
-:102AA1007FB4E04401F08007907FB4E04401F0205E
-:102AB1002103121000C2218011122AD6800C124E5D
-:102AC100215007907FB4E04401F0202A07907FB4A1
-:052AD100E04402F022C8
-:102AD600E4907627F0907627E0FF75F00FA4244265
-:102AE600F582E43475F583E0FE907FECE0FDEE6D53
-:102AF600600EEFC394065008907627E004F080D568
-:102B0600EFB40608907FB4E04401F022EF75F00FB1
-:102B1600A42441F582E43475F583E0907628F02408
-:102B26009F7002A17424216002A1A1907FE9E02494
-:102B36007E700261FC14700281B524026002A16CF1
-:102B4600EF75F00FA42443F582E43475F583E0FCB9
-:102B5600A3E0FDA3E0FEA3E0FF7B447AAC79007816
-:102B660000C31237AB7013907F007444F0A374ACAB
-:102B7600F0E4A3F0907FB57403F0907627E075F04B
-:102B86000FA42443F582E43475F583E0FCA3E0FD4D
-:102B9600A3E0FEA3E0FF7B807ABB79007800C31236
-:102BA60037AB7013907F007480F0A374BBF0E4A37E
-:102BB600F0907FB57403F0907627E075F00FA424AB
-:102BC60043F582E43475F583E0FCA3E0FDA3E0FE63
-:102BD600A3E0FF7B007A7779017800C31237AB60F8
-:102BE60002A1A8907F00F0A37477F0A37401F0907F
-:102BF6007FB57403F022907627E075F00FA4244782
-:102C0600F582E43475F583E0FCA3E0FDA3E0FEA3C2
-:102C1600E0FF7B447AAC79007800C31237AB7013BF
-:102C2600907F007444F0A374ACF0E4A3F0907FB5F9
-:102C36007403F0907627E075F00FA42447F582E43C
-:102C46003475F583E0FCA3E0FDA3E0FEA3E0FF7B83
-:102C5600807ABB79007800C31237AB7013907F007F
-:102C66007480F0A374BBF0E4A3F0907FB57403F016
-:102C7600907627E075F00FA42447F582E43475F5C5
-:102C860083E0FCA3E0FDA3E0FEA3E0FF7B007A77F0
-:102C960079017800C31237AB6002A1A8907F00F0DB
-:102CA600A37477F0A37401F0907FB57403F02290BB
-:102CB6007627E075F00FA4244BF582E43475F5838E
-:102CC600E0FCA3E0FDA3E0FEA3E0FF7B447AAC7941
-:102CD600007800C31237AB7013907F007444F0A3E2
-:102CE60074ACF0E4A3F0907FB57403F0907627E01F
-:102CF60075F00FA4244BF582E43475F583E0FCA34C
-:102D0600E0FDA3E0FEA3E0FF7B807ABB79007800BC
-:102D1600C31237AB7013907F007480F0A374BBF0BE
-:102D2600E4A3F0907FB57403F0907627E075F00F7A
-:102D3600A4244BF582E43475F583E0FCA3E0FDA3FF
-:102D4600E0FEA3E0FF7B007A7779017800C31237B3
-:102D5600AB704F907F00F0A37477F0A37401F090EE
-:102D66007FB57403F022907FB4E04401F022907F97
-:102D7600E9E0247F701E907627E075F00FA4244FBB
-:102D8600F582E43475F583E0907F00F0907FB574AA
-:102D960001F08007907FB4E04401F0907FB4E044F6
-:032DA60001F02217
-:102DA900E4907636F0E0FF75F003A4240EF582E492
-:102DB9003475F5837401F0EF75F003A4240FF582DF
-:102DC900E43475F5837401F0EF75F003A42410F56C
-:102DD90082E43475F583E4F0907636E004F0E0FFA0
-:102DE90075F003A4240EF582E43475F5837410F0AC
-:102DF900EF75F003A4240FF582E43475F5837405A7
-:102E0900F0EF75F003A42410F582E43475F583E43A
-:102E1900F0907636E004F0E0FF75F003A4240EF597
-:102E290082E43475F5837402F0EF75F003A4240F7E
-:102E3900F582E43475F5837402F0EF75F003A42488
-:102E490010F582E43475F583E4F0907636E004F009
-:102E5900E0FF75F003A4240EF582E43475F583745C
-:102E690001F0EF75F003A4240FF582E43475F583BE
-:102E79007403F0EF75F003A42410F582E43475F5BA
-:102E890083E4F0907636E004F0E0FF75F003A424C3
-:102E99000EF582E43475F5837410F0EF75F003A430
-:102EA900240FF582E43475F5837406F0EF75F003A9
-:102EB900A42410F582E43475F583E4F0907636E0C5
-:102EC90004F0E0FF75F003A4240EF582E43475F5EF
-:102ED900837402F0EF75F003A4240FF582E43475CE
-:102EE900F5837404F0EF75F003A42410F582E4343B
-:102EF90075F583E4F0907636E004F0E0FF75F003B1
-:102F0900A4240EF582E43475F5837402F0EF75F0AC
-:102F190003A4240FF582E43475F5837408F0EF7582
-:102F2900F003A42410F582E43475F5837404F09059
-:102F39007636E004F0E0FF75F003A4240EF582E490
-:102F49003475F5837402F0EF75F003A4240FF5824C
-:102F5900E43475F583740AF0EF75F003A42410F5D1
-:102F690082E43475F5837404F0907636E004F0E079
-:102F7900FF75F003A4240EF582E43475F583740219
-:102F8900F0EF75F003A4240FF582E43475F583742A
-:102F990009F0EF75F003A42410F582E43475F58384
-:102FA9007404F0907636E004F0E0FF75F003A42491
-:102FB9000EF582E43475F5837402F0EF75F003A41D
-:102FC900240FF582E43475F5837407F0EF75F00387
-:0E2FD900A42410F582E43475F5837404F0220C
-:102FE700C0E0C083C082D2265391EF907FAB7401BB
-:082FF700F0D082D083D0E0325B
-:012FFF00329F
-:10300000907FB6E020E102C23DD236203602416E0A
-:10301000303D02416E908007E06004D2368002C2EB
-:1030200036203602412ED235E4F51A908004E0F5C0
-:10303000197408250EF8A619851918E51820E70453
-:10304000D2388002C23830380221D4E4F516E519AE
-:10305000B4F00CD2397508047509F0050E8002052C
-:1030600016E51964F7703DC239E50E24FE601714A9
-:103070006022240370297508057509F7E4F50AF53F
-:103080000B750E048020750806750AF7E4F50B75BC
-:103090000E048012750807750BF7750E0480071271
-:1030A0004DDA80020516E51954F864F8703BC23514
-:1030B000E5192407600C24FC6008240524F8500658
-:1030C0008008D23A8006C23A8002D23A751A0120AC
-:1030D0003A19907E80740FF0A3E519F0E4A3F0A3F1
-:1030E000F0907FB77404F08002051620396DE51961
-:1030F00064F76067E51A7063E51854F064F070597E
-:10310000851819F50EE519240F601B24FE6017249D
-:10311000FD602214601F2405702F750803050E85BD
-:103120001809D2378028750802050E85180975140C
-:1031300001D2378019750805050E851809E4F50ACE
-:10314000F50B750E03D2378005124DDAC2353035D6
-:103150000A85081385181280020516851819E516C8
-:1031600064047062F50EE51954F0F519F51585182B
-:1031700019E5152470601824F0601424F060102400
-:10318000F0601E24F0601A24F0600424607027E5CB
-:1031900015C4540FF519F508050E851809D23780A6
-:1031A0001AE515C4540FF519F508050E85180975AB
-:1031B0001401D2378005124DDAC23530350A85192F
-:1031C0001385181280020516E516D3940540571290
-:1031D0004DDA8052303917E50E700A8508097508F6
-:1031E00004050E80417408250EF8A6198038203792
-:1031F0002AE50EB4010F85080A85090B8513088599
-:103200001209750E04E514B4011C85080AE4F50BD7
-:10321000851308851209750E04800BE514B40106A8
-:10322000E4F50B750E04E4F51A303502050EE50ED3
-:10323000D394035002010BC237E4F50EF510C236E9
-:10324000D23DF51474082510F8E6FF74802510F5BA
-:1032500082E4347EF583EFF074082510F8E4F60577
-:0F32600010E510B404DE907FB77404F0010B2268
-:10326F00907618E0FF640570429075ABE0B40119D9
-:10327F009072377401F0E4908020F0908031F090DC
-:10328F008028F0908039F08022E4907237F09075AA
-:10329F00ADE090722BF0E02480F0E0908020F09071
-:1032AF008031F0908028F0908039F0EF6406600252
-:1032BF0081999072397404F0907239E0FF24FE9076
-:1032CF007204F0EF75F00AA424ABF582E43475F5BF
-:1032DF0083E06401705490723604F0907204E0FF42
-:1032EF0024FD602824FE6024240324FB5004601C6A
-:1032FF00818C74202FF582E43480F583E4F07428F8
-:10330F002FF582E43480F583E4F0818C907204E031
-:10331F00FF2430F582E43480F583E4F074382FF520
-:10332F0082E43480F583E4F0818CE4907236F0907F
-:10333F007239E075F00AA424ADF582E43475F58393
-:10334F00E0FF7E0090750CEEF0A3EFF07006907228
-:10335F0002743BF090750CE0FEA3E0FF64804E70AA
-:10336F0004907202F0EF4E70028135EF64804E7060
-:10337F00028135EFF8E490750DF0E890750CF09040
-:10338F007234E075F00AA424ACF582E43475F58349
-:10339F00E0FF907202F090750DE02FF090750CE049
-:1033AF003400F0E0FEA3E0FFE4FCFD7BD67AA5F944
-:1033BF00F8D3123795400A90750C74A5F0A374D604
-:1033CF00F090750DE0242AF090750CE0345AF0E07F
-:1033DF00FEA3E07805CEA2E713CE13D8F8FF9075C1
-:1033EF000CEEF0A3EFF090722CEEF0A3EFF0D3946D
-:1033FF00D2EE64809482400A90722C7402F0A3740F
-:10340F00D2F0C390722CE0648094805004E4F0A357
-:10341F00F090722CE0FEA3E0243AF582EE3472F5C0
-:10342F0083E0907202F0907204E0FF24FD602D247F
-:10343F00FE6029240324FB50046021804090720217
-:10344F00E0FE74202FF582E43480F583EEF07428CB
-:10345F002FF582E43480F583EEF08021907202E044
-:10346F00FF907204E0FE2430F582E43480F583EFA0
-:10347F00F074382EF582E43480F583EFF0907239D2
-:0B348F00E004F0E0640A600241C72284
-:10349A00907618E0FFB40523907237E0701D90759E
-:1034AA00ADE090722BF0E02480F0E0908020F09064
-:1034BA008031F0908028F0908039F0EF6406600245
-:1034CA00C191907236E06002C191907640E070310D
-:1034DA009072037403F0907203E0FF75F00AA4245B
-:1034EA00AAF582E43475F583E0FE907229E0FDEED8
-:1034FA006D600EEFC3940A5008907203E004F080E6
-:10350A00D59072397404F0907640E0700890720396
-:10351A00E0907239F0907239E0FD24FE90722AF040
-:10352A00ED75F00AA424ADF582E43475F583E0FF65
-:10353A007E0090750CEEF0A3EFF0700690720274A4
-:10354A0080F090750CE0FEA3E0FF64804E7004905A
-:10355A007202F0EF4E7002C11BEF64804E7002C11E
-:10356A001BEFF8E490750DF0E890750CF0ED75F02E
-:10357A000AA424ACF582E43475F583E0FF90720264
-:10358A00F090750DE02FF090750CE03400F0E0FE3D
-:10359A00A3E0FFE4FCFD7BD67AA5F9F8D3123795B0
-:1035AA00400A90750C74A5F0A374D6F090750DE0DE
-:1035BA00242AF090750CE0345AF0E0FEA3E0780576
-:1035CA00CEA2E713CE13D8F8FF90750CEEF0A3EF56
-:1035DA00F090722CEEF0A3EFF0D394D2EE648094C4
-:1035EA0082400A90722C7402F0A374D2F0C39072D3
-:1035FA002CE0648094805004E4F0A3F090722CE0F4
-:10360A00FEA3E0243AF582EE3472F583E09072026A
-:10361A00F090722AE0FF24FD602D24FE6029240325
-:10362A0024FB500460218040907202E0FE74202F37
-:10363A00F582E43480F583EEF074282FF582E434C1
-:10364A0080F583EEF08021907202E0FF90722AE00A
-:10365A00FE2430F582E43480F583EFF074382EF5D9
-:10366A0082E43480F583EFF0907640E07006907241
-:10367A0039740AF0907239E004F0E0C3940A5002F7
-:08368A00A111E4907640F0224A
-:10369200BB010689828A83E0225002E722BBFE0236
-:0936A200E32289828A83E4932269
-:1036AB00BB010CE58229F582E5833AF583E02250D4
-:1036BB0006E92582F8E622BBFE06E92582F8E2221E
-:0D36CB00E58229F582E5833AF583E4932238
-:1036D800C2D5EC30E709B2D5E4C39DFDE49CFCEE0D
-:1036E80030E715B2D5E4C39FFFE49EFE12381FC32E
-:1036F800E49DFDE49CFC800312381F30D507C3E429
-:063708009FFFE49EFE227B
-:10370E00BB0110E58229F582E5833AF583E0F5F0F9
-:10371E00A3E0225009E92582F886F008E622BBFED6
-:10372E000AE92582F8E2F5F008E222E5832AF5831C
-:08373E00E993F5F0A3E99322E1
-:10374600E88FF0A4CC8BF0A42CFCE98EF0A42CFC22
-:103756008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4A0
-:103766002DCC3825F0FDE98FF0A42CCD35F0FCEBFF
-:103776008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39C4
-:0F378600FEE43CFCEAA42DCE35F0FDE43CFC2231
-:10379500EB9FF5F0EA9E42F0E99D42F0EC6480C8AB
-:0637A50064809845F0224B
-:1037AB00EB9FF5F0EA9E42F0E99D42F0E89C45F074
-:0137BB0022EB
-:0C37BC00ECF0A3EDF0A3EEF0A3EFF02280
-:1037C800A8828583F0D083D0821237DF1237DF12C8
-:1037D80037DF1237DFE473E493A3C583C5F0C583ED
-:1037E800C8C582C8F0A3C583C5F0C583C8C582C84B
-:0137F80022AE
-:1037F900D083D082F8E4937012740193700DA3A35F
-:1038090093F8740193F5828883E473740293686072
-:06381900EFA3A3A380DF72
-:10381F00BC000BBE0029EF8DF084FFADF022E4CC8D
-:10382F00F875F008EF2FFFEE33FEEC33FCEE9DEC56
-:10383F00984005FCEE9DFE0FD5F0E9E4CEFD22ED9C
-:10384F00F8F5F0EE8420D21CFEADF075F008EF2FE6
-:10385F00FFED33FD4007985006D5F0F222C398FDD7
-:05386F000FD5F0EA2274
-:10387400E4907629F0907629E0FF75F00FA42442B5
-:10388400F582E43475F583E0FE907FECE0FDEE6DA7
-:10389400600EEFC394065008907629E004F080D5BA
-:1038A400EFB40608907FB4E04401F022EF75F00F06
-:1038B400A42441F582E43475F583E090762AF0245B
-:1038C400BF7002414124E070024112242160024190
-:1038D4003A907FE9E024FE607D14700221B2240254
-:1038E4006002410A121751907642E0FCA3E0FDA366
-:1038F400E0FEA3E0FF907629E075F00FA42443F5E1
-:1039040082E43475F5831237BC907619E0FFB40174
-:103914001290767C7467F090767D7406F090767ED3
-:10392400740BF0EFB4020FE490767CF090767DF0A7
-:1039340090767E740CF0EFB4030FE490767CF090F4
-:10394400767DF090767E7418F090761A7401F012F9
-:103954003E9F12180022907EC2E0FFE4FCFDFEFBB5
-:10396400FA7901F8123746C8ECC8C9EDC9CAEECADB
-:10397400CBEFCB907EC1E0FEE4FCFD2BFBEA3EFAEC
-:10398400ED39F9EC38F8907EC0E0FFE4FEEB2FFF50
-:10399400EE3AFEED39FDEC38FC907629E075F00F37
-:1039A400A42447F582E43475F5831237BC22907E53
-:1039B400C2E0FFE4FCFDFEFBFA7901F8123746C8C9
-:1039C400ECC8C9EDC9CAEECACBEFCB907EC1E0FE0C
-:1039D400E4FCFD2BFBEA3EFAED39F9EC38F8907E75
-:1039E400C0E0FFE4FEEB2FFFEE3AFEED39FDEC38CC
-:1039F400FC907629E075F00FA4244BF582E434752D
-:103A0400F5831237BC22907FB4E04401F022907F0A
-:103A1400E9E0147019907EC0E0FF907629E075F01B
-:103A24000FA4244FF582E43475F583EFF022907FE0
-:0E3A3400B4E04401F022907FB4E04401F0229F
-:103A4200E4907635F0907635E0FFC394034002416E
-:103A5200FFEF75F00AA424AAF582E43475F583EF2A
-:103A6200F0EF75F00AA424ABF582E43475F583E433
-:103A7200F0EF75F00AA424ACF582E43475F5837492
-:103A8200F0F0EF75F00AA424ADF582E43475F58305
-:103A920074FFF0EF75F00AA424AEF582E43475F5F4
-:103AA20083E4F0EF75F00AA424AFF582E43475F5EF
-:103AB200837480F0EF75F00AA424B0F582E43475C3
-:103AC200F583E4F0EF75F00AA424B1F582E43475CD
-:103AD200F583E4F0EF75F00AA424B2F582E43475BC
-:103AE200F583E4F0EF75F00AA424B3F582E43475AB
-:103AF200F5837401F0907635E004F0414790763C0E
-:103B0200740AF0E4A3F09076357403F090763CE00A
-:103B1200FF907635E0FEC39F400261D290763DE091
-:103B2200FF04F0EE75F00AA424AAF582E43475F5D8
-:103B320083EFF0EE75F00AA424ABF582E43475F558
-:103B420083E4F0EE75F00AA424ACF582E43475F552
-:103B520083745EF0EE75F00AA424ADF582E4347548
-:103B6200F58374BAF0EE75F00AA424AEF582E4345B
-:103B720075F5837405F0EE75F00AA424AFF582E4BE
-:103B82003475F5837480F0EE75F00AA424B0F582E2
-:103B9200E43475F583E4F0EE75F00AA424B1F582FD
-:103BA200E43475F583E4F0EE75F00AA424B2F582EC
-:103BB200E43475F5837415F0EE75F00AA424B3F5B8
-:103BC20082E43475F583E4F0907635E004F0610E1A
-:013BD20022D0
-:103BD300E4907636F0E0FB75F00FA42441F582E41F
-:103BE3003475F5837440F0EB75F00FA42442F5822D
-:103BF300E43475F583740AF0EB75F00FA42443F5F0
-:103C030082E43475F5831237C80000AC44EB75F0D9
-:103C13000FA42447F582E43475F5831237C80000F6
-:103C2300AC44EB75F00FA4244BF582E43475F583B3
-:103C33001237C800017700907636E004F0E0FB7598
-:103C4300F00FA42441F582E43475F5837440F0EB5E
-:103C530075F00FA42442F582E43475F583748CF077
-:103C6300EB75F00FA42443F582E43475F583123722
-:103C7300C80000AC44EB75F00FA42447F582E4348C
-:103C830075F5831237C80000AC44EB75F00FA4241C
-:103C93004BF582E43475F5831237C8000177009041
-:103CA3007636E004F0E0FF75F00FA42441F582E4DA
-:103CB3003475F5837440F0EF75F00FA42442F58258
-:103CC300E43475F583748FF0907636E004F0E0FF0A
-:103CD30075F00FA42441F582E43475F5837441F043
-:103CE300EF75F00FA42442F582E43475F5837484F0
-:103CF300F0907636E004F0E0FF75F00FA42441F570
-:103D030082E43475F5837461F0EF75F00FA42442F7
-:103D1300F582E43475F5837481F0907636E004F02F
-:103D2300E0FF75F00FA42441F582E43475F5837444
-:103D330061F0EF75F00FA42442F582E43475F58346
-:043D43007401F022F5
-:103D4700C0E0C0F0C083C082C0D0E8C0E0E9C0E0F6
-:103D5700EAC0E0EBC0E0ECC0E0EDC0E0EEC0E0EFB1
-:103D6700C0E0907FA2E090767FF0907F74E090763D
-:103D770087F0907F75E0907688F0907F98E0440216
-:103D8700F0907696E0FF20E10C4402F0908003F07B
-:103D9700D232124B2890767FE020E250907687E06F
-:103DA700FEA3E07C002400F534EC3EF533907698D2
-:103DB700E0FDAE33AF341236D8907687EFF0D22FCE
-:103DC700303129203F26C231907F94E054CFF090C4
-:103DD7007F9AE030E404D22DC22C907F9AE020E550
-:103DE70004C22DD22C907F94E04430F01248BD12CB
-:103DF7001B04302F1212421FC22F75E80112168AB8
-:103E070075E80DD22B800575E801C22B202B349065
-:103E17007619E0FFB4010E90767C7467F0A3740600
-:103E2700F0A3740BF0EFB4020B90767CE4F0A3F0F0
-:103E3700A3740CF0EFB4030B90767CE4F0A3F0A32B
-:103E47007418F075CAD375CBFED2CA303404C234A5
-:103E57008002D23430340D907689E0C39403400455
-:103E6700E024FDF05391EF907FAB7402F0F0907F68
-:103E770098E054FDF0D0E0FFD0E0FED0E0FDD0E0C8
-:103E8700FCD0E0FBD0E0FAD0E0F9D0E0F8D0D0D019
-:083E970082D083D0F0D0E032AC
-:103E9F00907692E014601D147002E15424026002C7
-:103EAF00E1E49076947401F0908000F0E490768EC7
-:103EBF00F0D23122907619E0FFB4011BE4907FF22B
-:103ECF00F0907FF37430F0907FFF74FCF090769752
-:103EDF00E054FDF054FBF0EFB4021BE4907FF2F0DE
-:103EEF00907FF37434F0907FFF74FCF0907697E03E
-:103EFF004402F054FBF0EFB40318E4907FF2F0901B
-:103F0F007FF37464F0907FFF74FCF0907697E04439
-:103F1F0004F0907694E04401F0908000F0303F0977
-:103F2F00907697E054FEF08007907697E04401F08A
-:103F3F00907697E0908002F09076987404F09076E7
-:103F4F008E7401F022907619E0FFB4011BE4907F8C
-:103F5F00F2F0907FF37444F0907FFF74FCF0907652
-:103F6F0097E054FDF054FBF0EFB4021BE4907FF2A6
-:103F7F00F0907FF3744CF0907FFF74FCF090769785
-:103F8F00E04402F054FBF0EFB40318E4907FF2F03A
-:103F9F00907FF37494F0907FFF74FCF0907697E02D
-:103FAF004404F0907694E054FEF0908000F0303F9F
-:103FBF0009907697E054FEF08007907697E04401E1
-:103FCF00F0907697E0908002F09076987406F090DB
-:063FDF00768E7402F02250
-:103FE500907FEAE0907682F0E4907691F090769278
-:0B3FF500F0907690F0907693F0D322CD
-:10400000E511D3940050022106907689E0C394080C
-:10401000400221067440250FF582E4347EF583E0EA
-:10402000F517E50D600E908005E517F0907689E0B4
-:1040300004F001DAE5171237F940C1024067054084
-:104040007A0640980740C10C40C10D40C70F40CBD5
-:10405000F640CBF840CBFA40CBFB40CBFC40CBFE4C
-:1040600040CBFF000040DA907E41E0908005F09068
-:104070007689E004F07511018060907E41E09080C7
-:1040800005F0907E42E0908005F0907689E004F0A3
-:10409000E004F07511018042907E41E0908005F0CF
-:1040A000907E42E0908005F0907E43E0908005F0A5
-:1040B000907689E004F0E004F0E004F075110180EE
-:1040C00019D23BD23C8013D23B800F908005E5177C
-:1040D000F0907689E004F0751101203B04050D8015
-:1040E0001F303C1C907E41E0908005F0907E42E0C5
-:1040F000908005F0907689E004F0E004F0751101FD
-:10410000050F15110100E5117010C233F50DF50F03
-:0B411000907FC77404F0C23BC23C2249
-:10411B0090768DE064017027302708C227120800C3
-:10412B0012174A302808C22812387412174A302A3C
-:10413B000EE490768DF0C22A907FB4E04402F090AA
-:10414B00763FE0B40105E4F012326F907641E0B4B3
-:10415B000105E4F012349A907640E0B40103123476
-:10416B009A123000303303124000907F9BE020E422
-:10417B0002C23F907F9BE030E402D23F907F9BE0F6
-:10418B0020E502C23E907F9BE030E502D23EA24189
-:10419B00303F01B3501FA23F9241303F09907697B9
-:1041AB00E054FEF08007907697E04401F09076970C
-:1041BB00E0908002F0303F34907619E0FFB4010EAE
-:1041CB0090767C7467F0A37406F0A3740BF0EFB4D5
-:1041DB00020BE490767CF0A3F0A3740CF0EFB40325
-:1041EB000BE490767CF0A3F0A37418F0A240303E61
-:1041FB0001B3501FA23E9240303E09907695E044A9
-:10420B0004F08007907695E054FBF0907695E09063
-:04421B008001F0220C
-:10421F00907619E064017035907687E0FFD3942D86
-:10422F00402B9076867401F0907685E004F0E0D311
-:10423F00940F4019E4F0EFD394314008907619743D
-:10424F0003F080069076197402F0123E9F90761953
-:10425F00E0B4022C907687E0FFC3942F5022EFD367
-:10426F00942A401C9076867401F0907685E004F0D5
-:10427F00E0D3940F400AE4F090761904F0123E9FB9
-:10428F00907619E0B40226907687E0D39431401DE2
-:10429F009076867401F0907685E004F0E0D3940F69
-:1042AF00400BE4F09076197403F0123E9F9076194C
-:1042BF00E06403703F907687E0FFC3945F503590C2
-:1042CF0076867401F0907685E004F0E0D3940F4089
-:1042DF0023E4F0EFC3942F500CEFD3942A400690B1
-:1042EF0076197401F0EFD3942F400690761974026B
-:1042FF00F0123E9F907686E07005907685F022E46E
-:05430F00907686F0220B
-:10431400E4907696F0908003F0907FE07490F090B3
-:104324007FE17404F0E4907FDDF0907FA1F0538E80
-:10433400F875880575B82075F801438E30F5C87591
-:10434400CA7F75CBF843A820124565C22CC22DC282
-:104354002BC22F907FFC74DDF0907FFF74FFF090F0
-:104364007F97E04401F09076197401F0E49076852B
-:10437400F0A3F0907681F0907680F01249AE120F9F
-:10438400C6124AF1907F97E04408F0E054B9F0D2A5
-:1043940030203018124AA612300012400012421F78
-:1043A4001248BD121B0412166112421F124AA6C201
-:1043B4002FC231C232C234C233C229C227C228E456
-:1043C400F511907689F090763FF0907641F09076F2
-:1043D40040F090768AF0A3F0A304F0E4A3F0907682
-:0343E40099F0222B
-:1043E700124E19400281AC907FEBE024FE601E1450
-:1043F700604614606E147002819D2404600281A5DA
-:104407007405907FD4F07400907FD5F022907FEAF6
-:10441700E0FF124A558B208A218922EA496011CE92
-:10442700EACEEE907FD4F0CFE9CFEF907FD5F022A0
-:10443700907FB4E04401F022907FEAE0FF1247B793
-:104447008B208A218922EA496011CEEACEEE907F3D
-:10445700D4F0CFE9CFEF907FD5F022907FB4E0443E
-:1044670001F022907FEAE0FF907EC0E0FDA3E0FB31
-:104477001217948B208A218922EA496011CEEACE4D
-:10448700EE907FD4F0CFE9CFEF907FD5F022907FE9
-:10449700B4E04401F022907FB4E04401F022907F21
-:0544A700B4E04401F047
-:0144AC0022ED
-:1044AD00C2AFD224907F937430F0907F9C74BBF098
-:1044BD00907F96E04430F0E05430F0907F9474306B
-:1044CD00F0907F9D74CFF0907F9774A0F0907F95C2
-:1044DD0074C0F0907F9E7403F0907F99E030E209F4
-:1044ED0090051974A0F0E4A3F0C225C222C223C224
-:1044FD0026124B28122DA9123BD3124619123A42FD
-:10450D009076687401F0700F124C29124E15124EF0
-:10451D0017121B40121496124314907FAFE0440102
-:10452D00F0907FAEE0441FF0907FAC74FFF0907F71
-:10453D00ADF0907FDEF0907FDFF0907FABF0907F5D
-:10454D00A9F0907FAAF05391EF43D820D2E843D839
-:08455D002053A8A043A880220E
-:1045650090769A7402F0E4907691F0A3F0907690AC
-:10457500F0907693F09076967403F0908003F0E4D3
-:10458500907697F0908002F090769404F0908000F9
-:10459500F0E490768EF090761AF090769504F0C25D
-:1045A5002E907F9BE0FF5410FF7002C23F907F9BCF
-:1045B500E0FF5410FEFFBE1002D23F907F9BE0FF4C
-:1045C5005420FF7002C23E907F9BE0FF5420FEFF07
-:1045D500BE2002D23E303F09907697E054FEF0802F
-:1045E50007907697E04401F0907697E0908002F08E
-:1045F500303E09907695E04404F08007907695E08A
-:1046050054FBF0907695E0908001F0A23E9240A296
-:034615003F924190
-:01461800227F
-:10461900E4907636F0E0FF75F003A42432F582E4E5
-:104629003475F583E4F0EF75F003A42433F582E4DF
-:104639003475F5837401F0907636E004F0E0FF7587
-:10464900F003A42432F582E43475F583E4F0EF75C0
-:10465900F003A42433F582E43475F5837402F090F1
-:104669007636E004F0E0FF75F003A42432F582E425
-:104679003475F583E4F0EF75F003A42433F582E48F
-:104689003475F5837403F0907636E004F0E0FF7535
-:10469900F003A42432F582E43475F583E4F0EF7570
-:1046A900F003A42433F582E43475F5837404F0220D
-:0C46B900787FE4F6D8FD758138024700D8
-:1046C5000207A6E493A3F8E493A34003F68001F25E
-:1046D50008DFF48029E493A3F85407240CC8C333F6
-:1046E500C4540F4420C8834004F456800146F6DFC5
-:1046F500E4800B0102040810204080900C8FE47EBA
-:10470500019360BCA3FF543F30E509541FFEE493B9
-:10471500A360010ECF54C025E060A840B8E493A380
-:10472500FAE493A3F8E493A3C8C582C8CAC583CAAB
-:10473500F0A3C8C582C8CAC583CADFE9DEE780BE63
-:10474500907FECE0907683F0E014601D14602A14ED
-:10475500603714604424047050907691E0907F0097
-:10476500F0907FB57401F08047907692E0907F00DD
-:10477500F0907FB57401F08037907690E0907F00DF
-:10478500F0907FB57401F08027907684E0907F00EB
-:10479500F0907FB57401F08017907693E0907F00DC
-:1047A500F0907FB57401F08007907FB4E04401F08C
-:0247B500D3220D
-:0247B7008F2E43
-:1047B900E4F52F7530FF75310775321AAB30AA3120
-:1047C900A9329000011236ABB4031FAF2F052FEFAA
-:1047D900652E7001221236927E0029FFEE3AC9EF4A
-:1047E900C97530FFF531893280D27B007A007900B2
-:0147F900229D
-:0647FA00124B28C231221F
-:10480000C0E0C0F0C083C082C0D0E8C0E0E9C0E032
-:10481000EAC0E0EBC0E0ECC0E0EDC0E0EEC0E0EFED
-:10482000C0E0C2CAC2CF907F98E04401F0302E03AE
-:104830001214A6907F98E054FEF053A8FA12166165
-:10484000D0E0FFD0E0FED0E0FDD0E0FCD0E0FBD037
-:10485000E0FAD0E0F9D0E0F8D0D0D082D083D0F028
-:03486000D0E03273
-:10486300907FECE0907683F0E014601714602114DD
-:10487300602B14603224047038907FEAE0907691C4
-:10488300F08035907FEAE0907692F0123E9F802888
-:10489300907FEAE0907690F0121800801B907FEAF8
-:1048A300E0907684F08011907FEAE0907693F08038
-:0A48B30007907FB4E04401F0D32227
-:1048BD00302D39C22D907619E0FFB4010DE49076BC
-:1048CD007CF0A374F8F0A3740AF0EFB4020DE49039
-:1048DD00767CF0A374F0F0A3740BF0EFB4030DE449
-:0D48ED0090767CF0A374F8F0A37417F0220D
-:0648FA005391BFD22D32E4
-:10490000022FE700023D4700024DB400024C430075
-:10491000024BE900022FFF00024C5B00024C0A0030
-:10492000024C7200024B5A00024C8900024CA0005B
-:10493000024CB700024CCE00024CE500024CFC00D9
-:10494000024D1300024D2A00024D4100024D580055
-:08495000024D6F00024D8600CC
-:10495800E4907626F0907626E0FF75F003A42434E0
-:10496800F582E43475F583E0FE907FECE0FDEE6DB2
-:10497800600EEFC394045008907626E004F080D5CA
-:10498800EFB40408907FB4E04401F022EF75F0031F
-:10499800A42432F582E43475F583E0907F00F0902A
-:0649A8007FB57401F0224E
-:1049AE009076467480F0E4A3F0A3F0A3F0A3F0A3F6
-:1049BE00F0A3F0A3F0A3F0A37480F0E4A3F0A3F0AF
-:1049CE00A3F0A3F0A3F0A3F0A37440F0E4A3F0A32C
-:1049DE007440F0E4A3F0A3F0A3F0A3F0A3F0A3F0CF
-:1049EE00A37440F0E4A3F0A37440F0E4A3F0A3F0AA
-:0549FE00A3F0A3F0226C
-:104A0300E4907625F0907625E0FF75F003A4243436
-:104A1300F582E43475F583E0FE907FECE0FDEE6D06
-:104A2300600EEFC394045008907625E004F080D51F
-:104A3300EFB40408907FB4E04401F022907EC0E01C
-:104A4300FEEF75F003A42432F582E43475F583EEAA
-:024A5300F0224F
-:104A5500E4FE751DFF751E05751F12AB1DAA1EA967
-:104A65001F9000011236AB6402702FCDEECD0EED16
-:104A75006F70012290000212370E85F01BF51C6243
-:104A85001BE51B621CE51C621B29FDE51B3AC9EDF4
-:104A9500C9751DFFF51E891F80C17B007A0079004D
-:014AA50022EE
-:104AA600E490769BF090769BE0FF04F0EF6008E0E0
-:104AB6002408F8E4F680EE907696E04404F0440884
-:104AC600F0908003F0E4F518D235F50EF510D236E5
-:104AD600751211751322C237C239C238F516F5148C
-:0B4AE600F51AF50DC23BC23CC23D2298
-:104AF100E4FF74562FF582E43476F583E0FE7428E2
-:104B01002FF582E43480F583EEF0745E2FF582E4B4
-:104B11003476F583E0FE74382FF582E43480F58332
-:064B2100EEF00FBF08CC0E
-:014B2700226B
-:104B2800E4907236F0A3F0907F97E054FBF0E490A5
-:104B38007233F0907232F090720104F0E4907233A4
-:104B4800F0907232F090720104F0907F97E0440484
-:024B5800F02249
-:104B5A00C0E0C083C0825391EF907FAAE04402F084
-:104B6A00907FC7E0F511750F00750D00D233D08222
-:054B7A00D083D0E03201
-:104B7F00907FD6E054FBF0E04408F0304204E0446C
-:104B8F0002F07FDC7E05124D9D907FD6E054F7F04A
-:054B9F00E04404F022D7
-:104BA400907FEBE0147014907FE9E0247F7004128E
-:104BB400495822907FB4E04401F022907FB4E0444D
-:034BC40001F022DB
-:104BC700907FEBE0147013907FE9E0147004124AB1
-:104BD7000322907FB4E04401F022907FB4E04401C7
-:024BE700F022BA
-:104BE900C0E0C083C0825391EF907FAB7410F09006
-:104BF9007696E054FDF0908003F0D082D083D0E027
-:014C09003278
-:104C0A00C0E0C083C0825391EF907FAAE04401F0D4
-:0F4C1A00C22990768D7401F0D082D083D0E03221
-:104C2900907FD6E030E712E04401F07F147E001255
-:0A4C39004D9D907FD6E054FEF0225E
-:104C4300C0E0C083C082D2255391EF907FAB74083C
-:084C5300F0D082D083D0E032E2
-:104C5B00C0E0C083C0825391EF907FA9E04401F084
-:074C6B00D082D083D0E032BB
-:104C7200C0E0C083C0825391EF907FA9E04402F06C
-:074C8200D082D083D0E032A4
-:104C8900C0E0C083C0825391EF907FA9E04404F053
-:074C9900D082D083D0E0328D
-:104CA000C0E0C083C0825391EF907FAAE04404F03B
-:074CB000D082D083D0E03276
-:104CB700C0E0C083C0825391EF907FA9E04408F021
-:074CC700D082D083D0E0325F
-:104CCE00C0E0C083C0825391EF907FAAE04408F009
-:074CDE00D082D083D0E03248
-:104CE500C0E0C083C0825391EF907FA9E04410F0EB
-:074CF500D082D083D0E03231
-:104CFC00C0E0C083C0825391EF907FAAE04410F0D3
-:074D0C00D082D083D0E03219
-:104D1300C0E0C083C0825391EF907FA9E04420F0AC
-:074D2300D082D083D0E03202
-:104D2A00C0E0C083C0825391EF907FAAE04420F094
-:074D3A00D082D083D0E032EB
-:104D4100C0E0C083C0825391EF907FA9E04440F05E
-:074D5100D082D083D0E032D4
-:104D5800C0E0C083C0825391EF907FAAE04440F046
-:074D6800D082D083D0E032BD
-:104D6F00C0E0C083C0825391EF907FA9E04480F0F0
-:074D7F00D082D083D0E032A6
-:104D8600C0E0C083C0825391EF907FAAE04480F0D8
-:074D9600D082D083D0E0328F
-:104D9D008E358F36E5361536AE35700215354E60CB
-:074DAD000512148580EE22BF
-:104DB400C0E0C083C0825391EF907FAB7404F0D005
-:064DC40082D083D0E03232
-:104DCA00907682E0907F00F0907FB57401F0D32254
-:0C4DDA00C237E4F50EF510C236F51422C5
-:094DE600C22553D8EF43D8203256
-:074DEF005398FE5398FD32BA
-:074DF60053C0FE53C0FD3263
-:064DFD0053917FD22C321D
-:044E03005391DF32B6
-:044E070053D8F73253
-:044E0B001217302228
-:034E0F00C28D321F
-:034E1200C28F321A
-:024E1500D322A6
-:024E1700D322A4
-:024E1900D322A2
-:024E1B00D322A0
-:024E1D00D3229E
-:024E1F00D3229C
-:024E2100C322AA
-:00000001FF
-/*
-Source: EMI62MFW.HEX
-VERSION=1.04.062
-DATE=16.10.2002
-*/
diff --git a/firmware/emi62/spdif.HEX b/firmware/emi62/spdif.HEX
deleted file mode 100644
index 322d50c9cf4d..000000000000
--- a/firmware/emi62/spdif.HEX
+++ /dev/null
@@ -1,1257 +0,0 @@
-:030000000245F9BD
-:03000300020FFDEC
-:03000B00024D9B08
-:030013000217FDD4
-:03001B00024D9EF5
-:03002300024D7516
-:03002B000246F793
-:03003300024D6C0F
-:03003B00024D7CF7
-:030043000249006F
-:03004B00024D8FD4
-:03005300024D83D8
-:03005B00024D89CA
-:03006300024D93B8
-:1005000012011001000000406A08110100010102FF
-:1005100000010902AC01030100803209040000005F
-:10052000010100000A2401000156000201020C240E
-:10053000020101010002000000000D240605010275
-:10054000030000000000000924030204030005006A
-:100550000C24020305020006000000001524060614
-:100560000302000003000300030003000300030074
-:100570000009240304010100060009040100000130
-:100580000200000904010102010200000724010128
-:10059000000100112402010202100344AC0080BBE0
-:1005A0000000770109050A05840101008F07250174
-:1005B0000100000009058F01030001050009040185
-:1005C00002020102000007240101000100112402BF
-:1005D000010203180344AC0080BB00007701090549
-:1005E0000A05460201008F072501010000000905E8
-:1005F0008F01030001050009040200000102000050
-:1006000009040201010102000007240104000100A5
-:100610000E2402010602100244AC0080BB00090552
-:100620008C054C02010000072501000200000904AE
-:1006300002020101020000072401040001000E244F
-:1006400002010603180244AC0080BB0009058C05BA
-:1006500072030100000725010002000009040203E3
-:10066000010102000007240104000100112402011D
-:100670000202100344AC0080BB0000770109058C26
-:1006800005840101000007250100020000090402A1
-:1006900004010102000007240104000100112402EA
-:1006A000010203180344AC0080BB00007701090578
-:1006B0008C0546020100000725010002000004032A
-:1006C0000904180345006D006100670069006300BC
-:1006D000200047006D0062004800220345006D00C5
-:1006E0006100670069006300200045004D0049007B
-:1006F000200036007C00320020006D002A034300F9
-:100700006F006E006600690067007500720061008E
-:10071000740069006F006E002000530074007200C6
-:1007200069006E006700220349006E0074006500D6
-:1007300072006600610063006500200053007400D1
-:0A074000720069006E0067000000FF
-:10074A0090769A7402F0E4907691F0A3F090769005
-:10075A00F0907693F09076967403F0908003F0E42C
-:10076A00907697F0908002F090769404F090800052
-:10077A00F0E490768EF090761AF090769504F0C2B6
-:10078A002E907F9BE0FF5410FF7002C23F907F9B28
-:10079A00E0FF5410FEFFBE1002D23F907F9BE0FFA5
-:1007AA005420FF7002C23E907F9BE0FF5420FEFF60
-:1007BA00BE2002D23E303F09907697E054FEF08088
-:1007CA0007907697E04401F0907697E0908002F0E7
-:1007DA00303E09907695E04404F08007907695E0E3
-:1007EA0054FBF0907695E0908001F0A23E9240A2F0
-:0307FA003F9241EA
-:0107FD0022D9
-:0207FE00D32204
-:10080000E4907631F0907631E0FF75F003A4240F88
-:10081000F582E43475F583E0FE907FEDE0FDEE6D4A
-:10082000600EEFC3940B5008907631E004F080D551
-:10083000EFB40B08907FB4E04401F022EF75F003B1
-:10084000A4240EF582E43475F583E0907633F02429
-:10085000F0600A240E60028187124B3E22907FEDE9
-:10086000E0640570519076187405F0907637740145
-:10087000F09076397403F0907621F0E4907620F0D1
-:10088000907FEAE0F4602F907620E0FF75F00AA4F4
-:1008900024AAF582E43475F583E0FE907FEAE0FD5A
-:1008A000EE6D6012907621E0FEEFC39E50089076C8
-:1008B00020E004F080D1907FEDE0640670529076E5
-:1008C000187406F09076377404F0907639740AF054
-:1008D000907621F09076207403F0907FEAE0F46047
-:1008E0002F907620E0FF75F00AA424AAF582E43464
-:1008F00075F583E0FE907FEAE0FDEE6D6012907684
-:1009000021E0FEEFC39E5008907620E004F080D1F5
-:10091000907620E0FF75F00AA424AAF582E43475ED
-:10092000F583E0907229F0E490763BF0907621E038
-:10093000FEEF6E7008907FB4E04401F022907FEBF0
-:10094000E014601314700221E224026002817F909F
-:100950007FB4E04401F022907FE9E014707C907F46
-:10096000EAE0F47048907637E0907620F09076399F
-:10097000E0FE907620E0FDC39E502B90763BE0FE9B
-:1009800004F074C02EF582E4347EF583E0FEED754C
-:10099000F00AA424ABF582E43475F583EEF090768A
-:1009A00020E004F080C790763F7401F022907EC072
-:1009B000E0FEEF75F00AA424ABF582E43475F5830C
-:1009C000EEF0E0B4010890763E7401F08005E4900A
-:1009D000763EF090763F7401F022907FB4E04401BF
-:1009E000F022907FE9E024FE700241A314700261BE
-:1009F0003F14700261DB240360028177907FEAE09C
-:100A0000F4706B907637E0907620F0907639E0FFC6
-:100A1000907620E0FEC39F504E90763BE0FF04F0BE
-:100A200074C02FF582E4347EF583E0FFEE75F00AA2
-:100A3000A424ACF582E43475F583EFF090763BE0C6
-:100A4000FF04F074C02FF582E4347EF583E0FFEEFE
-:100A500075F00AA424ADF582E43475F583EFF090C7
-:100A60007620E004F080A49076407401F022907E1D
-:100A7000C0E0FF907620E0FE75F00AA424ACF58279
-:100A8000E43475F583EFF0907EC1E0FFEE75F00A77
-:100A9000A424ADF582E43475F583EFF090764174CB
-:100AA00001F022907FEAE0F47066907637E090766D
-:100AB00020F0907639E0FF907620E0FEC39F400260
-:100AC000818E90763BE0FF04F074C02FF582E43411
-:100AD0007EF583E0FFEE75F00AA424AEF582E434DF
-:100AE00075F583EFF090763BE0FF04F074C02FF5CE
-:100AF00082E4347EF583E0FFEE75F00AA424AFF5BE
-:100B000082E43475F583EFF0907620E004F080A263
-:100B1000907EC0E0FF907620E0FE75F00AA424AE3F
-:100B2000F582E43475F583EFF0907EC1E0FFEE7559
-:100B3000F00AA424AFF582E43475F583EFF0229037
-:100B40007FEAE0F47066907637E0907620F0907659
-:100B500039E0FF907620E0FEC39F4002818E9076C0
-:100B60003BE0FF04F074C02FF582E4347EF583E0AF
-:100B7000FFEE75F00AA424B0F582E43475F583EF36
-:100B8000F090763BE0FF04F074C02FF582E4347EF1
-:100B9000F583E0FFEE75F00AA424B1F582E4347524
-:100BA000F583EFF0907620E004F080A2907EC0E024
-:100BB000FF907620E0FE75F00AA424B0F582E434BC
-:100BC00075F583EFF0907EC1E0FFEE75F00AA42486
-:100BD000B1F582E43475F583EFF022907FEAE0F41A
-:100BE0007066907637E0907620F0907639E0FF904E
-:100BF0007620E0FEC39F4002818E90763BE0FF04AA
-:100C0000F074C02FF582E4347EF583E0FFEE75F0DA
-:100C10000AA424B2F582E43475F583EFF090763BB4
-:100C2000E0FF04F074C02FF582E4347EF583E0FF2A
-:100C3000EE75F00AA424B3F582E43475F583EFF081
-:100C4000907620E004F080A2907EC0E0FF907620B5
-:100C5000E0FE75F00AA424B2F582E43475F583EF62
-:100C6000F0907EC1E0FFEE75F00AA424B3F582E4B3
-:100C70003475F583EFF022907FB4E04401F02290C8
-:0F0C80007FB4E04401F022907FB4E04401F02201
-:100C8F004176680141766A0241766B0AC120C12123
-:020C9F00C12F63
-:040CA1004176230075
-:100CA500417201014572050002C9000045720A0042
-:100CB500010203044D720FD100D1000000000000B5
-:100CC500282809004D721C010001020304050607CE
-:100CD50008090A0B41722E2241722F2341723020DE
-:100CE5004172312162D2723A00000000000000001A
-:100CF50000000000000000000000000000000000EF
-:100D050000000000000000000000000000000000DE
-:100D150000000000000000000000000000000000CE
-:100D250000000000000000000000000000000000BE
-:100D350000000000000000000000000000000000AE
-:100D4500000000000000000000000000000000009E
-:100D5500000000000000000000000000000000008E
-:100D6500000000000000000000000000000000007E
-:100D75000000000000000000000001010101010168
-:100D8500010101010101010101010101010101014E
-:100D9500010101010101010101010101010101013E
-:100DA500010101010101010101010101010101012E
-:100DB5000101010101010101020202020202020216
-:100DC50002020202020202020202020202020202FE
-:100DD50002020202020202020202020202020202EE
-:100DE50002020202020202020202020202020202DE
-:100DF50002020202020303030303030303030303C3
-:100E050003030303030303030303030303030303AD
-:100E1500030303030303030303030303030303039D
-:100E2500030303030303030303030303030303038D
-:100E3500030304040404040404040404040404046F
-:100E4500040404040404040404040404040404045D
-:100E5500040404040404040404040404040404044D
-:100E6500040404040404040404040404040404043D
-:100E7500050505050505050505050505050505051D
-:100E8500050505050505050505050505050505050D
-:100E950005050505050505050505050505050505FD
-:100EA50005050505050505050505050505050606EB
-:100EB50006060606060606060606060606060606CD
-:100EC50006060606060606060606060606060606BD
-:100ED50006060606060606060606060606060606AD
-:100EE5000606060606060606060606070707080896
-:100EF500080909090A0A0A0B0B0B0C0C0C0D0D0D40
-:100F05000E0E0E0F0F0F10101011111112121213D9
-:100F15001313141414151515161616171717181874
-:100F250018191919191A1A1A1A1B1B1B1B1C1C1C18
-:100F35001C1D1D1D1D1E1E1E1E1F1F1F1F202020C8
-:100F45002121212222222323242425252626272761
-:100F5500282829292A2A2B2B2C2C2D2D2E2E2F2FD4
-:100F65003030313132323333343435353636373744
-:100F7500383839393A3A3B3C3D3E3F40414243449B
-:100F85004546474849494A4B4B4C4D4E4F505152A7
-:100F95005354555556565757585A5B5D5E5F6162B7
-:100FA500636465666768696A6B6C6D6F717273748B
-:100FB50075767778797A7B7C7E80013701013800F8
-:010FC500002B
-:100FC600E4FF74462FF582E43476F583E0FE742060
-:100FD6002FF582E43480F583EEF0744E2FF582E42B
-:100FE6003476F583E0FE74302FF582E43480F583A1
-:060FF600EEF00FBF08CC75
-:010FFC0022D2
-:030FFD00C2893274
-:10100000E490762CF090762CE0FF75F003A4240F8A
-:10101000F582E43475F583E0FE907FEDE0FDEE6D42
-:10102000600EEFC3940B500890762CE004F080D54E
-:10103000EFB40B08907FB4E04401F022EF75F003A9
-:10104000A4240EF582E43475F583E090762EF02426
-:10105000F0600A240F6002817D124B1B22907FED0D
-:10106000E0640570519076187405F090763874013C
-:10107000F090763A7403F090761CF0E490761BF0D2
-:10108000907FEAE0F4602F90761BE0FF75F00AA4F1
-:1010900024AAF582E43475F583E0FE907FEAE0FD52
-:1010A000EE6D601290761CE0FEEFC39E50089076C5
-:1010B0001BE004F080D1907FEDE0640670529076E2
-:1010C000187406F09076387404F090763A740AF04A
-:1010D00090761CF090761B7403F0907FEAE0F46049
-:1010E0002F90761BE0FF75F00AA424AAF582E43461
-:1010F00075F583E0FE907FEAE0FDEE6D601290767C
-:101100001CE0FEEFC39E500890761BE004F080D1F7
-:10111000E490761EF090761CE0FF90761BE0FE6F68
-:101120007008907FB4E04401F022907FEBE01460FF
-:101130001314700221BF240260028175907FB4E015
-:101140004401F022907FE9E0247F706B907FEAE019
-:10115000F4704A907638E090761BF090763AE0FF93
-:1011600090761BE0FDC39F502BED75F00AA424ABD5
-:10117000F582E43475F583E0FF90761EE0FD04F01F
-:1011800074002DF582E4347FF583EFF090761BE058
-:1011900004F080C790761EE0907FB5F022EE75F0E7
-:1011A0000AA424ABF582E43475F583E0907F00F067
-:1011B000907FB57401F022907FB4E04401F022905A
-:1011C0007FE9E0247E7002417E1470026123147076
-:1011D0000261C824036002816D907FEAE0F4706DC3
-:1011E000907638E090761BF090763AE0FF90761B90
-:1011F000E0C39F504FE0FF75F00AA424ACF582E4F1
-:101200003475F583E0FE90761EE0FD04F074002D49
-:10121000F582E4347FF583EEF0EF75F00AA424AD97
-:10122000F582E43475F583E0FF90761EE0FE04F06D
-:1012300074002EF582E4347FF583EFF090761BE0A6
-:1012400004F080A490761EE0907FB5F02290761B8B
-:10125000E0FF75F00AA424ACF582E43475F583E070
-:10126000907F00F0EF75F00AA424ADF582E43475A8
-:10127000F583E0907F01F0907FB57402F022907FBB
-:10128000EAE0F4706D907638E090761BF090763A54
-:10129000E0FF90761BE0C39F504FE0FF75F00AA47B
-:1012A00024AEF582E43475F583E0FE90761EE0FD11
-:1012B00004F074002DF582E4347FF583EEF0EF75D1
-:1012C000F00AA424AFF582E43475F583E0FF90764C
-:1012D0001EE0FE04F074002EF582E4347FF583EF07
-:1012E000F090761BE004F080A490761EE0907FB52D
-:1012F000F02290761BE0FF75F00AA424AEF582E49C
-:101300003475F583E0907F00F0EF75F00AA424AF08
-:10131000F582E43475F583E0907F01F0907FB57439
-:1013200002F022907FEAE0F4706D907638E09076DB
-:101330001BF090763AE0FF90761BE0C39F504FE0A1
-:10134000FF75F00AA424B0F582E43475F583E0FE5D
-:1013500090761EE0FD04F074002DF582E4347FF5F4
-:1013600083EEF0EF75F00AA424B1F582E43475F54C
-:1013700083E0FF90761EE0FE04F074002EF582E418
-:10138000347FF583EFF090761BE004F080A4907634
-:101390001EE0907FB5F02290761BE0FF75F00AA466
-:1013A00024B0F582E43475F583E0907F00F0EF75AA
-:1013B000F00AA424B1F582E43475F583E0907F014E
-:1013C000F0907FB57402F022907FEAE0F4706D90A7
-:1013D0007638E090761BF090763AE0FF90761BE04E
-:1013E000C39F504FE0FF75F00AA424B2F582E434A5
-:1013F00075F583E0FE90761EE0FD04F074002DF597
-:1014000082E4347FF583EEF0EF75F00AA424B3F59F
-:1014100082E43475F583E0FF90761EE0FE04F074FC
-:10142000002EF582E4347FF583EFF090761BE00424
-:10143000F080A490761EE0907FB5F02290761BE0BD
-:10144000FF75F00AA424B2F582E43475F583E090C8
-:101450007F00F0EF75F00AA424B3F582E43475F54B
-:1014600083E0907F01F0907FB57402F022907FB40A
-:10147000E04401F022907FB4E04401F022907FB478
-:05148000E04401F02230
-:101485007400F58690FDA57C05A3E582458370F97A
-:011495002234
-:10149600907FD6E04480F0438701000000000022E0
-:1014A600C0D0C0E08FE0C0E08EE0C0E08DE0C0E0DC
-:1014B6008CE0C0E0C082C0830586C084C0857D0004
-:1014C600907FE3747BF0A37480F07C11907F99E0A9
-:1014D6005440DC030214F3B40013907FE27440F02E
-:1014E600907FE5F0907FE27400F00214D29076903F
-:1014F600E0B4011290768FE02DFD907FE27480F0CB
-:10150600907F6C021557B4021290768FE02DFD90F5
-:101516007FE27480F0907F6C021596B40312907689
-:101526008FE02DFD907FE27480F0907F6C0215E1D4
-:10153600B4041290768FE02DFD907FE27480F090D7
-:101546007F6C021610907FE27480F0907F6C02161A
-:1015560040F0F0F0F0F0F0F0F0F0F0F0F0DDF27DB9
-:10156600020586907FE27400F0907F9BE05404B4FD
-:1015760000050586021640907FE27480F00586F02D
-:10158600F0F0F0F0F0F0F0F0F0F0F0DDD4021640FC
-:10159600F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F045
-:1015A600F0F0DDEC7D020586907FE27400F0907F1E
-:1015B6009BE05404B400050586021640907FE27451
-:1015C60080F00586F0F0F0F0F0F0F0F0F0F0F0F0DA
-:0615D600F0F0F0F0F0F06F
-:1015DC00DDCE021640F0F0F0F0DDFA7D02058690CB
-:1015EC007FE27400F0907F9BE05404B40005058604
-:1015FC00021640907FE27480F00586F0F0F0F0DD8A
-:10160C00DC021640F0F0F0F0F0F0DDF87D0205861B
-:10161C00907FE27400F0907F9BE05404B4000505C9
-:10162C0086021640907FE27480F00586F0F0F0F0B0
-:10163C00F0F0DDDA907FE27400F0D085D08405867E
-:10164C00D083D082D0E0FCD0E0FDD0E0FED0E0FF33
-:05165C00D0E0D0D02217
-:10166100C0D0C0E0C082C08390767CE0907F6FF0F4
-:1016710090767DE0907F6FF090767EE0907F6FF0C6
-:09168100D083D082D0E0D0D02249
-:10168A00C0D0C0E08FE0C0E08EE0C0E0C082C0837E
-:10169A000586C084C085907687E0FFBF00030217E5
-:1016AA0001907F96E04480F0907FE27480F0907F12
-:1016BA0062E00586907FE27400F0907F96E0547FA6
-:1016CA00F0907FE27480F090768EE0B40105058692
-:1016DA000216F6B4020505860216EB05860216FB0B
-:1016EA00E0E0E0E0E0E0DFF80216FBE0E0E0E0DF67
-:1016FA00FA907FE27400F0D085D0840586D083D03A
-:0C170A0082D0E0FED0E0FFD0E0D0D02282
-:10171600C082C083C0E0E8C0E078D1E814F870FB6E
-:0A172600D0E0F8D0E0D083D082229A
-:10173000C082C083C0E0E8C0E07878E814F870FBAD
-:0A174000D0E0F8D0E0D083D0822280
-:07174A00907FC57402F0223C
-:10175100907EC0E0907645F0907EC1E0907644F0B6
-:10176100907EC2E0907643F0B40003021778907641
-:10177100197403F002178E907644E0B4BB09907699
-:10178100197402F002178E9076197401F090764266
-:03179100E4F0225F
-:041794008D298B2AE6
-:101798001249FFEA4960571236927E0029FFEE3A55
-:1017A800C9EFC9752BFFF52C892DAB2BAA2CA92DB8
-:1017B8009000011236ABFF64046005EF6405702EDB
-:1017C800EFB404159000021236AB6529700B900037
-:1017D800031236AB652A7001221236927E0029FF69
-:1017E800EE3AC9EFC9752BFFF52C892D80BC7B001B
-:0417F8007A007900FA
-:0117FC0022CA
-:0317FD00C28B326A
-:10180000907690E014603714700201D814700221B1
-:1018100072147002413B240460026103907FFC74E7
-:10182000CCF0907FFF74FCF0907695E04401F0548A
-:1018300005F0908001F0E490761AF0C22E229076A6
-:1018400095E04401F04402F0303E06E04404F080AC
-:1018500007907695E054FBF090761AE0B40108907A
-:101860007695E0908001F0907619E0FFB401229027
-:101870007FFC7474F0907FFF74FCF090768F742B73
-:10188000F0907697E054FDF0E4907681F0907680C9
-:10189000F0EFB40222907FFC7468F0907FFF74FC3C
-:1018A000F090768F742FF0907697E04402F0E490F9
-:1018B0007681F0907680F0303F09907697E054FE84
-:1018C000F08007907697E04401F0907697E054FB23
-:1018D000F0908002F0D22E22907695E054FEF044F3
-:1018E00002F0303E06E04404F08007907695E05424
-:1018F000FBF090761AE0B40108907695E0908001B4
-:10190000F0907619E0FFB40122907FFC7430F090E3
-:101910007FFF74FCF090768F742BF0907697E054F4
-:10192000FDF0E4907681F0907680F0EFB4022290A2
-:101930007FFC741CF0907FFF74FCF090768F742F06
-:10194000F0907697E04402F0E4907681F090768013
-:10195000F0303F09907697E054FEF080079076973C
-:10196000E04401F0907697E054FBF0908002F0D2D2
-:101970002E22907695E04401F04402F04408F030C5
-:101980003E06E04404F08007907695E054FBF0902A
-:10199000761AE0B40108907695E0908001F0907698
-:1019A00019E0FFB40125907FFC74CCF0907FFF74A8
-:1019B000FCF090768F742BF0907697E054FDF05405
-:1019C000FBF0E4907681F0907680F0EFB402259001
-:1019D0007FFC74C8F0907FFF74FCF090768F742FBA
-:1019E000F0907697E04402F054FBF0E4907681F0BA
-:1019F000907680F0EFB40325907FFC7498F0907F90
-:101A0000FF74FCF090768F745FF0907697E054FD51
-:101A1000F04404F0E4907681F0907680F0303F0955
-:101A2000907697E054FEF08007907697E04401F0BE
-:101A3000907697E0908002F0D22E22907695E05436
-:101A4000FEF04402F04408F0303E06E04404F0802A
-:101A500007907695E054FBF090761AE0B401089078
-:101A60007695E0908001F0907619E0FFB401259022
-:101A70007FFC74B4F0907FFF74FCF090768F742B31
-:101A8000F0907697E054FDF054FBF0E4907681F00E
-:101A9000907680F0EFB40225907FFC74B0F0907FD8
-:101AA000FF74FCF090768F742FF0907697E04402EC
-:101AB000F054FBF0E4907681F0907680F0EFB40380
-:101AC00025907FFC7468F0907FFF74FCF090768F17
-:101AD000745FF0907697E054FDF04404F0E4907663
-:101AE00081F0907680F0303F09907697E054FEF0D8
-:101AF0008007907697E04401F0907697E09080021E
-:041B0000F0D22E22CF
-:101B0400302C38C22C907619E0FFB4010E90767C0C
-:101B140074C0F0A37414F0A3740BF0EFB4020DE4DA
-:101B240090767CF0A37410F0A3740CF0EFB4030B64
-:0C1B3400E490767CF0A37418F0A3F0227B
-:101B40000000000000000000000000000000000095
-:101B50000000000000000000000000000000000085
-:101B60000000000000000000000000000000000075
-:101B70000000000000000000000000000000000065
-:101B80000000000000000000000000000000000055
-:101B90000000000000000000000000000000000045
-:101BA0000000000000000000000000000000000035
-:101BB0000000000000000000000000000000000025
-:101BC0000000000000000000000000000000000015
-:101BD0000000000000000000000000000000000005
-:101BE00000000000000000000000000000000000F5
-:101BF00000000000000000000000000000000000E5
-:101C000000000000000000000000000000000000D4
-:101C100000000000000000000000000000000000C4
-:101C200000000000000000000000000000000000B4
-:101C300000000000000000000000000000000000A4
-:101C40000000000000000000000000000000000094
-:101C50000000000000000000000000000000000084
-:101C60000000000000000000000000000000000074
-:101C70000000000000000000000000000000000064
-:101C80000000000000000000000000000000000054
-:101C90000000000000000000000000000000000044
-:101CA0000000000000000000000000000000000034
-:101CB0000000000000000000000000000000000024
-:101CC0000000000000000000000000000000000014
-:101CD0000000000000000000000000000000000004
-:101CE00000000000000000000000000000000000F4
-:101CF00000000000000000000000000000000000E4
-:101D000000000000000000000000000000000000D3
-:101D100000000000000000000000000000000000C3
-:101D200000000000000000000000000000000000B3
-:101D300000000000000000000000000000000000A3
-:101D40000000000000000000000000000000000093
-:101D50000000000000000000000000000000000083
-:101D60000000000000000000000000000000000073
-:101D70000000000000000000000000000000000063
-:101D80000000000000000000000000000000000053
-:101D90000000000000000000000000000000000043
-:101DA0000000000000000000000000000000000033
-:101DB0000000000000000000000000000000000023
-:101DC0000000000000000000000000000000000013
-:101DD0000000000000000000000000000000000003
-:101DE00000000000000000000000000000000000F3
-:101DF00000000000000000000000000000000000E3
-:101E000000000000000000000000000000000000D2
-:101E100000000000000000000000000000000000C2
-:101E200000000000000000000000000000000000B2
-:101E300000000000000000000000000000000000A2
-:101E40000000000000000000000000000000000092
-:101E50000000000000000000000000000000000082
-:101E60000000000000000000000000000000000072
-:101E70000000000000000000000000000000000062
-:101E80000000000000000000000000000000000052
-:101E90000000000000000000000000000000000042
-:101EA0000000000000000000000000000000000032
-:0E1EB000000000000000000000000000000024
-:101EBE000000000000000000000000000000000014
-:101ECE000000000000000000000000000000000004
-:101EDE0000000000000000000000000000000000F4
-:101EEE0000000000000000000000000000000000E4
-:101EFE0000000000000000000000000000000000D4
-:101F0E0000000000000000000000000000000000C3
-:101F1E0000000000000000000000000000000000B3
-:101F2E0000000000000000000000000000000000A3
-:021F3E000000A1
-:101F40000000000000000000000000000000000091
-:101F50000000000000000000000000000000000081
-:101F60000000000000000000000000000000000071
-:101F70000000000000000000000000000000000061
-:101F80000000000000000000000000000000000051
-:101F90000000000000000000000000000000000041
-:101FA0000000000000000000000000000000000031
-:101FB0000000000000000000000000000000000021
-:101FC0000000000000000000000000000000000011
-:101FD0000000000000000000000000000000000001
-:101FE00000000000000000000000000000000000F1
-:101FF00000000000000000000000000000000000E1
-:1020000000000000000000000000000000000000D0
-:1020100000000000000000000000000000000000C0
-:1020200000000000000000000000000000000000B0
-:1020300000000000000000000000000000000000A0
-:102040000000000000000000000000000000000090
-:102050000000000000000000000000000000000080
-:102060000000000000000000000000000000000070
-:102070000000000000000000000000000000000060
-:102080000000000000000000000000000000000050
-:102090000000000000000000000000000000000040
-:1020A0000000000000000000000000000000000030
-:1020B0000000000000000000000000000000000020
-:1020C0000000000000000000000000000000000010
-:1020D0000000000000000000000000000000000000
-:1020E00000000000000000000000000000000000F0
-:1020F00000000000000000000000000000000000E0
-:1021000000000000000000000000000000000000CF
-:1021100000000000000000000000000000000000BF
-:1021200000000000000000000000000000000000AF
-:10213000000000000000000000000000000000009F
-:10214000000000000000000000000000000000008F
-:10215000000000000000000000000000000000007F
-:10216000000000000000000000000000000000006F
-:10217000000000000000000000000000000000005F
-:10218000000000000000000000000000000000004F
-:10219000000000000000000000000000000000003F
-:1021A000000000000000000000000000000000002F
-:1021B000000000000000000000000000000000001F
-:1021C000000000000000000000000000000000000F
-:1021D00000000000000000000000000000000000FF
-:1021E00000000000000000000000000000000000EF
-:1021F00000000000000000000000000000000000DF
-:1022000000000000000000000000000000000000CE
-:1022100000000000000000000000000000000000BE
-:1022200000000000000000000000000000000000AE
-:10223000000000000000000000000000000000009E
-:10224000000000000000000000000000000000008E
-:10225000000000000000000000000000000000007E
-:10226000000000000000000000000000000000006E
-:10227000000000000000000000000000000000005E
-:10228000000000000000000000000000000000004E
-:10229000000000000000000000000000000000003E
-:1022A000000000000000000000000000000000002E
-:1022B000000000000000000000000000000000001E
-:1022C000000000000000000000000000000000000E
-:1022D00000000000000000000000000000000000FE
-:1022E00000000000000000000000000000000000EE
-:1022F00000000000000000000000000000000000DE
-:1023000000000000000000000000000000000000CD
-:1023100000000000000000000000000000000000BD
-:1023200000000000000000000000000000000000AD
-:10233000000000000000000000000000000000009D
-:10234000000000000000000000000000000000008D
-:10235000000000000000000000000000000000007D
-:10236000000000000000000000000000000000006D
-:0E23700000000000000000000000000000005F
-:10237E00000000000000000000000000000000004F
-:10238E00000000000000000000000000000000003F
-:10239E00000000000000000000000000000000002F
-:1023AE00000000000000000000000000000000001F
-:1023BE00000000000000000000000000000000000F
-:1023CE0000000000000000000000000000000000FF
-:1023DE0000000000000000000000000000000000EF
-:1023EE0000000000000000000000000000000000DF
-:1023FE0000000000000000000000000000000000CF
-:10240E0000000000000000000000000000000000BE
-:10241E0000000000000000000000000000000000AE
-:10242E00000000000000000000000000000000009E
-:10243E00000000000000000000000000000000008E
-:10244E00000000000000000000000000000000007E
-:10245E00000000000000000000000000000000006E
-:10246E00000000000000000000000000000000005E
-:10247E00000000000000000000000000000000004E
-:10248E00000000000000000000000000000000003E
-:10249E00000000000000000000000000000000002E
-:1024AE00000000000000000000000000000000001E
-:1024BE00000000000000000000000000000000000E
-:1024CE0000000000000000000000000000000000FE
-:1024DE0000000000000000000000000000000000EE
-:1024EE0000000000000000000000000000000000DE
-:1024FE0000000000000000000000000000000000CE
-:10250E0000000000000000000000000000000000BD
-:10251E0000000000000000000000000000000000AD
-:10252E00000000000000000000000000000000009D
-:10253E00000000000000000000000000000000008D
-:10254E00000000000000000000000000000000007D
-:10255E00000000000000000000000000000000006D
-:10256E00000000000000000000000000000000005D
-:10257E00000000000000000000000000000000004D
-:10258E00000000000000000000000000000000003D
-:10259E00000000000000000000000000000000002D
-:1025AE00000000000000000000000000000000001D
-:1025BE00000000000000000000000000000000000D
-:1025CE0000000000000000000000000000000000FD
-:1025DE0000000000000000000000000000000000ED
-:1025EE0000000000000000000000000000000000DD
-:1025FE0000000000000000000000000000000000CD
-:10260E0000000000000000000000000000000000BC
-:10261E0000000000000000000000000000000000AC
-:10262E00000000000000000000000000000000009C
-:10263E00000000000000000000000000000000008C
-:10264E00000000000000000000000000000000007C
-:10265E00000000000000000000000000000000006C
-:10266E00000000000000000000000000000000005C
-:10267E00000000000000000000000000000000004C
-:10268E00000000000000000000000000000000003C
-:10269E00000000000000000000000000000000002C
-:1026AE00000000000000000000000000000000001C
-:1026BE00000000000000000000000000000000000C
-:1026CE0000000000000000000000000000000000FC
-:1026DE0000000000000000000000000000000000EC
-:0E26EE000000000000000000000000000000DE
-:1026FC0000000000000000000000000000000000CE
-:10270C0000000000000000000000000000000000BD
-:10271C0000000000000000000000000000000000AD
-:10272C00000000000000000000000000000000009D
-:10273C00000000000000000000000000000000008D
-:10274C00000000000000000000000000000000007D
-:10275C00000000000000000000000000000000006D
-:10276C00000000000000000000000000000000005D
-:10277C00000000000000000000000000000000004D
-:10278C00000000000000000000000000000000003D
-:10279C00000000000000000000000000000000002D
-:1027AC00000000000000000000000000000000001D
-:1027BC00000000000000000000000000000000000D
-:1027CC0000000000000000000000000000000000FD
-:1027DC0000000000000000000000000000000000ED
-:1027EC0000000000000000000000000000000000DD
-:0527FC000000000022B6
-:10280100C220C221C22A907FE8E01237F9283000A5
-:10281100288C0128A2022A1F212A6A22293D802907
-:102821007D8129D1822A84A12ABAA200002ABF90DF
-:102831007FE9E014601124FE602824FE603B24FC43
-:102841007040124BA041CB124DA7400241CB907F6B
-:10285100EAE0B40104C22241CB907FB4E04401F02C
-:1028610041CB124DA9907FEAE0B40104D22241CBC1
-:10287100907FB4E04401F041CB907FB4E04401F09B
-:1028810041CB907FB4E04401F041CB907FE9E0245B
-:10289100F5700512480041CB907FB4E04401F0414E
-:1028A100CB907FE9E024FD605424026002213412C0
-:1028B1004DA7400241CB907FEAE07038907FECE079
-:1028C100F45480FFC4540FFFE054072F25E024B4D3
-:1028D100F582E4347FF583E4F0907FECE05480FFEF
-:1028E100131313541FFFE054072F907FD7F0E044D8
-:1028F10020F041CB907FB4E04401F041CB124DA9CF
-:10290100400241CB907FEAE07020907FECE0F454EC
-:1029110080FFC4540FFFE054072F25E024B4F58253
-:10292100E4347FF5837401F041CB907FB4E044013E
-:10293100F041CB907FB4E04401F041CB907FE9E0DE
-:10294100601224F86009240270291243DB41CB1282
-:102951004D5C41CB124DA5A222E433FF25E0FFA23D
-:1029610023E4334F907F00F0E4A3F0907FB574022D
-:10297100F041CB907FB4E04401F041CB907FE9E09E
-:10298100603324F6602A2404703D907FEBE024DE5E
-:10299100600C047012907FB4E04401F041CB907F51
-:1029A100B4E04401F041CB907FB4E04401F041CB6D
-:1029B10012468541CB124DA5E4907F00F0A3F09023
-:1029C1007FB57402F041CB907FB4E04401F041CB7C
-:1029D100907FE9E024F46034240C7039124DA59005
-:1029E1007FECE0F45480FFC4540FFFE054072F251F
-:1029F100E024B4F582E4347FF583E054FD907F0058
-:102A0100F0E4A3F0907FB57402F041CB907FB4E085
-:102A11004401F041CB907FB4E04401F041CB907F81
-:102A2100E9E024F6601214601A2402701DD220908D
-:102A31007FB4E04401F08012D220907FB4E04401E1
-:102A4100F08007907FB4E04401F0202018907FEEE1
-:102A5100E07004A3E0600BD229D22712174AD22AD0
-:102A61008003120800C2208061907FEEE07004A311
-:102A7100E0600BD229D22812174AD22A804C123890
-:102A8100748047907FE9E024FE601214601A2402EA
-:102A9100701DD221907FB4E04401F08012D22190C8
-:102AA1007FB4E04401F08007907FB4E04401F0205E
-:102AB1002103121000C2218011122AD6800C124D5E
-:102AC100AB5007907FB4E04401F0202A07907FB417
-:052AD100E04402F022C8
-:102AD600E4907627F0907627E0FF75F00FA4244265
-:102AE600F582E43475F583E0FE907FECE0FDEE6D53
-:102AF600600EEFC394065008907627E004F080D568
-:102B0600EFB40608907FB4E04401F022EF75F00FB1
-:102B1600A42441F582E43475F583E0907628F02408
-:102B26009F7002A17424216002A1A1907FE9E02494
-:102B36007E700261FC14700281B524026002A16CF1
-:102B4600EF75F00FA42443F582E43475F583E0FCB9
-:102B5600A3E0FDA3E0FEA3E0FF7B447AAC79007816
-:102B660000C31237AB7013907F007444F0A374ACAB
-:102B7600F0E4A3F0907FB57403F0907627E075F04B
-:102B86000FA42443F582E43475F583E0FCA3E0FD4D
-:102B9600A3E0FEA3E0FF7B807ABB79007800C31236
-:102BA60037AB7013907F007480F0A374BBF0E4A37E
-:102BB600F0907FB57403F0907627E075F00FA424AB
-:102BC60043F582E43475F583E0FCA3E0FDA3E0FE63
-:102BD600A3E0FF7B007A7779017800C31237AB60F8
-:102BE60002A1A8907F00F0A37477F0A37401F0907F
-:102BF6007FB57403F022907627E075F00FA4244782
-:102C0600F582E43475F583E0FCA3E0FDA3E0FEA3C2
-:102C1600E0FF7B447AAC79007800C31237AB7013BF
-:102C2600907F007444F0A374ACF0E4A3F0907FB5F9
-:102C36007403F0907627E075F00FA42447F582E43C
-:102C46003475F583E0FCA3E0FDA3E0FEA3E0FF7B83
-:102C5600807ABB79007800C31237AB7013907F007F
-:102C66007480F0A374BBF0E4A3F0907FB57403F016
-:102C7600907627E075F00FA42447F582E43475F5C5
-:102C860083E0FCA3E0FDA3E0FEA3E0FF7B007A77F0
-:102C960079017800C31237AB6002A1A8907F00F0DB
-:102CA600A37477F0A37401F0907FB57403F02290BB
-:102CB6007627E075F00FA4244BF582E43475F5838E
-:102CC600E0FCA3E0FDA3E0FEA3E0FF7B447AAC7941
-:102CD600007800C31237AB7013907F007444F0A3E2
-:102CE60074ACF0E4A3F0907FB57403F0907627E01F
-:102CF60075F00FA4244BF582E43475F583E0FCA34C
-:102D0600E0FDA3E0FEA3E0FF7B807ABB79007800BC
-:102D1600C31237AB7013907F007480F0A374BBF0BE
-:102D2600E4A3F0907FB57403F0907627E075F00F7A
-:102D3600A4244BF582E43475F583E0FCA3E0FDA3FF
-:102D4600E0FEA3E0FF7B007A7779017800C31237B3
-:102D5600AB704F907F00F0A37477F0A37401F090EE
-:102D66007FB57403F022907FB4E04401F022907F97
-:102D7600E9E0247F701E907627E075F00FA4244FBB
-:102D8600F582E43475F583E0907F00F0907FB574AA
-:102D960001F08007907FB4E04401F0907FB4E044F6
-:032DA60001F02217
-:102DA900E4907636F0E0FF75F003A4240EF582E492
-:102DB9003475F5837401F0EF75F003A4240FF582DF
-:102DC900E43475F5837401F0EF75F003A42410F56C
-:102DD90082E43475F583E4F0907636E004F0E0FFA0
-:102DE90075F003A4240EF582E43475F5837410F0AC
-:102DF900EF75F003A4240FF582E43475F5837405A7
-:102E0900F0EF75F003A42410F582E43475F583E43A
-:102E1900F0907636E004F0E0FF75F003A4240EF597
-:102E290082E43475F5837402F0EF75F003A4240F7E
-:102E3900F582E43475F5837402F0EF75F003A42488
-:102E490010F582E43475F583E4F0907636E004F009
-:102E5900E0FF75F003A4240EF582E43475F583745C
-:102E690001F0EF75F003A4240FF582E43475F583BE
-:102E79007403F0EF75F003A42410F582E43475F5BA
-:102E890083E4F0907636E004F0E0FF75F003A424C3
-:102E99000EF582E43475F5837410F0EF75F003A430
-:102EA900240FF582E43475F5837406F0EF75F003A9
-:102EB900A42410F582E43475F583E4F0907636E0C5
-:102EC90004F0E0FF75F003A4240EF582E43475F5EF
-:102ED900837402F0EF75F003A4240FF582E43475CE
-:102EE900F5837404F0EF75F003A42410F582E4343B
-:102EF90075F583E4F0907636E004F0E0FF75F003B1
-:102F0900A4240EF582E43475F5837402F0EF75F0AC
-:102F190003A4240FF582E43475F5837408F0EF7582
-:102F2900F003A42410F582E43475F5837404F09059
-:102F39007636E004F0E0FF75F003A4240EF582E490
-:102F49003475F5837402F0EF75F003A4240FF5824C
-:102F5900E43475F583740AF0EF75F003A42410F5D1
-:102F690082E43475F5837404F0907636E004F0E079
-:102F7900FF75F003A4240EF582E43475F583740219
-:102F8900F0EF75F003A4240FF582E43475F583742A
-:102F990009F0EF75F003A42410F582E43475F58384
-:102FA9007404F0907636E004F0E0FF75F003A42491
-:102FB9000EF582E43475F5837402F0EF75F003A41D
-:102FC900240FF582E43475F5837407F0EF75F00387
-:0E2FD900A42410F582E43475F5837404F0220C
-:102FE700C0E0C083C082D2265391EF907FAB7401BB
-:082FF700F0D082D083D0E0325B
-:012FFF00329F
-:10300000907FB6E020E102C23DD236203602416E0A
-:10301000303D02416E908007E06004D2368002C2EB
-:1030200036203602412ED235E4F51A908004E0F5C0
-:10303000197408250EF8A619851918E51820E70453
-:10304000D2388002C23830380221D4E4F516E519AE
-:10305000B4F00CD2397508047509F0050E8002052C
-:1030600016E51964F7703DC239E50E24FE601714A9
-:103070006022240370297508057509F7E4F50AF53F
-:103080000B750E048020750806750AF7E4F50B75BC
-:103090000E048012750807750BF7750E0480071271
-:1030A00048F380020516E51954F864F8703BC23500
-:1030B000E5192407600C24FC6008240524F8500658
-:1030C0008008D23A8006C23A8002D23A751A0120AC
-:1030D0003A19907E80740FF0A3E519F0E4A3F0A3F1
-:1030E000F0907FB77404F08002051620396DE51961
-:1030F00064F76067E51A7063E51854F064F070597E
-:10310000851819F50EE519240F601B24FE6017249D
-:10311000FD602214601F2405702F750803050E85BD
-:103120001809D2378028750802050E85180975140C
-:1031300001D2378019750805050E851809E4F50ACE
-:10314000F50B750E03D23780051248F3C2353035C2
-:103150000A85081385181280020516851819E516C8
-:1031600064047062F50EE51954F0F519F51585182B
-:1031700019E5152470601824F0601424F060102400
-:10318000F0601E24F0601A24F0600424607027E5CB
-:1031900015C4540FF519F508050E851809D23780A6
-:1031A0001AE515C4540FF519F508050E85180975AB
-:1031B0001401D23780051248F3C23530350A85191B
-:1031C0001385181280020516E516D3940540571290
-:1031D00048F38052303917E50E700A8508097508E2
-:1031E00004050E80417408250EF8A6198038203792
-:1031F0002AE50EB4010F85080A85090B8513088599
-:103200001209750E04E514B4011C85080AE4F50BD7
-:10321000851308851209750E04800BE514B40106A8
-:10322000E4F50B750E04E4F51A303502050EE50ED3
-:10323000D394035002010BC237E4F50EF510C236E9
-:10324000D23DF51474082510F8E6FF74802510F5BA
-:1032500082E4347EF583EFF074082510F8E4F60577
-:0F32600010E510B404DE907FB77404F0010B2268
-:10326F00907618E0FF640570429075ABE0B40119D9
-:10327F009072377401F0E4908020F0908031F090DC
-:10328F008028F0908039F08022E4907237F09075AA
-:10329F00ADE090722BF0E02480F0E0908020F09071
-:1032AF008031F0908028F0908039F0EF6406600252
-:1032BF0081999072397404F0907239E0FF24FE9076
-:1032CF007204F0EF75F00AA424ABF582E43475F5BF
-:1032DF0083E06401705490723604F0907204E0FF42
-:1032EF0024FD602824FE6024240324FB5004601C6A
-:1032FF00818C74202FF582E43480F583E4F07428F8
-:10330F002FF582E43480F583E4F0818C907204E031
-:10331F00FF2430F582E43480F583E4F074382FF520
-:10332F0082E43480F583E4F0818CE4907236F0907F
-:10333F007239E075F00AA424ADF582E43475F58393
-:10334F00E0FF7E0090750CEEF0A3EFF07006907228
-:10335F0002743BF090750CE0FEA3E0FF64804E70AA
-:10336F0004907202F0EF4E70028135EF64804E7060
-:10337F00028135EFF8E490750DF0E890750CF09040
-:10338F007234E075F00AA424ACF582E43475F58349
-:10339F00E0FF907202F090750DE02FF090750CE049
-:1033AF003400F0E0FEA3E0FFE4FCFD7BD67AA5F944
-:1033BF00F8D3123795400A90750C74A5F0A374D604
-:1033CF00F090750DE0242AF090750CE0345AF0E07F
-:1033DF00FEA3E07805CEA2E713CE13D8F8FF9075C1
-:1033EF000CEEF0A3EFF090722CEEF0A3EFF0D3946D
-:1033FF00D2EE64809482400A90722C7402F0A3740F
-:10340F00D2F0C390722CE0648094805004E4F0A357
-:10341F00F090722CE0FEA3E0243AF582EE3472F5C0
-:10342F0083E0907202F0907204E0FF24FD602D247F
-:10343F00FE6029240324FB50046021804090720217
-:10344F00E0FE74202FF582E43480F583EEF07428CB
-:10345F002FF582E43480F583EEF08021907202E044
-:10346F00FF907204E0FE2430F582E43480F583EFA0
-:10347F00F074382EF582E43480F583EFF0907239D2
-:0B348F00E004F0E0640A600241C72284
-:10349A00907618E0FFB40523907237E0701D90759E
-:1034AA00ADE090722BF0E02480F0E0908020F09064
-:1034BA008031F0908028F0908039F0EF6406600245
-:1034CA00C191907236E06002C191907640E070310D
-:1034DA009072037403F0907203E0FF75F00AA4245B
-:1034EA00AAF582E43475F583E0FE907229E0FDEED8
-:1034FA006D600EEFC3940A5008907203E004F080E6
-:10350A00D59072397404F0907640E0700890720396
-:10351A00E0907239F0907239E0FD24FE90722AF040
-:10352A00ED75F00AA424ADF582E43475F583E0FF65
-:10353A007E0090750CEEF0A3EFF0700690720274A4
-:10354A0080F090750CE0FEA3E0FF64804E7004905A
-:10355A007202F0EF4E7002C11BEF64804E7002C11E
-:10356A001BEFF8E490750DF0E890750CF0ED75F02E
-:10357A000AA424ACF582E43475F583E0FF90720264
-:10358A00F090750DE02FF090750CE03400F0E0FE3D
-:10359A00A3E0FFE4FCFD7BD67AA5F9F8D3123795B0
-:1035AA00400A90750C74A5F0A374D6F090750DE0DE
-:1035BA00242AF090750CE0345AF0E0FEA3E0780576
-:1035CA00CEA2E713CE13D8F8FF90750CEEF0A3EF56
-:1035DA00F090722CEEF0A3EFF0D394D2EE648094C4
-:1035EA0082400A90722C7402F0A374D2F0C39072D3
-:1035FA002CE0648094805004E4F0A3F090722CE0F4
-:10360A00FEA3E0243AF582EE3472F583E09072026A
-:10361A00F090722AE0FF24FD602D24FE6029240325
-:10362A0024FB500460218040907202E0FE74202F37
-:10363A00F582E43480F583EEF074282FF582E434C1
-:10364A0080F583EEF08021907202E0FF90722AE00A
-:10365A00FE2430F582E43480F583EFF074382EF5D9
-:10366A0082E43480F583EFF0907640E07006907241
-:10367A0039740AF0907239E004F0E0C3940A5002F7
-:08368A00A111E4907640F0224A
-:10369200BB010689828A83E0225002E722BBFE0236
-:0936A200E32289828A83E4932269
-:1036AB00BB010CE58229F582E5833AF583E02250D4
-:1036BB0006E92582F8E622BBFE06E92582F8E2221E
-:0D36CB00E58229F582E5833AF583E4932238
-:1036D800C2D5EC30E709B2D5E4C39DFDE49CFCEE0D
-:1036E80030E715B2D5E4C39FFFE49EFE12381FC32E
-:1036F800E49DFDE49CFC800312381F30D507C3E429
-:063708009FFFE49EFE227B
-:10370E00BB0110E58229F582E5833AF583E0F5F0F9
-:10371E00A3E0225009E92582F886F008E622BBFED6
-:10372E000AE92582F8E2F5F008E222E5832AF5831C
-:08373E00E993F5F0A3E99322E1
-:10374600E88FF0A4CC8BF0A42CFCE98EF0A42CFC22
-:103756008AF0EDA42CFCEA8EF0A4CDA8F08BF0A4A0
-:103766002DCC3825F0FDE98FF0A42CCD35F0FCEBFF
-:103776008EF0A4FEA9F0EB8FF0A4CFC5F02ECD39C4
-:0F378600FEE43CFCEAA42DCE35F0FDE43CFC2231
-:10379500EB9FF5F0EA9E42F0E99D42F0EC6480C8AB
-:0637A50064809845F0224B
-:1037AB00EB9FF5F0EA9E42F0E99D42F0E89C45F074
-:0137BB0022EB
-:0C37BC00ECF0A3EDF0A3EEF0A3EFF02280
-:1037C800A8828583F0D083D0821237DF1237DF12C8
-:1037D80037DF1237DFE473E493A3C583C5F0C583ED
-:1037E800C8C582C8F0A3C583C5F0C583C8C582C84B
-:0137F80022AE
-:1037F900D083D082F8E4937012740193700DA3A35F
-:1038090093F8740193F5828883E473740293686072
-:06381900EFA3A3A380DF72
-:10381F00BC000BBE0029EF8DF084FFADF022E4CC8D
-:10382F00F875F008EF2FFFEE33FEEC33FCEE9DEC56
-:10383F00984005FCEE9DFE0FD5F0E9E4CEFD22ED9C
-:10384F00F8F5F0EE8420D21CFEADF075F008EF2FE6
-:10385F00FFED33FD4007985006D5F0F222C398FDD7
-:05386F000FD5F0EA2274
-:10387400E4907629F0907629E0FF75F00FA42442B5
-:10388400F582E43475F583E0FE907FECE0FDEE6DA7
-:10389400600EEFC394065008907629E004F080D5BA
-:1038A400EFB40608907FB4E04401F022EF75F00F06
-:1038B400A42441F582E43475F583E090762AF0245B
-:1038C400BF7002414124E070024112242160024190
-:1038D4003A907FE9E024FE607D14700221B2240254
-:1038E4006002410A121751907642E0FCA3E0FDA366
-:1038F400E0FEA3E0FF907629E075F00FA42443F5E1
-:1039040082E43475F5831237BC907619E0FFB40174
-:103914001290767C7467F090767D7406F090767ED3
-:10392400740BF0EFB4020FE490767CF090767DF0A7
-:1039340090767E740CF0EFB4030FE490767CF090F4
-:10394400767DF090767E7418F090761A7401F012F9
-:103954003E8F12180022907EC2E0FFE4FCFDFEFBC5
-:10396400FA7901F8123746C8ECC8C9EDC9CAEECADB
-:10397400CBEFCB907EC1E0FEE4FCFD2BFBEA3EFAEC
-:10398400ED39F9EC38F8907EC0E0FFE4FEEB2FFF50
-:10399400EE3AFEED39FDEC38FC907629E075F00F37
-:1039A400A42447F582E43475F5831237BC22907E53
-:1039B400C2E0FFE4FCFDFEFBFA7901F8123746C8C9
-:1039C400ECC8C9EDC9CAEECACBEFCB907EC1E0FE0C
-:1039D400E4FCFD2BFBEA3EFAED39F9EC38F8907E75
-:1039E400C0E0FFE4FEEB2FFFEE3AFEED39FDEC38CC
-:1039F400FC907629E075F00FA4244BF582E434752D
-:103A0400F5831237BC22907FB4E04401F022907F0A
-:103A1400E9E0147019907EC0E0FF907629E075F01B
-:103A24000FA4244FF582E43475F583EFF022907FE0
-:0E3A3400B4E04401F022907FB4E04401F0229F
-:103A4200E4907635F0907635E0FFC394034002416E
-:103A5200FFEF75F00AA424AAF582E43475F583EF2A
-:103A6200F0EF75F00AA424ABF582E43475F583E433
-:103A7200F0EF75F00AA424ACF582E43475F5837492
-:103A8200F0F0EF75F00AA424ADF582E43475F58305
-:103A920074FFF0EF75F00AA424AEF582E43475F5F4
-:103AA20083E4F0EF75F00AA424AFF582E43475F5EF
-:103AB200837480F0EF75F00AA424B0F582E43475C3
-:103AC200F583E4F0EF75F00AA424B1F582E43475CD
-:103AD200F583E4F0EF75F00AA424B2F582E43475BC
-:103AE200F583E4F0EF75F00AA424B3F582E43475AB
-:103AF200F5837401F0907635E004F0414790763C0E
-:103B0200740AF0E4A3F09076357403F090763CE00A
-:103B1200FF907635E0FEC39F400261D290763DE091
-:103B2200FF04F0EE75F00AA424AAF582E43475F5D8
-:103B320083EFF0EE75F00AA424ABF582E43475F558
-:103B420083E4F0EE75F00AA424ACF582E43475F552
-:103B520083745EF0EE75F00AA424ADF582E4347548
-:103B6200F58374BAF0EE75F00AA424AEF582E4345B
-:103B720075F5837405F0EE75F00AA424AFF582E4BE
-:103B82003475F5837480F0EE75F00AA424B0F582E2
-:103B9200E43475F583E4F0EE75F00AA424B1F582FD
-:103BA200E43475F583E4F0EE75F00AA424B2F582EC
-:103BB200E43475F5837415F0EE75F00AA424B3F5B8
-:103BC20082E43475F583E4F0907635E004F0610E1A
-:013BD20022D0
-:103BD300E4907636F0E0FB75F00FA42441F582E41F
-:103BE3003475F5837440F0EB75F00FA42442F5822D
-:103BF300E43475F583740AF0EB75F00FA42443F5F0
-:103C030082E43475F5831237C80000AC44EB75F0D9
-:103C13000FA42447F582E43475F5831237C80000F6
-:103C2300AC44EB75F00FA4244BF582E43475F583B3
-:103C33001237C800017700907636E004F0E0FB7598
-:103C4300F00FA42441F582E43475F5837440F0EB5E
-:103C530075F00FA42442F582E43475F583748CF077
-:103C6300EB75F00FA42443F582E43475F583123722
-:103C7300C80000AC44EB75F00FA42447F582E4348C
-:103C830075F5831237C80000AC44EB75F00FA4241C
-:103C93004BF582E43475F5831237C8000177009041
-:103CA3007636E004F0E0FF75F00FA42441F582E4DA
-:103CB3003475F5837440F0EF75F00FA42442F58258
-:103CC300E43475F583748FF0907636E004F0E0FF0A
-:103CD30075F00FA42441F582E43475F5837441F043
-:103CE300EF75F00FA42442F582E43475F5837484F0
-:103CF300F0907636E004F0E0FF75F00FA42441F570
-:103D030082E43475F5837461F0EF75F00FA42442F7
-:103D1300F582E43475F5837481F0907636E004F02F
-:103D2300E0FF75F00FA42441F582E43475F5837444
-:103D330061F0EF75F00FA42442F582E43475F58346
-:043D43007401F022F5
-:103D4700C0E0C0F0C083C082C0D0E8C0E0E9C0E0F6
-:103D5700EAC0E0EBC0E0ECC0E0EDC0E0EEC0E0EFB1
-:103D6700C0E0907FA2E090767FF0907F74E090763D
-:103D770087F0907F75E0907688F0907F98E0440216
-:103D8700F0907696E0FF20E10C4402F0908003F07B
-:103D9700D232124AC490767FE020E250907687E0D4
-:103DA700FEA3E07C002400F534EC3EF533907698D2
-:103DB700E0FDAE33AF341236D8907687EFF0D22FCE
-:103DC700303129203F26C231907F94E054CFF090C4
-:103DD7007F9AE030E404D22DC22C907F9AE020E550
-:103DE70004C22DD22C907F94E04430F0124A501236
-:103DF7001B04302F12124216C22F75E80112168AC1
-:103E070075E80DD22B800575E801C22B202B349065
-:103E17007619E0FFB4010E90767C7467F0A3740600
-:103E2700F0A3740BF0EFB4020B90767CE4F0A3F0F0
-:103E3700A3740CF0EFB4030B90767CE4F0A3F0A32B
-:103E47007418F075CAD375CBFED2CA303404C234A5
-:103E57008002D2345391EF907FAB7402F0F0907FE1
-:103E670098E054FDF0D0E0FFD0E0FED0E0FDD0E0D8
-:103E7700FCD0E0FBD0E0FAD0E0F9D0E0F8D0D0D029
-:083E870082D083D0F0D0E032BC
-:103E8F00907692E014601D147002E14424026002E7
-:103E9F00E1D49076947401F0908000F0E490768EE7
-:103EAF00F0D23122907619E0FFB4011BE4907FF23B
-:103EBF00F0907FF37430F0907FFF74FCF090769762
-:103ECF00E054FDF054FBF0EFB4021BE4907FF2F0EE
-:103EDF00907FF37434F0907FFF74FCF0907697E04E
-:103EEF004402F054FBF0EFB40318E4907FF2F0902B
-:103EFF007FF37464F0907FFF74FCF0907697E0444A
-:103F0F0004F0907694E04401F0908000F0303F0987
-:103F1F00907697E054FEF08007907697E04401F09A
-:103F2F00907697E0908002F09076987404F09076F7
-:103F3F008E7401F022907619E0FFB4011BE4907F9C
-:103F4F00F2F0907FF37444F0907FFF74FCF0907662
-:103F5F0097E054FDF054FBF0EFB4021BE4907FF2B6
-:103F6F00F0907FF3744CF0907FFF74FCF090769795
-:103F7F00E04402F054FBF0EFB40318E4907FF2F04A
-:103F8F00907FF37494F0907FFF74FCF0907697E03D
-:103F9F004404F0907694E054FEF0908000F0303FAF
-:103FAF0009907697E054FEF08007907697E04401F1
-:103FBF00F0907697E0908002F09076987406F090EB
-:063FCF00768E7402F02260
-:103FD500C0E0C083C0825391EF907FAAE04402F015
-:103FE500907FC7E0F511750F00750D00D233D082B3
-:053FF500D083D0E03292
-:063FFA00124AC4C231228C
-:10400000E511D3940050022106907689E0C394080C
-:10401000400221067440250FF582E4347EF583E0EA
-:10402000F517E50D600E908005E517F0907689E0B4
-:1040300004F001DAE5171237F940C1024067054084
-:104040007A0640980740C10C40C10D40C70F40CBD5
-:10405000F640CBF840CBFA40CBFB40CBFC40CBFE4C
-:1040600040CBFF000040DA907E41E0908005F09068
-:104070007689E004F07511018060907E41E09080C7
-:1040800005F0907E42E0908005F0907689E004F0A3
-:10409000E004F07511018042907E41E0908005F0CF
-:1040A000907E42E0908005F0907E43E0908005F0A5
-:1040B000907689E004F0E004F0E004F075110180EE
-:1040C00019D23BD23C8013D23B800F908005E5177C
-:1040D000F0907689E004F0751101203B04050D8015
-:1040E0001F303C1C907E41E0908005F0907E42E0C5
-:1040F000908005F0907689E004F0E004F0751101FD
-:10410000050F15110100E5117010C233F50DF50F03
-:0B411000907FC77404F0C23BC23C2249
-:10411B0090768DE064017027302708C227120800C3
-:10412B0012174A302808C22812387412174A302A3C
-:10413B000EE490768DF0C22A907FB4E04402F090AA
-:10414B00763FE0B40105E4F012326F907641E0B4B3
-:10415B000105E4F012349A907640E0B40103123476
-:10416B009A907F9BE020E402C23F907F9BE030E47B
-:10417B0002D23F907F9BE020E502C23E907F9BE006
-:10418B0030E502D23EA241303F01B3501FA23F9215
-:10419B0041303F09907697E054FEF0800790769778
-:1041AB00E04401F0907697E0908002F0303F34903D
-:1041BB007619E0FFB4010E90767C7467F0A3740659
-:1041CB00F0A3740BF0EFB4020BE490767CF0A3F049
-:1041DB00A3740CF0EFB4030BE490767CF0A3F0A384
-:1041EB007418F0A240303E01B3501FA23E924030F3
-:1041FB003E09907695E04404F08007907695E05464
-:0B420B00FBF0907695E0908001F0221F
-:10421600907619E064017035907687E0FFD3942D8F
-:10422600402B9076867401F0907685E004F0E0D31A
-:10423600940F4019E4F0EFD3943140089076197446
-:1042460003F080069076197402F0123E8F9076196C
-:10425600E0B4022C907687E0FFC3942F5022EFD370
-:10426600942A401C9076867401F0907685E004F0DE
-:10427600E0D3940F400AE4F090761904F0123E8FD2
-:10428600907619E0B40226907687E0D39431401DEB
-:104296009076867401F0907685E004F0E0D3940F72
-:1042A600400BE4F09076197403F0123E8F90761965
-:1042B600E06403703F907687E0FFC3945F503590CB
-:1042C60076867401F0907685E004F0E0D3940F4092
-:1042D60023E4F0EFC3942F500CEFD3942A400690BA
-:1042E60076197401F0EFD3942F4006907619740274
-:1042F600F0123E8F907686E07005907685F022E487
-:05430600907686F02214
-:10430B00E4907696F0908003F0907FE07490F090BC
-:10431B007FE17404F0E4907FDDF0907FA1F0538E89
-:10432B00F875880575B82075F801438E30F5C8759A
-:10433B00CA7F75CBF843A82012074AC22CC22DC2E4
-:10434B002BC22F907FFC74DDF0907FFF74FFF090F9
-:10435B007F97E04401F09076197401F0E490768534
-:10436B00F0A3F0907681F0907680F0124958120FFE
-:10437B00C6124A8D907F97E04408F0E054B9F0D212
-:10438B00302030181247B41230001240001242167F
-:10439B00124A50121B04121661124216C22FC2315E
-:1043AB00C232C234C233C229C227C228E4F51190EB
-:1043BB007689F090763FF0907641F0907640F090D1
-:1043CB00768AF0A3F0A304F0E4A3F0907699F022A0
-:1043DB00124DA3400281A0907FEBE024FE601E14DF
-:1043EB00604614606E1470028191240460028199FE
-:1043FB007405907FD4F07400907FD5F022907FEA03
-:10440B00E0FF1249FF8B208A218922EA496011CEF5
-:10441B00EACEEE907FD4F0CFE9CFEF907FD5F022AC
-:10442B00907FB4E04401F022907FEAE0FF1248B0A5
-:10443B008B208A218922EA496011CEEACEEE907F49
-:10444B00D4F0CFE9CFEF907FD5F022907FB4E0444A
-:10445B0001F022907FEAE0FF907EC0E0FDA3E0FB3D
-:10446B001217948B208A218922EA496011CEEACE59
-:10447B00EE907FD4F0CFE9CFEF907FD5F022907FF5
-:10448B00B4E04401F022907FB4E04401F022907F2D
-:05449B00B4E04401F053
-:0144A00022F9
-:1044A100C2AFD224907F937430F0907F9C74BBF0A4
-:1044B100907F96E04430F0E05430F0907F94743077
-:1044C100F0907F9D74CFF0907F9774A0F0907F95CE
-:1044D10074C0F0907F9E7403F0907F99E030E20900
-:1044E10090051974A0F0E4A3F0C225C222C223C230
-:1044F10026124AC4122DA9123BD3124559123A422F
-:104501009076687401F0700F124BBB1207FE124DCA
-:10451100A1121B4012149612430B907FAFE044018D
-:10452100F0907FAEE0441FF0907FAC74FFF0907F7D
-:10453100ADF0907FDEF0907FDFF0907FABF0907F69
-:10454100A9F0907FAAF05391EF43D820D2E843D845
-:084551002053A8A043A880221A
-:10455900E4907636F0E0FF75F003A42432F582E4A6
-:104569003475F583E4F0EF75F003A42433F582E4A0
-:104579003475F5837401F0907636E004F0E0FF7548
-:10458900F003A42432F582E43475F583E4F0EF7581
-:10459900F003A42433F582E43475F5837402F090B2
-:1045A9007636E004F0E0FF75F003A42432F582E4E6
-:1045B9003475F583E4F0EF75F003A42433F582E450
-:1045C9003475F5837403F0907636E004F0E0FF75F6
-:1045D900F003A42432F582E43475F583E4F0EF7531
-:1045E900F003A42433F582E43475F5837404F022CE
-:0C45F900787FE4F6D8FD7581380246405A
-:1046050002475AE493A3F8E493A34003F68001F22A
-:1046150008DFF48029E493A3F85407240CC8C333B6
-:10462500C4540F4420C8834004F456800146F6DF85
-:10463500E4800B0102040810204080900C8FE47E7A
-:10464500019360BCA3FF543F30E509541FFEE4937A
-:10465500A360010ECF54C025E060A840B8E493A341
-:10466500FAE493A3F8E493A3C8C582C8CAC583CA6C
-:10467500F0A3C8C582C8CAC583CADFE9DEE780BE24
-:10468500907FECE0907683F0E014601D14602A14AE
-:10469500603714604424047050907691E0907F0058
-:1046A500F0907FB57401F08047907692E0907F009E
-:1046B500F0907FB57401F08037907690E0907F00A0
-:1046C500F0907FB57401F08027907684E0907F00AC
-:1046D500F0907FB57401F08017907693E0907F009D
-:1046E500F0907FB57401F08007907FB4E04401F04D
-:0246F500D322CE
-:1046F700C0E0C0F0C083C082C0D0E8C0E0E9C0E03D
-:10470700EAC0E0EBC0E0ECC0E0EDC0E0EEC0E0EFF7
-:10471700C0E0C2CAC2CF907F98E04401F0302E03B8
-:104727001214A6907F98E054FEF053A8FA1216616F
-:10473700D0E0FFD0E0FED0E0FDD0E0FCD0E0FBD041
-:10474700E0FAD0E0F9D0E0F8D0D0D082D083D0F032
-:03475700D0E0327D
-:10475A00E4907666F01244A1202613907666E0C3B0
-:10476A009402500AE004F0D242124AF680EA302655
-:10477A0005122801C22630252B907696E054FCF0CB
-:10478A00908003F0121496907696E04403F090809D
-:10479A0003F0E4907667F0907667E004F0E0B44BBB
-:0A47AA00F6123FFA12411B80C522EF
-:1047B400E490769BF090769BE0FF04F0EF6008E0D5
-:1047C4002408F8E4F680EE907696E054FBF054F773
-:1047D400F0908003F0E4F518D235F50EF510D236DA
-:1047E400751211751322C237C239C238F516F51481
-:0B47F400F51AF50DC23BC23CC23D228D
-:10480000907FECE0907683F0E01460171460211440
-:10481000602B14603224047038907FEAE090769127
-:10482000F08035907FEAE0907692F0123E8F8028FB
-:10483000907FEAE0907690F0121800801B907FEA5B
-:10484000E0907684F08011907FEAE0907693F0809B
-:0A48500007907FB4E04401F0D3228A
-:10485A00E4907626F0907626E0FF75F003A42434DF
-:10486A00F582E43475F583E0FE907FECE0FDEE6DB1
-:10487A00600EEFC394045008907626E004F080D5C9
-:10488A00EFB40408907FB4E04401F022EF75F0031E
-:10489A00A42432F582E43475F583E0907F00F09029
-:0648AA007FB57401F0224D
-:0248B0008F2E49
-:1048B200E4F52F7530FF7531067532BEAB30AA3183
-:1048C200A9329000011236ABB4031FAF2F052FEFB0
-:1048D200652E7001221236927E0029FFEE3AC9EF50
-:1048E200C97530FFF531893280D27B007A007900B8
-:0148F20022A3
-:0C48F300C237E4F50EF510C236F51422B1
-:10490000022FE700023D4700024D4600024BD50052
-:10491000024B6000022FFF00024BED00024B8100B2
-:10492000024C0400023FD500024C1B00024C320036
-:10493000024C4900024C6000024C7700024C8E0091
-:10494000024CA500024CBC00024CD300024CEA0011
-:08495000024D0100024D1800A8
-:104958009076467480F0E4A3F0A3F0A3F0A3F0A34C
-:10496800F0A3F0A3F0A3F0A37480F0E4A3F0A3F005
-:10497800A3F0A3F0A3F0A3F0A37440F0E4A3F0A382
-:104988007440F0E4A3F0A3F0A3F0A3F0A3F0A3F025
-:10499800A37440F0E4A3F0A37440F0E4A3F0A3F000
-:0549A800A3F0A3F022C2
-:1049AD00E4907625F0907625E0FF75F003A424348D
-:1049BD00F582E43475F583E0FE907FECE0FDEE6D5D
-:1049CD00600EEFC394045008907625E004F080D576
-:1049DD00EFB40408907FB4E04401F022907EC0E073
-:1049ED00FEEF75F003A42432F582E43475F583EE01
-:0249FD00F022A6
-:1049FF00E4FE751DFF751E05751F12AB1DAA1EA9BE
-:104A0F001F9000011236AB6402702FCDEECD0EED6C
-:104A1F006F70012290000212370E85F01BF51C6299
-:104A2F001BE51B621CE51C621B29FDE51B3AC9ED4A
-:104A3F00C9751DFFF51E891F80C17B007A007900A3
-:014A4F002244
-:104A5000302D39C22D907619E0FFB4010DE4907627
-:104A60007CF0A374F8F0A3740AF0EFB4020DE490A4
-:104A7000767CF0A374F0F0A3740BF0EFB4030DE4B4
-:0D4A800090767CF0A374F8F0A37417F02278
-:104A8D00E4FF74562FF582E43476F583E0FE742846
-:104A9D002FF582E43480F583EEF0745E2FF582E419
-:104AAD003476F583E0FE74382FF582E43480F58397
-:064ABD00EEF00FBF08CC73
-:014AC30022D0
-:104AC400E4907236F0A3F0907F97E054FBF0E4900A
-:104AD4007233F0907232F090720104F0E490723309
-:104AE400F0907232F090720104F0907F97E04404E9
-:024AF400F022AE
-:104AF600907FD6E054FBF0E04408F0304204E044F6
-:104B060002F07FDC7E05124D2F907FD6E054F7F041
-:054B1600E04404F02260
-:104B1B00907FEBE0147014907FE9E0247F70041217
-:104B2B00485A22907FB4E04401F022907FB4E044D5
-:034B3B0001F02264
-:104B3E00907FEBE0147013907FE9E014700412493B
-:104B4E00AD22907FB4E04401F022907FB4E04401A6
-:024B5E00F02243
-:104B6000C0E0C083C0825391EF907FAB7410F0908F
-:104B70007696E054FDF0908003F0D082D083D0E0B0
-:014B80003202
-:104B8100C0E0C083C0825391EF907FAAE04401F05E
-:0F4B9100C22990768D7401F0D082D083D0E032AB
-:104BA000907FEAE0907682F0E4907691F0907692B1
-:0B4BB000F0907690F0907693F0D32206
-:104BBB00907FD6E030E712E04401F07F147E0012C4
-:0A4BCB004D2F907FD6E054FEF0223B
-:104BD500C0E0C083C082D2255391EF907FAB7408AB
-:084BE500F0D082D083D0E03251
-:104BED00C0E0C083C0825391EF907FA9E04401F0F3
-:074BFD00D082D083D0E0322A
-:104C0400C0E0C083C0825391EF907FA9E04402F0DA
-:074C1400D082D083D0E03212
-:104C1B00C0E0C083C0825391EF907FA9E04404F0C1
-:074C2B00D082D083D0E032FB
-:104C3200C0E0C083C0825391EF907FAAE04404F0A9
-:074C4200D082D083D0E032E4
-:104C4900C0E0C083C0825391EF907FA9E04408F08F
-:074C5900D082D083D0E032CD
-:104C6000C0E0C083C0825391EF907FAAE04408F077
-:074C7000D082D083D0E032B6
-:104C7700C0E0C083C0825391EF907FA9E04410F059
-:074C8700D082D083D0E0329F
-:104C8E00C0E0C083C0825391EF907FAAE04410F041
-:074C9E00D082D083D0E03288
-:104CA500C0E0C083C0825391EF907FA9E04420F01B
-:074CB500D082D083D0E03271
-:104CBC00C0E0C083C0825391EF907FAAE04420F003
-:074CCC00D082D083D0E0325A
-:104CD300C0E0C083C0825391EF907FA9E04440F0CD
-:074CE300D082D083D0E03243
-:104CEA00C0E0C083C0825391EF907FAAE04440F0B5
-:074CFA00D082D083D0E0322C
-:104D0100C0E0C083C0825391EF907FA9E04480F05E
-:074D1100D082D083D0E03214
-:104D1800C0E0C083C0825391EF907FAAE04480F046
-:074D2800D082D083D0E032FD
-:104D2F008E358F36E5361536AE35700215354E6039
-:074D3F000512148580EE222D
-:104D4600C0E0C083C0825391EF907FAB7404F0D073
-:064D560082D083D0E032A0
-:104D5C00907682E0907F00F0907FB57401F0D322C2
-:094D6C00C22553D8EF43D82032D0
-:074D75005398FE5398FD3234
-:074D7C0053C0FE53C0FD32DD
-:064D83005391BFD22D3256
-:064D890053917FD22C3291
-:044D8F005391DF322B
-:044D930053D8F732C8
-:044D9700121730229D
-:034D9B00C28D3294
-:034D9E00C28F328F
-:024DA100D3221B
-:024DA300D32219
-:024DA500D32217
-:024DA700D32215
-:024DA900D32213
-:024DAB00C32221
-:00000001FF
-/*
-Source: EMI62SFW.HEX
-VERSION=1.04.062
-DATE=16.10.2002
-*/
diff --git a/firmware/ess/maestro3_assp_kernel.fw.ihex b/firmware/ess/maestro3_assp_kernel.fw.ihex
deleted file mode 100644
index 933c4c375c2f..000000000000
--- a/firmware/ess/maestro3_assp_kernel.fw.ihex
+++ /dev/null
@@ -1,120 +0,0 @@
-:10000000807930008079B4038079B4038079FB0073
-:100010008079DD008079B4038079320380798702AA
-:100020008079B4038079B4038079B4038079B40310
-:1000300080791A038079B40380792F028079B40320
-:100040008079B4038079B4038079B4038079B403F0
-:100050008079630080796B008079B4038079B40380
-:1000600080BF7C2C0688048840BE20BC09AE0010EE
-:100070000AAE0100386908EB53005A6908EBD60054
-:100080000900888B806988E3360030BE20BC09698E
-:1000900001B8099041BE41BE286988EB780041BE95
-:1000A00040BE8079380041BE41BE3A90386908E3CD
-:1000B00056003A9041BE40BE00EF3A90396908E3DD
-:1000C0005E003A9000EF0B690C668CEF0A690C66D3
-:1000D0000B62096600EF10690F6604EF88E3750094
-:1000E0000E690F6610620D6600EF0E690D6600EF77
-:1000F00070AE010020BC27AE0100396908EB5D003D
-:10010000266901B826902600888B806988E3CB0099
-:100110002890280D114200E17A00114700E1A0006B
-:10012000807A630011B80A66096204E37A000B0C56
-:1001300005400A1001BA1290120C02408079AF00FB
-:10014000807A6B0002BE0E620D6610BA44E37A003C
-:10015000100C05400E1001BA1290120C0240031050
-:1001600002BA1290120C0040031088E3BA00041087
-:100170008079BC00041001BA1290120C0140050CE9
-:100180000340060C04401110B0BFFF011290120C86
-:10019000064020BC00EF26AE28107069D0BF0100D9
-:1001A000709088E37A0028AE000000EF70AE000384
-:1001B000700C0CB05AAE000000EF807A8A037F69A1
-:1001C00001B87F905600888BA00C08B071AF00B0CA
-:1001D000714E00E2F30056AE57105600A00C08B066
-:1001E00056808079A1031008A0BF591004E3A10331
-:1001F00056808079A103807A8A0301BF43BE59BE2D
-:100200007C90376988E30D0101BA08E30C0171AEF7
-:100210000400710C0050366937900ABF9E108A8B1B
-:1002200080AF1480804C0ABF600500F50ABF20052E
-:1002300000B917BBA090176988E34801170D00E1CA
-:1002400027010CBF78050DBF7C0580792B010CBF01
-:1002500038050DBF3C05006908E335018C8B59BE9C
-:1002600007BBA09020BC807957010C038B8B03B98E
-:100270000988C6BE3E01AC69AB90AD69AB9013086E
-:100280000A6644E3440109030C8320BC80795701CA
-:10029000556988E35701387C0BBF780500F50BBF23
-:1002A000380507B90988C6BE5601AB10AA90746913
-:1002B00088E3630172AE400500F572AE000561AEE1
-:1002C0003B10807AF602786988E382018C8B0CBF40
-:1002D000600500E5407C140820BA12883D73807ADE
-:1002E00080033E73807A80038C8B0CBF6C0500E525
-:1002F000407C14082CBA12883F73807A80034073C4
-:10030000807A8003756988E38E0172AE480500F536
-:1003100072AE080561AE4110807AF602796988E311
-:10032000AD018C8B0CBF600500E5407C140818BA49
-:1003300012884373807A80034473807A80038C8BA5
-:100340000CBF6C0500E5407C140824BA1288457384
-:10035000807A80034673807A8003766988E3B901E6
-:1003600072AE580500F572AE180561AE4710807A7E
-:10037000F6027A6988E3D8018C8B0CBF600500E532
-:10038000407C140808BA12884973807A80034A7343
-:10039000807A80038C8B0CBF6C0500E5407C1408D0
-:1003A00014BA12884B73807A80034C73807A80036E
-:1003B00021BC1CAE90108A8B0ABF600500E5407C12
-:1003C000120804B813888D8B0DBF6C0500E5407CC6
-:1003D000150804B81188807A4A038A8B0ABF600521
-:1003E00000E5407C1F7303B90988C6BEF9018A5431
-:1003F00003BEA098207303B90988C6BE01028A54BF
-:1004000003BEA098201F1F2F269820BC356988E3C3
-:10041000A103336901B83390A0BFEE0208E3A10342
-:10042000339000BF516988E31F02347380BE605768
-:1004300003BE7E9F59BE34907E69510D139020BC3F
-:100440005C6988E3A1035E7380BE605703BE7E9F34
-:1004500059BE5E907E695C0D13908079A103807A0D
-:100460008A0301BF43BE776988E34E0261AE4D1037
-:100470006100888B806988E34E027190710D0B00DA
-:10048000A0AF1080A0AF108010080A6608E34902F0
-:10049000090010080C6688E34E020B8020BC7B69C3
-:1004A00088E3A1030ABF9E108A8B80AF1480804C22
-:1004B00000E166027C6990BF6005729072037C69FE
-:1004C00090BF640573907304807970027C6990BF5B
-:1004D0002005729072037C6990BF240573907304A9
-:1004E0007C6901B87C900ABFFD108A8B80AF1080B8
-:1004F0004F738A5403BE809821BC26738B5403BE6D
-:100500008B618C9803BE806180988079A103807A8A
-:100510008A03280D114700E1BE0212AF064012699E
-:10052000B0BF000C88E3B602A0BF000888E3B202A7
-:100530001269B0BF000CA0BF000488E3A3020969E0
-:100540000B908079A5020BAF054001690590026907
-:100550000690114300E1ED021169C0BF0020119027
-:100560008079ED0209690B908079B8020BAF0540E4
-:1005700005AF034006AF04408079ED0212AF06409C
-:100580001269B0BF000C88E3E702A0BF000888E34F
-:10059000E3021269B0BF000CA0BF000488E3D402DC
-:1005A0000D6910908079D60210AF05400169059061
-:1005B00002690690114300E1ED021169C0BF0020FD
-:1005C00011908079ED020D6910908079E90210AFE9
-:1005D000054005AF034006AF044020BC7069719030
-:1005E000807A7800716970908079A10320BC6103E2
-:1005F0008B8B806988EF7202720304787190710DA1
-:100600008A8B0B0003B90988C6BE0903A869AB90A1
-:10061000A869AA9010080A6644E30F0309001008AD
-:100620000C6688E314030B8020BC616901B86190FB
-:100630008079F702807A8A03355D0100346901B858
-:1006400034900ABF9E108A8B80AF1480804872AEAF
-:10065000500500F572AE100561AE5110807AF602B9
-:100660008079A103807A8A03355D02005E6901B852
-:100670005E900ABF9E108A8B80AF1480804772AE56
-:10068000580500F572AE180561AE5C10807AF6026E
-:100690008079A1031C00888B806988EF1D901D0D57
-:1006A0000F1010668CE358030E6910660F620D661A
-:1006B0000FBA01E37A0310048A8B03B90988C6BE16
-:1006C0006C038C6AAA61AB988C6AAB61AD988C6A3A
-:1006D000AD61A9988C6AA961AA98047C8B8B047C73
-:1006E0008D8B047C898B047C14080E6608E37903E7
-:1006F0000D04108421BC1C6901B81C9080794A0348
-:1007000003B909888A8BC6BE8803AC5403BE8C61CA
-:10071000AA9800EF20BC46BE09086B900A086C90AE
-:100720000B086D901A0862901B0863901E08649075
-:1007300059BE1E88658066816782688369846A8580
-:1007400000EF20BC6B6909886C690A886D690B88A9
-:1007500062691A8863691B8864691E88650066017E
-:0A0760006702680369046A053ABEE7
-:00000001FF
diff --git a/firmware/ess/maestro3_assp_minisrc.fw.ihex b/firmware/ess/maestro3_assp_minisrc.fw.ihex
deleted file mode 100644
index d2c0031dadf2..000000000000
--- a/firmware/ess/maestro3_assp_minisrc.fw.ihex
+++ /dev/null
@@ -1,51 +0,0 @@
-:1000000080BF1E106E906E00888B806988EF6F90A5
-:100010006F0D006908EB120420BC6E6901B86E9088
-:10002000807903040EB9078843BE01BF47BE41BEB5
-:10003000807A2A0040BE2930CCEF41BE807A280069
-:1000400040BE2830CCEF076908E32A0409692C90E8
-:1000500080792C040D692C9009101A880A1001BAB5
-:100060001B880D101C880E1001BA1D8880BFED0082
-:100070001E880C05240104B92790186908E3B3040D
-:100080002D901369A0BF987504F72DAEFF008D8BDE
-:10009000196908E363041A6908E3560407B9098873
-:1000A000C6BE5304A910AD9080797C0403B90988B9
-:1000B000C6BE60048918226CAD90A910236E226C14
-:1000C000AD9080797C041A1008E36F0403B90988A5
-:1000D000C6BE6C04A910A090AD9080797C0401B9D3
-:1000E0000988C6BE7B048918226CA090AD90A91027
-:1000F000236E226CA090AD902D6908E39C0424012E
-:1001000003B702B91888898B2C028A10047CA0904E
-:100110002B691F88807E5B052A690988898BA099D5
-:100120008A10A0902B691F88807E5B052A69098848
-:10013000898BAF99997B840424010F061B1013202F
-:100140001B90A0BFFF7F44E3AC041B90898B807A97
-:100150001A05276901BA2790807A2305276908E3E1
-:100160009E0480790F052406261013202690A0BF38
-:10017000FF7F04E3C0048D8B807A1A058079B40474
-:100180002690131026301B908D8B807A1A05807A6A
-:100190002305271001BA279008E3B40424010F06B1
-:1001A000898B1A6908E3EA04196988E3E00403B952
-:1001B0000988C6BEDD04A01FAE2FA99880790F055F
-:1001C00001B9188807B90988C6BEE704EE10A990DE
-:1001D00080790F05196908E3FE0403B9098846BE52
-:1001E000C6BEFA04A0171EBEAE1FBFBF00FF13BEDF
-:1001F000DFBF8080A99947BE80790F0501B90988C2
-:10020000C6BE0E05A016A026B7BF00FF1EBEA01ECC
-:10021000AE2EBFBF00FF13BEDFBF8080A9990C8543
-:100220000F86076988E31605070D108559BE1E88DD
-:100230004ABE00EF1E101C901F101D90A0101E90B3
-:10024000A0101F9000EF1E101C3020901B73205434
-:1002500003BE259825101C2025902573145403BE39
-:100260008E8B80982F6988E3390559BE07BB806162
-:100270008098A08B1F101D3021901B73215403BE4A
-:100280002E982E101D202E902E73155403BE80988C
-:100290002F6988E34F0559BE07BB80618098A08B0A
-:1002A000186908EF2573165403BEA0982E731754CF
-:1002B00003BEA09800EFA08BC6BE6B0559BE04BB61
-:1002C00090AA04BE1EBEE099E08BA069D090A06900
-:1002D000D0901F0805B81F88908BA069D090A069A6
-:1002E0009090D08BD88B1FBE00EF00000000000064
-:1002F00000000000000000000000000000000000FE
-:1003000000000000000000000000000000000000ED
-:020310000000EB
-:00000001FF
diff --git a/firmware/ihex2fw.c b/firmware/ihex2fw.c
deleted file mode 100644
index 08d90e25abf0..000000000000
--- a/firmware/ihex2fw.c
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- * Parser/loader for IHEX formatted data.
- *
- * Copyright © 2008 David Woodhouse <dwmw2@infradead.org>
- * Copyright © 2005 Jan Harkes <jaharkes@cs.cmu.edu>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-
-#include <stdint.h>
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/mman.h>
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-#define _GNU_SOURCE
-#include <getopt.h>
-
-
-struct ihex_binrec {
- struct ihex_binrec *next; /* not part of the real data structure */
- uint32_t addr;
- uint16_t len;
- uint8_t data[];
-};
-
-/**
- * nybble/hex are little helpers to parse hexadecimal numbers to a byte value
- **/
-static uint8_t nybble(const uint8_t n)
-{
- if (n >= '0' && n <= '9') return n - '0';
- else if (n >= 'A' && n <= 'F') return n - ('A' - 10);
- else if (n >= 'a' && n <= 'f') return n - ('a' - 10);
- return 0;
-}
-
-static uint8_t hex(const uint8_t *data, uint8_t *crc)
-{
- uint8_t val = (nybble(data[0]) << 4) | nybble(data[1]);
- *crc += val;
- return val;
-}
-
-static int process_ihex(uint8_t *data, ssize_t size);
-static void file_record(struct ihex_binrec *record);
-static int output_records(int outfd);
-
-static int sort_records = 0;
-static int wide_records = 0;
-static int include_jump = 0;
-
-static int usage(void)
-{
- fprintf(stderr, "ihex2fw: Convert ihex files into binary "
- "representation for use by Linux kernel\n");
- fprintf(stderr, "usage: ihex2fw [<options>] <src.HEX> <dst.fw>\n");
- fprintf(stderr, " -w: wide records (16-bit length)\n");
- fprintf(stderr, " -s: sort records by address\n");
- fprintf(stderr, " -j: include records for CS:IP/EIP address\n");
- return 1;
-}
-
-int main(int argc, char **argv)
-{
- int infd, outfd;
- struct stat st;
- uint8_t *data;
- int opt;
-
- while ((opt = getopt(argc, argv, "wsj")) != -1) {
- switch (opt) {
- case 'w':
- wide_records = 1;
- break;
- case 's':
- sort_records = 1;
- break;
- case 'j':
- include_jump = 1;
- break;
- default:
- return usage();
- }
- }
-
- if (optind + 2 != argc)
- return usage();
-
- if (!strcmp(argv[optind], "-"))
- infd = 0;
- else
- infd = open(argv[optind], O_RDONLY);
- if (infd == -1) {
- fprintf(stderr, "Failed to open source file: %s",
- strerror(errno));
- return usage();
- }
- if (fstat(infd, &st)) {
- perror("stat");
- return 1;
- }
- data = mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, infd, 0);
- if (data == MAP_FAILED) {
- perror("mmap");
- return 1;
- }
-
- if (!strcmp(argv[optind+1], "-"))
- outfd = 1;
- else
- outfd = open(argv[optind+1], O_TRUNC|O_CREAT|O_WRONLY, 0644);
- if (outfd == -1) {
- fprintf(stderr, "Failed to open destination file: %s",
- strerror(errno));
- return usage();
- }
- if (process_ihex(data, st.st_size))
- return 1;
-
- return output_records(outfd);
-}
-
-static int process_ihex(uint8_t *data, ssize_t size)
-{
- struct ihex_binrec *record;
- uint32_t offset = 0;
- uint32_t data32;
- uint8_t type, crc = 0, crcbyte = 0;
- int i, j;
- int line = 1;
- int len;
-
- i = 0;
-next_record:
- /* search for the start of record character */
- while (i < size) {
- if (data[i] == '\n') line++;
- if (data[i++] == ':') break;
- }
-
- /* Minimum record length would be about 10 characters */
- if (i + 10 > size) {
- fprintf(stderr, "Can't find valid record at line %d\n", line);
- return -EINVAL;
- }
-
- len = hex(data + i, &crc); i += 2;
- if (wide_records) {
- len <<= 8;
- len += hex(data + i, &crc); i += 2;
- }
- record = malloc((sizeof (*record) + len + 3) & ~3);
- if (!record) {
- fprintf(stderr, "out of memory for records\n");
- return -ENOMEM;
- }
- memset(record, 0, (sizeof(*record) + len + 3) & ~3);
- record->len = len;
-
- /* now check if we have enough data to read everything */
- if (i + 8 + (record->len * 2) > size) {
- fprintf(stderr, "Not enough data to read complete record at line %d\n",
- line);
- return -EINVAL;
- }
-
- record->addr = hex(data + i, &crc) << 8; i += 2;
- record->addr |= hex(data + i, &crc); i += 2;
- type = hex(data + i, &crc); i += 2;
-
- for (j = 0; j < record->len; j++, i += 2)
- record->data[j] = hex(data + i, &crc);
-
- /* check CRC */
- crcbyte = hex(data + i, &crc); i += 2;
- if (crc != 0) {
- fprintf(stderr, "CRC failure at line %d: got 0x%X, expected 0x%X\n",
- line, crcbyte, (unsigned char)(crcbyte-crc));
- return -EINVAL;
- }
-
- /* Done reading the record */
- switch (type) {
- case 0:
- /* old style EOF record? */
- if (!record->len)
- break;
-
- record->addr += offset;
- file_record(record);
- goto next_record;
-
- case 1: /* End-Of-File Record */
- if (record->addr || record->len) {
- fprintf(stderr, "Bad EOF record (type 01) format at line %d",
- line);
- return -EINVAL;
- }
- break;
-
- case 2: /* Extended Segment Address Record (HEX86) */
- case 4: /* Extended Linear Address Record (HEX386) */
- if (record->addr || record->len != 2) {
- fprintf(stderr, "Bad HEX86/HEX386 record (type %02X) at line %d\n",
- type, line);
- return -EINVAL;
- }
-
- /* We shouldn't really be using the offset for HEX86 because
- * the wraparound case is specified quite differently. */
- offset = record->data[0] << 8 | record->data[1];
- offset <<= (type == 2 ? 4 : 16);
- goto next_record;
-
- case 3: /* Start Segment Address Record */
- case 5: /* Start Linear Address Record */
- if (record->addr || record->len != 4) {
- fprintf(stderr, "Bad Start Address record (type %02X) at line %d\n",
- type, line);
- return -EINVAL;
- }
-
- memcpy(&data32, &record->data[0], sizeof(data32));
- data32 = htonl(data32);
- memcpy(&record->data[0], &data32, sizeof(data32));
-
- /* These records contain the CS/IP or EIP where execution
- * starts. If requested output this as a record. */
- if (include_jump)
- file_record(record);
- goto next_record;
-
- default:
- fprintf(stderr, "Unknown record (type %02X)\n", type);
- return -EINVAL;
- }
-
- return 0;
-}
-
-static struct ihex_binrec *records;
-
-static void file_record(struct ihex_binrec *record)
-{
- struct ihex_binrec **p = &records;
-
- while ((*p) && (!sort_records || (*p)->addr < record->addr))
- p = &((*p)->next);
-
- record->next = *p;
- *p = record;
-}
-
-static int output_records(int outfd)
-{
- unsigned char zeroes[6] = {0, 0, 0, 0, 0, 0};
- struct ihex_binrec *p = records;
-
- while (p) {
- uint16_t writelen = (p->len + 9) & ~3;
-
- p->addr = htonl(p->addr);
- p->len = htons(p->len);
- if (write(outfd, &p->addr, writelen) != writelen)
- return 1;
- p = p->next;
- }
- /* EOF record is zero length, since we don't bother to represent
- the type field in the binary version */
- if (write(outfd, zeroes, 6) != 6)
- return 1;
- return 0;
-}
diff --git a/firmware/kaweth/new_code.bin.ihex b/firmware/kaweth/new_code.bin.ihex
deleted file mode 100644
index 292d40f4f334..000000000000
--- a/firmware/kaweth/new_code.bin.ihex
+++ /dev/null
@@ -1,206 +0,0 @@
-:10000000B6C3AABBCCDD9FCFDE06E7570000C4060F
-:1000100097C1E767FF1F28C0E787000424C0E76790
-:10002000FFF922C097CFD70900C0E709A2C0BE06DA
-:100030009FAF3600E70500C0A7CFBC0697CFE757B4
-:100040000000B806A7A1B80697CFE757000014082C
-:100050000AC0E7570000A4C0A7C07A069FAF920766
-:10006000E70700001408E757FFFFBA069FA0380013
-:10007000E759BA06BE069FA03800C809CA0608623A
-:100080009FA13608C00976060060A7C07A069FAF18
-:10009000CC02E7570000B806A7C17A069FAF04005C
-:1000A000E75700008E060AC1E70920C01008E7D014
-:1000B0001008E767400010089FAF920CC009D006F7
-:1000C000006005C4C059BE0602C09FAFEC009FAFE0
-:1000D0003402E7570000A6069FA07A02A7CF7A064F
-:1000E0004802E709BE06D006C83704009FAF0803E0
-:1000F00097CFE7570000CE0697C0D70900C0C1DFF1
-:10010000C809C606086214C02704C6061094F00782
-:1001100010080200C107010070000400F007300160
-:10012000060050AFE707FFFFD006E7070000CE0646
-:10013000E70500C097CFD70900C0C1DF4802D0094A
-:10014000C6062702C606E70500C097CF4802C83793
-:100150000400000C0C00006021C0C0373E0023C921
-:10016000C057B4051BC8C0173F00C067C0FF3000B0
-:100170000800F007000004000002C0174C00300027
-:100180000600F007A0010A004802C1070200D709D3
-:1001900000C0C1DF51AFE70500C097CF9FAF080394
-:1001A0009FAF7A0297CF9FAF7A02C9370400C1DFB1
-:1001B000C809A20650026702A206D107000027D88C
-:1001C000AA06C0DF9FAFC40197CFE7570000D20651
-:1001D00097C1E7570100A80697C0C809A0060862A2
-:1001E00097C00002C0170E0027003401270C0C0036
-:1001F0003601E70750C312C0E707CC0B0200E70740
-:100200000100A806E707050090C097CFC809A4061B
-:10021000086202C0106407C1E70700009E06E707F6
-:100220007204240097CF2704A406C8170E002702E3
-:100230009E06E7078004240097CFD70900C0C1DFDE
-:10024000E7570000900613C19FAF0602E757000072
-:100250009E0613C0E7099E063001E707F20532014A
-:10026000E707100096C0E7099E06900604CFE757FF
-:1002700000009E0602C19FAF0602E70500C097CFAF
-:10028000D70900C0C1DF0892E7570200AA0602C3DF
-:10029000C809A4062702A606086203C1E70500C034
-:1002A00097CF2704A406E70500C0F0074000080028
-:1002B000F007000004000002C0170C003000060028
-:1002C000F00746010A00C8170400C107020051AF39
-:1002D00097CFE7570000960697C0C1DFC80996067A
-:1002E000270496062752980603C1E7079606980644
-:1002F000C0DF1702C8170E009FAFBA03C805006021
-:1003000003C09FAF240397CF9FAF080397CF570237
-:10031000C907A406D70900C0C1DF08621BC050048A
-:100320001102E70500C0C90597CF9702CA09D60692
-:10033000F21701000400F22700000600CA172C0083
-:10034000F87701000E0006C0CAD9F857FF000E006A
-:1003500001C1CAD9221C0C00E2270000E2170100EB
-:10036000E2270000CA05000C0C00C0174100C0675E
-:10037000C0FF300008000002C0170C00300006006B
-:10038000F007DA000A00F00700000400000C080083
-:1003900040D10100C019CE06C059C20604C949AFF8
-:1003A0009FAFEC004AAF6710CE06C8170400C10724
-:1003B0000100D70900C0C1DF50AFE70500C097CFEB
-:1003C000C0070100C109AC06C177010097C1D87709
-:1003D000010012C0C9076A069FAF080404C1C177B3
-:1003E000080013C097CFC177020097C1C1771000F2
-:1003F0000CC09FAF2C0497CFC177040006C0C9077B
-:1004000070069FAF080497C000CF009097CF50545C
-:1004100097C1705C0200020097C1705C0400040088
-:1004200097CF8001C0006000300018000C0006006B
-:100430000000CB09B206CC09B4060B5311C0C902A7
-:10044000CA071C049FAF080497C00AC882080ACFD5
-:1004500082089FAF080497C005C28930826078C1C6
-:10046000009097CF8910095379C2893082087ACFDA
-:10047000C0DF97CFC0DF97CFE70996C09206E709A4
-:1004800098C094060FCFE70996C09206E70998C076
-:100490009406E7099E063001E707F2053201E707F7
-:1004A000100096C0D70900C01702C8099006C837C7
-:1004B0000E00E7772A00920630C09702CA09D606D6
-:1004C000E777200092060EC0F21701001000F22715
-:1004D00000001200E7770A009206CA051EC09702C4
-:1004E000CA09D606F21701000C00F22700000E0020
-:1004F000E7770200920607C0F21701004400F227D6
-:100500000000460006CFF21701006000F22700004D
-:100510006200CA059FAF08030FCF57020902F10915
-:1005200094060C00F1DA0C00C80998065002670224
-:100530009806D1070000C905E7099E069006E7570F
-:100540000000900602C09FAF0602C805E70500C084
-:10055000C0DF97CFD70900C0170017029702C00964
-:1005600092C0E707040090C0CA09D606E70700005A
-:10057000A806E7076A040200C077020008C0F21765
-:1005800001005000F227000052009FCF2406C077E0
-:10059000100006C0F21701005800F22700005A00B0
-:1005A000C077800006C0F21701007000F22700003B
-:1005B0007200C07708001DC1F21701000800F22781
-:1005C00000000A00C077000206C0F21701006400B4
-:1005D000F22700006600C077400006C0F217010055
-:1005E0005C00F22700005E00C077010001C01BCF55
-:1005F0001ACFF21701000000F22700000200C8091C
-:100600003401CA171400D877010005C0CAD9D857D9
-:10061000FF0001C0CAD9E21994C0E2270000E21726
-:100620000100E22700009FAF40069FAFC401E757DB
-:100630000000D2069FA10E0ACA05C805C005E7053D
-:1006400000C0C0DF97CFC809A006086297C0270482
-:10065000A0062752A20603C1E707A006A2069FAF85
-:100660000803E7570000AA0602C027DAAA0697CFB8
-:10067000FFFFFFFFFFFF0000000000000000000080
-:10068000000000000000000000000000000000006A
-:10069000000000000000000000000000000000005A
-:1006A000000000000000000000000000000000004A
-:1006B000000000000000000000000000000000003A
-:1006C00000000000000000003F00000000000000EB
-:1006D000000000000000FFFF01000000000000001B
-:1006E000FFFFFB13E7570080B20006C2E707EE0BDF
-:1006F0001200E707340CB200E707C607F202C80988
-:10070000B400F80702000D00D7090EC0E70700008B
-:100710000EC0C809DE00C8170900C907DA06C007FD
-:100720000400680A00DA7DC1E709C0007C06E70919
-:10073000BE007806E7091000BC06C807D6079FAFC1
-:10074000AE079FAF000AC809DE00000E0F004190FF
-:100750009FDE060044AF2700B2062700B40627003C
-:10076000B606C007740044AF2700D6060800009004
-:10077000C1073A00200001DA7DC19FAFBA09C00766
-:10078000440048AF27007A069FAF960AE7070100AA
-:10079000C006E7050EC097CF49AFE78743000EC0FC
-:1007A000E707FFFFBE069FAFAE0AC007010060AFBC
-:1007B0004AAF97CF00080908110800DA7CC197CF2B
-:1007C0006704CC02C0DF5194B1AF0600C1DFC90994
-:1007D000CC02496275C1C0DFA7CFD6020E0024004B
-:1007E000800422004E05D0000E0AAA003008BE0088
-:1007F0004A0A1000200004006E0402006A04060089
-:10080000000024C0040428C0FEFB1EC0000422C057
-:10081000FFF4C000900900000000FFFF56086008C8
-:10082000D008DA0800090409080932094209500908
-:1008300052095A095A092702CA0697CFE70700004A
-:10084000CA060A0E0100CA570E009FC35A09CA37CA
-:1008500000009FC25A090AD2B2CF1608C809DE00AA
-:1008600007069FCF6C091702C809DE00000E0F00B3
-:1008700041909FDE0600C805305006009FC85A0907
-:10088000270C0200B006C009B2062700B406E7072D
-:100890000000AE0627008006001C06002700B606F2
-:1008A00041906750B0060DC067007E06270C060019
-:1008B0008206E707BC088406C8077E06419051AF50
-:1008C00097CF9FAF480CE709B606B406E709B00614
-:1008D000AE0659AF97CF270C0200AC0659AF97CFA1
-:1008E000090C020009DA49D2C919D606C8077E06E2
-:1008F000E00700006002E0070400D007CC0848DBF6
-:10090000419050AF97CF59AF97CF59AF97CFF0578E
-:100910000600060025C1E7077006800641906700C3
-:100920007E06270C06008206E7078C098406C807A6
-:100930007E06419051AF97CF070C0600C7570600BF
-:100940000FC1C807700615CF000C020000DA40D1B5
-:100950002700C2061ECF1DCF270C0200CC0619CFE0
-:1009600027022001E70708002201E7071300B0C0B3
-:1009700097CF419067007E06E70182062702800636
-:10098000E7078C098406C8077E06C107008050AFC0
-:1009900097CF59AF97CF006005C0E7070000C406A6
-:1009A000A7CF7C069FAF000AE7070100C40649AF46
-:1009B000D70900C007AFE70500C04AAFA7CF7C0644
-:1009C000C007FE7F44AF4000C03700014190C037F0
-:1009D0000800DFDE5006C057100002C2C00710003A
-:1009E00027009A0641909FDE400644AF27009C06F0
-:1009F000C0099A06419000D200D89FDE080044AF9B
-:100A00002700C80697CFE787008428C0E767FFFB69
-:100A100024C097CFE7870100D206E7570000A80659
-:100A200097C19FAF000AE787000622C0E7070000D2
-:100A300090C0E767FEFF3EC0E70726000AC0E787D1
-:100A400001003EC0E707FFFFBE069FAF100B97CF28
-:100A50001700A7AF7806C00527007606E7870100D4
-:100A6000D2069FAF000AE7070C0040C09FAF100BF3
-:100A700000902700A6062700AA06E709B206B406DA
-:100A80002700AE062700AC069FAFAE0AC0070000E5
-:100A90002700B2022700B40227008E06C007060016
-:100AA000C809DE00C8170300C9077006290A00DA62
-:100AB0007DC197CFD70900C0C1DF009027009606FF
-:100AC000E707960698062700A006E707A006A206F5
-:100AD0002700A6062700900627009E06C8099C0648
-:100AE000C1099A06C907A40611020902C8174006DF
-:100AF00001DA7AC15194C809C806C907C606C109F6
-:100B00009A0611020902C817080001DA7AC1519445
-:100B1000E70500C097CFE7570000760697C09FAF64
-:100B20000400E709BE06BA06E757FFFFBA0604C18C
-:100B3000E707100BB80697CFE7173200BA06E7674A
-:100B4000FF07BA06E707460BB80697CFE75700003E
-:100B5000C00623C0E707040090C0E707008080C0FC
-:100B6000E707000080C0E707008080C0C0070000E2
-:100B7000C0070000C0070000E707000080C0E707CB
-:100B8000008080C0E707008040C0C0070000E70782
-:100B9000000040C0E707000080C0E707040090C0E5
-:100BA000E707000240C0E7070C0240C0E70700006B
-:100BB000C006E7070000B806E7070000D206D7091D
-:100BC00000C0C1DF9FAF3402E70500C09FAFC40182
-:100BD00097CFD70900C0170017029702E757000008
-:100BE000A80606C0C00992C0C07709029FC15C0573
-:100BF0009FCF3206D7090EC0E70700000EC09FAF97
-:100C0000020CE7050EC097CFD70900C01702C8092C
-:100C1000B0C0E767FE7FB0C0C87700209FC164EB1B
-:100C2000E7570000C8029FC180EBC899CA02C86795
-:100C300004009FC196EB9FCF4CEBE7070000A6C0D6
-:100C4000E709B0C0C802E7070300B0C097CFC009EA
-:100C5000B006C037010097C9C909B2060200419029
-:100C60004802C91706009FAF08049FA2720C02DA5F
-:100C700077C1416071C197CF170257024304210425
-:100C8000E00043042104E00043042104E000C10724
-:100C90000100C905C80597CFE70701008E06C80700
-:100CA0008606E70700008606E70710088806E707BC
-:100CB00004008A06E707BC0C8C06C107038050AF0E
-:0C0CC00097CFE70700008E0697CF0000DA
-:00000001FF
diff --git a/firmware/kaweth/new_code_fix.bin.ihex b/firmware/kaweth/new_code_fix.bin.ihex
deleted file mode 100644
index fb35d3d0c924..000000000000
--- a/firmware/kaweth/new_code_fix.bin.ihex
+++ /dev/null
@@ -1,40 +0,0 @@
-:10000000B6C3AABBCCDD0200080028002C003400D7
-:100010003C0040004800540058005E006400680046
-:100020006E006C00720076007C00800086008A0002
-:100030009000940098009E00A600AA00B000B400B2
-:10004000B800C000C600CA00D000D400D800E0004C
-:10005000DE00E800F000FC0004010A0118012201A2
-:1000600028013A013E017E0198019C01A201AC01E8
-:10007000B201BA01C001C801D001D601F401FC01EE
-:10008000080216021A0222022A022E023E0244022C
-:100090004A025002640262026C02720286028C0200
-:1000A00090029E02BC02D002D802DC02E002E8020A
-:1000B000E602F402FE0204030C0328037C0390030F
-:1000C00094039C03A203C003D003D403EE03FA03FA
-:1000D000FE032E0432043C0440044E0476047C04E7
-:1000E00084048A048E04A604B004B804BE04D204B6
-:1000F000DC04EE0410051A0524052A05360534052E
-:100100003C05420564056A056E058605220626063D
-:100110002C06300642064A064E06560654065A0675
-:1001200060066606E806EE06F406160726072C07A4
-:10013000320736073A073E07520756075A07640741
-:1001400076077A07800784078A079E07A207DA07DF
-:10015000DE07E207E607EA07EE07F207F6070E08F2
-:10016000160818081A081C081E0820082208240867
-:10017000260828082A082C082E0832083A084608BB
-:100180004E0854085E0878087E08820886088C08A5
-:10019000900898089E08A408AA08B008AE08B408F9
-:1001A000BE08C408C208CA08C808D408E408E80899
-:1001B000F608140912091A092009260924092A092E
-:1001C0003E094C0956097009740978097E097C09B1
-:1001D000820998099C09A009A609B809DC09E8095F
-:1001E000EC09FC09120A180A1E0A420A460A4E0ABB
-:1001F000540A5A0A5E0A680A6E0A720A780A760A6D
-:100200007C0A800A840A940AA40AB80ABE0ABC0AB4
-:10021000C20AC80AC60ACC0AD00AD40AD80ADC0A1A
-:10022000E00AF20AF60AFA0A140B1A0B200B1E0B4C
-:10023000260B2E0B2C0B360B3C0B420B400B4A0BA8
-:10024000AA0BB00BB60BC00BC80BDA0BE80BEC0B10
-:10025000FA0B4A0C540C620C660C960C9A0CA00C0F
-:0E026000A60CA40CAC0CB20CB00CC00C000030
-:00000001FF
diff --git a/firmware/kaweth/trigger_code.bin.ihex b/firmware/kaweth/trigger_code.bin.ihex
deleted file mode 100644
index c3e1658c2803..000000000000
--- a/firmware/kaweth/trigger_code.bin.ihex
+++ /dev/null
@@ -1,13 +0,0 @@
-:10000000B6C3AABBCCDDC807A000F0075E0006009F
-:10001000F0070A000800F00900000200E7073600B8
-:100020000000F00700000400E70750C310C0F0090B
-:100030000EC00000E78701000EC097CFD70900C0AF
-:100040001702C807A000E71750C310C030D804003B
-:10005000305C08000400B0C00600C805E70500C019
-:10006000C0DF97CF49AFC007000060AF4AAF000CB8
-:100070000C0040D2001C0C0040D230000800F007F9
-:1000800000000400F0078600060067CF270C02007E
-:100090000000270C00000EC049AF64AFC00700008D
-:1000A0004BAF4AAF5ACF0000000000000000000034
-:0600B000940005000000B1
-:00000001FF
diff --git a/firmware/kaweth/trigger_code_fix.bin.ihex b/firmware/kaweth/trigger_code_fix.bin.ihex
deleted file mode 100644
index 7712f73faeda..000000000000
--- a/firmware/kaweth/trigger_code_fix.bin.ihex
+++ /dev/null
@@ -1,3 +0,0 @@
-:10000000B6C3AABBCCDD0200060018003E0080008B
-:060010009800AA000000A8
-:00000001FF
diff --git a/firmware/keyspan/mpr.HEX b/firmware/keyspan/mpr.HEX
deleted file mode 100644
index a53ba10b2358..000000000000
--- a/firmware/keyspan/mpr.HEX
+++ /dev/null
@@ -1,104 +0,0 @@
-:0300330002001AAE
-:04001A0053D8EF3296
-:100003008E568F57E5571557AE56700215564E60EC
-:0700130005120FA280EE228E
-:0300230002004692
-:10004600C0E0C083C082C086758600C0D075D00867
-:1000560030990E300B07A20E929B853699C299D223
-:10006600122012030202F9C2123003197E7E7F406B
-:10007600751A7E751B407517007E7D7FC075187DCD
-:100086007519C080177E7D7FC0751A7D751BC0757A
-:1000960017017E7E7F4075187E751940200B03027E
-:1000A6000184E53AC39553503C200C342009319025
-:1000B6007F9BE055387029301012AF3A053AE51BA0
-:1000C6002FF582E4351AF583E013920EAF3A053A1E
-:1000D600E51B2FF582E4351AF583E0F5360202F7C3
-:1000E600C20B0202F7300311907FC7E4F0A3E0547D
-:1000F60002F51DA3E0F51C8011907FC9E4F0907F06
-:03004300020F00A9
-:03000000020026D5
-:0C002600787FE4F6D8FD75815A020A3399
-:40010600C6E05402F51DA3E0F51CE51724FF9203300D0DC20D907FBB7401F0C20B0202F7E51D6005C20B0202F7851C53851982851883E013920D7512FF200C3A2009379082
-:400146007F9BE05538702F30101C851982851883A3E013920E851982851883A3A3E0F536753A030202F7753A02851982851883A3E0F5360202F7753A01C20B0202F73003FE
-:400186000E907FC6E05402F51DA3E0F51C800C907FC8E05402F51DA3E0F51CE53AC395535003020268E51D6007C214C2050202F7851C53851B82851A83E013920D7512FF61
-:4001C600300C03020260300903020260907F9BE05538600302026030101B851B82851A83A3E013929B851B82851A83A3A3E0F599753A03800D851B82851A83A3E0F5997575
-:400206003A02E53AC395534026300307907FC7E4F08005907FC9E4F0E51724FF9203200D030202F7C20D907FBB7401F00202F7301012AF3A053AE51B2FF582E4351AF58394
-:40024600E013920EAF3A053AE51B2FF582E4351AF583E0F536D20B0202F7753A01C2140202F7300C030202F53009030202F5907F9BE055387079301012AF3A053AE51B2FF2
-:40028600F582E4351AF583E013929BAF3A053AE51B2FF582E4351AF583E0F599E53AC395534022300307907FC7E4F08005907FC9E4F0E51724FF9203300D36C20D907FBB0E
-:4002C6007401F0802C301012AF3A053AE51B2FF582E4351AF583E013920EAF3A053AE51B2FF582E4351AF583E0F536D20B8002C214D201209803020435C298200203020383
-:40030600A2201527AF39053974802FF582E4347EF583E599F030104DAF39053974802FF582E4347EF583E598F0803A859955E555B54704D209802EE555B54604C20980251C
-:40034600AF39053974802FF582E4347EF583E555F0301011AF39053974802FF582E4347EF583E598F0D20FE539C395435003020433907FB8E030E116E539C39440500302F5
-:40038600043315391539052B433401020433907FB7E539F0753900C202020433201527AF39053974002FF582E4347EF583E599F030104DAF39053974002FF582E4347EF594
-:4003C60083E598F0803A859955E555B54704D209802EE555B54604C2098025AF39053974002FF582E4347EF583E555F0301011AF39053974002FF582E4347EF583E598F0EA
-:40040600D20FE539C395434024907FB6E030E112E539C39440401615391539052B433401800B907FB9E539F0753900D202D201300105C201020056D0D0D086D082D083D02F
-:40044600E032907FBCE020E154E5346050E531704CE53430E10BE4F52F753401753102800EA208E433F52FC208E4F534753110E4F5567E007B0074242556F9EE3400FA12D8
-:400486000C79FF74002556F582E4347DF583EFF00556E556B40CDB907FBD740CF0907FCAE030E1030205D1E4F55674402556F582E4347DF583E0FFE5567C007B00243BF903
-:4004C600EC3400FAEF120C920556E556B418DBE53B601175C92075C836853CCA853DCBE4907F9FF0E53E139210929F853F38E540139215E5416009907F98E054FBF0800744
-:40050600907F98E04404F0E5426009907F98E0547FF08007907F98E04480F0E548600BC20CC209907F95E04402F0E549600CD209433401907F95E04402F0E54A600DC2AFBB
-:40054600C20BD200E4F553F53AD2AFE54B6005301502D209E54C6015907F95E054FDF0907F9EE04402F0907F98E054FDF0E54D600AD29CC298752C0175311EE54E6007C227
-:400586009CE4F539F52CE54F6003E4F539E5506002D207E551600AE54D7002F531E5514234E552601F907FD77411F07431F07412F07432F07413F07433F07414F07434F067
-:4005C600D203D202D208E4907FCBF0A20CE433FF652960058F29433401A209E433FF652A60058F2A433401907F9BE0FF54086408F55765256006855725433401EF5410643A
-:4006060010F55765266006855726433401EF54406440F55765276006855727433401EF54206420F55765286006855728433401907F9AE054406440F557652E600685572E5B
-:40064600433401300735C2AF300218907FB8E020E127E5396009907FB7F0E4F539C202C2078016907FB6E020E10FE5396009907FB9F0E4F539D202C207D2AF20053D3003DB
-:400686001E907FC6E020E133907E40E013920D753A01907FC7E0F553D2057512FF801C907FC8E020E115907DC0E013920D753A01907FC9E0F553D2057512FF2014332000E6
-:4006C60006E53A6553702A30051A300309E4907FC7F0C2038007E4907FC9F0D203C205E4F553F53A300D0AC20DC200907FBB7401F03014030207BF2005030207BF300C0314
-:400706000207BF3009030207BF907F9BE0553860030207BF30030C7E7E7F4075587E755940800A7E7D7FC075587D7559C0301012AF3A053AE5592FF582E43558F583E0137C
-:40074600921AAF3A053AE5592FF582E43558F583E0F557E53AC39553502A301012AF3A053AE5592FF582E43558F583E013920EAF3A053AE5592FF582E43558F583E0F53688
-:40078600D20B8015C20B300309E4907FC7F0C2038007E4907FC9F0D203301004A21A929BD214C2AF855799200B0D300D0AC20DC200907FBB7401F0D2AF22907FE9E0120C70
-:4007C600A4091C0009890109E60307E306090D0809010908E90A08F80B00000A24907FEBE024FE601C14700302087924026003020A24740D907FD4F07487907FD5F0020AE6
-:400806002B907FEAE0B401047F0280027F037582D875830DEFF07582D175830DF07582CA75830DF07582C375830DF0907FEAE00475829E75830DF0907FEFE0FE907FEEE07B
-:400846007C002400F55AEC3EF55975150D75169975829B75830DE0751300F514D3E514955AE51395594006855913855A14120BBA020A2B907FEAE0700B7556FF75570D7503
-:4008860058DC802D907FEAE0B4010B7556FF75570D7558E0801B907FEAE0B4020B7556FF75570D7558F080097556FF75570E75581E907FEEE0755900F55AAE57AF588E1512
-:4008C6008F168F828E83E0FEA3E08E13F514D3955AE51395594006855913855A14120BBA020A2B907F00E511F0907FB57401F0020A2B907FEAE0F511020A2B120C24907F84
-:40090600EAE0F510020A2B907F00E510F0907FB57401F0020A2B907FE8E0247F602714603424026003020A24A216E433FF25E0FFA218E4334F907F00F0E4A3F0907FB57455
-:4009460002F0020A2BE4907F00F0A3F0907FB57402F0020A2B907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F00B
-:40098600020A2B907FE8E024FE601724026003020A2B907FEAE064016003020A24C216020A2B907FEAE07076907FECE0F45480FFC4540FFFE054072F25E024B4F582E4348D
-:4009C6007FF583E4F0907FECE05480FF131313541FFFE054072F907FD7F0E04420F08045907FE8E024FE601024027039907FEAE06401702AD216802D907FEAE07020907F77
-:400A0600ECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08007907FB4E04401F0907FB4E04402F022C210E4F510F534C209C20CC20BC214C20DC215A5
-:400A4600C211C207C212C20FC208F535F539F553F53AF533F530F52FF52EF52DF52CF52BF52AF529F528F527F526F525F524C205C217C219C216C218C204D213C206C20178
-:400A8600907F92E054FDF0D2E843D820907FDE7401F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE04401F0907FAEE0440FF0907FAC740EF0D2AFD2BCD247
-:400AC6001A120F7DC21730040312044830042A300627C206E51260161512907FD8E030E6047F0080027F20907F96EFF08006907F967420F0120B1480CD301707C217120741
-:400B0600C080C33019C0C219120EDC80B922E53160021531E53960556535704BE533F460020533E533C395444043C2AF30021B907FB8E020E12D907FB7E539F0C202E4F5AA
-:400B460039F533F5357512FF8019907FB6E020E112907FB9E539F0D202E4F539F533F5357512FFD2AF8006853935E4F533E52C6030200F07907F9BE030E00FE52D6006E497
-:400B8600F52D433401E4F5308014E530D39545500DE530B54506752D014334010530C20F22907FD9E030E2047F0080027F20907F96EFF022E51445136057AE13AF14D3EF0F
-:400BC6009440EE940040047E007F40C3E5149FF514E5139EF513E4FDEDC39FE49E501F851682851583E0FC74002DF582E4347FF583ECF00D0516E5167002051580DA907FC4
-:400C0600A97401F0907FACE04401F0907FB5EFF022907FACE054FEF0E4907FB5F022E4907F93F0907F9C7430F0907F967420F0907F947401F0907F9D74FFF0907F977486DF
-:400C4600F0907F957403F0907F9E7484F0907F98F0E4907FC7F0907FC9F0907FCBF075984043A810907FDE741FF0907FDF740FF0D20422BB010689828A83E0225002E722C3
-:400C8600BBFE02E32289828A83E49322BB010689828A83F0225002F722BBFE01F322D083D082F8E4937012740193700DA3A393F8740193F5828883E4737402936860EFA367
-:400CC600A3A380DFE4907F95F0907F94F0907F93F0907F9DE04402F0907F97E04442F0907F9C7410F0E4907F96F0907F9D74BEF03016047F8080027F00907F97EFF0E49045
-:400D06007F95F0907F9EF0907F98F022C0E0C0F0C083C082C085C084C086758600C0D075D0085391EF907FA97401F0120BBAD0D0D086D084D085D082D083D0F0D0E032C06A
-:400D4600E0C083C082C085C084C086758600907FC4E4F05391EF907FAB7404F0D086D084D085D082D083D0E03200000000000000000000000000000000000000000000001C
-:400D86000012011001FFFFFF40CD061C010100010200020902430001010080320904000007FF00000007050102400000070502024000000705030240000007058102400002
-:400DC600010705820240000107058302400001070584024000010403090410034B00650079007300700061006E002E034B00650079007300700061006E00200055005000A3
-:400E0600530048003100310032002D00530065007200690061006C0022035500530041002D003500330020003200300030003200610070007200320036000000C0E0C083DB
-:400E4600C082C085C084C0867586005391EF907FAB7402F0D206D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2175391EF907FAB7401F0D086D01F
-:400E860084D085D082D083D0E032C0E0C083C082C085C084C086758600D2195391EF907FAB7408F0D086D084D085D082D083D0E032C0E0C083C082C085C084C08675860084
-:400EC6005391EF907FA97402F0D086D084D085D082D083D0E032120CCA120FB3907FD6E030E712E04401F07F0D7E00120003907FD6E054FEF0120C242200020E6900020EA3
-:400F06004200020D4500020E9000020F1000020F1400020D1200020F1C00020EB700020F2400020F3300020F2C00020F58C0E0C083C082C085C084C0867586005391EF90A9
-:400F46007FA97404F0D086D084D085D082D083D0E032C0E0C083C082C085C084C0867586005391EF907FA97408F0D086D084D085D082D083D0E032907FD6E054FBF0E044C1
-:3D0F860008F0301A04E04402F07FF47E01120003907FD6E054F7F0E04404F0227400F58690FDA57C05A3E582458370F922907FD6E04480F04387010000000000222C
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
-
-static char theFirmwareDate53[] =
- "04/26/2002 02:47p 11,570 USA53";
-
diff --git a/firmware/keyspan/usa18x.HEX b/firmware/keyspan/usa18x.HEX
deleted file mode 100644
index a9ff70eadfe7..000000000000
--- a/firmware/keyspan/usa18x.HEX
+++ /dev/null
@@ -1,141 +0,0 @@
-:030033000212F7BF
-:10000300E4907F93F0907F9C7430F0E4907F96F0BF
-:10001300907F94F0907F9D74FFF0E4907F97F09031
-:0F0023007F95F0907F9E7407F0E4907F98F02215
-:1000460030091812131BEFC3953C40030200D890E9
-:100056007FBF7401F0C209C200807730033B907FF6
-:10006600C6E020E16D12131BEFC394405064907EEE
-:1000760040E0139209907FC7E014F5192000116043
-:100086000FF5087E7E7F41750C7E750D41120CBA08
-:10009600C203E4907FC7F08039907FC8E020E13248
-:1000A60012131BEFC394405029907DC0E0139209B0
-:1000B600907FC9E014F519200011600FF5087E7DC8
-:1000C6007FC1750C7D750DC1120CBAD203E4907F09
-:1000D600C9F0907FB6E030E1030201601211D68FBD
-:1000E600191213278F36E519C3953A500F1212EBE2
-:1000F600EF30E008E53620E703300B5EC20BE5196A
-:0C003600907F987410F090C000E0FF2252
-:03004300021300A5
-:03000000020E00ED
-:400106006058B48003433602E53630E726E519D3942040037519208519087E7E7F80750C7E750D80AF36120F4BE51925E0907FB7F08027E519D3943F400375193F851908D4
-:40014600907E80E536F07E7E7F81750C7E750D81120CDFE51904907FB7F0907FCEE030E1062005030203C1C205E4F51874402518F582E4347CF583E0FFE5187C007B017AF1
-:400186007E79002400F9EC347EFAEF120ED20518E518B420D7907E00E06068907E03E060247F01E4FD1211B17F037DCD1211B1434680907F987414F090C000E546F0E490E0
-:4001C6007E13F08030907E01E0FF121035907E02E0FF12105B7F01907E11E0FD1211B17F037D071211B1434680907F987414F090C000E546F0907F987412F0E5404406903E
-:40020600C000F0907E03E07006907E13E07008E4907E13F07525FF907E05E06012A3E0543FF544907F987413F090C000E544F0907E07E0602BA3E0600543428080035342DA
-:400246007F5342FC907E09E06011434202A3E0FF1210A7907E0BE0FF1210CDAF42121081907E03E0600853427FAF42121081907E0CE06018A3E0600543460280035346FDB4
-:40028600907F987414F090C000E546F0907E0EE06018A3E0600543460180035346FE907F987414F090C000E546F0907E12E0F53AA3E013920DA3E0F53CA3E060054346108B
-:4002C60080035346EF907F987414F090C000E546F0907E16E060325344BF907F987413F0E544547F90C000F0907F987411F01212DFEF54FE90C000F0533EFDE4FFAD3E120F
-:4003060011B1E4F52AF529D207907E17E0600F433E02E4FFAD3E1211B1752901D207907E18E06010907F987412F0E540440490C000F0D200907E19E06011434440907F98F2
-:400346007413F0E544547F90C000F0907E1AE0600F533EFEE4FFAD3E1211B1752B01D207907E1BE0600F433E01E4FFAD3E1211B1E4F52BD207907E1CE0600E907F98741284
-:40038600F0E540440290C000F0907E1DE06002D20B907E1EE06008752C01E4F538D207907E1FE06011907FD77411F07431F07415F07435F0D203E4907FCFF0301A52E53892
-:4003C60060021538201349E513D3940040041513803E75130A301B02D2131212DFEF5401F519652A600585192AD207121333EF5480F51965266005851926D207300D11127F
-:400406001333EF5410F51965256005851925D207201B030207EC300A1812136FEFC3953D40030204AE907FC17401F0C20AC200807730043B907FCAE020E16D12136FEFC35A
-:4004460094405064907D40E013920A907FCBE014F519200011600FF5087E7D7F41750C7D750D41120D04C204E4907FCBF08039907FCCE020E13212136FEFC39440502990BC
-:400486007CC0E013920A907FCDE014F519200011600FF5087E7C7FC1750C7C750DC1120D04D204E4907FCDF0907FBAE030E1030205361212208F1912137B8F37E519C3952B
-:4004C6003B500F121357EF30E008E53720E703300C5EC20CE5196058B48003433702E53730E726E519D3942040037519208519087E7D7F80750C7D750D80AF37120F84E503
-:400506001925E0907FBBF08027E519D3943F400375193F851908907D80E537F07E7D7F81750C7D750D81120D29E51904907FBBF0907FD0E030E106200603020797C206E4F8
-:40054600F51874C02518F582E4347BF583E0FFE5187C007B017A7E79202420F9EC347EFAEF120ED20518E518B420D7907E20E06068907E23E060247F01E4FD1211FB7F0329
-:400586007DCD1211FB434780907F98740CF090C000E547F0E4907E33F08030907E21E0FF121119907E22E0FF12113F7F01907E31E0FD1211FB7F037D071211FB4347809048
-:4005C6007F98740CF090C000E547F0907F98740AF0E541440690C000F0907E23E07006907E33E07008E4907E33F0752EFF907E25E06012A3E0543FF545907F98740BF090EB
-:40060600C000E545F0907E27E0602BA3E06005434380800353437F5343FC907E29E06011434302A3E0FF121165907E2BE0FF12118BAF431210F3907E23E0600853437FAFFE
-:40064600431210F3907E2CE06018A3E0600543470280035347FD907F98740CF090C000E547F0907E2EE06018A3E0600543470180035347FE907F98740CF090C000E547F0D4
-:40068600907E32E0F53BA3E013920EA3E0F53DA3E0600543471080035347EF907F98740CF090C000E547F0907E36E060325345BF907F98740BF0E545547F90C000F0907F79
-:4006C600987409F012134BEF54FE90C000F0533FFDE4FFAD3F1211FBE4F533F532D208907E37E0600F433F02E4FFAD3F1211FB753201D208907E38E06010907F98740AF043
-:40070600E541440490C000F0D200907E39E06011434540907F98740BF0E545547F90C000F0907E3AE0600F533FFEE4FFAD3F1211FB753401D208907E3BE0600F433F01E4E9
-:40074600FFAD3F1211FBE4F534D208907E3CE0600E907F98740AF0E541440290C000F0907E3DE06002D20C907E3EE06008753501E4F539D208907E3FE06011907FD7741389
-:40078600F07433F07416F07436F0D204E4907FD1F0301A52E53960021539301349E513D3940040041513803E75130A301B02C21312134BEF5401F51965336005851933D279
-:4007C60008121387EF5480F519652F600585192FD208300E11121387EF5410F519652E600585192ED208301A2A907FD2E020E123907B40E06009E0F515907B42E0F5169035
-:400806007B41E06009907FD77417F07437F0E4907FD3F0907FC2E030E103020920E50A7040300739E5387035C207F5187E007B0074242518F9EE3400FA120E8CFF748025BD
-:4008460018F582E4347BF583EFF00518E518B409DB907FC37409F0753810E4F52C750A0122E50A64017040300839E5397035C208F5187E007B00742D2518F9EE3400FA1297
-:400886000E8CFF74802518F582E4347BF583EFF00518E518B409DB907FC37409F0753910E4F535750A0222E50A6402703630142FC214F5187E007B00740E2518F9EE340083
-:4008C600FA120E8CFF74802518F582E4347BF583EFF00518E518B405DB907FC37405F0750A0322E51560301515E4F5187E007B0074142518F9EE3400FA120E8CFF748025F2
-:4009060018F582E4347BF583EFF00518E518B403DB907FC37403F0E4F50A22907FE9E0120EE40A08000A7C010AE80309440609FB0809F50909DD0A09EC0B00000B37907F3D
-:40094600EBE024FE6019146061240260030209D37419907FD4F07400907FD5F0020B3E907FEAE070047F0280027F03758282758319EFF075827B758319F0758274758319B2
-:40098600F0758266758319F0758258758319F0907FEAE004758217758319F07419907FD4F07412907FD5F0020B3E907FEAE0FF120F0AEA49600DEA907FD4F0E9907FD5F085
-:4009C600020B3E907FB4E04401F0020B3E907FB4E04401F0020B3E907F00E509F0907FB57401F0020B3E907FEAE0F509020B3E120B46020B3E907F007401F0907FB5F00205
-:400A06000B3E907FE8E0247F60241460312402705BA210E433FF25E0FFA216E4334F907F00F0E4A3F0907FB57402F0020B3EE4907F00F0A3F0907FB57402F0020B3E907F04
-:400A4600ECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F0020B3E907FB4E04401F0020B3E907FE8E024FE601D24020F
-:400A86006003020B3E907FEAE0B40105C210020B3E907FB4E04401F0020B3E907FEAE07038907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E4F0907FB6
-:400AC600ECE05480FF131313541FFFE054072F907FD7F0E04420F0805F907FB4E04401F08056907FE8E024FE60182402704A907FEAE0B40104D210803F907FB4E04401F049
-:400B06008036907FEAE07020907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F08007907FB4E04401F0907FB4E04402F022D4
-:400B4600E4907F93F0907F9C7430F0E4907F96F0907F9574C0F0907F9E743FF0907F987418F0E4F58E907FDF74FFF0907FDEF0E4F5247518017B0074242518F9E43400FA8B
-:400B8600E4120ED20518E518B409EA753A01E4F538F513F536C207C20BC205C200C209C213907F987413F075440390C0007403F07F0CE4FD1211B17F108F42121081907F02
-:400BC600987412F07F018F40EF440690C000F0907F987414F075468090C0007480F00FE4FD1211B1E4FF7EA3AD068D3E1211B1907F987411F090C000E4F07F057D7F12118E
-:400C0600B17F0112126A7F037D071211B1201B03020CB7752D017518017B00742D2518F9E43400FAE4120ED20518E518B409EA753B01E4F539F513F537C208C20CC206C2CD
-:400C460000C20AC213907F98740BF075450390C0007403F07F0CE4FD1211FB7F108F431210F3907F98740AF07F018F41EF440690C000F0907F98740CF075478090C000744E
-:400C860080F00FE4FD1211FBE4FF7EA3AD068D3F1211FB907F987409F090C000E4F07F057D7F1211FB7F0112128B7F037D071211FBD21222907F987410F0AF08E50DF582A5
-:400CC600E50CF583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987410F0AF08E50DF582E50CF583C2AF058690C000E00586F0A30586DFF70586D2AF22907F20
-:400D0600987408F0AF08E50DF582E50CF583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987408F0AF08E50DF582E50CF583C2AF058690C000E00586F0A3055C
-:400D460086DFF70586D2AF227400F58690FDA57C05A3E582458370F922907FD6E04480F0438701000000000022D219907F92E04402F0907FAEE0FFD39210E433FEEF4EF089
-:400D8600D2E843D820907FDE7401F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE04401F0907FAEE0440DF0D2AFD21A121245C211E4F50BF513C217C212D4
-:400DC600907FA104F0907FD8E065176010301205D21A120046907FD8E0F5178008301205C21A120046301107C21112092180D63018D3C21812139380CC22787FE4F6D8FDC7
-:400E0600758147020E47020D6FE493A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F4420C8834004F456800146F6DFE4800B01020408102040F5
-:400E4600809012ACE47E019360BCA3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE493A3F8E493A3C8C582C8CAC583CAF0A3C8C582C8CAC583CA1E
-:400E8600DFE9DEE780BEBB010689828A83E0225002E722BBFE02E32289828A83E49322BB010CE58229F582E5833AF583E0225006E92582F8E622BBFE06E92582F8E222E5B8
-:400EC6008229F582E5833AF583E49322BB010689828A83F0225002F722BBFE01F322D083D082F8E4937012740193700DA3A393F8740193F5828883E4737402936860EFA3C1
-:400F0600A3A380DF8F18E4F519751AFF751B19751C86AB1AAA1BA91C900001120EA5B4031DAF190519EFB5180122120E8C7E0029FFEE3AA907751AFFF51B891C80D47B00A5
-:400F46007A007900228F1A050DE50DAE0C7002050C14F5828E83E51AF0120036050DE50DAC0C7002050C14F5828C83EFF01508E508600A1213278F1AEF423680CA228F1AFC
-:400F8600050DE50DAE0C7002050C14F5828E83E51AF012133F050DE50DAC0C7002050C14F5828C83EFF01508E508600A12137B8F1AEF423780CA22C0E0C083C082C085C088
-:400FC60084C086758600907FC4E4F05391EF907FAB7404F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2115391EF907FAB7401F0D086D084D0C6
-:4010060085D082D083D0E032C0E0C083C082C085C084C086758600D2185391EF907FAB7408F0D086D084D085D082D083D0E032907F987413F090C00074BFF0907F9874108A
-:40104600F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF0907F987411F090C000EFF0907F987413F0E544547F90C000F022907F98741349
-:40108600F090C00074BFF0907F987412F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF0907F987414F090C000EFF0907F987413F0E544D9
-:4010C600547F90C000F022907F987413F090C00074BFF0907F987416F090C000EFF0907F987413F0E544547F90C000F022907F98740BF090C00074BFF0907F98740AF0902A
-:40110600C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907F987408F090C000EFF0907F98740BF0E545547F90C000F022907F98740BF090AF
-:40114600C00074BFF0907F987409F090C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907F98740CF090C000EFF0907F98740BF0E545547FEC
-:4011860090C000F022907F98740BF090C00074BFF0907F98740EF090C000EFF0907F98740BF0E545547F90C000F022907F987413F0E544547F90C000F0907F987417F09075
-:4011C600C000EFF0907F987415F090C000EDF02212130F8F1A12130F8F1BE51A651B601212130F8F1AE51A651B600712130F8F1B80E8AF1A22907F98740BF0E545547F9098
-:40120600C000F0907F98740FF090C000EFF0907F98740DF090C000EDF0221213638F1A1213638F1BE51A651B60121213638F1AE51A651B60071213638F1B80E8AF1A2290C8
-:401246007FD6E054FBF0E04408F0301A04E04402F07FF47E011212C8907FD6E054F7F0E04404F022AE07E4FFE53E547FFD1211B1907F987411F090C000EEF0E4E53E4480E8
-:40128600FD1211B122AE07E4FFE53F547FFD1211FB907F987409F090C000EEF0E4E53F4480FD1211FB22050E02000000000314030000C111C118C195C110C116010A00C19C
-:4012C6001B008E188F19E5191519AE18700215184E6005120D4E80EE22907F987411F090C000E0FF22907F987412F090C000E0FF2253D8EF320000000000020FE70002130A
-:401306000400020FBD0002100E907F987413F090C000E0FF22907F987414F090C000E0FF22907F987415F090C000E0FF22907F987416F090C000E0FF22907F987408F09050
-:40134600C000E0FF22907F987409F090C000E0FF22907F98740AF090C000E0FF22907F98740BF090C000E0FF22907F98740CF090C000E0FF22907F98740DF090C000E0FFC5
-:4013860022907F98740EF090C000E0FF22120003120D5F120B4622000000000000000000000000000000000000000000000000000000000000000000000000000000000083
-:4013C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7
-:4014060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A6
-:401446000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066
-:401486000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026
-:4014C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6
-:4015060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A5
-:401546000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065
-:401586000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025
-:4015C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5
-:4016060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4
-:401646000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064
-:401686000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024
-:4016C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4
-:4017060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3
-:401746000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063
-:401786000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023
-:4017C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3
-:4018060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2
-:401846000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062
-:401886000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022
-:4018C6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012011001FF00BF
-:401906000040CD06120100000102000209027400010100A032090400000EFF0000000705010240000007050202400000070503024000000705040240000007050502400074
-:4019460000070506024000000705070240000007058102400001070582024000010705830240000107058402400001070585024000010705860240000107058702400001F3
-:401986000403090448034B00650079007300700061006E002C002000610020006400690076006900730069006F006E0020006F006600200049006E006E006F005300790040
-:4019C6007300200049006E0063002E0036034B00650079007300700061006E0020005500530042002000530065007200690061006C002000410064006100700074006500F9
-:141A06007200100330003000300030003000300030000000F7
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa19.HEX b/firmware/keyspan/usa19.HEX
deleted file mode 100644
index c5d1496e8714..000000000000
--- a/firmware/keyspan/usa19.HEX
+++ /dev/null
@@ -1,101 +0,0 @@
-:0A002600120DBF120F47120D6B22DE
-:0300330002001AAE
-:04001A0053D8EF3296
-:100003008E138F14E5141514AE13700215134E607E
-:0700130005120F3680EE22FA
-:0300230002004692
-:10004600C0E0C083C082C086758600C0D075D00867
-:1000560030990E300807A20B929B853599C299D22A
-:100066000F200F03020431C20F20020302025620A2
-:100076000803020127E537C39550503E2009362074
-:100086000633907F9BE030E303200E29300D12AF3C
-:1000960037053774402FF582E4347EF583E01392FA
-:1000A6000BAF37053774402FF582E4347EF583E0D5
-:1000B600F53502042FC20802042F907FC7E4F0C270
-:1000C60002300A0CC20A907FBB04F0C20802042F59
-:1000D600907FC8E030E105C20802042F907FC9E096
-:1000E600F550907DC0E013920A20092D20062A9033
-:1000F6007F9BE030E303200E20300D11907DC1E0A0
-:03004300020F00A9
-:03000000020C618E
-:4001060013920BA3E0F53575370302042F753702907DC1E0F53502042F753701C20802042FE537C3955050030201CF907FC6E030E107C210C20302042F907FC7E0F5509004
-:400146007E40E013920A3009030201C720067220006F907F9BE030E303200E65300D10907E41E013929BA3E0F5997537038009907E41E0F599753702E537C39550401790B1
-:400186007FC7E4F0C202200A0302042FC20A907FBB04F002042F300D12AF37053774402FF582E4347EF583E013920BAF37053774402FF582E4347EF583E0F535D20802045D
-:4001C6002F753701C21002042F300903020251200679907F9BE030E303200E6F300D12AF37053774402FF582E4347EF583E013929BAF37053774402FF582E4347EF583E046
-:40020600F599E537C395504017907FC7E4F0C202200A0302042FC20A907FBB04F002042F300D12AF37053774402FF582E4347EF583E013920BAF37053774402FF582E43483
-:400246007EF583E0F535D20802042FC21002042F200803020308E537C39550503E200936200633907F9BE030E303200E29300D12AF37053774C02FF582E4347DF583E013DE
-:40028600920BAF37053774C02FF582E4347DF583E0F53502042FC20802042F907FC9E4F0D202300A0CC20A907FBB04F0C20802042F907FC6E030E105C20802042F907FC765
-:4002C600E0F550907E40E013920A20092D20062A907F9BE030E303200E20300D11907E41E013920BA3E0F53575370302042F753702907E41E0F53502042F753701C20802EF
-:40030600042FE537C3955050030203B0907FC8E030E107C210C20302042F907FC9E0F550907DC0E013920A3009030203A820067220006F907F9BE030E303200E65300D1034
-:40034600907DC1E013929BA3E0F5997537038009907DC1E0F599753702E537C395504017907FC9E4F0D202200A0302042FC20A907FBB04F002042F300D12AF37053774C0F5
-:400386002FF582E4347DF583E013920BAF37053774C02FF582E4347DF583E0F535D20802042F753701C21002042F30090302042D200674907F9BE030E303200E6A300D128E
-:4003C600AF37053774C02FF582E4347DF583E013929BAF37053774C02FF582E4347DF583E0F599E537C395504013907FC9E4F0D202300A35C20A907FBB04F0802C300D12CC
-:40040600AF37053774C02FF582E4347DF583E013920BAF37053774C02FF582E4347DF583E0F535D2088002C210D21220980302056DC2982001030204DA201127AF360536F3
-:4004460074802FF582E4347EF583E599F0300D4DAF36053674802FF582E4347EF583E598F0803A859910E510B54404D206802EE510B54304C2068025AF36053674802FF5AB
-:4004860082E4347EF583E510F0300D11AF36053674802FF582E4347EF583E598F0D20CE536C39540500302056B907FB8E030E116E536C39440500302056B15361536052BDD
-:4004C60043330102056B907FB7E536F0753600C20102056B201127AF36053674002FF582E4347EF583E599F0300D4DAF36053674002FF582E4347EF583E598F0803A859937
-:4005060010E510B54404D206802EE510B54304C2068025AF36053674002FF582E4347EF583E510F0300D11AF36053674002FF582E4347EF583E598F0D20CE536C3954040CE
-:4005460024907FB6E030E112E536C39440401615361536052B433301800B907FB9E536F0753600D201D212301205C212020056D0D0D086D082D083D0E032907FCAE030E1CA
-:40058600030206ABE4F51374402513F582E4347DF583E0FFE5137C007B002438F9EC3400FAEF120D330513E513B418DBE538600C75C92075C8348539CA853ACBE53B1392BF
-:4005C6000D929FE53C13920EE53D139211E53E6009907F98E054FBF08007907F98E04404F0E53F6009907F98E0547FF08007907F98E04480F0E545600BC209C206907F950E
-:40060600E04402F0E546600CD206433301907F95E04402F0E547600DC2AFC208D200E4F550F537D2AFE5486005301102D206E5496015907F95E054FDF0907F9EE04402F0AA
-:40064600907F98E054FDF0E54A600AD29CC298752C0175311EE54B6007C29CE4F536F52CE54C6003E4F536E54D6002D204E54E600AE54A7002F531E54E4233E54F601F9064
-:400686007FD77411F07431F07412F07432F07413F07433F07414F07434F0D202D201D205E4907FCBF0A209E433FF652960058F29433301A206E433FF652A60058F2A4333BA
-:4006C60001907F9BE05408B5250AE054086408F525433301907F9BE05410B5260AE054106410F526433301907F9BE05440B5270AE054406440F527433301907F9BE0542026
-:40070600B5280AE054206420F528433301300435C2AF300118907FB8E020E127E5366009907FB7F0E4F536C201C2048016907FB6E020E10FE5366009907FB9F0E4F536D234
-:4007460001C204D2AF20033730021B907FC6E020E12D907E40E013920A753701907FC7E0F550D2038019907FC8E020E112907DC0E013920A753701907FC9E0F550D20320E9
-:400786001033200006E5376550702A30031A300209E4907FC7F0C2028007E4907FC9F0D202C203E4F550F537300A0AC20AC200907FBB7401F03010030208C5200303020805
-:4007C600C5300E0A907F9BE030E3030208C53006030208C53009030208C5300262300D12AF37053774402FF582E4347EF583E0139219AF37053774402FF582E4347EF583CF
-:40080600E0F514E537C39550502A300D12AF37053774402FF582E4347EF583E013920BAF37053774402FF582E4347EF583E0F535D208806BC208E4907FC7F0C20280603081
-:400846000D12AF37053774C02FF582E4347DF583E0139219AF37053774C02FF582E4347DF583E0F514E537C39550502A300D12AF37053774C02FF582E4347DF583E013929F
-:400886000BAF37053774C02FF582E4347DF583E0F535D2088009C208E4907FC9F0D202300D04A219929BD210C2AF85149920080D300A0AC20AC200907FBB7401F0D2AF9072
-:4008C6007FBCE020E151E533604DE5317049E53330E108E4F52F753301800BA205E433F52FC205E4F533E4F5137E007B0074242513F9EE3400FA120CEDFF74002513F582D8
-:40090600E4347DF583EFF00513E513B40CDB907FBD740CF075311022907FE9E0120D450A03000A77010AE30309410609F40809E80909D00A09DF0B00000B32907FEBE024EB
-:40094600FE601614605724027076740F907FD4F07464907FD5F0020B39907FEAE070047F0280027F037582B575830FEFF07582AE75830FF07582A775830FF07582A07583BA
-:400986000FF0907FEAE00475827B75830FF0740F907FD4F07476907FD5F0020B39907FEAE0FF120E48EA49600DEA907FD4F0E9907FD5F0020B39907FB4E04401F0020B39D4
-:4009C600907FB4E04401F0020B39907F00E519F0907FB57401F0020B39907FEAE0F519020B39907FEAE0F518120D6B020B39907F00E518F0907FB57401F0020B39907FE822
-:400A0600E0247F60241460312402705BA213E433FF25E0FFA217E4334F907F00F0E4A3F0907FB57402F0020B39E4907F00F0A3F0907FB57402F0020B39907FECE0F45480B6
-:400A4600FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F0020B39907FB4E04401F0020B39907FE8E024FE601D24026003020B3904
-:400A8600907FEAE0B40105C213020B39907FB4E04401F0020B39907FEAE07038907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E4F0907FECE05480FFCC
-:400AC600131313541FFFE054072F907FD7F0E04420F0805F907FB4E04401F08056907FE8E024FE60182402704A907FEAE0B40104D213803F907FB4E04401F08036907FEA36
-:400B0600E07020907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F08007907FB4E04401F0907FB4E04402F022201503020B3E
-:400B4600D3E53160021531E536604F65347045E532F460020532E532C39541403DC2AF300118907FB8E020E127907FB7E536F0C201E4F536F532F5348016907FB6E020E13D
-:400B86000F907FB9E536F0D201E4F536F532F534D2AF8006853634E4F532E52C602F200C07907F9BE030E00FE52D6006E4F52D433301E4F5308014E530D39542500DE530DB
-:400BC600B54206752D014333010530C20C22751201C214C218C213C217C215C212D216E4F518907F92E054FDF0907FAEE0FFD39213E433FEEF4EF0D2E843D820907FDE74DB
-:400C060001F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE04401F0907FAEE0440DF0D2AFD2BCD219120EDAC214301503120580907FD8E065116008E0F5CA
-:400C460011120B4180EA301407C21412091E80E03018DDC21812002680D622787FE4F6D8FD758150020CA8020BD4E493A3F8E493A34003F68001F208DFF48029E493A3F83B
-:400C86005407240CC8C333C4540F4420C8834004F456800146F6DFE4800B0102040810204080900E04E47E019360BCA3FF543F30E509541FFEE493A360010ECF54C025E08E
-:400CC60060A840B8E493A3FAE493A3F8E493A3C8C582C8CAC583CAF0A3C8C582C8CAC583CADFE9DEE780BEBB010689828A83E0225002E722BBFE02E32289828A83E4932242
-:400D0600BB010CE58229F582E5833AF583E0225006E92582F8E622BBFE06E92582F8E222E58229F582E5833AF583E49322BB010689828A83F0225002F722BBFE01F322D0E1
-:400D460083D082F8E4937012740193700DA3A393F8740193F5828883E4737402936860EFA3A3A380DFE4907F93F0907F9C7430F0907F967410F0907F947401F0907F9D04E2
-:400D8600F0907F977420F0907F957403F0907F9E7484F0E4907F98F0907FC7F0907FC9F0907FCBF075984043A810907FDE741FF0907FDF740FF0D21522E4907F95F0907FF7
-:400DC60094F0907F93F0907F9DE04402F0907F97E04402F0907F9DE054FDF0907F9C7420F0E4907F96F0907F9DE044FDF0E4907F97F0907F9E74FFF0E4907F98F0220C24D0
-:400E0600000000000000000000000000013000013301013200013700015000013600013400C105C10CC103C10FC104C10EC111C10AC110C108C109C106C100C10DC181C109
-:400E460082008F13E4F5147515FF75160F7517B9AB15AA16A917900001120D06B4031DAF140514EFB5130122120CED7E0029FFEE3AA9077515FFF516891780D47B007A006D
-:400E8600790022C0E0C083C082C085C084C086758600907FC4E4F05391EF907FAB7404F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2145391C7
-:400EC600EF907FAB7401F0D086D084D085D082D083D0E032907FD6E054FBF0E04408F0301904E04402F07FF47E01120003907FD6E054F7F0E04404F02200020EB300020FC0
-:400F06000400020E8900020F0FC0E0C083C082C085C084C086758600D2185391EF907FAB7408F0D086D084D085D082D083D0E0327400F58690FDA57C05A3E582458370F9B9
-:400F460022907FD6E04480F04387010000000000220000000000000000000000000012011001FF000040CD0607010100010200020902430001010080320904000007FF008A
-:400F86000000070501024000000705020240000007050302400000070581024000010705820240000107058302400001070584024000010403090410034B00650079007332
-:170FC60000700061006E000E03530065007200690061006C00000064
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa19qi.HEX b/firmware/keyspan/usa19qi.HEX
deleted file mode 100644
index 353bfcfefb9c..000000000000
--- a/firmware/keyspan/usa19qi.HEX
+++ /dev/null
@@ -1,101 +0,0 @@
-:0300330002001AAE
-:04001A0053D8EF3296
-:100003008E118F12E5121512AE11700215114E608A
-:0700130005120F8480EE22AC
-:0300230002004692
-:10004600C0E0C083C082C086758600C0D075D00867
-:1000560030990E300B07A20E929B853699C299D223
-:100066001220120302041EC21220030302024E20B3
-:100076000B03020126E53AC39553503C200C34206D
-:100086000931907F9BE055387029301012AF3A0540
-:100096003A74402FF582E4347EF583E013920EAF76
-:1000A6003A053A74402FF582E4347EF583E0F5365E
-:1000B60002041CC20B02041C907FC7E4F0C203308A
-:1000C6000D0CC20D907FBB04F0C20B02041C907F86
-:1000D600C8E030E105C20B02041C907FC9E0F5536D
-:1000E600907DC0E013920D7516FF200C2B20092879
-:1000F600907F9BE055387020301011907DC1E01341
-:03004300020E00AA
-:03000000020026D5
-:0C002600787FE4F6D8FD758154020B28A9
-:40010600920EA3E0F536753A0302041C753A02907DC1E0F53602041C753A01C20B02041CE53AC3955350030201C9907FC6E030E107C214C20502041C907FC7E0F553907ECB
-:4001460040E013920D7516FF200C7020096D907F9BE055387065301010907E41E013929BA3E0F599753A038009907E41E0F599753A02E53AC395534017907FC7E4F0C203F6
-:40018600200D0302041CC20D907FBB04F002041C301012AF3A053A74402FF582E4347EF583E013920EAF3A053A74402FF582E4347EF583E0F536D20B02041C753A01C214A3
-:4001C60002041C300C03020249200977907F9BE05538706F301012AF3A053A74402FF582E4347EF583E013929BAF3A053A74402FF582E4347EF583E0F599E53AC3955340AB
-:4002060017907FC7E4F0C203200D0302041CC20D907FBB04F002041C301012AF3A053A74402FF582E4347EF583E013920EAF3A053A74402FF582E4347EF583E0F536D20B44
-:4002460002041CC21402041C200B030202FFE53AC39553503C200C34200931907F9BE055387029301012AF3A053A74C02FF582E4347DF583E013920EAF3A053A74C02FF5F9
-:4002860082E4347DF583E0F53602041CC20B02041C907FC9E4F0D203300D0CC20D907FBB04F0C20B02041C907FC6E030E105C20B02041C907FC7E0F553907E40E013920DAF
-:4002C6007516FF200C2B200928907F9BE055387020301011907E41E013920EA3E0F536753A0302041C753A02907E41E0F53602041C753A01C20B02041CE53AC39553500381
-:400306000203A2907FC8E030E107C214C20502041C907FC9E0F553907DC0E013920D7516FF200C7020096D907F9BE055387065301010907DC1E013929BA3E0F599753A037A
-:400346008009907DC1E0F599753A02E53AC395534017907FC9E4F0D203200D0302041CC20D907FBB04F002041C301012AF3A053A74C02FF582E4347DF583E013920EAF3A81
-:40038600053A74C02FF582E4347DF583E0F536D20B02041C753A01C21402041C200C75200972907F9BE05538706A301012AF3A053A74C02FF582E4347DF583E013929BAF02
-:4003C6003A053A74C02FF582E4347DF583E0F599E53AC395534013907FC9E4F0D203300D35C20D907FBB04F0802C301012AF3A053A74C02FF582E4347DF583E013920EAF3D
-:400406003A053A74C02FF582E4347DF583E0F536D20B8002C214D20120980302055AC2982002030204C7201627AF39053974802FF582E4347EF583E599F030104DAF3905C8
-:400446003974802FF582E4347EF583E598F0803A859910E510B54704D209802EE510B54604C2098025AF39053974802FF582E4347EF583E510F0301011AF39053974802F11
-:40048600F582E4347EF583E598F0D20FE539C395435003020558907FB8E030E116E539C39440500302055815391539052B433401020558907FB7E539F0753900C2020205D3
-:4004C60058201627AF39053974002FF582E4347EF583E599F030104DAF39053974002FF582E4347EF583E598F0803A859910E510B54704D209802EE510B54604C209802573
-:40050600AF39053974002FF582E4347EF583E510F0301011AF39053974002FF582E4347EF583E598F0D20FE539C395434024907FB6E030E112E539C3944040161539153909
-:40054600052B433401800B907FB9E539F0753900D202D201300105C201020056D0D0D086D082D083D0E032907FBCE020E151E534604DE5317049E53430E108E4F52F7534D4
-:4005860001800BA208E433F52FC208E4F534E4F5117E007B0074242511F9EE3400FA120D06FF74002511F582E4347DF583EFF00511E511B40CDB907FBD740CF075311090CD
-:4005C6007FCAE030E1030206F3E4F51174402511F582E4347DF583E0FFE5117C007B00243BF9EC3400FAEF120D1F0511E511B418DBE53B601175C92075C836853CCA853D98
-:40060600CBE4907F9FF0E53E139210929F853F38E540139216E5416009907F98E054FBF08007907F98E04404F0E5426009907F98E0547FF08007907F98E04480F0E54860BE
-:400646000BC20CC209907F95E04402F0E549600CD209433401907F95E04402F0E54A600DC2AFC20BD200E4F553F53AD2AFE54B6005301602D209E54C6015907F95E054FDB4
-:40068600F0907F9EE04402F0907F98E054FDF0E54D600AD29CC298752C0175311EE54E6007C29CE4F539F52CE54F6003E4F539E5506002D207E551600AE54D7002F531E55C
-:4006C600514234E552601F907FD77411F07431F07412F07432F07413F07433F07414F07434F0D203D202D208E4907FCBF0A20CE433FF652960058F29433401A209E433FF84
-:40070600652A60058F2A433401907F9BE0FF54086408FE652560058E25433401EF54106410FE652660058E26433401EF54406440FE652760058E27433401EF54206420FE1C
-:40074600652860058E28433401907F9AE054406440FE652E60058E2E433401300735C2AF300218907FB8E020E127E5396009907FB7F0E4F539C202C2078016907FB6E0203B
-:40078600E10FE5396009907FB9F0E4F539D202C207D2AF20053D30031E907FC6E020E133907E40E013920D753A01907FC7E0F553D2057516FF801C907FC8E020E115907DD3
-:4007C600C0E013920D753A01907FC9E0F553D2057516FF201433200006E53A6553702A30051A300309E4907FC7F0C2038007E4907FC9F0D203C205E4F553F53A300D0AC265
-:400806000DC200907FBB7401F0301403020914200503020914300C03020914300903020914907F9BE055386003020914300361301012AF3A053A74402FF582E4347EF5833F
-:40084600E013921BAF3A053A74402FF582E4347EF583E0FEE53AC39553502A301012AF3A053A74402FF582E4347EF583E013920EAF3A053A74402FF582E4347EF583E0F546
-:4008860036D20B806AC20BE4907FC7F0C203805F301012AF3A053A74C02FF582E4347DF583E013921BAF3A053A74C02FF582E4347DF583E0FEE53AC39553502A301012AFE7
-:4008C6003A053A74C02FF582E4347DF583E013920EAF3A053A74C02FF582E4347DF583E0F536D20B8009C20BE4907FC9F0D203301004A21B929BD214C2AF8E99200B0D301D
-:400906000D0AC20DC200907FBB7401F0D2AF22907FE9E0120D310A11000A7E010ADB030938060A020809F60909DE0A09ED0B00000B19907FEBE024FE601914605A24026041
-:4009460003020B19740D907FD4F07487907FD5F0020B20907FEAE070047F0280027F037582D875830DEFF07582D175830DF07582CA75830DF07582C375830DF0907FEAE078
-:400986000475829E75830DF0740D907FD4F07499907FD5F0020B20907FEAE0700B7511FF75120D7513DC801B907FEAE0B4010B7511FF75120D7513E080097511FF75120D19
-:4009C6007513F0AA12A913AE02EE907FD4F0AF01EF907FD5F0020B20907F00E515F0907FB57401F0020B20907FEAE0F515020B20120CB1907FEAE0F514020B20907F00E5BF
-:400A060014F0907FB57401F0020B20907FE8E0247F602714603424026003020B19A217E433FF25E0FFA219E4334F907F00F0E4A3F0907FB57402F0020B20E4907F00F0A3B7
-:400A4600F0907FB57402F0020B20907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F0020B20907FE8E024FE601726
-:400A860024026003020B20907FEAE064016003020B19C217020B20907FEAE07076907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E4F0907FECE05480D6
-:400AC600FF131313541FFFE054072F907FD7F0E04420F08045907FE8E024FE601024027039907FEAE06401702AD217802D907FEAE07020907FECE0F45480FFC4540FFFE056
-:400B060054072F25E024B4F582E4347FF5837401F08007907FB4E04401F0907FB4E04402F022C210E4F514F534C209C20CC20BC214C20DC216C211C207C212C20FC208F538
-:400B460035F539F553F53AF533F530F52FF52EF52DF52CF52BF52AF529F528F527F526F525F524C205C218C21AC217C219C215C204D213C206C201907F92E054FDF0D2E820
-:400B860043D820907FDE7401F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE04401F0907FAEE0440FF0907FAC740EF0D2AFD2BCD21B120F5FC21830040316
-:400BC60012056D30042A300627C206E51660161516907FD8E030E6047F0080027F20907F96EFF08006907F967420F0120C0B80CD301807C21812091580C3301AC0C21A128E
-:400C06000FBB80B922E53160021531E53960556535704BE533F460020533E533C395444043C2AF30021B907FB8E020E12D907FB7E539F0C202E4F539F533F5357516FF802D
-:400C460019907FB6E020E112907FB9E539F0D202E4F539F533F5357516FFD2AF8006853935E4F533E52C6030200F07907F9BE030E00FE52D6006E4F52D433401E4F5308000
-:400C860014E530D39545500DE530B54506752D014334010530C20F22907FD9E030E2047F0080027F20907F96EFF022E4907F93F0907F9C7430F0907F967420F0907F94748A
-:400CC60001F0907F9D74BFF0907F977486F0907F957403F0907F9E7484F0907F98F0E4907FC7F0907FC9F0907FCBF075984043A810907FDE741FF0907FDF740FF0D204221A
-:400D0600BB010689828A83E0225002E722BBFE02E32289828A83E49322BB010689828A83F0225002F722BBFE01F322D083D082F8E4937012740193700DA3A393F8740193EB
-:400D4600F5828883E4737402936860EFA3A3A380DFC0E0C083C082C085C084C086758600907FC4E4F05391EF907FAB7404F0D086D084D085D082D083D0E03200000000007B
-:400D86000012011001FF000040CD060C010100010200020902430001010080320904000007FF00000007050102400000070502024000000705030240000007058102400010
-:400DC600010705820240000107058302400001070584024000010403090410034B00650079007300700061006E000E03530065007200690061006C000000020EA200020E41
-:400E06007B00020D5700020EC900020E1000020E1400020E1800020E1C00020EF000020E2400020F1500020E2C00020F3AE4907F95F0907F94F0907F93F0907F9DE044020A
-:400E4600F0907F97E04402F0907F9C7410F0E4907F96F0907F9D74FEF03017047F8080027F00907F97EFF0E4907F95F0907F9EF0907F98F022C0E0C083C082C085C084C00E
-:400E8600867586005391EF907FAB7402F0D206D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2185391EF907FAB7401F0D086D084D085D082D083EB
-:400EC600D0E032C0E0C083C082C085C084C086758600D21A5391EF907FAB7408F0D086D084D085D082D083D0E032C0E0C083C082C085C084C0867586005391EF907FA974C2
-:400F060002F0D086D084D085D082D083D0E032C0E0C083C082C085C084C0867586005391EF907FA97404F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086D7
-:400F46007586005391EF907FA97408F0D086D084D085D082D083D0E032907FD6E054FBF0E04408F0301B04E04402F07FF47E01120003907FD6E054F7F0E04404F0227400B9
-:400F8600F58690FDA57C05A3E582458370F922907FD6E04480F0438701000000000022907FD6E04401F07F0D7E00120003907FD6E054FEF022120E33120F95907FD6E030FA
-:090FC600E703120FA5120CB12281
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa19qw.HEX b/firmware/keyspan/usa19qw.HEX
deleted file mode 100644
index 8a891023bf51..000000000000
--- a/firmware/keyspan/usa19qw.HEX
+++ /dev/null
@@ -1,142 +0,0 @@
-:0300330002002D9B
-:04002D0053D8EF3283
-:10004600301019120E0FEFC3951440030200DF9013
-:100056007FBF7401F0C210C20B0200DF300D3E906C
-:100066007FC6E020E173120E0FEFC39440506A90F2
-:100076007E40E0139210907FC7E014F536200B11F6
-:10008600600FF5247E7E7F4175297E752A4112090F
-:1000960010C20DE4907FC7F07526FF803C907FC8A4
-:1000A600E020E135120E0FEFC39440502C907DC036
-:1000B600E0139210907FC9E014F536200B11600F03
-:1000C600F5247E7D7FC175297D752AC1120910D25E
-:1000D6000DE4907FC9F07526FF907FB6E030E1030E
-:1000E600020168120CFF8F36120E1B8F11E536C304
-:1000F6009513500F120DDEEF30E008E51120E703EF
-:0C003600907F987410F090C000E0FF2252
-:03004300020E00AA
-:10000300C0E0C083C082C085C084C086758600906E
-:100013007FC4E4F05391EF907FAB7404F0D086D0AB
-:0A00230084D085D082D083D0E03273
-:030000000209C52D
-:4001060030135FC213E5366059B48003431102E51130E724E536D3942040037536208536247E7E7F8075297E752A80120B9AE53625E0907FB7F0802AE536D3943F4003753B
-:40014600363F853624907E80E511F07E7E7F8175297E752A81120935E53604907FB7F07526FF907FCEE030E106200E030203C4E4F53574402535F582E4347CF583E0FFE589
-:40018600357C007B017A7E79002400F9EC347EFAEF120A970535E535B420D7907E00E0606E7F01907E11E0FD120CDA907E01E0FF120C1C907E02E0FF120C42D211D2127562
-:4001C6003604907E03E06005C2124336C0907E04E0B40107C21243360B8010907E04E06007C21143360980034336027F03AD36120CDA431A80907F987414F090C000E51A72
-:40020600F0907F987412F0E517440690C000F0907E05E06012A3E0543FF519907F987413F090C000E519F0907E07E06042907E13E0600543160480035316FBE4FFAD161247
-:400246000CDA907E08E06005431880800353187F5318FC907E09E06011431802A3E0FF120C8E907E0BE0FF120CB4AF18120C68907E0EE06018A3E06005431A018003531AD4
-:40028600FE907F987414F090C000E51AF0907E0CE06018A3E06005431A028003531AFD907F987414F090C000E51AF0907E12E0F513A3E0139214A3E0F514A3E06005431AC3
-:4002C600108003531AEF907F987414F090C000E51AF0907E16E060325319BF907F987413F0E519547F90C000F0907F987411F0120DD2EF54FE90C000F05316FDE4FFAD1621
-:40030600120CDAE4F50EF50DD20F907E17E0600F431602E4FFAD16120CDA750D01D20F907E18E06010907F987412F0E517440490C000F0D20B907E19E06011431940907F0D
-:40034600987413F0E519547F90C000F0907E1AE0600F5316FEE4FFAD16120CDA750F01D20F907E1BE0600F431601E4FFAD16120CDAE4F50FD20F907E1CE0600E907F9874A9
-:4003860012F0E517440290C000F0907E1DE06002D213907E1EE06008751001E4F512D20F907E1FE06011907FD77411F07431F07415F07435F0D20DC20EE4907FCFF0301674
-:4003C60071E51260021512E530D3940040041530806075300A120DD2EF5401F536650E600785360ED20F8011120E27EF5410F53665096005853609D20F120E27EF5480F5C1
-:4004060036650A600585360AD20F120E27EF5420F536650B600885360B301102D20F120E27EF5440F536650C600885360C301202D20F30162A907FD2E020E123907B40E035
-:400446006009E0F532907B42E0F533907B41E06009907FD77417F07437F0E4907FD3F0907FC2E030E103020529E5277040300F39E5127035C20FF5357E007B0074082535DB
-:40048600F9EE3400FA120A51FF74802535F582E4347BF583EFF00535E535B409DB907FC37409F0751210E4F51075270222E5276402703630052FC205F5357E007B00742B96
-:4004C6002535F9EE3400FA120A51FF74802535F582E4347BF583EFF00535E535B405DB907FC37405F075270322E53260337531031532E4F5357E007B0074312535F9EE34CD
-:4005060000FA120A51FF74802535F582E4347BF583EFF00535E535B403DB907FC37403F0E4F52722907FE9E0120AA9060800067C0106E903054D0605F90805ED0905D50A02
-:4005460005E40B00000739907FEBE024FE60161460502402706F7419907FD4F07400907FD5F0020740907FEAE070047F0280027F03758282758319EFF0758274758319F06E
-:40058600758258758319F0907FEAE004758217758319F07419907FD4F07412907FD5F0020740907FEAE0FF120B1CEA49600DEA907FD4F0E9907FD5F0020740907FB4E0449B
-:4005C60001F0020740907FB4E04401F0020740907F00E525F0907FB57401F0020740907FEAE0F525020740120748907FEAE0F523020740907F00E523F0907FB57401F00216
-:400606000740907FE8E0247F60241460312402705BA201E433FF25E0FFA207E4334F907F00F0E4A3F0907FB57402F0020740E4907F00F0A3F0907FB57402F0020740907F2C
-:40064600ECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F0020740907FB4E04401F0020740907FE8E024FE601E240216
-:400686006003020740907FEAE0B40106120DF9020740907FB4E04401F0020740907FEAE07038907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E4F090F8
-:4006C6007FECE05480FF131313541FFFE054072F907FD7F0E04420F08060907FB4E04401F08057907FE8E024FE60192402704B907FEAE0B40105120DF6803F907FB4E04487
-:4007060001F08036907FEAE07020907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F08007907FB4E04401F0907FB4E04402F9
-:40074600F022E4907F93F0907F9C7430F0907F967420F0907F9574C0F0907F9E743FF0907F987410F0E4F58E907FDF74FFF0907FDEF0E4F5087F017B0074082FF9E4340023
-:40078600FAE4120A970FBF09EE751301E4F512F530F511C20FC213C20EC20BC210C204907F987413F075190390C0007403F07F0CE4FD120CDA7F108F18120C68907F9874C2
-:4007C60012F07F018F17EF440690C000F00FE4FD120CDAE4FF7EA3AD068D16120CDA907F987411F090C000E4F07F057D7F120CDA7F01120D6A7F037D07120CDAE4FFE5167B
-:40080600547FFD120CDA120E0F8F15E4FFE5164480FD120CDAE51530E704C2088002D208907F987414F0751A8090C0007480F0D20322D215907F92E04402F0120DF9D2E87C
-:4008460043D820907FDE7401F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE04401F0907FAE740DF0D2AFD216120D24C202E4F528F530C209F523C20390F7
-:400886007FA104F0907FD8E065346048300305D216120046E50F6022E52660161526907FD8E030E6047F2080027F30907F96EFF0801A907F967430F08012907FD9E030E2F8
-:4008C600047F3080027F20907F96EFF0907FD8E0F5348020300307C2161200468016E50F7012907FD9E030E2047F3080027F20907F96EFF0300207C20212052A8086300AE4
-:4009060083C20A120B5D02088A22907F987410F0AF24E52AF582E529F583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987410F0AF24E52AF582E529F583C2A3
-:40094600AF058690C000E00586F0A30586DFF70586D2AF22907F987408F0AF24E52AF582E529F583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987408F0AFCD
-:4009860024E52AF582E529F583C2AF058690C000E00586F0A30586DFF70586D2AF227400F58690FDA57C05A3E582458370F922907FD6E04480F0438701000000000022784B
-:4009C6007FE4F6D8FD758139020A0C020838E493A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F4420C8834004F456800146F6DFE4800B010211
-:400A0600040810204080900D8BE47E019360BCA3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE493A3F8E493A3C8C582C8CAC583CAF0A3C8C582B0
-:400A4600C8CAC583CADFE9DEE780BEBB010689828A83E0225002E722BBFE02E32289828A83E49322BB010CE58229F582E5833AF583E0225006E92582F8E622BBFE06E925BB
-:400A860082F8E222E58229F582E5833AF583E49322BB010689828A83F0225002F722BBFE01F322D083D082F8E4937012740193700DA3A393F8740193F5828883E47374028F
-:400AC600936860EFA3A3A380DFE4907F93F0907F9C7420F0300103FF80027F00907F96EFF0E4907F94F0907F9D74FFF0E4907F97F0300811907F95F0907F9E74FFF0907F05
-:400B0600987420F022E4907F95F0907F9E74DFF0E4907F98F0228F35E4F5367537FF753819753986AB37AA38A939900001120A6AB4031DAF360536EFB5350122120A517E5C
-:400B46000029FFEE3AA9077537FFF538893980D47B007A00790022907FD8E0F535120ACF200807907F92E054FDF0907FD6E04480F01209B5907FD6E030E70E300105120D9C
-:400B8600BC8006120D49EF60E1907F92E04402F012074822052AE52AAE297002052914F5828E83E511F0120036052AE52AAC297002052914F5828C83EFF01524E5246007C7
-:400BC600120E1B8F1180CD22C0E0C083C082C085C084C086758600D2025391EF907FAB7401F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D20A9F
-:400C06005391EF907FAB7408F0D086D084D085D082D083D0E032907F987413F090C00074BFF0907F987410F090C000EFF0907F987413F0E519547F90C000F022907F9874E8
-:400C460013F090C00074BFF0907F987411F090C000EFF0907F987413F0E519547F90C000F022907F987413F090C00074BFF0907F987412F090C000EFF0907F987413F0E57C
-:400C860019547F90C000F022907F987413F090C00074BFF0907F987414F090C000EFF0907F987413F0E519547F90C000F022907F987413F090C00074BFF0907F987416F0FE
-:400CC60090C000EFF0907F987413F0E519547F90C000F022907F987413F0E519547F90C000F0907F987417F090C000EFF0907F987415F090C000EDF022120DEA8F37120D91
-:400D0600EA8F38E53765386012120DEA8F37E53765386007120DEA8F3880E8AF3722907FD6E054FBF0E04408F0301604E04402F07FF47E01120DA5907FD6E054F7F0E04448
-:400D460004F022907FD8E0F536120748120E27EF30E60B907FD8E0653660F17F0122120ACF7F0022AE07E4FFE516547FFD120CDA907F987411F090C000EEF0E4E516448084
-:400D8600FD120CDA22052B02000000000331030000C186C102C10AC101C107012700008E368F37E5371537AE36700215364E60051209A480EE22907FD6E04401F07F0D7E8D
-:400DC60000120DA5907FD6E054FEF022907F987411F090C000E0FF22907F987412F090C000E0FF22907F987413F090C000E0FF22D20122C2012200000000020BCE00020EF1
-:400E0600040002000300020BF5907F987414F090C000E0FF22907F987415F090C000E0FF22907F987416F090C000E0FF22000000000000000000000000000000000000004E
-:400E4600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006C
-:400E8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C
-:400EC60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EC
-:400F060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AB
-:400F4600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006B
-:400F8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B
-:400FC60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EB
-:4010060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA
-:40104600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006A
-:40108600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A
-:4010C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EA
-:4011060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A9
-:401146000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069
-:401186000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029
-:4011C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E9
-:4012060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A8
-:401246000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068
-:401286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028
-:4012C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E8
-:4013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A7
-:401346000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067
-:401386000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027
-:4013C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7
-:4014060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A6
-:401446000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066
-:401486000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026
-:4014C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6
-:4015060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A5
-:401546000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065
-:401586000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025
-:4015C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5
-:4016060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4
-:401646000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064
-:401686000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024
-:4016C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4
-:4017060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3
-:401746000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063
-:401786000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023
-:4017C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3
-:4018060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2
-:401846000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062
-:401886000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022
-:4018C6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012011001FF00BF
-:401906000040CD06190100000102000209027400010100A032090400000EFF000000070501024000000705020240000007050302400000070504024000000705050240006D
-:4019460000070506024000000705070240000007058102400001070582024000010705830240000107058402400001070585024000010705860240000107058702400001F3
-:401986000403090448034B00650079007300700061006E002C002000610020006400690076006900730069006F006E0020006F006600200049006E006E006F005300790040
-:4019C6007300200049006E0063002E0036034B00650079007300700061006E0020005500530042002000530065007200690061006C002000410064006100700074006500F9
-:041A0600720000006A
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa19w.HEX b/firmware/keyspan/usa19w.HEX
deleted file mode 100644
index a3b84313f2ca..000000000000
--- a/firmware/keyspan/usa19w.HEX
+++ /dev/null
@@ -1,141 +0,0 @@
-:03003300020D5C5F
-:10000300E4907F93F0907F9C7430F0E4907F96F0BF
-:10001300907F94F0907F9D74FFF0E4907F97F09031
-:0F0023007F95F0907F9E7417F0E4907F98F02205
-:10004600300F18120D38EFC3951440030200D890F4
-:100056007FBF7401F0C20FC20A8077300C3B907FDD
-:10006600C6E020E16D120D38EFC394405064907ED7
-:1000760040E013920F907FC7E014F51C200A116030
-:100086000FF5237E7E7F4175277E75284112080174
-:10009600C20CE4907FC7F08039907FC8E020E1323F
-:1000A600120D38EFC394405029907DC0E013920F93
-:1000B600907FC9E014F51C200A11600FF5237E7DA0
-:1000C6007FC175277D7528C1120801D20CE4907F87
-:1000D600C9F0907FB6E030E10302015E120C418F59
-:1000E6001C120D448F11E51CC39513500F120D20E1
-:1000F600EF30E008E51120E70330125CC212E51C80
-:0C003600907F987410F090C000E0FF2252
-:03004300020E00AA
-:030000000208B63D
-:400106006056B48003431102E51130E724E51CD394204003751C20851C237E7E7F8075277E752880120A86E51C251C907FB7F08027E51CD3943F4003751C3F851C23907E06
-:4001460080E511F07E7E7F8175277E752881120826E51C04907FB7F0907FCEE030E106200D030203BAE4F51B7440251BF582E4347CF583E0FFE51B7C007B017A7E7900244A
-:4001860000F9EC347EFAEF120A0D051BE51BB420D7907E00E0606E7F01907E11E0FD120C1C907E01E0FF120B5E907E02E0FF120B84D210D211751C04907E03E06005C211D7
-:4001C600431CC0907E04E0B40107C211431C0B8010907E04E06007C210431C098003431C027F03AD1C120C1C431980907F987414F090C000E519F0907F987412F0E51644CE
-:400206000690C000F0907E05E06012A3E0543FF518907F987413F090C000E518F0907E07E06042907E13E0600543150480035315FBE4FFAD15120C1C907E08E060054317BC
-:4002460080800353177F5317FC907E09E06011431702A3E0FF120BD0907E0BE0FF120BF6AF17120BAA907E0EE06018A3E0600543190180035319FE907F987414F090C00046
-:40028600E519F0907E0CE06018A3E0600543190280035319FD907F987414F090C000E519F0907E12E0F513A3E0139213A3E0F514A3E0600543191080035319EF907F98742D
-:4002C60014F090C000E519F0907E16E060325318BF907F987413F0E518547F90C000F0907F987411F0120D14EF54FE90C000F05315FDE4FFAD15120C1CE4F50EF50DD20EEB
-:40030600907E17E0600F431502E4FFAD15120C1C750D01D20E907E18E06010907F987412F0E516440490C000F0D20A907E19E06011431840907F987413F0E518547F90C064
-:4003460000F0907E1AE0600F5315FEE4FFAD15120C1C750F01D20E907E1BE0600F431501E4FFAD15120C1CE4F50FD20E907E1CE0600E907F987412F0E516440290C000F0D8
-:40038600907E1DE06002D212907E1EE06008751001E4F512D20E907E1FE06011907FD77411F07431F07415F07435F0D20CC20DE4907FCFF0301571E51260021512E52ED326
-:4003C60094004004152E8060752E0A120D14EF5401F51C650E6007851C0ED20E8011120D50EF5410F51C65096005851C09D20E120D50EF5480F51C650A6005851C0AD20EFB
-:40040600120D50EF5420F51C650B6008851C0B301002D20E120D50EF5440F51C650C6008851C0C301102D20E30152A907FD2E020E123907B40E06009E0F530907B42E0F572
-:4004460031907B41E06009907FD77417F07437F0E4907FD3F0907FC2E030E10302051FE5257040300E39E5127035C20EF51B7E007B007408251BF9EE3400FA1209C7FF7447
-:4004860080251BF582E4347BF583EFF0051BE51BB409DB907FC37409F0751210E4F51075250222E5256402703630052FC205F51B7E007B007429251BF9EE3400FA1209C7C2
-:4004C600FF7480251BF582E4347BF583EFF0051BE51BB405DB907FC37405F075250322E5306033752F031530E4F51B7E007B00742F251BF9EE3400FA1209C7FF7480251B26
-:40050600F582E4347BF583EFF0051BE51BB403DB907FC37403F0E4F52522907FE9E0120A1F05F600066A0106D70305430605E90805E30905CB0A05DA0B00000727907FEBC9
-:40054600E024FE60161460502402706F7419907FD4F07400907FD5F002072E907FEAE070047F0280027F03758282758319EFF0758274758319F0758258758319F0907FEA65
-:40058600E004758217758319F07419907FD4F07412907FD5F002072E907FEAE0FF120A45EA49600DEA907FD4F0E9907FD5F002072E907FB4E04401F002072E907FB4E044D1
-:4005C60001F002072E907F00E524F0907FB57401F002072E907FEAE0F52402072E12073602072E907F007401F0907FB5F002072E907FE8E0247F60241460312402705BA221
-:4006060001E433FF25E0FFA207E4334F907F00F0E4A3F0907FB57402F002072EE4907F00F0A3F0907FB57402F002072E907FECE0F45480FFC4540FFFE054072F25E024B4CD
-:40064600F582E4347FF583E054FD907F00F0E4A3F0907FB57402F002072E907FB4E04401F002072E907FE8E024FE601E2402600302072E907FEAE0B40106120D6302072E53
-:40068600907FB4E04401F002072E907FEAE07038907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E4F0907FECE05480FF131313541FFFE054072F907F69
-:4006C600D7F0E04420F08060907FB4E04401F08057907FE8E024FE60192402704B907FEAE0B40105120D60803F907FB4E04401F08036907FEAE07020907FECE0F45480FFAD
-:40070600C4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F08007907FB4E04401F0907FB4E04402F022E4907F93F0907F9C7430F0E4907F96F06B
-:40074600907F9574C0F0907F9E743FF0907F987418F0E4F58E907FDF74FFF0907FDEF0E4F5087F017B0074082FF9E43400FAE4120A0D0FBF09EE751301E4F512F52EF511A2
-:40078600C20EC212C20DC20AC20FC204907F987413F075180390C0007403F07F0CE4FD120C1C7F108F17120BAA907F987412F07F018F16EF440690C000F00FE4FD120C1C71
-:4007C600E4FF7EA3AD068D15120C1C907F987411F090C000E4F07F057D7F120C1C7F01120CAC7F037D07120C1C907F987414F075198090C0007480F0D20322907F98741059
-:40080600F0AF23E528F582E527F583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987410F0AF23E528F582E527F583C2AF058690C000E00586F0A30586DFF76F
-:400846000586D2AF22907F987408F0AF23E528F582E527F583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987408F0AF23E528F582E527F583C2AF058690C045
-:4008860000E00586F0A30586DFF70586D2AF227400F58690FDA57C05A3E582458370F922907FD6E04480F0438701000000000022787FE4F6D8FD7581310208FD020942E43B
-:4008C60093A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F4420C8834004F456800146F6DFE4800B0102040810204080900CCDE47E019360BC36
-:40090600A3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE493A3F8E493A3C8C582C8CAC583CAF0A3C8C582C8CAC583CADFE9DEE780BED214907F83
-:4009460092E04402F0120D63D2E843D820907FDE7401F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE04401F0907FAE740DF0D2AFD215120C66C202E4F557
-:4009860026F52EC208C203907FA104F0907FD8E0651A6010300305D215120046907FD8E0F51A8008300305C215120046300207C20212052080D63009D3C209120ABA80CC40
-:4009C60022BB010689828A83E0225002E722BBFE02E32289828A83E49322BB010CE58229F582E5833AF583E0225006E92582F8E622BBFE06E92582F8E222E58229F582E51F
-:400A0600833AF583E49322BB010689828A83F0225002F722BBFE01F322D083D082F8E4937012740193700DA3A393F8740193F5828883E4737402936860EFA3A3A380DF8F58
-:400A46001BE4F51C751DFF751E19751F86AB1DAA1EA91F9000011209E0B4031DAF1C051CEFB51B01221209C77E0029FFEE3AA907751DFFF51E891F80D47B007A00790022F3
-:400A86000528E528AE277002052714F5828E83E511F01200360528E528AC277002052714F5828C83EFF01523E5236007120D448F1180CD22907FD8E0F51B120003907FD6AB
-:400AC600E04480F01208A6907FD6E030E70E300105120CFE8006120C8BEF60E112073622C0E0C083C082C085C084C086758600907FC4E4F05391EF907FAB7404F0D086D0DF
-:400B060084D085D082D083D0E032C0E0C083C082C085C084C086758600D2025391EF907FAB7401F0D086D084D085D082D083D0E032C0E0C083C082C085C084C08675860025
-:400B4600D2095391EF907FAB7408F0D086D084D085D082D083D0E032907F987413F090C00074BFF0907F987410F090C000EFF0907F987413F0E518547F90C000F022907FDB
-:400B8600987413F090C00074BFF0907F987411F090C000EFF0907F987413F0E518547F90C000F022907F987413F090C00074BFF0907F987412F090C000EFF0907F98741307
-:400BC600F0E518547F90C000F022907F987413F090C00074BFF0907F987414F090C000EFF0907F987413F0E518547F90C000F022907F987413F090C00074BFF0907F9874F2
-:400C060016F090C000EFF0907F987413F0E518547F90C000F022907F987413F0E518547F90C000F0907F987417F090C000EFF0907F987415F090C000EDF022120D2C8F1D44
-:400C4600120D2C8F1EE51D651E6012120D2C8F1DE51D651E6007120D2C8F1E80E8AF1D22907FD6E054FBF0E04408F0301504E04402F07FF47E01120CE7907FD6E054F7F0D8
-:400C8600E04404F022907FD8E0F51C120736120D50EF30E60B907FD8E0651C60F17F01221200037F0022AE07E4FFE515547FFD120C1C907F987411F090C000EEF0E4E51599
-:400CC6004480FD120C1C2205290200000000032F030000C186C102C109C101C107012500008E1C8F1DE51D151DAE1C7002151C4E600512089580EE22907FD6E04401F07F86
-:400D06000D7E00120CE7907FD6E054FEF022907F987411F090C000E0FF22907F987412F090C000E0FF22907F987413F090C000E0FF22907F987414F090C000E0FF22907F2B
-:400D4600987415F090C000E0FF22907F987416F090C000E0FF2253D8EF32D20122C20122000000000000000000000000000000000000000000000000000000000000000073
-:400D8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002D
-:400DC60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020B1000020EC0
-:400E06000400020AE600020B370000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000072
-:400E4600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006C
-:400E8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002C
-:400EC60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EC
-:400F060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AB
-:400F4600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006B
-:400F8600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002B
-:400FC60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EB
-:4010060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000AA
-:40104600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006A
-:40108600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002A
-:4010C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000EA
-:4011060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A9
-:401146000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000069
-:401186000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029
-:4011C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E9
-:4012060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A8
-:401246000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000068
-:401286000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000028
-:4012C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E8
-:4013060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A7
-:401346000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000067
-:401386000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000027
-:4013C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7
-:4014060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A6
-:401446000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066
-:401486000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026
-:4014C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6
-:4015060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A5
-:401546000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065
-:401586000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025
-:4015C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5
-:4016060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4
-:401646000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064
-:401686000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024
-:4016C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4
-:4017060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3
-:401746000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063
-:401786000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023
-:4017C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3
-:4018060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2
-:401846000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062
-:401886000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022
-:4018C6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012011001FF00BF
-:401906000040CD06080100000102000209027400010100A032090400000EFF000000070501024000000705020240000007050302400000070504024000000705050240007E
-:4019460000070506024000000705070240000007058102400001070582024000010705830240000107058402400001070585024000010705860240000107058702400001F3
-:401986000403090448034B00650079007300700061006E002C002000610020006400690076006900730069006F006E0020006F006600200049006E006E006F005300790040
-:4019C6007300200049006E0063002E0036034B00650079007300700061006E0020005500530042002000530065007200690061006C002000410064006100700074006500F9
-:041A0600720000006A
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa28.HEX b/firmware/keyspan/usa28.HEX
deleted file mode 100644
index 000c97863c01..000000000000
--- a/firmware/keyspan/usa28.HEX
+++ /dev/null
@@ -1,148 +0,0 @@
-:0A0026001217DB1218B51214C322E2
-:0300330002001DAB
-:04001D0053D8EF3293
-:100006008E128F13E5131513AE12700215124E6081
-:07001600051218A480EE2280
-:03000300020046B2
-:10004600C0E0C083C082C086758600C0D075D00867
-:1000560030990E301107A217929B854699C299D204
-:100066001F30C10E301207A21892C38547C1C2C104
-:10007600D220201F03020442C21F2003030202678C
-:10008600201103020138E54AC3957C503E20133601
-:10009600200B33907F9BE020E303201C29301B12AA
-:1000A600AE4A054A74402EF582E4347EF583E013A9
-:1000B6009217AE4A054A74402EF582E4347EF583E3
-:1000C600E0F546020440C211020440907FC7E4F006
-:1000D600C20330150CC215907FBF04F0C211020492
-:1000E60040907FC8E030E105C211020440907FC90C
-:1000F600E0F57C907DC0E013921520132D200B2A8D
-:03004300021B009D
-:0300230002004692
-:03003B000200467A
-:0300000002163DA8
-:40010600907F9BE020E303201C20301B11907DC1E0139217A3E0F546754A03020440754A02907DC1E0F546020440754A01C211020440E54AC3957C50030201E0907FC6E08A
-:4001460030E107C221C205020440907FC7E0F57C907E40E01392153013030201D8200B7220006F907F9BE020E303201C65301B10907E41E013929BA3E0F599754A038009BE
-:40018600907E41E0F599754A02E54AC3957C4017907FC7E4F0C203201503020440C215907FBF04F0020440301B12AE4A054A74402EF582E4347EF583E0139217AE4A054AA7
-:4001C60074402EF582E4347EF583E0F546D211020440754A01C221020440301303020262200B79907F9BE020E303201C6F301B12AE4A054A74402EF582E4347EF583E013DC
-:40020600929BAE4A054A74402EF582E4347EF583E0F599E54AC3957C4017907FC7E4F0C203201503020440C215907FBF04F0020440301B12AE4A054A74402EF582E4347EB6
-:40024600F583E0139217AE4A054A74402EF582E4347EF583E0F546D211020440C221020440201103020319E54AC3957C503E201336200B33907F9BE020E303201C29301B5F
-:4002860012AE4A054A74C02EF582E4347DF583E0139217AE4A054A74C02EF582E4347DF583E0F546020440C211020440907FC9E4F0D20330150CC215907FBF04F0C2110276
-:4002C6000440907FC6E030E105C211020440907FC7E0F57C907E40E013921520132D200B2A907F9BE020E303201C20301B11907E41E0139217A3E0F546754A03020440759E
-:400306004A02907E41E0F546020440754A01C211020440E54AC3957C50030203C1907FC8E030E107C221C205020440907FC9E0F57C907DC0E01392153013030203B9200B48
-:400346007220006F907F9BE020E303201C65301B10907DC1E013929BA3E0F599754A038009907DC1E0F599754A02E54AC3957C4017907FC9E4F0D203201503020440C21573
-:40038600907FBF04F0020440301B12AE4A054A74C02EF582E4347DF583E0139217AE4A054A74C02EF582E4347DF583E0F546D211020440754A01C221020440301303020463
-:4003C6003E200B74907F9BE020E303201C6A301B12AE4A054A74C02EF582E4347DF583E013929BAE4A054A74C02EF582E4347DF583E0F599E54AC3957C4013907FC9E4F09D
-:40040600D203301535C215907FBF04F0802C301B12AE4A054A74C02EF582E4347DF583E0139217AE4A054A74C02EF582E4347DF583E0F546D2118002C221D2252020030230
-:40044600080CC220200403020631201203020502E54BC3957D503E201436200D33907F9AE020E503201E29301D12AE4B054B74402EF582E4347DF583E0139218AE4B054B99
-:4004860074402EF582E4347DF583E0F54702080AC21202080A907FCBE4F0C20430160CC216907FC104F0C21202080A907FCCE030E105C21202080A907FCDE0F57D907CC0BB
-:4004C600E013921620142D200D2A907F9AE020E503201E20301D11907CC1E0139218A3E0F547754B0302080A754B02907CC1E0F54702080A754B01C21202080AE54BC39566
-:400506007D50030205AA907FCAE030E107C222C20602080A907FCBE0F57D907D40E01392163014030205A2200D7220006F907F9AE020E503201E65301D10907D41E013920D
-:40054600C3A3E0F5C1754B038009907D41E0F5C1754B02E54BC3957D4017907FCBE4F0C20420160302080AC216907FC104F002080A301D12AE4B054B74402EF582E4347D24
-:40058600F583E0139218AE4B054B74402EF582E4347DF583E0F547D21202080A754B01C22202080A30140302062C200D79907F9AE020E503201E6F301D12AE4B054B7440E9
-:4005C6002EF582E4347DF583E01392C3AE4B054B74402EF582E4347DF583E0F5C1E54BC3957D4017907FCBE4F0C20420160302080AC216907FC104F002080A301D12AE4B91
-:40060600054B74402EF582E4347DF583E0139218AE4B054B74402EF582E4347DF583E0F547D21202080AC22202080A2012030206E3E54BC3957D503E201436200D33907F1A
-:400646009AE020E503201E29301D12AE4B054B74C02EF582E4347CF583E0139218AE4B054B74C02EF582E4347CF583E0F54702080AC21202080A907FCDE4F0D20430160C43
-:40068600C216907FC104F0C21202080A907FCAE030E105C21202080A907FCBE0F57D907D40E013921620142D200D2A907F9AE020E503201E20301D11907D41E0139218A352
-:4006C600E0F547754B0302080A754B02907D41E0F54702080A754B01C21202080AE54BC3957D500302078B907FCCE030E107C222C20602080A907FCDE0F57D907CC0E013AC
-:400706009216301403020783200D7220006F907F9AE020E503201E65301D10907CC1E01392C3A3E0F5C1754B038009907CC1E0F5C1754B02E54BC3957D4017907FCDE4F0AE
-:40074600D20420160302080AC216907FC104F002080A301D12AE4B054B74C02EF582E4347CF583E0139218AE4B054B74C02EF582E4347CF583E0F547D21202080A754B0173
-:40078600C22202080A301403020808200D74907F9AE020E503201E6A301D12AE4B054B74C02EF582E4347CF583E01392C3AE4B054B74C02EF582E4347CF583E0F5C1E54B3F
-:4007C600C3957D4013907FCDE4F0D204301635C216907FC104F0802C301D12AE4B054B74C02EF582E4347CF583E0139218AE4B054B74C02EF582E4347CF583E0F547D2122A
-:400806008002C222D22520980302093EC2982001030208B0202327AE48054874802EF582E4347EF583E599F0301B49AE48054874802EF582E4347EF583E598F08036AF996E
-:40084600EFB55804D20B802CEFB55704C20B8024AE48054874802EF582E4347EF583EFF0301B11AE48054874802EF582E4347EF583E598F0D219E548C39554500302093C9F
-:40088600907FB8E030E115E548C39440500302093C15481548052DD20C02093C907FB7E548F0754800C20102093C202327AE48054874002EF582E4347EF583E599F0301BBF
-:4008C60049AE48054874002EF582E4347EF583E598F08036AF99EFB55804D20B802CEFB55704C20B8024AE48054874002EF582E4347EF583EFF0301B11AE48054874002E51
-:40090600F582E4347EF583E598F0D219E548C395544023907FB6E030E111E548C39440401515481548052DD20C800B907FB9E548F0754800D201D22520C003020A70C2C016
-:400946002002030209E2202427AE49054974802EF582E4347DF583E5C1F0301D49AE49054974802EF582E4347DF583E5C0F08036AFC1EFB57004D20D802CEFB56F04C20DAE
-:400986008024AE49054974802EF582E4347DF583EFF0301D11AE49054974802EF582E4347DF583E5C0F0D21AE549C3956C5003020A6E907FBCE030E115E549C39440500351
-:4009C600020A6E154915490539D20E020A6E907FBBE549F0754900C202020A6E202427AE49054974002EF582E4347DF583E5C1F0301D49AE49054974002EF582E4347DF555
-:400A060083E5C0F08036AFC1EFB57004D20D802CEFB56F04C20D8024AE49054974002EF582E4347DF583EFF0301D11AE49054974002EF582E4347DF583E5C0F0D21AE54983
-:400A4600C3956C4023907FBAE030E111E549C394404015154915490539D20E800B907FBDE549F0754900D202D225302505C225020056D0D0D086D082D083D0E032907FCE99
-:400A8600E030E103020BA5E4F51274402512F582E4347CF583E0FFE5127C007B00244CF9EC3400FAEF1215CD0512E512B418DBE54C600C75C92075C836854DCA854ECBE5BC
-:400AC6004F13921B929FE55013921CE551139223E5526009907F98E054FBF08007907F98E04404F0E5536009907F98E0547FF08007907F98E04480F0E559600BC213C20B18
-:400B0600907F95E04402F0E55A600BD20BD20C907F95E04402F0E55B600DC2AFC211D200E4F57CF54AD2AFE55C6005302302D20BE55D6015907F95E054FDF0907F9EE044D9
-:400B460002F0907F98E054FDF0E55E600AD29CC298752E01754028E55F6007C29CE4F548F52EE5606003E4F548E5616002D207E5626008E55E7002F540D20CE56360199060
-:400B86007FD77411F07431F07412F07432F07415F07435F0D203D201D209E4907FCFF0A213E433FF652B60048F2BD20CA20BE433FF652C60048F2CD20C907F9BE054086589
-:400BC600276007E05408F527D20C907F9BE05440B52909E054406440F529D20C300735C2AF300118907FB8E020E127E5486009907FB7F0E4F548C201C2078016907FB6E0E9
-:400C060020E10FE5486009907FB9F0E4F548D201C207D2AF20053730031B907FC6E020E12D907E40E0139215754A01907FC7E0F57CD2058019907FC8E020E112907DC0E0CF
-:400C4600139215754A01907FC9E0F57CD205202133200006E54A657C702A30051A300309E4907FC7F0C2038007E4907FC9F0D203C205E4F57CF54A30150AC215C200907F5C
-:400C8600BF7401F0302103020D94200503020D94301C0A907F9BE020E303020D94300B03020D94301303020D94300362301B12AF4A054A74402FF582E4347EF583E01392CE
-:400CC6002DAF4A054A74402FF582E4347EF583E0F513E54AC3957C502A301B12AF4A054A74402FF582E4347EF583E0139217AF4A054A74402FF582E4347EF583E0F546D266
-:400D060011806BC211E4907FC7F0C2038060301B12AF4A054A74C02FF582E4347DF583E013922DAF4A054A74C02FF582E4347DF583E0F513E54AC3957C502A301B12AF4A67
-:400D4600054A74C02FF582E4347DF583E0139217AF4A054A74C02FF582E4347DF583E0F546D2118009C211E4907FC9F0D203301B04A22D929BD221C2AF85139920110D3043
-:400D8600150AC215C200907FBF7401F0D2AF907FD0E030E103020EB5E4F51274C02512F582E4347BF583E0FFE5127C007B002464F9EC3400FAEF1215CD0512E512B418DB51
-:400DC600E564600B758960758840D2DF85658DE56713921D92C7E56813921EE569139224E56A6009907F97E054EFF08007907F97E04410F0E56B6009907F97E0547FF080A4
-:400E060007907F97E04480F0E571600BC214C20D907F94E04408F0E572600BD20DD20E907F94E04408F0E573600DC2AFC212D200E4F57DF54BD2AFE5746005302402D20D20
-:400E4600E5756015907F94E054F7F0907F9DE04408F0907F97E054F7F0E576600AD2C4C2C0753A01754128E5776007C2C4E4F549F53AE5786003E4F549E5796002D208E5F0
-:400E86007A6008E5767002F541D20EE57B6019907FD77413F07433F07414F07434F07416F07436F0D204D202D20AE4907FD1F0A214E433FF653760048F37D20EA20DE43304
-:400EC600FF653860048F38D20E907F9AE0542065336007E05420F533D20E907F9AE05440B53509E054406440F535D20E300835C2AF300218907FBCE020E127E54960099099
-:400F06007FBBF0E4F549C202C2088016907FBAE020E10FE5496009907FBDF0E4F549D202C208D2AF20063730041B907FCAE020E12D907D40E0139216754B01907FCBE0F503
-:400F46007DD2068019907FCCE020E112907CC0E0139216754B01907FCDE0F57DD206202233200006E54B657D702A30061A300409E4907FCBF0C2048007E4907FCDF0D2042C
-:400F8600C206E4F57DF54B30160AC216C200907FC17401F03022030210A42006030210A4301E0A907F9AE020E5030210A4300D030210A43014030210A4300462301D12AF8E
-:400FC6004B054B74402FF582E4347DF583E013922DAF4B054B74402FF582E4347DF583E0F513E54BC3957D502A301D12AF4B054B74402FF582E4347DF583E0139218AF4B78
-:40100600054B74402FF582E4347DF583E0F547D212806BC212E4907FCBF0C2048060301D12AF4B054B74C02FF582E4347CF583E013922DAF4B054B74C02FF582E4347CF5F2
-:4010460083E0F513E54BC3957D502A301D12AF4B054B74C02FF582E4347CF583E0139218AF4B054B74C02FF582E4347CF583E0F547D2128009C212E4907FCDF0D204301DF4
-:4010860004A22D92C3D222C2AF8513C120120D30160AC216C200907FC17401F0D2AF907FC2E030E10302117AE51A7046300C3FE540703BA20933F531C209C20CE4F5127E0D
-:4010C600007B0074262512F9EE3400FA121587FF74802512F582E4347BF583EFF00512E512B40CDB907FC3740CF075401022751A0122E51A64017045300E3EE541703AA2C5
-:401106000A33F53DC20AC20EE4F5127E007B0074322512F9EE3400FA121587FF74802512F582E4347BF583EFF00512E512B40CDB907FC3740CF0754110751A0222E51C60CA
-:4011460030151CE4F5127E007B00741B2512F9EE3400FA121587FF74802512F582E4347BF583EFF00512E512B403DB907FC37403F0E4F51A22907FE9E012161712400012A7
-:40118600B401132003119E06123308122D0912200A13760B0000136F907FEBE024FE6016146040240270697419907FD4F07400907FD5F0021376907FEAE0FF12174B8B1261
-:4011C6008A138914EA496011AE02EE907FD4F0AF01EF907FD5F0021376907FB4E04401F0021376907FEAE0FF12179A8B128A138914EA496011AE02EE907FD4F0AF01EF9083
-:401206007FD5F0021376907FB4E04401F0021376907FB4E04401F0021376907F007401F0907FB5F00213761214C3021376907F007401F0907FB5F0021376907FE8E0247FBF
-:4012460060241460312402705BA226E433FF25E0FFA22BE4334F907F00F0E4A3F0907FB57402F0021376E4907F00F0A3F0907FB57402F0021376907FECE0F45480FFC45429
-:401286000FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F0021376907FB4E04401F0021376907FE8E024FE601D24026003021376907FEA0B
-:4012C600E0B40105C226021376907FB4E04401F0021376907FEAE07038907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E4F0907FECE05480FF131313A7
-:40130600541FFFE054072F907FD7F0E04420F0805F907FB4E04401F08056907FE8E024FE60182402704A907FEAE0B40104D226803F907FB4E04401F08036907FEAE07020A3
-:40134600907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F08007907FB4E04401F0907FB4E04402F0222028030214C2E54063
-:4013860060021540E548604F65447045E542F460020542E542C39555403DC2AF300118907FB8E020E127907FB7E548F0C201E4F548F542F5448016907FB6E020E10F907F07
-:4013C600B9E548F0D201E4F548F542F544D2AF8006854844E4F542E52E602D201907907F9BE030E00EE52F6005E4F52FD20CE4F53E8013E53ED39556500CE53EB556057504
-:401406002F01D20C053EC219E54160021541E549604F65457045E543F460020543E543C3956D403DC2AF300218907FBCE020E127907FBBE549F0C202E4F549F543F54580E2
-:4014460016907FBAE020E10F907FBDE549F0D202E4F549F543F545D2AF8006854945E4F543E53A602D201A07907F9AE030E20EE53B6005E4F53BD20EE4F53F8013E53FD35E
-:40148600956E500CE53FB56E05753B01D20E053FC21A907FD2E020E123907B40E06009E0F51C907B42E0F51D907B41E06009907FD77417F07437F0E4907FD3F022E4907FC5
-:4014C60093F0907F9C7430F0907F96E04410F0907F94740DF0907F9D749AF0907F97E054FDF0907F957423F0907F9E7484F0E4907FC7F0907FC9F0907FCFF075984043A89E
-:4015060010C21BC205C221C20BC213F57CF54AC211C215F542C219F544F548C223C21CF52DF52FC207C200C21FF53EC209D20CF526907FCBF0907FCDF0907FD1F075C04043
-:4015460043A840C21DC206C222C20DC214F57DF54BC212C216F543C21AF545F549C224C21EF539F53BC208C200C220F53FC20AD20E753201907FDF74FFF0907FDEF0D228DE
-:4015860022BB010689828A83E0225002E722BBFE02E32289828A83E49322BB010CE58229F582E5833AF583E0225006E92582F8E622BBFE06E92582F8E222E58229F582E553
-:4015C600833AF583E49322BB010689828A83F0225002F722BBFE01F322BB0110E58229F582E5833AF583E0F5F0A3E0225009E92582F886F008E622BBFE0AE92582F8E2F511
-:40160600F008E222E5832AF583E993F5F0A3E99322D083D082F8E4937012740193700DA3A393F8740193F5828883E4737402936860EFA3A3A380DF787FE4F6D8FD75817D0E
-:401646000216840216C9E493A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F4420C8834004F456800146F6DFE4800B010204081020408090181A
-:40168600C5E47E019360BCA3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE493A3F8E493A3C8C582C8CAC583CAF0A3C8C582C8CAC583CADFE9DE39
-:4016C600E780BE751101907F92E054FDF0907FAEE0FFD39226E433FEEF4EF0D2E843D820907FDE7401F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE044C5
-:4017060001F0907FAEE0440DF0D2AFD2BCD2BED22D12187FC227C225C228302803120A83907FD8E065106008E0F51012137E80EA302707C22712117B80E0302CDDC22C12C5
-:40174600002680D622E4FE7517FF751819751912AB17AA18A9199000011215A06402702DAD060EEDB50701229000021215DF85F015F5166215E5156216E516621529FDE551
-:40178600153AA9057517FFF518891980C37B007A007900228F15E4F5167517FF751819751986AB17AA18A9199000011215A0B4031DAF160516EFB51501221215877E0029BE
-:4017C600FFEE3AA9077517FFF518891980D47B007A00790022E4907F93F0907F9CF0907F94F0907F9D7402F0907F97F0E4907F95F0907F9E74FFF0E4907F98F0907F9DF003
-:4018060022C0E0C083C082C085C084C086758600907FC4E4F05391EF907FAB7404F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2275391EF9024
-:401846007FAB7401F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D22C5391EF907FAB7408F0D086D084D085D082D083D0E032907FD6E054FBF0DD
-:40188600E04408F0302D04E04402F07FF47E01120006907FD6E054F7F0E04404F0227400F58690FDA57C05A3E582458370F922907FD6E04480F0438701000000000022C125
-:4018C600AA011A00031B030000C127C12CC126C12B000000000000000000000000000000000000000000000000000000000000000000000000000000000012011001FF0031
-:401906000040CD060F0100000102000109027400010100A032090400000EFF0000000705010240000007050202400000070503024000000705040240000007050502400078
-:4019460000070506024000000705070240000007058102400001070582024000010705830240000107058402400001070585024000010705860240000107058702400001F3
-:401986000403090448034B00650079007300700061006E002C002000610020006400690076006900730069006F006E0020006F006600200049006E006E006F005300790040
-:4019C6007300200049006E0063002E0036034B00650079007300700061006E0020005500530042002000530065007200690061006C002000410064006100700074006500F9
-:401A0600720000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002E
-:401A46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060
-:401A86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020
-:401AC6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002183100021B78
-:091B06000400021807000218583F
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa28x.HEX b/firmware/keyspan/usa28x.HEX
deleted file mode 100644
index 9f0f7fac7609..000000000000
--- a/firmware/keyspan/usa28x.HEX
+++ /dev/null
@@ -1,141 +0,0 @@
-:030033000212F7BF
-:10000300E4907F93F0907F9C7430F0E4907F96F0BF
-:10001300907F94F0907F9D74FFF0E4907F97F09031
-:0F0023007F95F0907F9E7407F0E4907F98F02215
-:1000460030091812131BEFC3953C40030200D890E9
-:100056007FBF7401F0C209C200807730033B907FF6
-:10006600C6E020E16D12131BEFC394405064907EEE
-:1000760040E0139209907FC7E014F5192000116043
-:100086000FF5087E7E7F41750C7E750D41120CBA08
-:10009600C203E4907FC7F08039907FC8E020E13248
-:1000A60012131BEFC394405029907DC0E0139209B0
-:1000B600907FC9E014F519200011600FF5087E7DC8
-:1000C6007FC1750C7D750DC1120CBAD203E4907F09
-:1000D600C9F0907FB6E030E1030201601211D68FBD
-:1000E600191213278F36E519C3953A500F1212EBE2
-:1000F600EF30E008E53620E703300B5EC20BE5196A
-:0C003600907F987410F090C000E0FF2252
-:03004300021300A5
-:03000000020E00ED
-:400106006058B48003433602E53630E726E519D3942040037519208519087E7E7F80750C7E750D80AF36120F4BE51925E0907FB7F08027E519D3943F400375193F851908D4
-:40014600907E80E536F07E7E7F81750C7E750D81120CDFE51904907FB7F0907FCEE030E1062005030203C1C205E4F51874402518F582E4347CF583E0FFE5187C007B017AF1
-:400186007E79002400F9EC347EFAEF120ED20518E518B420D7907E00E06068907E03E060247F01E4FD1211B17F037DCD1211B1434680907F987414F090C000E546F0E490E0
-:4001C6007E13F08030907E01E0FF121035907E02E0FF12105B7F01907E11E0FD1211B17F037D071211B1434680907F987414F090C000E546F0907F987412F0E5404406903E
-:40020600C000F0907E03E07006907E13E07008E4907E13F07525FF907E05E06012A3E0543FF544907F987413F090C000E544F0907E07E0602BA3E0600543428080035342DA
-:400246007F5342FC907E09E06011434202A3E0FF1210A7907E0BE0FF1210CDAF42121081907E03E0600853427FAF42121081907E0CE06018A3E0600543460280035346FDB4
-:40028600907F987414F090C000E546F0907E0EE06018A3E0600543460180035346FE907F987414F090C000E546F0907E12E0F53AA3E013920DA3E0F53CA3E060054346108B
-:4002C60080035346EF907F987414F090C000E546F0907E16E060325344BF907F987413F0E544547F90C000F0907F987411F01212DFEF54FE90C000F0533EFDE4FFAD3E120F
-:4003060011B1E4F52AF529D207907E17E0600F433E02E4FFAD3E1211B1752901D207907E18E06010907F987412F0E540440490C000F0D200907E19E06011434440907F98F2
-:400346007413F0E544547F90C000F0907E1AE0600F533EFEE4FFAD3E1211B1752B01D207907E1BE0600F433E01E4FFAD3E1211B1E4F52BD207907E1CE0600E907F98741284
-:40038600F0E540440290C000F0907E1DE06002D20B907E1EE06008752C01E4F538D207907E1FE06011907FD77411F07431F07415F07435F0D203E4907FCFF0301A52E53892
-:4003C60060021538201349E513D3940040041513803E75130A301B02D2131212DFEF5401F519652A600585192AD207121333EF5480F51965266005851926D207300D11127F
-:400406001333EF5410F51965256005851925D207201B030207EC300A1812136FEFC3953D40030204AE907FC17401F0C20AC200807730043B907FCAE020E16D12136FEFC35A
-:4004460094405064907D40E013920A907FCBE014F519200011600FF5087E7D7F41750C7D750D41120D04C204E4907FCBF08039907FCCE020E13212136FEFC39440502990BC
-:400486007CC0E013920A907FCDE014F519200011600FF5087E7C7FC1750C7C750DC1120D04D204E4907FCDF0907FBAE030E1030205361212208F1912137B8F37E519C3952B
-:4004C6003B500F121357EF30E008E53720E703300C5EC20CE5196058B48003433702E53730E726E519D3942040037519208519087E7D7F80750C7D750D80AF37120F84E503
-:400506001925E0907FBBF08027E519D3943F400375193F851908907D80E537F07E7D7F81750C7D750D81120D29E51904907FBBF0907FD0E030E106200603020797C206E4F8
-:40054600F51874C02518F582E4347BF583E0FFE5187C007B017A7E79202420F9EC347EFAEF120ED20518E518B420D7907E20E06068907E23E060247F01E4FD1211FB7F0329
-:400586007DCD1211FB434780907F98740CF090C000E547F0E4907E33F08030907E21E0FF121119907E22E0FF12113F7F01907E31E0FD1211FB7F037D071211FB4347809048
-:4005C6007F98740CF090C000E547F0907F98740AF0E541440690C000F0907E23E07006907E33E07008E4907E33F0752EFF907E25E06012A3E0543FF545907F98740BF090EB
-:40060600C000E545F0907E27E0602BA3E06005434380800353437F5343FC907E29E06011434302A3E0FF121165907E2BE0FF12118BAF431210F3907E23E0600853437FAFFE
-:40064600431210F3907E2CE06018A3E0600543470280035347FD907F98740CF090C000E547F0907E2EE06018A3E0600543470180035347FE907F98740CF090C000E547F0D4
-:40068600907E32E0F53BA3E013920EA3E0F53DA3E0600543471080035347EF907F98740CF090C000E547F0907E36E060325345BF907F98740BF0E545547F90C000F0907F79
-:4006C600987409F012134BEF54FE90C000F0533FFDE4FFAD3F1211FBE4F533F532D208907E37E0600F433F02E4FFAD3F1211FB753201D208907E38E06010907F98740AF043
-:40070600E541440490C000F0D200907E39E06011434540907F98740BF0E545547F90C000F0907E3AE0600F533FFEE4FFAD3F1211FB753401D208907E3BE0600F433F01E4E9
-:40074600FFAD3F1211FBE4F534D208907E3CE0600E907F98740AF0E541440290C000F0907E3DE06002D20C907E3EE06008753501E4F539D208907E3FE06011907FD7741389
-:40078600F07433F07416F07436F0D204E4907FD1F0301A52E53960021539301349E513D3940040041513803E75130A301B02C21312134BEF5401F51965336005851933D279
-:4007C60008121387EF5480F519652F600585192FD208300E11121387EF5410F519652E600585192ED208301A2A907FD2E020E123907B40E06009E0F515907B42E0F5169035
-:400806007B41E06009907FD77417F07437F0E4907FD3F0907FC2E030E103020920E50A7040300739E5387035C207F5187E007B0074242518F9EE3400FA120E8CFF748025BD
-:4008460018F582E4347BF583EFF00518E518B409DB907FC37409F0753810E4F52C750A0122E50A64017040300839E5397035C208F5187E007B00742D2518F9EE3400FA1297
-:400886000E8CFF74802518F582E4347BF583EFF00518E518B409DB907FC37409F0753910E4F535750A0222E50A6402703630142FC214F5187E007B00740E2518F9EE340083
-:4008C600FA120E8CFF74802518F582E4347BF583EFF00518E518B405DB907FC37405F0750A0322E51560301515E4F5187E007B0074142518F9EE3400FA120E8CFF748025F2
-:4009060018F582E4347BF583EFF00518E518B403DB907FC37403F0E4F50A22907FE9E0120EE40A08000A7C010AE80309440609FB0809F50909DD0A09EC0B00000B37907F3D
-:40094600EBE024FE6019146061240260030209D37419907FD4F07400907FD5F0020B3E907FEAE070047F0280027F03758282758319EFF075827B758319F0758274758319B2
-:40098600F0758266758319F0758258758319F0907FEAE004758217758319F07419907FD4F07412907FD5F0020B3E907FEAE0FF120F0AEA49600DEA907FD4F0E9907FD5F085
-:4009C600020B3E907FB4E04401F0020B3E907FB4E04401F0020B3E907F00E509F0907FB57401F0020B3E907FEAE0F509020B3E120B46020B3E907F007401F0907FB5F00205
-:400A06000B3E907FE8E0247F60241460312402705BA210E433FF25E0FFA216E4334F907F00F0E4A3F0907FB57402F0020B3EE4907F00F0A3F0907FB57402F0020B3E907F04
-:400A4600ECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F0020B3E907FB4E04401F0020B3E907FE8E024FE601D24020F
-:400A86006003020B3E907FEAE0B40105C210020B3E907FB4E04401F0020B3E907FEAE07038907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E4F0907FB6
-:400AC600ECE05480FF131313541FFFE054072F907FD7F0E04420F0805F907FB4E04401F08056907FE8E024FE60182402704A907FEAE0B40104D210803F907FB4E04401F049
-:400B06008036907FEAE07020907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F08007907FB4E04401F0907FB4E04402F022D4
-:400B4600E4907F93F0907F9C7430F0E4907F96F0907F9574C0F0907F9E743FF0907F987418F0E4F58E907FDF74FFF0907FDEF0E4F5247518017B0074242518F9E43400FA8B
-:400B8600E4120ED20518E518B409EA753A01E4F538F513F536C207C20BC205C200C209C213907F987413F075440390C0007403F07F0CE4FD1211B17F108F42121081907F02
-:400BC600987412F07F018F40EF440690C000F0907F987414F075468090C0007480F00FE4FD1211B1E4FF7EA3AD068D3E1211B1907F987411F090C000E4F07F057D7F12118E
-:400C0600B17F0112126A7F037D071211B1201B03020CB7752D017518017B00742D2518F9E43400FAE4120ED20518E518B409EA753B01E4F539F513F537C208C20CC206C2CD
-:400C460000C20AC213907F98740BF075450390C0007403F07F0CE4FD1211FB7F108F431210F3907F98740AF07F018F41EF440690C000F0907F98740CF075478090C000744E
-:400C860080F00FE4FD1211FBE4FF7EA3AD068D3F1211FB907F987409F090C000E4F07F057D7F1211FB7F0112128B7F037D071211FBD21222907F987410F0AF08E50DF582A5
-:400CC600E50CF583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987410F0AF08E50DF582E50CF583C2AF058690C000E00586F0A30586DFF70586D2AF22907F20
-:400D0600987408F0AF08E50DF582E50CF583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987408F0AF08E50DF582E50CF583C2AF058690C000E00586F0A3055C
-:400D460086DFF70586D2AF227400F58690FDA57C05A3E582458370F922907FD6E04480F0438701000000000022D219907F92E04402F0907FAEE0FFD39210E433FEEF4EF089
-:400D8600D2E843D820907FDE7401F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE04401F0907FAEE0440DF0D2AFD21A121245C211E4F50BF513C217C212D4
-:400DC600907FA104F0907FD8E065176010301205D21A120046907FD8E0F5178008301205C21A120046301107C21112092180D63018D3C21812139380CC22787FE4F6D8FDC7
-:400E0600758147020E47020D6FE493A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F4420C8834004F456800146F6DFE4800B01020408102040F5
-:400E4600809012ACE47E019360BCA3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE493A3F8E493A3C8C582C8CAC583CAF0A3C8C582C8CAC583CA1E
-:400E8600DFE9DEE780BEBB010689828A83E0225002E722BBFE02E32289828A83E49322BB010CE58229F582E5833AF583E0225006E92582F8E622BBFE06E92582F8E222E5B8
-:400EC6008229F582E5833AF583E49322BB010689828A83F0225002F722BBFE01F322D083D082F8E4937012740193700DA3A393F8740193F5828883E4737402936860EFA3C1
-:400F0600A3A380DF8F18E4F519751AFF751B19751C86AB1AAA1BA91C900001120EA5B4031DAF190519EFB5180122120E8C7E0029FFEE3AA907751AFFF51B891C80D47B00A5
-:400F46007A007900228F1A050DE50DAE0C7002050C14F5828E83E51AF0120036050DE50DAC0C7002050C14F5828C83EFF01508E508600A1213278F1AEF423680CA228F1AFC
-:400F8600050DE50DAE0C7002050C14F5828E83E51AF012133F050DE50DAC0C7002050C14F5828C83EFF01508E508600A12137B8F1AEF423780CA22C0E0C083C082C085C088
-:400FC60084C086758600907FC4E4F05391EF907FAB7404F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2115391EF907FAB7401F0D086D084D0C6
-:4010060085D082D083D0E032C0E0C083C082C085C084C086758600D2185391EF907FAB7408F0D086D084D085D082D083D0E032907F987413F090C00074BFF0907F9874108A
-:40104600F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF0907F987411F090C000EFF0907F987413F0E544547F90C000F022907F98741349
-:40108600F090C00074BFF0907F987412F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF0907F987414F090C000EFF0907F987413F0E544D9
-:4010C600547F90C000F022907F987413F090C00074BFF0907F987416F090C000EFF0907F987413F0E544547F90C000F022907F98740BF090C00074BFF0907F98740AF0902A
-:40110600C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907F987408F090C000EFF0907F98740BF0E545547F90C000F022907F98740BF090AF
-:40114600C00074BFF0907F987409F090C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907F98740CF090C000EFF0907F98740BF0E545547FEC
-:4011860090C000F022907F98740BF090C00074BFF0907F98740EF090C000EFF0907F98740BF0E545547F90C000F022907F987413F0E544547F90C000F0907F987417F09075
-:4011C600C000EFF0907F987415F090C000EDF02212130F8F1A12130F8F1BE51A651B601212130F8F1AE51A651B600712130F8F1B80E8AF1A22907F98740BF0E545547F9098
-:40120600C000F0907F98740FF090C000EFF0907F98740DF090C000EDF0221213638F1A1213638F1BE51A651B60121213638F1AE51A651B60071213638F1B80E8AF1A2290C8
-:401246007FD6E054FBF0E04408F0301A04E04402F07FF47E011212C8907FD6E054F7F0E04404F022AE07E4FFE53E547FFD1211B1907F987411F090C000EEF0E4E53E4480E8
-:40128600FD1211B122AE07E4FFE53F547FFD1211FB907F987409F090C000EEF0E4E53F4480FD1211FB22050E02000000000314030000C111C118C195C110C116010A00C19C
-:4012C6009B008E188F19E5191519AE18700215184E6005120D4E80EE22907F987411F090C000E0FF22907F987412F090C000E0FF2253D8EF320000000000020FE70002138A
-:401306000400020FBD0002100E907F987413F090C000E0FF22907F987414F090C000E0FF22907F987415F090C000E0FF22907F987416F090C000E0FF22907F987408F09050
-:40134600C000E0FF22907F987409F090C000E0FF22907F98740AF090C000E0FF22907F98740BF090C000E0FF22907F98740CF090C000E0FF22907F98740DF090C000E0FFC5
-:4013860022907F98740EF090C000E0FF22120003120D5F120B4622000000000000000000000000000000000000000000000000000000000000000000000000000000000083
-:4013C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7
-:4014060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A6
-:401446000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066
-:401486000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026
-:4014C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6
-:4015060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A5
-:401546000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065
-:401586000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025
-:4015C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5
-:4016060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4
-:401646000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064
-:401686000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024
-:4016C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4
-:4017060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3
-:401746000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063
-:401786000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023
-:4017C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3
-:4018060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2
-:401846000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062
-:401886000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022
-:4018C6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012011001FF00BF
-:401906000040CD06100100000102000209027400010100A032090400000EFF0000000705010240000007050202400000070503024000000705040240000007050502400076
-:4019460000070506024000000705070240000007058102400001070582024000000705830240000107058402400001070585024000010705860240000107058702400001F4
-:401986000403090448034B00650079007300700061006E002C002000610020006400690076006900730069006F006E0020006F006600200049006E006E006F005300790040
-:4019C6007300200049006E0063002E0036034B00650079007300700061006E0020005500530042002000530065007200690061006C002000410064006100700074006500F9
-:041A0600720000006A
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa28xa.HEX b/firmware/keyspan/usa28xa.HEX
deleted file mode 100644
index f14932efbafb..000000000000
--- a/firmware/keyspan/usa28xa.HEX
+++ /dev/null
@@ -1,141 +0,0 @@
-:030033000212F9BD
-:10000300E4907F93F0907F9C7430F0E4907F96F0BF
-:10001300907F94F0907F9D74FFF0E4907F97F09031
-:0F0023007F95F0907F9E7407F0E4907F98F02215
-:10004600300918121327EFC3953C40030200D890DD
-:100056007FBF7401F0C209C200807730033B907FF6
-:10006600C6E020E16D121327EFC394405064907EE2
-:1000760040E0139209907FC7E014F5192000116043
-:100086000FF5087E7E7F41750C7E750D41120CC8FA
-:10009600C203E4907FC7F08039907FC8E020E13248
-:1000A600121327EFC394405029907DC0E0139209A4
-:1000B600907FC9E014F519200011600FF5087E7DC8
-:1000C6007FC1750C7D750DC1120CC8D203E4907FFB
-:1000D600C9F0907FB6E030E1030201601211E48FAF
-:1000E600191213338F36E519C3953A500F12130FB1
-:1000F600EF30E008E53620E703300B5EC20BE5196A
-:0C003600907F987410F090C000E0FF2252
-:03004300021300A5
-:03000000020E0EDF
-:400106006058B48003433602E53630E726E519D3942040037519208519087E7E7F80750C7E750D80AF36120F59E51925E0907FB7F08027E519D3943F400375193F851908C6
-:40014600907E80E536F07E7E7F81750C7E750D81120CEDE51904907FB7F0907FCEE030E1062005030203C1C205E4F51874402518F582E4347CF583E0FFE5187C007B017AE3
-:400186007E79002400F9EC347EFAEF120EE00518E518B420D7907E00E06068907E03E060247F01E4FD1211BF7F037DCD1211BF434680907F987414F090C000E546F0E490B6
-:4001C6007E13F08030907E01E0FF121043907E02E0FF1210697F01907E11E0FD1211BF7F037D071211BF434680907F987414F090C000E546F0907F987412F0E54044069006
-:40020600C000F0907E03E07006907E13E07008E4907E13F07525FF907E05E06012A3E0543FF544907F987413F090C000E544F0907E07E0602BA3E0600543428080035342DA
-:400246007F5342FC907E09E06011434202A3E0FF1210B5907E0BE0FF1210DBAF4212108F907E03E0600853427FAF4212108F907E0CE06018A3E0600543460280035346FD7C
-:40028600907F987414F090C000E546F0907E0EE06018A3E0600543460180035346FE907F987414F090C000E546F0907E12E0F53AA3E013920DA3E0F53CA3E060054346108B
-:4002C60080035346EF907F987414F090C000E546F0907E16E060325344BF907F987413F0E544547F90C000F0907F987411F01212EDEF54FE90C000F0533EFDE4FFAD3E1201
-:4003060011BFE4F52AF529D207907E17E0600F433E02E4FFAD3E1211BF752901D207907E18E06010907F987412F0E540440490C000F0D200907E19E06011434440907F98D6
-:400346007413F0E544547F90C000F0907E1AE0600F533EFEE4FFAD3E1211BF752B01D207907E1BE0600F433E01E4FFAD3E1211BFE4F52BD207907E1CE0600E907F98741268
-:40038600F0E540440290C000F0907E1DE06002D20B907E1EE06008752C01E4F538D207907E1FE06011907FD77411F07431F07415F07435F0D203E4907FCFF0301A52E53892
-:4003C60060021538201349E513D3940040041513803E75130A301B02D2131212EDEF5401F519652A600585192AD20712133FEF5480F51965266005851926D207300D111265
-:40040600133FEF5410F51965256005851925D207201B030207EC300A1812137BEFC3953D40030204AE907FC17401F0C20AC200807730043B907FCAE020E16D12137BEFC336
-:4004460094405064907D40E013920A907FCBE014F519200011600FF5087E7D7F41750C7D750D41120D12C204E4907FCBF08039907FCCE020E13212137BEFC39440502990A2
-:400486007CC0E013920A907FCDE014F519200011600FF5087E7C7FC1750C7C750DC1120D12D204E4907FCDF0907FBAE030E10302053612122E8F191213878F37E519C39503
-:4004C6003B500F121363EF30E008E53720E703300C5EC20CE5196058B48003433702E53730E726E519D3942040037519208519087E7D7F80750C7D750D80AF37120F92E5E9
-:400506001925E0907FBBF08027E519D3943F400375193F851908907D80E537F07E7D7F81750C7D750D81120D37E51904907FBBF0907FD0E030E106200603020797C206E4EA
-:40054600F51874C02518F582E4347BF583E0FFE5187C007B017A7E79202420F9EC347EFAEF120EE00518E518B420D7907E20E06068907E23E060247F01E4FD1212097F030C
-:400586007DCD121209434780907F98740CF090C000E547F0E4907E33F08030907E21E0FF121127907E22E0FF12114D7F01907E31E0FD1212097F037D0712120943478090FF
-:4005C6007F98740CF090C000E547F0907F98740AF0E541440690C000F0907E23E07006907E33E07008E4907E33F0752EFF907E25E06012A3E0543FF545907F98740BF090EB
-:40060600C000E545F0907E27E0602BA3E06005434380800353437F5343FC907E29E06011434302A3E0FF121173907E2BE0FF121199AF43121101907E23E0600853437FAFD3
-:4006460043121101907E2CE06018A3E0600543470280035347FD907F98740CF090C000E547F0907E2EE06018A3E0600543470180035347FE907F98740CF090C000E547F0C5
-:40068600907E32E0F53BA3E013920EA3E0F53DA3E0600543471080035347EF907F98740CF090C000E547F0907E36E060325345BF907F98740BF0E545547F90C000F0907F79
-:4006C600987409F0121357EF54FE90C000F0533FFDE4FFAD3F121209E4F533F532D208907E37E0600F433F02E4FFAD3F121209753201D208907E38E06010907F98740AF019
-:40070600E541440490C000F0D200907E39E06011434540907F98740BF0E545547F90C000F0907E3AE0600F533FFEE4FFAD3F121209753401D208907E3BE0600F433F01E4DA
-:40074600FFAD3F121209E4F534D208907E3CE0600E907F98740AF0E541440290C000F0907E3DE06002D20C907E3EE06008753501E4F539D208907E3FE06011907FD774137A
-:40078600F07433F07416F07436F0D204E4907FD1F0301A52E53960021539301349E513D3940040041513803E75130A301B02C213121357EF5401F51965336005851933D26D
-:4007C60008121393EF5480F519652F600585192FD208300E11121393EF5410F519652E600585192ED208301A2A907FD2E020E123907B40E06009E0F515907B42E0F516901D
-:400806007B41E06009907FD77417F07437F0E4907FD3F0907FC2E030E103020920E50A7040300739E5387035C207F5187E007B0074242518F9EE3400FA120E9AFF748025AF
-:4008460018F582E4347BF583EFF00518E518B409DB907FC37409F0753810E4F52C750A0122E50A64017040300839E5397035C208F5187E007B00742D2518F9EE3400FA1297
-:400886000E9AFF74802518F582E4347BF583EFF00518E518B409DB907FC37409F0753910E4F535750A0222E50A6402703630142FC214F5187E007B00740E2518F9EE340075
-:4008C600FA120E9AFF74802518F582E4347BF583EFF00518E518B405DB907FC37405F0750A0322E51560301515E4F5187E007B0074142518F9EE3400FA120E9AFF748025D6
-:4009060018F582E4347BF583EFF00518E518B403DB907FC37403F0E4F50A22907FE9E0120EF20A08000A7C010AE80309440609FB0809F50909DD0A09EC0B00000B37907F2F
-:40094600EBE024FE6019146061240260030209D37419907FD4F07400907FD5F0020B3E907FEAE070047F0280027F03758282758319EFF075827B758319F0758274758319B2
-:40098600F0758266758319F0758258758319F0907FEAE004758217758319F07419907FD4F07412907FD5F0020B3E907FEAE0FF120F18EA49600DEA907FD4F0E9907FD5F077
-:4009C600020B3E907FB4E04401F0020B3E907FB4E04401F0020B3E907F00E509F0907FB57401F0020B3E907FEAE0F509020B3E120B46020B3E907F007401F0907FB5F00205
-:400A06000B3E907FE8E0247F60241460312402705BA210E433FF25E0FFA216E4334F907F00F0E4A3F0907FB57402F0020B3EE4907F00F0A3F0907FB57402F0020B3E907F04
-:400A4600ECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F0020B3E907FB4E04401F0020B3E907FE8E024FE601D24020F
-:400A86006003020B3E907FEAE0B40105C210020B3E907FB4E04401F0020B3E907FEAE07038907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E4F0907FB6
-:400AC600ECE05480FF131313541FFFE054072F907FD7F0E04420F0805F907FB4E04401F08056907FE8E024FE60182402704A907FEAE0B40104D210803F907FB4E04401F049
-:400B06008036907FEAE07020907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F08007907FB4E04401F0907FB4E04402F022D4
-:400B4600E4907F93F0907F9C7430F0E4907F96F0907F9574C0F0907F9E743FF0907F987418F0E4F58E907FDF74FFF0907FDEF0E4F5247518017B0074242518F9E43400FA8B
-:400B8600E4120EE00518E518B409EA753A01E4F538F513F536C207C20BC205C200C209C213907F987413F075440390C0007403F07F0CE4FD1211BF7F108F4212108F907FD8
-:400BC600987412F07F018F40EF440690C000F0907F987414F075468090C0007480F00FE4FD1211BFE4FF7EA3AD068D3E1211BF907F987411F090C000E4F07F057D7F121172
-:400C0600BF7F011212787F037D071211BF7F137D011211BF201B03020CC5752D017518017B00742D2518F9E43400FAE4120EE00518E518B409EA753B01E4F539F513F537B7
-:400C4600C208C20CC206C200C20AC213907F98740BF075450390C0007403F07F0CE4FD1212097F108F43121101907F98740AF07F018F41EF440690C000F0907F98740CF00E
-:400C860075478090C0007480F00FE4FD121209E4FF7EA3AD068D3F121209907F987409F090C000E4F07F057D7F1212097F011212997F037D071212097F137D01121209D28D
-:400CC6001222907F987410F0AF08E50DF582E50CF583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987410F0AF08E50DF582E50CF583C2AF058690C000E00568
-:400D060086F0A30586DFF70586D2AF22907F987408F0AF08E50DF582E50CF583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987408F0AF08E50DF582E50CF577
-:400D460083C2AF058690C000E00586F0A30586DFF70586D2AF227400F58690FDA57C05A3E582458370F922907FD6E04480F0438701000000000022D219907F92E04402F00A
-:400D8600907FAEE0FFD39210E433FEEF4EF0D2E843D820907FDE7401F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE04401F0907FAEE0440DF0D2AFD21A56
-:400DC600121253C211E4F50BF513C217C212907FA104F0907FD8E065176010301205D21A120046907FD8E0F5178008301205C21A120046301107C21112092180D63018D38A
-:400E0600C21812139F80CC22787FE4F6D8FD758147020E55020D7DE493A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F4420C8834004F4568031
-:400E46000146F6DFE4800B01020408102040809012BAE47E019360BCA3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE493A3F8E493A3C8C582C828
-:400E8600CAC583CAF0A3C8C582C8CAC583CADFE9DEE780BEBB010689828A83E0225002E722BBFE02E32289828A83E49322BB010CE58229F582E5833AF583E0225006E92548
-:400EC60082F8E622BBFE06E92582F8E222E58229F582E5833AF583E49322BB010689828A83F0225002F722BBFE01F322D083D082F8E4937012740193700DA3A393F87401DE
-:400F060093F5828883E4737402936860EFA3A3A380DF8F18E4F519751AFF751B19751C86AB1AAA1BA91C900001120EB3B4031DAF190519EFB5180122120E9A7E0029FFEEB6
-:400F46003AA907751AFFF51B891C80D47B007A007900228F1A050DE50DAE0C7002050C14F5828E83E51AF0120036050DE50DAC0C7002050C14F5828C83EFF01508E508607B
-:400F86000A1213338F1AEF423680CA228F1A050DE50DAE0C7002050C14F5828E83E51AF012134B050DE50DAC0C7002050C14F5828C83EFF01508E508600A1213878F1AEFF8
-:400FC600423780CA22C0E0C083C082C085C084C086758600907FC4E4F05391EF907FAB7404F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D21123
-:401006005391EF907FAB7401F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2185391EF907FAB7408F0D086D084D085D082D083D0E032907F9833
-:401046007413F090C00074BFF0907F987410F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF0907F987411F090C000EFF0907F987413F0C0
-:40108600E544547F90C000F022907F987413F090C00074BFF0907F987412F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF0907F987414B3
-:4010C600F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF0907F987416F090C000EFF0907F987413F0E544547F90C000F022907F98740BCC
-:40110600F090C00074BFF0907F98740AF090C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907F987408F090C000EFF0907F98740BF0E54582
-:40114600547F90C000F022907F98740BF090C00074BFF0907F987409F090C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907F98740CF090C3
-:40118600C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907F98740EF090C000EFF0907F98740BF0E545547F90C000F022907F987413F0E5CC
-:4011C60044547F90C000F0907F987417F090C000EFF0907F987415F090C000EDF02212131B8F1A12131B8F1BE51A651B601212131B8F1AE51A651B600712131B8F1B80E8ED
-:40120600AF1A22907F98740BF0E545547F90C000F0907F98740FF090C000EFF0907F98740DF090C000EDF02212136F8F1A12136F8F1BE51A651B601212136F8F1AE51A65AD
-:401246001B600712136F8F1B80E8AF1A22907FD6E054FBF0E04408F0301A04E04402F07FF47E011212D6907FD6E054F7F0E04404F022AE07E4FFE53E547FFD1211BF907F2F
-:40128600987411F090C000EEF0E4E53E4480FD1211BF22AE07E4FFE53F547FFD121209907F987409F090C000EEF0E4E53F4480FD12120922050E02000000000314030000DF
-:4012C600C111C118C195C110C116010A00C19B008E188F19E5191519AE18700215184E6005120D5C80EE22907F987411F090C000E0FF2253D8EF32000000020FF500021367
-:401306000400020FCB0002101C907F987412F090C000E0FF22907F987413F090C000E0FF22907F987414F090C000E0FF22907F987415F090C000E0FF22907F987416F0902A
-:40134600C000E0FF22907F987408F090C000E0FF22907F987409F090C000E0FF22907F98740AF090C000E0FF22907F98740BF090C000E0FF22907F98740CF090C000E0FFCA
-:4013860022907F98740DF090C000E0FF22907F98740EF090C000E0FF22120003120D6D120B462200000000000000000000000000000000000000000000000000000000000C
-:4013C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7
-:4014060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A6
-:401446000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066
-:401486000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026
-:4014C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6
-:4015060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A5
-:401546000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065
-:401586000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025
-:4015C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5
-:4016060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4
-:401646000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064
-:401686000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024
-:4016C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4
-:4017060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3
-:401746000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063
-:401786000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023
-:4017C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3
-:4018060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2
-:401846000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062
-:401886000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022
-:4018C6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012011001FF00BF
-:401906000040CD06150100000102000209027400010100A032090400000EFF0000000705010240000007050202400000070503024000000705040240000007050502400071
-:4019460000070506024000000705070240000007058102400001070582024000010705830240000107058402400001070585024000010705860240000107058702400001F3
-:401986000403090448034B00650079007300700061006E002C002000610020006400690076006900730069006F006E0020006F006600200049006E006E006F005300790040
-:4019C6007300200049006E0063002E0036034B00650079007300700061006E0020005500530042002000530065007200690061006C002000410064006100700074006500F9
-:041A0600720000006A
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa28xb.HEX b/firmware/keyspan/usa28xb.HEX
deleted file mode 100644
index 07cb708f1956..000000000000
--- a/firmware/keyspan/usa28xb.HEX
+++ /dev/null
@@ -1,142 +0,0 @@
-:0300330002002D9B
-:04002D0053D8EF3283
-:10004600300918121333EFC3953C40030200D890D1
-:100056007FBF7401F0C209C200807730033B907FF6
-:10006600C6E020E16D121333EFC394405064907ED6
-:1000760040E0139209907FC7E014F5192000116043
-:100086000FF5087E7E7F41750C7E750D41120CCCF6
-:10009600C203E4907FC7F08039907FC8E020E13248
-:1000A600121333EFC394405029907DC0E013920998
-:1000B600907FC9E014F519200011600FF5087E7DC8
-:1000C6007FC1750C7D750DC1120CCCD203E4907FF7
-:1000D600C9F0907FB6E030E1030201601211F58F9E
-:1000E6001912133F8F36E519C3953A500F12131B99
-:1000F600EF30E008E53620E703300B5EC20BE5196A
-:0C003600907F987410F090C000E0FF2252
-:03004300021300A5
-:10000300C0E0C083C082C085C084C086758600906E
-:100013007FC4E4F05391EF907FAB7404F0D086D0AB
-:0A00230084D085D082D083D0E03273
-:03000000020E12DB
-:400106006058B48003433602E53630E726E519D3942040037519208519087E7E7F80750C7E750D80AF36120F5DE51925E0907FB7F08027E519D3943F400375193F851908C2
-:40014600907E80E536F07E7E7F81750C7E750D81120CF1E51904907FB7F0907FCEE030E1062005030203C1E4F51874402518F582E4347CF583E0FFE5187C007B017A7E79AF
-:40018600002400F9EC347EFAEF120EE40518E518B420D7907E00E06068907E03E060247F01E4FD1211D07F037DCD1211D0434680907F987414F090C000E546F0E4907E13F6
-:4001C600F08030907E01E0FF121054907E02E0FF12107A7F01907E11E0FD1211D07F037D071211D0434680907F987414F090C000E546F0907F987412F0E540440690C00093
-:40020600F0907E03E07006907E13E07008E4907E13F07525FF907E05E06012A3E0543FF544907F987413F090C000E544F0907E07E0602BA3E06005434280800353427F53C8
-:4002460042FC907E09E06011434202A3E0FF1210C6907E0BE0FF1210ECAF421210A0907E03E0600853427FAF421210A0907E0CE06018A3E0600543460280035346FD907FFB
-:40028600987414F090C000E546F0907E0EE06018A3E0600543460180035346FE907F987414F090C000E546F0907E12E0F53AA3E013920DA3E0F53CA3E06005434610800317
-:4002C6005346EF907F987414F090C000E546F0907E16E060325344BF907F987413F0E544547F90C000F0907F987411F012130FEF54FE90C000F0533EFDE4FFAD3E1211D080
-:40030600E4F52AF529D207907E17E0600F433E02E4FFAD3E1211D0752901D207907E18E06010907F987412F0E540440490C000F0D200907E19E06011434440907F9874130E
-:40034600F0E544547F90C000F0907E1AE0600F533EFEE4FFAD3E1211D0752B01D207907E1BE0600F433E01E4FFAD3E1211D0E4F52BD207907E1CE0600E907F987412F0E5F8
-:4003860040440290C000F0907E1DE06002D20B907E1EE06008752C01E4F538D207907E1FE06011907FD77411F07431F07415F07435F0D203C205E4907FCFF0301A54E5389E
-:4003C6006002153820134BE513D3940040041513804075130A301B02D21312130FEF5401F519652A600585192AD20712134BEF54806480F51965266005851926D207300D71
-:400406001112134BEF5410F51965256005851925D207201B030207F0300A18121387EFC3953D40030204B0907FC17401F0C20AC200807730043B907FCAE020E16D1213879B
-:40044600EFC394405064907D40E013920A907FCBE014F519200011600FF5087E7D7F41750C7D750D41120D16C204E4907FCBF08039907FCCE020E132121387EFC394405099
-:4004860029907CC0E013920A907FCDE014F519200011600FF5087E7C7FC1750C7C750DC1120D16D204E4907FCDF0907FBAE030E10302053812123F8F191213938F37E5197F
-:4004C600C3953B500F12136FEF30E008E53720E703300C5EC20CE5196058B48003433702E53730E726E519D3942040037519208519087E7D7F80750C7D750D80AF37120FFC
-:4005060096E51925E0907FBBF08027E519D3943F400375193F851908907D80E537F07E7D7F81750C7D750D81120D3BE51904907FBBF0907FD0E030E106200603020799E431
-:40054600F51874C02518F582E4347BF583E0FFE5187C007B017A7E79202420F9EC347EFAEF120EE40518E518B420D7907E20E06068907E23E060247F01E4FD12121A7F03F7
-:400586007DCD12121A434780907F98740CF090C000E547F0E4907E33F08030907E21E0FF121138907E22E0FF12115E7F01907E31E0FD12121A7F037D0712121A43478090AA
-:4005C6007F98740CF090C000E547F0907F98740AF0E541440690C000F0907E23E07006907E33E07008E4907E33F0752EFF907E25E06012A3E0543FF545907F98740BF090EB
-:40060600C000E545F0907E27E0602BA3E06005434380800353437F5343FC907E29E06011434302A3E0FF121184907E2BE0FF1211AAAF43121112907E23E0600853437FAFA0
-:4006460043121112907E2CE06018A3E0600543470280035347FD907F98740CF090C000E547F0907E2EE06018A3E0600543470180035347FE907F98740CF090C000E547F0B4
-:40068600907E32E0F53BA3E013920EA3E0F53DA3E0600543471080035347EF907F98740CF090C000E547F0907E36E060325345BF907F98740BF0E545547F90C000F0907F79
-:4006C600987409F0121363EF54FE90C000F0533FFDE4FFAD3F12121AE4F533F532D208907E37E0600F433F02E4FFAD3F12121A753201D208907E38E06010907F98740AF0EB
-:40070600E541440490C000F0D200907E39E06011434540907F98740BF0E545547F90C000F0907E3AE0600F533FFEE4FFAD3F12121A753401D208907E3BE0600F433F01E4C9
-:40074600FFAD3F12121AE4F534D208907E3CE0600E907F98740AF0E541440290C000F0907E3DE06002D20C907E3EE06008753501E4F539D208907E3FE06011907FD7741369
-:40078600F07433F07416F07436F0D204C206E4907FD1F0301A54E5396002153930134BE513D3940040041513804075130A301B02C213121363EF5401F51965336005851998
-:4007C60033D20812139FEF54806480F519652F600585192FD208300E1112139FEF5410F519652E600585192ED208301A2A907FD2E020E123907B40E06009E0F515907B4297
-:40080600E0F516907B41E06009907FD77417F07437F0E4907FD3F0907FC2E030E103020924E50A7040300739E5387035C207F5187E007B0074242518F9EE3400FA120E9E44
-:40084600FF74802518F582E4347BF583EFF00518E518B409DB907FC37409F0753810E4F52C750A0122E50A64017040300839E5397035C208F5187E007B00742D2518F9EEBF
-:400886003400FA120E9EFF74802518F582E4347BF583EFF00518E518B409DB907FC37409F0753910E4F535750A0222E50A6402703630142FC214F5187E007B00740E25184C
-:4008C600F9EE3400FA120E9EFF74802518F582E4347BF583EFF00518E518B405DB907FC37405F0750A0322E51560301515E4F5187E007B0074142518F9EE3400FA120E9ECB
-:40090600FF74802518F582E4347BF583EFF00518E518B403DB907FC37403F0E4F50A22907FE9E0120EF60A0C000A80010AEC0309480609FF0809F90909E10A09F00B000044
-:400946000B3B907FEBE024FE6019146061240260030209D77419907FD4F07400907FD5F0020B42907FEAE070047F0280027F03758282758319EFF075827B758319F07582DA
-:4009860074758319F0758266758319F0758258758319F0907FEAE004758217758319F07419907FD4F07412907FD5F0020B42907FEAE0FF120F1CEA49600DEA907FD4F0E9BE
-:4009C600907FD5F0020B42907FB4E04401F0020B42907FB4E04401F0020B42907F00E509F0907FB57401F0020B42907FEAE0F509020B42120B4A020B42907F007401F0903B
-:400A06007FB5F0020B42907FE8E0247F60241460312402705BA210E433FF25E0FFA216E4334F907F00F0E4A3F0907FB57402F0020B42E4907F00F0A3F0907FB57402F0022E
-:400A46000B42907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F0020B42907FB4E04401F0020B42907FE8E024FE4E
-:400A8600601D24026003020B42907FEAE0B40105C210020B42907FB4E04401F0020B42907FEAE07038907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583EA
-:400AC600E4F0907FECE05480FF131313541FFFE054072F907FD7F0E04420F0805F907FB4E04401F08056907FE8E024FE60182402704A907FEAE0B40104D210803F907FB47B
-:400B0600E04401F08036907FEAE07020907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F08007907FB4E04401F0907FB4E017
-:400B46004402F022E4907F93F0907F9C7430F0E4907F96F0907F9574C0F0907F9E743FF0907F987418F0E4F58E907FDF74FFF0907FDEF0E4F5247518017B0074242518F945
-:400B8600E43400FAE4120EE40518E518B409EA753A01E4F538F513F536C207C20BC205C200C209C213907F987413F075440390C0007403F07F0CE4FD1211D07F108F42125F
-:400BC60010A0907F987412F07F018F40EF440690C000F0907F987414F075468090C0007480F00FE4FD1211D0E4FF7EA3AD068D3E1211D0907F987411F090C000E4F07F05B0
-:400C06007D7F1211D07F011212897F037D071211D07F137D091211D0201B03020CC9752D017518017B00742D2518F9E43400FAE4120EE40518E518B409EA753B01E4F53978
-:400C4600F513F537C208C20CC206C200C20AC213907F98740BF075450390C0007403F07F0CE4FD12121A7F108F43121112907F98740AF07F018F41EF440690C000F0907FC0
-:400C860098740CF075478090C0007480F00FE4FD12121AE4FF7EA3AD068D3F12121A907F987409F090C000E4F07F057D7F12121A7F011212AA7F037D0712121A7F137D0927
-:400CC60012121AD21222907F987410F0AF08E50DF582E50CF583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987410F0AF08E50DF582E50CF583C2AF058690FD
-:400D0600C000E00586F0A30586DFF70586D2AF22907F987408F0AF08E50DF582E50CF583C2AF058690C0000586E0A30586F00586DFF7D2AF22907F987408F0AF08E50DF53A
-:400D460082E50CF583C2AF058690C000E00586F0A30586DFF70586D2AF227400F58690FDA57C05A3E582458370F922907FD6E04480F0438701000000000022D219907F92B8
-:400D8600E04402F0907FAEE0FFD39210E433FEEF4EF0D2E843D820907FDE7401F0907FDFF0907FAB74FFF0907FA9F0907FAAF05391EF907FAFE04401F0907FAEE0440DF0AD
-:400DC600D2AFD21A121264C211E4F50BF513C217C212907FA104F0907FD8E065176010301205D21A120046907FD8E0F5178008301205C21A120046301107C21112092580F9
-:400E0600D63018D3C2181213AB80CC22787FE4F6D8FD758147020E59020D81E493A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F4420C88340FA
-:400E460004F456800146F6DFE4800B01020408102040809012CBE47E019360BCA3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE493A3F8E493A320
-:400E8600C8C582C8CAC583CAF0A3C8C582C8CAC583CADFE9DEE780BEBB010689828A83E0225002E722BBFE02E32289828A83E49322BB010CE58229F582E5833AF583E022D5
-:400EC6005006E92582F8E622BBFE06E92582F8E222E58229F582E5833AF583E49322BB010689828A83F0225002F722BBFE01F322D083D082F8E4937012740193700DA3A37A
-:400F060093F8740193F5828883E4737402936860EFA3A3A380DF8F18E4F519751AFF751B19751C86AB1AAA1BA91C900001120EB7B4031DAF190519EFB5180122120E9E7EC4
-:400F46000029FFEE3AA907751AFFF51B891C80D47B007A007900228F1A050DE50DAE0C7002050C14F5828E83E51AF0120036050DE50DAC0C7002050C14F5828C83EFF015BA
-:400F860008E508600A12133F8F1AEF423680CA228F1A050DE50DAE0C7002050C14F5828E83E51AF0121357050DE50DAC0C7002050C14F5828C83EFF01508E508600A1213AA
-:400FC600938F1AEF423780CA22E4907F93F0907F9C7430F0E4907F96F0907F95F0907F9E7427F0907F987420F0907F9E7407F0E4907F94F0907F9D74FFF0E4907F97F0227C
-:40100600C0E0C083C082C085C084C086758600D2115391EF907FAB7401F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2185391EF907FAB74087E
-:40104600F0D086D084D085D082D083D0E032907F987413F090C00074BFF0907F987410F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF00C
-:40108600907F987411F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF0907F987412F090C000EFF0907F987413F0E544547F90C000F0220A
-:4010C600907F987413F090C00074BFF0907F987414F090C000EFF0907F987413F0E544547F90C000F022907F987413F090C00074BFF0907F987416F090C000EFF0907F9807
-:401106007413F0E544547F90C000F022907F98740BF090C00074BFF0907F98740AF090C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907FFA
-:40114600987408F090C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907F987409F090C000EFF0907F98740BF0E545547F90C000F022907F71
-:4011860098740BF090C00074BFF0907F98740CF090C000EFF0907F98740BF0E545547F90C000F022907F98740BF090C00074BFF0907F98740EF090C000EFF0907F98740BFD
-:4011C600F0E545547F90C000F022907F987413F0E544547F90C000F0907F987417F090C000EFF0907F987415F090C000EDF0221213278F1A1213278F1BE51A651B60121292
-:4012060013278F1AE51A651B60071213278F1B80E8AF1A22907F98740BF0E545547F90C000F0907F98740FF090C000EFF0907F98740DF090C000EDF02212137B8F1A121325
-:401246007B8F1BE51A651B601212137B8F1AE51A651B600712137B8F1B80E8AF1A22907FD6E054FBF0E04408F0301A04E04402F07FF47E011212E7907FD6E054F7F0E044E1
-:4012860004F022AE07E4FFE53E547FFD1211D0907F987411F090C000EEF0E4E53E4480FD1211D022AE07E4FFE53F547FFD12121A907F987409F090C000EEF0E4E53F448095
-:4012C600FD12121A22050E02000000000314030000C111C118C195C110C116010A00C19B008E188F19E5191519AE18700215184E6005120D6080EE2200000210060002137E
-:4013060004000200030002102D907F987411F090C000E0FF22907F987412F090C000E0FF22907F987413F090C000E0FF22907F987414F090C000E0FF22907F987415F090F5
-:40134600C000E0FF22907F987416F090C000E0FF22907F987408F090C000E0FF22907F987409F090C000E0FF22907F98740AF090C000E0FF22907F98740BF090C000E0FFC0
-:4013860022907F98740CF090C000E0FF22907F98740DF090C000E0FF22907F98740EF090C000E0FF22120FCF120D71120B4A220000000000000000000000000000000000C1
-:4013C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E7
-:4014060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A6
-:401446000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000066
-:401486000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026
-:4014C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E6
-:4015060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A5
-:401546000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000065
-:401586000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025
-:4015C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E5
-:4016060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A4
-:401646000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064
-:401686000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024
-:4016C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E4
-:4017060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A3
-:401746000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063
-:401786000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023
-:4017C60000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000E3
-:4018060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A2
-:401846000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062
-:401886000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022
-:4018C6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012011001FF00BF
-:401906000040CD06100100000102000209027400010100A032090400000EFF0000000705010240000007050202400000070503024000000705040240000007050502400076
-:4019460000070506024000000705070240000007058102400001070582024000000705830240000107058402400001070585024000010705860240000107058702400001F4
-:401986000403090448034B00650079007300700061006E002C002000610020006400690076006900730069006F006E0020006F006600200049006E006E006F005300790040
-:4019C6007300200049006E0063002E0036034B00650079007300700061006E0020005500530042002000530065007200690061006C002000410064006100700074006500F9
-:041A0600720000006A
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa49w.HEX b/firmware/keyspan/usa49w.HEX
deleted file mode 100644
index 5e5b3d13dd5f..000000000000
--- a/firmware/keyspan/usa49w.HEX
+++ /dev/null
@@ -1,145 +0,0 @@
-:030033000218FBB5
-:0C0036009078417401F090C000E0FF22BF
-:10004600E4FF74402FF582E4347BF583E0FEE5158A
-:100056002404FDE43514FAA9057B01EF7C0029F997
-:10006600EC3AFAEE1211F10FBF22D7E5152405F589
-:1000760082E43514F583E07003020134E5152409A2
-:10008600F582E43514F583E0700EE515240AF58251
-:10009600E43514F583E060187F01E4FD121647E5A8
-:1000A600152431F582E43514F583E054CFF0804110
-:1000B600E5152406F582E43514F583E0FF1216767D
-:1000C600E5152407F582E43514F583E0FF120003F5
-:1000D6007F01E5152408F582E43514F583E0FD1269
-:1000E6001647E5152431F582E43514F583E04430EE
-:1000F600F0E5152439F582E43514F583E04480F003
-:100003009078417403F090C00074BFF0907841740D
-:1000130001F090C000EFF09078417403F0E51524EF
-:1000230037F582E43514F583E0547F90C000F02265
-:03004300021B009D
-:0300000002109556
-:400106009078417404F0E5152439F582E43514F583E090C000F09078417402F0E5152436F582E43514F583E0440690C000F0E515240BF582E43514F583E06032E515240C0B
-:40014600F582E43514F583E0543FFFE5152437F582E43514F583EFF09078417403F0E5152437F582E43514F583E090C000F0E515240DF582E43514F583E0700302024FE588
-:40018600152417F582E43514F583E06011E5152432F582E43514F583E04404F0800FE5152432F582E43514F583E054FBF0E4FFE5152432F582E43514F583E0FD121647E55E
-:4001C60015240EF582E43514F583E06011E5152433F582E43514F583E04480F0800FE5152433F582E43514F583E0547FF0E5152433F582E43514F583E054FCF0E515240FEB
-:40020600F582E43514F583E0602FE5152433F582E43514F583E04402F0E5152410F582E43514F583E0FF1215E7E5152411F582E43514F583E0FF121617E5152433F582E45E
-:400246003514F583E0FF1215B7E5152414F582E43514F583E06044E5152415F582E43514F583E06011E5152439F582E43514F583E04401F0800FE5152439F582E43514F581
-:4002860083E054FEF09078417404F0E5152439F582E43514F583E090C000F0E5152412F582E43514F583E06044E5152413F582E43514F583E06011E5152439F582E43514E6
-:4002C600F583E04402F0800FE5152439F582E43514F583E054FDF09078417404F0E5152439F582E43514F583E090C000F0E5152416F582E43514F583E0FFE5152435F5820A
-:40030600E43514F583EFF0E5152417F582E43514F583E030E011E5152431F582E43514F583E04440F0800FE5152431F582E43514F583E054BFF0E5152418F582E43514F576
-:4003460083E0FFE515243BF582E43514F583EFF0E5152419F582E43514F583E06011E5152439F582E43514F583E04410F0800FE5152439F582E43514F583E054EFF0907869
-:40038600417404F0E5152439F582E43514F583E090C000F0E515241AF582E43514F583E0606BE5152437F582E43514F583E054BFF09078417403F0E5152437F582E43514FF
-:4003C600F583E0547F90C000F09078417401F0120036EF54FE90C000F0E5152432F582E43514F583E054FDFFF0FDE4FF121647E515242CF582E43514F583E4F0E515242BB7
-:40040600F582E43514F583E4F0E5164213E515241BF582E43514F583E0700EE5152425F582E43514F583E06028E5152432F582E43514F583E04402FFF0FDE4FF121647E547
-:4004460015242BF582E43514F5837401F0E5164213E515241CF582E43514F583E0FF700EE5152425F582E43514F583E0602A9078417402F0E5152436F582E43514F583E0C6
-:40048600440490C000F0EF600FE5152431F582E43514F583E04404F0E515241DF582E43514F583E06027E5152437F582E43514F583E04440F09078417403F0E5152437F550
-:4004C60082E43514F583E0547F90C000F0E515241EF582E43514F583E06028E5152432F582E43514F583E054FEFFF0FDE4FF121647E515242DF582E43514F5837401F0E58F
-:40050600164213E515241FF582E43514F583E0700EE5152425F582E43514F583E06027E5152432F582E43514F583E04401FFF0FDE4FF121647E515242DF582E43514F58397
-:40054600E4F0E5164213E5152420F582E43514F583E0700EE5152425F582E43514F583E060189078417402F0E5152436F582E43514F583E0440290C000F0E5152421F582A7
-:40058600E43514F583E0600FE5152431F582E43514F583E04402F0E5152422F582E43514F583E0601FE515242EF582E43514F5837401F0E515243AF582E43514F583E4F0F0
-:4005C600E5164213E5152423F582E43514F583E06003121885E5152424F582E43514F583E0601BE5152431F582E43514F583E04408F0907F98E0FFE516F4FEEF5EF0E5156C
-:400606002425F582E43514F583E06016E5152431F582E43514F583E054F7F0907F98E04516F022907FE9E012120307830007F701086303064C0607740807680907500A07CE
-:400646005F0B000008B2907FEBE024FE601C1470030206FE240260030207467419907FD4F07400907FD5F00208B9907FEAE004758217758319F0907FEAE030E0047F03802D
-:40068600027F02758282758319EFF075826D758319F0758266758319F075825F758319F0758258758319F0907FEAE030E1047F6480027F3275821A758319EFF0907FEFE0FB
-:4006C600FE907FEEE07C002400F519EC3EF518753319753412758214758319E0752700F528D3E5289519E527951840068518278519281213120208B9907FEAE0FF12142BC9
-:40070600EA496032907FEEE0751800F519AE02AF018E338F348F828E83E0FEA3E08E27F528D39519E527951840068518278519281213120208B9907FB4E04401F00208B99E
-:40074600907FB4E04401F00208B9907F00E525F0907FB57401F00208B9907FEAE0F5250208B9907FEAE0F522120AB80208B9907F00E522F0907FB57401F00208B9907FE8BD
-:40078600E0247F60241460312402705BA200E433FF25E0FFA206E4334F907F00F0E4A3F0907FB57402F00208B9E4907F00F0A3F0907FB57402F00208B9907FECE0F4548063
-:4007C600FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F00208B9907FB4E04401F00208B9907FE8E024FE601D240260030208B910
-:40080600907FEAE0B40105C2000208B9907FB4E04401F00208B9907FEAE07038907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E4F0907FECE05480FF67
-:40084600131313541FFFE054072F907FD7F0E04420F0805F907FB4E04401F08056907FE8E024FE60182402704A907FEAE0B40104D200803F907FB4E04401F08036907FEACB
-:40088600E07020907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F08007907FB4E04401F0907FB4E04402F022E511540F703D
-:4008C600030209B21216A5EF20E175121703EF14F5191218CCEF2519FFE433FEC3EF9480EE648094805059851582851483E0FEA3E0FFF5828E83E030E011E5152431F58250
-:40090600E43514F583E04480F0800FE5152431F582E43514F583E0547FF0E5152431F582E43514F583E020E212E519600EF523EF2401F52DE43EF52C1214ADE4FF1214E3C0
-:40094600E5152431F582E43514F583E030E75D1218CCE515243BF582E43514F583E0FEEFC39E5048E515242FF582E43514F5837401F0E5152431F582E43514F583E0547B99
-:40098600F0E515243AF582E43514F583E4F0E5164213907FC2E030E110E5152426F582E43514F583E0F52480031212A11216D4EF30E103020AB71217D28F191218D8E515D5
-:4009C6002438F582E43514F583EFF0E5152435F582E43514F583E0FFE519C39F50281218B4EF30E021E5152438F582E43514F583E020E712E5152431F582E43514F583E0C0
-:400A060020E103020AB7E5152431F582E43514F583E054FDF0E5197003020AB7B4800FE5152438F582E43514F583E04402F0E5152438F582E43514F583E0FF30E729E519CF
-:400A4600D394204003751920851923851582851483A3A3E0FCA3E08C2CF52D1213DDE51925E0FF12151922E519D3943F400375193F851923E5152438F582E43514F583E053
-:400A8600FF851582851483A3A3E0FCA3E0F5828C83EFF0851582851483A3A3E0FEA3E02401F52DE43EF52C12146CE51904FF12151922E4907F93F0907F9C74F0F0907F9677
-:400AC600F0E4907F94F090784A04F0F58E907F9574C0F0907F9E743FF0907F98741FF090784374FFF0E4907841F0907FDF749FF0907FDEF0907F92E04402F07E7B7FC07581
-:400B0600147B7515C0907F9674EFF0751601120F127E7B7FC075147B7515C0907F9674EFF0751601E5152426F582E43514F583E4F07E7E7F40851582851483747EF0A374F5
-:400B460040F07E7E7F80851582851483A3A3747EF0A37480F07E7C7F0075147C751500907F9674DFF0751602120F127E7C7F0075147C751500907F9674DFF0751602E51536
-:400B86002426F582E43514F5837401F07E7D7FC0851582851483747DF0A374C0F07E7E7F00851582851483A3A3747EF0A37400F07E7C7F4075147C751540907F9674BFF018
-:400BC600751604120F127E7C7F4075147C751540907F9674BFF0751604E5152426F582E43514F5837402F07E7D7F40851582851483747DF0A37440F07E7D7F8085158285D3
-:400C06001483A3A3747DF0A37480F07E7C7F8075147C751580907F96747FF0751608120F127E7C7F8075147C751580907F96747FF0751608E5152426F582E43514F583741C
-:400C460003F07E7C7FC0851582851483747CF0A374C0F07E7D7F00851582851483A3A3747DF0A37400F0C20AC209D20222E510045403F51014601F1460311460432403701B
-:400C8600527E7B7FC075147B7515C0907F9674EFF0751601803D7E7C7F0075147C751500907F9674DFF075160280287E7C7F4075147C751540907F9674BFF075160480137E
-:400CC6007E7C7F8075147C751580907F96747FF0751608E53255167003020E11E516F4FF5232E526547FFE700FE52A55166024907F98E04516F0801BBE2018E5152431F543
-:400D060082E43514F583E030E309E4F52A907F98E05FF0E515243AF582E43514F583E06003E014F0E5152434F582E43514F583E06003E014F0E06003020E11740AF012009D
-:400D460036EF5401FFF519E515242CF582E43514F583E06F6007E519F0E51642131218E48F19E5152427F582E43514F583E0FFE5195410FE6F6006EEF0E5164213E5152415
-:400D860028F582E43514F583E0FFE5195480FE6F6006EEF0E5164213E5152429F582E43514F583E0FFE5195420FE6F6015EEF0E5152431F582E43514F583E030E404E51665
-:400DC6004213E5125516FFF519E515242AF582E43514F583E06F6016E519F0E5152431F582E43514F583E030E504E5164213E5175516FFF519E5152430F582E43514F58380
-:400E0600E06F6007E519F0E516421322300903020F11E52414602A14604114605814606F24046003020ECF7E7B7FC075147B7515C0907F9674EFF07516011212A17524015A
-:400E4600227E7C7F0075147C751500907F9674DFF07516021212A1752402227E7C7F4075147C751540907F9674BFF07516041212A1752403227E7C7F8075147C7515809051
-:400E86007F96747FF07516081212A175240422300433C2045313DFE4F5197E007B00742E2519F9EE3400FA1211ABFF74802519F582E4347BF583EFF00519E519B403DB902D
-:400EC6007FC37403F075240522E536603BD5360A5313EF300A04D209C20AE4F5197E007B0074352519F9EE3400FA1211ABFF74802519F582E4347BF583EFF00519E519B467
-:400F060003DB907FC37403F0E4F52422E4F51A7E007B01E515251AF9EE3514FAE41211F1051AE51AB43CE8E5152435F582E43514F5837401F09078417403F0E5152437F569
-:400F460082E43514F5837403F090C000F07F0CE4FD1216477F10E5152433F582E43514F583EFF01215B79078417402F07F01E5152436F582E43514F583EFF0440690C000F1
-:400F8600F09078417404F0E5152439F582E43514F5837480F090C000F00FE4FD121647E4FF7EA3E5152432F582E43514F583EEF0FD1216479078417401F090C000E4F07F89
-:400FC600057D7F1216477F0112154F7F037D071216472253133F907BF1E030E3167E7B7FC075147B7515C0907F9674EFF07516011208C1907C31E030E3167E7C7F00751417
-:401006007C751500907F9674DFF07516021208C1907C71E030E3167E7C7F4075147C751540907F9674BFF07516041208C1907CB1E030E3167E7C7F8075147C751580907F37
-:4010460096747FF07516081208C10511E511540FF518701F907841E054F7F0907F99E0F517907841E04408F0907F99E0F4F51212112122E518B40104120C7322907FC2E018
-:4010860020E108E5136004120E1222120C7322787FE4F6D8FD7581370210DC021229E493A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F44207E
-:4010C600C8834004F456800146F6DFE4800B0102040810204080901850E47E019360BCA3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE493A3F8A2
-:40110600E493A3C8C582C8CAC583CAF0A3C8C582C8CAC583CADFE9DEE780BE907FD2E030E1030211AAC209907B40E014602614603B14605024836064248070637E7B7FC01C
-:4011460075147B7515C0907F9674EFF0751601120046804B7E7C7F0075147C751500907F9674DFF075160212004680337E7C7F4075147C751540907F9674BFF075160412FB
-:401186000046801B7E7C7F8075147C751580907F96747FF0751608120046800312175CE4907FD3F022BB010689828A83E0225002E722BBFE02E32289828A83E49322BB0189
-:4011C6000CE58229F582E5833AF583E0225006E92582F8E622BBFE06E92582F8E222E58229F582E5833AF583E49322BB010689828A83F0225002F722BBFE01F322D083D086
-:4012060082F8E4937012740193700DA3A393F8740193F5828883E4737402936860EFA3A3A380DF907FAEE0FFD39200E433FEEF4EF0D2E843D820907FDE7401F0907FDFF08E
-:40124600907FAB74FFF0907FA9F0907FAAF05391EF907FAF7401F0907FAE740DF0D2AFD20B121814C201E4F52BF531C207C2027529F0907FD8E06526600675320FE0F526C9
-:40128600300203120FD9300107C20112062980E23008DFC20812183580D822E5135516606AE515243AF582E43514F583E0705CE516F45213E5152426FFE43514FEE4FD0FA2
-:4012C600EFAA0670010E14F5828A83E0FC74802DF582E4347BF583ECF00DBD0BE2907FC3740BF0E515243AF582E43514F5837410F0E515242EF582E43514F583E4F0E515C1
-:40130600242FF582E43514F583E4F022E52845276057AE27AF28D3EF9440EE940040047E007F40C3E5289FF528E5279EF527E4FDEDC39FE49E501F853482853383E0FC7494
-:40134600002DF582E4347FF583ECF00D0534E5347002053380DA907FA97401F0907FACE04401F0907FB5EFF022907FACE054FEF0E4907FB5F022E4907F93F0907F9C74F0A7
-:40138600F0907F96F0E490784AF0907F94F0907F9D74FFF0E4907F97F0300007E52954F0FF80027F00EF4408907841F0E4907F98F0907F95F0907F9E74FFF0E4907F98F0C9
-:4013C600907F93F0907F9C74F0F0E4907F96F0907F92E054FDF0228F1A052DE52DAE2C7002052C14F5828E83E51AF01218F0052DE52DAC2C7002052C14F5828C83EFF0159D
-:4014060023E523601FE5152438F582E43514F583C083C082E0FE1218D88F1AEE4FD082D083F080B5228F1AE4F51B751CFF751D19751E86AB1CAA1DA91E9000011211C4B4E1
-:40144600031DAF1B051BEFB51A01221211AB7E0029FFEE3AA907751CFFF51D891E80D47B007A00790022E4907841F090784F74C0F0E4907850F0E52C907851F0AE2CE52DF8
-:40148600907852F0907854E523F09078577404F0907FE2E04410F0E054F7F0E4907855F0907855E060FA22E4907841F0E52C90784FF0AE2CE52D907850F090785174C0F081
-:4014C600E4907852F0907854E523F09078577404F0E4907855F0907855E060FA22E5152404F582E43514F583E014600F1460131460178000907FC7EFF08013907FC9EFF081
-:40150600800C907FCBEFF08005907FCDEFF0E516422A22E5152404F582E43514F583E014600F1460131460178000907FB7EFF08013907FB9EFF0800C907FBBEFF08005903B
-:401546007FBDEFF0E516422A22AE07E4FFE5152432F582E43514F583E0547FFD1216479078417401F090C000EEF0E4E5152432F582E43514F583E04480FD12164722C0E0A0
-:40158600C0F0C083C082C085C084C086758600C0D075D0085391EF907FA97401F0121312D0D0D086D084D085D082D083D0F0D0E0329078417403F090C00074BFF0907841D0
-:4015C6007402F090C000EFF09078417403F0E5152437F582E43514F583E0547F90C000F0229078417403F090C00074BFF09078417404F090C000EFF09078417403F0E5156D
-:401606002437F582E43514F583E0547F90C000F0229078417403F090C00074BFF09078417406F090C000EFF09078417403F0E5152437F582E43514F583E0547F90C000F0FF
-:40164600229078417403F0E5152437F582E43514F583E0547F90C000F09078417407F090C000EFF09078417405F090C000EDF0229078417403F090C00074BFF0E4907841FA
-:40168600F090C000EFF09078417403F0E5152437F582E43514F583E0547F90C000F022E5152404F582E43514F583E014600E1460111460148000907FC6E0FF22907FC8E015
-:4016C600FF22907FCAE0FF22907FCCE0FF22E5152404F582E43514F583E014600E1460111460148000907FB6E0FF22907FB8E0FF22907FBAE0FF22907FBCE0FF22E515249E
-:4017060004F582E43514F583E014600E1460111460148000907FC7E0FF22907FC9E0FF22907FCBE0FF22907FCDE0FF22C0E0C083C082C085C084C086758600907FC4E4F096
-:401746005391EF907FAB7404F0D086D084D085D082D083D0E032907B41E0F536431310A3E06009907FD77417F07437F0907B43E0F537A3E054F0F529E06002D20A22C0E024
-:40178600C083C082C085C084C086758600D2015391EF907FAB7401F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2085391EF907FAB7408F0D0F7
-:4017C60086D084D085D082D083D0E0321218C0AE071218C0AD07EE6D60101218C0AE07EE6D60071218C0AD0780ECAF06227400F58690FDA57C05A3E582458370F922907FD5
-:40180600D6E04480F0438701000000000022907FD6E04404F0E04408F0300B04E04402F07FF47E0112186B907FD6E054F7F02212137C121804907FD6E030E70A7F057E007D
-:4018460012186B12189E120AB8220335800000032E810000C185C181C108C100C106012200012400008E188F19E5191519AE18700215184E60081217F31217F380EB22E545
-:40188600152404F582E43514F583E004FF4410907FD7F0EF4430F022907FD6E04401F07F0D7E0012186B907FD6E054FEF0229078417402F090C000E0FF229078417403F0D5
-:4018C60090C000E0FF229078417404F090C000E0FF229078417405F090C000E0FF229078417406F090C000E0FF22E4907841F090C000E0FF2253D8EF320012011001FF00AB
-:401906000040CD060A0100000102000409027400010100A032090400000EFF000000070501024000000705020240000007050302400000070504024000000705050240007A
-:4019460000070506024000000705070240000007058102400001070582024000010705830240000107058402400001070585024000010705860240000107058702400001F3
-:401986000403090448034B00650079007300700061006E002C002000610020006400690076006900730069006F006E0020006F006600200049006E006E006F005300790040
-:4019C6007300200049006E0063002E003603550053004200200034002D0070006F00720074002000530065007200690061006C00200041006400610070007400650072003C
-:401A060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A0
-:401A46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060
-:401A86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020
-:401AC6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002178400021B26
-:151B06000400021732000217AB00021B1000021B1400021584BE
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2001
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
diff --git a/firmware/keyspan/usa49wlc.HEX b/firmware/keyspan/usa49wlc.HEX
deleted file mode 100644
index 8406eb1bf373..000000000000
--- a/firmware/keyspan/usa49wlc.HEX
+++ /dev/null
@@ -1,153 +0,0 @@
-:017F920001ED
-:030033000218FBB5
-:0D003600E51104907841F090C000E0FF2239
-:10004600E4FF74402FF582E4347BF583E0FEE5158A
-:100056002404FDE43514FAA9057B01EF7C0029F997
-:10006600EC3AFAEE1211EC0FBF22D7E5152405F58E
-:1000760082E43514F583E07003020134E5152409A2
-:10008600F582E43514F583E0700EE515240AF58251
-:10009600E43514F583E060187F01E4FD12166BE584
-:1000A600152431F582E43514F583E054CFF0804110
-:1000B600E5152406F582E43514F583E0FF12000306
-:1000C600E5152407F582E43514F583E0FF1215AB38
-:1000D6007F01E5152408F582E43514F583E0FD1269
-:1000E600166BE5152431F582E43514F583E04430CA
-:1000F600F0E5152439F582E43514F583E04480F003
-:1000030090784174F3F090C00074BFF0907841741D
-:10001300F0F090C000EFF090784174F3F0E5152410
-:1000230037F582E43514F583E0547F90C000F02265
-:03004300021B009D
-:030000000210905B
-:4001060090784174F4F0E5152439F582E43514F583E090C000F090784174F2F0E5152436F582E43514F583E0440690C000F0E515240BF582E43514F583E06032E515240C2B
-:40014600F582E43514F583E0543FFFE5152437F582E43514F583EFF090784174F3F0E5152437F582E43514F583E090C000F0E515240DF582E43514F583E0700302024FE598
-:40018600152417F582E43514F583E06011E5152432F582E43514F583E04404F0800FE5152432F582E43514F583E054FBF0E4FFE5152432F582E43514F583E0FD12166BE53A
-:4001C60015240EF582E43514F583E06011E5152433F582E43514F583E04480F0800FE5152433F582E43514F583E0547FF0E5152433F582E43514F583E054FCF0E515240FEB
-:40020600F582E43514F583E0602FE5152433F582E43514F583E04402F0E5152410F582E43514F583E0FF12160BE5152411F582E43514F583E0FF12163BE5152433F582E415
-:400246003514F583E0FF1215DBE5152414F582E43514F583E06044E5152415F582E43514F583E06011E5152439F582E43514F583E04401F0800FE5152439F582E43514F55D
-:4002860083E054FEF090784174F4F0E5152439F582E43514F583E090C000F0E5152412F582E43514F583E06044E5152413F582E43514F583E06011E5152439F582E43514F6
-:4002C600F583E04402F0800FE5152439F582E43514F583E054FDF090784174F4F0E5152439F582E43514F583E090C000F0E5152416F582E43514F583E0FFE5152435F5821A
-:40030600E43514F583EFF0E5152417F582E43514F583E030E011E5152431F582E43514F583E04440F0800FE5152431F582E43514F583E054BFF0E5152418F582E43514F576
-:4003460083E0FFE515243BF582E43514F583EFF0E5152419F582E43514F583E06011E5152439F582E43514F583E04410F0800FE5152439F582E43514F583E054EFF0907869
-:400386004174F4F0E5152439F582E43514F583E090C000F0E515241AF582E43514F583E0606BE5152437F582E43514F583E054BFF090784174F3F0E5152437F582E435141F
-:4003C600F583E0547F90C000F090784174F1F0120036EF54FE90C000F0E5152432F582E43514F583E054FDFFF0FDE4FF12166BE515242CF582E43514F583E4F0E515242BA3
-:40040600F582E43514F583E4F0E5164213E515241BF582E43514F583E0700EE5152425F582E43514F583E06028E5152432F582E43514F583E04402FFF0FDE4FF12166BE523
-:4004460015242BF582E43514F5837401F0E5164213E515241CF582E43514F583E0FF700EE5152425F582E43514F583E0602A90784174F2F0E5152436F582E43514F583E0D6
-:40048600440490C000F0EF600FE5152431F582E43514F583E04404F0E515241DF582E43514F583E06027E5152437F582E43514F583E04440F090784174F3F0E5152437F560
-:4004C60082E43514F583E0547F90C000F0E515241EF582E43514F583E06028E5152432F582E43514F583E054FEFFF0FDE4FF12166BE515242DF582E43514F5837401F0E56B
-:40050600164213E515241FF582E43514F583E0700EE5152425F582E43514F583E06027E5152432F582E43514F583E04401FFF0FDE4FF12166BE515242DF582E43514F58373
-:40054600E4F0E5164213E5152420F582E43514F583E0700EE5152425F582E43514F583E0601890784174F2F0E5152436F582E43514F583E0440290C000F0E5152421F582B7
-:40058600E43514F583E0600FE5152431F582E43514F583E04402F0E5152422F582E43514F583E0601FE515242EF582E43514F5837401F0E515243AF582E43514F583E4F0F0
-:4005C600E5164213E5152423F582E43514F583E0600312187AE5152424F582E43514F583E06023E5152431F582E43514F583E04408F0E516C454F0FF4211907F96E04FF000
-:40060600907841E04FF0E5152425F582E43514F583E06024E5152431F582E43514F583E054F7F0E516C454F0F4FF5211907F96E05FF0907841E05FF022907FE9E01211FE43
-:40064600079900080D01087903066206078A08077E0907660A07750B000008C8907FEBE024FE601C1470030207142402600302075C7419907FD4F07400907FD5F00208CF4C
-:40068600907FEAE004758217758319F0907FEAE030E0047F0280027F03758282758319EFF075826D758319F0758266758319F075825F758319F0758258758319F0907FEA0A
-:4006C600E030E1047F6480027F3275821A758319EFF0907FEFE0FE907FEEE07C002400F518EC3EF517753319753412758214758319E0752700F528D3E5289518E5279517D6
-:40070600400685172785182812130D0208CF907FEAE0FF12145FEA496032907FEEE0751700F518AE02AF018E338F348F828E83E0FEA3E08E27F528D39518E527951740068B
-:4007460085172785182812130D0208CF907FB4E04401F00208CF907FB4E04401F00208CF907F00E525F0907FB57401F00208CF907FEAE0F5250208CF907FEAE0F522120A9B
-:40078600CE0208CF907F00E522F0907FB57401F00208CF907FE8E0247F60241460312402705BA200E433FF25E0FFA206E4334F907F00F0E4A3F0907FB57402F00208CFE4C9
-:4007C600907F00F0A3F0907FB57402F00208CF907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF583E054FD907F00F0E4A3F0907FB57402F00208CF907FB45C
-:40080600E04401F00208CF907FE8E024FE601D240260030208CF907FEAE0B40105C2000208CF907FB4E04401F00208CF907FEAE07038907FECE0F45480FFC4540FFFE05490
-:40084600072F25E024B4F582E4347FF583E4F0907FECE05480FF131313541FFFE054072F907FD7F0E04420F0805F907FB4E04401F08056907FE8E024FE60182402704A90CA
-:400886007FEAE0B40104D200803F907FB4E04401F08036907FEAE07020907FECE0F45480FFC4540FFFE054072F25E024B4F582E4347FF5837401F08010907FB4E04401F046
-:4008C6008007907FB4E04401F0907FB4E04402F022E512540F70030209C812169AEF20E1751216F8EF14F5181218C5EF2518FFE433FEC3EF9480EE64809480505985158201
-:40090600851483E0FEA3E0FFF5828E83E030E011E5152431F582E43514F583E04480F0800FE5152431F582E43514F583E0547FF0E5152431F582E43514F583E020E212E5CC
-:4009460018600EF523EF2401F52DE43EF52C1214A0E4FF1214D7E5152431F582E43514F583E030E75D1218C5E515243BF582E43514F583E0FEEFC39E5048E515242FF58207
-:40098600E43514F5837401F0E5152431F582E43514F583E0547BF0E515243AF582E43514F583E4F0E5164213907FC2E030E110E5152426F582E43514F583E0F524800312C5
-:4009C600129C1216C9EF30E103020ACD1217C78F181218D3E5152438F582E43514F583EFF0E5152435F582E43514F583E0FFE518C39F50281218A9EF30E021E5152438F52E
-:400A060082E43514F583E020E712E5152431F582E43514F583E020E103020ACDE5152431F582E43514F583E054FDF0E5187003020ACDB4800FE5152438F582E43514F583DE
-:400A4600E04402F0E5152438F582E43514F583E0FF30E729E518D394204003751820851823851582851483A3A3E0FCA3E08C2CF52D1213CFE51825E0FF12150D22E518D3C3
-:400A8600943F400375183F851823E5152438F582E43514F583E0FF851582851483A3A3E0FCA3E0F5828C83EFF0851582851483A3A3E0FEA3E02401F52DE43EF52C12141D4F
-:400AC600E51804FF12150D22E4907F93F0907F9C74FFF0E4907F96F0907F94F090784A04F0F58E907F9574C0F0907F9E743FF0907F98742FF090784374F7F0E4907841F02C
-:400B0600907FDF749FF0907FDEF0907F92E04402F07E7B7FC075147B7515C0907F98742EF0751601120F287E7B7FC075147B7515C0907F98742EF0751601E5152426F58290
-:400B4600E43514F583E4F07E7E7F40851582851483747EF0A37440F07E7E7F80851582851483A3A3747EF0A37480F07E7C7F0075147C751500907F98742DF0751602120F0A
-:400B8600287E7C7F0075147C751500907F98742DF0751602E5152426F582E43514F5837401F07E7D7FC0851582851483747DF0A374C0F07E7E7F00851582851483A3A374EE
-:400BC6007EF0A37400F07E7C7F4075147C751540907F98742BF0751604120F287E7C7F4075147C751540907F98742BF0751604E5152426F582E43514F5837402F07E7D7F57
-:400C060040851582851483747DF0A37440F07E7D7F80851582851483A3A3747DF0A37480F07E7C7F8075147C751580907F987427F0751608120F287E7C7F8075147C751590
-:400C460080907F987427F0751608E5152426F582E43514F5837403F07E7C7FC0851582851483747CF0A374C0F07E7D7F00851582851483A3A3747DF0A37400F0C20AC209D3
-:400C8600E4F511D20222E510045403F51014601F146031146043240370527E7B7FC075147B7515C0907F98742EF0751601803D7E7C7F0075147C751500907F98742DF07564
-:400CC600160280287E7C7F4075147C751540907F98742BF075160480137E7C7F8075147C751580907F987427F0751608E53255167003020E27E516F45232E526547FFF7095
-:400D060017E52A55166034907F96E0FEE516C454F0F4FDEE5DF08023BF2020E5152431F582E43514F583E030E311E4F52A907F96E0FFE516C454F0FEEF4EF0E515243AF5C3
-:400D460082E43514F583E06003E014F0E5152434F582E43514F583E06003E014F0E06003020E27740AF0120036EF5401FFF518E515242CF582E43514F583E06F6007E518F1
-:400D8600F0E51642131218E18F18E5152427F582E43514F583E0FFE5185410FE6F6006EEF0E5164213E5152428F582E43514F583E0FFE5185480FE6F6006EEF0E516421386
-:400DC600E5152429F582E43514F583E0FFE5185420FE6F6015EEF0E5152431F582E43514F583E030E404E5164213E515242AF582E43514F583E0FFE5185440FE6F6015EE23
-:400E0600F0E5152431F582E43514F583E030E504E5164213E5152430F582E43514F583E4F022300903020F27E52414602A14604114605814606F24046003020EE57E7B7F31
-:400E4600C075147B7515C0907F98742EF075160112129C752401227E7C7F0075147C751500907F98742DF075160212129C752402227E7C7F4075147C751540907F98742B05
-:400E8600F075160412129C752403227E7C7F8075147C751580907F987427F075160812129C75240422300433C2045313DFE4F5187E007B00742E2518F9EE3400FA1211A6CA
-:400EC600FF74802518F582E4347BF583EFF00518E518B403DB907FC37403F075240522E536603BD5360A5313EF300A04D209C20AE4F5187E007B0074352518F9EE3400FACC
-:400F06001211A6FF74802518F582E4347BF583EFF00518E518B403DB907FC37403F0E4F52422E4F5197E007B01E5152519F9EE3514FAE41211EC0519E519B43CE8E51524FA
-:400F460035F582E43514F5837401F090784174F3F0E5152437F582E43514F5837403F090C000F07F0CE4FD12166B7F10E5152433F582E43514F583EFF01215DB9078417464
-:400F8600F2F07F01E5152436F582E43514F583EFF0440690C000F090784174F4F0E5152439F582E43514F5837480F090C000F00FE4FD12166BE4FF7EA3E5152432F582E486
-:400FC6003514F583EEF0FD12166B90784174F1F090C000E4F07F057D7F12166B7F011215437F037D0712166B2253133F907BF1E030E3167E7B7FC075147B7515C0907F986B
-:40100600742EF07516011208D7907C31E030E3167E7C7F0075147C751500907F98742DF07516021208D7907C71E030E3167E7C7F4075147C751540907F98742BF0751604C4
-:401046001208D7907CB1E030E3167E7C7F8075147C751580907F987427F07516081208D70512E512540FF517700412111C22E517B40104120C8C22907FC2E020E108E51370
-:401086006004120E2822120C8C22787FE4F6D8FD7581370210D7021224E493A3F8E493A34003F68001F208DFF48029E493A3F85407240CC8C333C4540F4420C8834004F4D7
-:4010C60056800146F6DFE4800B0102040810204080901845E47E019360BCA3FF543F30E509541FFEE493A360010ECF54C025E060A840B8E493A3FAE493A3F8E493A3C8C589
-:4011060082C8CAC583CAF0A3C8C582C8CAC583CADFE9DEE780BE907FD2E030E1030211A5C209907B40E014602614603B14605024836064248070637E7B7FC075147B75153A
-:40114600C0907F98742EF0751601120046804B7E7C7F0075147C751500907F98742DF075160212004680337E7C7F4075147C751540907F98742BF0751604120046801B7E2B
-:401186007C7F8075147C751580907F987427F07516081200468003121751E4907FD3F022BB010689828A83E0225002E722BBFE02E32289828A83E49322BB010CE58229F5B8
-:4011C60082E5833AF583E0225006E92582F8E622BBFE06E92582F8E222E58229F582E5833AF583E49322BB010689828A83F0225002F722BBFE01F322D083D082F8E49370B6
-:4012060012740193700DA3A393F8740193F5828883E4737402936860EFA3A3A380DF907FAEE0FFD39200E433FEEF4EF0D2E843D820907FDE7401F0907FDFF0907FAB74FFC2
-:40124600F0907FA9F0907FAAF05391EF907FAF7401F0907FAE740DF0D2AFD20B121809C201E4F52BF531C207C20275290F907FD8E06526600675320FE0F526300203120F8C
-:40128600EF300107C20112063F80E23008DFC20812182A80D822E5135516606AE515243AF582E43514F583E0705CE516F45213E5152426FFE43514FEE4FD0FEFAA067001C7
-:4012C6000E14F5828A83E0FC74802DF582E4347BF583ECF00DBD0BE2907FC3740BF0E515243AF582E43514F5837410F0E515242EF582E43514F583E4F0E515242FF582E423
-:401306003514F583E4F022E52845276057AE27AF28D3EF9440EE940040047E007F40C3E5289FF528E5279EF527E4FDEDC39FE49E501F853482853383E0FC74002DF582E4BA
-:40134600347FF583ECF00D0534E5347002053380DA907FA97401F0907FACE04401F0907FB5EFF022907FACE054FEF0E4907FB5F022907F98740FF0E490784AF0907F94F0E1
-:40138600907F9D74FFF0E4907F97F0907841F0907F93F0907F9C74FFF0300007E529540FFF80027F00907F96EFF0907F98741FF0E4907F95F0907F9E743FF0907F9874DFAD
-:4013C600F0907F92E054FDF0228F19052DE52DAE2C7002052C14F5828E83E519F01218EF052DE52DAC2C7002052C14F5828C83EFF01523E523601FE5152438F582E4351416
-:40140600F583C083C082E0FE1218D38F19EE4FD082D083F080B522907841E511F090784F74C0F0E4907850F0E52C907851F0AE2CE52D907852F0907854E523F09078577470
-:4014460004F0907FE2E04410F0E054F7F0E4907855F0907855E060FA228F19E4F51A751BFF751C19751D86AB1BAA1CA91D9000011211BFB4031DAF1A051AEFB519012212F9
-:4014860011A67E0029FFEE3AA907751BFFF51C891D80D47B007A00790022907841E511F0E52C90784FF0AE2CE52D907850F090785174C0F0E4907852F0907854E523F0907D
-:4014C60078577404F0E4907855F0907855E060FA22E5152404F582E43514F583E014600F1460131460178000907FC7EFF08013907FC9EFF0800C907FCBEFF08005907FCDED
-:40150600EFF0E516422A22E5152404F582E43514F583E014600F1460131460178000907FB7EFF08013907FB9EFF0800C907FBBEFF08005907FBDEFF0E516422A22AE07E4A4
-:40154600FFE5152432F582E43514F583E0547FFD12166B90784174F1F090C000EEF0E4E5152432F582E43514F583E04480FD12166B22C0E0C0F0C083C082C085C084C086A1
-:40158600758600C0D075D0085391EF907FA97401F012130DD0D0D086D084D085D082D083D0F0D0E03290784174F3F090C00074BFF090784174F1F090C000EFF090784174A8
-:4015C600F3F0E5152437F582E43514F583E0547F90C000F02290784174F3F090C00074BFF090784174F2F090C000EFF090784174F3F0E5152437F582E43514F583E0547FD7
-:4016060090C000F02290784174F3F090C00074BFF090784174F4F090C000EFF090784174F3F0E5152437F582E43514F583E0547F90C000F02290784174F3F090C00074BF16
-:40164600F090784174F6F090C000EFF090784174F3F0E5152437F582E43514F583E0547F90C000F02290784174F3F0E5152437F582E43514F583E0547F90C000F09078412F
-:4016860074F7F090C000EFF090784174F5F090C000EDF022E5152404F582E43514F583E014600E1460111460148000907FC6E0FF22907FC8E0FF22907FCAE0FF22907FCC19
-:4016C600E0FF22E5152404F582E43514F583E014600E1460111460148000907FB6E0FF22907FB8E0FF22907FBAE0FF22907FBCE0FF22E5152404F582E43514F583E0146000
-:401706000E1460111460148000907FC7E0FF22907FC9E0FF22907FCBE0FF22907FCDE0FF22C0E0C083C082C085C084C086758600907FC4E4F05391EF907FAB7404F0D086BF
-:40174600D084D085D082D083D0E032907B41E0F536431310A3E06009907FD77417F07437F0907B43E0F537A3E054F0F529E06002D20A22C0E0C083C082C085C084C08675A6
-:401786008600D2015391EF907FAB7401F0D086D084D085D082D083D0E032C0E0C083C082C085C084C086758600D2085391EF907FAB7408F0D086D084D085D082D083D0E03C
-:4017C600321218B7AE071218B7AD07EE6D60101218B7AE07EE6D60071218B7AD0780ECAF06227400F58690FDA57C05A3E582458370F922907FD6E04480F043870100000048
-:40180600000022907FD6E04404F0E04408F0300B04E04402F07FF47E01121860907FD6E054F7F0221213771217F9907FD6E030E70A7F057E00121860121893120ACE220378
-:4018460035800000032E810000C185C181C108C100C106012200012400008E178F18E5181518AE17700215174E60081217E81217E880EB22E5152404F582E43514F583E07E
-:4018860004FF4410907FD7F0EF4430F022907FD6E04401F07F0D7E00121860907FD6E054FEF022E5112402907841F090C000E0FF22E5112403907841F090C000E0FF22E597
-:4018C600112404907841F090C000E0FF22E5112405907841F090C000E0FF22E5112406907841F090C000E0FF22907841E511F090C000E0FF2253D8EF320012011001FFFFDE
-:40190600FF40CD062A0100000102000409027400010100A032090400000EFF000000070501024000000705020240000007050302400000070504024000000705050240005B
-:4019460000070506024000000705070240000007058102400001070582024000010705830240000107058402400001070585024000010705860240000107058702400001F3
-:401986000403090448034B00650079007300700061006E002C002000610020006400690076006900730069006F006E0020006F006600200049006E006E006F005300790040
-:4019C6007300200049006E0063002E0024034B00650079007300700061006E0020005500530041002D003400390057004C00430022035500530041002D00360035002000B5
-:401A060032003000300033006A0061006E0033003100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003E
-:401A46000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060
-:401A86000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020
-:401AC6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002177900021B31
-:151B06000400021727000217A000021B1000021B1400021578E0
-:00000001FF
-
- The firmware contained herein is
-
- Copyright (C) 1999-2003
- Keyspan, A division of InnoSys Incorporated ("Keyspan")
-
- as an unpublished work. This notice does not imply unrestricted or
- public access to the source code from which this firmware image is
- derived. Except as noted below this firmware image may not be
- reproduced, used, sold or transferred to any third party without
- Keyspan's prior written consent. All Rights Reserved.
-
- Permission is hereby granted for the distribution of this firmware
- image as part of a Linux or other Open Source operating system kernel
- in text or binary form as required.
-
- This firmware may not be modified and may only be used with
- Keyspan hardware. Distribution and/or Modification of the
- keyspan.c driver which includes this firmware, in whole or in
- part, requires the inclusion of this statement."
-
-static char theFirmwareDate49[] =
- "02/14/2002 02:37p 19,347 USA49";
-
-static char theFirmwareDate65[] =
- "01/31/2003 09:34a 19,331 USA65";
-
diff --git a/firmware/keyspan_pda/keyspan_pda.HEX b/firmware/keyspan_pda/keyspan_pda.HEX
deleted file mode 100644
index 6fcf02bb4b2d..000000000000
--- a/firmware/keyspan_pda/keyspan_pda.HEX
+++ /dev/null
@@ -1,83 +0,0 @@
-:03000000020200F9
-:0400230002055F0073
-:0400430002010000B6
-:050030000000000000CB
-:10010000020296000200000002000000020000004F
-:1001100002000000020000000200000002000000D7
-:1001200002000000020000000204610002048900D5
-:1002000075815EE4F532F533F530F531F534C20031
-:10021000C201A90074FE901000F0A3D9FC74FD90F7
-:100220001100F0A3D9FC7402907F9DF07400907FC0
-:1002300097F07486907F9EF0907F957403F0907F86
-:10024000AFE0D2E0F07401907FABF0907FAEF09021
-:100250007FAC7404F0907FAD7404F0907FC9F074AB
-:1002600084907F98F07400F59875C8307B059120D4
-:10027000D2CA759850D2E8D2AFD2AC7400F586904D
-:100280007FD67402F0792E7A007B00DBFEDAFAD991
-:10029000F67406F080FEC086C082C083C084C0852C
-:1002A000C0E0E591C2E4F591907FAB7401F0907FDE
-:1002B000E8E0F9A3E0FAA3E0FBA3E0FCE95460B4B2
-:1002C0000003020339B4406EBA000B12042040034D
-:1002D00002040202040ABA010302040ABA02030277
-:1002E000040ABA0303020444BA041EBB000A907F46
-:1002F00095E04402F0020402907F98E054FDF090F3
-:100300007F95E054FDF0020402BA050302040ABA24
-:100310000619BB0008E533D395320203DEBB0108A2
-:10032000E532C395330203DE02040ABA07058B34B3
-:1003300002040202040A02040ABA0020B9801090E2
-:100340007F00E4F0A3F0907FB57402F0020402B9DC
-:10035000820280EBB9810280E602040ABA010FBB77
-:10036000000302040ABB010302040202040ABA03E6
-:100370000FBB000302040ABB010302040202040AC9
-:10038000BA0656BC010F907FD47406F0907FD574E6
-:1003900012F0020402BC0212BB006F907FD47406FC
-:1003A000F0907FD57424F0020402BC03297404C3C6
-:1003B0009B40576055EB2B9006442582F5827400D4
-:1003C0003583F583E0F9A3E0FA907FD4E9F0907FDC
-:1003D000D5EAF002040202040ABA080F7401907F01
-:1003E00000F07401907FB5F0020402BA0903020420
-:1003F00002BA0A0574000203DEBA0B030204020209
-:10040000040A907FB47402F08009907FB4E0440144
-:10041000F08000D0E0D085D084D083D082D08632E6
-:10042000EB20E71EC3940A5019EB2324FEF58274D7
-:10043000053400F583E0F5CBF5CDA3E0F5CAF5CCA6
-:10044000C322D322B94111EB64FF5484FB907F98FF
-:10045000E0547B4BF0020402907F9BE064FF0203B8
-:10046000DEC086C082C083C084C085C0E0E591C282
-:10047000E4F591907FA97404F01205A0D0E0D08536
-:10048000D084D083D082D08632C086C082C083C060
-:1004900084C085C0E0E591C2E4F591907FAA740420
-:1004A000F0907FC9E0F9E4F586907DC075851085F0
-:1004B0003284E005860584F0E584B53302800905C1
-:1004C000320586A3D9EC8000907FC9F0B131D0E02D
-:1004D000D085D084D083D082D08632E4F586907FD8
-:1004E000BCE020E14B907D00E532F0A3E533F0A3C2
-:1004F000E530F0A3E531F0A3E430000104F0A305FA
-:10050000869010007910E0A30586F0A30586D9F641
-:10051000058674FCF0A305869011007910E0A30510
-:1005200086F0A30586D9F6E4F586907FBD7426F0A3
-:1005300022200013E532B53301220533758310857F
-:100540003382E0F599D2007400B5340122E533D34B
-:100550009532C3953440F5753400D2010205A0C030
-:1005600086C082C083C084C085C0E0309907C2992C
-:10057000C20012053430980512058AC298D0E0D026
-:1005800085D084D083D082D0863275831185308225
-:100590000582E599F0E582B53101220530B1A0224E
-:1005A000907FB8E020E138200136E530B5310122F6
-:1005B000E4F5867583110586907E00F0A3058679A3
-:1005C00001E530B5310280100531853182E00586C4
-:1005D000F0A3058609B940E9907FB9E96001F022EE
-:1005E000C201E4F586907E007401F0A37402F090DD
-:1005F0007FB9F022C299F5993099FDC29922E55E42
-:10060000F63CFD8FFEC8FF64FFB2FFD9FFEDFFF39C
-:10061000FFFA12010001FFFFFF40CD06040189AB84
-:1006200001020301090220000101008032090400D7
-:100630000002FFFFFF0007058203400001070502DB
-:1006400002400000064C0650067206A0040300009B
-:100650002203410043004D00450020007500730057
-:100660006200200077006900640067006500740084
-:1006700073002E03410043004D004500200055004B
-:1006800053004200200073006500720069006100A1
-:100690006C0020007700690064006700650074004A
-:0606A000060334003700E0
-:00000001FF
diff --git a/firmware/keyspan_pda/keyspan_pda.S b/firmware/keyspan_pda/keyspan_pda.S
deleted file mode 100644
index f3acc197a5ef..000000000000
--- a/firmware/keyspan_pda/keyspan_pda.S
+++ /dev/null
@@ -1,1124 +0,0 @@
-/* $Id: loop.s,v 1.23 2000/03/20 09:49:06 warner Exp $
- *
- * Firmware for the Keyspan PDA Serial Adapter, a USB serial port based on
- * the EzUSB microcontroller.
- *
- * (C) Copyright 2000 Brian Warner <warner@lothar.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * "Keyspan PDA Serial Adapter" is probably a copyright of Keyspan, the
- * company.
- *
- * This serial adapter is basically an EzUSB chip and an RS-232 line driver
- * in a little widget that has a DB-9 on one end and a USB plug on the other.
- * It uses the EzUSB's internal UART0 (using the pins from Port C) and timer2
- * as a baud-rate generator. The wiring is:
- * PC0/RxD0 <- rxd (DB9 pin 2) PC4 <- dsr pin 6
- * PC1/TxD0 -> txd pin 3 PC5 <- ri pin 9
- * PC2 -> rts pin 7 PC6 <- dcd pin 1
- * PC3 <- cts pin 8 PC7 -> dtr pin 4
- * PB1 -> line driver standby
- *
- * The EzUSB register constants below come from their excellent documentation
- * and sample code (which used to be available at www.anchorchips.com, but
- * that has now been absorbed into Cypress' site and the CD-ROM contents
- * don't appear to be available online anymore). If we get multiple
- * EzUSB-based drivers into the kernel, it might be useful to pull them out
- * into a separate .h file.
- *
- * THEORY OF OPERATION:
- *
- * There are two 256-byte ring buffers, one for tx, one for rx.
- *
- * EP2out is pure tx data. When it appears, the data is copied into the tx
- * ring and serial transmission is started if it wasn't already running. The
- * "tx buffer empty" interrupt may kick off another character if the ring
- * still has data. If the host is tx-blocked because the ring filled up,
- * it will request a "tx unthrottle" interrupt. If sending a serial character
- * empties the ring below the desired threshold, we set a bit that will send
- * up the tx unthrottle message as soon as the rx buffer becomes free.
- *
- * EP2in (interrupt) is used to send both rx chars and rx status messages
- * (only "tx unthrottle" at this time) back up to the host. The first byte
- * of the rx message indicates data (0) or status msg (1). Status messages
- * are sent before any data.
- *
- * Incoming serial characters are put into the rx ring by the serial
- * interrupt, and the EP2in buffer sent if it wasn't already in transit.
- * When the EP2in buffer returns, the interrupt prompts us to send more
- * rx chars (or status messages) if they are pending.
- *
- * Device control happens through "vendor specific" control messages on EP0.
- * All messages are destined for the "Interface" (with the index always 0,
- * so that if their two-port device might someday use similar firmware, we
- * can use index=1 to refer to the second port). The messages defined are:
- *
- * bRequest = 0 : set baud/bits/parity
- * 1 : unused
- * 2 : reserved for setting HW flow control (CTSRTS)
- * 3 : get/set "modem info" (pin states: DTR, RTS, DCD, RI, etc)
- * 4 : set break (on/off)
- * 5 : reserved for requesting interrupts on pin state change
- * 6 : query buffer room or chars in tx buffer
- * 7 : request tx unthrottle interrupt
- *
- * The host-side driver is set to recognize the device ID values stashed in
- * serial EEPROM (0x06cd, 0x0103), program this firmware into place, then
- * start it running. This firmware will use EzUSB's "renumeration" trick by
- * simulating a bus disconnect, then reconnect with a different device ID
- * (encoded in the desc_device descriptor below). The host driver then
- * recognizes the new device ID and glues it to the real serial driver code.
- *
- * USEFUL DOCS:
- * EzUSB Technical Reference Manual: <http://www.cypress.com/>
- * 8051 manuals: everywhere, but try www.dalsemi.com because the EzUSB is
- * basically the Dallas enhanced 8051 code. Remember that the EzUSB IO ports
- * use totally different registers!
- * USB 1.1 spec: www.usb.org
- *
- * HOW TO BUILD:
- * gcc -x assembler-with-cpp -P -E -o keyspan_pda.asm keyspan_pda.s
- * as31 -l keyspan_pda.asm
- * mv keyspan_pda.obj keyspan_pda.hex
- * perl ezusb_convert.pl keyspan_pda < keyspan_pda.hex > keyspan_pda_fw.h
- * Get as31 from <http://www.pjrc.com/tech/8051/index.html>, and hack on it
- * a bit to make it build.
- *
- * THANKS:
- * Greg Kroah-Hartman, for coordinating the whole usb-serial thing.
- * AnchorChips, for making such an incredibly useful little microcontroller.
- * KeySpan, for making a handy, cheap ($40) widget that was so easy to take
- * apart and trace with an ohmmeter.
- *
- * TODO:
- * lots. grep for TODO. Interrupt safety needs stress-testing. Better flow
- * control. Interrupting host upon change in DCD, etc, counting transitions.
- * Need to find a safe device id to use (the one used by the Keyspan firmware
- * under Windows would be ideal.. can anyone figure out what it is?). Parity.
- * More baud rates. Oh, and the string-descriptor-length silicon bug
- * workaround should be implemented, but I'm lazy, and the consequence is
- * that the device name strings that show up in your kernel log will have
- * lots of trailing binary garbage in them (appears as ????). Device strings
- * should be made more accurate.
- *
- * Questions, bugs, patches to Brian.
- *
- * -Brian Warner <warner@lothar.com>
- *
- */
-
-#define HIGH(x) (((x) & 0xff00) / 256)
-#define LOW(x) ((x) & 0xff)
-
-#define dpl1 0x84
-#define dph1 0x85
-#define dps 0x86
-
-;;; our bit assignments
-#define TX_RUNNING 0
-#define DO_TX_UNTHROTTLE 1
-
- ;; stack from 0x60 to 0x7f: should really set SP to 0x60-1, not 0x60
-#define STACK #0x60-1
-
-#define EXIF 0x91
-#define EIE 0xe8
- .flag EUSB, EIE.0
- .flag ES0, IE.4
-
-#define EP0CS #0x7fb4
-#define EP0STALLbit #0x01
-#define IN0BUF #0x7f00
-#define IN0BC #0x7fb5
-#define OUT0BUF #0x7ec0
-#define OUT0BC #0x7fc5
-#define IN2BUF #0x7e00
-#define IN2BC #0x7fb9
-#define IN2CS #0x7fb8
-#define OUT2BC #0x7fc9
-#define OUT2CS #0x7fc8
-#define OUT2BUF #0x7dc0
-#define IN4BUF #0x7d00
-#define IN4BC #0x7fbd
-#define IN4CS #0x7fbc
-#define OEB #0x7f9d
-#define OUTB #0x7f97
-#define OEC #0x7f9e
-#define OUTC #0x7f98
-#define PINSC #0x7f9b
-#define PORTCCFG #0x7f95
-#define IN07IRQ #0x7fa9
-#define OUT07IRQ #0x7faa
-#define IN07IEN #0x7fac
-#define OUT07IEN #0x7fad
-#define USBIRQ #0x7fab
-#define USBIEN #0x7fae
-#define USBBAV #0x7faf
-#define USBCS #0x7fd6
-#define SUDPTRH #0x7fd4
-#define SUDPTRL #0x7fd5
-#define SETUPDAT #0x7fe8
-
- ;; usb interrupt : enable is EIE.0 (0xe8), flag is EXIF.4 (0x91)
-
- .org 0
- ljmp start
- ;; interrupt vectors
- .org 23H
- ljmp serial_int
- .byte 0
-
- .org 43H
- ljmp USB_Jump_Table
- .byte 0 ; filled in by the USB core
-
-;;; local variables. These are not initialized properly: do it by hand.
- .org 30H
-rx_ring_in: .byte 0
-rx_ring_out: .byte 0
-tx_ring_in: .byte 0
-tx_ring_out: .byte 0
-tx_unthrottle_threshold: .byte 0
-
- .org 0x100H ; wants to be on a page boundary
-USB_Jump_Table:
- ljmp ISR_Sudav ; Setup Data Available
- .byte 0
- ljmp 0 ; Start of Frame
- .byte 0
- ljmp 0 ; Setup Data Loading
- .byte 0
- ljmp 0 ; Global Suspend
- .byte 0
- ljmp 0 ; USB Reset
- .byte 0
- ljmp 0 ; Reserved
- .byte 0
- ljmp 0 ; End Point 0 In
- .byte 0
- ljmp 0 ; End Point 0 Out
- .byte 0
- ljmp 0 ; End Point 1 In
- .byte 0
- ljmp 0 ; End Point 1 Out
- .byte 0
- ljmp ISR_Ep2in
- .byte 0
- ljmp ISR_Ep2out
- .byte 0
-
-
- .org 0x200
-
-start: mov SP,STACK-1 ; set stack
- ;; clear local variables
- clr a
- mov tx_ring_in, a
- mov tx_ring_out, a
- mov rx_ring_in, a
- mov rx_ring_out, a
- mov tx_unthrottle_threshold, a
- clr TX_RUNNING
- clr DO_TX_UNTHROTTLE
-
- ;; clear fifo with "fe"
- mov r1, 0
- mov a, #0xfe
- mov dptr, #tx_ring
-clear_tx_ring_loop:
- movx @dptr, a
- inc dptr
- djnz r1, clear_tx_ring_loop
-
- mov a, #0xfd
- mov dptr, #rx_ring
-clear_rx_ring_loop:
- movx @dptr, a
- inc dptr
- djnz r1, clear_rx_ring_loop
-
-;;; turn on the RS-232 driver chip (bring the STANDBY pin low)
- ;; set OEB.1
- mov a, #02H
- mov dptr,OEB
- movx @dptr,a
- ;; clear PB1
- mov a, #00H
- mov dptr,OUTB
- movx @dptr,a
- ;; set OEC.[127]
- mov a, #0x86
- mov dptr,OEC
- movx @dptr,a
- ;; set PORTCCFG.[01] to route TxD0,RxD0 to serial port
- mov dptr, PORTCCFG
- mov a, #0x03
- movx @dptr, a
-
- ;; set up interrupts, autovectoring
- mov dptr, USBBAV
- movx a,@dptr
- setb acc.0 ; AVEN bit to 0
- movx @dptr, a
-
- mov a,#0x01 ; enable SUDAV: setup data available (for ep0)
- mov dptr, USBIRQ
- movx @dptr, a ; clear SUDAVI
- mov dptr, USBIEN
- movx @dptr, a
-
- mov dptr, IN07IEN
- mov a,#0x04 ; enable IN2 int
- movx @dptr, a
-
- mov dptr, OUT07IEN
- mov a,#0x04 ; enable OUT2 int
- movx @dptr, a
- mov dptr, OUT2BC
- movx @dptr, a ; arm OUT2
-
- mov a, #0x84 ; turn on RTS, DTR
- mov dptr,OUTC
- movx @dptr, a
- ;; setup the serial port. 9600 8N1.
- mov a,#01010011 ; mode 1, enable rx, clear int
- mov SCON, a
- ;; using timer2, in 16-bit baud-rate-generator mode
- ;; (xtal 12MHz, internal fosc 24MHz)
- ;; RCAP2H,RCAP2L = 65536 - fosc/(32*baud)
- ;; 57600: 0xFFF2.F, say 0xFFF3
- ;; 9600: 0xFFB1.E, say 0xFFB2
- ;; 300: 0xF63C
-#define BAUD 9600
-#define BAUD_TIMEOUT(rate) (65536 - (24 * 1000 * 1000) / (32 * rate))
-#define BAUD_HIGH(rate) HIGH(BAUD_TIMEOUT(rate))
-#define BAUD_LOW(rate) LOW(BAUD_TIMEOUT(rate))
-
- mov T2CON, #030h ; rclk=1,tclk=1,cp=0,tr2=0(enable later)
- mov r3, #5
- acall set_baud
- setb TR2
- mov SCON, #050h
-
-#if 0
- mov r1, #0x40
- mov a, #0x41
-send:
- mov SBUF, a
- inc a
- anl a, #0x3F
- orl a, #0x40
-; xrl a, #0x02
-wait1:
- jnb TI, wait1
- clr TI
- djnz r1, send
-;done: sjmp done
-
-#endif
-
- setb EUSB
- setb EA
- setb ES0
- ;acall dump_stat
-
- ;; hey, what say we RENUMERATE! (TRM p.62)
- mov a, #0
- mov dps, a
- mov dptr, USBCS
- mov a, #0x02 ; DISCON=0, DISCOE=0, RENUM=1
- movx @dptr, a
- ;; now presence pin is floating, simulating disconnect. wait 0.5s
- mov r1, #46
-renum_wait1:
- mov r2, #0
-renum_wait2:
- mov r3, #0
-renum_wait3:
- djnz r3, renum_wait3
- djnz r2, renum_wait2
- djnz r1, renum_wait1 ; wait about n*(256^2) 6MHz clocks
- mov a, #0x06 ; DISCON=0, DISCOE=1, RENUM=1
- movx @dptr, a
- ;; we are back online. the host device will now re-query us
-
-
-main: sjmp main
-
-
-
-ISR_Sudav:
- push dps
- push dpl
- push dph
- push dpl1
- push dph1
- push acc
- mov a,EXIF
- clr acc.4
- mov EXIF,a ; clear INT2 first
- mov dptr, USBIRQ ; clear USB int
- mov a,#01h
- movx @dptr,a
-
- ;; get request type
- mov dptr, SETUPDAT
- movx a, @dptr
- mov r1, a ; r1 = bmRequestType
- inc dptr
- movx a, @dptr
- mov r2, a ; r2 = bRequest
- inc dptr
- movx a, @dptr
- mov r3, a ; r3 = wValueL
- inc dptr
- movx a, @dptr
- mov r4, a ; r4 = wValueH
-
- ;; main switch on bmRequest.type: standard or vendor
- mov a, r1
- anl a, #0x60
- cjne a, #0x00, setup_bmreq_type_not_standard
- ;; standard request: now main switch is on bRequest
- ljmp setup_bmreq_is_standard
-
-setup_bmreq_type_not_standard:
- ;; a still has bmreq&0x60
- cjne a, #0x40, setup_bmreq_type_not_vendor
- ;; Anchor reserves bRequest 0xa0-0xaf, we use small ones
- ;; switch on bRequest. bmRequest will always be 0x41 or 0xc1
- cjne r2, #0x00, setup_ctrl_not_00
- ;; 00 is set baud, wValue[0] has baud rate index
- lcall set_baud ; index in r3, carry set if error
- jc setup_bmreq_type_not_standard__do_stall
- ljmp setup_done_ack
-setup_bmreq_type_not_standard__do_stall:
- ljmp setup_stall
-setup_ctrl_not_00:
- cjne r2, #0x01, setup_ctrl_not_01
- ;; 01 is reserved for set bits (parity). TODO
- ljmp setup_stall
-setup_ctrl_not_01:
- cjne r2, #0x02, setup_ctrl_not_02
- ;; 02 is set HW flow control. TODO
- ljmp setup_stall
-setup_ctrl_not_02:
- cjne r2, #0x03, setup_ctrl_not_03
- ;; 03 is control pins (RTS, DTR).
- ljmp control_pins ; will jump to setup_done_ack,
- ; or setup_return_one_byte
-setup_ctrl_not_03:
- cjne r2, #0x04, setup_ctrl_not_04
- ;; 04 is send break (really "turn break on/off"). TODO
- cjne r3, #0x00, setup_ctrl_do_break_on
- ;; do break off: restore PORTCCFG.1 to reconnect TxD0 to serial port
- mov dptr, PORTCCFG
- movx a, @dptr
- orl a, #0x02
- movx @dptr, a
- ljmp setup_done_ack
-setup_ctrl_do_break_on:
- ;; do break on: clear PORTCCFG.0, set TxD high(?) (b1 low)
- mov dptr, OUTC
- movx a, @dptr
- anl a, #0xfd ; ~0x02
- movx @dptr, a
- mov dptr, PORTCCFG
- movx a, @dptr
- anl a, #0xfd ; ~0x02
- movx @dptr, a
- ljmp setup_done_ack
-setup_ctrl_not_04:
- cjne r2, #0x05, setup_ctrl_not_05
- ;; 05 is set desired interrupt bitmap. TODO
- ljmp setup_stall
-setup_ctrl_not_05:
- cjne r2, #0x06, setup_ctrl_not_06
- ;; 06 is query room
- cjne r3, #0x00, setup_ctrl_06_not_00
- ;; 06, wValue[0]=0 is query write_room
- mov a, tx_ring_out
- setb c
- subb a, tx_ring_in ; out-1-in = 255 - (in-out)
- ljmp setup_return_one_byte
-setup_ctrl_06_not_00:
- cjne r3, #0x01, setup_ctrl_06_not_01
- ;; 06, wValue[0]=1 is query chars_in_buffer
- mov a, tx_ring_in
- clr c
- subb a, tx_ring_out ; in-out
- ljmp setup_return_one_byte
-setup_ctrl_06_not_01:
- ljmp setup_stall
-setup_ctrl_not_06:
- cjne r2, #0x07, setup_ctrl_not_07
- ;; 07 is request tx unthrottle interrupt
- mov tx_unthrottle_threshold, r3; wValue[0] is threshold value
- ljmp setup_done_ack
-setup_ctrl_not_07:
- ljmp setup_stall
-
-setup_bmreq_type_not_vendor:
- ljmp setup_stall
-
-
-setup_bmreq_is_standard:
- cjne r2, #0x00, setup_breq_not_00
- ;; 00: Get_Status (sub-switch on bmRequestType: device, ep, int)
- cjne r1, #0x80, setup_Get_Status_not_device
- ;; Get_Status(device)
- ;; are we self-powered? no. can we do remote wakeup? no
- ;; so return two zero bytes. This is reusable
-setup_return_two_zero_bytes:
- mov dptr, IN0BUF
- clr a
- movx @dptr, a
- inc dptr
- movx @dptr, a
- mov dptr, IN0BC
- mov a, #2
- movx @dptr, a
- ljmp setup_done_ack
-setup_Get_Status_not_device:
- cjne r1, #0x82, setup_Get_Status_not_endpoint
- ;; Get_Status(endpoint)
- ;; must get stall bit for ep[wIndexL], return two bytes, bit in lsb 0
- ;; for now: cheat. TODO
- sjmp setup_return_two_zero_bytes
-setup_Get_Status_not_endpoint:
- cjne r1, #0x81, setup_Get_Status_not_interface
- ;; Get_Status(interface): return two zeros
- sjmp setup_return_two_zero_bytes
-setup_Get_Status_not_interface:
- ljmp setup_stall
-
-setup_breq_not_00:
- cjne r2, #0x01, setup_breq_not_01
- ;; 01: Clear_Feature (sub-switch on wValueL: stall, remote wakeup)
- cjne r3, #0x00, setup_Clear_Feature_not_stall
- ;; Clear_Feature(stall). should clear a stall bit. TODO
- ljmp setup_stall
-setup_Clear_Feature_not_stall:
- cjne r3, #0x01, setup_Clear_Feature_not_rwake
- ;; Clear_Feature(remote wakeup). ignored.
- ljmp setup_done_ack
-setup_Clear_Feature_not_rwake:
- ljmp setup_stall
-
-setup_breq_not_01:
- cjne r2, #0x03, setup_breq_not_03
- ;; 03: Set_Feature (sub-switch on wValueL: stall, remote wakeup)
- cjne r3, #0x00, setup_Set_Feature_not_stall
- ;; Set_Feature(stall). Should set a stall bit. TODO
- ljmp setup_stall
-setup_Set_Feature_not_stall:
- cjne r3, #0x01, setup_Set_Feature_not_rwake
- ;; Set_Feature(remote wakeup). ignored.
- ljmp setup_done_ack
-setup_Set_Feature_not_rwake:
- ljmp setup_stall
-
-setup_breq_not_03:
- cjne r2, #0x06, setup_breq_not_06
- ;; 06: Get_Descriptor (s-switch on wValueH: dev, config[n], string[n])
- cjne r4, #0x01, setup_Get_Descriptor_not_device
- ;; Get_Descriptor(device)
- mov dptr, SUDPTRH
- mov a, #HIGH(desc_device)
- movx @dptr, a
- mov dptr, SUDPTRL
- mov a, #LOW(desc_device)
- movx @dptr, a
- ljmp setup_done_ack
-setup_Get_Descriptor_not_device:
- cjne r4, #0x02, setup_Get_Descriptor_not_config
- ;; Get_Descriptor(config[n])
- cjne r3, #0x00, setup_stall; only handle n==0
- ;; Get_Descriptor(config[0])
- mov dptr, SUDPTRH
- mov a, #HIGH(desc_config1)
- movx @dptr, a
- mov dptr, SUDPTRL
- mov a, #LOW(desc_config1)
- movx @dptr, a
- ljmp setup_done_ack
-setup_Get_Descriptor_not_config:
- cjne r4, #0x03, setup_Get_Descriptor_not_string
- ;; Get_Descriptor(string[wValueL])
- ;; if (wValueL >= maxstrings) stall
- mov a, #((desc_strings_end-desc_strings)/2)
- clr c
- subb a,r3 ; a=4, r3 = 0..3 . if a<=0 then stall
- jc setup_stall
- jz setup_stall
- mov a, r3
- add a, r3 ; a = 2*wValueL
- mov dptr, #desc_strings
- add a, dpl
- mov dpl, a
- mov a, #0
- addc a, dph
- mov dph, a ; dph = desc_strings[a]. big endian! (handy)
- ;; it looks like my adapter uses a revision of the EZUSB that
- ;; contains "rev D errata number 8", as hinted in the EzUSB example
- ;; code. I cannot find an actual errata description on the Cypress
- ;; web site, but from the example code it looks like this bug causes
- ;; the length of string descriptors to be read incorrectly, possibly
- ;; sending back more characters than the descriptor has. The workaround
- ;; is to manually send out all of the data. The consequence of not
- ;; using the workaround is that the strings gathered by the kernel
- ;; driver are too long and are filled with trailing garbage (including
- ;; leftover strings). Writing this out by hand is a nuisance, so for
- ;; now I will just live with the bug.
- movx a, @dptr
- mov r1, a
- inc dptr
- movx a, @dptr
- mov r2, a
- mov dptr, SUDPTRH
- mov a, r1
- movx @dptr, a
- mov dptr, SUDPTRL
- mov a, r2
- movx @dptr, a
- ;; done
- ljmp setup_done_ack
-
-setup_Get_Descriptor_not_string:
- ljmp setup_stall
-
-setup_breq_not_06:
- cjne r2, #0x08, setup_breq_not_08
- ;; Get_Configuration. always 1. return one byte.
- ;; this is reusable
- mov a, #1
-setup_return_one_byte:
- mov dptr, IN0BUF
- movx @dptr, a
- mov a, #1
- mov dptr, IN0BC
- movx @dptr, a
- ljmp setup_done_ack
-setup_breq_not_08:
- cjne r2, #0x09, setup_breq_not_09
- ;; 09: Set_Configuration. ignored.
- ljmp setup_done_ack
-setup_breq_not_09:
- cjne r2, #0x0a, setup_breq_not_0a
- ;; 0a: Get_Interface. get the current altsetting for int[wIndexL]
- ;; since we only have one interface, ignore wIndexL, return a 0
- mov a, #0
- ljmp setup_return_one_byte
-setup_breq_not_0a:
- cjne r2, #0x0b, setup_breq_not_0b
- ;; 0b: Set_Interface. set altsetting for interface[wIndexL]. ignored
- ljmp setup_done_ack
-setup_breq_not_0b:
- ljmp setup_stall
-
-
-setup_done_ack:
- ;; now clear HSNAK
- mov dptr, EP0CS
- mov a, #0x02
- movx @dptr, a
- sjmp setup_done
-setup_stall:
- ;; unhandled. STALL
- ;EP0CS |= bmEPSTALL
- mov dptr, EP0CS
- movx a, @dptr
- orl a, EP0STALLbit
- movx @dptr, a
- sjmp setup_done
-
-setup_done:
- pop acc
- pop dph1
- pop dpl1
- pop dph
- pop dpl
- pop dps
- reti
-
-;;; ==============================================================
-
-set_baud: ; baud index in r3
- ;; verify a < 10
- mov a, r3
- jb ACC.7, set_baud__badbaud
- clr c
- subb a, #10
- jnc set_baud__badbaud
- mov a, r3
- rl a ; a = index*2
- add a, #LOW(baud_table)
- mov dpl, a
- mov a, #HIGH(baud_table)
- addc a, #0
- mov dph, a
- ;; TODO: shut down xmit/receive
- ;; TODO: wait for current xmit char to leave
- ;; TODO: shut down timer to avoid partial-char glitch
- movx a,@dptr ; BAUD_HIGH
- mov RCAP2H, a
- mov TH2, a
- inc dptr
- movx a,@dptr ; BAUD_LOW
- mov RCAP2L, a
- mov TL2, a
- ;; TODO: restart xmit/receive
- ;; TODO: reenable interrupts, resume tx if pending
- clr c ; c=0: success
- ret
-set_baud__badbaud:
- setb c ; c=1: failure
- ret
-
-;;; ==================================================
-control_pins:
- cjne r1, #0x41, control_pins_in
-control_pins_out:
- mov a, r3 ; wValue[0] holds new bits: b7 is new DTR, b2 is new RTS
- xrl a, #0xff ; 1 means active, 0V, +12V ?
- anl a, #0x84
- mov r3, a
- mov dptr, OUTC
- movx a, @dptr ; only change bits 7 and 2
- anl a, #0x7b ; ~0x84
- orl a, r3
- movx @dptr, a ; other pins are inputs, bits ignored
- ljmp setup_done_ack
-control_pins_in:
- mov dptr, PINSC
- movx a, @dptr
- xrl a, #0xff
- ljmp setup_return_one_byte
-
-;;; ========================================
-
-ISR_Ep2in:
- push dps
- push dpl
- push dph
- push dpl1
- push dph1
- push acc
- mov a,EXIF
- clr acc.4
- mov EXIF,a ; clear INT2 first
- mov dptr, IN07IRQ ; clear USB int
- mov a,#04h
- movx @dptr,a
-
- ;; do stuff
- lcall start_in
-
- pop acc
- pop dph1
- pop dpl1
- pop dph
- pop dpl
- pop dps
- reti
-
-ISR_Ep2out:
- push dps
- push dpl
- push dph
- push dpl1
- push dph1
- push acc
- mov a,EXIF
- clr acc.4
- mov EXIF,a ; clear INT2 first
- mov dptr, OUT07IRQ ; clear USB int
- mov a,#04h
- movx @dptr,a
-
- ;; do stuff
-
- ;; copy data into buffer. for now, assume we will have enough space
- mov dptr, OUT2BC ; get byte count
- movx a,@dptr
- mov r1, a
- clr a
- mov dps, a
- mov dptr, OUT2BUF ; load DPTR0 with source
- mov dph1, #HIGH(tx_ring) ; load DPTR1 with target
- mov dpl1, tx_ring_in
-OUT_loop:
- movx a,@dptr ; read
- inc dps ; switch to DPTR1: target
- inc dpl1 ; target = tx_ring_in+1
- movx @dptr,a ; store
- mov a,dpl1
- cjne a, tx_ring_out, OUT_no_overflow
- sjmp OUT_overflow
-OUT_no_overflow:
- inc tx_ring_in ; tx_ring_in++
- inc dps ; switch to DPTR0: source
- inc dptr
- djnz r1, OUT_loop
- sjmp OUT_done
-OUT_overflow:
- ;; signal overflow
- ;; fall through
-OUT_done:
- ;; ack
- mov dptr,OUT2BC
- movx @dptr,a
-
- ;; start tx
- acall maybe_start_tx
- ;acall dump_stat
-
- pop acc
- pop dph1
- pop dpl1
- pop dph
- pop dpl
- pop dps
- reti
-
-dump_stat:
- ;; fill in EP4in with a debugging message:
- ;; tx_ring_in, tx_ring_out, rx_ring_in, rx_ring_out
- ;; tx_active
- ;; tx_ring[0..15]
- ;; 0xfc
- ;; rx_ring[0..15]
- clr a
- mov dps, a
-
- mov dptr, IN4CS
- movx a, @dptr
- jb acc.1, dump_stat__done; busy: cannot dump, old one still pending
- mov dptr, IN4BUF
-
- mov a, tx_ring_in
- movx @dptr, a
- inc dptr
- mov a, tx_ring_out
- movx @dptr, a
- inc dptr
-
- mov a, rx_ring_in
- movx @dptr, a
- inc dptr
- mov a, rx_ring_out
- movx @dptr, a
- inc dptr
-
- clr a
- jnb TX_RUNNING, dump_stat__no_tx_running
- inc a
-dump_stat__no_tx_running:
- movx @dptr, a
- inc dptr
- ;; tx_ring[0..15]
- inc dps
- mov dptr, #tx_ring ; DPTR1: source
- mov r1, #16
-dump_stat__tx_ring_loop:
- movx a, @dptr
- inc dptr
- inc dps
- movx @dptr, a
- inc dptr
- inc dps
- djnz r1, dump_stat__tx_ring_loop
- inc dps
-
- mov a, #0xfc
- movx @dptr, a
- inc dptr
-
- ;; rx_ring[0..15]
- inc dps
- mov dptr, #rx_ring ; DPTR1: source
- mov r1, #16
-dump_stat__rx_ring_loop:
- movx a, @dptr
- inc dptr
- inc dps
- movx @dptr, a
- inc dptr
- inc dps
- djnz r1, dump_stat__rx_ring_loop
-
- ;; now send it
- clr a
- mov dps, a
- mov dptr, IN4BC
- mov a, #38
- movx @dptr, a
-dump_stat__done:
- ret
-
-;;; ============================================================
-
-maybe_start_tx:
- ;; make sure the tx process is running.
- jb TX_RUNNING, start_tx_done
-start_tx:
- ;; is there work to be done?
- mov a, tx_ring_in
- cjne a,tx_ring_out, start_tx__work
- ret ; no work
-start_tx__work:
- ;; tx was not running. send the first character, setup the TI int
- inc tx_ring_out ; [++tx_ring_out]
- mov dph, #HIGH(tx_ring)
- mov dpl, tx_ring_out
- movx a, @dptr
- mov sbuf, a
- setb TX_RUNNING
-start_tx_done:
- ;; can we unthrottle the host tx process?
- ;; step 1: do we care?
- mov a, #0
- cjne a, tx_unthrottle_threshold, start_tx__maybe_unthrottle_tx
- ;; nope
-start_tx_really_done:
- ret
-start_tx__maybe_unthrottle_tx:
- ;; step 2: is there now room?
- mov a, tx_ring_out
- setb c
- subb a, tx_ring_in
- ;; a is now write_room. If thresh >= a, we can unthrottle
- clr c
- subb a, tx_unthrottle_threshold
- jc start_tx_really_done ; nope
- ;; yes, we can unthrottle. remove the threshold and mark a request
- mov tx_unthrottle_threshold, #0
- setb DO_TX_UNTHROTTLE
- ;; prod rx, which will actually send the message when in2 becomes free
- ljmp start_in
-
-
-serial_int:
- push dps
- push dpl
- push dph
- push dpl1
- push dph1
- push acc
- jnb TI, serial_int__not_tx
- ;; tx finished. send another character if we have one
- clr TI ; clear int
- clr TX_RUNNING
- lcall start_tx
-serial_int__not_tx:
- jnb RI, serial_int__not_rx
- lcall get_rx_char
- clr RI ; clear int
-serial_int__not_rx:
- ;; return
- pop acc
- pop dph1
- pop dpl1
- pop dph
- pop dpl
- pop dps
- reti
-
-get_rx_char:
- mov dph, #HIGH(rx_ring)
- mov dpl, rx_ring_in
- inc dpl ; target = rx_ring_in+1
- mov a, sbuf
- movx @dptr, a
- ;; check for overflow before incrementing rx_ring_in
- mov a, dpl
- cjne a, rx_ring_out, get_rx_char__no_overflow
- ;; signal overflow
- ret
-get_rx_char__no_overflow:
- inc rx_ring_in
- ;; kick off USB INpipe
- acall start_in
- ret
-
-start_in:
- ;; check if the inpipe is already running.
- mov dptr, IN2CS
- movx a, @dptr
- jb acc.1, start_in__done; int will handle it
- jb DO_TX_UNTHROTTLE, start_in__do_tx_unthrottle
- ;; see if there is any work to do. a serial interrupt might occur
- ;; during this sequence?
- mov a, rx_ring_in
- cjne a, rx_ring_out, start_in__have_work
- ret ; nope
-start_in__have_work:
- ;; now copy as much data as possible into the pipe. 63 bytes max.
- clr a
- mov dps, a
- mov dph, #HIGH(rx_ring) ; load DPTR0 with source
- inc dps
- mov dptr, IN2BUF ; load DPTR1 with target
- movx @dptr, a ; in[0] signals that rest of IN is rx data
- inc dptr
- inc dps
- ;; loop until we run out of data, or we have copied 64 bytes
- mov r1, #1 ; INbuf size counter
-start_in__loop:
- mov a, rx_ring_in
- cjne a, rx_ring_out, start_inlocal_irq_enablell_copying
- sjmp start_in__kick
-start_inlocal_irq_enablell_copying:
- inc rx_ring_out
- mov dpl, rx_ring_out
- movx a, @dptr
- inc dps
- movx @dptr, a ; write into IN buffer
- inc dptr
- inc dps
- inc r1
- cjne r1, #64, start_in__loop; loop
-start_in__kick:
- ;; either we ran out of data, or we copied 64 bytes. r1 has byte count
- ;; kick off IN
- mov dptr, IN2BC
- mov a, r1
- jz start_in__done
- movx @dptr, a
- ;; done
-start_in__done:
- ;acall dump_stat
- ret
-start_in__do_tx_unthrottle:
- ;; special sequence: send a tx unthrottle message
- clr DO_TX_UNTHROTTLE
- clr a
- mov dps, a
- mov dptr, IN2BUF
- mov a, #1
- movx @dptr, a
- inc dptr
- mov a, #2
- movx @dptr, a
- mov dptr, IN2BC
- movx @dptr, a
- ret
-
-putchar:
- clr TI
- mov SBUF, a
-putchar_wait:
- jnb TI, putchar_wait
- clr TI
- ret
-
-
-baud_table: ; baud_high, then baud_low
- ;; baud[0]: 110
- .byte BAUD_HIGH(110)
- .byte BAUD_LOW(110)
- ;; baud[1]: 300
- .byte BAUD_HIGH(300)
- .byte BAUD_LOW(300)
- ;; baud[2]: 1200
- .byte BAUD_HIGH(1200)
- .byte BAUD_LOW(1200)
- ;; baud[3]: 2400
- .byte BAUD_HIGH(2400)
- .byte BAUD_LOW(2400)
- ;; baud[4]: 4800
- .byte BAUD_HIGH(4800)
- .byte BAUD_LOW(4800)
- ;; baud[5]: 9600
- .byte BAUD_HIGH(9600)
- .byte BAUD_LOW(9600)
- ;; baud[6]: 19200
- .byte BAUD_HIGH(19200)
- .byte BAUD_LOW(19200)
- ;; baud[7]: 38400
- .byte BAUD_HIGH(38400)
- .byte BAUD_LOW(38400)
- ;; baud[8]: 57600
- .byte BAUD_HIGH(57600)
- .byte BAUD_LOW(57600)
- ;; baud[9]: 115200
- .byte BAUD_HIGH(115200)
- .byte BAUD_LOW(115200)
-
-desc_device:
- .byte 0x12, 0x01, 0x00, 0x01, 0xff, 0xff, 0xff, 0x40
- .byte 0xcd, 0x06, 0x04, 0x01, 0x89, 0xab, 1, 2, 3, 0x01
-;;; The "real" device id, which must match the host driver, is that
-;;; "0xcd 0x06 0x04 0x01" sequence, which is 0x06cd, 0x0104
-
-desc_config1:
- .byte 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32
- .byte 0x09, 0x04, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0x00
- .byte 0x07, 0x05, 0x82, 0x03, 0x40, 0x00, 0x01
- .byte 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00
-
-desc_strings:
- .word string_langids, string_mfg, string_product, string_serial
-desc_strings_end:
-
-string_langids: .byte string_langids_end-string_langids
- .byte 3
- .word 0
-string_langids_end:
-
- ;; sigh. These strings are Unicode, meaning UTF16? 2 bytes each. Now
- ;; *that* is a pain in the ass to encode. And they are little-endian
- ;; too. Use this perl snippet to get the bytecodes:
- /* while (<>) {
- @c = split(//);
- foreach $c (@c) {
- printf("0x%02x, 0x00, ", ord($c));
- }
- }
- */
-
-string_mfg: .byte string_mfg_end-string_mfg
- .byte 3
-; .byte "ACME usb widgets"
- .byte 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00, 0x62, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x73, 0x00
-string_mfg_end:
-
-string_product: .byte string_product_end-string_product
- .byte 3
-; .byte "ACME USB serial widget"
- .byte 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x55, 0x00, 0x53, 0x00, 0x42, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00
-string_product_end:
-
-string_serial: .byte string_serial_end-string_serial
- .byte 3
-; .byte "47"
- .byte 0x34, 0x00, 0x37, 0x00
-string_serial_end:
-
-;;; ring buffer memory
- ;; tx_ring_in+1 is where the next input byte will go
- ;; [tx_ring_out] has been sent
- ;; if tx_ring_in == tx_ring_out, theres no work to do
- ;; there are (tx_ring_in - tx_ring_out) chars to be written
- ;; dont let _in lap _out
- ;; cannot inc if tx_ring_in+1 == tx_ring_out
- ;; write [tx_ring_in+1] then tx_ring_in++
- ;; if (tx_ring_in+1 == tx_ring_out), overflow
- ;; else tx_ring_in++
- ;; read/send [tx_ring_out+1], then tx_ring_out++
-
- ;; rx_ring_in works the same way
-
- .org 0x1000
-tx_ring:
- .skip 0x100 ; 256 bytes
-rx_ring:
- .skip 0x100 ; 256 bytes
-
-
- .END
-
diff --git a/firmware/keyspan_pda/xircom_pgs.HEX b/firmware/keyspan_pda/xircom_pgs.HEX
deleted file mode 100644
index e9b00d70282f..000000000000
--- a/firmware/keyspan_pda/xircom_pgs.HEX
+++ /dev/null
@@ -1,87 +0,0 @@
-:03000000020200F9
-:0400230002059B0037
-:050030000000000000CB
-:0400430002010000B6
-:100100000202BA000200000002000000020000002B
-:1001100002000000020000000200000002000000D7
-:100120000200000002000000020485000204B90081
-:1002000075815EE4F532F533F530F531F534C20031
-:10021000C201A90074FE901000F0A3D9FC74FD90F7
-:100220001100F0A3D9FC907F9474BFF0907F957477
-:10023000EFF07410907F9EF07400907F98F07440FF
-:10024000907F9DF07400907F97F07482907F9EF075
-:10025000907F957403F0907FAFE0D2E0F07401904E
-:100260007FABF0907FAEF0907FAC7404F0907FADE8
-:100270007404F0907FC9F07407907FAFF074209001
-:100280007F9CF07480907F98F07453F59875C83017
-:100290007B059144D2CA759850D2E8D2AFD2AC74E3
-:1002A00000F586907FD67402F0792E7A007B00DB11
-:1002B000FEDAFAD9F67406F080FEC086C082C083EA
-:1002C000C084C085C0E0E591C2E4F591907FAB7435
-:1002D00001F0907FE8E0F9A3E0FAA3E0FBA3E0FCE3
-:1002E000E95460B4000302035DB4406EBA000B121F
-:1002F0000444400302042602042EBA010302042E21
-:10030000BA020302042EBA0303020468BA041EBB35
-:10031000000A907F95E04402F0020426907F98E066
-:1003200054FDF0907F95E054FDF0020426BA0503D9
-:1003300002042EBA0619BB0008E533D39532020435
-:1003400002BB0108E532C3953302040202042EBA4F
-:1003500007058B3402042602042E02042EBA002064
-:10036000B98010907F00E4F0A3F0907FB57402F0A4
-:10037000020426B9820280EBB9810280E602042ED3
-:10038000BA010FBB000302042EBB010302042602C4
-:10039000042EBA030FBB000302042EBB01030204A8
-:1003A0002602042EBA0656BC010F907FD47406F0C4
-:1003B000907FD5745AF0020426BC0212BB006F90E5
-:1003C0007FD47406F0907FD5746CF0020426BC03D1
-:1003D000297404C39B40576055EB2B90068C2582F3
-:1003E000F58274003583F583E0F9A3E0FA907FD4B9
-:1003F000E9F0907FD5EAF002042602042EBA080F35
-:100400007401907F00F07401907FB5F0020426BA69
-:100410000903020426BA0A057400020402BA0B0397
-:1004200002042602042E907FB47402F08009907FAB
-:10043000B4E04401F08000D0E0D085D084D083D0F7
-:1004400082D08632EB20E71EC3940A5019EB232496
-:1004500046F58274063400F583E0F5CBF5CDA3E0D4
-:10046000F5CAF5CCC322D322B94111EB64FF548005
-:10047000FB907F98E0547F4BF0020426907F9BE036
-:1004800064FF020402C086C082C083C084C085C0ED
-:10049000E0E591C2E4F591907FA97404F074209096
-:1004A0007F9CF01205DC7420907F9CF0D0E0D0851A
-:1004B000D084D083D082D08632C086C082C083C030
-:1004C00084C085C0E07410907F9CF0E591C2E4F593
-:1004D00091907FAA7404F0907FC9E0F9E4F58690CA
-:1004E0007DC0758510853284E005860584F0E5843D
-:1004F000B53302800905320586A3D9EC8000907FD0
-:10050000C9F0B16D7420907F9CF0D0E0D085D0848C
-:10051000D083D082D08632E4F586907FBCE020E1A3
-:100520004B907D00E532F0A3E533F0A3E530F0A376
-:10053000E531F0A3E430000104F0A305869010003B
-:100540007910E0A30586F0A30586D9F6058674FC2C
-:10055000F0A305869011007910E0A30586F0A305AD
-:1005600086D9F6E4F586907FBD7426F0222000132C
-:10057000E532B53301220533758310853382E0F50A
-:1005800099D2007400B5340122E533D39532C39576
-:100590003440F5753400D2010205DCC086C082C04B
-:1005A00083C084C085C0E0309907C299C20012059B
-:1005B000703098051205C6C298D0E0D085D084D09E
-:1005C00083D082D086327583118530820582E59989
-:1005D000F0E582B53101220530B1DC227410907F44
-:1005E0009CF0907FB8E020E13E20013CE530B53141
-:1005F0000122E4F5867583110586907E00F0A3053F
-:10060000867901E530B5310280100531853182E00F
-:100610000586F0A3058609B940E97410907F9CF027
-:10062000907FB9E96001F022C201E4F586907E0076
-:100630007401F0A37402F0907FB9F022C299F59989
-:100640003099FDC29922E55EF63CFD8FFEC8FF643D
-:10065000FFB2FFD9FFEDFFF3FFFA12010001FFFF28
-:10066000FF40CD06040189AB01020301090220000D
-:1006700001010080320904000002FFFFFF000705AE
-:10068000820340000107050202400000069406981C
-:1006900006BA06E8040300002203410043004D00AF
-:1006A000450020007500730062002000770069009B
-:1006B000640067006500740073002E03410043006E
-:1006C0004D004500200055005300420020007300FB
-:1006D00065007200690061006C002000770069000D
-:0E06E0006400670065007400060334003700F4
-:00000001FF
diff --git a/firmware/keyspan_pda/xircom_pgs.S b/firmware/keyspan_pda/xircom_pgs.S
deleted file mode 100644
index 0b79bbf0ae15..000000000000
--- a/firmware/keyspan_pda/xircom_pgs.S
+++ /dev/null
@@ -1,1192 +0,0 @@
-/* $Id: loop.s,v 1.23 2000/03/20 09:49:06 warner Exp $
- *
- * Firmware for the Keyspan PDA Serial Adapter, a USB serial port based on
- * the EzUSB microcontroller.
- *
- * (C) Copyright 2000 Brian Warner <warner@lothar.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * "Keyspan PDA Serial Adapter" is probably a copyright of Keyspan, the
- * company.
- *
- * This serial adapter is basically an EzUSB chip and an RS-232 line driver
- * in a little widget that has a DB-9 on one end and a USB plug on the other.
- * It uses the EzUSB's internal UART0 (using the pins from Port C) and timer2
- * as a baud-rate generator. The wiring is:
- * PC0/RxD0 <- rxd (DB9 pin 2) PC4 <- dsr pin 6
- * PC1/TxD0 -> txd pin 3 PC5 <- ri pin 9
- * PC2 -> rts pin 7 PC6 <- dcd pin 1
- * PC3 <- cts pin 8 PC7 -> dtr pin 4
- * PB1 -> line driver standby
- *
- * The EzUSB register constants below come from their excellent documentation
- * and sample code (which used to be available at www.anchorchips.com, but
- * that has now been absorbed into Cypress' site and the CD-ROM contents
- * don't appear to be available online anymore). If we get multiple
- * EzUSB-based drivers into the kernel, it might be useful to pull them out
- * into a separate .h file.
- *
- * THEORY OF OPERATION:
- *
- * There are two 256-byte ring buffers, one for tx, one for rx.
- *
- * EP2out is pure tx data. When it appears, the data is copied into the tx
- * ring and serial transmission is started if it wasn't already running. The
- * "tx buffer empty" interrupt may kick off another character if the ring
- * still has data. If the host is tx-blocked because the ring filled up,
- * it will request a "tx unthrottle" interrupt. If sending a serial character
- * empties the ring below the desired threshold, we set a bit that will send
- * up the tx unthrottle message as soon as the rx buffer becomes free.
- *
- * EP2in (interrupt) is used to send both rx chars and rx status messages
- * (only "tx unthrottle" at this time) back up to the host. The first byte
- * of the rx message indicates data (0) or status msg (1). Status messages
- * are sent before any data.
- *
- * Incoming serial characters are put into the rx ring by the serial
- * interrupt, and the EP2in buffer sent if it wasn't already in transit.
- * When the EP2in buffer returns, the interrupt prompts us to send more
- * rx chars (or status messages) if they are pending.
- *
- * Device control happens through "vendor specific" control messages on EP0.
- * All messages are destined for the "Interface" (with the index always 0,
- * so that if their two-port device might someday use similar firmware, we
- * can use index=1 to refer to the second port). The messages defined are:
- *
- * bRequest = 0 : set baud/bits/parity
- * 1 : unused
- * 2 : reserved for setting HW flow control (CTSRTS)
- * 3 : get/set "modem info" (pin states: DTR, RTS, DCD, RI, etc)
- * 4 : set break (on/off)
- * 5 : reserved for requesting interrupts on pin state change
- * 6 : query buffer room or chars in tx buffer
- * 7 : request tx unthrottle interrupt
- *
- * The host-side driver is set to recognize the device ID values stashed in
- * serial EEPROM (0x06cd, 0x0103), program this firmware into place, then
- * start it running. This firmware will use EzUSB's "renumeration" trick by
- * simulating a bus disconnect, then reconnect with a different device ID
- * (encoded in the desc_device descriptor below). The host driver then
- * recognizes the new device ID and glues it to the real serial driver code.
- *
- * USEFUL DOCS:
- * EzUSB Technical Reference Manual: <http://www.cypress.com/>
- * 8051 manuals: everywhere, but try www.dalsemi.com because the EzUSB is
- * basically the Dallas enhanced 8051 code. Remember that the EzUSB IO ports
- * use totally different registers!
- * USB 1.1 spec: www.usb.org
- *
- * HOW TO BUILD:
- * gcc -x assembler-with-cpp -P -E -o keyspan_pda.asm keyspan_pda.s
- * as31 -l keyspan_pda.asm
- * mv keyspan_pda.obj keyspan_pda.hex
- * perl ezusb_convert.pl keyspan_pda < keyspan_pda.hex > keyspan_pda_fw.h
- * Get as31 from <http://www.pjrc.com/tech/8051/index.html>, and hack on it
- * a bit to make it build.
- *
- * THANKS:
- * Greg Kroah-Hartman, for coordinating the whole usb-serial thing.
- * AnchorChips, for making such an incredibly useful little microcontroller.
- * KeySpan, for making a handy, cheap ($40) widget that was so easy to take
- * apart and trace with an ohmmeter.
- *
- * TODO:
- * lots. grep for TODO. Interrupt safety needs stress-testing. Better flow
- * control. Interrupting host upon change in DCD, etc, counting transitions.
- * Need to find a safe device id to use (the one used by the Keyspan firmware
- * under Windows would be ideal.. can anyone figure out what it is?). Parity.
- * More baud rates. Oh, and the string-descriptor-length silicon bug
- * workaround should be implemented, but I'm lazy, and the consequence is
- * that the device name strings that show up in your kernel log will have
- * lots of trailing binary garbage in them (appears as ????). Device strings
- * should be made more accurate.
- *
- * Questions, bugs, patches to Brian.
- *
- * -Brian Warner <warner@lothar.com>
- *
- */
-
-#define HIGH(x) (((x) & 0xff00) / 256)
-#define LOW(x) ((x) & 0xff)
-
-#define dpl1 0x84
-#define dph1 0x85
-#define dps 0x86
-
-;;; our bit assignments
-#define TX_RUNNING 0
-#define DO_TX_UNTHROTTLE 1
-
- ;; stack from 0x60 to 0x7f: should really set SP to 0x60-1, not 0x60
-#define STACK #0x60-1
-
-#define EXIF 0x91
-#define EIE 0xe8
- .flag EUSB, EIE.0
- .flag ES0, IE.4
-
-#define EP0CS #0x7fb4
-#define EP0STALLbit #0x01
-#define IN0BUF #0x7f00
-#define IN0BC #0x7fb5
-#define OUT0BUF #0x7ec0
-#define OUT0BC #0x7fc5
-#define IN2BUF #0x7e00
-#define IN2BC #0x7fb9
-#define IN2CS #0x7fb8
-#define OUT2BC #0x7fc9
-#define OUT2CS #0x7fc8
-#define OUT2BUF #0x7dc0
-#define IN4BUF #0x7d00
-#define IN4BC #0x7fbd
-#define IN4CS #0x7fbc
-#define OEB #0x7f9d
-#define OUTB #0x7f97
-#define OEC #0x7f9e
-#define OUTC #0x7f98
-#define PINSC #0x7f9b
-#define PORTBCFG #0x7f94
-#define PORTCCFG #0x7f95
-#define OEA #0x7f9c
-#define IN07IRQ #0x7fa9
-#define OUT07IRQ #0x7faa
-#define IN07IEN #0x7fac
-#define OUT07IEN #0x7fad
-#define USBIRQ #0x7fab
-#define USBIEN #0x7fae
-#define USBBAV #0x7faf
-#define USBCS #0x7fd6
-#define SUDPTRH #0x7fd4
-#define SUDPTRL #0x7fd5
-#define SETUPDAT #0x7fe8
-
- ;; usb interrupt : enable is EIE.0 (0xe8), flag is EXIF.4 (0x91)
-
- .org 0
- ljmp start
- ;; interrupt vectors
- .org 23H
- ljmp serial_int
- .byte 0
-
- .org 43H
- ljmp USB_Jump_Table
- .byte 0 ; filled in by the USB core
-
-;;; local variables. These are not initialized properly: do it by hand.
- .org 30H
-rx_ring_in: .byte 0
-rx_ring_out: .byte 0
-tx_ring_in: .byte 0
-tx_ring_out: .byte 0
-tx_unthrottle_threshold: .byte 0
-
- .org 0x100H ; wants to be on a page boundary
-USB_Jump_Table:
- ljmp ISR_Sudav ; Setup Data Available
- .byte 0
- ljmp 0 ; Start of Frame
- .byte 0
- ljmp 0 ; Setup Data Loading
- .byte 0
- ljmp 0 ; Global Suspend
- .byte 0
- ljmp 0 ; USB Reset
- .byte 0
- ljmp 0 ; Reserved
- .byte 0
- ljmp 0 ; End Point 0 In
- .byte 0
- ljmp 0 ; End Point 0 Out
- .byte 0
- ljmp 0 ; End Point 1 In
- .byte 0
- ljmp 0 ; End Point 1 Out
- .byte 0
- ljmp ISR_Ep2in
- .byte 0
- ljmp ISR_Ep2out
- .byte 0
-
-
- .org 0x200
-
-start: mov SP,STACK-1 ; set stack
- ;; clear local variables
- clr a
- mov tx_ring_in, a
- mov tx_ring_out, a
- mov rx_ring_in, a
- mov rx_ring_out, a
- mov tx_unthrottle_threshold, a
- clr TX_RUNNING
- clr DO_TX_UNTHROTTLE
-
- ;; clear fifo with "fe"
- mov r1, 0
- mov a, #0xfe
- mov dptr, #tx_ring
-clear_tx_ring_loop:
- movx @dptr, a
- inc dptr
- djnz r1, clear_tx_ring_loop
-
- mov a, #0xfd
- mov dptr, #rx_ring
-clear_rx_ring_loop:
- movx @dptr, a
- inc dptr
- djnz r1, clear_rx_ring_loop
-
-;;; turn on the RS-232 driver chip (bring the STANDBY pin low)
-;;; on Xircom the STANDBY is wired to PB6 and PC4
- mov dptr, PORTBCFG
- mov a, #0xBf
- movx @dptr, a
- mov dptr, PORTCCFG
- mov a, #0xef
- movx @dptr, a
-
- ;; set OEC.4
- mov a, #0x10
- mov dptr,OEC
- movx @dptr,a
-
- ;; clear PC4
- mov a, #0x00
- mov dptr,OUTC
- movx @dptr,a
-
- ;; set OEB.6
- mov a, #0x40
- mov dptr,OEB
- movx @dptr,a
-
- ;; clear PB6
- mov a, #0x00
- mov dptr,OUTB
- movx @dptr,a
-
- ;; set OEC.[17]
- mov a, #0x82
- mov dptr,OEC
- movx @dptr,a
-
-
- ;; set PORTCCFG.[01] to route TxD0,RxD0 to serial port
- mov dptr, PORTCCFG
- mov a, #0x03
- movx @dptr, a
-
- ;; set up interrupts, autovectoring
- ;; set BKPT
- mov dptr, USBBAV
- movx a,@dptr
- setb acc.0 ; AVEN bit to 0
- movx @dptr, a
-
- mov a,#0x01 ; enable SUDAV: setup data available (for ep0)
- mov dptr, USBIRQ
- movx @dptr, a ; clear SUDAVI
- mov dptr, USBIEN
- movx @dptr, a
-
- mov dptr, IN07IEN
- mov a,#0x04 ; enable IN2 int
- movx @dptr, a
-
- mov dptr, OUT07IEN
- mov a,#0x04 ; enable OUT2 int
- movx @dptr, a
- mov dptr, OUT2BC
- movx @dptr, a ; arm OUT2
-
-;; mov a, #0x84 ; turn on RTS, DTR
-;; mov dptr,OUTC
-;; movx @dptr, a
-
- mov a, #0x7 ; turn on DTR
- mov dptr,USBBAV
- movx @dptr, a
-
- mov a, #0x20 ; turn on the RED led
- mov dptr,OEA
- movx @dptr, a
-
- mov a, #0x80 ; turn on RTS
- mov dptr,OUTC
- movx @dptr, a
-
- ;; setup the serial port. 9600 8N1.
- mov a,#0x53 ; mode 1, enable rx, clear int
- mov SCON, a
- ;; using timer2, in 16-bit baud-rate-generator mode
- ;; (xtal 12MHz, internal fosc 24MHz)
- ;; RCAP2H,RCAP2L = 65536 - fosc/(32*baud)
- ;; 57600: 0xFFF2.F, say 0xFFF3
- ;; 9600: 0xFFB1.E, say 0xFFB2
- ;; 300: 0xF63C
-#define BAUD 9600
-#define BAUD_TIMEOUT(rate) (65536 - (24 * 1000 * 1000) / (32 * rate))
-#define BAUD_HIGH(rate) HIGH(BAUD_TIMEOUT(rate))
-#define BAUD_LOW(rate) LOW(BAUD_TIMEOUT(rate))
-
- mov T2CON, #030h ; rclk=1,tclk=1,cp=0,tr2=0(enable later)
- mov r3, #5
- acall set_baud
- setb TR2
- mov SCON, #050h
-
-#if 0
- mov r1, #0x40
- mov a, #0x41
-send:
- mov SBUF, a
- inc a
- anl a, #0x3F
- orl a, #0x40
-; xrl a, #0x02
-wait1:
- jnb TI, wait1
- clr TI
- djnz r1, send
-;done: sjmp done
-
-#endif
-
- setb EUSB
- setb EA
- setb ES0
- ;acall dump_stat
-
- ;; hey, what say we RENUMERATE! (TRM p.62)
- mov a, #0
- mov dps, a
- mov dptr, USBCS
- mov a, #0x02 ; DISCON=0, DISCOE=0, RENUM=1
- movx @dptr, a
- ;; now presence pin is floating, simulating disconnect. wait 0.5s
- mov r1, #46
-renum_wait1:
- mov r2, #0
-renum_wait2:
- mov r3, #0
-renum_wait3:
- djnz r3, renum_wait3
- djnz r2, renum_wait2
- djnz r1, renum_wait1 ; wait about n*(256^2) 6MHz clocks
- mov a, #0x06 ; DISCON=0, DISCOE=1, RENUM=1
- movx @dptr, a
- ;; we are back online. the host device will now re-query us
-
-
-main: sjmp main
-
-
-
-ISR_Sudav:
- push dps
- push dpl
- push dph
- push dpl1
- push dph1
- push acc
- mov a,EXIF
- clr acc.4
- mov EXIF,a ; clear INT2 first
- mov dptr, USBIRQ ; clear USB int
- mov a,#01h
- movx @dptr,a
-
- ;; get request type
- mov dptr, SETUPDAT
- movx a, @dptr
- mov r1, a ; r1 = bmRequestType
- inc dptr
- movx a, @dptr
- mov r2, a ; r2 = bRequest
- inc dptr
- movx a, @dptr
- mov r3, a ; r3 = wValueL
- inc dptr
- movx a, @dptr
- mov r4, a ; r4 = wValueH
-
- ;; main switch on bmRequest.type: standard or vendor
- mov a, r1
- anl a, #0x60
- cjne a, #0x00, setup_bmreq_type_not_standard
- ;; standard request: now main switch is on bRequest
- ljmp setup_bmreq_is_standard
-
-setup_bmreq_type_not_standard:
- ;; a still has bmreq&0x60
- cjne a, #0x40, setup_bmreq_type_not_vendor
- ;; Anchor reserves bRequest 0xa0-0xaf, we use small ones
- ;; switch on bRequest. bmRequest will always be 0x41 or 0xc1
- cjne r2, #0x00, setup_ctrl_not_00
- ;; 00 is set baud, wValue[0] has baud rate index
- lcall set_baud ; index in r3, carry set if error
- jc setup_bmreq_type_not_standard__do_stall
- ljmp setup_done_ack
-setup_bmreq_type_not_standard__do_stall:
- ljmp setup_stall
-setup_ctrl_not_00:
- cjne r2, #0x01, setup_ctrl_not_01
- ;; 01 is reserved for set bits (parity). TODO
- ljmp setup_stall
-setup_ctrl_not_01:
- cjne r2, #0x02, setup_ctrl_not_02
- ;; 02 is set HW flow control. TODO
- ljmp setup_stall
-setup_ctrl_not_02:
- cjne r2, #0x03, setup_ctrl_not_03
- ;; 03 is control pins (RTS, DTR).
- ljmp control_pins ; will jump to setup_done_ack,
- ; or setup_return_one_byte
-setup_ctrl_not_03:
- cjne r2, #0x04, setup_ctrl_not_04
- ;; 04 is send break (really "turn break on/off"). TODO
- cjne r3, #0x00, setup_ctrl_do_break_on
- ;; do break off: restore PORTCCFG.1 to reconnect TxD0 to serial port
- mov dptr, PORTCCFG
- movx a, @dptr
- orl a, #0x02
- movx @dptr, a
- ljmp setup_done_ack
-setup_ctrl_do_break_on:
- ;; do break on: clear PORTCCFG.0, set TxD high(?) (b1 low)
- mov dptr, OUTC
- movx a, @dptr
- anl a, #0xfd ; ~0x02
- movx @dptr, a
- mov dptr, PORTCCFG
- movx a, @dptr
- anl a, #0xfd ; ~0x02
- movx @dptr, a
- ljmp setup_done_ack
-setup_ctrl_not_04:
- cjne r2, #0x05, setup_ctrl_not_05
- ;; 05 is set desired interrupt bitmap. TODO
- ljmp setup_stall
-setup_ctrl_not_05:
- cjne r2, #0x06, setup_ctrl_not_06
- ;; 06 is query room
- cjne r3, #0x00, setup_ctrl_06_not_00
- ;; 06, wValue[0]=0 is query write_room
- mov a, tx_ring_out
- setb c
- subb a, tx_ring_in ; out-1-in = 255 - (in-out)
- ljmp setup_return_one_byte
-setup_ctrl_06_not_00:
- cjne r3, #0x01, setup_ctrl_06_not_01
- ;; 06, wValue[0]=1 is query chars_in_buffer
- mov a, tx_ring_in
- clr c
- subb a, tx_ring_out ; in-out
- ljmp setup_return_one_byte
-setup_ctrl_06_not_01:
- ljmp setup_stall
-setup_ctrl_not_06:
- cjne r2, #0x07, setup_ctrl_not_07
- ;; 07 is request tx unthrottle interrupt
- mov tx_unthrottle_threshold, r3; wValue[0] is threshold value
- ljmp setup_done_ack
-setup_ctrl_not_07:
- ljmp setup_stall
-
-setup_bmreq_type_not_vendor:
- ljmp setup_stall
-
-
-setup_bmreq_is_standard:
- cjne r2, #0x00, setup_breq_not_00
- ;; 00: Get_Status (sub-switch on bmRequestType: device, ep, int)
- cjne r1, #0x80, setup_Get_Status_not_device
- ;; Get_Status(device)
- ;; are we self-powered? no. can we do remote wakeup? no
- ;; so return two zero bytes. This is reusable
-setup_return_two_zero_bytes:
- mov dptr, IN0BUF
- clr a
- movx @dptr, a
- inc dptr
- movx @dptr, a
- mov dptr, IN0BC
- mov a, #2
- movx @dptr, a
- ljmp setup_done_ack
-setup_Get_Status_not_device:
- cjne r1, #0x82, setup_Get_Status_not_endpoint
- ;; Get_Status(endpoint)
- ;; must get stall bit for ep[wIndexL], return two bytes, bit in lsb 0
- ;; for now: cheat. TODO
- sjmp setup_return_two_zero_bytes
-setup_Get_Status_not_endpoint:
- cjne r1, #0x81, setup_Get_Status_not_interface
- ;; Get_Status(interface): return two zeros
- sjmp setup_return_two_zero_bytes
-setup_Get_Status_not_interface:
- ljmp setup_stall
-
-setup_breq_not_00:
- cjne r2, #0x01, setup_breq_not_01
- ;; 01: Clear_Feature (sub-switch on wValueL: stall, remote wakeup)
- cjne r3, #0x00, setup_Clear_Feature_not_stall
- ;; Clear_Feature(stall). should clear a stall bit. TODO
- ljmp setup_stall
-setup_Clear_Feature_not_stall:
- cjne r3, #0x01, setup_Clear_Feature_not_rwake
- ;; Clear_Feature(remote wakeup). ignored.
- ljmp setup_done_ack
-setup_Clear_Feature_not_rwake:
- ljmp setup_stall
-
-setup_breq_not_01:
- cjne r2, #0x03, setup_breq_not_03
- ;; 03: Set_Feature (sub-switch on wValueL: stall, remote wakeup)
- cjne r3, #0x00, setup_Set_Feature_not_stall
- ;; Set_Feature(stall). Should set a stall bit. TODO
- ljmp setup_stall
-setup_Set_Feature_not_stall:
- cjne r3, #0x01, setup_Set_Feature_not_rwake
- ;; Set_Feature(remote wakeup). ignored.
- ljmp setup_done_ack
-setup_Set_Feature_not_rwake:
- ljmp setup_stall
-
-setup_breq_not_03:
- cjne r2, #0x06, setup_breq_not_06
- ;; 06: Get_Descriptor (s-switch on wValueH: dev, config[n], string[n])
- cjne r4, #0x01, setup_Get_Descriptor_not_device
- ;; Get_Descriptor(device)
- mov dptr, SUDPTRH
- mov a, #HIGH(desc_device)
- movx @dptr, a
- mov dptr, SUDPTRL
- mov a, #LOW(desc_device)
- movx @dptr, a
- ljmp setup_done_ack
-setup_Get_Descriptor_not_device:
- cjne r4, #0x02, setup_Get_Descriptor_not_config
- ;; Get_Descriptor(config[n])
- cjne r3, #0x00, setup_stall; only handle n==0
- ;; Get_Descriptor(config[0])
- mov dptr, SUDPTRH
- mov a, #HIGH(desc_config1)
- movx @dptr, a
- mov dptr, SUDPTRL
- mov a, #LOW(desc_config1)
- movx @dptr, a
- ljmp setup_done_ack
-setup_Get_Descriptor_not_config:
- cjne r4, #0x03, setup_Get_Descriptor_not_string
- ;; Get_Descriptor(string[wValueL])
- ;; if (wValueL >= maxstrings) stall
- mov a, #((desc_strings_end-desc_strings)/2)
- clr c
- subb a,r3 ; a=4, r3 = 0..3 . if a<=0 then stall
- jc setup_stall
- jz setup_stall
- mov a, r3
- add a, r3 ; a = 2*wValueL
- mov dptr, #desc_strings
- add a, dpl
- mov dpl, a
- mov a, #0
- addc a, dph
- mov dph, a ; dph = desc_strings[a]. big endian! (handy)
- ;; it looks like my adapter uses a revision of the EZUSB that
- ;; contains "rev D errata number 8", as hinted in the EzUSB example
- ;; code. I cannot find an actual errata description on the Cypress
- ;; web site, but from the example code it looks like this bug causes
- ;; the length of string descriptors to be read incorrectly, possibly
- ;; sending back more characters than the descriptor has. The workaround
- ;; is to manually send out all of the data. The consequence of not
- ;; using the workaround is that the strings gathered by the kernel
- ;; driver are too long and are filled with trailing garbage (including
- ;; leftover strings). Writing this out by hand is a nuisance, so for
- ;; now I will just live with the bug.
- movx a, @dptr
- mov r1, a
- inc dptr
- movx a, @dptr
- mov r2, a
- mov dptr, SUDPTRH
- mov a, r1
- movx @dptr, a
- mov dptr, SUDPTRL
- mov a, r2
- movx @dptr, a
- ;; done
- ljmp setup_done_ack
-
-setup_Get_Descriptor_not_string:
- ljmp setup_stall
-
-setup_breq_not_06:
- cjne r2, #0x08, setup_breq_not_08
- ;; Get_Configuration. always 1. return one byte.
- ;; this is reusable
- mov a, #1
-setup_return_one_byte:
- mov dptr, IN0BUF
- movx @dptr, a
- mov a, #1
- mov dptr, IN0BC
- movx @dptr, a
- ljmp setup_done_ack
-setup_breq_not_08:
- cjne r2, #0x09, setup_breq_not_09
- ;; 09: Set_Configuration. ignored.
- ljmp setup_done_ack
-setup_breq_not_09:
- cjne r2, #0x0a, setup_breq_not_0a
- ;; 0a: Get_Interface. get the current altsetting for int[wIndexL]
- ;; since we only have one interface, ignore wIndexL, return a 0
- mov a, #0
- ljmp setup_return_one_byte
-setup_breq_not_0a:
- cjne r2, #0x0b, setup_breq_not_0b
- ;; 0b: Set_Interface. set altsetting for interface[wIndexL]. ignored
- ljmp setup_done_ack
-setup_breq_not_0b:
- ljmp setup_stall
-
-
-setup_done_ack:
- ;; now clear HSNAK
- mov dptr, EP0CS
- mov a, #0x02
- movx @dptr, a
- sjmp setup_done
-setup_stall:
- ;; unhandled. STALL
- ;EP0CS |= bmEPSTALL
- mov dptr, EP0CS
- movx a, @dptr
- orl a, EP0STALLbit
- movx @dptr, a
- sjmp setup_done
-
-setup_done:
- pop acc
- pop dph1
- pop dpl1
- pop dph
- pop dpl
- pop dps
- reti
-
-;;; ==============================================================
-
-set_baud: ; baud index in r3
- ;; verify a < 10
- mov a, r3
- jb ACC.7, set_baud__badbaud
- clr c
- subb a, #10
- jnc set_baud__badbaud
- mov a, r3
- rl a ; a = index*2
- add a, #LOW(baud_table)
- mov dpl, a
- mov a, #HIGH(baud_table)
- addc a, #0
- mov dph, a
- ;; TODO: shut down xmit/receive
- ;; TODO: wait for current xmit char to leave
- ;; TODO: shut down timer to avoid partial-char glitch
- movx a,@dptr ; BAUD_HIGH
- mov RCAP2H, a
- mov TH2, a
- inc dptr
- movx a,@dptr ; BAUD_LOW
- mov RCAP2L, a
- mov TL2, a
- ;; TODO: restart xmit/receive
- ;; TODO: reenable interrupts, resume tx if pending
- clr c ; c=0: success
- ret
-set_baud__badbaud:
- setb c ; c=1: failure
- ret
-
-;;; ==================================================
-control_pins:
- cjne r1, #0x41, control_pins_in
-control_pins_out:
- ;TODO BKPT is DTR
- mov a, r3 ; wValue[0] holds new bits: b7 is new RTS
- xrl a, #0xff ; 1 means active, 0V, +12V ?
- anl a, #0x80
- mov r3, a
- mov dptr, OUTC
- movx a, @dptr ; only change bit 7
- anl a, #0x7F ; ~0x84
- orl a, r3
- movx @dptr, a ; other pins are inputs, bits ignored
- ljmp setup_done_ack
-control_pins_in:
- mov dptr, PINSC
- movx a, @dptr
- xrl a, #0xff
- ljmp setup_return_one_byte
-
-;;; ========================================
-
-ISR_Ep2in:
- push dps
- push dpl
- push dph
- push dpl1
- push dph1
- push acc
- mov a,EXIF
- clr acc.4
- mov EXIF,a ; clear INT2 first
- mov dptr, IN07IRQ ; clear USB int
- mov a,#04h
- movx @dptr,a
-
- mov a, #0x20 ; Turn off the green LED
- mov dptr,OEA
- movx @dptr, a
-
-
- ;; do stuff
- lcall start_in
-
- mov a, #0x20 ; Turn off the green LED
- mov dptr,OEA
- movx @dptr, a
-
-
-
- pop acc
- pop dph1
- pop dpl1
- pop dph
- pop dpl
- pop dps
- reti
-
-ISR_Ep2out:
- push dps
- push dpl
- push dph
- push dpl1
- push dph1
- push acc
-
- mov a, #0x10 ; Turn the green LED
- mov dptr,OEA
- movx @dptr, a
-
-
-
- mov a,EXIF
- clr acc.4
- mov EXIF,a ; clear INT2 first
- mov dptr, OUT07IRQ ; clear USB int
- mov a,#04h
- movx @dptr,a
-
- ;; do stuff
-
- ;; copy data into buffer. for now, assume we will have enough space
- mov dptr, OUT2BC ; get byte count
- movx a,@dptr
- mov r1, a
- clr a
- mov dps, a
- mov dptr, OUT2BUF ; load DPTR0 with source
- mov dph1, #HIGH(tx_ring) ; load DPTR1 with target
- mov dpl1, tx_ring_in
-OUT_loop:
- movx a,@dptr ; read
- inc dps ; switch to DPTR1: target
- inc dpl1 ; target = tx_ring_in+1
- movx @dptr,a ; store
- mov a,dpl1
- cjne a, tx_ring_out, OUT_no_overflow
- sjmp OUT_overflow
-OUT_no_overflow:
- inc tx_ring_in ; tx_ring_in++
- inc dps ; switch to DPTR0: source
- inc dptr
- djnz r1, OUT_loop
- sjmp OUT_done
-OUT_overflow:
- ;; signal overflow
- ;; fall through
-OUT_done:
- ;; ack
- mov dptr,OUT2BC
- movx @dptr,a
-
- ;; start tx
- acall maybe_start_tx
- ;acall dump_stat
-
- mov a, #0x20 ; Turn off the green LED
- mov dptr,OEA
- movx @dptr, a
-
- pop acc
- pop dph1
- pop dpl1
- pop dph
- pop dpl
- pop dps
- reti
-
-dump_stat:
- ;; fill in EP4in with a debugging message:
- ;; tx_ring_in, tx_ring_out, rx_ring_in, rx_ring_out
- ;; tx_active
- ;; tx_ring[0..15]
- ;; 0xfc
- ;; rx_ring[0..15]
- clr a
- mov dps, a
-
- mov dptr, IN4CS
- movx a, @dptr
- jb acc.1, dump_stat__done; busy: cannot dump, old one still pending
- mov dptr, IN4BUF
-
- mov a, tx_ring_in
- movx @dptr, a
- inc dptr
- mov a, tx_ring_out
- movx @dptr, a
- inc dptr
-
- mov a, rx_ring_in
- movx @dptr, a
- inc dptr
- mov a, rx_ring_out
- movx @dptr, a
- inc dptr
-
- clr a
- jnb TX_RUNNING, dump_stat__no_tx_running
- inc a
-dump_stat__no_tx_running:
- movx @dptr, a
- inc dptr
- ;; tx_ring[0..15]
- inc dps
- mov dptr, #tx_ring ; DPTR1: source
- mov r1, #16
-dump_stat__tx_ring_loop:
- movx a, @dptr
- inc dptr
- inc dps
- movx @dptr, a
- inc dptr
- inc dps
- djnz r1, dump_stat__tx_ring_loop
- inc dps
-
- mov a, #0xfc
- movx @dptr, a
- inc dptr
-
- ;; rx_ring[0..15]
- inc dps
- mov dptr, #rx_ring ; DPTR1: source
- mov r1, #16
-dump_stat__rx_ring_loop:
- movx a, @dptr
- inc dptr
- inc dps
- movx @dptr, a
- inc dptr
- inc dps
- djnz r1, dump_stat__rx_ring_loop
-
- ;; now send it
- clr a
- mov dps, a
- mov dptr, IN4BC
- mov a, #38
- movx @dptr, a
-dump_stat__done:
- ret
-
-;;; ============================================================
-
-maybe_start_tx:
- ;; make sure the tx process is running.
- jb TX_RUNNING, start_tx_done
-start_tx:
- ;; is there work to be done?
- mov a, tx_ring_in
- cjne a,tx_ring_out, start_tx__work
- ret ; no work
-start_tx__work:
- ;; tx was not running. send the first character, setup the TI int
- inc tx_ring_out ; [++tx_ring_out]
- mov dph, #HIGH(tx_ring)
- mov dpl, tx_ring_out
- movx a, @dptr
- mov sbuf, a
- setb TX_RUNNING
-start_tx_done:
- ;; can we unthrottle the host tx process?
- ;; step 1: do we care?
- mov a, #0
- cjne a, tx_unthrottle_threshold, start_tx__maybe_unthrottle_tx
- ;; nope
-start_tx_really_done:
- ret
-start_tx__maybe_unthrottle_tx:
- ;; step 2: is there now room?
- mov a, tx_ring_out
- setb c
- subb a, tx_ring_in
- ;; a is now write_room. If thresh >= a, we can unthrottle
- clr c
- subb a, tx_unthrottle_threshold
- jc start_tx_really_done ; nope
- ;; yes, we can unthrottle. remove the threshold and mark a request
- mov tx_unthrottle_threshold, #0
- setb DO_TX_UNTHROTTLE
- ;; prod rx, which will actually send the message when in2 becomes free
- ljmp start_in
-
-
-serial_int:
- push dps
- push dpl
- push dph
- push dpl1
- push dph1
- push acc
- jnb TI, serial_int__not_tx
- ;; tx finished. send another character if we have one
- clr TI ; clear int
- clr TX_RUNNING
- lcall start_tx
-serial_int__not_tx:
- jnb RI, serial_int__not_rx
- lcall get_rx_char
- clr RI ; clear int
-serial_int__not_rx:
- ;; return
- pop acc
- pop dph1
- pop dpl1
- pop dph
- pop dpl
- pop dps
- reti
-
-get_rx_char:
- mov dph, #HIGH(rx_ring)
- mov dpl, rx_ring_in
- inc dpl ; target = rx_ring_in+1
- mov a, sbuf
- movx @dptr, a
- ;; check for overflow before incrementing rx_ring_in
- mov a, dpl
- cjne a, rx_ring_out, get_rx_char__no_overflow
- ;; signal overflow
- ret
-get_rx_char__no_overflow:
- inc rx_ring_in
- ;; kick off USB INpipe
- acall start_in
- ret
-
-start_in:
- ;; check if the inpipe is already running.
- mov a,#0x10
- mov dptr, OEA
- movx @dptr,a
-
- mov dptr, IN2CS
- movx a, @dptr
- jb acc.1, start_in__done; int will handle it
- jb DO_TX_UNTHROTTLE, start_in__do_tx_unthrottle
- ;; see if there is any work to do. a serial interrupt might occur
- ;; during this sequence?
- mov a, rx_ring_in
- cjne a, rx_ring_out, start_in__have_work
- ret ; nope
-start_in__have_work:
- ;; now copy as much data as possible into the pipe. 63 bytes max.
- clr a
- mov dps, a
- mov dph, #HIGH(rx_ring) ; load DPTR0 with source
- inc dps
- mov dptr, IN2BUF ; load DPTR1 with target
- movx @dptr, a ; in[0] signals that rest of IN is rx data
- inc dptr
- inc dps
- ;; loop until we run out of data, or we have copied 64 bytes
- mov r1, #1 ; INbuf size counter
-start_in__loop:
- mov a, rx_ring_in
- cjne a, rx_ring_out, start_inlocal_irq_enablell_copying
- sjmp start_in__kick
-start_inlocal_irq_enablell_copying:
- inc rx_ring_out
- mov dpl, rx_ring_out
- movx a, @dptr
- inc dps
- movx @dptr, a ; write into IN buffer
- inc dptr
- inc dps
- inc r1
- cjne r1, #64, start_in__loop; loop
-start_in__kick:
- ;; either we ran out of data, or we copied 64 bytes. r1 has byte count
- ;; kick off IN
- mov a, #0x10 ; Turn the green LED
- mov dptr,OEA
- movx @dptr, a
- mov dptr, IN2BC
- mov a, r1
- jz start_in__done
- movx @dptr, a
- ;; done
-start_in__done:
- ;acall dump_stat
- ret
-start_in__do_tx_unthrottle:
- ;; special sequence: send a tx unthrottle message
- clr DO_TX_UNTHROTTLE
- clr a
- mov dps, a
- mov dptr, IN2BUF
- mov a, #1
- movx @dptr, a
- inc dptr
- mov a, #2
- movx @dptr, a
- mov dptr, IN2BC
- movx @dptr, a
- ret
-
-putchar:
- clr TI
- mov SBUF, a
-putchar_wait:
- jnb TI, putchar_wait
- clr TI
- ret
-
-
-baud_table: ; baud_high, then baud_low
- ;; baud[0]: 110
- .byte BAUD_HIGH(110)
- .byte BAUD_LOW(110)
- ;; baud[1]: 300
- .byte BAUD_HIGH(300)
- .byte BAUD_LOW(300)
- ;; baud[2]: 1200
- .byte BAUD_HIGH(1200)
- .byte BAUD_LOW(1200)
- ;; baud[3]: 2400
- .byte BAUD_HIGH(2400)
- .byte BAUD_LOW(2400)
- ;; baud[4]: 4800
- .byte BAUD_HIGH(4800)
- .byte BAUD_LOW(4800)
- ;; baud[5]: 9600
- .byte BAUD_HIGH(9600)
- .byte BAUD_LOW(9600)
- ;; baud[6]: 19200
- .byte BAUD_HIGH(19200)
- .byte BAUD_LOW(19200)
- ;; baud[7]: 38400
- .byte BAUD_HIGH(38400)
- .byte BAUD_LOW(38400)
- ;; baud[8]: 57600
- .byte BAUD_HIGH(57600)
- .byte BAUD_LOW(57600)
- ;; baud[9]: 115200
- .byte BAUD_HIGH(115200)
- .byte BAUD_LOW(115200)
-
-desc_device:
- .byte 0x12, 0x01, 0x00, 0x01, 0xff, 0xff, 0xff, 0x40
- .byte 0xcd, 0x06, 0x04, 0x01, 0x89, 0xab, 1, 2, 3, 0x01
-;;; The "real" device id, which must match the host driver, is that
-;;; "0xcd 0x06 0x04 0x01" sequence, which is 0x06cd, 0x0104
-
-desc_config1:
- .byte 0x09, 0x02, 0x20, 0x00, 0x01, 0x01, 0x00, 0x80, 0x32
- .byte 0x09, 0x04, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0x00
- .byte 0x07, 0x05, 0x82, 0x03, 0x40, 0x00, 0x01
- .byte 0x07, 0x05, 0x02, 0x02, 0x40, 0x00, 0x00
-
-desc_strings:
- .word string_langids, string_mfg, string_product, string_serial
-desc_strings_end:
-
-string_langids: .byte string_langids_end-string_langids
- .byte 3
- .word 0
-string_langids_end:
-
- ;; sigh. These strings are Unicode, meaning UTF16? 2 bytes each. Now
- ;; *that* is a pain in the ass to encode. And they are little-endian
- ;; too. Use this perl snippet to get the bytecodes:
- /* while (<>) {
- @c = split(//);
- foreach $c (@c) {
- printf("0x%02x, 0x00, ", ord($c));
- }
- }
- */
-
-string_mfg: .byte string_mfg_end-string_mfg
- .byte 3
-; .byte "ACME usb widgets"
- .byte 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x75, 0x00, 0x73, 0x00, 0x62, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00, 0x73, 0x00
-string_mfg_end:
-
-string_product: .byte string_product_end-string_product
- .byte 3
-; .byte "ACME USB serial widget"
- .byte 0x41, 0x00, 0x43, 0x00, 0x4d, 0x00, 0x45, 0x00, 0x20, 0x00, 0x55, 0x00, 0x53, 0x00, 0x42, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x77, 0x00, 0x69, 0x00, 0x64, 0x00, 0x67, 0x00, 0x65, 0x00, 0x74, 0x00
-string_product_end:
-
-string_serial: .byte string_serial_end-string_serial
- .byte 3
-; .byte "47"
- .byte 0x34, 0x00, 0x37, 0x00
-string_serial_end:
-
-;;; ring buffer memory
- ;; tx_ring_in+1 is where the next input byte will go
- ;; [tx_ring_out] has been sent
- ;; if tx_ring_in == tx_ring_out, theres no work to do
- ;; there are (tx_ring_in - tx_ring_out) chars to be written
- ;; dont let _in lap _out
- ;; cannot inc if tx_ring_in+1 == tx_ring_out
- ;; write [tx_ring_in+1] then tx_ring_in++
- ;; if (tx_ring_in+1 == tx_ring_out), overflow
- ;; else tx_ring_in++
- ;; read/send [tx_ring_out+1], then tx_ring_out++
-
- ;; rx_ring_in works the same way
-
- .org 0x1000
-tx_ring:
- .skip 0x100 ; 256 bytes
-rx_ring:
- .skip 0x100 ; 256 bytes
-
-
- .END
-
diff --git a/firmware/korg/k1212.dsp.ihex b/firmware/korg/k1212.dsp.ihex
deleted file mode 100644
index b151997b380c..000000000000
--- a/firmware/korg/k1212.dsp.ihex
+++ /dev/null
@@ -1,987 +0,0 @@
-:1000000001FF18FFF5FFCFFF00FF00FFFFFF00FF1C
-:1000100000FF00FFFFFF00FF00FF00FFFFFF00FFEA
-:1000200026FF18FFFFFF0FFF00FF00FFFFFF00FF8D
-:1000300000FF00FFFFFF00FF00FF00FFFFFF00FFCA
-:1000400000FF0AFFFFFF1FFF00FF00FFFFFF00FF91
-:1000500000FF00FFFFFF00FF00FF00FFFFFF00FFAA
-:1000600000FF0AFFFFFF1FFF00FF00FFFFFF00FF71
-:1000700000FF00FFFFFF00FF00FF00FFFFFF00FF8A
-:1000800000FF0AFFFFFF1FFF00FF00FFFFFF00FF51
-:1000900000FF00FFFFFF00FF00FF00FFFFFF00FF6A
-:1000A00038FF18FFFFFFDFFF00FF00FFFFFF00FF2B
-:1000B00000FF00FFFFFF00FF00FF00FFFFFF00FF4A
-:1000C00000FF0AFFFFFF1FFF00FF00FFFFFF00FF11
-:1000D00000FF00FFFFFF00FF00FF00FFFFFF00FF2A
-:1000E00003FF3CFFFFFFFCFF67FF40FFFFFFC0FF78
-:1000F000FFFF93FFFFFFE0FF00FF0CFFFFFF0CFF80
-:100100000CFF0CFFFFFF00FF30FF0CFFFFFF00FFA5
-:100110000FFF40FFFFFFF4FF47FF80FFFFFF0AFFD5
-:1001200082FF23FFFFFF0FFF8DFF93FFFFFF7AFF8B
-:100130008DFF83FFFFFF70FF47FF90FFFFFF00FF72
-:1001400000FF48FFFFFF04FFA0FF23FFFFFF0FFF9B
-:1001500046FF90FFFFFF6AFF00FF0CFFFFFF20FF3D
-:1001600000FF04FFFFFF1CFF00FF04FFFFFF1CFF59
-:1001700000FF04FFFFFF1CFF00FF04FFFFFF1CFF49
-:1001800000FF04FFFFFF10FF00FF04FFFFFF10FF51
-:1001900000FF04FFFFFF10FF00FF04FFFFFF10FF41
-:1001A00000FF04FFFFFF10FF00FF04FFFFFF10FF31
-:1001B00000FF04FFFFFF10FF00FF04FFFFFF10FF21
-:1001C00000FF04FFFFFF10FF00FF04FFFFFF10FF11
-:1001D00000FF04FFFFFF10FF00FF04FFFFFF10FF01
-:1001E00072FF1CFFFFFF5FFF02FF40FFFFFF40FFAA
-:1001F00011FF90FFFFFF20FF00FF48FFFFFF00FF00
-:100200008BFF93FFFFFF20FF00FF40FFFFFF00FF7A
-:1002100086FF93FFFFFF70FF8BFF93FFFFFF30FF11
-:100220008DFF93FFFFFF40FF02FF91FFFFFF80FF65
-:1002300002FF91FFFFFF90FF8DFF93FFFFFFC0FFC5
-:1002400046FF90FFFFFF20FF8DFF93FFFFFFD0FFD2
-:1002500000FF48FFFFFF00FF8BFF93FFFFFF40FF02
-:10026000FFFF47FFFFFFF0FF8DFF93FFFFFFE0FF62
-:1002700000FF34FFFFFF17FF00FF38FFFFFF17FFEE
-:1002800080FF37FFFFFF02FF84FF3BFFFFFF02FFFE
-:1002900002FF34FFFFFF4AFF02FF38FFFFFF4AFF64
-:1002A00001FF34FFFFFF2BFF01FF38FFFFFF2BFF94
-:1002B00080FF43FFFFFF00FF82FF93FFFFFF50FF20
-:1002C00081FF43FFFFFF20FF82FF93FFFFFF60FFDF
-:1002D00084FF43FFFFFF00FF82FF93FFFFFF70FFDC
-:1002E00085FF43FFFFFF20FF83FF93FFFFFFC0FF5A
-:1002F00082FF37FFFFFF81FF00FF34FFFFFF89FF11
-:1003000088FF43FFFFFF00FF00FF68FFFFFF07FFBD
-:1003100082FF83FFFFFF60FF00FF68FFFFFF07FF13
-:100320008CFF43FFFFFF00FF00FF68FFFFFF07FF99
-:1003300083FF83FFFFFFC0FF00FF68FFFFFF07FF92
-:100340008AFF43FFFFFF00FF00FF68FFFFFF07FF7B
-:1003500082FF83FFFFFF50FF00FF68FFFFFF07FFE3
-:100360008EFF43FFFFFF00FF00FF68FFFFFF07FF57
-:1003700082FF83FFFFFF70FF00FF68FFFFFF07FFA3
-:1003800083FF37FFFFFF01FF00FF34FFFFFF89FFFF
-:1003900000FF34FFFFFF26FF30FF0CFFFFFF00FFD1
-:1003A00000FF40FFFFFF26FF20FF40FFFFFF04FF8D
-:1003B00080FF41FFFFFF02FFE0FF20FFFFFF0FFF75
-:1003C00000FF68FFFFFFB6FF63FF22FFFFFF0FFF85
-:1003D00062FF6AFFFFFFA6FF62FF6AFFFFFFA6FF43
-:1003E00000FF68FFFFFFA6FF00FF09FFFFFF07FFF9
-:1003F00040FF41FFFFFF02FFE0FF20FFFFFF0FFF75
-:1004000000FF68FFFFFFB6FF63FF22FFFFFF0FFF44
-:1004100062FF6AFFFFFFA6FF62FF6AFFFFFFA6FF02
-:1004200000FF68FFFFFFA6FF05FF41FFFFFF02FF80
-:10043000E0FF20FFFFFF0FFF8BFF93FFFFFFBBFFDE
-:1004400002FF41FFFFFF82FFE0FF20FFFFFF0FFFE2
-:100450008BFF93FFFFFFCBFF05FF41FFFFFFE2FF95
-:10046000E0FF20FFFFFF0FFF8BFF93FFFFFFDBFF8E
-:1004700020FF0CFFFFFF00FF30FF0CFFFFFF00FF1E
-:1004800000FF40FFFFFF26FF00FF41FFFFFF02FFCD
-:10049000E0FF20FFFFFF0FFF83FF93FFFFFF82FFBF
-:1004A00083FF93FFFFFF9BFF03FF41FFFFFF02FF5F
-:1004B000E0FF20FFFFFF0FFF83FF93FFFFFFA2FF7F
-:1004C00083FF93FFFFFFBBFF20FF0CFFFFFF00FF39
-:1004D00000FF40FFFFFF00FF44FF90FFFFFF60FFB2
-:1004E00000FF00FFFFFF00FF00FF00FFFFFF00FF16
-:1004F00000FF00FFFFFF00FF00FF00FFFFFF00FF06
-:1005000000FF00FFFFFF00FF00FF00FFFFFF00FFF5
-:1005100000FF00FFFFFF00FF00FF00FFFFFF00FFE5
-:1005200021FF40FFFFFF60FF40FF90FFFFFF20FF24
-:1005300002FF35FFFFFF00FF00FF34FFFFFF08FF52
-:1005400000FF3CFFFFFF85FF0AFF14FFFFFFAEFF28
-:1005500000FFA0FFFFFF03FF00FF35FFFFFF00FFCD
-:1005600000FF34FFFFFF08FF02FF3CFFFFFF05FF16
-:100570000AFF14FFFFFFFEFF00FFA0FFFFFF03FFC6
-:1005800003FF35FFFFFF00FF00FF34FFFFFF08FF01
-:1005900002FF3CFFFFFF05FF0BFF14FFFFFF4EFFB5
-:1005A00000FFA0FFFFFF03FF00FF35FFFFFF01FF7C
-:1005B00078FF1CFFFFFF5FFF03FF35FFFFFF01FF19
-:1005C00078FF1CFFFFFF5FFF5BFF40FFFFFFF0FFB7
-:1005D000FFFF93FFFFFF30FF80FF42FFFFFF70FF31
-:1005E000FFFF93FFFFFF60FFDFFF40FFFFFFF0FF14
-:1005F000FEFF93FFFFFFF0FF80FF42FFFFFF70FF52
-:10060000FFFF93FFFFFF20FFC1FF41FFFFFF80FFC0
-:10061000FFFF93FFFFFFF0FF03FF3CFFFFFFFCFF27
-:1006200000FF3CFFFFFF04FF02FF3CFFFFFF23FF33
-:1006300000FF48FFFFFF00FF8BFF93FFFFFF20FF3E
-:1006400059FF18FFFFFFDFFF00FF48FFFFFF00FF1C
-:100650008BFF93FFFFFF20FF18FF23FFFFFF0FFF1C
-:100660000CFF14FFFFFFE4FF8BFF83FFFFFF24FF5E
-:1006700000FF22FFFFFF0FFF0DFF18FFFFFF0FFF1F
-:100680008BFF83FFFFFF20FF00FF40FFFFFF14FFF2
-:10069000E0FF22FFFFFF0FFF10FF18FFFFFFD0FF5B
-:1006A0008BFF83FFFFFF20FF00FF40FFFFFF24FFC2
-:1006B000E0FF22FFFFFF0FFF10FF18FFFFFF30FFDB
-:1006C0008BFF83FFFFFF20FF00FF40FFFFFF44FF82
-:1006D000E0FF22FFFFFF0FFF22FF18FFFFFF90FF49
-:1006E0008BFF83FFFFFF20FF00FF40FFFFFF84FF22
-:1006F000E0FF22FFFFFF0FFF22FF18FFFFFF90FF29
-:100700000CFF18FFFFFF6FFF00FF40FFFFFF00FF20
-:1007100086FF93FFFFFF70FF76FF1CFFFFFF9FFF29
-:1007200086FF83FFFFFF50FF86FF83FFFFFF64FF0D
-:1007300060FF22FFFFFF0FFF74FF18FFFFFF81FF25
-:1007400000FF35FFFFFF00FF60FF1CFFFFFF7FFF83
-:1007500061FF1CFFFFFFAFFF77FF1CFFFFFFAFFF35
-:1007600063FF1CFFFFFF4FFF05FF35FFFFFF00FF8B
-:1007700092FF3BFFFFFF00FF00FF34FFFFFF08FF7A
-:1007800000FF38FFFFFF08FF00FF3CFFFFFF65FF92
-:100790000FFF14FFFFFF6EFF00FF60FFFFFF03FF6F
-:1007A00000FF60FFFFFF13FF00FF78FFFFFF13FF55
-:1007B00000FF78FFFFFF03FF05FF35FFFFFFE0FFAE
-:1007C0007FFF38FFFFFF00FF00FF34FFFFFF08FF40
-:1007D00000FF38FFFFFF08FF00FF3CFFFFFF65FF42
-:1007E00010FF14FFFFFF0EFF00FF60FFFFFF03FF7E
-:1007F00000FF60FFFFFF13FF00FF58FFFFFF13FF25
-:1008000000FF58FFFFFF03FF79FF1CFFFFFFFFFF03
-:1008100000FF0AFFFFFF0FFF0EFF1CFFFFFF1FFF80
-:100820008DFF83FFFFFFE0FF78FF22FFFFFF0FFF39
-:1008300015FF1CFFFFFF85FF75FF1CFFFFFF8FFFEC
-:1008400000FF40FFFFFF40FF8BFF93FFFFFF80FF94
-:1008500002FF40FFFFFF60FF11FF90FFFFFF20FF3F
-:1008600016FF18FFFFFF1FFF0EFF1CFFFFFF1FFFFC
-:1008700075FF1CFFFFFF8FFF80FF35FFFFFF00FFAD
-:1008800000FF34FFFFFF08FF00FF40FFFFFF00FFF6
-:1008900040FF3CFFFFFF05FF11FF14FFFFFF4EFF6E
-:1008A00000FF68FFFFFF03FF87FF83FFFFFFF0FFED
-:1008B00086FF93FFFFFF80FF90FF37FFFFFF00FFE2
-:1008C00002FF34FFFFFF08FF00FF60FFFFFF03FF91
-:1008D00089FF93FFFFFF20FF00FF60FFFFFF03FF83
-:1008E00089FF93FFFFFF30FF00FF60FFFFFF03FF63
-:1008F00089FF93FFFFFF40FF00FF60FFFFFF03FF43
-:1009000089FF93FFFFFF50FF86FF97FFFFFF90FFD8
-:1009100003FF35FFFFFF00FF60FF1CFFFFFF7FFFAE
-:1009200063FF1CFFFFFF7FFF00FF40FFFFFF00FF93
-:100930008DFF93FFFFFF60FF82FF93FFFFFF40FFEC
-:1009400086FF93FFFFFFA0FF83FF37FFFFFF80FFBE
-:1009500075FF1CFFFFFF1FFF83FF43FFFFFF00FF2B
-:1009600087FF93FFFFFFE0FF6AFF1CFFFFFF0FFF02
-:1009700040FF41FFFFFF00FF8BFF93FFFFFF90FF52
-:1009800080FF41FFFFFF00FF8BFF93FFFFFFA0FFF2
-:100990008BFF87FFFFFF90FF7EFF38FFFFFF00FF09
-:1009A00040FF34FFFFFF08FF00FF38FFFFFF08FF95
-:1009B00000FF3CFFFFFF55FF13FF14FFFFFFBEFFCB
-:1009C00000FF60FFFFFF03FF00FF60FFFFFF13FF5B
-:1009D00000FF58FFFFFF13FF00FF58FFFFFF03FF5B
-:1009E00000FF60FFFFFF03FF00FF60FFFFFF13FF3B
-:1009F00000FF58FFFFFF13FF00FF58FFFFFF03FF3B
-:100A000000FF60FFFFFF03FF00FF60FFFFFF13FF1A
-:100A100000FF58FFFFFF13FF00FF58FFFFFF03FF1A
-:100A200000FF60FFFFFF03FF00FF60FFFFFF03FF0A
-:100A30008BFF97FFFFFF90FF05FF41FFFFFF00FFC8
-:100A400092FF43FFFFFF01FF86FF93FFFFFFF0FFD1
-:100A500086FF93FFFFFFE1FF8DFF83FFFFFFE0FFB6
-:100A600078FF22FFFFFF0FFF15FF1CFFFFFF85FF31
-:100A700075FF1CFFFFFF8FFF8DFF83FFFFFF40FF10
-:100A800078FF22FFFFFF0FFF53FF18FFFFFFB4FFA8
-:100A900072FF1CFFFFFF0FFF00FF40FFFFFF00FF83
-:100AA0008BFF93FFFFFF30FF02FF40FFFFFF60FF60
-:100AB00011FF90FFFFFF20FF16FF18FFFFFF4FFF02
-:100AC00038FF42FFFFFF50FF48FF90FFFFFFA0FFEE
-:100AD00000FF00FFFFFF00FF00FF00FFFFFF00FF20
-:100AE00000FF00FFFFFF00FF00FF00FFFFFF00FF10
-:100AF00030FF40FFFFFF00FF47FF90FFFFFF50FF69
-:100B000000FF0AFFFFFF0FFF1EFF1CFFFFFF0FFF8D
-:100B100020FF1CFFFFFFCFFF16FF18FFFFFF1FFF87
-:100B200000FF40FFFFFF00FF46FF90FFFFFF70FF49
-:100B300018FF1CFFFFFFEFFF6AFF1CFFFFFFBFFF57
-:100B40005CFF1CFFFFFF7FFF18FF1CFFFFFFEFFF95
-:100B500067FF1CFFFFFF3FFF5CFF1CFFFFFF7FFFE6
-:100B600008FF40FFFFFF00FF46FF90FFFFFF70FF01
-:100B700018FF1CFFFFFFEFFF69FF1CFFFFFF0FFFC8
-:100B80005DFF1CFFFFFF2FFF18FF1CFFFFFFEFFFA4
-:100B900079FF1CFFFFFF1FFF5CFF1CFFFFFF7FFFB4
-:100BA00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFF35
-:100BB00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFF25
-:100BC00018FF1CFFFFFFEFFF5DFF1CFFFFFF2FFF64
-:100BD00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFF05
-:100BE00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFF5
-:100BF00018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFE5
-:100C000018FF1CFFFFFFEFFF5DFF1CFFFFFF2FFF23
-:100C100018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFC4
-:100C200018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFB4
-:100C300018FF1CFFFFFFEFFF5CFF1CFFFFFF7FFFA4
-:100C400018FF1CFFFFFFEFFF5DFF1CFFFFFF2FFFE3
-:100C500018FF1CFFFFFFEFFF66FF1CFFFFFF1FFFDA
-:100C60005CFF1CFFFFFF7FFF16FF18FFFFFF4FFF1A
-:100C70008BFF87FFFFFF61FF00FF34FFFFFF89FF4E
-:100C800000FF34FFFFFF26FF00FF60FFFFFF06FFAE
-:100C900083FF93FFFFFFD0FF00FF60FFFFFF06FF12
-:100CA00083FF93FFFFFFE0FF38FF22FFFFFF0FFFEF
-:100CB00019FF14FFFFFF85FF8BFF83FFFFFF50FF2E
-:100CC00078FF22FFFFFF0FFF00FF60FFFFFF07FF1E
-:100CD00004FF0DFFFFFF30FF00FF60FFFFFF07FF76
-:100CE00083FF93FFFFFFF0FF00FF60FFFFFF07FFA1
-:100CF00008FF0DFFFFFF30FF00FF60FFFFFF07FF52
-:100D000086FF93FFFFFF40FF00FF40FFFFFF01FF53
-:100D10008BFF93FFFFFF51FF00FF34FFFFFF46FFF4
-:100D200000FF09FFFFFF06FF8BFF97FFFFFF61FF3B
-:100D300083FF8BFFFFFFD0FF83FF8BFFFFFFE1FFF0
-:100D400087FF37FFFFFF01FF6EFF1CFFFFFFBFFFA5
-:100D500087FF37FFFFFF00FF92FF37FFFFFF01FF15
-:100D60007FFF38FFFFFF00FF7EFF38FFFFFF01FF1F
-:100D700023FF1CFFFFFFFFFF7EFF38FFFFFF00FF89
-:100D800083FF87FFFFFFF1FF86FF8BFFFFFF41FF20
-:100D90006CFF1CFFFFFF2FFF87FF37FFFFFF00FFE8
-:100DA0008BFF8BFFFFFFA0FF00FF34FFFFFF08FF5B
-:100DB00040FF38FFFFFF08FF00FF3CFFFFFF55FF2C
-:100DC0001BFF14FFFFFFCEFF00FF60FFFFFF03FFCD
-:100DD00000FF60FFFFFF13FF00FF78FFFFFF13FF1F
-:100DE00000FF78FFFFFF03FF00FF60FFFFFF03FF2F
-:100DF00000FF60FFFFFF13FF00FF78FFFFFF13FFFF
-:100E000000FF78FFFFFF03FF00FF60FFFFFF03FF0E
-:100E100000FF60FFFFFF13FF00FF78FFFFFF13FFDE
-:100E200000FF78FFFFFF03FF8BFF83FFFFFFE1FF62
-:100E30008BFF83FFFFFFF0FF00FF78FFFFFF13FF33
-:100E400000FF78FFFFFF03FF8BFF9BFFFFFFA0FF6B
-:100E50008BFF87FFFFFF90FF7EFF38FFFFFF00FF44
-:100E600040FF34FFFFFF08FF00FF38FFFFFF08FFD0
-:100E700000FF3CFFFFFF55FF1DFF14FFFFFF3EFF7C
-:100E800000FF60FFFFFF03FF00FF60FFFFFF13FF96
-:100E900000FF58FFFFFF13FF00FF58FFFFFF03FF96
-:100EA00000FF60FFFFFF03FF00FF60FFFFFF13FF76
-:100EB00000FF58FFFFFF13FF00FF58FFFFFF03FF76
-:100EC00000FF60FFFFFF03FF00FF60FFFFFF13FF56
-:100ED00000FF58FFFFFF13FF00FF58FFFFFF03FF56
-:100EE00000FF60FFFFFF03FF00FF60FFFFFF03FF46
-:100EF0008BFF97FFFFFF90FF00FF0AFFFFFF0FFF31
-:100F00008BFF87FFFFFF61FF00FF34FFFFFF89FFBB
-:100F100000FF34FFFFFF26FF00FF60FFFFFF06FF1B
-:100F200083FF93FFFFFFD0FF00FF60FFFFFF06FF7F
-:100F300083FF93FFFFFFE0FF8BFF83FFFFFF51FF66
-:100F400079FF22FFFFFF0FFF74FF18FFFFFFB4FFC1
-:100F500038FF22FFFFFF0FFF1EFF14FFFFFFD5FF2B
-:100F60008BFF83FFFFFF50FF78FF22FFFFFF0FFF84
-:100F700000FF60FFFFFF07FF04FF0DFFFFFF30FFD3
-:100F800000FF60FFFFFF07FF83FF93FFFFFFF0FFFE
-:100F900000FF60FFFFFF07FF08FF0DFFFFFF30FFAF
-:100FA00000FF60FFFFFF07FF86FF93FFFFFF40FF8B
-:100FB00000FF40FFFFFF01FF8BFF93FFFFFF51FF8B
-:100FC00000FF34FFFFFF46FF00FF09FFFFFF06FFA2
-:100FD0008BFF97FFFFFF61FF83FF8BFFFFFFD0FFBA
-:100FE00083FF8BFFFFFFE1FF87FF37FFFFFF01FF5D
-:100FF0006EFF1CFFFFFFBFFF87FF37FFFFFF00FFF4
-:1010000092FF37FFFFFF01FF7FFF38FFFFFF00FF69
-:1010100023FF1CFFFFFFFFFF7EFF38FFFFFF00FFE6
-:1010200083FF87FFFFFFF1FF86FF8BFFFFFF41FF7D
-:101030006CFF1CFFFFFF2FFF00FF0AFFFFFF0FFFEA
-:101040008DFF8FFFFFFFC5FF20FF14FFFFFFAEFFE7
-:1010500000FF00FFFFFF00FF00FF0AFFFFFF0FFF81
-:101060008BFF83FFFFFF84FF00FF23FFFFFF0FFFC6
-:101070008BFF93FFFFFF8AFF64FF1CFFFFFFE0FF72
-:101080007EFF38FFFFFF00FF00FF38FFFFFF08FF74
-:1010900000FF3CFFFFFFE5FF21FF14FFFFFF5EFFA6
-:1010A00000FF40FFFFFF00FF00FF58FFFFFF03FFAF
-:1010B00000FF0AFFFFFF0FFF08FF40FFFFFF10FFC9
-:1010C00047FF90FFFFFF20FF00FF04FFFFFF1CFF13
-:1010D00000FF04FFFFFF1CFF00FF04FFFFFF1CFFDA
-:1010E00000FF04FFFFFF1CFF00FF04FFFFFF10FFD6
-:1010F00000FF04FFFFFF10FF00FF04FFFFFF10FFD2
-:1011000000FF04FFFFFF10FF00FF04FFFFFF10FFC1
-:1011100000FF04FFFFFF10FF00FF04FFFFFF10FFB1
-:1011200000FF04FFFFFF10FF00FF04FFFFFF10FFA1
-:1011300000FF04FFFFFF10FF00FF04FFFFFF10FF91
-:1011400000FF04FFFFFF10FF02FF40FFFFFF40FF13
-:1011500011FF90FFFFFF20FF78FF42FFFFFF50FFCE
-:1011600048FF90FFFFFFA0FF00FF00FFFFFF00FF11
-:1011700000FF00FFFFFF00FF00FF00FFFFFF00FF79
-:1011800000FF00FFFFFF00FF00FF00FFFFFF00FF69
-:10119000B0FF40FFFFFF00FF47FF90FFFFFF50FF42
-:1011A00000FF40FFFFFF00FF8DFF93FFFFFF40FFA9
-:1011B0008DFF93FFFFFF50FF00FF40FFFFFF01FF88
-:1011C0008BFF93FFFFFF51FF00FF40FFFFFF00FF7A
-:1011D00046FF90FFFFFF70FF8DFF83FFFFFFD0FFF3
-:1011E00078FF22FFFFFF0FFF0CFF18FFFFFF90FFAC
-:1011F0000CFF18FFFFFF6FFF20FF0CFFFFFF00FF3A
-:1012000000FF34FFFFFF09FF00FF34FFFFFF08FF6F
-:1012100000FF38FFFFFF08FF00FF38FFFFFF09FF57
-:1012200000FF38FFFFFF06FF00FF34FFFFFF26FF30
-:1012300098FFCCFFFFFF37FF00FF3CFFFFFFA5FF3C
-:1012400024FF14FFFFFFFEFF00FF60FFFFFF73FF9F
-:1012500008FF0DFFFFFF14FF98FF20FFFFFF0FFFA8
-:1012600000FF50FFFFFFC6FF69FFCCFFFFFF37FF06
-:1012700000FF05FFFFFF00FF00FF58FFFFFFC6FF55
-:1012800098FF20FFFFFF0FFF00FF60FFFFFF72FFCF
-:1012900008FF0DFFFFFF14FF00FF50FFFFFFC6FF19
-:1012A00069FFCCFFFFFF37FF00FF05FFFFFF00FFD7
-:1012B00000FF58FFFFFFC6FF98FF20FFFFFF0FFF53
-:1012C00000FF60FFFFFF73FF08FF0DFFFFFF14FF2C
-:1012D00000FF50FFFFFFC6FF69FF20FFFFFF0FFF6A
-:1012E00000FF05FFFFFF00FF00FF58FFFFFFC6FFE5
-:1012F00030FF0CFFFFFF00FF00FF0AFFFFFF0FFFA3
-:1013000000FF0CFFFFFF30FF47FF80FFFFFF58FF8C
-:1013100010FF0FFFFFFF01FF66FF23FFFFFF0FFF1F
-:1013200026FF18FFFFFF94FF00FF48FFFFFF00FFAD
-:101330008BFF93FFFFFF40FF80FF40FFFFFF00FF99
-:1013400049FF90FFFFFF40FF16FF0FFFFFFF02FF67
-:1013500066FF23FFFFFF0FFF38FF18FFFFFFB4FFFB
-:101360000FFF40FFFFFFF4FF47FF80FFFFFF0AFF73
-:1013700082FF23FFFFFF0FFF8DFF93FFFFFF7AFF29
-:101380007AFF26FFFFFF0FFF10FF27FFFFFF0FFF72
-:1013900038FF18FFFFFFB4FF27FF18FFFFFFD2FF42
-:1013A00000FF48FFFFFF00FF8BFF93FFFFFF30FFB1
-:1013B0008DFF83FFFFFF70FF47FF90FFFFFF00FFE0
-:1013C00000FF48FFFFFF04FFA0FF23FFFFFF0FFF09
-:1013D00046FF90FFFFFF6AFF00FF0CFFFFFF20FFAB
-:1013E00000FF0AFFFFFF1FFF10FF27FFFFFF0FFF98
-:1013F00029FF18FFFFFF92FF46FF80FFFFFF00FF5E
-:101400008BFF93FFFFFF20FF8DFF83FFFFFF70FF28
-:1014100047FF90FFFFFF00FF00FF48FFFFFF04FFB3
-:10142000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFB4
-:1014300000FF0CFFFFFF20FF00FF04FFFFFF1CFF6A
-:1014400000FF04FFFFFF1CFF00FF04FFFFFF1CFF66
-:1014500000FF04FFFFFF1CFF00FF04FFFFFF10FF62
-:1014600000FF04FFFFFF10FF00FF04FFFFFF10FF5E
-:1014700000FF04FFFFFF10FF00FF04FFFFFF10FF4E
-:1014800000FF04FFFFFF10FF00FF04FFFFFF10FF3E
-:1014900000FF04FFFFFF10FF00FF04FFFFFF10FF2E
-:1014A00000FF04FFFFFF10FF00FF04FFFFFF10FF1E
-:1014B00000FF04FFFFFF10FF00FF04FFFFFF03FF1B
-:1014C0000DFF18FFFFFF0FFF10FF27FFFFFF0FFFAC
-:1014D00031FF18FFFFFF12FF30FF0CFFFFFF00FF7F
-:1014E00008FF0CFFFFFF00FFFFFF4FFFFFFF89FF1B
-:1014F00090FF37FFFFFF00FF02FF34FFFFFF08FFF1
-:1015000000FF34FFFFFF34FF00FF34FFFFFF55FFF4
-:1015100046FF80FFFFFF08FF00FF0EFFFFFF0FFFEA
-:1015200000FF0DFFFFFF4EFFA7FF23FFFFFF0FFF91
-:1015300000FF68FFFFFFA3FF00FF0DFFFFFF4AFF53
-:1015400046FF80FFFFFF18FF00FF0EFFFFFF0FFFAA
-:1015500000FF0DFFFFFF5EFFAFFF23FFFFFF0FFF49
-:1015600000FF68FFFFFFA0FF00FF0DFFFFFF5AFF16
-:1015700046FF80FFFFFF48FF10FF0FFFFFFFFEFF4A
-:1015800087FF93FFFFFFFEFF00FF0DFFFFFF2EFF12
-:1015900002FF40FFFFFF06FFE0FF20FFFFFF0FFFFE
-:1015A00000FF40FFFFFF01FF63FF22FFFFFF0FFF70
-:1015B00000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF88
-:1015C00000FF0DFFFFFF5AFF00FF68FFFFFFA0FFB6
-:1015D00000FF0DFFFFFF5AFF63FF22FFFFFF0FFF1A
-:1015E00000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF58
-:1015F00000FF0DFFFFFF5AFF00FF68FFFFFFA0FF86
-:1016000063FF22FFFFFF0FFF00FF0DFFFFFF4AFFF9
-:1016100049FF6AFFFFFFA3FF00FF0DFFFFFF5AFF17
-:1016200000FF68FFFFFFA0FF63FF22FFFFFF0FFF28
-:1016300000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF07
-:1016400000FF0DFFFFFF5AFF00FF68FFFFFFA0FF35
-:1016500063FF22FFFFFF0FFF00FF0DFFFFFF4AFFA9
-:1016600049FF6AFFFFFFA3FF00FF0DFFFFFF5AFFC7
-:1016700000FF68FFFFFFA0FF63FF22FFFFFF0FFFD8
-:1016800000FF0DFFFFFF4AFF49FF6AFFFFFFA3FFB7
-:1016900000FF0DFFFFFF5AFF00FF68FFFFFFA0FFE5
-:1016A00063FF22FFFFFF0FFF00FF0DFFFFFF4AFF59
-:1016B00049FF6AFFFFFFA3FF00FF0DFFFFFF5AFF77
-:1016C00000FF68FFFFFFA1FF46FF80FFFFFF28FF2D
-:1016D00000FF0EFFFFFF0FFF00FF0DFFFFFF4EFF9C
-:1016E000A7FF23FFFFFF0FFF00FF68FFFFFFA3FF20
-:1016F00000FF0DFFFFFF4AFF46FF80FFFFFF38FF9F
-:1017000000FF0EFFFFFF0FFF00FF0DFFFFFF5EFF5B
-:10171000AFFF23FFFFFF0FFF00FF68FFFFFFA0FFEA
-:1017200000FF0DFFFFFF5AFF63FF22FFFFFF0FFFC8
-:1017300000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF06
-:1017400000FF0DFFFFFF5AFF00FF68FFFFFFA0FF34
-:1017500063FF22FFFFFF0FFF00FF0DFFFFFF4AFFA8
-:1017600049FF6AFFFFFFA3FF00FF0DFFFFFF5AFFC6
-:1017700000FF68FFFFFFA0FF63FF22FFFFFF0FFFD7
-:1017800000FF0DFFFFFF4AFF49FF6AFFFFFFA3FFB6
-:1017900000FF0DFFFFFF5AFF00FF68FFFFFFA0FFE4
-:1017A00063FF22FFFFFF0FFF00FF0DFFFFFF4AFF58
-:1017B00049FF6AFFFFFFA3FF00FF0DFFFFFF5AFF76
-:1017C00000FF68FFFFFFA0FF63FF22FFFFFF0FFF87
-:1017D00000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF66
-:1017E00000FF0DFFFFFF5AFF00FF68FFFFFFA0FF94
-:1017F00063FF22FFFFFF0FFF00FF0DFFFFFF4AFF08
-:1018000049FF6AFFFFFFA3FF00FF0DFFFFFF5AFF25
-:1018100000FF68FFFFFFA0FF63FF22FFFFFF0FFF36
-:1018200000FF0DFFFFFF4AFF49FF6AFFFFFFA3FF15
-:1018300000FF0DFFFFFF5AFF00FF68FFFFFFA3FF40
-:10184000FFFF4FFFFFFFF0FF86FF93FFFFFF50FFFB
-:101850008DFF83FFFFFF70FF47FF90FFFFFF00FF3B
-:1018600000FF48FFFFFF04FFA0FF23FFFFFF0FFF64
-:1018700046FF90FFFFFF6AFF00FF0CFFFFFF20FF06
-:1018800000FF0AFFFFFF1FFF10FF27FFFFFF0FFFF3
-:1018900032FF18FFFFFF42FF8BFF83FFFFFFE4FFD4
-:1018A0008BFF83FFFFFFF5FF46FF90FFFFFF44FF25
-:1018B00008FF22FFFFFF0FFFFFFF4FFFFFFF89FF22
-:1018C00000FF0DFFFFFF8AFF00FF0EFFFFFF0FFF6E
-:1018D00000FF0DFFFFFF4EFFA7FF23FFFFFF0FFFDE
-:1018E00046FF90FFFFFF5AFF8DFF83FFFFFF70FF52
-:1018F00047FF90FFFFFF00FF00FF48FFFFFF04FFCF
-:10190000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFCF
-:1019100000FF0CFFFFFF20FF00FF0AFFFFFF1FFF7C
-:1019200010FF27FFFFFF0FFF35FF18FFFFFFD2FF5C
-:1019300000FF4CFFFFFF00FF00FF93FFFFFF00FFD2
-:101940000BFF40FFFFFF80FF11FF90FFFFFFF0FF45
-:1019500000FF40FFFFFF10FF11FF90FFFFFFE0FFC0
-:1019600046FF80FFFFFF0AFF7AFF26FFFFFF0FFF02
-:1019700035FF1CFFFFFF24FF10FF27FFFFFF0FFFB6
-:1019800033FF18FFFFFFC5FF00FF40FFFFFFC0FF51
-:1019900011FF90FFFFFF60FF8DFF93FFFFFFD0FF60
-:1019A00000FF48FFFFFF00FF8DFF83FFFFFF70FF79
-:1019B00047FF90FFFFFF00FF00FF48FFFFFF04FF0E
-:1019C000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF0F
-:1019D00000FF0CFFFFFF20FF00FF0AFFFFFF1FFFBC
-:1019E00010FF27FFFFFF0FFF34FF18FFFFFF85FFEA
-:1019F00000FF40FFFFFF40FF11FF90FFFFFF60FF70
-:101A00008DFF93FFFFFFD0FF8DFF83FFFFFF70FF70
-:101A100047FF90FFFFFF00FF00FF48FFFFFF04FFAD
-:101A2000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFAE
-:101A300000FF0CFFFFFF20FF00FF0AFFFFFF1FFF5B
-:101A400000FF40FFFFFF00FF11FF90FFFFFF60FF5F
-:101A50008DFF93FFFFFFD0FF8DFF83FFFFFF70FF20
-:101A600047FF90FFFFFF00FF00FF48FFFFFF04FF5D
-:101A7000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF5E
-:101A800000FF0CFFFFFF20FF00FF0AFFFFFF1FFF0B
-:101A900000FF48FFFFFF00FF8DFF93FFFFFF80FF68
-:101AA00000FF48FFFFFF00FF00FF93FFFFFF00FF65
-:101AB0000DFF40FFFFFFF0FF11FF90FFFFFFF0FF62
-:101AC00000FF40FFFFFF10FF11FF90FFFFFFE0FF4F
-:101AD000FFFF40FFFFFFF0FF90FF27FFFFFF0FFF1B
-:101AE00000FF0AFFFFFF0FFF10FF27FFFFFF0FFFA1
-:101AF00037FF18FFFFFF42FF46FF80FFFFFF00FF99
-:101B000089FF93FFFFFFA0FF46FF80FFFFFF10FF4D
-:101B100089FF93FFFFFFB0FF46FF80FFFFFF20FF1D
-:101B200089FF93FFFFFFC0FF46FF80FFFFFF30FFED
-:101B300089FF93FFFFFFD0FF46FF80FFFFFF40FFBD
-:101B400089FF93FFFFFFE0FF46FF80FFFFFF50FF8D
-:101B500089FF93FFFFFFF0FF00FF40FFFFFF10FF33
-:101B600086FF93FFFFFF60FF8DFF83FFFFFF70FF86
-:101B700047FF90FFFFFF00FF00FF48FFFFFF04FF4C
-:101B8000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF4D
-:101B900000FF0CFFFFFF20FF00FF0AFFFFFF1FFFFA
-:101BA00010FF27FFFFFF0FFF39FF18FFFFFF22FF86
-:101BB00046FF80FFFFFF00FF8DFF93FFFFFF20FF29
-:101BC00046FF80FFFFFF10FF8DFF93FFFFFF30FFF9
-:101BD00046FF80FFFFFF20FF78FF22FFFFFF0FFF80
-:101BE00038FF1CFFFFFF84FF00FF40FFFFFF00FFE7
-:101BF00046FF90FFFFFF20FF00FF48FFFFFF00FFB1
-:101C00008DFF93FFFFFF40FF8DFF83FFFFFF70FFFE
-:101C100047FF90FFFFFF00FF00FF48FFFFFF04FFAB
-:101C2000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFAC
-:101C300000FF0CFFFFFF20FF00FF0AFFFFFF1FFF59
-:101C400000FF48FFFFFF00FF8DFF93FFFFFF50FFE6
-:101C500000FF0AFFFFFF0FFF00FF0CFFFFFF20FF49
-:101C600000FF0AFFFFFF1FFF00FF0CFFFFFF30FF19
-:101C700000FF48FFFFFF00FF8BFF93FFFFFF50FFB8
-:101C800000FF0CFFFFFF20FF00FF0AFFFFFF1FFF09
-:101C90008DFF83FFFFFF70FF0FFF40FFFFFFF4FF8B
-:101CA000E0FF22FFFFFF0FFF41FF18FFFFFF30FFA4
-:101CB0008DFF83FFFFFF70FF0FFF40FFFFFFE4FF7B
-:101CC000E0FF22FFFFFF0FFF42FF18FFFFFF40FF73
-:101CD0008DFF83FFFFFF70FF0FFF40FFFFFFD4FF6B
-:101CE000E0FF22FFFFFF0FFF47FF18FFFFFFA0FFEE
-:101CF0008DFF83FFFFFF70FF0FFF40FFFFFFC4FF5B
-:101D0000E0FF22FFFFFF0FFF46FF18FFFFFFD0FF9E
-:101D10008DFF83FFFFFF70FF0FFF40FFFFFFB4FF4A
-:101D2000E0FF22FFFFFF0FFF48FF18FFFFFFE0FF6C
-:101D30008DFF83FFFFFF70FF0FFF40FFFFFFA4FF3A
-:101D4000E0FF22FFFFFF0FFF4AFF18FFFFFF60FFCA
-:101D50008DFF83FFFFFF70FF0FFF40FFFFFF94FF2A
-:101D6000E0FF22FFFFFF0FFF4CFF18FFFFFF00FF08
-:101D70008DFF83FFFFFF70FF0FFF40FFFFFF84FF1A
-:101D8000E0FF22FFFFFF0FFF4DFF18FFFFFFE0FF07
-:101D90008DFF83FFFFFF70FF0FFF40FFFFFF74FF0A
-:101DA000E0FF22FFFFFF0FFF4FFF18FFFFFF20FFA5
-:101DB0008DFF83FFFFFF70FF0FFF40FFFFFF64FFFA
-:101DC000E0FF22FFFFFF0FFF4FFF18FFFFFFF0FFB5
-:101DD0008DFF83FFFFFF70FF0EFF40FFFFFFF4FF4B
-:101DE000E0FF22FFFFFF0FFF44FF18FFFFFF40FF50
-:101DF0008DFF83FFFFFF70FF0EFF40FFFFFFE4FF3B
-:101E0000E0FF22FFFFFF0FFF45FF18FFFFFF50FF1E
-:101E10008DFF83FFFFFF70FF0AFF40FFFFFF04FFFE
-:101E2000E0FF22FFFFFF0FFF3DFF18FFFFFFD0FF86
-:101E30008DFF83FFFFFF70FF0AFF40FFFFFF14FFCE
-:101E4000E0FF22FFFFFF0FFF3FFF18FFFFFF10FF24
-:101E50008DFF83FFFFFF70FF0AFF40FFFFFF24FF9E
-:101E6000E0FF22FFFFFF0FFF3FFF18FFFFFF80FF94
-:101E70008DFF83FFFFFF70FF0AFF40FFFFFF34FF6E
-:101E8000E0FF22FFFFFF0FFF3FFF18FFFFFFF0FF04
-:101E90008DFF83FFFFFF70FF0AFF40FFFFFF44FF3E
-:101EA000E0FF22FFFFFF0FFF40FF18FFFFFF60FF73
-:101EB0008DFF83FFFFFF70FF47FF90FFFFFF00FFD5
-:101EC00000FF48FFFFFF04FFA0FF23FFFFFF0FFFFE
-:101ED00046FF90FFFFFF6AFF00FF0CFFFFFF20FFA0
-:101EE00000FF0AFFFFFF1FFF8DFF83FFFFFF70FF53
-:101EF00047FF90FFFFFF00FF00FF48FFFFFF04FFC9
-:101F0000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFC9
-:101F100000FF0CFFFFFF08FF00FF40FFFFFF00FF77
-:101F2000FFFF93FFFFFFF0FF00FF40FFFFFF00FFF9
-:101F300044FF90FFFFFF60FF00FF00FFFFFF00FF77
-:101F400000FF00FFFFFF00FF00FF00FFFFFF00FF9B
-:101F500000FF00FFFFFF00FF00FF00FFFFFF00FF8B
-:101F600000FF00FFFFFF00FF00FF00FFFFFF00FF7B
-:101F700000FF00FFFFFF00FF21FF40FFFFFF80FF8A
-:101F8000FFFF93FFFFFFF0FF8DFF83FFFFFF70FF59
-:101F900047FF90FFFFFF00FF00FF48FFFFFF04FF28
-:101FA000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF29
-:101FB00025FF40FFFFFF80FFFFFF93FFFFFFF0FFC4
-:101FC0008DFF83FFFFFF70FF47FF90FFFFFF00FFC4
-:101FD00000FF48FFFFFF04FFA0FF23FFFFFF0FFFED
-:101FE00046FF90FFFFFF6AFFE9FF41FFFFFF80FF11
-:101FF000FFFF93FFFFFFF0FF8DFF83FFFFFF70FFE9
-:1020000047FF90FFFFFF00FF00FF48FFFFFF04FFB7
-:10201000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFB8
-:10202000EDFF41FFFFFF80FFFFFF93FFFFFFF0FF8A
-:102030008DFF83FFFFFF70FF47FF90FFFFFF00FF53
-:1020400000FF48FFFFFF04FFA0FF23FFFFFF0FFF7C
-:1020500046FF90FFFFFF6AFF00FF40FFFFFF00FF0A
-:1020600044FF90FFFFFF60FF00FF00FFFFFF00FF46
-:1020700000FF00FFFFFF00FF00FF00FFFFFF00FF6A
-:1020800000FF00FFFFFF00FFF1FF41FFFFFF80FFA8
-:10209000FFFF93FFFFFFF0FF46FF84FFFFFF00FFFE
-:1020A00000FF34FFFFFF08FF00FF60FFFFFF03FF9B
-:1020B00000FF00FFFFFF00FF00FF00FFFFFF00FF2A
-:1020C00000FF00FFFFFF00FF00FF00FFFFFF00FF1A
-:1020D00046FF90FFFFFF60FFF7FF4FFFFFFFF4FF9A
-:1020E00046FF90FFFFFF74FF8DFF83FFFFFF70FF30
-:1020F00047FF90FFFFFF00FF00FF48FFFFFF04FFC7
-:10210000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFC7
-:1021100000FF0CFFFFFF20FF00FF0AFFFFFF1FFF74
-:1021200046FF84FFFFFF00FF00FF34FFFFFF08FFB3
-:1021300000FF34FFFFFF06FF00FF00FFFFFF00FF6F
-:1021400000FF00FFFFFF00FF00FF00FFFFFF00FF99
-:1021500000FF00FFFFFF00FF46FF80FFFFFF10FFB3
-:1021600000FF00FFFFFF00FF00FF00FFFFFF00FF79
-:1021700000FF00FFFFFF00FF00FF00FFFFFF00FF69
-:1021800000FF68FFFFFF02FF00FF00FFFFFF00FFEF
-:1021900000FF00FFFFFF00FF00FF00FFFFFF00FF49
-:1021A00000FF00FFFFFF00FF00FF60FFFFFF22FFB7
-:1021B00000FF00FFFFFF00FF00FF00FFFFFF00FF29
-:1021C00000FF00FFFFFF00FF00FF00FFFFFF00FF19
-:1021D00046FF90FFFFFF62FFF7FF4FFFFFFFF4FF97
-:1021E00046FF90FFFFFF74FF8DFF83FFFFFF70FF2F
-:1021F00047FF90FFFFFF00FF00FF48FFFFFF04FFC6
-:10220000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFC6
-:1022100000FF0CFFFFFF20FF00FF0AFFFFFF1FFF73
-:1022200046FF88FFFFFF00FF00FF38FFFFFF08FFAA
-:1022300000FF50FFFFFF03FF00FF00FFFFFF00FF55
-:1022400000FF00FFFFFF00FF00FF00FFFFFF00FF98
-:1022500000FF00FFFFFF00FF46FF90FFFFFF60FF52
-:10226000F7FF4FFFFFFFF4FF46FF90FFFFFF74FFF4
-:102270008DFF83FFFFFF70FF47FF90FFFFFF00FF11
-:1022800000FF48FFFFFF04FFA0FF23FFFFFF0FFF3A
-:1022900046FF90FFFFFF6AFF00FF0CFFFFFF20FFDC
-:1022A00000FF0AFFFFFF1FFF46FF88FFFFFF00FF41
-:1022B00000FF38FFFFFF08FF00FF38FFFFFF04FFAC
-:1022C00000FF00FFFFFF00FF00FF00FFFFFF00FF18
-:1022D00000FF00FFFFFF00FF00FF00FFFFFF00FF08
-:1022E00046FF80FFFFFF10FF00FF58FFFFFF03FFC7
-:1022F00000FF50FFFFFF23FF00FF00FFFFFF00FF75
-:1023000000FF00FFFFFF00FF00FF00FFFFFF00FFD7
-:1023100000FF00FFFFFF00FF46FF90FFFFFF62FF8F
-:10232000F7FF4FFFFFFFF4FF46FF90FFFFFF74FF33
-:102330008DFF83FFFFFF70FF47FF90FFFFFF00FF50
-:1023400000FF48FFFFFF04FFA0FF23FFFFFF0FFF79
-:1023500046FF90FFFFFF6AFF00FF0CFFFFFF20FF1B
-:1023600000FF0AFFFFFF1FFF46FF80FFFFFF00FF88
-:10237000FFFF93FFFFFFE0FFFFFF83FFFFFFE2FF91
-:1023800046FF90FFFFFF62FFF7FF4FFFFFFFF4FFE5
-:1023900046FF90FFFFFF74FF8DFF83FFFFFF70FF7D
-:1023A00047FF90FFFFFF00FF00FF48FFFFFF04FF14
-:1023B000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF15
-:1023C00000FF0CFFFFFF20FF00FF0AFFFFFF1FFFC2
-:1023D00003FF0DFFFFFF0FFF00FF00FFFFFF00FFE8
-:1023E00000FF00FFFFFF00FF00FF00FFFFFF00FFF7
-:1023F00000FF00FFFFFF00FF46FF90FFFFFF60FFB1
-:102400000CFF0DFFFFFFF0FF00FF00FFFFFF00FFCD
-:1024100000FF00FFFFFF00FF00FF00FFFFFF00FFC6
-:1024200000FF00FFFFFF00FFF7FF4FFFFFFFF4FF7C
-:1024300046FF90FFFFFF74FF8DFF83FFFFFF70FFDC
-:1024400047FF90FFFFFF00FF00FF48FFFFFF04FF73
-:10245000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF74
-:1024600000FF0CFFFFFF20FF00FF0AFFFFFF1FFF21
-:1024700046FF80FFFFFF02FF00FF00FFFFFF00FF9E
-:1024800000FF00FFFFFF00FF00FF00FFFFFF00FF56
-:1024900000FF00FFFFFF00FF00FF00FFFFFF00FF46
-:1024A00000FF00FFFFFF00FF00FF00FFFFFF00FF36
-:1024B00000FF00FFFFFF00FF46FF80FFFFFF13FF4D
-:1024C00000FF40FFFFFF00FF11FF90FFFFFF60FFD5
-:1024D0008DFF93FFFFFFD0FF11FF90FFFFFFF2FF83
-:1024E00011FF90FFFFFFE3FFF7FF4FFFFFFFF4FF38
-:1024F00046FF90FFFFFF74FF8DFF83FFFFFF70FF1C
-:1025000047FF90FFFFFF00FF00FF48FFFFFF04FFB2
-:10251000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFB3
-:1025200000FF0CFFFFFF20FF00FF0AFFFFFF1FFF60
-:1025300046FF84FFFFFF00FF00FF34FFFFFF08FF9F
-:1025400000FF34FFFFFF06FF00FF00FFFFFF00FF5B
-:1025500000FF00FFFFFF00FF00FF00FFFFFF00FF85
-:1025600000FF00FFFFFF00FF46FF80FFFFFF10FF9F
-:10257000FFFF93FFFFFFE0FF00FF60FFFFFF22FF71
-:1025800067FF40FFFFFF40FFFFFF93FFFFFFE0FFFC
-:1025900000FF00FFFFFF00FF00FF00FFFFFF00FF45
-:1025A00000FF00FFFFFF00FF00FF00FFFFFF00FF35
-:1025B00046FF90FFFFFF62FFF7FF4FFFFFFFF4FFB3
-:1025C00046FF90FFFFFF74FF8DFF83FFFFFF70FF4B
-:1025D00047FF90FFFFFF00FF00FF48FFFFFF04FFE2
-:1025E000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFE3
-:1025F00000FF0CFFFFFF20FF00FF0AFFFFFF1FFF90
-:1026000046FF84FFFFFF00FF00FF34FFFFFF08FFCE
-:1026100000FF34FFFFFF06FF00FF00FFFFFF00FF8A
-:1026200000FF00FFFFFF00FF46FF80FFFFFF10FFDE
-:1026300000FF00FFFFFF00FF00FF00FFFFFF00FFA4
-:1026400000FF00FFFFFF00FF00FF00FFFFFF00FF94
-:1026500046FF80FFFFFF23FFFFFF93FFFFFFE0FF29
-:1026600000FF68FFFFFF32FF00FF60FFFFFF72FF08
-:1026700067FF40FFFFFF40FFFFFF93FFFFFFE0FF0B
-:1026800000FF00FFFFFF00FF00FF00FFFFFF00FF54
-:1026900000FF00FFFFFF00FF00FF00FFFFFF00FF44
-:1026A00046FF90FFFFFF67FFF7FF4FFFFFFFF4FFBD
-:1026B00046FF90FFFFFF74FF8DFF83FFFFFF70FF5A
-:1026C00047FF90FFFFFF00FF00FF48FFFFFF04FFF1
-:1026D000A0FF23FFFFFF0FFF46FF90FFFFFF6AFFF2
-:1026E00000FF0CFFFFFF20FF00FF0AFFFFFF1FFF9F
-:1026F00046FF80FFFFFF05FF03FF0DFFFFFF0FFFFA
-:1027000000FF00FFFFFF00FF00FF00FFFFFF00FFD3
-:1027100000FF00FFFFFF00FF00FF00FFFFFF00FFC3
-:102720000CFF0DFFFFFFF5FF00FF00FFFFFF00FFA5
-:1027300000FF00FFFFFF00FF00FF00FFFFFF00FFA3
-:1027400000FF00FFFFFF00FFF7FF4FFFFFFFF4FF59
-:1027500046FF90FFFFFF74FF8DFF83FFFFFF70FFB9
-:1027600047FF90FFFFFF00FF00FF48FFFFFF04FF50
-:10277000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF51
-:1027800000FF0CFFFFFF20FF00FF0AFFFFFF1FFFFE
-:1027900046FF80FFFFFF00FF8DFF93FFFFFFC0FF9D
-:1027A0008DFF83FFFFFFC7FF46FF90FFFFFF67FF1F
-:1027B000F7FF4FFFFFFFF4FF46FF90FFFFFF74FF9F
-:1027C0008DFF83FFFFFF70FF47FF90FFFFFF00FFBC
-:1027D00000FF48FFFFFF04FFA0FF23FFFFFF0FFFE5
-:1027E00046FF90FFFFFF6AFF00FF0CFFFFFF20FF87
-:1027F00000FF0AFFFFFF1FFF46FF80FFFFFF00FFF4
-:102800008DFF93FFFFFFE0FF8DFF83FFFFFFE7FFDB
-:1028100000FF00FFFFFF00FF00FF00FFFFFF00FFC2
-:1028200000FF00FFFFFF00FF00FF00FFFFFF00FFB2
-:1028300046FF90FFFFFF67FFF7FF4FFFFFFFF4FF2B
-:1028400046FF90FFFFFF74FF8DFF83FFFFFF70FFC8
-:1028500047FF90FFFFFF00FF00FF48FFFFFF04FF5F
-:10286000A0FF23FFFFFF0FFF46FF90FFFFFF6AFF60
-:1028700000FF0CFFFFFF20FF00FF0AFFFFFF1FFF0D
-:102880008DFF83FFFFFFD0FF00FF40FFFFFF24FF0E
-:10289000A0FF23FFFFFF0FFF11FF90FFFFFF6AFF65
-:1028A00000FF40FFFFFF14FF18FF23FFFFFF0FFF94
-:1028B00051FF14FFFFFF81FF90FF80FFFFFF60FFCC
-:1028C00080FF23FFFFFF0FFF8DFF83FFFFFFD0FF80
-:1028D00000FF40FFFFFF14FFA0FF23FFFFFF0FFFDC
-:1028E00011FF90FFFFFF6AFF30FF0CFFFFFF00FFAB
-:1028F00000FF40FFFFFF16FF10FF40FFFFFF07FF35
-:1029000090FF34FFFFFF71FF00FF34FFFFFF09FF5F
-:102910000FFF40FFFFFFF5FF00FF60FFFFFF07FF16
-:1029200088FF63FFFFFF27FFE8FF60FFFFFF07FF50
-:1029300062FF61FFFFFF27FF88FF2BFFFFFF8BFF79
-:10294000E8FF60FFFFFF07FF62FF61FFFFFF17FF68
-:1029500088FF2FFFFFFFFBFF89FF23FFFFFF0FFF14
-:1029600098FF20FFFFFF0FFFEAFF20FFFFFF0FFF91
-:1029700000FF0DFFFFFFABFF00FF0DFFFFFFB8FFE4
-:1029800000FF0DFFFFFFCFFF62FF21FFFFFF0FFFE3
-:1029900010FF22FFFFFF0FFF62FF21FFFFFF0FFF6E
-:1029A00000FF40FFFFFF24FF90FF80FFFFFF60FF5D
-:1029B00080FF23FFFFFF0FFF51FF18FFFFFF00FF06
-:1029C0008BFF93FFFFFFEBFF8BFF93FFFFFFFCFFEE
-:1029D00000FF0AFFFFFF0FFF51FF1CFFFFFF0FFF6C
-:1029E0008DFF93FFFFFFACFF82FF3CFFFFFF45FF22
-:1029F00054FF14FFFFFF2EFFFFFF3FFFFFFFF5FF18
-:102A000054FF14FFFFFF1EFF00FF00FFFFFF00FF4A
-:102A100000FF00FFFFFF00FF51FF1CFFFFFF0FFF44
-:102A200000FF0DFFFFFF0CFF8DFF83FFFFFFA4FFE3
-:102A3000E0FF22FFFFFF0FFF53FF18FFFFFFB3FF71
-:102A40008DFF83FFFFFFD0FF00FF40FFFFFF24FF4C
-:102A5000A0FF23FFFFFF0FFF00FF0DFFFFFFBAFFE7
-:102A60008BFF83FFFFFFF5FF11FF90FFFFFF6BFF61
-:102A700000FF40FFFFFF14FF18FF23FFFFFF0FFFC2
-:102A800055FF14FFFFFF21FF90FF80FFFFFF60FF56
-:102A900080FF23FFFFFF0FFF00FF40FFFFFF20FF2E
-:102AA00000FF40FFFFFF01FF8BFF83FFFFFFE4FFFD
-:102AB0008BFF83FFFFFFF5FF08FF0CFFFFFF00FF09
-:102AC00060FF22FFFFFF0FFF49FF2AFFFFFFEAFF22
-:102AD00000FF0DFFFFFF4EFF8BFF93FFFFFFEEFF99
-:102AE00000FF0DFFFFFF5AFF8BFF93FFFFFFFAFF71
-:102AF0008DFF83FFFFFF20FF8DFF83FFFFFF31FF6F
-:102B0000E0FF22FFFFFF0FFFC9FF2AFFFFFFEAFFE1
-:102B100054FF18FFFFFFD5FF00FF0DFFFFFF4EFF23
-:102B200000FF0DFFFFFF5AFF82FF4FFFFFFFF0FF87
-:102B3000FFFF4FFFFFFFF1FFE0FF22FFFFFF0FFF4F
-:102B4000C9FF2AFFFFFFEAFF56FF18FFFFFFB4FF90
-:102B500054FF18FFFFFFDFFF00FF40FFFFFF20FFD4
-:102B600047FF90FFFFFF20FF0CFF0CFFFFFF00FF60
-:102B700002FF40FFFFFF60FF11FF90FFFFFF20FFFC
-:102B800016FF18FFFFFF4FFF8DFF83FFFFFFD0FFF2
-:102B900000FF40FFFFFF24FFA0FF23FFFFFF0FFF09
-:102BA00011FF90FFFFFF6AFF00FF40FFFFFF14FFD0
-:102BB00018FF23FFFFFF0FFF57FF14FFFFFF91FFD9
-:102BC00090FF80FFFFFF60FF80FF23FFFFFF0FFFED
-:102BD0008DFF83FFFFFFD0FF00FF40FFFFFF14FFCB
-:102BE000A0FF23FFFFFF0FFF11FF90FFFFFF6AFF12
-:102BF00030FF0CFFFFFF00FF00FF40FFFFFF16FF4D
-:102C000010FF40FFFFFF07FF90FF34FFFFFF71FF42
-:102C100000FF34FFFFFF09FF0FFF40FFFFFFF5FF3D
-:102C200000FF60FFFFFF07FF88FF63FFFFFF27FF35
-:102C3000E8FF60FFFFFF07FF62FF61FFFFFF27FF65
-:102C400088FF2BFFFFFF8BFFE8FF60FFFFFF07FF01
-:102C500062FF61FFFFFF17FF88FF2FFFFFFFFBFFF2
-:102C600089FF23FFFFFF0FFF98FF20FFFFFF0FFFEC
-:102C7000EAFF20FFFFFF0FFF00FF0DFFFFFFABFF8D
-:102C800000FF0DFFFFFFB8FF00FF0DFFFFFFCFFFAD
-:102C900062FF21FFFFFF0FFF10FF22FFFFFF0FFF6B
-:102CA00062FF21FFFFFF0FFF00FF40FFFFFF24FF38
-:102CB00090FF80FFFFFF60FF80FF23FFFFFF0FFFFC
-:102CC00057FF18FFFFFF10FF8BFF93FFFFFFEBFF86
-:102CD0008BFF93FFFFFFFCFF5CFF1CFFFFFF3FFF2D
-:102CE00000FF0AFFFFFF0FFF57FF1CFFFFFF1FFF43
-:102CF0008DFF93FFFFFFACFF82FF3CFFFFFF45FF0F
-:102D00005AFF14FFFFFF4EFFFFFF3FFFFFFFF5FFDE
-:102D10005AFF14FFFFFF3EFF00FF00FFFFFF00FF11
-:102D200000FF00FFFFFF00FF57FF1CFFFFFF1FFF1B
-:102D300000FF0DFFFFFF0CFF8DFF83FFFFFFA4FFD0
-:102D4000E0FF22FFFFFF0FFF59FF18FFFFFFD3FF38
-:102D50005CFF1CFFFFFF3FFF8DFF83FFFFFFD0FFE6
-:102D600000FF40FFFFFF24FFA0FF23FFFFFF0FFF37
-:102D700000FF0DFFFFFFBAFF8BFF83FFFFFFF5FF93
-:102D80005CFF1CFFFFFF3FFF11FF90FFFFFF6BFF8A
-:102D900000FF40FFFFFF14FF18FF23FFFFFF0FFF9F
-:102DA0005BFF14FFFFFF61FF90FF80FFFFFF60FFED
-:102DB00080FF23FFFFFF0FFF00FF40FFFFFF20FF0B
-:102DC00000FF40FFFFFF01FF8BFF83FFFFFFE4FFDA
-:102DD0008BFF83FFFFFFF5FF08FF0CFFFFFF00FFE6
-:102DE00060FF22FFFFFF0FFF49FF2AFFFFFFEAFFFF
-:102DF00000FF0DFFFFFF4EFF8BFF93FFFFFFEEFF76
-:102E00008BFF93FFFFFFFAFF5EFF1CFFFFFF0FFF2B
-:102E10005BFF18FFFFFF0FFF8BFF83FFFFFF20FF0C
-:102E200078FF22FFFFFF0FFF0DFF18FFFFFF05FFD9
-:102E300000FF0AFFFFFF0FFF08FF0CFFFFFF00FF6F
-:102E400000FF40FFFFFF14FF00FF40FFFFFF05FFF3
-:102E50008BFF83FFFFFFE0FF8BFF83FFFFFFF1FF8F
-:102E600060FF22FFFFFF0FFF49FF2AFFFFFFEAFF7E
-:102E70008BFF93FFFFFFFAFF8BFF93FFFFFFEEFF38
-:102E80000CFF0CFFFFFF00FF00FF0AFFFFFF0FFF1B
-:102E900008FF0CFFFFFF00FF00FF40FFFFFF14FFD4
-:102EA00000FF40FFFFFF05FF8BFF83FFFFFFE0FFF9
-:102EB0008BFF83FFFFFFF1FF60FF22FFFFFF0FFF8C
-:102EC00049FF2AFFFFFFEAFF8BFF93FFFFFFFAFF97
-:102ED0008BFF93FFFFFFEEFF0CFF0CFFFFFF00FFD8
-:102EE0008DFF83FFFFFF40FF78FF22FFFFFF0FFFF3
-:102EF0005EFF1CFFFFFF04FF00FF0AFFFFFF0FFF45
-:102F000008FF0CFFFFFF00FF8DFF83FFFFFF50FF57
-:102F100078FF22FFFFFF0FFF5FFF1CFFFFFF54FF43
-:102F20000FFF40FFFFFFF5FF90FF80FFFFFFA8FFAF
-:102F300010FF0FFFFFFF08FF90FF80FFFFFF90FFD4
-:102F400088FF27FFFFFF0FFFB6FF27FFFFFF0FFFE1
-:102F50008BFF83FFFFFFFAFFF2FF22FFFFFF0FFF50
-:102F600000FF0DFFFFFF0AFF00FF40FFFFFF14FF00
-:102F7000E2FF22FFFFFF0FFF74FF18FFFFFFE2FFDA
-:102F800038FF23FFFFFF0FFF00FF40FFFFFF24FF7D
-:102F9000E2FF22FFFFFF0FFF74FF18FFFFFFE2FFBA
-:102FA00000FF0AFFFFFF0FFF0FFF40FFFFFFF5FFCE
-:102FB00090FF80FFFFFF80FF8BFF83FFFFFFE2FF9B
-:102FC00088FF27FFFFFF0FFF98FF20FFFFFF0FFF86
-:102FD00010FF40FFFFFF07FFE8FF20FFFFFF0FFF8D
-:102FE00000FF0DFFFFFFACFFF2FF22FFFFFF0FFF0F
-:102FF00000FF0DFFFFFF0AFF01FF40FFFFFF04FF7F
-:10300000E2FF22FFFFFF0FFF74FF18FFFFFFE2FF49
-:1030100038FF23FFFFFF0FFF02FF40FFFFFF04FF0A
-:10302000E2FF22FFFFFF0FFF74FF18FFFFFFE2FF29
-:1030300000FF0AFFFFFF0FFF00FF34FFFFFF08FF45
-:1030400000FF34FFFFFFD4FF00FF34FFFFFF85FFC9
-:10305000FFFF4FFFFFFF89FF00FF09FFFFFF01FF99
-:1030600089FF83FFFFFFB8FF00FF0EFFFFFF0FFF89
-:1030700000FF0DFFFFFF4EFFA7FF23FFFFFF0FFF26
-:1030800000FF68FFFFFFA3FF89FF83FFFFFFA8FF8B
-:1030900000FF0EFFFFFF0FFF00FF0DFFFFFF4EFFC2
-:1030A000A7FF23FFFFFF0FFF00FF68FFFFFFA3FF46
-:1030B00000FF09FFFFFF03FF8BFF83FFFFFFB0FF50
-:1030C00000FF68FFFFFF00FF00FF0AFFFFFF0FFF89
-:1030D00002FF35FFFFFF00FF00FF34FFFFFF08FF87
-:1030E00000FF34FFFFFF26FF89FF83FFFFFFD8FFAC
-:1030F00000FF0EFFFFFF0FFF00FF0DFFFFFF4EFF62
-:10310000A7FF23FFFFFF0FFF00FF68FFFFFFA3FFE5
-:1031100089FF83FFFFFFC8FF00FF0EFFFFFF0FFFC8
-:1031200000FF0DFFFFFF4EFFA7FF23FFFFFF0FFF75
-:1031300000FF68FFFFFFA3FF00FF09FFFFFF03FF82
-:103140008BFF83FFFFFFD0FF00FF68FFFFFF02FF41
-:1031500001FF40FFFFFF80FF00FF68FFFFFF02FF4E
-:1031600000FF40FFFFFF20FF00FF68FFFFFF03FF9E
-:1031700000FF0AFFFFFF0FFF00FF40FFFFFF10FFF0
-:103180008BFF93FFFFFF40FF30FF40FFFFFF00FF7B
-:1031900049FF90FFFFFF40FF00FF0AFFFFFF0FFF07
-:1031A00000FF40FFFFFF60FF00FF91FFFFFFF0FF08
-:1031B00000FF0AFFFFFF0FFF01FF42FFFFFF80FF3D
-:1031C00000FF91FFFFFF70FF07FF42FFFFFF80FF3F
-:1031D00003FF91FFFFFF70FF02FF42FFFFFF00FFB1
-:1031E00000FF91FFFFFFF0FF08FF42FFFFFF00FF1E
-:1031F00003FF91FFFFFFF0FF00FF40FFFFFF20FFF5
-:1032000001FF91FFFFFF70FF00FF40FFFFFF20FF66
-:1032100004FF91FFFFFF70FF00FF0AFFFFFF0FFF9A
-:1032200004FF42FFFFFF00FF49FF90FFFFFF20FF69
-:1032300062FF1CFFFFFFFFFF00FF0AFFFFFF0FFF02
-:1032400000FF40FFFFFF20FF00FF91FFFFFFF0FFA7
-:1032500001FF42FFFFFF00FF49FF90FFFFFF20FF3C
-:1032600062FF1CFFFFFFFFFF00FF0AFFFFFF0FFFD2
-:1032700000FF40FFFFFF40FF8BFF93FFFFFF80FF3A
-:1032800005FF35FFFFFF00FF92FF3BFFFFFF00FF41
-:1032900000FF34FFFFFF08FF00FF38FFFFFF08FFBC
-:1032A00000FF3CFFFFFF65FF65FF14FFFFFF9EFF70
-:1032B00000FF60FFFFFF03FF00FF60FFFFFF13FF42
-:1032C00000FF78FFFFFF13FF00FF78FFFFFF03FF02
-:1032D00001FF42FFFFFF00FF49FF90FFFFFF20FFBC
-:1032E00062FF1CFFFFFFFFFF05FF81FFFFFFC0FF25
-:1032F00078FF22FFFFFF0FFF21FF18FFFFFF71FF85
-:1033000000FF0AFFFFFF0FFF49FF80FFFFFF48FF9D
-:1033100010FF0FFFFFFF03FF66FF23FFFFFF0FFFFD
-:1033200074FF18FFFFFF54FF86FF83FFFFFFC0FFFE
-:1033300049FF90FFFFFF20FF62FF1CFFFFFFFFFF21
-:1033400086FF83FFFFFF80FF01FF40FFFFFF04FFB9
-:10335000E0FF22FFFFFF0FFF86FF93FFFFFF8AFFC3
-:1033600067FF1CFFFFFF00FF86FF87FFFFFFD0FF07
-:1033700075FF1CFFFFFF1FFF00FF0AFFFFFF0FFF8E
-:1033800000FF48FFFFFF00FF82FF93FFFFFF40FFAA
-:1033900000FF0AFFFFFF0FFF08FF0CFFFFFF00FF0A
-:1033A00086FF8BFFFFFFB0FF00FF38FFFFFF08FF26
-:1033B00000FF38FFFFFFF4FFFFFF4FFFFFFF89FF14
-:1033C0008DFF83FFFFFF60FF89FF83FFFFFF44FF47
-:1033D00000FF40FFFFFF01FF89FF83FFFFFF55FF55
-:1033E00060FF26FFFFFF0FFF49FF22FFFFFF0FFFD8
-:1033F00000FF78FFFFFFA3FF10FF22FFFFFF0FFF7B
-:1034000000FF78FFFFFFA0FF8DFF83FFFFFF60FF3E
-:1034100089FF83FFFFFF24FF00FF40FFFFFF01FF45
-:1034200089FF83FFFFFF35FF60FF26FFFFFF0FFFD0
-:1034300049FF22FFFFFF0FFF00FF78FFFFFFA3FF01
-:1034400010FF22FFFFFF0FFF00FF78FFFFFFA3FF2A
-:103450008DFF83FFFFFF60FF20FF40FFFFFF04FFA2
-:1034600060FF22FFFFFF0FFF8DFF93FFFFFF6AFF4B
-:103470000CFF0CFFFFFF00FF00FF0AFFFFFF0FFF25
-:1034800008FF0CFFFFFF00FF86FF87FFFFFFB0FF75
-:1034900000FF34FFFFFF08FF01FF34FFFFFF04FFC1
-:1034A00000FF34FFFFFF35FFFFFF4FFFFFFF89FFE6
-:1034B00000FF09FFFFFF01FF87FF8BFFFFFFE0FF1A
-:1034C00000FF38FFFFFF88FF00FF70FFFFFF03FFD3
-:1034D00000FF68FFFFFF00FF00FF70FFFFFF03FF1B
-:1034E00000FF68FFFFFF03FF87FF9BFFFFFFE0FF79
-:1034F0000CFF0CFFFFFF00FF00FF0AFFFFFF0FFFA5
-:1035000001FF3CFFFFFF05FF6AFF14FFFFFF9EFF67
-:1035100067FF1CFFFFFF3FFF69FF1CFFFFFF0FFF5F
-:1035200066FF1CFFFFFF1FFF38FF22FFFFFF0FFF9B
-:103530006AFF14FFFFFF85FF8BFF83FFFFFF40FF44
-:1035400078FF22FFFFFF0FFF00FF00FFFFFF00FFDC
-:1035500000FF0AFFFFFF0FFF82FF83FFFFFF40FF17
-:1035600078FF22FFFFFF0FFF6AFF1CFFFFFFF4FF42
-:1035700000FF0AFFFFFF0FFF00FF40FFFFFF10FFEC
-:1035800047FF90FFFFFF20FF87FF83FFFFFFF0FF54
-:1035900086FF93FFFFFF80FF00FF40FFFFFF00FF5C
-:1035A0008DFF93FFFFFF60FF82FF93FFFFFF40FF50
-:1035B00086FF87FFFFFF90FF02FF34FFFFFF08FF3A
-:1035C00000FF60FFFFFF03FF89FF93FFFFFF20FF66
-:1035D00000FF60FFFFFF03FF89FF93FFFFFF30FF46
-:1035E00000FF60FFFFFF03FF89FF93FFFFFF40FF26
-:1035F00000FF60FFFFFF03FF89FF93FFFFFF50FF06
-:1036000086FF97FFFFFF90FF00FF0AFFFFFF0FFFFE
-:1036100000FF34FFFFFF64FF00FF34FFFFFF35FFB3
-:1036200001FF34FFFFFF96FF00FF38FFFFFF34FF6D
-:1036300000FF38FFFFFF65FF01FF38FFFFFF96FF28
-:1036400000FF38FFFFFF08FF02FF34FFFFFF49FFC5
-:1036500002FF38FFFFFF49FF10FF40FFFFFF06FF9B
-:1036600010FF40FFFFFF02FF30FF0CFFFFFF00FFD6
-:1036700000FF3CFFFFFF25FF6DFF14FFFFFFBEFFB4
-:1036800098FF50FFFFFF73FF88FF50FFFFFF73FF9E
-:1036900083FF68FFFFFFC5FF88FF68FFFFFFC4FFD0
-:1036A00083FF68FFFFFFC5FF00FF68FFFFFFC6FF46
-:1036B00098FF50FFFFFF73FF88FF50FFFFFF73FF6E
-:1036C00083FF78FFFFFFC4FF88FF78FFFFFFC5FF80
-:1036D00083FF78FFFFFFC4FF00FF78FFFFFFC6FFF7
-:1036E00098FF50FFFFFF73FF88FF50FFFFFF73FF3E
-:1036F00083FF68FFFFFFC5FF88FF68FFFFFFC4FF70
-:1037000083FF68FFFFFFC5FF00FF68FFFFFFC6FFE5
-:1037100000FF3CFFFFFF25FF6EFF14FFFFFF8EFF42
-:1037200098FF50FFFFFF73FF88FF50FFFFFF73FFFD
-:1037300083FF78FFFFFFC4FF88FF78FFFFFFC4FF10
-:1037400000FF78FFFFFFC4FF20FF0CFFFFFF00FF1B
-:1037500000FF0AFFFFFF0FFF00FF34FFFFFFE9FF3D
-:1037600001FF38FFFFFF28FF01FF38FFFFFF29FFA0
-:1037700000FF38FFFFFF66FF00FF38FFFFFF34FF49
-:1037800000FF38FFFFFF75FF10FF40FFFFFF06FF40
-:1037900000FF41FFFFFF07FF30FF0CFFFFFF00FFAF
-:1037A00098FF70FFFFFF20FF00FF3CFFFFFF25FF9A
-:1037B00070FF14FFFFFF2EFF80FF70FFFFFF42FF2F
-:1037C00063FF72FFFFFF20FF80FF68FFFFFFA7FF7F
-:1037D00000FF70FFFFFF41FF63FF72FFFFFF24FF49
-:1037E00080FF68FFFFFFA7FF00FF70FFFFFF46FF9E
-:1037F00063FF72FFFFFF24FF80FF68FFFFFFA7FF4B
-:1038000000FF70FFFFFF45FF63FF72FFFFFF20FF18
-:1038100000FF68FFFFFFA7FF80FF70FFFFFF42FF71
-:1038200063FF72FFFFFF20FF80FF70FFFFFF41FF7C
-:1038300063FF6AFFFFFFA7FF00FF70FFFFFF24FF8A
-:1038400080FF68FFFFFFA7FF00FF70FFFFFF44FF3F
-:1038500063FF72FFFFFF24FF80FF68FFFFFFA7FFEA
-:10386000F0FF40FFFFFF05FF00FF4FFFFFFF04FFDA
-:1038700000FF0DFFFFFF0BFF80FF27FFFFFF0FFF84
-:1038800088FF23FFFFFF0FFFEAFF20FFFFFF0FFF6F
-:1038900074FF22FFFFFF0FFF00FF68FFFFFFA7FF7E
-:1038A00000FF70FFFFFF24FF80FF70FFFFFF44FF5A
-:1038B00063FF72FFFFFF24FF80FF68FFFFFFA7FF8A
-:1038C00000FF4FFFFFFF04FF00FF0DFFFFFF0BFF97
-:1038D00080FF27FFFFFF0FFF88FF23FFFFFF0FFF82
-:1038E000EAFF20FFFFFF0FFF74FF22FFFFFF0FFF24
-:1038F00000FF68FFFFFFA7FF00FF0AFFFFFF0FFFAA
-:1039000038FF22FFFFFF0FFF72FF14FFFFFF35FF9D
-:103910008BFF83FFFFFF30FF78FF22FFFFFF0FFFCA
-:1039200000FF0AFFFFFF0FFF0EFF40FFFFFF00FF3A
-:1039300010FF90FFFFFF10FF08FF40FFFFFF00FF99
-:1039400010FF90FFFFFF90FF02FF40FFFFFF40FFCF
-:1039500011FF90FFFFFF20FF00FF40FFFFFF00FF70
-:1039600010FF90FFFFFFB0FFB0FF40FFFFFF00FF21
-:1039700047FF90FFFFFF50FF30FF40FFFFFF00FFBA
-:1039800047FF90FFFFFF40FF78FF42FFFFFF50FF20
-:1039900048FF90FFFFFFA0FF40FF40FFFFFF00FF39
-:1039A00049FF90FFFFFF70FF18FF40FFFFFF00FF80
-:1039B00047FF90FFFFFF70FF18FF40FFFFFF10FF62
-:1039C00047FF90FFFFFF70FF18FF40FFFFFF00FF62
-:1039D00047FF90FFFFFF70FF00FF40FFFFFF00FF6A
-:1039E00011FF90FFFFFF60FF8DFF93FFFFFFD0FFF0
-:1039F0000BFF40FFFFFF80FF11FF90FFFFFFF0FF75
-:103A000000FF40FFFFFF10FF11FF90FFFFFFE0FFEF
-:103A100000FF48FFFFFF00FF00FF93FFFFFF00FFD5
-:103A200000FF0AFFFFFF0FFF08FF40FFFFFF00FF3F
-:103A300047FF90FFFFFF20FF22FF18FFFFFF9FFFC0
-:103A400000FF48FFFFFF10FF86FF93FFFFFF70FF9F
-:103A500022FF18FFFFFF9FFF00FF48FFFFFF00FF4F
-:103A600086FF93FFFFFF70FF22FF18FFFFFF9FFFFE
-:103A700000FF48FFFFFF20FF86FF93FFFFFF70FF5F
-:103A800022FF18FFFFFF9FFF00FF34FFFFFF48FFEB
-:103A900000FF60FFFFFF03FF86FF93FFFFFFB0FF04
-:103AA00000FF60FFFFFF03FF86FF93FFFFFFC0FFE4
-:103AB00086FF97FFFFFFD0FF00FF0AFFFFFF0FFF0A
-:103AC00080FF37FFFFFF02FF84FF3BFFFFFF02FF86
-:103AD00000FF60FFFFFF0BFF0CFF0DFFFFFF90FFDC
-:103AE00000FF70FFFFFF0BFF0CFF0DFFFFFFB0FF9C
-:103AF00088FF37FFFFFF03FF8CFF3BFFFFFF03FF44
-:103B000000FF40FFFFFF01FF8BFF93FFFFFF51FF0F
-:103B100082FF43FFFFFF80FF8BFF93FFFFFF60FFEC
-:103B200000FF34FFFFFF89FF00FF40FFFFFF00FFA2
-:103B30000CFF0DFFFFFF80FF0CFF0DFFFFFFA0FF3D
-:103B400000FF0AFFFFFF0FFF80FF37FFFFFF00FFAF
-:103B500000FF34FFFFFF08FF02FF3CFFFFFF45FFB0
-:103B600076FF14FFFFFFDEFF00FFA0FFFFFF03FF54
-:103B700084FF37FFFFFF00FF00FF34FFFFFF08FF58
-:103B800002FF3CFFFFFF45FF77FF14FFFFFF2EFF03
-:103B900000FFA0FFFFFF03FF7EFF38FFFFFF00FFD6
-:103BA00000FF38FFFFFF08FF00FF3CFFFFFFE5FFBE
-:103BB00077FF14FFFFFF8EFF00FF40FFFFFF00FFB6
-:103BC00000FF58FFFFFF03FF00FF0AFFFFFF0FFF8B
-:103BD00064FF1CFFFFFF4FFF38FF22FFFFFF0FFFB7
-:103BE00077FF14FFFFFFE5FF8BFF83FFFFFF40FF21
-:103BF00078FF22FFFFFF0FFF64FF1CFFFFFF8FFF17
-:103C000038FF22FFFFFF0FFF78FF14FFFFFF35FF94
-:103C10008BFF83FFFFFF40FF78FF22FFFFFF0FFFB7
-:103C200000FF0AFFFFFF0FFF00FF34FFFFFF09FF48
-:103C300000FF34FFFFFF85FF00FF34FFFFFF56FF4B
-:103C400000FF09FFFFFF06FF20FF40FFFFFF00FF0F
-:103C500001FF40FFFFFFC1FF00FF40FFFFFF44FFE8
-:103C600000FF68FFFFFF05FF00FF68FFFFFF15FF74
-:103C700000FF68FFFFFF05FF00FF68FFFFFF45FF34
-:103C800000FF0AFFFFFF0FFF86FF87FFFFFFF0FF28
-:103C900086FF8BFFFFFFE0FF00FF34FFFFFFC8FF41
-:103CA00000FF38FFFFFFC8FF00FF60FFFFFF03FFBB
-:103CB00000FF60FFFFFF13FF00FF78FFFFFF13FF10
-:103CC00000FF78FFFFFF03FF86FF97FFFFFFF0FF76
-:103CD00086FF9BFFFFFFE0FF05FF81FFFFFFC0FFA7
-:103CE00078FF22FFFFFF0FFF21FF18FFFFFF71FF8B
-:103CF00000FF0AFFFFFF0FFF7FFF38FFFFFF01FFFD
-:103D000000FF38FFFFFF09FF00FF38FFFFFF06FF3E
-:103D10007EFF40FFFFFF00FF00FF40FFFFFFB1FFFE
-:103D200008FF0CFFFFFF00FF00FF3CFFFFFFC5FF88
-:103D30007AFF14FFFFFFBEFF00FF50FFFFFF46FFAB
-:103D4000E1FF22FFFFFF0FFF7AFF1CFFFFFFE0FFF5
-:103D500060FF22FFFFFF0FFF00FF58FFFFFFA7FFDD
-:103D60000CFF0CFFFFFF00FF00FF0AFFFFFF0FFF2C
-:103D700000FF40FFFFFFC4FF00FF0AFFFFFF0FFF30
-:103D8000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF43
-:043D9000FFFFFFFF33
-:00000001FF
diff --git a/firmware/matrox/g200_warp.H16 b/firmware/matrox/g200_warp.H16
deleted file mode 100644
index 5064b6f01bb4..000000000000
--- a/firmware/matrox/g200_warp.H16
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * WARP pipes are named according to the functions they perform, where
- *
- * - T stands for computation of texture stage 0
- * - T2 stands for computation of both texture stage 0 and texture stage 1
- * - G stands for computation of triangle intensity (Gouraud interpolation)
- * - Z stands for computation of Z buffer interpolation
- * - S stands for computation of specular highlight
- * - A stands for computation of the alpha channel
- * - F stands for computation of vertex fog interpolation
- */
-/* TGZ */
-:04B8000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E9728007EA241F20E9154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E2608015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E803800AEA17C12BBD008000E8008000E8B3689725008000E833C033AF3C274FE9573920E9281960EC2B3220E91D3B20E9B30500E0162820E9233B33AD1E2B20E91C8020E9573620E90080A0E94040D8ECFF80C0E990E200E085FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E884FF0AEA008000E8C941C8EC42E100E082FF20EA008000E8008000E8008000E8C840C0EC008000E87FFF20EA008000E8008000E8008000E871
-/* TGZF */
-:0548000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E97F8007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E26B8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E80D211AB6052131B603802AEA17C12BBD0D2005202FC021C6B3689725008000E833C033AF3C274FE91750569F008000E8370F5C9F00E02F20008000E8281960ECB30500E0008000E8233B33AD008000E8172617DF35174FE9008000E8008000E8008000E839374FE92F2F17AF008000E8008000E8008000E831804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E078FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E877FF0AEA008000E8C941C8EC42E100E075FF20EA008000E8008000E8008000E8C840C0EC008000E872FF20EA008000E8008000E8008000E8BB
-/* TGZA */
-:04E80000000098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E97D8007EA241F20E9154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E26B8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D444CB6254454B603802AEA17C12BBD2D20252007C044C6B3689725008000E833C033AF3C274FE91F62579F008000E83F3D5D9F00E00720008000E8281960ECB30500E0008000E8233B33AD008000E81F261FDF9D1F4FE9008000E8008000E8008000E89E3F4FE907071FAF008000E8008000E8008000E89C804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E07AFF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E879FF0AEA008000E8C941C8EC42E100E077FF20EA008000E8008000E8008000E8C840C0EC008000E874FF20EA008000E8008000E8008000E8D9
-/* TGZAF */
-:0568000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E9838007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E26F8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E80D211AB6052131B62D444CB6254454B603802AEA17C12BBD0D2005202FC021C6B3689725008000E833C033AF3C274FE900E0252007C044C61750569F00E02D20370F5C9F00E02F201F62579F00E007203F3D5D9F008000E8008000E8281960ECB30500E0172617DF233B33AD35174FE91F261FDF9D1F4FE99E3F4FE939374FE92F2F17AF008000E807071FAF008000E831804FE9008000E89C804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E074FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E873FF0AEA008000E8C941C8EC42E100E071FF20EA008000E8008000E8008000E8C840C0EC008000E86EFF20EA008000E8008000E8008000E830
-/* TGZS */
-:05C0000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E98B8007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E2778015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D211AB0252131B00D211AB2052131B203802AEA17C12BBD2D20252005200D20B3689725008000E833C033AF2FC021C01642569F3C274FE91E62579F008000E8252131B42D211AB43F2F5D9F008000E8330500E0281960EC370F5C9F00E02F20233B33AD1E261EDFA71E4FE9172616DF2D2000E0A83F4FE92F2F1EAF252000E0A4164FE90FC021C2A6804FE91F62579F3F2F5D9F00E08F20A5374FE90F170FAF06C021C4008000E8008000E8A3804FE9062000E01F261FDFA11F4FE9A23F4FE9008000E8008000E806061FAF008000E8008000E8008000E8A0804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E06CFF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E86BFF0AEA008000E8C941C8EC42E100E069FF20EA008000E8008000E8008000E8C840C0EC008000E866FF20EA008000E8008000E8008000E85C
-/* TGZSF */
-:05E0000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E98F8007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E27B8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D211AB0252131B00D211AB2052131B203802AEA17C12BBD2D20252005200D20B3689725008000E833C033AF2FC021C01642569F3C274FE91E62579F008000E8252131B42D211AB43F2F5D9F008000E8330500E0281960EC0D211AB6052131B6370F5C9F00E02F20233B33AD1E261EDFA71E4FE9172616DF2D2000E0A83F4FE92F2F1EAF252000E0A4164FE90FC021C2A6804FE91F62579F0D2005202FC021C63F2F5D9F00E00F201750569FA5374FE906C021C40F170FAF370F5C9F008000E82F2000E0A3804FE9062000E01F261FDF172617DF35174FE9A11F4FE9A23F4FE906061FAF39374FE92F2F17AF008000E8A0804FE9008000E831804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E068FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E867FF0AEA008000E8C941C8EC42E100E065FF20EA008000E8008000E8008000E8C840C0EC008000E862FF20EA008000E8008000E8008000E8F9
-/* TGZSA */
-:05E0000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E98F8007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E27B8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D211AB0252131B00D211AB2052131B203802AEA17C12BBD2D20252005200D20B3689725008000E833C033AF2FC021C01642569F3C274FE91E62579F008000E8252131B42D211AB43F2F5D9F008000E8330500E0281960EC0D444CB6054454B6370F5C9F00E02F20233B33AD1E261EDFA71E4FE9172616DF2D2000E0A83F4FE92F2F1EAF252000E0A4164FE90FC021C2A6804FE91F62579F0D200520008000E83F2F5D9F00E00F201750569FA5374FE906C021C40F170FAF370F5C9F008000E82FC044C6A3804FE9062000E01F261FDF172617DF9D174FE9A11F4FE9A23F4FE906061FAF00E0AF209E374FE92F172FAFA0804FE9008000E8008000E89C804FE9008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E068FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E867FF0AEA008000E8C941C8EC42E100E065FF20EA008000E8008000E8008000E8C840C0EC008000E862FF20EA008000E8008000E8008000E883
-/* TGZAF */
-:05B8000000008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E9948007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E2808015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D211AB0252131B00D211AB2052131B203802AEA17C12BBD2D20252005200D20B3689725008000E833C033AF2FC021C01642569F3C274FE91E62579F008000E8252131B42D211AB43F2F5D9F008000E8330500E0281960EC0D211AB6052131B6370F5C9F00E02F20233B33AD1E261EDFA71E4FE9172616DF2D2000E0A83F4FE92F2F1EAF252000E0A4164FE90FC021C2A6804FE91F62579F0D2005202FC021C62D444CB6254454B63F2F5D9F00E00F202D20252007C044C61750569FA5374FE906C021C40F170FAF370F5C9F008000E81E62579F008000E83E3D5D9F00E007202F2000E0A30F4FE9062000E01F261FDF172617DFA11F4FE91E261EDF9D1E4FE935174FE9A23F4FE906061FAF39374FE92F2F17AF07071EAFA0804FE99E3E4FE931804FE99C804FE9008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E063FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E862FF0AEA008000E8C941C8EC42E100E060FF20EA008000E8008000E8008000E8C840C0EC008000E85DFF20EA008000E8008000E8008000E8D8
-:0000000001FF
diff --git a/firmware/matrox/g400_warp.H16 b/firmware/matrox/g400_warp.H16
deleted file mode 100644
index b432d1074d8d..000000000000
--- a/firmware/matrox/g400_warp.H16
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * WARP pipes are named according to the functions they perform, where
- *
- * - T stands for computation of texture stage 0
- * - T2 stands for computation of both texture stage 0 and texture stage 1
- * - G stands for computation of triangle intensity (Gouraud interpolation)
- * - Z stands for computation of Z buffer interpolation
- * - S stands for computation of specular highlight
- * - A stands for computation of the alpha channel
- * - F stands for computation of vertex fog interpolation
- */
-/* TGZ */
-:0338000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC31003900588015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF4A8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF32322DDF22222DDF12122DDF3A3A2DDF473747DF573D57DF3DCF74C037CF74C431532F9F348020E939E52C9F3C3D20E90A444CB0024454B02A444CB21A4454B21D803AEA0A2002203DCF74C22A201A2030502E9F32315FE938212C9F33395FE931532F9F008000E82A444CB41A4454B439E52C9F383D20E988735EE92A201A202A464EBF1A4656BF31532F9F3E304FE939E52C9F3F384FE90A474FBF024757BF31532F9F3A314FE939E52C9F3B394FE92A434BBF1A4353BF30502E9F36314FE938212C9F37394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9AFFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFD6FF20EA008000E84E334ECF573B57CF9DFF20EA57C0BFEA0080A0E90000D8EC59
-/* TGZF */
-:0360000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039005D8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF4F8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF32322DDF22222DDF12122DDF3A3A2DDF473747DF573D57DF3DCF74C037CF74C439E52C9F348020E931532F9F008000E888735EE9008000E827CF75C63C3D20E90A444CB0024454B02A444CB21A4454B220803AEA0A2002203DCF74C22A201A2030502E9F32315FE938212C9F33395FE931532F9F312720E90A444CB4024454B42A454DB61A4555B639E52C9F383D20E90A2002202A201A200A474FBF024757BF30502E9F3E304FE938212C9F3F384FE92A464EBF1A4656BF31532F9F3A314FE939E52C9F3B394FE931532F9F36304FE939E52C9F37384FE92A434BBF1A4353BF30502E9F35314FE938212C9F39394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9AAFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFD3FF20EA008000E84E334ECF573B57CF98FF20EA57C0BFEA0080A0E90000D8EC90
-/* TGZA */
-:0358000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039005C8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF4E8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF32322DDF22222DDF12122DDF3A3A2DDF473747DF573D57DF3DCF74C037CF74C431532F9F348020E939E52C9F3C3D20E927CF74C63DCF74C20A444CB0024454B02A444CB21A4454B220803AEA0A20022088735EE92A201A2030502E9F32315FE938212C9F33395FE931532F9F9C2720E90A444CB4024454B42A444CB61A4454B639E52C9F383D20E90A2002202A201A200A474FBF024757BF30502E9F3E304FE938212C9F3F384FE92A464EBF1A4656BF31532F9F3A314FE939E52C9F3B394FE931532F9F36304FE939E52C9F37384FE92A434BBF1A4353BF30502E9F9D314FE938212C9F9E394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9ABFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFD3FF20EA008000E84E334ECF573B57CF99FF20EA57C0BFEA0080A0E90000D8EC35
-/* TGZAF */
-:0380000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC31003900618015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF538007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF32322DDF22222DDF12122DDF3A3A2DDF473747DF573D57DF3DCF74C037CF74C40A444CB0024454B031532F9F343720E939E52C9F3C3D20E92A444CB21A4454B226803AEA0A20022088735EE92A201A203DCF74C227CF74C630502E9F32315FE938212C9F33395FE931532F9F9C2720E90A444CB4024454B42A444CB61A4454B639E52C9F383D20E90A2002202A201A203DCF75C6008000E830502E9F3E304FE938212C9F3F384FE90A454DB6024555B631532F9F3A314FE939E52C9F3B394FE9313D20E90A2002202A464EBF1A4656BF0A474FBF024757BF30502E9F36304FE938212C9F37384FE931532F9F9D314FE939E52C9F9E394FE92A434BBF1A4353BF30502E9F35304FE938212C9F39384FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9A6FF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFCDFF20EA008000E84E334ECF573B57CF94FF20EA57C0BFEA0080A0E90000D8EC89
-/* TGZS */
-:03A0000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC31003900658015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF578007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF473747DF573D57DF32322DDF22222DDF12122DDF3A3A2DDF27CF74C237CF74C40A444CB0024454B03DCF74C0343720E931532F9F382720E939E52C9F3C3D20E92A444CB21A4454B229803AEA0A20022027CF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA62720E939E52C9FA33D20E92A444CB41A4454B40A454DB0024555B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE92A454DB21A4555B20A454DB4024555B438212C9F3B394FE90A2002202A201A202A464EBF1A4656BF31532F9F36314FE939E52C9F37394FE930502E9FA7304FE938212C9FA8384FE90A474FBF024757BF31532F9FA4314FE939E52C9FA5394FE92A434BBF1A4353BF30502E9FA1304FE938212C9FA2384FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9A2FF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFCAFF20EA008000E84E334ECF573B57CF90FF20EA57C0BFEA0080A0E90000D8ECD8
-/* TGZSF */
-:03C8000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039006A8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF5C8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF473747DF573D57DF32322DDF22222DDF12122DDF3A3A2DDF27CF74C237CF74C40A444CB0024454B03DCF74C0343720E931532F9F382720E939E52C9F3C3D20E92A444CB21A4454B22E803AEA0A20022027CF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA62720E939E52C9FA33D20E92A444CB41A4454B40A454DB0024555B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A454DB21A4555B20A454DB4024555B427CF75C62A201A20A7304FE90A20022031532F9F312720E939E52C9FA8384FE92A454DB61A4555B630502E9F36314FE938212C9F37394FE9008000E82A201A202A464EBF1A4656BF31532F9FA4314FE939E52C9FA5394FE90A474FBF024757BF31532F9FA1304FE939E52C9FA2384FE92A434BBF1A4353BF30502E9F35314FE938212C9F39394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E99DFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFC5FF20EA008000E84E334ECF573B57CF8BFF20EA57C0BFEA0080A0E90000D8ECD3
-/* TGZSA */
-:03C8000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039006A8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF5C8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF473747DF573D57DF32322DDF22222DDF12122DDF3A3A2DDF27CF74C237CF74C40A444CB0024454B03DCF74C0343720E931532F9F382720E939E52C9F3C3D20E92A444CB21A4454B22E803AEA0A20022027CF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA62720E939E52C9FA33D20E92A444CB41A4454B40A454DB0024555B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A454DB21A4555B20A454DB4024555B427CF74C62A201A20A7304FE90A20022031532F9F9C2720E939E52C9FA8384FE92A444CB61A4454B630502E9F36314FE938212C9F37394FE9008000E82A201A202A464EBF1A4656BF31532F9FA4314FE939E52C9FA5394FE90A474FBF024757BF31532F9FA1304FE939E52C9FA2384FE92A434BBF1A4353BF30502E9F9D314FE938212C9F9E394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E99DFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFC5FF20EA008000E84E334ECF573B57CF8BFF20EA57C0BFEA0080A0E90000D8ECA0
-/* TGZSAF */
-:03E8000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039006E8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF608007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF473747DF573D57DF32322DDF22222DDF12122DDF3A3A2DDF27CF74C237CF74C40A444CB0024454B03DCF74C0343720E931532F9F382720E939E52C9F3C3D20E92A444CB21A4454B232803AEA0A20022027CF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA62720E939E52C9FA33D20E92A444CB41A4454B40A454DB0024555B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A454DB21A4555B20A454DB4024555B427CF74C62A201A20A7304FE90A20022031532F9F9C2720E939E52C9FA8384FE92A444CB61A4454B630502E9F36314FE938212C9F37394FE90A454DB6024555B63DCF75C62A201A202A464EBF1A4656BF31532F9FA4314FE939E52C9FA5394FE9313D20E90A2002200A474FBF024757BF30502E9FA1304FE938212C9FA2384FE931532F9F9D314FE939E52C9F9E394FE92A434BBF1A4353BF30502E9F35304FE938212C9F39384FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E999FF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFC1FF20EA008000E84E334ECF573B57CF87FF20EA57C0BFEA0080A0E90000D8EC83
-/* T2GZ */
-:0438000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC31003900788015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF698007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF12122DDF22222DDF32322DDF3A3A2DDF683D68DF493749DF3DCF74C037CF74C431532F9F348020E939E52C9F3C3D20E90A4454B0024464B02A4454B21A4464B225803AEA0A2002203DCF74C22A201A2030502E9F32315FE938212C9F33395FE931532F9F008000E82A4454B41A4464B439E52C9F383D20E988735EE92A201A202A4656BF1A4666BF31532F9F3E304FE939E52C9F3F384FE90A4757BF024767BF31532F9F3A314FE939E52C9F3B394FE92A4353BF1A4363BF30502E9F36314FE938212C9F37394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E99FFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFBEFF20EA008000E8583358CF693B69CF7DFF20EA57C0BFEA0080A0E90000D8ECAC
-/* T2GZF */
-:0460000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039007D8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF6E8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF12122DDF22222DDF32322DDF3A3A2DDF683D68DF493749DF3DCF74C037CF74C439E52C9F348020E931532F9F008000E888735EE9008000E80FCF75C63C3D20E90A4454B0024464B02A4454B21A4464B228803AEA0A2002203DCF74C22A201A2030502E9F32315FE938212C9F33395FE931532F9F310F20E90A4454B4024464B42A4555B61A4565B639E52C9F383D20E90A2002202A201A200A4757BF024767BF30502E9F3E304FE938212C9F3F384FE92A4656BF1A4666BF31532F9F3A314FE939E52C9F3B394FE931532F9F36304FE939E52C9F37384FE92A4353BF1A4363BF30502E9F35314FE938212C9F39394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E99AFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFBBFF20EA008000E8583358CF693B69CF78FF20EA57C0BFEA0080A0E90000D8ECFB
-/* T2GZA */
-:0458000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039007C8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF6D8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF12122DDF22222DDF32322DDF3A3A2DDF683D68DF493749DF3DCF74C037CF74C431532F9F348020E939E52C9F3C3D20E90A4454B0024464B02A4454B21A4464B229803AEA0A2002200FCF74C63DCF74C288735EE92A201A2030502E9F32315FE938212C9F33395FE931532F9F9C0F20E90A4454B4024464B42A4454B61A4464B639E52C9F383D20E90A2002202A201A200A4757BF024767BF30502E9F3E304FE938212C9F3F384FE92A4656BF1A4666BF31532F9F3A314FE939E52C9F3B394FE931532F9F36304FE939E52C9F37384FE92A4353BF1A4363BF30502E9F9D314FE938212C9F9E394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E99BFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFBAFF20EA008000E8583358CF693B69CF79FF20EA57C0BFEA0080A0E90000D8ECA0
-/* T2GZAF */
-:0480000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC31003900818015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF728007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF12122DDF22222DDF32322DDF3A3A2DDF683D68DF493749DF3DCF74C037CF74C40A4454B0024464B031532F9F343720E939E52C9F3C3D20E92A4454B21A4464B22E803AEA0A20022088735EE92A201A203DCF74C20FCF74C630502E9F32315FE938212C9F33395FE931532F9F9C0F20E90A4454B4024464B42A4454B61A4464B639E52C9F383D20E90A2002202A201A203DCF75C6008000E830502E9F3E304FE938212C9F3F384FE90A4555B6024565B631532F9F3A314FE939E52C9F3B394FE9313D20E90A2002202A4656BF1A4666BF0A4757BF024767BF30502E9F36304FE938212C9F37384FE931532F9F9D314FE939E52C9F9E394FE92A4353BF1A4363BF30502E9F35304FE938212C9F39384FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E996FF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFB5FF20EA008000E8583358CF693B69CF74FF20EA57C0BFEA0080A0E90000D8ECDC
-/* T2GZS */
-:04A0000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC31003900858015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF768007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF683D68DF493749DF32322DDF22222DDF12122DDF3A3A2DDF0FCF74C237CF74C40A4454B0024464B03DCF74C0343720E931532F9F380F20E939E52C9F3C3D20E92A4454B21A4464B231803AEA0A2002200FCF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA60F20E939E52C9FA33D20E92A4454B41A4464B40A4555B0024565B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE92A4555B21A4565B20A4555B4024565B438212C9F3B394FE92A201A200A2002202A4656BF1A4666BF31532F9F36314FE939E52C9F37394FE930502E9FA7304FE938212C9FA8384FE90A4757BF024767BF31532F9FA4314FE939E52C9FA5394FE92A4353BF1A4363BF30502E9FA1304FE938212C9FA2384FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E992FF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFB2FF20EA008000E8583358CF693B69CF70FF20EA57C0BFEA0080A0E90000D8EC43
-/* T2GZSF */
-:04C8000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039008A8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF7B8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF683D68DF493749DF32322DDF22222DDF12122DDF3A3A2DDF0FCF74C237CF74C40A4454B0024464B03DCF74C0343720E931532F9F380F20E939E52C9F3C3D20E92A4454B21A4464B236803AEA0A2002200FCF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA60F20E939E52C9FA33D20E92A4454B41A4464B40A4555B0024565B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A4555B21A4565B20A4555B4024565B40FCF75C62A201A20A7304FE90A20022031532F9F310F20E939E52C9FA8384FE92A4555B61A4565B630502E9F36314FE938212C9F37394FE9008000E82A201A202A4656BF1A4666BF31532F9FA4314FE939E52C9FA5394FE90A4757BF024767BF31532F9FA1304FE939E52C9FA2384FE92A4353BF1A4363BF30502E9F35314FE938212C9F39394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E98DFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFADFF20EA008000E8583358CF693B69CF6BFF20EA57C0BFEA0080A0E90000D8EC56
-/* T2GZSA */
-:04C8000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039008A8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF7B8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF683D68DF493749DF32322DDF22222DDF12122DDF3A3A2DDF0FCF74C237CF74C40A4454B0024464B03DCF74C0343720E931532F9F380F20E939E52C9F3C3D20E92A4454B21A4464B236803AEA0A2002200FCF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA60F20E939E52C9FA33D20E92A4454B41A4464B40A4555B0024565B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A4555B21A4565B20A4555B4024565B40FCF74C62A201A20A7304FE90A20022031532F9F9C0F20E939E52C9FA8384FE92A4454B61A4464B630502E9F36314FE938212C9F37394FE9008000E82A201A202A4656BF1A4666BF31532F9FA4314FE939E52C9FA5394FE90A4757BF024767BF31532F9FA1304FE939E52C9FA2384FE92A4353BF1A4363BF30502E9F9D314FE938212C9F9E394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E98DFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFADFF20EA008000E8583358CF693B69CF6BFF20EA57C0BFEA0080A0E90000D8EC23
-/* T2GZSAF */
-:04E8000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039008E8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF7F8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF683D68DF493749DF32322DDF22222DDF12122DDF3A3A2DDF0FCF74C237CF74C40A4454B0024464B03DCF74C0343720E931532F9F380F20E939E52C9F3C3D20E92A4454B21A4464B23A803AEA0A2002200FCF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA60F20E939E52C9FA33D20E92A4454B41A4464B40A4555B0024565B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A4555B21A4565B20A4555B4024565B40FCF74C62A201A20A7304FE90A20022031532F9F9C0F20E939E52C9FA8384FE92A4454B61A4464B630502E9F36314FE938212C9F37394FE90A4555B6024565B63DCF75C62A201A202A4656BF1A4666BF31532F9FA4314FE939E52C9FA5394FE9313D20E90A2002200A4757BF024767BF30502E9FA1304FE938212C9FA2384FE931532F9F9D314FE939E52C9F9E394FE92A4353BF1A4363BF30502E9F35304FE938212C9F39384FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E989FF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFA9FF20EA008000E8583358CF693B69CF67FF20EA57C0BFEA0080A0E90000D8ECEE
-:0000000001FF
diff --git a/firmware/mts_cdma.fw.ihex b/firmware/mts_cdma.fw.ihex
deleted file mode 100644
index f6ad0cbd30cb..000000000000
--- a/firmware/mts_cdma.fw.ihex
+++ /dev/null
@@ -1,867 +0,0 @@
-:1000000014360002001E021AF9FFFFFFFFFF023341
-:100010001DFFFFFFFFFFFFFFFFFFFFFFFFFF02339B
-:10002000C87581CE90FDE88583A012353CEC4D600B
-:100030007378AB8003760018B89CFA787F800376DB
-:100040000018B865FA78208003760018B820FA788E
-:10005000208003760018B81FFA90FDDDAE83AF82D2
-:1000600090FBF81200AA6005E4F0A380F690FDE88A
-:10007000A88290FDE8A982E8696005E4F20880F7AB
-:100080009001081200B390010C1200B390011012FD
-:1000900000B39001141200D190011A1200D1900106
-:1000A000201200D175D00012341A020126EF6582A9
-:1000B0007003EE658322E493F8740193F97402935C
-:1000C000FE740393F5828E83E869700122E493F64F
-:1000D000A30880F4E493FC740193FD740293FE740E
-:1000E0000393FF740493F8740593F58288831200D8
-:1000F000AA700122E493A3A883A9828C838D82F045
-:10010000A3AC83AD828883898280E32121049B8014
-:1001100080049BACAE049BFDE8049D049DFBF304AE
-:10012000A2049DFBF30502050280FED0F030F00929
-:1001300020F303F68010F7800D30F10920F303F26D
-:100140008004F38001F020F404FCD0E0CC22CCC089
-:10015000E0120163020154BC0005D0F0ACF022C3F0
-:1001600013DCFC02012ABF0009ED258275F001F8BD
-:10017000E622BF010FED2582F582EE3583F583750A
-:10018000F004E022ED258275F002F8E222D083D05F
-:1001900082F5F0C3E493A3C5F095F0C0E0C3D0F0BE
-:1001A000E493A395F04012A3A3C3E5F033500205F6
-:1001B000832582F58250020583740193C0E0E493A5
-:1001C000C0E022D083D082F5F0E4937009740193EB
-:1001D0007004A3A3800C74029365F06005A3A3A32D
-:1001E00080E7740193C0E0E493C0E022120264024D
-:1001F00001FB1202B80201FB1202DC0201FB30E03B
-:100200000720E302E622E72230E10720E302E222B0
-:10021000E32230E202E022E493221202DC02022313
-:100220001202B8020223ABF012022DCBC5F0CB2292
-:1002300030E01020E306E6F5F008E622E7F5F009E5
-:10024000E7192230E11020E306E2F5F008E222E3AC
-:10025000F5F009E3192230E206E0F5F0A3E022E42C
-:1002600093F5F074019322BB0003740922BB0107CC
-:1002700089828A83740422BB020789828A8374106C
-:1002800022740A22020284BB0007E92582F8740165
-:1002900022BB010DE92582F582EA3583F5837404DA
-:1002A00022BB020DE92582F582EA3583F5837410BD
-:1002B00022E92582F87402220202B8BF0005EDF897
-:1002C000740122BF01078D828E83740422BF02074E
-:1002D0008D828E83741022EDF87402220202DCBF3C
-:1002E0000007ED2582F8740122BF010DED2582F58E
-:1002F00082EE3583F583740422BF020DED2582F56D
-:1003000082EE3583F583741022ED2582F874022283
-:10031000020310C0E0120264020328C0E01202B817
-:10032000020328C0E01202DC02032830E00B20E3C5
-:1003300004D0E0F622D0E0F72230E10B20E304D035
-:10034000E0F222D0E0F322D0E0F022C9CDC9CACE3B
-:10035000CACBCFCB12035BEDF9EEFAEFFB22BB0069
-:100360002FBF000AFAEDF8E7F60809DAFA22BF0112
-:10037000128D828E83F802037809A3E7F0D8FA225F
-:10038000020383FAEDF8E7F20809DAFA2202038D94
-:10039000BB014DBF001489828A83F9EDF802039FE7
-:1003A00008A3E0F6D9FA220203B0BF01228D828EA3
-:1003B00083FB08C9C582C9CAC583CAE0A3C9C5826F
-:1003C000C9CAC583CAF0A3DBEAD8E8220203D38DE9
-:1003D000828E83F9EDF8E0F208A3D9FA220203DD58
-:1003E000BB024DBF001289828A83F9EDF80203EF48
-:1003F00008A3E493F6D9F922BF01238D828E83FBF3
-:1004000008C9C582C9CAC583CAE493A3C9C582C93C
-:10041000CAC583CAF0A3DBE9D8E722020422898295
-:100420008A83F9EDF8E493F208A3D9F922020433A0
-:10043000BF000DFAEDF8E3F60809DAFA2202043DEE
-:10044000BF01128D828E83F802044A09A3E3F0D81B
-:10045000FA22020455FAEDF8E3F20809DAFA220268
-:10046000045FE6FB08E6FA08E6F904F618700106F0
-:1004700022E6FF08E6FE08E6FD22EFF0A3EEF0A379
-:10048000EDF022EBF0A3EAF0A3E9F022E0FFA3E015
-:10049000FEA3E0FD22E0FBA3E0FAA3E0F9220000C6
-:1004A00000000000000502006105710026059800AB
-:1004B000330A0900610A750066154400610CF900F1
-:1004C0006109A9006109E000610DC000610BF10044
-:1004D000610A1C00610A510061173C0033174F008C
-:1004E000341E1400431EBF0044202C0044201A0078
-:1004F000471EE600471F8B004D1FDC004F1F080002
-:100500005832A800617CCC7DFF121CC52290FFFCF4
-:10051000E020E72DC2AFAE59AF58755A20E55A1406
-:10052000C55A6019E4FE7F05EE4FCE24FFCECF34CE
-:10053000FFCF6007E490FF92F080ED80E08E598F4E
-:10054000582212050A7D077CB71232C47D0F7C6EDB
-:100550001232DE789D7A06E4F608DAFC7A06120595
-:10056000CD7C03120E55122168E4FEFF7C0F12327F
-:100570004DD2A822123138E490FC38F090FFF0E020
-:1005800030E408740190FC39F08005E490FC39F007
-:100590007D0A7C001225461231BB2212313890FCB4
-:1005A00039E014700E90FFF0E04410F07C0012254A
-:1005B000DF801990FC39E0700E90FFF0E054EFF00E
-:1005C0007C001225DF80057C171225DF1231BB224B
-:1005D00090FFF0E054ABF090FFF0E04420F0228C6C
-:1005E000378D367882EDF608ECF6EDFEECFD7F01F6
-:1005F0009000051201F57880F67882E6FD08E6FCA9
-:10060000EDFEECFD7F019000041201F5540FFC7D1E
-:100610008012176D7880E6700DAD3AAE39AF38E4D0
-:100620001203187C082290FFF0E054FEF090FFF0D7
-:10063000E054FDF0801E7882E6FD08E6FCEDFEEC5D
-:10064000FD7F0190000812021725E0440190FFF39E
-:10065000F00206D97882E6FD08E6FCEDFEECFD7FAF
-:100660000190000612021754FE90FFF3F0802B78E1
-:1006700082E6FD08E6FCEDFEECFD7F01900008122D
-:100680000217FAEB90FFF1F01208C8400DAD3AAE38
-:1006900039AF38E41203187C18227882E6FD08E6A8
-:1006A000FCEDFEECFD7F0190000812021790FFF1B7
-:1006B000F01208C8400DAD3AAE39AF38E412031855
-:1006C0007C18227882E6FD08E6FCEDFEECFD7F0159
-:1006D000900006120217440190FFF3F07883E6249D
-:1006E00003F618E63400F67880E624FE500990FF01
-:1006F000F0E054FDF0800790FFF0E04402F0E49059
-:10070000FFF1F0788176007880E624FFFCE434FF86
-:10071000FD7881E67F00FEECD39EEF6480CD64809F
-:100720009D402F1208AD400F7881E6AD3AAE39AF4B
-:10073000381203187C182290FFF2E0FC788286833E
-:10074000088682ECF0788106A37882A68308A682C8
-:1007500080B51208AD400F7881E6AD3AAE39AF38BA
-:100760001203187C182290FFF2E0FC78828683083E
-:100770008682ECF07880E6AD3AAE39AF38120318D5
-:100780007C00228C378D367882EDF608ECF6EDFE93
-:10079000ECFD7F019000051201F57881F67882E684
-:1007A000FD08E6FCEDFEECFD7F019000041201F572
-:1007B000540FFC7D8112176D7881E670037C08224E
-:1007C00090FFF0E054FEF090FFF0E054FDF0801B4D
-:1007D0007882E6FD08E6FCEDFEECFD7F0190000866
-:1007E00012021725E090FFF3F0805B7882E6FD08A7
-:1007F000E6FCEDFEECFD7F0190000612021754FEB0
-:1008000090FFF3F080217882E6FD08E6FCEDFEEC37
-:10081000FD7F01900008120217FAEB90FFF1F01231
-:1008200008C840037C18227882E6FD08E6FCEDFE4D
-:10083000ECFD7F0190000812021790FFF1F0120802
-:10084000C840037C18227883E6240AF618E63400B0
-:10085000F6788076007881E624FFFCE434FFFD78AA
-:1008600080E67F00FEECD39EEF6480CD64809D40E7
-:100870002178828683088682E090FFF1F01208C812
-:1008800040037C1822788006788306E618700106FB
-:1008900080C390FFF0E04401F0788286830886826E
-:1008A000E090FFF1F01208C840037C18227C00227F
-:1008B00090FFF0E020E71290FFF0E030E50990FFB4
-:1008C000F0E04420F0C32280E7D32290FFF0E02044
-:1008D000E31290FFF0E030E50990FFF0E04420F0F3
-:1008E000C32280E7D3228C428D417C00ED54F0FD81
-:1008F000EC7003ED64307005753E038003753E04B3
-:10090000AC3E120F72758300858340E541540FF5AC
-:100910003FE5407004E53F64037035E53E24FD7516
-:10092000F00AA42402F582E434FCF583E030E60505
-:100930001210598019E53E249DF8E654FBF678A97B
-:10094000E62405F58218E63400F583740FF080592B
-:10095000E5407004E53F64047048E53E24FD75F011
-:100960000AA42402F582E434FCF583E030E507AC08
-:1009700042AD41121C5AE54230E21578ADE630E056
-:100980000F78ADE630E109E4FF04FE7C0412324D3D
-:1009900078A9E62406F58218E63400F583740FF092
-:1009A0008007E4FC7DEE121C5AC203221231381279
-:1009B0000F7278A9E62406F58218E63400F583E084
-:1009C00090FC38F078A9E62405F58218E63400F5A5
-:1009D00083E090FC39F0C2037D027C0012254612B0
-:1009E00031BB221231387895ECF6EC249DF8E630D4
-:1009F000E1077C131225DF800F90FC39E0FD78952C
-:100A0000E6FC1213EF1225DF1231BB2212313878C7
-:100A100095ECF67D00120F121225DF1231BB221267
-:100A200031387895ECF6EC249DF8E630E2077C133B
-:100A30001225DF801B7895E6249DF8E620E1077CEF
-:100A4000121225DF800A7895E6FC1214131225DFB6
-:100A50001231BB221231387895ECF6EC249DF8E681
-:100A600020E2077C111225DF800A7895E6FC12153A
-:100A7000141225DF1231BB221231387895ECF612B0
-:100A80000F7278A9E62409F58218E63400F583E0B0
-:100A900090FC3FF078A9E6240AF58218E63400F5C8
-:100AA00083E090FC40F078A9E62403F58218E63450
-:100AB00000F583E0FC78A9E62404F58218E634000A
-:100AC000F583E0F56278A9E62402F58218E63400A1
-:100AD000F583E0F5638C61E4EC333354017895F6EB
-:100AE0006008E56230E1037895067895E690FC4170
-:100AF000F078A7E62402F58218E63400F583E0FDDD
-:100B0000A3E0540CFCED54E68C65F564E56130E53A
-:100B100003436501E56220E50EE561547F7008E559
-:100B20006120E703436502E56130E303436510E5B7
-:100B30006130E203436520E561540360034365408F
-:100B4000E56130E103436580E56130E4034364011E
-:100B5000E56130E603436408E56220E40EE5615494
-:100B60007F7008E56120E7034364105365FB53641D
-:100B7000F9AD64E56590FC3ACDF0A3CDF0E56330C6
-:100B8000E30DE5635430C4540F90FC3DF08005E460
-:100B900090FC3DF0E563540390FC3CF0E5635404A5
-:100BA000C31390FC3EF090FC3CE0700E7D357EFC63
-:100BB0007F01740190000912014B78A9E62408F521
-:100BC0008218E63400F583E07C00FD78A9E624076E
-:100BD000F58218E63400F583E07F004CFEEF4D907F
-:100BE000FC38F0A3CEF0CEC2037D0A7C001225466D
-:100BF0001231BB221231387895ECF6789A760108DA
-:100C000076FC0876387897760C789A12046E120281
-:100C10001D7898CBF6CB08F67F00EF24EA401FE45E
-:100C2000EF25E090357EFD93CD04937899667003AF
-:100C3000ED186670067897760080030F80DC789652
-:100C4000EFF6789A12046E9000021202177898CB91
-:100C5000F6CB08F65404CB54064B60047897760B19
-:100C60007899E630E313789A12046E900005120129
-:100C7000F524FB50047897760D7899E654C07D00F2
-:100C800064C04D70047897760B789A12046E9000C9
-:100C9000041201F524FC50047897760F789A120418
-:100CA0006E9000061201F524FD50047897760E78B8
-:100CB0009A12046E9000091201F524FD50047897F1
-:100CC000760A7897E6702A7895E6FC120F72789A81
-:100CD00012046E78A7E6F978A6E6FA7B01740A7822
-:100CE00000120348C2037895E6FC1211157897ECC0
-:100CF000F67897E6FC1225DF1231BB2212313878E4
-:100D000095ECF6120F727895E624FD75F00AA4248E
-:100D100014F582E434FCF583AC82AD8378A6868337
-:100D2000088682ECF9EDFA7B0A78011203B0C2035F
-:100D30007895E6FC1211151231BB228D2B8C2AED11
-:100D400060407527017529487528FFE52A24FDFCB8
-:100D5000E434FFFDEC7C0325E0CD33CDDCF9FCE58C
-:100D6000292CF529E5283DF528AD29AE28AF2774B3
-:100D7000809000061203207480900002120320125B
-:100D80000FC5E52B14603B7527017529087528FFF1
-:100D9000E52A24FDFCE434FFFDEC7C0325E0CD33A3
-:100DA000CDDCF9FCE5292CF529E5283DF528AD2910
-:100DB000AE28AF27E4900006120320E49000021250
-:100DC0000320221231387895ECF6EC249DF8E630B9
-:100DD000E2097895E6FC121514D2007895E6FC122B
-:100DE0000F727896760090FC39E030E704789676BA
-:100DF000017896E6FD7895E6FC120D38C2033000C6
-:100E0000077895E6FC1214137C001225DF1231BB23
-:100E10002278A9E62404F58218E63400F583E0443C
-:100E200001F078A9E62404F58218E63400F583E0A1
-:100E300030E00280ED78A9E6240BF58218E6340054
-:100E4000F583E054F8F078A9E62402F58218E63438
-:100E500000F583E04480F022C2038C58120F7278B0
-:100E6000A6868308868279AF7A357B0A78011203D9
-:100E7000FE120E0EAC587D02120D38C203AC581291
-:100E80001115228D538E528F518C50120F72754F47
-:100E90000078A9E62405F58218E63400F583E02001
-:100EA000E41FE54F24F64019054FC2037C181232A7
-:100EB000FB90FF93E04401F0B2B3AC50120F72808C
-:100EC000D078A9E62405F58218E63400F583E02001
-:100ED000E405C2037C022278A9E62405F58218E61F
-:100EE0003400F583E0540F601678A9E62405F582F6
-:100EF00018E63400F583E0540FF0C2037C01227839
-:100F0000A88683088682E0AD53AE52AF5112031813
-:100F1000C2037C00228D318C30121514E531600F34
-:100F2000E530B4030A7C0112250E7C8112250EAC3B
-:100F300030120F72E531601A78AA8683088682E043
-:100F400054E7F0A3A3A3A3E054E7F0AC307D021272
-:100F50000D3878A6868308868279B97A357B0A7837
-:100F6000011203FEC203E530249DF8E654FDF6AC01
-:100F700030121115228C2630030512329A80F87C2B
-:100F80000A1231ADD203E52624FD78A3F670077866
-:100F9000AA76FF0876E078A3E67D007C0425E0CD04
-:100FA00033CDDCF9FC24A078A9F6ED34FF18F678EF
-:100FB000A3E675F00AA42400FCE434FCFD78A6ED59
-:100FC000F608ECF61232462278A9E62402F58218D9
-:100FD000E63400F583E030E72278A9E62402F582C2
-:100FE00018E63400F583E0547FF078A9E62402F592
-:100FF0008218E63400F583E04480F02278AA8683E4
-:10100000088682E0547FF0AD83E5822404FCE43D51
-:101010008C82F583E0547FF078A9E6240BF58218E2
-:10102000E63400F583E054F8F078ABE62401F5826D
-:1010300018E63400F583E04403F078ABE62405F5C8
-:101040008218E63400F583E04403F078A9E624052D
-:10105000F58218E63400F583740FF02278AA8683AF
-:10106000088682E0543FF0AD83E5822404FCE43D31
-:101070008C82F583E0543FF078A3E624A4F8E6FCE4
-:1010800078ABE62401F58218E63400F583ECF078BD
-:10109000A3E624A4F8E6FC78ABE62405F58218E67E
-:1010A0003400F583ECF078A9E6240BF58218E634D9
-:1010B00000F583E054FB4402F52678A7E62402F508
-:1010C0008218E63400F583E030E50343260178A971
-:1010D000E62405F58218E63400F583E030E00312DB
-:1010E0000FC5E526FC78A9E6240BF58218E6340046
-:1010F000F583ECF078A9E62405F58218E63400F5CE
-:1011000083740FF078AA8683088682E04480F0A377
-:10111000A3A3A3E04480F0228C2A120F7278A7E6E2
-:101120002408F58218E63400F583E0FC78A9E6246B
-:101130000AF58218E63400F583ECF078A7E6240778
-:10114000F58218E63400F583E0FC78A9E62409F579
-:101150008218E63400F583ECF078A6868308868250
-:10116000E0FDA3E0FCEDFE78A9E62408F58218E690
-:101170003400F583EEF0ECFE78A9E62407F582183A
-:10118000E63400F583EEF08C298D28C3EC9405ED50
-:10119000940C400575277C8033D3E5299401E5281C
-:1011A0009403400575273C8023D3E5299481E528E5
-:1011B000940140057527188013D3E5299460E5282C
-:1011C0009400400575270C8003752708AF27E4EFCE
-:1011D000547C4483FF8F27E527FC78ABE62401F598
-:1011E0008218E63400F583ECF0E527FC78ABE624C2
-:1011F00005F58218E63400F583ECF0E527FC78A3CA
-:10120000E624A4F8ECF678A9E62402F58218E63480
-:1012100000F583E0F52778A7E62402F58218E63486
-:1012200000F583A3E030E3175327C778A7E624052A
-:10123000F58218E63400F583E09035AA93422778CA
-:10124000A7E62402F58218E63400F583E030E705CE
-:1012500043274080035327BF5327FB78A7E6240684
-:10126000F58218E63400F583E06003432704532732
-:10127000FC78A7E62404F58218E63400F583E04202
-:1012800027432780E527FC78A9E62402F58218E6A3
-:101290003400F583ECF078A9E62404F58218E634EE
-:1012A00000F583E0F52778A7E62402F58218E634F6
-:1012B00000F583A3E030E1055327DF8003432720B7
-:1012C00078A7E62402F58218E63400F583E030E4DE
-:1012D000055327EF800343271078A7E62409F582FA
-:1012E00018E63400F583E0B40203432702E527FC47
-:1012F00078A9E62404F58218E63400F583ECF0784A
-:10130000A9E62403F58218E63400F583E0F5277892
-:10131000A7E62409F58218E63400F583E07005534A
-:10132000277F800343278078A7E62402F58218E60A
-:101330003400F583A3E030E00543272080035327E2
-:10134000DF78A7E62402F58218E63400F583E03062
-:10135000E30543274080035327BF78A7E62402F51F
-:101360008218E63400F583E030E00543271080035F
-:101370005327EF78A7E62402F58218E63400F583B8
-:10138000A3E030E40543270880035327F778A7E656
-:101390002402F58218E63400F583A3E030E5054326
-:1013A000270480035327FB78A7E62402F58218E67A
-:1013B0003400F583A3E030E605432701800353277B
-:1013C000FE78A7E62402F58218E63400F583A3E050
-:1013D00030E70543270280035327FDE527FC78A962
-:1013E000E62403F58218E63400F583ECF0C2037CB2
-:1013F00000228D278C26ED54031460037C1022E517
-:1014000027547C24FC40037C0B22E526249DF8E62F
-:101410004402F67C00228C30120F72E530249DF8D5
-:10142000E620E24FAC307D02120D38E53024FE4458
-:1014300028FC78AA8683088682ECF0AF83E58224B4
-:1014400004FEE43FFFEC8E828F83F07C038C2CE55E
-:101450002CFC78ABE62401F58218E63400F583EC29
-:10146000F0E52CFC78ABE62405F58218E63400F5AF
-:1014700083ECF0752D01752F48752EFFE53024FDA6
-:10148000FCE434FFFDEC7C0325E0CD33CDDCF9FC3E
-:10149000E52F2CF52FE52E3DF52E78ABE62404F54F
-:1014A0008218E63400F583E054E7F52CAD2FAE2E1C
-:1014B000AF2DE4900002120320E4900006120320F6
-:1014C0001201EF30E503432C10E52CFC78ABE62449
-:1014D00004F58218E63400F583ECF012105978A96F
-:1014E000E62406F58218E63400F583E0C203FCE545
-:1014F00030249DF8E64404F68C2CE530540FC45497
-:10150000F07E00FFEEEF44047D00FFEC4EFCED4F5B
-:10151000FD121CC57C00228C2F120F72120FF9785D
-:10152000AA8683088682E05408F0A3A3A3A3E0540C
-:1015300008F0AC2F7D02120D38C203E52F249DF870
-:10154000E654FBF67C00221231387896ECF6EC2457
-:101550009DF8E630E10A7D007C131225461231BB6E
-:101560007896E6249DF8E64401F67896E6FC120F9C
-:10157000727896E624FD75F00AA42414F582E4340A
-:10158000FCF58378A6E6FA08E6F97B0A78011203EF
-:10159000B078A6868308868279B97A357B0A780185
-:1015A0001203FE120FC5C2037896E6FC12111578DD
-:1015B00095ECF6EC600A7D007C081225461231BBE2
-:1015C0007896E6FC120F7278A9E62404F58218E6F4
-:1015D0003400F583E0441054DFFC78A9E62404F5D8
-:1015E0008218E63400F583ECF07895ECF6C2037CC3
-:1015F000C81232FB7896E6FC120F7278A9E6240432
-:10160000F58218E63400F583E054EFF0C2037CC89D
-:101610001232FB7896E6FC120F7278A9E62404F5E4
-:101620008218E63400F583E04410F0C2037CC8124F
-:1016300032FB7896E6FC120F7278A9E62404F58254
-:1016400018E63400F583E04420F0C2037CF0123247
-:10165000FB7896E6FC120F7278A9E62405F582184D
-:10166000E63400F583E030E415C2037896E64410D2
-:101670007F00FE7C0712324D1231BB02173B78A966
-:10168000E62404F58218E63400F583E054CFF0C276
-:10169000037CC81232FB7896E6FC120F7278A9E63A
-:1016A0002404F58218E63400F583E04430F0C203E8
-:1016B0007CF01232FB7896E6FC120F7278A9E624D1
-:1016C00005F58218E63400F583E030E414C20378AF
-:1016D00096E644107F00FE7C0712324D1231BB802B
-:1016E0005D78A9E62404F58218E63400F583E05419
-:1016F000EFF078A9E62404F58218E63400F583E0DB
-:1017000054DFF07896E624FD75F00AA42414F582DF
-:10171000E434FCF583AC82AD8378A68683088682A8
-:10172000ECF9EDFA7B0A78011203B0C2037896E671
-:10173000FC1211157D007C0B1225461231BB2212C2
-:101740003138E490FC39F07D027C001225461231DC
-:10175000BB221231387C001225DF1231BB22743CCF
-:1017600090FBE0F0743E90FBE0F0E490FC28F02267
-:101770008D358C34ECB401028003D340028028B450
-:1017800002028003D34008A835E625E0F68018B4AD
-:1017900004028003D3400AA835E625E025E0F68060
-:1017A00006A83576008000228C3C8D3BEDFEECFDDA
-:1017B0007F0175660675670090FC29120477120197
-:1017C000EFB480028006D3500302186E90FC2912F9
-:1017D00004899000031201F554F0B430028003D361
-:1017E000405F90FC29120489900008120217FAFD4C
-:1017F000EBFE7F0190FC2C120477EECD9035C3FCFC
-:10180000E493FF740193FEF9EFFA7B01EAFFE9FE2E
-:10181000ECC39EED9F40259035C5E493FD74019384
-:10182000FCEDFEECFD7F01EECDFC90FC2EE0D39CA8
-:1018300090FC2DE09D5005756680803312198C80D8
-:101840002EB460028003D3400BAC3CAD3B1207804A
-:101850008C66801BB41003B34010C3B42003B340A4
-:1018600009C3B440028003D34000756681800080C4
-:1018700075B481028003D3406B90FC2912048990D7
-:1018800000031201F554F0B430028003D3401D90E0
-:10189000FC29120489900008120217FAFDEBFE7F62
-:1018A0000190FC2F1204771218F68036B460028083
-:1018B00003D34013753A67E4F539F538AC3CAD3BDA
-:1018C0001205DC8C66801BB41003B34010C3B42037
-:1018D00003B34009C3B440028003D340007566815E
-:1018E000800080028000E566FC90FC29120489ECEF
-:1018F000900002120320AC672290FC291204899008
-:1019000000041201F5600474018001E4A2E0920178
-:1019100090FC29120489ED2403FD50010E90FC2C4B
-:1019200012047790FC291204899000051201F5F544
-:10193000679000041201F5540FFC7D6712176DE5E6
-:10194000677004756608227566007884760078846E
-:10195000E6C39567503890FC2F1204891201EFFC02
-:1019600090FC2C120489EC12031830010E90FC310B
-:10197000E004F090FC307003E004F078840690FC02
-:101980002EE004F090FC2D7003E004F080C0229063
-:10199000FC2AE0FDA3E0FCEDFEECFD7F01ED240A56
-:1019A000FD50010E90FC3212047790FC291204893C
-:1019B0009000041201F5540FB401028003D34017C4
-:1019C00090FC321204890DED70010E90FC2F120470
-:1019D0007778887601804EB402028003D340199054
-:1019E000FC32120489ED2402FD50010E90FC2F12EE
-:1019F000047778887602802DB404028003D34019DE
-:101A000090FC32120489ED2404FD50010E90FC2F4D
-:101A100012047778887604800CB400028003D340E7
-:101A2000007566082290FC291204899000051201B5
-:101A3000F5F567788576007885E6C39567400302FB
-:101A40001AF4788676007886E6C378889650769081
-:101A5000FC2C1204891201EFFC90FC321204921249
-:101A600001E9F45CFC1201E9F890FC2F120489E80A
-:101A7000C0E01201EFC8D0E0C8584CFC90FC2C121A
-:101A80000489EC1203187887ECF690FC31E004F03E
-:101A900090FC307003E004F009E970010A90FC3218
-:101AA00012048090FC291204899000041201F53080
-:101AB000E40E90FC2EE004F090FC2D7003E004F0A6
-:101AC00078860680817888E6FDE4FEFFEECDFC9006
-:101AD000FC31E02CF090FC30E03DF07888E6FDE44D
-:101AE000FEFFEECDFC90FC34E02CF090FC33E03DAA
-:101AF000F0788506021A347566002222C0E0C0F034
-:101B0000C082C083C0D0E8C0E0E9C0E0EAC0E0EB3A
-:101B1000C0E0ECC0E0EDC0E0EEC0E0EFC0E090FF60
-:101B200092E01201C01B47301B47321B56381B681E
-:101B30003A1B7A3E1B92441B86461B9E501BE0526A
-:101B40001BBF541C015600001C2290FF92E07F0036
-:101B5000FE7C0112324D021C32E4FF04FE7C0312B3
-:101B6000324D742090FFFEF0021C32E4FF04FE7C34
-:101B70000212324D744090FFFEF0021C32E4FF046A
-:101B8000FE7C0412324D021C32E4FF04FE7C05127E
-:101B9000324D021C32E4FF04FE7C0612324D021C60
-:101BA0003290FFA5E07D0090FBF8CDF0A3CDF09042
-:101BB000FBF9E0FCF58390FBF8E04433FD121CC513
-:101BC000807390FFB5E07D0090FBFACDF0A3CDF0DF
-:101BD00090FBFBE0FCF58390FBFAE04443FD121C14
-:101BE000C5805290FFA6E07D0090FBFCCDF0A3CD18
-:101BF000F090FBFDE0FCF58390FBFCE04434FD122B
-:101C00001CC5803190FFB6E07D0090FBFECDF0A3B7
-:101C1000CDF090FBFFE0FCF58390FBFEE04444FD3B
-:101C2000121CC5801090FF92E07D00FCED44AAFDDF
-:101C3000121CC58000E490FF92F0D0E0FFD0E0FEDF
-:101C4000D0E0FDD0E0FCD0E0FBD0E0FAD0E0F9D06D
-:101C5000E0F8D0D0D083D082D0F0D0E0320581053A
-:101C60008105810581A881181818EDF608ECF69019
-:101C7000FF5AE020E70280F790FF59E07D00A8813D
-:101C800018CDF6CD08F67D03A881E618FCE6CC2534
-:101C9000E0CC33CCDDF9CCF6CC08F6A88118E644CC
-:101CA000F8F6A881181818E6FD08E6FCA881188641
-:101CB00083088682EDF0A3ECF0740290FF5AF015D1
-:101CC0008115811581158122E5812405F581E4A81E
-:101CD0008118F6A88118181818EDF608ECF690FB94
-:101CE000F5E024F85003021DE6E4A8811818F6A8D0
-:101CF0008118E6FEA88118181818E6FD08E6FC7F92
-:101D000000EF24F8404DE4EF25E0247DF582E43433
-:101D1000FCF583E0FBA3E06C7003FAEB6D700974D3
-:101D200001A8811818F6802BE4EF25E0247DF582C8
-:101D3000E434FCF5837A00E054F0CCF8CCCDF9CD56
-:101D4000FB7800E954F0F9EA687002EB6970010E63
-:101D50000F80AEA88118EEF6A88118181818EDF6B5
-:101D600008ECF6A881EFF6A8811818E67079A8812A
-:101D700018E624F74071A88118181818E6540FA81F
-:101D800081F664046017A881E664036010A88118D6
-:101D9000181818E6FD08E6FC121C5A804A7C0A1244
-:101DA00031ADA88118181818E6FD08E6FC90FBF480
-:101DB000E025E0247DF582E434FCF583EDF0A3EC2E
-:101DC000F090FBF4E0FFE4EF045407FF90FBF4F025
-:101DD00090FBF5E004F012324690FBF6E07008E468
-:101DE000FEFF7C0F12324D802790FBF7E004F05489
-:101DF0003F701D90FBF7E044FE7D00FC90FBF4E09B
-:101E000025E0247DF582E434FCF583EDF0A3ECF0CD
-:101E1000E58124FBF58122788B7600788C7600743E
-:101E20000190FBF6F012313890FBF5E060577C0A28
-:101E30001231AD90FBF3E025E0247DF582E434FC23
-:101E4000F583E0FDA3E0FC90FBF3E025E0247DF5C5
-:101E500082E434FCF583E4F0A3F090FBF3E0FFE4CC
-:101E6000EF045407FF90FBF3F090FBF5E014F078DB
-:101E700089EDF608ECF61232467889E6FD08E6FCB4
-:101E80001208E380A312329A90FF93E04401F0B26B
-:101E9000B3788B06B60011788B7600788CE6F40464
-:101EA00004A2E092B4788CF6021E25E490FBF6F0D2
-:101EB00090FBF5E07D00FCED44CFFD121C5A123181
-:101EC000BB22123138E5706449456F601590FF837D
-:101ED000E0540F7D00D39570ED956F5005122F8162
-:101EE00080031230511231BB22123138E57064493F
-:101EF000456F600512308B800E90FF80E04408F043
-:101F000090FF83E0547FF01231BB221231388C54A1
-:101F1000EC54F0B41015756A357569FC756801E507
-:101F20006A2403F56AE5693400F569E4F557F55666
-:101F3000E556C394015027E554540FFCAD6AAE69D1
-:101F4000AF68120E808C55EC60028012056AE56A5B
-:101F5000700205690557E5577002055680D2E554B1
-:101F6000540F249DF8E654FEF6E554540F7F00FE0E
-:101F70007C1212324DE5551470097D007C09122542
-:101F8000468007AD577C001225461231BB22123124
-:101F90003890FFFCE04402F090FF00E030E713903F
-:101FA000FF83E04480F0436D8090FFFCE04401F04B
-:101FB000801190FF82E04408F0536D7F90FFFCE0B9
-:101FC00054FEF090FF81E04480F01225F990FFFE6E
-:101FD000E04405F090FFFCE054FDF01231BB22120A
-:101FE00031387C011232FB78ADE64402F674FEFC17
-:101FF00004FD121CC590FF5AE030E70280F7E4F5BB
-:102000004E754D10AC4EAD4DE54E154E7002154D52
-:10201000EC4D600280EE4387011231BB2212313851
-:102020007C021231C778ADE654FDF61231BB2212A4
-:10203000313878ADE630E02C78ADE630E12678AD89
-:10204000E6FCF58318E644F0FD121C5A90FFFCE014
-:102050004420F07C021232FB78ADE654FDF6741A8F
-:1020600090FFFEF078ADE6FCF58318E644F1FD1232
-:102070001C5A1231BB22756D0090FFFFE0600343D4
-:102080006D01756E00E4F56CF56BE4F56F757049E4
-:10209000748490FF82F0748490FF80F0748090FFCD
-:1020A00058F0748090FF5AF0AD46AF457E00EE24A4
-:1020B000FE5003022142E4EE75F007A4247FF5826E
-:1020C000E434F8F583E0FFE4EF5480FDE4EF540FCF
-:1020D00014FFED6038E4EF75F008A42448F582E4BD
-:1020E00034FFF5837490F0E4EF75F008A4244AF50A
-:1020F00082E434FFF5837480F0E4EF75F008A424E3
-:102100004EF582E434FFF5837480F08034E4EF759B
-:10211000F008A42408F582E434FFF5837490F0E419
-:10212000EF75F008A4240AF582E434FFF583E4F0A7
-:10213000E4EF75F008A4240EF582E434FFF583E49F
-:10214000F00E0220AB8D468E448F45747F90FFFDCC
-:10215000F0749090FFFCF0228C58EC24F65006E5C9
-:10216000582437FC22E5582430FC22D2B0122543F3
-:10217000EC700302227E755C03AE5B7F00E55C15AC
-:102180005C6480247F5035EF2400F582E434FBF555
-:1021900083E0FE24FE501EEF7D00FCE4FB7474C35C
-:1021A0009CFAEB9DFBEE7D00FCEAC39CED6480CBCA
-:1021B00064809B50028005EF2EFF80C18E5B8F5A9A
-:1021C000E55C6480247F500302227EE55A248E5011
-:1021D0000302227E855A5D755B00AE5AAF5B903577
-:1021E000EEE493F55CE55C155C6480247F5018EEAA
-:1021F0002400F582E434FBF583E0FCEF9035EE93A8
-:102200006C70040E0F80DE8E5A8F5BE55C64802458
-:102210007F406E755E017560E8755FFFE55D2402C5
-:10222000F55A755C07E55C334057AD60AE5FAF5E55
-:10223000E55CF5823395E0F5831201F5C4540FFC9B
-:10224000122155E55A2400F582E434FBF583ECF0C5
-:10225000055A055AAD60AE5FAF5EE55CF582339519
-:10226000E0F5831201F5540FFC122155E55A2400C4
-:10227000F582E434FBF583ECF0055A055A155C80D1
-:10228000A4740290F851F090F86B79C77A357B27E7
-:1022900078011203FE756A357569FC756801E49072
-:1022A000FF83F0748090FF81F0755902E55975F055
-:1022B00007A4247FF582E434F8F583E0788FF6FCF8
-:1022C000540F14FC788FECF6E55975F007A42481BF
-:1022D000F582E434F8F583E0789276FD0876E8FC40
-:1022E000788FE675F008A42448F582E434FFF5837E
-:1022F000E4F0788FE675F008A4244FF582E434FF0B
-:10230000F583ECF07892E6FF08E67E03CFC313CFA7
-:1023100013DEF9FE788FE675F008A42449F582E40F
-:1023200034FFF583EEF0788FE675F008A4244AF5C3
-:1023300082E434FFF5837480F07890ECF67D0078C9
-:1023400093E62CF618E63DF67892E6FD08E67C0367
-:10235000CDC313CD13DCF9FC788FE675F008A42407
-:102360004DF582E434FFF583ECF0788FE675F008E4
-:10237000A4244EF582E434FFF583E4F07892E6FD80
-:1023800008E6FC788FE6FF7E00EE24FE5003022470
-:10239000FDE4EE75F007A4247FF582E434F8F583BC
-:1023A000E0FFE4EF5480FAE4EF540F14FFE4EE751D
-:1023B000F007A42481F582E434F8F583E07890F600
-:1023C000E4EE1313548024F0F8E434FDF9E8FCE95A
-:1023D000FD8A5AEA700302246AE4EF75F008A42427
-:1023E00048F582E434FFF583E4F07890E6FAE4EF10
-:1023F00075F008A4244FF582E434FFF583EAF0ED8C
-:10240000FBEC7A03CBC313CB13DAF9FAE4EF75F0E4
-:1024100008A42449F582E434FFF583EAF07890E6D5
-:102420007B00FAEC2AFCED3BFDFBEC7A03CBC313FB
-:10243000CB13DAF9FAE4EF75F008A4244DF582E441
-:1024400034FFF583EAF0E4EF75F008A4244AF5823E
-:10245000E434FFF5837480F0E4EF75F008A4244EB3
-:10246000F582E434FFF5837480F00224F9E4EF751B
-:10247000F008A42408F582E434FFF583E4F07890B2
-:10248000E6FAE4EF75F008A4240FF582E434FFF5D2
-:1024900083EAF0EDFBEC7A03CBC313CB13DAF9FA42
-:1024A000E4EF75F008A42409F582E434FFF583EA2B
-:1024B000F07890E67B00FAEC2AFCED3BFDFBEC7A31
-:1024C00003CBC313CB13DAF9FAE4EF75F008A424B5
-:1024D0000DF582E434FFF583EAF0E4EF75F008A42B
-:1024E000240AF582E434FFF583E4F0E4EF75F008A4
-:1024F000A4240EF582E434FFF583E4F00E02238673
-:102500008E597892EDF608ECF6788FEFF61220737C
-:10251000228C26EC30E718E526540F1475F008A439
-:102520002448F582E434FFF583E054DFF08016E5BB
-:1025300026540F1475F008A42408F582E434FFF53E
-:1025400083E054DFF0227C0022EC90FC37F08C24F6
-:10255000ED2403F5257D00D39572ED95714003853B
-:102560007225E52524B75009752503740290FC37C0
-:10257000F0AC2512307622E4F56CF56B12257D2245
-:1025800090FC35E06573600E740490FC37F0E4F560
-:102590006B756C0380467D73E4FEFF79357AFC7BB6
-:1025A0000174057800120348E56C2403F56CE56BB3
-:1025B0003400F56BE56CD39572E56B95714006853B
-:1025C000726C85716BD3E56C9448E56B9400400C9C
-:1025D000740290FC37F0E4F56B756C03AC6C123050
-:1025E0007622EC90FC37F0E4F56CF56B8C32EC6005
-:1025F0000512306780057C001230762290FF93E050
-:102600004401F0B2B390FF04E0F54A90FF06E0FD0C
-:10261000A3E0ED7D00FC7D00FC90FF06E0FFA3E061
-:102620007E00FFE4FEEC4EFCED4FFDC3EC9448ED64
-:102630009400502290FF06E0FDA3E0ED7D00FC7DBC
-:1026400000FC90FF06E0FFA3E07E00FFE4FEEC4EFE
-:10265000FCED4FFD8004E4FD7C488C728D7190FF91
-:1026600002E0FDA3E0ED7D00FC7D00FC90FF02E0B8
-:10267000FFA3E07E00FFE4FEEC4EF54CED4FF54B82
-:10268000756A357569FC7568017D357EFC7F017959
-:1026900073E4FAFB74057800120348754900E549B4
-:1026A00024FE4019AD6AAE69AF68E412031805490B
-:1026B0000DED70010E8D6A8E698F6880E1756A3547
-:1026C0007569FC75680190FF00E05460B4000280F9
-:1026D00006D35003022CBFE54A540FF549E54A548E
-:1026E00080A2E0920290FF01E012018A000B2CBA56
-:1026F000270528232CBA292F2CBA2A122A462BADBB
-:102700002BB02BF02C632C91E56D30E70EE54C459A
-:102710004B7008E572640245716003022CBC90FFA7
-:1027200000E0541FB400028003D34029E54A60034F
-:10273000022820AD6AAE69AF68740112031878AD43
-:10274000E630E00BAD6AAE69AF6874021203187C24
-:102750000212307622B401028003D3401BE56D20C3
-:10276000E107E54A6003022820E54A24FE500302FF
-:1027700028207C0212307622B402028006D3500355
-:1027800002281EE56D20E10DE54A6009E54A6480F6
-:102790006003022820AC4A1230FD4003022820E5E5
-:1027A00049702530021190FF80E05408AD6AAE698F
-:1027B000AF68120318800F90FF82E05408AD6AAE34
-:1027C00069AF68120318803D154930021DE549754F
-:1027D000F008A42448F582E434FFF583E05408AD02
-:1027E0006AAE69AF68120318801BE54975F008A44A
-:1027F0002408F582E434FFF583E05408AD6AAE693D
-:10280000AF68120318AD6AAE69AF681201EF600BD2
-:10281000AD6AAE69AF6874011203187C021230769B
-:10282000228000022CBCE56D20E706E57245716050
-:1028300003022CBC90FF00E0541FB400028003D3BD
-:10284000401AE54C14454B7004E54A600302292CFC
-:1028500078ADE654FEF67C0012307622B401028098
-:1028600003D3402AE56D20E108E56D20E00302294D
-:102870002CE56D30E004E54A700BE56D30E109E5CB
-:102880004A24FE500302292C7C0012307622B40226
-:10289000028006D3500302292AE54C454B6003020F
-:1028A000292CAC4A1230FD400302292CE56D20E1B1
-:1028B00007E56D20E0028077E56D30E006E54960D0
-:1028C00002806CE549700F90FF82E054F7F090FFB2
-:1028D00080E054F7F022E549B401028003D34009B7
-:1028E0007D017C03120F128011B402028003D340D9
-:1028F000097D017C04120F1280001549300215E594
-:102900004975F008A42448F582E434FFF583E054C7
-:10291000F7F08013E54975F008A42408F582E43443
-:10292000FFF583E054F7F07C00123076228000023D
-:102930002CBCE56D20E706E57245716003022CBCF6
-:1029400090FF00E0541FB400028003D3401AE54C0E
-:1029500014454B7004E54A6003022A0F78ADE64443
-:1029600001F67C0012307622B401028003D34029A4
-:10297000E56D20E108E56D20E003022A0FE56D30EA
-:10298000E004E549700BE56D30E108E54924FE50AF
-:1029900002807F7C0012307622B402028003D34092
-:1029A0006FE54C454B60028069AC4A1230FD400235
-:1029B0008060E56D20E107E56D20E0028054E54987
-:1029C000701430020990FF80E04408F0800790FF07
-:1029D00082E04408F022E56D30E1331549300215FC
-:1029E000E54975F008A42448F582E434FFF583E056
-:1029F0004408F08013E54975F008A42408F582E442
-:102A000034FFF583E04408F07C0012307622800227
-:102A10008000022CBCE56D20E712E5724571700C58
-:102A2000E54A700890FF00E0541F6003022CBCE5EB
-:102A30004C90FFFFF090FFFFE06005436D018003C5
-:102A4000536DFE7C0012307622E56D30E70EE572A4
-:102A50004571600890FF00E0541F6003022CBCAD7C
-:102A60004BE54CED7D00FC7D00FCBD0002800302C7
-:102A70002BA8B401028003D34032E54A7005E54C2F
-:102A8000FC6003022BAA756A407569F8756801D36A
-:102A9000E5729412E57194004006E4FD7C12800416
-:102AA000AC72AD718C708D6F12308B22B4020280CB
-:102AB00003D34059E54A6003022BAAE54CFC70277A
-:102AC000756A527569F8756801D3E5729419E571F4
-:102AD00094004006E4FD7C198004AC72AD718C70EA
-:102AE0008D6F12308B8025756A6B7569F87568017A
-:102AF000D3E5729427E57194004006E4FD7C2780BD
-:102B000004AC72AD718C708D6F12308B22B40302E5
-:102B10008006D35003022BA8E54CF549700F90FFB7
-:102B200004E0FDA3E04D6003022BAA801890FB0295
-:102B3000E0FDA3E0FC90FF05E06C700790FF04E06F
-:102B40006D60028068E4F570F56F7F00E54914C59B
-:102B500049600FEF2400F582E434FBF583E02FFF9A
-:102B600080EA8F4AE54A2400F582E434FBF583E0ED
-:102B70007D00D39572ED95714006AC72AD71800FFA
-:102B8000E54A2400F582E434FBF583E07D00FC8C0B
-:102B9000708D6FE54A2400FCE434FBFDFEECFD7F04
-:102BA000018D6A8E698F6812308B228000022CBCE6
-:102BB000022CBCE56D30E719E5721445717012E521
-:102BC0004A700EE54C454B700890FF00E0541F60C2
-:102BD00003022CBCE56D20E008E56D20E103022C2A
-:102BE000BC756A6EE4F569F568E4F56F04F570127A
-:102BF000308B22E56D20E727E57245717021E54AAB
-:102C0000701DE54C6402454B600DE54C14454B606E
-:102C100006E54C454B700890FF00E0541F6003022E
-:102C20002CBCE56D20E008E56D20E103022CBC859D
-:102C30004C6EE56E700A436D01536DFDD2B080207D
-:102C4000E56E64026007E56E1460028072536DFEEB
-:102C5000436D02E56E64026005E56E147002C2B059
-:102C60007C0012307622E56D30E71AE5721445716A
-:102C70007013E54A700FE54C454B700990FF00E07A
-:102C8000541F1460028038E56D20E10280317C0120
-:102C900012307622E56D20E715E5724571700FE57B
-:102CA0004C454B700990FF00E0541F146002800FE8
-:102CB000E56D20E10280087C00123076228000025F
-:102CC0002F7DB440028006D35003022F7390FF0182
-:102CD000E090FC35F0E54A90FC36F0E490FC37F0EB
-:102CE000E56A2403F56AE5693400F569AD4BE54C06
-:102CF000856A82856983CDF0A3CDF090FF01E01253
-:102D000001C02D2A012D50022D7A032DA4042DF28D
-:102D1000052E2F062E55072E7B082EA7092ECD0B2C
-:102D20002EF30C2F02802F028100002F60E56D2012
-:102D3000E7067C051225DF227D767E357F02793815
-:102D40007AFC7B01740878001203487D087C00122D
-:102D5000254622E56D20E7067C051225DF22E54A9F
-:102D6000B403004010B40500500BE54A7F00FE7C20
-:102D70001012324D227D007C0712254622E56D207F
-:102D8000E7067C051225DF22E54AB403004010B4B3
-:102D90000500500BE54A7F00FE7C1112324D227D6A
-:102DA000007C0712254622E56D20E7067C051225EA
-:102DB000DF22E54AB405028003D3400AE4FF04FEA3
-:102DC0007C0A12324D22B401028003D3400AE4FF90
-:102DD00004FE7C0812324D22B403004010B40500FA
-:102DE000500BE54A7F00FE7C1312324D227D007CA1
-:102DF0000712254622E56D20E734D3E5729448E5B5
-:102E00007194005006E572457170067C021225DF50
-:102E100022E54AB40103B3400BC3B403004009B434
-:102E200006005004123123227C071225DF221225CE
-:102E30007D22E56D20E71DE54AB403004010B4058E
-:102E400000500BE54A7F00FE7C1612324D227C07B3
-:102E50001225DF2212257D22E56D20E71DE54AB40B
-:102E600003004010B40500500BE54A7F00FE7C19BA
-:102E700012324D227C071225DF2212257D22E56DBC
-:102E800020E723748190FF93F0E54AB403004010DB
-:102E9000B40500500BE54A7F00FE7C1712324D222C
-:102EA0007C071225DF2212257D22E56D20E71DE536
-:102EB0004AB403004010B40500500BE54A7F00FE01
-:102EC0007C1812324D227C071225DF2212257D222A
-:102ED000E56D20E71DE54AB403004010B40500503D
-:102EE0000BE54A7F00FE7C1512324D227C0712252D
-:102EF000DF2212257D22E56D20E7067C071225DF03
-:102F00002212257D22E56D30E72090FF00E0541F5E
-:102F1000701090FF01E0B480051225748003122523
-:102F20007D227D007C051225462290FF00E0541F83
-:102F300060067C051225DF22D3E5729448E5719482
-:102F400000500BC3E5729407E571940050067C03B2
-:102F50001225DF22E54AB40504123123227C071230
-:102F600025DF22E56D30E7087D007C05122546222D
-:102F70007C051225DF22B420028003D340008000AC
-:102F80001230512275430090FF83E0540FD39543D4
-:102F90004024E54324F0F582E434FEF583E0AD6A95
-:102FA000AE69AF6812031805430DED70010E8D6A0E
-:102FB0008E698F6880D1E5437D00FCC3E5709CF588
-:102FC00070E56F9DF56FE570456F6006E490FF83D7
-:102FD000F02290FF82E04408F0E4F56F75704990AC
-:102FE000FC35E0B405028003D3404090FC36E0F5A8
-:102FF00043B405028003D3400AE4FF04FE7C0B12B5
-:10300000324D22B401028003D3400AE4FF04FE7C67
-:103010000912324D22B403004010B40500500BE5F4
-:10302000437F00FE7C1412324D2222B480004023E4
-:10303000B48200501E7C357DFC1217A57D008C6C7F
-:103040008D6B90FC37E0600512305180057C0012DA
-:103050003076222290FF83E0547FF090FF82E0449C
-:1030600008F090FF80E04408F02290FF82E04408DE
-:10307000F090FF80E04408F0228C237D008C708D5E
-:103080006F756A357569FC75680112308B2290FF87
-:1030900083E0547FF0E5706449456F700122C3E519
-:1030A000709408E56F94004015752108E5217D00B6
-:1030B000FCC3E5709CF570E56F9DF56F8009857028
-:1030C00021E4F56F757049752200E522C395215002
-:1030D00026AD6AAE69AF681201EFFCE52224F8F56F
-:1030E00082E434FEF583ECF005220DED70010E8DC7
-:1030F0006A8E698F6880D3E521547F90FF81F0222A
-:103100008C487F00EF24FD4019E4EF75F007A424FC
-:103110007FF582E434F8F583E065487002D3220F2E
-:1031200080E28F47C32285727085716F90FF82E0C5
-:1031300054F7F090FF83E0547FF022C000C001C03C
-:1031400002C006C007E5782408F8860653067F7C8F
-:10315000FF1231AD7C007D00E57B6046FF90FD9560
-:10316000E0547F6E700FC083C082A3E0FDA3E0FC3B
-:10317000A3157B8007A3A3A3DFE68026DF06D0820A
-:10318000D083801EE0F8A3E0F9A3E0FAD082D083D8
-:10319000E8F0A3E9F0A3EAF0A3C083C082A3A3A34D
-:1031A00080DA123246D007D006D002D001D00022F9
-:1031B00085A87A75A888EC70027C3F8C7922E57826
-:1031C0002408F8760012329A80FBC000C001C002C9
-:1031D000C006C007AE047CFF1231ADE57B6042FF44
-:1031E00090FD95E0547F6E700BC083C082A3A3A3B3
-:1031F000157B8007A3A3A3DFEA8026DF06D082D059
-:103200008380D8E0F8A3E0F9A3E0FAD082D083E885
-:10321000F0A3E9F0A3EAF0A3C083C082A3A3A38034
-:10322000DA7808087918097C01E6547F6E70067612
-:10323000007700800608090CBC08EE123246D00761
-:10324000D006D002D001D00022757900857AA8225C
-:10325000C0F0C082C083C3E57B24E8500512329AD7
-:1032600080F4EC6031903575E493C39C4028C00431
-:103270007CFF1231ADD004430480E57B75F003A4DC
-:103280002495F582E434FDF583ECF0EFA3F0EEA392
-:10329000F0057B123246D083D082D0F022C0047C6D
-:1032A00020D28CD28DD504FDD0042275A80075885B
-:1032B0000075B80075F00075D000E4F8900000F6D5
-:1032C00008B800FB020000C3ED940250047D037CAB
-:1032D000E8ECF4FCEDF4FD0CBC00010D8C7F8D7E60
-:1032E00022C3EC94BCED940250047D077CD0ECF436
-:1032F000FCEDF4FD0CBC00010D8C7D8D7C22EC708E
-:103300000122C000E5782418F8A604E5782408F81E
-:10331000C6547FF6E630E703D0002212329A80F4DA
-:10332000C28C857C8C857D8AD28CC0E0C0D0C0F0F8
-:10333000C082C083C000C001C002C003C004C00579
-:10334000C006C007121AF8E5782408F8E66024E5FC
-:10335000782410F8A681E57875F021A4248DF582F3
-:10336000E434FCF58378AEE58104C398F9E6F0080F
-:10337000A3D9FA74082578F8057808E65480700C0B
-:10338000E578B407F3780875780080EFE5782410C5
-:10339000F88681E57875F021A4248DF582E434FC6B
-:1033A000F58378AEE58104C398F9E0F608A3D9FA6D
-:1033B000D007D006D005D004D003D002D001D00071
-:1033C000D083D082D0F0D0D0D0E032C0E0C0D0C026
-:1033D00000C001C002C28E857E8D857F8BD28E7823
-:1033E0001979097A07E77004A600800BE6600816D1
-:1033F000E67004E74480F70809DAEAE57960131417
-:10340000F579700EE5782408F87600123246D28CF1
-:10341000D28DD002D001D000D0D0D0E0327581ADB5
-:10342000742A90FF93F0757F30757EF8757D607516
-:103430007CF012053F1234CE12175B90FF93E044EC
-:1034400001F0B2B31234F81232A880DA22C0007C44
-:1034500001EC2408F8E660090CBC08F512329A80E9
-:10346000EED00022C0F0C082C083C000C006C007FA
-:10347000ED2410F876BCED75F021A4248DF582E4DE
-:1034800034FCF583C082C083A3A3E4780DF0A3D8F5
-:10349000FCEC547F75F002A42441F582E5F034354C
-:1034A000F583E493FE740193F5828E83E493FE74B6
-:1034B0000193FFD083D082EFF0A3EEF0ED2408F863
-:1034C000EC4480F6D007D006D000D083D082D0F074
-:1034D00022757800757B007A08791878087600776D
-:1034E000000809DAF8E478087480447FF67401442F
-:1034F00010F58975B808D2ABD2A9227581ADD28EEC
-:10350000D28CD2AFE57B6032FF90FD95E0548060B5
-:103510002478087908E0547FFA7B00E6547FB502EE
-:10352000027BFF08D9F5EB700CEAF012344AAD04C7
-:10353000AC02123461A3A3A3DFD212329A80C57CFD
-:10354000017D002204FE04F204F604EA04E604E22B
-:1035500004EE04FA04A604AA04D604DA04A204A21F
-:1035600004A204DE04BE04B604BA04B204CA04C64B
-:1035700004C204CE04D204AE1901030022004802A2
-:1035800000480E301420C81AD0180A0C0506020391
-:1035900001020001CE0181010000C0008000600036
-:1035A0003000180010000800040002000100081894
-:1035B00028380C05100A0200000000000301100A60
-:1035C000020000000000FBE0FBF2090227000102FC
-:1035D00000A0FA0904000003FF00000007058102B3
-:1035E00040000007050102400000070583030200B8
-:1035F00001220354005500530042003300340031CF
-:1036000000300020002000200020002000200020AA
-:073610000020000000000093
-:00000001FF
diff --git a/firmware/mts_edge.fw.ihex b/firmware/mts_edge.fw.ihex
deleted file mode 100644
index d14ebd647846..000000000000
--- a/firmware/mts_edge.fw.ihex
+++ /dev/null
@@ -1,881 +0,0 @@
-:10000000F0360002001E021AFBFFFFFFFFFF023363
-:10001000F9FFFFFFFFFFFFFFFFFFFFFFFFFF0234BE
-:10002000A47581D490FDE88583A0123618EC4D604C
-:100030007378AF8003760018B8A0FA787F800376D3
-:100040000018B865FA78208003760018B820FA788E
-:10005000208003760018B81FFA90FDDDAE83AF82D2
-:1000600090FBF81200AA6005E4F0A380F690FDE88A
-:10007000A88290FDE8A982E8696005E4F20880F7AB
-:100080009001081200B390010C1200B390011012FD
-:1000900000B39001141200D190011A1200D1900106
-:1000A000201200D175D0001234F6020126EF6582CD
-:1000B0007003EE658322E493F8740193F97402935C
-:1000C000FE740393F5828E83E869700122E493F64F
-:1000D000A30880F4E493FC740193FD740293FE740E
-:1000E0000393FF740493F8740593F58288831200D8
-:1000F000AA700122E493A3A883A9828C838D82F045
-:10010000A3AC83AD828883898280E32121049B8014
-:1001100080049BB0B4049BFDE8049F049FFBF304A0
-:10012000A4049FFBF30504050480FED0F030F00921
-:1001300020F303F68010F7800D30F10920F303F26D
-:100140008004F38001F020F404FCD0E0CC22CCC089
-:10015000E0120163020154BC0005D0F0ACF022C3F0
-:1001600013DCFC02012ABF0009ED258275F001F8BD
-:10017000E622BF010FED2582F582EE3583F583750A
-:10018000F004E022ED258275F002F8E222D083D05F
-:1001900082F5F0C3E493A3C5F095F0C0E0C3D0F0BE
-:1001A000E493A395F04012A3A3C3E5F033500205F6
-:1001B000832582F58250020583740193C0E0E493A5
-:1001C000C0E022D083D082F5F0E4937009740193EB
-:1001D0007004A3A3800C74029365F06005A3A3A32D
-:1001E00080E7740193C0E0E493C0E022120264024D
-:1001F00001FB1202B80201FB1202DC0201FB30E03B
-:100200000720E302E622E72230E10720E302E222B0
-:10021000E32230E202E022E493221202DC02022313
-:100220001202B8020223ABF012022DCBC5F0CB2292
-:1002300030E01020E306E6F5F008E622E7F5F009E5
-:10024000E7192230E11020E306E2F5F008E222E3AC
-:10025000F5F009E3192230E206E0F5F0A3E022E42C
-:1002600093F5F074019322BB0003740922BB0107CC
-:1002700089828A83740422BB020789828A8374106C
-:1002800022740A22020284BB0007E92582F8740165
-:1002900022BB010DE92582F582EA3583F5837404DA
-:1002A00022BB020DE92582F582EA3583F5837410BD
-:1002B00022E92582F87402220202B8BF0005EDF897
-:1002C000740122BF01078D828E83740422BF02074E
-:1002D0008D828E83741022EDF87402220202DCBF3C
-:1002E0000007ED2582F8740122BF010DED2582F58E
-:1002F00082EE3583F583740422BF020DED2582F56D
-:1003000082EE3583F583741022ED2582F874022283
-:10031000020310C0E0120264020328C0E01202B817
-:10032000020328C0E01202DC02032830E00B20E3C5
-:1003300004D0E0F622D0E0F72230E10B20E304D035
-:10034000E0F222D0E0F322D0E0F022C9CDC9CACE3B
-:10035000CACBCFCB12035BEDF9EEFAEFFB22BB0069
-:100360002FBF000AFAEDF8E7F60809DAFA22BF0112
-:10037000128D828E83F802037809A3E7F0D8FA225F
-:10038000020383FAEDF8E7F20809DAFA2202038D94
-:10039000BB014DBF001489828A83F9EDF802039FE7
-:1003A00008A3E0F6D9FA220203B0BF01228D828EA3
-:1003B00083FB08C9C582C9CAC583CAE0A3C9C5826F
-:1003C000C9CAC583CAF0A3DBEAD8E8220203D38DE9
-:1003D000828E83F9EDF8E0F208A3D9FA220203DD58
-:1003E000BB024DBF001289828A83F9EDF80203EF48
-:1003F00008A3E493F6D9F922BF01238D828E83FBF3
-:1004000008C9C582C9CAC583CAE493A3C9C582C93C
-:10041000CAC583CAF0A3DBE9D8E722020422898295
-:100420008A83F9EDF8E493F208A3D9F922020433A0
-:10043000BF000DFAEDF8E3F60809DAFA2202043DEE
-:10044000BF01128D828E83F802044A09A3E3F0D81B
-:10045000FA22020455FAEDF8E3F20809DAFA220268
-:10046000045FE6FB08E6FA08E6F904F618700106F0
-:1004700022E6FF08E6FE08E6FD22EFF0A3EEF0A379
-:10048000EDF022EBF0A3EAF0A3E9F022E0FFA3E015
-:10049000FEA3E0FD22E0FBA3E0FAA3E0F9220000C6
-:1004A000000000000000000504006105730026053F
-:1004B0009A00330A0B00610A770066154600610C4A
-:1004C000FB006109AB006109E200610DC200610B34
-:1004D000F300610A1E00610A530061173E003317E2
-:1004E0005100341E1600431EBC0044202900442045
-:1004F0001700471EE300471F88004D1FD9004F1FFC
-:10050000050058338400617CCC7DFF121CC722900B
-:10051000FFFCE020E72DC2AFAE59AF58755A20E579
-:100520005A14C55A6019E4FE7F05EE4FCE24FFCE63
-:10053000CF34FFCF6007E490FF92F080ED80E08E33
-:10054000598F582212050C7D077CB71233A07D0FFE
-:100550007C6E1233BA78A17A06E4F608DAFC7A06E1
-:100560001205CF7C03120E57122165E4FEFF7C0FAB
-:10057000123329D2A822123214E490FC38F090FFF2
-:10058000F0E030E408740190FC39F08005E490FC60
-:1005900039F07D0A7C00122547123297221232145C
-:1005A00090FC39E014700E90FFF0E04410F07C00F5
-:1005B0001225E0801990FC39E0700E90FFF0E054B5
-:1005C000EFF07C001225E080057C171225E0123246
-:1005D000972290FFF0E054ABF090FFF0E04420F061
-:1005E000228C378D367882EDF608ECF6EDFEECFDC8
-:1005F0007F019000051201F57880F67882E6FD080B
-:10060000E6FCEDFEECFD7F019000041201F5540FB5
-:10061000FC7D8012176F7880E6700DAD3AAE39AF71
-:1006200038E41203187C082290FFF0E054FEF090AA
-:10063000FFF0E054FDF0801E7882E6FD08E6FCED58
-:10064000FEECFD7F0190000812021725E0440190A6
-:10065000FFF3F00206DB7882E6FD08E6FCEDFEEC37
-:10066000FD7F0190000612021754FE90FFF3F08008
-:100670002B7882E6FD08E6FCEDFEECFD7F019000A4
-:1006800008120217FAEB90FFF1F01208CA400DAD04
-:100690003AAE39AF38E41203187C18227882E6FDAE
-:1006A00008E6FCEDFEECFD7F0190000812021790B9
-:1006B000FFF1F01208CA400DAD3AAE39AF38E4127E
-:1006C00003187C18227882E6FD08E6FCEDFEECFDBE
-:1006D0007F01900006120217440190FFF3F0788327
-:1006E000E62403F618E63400F67880E624FE500986
-:1006F00090FFF0E054FDF0800790FFF0E04402F03E
-:10070000E490FFF1F0788176007880E624FFFCE445
-:1007100034FFFD7881E67F00FEECD39EEF6480CD50
-:1007200064809D402F1208AF400F7881E6AD3AAE4D
-:1007300039AF381203187C182290FFF2E0FC78825F
-:100740008683088682ECF0788106A37882A68308E7
-:10075000A68280B51208AF400F7881E6AD3AAE3977
-:10076000AF381203187C182290FFF2E0FC788286E2
-:1007700083088682ECF07880E6AD3AAE39AF381265
-:1007800003187C00228C378D367882EDF608ECF663
-:10079000EDFEECFD7F019000051201F57881F67801
-:1007A00082E6FD08E6FCEDFEECFD7F019000041200
-:1007B00001F5540FFC7D8112176F7881E670037C80
-:1007C000082290FFF0E054FEF090FFF0E054FDF0BE
-:1007D000801B7882E6FD08E6FCEDFEECFD7F0190D3
-:1007E000000812021725E090FFF3F0805B7882E6A4
-:1007F000FD08E6FCEDFEECFD7F01900006120217FD
-:1008000054FE90FFF3F080217882E6FD08E6FCEDCF
-:10081000FEECFD7F01900008120217FAEB90FFF149
-:10082000F01208CA40037C18227882E6FD08E6FC34
-:10083000EDFEECFD7F0190000812021790FFF1F031
-:100840001208CA40037C18227883E6240AF618E6C8
-:100850003400F6788076007881E624FFFCE434FFEB
-:10086000FD7880E67F00FEECD39EEF6480CD64804F
-:100870009D402178828683088682E090FFF1F01205
-:1008800008CA40037C1822788006788306E6187030
-:10089000010680C390FFF0E04401F078828683086F
-:1008A0008682E090FFF1F01208CA40037C18227C97
-:1008B000002290FFF0E020E71290FFF0E030E50921
-:1008C00090FFF0E04420F0C32280E7D32290FFF0B5
-:1008D000E020E31290FFF0E030E50990FFF0E04403
-:1008E00020F0C32280E7D3228C428D417C00ED545E
-:1008F000F0FDEC7003ED64307005753E0380037508
-:100900003E04AC3E120F74758300858340E541546C
-:100910000FF53FE5407004E53F64037035E53E2484
-:10092000FD75F00AA42402F582E434FCF583E0307E
-:10093000E60512105B8019E53E24A1F8E654FBF6AB
-:1009400078ADE62405F58218E63400F583740FF0DF
-:100950008059E5407004E53F64047048E53E24FD9D
-:1009600075F00AA42402F582E434FCF583E030E556
-:1009700007AC42AD41121C5CE54230E21578B1E6AD
-:1009800030E00F78B1E630E109E4FF04FE7C0412A8
-:10099000332978ADE62406F58218E63400F5837431
-:1009A0000FF08007E4FC7DEE121C5CC203221232C1
-:1009B00014120F7478ADE62406F58218E63400F5BB
-:1009C00083E090FC38F078ADE62405F58218E63433
-:1009D00000F583E090FC39F0C2037D027C00122513
-:1009E00047123297221232147899ECF6EC24A1F8CF
-:1009F000E630E1077C131225E0800F90FC39E0FD22
-:100A00007899E6FC1213F11225E012329722123285
-:100A1000147899ECF67D00120F141225E01232972B
-:100A2000221232147899ECF6EC24A1F8E630E207B1
-:100A30007C131225E0801B7899E624A1F8E620E1DA
-:100A4000077C121225E0800A7899E6FC1214151230
-:100A500025E0123297221232147899ECF6EC24A198
-:100A6000F8E620E2077C111225E0800A7899E6FC7E
-:100A70001215161225E0123297221232147899ECD0
-:100A8000F6120F7478ADE62409F58218E63400F505
-:100A900083E090FC3FF078ADE6240AF58218E63456
-:100AA00000F583E090FC40F078ADE62403F5821871
-:100AB000E63400F583E0FC78ADE62404F58218E620
-:100AC0003400F583E0F56278ADE62402F58218E69D
-:100AD0003400F583E0F5638C61E4EC333354017842
-:100AE00099F66008E56230E1037899067899E69016
-:100AF000FC41F078ABE62402F58218E63400F58379
-:100B0000E0FDA3E0540CFCED54E68C65F564E56172
-:100B100030E503436501E56220E50EE561547F7031
-:100B200008E56120E703436502E56130E3034365BF
-:100B300010E56130E203436520E56154036003433F
-:100B40006540E56130E103436580E56130E40343DE
-:100B50006401E56130E603436408E56220E40EE5E4
-:100B600061547F7008E56120E7034364105365FB1F
-:100B70005364F9AD64E56590FC3ACDF0A3CDF0E5A2
-:100B80006330E30DE5635430C4540F90FC3DF080B6
-:100B900005E490FC3DF0E563540390FC3CF0E56314
-:100BA0005404C31390FC3EF090FC3CE0700E7D3585
-:100BB0007EFC7F01740190000912014B78ADE624A0
-:100BC00008F58218E63400F583E07C00FD78ADE698
-:100BD0002407F58218E63400F583E07F004CFEEF31
-:100BE0004D90FC38F0A3CEF0CEC2037D0A7C0012FB
-:100BF0002547123297221232147899ECF6789E76B5
-:100C0000010876FC087638789B760C789E12046E84
-:100C100012021D789CCBF6CB08F67F00EF24EA4049
-:100C20001FE4EF25E090365AFD93CD0493789D663E
-:100C30007003ED18667006789B760080030F80DCE9
-:100C4000789AEFF6789E12046E90000212021778DE
-:100C50009CCBF6CB08F65404CB54064B6004789B2F
-:100C6000760B789DE630E313789E12046E900005B3
-:100C70001201F524FB5004789B760D789DE654C054
-:100C80007D0064C04D7004789B760B789E12046ED4
-:100C90009000041201F524FC5004789B760F789E96
-:100CA00012046E9000061201F524FD5004789B7624
-:100CB0000E789E12046E9000091201F524FD500476
-:100CC000789B760A789BE6702A7899E6FC120F7476
-:100CD000789E12046E78ABE6F978AAE6FA7B017486
-:100CE0000A7800120348C2037899E6FC12111778BB
-:100CF0009BECF6789BE6FC1225E01232972212322A
-:100D0000147899ECF6120F747899E624FD75F00AC0
-:100D1000A42414F582E434FCF583AC82AD8378AA74
-:100D20008683088682ECF9EDFA7B0A78011203B01B
-:100D3000C2037899E6FC121117123297228D2B8C80
-:100D40002AED60407527017529487528FFE52A249A
-:100D5000FDFCE434FFFDEC7C0325E0CD33CDDCF974
-:100D6000FCE5292CF529E5283DF528AD29AE28AF6D
-:100D700027748090000612032074809000021203F2
-:100D800020120FC7E52B14603B75270175290875E4
-:100D900028FFE52A24FDFCE434FFFDEC7C0325E07C
-:100DA000CD33CDDCF9FCE5292CF529E5283DF528E6
-:100DB000AD29AE28AF27E4900006120320E490008E
-:100DC00002120320221232147899ECF6EC24A1F8D6
-:100DD000E630E2097899E6FC121516D2007899E619
-:100DE000FC120F74789A760090FC39E030E70478B2
-:100DF0009A7601789AE6FD7899E6FC120D3AC203DC
-:100E00003000077899E6FC1214157C001225E012D8
-:100E100032972278ADE62404F58218E63400F58393
-:100E2000E04401F078ADE62404F58218E63400F5DC
-:100E300083E030E00280ED78ADE6240BF58218E621
-:100E40003400F583E054F8F078ADE62402F582181A
-:100E5000E63400F583E04480F022C2038C58120F80
-:100E60007478AA8683088682798B7A367B0A780121
-:100E70001203FE120E10AC587D02120D3AC203ACE2
-:100E800058121117228D538E528F518C50120F749D
-:100E9000754F0078ADE62405F58218E63400F58339
-:100EA000E020E41FE54F24F64019054FC2037C18EB
-:100EB0001233D790FF93E04401F0B2B3AC50120F5D
-:100EC0007480D078ADE62405F58218E63400F58309
-:100ED000E020E405C2037C022278ADE62405F58219
-:100EE00018E63400F583E0540F601678ADE624056B
-:100EF000F58218E63400F583E0540FF0C2037C015C
-:100F00002278AC8683088682E0AD53AE52AF511290
-:100F10000318C2037C00228D318C30121516E53186
-:100F2000600FE530B4030A7C0112250F7C81122585
-:100F30000FAC30120F74E531601A78AE86830886E4
-:100F400082E054E7F0A3A3A3A3E054E7F0AC307D24
-:100F500002120D3A78AA868308868279957A367BC2
-:100F60000A78011203FEC203E53024A1F8E654FD1D
-:100F7000F6AC30121117228C26300305123376801E
-:100F8000F87C0A123289D203E52624FD78A7F67090
-:100F90000778AE76FF0876E078A7E67D007C04252A
-:100FA000E0CD33CDDCF9FC24A078ADF6ED34FF18AC
-:100FB000F678A7E675F00AA42400FCE434FCFD787A
-:100FC000AAEDF608ECF61233222278ADE62402F5FB
-:100FD0008218E63400F583E030E72278ADE624029B
-:100FE000F58218E63400F583E0547FF078ADE6240E
-:100FF00002F58218E63400F583E04480F02278AEF2
-:101000008683088682E0547FF0AD83E5822404FC69
-:10101000E43D8C82F583E0547FF078ADE6240BF557
-:101020008218E63400F583E054F8F078AFE6240146
-:10103000F58218E63400F583E04403F078AFE62447
-:1010400005F58218E63400F583E04403F078ADE658
-:101050002405F58218E63400F583740FF02278AE8B
-:101060008683088682E0543FF0AD83E5822404FC49
-:10107000E43D8C82F583E0543FF078A7E624A8F89D
-:10108000E6FC78AFE62401F58218E63400F583EC3F
-:10109000F078A7E624A8F8E6FC78AFE62405F58208
-:1010A00018E63400F583ECF078ADE6240BF58218F1
-:1010B000E63400F583E054FB4402F52678ABE624E1
-:1010C00002F58218E63400F583E030E5034326019B
-:1010D00078ADE62405F58218E63400F583E030E0CB
-:1010E00003120FC7E526FC78ADE6240BF58218E65F
-:1010F0003400F583ECF078ADE62405F58218E6348B
-:1011000000F583740FF078AE8683088682E0448011
-:10111000F0A3A3A3A3E04480F0228C2A120F7478DA
-:10112000ABE62408F58218E63400F583E0FC78ADE0
-:10113000E6240AF58218E63400F583ECF078ABE695
-:101140002407F58218E63400F583E0FC78ADE62448
-:1011500009F58218E63400F583ECF078AA86830856
-:101160008682E0FDA3E0FCEDFE78ADE62408F58282
-:1011700018E63400F583EEF0ECFE78ADE62407F5D2
-:101180008218E63400F583EEF08C298D28C3EC94A8
-:1011900005ED940C400575277C8033D3E529940137
-:1011A000E5289403400575273C8023D3E5299481E5
-:1011B000E528940140057527188013D3E52994602C
-:1011C000E5289400400575270C8003752708AF2794
-:1011D000E4EF547C4483FF8F27E527FC78AFE624B7
-:1011E00001F58218E63400F583ECF0E527FC78AFD2
-:1011F000E62405F58218E63400F583ECF0E527FCDB
-:1012000078A7E624A8F8ECF678ADE62402F5821873
-:10121000E63400F583E0F52778ABE62402F5821882
-:10122000E63400F583A3E030E3175327C778ABE635
-:101230002405F58218E63400F583E0903686934263
-:101240002778ABE62402F58218E63400F583E03017
-:10125000E70543274080035327BF5327FB78ABE6BE
-:101260002406F58218E63400F583E0600343270482
-:101270005327FC78ABE62404F58218E63400F583A6
-:10128000E04227432780E527FC78ADE62402F5827B
-:1012900018E63400F583ECF078ADE62404F5821806
-:1012A000E63400F583E0F52778ABE62402F58218F2
-:1012B000E63400F583A3E030E1055327DF800343E4
-:1012C000272078ABE62402F58218E63400F583E0A7
-:1012D00030E4055327EF800343271078ABE6240959
-:1012E000F58218E63400F583E0B40203432702E5F3
-:1012F00027FC78ADE62404F58218E63400F583EC8B
-:10130000F078ADE62403F58218E63400F583E0F5C5
-:101310002778ABE62409F58218E63400F583E070FF
-:101320000553277F800343278078ABE62402F582AC
-:1013300018E63400F583A3E030E00543272080035E
-:101340005327DF78ABE62402F58218E63400F583F4
-:10135000E030E30543274080035327BF78ABE62402
-:1013600002F58218E63400F583E030E005432710EB
-:1013700080035327EF78ABE62402F58218E63400A9
-:10138000F583A3E030E40543270880035327F7786B
-:10139000ABE62402F58218E63400F583A3E030E5DD
-:1013A0000543270480035327FB78ABE62402F5822C
-:1013B00018E63400F583A3E030E6054327018003F7
-:1013C0005327FE78ABE62402F58218E63400F58355
-:1013D000A3E030E70543270280035327FDE527FC00
-:1013E00078ADE62403F58218E63400F583ECF0C20C
-:1013F000037C00228D278C26ED54031460037C109F
-:1014000022E527547C24FC40037C0B22E52624A102
-:10141000F8E64402F67C00228C30120F74E530248A
-:10142000A1F8E620E24FAC307D02120D3AE53024FF
-:10143000FE4428FC78AE8683088682ECF0AF83E514
-:10144000822404FEE43FFFEC8E828F83F07C038CC9
-:101450002CE52CFC78AFE62401F58218E63400F583
-:1014600083ECF0E52CFC78AFE62405F58218E63431
-:1014700000F583ECF0752D01752F48752EFFE530D2
-:1014800024FDFCE434FFFDEC7C0325E0CD33CDDC12
-:10149000F9FCE52F2CF52FE52E3DF52E78AFE6244F
-:1014A00004F58218E63400F583E054E7F52CAD2FFF
-:1014B000AE2EAF2DE4900002120320E4900006123D
-:1014C00003201201EF30E503432C10E52CFC78AF2C
-:1014D000E62404F58218E63400F583ECF012105B84
-:1014E00078ADE62406F58218E63400F583E0C20301
-:1014F000FCE53024A1F8E64404F68C2CE530540FCA
-:10150000C454F07E00FFEEEF44047D00FFEC4EFC7F
-:10151000ED4FFD121CC77C00228C2F120F74120F8E
-:10152000FB78AE8683088682E05408F0A3A3A3A3C9
-:10153000E05408F0AC2F7D02120D3AC203E52F24CF
-:10154000A1F8E654FBF67C0022123214789AECF6ED
-:10155000EC24A1F8E630E10A7D007C131225471245
-:101560003297789AE624A1F8E64401F6789AE6FCE8
-:10157000120F74789AE624FD75F00AA42414F582FB
-:10158000E434FCF58378AAE6FA08E6F97B0A7801E8
-:101590001203B078AA868308868279957A367B0A08
-:1015A00078011203FE120FC7C203789AE6FC1211EB
-:1015B000177899ECF6EC600A7D007C08122547123A
-:1015C0003297789AE6FC120F7478ADE62404F5821F
-:1015D00018E63400F583E0441054DFFC78ADE624CF
-:1015E00004F58218E63400F583ECF07899ECF6C245
-:1015F000037CC81233D7789AE6FC120F7478ADE6F4
-:101600002404F58218E63400F583E054EFF0C203B9
-:101610007CC81233D7789AE6FC120F7478ADE624B2
-:1016200004F58218E63400F583E04410F0C2037C30
-:10163000C81233D7789AE6FC120F7478ADE624040A
-:10164000F58218E63400F583E04420F0C2037CF014
-:101650001233D7789AE6FC120F7478ADE62405F5BC
-:101660008218E63400F583E030E415C203789AE688
-:1016700044107F00FE7C0712332912329702173D77
-:1016800078ADE62404F58218E63400F583E054CF03
-:10169000F0C2037CC81233D7789AE6FC120F747834
-:1016A000ADE62404F58218E63400F583E04430F01A
-:1016B000C2037CF01233D7789AE6FC120F7478AD2F
-:1016C000E62405F58218E63400F583E030E414C220
-:1016D00003789AE644107F00FE7C07123329123209
-:1016E00097805D78ADE62404F58218E63400F58332
-:1016F000E054EFF078ADE62404F58218E63400F506
-:1017000083E054DFF0789AE624FD75F00AA42414EF
-:10171000F582E434FCF583AC82AD8378AA86830835
-:101720008682ECF9EDFA7B0A78011203B0C20378E5
-:101730009AE6FC1211177D007C0B12254712329796
-:1017400022123214E490FC39F07D027C001225470D
-:10175000123297221232147C001225E012329722A4
-:10176000743C90FBE0F0743E90FBE0F0E490FC28C9
-:10177000F0228D358C34ECB401028003D34002801A
-:1017800028B402028003D34008A835E625E0F6809D
-:1017900018B404028003D3400AA835E625E025E00A
-:1017A000F68006A83576008000228C3C8D3BEDFE4D
-:1017B000ECFD7F0175660675670090FC29120477C1
-:1017C0001201EFB480028006D3500302187090FC1F
-:1017D000291204899000031201F554F0B4300280FC
-:1017E00003D3405F90FC291204899000081202176D
-:1017F000FAFDEBFE7F0190FC2C120477EECD9036C3
-:101800009FFCE493FF740193FEF9EFFA7B01EAFF7A
-:10181000E9FEECC39EED9F40259036A1E493FD7454
-:101820000193FCEDFEECFD7F01EECDFC90FC2EE083
-:10183000D39C90FC2DE09D50057566808033121975
-:101840008E802EB460028003D3400BAC3CAD3B12C3
-:1018500007828C66801BB41003B34010C3B420030E
-:10186000B34009C3B440028003D340007566818051
-:10187000008075B481028003D3406B90FC29120470
-:10188000899000031201F554F0B430028003D34074
-:101890001D90FC29120489900008120217FAFDEB32
-:1018A000FE7F0190FC2F1204771218F88036B46086
-:1018B000028003D34013753A67E4F539F538AC3C40
-:1018C000AD3B1205DE8C66801BB41003B34010C321
-:1018D000B42003B34009C3B440028003D340007571
-:1018E0006681800080028000E566FC90FC2912047D
-:1018F00089EC900002120320AC672290FC291204AC
-:10190000899000041201F5600474018001E4A2E0F2
-:10191000920190FC29120489ED2403FD50010E90E0
-:10192000FC2C12047790FC29120489900005120106
-:10193000F5F5679000041201F5540FFC7D6712174E
-:101940006FE5677004756608227566007884760016
-:101950007884E6C39567503890FC2F1204891201F1
-:10196000EFFC90FC2C120489EC12031830010E904D
-:10197000FC31E004F090FC307003E004F078840661
-:1019800090FC2EE004F090FC2D7003E004F080C089
-:101990002290FC2AE0FDA3E0FCEDFEECFD7F01EDD2
-:1019A000240AFD50010E90FC3212047790FC29129B
-:1019B00004899000041201F5540FB401028003D38E
-:1019C000401790FC321204890DED70010E90FC2F2F
-:1019D00012047778887601804EB402028003D340E7
-:1019E0001990FC32120489ED2402FD50010E90FC86
-:1019F0002F12047778887602802DB404028003D3F6
-:101A0000401990FC32120489ED2404FD50010E901F
-:101A1000FC2F12047778887604800CB400028003CF
-:101A2000D340007566082290FC29120489900005B5
-:101A30001201F5F567788576007885E6C3956740ED
-:101A400003021AF6788676007886E6C37888965080
-:101A50007690FC2C1204891201EFFC90FC321204E7
-:101A6000921201E9F45CFC1201E9F890FC2F1204D7
-:101A700089E8C0E01201EFC8D0E0C8584CFC90FCE7
-:101A80002C120489EC1203187887ECF690FC31E0F4
-:101A900004F090FC307003E004F009E970010A9052
-:101AA000FC3212048090FC29120489900004120177
-:101AB000F530E40E90FC2EE004F090FC2D7003E075
-:101AC00004F078860680817888E6FDE4FEFFEECD9E
-:101AD000FC90FC31E02CF090FC30E03DF07888E6A2
-:101AE000FDE4FEFFEECDFC90FC34E02CF090FC33E6
-:101AF000E03DF0788506021A367566002222C0E0C5
-:101B0000C0F0C082C083C0D0E8C0E0E9C0E0EAC055
-:101B1000E0EBC0E0ECC0E0EDC0E0EEC0E0EFC0E024
-:101B200090FF92E01201C01B49301B49321B58380C
-:101B30001B6A3A1B7C3E1B94441B88461BA0501B0F
-:101B4000E2521BC1541C035600001C2490FF92E07B
-:101B50007F00FE7C01123329021C34E4FF04FE7C6A
-:101B600003123329742090FFFEF0021C34E4FF04BA
-:101B7000FE7C02123329744090FFFEF0021C34E414
-:101B8000FF04FE7C04123329021C34E4FF04FE7CB3
-:101B900005123329021C34E4FF04FE7C06123329AB
-:101BA000021C3490FFA5E07D0090FBF8CDF0A3CDA2
-:101BB000F090FBF9E0FCF58390FBF8E04433FD1274
-:101BC0001CC7807390FFB5E07D0090FBFACDF0A3B9
-:101BD000CDF090FBFBE0FCF58390FBFAE04443FD85
-:101BE000121CC7805290FFA6E07D0090FBFCCDF058
-:101BF000A3CDF090FBFDE0FCF58390FBFCE04434CA
-:101C0000FD121CC7803190FFB6E07D0090FBFECD39
-:101C1000F0A3CDF090FBFFE0FCF58390FBFEE044E9
-:101C200044FD121CC7801090FF92E07D00FCED4443
-:101C3000AAFD121CC78000E490FF92F0D0E0FFD014
-:101C4000E0FED0E0FDD0E0FCD0E0FBD0E0FAD0E058
-:101C5000F9D0E0F8D0D0D083D082D0F0D0E03205F7
-:101C600081058105810581A881181818EDF608EC19
-:101C7000F690FF5AE020E70280F790FF59E07D00E0
-:101C8000A88118CDF6CD08F67D03A881E618FCE6FC
-:101C9000CC25E0CC33CCDDF9CCF6CC08F6A8811805
-:101CA000E644F8F6A881181818E6FD08E6FCA881B5
-:101CB000188683088682EDF0A3ECF0740290FF5A38
-:101CC000F0158115811581158122E5812405F581A5
-:101CD000E4A88118F6A88118181818EDF608ECF693
-:101CE00090FBF5E024F85003021DE8E4A8811818E1
-:101CF000F6A88118E6FEA88118181818E6FD08E66F
-:101D0000FC7F00EF24F8404DE4EF25E0247DF582D0
-:101D1000E434FCF583E0FBA3E06C7003FAEB6D7038
-:101D2000097401A8811818F6802BE4EF25E0247DC2
-:101D3000F582E434FCF5837A00E054F0CCF8CCCDA5
-:101D4000F9CDFB7800E954F0F9EA687002EB6970AC
-:101D5000010E0F80AEA88118EEF6A8811818181889
-:101D6000EDF608ECF6A881EFF6A8811818E6707970
-:101D7000A88118E624F74071A88118181818E654AD
-:101D80000FA881F664046017A881E664036010A8B8
-:101D90008118181818E6FD08E6FC121C5C804A7CC5
-:101DA0000A123289A88118181818E6FD08E6FC9076
-:101DB000FBF4E025E0247DF582E434FCF583EDF0CE
-:101DC000A3ECF090FBF4E0FFE4EF045407FF90FB7A
-:101DD000F4F090FBF5E004F012332290FBF6E07093
-:101DE00008E4FEFF7C0F123329802790FBF7E00404
-:101DF000F0543F701D90FBF7E044FE7D00FC90FB2B
-:101E0000F4E025E0247DF582E434FCF583EDF0A3D5
-:101E1000ECF0E58124FBF58122788B7600788C76D6
-:101E200000740190FBF6F012321490FBF5E060575D
-:101E30007C0A12328990FBF3E025E0247DF582E4F0
-:101E400034FCF583E0FDA3E0FC90FBF3E025E02407
-:101E50007DF582E434FCF583E4F0A3F090FBF3E03D
-:101E6000FFE4EF045407FF90FBF3F090FBF5E01460
-:101E7000F07889EDF608ECF61233227889E6FD0851
-:101E8000E6FC1208E580A312337690FF93E044014C
-:101E9000F0B2B3788B06B6000D788B7600788CE6BE
-:101EA000F40404788CF68082E490FBF6F090FBF565
-:101EB000E07D00FCED44CFFD121C5C123297221233
-:101EC0003214E5706449456F601590FF83E0540F4C
-:101ED0007D00D39570ED956F500512305D80031233
-:101EE000312D12329722123214E5706449456F6029
-:101EF00005123167800E90FF80E04408F090FF8368
-:101F0000E0547FF0123297221232148C54EC54F0C9
-:101F1000B41015756A357569FC756801E56A2403A6
-:101F2000F56AE5693400F569E4F557F556E556C3F9
-:101F300094015027E554540FFCAD6AAE69AF6812A6
-:101F40000E828C55EC60028012056AE56A7002050B
-:101F5000690557E5577002055680D2E554540F24A1
-:101F6000A1F8E654FEF6E554540F7F00FE7C1212F1
-:101F70003329E5551470097D007C09122547800737
-:101F8000AD577C001225471232972212321490FF6F
-:101F9000FCE04402F090FF00E030E71390FF83E0A4
-:101FA0004480F0436D8090FFFCE04401F08011908C
-:101FB000FF82E04408F0536D7F90FFFCE054FEF098
-:101FC00090FF81E04480F01225FA90FFFEE0440586
-:101FD000F090FFFCE054FDF0123297221232147C94
-:101FE000011233D778B1E64402F674FEFC04FD1208
-:101FF0001CC790FF5AE030E70280F7E4F54E754DBC
-:1020000010AC4EAD4DE54E154E7002154DEC4D60C9
-:102010000280EE438701123297221232147C0212A0
-:1020200032A378B1E654FDF61232972212321478B8
-:10203000B1E630E02C78B1E630E12678B1E6FCF587
-:102040008318E644F0FD121C5C90FFFCE04420F095
-:102050007C021233D778B1E654FDF6741A90FFFE75
-:10206000F078B1E6FCF58318E644F1FD121C5C1231
-:10207000329722756D0090FFFFE06003436D01759C
-:102080006E00E4F56CF56BE4F56F7570497484903F
-:10209000FF82F0748490FF80F0748090FF58F07499
-:1020A0008090FF5AF0AD46AF457E00EE24FE50030F
-:1020B00002213FE4EE75F007A4247FF582E434F8B2
-:1020C000F583E0FFE4EF5480FDE4EF540F14FFEDDF
-:1020D0006038E4EF75F008A42448F582E434FFF595
-:1020E000837490F0E4EF75F008A4244AF582E43498
-:1020F000FFF5837480F0E4EF75F008A4244EF582B8
-:10210000E434FFF5837480F08034E4EF75F008A4C4
-:102110002408F582E434FFF5837490F0E4EF75F061
-:1021200008A4240AF582E434FFF583E4F0E4EF75B3
-:10213000F008A4240EF582E434FFF583E4F00E02E7
-:1021400020A88D468E448F45747F90FFFDF07490DB
-:1021500090FFFCF0228C58EC24F65006E55824370A
-:10216000FC22E5582430FC22D2B0D2B1C2B41225F0
-:1021700044EC700302227F755C03AE5B7F00E55C7C
-:10218000155C6480247F5035EF2400F582E434FB35
-:10219000F583E0FE24FE501EEF7D00FCE4FB74742A
-:1021A000C39CFAEB9DFBEE7D00FCEAC39CED6480D2
-:1021B000CB64809B50028005EF2EFF80C18E5B8F29
-:1021C0005AE55C6480247F500302227FE55A248E06
-:1021D000500302227F855A5D755B00AE5AAF5B905B
-:1021E00036CAE493F55CE55C155C6480247F501886
-:1021F000EE2400F582E434FBF583E0FCEF9036CA70
-:10220000936C70040E0F80DE8E5A8F5BE55C6480E9
-:10221000247F406E755E017560E8755FFFE55D24A3
-:1022200002F55A755C07E55C334057AD60AE5FAFB1
-:102230005EE55CF5823395E0F5831201F5C4540F39
-:10224000FC122152E55A2400F582E434FBF583ECBC
-:10225000F0055A055AAD60AE5FAF5EE55CF58233BE
-:1022600095E0F5831201F5540FFC122152E55A2432
-:1022700000F582E434FBF583ECF0055A055A155C51
-:1022800080A4740290F851F090F86B79A37A367BB1
-:102290002778011203FE756A357569FC756801E4DB
-:1022A00090FF83F0748090FF81F0755902E55975B5
-:1022B000F007A4247FF582E434F8F583E07893F600
-:1022C000FC540F14FC7893ECF6E55975F007A42440
-:1022D00081F582E434F8F583E0789676FD0876E8B7
-:1022E000FC7893E675F008A42448F582E434FFF501
-:1022F00083E4F07893E675F008A4244FF582E43483
-:10230000FFF583ECF07896E6FF08E67E03CFC31373
-:10231000CF13DEF9FE7893E675F008A42449F58220
-:10232000E434FFF583EEF07893E675F008A4244AD0
-:10233000F582E434FFF5837480F07894ECF67D0048
-:102340007897E62CF618E63DF67896E6FD08E67CEA
-:1023500003CDC313CD13DCF9FC7893E675F008A424
-:10236000244DF582E434FFF583ECF07893E675F0C4
-:1023700008A4244EF582E434FFF583E4F07896E671
-:10238000FD08E6FC7893E6FF7E00EE24FE50030293
-:1023900024FEE4EE75F007A4247FF582E434F8F51A
-:1023A00083E0FFE4EF5480FAE4EF540F14FFE4EE0F
-:1023B00075F007A42481F582E434F8F583E078947D
-:1023C000F6E4EE1313548024F0F8E434FDF9E8FC4D
-:1023D000E9FD8A5AEA700302246BE4EF75F008A461
-:1023E0002448F582E434FFF583E4F07894E6FAE4D7
-:1023F000EF75F008A4244FF582E434FFF583EAF08A
-:10240000EDFBEC7A03CBC313CB13DAF9FAE4EF75E7
-:10241000F008A42449F582E434FFF583EAF07894C7
-:10242000E67B00FAEC2AFCED3BFDFBEC7A03CBC328
-:1024300013CB13DAF9FAE4EF75F008A4244DF58212
-:10244000E434FFF583EAF0E4EF75F008A4244AF5DC
-:1024500082E434FFF5837480F0E4EF75F008A4247F
-:102460004EF582E434FFF5837480F00224FAE4EF41
-:1024700075F008A42408F582E434FFF583E4F078CD
-:1024800094E6FAE4EF75F008A4240FF582E434FF33
-:10249000F583EAF0EDFBEC7A03CBC313CB13DAF947
-:1024A000FAE4EF75F008A42409F582E434FFF5831B
-:1024B000EAF07894E67B00FAEC2AFCED3BFDFBECBD
-:1024C0007A03CBC313CB13DAF9FAE4EF75F008A45F
-:1024D000240DF582E434FFF583EAF0E4EF75F008AB
-:1024E000A4240AF582E434FFF583E4F0E4EF75F008
-:1024F00008A4240EF582E434FFF583E4F00E0223F1
-:10250000878E597896EDF608ECF67893EFF6122060
-:1025100070228C26EC30E718E526540F1475F0086D
-:10252000A42448F582E434FFF583E054DFF08016FC
-:10253000E526540F1475F008A42408F582E434FF4E
-:10254000F583E054DFF0227C0022EC90FC37F08C25
-:1025500024ED2403F5257D00D39572ED957140039C
-:10256000857225E52524B75009752503740290FC72
-:1025700037F0AC2512315222E4F56CF56B12257E52
-:102580002290FC35E06573600E740490FC37F0E433
-:10259000F56B756C0380467D73E4FEFF79357AFC3C
-:1025A0007B0174057800120348E56C2403F56CE5A3
-:1025B0006B3400F56BE56CD39572E56B9571400655
-:1025C00085726C85716BD3E56C9448E56B94004023
-:1025D0000C740290FC37F0E4F56B756C03AC6C1274
-:1025E000315222EC90FC37F0E4F56CF56B8C32EC58
-:1025F000600512314380057C001231522290FF9316
-:10260000E04401F0B2B390FF04E0F54A90FF06E029
-:10261000FDA3E0ED7D00FC7D00FC90FF06E0FFA344
-:10262000E07E00FFE4FEEC4EFCED4FFDC3EC944871
-:10263000ED9400502290FF06E0FDA3E0ED7D00FC4C
-:102640007D00FC90FF06E0FFA3E07E00FFE4FEECCF
-:102650004EFCED4FFD8004E4FD7C488C728D719042
-:10266000FF02E0FDA3E0ED7D00FC7D00FC90FF0299
-:10267000E0FFA3E07E00FFE4FEEC4EF54CED4FF5ED
-:102680004B756A357569FC7568017D357EFC7F0187
-:102690007973E4FAFB74057800120348754900E584
-:1026A0004924FE4019AD6AAE69AF68E4120318050B
-:1026B000490DED70010E8D6A8E698F6880E1756A33
-:1026C000357569FC75680178B3E614184660030235
-:1026D00027927890E6FF08E6FE788EE4F608F6C3C7
-:1026E000788FE6940218E69400501DE4FEFFC3EED6
-:1026F00094E8EF940350070EBE00010F80F0788F2E
-:1027000006E61870010680D77890EFF608EEF6D24C
-:10271000B47890E6FF08E6FE788EE4F608F6C37813
-:102720008FE6941E18E69400501DE4FEFFC3EE945D
-:10273000E8EF940350070EBE00010F80F0788F067B
-:10274000E61870010680D77890EFF608EEF6C2B171
-:102750007890E6FF08E6FE788EE4F608F6C3788FF8
-:10276000E6943A18E69400501DE4FEFFC3EE94E8A8
-:10277000EF940350070EBE00010F80F0788F06E63D
-:102780001870010680D77890EFF608EEF6D2B1788F
-:10279000B2E4F608F690FF00E05460B40002800650
-:1027A000D35003022D9BE54A540FF549E54A548066
-:1027B000A2E0920290FF01E012018A000B2D962701
-:1027C000D428F22D9629FE2D962AE12B152C7C2C4F
-:1027D0007F2CBF2D3F2D6DE56D30E70EE54C454B51
-:1027E0007008E572640245716003022D9890FF0045
-:1027F000E0541FB400028003D34029E54A6003027D
-:1028000028EFAD6AAE69AF68740112031878B1E6BB
-:1028100030E00BAD6AAE69AF6874021203187C0237
-:1028200012315222B401028003D3401BE56D20E136
-:1028300007E54A60030228EFE54A24FE5003022818
-:10284000EF7C0212315222B402028006D3500302FE
-:1028500028EDE56D20E10DE54A6009E54A648060F8
-:10286000030228EFAC4A1231D940030228EFE549B0
-:10287000702530021190FF80E05408AD6AAE69AF58
-:1028800068120318800F90FF82E05408AD6AAE69A9
-:10289000AF68120318803D154930021DE54975F0F7
-:1028A00008A42448F582E434FFF583E05408AD6AB7
-:1028B000AE69AF68120318801BE54975F008A424BF
-:1028C00008F582E434FFF583E05408AD6AAE69AFE1
-:1028D00068120318AD6AAE69AF681201EF600BAD04
-:1028E0006AAE69AF6874011203187C021231522279
-:1028F0008000022D98E56D20E706E57245716003C2
-:10290000022D9890FF00E0541FB400028003D340D2
-:102910001AE54C14454B7004E54A60030229FB7824
-:10292000B1E654FEF67C0012315222B4010280035B
-:10293000D3402AE56D20E108E56D20E0030229FB84
-:10294000E56D30E004E54A700BE56D30E109E54ADC
-:1029500024FE50030229FB7C0012315222B40202F1
-:102960008006D350030229F9E54C454B6003022948
-:10297000FBAC4A1231D940030229FBE56D20E10787
-:10298000E56D20E0028077E56D30E006E549600204
-:10299000806CE549700F90FF82E054F7F090FF8063
-:1029A000E054F7F022E549B401028003D340097DE9
-:1029B000017C03120F148011B402028003D340097A
-:1029C0007D017C04120F1480001549300215E54981
-:1029D00075F008A42448F582E434FFF583E054F749
-:1029E000F08013E54975F008A42408F582E434FF6B
-:1029F000F583E054F7F07C00123152228000022D62
-:102A000098E56D20E706E57245716003022D989008
-:102A1000FF00E0541FB400028003D3401AE54C14B9
-:102A2000454B7004E54A6003022ADE78B1E64401B2
-:102A3000F67C0012315222B401028003D34029E512
-:102A40006D20E108E56D20E003022ADEE56D30E04F
-:102A500004E549700BE56D30E108E54924FE5002BC
-:102A6000807F7C0012315222B402028003D3406F77
-:102A7000E54C454B60028069AC4A1231D940028076
-:102A800060E56D20E107E56D20E0028054E54970C6
-:102A90001430020990FF80E04408F0800790FF8224
-:102AA000E04408F022E56D30E1331549300215E5C8
-:102AB0004975F008A42448F582E434FFF583E04426
-:102AC00008F08013E54975F008A42408F582E43481
-:102AD000FFF583E04408F07C00123152228002802E
-:102AE00000022D98E56D20E712E5724571700CE546
-:102AF0004A700890FF00E0541F6003022D98E54CD7
-:102B000090FFFFF090FFFFE06005436D01800353ED
-:102B10006DFE7C0012315222E56D30E70EE5724504
-:102B200071600890FF00E0541F6003022D98AD4BC8
-:102B3000E54CED7D00FC7D00FCBD00028003022C15
-:102B400077B401028003D34032E54A7005E54CFCBE
-:102B50006003022C79756A407569F8756801D3E5E0
-:102B6000729412E57194004006E4FD7C128004AC7E
-:102B700072AD718C708D6F12316722B402028003C6
-:102B8000D34059E54A6003022C79E54CFC70277567
-:102B90006A527569F8756801D3E5729419E5719404
-:102BA000004006E4FD7C198004AC72AD718C708D20
-:102BB0006F1231678025756A6B7569F8756801D386
-:102BC000E5729427E57194004006E4FD7C278004BB
-:102BD000AC72AD718C708D6F12316722B4030280BC
-:102BE00006D35003022C77E54CF549700F90FF0493
-:102BF000E0FDA3E04D6003022C79801890FB02E019
-:102C0000FDA3E0FC90FF05E06C700790FF04E06D11
-:102C100060028068E4F570F56F7F00E54914C549EE
-:102C2000600FEF2400F582E434FBF583E02FFF8092
-:102C3000EA8F4AE54A2400F582E434FBF583E07D1F
-:102C400000D39572ED95714006AC72AD71800FE5C1
-:102C50004A2400F582E434FBF583E07D00FC8C70AF
-:102C60008D6FE54A2400FCE434FBFDFEECFD7F01A2
-:102C70008D6A8E698F68123167228000022D98025A
-:102C80002D98E56D30E719E5721445717012E54A2B
-:102C9000700EE54C454B700890FF00E0541F600338
-:102CA000022D98E56D20E008E56D20E103022D98E6
-:102CB000756A6EE4F569F568E4F56F04F570123134
-:102CC0006722E56D20E727E57245717021E54A70BE
-:102CD0001DE54C6402454B600DE54C14454B600608
-:102CE000E54C454B700890FF00E0541F6003022D37
-:102CF00098E56D20E008E56D20E103022D98854CF4
-:102D00006EE56E7010436D01536DFDD2B078B2E484
-:102D1000F608F68027E56E64026007E56E1460022F
-:102D20008079536DFE436D02E56E64026005E56EC9
-:102D300014700978B2E4F60804F6C2B07C001231CF
-:102D40005222E56D30E71AE5721445717013E54AB9
-:102D5000700FE54C454B700990FF00E0541F146064
-:102D6000028038E56D20E10280317C01123152226F
-:102D7000E56D20E715E5724571700FE54C454B7028
-:102D80000990FF00E0541F146002800FE56D20E100
-:102D90000280087C00123152228000023059B44077
-:102DA000028006D3500302304F90FF01E090FC35C3
-:102DB000F0E54A90FC36F0E490FC37F0E56A240335
-:102DC000F56AE5693400F569AD4BE54C856A8285A5
-:102DD0006983CDF0A3CDF090FF01E01201C02E0673
-:102DE000012E2C022E56032E80042ECE052F0B060C
-:102DF0002F31072F57082F83092FA90B2FCF0C2F07
-:102E0000DE802FDE810000303CE56D20E7067C058A
-:102E10001225E0227D527E367F0279387AFC7B01D2
-:102E2000740878001203487D087C0012254722E5CB
-:102E30006D20E7067C051225E022E54AB403004038
-:102E400010B40500500BE54A7F00FE7C10123329B8
-:102E5000227D007C0712254722E56D20E7067C05D0
-:102E60001225E022E54AB403004010B40500500BDF
-:102E7000E54A7F00FE7C11123329227D007C071277
-:102E8000254722E56D20E7067C051225E022E54A6C
-:102E9000B405028003D3400AE4FF04FE7C0A123327
-:102EA0002922B401028003D3400AE4FF04FE7C0817
-:102EB00012332922B403004010B40500500BE54A38
-:102EC0007F00FE7C13123329227D007C07122547E8
-:102ED00022E56D20E734D3E5729448E57194005003
-:102EE00006E572457170067C021225E022E54AB4BF
-:102EF0000103B3400BC3B403004009B406005004FF
-:102F00001231FF227C071225E02212257E22E56D78
-:102F100020E71DE54AB403004010B40500500BE55E
-:102F20004A7F00FE7C16123329227C071225E022FC
-:102F300012257E22E56D20E71DE54AB4030040100E
-:102F4000B40500500BE54A7F00FE7C19123329229C
-:102F50007C071225E02212257E22E56D20E72374EE
-:102F60008190FF93F0E54AB403004010B40500508F
-:102F70000BE54A7F00FE7C17123329227C071225BD
-:102F8000E02212257E22E56D20E71DE54AB403000C
-:102F90004010B40500500BE54A7F00FE7C18123348
-:102FA00029227C071225E02212257E22E56D20E7EA
-:102FB0001DE54AB403004010B40500500BE54A7FFC
-:102FC00000FE7C15123329227C071225E0221225EF
-:102FD0007E22E56D20E7067C071225E02212257E81
-:102FE00022E56D30E72090FF00E0541F701090FF45
-:102FF00001E0B48005122575800312257E227D0034
-:103000007C051225472290FF00E0541F60067C05D6
-:103010001225E022D3E5729448E5719400500BC369
-:10302000E5729407E571940050067C031225E022B6
-:10303000E54AB405041231FF227C071225E022E59F
-:103040006D30E7087D007C05122547227C0512259E
-:10305000E022B420028003D34000800012312D22F0
-:1030600075430090FF83E0540FD395434024E5431C
-:1030700024F0F582E434FEF583E0AD6AAE69AF6812
-:1030800012031805430DED70010E8D6A8E698F686D
-:1030900080D1E5437D00FCC3E5709CF570E56F9D34
-:1030A000F56FE570456F6006E490FF83F02290FFB6
-:1030B00082E04408F0E4F56F75704990FC35E0B4A7
-:1030C00005028003D3404090FC36E0F543B405028E
-:1030D0008003D3400AE4FF04FE7C0B12332922B4A0
-:1030E00001028003D3400AE4FF04FE7C0912332965
-:1030F00022B403004010B40500500BE5437F00FEEE
-:103100007C141233292222B480004023B482005060
-:103110001E7C357DFC1217A77D008C6C8D6B90FC9E
-:1031200037E0600512312D80057C001231522222D9
-:1031300090FF83E0547FF090FF82E04408F090FF1E
-:1031400080E04408F02290FF82E04408F090FF8085
-:10315000E04408F0228C237D008C708D6F756A35F9
-:103160007569FC7568011231672290FF83E0547F16
-:10317000F0E5706449456F700122C3E5709408E57D
-:103180006F94004015752108E5217D00FCC3E570B2
-:103190009CF570E56F9DF56F8009857021E4F56FF2
-:1031A000757049752200E522C395215026AD6AAE9F
-:1031B00069AF681201EFFCE52224F8F582E434FEE1
-:1031C000F583ECF005220DED70010E8D6A8E698F8E
-:1031D0006880D3E521547F90FF81F0228C487F00E6
-:1031E000EF24FD4019E4EF75F007A4247FF582E495
-:1031F00034F8F583E065487002D3220F80E28F47F0
-:10320000C32285727085716F90FF82E054F7F09051
-:10321000FF83E0547FF022C000C001C002C006C09E
-:1032200007E5782408F8860653067F7CFF1232896A
-:103230007C007D00E57B6046FF90FD95E0547F6E4D
-:10324000700FC083C082A3E0FDA3E0FCA3157B80C8
-:1032500007A3A3A3DFE68026DF06D082D083801EEB
-:10326000E0F8A3E0F9A3E0FAD082D083E8F0A3E984
-:10327000F0A3EAF0A3C083C082A3A3A380DA123331
-:1032800022D007D006D002D001D0002285A87A75BE
-:10329000A888EC70027C3F8C7922E5782408F876C7
-:1032A0000012337680FBC000C001C002C006C00718
-:1032B000AE047CFF123289E57B6042FF90FD95E011
-:1032C000547F6E700BC083C082A3A3A3157B8007BD
-:1032D000A3A3A3DFEA8026DF06D082D08380D8E0D4
-:1032E000F8A3E0F9A3E0FAD082D083E8F0A3E9F0F4
-:1032F000A3EAF0A3C083C082A3A3A380DA7808085E
-:103300007918097C01E6547F6E700676007700809C
-:103310000608090CBC08EE123322D007D006D002F2
-:10332000D001D00022757900857AA822C0F0C08231
-:10333000C083C3E57B24E8500512337680F4EC604B
-:1033400031903651E493C39C4028C0047CFF123274
-:1033500089D004430480E57B75F003A42495F582AD
-:10336000E434FDF583ECF0EFA3F0EEA3F0057B125F
-:103370003322D083D082D0F022C0047C20D28CD2E1
-:103380008DD504FDD0042275A80075880075B8009D
-:1033900075F00075D000E4F8900000F608B800FB66
-:1033A000020000C3ED940250047D037CE8ECF4FCC1
-:1033B000EDF4FD0CBC00010D8C7F8D7E22C3EC94DE
-:1033C000BCED940250047D077CD0ECF4FCEDF4FDE0
-:1033D0000CBC00010D8C7D8D7C22EC700122C000A4
-:1033E000E5782418F8A604E5782408F8C6547FF692
-:1033F000E630E703D0002212337680F4C28C857C5D
-:103400008C857D8AD28CC0E0C0D0C0F0C082C083E1
-:10341000C000C001C002C003C004C005C006C00790
-:10342000121AFAE5782408F8E66024E5782410F802
-:10343000A681E57875F021A4248DF582E434FCF5AD
-:103440008378B4E58104C398F9E6F008A3D9FA7447
-:10345000082578F8057808E65480700CE578B407FC
-:10346000F3780875780080EFE5782410F88681E518
-:103470007875F021A4248DF582E434FCF58378B4CA
-:10348000E58104C398F9E0F608A3D9FAD007D0067D
-:10349000D005D004D003D002D001D000D083D08298
-:1034A000D0F0D0D0D0E032C0E0C0D0C000C001C069
-:1034B00002C28E857E8D857F8BD28E781979097AAE
-:1034C00007E77004A600800BE6600816E67004E7C4
-:1034D0004480F70809DAEAE579601314F579700E8B
-:1034E000E5782408F87600123322D28CD28DD002EF
-:1034F000D001D000D0D0D0E0327581B3742A90FFD3
-:1035000093F0757F30757EF8757D60757CF01205DF
-:10351000411235AA12175D90FF93E04401F0B2B357
-:103520001235D412338480DA22C0007C01EC2408E6
-:10353000F8E660090CBC08F512337680EED0002264
-:10354000C0F0C082C083C000C006C007ED2410F8E0
-:1035500076C2ED75F021A4248DF582E434FCF58368
-:10356000C082C083A3A3E4780DF0A3D8FCEC547F01
-:1035700075F002A4241DF582E5F03436F583E4935A
-:10358000FE740193F5828E83E493FE740193FFD061
-:1035900083D082EFF0A3EEF0ED2408F8EC4480F63F
-:1035A000D007D006D000D083D082D0F0227578002A
-:1035B000757B007A0879187808760077000809DAB0
-:1035C000F8E478087480447FF674014410F5897536
-:1035D000B808D2ABD2A9227581B3D28ED28CD2AF29
-:1035E000E57B6032FF90FD95E05480602478087997
-:1035F00008E0547FFA7B00E6547FB502027BFF08A7
-:10360000D9F5EB700CEAF0123526AD04AC02123598
-:103610003DA3A3A3DFD212337680C57C017D0022B7
-:10362000050004F404F804EC04E804E404F004FCE9
-:1036300004A804AC04D804DC04A404A404A404E096
-:1036400004C004B804BC04B404CC04C804C404D04A
-:1036500004D404B0190103002200480200480E30CF
-:103660001420C81AD0180A0C050602030102000132
-:10367000CE0181010000C000800060003000180011
-:1036800010000800040002000100081828380C058A
-:10369000100A0200000000000301100A02000000EE
-:1036A0000000FBE0FBF209022700010200A0FA097A
-:1036B00004000003FF00000007058102400000072E
-:1036C00005010240000007058303020001220354A4
-:1036D0000055005300420033003400310030002018
-:1036E00000200020002000200020002000200000FA
-:0336F000000000D7
-:00000001FF
diff --git a/firmware/mts_gsm.fw.ihex b/firmware/mts_gsm.fw.ihex
deleted file mode 100644
index f6ad0cbd30cb..000000000000
--- a/firmware/mts_gsm.fw.ihex
+++ /dev/null
@@ -1,867 +0,0 @@
-:1000000014360002001E021AF9FFFFFFFFFF023341
-:100010001DFFFFFFFFFFFFFFFFFFFFFFFFFF02339B
-:10002000C87581CE90FDE88583A012353CEC4D600B
-:100030007378AB8003760018B89CFA787F800376DB
-:100040000018B865FA78208003760018B820FA788E
-:10005000208003760018B81FFA90FDDDAE83AF82D2
-:1000600090FBF81200AA6005E4F0A380F690FDE88A
-:10007000A88290FDE8A982E8696005E4F20880F7AB
-:100080009001081200B390010C1200B390011012FD
-:1000900000B39001141200D190011A1200D1900106
-:1000A000201200D175D00012341A020126EF6582A9
-:1000B0007003EE658322E493F8740193F97402935C
-:1000C000FE740393F5828E83E869700122E493F64F
-:1000D000A30880F4E493FC740193FD740293FE740E
-:1000E0000393FF740493F8740593F58288831200D8
-:1000F000AA700122E493A3A883A9828C838D82F045
-:10010000A3AC83AD828883898280E32121049B8014
-:1001100080049BACAE049BFDE8049D049DFBF304AE
-:10012000A2049DFBF30502050280FED0F030F00929
-:1001300020F303F68010F7800D30F10920F303F26D
-:100140008004F38001F020F404FCD0E0CC22CCC089
-:10015000E0120163020154BC0005D0F0ACF022C3F0
-:1001600013DCFC02012ABF0009ED258275F001F8BD
-:10017000E622BF010FED2582F582EE3583F583750A
-:10018000F004E022ED258275F002F8E222D083D05F
-:1001900082F5F0C3E493A3C5F095F0C0E0C3D0F0BE
-:1001A000E493A395F04012A3A3C3E5F033500205F6
-:1001B000832582F58250020583740193C0E0E493A5
-:1001C000C0E022D083D082F5F0E4937009740193EB
-:1001D0007004A3A3800C74029365F06005A3A3A32D
-:1001E00080E7740193C0E0E493C0E022120264024D
-:1001F00001FB1202B80201FB1202DC0201FB30E03B
-:100200000720E302E622E72230E10720E302E222B0
-:10021000E32230E202E022E493221202DC02022313
-:100220001202B8020223ABF012022DCBC5F0CB2292
-:1002300030E01020E306E6F5F008E622E7F5F009E5
-:10024000E7192230E11020E306E2F5F008E222E3AC
-:10025000F5F009E3192230E206E0F5F0A3E022E42C
-:1002600093F5F074019322BB0003740922BB0107CC
-:1002700089828A83740422BB020789828A8374106C
-:1002800022740A22020284BB0007E92582F8740165
-:1002900022BB010DE92582F582EA3583F5837404DA
-:1002A00022BB020DE92582F582EA3583F5837410BD
-:1002B00022E92582F87402220202B8BF0005EDF897
-:1002C000740122BF01078D828E83740422BF02074E
-:1002D0008D828E83741022EDF87402220202DCBF3C
-:1002E0000007ED2582F8740122BF010DED2582F58E
-:1002F00082EE3583F583740422BF020DED2582F56D
-:1003000082EE3583F583741022ED2582F874022283
-:10031000020310C0E0120264020328C0E01202B817
-:10032000020328C0E01202DC02032830E00B20E3C5
-:1003300004D0E0F622D0E0F72230E10B20E304D035
-:10034000E0F222D0E0F322D0E0F022C9CDC9CACE3B
-:10035000CACBCFCB12035BEDF9EEFAEFFB22BB0069
-:100360002FBF000AFAEDF8E7F60809DAFA22BF0112
-:10037000128D828E83F802037809A3E7F0D8FA225F
-:10038000020383FAEDF8E7F20809DAFA2202038D94
-:10039000BB014DBF001489828A83F9EDF802039FE7
-:1003A00008A3E0F6D9FA220203B0BF01228D828EA3
-:1003B00083FB08C9C582C9CAC583CAE0A3C9C5826F
-:1003C000C9CAC583CAF0A3DBEAD8E8220203D38DE9
-:1003D000828E83F9EDF8E0F208A3D9FA220203DD58
-:1003E000BB024DBF001289828A83F9EDF80203EF48
-:1003F00008A3E493F6D9F922BF01238D828E83FBF3
-:1004000008C9C582C9CAC583CAE493A3C9C582C93C
-:10041000CAC583CAF0A3DBE9D8E722020422898295
-:100420008A83F9EDF8E493F208A3D9F922020433A0
-:10043000BF000DFAEDF8E3F60809DAFA2202043DEE
-:10044000BF01128D828E83F802044A09A3E3F0D81B
-:10045000FA22020455FAEDF8E3F20809DAFA220268
-:10046000045FE6FB08E6FA08E6F904F618700106F0
-:1004700022E6FF08E6FE08E6FD22EFF0A3EEF0A379
-:10048000EDF022EBF0A3EAF0A3E9F022E0FFA3E015
-:10049000FEA3E0FD22E0FBA3E0FAA3E0F9220000C6
-:1004A00000000000000502006105710026059800AB
-:1004B000330A0900610A750066154400610CF900F1
-:1004C0006109A9006109E000610DC000610BF10044
-:1004D000610A1C00610A510061173C0033174F008C
-:1004E000341E1400431EBF0044202C0044201A0078
-:1004F000471EE600471F8B004D1FDC004F1F080002
-:100500005832A800617CCC7DFF121CC52290FFFCF4
-:10051000E020E72DC2AFAE59AF58755A20E55A1406
-:10052000C55A6019E4FE7F05EE4FCE24FFCECF34CE
-:10053000FFCF6007E490FF92F080ED80E08E598F4E
-:10054000582212050A7D077CB71232C47D0F7C6EDB
-:100550001232DE789D7A06E4F608DAFC7A06120595
-:10056000CD7C03120E55122168E4FEFF7C0F12327F
-:100570004DD2A822123138E490FC38F090FFF0E020
-:1005800030E408740190FC39F08005E490FC39F007
-:100590007D0A7C001225461231BB2212313890FCB4
-:1005A00039E014700E90FFF0E04410F07C0012254A
-:1005B000DF801990FC39E0700E90FFF0E054EFF00E
-:1005C0007C001225DF80057C171225DF1231BB224B
-:1005D00090FFF0E054ABF090FFF0E04420F0228C6C
-:1005E000378D367882EDF608ECF6EDFEECFD7F01F6
-:1005F0009000051201F57880F67882E6FD08E6FCA9
-:10060000EDFEECFD7F019000041201F5540FFC7D1E
-:100610008012176D7880E6700DAD3AAE39AF38E4D0
-:100620001203187C082290FFF0E054FEF090FFF0D7
-:10063000E054FDF0801E7882E6FD08E6FCEDFEEC5D
-:10064000FD7F0190000812021725E0440190FFF39E
-:10065000F00206D97882E6FD08E6FCEDFEECFD7FAF
-:100660000190000612021754FE90FFF3F0802B78E1
-:1006700082E6FD08E6FCEDFEECFD7F01900008122D
-:100680000217FAEB90FFF1F01208C8400DAD3AAE38
-:1006900039AF38E41203187C18227882E6FD08E6A8
-:1006A000FCEDFEECFD7F0190000812021790FFF1B7
-:1006B000F01208C8400DAD3AAE39AF38E412031855
-:1006C0007C18227882E6FD08E6FCEDFEECFD7F0159
-:1006D000900006120217440190FFF3F07883E6249D
-:1006E00003F618E63400F67880E624FE500990FF01
-:1006F000F0E054FDF0800790FFF0E04402F0E49059
-:10070000FFF1F0788176007880E624FFFCE434FF86
-:10071000FD7881E67F00FEECD39EEF6480CD64809F
-:100720009D402F1208AD400F7881E6AD3AAE39AF4B
-:10073000381203187C182290FFF2E0FC788286833E
-:10074000088682ECF0788106A37882A68308A682C8
-:1007500080B51208AD400F7881E6AD3AAE39AF38BA
-:100760001203187C182290FFF2E0FC78828683083E
-:100770008682ECF07880E6AD3AAE39AF38120318D5
-:100780007C00228C378D367882EDF608ECF6EDFE93
-:10079000ECFD7F019000051201F57881F67882E684
-:1007A000FD08E6FCEDFEECFD7F019000041201F572
-:1007B000540FFC7D8112176D7881E670037C08224E
-:1007C00090FFF0E054FEF090FFF0E054FDF0801B4D
-:1007D0007882E6FD08E6FCEDFEECFD7F0190000866
-:1007E00012021725E090FFF3F0805B7882E6FD08A7
-:1007F000E6FCEDFEECFD7F0190000612021754FEB0
-:1008000090FFF3F080217882E6FD08E6FCEDFEEC37
-:10081000FD7F01900008120217FAEB90FFF1F01231
-:1008200008C840037C18227882E6FD08E6FCEDFE4D
-:10083000ECFD7F0190000812021790FFF1F0120802
-:10084000C840037C18227883E6240AF618E63400B0
-:10085000F6788076007881E624FFFCE434FFFD78AA
-:1008600080E67F00FEECD39EEF6480CD64809D40E7
-:100870002178828683088682E090FFF1F01208C812
-:1008800040037C1822788006788306E618700106FB
-:1008900080C390FFF0E04401F0788286830886826E
-:1008A000E090FFF1F01208C840037C18227C00227F
-:1008B00090FFF0E020E71290FFF0E030E50990FFB4
-:1008C000F0E04420F0C32280E7D32290FFF0E02044
-:1008D000E31290FFF0E030E50990FFF0E04420F0F3
-:1008E000C32280E7D3228C428D417C00ED54F0FD81
-:1008F000EC7003ED64307005753E038003753E04B3
-:10090000AC3E120F72758300858340E541540FF5AC
-:100910003FE5407004E53F64037035E53E24FD7516
-:10092000F00AA42402F582E434FCF583E030E60505
-:100930001210598019E53E249DF8E654FBF678A97B
-:10094000E62405F58218E63400F583740FF080592B
-:10095000E5407004E53F64047048E53E24FD75F011
-:100960000AA42402F582E434FCF583E030E507AC08
-:1009700042AD41121C5AE54230E21578ADE630E056
-:100980000F78ADE630E109E4FF04FE7C0412324D3D
-:1009900078A9E62406F58218E63400F583740FF092
-:1009A0008007E4FC7DEE121C5AC203221231381279
-:1009B0000F7278A9E62406F58218E63400F583E084
-:1009C00090FC38F078A9E62405F58218E63400F5A5
-:1009D00083E090FC39F0C2037D027C0012254612B0
-:1009E00031BB221231387895ECF6EC249DF8E630D4
-:1009F000E1077C131225DF800F90FC39E0FD78952C
-:100A0000E6FC1213EF1225DF1231BB2212313878C7
-:100A100095ECF67D00120F121225DF1231BB221267
-:100A200031387895ECF6EC249DF8E630E2077C133B
-:100A30001225DF801B7895E6249DF8E620E1077CEF
-:100A4000121225DF800A7895E6FC1214131225DFB6
-:100A50001231BB221231387895ECF6EC249DF8E681
-:100A600020E2077C111225DF800A7895E6FC12153A
-:100A7000141225DF1231BB221231387895ECF612B0
-:100A80000F7278A9E62409F58218E63400F583E0B0
-:100A900090FC3FF078A9E6240AF58218E63400F5C8
-:100AA00083E090FC40F078A9E62403F58218E63450
-:100AB00000F583E0FC78A9E62404F58218E634000A
-:100AC000F583E0F56278A9E62402F58218E63400A1
-:100AD000F583E0F5638C61E4EC333354017895F6EB
-:100AE0006008E56230E1037895067895E690FC4170
-:100AF000F078A7E62402F58218E63400F583E0FDDD
-:100B0000A3E0540CFCED54E68C65F564E56130E53A
-:100B100003436501E56220E50EE561547F7008E559
-:100B20006120E703436502E56130E303436510E5B7
-:100B30006130E203436520E561540360034365408F
-:100B4000E56130E103436580E56130E4034364011E
-:100B5000E56130E603436408E56220E40EE5615494
-:100B60007F7008E56120E7034364105365FB53641D
-:100B7000F9AD64E56590FC3ACDF0A3CDF0E56330C6
-:100B8000E30DE5635430C4540F90FC3DF08005E460
-:100B900090FC3DF0E563540390FC3CF0E5635404A5
-:100BA000C31390FC3EF090FC3CE0700E7D357EFC63
-:100BB0007F01740190000912014B78A9E62408F521
-:100BC0008218E63400F583E07C00FD78A9E624076E
-:100BD000F58218E63400F583E07F004CFEEF4D907F
-:100BE000FC38F0A3CEF0CEC2037D0A7C001225466D
-:100BF0001231BB221231387895ECF6789A760108DA
-:100C000076FC0876387897760C789A12046E120281
-:100C10001D7898CBF6CB08F67F00EF24EA401FE45E
-:100C2000EF25E090357EFD93CD04937899667003AF
-:100C3000ED186670067897760080030F80DC789652
-:100C4000EFF6789A12046E9000021202177898CB91
-:100C5000F6CB08F65404CB54064B60047897760B19
-:100C60007899E630E313789A12046E900005120129
-:100C7000F524FB50047897760D7899E654C07D00F2
-:100C800064C04D70047897760B789A12046E9000C9
-:100C9000041201F524FC50047897760F789A120418
-:100CA0006E9000061201F524FD50047897760E78B8
-:100CB0009A12046E9000091201F524FD50047897F1
-:100CC000760A7897E6702A7895E6FC120F72789A81
-:100CD00012046E78A7E6F978A6E6FA7B01740A7822
-:100CE00000120348C2037895E6FC1211157897ECC0
-:100CF000F67897E6FC1225DF1231BB2212313878E4
-:100D000095ECF6120F727895E624FD75F00AA4248E
-:100D100014F582E434FCF583AC82AD8378A6868337
-:100D2000088682ECF9EDFA7B0A78011203B0C2035F
-:100D30007895E6FC1211151231BB228D2B8C2AED11
-:100D400060407527017529487528FFE52A24FDFCB8
-:100D5000E434FFFDEC7C0325E0CD33CDDCF9FCE58C
-:100D6000292CF529E5283DF528AD29AE28AF2774B3
-:100D7000809000061203207480900002120320125B
-:100D80000FC5E52B14603B7527017529087528FFF1
-:100D9000E52A24FDFCE434FFFDEC7C0325E0CD33A3
-:100DA000CDDCF9FCE5292CF529E5283DF528AD2910
-:100DB000AE28AF27E4900006120320E49000021250
-:100DC0000320221231387895ECF6EC249DF8E630B9
-:100DD000E2097895E6FC121514D2007895E6FC122B
-:100DE0000F727896760090FC39E030E704789676BA
-:100DF000017896E6FD7895E6FC120D38C2033000C6
-:100E0000077895E6FC1214137C001225DF1231BB23
-:100E10002278A9E62404F58218E63400F583E0443C
-:100E200001F078A9E62404F58218E63400F583E0A1
-:100E300030E00280ED78A9E6240BF58218E6340054
-:100E4000F583E054F8F078A9E62402F58218E63438
-:100E500000F583E04480F022C2038C58120F7278B0
-:100E6000A6868308868279AF7A357B0A78011203D9
-:100E7000FE120E0EAC587D02120D38C203AC581291
-:100E80001115228D538E528F518C50120F72754F47
-:100E90000078A9E62405F58218E63400F583E02001
-:100EA000E41FE54F24F64019054FC2037C181232A7
-:100EB000FB90FF93E04401F0B2B3AC50120F72808C
-:100EC000D078A9E62405F58218E63400F583E02001
-:100ED000E405C2037C022278A9E62405F58218E61F
-:100EE0003400F583E0540F601678A9E62405F582F6
-:100EF00018E63400F583E0540FF0C2037C01227839
-:100F0000A88683088682E0AD53AE52AF5112031813
-:100F1000C2037C00228D318C30121514E531600F34
-:100F2000E530B4030A7C0112250E7C8112250EAC3B
-:100F300030120F72E531601A78AA8683088682E043
-:100F400054E7F0A3A3A3A3E054E7F0AC307D021272
-:100F50000D3878A6868308868279B97A357B0A7837
-:100F6000011203FEC203E530249DF8E654FDF6AC01
-:100F700030121115228C2630030512329A80F87C2B
-:100F80000A1231ADD203E52624FD78A3F670077866
-:100F9000AA76FF0876E078A3E67D007C0425E0CD04
-:100FA00033CDDCF9FC24A078A9F6ED34FF18F678EF
-:100FB000A3E675F00AA42400FCE434FCFD78A6ED59
-:100FC000F608ECF61232462278A9E62402F58218D9
-:100FD000E63400F583E030E72278A9E62402F582C2
-:100FE00018E63400F583E0547FF078A9E62402F592
-:100FF0008218E63400F583E04480F02278AA8683E4
-:10100000088682E0547FF0AD83E5822404FCE43D51
-:101010008C82F583E0547FF078A9E6240BF58218E2
-:10102000E63400F583E054F8F078ABE62401F5826D
-:1010300018E63400F583E04403F078ABE62405F5C8
-:101040008218E63400F583E04403F078A9E624052D
-:10105000F58218E63400F583740FF02278AA8683AF
-:10106000088682E0543FF0AD83E5822404FCE43D31
-:101070008C82F583E0543FF078A3E624A4F8E6FCE4
-:1010800078ABE62401F58218E63400F583ECF078BD
-:10109000A3E624A4F8E6FC78ABE62405F58218E67E
-:1010A0003400F583ECF078A9E6240BF58218E634D9
-:1010B00000F583E054FB4402F52678A7E62402F508
-:1010C0008218E63400F583E030E50343260178A971
-:1010D000E62405F58218E63400F583E030E00312DB
-:1010E0000FC5E526FC78A9E6240BF58218E6340046
-:1010F000F583ECF078A9E62405F58218E63400F5CE
-:1011000083740FF078AA8683088682E04480F0A377
-:10111000A3A3A3E04480F0228C2A120F7278A7E6E2
-:101120002408F58218E63400F583E0FC78A9E6246B
-:101130000AF58218E63400F583ECF078A7E6240778
-:10114000F58218E63400F583E0FC78A9E62409F579
-:101150008218E63400F583ECF078A6868308868250
-:10116000E0FDA3E0FCEDFE78A9E62408F58218E690
-:101170003400F583EEF0ECFE78A9E62407F582183A
-:10118000E63400F583EEF08C298D28C3EC9405ED50
-:10119000940C400575277C8033D3E5299401E5281C
-:1011A0009403400575273C8023D3E5299481E528E5
-:1011B000940140057527188013D3E5299460E5282C
-:1011C0009400400575270C8003752708AF27E4EFCE
-:1011D000547C4483FF8F27E527FC78ABE62401F598
-:1011E0008218E63400F583ECF0E527FC78ABE624C2
-:1011F00005F58218E63400F583ECF0E527FC78A3CA
-:10120000E624A4F8ECF678A9E62402F58218E63480
-:1012100000F583E0F52778A7E62402F58218E63486
-:1012200000F583A3E030E3175327C778A7E624052A
-:10123000F58218E63400F583E09035AA93422778CA
-:10124000A7E62402F58218E63400F583E030E705CE
-:1012500043274080035327BF5327FB78A7E6240684
-:10126000F58218E63400F583E06003432704532732
-:10127000FC78A7E62404F58218E63400F583E04202
-:1012800027432780E527FC78A9E62402F58218E6A3
-:101290003400F583ECF078A9E62404F58218E634EE
-:1012A00000F583E0F52778A7E62402F58218E634F6
-:1012B00000F583A3E030E1055327DF8003432720B7
-:1012C00078A7E62402F58218E63400F583E030E4DE
-:1012D000055327EF800343271078A7E62409F582FA
-:1012E00018E63400F583E0B40203432702E527FC47
-:1012F00078A9E62404F58218E63400F583ECF0784A
-:10130000A9E62403F58218E63400F583E0F5277892
-:10131000A7E62409F58218E63400F583E07005534A
-:10132000277F800343278078A7E62402F58218E60A
-:101330003400F583A3E030E00543272080035327E2
-:10134000DF78A7E62402F58218E63400F583E03062
-:10135000E30543274080035327BF78A7E62402F51F
-:101360008218E63400F583E030E00543271080035F
-:101370005327EF78A7E62402F58218E63400F583B8
-:10138000A3E030E40543270880035327F778A7E656
-:101390002402F58218E63400F583A3E030E5054326
-:1013A000270480035327FB78A7E62402F58218E67A
-:1013B0003400F583A3E030E605432701800353277B
-:1013C000FE78A7E62402F58218E63400F583A3E050
-:1013D00030E70543270280035327FDE527FC78A962
-:1013E000E62403F58218E63400F583ECF0C2037CB2
-:1013F00000228D278C26ED54031460037C1022E517
-:1014000027547C24FC40037C0B22E526249DF8E62F
-:101410004402F67C00228C30120F72E530249DF8D5
-:10142000E620E24FAC307D02120D38E53024FE4458
-:1014300028FC78AA8683088682ECF0AF83E58224B4
-:1014400004FEE43FFFEC8E828F83F07C038C2CE55E
-:101450002CFC78ABE62401F58218E63400F583EC29
-:10146000F0E52CFC78ABE62405F58218E63400F5AF
-:1014700083ECF0752D01752F48752EFFE53024FDA6
-:10148000FCE434FFFDEC7C0325E0CD33CDDCF9FC3E
-:10149000E52F2CF52FE52E3DF52E78ABE62404F54F
-:1014A0008218E63400F583E054E7F52CAD2FAE2E1C
-:1014B000AF2DE4900002120320E4900006120320F6
-:1014C0001201EF30E503432C10E52CFC78ABE62449
-:1014D00004F58218E63400F583ECF012105978A96F
-:1014E000E62406F58218E63400F583E0C203FCE545
-:1014F00030249DF8E64404F68C2CE530540FC45497
-:10150000F07E00FFEEEF44047D00FFEC4EFCED4F5B
-:10151000FD121CC57C00228C2F120F72120FF9785D
-:10152000AA8683088682E05408F0A3A3A3A3E0540C
-:1015300008F0AC2F7D02120D38C203E52F249DF870
-:10154000E654FBF67C00221231387896ECF6EC2457
-:101550009DF8E630E10A7D007C131225461231BB6E
-:101560007896E6249DF8E64401F67896E6FC120F9C
-:10157000727896E624FD75F00AA42414F582E4340A
-:10158000FCF58378A6E6FA08E6F97B0A78011203EF
-:10159000B078A6868308868279B97A357B0A780185
-:1015A0001203FE120FC5C2037896E6FC12111578DD
-:1015B00095ECF6EC600A7D007C081225461231BBE2
-:1015C0007896E6FC120F7278A9E62404F58218E6F4
-:1015D0003400F583E0441054DFFC78A9E62404F5D8
-:1015E0008218E63400F583ECF07895ECF6C2037CC3
-:1015F000C81232FB7896E6FC120F7278A9E6240432
-:10160000F58218E63400F583E054EFF0C2037CC89D
-:101610001232FB7896E6FC120F7278A9E62404F5E4
-:101620008218E63400F583E04410F0C2037CC8124F
-:1016300032FB7896E6FC120F7278A9E62404F58254
-:1016400018E63400F583E04420F0C2037CF0123247
-:10165000FB7896E6FC120F7278A9E62405F582184D
-:10166000E63400F583E030E415C2037896E64410D2
-:101670007F00FE7C0712324D1231BB02173B78A966
-:10168000E62404F58218E63400F583E054CFF0C276
-:10169000037CC81232FB7896E6FC120F7278A9E63A
-:1016A0002404F58218E63400F583E04430F0C203E8
-:1016B0007CF01232FB7896E6FC120F7278A9E624D1
-:1016C00005F58218E63400F583E030E414C20378AF
-:1016D00096E644107F00FE7C0712324D1231BB802B
-:1016E0005D78A9E62404F58218E63400F583E05419
-:1016F000EFF078A9E62404F58218E63400F583E0DB
-:1017000054DFF07896E624FD75F00AA42414F582DF
-:10171000E434FCF583AC82AD8378A68683088682A8
-:10172000ECF9EDFA7B0A78011203B0C2037896E671
-:10173000FC1211157D007C0B1225461231BB2212C2
-:101740003138E490FC39F07D027C001225461231DC
-:10175000BB221231387C001225DF1231BB22743CCF
-:1017600090FBE0F0743E90FBE0F0E490FC28F02267
-:101770008D358C34ECB401028003D340028028B450
-:1017800002028003D34008A835E625E0F68018B4AD
-:1017900004028003D3400AA835E625E025E0F68060
-:1017A00006A83576008000228C3C8D3BEDFEECFDDA
-:1017B0007F0175660675670090FC29120477120197
-:1017C000EFB480028006D3500302186E90FC2912F9
-:1017D00004899000031201F554F0B430028003D361
-:1017E000405F90FC29120489900008120217FAFD4C
-:1017F000EBFE7F0190FC2C120477EECD9035C3FCFC
-:10180000E493FF740193FEF9EFFA7B01EAFFE9FE2E
-:10181000ECC39EED9F40259035C5E493FD74019384
-:10182000FCEDFEECFD7F01EECDFC90FC2EE0D39CA8
-:1018300090FC2DE09D5005756680803312198C80D8
-:101840002EB460028003D3400BAC3CAD3B1207804A
-:101850008C66801BB41003B34010C3B42003B340A4
-:1018600009C3B440028003D34000756681800080C4
-:1018700075B481028003D3406B90FC2912048990D7
-:1018800000031201F554F0B430028003D3401D90E0
-:10189000FC29120489900008120217FAFDEBFE7F62
-:1018A0000190FC2F1204771218F68036B460028083
-:1018B00003D34013753A67E4F539F538AC3CAD3BDA
-:1018C0001205DC8C66801BB41003B34010C3B42037
-:1018D00003B34009C3B440028003D340007566815E
-:1018E000800080028000E566FC90FC29120489ECEF
-:1018F000900002120320AC672290FC291204899008
-:1019000000041201F5600474018001E4A2E0920178
-:1019100090FC29120489ED2403FD50010E90FC2C4B
-:1019200012047790FC291204899000051201F5F544
-:10193000679000041201F5540FFC7D6712176DE5E6
-:10194000677004756608227566007884760078846E
-:10195000E6C39567503890FC2F1204891201EFFC02
-:1019600090FC2C120489EC12031830010E90FC310B
-:10197000E004F090FC307003E004F078840690FC02
-:101980002EE004F090FC2D7003E004F080C0229063
-:10199000FC2AE0FDA3E0FCEDFEECFD7F01ED240A56
-:1019A000FD50010E90FC3212047790FC291204893C
-:1019B0009000041201F5540FB401028003D34017C4
-:1019C00090FC321204890DED70010E90FC2F120470
-:1019D0007778887601804EB402028003D340199054
-:1019E000FC32120489ED2402FD50010E90FC2F12EE
-:1019F000047778887602802DB404028003D34019DE
-:101A000090FC32120489ED2404FD50010E90FC2F4D
-:101A100012047778887604800CB400028003D340E7
-:101A2000007566082290FC291204899000051201B5
-:101A3000F5F567788576007885E6C39567400302FB
-:101A40001AF4788676007886E6C378889650769081
-:101A5000FC2C1204891201EFFC90FC321204921249
-:101A600001E9F45CFC1201E9F890FC2F120489E80A
-:101A7000C0E01201EFC8D0E0C8584CFC90FC2C121A
-:101A80000489EC1203187887ECF690FC31E004F03E
-:101A900090FC307003E004F009E970010A90FC3218
-:101AA00012048090FC291204899000041201F53080
-:101AB000E40E90FC2EE004F090FC2D7003E004F0A6
-:101AC00078860680817888E6FDE4FEFFEECDFC9006
-:101AD000FC31E02CF090FC30E03DF07888E6FDE44D
-:101AE000FEFFEECDFC90FC34E02CF090FC33E03DAA
-:101AF000F0788506021A347566002222C0E0C0F034
-:101B0000C082C083C0D0E8C0E0E9C0E0EAC0E0EB3A
-:101B1000C0E0ECC0E0EDC0E0EEC0E0EFC0E090FF60
-:101B200092E01201C01B47301B47321B56381B681E
-:101B30003A1B7A3E1B92441B86461B9E501BE0526A
-:101B40001BBF541C015600001C2290FF92E07F0036
-:101B5000FE7C0112324D021C32E4FF04FE7C0312B3
-:101B6000324D742090FFFEF0021C32E4FF04FE7C34
-:101B70000212324D744090FFFEF0021C32E4FF046A
-:101B8000FE7C0412324D021C32E4FF04FE7C05127E
-:101B9000324D021C32E4FF04FE7C0612324D021C60
-:101BA0003290FFA5E07D0090FBF8CDF0A3CDF09042
-:101BB000FBF9E0FCF58390FBF8E04433FD121CC513
-:101BC000807390FFB5E07D0090FBFACDF0A3CDF0DF
-:101BD00090FBFBE0FCF58390FBFAE04443FD121C14
-:101BE000C5805290FFA6E07D0090FBFCCDF0A3CD18
-:101BF000F090FBFDE0FCF58390FBFCE04434FD122B
-:101C00001CC5803190FFB6E07D0090FBFECDF0A3B7
-:101C1000CDF090FBFFE0FCF58390FBFEE04444FD3B
-:101C2000121CC5801090FF92E07D00FCED44AAFDDF
-:101C3000121CC58000E490FF92F0D0E0FFD0E0FEDF
-:101C4000D0E0FDD0E0FCD0E0FBD0E0FAD0E0F9D06D
-:101C5000E0F8D0D0D083D082D0F0D0E0320581053A
-:101C60008105810581A881181818EDF608ECF69019
-:101C7000FF5AE020E70280F790FF59E07D00A8813D
-:101C800018CDF6CD08F67D03A881E618FCE6CC2534
-:101C9000E0CC33CCDDF9CCF6CC08F6A88118E644CC
-:101CA000F8F6A881181818E6FD08E6FCA881188641
-:101CB00083088682EDF0A3ECF0740290FF5AF015D1
-:101CC0008115811581158122E5812405F581E4A81E
-:101CD0008118F6A88118181818EDF608ECF690FB94
-:101CE000F5E024F85003021DE6E4A8811818F6A8D0
-:101CF0008118E6FEA88118181818E6FD08E6FC7F92
-:101D000000EF24F8404DE4EF25E0247DF582E43433
-:101D1000FCF583E0FBA3E06C7003FAEB6D700974D3
-:101D200001A8811818F6802BE4EF25E0247DF582C8
-:101D3000E434FCF5837A00E054F0CCF8CCCDF9CD56
-:101D4000FB7800E954F0F9EA687002EB6970010E63
-:101D50000F80AEA88118EEF6A88118181818EDF6B5
-:101D600008ECF6A881EFF6A8811818E67079A8812A
-:101D700018E624F74071A88118181818E6540FA81F
-:101D800081F664046017A881E664036010A88118D6
-:101D9000181818E6FD08E6FC121C5A804A7C0A1244
-:101DA00031ADA88118181818E6FD08E6FC90FBF480
-:101DB000E025E0247DF582E434FCF583EDF0A3EC2E
-:101DC000F090FBF4E0FFE4EF045407FF90FBF4F025
-:101DD00090FBF5E004F012324690FBF6E07008E468
-:101DE000FEFF7C0F12324D802790FBF7E004F05489
-:101DF0003F701D90FBF7E044FE7D00FC90FBF4E09B
-:101E000025E0247DF582E434FCF583EDF0A3ECF0CD
-:101E1000E58124FBF58122788B7600788C7600743E
-:101E20000190FBF6F012313890FBF5E060577C0A28
-:101E30001231AD90FBF3E025E0247DF582E434FC23
-:101E4000F583E0FDA3E0FC90FBF3E025E0247DF5C5
-:101E500082E434FCF583E4F0A3F090FBF3E0FFE4CC
-:101E6000EF045407FF90FBF3F090FBF5E014F078DB
-:101E700089EDF608ECF61232467889E6FD08E6FCB4
-:101E80001208E380A312329A90FF93E04401F0B26B
-:101E9000B3788B06B60011788B7600788CE6F40464
-:101EA00004A2E092B4788CF6021E25E490FBF6F0D2
-:101EB00090FBF5E07D00FCED44CFFD121C5A123181
-:101EC000BB22123138E5706449456F601590FF837D
-:101ED000E0540F7D00D39570ED956F5005122F8162
-:101EE00080031230511231BB22123138E57064493F
-:101EF000456F600512308B800E90FF80E04408F043
-:101F000090FF83E0547FF01231BB221231388C54A1
-:101F1000EC54F0B41015756A357569FC756801E507
-:101F20006A2403F56AE5693400F569E4F557F55666
-:101F3000E556C394015027E554540FFCAD6AAE69D1
-:101F4000AF68120E808C55EC60028012056AE56A5B
-:101F5000700205690557E5577002055680D2E554B1
-:101F6000540F249DF8E654FEF6E554540F7F00FE0E
-:101F70007C1212324DE5551470097D007C09122542
-:101F8000468007AD577C001225461231BB22123124
-:101F90003890FFFCE04402F090FF00E030E713903F
-:101FA000FF83E04480F0436D8090FFFCE04401F04B
-:101FB000801190FF82E04408F0536D7F90FFFCE0B9
-:101FC00054FEF090FF81E04480F01225F990FFFE6E
-:101FD000E04405F090FFFCE054FDF01231BB22120A
-:101FE00031387C011232FB78ADE64402F674FEFC17
-:101FF00004FD121CC590FF5AE030E70280F7E4F5BB
-:102000004E754D10AC4EAD4DE54E154E7002154D52
-:10201000EC4D600280EE4387011231BB2212313851
-:102020007C021231C778ADE654FDF61231BB2212A4
-:10203000313878ADE630E02C78ADE630E12678AD89
-:10204000E6FCF58318E644F0FD121C5A90FFFCE014
-:102050004420F07C021232FB78ADE654FDF6741A8F
-:1020600090FFFEF078ADE6FCF58318E644F1FD1232
-:102070001C5A1231BB22756D0090FFFFE0600343D4
-:102080006D01756E00E4F56CF56BE4F56F757049E4
-:10209000748490FF82F0748490FF80F0748090FFCD
-:1020A00058F0748090FF5AF0AD46AF457E00EE24A4
-:1020B000FE5003022142E4EE75F007A4247FF5826E
-:1020C000E434F8F583E0FFE4EF5480FDE4EF540FCF
-:1020D00014FFED6038E4EF75F008A42448F582E4BD
-:1020E00034FFF5837490F0E4EF75F008A4244AF50A
-:1020F00082E434FFF5837480F0E4EF75F008A424E3
-:102100004EF582E434FFF5837480F08034E4EF759B
-:10211000F008A42408F582E434FFF5837490F0E419
-:10212000EF75F008A4240AF582E434FFF583E4F0A7
-:10213000E4EF75F008A4240EF582E434FFF583E49F
-:10214000F00E0220AB8D468E448F45747F90FFFDCC
-:10215000F0749090FFFCF0228C58EC24F65006E5C9
-:10216000582437FC22E5582430FC22D2B0122543F3
-:10217000EC700302227E755C03AE5B7F00E55C15AC
-:102180005C6480247F5035EF2400F582E434FBF555
-:1021900083E0FE24FE501EEF7D00FCE4FB7474C35C
-:1021A0009CFAEB9DFBEE7D00FCEAC39CED6480CBCA
-:1021B00064809B50028005EF2EFF80C18E5B8F5A9A
-:1021C000E55C6480247F500302227EE55A248E5011
-:1021D0000302227E855A5D755B00AE5AAF5B903577
-:1021E000EEE493F55CE55C155C6480247F5018EEAA
-:1021F0002400F582E434FBF583E0FCEF9035EE93A8
-:102200006C70040E0F80DE8E5A8F5BE55C64802458
-:102210007F406E755E017560E8755FFFE55D2402C5
-:10222000F55A755C07E55C334057AD60AE5FAF5E55
-:10223000E55CF5823395E0F5831201F5C4540FFC9B
-:10224000122155E55A2400F582E434FBF583ECF0C5
-:10225000055A055AAD60AE5FAF5EE55CF582339519
-:10226000E0F5831201F5540FFC122155E55A2400C4
-:10227000F582E434FBF583ECF0055A055A155C80D1
-:10228000A4740290F851F090F86B79C77A357B27E7
-:1022900078011203FE756A357569FC756801E49072
-:1022A000FF83F0748090FF81F0755902E55975F055
-:1022B00007A4247FF582E434F8F583E0788FF6FCF8
-:1022C000540F14FC788FECF6E55975F007A42481BF
-:1022D000F582E434F8F583E0789276FD0876E8FC40
-:1022E000788FE675F008A42448F582E434FFF5837E
-:1022F000E4F0788FE675F008A4244FF582E434FF0B
-:10230000F583ECF07892E6FF08E67E03CFC313CFA7
-:1023100013DEF9FE788FE675F008A42449F582E40F
-:1023200034FFF583EEF0788FE675F008A4244AF5C3
-:1023300082E434FFF5837480F07890ECF67D0078C9
-:1023400093E62CF618E63DF67892E6FD08E67C0367
-:10235000CDC313CD13DCF9FC788FE675F008A42407
-:102360004DF582E434FFF583ECF0788FE675F008E4
-:10237000A4244EF582E434FFF583E4F07892E6FD80
-:1023800008E6FC788FE6FF7E00EE24FE5003022470
-:10239000FDE4EE75F007A4247FF582E434F8F583BC
-:1023A000E0FFE4EF5480FAE4EF540F14FFE4EE751D
-:1023B000F007A42481F582E434F8F583E07890F600
-:1023C000E4EE1313548024F0F8E434FDF9E8FCE95A
-:1023D000FD8A5AEA700302246AE4EF75F008A42427
-:1023E00048F582E434FFF583E4F07890E6FAE4EF10
-:1023F00075F008A4244FF582E434FFF583EAF0ED8C
-:10240000FBEC7A03CBC313CB13DAF9FAE4EF75F0E4
-:1024100008A42449F582E434FFF583EAF07890E6D5
-:102420007B00FAEC2AFCED3BFDFBEC7A03CBC313FB
-:10243000CB13DAF9FAE4EF75F008A4244DF582E441
-:1024400034FFF583EAF0E4EF75F008A4244AF5823E
-:10245000E434FFF5837480F0E4EF75F008A4244EB3
-:10246000F582E434FFF5837480F00224F9E4EF751B
-:10247000F008A42408F582E434FFF583E4F07890B2
-:10248000E6FAE4EF75F008A4240FF582E434FFF5D2
-:1024900083EAF0EDFBEC7A03CBC313CB13DAF9FA42
-:1024A000E4EF75F008A42409F582E434FFF583EA2B
-:1024B000F07890E67B00FAEC2AFCED3BFDFBEC7A31
-:1024C00003CBC313CB13DAF9FAE4EF75F008A424B5
-:1024D0000DF582E434FFF583EAF0E4EF75F008A42B
-:1024E000240AF582E434FFF583E4F0E4EF75F008A4
-:1024F000A4240EF582E434FFF583E4F00E02238673
-:102500008E597892EDF608ECF6788FEFF61220737C
-:10251000228C26EC30E718E526540F1475F008A439
-:102520002448F582E434FFF583E054DFF08016E5BB
-:1025300026540F1475F008A42408F582E434FFF53E
-:1025400083E054DFF0227C0022EC90FC37F08C24F6
-:10255000ED2403F5257D00D39572ED95714003853B
-:102560007225E52524B75009752503740290FC37C0
-:10257000F0AC2512307622E4F56CF56B12257D2245
-:1025800090FC35E06573600E740490FC37F0E4F560
-:102590006B756C0380467D73E4FEFF79357AFC7BB6
-:1025A0000174057800120348E56C2403F56CE56BB3
-:1025B0003400F56BE56CD39572E56B95714006853B
-:1025C000726C85716BD3E56C9448E56B9400400C9C
-:1025D000740290FC37F0E4F56B756C03AC6C123050
-:1025E0007622EC90FC37F0E4F56CF56B8C32EC6005
-:1025F0000512306780057C001230762290FF93E050
-:102600004401F0B2B390FF04E0F54A90FF06E0FD0C
-:10261000A3E0ED7D00FC7D00FC90FF06E0FFA3E061
-:102620007E00FFE4FEEC4EFCED4FFDC3EC9448ED64
-:102630009400502290FF06E0FDA3E0ED7D00FC7DBC
-:1026400000FC90FF06E0FFA3E07E00FFE4FEEC4EFE
-:10265000FCED4FFD8004E4FD7C488C728D7190FF91
-:1026600002E0FDA3E0ED7D00FC7D00FC90FF02E0B8
-:10267000FFA3E07E00FFE4FEEC4EF54CED4FF54B82
-:10268000756A357569FC7568017D357EFC7F017959
-:1026900073E4FAFB74057800120348754900E549B4
-:1026A00024FE4019AD6AAE69AF68E412031805490B
-:1026B0000DED70010E8D6A8E698F6880E1756A3547
-:1026C0007569FC75680190FF00E05460B4000280F9
-:1026D00006D35003022CBFE54A540FF549E54A548E
-:1026E00080A2E0920290FF01E012018A000B2CBA56
-:1026F000270528232CBA292F2CBA2A122A462BADBB
-:102700002BB02BF02C632C91E56D30E70EE54C459A
-:102710004B7008E572640245716003022CBC90FFA7
-:1027200000E0541FB400028003D34029E54A60034F
-:10273000022820AD6AAE69AF68740112031878AD43
-:10274000E630E00BAD6AAE69AF6874021203187C24
-:102750000212307622B401028003D3401BE56D20C3
-:10276000E107E54A6003022820E54A24FE500302FF
-:1027700028207C0212307622B402028006D3500355
-:1027800002281EE56D20E10DE54A6009E54A6480F6
-:102790006003022820AC4A1230FD4003022820E5E5
-:1027A00049702530021190FF80E05408AD6AAE698F
-:1027B000AF68120318800F90FF82E05408AD6AAE34
-:1027C00069AF68120318803D154930021DE549754F
-:1027D000F008A42448F582E434FFF583E05408AD02
-:1027E0006AAE69AF68120318801BE54975F008A44A
-:1027F0002408F582E434FFF583E05408AD6AAE693D
-:10280000AF68120318AD6AAE69AF681201EF600BD2
-:10281000AD6AAE69AF6874011203187C021230769B
-:10282000228000022CBCE56D20E706E57245716050
-:1028300003022CBC90FF00E0541FB400028003D3BD
-:10284000401AE54C14454B7004E54A600302292CFC
-:1028500078ADE654FEF67C0012307622B401028098
-:1028600003D3402AE56D20E108E56D20E00302294D
-:102870002CE56D30E004E54A700BE56D30E109E5CB
-:102880004A24FE500302292C7C0012307622B40226
-:10289000028006D3500302292AE54C454B6003020F
-:1028A000292CAC4A1230FD400302292CE56D20E1B1
-:1028B00007E56D20E0028077E56D30E006E54960D0
-:1028C00002806CE549700F90FF82E054F7F090FFB2
-:1028D00080E054F7F022E549B401028003D34009B7
-:1028E0007D017C03120F128011B402028003D340D9
-:1028F000097D017C04120F1280001549300215E594
-:102900004975F008A42448F582E434FFF583E054C7
-:10291000F7F08013E54975F008A42408F582E43443
-:10292000FFF583E054F7F07C00123076228000023D
-:102930002CBCE56D20E706E57245716003022CBCF6
-:1029400090FF00E0541FB400028003D3401AE54C0E
-:1029500014454B7004E54A6003022A0F78ADE64443
-:1029600001F67C0012307622B401028003D34029A4
-:10297000E56D20E108E56D20E003022A0FE56D30EA
-:10298000E004E549700BE56D30E108E54924FE50AF
-:1029900002807F7C0012307622B402028003D34092
-:1029A0006FE54C454B60028069AC4A1230FD400235
-:1029B0008060E56D20E107E56D20E0028054E54987
-:1029C000701430020990FF80E04408F0800790FF07
-:1029D00082E04408F022E56D30E1331549300215FC
-:1029E000E54975F008A42448F582E434FFF583E056
-:1029F0004408F08013E54975F008A42408F582E442
-:102A000034FFF583E04408F07C0012307622800227
-:102A10008000022CBCE56D20E712E5724571700C58
-:102A2000E54A700890FF00E0541F6003022CBCE5EB
-:102A30004C90FFFFF090FFFFE06005436D018003C5
-:102A4000536DFE7C0012307622E56D30E70EE572A4
-:102A50004571600890FF00E0541F6003022CBCAD7C
-:102A60004BE54CED7D00FC7D00FCBD0002800302C7
-:102A70002BA8B401028003D34032E54A7005E54C2F
-:102A8000FC6003022BAA756A407569F8756801D36A
-:102A9000E5729412E57194004006E4FD7C12800416
-:102AA000AC72AD718C708D6F12308B22B4020280CB
-:102AB00003D34059E54A6003022BAAE54CFC70277A
-:102AC000756A527569F8756801D3E5729419E571F4
-:102AD00094004006E4FD7C198004AC72AD718C70EA
-:102AE0008D6F12308B8025756A6B7569F87568017A
-:102AF000D3E5729427E57194004006E4FD7C2780BD
-:102B000004AC72AD718C708D6F12308B22B40302E5
-:102B10008006D35003022BA8E54CF549700F90FFB7
-:102B200004E0FDA3E04D6003022BAA801890FB0295
-:102B3000E0FDA3E0FC90FF05E06C700790FF04E06F
-:102B40006D60028068E4F570F56F7F00E54914C59B
-:102B500049600FEF2400F582E434FBF583E02FFF9A
-:102B600080EA8F4AE54A2400F582E434FBF583E0ED
-:102B70007D00D39572ED95714006AC72AD71800FFA
-:102B8000E54A2400F582E434FBF583E07D00FC8C0B
-:102B9000708D6FE54A2400FCE434FBFDFEECFD7F04
-:102BA000018D6A8E698F6812308B228000022CBCE6
-:102BB000022CBCE56D30E719E5721445717012E521
-:102BC0004A700EE54C454B700890FF00E0541F60C2
-:102BD00003022CBCE56D20E008E56D20E103022C2A
-:102BE000BC756A6EE4F569F568E4F56F04F570127A
-:102BF000308B22E56D20E727E57245717021E54AAB
-:102C0000701DE54C6402454B600DE54C14454B606E
-:102C100006E54C454B700890FF00E0541F6003022E
-:102C20002CBCE56D20E008E56D20E103022CBC859D
-:102C30004C6EE56E700A436D01536DFDD2B080207D
-:102C4000E56E64026007E56E1460028072536DFEEB
-:102C5000436D02E56E64026005E56E147002C2B059
-:102C60007C0012307622E56D30E71AE5721445716A
-:102C70007013E54A700FE54C454B700990FF00E07A
-:102C8000541F1460028038E56D20E10280317C0120
-:102C900012307622E56D20E715E5724571700FE57B
-:102CA0004C454B700990FF00E0541F146002800FE8
-:102CB000E56D20E10280087C00123076228000025F
-:102CC0002F7DB440028006D35003022F7390FF0182
-:102CD000E090FC35F0E54A90FC36F0E490FC37F0EB
-:102CE000E56A2403F56AE5693400F569AD4BE54C06
-:102CF000856A82856983CDF0A3CDF090FF01E01253
-:102D000001C02D2A012D50022D7A032DA4042DF28D
-:102D1000052E2F062E55072E7B082EA7092ECD0B2C
-:102D20002EF30C2F02802F028100002F60E56D2012
-:102D3000E7067C051225DF227D767E357F02793815
-:102D40007AFC7B01740878001203487D087C00122D
-:102D5000254622E56D20E7067C051225DF22E54A9F
-:102D6000B403004010B40500500BE54A7F00FE7C20
-:102D70001012324D227D007C0712254622E56D207F
-:102D8000E7067C051225DF22E54AB403004010B4B3
-:102D90000500500BE54A7F00FE7C1112324D227D6A
-:102DA000007C0712254622E56D20E7067C051225EA
-:102DB000DF22E54AB405028003D3400AE4FF04FEA3
-:102DC0007C0A12324D22B401028003D3400AE4FF90
-:102DD00004FE7C0812324D22B403004010B40500FA
-:102DE000500BE54A7F00FE7C1312324D227D007CA1
-:102DF0000712254622E56D20E734D3E5729448E5B5
-:102E00007194005006E572457170067C021225DF50
-:102E100022E54AB40103B3400BC3B403004009B434
-:102E200006005004123123227C071225DF221225CE
-:102E30007D22E56D20E71DE54AB403004010B4058E
-:102E400000500BE54A7F00FE7C1612324D227C07B3
-:102E50001225DF2212257D22E56D20E71DE54AB40B
-:102E600003004010B40500500BE54A7F00FE7C19BA
-:102E700012324D227C071225DF2212257D22E56DBC
-:102E800020E723748190FF93F0E54AB403004010DB
-:102E9000B40500500BE54A7F00FE7C1712324D222C
-:102EA0007C071225DF2212257D22E56D20E71DE536
-:102EB0004AB403004010B40500500BE54A7F00FE01
-:102EC0007C1812324D227C071225DF2212257D222A
-:102ED000E56D20E71DE54AB403004010B40500503D
-:102EE0000BE54A7F00FE7C1512324D227C0712252D
-:102EF000DF2212257D22E56D20E7067C071225DF03
-:102F00002212257D22E56D30E72090FF00E0541F5E
-:102F1000701090FF01E0B480051225748003122523
-:102F20007D227D007C051225462290FF00E0541F83
-:102F300060067C051225DF22D3E5729448E5719482
-:102F400000500BC3E5729407E571940050067C03B2
-:102F50001225DF22E54AB40504123123227C071230
-:102F600025DF22E56D30E7087D007C05122546222D
-:102F70007C051225DF22B420028003D340008000AC
-:102F80001230512275430090FF83E0540FD39543D4
-:102F90004024E54324F0F582E434FEF583E0AD6A95
-:102FA000AE69AF6812031805430DED70010E8D6A0E
-:102FB0008E698F6880D1E5437D00FCC3E5709CF588
-:102FC00070E56F9DF56FE570456F6006E490FF83D7
-:102FD000F02290FF82E04408F0E4F56F75704990AC
-:102FE000FC35E0B405028003D3404090FC36E0F5A8
-:102FF00043B405028003D3400AE4FF04FE7C0B12B5
-:10300000324D22B401028003D3400AE4FF04FE7C67
-:103010000912324D22B403004010B40500500BE5F4
-:10302000437F00FE7C1412324D2222B480004023E4
-:10303000B48200501E7C357DFC1217A57D008C6C7F
-:103040008D6B90FC37E0600512305180057C0012DA
-:103050003076222290FF83E0547FF090FF82E0449C
-:1030600008F090FF80E04408F02290FF82E04408DE
-:10307000F090FF80E04408F0228C237D008C708D5E
-:103080006F756A357569FC75680112308B2290FF87
-:1030900083E0547FF0E5706449456F700122C3E519
-:1030A000709408E56F94004015752108E5217D00B6
-:1030B000FCC3E5709CF570E56F9DF56F8009857028
-:1030C00021E4F56F757049752200E522C395215002
-:1030D00026AD6AAE69AF681201EFFCE52224F8F56F
-:1030E00082E434FEF583ECF005220DED70010E8DC7
-:1030F0006A8E698F6880D3E521547F90FF81F0222A
-:103100008C487F00EF24FD4019E4EF75F007A424FC
-:103110007FF582E434F8F583E065487002D3220F2E
-:1031200080E28F47C32285727085716F90FF82E0C5
-:1031300054F7F090FF83E0547FF022C000C001C03C
-:1031400002C006C007E5782408F8860653067F7C8F
-:10315000FF1231AD7C007D00E57B6046FF90FD9560
-:10316000E0547F6E700FC083C082A3E0FDA3E0FC3B
-:10317000A3157B8007A3A3A3DFE68026DF06D0820A
-:10318000D083801EE0F8A3E0F9A3E0FAD082D083D8
-:10319000E8F0A3E9F0A3EAF0A3C083C082A3A3A34D
-:1031A00080DA123246D007D006D002D001D00022F9
-:1031B00085A87A75A888EC70027C3F8C7922E57826
-:1031C0002408F8760012329A80FBC000C001C002C9
-:1031D000C006C007AE047CFF1231ADE57B6042FF44
-:1031E00090FD95E0547F6E700BC083C082A3A3A3B3
-:1031F000157B8007A3A3A3DFEA8026DF06D082D059
-:103200008380D8E0F8A3E0F9A3E0FAD082D083E885
-:10321000F0A3E9F0A3EAF0A3C083C082A3A3A38034
-:10322000DA7808087918097C01E6547F6E70067612
-:10323000007700800608090CBC08EE123246D00761
-:10324000D006D002D001D00022757900857AA8225C
-:10325000C0F0C082C083C3E57B24E8500512329AD7
-:1032600080F4EC6031903575E493C39C4028C00431
-:103270007CFF1231ADD004430480E57B75F003A4DC
-:103280002495F582E434FDF583ECF0EFA3F0EEA392
-:10329000F0057B123246D083D082D0F022C0047C6D
-:1032A00020D28CD28DD504FDD0042275A80075885B
-:1032B0000075B80075F00075D000E4F8900000F6D5
-:1032C00008B800FB020000C3ED940250047D037CAB
-:1032D000E8ECF4FCEDF4FD0CBC00010D8C7F8D7E60
-:1032E00022C3EC94BCED940250047D077CD0ECF436
-:1032F000FCEDF4FD0CBC00010D8C7D8D7C22EC708E
-:103300000122C000E5782418F8A604E5782408F81E
-:10331000C6547FF6E630E703D0002212329A80F4DA
-:10332000C28C857C8C857D8AD28CC0E0C0D0C0F0F8
-:10333000C082C083C000C001C002C003C004C00579
-:10334000C006C007121AF8E5782408F8E66024E5FC
-:10335000782410F8A681E57875F021A4248DF582F3
-:10336000E434FCF58378AEE58104C398F9E6F0080F
-:10337000A3D9FA74082578F8057808E65480700C0B
-:10338000E578B407F3780875780080EFE5782410C5
-:10339000F88681E57875F021A4248DF582E434FC6B
-:1033A000F58378AEE58104C398F9E0F608A3D9FA6D
-:1033B000D007D006D005D004D003D002D001D00071
-:1033C000D083D082D0F0D0D0D0E032C0E0C0D0C026
-:1033D00000C001C002C28E857E8D857F8BD28E7823
-:1033E0001979097A07E77004A600800BE6600816D1
-:1033F000E67004E74480F70809DAEAE57960131417
-:10340000F579700EE5782408F87600123246D28CF1
-:10341000D28DD002D001D000D0D0D0E0327581ADB5
-:10342000742A90FF93F0757F30757EF8757D607516
-:103430007CF012053F1234CE12175B90FF93E044EC
-:1034400001F0B2B31234F81232A880DA22C0007C44
-:1034500001EC2408F8E660090CBC08F512329A80E9
-:10346000EED00022C0F0C082C083C000C006C007FA
-:10347000ED2410F876BCED75F021A4248DF582E4DE
-:1034800034FCF583C082C083A3A3E4780DF0A3D8F5
-:10349000FCEC547F75F002A42441F582E5F034354C
-:1034A000F583E493FE740193F5828E83E493FE74B6
-:1034B0000193FFD083D082EFF0A3EEF0ED2408F863
-:1034C000EC4480F6D007D006D000D083D082D0F074
-:1034D00022757800757B007A08791878087600776D
-:1034E000000809DAF8E478087480447FF67401442F
-:1034F00010F58975B808D2ABD2A9227581ADD28EEC
-:10350000D28CD2AFE57B6032FF90FD95E0548060B5
-:103510002478087908E0547FFA7B00E6547FB502EE
-:10352000027BFF08D9F5EB700CEAF012344AAD04C7
-:10353000AC02123461A3A3A3DFD212329A80C57CFD
-:10354000017D002204FE04F204F604EA04E604E22B
-:1035500004EE04FA04A604AA04D604DA04A204A21F
-:1035600004A204DE04BE04B604BA04B204CA04C64B
-:1035700004C204CE04D204AE1901030022004802A2
-:1035800000480E301420C81AD0180A0C0506020391
-:1035900001020001CE0181010000C0008000600036
-:1035A0003000180010000800040002000100081894
-:1035B00028380C05100A0200000000000301100A60
-:1035C000020000000000FBE0FBF2090227000102FC
-:1035D00000A0FA0904000003FF00000007058102B3
-:1035E00040000007050102400000070583030200B8
-:1035F00001220354005500530042003300340031CF
-:1036000000300020002000200020002000200020AA
-:073610000020000000000093
-:00000001FF
diff --git a/firmware/myricom/lanai.bin.ihex b/firmware/myricom/lanai.bin.ihex
deleted file mode 100644
index bf47f4c74940..000000000000
--- a/firmware/myricom/lanai.bin.ihex
+++ /dev/null
@@ -1,4771 +0,0 @@
-:100000004FF8F20EFE00C290000007880008E001E1
-:10001000014C9793FFFCE000001400000001000079
-:1000200000009293FFFC02900008F7062A6C9713D9
-:10003000FFFCF7062C109713FFFC07880008E00070
-:1000400015489793FFFCF702053C9713FFFCF70256
-:1000500000039713FFFCF70629E09713FFFC0788BE
-:100060000008E000161C9793FFFCF7062B849713FB
-:10007000FFFCF7062C1C9713FFFC07880008E00024
-:1000800015489793FFFCF7020ABC9713FFFCF70291
-:1000900000029713FFFCF7062AF89713FFFC078866
-:1000A0000008E000161C9793FFFC8796FFFC8296E1
-:1000B000FFF802140000013C0000000000019293D0
-:1000C000FFFC02900008F7044A9C85160000203AC5
-:1000D0000001EE00010100000001F70475EC0000D2
-:1000E0000001203A0000E600010000000001F704D2
-:1000F00075F000000001203A0000E600012D00002C
-:100100000001F7042D38F6862C2806380001F60584
-:100110002D3877390002F482001220320044E600C4
-:1001200001E0B4BA6802E00001E0F0052D38F70400
-:100130003B64F5844F54F7057A10202E0000E6004A
-:100140000199972A002095AA001CF6064A9826AC29
-:10015000000177350001C738680077390002073899
-:10016000000CA4BA60020000000194AA0010C73875
-:100170006000873A000400000001972A0014F70489
-:100180004A9C0000000127380001C02E7200D700F1
-:100190000A01E00001D0F7057A1895AA001CF606BE
-:1001A0004A9806AC000177350001C73868007739F6
-:1001B00000020738000CA4BA60020000000194AAF3
-:1001C0000010C7386000873A0004F0057A18972AB3
-:1001D0000014F50579D807880008E00001F497932A
-:1001E000FFFC8796FFFC8296FFF802140004013C96
-:1001F0000000000000019293FFFC02900008221012
-:100200000038F7047A10F6843B6400000001C03A1D
-:100210006A00470C0001D7000A70203A0000E6008F
-:10022000024C00000001F70475EC00000001203AC8
-:100230000000E600024C00000001F70475F0000029
-:100240000001203A0000E6000285F4820000F70475
-:100250002D38F6862C2806380001F6052D3877391A
-:100260000002F302001220320044E6000274B33AA6
-:100270006802F0052D38F3062A6CF3052C10E00017
-:100280000528F0057A18F38479D8F6844AA0231457
-:1002900000209316FFC4841E00109696FFD4F70426
-:1002A0004A9C9416FFE0851E0014C0367200EC00D4
-:1002B000036C9516FFE477350001C738680077397D
-:1002C0000002F3064A98C6B8300006B4000CC58494
-:1002D00000008736000000000001C03A4200E6003E
-:1002E00002FCC62400008736000400000001C03A6A
-:1002F0005200E600030020320000F6020001203226
-:100300000000E600030D00000001F58200008636C3
-:1003100000008716FFE000000001C0327200E2001A
-:100320000348F5020000C0327200E6000350202AA4
-:10033000000086B600048716FFE400000001C03606
-:100340007200E2000351202A0000F5020001202A79
-:100350000000E6000361202E0000F5820001202E3F
-:100360000000E600037020260000F4820001202631
-:100370000000E60003A5F60200018716FFD4F3068D
-:100380004A9876B90001C6B4700076B50002C6B4CA
-:10039000300006B4001486B600009716FFD8E000BF
-:1003A00004189696FFDC2714002C9713FFFC831685
-:1003B000FFC4000000019313FFFCF3064A98931357
-:1003C000FFFC9396FFCC07880008E001256897930F
-:1003D000FFFC8396FFCC20220000E6000415F60205
-:1003E00000018716FFD4F3064A9876B90001C6B417
-:1003F000700076B50002C6B4300006B4001486B6AC
-:1004000000009716FFD89696FFDCF7054AA0E0009B
-:10041000041C20320000F602000020320000E6003A
-:10042000042CF4820001E0000484F482000086962B
-:10043000FFD80000000177350002C738680077391F
-:100440000002F68642C8A63A6802C73868007539C5
-:10045000001E7528FFE505B8000286AE00000738CB
-:1004600000049716FFECC63057C07630FFF09616A2
-:10047000FFF475AD001E75ACFFE5C6B45FC076B481
-:10048000FFF09696FFF020260000E6000525F30613
-:1004900029E08696FFF0F5820000C7346800C49C0E
-:1004A0007200C02E6A00EC0004F0C5240000C62CC7
-:1004B00000008716FFEC00000001A6B2700205AC38
-:1004C0000001C73070007739001E7738FFE5C6B4E9
-:1004D00077C076B4FFF0F6AB280005280002871637
-:1004E000FFF000000001C02E7200EC0004B10630E5
-:1004F0000002F3020003F30576F48716FFF0869EF0
-:100500000004C7387000C7384800C6B470008716AA
-:10051000FFF406B400209702FF6C9482FF5096828D
-:10052000FF58F30629E0F3052C108796FFFC82960E
-:10053000FFF802140000013C00000000000192934B
-:10054000FFFC02900008F7047A1800000001203A2E
-:100550000000E60005CD00000001F7047A10F684E3
-:100560003B6400000001C03A6A00470C0001203AD9
-:100570000000E60005CDF5864A98F60479D8F684A1
-:100580004F540000000196B2001C06B400017735FC
-:100590000001C7386800773900020738000CA53A17
-:1005A00058020000000195320010C7385800873A01
-:1005B0000004F0057A189732001407880008E0005C
-:1005C00001F49793FFFCE00005FC00000001F70434
-:1005D0002D38F6862C2806380001F6052D38773997
-:1005E0000002F502001220320044E60005F4B53A9C
-:1005F0006802F0052D38F5062A6CF5052C10879653
-:10060000FFFC8296FFF802140000013C000000008D
-:1006100000019293FFFC0290000885960000F70409
-:1006200075EC852E0020203A0000E60006CCF5058A
-:100630007A08F70475F000000001203A0000E60097
-:1006400006CC00000001F7047A08F6843B64000041
-:100650000001C03A6A00470C0001D7000A70203A36
-:100660000000E60006CC00000001872E001CF68486
-:100670004F54F7057A00C7347200203A0000EE00AC
-:10068000068DF5020001E0000690F50579F8F08589
-:1006900079F8F6847A00C7387000C6B47000F704A1
-:1006A00079F8F68579E8C7387000C6347000F70429
-:1006B0004A9C00000001C0367200EC0006CCF60532
-:1006C00079F020360000EC0006F800000001F70485
-:1006D0002D38F6862C2806380001F6052D38773996
-:1006E0000002F502001320320044E6000738B53A54
-:1006F0006802E0000738F0052D38F7044A9C000036
-:100700000001C0327200EE00071900000001F7047A
-:100710004A9CE0000728F70579F020320000EC0041
-:10072000072800000001F08579F0F58579E0078859
-:100730000008E000074C9793FFFC8796FFFC829629
-:10074000FFF802140004013C000000000001929335
-:10075000FFFC0290000822100038F70475EC00003E
-:100760000001203A0000E60007A400000001F704A1
-:1007700075F000000001203A0000E60007A4000028
-:100780000001F7047A08F6843B6400000001C03AD7
-:100790006A00470C0001D7000A70203A0000E6000A
-:1007A00007D5F4020000F7042D38F6862C28063809
-:1007B0000001F6052D3877390002F30200132032CC
-:1007C0000044E60007CCB33A6802F0052D38E0009B
-:1007D0000AA4F3062B84F68479E8F6064A9877355E
-:1007E0000001C738680077390002F68479E00738DD
-:1007F000000CA33A6002C3B4000093360010C7385F
-:100800006000873A0004231400209316FFC4973633
-:100810000014849E0010F6844AA09496FFE09696F9
-:10082000FFD4851E0014F7044A9C00000001C03666
-:100830007200EC0008EC9516FFE477350001C7382C
-:10084000680077390002C6B8600006B4000CC584A1
-:1008500000008736000000000001C03A4A00E600B0
-:10086000087CC62000008736000400000001C03A62
-:100870005200E600088020320000F602000120321B
-:100880000000E600088D00000001F58200008636B9
-:1008900000008716FFE000000001C0327200E20095
-:1008A00008C8F5020000C0327200E60008D0202A15
-:1008B000000086B600048716FFE400000001C03681
-:1008C0007200E20008D1202A0000F5020001202A6F
-:1008D0000000E60008E1202E0000F5820001202E35
-:1008E0000000E60008F020220000F40200012022AF
-:1008F0000000E6000925F60200018716FFD4F30682
-:100900004A9876B90001C6B4700076B50002C6B444
-:10091000300006B4001486B600009716FFD8E00039
-:1009200009989696FFDC2714002C9713FFFC83167A
-:10093000FFC4000000019313FFFCF3064A989313D1
-:10094000FFFC9396FFCC07880008E0012568979389
-:10095000FFFC8396FFCC20220000E6000995F602FA
-:1009600000018716FFD4F3064A9876B90001C6B491
-:10097000700076B50002C6B4300006B4001486B626
-:1009800000009716FFD89696FFDCF7054AA0E00016
-:10099000099C20320000F602000020320000E60030
-:1009A00009ACF4820001E0000A04F482000086969B
-:1009B000FFD80000000177350002C738680077399A
-:1009C0000002F68642C8A63A6802C7386800753940
-:1009D000001E7528FFE505B8000286AE0000073846
-:1009E00000049716FFECC63057C07630FFF096161D
-:1009F000FFF475AD001E75ACFFE5C6B45FC076B4FC
-:100A0000FFF09696FFF020260000E6000AA5F30608
-:100A10002AF88696FFF0F5820000C7346800C49C6F
-:100A20007200C02E6A00EC000A70C5240000C62CBB
-:100A300000008716FFEC00000001A6B2700205ACB2
-:100A40000001C73070007739001E7738FFE5C6B463
-:100A500077C076B4FFF0F6AB2800052800028716B1
-:100A6000FFF000000001C02E7200EC000A310630D9
-:100A70000002F3020002F30576F48716FFF0869E6B
-:100A80000004C7387000C7384800C6B47000871625
-:100A9000FFF406B400209702FF6C9482FF50968208
-:100AA000FF58F3062AF8F3052C1C8796FFFC829664
-:100AB000FFF802140000013C0000000000019293C6
-:100AC000FFFC02900008F68479E8F70479F800004A
-:100AD0000001C6B47000F7047A20F68579E807387B
-:100AE0000001F7057A20F70479F0F6047A20C03681
-:100AF0007200E6000B2CF6862C28F7042D38000037
-:100B0000000106380001F6052D3877390002F5821C
-:100B1000001320320044E6000B20B5BA6802F0054D
-:100B20002D38F5862B84E0000B38F5852C1C0788C2
-:100B30000008E000074C9793FFFC8796FFFC829625
-:100B4000FFF802140000013C000000000001929335
-:100B5000FFFC02900008F7062C109713FFFCF70625
-:100B600029E09713FFFC07880008E00014F497932E
-:100B7000FFFCF7062C109713FFFCF7062A6C97135F
-:100B8000FFFC07880008E00014F49793FFFCF706C9
-:100B90002C1C9713FFFCF7062AF89713FFFC078815
-:100BA0000008E00014F49793FFFCF7062C1C971341
-:100BB000FFFCF7062B849713FFFC07880008E00072
-:100BC00014F49793FFFC8796FFFC8296FFF80214BB
-:100BD0000000013C0000000000019293FFFC029025
-:100BE0000008F0052D38F0052D3C8796FFFC829615
-:100BF000FFF802140000013C000000000001929385
-:100C0000FFFC0290000822100018FF852EDCF7067A
-:100C10000C3EC77C7400203A0000E60014299716A9
-:100C2000FFF44738FFFBF6846F50CFB8000083967F
-:100C3000FFF4F702003FC39C6D80C71C7400203A8C
-:100C4000003FE20012609396FFF477390002F682CB
-:100C50000C5CA6B6700200000001C1340000000068
-:100C600012600000126000000D6800000D680000B6
-:100C70000D5C00000D5C00000D6800000D680000B8
-:100C80001250000012500000123C0000123C000004
-:100C90000DE000000DE00000123C0000123C0000DE
-:100CA0000DE800000DF400000E0000000E20000012
-:100CB0000E4000000E6000000E8000000EA000003C
-:100CC0000EC000000EC800000ED000001228000068
-:100CD0000ED800000EF400000F10000012280000D3
-:100CE0000F1800000F1800000F2400000F24000050
-:100CF0000F4400000F4400000F6400000F64000068
-:100D00000F8400000F8400000F8C00000F8C000087
-:100D10000F9400000F9400000FB000000FB000000F
-:100D20000FB800000FD800000FF80000102C0000D2
-:100D3000106000001094000010C8000010FC0000BB
-:100D400011300000114C0000116800001214000066
-:100D50001184000011B4000011E400001214F382A9
-:100D60000006E00012549393FFFCF60200052032C7
-:100D70000014E6000DB527000010203A0001E20043
-:100D80000DB5F7062DCCF6842ECC0000000175B50C
-:100D90000002B62E700206B40001F6852ECC860243
-:100DA000FF34F7062E4C2036001FE2000DB5B62E9C
-:100DB0007002F0052ECCF7042D5800000001873A90
-:100DC000000000000001873A0018000000010788B9
-:100DD0000008C13800009793FFFCE000126000009B
-:100DE0000001E0001240F3820006F382000BE000F5
-:100DF00012549393FFFCF3820007E0001254939384
-:100E0000FFFCF382000B9393FFFC07880008E000CF
-:100E100015849793FFFCF3820005E000125493932E
-:100E2000FFFCF38200079393FFFC07880008E000B3
-:100E300015849793FFFCF3820005E000125493930E
-:100E4000FFFCF382000B9393FFFC07880008E0008F
-:100E500015849793FFFCF3820006E00012549393ED
-:100E6000FFFCF38200079393FFFC07880008E00073
-:100E700015849793FFFCF3820006E00012549393CD
-:100E8000FFFCF382000B9393FFFC07880008E0004F
-:100E900015849793FFFCF3820005E00012549393AE
-:100EA000FFFCF38200079393FFFC07880008E00033
-:100EB00015849793FFFCF3820005E000125493938E
-:100EC000FFFCE0001240F382000BE0001240F382CE
-:100ED0000007E000122CF382000BF382000B9393C7
-:100EE000FFFC07880008E00015849793FFFCE000F2
-:100EF0001240F3820006F38200079393FFFC0788F9
-:100F00000008E00015849793FFFCE0001240F38294
-:100F10000006E000122CF382000BF3820014E000C4
-:100F200012549393FFFCF38200149393FFFC078801
-:100F30000008E00015849793FFFCF3820005E000B1
-:100F400012549393FFFCF38200149393FFFC0788E1
-:100F50000008E00015849793FFFCF3820006E00090
-:100F600012549393FFFCF38200149393FFFC0788C1
-:100F70000008E00015849793FFFCF3820005E00071
-:100F800012549393FFFCE0001240F3820014E0003F
-:100F9000122CF3820014F38200149393FFFC078851
-:100FA0000008E00015849793FFFCE0001240F382F4
-:100FB0000006E000122CF3820014F38200149393D5
-:100FC000FFFC07880008E00015849793FFFCF3827C
-:100FD000000BE00012549393FFFCF38200149393F0
-:100FE000FFFC07880008E00015849793FFFCF3825C
-:100FF0000007E00012549393FFFCF38200149393D4
-:10100000FFFC07880008E00015849793FFFCF3823B
-:10101000000B9393FFFC07880008E000158497936A
-:10102000FFFCF3820005E00012549393FFFCF3826F
-:1010300000149393FFFC07880008E0001584979341
-:10104000FFFCF38200079393FFFC07880008E00091
-:1010500015849793FFFCF3820005E00012549393EC
-:10106000FFFCF38200149393FFFC07880008E00064
-:1010700015849793FFFCF382000B9393FFFC078882
-:101080000008E00015849793FFFCF3820006E0005F
-:1010900012549393FFFCF38200149393FFFC078890
-:1010A0000008E00015849793FFFCF38200079393F8
-:1010B000FFFC07880008E00015849793FFFCF3828B
-:1010C0000006E00012549393FFFCF3820014939304
-:1010D000FFFC07880008E00015849793FFFCF3826B
-:1010E000000B9393FFFC07880008E000158497939A
-:1010F000FFFCF3820005E00012549393FFFCF3829F
-:1011000000149393FFFC07880008E0001584979370
-:10111000FFFCF38200079393FFFC07880008E000C0
-:1011200015849793FFFCF3820005E000125493931B
-:10113000FFFCF38200149393FFFC07880008E00093
-:1011400015849793FFFCE0001240F382000BF382BA
-:1011500000149393FFFC07880008E0001584979320
-:10116000FFFCE0001240F3820007F3820014939327
-:10117000FFFC07880008E00015849793FFFCE0005F
-:10118000122CF382000BF38200149393FFFC078868
-:101190000008E00015849793FFFCF382000B939303
-:1011A000FFFC07880008E00015849793FFFCE0002F
-:1011B0001240F3820006F38200149393FFFC078829
-:1011C0000008E00015849793FFFCF38200079393D7
-:1011D000FFFC07880008E00015849793FFFCE000FF
-:1011E0001240F3820006F38200149393FFFC0788F9
-:1011F0000008E00015849793FFFCE000122CF382B6
-:10120000000BF7043528F682000107380008E000DB
-:1012100013CCF7053544F38200149393FFFC078841
-:101220000008E00015849793FFFCF3820007939376
-:10123000FFFC07880008E00015849793FFFCF38209
-:1012400000059393FFFC07880008E000158497933E
-:10125000FFFC9013FFFC07880008E00015849793BB
-:10126000FFFC8396FFF400000001779C0014703EA1
-:10127000FFE1E600129DF7060400F7046F5C000032
-:10128000000107380001F7056F5CF7046F5CE000B0
-:101290000000000000018396FFF4F7060400C01E62
-:1012A0007400E600142900000001F7042ED0F68433
-:1012B00035240738000120360000E6001405F70544
-:1012C0002ED0F704E01400000001203A0000E600F0
-:1012D0001405F6820000F685E014F7042ED8C53414
-:1012E000000007380001F7052ED8202A0002EE0082
-:1012F00013CCF6820000F684352800000001873602
-:10130000000000000001203A0002E60013A005B42E
-:1013100000089593FFFC9516FFE89596FFE49696D6
-:10132000FFE007880008E00016649793FFFC85162D
-:10133000FFE88596FFE48696FFE020220000E600A5
-:101340001390F70200008636000C000000012032E6
-:10135000000FE20013750000000187360014000042
-:101360000001073800019736001487360014E000AA
-:101370001390F702000076B10002C6B46000773522
-:101380000005C7386A00C738600007380010C72C4E
-:101390007000203A0000E6001200F705352CF684B4
-:1013A0003528F7046F4C00000001C0367200E600DB
-:1013B00013C007341494F3846F44E00013C4F3851E
-:1013C0003528F7053528E00012E805280001203609
-:1013D0000000E6001429F6862C28F7042D38F005C5
-:1013E000352406380001F6052D3877390002F382DE
-:1013F000000D20320044E6001428B3BA6802E00071
-:101400001428F0052D38F704E01000000001203A00
-:101410000000E6001429F7020000F705E010078835
-:101420000008E00102989793FFFCF4842D38F7043C
-:101430002D3C00000001C03A4A00E6000C09F68687
-:101440002C2877390002A53A680200000001202A02
-:101450000014E600149127280015203A0001E2004C
-:101460001491F7062DCCF6842ECC8602FF3475B588
-:101470000002B52E700206B40001F6852ECCF706E8
-:101480002E4C2036001FE2001491B62E7002F0059B
-:101490002ECCF7062D4476A90002A7367002000074
-:1014A0000001873A000000000001C6B470008736D2
-:1014B00000049496FFEC07880008C1380000979359
-:1014C000FFFCF7042D3C8496FFEC07380001203A1E
-:1014D0000044E600142CF7052D3CE000142CF00528
-:1014E0002D3C8796FFFC8296FFF802140000013C19
-:1014F0000000000000019293FFFC02900008841697
-:101500000000F702000085960004203A0021EE005A
-:10151000153495A20000F606233807200084C6A0E3
-:101520000000963A000427380004C03A6A00EC0034
-:101530001520000000018796FFFC8296FFF8021438
-:101540000008013C0000000000019293FFFC0290A3
-:1015500000088696000087160004F6042D40973692
-:1015600000009736000407300001F7052D4096363D
-:1015700000088796FFFC8296FFF802140008013CE1
-:101580000000000000019293FFFC02900008851605
-:10159000000000000001202A0014E60015D92728C9
-:1015A0000015203A0001E20015D9F7062DCCF6848B
-:1015B0002ECC8602FF3475B50002B52E700206B43B
-:1015C0000001F6852ECCF7062E4C2036001FE200D7
-:1015D00015D9B62E7002F0052ECCF6862D4477294B
-:1015E0000002A6BA68020000000186B600000000F2
-:1015F0000001C7386800873A00040000000107882E
-:101600000008C13800009793FFFC8796FFFC829684
-:10161000FFF802140004013C000000000001929356
-:10162000FFFC029000088716000086960004F6066C
-:101630002D4476B5000285BA000000000001B5B661
-:101640006002C6B47000859600080000000195B6DF
-:1016500000048796FFFC8296FFF80214000C013C00
-:101660000000000000019293FFFC02900008861623
-:101670000000000000018732000400000001203A51
-:10168000000F86B20000C5380000EE0016B4C5B4E5
-:1016900000002036000FEE0016B400000001203AD2
-:1016A0000000EC0016B50000000120360000EC0040
-:1016B00016D0000000018732000C0000000107383E
-:1016C00000019732000C8732000CE00016D8F402BB
-:1016D0000000C02A5A00440C00018796FFFC829645
-:1016E000FFF802140004013C0000000000010000AB
-:1016F00000009293FFFC02900008F7062EE097137B
-:10170000FFFCF70632D49713FFFC07880008E000BF
-:1017100015489793FFFCF702182C9713FFFCF782EC
-:1017200000099793FFFCF7062EE09713FFFC07884C
-:101730000008E000161C9793FFFCF702345897133B
-:10174000FFFCF702000C9713FFFCF7062F6C9713B2
-:10175000FFFC07880008E000161C9793FFFCF702C7
-:101760003F949713FFFCF782000B9793FFFCF7065B
-:101770002FF89713FFFC07880008E000161C9793CA
-:10178000FFFCF7023B849713FFFCF782000B979353
-:10179000FFFCF70632289713FFFC07880008E000DB
-:1017A000161C9793FFFCF70226E49713FFFCF70241
-:1017B00000139713FFFCF70630849713FFFC07888C
-:1017C0000008E000161C9793FFFCF70226A0971371
-:1017D000FFFCF70200119713FFFCF7063110971377
-:1017E000FFFC07880008E000161C9793FFFCF70237
-:1017F000182C9713FFFCF78200099793FFFCF7065C
-:10180000319C9713FFFC07880008E000161C979393
-:10181000FFFCF0057A78F00532E88796FFFC8296A7
-:10182000FFF802140000013C000000000001929348
-:10183000FFFC0290000822100050F70471C800005D
-:101840000001203A0000E6001855F68671C4E00059
-:10185000186CF6020000F70471D40000000177391B
-:101860000002C7386800863A001800000001F6053B
-:1018700032C486B2000807018000C5B47400F58543
-:1018800032D087320018F6866F4477390002A73AC3
-:101890006802202E0000F70532C0073809D886B24A
-:1018A0000004F70532CCE6001941F68532C8F7048A
-:1018B0007198F6847A782738000120360000E60017
-:1018C0001910F7057198F70476FC00000001203A22
-:1018D0000000E60018E8F3020011F30632D4F30525
-:1018E00076FCE00018F8F7020001F30576F8F3063D
-:1018F00032D4F3057700F7020000203A0000E6003A
-:101900001914F3020001F3063110E000268CF305F0
-:1019100032D4F3020001F3057A78F3063084F3053C
-:1019200032D4F30432C4000000019313FFFC078893
-:101930000008E00006109793FFFCE000268C0000F2
-:101940000001F3020000202E0000E6001CB99316EF
-:10195000FFE4873200088696FFE4C3040000C03A23
-:101960003200E6001984203600008732000C0000A7
-:101970000001C03A3200E600198420360000F682E9
-:10198000000120360000E6001CB8F3020000F70456
-:1019900032C09316FFACF58432C4863A142803B8DB
-:1019A0001420042C000886BA142400000001C03260
-:1019B0006A00EC001A709616FFEC77310001C73808
-:1019C000600077390002C63838000630000C86B255
-:1019D0000000872E00088516FFACC0367200E600B6
-:1019E0001A00C484000086B20004872E000C000098
-:1019F0000001C0367200E6001A04202A0000F50239
-:101A00000001202A0000E6001A1100000001F48203
-:101A1000000086B200008722000000000001C036EE
-:101A20007200E2001A4CF5820000C0367200E60037
-:101A30001A54202E000086B2000487220004000001
-:101A40000001C0367200E2001A55202E0000F58217
-:101A50000001202E0000E6001A6520260000F48216
-:101A6000000120260000E6001A70F3020001931620
-:101A7000FFAC8316FFAC00000001201A0000E60056
-:101A80001AB1F60200018716FFEC0000000176B9DA
-:101A90000001C6B4700076B50002C6B4380006B4C2
-:101AA000001486B600009716FFF0E0001B1896960B
-:101AB000FFF4271400149713FFFC9413FFFC939377
-:101AC000FFFC9396FFBC07880008E0012568979308
-:101AD000FFFC8396FFBC20220000E6001B15F602E7
-:101AE00000018716FFEC0000000176B90001C6B4C2
-:101AF000700076B50002C6B4380006B4001486B68D
-:101B000000009716FFF09696FFF4971E0008E0007D
-:101B10001B1C20320000F602000020320000E6000C
-:101B20001CB8F3020000F60432C09316FFAC86B274
-:101B3000142803B014200430148C873214240000BD
-:101B40000001C0367200EC001C049696FFEC77355D
-:101B50000001C738680077390002C5B8380005AC05
-:101B6000000C86AE00008732148C8516FFACC036A0
-:101B70007200E6001B94C484000086AE0004873225
-:101B8000149000000001C0367200E6001B98202A65
-:101B90000000F5020001202A0000E6001BA500005D
-:101BA0000001F482000086AE0000872200000000E1
-:101BB0000001C0367200E2001BE0F6020000C036F1
-:101BC0007200E6001BE82032000086AE0004872287
-:101BD000000400000001C0367200E2001BE9203260
-:101BE0000000F602000120320000E6001BF920266A
-:101BF0000000F482000120260000E6001C04F3022D
-:101C000000019316FFAC8316FFAC00000001201A00
-:101C10000000E6001C45F60200018716FFEC0000FC
-:101C2000000176B90001C6B4700076B50002C6B4F2
-:101C3000380006B4001486B600009716FFF0E000E6
-:101C40001CAC9696FFF4271400149713FFFC941312
-:101C5000FFFC9393FFFC9396FFBC07880008E0010C
-:101C600025689793FFFC8396FFBC20220000E600C6
-:101C70001CA9F60200018716FFEC0000000176B9EE
-:101C80000001C6B4700076B50002C6B4380006B4D0
-:101C9000001486B600009716FFF09696FFF4971E84
-:101CA0000008E0001CB020320000F60200002032E4
-:101CB0000000E6001E15F3020001F68432C00000A9
-:101CC000000185B60EF486360EF8202E0010E200D4
-:101CD0001CDC20320010E2001CF9000000018736F5
-:101CE0000F00000000010738000197360F0087360B
-:101CF0000F00E0001D24F702000007300001C03A89
-:101D00005A00E6001D1DF682000020320010E60099
-:101D10001D20202E0000E6001D24C7340000F6829E
-:101D20000001C7340000203A0000E6001E14F30250
-:101D30000001F30432CC000000019316FFDC931382
-:101D4000FFFC07880008E00043689793FFFC20220F
-:101D50000000E6001DFCF30200008316FFDC00001B
-:101D60000001861A00000000000120320010E2008D
-:101D70001D9176B10002871A000C0000000107389F
-:101D80000001971A000C871A000CE0001DFCF302FA
-:101D90000000F302004C9313FFFCC6B460007735DB
-:101DA0000004C7386A008316FFDCC7386000C738F4
-:101DB0003000073800109713FFFCF3067A289313BE
-:101DC000FFFC9616FFB407880008E00126F89793F9
-:101DD000FFFC8616FFB4000000010630000120322F
-:101DE0000011E6001DEC00000001F6020000831661
-:101DF000FFDC00000001961A0000F30200019316B8
-:101E0000FFD48316FFD400000001201A0000E60072
-:101E10001E18F30200019316FFE48316FFE400008E
-:101E20000001201A0000E6001F35F6820CABF70413
-:101E300032B48316FFD407380001F70532B4F70433
-:101E400032B4201A0000E6001E7000000001F70402
-:101E500032C0F306E030C03A3200E6001E700000E7
-:101E60000001F70432E80000000107380001F7051F
-:101E700032E8F70471C400000001203A0000E600D7
-:101E80001EADF6862C28F7042D3800000001063818
-:101E90000001F6052D3877390002F302000A2032DE
-:101EA0000044E6001EACB33A6802F0052D38F70492
-:101EB00071D4F68471CC07380001C03A6A00E6009C
-:101EC0001EC8F70571D4F00571D4F68471D4F704F7
-:101ED00071D0F00571C4C0367200470C0001F68461
-:101EE00032D00000000120360000E60025D9F705B9
-:101EF00071C8F704719800000001203A0000E60064
-:101F0000257900000001F70475EC00000001203A7B
-:101F10000000E600257800000001F70475F00000DD
-:101F20000001203A0000E600257800000001E000F2
-:101F300025DCF306319CF00532E8F70432C0F604E4
-:101F40006F5496BA000420320000E6001F60F302CE
-:101F5000000CF3020001F3056F54E0001F68F70264
-:101F60000001F3056F58F7020000203A0000E60078
-:101F70001F7CF3062F6CE000268CF30532D4F58429
-:101F80007A7024940010202E0001E6002284F5854A
-:101F90007AA0F7020001F60432C8F7057A70F70458
-:101FA00032C4F68432C0F6057A2C9002FF8090028B
-:101FB000FF38F5847A28073800249582FF3C970281
-:101FC000FF409602FF448736141000000001C73816
-:101FD0006000973614108736141800000001073887
-:101FE00000019736141887361418F0056F50F7045F
-:101FF00032B89596FFECC7386000F70532B8F704A1
-:1020000032BCF3062FF807380001F70532BCF7049D
-:1020100032BCF30532D4F7060C3EC07E7400E600F5
-:10202000203400000001C07E7400E600202500007E
-:102030000001F7060C3EC77C7400203A0010E60051
-:10204000268C00000001F70432E4FF820010F584C2
-:102050006F5807380001202E0021E2002090F7057C
-:1020600032E4F7042D38F6862C2806380001F605F0
-:102070002D387739000220320044E6002084B5BABA
-:102080006802F0052D38F3020022E0002094F305E9
-:102090006F58F0056F54F58432C000000001902E97
-:1020A0000004872E000000000001203A0002E60034
-:1020B00021C0000000018702FF38032C0EF49316A4
-:1020C000FFCCF7057A689313FFFC9596FFB8078855
-:1020D0000008E00043A09793FFFC8596FFB82022FC
-:1020E0000000E600217C00000001862E0EF80000B2
-:1020F000000120320010E2002119F302004C872E6B
-:102100000F000000000107380001972E0F00872EF6
-:102110000F00E000217C000000019313FFFCF30698
-:102120007A289313FFFC76B10002C6B460007735BD
-:102130000004C7386A008316FFCCC7386000C73870
-:102140003000073800109713FFFC9596FFB89616DD
-:10215000FFB407880008E00126F89793FFFC861675
-:10216000FFB48596FFB80630000120320011E6006A
-:10217000217800000001F6020000962E0EF8F70408
-:1021800032C0F306E030C03A3200E60021C0000061
-:102190000001F704E0180000000177B8001E703E4F
-:1021A000FFE1E60021C1000000010F814000F704BB
-:1021B00079C80000000107380001F70579C8F70465
-:1021C00079C8F70471C400000001203A0000E6005D
-:1021D00021FDF6862C28F7042D3800000001063872
-:1021E0000001F6052D3877390002F302000A20328B
-:1021F0000044E60021FCB33A6802F0052D38F704EC
-:1022000071D4F68471CC07380001C03A6A00E60048
-:102210002218F70571D4F00571D4F68471D4F7044F
-:1022200071D0F00571C4C0367200470C0001F6840D
-:1022300032D00000000120360000E60025D9F70565
-:1022400071C8F704719800000001203A0000E60010
-:10225000257900000001F70475EC00000001203A28
-:102260000000E600257800000001F70475F000008A
-:102270000001203A0000E600257800000001E0009F
-:1022800025DCF306319CF0057A889002FF38F005D2
-:102290006F509002FF80F70432C4F3063228F30532
-:1022A00032D4F60432C8F6847A2CF50200000738DE
-:1022B0000024F7057A9820320000E60022D5F605C2
-:1022C0007A90C02A5A00E6002620C0326A00EE004A
-:1022D000262100000001F68432C00000000187368C
-:1022E000141000000001C7386000973614108736BC
-:1022F00014180000000107380001973614188736BB
-:102300001418F70432B800000001C7386000F70560
-:1023100032B8F70432BC0000000107380001F705AD
-:1023200032BCF70432BC20320000E6002345000036
-:102330000001F70432E0F5057A7007380001E0008B
-:102340002348F70532E0F5057A70F5846F580000F0
-:102350000001202E0021E200238CF6862C28F704B1
-:102360002D380000000106380001F6052D387739B8
-:10237000000220320044E6002380B5BA6802F0056E
-:102380002D38F3020022E0002390F3056F58F0058A
-:102390006F54F58432C000000001902E0004872E97
-:1023A000000000000001203A0002E60024BC00000A
-:1023B00000018702FF38032C0EF49316FFC4F705C3
-:1023C0007A689313FFFC9596FFB807880008E00031
-:1023D00043A09793FFFC8596FFB820220000E600FB
-:1023E000247800000001862E0EF800000001203243
-:1023F0000010E2002415F302004C872E0F000000AD
-:10240000000107380001972E0F00872E0F00E00013
-:102410002478000000019313FFFCF3067A2893133D
-:10242000FFFC76B10002C6B4600077350004C738FF
-:102430006A008316FFC4C7386000C7383000073809
-:1024400000109713FFFC9596FFB89616FFB4078807
-:102450000008E00126F89793FFFC8616FFB48596E6
-:10246000FFB80630000120320011E600247400009D
-:102470000001F6020000962E0EF8F70432C0F306B3
-:10248000E030C03A3200E60024BC00000001F7044E
-:10249000E0180000000177B8001E703EFFE1E60082
-:1024A00024BD000000010F814000F70479C800003E
-:1024B000000107380001F70579C8F70479C8F70467
-:1024C00071C400000001203A0000E60024F9F686FD
-:1024D0002C28F7042D380000000106380001F6050D
-:1024E0002D3877390002F302000A20320044E6005A
-:1024F00024F8B33A6802F0052D38F70471D4F68455
-:1025000071CC07380001C03A6A00E6002514F705CF
-:1025100071D4F00571D4F68471D4F70471D0F0054C
-:1025200071C4C0367200470C0001F68432D000003E
-:10253000000120360000E60025D9F70571C8F70430
-:10254000719800000001203A0000E60025790000A3
-:102550000001F70475EC00000001203A0000E600DD
-:10256000257800000001F70475F000000001203A12
-:102570000000E60025D100000001F58476F8000097
-:102580000001202E0021E20025C4F6862C28F70445
-:102590002D380000000106380001F6052D38773986
-:1025A000000220320044E60025B0B5BA6802F0050A
-:1025B0002D38F3020022F30576F8F3047700E000EB
-:1025C00025C8F30576FCF00576FCE00025D8F0057B
-:1025D0007A78E00025DCF306319CF3062EE0F30563
-:1025E00032D4F70471C800000001203A0000E60070
-:1025F000268CF6862C28F7042D38000000010638BA
-:102600000001F6052D3877390002F3020009203267
-:102610000044E600268CB33A6802E000268CF00500
-:102620002D38F7047A9000000001C03A6A00EE00ED
-:102630002641C5B40000C7385A00E0002648F70517
-:102640007A90C5B80000F0057A90F6847A88F7068B
-:102650007A2876350003A732700206B40001971677
-:10266000FFEC84A6FFFCF7067A2CF3047A98948298
-:10267000FF3C9302FF409582FF44B5B27002F7041D
-:102680007A98F6857A88C7385800F7057A98879639
-:10269000FFFC8296FFF802140000013C00000000DD
-:1026A00000019293FFFC02900008F7020001F70579
-:1026B0007A78F7063084F70532D4F70432C4000084
-:1026C00000019713FFFC07880008E00006109793AD
-:1026D000FFFC8796FFFC8296FFF802140000013C85
-:1026E0000000000000019293FFFC029000082210FD
-:1026F0000050F70432D0F3020000203A0000E60058
-:102700002A719316FFE4F68432C48616FFE48736F6
-:102710000008C3040000C03A3200E600273C203223
-:1027200000008736000C00000001C03A3200E600CD
-:10273000273C20320000F602000120320000E600B3
-:102740002A70F3020000F70432C09316FFACF58440
-:1027500032C4863A142803B81420042C000886BA20
-:10276000142400000001C0326A00EC0028289616EC
-:10277000FFEC77310001C738600077390002C638B6
-:1027800038000630000C86B20000872E000885163F
-:10279000FFACC0367200E60027B8C484000086B2E1
-:1027A0000004872E000C00000001C0367200E60015
-:1027B00027BC202A0000F5020001202A0000E600C4
-:1027C00027C900000001F482000086B200008722C1
-:1027D000000000000001C0367200E2002804F5820B
-:1027E0000000C0367200E600280C202E000086B2E1
-:1027F00000048722000400000001C0367200E200DD
-:10280000280D202E0000F5820001202E0000E60099
-:10281000281D20260000F482000120260000E6008A
-:102820002828F30200019316FFAC8316FFAC0000CA
-:102830000001201A0000E6002869F6020001871650
-:10284000FFEC0000000176B90001C6B4700076B557
-:102850000002C6B4380006B4001486B6000097160D
-:10286000FFF0E00028D09696FFF427140014971389
-:10287000FFFC9413FFFC9393FFFC9396FFBC078827
-:102880000008E00125689793FFFC8396FFBC202297
-:102890000000E60028CDF60200018716FFEC0000DC
-:1028A000000176B90001C6B4700076B50002C6B466
-:1028B000380006B4001486B600009716FFF096960E
-:1028C000FFF4971E0008E00028D420320000F60232
-:1028D000000020320000E6002A70F3020000F60437
-:1028E00032C09316FFAC86B2142803B01420043013
-:1028F000148C8732142400000001C0367200EC00F2
-:1029000029BC9696FFEC77350001C7386800773907
-:102910000002C5B8380005AC000C86AE0000873256
-:10292000148C8516FFACC0367200E600294CC484B6
-:10293000000086AE00048732149000000001C0360B
-:102940007200E6002950202A0000F5020001202A2A
-:102950000000E600295D00000001F482000086AE60
-:1029600000008722000000000001C0367200E20073
-:102970002998F6020000C0367200E60029A0203235
-:10298000000086AE00048722000400000001C0366B
-:102990007200E20029A120320000F602000120327C
-:1029A0000000E60029B120260000F4820001202664
-:1029B0000000E60029BCF30200019316FFAC831669
-:1029C000FFAC00000001201A0000E60029FDF6021D
-:1029D00000018716FFEC0000000176B90001C6B4C3
-:1029E000700076B50002C6B4380006B4001486B68E
-:1029F00000009716FFF0E0002A649696FFF4271473
-:102A000000149713FFFC9413FFFC9393FFFC939621
-:102A1000FFBC07880008E00125689793FFFC8396B8
-:102A2000FFBC20220000E6002A61F60200018716A2
-:102A3000FFEC0000000176B90001C6B4700076B565
-:102A40000002C6B4380006B4001486B6000097161B
-:102A5000FFF09696FFF4971E0008E0002A682032E7
-:102A60000000F602000020320000E6002BCDF30249
-:102A70000001F68432C00000000185B60EF48636EF
-:102A80000EF8202E0010E2002A9420320010E200FE
-:102A90002AB10000000187360F000000000107384E
-:102AA000000197360F0087360F00E0002ADCF7029E
-:102AB000000007300001C03A5A00E6002AD5F6822D
-:102AC000000020320010E6002AD8202E0000E60088
-:102AD0002ADCC7340000F6820001C7340000203A27
-:102AE0000000E6002BCCF3020001F30432CC00001E
-:102AF00000019316FFDC9313FFFC07880008E00039
-:102B000043689793FFFC20220000E6002BB4F302F9
-:102B100000008316FFDC00000001861A00000000A0
-:102B2000000120320010E2002B4976B10002871A22
-:102B3000000C0000000107380001971A000C871AEA
-:102B4000000CE0002BB4F3020000F302004C9313DE
-:102B5000FFFCC6B4600077350004C7386A008316EE
-:102B6000FFDCC7386000C738300007380010971303
-:102B7000FFFCF3067A289313FFFC9616FFB4078830
-:102B80000008E00126F89793FFFC8616FFB40000CA
-:102B900000010630000120320011E6002BA40000E5
-:102BA0000001F60200008316FFDC00000001961A07
-:102BB0000000F30200019316FFD48316FFD4000037
-:102BC0000001201A0000E6002BD0F302000193164A
-:102BD000FFE48316FFE400000001201A0000E60075
-:102BE0002CEDF6820CABF70432B48316FFD4073811
-:102BF0000001F70532B4F70432B4201A0000E600F1
-:102C00002C2800000001F70432C0F306E030C03A7F
-:102C10003200E6002C2800000001F70432E8000032
-:102C2000000107380001F70532E8F70471C400001D
-:102C30000001203A0000E6002C65F6862C28F704F7
-:102C40002D380000000106380001F6052D387739CF
-:102C50000002F302000A20320044E6002C64B33A7A
-:102C60006802F0052D38F70471D4F68471CC07386A
-:102C70000001C03A6A00E6002C80F70571D4F00527
-:102C800071D4F68471D4F70471D0F00571C4C036E4
-:102C90007200470C0001F68432D00000000120369B
-:102CA0000000E6003391F70571C8F7047198000041
-:102CB0000001203A0000E600333100000001F70473
-:102CC00075EC00000001203A0000E60033300000FF
-:102CD0000001F70475F000000001203A0000E60052
-:102CE000333000000001E0003394F306319CF0051E
-:102CF00032E8F70432C0F6046F5496BA000420326A
-:102D00000000E6002D18F302000CF3020001F305A9
-:102D10006F54E0002D20F7020001F3056F58F70211
-:102D20000000203A0000E6002D34F3062F6CE0008E
-:102D30003444F30532D4F5847A7024940010202EA4
-:102D40000001E600303CF5857AA0F7020001F604A8
-:102D500032C8F7057A70F70432C4F68432C0F6053B
-:102D60007A2C9002FF809002FF38F5847A28073889
-:102D700000249582FF3C9702FF409602FF4487366D
-:102D8000141000000001C738600097361410873611
-:102D90001418000000010738000197361418873610
-:102DA0001418F0056F50F70432B89596FFECC73849
-:102DB0006000F70532B8F70432BCF3062FF8073885
-:102DC0000001F70532BCF70432BCF30532D4F70634
-:102DD0000C3EC07E7400E6002DEC00000001C07EB9
-:102DE0007400E6002DDD00000001F7060C3EC77CF4
-:102DF0007400203A0010E600344400000001F7049B
-:102E000032E4FF820010F5846F5807380001202E4D
-:102E10000021E2002E48F70532E4F7042D38F6864B
-:102E20002C2806380001F6052D38773900022032AB
-:102E30000044E6002E3CB5BA6802F0052D38F302D6
-:102E40000022E0002E4CF3056F58F0056F54F58416
-:102E500032C000000001902E0004872E0000000008
-:102E60000001203A0002E6002F78000000018702EE
-:102E7000FF38032C0EF49316FFCCF7057A689313F2
-:102E8000FFFC9596FFB807880008E00043A09793E1
-:102E9000FFFC8596FFB820220000E6002F340000DA
-:102EA0000001862E0EF80000000120320010E20022
-:102EB0002ED1F302004C872E0F00000000010738CE
-:102EC0000001972E0F00872E0F00E0002F34000026
-:102ED00000019313FFFCF3067A289313FFFC76B1ED
-:102EE0000002C6B4600077350004C7386A00831654
-:102EF000FFCCC7386000C738300007380010971380
-:102F0000FFFC9596FFB89616FFB407880008E0010D
-:102F100026F89793FFFC8616FFB48596FFB8063017
-:102F2000000120320011E6002F3000000001F602FF
-:102F30000000962E0EF8F70432C0F306E030C03AD7
-:102F40003200E6002F7800000001F704E0180000CE
-:102F5000000177B8001E703EFFE1E6002F79000007
-:102F600000010F814000F70479C800000001073814
-:102F70000001F70579C8F70479C8F70471C40000A7
-:102F80000001203A0000E6002FB5F6862C28F70451
-:102F90002D380000000106380001F6052D3877397C
-:102FA0000002F302000A20320044E6002FB4B33AD4
-:102FB0006802F0052D38F70471D4F68471CC073817
-:102FC0000001C03A6A00E6002FD0F70571D4F00581
-:102FD00071D4F68471D4F70471D0F00571C4C03691
-:102FE0007200470C0001F68432D000000001203648
-:102FF0000000E6003391F70571C8F70471980000EE
-:103000000001203A0000E600333100000001F7041F
-:1030100075EC00000001203A0000E60033300000AB
-:103020000001F70475F000000001203A0000E600FE
-:10303000333000000001E0003394F306319CF005CA
-:103040007A889002FF38F0056F509002FF80F704F5
-:1030500032C4F3063228F30532D4F60432C8F684BB
-:103060007A2CF502000007380024F7057A98203200
-:103070000000E600308DF6057A90C02A5A00E6007E
-:1030800033D8C0326A00EE0033D900000001F68464
-:1030900032C0000000018736141000000001C7385C
-:1030A00060009736141087361418000000010738A6
-:1030B00000019736141887361418F70432B8000048
-:1030C0000001C7386000F70532B8F70432BC0000D1
-:1030D000000107380001F70532BCF70432BC20328A
-:1030E0000000E60030FD00000001F70432E0F505C5
-:1030F0007A7007380001E0003100F70532E0F5058D
-:103100007A70F5846F5800000001202E0021E20043
-:103110003144F6862C28F7042D38000000010638CB
-:103120000001F6052D387739000220320044E60010
-:103130003138B5BA6802F0052D38F3020022E000FC
-:103140003148F3056F58F0056F54F58432C0000024
-:103150000001902E0004872E000000000001203A9C
-:103160000002E6003274000000018702FF38032CE1
-:103170000EF49316FFC4F7057A689313FFFC959637
-:10318000FFB807880008E00043A09793FFFC8596EE
-:10319000FFB820220000E600323000000001862E39
-:1031A0000EF80000000120320010E20031CDF302E1
-:1031B000004C872E0F000000000107380001972EF9
-:1031C0000F00872E0F00E000323000000001931343
-:1031D000FFFCF3067A289313FFFC76B10002C6B415
-:1031E000600077350004C7386A008316FFC4C7380B
-:1031F0006000C7383000073800109713FFFC959621
-:10320000FFB89616FFB407880008E00126F89793E8
-:10321000FFFC8616FFB48596FFB806300001203209
-:103220000011E600322C00000001F6020000962E8C
-:103230000EF8F70432C0F306E030C03A3200E60080
-:10324000327400000001F704E0180000000177B8B4
-:10325000001E703EFFE1E6003275000000010F81A4
-:103260004000F70479C80000000107380001F705A5
-:1032700079C8F70479C8F70471C400000001203A46
-:103280000000E60032B1F6862C28F7042D38000045
-:10329000000106380001F6052D3877390002F302E7
-:1032A000000A20320044E60032B0B33A6802F0056A
-:1032B0002D38F70471D4F68471CC07380001C03A78
-:1032C0006A00E60032CCF70571D4F00571D4F684BB
-:1032D00071D4F70471D0F00571C4C0367200470C88
-:1032E0000001F68432D00000000120360000E60024
-:1032F0003391F70571C8F704719800000001203A76
-:103300000000E600333100000001F70475EC000016
-:103310000001203A0000E600333000000001F7040D
-:1033200075F000000001203A0000E600338900003B
-:103330000001F58476F800000001202E0021E20053
-:10334000337CF6862C28F7042D380000000106385F
-:103350000001F6052D387739000220320044E600DE
-:103360003368B5BA6802F0052D38F3020022F30580
-:1033700076F8F3047700E0003380F30576FCF0057F
-:1033800076FCE0003390F0057A78E0003394F306A1
-:10339000319CF3062EE0F30532D4F70471C8000027
-:1033A0000001203A0000E6003444F6862C28F70499
-:1033B0002D380000000106380001F6052D38773958
-:1033C0000002F302000920320044E6003444B33A1C
-:1033D0006802E0003444F0052D38F7047A900000CC
-:1033E0000001C03A6A00EE0033F9C5B40000C738E6
-:1033F0005A00E0003400F7057A90C5B80000F005E7
-:103400007A90F6847A88F7067A2876350003A73210
-:10341000700206B400019716FFEC84A6FFFCF706C5
-:103420007A2CF3047A989482FF3C9302FF409582B1
-:10343000FF44B5B27002F7047A98F6857A88C738E7
-:103440005800F7057A988796FFFC8296FFF80214D9
-:103450000000013C0000000000019293FFFC02907C
-:10346000000822100020F5847A7000000001202E50
-:103470000001E600376CF5857AA0F7020001F6043A
-:1034800032C8F7057A70F70432C4F68432C0F60504
-:103490007A2C9002FF809002FF38F5847A28073852
-:1034A00000249582FF3C9702FF409602FF44873636
-:1034B000141000000001C7386000973614108736DA
-:1034C00014180000000107380001973614188736D9
-:1034D0001418F0056F50F70432B89596FFF4C7380A
-:1034E0006000F70532B8F70432BCF4862FF80738CD
-:1034F0000001F70532BCF70432BCF48532D4F7067C
-:103500000C3EC07E7400E600351C00000001C07E49
-:103510007400E600350D00000001F7060C3EC77C84
-:103520007400203A0010E6003B7000000001F70430
-:1035300032E4FF820010F5846F5807380001202E16
-:103540000021E2003578F70532E4F7042D38F686DD
-:103550002C2806380001F6052D3877390002203274
-:103560000044E600356CB5BA6802F0052D38F482E7
-:103570000022E000357CF4856F58F0056F54F58427
-:1035800032C000000001902E0004872E00000000D1
-:103590000001203A0002E60036A800000001870280
-:1035A000FF3804AC0EF49496FFECF7057A68949318
-:1035B000FFFC9596FFDC07880008E00043A0979386
-:1035C000FFFC8596FFDC20220000E6003664000048
-:1035D0000001862E0EF80000000120320010E200EB
-:1035E0003601F482004C872E0F00000000010738DE
-:1035F0000001972E0F00872E0F00E00036640000B8
-:1036000000019493FFFCF4867A289493FFFC76B132
-:103610000002C6B4600077350004C7386A0084969B
-:10362000FFECC7386000C738480007380010971310
-:10363000FFFC9596FFDC9616FFD807880008E0018E
-:1036400026F89793FFFC8616FFD88596FFDC063098
-:10365000000120320011E600366000000001F60291
-:103660000000962E0EF8F70432C0F486E030C03A1F
-:103670004A00E60036A800000001F704E018000048
-:10368000000177B8001E703EFFE1E60036A9000099
-:1036900000010F814000F70479C8000000010738DD
-:1036A0000001F70579C8F70479C8F70471C4000070
-:1036B0000001203A0000E60036E5F6862C28F704E3
-:1036C0002D380000000106380001F6052D38773945
-:1036D0000002F482000A20320044E60036E4B4BA64
-:1036E0006802F0052D38F70471D4F68471CC0738E0
-:1036F0000001C03A6A00E6003700F70571D4F00512
-:1037000071D4F68471D4F70471D0F00571C4C03659
-:103710007200470C0001F68432D000000001203610
-:103720000000E6003AC1F70571C8F704719800007F
-:103730000001203A0000E6003A6100000001F704B1
-:1037400075EC00000001203A0000E6003A6000003D
-:103750000001F70475F000000001203A0000E600C7
-:103760003A6000000001E0003AC4F486319CF005A4
-:103770007A889002FF38F0056F509002FF80F704BE
-:1037800032C4F4863228F48532D4F60432C8F68482
-:103790007A2CF502000007380024F7057A982032C9
-:1037A0000000E60037BDF6057A90C02A5A00E60010
-:1037B0003B08C0326A00EE003B0900000001F684BD
-:1037C00032C0000000018736141000000001C73825
-:1037D000600097361410873614180000000107386F
-:1037E00000019736141887361418F70432B8000011
-:1037F0000001C7386000F70532B8F70432BC00009A
-:10380000000107380001F70532BCF70432BC203252
-:103810000000E600382D00000001F70432E0F50555
-:103820007A7007380001E0003830F70532E0F5051E
-:103830007A70F5846F5800000001202E0021E2000C
-:103840003874F6862C28F7042D380000000106385D
-:103850000001F6052D387739000220320044E600D9
-:103860003868B5BA6802F0052D38F4820022E0000D
-:103870003878F4856F58F0056F54F58432C0000035
-:103880000001902E0004872E000000000001203A65
-:103890000002E60039A4000000018702FF3804ACF2
-:1038A0000EF49496FFE4F7057A689493FFFC9596DE
-:1038B000FFDC07880008E00043A09793FFFC859693
-:1038C000FFDC20220000E600396000000001862EA7
-:1038D0000EF80000000120320010E20038FDF482F2
-:1038E000004C872E0F000000000107380001972EC2
-:1038F0000F00872E0F00E000396000000001949354
-:10390000FFFCF4867A289493FFFC76B10002C6B4DB
-:10391000600077350004C7386A008496FFE4C73832
-:103920006000C7384800073800109713FFFC9596D1
-:10393000FFDC9616FFD807880008E00126F8979369
-:10394000FFFC8616FFD88596FFDC0630000120328A
-:103950000011E600395C00000001F6020000962E1E
-:103960000EF8F70432C0F486E030C03A4A00E600B0
-:1039700039A400000001F704E0180000000177B846
-:10398000001E703EFFE1E60039A5000000010F8136
-:103990004000F70479C80000000107380001F7056E
-:1039A00079C8F70479C8F70471C400000001203A0F
-:1039B0000000E60039E1F6862C28F7042D380000D7
-:1039C000000106380001F6052D3877390002F4822F
-:1039D000000A20320044E60039E0B4BA6802F0057B
-:1039E0002D38F70471D4F68471CC07380001C03A41
-:1039F0006A00E60039FCF70571D4F00571D4F6844D
-:103A000071D4F70471D0F00571C4C0367200470C50
-:103A10000001F68432D00000000120360000E600EC
-:103A20003AC1F70571C8F704719800000001203A07
-:103A30000000E6003A6100000001F70475EC0000A8
-:103A40000001203A0000E6003A6000000001F7049F
-:103A500075F000000001203A0000E6003AB90000CD
-:103A60000001F58476F800000001202E0021E2001C
-:103A70003AACF6862C28F7042D38000000010638F1
-:103A80000001F6052D387739000220320044E600A7
-:103A90003A98B5BA6802F0052D38F4820022F48510
-:103AA00076F8F4847700E0003AB0F48576FCF0050F
-:103AB00076FCE0003AC0F0057A78E0003AC4F4867B
-:103AC000319CF4862EE0F48532D4F70471C80000EE
-:103AD0000001203A0000E6003B70F6862C28F7042F
-:103AE0002D380000000106380001F6052D38773921
-:103AF0000002F482000920320044E6003B70B4BAB0
-:103B00006802E0003B70F0052D38F7047A90000061
-:103B10000001C03A6A00EE003B29C5B40000C73876
-:103B20005A00E0003B30F7057A90C5B80000F00578
-:103B30007A90F7047A88F6867A2876390003A6B256
-:103B4000680207380001F7057A88F7047A98969694
-:103B5000FFF49682FF3CF4847A98F6867A2CC73874
-:103B600058009482FF409582FF44B5B26802F70581
-:103B70007A988796FFFC8296FFF802140000013CB9
-:103B80000000000000019293FFFC02900008221048
-:103B90000018F5047A88F7067A2CF5847A9076A9CD
-:103BA0000003A6B67002202E0000E6003BCD000008
-:103BB0000001F7047AA000000001C02A7200E600AC
-:103BC0003F18C02E6A00EE003F1900000001F68485
-:103BD00032C0F60432C88736141000000001C7381E
-:103BE000600097361410873614180000000107385B
-:103BF00000019736141887361418F70432B80000FD
-:103C00000001C7386000F70532B8F70432BC000085
-:103C1000000107380001F70532BCF70432BC202E42
-:103C20000000E6003C3DF6820000F70432E0F68535
-:103C30007A7007380001E0003C40F70532E0F505F6
-:103C40007A70F5846F5800000001202E0021E200F8
-:103C50003C84F6862C28F7042D3800000001063835
-:103C60000001F6052D387739000220320044E600C5
-:103C70003C78B5BA6802F0052D38F4820022E000E5
-:103C80003C88F4856F58F0056F54F58432C000000D
-:103C90000001902E0004872E000000000001203A51
-:103CA0000002E6003DB4000000018702FF3804ACCA
-:103CB0000EF49496FFECF7057A689493FFFC9596C2
-:103CC000FFE407880008E00043A09793FFFC859677
-:103CD000FFE420220000E6003D7000000001862E77
-:103CE0000EF80000000120320010E2003D0DF482C9
-:103CF000004C872E0F000000000107380001972EAE
-:103D00000F00872E0F00E0003D700000000194932B
-:103D1000FFFCF4867A289493FFFC76B10002C6B4C7
-:103D2000600077350004C7386A008496FFECC73816
-:103D30006000C7384800073800109713FFFC9596BD
-:103D4000FFE49616FFE007880008E00126F8979345
-:103D5000FFFC8616FFE08596FFE406300001203266
-:103D60000011E6003D6C00000001F6020000962EF6
-:103D70000EF8F70432C0F486E030C03A4A00E6009C
-:103D80003DB400000001F704E0180000000177B81E
-:103D9000001E703EFFE1E6003DB5000000010F810E
-:103DA0004000F70479C80000000107380001F7055A
-:103DB00079C8F70479C8F70471C400000001203AFB
-:103DC0000000E6003DF1F6862C28F7042D380000AF
-:103DD000000106380001F6052D3877390002F4821B
-:103DE000000A20320044E6003DF0B4BA6802F00553
-:103DF0002D38F70471D4F68471CC07380001C03A2D
-:103E00006A00E6003E0CF70571D4F00571D4F68423
-:103E100071D4F70471D0F00571C4C0367200470C3C
-:103E20000001F68432D00000000120360000E600D8
-:103E30003ED1F70571C8F704719800000001203ADF
-:103E40000000E6003E7100000001F70475EC000080
-:103E50000001203A0000E6003E7000000001F70477
-:103E600075F000000001203A0000E6003EC90000A5
-:103E70000001F58476F800000001202E0021E20008
-:103E80003EBCF6862C28F7042D38000000010638C9
-:103E90000001F6052D387739000220320044E60093
-:103EA0003EA8B5BA6802F0052D38F4820022F485E8
-:103EB00076F8F4847700E0003EC0F48576FCF005E7
-:103EC00076FCE0003ED0F0057A78E0003ED4F4863F
-:103ED000319CF4862EE0F48532D4F70471C80000DA
-:103EE0000001203A0000E6003F80F6862C28F70407
-:103EF0002D380000000106380001F6052D3877390D
-:103F00000002F482000920320044E6003F80B4BA87
-:103F10006802E0003F80F0052D38F7047A90000039
-:103F20000001C03A6A00EE003F39C5B40000C7384E
-:103F30005A00E0003F40F7057A90C5B80000F00550
-:103F40007A90F7047A88F6867A2876390003A6B242
-:103F5000680207380001F7057A88F7047A98969680
-:103F6000FFF49682FF3CF4847A98F6867A2CC73860
-:103F700058009482FF409582FF44B5B26802F7056D
-:103F80007A988796FFFC8296FFF802140000013CA5
-:103F90000000000000019293FFFC02900008221034
-:103FA0000010F5846F5800000001202E0021E2006F
-:103FB0003FE4F6862C28F7042D380000000106386F
-:103FC0000001F6052D387739000220320044E60062
-:103FD0003FD8B5BA6802F0052D38F5020022E0009E
-:103FE0003FE8F5056F58F0056F54F58432C00000C6
-:103FF0000001902E0004872E000000000001203AEE
-:104000000002E6004114000000018702FF38052C81
-:104010000EF49516FFF4F7057A689513FFFC959654
-:10402000FFEC07880008E00043A09793FFFC85960B
-:10403000FFEC20220000E60040D000000001862EA8
-:104040000EF80000000120320010E200406DF50281
-:10405000004C872E0F000000000107380001972E4A
-:104060000F00872E0F00E00040D0000000019513E4
-:10407000FFFCF5067A289513FFFC76B10002C6B462
-:10408000600077350004C7386A008516FFF4C7382A
-:104090006000C7385000073800109713FFFC959652
-:1040A000FFEC9616FFE807880008E00126F89793D2
-:1040B000FFFC8616FFE88596FFEC063000012032F3
-:1040C0000011E60040CC00000001F6020000962E30
-:1040D0000EF8F70432C0F506E030C03A5200E600B0
-:1040E000411400000001F704E0180000000177B857
-:1040F000001E703EFFE1E6004115000000010F8147
-:104100004000F70479C80000000107380001F705F6
-:1041100079C8F70479C8F70471C400000001203A97
-:104120000000E6004151F6862C28F7042D380000E7
-:10413000000106380001F6052D3877390002F50236
-:10414000000A20320044E6004150B53A6802F0050A
-:104150002D38F70471D4F68471CC07380001C03AC9
-:104160006A00E600416CF70571D4F00571D4F6845D
-:1041700071D4F70471D0F00571C4C0367200470CD9
-:104180000001F68432D00000000120360000E60075
-:104190004231F70571C8F704719800000001203A18
-:1041A0000000E60041D100000001F70475EC0000BA
-:1041B0000001203A0000E60041D000000001F704B1
-:1041C00075F000000001203A0000E60042290000DE
-:1041D0000001F58476F800000001202E0021E200A5
-:1041E000421CF6862C28F7042D3800000001063802
-:1041F0000001F6052D387739000220320044E60030
-:104200004208B5BA6802F0052D38F5020022F5051E
-:1042100076F8F5047700E0004220F50576FCF0051D
-:1042200076FCE0004230F0057A78E0004234F50692
-:10423000319CF5062EE0F50532D4F70471C8000074
-:104240000001203A0000E6004274F6862C28F704AC
-:104250002D380000000106380001F6052D387739A9
-:104260000002F502000920320044E6004274B53A2B
-:104270006802F0052D388796FFFC8296FFF802143D
-:104280000000013C0000000000019293FFFC02903E
-:104290000008F70632D49713FFFCF7062EE09713B9
-:1042A000FFFC07880008E00014F49793FFFCF70672
-:1042B00032D49713FFFCF7062F6C9713FFFC078887
-:1042C0000008E00014F49793FFFCF70632D497132C
-:1042D000FFFCF7062FF89713FFFC07880008E000A3
-:1042E00014F49793FFFCF70632D49713FFFCF706FC
-:1042F00030849713FFFC07880008E00014F49793BC
-:10430000FFFCF70632D49713FFFCF7063110971322
-:10431000FFFC07880008E00014F49793FFFCF70601
-:1043200032D49713FFFCF706319C9713FFFC0788E4
-:104330000008E00014F49793FFFCF70632D49713BB
-:10434000FFFCF70632289713FFFC07880008E000FF
-:1043500014F49793FFFC8796FFFC8296FFF80214F3
-:104360000000013C0000000000019293FFFC02905D
-:104370000008871600000000000186BA0000873A96
-:10438000000400000001C0367200440C0001879652
-:10439000FFFC8296FFF802140004013C00000000BC
-:1043A00000019293FFFC0290000885960000000037
-:1043B0000001862E000086AE000420320010E200CC
-:1043C00043D00000000120360010E20043ED073426
-:1043D0000001872E000C0000000107380001972E15
-:1043E000000C872E000CE0004414F4020000C03AD8
-:1043F0006200E6004411F402000020360010E600DE
-:1044000044140000000120320000E60044140000C3
-:104410000001F40200018796FFFC8296FFF8021467
-:104420000004013C0000000000019293FFFC029098
-:104430000008F7020001F7053524F7046F44000077
-:104440000001F7053528F70632F49713FFFCF7064D
-:1044500035309713FFFC07880008E0001548979354
-:10446000FFFCF70245049713FFFCF702000D9713BA
-:10447000FFFCF70632F49713FFFC07880008E00002
-:10448000161C9793FFFCF7024A049713FFFCF702F0
-:10449000000F9713FFFCF70633809713FFFC078884
-:1044A0000008E000161C9793FFFCF7024EEC9713F0
-:1044B000FFFCF70200089713FFFCF706340C971374
-:1044C000FFFC07880008E000161C9793FFFCF7022A
-:1044D00057649713FFFCF70200079713FFFCF706DA
-:1044E00034989713FFFC07880008E000161C979388
-:1044F000FFFC8796FFFC8296FFF802140000013C47
-:104500000000000000019293FFFC029000082210BE
-:104510000014F70475F800000001203A0000E600DE
-:10452000452DF68675F8E0004544F7020000F704D3
-:1045300076040000000177390002C7386800873A26
-:10454000001800000001203A0000E600455CF70575
-:104550003548F4863380E00049F0F4853530F704BF
-:104560006F5400000001203A0000E6004580F4820C
-:104570000008F4820001F4856F54E0004588F702DA
-:104580000001F4856F58F7020000203A0000E600B1
-:1045900045A0F4820004F486340CE00049F0F48570
-:1045A0003530F6843548F604352CF4B72800073446
-:1045B0000002F4820001F4BB28008732008CF482F0
-:1045C00000019736001887320090F4856F509736B7
-:1045D000000484B200840000000194B6001084B28C
-:1045E00000880000000194B6001484B6001000009A
-:1045F000000194B6000884B600140000000194B6CF
-:10460000000C84B2009800000001F4853554F48257
-:1046100000019482FF80F5043554F4863498F485C3
-:1046200035309502FF3885B2000006B4002495822B
-:10463000FF3C9682FF4087320004F6853550970292
-:10464000FF4486B20004F005354CF704354095165A
-:10465000FFF49596FFF4C7386800F7053540F584F8
-:10466000352886B20004872E141400000001C738D4
-:104670006800972E14148732008000000001203A51
-:104680000001EE0049F0F7060C3EC07E7400E60023
-:1046900046A400000001C07E7400E60046950000BC
-:1046A0000001F7060C3EC77C7400203A0010E600BB
-:1046B00049F000000001FF8200108682FF38F704F5
-:1046C0003558F5846F58F685355407380001202E8B
-:1046D0000021E2004708F7053558F7042D38F68623
-:1046E0002C2806380001F6052D38773900022032D3
-:1046F0000044E60046FCB5BA6802F0052D38F482A5
-:104700000022E000470CF4856F58F0056F54F684E2
-:10471000352C0000000187360094C4840000C03AA4
-:104720004A00E60047710000000186360094F684D6
-:1047300035540000000176B4FFF0F7043554969626
-:10474000FFF4473900009716FFF0C6B47000F70475
-:10475000354877B4000F703EFFE107380024E600CB
-:104760004769C638600006B40001C7046E00F7331D
-:104770002800F6843544000000018736000400005C
-:104780000001203A000FE20047BD073800018736DC
-:10479000000C00000001073800019736000C873636
-:1047A000000CE00047D000000001F7043528F68235
-:1047B000000107380008E0004968F7053544203A51
-:1047C0000010E60047CC00000001F7020000973619
-:1047D0000004F704353CF684352807380001F70556
-:1047E000353CF704353C8736141C000000010738BF
-:1047F00000019736141CF704760486B6141CF604E0
-:1048000075FC07380001F684760000000001C03A0C
-:104810006A00E600481CF7057604F0057604F68485
-:104820007604F7047608F00575FCC0367200470C74
-:10483000000120320000E6004881F70575F8F70412
-:104840007648F4867218C03A4A00470C0001203AB4
-:104850000000E6004881F6862C28F7042D38000079
-:10486000000106380001F6052D3877390002F48280
-:10487000000E20320044E6004880B4BA6802F00519
-:104880002D38F5020000202A0002EE004968F68269
-:104890000000F68435280000000187360000000083
-:1048A0000001203A0002E600493C05B40008959357
-:1048B000FFFC9516FFEC9596FFE89696FFE40788B7
-:1048C0000008E0005EDC9793FFFC8516FFEC859600
-:1048D000FFE88696FFE420220000E600492CF7025C
-:1048E00000008636000C000000012032000FE200BC
-:1048F000491100000001873600140000000107384C
-:1049000000019736001487360014E000492CF702A6
-:10491000000076B10002C6B4600077350005C738E4
-:104920006A00C738600007380010C72C7000203AB2
-:104930000000E60047A8F705352CF6843528F70473
-:104940006F4C00000001C0367200E600495C07347D
-:104950001494F4846F44E0004960F4853528F70529
-:104960003528E00048840528000120360000E600D4
-:1049700049A1F6862C28F7042D38000000010638DE
-:104980000001F6052D3877390002F482000D20323F
-:104990000044E60049A8B4BA6802E00049A8F0055E
-:1049A0002D38F4820001F4853524F6843528F70487
-:1049B0006F44F48632F4C0367200E60049F0F485A4
-:1049C0003530F704E0180000000177B8001F703E92
-:1049D000FFE1E60049F1000000010F814000F7040B
-:1049E00079C80000000107380001F70579C8F7040D
-:1049F00079C88796FFFC8296FFF802140000013CFC
-:104A00000000000000019293FFFC029000082210B9
-:104A10000014F70475F800000001203A0000E600D9
-:104A20004A2DF68675F8E0004A40F6820000F70449
-:104A300076040000000177390002C738680086BAA2
-:104A40000018F7046F5400000001203A0000E6004F
-:104A50004A64F6853548F4820001F4856F54E0001D
-:104A60004A70F7020001F4820008F4856F58F702DB
-:104A70000000203A0000E6004A88F4820004F48630
-:104A8000340CE0004ED8F4853530F6843548F60411
-:104A9000352CF4B7280007340002F4820001F4BB7F
-:104AA00028008732008CF482000197360018873284
-:104AB0000090F4856F509736000484B200840000A3
-:104AC000000194B6001084B200880000000194B682
-:104AD000001484B600100000000194B6000884B6EB
-:104AE00000140000000194B6000C84B2009800008D
-:104AF0000001F4853554F48200019482FF80F504AE
-:104B00003554F4863498F48535309502FF3885B2F3
-:104B1000000006B400249582FF3C9682FF40873255
-:104B20000004F68535509702FF4486B20004F00574
-:104B3000354CF70435409516FFF49596FFF4C738C9
-:104B40006800F7053540F584352886B20004872EC5
-:104B5000141400000001C7386800972E141487321F
-:104B6000008000000001203A0001EE004ED8F70658
-:104B70000C3EC07E7400E6004B8C00000001C07E3D
-:104B80007400E6004B7D00000001F7060C3EC77C78
-:104B90007400203A0010E6004ED800000001FF82A9
-:104BA00000108682FF38F7043558F5846F58F68573
-:104BB000355407380001202E0021E2004BF0F705A4
-:104BC0003558F7042D38F6862C2806380001F605EE
-:104BD0002D387739000220320044E6004BE4B5BAA4
-:104BE0006802F0052D38F4820022E0004BF4F485D1
-:104BF0006F58F0056F54F684352C0000000187369D
-:104C00000094C4840000C03A4A00E6004C590000F9
-:104C1000000186360094F68435540000000176B415
-:104C2000FFF0F70435549696FFF4473900009716C5
-:104C3000FFF0C6B47000F704354877B4000F703E3B
-:104C4000FFE107380024E6004C51C638600006B486
-:104C50000001C7046E00F7332800F68435440000D5
-:104C600000018736000400000001203A000FE20036
-:104C70004CA5073800018736000C000000010738FA
-:104C800000019736000C8736000CE0004CB800009D
-:104C90000001F7043528F682000107380008E0001B
-:104CA0004E50F7053544203A0010E6004CB40000A1
-:104CB0000001F702000097360004F704353CF68443
-:104CC000352807380001F705353CF704353C8736B1
-:104CD000141C00000001073800019736141CF7046B
-:104CE000760486B6141CF60475FC07380001F684B9
-:104CF000760000000001C03A6A00E6004D04F705A6
-:104D00007604F0057604F6847604F7047608F00558
-:104D100075FCC0367200470C000120320000E6002E
-:104D20004D69F70575F8F7047648F4867218C03AAD
-:104D30004A00470C0001203A0000E6004D69F68663
-:104D40002C28F7042D380000000106380001F60574
-:104D50002D3877390002F482000E20320044E6003C
-:104D60004D68B4BA6802F0052D38F5020000202A1B
-:104D70000002EE004E50F6820000F6843528000056
-:104D800000018736000000000001203A0002E60022
-:104D90004E2405B400089593FFFC9516FFEC9596FC
-:104DA000FFE89696FFE407880008E0005EDC979332
-:104DB000FFFC8516FFEC8596FFE88696FFE420222F
-:104DC0000000E6004E14F70200008636000C0000DA
-:104DD00000012032000FE2004DF90000000187368B
-:104DE00000140000000107380001973600148736D0
-:104DF0000014E0004E14F702000076B10002C6B4C1
-:104E0000600077350005C7386A00C738600007388A
-:104E10000010C72C7000203A0000E6004C90F70507
-:104E2000352CF6843528F7046F4C00000001C0369D
-:104E30007200E6004E4407341494F4846F44E0009A
-:104E40004E48F4853528F7053528E0004D6C0528D7
-:104E5000000120360000E6004E89F6862C28F70473
-:104E60002D380000000106380001F6052D3877398D
-:104E70000002F482000D20320044E6004E90B4BAE5
-:104E80006802E0004E90F0052D38F4820001F485B0
-:104E90003524F6843528F7046F44F48632F4C0369E
-:104EA0007200E6004ED8F4853530F704E0180000B3
-:104EB000000177B8001F703EFFE1E6004ED9000008
-:104EC00000010F814000F70479C800000001073895
-:104ED0000001F70579C8F70479C88796FFFC829628
-:104EE000FFF802140000013C000000000001929352
-:104EF000FFFC0290000822100014F6843548F604E6
-:104F0000352CF4820004F4B7280007340002F48240
-:104F10000001F4BB28008732008CF4820001973630
-:104F2000001887320090F4856F509736000484B2E1
-:104F300000840000000194B6001084B200880000D4
-:104F4000000194B6001484B600100000000194B66D
-:104F5000000884B600140000000194B6000C84B26E
-:104F6000009800000001F4853554F4820001948219
-:104F7000FF80F5043554F4863498F4853530950275
-:104F8000FF3885B2000006B400249582FF3C96826B
-:104F9000FF4087320004F68535509702FF4486B201
-:104FA0000004F005354CF70435409516FFF495964E
-:104FB000FFF4C7386800F7053540F584352886B218
-:104FC0000004872E141400000001C7386800972ED3
-:104FD00014148732008000000001203A0001EE0026
-:104FE000534CF7060C3EC07E7400E60050000000F3
-:104FF0000001C07E7400E6004FF100000001F706DA
-:105000000C3EC77C7400203A0010E600534C0000B0
-:105010000001FF8200108682FF38F7043558F584BE
-:105020006F58F685355407380001202E0021E20024
-:105030005064F7053558F7042D38F6862C280638C5
-:105040000001F6052D387739000220320044E600D1
-:105050005058B5BA6802F0052D38F4820022E000FD
-:105060005068F4856F58F0056F54F684352C0000B5
-:10507000000187360094C4840000C03A4A00E6006C
-:1050800050CD0000000186360094F68435540000AF
-:10509000000176B4FFF0F70435549696FFF44739D3
-:1050A00000009716FFF0C6B47000F704354877B4D7
-:1050B000000F703EFFE107380024E60050C5C638F7
-:1050C000600006B40001C7046E00F7332800F684C0
-:1050D0003544000000018736000400000001203A3A
-:1050E000000FE2005119073800018736000C00005C
-:1050F0000001073800019736000C8736000CE000ED
-:10510000512C00000001F7043528F6820001073811
-:105110000008E00052C4F7053544203A0010E600CC
-:10512000512800000001F702000097360004F70440
-:10513000353CF684352807380001F705353CF7047F
-:10514000353C8736141C00000001073800019736F3
-:10515000141CF704760486B6141CF60475FC073894
-:105160000001F684760000000001C03A6A00E60003
-:105170005178F7057604F0057604F6847604F70492
-:105180007608F00575FCC0367200470C000120322D
-:105190000000E60051DDF70575F8F7047648F4865F
-:1051A0007218C03A4A00470C0001203A0000E6009D
-:1051B00051DDF6862C28F7042D3800000001063852
-:1051C0000001F6052D3877390002F482000E2032F6
-:1051D0000044E60051DCB4BA6802F0052D38F5024F
-:1051E0000000202A0002EE0052C4F6820000F6847D
-:1051F0003528000000018736000000000001203A39
-:105200000002E600529805B400089593FFFC95163D
-:10521000FFEC9596FFE89696FFE407880008E0000B
-:105220005EDC9793FFFC8516FFEC8596FFE886967B
-:10523000FFE420220000E6005288F70200008636D4
-:10524000000C000000012032000FE200526D00004F
-:10525000000187360014000000010738000197366E
-:10526000001487360014E0005288F702000076B17F
-:105270000002C6B4600077350005C7386A00C73839
-:10528000600007380010C72C7000203A0000E600CC
-:105290005104F705352CF6843528F7046F4C0000CF
-:1052A0000001C0367200E60052B807341494F4844A
-:1052B0006F44E00052BCF4853528F7053528E0003E
-:1052C00051E00528000120360000E60052FDF68678
-:1052D0002C28F7042D380000000106380001F605DF
-:1052E0002D3877390002F482000D20320044E600A8
-:1052F0005304B4BA6802E0005304F0052D38F48278
-:105300000001F4853524F6843528F7046F44F486CB
-:1053100032F4C0367200E600534CF4853530F704A1
-:10532000E0180000000177B8001F703EFFE1E600C2
-:10533000534D000000010F814000F70479C80000C0
-:10534000000107380001F70579C8F70479C8879686
-:10535000FFFC8296FFF802140000013C00000000F0
-:1053600000019293FFFC0290000822100014F484C4
-:105370003554F684354CF584352C9482FF3876B557
-:105380000003A52E6802000000019502FF3CF38493
-:105390003550C6AC68009382FF4087360004000099
-:1053A00000019702FF4486360004F70435400000F0
-:1053B0000001C7386000F7053540F604352886B689
-:1053C0000004873214149496FFF4C73868009732AB
-:1053D0001414872E008000000001203A0001EE0026
-:1053E00057509516FFF4F7060C3EC07E7400E60099
-:1053F000540400000001C07E7400E60053F5000074
-:105400000001F7060C3EC77C7400203A0010E6004D
-:10541000575000000001FF8200108682FF38F70419
-:105420003558F5846F58F685355407380001202E1D
-:105430000021E2005468F7053558F7042D38F68648
-:105440002C2806380001F6052D3877390002203265
-:105450000044E600545CB5BA6802F0052D38F382CA
-:105460000022E000546CF3856F58F0056F54F68409
-:10547000352C0000000187360094C3840000C03A38
-:105480003A00E60054D10000000186360094F6840C
-:1054900035540000000176B4FFF0F70435549696B9
-:1054A000FFF4473900009716FFF0C6B47000F70408
-:1054B000354877B4000F703EFFE107380024E6005E
-:1054C00054C9C638600006B40001C7046E00F73343
-:1054D0002800F684354400000001873600040000EF
-:1054E0000001203A000FE200551D07380001873601
-:1054F000000C00000001073800019736000C8736C9
-:10550000000CE000553000000001F7043528F68259
-:10551000000107380008E00056C8F7053544203A76
-:105520000010E600552C00000001F702000097363D
-:105530000004F704353CF684352807380001F705E8
-:10554000353CF704353C8736141C00000001073851
-:1055500000019736141CF704760486B6141CF60472
-:1055600075FC07380001F684760000000001C03A9F
-:105570006A00E600557CF7057604F0057604F684AB
-:105580007604F7047608F00575FCC0367200470C07
-:10559000000120320000E60055E1F70575F8F70438
-:1055A0007648F3867218C03A3A00470C0001203A58
-:1055B0000000E60055E1F6862C28F7042D3800009F
-:1055C000000106380001F6052D3877390002F38214
-:1055D000000E20320044E60055E0B3BA6802F00540
-:1055E0002D38F5020000202A0002EE0056C8F6828F
-:1055F0000000F68435280000000187360000000016
-:105600000001203A0002E600569C05B4000895937C
-:10561000FFFC9516FFEC9596FFE89696FFE4078849
-:105620000008E0005EDC9793FFFC8516FFEC859692
-:10563000FFE88696FFE420220000E600568CF70281
-:1056400000008636000C000000012032000FE2004E
-:105650005671000000018736001400000001073871
-:1056600000019736001487360014E000568CF702CC
-:10567000000076B10002C6B4600077350005C73877
-:105680006A00C738600007380010C72C7000203A45
-:105690000000E6005508F705352CF6843528F70498
-:1056A0006F4C00000001C0367200E60056BC0734A3
-:1056B0001494F3846F44E00056C0F3853528F70551
-:1056C0003528E00055E40528000120360000E600FA
-:1056D0005701F6862C28F7042D3800000001063803
-:1056E0000001F6052D3877390002F382000D2032D3
-:1056F0000044E6005708B3BA6802E0005708F00516
-:105700002D38F3820001F3853524F6843528F7041B
-:105710006F44F38632F4C0367200E6005750F385CA
-:105720003530F704E0180000000177B8001F703E24
-:10573000FFE1E6005751000000010F814000F7042F
-:1057400079C80000000107380001F70579C8F7049F
-:1057500079C88796FFFC8296FFF802140000013C8E
-:105760000000000000019293FFFC0290000822104C
-:1057700000148702FF38F384352CF7053554871E53
-:105780000080F504354C27380001C02A7200E6007D
-:105790005A4C00000001F5846F5800000001202ED3
-:1057A0000021E20057D8F6862C28F7042D38000097
-:1057B000000106380001F6052D3877390002203245
-:1057C0000044E60057CCB5BA6802F0052D38F30264
-:1057D0000022E00057DCF3056F58F0056F54F684A3
-:1057E000352C0000000187360094C3040000C03A45
-:1057F0003200E60058410000000186360094F6842D
-:1058000035540000000176B4FFF0F7043554969645
-:10581000FFF4473900009716FFF0C6B47000F70494
-:10582000354877B4000F703EFFE107380024E600EA
-:105830005839C638600006B40001C7046E00F7335B
-:105840002800F6843544000000018736000400007B
-:105850000001203A000FE200588D0738000187361A
-:10586000000C00000001073800019736000C873655
-:10587000000CE00058A000000001F7043528F68273
-:10588000000107380008E0005A38F7053544203A8F
-:105890000010E600589C00000001F7020000973657
-:1058A0000004F704353CF684352807380001F70575
-:1058B000353CF704353C8736141C000000010738DE
-:1058C00000019736141CF704760486B6141CF604FF
-:1058D00075FC07380001F684760000000001C03A2C
-:1058E0006A00E60058ECF7057604F0057604F684C5
-:1058F0007604F7047608F00575FCC0367200470C94
-:10590000000120320000E6005951F70575F8F70450
-:105910007648F3067218C03A3200470C0001203A6C
-:105920000000E6005951F6862C28F7042D380000B7
-:10593000000106380001F6052D3877390002F30220
-:10594000000E20320044E6005950B33A6802F005D8
-:105950002D38F5020000202A0002EE005A38F682A7
-:105960000000F684352800000001873600000000A2
-:105970000001203A0002E6005A0C05B40008959395
-:10598000FFFC9516FFEC9596FFE89696FFE40788D6
-:105990000008E0005EDC9793FFFC8516FFEC85961F
-:1059A000FFE88696FFE420220000E60059FCF7029B
-:1059B00000008636000C000000012032000FE200DB
-:1059C00059E100000001873600140000000107388B
-:1059D00000019736001487360014E00059FCF702E6
-:1059E000000076B10002C6B4600077350005C73804
-:1059F0006A00C738600007380010C72C7000203AD2
-:105A00000000E6005878F705352CF6843528F704B1
-:105A10006F4C00000001C0367200E6005A2C0734BB
-:105A20001494F3046F44E0005A30F3053528F70569
-:105A30003528E00059540528000120360000E60012
-:105A40005DC4F3020001E0005DF000000001772971
-:105A50000003C71C7000873A00040528000176A9DE
-:105A60000003F4843554F60435509482FF38A41EA4
-:105A70006802C63070009402FF3C9602FF40C69C4C
-:105A8000680087360004000000019702FF4485B6D5
-:105A90000004F704354000000001C7385800F7053E
-:105AA000354085B60004F505354CF6843528F605F5
-:105AB0003550873614149496FFF4C738580097363B
-:105AC0001414871E008000000001203A0001EE003F
-:105AD0005E3C9416FFF4F7060C3EC07E7400E600B0
-:105AE0005AF400000001C07E7400E6005AE5000090
-:105AF0000001F7060C3EC77C7400203A0010E60057
-:105B00005E3C00000001FF8200108682FF38F7042F
-:105B10003558F5846F58F685355407380001202E26
-:105B20000021E2005B58F7053558F7042D38F6865A
-:105B30002C2806380001F6052D387739000220326E
-:105B40000044E6005B4CB5BA6802F0052D38F3025C
-:105B50000022E0005B5CF3056F58F0056F54F6849B
-:105B6000352C0000000187360094C3040000C03AC1
-:105B70003200E6005BC10000000186360094F68426
-:105B800035540000000176B4FFF0F70435549696C2
-:105B9000FFF4473900009716FFF0C6B47000F70411
-:105BA000354877B4000F703EFFE107380024E60067
-:105BB0005BB9C638600006B40001C7046E00F73355
-:105BC0002800F684354400000001873600040000F8
-:105BD0000001203A000FE2005C0D07380001873613
-:105BE000000C00000001073800019736000C8736D2
-:105BF000000CE0005C2000000001F7043528F6826C
-:105C0000000107380008E0005DB8F7053544203A88
-:105C10000010E6005C1C00000001F702000097364F
-:105C20000004F704353CF684352807380001F705F1
-:105C3000353CF704353C8736141C0000000107385A
-:105C400000019736141CF704760486B6141CF6047B
-:105C500075FC07380001F684760000000001C03AA8
-:105C60006A00E6005C6CF7057604F0057604F684BD
-:105C70007604F7047608F00575FCC0367200470C10
-:105C8000000120320000E6005CD1F70575F8F7044A
-:105C90007648F3067218C03A3200470C0001203AE9
-:105CA0000000E6005CD1F6862C28F7042D380000B1
-:105CB000000106380001F6052D3877390002F3029D
-:105CC000000E20320044E6005CD0B33A6802F005D2
-:105CD0002D38F5020000202A0002EE005DB8F682A1
-:105CE0000000F6843528000000018736000000001F
-:105CF0000001203A0002E6005D8C05B4000895938F
-:105D0000FFFC9516FFEC9596FFE89696FFE4078852
-:105D10000008E0005EDC9793FFFC8516FFEC85969B
-:105D2000FFE88696FFE420220000E6005D7CF70293
-:105D300000008636000C000000012032000FE20057
-:105D40005D61000000018736001400000001073883
-:105D500000019736001487360014E0005D7CF702DE
-:105D6000000076B10002C6B4600077350005C73880
-:105D70006A00C738600007380010C72C7000203A4E
-:105D80000000E6005BF8F705352CF6843528F704AB
-:105D90006F4C00000001C0367200E6005DAC0734B5
-:105DA0001494F3046F44E0005DB0F3053528F70563
-:105DB0003528E0005CD40528000120360000E6000C
-:105DC0005DF1F3020001F7042D38F6862C28063821
-:105DD0000001F6052D3877390002F302000D20325C
-:105DE0000044E6005DF4B33A6802E0005DF4F005BB
-:105DF0002D38F3053524F6843528F7046F44F3066F
-:105E000032F4C0367200E6005E3CF3053530F7042C
-:105E1000E0180000000177B8001F703EFFE1E600C7
-:105E20005E3D000000010F814000F70479C80000CA
-:105E3000000107380001F70579C8F70479C887968B
-:105E4000FFFC8296FFF802140000013C00000000F5
-:105E500000019293FFFC02900008F706353097137B
-:105E6000FFFCF70632F49713FFFC07880008E000F8
-:105E700014F49793FFFCF70635309713FFFCF706F1
-:105E800033809713FFFC07880008E00014F4979311
-:105E9000FFFCF70635309713FFFCF706340C971319
-:105EA000FFFC07880008E00014F49793FFFCF70656
-:105EB00035309713FFFCF70634989713FFFC0788DB
-:105EC0000008E00014F49793FFFC8796FFFC82968D
-:105ED000FFF802140000013C000000000001929352
-:105EE000FFFC0290000886160000000000018732C7
-:105EF000000400000001203A000F86B20000C538FF
-:105F00000000EE005F2CC5B400002036000FEE004C
-:105F10005F2C00000001203A0000EC005F2D000023
-:105F2000000120360000EC005F48000000018732CD
-:105F3000000C00000001073800019732000C873286
-:105F4000000CE0005F50F4020000C02A5A00440C2C
-:105F500000018796FFFC8296FFF802140004013CC2
-:105F6000000000000001000000009293FFFC02907E
-:105F70000008F68635609693FFFCF68642309693CD
-:105F8000FFFC07880008E00015489793FFFCF682A5
-:105F900066F89693FFFCF78200179793FFFCF6864E
-:105FA00035609693FFFC07880008E000161C979365
-:105FB000FFFCF68269809693FFFCF78200189793A6
-:105FC000FFFCF68635609693FFFC07880008E0002A
-:105FD000161C9793FFFCF6826B509693FFFCF7829A
-:105FE00000169793FFFCF68635609693FFFC0788B2
-:105FF0000008E000161C9793FFFCF68261789693E8
-:10600000FFFCF782001F9793FFFCF686356096939E
-:10601000FFFC07880008E000161C9793FFFCF6823F
-:10602000627C9693FFFCF78200209793FFFCF68634
-:1060300035609693FFFC07880008E000161C9793D4
-:10604000FFFCF68266F89693FFFCF78200179793A1
-:10605000FFFCF68635EC9693FFFC07880008E0000D
-:10606000161C9793FFFCF68269809693FFFCF782DB
-:1060700000189793FFFCF68635EC9693FFFC078893
-:106080000008E000161C9793FFFCF6826B50969375
-:10609000FFFCF78200169793FFFCF68635EC96938B
-:1060A000FFFC07880008E000161C9793FFFCF682AF
-:1060B00061789693FFFCF782001F9793FFFCF686AA
-:1060C00035EC9693FFFC07880008E000161C9793B8
-:1060D000FFFCF682627C9693FFFCF7820020979388
-:1060E000FFFCF68635EC9693FFFC07880008E0007D
-:1060F000161C9793FFFCF704E02800000001203AEB
-:106100000000E600611500000001F704E028E0004F
-:10611000611877390002F70200F0F7054228F70608
-:10612000408AF03B2800F706408CF03B2800F7023D
-:106130000000F7057AC0F7057AB8F7057AB0F705D9
-:106140007AC8F682C3509693FFFCF68200169693A7
-:10615000FFFCF68642309693FFFC07880008E001BA
-:106160001EC09793FFFC8796FFFC8296FFF80214EF
-:106170000000013C0000000000019293FFFC02902F
-:106180000008F6046F340000000120320000E60031
-:1061900061ED76B1001E8732000076B4FFE5C738A6
-:1061A0006FC07739FFF0203A0007E60061EC06B0D7
-:1061B00000028736000076B5001E76B4FFE5C738CA
-:1061C0006FC07739FFF0203A0001E60061ECF50678
-:1061D00035ECF704423000000001C03A5200470C91
-:1061E0000001203A0000E6006211F5820000F70489
-:1061F00042A0F60642A276B1001E76B4FFE5C7388B
-:106200006FC07739FFF007380001E0006268F733AC
-:1062100028008732000400000001F705E00086B284
-:106220000008203A0000E600623CF685E0042036D3
-:106230000000E6006240202E0000F5820001202EC2
-:106240000000E6006265F60642A2F70442A076B1BD
-:10625000001E76B4FFE5C7386FC07739FFF0073806
-:106260000001F7332800F00542288796FFFC82964C
-:10627000FFF802140000013C0000000000019293AE
-:10628000FFFC02900008F704423CF6846F340738A4
-:10629000000120360000E60062B1F705423C873677
-:1062A0000000F59E0002C03A5A00E60062BDF58685
-:1062B00035ECF70442A0E00062DCF60642A2F704E7
-:1062C000423000000001C03A5A00470C0001203A59
-:1062D0000000E60062F9F60642A4F70442A476B193
-:1062E000001E76B4FFE5C7386FC07739FFF0073876
-:1062F0000001E000630CF73328009693FFFC078849
-:106300000008E00063209793FFFCF0054228879681
-:10631000FFFC8296FFF802140000013C0000000020
-:1063200000019293FFFC02900008221000208316C7
-:10633000000000000001871A001800000001203A48
-:106340000000E600636CF7020000839A001C000066
-:106350000001F3857AC0849A0014F7057AC8F485A1
-:106360007AB0F7057AB88316000000000001869A1B
-:106370000014F7047AB000000001C0367200E60095
-:1063800063D0F6020000869A001CF7047AC0000071
-:106390000001C0367200E60063D000000001869A5A
-:1063A0000018F7047AB800000001C0367200E60059
-:1063B00063D000000001869A0020F7047AC800002C
-:1063C0000001C7386800203A0064EE0063D920322B
-:1063D0000000F602000120320000E60064580000D0
-:1063E00000018396000000000001871E00180000D5
-:1063F0000001203A0000E600643CF7020000F705C7
-:106400004080F7054084F6846E50F482FFFF831EBF
-:10641000000CF4854F5493360010839E0010849630
-:10642000000093B6001484A600080000000194B692
-:106430001DDCF6820064F6854A98F7054A9C8316AF
-:10644000000000000001871A002000000001203A2F
-:106450000000EE00647CF3820000F70442A4F6061C
-:1064600042A676B1001E76B4FFE5C7386FC0773913
-:10647000FFF007380001E00066E4F7332800939648
-:10648000FFF484160000F48642C89496FFECF302F1
-:10649000000C9316FFE4839600008496FFF4871E99
-:1064A000002000000001C0267200EC006648F38660
-:1064B0004A9884A200248316FFE4C5040000B49A1D
-:1064C0003802C7183800832200288396FFF4849688
-:1064D000FFE4933A000493BA0008F604E000F306E0
-:1064E0004A98A6A63002F5820000C0326A00E60093
-:1064F0006510C6380000F684E0048732000400000E
-:106500000001C0367200E6006514202E0000F582FE
-:106510000001202E0000E600652100000001F502C8
-:106520000000F684E0008732000000000001C03661
-:106530007200E200655CF5820000C0367200E60081
-:106540006564202E0000F684E00487320004000019
-:106550000001C0367200E2006565202E0000F58261
-:106560000001202E0000E6006575202A0000F502DB
-:106570000001202A0000E6006588000000018396E3
-:10658000FFF400000001F3854F548722002C76A110
-:10659000001E76B4FFE505A0002E762D001E763095
-:1065A000FFE5F48200009496FFDC8316FFEC2026C2
-:1065B0000007C7386FC07738FFF0F71B2800872E19
-:1065C000000006980002C73867C07738FFF0E20085
-:1065D000661CF73728008516FFEC8596FFDC000067
-:1065E0000001C72C400086BA0030062800040528A8
-:1065F000000205AC00028396FFDC7739001E773875
-:10660000FFE5039C00019396FFDC201E0007C6B443
-:1066100077C076B4FFF0E20065E1F6B3280004200D
-:10662000001C8496FFEC8316FFE48396FFF404A419
-:1066300000149496FFEC0318000C9316FFE4039CDF
-:106640000001E00064949396FFF48496000000003B
-:1066500000018726002000000001F7054A9C85A65E
-:106660000020F7047AB80000000107380001F705A0
-:106670007AB8F7047AB8F6847AC886260018C6B4C1
-:1066800058008726001C0000000127380001C03296
-:106690007200470C0001203A0000E60066E5F6852E
-:1066A0007AC883260008F7046E50F3053B6483A67E
-:1066B0000008F682000093BA1DDC84A6000C831645
-:1066C000000094BA0010831A0010F6857AC8933A35
-:1066D0000014F7020001F7054084F6857AC0F685BC
-:1066E0007AB8F6857AB08796FFFC8296FFF8021496
-:1066F0000004013C0000000000019293FFFC0290A6
-:10670000000822100008F3846F3400000001871E87
-:106710000018F684E01C00000001C0367200EC0096
-:106720006729F7020001F7020000203A0000E600A6
-:1067300067E8F5820001F704E01C869E001800005F
-:106740000001C03A6A00470C0001203A0000E60050
-:1067500067E9C5840000869E0010F704E000F60299
-:106760000000C0367200E6006788051C0010869E97
-:106770000014F704E00400000001C0367200E600D7
-:10678000678C20320000F602000120320000E60093
-:10679000679900000001F582000086AA0000F70456
-:1067A000E00000000001C0367200E20067D4F6028B
-:1067B0000000C0367200E60067DC2032000086AAC6
-:1067C0000004F704E00400000001C0367200E2009B
-:1067D00067DD20320000F602000120320000E600F2
-:1067E00067ED202E0000F5820001202E0000E6005B
-:1067F0006810F606429CF704429C76B1001E76B4FF
-:10680000FFE5C7386FC07739FFF007380001F7336D
-:106810002800F70475F475ACFFE1203A0000E600AB
-:1068200068459596FFF4F7044298F606429876B1CB
-:10683000001E76B4FFE5C7386FC07739FFF0073820
-:106840000001F7332800871E0020041C002076A1D9
-:10685000001E76B4FFE5C7386FC07739FFF0203AE5
-:106860000008EE0068C4F3061554F5020000059C0C
-:106870000022C4AC0000F60200018722000076A1CD
-:10688000001E76B4FFE5C7386FC07739FFF0C02A25
-:106890007200EC0068C0C6A46000A726600276B54E
-:1068A000001E76B4FFE505280001C7386FC07739B0
-:1068B000FFE8F72F680005AC0001E00068780630BB
-:1068C0000002F30615549313FFFCF704E0240000C4
-:1068D00000019713FFFCF704E01C00000001971370
-:1068E000FFFCF306E0009313FFFC9393FFFCF3021D
-:1068F00000019313FFFC07880008E000EE64979303
-:10690000FFFC20220000E6006928F606429EF704FC
-:10691000429C76B1001E76B4FFE5C7386FC0773968
-:10692000FFF007380001F73328008316FFF400005A
-:106930000001201A0000E600696CF30635ECF7044C
-:10694000423000000001C03A3200470C0001203AFA
-:106950000000E600696DF0054228F3063560F30596
-:10696000423007880008E000789C9793FFFC8796E8
-:10697000FFFC8296FFF802140000013C00000000BA
-:1069800000019293FFFC0290000822100004F5041D
-:106990006F34F7044240862A001807380001F68455
-:1069A000E01CF7054240C0366200EC0069B5F70212
-:1069B0000001F7020000203A0000E6006A80F702BA
-:1069C0000001F704E01C86AA001800000001C03A8C
-:1069D0006A00470C0001203A0000E6006A7DC58489
-:1069E000000086AA0010F704E000F6020000C0369E
-:1069F0007200E6006A1404A8001086AA0014F704C6
-:106A0000E00400000001C0367200E6006A1820327F
-:106A10000000F602000120320000E6006A250000B6
-:106A20000001F582000086A60000F704E0000000E7
-:106A30000001C0367200E2006A60F6020000C03653
-:106A40007200E6006A682032000086A60004F7049F
-:106A5000E00400000001C0367200E2006A692032E2
-:106A60000000F602000120320000E6006A81C72C17
-:106A70000000F5820001E0006A80C72C0000C70416
-:106A80000000203A0000EE006B3DF686408AF704D5
-:106A9000408876B5001E76B4FFE5C7386FC07738FA
-:106AA000FFF0203A0000E6006B3CF6820000F6851D
-:106AB0004080F68540849693FFFC9693FFFCF70494
-:106AC000E01C000000019713FFFCF386E0009393A5
-:106AD000FFFC9513FFFCF38200029393FFFC969654
-:106AE000FFF407880008E000EE649793FFFCF405CC
-:106AF00040848696FFF4F7046E50F38635ECF685F5
-:106B00004090F6854094873A1DDCF6854228F705CB
-:106B10003B64F7044230F4054080C03A3A00470C29
-:106B20000001203A0000E6006B3DF3863560F385F6
-:106B3000423007880008E000789C9793FFFC879616
-:106B4000FFFC8296FFF802140000013C00000000E8
-:106B500000019293FFFC02900008F4864230949367
-:106B6000FFFC07880008E00120E49793FFFC202247
-:106B70000000E6006DD9F5820000F704408CF606AF
-:106B8000408C7631001EF68442287630FFE506B44C
-:106B90000001C73867C07738FFF0203A0000E600F0
-:106BA0006BC8F6854228F7044088F686408A76B599
-:106BB000001E76B4FFE5C7386FC07738FFF0203A83
-:106BC0000000E6006D0D00000001F704408CF68621
-:106BD000408C76B5001E76B4FFE5C7386FC07738B5
-:106BE000FFF0203A0000E6006C35F606408AF70414
-:106BF000408876B1001E76B4FFE5C7386FC077389D
-:106C0000FFF0203A0000E6006C34F4863678F70492
-:106C1000424400000001C03A4A00470C0001203AFB
-:106C20000000E6006C35F4820001F4B32800E000B7
-:106C30006D10F005422CF704408CF506408C76A9C7
-:106C4000001E76B4FFE5C7386FC07738FFF0203AF2
-:106C50000000E6006CC1F606408AF704408876B171
-:106C6000001E76B4FFE5C7386FC07738FFF0203AD2
-:106C70000000E6006CC100000001F704422C000097
-:106C8000000107380001203A0009EE006D11F705F8
-:106C9000422CF02B2800F0332800F5820001F70485
-:106CA0004294F606429476B1001E76B4FFE5C738EA
-:106CB0006FC07739FFF007380001E0006D10F7333F
-:106CC0002800F704408CF686408C76B5001E76B41A
-:106CD000FFE5C7386FC07738FFF0203A0000E600C4
-:106CE0006D14202E0000F7044088F606408A76B125
-:106CF000001E76B4FFE5C7386FC07738FFF0203A42
-:106D00000000E6006D15202E0000F0332800F5820B
-:106D10000001202E0000E6006DB5F48635ECF70486
-:106D2000423000000001C03A4A00470C0001203AFE
-:106D30000000E6006D5900000001F704E0280000A3
-:106D40000001203A0000E6006D79F682003CF684EE
-:106D5000E028E0006D7800000001F704E028000062
-:106D60000001203A0000E6006D79F68200F0F70499
-:106D7000E0280000000176B90002F7044228000074
-:106D80000001C03A6A00EC006DB5F6862C28F704C5
-:106D90002D38F005422806380001F6052D387739E0
-:106DA0000002F482001920320044E6006DB4B4BA47
-:106DB0006802F0052D38F482C3509493FFFCF482EE
-:106DC00000169493FFFCF48642309493FFFC0788EE
-:106DD0000008E0011EC09793FFFC8796FFFC829697
-:106DE000FFF802140000013C000000000001929333
-:106DF000FFFC0290000822100004F5863678959377
-:106E0000FFFCF58642449593FFFC07880008E000EC
-:106E100015489793FFFCF58274189593FFFCF58253
-:106E200000199593FFFCF58636789593FFFC07884B
-:106E30000008E000161C9793FFFCF58274AC959354
-:106E4000FFFCF782001D9793FFFCF58637049593AE
-:106E5000FFFC07880008E000161C9793FFFCF582F2
-:106E600078009593FFFCF782001B9793FFFCF58653
-:106E700037049593FFFC07880008E000161C9793E1
-:106E8000FFFCF58278FC9593FFFCF782001A97933C
-:106E9000FFFCF58637909593FFFC07880008E0001B
-:106EA000161C9793FFFCF58280D89593FFFCF78220
-:106EB000001B9793FFFCF58637909593FFFC07889E
-:106EC0000008E000161C9793FFFCF58281749593EF
-:106ED000FFFCF782001D9793FFFCF586381C959305
-:106EE000FFFC07880008E000161C9793FFFCF58262
-:106EF00087749593FFFCF782001B9793FFFCF58640
-:106F0000381C9593FFFC07880008E000161C979337
-:106F1000FFFCF58294F89593FFFCF782001B979392
-:106F2000FFFCF58639349593FFFC07880008E000E4
-:106F3000161C9793FFFCF5828A009593FFFCF7825D
-:106F4000001C9793FFFCF58639349593FFFC078866
-:106F50000008E000161C9793FFFCF5828E089593BD
-:106F6000FFFCF782001A9793FFFCF586393495935E
-:106F7000FFFC07880008E000161C9793FFFCF582D1
-:106F8000969C9593FFFCF782001E9793FFFCF58675
-:106F900038A89593FFFC07880008E000161C97931B
-:106FA000FFFCF5829B2C9593FFFCF782001B9793C7
-:106FB000FFFCF58638A89593FFFC07880008E000E1
-:106FC000161C9793FFFCF582A2DC9593FFFCF782D9
-:106FD000001E9793FFFCF5863AD89593FFFC07882F
-:106FE0000008E000161C9793FFFCF5829E549593D1
-:106FF000FFFCF782001B9793FFFCF5863AD8959328
-:10700000FFFC07880008E000161C9793FFFCF58240
-:10701000A3C09593FFFCF782001C9793FFFCF586B5
-:1070200039C09593FFFC07880008E000161C979371
-:10703000FFFCF582A7649593FFFCF782001E9793EF
-:10704000FFFCF58639C09593FFFC07880008E00037
-:10705000161C9793FFFCF582AA049593FFFCF78218
-:10706000001B9793FFFCF58639C09593FFFC0788BA
-:107070000008E000161C9793FFFCF582AEF895938C
-:10708000FFFCF782001C9793FFFCF5863A4C959322
-:10709000FFFC07880008E000161C9793FFFCF7062A
-:1070A0004250F03B2800F7064088F03B2800F602EB
-:1070B0000000F6054080F6054084F7063B70F63B7D
-:1070C0002800F7063B72F0BB2800F582CA20F58540
-:1070D0003B74F7063B78F03B2800F7063B7AF0BBA1
-:1070E0002800F582B194F5853B7CF7063B80F03BA8
-:1070F0002800F7063B82F0BB2800F582C754F585CF
-:107100003B84F7063B88F03B2800F7063B8AF0BB40
-:107110002800F582BEF8F5853B8CF7063B90F03BE6
-:107120002800F7063B92F0BB2800F582C8F8F585E9
-:107130003B94F7063B98F03B2800F7063B9AF0BBE0
-:107140002800F582C5D8F5853B9CF7063BA0F03BAF
-:107150002800F7063BA2F0BB2800F582C770F58532
-:107160003BA4F7063BA8F03B2800F7063BAAF0BB80
-:107170002800F582C1B4F5853BAC9616FFF407886C
-:107180000008E000D5409793FFFCF6846E50861609
-:10719000FFF40000000196361DDCF6053B6487967F
-:1071A000FFFC8296FFF802140000013C0000000082
-:1071B00000019293FFFC02900008221000302594F9
-:1071C0000020F02F280026140038F03328009013F8
-:1071D000FFFCF7044250F686425076B5001E76B4A6
-:1071E000FFE5C7386FC07739FFF09713FFFC9613A0
-:1071F000FFFC9593FFFC07880008E000F5F49793E7
-:10720000FFFC20220000E600721DF5021770F70453
-:1072100042540000000127380001F705425495133D
-:10722000FFFCF502001B9513FFFCF5064244951385
-:10723000FFFC07880008E0011EC09793FFFC8796BB
-:10724000FFFC8296FFF802140000013C00000000E1
-:1072500000019293FFFC02900008F704E0048616F8
-:107260000000F68200FF7739FFF0C7386C00F73373
-:107270002800F706E006873A000006B00002F7375C
-:107280002800F6843B6407300004F6BB2800870220
-:10729000FF3406300006F73328008796FFFC8296FD
-:1072A000FFF802140004013C00000000000192936A
-:1072B000FFFC029000082210003026140020F0335A
-:1072C000280027140038F03B28009713FFFC909308
-:1072D000FFFCF7044250F686425076B5001E76B4A5
-:1072E000FFE5C7386FC07739FFF09713FFFC96139F
-:1072F000FFFC07880008E000F3389793FFFC20228A
-:107300000000E6007319F5821770F704425400007C
-:10731000000127380001F70542549593FFFCF582E0
-:10732000001B9593FFFCF58642449593FFFC07886C
-:107330000008E0011EC09793FFFC8796FFFC829631
-:10734000FFF802140000013C0000000000019293CD
-:10735000FFFC029000082210004026140020961620
-:10736000FFC4F03328009013FFFC9613FFFC261493
-:1073700000389616FFBC9613FFFC07880008E00053
-:10738000D0DC9793FFFC9013FFFCF7044250F68685
-:10739000425076B5001E76B4FFE5C7386FC0773926
-:1073A000FFF09713FFFC8616FFBC00000001961348
-:1073B000FFFC8616FFC4000000019613FFFC07883F
-:1073C0000008E000F5F49793FFFC20220000E6009F
-:1073D00073E5F6021770F7044254000000012738E5
-:1073E0000001F70542549613FFFCF602001B9613AA
-:1073F000FFFCF60642449613FFFC07880008E001F4
-:107400001EC09793FFFC8796FFFC8296FFF802143C
-:107410000000013C0000000000019293FFFC02907C
-:10742000000822100004F5820000F5854080959642
-:10743000FFF407880008E000CB509793FFFC859687
-:10744000FFF4F5020064F5053BB4F7044250F486FE
-:10745000425076A5001E76B4FFE5F6044F5CF402B8
-:107460000006F4054254F5853B6CF5853BB8953232
-:10747000000095B20004C7386FC07739FFF00738B5
-:107480000001F727280007880008E00071B09793F3
-:10749000FFFCF4063704F40542448796FFFC82960D
-:1074A000FFF802140000013C00000000000192936C
-:1074B000FFFC0290000822100050F7044250F686AC
-:1074C000425076B5001E76B4FFE5F6046F34C73837
-:1074D0006FC086B2000C7739FFF0C0367200E6004C
-:1074E00077ECC504000086B20010F704E000F30258
-:1074F0000000C0367200E600751804B0001086B2B5
-:107500000014F704E00400000001C0367200E60039
-:10751000751C201A0000F3020001201A0000E6008A
-:10752000752900000001F502000086A60000F7049E
-:10753000E00000000001C0367200E2007564F6024F
-:107540000000C0367200E600756C2032000086A68E
-:107550000004F704E00400000001C0367200E200FD
-:10756000756D20320000F602000120320000E600B6
-:10757000757D202A0000F5020001202A0000E600A7
-:1075800077EC0000000107880008E000CBCC97935F
-:10759000FFFC26140020F033280004A00002F0278E
-:1075A0002800F582000023940022F59F280003A004
-:1075B000001A9396FFD42594002285AE000077AD83
-:1075C000001E77BCFFE5C5AC7FC075ADFFF076311E
-:1075D000001E7630FFE506A400022314001E751578
-:1075E000001EF59F2800F384E0007528FFE593A2B4
-:1075F000001CF584E0047399001E739CFFE59396CC
-:10760000FFAC7395001E739CFFE59396FFCC23940B
-:10761000004295A200208716FFE07595001E75AC0C
-:10762000FFE59596FFB47595001E75ACFFE5959640
-:10763000FFC4C73867C07738FFF0F7272800F48405
-:107640004F58871A0000C4A04A0074A4FFFAC5A4CA
-:107650000000F59F28008396FFAC2314001A7619CA
-:10766000001E7630FFE58596FFB4C7383FC07738F7
-:10767000FFF0F737280006B400028716FFE4839670
-:10768000FFCCC73857C07738FFF0F7372800871A84
-:10769000000006B40002C73867C07738FFF0F7373C
-:1076A000280006B400028716FFE823140016761996
-:1076B000001E7630FFE5C7385FC07738FFF0F73738
-:1076C0002800871A000006B40002C73867C0773860
-:1076D000FFF0F737280006B400028716FFEC2314EA
-:1076E00000127619001E7630FFE5C7383FC07738A4
-:1076F000FFF0F7372800871A000006B400028596CD
-:10770000FFC4C73867C07738FFF0F73728008716FF
-:10771000FFF006B40002C7385FC07738FFF0F737D4
-:107720002800F3820002F3A3280004200018259407
-:10773000002285AE000077AD001E77BCFFE5C5AC2A
-:107740007FC075ADFFF08396FFD4F5A32800F49FAA
-:1077500028002594004285AE000077AD001E77BC5E
-:10776000FFE5C5AC7FC075ADFFF044AD000094935C
-:10777000FFFCF786E0009793FFFCF3844F5C00006A
-:1077800000019393FFFC07880008E00123409793D2
-:10779000FFFC07880008E00078D89793FFFCF0050D
-:1077A0004084F786E0009793FFFC07880008E0001C
-:1077B000D5A09793FFFCF7046E50F4054084873AF8
-:1077C0001DDC00000001F7053B64F5863678F58581
-:1077D0004244F3863560F3854230F5864244959302
-:1077E000FFFC07880008E0011F489793FFFC87967D
-:1077F000FFFC8296FFF802140000013C000000002C
-:1078000000019293FFFC02900008F5864244959394
-:10781000FFFC07880008E00120E49793FFFC20228A
-:107820000000E600788900000001F70442540000DF
-:107830000001203A0000EE007851F6064250078819
-:107840000008E00071B09793FFFCE000788800002A
-:107850000001F704425076B1001E76B4FFE5F582D0
-:107860000006F5854254C7386FC07739FFF00738F6
-:107870000001F733280007880008E00072AC9793F6
-:10788000FFFCF5863790F58542448796FFFC82968B
-:10789000FFF802140000013C000000000001929378
-:1078A000FFFC02900008F6063678F6054244F7021F
-:1078B0000000F7054080F7054094F6846E50F70508
-:1078C000409097361DDC8796FFFC8296FFF80214E5
-:1078D0000000013C0000000000019293FFFC0290B8
-:1078E0000008F7020001F70540808796FFFC8296AA
-:1078F000FFF802140000013C000000000001929318
-:10790000FFFC02900008221000A8F7044250F58600
-:10791000425076AD001EF4846F3476B4FFE5949641
-:10792000FFC4C7386FC086A6000C7739FFF0C03699
-:107930007200E6007955F606429AF704429876B14D
-:10794000001E76B4FFE5C7386FC07739FFF00738FF
-:107950000001F7332800F704425076AD001E76B4DC
-:10796000FFE58516FFC4C7386FC086AA000C7739BB
-:10797000FFF0C0367200E60080A8F606429A872A19
-:107980000010862A001C203A0000E60079A8F68242
-:107990000000872A001400000001203A0000E600E1
-:1079A00079AC20360000F682000120360000E600A7
-:1079B0007A05249400209496FFBC8516FFC4F02716
-:1079C0002800052800109516FFB49513FFFC0788C2
-:1079D0000008E00072509793FFFC8496FFB400000B
-:1079E00000019493FFFC8516FFBC00000001951375
-:1079F000FFFC07880008E000F9349793FFFCE000E3
-:107A000080C40000000120320000E600806C00000D
-:107A1000000107880008E000CBCC9793FFFC259479
-:107A20000020F02F280004A000029496FF5CF027AD
-:107A30002800F48200002514005AF4AB2800072027
-:107A4000001A2514005A852A000077A9001E77BC69
-:107A5000FFE5C5287FC07529FFF075AD001E75AC28
-:107A6000FFE52314001E7619001EF53B2800F48460
-:107A7000E0007630FFE594A2001CF504E004849653
-:107A8000FF5C952200208716FFE006A40002751512
-:107A9000001E7528FFE59516FF547495001E74A40A
-:107AA000FFE59496FF9C7515001E7528FFE5951659
-:107AB000FF947495001E8516FF5C74A4FFE59496F0
-:107AC000FF8C8496FF54C7385FC07738FFF0F72BE0
-:107AD0002800871A00008516FF9CC73867C07738D2
-:107AE000FFF0F737280006B400028716FFE42314DE
-:107AF000001A7619001E7630FFE5C7384FC0773878
-:107B0000FFF0F7372800871A000006B400028496B9
-:107B1000FF94C73867C07738FFF0F737280006B4FE
-:107B200000028716FFE8231400167619001E76302F
-:107B3000FFE5C73857C07738FFF0F7372800871AB6
-:107B4000000006B40002C73867C07738FFF0F73787
-:107B5000280006B400028716FFEC231400127619E1
-:107B6000001E7630FFE5C7384FC07738FFF0F73793
-:107B70002800871A000006B400028516FF8CC7385B
-:107B800067C07738FFF0F73728008716FFF006B494
-:107B90000002C73857C07738FFF0F7372800F48263
-:107BA0000002F4A328002514005A852A000077A9B2
-:107BB000001E77BCFFE5C5287FC07529FFF00720B0
-:107BC0000018F53B28009416FFAC07880008E00079
-:107BD000CBCC9793FFFC261400382494005A84A63B
-:107BE000000077A5001E77BCFFE5C4A47FC074A584
-:107BF000FFF005A0000206AC000223940036751DBC
-:107C0000001E7528FFE50720001AF4B3280076311E
-:107C1000001E7630FFE59516FF547495001E74A47F
-:107C2000FFE59496FF5C7515001E7528FFE5951617
-:107C3000FF7C7495001E8516FFC474A4FFE594961E
-:107C4000FF74852A00342494005A9516FF8484A674
-:107C5000000077A5001E77BCFFE5C4A47FC074A513
-:107C6000FFF02514005AF4AF2800852A000077A9F8
-:107C7000001E77BCFFE5C5287FC07529FFF08496FC
-:107C8000FFC4F53B280084A600108516FFC494A20B
-:107C9000001C852A00147495001E74A4FFE59496B8
-:107CA000FF6C952200208716FFC88516FF54C73841
-:107CB00067C07738FFF0F72F2800871E00008496F2
-:107CC000FF5CC73857C07738FFF0F737280006B495
-:107CD00000028716FFCC23940032761D001E7630FA
-:107CE000FFE58516FF7CC7384FC07738FFF0F737C0
-:107CF0002800871E000006B40002C73867C0773826
-:107D0000FFF0F737280006B400028716FFD023944F
-:107D1000002E761D001E7630FFE5C73857C0773835
-:107D2000FFF0F7372800871E000006B40002849693
-:107D3000FF748516FF6CC73867C07738FFF0F737D8
-:107D4000280006B400028716FFD42394002A761D6B
-:107D5000001E7630FFE5C7384FC07738FFF0F737A1
-:107D60002800871E000006B40002C73867C07738B5
-:107D7000FFF0F73728008716FFD806B40002C7388F
-:107D800057C07738FFF0F7372800F4820002F4A3D9
-:107D90002800072000182514007A852A000077A9FA
-:107DA000001E77BCFFE5C5287FC07529FFF08496CB
-:107DB000FFC4F53B28008726000400000001203A9C
-:107DC0000024F7044F58E6007EF99416FF54C720AC
-:107DD0007200F6846E508626002C7738FFFA251440
-:107DE000005A842A000077A9001E77BCFFE5C42052
-:107DF0007FC07421FFF04739000086B61DDC77395B
-:107E00000002C0326A00468C0001D6800A68203623
-:107E10000000F6864098E6007EC0C3B86800C584BE
-:107E2000000086A60024F704E000F6020000C03639
-:107E30007200E6007E540324002486A60028F7047E
-:107E4000E00400000001C0367200E6007E582032D7
-:107E50000000F602000120320000E6007E6500000E
-:107E60000001F5820000869A0000F704E00000009F
-:107E70000001C0367200E2007EA0F6020000C036AB
-:107E80007200E6007EA820320000869A0004F70403
-:107E9000E00400000001C0367200E2007EA920323A
-:107EA0000000F602000120320000E6007EB9202E1C
-:107EB0000000F5820001202E0000E6007EC50000D3
-:107EC0000001F4020001F7044F58F41F28008496C3
-:107ED000FF548516FFC4F686409AC724720077388F
-:107EE000FFFA862A00304739000077390002C73888
-:107EF0006800E0007F4CF63B28008496FF54F606AD
-:107F00004098C72472007738FFFAC6B8000046B51B
-:107F1000000076B50002C6B46000F5020001F53736
-:107F200028004739000077390002C73860002494E0
-:107F3000005A84A6000077A5001E77BCFFE5C4A404
-:107F40007FC074A5FFF007380002F4BB2800F704D7
-:107F50004F588516FF548496FFACC6A8720076B4BD
-:107F6000FFFA0624001AF6B32800C72472007738F7
-:107F7000FFFA06A8001AF7372800473900009713C0
-:107F8000FFFC0724001C9713FFFCF5044F5C000066
-:107F900000019513FFFC07880008E0012340979338
-:107FA000FFFCF7044F588496FF5400000001C724DB
-:107FB00072007738FFFA473900009713FFFC072457
-:107FC000001C9713FFFCF5044F5C000000019513A3
-:107FD000FFFC07880008E00123409793FFFC078817
-:107FE0000008E00078D89793FFFCF6846E500000FC
-:107FF000000187361DDC00000001073800019736BC
-:108000001DDC87361DDCF0054084F486E000949387
-:10801000FFFC07880008E000D5A09793FFFCF4055B
-:108020004084F7046E50F005425C873A1DDCF6860A
-:108030002C28F7053B64F7042D38F5063A4CF50576
-:10804000424406380001F6052D3877390002F482E3
-:10805000001C20320044E6008060B4BA6802F005DB
-:108060002D38F50635ECE000808CF50542302032E5
-:108070000001E60080C40000000107880008E0005D
-:10808000789C9793FFFCF4863560F4854230F506C2
-:1080900042449513FFFC07880008E0011F489793AE
-:1080A000FFFCE00080C400000001F704429876B1B4
-:1080B000001E76B4FFE5C7386FC07739FFF0073888
-:1080C0000001F73328008796FFFC8296FFF8021420
-:1080D0000000013C0000000000019293FFFC0290B0
-:1080E0000008F58642449593FFFC07880008E001EC
-:1080F00020E49793FFFC20220000E600816100004D
-:108100000001F704425400000001203A0000EE0094
-:108110008129F606425007880008E00072AC979368
-:10812000FFFCE000816000000001F704425076B1DE
-:10813000001E76B4FFE5F5820006F5854254C73887
-:108140006FC07739FFF007380001F7332800078840
-:108150000008E000734C9793FFFCF586381CF5850A
-:1081600042448796FFFC8296FFF802140000013C0F
-:108170000000000000019293FFFC02900008221012
-:108180000058F7044250F686425076B5001E76B489
-:10819000FFE5F6046F34C7386FC086B2000C77393C
-:1081A000FFF0C0367200E6008250F4820000C50481
-:1081B000000086B20010F704E000C5A40000C0363D
-:1081C0007200E60081E40430001086B20014F70467
-:1081D000E00400000001C0367200E60081E8202EB5
-:1081E0000000F5820001202E0000E60081F500006D
-:1081F0000001F502000086A20000F704E000000084
-:108200000001C0367200E2008230F6020000C03683
-:108210007200E60082382032000086A20004F704D3
-:10822000E00400000001C0367200E2008239203212
-:108230000000F602000120320000E6008249202AF8
-:108240000000F5020001202A0000E60082592026E5
-:108250000000F482000120260000E6008760000094
-:10826000000107880008E000CBCC9793FFFC0720B3
-:108270000002F03B2800F7044F58F4053BB006A07D
-:108280000014C72072007738FFFAF737280006A0DD
-:108290000016F7372800F3020001F32328000788AF
-:1082A0000008E000CBCC9793FFFC26140020F033AD
-:1082B000280004A00002F0272800F3020000239405
-:1082C000002AF31F28000720001A2394002A839E07
-:1082D0000000779D001E77BCFFE5C39C7FC0739DA7
-:1082E000FFF07631001E7630FFE506A4000275151A
-:1082F000001EF3BB2800F304E0007528FFE593227D
-:10830000001CF384E0042314001E9316FFA4759947
-:10831000001E75ACFFE57315001E7318FFE593167C
-:10832000FFCC8316FFA493A200208716FFE073956D
-:10833000001E739CFFE59396FFAC7395001E739C23
-:10834000FFE5C73867C07738FFF0F7272800871A9E
-:1083500000009396FFC4C7385FC07738FFF0F73747
-:10836000280006B400028716FFE42394001A9396AF
-:10837000FFA4761D001E7630FFE5C73857C077385A
-:10838000FFF0F7372800871E000006B40002C73848
-:1083900067C07738FFF0F737280006B40002871669
-:1083A000FFE8231400169316FFA47619001E839687
-:1083B000FFAC7630FFE5C7383FC07738FFF0F737BE
-:1083C0002800871A000006B40002C73867C0773853
-:1083D000FFF0F737280006B400028716FFEC2314DD
-:1083E00000129316FFA47619001E8396FFCC7630F8
-:1083F000FFE5C7383FC07738FFF0F7372800871A06
-:10840000000006B40002C73867C07738FFF0F737BE
-:1084100028008716FFF08316FFC406B40002C73891
-:1084200037C07738FFF0F7372800F3820002F3A354
-:1084300028002314002A831A00007799001E77BCB5
-:10844000FFE5C3187FC07319FFF007200018F33B46
-:1084500028009416FFDC07880008E000CBCC979337
-:10846000FFFC072000022394002A839E0000779DD2
-:10847000001E77BCFFE5C39C7FC0739DFFF0248086
-:1084800000070520000AF3BB280020260007EE00A5
-:1084900084E00628000E86B200007731001E77388F
-:1084A000FFE575B1001E75ACFFE50528000204A4C8
-:1084B0000001C6B477C076B5FFF0F702FF00C6B47E
-:1084C0007400F6B3280087320000F30200FFC738BB
-:1084D0005FC07739FFF0C7383400E0008488F73395
-:1084E000280005200026862A000076A9001EF584B3
-:1084F0004F5876B4FFE58396FFDCF30200FF941635
-:10850000FFBCC71C5A007738FFFAC6306FC07631FF
-:10851000FFF047390000C7383400F682FF00C6304C
-:108520006C00C7386000F6843B6CF72B2800C5A0B0
-:108530005A0075ACFFFA8316FFDC07340001F7051B
-:108540003B6C0720003AF6BB280007200036F03BC2
-:108550002800F3820003F3A328000718001AF5BBD4
-:10856000280007880008E000CBCC9793FFFC072089
-:108570000002F03B2800248000070520000A202686
-:108580000007EE0085D40628000E86B20000773181
-:10859000001E7738FFE575B1001E75ACFFE50528B4
-:1085A000000204A40001C6B477C076B5FFF0F7025C
-:1085B000FF00C6B47400F6B3280087320000F382CF
-:1085C00000FFC7385FC07739FFF0C7383C00E000D4
-:1085D000857CF733280005A00026862E000076ADA6
-:1085E000001E76B4FFE5C520000024000007F3025A
-:1085F00000019316FFA4F7044F588396FFBC248014
-:10860000000EC71C72007738FFFAC6306FC0763193
-:10861000FFF047390000F68200FFC7386C00F68291
-:10862000FF00C6306C00C7386000F6843B6CF72F43
-:10863000280007340001F7053B6C0728003AF6BB19
-:10864000280007280036F03B2800F3020003F32B34
-:10865000280020220007EE008694C6284800063035
-:1086600000268732000076B1001E76B4FFE504A430
-:108670000002042000018396FFA4C7386FC0773939
-:10868000FFF0F682FF00C7386C00C71C7000E000E6
-:108690008650F73328000628002686B2000077317E
-:1086A000001E7738FFE5C6B477C076B5FFF0F70255
-:1086B000FF00C6B47400F6B328009513FFFCF30462
-:1086C0003BB0000000019313FFFC9516FFB4078830
-:1086D0000008E000D42C9793FFFC8516FFB4F0054A
-:1086E000407C8396FFBC23000007F3054258F70443
-:1086F0004250F606425076B1001E76B4FFE5F3060E
-:108700003934F3054244F5054074F3854260F38241
-:108710000006F3854254C7386FC07739FFF0F684FE
-:108720002D3807380001F733280006340001F6051C
-:108730002D38F7062C2876B50002F382001C203273
-:108740000044E600874CB3B67002F0052D38F306FE
-:1087500042449313FFFC07880008E0011F489793E9
-:10876000FFFC8796FFFC8296FFF802140000013C94
-:108770000000000000019293FFFC0290000822100C
-:108780000048F38642449393FFFC07880008E00109
-:1087900020E49793FFFC20220000E60089ED000012
-:1087A0000001F704425400000001203A0000EE00EE
-:1087B00087C90000000107880008E000734C979308
-:1087C000FFFCE00089EC0000000107880008E000E1
-:1087D000CBCC9793FFFC26140020F033280005A093
-:1087E0000002F02F2800F382000024940022F3A757
-:1087F000280004A0001A9496FFD423940022839E9C
-:108800000000779D001E77BCFFE5C39C7FC0739D71
-:10881000FFF07631001E7630FFE506AC000223142F
-:10882000001E7519001EF3A72800F484E0007528C7
-:10883000FFE594A2001CF384E0047495001E74A468
-:10884000FFE59496FFB47495001E74A4FFE594961A
-:10885000FFCC8496FFB493A200208716FFE07395A7
-:10886000001E739CFFE59396FFBC7395001E739CDE
-:10887000FFE59396FFC48396FFBCC73867C077387F
-:10888000FFF0F72F2800F5844F58871A0000C5A085
-:108890005A0075ACFFFAC73857C07738FFF0F73782
-:1088A000280006B400028716FFE42314001A761984
-:1088B000001E7630FFE545AD0000C7384FC0773861
-:1088C000FFF0F7372800871A000006B400028496EC
-:1088D000FFCCC73867C07738FFF0F737280006B4F9
-:1088E00000028716FFE8231400167619001E763062
-:1088F000FFE5C7383FC07738FFF0F7372800871A01
-:10890000000006B40002C73867C07738FFF0F737B9
-:10891000280006B400028716FFEC23140012761913
-:10892000001E7630FFE5C7384FC07738FFF0F737C5
-:108930002800871A000006B400028396FFC4C738D7
-:1089400067C07738FFF0F73728008716FFF006B4C6
-:108950000002C7383FC07738FFF0F7372800F482AD
-:108960000002F4A328000420001823940022839E10
-:108970000000779D001E77BCFFE5C39C7FC0739D00
-:10898000FFF08496FFD4F3A32800F3820001F3A73D
-:1089900028009593FFFCF486E0009493FFFCF38499
-:1089A0004F5C000000019393FFFC07880008E00182
-:1089B00023409793FFFC07880008E00078D897933E
-:1089C000FFFCF4863678F4854244F0054084F68452
-:1089D0004F5CF70200649736000090360004F702FF
-:1089E0000001F7054084F38635ECF3854230879625
-:1089F000FFFC8296FFF802140000013C000000001A
-:108A000000019293FFFC0290000822100090F704EE
-:108A10004260F502000005B80018F6044258000054
-:108A2000000120320007EE008A70C7306000C738AE
-:108A300058000738000E86BA00007739001E7738D4
-:108A4000FFE5C6B477C076B5FFF0F70200FFC6B405
-:108A50007400C0365200470C0001D7000A70203A5B
-:108A60000000E6008A7107300001E0008A18F7056F
-:108A70004258F40442580000000120220007EE0092
-:108A80008D9424940036F604426025140038239413
-:108A90000020063000028732000076B1001E76B456
-:108AA000FFE50630000275B1001EC7386FC0773889
-:108AB000FFF0F72B28008732000075ACFFE5C738C0
-:108AC0005FC07738FFF0F727280024940034063081
-:108AD00000028732000076B1001E76B4FFE5C73889
-:108AE0006FC07738FFF0F727280024940032063053
-:108AF00000028732000076B1001E76B4FFE5C73869
-:108B00006FC07738FFF0F727280024940030063034
-:108B100000028732000076B1001E76B4FFE5C73848
-:108B20006FC07738FFF0F72728002494002E063016
-:108B300000028732000076B1001E76B4FFE5C73828
-:108B40006FC07738FFF0F72728002494002C0630F8
-:108B500000028732000076B1001E76B4FFE5C73808
-:108B60006FC07738FFF0F72728002494002A0630DA
-:108B700000028732000076B1001E76B4FFE5C738E8
-:108B80006FC07738FFF0F7272800063000028732E1
-:108B90000000249400287631001E7630FFE5C738A7
-:108BA00067C07738FFF0F72728009413FFFC951370
-:108BB000FFFC9396FF7C9393FFFC07880008E0007E
-:108BC000D0DC9793FFFCF60442602494007E2514C9
-:108BD000008023940068063000028732000076B1DE
-:108BE000001E76B4FFE50630000275B1001EC738DE
-:108BF0006FC07738FFF0F72B28008732000075AC84
-:108C0000FFE5C7385FC07738FFF0F72728002494C6
-:108C1000007C063000028732000076B1001E76B478
-:108C2000FFE5C7386FC07738FFF0F7272800249496
-:108C3000007A063000028732000076B1001E76B45A
-:108C4000FFE5C7386FC07738FFF0F7272800249476
-:108C50000078063000028732000076B1001E76B43C
-:108C6000FFE5C7386FC07738FFF0F7272800249456
-:108C70000076063000028732000076B1001E76B41E
-:108C8000FFE5C7386FC07738FFF0F7272800249436
-:108C90000074063000028732000076B1001E76B400
-:108CA000FFE5C7386FC07738FFF0F7272800249416
-:108CB0000072063000028732000076B1001E76B4E2
-:108CC000FFE5C7386FC07738FFF0F7272800063078
-:108CD000000287320000249400707631001E763046
-:108CE000FFE5C73867C07738FFF0F72728009513EE
-:108CF000FFFC9396FF749393FFFC07880008E00045
-:108D0000D2589793FFFC8396FF7400000001939361
-:108D1000FFFCF704425823940050C70072009713D9
-:108D2000FFFC9396FF6C9393FFFC07880008E0001C
-:108D3000CF249793FFFC8396FF6CF6864250939363
-:108D4000FFFCF384425876B5001E9393FFFCF704B2
-:108D5000425076B4FFE5C7386FC07739FFF09713FC
-:108D6000FFFC8396FF7C000000019393FFFC0788C3
-:108D70000008E000F3389793FFFC20220000E60093
-:108D80008D9500000001F7044258000000010738EB
-:108D90000001F7054258F704425800000001203A4C
-:108DA0000007EE008DD4F3821770F7042D38F68695
-:108DB0002C2806380001F6052D3877390002F38299
-:108DC000001C20320044E6008DF4B3BA6802E000D3
-:108DD0008DF4F0052D389393FFFCF382001B9393E1
-:108DE000FFFCF38642449393FFFC07880008E001F0
-:108DF0001EC09793FFFC8796FFFC8296FFF8021433
-:108E00000000013C0000000000019293FFFC029072
-:108E1000000822100088F7044250F686425076B5CA
-:108E2000001EF3846F3476B4FFE59396FFC4C73811
-:108E30006FC0869E000C7739FFF0C0367200E600E6
-:108E40008E65F60642A0F70442A076B1001E76B405
-:108E5000FFE5C7386FC07739FFF007380001E00041
-:108E600094E4F7332800F604426024940036851613
-:108E7000FFC423940038063000028732000076B128
-:108E8000001E76B4FFE5852A001C0630000275B18D
-:108E9000001EC7386FC07738FFF09516FFBCF71F6C
-:108EA00028008732000075ACFFE58516FFC4C7387F
-:108EB0005FC07738FFF0F72728002494003406308D
-:108EC00000028732000076B1001E76B4FFE5C73895
-:108ED0006FC07738FFF0F72728002494003206305F
-:108EE00000028732000076B1001E76B4FFE5C73875
-:108EF0006FC07738FFF0F727280024940030063041
-:108F000000028732000076B1001E76B4FFE5C73854
-:108F10006FC07738FFF0F72728002494002E063022
-:108F200000028732000076B1001E76B4FFE5C73834
-:108F30006FC07738FFF0F72728002494002C063004
-:108F400000028732000076B1001E76B4FFE5C73814
-:108F50006FC07738FFF0F72728002494002A0630E6
-:108F600000028732000076B1001E76B4FFE5C738F4
-:108F70006FC07738FFF0F7272800063000028732ED
-:108F80000000249400287631001E7630FFE5C738B3
-:108F900067C07738FFF0F7272800872A00200000F5
-:108FA00000019713FFFC9393FFFC271400209713F5
-:108FB000FFFC07880008E000D0DC9793FFFC839655
-:108FC000FFC400000001871E001000000001203ACD
-:108FD0000000E6008FF0F6820000871E00140000FB
-:108FE0000001203A0000E6008FF420360000F682EF
-:108FF000000120360000E6009041000000018516C7
-:10900000FFC400000001052800109516FFB4951359
-:10901000FFFC07880008E00072509793FFFC8396DE
-:10902000FFB4271400209393FFFC9713FFFC0788DD
-:109030000008E000F9349793FFFCE00094E400009E
-:1090400000018516FFBC00000001202A0000E60098
-:1090500094BC0000000107880008E000CBCC979387
-:10906000FFFCF502000023940062F51F28007595AF
-:10907000001E75ACFFE50620000206B000022314B6
-:10908000001E7399001E739CFFE59396FF7475157F
-:10909000001E7528FFE59516FF7C7395001E739CD6
-:1090A000FFE59396FF8C8516FFC47395001E93967B
-:1090B000FF84852A0034239400629516FFACF033B8
-:1090C00028000520001A9516FF94839E0000779DC6
-:1090D000001E77BCFFE5C39C7FC0739DFFF07495B5
-:1090E000001EF3AB28008516FFC474A4FFE5852A93
-:1090F00000108396FFC49522001C839E00148516E1
-:10910000FF8493A200208716FFE07528FFE59516DF
-:10911000FF84F3844F588516FF74C7385FC07738D3
-:10912000FFF0F7332800871A00009396FFA4C022AF
-:109130003A008396FF7CC73857C07738FFF0F7377F
-:10914000280006B400028716FFE42314001A7619DB
-:10915000001E7630FFE5C7384FC07738FFF0F7378D
-:109160002800871A000006B40002C73867C07738A5
-:10917000FFF0F737280006B400028716FFE8231433
-:1091800000167619001E7630FFE5C7383FC07738E5
-:10919000FFF0F7372800871A000006B40002851692
-:1091A000FF8C8396FF84C73867C07738FFF0F737A6
-:1091B000280006B400028716FFEC2314001276196B
-:1091C000001E7630FFE5C73857C07738FFF0F73715
-:1091D0002800871A000006B40002C73867C0773835
-:1091E000FFF0F73728008716FFF006B40002C738F3
-:1091F0003FC07738FFF0F7372800F5020002F5236B
-:10920000280023940052839E0000779D001E77BCA7
-:10921000FFE5C39C7FC0739DFFF003200018E600AC
-:109220009230F39B2800F7044270E000929CF6060F
-:1092300042728516FFC40000000186AA00200000CB
-:10924000000107340007203A000EE2009294C73470
-:109250006800F5844260F38200FFC72C7000073875
-:10926000002686BA00009716FF747739001E7738FB
-:10927000FFE5C6B477C076B5FFF0C6B43C00203633
-:109280000000470C0001D7000A70203A0000E600F9
-:1092900092C900000001F7044274F606427476B1E8
-:1092A000001E76B4FFE5C7386FC07739FFF0073886
-:1092B0000001F733280007880008E000789C9793A6
-:1092C000FFFCE00094E4000000018516FFA48396F3
-:1092D000FF74C720520074B8FFFAC6240000871E2E
-:1092E0000000769D001E76B4FFE5C5AC520075AC5B
-:1092F000FFFA46310000F50200FFC6305400C738BF
-:109300006FC07739FFF0F682FF00C7386C00C630B7
-:109310007000F61F28008396FF948516FFC4F59F02
-:109320002800872A000400000001203A0024E600FB
-:109330009469F6864098F7046E50862A002CC6A4DD
-:10934000000023940062849E0000779D001E77BC7D
-:10935000FFE5C4A47FC074A5FFF046B50000873ABE
-:109360001DDC76B50002C0327200470C0001D70048
-:109370000A70203A0000F7064098E6009434C3349F
-:109380007000C584000086AA0024F704E000F602FD
-:109390000000C036720005280024E60093C495162C
-:1093A000FF748396FFC400000001869E0028F70426
-:1093B000E00400000001C0367200E60093C82032CD
-:1093C0000000F602000120320000E60093D5000004
-:1093D0000001F58200008516FF74F704E00086AAFC
-:1093E000000000000001C0367200E2009414F60292
-:1093F0000000C0367200E600941C2032000086AAED
-:109400000004F704E00400000001C0367200E2002E
-:10941000941D20320000F602000120320000E60018
-:10942000942D202E0000F5820001202E0000E60081
-:10943000943900000001F4820001F7044F58F49BB6
-:1094400028008396FFC4F686409AC72072007738BA
-:10945000FFFA861E00304739000077390002C7380E
-:109460006800E00094E4F63B2800472500007739C7
-:109470000002C7386800F5020001F53B28000738F4
-:10948000000223940062839E0000779D001E77BC3B
-:10949000FFE5C39C7FC0739DFFF025140062F3BB02
-:1094A0002800852A000077A9001E77BCFFE5C528A3
-:1094B0007FC07529FFF0E00094E4F51B2800839637
-:1094C000FFBC00000001201E0001E60094E4000043
-:1094D000000107880008E000789C9793FFFCF506E0
-:1094E0003560F50542308796FFFC8296FFF802143E
-:1094F0000000013C0000000000019293FFFC02907C
-:109500000008F50642449513FFFC07880008E001B7
-:1095100020E49793FFFC20220000E60096890000DB
-:109520000001F68442540000000120360000EE00E5
-:10953000958DF5864250F7044250762D001E763008
-:10954000FFE526B40001F685425425000007F50525
-:109550004258F6842D38C73867C07739FFF007388E
-:109560000001F72F280006340001F6052D38F70614
-:109570002C2876B50002F502001C20320044E600DB
-:109580009688B5367002E0009688F0052D38F5040F
-:109590004260000000019513FFFC07880008E0000E
-:1095A000B2849793FFFCF6844F5800000001073403
-:1095B0000040C0227200E60095ECF6064276F70401
-:1095C000427476B1001E76B4FFE5C7386FC07739B4
-:1095D000FFF007380001F733280007880008E00093
-:1095E000789C9793FFFCE000968800000001F70448
-:1095F000426000000001C0227200E60096240000D4
-:1096000000019713FFFCF5043BB000000001951327
-:10961000FFFC07880008E000D42C9793FFFCE000D3
-:10962000964000000001C0226A00E600967100002A
-:1096300000019713FFFC07880008E000CC609793B7
-:10964000FFFCF704407C000000010738000197137D
-:10965000FFFCF5044074000000019513FFFC07882F
-:109660000008E000BEF89793FFFCE0009688000039
-:109670000001F5044074000000019513FFFC078809
-:109680000008E000C1B49793FFFC8796FFFC829628
-:10969000FFF802140000013C00000000000192935A
-:1096A000FFFC0290000822100070F6046F34F704EB
-:1096B000426486B2000400000001C0367200E60079
-:1096C0009B1806B0000287360000F404407C76B593
-:1096D000001E76B4FFE5C7386FC07739FFF0C03A97
-:1096E0004200E6009B1824940036F604407423944C
-:1096F0000038063000028732000076B1001E76B4D2
-:10970000FFE50630000275B1001EC7386FC077381C
-:10971000FFF0F71F28008732000075ACFFE5C7385F
-:109720005FC07738FFF0F727280024940034063014
-:1097300000028732000076B1001E76B4FFE5C7381C
-:109740006FC07738FFF0F7272800249400320630E6
-:1097500000028732000076B1001E76B4FFE5C738FC
-:109760006FC07738FFF0F7272800249400300630C8
-:1097700000028732000076B1001E76B4FFE5C738DC
-:109780006FC07738FFF0F72728002494002E0630AA
-:1097900000028732000076B1001E76B4FFE5C738BC
-:1097A0006FC07738FFF0F72728002494002C06308C
-:1097B00000028732000076B1001E76B4FFE5C7389C
-:1097C0006FC07738FFF0F72728002494002A06306E
-:1097D00000028732000076B1001E76B4FFE5C7387C
-:1097E0006FC07738FFF0F727280006300002873275
-:1097F0000000249400287631001E7630FFE5C7383B
-:1098000067C07738FFF0F72728009413FFFC939385
-:10981000FFFC271400209713FFFC07880008E000D6
-:10982000D0DC9793FFFC07880008E000CBCC97932F
-:10983000FFFCF50440749416FFC407200002F03BBF
-:10984000280024800007F40200FF8396FFC49516C9
-:10985000FFBC031C000A20260007EE0098A806188B
-:10986000000E86B200007731001E7738FFE575B133
-:10987000001E75ACFFE503180002C6B477C076B5CC
-:10988000FFF0F702FF00C6B47400F6B32800873279
-:10989000000004A40001C7385FC07739FFF0C73863
-:1098A0004400E0009854F73328008516FFC47495EF
-:1098B000001E74A4FFE58396FFC42314001E7419D0
-:1098C000001E7420FFE5052800269516FF8C85AA4A
-:1098D000000076A9001E76B4FFE5039C0002939673
-:1098E000FFB4061C00027395001E739CFFE593965F
-:1098F000FFAC7395001E739CFFE59396FF9C8396C7
-:10990000FFBC7515001E7528FFE59516FF947515AB
-:10991000001E7528FFE59516FFA48516FFC4C5AC8B
-:109920006FC075ADFFF0F5054260F5044F58F68243
-:1099300000FFC71C52007738FFFA47390000C738CC
-:109940006C00F682FF00C5AC6C00C73858008396E7
-:10995000FF8CF5843B6C8516FFB4F71F2800871633
-:10996000FFE006AC0001F6853B6C8396FFC4C73868
-:109970004FC07738FFF0F72B2800F5044F58871AAF
-:109980000000C01E5200C73847C07738FFF0F733D9
-:109990002800063000028716FFE42314001A769987
-:1099A000001E8396FF9476B4FFE5C7383FC0773832
-:1099B000FFF0F7332800871A000006300002C7388E
-:1099C0006FC07738FFF0F7332800063000028716A3
-:1099D000FFE8231400167699001E76B4FFE585167D
-:1099E000FFAC8396FFA4C73857C07738FFF0F73332
-:1099F0002800871A0000063000028516FF9CC73831
-:109A00006FC07738FFF0F733280006300002871662
-:109A1000FFEC231400127699001E76B4FFE5C738D8
-:109A20003FC07738FFF0F7332800871A0000063070
-:109A300000028396FFC4C7386FC07738FFF0F73352
-:109A400028008716FFF006300002C73857C0773865
-:109A5000FFF0F7332800071C003AF5BB2800071C6D
-:109A60000036F03B2800F5020003E6009AA4F51F3B
-:109A70002800F7044278F606427876B1001E76B4E4
-:109A8000FFE5C7386FC07739FFF007380001F733BB
-:109A9000280007880008E000789C9793FFFCE0000E
-:109AA0009B1800000001F38642449393FFFC078853
-:109AB0000008E0011F489793FFFC25000007F5050B
-:109AC0004258F7044250F606425076B1001E76B472
-:109AD000FFE5F3820006F3854254F5063934F505B7
-:109AE0004244C7386FC07739FFF0F6842D38073805
-:109AF0000001F733280006340001F6052D38F7067B
-:109B00002C2876B50002F382001C20320044E600C7
-:109B10009B18B3B67002F0052D388796FFFC82962D
-:109B2000FFF802140000013C0000000000019293C5
-:109B3000FFFC0290000822100078F38642449393C1
-:109B4000FFFC07880008E00120E49793FFFC202237
-:109B50000000E6009E4100000001F70442540000AE
-:109B60000001203A0000EE009D8524940036F604A2
-:109B7000407425140038063000028732000076B1A8
-:109B8000001E76B4FFE50630000275B1001EC7382E
-:109B90006FC07738FFF0F72B28008732000075ACD4
-:109BA000FFE5C7385FC07738FFF0F7272800249417
-:109BB0000034063000028732000076B1001E76B411
-:109BC000FFE5C7386FC07738FFF0F72728002494E7
-:109BD0000032063000028732000076B1001E76B4F3
-:109BE000FFE5C7386FC07738FFF0F72728002494C7
-:109BF0000030063000028732000076B1001E76B4D5
-:109C0000FFE5C7386FC07738FFF0F72728002494A6
-:109C1000002E063000028732000076B1001E76B4B6
-:109C2000FFE5C7386FC07738FFF0F7272800249486
-:109C3000002C063000028732000076B1001E76B498
-:109C4000FFE5C7386FC07738FFF0F7272800249466
-:109C5000002A063000028732000076B1001E76B47A
-:109C6000FFE5C7386FC07738FFF0F72728000630C8
-:109C7000000287320000249400287631001E7630DE
-:109C8000FFE5C73867C07738FFF0F7272800F3846F
-:109C9000407C000000019393FFFC9513FFFC23948C
-:109CA00000209396FF949393FFFC07880008E00040
-:109CB000D0DC9793FFFC8396FF9400000001939300
-:109CC000FFFC239400689396FF8C9393FFFC078816
-:109CD0000008E000D2589793FFFC8396FF8C0000A9
-:109CE00000019393FFFC9013FFFC23940050939684
-:109CF000FF849393FFFC07880008E000CF2497932C
-:109D0000FFFC8702FF3400000001F7054264F38482
-:109D1000407C000000019393FFFC9713FFFC8396A7
-:109D2000FF84000000019393FFFC8396FF940000E2
-:109D300000019393FFFC07880008E000F7C89793A1
-:109D4000FFFC20220000E6009D5DF3821770F704FF
-:109D500042540000000127380001F7054254939354
-:109D6000FFFCF382001B9393FFFCF3864244939322
-:109D7000FFFC07880008E0011EC09793FFFCE0008D
-:109D80009E4000000001F504407CF4844074C72824
-:109D90005000C724700005B8002686AE0000772D5D
-:109DA000001E7738FFE5C6B477C077B40008703E70
-:109DB000FFE8470C0001D7000A70203A0000F704C2
-:109DC0004F58E6009DFDF60200FFF7044278F606C4
-:109DD000427A76B1001E76B4FFE5C7386FC0773996
-:109DE000FFF007380001F733280007880008E0007B
-:109DF000789C9793FFFCE0009E400000000186AE37
-:109E00000000772D001E7738FFE5C6B477C076B521
-:109E1000FFF0F7020001C7386400F602FF00C6B485
-:109E20006400C7386800F72F28000728000197133F
-:109E3000FFFC9493FFFC07880008E000BEF89793AE
-:109E4000FFFC8796FFFC8296FFF802140000013C9D
-:109E50000000000000019293FFFC02900008221015
-:109E600000D8F38642449393FFFC07880008E00182
-:109E700020E49793FFFC20220000E600A2C9000026
-:109E80000001F704425400000001203A0000EE00F7
-:109E9000A03524940036F6044074251400380630AA
-:109EA00000028732000076B1001E76B4FFE506306E
-:109EB000000275B1001EC7386FC07738FFF0F72B6E
-:109EC00028008732000075ACFFE5C7385FC07738DF
-:109ED000FFF0F72728002494003406300002873270
-:109EE000000076B1001E76B4FFE5C7386FC0773842
-:109EF000FFF0F72728002494003206300002873252
-:109F0000000076B1001E76B4FFE5C7386FC0773821
-:109F1000FFF0F72728002494003006300002873233
-:109F2000000076B1001E76B4FFE5C7386FC0773801
-:109F3000FFF0F72728002494002E06300002873215
-:109F4000000076B1001E76B4FFE5C7386FC07738E1
-:109F5000FFF0F72728002494002C063000028732F7
-:109F6000000076B1001E76B4FFE5C7386FC07738C1
-:109F7000FFF0F72728002494002A063000028732D9
-:109F8000000076B1001E76B4FFE5C7386FC07738A1
-:109F9000FFF0F727280006300002873200002494E3
-:109FA00000287631001E7630FFE5C73867C0773865
-:109FB000FFF0F7272800F384407C00000001939312
-:109FC000FFFC9513FFFC239400209396FF4C939382
-:109FD000FFFC07880008E000D0DC9793FFFC839625
-:109FE000FF4C000000019393FFFC239400509396D4
-:109FF000FF449393FFFC07880008E000D258979332
-:10A00000FFFC8702FF3400000001F7054264F3847F
-:10A01000407C000000019393FFFC9713FFFC8396A4
-:10A02000FF44000000019393FFFC8396FF4CE00087
-:10A03000A2809393FFFCF404407CF6044074F38206
-:10A040000000C7204000C73070000738002686BADD
-:10A0500000007739001E7738FFE5C6B477C077B4C3
-:10A060000008703EFFE8470C0001D7000A70203A54
-:10A070000000E600A0AD9396FF3CF70442A0F60670
-:10A0800042A076B1001E76B4FFE5C7386FC07739BD
-:10A09000FFF007380001F733280007880008E000C8
-:10A0A000789C9793FFFCE000A2C8000000010630F6
-:10A0B00000028732000076B1001E76B4FFE52494DA
-:10A0C000007E25140080239400680630000275B1DC
-:10A0D000001EC7386FC07738FFF0F72B2800873293
-:10A0E000000075ACFFE5C7385FC07738FFF0F72791
-:10A0F00028002494007C063000028732000076B1EC
-:10A10000001E76B4FFE5C7386FC07738FFF0F72739
-:10A1100028002494007A063000028732000076B1CD
-:10A12000001E76B4FFE5C7386FC07738FFF0F72719
-:10A13000280024940078063000028732000076B1AF
-:10A14000001E76B4FFE5C7386FC07738FFF0F727F9
-:10A15000280024940076063000028732000076B191
-:10A16000001E76B4FFE5C7386FC07738FFF0F727D9
-:10A17000280024940074063000028732000076B173
-:10A18000001E76B4FFE5C7386FC07738FFF0F727B9
-:10A19000280024940072063000028732000076B155
-:10A1A000001E76B4FFE5C7386FC07738FFF0F72799
-:10A1B00028000630000287320000249400707631B7
-:10A1C000001E7630FFE5C73867C07738FFF0F72705
-:10A1D00028009413FFFC9513FFFC9396FF34939390
-:10A1E000FFFC07880008E000D0DC9793FFFC839613
-:10A1F000FF34000000019393FFFC239400B093967A
-:10A20000FF2C9393FFFC07880008E000D258979337
-:10A21000FFFC8396FF2C000000019393FFFC8396C4
-:10A22000FF3C000000019393FFFC23940098939659
-:10A23000FF249393FFFC07880008E000CF24979346
-:10A24000FFFCF3820006F38542548702FF34F38655
-:10A2500038A8F3854244F7054264F384407C00004B
-:10A2600000019393FFFC9713FFFC8396FF240000EB
-:10A2700000019393FFFC8396FF3400000001939349
-:10A28000FFFC07880008E000F7C89793FFFC202236
-:10A290000000E600A2A9F3821770F7044254000000
-:10A2A000000127380001F70542549393FFFCF38225
-:10A2B000001B9393FFFCF38642449393FFFC0788B3
-:10A2C0000008E0011EC09793FFFC8796FFFC829672
-:10A2D000FFF802140000013C00000000000192930E
-:10A2E000FFFC02900008F6046F34F704426486B263
-:10A2F000000400000001C0367200E600A3AC06B006
-:10A3000000028736000076B5001E76B4FFE5C73838
-:10A310006FC0F684407C7739FFF0C03A6A00E600EF
-:10A32000A3ACC7346800F5844074F6044F580000AD
-:10A330000001C62C62007630FFFAC5AC700005AC97
-:10A34000002686AE0000772D001E7738FFE54631E7
-:10A350000000C6B477C076B5FFF0F70200FFC63044
-:10A360007400F702FF00C6B47400C6306800F62F10
-:10A370002800F50642449513FFFC07880008E00119
-:10A380001F489793FFFCF704407C0000000107384A
-:10A3900000019713FFFCF5044074000000019513C1
-:10A3A000FFFC07880008E000BEF89793FFFC879643
-:10A3B000FFFC8296FFF802140000013C0000000040
-:10A3C00000019293FFFC0290000822100080F70425
-:10A3D000425800000001203A0000E600A3F4203AB1
-:10A3E0000007F5020001F5054258F7044258000045
-:10A3F0000001203A0007EE00A6F02394001EF604A8
-:10A40000426023140066F4844078063000028732EC
-:10A41000000076B1001E76B4FFE504A400027425A6
-:10A42000001E7420FFE5063000027531001E7528FD
-:10A43000FFE59516FF7CC7386FC07738FFF025140D
-:10A4400000209516FF94F72B280087320000851610
-:10A45000FF7C05A40002C73857C07738FFF0F71F0C
-:10A4600028002394001C063000028732000076B1D9
-:10A47000001E76B4FFE525140050C7386FC077384A
-:10A48000FFF0F71F28002394001A063000028732DD
-:10A49000000076B1001E76B4FFE5C7386FC077388C
-:10A4A000FFF0F71F280023940018063000028732BF
-:10A4B000000076B1001E76B4FFE5C7386FC077386C
-:10A4C000FFF0F71F280023940016063000028732A1
-:10A4D000000076B1001E76B4FFE5C7386FC077384C
-:10A4E000FFF0F71F28002394001406300002873283
-:10A4F000000076B1001E76B4FFE5C7386FC077382C
-:10A50000FFF0F71F28002394001206300002873264
-:10A51000000076B1001E76B4FFE5C7386FC077380B
-:10A52000FFF0F71F28002394001006300002873246
-:10A53000000076AD001E7631001E7630FFE5C7388C
-:10A5400067C07738FFF0F71F280087260000261421
-:10A550000068C73847C07738FFF0F7332800872EE8
-:10A56000000076B4FFE5C7386FC07738FFF0F71BFF
-:10A5700028002314006405AC0002872E000076AD8D
-:10A58000001E76B4FFE5C7386FC07738FFF0F71BC1
-:10A5900028002314006205AC0002872E000076AD6F
-:10A5A000001E76B4FFE5C7386FC07738FFF0F71BA1
-:10A5B00028002314006005AC0002872E000076AD51
-:10A5C000001E76B4FFE5C7386FC07738FFF0F71B81
-:10A5D00028002314005E05AC0002872E000076AD33
-:10A5E000001E76B4FFE5C7386FC07738FFF0F71B61
-:10A5F00028002314005C05AC0002872E000076AD15
-:10A60000001E76B4FFE5C7386FC07738FFF0F71B40
-:10A6100028002314005A05AC0002872E000076ADF6
-:10A62000001E76B4FFE5C7386FC07738FFF0F71B20
-:10A63000280005AC0002872E00002314005875ADD9
-:10A64000001E75ACFFE5C7385FC07738FFF0F71B19
-:10A6500028009613FFFC9516FF8C9513FFFC0788C6
-:10A660000008E000D2589793FFFC8516FF8C00008D
-:10A6700000019513FFFCF5044258000000019513FA
-:10A68000FFFC251400389516FF849513FFFC0788FE
-:10A690000008E000CF249793FFFCF5044258000027
-:10A6A00000019513FFFCF5044264000000019513BE
-:10A6B000FFFC8516FF84000000019513FFFC851642
-:10A6C000FF94000000019513FFFC07880008E000DC
-:10A6D000F7C89793FFFC20220000E600A6F10000D7
-:10A6E0000001F70442580000000107380001F70597
-:10A6F0004258F704425800000001203A0007EE00DB
-:10A70000A730F5021770F7042D38F6862C28063886
-:10A710000001F6052D3877390002F502001C2032C1
-:10A720000044E600A750B53A6802E000A750F005E3
-:10A730002D389513FFFCF502001B9513FFFCF50661
-:10A7400042449513FFFC07880008E0011EC0979360
-:10A75000FFFC8796FFFC8296FFF802140000013C84
-:10A760000000000000019293FFFC029000082210FC
-:10A770000030F6046F34F704426486B2000400002F
-:10A780000001C0367200E600A9F007300002863AE8
-:10A790000000F5820000F684407C7739001E77388F
-:10A7A000FFE5C63077C0F7044074C6B46800763160
-:10A7B000FFF0C60062009616FFF4C738680007383D
-:10A7C000002686BA00007739001E7738FFE5C6B448
-:10A7D00077C077B40008703EFFE8470C0001D7004F
-:10A7E0000A70203A0000E600A834F60200FF831643
-:10A7F000FFF48396FFF4F7044078C6983800C73812
-:10A8000068000738002686BA00007739001E7738BE
-:10A81000FFE5C6B477C076B5FFF0C6B46400C036B5
-:10A820005A00470C0001D7000A70203A0000E600E9
-:10A83000A83D202E0000F5820001202E0000E60039
-:10A84000A875F606427CF704427C76B1001E76B409
-:10A85000FFE5C7386FC07739FFF007380001F733DD
-:10A86000280007880008E000789C9793FFFCE00030
-:10A87000A9F000000001F3044260000000019313FE
-:10A88000FFFC07880008E000CC609793FFFCF4040D
-:10A890004078F7044F58F5044074F384407CF30487
-:10A8A000407CC62072007630FFFAC59C3000C5A8F7
-:10A8B000580005AC002686AE000074AD001E74A4DE
-:10A8C000FFE573AD001E739CFFE59396FFD4C5288A
-:10A8D00072007528FFFA8316FFF48396FFF4463161
-:10A8E000000045290000C7183800C420700004206B
-:10A8F00000267321001EC6B44FC076B5FFF0F48267
-:10A9000000FFC6304C00F382FF00C6B43C00C630E6
-:10A910006800F62F2800872E00007318FFE59316B5
-:10A92000FFCC8316FFD48396FFF4C5284C00C738AC
-:10A9300037C07739FFF0769D001076B5FFF8C7383D
-:10A940004C00C6B47000F6AF28008722000076A144
-:10A95000001E8316FFCCF382FF0076B4FFE5C738F4
-:10A9600037C07739FFF0C7383C00C5287000F523A1
-:10A97000280087220000F304407CC7386FC0773975
-:10A98000FFF0731900109316FFEC7399FFF8C738A6
-:10A990004C00C71C70009716FFDC23140022831A9A
-:10A9A00000007799001E77BCFFE5C3187FC07319BC
-:10A9B000FFF0F3232800F38642449393FFFC0788BB
-:10A9C0000008E0011F489793FFFCF704407C00005B
-:10A9D0000001073800019713FFFCF30440740000E6
-:10A9E00000019313FFFC07880008E000BEF897936E
-:10A9F000FFFC8796FFFC8296FFF802140000013CE2
-:10AA00000000000000019293FFFC02900008221059
-:10AA10000098F30642449313FFFC07880008E00106
-:10AA200020E49793FFFC20220000E600AEE5000042
-:10AA30000001F704425400000001203A0000EE003B
-:10AA4000AD8927380001F70542542394001EF6040F
-:10AA50004260249400669496FF64F3044078249442
-:10AA600000209496FF94063000028732000076B1F1
-:10AA7000001E76B4FFE5031800029316FF747419E4
-:10AA8000001E7420FFE505980002063000027531B3
-:10AA9000001EC7386FC07738FFF0F72728008732CD
-:10AAA00000007528FFE5C73857C07738FFF0F71F5B
-:10AAB00028002394001C063000028732000076B183
-:10AAC000001E76B4FFE58516FF64C7386FC077387F
-:10AAD000FFF0F71F28002394001A06300002873287
-:10AAE000000076B1001E76B4FFE5C7386FC0773836
-:10AAF000FFF0F71F28002394001806300002873269
-:10AB0000000076B1001E76B4FFE5C7386FC0773815
-:10AB1000FFF0F71F2800239400160630000287324A
-:10AB2000000076B1001E76B4FFE5C7386FC07738F5
-:10AB3000FFF0F71F2800239400140630000287322C
-:10AB4000000076B1001E76B4FFE5C7386FC07738D5
-:10AB5000FFF0F71F2800239400120630000287320E
-:10AB6000000076B1001E76B4FFE5C7386FC07738B5
-:10AB7000FFF0F71F280023940010063000028732F0
-:10AB8000000076AD001E7631001E7630FFE5C73836
-:10AB900067C07738FFF0F71F2800871A00002614D7
-:10ABA0000068C73847C07738FFF0F7332800872E92
-:10ABB000000076B4FFE5C7386FC07738FFF0F72B99
-:10ABC0002800231400649316FF6405AC0002872E4E
-:10ABD000000076AD001E76B4FFE5C7386FC0773849
-:10ABE000FFF0F71B2800249400629496FF6405ACE4
-:10ABF0000002872E000076AD001E76B4FFE5C73850
-:10AC00006FC07738FFF0F7272800251400609516ED
-:10AC1000FF6405AC0002872E000076AD001E76B4FE
-:10AC2000FFE5C7386FC07738FFF0F72B28002314F3
-:10AC3000005E9316FF6405AC0002872E000076AD1F
-:10AC4000001E76B4FFE5C7386FC07738FFF0F71BFA
-:10AC500028002494005C9496FF6405AC0002872EC3
-:10AC6000000076AD001E76B4FFE5C7386FC07738B8
-:10AC7000FFF0F72728002514005A9516FF6405AC4D
-:10AC80000002872E000076AD001E76B4FFE5249406
-:10AC90000050C7386FC07738FFF0F72B2800231417
-:10ACA000005805AC0002872E00009316FF6475ADB6
-:10ACB000001E75ACFFE5C7385FC07738FFF0F71BA3
-:10ACC00028009613FFFC9496FF8C9493FFFC078852
-:10ACD0000008E000D2589793FFFC8516FF8C2314E0
-:10ACE00000389513FFFC278000079793FFFC93160D
-:10ACF000FF849313FFFC07880008E000CF2497939C
-:10AD0000FFFC27800007F7854258278000079793AC
-:10AD1000FFFCF4844264000000019493FFFC85165C
-:10AD2000FF84000000019513FFFC8316FF940000D0
-:10AD300000019313FFFC07880008E000F7C8979311
-:10AD4000FFFC20220000E600AD5D00000001F704DA
-:10AD500042580000000107380001F7054258F70487
-:10AD60002D38F6862C2806380001F6052D3877395F
-:10AD70000002F482001C20320044E600AEE4B4BAC3
-:10AD80006802E000AEE4F0052D38F7044078F58461
-:10AD90004F580738001686BA0000F4063B90773902
-:10ADA000001E7738FFE5C6B477C076B4FFF076357D
-:10ADB0000006A72E6002C52C600076A9001E76B49E
-:10ADC000FFE5C7386FC07739FFF077390003C73820
-:10ADD00040000738000286BA00007739001E773835
-:10ADE000FFE5C6B477C073B7FFF0EE00AE55951619
-:10ADF000FF64A72E600276A9001E76B4FFE5C7386F
-:10AE00006FC07739FFF077390003C738400086BA42
-:10AE10000004231400887739001E7738FFE5C6B494
-:10AE200077C076B5FFF0A6AA6802771D0003C73881
-:10AE3000680027380008853A000484BA0000000042
-:10AE40000001951A0004949A00008596FF7CE000AA
-:10AE5000AE78000000018496FF64A72E600276A5FC
-:10AE6000001E76B4FFE5C7386FC07739FFF0773939
-:10AE70000003C738400085BA00048516FF64F60653
-:10AE80003B90872A000076A9001E76B4FFE5C738FC
-:10AE90006FC07739FFF077390003A6BA6002201E31
-:10AEA0000000C73860007739001E7738FFE5C6B468
-:10AEB00077C0EE00AEC976B5FFF08316FF780000CC
-:10AEC00000017719FFF0C6B868008496FF6400009F
-:10AED0000001C72468009713FFFC07880008C12CF5
-:10AEE00000009793FFFC8796FFFC8296FFF8021400
-:10AEF0000000013C0000000000019293FFFC029062
-:10AF0000000822100010F704408400000001203ADD
-:10AF10000000E600AF3CF60642B8F70442B876B14E
-:10AF2000001E76B4FFE5F3063678F3054244C738D1
-:10AF30006FC07739FFF007380001F7332800F704B6
-:10AF40004F5CF384425C833A0004C43800009316DB
-:10AF5000FFEC771D0001C73838007739000204B8CC
-:10AF6000000C8316FFEC00000001C01E3200EC0054
-:10AF7000B070C5040000A6A24802F704E000F58204
-:10AF80000000C0367200E600AFA8C620480086B2B6
-:10AF90000004F704E00400000001C0367200E6007F
-:10AFA000AFAC202E0000F5820001202E0000E6004C
-:10AFB000AFB900000001F502000086B20000F704FE
-:10AFC000E00000000001C0367200E200AFF4F5823C
-:10AFD0000000C0367200E600AFFC202E000086B2F2
-:10AFE0000004F704E00400000001C0367200E20033
-:10AFF000AFFD202E0000F5820001202E0000E600AB
-:10B00000B00D202A0000F5020001202A0000E60011
-:10B01000B05900000001F7047AD000000001203A86
-:10B020000000E600B064C7204800873A0008F60632
-:10B03000409877390002A6BA6002C73860007739B5
-:10B04000001E7738FFE5C6B477C076B5FFF020362E
-:10B050000000E600B0640000000104A4000CE00061
-:10B06000AF60039C00018316FFEC00000001C01ECE
-:10B070003200EC00B104F3063678F6844F5C771D9D
-:10B080000001C7383800773900020738000CC6B411
-:10B09000700087360008F6844F5877390006C6B42A
-:10B0A00070009693FFFC9396FFF407880008E00079
-:10B0B000FA989793FFFC20220000F684426C839656
-:10B0C000FFF4470C0001D7000A70C71C7000F70599
-:10B0D000425C06B40001F7042D38F685426CF68612
-:10B0E0002C2806380001F6052D3877390002F302C6
-:10B0F000001C20320044E600B108B33A6802E000C8
-:10B10000B108F0052D38F30542448796FFFC82967E
-:10B11000FFF802140000013C0000000000019293BF
-:10B12000FFFC02900008F4020000C5A00000F682B7
-:10B130000770F7046E5020360000E600B16D063847
-:10B14000001C8732000000000001C4207000C022F3
-:10B150007200E400B15D0000000105AC000126B4FE
-:10B16000000120360000E600B14006300004C42093
-:10B170005800C0225A00E400B18100000001042000
-:10B1800000018796FFFC8296FFF802140000013C44
-:10B190000000000000019293FFFC02900008078865
-:10B1A0000008E00078D89793FFFC07880008E000CB
-:10B1B000B11C9793FFFCF704409400000001C022EB
-:10B1C0007200E600B1EDF4054090F7046E50000007
-:10B1D000000186BA1DDCF582000106B4000196BAB2
-:10B1E0001DDC873A1DDCE000B1F0F5857AD0F00572
-:10B1F0007AD0F5844090F0054084F5854094F5863A
-:10B20000E0009593FFFC07880008E000D5A0979325
-:10B21000FFFCF7046E50F405408485BA1DDC000085
-:10B220000001F5853B64F584E000F005425C95BAC9
-:10B230000010F584E004F6862C2895BA0014F70473
-:10B240002D38F5863A4CF585424406380001F6055E
-:10B250002D3877390002F582001C20320044E600C8
-:10B26000B268B5BA6802F0052D38F58635ECF5857B
-:10B2700042308796FFFC8296FFF802140008013CDA
-:10B280000000000000019293FFFC029000082210D1
-:10B2900000C8F30200009316FF94248000089496DF
-:10B2A000FF84238000078316FF940000000193169B
-:10B2B000FF54201E0007EE00B564C71C38008496BA
-:10B2C000000000000001C72470000738002686BA7D
-:10B2D0000000F5844F587739001E7738FFE5C6B473
-:10B2E00077C076B5FFF0F70200FFC6B67400E6003F
-:10B2F000B32D20360001E600B32D77350006A6BA3F
-:10B300005802C73858007639001E7630FFE5C6B4BB
-:10B3100067C076B5FFF020360002E600B331C6B84C
-:10B320000000C72C0000E000B330C6B80000F6846F
-:10B330004F58F7044F58C5340000C02A7200E60089
-:10B34000B55D00000001F6843BBCF30200009316DB
-:10B35000FF3C0428001CF7043BB800000001C03685
-:10B360007200EC00B4409696FFAC77350001C73808
-:10B37000680077390002F4863BB4C63848000630CE
-:10B38000000CC30400009316FF3486B20000872A25
-:10B39000001C8596FF3CC0367200E600B3C0202E2C
-:10B3A000000086B20004872A002000000001C03699
-:10B3B0007200E600B3C0202E0000F5820001202EAE
-:10B3C0000000E600B3D100000001F4820000949672
-:10B3D000FF3486B200008722000000000001C03662
-:10B3E0007200E200B40CF5820000C0367200E60084
-:10B3F000B414202E000086B200048722000400004E
-:10B400000001C0367200E200B415202E0000F58263
-:10B410000001202E0000E600B42500000001F30228
-:10B4200000019316FF348496FF34000000012026AB
-:10B430000000E600B44000000001F3020001931692
-:10B44000FF3C8496FF3C0000000120260000E6003F
-:10B45000B481F60200018716FFACF3063BB476B95F
-:10B460000001C6B4700076B50002C6B4300006B460
-:10B47000001486B600009716FFB0E000B4F496966C
-:10B48000FFB4271400549713FFFC9413FFFCF486B9
-:10B490003BB49493FFFC9396FF4C9516FF440788AA
-:10B4A0000008E00125689793FFFC8396FF4C851602
-:10B4B000FF4420220000E600B4F1F60200018716E6
-:10B4C000FFACF3063BB476B90001C6B4700076B5A4
-:10B4D0000002C6B4300006B4001486B60000971609
-:10B4E000FFB09696FFB4F7053BBCE000B4F82032FD
-:10B4F0000000F602000020320000E600B52D2714FF
-:10B5000000088496FF5400000001C72470008316D1
-:10B51000FFB404A400049496FF548496FF94933AD5
-:10B52000FFC004A40001E000B5549496FF94831674
-:10B53000FF5400000001C7187000F4844F5803182E
-:10B5400000049316FF548316FF9494BAFFC00318A7
-:10B5500000019316FF949516FF3C9396FF8CE00034
-:10B56000B2B0039C00018496FF94000000012026E5
-:10B570000000E600B584F3820001F4044F58E000B7
-:10B58000BEE4000000018316FFB88496FF9400001B
-:10B590000001C01E4A00EC00B5CC9316FF7C269437
-:10B5A00000048736FFC08316FF7C00000001C03A0C
-:10B5B0003200E600BB98039C00018496FF940000D3
-:10B5C0000001C01E4A00EC00B5A106B40004F4045A
-:10B5D0004F588316FF7C00000001C01A4200E600AD
-:10B5E000BA2DF48200009496FF7423800007201E79
-:10B5F0000007EE00B748C71C38008316FF7C000028
-:10B600000001C71870000738002686BA0000F584CC
-:10B610004F587739001E7738FFE5C6B477C076B546
-:10B62000FFF0F70200FFC6B67400E600B6692036E8
-:10B630000001E600B66977350006A6BA5802C73899
-:10B6400058007639001E7630FFE5C6B467C076B57F
-:10B65000FFF020360002E600B66DC6B80000C72C29
-:10B660000000E000B66CC6B80000F6844F58F7043E
-:10B670004F58C5340000C02A7200E600B741C584A7
-:10B6800000008496FF7486AA001C8316FF3CF60215
-:10B69000000004A400019496FF74871A001C04A8FB
-:10B6A000001C9496FF34C0367200E600B6CC041835
-:10B6B000001C86AA0020871A002000000001C03666
-:10B6C0007200E600B6D020320000F60200012032FF
-:10B6D0000000E600B6DD00000001F58200008316E0
-:10B6E000FF3487220000869A000000000001C03667
-:10B6F0007200E200B71CF6020000C0367200E600DD
-:10B70000B72420320000869A00048722000400003B
-:10B710000001C0367200E200B72520320000F602B8
-:10B72000000120320000E600B735202E0000F5822F
-:10B730000001202E0000E600B740000000019396B3
-:10B74000FF84E000B5EC039C00018496FF7483162F
-:10B75000FF9400000001C0263200E600BB982300E1
-:10B7600000088496FF8400000001C0263200E60035
-:10B77000BB99F6020000F684407CF7044074C6B41E
-:10B780006800C73868000738002686BA0000773995
-:10B79000001E7738FFE5C6B477C077B40008703E66
-:10B7A000FFE8470C0001D7000A70203A0000E600CD
-:10B7B000B804F58200FF8496FF848316FF8C000096
-:10B7C0000001C72432008496FF7CC7387000C7246C
-:10B7D00070000738002686BA00007739001E7738D7
-:10B7E000FFE5C6B477C076B5FFF0C6B45C00C036DE
-:10B7F0006200470C0001D7000A70203A0000E60002
-:10B80000B80D20320000F602000120320000E600F0
-:10B81000BB9823800007201E0007EE00B8C8C71C95
-:10B8200038008316000000000001C71870000738B8
-:10B83000002686BA0000F5844F587739001E773805
-:10B84000FFE5C6B477C076B5FFF0F70200FFC6B6D5
-:10B850007400E600B89120360001E600B891773513
-:10B860000006A6BA5802C73858007639001E76304E
-:10B87000FFE5C6B467C076B5FFF020360002E600EB
-:10B88000B895C6B80000C72C0000E000B894C6B850
-:10B890000000F6844F58F7044F58C5340000C02A02
-:10B8A0007200E600B8C1000000019513FFFC9396FA
-:10B8B000FF4C07880008E000CC609793FFFC83965C
-:10B8C000FF4CE000B814039C00018496FF848316AB
-:10B8D000FF8CF384407CF5044074C4A43200949639
-:10B8E000FF348316FF34C59C3800C5A8580005AC4A
-:10B8F000002686AE0000772D001E7738FFE5742DF8
-:10B90000001E7420FFE5739D0010739DFFF8C4A412
-:10B9100030009496FF3C8316FF7CC6B477C0C49871
-:10B9200048009496FF3C04A400269496FF3C73259F
-:10B93000001E7318FFE59316FF6C74A5001E949605
-:10B94000FF6474A4FFE59496FF648316FF7CF4847F
-:10B950004F5876B5FFF0C6184A007630FFFA4631E8
-:10B960000000F30200FFC6303400F482FF00C6B4CA
-:10B970004C00C6306800F62F2800872E0000831682
-:10B98000FF34C73847C07739FFF07319001093169A
-:10B99000FF347499FFF8F30200FFC7383400C7245E
-:10B9A00070009716FF34249400CA84A6000077A57F
-:10B9B000001E77BCFFE5C4A47FC074A5FFF083160A
-:10B9C000FF3CF4AF2800F4844F58871A0000C528C4
-:10B9D0004A007528FFFA8316FF6C45290000F4829F
-:10B9E00000FFC5284C008496FF3CC73837C0773924
-:10B9F000FFF0F302FF00C7383400C5287000F527B8
-:10BA00002800872600008316FF648416FF7CC73851
-:10BA100037C07739FFF0F48200FFC7384C00831637
-:10BA2000FF3CC39C7000E000BEE4F39B2800F704D9
-:10BA3000407CF6044074C7387000C7307000073887
-:10BA4000002686BA00007739001E7738FFE5C6B4B5
-:10BA500077C077B40008703EFFE8470C0001D700BC
-:10BA60000A70203A0000E600BA7D25800007E00059
-:10BA7000BEE404200040E000BAD8C42C0000C73067
-:10BA80004200849600007538FFFA0624000A202E32
-:10BA90000007EE00BAD40730000E86BA00007739EE
-:10BAA000001E7738FFE5C6B477C076B5FFF0F70221
-:10BAB00000FFC6B4740047290000C0367200470C6E
-:10BAC0000001203A0000E600BA7406300002E000EF
-:10BAD000BA8C05AC0001F402000807200007203AE8
-:10BAE000000EE200BBA4C5A0400083160000F504D0
-:10BAF000407CF48200FFF6044F58C598580005AC0E
-:10BB0000002686AE0000772D001E7738FFE5C618A8
-:10BB100062007630FFFA46310000C6304C00C6B4F1
-:10BB200077C076B5FFF0772900107739FFF8C6B4F3
-:10BB30004C00C7386800F72F2800F5844074C528EA
-:10BB40005000C5AC500005AC002686AE0000772D35
-:10BB5000001E7738FFE5752D001E7528FFE5C6B479
-:10BB600077C076B5FFF0F702FF00C6B47400C630A8
-:10BB70006800F62F2800872E000076A1001076B509
-:10BB8000FFF8C73857C07739FFF0C7384C00C6B444
-:10BB90007000E000BBF8F6AF2800F4044F58E00056
-:10BBA000BEE404200040F6044F5883160000F7045A
-:10BBB000407CF5844074C61862007630FFFAC738BE
-:10BBC0007000C5AC700005AC002686AE0000772D75
-:10BBD000001E7738FFE546310000C6B477C076B561
-:10BBE000FFF0F70200FFC6307400F702FF00C6B492
-:10BBF0007400C6306800F62F280023800007201E3E
-:10BC00000007EE00BEE0C71C38008496000000006C
-:10BC10000001C72470000738002686BA0000F584AA
-:10BC20004F587739001E7738FFE5C6B477C076B530
-:10BC3000FFF0F70200FFC6B67400E600BC792036BC
-:10BC40000001E600BC7977350006A6BA5802C7386D
-:10BC500058007639001E7630FFE5C6B467C076B569
-:10BC6000FFF020360002E600BC7DC6B80000C72CFD
-:10BC70000000E000BC7CC6B80000F6844F58F70412
-:10BC80004F58C5340000C02A7200E600BED906A88D
-:10BC9000001C83160000000000019313FFFC969324
-:10BCA000FFFCF4863BB49493FFFC9396FF4C9516EF
-:10BCB000FF449696FF4007880008E00123409793D1
-:10BCC000FFFCF3044F5CF48200009496FF5C8696C0
-:10BCD000FF408396FF4C8516FF449316FF34861A67
-:10BCE00000089696FF3C871A000400000001C0324D
-:10BCF0007200EC00BDB89616FF9C77310001C73882
-:10BD0000600077390002C63830000630000C86B279
-:10BD10000000872A001C8596FF5CC0367200E60092
-:10BD2000BD40C404000086B20004872A0020000041
-:10BD30000001C0367200E600BD44202E0000F582EE
-:10BD40000001202E0000E600BD5100000001F402B9
-:10BD500000008316FF3C86B20000871A0000000036
-:10BD60000001C0367200E200BD90F5820000C036CE
-:10BD70007200E600BD98202E000086B20004871AEB
-:10BD8000000400000001C0367200E200BD99202EC0
-:10BD90000000F5820001202E0000E600BDA920224F
-:10BDA0000000F402000120220000E600BDB80000FF
-:10BDB0000001F48200019496FF5C8316FF5C000092
-:10BDC0000001201A0000E600BDF9F6020001871606
-:10BDD000FF9C8496FF3476B90001C6B4700076B536
-:10BDE0000002C6B4480006B4001486B600009716D8
-:10BDF000FFA0E000BE709696FFA42714006497137E
-:10BE0000FFFC8316FF3C000000019313FFFC8496A7
-:10BE1000FF34000000019493FFFC9396FF4C9516AD
-:10BE2000FF4407880008E00125689793FFFC83968C
-:10BE3000FF4C8516FF4420220000E600BE71F6028A
-:10BE400000008716FF9C8316FF3476B90001C6B444
-:10BE5000700076B50002C6B4300006B4001486B691
-:10BE600000009716FFA09696FFA4971A0008F60206
-:10BE7000000120320000E600BE99F606429CF7045D
-:10BE8000429C76B1001E76B4FFE5C7386FC07739A3
-:10BE9000FFF007380001F7332800F7044F5800007F
-:10BEA0000001C72872007738FFFA4739000097135E
-:10BEB000FFFC0728001C9713FFFCF4844F5C000074
-:10BEC00000019493FFFC9396FF4C07880008E00163
-:10BED00023409793FFFC8396FF4CE000BBFC039C40
-:10BEE0000001841600008796FFFC8296FFF802147A
-:10BEF0000004013C0000000000019293FFFC02904E
-:10BF0000000822100060851600008616000406A8AE
-:10BF10000018C7306000C5B8680020320007EE0086
-:10BF2000BF64072C000E86BA00007739001E7738F0
-:10BF3000FFE5C6B477C076B5FFF0F70200FFC6B4E0
-:10BF4000740020360000470C0001D7000A70203A28
-:10BF50000000E600BF6105AC0002E000BF1806303B
-:10BF6000000120320007EE00C04C06A80016F505BF
-:10BF70004074F605407CF3020006F3054254961324
-:10BF8000FFFC052800029516FFC49513FFFC2394BF
-:10BF900000209396FFBC9393FFFC9616FFAC078896
-:10BFA0000008E000D0DC9793FFFC8496FFC42314C4
-:10BFB00000389493FFFC9316FFB49313FFFC07889B
-:10BFC0000008E000D2589793FFFC8702FF348616E2
-:10BFD000FFACF70542649613FFFC9713FFFC8396B2
-:10BFE000FFB4000000019393FFFC8496FFBC0000A7
-:10BFF00000019493FFFC07880008E000F7C89793BE
-:10C00000FFFC20220000E600C01DF3063AD8F7042A
-:10C0100042540000000127380001F7054254F3059F
-:10C020004244F38217709393FFFCF482001B9493B5
-:10C03000FFFCF30642449313FFFC07880008E0016D
-:10C040001EC09793FFFCE000C1A0000000018736EE
-:10C050000000F5844F58F4063B7076B5001E76B4A8
-:10C06000FFE5C7386FC07738FFF076390006A72E96
-:10C070006002C52C600076A9001E76B4FFE5C738C3
-:10C080006FC07739FFF077390003C73840000738B1
-:10C09000000286BA00007739001E7738FFE5C6B483
-:10C0A00077C076B7FFF0EE00C1159696FF9CA72EDD
-:10C0B000600276A9001E76B4FFE58396FF9CC73820
-:10C0C0006FC07739FFF077390003C738400086BA70
-:10C0D0000004249400607739001E7738FFE5C6B469
-:10C0E00077C076B5FFF0A6AA6802771D0003C738AF
-:10C0F00068002738000883BA0004833A0000000073
-:10C10000000193A60004932600008596FFA4E0009A
-:10C11000C13823000007A72E600276A9001E76B45E
-:10C12000FFE5C7386FC07739FFF077390003C738AC
-:10C13000400085BA0004230000079313FFFC872A00
-:10C14000000076A9001E76B4FFE58396FF9CF606F4
-:10C150003B70C7386FC07739FFF077390003A6BA54
-:10C160006002201E0000C73860007739001E773853
-:10C17000FFE5C6B477C0EE00C18D76B5FFF08496BA
-:10C18000FFA0000000017725FFF0C6B86800C728AF
-:10C1900068009713FFFC07880008C12C00009793E4
-:10C1A000FFFC8796FFFC8296FFF802140008013C12
-:10C1B0000000000000019293FFFC02900008221092
-:10C1C000007025000007202A0007EE00C3B8C7282A
-:10C1D00050008316000000000001C71870000738E7
-:10C1E000002686BA0000F5844F587739001E77384C
-:10C1F000FFE5C6B477C076B5FFF0F70200FFC6B61C
-:10C200007400E600C23D20360001E600C23D7735ED
-:10C210000006A6BA5802C73858007639001E763094
-:10C22000FFE5C6B467C076B5FFF020360002E60031
-:10C23000C24DC03A5A00E000C248C72C0000F704C3
-:10C240004F58F5844F5800000001C03A5A00E600EC
-:10C25000C3B1F4863B908396000000000001069C69
-:10C2600000168736000076B5001E76B4FFE5C738A5
-:10C270006FC07738FFF076390006A72E6002C52C14
-:10C28000600076A9001E76B4FFE5C7386FC0773925
-:10C29000FFF077390003C73848000738000286BA34
-:10C2A00000007739001E7738FFE5C6B477C076B74F
-:10C2B000FFF0EE00C3219696FF8CA72E600276A9B0
-:10C2C000001E76B4FFE58316FF8CC7386FC0773940
-:10C2D000FFF077390003C738480086BA0004249479
-:10C2E00000707739001E7738FFE5C6B477C076B5A1
-:10C2F000FFF0A6AA680277190003C738680027383C
-:10C30000000883BA0004833A00000000000193A6ED
-:10C310000004932600008616FF94E000C34400004A
-:10C320000001A72E600276A9001E76B4FFE5F30691
-:10C330003B90C7386FC07739FFF077390003C738B3
-:10C340003000863A0004872A000076A9001E76B4E1
-:10C35000FFE58396FF8CF4863B90C7386FC0773932
-:10C36000FFF077390003A6BA4802201E0000C73844
-:10C3700048007739001E7738FFE5C6B477C0EE0075
-:10C38000C39576B5FFF08316FF9000000001771982
-:10C39000FFF0C6B86800C72868009713FFFC07883D
-:10C3A0000008C13000009793FFFCE000C5C4000006
-:10C3B0000001E000C1C40528000183960000F4825A
-:10C3C0000006F4854254F60442602514001E23142E
-:10C3D00000209316FFACF3854078063000028732C8
-:10C3E000000076B1001E76B4FFE50630000275B19C
-:10C3F000001EC7386FC07738FFF0F71B2800873260
-:10C40000000075ACFFE5C7385FC07738FFF0F72B49
-:10C4100028002514001C063000028732000076B187
-:10C42000001E76B4FFE5C7386FC07738FFF0F72BF2
-:10C4300028002514001A063000028732000076B169
-:10C44000001E76B4FFE5C7386FC07738FFF0F72BD2
-:10C45000280025140018063000028732000076B14B
-:10C46000001E76B4FFE5C7386FC07738FFF0F72BB2
-:10C47000280025140016063000028732000076B12D
-:10C48000001E76B4FFE5C7386FC07738FFF0F72B92
-:10C49000280025140014063000028732000076B10F
-:10C4A000001E76B4FFE5C7386FC07738FFF0F72B72
-:10C4B000280025140012063000028732000076B1F1
-:10C4C000001E76B4FFE5C7386FC07738FFF0F72B52
-:10C4D0002800063000028732000025140010763153
-:10C4E000001E7630FFE5C73867C07738FFF0F72BBE
-:10C4F0002800071C00029713FFFC2394005093961A
-:10C50000FFA49393FFFC07880008E000D25897939C
-:10C51000FFFC8496FFA4231400389493FFFC27802B
-:10C5200000079793FFFC9316FF9C9313FFFC07886B
-:10C530000008E000CF249793FFFC8702FF34278098
-:10C540000007F7854258F705426427800007979354
-:10C55000FFFC9713FFFC8396FF9C00000001939360
-:10C56000FFFC8496FFAC000000019493FFFC078859
-:10C570000008E000F5F49793FFFC20220000E6009D
-:10C58000C59500000001F70442580000000107387B
-:10C590000001F7054258F7042D38F30639C0F305BA
-:10C5A0004244F6862C2806380001F6052D387739E6
-:10C5B0000002F382001C20320044E600C5C4B3BA76
-:10C5C0006802F0052D388796FFFC8296FFF802146A
-:10C5D0000004013C0000000000019293FFFC029067
-:10C5E000000825000007F7044074F6844F58F6044D
-:10C5F0004260C7386A0075B8FFFA0630000A202A80
-:10C600000007EE00C6480730000E86BA00007739F2
-:10C61000001E7738FFE5C6B477C076B5FFF0F702A5
-:10C6200000FFC6B47400472D0000C0367200470CEE
-:10C630000001203A0000E600C64CC3280000063086
-:10C640000002E000C5FC05280001F3020008C5183F
-:10C650003000F3844260F6044F58F704407CF484C1
-:10C660004074C51C50000528002685AA00007429C6
-:10C67000001E7420FFE5C61C62007630FFFAC6B8C3
-:10C680007000C4A4680004A4002676A5001E76B439
-:10C69000FFE5773900107739FFF846310000C5AC67
-:10C6A00047C075ADFFF0F40200FFC5AC4400C738C9
-:10C6B0005800F72B28008726000075A5001EC630FD
-:10C6C000440075ACFFE5C7386FC07739FFF0F682DC
-:10C6D000FF00C7386C00C6307000F6272800872698
-:10C6E00000007699001076B5FFF8C7385FC077393B
-:10C6F000FFF0C7384400C6B47000F6A72800939333
-:10C70000FFFCF3843BB0000000019393FFFC07881B
-:10C710000008E000D42C9793FFFCF704407C000055
-:10C720000001073800019713FFFCF38440740000F8
-:10C7300000019393FFFC07880008E000BEF8979380
-:10C74000FFFC8796FFFC8296FFF802140004013C70
-:10C750000000000000019293FFFC02900008879601
-:10C76000FFFC8296FFF802140008013C0000000064
-:10C7700000019293FFFC029000088796FFFC8296CE
-:10C78000FFF802140004013C000000000001929335
-:10C79000FFFC029000088796FFFC8296FFF80214C7
-:10C7A0000000013C0000000000019293FFFC029099
-:10C7B0000008F70642309713FFFCF7063560971321
-:10C7C000FFFC07880008E00014F49793FFFCF706CD
-:10C7D00042309713FFFCF70635EC9713FFFC0788F0
-:10C7E0000008E00014F49793FFFCF7064244971307
-:10C7F000FFFCF70636789713FFFC07880008E00077
-:10C8000014F49793FFFCF70642449713FFFCF706D6
-:10C8100037049713FFFC07880008E00014F497938F
-:10C82000FFFCF70642449713FFFCF7063790971377
-:10C83000FFFC07880008E00014F49793FFFCF7065C
-:10C8400042449713FFFCF706381C9713FFFC078838
-:10C850000008E00014F49793FFFCF7064244971396
-:10C86000FFFCF70638A89713FFFC07880008E000D4
-:10C8700014F49793FFFCF70642449713FFFCF70666
-:10C8800039349713FFFC07880008E00014F49793ED
-:10C89000FFFCF70642449713FFFCF70639C09713D5
-:10C8A000FFFC07880008E00014F49793FFFCF706EC
-:10C8B00042449713FFFCF7063A4C9713FFFC078896
-:10C8C0000008E00014F49793FFFCF7064244971326
-:10C8D000FFFCF7063AD89713FFFC07880008E00032
-:10C8E00014F49793FFFC8796FFFC8296FFF80214DE
-:10C8F0000000013C0000000000019293FFFC029048
-:10C90000000885960000F5063B90872E000076AD66
-:10C91000001E76B4FFE5C7386FC07739FFF077396E
-:10C920000003C73850000738000286BA0000773984
-:10C93000001E7738FFE5C6B477C07637FFF0EE000B
-:10C94000C99500000001872E000076AD001E76B468
-:10C95000FFE5C7386FC07739FFF077390003C73874
-:10C96000500086BA00047739001E7738FFE5C6B458
-:10C9700077C076B5FFF0A6AE680277310003C738FE
-:10C9800068002738000884BA0004843A0000E000F8
-:10C99000C9B4C5240000872E000076AD001E76B411
-:10C9A000FFE5C7386FC07739FFF077390003C73824
-:10C9B0005000853A0004872E000076AD001E76B444
-:10C9C000FFE520320000F6063B90C7386FC077398C
-:10C9D000FFF077390003A6BA6002C73860007739E4
-:10C9E000001E7738FFE5C6B477C0EE00C9F976B50A
-:10C9F000FFF07721FFF0C6B86800C72C68009713D6
-:10CA0000FFFC07880008C12800009793FFFC879669
-:10CA1000FFFC8296FFF802140004013C00000000B5
-:10CA200000019293FFFC0290000885960000F50635
-:10CA30003B70872E000076AD001E76B4FFE5C73848
-:10CA40006FC07739FFF077390003C73850000738D7
-:10CA5000000286BA00007739001E7738FFE5C6B4B9
-:10CA600077C07637FFF0EE00CABD00000001872EC8
-:10CA7000000076AD001E76B4FFE5C7386FC0773989
-:10CA8000FFF077390003C738500086BA00047739C1
-:10CA9000001E7738FFE5C6B477C076B5FFF0A6AEC6
-:10CAA000680277310003C73868002738000884BA65
-:10CAB0000004843A0000E000CADCC5240000872E90
-:10CAC000000076AD001E76B4FFE5C7386FC0773939
-:10CAD000FFF077390003C7385000853A0004839689
-:10CAE000000476AD001E76B4FFE52032000093937B
-:10CAF000FFFC872E0000F6063B70C7386FC0773901
-:10CB0000FFF077390003A6BA6002C73860007739B2
-:10CB1000001E7738FFE5C6B477C0EE00CB2976B5A6
-:10CB2000FFF07721FFF0C6B86800C72C68009713A4
-:10CB3000FFFC07880008C12800009793FFFC879638
-:10CB4000FFFC8296FFF802140008013C0000000080
-:10CB500000019293FFFC02900008F5044F58F58203
-:10CB6000000206280080202E0062EE00CB900730E5
-:10CB70000040F0332800C6B8520076B4FFFA063001
-:10CB80000014F6B32800C6380000E000CB6405AC02
-:10CB90000001F7044F580000000106B818D4F482D1
-:10CBA0000001F4B72800073818C0F03B2800F7064A
-:10CBB00042C0F4820002F4BB28008796FFFC8296F4
-:10CBC000FFF802140000013C0000000000019293F5
-:10CBD000FFFC02900008F68442C0F60642C077319E
-:10CBE000001E7738FFE575B1001EC6B477C076B475
-:10CBF000FFF0F7044F5876B50006C4386800872266
-:10CC0000001476A1001E76B4FFE5C7386FC07738F0
-:10CC1000FFF0F7332800F70442C075ACFFE5C738D2
-:10CC20005FC07738FFF0203A0001E600CC4CF606F2
-:10CC30004290F704429076B1001E76B4FFE5C73803
-:10CC40006FC07739FFF007380001F7332800879667
-:10CC5000FFFC8296FFF802140000013C0000000077
-:10CC600000019293FFFC0290000822100004851638
-:10CC70000000000000019513FFFC9516FFF40788E3
-:10CC80000008E000CD009793FFFC8516FFF42022FA
-:10CC90000000E600CCBCF58642C0F7044290F606E0
-:10CCA000429276B1001E76B4FFE5C7386FC077397F
-:10CCB000FFF007380001E000CCECF7332800F02B40
-:10CCC0002800F68442C0772D001E7738FFE506283D
-:10CCD0000014C6B477C076B4FFF0F7044F58F6B32B
-:10CCE0002800C72872007738FFFAF72F28008796A8
-:10CCF000FFFC8296FFF802140004013C00000000D3
-:10CD000000019293FFFC0290000886960000F70451
-:10CD10004F58F4020000C6B472007734FFFA273887
-:10CD20000002203A0061F702003FE200CD40C6B4A5
-:10CD3000740020360000E600CD4000000001F4023F
-:10CD400000018796FFFC8296FFF802140004013C64
-:10CD50000000000000019293FFFC0290000886167C
-:10CD600000008716000885960004C5307000C032A8
-:10CD70005200E600CDA10000000186B2000077312C
-:10CD8000001E7738FFE5C6B477C076B5FFE8F6AF8A
-:10CD9000680006300001C0325200E600CD7805ACD4
-:10CDA00000018796FFFC8296FFF80214000C013CFC
-:10CDB000000000000001000000009293FFFC0290C0
-:10CDC000000884960000841600048596000886A654
-:10CDD00000007725001E7738FFE5C6B477C07535AB
-:10CDE000FFF0202A0010E200CE0DF606428EF5027A
-:10CDF0000010F704428C76B1001E76B4FFE5C73808
-:10CE00006FC07739FFF007380001F7332800202E74
-:10CE10000001E600CE70202A0000EE00CE7107244B
-:10CE2000000225280001A5BA50028622000076A142
-:10CE3000001E76B4FFE5C73850007739001E7738FA
-:10CE4000FFE5C5AC77C0C6306FC07631FFF075AD79
-:10CE5000FFE8F68200FFF702F15475AD0002A72E3D
-:10CE60007002C6306C00C6307580F623280024207E
-:10CE7000000225A80001F302F24603A40002C4AC9C
-:10CE80003800252C0001202E0000EC00CF110000FE
-:10CE90000001E600CEA0C71C5000E000CEB4F602B0
-:10CEA0000000A69E50027739001E7738FFE5C6B411
-:10CEB00077C07635FFE886A600007725001E773814
-:10CEC000FFE52528000225AC0002C6B477C076B580
-:10CED000FFE877310004C738620077390001C738AE
-:10CEE0003000C6B46800C6B4700006B4000E8736C1
-:10CEF000000024A4000276B5001E76B4FFE5C73812
-:10CF00006FC07738FFF0F7232800E000CE8424209C
-:10CF100000028796FFFC8296FFF80214000C013C89
-:10CF20000000000000019293FFFC029000088616AA
-:10CF3000000883160004839600008732000076B153
-:10CF4000001E76B4FFE5059C0002749D001E74A4CB
-:10CF5000FFE5741D001E063000027531001EC73843
-:10CF60006FC07738FFF0F71F280087320000752860
-:10CF7000FFE5C73857C07738FFF0F72F280005AC1A
-:10CF80000002063000028732000076B1001E76B43F
-:10CF9000FFE5C7386FC07738FFF0F72F280005ACE2
-:10CFA0000002063000028732000076B1001E76B41F
-:10CFB000FFE5C7386FC07738FFF0F72F280005ACC2
-:10CFC0000002063000028732000076B1001E76B4FF
-:10CFD000FFE5C7386FC07738FFF0F72F280005ACA2
-:10CFE0000002063000028732000076B1001E76B4DF
-:10CFF000FFE5C7386FC07738FFF0F72F280005AC82
-:10D000000002063000028732000076B1001E76B4BE
-:10D01000FFE5C7386FC07738FFF0F72F280005AC61
-:10D020000002063000028732000076B1001E76B49E
-:10D03000FFE5C7386FC07738FFF0F72F28000630BC
-:10D0400000028732000005AC00027631001E763007
-:10D05000FFE5C73867C07738FFF0F72F2800871E35
-:10D0600000007420FFE5C7384FC07739FFF007385C
-:10D070000001F71F2800871E0000049C0002C7382B
-:10D0800047C07739FFF025380001202A0000EE0064
-:10D09000D0BD26280001A7266002C6A4600076B590
-:10D0A000001E76B4FFE5C5A45000C5300000C738A7
-:10D0B0006FC07739FFE8E000D088F72F6800071CC1
-:10D0C0000002F33B6800C41C00008796FFFC8296B8
-:10D0D000FFF80214000C013C0000000000019293D4
-:10D0E000FFFC0290000886160004841600008732B8
-:10D0F000000076B1001E76B4FFE505A0000274A121
-:10D10000001E74A4FFE5063000027531001EC7380A
-:10D110006FC07738FFF0F7232800873200007528AA
-:10D12000FFE5C73857C07738FFF0F72F280005AC68
-:10D130000002063000028732000076B1001E76B48D
-:10D14000FFE5C7386FC07738FFF0F72F280005AC30
-:10D150000002063000028732000076B1001E76B46D
-:10D16000FFE5C7386FC07738FFF0F72F280005AC10
-:10D170000002063000028732000076B1001E76B44D
-:10D18000FFE5C7386FC07738FFF0F72F280005ACF0
-:10D190000002063000028732000076B1001E76B42D
-:10D1A000FFE5C7386FC07738FFF0F72F280005ACD0
-:10D1B0000002063000028732000076B1001E76B40D
-:10D1C000FFE5C7386FC07738FFF0F72F280005ACB0
-:10D1D0000002063000028732000076B1001E76B4ED
-:10D1E000FFE5C7386FC07738FFF0F72F280005AC90
-:10D1F0000002063000028732000006A000027631ED
-:10D20000001E7630FFE5C73867C07738FFF0F72F8C
-:10D210002800872200007621001E85960008C73866
-:10D220004FC07739FFF0C6B47000F5B768008722A9
-:10D2300000007630FFE5C73867C07739FFF0073860
-:10D240000001F72328008796FFFC8296FFF802145E
-:10D25000000C013C0000000000019293FFFC0290D2
-:10D2600000082210002027140020F03B280084969C
-:10D270000004F502000086A600007625001E763028
-:10D28000FFE504240002C6B467C076B4FFF0F6BB25
-:10D2900028008726000076A5001E76B4FFE5C73873
-:10D2A0006FC07739FFF0C02A7200EC00D2F876A583
-:10D2B000001E8726000076B4FFE5062800012594AD
-:10D2C000001EC5AC5000C5300000C7386FC07739AC
-:10D2D000FFF0C7385200A6A27002C720700077394D
-:10D2E000001E7738FFE5C6B477C076B5FFE8C68084
-:10D2F0006A00E000D290F6AF68008716FFE076156E
-:10D30000001E7630FFE5839600002314001E7599F9
-:10D31000001E75ACFFE57515001E7528FFE57495B8
-:10D32000001E74A4FFE57415001E7420FFE5069C22
-:10D3300000027395001E9396FFDCC73867C0839682
-:10D3400000007738FFF0F71F28008396FFDC871A6C
-:10D350000000739CFFE59396FFDCC7385FC0773809
-:10D36000FFF0F737280006B400028716FFE4231405
-:10D37000001A7619001E7630FFE5C73857C0773897
-:10D38000FFF0F7372800871A000006B40002C738FC
-:10D3900067C07738FFF0F737280006B40002871619
-:10D3A000FFE8231400167619001E7630FFE5C73813
-:10D3B0004FC07738FFF0F7372800871A000006B40F
-:10D3C0000002C73867C07738FFF0F737280006B487
-:10D3D00000028716FFEC231400127619001E763027
-:10D3E000FFE5C73847C07738FFF0F7372800871ABE
-:10D3F000000006B4000284160000C73867C0773802
-:10D40000FFF0F73728008716FFF006B40002C73890
-:10D410003FC07738FFF0F73728008796FFFC8296E9
-:10D42000FFF802140008013C000000000001929384
-:10D43000FFFC029000088616000084160004F684A3
-:10D440004F5887320014033000147519001E7528D8
-:10D45000FFE5C3A06A00739CFFFA04A0001475A541
-:10D46000001EC6306A007630FFFAC73857C07738DA
-:10D47000FFF0F7272800F39B280007200016F63B53
-:10D4800028008722001475ACFFE5C7385FC07738E5
-:10D49000FFF077390006C6B4700006B40016F3B783
-:10D4A00028008796FFFC8296FFF802140008013CD2
-:10D4B0000000000000019293FFFC02900008861615
-:10D4C0000000F5844F5805300016872A000076A921
-:10D4D000001E76B4FFE5C7386FC07738FFF07739A4
-:10D4E0000006C42C7000C0226200E600D52906A008
-:10D4F000001687360000C6305A007630FFFA76B53F
-:10D50000001E76B4FFE5C7386FC07738FFF0773973
-:10D51000000676B8FFFAF6AB2800C72C7000073873
-:10D520000014E000D52CF63B2800C42C00008796A0
-:10D53000FFFC8296FFF802140004013C000000008A
-:10D5400000019293FFFC02900008F7064F844738D1
-:10D55000FFFCF7056F30F686505C46B4FFFCF6859D
-:10D560006E50F7066E7C4738FFFCF7056E540734A3
-:10D57000191CF7054F5CF70200649736191CF70277
-:10D5800000009736192006B4001CF6854F58879680
-:10D59000FFFC8296FFF802140000013C000000002E
-:10D5A00000019293FFFC0290000822100090F30209
-:10D5B000FFFFF3054F54F38200009396FFAC231452
-:10D5C00000209316FF9C239400389396FF948316B3
-:10D5D000FFACF7044F5CF382000C9396FF74931634
-:10D5E000FF8C873A0004000000019716FFA4831601
-:10D5F000FFAC8396FFA400000001C01A3A00EC00C3
-:10D60000DB78F30204BCF7044F5C8316FF74000060
-:10D610000001C7383000873A0008F6844F58773940
-:10D620000006C4B470009493FFFC9496FF7C0788B6
-:10D630000008E000CD009793FFFC8496FF7C202239
-:10D640000000E600D654C5040000F7044288E0005C
-:10D65000D87CF6064288F6044F5C83960000831659
-:10D66000FF74869E0000A7323002F5820000C036AB
-:10D670007200E600D694C6303000869E00048732E1
-:10D68000000400000001C0367200E600D698202E8B
-:10D690000000F5820001202E0000E600D6A5000063
-:10D6A0000001F50200008396000087320000869E8C
-:10D6B000000000000001C0367200E200D6E4F582EE
-:10D6C0000000C0367200E600D6EC202E0000869ED8
-:10D6D00000048732000400000001C0367200E2003E
-:10D6E000D6ED202E0000F5820001202E0000E6007D
-:10D6F000D6FD202A0000F5020001202A0000E600E5
-:10D70000D72804A400028316FFACF70642C883960C
-:10D71000FF8CF3054F54C71C7000F03B28000738FE
-:10D720000002E000DB50F03B28009496FF6C872657
-:10D73000000076A5001E76B4FFE58316FF6C839685
-:10D74000FF9C2494001E0618000275B1001E75ACE3
-:10D75000FFE5C7386FC07738FFF0F71F2800873222
-:10D760000000751D001E7528FFE5C7385FC07738BB
-:10D77000FFF0F72728002494001C063000028732AF
-:10D78000000076B1001E76B4FFE5C7386FC0773869
-:10D79000FFF0F72728002494001A06300002873291
-:10D7A000000076B1001E76B4FFE5C7386FC0773849
-:10D7B000FFF0F72728002494001806300002873273
-:10D7C000000076B1001E76B4FFE5C7386FC0773829
-:10D7D000FFF0F72728002494001606300002873255
-:10D7E000000076B1001E76B4FFE5C7386FC0773809
-:10D7F000FFF0F72728002494001406300002873237
-:10D80000000076B1001E76B4FFE5C7386FC07738E8
-:10D81000FFF0F72728002494001206300002873218
-:10D82000000076B1001E76B4FFE5C7386FC07738C8
-:10D83000FFF0F7272800063000028732000024940A
-:10D8400000107631001E7630FFE5C73867C07738A4
-:10D85000FFF0F72728008716FFE0F682FFFCC738A5
-:10D8600057C07739FFF007380003C4B86C00202692
-:10D870000010E200D89DF606428AF704428876B18D
-:10D88000001E76B4FFE5F4020000C7386FC0773998
-:10D89000FFF007380001E000DBA0F7332800831613
-:10D8A000FF6C251400368396FF94871A0000769942
-:10D8B000001E76B4FFE50618000275B1001EC738D9
-:10D8C0006FC07738FFF0F71F28008732000075AC73
-:10D8D000FFE5C7385FC07738FFF0F72B2800251425
-:10D8E0000034063000028732000076B1001E76B4A4
-:10D8F000FFE5C7386FC07738FFF0F72B28002514F5
-:10D900000032063000028732000076B1001E76B485
-:10D91000FFE5C7386FC07738FFF0F72B28002514D4
-:10D920000030063000028732000076B1001E76B467
-:10D93000FFE5C7386FC07738FFF0F72B28002514B4
-:10D94000002E063000028732000076B1001E76B449
-:10D95000FFE5C7386FC07738FFF0F72B2800251494
-:10D96000002C063000028732000076B1001E76B42B
-:10D97000FFE5C7386FC07738FFF0F72B2800251474
-:10D98000002A063000028732000076B1001E76B40D
-:10D99000FFE5C7386FC07738FFF0F72B2800251454
-:10D9A0000028063000028732000026A4000274A47A
-:10D9B000FFFF7631001E7630FFE5C73867C0773845
-:10D9C000FFF0F72B28009013FFFC8316FF8CF7065F
-:10D9D00042CCC7187000C73868009713FFFC9393B8
-:10D9E000FFFC9496FF7C07880008E000CDB8979371
-:10D9F000FFFC8396FF6C2414004E25140050831600
-:10DA0000FF8C8496FF7C871E0000769D001E76B4F6
-:10DA1000FFE5061C000275B1001E75ACFFE5C738B6
-:10DA20006FC07738FFF0F72B280087320000752988
-:10DA3000001E7528FFE5C7385FC07738FFF0F72371
-:10DA400028002414004C063000028732000076B112
-:10DA5000001E76B4FFE5C7386FC07738FFF0F723B4
-:10DA600028002414004A063000028732000076B1F4
-:10DA7000001E76B4FFE5C7386FC07738FFF0F72394
-:10DA8000280024140048063000028732000076B1D6
-:10DA9000001E76B4FFE5C7386FC07738FFF0F72374
-:10DAA000280024140046063000028732000076B1B8
-:10DAB000001E76B4FFE5C7386FC07738FFF0F72354
-:10DAC000280024140044063000028732000076B19A
-:10DAD000001E76B4FFE5C7386FC07738FFF0F72334
-:10DAE000280024140042063000028732000076B17C
-:10DAF000001E76B4FFE5C7386FC07738FFF0F72314
-:10DB000028000630000287320000241400407631DD
-:10DB1000001E7630FFE5C73867C07738FFF0F7237F
-:10DB200028008696FFB0F60642C8C6186000F702C5
-:10DB30000003C6B457C076B5FFF0C6B47400F70250
-:10DB40000004C7386A00F733280006300002F4B337
-:10DB500028008396FF8C8316FF74039C0014939611
-:10DB6000FF8C0318000C8396FFAC9316FF74039C84
-:10DB70000001E000D5EC9396FFAC9313FFFCF38417
-:10DB80004F5C000000019393FFFCF3064A98931347
-:10DB9000FFFC07880008E00126F89793FFFCF402D9
-:10DBA00000018796FFFC8296FFF802140004013CF6
-:10DBB0000000000000019293FFFC02900008221078
-:10DBC00001A0F5020000F3846E50F602001C202A2A
-:10DBD0000063EE00DC08C59C6000A69E6002772D05
-:10DBE000001E7738FFE5C6B477C076B5FFF0203663
-:10DBF0000003E600DBFC072C0036F03B2800063073
-:10DC00000040E000DBCC05280001F5844F5C0000FB
-:10DC1000000186AE0008F4020000872E0004000018
-:10DC20000001C0367200EC00DCF09696FFEC773510
-:10DC30000001C738680077390002C638580006303E
-:10DC4000000CC38400008316000086B20000871A0F
-:10DC5000000000000001C0367200E600DC7CC52038
-:10DC6000000086B20004871A000400000001C036DC
-:10DC70007200E600DC80202A0000F5020001202A64
-:10DC80000000E600DC8D00000001F38200008496B5
-:10DC9000000086B200008726000000000001C036A8
-:10DCA0007200E200DCCCF5020000C0367200E60033
-:10DCB000DCD4202A000086B200048726000400007D
-:10DCC0000001C0367200E200DCD5202A0000F50217
-:10DCD0000001202A0000E600DCE5201E0000F3829F
-:10DCE0000001201E0000E600DCF420220000F40207
-:10DCF000000120220000E600DD29F602000187165F
-:10DD0000FFEC0000000176B90001C6B4700076B5E2
-:10DD10000002C6B4580006B4001486B60000971678
-:10DD2000FFF0E000DD989696FFF427140014971397
-:10DD3000FFFC83160000000000019313FFFC959385
-:10DD4000FFFC9596FE7007880008E0012568979310
-:10DD5000FFFC8596FE7020220000E600DD95F602AD
-:10DD600000018716FFEC0000000176B90001C6B47F
-:10DD7000700076B50002C6B4580006B4001486B62A
-:10DD800000009716FFF09696FFF4972E0008E0002B
-:10DD9000DD9C20320000F602000020320000E60088
-:10DDA000DDB0F4820000F704427CE000E09CF6065F
-:10DDB000427E9496FF448716FFF4F6044F58773955
-:10DDC0000006C73070009716FF5406B8001A873651
-:10DDD00000008316FF5476B5001E76B4FFE5C73801
-:10DDE0006FC09313FFFC7738FFF077390006C63019
-:10DDF00070009616FF4C07880008E000CD0097934E
-:10DE0000FFFC20220000E600DE35F30200018496CC
-:10DE1000FF4C000000019493FFFC07880008E0001D
-:10DE2000CD009793FFFC20220000E600DE380000C2
-:10DE30000001F30200019316FF448496FF440000A2
-:10DE4000000120260000E600DE59F60642A4F70491
-:10DE500042A4E000E0A076B1001E8316FF4C8616B7
-:10DE6000FF4C871A00007699001E76B4FFE5C7388C
-:10DE70006FC07739FFF0203A0002E600DE8500002F
-:10DE80000001F6044F58F5844F5800000001C032DD
-:10DE90005A00E600E025000000018496FF4C0000D7
-:10DEA000000106A4001A873600008316FF5476B5D9
-:10DEB000001E76B4FFE5C7386FC07738FFF07739BA
-:10DEC0000006C72C7000C03A3200E600DEDDF60620
-:10DED0004280F7044280E000E0A076B1001E2614E4
-:10DEE0000030F03328008716FFD07631001E7630E0
-:10DEF000FFE58496FF4C2314002E9316FE6475995B
-:10DF0000001E75ACFFE57515001E7528FFE573153D
-:10DF1000001E7318FFE59316FF348316FE64042475
-:10DF2000000206A000027495001E74A4FFE59496FA
-:10DF3000FF3C7495001EC73867C07738FFF0F723A1
-:10DF40002800871A000074A4FFE59496FF2CC738B8
-:10DF50005FC07738FFF0F737280006B40002871655
-:10DF6000FFD42494002A9496FE647625001E763011
-:10DF7000FFE5C73857C07738FFF0F7372800872606
-:10DF8000000006B40002C73867C07738FFF0F737E3
-:10DF9000280006B400028716FFD823140026931623
-:10DFA000FE647619001E8496FF3C7630FFE5C73884
-:10DFB0004FC07738FFF0F7372800871A000006B403
-:10DFC00000028496FF34C73867C07738FFF0F73710
-:10DFD000280006B400028716FFDC231400229316E3
-:10DFE000FE647619001E7630FFE5C7384FC07738DB
-:10DFF000FFF0F7372800871A000006B40002C73880
-:10E0000067C07738FFF0F73728008716FFE08316E0
-:10E01000FF2C06B40002C73837C07738FFF0E000A5
-:10E02000EAA0F737280007880008E000CBCC9793D8
-:10E03000FFFC06A00002F7044F58F037280006A0A6
-:10E0400000149416FF24C72072007738FFFAF737C0
-:10E05000280006A00016F7372800F4820001F4A378
-:10E0600028009413FFFC07880008E000CD00979378
-:10E07000FFFC20220000E600E0BC26940048F704E4
-:10E080004280E000E09CF60642828696FEF4E000C4
-:10E09000E29400000001F7044284F606428476B15F
-:10E0A000001E76B4FFE5F4020000C7386FC0773970
-:10E0B000FFF007380001E000EAA4F73328008316D8
-:10E0C000FF4C7515001E7528FFE59316FF1C0718F9
-:10E0D0000036F4820001F4BB2800F03728008716D0
-:10E0E000FFB876B5001E76B4FFE5041800020620DE
-:10E0F0000002231400469316FF147599001E75AC98
-:10E10000FFE57495001E74A4FFE59496FF0C73154B
-:10E11000001E7318FFE59316FF047495001E74A487
-:10E12000FFE59496FEFC230000079316FEF4849608
-:10E13000FF1C8316FF1404A4000A9496FE7CC738C3
-:10E140006FC07738FFF0F7232800F6844F58849685
-:10E15000FF54871A0000C6A46A007434FFFAC73857
-:10E160005FC07738FFF0F7332800063000028716CB
-:10E17000FFBC231400429316FF147699001E76B458
-:10E18000FFE5C73857C07738FFF0F7332800871A04
-:10E19000000006300002C7386FC07738FFF0F73351
-:10E1A0002800063000028716FFC02494003E949693
-:10E1B000FF1476A5001E8316FF0C76B4FFE5C73862
-:10E1C00037C07738FFF0F733280087260000063085
-:10E1D0000002C7386FC07738FFF0F73328000630E9
-:10E1E00000028716FFC42494003A9496FF1476A583
-:10E1F000001E8316FF0476B4FFE5C73837C07738B2
-:10E20000FFF0F73328008726000006300002C738E9
-:10E210006FC07738FFF0F73328008716FFC8849661
-:10E22000FEFC06300002C7384FC07738FFF0F733E6
-:10E2300028008316FEF400000001201A0007EE00FB
-:10E24000E294F68200088496FE7C00000001072418
-:10E25000000E86BA00007739001E7738FFE5C6B495
-:10E2600077C076B5FFF0F70200FFC6B4740047210F
-:10E270000000C0367200470C0001203A0000E600A2
-:10E28000E08804A400029496FE7C03180001E000DC
-:10E29000E2309316FEF48316FF1C000000010718FD
-:10E2A0000038F6BB28009313FFFC8496FF2400007F
-:10E2B00000019493FFFC07880008E000D42C97939A
-:10E2C000FFFC231400789316FEBC849600002314F0
-:10E2D00000A886A60004872600009316FE9CC6B4FC
-:10E2E00070009696FEECF7020001C7347400971692
-:10E2F000FEE48496FF24000000019493FFFC07884D
-:10E300000008E000D4B49793FFFCF7044F580000D6
-:10E310000001C0227200E600EAA19416FF1C86A24A
-:10E3200000387721001E7738FFE5F30200009316CE
-:10E33000FED4C6B477C076B5FFF09696FEDC849620
-:10E34000FED4000000012026000EEE00E2F0F302F1
-:10E35000000F9313FFFC8316FEEC00000001C718AA
-:10E3600048009713FFFC07880008E00127E897930F
-:10E37000FFFCC3A000008496FEE4000000012026FC
-:10E380000000E600E38D239C0007C3803A00C71C11
-:10E3900038008316FF1CF48200FFF6044F58C7189C
-:10E3A00070000738002686BA00009716FEC4773939
-:10E3B000001E7738FFE5C6B477C076B5FFF0C6B467
-:10E3C0004C0076B50006C330680007300040C01A24
-:10E3D0007200E600E40D9316FECC9313FFFC9396B7
-:10E3E000FE749616FE6C9696FE6807880008E0009C
-:10E3F000CD009793FFFC8396FE748616FE6C86967E
-:10E40000FE6820220000E600E09500000001F5848F
-:10E410004F588496FECC072C0040C0267200E600C0
-:10E42000EA8D00000001A732680276A5001E76B4CE
-:10E43000FFE58616FECCC7386FC07739FFF0203A6B
-:10E440000002E600E451C0325A00C62C0000C0327F
-:10E450005A00E600E6E5251400768316FF1C849634
-:10E46000FEBC061800028732000076B1001E76B4AA
-:10E47000FFE58316FEDC0630000275B1001EC738CA
-:10E480006FC07738FFF0F72728008732000075AC9F
-:10E49000FFE5C7385FC07738FFF0F72B2800251459
-:10E4A0000074063000028732000076B1001E76B498
-:10E4B000FFE5C7386FC07738FFF0F72B2800251429
-:10E4C0000072063000028732000076B1001E76B47A
-:10E4D000FFE5C7386FC07738FFF0F72B2800251409
-:10E4E0000070063000028732000076B1001E76B45C
-:10E4F000FFE5C7386FC07738FFF0F72B28002514E9
-:10E50000006E063000028732000076B1001E76B43D
-:10E51000FFE5C7386FC07738FFF0F72B28002514C8
-:10E52000006C063000028732000076B1001E76B41F
-:10E53000FFE5C7386FC07738FFF0F72B28002514A8
-:10E54000006A063000028732000076B1001E76B401
-:10E55000FFE5C7386FC07738FFF0F72B280006308B
-:10E56000000287320000251400687631001E7630E4
-:10E57000FFE5C73867C07738FFF0F72B2800C71CC6
-:10E5800032009713FFFC9493FFFC2614006096134F
-:10E59000FFFC9616FE6C07880008E000D0DC97931D
-:10E5A000FFFC8716FFA08616FE6C8496FECC231413
-:10E5B000005E9316FE5C7599001E75ACFFE5741540
-:10E5C000001E7420FFE57315001E7318FFE59316F7
-:10E5D000FEAC8316FE5C7631001E7630FFE5052426
-:10E5E000000206A800027495001E74A4FFE594962C
-:10E5F000FEB47495001EC73867C07738FFF0F72B5C
-:10E600002800871A000074A4FFE59496FEA4C7387A
-:10E610005FC07738FFF0F737280006B4000287168E
-:10E62000FFA42494005A9496FE5C7625001E83165F
-:10E63000FEB47630FFE5C73837C07738FFF0F737DC
-:10E6400028008726000006B40002C73867C0773864
-:10E65000FFF0F737280006B400028716FFA82494BD
-:10E6600000569496FE5C7625001E7630FFE5C7388E
-:10E6700047C07738FFF0F73728008726000006B438
-:10E680000002C73867C07738FFF0F737280006B4B4
-:10E6900000028716FFAC231400529316FE5C761915
-:10E6A000001E8496FEAC7630FFE5C7384FC0773841
-:10E6B000FFF0F7372800871A000006B40002C738B9
-:10E6C00067C07738FFF0F73728008716FFB083164A
-:10E6D000FEA406B40002C73837C07738FFF0E00068
-:10E6E000EA8CF73728008496FECC0000000104A4D1
-:10E6F00000369496FE5C8726000076A5001E76B450
-:10E70000FFE5C7386FC07739FFF0203A0000470CAB
-:10E710000001203A0000E600EA8D000000018316A7
-:10E72000FECC8496FF1C0618003A85B20000072430
-:10E73000003A86BA00007631001E7630FFE5773960
-:10E74000001E7738FFE5C5AC67C0C6B477C075ADAD
-:10E75000FFF076B5FFF0C02E6A00EC00E764F5022A
-:10E760000002F50200018316FF1C000000010718DB
-:10E77000003686BA00007739001E7738FFE5C6B448
-:10E7800077C076B5FFF020360002E600E79C000077
-:10E790000001202A0001E600EA8D000000018496B5
-:10E7A000FE5C8316FF1CF52728000618000287323E
-:10E7B000000076B1001E76B4FFE5251400A684960D
-:10E7C000FE9C8316FEDC0630000275B1001EC738C1
-:10E7D0006FC07738FFF0F72728008732000075AC4C
-:10E7E000FFE5C7385FC07738FFF0F72B2800251406
-:10E7F00000A4063000028732000076B1001E76B415
-:10E80000FFE5C7386FC07738FFF0F72B28002514D5
-:10E8100000A2063000028732000076B1001E76B4F6
-:10E82000FFE5C7386FC07738FFF0F72B28002514B5
-:10E8300000A0063000028732000076B1001E76B4D8
-:10E84000FFE5C7386FC07738FFF0F72B2800251495
-:10E85000009E063000028732000076B1001E76B4BA
-:10E86000FFE5C7386FC07738FFF0F72B2800251475
-:10E87000009C063000028732000076B1001E76B49C
-:10E88000FFE5C7386FC07738FFF0F72B2800251455
-:10E89000009A063000028732000076B1001E76B47E
-:10E8A000FFE5C7386FC07738FFF0F72B2800063038
-:10E8B000000287320000251400987631001E763061
-:10E8C000FFE5C73867C07738FFF0F72B2800C71C73
-:10E8D00032009713FFFC9493FFFC261400909613CC
-:10E8E000FFFC9616FE6C07880008E000D0DC9793CA
-:10E8F000FFFC8716FF708616FE6C8496FECC239470
-:10E90000008E759D001E75ACFFE57315001E731813
-:10E91000FFE59316FE947415001E7420FFE5731531
-:10E92000001E7318FFE59316FE848316FE9476315D
-:10E93000001E7630FFE50524000206A8000274954B
-:10E94000001E74A4FFE59496FE8CC73867C0773824
-:10E95000FFF0F72B28008496FEC4871E0000752563
-:10E96000001EC7385FC07738FFF0F737280006B4BD
-:10E9700000028716FF742394008A761D001E7630ED
-:10E98000FFE58496FE8C7528FFE5C73837C07738D9
-:10E99000FFF0F7372800871E000006B40002831638
-:10E9A000FE84C73867C07738FFF0F737280006B411
-:10E9B00000028716FF7823940086761D001E7630AD
-:10E9C000FFE5C73847C07738FFF0F7372800871EC4
-:10E9D000000006B40002C73867C07738FFF0F73789
-:10E9E000280006B400028716FF7C23940082761D5F
-:10E9F000001E7630FFE5C7384FC07738FFF0F73795
-:10EA00002800871E000006B400028496FEC4C738A2
-:10EA100067C07738FFF0F73728008716FF8006B405
-:10EA20000002C73837C07738FFF0F737280087264D
-:10EA30000000F30200FFC73857C07738FFE8C6B8B8
-:10EA40003400F7020080C73474007739001077393A
-:10EA5000FFF0203A0000E600EA6127000100C6B49A
-:10EA600075808496FECC0000000107240038F6BBB8
-:10EA700028009493FFFC8316FF24000000019313E9
-:10EA8000FFFC07880008E000D42C9793FFFC8496D5
-:10EA9000FED40000000104A40001E000E33C9496D1
-:10EAA000FED4F40200018796FFFC8296FFF8021460
-:10EAB0000004013C0000000000019293FFFC029062
-:10EAC0000008861600088696000CF502FFFC859665
-:10EAD000000484160010F484E0000730000294B2B1
-:10EAE0000010F484E00406B4000394B20014F4842B
-:10EAF000E01CC6B4540094B20018F4820005F4B3CC
-:10EB00002800F4820001F4BB280027340008973263
-:10EB1000000486160000072C0003C7385400C6B84E
-:10EB200068009693FFFCC63072009613FFFCF70254
-:10EB30000003C5AC7400F7020004C7385A009713ED
-:10EB4000FFFC07880008C12000009793FFFC879610
-:10EB5000FFFC8296FFF802140014013C0000000044
-:10EB600000019293FFFC0290000822100018871603
-:10EB700000040000000183BA000084960000939610
-:10EB8000FFF0F3846E54873A00049396FFEC9716D7
-:10EB9000FFF49013FFFC271C00029713FFFC0724CF
-:10EBA00000209713FFFC9496FFE407880008E0001C
-:10EBB000CDB89793FFFC8496FFE4839600088726E0
-:10EBC00000188516FFECC03A3A00EE00EC7CF582A6
-:10EBD0000001872600188396000800000001C01E6F
-:10EBE0007200E600EC7CC584000086A60010871643
-:10EBF000FFF0F6020000C0367200E600EC1C0424B0
-:10EC0000001086A600148716FFF400000001C0362D
-:10EC10007200E600EC2020320000F60200012032F3
-:10EC20000000E600EC2D00000001F582000086A245
-:10EC300000008716FFF000000001C0367200E200FD
-:10EC4000EC68F6020000C0367200E600EC7020327C
-:10EC5000000086A200048716FFF400000001C03601
-:10EC60007200E200EC7120320000F6020001203256
-:10EC70000000E600EC81202E0000F5820001202E2D
-:10EC80000000E600ECACF7020001F704429CF60637
-:10EC9000429C76B1001E76B4FFE5C7386FC0773965
-:10ECA000FFF007380001F7332800F7020001972A28
-:10ECB000000883A6000C772CFFE193AA000C972A8A
-:10ECC000001C83A6001CF7046E5093AA002083BA90
-:10ECD0001DDCF682000093AA002C8396000CC5B4BC
-:10ECE000000093AA003083BA0010C634000093AA33
-:10ECF0000024873A001400000001972A00282036DB
-:10ED0000001FEE00ED1CC73050000738003495BAE4
-:10ED1000000006300004E000ECFC06B4000183961D
-:10ED2000001076A5001E9393FFFCF38200B493932A
-:10ED3000FFFC9513FFFC8726002076B4FFE5C7385B
-:10ED40006FC07739FFF09713FFFC8396FFEC00004C
-:10ED500000019393FFFC07880008E000EAB897934E
-:10ED6000FFFC8796FFFC8296FFF802140014013C1A
-:10ED70000000000000019293FFFC029000082210A6
-:10ED800000188716000400000001863A0000000009
-:10ED900000019616FFF0873A000400000001971664
-:10EDA000FFF4F6021DE09613FFFC8616000000003B
-:10EDB00000019613FFFCF6046E500000000196134C
-:10EDC000FFFC261400109616FFEC07880008E001EF
-:10EDD00026F89793FFFCF6846E50F6020000873603
-:10EDE0001DD89616FFE476B5001E76B4FFE5C73849
-:10EDF0006FC07738FFF0F68642C0F73728008616D6
-:10EE0000FFEC000000019613FFFC07880008E000FB
-:10EE1000DBB49793FFFC20220000E600EE4D0000DB
-:10EE200000018616FFEC000000019613FFFC078826
-:10EE30000008E000D5A09793FFFC20220000E60028
-:10EE4000EE4D00000001F60200019616FFE4841664
-:10EE5000FFE48796FFFC8296FFF802140008013C4D
-:10EE60000000000000019293FFFC029000088696CB
-:10EE70000004861600008736000885960008203AB0
-:10EE80000000E600EE99203A0003E600EEE9F40205
-:10EE90000000E000EF0C0000000177B0001F703EA2
-:10EEA000FFE1E600EF0DF4020000851600140000FB
-:10EEB00000019513FFFC851600100000000195135A
-:10EEC000FFFC8516000C000000019513FFFC9593D4
-:10EED000FFFC9693FFFC07880008E000EB60979327
-:10EEE000FFFCE000EF0C0000000177B0001E703E58
-:10EEF000FFE1E600EF0D000000019593FFFC969303
-:10EF0000FFFC07880008E000ED749793FFFC8796EC
-:10EF1000FFFC8296FFF802140018013C000000007C
-:10EF200000019293FFFC0290000822100018F48266
-:10EF3000000086960000F6044AA023940010843650
-:10EF400000009616FFE4F7044A9C9416FFF08536FD
-:10EF50000004C0327200EC00F0149516FFF4773113
-:10EF60000001C738600077390002F3064A98C6B836
-:10EF7000300006B4000CC584000087360000000095
-:10EF80000001C03A4200E600EFA4C6240000873624
-:10EF9000000400000001C03A5200E600EFA8203251
-:10EFA0000000F602000120320000E600EFB500008C
-:10EFB0000001F5820000863600008716FFF0000091
-:10EFC0000001C0327200E200EFF0F5020000C03232
-:10EFD0007200E600EFF8202A000086B600048716CB
-:10EFE000FFF400000001C0367200E200EFF9202AB1
-:10EFF0000000F5020001202A0000E600F009202EA2
-:10F000000000F5820001202E0000E600F018202606
-:10F010000000F482000120260000E600F04DF60218
-:10F0200000018716FFE4F3064A9876B90001C6B4DA
-:10F03000700076B50002C6B4300006B4001486B67F
-:10F0400000009716FFE8E000F0B09696FFEC27145A
-:10F05000001C9713FFFC9393FFFCF3064A9893134D
-:10F06000FFFC07880008E00125689793FFFC202239
-:10F070000000E600F0ADF60200018716FFE4F3069B
-:10F080004A9876B90001C6B4700076B50002C6B4DD
-:10F09000300006B4001486B600009716FFE8969676
-:10F0A000FFECF7054AA0E000F0B420320000F602C1
-:10F0B000000020320000E600F121F4020001871672
-:10F0C000FFE8F60642C876B90002C6B4700076B50D
-:10F0D0000002A736600283160004C6B460007635CD
-:10F0E000001E7630FFE50534000275A9001EC73802
-:10F0F00067C07738FFF0971A0000872A000075ACC8
-:10F10000FFE583160008C7385FC07738FFF0971A0D
-:10F1100000008316000C06B40004E000F124969A67
-:10F120000000F40200008796FFFC8296FFF80214AC
-:10F130000010013C0000000000010000B9000000C8
-:10F14000BA000000BB000000BC000000BD000000D1
-:10F15000BE000000BF000000800000008100000031
-:10F160008200000083000000840000008500000091
-:10F17000860000008700B9B9B9BAB9BBB9BCB9BD3E
-:10F18000B9BEB9BFB980B981B982B983B984B9852B
-:10F19000B986B987BAB9BABABABBBABCBABDBABE2F
-:10F1A000BABFBA80BA81BA82BA83BA84BA85BA863B
-:10F1B000BA87BBB9BBBABBBBBBBCBBBDBBBEBBBFCD
-:10F1C000BB80BB81BB82BB83BB84BB85BB86BB874B
-:10F1D000BCB9BCBABCBBBCBCBCBDBCBEBCBFBC80AB
-:10F1E000BC81BC82BC83BC84BC85BC86BC87BDB9E9
-:10F1F000BDBABDBBBDBCBDBDBDBEBDBFBD80BD81BB
-:10F20000BD82BD83BD84BD85BD86BD87BEB9BEBA86
-:10F21000BEBBBEBCBEBDBEBEBEBFBE80BE81BE82CA
-:10F22000BE83BE84BE85BE86BE87BFB9BFBABFBB24
-:10F23000BFBCBFBDBFBEBFBFBF80BF81BF82BF83DA
-:10F24000BF84BF85BF86BF8780B980BA80BB80BCC2
-:10F2500080BD80BE80BF80808081808280838084EA
-:10F2600080858086808781B981BA81BB81BC81BD60
-:10F2700081BE81BF818081818182818381848185FA
-:10F280008186818782B982BA82BB82BC82BD82BEFE
-:10F2900082BF82808281828282838284828582860A
-:10F2A000828783B983BA83BB83BC83BD83BE83BF9C
-:10F2B000838083818382838383848385838683871A
-:10F2C00084B984BA84BB84BC84BD84BE84BF84807A
-:10F2D000848184828483848484858486848785B9B8
-:10F2E00085BA85BB85BC85BD85BE85BF858085818A
-:10F2F00085828583858485858586858786B986BA56
-:10F3000086BB86BC86BD86BE86BF86808681868299
-:10F310008683868486858686868787B987BA87BBF3
-:10F3200087BC87BD87BE87BF8780878187828783A9
-:10F33000878487858786878700009293FFFC0290E9
-:10F34000000822100018F70475EC00000001203AB4
-:10F350000000E600F37DF6064296F704429476B18B
-:10F36000001E76B4FFE5F4020000C7386FC077399D
-:10F37000FFF007380001E000F5E0F7332800F384E0
-:10F380006F309013FFFC271C00029713FFFC8316BD
-:10F390000000000000019313FFFC9396FFEC078828
-:10F3A0000008E000CDB89793FFFC8396FFECF702CE
-:10F3B0000000971E00088316000400000001931E41
-:10F3C000000C83160008049C0022931E001C831668
-:10F3D000000C9396FFF4871A00007699001E76B40D
-:10F3E000FFE50618000275B1001E75ACFFE5C738D1
-:10F3F0006FC07738FFF0069C0020F737280087326F
-:10F4000000009696FFE47535001EC7385FC0773858
-:10F41000FFF0F7272800049C002406300002873202
-:10F42000000076B1001E76B4FFE5C7386FC07738AC
-:10F43000FFF0F7272800049C0026063000028732E0
-:10F44000000076B1001E76B4FFE5C7386FC077388C
-:10F45000FFF0F7272800049C0028063000028732BE
-:10F46000000076B1001E76B4FFE5C7386FC077386C
-:10F47000FFF0F7272800049C002A0630000287329C
-:10F48000000076B1001E76B4FFE5C7386FC077384C
-:10F49000FFF0F7272800049C002C0630000287327A
-:10F4A000000076B1001E76B4FFE5C7386FC077382C
-:10F4B000FFF0F7272800049C002E06300002873258
-:10F4C000000076B1001E76B4FFE5C7386FC077380C
-:10F4D000FFF0F72728000630000287320000049C66
-:10F4E00000307631001E7630FFE5C73867C07738C8
-:10F4F000FFF0F7272800871E00207528FFE5C73892
-:10F5000057C07739FFF0203A0008EE00F598F3066F
-:10F5100014D88316FFE4871E00207699001E76B467
-:10F52000FFE5C7386FC07739FFF025B80001C4ACDC
-:10F53000580004240001202E0000EC00F595F5028F
-:10F5400000008316FFE40000000106180002A73245
-:10F550005802C6B0580076B5001E76B4FFE5C7382D
-:10F560006FC07739FFE8C6B0400077B80018703E2A
-:10F57000FFE1E600F57DF7376800F502FFFFC730D1
-:10F580004800F53B680024A4000224200002E000AB
-:10F59000F53425AC0001F30614D89313FFFCF302F5
-:10F5A00000349313FFFC8316FFF400000001931353
-:10F5B000FFFC8316000000000001871A0000769906
-:10F5C000001E76B4FFE5C7386FC07739FFF0971398
-:10F5D000FFFC9393FFFC07880008E000EAB89793CC
-:10F5E000FFFC8796FFFC8296FFF802140010013C96
-:10F5F0000000000000019293FFFC0290000822101E
-:10F600000010F70475EC00000001203A0000E6004D
-:10F61000F639F6064296F704429476B1001E76B4A7
-:10F62000FFE5F4020000C7386FC07739FFF00738F4
-:10F630000001E000F748F7332800F5046F300000C0
-:10F6400000019516FFF49013FFFC27280002971382
-:10F65000FFFC85960004000000019593FFFC0788DD
-:10F660000008E000CDB89793FFFC85160004F60271
-:10F67000000086AA00007729001E7738FFE5C6B48F
-:10F6800077C076B5FFF0F7020001C0367400E600DF
-:10F69000F6999696FFECC63800009613FFFC859607
-:10F6A000FFEC8516FFF4472CFFFE07380002C72841
-:10F6B00072009713FFFC85960000000000019593EF
-:10F6C000FFFC07880008E000CDB89793FFFC851683
-:10F6D000FFF4F7020002972A000885960008000050
-:10F6E000000195AA000C8596000C0000000195AA67
-:10F6F000001CF50614D89513FFFCF58200209593A5
-:10F70000FFFC8516FFF4000000019513FFFC8596B1
-:10F7100000008516FFEC872E000076AD001E76B443
-:10F72000FFE5C7386FC07739FFF0C738500097132F
-:10F73000FFFC8596FFF4000000019593FFFC07880D
-:10F740000008E000EAB89793FFFC8796FFFC8296DA
-:10F75000FFF802140010013C000000000001929329
-:10F76000FFFC0290000885960000851600048716AD
-:10F770000008F602FFFC06A80003C6B464000738C0
-:10F780000003C7386400C73470009713FFFCC5AC92
-:10F790006A009593FFFCF7020003C5287400F70286
-:10F7A0000004C73852009713FFFC07880008E001E7
-:10F7B00014D89793FFFC8796FFFC8296FFF80214FB
-:10F7C0000010013C0000000000019293FFFC029039
-:10F7D000000822100010F70475EC00000001203A28
-:10F7E0000000E600F80DF6064296F704429476B162
-:10F7F000001E76B4FFE5F4020000C7386FC0773909
-:10F80000FFF007380001E000F920F7332800F50485
-:10F810006F30000000019516FFF49013FFFC2728BD
-:10F8200000029713FFFC85960004000000019593E9
-:10F83000FFFC07880008E000CDB89793FFFC851611
-:10F840000004F602000086AA00007729001E77381F
-:10F85000FFE5C6B477C076B5FFF0F7020001C03609
-:10F860007400E600F86D9696FFECC638000096131B
-:10F87000FFFC8596FFEC8516FFF4472CFFFE07384A
-:10F880000002C72872009713FFFC85960000000055
-:10F8900000019593FFFC07880008E000CDB897931E
-:10F8A000FFFC8516FFF4F5820006F5AB280085966F
-:10F8B00000080728000295AA00040514000E852AF6
-:10F8C000000077A9001E77BCFFE5C5287FC0752919
-:10F8D000FFF0F53B2800F58614D89593FFFCF50260
-:10F8E00000089513FFFC859600008516FFEC872E17
-:10F8F000000076AD001E76B4FFE5C7386FC07739DB
-:10F90000FFF0C73850009713FFFC8596FFF4000006
-:10F9100000019593FFFC07880008E000F75C9793CF
-:10F92000FFFC8796FFFC8296FFF802140010013C52
-:10F930000000000000019293FFFC029000082210DA
-:10F940000008F70475EC83960004203A0000E600F6
-:10F95000FA64F6064296F5046F309013FFFC2728F0
-:10F9600000029713FFFC83160000000000019313B0
-:10F97000FFFC9396FFF49516FFF007880008E0005F
-:10F98000CDB89793FFFC8516FFF0F302000783962E
-:10F99000FFF4F32B280007280002F3020001F33BD9
-:10F9A0002800871E0000769D001E76B4FFE5059CAA
-:10F9B0000002762D001E7630FFE5749D001E74A4B3
-:10F9C000FFE5041C000683160000C7386FC07738B7
-:10F9D000FFF006A80004F7372800872E000006A8CD
-:10F9E000000675A1001EC73867C07738FFF0F737EB
-:10F9F0002800871E000475ACFFE506A800087619EC
-:10FA0000001EC7384FC07738FFF0F737280087222D
-:10FA1000000006A8000AC7385FC07738FFF0F73744
-:10FA20002800F30614D89313FFFCF302000C931381
-:10FA3000FFFC8316000000000001871A00007630EA
-:10FA4000FFE5C73867C07739FFF09713FFFC9513C0
-:10FA5000FFFC07880008E000F75C9793FFFCE000DC
-:10FA6000FA8400000001F704429476B1001E76B4D7
-:10FA7000FFE5F4020000C7386FC07739FFF00738A0
-:10FA80000001F73328008796FFFC8296FFF80214E6
-:10FA90000008013C0000000000019293FFFC02906E
-:10FAA000000822100048F70475EC85960000203A03
-:10FAB0000000E600FD98F606429605AC0002872E8F
-:10FAC000000076AD001E76B4FFE52414001E062C5F
-:10FAD00000027531001E249400207528FFE5F38490
-:10FAE0006E50C7386FC07738FFF0F727280087328D
-:10FAF00000009396FFC4C73857C07738FFF0F7234C
-:10FB000028002414001C063000028732000076B161
-:10FB1000001E76B4FFE5C7386FC07738FFF0F723D3
-:10FB200028002414001A063000028732000076B143
-:10FB3000001E76B4FFE5C7386FC07738FFF0F723B3
-:10FB4000280024140018063000028732000076B125
-:10FB5000001E76B4FFE5C7386FC07738FFF0F72393
-:10FB6000280024140016063000028732000076B107
-:10FB7000001E76B4FFE5C7386FC07738FFF0F72373
-:10FB8000280024140014063000028732000076B1E9
-:10FB9000001E76B4FFE5C7386FC07738FFF0F72353
-:10FBA000280024140012063000028732000076B1CB
-:10FBB000001E76B4FFE5C7386FC07738FFF0F72333
-:10FBC000280006300002873200002414001076312D
-:10FBD000001E7630FFE5C73867C07738FFF0F7239F
-:10FBE00028009013FFFC271C00029713FFFC94933E
-:10FBF000FFFC9596FFBC07880008E000CDB89793FE
-:10FC0000FFFC8596FFBC231400362494003873A5AE
-:10FC1000001E739CFFE5F40442C0F68642C076B530
-:10FC2000001E76B4FFE5872E0000762D001E76308C
-:10FC3000FFE5C4206FC07420FFF005AC0002752DF5
-:10FC4000001E7528FFE5C73867C07738FFF0F72733
-:10FC50002800872E0000F6046E50C73857C077384A
-:10FC6000FFF0F71B28002314003405AC0002872E98
-:10FC7000000076AD001E76B4FFE5C7386FC0773858
-:10FC8000FFF0F71B28002314003205AC0002872E7A
-:10FC9000000076AD001E76B4FFE5C7386FC0773838
-:10FCA000FFF0F71B28002314003005AC0002872E5C
-:10FCB000000076AD001E76B4FFE5C7386FC0773818
-:10FCC000FFF0F71B28002314002E05AC0002872E3E
-:10FCD000000076AD001E76B4FFE5C7386FC07738F8
-:10FCE000FFF0F71B28002314002C05AC0002872E20
-:10FCF000000076AD001E76B4FFE5C7386FC07738D8
-:10FD0000FFF0F71B28002314002A05AC0002872E01
-:10FD1000000076AD001E76B4FFE5C7386FC07738B7
-:10FD2000FFF0F71B280005AC0002872E000023140B
-:10FD3000002875AD001E75ACFFE5C7385FC0773889
-:10FD4000FFF0F71B28008716FFC8F6820003C738AC
-:10FD50003FC096B2000806B01DD8F4372800F386DD
-:10FD600014D89393FFFCF3821DE09393FFFC96134A
-:10FD7000FFFC7739FFF09713FFFC8396FFC4000068
-:10FD800000019393FFFC07880008E000EAB897930E
-:10FD9000FFFCE000FDB800000001F704429476B1DA
-:10FDA000001E76B4FFE5F4020000C7386FC0773953
-:10FDB000FFF007380001F73328008796FFFC829692
-:10FDC000FFF802140004013C0000000000019293BF
-:10FDD000FFFC029000088616000000000001873238
-:10FDE000000076B1001E76B4FFE5C7386FC07739E2
-:10FDF000FFF0203A0006E600FE21F582001EF7041F
-:10FE000042A8F60642A876B1001E76B4FFE5C738D0
-:10FE10006FC07739FFF007380001E000FE34F73398
-:10FE20002800F6056F349593FFFC07880008E00072
-:10FE300015849793FFFC8796FFFC8296FFF80214C7
-:10FE40000004013C0000000000019293FFFC0290BE
-:10FE5000000886160000859600048732000076B1FF
-:10FE6000001E76B4FFE5C7386FC07739FFF0203A3F
-:10FE70000007E600FE9DF4020000F70442A8F60623
-:10FE800042AA76B1001E76B4FFE5C7386FC0773955
-:10FE9000FFF007380001E000FF1CF73328000730AF
-:10FEA000000286BA00007739001E7738FFE5C6B435
-:10FEB00077C076B5FFF020360001E600FED5F605E6
-:10FEC0006F3420360002E600FEE5F5020020E00077
-:10FED000FEFCF60642AC202E000CE600FF1CF402ED
-:10FEE0000000F502001F9513FFFC07880008E000E2
-:10FEF00015849793FFFCE000FF1CF4020001F70457
-:10FF000042AC76B1001E76B4FFE5C7386FC07739D2
-:10FF1000FFF007380001F7332800F402000187964C
-:10FF2000FFFC8296FFF802140008013C000000006C
-:10FF300000019293FFFC02900008869600000000EA
-:10FF4000000187360004F6020000073800089736E3
-:10FF500000048736000800000001203A0000EC0091
-:10FF6000FF7DF6856F348736000800000001203AD7
-:10FF70000003EE00FF8020320000F6020001203274
-:10FF80000000E600FFBDF60642AEF7046F34000045
-:10FF90000001873A0008F682FFEC77390002A73AA1
-:10FFA0006802000000019713FFFC07880008E000CA
-:10FFB00015849793FFFCE000FFD800000001F704D0
-:10FFC00042AC76B1001E76B4FFE5C7386FC0773912
-:10FFD000FFF007380001F73328008796FFFC829670
-:10FFE000FFF802140004013C0000000000010000C2
-:10FFF00000170000001A0000001D0000001800009B
-:020000021000EC
-:10000000000056657273696F6E537472696E673A59
-:10001000206D63702D6C34763320332E303863209E
-:1000200044656320313120313939362031333A305B
-:10003000363A313600009293FFFC02900008F70434
-:10004000E00CFF0200009702FF84F7060C3ECFFC95
-:100050007580F60200029602FF8C9002FF88F7047A
-:10006000E02000000001203A0000E6010074F68262
-:100070000000F68200039682FF988796FFFC829626
-:10008000FFF802140000013C000000000001929300
-:10009000FFFC029000082210000CF5021494F505F4
-:1000A0007B00F50EF014F5057B08F706E000F686F8
-:1000B0007B68C7386A00F7057AF0F502004CF682D3
-:1000C000000020360002EE010124F5057AF8C5B4DF
-:1000D0000000C6340000F706E030C72C7000F506BB
-:1000E0006F44B73250029013FFFC9713FFFC9596B4
-:1000F000FFF49616FFF09696FFEC07880008E001E3
-:10010000031C9793FFFC8596FFF48616FFF08696F6
-:10011000FFEC05AC149406B4000120360002EE0199
-:1001200000D506300004F5020022F5056F58F005F1
-:100130006F54F0056F50F0052D408796FFFC8296B6
-:10014000FFF802140000013C00000000000192933F
-:10015000FFFC0290000807880008E00129589793E7
-:10016000FFFCF7020003F705E008F7047AD8F6026F
-:1001700000019602FF94203A0000E6010191F70683
-:100180007AE807880008E00103DC9793FFFCF70694
-:100190007AE8F6020005F63B2800F7067AE0868248
-:1001A000FF44F602000320360000E60101C9F63BD9
-:1001B0002800F7046F648682FF4407380001203668
-:1001C0000000E60101B0F7056F6407880008E00150
-:1001D00000349793FFFC07880008E001008C979398
-:1001E000FFFC07880008E00044289793FFFC07887D
-:1001F0000008E00016F09793FFFC07880008E00174
-:100200000C609793FFFC07880008E00104089793AF
-:10021000FFFC07880008E00000209793FFFC078898
-:100220000008E0000BD89793FFFC07880008E00166
-:100230001D689793FFFC07880008E0011E50979304
-:10024000FFFC07880008E0005F689793FFFC0788C1
-:100250000008E0006DEC9793FFFC07880008E001C0
-:1002600021D09793FFFC07880008E001222C979388
-:10027000FFFC9002FF9407880008E0000BFC9793B6
-:10028000FFFCF40200008796FFFC8296FFF8021440
-:100290000000013C0000000000019293FFFC02906E
-:1002A000000822100008F6020000C5B0000020324D
-:1002B0000002EE010308F5066F44A6AE50020000EE
-:1002C00000018736000000000001203A0001E6012D
-:1002D00002FCF50200029513FFFC9693FFFC959635
-:1002E000FFF49616FFF007880008E001031C9793BF
-:1002F000FFFC8616FFF08596FFF40000000105ACB8
-:100300000004E00102AC063000018796FFFC8296F3
-:10031000FFF802140000013C00000000000192936D
-:10032000FFFC0290000887160000F6020000F6822B
-:100330000008963A0008963A000C963A09D8963A80
-:1003400009DC963A0EF4963A0EF896BA1420963ACC
-:10035000142490BA148C8696000490BA149096BA1D
-:100360000000963A00048796FFFC8296FFF802147C
-:100370000008013C0000000000019293FFFC029085
-:100380000008859600008716000886160004773856
-:10039000FFFFC5307000C0325200E40103C9000005
-:1003A0000001872E000076AD001E76B4FFE5C73849
-:1003B0006FC07738FFF0F733280006300002C032F4
-:1003C0005200E40103A005AC00028796FFFC829670
-:1003D000FFF80214000C013C0000000000019293A1
-:1003E000FFFC02900008F7020001E00103E8F705B6
-:1003F0007AD88796FFFC8296FFF802140000013C31
-:10040000000000000001000000009293FFFC029039
-:100410000008F502000AF50571CCF00571D4F0056D
-:1004200071D0F00571C4F5020001F682000020369B
-:10043000000AEC010464F50571C8F58A1E00F60691
-:1004400071C4472CFFFC973200180630000406B434
-:100450000001F70471CC00000001C0367200EC010D
-:10046000044105AC214CF0057198F5066F689513B1
-:10047000FFFCF5067B189513FFFC07880008E000D9
-:1004800015489793FFFCF50605D49513FFFCF782FA
-:1004900000059793FFFCF5066F689513FFFC07882E
-:1004A0000008E000161C9793FFFCF5060B709513EF
-:1004B000FFFCF78200069793FFFCF5066F68951323
-:1004C000FFFC07880008E000161C9793FFFCF50668
-:1004D0000BA09513FFFCF78200059793FFFCF50630
-:1004E00070809513FFFC07880008E000161C9793A6
-:1004F000FFFCF5060B709513FFFCF782000697933F
-:10050000FFFCF50670809513FFFC07880008E000EB
-:10051000161C9793FFFCF50605589513FFFCF50292
-:10052000000A9513FFFCF506710C9513FFFC078874
-:100530000008E000161C9793FFFC07880008E00104
-:1005400005589793FFFC8796FFFC8296FFF80214EC
-:100550000000013C0000000000019293FFFC0290AB
-:100560000008F70471C400000001203A0000E60111
-:10057000057DF68671C4E0010594F7020000F704DA
-:1005800071D00000000177390002C7386800873A4F
-:10059000001800000001203A0000E60105ACF70554
-:1005A0007B10F606710CE00105C0F6057B18F60617
-:1005B0006F68F6057B189702FF48073821289702D5
-:1005C000FF4C8796FFFC8296FFF802140000013C66
-:1005D0000000000000019293FFFC0290000822102E
-:1005E00000108682FF48F4866F68F4857B18F50456
-:1005F0007B1026B4000285B60000872A0000762909
-:10060000001E7630FFE576B5001E76B4FFE5C5AC7A
-:100610006FC0C73867C07739FFF077B80010703EF9
-:10062000FFE1E601064575ACFFF0F70471AC000090
-:10063000000107380001F70571ACF70471ACE00167
-:1006400008C4F7020001772CFFF8203A0000E60109
-:10065000067176A9001EF70471A800000001073892
-:100660000001F70571A8F70471A8E00108C4F702BA
-:100670000001872A000076B4FFE5C7386FC07739DC
-:10068000FFF027380004203A0003E20108A400002C
-:10069000000177390002F68606A4A6B670020000B3
-:1006A0000001C1340000000106B40001077C000114
-:1006B00007EC00010844872A0004C4840000C03A03
-:1006C0004A00E60106D8000000018702FF4800004A
-:1006D0000001C7385200972A0004872A000400004E
-:1006E0000001203A2100EE01073CF602000086AA34
-:1006F00000048702FF4800000001C7385200273875
-:100700000028C0367200E601073C0000000177FCBB
-:10071000001D703EFFE1E601073C0000000177FC90
-:100720000017703EFFE1E601073D0000000177FC85
-:100730000016703EFFE1E601074420320000F60299
-:10074000000120320000E601088800000001872A2D
-:10075000001800000001203A0002EE0108C100006C
-:100760000001F70471A40000000107380001F7053B
-:1007700071A4F70471A4E00108C4F7020001872AFC
-:10078000000400000001203A2100EE0107E0F6021B
-:10079000000086AA00048702FF4800000001C73855
-:1007A00052002738000CC0367200E60107E0000056
-:1007B000000177FC001D703EFFE1E60107E000004C
-:1007C000000177FC0017703EFFE1E60107E1000041
-:1007D000000177FC0016703EFFE1E6010880203240
-:1007E0000000F6020001E0010880203200008702CC
-:1007F000FF4800000001C738520027380004203AA3
-:100800000008E6010838F682000077FC001D703E03
-:10081000FFE1E60108380000000177FC0017703E98
-:10082000FFE1E60108390000000177FC0016703E88
-:10083000FFE1E601088020360000F6820001E001B9
-:10084000088020360000F702000077FC001D703E93
-:10085000FFE1E60108780000000177FC0017703E18
-:10086000FFE1E60108790000000177FC0016703E08
-:10087000FFE1E6010880203A0000F7020001203A7B
-:100880000000E60108C100000001F70471A00000AB
-:10089000000107380001F70571A0F70471A0E0011D
-:1008A00008C4F7020001F704719C0000000107383A
-:1008B0000001F705719CF704719CE00108C4F70280
-:1008C0000001F7020000203A0000E601096800007C
-:1008D0000001F6847B10000000018736000076B529
-:1008E000001E76B4FFE5C7386FC07739FFF02738B0
-:1008F0000004203A0003E2010B5077390002F6862B
-:10090000090CA6B6700200000001C134000000010D
-:10091000091C00010AE000010AAC00010B14F704F5
-:1009200071D0F60471CC06B80001C0366200E60151
-:100930000938C7340000F7020000F58471D40000C4
-:100940000001C03A5A00470C0001203A0000E601BD
-:10095000098500000001F70471B0000000010738AC
-:100960000001F70571B0F70471B0F70471B400002D
-:10097000000107380001F70571B4F70471B4E00114
-:100980000B5000000001F48471C8F68571D0949674
-:10099000FFF4F4847B10C0366200E60109A494964B
-:1009A000FFECF00571D0F70471D0F00571C88496A2
-:1009B000FFECC03A5A00470C0001F70571C48726C6
-:1009C000000800000001703AFFE1E60109E10000C3
-:1009D0000001F70471980000000107380001F705D5
-:1009E00071988496FFF40000000120260000E601C3
-:1009F0000A710000000107880008E001055897937C
-:100A0000FFFCF602000920320014E6010A4D27001F
-:100A1000000C203A0001E2010A4DF7062DCCF684C5
-:100A20002ECC0000000175B50002B62E700206B48F
-:100A30000001F6852ECC8602FF34F7062E4C2036B8
-:100A4000001FE2010A4DB62E7002F0052ECCF7040D
-:100A50002D6800000001873A000000000001873A7D
-:100A600000280000000107880008C13800009793A3
-:100A7000FFFCF70471BC8496FFEC07380001F70512
-:100A800071BCF70471BC86A600048496FFF4F704D9
-:100A900071B820260000C7386800F70571B8E60174
-:100AA0000B5100000001E0010B5C00000001F704A5
-:100AB00071C00000000107380001F70571C0F7049C
-:100AC00071C0F4847B10000000019493FFFC078840
-:100AD0000008E000FDCC9793FFFCE0010B50000004
-:100AE0000001F70471C00000000107380001F7059C
-:100AF00071C0F70471C0F4847B100000000194936E
-:100B0000FFFC07880008E000FF309793FFFCE0013E
-:100B10000B5000000001F70471C00000000107380D
-:100B20000001F70571C0F70471C0F6847B108702DD
-:100B3000FF4800000001C7386A00273800049713F7
-:100B4000FFFC9693FFFC07880008E000FE4897939F
-:100B5000FFFC07880008E00105589793FFFC879683
-:100B6000FFFC8296FFF802140000013C0000000028
-:100B700000019293FFFC02900008F7067080F705D1
-:100B80007B1807880008E00105589793FFFC8796BB
-:100B9000FFFC8296FFF802140000013C00000000F8
-:100BA00000019293FFFC02900008F7066F68F705BA
-:100BB0007B1807880008E00105589793FFFC87968B
-:100BC000FFFC8296FFF802140000013C00000000C8
-:100BD00000019293FFFC02900008F7067B18971320
-:100BE000FFFCF7066F689713FFFC07880008E0001A
-:100BF00014F49793FFFCF7067B189713FFFCF70696
-:100C00006FF49713FFFC07880008E00014F4979333
-:100C1000FFFCF7067B189713FFFCF706708097130D
-:100C2000FFFC07880008E00014F49793FFFCF70628
-:100C30007B189713FFFCF706710C9713FFFC0788CE
-:100C40000008E00014F49793FFFC8796FFFC82965F
-:100C5000FFF802140000013C000000000001000049
-:100C600000009293FFFC02900008F5020004F505D5
-:100C70007600F0057608F0057604F00575F8F502C3
-:100C80000001F682000020360004EC010CBCF505E2
-:100C900075FCF58E6AF8F60675F8472CFFFC97325E
-:100CA00000180630000406B40001F70476000000C6
-:100CB0000001C0367200EC010C9905AC214CF50620
-:100CC00072189513FFFCF50676489513FFFC07880C
-:100CD0000008E00015489793FFFCF5060DF4951306
-:100CE000FFFCF782000E9793FFFCF5067218951330
-:100CF000FFFC07880008E000161C9793FFFCF50630
-:100D00000DF49513FFFCF782000E9793FFFCF50698
-:100D100072A49513FFFC07880008E000161C979347
-:100D2000FFFCF506132C9513FFFCF7820001979347
-:100D3000FFFCF50673309513FFFC07880008E00000
-:100D4000161C9793FFFCF50616C89513FFFCF78257
-:100D500000019793FFFCF50673BC9513FFFC078811
-:100D60000008E000161C9793FFFCF5061800951389
-:100D7000FFFCF78200109793FFFCF506744895136B
-:100D8000FFFC07880008E000161C9793FFFCF5069F
-:100D900016409513FFFCF78200109793FFFCF506B1
-:100DA00074D49513FFFC07880008E000161C979385
-:100DB000FFFCF506132C9513FFFCF50200129513AA
-:100DC000FFFCF50675609513FFFC07880008E0003E
-:100DD000161C9793FFFCF00575F0F00575ECF00517
-:100DE00075F48796FFFC8296FFF802140000013C20
-:100DF0000000000000019293FFFC02900008221006
-:100E00000038F70475EC00000001203A0000E6010C
-:100E10000E2800000001F70475F000000001203AE0
-:100E20000000E6010E3D0000000107880008E00117
-:100E300015D09793FFFCE001131800000001F704A0
-:100E400075FC00000001203A0000E6010E59F6860C
-:100E500075F8E0010E6CF6820000F70476080000D9
-:100E6000000177390002C738680086BA0018F70415
-:100E700076FC00000001203A0000E6010E90F685A5
-:100E80007660F3067648F30576FCE0010EA4F702DF
-:100E90000001F3020010F30576F8F3067648F30537
-:100EA0007700F7020000203A0000E6011315F30670
-:100EB0007448F70475EC00000001203A0000E601D8
-:100EC0000ED800000001F70475F000000001203A80
-:100ED0000000E6010EED0000000107880008E001B7
-:100EE00016409793FFFCE001131800000001F68400
-:100EF0007660000000018736000800000001703AAB
-:100F0000FFE1E6010F21F48200009693FFFC0788C1
-:100F10000008E00000BC9793FFFCE0011314F30607
-:100F20007560C3B40000841E0010F6844AA0231428
-:100F300000209316FFC49416FFE09696FFD4851EFA
-:100F40000014F7044A9C00000001C0367200EC0156
-:100F5000100C9516FFE477350001C7386800773923
-:100F60000002F3064A98C6B8300006B4000CC584E7
-:100F700000008736000000000001C03A4200E60190
-:100F80000F9CC62400008736000400000001C03A10
-:100F90005200E6010FA020320000F60200012032CC
-:100FA0000000E6010FAD00000001F582000086366A
-:100FB00000008716FFE000000001C0327200E2016D
-:100FC0000FE8F5020000C0327200E6010FF0202A9F
-:100FD000000086B600048716FFE400000001C0365A
-:100FE0007200E2010FF1202A0000F5020001202A20
-:100FF0000000E6011001202E0000F5820001202EE5
-:101000000000E601101020260000F48200012026D6
-:101010000000E6011045F60200018716FFD4F30632
-:101020004A9876B90001C6B4700076B50002C6B41D
-:10103000300006B4001486B600009716FFD8E00111
-:1010400010B89696FFDC2714002C9713FFFC83162C
-:10105000FFC4000000019313FFFCF3064A989313AA
-:10106000FFFC9396FFCC07880008E0012568979362
-:10107000FFFC8396FFCC20220000E60110B5F602AB
-:1010800000018716FFD4F3064A9876B90001C6B46A
-:10109000700076B50002C6B4300006B4001486B6FF
-:1010A00000009716FFD89696FFDCF7054AA0E001EE
-:1010B00010BC20320000F602000020320000E601E1
-:1010C00010CCF4820001E0011124F4820000869625
-:1010D000FFD80000000177350002C7386800773973
-:1010E0000002F68642C8A63A6802C7386800753919
-:1010F000001E7528FFE505B8000286AE000007381F
-:1011000000049716FFECC63057C07630FFF09616F5
-:10111000FFF475AD001E75ACFFE5C6B45FC076B4D4
-:10112000FFF09696FFF020260000E6011138F582C8
-:101130000000E00111CCF60200008696FFF00000EE
-:101140000001C7346800C49C7200C02E6A00EC0124
-:101150001198C5240000C62C00008716FFEC000083
-:101160000001A6B2700205AC0001C73070007739EB
-:10117000001E7738FFE5C6B477C076B4FFF0F6AB53
-:101180002800052800028716FFF000000001C02E8D
-:101190007200EC01115906300002F3020001F30560
-:1011A00076F4F60200018716FFF0869E0004C73829
-:1011B0007000C7384800C6B470008716FFF406B444
-:1011C00000209702FF6C9482FF509682FF582032D5
-:1011D0000000E601131000000001F704765CF584BE
-:1011E00076F807380001F705765CF704765C202E68
-:1011F0000021E2011230F6862C28F7042D38000079
-:10120000000106380001F6052D387739000220323A
-:101210000044E601121CB5BA6802F0052D38F3024D
-:101220000022F30576F8F3047700E0011234F305A9
-:1012300076FCF00576FCF70475F800000001203A12
-:101240000000E6011271F6862C28F7042D38000004
-:10125000000106380001F6052D3877390002F30247
-:10126000000F20320044E6011270B33A6802F00524
-:101270002D38F7047608F684760007380001C03A66
-:101280006A00E601128CF7057608F0057608F68408
-:101290007608F7047604F00575F8F60675F8C0369A
-:1012A0007200470C0001203A0000E60112B9F70570
-:1012B00075FCE00112C8F702000077350002C7385C
-:1012C0006000873A001800000001203A0000E601A3
-:1012D0001309F7057660F7042D38F30672A4F305B9
-:1012E0007648F6862C2806380001F6052D38773921
-:1012F0000002F302000E20320044E6011318B33A54
-:101300006802E0011318F0052D38E0011314F3060C
-:101310007218F3067330F30576488796FFFC8296C1
-:10132000FFF802140000013C00000000000192934D
-:10133000FFFC02900008F70476600000000186BA06
-:101340000004F704765400000001C7386800F70570
-:101350007654F70476580000000107380001F705BD
-:101360007658F70475F8F6847658203A0000E601BE
-:10137000139DF6862C28F7042D380000000106384E
-:101380000001F6052D3877390002F502000F2032F2
-:101390000044E601139CB53A6802F0052D38F704C5
-:1013A0007608F684760007380001C03A6A00E60144
-:1013B00013B8F7057608F0057608F7047608F68482
-:1013C0007604F00575F8F58476F8C03A6A00470CA3
-:1013D0000001202E0021E2011414F70575FCF7042A
-:1013E0002D38F6862C2806380001F6052D38773979
-:1013F000000220320044E6011400B5BA6802F0058C
-:101400002D38F5020022F50576F8F5047700E001A5
-:101410001418F50576FCF00576FCF70475ECF50676
-:101420007218203A0000E6011440F5057648F704EA
-:1014300075F000000001203A0000E601145500009C
-:10144000000107880008E00115D09793FFFCE00138
-:1014500014C400000001F70475FC00000001203AEC
-:101460000000E6011471F68675F8E0011488F702B1
-:101470000000F70476080000000177390002C73841
-:101480006800873A001800000001203A0000E601D9
-:1014900014C5F7057660F7042D38F6862C28063833
-:1014A0000001F6052D3877390002F502000E2032D2
-:1014B0000044E60114BCB53A6802F0052D38F50683
-:1014C00072A4F50576488796FFFC8296FFF8021411
-:1014D0000000013C0000000000019293FFFC02901C
-:1014E0000008F70475EC00000001203A0000E60156
-:1014F0001540F40200008696000400000001F68505
-:1015000075EC8696000800000001F6857B3886960B
-:101510000000F7047648F6857B30F6867218C03AEC
-:101520006A00470C0001203A0000E6011541F40270
-:10153000000107880008E00115D09793FFFCF40232
-:1015400000018796FFFC8296FFF80214000C013C14
-:101550000000000000019293FFFC02900008F704D5
-:1015600075F400000001203A0000E60115BCF40209
-:1015700000008696000400000001F68575F086964E
-:10158000000800000001F6857B4886960000F704FD
-:101590007648F6857B40F6867218C03A6A00470C9A
-:1015A0000001203A0000E60115BDF40200010788A1
-:1015B0000008E00115D09793FFFCF4020001879624
-:1015C000FFFC8296FFF80214000C013C00000000B2
-:1015D00000019293FFFC02900008F70476FC0000E3
-:1015E0000001203A0000E60115FCF6820010F686A4
-:1015F0007648F68576FCE001160CF7020001F685C8
-:1016000076F8F6867648F6857700F7020000203AED
-:101610000000E6011620F68674D4E001162CF6854B
-:10162000764807880008E00116409793FFFC8796EC
-:10163000FFFC8296FFF802140000013C000000004D
-:1016400000019293FFFC02900008F60475F0000080
-:10165000000120320000E6011685F7020001F705BF
-:1016600075F4F6847B48F70576F4F7047B40C6B042
-:10167000680026B400049702FF6C9602FF50E00158
-:1016800016A800000001F70475ECF6847B38F5829B
-:101690000001F58576F4F6047B30C6B8680026B400
-:1016A00000049602FF6C9702FF509682FF58F58661
-:1016B00073BCF58576488796FFFC8296FFF8021486
-:1016C0000000013C0000000000019293FFFC02902A
-:1016D0000008F7047B280000000107380001F70527
-:1016E0007B28F70475F4F6847B28203A0000E60195
-:1016F000172100000001F00575F4F70475EC0000F7
-:101700000001203A0000E6011725F00575F0078872
-:101710000008E00116409793FFFCE00117EC000081
-:101720000001F00575ECF70475FC00000001203A9B
-:101730000000E6011741F68675F8E0011758F70238
-:101740000000F70476080000000177390002C7386E
-:101750006800873A001800000001203A0000E60106
-:101760001795F7057660F7042D38F6862C2806388D
-:101770000001F6052D3877390002F502000E2032FF
-:101780000044E601178CB53A6802F0052D38E001F7
-:101790001798F50672A4F5067218F5057648F584D3
-:1017A00076F800000001202E0021E20117E8F686FD
-:1017B0002C28F7042D380000000106380001F6053A
-:1017C0002D387739000220320044E60117D4B5BA2B
-:1017D0006802F0052D38F5020022F50576F8F504CB
-:1017E0007700E00117ECF50576FCF00576FC8796AE
-:1017F000FFFC8296FFF802140000013C000000008C
-:1018000000019293FFFC0290000822100038F704B8
-:1018100075EC00000001203A0000E60118340000D9
-:101820000001F70475F000000001203A0000E60115
-:1018300018490000000107880008E001164097934E
-:10184000FFFCE0011C7400000001F68476600000DB
-:1018500000018736000800000001703AFFE1E60150
-:10186000187DF48200009693FFFC07880008E000D2
-:1018700000BC9793FFFCE0011C70F3067560C3B4D5
-:101880000000841E0010F6844AA023140020931642
-:10189000FFC49416FFE09696FFD4851E0014F7044B
-:1018A0004A9C00000001C0367200EC0119689516D0
-:1018B000FFE477350001C738680077390002F30686
-:1018C0004A98C6B8300006B4000CC58400008736BC
-:1018D000000000000001C03A4200E60118F8C624EA
-:1018E00000008736000400000001C03A5200E60103
-:1018F00018FC20320000F602000120320000E60150
-:10190000190900000001F5820000863600008716E4
-:10191000FFE000000001C0327200E2011944F5024C
-:101920000000C0327200E601194C202A000086B681
-:1019300000048716FFE400000001C0367200E201D7
-:10194000194D202A0000F5020001202A0000E601BE
-:10195000195D202E0000F5820001202E0000E60116
-:10196000196C20260000F482000120260000E60108
-:1019700019A1F60200018716FFD4F3064A9876B93A
-:101980000001C6B4700076B50002C6B4300006B4DB
-:10199000001486B600009716FFD8E0011A14969638
-:1019A000FFDC2714002C9713FFFC8316FFC40000F4
-:1019B00000019313FFFCF3064A989313FFFC9396E0
-:1019C000FFCC07880008E00125689793FFFC839609
-:1019D000FFCC20220000E6011A11F6020001871652
-:1019E000FFD4F3064A9876B90001C6B4700076B504
-:1019F0000002C6B4300006B4001486B60000971684
-:101A0000FFD89696FFDCF7054AA0E0011A182032AD
-:101A10000000F602000020320000E6011A28F482DD
-:101A20000001E0011A80F48200008696FFD80000D1
-:101A3000000177350002C738680077390002F68662
-:101A400042C8A63A6802C73868007539001E752872
-:101A5000FFE505B8000286AE0000073800049716BF
-:101A6000FFECC63057C07630FFF09616FFF475AD28
-:101A7000001E75ACFFE5C6B45FC076B4FFF0969665
-:101A8000FFF020260000E6011A94F5820000E00134
-:101A90001B28F60200008696FFF000000001C73404
-:101AA0006800C49C7200C02E6A00EC011AF4C524C0
-:101AB0000000C62C00008716FFEC00000001A6B253
-:101AC000700205AC0001C73070007739001E77380E
-:101AD000FFE5C6B477C076B4FFF0F6AB2800052862
-:101AE00000028716FFF000000001C02E7200EC011A
-:101AF0001AB506300002F3020001F30576F4F6028F
-:101B000000018716FFF0869E0004C7387000C738B2
-:101B10004800C6B470008716FFF406B40020970290
-:101B2000FF6C9482FF509682FF5820320000E6013D
-:101B30001C6C00000001F704765CF58476F8073829
-:101B40000001F705765CF704765C202E0021E201A7
-:101B50001B8CF6862C28F7042D380000000106386F
-:101B60000001F6052D387739000220320044E601E5
-:101B70001B78B5BA6802F0052D38F3020022F30590
-:101B800076F8F3047700E0011B90F30576FCF0058E
-:101B900076FCF70475F800000001203A0000E60129
-:101BA0001BCDF6862C28F7042D38000000010638DE
-:101BB0000001F6052D3877390002F302000F2032BC
-:101BC0000044E6011BCCB33A6802F0052D38F70457
-:101BD0007608F684760007380001C03A6A00E6010C
-:101BE0001BE8F7057608F0057608F6847608F70412
-:101BF0007604F00575F8F60675F8C0367200470CE5
-:101C00000001203A0000E6011C15F70575FCE00113
-:101C10001C24F702000077350002C7386000873ABD
-:101C2000001800000001203A0000E6011C65F705DD
-:101C30007660F7042D38F30672A4F3057648F6862D
-:101C40002C2806380001F6052D3877390002F302FA
-:101C5000000E20320044E6011C74B33A6802E00131
-:101C60001C74F0052D38E0011C70F3067218F306A1
-:101C70007330F30576488796FFFC8296FFF80214CE
-:101C80000000013C0000000000019293FFFC029064
-:101C90000008F70676489713FFFCF70672189713AB
-:101CA000FFFC07880008E00014F49793FFFCF70698
-:101CB00076489713FFFCF70672A49713FFFC07887A
-:101CC0000008E00014F49793FFFCF706764897139A
-:101CD000FFFCF70673309713FFFC07880008E0004D
-:101CE00014F49793FFFCF70676489713FFFCF7066A
-:101CF00073BC9713FFFC07880008E00014F4979367
-:101D0000FFFCF70676489713FFFCF7067448971315
-:101D1000FFFC07880008E00014F49793FFFCF70627
-:101D200076489713FFFCF70674D49713FFFC0788D7
-:101D30000008E00014F49793FFFCF7067648971329
-:101D4000FFFCF70675609713FFFC07880008E000AA
-:101D500014F49793FFFC8796FFFC8296FFF8021419
-:101D60000000013C0000000000019293FFFC029083
-:101D70000008F68676689693FFFCF68677049693BD
-:101D8000FFFC07880008E00015489793FFFCF686E3
-:101D90001DD49693FFFC9013FFFCF686766896930D
-:101DA000FFFC07880008E000161C9793FFFCF70271
-:101DB0000022F70576F4F70576F8F00576FCF005D5
-:101DC00077008796FFFC8296FFF802140000013C22
-:101DD0000000000000019293FFFC02900008F7044D
-:101DE00076F400000001203A0022E6011E01000006
-:101DF00000019713FFFC07880008E0001584979303
-:101E0000FFFC8796FFFC8296FFF802140000013C5D
-:101E10000000000000019293FFFC02900008F7060A
-:101E200077049713FFFCF70676689713FFFC078883
-:101E30000008E00014F49793FFFC8796FFFC82965D
-:101E4000FFF802140000013C000000000001000047
-:101E500000009293FFFC02900008F686781096939B
-:101E6000FFFCF68678A49693FFFC07880008E00044
-:101E700015489793FFFCF6861FBC9693FFFCF682ED
-:101E800000149693FFFCF68678109693FFFC078863
-:101E90000008E000161C9793FFFCF005789C900268
-:101EA000FF34F7027FFFF70578A09702FF3087968F
-:101EB000FFFC8296FFF802140000013C00000000C5
-:101EC00000019293FFFC02900008F604789C8716AC
-:101ED000000084960008F5867710873A0008F68699
-:101EE000218C7539000477390002A73A6802203244
-:101EF0000000C6A8580084160004C63075809436C9
-:101F00000004B4AA580287360008F605789C073802
-:101F10000001E6011F2D973600088702FF30000000
-:101F20000001C03A4A00EE011F3500000001F485AF
-:101F300078A09482FF308796FFFC8296FFF8021407
-:101F4000000C013C0000000000019293FFFC029095
-:101F500000088596000000000001872E0008F68624
-:101F6000218C77390002A73A6802F604789CC704EE
-:101F7000760086AE0008C6307400F7067710F605C6
-:101F8000789C76B50004C6B470008736000820320D
-:101F9000000007380001E6011FA897360008F70285
-:101FA0007FFFF70578A09702FF308796FFFC8296A7
-:101FB000FFF802140004013C0000000000019293AD
-:101FC000FFFC0290000822100008F704789C000033
-:101FD0000001203A0000E60120D1F6027FFF9616AC
-:101FE000FFF4F6842D40F606771026B4000177350D
-:101FF0000004C4B86000C338000074350002F6065F
-:102000007710C0266200EC0120C1F606218CF38413
-:10201000789CA722600200000001C01E7400E60147
-:1020200020B10000000186A60000F70478A000009F
-:102030000001C6B4720020360000EE01209896A67A
-:102040000000F7042D38F6067710C5186000F686F4
-:102050002C28862A000405B80001F5852D3877392B
-:102060000002202E0044E6012070B63A6802F00516
-:102070002D38862A000800000001962A000CF6067A
-:10208000218CA722600200000001C7047600C71C53
-:102090007400E00120B0F705789C8616FFF400007C
-:1020A0000001C0366200EC0120B0000000019696ED
-:1020B000FFF424A4001023180010E0011FFC2420CA
-:1020C00000048616FFF400000001F60578A09602D1
-:1020D000FF308796FFFC8296FFF802140000013C57
-:1020E0000000000000019293FFFC02900008871698
-:1020F000000000000001873A0008F6867710773963
-:102100000004C738680086BA000C873A000800004F
-:102110000001C0367200440C00018796FFFC8296D5
-:10212000FFF802140004013C00000000000192933B
-:10213000FFFC02900008F702000F203A0000EC01BB
-:10214000215DF68677189036000027380001C60416
-:102150000000C03A6200E601214406B40010F60611
-:1021600078A49613FFFCF60678109613FFFC0788F8
-:102170000008E00014F49793FFFC8796FFFC82961A
-:10218000FFF802140000013C000000000001000004
-:102190000001000000020000000400000008000030
-:1021A000001000000020000000400000008000003F
-:1021B0000100000002000000040000000800000010
-:1021C000100000002000000040000000800000001F
-:1021D00000009293FFFC02900008F70678B0971376
-:1021E000FFFCF70679CC9713FFFC07880008E00096
-:1021F00015489793FFFCF706222C9713FFFCF70274
-:1022000000159713FFFCF70678B09713FFFC0788BB
-:102210000008E000161C9793FFFC8796FFFC82964F
-:10222000FFF802140000013C00000000000192933E
-:10223000FFFC02900008F6846F440000000187361E
-:10224000000000000001203A0002E6012270F602C0
-:10225000000087360EF486B60EF800000001C03A82
-:102260006A00470C0001203A0000E6012278203283
-:102270000000F602000120320000E6012294000076
-:102280000001F70432E800000001203A0000E601F6
-:1022900022B1F58203E80F814000F70479C80000FD
-:1022A000000107380001F70579C8F70479C8F582FD
-:1022B00003E89593FFFCF58200159593FFFCF586E6
-:1022C00079CC9593FFFC07880008E0011EC0979326
-:1022D000FFFC8796FFFC8296FFF802140000013C89
-:1022E0000000000000019293FFFC02900008F70636
-:1022F00079CC9713FFFCF70678B09713FFFC07889B
-:102300000008E00014F49793FFFCF70679CC9713CC
-:10231000FFFCF706793C9713FFFC07880008E000F4
-:1023200014F49793FFFC8796FFFC8296FFF8021443
-:102330000000013C000000000001C13C0000021050
-:1023400000049293FFFC029000082210000C859676
-:1023500000000000000186AE0004000000012036ED
-:102360000000E60123842714000C872E00040000DF
-:10237000000107380001972E0004872E0004E001B9
-:1023800024349696FFF49713FFFC85160004000092
-:1023900000019513FFFC9593FFFC9596FFEC0788D1
-:1023A0000008E00125689793FFFC8596FFEC20224A
-:1023B0000000E60124340000000186AE0004861609
-:1023C000FFF400000001C0366200EE0124217735E1
-:1023D0000001C738680077390002C6B85800773165
-:1023E0000001C738600077390002C73858008536C9
-:1023F0000000000000019536000C85360004000046
-:102400000001953600108536000800000001953661
-:10241000001426B4000CC0367200EE0123EC00005C
-:102420000001872E00040000000107380001972EEC
-:102430000004872E00048696FFF485160004773585
-:102440000001C738680077390002C72C7000852A60
-:10245000000000000001953A000C85160004000001
-:102460000001852A000400000001953A001085163D
-:102470000008F4020001953A001496AE0008879611
-:10248000FFFC8296FFF80214000C013C00000000E3
-:1024900000019293FFFC029000082210000C859628
-:1024A000000000000001842E000400000001202232
-:1024B0000000E60125552714000C9713FFFC851634
-:1024C0000004000000019513FFFC9593FFFC959616
-:1024D000FFEC07880008E00125689793FFFC8596CC
-:1024E000FFEC20220000E6012555000000018616C1
-:1024F000FFF40000000120320000EE012545773195
-:102500000001C6AC0000C738600077390002C73848
-:10251000580085360018000000019536000C8536FD
-:10252000001C0000000195360010853600200000D8
-:1025300000019536001406B4000CC0367200EC01A0
-:10254000251100000001872E0004F4020001273845
-:102550000001972E00048796FFFC8296FFF8021474
-:102560000008013C0000000000019293FFFC029073
-:102570000008221000088396000483160000C5009E
-:102580000000841A0004C4A800009416FFF4C026BA
-:102590004200E60126D1000000018316FFF400008E
-:1025A0000001C02A3200E60126D1C7204A00951654
-:1025B000FFF476B8FFE1C73868007739FFFFC5241C
-:1025C000700077290001C738500077390002831660
-:1025D0000000869E0000C5B8300005AC000C872EB8
-:1025E0000000C6000000C0367200E601261020324E
-:1025F0000000869E0004872E000400000001C03603
-:102600007200E601261020320000F602000120329E
-:102610000000E601262500000001C7000000E001DF
-:102620002678203A0000869E0000872E00000000D9
-:102630000001C0367200E201265C00000001E601E4
-:10264000266420320000869E0004872E00040000CD
-:102650000001C0367200E201266520320000F60259
-:102660000001203200004704FFFFE6012679203AEE
-:102670000000F7020001203A0000E60126B1203AEE
-:102680000000EE0126A0203A00014304FFFFC03AFB
-:102690003200E60126C9C0264200E0012590000074
-:1026A0000001E60126C1C0264200E001259000009D
-:1026B000000183160008F4020001E00126E0951AEB
-:1026C0000000E001258CC4A80000E001258CC4288E
-:1026D00000008316000800000001941A0000C400E6
-:1026E00000008796FFFC8296FFF80214000C013C64
-:1026F000000000000001000000009293FFFC029027
-:102700000008859600048416000084960008F702ED
-:102710000003C6A04D80C6B67400E6012771C6202E
-:10272000000020360002E60127A0C5204800C7208F
-:10273000480027380002C0227200E201279CC538F9
-:102740000000872E000076AD001E76B4FFE5C73886
-:102750006FC07738FFF0F733280006300002C03230
-:102760005200E201274105AC0002E00127A0C5208C
-:102770004800C720480027380004C0227200E20148
-:1027800027A0C520480083AD00040000000193B1DC
-:102790000004C0327200E201278500000001C5205C
-:1027A0004800C0325200E40127D50000000186AE87
-:1027B0000000772D001E7738FFE5C6B477C076B5E8
-:1027C000FFE8F6B3680006300001C0325200E401B1
-:1027D00027AC05AC00018796FFFC8296FFF8021437
-:1027E000000C013C0000000000019293FFFC0290ED
-:1027F0000008841600008696000400000001C7222D
-:102800006D80E601281020360000E0012874C438ED
-:102810000000F7020001EE012841F602000076B543
-:10282000000120360000EE01281C77390001E0018C
-:10283000284420220000742100017738FFFF063071
-:10284000000120220000EE012834203A0000E601B9
-:10285000287100000001C0226A00E4012864000021
-:102860000001C4206A00773AFFFFE601285476B4DD
-:10287000FFFFD42007628796FFFC8296FFF80214C0
-:102880000008013C0000000000019293FFFC029050
-:10289000000822100004E00128CCF70629DC86BAE3
-:1028A00000000000000120360000E60128C90000F9
-:1028B00000019716FFF407880008C13400009793C1
-:1028C000FFFC8716FFF40000000127380004F6061D
-:1028D00029E0C03A6200E401289D000000018796CB
-:1028E000FFFC8296FFF802140000013C000000008B
-:1028F00000019293FFFC0290000822100004E00106
-:102900002934F706299886BA000000000001203615
-:102910000000E6012931000000019716FFF4078846
-:102920000008C13400009793FFFC8716FFF40000F5
-:10293000000107380004F60629E0C03A6200E4010D
-:102940002904000000018796FFFC8296FFF802141C
-:102950000000013C0000000000019293FFFC029087
-:102960000008F7047B5000000001203A0000E60157
-:102970002984F6820001F6857B5007880008E00173
-:1029800028F09793FFFC8796FFFC8296FFF80214CD
-:102990000000013C00000000000100000B4C0000A2
-:1029A0000000000042880000000000005E500000AF
-:1029B00000000000C7A80000000000010BD00000CC
-:1029C000000000011C880000000000011E1400002F
-:1029D00000000001212C00000000000122E40000A2
-:0229E0000000F5
-:00000001FF
-/* This is the Myrinet MCP code for LANai4.x */
-/* Generated by cat $MYRI_HOME/lib/lanai/mcp4.dat > myri_code4.h */
diff --git a/firmware/ositech/Xilinx7OD.bin.ihex b/firmware/ositech/Xilinx7OD.bin.ihex
deleted file mode 100644
index 03e80857a549..000000000000
--- a/firmware/ositech/Xilinx7OD.bin.ihex
+++ /dev/null
@@ -1,177 +0,0 @@
-:10000000FF04A036F3ECFFFFFFDFFBFFF3FFFFFF72
-:10001000EF3FFFF7FFFFFFFFEF7FFEFFCEFEFEFE8D
-:10002000FEDEBDDDFDFFFDCFF7BF7FFF7F3FFEBFE3
-:10003000FFFFFFBCFFFFBDB57F7FBFBF7FFFEFFFAF
-:10004000FFFFFBFFF7F7FFFFFFFFFEDEFEFEFADE1E
-:10005000BDFDEDFDFDCFEFEFEFEFC7DFDFDFDFDF52
-:10006000FF7EFEFD7D6DEEFE7CFBF4FBCFDBDFFF54
-:10007000FFBB7FFF7FFFF7FF9EBF3BBFBF7F7F7F41
-:100080007E6FDFEFF5F6FDF6F5EDEBFFEFEFEF7EC0
-:100090007F7F6F7FFFFEFEFEFEFEEFBFFFFFFFFFD5
-:1000A000FFFFFFFFFFFFBC1F1FEEFFBCB7FFDFFF1F
-:1000B000DFEF3BE3D3FFFBFFFFDFFFFFFFBABF2D07
-:1000C000DBBDFDDBDFFAFBFFEFFBDBF3FFDFFD7FDB
-:1000D000EFFBFFFFBEBF27BAFEFBDFFFF6FFFFEF20
-:1000E000FBDBF3D99A3FFFAFBFFFFFBE3F37BD96A3
-:1000F000FFFFFFFFFFFFAEFBF3F3EBFFFFFFFFFF91
-:10010000FFF7FABCAEFEBEFEBB7FFDFF7FEFF7FB45
-:10011000BBD7F77FFFF7FFFFF7BCEDFDBD9D7D7BF4
-:10012000FB7B7BFBAFFFFEFDFDFEFEFFFFFFFFF74E
-:10013000AAB9BF8FBFDFFF7FFFFF7FCFFBEBCBEB0A
-:10014000EEFFFFD7FFFFFF3E333F1C7CFCFFFFFFAE
-:10015000FFFFCFD3F3E3F3FBFFFFFFFFFFEBFE3522
-:100160003F3DFDFDFFFFFFBFFFEF6FE3E3E3EFFF69
-:10017000FFDFFFFFF7FE3E5EFEFFFFFFFFFDFFFF1D
-:10018000AFCFF2CBCF8EFFFFFFFFFFFDFC3E1F9EE8
-:10019000ADFDFFFFBFFFFFEFFFB3F7E7F7FAFFFF8C
-:1001A000FFFFFFEEEBABAF9FE37FFFDEFF7FEEFFD6
-:1001B000FFFB3AFAFFF277FFFFF7FEFFFEBDAEDE70
-:1001C0007D7DFDFFBFEEFFFDFFDBFBFFF7EFFBFFDC
-:1001D000FFFEFF2DAFB9FD79FBFAFFBFEFFFFF91E7
-:1001E000FAFBDFF7F7FFFFFFFCCF37BFBFFF7F7FD3
-:1001F000FFFFFFAFFFFFF3FBFBFFF5EFFFFFF7FA9A
-:10020000FFFFEEFAFEFB55DDFF7FAFFEFFFBFBF5C8
-:10021000FFF7EFFFFFFFBEBDBDBDBD7D7B7B7B7BE1
-:10022000FBAEFFFDFEFFFFFFFFFFFFFFF7DAB76149
-:10023000FFB959F373F3DF7F6FDFEFF7EBEBD7FF16
-:10024000D7FFFFF7FE7FFB3E3873F67FFCFFFFCF43
-:10025000FFB7FBB3B367FFE7FDFFEFF67FB7BCF572
-:100260007BF6F7F5FFFFEFFFF7FFF7CEE7FF9FFF06
-:10027000FFF5FE7DFF5FFFFFFFFFFFFFFFEFFFF6D4
-:10028000CBDBEEFEFFDFFFFFFFFE7FBE1E3EFEFF6D
-:100290007DFEFFFFEFBFE7FFE3E3FFDFE7FFFFFFC9
-:1002A000B8EFB72FEEFFDFFFBFFF7FEFEBBFA3D3AA
-:1002B000FF7FFFFFFFFFF7BEFD3FCFFDFBFFFFFF0F
-:1002C000FFFFAFFBBFBBBFDBFDFBFFFFFFFF3EFE42
-:1002D0003FBABAFEFFFFFFEFFFEFC37FB29BFFFF06
-:1002E000FFFFFEFFFF3CFF3F3CFFFEFFFFFFFFFF66
-:1002F000AFF3FEF3E3EBFFFFFFFBFFF79AFEAF9ECA
-:10030000BEFEFFDFFFFF7BEFF7BFFBFBFBFFFF7FC7
-:10031000FFFFFFBCBDFDBDDD7D7B7B7B7BFBAEFFBF
-:10032000FFFFFEFEFFFDFFFFFFF79AFF9FFFAFEF0E
-:10033000FFFFFFFF7FCFF3FFEBFFEBFFFFBFFFFFF1
-:10034000EFFEFF37FCBFFFFFFFFFFFFFCFEFFDF327
-:10035000FFEEFEFFFFFFFFFF6EFD2FFDFFFDFFFF26
-:10036000FFFFFFEFCFFFF3BF69FFFFFFFFFFFFFEC0
-:10037000FB9FFFBFFDFFFFFFFFFFEF87FEDAEFCF21
-:10038000FFFFFFFFFFFFFEEFBFEFEFFDFFFFFFFFF0
-:10039000FFEFFDFF7BFFEBFEFFFFFFFFEBF8FFEF43
-:1003A000AFFFFFBDFFFFFF7FEE7FEFFFBBFFBFFB98
-:1003B000FFFFFFF7F6FBBDFDDDF5FFFFFFFFFFAF22
-:1003C000FF5FF5DFFF7FFFFFFFFFFFF6F3FFDEFEBE
-:1003D000EFFDFFFFFFFFEFFFDEDF5FDFFDFFFFFF52
-:1003E000FFFFFEFFFFFEFEFFFDFFFFFFFFAFFFFF72
-:1003F000EFEDFFDFFFFFFBFFFFDABDBEAEFE7FFDCF
-:10040000DFFFFF7FEFFFFBFBFB7FF7FFFFFFFFF748
-:10041000BCFDBDBDBDFD7B7B7B7BFBAEFFFFFDFF60
-:10042000FFFFFDFFFFFFFFFA9FBFBFCF7FFFFFFF73
-:10043000FFFFAFFFEBEBEBFFD7FEFFFFBFE7FEBF1A
-:100440007FFCFFFFEDFFFFFFFF4FFFFBFBFFFFDD2B
-:10045000FFFFFFFFFFFEBDDF9DFDDFB9FFFFFFFFD9
-:10046000EFFFFBEFEBFFDEFFFFFFFFFFF69FFFFC61
-:10047000FEFBFDFFFFFFFFEFDFFACDCFBF9FFFFFCA
-:10048000FFFFF7FEBFFFDFEF5FFFFFFFFF7F6FFFA5
-:10049000BBFDFFFFFFFFFFFFFFFF7EFF5FFFBFBF53
-:1004A000F9FFFFFF7F6E7BFFEFFDEBDFFFFFFFFF3D
-:1004B000F7B63EFCFDBF7EFBFFFFFFF7EFF7F3F75C
-:1004C000FFFBFFFFFFFFFFFF6E3579FFBFFCFFFF64
-:1004D000FFFFFFEFFB53DFFFEBBFFFFFFFFFFFBCA3
-:1004E000FFFFFFBFFFFDFFFFFFFFAFF5FFF7FFFBC4
-:1004F000FFFFFFFFFFFFBAAAEEFE3F7DFDFFFFFFFC
-:100500007FAF77FBFBFFFBF7FFFFFFFFF7BEBDBD34
-:10051000BDBDFD7B7B7B7BFBAEFFEFFFFFFFFFFCE9
-:10052000FFFFFFFF9AD9B8FFFF79FFFFFFFFFFCF63
-:10053000FBFFEBFFEBD7FFFFFFFFE7DEF8FBFE3F24
-:10054000FBFDFFFFFFFFCFADBFFAFF73DFFFFFFF34
-:10055000FFFF3AF5B7FC3FF9FDFFFFFF7FEFF3FF29
-:10056000BFFEF39FFEFFFFFFF73EFFFFFFBFFFFF52
-:10057000FFFFFFFFAFD3FEDBFFDBDFFFFFFFFFFF70
-:100580003EFFBFFF7FFFFDFFFFFFFF8FF3FFEDFF8C
-:10059000F7FBFFFFFFFFEFF63CFEFFFFFFFFFFFF54
-:1005A000FF9FEFEFD1FFFFFFFFFFFFFFFFFF7EBFCA
-:1005B000FDFFFFFFFFFFFFFFBBEFDFF1FFFFFFFFCF
-:1005C000FFFFFFFFFFEE3EFEFFFFFFFFFFFFFFBF4E
-:1005D000EFFDC3FFFFFFFFFFFFFFBFFFFC3EFEFF7E
-:1005E000FFFFFFFFFFFFFF2EEFF3FFFFFFFFFFFF08
-:1005F000FFFFF7BABEFEFFFFFFFFFFFFFF7FAFFB6E
-:10060000FBFDFFFFFFFEFFFFFFF2D6EDBDBDBD7D91
-:100610007B7B7B7BFBAFDFFFFFFFFFFFFFFFFFFF6E
-:10062000FF92BFFFFFFFFFFFFFFFFF7FAFEBEBFF7F
-:10063000FFFFFFFFFFFFFFE7FE2EFEFFFFFFFFFFB5
-:10064000FFFFFF4FEFF3FFFFFFFFFFFFFFFFFFFE87
-:100650003CFEFFFFFFFFFFFFFFFFEFCEC3FDFFFFED
-:10066000FFFFFFFFFFFFFE5DFFFFFFFFFFFFFFFF3D
-:10067000FFEFCFEBFFFFFFFFFFFFFFFFF7EE3EFFB8
-:10068000FFFFFFFFFFFFFF7FEFDFE2FFFFFFFBFF4B
-:10069000FFFFFFFFF6BEFCFFFFFFFFFFFFFF7FEE48
-:1006A0005FE6FFFFFFFFFFFFFFFFFF3E7DFFFFFF56
-:1006B000FFFFFFFFFFFFEFF3FBFFFFFFFFFFFFFF6A
-:1006C000BFF736BEFEFFFFFFFFFFFFFFFFEFD3F6D2
-:1006D000FEFFFFFFFFFFFFFFFFFC7FEEFFFFFFFFBF
-:1006E000FFFFFFFFAFEFEBFFFFFFFFFFFFFFFFFF8E
-:1006F000BABEFEFFFFFFFFFFFFFFFFEEFBFAFFFFAB
-:10070000FFFFFFFFFFFFF7D6FDBDBDBD7D7B7B7B00
-:100710007BFBAEFF7EFFFFFFFFFFFFFFFFF7BABFD0
-:10072000FFFFFFFFFFFFFFFF7FEFEB6BFFFFFFFF11
-:10073000FFFFFFFFF7FEBEFEFFFFFFFFFFFFFFFF14
-:100740004FEFF7FFFFFFFFFFFFFFFFEF3E6EFCFFE6
-:10075000FFFFFFFFFFFFFFEFC3C9FFFFFFFFFFFF2B
-:10076000FFFFFF3EBFFFFFFFFFFFFFFFFFFFEFFBAE
-:10077000D5FFFFFFFFFFFFFFFFFFFEFEFEFFFFFFB6
-:10078000FFFFFFFFFF6FEFFBFFFFFFFBFFFFFFFF21
-:10079000FFF6DFFFFFFFFFFFFFFF7FFEEFFFFFFF23
-:1007A000FFFFFFFFFFFFE7FFFEFFF7FFFFFFFFFF7A
-:1007B000FF7FFAEFBFFFFFFFFFFFFFFFFFE7FFFE37
-:1007C000FFFFFFFFFFFFFFFF7FFEEFBFFFFFFFFF0A
-:1007D000FFFFFFFFA7FFFCF7FFFFFFFFFFFFFF7F0C
-:1007E000FEAEFFFFFDFFFFFFFFFFFFE7F7FAFFFD94
-:1007F000FFFFFFFFFFFFFF7FAFFFFFFFFFFFFFFFD9
-:10080000FFFFFFF7BEBDBDBDBD7D7B7B7B7BFBAF2F
-:100810007FFFFFFFFFFFFFFFFFFFFFCAFFFFFFFF9D
-:10082000FFFFFFFFFF7F6FFFFFFFFFFFFFFFFFFFE8
-:10083000FFE7FEFFFFFFFFFFFFFFFFFFFFCFFEFF12
-:10084000FFFFFFFFFFFFFFFFFFFEDFFFFFFFFFFFD9
-:10085000FFFFFFFFEFFFFEFFFFFFFFFFFFFFFFFFB9
-:10086000FEFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFA9
-:10087000FFFFFFFFFFFFF7FEFFFFFFFFFFFFFFFF91
-:10088000FFFFEFFFFEFFFFFFFBFFFFFFFFE7F2FCB5
-:10089000EFFFFFFFFFFFFFFF7FAEEFFFFFFFFFFF59
-:1008A000FFFFFFFFF77EFDFFFFFFFFFFFFFFFFFFE3
-:1008B000EFFFFEFFFFFFBFFFFFFFBFFFFEFEFFFFDB
-:1008C000FFFFFFFFFFFFDFEFDDFEFFFFFFFFFFFF8B
-:1008D000FFFFFFFEFEFFFFFFFFFFFFFFFFFFAFEF8A
-:1008E000FFFFFFFFFFFFFFFFFFFFBAFEFFFFFFFF5E
-:1008F000FFFFFFFFFFEFFAFEFFFFFFFFFFFFFFFF1E
-:10090000F69CBDBDBDBD7D7B7B7B7BFBAEFFFFFF52
-:10091000FFFFFFFFFFFFFFF77AFFFFFFFFDFFFFF94
-:10092000FFFF6FEFF7FFFFFFDFFFFFFFFFFFF7FEA8
-:10093000FEFFFFFFDFFFFFFFFFFFCFEBFFFFFFFF2C
-:10094000FFFFFFFFFFEF9EFCFFFFFFFFFFFFFFFF2B
-:10095000FFEFEFFFFFFFFFFFFFFFFFFFFFFEFFFFC8
-:10096000FFFFFFFFFFFFFF7FEFCBFFFFFFFFFFFD5D
-:10097000FFFFFFFFBEFDFFFFFFFFFFFFFFFFFFEFDA
-:10098000EFFFFFFFDFFFFFFFFFFFFFF8FFFFFFFFAE
-:10099000BFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFB7
-:1009A000FFFFFEFFFFFFFFFFFFFFFFFFFBAF7FFF2C
-:1009B000FFFFDFFFFFFFFFFFFFFEEFFFFFFFFFFF78
-:1009C000FFFFFFFFEFFFFFFFFFFFFFFFFFFFBFFF87
-:1009D000FEFFFFFFFFFFFFFFFFFFFFAEFFFFFFFF79
-:1009E000FFFFFFFFFFFFF7FAFFFFFFFFFFFFFFFF24
-:1009F000FF7FEFFFFFFFFFFFFFFFFFFFFFF7BCBD24
-:100A0000BDBDBD7D7B7B7B7BFBAFFFFFFFFFFFFFA2
-:100A1000FFFFFFFFF7FAFFFFFFFFFFFFFFFFFF7F73
-:100A2000AF7FFFFFFFFFFFFFFFFFFFEFFEFFFFFFB7
-:100A3000FFFFFFFFFFFFFFCFFFFFFFFFFFFFFFFFF6
-:100A4000FFFFFFFEFFFFFFFFFFFFFBFFFFFFEFFFCB
-:100A5000FFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFA7
-:100A6000FFFFFFFFFFEFFFFFFFFFFFFFBFFFFFFFE6
-:100A7000FFFCFFFFFFFFFFFFFFFFFFFFEFFFFFFF99
-:100A8000FFFFFBFFFFFFFFEFFEFF9F9F9F3F3F3FEB
-:100A90003F3FFFEFDFDFDFDFCFB7BFBFBFBFFFBC31
-:100AA000B99DBDBD7D7B7B7B7BFBEFD7F5F3F1D1A2
-:100AB00065E3E3E3A3FFFE7FFEDEDEFFBDBDBDBD5C
-:100AC000DFEFFBF7F3F3F3E7E7E7E7E7FBFEFFFF13
-:0A0AD000FFFFFFFFFFFFFFFFFFFF26
-:00000001FF
-This file contains the firmware of Seven of Diamonds from OSITECH.
-(Special thanks to Kevin MacPherson of OSITECH)
diff --git a/firmware/qlogic/1040.bin.ihex b/firmware/qlogic/1040.bin.ihex
deleted file mode 100644
index d1213307f713..000000000000
--- a/firmware/qlogic/1040.bin.ihex
+++ /dev/null
@@ -1,2111 +0,0 @@
-:1000000007410600001078003A1000005841000037
-:100010004320504F525947495448312039392035EF
-:100020004C51474F43494320524F4F50415249543E
-:100030004E4F49205053303130324920542F462002
-:100040007269776D726120655620726569736E6F93
-:1000500030202E3735362020432073756F74656D40
-:1000600020726F4E202E303050206F727564746392
-:100070004E202E6F2020313024200120FD0404204A
-:1000800082A005004800451038004B10780047104A
-:1000900028004B10B920121278004D10B9202222EE
-:1000A000C120080071201000C3700400C920FF782F
-:1000B00089208611C7705349CB702050CF70202003
-:1000C000D3700700003FD670C1200800192000003F
-:1000D0000920FFFE00210B20A5A5ECA1FF7F642DC8
-:1000E0006B200A0ADCADFF3F542B5B2050501421DB
-:1000F00086A2A5A54000BF1086A30F004000851072
-:100100006A2C5A2AC120000019200F0078006510BF
-:100110006A2C5A2AC12008000920FF7F482144295F
-:100120004B200A0ABCA9FF3F34273B205050142122
-:1001300086A20A0A4000A9104A283A26C1200400D3
-:100140000920FF3F34210B205050142186A250502B
-:100150004000AA1078008E114A283A26C09888A13B
-:1001600000102C210B20A5A5142186A2A5A54000D6
-:10017000BC100A258AA10010C1987800C1100A2578
-:100180007800C1106A2C5A2A30218AA14000282107
-:10019000A2A10052248424842484248424842484DA
-:1001A00092A1007909200000012031007810261D5D
-:1001B000182279200052A02F082411200000A92025
-:1001C0004000A4420981C000DC10F27E2885E67D53
-:1001D000EA7CEE7B8378000031203000CF7801018B
-:1001E0000B7802000F7802004F780300692040521C
-:1001F0000120FD04042082A00500480004113800FD
-:100200000011780008111B683C0078000A11A80052
-:1002100008111B683C001B682800076807000B6872
-:10022000FA000F68080013680500236800002768BB
-:100230000600176808002B6800001F681900692075
-:10024000805411202000092010000B680C080F6852
-:100250001900036800FD076818001A6A002DE8A05D
-:10026000080090A204000981C000221169200055F5
-:1002700009200200A9200001376800000B68400037
-:10028000F07B86A3FFFEC0004811176800011F68BD
-:10029000640078004C11176864001F680200E8AD24
-:1002A000100070005211780039110981C000371117
-:1002B0007810A72278103D497810B5197810334E80
-:1002C000003285A00D009020C370000090006C11DA
-:1002D000C07086A00200C0006C11781084127810E3
-:1002E0009611CC7805A0C0007A1178104F1D10002F
-:1002F000801168008011781086211000801168003C
-:1003000080117810B91AE0006C117810BA4C78009E
-:100310006C118E119011AC24AC24BE49BE49AC24A2
-:10032000AC2478008E11780090117800921178003A
-:1003300094116800011261200000186084A001007F
-:10034000C0000112147805A0C000A711100002120D
-:100350007800011209205B52042105A0C00001129F
-:10036000092064520B200000147986A14200C000CD
-:10037000CC1116780920625264210B20000018600D
-:10038000C6701460CA701C618CA100FF206084A03C
-:10039000FF0005A1CE7078109A197800FF1114782B
-:1003A00086A01800C000D3117810781617780000C6
-:1003B00009206252042165A04000EF117E0C9C6070
-:1003C00060207810171A7F0C9F60000078104E177D
-:1003D00009200C000760030178107619C000FB119A
-:1003E00078109A19092062520B20000009205C52F3
-:1003F00004210B20000005A04000FF110120054052
-:1004000078008612780084127C00C3700000C770E8
-:100410000000CB700000CF700000C070BCA0C0FF17
-:10042000C00052123820790012128412E512A9126B
-:10043000FE120D131313A012661717139812AD12A4
-:10044000AF12B112B3126B179812291365139016DD
-:100450006017B512AF15CB15E7151216681576158E
-:100460008A159E15E913981297139D13A213A713CB
-:10047000AD13B213B713BC13C113C513DA13E613CC
-:100480009812981298129812F513FE130D14511425
-:100490005B146214A814B714C614D8144815581560
-:1004A00098129812981298125D15BCA0A0FFC00077
-:1004B0009812382084A01F0079005B12A417A71798
-:1004C000B7179812981231194E199812981298125B
-:1004D00052195A199812981298129812DB12F412A3
-:1004E0001F135B1386168217961798124718601908
-:1004F0000D1917191B19291998129812CA72C67169
-:100500000120064078008612CE73CA72C67101209F
-:100510000040C27068008712612000001B6001006B
-:1005200091200050E0008F12E000911268009112BB
-:10053000912080407C00C370014078008712C37016
-:1005400006407800871299204100A1204100A9208F
-:100550000500A35378008412C470C37004007A00AD
-:100560007800841278008412780084127800841253
-:1005700091200080C3700000C7705349CB70205099
-:10058000CF702020D3700700003FD6707920000084
-:100590001B78010031203000592000102920570419
-:1005A0005120700461207204B920FFFFC1200000B7
-:1005B0009120005091208040780055047810C41B91
-:1005C000C0009C12D875DC74DA75DE747800E8120D
-:1005D000292000002025D071C873CC72C470781017
-:1005E000FE1A40008412C370024078008412781012
-:1005F000C41BC0009C12D875DC74DA75DE747800F8
-:100600000113292000002025D071C873CC72C4705A
-:1006100078105E1B40008412C37002407800841280
-:10062000C471C87014210A2078008212C471142188
-:1006300078008212C7700700CB704100CF700600AF
-:10064000780084127810C41BC0009C12D875DC7628
-:10065000DA75DE7678002C13292000003025C4706E
-:10066000C872CC73D074C670CA72CE73D27405A02F
-:10067000400055130AA440003C13C80046130180F3
-:10068000927884A000FC40004A13CC7885A0010039
-:10069000CE7801200540780086129A7A9E7BA27D52
-:1006A000A67E967CCC7884A0FCFFCE787800591387
-:1006B000CC7885A00100CE78780084127810C41B15
-:1006C000C0009C12D875DC76DA75DE767800681387
-:1006D000292000003025C470C872CC73D474C67051
-:1006E000CA72CE73D67405A0400091130AA44000CC
-:1006F0007813C80082130180AE7884A000FC40000B
-:100700008613CC7885A00001CE78012005407800C2
-:100710008612B67ABA7BBE7DC27EB27CCC7884A0CB
-:10072000FFFCCE7878009513CC7885A00001CE78B8
-:1007300078008412092061520C21EC7A7800821230
-:10074000092041520C2178008312092042520C21C9
-:1007500078008312612040520C611062780082128E
-:10076000092045520C2178008312092046520C21A1
-:1007700078008312092048520C2178008312092046
-:1007800049520C217800831208790C7A7800821281
-:10079000C471078184A00F00038003800380E8A058
-:1007A0008054006A046884A008004000D713086BD6
-:1007B0007800D8130C6B78008112C4777810C519B3
-:1007C000912000801C6B146A91200180082778001A
-:1007D00081124C7978008312C4777810C519912062
-:1007E00000800869186A106B9120018078008112DE
-:1007F000C47182A11000C8007C1278107F23780099
-:100800008112C47182A11000C8007C1211204152D3
-:1008100004227E001221781038237F017800831291
-:10082000C47119200001042382A0060048001B1493
-:1008300011204914A920080078001F141120411428
-:10084000A9200800042206A140002A14108270008A
-:10085000281478001F1478007C12042382A006005C
-:100860004800331492A249147800351492A241141E
-:100870007E0211204252042212217F017E00781054
-:1008800044237F0178008312E803FA00F401EE02AA
-:100890006400190032004B00E803FA00F401EE0294
-:1008A0000400010002000300612040520C6110624C
-:1008B000C4700E60C87012607800821261204052CD
-:1008C0001461C47016607800831261204052C471B4
-:1008D000112004001F6019001920121286A128009F
-:1008E00040008314112005001F6019001920121206
-:1008F00086A1320040008314112006001F600C0006
-:100900001920222286A13C00C0007C1218607E00C3
-:100910001A61007884A00100C0009E140120FD042B
-:10092000042082A005004800961438009A1478002C
-:100930009E1428009A1478009E1419202222780010
-:10094000A01419201212B823781055237810334EB2
-:100950007F0178008312C47184A1CFFFC0007C1294
-:1009600011204852042212217E00781077237F0143
-:1009700078008312C47182A11000C8007C1211207B
-:10098000495204227E001221781066237F017800EC
-:100990008312C471C87284A1FDFFC0007B1284A2BF
-:1009A000FDFFC0007B12002108790A7800220C7A32
-:1009B0000E7878008212C471078184A00F00038032
-:1009C00003800380E8A0805419200000C872BCD2C4
-:1009D0004000E9149DA31000B4D24000EE149DA382
-:1009E000080000687E0026A240001115026A84A457
-:1009F00000204000FA149DA3100084A400104000C1
-:100A000000159DA3080084A40040400011150F812B
-:100A100084A2004040000D1578109923780011152C
-:100A200078108B2378001115CC72086806A240005C
-:100A30004015A4A2FF0061204052186186A1280041
-:100A40004000271586A1320040002D1586A13C00EC
-:100A50004000331582A4640048003D157800371526
-:100A600082A4500048003D157800371582A4430049
-:100A700048003D15C471C6717F02CA7278007D12AC
-:100A80000A6A9DA30A00046805A306687F020C6B2E
-:100A9000C47178008112C4777810C5199120008044
-:100AA000146A1C6B91200180C8701668CC701E6897
-:100AB000082778008112C4704C794E787800831230
-:100AC000C471C872CC7382A11000C8007C12781067
-:100AD000A72378008112C4777810C519912000806F
-:100AE000086A95A202000A6A91200180082778000E
-:100AF0008212C4777810C51991200080086A94A2E8
-:100B0000F9FF0A6A046805A04000851578106F2275
-:100B100091200180082778008212C4777810C519C7
-:100B200091200080086A95A204000A6A046805A062
-:100B30004000991578106F229120018008277800D5
-:100B40008212C47741200100492005005120200075
-:100B5000912000807810D219912001800827086A1E
-:100B600078008212C477C872CC73C677CA72CE730B
-:100B70007810521AC000C715186805A04000C715A4
-:100B800008277810B723C000C715177815009120E3
-:100B900001807C009120018078008412C477C677A0
-:100BA0004120210049200500512020009120008093
-:100BB0007810D219612040526F6003008267936001
-:100BC0000F00736000001778160078106F229120D4
-:100BD00001807C00C877CA77C477C677BCA700FFBE
-:100BE00091200080612040526F600200736000001D
-:100BF000826793600F001778170078106F2291209A
-:100C00000180412021004920040051201000912042
-:100C100000807810D219C8703668388784A71F0002
-:100C2000C0000616912001807C00CC7884A00300CF
-:100C3000C000361639200000412021004920040060
-:100C4000512008007810C5199120008008680DA86F
-:100C50000A6991200180388784A71F00C0001F16F1
-:100C6000BCA700FF3F8738873F8784A7000FC000DD
-:100C70001F169120008069200001306884A0400088
-:100C800040005F164B680400A9201400486884A047
-:100C9000040040004C1670004C16780043164B6858
-:100CA0000900A9201400486884A0010040005916DA
-:100CB0007000591678005016A920FA0070005F16CF
-:100CC00078005B1679200052177818006120405296
-:100CD0006F6001007360000093600F00CC7885A006
-:100CE0000200CE78086884A0FDFF0A681B684800EF
-:100CF000912001807C00CC7884A0FDFFCE7884A078
-:100D00000100C000821678109C1AC471C6714A791D
-:100D10007C007810C41BC0009C12D875DC74DA7596
-:100D2000DE7478009316292000002025C471C87352
-:100D3000CC72C671CA73CE727920005291200080A5
-:100D4000781080199120018040004A17A9200500E1
-:100D5000A120185291200080A141912001800920FA
-:100D6000200078107B194000B61678109A19780088
-:100D70004A17046084A000FF07800980400019170B
-:100D80007E0C682C912000807810801991200180C1
-:100D90004000EA16002C9E680981C000BE169F60C4
-:100DA00000007F0C7E0C18721C7320742475682C54
-:100DB0009C6865A0400018170920200078107B1956
-:100DC000C0000117046084A0FF0086A00200C000DC
-:100DD000EA16002D02607800D0167F0C7E0C9C6015
-:100DE00060207810171A7F0C9F60000078104E1753
-:100DF00009200C00086085A000020A6078107619AE
-:100E000078109A1978004A177F0C7E0C9C6060203D
-:100E10007810171A7F0C9F60000078104E17092079
-:100E20000C00076003011B6003007810761978102E
-:100E30009A1978004A177F0CC474C873CC72146076
-:100E400091200080177812007E0E712040526F7042
-:100E500005007370000076737A727E7482708770FA
-:100E60000000002C8A708F7000002EA030251C61BD
-:100E7000A26184A1600040003C177810D3487F0E27
-:100E80009665A6659A66AA66AF600000B36000002A
-:100E900078106F22912001807C00C370054078009B
-:100EA0008712A920050099201852912000800A532A
-:100EB00091200180002110A299A30000A1A40000AC
-:100EC000A9A500007C00C471C770000006797800F5
-:100ED0008412C471C671682178006D1769200010F2
-:100EE0000C6916A0042D10A2688D0981C0006F172F
-:100EF00085A20000C0007D17C370004078007F17F6
-:100F0000C3700340CA7078008712112067520C2208
-:100F1000C470038048008F177810513C84A1FF7F74
-:100F2000780093177810443C85A100801220780047
-:100F30008312C47178103B3C006101206752042089
-:100F400084A000800DA10462086378008112E47916
-:100F500078008312C471C6719821A1204200A92093
-:100F60000400A353A02199204200A9200400A35308
-:100F700078008412C470682079200052912000808B
-:100F8000781080199120018040004318076001000B
-:100F90000B6000002B6000001B600600106A8CA232
-:100FA0000F0084A2F000038003800380038005A16A
-:100FB000166084A200084000DE171B600A0078005B
-:100FC000E41784A200104000E4171B600C0084A208
-:100FD00000034000ED172B600100048004800480B2
-:100FE00085A001001E60236000002760000084A22D
-:100FF00000044000FA172B600000A920060080AC16
-:101000000B00A02080AD05009820A35384A200030C
-:10101000C0000F1846604A604E60526096609A6049
-:10102000780019180068466004684A60086E4E66C9
-:101030000C6D526596659A66146091200080177851
-:101040004200082C612040526F6005007360000070
-:10105000776000007B6000007F60000082608A6132
-:1010600084A200048E60912001807E0E71202000F9
-:1010700007700A0007700200037000007F0E9120C5
-:10108000008078106F22912001807C00C3700540A1
-:10109000780087127E0C7E0D7E0E7E0F91200080E0
-:1010A000712040527920000161201000A0706DA0D5
-:1010B00040000319046A94A2FF0086A207004000C2
-:1010C000621886A20F00C00003191C6984A1C00029
-:1010D0004000031984A18000C000D318246884A0B4
-:1010E00000FF85A019002668B071FF8140008918B3
-:1010F0007E0D69202000076810000869086806A1B5
-:10110000C0007A180C690C6806A1C0007F1884A181
-:10111000FF00C0007F187F0DB87884A01F80C0003A
-:101120008918487885A00C004A78B071FF8140008A
-:10113000AC18B37000007E0D69202000076818000D
-:10114000046884A00800C0009D18076808000468AF
-:1011500084A00800C000A418076802007F0DC461C5
-:10116000C862CC63C661CA62CE637E0E7120005233
-:1011700066726A7380AE19007F0E487884A00C00F6
-:10118000C000BA187810E147A3780000587884A00E
-:10119000FFED5A78B47080A0DA001A787F0F7F0EC6
-:1011A0007F0D7F0C9120018078008412246884A038
-:1011B00000FF85A019002668B87884A01F80C000B1
-:1011C000D918487885A00C004A78487884A00C008B
-:1011D000C000E218B071FF8140000119B370000037
-:1011E0007E0D6920200007681800046884A00800AC
-:1011F000C000F21807680800046884A00800C00056
-:10120000F918076802007F0D7800CB187F0F7F0E5A
-:101210007F0D7F0C9120018001200540780086120F
-:101220008079C671C47182A10300C8007C128279E2
-:10123000780084128079C671780084127479C6713E
-:10124000C47176797879CA71C8717A797C79CE71EE
-:10125000CC717E79780084127479C6717879CA71FC
-:101260007C79CE71780084120079C671C4710279DC
-:101270000120FD04042082A0050048004019380028
-:10128000421978004C19A8004C198CA10100C0002B
-:101290004A19B920222278004C19B920121278007C
-:1012A00084120079C67178008412092074520421D6
-:1012B000C670C4700A207800841209207452042178
-:1012C000C67078008412C471078184A00F00038067
-:1012D00003800380E8A08054146AB4D240007119DE
-:1012E0001120010078007319112000000C6B7800A8
-:1012F000811280AC01007810801B7C0080AC010062
-:101300007810201B7C00507865A040008819042CC0
-:101310005278632000007C007E0F792000525078C4
-:101320006DA040009819042D5278036800000768EA
-:1013300000000B6800007F0F7C00912000807E0F72
-:101340007920005250786220002C05A0C000A71917
-:1013500078108C2452787F0F912001807C007E0FC2
-:101360007920005250786A20002D52787F0F7C003F
-:1013700011200079527AEC7B19834000C21980A2B7
-:101380003100122010207800B919132000007C00D1
-:1013900084A7000F0B8084A71F00038003800380B5
-:1013A000038005A1E8A000557C007810C51900292C
-:1013B0002A68002A2E68086884A0EFFF0DA80A6931
-:1013C000092052520C21046805A04000041A16A1FD
-:1013D000C000EF196020006006687E010B2000004D
-:1013E0007800F219092000007E01046865A0400021
-:1013F000011A006006687810311A7810CB1C10684A
-:1014000001801268C000F2197F01026906697C0040
-:1014100065A04000161A08209C6005A04000131A21
-:1014200062209F60000065A07800091A5078527908
-:1014300062207C0065A04000301A08209C6005A056
-:101440004000251A62209F60000065A078001B1AEA
-:101450007E0F7920005291200080507852797F0FC2
-:101460006220912001807C00076003018F600000F2
-:10147000A9201C0080AC0500A02001200000A44091
-:1014800028681A602C6822607C007E0E7120405211
-:101490004C708CA00002C000501A88A080520A2D07
-:1014A00000804E7006A07F0E7C007810C519912038
-:1014B000008004681E7865A040009B1A7800631ABB
-:1014C000002C1E78006065A040009B1A0C6006A3EB
-:1014D000C0005D1A106006A2C0005D1A282C012011
-:1014E0005252042006ACC000741A7800991A04689D
-:1014F00006ACC000811A006065A00668C0008B1AA7
-:101500000368000078008B1A00641C786020026475
-:1015100086A40000C0008B1A002C02686025781099
-:10152000311A1B600500236020007810CB1C106866
-:10153000018050108C24126885A0FFFF7C003920A8
-:101540000000412021004920040051200800912082
-:1015500000807810D219388784A71F00C000A61A0F
-:10156000BCA700FF3F8738873F8784A7000FC000D4
-:10157000A61A912001807C0061200000186084A0E0
-:101580000100C000CA1A91200080E078E3780000D2
-:101590009120018005A0C000CB1A7C008CA0F0FF38
-:1015A0004000D11A78108C247900D31AE31AE61A75
-:1015B000EC1AF01AE41AF41AFA1AE41AE41A951C4E
-:1015C000B91CBD1CE41AE41AE41AE41A7C00781071
-:1015D0008C2478109C1A012001807800C31C012003
-:1015E00003807800C31C012004807800C31C78109D
-:1015F0009C1A012006807800C31C01200780780017
-:10160000C31C3020382182A721004800061B092076
-:10161000200000267810201BC0001F1BBAA7200046
-:1016200048001E1B40001E1B0827B0A6200090A2E9
-:10163000400099A30000A1A40000A9A50000780023
-:10164000001B06A07C00FF8140005B1B992030003E
-:10165000A0200C7084A0FF004000321B0770040023
-:10166000047084A00400C0002D1BA8211770000086
-:101670000B8112711A721E73227426750C7885A064
-:1016800001000270077001000120FD04042082A007
-:101690000500C8004F1B09202200042184A000403F
-:1016A000C000411B08700B80C800411B077002007E
-:1016B0008CA0E001C0005B1BA55306A003700000D6
-:1016C0007C003020382182A721004800661B0920B9
-:1016D000200000267810801BC0007F1BBAA72000C6
-:1016E00048007E1B40007E1B0827B0A6200090A269
-:1016F000400099A30000A1A40000A9A50000780063
-:10170000601B06A07C00FF814000C11B9820A12027
-:1017100030000C7084A0FF004000921B0770040092
-:10172000047084A00400C0008D1BA8211770000065
-:101730000B8112711A721E73227426750C7885A0A3
-:1017400000000270A653077001000120FD04042070
-:1017500082A00500C800B01B09202200042184A03B
-:101760000040C000A21B107084A000F04000B91B14
-:10177000077008007800BD1B08710381C800A21B18
-:101780000770020084A1E001037000007C000120CA
-:10179000FD04042082A00400C800CD1B7800D01BEB
-:1017A00006A07800D21B85A001007C007E0E71206F
-:1017B0000052082D5870026805A0C000DD1B5E7144
-:1017C0005A717F0E7C00082C5878026005A0C0007A
-:1017D000E71B5E795A797C009120008014617810B3
-:1017E0008021006984A10001C000352084A100028D
-:1017F000C00031201C6805A0C0003D20036000002F
-:10180000082C5C7865A0C000051C5A797800061C7D
-:1018100002615E799120018078108C227C007E0E1E
-:101820007120005258706DA040001A1C00685A7058
-:1018300005A0C000191C5E70FF8D7F0E7C007E0D20
-:101840007E0C7E0F7920005280AF16006020006071
-:1018500005A04000431C6820146806A3C000331C88
-:10186000286884A0FF0006A44000361C602D780084
-:10187000241C006805A00260C000421C80AF160056
-:1018800006AC4000411C002C5E78002D7F0F7F0CC1
-:101890007F0D05A07C007E0D7E0C7E0F792000520E
-:1018A00080AF16006020006005A040006B1C68201F
-:1018B000146884A0FF0006A340005E1C602D780021
-:1018C000501C006805A00260C0006A1C80AF1600B2
-:1018D00006AC4000691C002C5E78002D7F0F7F0C49
-:1018E0007F0D05A07C007E0D7E0C7E0F79200052BE
-:1018F00080AF1600602000606DA04000901C14684E
-:1019000006A34000831C602D7800781C006805A0A9
-:101910000260C0008F1C80AF160006AC40008E1C19
-:10192000002C5E78002D7F0F7F0C7F0D05A07C00C2
-:101930009120008069204052006886A0000040008D
-:10194000A31C91200180E37809007C008068BCA082
-:1019500000FF412021004920040051201000781090
-:10196000D219388784A71F00C000AC1C91200180C9
-:1019700001200A807800C31C01200C807800C31C61
-:1019800078109C1A01200D807800C31CC270612061
-:1019900000001B600100912080407C000460082C46
-:1019A00063200000847800808678887805A08A7992
-:1019B0004000DA1C022C7800DB1C8E797C00076862
-:1019C00003017E0C61200052082D6B200000846012
-:1019D00000808660886005A08A614000EF1C022DAF
-:1019E0007800F01C8E617F0C7C007810031D400095
-:1019F000021D7E0C9C6065A04000FD1C7810171A2B
-:101A00007F0C9F60000078109A197C008C7865A08C
-:101A10004000151D91200080847801808678042C78
-:101A20008E7805A0C000131D8A7800809120018067
-:101A30007C00A920100006A0048086808E81C8004A
-:101A40001F1D00A27000231D78001A1D86808E8144
-:101A50007C007E15A920100005A04000491D1AA198
-:101A6000C800491D13828D8148003A1D1AA1C80083
-:101A70003B1D7000411D78002F1D1AA10823108204
-:101A80007000411D78002F1D7E00003284A0FFF7FA
-:101A900080207F007F157C007E00003285A000083A
-:101AA0007800451D9479D07006A14000BD1D91209D
-:101AB000008071202000047005A0C000BD1D0870CA
-:101AC000087206A2C000BD1D86A20800C000BD1D90
-:101AD00071201000781080194000BD1D9C7A987B01
-:101AE000A47CA07D84A100FF40008B1D312000005C
-:101AF0000B81B5860B81B5860B81B5860B81B586CA
-:101B00000B81B5860B81B586002110A2002619A392
-:101B1000A1A40000A9A500007800951D07810480FC
-:101B2000048010A299A30000A1A40000A9A50000B0
-:101B30000920200078107B19912001804000B41DFD
-:101B400078109A19A8780080AA7886A00200C000B0
-:101B5000BD1D91200080E3780200AB780000CC78B6
-:101B600085A00300CE78912001807800BD1DAB7860
-:101B7000000078104921046084A00F007900C21D84
-:101B800071201000912001807C00D21DF41D1A1ECE
-:101B9000D21D371EE11DC91FE41FD21DEE1D141EEC
-:101BA0007F1EEE1E571F691FE01F39200004DC78DE
-:101BB00005A7DE78086005A70A60781064209C609D
-:101BC000DA78781031217C00DC7884A000014000B4
-:101BD000E81D7800D21D1C6085A080001E60780082
-:101BE000FB1D7810C41BC000D21D78106321DC7867
-:101BF00084A000014000FB1D7800D21DDF780000AA
-:101C00000460078084A0FF00D27801809F600000FC
-:101C10004000111E781064204000111EDC7885A061
-:101C20000001DE787800131E781088207C00781080
-:101C3000C41BC000D21D78105F21DC788CA0000E80
-:101C4000C000231E84A00001C000251E7800D21D04
-:101C500078106420C000361E04618CA1FF0086A1AC
-:101C600007004000212086A10F00400021207810AD
-:101C700088207C00DC7884A0000140003E1E7800B3
-:101C8000D21DDF780000146711200100A920010097
-:101C9000186084A0FF0005A04000611E1120010013
-:101CA000BCA700FFA92020008EA001004000611EFB
-:101CB0003920000011200200A92000018EA002009E
-:101CC0004000611E78007C1E7810C51991200080AC
-:101CD0002B6800002F680000086884A0DEFF0A68F7
-:101CE000E8AD1000912001807000751E7800631E21
-:101CF000118240007C1EA92000017800631E78102C
-:101D00009A197C0001206752042084A000804000C2
-:101D10004920146178108021006984A101004000ED
-:101D2000A01E286084A0FF00C0004120006884A09D
-:101D3000010040004920036800000B6800000768AC
-:101D4000000078005120112001002060F4D04000F4
-:101D5000A81E95A20200C4D04000AD1E95A20800A6
-:101D6000CCD04000B21E95A200041C6084A00200EA
-:101D70004000B91E95A204002C608CA0FF0082A137
-:101D8000020048004D2082A11B00C8004D204000E9
-:101D90004D200E692C6007808CA0FF0082A10200FC
-:101DA00048004D2082A11B00C8004D2040004D205E
-:101DB0001269306005A0C000DC1E01201E000080FA
-:101DC0001668286084A0FF0040004920066828604B
-:101DD000078084A0FF00400049200A68026A78005A
-:101DE000512001204052042086A00700C000531F4C
-:101DF00001206752042084A0008040004920146123
-:101E0000781080210120525204201020FF824000CF
-:101E10000E1F80A00500042084A0FF0006A1C000C2
-:101E2000531F91200080046A086B186484A4030087
-:101E300040002D1F28618CA1FF000180C000231FDE
-:101E4000002110A24800531F78002D1F0180C00000
-:101E5000531F002112A24800531FFF824000531F4E
-:101E600084A40C004000471F28610F818CA1FF0053
-:101E700082A00400C0003F1F002118A34800531F88
-:101E80007800471F82A00400C000531F00211AA33E
-:101E90004800531F306005A040004D1F00801668A9
-:101EA000066A0A6B91200180780051209120018000
-:101EB00078004D2014617810802191200080086BFB
-:101EC00018834800651F0A6B91200180780060200C
-:101ED0009120018078004D202460078084A0FF00BD
-:101EE0004000871F86A08000C000C71FA9200800EF
-:101EF0006920107691200080006884A0FFFC0268B1
-:101F0000E8AD08007000831F7800791F91200180E0
-:101F100078005120286015A04000C71F1461781078
-:101F200080217E0C7E0DE8AD0700912000800068C6
-:101F30000DA04000C31F06A240009E1F682178002C
-:101F4000941F602100600268682C7810AC197F0D26
-:101F500018680DA04000BB1F602000621A6A1C6A4E
-:101F600002621E6878108919A02D9821A9203100DD
-:101F7000A353602D7810CB1C7800BE1F086800802A
-:101F80000A68912001807F0C7800602091200180F8
-:101F90007F0D7F0C78004920146178108021006843
-:101FA00084A001004000392091200080046A108242
-:101FB0004800DC1F066A9120018078006020912093
-:101FC000018078004D207810C41BC000D21D146120
-:101FD00078108021BE60BB600000006984A1080009
-:101FE0004000F31F206085A00001226084A1010051
-:101FF0004000492084A10001C000352084A10002D6
-:10200000C00031201C6805A0C0003D20046084A0F1
-:10201000FF0086A00F00C0000C2078106321DF783D
-:1020200000000460078084A0FF00D27801809F60D8
-:102030000000400021207810642040002120DC783E
-:1020400085A00001DE787C00D7780000DB780000F6
-:10205000246084A000FF26607810AC3A40004F1D39
-:102060007810E91B78004F1D0920170078005320D5
-:1020700009200E0078005320092007007800532023
-:10208000092035007800532009203E0078005320B5
-:10209000092004007800532009200600780053200E
-:1020A000092016007800532009200100246084A034
-:1020B00000FF05A12660912000807810CB1C9120A4
-:1020C000018078004F1D78109A1978004F1DD47840
-:1020D0006DA0C0006F20002CD678DA789F600000D9
-:1020E00078007B20002C9E689F600000D678002D31
-:1020F0000260D87806ADC0007B200260D0780180F5
-:10210000D278C0008720DC7884A0FFFEDE78D87803
-:10211000602006A07C002EA030251C61A26184A155
-:10212000FFE11E6084A16000400097207E0E7810C1
-:10213000D3487F0E9665A6659A66AA66AF600000D2
-:10214000B360000014677810C51991200080A0606A
-:1021500084A00080C000BE20086884A00100400068
-:10216000BE20912001807810311A912000807810D3
-:10217000CB1C91200180D7780000DB78000078002C
-:102180003021246096A00100C000C5200080266098
-:10219000106A14689120018002A24800D4204000F7
-:1021A000D420392000027810312178003021082C09
-:1021B00091200080A06084A0008040000121006880
-:1021C00065A040000621046A7E0E71204052007016
-:1021D00084A001004000FB20487006A2C000FB2044
-:1021E000046B1C2360210263002305A0C000F620BD
-:1021F0000269602202617F0E78000D216021026277
-:1022000006697F0E78000D21006865A04000062158
-:1022100002610269C0000A210669602103600000B2
-:102220006021A06084A0008040001721086884A07D
-:10223000FCFF0A681068008012689120018008681D
-:102240008CA040004000262186A040000A6878103B
-:10225000421A9120008078106F2291200180DB7853
-:102260000000D77800007C00086005A70A60912074
-:1022700000807810CB1C91200180D87865A04000A8
-:1022800044219C60DA789F60000078003421D77880
-:102290000000DB7800007C009079947800800AA12F
-:1022A000C800502106A09678D270047805A040009E
-:1022B0005E2101800678C0005E2168005E219120C9
-:1022C00080407C00392077217800652139207D21EC
-:1022D000042705A04000762100AC6820086B0C6C38
-:1022E0001069146A0A690E6A126B166C38877800D6
-:1022F00065217C00030009000F0015001B00000091
-:1023000015001B0000007E0C78103B3C682C7F0CF5
-:102310007C001000F7216800F72129200000CB780D
-:1023200000008C7865A04000F0210920745204213F
-:1023300084A001004000BE21046086A00301C0000B
-:10234000BE21186005A0C000BE21146005A0C00019
-:10235000BE217E0D69200000186884A00100C00025
-:10236000BD210C60C6701060CA70C37020801B68ED
-:102370000100912080407F0D7810F21C7800F5213B
-:102380007F0D7810F8214000F021046294A2FF0034
-:1023900096A203004000D021046296A21001C00062
-:1023A000DE21CB780100046294A200FF1782118223
-:1023B0004000DE21FF85C000F021108202A2C8008B
-:1023C000F0217E05781007227F054000EB21E078A0
-:1023D00086A003004000F0217800DE212885C8781F
-:1023E00005A040008E21FF854000F721912080400C
-:1023F000B078D6707C00AC7BB079D47002A1C000FC
-:102400000122002305A07C004800052202A37C00D5
-:1024100002807C000120FD04042082A00500C80089
-:1024200021229120008071202000047005A0C000AE
-:1024300056220870087206A2C000562286A2080022
-:10244000C00056227120100078105B220920200065
-:10245000046086A00301C0003022286005A0C000EF
-:10246000302209200C007810761940004922C478E7
-:102470000080C67886A00200C0005622912000800D
-:10248000E3780300C7780000CC7885A00003CE78FD
-:102490009120018078005622C77800007810F21C45
-:1024A000AC79B07800800AA1C800542206A0B278A6
-:1024B00006A071201000912001807C00078104801B
-:1024C0000480B87AB47BC07CBC7D10A299A30000C4
-:1024D000A1A40000A9A500007C0009205B52912066
-:1024E00000800A207E0F7E0E71204052007086A070
-:1024F0000000C000892209201252042105A0C0005A
-:10250000892279200001307884A0C000C00089228F
-:10251000180089221B784B007F0E7F0F7C007E0FF6
-:102520007E0E7120405291200080007086A0000035
-:10253000C000A22279200001307884A0C000C00031
-:10254000A2221800A2221B784D00912001807F0E4C
-:102550007F0F7C007E129120002371204052792051
-:1025600000014B780F009800B52238787800AE2231
-:10257000A9204000007882A004004800BE22A920C3
-:1025800060009B780000AF780000AF78000070001A
-:10259000C8227800C022007882A004004800D72218
-:1025A000B77093001920F04F781013232F7001801B
-:1025B0007800E322B77000001920704E78101323C2
-:1025C0001920AF4E781013232F7000800370000085
-:1025D00078102024047084A00F007E010920FD04DF
-:1025E0000C218AA105004800F8223800FE2285A0AF
-:1025F0008062780000232800FE2285A08062780097
-:10260000002385A0C0627F0106780F7804B243786A
-:10261000D800537880000B7808004770080053708A
-:102620007F524F7000007F1200207C007E137E14CA
-:102630007E157E04A1202B01042305A09A7840007A
-:1026400033231883242318839823A82484A400FF09
-:1026500040002B2382A40001A92000012020A653C2
-:1026600005A0C00022231833780019237F047F15AA
-:102670007F147F137C008CA10F0011200101042224
-:1026800084A0F0FF05A11220781020247C001120E6
-:102690000101A92009000B8170004D237800482317
-:1026A0008CA1000E042284A0FFF105A112207C0061
-:1026B00009200101A9200500138270005E23780023
-:1026C000592394A2E000042184A01FFF05A20A2040
-:1026D0007C0011200101A9200C000B8170006F23E8
-:1026E00078006A238CA100F0042284A0FF0F05A1CA
-:1026F00012207C0011200201042284A0CFFF05A13A
-:1027000012207C000381038080A020007E0C6120C9
-:1027100000019A60AC62AC637F0C7C000381038093
-:1027200080A022007E0C612000019A60A46084A039
-:10273000DFFFAE607F0C7C000381038080A022005D
-:102740007E0C612000019A60A46085A02000AE602C
-:102750007F0C7C000381038080A020007E0C612020
-:1027600000019A60A460AE621020A460AE631820DD
-:102770007F0C7C00912000807E0C7E0E186805A0E6
-:102780004000FE2361200076781006244000E823F4
-:10279000A9200000612000757E0C781006244000FE
-:1027A000D6237F0C608C7000D4237800C923780076
-:1027B000FE237F0082A000757120405286708271D6
-:1027C000012004006E7093700F0073700000781089
-:1027D0006A227800FA23C06005A0C000FE237120A1
-:1027E00040528271002C8A70012006006E70937036
-:1027F0000F007370000078106A220120000078003A
-:102800000024012001009120018005A07F0E7F0C93
-:102810007C00042C05A040001D2460200C6006A351
-:10282000C0001A24106006A2C0001A24146006A179
-:10283000C0001A2406A078001F2400607800072436
-:1028400085A001007C00112041520C228CA10F00B8
-:1028500011203B01042284A00001400036242120E5
-:1028600004FF22210B810B810B810B818DA1000FB5
-:1028700004217C007E0EE4688CA0200040008A24A5
-:1028800084A00600C0008A241460078084A00F0082
-:10289000038003800380F0A08054047084A00A00A9
-:1028A000C0008A24087194A100FF40008A248CA1F2
-:1028B000FF0001200C0006A140007124012012003D
-:1028C00006A1400075240120140006A140007924CF
-:1028D0000120190006A140007D240120320006A13C
-:1028E0004000812478008524092012007800872484
-:1028F0000920140078008724092019007800872413
-:10290000092020007800872409203F0078008724D0
-:1029100011200000002105A20A707F0E7C006800D3
-:102920008C2491200080712000007E00187084A00B
-:102930000100C00093247F0071201000CA707F0046
-:10294000C670C3700280DB704107DF700600712023
-:1029500000001B700100912080407800AA247E10A6
-:102960007E007E12912000233C7F587E307C387D93
-:10297000C277C674CA76CE7594A53F009CA40300A6
-:1029800084A40F007900C124D324D324D3240D2898
-:10299000093AD12402250C25D124D124D124D124D3
-:1029A000D124D124D124D12478108C24078584A06B
-:1029B0001F007900D82416250D28C729C42AEC2A1F
-:1029C0008C2D37309A30FB3080313832D6320225A8
-:1029D000E9280C30F824AC3DCC3D8F3F9B3F744040
-:1029E000F824F82449414D41AA3DF824FA3EF82440
-:1029F0005E3C0C25F82478108C241800B1247F123A
-:102A0000912001807F007F107C001920494F7810B1
-:102A100013232F7001001B784F007800FA2419202F
-:102A2000AF4E781013232F7000801B78CD007800F4
-:102A3000FA24427209200F520B20000084A50100E5
-:102A4000C000723C4000332578108C2403700000D5
-:102A50004B70000043700000377000007810E039C0
-:102A60001800B12409200F520B200000687005A047
-:102A7000C000FE256C7084A0070079003C25352637
-:102A8000442550256D258F25DC25B5254425781056
-:102A9000C839092048007810D82EC0004E25037090
-:102AA00004007800FA247810C839C0006B258070C3
-:102AB000078082789B781000AB780C009B786000D0
-:102AC000AB7801005B7804000920DD007810CC2E83
-:102AD000C0006B250370040093700F007800FA2487
-:102AE0007810C839C0008D258071078182789B7865
-:102AF00010008CA11F008DA1C000AA79AB78060040
-:102B00009B786000AB7802005B7804000920DD0050
-:102B10007810CC2EC0008D250370040093700F0038
-:102B20007800FA247810C839C000B3258071078175
-:102B300082789B7810008CA11F008DA1C000AA791B
-:102B4000AB7820008471AA79AB780D009B78600087
-:102B5000AB7804005B7804000920DD007810CC2EEF
-:102B6000C000B3250370040093700F007800FA24AE
-:102B70007810C839C000DA258071078182789B7887
-:102B800010008CA11F008DA1C000AA79AB780600AF
-:102B90009B786000AB7802005B7804000920DD00C0
-:102BA0007810CC2EC000DA2588708B700000682069
-:102BB0004A700370020093700F007800FA247810B6
-:102BC000C839C000FA2488706820146F7810BD38A6
-:102BD000502C78107A3A9B781000146884A01F005B
-:102BE00085A08000AA781C6E412001008C7084A012
-:102BF0000004012004004000FC25012006007800AC
-:102C00001D277810C839C000FA249B78100068701E
-:102C10006820146F7810BD38502C78107A3A08600C
-:102C200085A010000A60246805A040001C2682A030
-:102C3000060048001A2678001C2627680500146B39
-:102C40009CA31F009DA3C000587084A0008040007A
-:102C50002A2684A6010040002C269CA3BFFFAA7B45
-:102C600031202000412001000120030078001D27B1
-:102C70001800B1244C7485A4000040004F2680A0A9
-:102C800080523020507108812AA148004626092030
-:102C9000805264210465FF85C00060262184C00045
-:102CA00040265271037000004B700000407005A078
-:102CB0004000723C7800FA244C76B0A680525071E5
-:102CC000002678004B265271682558254A75502CED
-:102CD000346085A00000C0005D2608673A7784A7AD
-:102CE0003F034000962684A72100C0005D2684A7EC
-:102CF000020040007F2684A7040040005D26BCA798
-:102D0000FBFF0A6784A70800C0005D2684A71000A7
-:102D1000C0005D2684A70002C0005D2684A70001D4
-:102D200040009626186005A0C0005D26BCA7FFFEE7
-:102D30000A67236800001C6E84A60E00186140001C
-:102D4000A6261C6002A14800A9264000A9267800FA
-:102D50005926FF81C0005926C368000084A780005F
-:102D6000C000B1260C702260BCA77FFF0A677810F4
-:102D70007A3A1800B1249B78100046A07810C83920
-:102D8000C000FA24146B9CA31F009DA3C0005870C0
-:102D900084A000804000CD2684A601004000CF26FC
-:102DA0009CA3BFFF84A610004000D5269DA3200051
-:102DB000AA7B408884A60E00C000E026BDA71000B4
-:102DC0000A6778001B2758718CA100084000CB349B
-:102DD0001120200084A60800C000F126108284A6DD
-:102DE0000200C000F1261082AA7A40887810E039EB
-:102DF000146A0C6108818CA1FF00E0A10075642CAD
-:102E0000FF8C40001227146006A2C000FC26B860A8
-:102E10000180BA60C000F7267E0C602A086085A099
-:102E200000010A607F0C780035267810C839C00090
-:102E3000FA24602A0E61AA794088327101200100CB
-:102E40007E005C7184A118004000382784A1100026
-:102E500040002B277810D036C0005B2784A10800E3
-:102E600040003827A06984A10006C00038277810E8
-:102E7000BB3578005B27A06984A1000840004F277C
-:102E80007E0C7E026029006085A000200260046143
-:102E90008DA1100006617F027F0C7810D036C00033
-:102EA0005B27A06984A100024000572778100C36E8
-:102EB00078005B2784A10004C0003427A06984A1A6
-:102EC00000104000662714698CA100FF0F81781064
-:102ED0008B237F0002708CA6E00084A66000400077
-:102EE000742786A06000C00074278DA10040FF8871
-:102EF000400079278DA104005A79B6699B7860005B
-:102F00000028AA789B78610018688DA0008084A0B2
-:102F1000FF7F1A698CA680004000982797700000F8
-:102F20008AA00D00500096278AA00C0096710120FF
-:102F30000C000C809A71AA7808800C814000D13472
-:102F40008CA1F800C000D1347E157E137E14A12020
-:102F50002B019B7800000080AC8080AD0B00982096
-:102F6000A6537F147F137F15146807808278946DB1
-:102F7000D67DDE7D986ED27EDA7E7810C839C000AC
-:102F8000CF272C7003804800C8271920AF4E781037
-:102F900013232F700080307884A0C000C000CF279A
-:102FA0009800D727086084A0EFFF0A607810E03906
-:102FB00078002325007284A2070086A00100C000CB
-:102FC000E4271B784F007810E0397800F527B46AC1
-:102FD00095A200205A7A1B784F007810E0390072D1
-:102FE000002505A64000F52784A2070079100328D4
-:102FF00080AD0900367084A2070086A00100C000E1
-:10300000FA24186000801A607800FA240B284B4BD1
-:103010004B4B3A4B4B4B0B283A4B0B2878108C24DC
-:103020007810C8397E0F79200052CC787F0F84A0A9
-:103030000100400031286C7086A00100C0002028EB
-:103040006E707800C4286C7086A00500C0002F2820
-:10305000887068201B68040017680000206885A03D
-:10306000080022686F700000112004006C7186A1B6
-:1030700001004000522886A10700C0004228092014
-:1030800038520B20050078005228092013520421E1
-:10309000092012520A20092038520B2001006F70BB
-:1030A000000073700100780054286F7000007810E1
-:1030B00087487E15A9201000392000007810B0370D
-:1030C000B8A700017000632878005B287F150070A6
-:1030D0007900672895287C287C286F2895289528D2
-:1030E0009528952821205A52042405A040009528AF
-:1030F00006ADC0007C280068222078008C2820685B
-:1031000084A00100C0008828146F7810BD387810A2
-:10311000A23478008C2860706020006802601A6A0F
-:1031200017680000206885A0080022687810DC1C61
-:10313000212000767810D12821205A527810D128E9
-:103140007E15A9200000212000757810D128208448
-:103150007000A9287800A2286120005521200200D3
-:10316000A920000118601061FF814000B82802A169
-:103170005000B82812601B600000E0AC1000700026
-:10318000C0287800AF282184C000AD287F159C702E
-:1031900084A000804000CB287810CE3A0370000055
-:1031A0004B7000007800FA247E04042405A040003F
-:1031B000E528682000687E001A6A17680000206809
-:1031C00085A0080022687810DC1C7F007800D328D6
-:1031D0007F04232000007C0082A203005000EF281F
-:1031E00078108C2400237900F228F5286829852995
-:1031F00082A202004000FB2878108C246C706F7053
-:10320000000093700000790002290A290A290C297C
-:103210004029D7340A2940290A2978108C2480773C
-:103220007810B0378077BCA7000F7810BD381860D1
-:1032300005A0400037292120007609200400112034
-:1032400010007810A029400037297E15A920000021
-:10325000212000757E040920040011201000781040
-:10326000A0297F0440003629208470003629780088
-:1032700027297F15388784A71F00C00012297800EE
-:1032800023257800232580777810BD38186005A0A5
-:103290004000662921200076092005001120200029
-:1032A0007810A029400066297E15A9200000212061
-:1032B00000757E0409200500112020007810A02947
-:1032C0007F04400065292084700065297800562914
-:1032D0007F1578002325002279006B296E2970293B
-:1032E000702978108C24092012006C7086A00200CE
-:1032F0004000792909200E00186884A00080400051
-:103300007F291A696F7000007370010078005639C8
-:103310000022790088298D2970298B2978108C2426
-:1033200078108748007086A00100C00067347810CC
-:10333000B834086084A0EFFF0A6078105A34400067
-:10334000673478003526042405A04000C32968208E
-:10335000042D7E00146806A74000AF29202D7F00B1
-:103360007800A1297F0022201A69176800002068D0
-:1033700005A222687810DC1C1060018012600860D1
-:1033800084A0EFFF0A607810B8347C0085A00100AB
-:103390007800C22900237900CA29CF29CD29682ABB
-:1033A00078108C24EC7884A00100C000E329007020
-:1033B00086A00400C000DB297800062A7810B83403
-:1033C000086084A0EFFF0A6078006734E47805A005
-:1033D000D000062A1800FA24082084A03000C0007B
-:1033E000F2291B784F007800FA24EC7884A00300BF
-:1033F0004000EE29002184A007007900FC293F2A23
-:103400004A2A302A042ABB39BB39042A592A78109F
-:103410008C24007086A00400C000202A6C7086A056
-:103420000200C000162A11200200192000007800B6
-:10343000E9286C7086A006004000102A6C7086A0F7
-:1034400004004000102AE47984A1300040002A2AB8
-:10345000EC7884A00300C0002C2A78000C300120F6
-:1034600003007800A02D186884A000804000372A4F
-:103470001B681D0078108F372B7808301B7856009A
-:103480007800FA24186884A000804000462A1B684F
-:103490001D0078108F3778008639186884A0008066
-:1034A0004000512A1B681D0078108F372B78083098
-:1034B0001B78CA007800FA24186884A000804000B5
-:1034C000602A1B681D0078108F372B7808301B7816
-:1034D0008F007800FA2484A50F00C000852A0070B0
-:1034E00079006F2A2325792A772A6734673467346D
-:1034F0006734772A78108C247810B834086084A058
-:10350000EFFF0A6078105A3440006734780035269F
-:10351000E47805A0D000062A1800062A082084A016
-:103520003000C000942A1B784F007800FA24EC7811
-:1035300084A003004000902A002184A107007900A4
-:103540009E2AB02AB42AA82AA62ABB39BB39A62AA1
-:10355000B13978108C24781097372B7808301B7885
-:1035600056007800FA24781097377800863978105A
-:1035700097372B7808301B78CA007800FA24781027
-:1035800097372B7808301B788F007800FA240023B7
-:103590007900C72ACC2ACA2ACE2A78108C2478002F
-:1035A00080311B680800A3780000E47984A1300012
-:1035B00040008031EC7884A003004000803184A179
-:1035C00007007900E02AE82AB42A302A5639BB39A4
-:1035D000BB39E82AB13978106A397800FA2482A216
-:1035E00005005000F22A78108C2400237900F52A77
-:1035F000F82A4D2D5B2D00227900FB2A152B022B7A
-:10360000152B002B322D78108C249B781800A8786D
-:1036100084A0FF0082A0200048006B378AA004002D
-:10362000C8006B377900112B6B376B376B37193745
-:103630009B781800A87984A180004000262B780090
-:103640006B37007005A0C0001C2B1120040078000F
-:10365000E93284A1FF008AA01000C8006B3779000E
-:103660002E2B402B3E2B582B5C2B172C6B376B379C
-:10367000192C6B376B372E2D2E2D6B376B376B3725
-:10368000302D78108C2484A6001040004D2B012092
-:103690000005008000803A781B788D007800FA24BD
-:1036A000186884A000804000562B1B681D0078001D
-:1036B000442B780056391B681D0078007B37206941
-:1036C000226984A60018C0009D2B206884A00100F8
-:1036D000C000A52B186886A00800C0006E2B1B68D0
-:1036E000000084A600044000132C84A68000400043
-:1036F000992B97700000186884A03F008AA00D00E5
-:103700005000992B8AA00C00967101200C000C80AF
-:103710009A719B786100AA787E157E137E14A12091
-:103720002B019B7800000080AC8080AD0B009820BE
-:10373000A6537F147F137F151B7858007800FA2456
-:1037400084A600104000A52B1B7865007800FA24A1
-:1037500084A6600040000F2C84A6000840000F2CB7
-:1037600084A60080C000B32B7800CB2BB4A6FF7FCB
-:103770005A7EB66EDC7AD879D0781B80C800BE2B12
-:10378000008084A03F0008A191A20000986B002156
-:1037900002A3B268946B002203A3AE6884A6004023
-:1037A0004000D32BB4A6FFBF5A7EB66E007086A031
-:1037B0000300C000E02B78103D4978103A4B1B788D
-:1037C00064007800FA2406A07810414CB06AAC6915
-:1037D000986C946B002205A14000EF2B002222A4DC
-:1037E00000211BA3AA6CD27CDA7CA66BD67BDE7B85
-:1037F000002305A4C000012CB5A600405A7EB66E79
-:103800001B7864007800FA241B786400002215A15C
-:10381000C0000B2C78104B4B7800FA247810964B94
-:103820007800FA241B7865007800FA241B78580089
-:103830007800FA2478108C2478007A2C206984A1EE
-:1038400000014000312C8CA1FFFE22697E0C5470D7
-:103850006020006084A0FFEF0260046084A0F5FF98
-:1038600006607F0C7800692C84A100024000692C5E
-:103870008CA1FFFD22697E0C54706020006084A042
-:10388000FFDF0260046084A0EFFF06600820482C80
-:103890007F0C84A108004000692C7810B93878109A
-:1038A000BB35FF884000692C9B7860000028AA780F
-:1038B000587EB5A604005A7E84A60004C000632C7E
-:1038C0002B7808301B7856007800FA242B780830C3
-:1038D0001B7865007800FA24587E84A60004C00096
-:1038E000722C1B7858007800FA241B786500780049
-:1038F000FA24780073377800733719200000907924
-:103900008CA10700C000882C206884A00001400022
-:10391000782C092008009B781000A87894A0FF005C
-:1039200086A20100C000BF2C0023A87C00A41820A0
-:1039300002A14000B72C48009C2C7800B92C80A331
-:10394000020002A1C800B72C20698CA1FFFC2269EB
-:103950007E0C54706020006084A0EFEF0260046071
-:1039600084A0E5FF06607F0C587EB4A6FBFF5A7E5C
-:1039700078006A2C78001B2CA824A87AF000B92CB7
-:1039800078008A2C84A2F00086A02000C0001F2DA1
-:1039900018831883002302A14000CF2C4800CF2CAD
-:1039A00078001C2D86A223004000782C1C6884A07F
-:1039B000F1FF1E68587E84A6F1FF85A0100030201C
-:1039C0005A7E086085A010000A607E0C547060204A
-:1039D00004600820482C7F0C84A110004000F32CC8
-:1039E0007810B9387810D0367800022D7E0C5470DB
-:1039F000602004600820482C7F0C84A1080040004F
-:103A0000692C7810B9387810BB35FF884000692CD4
-:103A10009B7860000028AA78B5A604005A7E84A688
-:103A20000004C000162D2B7808301B785600780053
-:103A3000FA242B7808301B7865007800FA24A87ADD
-:103A400078008A2C1883002302A14000282D48000A
-:103A5000282D78008A2C84A28000C0007B37780053
-:103A6000733778007B3778006B379B781800A8781D
-:103A700084A0FF008EA0010040003D2D78108C2412
-:103A8000A87A94A2FF00A87884A0FF008AA004006E
-:103A9000C8006B377900492D6B3708356B376536B1
-:103AA00082A20000C000532D78108C2478108F372C
-:103AB0002B7808301B7865007800FA2482A2030076
-:103AC000C000612D78108C2484A40080C000842D57
-:103AD0006C7005A040006B2D78108C24146F8277D9
-:103AE000BCA7000F7810BD38086085A021000A60CF
-:103AF000388784A71F00C0006F2D781093376F7030
-:103B00000200092038520B2009007800862D781019
-:103B10009F372B7808301B7865007800FA2482A242
-:103B200004005000922D78108C2400237900952DEC
-:103B3000982D812EB42E86A2030040009E2D781071
-:103B40008C24012000007E00C06805A04000A72D45
-:103B500003700300A06884A000204000B02D08601E
-:103B600085A002000A607F003E70007084A00700FC
-:103B70007900B72D2325C12DC12DB62FF22F232576
-:103B8000F22FBF2D78108C2484A60010C000C92D00
-:103B90007810874840005B2E68788CA0FF004000BA
-:103BA000112E86A10800C000E02D7810B8340860FE
-:103BB00084A0EFFF0A6078105A344000112E78106C
-:103BC00087487800F82D86A12800C000112E7810B3
-:103BD0008748086084A0EFFF0A60186005A04000D5
-:103BE000F82D01801A6005A04000F82D018005A085
-:103BF0004000F82D1E60206884A0010040002325AD
-:103C0000206884A0FEFF226860707E0C602000683F
-:103C100002607F0C0460026805A0002DC0000E2E1B
-:103C200002600660780023257E017810E52E7F0172
-:103C300084A600DF1E682B680000146FFF8140001F
-:103C40005B2E86A10200C0005B2E84A60008C00087
-:103C50002E2E84A6600040002E2ED878DC7A2E68A6
-:103C6000326A206884A00008C0005B2E178794A2E7
-:103C70000F0013821382138290A2805490A200003E
-:103C80001C2284A30001C000442E78004A2E10821A
-:103C9000042285A018001220118284A30004400091
-:103CA000572EA06884A00001C000572E7810692FFD
-:103CB00078002325086085A002000A60166918684C
-:103CC00084A000804000632E3C701A688CA600DF40
-:103CD0001E697810A9347810B834C000702E0860BE
-:103CE00084A0EFFF0A60206884A00100C000792E44
-:103CF0007810A23478007D2E607060200068026029
-:103D00007810DC1C7800232582A204004800872E4E
-:103D100078108C24002279008A2E852E8E2E9B2EE0
-:103D20008E2E007086A005004000972E78108F37E9
-:103D30002B7808301B7865007800FA24907807808B
-:103D4000018084A0070080A018009A78A8798CA12F
-:103D5000FF0086A103004000B02E86A100004000B5
-:103D6000B02E78006B371B7865007800FA24206845
-:103D700085A004002268FF82C000BF2E78108F3714
-:103D80007800C62E11824000C42E78108C24781042
-:103D90009F372B7808301B7865007800FA242C7048
-:103DA00003804800D62E1920AF4E781013232F70B1
-:103DB00000807810E039307884A0C000C000E22E86
-:103DC0001800E22E1A7906A07C0085A001007C0074
-:103DD00084A66000C000EF2E2F680000336800004A
-:103DE0007800682F84A60008C000112FB46884A052
-:103DF000004835A684A60008C000112F9869946A6F
-:103E00002E69326A3C7005A0C000092F002205A16E
-:103E10004000102F3F701500007086A00600400083
-:103E2000102F781087487C0084A620004000332F94
-:103E300084A6004040001F2F2F6800003368000058
-:103E40007800092FB46884A0004835A684A60040F5
-:103E5000C000192F3C7005A0C0002D2F3F70150029
-:103E6000D879DC7A2E69326A7800092F84A600405E
-:103E700040003D2F2F680000336800007800092FB4
-:103E8000B46884A0004835A684A60040C000372F3F
-:103E90003C7005A0C0004B2F3F701500D879DC7A2C
-:103EA000D078FB80C800522F008084A03F0008A17A
-:103EB00091A200002E69326A002105A2C0005F2F86
-:103EC0007800092F007086A006004000682F781047
-:103ED000414C7800092F7C00086085A000020A6030
-:103EE00084A300024000752F086085A002000A60CC
-:103EF0001B6806008F68000093680000306A2C6918
-:103F00003E6A42692F68030033680000376820006A
-:103F1000976800009B682000B3680000AF6800004D
-:103F200000707900902F23259A2FA32F982F982F78
-:103F3000982F982F982F78108C24206884A0010047
-:103F4000C000A32F7810A2347800A92F6070502CE5
-:103F5000602000680260602A21205A52042405A0D3
-:103F60004000B22F20207800AB2F222D6B200000C4
-:103F70007C007810A9347810B834086084A0FFFD64
-:103F80000A602B6800009B780E00146F176802000F
-:103F90007810894C84A600084000CF2F1C698DA1A1
-:103FA00000201E69186884A000804000DF2F687818
-:103FB0008CA0FF004000DD2F1B681E007800DF2F63
-:103FC0001B68000021205A52042406AD4000E62F51
-:103FD000607400682220C36800003C6A4069326A4D
-:103FE0002E697810DC1C780023257810E52E2B68CC
-:103FF000000001200E00146F7810E6398CA0FF003D
-:104000001669186884A00080400005303C701A686A
-:104010008CA600DF1E696F700000780023250070F9
-:1040200005A0C00012307800232506A0781087482C
-:10403000176800001B6814008CA600DF1E692B683F
-:104040000000206885A0FF002268007079002530FC
-:1040500023252F302F3031303130313031302D3079
-:1040600078108C247810B834086084A0EFFF0A60C0
-:1040700078007234002379003A303D303F30983078
-:1040800078108C2484A60080C0007D3000707900F8
-:1040900046302325503050306C30503079306C3001
-:1040A0004E3078108C2484A6600086A06000C0008A
-:1040B0006830B4A6DFFFB4A6FFBFB5A600205A7EC5
-:1040C000B66E1C6884A0DFFF1E68781087487810E1
-:1040D0004B4B7800563984A6002040005A301868AF
-:1040E00084A00080400079301B68150084A6004041
-:1040F000400079301B68070078106A397800FA248C
-:10410000B4A6FF7F5A7EDC7AD879D078D2791B802A
-:10411000C8008830008084A03F0008A191A2000060
-:10412000986B002102A3B268946B002203A3AE68CF
-:104130001B7865007C0078108C24002379009D306A
-:10414000A030A230EB3078108C2484A60080C00010
-:10415000DA3000707900A9302325B330B330CF3086
-:10416000B330D630CF30B13078108C2484A66000C4
-:1041700086A06000C000CB30B4A6BFFFB4A6FFBFCE
-:10418000B5A600205A7EB66E1C6884A0BFFF1E68CC
-:104190007810874878104B4B7800563984A6002059
-:1041A0004000BD30186884A000804000D6301B68F5
-:1041B00007001B78CA007800FA24B4A6FF7F5A7E55
-:1041C000DC7AD879986B002102A3B268946B002244
-:1041D00003A3AE68D2791B7865007C00206885A0B7
-:1041E0000400226878102139B5A6000878108F37AE
-:1041F0002B7808301B7865007800FA2400237900BA
-:10420000FE3001310331053178108C2478007B3782
-:1042100084A60004C0002E31E47984A1200040006F
-:104220001531EC7884A00300400015312B7809305B
-:104230009B786000AB78000084A6FBFF5A78E47995
-:1042400084A1200040002631EC7884A00300C00047
-:104250002A31012014007800A02D84A107007900E4
-:104260006631907A94A207009B786000A879FF815C
-:10427000400064319B781000A87B84A30100C0003B
-:104280005531A87BA87B86A30100C00048310920D6
-:10429000F7FF78004E3186A30300C0005531092096
-:1042A000EFFF7E0C54706020046004A106607F0C58
-:1042B0009B786000AB78000084A6FBFF5A782B78CF
-:1042C000093020698CA1FFFD8CA1FFFE22697800D6
-:1042D00056393F2A4A2A703178316E316E3156395B
-:1042E000563978108C2420698CA1FFFD8CA1FFFE2B
-:1042F00022697800603920698CA1FFFD8CA1FFFE46
-:10430000226978005639E47984A1300040008A316E
-:10431000EC7884A00300C000B131007086A00400D6
-:10432000C000A4316C7086A00200C0009A31112038
-:104330000200192000007800E9286C7086A00600B1
-:10434000400094316C7086A00400400094310070ED
-:1043500086A000004000FA24186885A000801A6832
-:10436000012014007800A02D84A107007900B53148
-:1043700056395639BD315639BB39BB39563956399C
-:1043800084A680004000EC319471FF814000EC3144
-:1043900082A10D00D000CD31977000007800D2319D
-:1043A00082A10C00967009200C009B786100AA790C
-:1043B0007E157E137E149870148110A29A7280A0CC
-:1043C0000B0000AD9820A1202B019B7800000881F4
-:1043D000AC81A6537F147F137F157800603984A6C3
-:1043E0000004C0002D32206884A001004000603924
-:1043F0008CA6600084A660004000013286A06000A8
-:10440000C00001328DA100408CA1FBFF5A79B66932
-:104410009B786000AB7800009B786100186885A0ED
-:1044200000801A68AA7808800C814000D1348CA1E1
-:10443000F800C000D1347E157E137E14A1202B011C
-:104440009B7800000080AC8080AD0B009820A653C4
-:104450007F147F137F151468078082787800603995
-:10446000186884A00080400034321B6808001B7864
-:10447000C0007800FA24002379003B324032D43265
-:104480003E3278108C24007084A0070079004532F9
-:1044900023254F3284325A324D3223254D324D324C
-:1044A00078108C241C6884A00020400068320860CA
-:1044B00085A002000A6078006832C06805A0C000CC
-:1044C000843220698DA101002269C368010000685F
-:1044D0006A7078007E3220698DA10100226900682F
-:1044E000066005A0C000723202601C6884A00E0045
-:1044F00040007E321470BA68307188A1007578006F
-:10450000803209200076042102680A2D6271B66E9D
-:1045100084A660004000D23284A60008C000983211
-:1045200084A6FF7FB6689468A6689868AA68781021
-:1045300087487800D23284A620004000AD32C0689F
-:1045400005A04000A4327810894C7800A73206A05C
-:104550007810414CD879DC7AAA69A66A7800B3321F
-:104560007810CA38AA69A66A7810414C84A60080DF
-:104570004000D23284A6FF7FB668DC7AD87984A660
-:104580002000C000CA32D0781B80C800C53200802D
-:1045900084A03F0008A191A20000986B002102A313
-:1045A000B268946B002203A3AE68780023257800DC
-:1045B0007B373770000082A206005000DE32781090
-:1045C0008C24007084A00700C0108C3A002379006E
-:1045D000E632E9321233263300227900EC3210330E
-:1045E0007B37F232103342338433037005000120ED
-:1045F000107768204A707E15A92031000320000042
-:104600000080700002337800FB327F1580AD090016
-:10461000367017680000B76800072368000827682D
-:10462000030078006B3778108C240370050001209C
-:10463000107768204A7080AD09003670002279003A
-:104640001E337B3724332433423324337B377810B3
-:104650008C24037005000120107768204A7080AD1B
-:10466000090036700022790032333A333833383358
-:104670003A3338333A3378108C2478109F372B78BC
-:1046800008301B7865007800FA2403700200807AF5
-:1046900094A2000F9B781800A87C84A41F0015A288
-:1046A00069200076042D082D6271682005A0400065
-:1046B0005D33146806A240007933006878005033F7
-:1046C000037005000120107768204A7036707E154F
-:1046D000A920310003200000008070006E337800B4
-:1046E00067337F1580AD09003670166AB76800071A
-:1046F0002368000827680300B46E5A7E206884A0EF
-:10470000000C4000D333781097377800D333037010
-:104710000200807A94A2000F9B781800A87C84A4E1
-:104720001F0015A2A879A8798CA1FF00E8A1007547
-:10473000042D082D6271682005A04000A333146881
-:1047400006A24000BE33006878009633037005006F
-:104750000120107768204A707E15A92031000320BF
-:10476000000000807000B3337800AC337F1580AD5B
-:1047700009003670166AB7680007236800082768C2
-:104780000300B46E5A7E206884A0000C4000D3332E
-:1047900084A000084000CD3378109B377800D333D5
-:1047A000781097378B7000007800D3337E02078231
-:1047B00084A00F0003800380038080A080546020C9
-:1047C000567000605A7004605E7084A660004000FD
-:1047D0002B34986B946CAC69B06805A1C0000D34A3
-:1047E000D27BDA7BD67CDE7CB4A6FFB75A7E84A669
-:1047F000600086A0600040002B34C06805A0400027
-:104800000634037003002B68000078103A4B7800E0
-:10481000083478104B4BB5A600205A7E78002B3414
-:10482000B0681AA3002123A4002405A340002B3460
-:10483000D27BDA7BD67CDE7CB068B4A6FFBF5A7E22
-:104840007E00C06805A07F0040002934037003008B
-:1048500078103A4B78002B347810964B7F077810FD
-:10486000BD380920650084A6040040004C34E4787B
-:1048700084A0300040004434EC7884A00300400061
-:1048800044342B7808300920650078004C347E0FC2
-:1048900079200052781087487F0F400023251A792D
-:1048A000002D4A70078284A00F00038003800380DC
-:1048B00080A0805448207800FA24206005A04000A1
-:1048C000663401802260086085A008000A601070CC
-:1048D00026607C0006A078108748176800001B68D7
-:1048E0000100236840001F680001007084A00700D9
-:1048F000790077342325813481349E348934873498
-:1049000089347F3478108C247810A9347810A2343C
-:104910007810DC1C780023256C706F700000937099
-:104920000000790090349A349A349834983498344A
-:104930009A3498349A34790002296F700000780014
-:1049400023251B6800007800B62F006805A0C00072
-:10495000A734026006607C00106005A04000B234FD
-:104960000180D000B23478108C241260086084A0DA
-:10497000EFFF0A607C00186005A04000BE34018093
-:104980001A607C007810E0391B6818007800F53454
-:104990007810E0391B6819007800F5347810E03998
-:1049A0001B681A007800F5347810E0391B680300A2
-:1049B0007800F53480777810BD3884718CA1FF00C1
-:1049C000E8A10075042D082D682005A0C000E7347B
-:1049D000780023251468807206A24000EF34006836
-:1049E0007800E03400680A201B6805008B70000026
-:1049F0007810A934206884A00100C000FE3478102B
-:104A0000A2347810B8341F680000236820007810A2
-:104A1000DC1C7800232582A20300C0006B37A87D30
-:104A2000ACA5FF00A87CA4A4FF0020698DA1800094
-:104A3000226984A1000140006C358CA1FFFE22692F
-:104A4000A4A4FF004000563582A40C00480029357C
-:104A50004000293521200C002B852B8578102E381D
-:104A6000400033357810273678005F357810E93705
-:104A70007E0C6029046084A0F5FF06607810523631
-:104A80007F0C20698DA100012269587EB5A6040023
-:104A90005A7E84A60004C00050352B7808301B785D
-:104AA00056007800FA242B7808301B7865007800CF
-:104AB000FA247E0C6029046084A0F5FF066078105B
-:104AC00052367F0C587E84A60004C00068351B78DF
-:104AD00058007800FA241B7865007800FA247E0CD0
-:104AE0005470602000618CA100104000AC35086259
-:104AF000178294A2FF0082A20C004800803540007B
-:104B0000803511200C00002402A2C8008535202227
-:104B1000086294A2FF00187086A02800C000953596
-:104B200082A21900C8009B351120190078009B351E
-:104B300082A20C00C8009B3511200C00002202A5A7
-:104B4000C800A03528227810ED372B852B857810EA
-:104B50002E384000AC35781027367800B035781004
-:104B6000E93778105236587885A004005A787F0CBF
-:104B70002B7808301B7865007800FA247E0C6029B9
-:104B80000060E4D0C000D535B4D0C000CF3510608F
-:104B900084A00F00C000CF3504618CA1F5FF066131
-:104BA0007F0C7C0011203200192000007800FC35B9
-:104BB000A06884A00002C000CF35086294A2FF0064
-:104BC000187086A02800C000EA3582A21900C8002B
-:104BD000F035112019007800F03582A20C00C800D1
-:104BE000F03511200C0008631F839CA3FF0082A3F3
-:104BF0000C004800FC354000FC3519200C00AB7857
-:104C00000100AB780300AB780100AA7AAA7BC0A8A8
-:104C10000500206885A0000122687F0C7C007E0CC6
-:104C200060298CA1F5FF06611120320019200000D7
-:104C300078001736AB780100AB780300AB78010041
-:104C4000AA7AAA7BC0A80500206885A00001226876
-:104C50007F0C7C007E0C5471602178102E367F0C06
-:104C60007C00082084A0F0FF25A4867C18609A7838
-:104C7000AE7C1264A47884A0F8FF8CA1070005A183
-:104C8000A67816608A78A4A40F0027840482048082
-:104C900084A0FF0005A40E60EC788CD0C0005136D3
-:104CA000046084A0F5FF06607C007E0C54706020D8
-:104CB000781059367F0C7C0018609A78A47884A00C
-:104CC000F0FFA6781260847884A0F0FF86787C00DC
-:104CD00082A20200C0006B37A87A20698DA18000F3
-:104CE000226984A100024000AE368CA1FFFD22693A
-:104CF00094A2FF0082A20200C8006B377810F93638
-:104D00007810523680A901000C207810B93878103C
-:104D1000BB35FF884000A1369B7860000028AA7848
-:104D2000587EB5A604005A7E84A60004C0009B36B7
-:104D30002B7808301B7856007800FA242B7808303E
-:104D40001B7865007800FA24587E84A60004C00011
-:104D5000AA361B7858007800FA241B786500780082
-:104D6000FA2482A20200C800B63684A201004000E4
-:104D7000C036547188A100000C218CA10020C00015
-:104D8000C036112000007810DB377810F936781023
-:104D90005236587885A004005A782B7808301B7852
-:104DA00065007800FA247E0C7E02602900601120E4
-:104DB0000100ECD0C000E936BCD0C000E73614607A
-:104DC00084A04000C000E7368CA1EFFF066106A07A
-:104DD0007800F63611200000AB780100AB780200B5
-:104DE000AB780300AA7AC0A80400206885A000025E
-:104DF00022687F027F0C7C007E0C5470602078104B
-:104E000000377F0C7C00FF824000053711204000F6
-:104E1000186080A002009A78A47884A0BFFF05A241
-:104E2000A6788A781660EC788CD0C00018370460B9
-:104E300084A0EFFF06607C007E00007086A0030067
-:104E4000400022377F00780025377F0078006737E1
-:104E500084A6200040006737887884A04000400086
-:104E60006737B87B84A33F001B83C80035370080B9
-:104E700005A040004B371B83C8003E37018040002F
-:104E8000633784A6004040004B37B8781B80C800C9
-:104E90004737008084A03F00C0006337B4A6FFBF3F
-:104EA0005A7ED879DC7A0120010008A1C800573762
-:104EB00091A20000D279DA79D67ADE7A7810414C64
-:104EC0001B7864007810C64A7800FA241B786400C6
-:104ED0007800FA241B7865007800FA247810A3374C
-:104EE0002B7808301B7865007800FA2478108F370B
-:104EF0002B7808301B7865007800FA2427680200B8
-:104F000078109737E47884A0300040002325EC78AF
-:104F100084A00300400023252B7808301B7865000F
-:104F20007800FA24012005007800A53701200C0044
-:104F30007800A537012006007800A53701200D0074
-:104F40007800A537012009007800A5370120070067
-:104F50009B781000AA789B786000AB780100B5A61A
-:104F600004005A7E7C007E073F87BCA70F003B876A
-:104F70003B870387E0A08054B8A720009A7FA479DC
-:104F800084A10F004000C93784A1F0FFA678126009
-:104F9000046085A008000660388738879A7FA47966
-:104FA00084A140004000D93784A1BFFFA6781660D5
-:104FB000046085A0100006607F077C009B781000CD
-:104FC000AB780100AB780200AB780300AA7A9B783B
-:104FD0006000AB7804007C00212000002920320012
-:104FE0009B781000AB780100AB780300AB78010030
-:104FF000AA7DAA7C9B786000AB7805007C007E15BA
-:10500000078084A0FF000380038080A020009A789E
-:10501000A4798CA1F0FF01204652042082A0280030
-:10502000400017382120A03819201400A9200C00B6
-:1050300078001D382120AC3819201900A9200D0056
-:1050400011206400042484A0F0FF06A140002C3845
-:105050002084002310A270002C3878001F387F15A0
-:105060007C007E15092046520C2182A132004800A6
-:105070004238400046380920923819201100A920F2
-:105080000E00112032007800583882A1280040001C
-:1050900050380920A03819201400A9200C00112034
-:1050A0006400780058380920AC3819201900A9206C
-:1050B0000D0011206400002202A54000683848005D
-:1050C00068380881002310A27000653878005838CD
-:1050D0007F1506A07C007F1582A56400C800773884
-:1050E000087885A070000A78447085A0700046702A
-:1050F00078007738EC7884A0000340007F380421E2
-:105100007800903804219EA00211C0009038012040
-:10511000FD04042082A0050048008F380120011200
-:1051200078009038042105A07C0002110230023280
-:105130000342034404540456056605680678067A5B
-:10514000070C070C070E0232024202520262027280
-:10515000056605760578057A057C057E057F0222C1
-:105160000232024202520454046404740476047845
-:10517000047A047C047E047F9B78100046A07C00A7
-:1051800084A7000F0B8084A71F0003800380038087
-:10519000038005A1E0A000557C00D879DC7AD078A6
-:1051A0001B80C800D138008084A03F0008A191A2D4
-:1051B00000007C007E0F79200001092040529120E0
-:1051C000008004217900E1381739EB38EB38EB38EF
-:1051D000EB38EB38EB381B3978108C244B78040013
-:1051E000487884A00400C000ED384B780800487867
-:1051F00084A00800C000F438B46885A00040B668F8
-:10520000587885A000405A78307884A08000C0008B
-:105210001739180017391C6884A02000C000153900
-:105220007E0E7120405278106A397F0E780017394F
-:105230001B78CA00912001807F0F7C00B3700000B2
-:105240007810443B780017397E0C1468078084A0DE
-:105250000F00038003800380E0A08054046084A0DA
-:105260000A00C0005439086194A100FF400054397D
-:105270008CA1FF000120190006A140004339012044
-:10528000320006A14000473978004B390920200040
-:1052900078004D3909203F0078004D391120000079
-:1052A000002105A20A60046085A0020006607F0C50
-:1052B0007C001B7865007800FA242B7808301B7876
-:1052C00065007800FA241B7858007800FA242B78BF
-:1052D00008301B7856007800FA24092020520C214F
-:1052E00086A1000040007E3986A10100400081397E
-:1052F000092038520B200B006F7001001B7848000A
-:105300007C001B78C4007C00092038520B200A0066
-:105310007C00092020520C2186A100004000A13908
-:1053200086A1010040009B39092038520B200B0058
-:105330006F7001001B7848007800FA240920385269
-:105340000B200A007800FA242B7808301B78C40060
-:105350007800FA241B78CA007800FA242B780830E9
-:105360001B78CA007800FA241B788F007800FA2492
-:105370002B7808301B788F007800FA24186884A0F6
-:1053800000804000C2391B681D006F7001001B784F
-:1053900048007800FA247E00307884A0C000C00065
-:1053A000DE39087884A0FCFF0A78050005000500B6
-:1053B0000500EC7884A021004000DE3944700A78B2
-:1053C00005A07F007C00447085A0020046700A782A
-:1053D0007C007E00307884A04000C000E73998004F
-:1053E000F2397F009A78AC787C00087884A0FDFFC1
-:1053F0000A780500050005000500EC7884A021006E
-:105400004000013A9800FF397F009A78AC787E001E
-:1054100044700A787F007C00EC7884A00200C00011
-:10542000714884A77D00C000153A002778108C24AD
-:1054300084A70100C0000C3084A770004000253A0A
-:105440007E0C602D682F78103724782D682C7F0C07
-:1054500084A708004000323A4B780800EC7884A01A
-:105460000300400023257800563984A7040040003B
-:10547000653AB87884A001404000653A4B7808004E
-:10548000EC7884A0030040002325E47884A0070082
-:1054900086A00100C000653AC07885A00048302091
-:1054A0005A7E1B78CA007800FA244B7808001868E6
-:1054B00084A000804000613A1B68150084A600406B
-:1054C0004000613A1B68070078106A397800FA24B6
-:1054D0001B680300587884A0003F1E682F680000F6
-:1054E000336800004B780800EC7884A0030040008B
-:1054F000062A1800FA2478007337146B078384A0F7
-:105500000F0003800380038080A080546020482027
-:10551000567000605A7004605E70602A7C007900EA
-:105520008E3A963A973A963A993A963A963A963AFF
-:105530009E3A7C007810B8347810874838700A603A
-:105540007C00A07005A04000AB3A68207810D31B07
-:105550007810FE4778100548A37000007C007E0E8E
-:105560009120008071204052007086A00700C0008A
-:10557000C23A1061BC7006A1C000C23A7F0E78101A
-:10558000E01B7810C83A06A07C00912001807F0EB5
-:1055900085A001007C007E0F7E0E712040527800B5
-:1055A00097225B780000AF700E00092000017E0199
-:1055B000A0706DA04000DD3AA37000007800E33ACF
-:1055C000B370000078100C1C4000E93AAC702668FB
-:1055D0007810C63B7800DD3A7F017E157E0C7E0D8B
-:1055E000A920080061201076006005A102601C60FF
-:1055F0006DA04000013B00681E607810AC19086087
-:1056000000800A607800F43A18606DA040000B3BFF
-:1056100000681A607810AC197800013BE0AC080013
-:105620007000113B7800F13A9C7084A0008040002B
-:10563000183B7810443C7F0D7F0C7F157C007E1258
-:1056400091200023046884A00F007900243B343BA0
-:10565000343B343B343B343B343B363B3C3B343BC8
-:10566000343B343B343B343B3E3B343B363B78109D
-:105670008C247810D3457810AC197800423B276809
-:105680000B007810D3457810C63B7F127C007E1249
-:10569000912000239800603B307884A0C000C000B7
-:1056A000603B7E0D78101248002D2E680920040002
-:1056B00001200000276884007810C7477810C63B97
-:1056C0007F0D7800943B487985A100404A78980086
-:1056D000693B4A7978004E3B287886A03418C00090
-:1056E000723B85A104007800793B287886A01418C5
-:1056F000C000663B85A10C004A789B780E00AB7811
-:105700000200587884A0FF0085A000045A78B47085
-:1057100080A091001A78276884022C683668306867
-:105720003A6809200400012000007810C7477F1262
-:105730007C007E0D146B7810701C4000A33B682029
-:10574000276802007810C63B7800983B7F0D7C00EC
-:105750007E0D146B286CA4A4FF0078101C1C400064
-:10576000B33B6820276802007810C63B7F0D7C00A1
-:105770007E0D146B9CA3FF007810481C4000C43BB6
-:105780006820276802007810C63B7800B93B7F0D7F
-:105790007C007E0C146978103B3C04698CA1FF00EE
-:1057A00086A106004000E13B86A10D004000003CC0
-:1057B00086A11700C000DD3B7810AC197800DF3BF4
-:1057C0007810DE1C7F0C7C00046001804800FE3BEA
-:1057D00006600920000084A60100C000EE3B8DA1F8
-:1057E000008084A604004000F43B8DA102001E69E5
-:1057F0002368000004710F81186805A11A687800F9
-:10580000DD3B78108C24186005A0C0000F3C0860B8
-:10581000018048000F3C0A601C600268002D1E6079
-:105820007800253C88AC0600042105A04000183C07
-:1058300008207800113C02680A2D086001804800A9
-:10584000DF3B0A601860682000681A607800093C35
-:105850007E157E137E147E0C7E0D78108919C00093
-:10586000303C78108C24A02D7F13A9203100A35345
-:105870007F0C7F147F137F157800DD3B84A11F0010
-:1058800003800380038080A0107660207C001920B4
-:105890005152042385A001001A201920020104237B
-:1058A00085A001001A207C0019205152042384A0F5
-:1058B000FEFF1A2019200201042384A0FEFF1A20F3
-:1058C0007C0090798CA1F8FF9279B47080A0D80008
-:1058D0001A787800FA24A370000003700000437067
-:1058E0000100377000001800B12478100C1C400033
-:1058F000993C09200F520B200000BC686020006119
-:1059000084A1000340008D3C27680E0084A00002A3
-:105910004000893C276817007810C63B7800683C37
-:10592000007086A00700C0000D3D002DA27080AD64
-:105930000F0036707800A03C407086A00100400047
-:1059400033257800FA24312000001C6984A102006C
-:105950004000A93CB5A6040084A1C00003800380D8
-:10596000078080A0A63D042035A6206884A00004FE
-:105970004000C13C9B781800AB7803009B78810005
-:10598000AB780100B5A60050206884A000804000DC
-:10599000CF3CB5A600049B780E0024680780AA7847
-:1059A0007800EF3C1C68FCD0C000DD3CB5A60008C8
-:1059B0002068C4D04000EF3CB5A600407800EF3C22
-:1059C0002068C4D04000E53CB5A600407800EF3C1C
-:1059D0009B781800AB7802009B788100AB780100BF
-:1059E000B5A6001084A600024000093D2C68D278BC
-:1059F0003068D67884A600014000073D2C6884A05A
-:105A000001004000073D887884A040004000073D29
-:105A1000B5A600807810F6475A7EB66E78003548F5
-:105A20007810C839C000A03D2C70048048001B3D90
-:105A30001920494F781013232F70010041200100D5
-:105A4000312000109B781800146884A01F0085A0E6
-:105A50008000AA781C6984A102004000343DB5A6EC
-:105A60000400AB7820002868AA78C0A802001C684F
-:105A7000F4D040003D3D502C78107A3A781002471F
-:105A8000206884A0008040004B3DB5A600049B78B0
-:105A90000E0024680780AA787800523D1C6884A014
-:105AA0000080C000523DB5A60008206884A0000117
-:105AB0004000593DB5A600401C6884A0C00003808A
-:105AC0000380078080A0A63D042035A684A600019F
-:105AD0004000733D2C6884A001004000733D88782D
-:105AE00084A040004000733DB5A600809B787E00F6
-:105AF000AE7EB66E14680780AA7882781028AA7ADB
-:105B0000307884A0C000C000A03D1800A03DB47053
-:105B100080A0DD001A787810E03984A600024000E9
-:105B2000943D2C68D2783068D6787810F647002DEE
-:105B3000A2704A701068BE700370070080AD0F003D
-:105B400036707800FA247810D31B7810E03978008A
-:105B5000FA24000000030002000078108C240023C7
-:105B60007900AF3DB23DB23DB43D78108C24781041
-:105B70000548246984A1FF0086A00A004000C63DB4
-:105B800084A100FF85A00A0026687810D31B780046
-:105B9000683C01200A00781097477800683C82A290
-:105BA00005005000D23D78108C24007084A00700BE
-:105BB000C0108C3A78108919C000F43D6920FFFFAD
-:105BC00084A604004000E53D012000287800E73D60
-:105BD00001200008B47188A191009B780E00078015
-:105BE000AA78312000045A7E1A797800FA240768CE
-:105BF00006010B6800009F6800002768000086A36C
-:105C00000200C000153E86A20200C000153EA0782A
-:105C100005A0C000153E84A40080C000153EE478B5
-:105C200084A008004000153EB5A608001920000019
-:105C300078101742002DA2704A7003700700377069
-:105C40000000246884A080004000273E7810CD42E8
-:105C50007800FA24002379002A3E2D3EAE3EC73E4E
-:105C600000227900303E353E453E6B3E773E9A3EFF
-:105C70002920010026A0112000007810F3437900AC
-:105C80003E3E433EFA24683C433E433E78108C241B
-:105C900090798CA10700C0004C3E0920080011201B
-:105CA000010084A604004000543E1120030020227D
-:105CB0002AA1112001007810F34379005C3E613E77
-:105CC000FA24683C693E633E78003B48AB70673E0F
-:105CD0007800FA247800613E78108C2484A61000A5
-:105CE0004000753E78109C424000753E7800FA24D2
-:105CF00078000D43006084A002004000943EB47020
-:105D000080A0CD001A787E0D78101248002D2E68E4
-:105D1000276800007810C63B7F0D7810AC1903701F
-:105D20000000377000004B7000007800683C84A6CB
-:105D30000400C0009A3E78003B48006084A0040044
-:105D4000C000AC3E006084A001004000AC3EAB70DF
-:105D5000AC3E0120070078108F477800414878005A
-:105D60003B4800227900B13EB63EB83EB63EB63E54
-:105D7000B63E78108C24A770BC3E78004748E47883
-:105D800084A00800C000B83E78108147AB70C53EC3
-:105D900078003B4800227900CA3ECF3ED13ED13E3A
-:105DA000CF3ECF3E78108C24E47884A008004000D9
-:105DB000E63EA770DA3E78004748112004007810CC
-:105DC000ED437900E03EE63EFA24683CE63EF03ED4
-:105DD000F43EAB70EE3E0120030078108F47780050
-:105DE000414878003B48AB70E63E7800FA24AB703F
-:105DF000F83E7800FA247800EE3E82A203005000BC
-:105E0000003F78108C2486A30200C000193F86A2B0
-:105E10000200C0001F3FA07805A0C0001F3F84A45F
-:105E20000080C0001F3FE47884A008004000193FB4
-:105E3000B5A608001920000084A6080040001F3FF6
-:105E4000781079421068BE70037007000023790053
-:105E5000263F293F563F5E3F002279002C3F313FCD
-:105E60002F3F4A3F78108C249079ACA1070026A0E0
-:105E7000112001007810F34379003B3F403FFA24A2
-:105E8000683C483F423F78003B48AB70463F780053
-:105E9000FA247800403F78108C2484A6100040003B
-:105EA000543F78109C424000543F7800FA24780018
-:105EB0000D4300227900593F5C3F5C3F5C3F781006
-:105EC0008C2400227900613F643F663F663F781072
-:105ED0008C24E47884A0080040007B3FA7706F3FCB
-:105EE00078004748112004007810ED437900753F91
-:105EF0007B3FFA24683C7B3F853F893FAB70833F03
-:105F00000120030078108F477800414878003B4813
-:105F1000AB707B3F7800FA24AB708D3F7800FA2499
-:105F20007800833F00237900923F973F993F953F48
-:105F300078108C24A4707A00A4707A0082A20200E7
-:105F40005000A13F78108C2484A600024000AB3F93
-:105F50007810FE477810D543781005480023790063
-:105F6000AE3FB13FD93F3F4086ADFFFF4000683CA8
-:105F700086A201004000BB3F78108C2484A600025A
-:105F80004000C33F7810FE4778100548012001000B
-:105F900078109747B87884A001C04000D53F487872
-:105FA00085A008004A78487884A00800C000D03F47
-:105FB000037000007800683C00227900DC3FDE3F7F
-:105FC0000F40A770E23F7800474811200D0078107D
-:105FD000ED437900E83FEF3FFA24683CF73FFF3F8D
-:105FE00005400740B4A6FF00B5A60004B66E5A7E71
-:105FF00078003548B4A6FF00B5A60004B66E5A7EF8
-:1060000078003548AB7003407800FA247800EF3F01
-:1060100078108C24AB700B407800FA2478104D482F
-:106020007800FA24A7701340780047481120120026
-:106030007810ED43790019401F40FA24683C2B404A
-:1060400033403940B4A6FF00B5A60004B66E5A7EB0
-:10605000B47080A0AA001A787800FA24B4A6FF00D1
-:10606000B5A60004B66E5A7E78003548AB7037404E
-:106070007800FA2478001F40AB703D407800FA2485
-:1060800078002B4086A201004000454078108C2407
-:10609000A770494078004748112015007810ED435B
-:1060A00079004F405440FA24683C62406E40B4A6E8
-:1060B000FF00B5A60004B66E5A7E3B780113B4709B
-:1060C00080A0B5001A787800FA24B4A6FF00B5A61F
-:1060D0000004B66E5A7EB47080A0AA001A787800C8
-:1060E000FA24AB7072407800FA247800544082A2FF
-:1060F000030050007A4078108C24002379007D4002
-:106100008040B740144186A20100400086407810CC
-:106110008C24046884A0FF0086A00600C000934081
-:106120007810C63B037000007800683C3B680000B4
-:106130003768000084A600024000A1407810FE47A6
-:106140007810D54378100548012001007810974752
-:10615000B87884A001C04000B340487885A008000A
-:106160004A78487884A00800C000AE400370000060
-:106170007800683C00227900BA40BC40EF40A7702C
-:10618000C0407800474811200D007810ED43790099
-:10619000C640CD40FA24683CD540DD40E340E540B0
-:1061A000B4A6FF00B5A60008B66E5A7E7800354842
-:1061B000B4A6FF00B5A60008B66E5A7E7800354832
-:1061C000AB70E1407800FA247800CD4078108C2440
-:1061D000AB70EB40781005487800FA2478104D48F1
-:1061E0007800FA24A770F340780047481120050092
-:1061F0007810ED437900F940FE40FA24683C0641EE
-:106200000E41B4A6FF00B5A60008B66E5A7E78000F
-:106210003548B4A6FF00B5A60008B66E5A7E7800D1
-:106220003548AB7012417800FA247800FE4086A20F
-:10623000010040001A4178108C24A7701E4178009C
-:106240004748112006007810ED4379002441294188
-:10625000FA24683C2F413941B5A60008B66E5A7E33
-:1062600078003548B4A6FF00B5A60008B66EB5A6FE
-:1062700000405A7E78003548AB703D417800FA24E2
-:106280007800294100237900424147414541454179
-:1062900078108C2478108C240023A87105A07A0132
-:1062A0001068BE7082A203005000554178108C2403
-:1062B0000023790058415B4169418B4184A600026B
-:1062C000400063417810FE47781005480120010026
-:1062D000781097477800FA2496A202004000724195
-:1062E000FF824000724178108C24A77076417800BC
-:1062F0004748112018007810ED4379007C41814116
-:10630000FA24683C83418541780035487800354857
-:10631000AB7089417800FA2478008141002279002D
-:106320008E419041A941A7709441780047481120BF
-:1063300017007810ED4379009A419F41FA24683C98
-:10634000A141A3417800354878003548AB70A7419A
-:106350007800FA2478009F4184A40080C0000542A0
-:1063600084A600014000B5417810FE477810D5435F
-:10637000D878D278DC78D678B4A6FFEF5A7EA770AA
-:10638000C0417800474811200D007810ED43790096
-:10639000C641CD41FA24683CCD41F341F941FB416E
-:1063A000D878DC7905A1C000DF41B87884A01F004F
-:1063B000C000DF41B3700000587884A0FFFD5A7818
-:1063C0007800354884A600014000F141487885A056
-:1063D00008004A787810BC472C68D2783068D678A4
-:1063E000B37000007810F64778003548AB70F7417D
-:1063F0007800FA247800CD4178108C24AB700142EB
-:10640000781005487800FA2478104D487800FA246E
-:1064100078100548AB700F420120030078108F47B9
-:10642000780041487810F6472C68D2783068D678E2
-:1064300078003548B8701268BE700080BA701B686A
-:10644000000084A6080040003A427E157E137E14A8
-:106450009078048004800480048084A00F001A686F
-:10646000AC809B78000080AF2B00982080AD0B00A3
-:10647000A020A5537F147F137F15C4A6000F84A608
-:106480000200C00049422C690D810D810D8184A15B
-:106490000700082078005C429B781000AC7984A14A
-:1064A000200040005C427E01092005000120003DE3
-:1064B0007810C747246885A03B0026687F0184A127
-:1064C0001F0005A8166878103B3CBE6884A604002F
-:1064D00040006D428CA100FFA87884A0FF0005A1B8
-:1064E0002A68B4A6FF00006084A00800400077423C
-:1064F000B5A60040B66E7C007E157E137E1418692A
-:106500009078048004800480048084A00F007E00C2
-:1065100000A11A687F000080048040009842A820F3
-:10652000048180A00B0000ADA0209B78000080AF0C
-:106530002B009820A5537F147F137F157C002C68B7
-:1065400084A02000C000A4420C627800A542106222
-:10655000186B002302A24000C542182082A30E003F
-:106560004800B5424000B54219200E007800B942FB
-:10657000587884A0EFFF5A783B78011B937800008D
-:10658000A27BB47080A08E001A7885A001007C00E8
-:10659000587884A0EFFF5A789378000006A07C001A
-:1065A00004698CA1FF0096A107004000DA4296A181
-:1065B0000F004000DA4207681701146978103B3C6D
-:1065C00000610481C800F5421C6005A04000E9425A
-:1065D000012000087800F7427E0D24687E007810C4
-:1065E00012487F002668002D2E687810C63B7F0D6C
-:1065F0000120000224698CA1FF000DA126690780FB
-:106600009B780E00AA78206885A00080226831203F
-:106610000004B66E5A7EB47188A191001A797C008C
-:10662000C4A6000F84A60200C00021432C690D817E
-:106630000D810D8184A10700082005A81668781037
-:106640003B3CBE6878002443146978103B3C0061F1
-:106650000481C800824384A10003400030430768DE
-:10666000170178004E43046005A0C0005743076837
-:1066700017011C6005A0C00044437E0D781012482D
-:1066800027683400002D2E687810C63B7F0D84A645
-:10669000040040004E43312000040120002878000F
-:1066A00052433120000401200008B47188A19100F8
-:1066B0007800B043186005A0C00044431C6005A0EA
-:1066C000C00044439F68000027683D0084A6010085
-:1066D0004000BE4394D6C0007B430061D4D140004B
-:1066E0007B432C698CA1FF004000BE4386A10300C0
-:1066F0004000BE4386A112004000BE43B5A600087C
-:10670000B47188A1AE007800B94307681701312041
-:1067100000042C698CA1FF0086A11200C0009343E5
-:106720000120CB43092001007800A44386A1030087
-:10673000C0009D430120CC43092012007800A443EF
-:1067400001200002B47188A191007800B043781054
-:10675000E147A37800001C6885A040001E68B47162
-:1067600088A1DA0006A0266807809B780E00AA7828
-:10677000206885A000802268B66E5A7E1A7978005B
-:10678000FA24B66E7810C63B1068BE70037007001E
-:10679000A37000004B7000007800FA242300700002
-:1067A00005000000000A00000000250000000000B5
-:1067B0003B6800003768000084A600024000EC43FC
-:1067C000B8788CA01F0084A000804000E5430881B9
-:1067D000D87800A13668DC7881A000003A687C0097
-:1067E00090790F81ACA507002120000080A4100043
-:1067F0009A78A8798CA1FF0084A18000C0001B4476
-:1068000082A12000C800394482A11200C80081473B
-:106810000021791009447C008147EB45814781477D
-:10682000464449448344B944ED44F0448147814798
-:10683000A44414454E4581478147744584A12000F6
-:10684000C000A8458CA11F00146884A01F0006A1E9
-:1068500040003644B47080A0CD001A7801201400A6
-:106860007810974778100548037000000120020057
-:106870007C00012000007C0082A12400C800814728
-:1068800084A10300791009447C0081478147814736
-:106890008147781081477C00002279004C4477457D
-:1068A0007745704470447044704470447044704440
-:1068B00070446E4470446544704470447044704445
-:1068C000704478447B4477457B4470447044704402
-:1068D0007E0C7E07146F7810B0377F077F0C78002E
-:1068E000704478108E462768B30209200B000120FF
-:1068F00000487800AB45781073477C002768930008
-:1069000009200B000120004878009345582D0468A9
-:1069100084A0FF0086A00600C0008D440768170110
-:106920002768020078101248276836003269002D67
-:106930002E687E0D7810963B7810D345682B781022
-:10694000C63B7F0D7810C63B012002007C0078100A
-:10695000D3450120170078109747A3700000092045
-:1069600038520B200600AF70170009200002781083
-:10697000D43A012001007C0000227900BC44774514
-:10698000A845A845A845DD44BA45E544BA45BA45F9
-:10699000BD45BD45C245C245D544D544A845A845D9
-:1069A000BA45A845E5447745E544E544E544E54472
-:1069B0002768840009200B00012000437800CC45A3
-:1069C00027680D0009200B00012000437800AB452B
-:1069D0002768930009200B000120004378009345AD
-:1069E000012000007C0000227900F34477450C452B
-:1069F0000C450C450C45BA45BA45BA45BA45BA45A9
-:106A0000BA45BA45BA450C450C450C450C45BA4546
-:106A10000C450C45BA45BA45BA45BA45774527688D
-:106A2000930009200B00012000437800934584A6C1
-:106A30000400C0002845046884A0FF0086A006006A
-:106A4000C00081477810D345076817017810C63B0E
-:106A5000012002007C00006084A004004000814707
-:106A6000582D046884A0FF0086A00600C0003745AA
-:106A70000768170127680200781012482768360057
-:106A80003269002D2E687E0D7810A53B7810D34515
-:106A9000682B7810C63B7F0D7810C63B01200200A2
-:106AA0007C00006084A0040040008147046A94A236
-:106AB000FF0086A20600C0005C4507681701276832
-:106AC0000200582D78101248276836003269002DD0
-:106AD0002E687E0D7810B53B7810D345682B781062
-:106AE000C63B7F0D7810C63B012002007C00781069
-:106AF00081477C00B47080A0CD001A78012001008D
-:106B000078109747781005480370000001200200B4
-:106B10007C007810C7477810FE477810D54378106E
-:106B2000CD4278100548012001007C007810C7474D
-:106B30007810FE477810D543B47080A0CD001A7845
-:106B40000120130078109747781005480370000063
-:106B5000012002007C00781081477C007810C74734
-:106B60007810FE477810D5437810CD42781005484C
-:106B700078104D48012001007C00012003007C00BA
-:106B800078108E46012000007C007E0C7E07146F7A
-:106B90007810B0377F077F0C012000007C00781050
-:106BA000C74778108147012006007C0004698CA14A
-:106BB000FF0086A107004000DE4586A10F00C0004F
-:106BC000E2457810FE477810D543B47080A0CD0020
-:106BD0001A7878100548037000007C00A87A94A207
-:106BE000FF00A87884A0FF008AA00400C8008147A5
-:106BF0007910F8457C008147FC458147954682A283
-:106C0000030040000346781081477C00A87DACA5B6
-:106C1000FF00A87CA4A4FF00B86984A10001400083
-:106C200042468CA1FFFEBA69A07805A0C00042468A
-:106C3000A4A4FF004000364682A40C0040001F467A
-:106C4000C80029462B852B8578102E384000294610
-:106C5000781027367800384678106047781052361A
-:106C6000B8698DA10001BA69B5A600105A7E7800F6
-:106C70003B4678105236B4A6FFEF5A7EB47080A01F
-:106C800091001A78012001007C007E0C7810824669
-:106C90000062E4D2400073460862178294A2FF00AB
-:106CA00082A20C00480055464000554611200C00B9
-:106CB000002402A2C8005A462022086294A2FF00C3
-:106CC0001C7002A2C80062461C72002202A5C80005
-:106CD00067462822781064472B852B8578102E383C
-:106CE0004000734678102E3678007746781060475B
-:106CF00078105936B5A600105A7EB47080A0B9003D
-:106D00001A78012004007F0C7C007E001468078044
-:106D100084A00F00038003800380E0A080547F00E4
-:106D20007C007E0C78108246781059367F0C7C00EF
-:106D300082A20200C0008147A87A94A2FF00B8692D
-:106D400084A100024000CC468CA1FFFDBA69A07866
-:106D500005A0C000CC4682A20200C8006B377810A4
-:106D60002A477810F9367810523684A60001400080
-:106D7000C2462C6884A001004000C246FCC6887848
-:106D800084A040004000C246FDC6B5A600105A7E51
-:106D9000B47080A091001A78012001007C007E0C64
-:106DA0007810824684A2FEFF4000D74611200100E1
-:106DB0007800DB4684A201004000E1460061ECD18E
-:106DC000C000E1461120000078101C477810003701
-:106DD0007810593684A600014000F7462C6884A03C
-:106DE00001004000F746FCC6887884A040004000BF
-:106DF000F746FDC6B5A600105A7EB47080A0B90053
-:106E00001A78012004007F0C7C007E0C6029006051
-:106E10001120010084A00020C0000D4711200000B7
-:106E2000AB780100AB780200AB780300AA7AC0A867
-:106E30000400B86885A00002BA687F0C7C009B78CB
-:106E40001800AB780100AB780200AB780300AA7A97
-:106E50009B788100AB7804007C007E0C547060202D
-:106E6000006084A00010C000384729203200212093
-:106E70000000780058470865ACA5FF00187086A090
-:106E80002800C000484782A51900C8004E472920A5
-:106E9000190078004E4782A50C00C8004E472920F3
-:106EA0000C0008642784A4A4FF0082A40C004800FE
-:106EB000584721200C0078106447B86885A000016D
-:106EC000BA687F0C7C0021200000292032009B78CA
-:106ED0001800AB780100AB780300AB780100AA7D05
-:106EE000AA7C9B788100AB7805007C000120030020
-:106EF00078108F47B5A600105A7EB47080A0B900F4
-:106F00001A78012005007C000120070078108F47C7
-:106F1000B5A600105A7EB47080A0B9001A7801207E
-:106F200004007C009B781800AA789B788100AB78DD
-:106F300001007C0004698CA1FF0096A107004000BD
-:106F4000A54796A10F004000A5477810AC197C001A
-:106F5000246994A13F00C000AE478CA1C0FF05A1E9
-:106F600026687810C63B1C6984A100014000BB471D
-:106F7000146978103B3C0462108206627C002C6924
-:106F800034682E6812A13069386832681BA100A2EB
-:106F900001A37C007E0CE0AD180003607000066168
-:106FA0000B6000000F60000A136000001760000013
-:106FB00007801A601F600000236000007F0C2468B7
-:106FC00085A0800026687C007E157E137E149820A4
-:106FD00080AF2D00A020AC814000EC47A65384A1D7
-:106FE00001004000F2470433BE787F147F137F1501
-:106FF0007C00B07005A0C0108C24B37000807800B5
-:107000004B4BB071FF81400004487810414C7C002C
-:10701000B071FF8140001148487885A008004A7887
-:10702000B3700000781087487C007E0C7E0D7810CD
-:107030008919C0001A4878108C247F0C7E157E13A5
-:107040007E14A02D982CA9203100A3537F147F1308
-:107050007F1507680D010B680000047007801A682F
-:10706000236800001F6800009F6800007F0C7C0000
-:10707000B47080A091001A787800FA24B47080A0CF
-:1070800081001A787800FA24B47080A0B9001A78C8
-:107090007800FA24B47080A0C3001A787800FA242B
-:1070A00004698CA1FF0096A1070040005A4896A1F0
-:1070B0000F0040005A4807681701246884A0FF00A9
-:1070C00085A00002266807809B780E00AA782068B9
-:1070D00085A00080226831200004B66E5A7EB4710B
-:1070E00088A191001A797C0078100548487885A01D
-:1070F0000C004A78B47080A0CD001A7809200B00EB
-:10710000012000447810C7470120130078109747EA
-:107110007800683C7E129120002249208748007048
-:10712000047205A20C7215A2087084A0F7FF05A2D4
-:107130004000994878009E48037000007F120020AC
-:107140007C00007084A00100C000CC48087103815D
-:10715000C800AB487810CE497800A3480C708CA0CA
-:10716000FF004000CC4804700480C800C34814707D
-:1071700005A0C000BF48107005A04000C34802A190
-:10718000C800A348077010007800CC48FF8A400070
-:10719000CC487810184CC000C6484000A34878106E
-:1071A0005749037000007F1200207C007E010461BB
-:1071B0008CA1FF0086A107004000DF488EA10F00D0
-:1071C000C000E24840607800E34828647F01FF8403
-:1071D00040000D49702C0470BCA00F00B8A71D49D9
-:1071E0003C27FB87C000FB484800F54878108C24FA
-:1071F0009C6075A040000D497800E848042768AEFF
-:10720000086830A60C6829A5218440000D493887FC
-:10721000042705A0C000FC489C7075A0C000E84889
-:107220007C000000050009000D0011001500190088
-:107230001D000000030009000F0015001B000000E6
-:10724000000012490F4900000000008000001249B0
-:1072500000001A49174900000000000000001A4908
-:107260000000154915490000000000800000154984
-:1072700000001B491B4900000000000000001B49E2
-:107280007E12912000227920005271201000077098
-:107290000A000770020003700000712020000770D0
-:1072A0000A000770020003700000492000007F12EE
-:1072B00000207C00492057491920000004700480F8
-:1072C000C800AA49077012000871087006A1C00022
-:1072D000614984A1E00140006C4978108C240120B0
-:1072E000FD04042082A00500C800774984A1004065
-:1072F000C00061499CA10C3086A304204000854950
-:1073000086A308004000904986A30C20C000614974
-:1073100000720482480090490C7384A3FF0040006F
-:10732000904978108C2407701200007084A001002E
-:10733000C000AA49087084A0E001C000AA491073E7
-:10734000147005A34000AA490C7184A10003C00079
-:10735000AA4984A1FF00C0005749077012000770B6
-:107360000800047084A00800C000AE490770120035
-:10737000087103814800B3490370000049200000F0
-:107380007C007E107E007E127E1591200022087106
-:107390007810CE497F157F12912001807F007F10E9
-:1073A0007C00047200750C7384A30003C000F549CF
-:1073B00084A1E001C000194A087184A1E001C00065
-:1073C000194A0120FD04042082A00500C800E949F3
-:1073D00084A10040C000D94984A107007900ED498B
-:1073E000F749094AF549094AF549554AF549534AC1
-:1073F00078108C24047084A0100085A00200067010
-:10740000FF8AC000044A492000007800084A78102A
-:10741000184CC000044A7C00047084A0100085A0B1
-:1074200002000670FF8AC000144A7800184A7810DB
-:10743000184CC000144A7C00077012000871E0006C
-:107440001C4A91200060E000204A912000600770F3
-:10745000120007700800047084A00800C000284AC9
-:10746000077012000871038148002D4A0370000064
-:10747000007005A0C000414A047005A0C000414A48
-:107480000C7005A04000434A7800244A49200000BF
-:107490007810D738186884A0008040004E4A1B68D6
-:1074A00002007C0078108C2478108C247810B14A6B
-:1074B000107214710C709CA0FF00002800A311A290
-:1074C00089A100007810B14A0427582C60AC0863E9
-:1074D000002222A30C6300211BA3002405A340006B
-:1074E000784AC800784A128410820A8389A1000071
-:1074F000602B78005F4A602B078A7E00046084A0BE
-:1075000008004000844ABAA717497800864ABAA7FB
-:107510000F497F003DA7002C86688A6F926C8E6BA6
-:1075200007701200781057497C003887042705A09F
-:10753000C000A54A9C6005A04000AE4A60200460DF
-:1075400084A00F0080A01D493C20FB8740108C24A4
-:10755000518A4000AD4A087084A0030086A0030051
-:107560007C00512000007C00508A3987042704A049
-:10757000C000C54A006064A0C000BC4A602D046021
-:1075800084A00F0080A02D493C20FB8740108C2454
-:107590007C007E127E0D912000227F0D8468602089
-:1075A00088688C6B906C5780D4AAFF0084A0FF0081
-:1075B0007E00046884A008007F004000E04AB8A074
-:1075C00017497800E24AB8A00F49087EB5A60C001A
-:1075D00004698CA1FF0086A107004000F04A8EA13B
-:1075E0000F00C000F94A1C6884A040004000004B16
-:1075F000B5A601007800004B1C6884A04000400044
-:10760000004BB5A6010007700400047084A00400BC
-:10761000C000024B002405A3C0000D4B7800334B83
-:10762000582C0427046160AC006000A41A70046048
-:1076300001A31E7084A108004000234B106081A0AC
-:1076400000002270146081A00000267008620024EF
-:1076500002A212700C62002303A216700276077059
-:107660000100602B7810924A7800354B7810184C46
-:10767000C000334B7F1200207C007E127E0D9120D3
-:1076800000227F0D07700400047084A00400C00075
-:10769000414B037008007F1200207C007E127E0D9B
-:1076A000912000227F0D49204B4B0770040004708D
-:1076B00084A00400C000544B087EB5A60C000469E9
-:1076C0008CA1FF0086A107004000674B8EA10F0030
-:1076D000C000724B1C6884A0400040006E4BB5A6F1
-:1076E00001004068502078007B4B1C6884A020007B
-:1076F000C000794BB5A6010028685020602D0460B9
-:10770000BCA00F00B8A71D493C27FB87C0008F4BCA
-:107710004800894B78108C249C6865A04000934BEE
-:1077200078007C4B7810184CC0008F4B7F120020E3
-:107730007C007E127E007E017E0D912000227F0D56
-:107740007F037F04087EB5A60C0004698CA1FF00AE
-:1077500086A107004000AD4B8EA10F00C000B64BC4
-:107760001C6884A040004000BD4BB5A60100780015
-:10777000BD4B1C6884A040004000BD4BB5A6010075
-:107780004920964B7E0104698CA1FF0086A1070069
-:107790004000CB4B8EA10F00C000CE4B406878005C
-:1077A000CF4B28687F0155A04000154C702D602EEE
-:1077B0000470BCA00F00B8A71D493C27FB87C00080
-:1077C000E94B4800E24B78108C249C7075A0602037
-:1077D0004000154C7800D54B042768AE086822A4F9
-:1077E0000C681BA34800024C518AC000F64B78106D
-:1077F0008C243887042705A0C000EA4B9C7075A034
-:1078000060204000154C7800D54B228420841A83D8
-:1078100099A300000869002422A10C6900231BA180
-:10782000C800114C78108C24712020007800004B87
-:107830007F1200207C00087084A0030086A0030053
-:107840004000404C042708AC04211A700881042130
-:107850001E700881042112700881042116700460D2
-:1078600084A008004000374C088104212270088160
-:10787000042126700276047084A0100085A0010007
-:1078800006707810924A7C007E127E007E0D912058
-:1078900000224920414C7F0D7F08087184A103001C
-:1078A000C0006B4C7E0104698CA1FF0086A107001B
-:1078B00040005B4C8EA10F00C0005E4C4068780019
-:1078C0005F4C28687F0105A04000794C78009E48F5
-:1078D00020006B4C7810554A7800794CA000724C0F
-:1078E00008717810CE4978004A4C07701000A0004B
-:1078F000744C08717810CE49087086A00800C0004A
-:107900004A4C007005A0C0004A4C0370000049209A
-:1079100000007F1200207C007E127E147E137E15F4
-:107920007E0C7E0D912000227F0D4920894C80AD78
-:107930001100A020992031000C7084A0FF002A685B
-:107940000770080007700200037001004000A84C97
-:107950000080AC80A55307700400047084A004006C
-:10796000C000AA4C7F0C49200000037000007F1566
-:107970007F137F147F1200207C00912000609120F3
-:107980000080CC7805A04000D14C9479D07006A13D
-:10799000C000D14C047805A04000D14C077800000D
-:1079A0006800D14C91208040207801802278C0006E
-:1079B0002C4D2478227869204052006884A007006A
-:1079C0004000EF4C86A002004000EF4C34680DA050
-:1079D0004000EF4C042105A04000EF4C01800A203C
-:1079E0004000D44D487805A04000FD4C01804A7805
-:1079F000C000FD4C0920020144680A2078106F2263
-:107A0000906805A04000094D01809268C000094DB2
-:107A10006F6800007368010061200055A920000113
-:107A200009200200346005A040001F4D018036602F
-:107A3000C0001F4D106005A040001F4D7E01781052
-:107A40006F227F01E0AC10007000254D78000F4DD3
-:107A5000098140002C4DA920000178000F4D7810BD
-:107A6000394D78105E4D0920515204210920020140
-:107A70000A20912001807C00347801803678C00093
-:107A80005D4D3878367891200080447805A0C0009C
-:107A9000484D012001010180467880A000754020FA
-:107AA000042065A040005D4D246005A04000594DB4
-:107AB0000180266040008D4D0060402C78004E4DC6
-:107AC0007C00287801802A78C0008C4D2C782A7898
-:107AD000307805A0C0006B4D012000020180327893
-:107AE000038003800380038090A0005598A20200C9
-:107AF000042384A0080040008C4D90A209000422B9
-:107B000005A04000844D01801220C0008C4D04234C
-:107B100084A0F7FF85A080001A2078106F227C00D7
-:107B200069204052006805A04000974D486806ACA7
-:107B30004000D44D1B600600B46084A0003F1E606E
-:107B4000206084A0FF0085A06000226000604220C9
-:107B50001467826F7810C519186805A04000AF4DF2
-:107B600001801A68086884A0EFFF0A681068018025
-:107B7000D000B94D78108C2412682F60000033605B
-:107B80000000682C7810DC1C69204052447984A1E4
-:107B90000001012006006E68C000CF4D86690120FB
-:107BA00004006E6878106A22912001807C006920B0
-:107BB000000109204052042184A007004000304EFB
-:107BC00086A00700C000EA4D7E0D092052526C21AC
-:107BD00078101C3B7F0D7800304E092052526421F2
-:107BE000781037241B600600586884A0003F1E6090
-:107BF000206084A0FF0085A0480022602F60000064
-:107C000033600000306884A040004000244E4B6880
-:107C10000400A9201400486884A004004000114E0C
-:107C20007000114E7800084E4B680900A92014001E
-:107C3000486884A0010040001E4E70001E4E78006F
-:107C4000154EA920FA007000244E7800204E0868D6
-:107C500084A0FDFF0A681B68480009205B520B20C6
-:107C600007004C784A78912001807C0079200052EE
-:107C700078105E4E7810424E7810504E33780000E7
-:107C8000477800004B7800007C0019200300112089
-:107C90004652042286A03C0040004D4E19200200AE
-:107CA0002A7B2E7B7C0019203900112046520422A9
-:107CB00086A03C0040005B4E19202700367B3A7BB3
-:107CC0007C001920713911204652042286A03C0004
-:107CD0004000694E19202626227B267B3F78000033
-:107CE00043780A007C0020002B00000020000000E8
-:107CF0002000000020000000200000002000000004
-:107D000020000000200000002000000020000000F3
-:107D100020000000200000002000000020000000E3
-:107D200020000000200000002000000014001400CB
-:107D300049981400140014001400140014001400D6
-:107D400080000F00000001020406080C20212240E0
-:107D500080F818000B3001A2140000A2140000A249
-:107D6000140200006C0002001400CD989E009300E5
-:107D700002A2388806383988C32064088598C1284B
-:107D8000AE9C03A20C30462861816A840083561899
-:107D90003A886598F228919C58980C30E128919C7B
-:107DA000022806A2C3642E2807A2A064E06DA06783
-:107DB000C06F14183B882478C16864783E8879982D
-:107DC000768577866B20C128AE9C44200321A220B3
-:107DD0008120659809A201298D98140005A200A3AD
-:107DE00072189A873C88E21F01C60AA26E850407B2
-:107DF000919C140004A200A30930E21964F86E8576
-:107E00003F88E608919881F88C9801C81400C1F861
-:107E10001600B285F080329502FBE21D1400328517
-:107E200041F21400E21DA884A0D7E61F140008A2A6
-:107E300043600880C11D1600008360812A8441F0E0
-:107E40000830A884D6114270DD201100D520228888
-:107E50001600008047281110C098008000A002285A
-:107E60001110C69865983E281110CA980BA21700E9
-:107E70000C3000A3E21D81DB14001002D79814001F
-:107E8000E0263A8702FBF219E21F14000DA2063821
-:107E90001002B39C040700006C0002004F9814000D
-:107EA0009E00A0001700FF600C30208711A2D09C1C
-:107EB0007287378801217A98D210E278D39C59983A
-:107EC00084D9E2F0A1F0CD981400318866D13088D1
-:107ED0000F80019420B502C820887A9801237A98EF
-:107EE000D210E478D39C21882088599823F142F15C
-:107EF00001F1C698D210F670328803820C879ED9A1
-:107F000001601400456814021BA2D09C0120C59892
-:107F10000182521884D163D1348801808D98273032
-:107F2000A884561A3388140018A28169BC9C26695B
-:107F30000269341A9998141A2170140000A341613F
-:107F40006469108092852680B984E4692380E116F3
-:107F50000180F110466913A2621413A20080E11699
-:107F6000B598696914A2C2610280E1140480E11627
-:107F700001010A302788140017A2BC9C140000A33A
-:107F800081812A84A884E61C2C88160012A2D09C29
-:107F9000D210E4700400078024941ACCD39CC598B6
-:107FA00027880A3013000080A4841600C2111E2105
-:107FB0000E871DA214008E8716001CA23510919802
-:107FC00010A200A0108092853B8544D02280073803
-:107FD000BB84EA9821800738B9840C307E812B87D6
-:107FE00072879198000020002B0000002000000004
-:107FF0002000000020000000200000002000000001
-:1080000020000000200000002000000020000000F0
-:1080100020000000200000002000000020000000E0
-:1080200020000000200000002000000014001400C8
-:10803000499814001400E298CD981400140014001C
-:1080400080003701000001020406080C20212240B4
-:1080500080F818000B3001A2140000A2140000A246
-:10806000140202A2388806383988C32064082FA871
-:10807000C128AE9C03A20C30462861816A8400832B
-:1080800056183A8804A8F228919CF4A80C30E128EC
-:10809000919C022806A2C3642E2807A2A064E06D6A
-:1080A000A067C06F14183B882478C16864783E8844
-:1080B00002A8768577866B20C128AE9C44200321D8
-:1080C000A2208120E4A809A2012909A8140005A280
-:1080D00000A372189A873C88E21F01C60AA26E8527
-:1080E0000407919C140004A200A30930E21964F86B
-:1080F0006E853F88E608F7A881F8F0A801C814004B
-:10810000C1F81600B285F080329502FBE21D140022
-:10811000328541F21400E21DA884A0D7E61F1400A6
-:1081200008A243600880C11D1600008360812A8474
-:1081300041F00830A884D6114270DD201100D5200E
-:1081400022881600008047281110FCA8008000A09B
-:1081500002281110FDA89BA83E281110FDA80BA213
-:1081600017000C3000A3E21D81DB1400100201A8EF
-:108170001400E0263A8702FBF219E21F14000DA258
-:1081800006381002B39C04071700FF600C302087EC
-:1081900011A2639D72873788012121A8D210E2784D
-:1081A000669DFCA884D9E2F0A1F06CA81400318887
-:1081B00066D130880F80019420B502C820880FA8AE
-:1081C00001230DA8D210E478669D21882088E6A8B6
-:1081D00023F142F101F14FA8D210F67032880382E8
-:1081E0000C879ED901601400456814021BA2639D90
-:1081F000012040A80182521884D163D134880180C3
-:1082000001A82730A884561A3388140018A281695F
-:108210004F9D26690269341A01A8141A21701400AE
-:1082200000A341616469108092852680B984E46965
-:108230002380E1160180F110466913A2621413A293
-:108240000080E11607A8696914A2C2610280E114E6
-:108250000480E11601010A302788140017A24F9DFF
-:10826000140000A381812A84A884E61C2C881600AF
-:1082700012A2639DD210E4700400078024941ACCEB
-:10828000669DF8A827880A3013000080A484160091
-:10829000C2111E210E871DA214008E8716001CA27B
-:1082A0003510B4A810A207380C307E812B87728756
-:0682B000ADA800000C0D5A
-:00000001FF
-/**************************************************************************
- * QLOGIC LINUX SOFTWARE
- *
- * Copyright (C) 2004 QLogic Corporation
- * (www.qlogic.com)
- *
- *************************************************************************/
-
-/************************************************************************
- * *
- * --- ISP1040 Initiator/Target Firmware --- *
- * 32 LUN Support *
- * *
- ************************************************************************/
-
-/*
- * Firmware Version 7.65.06 (14:38 Jan 07, 2002)
- */
diff --git a/firmware/qlogic/12160.bin.ihex b/firmware/qlogic/12160.bin.ihex
deleted file mode 100644
index dc800ecdaf3a..000000000000
--- a/firmware/qlogic/12160.bin.ihex
+++ /dev/null
@@ -1,1771 +0,0 @@
-:100000000A042A000010040841100000C93600004C
-:100010004320504F525947495448312039392C31E7
-:1000200039313239312C39392C3339313439512085
-:100030004F4C494720434F435052524F54414F4930
-:10004000004E492050533231363146207269776D67
-:10005000726120655620726569736E6F31202E3093
-:1000600034302020432073756F74656D20726F4E9D
-:10007000202E303050206F72756474634E202E6FC6
-:100080002020303020200024C920FF907120000261
-:10009000A070A2700120FF010420FCD0201171206B
-:1000A0000001A070A270C1202000892021127120BF
-:1000B0001000C3700400C7705349CB702050CF703C
-:1000C0002020D3700A000120FD040420D6700920EE
-:1000D000FFFE30212821A2A1004724842484248407
-:1000E00024842484248492A100910920000001200A
-:1000F00032000C08051E182279200047A02F082482
-:1001000011200000A9204000A4420981D81D092027
-:1001100000FF003402A118021001A820A4421B789D
-:1001200064001478CDC0D5C0167871200002D600C6
-:10013000692040470C085C460120FF010420FCD0E8
-:10014000301169208047712000010C085C4614784A
-:10015000D4C01678DE00CA7EC27CC67B67780000F9
-:1001600000788DC0027831203000AF78010123780B
-:1001700002002778020009200200692040471B681E
-:100180000300236807002768FA002B6808002F681F
-:10019000280037680600336808003B6800000981C2
-:1001A0000005CF680A00BF68C04779200047D368C0
-:1001B0002D76C368C04CC768C04BCB68C08CA7689D
-:1001C000448FAB68498FAF68448FB368448FA3688E
-:1001D00001000120FF010420FCD0C81169208047E4
-:1001E0007008CF680A00BF68C049D3683978C3680F
-:1001F000C06CC768404CCB68D08DA768498FAB688E
-:100200004E8FAF68498FB368498FA3680100E6003D
-:100210006920C04B71200002EC70E4D0192009184D
-:1002200021200900201119200C1821200C000C0895
-:10023000751D0120FF010420FCD088116920404C6D
-:1002400071200001EC70E4D0192009182120090068
-:10025000201119200C1821200C000C08751DEE002F
-:10026000112002006920C04C09200200A9200001D1
-:10027000376800000B684000C87B86A3FFFE28118A
-:10028000176800011F6864002000176864001F6879
-:100290000200E8AD1000041F35110981381D01204E
-:1002A000FF010420FCD02811118218016920C06CC4
-:1002B000D8080C08F6220C083D400C088C1B0C08D2
-:1002C000154691200022792000477120500091208E
-:1002D00000247920004771202000912000267920F9
-:1002E00000027120404791200028792000017120F0
-:1002F00080479120002079200047712010000032B3
-:1003000085A03D30902071201000C37000000410C3
-:100310008C11C07086A0020010110C08BA1339208D
-:1003200000000C08AB12AC7805A08011040E9A11E5
-:100330006C7865A010010C08A1200C08261E040E84
-:10034000AF116C7865A010010C08A120040EAF114C
-:10035000092047471120874704210C2205A11001DD
-:100360000C089B1C71204047A07005A0E8014C744C
-:1003700085A40000C8017920000291200080D0727D
-:100380008CA23D3090210C084C27912000809120B8
-:100390003D30040ED111792000476C7865A0200112
-:1003A000712010000C08A120041DD91179200047EC
-:1003B000712010000C08294471208047A07005A00E
-:1003C00088014C7025A070017920000191200080E7
-:1003D000D0728CA23D3090210C084C2791200080D7
-:1003E00091203D307920004771201000040EFA1151
-:1003F0006C7865A010010C08A120041D8E110C085A
-:10040000294404088E11003C84A0070002000C124D
-:100410000C120E120E1213121312181218120C08CC
-:100420007525912000240C08D5400500912000225C
-:100430000C08D5400500912000220C08D5409120E1
-:1004400000240C08D540050041124112421242120C
-:100450004D124D124D124D1256125612611261126A
-:100460004D124D124D124D12701270127012701208
-:10047000701270127012701270127012701270126C
-:100480007012701270127012F80C0600060126012C
-:10049000912000280C0892252E010E010E000D005F
-:1004A0000600060126010C0800122E010E010E00A6
-:1004B0000D00060006012601912000260C08922559
-:1004C0002E010E010E000D000600060126019120EE
-:1004D00000260C089225912000280C0892252E0158
-:1004E0000E010E000D00060006012601D600E600F2
-:1004F000F600792000477120000269204047003D46
-:100500008CD03001EC7084A0001CE2780C085C46B2
-:10051000003D84D050016920804771200001EC70BB
-:1005200084A0001CE6780C085C460C082625FE001A
-:10053000EE00DE002E010E010E000D0008700B8093
-:100540004012077002008CA0E00120119CD008012D
-:1005500087089708C37002400408BD13040E1E13D9
-:1005600061200000186084D004191E13287805A0AB
-:10057000201104001F1304081E13FCD030010600D4
-:100580000C08291B0E005001280006000C081E1B39
-:100590000E002001012007400408BC131079FCD094
-:1005A0002811612040479CC1FCC720006120804782
-:1005B0009DC1FDC7606005A004191E1312797E60FD
-:1005C0002878FCC086A018002011C6000C08261947
-:1005D000CE002B780000786065A0E001C6009C602A
-:1005E0000C08F31BCE009F6000000C08601A092065
-:1005F00018008760030110780600FF841011FF8542
-:100600001001C5C012780C08341B0E001278981126
-:100610000C087F1B10789CD01811612040472000E7
-:10062000612080479CC012787B600000D060C4D0FD
-:100630003001C4C0D260012005400408BC13040886
-:10064000BA13050006A0C270C670CA70CE70DA7008
-:10065000C0703DA08AA04000041A6C130200BA13B7
-:100660000814D6133C1470147014CE13781A7A142C
-:10067000C813DA13DB13DC13DD137C1AC8138714D9
-:10068000DB144119721ADE13C817FE1730187618DA
-:1006900085179217A517B717BF15C8130D1518158D
-:1006A000261534154B1559155C156E157C158615D8
-:1006B000A515B115C813C813C813C813CC15DD157B
-:1006C000F7152B165416661669169316CC16DE16F9
-:1006D00053176317C813C813C813C813751700211D
-:1006E0008AA04000041AC8130200C813C813C81314
-:1006F000C813C8139E1AA41AC813C813C813A81A7B
-:10070000E81AC813C813C813C81303146B1482144F
-:10071000D6143C19C813C8130B19C813EC1A901A35
-:100720009A1AC813C813C813C813C813C813C81318
-:10073000C813C813C813C813C813C813C813C813E1
-:10074000C813C813C813C813C813C813C813C813D1
-:10075000C813C813C813C813C813C813C813C813C1
-:10076000C813C813C813C813C813CA72C6710120AE
-:1007700006402800CE73CA72C67101200040C270C4
-:10078000040EBD13612000001B6001009120005089
-:10079000912080400500C3700140900CC37006405A
-:1007A000780C99204100A1204100A9200500A35305
-:1007B000200CC470C37004000708F808F008E808AB
-:1007C000E00891200080C3700400C7705349CB70CB
-:1007D0002050CF702020D3700A0001200400D67072
-:1007E000792000001B7801003120300059200010D2
-:1007F00029201A045120450461204704C12020000B
-:10080000912000509120804004081804D875DC74B1
-:10081000DA75DE741800292000002025D071C87216
-:10082000CC73C470A02099203000037001000770C1
-:1008300006001A731E722274267521204000FF8163
-:100840000409BA1382A140001012202106A008203A
-:100850000384127007700400077001000870FCD058
-:10086000E80D0770020084A0E0012001C37002407F
-:100870000408BD13A824A553100C0408BA1329209A
-:1008800000002025D071C872CC73C4709820A120BC
-:10089000300003700000077006001A731E72227485
-:1008A00026752120400007700600FF810409BA1355
-:1008B00082A140001012202106A00820038412709B
-:1008C000A824A653077001000870FCD0E80D84A08E
-:1008D000E001480DC37002400408BD13D875DC74F4
-:1008E000DA75DE747808C471C87014219EA70400FC
-:1008F00008110A20CA720408B913C7700A00CB7025
-:100900000400CF702A000408BA13D875DC76DA75B3
-:10091000DE761800292000003025C470C872CC7320
-:10092000D074C670CA72CE73D27405A0E8050AA44A
-:10093000080140120180727884A000FC3801AC7874
-:1009400085C0AE78012005400408BC137E7B7A7A0E
-:10095000867E827D767C8CA400FF700107840480F3
-:1009600004800C810C810F8118A191A20000B1A616
-:10097000000081A50000500007840480048018A3B3
-:1009800091A20000B1A6000081A500001A731E729A
-:100990002276267005A61801107AC5C2127AAC78A4
-:1009A00084A0FCFFAE781800AC7885C0AE7804084F
-:1009B000BA13D875DC76DA75DE76180029200000C7
-:1009C0003025C470C872CC73D474C670CA72CE732A
-:1009D000D67405A000050AA41001041ABC130180F6
-:1009E000927884A000FC3801AC78C5C0AE780120B4
-:1009F00005400408BC139A7A9E7BA27DA67E002641
-:100A000005A51801107AC5C2127A967CAC7884A02C
-:100A1000FFFCAE781800AC78C5C0AE780408BA13F5
-:100A2000092000006C7865A0180108810060D80CCE
-:100A3000C47A0408B813092048470C210120FF019B
-:100A40000420FCD00419B91311208847142204088B
-:100A5000B813092049470C210120FF010420FCD0D4
-:100A60000419B9131120894714220408B81361200E
-:100A7000404728612C621482148214820120FF01F5
-:100A80000420FCD04811612080472863DA732C636E
-:100A90001C831C831C83DE730408B81309204C4795
-:100AA0000C210120FF010420FCD00419B9131120EE
-:100AB0008C4714220408B81318790408B9130920C4
-:100AC00002020C218CA1300F0120FF010420FCD078
-:100AD0000419B91311200201142294A2300F040842
-:100AE000B81309204D470C210120FF010420FCD040
-:100AF0000419B91311208D4714220408B813207962
-:100B00000120FF010420FCD00419B913247A040841
-:100B1000B8131120404CC471FCD110111120C04BEE
-:100B2000078184A00F0003800380038068A2006A0D
-:100B3000086B1C6CDA74FCD1181121203B021000E8
-:100B400021203B012424A4A4001CDE740408B71354
-:100B5000C4770C089A1B912000801C6B146A9120AA
-:100B6000018008270408B71361204047186101205D
-:100B7000FF010420FCD00419B913612080471862DA
-:100B80000408B813C4770C089A1B912000800869E8
-:100B9000186A106BDA77912001800408B713C471CA
-:100BA000102194A20F0082A21000041AB3130C08A3
-:100BB000B42384A30040100195A220000408B713B9
-:100BC000C4710021BCC082A01000041AB313BCD1B0
-:100BD00020111120484704222000112088470422B8
-:100BE000BDC006000021BCC012200C0858231E0006
-:100BF0000408B913C471212049470424C670192080
-:100C000000003000C871212089470424CA70FDC348
-:100C100011202316A9200800042206A13801108201
-:100C2000041F0916C471C8720408B21392A22316D5
-:100C3000260022211E000C086A230120FF01042047
-:100C4000FCD01011FCD3F0090408BA13E803FA0031
-:100C5000F401EE020400010002000300612040479D
-:100C600028612C62148214821482C4702A60C870B5
-:100C70000380038003802E600120FF010420FCD04C
-:100C8000A011260016006120804728612C62148282
-:100C900014821482D8702A60DC7003800380038081
-:100CA0002E60DA71DE721E002E000408B813612077
-:100CB00040473061C47032600120FF010420FCD045
-:100CC0000419B913612080473062C870326004088B
-:100CD000B81318790408B913C47184A1CFF048017E
-:100CE0000120FF010420FCD00419B313C8720408CA
-:100CF000B213192000000C08A62336000120FF01C2
-:100D00000420FCD018011E000408B913C87184A186
-:100D1000CFF028010E001021C4710408B213FDC3E6
-:100D20000C08A62310231E000408B813C47182A166
-:100D3000100048020120FF010420FCD00419B31365
-:100D4000C8720408B21311204D4704220600048122
-:100D5000081208811221192000000C089323012099
-:100D6000FF010420FCD018011E000408B913C8714B
-:100D700082A11000280206001021C4710408B213D9
-:100D800011208D47042206000481081208811221D7
-:100D9000FDC30C0893232E001E000408B813C47171
-:100DA000C87284A1FDFF0419B21384A2FDFF0419C7
-:100DB000B2130021207922780022247A26780408B0
-:100DC000B8131120404CC471FCD110111120C04B3C
-:100DD000078184A00F0003800380038068A2C8728B
-:100DE000CC73D874C6710068CA70CE73DA7491205F
-:100DF0000080026AACD2181121200000900084A467
-:100E0000FF0082A00200041A4F173F84BCA7FF0016
-:100E1000400186A7020004194F1784A4FF000409AB
-:100E20004F1761200002FCD1100161200001292030
-:100E30000900312062003F84BCA7FF003001078316
-:100E400084A0FF0010113DA738114120190084A390
-:100E5000FF0082A01A001002A4A4FF00078384A050
-:100E6000FF00880142A8F00286A0100020119CA378
-:100E7000FF009DA3000FBCA3FF00002502A7900266
-:100E8000002602A7781239203A00046805A70668F0
-:100E90000A6B0C6BCE731C68DA701E6C912001809B
-:100EA0000408BA13912001800408B413C4770C0815
-:100EB0009A1B91200080146A1C6B91200180C870DD
-:100EC0001668CC701E6808270408B713C470612028
-:100ED000404718611A600120FF010420FCD004196A
-:100EE000B913C8706120804718621A600408B813EB
-:100EF000C471C872CC7382A11000041AB3130C0819
-:100F0000D82384A30040100195A220000408B71341
-:100F1000C4770C089A1B91200080086A8DC20A6A67
-:100F20009120018008270408B813C4770C089A1B85
-:100F300091200080086A94A2F9FF0A6A046805A05B
-:100F400010010C08D5229120018008270408B8134D
-:100F5000C4770C089A1B91200080086A95C20A6A1F
-:100F6000046805A010010C08D522912001800827F3
-:100F70000408B813C477412001004920050051201E
-:100F80002000912000800C08B21B912001800827CE
-:100F9000086A0408B813C477FCD728010C08291B79
-:100FA00038010408BC130C081E1B10010408BC13F4
-:100FB000C873CC72C677CA73CE720C082A1CE811AB
-:100FC000186805A0A001082776000C08F7237E000A
-:100FD000701101201500FCD718116120404718003E
-:100FE000FDC0612080472A78912001800500912072
-:100FF0000180012005400408BC13912001800408F1
-:10100000BA13C477FCD728010C08291B380104083F
-:10101000BC130C081E1B10010408BC13C67741202A
-:1010200021004920050051202000912000800C085B
-:10103000B21B09201600FCD7181161204047180088
-:1010400061208047FDC1636003007B600000726720
-:101050007F600F002A79D061C4C1D2610C08D5220B
-:10106000912001800500C877CA77C477C677FCD77E
-:1010700028010C08291B38010408BC130C081E1B8E
-:1010800010010408BC13BCA700FF912000800920B8
-:101090001700FCD7181161204047180061208047D5
-:1010A000FDC17B6000006360020072677F600F001B
-:1010B0002A79D061C4C1D2610C08D5229120018067
-:1010C000412021004920050051201000912000807E
-:1010D000C87005A01801D060FDC0D2600C08B21B1A
-:1010E000C8703668388784A71F00C01D9120018012
-:1010F000050019200000C87284D228010C08291BA1
-:1011000038010408BC130C081E1B10010408BC1392
-:10111000C872CA72AC7884A0030018153920000088
-:1011200084D20801FDC7412021004920040051203C
-:1011300008000C089A1B912000800868D4C00DA8F4
-:101140000A693768000091200180388784A71F0052
-:10115000801DBCA700FF3F8738873F8784A7000F0B
-:10116000401D91200080C8726920000184D21011B6
-:1011700069200002086884A0FDFF0A683068B4D0C6
-:10118000B0014B680400A9201400486894D01001F5
-:10119000041FC2184B680900A9201400486884D0B5
-:1011A0001001041FCB18A920FA00041FD2187920BF
-:1011B000004709201800C87284D2181161204047E6
-:1011C000180061208047FDC17B6000002A796360C0
-:1011D00001007F600F00A3600000A460AE60B260F9
-:1011E000D060B4D06001B4C0D260C600B46065A065
-:1011F0000860D4C00A60186001801A60CE00D06018
-:1012000084A0FF7ED260AC788DC0AE78FF830801E9
-:1012100005001B685400912001800500CC730C0868
-:101220007818EC69486A85A100184A6885A14000D1
-:10123000EE68CC7321200400A920FF09041F1B19AC
-:101240002184D01D1983B01DEE694A6A9120018066
-:101250000500FCD71811692040471000692080471D
-:10126000C471C6711669FF811011A3680100AC78C2
-:101270008CC0AE7884D010110C087A1C0500D8758B
-:10128000DC74DA75DE7410002EA02025C471C873DA
-:10129000CC72C671CA73CE7279200047DE7DDA7CCB
-:1012A000D67BD27A0C08771B04095C1AA9200500AA
-:1012B000A120144791200080A141912001800920A4
-:1012C00040000C08411D20010C087F1B04085C1A1B
-:1012D00004608CA0FF008EA10900201106000C08FC
-:1012E00086200E0084A000FF078009800409F11900
-:1012F000C600682C0C08771BA805002C9E68098185
-:10130000C01D9F600000CE00C600DC7DD87CD47B71
-:10131000D07A90A2400099A30000A1A40000A9A542
-:101320000000DE7DDA7CD67BD27A682C9C6865A0D2
-:101330000409F019092040000C08411DA0150460A3
-:1013400084A0FF0086A002005001046084A0FF007A
-:1013500086A00A00381116000C0883201E00002DFC
-:1013600002609808CE00C6009C600C08F31BCE00FB
-:101370009F6000000C08601A092018000860CDC0AA
-:101380000A600460866010780600FF841011FF85F3
-:101390001001C5C012780C08341B0E0012780C081E
-:1013A0007F1B04085C1ACE00C6009C600C08F31B6F
-:1013B000CE009F6000000C08601A092018008760AA
-:1013C00003011B60030010780600FF841011FF85E5
-:1013D0001001C5C012780C08341B0E0012780C08DE
-:1013E0007F1B04085C1ACE001461FCD120010C089C
-:1013F000291BF00118000C081E1BD0010C08601AF4
-:1014000009201800876003011B6021001078060086
-:10141000FF841011FF851001C5C012780C08341B21
-:101420000E0012780C087F1B012007400408BC1333
-:1014300004618CA1FF0086A1050018111C60BDC0CD
-:101440001E60C474C873CC72146091200080E600E2
-:1014500009201200FCD0181171204047180071209B
-:101460008047FDC12A7963700500D071C4C1D27173
-:1014700066736A726E74727077700000002C7A70F6
-:101480002EA030251C6184A1600010010C08E93FEA
-:10149000EE009665A6659A66AA66AF600000B36026
-:1014A0000000146723600000246096A00100101162
-:1014B000008026600C08D522912001800500C370B1
-:1014C00005400408BD13A920050099201447912068
-:1014D00000800A5391200180002110A299A30000EE
-:1014E000A1A40000A9A500000500C471C7700000F8
-:1014F0001E790408BA13C471C671682110006920EE
-:1015000000100C6916A0042D10A2688D0981D81D49
-:1015100085A200001811C37000401000C370034082
-:10152000CA700408BD136479C671C47182A1030036
-:10153000041AB31366790408BA136479C6710408EF
-:10154000BA130079C671C47102790408BA1300791C
-:10155000C6710408BA13C470112000008CA00D00DD
-:1015600060010C81300210820C810C81100210820B
-:101570000C81FF810419B41310820E7A8CD23805C5
-:101580001079CDC11279092021001920030084D2DD
-:10159000C00108811920410011204E8F122319200B
-:1015A00042001082122319204300108212231920B6
-:1015B000460010821223192047001082122319209E
-:1015C00006001120538F12211120738F12230479EA
-:1015D00006780408B9130478C6700408BA13C471F5
-:1015E000FCD118111120C04B10001120404C078174
-:1015F00084A00F0003800380038068A211200000F4
-:101600001468FCD0100195A20002B4D0100195A27C
-:1016100001000C6B0068DA700408B7131478F4D07A
-:10162000300101200740DB70000005A04800FCD01D
-:10163000300101200740DB70010005A0080006A072
-:1016400005001478F4D0300101200740DB70000061
-:1016500005A0080006A005001478FCD03001012088
-:101660000740DB70010005A0080006A0050012710C
-:101670001A721E731078C4D010012274267580ACC3
-:10168000010008810C81A9819880A120300003709D
-:1016900000008460A220A65307700100747984A121
-:1016A00000FF40010F810C810C81048004800780C1
-:1016B00000A118000781048004807C7908A1787A51
-:1016C00006A011A2107DC4D52001847B19A3807CC3
-:1016D00021A40870FCD0E80D03700100077006001B
-:1016E0001A711E72107DC4D510012273267484A055
-:1016F000E0010500487865A02001042C4A786320A9
-:1017000000000500F6007920004748786220002C90
-:1017100005A010110C0875254A78FE00050011205F
-:1017200000914A7AC47B1983280180A232001220DA
-:101730001020C80C13200000050016002600FCD75E
-:1017400018111120C04C10001120C06C84A7000F8C
-:101750000B8084A71F002001038003800380038087
-:1017600005A168A22E001E000500390C00292A6878
-:10177000002A2E68086884A0EFF90DA80A69E6001F
-:10178000FCD728110920524771204047200009202A
-:101790009247712080470C21046805A0480116A1DA
-:1017A000381160200060066816000B200000180049
-:1017B000092000001600046865A078010060066832
-:1017C00021040C08B21D1068087909810A7901808A
-:1017D0001268881D1079A5C112791E000269066978
-:1017E000002D60200C08BF26EE00050065A06001FA
-:1017F00008209C6005A0280162209F60000065A071
-:10180000C00C48784A7962200500076003018F60A8
-:101810000000A9201C0080AC0500A02001200000D1
-:10182000A44028681A602C6822600500E600FCD7F6
-:101830002811712040473120C04720007120804787
-:101840003120C0494C708CA00002281108A60A2D36
-:1018500000804E7006A0EE000500F600FCD71811BF
-:10186000792040471000792080470C089A1B91206E
-:10187000008004680A7865A0F0053000002C0A7822
-:101880006020006065A0B805106006A3B81D0C605C
-:1018900006A2A01D282C487806AC0811480404684C
-:1018A00006AC401100606020066805A018110368AE
-:1018B00000004800006408786020026486A40000EC
-:1018C0001011002C026860250C08021C1B6005002A
-:1018D00023602000FE000C08B21DF6000879098183
-:1018E0000A7910680180126818111078A5C0127862
-:1018F0000120FFFF05A0FE0005007600002739202B
-:101900000000FCD00801FDC741202100492004004F
-:1019100051200800912000800C08B21B388784A752
-:101920001F00D01DBCA700FF3F8738873F8784A7D3
-:10193000000F901D912001807E0005006C78092029
-:10194000748F0C210DA1180165A00408A12061204D
-:101950000000186084D0B81110788CD030018CC091
-:101960001278FCC76920404728008DC01278692092
-:101970008047FDC7912000801C681F6800009120EF
-:10198000018005A0081105008CA0F0FF10010C08D3
-:1019900075250200D71CDA1CE01CE41CD81CE81CCE
-:1019A000D81CD81CD81CEE1C181D1B1D201D291D61
-:1019B000D81CD81C05000C0875250C087A1C0120C1
-:1019C00001800408321D012003800408321D01201B
-:1019D00004800408321D0C087A1C012006800408CB
-:1019E000321D11200A8091200080FCD71811692037
-:1019F00040471000692080473820006886A000001A
-:101A000020011E6F91200180050026007068BCA097
-:101A100000FF4120210049200400512010000C0843
-:101A2000B21B388784A71F00D01D912001800E00B3
-:101A30007069C671D00001200C80B8000C087A1CB7
-:101A400001200D809000FCD71001E4780800E078B8
-:101A5000C67001200E804800FCD71001EC78080009
-:101A6000E878C67001200F800000C270FCD7181102
-:101A7000DB7000001000DB700100612000001B60C3
-:101A8000010091208040050080AC0100FF81180515
-:101A900099203000A0200C7084A0FF07000118706E
-:101AA00006001C70060020700600247006001271EB
-:101AB000AC811A721E7322742675037001000770C0
-:101AC000010008700B80E81E077002008CA0E00186
-:101AD0001011A55306A003700000077004000E004B
-:101AE00026700E0022700E001E700E001A70050087
-:101AF00011202000092010000A6B0E6C1F680102E3
-:101B0000036820FD076838001A6A002DE8A0080065
-:101B100090A204000981801D0500EC70DCD0201526
-:101B2000292001001478CCD06011EC70E4D0192089
-:101B30000A0C21200A00201119200C0C21200C0075
-:101B40007000EC70E4D0281119200C1821200C0032
-:101B500030001920091821200900ADA500020A6BE8
-:101B60000E6C1E6D07683800050004608660082C46
-:101B700063200000687805A06A791001022C080033
-:101B80006E790500C6006120004787680301082DB3
-:101B90006B200000686005A06A611001022D08003A
-:101BA0006E61CE00050091200080042C6E7805A0A7
-:101BB00008116A78912001809C6005A08801C60008
-:101BC000602008209C6005A0380162209F60000012
-:101BD00065A09C6005A0C81D48784A796220CE00A7
-:101BE000487862209F60000085AC000010110C084E
-:101BF00075254A780500A920100006A0048086807B
-:101C00008E81081200A2041FFC1D86808E810500B3
-:101C10005601A920100005A0B8011AA1A81213822C
-:101C20008D8128021AA12012041F0C1E28001AA15F
-:101C300008231082041F0C1E0600003284A0FFEF50
-:101C400080200E005E0105000600003285A0001015
-:101C5000B80C747DD07006A50409DA1E10785020E7
-:101C60000C08771B0409DA1E46A070790025008055
-:101C700012A10920400008123000D07206A21801FB
-:101C8000408809208000C600127107700100992069
-:101C90003000A920200080AC0100A02061200000BD
-:101CA000FF8810010C08771B0870FCD0E80D077046
-:101CB0000200912001808CA0E0013815A553FF8C13
-:101CC0002011FF880409C71E5000002C8E78A9201F
-:101CD000200080AC0100A020A5530408C71E46A028
-:101CE00018721C73C4DA10012074247592A240008B
-:101CF0009BA30000A3A40000ABA500001A721E73F2
-:101D0000C4DA18012274267506A0077004000409BD
-:101D1000C71EFF8C10010C087F1BCE000C087F1B18
-:101D200046A0887800808A7886A00200C0017C7A6C
-:101D3000787BC4DA1001847C807D7479078104800B
-:101D4000048010A299A30000A1A40000A9A500008E
-:101D50001A721E73C4DA8805227426757004146022
-:101D6000FCD018116920404710006920804791205D
-:101D700000801F680200FF88200146A08C78602048
-:101D8000700C8B780000AC7885A00300AE789120B1
-:101D900001809800CE008B7800000C085C20046065
-:101DA00084A00F005900FF8830018C786020046007
-:101DB00084A00F0019000408261E05000200EC1E76
-:101DC000071F201FEC1E2D1FFD1EEC1EEC1EEC1E1F
-:101DD000051F1E1FEC1EEC1EEC1EEC1EEC1E392017
-:101DE0000004BC7805A7BE78086005A70A600C0847
-:101DF000691F9C60BA789F6000000C0848200500AD
-:101E0000BC78C4D00801580C1C60BDC01E603000F6
-:101E10000C088620BC78C4D00801080CBF780000EC
-:101E20000460078084A0FF00B278018038010C08AC
-:101E3000691F2001BC78C5C0BE7810000408841F4B
-:101E400005000C088320BC788CA0000E1011C4D0B3
-:101E5000081128080C08691F10110408841F0500C8
-:101E6000BC78C4D010010408EC1EBF7800001467D1
-:101E700011200100A822186084A0FF0005A088019D
-:101E8000BCA700FFA92020008EA001005001BCA724
-:101E9000008011200200A92000018EA0020008018C
-:101EA000C0000C089A1B002D912000802B680000B8
-:101EB0002F680000086884A0DEFF0A68E8AD100003
-:101EC00091200180041F511F11821801A9200001D7
-:101ED000580C0C087F1B05009F600000B4786DA0B3
-:101EE000002CB6781011BA7838009E68002D026078
-:101EF000B87806AD08110260B0780180B278301170
-:101F0000BC78C4C0BE78B878602006A00500E600A2
-:101F10002EA03025BA7DB67DAE65B2651C60A2608C
-:101F2000482084A9FFE11E6084A9600060010C08BC
-:101F3000E93FFF864011FF853011392000080C0869
-:101F40004820040846209665A6659A66AA66146726
-:101F500071208047FCD710117120404784A7000FE3
-:101F60000B8084A71F00200103800380038003806F
-:101F700005A1C07168A10027078084A00F0003801D
-:101F800003800380C47100A1C26091200080147896
-:101F9000C4D03801FCD71811F4D040111000FCD087
-:101FA0002811086E84D6F001FCD9E011912001803F
-:101FB0000C08021C912000800C08B21D91200180A9
-:101FC0001478C4D004094620FCD72011F4D0301175
-:101FD00004084620FCD01011040846201B60210094
-:101FE00004084620246096A001001011008026609D
-:101FF000106A146802A268026001912001803920F1
-:1020000000029C60BA789F6000000C084820040819
-:102010004620082CFCD9F001006865A0D801046AAC
-:10202000007084A002006801487006A25011046B81
-:1020300060210423026005A0081102696022026188
-:102040009800002D60200C08BF26086E60210262F7
-:10205000066950000068026965A01001026108006D
-:1020600006696021036000006021FCD91801B4A654
-:10207000FCFF0A6E1068087D28850A7D00801268C2
-:1020800091200180B4D62801B6A640000A6E0C0843
-:10209000131CEE000500086005A70A60912000806F
-:1020A0000C08B21D91200180B87865A028019C60C1
-:1020B000BA789F600000780CB678BA78050070791D
-:1020C0007478182884D31801008012A1200200809F
-:1020D00012A1781284C37C7A1A72787A1E72C4DADA
-:1020E0002001847A2272807A267206A084D30801A5
-:1020F00000807678D2701C7805A0380101801E78A7
-:102100002011040E82209120804005003920982063
-:10211000100039209E20042705A0600100AC682033
-:102120000869106812690A680C69146816690E68F3
-:102130003887880C0500030009000F0015001B00FC
-:10214000000015001B000000412000000C78020078
-:102150004A222522A92019213920748F3427107D85
-:10216000C000846086A00301041903211461186073
-:1021700005A12001FF86D81104080321038680A051
-:10218000558F0C6202220080106202220C08D01DC2
-:1021900030868EA60F00040984216C7865A0081D86
-:1021A000087802A62012ACD510113A26050082A6A6
-:1021B0000300041A8421912000806920000018681F
-:1021C00084D0F8111120558F0422C6701082042289
-:1021D000CA7084D6301110820422DA701082042270
-:1021E000DE7085A62080C2701B68010091208040AF
-:1021F000107884A0CFFF1278912001803B2000004E
-:1022000005001078ADC01278040884213A260C0825
-:10221000502204196C226C7865A00419AE2091201C
-:102220000080107884A0CFFFFF860801ADC012782F
-:102230009120018004086C223920748F3427107D8E
-:10224000A000846086A0030104196E211461186047
-:1022500005A12001FF86B81104086E2180A6558FC4
-:102260000C6202220C08D01D30868EA61E000409C6
-:1022700084216C7865A0281D087802A62012ACD5B0
-:1022800010113A26050082A60600041A8421912026
-:10229000008069200000186884D0F8111120558F43
-:1022A00009204E8FA8261C2104221A2008811082A2
-:1022B000041F502185A63080C2701B680100912048
-:1022C0008040107884A0CFFF12789120018006A072
-:1022D0000920758F0A203A2005001078ADC01278C9
-:1022E000B0003A260C08502204196C226C7865A0C4
-:1022F00004191E2191200080107884A0CFFFFF8652
-:102300000801ADC012789120018004086C22912050
-:102310000080077004009479D47002A1280268013B
-:10232000907B02A350111000028038113A261078D9
-:10233000ADC0127891200180050084A100FF40010A
-:102340000F810C810C8104800480078000A118009B
-:102350000781048004809C7A10A21A72987A06A0E1
-:1023600011A21E72C4D43001A47A11A22272A07AE2
-:1023700011A22672A1203000037000000920548FA2
-:102380000A2609819821042184D008013386B0A649
-:102390000200A826A65303861270077001009079E8
-:1023A000947800800AA1081206A02820747984A1DC
-:1023B00000FF40010F810C810C81048004800780A4
-:1023C00000A118000781048004807C7908A1787A34
-:1023D00006A011A2C4D42001847B19A3807C21A46F
-:1023E0000870FCD0E80D84A0E001D001107D312000
-:1023F000548F3426A8780080AA788CD038110770C2
-:102400000600047094D0E81D04088621692047471F
-:102410006B200300AC7885A00003AE7806A04800CE
-:102420003020D67591208040967D107DACA5CFFFE1
-:10243000127D91200180AA78077006003A26037069
-:1024400001001A711E72C4D5100122732674050092
-:10245000846086A00301D8111461186005A1B81129
-:1024600069200000186884D090110C60C67010605C
-:10247000CA70C37020801B680100912080400C0846
-:10248000D01D040E43226C7865A0101D0500590074
-:1024900030156C7865A0E0191004290000156C78DF
-:1024A00065A0D81DE000846086A003016811186053
-:1024B000FCC01A6086A0040038110478A4D0200162
-:1024C0000C08D01D06A005007900181185A0010098
-:1024D0000500B900101141200100107D0500FF88A2
-:1024E0001001912080400500907B9479D47002A166
-:1024F000181185A300000500100202A30500028048
-:10250000050084A100FF40010F810C810C81048033
-:102510000480078000A118000781048004809C7A51
-:10252000987BA47CA07D10A206A019A321A429A5B4
-:1025300009201800286005A01001092040000C089F
-:10254000341BD001A8780080AA788CD010151460B4
-:10255000FCD0181169204047100069208047912065
-:1025600000801F680300AB780000AC7885A00003F2
-:10257000AE78912001806800AB7800000C08D01D77
-:102580009079947800800AA1081206A09678D670F7
-:1025900006A071201000912001800500FCD71811C1
-:1025A00009205847100009209847912000800A20F0
-:1025B000F6000920804779200001FCD7201109206E
-:1025C000404779200002042186A000008011FCD73A
-:1025D000181109204547100009208547042105A04E
-:1025E0003011307884A0C00010111B785200FE001A
-:1025F000050009200200692000470120FF01042096
-:10260000FCD004194B237120804779200001212040
-:10261000BF494B780F000120FF010420FCD01801B6
-:102620001920373E3000A1202B011920373E84D1DC
-:102630001001A1202B02042305A040019A781883E1
-:10264000AC2318839823A6531833A80C9B7800005A
-:102650009B782000A9201000AF780000AF782020E0
-:10266000041F29230370000016008CD109200000EC
-:102670000801BDC10C086C241E00207084A00F004E
-:1026800085A0006306780F7800904378D8005378CF
-:1026900090000B78082F52744F70000009814001A0
-:1026A00071204047792000022120BF4704080623FB
-:1026B0000C0826250500160011200101BCD11011BF
-:1026C000112001028CA10F00042284A0F0FF05A1BB
-:1026D00012201E000C086C24050011200101FCD3FF
-:1026E000101111200102A92009000B81041F72237F
-:1026F0008CA1000E042284A0FFF105A11220050088
-:102700001920020009200101A92005001382041FDD
-:10271000832394A2E000042184A01FFF05A20A20C5
-:102720001983180109200102780C0500112001010C
-:10273000FCD3101111200102A9200C000B81041FF1
-:102740009B238CA100F0042284A0FF0F05A112207E
-:10275000050011200201FCD31011112002020422F5
-:102760009CA0300F84A0CFF005A112200500C60068
-:1027700061200001BCD1101161200002BCC10381A5
-:10278000038080A020009A60AC62AC63CE0005009C
-:10279000C60061200001BCD1101161200002BCC143
-:1027A0000381038080A022009A60A46084A0DFFFE0
-:1027B000AE60CE000500C60061200001BCD1101142
-:1027C00061200002BCC10381038080A020009A60C8
-:1027D000A4608CA220001801ACC29DA30040ECC3F1
-:1027E000B4D30811EDC3AE621020A460AE6318200C
-:1027F000CE00050091200080C600E600186805A004
-:1028000004095024FCD118016120D08E10006120F1
-:10281000C08D0C0858246005A9200101FCD11801C5
-:102820006120D08D10006120C08CC6000C08582497
-:102830002801CE00608C041F1224A8040E00FCD1D5
-:10284000280182A0D08D71208047200082A0C08CFA
-:102850007120404776707271382101200400627047
-:102860007F700F00D071C4C1D2710C08CB22C000A0
-:10287000FCD1181171204047100071208047206062
-:10288000DDC0226072713821002C7A7001200600B0
-:1028900062707F700F00D071C4C1D2710C08CB225E
-:1028A000012000001000012001009120018005A0FE
-:1028B000EE00CE000500042C05A070016020106021
-:1028C00006A340110C6006A22811146006A1101185
-:1028D00006A020000060800C85A001000500F60025
-:1028E000E60016007920804771200001BCD120113C
-:1028F000792040477120000220798CA10F00EC70F4
-:10290000C4D010111E0060000B810B810B810B8164
-:102910000E008DA10008BCD010118DA1000F042164
-:10292000EE00FE000500012001470420ACD0381164
-:10293000E468ACD0200184A006000811090005005D
-:102940001460E600360018207120404CFCD01011B5
-:102950007120C04B078084A00F0003800380038098
-:1029600070AE047084A00A0004192325087194A194
-:1029700000FF040923258CA1FF001C7084A000FF28
-:10298000C001047085A03A0006700120090002A170
-:10299000D81601200A0002A1D01601200C0002A1C5
-:1029A000C8161C7084A0FF001E70047084A0DFFF96
-:1029B000067001200A0006A1A80101200C0006A152
-:1029C000A0010120120006A198010120140006A117
-:1029D00090010120190006A188010120320006A102
-:1029E0008001D80009200C00D00009201200B80096
-:1029F00009201400A00009201900880009202000E7
-:102A0000700009203F00580009200A0040000920FA
-:102A10000C002800092019001000112000000021DE
-:102A200005A20A70047085A00A0006707120004794
-:102A30000470BCD05801FCD32011EA7371204047C8
-:102A40001800EE73712080471F700D003E00EE00ED
-:102A500005000120FF010420FCD0D0110120FD045D
-:102A6000042082A00500A01271200002EC718CA14C
-:102A7000001C0F810C810C8179200001EC7884A06E
-:102A8000001C07800480048005A18AA007000802BA
-:102A90000500020074255B2574255B254E256825FD
-:102AA0004E25087084A0FFC385A000300A70087806
-:102AB00084A0FFC385A000300A780500087084A0B8
-:102AC000FFC385A000200A70087884A0FFC385A0FA
-:102AD00000200A780500087084A0FFC385A0000CC0
-:102AE0000A70087884A0FFC385A0000C0A7805004E
-:102AF000040E7525912000807120000006001870DA
-:102B000084D0E81D0E0071201000CA700E00C6703F
-:102B1000C3700280DB70040ADF702A00712000009D
-:102B20001B70010091208040F80C3C7F587E307C67
-:102B3000387DA0788A708E75927496769A7794A56F
-:102B40003F00F4D43801BCD7281184A77D000419B4
-:102B50009C3C71089CA40F0082A304002003A6A340
-:102B6000070030191824078584A00F0002006C2B81
-:102B7000572C952CFB2E7932D03276330534D9344C
-:102B8000AB35C725C4259E29852A4D32C4250C089E
-:102B90007525050006A0380008788DC00A7806A0C3
-:102BA00002704A704270CE705C7005A0041918273C
-:102BB000607084A007000200E12552265A26632691
-:102BC0006C26FE26752652263078BCD0101DD0719A
-:102BD000BCD1F819B4D104192F26A07086A0010029
-:102BE000C009147005A0A819B0706DA0006865A098
-:102BF00055A09B7880000C6BAA7B086845A0106DDF
-:102C000004686DA05DA086A801001801BC69AA7DBA
-:102C1000AA79C0684DA01C6E0120100004084B2842
-:102C20005C7005A00419C625C600D600B0706DA062
-:102C3000006865A055A09B7880000C6BAA7B086893
-:102C400045A0106D04686DA05DA086A80100180164
-:102C5000BC69AA7DAA79C0684DA01C6E0120200025
-:102C600004084B280C085B3C0419C6251B78680037
-:102C7000B8706DA0B4685A789468D678DE78986891
-:102C8000D278DA7808788DC00A78BC683E70B4C112
-:102C9000D271B47065A0C068567003700200002D38
-:102CA0004A7080AD0900427005000C085B3C2011A1
-:102CB0001B7854000370040005000C085B3C2811CD
-:102CC00011200C0019040370040005000C085B3C83
-:102CD000281111200600D1000370040005000C0823
-:102CE0005B3C281111200D008900037004000500D1
-:102CF0000C085B3C501111200600410078707B707D
-:102D0000000068204A700370040005007071FCC167
-:102D1000078182789B78800086A20C002011AA7A15
-:102D20000120010098008CA11F008DA1C000AA798C
-:102D300086A20D002001AA7A012002003800AB789B
-:102D400020007471AA79AA7A012004009B7860009F
-:102D5000AA785B7804001B7813010C086E3C7F7026
-:102D60000F00D070B4D06801B4C0D270C600B47087
-:102D700065A0086084A0EFFB0A60186001801A60FB
-:102D8000CE000500147005A03811D070B4D0280111
-:102D9000B47006AC1011290C05001600A07186A1B4
-:102DA00001002805D600260000211120010012A2F2
-:102DB000B0706820006806AC20011182B001C90023
-:102DC000C80CC60000211120010012A2B0706820BA
-:102DD00000686020086084A0EFFB0A601182100187
-:102DE0004100B00CA3700100CE002E00DE001E00DA
-:102DF0000500E8AD0500A87006AD1011A4706820AC
-:102E000005000C085B3C0419C625787068207077B3
-:102E10000C08953B502C0C08F63C9B7880001468FD
-:102E200084A01F00BDC0AA781C6E412001000120B3
-:102E30000400040850280C085B3C0419C6259B7844
-:102E400080005C706820146FD070B4D06801B4C08A
-:102E5000D270C600B47065A0086084A0EFFB0A6061
-:102E6000186001801A60CE000C08953B502C0C08AD
-:102E7000F63C246805A0300182A00600080210007C
-:102E800027680500146884A01F00BDC0AA783120FF
-:102E900020004120010001200300040850288DC2B9
-:102EA000D272BC7200A215A0507108812AA108023A
-:102EB000BC7164210465FF85701152712184A81DC5
-:102EC000D0708CD02801CC7005A01011CF700A00F2
-:102ED00005000022900CD0708CC0D270CF70000022
-:102EE000346005A0B01D086784A73F07D001D4D780
-:102EF000801D84A72100681D84A70200300184A7DB
-:102F00000400380DBCA7FBFF0A6784A71802081D40
-:102F100084A700013001186005A0D819BCA7FFFEE6
-:102F20000A676825236800001C6E84A60E001863DB
-:102F300028011C6002A3200218015808FF834819C9
-:102F4000582D502C5271BCD72011287022603A6045
-:102F50001000BCC70A67C06865A04DA00061602A68
-:102F600041200100146B9CA31F009DA3C000FCD155
-:102F7000100184D610019CA3BFFFA4D610019DA30D
-:102F8000200084A60E0004190228A5C70A67002C99
-:102F9000C668A07786A701007811D070B4D0601100
-:102FA000007082A0020040123078BCD028119B78BB
-:102FB0008000AA7B040849283987A2775027AC777C
-:102FC000B0A70500A87006A60811A476AE763A2C24
-:102FD00038873A2D38873A2838873A2338873A2570
-:102FE0003078BCD050019120008091203D30D070CD
-:102FF00084A03D30912000809020D5AA00002001BF
-:1030000021840022041951270500DCD10409F1377D
-:10301000292020009CD6201128858CD608112885CF
-:103020004088146F0C6108818CA1FF00C87060A1FA
-:10303000642CFF8C8801146006A7D01DB860018045
-:10304000BA60881D602A086085A000010A6000221D
-:103050002184041951270500602A0E61BE69002CE5
-:10306000C66840880860D5C00A60A07786A70100BE
-:103070000419D927D070B4D00419D927007082A0C0
-:103080000200041AD9273078BCD00419D9279B78BC
-:103090008000AA7BAA7DAA790120020006001860A0
-:1030A00000801A600800060060290461602A0C088C
-:1030B000093D901584A11800800184A11000180119
-:1030C0000C089A39481584A108003801A06984A128
-:1030D000000618110C08B838F800A06984A1001E79
-:1030E000280584A100087801C6006029006085A039
-:1030F0000020026004618DA110000661CE000C0862
-:103100009A395011A06984A1000218010C08FD38F9
-:10311000180084A10004F019A06984A100103001F6
-:1031200014698CA100FF0F810C08C5232E008CA60A
-:10313000E00084A66000280186A0600010118DA127
-:1031400000408DA10401B6699B7860000028AA7830
-:103150001868FDC01A68BCD66801FCC08370000006
-:103160008AA00D0028038AA00C00827101200C00A7
-:103170000C808671AA781835403328340080AC80E2
-:1031800080AF2B00A0209B78000080AD0B00982022
-:10319000A653A8239828A02586A220000815D07041
-:1031A000B5C0D270002CB670002DBA701468FCC087
-:1031B0000780827886A2020004092129A07000807D
-:1031C000A270B07498A40500A87006A30811A47397
-:1031D000B27386A210000409C625DE00CE000500E9
-:1031E000007005A0E01986A20200041938290C0815
-:1031F0005B3CA8191468FCC007808278912000808D
-:103200001B786800B4685A789468D678DE78986835
-:10321000D278DA789120018008788DC00A7826016A
-:10322000D600C600D07084A0002E9020CE00DE0014
-:103230002E0100295670BC683E7003700200002DFC
-:103240004A7080AD090042703078BCD040019120B6
-:103250003D30D07084A03D30912000809020A0703F
-:1032600005A0081105002184E80D4C72BC7000A275
-:1032700015A00408512786A2100060150C085B3CBD
-:103280000419CC281468FCC0078082781B78680079
-:10329000B4685A789468D678DE789868D278DA7804
-:1032A00008788DC00A78A0700080A270B07490A4D5
-:1032B0000500A87006A20811A472B2720029567007
-:1032C000BC683E7003700200002D4A7080AD09009A
-:1032D00042700500B46B9DA300205A7B1468FCC0AB
-:1032E00007808278946BD67BDE7B986ED27EDA7E06
-:1032F0001B78680000295670027208788DC00A7821
-:10330000002305A67001D07084A0002E86A00026A0
-:1033100018110920000010000920010084A20F00EC
-:10332000330080AD09004270002D4A7005009C29D1
-:1033300008420842F64108429C299C299C290C0815
-:103340007525087884A0FDFF0A78F60079200047EB
-:10335000AC78FE0084D0C001607186A10100040930
-:10336000612A86A10700700186A1050058117870B6
-:1033700068201B68040017680000206884A0FF0014
-:103380009DC0226863700000A3700000A470AE703E
-:10339000B2700C08AE26560111200400607186A19F
-:1033A0000100580186A1070018111F7005001000C8
-:1033B0001F700100D070C5C0D27001200A470420E0
-:1033C00084A0FF0086A0180030011870167005A0B8
-:1033D0001011A370010066000C084E3FA9201000D8
-:1033E000392000000C088B3AB8A70001041FEF2910
-:1033F0006E00007002002C2A0A2A0A2A022A2C2AAD
-:103400002C2A2C2A002A0C0875255C7005A038058A
-:1034100006AD181100685E708000206884D04811E5
-:10342000146F0C08953B0860D4C00A600C08C737BD
-:103430002000587060200068026084A6005F1E684B
-:103440001868FCD008011A6A176800002B68000091
-:10345000206884A0FF009DC022680C08BF1D1120B9
-:103460000400C874A0A40001B104A0AE1700990420
-:10347000A9200101C87479042084041F382AC0706F
-:10348000602021200200A92000011061FF81980125
-:10349000186016000600112002470C2202A112201B
-:1034A0000E001E0002A138031260281111200447EB
-:1034B0000422A5C012201B600000E0AC1000041F15
-:1034C000422A2184001D5E01637000000370000029
-:1034D0004B70000005004600042405A0A8016820E8
-:1034E000006806001A6A176800002B680000B468BC
-:1034F00084A0005F1E68206884A0FF009DC0226831
-:103500000C08BF1D0E00480C4E00232000000500D3
-:1035100082A2030010030C087525002302008F2AE5
-:103520000C2B1A2B82A2020010010C08752560706A
-:10353000637000007F7000002200D077C5C7D2778B
-:103540000200A62AA62AA82AE02AFB37A62AE02AF1
-:10355000A62A0C08752570770C088B3A7077BCA7E3
-:10356000008F0C08953B186005A02805FCD71811A2
-:103570002120C08D10002120D08E092005001120AF
-:1035800010000C08342BB8015601A9200101FCD70A
-:1035900018112120C08C10002120D08D4600092058
-:1035A0000500112010000C08342B4E001801208457
-:1035B000041FCB2A5E01388784A71F0090190408D6
-:1035C000C9250408C92570770C08953B186005A02B
-:1035D0002005FCD718112120C08D10002120D08E8D
-:1035E00009200500112020000C08342BB0015601E1
-:1035F000A9200101FCD718112120C08C1000212026
-:10360000D08D4600092005001120200081044E00C5
-:1036100018012084041FFE2A5E010408C925002227
-:103620000200112B132B132B0C087525637000005F
-:10363000D070C5C0D2700408C92500220200212B19
-:10364000132B1F2B0C0875250C084E3F007086A00D
-:103650000200041980370C08E137086084A0EFFBF2
-:103660000A600C087237040980370408C92504244D
-:1036700005A090056820042D0600146806A718010F
-:10368000202D0E00A80C0E0022201A6917680000D9
-:103690002B680000B46884A0005F1E68206884A0C6
-:1036A000FF0005A222680C08BF1D212002471C2430
-:1036B0001983222310600180126028112120044701
-:1036C0000424A5C02220086084A0EFF90A600C0839
-:1036D000CA260C08E137050085A00100E00C002394
-:1036E0000200732B712BEE2B0C087525E47805A0D6
-:1036F000B01708328CA1000818010401C62510007B
-:103700000403C625082084A03000101104084D329F
-:10371000EC7884A00300D00D8478FCD0181184A12B
-:103720000700900084A1070086A004001811012062
-:103730000000500084A1070086A00500180184A1A4
-:1037400007001000012001000200D12BDA2BC72B4B
-:10375000AA2B4F3C4F3CAA2BE42B0C08752500707C
-:1037600086A004009011607086A002003011112024
-:103770000200192000000408852A607086A0060057
-:10378000B00D607086A00400900DE4790120030064
-:1037900004083B2F1868FCD010011B681D000C08A2
-:1037A000613A1B786E0005001868FCD010011B6898
-:1037B0001D000C08613A04082D3C1868FCD010016B
-:1037C0001B681D000C08613A1B78FA000500186898
-:1037D000FCD010011B681D000C08613A1B78CB005F
-:1037E000050084A50F00C01100700200C925FB2B45
-:1037F000FD2B803780378037FB2BFB2B0C08752582
-:103800000C08E137086084A0EFFB0A600C087237EF
-:10381000040980370408C925E47805A0041BAC2BF3
-:1038200008328CA1000818010401AC2B100004031D
-:10383000AC2B082084A0300018111B78680005000C
-:10384000EC7884A00300C80D8478FCD0181184A102
-:103850000700900084A1070086A004001811012031
-:103860000000500084A1070086A00500180184A173
-:1038700007001000012001000200492C4D2C442CAF
-:10388000422C4F3C4F3C422C493C0C0875250C08FF
-:10389000673A1B786E0005000C08673A04082D3C57
-:1038A0000C08673A1B78FA0005000C08673A1B7889
-:1038B000CB000500002302005E2C5C2C602C0C0861
-:1038C0007525040805341B681600A3780000E47908
-:1038D00084A1300004090534EC7884A003000409B5
-:1038E000053484A10001980D8478FCD0181184A1BE
-:1038F0000700900084A1070086A004001811012091
-:103900000000500084A1070086A00500180184A1D2
-:1039100007001000012001000200922C4D2CC72B43
-:103920000B3C4F3C4F3C0B3C493C0C08173C050002
-:1039300082A2050010030C0875259878402000230A
-:103940000200A12CCB2ED52E00220200BD2CAA2CC9
-:10395000BD2CA82CAD2E0C0875259B781800A878D6
-:10396000102084A0FF0082A02000040A303A8AA020
-:103970000400041A303A0200303A303A303AE4395E
-:103980009B781800A87984A1800048010408303A87
-:10399000007005A0D81D112004000408B73584A1CB
-:1039A000FF008AA01000041A303A0200E52CE32C34
-:1039B000F72CFB2CA92D303A303AAB2D303A303A67
-:1039C000A92EA92E303A303A303AAB2E0C08752584
-:1039D000E4D6400101200003008000803A781B7883
-:1039E000C70005001868FCD018011B681D00900C6A
-:1039F00004080B3C1B681D0004085B3A206922691F
-:103A000084A6001804194C2D206884D00419542D64
-:103A1000186886A0080010111B680000D4D668053D
-:103A2000BCD6580583700000186884A03F008AA0A7
-:103A30000D0018078AA00C00827101200C000C8078
-:103A400086719B786100AA785601360146011600FE
-:103A500008328CA100061801A1202B021000A12021
-:103A60002B011E009B7800000080AC8080AD0B0015
-:103A70009820A6534E013E015E01386005A050110A
-:103A80001C6884A00E0004095B3A0C086D3A2B7880
-:103A90000830100001803A601B7871000500E4D600
-:103AA00030011B78830005001B788300050084A685
-:103AB0006000D00DDCD6C00DFCD6A001FCC65A7E3D
-:103AC000B66EDC7AD879D078078084A07F0008A110
-:103AD00091A20000986B002102A3B268946B0022AF
-:103AE00003A3AE68F4D61801F4C65A7EB66E007011
-:103AF00086A00300481106000C084E3F0C0808423F
-:103B00000E001B788000050006A00C08E842B06A91
-:103B1000AC69986C946B002205A12001002222A4BC
-:103B200000211BA3AA6CD27CDA7CA66BD67BDE7B41
-:103B3000002305A43011F5C65A7EB66E1B788000AE
-:103B400005001B788000002215A118110C080842FE
-:103B500005000C08354205000C08752504083F2EA9
-:103B6000C6005470602020698CA1FFEC22690060BF
-:103B700084A0DFCF02600C08173906A0402038204F
-:103B80000C08BF390408332EC60054706020482C3E
-:103B9000A87A94A2FF0086A20400D8112069E4D17B
-:103BA000701139200000412000003120000006A0E3
-:103BB00010200C081A390C08BF390408332E8CA1C8
-:103BC000FFEC226904618CA1DDFF06610060ACC0DE
-:103BD000026086A20300D001046184A110004805A0
-:103BE0000C08913B0C089A39FF881805CE009B7889
-:103BF00060000028AA78587E95C65A7ED4D618113F
-:103C00001B786E0005001B78820005002069CCD16E
-:103C100030018CA1FFFD22690060ECC002603920F8
-:103C20000000412000003120000006A010200C08F8
-:103C3000BF3986A201005801046184A10800B001C7
-:103C40000C08913B0C08B838FF888019780020696F
-:103C5000C4D130018CA1FFFE22690060E4C0026083
-:103C60003120000006A010200C081A39CE00587E22
-:103C7000D4D618111B78710005001B78830005004D
-:103C80000408573A08289B78800019208000A878FB
-:103C900094A0FF0086A20100B811002302A186A013
-:103CA00001000409AD2DA87CA4A4FF0080A402009B
-:103CB00000A3182002A1040AC12D0409C12DA824C3
-:103CC000A87A041F5D2E180C84A2F00082A02000A8
-:103CD000B806002282A021009816A87A18831883BB
-:103CE000002102A3A00A86A2230050091C6884A018
-:103CF000F1FF1E68587E84A6F1FFA5C030205A7ED1
-:103D00000860A5C00A60A07805A00409342EA82088
-:103D100098799B786000AA78112080009A79A87819
-:103D200098799A7AAA78987A041F8B2E95C65A7E2B
-:103D3000D4D618111B786E0005001B788200050090
-:103D40001883002102A3040A442E84A280000419CF
-:103D50005B3AA07805A0C80804085B3A0408303A2A
-:103D600054704DA09B781800A87884A0FF008EA006
-:103D7000010010010C087525A87A94A2FF004B7869
-:103D80000800A87884A0FF008AA00500041A303A31
-:103D90000200303A2F38303A4A39593D82A20000A9
-:103DA00010110C0875250C08613A1B78820005007B
-:103DB00082A2030010110C087525FCD4D01160708C
-:103DC00005A010010C087525146F7277BCA7008F31
-:103DD0000C08953B086085A021000A60388784A7FD
-:103DE0001F00B01D0C08643A637002001F700900C8
-:103DF00010000C08703A1B788200050082A20400B3
-:103E000010030C08752500230200052F9B30D730C6
-:103E100086A2030098050072D87CDC7DD07FD0712B
-:103E2000B4D12805BCD11815012001470420C4D005
-:103E3000F011687884A0FF00D01182A20200B812AD
-:103E4000D6003B7800831B785900B8706DA0B46829
-:103E50005A789468D678DE789868D278DA78B4C1DF
-:103E6000D27103703000DE000120000058003B7862
-:103E700000131B7857000120000020000072D87C3E
-:103E8000DC7DD07F4670A068ECD0180108608DC042
-:103E90000A6084A20F0002007C30562F532FA731F6
-:103EA0003232C925512F512F0C0875250860D4C016
-:103EB0000A60E4D62001447086A01400E8110C08C2
-:103EC0004E3F092000001868FCD00801447086A00D
-:103ED00014006801186886A0080004193E3058785C
-:103EE0009CD004093E302068ACD004093E301B68E9
-:103EF000140009200200A80468788CA0FF0088053F
-:103F000086A1080058110860A4C00A600C08723726
-:103F100040050C08E1370C084E3F600086A12800E0
-:103F20000015186005A0780D0180680D0180580DFE
-:103F30001E60480C206884D00409C92584C022680A
-:103F40000C08BF265870C600602000680260CE00D2
-:103F50000460026805A0002D0811026006600408D4
-:103F6000C9251600FF81F015007086A03000D0052D
-:103F7000D071BCD1B815B4D1E8115C7005A0901512
-:103F8000A07086A001007005037000004600560076
-:103F900076006600C600D6000C08F125DE00CE00D3
-:103FA0006E007E005E004E00D071B4D1D811037057
-:103FB0004000C0000C085B3CA8111B786800D600CC
-:103FC000B8706DA0B4685A789468D678DE7898682E
-:103FD000D278DA78B4C1D2710370300008788DC01D
-:103FE0000A78DE000C08FF301E00FF8104093E3015
-:103FF00084A600DF1E682B680000146F86A10200F3
-:1040000004193F30186886A0140030110820E4D647
-:10401000180168788CA0FF000C087A3A0C08CA26B0
-:104020002068DCD07815178794A20F0013821382C2
-:10403000138284B20006180190A2C04B100090A217
-:10404000404C90A200001C22C4D370012068E4D030
-:10405000280184A0FFEF2268ACC31223108204223F
-:1040600085A0380012201182D4D33801A068C4D0B2
-:1040700020110C0867310408C92508608DC00A604A
-:1040800008002A6916691868FCD0100144701A6883
-:104090008CA600DF1E691064FF84680109200247B6
-:1040A000042101800A202184126428112120044760
-:1040B0000424A5C02220186005A0180101801A6000
-:1040C00018110860A4C00A60206884D0301100680C
-:1040D00005A008110260066020005870602000688A
-:1040E00002606120004787680301082D6B200000F3
-:1040F000686005A06A611001022D08006E610072FF
-:1041000086A23000580186A240000419C925037018
-:10411000020048706820C468602005000370020037
-:10412000B8706DA0BC683E70B47065A0C068567071
-:10413000002D4A7080AD09004270050082A2040083
-:1041400010020C08752500220200A630B530C130DF
-:10415000B53086A50013600186A50083901D03700D
-:104160000000186001801A60086084A0EFFB0A60FC
-:10417000007086A0050028010C08613A1B788200B7
-:1041800005001B788300050090780780018084A0DB
-:10419000070080A018009A78A8798CA1FF0086A15A
-:1041A0000300280186A1000010010408303A1B78A2
-:1041B00083000500206895C02268FF8218110C0852
-:1041C000613A3000118210010C0875250C08703A14
-:1041D0001B78820005000C086E3C307884A0C0007B
-:1041E0007011160008328CA100081E00180104018D
-:1041F000FC3010000403FC301A7906A0050085A0ED
-:104200000100050084A6600030112F6800003368AB
-:10421000000004086631DCD69811B468DCD0801147
-:104220009869946A2E69326A447005A030110022A0
-:1042300005A104094E3F4770150004084E3F0500D4
-:10424000ACD6F001F4D630012F68000033680000CE
-:1042500004084E3FB46884A0004035A6F4D6A01DE3
-:10426000447005A0101147701500DCD62811B46801
-:10427000DCD01001A86CA46D2E6C326D04084E3F8A
-:10428000F4D630012F6800003368000004084E3F68
-:10429000B46884A0004835A6F4D6A01D447005A0DB
-:1042A000101147701500082410250027078084A0EE
-:1042B0007F0008A191A200002E69326A002105A2A8
-:1042C000101104084E3F007086A00600100104087B
-:1042D0004E3F050046690860CDC0CCD308018DC0B3
-:1042E0000A6018683A681B6806008F6800009368C7
-:1042F0000000306A2C693E6A42692F680300336807
-:10430000000037682000976800009B68200000705C
-:104310000200C925963190318E318E318E318E3129
-:104320008E310C087525206884D018110C08C73709
-:1043300030005870502C602000680260602AA0AEE7
-:104340001700042405A010012020D80C222D6B207A
-:10435000000005000C08CD370C08E1370860CCC020
-:104360000A602B6800009B780E00146F38691A6988
-:10437000446916690920000086AE404710010920F3
-:1043800001000C081F43DCD6C8011C69EDC11E6981
-:10439000286882A00E009002486884A00F0086A0C2
-:1043A0000B0060115C6886A04700401101200147A6
-:1043B0000420ACD0181100270C089E241868FCD0EB
-:1043C00040011B68000068788CA0FF0010011B688A
-:1043D0001E00A0AE1700006822203C6A4069326AC5
-:1043E0002E69C06860200060A4D0800541202100B3
-:1043F0004920050051202000D600F6005601460154
-:10440000792000470C08B21B4E015E01FE00C87007
-:10441000102009200101260004226DA0400114682B
-:1044200006A710010068C80C2068D5C022682E00BD
-:1044300010820981801DDE00637003007B70000024
-:1044400072777F700F00D071C4C1D271186886A0D6
-:1044500002003811176800002B6800001C68ECC0CF
-:104460001E680C08BF1D0408C925D87CDC7DD07FE0
-:104470000C08FF302B6800009B780E00146F0C08AE
-:10448000723C8CA0FF0016691868FCD010014470C3
-:104490001A688CA600DF1E69637000000408C92535
-:1044A000007005A010110408C92506A00C084E3F95
-:1044B0002069ACD110111B6814008CA600DF1E69A6
-:1044C0002B680000206884A0FF00226800700200B2
-:1044D000C9256F326F327232723272326D326D3282
-:1044E0000C087525186804083B2F0860A4C00A60F2
-:1044F0001768000004089537002302007E328032DE
-:10450000CE320C087525FCD604195B2D00700DA069
-:104510000200C92590329032BA329032CB328E32BC
-:104520008E320C08752584A66000380586A06000D0
-:104530001015ACC6F4C6EDC65A7EB66E1C68ACC08B
-:104540001E6886A1020048010C084E3FAC69B068A5
-:1045500015A118010C08354210000C0808421B7800
-:104560008300D071B4D10419C625A07086A00100C3
-:1045700004190D260500ECD6F0091868FCD070016E
-:10458000F4D630111B6815001B7883000408C6257B
-:104590001B6807002F680000336800000C08173CF8
-:1045A00005000C08752500230200D732F93251337B
-:1045B0000C08752500700200E132E332EA32E13284
-:1045C000E132E132E132E1320C087525AC69B068C4
-:1045D00015A118010C08354210000C0808421C688F
-:1045E000B4C01E68D070B4D00419C625A07086A0CF
-:1045F000010004190D260500FCD604194133007092
-:104600000DA00200C9250F33093339330F333E3370
-:10461000073307330C0875259468D678DE789868D8
-:10462000D278DA7884A66000380586A0600010157C
-:10463000B4A6BFBFEDC65A7EB66E86A10200480181
-:104640000C084E3FAC69B06815A118010C08354242
-:1046500010000C0808421B7883001C68B4C01E6858
-:10466000D071B4D10419C625A07086A00100041928
-:104670000D260500ECD6F0091868FCD010011B6867
-:1046800007001B78FB000500FCC65A7EDC7AD8794F
-:10469000986B002102A3B268946B002203A3AE685A
-:1046A000D2791B7883000500DCD630012B780930E5
-:1046B0001B7883000408C6258478ACC08678E4782B
-:1046C00084A00800501184A400020801F5C6DDC6CC
-:1046D0005A7E1B7883000408C625206895C022688E
-:1046E0000C08023CDDC60C08613A1B788200040805
-:1046F000C625002302007B337D337F330C087525EC
-:1047000004085B3A987DD4D6A815E479ACD1300181
-:10471000EC7884A0030010012B7809309B786000AE
-:10472000AB78000084A6FBFF5A789A7DE479ACD17F
-:104730002001EC7884A0030020110120140004085B
-:104740003B2F8478FCD0181184A10700900084A12D
-:10475000070086A00400181101200000500084A169
-:10476000070086A00500180184A1070010000120A1
-:104770000100C204907A94A207009B786000A87997
-:10478000FF8168059B788000A87B84A30100D0117D
-:10479000A87BA87B86A3040018110920DFFF58001E
-:1047A00086A3010018110920F7FF280086A3030043
-:1047B00048110920EFFFC60054706020046004A176
-:1047C0000660CE009B786000AB78000084A6FBFFFB
-:1047D0005A782B78093020698CA1FFEC22699A7DE8
-:1047E00004080B3CD12BDA2BF933FF33F733F733C3
-:1047F0000B3C0B3C0C08752520698CA1FFFC226941
-:104800000408113C20698CA1FFFC226904080B3CC0
-:10481000E47984A130002001EC7884A003007015B5
-:10482000007086A004009011607086A00200301114
-:1048300011200200192000000408852A607086A05B
-:104840000600B00D607086A00400900D007086A078
-:1048500000000409C625206984A120042801D4C1D0
-:104860002269186804083B2F18688EA002002001F6
-:10487000FDC01A680120140004083B2F8478FCD086
-:10488000181184A10700900084A1070086A00400ED
-:10489000181101200000500084A1070086A0050027
-:1048A000180184A1070010000120010002000B3C48
-:1048B0000B3C5C340B3C4F3C4F3C0B3C0B3CBCD6A4
-:1048C00070058071FF81580582A10D001813837057
-:1048D0000000280082A10C00827009200C009B7847
-:1048E0006100AA795601360146018470148110A234
-:1048F000867280A00B0000AD982084B200061801DB
-:10490000A1202B021000A1202B019B780000088120
-:10491000AC81A6534E013E015E010408113CD4D681
-:104920000419CF34206884D00409113C8CA660009F
-:1049300084A66000200186A060000811F5C194C122
-:104940005A79B6699B786000AB7800009B7861006B
-:104950001868FDC01A68AA7808800C810409F63727
-:104960008CA1F8000419F6375601360146011600ED
-:10497000A1202B0108328CA100061001A1202B02DE
-:104980001E009B7800000080AC8080AD0B0098205A
-:10499000A6534E013E015E011468FCC00780827878
-:1049A0000408113C1868FCD010011B6808000C08B2
-:1049B000613A1B78ED00050000230200E0349D35CC
-:1049C000DE340C087525D87CDC7DD07FFF8228156D
-:1049D000007286A203000409092FD071BCD1F8111E
-:1049E000B4D1E801012001470420C4D0C011D60091
-:1049F0003B7800881B785900B8706DA0B468A5C0DA
-:104A00005A789468D678DE789868D278DA78B4C123
-:104A1000D27103703000DE003000007220003B785D
-:104A200000181B78570084A20F0002008835453516
-:104A30001D35382F1B3588351B351B350C08752562
-:104A40001C68ECD0180108608DC00A60206985C11F
-:104A500022690068066005A0081102600860D4C0E1
-:104A60000A601C6884A00E002011C87188A1000192
-:104A700028003070BA683C71C87008A1042102682F
-:104A80000A2D5A71DCD62011FCC6B66E0408883592
-:104A9000B66E84A66000201184A6FF7FB668D80495
-:104AA000DCD6501184A6FF7FB6689468A668986823
-:104AB000AA680C084E3F7804ACD6400106A00C084A
-:104AC0004E3F08241025AA69A66A6800082410250C
-:104AD0000027078084A07F0008A191A20000AA6996
-:104AE000A66A0C084E3FFCD6B00184A6FF7FB668CC
-:104AF00010250824ACD638110027078084A07F0039
-:104B000008A191A20000986B002102A3B268946BE7
-:104B1000002203A3AE68007086A030000419C925E6
-:104B200003700200B8706DA0BC683E70B47065A0E0
-:104B3000C0685670002D4A7080AD090042700500B3
-:104B400086A50088481103700000186001801A6073
-:104B5000086084A0EFFB0A6004085B3A4370000021
-:104B600082A2060010030C08752500230200B73549
-:104B7000C835D23500220200BF355B3AC135BF359A
-:104B8000033651360C087525807A94A2000F0C0864
-:104B9000A5360408303AC10002005B3AD035D03562
-:104BA0000336D0355B3A0C08752571000200DC3500
-:104BB000DA35DA35DC35DA35DC350C0875250C08E4
-:104BC000703A1B7882000500007086A00200501128
-:104BD0000C08E13710000C084E3F086084A0EFFB82
-:104BE0000A602000007086A00300A80D0370050075
-:104BF0000120E08E8EAE404710010120128F682008
-:104C00004A7080AD0900427000220500007086A045
-:104C100002005811D070B5C0D270002CB670002DB3
-:104C2000BA7038000C084E3F2000007086A00300C8
-:104C3000C80D03700100807A94A2000F9B781800C1
-:104C4000A87C84A41F0015A26920C08D84B2000630
-:104C50001811FDC26920D08E042D082D5A716DA047
-:104C60002801146806A220010068B80C0C08A536BB
-:104C7000B46E5A7E206984A1000C0409CB366070A2
-:104C800086A006002811707006A2101162707A705A
-:104C90001B680500ADC11B680500ADC1D4C1226908
-:104CA0000C08673A0408CB36007286A2020058113D
-:104CB000D070B5C0D270002CB670002DBA70300024
-:104CC0000C084E3F180086A20300D00D03700100AF
-:104CD000807A94A2000F9B781800A87C84A41F00FF
-:104CE00015A286AE40470801FDC2A879A8798CA11B
-:104CF000FF001821C87068A1042D082D5A716DA0FD
-:104D00002801146806A218010068B80C0904B46EE2
-:104D1000206984A1000C0409CB36DCD078016070D6
-:104D200086A004004011707006A22811747006A3BA
-:104D3000101162707A700C086D3A80041B680500CF
-:104D4000ADC1D4C122690C08673A7B700000300401
-:104D50000370050084B2000618010120E08E1000E7
-:104D60000120128F68204A705601A92032000320CA
-:104D700000000080041FB4365E0184B200061001FA
-:104D8000FCC20800FDC2166A80AD09004270B76817
-:104D9000000723680008276803000500ECC6ACA6DE
-:104DA000600004091237986B946CAC69B06805A177
-:104DB000E011D27BDA7BD67CDE7C86A56000C8055C
-:104DC000F4D60811EDC6B4A6FFB75A7E09208300B9
-:104DD0009CD62801092082001920000020231A797E
-:104DE000ECD688050C0808427004B0681AA30021AC
-:104DF00023A4002405A3F801D27BDA7BD67CDE7CD9
-:104E0000B068F4D60811EDC6F4C65A7E11208300AE
-:104E10009CD62801112082001920000020231A7A34
-:104E2000ECD688010C0835427000192000002023C0
-:104E30001000B4A6FFB75A7E092083009CD610014B
-:104E4000092082001A79C0685670002D4A70C46823
-:104E50006020D071012001470420C4D0C815D4704F
-:104E60002DA0B801BCD14805807A94A2000FD8705B
-:104E700006A21801E07804A55815D670BCC1D271FD
-:104E80003804312001002C85180233861082D80C9A
-:104E90000500E07D94A500FF3001112008002F855A
-:104EA000810C37860800690C1782807884A0000F77
-:104EB00006A27001DA72D6765800807A94A2000FAA
-:104EC000D87036A2C00DE07834A5A80DBDC1D2714E
-:104ED000B4D10419C625002305A40409C625A07071
-:104EE00086A0010004190D260500206005A05001D0
-:104EF00001802260086085A008000A600F70000130
-:104F00002C702660050006A00C084E3F007086A09D
-:104F100002002001607086A0050050112B6800007F
-:104F2000176800001B680100236840001F6800012B
-:104F3000007084A00F000200C925A637A337C3372D
-:104F4000AF37C925A137A1370C08752549041104CD
-:104F50002800310458706020006802600C08BF1DF2
-:104F60000408C9256070637000007F7000000200B3
-:104F7000BF37BF37BD37BD37BD37BF37BD37BF3789
-:104F800004089A2A637000000408C9251B68000001
-:104F90000408A731006805A008110260066005003A
-:104FA0001064FF84680109200247042101800A205F
-:104FB000218412642811212004470424A5C0222042
-:104FC0000860A4C00A600500186005A010010180F7
-:104FD0001A6005000C086E3C1B68180090040C0851
-:104FE0006E3C1B68190068040C086E3C1B681A00B4
-:104FF00040040C086E3C1B680300180470770C0812
-:10500000953B74718CA1FF00103294A20006180128
-:10501000E8A1C08C1000E8A1D08D042D082D6820D7
-:1050200005A018117A700408C9251468707206A2C8
-:1050300010010068980C00680A201B6805007B704E
-:1050400000000C08CD37206884D010110C08C73739
-:105050000C08E1371F680000236820000C08BF1D02
-:105060000408C92582A203000419353AA87DACA51D
-:10507000FF00A87EB4A6FF002069BDC12269C4D18B
-:10508000B005C4C12269B4A6FF00300582A618008D
-:10509000180210013120180086A610000811308671
-:1050A0002B852B85412000000C08EE3A18010C08D6
-:1050B0001A39A0000C08BA3A0C0817392069C5C182
-:1050C0002269587E95C65A7ED4D618111B786E0078
-:1050D00005001B78820005000C081739587ED4D6CD
-:1050E00018111B78710005001B7883000500C600AD
-:1050F000547060200061E4D198050862178294A280
-:10510000FF0082A2180018021001112018000026CA
-:1051100002A20812302286A610000811308608620A
-:1051200094A2FF00EC78E4D0300182A20A00401281
-:1051300011200A00280082A20C00101211200C007D
-:10514000002202A5081228220C08BE3A2B852B85C6
-:10515000412000000C08EE3A18010C081A39200012
-:105160000C08BA3A0C081739587895C05A78CE000E
-:105170001B7882000500C60060290060E4D0881119
-:10518000B4D05011106084A00F00301104618CA1C4
-:10519000F5FF0661CE000500112032001920000045
-:1051A000F000A068CCD0C01D086294A2FF00EC788B
-:1051B000E4D0300182A20B00181211200A0028004E
-:1051C00082A20C00101211200C0008631F839CA304
-:1051D000FF0082A318001802100119201800AB78F4
-:1051E0000100AB780300AB780100AA7AAA7BC0A8C3
-:1051F00005002068C5C022680C087A3ACE00050078
-:10520000C600602904618CA1F5FF066111203200FF
-:10521000192000000000AB780100AB780300AB78E8
-:105220000100AA7AAA7BC0A805002068C5C0226830
-:10523000CE00050006A030201020C6005471602169
-:105240001820082084A0E0FF35A6867E18609A7892
-:10525000AE7E1266A47884A070778CA10F0005A1A1
-:10526000292005472C25CCD54001A4D3100185A0C9
-:105270000008FCD3100185A08080A67816608A788B
-:10528000B4A61F0037860482048005A60E60046061
-:1052900084A0D5FF0660CE00050082A2020004199A
-:1052A0003F3AA87A2069BDC12269CCD16805CCC13A
-:1052B000226994A2FF0082A20200041A303A0C086C
-:1052C000C1390C08173980A901000C200C08913B4A
-:1052D0000C08B838FF8878019B7860000028AA780D
-:1052E000587E95C65A7ED4D618111B786E000500DC
-:1052F0001B7882000500587ED4D618111B787100E7
-:1053000005001B788300050082A20200181284A207
-:1053100001004001547188A100000C21ECD1101152
-:10532000112000000C08AC3A79040C0817395878A1
-:1053300095C05A781B7882000500C60026006029B7
-:10534000006011200100ECD05811BCD0381114605D
-:10535000B4D02011A4C1066106A08800112000006D
-:10536000AB780100AB780200AB780300AA7AC0A842
-:1053700004000C087A3A206885A0000222682E00FA
-:10538000CE000500078815A7C6000920000054704C
-:105390006020FF82100109204000186080A00200F8
-:1053A0009A78A47884A09FFF05A1ECC0B4D008111E
-:1053B000EDC00061F4D1100185A02000A678166030
-:1053C0008A78046084A0EFFF0660CE000500060026
-:1053D000007086A0030010010E0010000E0098045B
-:1053E000ACD68805887884A040006805B87B078320
-:1053F00084A07F001815078284A0FF000409573A93
-:105400009AA00400041A573AF4D6D011D879DC7A5D
-:1054100008A191A20000D279DA79D67ADE7A0C0856
-:10542000E8421B78800084B20006180101200000C9
-:105430001000012001000C089A4105000C08752598
-:105440001B78800005001B788300050039200000D0
-:10545000412000003120000006A010200C081A395D
-:105460000C08BF39587E0C08733A1B78820005007F
-:10547000D10C2068C4C02268C600547060200C089B
-:105480004439B000810C2068CCC02268C60054703A
-:1054900060200C08DE396000310C206884A0FFEC2D
-:1054A0002268C60054706020046084A0C5FF0660B6
-:1054B000CE00050049001B78820005002768020025
-:1054C00049001B78820005000120050088000120AA
-:1054D0000C0070002068D5C0226801200600400042
-:1054E00001200D0028000120090010000120070004
-:1054F0009B787E00AA789DC65A7ED070B4D0680191
-:10550000B4C0D270C600B47065A0086084A0EFFB80
-:105510000A60186001801A60CE00050076003F879F
-:10552000BCA70F003B873B870387E0A0C04B8EAE34
-:1055300040471001E0A0404CB8A720009A7FA47912
-:1055400084A1E07FAE781260A47984A13F77A67829
-:105550001660046085A0380006607E0005009B7818
-:105560008000AB780100AB780200AB780300AA7A28
-:105570009B786000AB7804000008312000002920EF
-:1055800032009B788000AB780100AB780300AB78E9
-:105590000100AA7DAA7E9B786000AB780500040814
-:1055A0007A3A5601078084A0FF000380038080A020
-:1055B00020009A78A4798CA1E0FF21207A3B192061
-:1055C0001100A9200E0011203200042484A0E0FF65
-:1055D00006A128012084002310A2041FE23A5E01E4
-:1055E000050056010408303B2120883BA920090012
-:1055F0001120290082A5280050052084A99511209A
-:10560000330082A5330018062084A99519200A00CA
-:1056100011206500002202A5D0022084002310A2E0
-:10562000041F073B5E01880021207A3B19201100EE
-:10563000A9200E0011203300002202A54002208480
-:10564000002310A2041F193B5E0106A00500118271
-:105650005E0182A564002012087885A070000A7897
-:10566000042405A0050086A80200E8012120663B6D
-:10567000A9200D001120280082A52800480D2084B3
-:105680001920190011203300002202A5000E2084E9
-:10569000002310A2041F413B5E011120840182A55A
-:1056A0008501B00A90082120753BA9200300112034
-:1056B000240086A52400600920841120280086A5E6
-:1056C0002800300920841920190011203300040813
-:1056D000193B21100222033404460558066A077C50
-:1056E000104612461258125A146A146C146E177E21
-:1056F000219002B004E210E210E2091202300232FC
-:105700000342034404540456056605680678067A85
-:10571000070C070C070EE1100A330558055A066AF4
-:10572000066C077C077E000E9B78800046A0050073
-:1057300084A7000F0B8084A71F00038003800380D1
-:10574000038005A1FCD71801E0A0C06C1000E0A008
-:10575000C04C0500E600F60084D038017920000135
-:105760000920804771208047300009204047792078
-:1057700000027120404791200080042184A00F0086
-:105780000200C83BC83BC83BC83BC83BC83BC63B04
-:10579000C63B0C087525B469F5C18CA19FFFB6699D
-:1057A00005A08005587884A09FFF85A000605A78E6
-:1057B000287886A0141830154B780400487884A007
-:1057C0000400E01D4B780800487884A00800E01D24
-:1057D0003078BCD0B81184B2000818010401FF3B36
-:1057E00010000403FF3BE47984A130005801EC78F9
-:1057F00084A0030038011C68ACD01011D90010003F
-:105800001B78FB00FE00EE0005000120014704208C
-:10581000ACD0181114680C089E2405001B78830076
-:1058200005001B78820005001B78710005001B78BD
-:105830006E000500092019470C2186A100005001C7
-:1058400086A1010050011F700B00637001001B78DE
-:10585000540005001B78F30005001F700A000500C6
-:10586000092019470C2186A10000680186A10100CA
-:1058700038011F700B00637001001B785400050095
-:105880001F700A0005001B78F20005001B78FB0062
-:1058900005001B78FA0005001B78CC0005001B787A
-:1058A000CB0005001868FCD010011B681D001F709C
-:1058B0000B00637001001B7854000500307884A051
-:1058C000C000701108788CC00A7800E000E000E0A9
-:1058D00000E0EC7884A02100180108788DC00A78D7
-:1058E000050008788DC00A780500307884A0400053
-:1058F000E01D84B2000818010411803C100004135C
-:10590000803CAC780500087884A0FDFF0A7800E0B0
-:1059100000E000E000E0EC7884A02100400184B2C7
-:105920000008180104118F3C10000413923CAC785D
-:105930000600087885A002000A780E00050084A7FA
-:10594000010004194D3284A770004001C600602D8B
-:10595000682F0C089024782D682CCE0084A70800AE
-:1059600048014B780800EC7884A0030004094D320C
-:1059700004080B3C84A70400C801B87884A0008008
-:10598000A8014B780800EC7884A0030004094D328C
-:10599000E47884A0070086A001004011C07885A6A5
-:1059A000004830205A7E1B78FB00050084A7800049
-:1059B00040018478FCD028010C08573A1B6822006B
-:1059C00005001B680300587884A0005F1E682F68DC
-:1059D0000000336800004B780800EC7884A00300D6
-:1059E0000409AC2B84B2000810010401C62504038D
-:1059F000C625146B078384A00F00038003800380F7
-:105A0000FCD3180180A0404C100080A0C04B602047
-:105A100048205670602A0500C60060290060ACD09E
-:105A20000409573DA068ACD1201184A0000E0409E0
-:105A3000553D086117818CA1FF001C632F83DCD0CA
-:105A400010019DA30100CCD0C81184A5FF0038012E
-:105A5000EC78E4D010011382B8002920000082A164
-:105A60000C009012EC78E4D0181109200C006000B2
-:105A700082A10B00481209200A00300009203200E0
-:105A80001120000029200000AB780100AB7806004F
-:105A9000AB780400AA79AB780000AA7AAA7BAA7D29
-:105AA000C0A80800206885A0001022680C087A3A77
-:105AB00085A00100CE00050082A206000419493A23
-:105AC000A87DAC7E3786ACA5FF00B4A6FF00AC7FF6
-:105AD0004787BCA7FF00C4A8FF002069BDC1226999
-:105AE000E4D10409CB3D8CA1FFEC226982A702001E
-:105AF000041A233AB4A6FF000409C83D82A6310067
-:105B0000041A233A82A50900040A233A82A8030052
-:105B1000041A233A86A80200D00186A800000419BE
-:105B2000233A01200C00EC79E4D1100101200A0095
-:105B300002A590120C08233AC6006029046085A0D3
-:105B40001A0006600060ACC00260CE00050086A7A7
-:105B500000000409233A348682A618002802200196
-:105B6000312018000408193E86A61000081130865E
-:105B70002B852B850C08EE3A0409233A0C081A39B8
-:105B80000C08BF39587ED4D618111B787100050057
-:105B90001B78830005000C081739900C86A80200BA
-:105BA00008113486547188A100000C21ACD104097D
-:105BB000233AECD120113920000041200000E4D12B
-:105BC0002011312000004120000082A70200C812ED
-:105BD0001C6284A2FF0006A710013920000005A660
-:105BE000900108611F819CA3FF00680102A30812B5
-:105BF0003023078805A786A00102600186A800005F
-:105C0000680139200000412000003120000006A07A
-:105C10001020700084A200FF0811402084A1FF0022
-:105C200002A5080128212B852B850C08EE3A580D7A
-:105C30000C081A390C08BF399B788000AB7801003A
-:105C4000AB780600AB780400AA7DAB780000AA7E92
-:105C5000AA7F0028AA789B786000AB7808002068AB
-:105C6000E5C022680C087A3A587895C05A781B78B3
-:105C7000820005002000200000002000000020001D
-:105C80000000200000002000000020000000200094
-:105C90000000200000002000000020000000200084
-:105CA0000000200000002000000020000000200074
-:105CB0000000200000002000620009001400140011
-:105CC00055984D9814001199FF98140014009000F5
-:105CD000E70000010204082080F8180017000F8474
-:105CE000C1D8140016000AA214000B300CA2140034
-:105CF00000251300002510001000100010001000F7
-:105D00001000100010001000100010001000100013
-:105D1000100000A206383988C420640850A8083052
-:105D2000C128189D01A20C30472861816A84008037
-:105D3000A48456183A8808A8E228CE9CF3A86408E0
-:105D40003EA80C3001A80830E128CE9CA22863713F
-:105D500031A8212018A805A20C87DED8A064E06D28
-:105D6000C06FA467806C120205A23D882B881418AE
-:105D70003B882770F28537A732A503F076857786B2
-:105D800013A83E8811A88228627114A80A2804A2C8
-:105D9000C064E06DA067C06F14183B8823707685DF
-:105DA000778602A861783E886A20C128189D422023
-:105DB0000121CAA802290EA20BA807A2140003A25F
-:105DC0000080A48572189A873C88E21F01F608A219
-:105DD0006E852171140004070830CE9C140002A2C5
-:105DE0000080A4850930A884E21944F86E853F88B4
-:105DF000E608F5A861F8EBA801F8140081F8160090
-:105E0000B285F0803295A2FAE21D1400328521F2AB
-:105E10001400E21DA884E0D6E61F140008300080BC
-:105E200049281110FCA80830008000A08120022819
-:105E30001110FCA889A80830A1203C281110FCA84A
-:105E400009A217000C300080A485E21DC1DA1400FD
-:105E5000100201A81400E0263A87A3FAF219E026FE
-:105E6000F21814000BA214000DA206381002229D95
-:105E7000040706A265687E812A84C11D2388160056
-:105E800042600880FAA860812A84808121F008306D
-:105E9000A884D7114270DD201100D5202288160079
-:105EA00000002601D07084A0004C04809020047271
-:105EB00008709CC005A2A0110C72FF822801FF8A05
-:105EC0007811007284D260110478CCD010010C08D3
-:105ED0005B4307700800037008002E0100200500D6
-:105EE000007084A0030002709CC684D088050871ED
-:105EF00000E0087006A1D81D84A103000409CA3F70
-:105F000084A1E0010419CA3FF4D1881D84A10030A6
-:105F100086A00010600D112080010C7111823001EB
-:105F20000870F4D0201D0C7006A1C00D077012007F
-:105F3000087100E0087006A1D81D84A1030068055F
-:105F400094D1B00DF4D148050770020080082804F0
-:105F50000871FCD130010C08D640FF8A0409543F77
-:105F6000B80C0C708CA0FF07E801047084D0780195
-:105F7000147005A048111070107306A3E01D0023D3
-:105F800005A0280102A1201E077010003000FF8A22
-:105F900048010C089A42E81DD8090C085C402E0103
-:105FA00000200500047208719CC10381181207705B
-:105FB0000200C00C05A2881D0770080003700800CD
-:105FC0000600012001470420CCD010010C085B43DF
-:105FD0000E002E01002005002864FF840805702CA7
-:105FE0000470BCA00F00B8A71D403C27FB874811D8
-:105FF00010020C0875259C6075A09001880C392052
-:106000001240042768AE086830A60C6829A52184D0
-:1060100038013887042705A0A81D9C7075A0001DB5
-:1060200005000000050009000D0011001500190011
-:106030001D000000030009000F0015001B000000F8
-:10604000000012400F4000000000008000001240DD
-:1060500000001A40174000000000000000001A4035
-:1060600000001540154000000000008000001540B1
-:1060700000001B401B4000000000000000001B400F
-:10608000792000477120100007700A000770020095
-:1060900003700100092002007120500007700A00FF
-:1060A00007700200037000000120FF010420FCD0F3
-:1060B00028110981180171202000800C050004704E
-:1060C0000480041AB2400871087006A1E01D84A182
-:1060D000E00120010C080E410408D24007701200B4
-:1060E000192000000871087006A1E01D84A1E001DC
-:1060F00020010C080E410408D2409CA10C3086A35C
-:106100000420900186A30800C001047084D04811C7
-:106110000871087006A1E01D84A1030010010408A5
-:106120000E4186A30C20F0190072048230020C7319
-:1061300084A3FF0710010C0875250871087006A1DB
-:10614000E01D84A1E00118010C080E4170040770E5
-:106150001200007084D048111073147005A3280138
-:106160000C7184A1FF0704195C400871087006A136
-:10617000E01D84A1E00118010C080E41B000077079
-:1061800012000770080004709CD0E81D08710870A8
-:1061900006A1E01D84A1E00118010C080E412800B1
-:1061A0000770120008710381880E03700800050053
-:1061B000087184A1E001A815087184A1E001881587
-:1061C00084A107000200EA40F840E840F840E840B7
-:1061D0004841E84046410C087525047084A0100031
-:1061E0008DC00670FF8A18114920000005000C08B8
-:1061F0009A42E81D0500047084A010008DC006704E
-:10620000047084D040110871087006A1E01D84A1BB
-:10621000030008013000FF8A18010C089A42E81DAB
-:106220000500077012000871041D114191200060E3
-:10623000041D1541912000600770120007700800CE
-:1062400004709CD0E81D077012000871FCD1D81DA5
-:1062500003700000007005A03011047005A0181133
-:106260000C7005A00801400C4920000084B2000217
-:106270001801012000001000012001000C08A73BBC
-:106280001B6802005120000005000C0875250C0851
-:1062900075250C088741107214710C709CA0FF07C3
-:1062A000002800A311A289A10000A1040427582CF2
-:1062B00060AC0863002222A30C6300211BA300240E
-:1062C00005A340013812128410820A8389A10000BC
-:1062D000602B580C602B078A060004609CD01801C4
-:1062E000BAA717401000BAA70F400E003DA7002C18
-:1062F00086688A6F926C8E6B0871087006A1E01D2B
-:1063000084A1E00110010C080E41077012000C0876
-:106310005C400500508A3987042704A0681100609A
-:1063200064A00811602D046084A00F0080A02D409F
-:106330003C20FB870C09752505002601D600D0708E
-:1063400084A0004C04809020DE008468602088686F
-:106350008C6B906C5780D4AAFF0084A0FF000600CD
-:10636000046884A008000E001801B8A017401000AF
-:10637000B8A00F4084B200021001207E0800247EE5
-:10638000B5A60C001C68B4D0080185C6002405A37E
-:106390005005582C0427046160AC006000A448201C
-:1063A000CCA9040018010C08A34300041A7004606F
-:1063B00001A31E709CD14001106081A000002270DA
-:1063C000146081A0000026700862002402A21270EE
-:1063D0000C62002303A21670027607700100602B86
-:1063E0000C08C54210000C089A42E81D2E0100203E
-:1063F00005002601D600D07084A0004C04809020B7
-:10640000DE0007700400047094D0E81D03700800DB
-:106410002E01002005002601D600D07084A0004C7B
-:1064200004809020DE00207E84B200020811247EC9
-:10643000B5A60C001C68ACD0181185C6037000000E
-:1064400028685020602D0460BCA00F00B8A71D4034
-:106450003C27FB87381110020C0875259C6865A045
-:106460002001880C0C089A42E81D2E01002005002E
-:10647000260106001600D600D07084A0004C0480CF
-:106480009020207E84B200020811247EDE003E00AF
-:106490004E00B5A60C001C68B4D0280185C6037058
-:1064A00000000770040049203542286855A0D60036
-:1064B00004099642702D602E0470BCA00F00B8A78E
-:1064C0001D403C27FB87401110020C0875259C706D
-:1064D00075A060207005800C042768AE086822A4AF
-:1064E0000C681BA36802518A10110C0875253887A7
-:1064F000042705A0901D9C7075A06020D001E008C5
-:10650000228420841A8399A300000869002422A110
-:106510000C6900231BA110120C08752584B200021F
-:10652000180171205000100071202000DE000408C6
-:10653000C341DE002E01002005000870060084A083
-:10654000E0010E00100106A0050084A0030086A053
-:10655000030008110500042778AC0078082F94D0B8
-:106560000419A6431A7004781E70087812700C780B
-:10657000167004609CD02001107822701478267068
-:106580000276047084A0100085C006707920004750
-:10659000518AE8013887042705A068119C6005A08E
-:1065A000B8016020046084A00F0080A01D403C2042
-:1065B000FB870C0975250870060084A0E0010E0019
-:1065C000100106A0280084A0030086A00300050097
-:1065D00051200000050026010600D600D07084A0DE
-:1065E000004C04809020DE008E00087184A103001E
-:1065F0002811286805A0780104086D3F0871FCD1B6
-:1066000018010C08D640880C077010000871FCD1E6
-:10661000E80D0C08D640087086A00800301D0070F8
-:1066200005A0181D0370000049200000060001208D
-:1066300001470420CCD010010C085B430E002E0152
-:10664000002005002601460136015601C600D6008D
-:10665000D07084A0004C04809020DE0049201F43AD
-:1066600080AD1100A02084B20002180199203200F0
-:106670001000992031000C7084A0FF072A68077071
-:106680000800077002000370010018010080AC8050
-:10669000A5530C7084A0FF0730010770040004703C
-:1066A00084A00400E01DCE0049200000037000001B
-:1066B0005E013E014E012E01002005001468FCD051
-:1066C00004099E43007084D0E005247EB5A6040032
-:1066D00007700400047084A00400E01D1871160007
-:1066E0001C71160020711600247116001B7000002A
-:1066F0001F70FF3F2370000027700000137004001C
-:10670000177000000276077001000120FFFF0920CA
-:1067100031000A200A200871087006A1E01DFCD192
-:10672000D00D2E0026722E0022722E001E722E0018
-:106730001A7207700200087086A008001001040891
-:106740000E41077004000370000005004920C3419A
-:106750006800087084A00300100106A0050006A0D0
-:1067600020201820582C602149200000588B0061FF
-:10677000002108A41A71046001A31E700600042BF6
-:1067800084A008005001106081A000002270060063
-:10679000146081A000002670060084A1070011206B
-:1067A00008002AA20862002412A226000C624022DD
-:1067B000002343A82E00FF887011002502A20801C3
-:1067C0005012202241200000042B9CD010010E000A
-:1067D0000E000E005004127517700000027686A994
-:1067E000C3411811077001002800047084A0100034
-:1067F00085C00670002500A11A70042B84A0080033
-:1068000010010E004E001E0089A100001E710C2B0D
-:106810008CA108003001A1A40000227481A0000016
-:106820002670002522A2C3A8000012742028167426
-:10683000027686A9C3411811077001002800047070
-:1068400084A0100085C00670598B602B792000470A
-:106850000C08C54206A00500912000809120006030
-:10686000AC7805A068117479D07006A148111C7825
-:1068700005A030011F780000040E3D4491208040A7
-:1068800069208047FDC7006884A00F009811D06878
-:10689000B4D08001BCD07011F60079200001FCD783
-:1068A000101179200002307884A0C00010110C086B
-:1068B000D522FE00FCD7200169204047FCC7180CF8
-:1068C0003078018032780419C744347832786120F6
-:1068D000C06C69208047FDC7CC6805A028010180F5
-:1068E000CE6810110C083946006884A00F006801BA
-:1068F00086A00100500140680DA03801042105A0C8
-:10690000200101800A200409D645146805A0A801C9
-:10691000018016689011A3680100F600FCD71811D9
-:10692000792000021000792000010C086E3CFE0066
-:10693000606805A010010C08D5227C6805A0400104
-:1069400001807E68281163680000D068C5C0D268E5
-:10695000D068FCD0B001FCC0D268A920000234602D
-:1069600005A0580101803660D068FDC0D2682811AA
-:10697000106005A010010C08D522E0AC1000041F27
-:10698000AC44FCD738016120C04C69204047FCC7AB
-:10699000040869445904387801803A78A0113C7899
-:1069A0003A786120C04C69204047FCC70C6805A0BC
-:1069B00010010C084345FCD730116120C06C6920E0
-:1069C0008047FDC7980C1078CCD06801ACD020115E
-:1069D000A4D04801ADC0127891200180040EEF448C
-:1069E0000C08A1200500912001800500407801805D
-:1069F0004278041942454478427869204047FCC7F0
-:106A000079200002D46805A03801E07D04A520119A
-:106A1000D668D068BCC0D26879200047106805A04D
-:106A200010110120010101801268FCD7180180A01B
-:106A3000D08D100080A0C08C4020042065A0E00113
-:106A4000246005A0B001018026609811006805A0AF
-:106A50003001486806AC18110C08D645680060681B
-:106A600005A018012760010020000C0884450428B7
-:106A7000280C0060402C100CFCD73811692080478E
-:106A8000FDC7792000010408FF440500092000002B
-:106A9000A920000208609CD05805246005A01801B8
-:106AA00001802660180408609CC084D01011ACD00E
-:106AB000C0010A60046005A0D801D600C600160017
-:106AC00068201060018012600C08C737002D682C08
-:106AD00060200C08021C0C08B21D1E00CE00DE0057
-:106AE0003800BDC00A608DA1010010008DA1000119
-:106AF000E0AC1000041F474584A1010030018CA1C7
-:106B0000FEFF0E690C08D52208000E690500002C56
-:106B10007A681467726F176000002B6000001B60BA
-:106B20000600B46084A0005F1E60206084A0FF00A7
-:106B300085A0600022600060422069208047FCD769
-:106B4000101169204047586806AC101100285A6897
-:106B50000C089A1B186805A0100101801A680868C3
-:106B6000A4C00A681068087909810A7901801013A5
-:106B70000C087525126818111079A5C112792F60BB
-:106B8000000033600000682C0C08BF1DFCD71811F2
-:106B900069204047100069208047106984A10001E6
-:106BA0000120060018117669012004000C08CB2290
-:106BB0000500D60048696021FCD718116920000241
-:106BC0001000692000010C0890241B600600586822
-:106BD00084A0005F1E60206084A0FF0085A04800A4
-:106BE00022602F60000033600000086884A0FDFF71
-:106BF0000A683068B4D0B0014B680400A9201400C2
-:106C0000486894D01001041FFD454B680900A92075
-:106C10001400486884D01001041F0646A920FA0019
-:106C2000041F0D461B685400DE0063680700050062
-:106C300079200047E1008900A900092002006920AD
-:106C400080470F6800001368000017680000098182
-:106C5000180169204047A80C05001920A3003A7BC1
-:106C60003E7B050019203300427B467B050019203E
-:106C7000DD32327B367B05004C6A85A20000F001D4
-:106C80005069BC6B00A3C60064210463FF83381104
-:106C90001182480108811AA1B80EBC69A80CCF68FE
-:106CA0000A00CE0005004C69BC6A64220860B5C0C9
-:106CB0000A6010820981C81D4E69CE0005001600C9
-:106CC000041D5D4691200060041D61469120006016
-:106CD000EC70DCD01811D4D09001A0008EAE000171
-:106CE00038011478F5C0C5C01678D4D0801560047A
-:106CF0001478FDC0C5C01678D4D048152804E4D057
-:106D00000409C446041D7F469120006009200C0040
-:106D1000041D8546912000600981D01DE47084A087
-:106D2000FF0186A0FF011011EC70C0088EAE0001BB
-:106D300028011478F4C0FCD0301120001478FCC075
-:106D4000F4D00811C4C0167804788CD00005C600B1
-:106D500061200000186084D0B81186AE0002E60001
-:106D6000712010002001DB700100E4781800DB7056
-:106D70000000E078C670C3700E801B600100912097
-:106D80008040EE00CE001800CE001F680C001E00F0
-:086D9000A070A2700500260CA2
-:00000001FF
-/*****************************************************************************
- * QLOGIC LINUX SOFTWARE
- *
- * QLogic ISP12160 device driver for Linux 2.2.x and 2.4.x
- * Copyright (C) 2002 Qlogic Corporation (www.qlogic.com)
- *
- *****************************************************************************/
-
-/************************************************************************
- * --- ISP12160A Initiator Firmware --- *
- * 32 LUN Support *
- ************************************************************************/
-
-/*
- * Firmware Version 10.04.42 (15:44 Apr 18, 2003)
- */
diff --git a/firmware/qlogic/1280.bin.ihex b/firmware/qlogic/1280.bin.ihex
deleted file mode 100644
index 612c2633f8cd..000000000000
--- a/firmware/qlogic/1280.bin.ihex
+++ /dev/null
@@ -1,2008 +0,0 @@
-:10000000080F0B0000107800411000002E3E000089
-:100010004320504F525947495448312039392C31E7
-:1000200039313239312C39392C3339313439512085
-:100030004F4C494720434F435052524F54414F4930
-:10004000004E492050533231303446207269776D6A
-:10005000726120655620726569736E6F30202E388C
-:1000600035312020432073756F74656D20726F4E9B
-:10007000202E303050206F72756474634E202E6FC6
-:100080002020303020200024C920FF980120FC04CB
-:10009000042086A08010C000541071200001A070C0
-:1000A000A270C12010008920741378006D10012007
-:1000B000FC04042086A08012C00069107120000298
-:1000C000A070A27071200001A070A270C120100069
-:1000D0008920F81378006D10C120200089201C139E
-:1000E00071201000C3700400C7705349CB702050BA
-:1000F000CF702020D37008000120FE04D670C120EC
-:100100002100192000000920FFFE00210B20A5A5D9
-:10011000ECA1FF7F642D6B200A0ADCADFF3F542B5E
-:100120005B205050142186A2A5A54000A41086A3F0
-:100130000F004000A0106A2C5A2AC120200019206C
-:100140000F00780080106A2C5A2A7800A2106A2CBE
-:100150005A2A30212821A2A1004F248424842484F7
-:1001600024842484248492A1009909200000012081
-:1001700032007810C12018227920004FA02F0824C7
-:1001800011200000A9204000A4420981C000BF1036
-:10019000092000FF003402A14800CF104000CF101A
-:1001A000A820A4420120FC04042086A08010C000E6
-:1001B000E510712000017E0D6920404F7810B04D90
-:1001C0007F0D1078EDC012781B78640078000A115A
-:1001D0000120FC04042086A08012C00005111478C0
-:1001E000EDC0D5C016781B786400712000027E0D2A
-:1001F0006920404F7810B04D6920804F7120000178
-:100200007810B04D1478D4C016787F0D78000A119C
-:100210001478E5C016781B783C00CA7EC27CC67B89
-:100220006778000000788DC0027831203000AF7808
-:1002300001012378020027780200092002006920CA
-:10024000404F1B680300236807002768FA002B68EB
-:1002500008002F682800376800003B6806003368F4
-:1002600008003F680000098140005E11D3680A0061
-:10027000C368C04F7920004F1478E4D0C000441107
-:10028000ECD0C0004811D768297378004A11D768AC
-:100290000D7378004A11D7682D73C768C054CB68B6
-:1002A000C053CF68C094AB684497AF684997B368B0
-:1002B0004497B7684497A76801006920804F780089
-:1002C0001E11D3680A00C368C0511478E4D0C0007E
-:1002D0006A11D768397478006C11D7681974C768C7
-:1002E000C074CB684054CF68D095AB684997AF686D
-:1002F0004E97B3684997B7684997A7680100107887
-:10030000ECD0C000C2111478E4D0C000B4117E0E4D
-:100310006920C05371200002EC70E4D0C000951138
-:1003200019200C0C21200C007810502078009B1113
-:1003300019200A0C21200A0078105020692040540E
-:1003400071200001EC70E4D0C000AB1119200C0C3E
-:1003500021200C00781050207800B11119200A0CCF
-:1003600021200A00781050207F0E7800DB11192020
-:100370000C0C21200C006920C053781050206920FB
-:100380004054781050207800DB116920C0537E0E55
-:1003900071200001EC70E4D0C000D41119200C0CC5
-:1003A00021200C00781050207F0E7800DB111920DE
-:1003B0000A0C21200A00781050207F0E1120020024
-:1003C0006920C05409200200A920000137680000FC
-:1003D0000B684000C87B86A3FFFEC000F2111768BF
-:1003E00000011F6864007800F611176864001F6838
-:1003F0000200E8AD1000F000E3110981C000E11136
-:100400001182400004126920C0747800DF11781056
-:10041000A2267810124778101B1E7810424D9120AA
-:1004200000217920004F1078ECD040001812712084
-:10043000200078001A1271205000912000227920AB
-:10044000004F71202000912000237920004F107868
-:10045000ECD040002C127920000178002E12792077
-:1004600000027120404F912000247920000171206A
-:10047000804F912000207920004F71201000003221
-:1004800085A03D30902071201000C37000009000C6
-:100490004D12C07086A00200C0004D127810C11528
-:1004A000392000001078ECD0C000CF1278108E14E4
-:1004B000AC7805A0C0006B12680061126C7865A072
-:1004C000400061127810DC237810E8206800781270
-:1004D0006C7865A040006B127810DC2368007812FD
-:1004E0000920474F1120874F04210C2205A140000D
-:1004F00078127810511F7120404FA47005A0400061
-:100500009D12507485A4000040009D1279200002C5
-:1005100091200080D4728CA23D3090217810B12BB4
-:100520009120008091203D3068009D127920004F7D
-:100530006C7865A040009D12712010007810DC23BB
-:10054000E000A5127920004F712010007810164BA2
-:100550007120804FA47005A04000BD12507025A0EE
-:100560004000BD127920000191200080D4728CA23D
-:100570003D3090217810B12B9120008091203D30AA
-:100580007920004F712010006800C9126C7865A0B6
-:100590004000C9127810DC23E00053127810164B8B
-:1005A0007800531278108E14AC7805A0C000E712C2
-:1005B0006800DD126C7865A04000DD127810DC2345
-:1005C0007810E8206800F1126C7865A04000E7120E
-:1005D0007810DC236800F1120920474F042105A0A0
-:1005E0004000F1127810511F7120404FA47005A0F7
-:1005F00040000C13507485A4000040000C137920B7
-:10060000000191200080D4728CA23D30902178109E
-:10061000B12B9120008091203D307920004F712036
-:100620001000680016136C7865A04000161378104F
-:10063000DC23E000CF127810164B7800CF123C1369
-:100640003C133E133E134B134B134B134B135613D8
-:100650005613631363134B134B134B134B133C137E
-:100660003C133E133E134B134B134B134B135613B8
-:100670005613631363134B134B134B134B13780035
-:100680003C137E007E107E12912000247810D12928
-:100690007F127F107F00912001807C007E007E1001
-:1006A0007E127810C8137F127F107F009120018086
-:1006B0007C007E007E107E12912000237810D129CC
-:1006C0007F127F107F00912001807C007E007E10D1
-:1006D0007E12912000237810D129912000247810D7
-:1006E000D1297F127F107F00912001807C0094131C
-:1006F000941396139613A313A313A313A313AE1368
-:10070000AE1396139613A313A313A313A313AF133C
-:10071000AF13AF13AF13AF13AF13AF13AF13AF13C9
-:10072000AF13AF13AF13AF13AF13AF13AF13780003
-:1007300094137E007E107E12912000237810D12920
-:100740007F127F107F00912001807C007E007E1050
-:100750007E127810D5137F127F107F0091200180C8
-:100760007C007C007E107E127E0D7E0E7E0F7E0051
-:10077000712000016920404F7920004FEC7084A067
-:10078000001CE2787810B04D7F007F0F7F0E7F0D48
-:100790007F127F107C00003C84A007007900CD13FD
-:1007A000DE13DE13E013E013E513E513EA13EA1397
-:1007B000003C84A003007900DA13DE13DE13F31388
-:1007C000F3137810B229912000227810EC477C00B6
-:1007D000912000217810EC477C00912000217810B6
-:1007E000EC47912000227810EC477C0091200021FA
-:1007F0007810EC477C00181418141A141A142714D3
-:10080000271427142714321432143F143F142714CA
-:100810002714271427145014501450145014501433
-:1008200050145014501450145014501450145014A8
-:10083000501450145014780018147E007E107E124C
-:10084000912000247810D1297F127F107F00912001
-:1008500001807C007E007E107E127810C8137F120B
-:100860007F107F00912001807C007E007E107E1230
-:10087000912000237810D1297F127F107F009120D2
-:1008800001807C007E007E107E1291200023781073
-:10089000D129912000247810D1297F127F107F0068
-:1008A000912001807C007E007E107E127E0D7E0EE7
-:1008B0007E0F7920004F712000026920404F003DDB
-:1008C0008CD040006614EC7084A0001CE278781094
-:1008D000B04D003D84D0400074146920804F7120D9
-:1008E0000001EC7084A0001CE6787810B04D7F0FFA
-:1008F0007F0E7F0D7F127F107F007C0008700B80C1
-:10090000C8008914077002008CA0E001C0008A149E
-:100910009CD0400089147A087A09C370024078009C
-:10092000C41568001A1561200000186084D0C0004A
-:100930001A15287805A0C0009E1410001B15780019
-:100940001A151079F4D14000A4147800B914147960
-:10095000ECD14000BD14FCD04000B3147E007810F0
-:10096000AE1D7F004000BD147800B9147E007810E1
-:10097000A11D7F004000BD14012007407800C31571
-:100980001079FCD0C000C7146120404F9CC1FCC747
-:100990007800CB146120804F9DC1FDC7646005A025
-:1009A000C0001A15127982602878FCC086A0180051
-:1009B000C000DB147E0C7810851B7F0C2B780000A8
-:1009C0007C6065A0400000157E0C9C607810901E35
-:1009D0007F0C9F6000007810D51C092018008760EC
-:1009E000030110787E00FF84C000F614FF854000EC
-:1009F000F814C5C012787810BB1D7F001278C000B3
-:100A0000141578100D1E10789CD0C00008156120B8
-:100A1000404F78000C156120804F9CC012787F6099
-:100A20000000D460DCD040001815DCC0D660012086
-:100A300005407800C3157800C1157C001078F4D00B
-:100A400040002315012007407800C31506A0C2709E
-:100A5000C670CA70CE70DA70C0703DA08AA0400027
-:100A6000C80031157900381500218AA04000C8005F
-:100A7000CF1579007815C1151716E0154F16871692
-:100A80008716D715ED1C9216CF15E415E615E81557
-:100A9000EA15F21CCF15A016FD16A51BE71CEC15D8
-:100AA000EA192C1A671AB81AA519B219C619D91950
-:100AB000EB17CF15341741174D1759176F177B17C1
-:100AC0007E178A1796179E17D317DF17CF15CF15E6
-:100AD000CF15CF15F8170A1826185C188418941823
-:100AE0009718C818F9180B1974198419CF15CF1550
-:100AF000CF15CF159419CF15CF15CF15CF15CF150D
-:100B0000171D1D1DCF15CF15CF15211D661DCF1526
-:100B1000CF15CF15CF15111681169A16F7169F1BF4
-:100B2000CF15CF15681BCF156A1D091D131DCF15D5
-:100B3000CF15CF15CF15CF15CF15CF15CF15CF1595
-:100B4000CF15CF15CF15CF15CF15CF15CF15CF1585
-:100B5000CF15CF15CF15CF15CF15CF15CF15CF1575
-:100B6000CF15CF15CF15CF15CF15CF15CF15CF1565
-:100B7000CF15CF15CF15CA72C67101200640780077
-:100B8000C315CE73CA72C67101200040C2706800DE
-:100B9000C415612000001B600100912000509120CD
-:100BA00080407C00C37001407800C415C3700640CB
-:100BB0007800C41599204100A1204100A92005001A
-:100BC000A3537800C115C470C37004007A00780084
-:100BD000C1157800C1157800C1157800C1159120A4
-:100BE0000080C3700400C7705349CB702050CF7091
-:100BF0002020D370080001200F00D670792000005B
-:100C00001B780100312030005920001029201A04DF
-:100C10005120450461204704C1202000912000504C
-:100C20009120804078001804D875DC74DA75DE7481
-:100C300078001A16292000002025D071C872CC73C4
-:100C4000C470A020992030000370010007700600D6
-:100C50001A731E722274267521204000FF81400005
-:100C6000C11582A14000C8003416202106A008202A
-:100C70000384127007700400077001000870FCD034
-:100C800040003B160770020084A0E00140004916B6
-:100C9000C37002407800C415A824A55378002B1611
-:100CA0007800C115292000002025D071C872CC73AE
-:100CB000C4709820A1203000037000000770060067
-:100CC0001A731E72227426752120400007700600D8
-:100CD000FF814000C11582A14000C8006E1620218E
-:100CE00006A0082003841270A824A65307700100F0
-:100CF0000870FCD04000751684A0E0014000631627
-:100D0000C37002407800C415D875DC74DA75DE74DF
-:100D100078005216C471C87014219EA70400C00048
-:100D20008F160A20CA727800C015C7700800CB70F1
-:100D30000F00CF700B007800C115D875DC76DA751E
-:100D4000DE767800A316292000003025C470C87212
-:100D5000CC73D074C670CA72CE73D27405A0400032
-:100D6000F2160AA44000B316C800BC1601807278BF
-:100D700084A000FC4000C016AC7885C0AE7801208D
-:100D800005407800C3157E7B7A7A867E827D767CEC
-:100D90008CA400FF4000D8160784048004800C81D6
-:100DA0000C810F8118A191A20000B1A6000081A5BD
-:100DB00000007800E21607840480048018A391A242
-:100DC0000000B1A6000081A500001A731E722276F1
-:100DD000267005A64000EC16107AC5C2127AAC78CF
-:100DE00084A0FCFFAE787800F516AC7885C0AE78AC
-:100DF0007800C115D875DC76DA75DE7678000017D4
-:100E0000292000003025C470C872CC73D474C67019
-:100E1000CA72CE73D67405A040002F170AA44000F2
-:100E20001017C80019170180927884A000FC4000B8
-:100E30001D17AC78C5C0AE78012005407800C315F9
-:100E40009A7A9E7BA27DA67E002605A540002817E3
-:100E5000107AC5C2127A967CAC7884A0FFFCAE787A
-:100E600078003217AC78C5C0AE787800C11509207B
-:100E700000006C7865A040003E1708810060780093
-:100E80003717C47A7800BF150920484F0C21107815
-:100E9000ECD0C000C0151120884F14227800BF1577
-:100EA0000920494F0C211078ECD0C000C01511204A
-:100EB000894F14227800BF156120404F28612C62B1
-:100EC0001482148214821078ECD0C0006D17612057
-:100ED000804F2863DA732C631C831C831C83DE73AE
-:100EE0007800BF1509204C4F0C211078ECD0C000C1
-:100EF000C01511208C4F14227800BF151879780086
-:100F0000C01509204D4F0C211078ECD0C000C01541
-:100F100011208D4F14227800BF1509204E4F0C214F
-:100F20001078ECD0C000C01511208E4F142278002C
-:100F3000BF1520791078ECD0C000C015247A780055
-:100F4000BF15C471FCD1C000A6171120C053780092
-:100F5000A81711204054078184A00F00038003804C
-:100F6000038068A2006A04689CD04000B717086B31
-:100F70007800B8170C6BFCD1C000BF1721203B02D2
-:100F80007800C11721203B0124241479E4D14000CA
-:100F9000CD17C4D4C000CC17D5C47800CD17DDC49C
-:100FA000A4A4001CDE74C4717800BE15C477781048
-:100FB0002B1E912000801C6B146A91200180082751
-:100FC0007800BE156120404F18611078ECD0C00049
-:100FD000C0156120804F18627800BF15C477781063
-:100FE0002B1E912000800869186A106BDA77912017
-:100FF00001807800BE15C471102194A20F0082A256
-:101000001000C800B9157810C62784A3004040001E
-:10101000081895A220007800BE15C4710021BCC03C
-:1010200082A01000C800B915BCD1C0001918112049
-:10103000484F042278001D181120884F0422BDC09B
-:101040007E000021BCC01220781023277F01780089
-:10105000C015C4712120494F0424C6701920000016
-:1010600078003518C8712120894F0424CA70FDC347
-:1010700011205418A9200800042206A14000441899
-:101080001082F0003918C471C8727800B81592A2A5
-:1010900054187E0222217F01781044271078ECD06A
-:1010A000C0005218FCD340002F187800C115E80387
-:1010B000FA00F401EE0204000100020003006120C6
-:1010C000404F28612C62148214821482C4702A60FA
-:1010D000C8700380038003802E601078ECD0C000BD
-:1010E00082187E027E016120804F28612C6214826A
-:1010F00014821482D8702A60DC700380038003801D
-:101100002E60DA71DE727F017F027800BF156120E8
-:10111000404F3061C47032601078ECD0C000C01510
-:101120006120804F3062C87032607800BF15187936
-:101130007800C015C47184A1CFFF4000A3181078B7
-:10114000ECD0C000B915C8727800B81511204D4F09
-:10115000042212217E00192000007810AB2710789D
-:10116000ECD04000B3187F017800C015C87184A18D
-:10117000CFFF4000BC181021C4717800B8151120B1
-:101180008D4F042212217E00FDC37810AB277F0211
-:101190007F017800BF15C47182A110004800D418E7
-:1011A0001078ECD0C000B915C8727800B8151120BD
-:1011B0004E4F04227E00122119200000781089274A
-:1011C0001078ECD04000E4187F017800C015C87199
-:1011D00082A110004800ED181021C4717800B815E4
-:1011E00011208E4F04227E001221FDC37810892722
-:1011F0007F027F017800BF15C471C87284A1FDFF12
-:10120000C000B81584A2FDFFC000B81500212079E8
-:1012100022780022247A26787800BF15C471FCD188
-:10122000C00013191120C053780015191120405423
-:10123000078184A00F0003800380038068A2192027
-:101240000000C872BCD2400024199DA31000B4D283
-:10125000400029199DA308009120008000687E00AD
-:1012600026A240004819026AECD440003519A5C3F3
-:10127000E4D4400039199DC3F4D4400048190F81CB
-:10128000F4D24000441978100828780048197810E2
-:10129000E62778004819CC72086806A240006A194F
-:1012A000A4A2FF001478E4D0C0005B1982A4280037
-:1012B000480067194000671978005F1982A443004D
-:1012C00048006719C471C6717F02CA7291200180FB
-:1012D0007800BA150A6A9DA30A00046805A3066887
-:1012E0007F020C6BC471912001807800BE15C47719
-:1012F00078102B1E91200080146A1C6B91200180B5
-:10130000C8701668CC701E6808277800BE15C470B7
-:101310006120404F18611A601078ECD0C000C015F1
-:10132000C8706120804F18621A607800BF15C471C0
-:10133000C872CC7382A11000C800B91578102A2891
-:1013400084A300404000A31995A220007800BE1598
-:10135000C47778102B1E91200080086A8DC20A6A1B
-:101360009120018008277800BF15C47778102B1EC4
-:1013700091200080086A94A2F9FF0A6A046805A017
-:101380004000C11978106F2691200180082778004D
-:10139000BF15C47778102B1E91200080086A95C273
-:1013A0000A6A046805A04000D41978106F269120BD
-:1013B000018008277800BF15C4774120010049202B
-:1013C000050051202000912000807810461E9120B9
-:1013D00001800827086A7800BF15C4771478E4D024
-:1013E000C000FE19FCD74000F8197810AE1D40006F
-:1013F000FE197800C3157810A11D4000FE19780071
-:10140000C315C873CC72C677CA73CE727810CD1E5E
-:10141000C000281A186805A04000221A08277E0775
-:1014200078105A287F07C000221A01201500FCD727
-:10143000C0001B1A6120404F78001E1AFDC06120B9
-:10144000804F2A78912001807C009120018001202A
-:1014500005407800C315912001807800C115C4773C
-:101460001478E4D0C000401AFCD740003A1A781033
-:10147000AE1D4000401A7800C3157810A11D400031
-:10148000401A7800C315C677412021004920050085
-:1014900051202000912000807810461E092016005F
-:1014A000FCD7C000541A6120404F7800571A6120C1
-:1014B000804FFDC1676003007F6000007667836036
-:1014C0000F002A79D461DCC1D66178106F26912093
-:1014D00001807C00C877CA77C477C6771478E4D0D7
-:1014E000C0007E1AFCD74000781A7810AE1D40006C
-:1014F0007E1A7800C3157810A11D40007E1A78006E
-:10150000C315BCA700FF9120008009201700FCD75D
-:10151000C0008B1A6120404F78008E1A6120804FE6
-:10152000FDC17F60000067600200766783600F0086
-:101530002A79D461DCC1D66178106F2691200180B0
-:1015400041202100492005005120100091200080F9
-:10155000C87005A04000AC1AD460FDC0D6607810F9
-:10156000461EC8703668388784A71F00C000AC1AB2
-:10157000912001807C00192000001478E4D0C00084
-:10158000CE1AC87284D24000C81A7810AE1D40002E
-:10159000CE1A7800C3157810A11D4000CE1A78002D
-:1015A000C315C872CA72AC7884A00300C000F91ACF
-:1015B0003920000084D24000DB1AFDC74120210001
-:1015C000492004005120080078102B1E9120008033
-:1015D0000868D4C00DA80A6991200180388784A7C3
-:1015E0001F00C000E11ABCA700FF3F8738873F8774
-:1015F00084A7000FC000E11A91200080C87284D235
-:10160000C0000B1B1078ECD04000071B69200001C4
-:1016100078000D1B6920000278000D1B6920000175
-:10162000086884A0FDFF0A683068B4D040002D1B14
-:101630004B680400A9201400486894D040001F1B88
-:10164000F000191B4B680900A9201400486884D0D9
-:101650004000291BF000231BA920FA00F0002B1BDF
-:101660007920004F09201800C87284D2C000391BAD
-:101670006120404F78003C1B6120804FFDC17F609E
-:1016800000002A796760010083600F00A7600000F6
-:10169000A860B260B660D460B4D04000581BB4C03B
-:1016A000D6607E0CB86065A00860D4C00A6018607F
-:1016B00001801A607F0CD46084A0FF77D660AC787C
-:1016C0008DC0AE78FF834000631B7C001B68470021
-:1016D000912001807C00CC737810BA1AEC69486ABA
-:1016E00085A100184A6885A14000EE68CC732120CE
-:1016F0000400A920FF09F000781B2184C000761B9C
-:101700001983C000741BEE694A6A912001807C0035
-:10171000FCD7C0008C1B6920404F78008E1B6920CD
-:10172000804FC471C6711669FF81C000961BA768FF
-:101730000100AC788CC0AE7884D0C0009E1B7810BD
-:101740002D1F7C00D875DC74DA75DE747800A71B59
-:101750002EA02025C471C873CC72C671CA73CE7214
-:101760007920004FDE7DDA7CD67BD27A7810041E99
-:101770004000D11CA9200500A120144F9120008019
-:10178000A1419120018009204000781018204000DC
-:10179000CA1B78100D1E7800D11C04608CA0FF00BD
-:1017A0008EA10900C000D51B7E007810BF237F00EA
-:1017B00084A000FF078009804000611C7E0C682C1B
-:1017C0007810041E40001B1C002C9E680981C0007C
-:1017D000DC1B9F6000007F0C7E0CDC7DD87CD47B02
-:1017E000D07A90A2400099A30000A1A40000A9A56E
-:1017F0000000DE7DDA7CD67BD27A682C9C6865A0FE
-:101800004000601C0920400078101820C0003E1CD9
-:10181000046084A0FF0086A00200C0001B1C0460BE
-:1018200084A0FF0086A00A00C000171C7E0178106B
-:10183000BB237F01002D02607800EA1B7F0C7E0C29
-:101840009C607810901E7F0C9F6000007810D51C63
-:10185000092018000860CDC00A6004608660107816
-:101860007E00FF84C000341CFF854000361CC5C0CC
-:1018700012787810BB1D7F00127878100D1E78004A
-:10188000D11C7F0C7E0C9C607810901E7F0C9F609A
-:1018900000007810D51C09201800876003011B6028
-:1018A000030010787E00FF84C000561CFF854000B6
-:1018B000581CC5C012787810BB1D7F0012787810B4
-:1018C0000D1E7800D11C7F0C1478E4D0C0008F1C52
-:1018D0001461FCD140006F1C7810AE1D40008F1CBD
-:1018E0007800731C7810A11D40008F1C7810D51C47
-:1018F00009201800876003011B60210010787E001A
-:10190000FF84C000831CFF854000851CC5C0127881
-:101910007810BB1D7F00127878100D1E0120074043
-:101920007800C315C474C873CC7214609120008011
-:101930007E0E09201200FCD0C0009F1C7120404F79
-:101940007800A21C7120804FFDC12A7967700500C4
-:10195000D471DCC1D6716A736E72727476707B70EA
-:101960000000002C7E702EA030251C6184A1600038
-:101970004000B91C7810B6467F0E9665A6659A663B
-:10198000AA66AF600000B360000014672360000027
-:10199000246096A00100C000CC1C00802660781056
-:1019A0006F26912001807C00C37005407800C4152B
-:1019B000A92005009920144F912000800A539120FE
-:1019C0000180002110A299A30000A1A40000A9A5F4
-:1019D00000007C00C471C77000001E797800C1153A
-:1019E000C471C67168217800F41C692000100C696C
-:1019F00016A0042D10A2688D0981C000F61C85A2D6
-:101A00000000C000041DC37000407800061DC370B4
-:101A10000340CA707800C4156479C671C47182A18C
-:101A20000300C800B91566797800C1156479C671DC
-:101A30007800C1150079C671C47102797800C115AA
-:101A40000079C6717800C115C470112000008CA007
-:101A50000D004000361D0C814800321D10820C81A3
-:101A60000C814800321D10820C81FF81C000BA1524
-:101A700010820E7A8CD24000621D1079CDC112798D
-:101A8000092021001920030084D240005C1D088138
-:101A90001920410011204E97122319204200108274
-:101AA00012231920430010821223192046001082AD
-:101AB000122319204700108212231920060011203A
-:101AC0005397122111207397122304790678780016
-:101AD000C0150478C6707800C115C471FCD1C0006F
-:101AE000721D1120C0537800741D112040540781CD
-:101AF00084A00F0003800380038068A2146AB4D21C
-:101B00004000831D112001007800851D1120000078
-:101B10000C6B0068DA707800BE151478F4D04000C1
-:101B2000951D01200740DB70000005A07800A01D76
-:101B3000FCD040009F1D01200740DB70010005A084
-:101B40007800A01D06A07C001478F4D04000AC1DE5
-:101B500001200740DB70000005A07800AD1D06A045
-:101B60007C001478FCD04000B91D01200740DB70D8
-:101B7000010005A07800BA1D06A07C0012711A723F
-:101B80001E731078C4D04000C41D2274267580AC2A
-:101B9000010008810C81A9819880A1203000037088
-:101BA00000008460A220A65307700100747984A10C
-:101BB00000FF4000E11D0F810C810C810480048036
-:101BC000078000A17800E41D0781048004807C79EF
-:101BD00008A1787A06A011A2107DC4D54000F11D9D
-:101BE000847B19A3807C21A40870FCD04000F11DE7
-:101BF00003700100077006001A711E72107DC4D5B3
-:101C00004000011E2273267484A0E0017C00487805
-:101C100065A040000C1E042C4A78632000007C0064
-:101C20007E0F7920004F48786220002C05A0C0006C
-:101C3000181E7810B2294A787F0F7C001120009975
-:101C40004A7AC47B19834000281E80A232001220E9
-:101C5000102078001F1E132000007C007E017E02F1
-:101C6000FCD7C000341E1120C0547800361E11204D
-:101C7000C07484A7000F0B8084A71F004000411E82
-:101C8000038003800380038005A168A27F027F0197
-:101C90007C0078102B1E00292A68002A2E6808680C
-:101CA00084A0EFF90DA80A697E0EFCD7C0005B1E68
-:101CB0000920534F7120404F78005F1E0920934F39
-:101CC0007120804F0C21046805A040006F1E16A1F2
-:101CD000C0006F1E6020006006687E010B200000BF
-:101CE0007800721E092000007E01046865A0400093
-:101CF000871E006006687810A21E781064201068A5
-:101D0000087909810A7901801268C000721E107971
-:101D1000A5C112797F0102690669002D6020781043
-:101D2000132B7F0E7C0065A04000A11E08209C6044
-:101D300005A040009E1E62209F60000065A0780004
-:101D4000941E48784A7962207C00076003018F6006
-:101D50000000A9201C0080AC0500A020012000008C
-:101D6000A44028681A602C6822607C007E0EFCD794
-:101D7000C000BD1E7120404F3120C04F7800C11EF1
-:101D80007120804F3120C05150708CA00002C000E3
-:101D9000CB1E08A60A2D0080527006A07F0E7C0084
-:101DA0007E0FFCD7C000D51E7920404F7800D71E8B
-:101DB0007920804F78102B1E9120008004680A78CB
-:101DC00065A040002B1F7800E91E002C0A786020D7
-:101DD000006065A040002B1F106006A3C000E21E3B
-:101DE0000C6006A2C000E21E282C4C7806ACC00095
-:101DF000F81E7800281F046806ACC000061F0060AB
-:101E00006020066805A0C000061F03680000780077
-:101E1000101F006408786020026486A40000C000DF
-:101E2000101F002C026860257F0F7810A21E7E0F05
-:101E30001B600500236020007F0F781064207E0F58
-:101E4000087909810A79106801801268C000281F8A
-:101E50001078A5C012780120FFFF05A07F0F7C003D
-:101E60007E07002739200000FCD04000351FFDC749
-:101E700041202100492004005120080091200080C9
-:101E80007810461E388784A71F00C0003D1FBCA7DE
-:101E900000FF3F8738873F8784A7000FC0003D1FA2
-:101EA000912001807F077C006C78092074970C21B9
-:101EB0000DA140005B1F65A07800DC2361200000BD
-:101EC000186084D0C0007B1F10788CD040006C1F3D
-:101ED0008CC01278FCC76920404F7800711F8DC0FC
-:101EE00012786920804FFDC7912000801C681F6810
-:101EF00000009120018005A0C0007C1F7C008CA008
-:101F0000F0FF4000821F7810B2297900841F941FCF
-:101F1000971F9D1FA11F951FA51F951F951F951FFB
-:101F2000AB1FDC1FE01FE61FFB1F951F951F7C00EA
-:101F30007810B22978102D1F012001807800072029
-:101F4000012003807800072001200480780007200A
-:101F500078102D1F01200680780007209120008036
-:101F60007E07FCD7C000B71F6920404F3920090009
-:101F70007800BB1F6920804F39200900006886A0C7
-:101F800000004000C51F7F001E6F912001807C0073
-:101F900074687F07BCA000FF412021004920040095
-:101FA000512010007810461E388784A71F00C000FB
-:101FB000CF1F9120018001200A8078000720012096
-:101FC0000C807800072078102D1F01200D807800EC
-:101FD00007201478E4D0C000F91FECD04000F31FB4
-:101FE000FCD74000F31FE4787800F41FE078C67057
-:101FF00001200E80780007207800951FFCD7400054
-:102000000120EC7878000220E878C67001200F806B
-:1020100078000720C270FCD7C0000F20DB700000E2
-:1020200078001120DB700100612000001B600100BE
-:10203000912080407C0080AC0100FF814000432063
-:1020400099203000A0200C7084A0FF0340002520C0
-:1020500018707E001C707E0020707E0024707E0050
-:102060001271AC811A721E732274267503700100FE
-:102070000770010008700B80C8003720077002004D
-:102080008CA0E001C0004320A55306A0037000000F
-:10209000077004007F0026707F0022707F001E7092
-:1020A0007F001A707C0011202000092010000A6BAC
-:1020B0000E6C036800FD076818001A6A002DE8A07E
-:1020C000080090A204000981C00054207C00046034
-:1020D0008660082C63200000687805A06A794000BB
-:1020E0007120022C780072206E797C007E0C6120B9
-:1020F000004F87680301082D6B200000686005A071
-:102100006A6140008320022D780084206E617F0C7C
-:102110007C0091200080042C6E7805A0C0008E20E9
-:102120006A78912001809C6005A04000A7207E0C69
-:10213000602008209C6005A04000A32062209F60D2
-:10214000000065A09C6005A0C0009B2048784A79EB
-:1021500062207F0C487862209F60000085AC000000
-:10216000C000B1207810B2294A787C00A920100064
-:1021700006A0048086808E81C800BC2000A2F000EA
-:10218000B72086808E817C007E15A920100005A0D6
-:102190004000E2201AA1C800E22013828D8148008D
-:1021A000D5201AA1C800D620F000CA207800DA2075
-:1021B0001AA108231082F000CA207E00003284A0F9
-:1021C000FFF780207F007F157C007E00003285A015
-:1021D00000087800DE20747DD07006A54000CE2176
-:1021E0001078502000788CD040000A21ECDA4000B2
-:1021F0000A217E0E9120008071202000047005A02D
-:10220000C000072108707F0E86A0080040000A2148
-:102210007800CE217F0E7800CE217810041E400079
-:10222000CE2146A070790025008012A1092040002F
-:10223000C800192178002021D07206A24000202178
-:102240004088092080007E0C1271077001009920DF
-:102250003000A920200080AC0100A02061200000F7
-:10226000FF88400032217810041E0870FCD0400026
-:10227000322107700200912001808CA0E001C00093
-:102280006921A553FF8CC0004721FF884000B82179
-:1022900078005121002C8E78A920200080AC01000C
-:1022A000A020A5537800B82146A018721C73C4DA88
-:1022B000400059212074247592A240009BA3000085
-:1022C000A3A40000ABA500001A721E73C4DA40007C
-:1022D00069212274267506A0077004004000B82109
-:1022E000FF8C4000722178100D1E7F0C78100D1E9F
-:1022F00046A0887800808A7886A002004000982155
-:102300007C7A787BC4DA40008421847C807D747977
-:1023100007810480048010A299A30000A1A40000FA
-:10232000A9A500001A721E73C4DA4000CE212274DF
-:1023300026757800CE211460FCD0C000A021692051
-:10234000404F7800A2216920804F912000801F68B3
-:102350000200FF884000AE2146A08C786020780003
-:1023600098218B780000AC7885A00300AE7891208E
-:1023700001807800CE217F0C8B78000078108D23AF
-:10238000046084A00F007810CF21FF884000CC218A
-:102390008C786020046084A00F007810CF21780032
-:1023A000E8207C007900D121E121FF211D22E121DB
-:1023B0002E22F221E121E121E121FD211B22E12157
-:1023C000E121E121E121E12139200004BC7805A7C8
-:1023D000BE78086005A70A60781071229C60BA7800
-:1023E0009F600000781077237C00BC78C4D0400048
-:1023F000F8217800E1211C60BDC01E607800052234
-:102400007810BF23BC78C4D0400005227800E121B9
-:10241000BF7800000460078084A0FF00B2780180CC
-:10242000400018227810712240001822BC78C5C0E4
-:10243000BE7878001A22780090227C007810BB23A6
-:10244000BC788CA0000EC0002522C4D0C00027227A
-:102450007800E12178107122C0002D2278009022AE
-:102460007C00BC78C4D0400034227800E121BF78E1
-:102470000000146711200100A822186084A0FF004A
-:1024800005A040005422BCA700FFA92020008EA078
-:10249000010040005422BCA7008011200200A920A6
-:1024A00000018EA002004000542278006E227810B5
-:1024B0002B1E002D912000802B6800002F6800004B
-:1024C000086884A0DEFF0A68E8AD10009120018052
-:1024D000F0005722118240006E22A92000017800EE
-:1024E000572278100D1E7C009F600000B4786DA00C
-:1024F000002CB678C0007C22BA78780084229E68CE
-:10250000002D0260B87806ADC00084220260B07869
-:102510000180B278C0008F22BC78C4C0BE78B87881
-:10252000602006A07C007E0E2EA03025BA7DB67DF0
-:10253000AE65B2651C60A260482084A9FFE11E6000
-:1025400084A960004000A3227810B6469665A6656F
-:102550009A66AA6614677120804FFCD7C000AF222C
-:102560007120404F84A7000F0B8084A71F004000FC
-:10257000BA22038003800380038005A1C47168A18F
-:102580000027078084A00F00038003800380C871A8
-:1025900000A1C260912000801478C4D04000DF22E6
-:1025A000ECD04000DB22FCD7C000D822F4D0C00021
-:1025B000E6227800DF22FCD0C000E6221078F4D0BA
-:1025C000C000E622086E84D640001023FCD9C0006B
-:1025D0001023912001807810A21E91200080781095
-:1025E0006420912001801478E4D0C0007523147811
-:1025F000C4D040007523ECD040000823FCD7C000B5
-:102600000323F4D0C0000C2378007523FCD0C00055
-:102610000C23780075231078F4D0400075231B60DC
-:10262000210078007523246096A00100C0001723C4
-:1026300000802660106A146802A248002A23400025
-:102640002A2391200180392000029C60BA789F6083
-:1026500000007810772378007523082CFCD94000FF
-:102660005223006865A040005223046A007084A0D1
-:102670000200400048234C7006A2C0004823046BAF
-:1026800060210423026005A0C00044230269602287
-:10269000026178005E23002D60207810132B086EF5
-:1026A00060210262066978005E230068026965A005
-:1026B00040005A23026178005B23066960210360B1
-:1026C00000006021FCD940006523B4A6FCFF0A6E1F
-:1026D0001068087D28850A7D00801268912001809D
-:1026E000B4D640007523B6A640000A6E7810B31E1B
-:1026F0007F0E7C00086005A70A609120008078109A
-:10270000642091200180B87865A040008A239C60F5
-:10271000BA789F60000078007723B678BA787C009A
-:1027200070797478182884D340009723008012A110
-:1027300048009C23008012A1C800AC2384C37C7A8B
-:102740001A72787A1E72C4DA4000A723847A227241
-:10275000807A267206A084D34000AC23008076786D
-:10276000D2701C7805A04000BA2301801E78C000FA
-:10277000BA236800BA23912080407C003920D323FB
-:102780007800C1233920D923042705A04000D22393
-:1027900000AC68200869106812690A680C6914683E
-:1027A00016690E6838877800C1237C000300090091
-:1027B0000F0015001B00000015001B000000412049
-:1027C00000000C787900E123B3258625E5235E24FB
-:1027D000392074973427107D78000524846086A002
-:1027E0000301C00047241461186005A14000FA23CA
-:1027F000FF86C000162478004724038680A05597E2
-:102800000C6202220080106202227810862030863C
-:102810008EA60F004000D2246C7865A0C000EB2388
-:10282000087802A6C8001624ACD5C00016243A26A3
-:102830007C0082A60300C800D22491200080692079
-:102840000000186884D0C00042241120559704224B
-:10285000C67010820422CA7084D6C000322410824E
-:102860000422DA7010820422DE7085A62080C270F5
-:102870001B68010091208040107884A0CFFF12785F
-:10288000912001803B2000007C001078ADC01278C0
-:102890007800D2243A267810BD25C000E0256C7857
-:1028A00065A0C000EB2391200080107884A0CFFFAA
-:1028B000FF8640005924ADC0127891200180780035
-:1028C000E025392074973427107D78007A248460BD
-:1028D00086A00301C000BB241461186005A140005C
-:1028E0007324FF86C0008B247800BB2480A65597F4
-:1028F0000C6202227810862030868EA61E004000D0
-:10290000D2246C7865A0C0006424087802A6C800B0
-:102910008B24ACD5C0008B243A267C0082A606000E
-:10292000C800D2249120008069200000186884D05B
-:10293000C000B6241120559709204E97A8261C21C7
-:1029400004221A2008811082F0009C2485A6308081
-:10295000C2701B68010091208040107884A0CFFFD6
-:1029600012789120018006A0092075970A203A204C
-:102970007C001078ADC012787800D2243A26781006
-:10298000BD25C000E0256C7865A0C00064249120BE
-:102990000080107884A0CFFFFF864000CD24ADC01A
-:1029A0001278912001807800E02591200080077046
-:1029B00004009479D47002A14800E3244000ED247F
-:1029C000907B02A3C000ED247800E6240280C000C2
-:1029D000ED243A261078ADC01278912001807C0059
-:1029E00084A100FF4000FA240F810C810C81048037
-:1029F0000480078000A17800FD2407810480048002
-:102A00009C7A10A21A72987A06A011A21E72C4D4DF
-:102A100040000D25A47A11A22272A07A11A226727A
-:102A2000A120300003700000092054970A26098174
-:102A30009821042184D040001B253386B0A60200D3
-:102A4000A826A65303861270077001009079947827
-:102A500000800AA1C8002A2506A02820747984A134
-:102A600000FF400039250F810C810C810480048017
-:102A7000078000A178003C250781048004807C79D0
-:102A800008A1787A06A011A2C4D440004825847B0E
-:102A900019A3807C21A40870FCD04000482584A0A4
-:102AA000E00140006D25107D312054973426A87830
-:102AB0000080AA788CD0C0006225077006000470E0
-:102AC00094D0C0005C257800D4246920474F6B2047
-:102AD0000300AC7885A00003AE7806A078007625C8
-:102AE0003020D67591208040967D107DACA5CFFF1B
-:102AF000127D91200180AA78077006003A260370A3
-:102B000001001A711E72C4D54000852522732674F7
-:102B10007C00846086A00301C000A92514611860B0
-:102B200005A1C000A92569200000186884D0C00054
-:102B3000A9250C60C6701060CA70C37020801B6825
-:102B4000010091208040781086206800A8256C78CC
-:102B500065A0C00086257C007810BD25C000E0255A
-:102B60006C7865A0C00086257800E0257810BD252A
-:102B7000C000E0256C7865A0C000B3257800E02592
-:102B8000846086A00301C000D1251860FCC01A60D3
-:102B900086A00400C000D1250478A4D04000D1252F
-:102BA0007810862006A07C007810E625C000D82585
-:102BB00085A001007C007810F525C000DE254120AD
-:102BC0000100107D7C00FF884000E52591208040B9
-:102BD0007C00907B9479D47002A1C000EF2585A37E
-:102BE00000007C004800F32502A37C0002807C00EA
-:102BF0001078ECD040000D267E0E912000807120D0
-:102C00002000047005A0C0000A2608707F0E86A070
-:102C1000080040000D2678005E267F0E78005E26B4
-:102C200084A100FF40001A260F810C810C810480D2
-:102C30000480078000A178001D260781048004809D
-:102C40009C7A987BA47CA07D10A206A019A321A445
-:102C500029A509201800286005A040002E2609207B
-:102C600040007810BB1D40005026A8780080AA784C
-:102C70008CD0C0005E261460FCD0C00040266920C5
-:102C8000404F780042266920804F912000801F68C5
-:102C90000300AB780000AC7885A00003AE789120EB
-:102CA000018078005E26AB7800007810862090794D
-:102CB000947800800AA1C8005B2606A09678D6709A
-:102CC00006A071201000912001807C00FCD7C0007C
-:102CD0006A260920594F78006C260920994F9120C7
-:102CE00000800A207E0FFCD7C00083260920404FB9
-:102CF0000120044F0420ECD040007F267920000101
-:102D00007800872679200002780087260920804FE6
-:102D100079200001042186A00000C000A026FCD775
-:102D2000C00093260920454F780095260920854F3D
-:102D3000042105A0C000A026307884A0C000C000F7
-:102D4000A0261B7845007F0F7C0009200200692027
-:102D5000004F1068ECD0C0000F277120804F792001
-:102D600000012120BF514B780F001920A74484D1C6
-:102D70004000C3261068ECD04000BF26A1202B01E4
-:102D80007800C526A1202B027800C526A1202B01A2
-:102D9000042305A04000D2269A781883AC23188318
-:102DA0009823A65318337800C5269B782000A920C5
-:102DB00010001468E4D04000E226AF780000AF783D
-:102DC0002090F000DA267800E826AF780000AF788F
-:102DD0002080F000E226037000007E018CD10920E3
-:102DE00000004000F126BDC17810E2287F0120706C
-:102DF00084A00F007E001468E4D07F00C00001278B
-:102E000085A040637800032785A0C06206780F780C
-:102E100000924378D800537880000B7808005674ED
-:102E2000537000000981400022277120404F106834
-:102E3000ECD040001C277920000178001E27792063
-:102E400000022120BF4F7800B0267C007E01BCD15B
-:102E5000C00037277E000120044F0420ECD07F0003
-:102E60004000332711200101780039271120010289
-:102E700078003927112001018CA10F00042284A0C1
-:102E8000F0FF05A112207F017810E2287C00FCD31E
-:102E9000C00057277E000120044F0420ECD07F00A3
-:102EA0004000532711200101780059271120010209
-:102EB0007800592711200101A92009000B81F00099
-:102EC0005B278CA1000E042284A0FFF105A1122033
-:102ED0007C00192002000120044F0420ECD04000A7
-:102EE0007327198309200101780075270920010142
-:102EF000A92005001382F000772794A2E0000421A6
-:102F000084A01FFF05A20A201983400088270920FA
-:102F10000102780075277C00FCD3C0009C277E004E
-:102F20000120044F0420ECD07F004000982711209E
-:102F3000010178009E271120010278009E271120B0
-:102F40000101A9200C000B81F000A0278CA100F04A
-:102F5000042284A0FF0F05A112207C00FCD3C00036
-:102F6000BE277E000120044F0420ECD07F004000EB
-:102F7000BA27112002017800C02711200202780030
-:102F8000C02711200201042284A0CFFF05A1122036
-:102F90007C007E0CBCD1C000DA277E000120044FEB
-:102FA0000420ECD07F004000D6276120000178008B
-:102FB000DC27612000027800DC2761200001BCC111
-:102FC0000381038080A020009A60AC62AC637F0C18
-:102FD0007C007E0CBCD1C000FA277E000120044F8B
-:102FE0000420ECD07F004000F6276120000178002B
-:102FF000FC27612000027800FC2761200001BCC191
-:103000000381038080A022009A60A46084A0DFFF77
-:10301000AE607F0C7C007E0CBCD1C0001C287E0002
-:103020000120044F0420ECD07F00400018286120CC
-:10303000000178001E286120000278001E2861200F
-:103040000001BCC10381038080A022009A60A460BB
-:1030500085A02000AE607F0C7C007E0CBCD1C0003F
-:103060003E287E000120044F0420ECD07F00400069
-:103070003A28612000017800402861200002780091
-:10308000402861200001BCC10381038080A0200092
-:103090009A60A4608CA2200040004E28ACC29DA380
-:1030A0000040FCC3B4D3C0005328FDC3AE6210205F
-:1030B000A460AE6318207F0C7C00912000807E0C01
-:1030C0007E0E186805A04000C028FCD14000692889
-:1030D0006120D09678006B286120C0957810C828B0
-:1030E0004000A228A9200101FCD1400078286120DD
-:1030F000D09578007A286120C0947E0C7810C8287A
-:10310000400085287F0C608CF0007A287800C02869
-:103110007F00FCD140008F2882A0D0957120804F85
-:103120007800932882A0C0947120404F7A70767105
-:10313000382101200400667083700F00D471DCC157
-:10314000D671781063267800BC28FCD1C000A9286D
-:103150007120404F7800AB287120804F2060DDC087
-:10316000226076713821002C7E7001200600667086
-:1031700083700F00D471DCC1D671781063260120F2
-:1031800000007800C228012001009120018005A0E4
-:103190007F0E7F0C7C00042C05A04000DF286020FF
-:1031A000106006A3C000DC280C6006A2C000DC286A
-:1031B000146006A1C000DC2806A07800E1280060A9
-:1031C0007800C92885A001007C007E0F7E0E7E015C
-:1031D000BCD1C000FA287920404F7E000120044F66
-:1031E0000420ECD07F004000F62871200001780018
-:1031F000FE28712000027800FE287920804F71207F
-:10320000000120798CA10F00EC70C4D0C000082907
-:103210007F01780023290B810B810B810B817F00BB
-:10322000BCD0C00020297E000120044F0420ECD037
-:103230007F0040001C298DA1000F780022298DA15C
-:10324000000F780022298DA1000804217F0E7F0F36
-:103250007C007E0E0120014F0420ACD0C000A329C9
-:10326000E468ACD04000A32984A00600C000A329D4
-:103270001460FCD0C0003D297120C05378003F2964
-:1032800071204054078084A00F00038003800380D6
-:1032900070AE047084A00A00C000A329087194A134
-:1032A00000FF4000A3298CA1FF0001200A0006A115
-:1032B0004000722901200C0006A14000762901205F
-:1032C000120006A140007A290120140006A1400046
-:1032D0007E290120190006A1400082290120320028
-:1032E00006A14000862978008A2909200C00780070
-:1032F0008C290920120078008C29092014007800FC
-:103300008C290920190078008C29092020007800D8
-:103310008C2909203F0078008C2911200000002111
-:1033200005A20A707120004F0470BCD04000A32990
-:103330001460FCD0C0009E29EA707120404F7800D4
-:10334000A129EE707120804F1F700D007F0E7C0050
-:103350000120054F0420E4D0C000B129047884A0E6
-:103360001FFF85A0406306787C006800B229912089
-:103370000080712000007E00187084D0C000B92940
-:103380007F0071201000CA707F00C670C370028079
-:10339000DB700F08DF700B00712000001B70010054
-:1033A000912080407800CF293C7F587E307C387D4A
-:1033B000A0788E70927596749A769E7794A53F0049
-:1033C000F4D44000E62984A77D00C0001D44781095
-:1033D000B2299CA40F0082A304005000F129A6A3E7
-:1033E0000700C000B2291824078584A00F007900C7
-:1033F000F629713062318D31FF33E8376238173981
-:10340000A839963A853B092A062A422E652FB937F4
-:10341000062A7810B2297C0006A07800132A0878C2
-:103420008DC00A7806A002704E704670D27060702F
-:1034300005A0C000792B647084A0070079001D2AC4
-:10344000252A982AA12AAC2AB72A5F2BC22A982AB1
-:103450003078BCD0C000082AD471BCD1C000082A82
-:10346000B4D1C000752AA47086A001004000082ACB
-:10347000B4706DA0006865A055A09B7810000C6B1F
-:10348000AA7B086845A0106D04686DA05DA086A8A1
-:10349000010040004B2ABC69AA7DAA79C0684DA0F2
-:1034A0001C6E012010007800D32C607005A0C000B5
-:1034B000082A7E0C7E0DB4706DA0006865A055A032
-:1034C0009B7810000C6BAA7B086845A0106D0468FF
-:1034D0006DA05DA086A8010040006E2ABC69AA7D8F
-:1034E000AA79C0684DA01C6E012020007800D32C62
-:1034F0007810B043C000082A1B785B00BC706DA038
-:10350000B4685A789468D678DE789868D278DA7891
-:1035100008788DC00A78BC684270B4C1D671B870A2
-:1035200065A0C0685A7003700200002D4E7080AD17
-:10353000090046707C007810B043C000A02A1B78B8
-:103540004700037004007C007810B043C000AB2A31
-:1035500011200C007810D22A037004007C0078102F
-:10356000B043C000B62A112006007810D22A03709A
-:1035700004007C007810B043C000C12A11200D0067
-:103580007810D22A037004007C007810B043C00089
-:10359000D12A112006007810D22A7C707F7000009A
-:1035A00068204E70037001007C007471FCC10781BB
-:1035B00082789B78100086A20C00C000E12AAA7ACB
-:1035C000012001007800F62A8CA11F008DA1C00007
-:1035D000AA7986A20D004000EF2AAA7A01200200F3
-:1035E0007800F62AAB7820007871AA79AA7A0120AF
-:1035F00004009B786000AA785B7804001B781601B1
-:103600007810D34383700F00D470B4D04000122BD5
-:10361000B4C0D6707E0CB87065A0086084A0EFFBC3
-:103620000A60186001801A607F0C7C00147005A08D
-:10363000C000212BD470B4D04000222BB87006AC4F
-:10364000C000222B7810012B7C007E01A47186A182
-:1036500001004000542B7E0D7E020021112001004C
-:1036600012A2B4706820006806AC40003B2B1182A7
-:103670004000522B7810562B7800302B7E0C002106
-:103680001120010012A2B470682000686020086058
-:1036900084A0EFFB0A60118240004F2B7810562B5C
-:1036A0007800422BA77001007F0C7F027F0D7F0105
-:1036B0007C00E8AD0500AC7006ADC0005E2BA870C4
-:1036C00068207C007810B043C000082A7C70682015
-:1036D000747778104E42502C781092449B781000EA
-:1036E000146884A01F00BDC0AA781C6E4120010090
-:1036F000012004007800D92C7810B043C000082ABB
-:103700009B78100060706820146FD470B4D04000B3
-:10371000932BB4C0D6707E0CB87065A0086084A0EE
-:10372000EFFB0A60186001801A607F0C78104E422F
-:10373000502C78109244246805A04000A42B82A04D
-:1037400006004800A22B7800A42B27680500146807
-:1037500084A01F00BDC0AA783120200041200100B4
-:10376000012003007800D92C8DC2D672C07200A24D
-:1037700015A0547108812AA14800BC2BC071642196
-:103780000465FF85C000D32B56712184C000B72B80
-:10379000D4708CD04000CF2BD07005A0C000CF2BB0
-:1037A000D3700A007C0000227800C12BD4708CC03A
-:1037B000D670D3700000346005A0C000D02B08671D
-:1037C00084A73F074000022CD4D7C000D02B84A789
-:1037D0002100C000D02B84A702004000F32B84A757
-:1037E00004004000D02BBCA7FBFF0A6784A7180287
-:1037F000C000D02B84A700014000022C186005A057
-:10380000C000D02BBCA7FFFE0A6768252368000014
-:103810001C6E84A60E0018634000132C1C6002A3CB
-:103820004800162C4000162C7800D02BFF83C000D7
-:10383000D02B582D502C5671BCD7C0001F2C28708F
-:1038400022603A60BCC70A67C06865A04DA00061ED
-:10385000602A41200100146B9CA31F009DA3C0009F
-:10386000FCD14000332C84D64000352C9CA3BFFFF4
-:10387000A4D640003A2C9DA3200084A60E00C000D0
-:10388000852CA5C70A67002CC668A47786A7010007
-:10389000C000592CD470B4D0C000592C007082A044
-:1038A0000200C800592C3078BCD0C000592C9B783D
-:1038B0001000AA7B7800D12C3987A6775027B077E3
-:1038C000B0A70500AC7006A6C000642CA876B2763E
-:1038D0003A2C38873A2D38873A2838873A23388760
-:1038E0003A253078BCD040007C2C9120008091207B
-:1038F0003D30D47084A03D30912000809020D5AA26
-:1039000000004000842C21840022C000B62B7C00E3
-:10391000DCD14000493E292020009CD6C000922CDA
-:1039200028858CD6C000922C28854088146F0C61A5
-:1039300008818CA1FF00CC7060A1642CFF8C40003A
-:10394000B12C146006A7C0009A2CB8600180BA6040
-:10395000C000952C602A086085A000010A60002242
-:103960002184C000B62B7C00602A0E61BE69002C49
-:10397000C66840880860D5C00A60A47786A70100A1
-:10398000C000592CD470B4D0C000592C007082A053
-:103990000200C800592C3078BCD0C000592C9B784C
-:1039A0001000AA7BAA7DAA79012002007E0018607F
-:1039B00000801A607800DA2C7E0060290461602A99
-:1039C00084A118004000F62C84A110004000E92CCE
-:1039D00078105E40C0001B2D84A108004000F62C2A
-:1039E000A06984A10006C000F62C78103E3F780044
-:1039F0001B2DA06984A1001E4000262D84A1000873
-:103A000040000F2D7E0C6029006085A00020026020
-:103A100004618DA1100006617F0C78105E40C0002B
-:103A20001B2DA06984A100024000172D7810A13F32
-:103A300078001B2D84A10004C000F22CA06984A191
-:103A400000104000262D14698CA100FF0F81781012
-:103A5000E6277F028CA6E00084A660004000332D9C
-:103A600086A06000C000332D8DA100408DA104010F
-:103A7000B6699B7860000028AA781868FDC01A68AB
-:103A8000BCD640004E2DFCC0877000008AA00D00FF
-:103A900050004C2D8AA00C00867101200C000C8077
-:103AA0008A71AA781835403328340080AC8080AF02
-:103AB0002B00A0209B78000080AD0B009820A6531F
-:103AC000A8239828A02586A22000C000862DD470A7
-:103AD000B5C0D670002CBA70002DBE701468FCC042
-:103AE0000780827886A202004000BC2DA47000806E
-:103AF000A670B47498A40500AC7006A3C0007E2D17
-:103B0000A873B67386A210004000082A7F0D7F0CB0
-:103B10007C00007005A0C000642D86A20200C000D9
-:103B2000D62D7810B043C000642D1468FCC0078007
-:103B30008278912000801B785B00B4685A78946882
-:103B4000D678DE789868D278DA7891200180087883
-:103B50008DC00A787E127E0D7E0CD47084A0002762
-:103B600090207F0C7F0D7F1200295A70BC68427034
-:103B700003700200002D4E7080AD09004670307851
-:103B8000BCD04000C82D91203D30D47084A03D3081
-:103B9000912000809020A47005A0C000CD2D7C0055
-:103BA00021844000CC2D5072C07000A215A0780076
-:103BB000B62B86A21000C000072E7810B043C000BC
-:103BC000642D1468FCC0078082781B785B00B468A1
-:103BD0005A789468D678DE789868D278DA78087857
-:103BE0008DC00A78A4700080A670B47490A40500FB
-:103BF000AC7006A2C000FA2DA872B67200295A70E5
-:103C0000BC68427003700200002D4E7080AD090048
-:103C100046707C00B46B9DA300205A7B1468FCC0E6
-:103C200007808278946BD67BDE7B986ED27EDA7EBC
-:103C30001B785B0000295A70027208788DC00A78E0
-:103C4000002305A64000322ED47084A0002786A051
-:103C50000023C0002C2E0920000078002E2E092001
-:103C6000010084A20F007910382E80AD0900467043
-:103C7000002D4E707C00402E3F493F492C493F4962
-:103C8000402E402E402E7810B229087884A0FDFFE7
-:103C90000A787810A5297E0F7920004FAC787F0F25
-:103CA00084D040006A2E647086A00100C000582EA7
-:103CB00066707800412F647086A00500C000682EF1
-:103CC0007C7068201B68040017680000206884A0CE
-:103CD000FF009DC0226867700000A7700000A870F8
-:103CE000B270B6707810012B7E151120040064713B
-:103CF00086A1010040008A2E86A10700C000812E07
-:103D00001F70050078008A2E1F7001006770000088
-:103D1000D470DDC0D67078008C2E67700000012052
-:103D20000A4F042084A0FF0086A0180040009C2EAB
-:103D30001870167005A0C0009C2EA77001007E06AA
-:103D40007810D645A920100039200000781048418D
-:103D5000B8A70001F000A32E7F0600707900AD2EF9
-:103D6000E72EC22EC22EB72EE72EE72EE72EB52E57
-:103D70007810B229607005A04000E72E06ADC000A3
-:103D8000C22E006862707800D42E206884D0C000F3
-:103D9000D02E146F78104E420860D4C00A6078109C
-:103DA000193E7800D42E5C7060200068026084A602
-:103DB000005F1E681868FCD04000DC2E1A6A176885
-:103DC00000002B680000206884A0FF009DC02268CE
-:103DD0007810732084B200044000EF2E2120D0968A
-:103DE0007800F12E2120C0957810462F84B200046F
-:103DF0004000FB2E2120984F7800FD2E2120584FA7
-:103E00007810462FA920010184B200044000092F38
-:103E10002120D09578000B2F2120C0947810462FB8
-:103E20002084F0000B2F84B200034000182F612083
-:103E3000C05478001A2F6120C07421200200A920EC
-:103E400000011061FF814000372F18607E017E0065
-:103E50001120024F0C2202A112207F007F0102A13B
-:103E60005000372F1260C000372F1120044F04225A
-:103E7000A5C012201B600000E0AC1000F0001E2F57
-:103E80002184C0001C2F7F15037000004F700000BC
-:103E90007C007E04042405A04000612F6820006897
-:103EA0007E001A6A176800002B680000B46884A0BE
-:103EB000005F1E68206884A0FF009DC02268781003
-:103EC00073207F007800482F7F04232000007C00AF
-:103ED00082A2030050006B2F7810B22900237900D2
-:103EE0006E2F712FFC2F193082A202004000772F15
-:103EF0007810B22964706770000083700000790048
-:103F00007E2F862F862F882FC82F553E862FC82FAD
-:103F1000862F7810B2297477781048417477BCA73F
-:103F2000008F78104E42186005A04000BF2FFCD7CC
-:103F3000C0009B2F2120C09578009D2F2120D09676
-:103F40000920050011201000781034304000BF2FE8
-:103F50007E15A9200101FCD7C000AF2F2120C094FD
-:103F60007800B12F2120D0957E0409200500112072
-:103F70001000781034307F044000BE2F2084F00001
-:103F8000B12F7F15388784A71F00C0008E2F7800BF
-:103F90000C2A78000C2A747778104E42186005A01D
-:103FA0004000FA2FFCD7C000D62F2120C095780002
-:103FB000D82F2120D096092005001120200078104C
-:103FC00034304000FA2F7E15A9200101FCD7C00033
-:103FD000EA2F2120C0947800EC2F2120D0957E0478
-:103FE0000920050011202000781034307F044000A3
-:103FF000F92F2084F000EC2F7F1578000C2A002286
-:104000007900FF2F0230043004307810B2290920E3
-:104010001200647086A0020040000D3009200E00DE
-:104020001868FCD0400012301A6967700000D47024
-:10403000DDC0D67078005D43002279001C3021304D
-:1040400004301F307810B2297810D645007086A051
-:104050000200C000C73D7810363E086084A0EFFB28
-:104060000A607810B83D4000C73D78000C2A04244F
-:1040700005A040006D306820042D7E00146806A75E
-:1040800040004330202D7F00780035307F00222013
-:104090001A69176800002B680000B46884A0005FEC
-:1040A0001E68206884A0FF0005A222687810732093
-:1040B0002120024F1C2419832223106001801260EA
-:1040C000C00064302120044F0424A5C022200860D1
-:1040D00084A0EFF90A607810222B7810363E7C001D
-:1040E00085A0010078006C300023790074307930AD
-:1040F0007730F9307810B229E47805A0D000AF30DD
-:1041000008327E000120044F0420ECD07F004000E4
-:104110008A308CA1000378008C308CA10004400010
-:1041200092301800082A780094302800082A0820C5
-:1041300084A03000C0009B307800B937EC7884A0B0
-:10414000030040009930002184A007007900A530C9
-:10415000D930E330CE30AD30A543A543AD30EE309D
-:104160007810B229007086A00400C000C9306470C5
-:1041700086A00200C000BF301120020019200000FC
-:104180007800652F647086A006004000B930647026
-:1041900086A004004000B930E479012003007800D3
-:1041A00043341868FCD04000D4301B681D007810E0
-:1041B00018411B7864007C001868FCD04000DF3098
-:1041C0001B681D0078101841780081431868FCD0E6
-:1041D0004000E9301B681D00781018411B78F8007A
-:1041E0007C001868FCD04000F4301B681D0078107B
-:1041F00018411B78C8007C0084A50F00C00018314E
-:104200007810A5290070790002310C2A0A310C318E
-:10421000C73DC73DC73D0A310A317810B229781031
-:10422000363E086084A0EFFB0A607810B83D40007D
-:10423000C73D78000C2AE47805A0D000AF300832E2
-:104240007E000120044F0420ECD07F004000293183
-:104250008CA1000378002B318CA100044000313187
-:104260001800AF30780033312800AF30082084A028
-:104270003000C0003B311B785B007C00EC7884A0F0
-:10428000030040003831002184A107007900453146
-:10429000543158314F314D31A543A5434D319F43E2
-:1042A0007810B229781020411B7864007C007810C7
-:1042B000204178008143781020411B78F8007C0071
-:1042C000781020411B78C8007C00002379006531FC
-:1042D0006A3168316C317810B2297800A8391B68CE
-:1042E0001600A3780000E47984A130004000A839CA
-:1042F000EC7884A003004000A83984A100014000AC
-:10430000703184A10700790082318A315831CE3072
-:104310005D43A543A5435D439F43781069437C00FB
-:1043200082A20500500093317810B2290023790051
-:1043300096319931C933D433002279009C31B6319A
-:10434000A331B631A131AC337810B2299B78180073
-:10435000A87884A0FF0082A02000480007418AA01E
-:104360000400C80007417900B23107410741074105
-:10437000B1409B781800A87984A180004000C73123
-:1043800078000741007005A0C000BD311120040075
-:104390007800933B84A1FF008AA01000C800074169
-:1043A0007900CF31E131DF31F631FA31CD320741D9
-:1043B0000741CF3207410741A833A83307410741DE
-:1043C0000741AA337810B229E4D64000EC3101202D
-:1043D0000003008000803A781B78C3007C001868D6
-:1043E000FCD04000F4311B681D007800E4317800F7
-:1043F0005D431B681D00780011412069226984A675
-:104400000018C0005F32206884D0C0006532186890
-:1044100086A00800C0000B321B680000D4D6400004
-:10442000CA32BCD640004B3287700000186884A0A6
-:104430003F008AA00D0050004B328AA00C0086710C
-:1044400001200C000C808A719B786100AA787E158F
-:104450007E137E147E0108328CA1000340003D32A1
-:104460007E000120044F0420ECD07F004000393250
-:10447000A1202B0178003F32A1202B0278003F328F
-:10448000A1202B017F019B7800000080AC8080ADD3
-:104490000B009820A6537F147F137F15386005A06A
-:1044A000C0005A321C6884A00E00400011417810F0
-:1044B00027412B78083078005C3201803A601B7805
-:1044C00067007C00E4D6400065321B7879007C00F0
-:1044D00084A660004000C732DCD64000C732FCD65C
-:1044E000C000713278008832FCC65A7EB66EDC7A23
-:1044F000D879D0781B80C8007B32008084A03F0030
-:1045000008A191A20000986B002102A3B268946BED
-:10451000002203A3AE68F4D640008E32F4C65A7E61
-:10452000B66E007086A00300C0009C327E0078103A
-:10453000D64578103F497F001B7876007C0006A0A6
-:104540007810444AB06AAC69986C946B002205A15B
-:104550004000AB32002222A400211BA3AA6CD27C13
-:10456000DA7CA66BD67BDE7B002305A4C000BB32C1
-:10457000F5C65A7EB66E1B7876007C001B787600F6
-:10458000002215A1C000C43278103F497C00781089
-:1045900077497C001B7879007C001B7867007C00E1
-:1045A0007810B22978001B332069C4D14000E4326E
-:1045B000C4C122697E0C587060200060E4C00260B3
-:1045C000046084A0F5FF06607F0C78000F33CCD127
-:1045D00040000F33CCC122697E0C5870602000600F
-:1045E000ECC002600460A4C006600820482C7F0C68
-:1045F0009CD140000F3378104A4278103E3FFF882C
-:1046000040000F339B7860000028AA78587E95C63A
-:104610005A7ED4D6C0000C331B7864007C001B7813
-:1046200078007C00587ED4D6C00016331B78670013
-:104630007C001B7879007C0078000C411920000078
-:1046400090798CA10700C0002933206884A0000164
-:1046500040001933092008009B781000A87894A026
-:10466000FF0086A20100C00045330023A87C00A4FF
-:10467000182002A140003D3348003D3378003F330D
-:104680007800D132A824A87AF0003F3378002B3389
-:1046900084A2F00086A02000C000993318831883FC
-:1046A000002302A14000553348005533780096336B
-:1046B00086A22300400019331C6884A0F1FF1E6805
-:1046C000587E84A6F1FFA5C030205A7E0860A5C0A0
-:1046D0000A607E0C5870602004600820482C7F0C13
-:1046E000A4D14000763378104A4278105E407800BA
-:1046F00084337E0C5870602004600820482C7F0CA6
-:104700009CD140000F3378104A4278103E3FFF881A
-:1047100040000F339B7860000028AA7895C65A7E27
-:10472000D4D6C00093331B7864007C001B787800DB
-:104730007C00A87A78002B331883002302A1400064
-:10474000A2334800A23378002B3384A28000C0003B
-:10475000114178000C4178001141780007415870F0
-:104760004DA09B781800A87884A0FF008EA00100BF
-:104770004000B9337810B229A87A94A2FF00A87833
-:1047800084A0FF008AA00400C80007417900C53357
-:1047900007418F3E0741064082A20000C000CF3390
-:1047A0007810B229781018411B7878007C0082A21A
-:1047B0000300C000DA337810B229FCD4C000FA3309
-:1047C000647005A04000E3337810B229146F767747
-:1047D000BCA7008F78104E42086085A021000A60B7
-:1047E000388784A71F00C000E73378101C4167702A
-:1047F00002001F7009007800FC3378102B411B78F1
-:1048000078007C0082A20400500005347810B229A0
-:104810000023790008340B34CB350E3686A2030012
-:10482000400043340072D87CDC7DD07FD471BCD191
-:10483000C0003B34B4D140003B34687884A0FF0012
-:10484000C0003B3482A20200C8003B347E0D3B789E
-:1048500000831B784C00BC706DA0B4685A789468D3
-:10486000D678DE789868D278DA78B4C1D6710370D9
-:1048700030007F0D01200000780047343B780013A2
-:104880001B784A0001200000780047340072D87C71
-:10489000DC7DD07F4A70A068ECD040004F340860C7
-:1048A0008DC00A6084A20F0079005334AB356034A8
-:1048B0005D3411379D370C2A5B345B347810B22994
-:1048C0000860D4C00A60E4D640006834487086A00E
-:1048D0001400C00088347810D645092000001868FC
-:1048E000FCD040007134487086A01400400082342F
-:1048F000186886A00800C000633558789CD0400036
-:1049000063352068ACD0400063351B681400092073
-:1049100002007800C73468788CA0FF004000C734DC
-:1049200086A10800C0009E340860A4C00A60781008
-:10493000B83D4000C7347810363E7810D645780030
-:10494000AF3486A12800C000C734186005A040001D
-:1049500091340180400091340180400091341E6008
-:1049600078009134206884D040000C2A84C02268EA
-:104970007810132B5C707E0C6020006802607F0C46
-:104980000460026805A0002DC000C4340260066007
-:1049900078000C2A7E01FF81C0001135007086A0CE
-:1049A000300040001135D471BCD1C0001135B4D1F4
-:1049B000C000F834607005A0C0001135A47086A056
-:1049C000010040001135037000007E047E057E0763
-:1049D0007E067E0C7E0D7810352A7F0D7F0C7F06BB
-:1049E0007F077F057F04D471B4D1C00011350370F7
-:1049F0004000780011357810B043C00011351B78A5
-:104A00005B007E0DBC706DA0B4685A789468D6784F
-:104A1000DE789868D278DA78B4C1D6710370300045
-:104A200008788DC00A787F0D781048367F01FF81A5
-:104A30004000633584A600DF1E682B680000146FF9
-:104A400086A10200C0006435186886A01400C0006A
-:104A50002D350820E4D640002D3568788CA0FF0065
-:104A60007810012B7810222B2068DCD0C000643530
-:104A7000178794A20F0013821382138284B200035B
-:104A80004000433590A2C0537800453590A2405471
-:104A900090A200001C22C4D3C0004D3578005335CD
-:104AA0001082042285A0180012201182D4D3400065
-:104AB0005E35A068C4D0C0005E357810C23678007C
-:104AC0000C2A08608DC00A60780064352A6916696E
-:104AD0001868FCD040006B3548701A688CA600DF5F
-:104AE0001E691064FF84400080350920024F0421B4
-:104AF00001800A2021841264C00080352120044FE7
-:104B00000424A5C02220186005A04000883501803B
-:104B10001A60C0008B350860A4C00A60206884D089
-:104B2000C0009735006805A0C0009435026006609B
-:104B300078009B355C706020006802606120004F47
-:104B400087680301082D6B200000686005A06A617A
-:104B50004000AA35022D7800AB356E61007286A246
-:104B600030004000BB3586A24000C0000C2A037014
-:104B700002004C706820C46860207C000370020052
-:104B8000BC706DA0BC684270B87065A0C0685A70F7
-:104B9000002D4E7080AD090046707C0082A204009A
-:104BA0004800D1357810B22900227900D435D835A3
-:104BB000E935F635E93586A500134000E93586A5C7
-:104BC0000083C000CF3503700000186001801A60B8
-:104BD000086084A0EFFB0A60007086A0050040001A
-:104BE000F335781018411B7878007C001B78790029
-:104BF0007C0090780780018084A0070080A01800C6
-:104C00009A78A8798CA1FF0086A1030040000B369A
-:104C100086A1000040000B36780007411B78790020
-:104C20007C00206895C02268FF82C000183678108A
-:104C3000184178001F36118240001D367810B229C5
-:104C400078102B411B7878007C007810D3433078A3
-:104C500084A0C000C00045367E0108327E000120DD
-:104C6000044F0420ECD07F00400037368CA10003B5
-:104C7000780039368CA100047F01400040361800CE
-:104C8000453678004236280045361A7906A07C0061
-:104C900085A001007C0084A66000C00052362F6809
-:104CA0000000336800007800C136DCD6C0006A36E8
-:104CB000B468DCD0C0006A369869946A2E69326A9A
-:104CC000487005A0C0006736002205A14000D64507
-:104CD0004B7015007800D6457C00ACD6400090366D
-:104CE000F4D6400076362F68000033680000780064
-:104CF000D645B46884A0004035A6F4D6C00070360E
-:104D0000487005A0C00083364B701500DCD6C0008B
-:104D10008C36B468DCD040008C36A86CA46D2E6C48
-:104D2000326D7800D645F4D6400099362F680000E1
-:104D3000336800007800D645B46884A0004835A6E2
-:104D4000F4D6C0009336487005A0C000A6364B705C
-:104D50001500082410250027FB80C800AD36008010
-:104D600084A03F0008A191A200002E69326A0021B0
-:104D700005A2C000BA367800D645007086A00600AD
-:104D80004000C1367800D6457C0046690860CDC039
-:104D9000CCD34000C9368DC00A6018683A681B68D9
-:104DA00006008F68000093680000306A2C693E6A34
-:104DB00042692F6803003368000037682000976855
-:104DC00000009B68200000707900E3360C2AF5365D
-:104DD000ED36EB36EB36EB36EB36EB367810B229A8
-:104DE000206884D0C000F5367810193E7800FB3674
-:104DF0005C70502C602000680260602A08328CA130
-:104E00000003400004372120584F78000637212046
-:104E1000984F042405A040000D3720207800063765
-:104E2000222D6B2000007C007810203E7810363E4A
-:104E30000860CCC00A602B6800009B780E00146FDD
-:104E400038691A694469166908328CA10003400068
-:104E50002A370920000078002C370920010078103B
-:104E6000814ADCD6400034371C69EDC11E691868E0
-:104E7000FCD04000433768788CA0FF0040004137E9
-:104E80001B681E00780043371B68000084B20003D3
-:104E9000C0004B372120984F78004D372120584FC4
-:104EA000006822203C6A4069326A2E69C06860202E
-:104EB0000060A4D040008D3741202100492005002A
-:104EC000512020007E0D7E0F7E157E147920004F2C
-:104ED0007810461E7F147F157F0FCC70102009209C
-:104EE00001017E0204226DA040007D37146806A7F0
-:104EF00040007A370068780070372068D5C0226893
-:104F00007F0210820981C0006E377F0D6770030039
-:104F10007F700000767783700F00D471DCC1D6718A
-:104F2000186886A00200C0009937176800002B6837
-:104F300000001C68ECC01E687810732078000C2AF2
-:104F4000D87CDC7DD07F781048362B6800009B78B9
-:104F50000E00146F7810D7438CA0FF0016691868F4
-:104F6000FCD04000B23748701A688CA600DF1E697A
-:104F70006770000078000C2A007005A0C000BF37E1
-:104F800078000C2A06A07810D6452069ACD1C00064
-:104F9000C8371B6814008CA600DF1E692B68000050
-:104FA000206884A0FF00226800707900D4370C2AA2
-:104FB000DE37DE37E137E137E137DC37DC377810D1
-:104FC000B2291868780043340860A4C00A601768E2
-:104FD00000007800DE3D00237900EB37EE37F03734
-:104FE00060387810B229FCD6C000473800700DA098
-:104FF0007900F7370C2A0138013831380138443844
-:10500000FF37FF377810B22984A66000400031389E
-:1050100086A06000C0002E38ACC6F4C6EDC65A7E2D
-:10502000B66E1C68ACC01E6886A102004000203825
-:105030007810D645AC69B06815A1400020387810CA
-:1050400077497800223878103F491B787900D4716D
-:10505000B4D1C000082AA47086A00100C000522A62
-:105060007C00ECD640000B381868FCD04000443877
-:10507000F4D6C0003E381B6815001B787900780014
-:10508000082A1B6807002F680000336800007810AA
-:1050900069437C00FCC65A7EDC7AD879D0781B80C4
-:1050A000C8005038008084A03F0008A191A20000F1
-:1050B000986B002102A3B268946B002203A3AE6830
-:1050C0001B7879007C007810B229002379006538BC
-:1050D0006A388F38EF387810B229007079006D384F
-:1050E000753877388038753875387538753875384B
-:1050F0007810B229AC69B06815A1400080387810EA
-:1051000077497800823878103F491C68B4C01E681F
-:10511000D470B4D0C000082AA47086A00100C000DA
-:10512000522A7C00FCD6C000DF3800700DA0790048
-:1051300096380C2AA638A038D638A638DC389E38DF
-:105140009E387810B2299468D678DE789868D2783C
-:10515000DA7884A660004000D63886A06000C000DF
-:10516000D338B4A6BFBFEDC65A7EB66E86A1020084
-:105170004000C2387810D645AC69B06815A140002F
-:10518000C238781077497800C43878103F491B78C6
-:1051900079001C68B4C01E68D471B4D1C000082A5C
-:1051A000A47086A00100C000522A7C00ECD640000A
-:1051B000B0381868FCD04000DC381B6807001B784A
-:1051C000F9007C00FCC65A7EDC7AD879986B002105
-:1051D00002A3B268946B002203A3AE68D2791B7855
-:1051E00079007C00DCD64000F8382B7809301B7839
-:1051F00079007800082A8478ACC08678E47884A0A6
-:105200000800C0000B3984A4000240000539F5C62F
-:10521000DDC65A7E1B7879007800082A206895C080
-:1052200022687810E242DDC6781018411B787800B9
-:105230007800082A002379001A391D391F392139CD
-:105240007810B22978001141D4D6C0005C39E479D5
-:10525000ACD140002F39EC7884A0030040002F39F6
-:105260002B7809309B786000AB78000084A6FBFFA8
-:105270005A78E479ACD140003F39EC7884A003003F
-:10528000C00058390120044F0420E4D0C000543934
-:105290002068C4D0400054397E0C587060200460EF
-:1052A0009DC00660086084A0FF000A607F0C01209A
-:1052B00014007800433484A1070079009239907A71
-:1052C00094A207009B786000A879FF814000903984
-:1052D0009B781000A87B84A30100C0008339A87BC1
-:1052E000A87B86A30100C00076390920F7FF78006B
-:1052F0007C3986A30300C00083390920EFFF7E0CB0
-:1053000058706020046004A106607F0C9B786000E8
-:10531000AB78000084A6FBFF5A782B78093020690F
-:105320008CA1FFFC226978005D43D930E3309C39C1
-:10533000A2399A399A395D435D437810B2292069C0
-:105340008CA1FFFC22697800634320698CA1FFFCDB
-:10535000226978005D43E47984A130004000B239CD
-:10536000EC7884A00300C000E639007086A0040039
-:10537000C000CC39647086A00200C000C239112080
-:105380000200192000007800652F647086A00600D6
-:105390004000BC39647086A004004000BC39007035
-:1053A00086A000004000082A206984A12004400053
-:1053B000DB39D4C1226918687800433418688EA09C
-:1053C00002004000E439FDC01A6801201400780092
-:1053D000433484A107007900EA395D435D43F23923
-:1053E0005D43A543A5435D435D43BCD64000343ACD
-:1053F0008471FF814000343A82A10D00D000013A4F
-:10540000877000007800063A82A10C00867009209F
-:105410000C009B786100AA797E157E137E1488703B
-:10542000148110A28A7280A00B0000AD982084B273
-:1054300000034000283A7E000120044F0420ECD0F5
-:105440007F004000243AA1202B0178002A3AA120B5
-:105450002B0278002A3AA1202B019B7800000881BA
-:10546000AC81A6537F147F137F1578006343D4D695
-:10547000C000883A206884D0400063438CA6600056
-:1054800084A660004000463A86A06000C000463A0C
-:10549000F5C194C15A79B6699B786000AB78000079
-:1054A0009B7861001868FDC01A68AA7808800C8192
-:1054B00040004F3E8CA1F800C0004F3E7E157E1389
-:1054C0007E147E0108328CA100034000743A7E00F5
-:1054D0000120044F0420ECD07F004000703AA1204E
-:1054E0002B017800763AA1202B027800763AA12091
-:1054F0002B017F019B7800000080AC8080AD0B0009
-:105500009820A6537F147F137F151468FCC0078072
-:105510008278780063431868FCD040008E3A1B689C
-:1055200008002068ADC02268781020411B78EA008E
-:105530007C0000237900993A9E3A763B9C3A781099
-:10554000B229D87CDC7DD07FFF82C000C73A0072D0
-:1055500086A2030040001034D471BCD1C000CA3A06
-:10556000B4D14000CA3A7E0D3B7800881B784C00CD
-:10557000BC706DA0B468A5C05A789468D678DE78FF
-:105580009868D278DA78B4C1D671037030007F0D94
-:105590007800CE3A00727800CE3A3B7800181B783B
-:1055A0004A0084A20F007900D23A613B103BDC3AFA
-:1055B0003F34DA3A613BDA3ADA3A7810B2291C68B9
-:1055C000ECD04000E33A08608DC00A60206985C1D4
-:1055D00022690068066005A0C000EC3A026008601D
-:1055E000D4C00A601C6884A00E00C000003B84B2D6
-:1055F00000034000FC3A0920C0957800053B0920D3
-:10560000D0967800053B3070BA684071CC7008A124
-:10561000042102680A2D5E71DCD6C000103BFCC676
-:10562000B66E7800613BB66E84A66000C0001A3B7F
-:1056300084A6FF7FB6687800613BDCD6C000283BBB
-:1056400084A6FF7FB6689468A6689868AA687810F0
-:10565000D6457800613BACD64000343B06A07810BC
-:10566000D64508241025AA69A66A7800443B082478
-:10567000102500271B80C8003B3B008084A03F0012
-:1056800008A191A20000AA69A66A7810D645FCD6A6
-:105690004000613B84A6FF7FB66810250824ACD685
-:1056A000C000593B00271B80C800543B008084A0E9
-:1056B0003F0008A191A20000986B002102A3B268EC
-:1056C000946B002203A3AE68007086A03000C00077
-:1056D0000C2A03700200BC706DA0BC684270B870E8
-:1056E00065A0C0685A70002D4E7080AD09004670EC
-:1056F0007C0086A50088C000833B03700000186012
-:1057000001801A60086084A0EFFB0A6078001141F4
-:105710004770000082A2060050008D3B7810B2292D
-:1057200000237900903B933BA53BB13B00227900DD
-:10573000963B9C3B11419E3B9C3BEB3B403C781095
-:10574000B229807A94A2000F7810CA3C78000741F1
-:105750007810C23B7900A93B1141AF3BAF3BEB3B1B
-:10576000AF3B11417810B2297810C23B7900B53BAC
-:10577000BD3BBB3BBB3BBD3BBB3BBD3B7810B229FC
-:1057800078102B411B7878007C00007086A0020006
-:10579000C000D33B7810363E7800CD3B7810D6451C
-:1057A000086084A0EFFB0A607800D83B007086A0F8
-:1057B00003004000CB3B0370050084B200034000AF
-:1057C000E23B0120E0967800E43B0120129768203C
-:1057D0004E7080AD0900467000227C00007086A0EB
-:1057E0000200C000FD3BD470B5C0D670002CBA706A
-:1057F000002DBE707800023C7810D6457800023C3F
-:10580000007086A003004000F93B03700100807A1D
-:1058100094A2000F9B781800A87C84A41F0015A2F6
-:105820006920C09584B20003C000163CFDC2692007
-:10583000D096042D082D5E716DA04000233C1468A5
-:1058400006A24000253C00687800173C7810CA3C4E
-:10585000B46E5A7E206984A1000C4000F43C647050
-:1058600086A00600C000373C747006A2C000373C1A
-:1058700066707E701B680500ADC1D4C122697810C6
-:1058800020417800F43C007286A20200C000523C25
-:10589000D470B5C0D670002CBA70002DBE707800E0
-:1058A000563C7810D6457800563C86A2030040004E
-:1058B0004E3C03700100807A94A2000F9B78180080
-:1058C000A87C84A41F0015A284B20003C000663C1B
-:1058D000FDC2A879A8798CA1FF001821CC7068A11D
-:1058E000042D082D5E716DA040007A3C146806A25C
-:1058F0004000A33C006878006E3C0370050084B251
-:1059000000034000843C0120E0967800863C0120A2
-:10591000129768204E707E15A920320003200000E7
-:105920000080F0008B3C7F1584B200034000983C5F
-:10593000FCC27800993CFDC2166A80AD0900467031
-:10594000B76800072368000827680300B46E206961
-:1059500084A1000C4000F43CDCD04000BF3C6470EB
-:1059600086A00400C000BB3C747006A2C000BB3C13
-:10597000787006A3C000BB3C66707E70781027412B
-:105980007800F43C1B680500ADC1D4C122697810D1
-:1059900020417F7000007800F43C0370050084B261
-:1059A00000034000D43C0120E0967800D63C012062
-:1059B000129768204E707E15A92032000320000047
-:1059C0000080F000DB3C7F1584B200034000E83C1F
-:1059D000FCC27800E93CFDC2166A80AD0900467041
-:1059E000B768000723680008276803007C00ECC63E
-:1059F000ACA660004000463D986B946CAC69B06802
-:105A000005A1C000213DD27BDA7BD67CDE7C86A559
-:105A1000600040004B3DF4D6C0000C3DEDC6B4A67E
-:105A2000FFB75A7E092079009CD64000193D092015
-:105A300078001920000020231A79ECD64000563D4A
-:105A400078103F497800563DB0681AA3002123A47E
-:105A5000002405A340004D3DD27BDA7BD67CDE7C62
-:105A6000B068F4D6C000323DEDC6F4C65A7E1120AF
-:105A700079009CD640003E3D11207800192000009E
-:105A800020231A7AECD64000563D781077497800EA
-:105A9000563D19200000202378004D3DB4A6FFB7E5
-:105AA0005A7E092079009CD64000553D0920780097
-:105AB0001A79C0685A70002D4E70C4686020D47185
-:105AC0000120014F0420C4D0C000AB3DD8702DA0F0
-:105AD0004000843DBCD140009E3D807A94A2000FDE
-:105AE000DC7006A24000753DE07804A5C000AB3D27
-:105AF000DA70BCC1D6717800AB3D312001002C8535
-:105B00004800833D3386108278007C3D7C00E07D38
-:105B100094A500FF4000913D112008002F857810CA
-:105B20007A3D37867800933D78107A3D17828078E9
-:105B300084A0000F06A24000AB3DDE72DA7678004A
-:105B4000AB3D807A94A2000FDC7036A240009B3DF2
-:105B5000E07834A540009B3DBDC1D671B4D1C000F2
-:105B6000082A002305A44000082AA47086A001008A
-:105B7000C000522A7C00206005A04000C63D018084
-:105B80002260086085A008000A600F7000012C7078
-:105B900026607C0006A07810D645007086A0020022
-:105BA0004000D43D647086A00500C000DE3D2B6837
-:105BB0000000176800001B680100236840001F6890
-:105BC0000001007084A00F007900E33D0C2AF33D32
-:105BD000ED3D153EFD3D0C2AEB3DEB3D7810B22925
-:105BE0007810203E7810193E7800F93D7810203E5C
-:105BF0005C706020006802607810732078000C2AC6
-:105C0000647067700000837000007900043E113EEC
-:105C1000113E0C3E0C3E0C3E113E0C3E113ED47724
-:105C2000DDC7D67779007E2F6770000078000C2AD8
-:105C30001B68000078001137006805A0C0001E3EF8
-:105C4000026006607C001064FF844000323E092040
-:105C5000024F042101800A2021841264C000323ED8
-:105C60002120044F0424A5C022200860A4C00A609B
-:105C70007C00186005A040003C3E01801A607C005A
-:105C80007810D3431B68180078007D3E7810D3430A
-:105C90001B68190078007D3E7810D3431B681A00FA
-:105CA00078007D3E7810D3431B68030078007D3E6A
-:105CB000747778104E4278718CA1FF00103294A254
-:105CC00000034000643EE8A1C0947800663EE8A16D
-:105CD000D095042D082D682005A0C0006F3E7E7071
-:105CE00078000C2A1468747206A24000773E00689F
-:105CF0007800673E00680A201B6805007F7000007E
-:105D00007810203E206884D0C000853E7810193E6F
-:105D10007810363E1F68000023682000781073203A
-:105D200078000C2A82A20300C0000741A87DACA520
-:105D3000FF005A7EA87EB4A6FF002069BDC122697B
-:105D4000C4D14000EA3EC4C12269B4A6FF004000AD
-:105D5000D73E82A60C004800AE3E4000AE3E312049
-:105D60000C00002586A00A004000B53E2B852B853F
-:105D70007810E0414000BD3E7810BC3F7800E03E26
-:105D800078109B417E0C6029046084A0F5FF0660BA
-:105D90007810F23F7F0C2069C5C12269587E95C6F4
-:105DA0005A7ED4D6C000D43E1B7864007C001B7899
-:105DB00078007C007E0C6029046084A0F5FF0660FA
-:105DC0007810F23F7F0C587ED4D6C000E73E1B7897
-:105DD00067007C001B7879007C007E0C5870602086
-:105DE0000061E4D14000333F0862178294A2FF00B3
-:105DF00082A20C004800FD3E4000FD3E11200C0038
-:105E0000002602A2C800023F3022086294A2FF00CE
-:105E10000120054F0420E4D0C000173FEC78E4D007
-:105E20004000173F82A20A00C8001D3F11200A004F
-:105E300078001D3F82A20C00C8001D3F11200C00FD
-:105E4000002202A5C800223F282278109F41002589
-:105E500086A00A0040002B3F2B852B857810E0415F
-:105E60004000333F7810BC3F7800373F78109B41AB
-:105E70007810F23F587895C05A787F0C1B787800DC
-:105E80007C007E0C60290060E4D0C000583FB4D094
-:105E9000C000523F106084A00F00C000523F046158
-:105EA0008CA1F5FF06617F0C7C00112032001920C7
-:105EB00000007800833FA068CCD0C000523F086249
-:105EC00094A2FF000120054F0420E4D0C000713FE0
-:105ED000EC78E4D04000713F82A20B00C800713F13
-:105EE00011200A007800773F82A20C00C800773F9B
-:105EF00011200C0008631F839CA3FF0082A30C00E9
-:105F00004800833F4000833F19200C00AB7801001C
-:105F1000AB780300AB780100AA7AAA7BC0A8050081
-:105F20002068C5C02268D470B4D040009F3FB4C080
-:105F3000D670B87065A0086084A0EFFB0A60186096
-:105F400001801A607F0C7C007E0C602904618CA1AA
-:105F5000F5FF066111203200192000007800AD3FE6
-:105F6000AB780100AB780300AB780100AA7AAA7B7A
-:105F7000C0A805002068C5C022687F0C7C007E0C8C
-:105F80005871602118208CA020004000C53FACC093
-:105F9000082084A0F0FF35A6867E18609A78AE7E31
-:105FA0001266A47884A0F0FF8CA10F0005A1F4C0B4
-:105FB0009CA320004000DB3F85A00040FCC0B4D083
-:105FC000C000E03FFDC0A67816608A78B4A60F0036
-:105FD00037860482048084A0FF0005A60E6004605A
-:105FE00084A0F5FF06607F0C7C007E0C587060205A
-:105FF00018609A78A47884A0F0FFA678126084785C
-:1060000084A0F0FF86780C6084A0FF000E607F0CF7
-:106010007C0082A20200C0000741A87A2069BDC1AD
-:106020002269CCD140004140CCC1226994A2FF003A
-:1060300082A20200C8000741781094407810F23F15
-:1060400080A901000C2078104A4278103E3FFF885A
-:10605000400037409B7860000028AA78587E95C69B
-:106060005A7ED4D6C00034401B7864007C001B7874
-:1060700078007C00587ED4D6C0003E401B78670074
-:106080007C001B7879007C0082A20200C800494095
-:1060900084A2010040005240587188A100000C21E8
-:1060A000ECD1C00052401120000078107C417810E3
-:1060B00094407810F23F587895C05A781B78780051
-:1060C0007C007E0C7E026029006011200100ECD073
-:1060D000C0007540BCD0C00073401460B4D0C00094
-:1060E0007340A4C1066106A0780091401120000011
-:1060F000AB780100AB780200AB780300AA7AC0A8A5
-:106100000400D470B4D040008D40B4C0D670B870D4
-:1061100065A0086084A0EFFB0A60186001801A6027
-:10612000206885A0000222687F027F0C7C007E0C24
-:1061300058706020FF8240009C4011204000186091
-:1061400080A002009A78A47884A0BFFF05A2FCC0BA
-:10615000B4D0C000A940FDC0A67816608A7804605B
-:10616000A4C006607F0C7C007E00007086A0030047
-:106170004000BA407F007800BD407F0078000441B5
-:10618000ACD640000441887884A04000400004411F
-:10619000B87B84A33F001B83C800CC40008005A0CF
-:1061A0004000E1401B83C800D54001804000014110
-:1061B000F4D64000E140B8781B80C800DD40008084
-:1061C00084A03F00C0000141F4C65A7ED879DC7A31
-:1061D0000120010008A1C800EC4091A20000D27982
-:1061E000DA79D67ADE7A7810444A1B78760084B25F
-:1061F00000034000FC40012000007800FE40012028
-:1062000001007810CE487C001B7876007C001B785B
-:1062100079007C0078102F411B7878007C00781082
-:1062200018411B7878007C00276802007810204114
-:106230001B7878007C0001200500780031410120A6
-:106240000C00780031412068D5C02268012006008A
-:106250007800314101200D00780031410120090012
-:1062600078003141012007009B787E00AA789DC606
-:106270005A7ED470B4D040004741B4C0D6707E0C72
-:10628000B87065A0086084A0EFFB0A601860018008
-:106290001A607F0C7C007E073F87BCA70F003B87FE
-:1062A0003B8703877E018CB2000340005841E0A089
-:1062B000C05378005A41E0A040547F01B8A72000A5
-:1062C0009A7FA47984A10F0040006A4184A1F0FF65
-:1062D000A678126004609DC00660388738879A7F70
-:1062E000A47984A1400040007A4184A1BFFFFDC091
-:1062F000A67816600460A5C006607F077C009B78C6
-:106300001000AB780100AB780200AB780300AA7AEA
-:106310009B786000AB780400D470B4D040009A4100
-:10632000B4C0D6707E0CB87065A0086084A0EFFB86
-:106330000A60186001801A607F0C7C003120000028
-:10634000292032009B781000AB780100AB78030065
-:10635000AB780100AA7DAA7E9B786000AB7805002F
-:10636000D470B4D04000BE41B4C0D6707E0CB870BA
-:1063700065A0086084A0EFFB0A60186001801A60C5
-:106380007F0C7C007E15078084A0FF0003800380C3
-:1063900080A020009A78A4798CA1F0FF21203342BC
-:1063A00019201100A9200E0011203200042484A01D
-:1063B000F0FF06A14000DE412084002310A2F0007F
-:1063C000D3417F157C007E150120054F0420E4D0C9
-:1063D000C000114221204142A920090011202800BB
-:1063E00082A5190040002742480027422084A99531
-:1063F0001120320082A53200400027424800274287
-:106400002084A99519200A0011206400002202A509
-:1064100040002742480027422084002310A2F000B9
-:1064200003427F15780025422120334219201100B4
-:10643000A9200E0011203200002202A540002742B0
-:10644000480027422084002310A2F00019427F1543
-:1064500006A07C007F1582A56400C8003042087841
-:1064600085A070000A78042405A07C00091202307F
-:106470000232034203440454045605660568067854
-:10648000067A070C070C070EE1100A330558055A67
-:10649000066A066C077C077E000E9B78100046A0FB
-:1064A0007C0084A7000F0B8084A71F00038003805B
-:1064B0000380038005A1FCD740005F42E0A0C074C8
-:1064C00078006142E0A0C0547C007E0E7E0F84D034
-:1064D00040006F42792000010920804F7120804FD9
-:1064E00078007F420920404F7120404F0120044F27
-:1064F0000420ECD040007D427920000178007F42EA
-:106500007920000291200080042184A00F007900EE
-:1065100086429042904290429042904290428E42F7
-:106520008E427810B229B469F5C18CA19FFFB6697B
-:1065300005A04000DF42587884A09FFF85A000603E
-:106540005A78287886A01418C000DF424B780400DF
-:10655000487884A00400C000A5424B780800487821
-:1065600084A00800C000AC423078BCD0C000DF423C
-:106570007E000120044F0420ECD07F004000C14287
-:1065800084B200037800C34284B200044000C942D0
-:106590001800DF427800CB422800DF42E47984A172
-:1065A00030004000DF42EC7884A003004000DF426E
-:1065B0001C68ACD0C000DD42781069437800DF422F
-:1065C0001B78F9007F0F7F0E7C007E0C0120014FAD
-:1065D0000420ACD0C0005B431468078084A00F0087
-:1065E0000380038003808CB200034000F842E0A0E7
-:1065F000C0537800FA42E0A04054046084A00A002E
-:10660000C0005B43086194A100FF40005B438CA184
-:10661000FF0001200A0006A14000264301200C00D3
-:1066200006A140002A430120120006A140002E438B
-:106630000120140006A1400032430120190006A1E8
-:10664000400036430120320006A140003A43780062
-:106650003E4309200C0078004043092012007800D6
-:1066600040430920140078004043092019007800B5
-:106670004043092020007800404309203F00780073
-:10668000404311200000002105A20A60046085A09B
-:10669000020006606120004F0460BCD040005B43F4
-:1066A0001468FCD0C0005643EA606120404F780077
-:1066B0005943EE606120804F1F600F807F0C7C008B
-:1066C0001B7879007C001B7878007C001B786700C1
-:1066D0007C001B7864007C000920194F0C2186A1E6
-:1066E000000040007B4386A1010040007E431F70F4
-:1066F0000B00677001001B7847007C001B78F000DE
-:106700007C001F700A007C000920194F0C2186A113
-:1067100000004000964386A10100400093431F7093
-:106720000B00677001001B7847007C001F700A0097
-:106730007C001B78EF007C001B78F9007C001B7844
-:10674000F8007C001B78C9007C001B78C8007C0026
-:106750001868FCD04000AB431B681D006770010047
-:106760001B7847007C00307884A0C000C000D24372
-:1067700008788CC00A780500050005000500EC7853
-:1067800084A02100C000CF430120054F0420E4D0A5
-:10679000C000CD43047884A01FFF85A0E0000678E8
-:1067A00006A07C0008788DC00A787C0008788DC02F
-:1067B0000A787C00307884A04000C000D7430120D4
-:1067C000044F0420ECD04000E64384B2000378007C
-:1067D000E84384B200044000EE439800F24378009E
-:1067E000F043A800F243AC787C00087884A0FDFF59
-:1067F0000A780500050005000500EC7884A021005A
-:10680000400015447E000120044F0420ECD07F009E
-:1068100040000B4484B2000378000D4484B20004AD
-:106820004000134498000F4478001544A800134416
-:10683000AC787E00087885A002000A787F007C0092
-:1068400084A70100C000B93784A7700040002D4420
-:106850007E0C602D682F78102629782D682C7F0CEF
-:1068600084A7080040003A444B780800EC7884A0E4
-:1068700003004000B93778005D4384A7040040005E
-:106880006944B87884A00140400069444B7808000E
-:10689000EC7884A003004000B937E47884A00700B6
-:1068A00086A00100C0006944C07885A60048302059
-:1068B0005A7E1B78F9007C004B7808001868FCD0E1
-:1068C000400066441B681500F4D6400066441B680F
-:1068D0000700781069437C001B680300587884A087
-:1068E000003F1E682F680000336800004B780800E6
-:1068F000EC7884A003004000AF307E000120044FFC
-:106900000420ECD07F004000864484B2000378006D
-:10691000884484B2000440008E441800082A78009D
-:1069200090442800082A78000C41146B078384A047
-:106930000F00038003800380FCD34000A04480A0AC
-:1069400040547800A24480A0C053602048205A7070
-:10695000602A7C00200020000000200000002000B1
-:1069600000002000000020000000200000002000A7
-:106970000000200000002000000020000000200097
-:106980000000200000002000000020000000200087
-:106990000000200000002000620009001400140024
-:1069A0004898140014001499FD98140014008000F5
-:1069B000FF0000010204082080F818000AA2140059
-:1069C0000B300CA21400002513000025100010004D
-:1069D0001000100010001000100010001000100037
-:1069E000100010001000100000A2063802715F8035
-:1069F00081943988C420640856A80830C1281B9D9A
-:106A000001A20C30472861816A840080A484561852
-:106A10003A8808A8E228CB9CF3A8640844A80C3064
-:106A200001A80830E128CB9C21201DA805A20C87D5
-:106A3000DED8A064E06DC06FA463806C120205A272
-:106A40003D8842792080A1A42B8814183B88DF80E0
-:106A5000A1942770F28537A732A503F07685778653
-:106A600016A83E8814A8012012A804A2C064E06DF4
-:106A7000A067C06F42792080A1A41418DF80A19480
-:106A80003B8823707685778602A861783E886B20E4
-:106A9000C1281B9D44200321A2208120C3A807A256
-:106AA00004090EA209A803A20080A48572189A877F
-:106AB0003C88E21F01F608A26E856F8661711400A2
-:106AC00004070830CB9C140002A20080A485093082
-:106AD000A884E21944F86E853F88E608F5A861F8B5
-:106AE000EAA801F8140081F81600B285F08032950A
-:106AF000A2FAE21D1400328521F21400E21DA884DE
-:106B0000E0D6E61F1400083000804A281110FCA8C7
-:106B10000830339D008000A002281110FDA8399D87
-:106B2000BDA80830339D3B281110FDA809A20271B1
-:106B30005F80819417000C3009A20080A485E21DBB
-:106B400009A2C1DA1400100201A81400E0263A8755
-:106B5000A3FAF219E026F21814000BA214000DA2F9
-:106B600006381002259D040706A265687E812A84E6
-:106B7000C11D2388160042600880FAA80080A48402
-:106B800060812A8421F00830A884D6114270DD206B
-:106B90001100D420228816004479218420A032A537
-:106BA000A184160044792184DFA03295A1841600C7
-:106BB00000007E12D47084A00046048090200472ED
-:106BC00008709CC005A2C00002460C72FF82400003
-:106BD000ED45FF8AC0000246007284D2C000024622
-:106BE0000478CCD04000F3457810CC4A23700000E4
-:106BF00027700000007084D04000FD45077004003D
-:106C0000037008007F1200207C00007084A0030045
-:106C100002709CC684D040005B4608710500087075
-:106C200006A1C0000A4684A1030040008C4684A14E
-:106C3000E001C0008C46F4D1C0000A4684A10030B7
-:106C400086A0001040000A460120054F0420E4D031
-:106C500040003746112080010C71118240004546EA
-:106C60000870F4D0C0000A460C7006A140002A4605
-:106C700078002746112080010C71118240004546A2
-:106C80000870F4D0C0000A460C7006A140003A46D5
-:106C90000770120008710500087006A1C000474681
-:106CA00084A1030040008C4694D140004746F4D1B3
-:106CB00040008C460770020078000A460871FCD13B
-:106CC000400066467810ED47FF8A4000DC457800BA
-:106CD0005B460C708CA0FF0340009146047084D08A
-:106CE00040008346147005A0C0007F4610701073EA
-:106CF00006A3C0007346002305A04000834602A1FE
-:106D0000C8005B460770100078008C46FF8A400080
-:106D100091467810F249C000864640005B467810E4
-:106D200038477F1200207C00047208719CC10381E7
-:106D3000C800A04607700200780091460370080062
-:106D40007F1200207C0005A2C0008C46237000004A
-:106D500027700000037008007E000120014F04200E
-:106D6000CCD04000B2467810CC4A7F007F12002081
-:106D70007C002864FF844000E246702C0470BCA0B4
-:106D80000F00B8A7F2463C27FB87C000D04648005A
-:106D9000C8467810B2299C6075A04000E246780091
-:106DA000BB463920E746042768AE086830A60C6861
-:106DB00029A521844000E2463887042705A0C000A9
-:106DC000D1469C7075A0C000BB467C000000050049
-:106DD00009000D001100150019001D00000003003E
-:106DE00009000F0015001B0000000000E746E44604
-:106DF0000000000000800000E7460000EF46EC467F
-:106E00000000000000000000EF460000EA46EA46ED
-:106E10000000000000800000EA460000F046F04656
-:106E20000000000000000000F0467920004F7120B3
-:106E3000100007700A00077002000370010010784C
-:106E4000ECD0400026470920010071202000780086
-:106E50002A47092002007120500007700A000770BD
-:106E600002000370000009814000374771202000B4
-:106E700078002A477C0004700480C800C14708716C
-:106E8000087006A1C0003C4784A1E00140004947CA
-:106E9000781030487800E947077012001920000088
-:106EA0000871087006A1C0004D4784A1E0014000B0
-:106EB0005A47781030487800E9471078ECD0400005
-:106EC00074470120FD04042086A00300C000784719
-:106ED00084A1004040007C4782A30300C8007C4797
-:106EE00084A1040040004D47188378004D47147872
-:106EF000ECD0C0007C4784A10040C0004D479CA15D
-:106F00000C3086A304204000994786A30800400067
-:106F1000A447047084D0C00095470871087006A18A
-:106F2000C0008A4784A1030040009547780030489C
-:106F300086A30C20C0004D47007204824800A4477D
-:106F40000C7384A3FF034000A4477810B229087192
-:106F5000087006A1C000A44784A1E0014000B14729
-:106F6000781030487800E94707701200007084D02C
-:106F7000C000C1471073147005A34000C1470C71D5
-:106F800084A1FF03C00038470871087006A1C00043
-:106F9000C14784A1E0014000CE4778103048780016
-:106FA000E947077012000770080004709CD0C00009
-:106FB000D2470871087006A1C000D64784A1E0013D
-:106FC0004000E347781030487800E9470770120026
-:106FD000087103814800D647037008007C000871DF
-:106FE00084A1E001C0003048087184A1E001C00024
-:106FF000304884A107007900FA4704481448024841
-:10700000144802487248024870487810B229047047
-:1070100084A010008DC00670FF8AC0000F48492070
-:1070200000007C007810F249C0000F487C0004701A
-:1070300084A010008DC00670047084D0C000284861
-:107040000871087006A1C0001D4884A1030040001B
-:10705000284878003048FF8A40002F487810F249CD
-:10706000C0002B487C00077012000871E000334814
-:1070700091200060E0003748912000600770120006
-:107080000770080004709CD0C0003F4807701200D1
-:107090000871FCD1C000434803700000007005A0D7
-:1070A000C0005748047005A0C00057480C7005A0E8
-:1070B0004000594878003B484920000084B2000154
-:1070C000400063480120000078006548012001006D
-:1070D000781062421B680200512000007C0078108A
-:1070E000B2297810B2297810B948107214710C7056
-:1070F0009CA0FF03002800A311A289A10000781022
-:10710000B9480427582C60AC0863002222A30C6302
-:1071100000211BA3002405A340009548C800954802
-:10712000128410820A8389A10000602B78007C48B9
-:10713000602B078A7E0004609CD04000A048BAA75C
-:10714000EC467800A248BAA7E4467F003DA7002C91
-:1071500086688A6F926C8E6B0871087006A1C000F9
-:10716000A94884A1E0014000B44878103048077075
-:107170001200781038477C00508A3987042704A011
-:10718000C000CD48006064A0C000C448602D046009
-:1071900084A00F0080A002473C20FB874010B2294A
-:1071A0007C007E127E0DD47084A000460480902066
-:1071B0007F0D8468602088688C6B906C5780D4AA9F
-:1071C000FF0084A0FF007E00046884A008007F0008
-:1071D0004000EB48B8A0EC467800ED48B8A0E44683
-:1071E00084B200014000F448207E7800F548247EF7
-:1071F000B5A60C001C68B4D04000FC4885C600242D
-:1072000005A340002549582C0427046160AC0060A8
-:1072100000A41A70046001A31E709CD1400015499F
-:10722000106081A000002270146081A00000267010
-:107230000862002402A212700C62002303A21670DE
-:10724000027607700100602B78101C4A78002749ED
-:107250007810F249C00025497F1200207C007E1280
-:107260007E0DD47084A00046048090207F0D0770AE
-:107270000400047094D0C0003649037008007F12E7
-:1072800000207C007E127E0DD47084A00046048015
-:107290007E0090207F007F0D207E84B20001C00020
-:1072A0004F49247EB5A60C001C68ACD0C0005A49DA
-:1072B00085C6037000000770040028685020602D08
-:1072C0000460BCA00F00B8A7F2463C27FB87C000B3
-:1072D000704948006A497810B2299C6865A040004E
-:1072E000744978005D497810F249C00070497F12F6
-:1072F00000207C007E127E007E017E0DD47084A072
-:10730000004604807E0090207F00207E84B2000131
-:10731000C0008849247E7F0D7F037F04B5A60C0042
-:107320001C68B4D04000964985C603700000077001
-:10733000040049207749286855A07E0D4000EE4999
-:10734000702D602E0470BCA00F00B8A7F2463C2739
-:10735000FB87C000B3494800AC497810B2299C7043
-:1073600075A060204000EE4978009F49042768AE70
-:10737000086822A40C681BA34800CC49518AC000AD
-:10738000C0497810B2293887042705A0C000B44945
-:107390009C7075A060204000EE4978009F492284CF
-:1073A00020841A8399A300000869002422A10C6993
-:1073B00000231BA1C800DB497810B22984B2000168
-:1073C0004000E9490120044F0420ECD0C000E94905
-:1073D000712050007800EB49712020007F0D78006B
-:1073E000FC487F0D7F1200207C0008707E0084A086
-:1073F000E0017F004000FB4906A07C0084A0030060
-:1074000086A00300C000024A7C00042778AC007804
-:107410001A7004781E70087812700C781670046068
-:107420009CD04000144A107822701478267002769E
-:10743000047084A0100085C006707920004F388742
-:10744000518A4000404A042705A0C000324A9C608F
-:1074500005A04000414A6020046084A00F0080A085
-:10746000F2463C20FB874010B22908707E0084A0C1
-:10747000E0017F0040003C4A06A07800414A84A019
-:10748000030086A003007C00512000007C007E12D7
-:107490007E007E0DD47084A00046048090207F0D75
-:1074A0007F08087184A10300C000594A286805A01C
-:1074B0004000694A780002460871FCD14000614AE8
-:1074C0007810ED4778004E4A077010000871FCD123
-:1074D0004000634A7810ED47087086A00800C0009D
-:1074E0004E4A007005A0C0004E4A037000004920BB
-:1074F00000007E000478CCD040007D4A7810CC4A51
-:107500007F007F1200207C007E127E147E137E1589
-:107510007E0C7E0DD47084A00046048090207F0DE8
-:107520004920814A80AD1100A02084B200014000B2
-:10753000A44A0120044F0420ECD04000A04A992026
-:1075400031007800A64A992032007800A64A992096
-:1075500031000C7084A0FF032A68077008000770D0
-:107560000200037001004000B54A0080AC80A553C2
-:107570000C7084A0FF034000C14A0770040004702F
-:1075800084A00400C000BC4A7F0C492000000370A6
-:1075900000007F157F137F147F1200207C00146889
-:1075A000FCD04000114B007084D04000114B247E71
-:1075B000B5A6040007700400047084A00400C00095
-:1075C000D94A18717E011C717E0120717E012471DF
-:1075D0007E010EA01A711F70FF3F22712671137079
-:1075E000040016710276077001000120FFFF0920D8
-:1075F00031000A200A200871087006A1C000F84A6C
-:10760000FCD14000F84A7F0226727F0222727F027C
-:107610001E727F021A7207700200087086A00800AE
-:107620004000114B780030480770040003700000E0
-:107630007C009120008091200060AC7805A0C00003
-:107640002D4B7479D07006A1C0002D4B1C7805A07D
-:1076500040002D4B1F78000068002D4B912080408A
-:10766000307801803278C000B54B347832781078A9
-:10767000ECD0C000AE4B6120C0746920804FFDC7C4
-:10768000D06805A04000474B0180D268C000474B3E
-:107690007810834D006884A00F0040005C4B86A0EA
-:1076A000010040005C4B44680DA040005C4B04218D
-:1076B00005A040005C4B01800A204000F64C146895
-:1076C00005A04000814B01801668C000814BA7686F
-:1076D00001007E0FFCD7C000764B1078ECD0400044
-:1076E000724B792000017800784B792000027800F5
-:1076F000784B792000017810D3437F0F646805A090
-:107700004000814B78106F26806805A040008E4BAA
-:1077100001808268C0008E4B67680000D468DDC0BD
-:10772000D668D468FCD04000AB4BFCC0D668A9201A
-:107730000002346005A04000A74B01803660D46889
-:10774000FDC0D668C000A74B106005A04000A74B45
-:1077500078106F26E0AC1000F000964BFCD740008C
-:10776000B54B6120C0546920404FFCC778003D4BA9
-:107770007810F14B387801803A78C000D74B3C78CC
-:107780003A786120C0546920404FFCC70C6805A0BE
-:107790004000C94B78105B4CFCD7C000D74B107829
-:1077A000ECD0C000D74B6120C0746920804FFDC76A
-:1077B0007800C34B1478E4D0C000DB4B1078CCD0F9
-:1077C0004000EE4BACD0C000E74BA4D04000EE4BE5
-:1077D000ADC01278912001806800ED4B7810DC2359
-:1077E0007C00912001807C00407801804278C000BC
-:1077F0005A4C447842786920404FFCC71078792071
-:107800000002ECD04000034C79200001D86805A0AC
-:1078100040000F4CE07D04A5C0000F4CDA68D4682E
-:10782000BCC0D6687920004F106805A0C000174C76
-:107830000120010101801268FCD74000204C80A08B
-:10784000D0957800224C80A0C0944020042065A0F0
-:1078500040004C4C246005A04000484C018026604C
-:10786000C000484C006805A040003B4C4C6806AC8A
-:10787000C0003B4C7810F64C78004C4C646805A076
-:107880004000434C276001007800484C7810A94C18
-:1078900004287800244C0060402C7800244CFCD74D
-:1078A000C0005A4C1078ECD0C0005A4C6920804F70
-:1078B000FDC7792000017800034C7C0009200000FE
-:1078C000A920000208609CD04000954C246005A0CF
-:1078D00040006B4C018026607800934C08609CC08F
-:1078E00084D0C000734CACD040008D4C0A60046062
-:1078F00005A04000954C7E0D7E0C7E016820106036
-:10790000018012607810193E002D682C60207810DC
-:10791000A21E781064207F017F0C7F0D7800954CAB
-:10792000BDC00A608DA101007800954C8DA10001B9
-:10793000E0AC1000F0005F4C84A101004000A44CBA
-:107940008CA1FEFF0E6978106F267800A54C0E6999
-:107950007C00C000A54C6C78002C7E681467766FA4
-:10796000176000002B6000001B600600B46084A05C
-:10797000003F1E60206084A0FF0085A060002260A0
-:107980000060422078102B1E186805A04000C74CEC
-:1079900001801A680868A4C00A681068087909811B
-:1079A0000A790180D000D34C7810B2291268C00047
-:1079B000D94C1079A5C112792F6000003360000006
-:1079C000682C78107320FCD7C000E74C6920404F2A
-:1079D0007800E94C6920804F106984A100010120E2
-:1079E0000600C000F34C7A69012004007810632679
-:1079F0007C007E0D4C696021FCD7C000084D1078DA
-:107A0000ECD04000044D6920000178000A4D692047
-:107A1000000278000A4D69200001781026291B60B9
-:107A20000600586884A0003F1E60206084A0FF000C
-:107A300085A0480022602F600000336000000868C5
-:107A400084A0FDFF0A683068B4D040003C4D4B680C
-:107A50000400A9201400486894D040002E4DF00086
-:107A6000284D4B680900A9201400486884D04000C4
-:107A7000384DF000324DA920FA00F0003A4D1B6855
-:107A800047007F0D676807007C007920004F781061
-:107A9000764D78105C4D7810694D09200200692000
-:107AA000804F0F680000136800001768000009810C
-:107AB00040005B4D6920404F78004E4D7C001078AF
-:107AC000ECD04000644D1920CC007800664D1920A0
-:107AD0007B003A7B3E7B7C001478E4D0C000714D83
-:107AE000192040007800734D19202600427B467B08
-:107AF0007C001478E4D0C0007E4D1920943F7800BB
-:107B0000804D19202426327B367B7C00506A85A26A
-:107B100000004000AF4D5469C06B00A37E0C64218F
-:107B20000463FF83C0009B4D118240009F4D08817C
-:107B30001AA148008C4DC06978008C4DD3680A00AA
-:107B40007F0C7C005069C06A64222B6000002F60AB
-:107B500000000860B5C00A6010820981C000A14D14
-:107B600052697F0C7C00E000B04D91200060E00085
-:107B7000B44D91200060EC70DCD0C000C14DD4D079
-:107B80004000EA4D7800ED4D08201078ECD0400020
-:107B9000D44DC4D1C0000E4E1478C5C016781078EC
-:107BA000F5C01278ECD040000A4E7800064E8EAE3A
-:107BB00000014000E14D1478F5C0C5C01678D4D05E
-:107BC000C0000A4E7800064E1478FDC0C5C0167875
-:107BD000D4D0C0000A4E7800064EE4D040000C4ECF
-:107BE000E000ED4D9120006009200C00E000F34D15
-:107BF000912000600981C000F34DE47084A0FF0172
-:107C000086A0FF01C000044EEC707800C14D7810D2
-:107C10000F4E04788CD040000C4E1F680C00A070F2
-:107C2000A2707C001079ECD14000194E1478C4C0C9
-:107C3000F4C1127978002B4E8EAE00014000254E23
-:107C40001478F4C0FCD0C0002B4EC4C078002B4E7A
-:107C50001478FCC0F4D0C0002B4EC4C016787C0051
-:027C6000E3142B
-:00000001FF
-/*****************************************************************************
- * QLOGIC LINUX SOFTWARE
- *
- * QLogic ISP1280/ device driver for Linux 2.2.x and 2.4.x
- * Copyright (C) 2001 Qlogic Corporation (www.qlogic.com)
- *
- *****************************************************************************/
-
-/************************************************************************
- * --- ISP1240/1080/1280 Initiator Firmware --- *
- * 32 LUN Support *
- ************************************************************************/
-
-/*
- * Firmware Version 8.15.11 (10:20 Jan 02, 2002)
- */
diff --git a/firmware/qlogic/isp1000.bin.ihex b/firmware/qlogic/isp1000.bin.ihex
deleted file mode 100644
index a5c242cda220..000000000000
--- a/firmware/qlogic/isp1000.bin.ihex
+++ /dev/null
@@ -1,1158 +0,0 @@
-:1000000078003010000019240000FF124320504FE8
-:10001000525947495448312039392C313931323914
-:10002000312C39392C333931343951204F4C49472F
-:1000300020434F435052524F54414F49004E4920A4
-:1000400050533031303046207269776D72612065CF
-:100050005620726569736E6F30202E313133202047
-:10006000B9201212C120080071201000C3700400D2
-:10007000C920FF3F8920C810C7705349CB7020505A
-:10008000CF702020D3700100003FD67031203000A7
-:100090007920003563780000A02F09202703112064
-:1000A0000000A9204000A4420981C00051109B78A3
-:1000B00001010B7802000F7802004F78B80B69201D
-:1000C0004035A8006A101B683C0009201313B821B2
-:1000D00078006C101B682800076807000B68FA009E
-:1000E0000F680800136805001F68000023680600F9
-:1000F00017680800276800006920003611202000DA
-:10010000092010000B68190C0F681900036800DD46
-:1001100007681A001A6A002DE8A0080090A20400DF
-:100120000981C000821069208036A92080003768CC
-:1001300000000B684000176800011F686400E8AD0C
-:1001400010007000A510780097107810381A7810F9
-:100150003A2F781081167810BA33003285A00D003E
-:100160009020C37000009000BC10C07086A00200F8
-:10017000C000BC107810BA117810EC107810171865
-:100180007810A81978107D3278107D177800BC108F
-:10019000D010D210C31BC31B982F982FC31BC31B97
-:1001A0007800D0107800D2107800D4107800D610E3
-:1001B00008700C80C800E710077002008CA00C00CB
-:1001C000C000E81004800480C800E7107A087A09AB
-:1001D000C37002407800BD11147805A0C000F4106F
-:1001E0001000301178002F1109206835042105A076
-:1001F000C0002F11147886A00100C00001117810F2
-:1002000036151778000009206F35042165A04000DD
-:100210001D1109206A351C2108811421088104213F
-:1002200010A299A3000009201C008360030178102C
-:100230001116C00029117810781609206F350B208F
-:1002400000000920693504210B20000005A04000B2
-:100250002D11012005407800BC117800BA117C00F6
-:1002600061200000186084A00100400038117C006B
-:10027000C3700000C7700000CB700000CF7000009A
-:10028000C070BCA0C0FFC0008811382079004811A0
-:10029000BA110512D311051256125612CA11901531
-:1002A0006112C611D711D911DB11DD119515C611D7
-:1002B0006712831244158A15DF116B148D14A7146D
-:1002C000D0142414321446145A14EF12C6119F127B
-:1002D000A612AB12B012B612BB12C012C512CA12CD
-:1002E000CE12E312C611C611C611C611C611FB12F9
-:1002F00004131313391343134A1370137F138E130C
-:10030000A0130914C611C611C611C611C6111914BD
-:10031000BCA0A0FFC000C611382084A01F00790037
-:100320009111C611C611C611C611C611C611C6114A
-:10033000C611C611C611C611C611C611C611C61105
-:10034000C611C611C611C611C611C611C611C611F5
-:10035000C611C611C611ED15F715FB150916C61104
-:10036000C611CA72C671012006407800BC11CE7356
-:10037000CA72C67101200040C270612000001B607B
-:10038000010091200050912080407C00C37001400A
-:100390007800BD1199204100A1204100A92005004D
-:1003A000A3537800BA11C470C37004007A007800B7
-:1003B000BA117800BA117800BA117800BA119120F8
-:1003C0000080C3700000C7705349CB702050CF70BD
-:1003D0002020D3700100003FD670792000001B78E8
-:1003E00001003120300059200010292057045120ED
-:1003F000700461207204B920FFFFC1200000912029
-:1004000000509120804078005504D071C872CC73A0
-:10041000C470A020982031203000FF814000BA1124
-:10042000077004001A731E72512012004920341202
-:100430004120BA110370020086A70100C0002612F5
-:100440004920421241204E12037003001770000031
-:100450000B811271C8002E12177001000770010085
-:1004600086A70100400042120C7084A07F00048027
-:100470000920200002A142094A09A820A026A6536B
-:100480007800D8100C7084A07F0040004212AC802D
-:10049000480042129826A5537800D8100C7084A00A
-:1004A0007F00AC809826A5537800BA11C471C8703B
-:1004B00014219EA70400C0005E120A20CA727800B0
-:1004C000B911C7700100CB701F007800BA11C47059
-:1004D000C872CC73D074C670CA72CE73D27405A0C1
-:1004E00040007D12018072787A7A7E7B767C9878E3
-:1004F00084A0FCFF9A7878008112987885A001008A
-:100500009A787800BA11C470C872CC73D474C6706B
-:10051000CA72CE73D67405A0400099120180867805
-:100520008E7A927B8A7C987884A0FFFC9A787800F7
-:100530009D12987885A000019A787800BA11092058
-:1005400059350C21112010047800B81109204135CB
-:100550000C217800B911092042350C217800B9111D
-:10056000612040350C6110627800B81109204535D2
-:100570000C217800B911092046350C217800B911F9
-:10058000092047350C217800B911092048350C2184
-:100590007800B91108790C7A7800B811C471078114
-:1005A00084A00F00038003800380E8A00036006A67
-:1005B000046884A008004000E012086B7800E11293
-:1005C0000C6B7800B711C4777810921691200080D8
-:1005D0001C6B146A9120018008277800B711C4773A
-:1005E00078109216912000800869186A106B91208B
-:1005F00001807800B711C47182A11000C800B21147
-:100600007810BC1A7800B711C47182A11000C8001C
-:10061000B2111120413504227E0012217810751A82
-:100620007F017800B911C47111203113A92008008D
-:10063000042206A1400023131082700021137800C9
-:1006400018137800B21192A231137E0211204235A4
-:10065000042212217F017E007810811A7F01780028
-:10066000B911E803FA00F401EE0264001900320047
-:100670004B00612040350C611062C4700E60C87080
-:1006800012607800B811612040351461C4701660A2
-:100690007800B911C471112004001920121286A12A
-:1006A000280040006313112005001920121286A1B2
-:1006B000320040006313112006001920131386A195
-:1006C0003C00C000B2116120403518607E001A6104
-:1006D000B8237810921A7810BA337F017800B911D4
-:1006E000C47184A1CFFFC000B2111120473504228C
-:1006F00012217E007810B41A7F017800B911C471FC
-:1007000082A11000C800B2111120483504227E00D9
-:1007100012217810A31A7F017800B911C471C87230
-:1007200084A1FDFFC000B11184A2FDFFC000B11182
-:10073000002108790A7800220C7A0E787800B81126
-:10074000C471078184A00F00038003800380E8A0A8
-:10075000003619200000C87200687E0026A2400002
-:10076000CF13026A84A400204000B8139DA3100098
-:1007700084A400104000BE139DA3080084A4004080
-:100780004000CF130F8184A200404000CB137810AB
-:10079000D61A7800CF137810C81A7800CF13CC720D
-:1007A000FF8240000114086806A240000114A4A2C0
-:1007B000FF0061204035186186A128004000E81341
-:1007C00086A132004000EE1386A13C004000F413E5
-:1007D00082A464004800FE137800F81382A450003D
-:1007E0004800FE137800F81382A443004800FE136B
-:1007F000C471C6717F02CA727800B3110A6A9DA3E0
-:100800000A00046805A306687F020C6BC4717800B7
-:10081000B711C4777810921691200080146A1C6B6F
-:1008200091200180C8701668CC701E680827780077
-:10083000B711C471C872CC7382A11000C800B21184
-:100840007810E41A7800B711C477781092169120C6
-:100850000080086A95A202000A6A91200180082798
-:100860007800B811C4777810921691200080086A39
-:1008700094A2F9FF0A6A046805A0400041147810A8
-:10088000191A9120018008277800B811C4777810D0
-:10089000921691200080086A95A204000A6A0468F2
-:1008A00005A0400055147810191A912001800827DE
-:1008B0007800B811C477412001004920050051207B
-:1008C00020009120008078109F1691200180082739
-:1008D000086A7800B811C477C872CC73C677CA7238
-:1008E000CE7378101817C0008914186805A040004E
-:1008F000831408277810F41AC00083141778FFFFB8
-:10090000912001807C009120018001200540780029
-:10091000BC11912001807800BA11C477C6774120BC
-:1009200021004920050051202000912000807810EE
-:100930009F1661204035A3600300B667A7600000E2
-:100940001778FFFF912001807810191A7C00C87772
-:10095000CA77C477C677BCA700FF912000806120CA
-:100960004035A3600200A7600000B6671778FFFF5C
-:100970007810191A9120018041202100492004009B
-:10098000512010009120008078109F16C8703668A2
-:10099000388784A70700C000C414912001807C0020
-:1009A000987884A00300C000F4143920000041208E
-:1009B000210049200400512008007810921691204F
-:1009C000008008680DA80A6991200180388784A7F3
-:1009D0000700C000DD14BCA700FF3F8738873F87B2
-:1009E00084A7000FC000DD14912000806920000161
-:1009F000306884A0400040001D154B680400A92009
-:100A00001400486884A0040040000A1570000A150C
-:100A1000780001154B680900A9201400486884A0DB
-:100A20000100400017157000171578000E15A92059
-:100A3000FA0070001D157800191579200035177817
-:100A4000010061204035A3600100A7600000C36081
-:100A50000F00987885A002009A78086884A0FDFFAE
-:100A60000A681B684600912001807C00987884A069
-:100A7000FDFF9A7884A00100C0004015781060172F
-:100A8000C471C6714A797C00C474C873CC72C674D0
-:100A9000CA73CE72792000350920400078106F1695
-:100AA0004000861578103F1640005A1578107816C9
-:100AB000780086151060912001801778FFFF0920CB
-:100AC00068350B20050008810B20000008810A23EF
-:100AD00008810A2208810A2408810A2008810B2043
-:100AE000000008810A2C2EA030257E0E7810132FCE
-:100AF0007F0E9265A2659666A666AB600000AF6049
-:100B00000000912001807810191A7C00C370054004
-:100B10007800BD11C471C770000006797800BA1161
-:100B2000C471C671682178009715692000100C699E
-:100B300016A0042D10A2688D0981C000991585A208
-:100B40000000C000A715C37000407800A915C3704D
-:100B50000340CA707800BD11C471C872CC73002103
-:100B600084A1FCFFC000C61100217900B715CE1585
-:100B7000E315E515E715C3700340CE71D272D67345
-:100B80007800CA15C3700040CF700000D370000019
-:100B9000D7700000C677CA717800BA113120E91504
-:100BA000242630861224042246A4C000BB1584A447
-:100BB000FFFFC000D0153120E9151082198384A3EE
-:100BC000FFFFC000D0157800C2157800C21578006C
-:100BD000C2155555AAAAFFFF00006079C671C471FD
-:100BE00082A10300C800B21162797800BA1160795D
-:100BF000C6717800BA115479C671C47156795879A2
-:100C0000CA71C8715A795C79CE71CC715E797800FD
-:100C1000BA115479C6715879CA715C79CE7178006D
-:100C2000BA110C7084A07F0040001D1607700400EC
-:100C3000047084A00400C000181617700000127120
-:100C40001A721E7308810C81A981988CA120300032
-:100C50008060A220A6530C7885A000000270077067
-:100C6000010008710481C80031160770020084A1D8
-:100C70000C000C7184A10003037000007C000C7058
-:100C800084A07F0040004B1607700400047084A00D
-:100C90000400C00046161770000012711A721E730D
-:100CA000992030000881AC810C7885A00100027089
-:100CB0000770010008700C80C8005A160770020007
-:100CC0008CA00C00C0006C160C7184A10003C00045
-:100CD0006C16A02CA55306A0037000007C00507871
-:100CE00065A040007716042C5278632000007C0039
-:100CF0007E0F7920003550786220002C52787F0FCB
-:100D00007C0011200040527A192010041983400001
-:100D10008F1680A22F001220102078008616132034
-:100D200000007C0084A7000F0C8084A707000380CC
-:100D300003800380038005A1E8A080367C00781042
-:100D4000921600292A68002A2E68086884A0EFFFFE
-:100D50000DA80A6909204F350C21046805A0400040
-:100D6000BC1616A1C000BC166020006006687E019B
-:100D70000B2000007800BF16092000007E010468E7
-:100D800065A04000CE16006006687810DF16781067
-:100D9000CB17106801801268C000BF167F0102697E
-:100DA00006697C0065A04000DE1698609B6000002C
-:100DB00008207810781600217800D2167C00036095
-:100DC0000301A9201C0080AC0400A0200120000029
-:100DD000A440286816602C681E607C007E0E71207E
-:100DE000403540708CA08000C000FC1688A0803583
-:100DF0000A2D0080427006A07F0E7C007E0E7120BE
-:100E00004035092080354072218211824800161732
-:100E10000421088106ADC000051719811E21088133
-:100E200018831182C8000E17427406A07F0E7C0042
-:100E3000781092169120008004681E7865A040000A
-:100E40005F1778002917002C1E78006065A040000D
-:100E50005F170C6006A3C0002317086006A2C0003D
-:100E60002317282C01204F35042006AC40005F17C3
-:100E7000046806ACC000461700606020066805A044
-:100E8000C0004617036800007800501700641C7803
-:100E90006020026486A40000C0005017002C026885
-:100EA00060257810DF16176005001F60200078109D
-:100EB000CB171068018012680120FFFF05A07C009D
-:100EC0003920000041202100492004005120080061
-:100ED0009120008078109F16388784A70700C000F3
-:100EE0006A17BCA700FF3F8738873F8784A7000F9A
-:100EF000C0006A17912001807C006120000018600A
-:100F000084A00100C0008A17AC78AF78000005A06B
-:100F1000C0008B177C008CA0F0FF40009117781068
-:100F2000A51B79009317A317A517AB17AF17A31726
-:100F3000B317A317A317A317A317B917BD17A317A1
-:100F4000A317A317A3177810A51B7810601701200B
-:100F500001807800C317012003807800C3170120A7
-:100F600004807800C317781060170120068078008D
-:100F7000C31701200C807800C31778106017012078
-:100F80000D807800C317C270612000001B60010053
-:100F9000912080407C00042C8260082C632000009B
-:100FA000647800806678687805A06A794000DB176D
-:100FB000022C7800DC176E797C007E0C61200035F5
-:100FC00083680301082D6B20000064600080666068
-:100FD000686005A06A614000F017022D7800F117E3
-:100FE0006E617F0C7C0078100418400003187E0CA2
-:100FF000986065A04000FE177810D2167F0C9B60A9
-:101000000000781078167C006C7865A040001618F7
-:1010100091200080647801806678042C6E7805A0A9
-:10102000C00014186A780080912001807C009878B4
-:1010300005A0C00065187479D07005000500D07255
-:1010400006A2C0001C18002206A1C00033180478B4
-:1010500005A0400065180778000068006518912019
-:1010600080407800651878106F16400065187C7A0B
-:10107000787B07810480048010A299A300000920D6
-:10108000400078103F1640005C1878107816807881
-:101090000080827886A00200C00065189120008040
-:1010A000AF78020083780000987885A003009A78D2
-:1010B00091200180780065188378000078109219DB
-:1010C000006084A00700790066187C006E187D1807
-:1010D0009D186E18AF186E186E186E18392000041F
-:1010E000A87805A7AA78046005A706607810ED180F
-:1010F0001860A67878107A197C00A87884A000017E
-:101100004000841878006E18AB78000000600780FB
-:1011100084A0FF009E7801809B60000040009A1828
-:101120007810ED1840009A18A87885A00001AA78D8
-:1011300078009C18781011197C00A8788CA0000EFB
-:10114000C000A61884A00001C000A81878006E187E
-:101150007810ED18C000AE18781011197C00A8782E
-:1011600084A000014000B61878006E18AB7800002B
-:101170001067A9200100146084A0FF0005A04000B2
-:10118000D318BCA700FFA92008008EA001004000D2
-:10119000D31839200000A92080008EA00200400052
-:1011A000D3187800EA1878109216002D912000804C
-:1011B0002B6800002F680000086884A0DEFF0A6822
-:1011C000002D80A010006820912001807000EA1896
-:1011D0007800D618781078167C00A0786DA0C00032
-:1011E000F818002CA278A6789B60000078000419FB
-:1011F000002C9A689B600000A278002D0260A47801
-:1012000006ADC000041902609C7801809E78C00081
-:101210001019A87884A00000AA78A478602006A0FD
-:101220007C002EA03025186184A160009E614000E2
-:101230001D197E0E7810132F7F0E9265A26596669B
-:10124000A666AB600000AF600000106778109216D1
-:1012500091200080086884A0010040003F1991207F
-:1012600001807810DF16912000807810CB17912034
-:101270000180A3780000A778000078007919206029
-:1012800096A00100C000461900802260106A146810
-:101290009120018002A248005519400055193920BB
-:1012A000000278107A1978007919082C91200080B2
-:1012B000006865A040005D1902610269C000611903
-:1012C00006696021036000001068008012689120A8
-:1012D000018008688CA040004000731986A040007F
-:1012E0000A687810EE167810191AA7780000A3780B
-:1012F00000007C00046005A7066091200080781043
-:10130000CB1791200180A47865A040008D199860CA
-:10131000A6789B60000078007D19A3780000A7786C
-:1013200000007C007079747800800AA1C8009919C7
-:1013300006A07678D270047805A04000A719018035
-:101340000678C000A7196800A719912080407C008A
-:101350006800C219292000006C7865A04000BD1902
-:101360007810C3194000BD197E057810D9197F0582
-:10137000C000BD1928857800AC19FF854000C2194E
-:10138000912080407C00847B8879D4720500050020
-:10139000D47006A2C000C519002202A1C000D31952
-:1013A000002305A07C004800D71902A37C0002801E
-:1013B0007C0078100B1A09201C00246005A0400056
-:1013C000E31909204000781011164000FC199478A8
-:1013D0000080967886A00200C0000A1A9120008042
-:1013E000AF78030097780000987885A000039A787A
-:1013F0009120018078000A1A977800007810F3177E
-:101400008479887800800AA1C800071A06A08A7823
-:10141000D67006A07C00078104800480907A8C7BC3
-:1014200010A299A300007C0009206835912000805B
-:101430000A207E0F7920000109204035912000808C
-:10144000042186A00000C000341A092012350421AE
-:1014500005A0C000341A307884A0C000C000341A3F
-:101460001800341A1B784400912001807F0F7C0003
-:101470007E1291200023712040357920000119202F
-:10148000D82DA1202B01042305A04000501A9A78E2
-:101490001883AC2318839823A65318337800431A73
-:1014A0009B782000A9201000AF780000AF782002C0
-:1014B00070005C1A7800541A0370000078105B1BEF
-:1014C000047084A00F0085A0806206780F780092D7
-:1014D0004378D800537880000B78380047707F3508
-:1014E000437000007F1200207C008CA10F001120AF
-:1014F0000101042284A0F0FF05A1122078105B1BDB
-:101500007C0011200101A92009000B8170008A1ABA
-:101510007800851A8CA1000E042284A0FFF105A199
-:1015200012207C0009200101A9200500138270000F
-:101530009B1A7800961A94A2E000042184A01FFF51
-:1015400005A20A207C0011200101A9200C000B81BA
-:101550007000AC1A7800A71A8CA100F0042284A0B5
-:10156000FF0F05A112207C0011200201042284A09B
-:10157000CFFF05A112207C000381038080A0200002
-:101580007E0C612000019A60AC62AC637F0C7C0031
-:101590000381038080A022007E0C612000019A60FC
-:1015A000A46084A0DFFFAE607F0C7C000381038019
-:1015B00080A022007E0C612000019A60A46085A0BA
-:1015C0002000AE607F0C7C000381038080A020009F
-:1015D0007E0C612000019A60A460AE621020A460BD
-:1015E000AE6318207F0C7C00912000807E0C7E0E64
-:1015F000186805A04000391B6120803F7810411B0E
-:101600004000271BA92000006120803E7E0C78103E
-:10161000411B4000131B7F0C608C7000111B780075
-:10162000061B7800391B7F0082A0803E7120403568
-:10163000BA701C6085A000081E60B671A76000002B
-:1016400001200400A2707810141A7800351B712054
-:1016500040351C6085A000081E60B671A7600000C0
-:1016600001200600A2707810141A012000007800F2
-:101670003B1B012001009120018005A07F0E7F0C03
-:101680007C00042C05A04000581B60200C6006A3C1
-:10169000C000551B086006A2C000551B106006A1C3
-:1016A000C000551B06A078005A1B00607800421B42
-:1016B00085A001007C00112041350C228CA10F0077
-:1016C00011203B01042284A0000140006A1B21205C
-:1016D00080FF22217C007E0EE4688CA02000400068
-:1016E000A31B84A00600C000A31B1060078084A079
-:1016F0000F00038003800380F0A00036047084A0F4
-:101700000A00C000A31B087194A100FF4000A31BA6
-:101710008CA1FF000120190006A14000961B0120AA
-:10172000320006A140009A1B78009E1B0920200071
-:101730007800A01B09203F007800A01B11200000AA
-:10174000002105A20A707F0E7C006800A51B7E00A8
-:1017500071200000187084A00100C000AA1B7F0047
-:10176000082E71201000CA707F00C670C3700280FE
-:10177000712000001B700100912080407F007020CC
-:101780007F007800C11B7E107E007E129120002316
-:101790003C7F587E307C387D94A53F0084A4004077
-:1017A0004000D81B84A77C00C0009C2D7810A51B8E
-:1017B0009CA40F0082A304005000E01B7810A51B1E
-:1017C000078584A00F007900E51BEA1F9A20C0203E
-:1017D000E6226B25B325EA256526BF2644270B1C88
-:1017E000F51B531E1D1F4A25F51B7810A51B18005D
-:1017F000C81B7F12912001807F007F107C00037046
-:1018000000003F700000307005A04000091C3370DC
-:1018100000001800C81B5C7005A0C000B61CA070BA
-:1018200084A007007900141CD61C1C1C2A1C4B1C0D
-:10183000711C9D1C9B1C1C1C087884A0FDFF0A7851
-:101840000920460078101224C000281C03700400F0
-:101850007800F71B78105E2DC000491CB47007801B
-:101860009B787E00AA789B781000AB780C009B7860
-:101870006000AB7801005B7804000920F700781065
-:101880001024C000491C03700400C3700F003370A3
-:1018900070357800F71B78105E2DC0006F1CB47196
-:1018A00007819B787E00AA789B7810008CA10700A6
-:1018B0008DA1C000AA79AB7806009B786000AB7858
-:1018C00002005B7804000920F70078101024C000A3
-:1018D0006F1C03700400C3700F0033707035780004
-:1018E000F71B78105E2DC000991CB47107819B789E
-:1018F0007E00AA789B7810008CA107008DA1C00003
-:10190000AA79AB782000B871AA79AB780D009B78E2
-:101910006000AB7804005B7804000920F7007810C1
-:101920001024C000991C03700400C3700F003370B2
-:1019300070357800F71B78004B1C78105E2DC000C6
-:10194000F71BBC7068209B781000106F7810A12CDA
-:10195000502C106884A0070085A08000AA78186E1B
-:1019600041200100012004007800DE1D78105E2D6A
-:10197000C000F71B9B7810005C706820106F781017
-:10198000A12C502C086085A010000A60106884A06B
-:10199000070085A08000AA783120200041200100A6
-:1019A0007810C52D012003007800C91D1800C81B40
-:1019B000407485A400004000F01C80A080353020D9
-:1019C000447108812AA14800E71C09208035642160
-:1019D0000465FF85C000FD1C2184C000E11C467128
-:1019E000037000003F7000007800F71B4076B0A63F
-:1019F0008035447100267800EC1C46716825582516
-:101A00003E75502C346085A00000C000FA1C0867A9
-:101A1000367784A73F0140002F1D84A72100C00016
-:101A2000FA1C84A7020040001C1D84A7040040008B
-:101A3000FA1CBCA7FBFF0A6784A70800C000FA1CB9
-:101A400084A71000C000FA1C84A7000140002F1DCD
-:101A5000186005A0C000FA1CBCA7FFFE0A671F683B
-:101A60000000186E84A60E00186140003F1D1C6027
-:101A700002A14800421D4000421D7800F61CFF8173
-:101A8000C000F61C84A78000C000481D0C702260B6
-:101A9000BCA77FFF0A67106B078384A00F00038039
-:101AA0000380038080A00036602048204A700060D8
-:101AB0004E7004605270602A1800C81B9B7810009A
-:101AC00046A078105E2DC000F71B106B9CA307008A
-:101AD0009DA3C0004C7084A000804000731D84A6AC
-:101AE00001004000751D9CA3BFFF84A610004000AC
-:101AF0007B1D9DA32000AA7B408884A60E00C00009
-:101B0000861DBDA710000A677800C71D4C718CA107
-:101B100000084000022911202100048004804800B0
-:101B20009D1D11202200048048009D1D11202000D1
-:101B3000048048009D1D4000C71DAA7A4088781087
-:101B4000772D106A0C6108818CA1FF00E0A1803E16
-:101B5000642CFF8C4000BE1D106006A2C000A81DB2
-:101B6000B4600180B660C000A31D7E0C602A0860CE
-:101B700085A000010A607F0C7800D61C78105E2DCD
-:101B8000C000F71B602A0E61AA7940882E710120DF
-:101B900001007E00507184A118004000DD1D84A169
-:101BA00010004000D71D7810CC2AC000DD1D84A194
-:101BB00008004000DD1D7810E6297F0002708CA629
-:101BC0006000FF884000E61D8DA104005A79B269CB
-:101BD0009B7860000028AA789B786100146885A033
-:101BE00000801668AA787E157E137E14A1202C0131
-:101BF0009B7800000080AC8080AD0A009820A6533E
-:101C00007F147F137F15106807809B787E00AA7869
-:101C1000906DD67DDE7D946ED27EDA7E307884A0A3
-:101C2000C000C000151E98001D1E086084A0EFFFB4
-:101C30000A607810772D7800FF1B007284A20700DD
-:101C400086A00100C0002A1E1B7849007810772D5D
-:101C500078003B1EB06A95A200205A7A1B78490092
-:101C60007810772D0072002505A640003B1E84A247
-:101C700007007910491E80AD0800327084A2070069
-:101C800086A00100C000471E186000801A6078001E
-:101C9000F71B511EF030F030DF30F030511E511E76
-:101CA000511E7810A51B087884A0FDFF0A787E0FCE
-:101CB0007920003598787F0F84A001004000791EBC
-:101CC000A07086A00100C000681EA2707800011FED
-:101CD000A07086A00500C000771EBC706820176841
-:101CE0000400136800001C6885A008001E68A3702B
-:101CF00000007E1511200400A07186A101004000A3
-:101D00009B1E86A10700C0008B1E09202B350B20CF
-:101D1000050078009B1E0920133504210920123587
-:101D20000A2009202B350B200100A3700000A770AA
-:101D3000010078009D1EA37000007810C72EA92016
-:101D40001000392000007810A62BB8A70001700001
-:101D5000AB1E7800A31E007020207900AF1EDD1E90
-:101D6000C61EC61EB91EDD1EDD1EB71EB71E7810AC
-:101D7000A51B21205735042405A04000C61E06AD32
-:101D8000C000C61E006822207800D61E1C6884A0F1
-:101D90000100C000D21E106F7810A12C7810D92835
-:101DA0007800D61E5470602000680260166A1C68B5
-:101DB00085A008001E687810DD172120803F78106C
-:101DC000071F212057357810071FA9200000212068
-:101DD000803E7810071F20847000F01E7800E91EF6
-:101DE000A9208000612080361860106102A1126075
-:101DF0001B600000E0AC10007000001F7800F41EB3
-:101E00007F15037000003F7000007800F71B7E0410
-:101E1000042405A04000191F682000687E00166A8F
-:101E20001C6885A008001E687810DD177F00780008
-:101E3000091F7F04232000007C0082A203005000C1
-:101E4000231F7810A51B00237900261F291F9C1F24
-:101E5000AA1F82A2020040002F1F7810A51BA070AD
-:101E6000A3700000C37000007900361F3E1F3E1FA4
-:101E7000401F741F08293E1F741F3E1F7810A51BAA
-:101E8000B4777810A62BB477BCA7000F7810A12CDC
-:101E9000186005A040006B1F2120803F092004002E
-:101EA000112010007810C51F40006B1F7E15A9205F
-:101EB00000002120803E7E04092004001120100033
-:101EC0007810C51F7F0440006A1F208470006A1FBD
-:101ED00078005B1F7F15388784A70700C000461F66
-:101EE0007800FF1B7800FF1BB4777810A12C1860D6
-:101EF00005A040009A1F2120803F092005001120E5
-:101F000020007810C51F40009A1F7E15A9200000F0
-:101F10002120803E7E040920050011202000781039
-:101F2000C51F7F044000991F20847000991F78000E
-:101F30008A1F7F157800FF1B002279009F1FA21FB8
-:101F4000A41FA41F7810A51BA3700000A770010098
-:101F50007800F71B00227900AD1FB21FA41FB01F2D
-:101F60007810A51B78101F24007086A00100C00007
-:101F7000AF287810EF28086084A0EFFF0A6078107F
-:101F8000A2284000AF287800D61C042405A04000F9
-:101F9000E61F6820042D7E00106806A74000D41FAD
-:101FA000202D7F007800C61F7F00222016691C6844
-:101FB00005A21E687810DD171060018012600860AD
-:101FC00084A0EFFF0A607810EF287C0085A0010054
-:101FD0007800E51F00237900ED1FF21FF01F352068
-:101FE0007810A51BE47805A0D00015201800152056
-:101FF000082084A03000C00001201B784900780030
-:10200000F71BEC7884A003004000FD1F002184A092
-:10201000070079000B20232029201D201320582D94
-:10202000582D13202F207810A51B007005A040000C
-:10203000FF1B012003007800FA227810892B1B78FF
-:1020400055007800F71B7810892B1B78DC0078008E
-:10205000F71B7810892B1B78E3007800F71B7810AA
-:10206000892B1B789D007800F71B84A50F00C0000A
-:102070005F2078101F24007079003E2046205320F6
-:102080004620AF284820AF28462046207810A51BC0
-:10209000A071A370000086A10400C0005120780048
-:1020A00008297800AF287810EF28086084A0EFFF97
-:1020B0000A607810A2284000AF287800D61CE47887
-:1020C00005A0D000152018001520082084A030009D
-:1020D000C0006E201B7849007800F71BEC7884A0C4
-:1020E000030040006A20002184A1070079007820C5
-:1020F00088208E2082208020582D582D8020502D21
-:102100007810A51B7810912B1B7855007800F71BD1
-:102110007810912B1B78DC007800F71B7810912B3E
-:102120001B78E3007800F71B7810912B1B789D003B
-:102130007800F71B002379009D20A220A020A42076
-:102140007810A51B7800652617680800A3780000A2
-:10215000E47984A1300040006526EC7884A0030077
-:102160004000652684A107007900B620232029209D
-:102170001D20302D582D582DBE20502D7810A51B18
-:1021800082A205005000C6207810A51B002379000C
-:10219000C920CC20CE22DA2200227900CF20D42000
-:1021A000D620E920D420B3227810A51B9B781800F4
-:1021B000A87884A0FF0082A0200048006A2B8AA093
-:1021C0000400C8006A2B7900E5206A2B6A2B6A2B71
-:1021D0000C2B9B781800A87984A180004000FE2079
-:1021E00084A118004000FA2078006A2B007005A036
-:1021F000C000F420112003007800522784A1FF00C2
-:102200008AA01000C8006A2B790006211821162127
-:102210002E213021C2216A2B6A2BC4216A2B6A2B02
-:10222000AF22AF226A2B6A2B6A2BB1227810A51B32
-:1022300084A60010400025210120000300800080BA
-:102240003A781B789A007800F71B146884A0008005
-:1022500040002C21176803007800302D7810A51B52
-:102260001C691E6984A60018C0004A211C6884A04D
-:102270000100C0005221146886A00800C00042215D
-:102280001768000084A600044000BE211B78580097
-:102290007800F71B84A60010400052211B785800DC
-:1022A0007800F71B84A660004000BA2184A60008CD
-:1022B0004000BA2184A60080C000602178007A2105
-:1022C000B4A6FF7F5A7EB26E9B787400AC7AAC796C
-:1022D000AC781B80C8006D21008084A03F0008A15D
-:1022E00091A20000946B002102A3AE68906B0022C3
-:1022F00003A3AA6884A6004040008221B4A6FFBFC1
-:102300005A7EB26E007086A00300C0008F21781044
-:102310003A2F7810DF301B7867007800F71B06A093
-:1023200078109431AC6AA869946C906B002205A176
-:1023300040009E21002222A400211BA3D27CD67B38
-:10234000002305A4C000AC21B5A600405A7EB26EA1
-:102350001B7867007800F71B1B786700002215A127
-:10236000C000B6217810F0307800F71B78101D31CE
-:102370007800F71B1B786A007800F71B1B78580061
-:102380007800F71B7810A51B780021221C6984A116
-:1023900000014000DC218CA1FFFE1E697E0C48700C
-:1023A0006020006084A0FFEF0260046084A0F5FF5D
-:1023B00006607F0C7800102284A1000240001022E9
-:1023C0008CA1FFFD1E697E0C48706020006084A017
-:1023D000FFDF0260046084A0EFFF06600820482C45
-:1023E0007F0C84A108004000102278109D2C7810EA
-:1023F000E629FF88400010229B7860000028AA7818
-:10240000587EB5A604005A7E84A60004C0000C22A3
-:102410001B7855007800F71B1B7869007800F71BC4
-:10242000587E84A60004C00019221B78580078004A
-:10243000F71B1B786A007800F71B7800702B780078
-:10244000702B1920000090798CA1070040001F22FA
-:102450009B781000A87894A0FF0086A20100C0001D
-:1024600044220023A87C00A4182002A140003C22A2
-:1024700048003C2278003E227800C621A824A87A91
-:10248000F0003E2278002A2284A2F00086A02000DC
-:10249000C000A02218831883002302A14000542208
-:1024A0004800542278009D2286A2230040001F226B
-:1024B000186884A0F1FF1A68587E84A6F1FF85A0F1
-:1024C000100030205A7E086085A010000A607E0C43
-:1024D0004870602004600820482C7F0C84A1100004
-:1024E0004000782278109D2C7810CC2A7800872222
-:1024F0007E0C4870602004600820482C7F0C84A16A
-:1025000008004000102278109D2C7810E629FF88E2
-:10251000400010229B7860000028AA78B5A604002D
-:102520005A7E84A60004C00099221B7855007800CA
-:10253000F71B1B7869007800F71BA87A78002A221D
-:102540001883002302A14000A9224800A922780094
-:102550002A2284A28000C000762B7800702B78009D
-:10256000762B78006A2B9B781800A87884A0FF004F
-:102570008EA001004000BE227810A51BA87A94A26C
-:10258000FF00A87884A0FF008AA00400C8006A2B7E
-:102590007900CA226A2B39296A2B672A82A2000095
-:1025A000C000D4227810A51B7810892B1B786900F5
-:1025B0007800F71B82A20300C000E0227810A51B60
-:1025C0007810992B1B7869007800F71B82A2040011
-:1025D0005000EC227810A51B00237900EF22F22294
-:1025E000C923FA2386A203004000F8227810A51B15
-:1025F000012000003A70007084A0070079000023D9
-:1026000008230A230A2308253025D2240823082377
-:102610007810A51B84A60010C00012237810C72EC6
-:102620004000A32368788CA0FF0040005A2386A1B5
-:102630000800C00029237810EF28086084A0EFFF6D
-:102640000A607810A22840005A237810C72E78001C
-:10265000412386A12800C0005A237810C72E0860A5
-:1026600084A0EFFF0A60186005A0400041230180AC
-:102670001A6005A040004123018005A040004123CD
-:102680001E601C6884A001004000FF1B1C6884A021
-:10269000FEFF1E6854707E0C6020006802607F0C94
-:1026A0000460026805A0002DC00057230260066088
-:1026B0007800FF1B7E0178101F247F0184A600DFB5
-:1026C0001A6827680000106FFF814000A32386A1CD
-:1026D0000200C0009B2384A60008C000772384A6C4
-:1026E000600040007723D878DC7A2E682A6A178742
-:1026F00094A20F0013821382138290A2003690A23C
-:1027000000001C2284A30001C000882378008E23CF
-:102710001082042285A018001220118284A30004D4
-:1027200040009B239C6884A00001C0009B2378107C
-:1027300091247800FF1B86A118004000A32386A1E6
-:1027400014004000FF1B1269146884A00080400040
-:10275000AB23387016688CA600DF1A697810E02861
-:102760007810EF28C000B823086084A0EFFF0A604B
-:102770001C6884A00100C000C1237810D92878000B
-:10278000C52354706020006802607810DD1778005F
-:10279000FF1B82A204004800CF237810A51B002253
-:1027A0007900D223D623D823E523D8237810A51B7C
-:1027B000007086A005004000E1237810892B1B786B
-:1027C00069001B786A007800F71B90780780018009
-:1027D00084A0070080A018009A78A8798CA1FF0037
-:1027E00086A103004000F62378006A2B1B786A005C
-:1027F0007800F71B1C6885A004001E68FF82C000DB
-:1028000005247810892B78000C24118240000A24BA
-:102810007810A51B7810992B1B7869007800F71B9E
-:102820007810772D307884A0C000C0001C241800D8
-:102830001C241A7906A07C0085A001007C0084A6D7
-:102840006000C00029242F6800002B680000780079
-:10285000902484A60008C0003824B06884A00048F2
-:1028600035A684A60008C00038247810C72E7C0046
-:1028700084A6200040006224D0780380C80046244B
-:1028800006A078109431D4787810F93184A60040ED
-:10289000400050242F6800002B6800007800352489
-:1028A000B06884A0004835A684A60040C0004A2431
-:1028B000387005A0C0005C24D879DC7A2E692A6AB9
-:1028C0007800352484A6004040006C242F68000066
-:1028D0002B68000078003524B06884A0004835A635
-:1028E00084A60040C0006624387005A0C0007A2489
-:1028F0003B700700D879DC7AD078F380C800812457
-:10290000008084A03F0008A191A200002E692A6ADD
-:10291000002105A2C0008E2478003524781094315F
-:102920007C0084A3000240009924086085A0020076
-:102930000A6017680600286A2C693A6A3E692B68A3
-:1029400000032F6800003368002093680000976838
-:10295000200000707900AC24B424B624BF24B42431
-:10296000B424B424B424B4247810A51B1C6884A017
-:102970000100C000BF247810D9287800C524547005
-:10298000502C602000680260602A21205735042402
-:1029900005A04000CE2420207800C724222D6B20E3
-:1029A00000007C00B4777810A62BBCA7000F78102D
-:1029B000A12C186005A0400001257E0D0120903F4C
-:1029C00068207F0D2120803F092004001120100085
-:1029D0007810C51F400001257E15A9200000212088
-:1029E000803E7E0409200400112010007810C51FCD
-:1029F0007F04400000252084700000257800F12429
-:102A00007F15388784A70700C000D7247800FF1BF4
-:102A10007810E0287810EF28276800009B780E00D7
-:102A2000106F136802007810CA3184A600084000B5
-:102A30001D2518698DA100201A69146884A00080E2
-:102A40004000242517680000212057350068222007
-:102A5000386A3C692A6A2E697810DD177800FF1BF6
-:102A600078101F24276800009B780E00106F7810E4
-:102A70007C2D8CA0FF001269146884A000804000A7
-:102A80004325387016688CA600DF1A69A370000011
-:102A90007800FF1B06A07810C72E13680000176887
-:102AA00001008CA600DF1A69276800000070790019
-:102AB00059256125632563256525652565256125DE
-:102AC00061257810A51B7810EF28086084A0EFFF1F
-:102AD0000A607800BA28002379006E2571257325D5
-:102AE000B1257810A51B0070790076257E258025FC
-:102AF00080258B25802592257E257E257810A51B97
-:102B000084A60020C0008B25B5A600205A7E781030
-:102B1000F0307800302D146884A0008040009225A9
-:102B200017680700092018350C2186A10000400015
-:102B3000A72586A101004000AB2509202B350B20DD
-:102B40000B00A37001001B7846007800F71B1B7870
-:102B5000DD007800F71B09202B350B200A007800D8
-:102B6000F71B7810A51B00237900B625B925BB25D6
-:102B7000DE257810A51B00707900BE25C625C82566
-:102B8000C825D325C825DA25C625C6257810A51B56
-:102B900084A60020C000D325B5A600205A7E781058
-:102BA000F0307800302D146884A000804000DA25D1
-:102BB000176807001B78E4007800F71B1C6885A0E5
-:102BC00004001E68B5A600087810892B1B786900E0
-:102BD0007800F71B00237900ED25F025F225F42578
-:102BE0007810A51B7810A51B84A60004C00013262E
-:102BF0002B7809309B786000AB78000084A6FBFF3F
-:102C00005A78E47984A1200040000B26EC7884A057
-:102C10000300C0000F26012014007800FA2284A1CE
-:102C2000070079004B26907A94A207009B786000F9
-:102C3000A879FF81400049269B781000A87B84A3D7
-:102C40000100C0003A26A87BA87B86A30100C00033
-:102C50002D260920F7FF7800332686A30300C00045
-:102C60003A260920EFFF7E0C48706020046004A122
-:102C700006607F0C9B786000AB78000084A6FBFFA9
-:102C80005A782B7809301C698CA1FFFD8CA1FFFEBE
-:102C90001E697800302D2320292055265D265326D5
-:102CA00053265326302D7810A51B1C698CA1FFFDDF
-:102CB0008CA1FFFE1E697800382D1C698CA1FFFDD8
-:102CC0008CA1FFFE1E697800302DE47984A13000CC
-:102CD00040006F26EC7884A00300C00077261468BB
-:102CE00085A000801668012014007800FA2284A1D3
-:102CF000070079007B26302D302D8326302D582D6E
-:102D0000582D302D302D84A60004C000B4261C6838
-:102D100084A001004000382D8CA660208CA1FBFF10
-:102D20005A79B2699B786000AB7800009B786100AB
-:102D3000146885A000801668AA787E157E137E141C
-:102D4000A1202C019B7800000080AC8080AD0A009F
-:102D50009820A6537F147F137F15106807809B78F7
-:102D60007E00AA787800382D146884A00080400086
-:102D7000BB26176808001B78D8007800F71B0023D3
-:102D80007900C226C7264227C5267810A51B0070E9
-:102D900084A007007900CC26D426D626F226D42695
-:102DA000D426D224D426D4267810A51B1C698DA144
-:102DB00001001E690068066005A0C000E0260260F0
-:102DC000186884A00E004000EC261470B6682C71C0
-:102DD00088A1803E7800EE260920803F0421026809
-:102DE0000A2D5671B26E84A660004000402784A66A
-:102DF0000008C000042784A6FF7FB268906894682A
-:102E00007810C72E7800402784A62000400016279F
-:102E100006A078109431D0780380C8001227D478A7
-:102E20007810F931D879DC7A78001A277810AE2C2E
-:102E30007810943184A600804000402784A6FF7F4C
-:102E4000B2689B78740078107C2D102078107C2D4F
-:102E5000082084A62000C000382778107C2D1B8015
-:102E6000C8003327008084A03F0008A191A2000081
-:102E7000946B002102A3AE68906B002203A3AA68A2
-:102E80007800FF1B7800762B3370000082A20500CB
-:102E900050004C277810A51B002379004F2752279C
-:102EA0005C277F270022790055275A27762B5A273F
-:102EB000A827F9277810A51B007086A00100C00084
-:102EC00069277810EF287810C72E34700A607800D0
-:102ED0006E27007086A00300400063270370050082
-:102EE0000120903F68203E703270002279007827E0
-:102EF000762B7D27A8277D27762B7810A51B0070C1
-:102F000086A00100C0008C277810EF287810C72E0B
-:102F100034700A6078009127007086A0030040009A
-:102F20008627037005000120903F68203E703270B4
-:102F3000002279009B27A227A027A227A027A2274B
-:102F40007810A51B7810992B1B7869007800F71B67
-:102F5000007086A00100C000B5277810EF28781017
-:102F6000C72E34700A607800BA27007086A003006C
-:102F70004000AF2703700200807A94A2000F9B7874
-:102F80001800A87C84A4070015A26920803F042DA6
-:102F9000082D5671682005A04000D527106806A2AC
-:102FA0004000EE2700687800C82703700500012064
-:102FB000903F68203E7032707E15A9202F000320BC
-:102FC000000000807000E6277800DF277F15126A76
-:102FD000B36800071F68000823680300B06E5A7EBC
-:102FE0001C6884A0000C40004F287810912B7800BA
-:102FF0004F28007086A00100C00006287810EF2836
-:103000007810C72E34700A6078000B28007086A0F4
-:1030100003004000002803700200807A94A2000F91
-:103020009B781800A87C84A4070015A2A879A87929
-:103030008CA1FF00E8A1803E042D082D5671682068
-:1030400005A040002A28106806A240004328006816
-:1030500078001D28037005000120903F68203E7015
-:1030600032707E15A9202F00032000000080700020
-:103070003B28780034287F15126AB36800071F6860
-:10308000000823680300B06E5A7E1C6884A0000C00
-:1030900040004F2878108D2B587E78004F287E02F4
-:1030A000078284A00F0003800380038080A0003685
-:1030B00060204A7000604E700460527084A6600008
-:1030C00040008628946B906CA869AC6805A1C0008C
-:1030D0007428D27BDA7BD67CDE7CB4A6FFB75A7E1E
-:1030E0007810F03078008628AC681AA3002123A459
-:1030F000002405A340008628D27BDA7BD67CDE7CC8
-:10310000AC68B4A6FFBF5A7E78101D317F077810D7
-:10311000A12C09206A0084A60800400091280920FB
-:103120006900B5A600205A7E1A79002D3E700782EC
-:1031300084A00F0003800380038080A00036482015
-:103140007800F71B206005A04000AE2801802260B7
-:10315000086085A008000A60107026607C0006A048
-:103160007810C72E13680000176801001F68400020
-:103170001B680001007084A007007900BF28C728E1
-:10318000C928C928D528D128C728C728C728781012
-:10319000A51B7810E0287810D9287810DD17780062
-:1031A000FF1BA37000007800FF1B17680000780069
-:1031B0000825006805A0C000DE28026006607C00CB
-:1031C000106005A04000E9280180D000E9287810AF
-:1031D000A51B1260086084A0EFFF0A607C001860E5
-:1031E00005A04000F52801801A607C007810772D3A
-:1031F00017681800780026297810772D17681900AD
-:10320000780026297810772D17681A00780026296B
-:10321000B4777810A12CB8718CA1FF00E8A1803E92
-:10322000042D082D682005A0C00018297800FF1B78
-:103230001068B47206A240002029006878001129A5
-:1032400000680A2017680500BF7000007810E028A9
-:103250001C6884A00100C0002F297810D92878109C
-:10326000EF281B6800001F6820007810DD17780029
-:10327000FF1B82A20300C0006A2BA87DACA5FF0043
-:10328000A87EB4A6FF001C698DA180001E6984A1E0
-:103290000001400099298CA1FFFE1E69B4A6FF0021
-:1032A0004000832982A60F0048005A2940005A296D
-:1032B00031200F002B852B857810242C40006429A9
-:1032C0007810332A78008C297810DF2B7E0C602947
-:1032D000046084A0F5FF06607810572A7F0C1C69F3
-:1032E0008DA100011E69587EB5A604005A7E84A6F1
-:1032F0000004C0007F291B7855007800F71B1B785D
-:1033000069007800F71B7E0C6029046084A0F5FF3B
-:1033100006607810572A7F0C587E84A60004C000EF
-:1033200095291B7858007800F71B1B786A007800F5
-:10333000F71B7E0C4870602000618CA100104000DB
-:10334000D9290862178294A2FF0082A20F004800C8
-:10335000AD294000AD2911200F00002602A2C800AF
-:10336000B2293022086294A2FF00187086A02800BB
-:10337000C000C22982A21900C800C8291120190062
-:103380007800C82982A20C00C800C82911200C00AE
-:10339000002202A5C800CD2928227810E32B2B8516
-:1033A0002B857810242C4000D9297810332A7800F6
-:1033B000DD297810DF2B7810572A587885A0040073
-:1033C0005A787F0C1B7869007800F71B7E0C602907
-:1033D000006084A00010C000012A106084A00F00CB
-:1033E000C000FB298CA10200C000FB298CA1F5FFC5
-:1033F00006617F0C7C00112032001920000078004B
-:10340000232A086294A2FF00187086A02800C0003A
-:10341000112A82A21900C800172A11201900780069
-:10342000172A82A20C00C800172A11200C0008637A
-:103430001F839CA3FF0082A30F004800232A4000A3
-:10344000232A19200F00AB780100AB780300AB787A
-:103450000100AA7AAA7BC0A805001C6885A000010B
-:103460001E687F0C7C007E0C48716021082084A0BF
-:10347000F0FF35A6867E18609A78AE7E1266A47834
-:1034800084A0F8FF8CA1070005A1A67816608A78B1
-:10349000B4A60F0037860482048084A0FF0005A62E
-:1034A0000E60046084A0F5FF06607F0C7C007E0C3B
-:1034B0004870602018609A78A47884A0F0FFA678FD
-:1034C0001260847884A0F0FF86787F0C7C0082A252
-:1034D0000200C0006A2BA87A1C698DA180001E69B9
-:1034E00084A100024000AC2A8CA1FFFD1E6994A2B9
-:1034F000FF0082A20200C8006A2B7810F32A78101D
-:10350000572A80A901000C2078109D2C7810E629FC
-:10351000FF8840009F2A9B7860000028AA78587E88
-:10352000B5A604005A7E84A60004C0009B2A1B781E
-:1035300055007800F71B1B7869007800F71B587E50
-:1035400084A60004C000A82A1B7858007800F71B46
-:103550001B786A007800F71B82A20200C800B42A18
-:1035600084A201004000BE2A487188A100000C21FD
-:103570008CA10020C000BE2A112000007810D12BA1
-:103580007810F32A7810572A587885A004005A78C2
-:103590001B7869007800F71B7E0C7E0260290060B2
-:1035A0001120010084A00020C000E32A146084A040
-:1035B0004000C000E12A8CA1EFFF066106A0780060
-:1035C000F02A11200000AB780100AB780200AB7844
-:1035D0000300AA7AC0A804001C6885A000021E6827
-:1035E0007F027F0C7C007E0C48706020FF824000D0
-:1035F000FB2A11204000186080A002009A78A4786D
-:1036000084A0BFFF05A2A67816608A78046084A013
-:10361000EFFF06607F0C7C007E00007086A0030038
-:103620004000152B7F007800182B7F007800662B58
-:1036300084A620004000662B887884A040004000CB
-:10364000662BA87801804000252BB87B84A33F001F
-:103650001B83C8002C2B008005A040004D2B1B8332
-:10366000C800352B01804000622B06A078109431F1
-:10367000B4787810F9317800662B84A600404000B9
-:103680004D2BB8781B80C800462B008084A03F00DB
-:10369000C000622BB4A6FFBF5A7ED879DC7A012025
-:1036A000010008A1C800562B91A20000D279DA7956
-:1036B000D67ADE7A781094311B78670078105E3005
-:1036C0007800F71B1B7867007800F71B1B786A00EF
-:1036D0007800F71B78109D2B1B7869007800F71B8A
-:1036E0007810892B1B7869007800F71B236802008B
-:1036F0007810912B1C698DA120001E69146884A08C
-:1037000000804000852B176805001B786900780051
-:10371000F71B0120050078009F2B01200C0078008A
-:103720009F2B0120060078009F2B01200D007800C0
-:103730009F2B0120090078009F2B012007009B7818
-:103740007F00AA78B5A608005A7E7C007E073F87D6
-:10375000BCA70F003B873B870387E0A00036B8A7D4
-:1037600020009A7FA47984A10F004000BF2B84A180
-:10377000F0FFA6781260046085A008000660388714
-:1037800038879A7FA47984A140004000CF2B84A180
-:10379000BFFFA6781660046085A0100006607F0752
-:1037A0007C009B781000AB780100AB780200AB780E
-:1037B0000300AA7A9B786000AB7804007C0031207B
-:1037C0000000292032009B781000AB780100AB7814
-:1037D0000300AB780100AA7DAA7E9B786000AB78DD
-:1037E00005007C007E15078084A0FF000380038015
-:1037F00080A020009A78A4798CA1F0FF01204635A2
-:10380000042082A0280040000D2C2120842C1920A7
-:103810001400A9200C007800132C2120902C1920D2
-:103820001900A9200D0011206400042484A0F0FFD9
-:1038300006A14000222C2084002310A27000222C1C
-:103840007800152C7F157C007E151120463514223A
-:1038500082A232004800382C40003C2C2120762CDB
-:1038600019201100A9200E001120320078004C2CE4
-:1038700082A228004000442C2120842C192014000E
-:10388000A9200C0078004A2C2120902C1920190026
-:10389000A9200D0011206400002202A540005C2C2C
-:1038A00048005C2C2084002310A27000592C780062
-:1038B0004C2C7F1506A07C007F1582A56400C800F3
-:1038C000652C087885A070000A78EC7884A0000345
-:1038D0004000732C04249EA00112C000732C012010
-:1038E00001217800742C042405A07C000112023010
-:1038F0000232034203440454045605660568067800
-:10390000067A070A070C070E0232024202520262CE
-:103910000272056605760578057A057C057E057FC9
-:1039200002220232024202520454046404740476F5
-:103930000478047A047C047E047F9B78100046A0FF
-:103940007C0084A7000F0C8084A7070003800380FD
-:103950000380038005A1E0A080367C00D879DC7A62
-:10396000D0781B80C800B52C008084A03F0008A13F
-:1039700091A200007C007E0F7920000109204035D3
-:103980009120008004217900C52CF72CCF2CCF2C5E
-:10399000CF2CCF2CCF2CCD2CCD2C7810A51B4B7839
-:1039A0000400487884A00400C000D12C4B780800A3
-:1039B000487884A00800C000D82CB06885A00040DA
-:1039C000B268587885A000405A78307884A080008A
-:1039D000C000F72C1800F72C186884A02000C00045
-:1039E000F52C1B78DD007800F72C1B78E400912083
-:1039F00001807F0F7C007E0C1068078084A00F0080
-:103A0000038003800380E0A00036046084A00A00E5
-:103A1000C0002E2D086194A100FF40002E2D8CA126
-:103A2000FF000120190006A140001D2D01203200D9
-:103A300006A14000212D7800252D092020007800C6
-:103A4000272D09203F007800272D1120000000219C
-:103A500005A20A60046085A0020006607F0C7C005D
-:103A60001B786A007800F71B1B7869007800F71B49
-:103A70001B7858007800F71B1B7855007800F71B5F
-:103A80001B78DD007800F71B1B78DC007800F71B43
-:103A90001B78E4007800F71B1B78E3007800F71B25
-:103AA0001B789E007800F71B1B789D007800F71BA1
-:103AB000A37001001B7846007800F71B7E00307869
-:103AC00084A0C000C000752D087884A0FDFF0A788E
-:103AD0000500050005000500EC7884A021004000E9
-:103AE000752D087885A002000A787F007C00087890
-:103AF00085A002000A787C00307884A04000C000D5
-:103B00007C2D9800852DAC787C00087884A0FDFF82
-:103B10000A780500050005000500EC7884A0210066
-:103B20004000942D9800922DAC787E00087885A0F6
-:103B300002000A787F007C0084A770004000A82D56
-:103B40007E0C602D682F78106B1B782D682C7F0CF5
-:103B500017680300587884A0003F1A682F68000097
-:103B60002B6800004B780800E47805A0D0001520F1
-:103B700084A0200040001520EC7884A003004000C1
-:103B80001520180015207800702B7E0C1068078017
-:103B900084A00F0003800380038080A00036602093
-:103BA00048204A7000604E70046052707F0C7C00A8
-:103BB0002000200000002000000020000000200065
-:103BC0000000200000002000000020000000200075
-:103BD0000000200000002000000020000000200065
-:103BE0000000200000002000000020000000200055
-:103BF000000020006200090014001400479814001F
-:103C00001400F598E798140014008000BF0000012C
-:103C10000204082080F80AA214000B300CA2140041
-:103C200000A238887E812A84A08406383988C22878
-:103C3000C39C05A864083BA80830C128C39C01A206
-:103C40000C30472861816A840080A48456183A8821
-:103C500008A8E228A09CF3A8640829A80C3001A8B1
-:103C60000830E128A09C0D2804A2C064A067C06FA2
-:103C700014183B882370768577860FA86E783E8867
-:103C80000CA82B2805A2A064A067C06F14183B885D
-:103C900023707685778601A83E886920C128C39C59
-:103CA00044200321A2208120DCA807A2140003A243
-:103CB0000080A884A48572189A843C88E21F01F6CB
-:103CC00008A26E856F8604070830A09C140002A22B
-:103CD0000080A4850930A884E21948F87481EB8635
-:103CE000EB852E87A9873F88E608F1A861F8E8A848
-:103CF00001F8140081F81600B285F0803295A2FA1E
-:103D0000E21D1400328521F21400E21DA884E0D6E1
-:103D1000E61F140006A265687F812A84C11D2388DE
-:103D2000160042600880FAA80080A48460812A847A
-:103D300021F00830A884C61DD720228816000080F4
-:103D400048281110FCA80830008000A0022811109B
-:103D5000FDA887A808303D281110FDA809A217006A
-:103D60000C300080A485E21DC1DA1400E0263A87F9
-:103D7000A2FAF219E21F14000BA214000DA27E8118
-:103D80002A84A08406381002CD9C040700007E120D
-:103D9000912000224920C72E0070047205A20C72E7
-:103DA00015A2087084A0FDFF05A24000D92E78005E
-:103DB000DE2E037000007F1200207C00007084A0C3
-:103DC0000100C0000C2F08710481C800EB2E781090
-:103DD000A82F7800E32E0C708CA07F0040000C2FE1
-:103DE00004700480C800032F147005A0C000FF2ECB
-:103DF000107005A04000032F02A1C800E32E077039
-:103E0000100078000C2FFF8A40000C2F78106B31C7
-:103E1000C000062F4000E32E7810562F03700000DC
-:103E20007F1200207C002464FF844000302F702C1F
-:103E30003920352F042768AE0C6830A6086829A5FC
-:103E400021844000302F3887042705A0C0001B2F95
-:103E5000987075A04000302F3920322F78001A2F2B
-:103E60007C000000040008000C0010001400180082
-:103E70001C0000007E129120002279200035712064
-:103E8000100007700A000770020003700000712024
-:103E9000200007700A00077002000370000049202C
-:103EA0000000B37800007F1200207C004920562FCC
-:103EB00004700480C800822F077012000871087017
-:103EC00006A1C0005E2F84A1300040006B2F86A0A9
-:103ED0003000C0005E2F007084A00100C000822F5F
-:103EE000087084A00C00C000802F0C7184A1000316
-:103EF000C000802F84A17F00C000562F7800822F41
-:103F0000176803000770120007700800047084A08F
-:103F10000800C000862F0770120008710481480055
-:103F20008B2FB378000003700000492000007C0054
-:103F30007E107E007E127E1591200022087178107E
-:103F4000A82F7F157F12912001807F007F107C00B9
-:103F50000472182108710C7084A00003C000EA2FBD
-:103F600084A10C00C000EA2F1382138213821382F3
-:103F700084A200010DA10B810B810F8184A1070098
-:103F80007900C22FCC2FDC2FEA2FDC2FFE2FFE2F43
-:103F9000EA2FFC2F7810A51B07700200FF8AC000D3
-:103FA000D52F492000007800D92F78106B31C00040
-:103FB000D52FB37800007C0007700200FF8AC00094
-:103FC000E32F7800E72F78106B31C000E32FB37830
-:103FD00000007C00077002007810562F7810BB2C70
-:103FE000146884A000804000F72F176802007C004E
-:103FF0007810A51B7810A51B781050301072147122
-:104000000C709CA07F00002800A311A289A10000D1
-:10401000B07805A040001030B3780000780033304D
-:10402000781050300427582C60AC0C63002222A377
-:10403000086300211BA3002405A340002930C80009
-:104040002930128410820A8389A10000602B780035
-:104050001030602B078ABAA7322F3DA7002C826848
-:10406000866F8E6C8A6B077012007810562F7C005A
-:104070003887042705A0C0004430986005A04000A0
-:104080004D3060203920322F518A40004C3008706A
-:1040900084A0C00086A0C0007C00512000007C00ED
-:1040A000508A3987042704A0C0005D303920382F9A
-:1040B000006064A0C0005D30602D7C007E127E0D2B
-:1040C000912000227F0D806860208468886B8C6C52
-:1040D0005780D4AAFF0084A0FF00B8A0322F087E2A
-:1040E000B5A60C00186884A0400040007930B5A641
-:1040F00001007E0F7920000158787F0F84A04000D6
-:104100004000883084A60100C0008830B5A60100B8
-:1041100007700400047084A00400C0008A3000709E
-:1041200005A0400095307810A51B002405A3C00011
-:104130009B307800D830582C042760AC046000A471
-:104140007E001A70006001A31E700920FD04042186
-:1041500086A0FD047F00C000C83084A0010040009C
-:10416000C83084A60100C000C83013700100177069
-:104170000000027607700100B3780100A0A40100DE
-:1041800099A30000046000A41A70006001A31E70CF
-:104190000C62002402A212700862002303A21670AF
-:1041A000027607700100602B781038307800DA3022
-:1041B00078106B31C000D8307F1200207C007E1256
-:1041C0007E0D912000227F0D07700400047084A0F2
-:1041D0000400C000E630037008007F1200207C005D
-:1041E0007E127E0D912000227F0D4920F030077055
-:1041F0000400047084A00400C000F930007005A021
-:10420000400004317810A51B087EB5A60C00186884
-:1042100084A0400040000E31B5A60100246805A02E
-:1042200040001A3150203920352F602D78106B3125
-:10423000C00016317F1200207C007E127E007E01BD
-:104240007E0D912000227F0D7F037F04087EB5A69E
-:104250000C00186884A0400040003031B5A6010071
-:1042600049201D31246855A040006831702D602E12
-:104270003920352F042768AE0C6822A408681BA3D8
-:1042800048005531518AC00047317810A51B388746
-:10429000042705A0C0003B31987075A06020400045
-:1042A00068313920322F78003A31228420841A83F1
-:1042B00099A300000C69002422A1086900231BA116
-:1042C000C80064317810A51B712020007800883068
-:1042D0007F1200207C00087084A0C00086A0C0006F
-:1042E00040009331042708AC04211E70088104218A
-:1042F0001A700881042116700881042112707E0F43
-:104300007920000158787F0F84A0400040008E3152
-:1043100084A60100C0008E31B5A6010002760770A8
-:104320000100781038307C007E127E007E0D9120D6
-:104330000022492094317F0D7F08087184A1C000BC
-:10434000C000AA31246805A04000BA317800DE2EF2
-:104350007800BA3108710481C800B2317810A82FF2
-:1043600078009D310770100008710481C800B431D5
-:104370007810A82F087086A00200C0009D31007040
-:1043800005A0C0009D3103700000492000007F128D
-:1043900000207C007E127E147E137E157E0D9120FF
-:1043A00000227F0D4920CA3180AD1000A020992045
-:1043B00031000C7084A07F00266807700800077029
-:1043C0000200037001004000E8310080AC80A5537A
-:1043D00007700400047084A00400C000EA31492082
-:1043E0000000037000007F157F137F147F120020F0
-:1043F0007C007E127E007E0D912000227F0D4920E0
-:10440000F931806860208468886B8C6C5780D4AAEE
-:10441000FF0084A0FF00B8A0322F087EB5A60400DC
-:1044200007700400047084A00400C0001232582CED
-:10443000042760AC046000A41A70006001A31E7021
-:1044400013700100177000000276077001007F00F2
-:104450000780092031000A20A0002C320871077063
-:1044600002000C81C8002C320C81480039327800DF
-:10447000EA2FA0A4010099A300008A6B8E6C07703C
-:10448000040049200000037000007F1200207C001F
-:10449000A920100006A0048086808E81C8005132B9
-:1044A00000A2F0004C3286808E817C007E15A9200F
-:1044B000100005A0400077321AA1C800773213829D
-:1044C0008D8148006A321AA1C8006B32F0005F3259
-:1044D00078006F321AA108231082F0005F327E004C
-:1044E000003284A0FFF780207F007F157C007E00D3
-:1044F000003285A0000878007332E000BF329120BE
-:104500000060207801802278C000B93224782278B7
-:104510009120008069204035006884A00700400099
-:10452000A13286A002004000A13230680DA04000F8
-:10453000A132042105A04000A13201800A204000E0
-:104540006F3361208036A9208000346005A04000D0
-:10455000B33201803660C000B332106005A0400065
-:10456000B3327810191AE0AC10007000B93278003C
-:10457000A5327810D4327810C2327810F9329120F6
-:1045800001807C003C7801803E78C000D3324078C6
-:104590003E78487805A04000D33201804A78C000B8
-:1045A000D3327810191A7C00347801803678C00034
-:1045B000F8323878367891200080447805A0C00021
-:1045C000E332012001010180467880A0803E402036
-:1045D000042065A04000F832206005A04000F432BD
-:1045E00001802260400028330060402C7800E932CE
-:1045F0007C00287801802A78C00027332C782A781C
-:10460000307805A0C0000633012080000180327898
-:10461000038003800380038090A0803698A202006C
-:10462000042384A008004000273390A2090004223C
-:1046300005A040001F3301801220C000273304234F
-:1046400084A0F7FF85A080001A207810191A7C003A
-:1046500069204035006805A0400032333C6806AC54
-:1046600040006F3317600600B06084A0003F1A60FE
-:104670001C6084A0FF0085A060001E6000604220D6
-:104680001067B66F78109216186805A040004A337C
-:1046900001801A68086884A0EFFF0A68106801802A
-:1046A000D00054337810A51B12682F6000002B60D7
-:1046B0000000682C7810DD176920403501200600C5
-:1046C000A268447984A10001C0006A33BA6901205C
-:1046D0000400A2687810141A912001807C0009203F
-:1046E0004F3564216920000178106B1B17600600AC
-:1046F000586884A0003F1A601C6084A0FF0085A059
-:1047000048001E602F6000002B600000306884A00D
-:1047100040004000AB334B680400A92014004868F7
-:1047200084A00400400098337000983378008F33E1
-:104730004B680900A9201400486884A001004000CB
-:10474000A5337000A53378009C33A920FA007000CF
-:10475000AB337800A733086884A0FDFF0A681B68A4
-:104760004600092068350B2007004C784A789120D4
-:1047700001807C0079200035781003347810CB3329
-:104780007810E0337810F533337800004778000074
-:104790004B7800007C0019200A00112046350422C5
-:1047A00086A032004000DD3319200C00042286A0D0
-:1047B0003C004000DD33192008002A7B2E7B7C0062
-:1047C0001920300011204635042286A03200400016
-:1047D000F23319203900042286A03C004000F23355
-:1047E00019202700367B3A7B7C0019200D00112010
-:1047F0004635042286A03C004000003419200A00FF
-:104800003E7B427B7C001920AF2F112046350422CD
-:1048100086A032004000153419207139042286A088
-:104820003C004000153419202626227B267B7C0084
-:02483000A7924D
-:00000001FF
-/* Version 1.31.00 ISP1000 Initiator RISC firmware */
diff --git a/firmware/qlogic/sd7220.fw.ihex b/firmware/qlogic/sd7220.fw.ihex
deleted file mode 100644
index a33636319112..000000000000
--- a/firmware/qlogic/sd7220.fw.ihex
+++ /dev/null
@@ -1,513 +0,0 @@
-:10000000020A29020A87E5E630E6047F0180027FC2
-:1000100000E5E230E4047E0180027E00EE5F6008CD
-:1000200053F9F7E4F5FE80087F0A121731120EA289
-:1000300075FC08E4F5FDE5E720E70343F908220035
-:1000400001201100042000755101E4F552F553F52B
-:1000500052F57E7F04020438C2360552E552D3942D
-:100060000C4005755201D23690070C7407F0A3744A
-:10007000FFF0E4F50CA3F0900714F0A3F0750B204B
-:10008000F509E4F508E508D39430400302040412AE
-:100090000006150BE50870047F0180027F00E5096A
-:1000A00070047E0180027E00EE5F6005121871D23E
-:1000B0003553E1F7E5084509FFE50B25E025E02488
-:1000C00083F582E43407F583EFF085E220E552D32F
-:1000D0009401400D1219F3E054A064407003020330
-:1000E000FB53F9F8909470E4F0E0F510AF09121E9C
-:1000F000B3AF08EF4408F582758380E0F529EF443B
-:1001000007121A3CF5225440D39400401EE52954AE
-:10011000F070211219F3E04480F0E52254306508B4
-:1001200070091219F3E054BFF080091219F37440FA
-:10013000F00203FB121A127583AE74FFF0AF087E53
-:1001400000EF4407F582E0FDE50B25E025E0248182
-:10015000F582E43407F583EDF090070EE004F0EF4C
-:100160004407F582758398E0F528121A23400C1293
-:1001700019F3E04401121A320203F6AF087E00744C
-:1001800080CDEFCD8D82F583E030E00A1219F3E0E7
-:100190004420F00203FB1219F3E054DFF0EE44AE0A
-:1001A000121A4330E4030203FB749E121A0520E086
-:1001B000030203FB8F828E83E020E0030203FB1225
-:1001C00019F3E04410F0E5E320E708E508121A3AD5
-:1001D0004404F0AF087E00EF121A3A20E2341219FC
-:1001E000F3E04408F0E5E430E6047D0180027D00A0
-:1001F000E57EC3940450047C0180027C00EC4D60D9
-:1002000005C2350203FBEE44D2121A434440F00209
-:1002100003FB1219F3E054F7F0121A127583D2E0BF
-:1002200054BFF0900714E004F0E57E7003757E0182
-:10023000AF087E00121A2340121219F3E044011293
-:1002400019F2E05402121A320203FB1219F3E044CD
-:10025000021219F2E054FEF0C235EE448A8F82F5A4
-:1002600083E0F517548F4440F07490FCE508440790
-:10027000FDF5828C83E0543F900702F0E054C08D7E
-:10028000828C83F07492121A05900703121A197463
-:1002900082121A05900704121A1974B4121A0590E2
-:1002A0000705121A197494FEE5084406121A0AF595
-:1002B0001030E004D2378002C237E510547F8F82BD
-:1002C0008E83F0304430121A035480D394004004DB
-:1002D000D2398002C2398F828E83E04480F0121AB4
-:1002E000035440D394004004D23A8002C23A8F8231
-:1002F0008E83E04440F07492FEE5084406121A0A28
-:1003000030E704D2388002C2388F828E83E0547F77
-:10031000F0121E46E4F50A20030280033043031264
-:1003200019952002028003304203120C8F303006F0
-:10033000121995120C8F120D471219F3E054FBF0AD
-:10034000E50AC39401404643E1081219F3E044046E
-:10035000F0E5E420E72A121A127583D2E05408D39C
-:10036000940040047F0180027F00E50AC3940140AD
-:10037000047E0180027E00EF5E6005121DD78017AB
-:10038000121A127583D2E04408F00203FB121A120B
-:100390007583D2E054F7F0121E467F0812173174AD
-:1003A0008EFE121A128E83E0F51054FEF0E5104412
-:1003B00001FFE508FDED4407F582EFF0E51054FE7E
-:1003C000FFED4407F582EF121A11758386E04410A1
-:1003D000121A11E04410F01219F3E054FD4401FF29
-:1003E0001219F3EF121A3230320CE5084408F58284
-:1003F0007583827405F0AF0B1218D774102508F5B9
-:10040000080200850509E509D3940750030200821C
-:10041000E57ED3940040047F0180027F00E57EC327
-:1004200094FA50047E0180027E00EE5F6002057E39
-:1004300030350B43E1017F0912173102005853E1B7
-:10044000FE0200588E6A8F6B8C6C8D6D756E017517
-:100450006F01757001E4F573F574F57590072FF071
-:10046000F53CF53EF546F547F53DF53FF56FE56F93
-:10047000700FE56B456A12072A758380743AF08025
-:100480000912072A758380741AF0E4F56EC3743F6D
-:10049000956EFF120865758382EFF0121A4D1208EF
-:1004A000C6E533F01208FA1208B140E1E56F700BAF
-:1004B00012072A7583807436F0800912072A758323
-:1004C000807416F0756E0112072A7583B4E56EF01C
-:1004D000121A4D743F256EF582E43400F583E5333E
-:1004E000F074BF256EF582E434001208B140D8E400
-:1004F000F570F546F547F56E1208FAF583E0FE1241
-:1005000008C6E07C002400FFEC3EFEAD3BD3EF9D2F
-:10051000EE9C50047B0180027B00E57070047A0140
-:1005200080027A00EB5A6006856E46757001D3EF43
-:100530009DEE9C50047F0180027F00E570B40104B1
-:100540007E0180027E00EF5E6003856E47056EE5EA
-:100550006E647F70A3E5466005E547B47E0385467B
-:1005600047E56F7008854676854777800EC3747FB0
-:100570009546F578C3747F9547F579E56F7037E553
-:10058000466547700C757301757401F53CF53D8047
-:1005900035E4F54EC3E5479546F53CC313F57125A3
-:1005A00046F572C3943F4005E4F53D8040C3743F77
-:1005B0009572F53D8037E5466547700F7573017597
-:1005C0007501F53EF53F754E018022E4F54EC3E519
-:1005D000479546F53EC313F5712546F572D3943F12
-:1005E0005005E4F53F8006E57224C1F53F056FE54F
-:1005F0006FC39402500302046EE56D456C70028077
-:1006000004E574457590072FF07F01E53E6004E531
-:100610003C7014E4F53CF53DF53EF53F1208D27010
-:1006200004F00206A4807AE53CC3953E4007E53C11
-:10063000953EFF8006C3E53E953CFFE576D3957970
-:10064000400585767A800385797AE577C395785079
-:100650000585777B800385787BE57BD3957A403071
-:10066000E57B957AF53CF53EC3E57B957A900719D5
-:10067000F0E53CC313F571257AF572C3943F40054C
-:10068000E4F53D801FC3743F9572F53DF53F80143E
-:10069000E4F53CF53E900719F01208D27003F080A3
-:1006A000037401F01208657583D0E0540FFEAD3C71
-:1006B00070027E07BE0F027E80EEFBEFD39B74803C
-:1006C000F898401FE4F53CF53E1208D27003F08024
-:1006D000127401F0E508FBEB4407F5827583D2E064
-:1006E0004410F0E508FBEB4409F58275839EEDF0BC
-:1006F000EB4407F5827583CAEDF01208657583CC6B
-:10070000EFF022E5084407F5827583BCE054F0F071
-:10071000E5084407F5827583BEE054F0F0E508442F
-:1007200007F5827583C0E054F0F0E5084407F582D0
-:1007300022F0900728E0FEA3E0F5828E8322854216
-:100740004285414185404074C02FF58274023EF5D8
-:1007500083E542F074E02FF58274023EF58322E5D2
-:100760004229FDE433FCE53CC39DEC6480F87480D1
-:100770009822F583E0900722541FFDE0FAA3E0F5EC
-:10078000828A83EDF022900722E0FCA3E0F5828CC0
-:100790008322900724FFED4407CFF0A3EFF02285DA
-:1007A0003838853939853A3A74C02FF58274023E5B
-:1007B000F58322900726FFED4407CFF0A3EFF02248
-:1007C000F074A02FF58274023EF5832274C02511C7
-:1007D000F582E43401F5832274002511F582E434B6
-:1007E00002F5832274602511F582E43403F5832237
-:1007F00074802511F582E43403F5832274E0251119
-:10080000F582E43403F5832274402511F582E43443
-:1008100006F5832274802FF58274023EF58322AFA1
-:10082000087E00EF4407F58222F583E5824407F550
-:1008300082E540F02274402511F582E43402F5830C
-:100840002274C02511F582E43403F5832274002557
-:1008500011F582E43406F5832274202511F582E433
-:100860003406F58322E508FDED4407F58222E541D3
-:10087000F0E56564014564227E00FB7A00FD7C00A2
-:100880002274202511F582E434022274A02511F58A
-:1008900082E4340322853E42853F418F4022853CDD
-:1008A00042853D418F402275453F900720E4F0A3EB
-:1008B00022F583E532F0056EE56EC3944022F0E543
-:1008C000084406F582227400256EF582E43400F5B2
-:1008D0008322E56D456C90072F22E4F9E53CD39522
-:1008E0003E2274802EF582E43402F583E02274A067
-:1008F0002EF582E43402F583E0227480256EF582C1
-:10090000E43400222542FDE433FC22854242854145
-:100910004185404022ED4C60030209E5EF4E7037FF
-:10092000900726120789E0FD1207CCEDF09007280A
-:10093000120789E0FD1207D8EDF0120786E0541F78
-:10094000FD120881F583EDF0900724120789E05429
-:100950001FFD120835EDF0EF64044E703790072646
-:10096000120789E0FD1207E4EDF0900728120789CD
-:10097000E0FD1207F0EDF0120786E0541FFD1208AB
-:100980008BF583EDF0900724120789E0541FFD12C8
-:100990000841EDF0EF64014E70047D0180027D009E
-:1009A000EF64024E70047F0180027F00EF4D60789B
-:1009B000900726120735E0FF1207FCEF120731E01F
-:1009C000FF120808EFF0900722120735E0541FFFCE
-:1009D00012084DEFF0900724120735E0541FFF1264
-:1009E0000859EFF0221207CCE4F01207D8E4F01215
-:1009F0000881F583E4F01208357414F01207E4E47A
-:100A0000F01207F0E4F012088BF583E4F0120841CD
-:100A10007414F01207FCE4F0120808E4F012084D18
-:100A2000E4F01208597414F02253F9F775FC10E43D
-:100A3000F5FD75FE30F5FFE5E720E70343F908E52E
-:100A4000E620E70B78FFE4F6D8FD53E6FE80097850
-:100A500008E4F6D8FD53E6FE758180E4F5A8D2A837
-:100A6000C2A9D2AFE5E220E50520E602800343E11A
-:100A700002E5E220E00E9000007F007E08E4F0A393
-:100A8000DFFCDEFA020ADB43FA01C0E0C0F0C083FB
-:100A9000C082C0D0121CE7D0D0D082D083D0F0D09A
-:100AA000E053FAFE32021B55E493A3F8E493A3F655
-:100AB00008DFF98029E493A3F85407240CC8C33352
-:100AC000C4540F4420C8834004F456800146F6DF26
-:100AD000E4800B010204081020408090003FE47E77
-:100AE000019360C1A3FF543F30E509541FFEE49316
-:100AF000A360010ECF54C025E060AD40B880FE8CED
-:100B0000648D658A668B67E4F569EF4E7003021D9C
-:100B100055E4F568E5674566703212072A758390DB
-:100B2000E41207297583C2E41207297583C4E4120D
-:100B30000870702912072A758392E41207297583B9
-:100B4000C6E41207297583C8E4F0801190072612C5
-:100B50000735E41208707005120732E4F0121D55D3
-:100B6000121EBFE5674566703312072A758390E54C
-:100B7000411207297583C2E5411207297583C41202
-:100B8000086E702912072A758392E54012072975AD
-:100B900083C6E5401207297583C8800E9007261288
-:100BA000073512086E7006120732E540F0AF697E15
-:100BB00000AD67AC6612044412072A7583CAE0D3FD
-:100BC0009400500C0568E568C394055003020B14AB
-:100BD000228C608D611208DA7420400D2FF582742A
-:100BE000033EF583E53EF0800B2FF58274033EF55E
-:100BF00083E53CF0E53CD3953E403CE561456070C3
-:100C000010E9120904E53E120768403B120895807E
-:100C100018E53EC39538401D853E38E53E600585A4
-:100C20003F3980038539398F3A120814E53E12079F
-:100C3000C0E53FF0228043E5614560701912075F0F
-:100C4000400512089E802712090B120814E5421273
-:100C500007C0E541F022E53CC39538401D853C388E
-:100C6000E53C6005853D3980038539398F3A1208A6
-:100C700014E53C1207C0E53DF02285383885393946
-:100C8000853A3A120814E5381207C0E539F0227F98
-:100C900006121731121D23120E04120E33E0440AFD
-:100CA000F0748EFE120E04120E0BEFF0E52830E504
-:100CB00003D38001C3400575142080037514081206
-:100CC0000E0475838AE514F0B4FF05751280800662
-:100CD000E514C313F512E4F516F57F121936121355
-:100CE000A3E50AC3940150090516E516C394144000
-:100CF000EAE5E420E728120E047583D2E05408D315
-:100D0000940040047F0180027F00E50AC394014003
-:100D1000047E0180027E00EF5E6003121DD7E57F36
-:100D2000C394114014120E047583D2E04480F0E5A0
-:100D3000E420E70F121DD7800A120E047583D2E05B
-:100D4000547FF0121D2322748A850882F583E517EB
-:100D5000F0120E3AE4F0900702E0120E177583903D
-:100D6000EFF07492FEE5084407FFF5828E83E054AD
-:100D7000C0FD900703E0543F4D8F828E83F09007B3
-:100D800004E0120E17758382EFF0900705E0FFED87
-:100D90004407F5827583B4EF120E03758380E05427
-:100DA000BFF030370A120E91758394E04480F03022
-:100DB000380A120E91758392E04480F0E52830E401
-:100DC0001A20390A120E04758388E0547FF0203A05
-:100DD0000A120E04758388E054BFF0748CFE120E64
-:100DE000048E83E0540F120E03758386E054BFF027
-:100DF000E5084406120DFD75838AE4F022F582753C
-:100E00008382E4F0E5084407F582228E83E0F51042
-:100E100054FEF0E5104401FFE508FDED4407F582BE
-:100E200022E515C45407FFE508FDED4408F5827579
-:100E3000838222758380E04440F0E5084408F5820F
-:100E400075838A22E51625E025E024AFF582E43497
-:100E50001AF583E493F50D2243E11043E18053E159
-:100E6000FD85E11022E51625E025E024B2F582E4B7
-:100E7000341AF583E49322855582855483E515F071
-:100E800022E5E25420D3940022E5E25440D39400BA
-:100E900022E5084406F58222FDE508FBEB4407F550
-:100EA000822253F9F775FE3022EF4E70261207CCDE
-:100EB000E0FD90072612077B1207D8E0FD90072877
-:100EC00012077B120881120772120835E09007247E
-:100ED000120778EF64044E70291207E4E0FD9007D2
-:100EE0002612077B1207F0E0FD90072812077B12FD
-:100EF000088B120772120841E0541FFD900724125C
-:100F0000077BEF64014E70047D0180027D00EF6479
-:100F1000024E70047F0180027F00EF4D60351207A2
-:100F2000FCE0FF900726120789EFF0120808E0FFA7
-:100F3000900728120789EFF012084DE0541FFF12A6
-:100F40000786EFF0120859E0541FFF90072412079C
-:100F500089EFF022E4F553120E8140047F018002F4
-:100F60007F00120E8940047E0180027E00EE4F70E9
-:100F700003020FF685E11043E10253E10F85E11012
-:100F8000E4F551E5E3543FF552120E89401DAD5290
-:100F9000AF51121118EF600885E11043E140800B5A
-:100FA00053E1BF120E5812000680FBE5E3543FF5F3
-:100FB00051E5E4543FF552120E81401DAD52AF5140
-:100FC000121118EF600885E11043E120800B53E116
-:100FD000DF120E5812000680FB120E8140047F01C2
-:100FE00080027F00120E8940047E0180027E00EEA6
-:100FF0004F6003120E5B22120E21EFF012109122AD
-:1010000002110002104002109000000000000000D9
-:1010100001200120E4F5571216BD121644E4121007
-:10102000561214B7900726120735E4120731E4F080
-:101030001210561214B7900726120735E541120711
-:1010400031E540F0AF577E00AD567C00120444AF4E
-:10105000567E000211EEFF900720A3E0FDE4F55656
-:10106000F540FEFCAB56FA1211517F0F7D18E4F5E6
-:1010700056F540FEFCAB56FA121541AF567E0012F3
-:101080001AFFE4FFF5567D1FF540FEFCAB56FA2231
-:1010900022E4F555E508FD74A0F556ED4407F55733
-:1010A000E52830E503D38001C340057F28EF8004A5
-:1010B0007F14EFC313F554E4F9120E1875838EE014
-:1010C000F510CEEFCEEED394004026E51054FE127C
-:1010D0000E9875838EEDF0E5104401FDEB4407F5A5
-:1010E00082EDF0855782855683E030E301091E804A
-:1010F000D4C234E9C395544002D2342202000622FD
-:10110000303011901000E493F510901010E493F536
-:101110001012109012115022E4FCC3ED9FFAEFF56B
-:101120008375820079FFE493CC6CCCA3D9F8DAF60E
-:10113000E5E230E4028CE5ED24FFFFEF7582FFF578
-:1011400083E4936C70037F01227F00222211000050
-:10115000228E588F598C5A8D5B8A5C8B5D755E012F
-:10116000E4F55FF560F56212072A7583D0E0FFC4ED
-:10117000540FF561121EA585595ED3E55E955BE5BA
-:101180005A12076B504B1207037583BCE0455E1281
-:1011900007297583BEE0455E1207297583C0E045C7
-:1011A0005EF0AF5FE560120878120AFFAF627E0062
-:1011B000AD5DAC5C120444E561AF5E7E00B4030536
-:1011C000121E218007AD5DAC5C121317055E021183
-:1011D0007A1207037583BCE045401207297583BE68
-:1011E000E045401207297583C0E04540F0228E5843
-:1011F0008F59755A017901755B01E4FB12072A7555
-:1012000083AEE0541AFF120865E0C4135407FEEFE2
-:10121000700CEE6535700790072FE0B4010DAF3507
-:101220007E00120EA9CFEBCF021E60E55964024585
-:101230005870047F0180027F00E559455870047E94
-:101240000180027E00EE4F602385414985404BE5D9
-:10125000594558702CAF5AFECDE9CDFCAB59AA5870
-:10126000120AFFAF5B7E00121E608015AF5B7E002E
-:10127000121E60900726120735E549120731E54B2B
-:10128000F0E4FDAF35FEFC120915228C648D651269
-:1012900008DA403CE56545647010120904C3E53E78
-:1012A000120769403B1208958018E53EC395384007
-:1012B0001D853E38E53E6005853F39800385393917
-:1012C0008F3A1207A8E53E120753E53FF022803B14
-:1012D000E5654564701112075F400512089E801F86
-:1012E00012073EE541F022E53CC39538401D853CA0
-:1012F00038E53C6005853D3980038539398F3A12E0
-:1013000007A8E53C120753E53DF02212079FE53898
-:10131000120753E539F0228C638D641208DA403CE1
-:10132000E56445637010120904C3E53E1207694085
-:101330003B1208958018E53EC39538401D853E3820
-:10134000E53E6005853F3980038539398F3A1207BC
-:10135000A8E53E120753E53FF022803BE564456374
-:10136000701112075F400512089E801F12073EE5AC
-:1013700041F022E53CC39538401D853C38E53C6092
-:1013800005853D3980038539398F3A1207A8E53C38
-:10139000120753E53DF02212079FE538120753E587
-:1013A00039F022E50DFEE5088E544405F555751516
-:1013B0000FF582120E7A1217A320310575150380DE
-:1013C0000375150BE50AC39401503812142020311F
-:1013D0000605150515800415151515E50AC39401B4
-:1013E0005021121420203104051580021515E50A3C
-:1013F000C39401500E120E771217A3203105051564
-:10140000120E77E515B408047F0180027F00E51510
-:10141000B407047E0180027E00EE4F6002057F2249
-:10142000855582855483E515F01217A32212072AE9
-:101430007583AE74FF120729E0541AF534E0C41323
-:101440005407F53524FE602424FE603C24047063B8
-:1014500075312DE508FD74B612079274BC90072211
-:1014600012079574901207B37492803C75313AE577
-:1014700008FD74BA12079274C09007221207B6745E
-:10148000C41207B374C88020753135E508FD74B8FF
-:1014900012079274BEFFED4407900722CFF0A3EF2E
-:1014A000F074C21207B374C6FFED4407A3CFF0A3D4
-:1014B000EFF022753401228E588F598C5A8D5B8A39
-:1014C0005C8B5D755E01E4F55F121EA585595ED3E8
-:1014D000E55E955BE55A12076B5057E55D455C701C
-:1014E0003012072A758392E55E1207297583C6E5D7
-:1014F0005E1207297583C8E55E120729758390E59A
-:101500005E1207297583C2E55E1207297583C480C0
-:1015100003120732E55EF0AF5F7E00AD5DAC5C129A
-:101520000444AF5E7E00AD5DAC5C120BD1055E0283
-:1015300014CFAB5DAA5CAD5BAC5AAF59AE58021B81
-:10154000FB8C5C8D5D8A5E8B5F756001E4F561F5F7
-:1015500062F563121EA58F60D3E560955DE55C12B0
-:10156000076B5061E55F455E702712072A7583B6E9
-:10157000E5601207297583B8E5601207297583BAFB
-:10158000E560F0AF617E00E56212087A120AFF8022
-:1015900019900724120735E56012072975838EE438
-:1015A0001207297401120729E4F0AF637E00AD5FD2
-:1015B000AC5E120444AF607E00AD5FAC5E12128B75
-:1015C00005600215582290114DE49390072EF012F9
-:1015D000081F7583AEE0541AF5347067EF4407F5C1
-:1015E000827583CEE0FF1313135407F536540FD3DF
-:1015F0009400400612142D121BA9E536540F24FE48
-:10160000600C14600C146019240370378010021EE3
-:1016100091121E9112072A7583CEE054EFF0021D3D
-:10162000AE121014E4F555121D850555E555C39409
-:101630000540F412072A7583CEE054C7120729E04B
-:101640004408F022E4F558F559AF08EF4407F58255
-:101650007583D0E0FDC4540FF55AEF4407F5827549
-:1016600083807401F0120821758382E545F0EF4410
-:1016700007F58275838A74FFF0121A4D12072A75D6
-:1016800083BCE054EF1207297583BEE054EF1207C4
-:10169000297583C0E054EF1207297583BCE044101C
-:1016A0001207297583BEE044101207297583C0E034
-:1016B0004410F0AF58E559120878020AFFE4F558D3
-:1016C0007D01F559AF35FEFC12091512072A758305
-:1016D000B674101207297583B87410120729758320
-:1016E000BA74101207297583BC7410120729758308
-:1016F000BE74101207297583C074101207297583F0
-:1017000090E41207297583C2E41207297583C4E4A3
-:10171000120729758392E41207297583C6E412071C
-:10172000297583C8E4F0AF58FEE55912087A020A19
-:10173000FFE5E230E46CE5E754C064407064E5091D
-:10174000C45430FEE50825E025E054C04EFEEF54B9
-:101750003F4EFDE52BAE2A7802C333CE33CED8F907
-:10176000F5828E83EDF0E52BAE2A7802C333CE33BB
-:10177000CED8F9FFF5828E83A3E5FEF08F828E83AB
-:10178000A3A3E5FDF08F828E83A3A3A3E5FCF0C3A2
-:10179000E52B94FAE52A94005008052BE52B7002FE
-:1017A000052A22E4FFE4F558F556F5577482FC1239
-:1017B0000E048C83E0F510547FF0E5104480120E87
-:1017C00098EDF07E0A120E047583A0E020E026DE7C
-:1017D000F40557E55770020556E5142401FDE4337E
-:1017E000FCD3E5579DE5569C40D9E50A942050026C
-:1017F000050A43E108C231120E047583A6E05512B2
-:1018000065127003D23122C23122900726E0FAA37A
-:10181000E0F5828A83E0F541E539C395414026E54C
-:10182000399541C39FEE12076B40047C0180027C16
-:1018300000E541643F60047B0180027B00EC5B605B
-:101840002905418028C3E5419539C39FEE12076BF6
-:1018500040047F0180027F00E54160047E01800238
-:101860007E00EF5E600415418003853941853A4072
-:1018700022E5E230E460E5E130E25BE50970047FF7
-:101880000180027F00E50870047E0180027E00EE88
-:101890005F604353F9F8E5E230E43BE5E130E22EE6
-:1018A00043FA0253FAFBE4F510909470E510F0E56A
-:1018B000E130E2E7909470E06510600343FA0405BC
-:1018C00010909470E510F070E612000680E153FA73
-:1018D000FD53FAFB80C0228F54120006E5E130E090
-:1018E000047F0180027F00E57ED3940540047E01E1
-:1018F00080027E00EE4F603D855411E5E220E1322A
-:1019000074CE121A0530E7047D0180027D008F82BB
-:101910008E83E030E6047F0180027F00EF5D70156A
-:101920001215C674CE121A0530E607E04480F04363
-:10193000F98012187122120E44E51625E025E024E4
-:10194000B0F582E4341AF583E493F50FE51625E04B
-:1019500025E024B1F582E4341AF583E493F50E1200
-:101960000E65F510E50F54F0120E1775838CEFF02D
-:10197000E50F30E00C120E04758386E04440F080E1
-:101980000A120E04758386E054BFF0120E9175831F
-:1019900082E50EF0227F05121731120E04120E336B
-:1019A0007402F0748EFE120E04120E0BEFF0751519
-:1019B00070120FF72034057515108003751550123D
-:1019C0000FF72034047410800274F02515F51512F9
-:1019D0000E21EFF0121091203417E5156430600CE1
-:1019E00074102515F515B48003E4F515120E21EFDA
-:1019F000F022F0E50B25E025E02482F582E43407AF
-:101A0000F583227488FEE5084407FFF5828E83E0A3
-:101A100022F0E5084407F58222F0E054C08F828E60
-:101A200083F022EF4407F582758386E05410D39447
-:101A30000022F0900715E004F0224406F582758339
-:101A40009EE022FEEF4407F5828E83E022E49007B9
-:101A50002AF0A3F012072A758382E0547F12072927
-:101A6000E04480F01210FC12081F7583A0E020E013
-:101A70001A90072BE004F0700690072AE004F0901B
-:101A8000072AE0B410E1A3E0B400DCEE44A6FCEFCA
-:101A90004407F5828C83E0F532EE44A8FEEF44075C
-:101AA000F5828E83E0F5332201201100042000909E
-:101AB00000200F9200210F9400220F9600230F9810
-:101AC00000240F9A00250F9C00260F9E00270FA0D0
-:101AD000012001A2012101A4012201A6012301A8E4
-:101AE000012401AA012501AC012601AE012701B0A4
-:101AF000012801B400280FB640280FB8612801CB97
-:101B0000EFCBCAEECA7F01E4FDEB4A7024E508F58D
-:101B10008274B6120829E508F58274B8120829E51E
-:101B200008F58274BA1208297E007C00120AFF8030
-:101B300012900726120735E541F090072412073569
-:101B4000E540F012072A75838EE41207297401120A
-:101B50000729E4F022E4F526F52753E1FEF52A757E
-:101B60002B01F5087F0112173130301C901AA9E4BF
-:101B700093F510901FF9E493F510900041E493F56C
-:101B800010901ECAE493F5107F02121731120F5401
-:101B90007F03121731120006E5E230E70912100048
-:101BA00030300312110002004712081F7583D0E085
-:101BB000C4540FFD7543017544FF1208AA7404F064
-:101BC000753B01ED14600C14600B14600F2403705E
-:101BD0000B800980001208A704F080061208A77481
-:101BE00004F0EE4482FEEF4407F5828E83E5451251
-:101BF00008BE758382E531F002114C8E608F611250
-:101C00001EA5E4FFCEEDCEEED39561E56012076B25
-:101C1000403974202EF582E43403F583E07003FF2D
-:101C200080261208E2FDC39F401ECFEDCFEB4A7025
-:101C30000B8D421208EEF5418E40800C1208E2F541
-:101C4000381208EEF5398E3A1E80BC22755801E52F
-:101C500035700C1207CCE0F54A1207D8E0F54CE5D8
-:101C600035B4040C1207E4E0F54A1207F0E0F54C35
-:101C7000E535B401047F0180027F00E535B402043C
-:101C80007E0180027E00EE4F600C1207FCE0F54AF8
-:101C9000120808E0F54C85414985404B22755B01EF
-:101CA000900724120735E0541FFFD3940250048F8D
-:101CB000588005EF24FEF558EFC394184005755978
-:101CC000188004EF04F55985435AAF587E00AD598A
-:101CD0007C00AB5B7A00121541AF5A7E0012180AE5
-:101CE000AF5B7E00021AFFE5E230E70E121003C27E
-:101CF000303030031210FF203328E5E730E70512BB
-:101D00000EA2800DE5FEC394205006120EA243F9E8
-:101D100008E5F230E70353F97FE5F15470D39400FE
-:101D200050D822120E04758380E4F0E508440712AF
-:101D30000DFD758384120E02758386120E02758363
-:101D40008CE054F3120E0375838E120E0275839489
-:101D5000E054FBF02212072A75838EE412072974DF
-:101D600001120729E41208BE75838CE04420120892
-:101D7000BEE054DFF07484850882F583E0547FF080
-:101D8000E04480F022755601E4FDF557AF35FEFCC6
-:101D9000120915121C9D121E7A121C4CAF577E00A0
-:101DA000AD567C00120444AF567E000211EE75560B
-:101DB00001E4FDF557AF35FEFC120915121C9D120A
-:101DC0001E7A121C4CAF577E00AD567C00120444A4
-:101DD000AF567E000211EEE4F516120E44FEE50841
-:101DE0004405FF120E658F828E83F00516E516C33B
-:101DF000941440E6E508120E2BE4F022E4F558F5C1
-:101E000059F55AFFFEAD58FC1209157F047E00AD4E
-:101E1000587C001209157F027E00AD587C00020933
-:101E200015E53C253EFCE5422400FBE433FAECC317
-:101E30009BEA12076B400B8C42E53D253FF5418F35
-:101E4000402212090B227484F5188508198519821D
-:101E5000851883E0547FF0E04480F0E04480F02275
-:101E6000EF4E700B12072A7583D2E054DFF0221276
-:101E7000072A7583D2E04420F02275580190072686
-:101E8000120735E0543FF541120732E0543FF54068
-:101E900022755602E4F557121DFCAF577E00AD5671
-:101EA0007C00020444E4F542F541F540F538F5398B
-:101EB000F53A22EF5407FFE5F954F84FF5F9227F80
-:101EC00001E4FE0F0EBEFFFB2201200001042000F2
-:101ED0000000000000000000000000000000000002
-:101EE00000000000000000000000000000000000F2
-:101EF00000000000000000000000000000000000E2
-:101F000000000000000000000000000000000000D1
-:101F100000000000000000000000000000000000C1
-:101F200000000000000000000000000000000000B1
-:101F300000000000000000000000000000000000A1
-:101F40000000000000000000000000000000000091
-:101F50000000000000000000000000000000000081
-:101F60000000000000000000000000000000000071
-:101F70000000000000000000000000000000000061
-:101F80000000000000000000000000000000000051
-:101F90000000000000000000000000000000000041
-:101FA0000000000000000000000000000000000031
-:101FB0000000000000000000000000000000000021
-:101FC0000000000000000000000000000000000011
-:101FD0000000000000000000000000000000000001
-:101FE00000000000000000000000000000000000F1
-:101FF000000000000000000001201100042000810A
-:00000001FF
diff --git a/firmware/r128/r128_cce.bin.ihex b/firmware/r128/r128_cce.bin.ihex
deleted file mode 100644
index 4831315d7b99..000000000000
--- a/firmware/r128/r128_cce.bin.ihex
+++ /dev/null
@@ -1,129 +0,0 @@
-:1000000000000000108038000000000010003800E0
-:10001000000000020000008E0000000200000091BD
-:1000200000000000402E2423000000006062124FF8
-:10003000000000002E2B596D000000007677753E01
-:1000400000000000898984820000000023BC8B0D21
-:10005000000000002323232300000000238DABB405
-:1000600000000000232323230000000100B028002B
-:100070000000000100032800000000010004C0008F
-:100080000000000100030800000000023660300E8E
-:100090000000000B00040000000000000000000051
-:1000A000000000010200151D0000000100001D0EEF
-:1000B00000000001000039D900000001000019D73C
-:1000C0000000000C0000001C00000001000019D618
-:1000D0000000000C0000001C0000000200000017DF
-:1000E0000000000B01200000000000000100358A24
-:1000F0000000000100064000000000090000001E92
-:100100000000000108D015B4000000101910100004
-:100110000000000300002000000000000000280094
-:1001200000000001000308000000000100003D0E77
-:10013000000000010000C8000000000A0000882A3A
-:10014000000000090000002A000000010200150F55
-:1001500000000002000028240000000100003D65AE
-:100160000000000100003D66000000020000002BBE
-:100170000000000100F32DB4000000012200D8BFF0
-:100180000000000100E088BF0000000C1333383786
-:1001900000000001020615650000000C0000003799
-:1001A00000000001020015640000000100003D662F
-:1001B000000000020000002E000000040020083AA9
-:1001C0000000000100080800000000010006C0FF58
-:1001D000000000040040003D000000010007C800CE
-:1001E00000000001000700FF000000030000000005
-:1001F0000000000C0000005C000000020000002E67
-:100200000000000C000000B00000000100003D767E
-:100210000000000100032800000000010000480069
-:1002200000000001000208000000000106001D0E91
-:1002300000000001000248000000000100028800E8
-:100240000000000100F3C5F80000000100100000EC
-:10025000000000060030004E0000000100003D6379
-:100260000000001080303DF0000000021000384314
-:1002700000000002000028430000000C000000B055
-:100280000000000100003D760000000100003D7705
-:100290000000000100003D0E0000000100003D0FC5
-:1002A000000000010050280000000006003000524D
-:1002B0000000001080303DF00000000100003DF81B
-:1002C00000000002000000520000000100053D0E89
-:1002D0000000000100103D0F00000002003000553A
-:1002E0000000000100003D700000000100001E89B8
-:1002F0000000000100003D710000000300003D729D
-:100300000000000C0000005C000000020000006221
-:100310000000000100003F280000000100003F270E
-:100320000000000100003E820000000100003E8845
-:100330000000000100003E660000000100003E6772
-:100340000000000100003E760000000100003E6851
-:100350000000000100003E690000000100003E6C4A
-:100360000000000000003E6D0000000100002800B9
-:1003700000000001005028000000000100003D685E
-:100380000000000100030800000000060000006EED
-:10039000000000010002C0000000000106303D62C4
-:1003A0000000000200000070000000020030006F3A
-:1003B00000000000200038C0000000010001C0C0A3
-:1003C0000000000E0000007D0000000C0003287FEC
-:1003D00000000001020015BB0000000C00030880B3
-:1003E0000000000002003DBC0000000100003DBB19
-:1003F0000000000000003DBC00000003000480007D
-:100400000000000100048000000000030006C0029C
-:100410000000000100B0280000000000306038003B
-:100420000000000100C028000000000100B008002A
-:100430000000000100D600000000000712801086B6
-:10044000000000000000280000000001000039CC7E
-:1004500000000001000039CD00000001000039C992
-:1004600000000001000039CA00000000000039CB84
-:10047000000000011003B80000000001009000001F
-:100480000000000110003800000000010003080017
-:100490000000000100903D1B0000000140203D0ACB
-:1004A0000000000140203D0B00000001000880001A
-:1004B000000000010001C0C00000000E0000009F0D
-:1004C0000000000C000308800000000142203DBD38
-:1004D0000000000C0003087F0000000142003DBB4B
-:1004E0000000000C000308800000000142203DBC19
-:1004F00000000002000000A20000000140203DBDFD
-:100500000000000140003DBB0000000140203DBC58
-:1005100000000001000840000000000100A00000F1
-:1005200000000006003000A6000000101060380037
-:1005300000000009000000A80000000300400000C7
-:100540000000000300403D1D00000000000000000E
-:1005500000000000000001000000000E000000AEDE
-:10056000000000010001C0A900000001020015C741
-:100570000000000C000000B0000000000000280097
-:10058000000000010001C0AA00000001020015D215
-:10059000000000010001C0A900000003020015C70F
-:1005A0000000000100003E88000000010001C0BA08
-:1005B0000000000102001728000000010001C0BB7C
-:1005C000000000010200165A0000000000003E5B1F
-:1005D000000000000000010000000000000010000A
-:1005E000000000010006400B00000009000000BCF4
-:1005F00000000000000028000000000000000000D3
-:1006000000000000000000000000000000000000EA
-:1006100000000000000000000000000000000000DA
-:1006200000000000000000000000000000000000CA
-:1006300000000000000000000000000000000000BA
-:1006400000000000000000000000000000000000AA
-:10065000000000000000000000000000000000009A
-:10066000000000000000000000000000000000008A
-:10067000000000000000000000000000000000007A
-:10068000000000000000000000000000000000006A
-:10069000000000000000000000000000000000005A
-:1006A000000000000000000000000000000000004A
-:1006B000000000000000000000000000000000003A
-:1006C000000000000000000000000000000000002A
-:1006D000000000000000000000000000000000001A
-:1006E000000000000000000000000000000000000A
-:1006F00000000000000000000000000000000000FA
-:1007000000000000000000000000000000000000E9
-:1007100000000000000000000000000000000000D9
-:1007200000000000000000000000000000000000C9
-:1007300000000000000000000000000000000000B9
-:1007400000000000000000000000000000000000A9
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B0000000000000000000000000000000000039
-:1007C0000000000000000000000000000000000029
-:1007D0000000000000000000000000000000000019
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:00000001FF
diff --git a/firmware/radeon/R100_cp.bin.ihex b/firmware/radeon/R100_cp.bin.ihex
deleted file mode 100644
index 151647b04fc4..000000000000
--- a/firmware/radeon/R100_cp.bin.ihex
+++ /dev/null
@@ -1,130 +0,0 @@
-:1000000000000000210070000000000020007000CF
-:1000100000000004000000B400000004000000B86C
-:10002000000000006F5B4D4C000000004C4C427F14
-:10003000000000005B568A92000000004CA09C6DFE
-:1000400000000000AD4C4C4C000000004CE1AF3D06
-:1000500000000000D8AFAFAF00000000D64C4CDC71
-:10006000000000004CD10D1000000016000F000031
-:1000700000000000362F242D0000000400000012B4
-:1000800000000016000F000000000000362F282D91
-:1000900000000002000380E70000000204002C972B
-:1000A00000000016000F000100000000333A373056
-:1000B00000000002000077EF0000000200061000C0
-:1000C0000000001A000000210000001E0000400097
-:1000D00000000002000610000000001A00000021CD
-:1000E0000000001E0000400000000002000610009A
-:1000F0000000001A000000210000001E0000400067
-:100100000000000400000017000000020003802B24
-:1001100000000002040067E0000000040000001777
-:1001200000000002000077E000000002000650001E
-:1001300000000002000037E100000006040067E153
-:1001400000000002000077E000000002000077E1FC
-:1001500000000006000077E100000000FFFFFFFF45
-:100160000000000010000000000000020003802BCF
-:1001700000000006040067E0000000020000767541
-:100180000000000200007676000000020000767792
-:100190000000000600007678000000020003802CBA
-:1001A00000000002040026760000000200007677BE
-:1001B0000000000600007678000000180000002F04
-:1001C000000000180000002F0000000600000000E2
-:1001D000000000180000003000000018000000308F
-:1001E0000000000600000000000000020160500056
-:1001F000000000020006500000000002000980001C
-:1002000000000002000610000000000464C0603E10
-:1002100000000002000380E600000002040025C583
-:1002200000000016000800000000000000000000B0
-:10023000000000020400251D00000002000075807F
-:100240000000000200067581000000020400258005
-:100250000000000200067581000000040000004953
-:10026000000000000000500000000002000380E6D3
-:1002700000000002040025C5000000020006100076
-:10028000000000020000750E000000020001900056
-:10029000000000140001105500000012000000557D
-:1002A000000000020400250F000000040000504F71
-:1002B00000000002000380E600000002040025C5E3
-:1002C0000000000200007565000000020000756675
-:1002D000000000040000005800000002000380E657
-:1002E00000000002040025C50000000201E655B42C
-:1002F000000000024401B0E40000000201C110E46B
-:10030000000000182666706600000002040C2565D7
-:1003100000000018000000660000000204002564D0
-:100320000000000200007566000000040000005D8F
-:1003300000000008004010690000000200101000DA
-:1003400000000002000D80FF000000080080006C2B
-:1003500000000002000F900000000002000E00FFED
-:100360000000000600000000000000180000008FE0
-:10037000000000040000005B00000002000380E6B3
-:1003800000000002040025C5000000020000757690
-:100390000000000200065000000000020000900073
-:1003A0000000000200041000000000020C00350EE6
-:1003B0000000000200049000000000020005100090
-:1003C0000000000201E785F80000000200200000A4
-:1003D0000000000C0060007E000000020000756359
-:1003E00000000021006075F0000000042000707320
-:1003F000000000040000507300000002000380E6CB
-:1004000000000002040025C500000002000075760F
-:100410000000000200007577000000020000750E69
-:10042000000000020000750F0000000200A0500054
-:100430000000000C0060008300000021006075F0E7
-:1004400000000002000075F80000000400000083B6
-:1004500000000002000A750E00000002000380E6A2
-:1004600000000002040025C5000000020020750FF6
-:1004700000000004006000860000000200007570AB
-:100480000000000200007571000000060000757297
-:1004900000000002000380E600000002040025C501
-:1004A00000000002000050000000000200A0500008
-:1004B0000000000200007568000000020006100045
-:1004C0000000000C00000095000000020005800004
-:1004D000000000020C60756200000004000000973C
-:1004E00000000002000380E600000002040025C5B1
-:1004F000000000040060009600000000400070E56D
-:1005000000000002000380E600000002040025C590
-:1005100000000002000380E50000001C000000A8AD
-:1005200000000018000650AA00000002040025BBCD
-:1005300000000018000610AB00000000040075BCAD
-:1005400000000002000075BB00000000000075BC48
-:100550000000000600090000000000020009000081
-:1005600000000006000D800200000002000078324A
-:10057000000000020000500000000002000380E7BD
-:100580000000000204002C97000000020000782008
-:100590000000000200007821000000000000780048
-:1005A000000000020120000000000002200770008F
-:1005B0000000000201200000000000022000700086
-:1005C0000000000200061000000000020120751B60
-:1005D000000000028040750A000000028040750B98
-:1005E000000000020011000000000002000380E58E
-:1005F0000000001C000000C600000018000610AB40
-:1006000000000002844075BD00000018000610AA1A
-:1006100000000002840075BB00000018000610AB4B
-:1006200000000002844075BC00000004000000C906
-:1006300000000002804075BD00000002800075BB14
-:1006400000000002804075BC000000020010800025
-:1006500000000002014000000000000C006000CD1E
-:100660000000002020C0700000000012000000CF39
-:100670000000000600800000000000060080751DDC
-:100680000000000000000000000000020000775C95
-:100690000000000200A050000000000200661000F0
-:1006A000000000200460275D000000000000400002
-:1006B0000000000201E0083000000000210070008E
-:1006C000000000006464614D00000000696874204F
-:1006D00000000000000000730000000000000000A7
-:1006E000000000020000500000000002000380D063
-:1006F00000000002040025E000000000000075E199
-:10070000000000000000000100000002000380E083
-:1007100000000002040023940000000000005000CC
-:1007200000000000000000000000000000000000C9
-:1007300000000000000000080000000000000004AD
-:1007400000000000000000000000000000000000A9
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B0000000000000000000000000000000000039
-:1007C0000000000000000000000000000000000029
-:1007D0000000000000000000000000000000000019
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:00000001FF
-/* production radeon ucode r1xx-r6xx */
diff --git a/firmware/radeon/R200_cp.bin.ihex b/firmware/radeon/R200_cp.bin.ihex
deleted file mode 100644
index 3a0bd73111c4..000000000000
--- a/firmware/radeon/R200_cp.bin.ihex
+++ /dev/null
@@ -1,130 +0,0 @@
-:1000000000000000210070000000000020007000CF
-:1000100000000004000000BF00000004000000C356
-:10002000000000007A685E5D000000005D5D55889C
-:100030000000000068659197000000005DA19F78B6
-:10004000000000005D5D5D5D000000005DEE5D5044
-:1000500000000000F2ACACAC00000000E75DF9E984
-:1000600000000000B1DD0E1100000000E2AFAFAFF4
-:1000700000000016000F000000000000452F232D97
-:10008000000000040000001300000016000F000034
-:1000900000000000452F272D00000016000F000172
-:1000A000000000003E4D4A3700000002000077EFDC
-:1000B00000000002000610000000001A00000020EE
-:1000C0000000001E000040000000000200061000BA
-:1000D0000000001A000000200000001E0000400088
-:1000E00000000002000610000000001A00000020BE
-:1000F0000000001E00004000000000040000001688
-:10010000000000020003802A00000002040067E0F3
-:10011000000000040000001600000002000077E06C
-:10012000000000020006500000000002000037E15D
-:1001300000000006040067E100000002000077E014
-:1001400000000002000077E100000006000077E1F7
-:1001500000000000FFFFFFFF000000001000000093
-:100160000000000007F007F0000000020003802AF2
-:1001700000000006040067E0000000020003802C7D
-:100180000000000204002741000000020400274193
-:100190000000000204002743000000020000767502
-:1001A0000000000200007676000000020000767772
-:1001B0000000000600007678000000020003802C9A
-:1001C0000000000204002741000000020400274153
-:1001D00000000002040027430000000200007676C1
-:1001E000000000020000767700000006000076782C
-:1001F000000000020003802B0000000204002676AD
-:100200000000000200007677000000020003802C4E
-:100210000000000204002741000000020400274300
-:100220000000000600007678000000020003802C29
-:1002300000000002040027410000000204002741E2
-:10024000000000020400274300000006000076784A
-:10025000000000180000002F000000180000002F10
-:100260000000000600000000000000180000003739
-:100270000000001800000037000000060000000029
-:100280000000000201605000000000020006500063
-:1002900000000002000980000000000200061000BB
-:1002A0000000000464C06051000000160008000057
-:1002B0000000000000000000000000020400251DF6
-:1002C0000000000200007580000000020006758139
-:1002D0000000000204002580000000020006758175
-:1002E000000000040000005A000000000000500060
-:1002F0000000000200061000000000020000750E61
-:1003000000000002000190000000001400011064D1
-:100310000000001200000064000000020400250F2D
-:10032000000000040000505E00000002000075653F
-:100330000000000200007566000000040000006577
-:100340000000000201E655B4000000024401B0F0D4
-:100350000000000201C110F0000000182666707154
-:1003600000000002040C2565000000180000007168
-:100370000000000204002564000000020000756611
-:100380000000000400000068000000080040107435
-:10039000000000020010100000000002000D80FFAD
-:1003A000000000080080007700000002000F9000AD
-:1003B00000000002000E00FF000000060000000028
-:1003C0000000001800000094000000040000006815
-:1003D00000000002000075760000000200065000D8
-:1003E0000000000200009000000000020004100065
-:1003F000000000020C00350E000000020004900016
-:1004000000000002000510000000000201E785F86E
-:1004100000000002002000000000000C00600087C7
-:10042000000000020000756300000021006075F00C
-:10043000000000042000707C000000040000507CDC
-:1004400000000002000075760000000200007577D1
-:10045000000000020000750E000000020000750F91
-:100460000000000200A050000000000C0060008AA4
-:1004700000000021006075F000000002000075F827
-:10048000000000040000008A00000002000A750E4F
-:10049000000000020020750F000000040060008DC5
-:1004A000000000020000757000000002000075717D
-:1004B00000000006000075720000000200005000FD
-:1004C0000000000200A0500000000002000075685B
-:1004D00000000002000610000000000C0000009860
-:1004E0000000000200058000000000020C60756240
-:1004F000000000040000009A000000040060009961
-:1005000000000000400070F100000002000380F1D4
-:100510000000001C000000A700000018000650A901
-:1005200000000002040025BB00000018000610AA0D
-:1005300000000000040075BC00000002000075BB54
-:1005400000000000000075BC00000006000900006B
-:10055000000000020009000000000006000D8002FB
-:10056000000000020000500000000002000078219E
-:100570000000000000007800000000020000782168
-:10058000000000000000780000000002016650003A
-:1005900000000002000A000000000002000671CC0A
-:1005A000000000020286F1CD00000010000000B73C
-:1005B00000000000210070000000001C000000BED0
-:1005C000000000020006500000000002000A0000C7
-:1005D000000000020006100000000002000B0000F6
-:1005E000000000023806700000000004000A00BA93
-:1005F0000000000020007000000000020120000048
-:10060000000000022007700000000002012000002E
-:100610000000000020007000000000020006100032
-:10062000000000020120751B000000028040750AD6
-:10063000000000028040750B000000020011000065
-:1006400000000002000380F10000001C000000D147
-:1006500000000018000610AA00000002844075BDCA
-:1006600000000018000610A900000002840075BBFD
-:1006700000000018000610AA00000002844075BCAB
-:1006800000000004000000D400000002804075BD9E
-:1006900000000002800075BB00000002804075BCB5
-:1006A0000000000200108000000000020140000075
-:1006B0000000000C006000D80000002020C0700086
-:1006C00000000012000000DA0000000600800000B8
-:1006D000000000060080751D00000002000025BB20
-:1006E00000000004000040D4000000020000775C1D
-:1006F0000000000200A05000000000020066100090
-:10070000000000200460275D0000000000004000A1
-:1007100000000002000079990000000200A05000D3
-:100720000000000200661000000000200460299B09
-:1007300000000000000040000000000201E008305E
-:1007400000000000210070000000000200005000C6
-:10075000000000020003805600000002040025E0B3
-:1007600000000000000075E1000000000000000132
-:1007700000000002000380ED0000000004007394FC
-:100780000000000000000000000000000000000069
-:1007900000000002000078C400000002000078C5DC
-:1007A00000000002000078C600000002000079246A
-:1007B00000000002000079250000000200007926F8
-:1007C00000000004000000F2000000020000792494
-:1007D00000000002000079250000000200007926D8
-:1007E00000000004000000F900000000000000000C
-:1007F00000000000000000000000000000000000F9
-:00000001FF
-/* production radeon ucode r1xx-r6xx */
diff --git a/firmware/radeon/R300_cp.bin.ihex b/firmware/radeon/R300_cp.bin.ihex
deleted file mode 100644
index d307d56882c9..000000000000
--- a/firmware/radeon/R300_cp.bin.ihex
+++ /dev/null
@@ -1,130 +0,0 @@
-:10000000000000004200E000000000004000E000AE
-:1000100000000008000000AE00000008000000B270
-:100020000000000067554B4A000000004A4A447532
-:100030000000000055527D83000000004A8C8B6553
-:10004000000000004AEF4AF6000000004AE14A4A78
-:1000500000000000E497979700000000DB4AEBDD0A
-:10006000000000009CCC4A4A00000000D1989898FB
-:10007000000000004A0F9AD600000004000CA00007
-:1000800000000038000D0012000000040000E8B479
-:1000900000000038000D0014000000040000E8B665
-:1000A00000000038000D0016000000040000E854B5
-:1000B00000000038000D0018000000040000E855A2
-:1000C00000000038000D001A000000040000E8568F
-:1000D00000000038000D001C000000040000E8577C
-:1000E00000000038000D001E000000040000E8249D
-:1000F00000000038000D0020000000040000E8258A
-:1001000000000038000D0022000000040000E8306C
-:1001100000000038000D0024000000040000F0C0C2
-:1001200000000038000D0026000000040000F0C1AF
-:1001300000000038000D0028000000040000F0411D
-:1001400000000038000D002A000000040000F184C7
-:1001500000000038000D002C000000040000F185B4
-:1001600000000038000D002E000000040000F186A1
-:1001700000000038000D0030000000040000F1878E
-:1001800000000038000D0032000000040000F18083
-:1001900000000038000D0034000000040000F3935C
-:1001A00000000038000D0036000000040000F38A53
-:1001B00000000038000D0038000000040000F38E3D
-:1001C000000000040000E821000000040140A0003D
-:1001D00000000018000000430000000400CCE8000C
-:1001E00000000004001B000100000004080048009B
-:1001F00000000004001B000100000004080048008B
-:1002000000000004001B000100000004080048007A
-:10021000000000080000003A000000000000A000FC
-:10022000000000042000451D000000040000E580DF
-:1002300000000004000CE581000000040800458077
-:1002400000000004000CE5810000000800000047E9
-:10025000000000000000A00000000004000C2000CE
-:10026000000000040000E50E000000040003200070
-:10027000000000280002205100000024000000516E
-:10028000000000040800450F000000080000A04B1B
-:10029000000000040000E565000000040000E566C1
-:1002A00000000008000000520000000403CCA5B4C8
-:1002B00000000004054320000000000400022000AC
-:1002C000000000304CCCE05E0000000408274565CB
-:1002D000000000300000005E0000000408004564DB
-:1002E000000000040000E566000000080000005562
-:1002F00000000010008020610000000400202000A9
-:1003000000000004001B00FF00000010010000645A
-:1003100000000004001F200000000004001C00FF7B
-:100320000000000C00000000000000300000008011
-:100330000000000800000055000000040000E57601
-:1003400000000004000CA0000000000400012000D8
-:100350000000000400082000000000041800650EE2
-:10036000000000040009200000000004000A200032
-:1003700000000004000F0000000000040040000026
-:100380000000001800000074000000040000E56395
-:10039000000000C200C0E5F900000008000000698C
-:1003A000000000080000A069000000040000E576DD
-:1003B000000000040000E577000000040000E50EE6
-:1003C000000000040000E50F000000040140A00050
-:1003D0000000001800000077000000C200C0E5F92E
-:1003E0000000000800000077000000040014E50E83
-:1003F000000000040040E50F0000000800C0007A83
-:10040000000000040000E570000000040000E57139
-:100410000000000C0000E572000000040000A000D5
-:10042000000000040140A000000000040000E56896
-:1004300000000004000C20000000001800000084F0
-:1004400000000004000B00000000000418C0E5627A
-:1004500000000008000000860000000800C00085C1
-:1004600000000004000700E30000003800000092D4
-:1004700000000030000CA09400000004080045BB00
-:1004800000000030000C2095000000000800E5BCD2
-:10049000000000040000E5BB000000000000E5BC17
-:1004A0000000000C00120000000000040012000018
-:1004B0000000000C001B0002000000040000A0006F
-:1004C000000000040000E821000000000000E80037
-:1004D000000000040000E821000000000000E82EF9
-:1004E0000000000402CCA000000000040014000082
-:1004F00000000004000CE1CC00000004050DE1CD7B
-:10050000000000040040000000000018000000A4EB
-:100510000000000400C0A00000000008000000A1CE
-:1005200000000020000000A6000000004200E000E3
-:1005300000000038000000AD00000004000CA00026
-:10054000000000040014000000000004000C200063
-:10055000000000040016000000000004700CE00021
-:1005600000000008001400A9000000004000E000A6
-:10057000000000040240000000000004400EE00003
-:100580000000000402400000000000004000E00005
-:1005900000000004000C2000000000040240E51BE5
-:1005A000000000050080E50A000000050080E50B62
-:1005B000000000040022000000000004000700E327
-:1005C00000000038000000C000000030000C209542
-:1005D000000000050880E5BD00000030000C2094FC
-:1005E000000000050800E5BB00000030000C20956D
-:1005F000000000050880E5BC00000008000000C302
-:10060000000000050080E5BD000000050000E5BB1E
-:10061000000000050080E5BC00000004002100008F
-:1006200000000004028000000000001800C000C7A5
-:10063000000000404180E00000000024000000C9EC
-:100640000000000C010000000000000C0100E51D8E
-:1006500000000004000045BB00000008000080C34B
-:10066000000000040000F3CE000000040140A000E0
-:100670000000000400CC20000000004008C053CF60
-:100680000000000000008000000000040000F3D221
-:10069000000000040140A0000000000400CC200085
-:1006A0000000004008C053D300000000000080009C
-:1006B000000000040000F39D000000040140A000C1
-:1006C0000000000400CC20000000004008C0539E41
-:1006D00000000000000080000000000403C008309B
-:1006E000000000004200E000000000040000A00044
-:1006F00000000004200045E0000000000000E5E1EB
-:10070000000000000000000100000004000700E0FD
-:10071000000000000800E39400000000000000005A
-:10072000000000040000E8C4000000040000E8C568
-:10073000000000040000E8C6000000040000E928F2
-:10074000000000040000E929000000040000E92A7C
-:1007500000000008000000E4000000040000E92898
-:10076000000000040000E929000000040000E92A5C
-:1007700000000008000000EB0000000402C02000A0
-:10078000000000040006000000000034000000F338
-:1007900000000008000000F00000000400008000DD
-:1007A00000000000C000E0000000000000000000A9
-:1007B00000000004000C200000000004001D0018D0
-:1007C00000000004001A000100000034000000FBDB
-:1007D000000000080000004A000000080500A04AD0
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:00000001FF
-/* production radeon ucode r1xx-r6xx */
diff --git a/firmware/radeon/R420_cp.bin.ihex b/firmware/radeon/R420_cp.bin.ihex
deleted file mode 100644
index 3815891275f9..000000000000
--- a/firmware/radeon/R420_cp.bin.ihex
+++ /dev/null
@@ -1,130 +0,0 @@
-:10000000000000004200E000000000004000E000AE
-:100010000000000800000099000000080000009D9A
-:10002000000000004A554B4A000000004A4A44675D
-:100030000000000055526F75000000004A7E7D658B
-:1000400000000000D9D3DFF6000000004AC54A4A8C
-:1000500000000000C882828200000000BF4ACFC1B9
-:100060000000000087B04A4A00000000B583838387
-:10007000000000004A0F85BA00000004000CA00038
-:1000800000000038000D0012000000040000E8B479
-:1000900000000038000D0014000000040000E8B665
-:1000A00000000038000D0016000000040000E854B5
-:1000B00000000038000D0018000000040000E855A2
-:1000C00000000038000D001A000000040000E8568F
-:1000D00000000038000D001C000000040000E8577C
-:1000E00000000038000D001E000000040000E8249D
-:1000F00000000038000D0020000000040000E8258A
-:1001000000000038000D0022000000040000E8306C
-:1001100000000038000D0024000000040000F0C0C2
-:1001200000000038000D0026000000040000F0C1AF
-:1001300000000038000D0028000000040000F0411D
-:1001400000000038000D002A000000040000F184C7
-:1001500000000038000D002C000000040000F185B4
-:1001600000000038000D002E000000040000F186A1
-:1001700000000038000D0030000000040000F1878E
-:1001800000000038000D0032000000040000F18083
-:1001900000000038000D0034000000040000F3935C
-:1001A00000000038000D0036000000040000F38A53
-:1001B00000000038000D0038000000040000F38E3D
-:1001C000000000040000E821000000040140A0003D
-:1001D00000000018000000430000000400CCE8000C
-:1001E00000000004001B000100000004080048009B
-:1001F00000000004001B000100000004080048008B
-:1002000000000004001B000100000004080048007A
-:10021000000000080000003A000000000000A000FC
-:10022000000000042000451D000000040000E580DF
-:1002300000000004000CE581000000040800458077
-:1002400000000004000CE5810000000800000047E9
-:10025000000000000000A00000000004000C2000CE
-:10026000000000040000E50E000000040003200070
-:10027000000000280002205100000024000000516E
-:10028000000000040800450F000000080000A04B1B
-:10029000000000040000E565000000040000E566C1
-:1002A00000000008000000520000000403CCA5B4C8
-:1002B00000000004054320000000000400022000AC
-:1002C000000000304CCCE05E0000000408274565CB
-:1002D000000000300000005E0000000408004564DB
-:1002E000000000040000E566000000080000005562
-:1002F00000000010008020610000000400202000A9
-:1003000000000004001B00FF00000010010000645A
-:1003100000000004001F200000000004001C00FF7B
-:100320000000000C0000000000000030000000721F
-:100330000000000800000055000000040000E57601
-:10034000000000040000E577000000040000E50E56
-:10035000000000040000E50F000000040140A000C0
-:100360000000001800000069000000C200C0E5F9AC
-:100370000000000800000069000000040014E50E01
-:10038000000000040040E50F0000000800C0006C01
-:10039000000000040000E570000000040000E571AA
-:1003A0000000000C0000E572000000040000A00046
-:1003B000000000040140A000000000040000E56807
-:1003C00000000004000C200000000018000000766F
-:1003D00000000004000B00000000000418C0E562EB
-:1003E00000000008000000780000000800C000774E
-:1003F00000000004000700C7000000380000008073
-:10040000000000040000E5BB000000000000E5BCA7
-:10041000000000040000A000000000040000E8212B
-:10042000000000000000E800000000040000E821D7
-:10043000000000000000E82E0000000402CCA00034
-:10044000000000040014000000000004000CE1CCD7
-:1004500000000004050DE1CD000000040040000094
-:10046000000000180000008F0000000400C0A00081
-:10047000000000080000008C000000200000009137
-:10048000000000004200E00000000038000000987A
-:1004900000000004000CA000000000040014000094
-:1004A00000000004000C2000000000040016000002
-:1004B00000000004700CE00000000008001400942C
-:1004C000000000004000E0000000000402400000C6
-:1004D00000000004400EE0000000000402400000A4
-:1004E000000000004000E00000000004000C2000BC
-:1004F000000000040240E51B000000050080E50A42
-:10050000000000050080E50B000000040022000050
-:1005100000000004000700C700000038000000A42D
-:10052000000000050080E5BD000000050000E5BBFF
-:10053000000000050080E5BC000000040021000070
-:1005400000000004028000000000001800C000ABA2
-:10055000000000404180E00000000024000000ADE9
-:100560000000000C010000000000000C0100E51D6F
-:1005700000000004000045BB00000008000080A748
-:10058000000000040000F3CE000000040140A000C1
-:100590000000000400CC20000000004008C053CF41
-:1005A0000000000000008000000000040000F3D202
-:1005B000000000040140A0000000000400CC200066
-:1005C0000000004008C053D300000000000080007D
-:1005D000000000040000F39D000000040140A000A2
-:1005E0000000000400CC20000000004008C0539E22
-:1005F00000000000000080000000000403C008307C
-:10060000000000004200E000000000040000A00024
-:1006100000000004200045E0000000000000E5E1CB
-:10062000000000000000000100000004000700C4FA
-:10063000000000000800E39400000000000000003B
-:10064000000000040000E8C4000000040000E8C549
-:10065000000000040000E8C6000000040000E928D3
-:10066000000000040000E929000000040000E92A5D
-:1006700000000008000000C8000000040000E92895
-:10068000000000040000E929000000040000E92A3D
-:1006900000000008000000CF0000000402C020009D
-:1006A000000000040006000000000034000000D735
-:1006B00000000008000000D40000000400008000DA
-:1006C00000000000C000E000000000040000E1CCD9
-:1006D000000000040500E1CD00000004000CA000B3
-:1006E00000000034000000DE00000008000000DA16
-:1006F000000000000000A000000000040019E1CC90
-:1007000000000004001B0001000000040500A00020
-:1007100000000004080041CD00000004000CA0000F
-:1007200000000034000000FB000000080000004A48
-:1007300000000000000000000000000000000000B9
-:1007400000000000000000000000000000000000A9
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B00000000004000C200000000004001D0018D0
-:1007C00000000004001A000100000034000000FBDB
-:1007D000000000080000004A000000080500A04AD0
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:00000001FF
-/* production radeon ucode r1xx-r6xx */
diff --git a/firmware/radeon/R520_cp.bin.ihex b/firmware/radeon/R520_cp.bin.ihex
deleted file mode 100644
index 372ff82a0143..000000000000
--- a/firmware/radeon/R520_cp.bin.ihex
+++ /dev/null
@@ -1,130 +0,0 @@
-:10000000000000004200E000000000004000E000AE
-:100010000000000800000099000000080000009D9A
-:10002000000000004A554B4A000000004A4A44675D
-:100030000000000055526F75000000004A7E7D658B
-:1000400000000000E0DAE6F6000000004AC54A4A77
-:1000500000000000C882828200000000BF4ACFC1B9
-:100060000000000087B04AD500000000B5838383FC
-:10007000000000004A0F85BA00000004000CA00038
-:1000800000000038000D0012000000040000E8B479
-:1000900000000038000D0014000000040000E8B665
-:1000A00000000038000D0016000000040000E854B5
-:1000B00000000038000D0018000000040000E855A2
-:1000C00000000038000D001A000000040000E8568F
-:1000D00000000038000D001C000000040000E8577C
-:1000E00000000038000D001E000000040000E8249D
-:1000F00000000038000D0020000000040000E8258A
-:1001000000000038000D0022000000040000E8306C
-:1001100000000038000D0024000000040000F0C0C2
-:1001200000000038000D0026000000040000F0C1AF
-:1001300000000038000D0028000000040000E0006E
-:1001400000000038000D002A000000040000E0005C
-:1001500000000038000D002C000000040000E0004A
-:1001600000000038000D002E000000040000E00038
-:1001700000000038000D0030000000040000E00026
-:1001800000000038000D0032000000040000F18083
-:1001900000000038000D0034000000040000F3935C
-:1001A00000000038000D0036000000040000F38A53
-:1001B00000000038000D0038000000040000F38E3D
-:1001C000000000040000E821000000040140A0003D
-:1001D00000000018000000430000000400CCE8000C
-:1001E00000000004001B000100000004080048009B
-:1001F00000000004001B000100000004080048008B
-:1002000000000004001B000100000004080048007A
-:10021000000000080000003A000000000000A000FC
-:10022000000000042000451D000000040000E580DF
-:1002300000000004000CE581000000040800458077
-:1002400000000004000CE5810000000800000047E9
-:10025000000000000000A00000000004000C2000CE
-:10026000000000040000E50E000000040003200070
-:10027000000000280002205100000024000000516E
-:10028000000000040800450F000000080000A04B1B
-:10029000000000040000E565000000040000E566C1
-:1002A00000000008000000520000000403CCA5B4C8
-:1002B00000000004054320000000000400022000AC
-:1002C000000000304CCCE05E0000000408274565CB
-:1002D000000000300000005E0000000408004564DB
-:1002E000000000040000E566000000080000005562
-:1002F00000000010008020610000000400202000A9
-:1003000000000004001B00FF00000010010000645A
-:1003100000000004001F200000000004001C00FF7B
-:100320000000000C0000000000000030000000721F
-:100330000000000800000055000000040000E57601
-:10034000000000040000E577000000040000E50E56
-:10035000000000040000E50F000000040140A000C0
-:100360000000001800000069000000C200C0E5F9AC
-:100370000000000800000069000000040014E50E01
-:10038000000000040040E50F0000000800C0006C01
-:10039000000000040000E570000000040000E571AA
-:1003A0000000000C0000E572000000040000A00046
-:1003B000000000040140A000000000040000E56807
-:1003C00000000004000C200000000018000000766F
-:1003D00000000004000B00000000000418C0E562EB
-:1003E00000000008000000780000000800C000774E
-:1003F00000000004000700C7000000380000008073
-:10040000000000040000E5BB000000000000E5BCA7
-:10041000000000040000A000000000040000E8212B
-:10042000000000000000E800000000040000E821D7
-:10043000000000000000E82E0000000402CCA00034
-:10044000000000040014000000000004000CE1CCD7
-:1004500000000004050DE1CD000000040040000094
-:10046000000000180000008F0000000400C0A00081
-:10047000000000080000008C000000200000009137
-:10048000000000004200E00000000038000000987A
-:1004900000000004000CA000000000040014000094
-:1004A00000000004000C2000000000040016000002
-:1004B00000000004700CE00000000008001400942C
-:1004C000000000004000E0000000000402400000C6
-:1004D00000000004400EE0000000000402400000A4
-:1004E000000000004000E00000000004000C2000BC
-:1004F000000000040240E51B000000050080E50A42
-:10050000000000050080E50B000000040022000050
-:1005100000000004000700C700000038000000A42D
-:10052000000000050080E5BD000000050000E5BBFF
-:10053000000000050080E5BC000000040021000070
-:1005400000000004028000000000001800C000ABA2
-:10055000000000404180E00000000024000000ADE9
-:100560000000000C010000000000000C0100E51D6F
-:1005700000000004000045BB00000008000080A748
-:10058000000000040000F3CE000000040140A000C1
-:100590000000000400CC20000000004008C053CF41
-:1005A0000000000000008000000000040000F3D202
-:1005B000000000040140A0000000000400CC200066
-:1005C0000000004008C053D300000000000080007D
-:1005D000000000040000F39D000000040140A000A2
-:1005E0000000000400CC20000000004008C0539E22
-:1005F00000000000000080000000000403C008307C
-:10060000000000004200E000000000040000A00024
-:1006100000000004200045E0000000000000E5E1CB
-:10062000000000000000000100000004000700C4FA
-:10063000000000000800E39400000000000000003B
-:10064000000000040000E8C4000000040000E8C549
-:10065000000000040000E8C6000000040000E928D3
-:10066000000000040000E929000000040000E92A5D
-:1006700000000008000000C8000000040000E92895
-:10068000000000040000E929000000040000E92A3D
-:1006900000000008000000CF00000000DEADBEEF4B
-:1006A000000000000000011600000004000700D355
-:1006B00000000004080050E700000004000700D418
-:1006C000000000040800401C000000000000E01DC5
-:1006D0000000000402C0200000000004000600002A
-:1006E00000000034000000DE00000008000000DB15
-:1006F000000000040000800000000000C000E000D6
-:10070000000000040000E1CC000000040500E1CD81
-:1007100000000004000CA00000000034000000E510
-:1007200000000008000000E1000000000000A00040
-:10073000000000040019E1CC00000004001B0001CF
-:10074000000000040500A00000000004080041CDE6
-:1007500000000004000CA00000000034000000FBBA
-:10076000000000080000004A000000000000000037
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B00000000004000C200000000004001D0018D0
-:1007C00000000004001A000100000034000000FBDB
-:1007D000000000080000004A000000080500A04AD0
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:00000001FF
-/* production radeon ucode r1xx-r6xx */
diff --git a/firmware/radeon/R600_me.bin.ihex b/firmware/radeon/R600_me.bin.ihex
deleted file mode 100644
index 30d4c14a308d..000000000000
--- a/firmware/radeon/R600_me.bin.ihex
+++ /dev/null
@@ -1,1345 +0,0 @@
-:1000000000000000C020040000000000000000000C
-:1000100000A0000A000000000000FFFF00284621A9
-:100020000000000000000000D900480000000000AF
-:1000300000000000C02004000000000000000000DC
-:1000400000A0000A000000000000000000E0000026
-:100050000000000000010000C02946200000000050
-:1000600000000000D900480000000000000000006F
-:10007000C0200400000000000000000000A0000AF2
-:10008000000000008100000000204411000000007A
-:1000900000000001002048110000000000042004BE
-:1000A0000060441100000614000000000060000021
-:1000B000000005B20000000000600000000005C55F
-:1000C00000000000C02008000000000000000F0039
-:1000D000002816220000000000000008002116255C
-:1000E0000000000000000020002036250000000075
-:1000F0008D000000002044110000000000000004FA
-:10010000002F022500000000000000000CE00000AD
-:1001100000000018004120000040481100000019B4
-:100120000042200000204811000000008E00000066
-:1001300000204411000000000000003100204A2D82
-:1001400000000000900000000020441100000000AA
-:100150000000000000204805000000000000000C26
-:1001600000211622000000000000000300281625D0
-:10017000000000000000001900211A220000000009
-:100180000000000400281A26000000000000000003
-:10019000002914C5000000000000002100203625C1
-:1001A0000000000000000000003A140200000000FF
-:1001B00000000016002116250000000000000003CA
-:1001C00000281625000000000000001D00200E2D54
-:1001D00000000000FFFFFFFC00280E2300000000CD
-:1001E00000000000002914A3000000000000001D12
-:1001F00000203625000000000000800000280E22AC
-:10020000000000000000000700220E230000000094
-:10021000000000000029386E0000000020000000EF
-:1002200000280E22000000000000000600210E231E
-:1002300000000000000000000029386E00000000EF
-:100240000000000000220222000000000000000068
-:1002500014E0000000000038000000002EE0000064
-:1002600000000035000000002CE000000000003716
-:100270000000000000400E2D0000003900000008C2
-:1002800000200E2D00000000000000090040122D8B
-:10029000000000460000000100400E2D0000003963
-:1002A00000000000C0200C0000000000003FFFFC28
-:1002B0000028122300000000000000020022122487
-:1002C000000000000000001F00211E2300000000AD
-:1002D0000000000014E000000000003E00000008E4
-:1002E00000401C11000000410000000D00201E2DE8
-:1002F000000000000000000F00281E270000000082
-:100300000000000300221E27000000007FC0000044
-:1003100000281A23000000000000001400211A2603
-:10032000000000000000000100331A260000000059
-:100330000000000800221A26000000000000000053
-:1003400000290CC700000000000000300020362407
-:100350000000000000007F000028122100000000C3
-:1003600000001400002F0224000000000000000024
-:100370000CE000000000004B0000000100290E23EB
-:1003800000000000000000100020362300000000E4
-:100390000000E0000020441100000000FFF8000011
-:1003A00000294A230000000000000000003A2C024F
-:1003B000000000000000000200220E2B00000000E0
-:1003C000FC00000000280E230000000000000011C7
-:1003D000002036230000000000001FFF00294A23F0
-:1003E000000000000000003000204A2D0000000046
-:1003F0000000000000204811000000000000003252
-:1004000000200E2D00000000060A020000294A23E9
-:100410000000000000000000002048110000000063
-:100420000000000000204811000000000000000152
-:1004300000210222000000000000000014E0000083
-:1004400000000061000000002EE000000000005FDE
-:10045000000000002CE000000000005E0000000032
-:1004600000400E2D000000620000000100400E2D33
-:10047000000000620000000A00200E2D00000000B5
-:100480000000000B0040122D0000006A0000000078
-:10049000C0200C0000000000003FFFFC00281223D9
-:1004A00000000000000000020022122400000000F2
-:1004B0007FC0000000281623000000000000001488
-:1004C0000021162500000000000000010033162561
-:1004D000000000008000000000280E230000000043
-:1004E0000000000000290CA3000000003FFFFC00FA
-:1004F00000290E23000000000000001F00211E2321
-:10050000000000000000000014E000000000006D8A
-:100510000000010000401C11000000700000000DF0
-:1005200000201E2D00000000000000F000281E2703
-:10053000000000000000000400221E270000000050
-:100540008100000000204411000000000000000DA8
-:100550000020481100000000FFFFF0FF00281A30C3
-:10056000000000000000A02800204411000000004E
-:1005700000000000002948E6000000000000A0186C
-:1005800000204411000000003FFFFFFF00284A2325
-:10059000000000000000A010002044110000000036
-:1005A0000000000000204804000000000000002DB2
-:1005B0000020162D0000000000000000002F00A306
-:1005C00000000000000000000CC0000000000080DF
-:1005D0000000002E0020162D00000000000000008A
-:1005E000002F00A400000000000000000CC000006C
-:1005F00000000081000000000040000000000087B3
-:100600000000002D00203623000000000000002E16
-:1006100000203624000000000000001D00201E2DD8
-:10062000000000000000000200210227000000007E
-:100630000000000014E0000000000087000000003F
-:1006400000600000000005ED0000000000600000F8
-:10065000000005E10000000200210E220000000061
-:100660000000000014C000000000008A0000001814
-:10067000C040362000000090000000002EE0000086
-:100680000000008E000000002CE000000000008D43
-:100690000000000200400E2D0000008F000000034B
-:1006A00000400E2D0000008F0000000C00200E2DD9
-:1006B00000000000000000180020362300000000A9
-:1006C0000000000300210E220000000000000000D6
-:1006D00014C00000000000950000A00C0020441190
-:1006E0000000000000000000C020480000000000E2
-:1006F00000000000C04048000000009D0000A00C69
-:1007000000204411000000000000000000204811FB
-:1007100000000000000000002EE000000000009B30
-:10072000000000002CE000000000009A0000000221
-:1007300000400E2D0000009C0000000300400E2D24
-:100740000000009C0000000C00200E2D00000000A6
-:10075000000000000020480300000000000000002E
-:10076000003A0C0200000000003F000000280E23A9
-:10077000000000000000001000210E230000000017
-:100780000000001300203623000000000000001EBF
-:100790000021022B000000000000000014C0000037
-:1007A000000000A40000001CC02036200000000053
-:1007B0000000001F0021022B0000000000000000CC
-:1007C00014C00000000000A70000001BC02036205D
-:1007D000000000000000000800210E2B00000000B7
-:1007E0000000007F00280E23000000000000000031
-:1007F000002F022300000000000000000CE00000B9
-:10080000000000DB000000002700000000000000E6
-:1008100000000000006000000000028C8100000069
-:1008200000204411000000000000000600204811D4
-:10083000000000000000000C00221E30000000003C
-:100840009980000000204411000000000000000416
-:100850000020122D000000000000000800221224D9
-:10086000000000000000001000201811000000002F
-:100870000000000000291CE400000000000000004F
-:1008800000604807000001289B0000000020441180
-:1008900000000000000000000020480200000000EE
-:1008A0009C00000000204411000000000000000037
-:1008B0000033146F000000000000000100333E23ED
-:1008C0000000000000000000D90048000000000007
-:1008D0000000000000203C05000000008100000036
-:1008E00000204411000000000000000E002048110C
-:1008F00000000000000000000020101000000000B8
-:100900000000E00700204411000000000000000F7C
-:100910000021022B000000000000000014C00000B5
-:10092000000000C500F8FF0800204811000000008A
-:100930009800000000404811000000D6000000F0C0
-:1009400000280E2200000000000000A0002F02235B
-:1009500000000000000000000CC00000000000D4F7
-:100960000000001300200E2D000000000000000118
-:10097000002F022300000000000000000CE0000037
-:10098000000000CF00000002002F02230000000042
-:10099000000000000CE00000000000CE00003F005E
-:1009A00000400C11000000D000001F0000400C119E
-:1009B000000000D000000F0000200C11000000001B
-:1009C0000038000900294A23000000003F00000011
-:1009D00000280E2B000000000000000200220E2361
-:1009E000000000000000000700494A23000000D674
-:1009F00000380F09002048110000000068000007BF
-:100A000000204811000000000000000800214A27D3
-:100A1000000000000000000000204811000000005D
-:100A2000060A020000294A2400000000000000001D
-:100A300000204811000000000000000000204811C4
-:100A4000000000000000A20200204411000000008D
-:100A500000FF000000284A220000000000000030D3
-:100A600000200E2D000000000000002E0020122D9E
-:100A70000000000000000000002F008300000000C4
-:100A8000000000000CE00000000000E30000000097
-:100A900000600000000005E70000000000400000CA
-:100AA000000000E40000000000600000000005EA13
-:100AB000000000070020222D0000000000000005BB
-:100AC00000220E22000000000010000000280E236B
-:100AD0000000000000000000002920680000000065
-:100AE00000000000003A0C0200000000000000EFCF
-:100AF00000280E23000000000000000000292068EC
-:100B0000000000000000001D00200E2D000000006D
-:100B1000000000030021022300000000000000008C
-:100B200014E00000000000F10000000B002102288A
-:100B3000000000000000000014C00000000000F1F0
-:100B40000000040000292228000000000000001A14
-:100B500000203628000000000000001C00210E22AA
-:100B6000000000000000000014C00000000000F6BB
-:100B70000000A30C00204411000000000000000051
-:100B800000204811000000000000001E00210E227D
-:100B9000000000000000000014C00000000001047C
-:100BA0000000A30F0020441100000000000000130B
-:100BB00000200E2D0000000000000001002F022385
-:100BC00000000000000000000CC00000000000FD5C
-:100BD000FFFFFFFF00404811000001040000000279
-:100BE000002F022300000000000000000CC00000E5
-:100BF000000001000000FFFF004048110000010458
-:100C000000000004002F022300000000000000008C
-:100C10000CC0000000000103000000FF004048116C
-:100C20000000010400000001002048110000000045
-:100C30000002C40000204411000000000000001F5A
-:100C400000210E22000000000000000014C000007F
-:100C50000000010B0000001040210E2000000000E9
-:100C600000000019002036230000000000000018DA
-:100C700040224A200000000000000010C0424A202C
-:100C80000000010D0000000000200C110000000019
-:100C900000000019002036230000000000000000C2
-:100CA0000020481100000000000000000020481152
-:100CB000000000000000000A0020101100000000E9
-:100CC00000000000002F02240000000000000000CF
-:100CD0000CE000000000011400000000002048119A
-:100CE0000000000000000001005312240000011069
-:100CF000FFBFFFFF00283A2E000000000000001B8D
-:100D000000210222000000000000000014C00000CA
-:100D100000000127810000000020441100000000B5
-:100D20000000000D00204811000000000000001825
-:100D300000220E3000000000FC00000000280E23FE
-:100D400000000000810000000020441100000000AD
-:100D50000000000E0020481100000000000000000C
-:100D600000201010000000000000E00E00204411E0
-:100D70000000000007F8FF080020481100000000F4
-:100D80000000000000294A230000000000000024A9
-:100D900000201E2D000000000000000800214A274E
-:100DA00000000000000000000020481100000000CA
-:100DB000060A020000294A2400000000000000008A
-:100DC0000020481100000000000000000020481131
-:100DD0000000000000000000008000000000000093
-:100DE000810000000020441100000000000000010C
-:100DF00000204811000000000000217C0020441168
-:100E000000000000008000000020481100000000E9
-:100E1000000000000020480600000000000000085C
-:100E200000214A2700000000000000001700000019
-:100E3000000000000004217F00604411000006143F
-:100E40000000001F00210230000000000000000030
-:100E500014C00000000006130000000400404C1104
-:100E60000000012E00000000006000000000000BE8
-:100E70000000000000600411000002FE00000000FD
-:100E800000200411000000000000000000600811B4
-:100E90000000019F00000000006000000000015100
-:100EA0000000FFFF40280E2000000000000000109E
-:100EB000C0211220000000000000FFFF4028062093
-:100EC0000000000000000010C0210A200000000007
-:100ED0000000000000341461000000000000000069
-:100EE00000741882000002A40001A1FD00604411FA
-:100EF000000002C900003FFF002F022F0000000089
-:100F0000000000000CC000000000013800000000DC
-:100F1000C04004000000000100000000006000006C
-:100F20000000000B0000000000600411000002FE41
-:100F3000000000000020041100000000000000007C
-:100F4000006008110000019F00003FFF002F022FEA
-:100F500000000000000000000CE0000000000000A5
-:100F600000000000006000000000015100000010BF
-:100F700040210E20000000000000FFFFC0281220CA
-:100F800000000000000000104021162000000000BA
-:100F90000000FFFFC0681A20000002A40001A1FDAC
-:100FA00000604411000002C900003FFF002F022F23
-:100FB00000000000000000000CC00000000001491B
-:100FC00000000000C0400400000000010000225C9E
-:100FD00000204411000000000000000100300A2F32
-:100FE000000000000000000100210A2200000000B3
-:100FF0000000000300384A220000000000002256D2
-:1010000000204411000000000000001A00204811D8
-:10101000000000000000A1FC0020441100000000BE
-:1010200000000001008048110000000000000000E6
-:10103000006000000000000B0000000000600000E5
-:101040000000017C00000000006000000000018D35
-:1010500000003FFF002F022F0000000000000000F2
-:101060000CE00000000000000000000000202C0840
-:10107000000000000000000000202411000000001B
-:10108000000000000020281100000000000022568F
-:10109000002044110000000000000016002048114C
-:1010A000000000000000225C00204411000000004D
-:1010B00000000003002048110000000093800000A1
-:1010C00000204411000000000000000200221E2940
-:1010D0000000000000000000007048EB00000189E3
-:1010E0000000000000600000000002A400000001F9
-:1010F000403306200000000000000000C03024093A
-:101100000000000000003FFF002F022F0000000041
-:10111000000000000CE000000000000000000000E3
-:10112000006000000000028C9500000000204411C7
-:101130000000000000000000002F0221000000005D
-:10114000000000000CE0000000000173000000003F
-:10115000C0204800000000000000000100530621EC
-:101160000000016F92000000002044110000000008
-:1011700000000000C0604800000001840001A1FDE3
-:101180000020441100000000000000130020062D84
-:1011900000000000000000000078042A000002E4C3
-:1011A00000000000002028090000000000003FFFB0
-:1011B000002F022F00000000000000000CC0000003
-:1011C0000000016500000000C040040000000001B4
-:1011D0000000021000600411000002FE00003FFF4A
-:1011E000002F022F00000000000000000CE00000B3
-:1011F000000001810000001BC0203620000000001C
-:101200000000001CC0203620000000003F800000CD
-:1012100000200411000000004600000000600811DA
-:101220000000019F0000000000800000000000009E
-:101230000000A1FC002044110000000000003FFF5E
-:10124000002F022F00000000000000000CC0000072
-:10125000000001880000000100804811000000002B
-:101260000000002100804811000000000000FFFF86
-:1012700040280E200000000000000010C0211220B5
-:10128000000000000000FFFF4028162000000000C2
-:1012900000000010C0811A20000000008100000042
-:1012A000002044110000000000000006002048114A
-:1012B000000000000000000800221E3000000000B6
-:1012C0000000003200201A2D000000000000E000A5
-:1012D0000020441100000000FFFBFF09002048111E
-:1012E00000000000000000110020222D000000007E
-:1012F00000001FFF00294A2800000000000000062F
-:101300000020222D0000000000000000002920E83D
-:10131000000000000000000000204808000000005D
-:10132000000000000020481100000000060A020032
-:1013300000294A260000000000000000002048119B
-:101340000000000000000000002048110000000024
-:10135000000001000020181100000000000000083B
-:1013600000621E28000001280000000800822228D8
-:10137000000000000002C000002044110000000036
-:101380000000001B00600E2D000001AA0000001CE0
-:1013900000600E2D000001AA0000C00800204411CA
-:1013A000000000000000001D00200E2D00000000C5
-:1013B0000000000014C00000000001A600000000B2
-:1013C000002004110000000000000000002048017F
-:1013D000000000003900000000204811000000005B
-:1013E0000000000000204811000000000000000084
-:1013F00000804802000000000000002000202E2D88
-:101400000000000000000000003B0D630000000031
-:101410000000000800224A23000000000000001025
-:1014200000224A23000000000000001800224A2386
-:1014300000000000000000000080480300000000E1
-:1014400000000000006000000000000B0000100021
-:1014500000600411000002FE0000000000200411E2
-:101460000000000000000000006008110000019F63
-:10147000000000070021062F0000000000000019F6
-:1014800000200A2D000000000000000100202C11A7
-:10149000000000000000FFFF4028222000000000A4
-:1014A0000000000F002622280000000000000010AD
-:1014B00040212620000000000000000F0026262901
-:1014C00000000000000000000020280200000000D2
-:1014D0000000225600204411000000000000001B04
-:1014E000002048110000000000000000002F022131
-:1014F00000000000000000000CE00000000001CD32
-:101500000000225C00204411000000000000008167
-:1015100000204811000000000000A1FC0020441140
-:101520000000000000000001002048110000000041
-:101530000000008000201C110000000000000000DE
-:10154000002F022700000000000000000CE0000057
-:10155000000001C90000000000600000000001D68A
-:101560000000000100531E27000001C5000000011B
-:1015700000202C11000000000000001F00280A229B
-:10158000000000000000001F00282A2A00000000C0
-:101590000000000100530621000001BE0000225C93
-:1015A00000204411000000000000000200304A2F1B
-:1015B000000000000000A1FC002044110000000019
-:1015C00000000001002048110000000000000001A0
-:1015D00000301E2F0000000000000000002F022736
-:1015E00000000000000000000CE00000000000000F
-:1015F0000000000000600000000001D600000001B3
-:1016000000531E27000001D20000FFFF40280E20DB
-:10161000000000000000000F00260E230000000064
-:1016200000000010C0211220000000000000000F88
-:101630000026122400000000000000000020141109
-:10164000000000000000000000601811000002A46B
-:101650000001A1FD00204411000000000000000076
-:10166000002F022B00000000000000000CE0000032
-:10167000000001E500000010002216280000000014
-:10168000FFFF000000281625000000000000FFFFFB
-:1016900000281A290000000000000000002948C5A9
-:1016A00000000000000000000020480A00000000C8
-:1016B0000000000000202C110000000000000010BD
-:1016C0000022162300000000FFFF0000002816255E
-:1016D000000000000000FFFF00281A2400000000A6
-:1016E00000000000002948C50000000000000000C4
-:1016F00000731503000001F200000000002018052F
-:10170000000000000000000000731524000001F23A
-:1017100000000000002D14C50000000000000000C3
-:10172000003008A200000000000000000020480275
-:10173000000000000000000000202802000000005F
-:101740000000000000202003000000000000000056
-:1017500000802404000000000000000F002102258A
-:10176000000000000000000014C00000000006138C
-:1017700000000000002B1405000000000000000124
-:10178000009016250000000000000000006000002E
-:101790000000000B0000000000600411000002FEC9
-:1017A0000000000000200411000000000000000004
-:1017B000006008110000019F000022560020441123
-:1017C000000000000000001A00294A22000000006A
-:1017D00000000000C02000000000000000003FFFEB
-:1017E000002F022F00000000000000000CE00000AD
-:1017F0000000000000000000C02004000000000005
-:101800000000225C002044110000000000000003E2
-:1018100000384A21000000000000A1FC0020441113
-:10182000000000000000000100204811000000003E
-:101830000000FFFF40281220000000000000001000
-:10184000C0211A20000000000000FFFF40280E20E9
-:101850000000000000000010C02116200000000061
-:101860000000000000741465000002A40001A1FD46
-:1018700000604411000002C900000001003306218D
-:101880000000000000000000002F02210000000006
-:10189000000000000CC000000000020600003FFF36
-:1018A000002F022F00000000000000000CC000000C
-:1018B000000001FF00000000C04004000000000123
-:1018C0000000000000600000000005C500000000EE
-:1018D0000040040F00000200000000000060000053
-:1018E000000005B20000000000600000000005C517
-:1018F0000000021000600411000002FE0000000061
-:10190000006000000000018D000000000060000089
-:10191000000001890000000000600000000002A437
-:1019200000000000006000000000028C93800000B6
-:1019300000204411000000000000000000204808C2
-:10194000000000009500000000204411000000008D
-:1019500000000000002F022F000000000000000027
-:101960000CE000000000021F00000000C040480022
-:101970000000021C92000000002044110000000042
-:1019800000000000C02048000000000000002256B7
-:101990000020441100000000000000160020481143
-:1019A000000000000000225C002044110000000044
-:1019B0000000000300204811000000000000A1FC0E
-:1019C0000020441100000000000000010020481128
-:1019D000000000000001A1FD0020441100000000F3
-:1019E0000000000000600411000002E4000000009C
-:1019F000C040040000000001000000000060000082
-:101A0000000005B20000A00C0020441100000000FE
-:101A100000000000C020480000000000000000009E
-:101A2000C04048000000000000000000006000000E
-:101A30000000000B0000001840210A2000000000F8
-:101A400000000003002F0222000000000000000040
-:101A50000AE00000000002350000001A0020222DDC
-:101A600000000000000801010029222800000000F9
-:101A70000000001A00203628000000000000A30C1F
-:101A8000002044110000000000000000C0204800B9
-:101A90000000000000000000C0204800000000001E
-:101AA00000000000C04048000000023A00000000B2
-:101AB000006000000000000B000000100060041136
-:101AC000000002FE3F800000002004110000000022
-:101AD00000000000006008110000019F0000225C6F
-:101AE0000020441100000000000000030020481105
-:101AF000000000000000000000600000000002651F
-:101B00000000001D00201E2D00000000000000014C
-:101B100000211E27000000000000000014E000006B
-:101B2000000002530000001800201E2D00000000DD
-:101B30000000FFFF00281E2700000000000000003A
-:101B400000341C27000000000000000012C000004C
-:101B5000000002480000000000201C1100000000EE
-:101B600000000000002F00E5000000000000000061
-:101B700008C000000000024B000000000020140715
-:101B8000000000000000001800201E2D00000000D2
-:101B90000000001000211E270000000000000000CF
-:101BA00000341C47000000000000000012C00000CC
-:101BB000000002500000000000201C110000000086
-:101BC00000000000002F00E6000000000000000000
-:101BD00008C00000000002530000000000201807A9
-:101BE000000000000000000000600000000002AAE9
-:101BF00000002256002044110000000000000000F8
-:101C000000342023000000000000000012C000008B
-:101C10000000025B000000000034204400000000CF
-:101C20000000000012C000000000025A0000001670
-:101C3000004048110000025F0000001800404811F9
-:101C40000000025F0000000000342044000000009B
-:101C50000000000012C000000000025E000000173B
-:101C6000004048110000025F0000001900204811E8
-:101C7000000000000000A1FC002044110000000052
-:101C80000000000100204811000000000001A1FD3B
-:101C900000604411000002D200003FFF002F022F1D
-:101CA00000000000000000000CC000000000023F27
-:101CB00000000000C040040000000001000000100F
-:101CC00040210620000000000000FFFFC0280A207D
-:101CD000000000000000001040210E200000000065
-:101CE0000000FFFFC02812200000000000000010CC
-:101CF00040211620000000000000FFFFC0881A20CD
-:101D000000000000810000000020441100000000DD
-:101D10000000000100204811000000000004200421
-:101D20000060441100000614000000000060000084
-:101D3000000005B200000000C06000000000028C3E
-:101D40000000000500200A2D00000000000000082F
-:101D500000220A22000000000000003400201A2D9A
-:101D6000000000000000002400201E2D00000000E4
-:101D70000000700000281E27000000000000000086
-:101D800000311CE6000000000000003300201A2D86
-:101D9000000000000000000C00221A2600000000D5
-:101DA00000000000002F00E600000000000000001E
-:101DB00006E000000000027B0000000000201C1173
-:101DC000000000000000000000200C1100000000D6
-:101DD0000000003400203623000000000000001046
-:101DE00000201811000000000000000000691CE243
-:101DF0000000012893800000002044110000000032
-:101E000000000000002048070000000095000000CE
-:101E1000002044110000000000000000002F022FED
-:101E200000000000000000000CE00000000002863E
-:101E30000000000100333E2F000000000000000001
-:101E4000D90048000000000092000000002044116A
-:101E50000000000000000000C0204800000000005A
-:101E60000000002400403627000000000000000CA5
-:101E7000C0220A20000000000000003200203622AC
-:101E80000000000000000031C040362000000000CB
-:101E90000000A2A40020441100000000000000097E
-:101EA0000020481100000000A100000000204411A3
-:101EB0000000000000000001008048110000000048
-:101EC0000000002900201E2D00000000000000007E
-:101ED000002C1CE300000000000000290020362731
-:101EE000000000000000002A00201E2D000000005D
-:101EF00000000000002C1CE4000000000000002A8C
-:101F000000203627000000000000002B00201E2DBE
-:101F10000000000000000000003120A300000000CD
-:101F200000000000002D1D07000000000000002B35
-:101F300000203627000000000000002C00201E2D8D
-:101F40000000000000000000003120C4000000007C
-:101F500000000000002D1D07000000000000002C04
-:101F600000803627000000000000002900203623F2
-:101F7000000000000000002A0020362400000000BD
-:101F80000000000000311CA3000000000000002B36
-:101F900000203627000000000000000000311CC4B3
-:101FA000000000000000002C008036270000000028
-:101FB000000000220020362700000000000000235F
-:101FC00000203628000000000000001D00201E2D0B
-:101FD00000000000000000020021022700000000B5
-:101FE0000000000014C00000000002C50000000056
-:101FF00000400000000002C200000022002036273E
-:10200000000000000000002300203628000000002F
-:102010000000001D00201E2D000000000000000236
-:1020200000210227000000000000000014E0000072
-:10203000000002C20000000300210227000000008F
-:102040000000000014E00000000002C50000002BAA
-:1020500000201E2D0000000000000000002E00E106
-:10206000000000000000000002C00000000002C5E7
-:102070000000002900201E2D0000000000000000CC
-:10208000003120A10000000000000000002E00E848
-:10209000000000000000000006C00000000002C5B3
-:1020A0000000002C00201E2D000000000000000099
-:1020B000002E00E2000000000000000002C000004E
-:1020C000000002C50000002A00201E2D00000000B4
-:1020D00000000000003120C20000000000000000ED
-:1020E000002E00E8000000000000000006C0000014
-:1020F000000002C50000000000600000000005EDC7
-:1021000000000000006000000000029E00000000CF
-:1021100000400000000002C7000000000060000056
-:102120000000029E0000000000600000000005E4C6
-:102130000000000000400000000002C70000000096
-:10214000006000000000029000000000004000005D
-:10215000000002C70000002200201E2D0000000029
-:10216000000000230080222D00000000000000106D
-:1021700000221E2300000000000000000029488704
-:10218000000000000000000000311CA3000000005F
-:102190000000001000221E270000000000000000C8
-:1021A00000294887000000000000001000221E23C4
-:1021B0000000000000000000003120C4000000000A
-:1021C0000000FFFF0028222800000000000000009F
-:1021D00000894907000000000000001000221E23B3
-:1021E00000000000000000000029488700000000F7
-:1021F0000000001000221E2100000000000000006E
-:1022000000294847000000000000000000311CA326
-:10221000000000000000001000221E270000000047
-:1022200000000000002948870000000000000000B6
-:1022300000311CA1000000000000001000221E2739
-:1022400000000000000000000029484700000000D6
-:102250000000001000221E2300000000000000000B
-:10226000003120C4000000000000FFFF00282228E9
-:1022700000000000000000000029490700000000E5
-:102280000000001000221E210000000000000000DD
-:10229000003120C2000000000000FFFF00282228BB
-:1022A0000000000000000000008949070000000055
-:1022B0000000001000221E230000000000000000AB
-:1022C00000294887000000000000000100220A21C8
-:1022D0000000000000000000003308A20000000021
-:1022E0000000001000221E2200000000000000106C
-:1022F0000021222200000000000000000029490700
-:10230000000000000000000000311CA300000000DD
-:102310000000001000221E27000000000000000046
-:1023200000294887000000000000000100220A2167
-:102330000000000000000000003008A200000000C3
-:102340000000001000221E2200000000000000100B
-:10235000002122220000000000000000002949079F
-:10236000000000000000001000221E2300000000FA
-:1023700000000000003120C4000000000000FFFF4A
-:102380000028222800000000000000000029490762
-:102390000000000000000000003808C50000000038
-:1023A00000000000003008410000000000000001B3
-:1023B00000220A220000000000000000003308A2F2
-:1023C000000000000000001000221E22000000009B
-:1023D0000000001000212222000000000000000088
-:1023E00000894907000000000000001D0020222D88
-:1023F000000000000000000014C000000000030105
-:10240000FFFFFFEF00280621000000000000001A77
-:102410000020222D000000000000F8E00020441100
-:102420000000000000000000002949010000000039
-:1024300000000000008949010000000000000000C9
-:10244000002048110000000000000000002048119A
-:1024500000000000060A0200008048110000000091
-:1024600000000000C02000000000000097000000F5
-:10247000C02044110000000000000000C0204811EE
-:10248000000000008A00000000204411000000004D
-:102490000000000000204811000000000000225C45
-:1024A000002044110000000000000000C02048008F
-:1024B000000000000000A1FC00204411000000000A
-:1024C00000000000C02048000000000000000000E4
-:1024D000C0200400000000000000000000A0000A6E
-:1024E00000000000970000000020441100000000E0
-:1024F0000000000000204811000000008A000000D9
-:1025000000204411000000000000000000204811DD
-:10251000000000000000225C0020441100000000C8
-:1025200000000000C0204800000000000000A1FCE6
-:10253000002044110000000000000000C0204800FE
-:102540000000000000000000C020040000000000A7
-:102550000000000000A0000A00000000970000003A
-:10256000002044110000000000000000002048117D
-:10257000000000008A00000000204411000000005C
-:102580000000000000204811000000000000225C54
-:10259000002044110000000000000000C02048009E
-:1025A000000000000000A1FC002044110000000019
-:1025B00000000000C0204800000000000001A1FD54
-:1025C000002044110000000000000000D900480075
-:1025D0000000000000000000C02004000000000017
-:1025E0000000000000A0000A0000000000002257C8
-:1025F000002044110000000000000003C0484A20F1
-:10260000000000000000225D0020441100000000D6
-:1026100000000000C0404800000000000000000072
-:1026200000600000000005C500000000C020080098
-:10263000000000000000225C0020441100000000A7
-:102640000000000300384A22000000000000A1FC46
-:10265000002044110000000000000000C0204800DD
-:10266000000000000001A1FD002044110000000056
-:1026700000000000002F0222000000000000000007
-:102680000CE00000000000000000000040204800B6
-:10269000000000000000000140304A20000000005F
-:1026A00000000002C0304A200000000000000001CD
-:1026B00000530A22000003340000003FC0280A2013
-:1026C0000000000081000000002044110000000014
-:1026D000000000010020481100000000000021F867
-:1026E00000204411000000000000001700204811E5
-:1026F00000000000000421F90060441100000614ED
-:102700000000001100210230000000000000000065
-:1027100014E000000000033D00000014002F02221E
-:1027200000000000000000000CC000000000035189
-:102730000000201000204411000000000000800074
-:1027400000204811000000000001A2A40020441154
-:102750000000000000000000002048110000000000
-:1027600000000016006048110000035E0000210018
-:10277000002044110000000000000000C0204800BC
-:102780000000000000000000C02048000000000021
-:1027900000000000C0204800000000000000000011
-:1027A000C0204800000000000001A2A40020441145
-:1027B00000000000000000000020481100000000A0
-:1027C000000000000040480200000000000000047B
-:1027D000002F022200000000000000000CC00000DA
-:1027E00000000355000020100020441100000000EC
-:1027F000000080000040481100000349000000284C
-:10280000002F022200000000000000000CE0000089
-:1028100000000349000021040020441100000000D2
-:1028200000000000C0204800000000000000000080
-:10283000C02048000000000000000000C020480048
-:102840000000000000000000C02048000000000060
-:102850000000A2A4002044110000000000000000BD
-:10286000004048020000000000000035002036262D
-:1028700000000000000000490020181100000000C6
-:1028800000000000002048110000000000000001CE
-:1028900000331A260000000000000000002F02266E
-:1028A00000000000000000000CC0000000000360F9
-:1028B0000000003500801A2D000000000000003FDD
-:1028C000C0280A200000000000000015002F02228E
-:1028D00000000000000000000CE000000000037693
-:1028E0000000001E002F0222000000000000000077
-:1028F0000CE000000000038000000020002F0222F6
-:1029000000000000000000000CE000000000038C4C
-:102910000000000F002F0222000000000000000055
-:102920000CE000000000039800000010002F0222BD
-:1029300000000000000000000CE000000000039810
-:1029400000000006002F022200000000000000002E
-:102950000CE000000000039A00000016002F022285
-:1029600000000000000000000CE000000000039FD9
-:102970000000A2A40020441100000000000000009C
-:1029800000404802000000000800000000290A2260
-:10299000000000000000000340210E2000000000A5
-:1029A0000000000CC0211220000000000008000000
-:1029B000002812240000000000000014C02216208D
-:1029C0000000000000000000002914A40000000026
-:1029D0000000A2A40020441100000000000000003C
-:1029E000002948A2000000000000A1FE00204411C0
-:1029F000000000000000000000404803000000004C
-:102A000081000000002044110000000000000001CF
-:102A10000020481100000000000021F800204411AF
-:102A20000000000000000015002048110000000018
-:102A3000000421F900604411000006140000001594
-:102A400000210230000000000000000014E000003F
-:102A5000000003820000210E00204411000000004D
-:102A600000000000C020480000000000000000003E
-:102A7000C0204800000000000000A2A40020441173
-:102A800000000000000000000040480200000000BC
-:102A9000810000000020441100000000000000013F
-:102AA0000020481100000000000021F8002044111F
-:102AB0000000000000000016002048110000000087
-:102AC000000421F900604411000006140000000316
-:102AD00000210230000000000000000014E00000AF
-:102AE0000000038E000021080020441100000000B7
-:102AF00000000000C02048000000000000000000AE
-:102B0000C0204800000000000000A2A400204411E2
-:102B1000000000000000000000404802000000002B
-:102B20000000201000204411000000000000800080
-:102B30000040481100000000000020100020441157
-:102B4000000000000000800000204811000000008C
-:102B50000001A2A4002044110000000000000000B9
-:102B6000002048110000000000000006004048114D
-:102B700000000000000020100020441100000000B0
-:102B80000000800000204811000000000001A2A405
-:102B90000020441100000000000000000020481147
-:102BA0000000000000000016006048110000035EF5
-:102BB0000000001600404811000000000000000066
-:102BC000C02008000000000000000000C0200C0031
-:102BD000000000000000001D002102230000000092
-:102BE0000000000014E00000000003B981000000B4
-:102BF00000204411000000000000000100204811E6
-:102C000000000000000021F8002044110000000036
-:102C1000000000170020481100000000000421F906
-:102C20000060441100000614000000110021023071
-:102C3000000000000000000014E00000000003ABF2
-:102C400000002100002044110000000000000000EE
-:102C5000002048020000000000000000002048039F
-:102C600000000000BABECAFE0020481100000000AB
-:102C7000CAFEBABE0020481100000000000020106B
-:102C800000204411000000000000800000204811D6
-:102C9000000000000000A2A4002044110000000079
-:102CA00000000004004048110000000000002170F6
-:102CB0000020441100000000000000000020480235
-:102CC0000000000000000000002048030000000099
-:102CD0008100000000204411000000000000000AF4
-:102CE000002048110000000000000000002000103B
-:102CF000000000000000000014C00000000003BE3F
-:102D00008C0000000020441100000000CAFEBABE82
-:102D10000040481100000000810000000020441124
-:102D20000000000000000001002048110000000029
-:102D300000003FFF40280A20000000008000000043
-:102D400040280E200000000040000000C028122093
-:102D50000000000000040000006946220000061484
-:102D6000000000000020141000000000000000001F
-:102D7000002F022300000000000000000CC0000033
-:102D8000000003CC00000000C0401800000003CF8A
-:102D900000003FFFC0281A200000000000040000CF
-:102DA00000694626000006140000000000201810EC
-:102DB0000000000000000000002F022400000000BE
-:102DC000000000000CC00000000003D20000000062
-:102DD000C0401C00000003D500003FFFC0281E209B
-:102DE00000000000000400000069462700000614EF
-:102DF0000000000000201C10000000000000000087
-:102E0000002044020000000000000000002820C54F
-:102E10000000000000000000004948E80000000039
-:102E2000A580000000200811000000000000200024
-:102E300000200C110000000083000000006044111D
-:102E4000000003FD0000000000204402000000001C
-:102E500000000000C020480000000000000000004A
-:102E600040204800000000000000001FC021022098
-:102E7000000000000000000014C00000000003E299
-:102E8000000020100020441100000000000080001D
-:102E900000204811000000000000FFFFC048122081
-:102EA000000003EAA78000000020081100000000D5
-:102EB0000000A00000200C110000000083000000B2
-:102EC00000604411000003FD0000000000204402E7
-:102ED0000000000000000000C020480000000000CA
-:102EE00000000000C0204800000000000000FFFFBC
-:102EF000C0281220000000008300000000204411C0
-:102F000000000000000000000030488300000000C6
-:102F100084000000002044110000000000000000B8
-:102F2000C020480000000000000000001D0000005C
-:102F3000000000008300000000604411000003FD59
-:102F400000000000C040040000000001A980000053
-:102F500000200811000000000000C00000400C111B
-:102F6000000003E5AB800000002008110000000015
-:102F70000000F8E000400C11000003E5AD80000007
-:102F800000200811000000000000F88000400C1133
-:102F9000000003E5B38000000020081100000000DD
-:102FA0000000F3FC00400C11000003E5AF800000BE
-:102FB00000200811000000000000E00000400C119B
-:102FC000000003E5B18000000020081100000000AF
-:102FD0000000F00000400C11000003E58300000039
-:102FE000002044110000000000002148002048118A
-:102FF00000000000840000000020441100000000D8
-:1030000000000000C0204800000000000000000098
-:103010001D00000000000000000000000080000013
-:103020000000000000182000C03046200000000012
-:1030300000000000D900480000000000000000006F
-:10304000C0200400000000000000000000A0000AF2
-:10305000000000000018A000C03046200000000062
-:1030600000000000D900480000000000000000003F
-:10307000C0200400000000000000000000A0000AC2
-:10308000000000000018C000C03046200000000012
-:1030900000000000D900480000000000000000000F
-:1030A000C0200400000000000000000000A0000A92
-:1030B000000000000018F8E0C030462000000000CA
-:1030C00000000000D90048000000000000000000DF
-:1030D000C0200400000000000000000000A0000A62
-:1030E000000000000018F880C030462000000000FA
-:1030F00000000000D90048000000000000000000AF
-:10310000C0200400000000000000000000A0000A31
-:10311000000000000018E000C03046200000000061
-:1031200000000000D900480000000000000000007E
-:10313000C0200400000000000000000000A0000A01
-:10314000000000000018F000C03046200000000021
-:1031500000000000D900480000000000000000004E
-:10316000C0200400000000000000000000A0000AD1
-:10317000000000000018F3FCC030462000000000F2
-:1031800000000000D900480000000000000000001E
-:10319000C0200400000000000000000000A0000AA1
-:1031A0000000000086000000002044110000000024
-:1031B0000000000000404801000000008500000001
-:1031C0000020441100000000000000000040480101
-:1031D000000000000000217C0020441100000000DD
-:1031E00000000000C02048000000000000000000B7
-:1031F000C02048000000000000000000C02048007F
-:1032000000000000810000000020441100000000C8
-:103210000000000100204811000000000000000034
-:10322000C02008000000000000000000170000009F
-:10323000000000000004217F00604411000006141B
-:103240000000001F0021023000000000000000000C
-:1032500014C00000000000000000000000404C020C
-:103260000000042E00000000C0200C000000000040
-:1032700000000000C020100000000000000000005E
-:10328000C02014000000000000000000C020180052
-:103290000000000000000000C0201C000000000032
-:1032A00000007F0000280A21000000000000450007
-:1032B000002F022200000000000000000CE00000CF
-:1032C0000000043C00000000C020200000000000BE
-:1032D00000000000170000000000000000000010C7
-:1032E00000280A230000000000000010002F022226
-:1032F00000000000000000000CE00000000004449A
-:1033000081000000002044110000000000000001C6
-:10331000002048110000000000040000006946245D
-:103320000000061400000000004000000000044DF2
-:103330008100000000204411000000000000000097
-:1033400000204811000000000000216D0020441101
-:103350000000000000000000002048040000000001
-:1033600000000000002048050000000000000000F0
-:103370001AC00000000004499E0000000020441113
-:1033800000000000CAFEBABE002048110000000084
-:10339000000000001AE000000000044C00000000E3
-:1033A000002824F0000000000000000700280A2385
-:1033B0000000000000000001002F022200000000B9
-:1033C000000000000AE000000000045400000000BB
-:1033D000002F00C9000000000000000004E0000011
-:1033E0000000046D00000000004000000000047AAE
-:1033F00000000002002F0222000000000000000078
-:103400000AE000000000045900000000002F00C97D
-:10341000000000000000000002E000000000046D59
-:1034200000000000004000000000047A00000003DB
-:10343000002F022200000000000000000AE000004F
-:103440000000045E00000000002F00C90000000022
-:10345000000000000CE000000000046D000000000F
-:10346000004000000000047A00000004002F022247
-:1034700000000000000000000AE0000000000463FB
-:1034800000000000002F00C9000000000000000044
-:103490000AE000000000046D000000000040000091
-:1034A0000000047A00000005002F02220000000046
-:1034B000000000000AE000000000046800000000B6
-:1034C000002F00C9000000000000000006E000001E
-:1034D0000000046D00000000004000000000047ABD
-:1034E00000000006002F0222000000000000000083
-:1034F0000AE000000000046D00000000002F00C979
-:10350000000000000000000008E000000000046D62
-:1035100000000000004000000000047A00007F006E
-:1035200000280A210000000000004500002F0222B0
-:1035300000000000000000000AE0000000000000A1
-:103540000000000800210A23000000000000000025
-:1035500014C000000000047700002169002044111D
-:103560000000000000000000C02048000000000033
-:1035700000000000C0204800000000000000000023
-:10358000C020480000000000CAFEBABE004048113A
-:103590000000000000000000C02044000000000007
-:1035A00000000000C020000000000000000000003B
-:1035B000C04048000000000000007F0000280A21F1
-:1035C0000000000000004500002F02220000000063
-:1035D000000000000AE0000000000480000000007D
-:1035E000C02000000000000000000000C02000001B
-:1035F0000000000000000000C040000000000000CB
-:103600000000000000404C080000043C00000000E6
-:10361000C0200800000000000000001040210E2023
-:1036200000000000000000114021122000000000F6
-:103630000000001240211620000000000000216957
-:10364000002044110000000000000000002048029B
-:103650000000000000000000002102250000000022
-:103660000000000014E000000000048A00040000D4
-:10367000C0494A200000048BFFFBFFFFC0284A20FE
-:1036800000000000000000000021022300000000F4
-:103690000000000014E0000000000497000000009B
-:1036A000C02048000000000000000000C0204800CA
-:1036B00000000000000000000021022400000000C3
-:1036C0000000000014C000000000000081000000A5
-:1036D00000204411000000000000000C00204811F0
-:1036E00000000000000000000020001000000000AA
-:1036F0000000000014C0000000000493A0000000BF
-:103700000020441100000000CAFEBABE004048116B
-:1037100000000000810000000020441100000000B3
-:103720000000000400204811000000000000216B90
-:10373000002044110000000000000000C0204810DC
-:103740000000000081000000002044110000000083
-:103750000000000500204811000000000000216C5E
-:10376000002044110000000000000000C0204810AC
-:103770000000000000000000002F022400000000F4
-:10378000000000000CE0000000000000000000004D
-:10379000004000000000049100000000C0210A2049
-:1037A000000000000000000014C00000000004AE93
-:1037B0008100000000204411000000000000000013
-:1037C00000204811000000000000216D002044117D
-:1037D0000000000000000000C020480000000000C1
-:1037E00000000000C02048000000000000000000B1
-:1037F0001AC00000000004A99E000000002044112F
-:1038000000000000CAFEBABE0020481100000000FF
-:10381000000000001AE00000000004AC00000000FE
-:1038200000400000000004B28100000000204411AC
-:10383000000000000000000100204811000000000E
-:1038400000040000C0294620000000000000000025
-:10385000C0600000000006140000000100210222E8
-:10386000000000000000000014C00000000004B9C7
-:103870000000216900204411000000000000000049
-:10388000C02048000000000000000000C0204800E8
-:1038900000000000000000000020481000000000B0
-:1038A000CAFEBABE0040481100000000000000003F
-:1038B000C02044000000000000000000C04048108C
-:1038C0000000000081000000002044110000000002
-:1038D000000000010020481100000000000021F855
-:1038E00000204411000000000000000D00204811DD
-:1038F00000000000000421F90060441100000614DB
-:103900000000000000210230000000000000000064
-:1039100014C00000000004BB0000218000204411FE
-:103920000000000000000000C0204800000000006F
-:1039300000000000C02000000000000000000000A7
-:10394000C02048000000000000000000C02000006F
-:103950000000000000000000C0404800000000001F
-:103960000000000300333E2F0000000000000001B3
-:1039700000210221000000000000000014E000000F
-:10398000000004EB0000003500200A2D00000000BC
-:103990000004000018E00C11000004DA000000012F
-:1039A00000333E2F00000000000021690020441178
-:1039B000000000000000000000204802000000009D
-:1039C0000000000000204803000000000000000884
-:1039D00000300A220000000000000000C020480063
-:1039E0000000000000000000C020480000000000AF
-:1039F00000002169002044110000000000000000C8
-:103A000000204802000000000000000000204803E1
-:103A1000000000000000000800300A220000000042
-:103A200000000000C020480000000000000000006E
-:103A3000D8C04800000004CE0000216900204411D5
-:103A4000000000000000000000204802000000000C
-:103A500000000000002048030000000000000008F3
-:103A600000300A220000000000000000C0204800D2
-:103A70000000000000000000C0204800000000001E
-:103A8000000000360020122D0000000000000000A1
-:103A900000290C830000000000002169002044116F
-:103AA00000000000000000000020480200000000AC
-:103AB0000000000000204803000000000000000893
-:103AC00000300A220000000000000000C020480072
-:103AD0000000000000000000C020480000000000BE
-:103AE000000000110021022400000000000000007E
-:103AF00014C00000000000000000000000400000B2
-:103B00000000049100000035C020362000000000B5
-:103B100000000036C0403620000000000000304A9F
-:103B20000020441100000000E0000000C0484A20CE
-:103B3000000000000000000F002102210000000032
-:103B40000000000014C00000000004F200000000AB
-:103B5000006000000000000B00000000D900000021
-:103B60000000000000000000C04004000000000150
-:103B7000810000000020441100000000000000024D
-:103B80000020481100000000000000FF00280E3057
-:103B90000000000000000000002F022300000000D1
-:103BA000000000000CC00000000004F6000000004F
-:103BB000C0200800000000000000000014C0000049
-:103BC0000000050B0000000000200C1100000000A8
-:103BD0000000002400203623000000000000003414
-:103BE00000203623000000000000003200203623B1
-:103BF000000000000000003100203623000000001B
-:103C00000000001D00203623000000000000002DF1
-:103C100000203623000000000000002E0020362384
-:103C2000000000000000001B002036230000000000
-:103C30000000001C0020362300000000FFFFE00011
-:103C400000200C1100000000000000290020362395
-:103C5000000000000000002A0020362300000000C1
-:103C600000001FFF00200C11000000000000002BCE
-:103C700000203623000000000000002C0020362326
-:103C800000000000F1FFFFFF00283A2E00000000B6
-:103C90000000001AC0220E200000000000000000FA
-:103CA0000029386E0000000081000000002044114F
-:103CB0000000000000000006002048110000000085
-:103CC0000000003340203620000000008700000084
-:103CD000002044110000000000000000C020480047
-:103CE000000000000000A1F40020441100000000CA
-:103CF0000000000000204810000000009D000000AF
-:103D000000204411000000000000001F40214A2054
-:103D10000000000096000000002044110000000098
-:103D200000000000C020480000000000000000006B
-:103D3000C0200C000000000000000000C0201000A7
-:103D4000000000000000001F0021162400000000F9
-:103D50000000000014C0000000000000000000256A
-:103D600000203623000000000000000300281E236E
-:103D700000000000000000080022222300000000D4
-:103D8000FFFFF000002822280000000000000000D3
-:103D9000002920E80000000000000027002036284D
-:103DA000000000000000001800211E230000000099
-:103DB000000000280020362700000000000000025C
-:103DC000002216240000000000000000003014A8AB
-:103DD0000000000000000026002036250000000042
-:103DE0000000000300211A24000000001000000061
-:103DF00000281A2600000000EFFFFFFF00283A2EDF
-:103E00000000000000000000004938CE000006025B
-:103E10000000000140280A20000000000000000609
-:103E200040280E200000000000000300C0281220DF
-:103E30000000000000000008002112240000000023
-:103E400000000000C020162000000000000000005C
-:103E5000C0201A2000000000000000000021022203
-:103E6000000000000000000014C000000000054138
-:103E7000810000000020441100000000000000014B
-:103E800000204811000000000000225800300A24E1
-:103E90000000000000040000006946220000061433
-:103EA0000000216900204411000000000000000013
-:103EB00000204805000000000002000000294A26FA
-:103EC000000000000000000000204810000000007A
-:103ED000CAFEBABE00204811000000000000000227
-:103EE000002F022300000000000000000CC00000B2
-:103EF0000000054900000000C0201C100000000068
-:103F000000000000C04000000000055B000000024F
-:103F1000002F022300000000000000000CC0000081
-:103F2000000005498100000000204411000000004D
-:103F3000000000010020481100000000000022588D
-:103F400000300A240000000000040000006946223E
-:103F50000000061400000000C0201C10000000003B
-:103F600000000000C04000000000055B00000000F1
-:103F7000002F022300000000000000000CC0000021
-:103F80000000054D00000000C0201C0000000000E3
-:103F900000000000C04000000000055B00000004BD
-:103FA000002F022300000000000000000CC00000F1
-:103FB00000000559810000000020441100000000AD
-:103FC0000000000000204811000000000000216DEA
-:103FD000002044110000000000000000C020480044
-:103FE0000000000000000000C020480000000000A9
-:103FF000000000001AC00000000005549E000000F0
-:104000000020441100000000CAFEBABE0020481182
-:1040100000000000000000001AE00000000005574A
-:104020000000000000401C100000055B00000000C4
-:10403000C02000000000000000000000C0400000A0
-:1040400000000000000000000EE000000000055D20
-:104050000000000000600000000005A40000000057
-:10406000002F022400000000000000000CC000002F
-:104070000000056D0000A2B7002044110000000000
-:104080000000000000204807000000008100000040
-:104090000020441100000000000000010020481131
-:1040A000000000000004A2B60060441100000614E5
-:1040B0000000001A0021223000000000000000066D
-:1040C00000222630000000000000A2C4002044119D
-:1040D0000000000000000000003048E9000000007F
-:1040E0000000000000E000000000056B0000A2D10D
-:1040F00000204411000000000000000000404808BB
-:10410000000000000000A2D10020441100000000C7
-:104110000000000100504A280000000000000001DB
-:10412000002F022400000000000000000CC000006E
-:104130000000057D0000A2BB00204411000000002B
-:10414000000000000020480700000000810000007F
-:104150000020441100000000000000010020481170
-:10416000000000000004A2BA006044110000061420
-:104170000000001A002122300000000000000006AC
-:1041800000222630000000000000A2C500204411DB
-:104190000000000000000000003048E900000000BE
-:1041A0000000000000E000000000057B0000A2D23B
-:1041B00000204411000000000000000000404808FA
-:1041C000000000000000A2D2002044110000000006
-:1041D0000000000100504A2800000000000000021A
-:1041E000002F022400000000000000000CC00000AE
-:1041F0000000058D0000A2BF002044110000000057
-:1042000000000000002048070000000081000000BE
-:1042100000204411000000000000000100204811AF
-:10422000000000000004A2BE00604411000006145B
-:104230000000001A002122300000000000000006EB
-:1042400000222630000000000000A2C60020441119
-:104250000000000000000000003048E900000000FD
-:104260000000000000E000000000058B0000A2D369
-:104270000020441100000000000000000040480839
-:10428000000000000000A2D3002044110000000044
-:104290000000000100504A28000000000000A2C3F6
-:1042A000002044110000000000000000002048072A
-:1042B0000000000081000000002044110000000008
-:1042C0000000000100204811000000000004A2C20C
-:1042D00000604411000006140000001A0021223082
-:1042E0000000000000000006002226300000000050
-:1042F0000000A2C7002044110000000000000000E0
-:10430000003048E9000000000000000000E000006C
-:10431000000005990000A2D4002044110000000014
-:104320000000000000404808000000000000A2D487
-:1043300000204411000000000000000100504A2845
-:104340000000000085000000002044110000000073
-:104350000000000000204801000000000000304A7A
-:10436000002044110000000001000000002048115E
-:104370000000000000000000004000000000059F59
-:10438000A4000000C0204411000000000000000054
-:10439000C04048000000000000000000C0600000B5
-:1043A000000005A400000000C0400400000000015F
-:1043B0000001A2A400204411000000000000000041
-:1043C00000204811000000000000000000204811FB
-:1043D0000000000000000000002048110000000064
-:1043E000000000000020481100000000000000054F
-:1043F00000204811000000000000A1F4002044113A
-:104400000000000000000000002048110000000033
-:10441000880000000020441100000000000000019E
-:104420000020481100000000FF000000002044119F
-:104430000000000000000000002048110000000003
-:1044400000000001002048110000000000000002F0
-:104450000080481100000000000000000EE0000095
-:10446000000005B700001000002008110000000047
-:104470000000003400203622000000000000000090
-:1044800000600000000005BB0000000000600000AC
-:10449000000005A498000000002044110000000066
-:1044A0000000000000804811000000000000000033
-:1044B000C0600000000005BB00000000C040040018
-:1044C000000000010000A2A4002044110000000030
-:1044D00000000022002048110000000089000000B8
-:1044E00000204411000000000000000100204811DD
-:1044F00000000000FF000000002044110000000048
-:104500000000000000204811000000000000000131
-:104510000020481100000000000000020080481147
-:10452000000000000000217AC020441100000000BB
-:10453000000000000040481100000000970000004B
-:10454000002044110000000000000000002048117D
-:10455000000000008A00000000204411000000005C
-:10456000000000000020481100000000FF000000D3
-:10457000002044110000000000000000002048114D
-:1045800000000000000000010020481100000000B1
-:104590000000000200804811000000000000000040
-:1045A00000600000000005E1000020100020441120
-:1045B0000000000000008000002048110000000002
-:1045C0000001A2A4C020441100000000000000006F
-:1045D0000020481100000000000000160060481193
-:1045E0000000035E000000160020481100000000DB
-:1045F0000000201000204411000000000001000015
-:10460000002048110000000081000000002044113B
-:104610000000000000000001002048110000000020
-:104620000000217C002044110000000009800000EF
-:104630000020481100000000FFFFFFFF002048118C
-:1046400000000000000000000020481100000000F1
-:104650000000000017000000000000000004217F9F
-:1046600000604411000006140000001F0021023009
-:10467000000000000000000014C000000000000066
-:104680000000000400404C11000005DC0000001D8B
-:1046900000201E2D000000000000000400291E273D
-:1046A000000000000000001D008036270000000010
-:1046B0000000001D00201E2D00000000FFFFFFFB7A
-:1046C00000281E27000000000000001D0080362783
-:1046D000000000000000001D00201E2D0000000052
-:1046E0000000000800291E27000000000000001D37
-:1046F00000803627000000000000001D00201E2D55
-:1047000000000000FFFFFFF700281E270000000048
-:104710000000001D0080362700000000000020106F
-:10472000002044110000000000008000002048111B
-:10473000000000000001A2A40020441100000000BD
-:1047400000000000002048110000000000000016DA
-:10475000006048110000035E0000001600204811B0
-:1047600000000000000020100020441100000000A4
-:104770000001000000204811000000000000217C22
-:1047800000204411000000000180000000204811BA
-:104790000000000000FFFFFF0020481100000000A3
-:1047A0000000000000204811000000000000000090
-:1047B00017000000000000008100000000204411EC
-:1047C000000000000000000100204811000000006F
-:1047D0000004217F00604411000006140000000066
-:1047E00000200010000000000000000014C00000C5
-:1047F000000006130000001000404C11000005F9F5
-:1048000000000000C02004000000000000000000C4
-:1048100038C00000000000000000002500200A2D24
-:10482000000000000000002600200E2D0000000007
-:10483000000000270020122D0000000000000028CA
-:104840000020162D00000000000021690020441106
-:1048500000000000000000000020480400000000EC
-:1048600000000000002048050000000000000000DB
-:104870000020480100000000CAFEBABE0020481116
-:1048800000000000000000040030122400000000BE
-:1048900000000000002F0064000000000000000085
-:1048A0000CC00000000006120000000300281A22BD
-:1048B000000000000000000800221222000000009A
-:1048C000FFFFF0000028122400000000000000009C
-:1048D000002910C40000000000000027004036241A
-:1048E0000000000000000000008000000000000048
-:1048F000000000001AC00000000006149F00000025
-:104900000020441100000000CAFEBABE0020481179
-:1049100000000000000000001AE000000000061780
-:104920000000000000800000000000000000000007
-:10493000006000000000000B000010000060041187
-:10494000000002FE00000000002004110000000032
-:1049500000000000006008110000019F0000225CC0
-:104960000020441100000000000000030020481156
-:10497000000000000000225600204411000000004A
-:104980000000001B00204811000000000000A1FCF6
-:104990000020441100000000000000010020481128
-:1049A000000000000001A1FDC02044110000000033
-:1049B0000000002900201E2D000000000000001053
-:1049C00000221E27000000000000002C0020222DE5
-:1049D000000000000000FFFF002822280000000067
-:1049E000000000000029490700000000000000004E
-:1049F00000204811000000000000002A0020222DA5
-:104A0000000000000000FFFF002822280000000036
-:104A1000000000000029490700000000000000001D
-:104A200000204811000000000000002B00201E2D77
-:104A3000000000000000001000221E2700000000FF
-:104A400000000000002949070000000000000000ED
-:104A500000404811000000000000000000000000BD
-:104A60000000000000000000000000000000000046
-:104A70000000000000000000000000000000000036
-:104A80000000000000000000000000000000000026
-:104A90000000000000000000000000000000000016
-:104AA0000000000000000000000000000000000006
-:104AB00000000000000000000000000000000000F6
-:104AC00000000000000000000000000000000000E6
-:104AD00000000000000000000000000000000000D6
-:104AE00000000000000000000000000000000000C6
-:104AF00000000000000000000000000000000000B6
-:104B000000000000000000000000000000000000A5
-:104B10000000000000000000000000000000000095
-:104B20000000000000000000000000000000000085
-:104B30000000000000000000000000000000000075
-:104B40000000000000000000000000000000000065
-:104B50000000000000000000000000000000000055
-:104B60000000000000000000000000000000000045
-:104B70000000000000000000000000000000000035
-:104B80000000000000000000000000000000000025
-:104B90000000000000000000000000000000000015
-:104BA0000000000000000000000000000000000005
-:104BB00000000000000000000000000000000000F5
-:104BC00000000000000000000000000000000000E5
-:104BD00000000000000000000000000000000000D5
-:104BE00000000000000000000000000000000000C5
-:104BF00000000000000000000000000000000000B5
-:104C000000000000000000000000000000000000A4
-:104C10000000000000000000000000000000000094
-:104C20000000000000000000000000000000000084
-:104C30000000000000000000000000000000000074
-:104C40000000000000000000000000000000000064
-:104C50000000000000000000000000000000000054
-:104C60000000000000000000000000000000000044
-:104C70000000000000000000000000000000000034
-:104C80000000000000000000000000000000000024
-:104C90000000000000000000000000000000000014
-:104CA0000000000000000000000000000000000004
-:104CB00000000000000000000000000000000000F4
-:104CC00000000000000000000000000000000000E4
-:104CD00000000000000000000000000000000000D4
-:104CE00000000000000000000000000000000000C4
-:104CF00000000000000000000000000000000000B4
-:104D000000000000000000000000000000000000A3
-:104D10000000000000000000000000000000000093
-:104D20000000000000000000000000000000000083
-:104D30000000000000000000000000000000000073
-:104D40000000000000000000000000000000000063
-:104D50000000000000000000000000000000000053
-:104D60000000000000000000000000000000000043
-:104D70000000000000000000000000000000000033
-:104D80000000000000000000000000000000000023
-:104D90000000000000000000000000000000000013
-:104DA0000000000000000000000000000000000003
-:104DB00000000000000000000000000000000000F3
-:104DC00000000000000000000000000000000000E3
-:104DD00000000000000000000000000000000000D3
-:104DE00000000000000000000000000000000000C3
-:104DF00000000000000000000000000000000000B3
-:104E000000000000000000000000000000000000A2
-:104E10000000000000000000000000000000000092
-:104E20000000000000000000000000000000000082
-:104E30000000000000000000000000000000000072
-:104E40000000000000000000000000000000000062
-:104E50000000000000000000000000000000000052
-:104E60000000000000000000000000000000000042
-:104E70000000000000000000000000000000000032
-:104E80000000000000000000000000000000000022
-:104E90000000000000000000000000000000000012
-:104EA0000000000000000000000000000000000002
-:104EB00000000000000000000000000000000000F2
-:104EC00000000000000000000000000000000000E2
-:104ED00000000000000000000000000000000000D2
-:104EE00000000000000000000000000000000000C2
-:104EF00000000000000000000000000000000000B2
-:104F000000000000000000000000000000000000A1
-:104F10000000000000000000000000000000000091
-:104F20000000000000000000000000000000000081
-:104F30000000000000000000000000000000000071
-:104F40000000000000000000000000000000000061
-:104F50000000000000000000000000000000000051
-:104F60000000000000000000000000000000000041
-:104F70000000000000000000000000000000000031
-:104F80000000000000000000000000000000000021
-:104F90000000000000000000000000000000000011
-:104FA0000000000000000000000000000000000001
-:104FB00000000000000000000000000000000000F1
-:104FC00000000000000000000000000000000000E1
-:104FD00000000000000000000000000000000000D1
-:104FE00000000000000000000000000000000000C1
-:104FF00000000000000000000000000000000000B1
-:1050000000000000000000000000000000000000A0
-:105010000000000000000000000000000000000090
-:105020000000000000000000000000000000000080
-:105030000000000000000000000000000000000070
-:105040000000000000000000000000000000000060
-:105050000000000000000000000000000000000050
-:105060000000000000000000000000000000000040
-:105070000000000000000000000000000000000030
-:105080000000000000000000000000000000000020
-:105090000000000000000000000000000000000010
-:1050A0000000000000000000000000000000000000
-:1050B00000000000000000000000000000000000F0
-:1050C00000000000000000000000000000000000E0
-:1050D00000000000000000000000000000000000D0
-:1050E00000000000000000000000000000000000C0
-:1050F00000000000000000000000000000000000B0
-:10510000000000000000000000000000000000009F
-:10511000000000000000000000000000000000008F
-:10512000000000000000000000000000000000007F
-:10513000000000000000000000000000000000006F
-:10514000000000000000000000000000000000005F
-:10515000000000000000000000000000000000004F
-:10516000000000000000000000000000000000003F
-:10517000000000000000000000000000000000002F
-:10518000000000000000000000000000000000001F
-:10519000000000000000000000000000000000000F
-:1051A00000000000000000000000000000000000FF
-:1051B00000000000000000000000000000000000EF
-:1051C00000000000000000000000000000000000DF
-:1051D00000000000000000000000000000000000CF
-:1051E00000000000000000000000000000000000BF
-:1051F00000000000000000000000000000000000AF
-:10520000000000000000000000000000000000009E
-:10521000000000000000000000000000000000008E
-:10522000000000000000000000000000000000007E
-:10523000000000000000000000000000000000006E
-:10524000000000000000000000000000000000005E
-:10525000000000000000000000000000000000004E
-:10526000000000000000000000000000000000003E
-:10527000000000000000000000000000000000002E
-:10528000000000000000000000000000000000001E
-:10529000000000000000000000000000000000000E
-:1052A00000000000000000000000000000000000FE
-:1052B000013304EF059B02390000000001B00159E1
-:1052C0000425059B00000000021201F6023901428C
-:1052D000000000000210022E0289022A00000000D5
-:1052E00003C2059B059B059B0000000005CD05CE74
-:1052F0000308059B00000000059B05A00309032986
-:10530000000000000313026B032B031D00000000CC
-:10531000059B059B059B059B00000000059B052C3C
-:10532000059B059B0000000003A5059B04A2032D1F
-:1053300000000000048104330423059B00000000EA
-:1053400004BB04ED042704C800000000043304F487
-:10535000033A036500000000059B059B059B059B28
-:1053600000000000059B059B059B059B00000000BD
-:10537000059B059B05B905A200000000059B059B48
-:105380000007059B00000000059B059B059B059BF6
-:1053900000000000059B059B059B059B000000008D
-:1053A00003E303D803F303F10000000003F903F55E
-:1053B00003F703FB0000000004070403040F040BC1
-:1053C0000000000004170413041F041B0000000069
-:1053D000059B059B059B059B00000000059B059B0D
-:1053E000059B059B00000000059B059B059B059BFD
-:1053F0000000000000020600061900060000000080
-:00000001FF
diff --git a/firmware/radeon/R600_pfp.bin.ihex b/firmware/radeon/R600_pfp.bin.ihex
deleted file mode 100644
index 52361086c280..000000000000
--- a/firmware/radeon/R600_pfp.bin.ihex
+++ /dev/null
@@ -1,145 +0,0 @@
-:1000000000D4007100D4007200CA040000A00000F7
-:10001000007E828B0080000300CA040000D4401ED2
-:1000200000EE001E00CA040000A00000007E828BCB
-:1000300000C4183800CA240000CA2800009581A80E
-:1000400000C41C3A00C3C00000CA080000CA0C006B
-:10005000007C744B00C200050099C00000C41C3A2B
-:10006000007C744C00C0FFF000042C0400309002AF
-:10007000007D250000351402007D350B002554035A
-:10008000007CD58000259C030095C00400D5001B92
-:10009000007EDDC1007D9D8000D6801B00D5801BC9
-:1000A00000D4401E00D5401E00D6401E00D6801E43
-:1000B00000D4801E00D4C01E009783D400D5C01E7B
-:1000C00000CA08000080001B00CA0C0000E4011EEA
-:1000D00000D4001E0080000D00C4183800E4013E6A
-:1000E00000D4001E0080000D00C4183800D4401E4B
-:1000F00000EE001E00CA040000A00000007E828BFB
-:1001000000E4011E00D4001E00D4401E00EE001EBC
-:1001100000CA040000A00000007E828B00E4013EC3
-:1001200000D4001E00D4401E00EE001E00CA0400D1
-:1001300000A00000007E828B00CA180000D4401E80
-:1001400000D5801E0080005400D4007300D4401EEF
-:1001500000CA080000CA0C0000CA100000D48019B0
-:1001600000D4C01800D5001700D4801E00D4C01ED3
-:1001700000D5001E00E2001E00CA040000A000001E
-:10018000007E828B00CA080000D4806000D4401E2C
-:100190000080000200D4801E00CA080000D48061E4
-:1001A00000D4401E0080000200D4801E00CA080057
-:1001B00000CA0C0000D4401E00D4801600D4C01623
-:1001C00000D4801E008001B900D4C01E00C6083EC5
-:1001D00000CA0C0000CA10000094800400CA140079
-:1001E00000E420F300D4201300D5606500D4E01CA7
-:1001F00000D5201C00D5601C0080000200062001F4
-:1002000000C6083E00CA0C0000CA1000009483F724
-:1002100000CA140000E420F30080007A00D4201308
-:1002200000C6083E00CA0C0000CA1000009883EF08
-:1002300000CA140000D400640080008E000000009A
-:1002400000C4143200C6183E00C4082F00954005B3
-:1002500000C40C3000D4401E0080000200EE001EDE
-:10026000009583F500C4103100D4403300D52065DB
-:1002700000D4A01C00D4E01C00D5201C00D40073C6
-:1002800000E4015E00D4001E008001B900062001D8
-:10029000000A200100D6007400C4083600C61040D1
-:1002A0000098800700CC38350095010F00D4001F5E
-:1002B00000D460620080000200D4206200CC1433BD
-:1002C000008401BC00D4007000D5401E00800002F4
-:1002D00000EE001E00CA0C0000CA100000D4C01AB4
-:1002E000008401BC00D5001A00CC04430035101F67
-:1002F000002C9401007D098B00984005007D15CBF2
-:1003000000D4001A008001B900D4006D003444010B
-:1003100000CC0C440098403A00CC2C460095800458
-:1003200000CC0445008001B900D4001A00D4C01AE2
-:1003300000282801008400F300CC10030098801BE3
-:100340000004380C008400F300CC100300988017E0
-:1003500000043808008400F300CC100300988013D8
-:1003600000043804008400F300CC100300988014CB
-:1003700000CC1047009A800900CC1448009840DA5D
-:1003800000D4006D00CC184400D5001A00D5401AE6
-:10039000008000CC00D5801A0096C0D300D4006D38
-:1003A000008001B900D4006E009AC00300D4006D33
-:1003B00000D4006E0080000200EC007F009AC0CAEA
-:1003C00000D4006D008001B900D4006E00CC14038D
-:1003D00000CC180300CC1C03007D9103007DD58365
-:1003E000007D190C0035CC1F0035701F007CF0CB50
-:1003F000007CD08B00880000007E8E8B0095C004AE
-:1004000000D4006E008001B900D4001A00D4C01AD4
-:1004100000CC080300CC0C0300CC100300CC140368
-:1004200000CC180300CC1C0300CC240300CC280310
-:100430000035C41F0036B01F007C704B0034F01F25
-:10044000007C704B0035701F007C704B007D8881F4
-:10045000007DCCC1007E5101007E9541007C9082E0
-:10046000007CD4C2007C848B009AC003007C8C8BFF
-:10047000002C88010098809C00D4006D0098409A60
-:1004800000D4006E00CC084700CC0C4800CC1044CF
-:1004900000D4801A00D4C01A0080010400D5001ACC
-:1004A00000CC083200D40032009482D800CA0C007C
-:1004B00000D4401E0080000200D4001E00E4011E93
-:1004C00000D4001E00CA080000CA0C0000CA1000B8
-:1004D00000D4401E00CA140000D4801E00D4C01EE8
-:1004E00000D5001E00D5401E00D54034008000021B
-:1004F00000EE001E0028040400E2001A00E2001AC8
-:1005000000D4401A00CA380000CC080300CC0C0309
-:1005100000CC0C0300CC0C03009882BC000000004F
-:10052000008401BC00D7806F0080000200EE001F35
-:1005300000CA040000C2FF0000CC083400C13FFF25
-:10054000007C74CB007CC90B007D010F009902AFC9
-:10055000007C738B008401BC00D7806F0080000298
-:1005600000EE001F00CA080000281900007D898BDA
-:10057000009580140028140400CA0C0000CA100062
-:1005800000CA1C0000CA240000E2001F00D4C01AE8
-:1005900000D5001A00D5401A00CC180300CC2C035B
-:1005A00000CC2C0300CC2C03007DA58B007D9C4748
-:1005B00000984296000000000080016400D4C01A38
-:1005C00000D4401E00D4801E0080000200EE001EF9
-:1005D00000E4011E00D4001E00D4401E00EE001EE8
-:1005E00000CA040000A00000007E828B00E4013EEF
-:1005F00000D4001E00D4401E00EE001E00CA0400FD
-:1006000000A00000007E828B00CA080000248C0637
-:10061000000CCC060098C00600CC104900990004DC
-:1006200000D4007100E4011E00D4001E00D4401E5E
-:1006300000D4801E0080000200EE001E00CA0800E8
-:1006400000CA0C000034D018002510010095001FCE
-:1006500000C17FFF00CA100000CA140000CA1800C1
-:1006600000D4801D00D4C01D007DB18B00C14202AA
-:1006700000C2C00100D5801D0034DC0E007D5D4C41
-:10068000007F734C00D7401E00D5001E00D5401ED1
-:1006900000C1420000C2C00000099C010031DC1012
-:1006A000007F5F4C007F734C007D838000D5806F9E
-:1006B00000D5806600D7401E00EC005E00C8240212
-:1006C000008001B900D6007400D4401E00D4801E02
-:1006D00000D4C01E0080000200EE001E0080000258
-:1006E00000EE001F00D4001F0080000200D4001F95
-:1006F00000D4001F0088000000D4001F000000008C
-:1007000000000000000000000000000000000000E9
-:1007100000000000000000000000000000000000D9
-:1007200000000000000000000000000000000000C9
-:1007300000000000000000000000000000000000B9
-:1007400000000000000000000000000000000000A9
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B0000000000000000000000000000000000039
-:1007C0000000000000000000000000000000000029
-:1007D0000000000000000000000000000000000019
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:10080000000101740002017B0003009000040080DD
-:100810000005000500060040000700330008012F16
-:1008200000090047000A0037001001B7001700A4B4
-:100830000022013D0023014C002000B500240128C6
-:100840000027004E0028006B002A0061002B005397
-:10085000002F00660032008800340182003C0159FC
-:10086000003F00730041018F0044013100550176C3
-:100870000056017D0060000C006100350062003907
-:1008800000630039006400390065003900660039F2
-:10089000006700390068003B00690042006A0049B7
-:1008A000006B0049006C0049006D0049006E004972
-:1008B000006F0049007301B7000000070000000747
-:1008C000000000070000000700000007000000070C
-:1008D00000000007000000070000000700000007FC
-:1008E00000000007000000070000000700000007EC
-:1008F00000000007000000070000000700000007DC
-:00000001FF
diff --git a/firmware/radeon/RS600_cp.bin.ihex b/firmware/radeon/RS600_cp.bin.ihex
deleted file mode 100644
index 4a895016aca4..000000000000
--- a/firmware/radeon/RS600_cp.bin.ihex
+++ /dev/null
@@ -1,130 +0,0 @@
-:10000000000000004200E000000000004000E000AE
-:1000100000000008000000A000000008000000A48C
-:10002000000000004A554B4A000000004A4A44675D
-:100030000000000055526F75000000004A7E7D658B
-:10004000000000004AE74AF6000000004AD34A4A8E
-:1000500000000000D689898900000000CD4ADDCF6C
-:10006000000000008EBE4AE200000000C38A8A8AB7
-:10007000000000004A0F8CC800000004000CA00023
-:1000800000000038000D0012000000040000E8B479
-:1000900000000038000D0014000000040000E8B665
-:1000A00000000038000D0016000000040000E854B5
-:1000B00000000038000D0018000000040000E855A2
-:1000C00000000038000D001A000000040000E8568F
-:1000D00000000038000D001C000000040000E8577C
-:1000E00000000038000D001E000000040000E8249D
-:1000F00000000038000D0020000000040000E8258A
-:1001000000000038000D0022000000040000E8306C
-:1001100000000038000D0024000000040000F0C0C2
-:1001200000000038000D0026000000040000F0C1AF
-:1001300000000038000D0028000000040000F0411D
-:1001400000000038000D002A000000040000F184C7
-:1001500000000038000D002C000000040000F185B4
-:1001600000000038000D002E000000040000F186A1
-:1001700000000038000D0030000000040000F1878E
-:1001800000000038000D0032000000040000F18083
-:1001900000000038000D0034000000040000F3935C
-:1001A00000000038000D0036000000040000F38A53
-:1001B00000000038000D0038000000040000F38E3D
-:1001C000000000040000E821000000040140A0003D
-:1001D00000000018000000430000000400CCE8000C
-:1001E00000000004001B000100000004080048009B
-:1001F00000000004001B000100000004080048008B
-:1002000000000004001B000100000004080048007A
-:10021000000000080000003A000000000000A000FC
-:10022000000000042000451D000000040000E580DF
-:1002300000000004000CE581000000040800458077
-:1002400000000004000CE5810000000800000047E9
-:10025000000000000000A00000000004000C2000CE
-:10026000000000040000E50E000000040003200070
-:10027000000000280002205100000024000000516E
-:10028000000000040800450F000000080000A04B1B
-:10029000000000040000E565000000040000E566C1
-:1002A00000000008000000520000000403CCA5B4C8
-:1002B00000000004054320000000000400022000AC
-:1002C000000000304CCCE05E0000000408274565CB
-:1002D000000000300000005E0000000408004564DB
-:1002E000000000040000E566000000080000005562
-:1002F00000000010008020610000000400202000A9
-:1003000000000004001B00FF00000010010000645A
-:1003100000000004001F200000000004001C00FF7B
-:100320000000000C0000000000000030000000721F
-:100330000000000800000055000000040000E57601
-:10034000000000040000E577000000040000E50E56
-:10035000000000040000E50F000000040140A000C0
-:100360000000001800000069000000C200C0E5F9AC
-:100370000000000800000069000000040014E50E01
-:10038000000000040040E50F0000000800C0006C01
-:10039000000000040000E570000000040000E571AA
-:1003A0000000000C0000E572000000040000A00046
-:1003B000000000040140A000000000040000E56807
-:1003C00000000004000C200000000018000000766F
-:1003D00000000004000B00000000000418C0E562EB
-:1003E00000000008000000780000000800C000774E
-:1003F00000000004000700D5000000380000008461
-:1004000000000030000CA08600000004080045BB7E
-:1004100000000030000C2087000000000800E5BC50
-:10042000000000040000E5BB000000000000E5BC87
-:100430000000000C00120000000000040012000088
-:100440000000000C001B0002000000040000A000DF
-:10045000000000040000E821000000000000E800A7
-:10046000000000040000E821000000000000E82E69
-:100470000000000402CCA0000000000400140000F2
-:1004800000000004000CE1CC00000004050DE1CDEB
-:10049000000000040040000000000018000000966A
-:1004A0000000000400C0A00000000008000000934D
-:1004B0000000002000000098000000004200E00062
-:1004C000000000380000009F00000004000CA000A5
-:1004D000000000040014000000000004000C2000D4
-:1004E000000000040016000000000004700CE00092
-:1004F000000000080014009B000000004000E00025
-:10050000000000040240000000000004400EE00073
-:100510000000000402400000000000004000E00075
-:1005200000000004000C2000000000040240E51B55
-:10053000000000050080E50A000000050080E50BD2
-:10054000000000040022000000000004000700D5A5
-:1005500000000038000000B200000030000C2087CE
-:10056000000000050880E5BD00000030000C20867A
-:10057000000000050800E5BB00000030000C2087EB
-:10058000000000050880E5BC00000008000000B580
-:10059000000000050080E5BD000000050000E5BB8F
-:1005A000000000050080E5BC000000040021000000
-:1005B00000000004028000000000001800C000B924
-:1005C000000000404180E00000000024000000BB6B
-:1005D0000000000C010000000000000C0100E51DFF
-:1005E00000000004000045BB00000008000080B5CA
-:1005F000000000040000F3CE000000040140A00051
-:100600000000000400CC20000000004008C053CFD0
-:100610000000000000008000000000040000F3D291
-:10062000000000040140A0000000000400CC2000F5
-:100630000000004008C053D300000000000080000C
-:10064000000000040000F39D000000040140A00031
-:100650000000000400CC20000000004008C0539EB1
-:1006600000000000000080000000000403C008300B
-:10067000000000004200E000000000040000A000B4
-:1006800000000004200045E0000000000000E5E15B
-:10069000000000000000000100000004000700D27C
-:1006A000000000000800E3940000000000000000CB
-:1006B000000000040000E8C4000000040000E8C5D9
-:1006C000000000040000E8C6000000040000E92863
-:1006D000000000040000E929000000040000E92AED
-:1006E00000000008000000D6000000040000E92817
-:1006F000000000040000E929000000040000E92ACD
-:1007000000000008000000DD0000000000E001160D
-:1007100000000004000700E1000000040800401C85
-:1007200000000004200050E7000000040000E01D6D
-:1007300000000008000000E40000000402C02000E7
-:10074000000000040006000000000034000000EB80
-:1007500000000008000000E8000000040000800025
-:1007600000000000C000E0000000000000000000E9
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B00000000004000C200000000004001D0018D0
-:1007C00000000004001A000100000034000000FBDB
-:1007D000000000080000004A000000080500A04AD0
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:00000001FF
-/* production radeon ucode r1xx-r6xx */
diff --git a/firmware/radeon/RS690_cp.bin.ihex b/firmware/radeon/RS690_cp.bin.ihex
deleted file mode 100644
index 689627441d8b..000000000000
--- a/firmware/radeon/RS690_cp.bin.ihex
+++ /dev/null
@@ -1,130 +0,0 @@
-:1000000000000008000000DD00000008000000DF24
-:1000100000000008000000A000000008000000A48C
-:10002000000000004A554B4A000000004A4A44675D
-:100030000000000055526F75000000004A7E7D658B
-:10004000000000004AD74AF6000000004AC94A4AA8
-:1000500000000000CC89898900000000C34AD3C594
-:10006000000000008E4A4A4A000000004A8A8A8A3C
-:10007000000000004A0F8C4A00000004000CA000A1
-:1000800000000038000D0012000000040000E8B479
-:1000900000000038000D0014000000040000E8B665
-:1000A00000000038000D0016000000040000E854B5
-:1000B00000000038000D0018000000040000E855A2
-:1000C00000000038000D001A000000040000E8568F
-:1000D00000000038000D001C000000040000E8577C
-:1000E00000000038000D001E000000040000E8249D
-:1000F00000000038000D0020000000040000E8258A
-:1001000000000038000D0022000000040000E8306C
-:1001100000000038000D0024000000040000F0C0C2
-:1001200000000038000D0026000000040000F0C1AF
-:1001300000000038000D0028000000040000F0411D
-:1001400000000038000D002A000000040000F184C7
-:1001500000000038000D002C000000040000F185B4
-:1001600000000038000D002E000000040000F186A1
-:1001700000000038000D0030000000040000F1878E
-:1001800000000038000D0032000000040000F18083
-:1001900000000038000D0034000000040000F3935C
-:1001A00000000038000D0036000000040000F38A53
-:1001B00000000038000D0038000000040000F38E3D
-:1001C000000000040000E821000000040140A0003D
-:1001D00000000018000000430000000400CCE8000C
-:1001E00000000004001B000100000004080048009B
-:1001F00000000004001B000100000004080048008B
-:1002000000000004001B000100000004080048007A
-:10021000000000080000003A000000000000A000FC
-:10022000000000042000451D000000040000E580DF
-:1002300000000004000CE581000000040800458077
-:1002400000000004000CE5810000000800000047E9
-:10025000000000000000A00000000004000C2000CE
-:10026000000000040000E50E000000040003200070
-:10027000000000280002205100000024000000516E
-:10028000000000040800450F000000080000A04B1B
-:10029000000000040000E565000000040000E566C1
-:1002A00000000008000000520000000403CCA5B4C8
-:1002B00000000004054320000000000400022000AC
-:1002C000000000304CCCE05E0000000408274565CB
-:1002D000000000300000005E0000000408004564DB
-:1002E000000000040000E566000000080000005562
-:1002F00000000010008020610000000400202000A9
-:1003000000000004001B00FF00000010010000645A
-:1003100000000004001F200000000004001C00FF7B
-:100320000000000C0000000000000030000000721F
-:100330000000000800000055000000040000E57601
-:10034000000000040000E577000000040000E50E56
-:10035000000000040000E50F000000040140A000C0
-:100360000000001800000069000000C200C0E5F9AC
-:100370000000000800000069000000040014E50E01
-:10038000000000040040E50F0000000800C0006C01
-:10039000000000040000E570000000040000E571AA
-:1003A0000000000C0000E572000000040000A00046
-:1003B000000000040140A000000000040000E56807
-:1003C00000000004000C200000000018000000766F
-:1003D00000000004000B00000000000418C0E562EB
-:1003E00000000008000000780000000800C000774E
-:1003F00000000004000700CB00000038000000846B
-:1004000000000030000CA08600000004080045BB7E
-:1004100000000030000C2087000000000800E5BC50
-:10042000000000040000E5BB000000000000E5BC87
-:100430000000000C00120000000000040012000088
-:100440000000000C001B0002000000040000A000DF
-:10045000000000040000E821000000000000E800A7
-:10046000000000040000E821000000000000E82E69
-:100470000000000402CCA0000000000400140000F2
-:1004800000000004000CE1CC00000004050DE1CDEB
-:10049000000000040040000000000018000000966A
-:1004A0000000000400C0A00000000008000000934D
-:1004B0000000002000000098000000004200E00062
-:1004C000000000380000009F00000004000CA000A5
-:1004D000000000040014000000000004000C2000D4
-:1004E000000000040016000000000004700CE00092
-:1004F000000000080014009B000000004000E00025
-:10050000000000040240000000000004400EE00073
-:100510000000000402400000000000004000E00075
-:100520000000002C0010000000000000000040004F
-:1005300000000004080045C8000000040024000575
-:100540000000000408004D0B00000004000C200017
-:10055000000000040240E51B000000050080E50AE1
-:10056000000000050080E50B0000000400220000F0
-:1005700000000004000700CB00000038000000B7B6
-:1005800000000030000C2087000000050880E5BD59
-:1005900000000030000C2086000000050800E5BBCC
-:1005A00000000030000C2087000000050880E5BC3A
-:1005B00000000008000000BA000000050080E5BD52
-:1005C000000000050000E5BB000000050080E5BC60
-:1005D0000000000400210000000000040280000070
-:1005E0000000001800C000BE000000404180E00094
-:1005F00000000024000000C00000000C010000000A
-:100600000000000C0100E51D00000004000045BBD7
-:1006100000000008000080BA0000000403C0083099
-:10062000000000004200E000000000040000A00004
-:1006300000000004200045E0000000000000E5E1AB
-:10064000000000000000000100000004000700C8D6
-:10065000000000000800E39400000000000000001B
-:10066000000000040000E8C4000000040000E8C529
-:10067000000000040000E8C6000000040000E928B3
-:10068000000000040000E929000000040000E92A3D
-:1006900000000008000000CC000000040000E92871
-:1006A000000000040000E929000000040000E92A1D
-:1006B00000000008000000D30000000402C0200079
-:1006C000000000040006000000000034000000DB11
-:1006D00000000008000000D80000000400008000B6
-:1006E00000000000C000E00000000030000000E159
-:1006F000000000004200E00000000030000000E1C7
-:10070000000000004000E000000000040025001B85
-:100710000000000400230000000000040025000584
-:1007200000000034000000E60000000C00000000A3
-:10073000000000040024400000000004080045C838
-:1007400000000004002400050000000C08004D0B10
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B00000000004000C200000000004001D0018D0
-:1007C00000000004001A000100000034000000FBDB
-:1007D000000000080000004A000000080500A04AD0
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:00000001FF
-/* production radeon ucode r1xx-r6xx */
diff --git a/firmware/radeon/RS780_me.bin.ihex b/firmware/radeon/RS780_me.bin.ihex
deleted file mode 100644
index 6479c106b91f..000000000000
--- a/firmware/radeon/RS780_me.bin.ihex
+++ /dev/null
@@ -1,1345 +0,0 @@
-:1000000000000000C020040000000000000000000C
-:1000100000A0000A000000000000FFFF00284621A9
-:100020000000000000000000D900480000000000AF
-:1000300000000000C02004000000000000000000DC
-:1000400000A0000A000000000000000000E0000026
-:100050000000000000010000C02946200000000050
-:1000600000000000D900480000000000000000006F
-:10007000C0200400000000000000000000A0000AF2
-:10008000000000008100000000204411000000007A
-:1000900000000001002048110000000000042004BE
-:1000A0000060441100000622000000000060000013
-:1000B000000005D10000000000600000000005DE27
-:1000C00000000000C02008000000000000000F0039
-:1000D000002816220000000000000008002116255C
-:1000E000000000000000001800203625000000007D
-:1000F0008D000000002044110000000000000004FA
-:10010000002F022500000000000000000CE00000AD
-:1001100000000018004120000040481100000019B4
-:100120000042200000204811000000008E00000066
-:1001300000204411000000000000002800204A2D8B
-:1001400000000000900000000020441100000000AA
-:100150000000000000204805000000000000000C26
-:1001600000211622000000000000000300281625D0
-:10017000000000000000001900211A220000000009
-:100180000000000400281A26000000000000000003
-:10019000002914C5000000000000001900203625C9
-:1001A0000000000000000000003A140200000000FF
-:1001B00000000016002116250000000000000003CA
-:1001C00000281625000000000000001700200E2D5A
-:1001D00000000000FFFFFFFC00280E2300000000CD
-:1001E00000000000002914A3000000000000001718
-:1001F00000203625000000000000800000280E22AC
-:10020000000000000000000700220E230000000094
-:10021000000000000029386E0000000020000000EF
-:1002200000280E22000000000000000600210E231E
-:1002300000000000000000000029386E00000000EF
-:100240000000000000220222000000000000000068
-:1002500014E0000000000038000000002EE0000064
-:1002600000000035000000002CE000000000003716
-:100270000000000000400E2D0000003900000008C2
-:1002800000200E2D00000000000000090040122D8B
-:10029000000000460000000100400E2D0000003963
-:1002A00000000000C0200C0000000000003FFFFC28
-:1002B0000028122300000000000000020022122487
-:1002C000000000000000001F00211E2300000000AD
-:1002D0000000000014E000000000003E00000008E4
-:1002E00000401C11000000410000000D00201E2DE8
-:1002F000000000000000000F00281E270000000082
-:100300000000000300221E27000000007FC0000044
-:1003100000281A23000000000000001400211A2603
-:10032000000000000000000100331A260000000059
-:100330000000000800221A26000000000000000053
-:1003400000290CC700000000000000270020362410
-:100350000000000000007F000028122100000000C3
-:1003600000001400002F0224000000000000000024
-:100370000CE000000000004B0000000100290E23EB
-:10038000000000000000000E0020362300000000E6
-:100390000000E0000020441100000000FFF8000011
-:1003A00000294A230000000000000000003A2C024F
-:1003B000000000000000000200220E2B00000000E0
-:1003C000FC00000000280E23000000000000000FC9
-:1003D000002036230000000000001FFF00294A23F0
-:1003E000000000000000002700204A2D000000004F
-:1003F000000000000020481100000000000000295B
-:1004000000200E2D00000000060A020000294A23E9
-:100410000000000000000000002048110000000063
-:100420000000000000204811000000000000000152
-:1004300000210222000000000000000014E0000083
-:1004400000000061000000002EE000000000005FDE
-:10045000000000002CE000000000005E0000000032
-:1004600000400E2D000000620000000100400E2D33
-:10047000000000620000000A00200E2D00000000B5
-:100480000000000B0040122D0000006A0000000078
-:10049000C0200C0000000000003FFFFC00281223D9
-:1004A00000000000000000020022122400000000F2
-:1004B0007FC0000000281623000000000000001488
-:1004C0000021162500000000000000010033162561
-:1004D000000000008000000000280E230000000043
-:1004E0000000000000290CA3000000003FFFFC00FA
-:1004F00000290E23000000000000001F00211E2321
-:10050000000000000000000014E000000000006D8A
-:100510000000010000401C11000000700000000DF0
-:1005200000201E2D00000000000000F000281E2703
-:10053000000000000000000400221E270000000050
-:100540008100000000204411000000000000000DA8
-:100550000020481100000000FFFFF0FF00281A30C3
-:10056000000000000000A02800204411000000004E
-:1005700000000000002948E6000000000000A0186C
-:1005800000204411000000003FFFFFFF00284A2325
-:10059000000000000000A010002044110000000036
-:1005A00000000000002048040000000000000030AF
-:1005B0000020162D00000000000000020029162572
-:1005C0000000000000000030002036250000000080
-:1005D000000000250020162D000000000000000093
-:1005E000002F00A300000000000000000CC000006D
-:1005F00000000083000000260020162D00000000EF
-:1006000000000000002F00A4000000000000000017
-:100610000CC000000000008400000000004000004A
-:100620000000008A000000250020362300000000A2
-:100630000000002600203624000000000000001703
-:1006400000201E2D000000000000000200210227F3
-:10065000000000000000000014E000000000008A1C
-:100660000000000000600000000005FF0000000026
-:1006700000600000000005F30000000200210E22CF
-:10068000000000000000000014C000000000008D09
-:1006900000000012C040362000000093000000005F
-:1006A0002EE0000000000091000000002CE000009F
-:1006B000000000900000000200400E2D000000929B
-:1006C0000000000300400E2D000000920000000C0E
-:1006D00000200E2D00000000000000120020362334
-:1006E000000000000000000300210E2200000000B6
-:1006F0000000000014C00000000000980000A00CE2
-:10070000002044110000000000000000C02048004C
-:100710000000000000000000C0404800000000A0F1
-:100720000000A00C002044110000000000000000A8
-:100730000020481100000000000000002EE0000032
-:100740000000009E000000002CE000000000009D62
-:100750000000000200400E2D0000009F000000037A
-:1007600000400E2D0000009F0000000C00200E2D08
-:10077000000000000000000000204803000000000E
-:1007800000000000003A0C0200000000003F0000E2
-:1007900000280E23000000000000001000210E239E
-:1007A00000000000000000110020362300000000BF
-:1007B0000000001E0021022B0000000000000000CD
-:1007C00014C00000000000A700000016C020362062
-:1007D000000000000000001F0021022B00000000AC
-:1007E0000000000014C00000000000AA0000001576
-:1007F000C0203620000000000000000800210E2B61
-:10080000000000000000007F00280E230000000010
-:1008100000000000002F0223000000000000000084
-:100820000CE00000000000E10000000027000000D4
-:10083000000000000000000000600000000002A3B3
-:1008400000000001002F0223000000000000000053
-:100850000AE00000000000B300000000006000009B
-:100860000000013A81000000002044110000000057
-:100870000000000600204811000000000000000CED
-:1008800000221E300000000099800000002044116A
-:1008900000000000000000040020122D00000000F5
-:1008A00000000008002212240000000000000010D8
-:1008B00000201811000000000000000000291CE4C6
-:1008C0000000000000000000006048070000012F49
-:1008D0009B00000000204411000000000000000008
-:1008E00000204802000000009C000000002044118D
-:1008F00000000000000000000033146F0000000042
-:100900000000000100333E23000000000000000052
-:10091000D9004800000000000000000000203C0555
-:1009200000000000810000000020441100000000D1
-:100930000000000E00204811000000000000000030
-:1009400000201010000000000000E007002044110B
-:10095000000000000000000F0021022B000000003A
-:100960000000000014C00000000000CB00F8FF08E9
-:1009700000204811000000009800000000404811CD
-:10098000000000DC000000F000280E220000000043
-:10099000000000A0002F0223000000000000000063
-:1009A0000CC00000000000DA0000001100200E2D35
-:1009B0000000000000000001002F022300000000E2
-:1009C000000000000CE00000000000D50000000264
-:1009D000002F022300000000000000000CE00000D7
-:1009E000000000D400003F0000400C11000000D6C1
-:1009F00000001F0000400C11000000D600000F0096
-:100A000000200C11000000000038000900294A23D2
-:100A1000000000003F00000000280E2B0000000036
-:100A20000000000200220E2300000000000000076A
-:100A300000494A23000000DC00380F09002048115B
-:100A400000000000680000070020481100000000BE
-:100A50000000000800214A270000000000000000FC
-:100A60000020481100000000060A020000294A2464
-:100A700000000000000000000020481100000000FD
-:100A80000000000000204811000000000000A20249
-:100A9000002044110000000000FF000000280E228A
-:100AA000000000000000008000294A230000000030
-:100AB0000000002700200E2D00000000000000268E
-:100AC0000020122D0000000000000000002F008315
-:100AD00000000000000000000CE00000000000EA40
-:100AE0000000000000600000000005F900000000A8
-:100AF00000400000000000EB00000000006000006B
-:100B0000000005FC000000070020222D000000006E
-:100B10000000000500220E2200000000001000006E
-:100B200000280E23000000000000000000292068BB
-:100B30000000000000000000003A0C02000000006D
-:100B4000000000EF00280E2300000000000000005D
-:100B500000292068000000000000001700200E2D72
-:100B6000000000000000000300210223000000003C
-:100B70000000000014E00000000000F80000000B7E
-:100B800000210228000000000000000014C0000046
-:100B9000000000F8000004000029222800000000E6
-:100BA0000000001400203628000000000000001C97
-:100BB00000210E22000000000000000014C0000010
-:100BC000000000FD0000A30C002044110000000004
-:100BD0000000000000204811000000000000001E7E
-:100BE00000210E22000000000000000014C00000E0
-:100BF0000000010B0000A30F0020441100000000C2
-:100C00000000001100200E2D000000000000000177
-:100C1000002F022300000000000000000CC00000B4
-:100C200000000104FFFFFFFF004048110000010B1E
-:100C300000000002002F022300000000000000005E
-:100C40000CC00000000001070000FFFF0040481139
-:100C50000000010B00000004002F02230000000030
-:100C6000000000000CC000000000010A000000FFAE
-:100C7000004048110000010B000000010020481155
-:100C8000000000000002C400002044110000000029
-:100C90000000001F00210E220000000000000000E4
-:100CA00014C00000000001120000001040210E20BE
-:100CB00000000000000000130020362300000000A8
-:100CC0000000001840224A20000000000000001030
-:100CD000C0424A20000001140000000000200C1156
-:100CE0000000000000000013002036230000000078
-:100CF000000000000020481100000000000000007B
-:100D000000204811000000000000000A002010111F
-:100D10000000000000000000002F0224000000007E
-:100D2000000000000CE000000000011B00000000BB
-:100D300000204811000000000000000100531224B0
-:100D400000000117FFBFFFFF00283A2E000000003F
-:100D50000000001B00210222000000000000000033
-:100D600014C000000000012E81000000002044118A
-:100D7000000000000000000D0020481100000000ED
-:100D80000000001800220E3000000000FC000000EF
-:100D900000280E2300000000810000000020441104
-:100DA000000000000000000E0020481100000000BC
-:100DB0000000000000201010000000000000E00E05
-:100DC000002044110000000007F8FF08002048112F
-:100DD000000000000000000000294A23000000007D
-:100DE0000000001C00201E2D000000000000000874
-:100DF00000214A27000000000000000000204811E8
-:100E000000000000060A020000294A240000000039
-:100E10000000000000204811000000000000000059
-:100E200000204811000000000000000000800000C9
-:100E300000000000810000000020441100000000BC
-:100E40000000000100204811000000000000217C8B
-:100E50000020441100000000008000000020481124
-:100E60000000000000000000002048060000000014
-:100E70000000000800214A270000000000000000D8
-:100E800017000000000000000004217F00604411F2
-:100E9000000006220000001F0021023000000000B8
-:100EA0000000000014C00000000006210000000443
-:100EB00000404C1100000135810000000020441169
-:100EC00000000000000000010020481100000000A8
-:100ED000000021F800204411000000000000001C68
-:100EE0000020481100000000000421F900604411B6
-:100EF0000000062200000011002102300000000066
-:100F00000000000014E000000000013C00000000B0
-:100F100000800000000000000000000000600000F1
-:100F20000000000B00000000006004110000031529
-:100F3000000000000020041100000000000000007C
-:100F400000600811000001B2000000000060000015
-:100F5000000001600000FFFF40280E20000000009C
-:100F600000000010C0211220000000000000FFFF60
-:100F7000402806200000000000000010C0210A20C8
-:100F800000000000000000000034146100000000B8
-:100F90000000000000741882000002BB0001A1FDE7
-:100FA00000604411000002E000003FFF002F022F0C
-:100FB00000000000000000000CC00000000001471D
-:100FC00000000000C040040000000001000000001C
-:100FD000006000000000000B000000000060041131
-:100FE00000000315000000000020041100000000B4
-:100FF0000000000000600811000001B200003FFF87
-:10100000002F022F00000000000000000CE0000094
-:10101000000000000000000000600000000001600F
-:101020000000001040210E20000000000000FFFF23
-:10103000C0281220000000000000001040211620EF
-:10104000000000000000FFFFC0681A20000002BB83
-:101050000001A1FD00604411000002E000003FFF1C
-:10106000002F022F00000000000000000CC0000054
-:101070000000015800000000C04004000000000112
-:101080000000225C0020441100000000000000016C
-:1010900000300A2F000000000000000100210A2299
-:1010A000000000000000000300384A220000000099
-:1010B0000000225600204411000000000000001A29
-:1010C00000204811000000000000A1FC0020441195
-:1010D0000000000000000001008048110000000036
-:1010E00000000000006000000000000B0000000095
-:1010F000006000000000018F0000000000600000A0
-:10110000000001A000003FFF002F022F00000000A0
-:10111000000000000CE000000000000000000000E3
-:1011200000202C0800000000000000000020241116
-:101130000000000000000000002028110000000056
-:10114000000022560020441100000000000000169C
-:1011500000204811000000000000225C0020441123
-:101160000000000000000003002048110000000003
-:1011700093800000002044110000000000000002E5
-:1011800000221E290000000000000000007048EB53
-:101190000000019C0000000000600000000002BB95
-:1011A00000000001403306200000000000000000A5
-:1011B000C03024090000000000003FFF002F022F74
-:1011C00000000000000000000CE000000000000033
-:1011D0000000000000600000000002A3000000000A
-:1011E000002F022100000000000000000AE00000C3
-:1011F0000000018100000000006000000000013AD2
-:101200000000000000400000000001869500000082
-:10121000002044110000000000000000002F022107
-:1012200000000000000000000CE00000000001864B
-:1012300000000000C0204800000000000000000185
-:10124000005306210000018292000000002044119A
-:101250000000000000000000C0604800000001978E
-:101260000001A1FD00204411000000000000001159
-:101270000020062D00000000000000000078042A75
-:10128000000002FB00000000002028090000000010
-:1012900000003FFF002F022F0000000000000000B0
-:1012A0000CC000000000017400000000C0400400F9
-:1012B000000000010000021000600411000003158E
-:1012C00000003FFF002F022F000000000000000080
-:1012D0000CE000000000019400000015C020362042
-:1012E0000000000000000016C020362000000000B2
-:1012F0003F800000002004110000000046000000B4
-:1013000000600811000001B2000000000080000031
-:10131000000000000000A1FC0020441100000000BB
-:1013200000003FFF002F022F00000000000000001F
-:101330000CC000000000019B00000001008048116B
-:1013400000000000000000210080481100000000A3
-:101350000000FFFF40280E200000000000000010E9
-:10136000C0211220000000000000FFFF40281620CE
-:101370000000000000000010C0811A2000000000E2
-:101380008100000000204411000000000000000661
-:1013900000204811000000000000000800221E305C
-:1013A000000000000000002900201A2D00000000AD
-:1013B0000000E0000020441100000000FFFBFF09D6
-:1013C00000204811000000000000000F0020222D26
-:1013D0000000000000001FFF00294A280000000054
-:1013E000000000060020222D000000000000000088
-:1013F000002920E80000000000000000002048084C
-:101400000000000000000000002048110000000063
-:10141000060A020000294A26000000000000000021
-:1014200000204811000000000000000000204811CA
-:101430000000000000000100002018110000000062
-:101440000000000800621E280000012F00000008B4
-:1014500000822228000000000002C0000020441189
-:10146000000000000000001500600E2D000001BD0E
-:101470000000001600600E2D000001BD0000C00835
-:1014800000204411000000000000001700200E2D75
-:10149000000000000000000014C00000000001B9BE
-:1014A0000000000000200411000000000000000007
-:1014B0000020480100000000390000000020481111
-:1014C00000000000000000000020481100000000A3
-:1014D000000000000080480200000000000000182A
-:1014E00000202E2D0000000000000000003B0D63D6
-:1014F000000000000000000800224A230000000055
-:101500000000001000224A23000000000000001824
-:1015100000224A2300000000000000000080480371
-:101520000000000000000000006000000000000B50
-:10153000000010000060041100000315000000000E
-:1015400000200411000000000000000000600811ED
-:10155000000001B2000000070021062F000000007B
-:101560000000001300200A2D000000000000000110
-:1015700000202C11000000000000FFFF4028222066
-:10158000000000000000000F0026222800000000DC
-:101590000000001040212620000000000000000F85
-:1015A000002626290000000000000000002028027C
-:1015B000000000000000225600204411000000003E
-:1015C0000000001B00204811000000000000000087
-:1015D000002F022100000000000000000CE00000CD
-:1015E000000001E00000225C002044110000000027
-:1015F0000000008100204811000000000000A1FC54
-:1016000000204411000000000000000100204811EB
-:10161000000000000000008000201C1100000000FD
-:1016200000000000002F0227000000000000000062
-:101630000CE00000000001DC000000000060000081
-:10164000000001E90000000100531E27000001D83E
-:101650000000000100202C11000000000000001F0D
-:1016600000280A22000000000000001F00282A2A8B
-:10167000000000000000000100530621000001D11D
-:101680000000225C00204411000000000000000265
-:1016900000304A2F000000000000A1FC002044118F
-:1016A00000000000000000010020481100000000C0
-:1016B0000000000100301E2F0000000000000000AC
-:1016C000002F022700000000000000000CE00000D6
-:1016D000000000000000000000600000000001E9C0
-:1016E0000000000100531E27000001E50000FFFF7D
-:1016F00040280E20000000000000000F00260E23EE
-:101700000000000000000010C021122000000000B6
-:101710000000000F0026122400000000000000005E
-:1017200000201411000000000000000000601811EB
-:10173000000002BB0001A1FD0020441100000000D8
-:1017400000000000002F022B00000000000000003D
-:101750000CE00000000001F8000000100022162834
-:1017600000000000FFFF0000002816250000000018
-:101770000000FFFF00281A29000000000000000000
-:10178000002948C500000000000000000020480AB1
-:10179000000000000000000000202C1100000000EC
-:1017A000000000100022162300000000FFFF0000D0
-:1017B00000281625000000000000FFFF00281A2462
-:1017C0000000000000000000002948C500000000E3
-:1017D0000000000000731503000002050000000077
-:1017E0000020180500000000000000000073152410
-:1017F0000000020500000000002D14C500000000DC
-:1018000000000000003008A20000000000000000FE
-:101810000020480200000000000000000020280214
-:101820000000000000000000002020030000000075
-:101830000000000000802404000000000000000FF1
-:1018400000210225000000000000000014C000007C
-:101850000000062100000000002B1405000000001D
-:1018600000000001009016250000000000000000AC
-:10187000006000000000000B000000000060041188
-:10188000000003150000000000200411000000000B
-:101890000000000000600811000001B200002256A4
-:1018A00000204411000000000000001A00294A2214
-:1018B0000000000000000000C02000000000000048
-:1018C00000003FFF002F022F00000000000000007A
-:1018D0000CE000000000000000000000C020040038
-:1018E000000000000000225C002044110000000005
-:1018F0000000000300384A21000000000000A1FCA5
-:1019000000204411000000000000000100204811E8
-:10191000000000000000FFFF40281220000000002F
-:1019200000000010C0211A20000000000000FFFF8E
-:1019300040280E200000000000000010C0211620EA
-:10194000000000000000000000741465000002BBED
-:101950000001A1FD00604411000002E00000000150
-:10196000003306210000000000000000002F0221CB
-:1019700000000000000000000CC000000000021980
-:1019800000003FFF002F022F0000000000000000B9
-:101990000CC000000000021200000000C040040063
-:1019A000000000010000000000600000000005DEF3
-:1019B000000000000040040F0000021300000000BF
-:1019C00000600000000005D1000000000060000081
-:1019D000000005DE00000210006004110000031585
-:1019E0000000000000600000000001A000000000F6
-:1019F000006000000000019C00000000006000008A
-:101A0000000002BB0000000000600000000002A314
-:101A1000938000000020441100000000000000003E
-:101A2000002048080000000000000000002F022FE6
-:101A300000000000000000000AE000000000023288
-:101A400000000000006000000000013A00000000FB
-:101A50000040000000000236950000000020441104
-:101A60000000000000000000002F022F0000000016
-:101A7000000000000CE00000000002360000000042
-:101A8000C0404800000002339200000000204411D2
-:101A90000000000000000000C0204800000000001E
-:101AA0000000225600204411000000000000001633
-:101AB00000204811000000000000225C00204411BA
-:101AC000000000000000000300204811000000009A
-:101AD0000000A1FC002044110000000000000001F3
-:101AE00000204811000000000001A1FD0020441169
-:101AF000000000000000000000600411000002FB74
-:101B000000000000C04004000000000100000000D0
-:101B100000600000000005D10000A00C002044116E
-:101B20000000000000000000C0204800000000008D
-:101B300000000000C040480000000000000000005D
-:101B4000006000000000000B0000001840210A2087
-:101B50000000000000000003002F0222000000002F
-:101B6000000000000AE000000000024C0000001429
-:101B70000020222D00000000000801010029222879
-:101B800000000000000000140020362800000000C3
-:101B90000000A30C00204411000000000000000021
-:101BA000C02048000000000000000000C0204800E5
-:101BB0000000000000000000C0404800000002518A
-:101BC00000000000006000000000000B000000109A
-:101BD00000600411000003153F8000000020041184
-:101BE000000000000000000000600811000001B2C9
-:101BF0000000225C002044110000000000000003EF
-:101C000000204811000000000000000000600000FB
-:101C10000000027C0000001700201E2D00000000C4
-:101C20000000000100211E2700000000000000004D
-:101C300014E000000000026A0000001200201E2DC7
-:101C4000000000000000FFFF00281E270000000029
-:101C50000000000000341C2700000000000000000D
-:101C600012C000000000025F0000000000201C11F4
-:101C70000000000000000000002F00E50000000050
-:101C80000000000008C00000000002620000000028
-:101C900000201407000000000000001200201E2D8C
-:101CA000000000000000001000211E2700000000BE
-:101CB0000000000000341C4700000000000000008D
-:101CC00012C00000000002670000000000201C118C
-:101CD0000000000000000000002F00E600000000EF
-:101CE0000000000008C000000000026A00000000C0
-:101CF0000020180700000000000000000060000045
-:101D0000000002C100002256002044110000000023
-:101D1000000000000034202300000000000000004C
-:101D200012C00000000002720000000000342044D5
-:101D3000000000000000000012C00000000002715E
-:101D40000000001600404811000002760000001854
-:101D500000404811000002760000000000342044DA
-:101D6000000000000000000012C00000000002752A
-:101D70000000001700404811000002760000001922
-:101D800000204811000000000000A1FC00204411C8
-:101D900000000000000000010020481100000000C9
-:101DA0000001A1FD00604411000002E900003FFFB6
-:101DB000002F022F00000000000000000CC00000F7
-:101DC0000000025600000000C040040000000001B6
-:101DD0000000001040210620000000000000FFFF6E
-:101DE000C0280A20000000000000001040210E2042
-:101DF000000000000000FFFFC028122000000000CB
-:101E00000000001040211620000000000000FFFF2D
-:101E1000C0881A200000000081000000002044114A
-:101E20000000000000000001002048110000000038
-:101E3000000420040060441100000622000000009D
-:101E400000600000000005D100000000C06000003C
-:101E5000000002A30000000500200A2D0000000081
-:101E60000000000800220A22000000000000002BF1
-:101E700000201A2D000000000000001C00201E2D74
-:101E8000000000000000700000281E270000000075
-:101E90000000000000311CE6000000000000002AE5
-:101EA00000201A2D000000000000000C00221A265D
-:101EB0000000000000000000002F00E6000000000D
-:101EC0000000000006E00000000002920000000098
-:101ED00000201C11000000000000000000200C1178
-:101EE000000000000000002B00203623000000004E
-:101EF0000000001000201811000000000000000089
-:101F000000691CE20000012F9380000000204411B2
-:101F10000000000000000000002048070000000052
-:101F200095000000002044110000000000000000A7
-:101F3000002F022F00000000000000000CE0000055
-:101F40000000029D0000000100333E2F0000000051
-:101F500000000000D90048000000000092000000CE
-:101F6000002044110000000000000000C0204800D4
-:101F7000000000000000001C0040362700000000A8
-:101F80000000000CC0220A20000000000000002910
-:101F9000002036220000000000000028C04036204B
-:101FA000000000000000A2A4002044110000000076
-:101FB000000000090020481100000000A1000000FE
-:101FC00000204411000000000000000100804811C2
-:101FD000000000000000002100201E2D0000000075
-:101FE00000000000002C1CE30000000000000021A5
-:101FF00000203627000000000000002200201E2DD7
-:102000000000000000000000002C1CE400000000A4
-:1020100000000022002036270000000000000023FE
-:1020200000201E2D0000000000000000003120A351
-:102030000000000000000000002D1D07000000004F
-:1020400000000023002036270000000000000024CC
-:1020500000201E2D0000000000000000003120C400
-:102060000000000000000000002D1D07000000001F
-:10207000000000240080362700000000000000213E
-:10208000002036230000000000000022002036243B
-:10209000000000000000000000311CA30000000050
-:1020A0000000002300203627000000000000000090
-:1020B00000311CC40000000000000024008036270E
-:1020C000000000000000001A002036270000000079
-:1020D0000000001B00203628000000000000001750
-:1020E00000201E2D00000000000000020021022739
-:1020F000000000000000000014C00000000002DC2E
-:102100000000000000400000000002D90000001A9A
-:1021100000203627000000000000001B00203628A9
-:10212000000000000000001700201E2D000000002D
-:102130000000000200210227000000000000000053
-:1021400014E00000000002D9000000030021022773
-:10215000000000000000000014E00000000002DCAD
-:102160000000002300201E2D0000000000000000E1
-:10217000002E00E1000000000000000002C000008E
-:10218000000002DC0000002100201E2D00000000E5
-:1021900000000000003120A100000000000000004D
-:1021A000002E00E8000000000000000006C0000053
-:1021B000000002DC0000002400201E2D00000000B2
-:1021C00000000000002E00E20000000000000000FF
-:1021D00002C00000000002DC0000002200201E2DD2
-:1021E0000000000000000000003120C200000000DC
-:1021F00000000000002E00E80000000000000000C9
-:1022000006C00000000002DC0000000000600000CA
-:10221000000005FF0000000000600000000002B5A3
-:102220000000000000400000000002DE000000008E
-:1022300000600000000002B5000000000060000027
-:10224000000005F60000000000400000000002DE73
-:102250000000000000600000000002A70000000075
-:1022600000400000000002DE0000001A00201E2DC9
-:10227000000000000000001B0080222D0000000074
-:102280000000001000221E230000000000000000DB
-:1022900000294887000000000000000000311CA356
-:1022A000000000000000001000221E2700000000B7
-:1022B0000000000000294887000000000000001016
-:1022C00000221E230000000000000000003120C496
-:1022D000000000000000FFFF00282228000000008E
-:1022E0000000000000894907000000000000001005
-:1022F00000221E2300000000000000000029488783
-:10230000000000000000001000221E21000000005C
-:102310000000000000294847000000000000000005
-:1023200000311CA3000000000000001000221E2746
-:1023300000000000000000000029488700000000A5
-:102340000000000000311CA100000000000000108F
-:1023500000221E270000000000000000002948475E
-:10236000000000000000001000221E2300000000FA
-:1023700000000000003120C4000000000000FFFF4A
-:102380000028222800000000000000000029490762
-:10239000000000000000001000221E2100000000CC
-:1023A00000000000003120C2000000000000FFFF1C
-:1023B00000282228000000000000000000894907D2
-:1023C000000000000000001000221E23000000009A
-:1023D0000000000000294887000000000000000104
-:1023E00000220A210000000000000000003308A2C3
-:1023F000000000000000001000221E22000000006B
-:102400000000001000212222000000000000000057
-:1024100000294907000000000000000000311CA353
-:10242000000000000000001000221E270000000035
-:1024300000000000002948870000000000000001A3
-:1024400000220A210000000000000000003008A265
-:10245000000000000000001000221E22000000000A
-:1024600000000010002122220000000000000000F7
-:1024700000294907000000000000001000221E2370
-:102480000000000000000000003120C40000000037
-:102490000000FFFF002822280000000000000000CC
-:1024A000002949070000000000000000003808C5AE
-:1024B00000000000000000000030084100000000A3
-:1024C0000000000100220A220000000000000000BD
-:1024D000003308A2000000000000001000221E22AD
-:1024E0000000000000000010002122220000000077
-:1024F00000000000008949070000000000000017EC
-:102500000020222D000000000000000014C0000088
-:1025100000000318FFFFFFEF002806210000000065
-:10252000000000140020222D000000000000F8E050
-:1025300000204411000000000000000000294901B3
-:1025400000000000000000000089490100000000B8
-:102550000000000000204811000000000000000002
-:102560000020481100000000060A02000080481107
-:102570000000000000000000C0200000000000007B
-:1025800097000000C020441100000000000000007F
-:10259000C0204811000000008A0000000020441103
-:1025A00000000000000000000020481100000000B2
-:1025B0000000225C00204411000000000000000028
-:1025C000C0204800000000000000A1FC00204411D1
-:1025D0000000000000000000C020480000000000D3
-:1025E00000000000C0200400000000000000000007
-:1025F00000A0000A0000000097000000C020441165
-:102600000000000000000000C02048110000000091
-:102610008A000000C02044110000000000000000FB
-:1026200000204811000000000000225C002044113E
-:102630000000000000000000C02048000000000072
-:102640000000A1FC00204411000000000000000078
-:10265000C02048000000000000000000C02004006E
-:10266000000000000000000000A0000A00000000C0
-:10267000970000000020441100000000000000004E
-:1026800000204811000000008A00000000204411D2
-:1026900000000000000000000020481100000000C1
-:1026A0000000225C00204411000000000000000037
-:1026B000C0204800000000000000A1FC00204411E0
-:1026C0000000000000000000C020480000000000E2
-:1026D00000000000C0200400000000000000000016
-:1026E00000A0000A00000000970000000020441134
-:1026F0000000000000000000002048110000000061
-:102700008A000000002044110000000000000000CA
-:1027100000204811000000000000225C002044114D
-:102720000000000000000000C02048000000000081
-:102730000000A1FC00204411000000000000000087
-:10274000C0204800000000000001A1FD002044114D
-:102750000000000000000000D90048000000000058
-:1027600000000000C0200400000000000000000085
-:1027700000A0000A000000000000225700204411C1
-:102780000000000000000003C0484A2000000000D4
-:102790000000225D00204411000000000000000045
-:1027A000C040480000000000000000000060000081
-:1027B000000005DE00000000C0200800000000004E
-:1027C0000000225C00204411000000000000000313
-:1027D00000384A22000000000000A1FC0020441143
-:1027E0000000000000000000C020480000000000C1
-:1027F0000001A1FD002044110000000000000000C5
-:10280000002F022200000000000000000CE0000089
-:102810000000000000000000402048000000000010
-:102820000000000140304A200000000000000002CB
-:10283000C0304A20000000000000000100530A22BE
-:10284000000003550000003FC0280A2000000000DF
-:102850008100000000204411000000000000000181
-:102860000020481100000000000021F80020441161
-:1028700000000000000000180020481100000000C7
-:10288000000421F90060441100000622000000113C
-:1028900000210230000000000000000014E00000F1
-:1028A0000000035E00000014002F02220000000060
-:1028B000000000000CC000000000036C0001A2A496
-:1028C00000204411000000000000000000604802E9
-:1028D00000000374000021000020441100000000EB
-:1028E00000000000C02048000000000000000000C0
-:1028F000C02048000000000000000000C020480088
-:102900000000000000000000C0404800000000007F
-:1029100000000004002F0222000000000000000060
-:102920000CC00000000003700001A2A400204411AC
-:1029300000000000000000000040480200000367A3
-:1029400000000028002F022200000000000000000C
-:102950000CC00000000005BA0001A2A40020441130
-:102960000000000000000000004048020000036773
-:102970000000002C00203626000000000000004966
-:1029800000201811000000000000003F0020481146
-:10299000000000000000000100331A2600000000C3
-:1029A00000000000002F02260000000000000000D0
-:1029B0000CC00000000003760000002C00801A2DDF
-:1029C000000000000000003FC0280A2000000000B6
-:1029D00000000015002F022200000000000000008F
-:1029E0000CE000000000038C00000006002F022213
-:1029F00000000000000000000CE00000000003B731
-:102A000000000016002F022200000000000000005D
-:102A10000CE00000000003B900000020002F02229B
-:102A200000000000000000000CE00000000003A215
-:102A30000000000F002F0222000000000000000034
-:102A40000CE00000000003AE00000010002F022286
-:102A500000000000000000000CE00000000003AED9
-:102A60000000001E002F02220000000000000000F5
-:102A70000CE00000000003960000A2A40020441116
-:102A800000000000000000000040480200000000BC
-:102A90000800000000290A220000000000000003D6
-:102AA00040210E20000000000000000CC021122078
-:102AB00000000000000800000028122400000000B0
-:102AC00000000014C02216200000000000000000DA
-:102AD000002914A4000000000000A2A4002044115A
-:102AE0000000000000000000002948A200000000D3
-:102AF0000000A1FE002044110000000000000000C2
-:102B00000040480300000000810000000020441144
-:102B1000000000000000000100204811000000003B
-:102B2000000021F800204411000000000000001601
-:102B30000020481100000000000421F90060441149
-:102B400000000622000000150021023000000000F5
-:102B50000000000014E00000000003980000210EB7
-:102B6000002044110000000000000000C0204800C8
-:102B70000000000000000000C0204800000000002D
-:102B80000000A2A40020441100000000000000008A
-:102B900000404802000000008100000000204411B5
-:102BA00000000000000000010020481100000000AB
-:102BB000000021F800204411000000000000001770
-:102BC0000020481100000000000421F900604411B9
-:102BD0000000062200000003002102300000000077
-:102BE0000000000014E00000000003A40000210821
-:102BF000002044110000000000000000C020480038
-:102C00000000000000000000C0204800000000009C
-:102C10000000A2A4002044110000000000000000F9
-:102C200000404802000000000000A2A4002044115F
-:102C3000000000000000000000204802000000002A
-:102C4000800000000020441100000000000000008F
-:102C50000020481100000000810000000020441105
-:102C600000000000000000100020481100000000DB
-:102C70000000000000200010000000000000000024
-:102C800014C00000000003B4000000000040000079
-:102C9000000000000001A2A4002044110000000078
-:102CA0000000000600404811000000000001A2A43E
-:102CB00000204411000000000000001600604811D0
-:102CC000000003740000000000400000000000004D
-:102CD00000000000C020080000000000000000000C
-:102CE000C0200C00000000000000001D0021022395
-:102CF000000000000000000014E00000000003CE0F
-:102D000081000000002044110000000000000001CC
-:102D10000020481100000000000021F800204411AC
-:102D20000000000000000018002048110000000012
-:102D3000000421F900604411000006220000001187
-:102D400000210230000000000000000014E000003C
-:102D5000000003C200002100002044110000000018
-:102D600000000000002048020000000000000000F9
-:102D70000020480300000000BABECAFE002048112F
-:102D800000000000CAFEBABE00204811000000008A
-:102D90000000A2A400204411000000000000000474
-:102DA0000040481100000000000021700020441184
-:102DB00000000000000000000020480200000000A9
-:102DC0000000000000204803000000008100000017
-:102DD00000204411000000000000000A00204811FB
-:102DE00000000000000000000020001000000000B3
-:102DF0000000000014C00000000003D38C0000009D
-:102E00000020441100000000CAFEBABE0040481174
-:102E100000000000810000000020441100000000BC
-:102E200000000001002048110000000000003FFFEA
-:102E300040280A20000000008000000040280E20EA
-:102E40000000000040000000C02812200000000028
-:102E50000004000000694622000006220000000075
-:102E6000002014100000000000000000002F0223CA
-:102E700000000000000000000CC00000000003E1A2
-:102E800000000000C0401800000003E400003FFF05
-:102E9000C0281A2000000000000400000069462637
-:102EA00000000622000000000020181000000000B2
-:102EB00000000000002F02240000000000000000BD
-:102EC0000CC00000000003E700000000C0401C0030
-:102ED000000003EA00003FFFC0281E2000000000A1
-:102EE00000040000006946270000062200000000E0
-:102EF00000201C1000000000000000000020440220
-:102F00000000000000000000002820C500000000B4
-:102F100000000000004948E800000000A580000013
-:102F200000200811000000000000200000200C110B
-:102F30000000000083000000006044110000041243
-:102F4000000000000020440200000000000000001B
-:102F5000C0204800000000000000000040204800A1
-:102F6000000000000000001FC0210220000000003F
-:102F70000000000014C00000000003F70000201053
-:102F800000204411000000000000800000204811D3
-:102F9000000000000000FFFFC0481220000003FFF7
-:102FA000A780000000200811000000000000A00021
-:102FB00000200C110000000083000000006044119C
-:102FC0000000041200000000002044020000000085
-:102FD00000000000C02048000000000000000000C9
-:102FE000C0204800000000000000FFFFC0281220A1
-:102FF00000000000830000000020441100000000D9
-:103000000000000000304883000000008400000041
-:10301000002044110000000000000000C020480013
-:1030200000000000000000001D0000000000000083
-:103030008300000000604411000004120000000042
-:10304000C040040000000001A98000000020081119
-:10305000000000000000C00000400C11000003FA56
-:10306000AB80000000200811000000000000F8E024
-:1030700000400C11000003FAAD8000000020081190
-:10308000000000000000F88000400C11000003FA6E
-:10309000B380000000200811000000000000F3FCD5
-:1030A00000400C11000003FAAF800000002008115E
-:1030B000000000000000E00000400C11000003FAD6
-:1030C000B180000000200811000000000000F000A6
-:1030D00000400C11000003FA83000000002044119E
-:1030E00000000000000021480020481100000000FE
-:1030F00084000000002044110000000000000000D7
-:10310000C020480000000000000000001D0000007A
-:10311000000000000000000000800000000000002F
-:1031200001182000C0304620000000000000000010
-:10313000D90048000000000000000000C02004008A
-:10314000000000000000000000A0000A00000000D5
-:103150000218A000C030462000000000000000005F
-:10316000D90048000000000000000000C02004005A
-:10317000000000000000000000A0000A00000000A5
-:103180000318C000C030462000000000000000000E
-:10319000D90048000000000000000000C02004002A
-:1031A000000000000000000000A0000A0000000075
-:1031B0000418F8E0C03046200000000000000000C5
-:1031C000D90048000000000000000000C0200400FA
-:1031D000000000000000000000A0000A0000000045
-:1031E0000518F880C03046200000000000000000F4
-:1031F000D90048000000000000000000C0200400CA
-:10320000000000000000000000A0000A0000000014
-:103210000618E000C030462000000000000000005A
-:10322000D90048000000000000000000C020040099
-:10323000000000000000000000A0000A00000000E4
-:103240000718F000C0304620000000000000000019
-:10325000D90048000000000000000000C020040069
-:10326000000000000000000000A0000A00000000B4
-:103270000818F3FCC03046200000000000000000E9
-:10328000D90048000000000000000000C020040039
-:10329000000000000000000000A0000A0000000084
-:1032A00000000033C0300A200000000000000000D1
-:1032B000C0403440000000000000003000200A2D13
-:1032C0000000000000000000C0290C4000000000C9
-:1032D0000000003000203623000000000000000045
-:1032E000C0200400000000000000000000A0000A50
-:1032F00000000000860000000020441100000000D3
-:1033000000000000004048010000000085000000AF
-:10331000C0204411000000000000000000404801EF
-:10332000000000000000217C00204411000000008B
-:1033300000000018402102200000000000000000F2
-:1033400014C000000000044700800000C0494A206B
-:103350000000044800000000C020480000000000F9
-:1033600000000000C0204800000000000000000035
-:10337000C02048000000000081000000002044112F
-:1033800000000000000000010020481100000000C3
-:1033900000000000C0200800000000000000000441
-:1033A000002F0222000000000000000006E00000E4
-:1033B000000004500000000400200811000000007C
-:1033C0000000000017000000000000000004217F42
-:1033D00000604411000006220000001F002102309E
-:1033E000000000000000000014C000000000000009
-:1033F0000000000000404C020000045000000000EB
-:10340000C0200C000000000000000000C0201000E0
-:103410000000000000000000C020140000000000B8
-:1034200000000000C02018000000000000000000A4
-:10343000C0201C000000000000007F0000280A21BE
-:103440000000000000004500002F022200000000E4
-:10345000000000000CE0000000000461000000001B
-:10346000C02020000000000000000004002F0228FF
-:10347000000000000000000006E000000000046101
-:1034800000000004002020110000000000000000E7
-:1034900017000000000000000000001000280A23B0
-:1034A0000000000000000010002F022200000000B9
-:1034B000000000000CE00000000004698100000032
-:1034C000002044110000000000000001002048110D
-:1034D00000000000000400000069462400000622ED
-:1034E00000000000004000000000046E81000000A9
-:1034F00000204411000000000000000000204811DE
-:10350000000000000000216D0020441100000000B8
-:10351000000000000020480400000000000000003F
-:10352000006048050000062700000000002824F085
-:10353000000000000000000700280A23000000002F
-:1035400000000001002F0222000000000000000027
-:103550000AE000000000047500000000002F00C910
-:10356000000000000000000004E000000000048EE5
-:1035700000000000004000000000049B000000026A
-:10358000002F022200000000000000000AE00000FE
-:103590000000047A00000000002F00C900000000B5
-:1035A0000000000002E000000000048E00000000A7
-:1035B000004000000000049B00000003002F0222D6
-:1035C00000000000000000000AE000000000047F8E
-:1035D00000000000002F00C90000000000000000F3
-:1035E0000CE000000000048E00000000004000001D
-:1035F0000000049B00000004002F022200000000D5
-:10360000000000000AE00000000004840000000048
-:10361000002F00C900000000000000000AE00000C8
-:103620000000048E00000000004000000000049B29
-:1036300000000005002F0222000000000000000032
-:103640000AE000000000048900000000002F00C90B
-:10365000000000000000000006E000000000048EF2
-:1036600000000000004000000000049B0000000675
-:10367000002F022200000000000000000AE000000D
-:103680000000048E00000000002F00C900000000B0
-:103690000000000008E000000000048E00000000B0
-:1036A000004000000000049B00007F0000280A2169
-:1036B0000000000000004500002F02220000000072
-:1036C000000000000AE00000000000000000000808
-:1036D00000210A23000000000000000014C00000C8
-:1036E000000004980000216900204411000000003F
-:1036F00000000000C02048000000000000000000A2
-:10370000C02048000000000000000000C020480069
-:1037100000000000CAFEBABE0040481100000000D0
-:1037200000000000C0204400000000000000000075
-:10373000C02000000000000000000000C040480061
-:103740000000000000007F0000280A2100000000A7
-:1037500000004500002F02220000000000000000D1
-:103760000AE00000000004A100000000C0200000EA
-:103770000000000000000000C02000000000000069
-:1037800000000000C0400000000000000000000039
-:1037900000404C080000046100000000C020080048
-:1037A000000000000000001040210E20000000007A
-:1037B0000000001140211220000000000000001253
-:1037C0004021162000000000000021690020441163
-:1037D000000000000000000000204802000000007F
-:1037E0000000000000210225000000000000000091
-:1037F00014E00000000004AB00040000C0494A20AF
-:10380000000004ACFFFBFFFFC0284A2000000000BE
-:103810000000000000210223000000000000000062
-:1038200014E00000000004B800000000C0204800C0
-:103830000000000000000000C02048000000000060
-:103840000000000000210224000000000000000031
-:1038500014C000000000000081000000002044119E
-:10386000000000000000000C0020481100000000D3
-:103870000000000000200010000000000000000018
-:1038800014C00000000004B4A00000000020441197
-:1038900000000000CAFEBABE00404811000000004F
-:1038A000810000000020441100000000000000041E
-:1038B00000204811000000000000216B002044118E
-:1038C0000000000000000000C020481000000000C0
-:1038D00081000000002044110000000000000005ED
-:1038E00000204811000000000000216C002044115D
-:1038F0000000000000000000C02048100000000090
-:1039000000000000002F0224000000000000000062
-:103910000CE000000000000000000000004000007B
-:10392000000004B200000000C0210A2000000000D6
-:103930000000000014C00000000004CB8100000063
-:103940000020441100000000000000000020481189
-:10395000000000000000216D002044110000000064
-:1039600000000000C020480000000000000000002F
-:10397000C060480000000627000000000040000072
-:10398000000004CF8100000000204411000000006E
-:1039900000000001002048110000000000040000A9
-:1039A000C02946200000000000000000C0600000A8
-:1039B0000000062200000001002102220000000099
-:1039C0000000000014C00000000004D600002169BF
-:1039D000002044110000000000000000C02048004A
-:1039E0000000000000000000C020480000000000AF
-:1039F000000000000020481000000000CAFEBABE0F
-:103A0000004048110000000000000000C0204400F9
-:103A10000000000000000000C0404810000000004E
-:103A2000810000000020441100000000000000019F
-:103A30000020481100000000000021F8002044117F
-:103A4000000000000000000E0020481100000000EF
-:103A5000000421F90060441100000622000000006B
-:103A600000210230000000000000000014C000002F
-:103A7000000004D800002180002044110000000054
-:103A800000000000C020480000000000000000000E
-:103A9000C02000000000000000000000C02048001E
-:103AA0000000000000000000C02000000000000036
-:103AB00000000000C04048000000000000000003BB
-:103AC00000333E2F00000000000000010021022111
-:103AD000000000000000000014E0000000000508E5
-:103AE0000000002C00200A2D00000000000400004F
-:103AF00018E00C11000004F70000000100333E2F15
-:103B000000000000000021690020441100000000B6
-:103B1000000000000020480200000000000000003B
-:103B200000204803000000000000000800300A22C6
-:103B30000000000000000000C0204800000000005D
-:103B400000000000C02048000000000000002169C3
-:103B50000020441100000000000000000020480286
-:103B600000000000000000000020480300000000EA
-:103B70000000000800300A220000000000000000E1
-:103B8000C02048000000000000000000D8C048002D
-:103B9000000004EB00002169002044110000000037
-:103BA00000000000002048020000000000000000AB
-:103BB00000204803000000000000000800300A2236
-:103BC0000000000000000000C020480000000000CD
-:103BD00000000000C0204800000000000000002D90
-:103BE0000020122D000000000000000000290C83BE
-:103BF00000000000000021690020441100000000C6
-:103C0000000000000020480200000000000000004A
-:103C100000204803000000000000000800300A22D5
-:103C20000000000000000000C0204800000000006C
-:103C300000000000C020480000000000000000114B
-:103C400000210224000000000000000014C0000059
-:103C5000000000000000000000400000000004B26E
-:103C60000000002CC0203620000000000000002DC5
-:103C7000C0403620000000000000000F002102219B
-:103C8000000000000000000014C000000000050D4E
-:103C900000000000006000000000000B00000000B9
-:103CA000D90000000000000000000000C040040037
-:103CB00000000001B50000000020441100000000D9
-:103CC000000020000020481100000000B6000000A5
-:103CD00000204411000000000000A0000020481156
-:103CE00000000000B70000000020441100000000A8
-:103CF0000000C0000020481100000000B8000000D3
-:103D000000204411000000000000F8E000204811ED
-:103D100000000000B9000000002044110000000075
-:103D20000000F8800020481100000000BA000000E8
-:103D300000204411000000000000E00000204811B5
-:103D400000000000BB000000002044110000000043
-:103D50000000F0000020481100000000BC0000003E
-:103D600000204411000000000000F3FC0020481176
-:103D7000000000008100000000204411000000004D
-:103D8000000000020020481100000000000000FFB9
-:103D900000280E300000000000000000002F022369
-:103DA00000000000000000000CC000000000052121
-:103DB00000000000C020080000000000000000001B
-:103DC00014C00000000005360000000000200C11A7
-:103DD000000000000000001C00203623000000004E
-:103DE0000000002B00203623000000000000002906
-:103DF00000203623000000000000002800203623A9
-:103E00000000000000000017002036230000000022
-:103E100000000025002036230000000000000026DE
-:103E2000002036230000000000000015002036238B
-:103E300000000000000000160020362300000000F3
-:103E4000FFFFE00000200C11000000000000002136
-:103E5000002036230000000000000022002036234E
-:103E60000000000000001FFF00200C1100000000F7
-:103E70000000002300203623000000000000002482
-:103E80000020362300000000F1FFFFFF00283A2E3B
-:103E9000000000000000001AC0220E2000000000F8
-:103EA000000000000029386E0000000081000000C2
-:103EB000002044110000000000000006002048110E
-:103EC000000000000000002A402036200000000012
-:103ED00087000000002044110000000000000000E6
-:103EE000C0204800000000000000A1F400204411A0
-:103EF000000000000000000000204810000000004A
-:103F00009D00000000204411000000000000001F80
-:103F100040214A20000000009600000000204411CB
-:103F20000000000000000000C02048000000000069
-:103F300000000000C0200C00000000000000000095
-:103F4000C0201000000000000000001F0021162407
-:103F5000000000000000000014C00000000000008D
-:103F60000000001D002036230000000000000003B8
-:103F700000281E2300000000000000080022222369
-:103F800000000000FFFFF0000028222800000000D1
-:103F900000000000002920E8000000000000001FD1
-:103FA00000203628000000000000001800211E2319
-:103FB0000000000000000020002036270000000064
-:103FC0000000000200221624000000000000000093
-:103FD000003014A8000000000000001E002036255C
-:103FE000000000000000000300211A24000000006F
-:103FF0001000000000281A2600000000EFFFFFFF5D
-:1040000000283A2E0000000000000000004938CED1
-:10401000000006100000000140280A2000000000F7
-:104020000000000640280E200000000000000300F1
-:10403000C028122000000000000000080021122407
-:104040000000000000000000C0201620000000005A
-:1040500000000000C0201A20000000000000000046
-:1040600000210222000000000000000014C0000037
-:104070000000056C810000000020441100000000D9
-:10408000000000010020481100000000000022583C
-:1040900000300A24000000000004000000694622ED
-:1040A00000000622000021690020441100000000E9
-:1040B0000000000000204805000000000002000091
-:1040C00000294A26000000000000000000204810DF
-:1040D00000000000CAFEBABE002048110000000027
-:1040E00000000002002F022300000000000000007A
-:1040F0000CC000000000057400000000C0201C106F
-:104100000000000000000000C04000000000058228
-:1041100000000002002F0223000000000000000049
-:104120000CC0000000000574810000000020441154
-:104130000000000000000001002048110000000005
-:104140000000225800300A24000000000004000093
-:10415000006946220000062200000000C0201C105A
-:104160000000000000000000C040000000000582C8
-:1041700000000000002F02230000000000000000EB
-:104180000CC000000000057800000000C0201C00EA
-:104190000000000000000000C04000000000058298
-:1041A00000000004002F02230000000000000000B7
-:1041B0000CC00000000005808100000000204411B8
-:1041C0000000000000000000002048110000000076
-:1041D0000000216D002044110000000000000000DC
-:1041E000C02048000000000000000000C06048003F
-:1041F000000006270000000000401C10000005829F
-:1042000000000000C02000000000000000000000CE
-:10421000C040000000000000000000000EE00000B0
-:10422000000005840000000000600000000005C3DD
-:1042300000000000002F0224000000000000000029
-:104240000CC00000000005920000A2B7002044113D
-:1042500000000000000000000020480700000000EF
-:10426000000000330020262D000000000000001A8E
-:10427000002122290000000000000006002226295B
-:10428000000000000000A2C4002044110000000053
-:1042900000000000003048E90000000000000000BD
-:1042A00000E00000000005900000A2D100204411B1
-:1042B000000000000000000000404808000000006E
-:1042C0000000A2D100204411000000000000000105
-:1042D00000504A280000000000000001002F0224C6
-:1042E00000000000000000000CC00000000005A05D
-:1042F0000000A2BB002044110000000000000000EC
-:104300000020480700000000000000340020262D97
-:10431000000000000000001A002122290000000017
-:104320000000000600222629000000000000A2C5AF
-:10433000002044110000000000000000003048E9A7
-:10434000000000000000000000E000000000059EEA
-:104350000000A2D200204411000000000000000074
-:1043600000404808000000000000A2D200204411D4
-:10437000000000000000000100504A28000000007A
-:1043800000000002002F02240000000000000000D6
-:104390000CC00000000005AE0000A2BF00204411C8
-:1043A000000000000000000000204807000000009E
-:1043B000000000350020262D000000000000001A3B
-:1043C000002122290000000000000006002226290A
-:1043D000000000000000A2C6002044110000000000
-:1043E00000000000003048E900000000000000006C
-:1043F00000E00000000005AC0000A2D30020441142
-:10440000000000000000000000404808000000001C
-:104410000000A2D3002044110000000000000001B1
-:1044200000504A28000000000000A2C300204411F0
-:10443000000000000000000000204807000000000D
-:10444000000000360020262D000000000000001AA9
-:104450000021222900000000000000060022262979
-:10446000000000000000A2C700204411000000006E
-:1044700000000000003048E90000000000000000DB
-:1044800000E00000000005B80000A2D400204411A4
-:10449000000000000000000000404808000000008C
-:1044A0000000A2D400204411000000000000000120
-:1044B00000504A2800000000850000000020441140
-:1044C0000000000000000000002048010000000083
-:1044D0000000304A002044110000000001000000EC
-:1044E0000020481100000000000000000040000013
-:1044F000000005BEA4000000C02044110000000020
-:1045000000000000C0404800000000000000000063
-:10451000C0600000000005C300000000C0400400AF
-:10452000000000010001A2A40020441100000000CE
-:104530000000003F00204811000000000000003F84
-:1045400000204811000000000000003F002048113A
-:10455000000000000000003F0020481100000000A3
-:104560000000000500204811000000000000A1F438
-:10457000002044110000000000000000002048114D
-:10458000000000008800000000204411000000002E
-:10459000000000010020481100000000FF000000A2
-:1045A000002044110000000000000000002048111D
-:1045B0000000000000000001002048110000000081
-:1045C0000000000200804811000000000000000010
-:1045D0000EE00000000005D60000100000200811C9
-:1045E000000000000000002B002036220000000028
-:1045F0000000000000600000000005DA000000007C
-:1046000000600000000005C3980000000020441175
-:1046100000000000000000000080481100000000C1
-:1046200000000000C0600000000005DA000000008B
-:10463000C0400400000000010000A2A400204411BA
-:1046400000000000000000220020481100000000CF
-:10465000890000000020441100000000000000015B
-:1046600000404811000005CD9700000000204411D3
-:1046700000000000000000000020481100000000C1
-:104680008A0000000020441100000000000000002B
-:1046900000404811000005CD00000000006000004F
-:1046A000000005F30001A2A4C02044110000000096
-:1046B0000000001600604811000003740000201084
-:1046C00000204411000000000001000000204811FB
-:1046D00000000000810000000020441100000000E4
-:1046E0000000000100204811000000000000217CB3
-:1046F0000020441100000000098000000020481143
-:1047000000000000FFFFFFFF002048110000000034
-:104710000000000000204811000000000000000020
-:1047200017000000000000000004217F0060441119
-:10473000000006220000001F0021023000000000DF
-:104740000000000014C00000000000000000000491
-:1047500000404C11000005ED00000000004000008A
-:10476000000000000000001700201E2D00000000C7
-:104770000000000400291E270000000000000017B0
-:1047800000803627000000000000001700201E2DCA
-:1047900000000000FFFFFFFB00281E2700000000B4
-:1047A00000000017008036270000000000000017FE
-:1047B00000201E2D000000000000000800291E2718
-:1047C00000000000000000170080362700000000F5
-:1047D0000000001700201E2D00000000FFFFFFF763
-:1047E00000281E2700000000000000170080362768
-:1047F000000000000001A2A40020441100000000FD
-:104800000000001600604811000003740000201032
-:1048100000204411000000000001000000204811A9
-:10482000000000000000217C002044110000000076
-:10483000018000000020481100000000FFFFFFFF82
-:104840000020481100000000000000000020481176
-:104850000000000000000000170000000000000041
-:104860008100000000204411000000000000000151
-:1048700000204811000000000004217F0060441166
-:10488000000006220000001F00210230000000008E
-:104890000000000014C0000000000621000000100D
-:1048A00000404C110000060700000000C02004007A
-:1048B000000000000000000038C000000000000000
-:1048C0000000001D00200A2D000000000000001E56
-:1048D00000200E2D000000000000001F0020122DFF
-:1048E00000000000000000200020162D0000000045
-:1048F00000002169002044110000000000000000B9
-:1049000000204804000000000000000000204805CE
-:10491000000000000000000000204801000000002E
-:10492000CAFEBABE002048110000000000000004CA
-:10493000003012240000000000000000002F00647E
-:1049400000000000000000000CC000000000062075
-:104950000000000300281A220000000000000008E8
-:104960000022122200000000FFFFF00000281224A5
-:104970000000000000000000002910C4000000003A
-:104980000000001F0040362400000000000000006E
-:104990000080000000000000000000001AC00000BD
-:1049A000000006229F0000000020441100000000CB
-:1049B000CAFEBABE0020481100000000000000003E
-:1049C0001AE0000000000625000000000080000042
-:1049D00000000000000000001AC0000000000627D0
-:1049E0009E0000000020441100000000CAFEBABE74
-:1049F0000020481100000000000000001AE0000044
-:104A00000000062A000000000080000000000000F6
-:104A100000000000006000000000000B000010001B
-:104A200000600411000003150000000000200411C4
-:104A3000000000000000000000600811000001B24A
-:104A40000000225C00204411000000000000000370
-:104A500000204811000000000000225600204411F0
-:104A6000000000000000001B0020481100000000B2
-:104A70000000A1FC00204411000000000000000123
-:104A800000204811000000000001A1FDC0204411D9
-:104A9000000000000000002100201E2D000000008A
-:104AA0000000001000221E2700000000000000246B
-:104AB0000020222D000000000000FFFF0028222817
-:104AC000000000000000000000294907000000006D
-:104AD000000000000020481100000000000000223B
-:104AE0000020222D000000000000FFFF00282228E7
-:104AF000000000000000000000294907000000003D
-:104B00000000000000204811000000000000002309
-:104B100000201E2D000000000000001000221E27B3
-:104B2000000000000000000000294907000000000C
-:104B300000000000004048110000000000000000DC
-:104B40000000000000000000000000000000000065
-:104B50000000000000000000000000000000000055
-:104B60000000000000000000000000000000000045
-:104B70000000000000000000000000000000000035
-:104B80000000000000000000000000000000000025
-:104B90000000000000000000000000000000000015
-:104BA0000000000000000000000000000000000005
-:104BB00000000000000000000000000000000000F5
-:104BC00000000000000000000000000000000000E5
-:104BD00000000000000000000000000000000000D5
-:104BE00000000000000000000000000000000000C5
-:104BF00000000000000000000000000000000000B5
-:104C000000000000000000000000000000000000A4
-:104C10000000000000000000000000000000000094
-:104C20000000000000000000000000000000000084
-:104C30000000000000000000000000000000000074
-:104C40000000000000000000000000000000000064
-:104C50000000000000000000000000000000000054
-:104C60000000000000000000000000000000000044
-:104C70000000000000000000000000000000000034
-:104C80000000000000000000000000000000000024
-:104C90000000000000000000000000000000000014
-:104CA0000000000000000000000000000000000004
-:104CB00000000000000000000000000000000000F4
-:104CC00000000000000000000000000000000000E4
-:104CD00000000000000000000000000000000000D4
-:104CE00000000000000000000000000000000000C4
-:104CF00000000000000000000000000000000000B4
-:104D000000000000000000000000000000000000A3
-:104D10000000000000000000000000000000000093
-:104D20000000000000000000000000000000000083
-:104D30000000000000000000000000000000000073
-:104D40000000000000000000000000000000000063
-:104D50000000000000000000000000000000000053
-:104D60000000000000000000000000000000000043
-:104D70000000000000000000000000000000000033
-:104D80000000000000000000000000000000000023
-:104D90000000000000000000000000000000000013
-:104DA0000000000000000000000000000000000003
-:104DB00000000000000000000000000000000000F3
-:104DC00000000000000000000000000000000000E3
-:104DD00000000000000000000000000000000000D3
-:104DE00000000000000000000000000000000000C3
-:104DF00000000000000000000000000000000000B3
-:104E000000000000000000000000000000000000A2
-:104E10000000000000000000000000000000000092
-:104E20000000000000000000000000000000000082
-:104E30000000000000000000000000000000000072
-:104E40000000000000000000000000000000000062
-:104E50000000000000000000000000000000000052
-:104E60000000000000000000000000000000000042
-:104E70000000000000000000000000000000000032
-:104E80000000000000000000000000000000000022
-:104E90000000000000000000000000000000000012
-:104EA0000000000000000000000000000000000002
-:104EB00000000000000000000000000000000000F2
-:104EC00000000000000000000000000000000000E2
-:104ED00000000000000000000000000000000000D2
-:104EE00000000000000000000000000000000000C2
-:104EF00000000000000000000000000000000000B2
-:104F000000000000000000000000000000000000A1
-:104F10000000000000000000000000000000000091
-:104F20000000000000000000000000000000000081
-:104F30000000000000000000000000000000000071
-:104F40000000000000000000000000000000000061
-:104F50000000000000000000000000000000000051
-:104F60000000000000000000000000000000000041
-:104F70000000000000000000000000000000000031
-:104F80000000000000000000000000000000000021
-:104F90000000000000000000000000000000000011
-:104FA0000000000000000000000000000000000001
-:104FB00000000000000000000000000000000000F1
-:104FC00000000000000000000000000000000000E1
-:104FD00000000000000000000000000000000000D1
-:104FE00000000000000000000000000000000000C1
-:104FF00000000000000000000000000000000000B1
-:1050000000000000000000000000000000000000A0
-:105010000000000000000000000000000000000090
-:105020000000000000000000000000000000000080
-:105030000000000000000000000000000000000070
-:105040000000000000000000000000000000000060
-:105050000000000000000000000000000000000050
-:105060000000000000000000000000000000000040
-:105070000000000000000000000000000000000030
-:105080000000000000000000000000000000000020
-:105090000000000000000000000000000000000010
-:1050A0000000000000000000000000000000000000
-:1050B00000000000000000000000000000000000F0
-:1050C00000000000000000000000000000000000E0
-:1050D00000000000000000000000000000000000D0
-:1050E00000000000000000000000000000000000C0
-:1050F00000000000000000000000000000000000B0
-:10510000000000000000000000000000000000009F
-:10511000000000000000000000000000000000008F
-:10512000000000000000000000000000000000007F
-:10513000000000000000000000000000000000006F
-:10514000000000000000000000000000000000005F
-:10515000000000000000000000000000000000004F
-:10516000000000000000000000000000000000003F
-:10517000000000000000000000000000000000002F
-:10518000000000000000000000000000000000001F
-:10519000000000000000000000000000000000000F
-:1051A00000000000000000000000000000000000FF
-:1051B00000000000000000000000000000000000EF
-:1051C00000000000000000000000000000000000DF
-:1051D00000000000000000000000000000000000CF
-:1051E00000000000000000000000000000000000BF
-:1051F00000000000000000000000000000000000AF
-:10520000000000000000000000000000000000009E
-:10521000000000000000000000000000000000008E
-:10522000000000000000000000000000000000007E
-:10523000000000000000000000000000000000006E
-:10524000000000000000000000000000000000005E
-:10525000000000000000000000000000000000004E
-:10526000000000000000000000000000000000003E
-:10527000000000000000000000000000000000002E
-:10528000000000000000000000000000000000001E
-:10529000000000000000000000000000000000000E
-:1052A00000000000000000000000000000000000FE
-:1052B0000142050A05BA02500000000001C301685E
-:1052C000044105BA00000000022502090250015104
-:1052D000000000000223024502A00241000000007D
-:1052E00003D705BA05BA05BA0000000005E205E3D8
-:1052F000031F05BA00000000032005BF0320034A76
-:105300000000000003340282034C033E0000000052
-:1053100005BA05BA05BA05BA0000000005BA055776
-:1053200005BA032A0000000003BC05BA04C3034EFB
-:105330000000000004A20455043F05BA000000006C
-:1053400004D805BA044304E5000000000455050F25
-:10535000035B037B0000000005BA05BA05BA05BA75
-:105360000000000005BA05BA05BA05BA0000000041
-:1053700005BA05BA05D805C10000000005BA05BA8E
-:10538000000705BA0000000005BA05BA05BA05BA5B
-:105390000000000005BA05BA05BA05BA0000000011
-:1053A00003F803ED0408040600000000040E040ADC
-:1053B000040C041000000000041C04180424042041
-:1053C00000000000042C0428043404300000000015
-:1053D00005BA05BA043A04380000000005BA05BA57
-:1053E00005BA05BA0000000005BA05BA05BA05BA43
-:1053F000000000000002060E062C0006000000005F
-:00000001FF
diff --git a/firmware/radeon/RS780_pfp.bin.ihex b/firmware/radeon/RS780_pfp.bin.ihex
deleted file mode 100644
index 40880411e785..000000000000
--- a/firmware/radeon/RS780_pfp.bin.ihex
+++ /dev/null
@@ -1,145 +0,0 @@
-:1000000000CA040000A00000007E828B007C038BED
-:10001000008001DB007C038B00D4401E00EE001E3C
-:1000200000CA040000A00000007E828B00C41838C3
-:1000300000CA240000CA2800009581CB00C41C3AE5
-:1000400000C3C00000CA080000CA0C00007C744B4A
-:1000500000C200050099C00000C41C3A007C744C2A
-:1000600000C0FFE000042C0800309002007D250055
-:1000700000351402007D350B00255407007CD58027
-:1000800000259C070095C00400D5001B007EDDC143
-:10009000007D9D8000D6801B00D5801B00D4401EB3
-:1000A00000D5401E00D6401E00D6801E00D4801E03
-:1000B00000D4C01E009783D300D5C01E00CA08001C
-:1000C0000080001A00CA0C0000E4011E00D4001ECB
-:1000D0000080000C00C4183800E4013E00D4001E6B
-:1000E0000080000C00C4183800D4401E00EE001E32
-:1000F00000CA040000A00000007E828B00E4011E04
-:1001000000D4001E00D4401E00EE001E00CA0400F1
-:1001100000A00000007E828B00E4013E00D4001E9F
-:1001200000D4401E00EE001E00CA040000A0000023
-:10013000007E828B00CA080000CA0C00008001DB30
-:1001400000D4802400CA0800007C00C000C8142528
-:1001500000C81824007C9488007C988000C20003AA
-:1001600000D40075007C744C0080006400D4401EF4
-:1001700000CA180000D4401E00D5801E0080006216
-:1001800000D4007500D4401E00CA080000CA0C004C
-:1001900000CA100000D4801900D4C01800D5001780
-:1001A00000D4801E00D4C01E00D5001E00E2001E38
-:1001B00000CA040000A00000007E828B00D40075FD
-:1001C00000D4401E00CA080000CA0C0000CA10007B
-:1001D00000D4801900D4C01800D5001700D4801EA8
-:1001E00000D4C01E00D5001E00EE001E00CA040090
-:1001F00000A00000007E828B00CA080000248C0151
-:1002000000D480600094C0030004100100041002B8
-:1002100000D5002500D4401E0080000000D4801EC0
-:1002200000CA080000D4806100D4401E0080000095
-:1002300000D4801E00CA080000CA0C0000D4401E72
-:1002400000D4801600D4C01600D4801E008001DBCC
-:1002500000D4C01E00C6084300CA0C0000CA10002B
-:100260000094800400CA140000E420F300D420139A
-:1002700000D5606500D4E01C00D5201C00D5601CB2
-:10028000008000000006200100C6084300CA0C00E0
-:1002900000CA1000009483F700CA140000E420F3A1
-:1002A0000080009C00D4201300C6084300CA0C0044
-:1002B00000CA1000009883EF00CA140000D4006444
-:1002C000008000B00000000000C4143200C61843D3
-:1002D00000C4082F0095400500C40C3000D4401E17
-:1002E0000080000000EE001E009583F500C4103170
-:1002F00000D4403300D5206500D4A01C00D4E01CFD
-:1003000000D5201C00E4015E00D4001E0080000027
-:100310000006200100CA1800000A200100D600765D
-:1003200000C408360098800700C6104500950110EB
-:1003300000D4001F00D460620080000000D420625E
-:1003400000CC383500CC1433008401DE00D40072B8
-:1003500000D5401E0080000000EE001E00E2001AE2
-:10036000008401DE00E2001A00CC104B00CC0447F0
-:10037000002C9401007D098B00984005007D15CB71
-:1003800000D4001A008001DB00D4006D0034440169
-:1003900000CC0C480098403A00CC2C4A00958004D0
-:1003A00000CC0449008001DB00D4001A00D4C01A3C
-:1003B000002828010084011300CC10030098801B42
-:1003C0000004380C0084011300CC1003009880173F
-:1003D000000438080084011300CC10030098801337
-:1003E000000438040084011300CC1003009880142A
-:1003F00000CC104C009A800900CC144D009840DCD1
-:1004000000D4006D00CC184800D5001A00D5401A61
-:10041000008000EC00D5801A0096C0D500D4006D95
-:10042000008001DB00D4006E009AC00300D4006D90
-:1004300000D4006E0080000000EC007F009AC0CC69
-:1004400000D4006D008001DB00D4006E00CC1403EA
-:1004500000CC180300CC1C03007D9103007DD583E4
-:10046000007D190C0035CC1F0035701F007CF0CBCF
-:10047000007CD08B00880000007E8E8B0095C0042D
-:1004800000D4006E008001DB00D4001A00D4C01A32
-:1004900000CC080300CC0C0300CC100300CC1403E8
-:1004A00000CC180300CC1C0300CC240300CC280390
-:1004B0000035C41F0036B01F007C704B0034F01FA5
-:1004C000007C704B0035701F007C704B007D888174
-:1004D000007DCCC1007E5101007E9541007C908260
-:1004E000007CD4C2007C848B009AC003007C8C8B7F
-:1004F000002C88010098809E00D4006D0098409CDC
-:1005000000D4006E00CC084C00CC0C4D00CC104840
-:1005100000D4801A00D4C01A0080012400D5001A2B
-:1005200000CC083200D40032009482B600CA0C001D
-:1005300000D4401E0080000000D4001E00E4011E14
-:1005400000D4001E00CA080000CA0C0000CA100037
-:1005500000D4401E00CA140000D4801E00D4C01E67
-:1005600000D5001E00D5401E00D54034008000009C
-:1005700000EE001E0028040400E2001A00E2001A47
-:1005800000D4401A00CA380000CC080300CC0C0389
-:1005900000CC0C0300CC0C030098829A00000000F1
-:1005A000008401DE00D7A06F0080000000EE001F75
-:1005B00000CA040000C2FF0000CC083400C13FFFA5
-:1005C000007C74CB007CC90B007D010F0099028D6B
-:1005D000007C738B008401DE00D7A06F00800000D8
-:1005E00000EE001F00CA080000281900007D898B5A
-:1005F000009580140028140400CA0C0000CA1000E2
-:1006000000CA1C0000CA240000E2001F00D4C01A67
-:1006100000D5001A00D5401A00CC180300CC2C03DA
-:1006200000CC2C0300CC2C03007DA58B007D9C47C7
-:1006300000984274000000000080018400D4C01AB9
-:1006400000D4401E00D4801E0080000000EE001E7A
-:1006500000E4011E00D4001E00D4401E00EE001E67
-:1006600000CA040000A00000007E828B00E4013E6E
-:1006700000D4001E00D4401E00EE001E00CA04007C
-:1006800000A00000007E828B00CA080000248C06B7
-:10069000000CCC060098C00600CC104E0099000457
-:1006A00000D4007300E4011E00D4001E00D4401EDC
-:1006B00000D4801E0080000000EE001E00CA08006A
-:1006C00000CA0C000034D01800251001009500214C
-:1006D00000C17FFF00CA100000CA140000CA180041
-:1006E00000D4801D00D4C01D007DB18B00C142022A
-:1006F00000C2C00100D5801D0034DC0E007D5D4CC1
-:10070000007F734C00D7401E00D5001E00D5401E50
-:1007100000C1420000C2C00000099C010031DC1091
-:10072000007F5F4C007F734C00042802007D8380B3
-:1007300000D5A86F00D5806600D7401E00EC005E93
-:1007400000C8240200C82402008001DB00D6007625
-:1007500000D4401E00D4801E00D4C01E00800000C3
-:1007600000EE001E0080000000EE001F00D4001FFD
-:100770000080000000D4001F00D4001F008800008B
-:1007800000D4001F00000000000000000000000076
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B0000000000000000000000000000000000039
-:1007C0000000000000000000000000000000000029
-:1007D0000000000000000000000000000000000019
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:10080000000101940002019B000300B2000400A259
-:10081000000500030006003F000700320008014FFA
-:1008200000090046000A0036001001D9001700C573
-:100830000022015D0023016C002000D70024014844
-:100840000026004D0027005C0028008D0029005183
-:10085000002A007E002B0061002F0088003200AAD1
-:10086000003401A20036006F003C0179003F009582
-:10087000004101AF00440151005501960056019D11
-:100880000060000B00610034006200380063003833
-:1008900000640038006500380066003800670038E2
-:1008A0000068003A00690041006A0048006B004897
-:1008B000006C0048006D0048006E0048006F004862
-:1008C000007301D9000000060000000600000006C9
-:1008D0000000000600000006000000060000000600
-:1008E00000000006000000060000000600000006F0
-:1008F00000000006000000060000000600000006E0
-:00000001FF
diff --git a/firmware/radeon/RV610_me.bin.ihex b/firmware/radeon/RV610_me.bin.ihex
deleted file mode 100644
index ba19ed892920..000000000000
--- a/firmware/radeon/RV610_me.bin.ihex
+++ /dev/null
@@ -1,1345 +0,0 @@
-:1000000000000000C020040000000000000000000C
-:1000100000A0000A000000000000FFFF00284621A9
-:100020000000000000000000D900480000000000AF
-:1000300000000000C02004000000000000000000DC
-:1000400000A0000A000000000000000000E0000026
-:100050000000000000010000C02946200000000050
-:1000600000000000D900480000000000000000006F
-:10007000C0200400000000000000000000A0000AF2
-:10008000000000008100000000204411000000007A
-:1000900000000001002048110000000000042004BE
-:1000A000006044110000068D0000000000600000A8
-:1000B000000006310000000000600000000006455E
-:1000C00000000000C02008000000000000000F0039
-:1000D000002816220000000000000008002116255C
-:1000E000000000000000001800203625000000007D
-:1000F0008D000000002044110000000000000004FA
-:10010000002F022500000000000000000CE00000AD
-:1001100000000018004120000040481100000019B4
-:100120000042200000204811000000008E00000066
-:1001300000204411000000000000002800204A2D8B
-:1001400000000000900000000020441100000000AA
-:100150000000000000204805000000000000000C26
-:1001600000211622000000000000000300281625D0
-:10017000000000000000001900211A220000000009
-:100180000000000400281A26000000000000000003
-:10019000002914C5000000000000001900203625C9
-:1001A0000000000000000000003A140200000000FF
-:1001B00000000016002116250000000000000003CA
-:1001C00000281625000000000000001700200E2D5A
-:1001D00000000000FFFFFFFC00280E2300000000CD
-:1001E00000000000002914A3000000000000001718
-:1001F00000203625000000000000800000280E22AC
-:10020000000000000000000700220E230000000094
-:10021000000000000029386E0000000020000000EF
-:1002200000280E22000000000000000600210E231E
-:1002300000000000000000000029386E00000000EF
-:100240000000000000220222000000000000000068
-:1002500014E0000000000038000000002EE0000064
-:1002600000000035000000002CE000000000003716
-:100270000000000000400E2D0000003900000008C2
-:1002800000200E2D00000000000000090040122D8B
-:10029000000000460000000100400E2D0000003963
-:1002A00000000000C0200C0000000000003FFFFC28
-:1002B0000028122300000000000000020022122487
-:1002C000000000000000001F00211E2300000000AD
-:1002D0000000000014E000000000003E00000008E4
-:1002E00000401C11000000410000000D00201E2DE8
-:1002F000000000000000000F00281E270000000082
-:100300000000000300221E27000000007FC0000044
-:1003100000281A23000000000000001400211A2603
-:10032000000000000000000100331A260000000059
-:100330000000000800221A26000000000000000053
-:1003400000290CC700000000000000270020362410
-:100350000000000000007F000028122100000000C3
-:1003600000001400002F0224000000000000000024
-:100370000CE000000000004B0000000100290E23EB
-:10038000000000000000000E0020362300000000E6
-:100390000000E0000020441100000000FFF8000011
-:1003A00000294A230000000000000000003A2C024F
-:1003B000000000000000000200220E2B00000000E0
-:1003C000FC00000000280E23000000000000000FC9
-:1003D000002036230000000000001FFF00294A23F0
-:1003E000000000000000002700204A2D000000004F
-:1003F000000000000020481100000000000000295B
-:1004000000200E2D00000000060A020000294A23E9
-:100410000000000000000000002048110000000063
-:100420000000000000204811000000000000000152
-:1004300000210222000000000000000014E0000083
-:1004400000000061000000002EE000000000005FDE
-:10045000000000002CE000000000005E0000000032
-:1004600000400E2D000000620000000100400E2D33
-:10047000000000620000000A00200E2D00000000B5
-:100480000000000B0040122D0000006A0000000078
-:10049000C0200C0000000000003FFFFC00281223D9
-:1004A00000000000000000020022122400000000F2
-:1004B0007FC0000000281623000000000000001488
-:1004C0000021162500000000000000010033162561
-:1004D000000000008000000000280E230000000043
-:1004E0000000000000290CA3000000003FFFFC00FA
-:1004F00000290E23000000000000001F00211E2321
-:10050000000000000000000014E000000000006D8A
-:100510000000010000401C11000000700000000DF0
-:1005200000201E2D00000000000000F000281E2703
-:10053000000000000000000400221E270000000050
-:100540008100000000204411000000000000000DA8
-:100550000020481100000000FFFFF0FF00281A30C3
-:10056000000000000000A02800204411000000004E
-:1005700000000000002948E6000000000000A0186C
-:1005800000204411000000003FFFFFFF00284A2325
-:10059000000000000000A010002044110000000036
-:1005A00000000000002048040000000000000030AF
-:1005B0000020162D00000000000000020029162572
-:1005C0000000000000000030002036250000000080
-:1005D000000000250020162D000000000000000093
-:1005E000002F00A300000000000000000CC000006D
-:1005F00000000083000000260020162D00000000EF
-:1006000000000000002F00A4000000000000000017
-:100610000CC000000000008400000000004000004A
-:100620000000008A000000250020362300000000A2
-:100630000000002600203624000000000000001703
-:1006400000201E2D000000000000000200210227F3
-:10065000000000000000000014E000000000008A1C
-:1006600000000000006000000000066800000000BC
-:10067000006000000000065C0000000200210E2265
-:10068000000000000000000014C000000000008D09
-:1006900000000012C040362000000093000000005F
-:1006A0002EE0000000000091000000002CE000009F
-:1006B000000000900000000200400E2D000000929B
-:1006C0000000000300400E2D000000920000000C0E
-:1006D00000200E2D00000000000000120020362334
-:1006E000000000000000000300210E2200000000B6
-:1006F0000000000014C00000000000980000A00CE2
-:10070000002044110000000000000000C02048004C
-:100710000000000000000000C0404800000000A0F1
-:100720000000A00C002044110000000000000000A8
-:100730000020481100000000000000002EE0000032
-:100740000000009E000000002CE000000000009D62
-:100750000000000200400E2D0000009F000000037A
-:1007600000400E2D0000009F0000000C00200E2D08
-:10077000000000000000000000204803000000000E
-:1007800000000000003A0C0200000000003F0000E2
-:1007900000280E23000000000000001000210E239E
-:1007A00000000000000000110020362300000000BF
-:1007B0000000001E0021022B0000000000000000CD
-:1007C00014C00000000000A700000016C020362062
-:1007D000000000000000001F0021022B00000000AC
-:1007E0000000000014C00000000000AA0000001576
-:1007F000C0203620000000000000000800210E2B61
-:10080000000000000000007F00280E230000000010
-:1008100000000000002F0223000000000000000084
-:100820000CE00000000000E10000000027000000D4
-:10083000000000000000000000600000000002A3B3
-:1008400000000001002F0223000000000000000053
-:100850000AE00000000000B300000000006000009B
-:100860000000013A81000000002044110000000057
-:100870000000000600204811000000000000000CED
-:1008800000221E300000000099800000002044116A
-:1008900000000000000000040020122D00000000F5
-:1008A00000000008002212240000000000000010D8
-:1008B00000201811000000000000000000291CE4C6
-:1008C0000000000000000000006048070000012F49
-:1008D0009B00000000204411000000000000000008
-:1008E00000204802000000009C000000002044118D
-:1008F00000000000000000000033146F0000000042
-:100900000000000100333E23000000000000000052
-:10091000D9004800000000000000000000203C0555
-:1009200000000000810000000020441100000000D1
-:100930000000000E00204811000000000000000030
-:1009400000201010000000000000E007002044110B
-:10095000000000000000000F0021022B000000003A
-:100960000000000014C00000000000CB00F8FF08E9
-:1009700000204811000000009800000000404811CD
-:10098000000000DC000000F000280E220000000043
-:10099000000000A0002F0223000000000000000063
-:1009A0000CC00000000000DA0000001100200E2D35
-:1009B0000000000000000001002F022300000000E2
-:1009C000000000000CE00000000000D50000000264
-:1009D000002F022300000000000000000CE00000D7
-:1009E000000000D400003F0000400C11000000D6C1
-:1009F00000001F0000400C11000000D600000F0096
-:100A000000200C11000000000038000900294A23D2
-:100A1000000000003F00000000280E2B0000000036
-:100A20000000000200220E2300000000000000076A
-:100A300000494A23000000DC00380F09002048115B
-:100A400000000000680000070020481100000000BE
-:100A50000000000800214A270000000000000000FC
-:100A60000020481100000000060A020000294A2464
-:100A700000000000000000000020481100000000FD
-:100A80000000000000204811000000000000A20249
-:100A9000002044110000000000FF000000280E228A
-:100AA000000000000000008000294A230000000030
-:100AB0000000002700200E2D00000000000000268E
-:100AC0000020122D0000000000000000002F008315
-:100AD00000000000000000000CE00000000000EA40
-:100AE000000000000060000000000662000000003E
-:100AF00000400000000000EB00000000006000006B
-:100B000000000665000000070020222D0000000004
-:100B10000000000500220E2200000000001000006E
-:100B200000280E23000000000000000000292068BB
-:100B30000000000000000000003A0C02000000006D
-:100B4000000000EF00280E2300000000000000005D
-:100B500000292068000000000000001700200E2D72
-:100B6000000000000000000300210223000000003C
-:100B70000000000014E00000000000F80000000B7E
-:100B800000210228000000000000000014C0000046
-:100B9000000000F8000004000029222800000000E6
-:100BA0000000001400203628000000000000001C97
-:100BB00000210E22000000000000000014C0000010
-:100BC000000000FD0000A30C002044110000000004
-:100BD0000000000000204811000000000000001E7E
-:100BE00000210E22000000000000000014C00000E0
-:100BF0000000010B0000A30F0020441100000000C2
-:100C00000000001100200E2D000000000000000177
-:100C1000002F022300000000000000000CC00000B4
-:100C200000000104FFFFFFFF004048110000010B1E
-:100C300000000002002F022300000000000000005E
-:100C40000CC00000000001070000FFFF0040481139
-:100C50000000010B00000004002F02230000000030
-:100C6000000000000CC000000000010A000000FFAE
-:100C7000004048110000010B000000010020481155
-:100C8000000000000002C400002044110000000029
-:100C90000000001F00210E220000000000000000E4
-:100CA00014C00000000001120000001040210E20BE
-:100CB00000000000000000130020362300000000A8
-:100CC0000000001840224A20000000000000001030
-:100CD000C0424A20000001140000000000200C1156
-:100CE0000000000000000013002036230000000078
-:100CF000000000000020481100000000000000007B
-:100D000000204811000000000000000A002010111F
-:100D10000000000000000000002F0224000000007E
-:100D2000000000000CE000000000011B00000000BB
-:100D300000204811000000000000000100531224B0
-:100D400000000117FFBFFFFF00283A2E000000003F
-:100D50000000001B00210222000000000000000033
-:100D600014C000000000012E81000000002044118A
-:100D7000000000000000000D0020481100000000ED
-:100D80000000001800220E3000000000FC000000EF
-:100D900000280E2300000000810000000020441104
-:100DA000000000000000000E0020481100000000BC
-:100DB0000000000000201010000000000000E00E05
-:100DC000002044110000000007F8FF08002048112F
-:100DD000000000000000000000294A23000000007D
-:100DE0000000001C00201E2D000000000000000874
-:100DF00000214A27000000000000000000204811E8
-:100E000000000000060A020000294A240000000039
-:100E10000000000000204811000000000000000059
-:100E200000204811000000000000000000800000C9
-:100E300000000000810000000020441100000000BC
-:100E40000000000100204811000000000000217C8B
-:100E50000020441100000000008000000020481124
-:100E60000000000000000000002048060000000014
-:100E70000000000800214A270000000000000000D8
-:100E800017000000000000000004217F00604411F2
-:100E90000000068D0000001F00210230000000004D
-:100EA0000000000014C000000000068C00000004D8
-:100EB00000404C1100000135810000000020441169
-:100EC00000000000000000010020481100000000A8
-:100ED000000021F800204411000000000000001C68
-:100EE0000020481100000000000421F900604411B6
-:100EF0000000068D000000110021023000000000FB
-:100F00000000000014E000000000013C00000000B0
-:100F100000800000000000000000000000600000F1
-:100F20000000000B00000000006004110000031529
-:100F3000000000000020041100000000000000007C
-:100F400000600811000001B2000000000060000015
-:100F5000000001600000FFFF40280E20000000009C
-:100F600000000010C0211220000000000000FFFF60
-:100F7000402806200000000000000010C0210A20C8
-:100F800000000000000000000034146100000000B8
-:100F90000000000000741882000002BB0001A1FDE7
-:100FA00000604411000002E000003FFF002F022F0C
-:100FB00000000000000000000CC00000000001471D
-:100FC00000000000C040040000000001000000001C
-:100FD000006000000000000B000000000060041131
-:100FE00000000315000000000020041100000000B4
-:100FF0000000000000600811000001B200003FFF87
-:10100000002F022F00000000000000000CE0000094
-:10101000000000000000000000600000000001600F
-:101020000000001040210E20000000000000FFFF23
-:10103000C0281220000000000000001040211620EF
-:10104000000000000000FFFFC0681A20000002BB83
-:101050000001A1FD00604411000002E000003FFF1C
-:10106000002F022F00000000000000000CC0000054
-:101070000000015800000000C04004000000000112
-:101080000000225C0020441100000000000000016C
-:1010900000300A2F000000000000000100210A2299
-:1010A000000000000000000300384A220000000099
-:1010B0000000225600204411000000000000001A29
-:1010C00000204811000000000000A1FC0020441195
-:1010D0000000000000000001008048110000000036
-:1010E00000000000006000000000000B0000000095
-:1010F000006000000000018F0000000000600000A0
-:10110000000001A000003FFF002F022F00000000A0
-:10111000000000000CE000000000000000000000E3
-:1011200000202C0800000000000000000020241116
-:101130000000000000000000002028110000000056
-:10114000000022560020441100000000000000169C
-:1011500000204811000000000000225C0020441123
-:101160000000000000000003002048110000000003
-:1011700093800000002044110000000000000002E5
-:1011800000221E290000000000000000007048EB53
-:101190000000019C0000000000600000000002BB95
-:1011A00000000001403306200000000000000000A5
-:1011B000C03024090000000000003FFF002F022F74
-:1011C00000000000000000000CE000000000000033
-:1011D0000000000000600000000002A3000000000A
-:1011E000002F022100000000000000000AE00000C3
-:1011F0000000018100000000006000000000013AD2
-:101200000000000000400000000001869500000082
-:10121000002044110000000000000000002F022107
-:1012200000000000000000000CE00000000001864B
-:1012300000000000C0204800000000000000000185
-:10124000005306210000018292000000002044119A
-:101250000000000000000000C0604800000001978E
-:101260000001A1FD00204411000000000000001159
-:101270000020062D00000000000000000078042A75
-:10128000000002FB00000000002028090000000010
-:1012900000003FFF002F022F0000000000000000B0
-:1012A0000CC000000000017400000000C0400400F9
-:1012B000000000010000021000600411000003158E
-:1012C00000003FFF002F022F000000000000000080
-:1012D0000CE000000000019400000015C020362042
-:1012E0000000000000000016C020362000000000B2
-:1012F0003F800000002004110000000046000000B4
-:1013000000600811000001B2000000000080000031
-:10131000000000000000A1FC0020441100000000BB
-:1013200000003FFF002F022F00000000000000001F
-:101330000CC000000000019B00000001008048116B
-:1013400000000000000000210080481100000000A3
-:101350000000FFFF40280E200000000000000010E9
-:10136000C0211220000000000000FFFF40281620CE
-:101370000000000000000010C0811A2000000000E2
-:101380008100000000204411000000000000000661
-:1013900000204811000000000000000800221E305C
-:1013A000000000000000002900201A2D00000000AD
-:1013B0000000E0000020441100000000FFFBFF09D6
-:1013C00000204811000000000000000F0020222D26
-:1013D0000000000000001FFF00294A280000000054
-:1013E000000000060020222D000000000000000088
-:1013F000002920E80000000000000000002048084C
-:101400000000000000000000002048110000000063
-:10141000060A020000294A26000000000000000021
-:1014200000204811000000000000000000204811CA
-:101430000000000000000100002018110000000062
-:101440000000000800621E280000012F00000008B4
-:1014500000822228000000000002C0000020441189
-:10146000000000000000001500600E2D000001BD0E
-:101470000000001600600E2D000001BD0000C00835
-:1014800000204411000000000000001700200E2D75
-:10149000000000000000000014C00000000001B9BE
-:1014A0000000000000200411000000000000000007
-:1014B0000020480100000000390000000020481111
-:1014C00000000000000000000020481100000000A3
-:1014D000000000000080480200000000000000182A
-:1014E00000202E2D0000000000000000003B0D63D6
-:1014F000000000000000000800224A230000000055
-:101500000000001000224A23000000000000001824
-:1015100000224A2300000000000000000080480371
-:101520000000000000000000006000000000000B50
-:10153000000010000060041100000315000000000E
-:1015400000200411000000000000000000600811ED
-:10155000000001B2000000070021062F000000007B
-:101560000000001300200A2D000000000000000110
-:1015700000202C11000000000000FFFF4028222066
-:10158000000000000000000F0026222800000000DC
-:101590000000001040212620000000000000000F85
-:1015A000002626290000000000000000002028027C
-:1015B000000000000000225600204411000000003E
-:1015C0000000001B00204811000000000000000087
-:1015D000002F022100000000000000000CE00000CD
-:1015E000000001E00000225C002044110000000027
-:1015F0000000008100204811000000000000A1FC54
-:1016000000204411000000000000000100204811EB
-:10161000000000000000008000201C1100000000FD
-:1016200000000000002F0227000000000000000062
-:101630000CE00000000001DC000000000060000081
-:10164000000001E90000000100531E27000001D83E
-:101650000000000100202C11000000000000001F0D
-:1016600000280A22000000000000001F00282A2A8B
-:10167000000000000000000100530621000001D11D
-:101680000000225C00204411000000000000000265
-:1016900000304A2F000000000000A1FC002044118F
-:1016A00000000000000000010020481100000000C0
-:1016B0000000000100301E2F0000000000000000AC
-:1016C000002F022700000000000000000CE00000D6
-:1016D000000000000000000000600000000001E9C0
-:1016E0000000000100531E27000001E50000FFFF7D
-:1016F00040280E20000000000000000F00260E23EE
-:101700000000000000000010C021122000000000B6
-:101710000000000F0026122400000000000000005E
-:1017200000201411000000000000000000601811EB
-:10173000000002BB0001A1FD0020441100000000D8
-:1017400000000000002F022B00000000000000003D
-:101750000CE00000000001F8000000100022162834
-:1017600000000000FFFF0000002816250000000018
-:101770000000FFFF00281A29000000000000000000
-:10178000002948C500000000000000000020480AB1
-:10179000000000000000000000202C1100000000EC
-:1017A000000000100022162300000000FFFF0000D0
-:1017B00000281625000000000000FFFF00281A2462
-:1017C0000000000000000000002948C500000000E3
-:1017D0000000000000731503000002050000000077
-:1017E0000020180500000000000000000073152410
-:1017F0000000020500000000002D14C500000000DC
-:1018000000000000003008A20000000000000000FE
-:101810000020480200000000000000000020280214
-:101820000000000000000000002020030000000075
-:101830000000000000802404000000000000000FF1
-:1018400000210225000000000000000014C000007C
-:101850000000068C00000000002B140500000000B2
-:1018600000000001009016250000000000000000AC
-:10187000006000000000000B000000000060041188
-:10188000000003150000000000200411000000000B
-:101890000000000000600811000001B200002256A4
-:1018A00000204411000000000000001A00294A2214
-:1018B0000000000000000000C02000000000000048
-:1018C00000003FFF002F022F00000000000000007A
-:1018D0000CE000000000000000000000C020040038
-:1018E000000000000000225C002044110000000005
-:1018F0000000000300384A21000000000000A1FCA5
-:1019000000204411000000000000000100204811E8
-:10191000000000000000FFFF40281220000000002F
-:1019200000000010C0211A20000000000000FFFF8E
-:1019300040280E200000000000000010C0211620EA
-:10194000000000000000000000741465000002BBED
-:101950000001A1FD00604411000002E00000000150
-:10196000003306210000000000000000002F0221CB
-:1019700000000000000000000CC000000000021980
-:1019800000003FFF002F022F0000000000000000B9
-:101990000CC000000000021200000000C040040063
-:1019A000000000010000000000600000000006458B
-:1019B000000000000040040F0000021300000000BF
-:1019C0000060000000000631000000000060000020
-:1019D000000006450000021000600411000003151D
-:1019E0000000000000600000000001A000000000F6
-:1019F000006000000000019C00000000006000008A
-:101A0000000002BB0000000000600000000002A314
-:101A1000938000000020441100000000000000003E
-:101A2000002048080000000000000000002F022FE6
-:101A300000000000000000000AE000000000023288
-:101A400000000000006000000000013A00000000FB
-:101A50000040000000000236950000000020441104
-:101A60000000000000000000002F022F0000000016
-:101A7000000000000CE00000000002360000000042
-:101A8000C0404800000002339200000000204411D2
-:101A90000000000000000000C0204800000000001E
-:101AA0000000225600204411000000000000001633
-:101AB00000204811000000000000225C00204411BA
-:101AC000000000000000000300204811000000009A
-:101AD0000000A1FC002044110000000000000001F3
-:101AE00000204811000000000001A1FD0020441169
-:101AF000000000000000000000600411000002FB74
-:101B000000000000C04004000000000100000000D0
-:101B100000600000000006310000A00C002044110D
-:101B20000000000000000000C0204800000000008D
-:101B300000000000C040480000000000000000005D
-:101B4000006000000000000B0000001840210A2087
-:101B50000000000000000003002F0222000000002F
-:101B6000000000000AE000000000024C0000001429
-:101B70000020222D00000000000801010029222879
-:101B800000000000000000140020362800000000C3
-:101B90000000A30C00204411000000000000000021
-:101BA000C02048000000000000000000C0204800E5
-:101BB0000000000000000000C0404800000002518A
-:101BC00000000000006000000000000B000000109A
-:101BD00000600411000003153F8000000020041184
-:101BE000000000000000000000600811000001B2C9
-:101BF0000000225C002044110000000000000003EF
-:101C000000204811000000000000000000600000FB
-:101C10000000027C0000001700201E2D00000000C4
-:101C20000000000100211E2700000000000000004D
-:101C300014E000000000026A0000001200201E2DC7
-:101C4000000000000000FFFF00281E270000000029
-:101C50000000000000341C2700000000000000000D
-:101C600012C000000000025F0000000000201C11F4
-:101C70000000000000000000002F00E50000000050
-:101C80000000000008C00000000002620000000028
-:101C900000201407000000000000001200201E2D8C
-:101CA000000000000000001000211E2700000000BE
-:101CB0000000000000341C4700000000000000008D
-:101CC00012C00000000002670000000000201C118C
-:101CD0000000000000000000002F00E600000000EF
-:101CE0000000000008C000000000026A00000000C0
-:101CF0000020180700000000000000000060000045
-:101D0000000002C100002256002044110000000023
-:101D1000000000000034202300000000000000004C
-:101D200012C00000000002720000000000342044D5
-:101D3000000000000000000012C00000000002715E
-:101D40000000001600404811000002760000001854
-:101D500000404811000002760000000000342044DA
-:101D6000000000000000000012C00000000002752A
-:101D70000000001700404811000002760000001922
-:101D800000204811000000000000A1FC00204411C8
-:101D900000000000000000010020481100000000C9
-:101DA0000001A1FD00604411000002E900003FFFB6
-:101DB000002F022F00000000000000000CC00000F7
-:101DC0000000025600000000C040040000000001B6
-:101DD0000000001040210620000000000000FFFF6E
-:101DE000C0280A20000000000000001040210E2042
-:101DF000000000000000FFFFC028122000000000CB
-:101E00000000001040211620000000000000FFFF2D
-:101E1000C0881A200000000081000000002044114A
-:101E20000000000000000001002048110000000038
-:101E300000042004006044110000068D0000000032
-:101E4000006000000000063100000000C0600000DB
-:101E5000000002A30000000500200A2D0000000081
-:101E60000000000800220A22000000000000002BF1
-:101E700000201A2D000000000000001C00201E2D74
-:101E8000000000000000700000281E270000000075
-:101E90000000000000311CE6000000000000002AE5
-:101EA00000201A2D000000000000000C00221A265D
-:101EB0000000000000000000002F00E6000000000D
-:101EC0000000000006E00000000002920000000098
-:101ED00000201C11000000000000000000200C1178
-:101EE000000000000000002B00203623000000004E
-:101EF0000000001000201811000000000000000089
-:101F000000691CE20000012F9380000000204411B2
-:101F10000000000000000000002048070000000052
-:101F200095000000002044110000000000000000A7
-:101F3000002F022F00000000000000000CE0000055
-:101F40000000029D0000000100333E2F0000000051
-:101F500000000000D90048000000000092000000CE
-:101F6000002044110000000000000000C0204800D4
-:101F7000000000000000001C0040362700000000A8
-:101F80000000000CC0220A20000000000000002910
-:101F9000002036220000000000000028C04036204B
-:101FA000000000000000A2A4002044110000000076
-:101FB000000000090020481100000000A1000000FE
-:101FC00000204411000000000000000100804811C2
-:101FD000000000000000002100201E2D0000000075
-:101FE00000000000002C1CE30000000000000021A5
-:101FF00000203627000000000000002200201E2DD7
-:102000000000000000000000002C1CE400000000A4
-:1020100000000022002036270000000000000023FE
-:1020200000201E2D0000000000000000003120A351
-:102030000000000000000000002D1D07000000004F
-:1020400000000023002036270000000000000024CC
-:1020500000201E2D0000000000000000003120C400
-:102060000000000000000000002D1D07000000001F
-:10207000000000240080362700000000000000213E
-:10208000002036230000000000000022002036243B
-:10209000000000000000000000311CA30000000050
-:1020A0000000002300203627000000000000000090
-:1020B00000311CC40000000000000024008036270E
-:1020C000000000000000001A002036270000000079
-:1020D0000000001B00203628000000000000001750
-:1020E00000201E2D00000000000000020021022739
-:1020F000000000000000000014C00000000002DC2E
-:102100000000000000400000000002D90000001A9A
-:1021100000203627000000000000001B00203628A9
-:10212000000000000000001700201E2D000000002D
-:102130000000000200210227000000000000000053
-:1021400014E00000000002D9000000030021022773
-:10215000000000000000000014E00000000002DCAD
-:102160000000002300201E2D0000000000000000E1
-:10217000002E00E1000000000000000002C000008E
-:10218000000002DC0000002100201E2D00000000E5
-:1021900000000000003120A100000000000000004D
-:1021A000002E00E8000000000000000006C0000053
-:1021B000000002DC0000002400201E2D00000000B2
-:1021C00000000000002E00E20000000000000000FF
-:1021D00002C00000000002DC0000002200201E2DD2
-:1021E0000000000000000000003120C200000000DC
-:1021F00000000000002E00E80000000000000000C9
-:1022000006C00000000002DC0000000000600000CA
-:10221000000006680000000000600000000002B539
-:102220000000000000400000000002DE000000008E
-:1022300000600000000002B5000000000060000027
-:102240000000065F0000000000400000000002DE09
-:102250000000000000600000000002A70000000075
-:1022600000400000000002DE0000001A00201E2DC9
-:10227000000000000000001B0080222D0000000074
-:102280000000001000221E230000000000000000DB
-:1022900000294887000000000000000000311CA356
-:1022A000000000000000001000221E2700000000B7
-:1022B0000000000000294887000000000000001016
-:1022C00000221E230000000000000000003120C496
-:1022D000000000000000FFFF00282228000000008E
-:1022E0000000000000894907000000000000001005
-:1022F00000221E2300000000000000000029488783
-:10230000000000000000001000221E21000000005C
-:102310000000000000294847000000000000000005
-:1023200000311CA3000000000000001000221E2746
-:1023300000000000000000000029488700000000A5
-:102340000000000000311CA100000000000000108F
-:1023500000221E270000000000000000002948475E
-:10236000000000000000001000221E2300000000FA
-:1023700000000000003120C4000000000000FFFF4A
-:102380000028222800000000000000000029490762
-:10239000000000000000001000221E2100000000CC
-:1023A00000000000003120C2000000000000FFFF1C
-:1023B00000282228000000000000000000894907D2
-:1023C000000000000000001000221E23000000009A
-:1023D0000000000000294887000000000000000104
-:1023E00000220A210000000000000000003308A2C3
-:1023F000000000000000001000221E22000000006B
-:102400000000001000212222000000000000000057
-:1024100000294907000000000000000000311CA353
-:10242000000000000000001000221E270000000035
-:1024300000000000002948870000000000000001A3
-:1024400000220A210000000000000000003008A265
-:10245000000000000000001000221E22000000000A
-:1024600000000010002122220000000000000000F7
-:1024700000294907000000000000001000221E2370
-:102480000000000000000000003120C40000000037
-:102490000000FFFF002822280000000000000000CC
-:1024A000002949070000000000000000003808C5AE
-:1024B00000000000000000000030084100000000A3
-:1024C0000000000100220A220000000000000000BD
-:1024D000003308A2000000000000001000221E22AD
-:1024E0000000000000000010002122220000000077
-:1024F00000000000008949070000000000000017EC
-:102500000020222D000000000000000014C0000088
-:1025100000000318FFFFFFEF002806210000000065
-:10252000000000140020222D000000000000F8E050
-:1025300000204411000000000000000000294901B3
-:1025400000000000000000000089490100000000B8
-:102550000000000000204811000000000000000002
-:102560000020481100000000060A02000080481107
-:102570000000000000000000C0200000000000007B
-:1025800097000000C020441100000000000000007F
-:10259000C0204811000000008A0000000020441103
-:1025A00000000000000000000020481100000000B2
-:1025B0000000225C00204411000000000000000028
-:1025C000C0204800000000000000A1FC00204411D1
-:1025D0000000000000000000C020480000000000D3
-:1025E00000000000C0200400000000000000000007
-:1025F00000A0000A00000000970000000020441125
-:102600000000000000000000002048110000000051
-:102610008A000000002044110000000000000000BB
-:1026200000204811000000000000225C002044113E
-:102630000000000000000000C02048000000000072
-:102640000000A1FC00204411000000000000000078
-:10265000C02048000000000000000000C02004006E
-:10266000000000000000000000A0000A00000000C0
-:10267000970000000020441100000000000000004E
-:1026800000204811000000008A00000000204411D2
-:1026900000000000000000000020481100000000C1
-:1026A0000000225C00204411000000000000000037
-:1026B000C0204800000000000000A1FC00204411E0
-:1026C0000000000000000000C020480000000000E2
-:1026D0000001A1FD002044110000000000000000E6
-:1026E000D90048000000000000000000C0200400E5
-:1026F000000000000000000000A0000A0000000030
-:1027000000002257002044110000000000000003D8
-:10271000C0484A20000000000000225D0020441153
-:102720000000000000000000C04048000000000061
-:1027300000000000006000000000064500000000EE
-:10274000C0200800000000000000225C00204411AE
-:10275000000000000000000300384A2200000000D2
-:102760000000A1FC00204411000000000000000057
-:10277000C0204800000000000001A1FD002044111D
-:102780000000000000000000002F022200000000F6
-:10279000000000000CE0000000000000000000004D
-:1027A00040204800000000000000000140304A20A6
-:1027B0000000000000000002C0304A2000000000BD
-:1027C0000000000100530A220000034B0000003FFC
-:1027D000C0280A20000000008100000000204411F1
-:1027E000000000000000000100204811000000006F
-:1027F000000021F800204411000000000000001833
-:102800000020481100000000000421F9006044117C
-:102810000000068D000000110021023000000000C1
-:102820000000000014E00000000003540000001449
-:10283000002F022200000000000000000CC0000079
-:10284000000003640000201000204411000000007C
-:102850000000800000204811000000000001A2A438
-:102860000020441100000000000000000060480249
-:102870000000036E00002100002044110000000051
-:1028800000000000C0204800000000000000000020
-:10289000C02048000000000000000000C0204800E8
-:1028A0000000000000000000C040480000000000E0
-:1028B00000000004002F02220000000000000000C1
-:1028C0000CC000000000036A00002010002044112A
-:1028D00000000000000080000020481100000000FF
-:1028E0000001A2A40020441100000000000000002C
-:1028F000004048020000035F00000028002F022271
-:1029000000000000000000000CC00000000005C036
-:102910000001A2A4002044110000000000000000FB
-:10292000004048020000035F0000002C0020362613
-:102930000000000000000049002018110000000005
-:102940000000003F002048110000000000000001CE
-:1029500000331A260000000000000000002F0226AD
-:1029600000000000000000000CC000000000037028
-:102970000000002C00801A2D000000000000003F25
-:10298000C0280A200000000000000015002F0222CD
-:1029900000000000000000000CE0000000000386C2
-:1029A00000000006002F02220000000000000000CE
-:1029B0000CE00000000003B100000016002F02220E
-:1029C00000000000000000000CE00000000003B563
-:1029D00000000020002F0222000000000000000084
-:1029E0000CE000000000039C0000000F002F0222FA
-:1029F00000000000000000000CE00000000003A840
-:102A000000000010002F0222000000000000000063
-:102A10000CE00000000003A80000001E002F0222AE
-:102A200000000000000000000CE000000000039027
-:102A30000000A2A4002044110000000000000000DB
-:102A400000404802000000000800000000290A229F
-:102A5000000000000000000340210E2000000000E4
-:102A60000000000CC021122000000000000800003F
-:102A7000002812240000000000000014C0221620CC
-:102A80000000000000000000002914A40000000065
-:102A90000000A2A40020441100000000000000007B
-:102AA000002948A2000000000000A1FE00204411FF
-:102AB000000000000000000000404803000000008B
-:102AC000810000000020441100000000000000010F
-:102AD0000020481100000000000021F800204411EF
-:102AE0000000000000000016002048110000000057
-:102AF000000421F9006044110000068D000000155B
-:102B000000210230000000000000000014E000007E
-:102B1000000003920000210E00204411000000007C
-:102B200000000000C020480000000000000000007D
-:102B3000C0204800000000000000A2A400204411B2
-:102B400000000000000000000040480200000000FB
-:102B5000810000000020441100000000000000017E
-:102B60000020481100000000000021F8002044115E
-:102B700000000000000000170020481100000000C5
-:102B8000000421F9006044110000068D00000003DC
-:102B900000210230000000000000000014E00000EE
-:102BA0000000039E000021080020441100000000E6
-:102BB00000000000C02048000000000000000000ED
-:102BC000C0204800000000000000A2A40020441122
-:102BD000000000000000000000404802000000006B
-:102BE0000000A2A40020441100000000000000002A
-:102BF0000020480200000000800000000020441176
-:102C0000000000000000000000204811000000004B
-:102C100081000000002044110000000000000010AE
-:102C200000204811000000000000000000200010FB
-:102C3000000000000000000014C00000000003AE0F
-:102C40000000000000400000000000000000201014
-:102C50000020441100000000000080000020481106
-:102C6000000000000001A2A40020441100000000A8
-:102C70000000000600404811000000000000201085
-:102C800000204411000000000000800000204811D6
-:102C9000000000000001A2A4002044110000000078
-:102CA00000000016006048110000036E00000000E4
-:102CB000004000000000000000000000C0200800EC
-:102CC0000000000000000000C0200C000000000018
-:102CD0000000001D00210223000000000000000091
-:102CE00014E00000000003CE810000000020441129
-:102CF000000000000000000100204811000000005A
-:102D0000000021F80020441100000000000000181D
-:102D10000020481100000000000421F90060441167
-:102D20000000068D000000110021023000000000AC
-:102D30000000000014E00000000003C000002100BB
-:102D400000204411000000000000000000204802A4
-:102D50000000000000000000002048030000000008
-:102D6000BABECAFE0020481100000000CAFEBABE6A
-:102D70000020481100000000000020100020441135
-:102D8000000000000000800000204811000000004A
-:102D90000000A2A400204411000000000000000474
-:102DA0000040481100000000000021700020441184
-:102DB00000000000000000000020480200000000A9
-:102DC0000000000000204803000000008100000017
-:102DD00000204411000000000000000A00204811FB
-:102DE00000000000000000000020001000000000B3
-:102DF0000000000014C00000000003D38C0000009D
-:102E00000020441100000000CAFEBABE0040481174
-:102E100000000000810000000020441100000000BC
-:102E200000000001002048110000000000003FFFEA
-:102E300040280A20000000008000000040280E20EA
-:102E40000000000040000000C02812200000000028
-:102E500000040000006946220000068D000000000A
-:102E6000002014100000000000000000002F0223CA
-:102E700000000000000000000CC00000000003E1A2
-:102E800000000000C0401800000003E400003FFF05
-:102E9000C0281A2000000000000400000069462637
-:102EA0000000068D00000000002018100000000047
-:102EB00000000000002F02240000000000000000BD
-:102EC0000CC00000000003E700000000C0401C0030
-:102ED000000003EA00003FFFC0281E2000000000A1
-:102EE00000040000006946270000068D0000000075
-:102EF00000201C1000000000000000000020440220
-:102F00000000000000000000002820C500000000B4
-:102F100000000000004948E800000000A580000013
-:102F200000200811000000000000200000200C110B
-:102F30000000000083000000006044110000041243
-:102F4000000000000020440200000000000000001B
-:102F5000C0204800000000000000000040204800A1
-:102F6000000000000000001FC0210220000000003F
-:102F70000000000014C00000000003F70000201053
-:102F800000204411000000000000800000204811D3
-:102F9000000000000000FFFFC0481220000003FFF7
-:102FA000A780000000200811000000000000A00021
-:102FB00000200C110000000083000000006044119C
-:102FC0000000041200000000002044020000000085
-:102FD00000000000C02048000000000000000000C9
-:102FE000C0204800000000000000FFFFC0281220A1
-:102FF00000000000830000000020441100000000D9
-:103000000000000000304883000000008400000041
-:10301000002044110000000000000000C020480013
-:1030200000000000000000001D0000000000000083
-:103030008300000000604411000004120000000042
-:10304000C040040000000001A98000000020081119
-:10305000000000000000C00000400C11000003FA56
-:10306000AB80000000200811000000000000F8E024
-:1030700000400C11000003FAAD8000000020081190
-:10308000000000000000F88000400C11000003FA6E
-:10309000B380000000200811000000000000F3FCD5
-:1030A00000400C11000003FAAF800000002008115E
-:1030B000000000000000E00000400C11000003FAD6
-:1030C000B180000000200811000000000000F000A6
-:1030D00000400C11000003FA83000000002044119E
-:1030E00000000000000021480020481100000000FE
-:1030F00084000000002044110000000000000000D7
-:10310000C020480000000000000000001D0000007A
-:10311000000000000000000000800000000000002F
-:1031200001182000C0304620000000000000000010
-:10313000D90048000000000000000000C02004008A
-:10314000000000000000000000A0000A00000000D5
-:103150000218A000C030462000000000000000005F
-:10316000D90048000000000000000000C02004005A
-:10317000000000000000000000A0000A00000000A5
-:103180000318C000C030462000000000000000000E
-:10319000D90048000000000000000000C02004002A
-:1031A000000000000000000000A0000A0000000075
-:1031B0000418F8E0C03046200000000000000000C5
-:1031C000D90048000000000000000000C0200400FA
-:1031D000000000000000000000A0000A0000000045
-:1031E0000518F880C03046200000000000000000F4
-:1031F000D90048000000000000000000C0200400CA
-:10320000000000000000000000A0000A0000000014
-:103210000618E000C030462000000000000000005A
-:10322000D90048000000000000000000C020040099
-:10323000000000000000000000A0000A00000000E4
-:103240000718F000C0304620000000000000000019
-:10325000D90048000000000000000000C020040069
-:10326000000000000000000000A0000A00000000B4
-:103270000818F3FCC03046200000000000000000E9
-:10328000D90048000000000000000000C020040039
-:10329000000000000000000000A0000A0000000084
-:1032A0000000003000200A2D000000000000000097
-:1032B000C0290C4000000000000000300020362330
-:1032C0000000000000000000C0200400000000001A
-:1032D0000000000000A0000A0000000086000000BE
-:1032E00000204411000000000000000000404801E0
-:1032F0000000000085000000C02044110000000014
-:103300000000000000404801000000000000217C97
-:10331000002044110000000000000018402102209D
-:10332000000000000000000014C000000000044580
-:1033300000800000C0494A20000004460000000050
-:10334000C02048000000000000000000C02048002D
-:103350000000000000000000C02048000000000045
-:103360008100000000204411000000000000000166
-:10337000002048110000000000000000C0200800EC
-:103380000000000000000000170000000000000026
-:103390000004217F006044110000068D0000001F22
-:1033A00000210230000000000000000014C00000F6
-:1033B000000000000000000000404C020000044B30
-:1033C00000000000C0200C00000000000000000011
-:1033D000C02010000000000000000000C020140009
-:1033E0000000000000000000C020180000000000E5
-:1033F00000000000C0201C000000000000007F0052
-:1034000000280A210000000000004500002F0222D1
-:1034100000000000000000000CE000000000045963
-:1034200000000000C020200000000000000000009C
-:1034300017000000000000000000001000280A2310
-:103440000000000000000010002F02220000000019
-:10345000000000000CE0000000000461810000009A
-:10346000002044110000000000000001002048116D
-:103470000000000000040000006946240000068DE2
-:103480000000000000400000000004668100000011
-:10349000002044110000000000000000002048113E
-:1034A000000000000000216D002044110000000019
-:1034B00000000000002048040000000000000000A0
-:1034C000006048050000069200000000002824F07B
-:1034D000000000000000000700280A230000000090
-:1034E00000000001002F0222000000000000000088
-:1034F0000AE000000000046D00000000002F00C979
-:10350000000000000000000004E00000000004864D
-:1035100000000000004000000000049300000002D2
-:10352000002F022200000000000000000AE000005E
-:103530000000047200000000002F00C9000000001D
-:103540000000000002E0000000000486000000000F
-:10355000004000000000049300000003002F02223E
-:1035600000000000000000000AE0000000000477F6
-:1035700000000000002F00C9000000000000000053
-:103580000CE0000000000486000000000040000085
-:103590000000049300000004002F0222000000003D
-:1035A000000000000AE000000000047C00000000B1
-:1035B000002F00C900000000000000000AE0000029
-:1035C000000004860000000000400000000004939A
-:1035D00000000005002F0222000000000000000093
-:1035E0000AE000000000048100000000002F00C974
-:1035F000000000000000000006E00000000004865B
-:1036000000000000004000000000049300000006DD
-:10361000002F022200000000000000000AE000006D
-:103620000000048600000000002F00C90000000018
-:103630000000000008E00000000004860000000018
-:10364000004000000000049300007F0000280A21D1
-:103650000000000000004500002F022200000000D2
-:10366000000000000AE00000000000000000000868
-:1036700000210A23000000000000000014C0000028
-:1036800000000490000021690020441100000000A7
-:1036900000000000C0204800000000000000000002
-:1036A000C02048000000000000000000C0204800CA
-:1036B00000000000CAFEBABE004048110000000031
-:1036C00000000000C02044000000000000000000D6
-:1036D000C02000000000000000000000C0404800C2
-:1036E0000000000000007F0000280A210000000008
-:1036F00000004500002F0222000000000000000032
-:103700000AE000000000049900000000C020000052
-:103710000000000000000000C020000000000000C9
-:1037200000000000C0400000000000000000000099
-:1037300000404C080000045900000000C0200800B0
-:10374000000000000000001040210E2000000000DA
-:1037500000000011402112200000000000000012B3
-:1037600040211620000000000000216900204411C3
-:1037700000000000000000000020480200000000DF
-:1037800000000000002102250000000000000000F1
-:1037900014E00000000004A300040000C0494A2017
-:1037A000000004A4FFFBFFFFC0284A200000000027
-:1037B00000000000002102230000000000000000C3
-:1037C00014E00000000004B000000000C020480029
-:1037D0000000000000000000C020480000000000C1
-:1037E0000000000000210224000000000000000092
-:1037F00014C00000000000008100000000204411FF
-:10380000000000000000000C002048110000000033
-:103810000000000000200010000000000000000078
-:1038200014C00000000004ACA000000000204411FF
-:1038300000000000CAFEBABE0040481100000000AF
-:10384000810000000020441100000000000000047E
-:1038500000204811000000000000216B00204411EE
-:103860000000000000000000C02048100000000020
-:10387000810000000020441100000000000000054D
-:1038800000204811000000000000216C00204411BD
-:103890000000000000000000C020481000000000F0
-:1038A00000000000002F02240000000000000000C3
-:1038B0000CE00000000000000000000000400000DC
-:1038C000000004AA00000000C0210A20000000003F
-:1038D0000000000014C00000000004C381000000CC
-:1038E00000204411000000000000000000204811EA
-:1038F000000000000000216D0020441100000000C5
-:1039000000000000C020480000000000000000008F
-:10391000C060480000000692000000000040000067
-:10392000000004C7810000000020441100000000D6
-:103930000000000100204811000000000004000009
-:10394000C02946200000000000000000C060000008
-:103950000000068D0000000100210222000000008E
-:103960000000000014C00000000004CE0000216927
-:10397000002044110000000000000000C0204800AA
-:103980000000000000000000C0204800000000000F
-:10399000000000000020481000000000CAFEBABE6F
-:1039A000004048110000000000000000C02044005A
-:1039B0000000000000000000C040481000000000AF
-:1039C0008100000000204411000000000000000100
-:1039D0000020481100000000000021F800204411E0
-:1039E000000000000000000E002048110000000050
-:1039F000000421F9006044110000068D0000000061
-:103A000000210230000000000000000014C000008F
-:103A1000000004D0000021800020441100000000BC
-:103A200000000000C020480000000000000000006E
-:103A3000C02000000000000000000000C02048007E
-:103A40000000000000000000C02000000000000096
-:103A500000000000C040480000000000000000031B
-:103A600000333E2F00000000000000010021022171
-:103A7000000000000000000014E00000000005004D
-:103A80000000002C00200A2D0000000000040000AF
-:103A900018E00C11000004EF0000000100333E2F7D
-:103AA0000000000000002169002044110000000017
-:103AB000000000000020480200000000000000009C
-:103AC00000204803000000000000000800300A2227
-:103AD0000000000000000000C020480000000000BE
-:103AE00000000000C0204800000000000000216924
-:103AF00000204411000000000000000000204802E7
-:103B0000000000000000000000204803000000004A
-:103B10000000000800300A22000000000000000041
-:103B2000C02048000000000000000000D8C048008D
-:103B3000000004E30000216900204411000000009F
-:103B4000000000000020480200000000000000000B
-:103B500000204803000000000000000800300A2296
-:103B60000000000000000000C0204800000000002D
-:103B700000000000C0204800000000000000002DF0
-:103B80000020122D000000000000000000290C831E
-:103B90000000000000002169002044110000000026
-:103BA00000000000002048020000000000000000AB
-:103BB00000204803000000000000000800300A2236
-:103BC0000000000000000000C020480000000000CD
-:103BD00000000000C02048000000000000000011AC
-:103BE00000210224000000000000000014C00000BA
-:103BF000000000000000000000400000000004AAD7
-:103C00000000002CC0203620000000000000002D25
-:103C1000C0403620000000000000000F00210221FB
-:103C2000000000000000000014C0000000000505B6
-:103C300000000000006000000000000B0000000019
-:103C4000D90000000000000000000000C040040097
-:103C500000000001B5000000002044110000000039
-:103C6000000020000020481100000000B600000005
-:103C700000204411000000000000A00000204811B6
-:103C800000000000B7000000002044110000000008
-:103C90000000C0000020481100000000B800000033
-:103CA00000204411000000000000F8E0002048114E
-:103CB00000000000B90000000020441100000000D6
-:103CC0000000F8800020481100000000BA00000049
-:103CD00000204411000000000000E0000020481116
-:103CE00000000000BB0000000020441100000000A4
-:103CF0000000F0000020481100000000BC0000009F
-:103D000000204411000000000000F3FC00204811D6
-:103D100000000000810000000020441100000000AD
-:103D2000000000020020481100000000000000FF19
-:103D300000280E300000000000000000002F0223C9
-:103D400000000000000000000CC000000000051989
-:103D500000000000C020080000000000000000007B
-:103D600014C000000000052E0000000000200C110F
-:103D7000000000000000001C0020362300000000AE
-:103D80000000002B00203623000000000000002966
-:103D90000020362300000000000000280020362309
-:103DA0000000000000000017002036230000000083
-:103DB000000000250020362300000000000000263F
-:103DC00000203623000000000000001500203623EC
-:103DD0000000000000000016002036230000000054
-:103DE000FFFFE00000200C11000000000000002197
-:103DF00000203623000000000000002200203623AF
-:103E00000000000000001FFF00200C110000000057
-:103E100000000023002036230000000000000024E2
-:103E20000020362300000000F1FFFFFF00283A2E9B
-:103E3000000000000000001AC0220E200000000058
-:103E4000000000000029386E000000008100000022
-:103E5000002044110000000000000006002048116E
-:103E6000000000000000002A402036200000000072
-:103E70008700000000204411000000000000000046
-:103E8000C0204800000000000000A1F40020441100
-:103E900000000000000000000020481000000000AA
-:103EA0000000000000200C110000000000000030A5
-:103EB00000203623000000009D0000000020441177
-:103EC000000000000000001F40214A200000000008
-:103ED00096000000002044110000000000000000D7
-:103EE000C02048000000000000000000C0200C00BE
-:103EF0000000000000000000C020100000000000D2
-:103F00000000001F00211624000000000000000037
-:103F100014C00000000000000000001D0020362337
-:103F2000000000000000000300281E230000000025
-:103F3000000000080022222300000000FFFFF00024
-:103F4000002822280000000000000000002920E8CE
-:103F5000000000000000001F0020362800000000C4
-:103F60000000001800211E230000000000000020B7
-:103F70000020362700000000000000020022162466
-:103F80000000000000000000003014A80000000045
-:103F90000000001E00203625000000000000000385
-:103FA00000211A24000000001000000000281A263A
-:103FB00000000000EFFFFFFF00283A2E0000000085
-:103FC00000000000004938CE0000067B0000000120
-:103FD00040280A20000000000000000640280E20B3
-:103FE0000000000000000300C028122000000000B4
-:103FF0000000000800211224000000000000000062
-:10400000C02016200000000000000000C0201A2080
-:10401000000000000000000000210222000000005B
-:104020000000000014C000000000056681000000D0
-:104030000020441100000000000000010020481191
-:10404000000000000000225800300A240000000098
-:1040500000040000006946220000068D000021696E
-:10406000002044110000000000000000002048056E
-:10407000000000000002000000294A2600000000A5
-:10408000000000000020481000000000CAFEBABE78
-:10409000002048110000000000000002002F022351
-:1040A00000000000000000000CC000000000056ED1
-:1040B00000000000C0201C100000000000000000F4
-:1040C000C04000000000057C00000002002F022319
-:1040D00000000000000000000CC000000000056EA1
-:1040E00081000000002044110000000000000001D9
-:1040F00000204811000000000000225800300A246F
-:104100000000000000040000006946220000068D47
-:1041100000000000C0201C10000000000000000093
-:10412000C04000000000057C00000000002F0223BA
-:1041300000000000000000000CC00000000005723C
-:1041400000000000C0201C00000000000000000073
-:10415000C04000000000057C00000004002F022386
-:1041600000000000000000000CC000000000057A04
-:104170008100000000204411000000000000000049
-:1041800000204811000000000000216D00204411B3
-:104190000000000000000000C020480000000000F7
-:1041A00000000000C060480000000692000000000F
-:1041B00000401C100000057C00000000C020000032
-:1041C0000000000000000000C040000000000000EF
-:1041D000000000000EE000000000057E000000006E
-:1041E00000600000000005C900000000002F02244C
-:1041F00000000000000000000CC000000000058F5F
-:104200000000A2B7002044110000000000000000E0
-:104210000020480700000000810000000020441139
-:104220000000000000000001002048110000000014
-:104230000004A2B6006044110000068D0000001AC0
-:10424000002122300000000000000006002226307D
-:104250000000000000042004006044110000068DEE
-:104260000000A2C400204411000000000000000073
-:10427000003048E9000000000000000000E00000FD
-:104280000000058D0000A2D10020441100000000B4
-:104290000000000000404808000000000000A2D11B
-:1042A00000204411000000000000000100504A28D6
-:1042B0000000000000000001002F022400000000A8
-:1042C000000000000CC00000000005A00000A2BB20
-:1042D00000204411000000000000000000204807FA
-:1042E00000000000810000000020441100000000D8
-:1042F0000000000100204811000000000004A2BAE4
-:10430000006044110000068D0000001A00212230D8
-:10431000000000000000000600222630000000001F
-:1043200000042004006044110000068D0000A2C5B6
-:10433000002044110000000000000000003048E9A7
-:10434000000000000000000000E000000000059EEA
-:104350000000A2D200204411000000000000000074
-:1043600000404808000000000000A2D200204411D4
-:10437000000000000000000100504A28000000007A
-:1043800000000002002F02240000000000000000D6
-:104390000CC00000000005B10000A2BF00204411C5
-:1043A000000000000000000000204807000000009E
-:1043B0008100000000204411000000000000000106
-:1043C00000204811000000000004A2BE006044115B
-:1043D0000000068D0000001A0021223000000000BD
-:1043E0000000000600222630000000000004200427
-:1043F000006044110000068D0000A2C60020441198
-:104400000000000000000000003048E9000000004B
-:104410000000000000E00000000005AF0000A2D393
-:104420000020441100000000000000000040480887
-:10443000000000000000A2D3002044110000000092
-:104440000000000100504A28000000000000A2C344
-:104450000020441100000000000000000020480778
-:104460000000000081000000002044110000000056
-:104470000000000100204811000000000004A2C25A
-:10448000006044110000068D0000001A0021223057
-:10449000000000000000000600222630000000009E
-:1044A00000042004006044110000068D0000A2C733
-:1044B000002044110000000000000000003048E926
-:1044C000000000000000000000E00000000005BE49
-:1044D0000000A2D4002044110000000000000000F1
-:1044E00000404808000000000000A2D40020441151
-:1044F000000000000000000100504A2800000000F9
-:1045000085000000002044110000000000000000B1
-:1045100000204801000000000000304A0020441143
-:104520000000000001000000002048110000000011
-:104530000000000000400000000005C4A4000000CE
-:10454000C02044110000000000000000C0404800EE
-:104550000000000000000000C0600000000005C96D
-:1045600000000000C0400400000000010000002C1A
-:1045700000203621000000008100000000204411CE
-:1045800000000000000000060020481100000000AC
-:1045900000000000002F02300000000000000000BA
-:1045A0000CC00000000005D0000000000020041135
-:1045B000000000000000003000403621000005E34C
-:1045C000000000300020062D0000000000007E00EA
-:1045D000002806210000000000000000002F02213A
-:1045E00000000000000000000CE00000000005E3F7
-:1045F00081000000002044110000000000000001C4
-:1046000000204811000000000004A0920060441146
-:104610000000068D00000031002036300000000050
-:104620000004A093006044110000068D00000032D9
-:1046300000203630000000000004A2B600604411E3
-:104640000000068D0000003300203630000000001E
-:104650000004A2BA006044110000068D000000347E
-:1046600000203630000000000004A2BE00604411AB
-:104670000000068D000000350020363000000000EC
-:104680000004A2C2006044110000068D0000003644
-:1046900000203630000000000004200400604411B7
-:1046A0000000068D0001A2A40020441100000000BB
-:1046B0000000003F00204811000000000000003F03
-:1046C00000204811000000000000003F00204811B9
-:1046D000000000000000003F002048110000000022
-:1046E0000000000500204811000000000000A1F4B7
-:1046F00000204411000000000000000000204811CC
-:1047000000000000880000000020441100000000AC
-:10471000000000010020481100000000810000009E
-:104720000020441100000000000000060020481195
-:104730000000000000000001002F02300000000017
-:10474000000000000CE000000000062C000000301B
-:104750000020062D0000000000000000002F0221B4
-:1047600000000000000000000CE000000000062C2B
-:104770008100000000204411000000000000000142
-:10478000002048110000000000007E0000280621E3
-:104790000000000000000000002F022100000000C7
-:1047A000000000000CE00000000006050000A092E0
-:1047B00000204411000000000000003100204A2DBC
-:1047C000000000000000A093002044110000000041
-:1047D0000000003200204A2D000000000000A2B6B8
-:1047E00000204411000000000000003300204A2D8A
-:1047F000000000000000A2BA0020441100000000E8
-:104800000000003400204A2D000000000000A2BE7D
-:1048100000204411000000000000003500204A2D57
-:10482000000000000000A2C20020441100000000AF
-:104830000000003600204A2D00000000000000307B
-:104840000020062D00000000000001FF00280621C6
-:104850000000000000000000002F02210000000006
-:10486000000000000CE000000000062B000000002B
-:1048700000210221000000000000000014C0000020
-:104880000000060E0004A003006044110000068D25
-:104890000000A00300204411000000000000000000
-:1048A0000020481000000000000000010021062147
-:1048B000000000000000000014C00000000006130B
-:1048C0000004A010006044110000068D0000A0103C
-:1048D00000204411000000000000000000204810EB
-:1048E000000000000000000100210621000000007F
-:1048F00000000000002F0221000000000000000066
-:104900000CE000000000062B0004A0110060441120
-:104910000000068D0000A0110020441100000000DE
-:104920000000000000204810000000000004A01259
-:10493000006044110000068D0000A0120020441108
-:1049400000000000000000000020481000000000EF
-:104950000004A013006044110000068D0000A013A5
-:10496000002044110000000000000000002048105A
-:10497000000000000004A014006044110000068D37
-:104980000000A014002044110000000000000000FE
-:1049900000204810000000000004A0150060441131
-:1049A0000000068D0000A01500204411000000004A
-:1049B0000000000000204810000000000004A016C5
-:1049C000006044110000068D0000A0160020441174
-:1049D000000000000000000000204810000000005F
-:1049E0000004A017006044110000068D0000A0170D
-:1049F00000204411000000000000000000204810CA
-:104A00000000000000042004006044110000068D36
-:104A10000000002C0080062D00000000FF000000B8
-:104A20000020441100000000000000000020481198
-:104A300000000000000000010020481100000000FC
-:104A4000000000020080481100000000000000008B
-:104A50000EE000000000063D000000300020062DA2
-:104A600000000000000000020028062100000000F5
-:104A700000000000002F02210000000000000000E4
-:104A80000CE000000000063B810000000020441103
-:104A9000000000000000000100204811000000009C
-:104AA00000042004006044110000068D0000100086
-:104AB00000200811000000000000002B002036221A
-:104AC000000000000000000000600000000006413F
-:104AD0000000000000600000000005C99800000010
-:104AE0000020441100000000000000000080481178
-:104AF0000000000000000000C0600000000006414F
-:104B000000000000C0400400000000010000A2A45A
-:104B10000020441100000000000000220020481185
-:104B20000000000089000000002044110000000087
-:104B300000000001004048110000062D9700000011
-:104B40000020441100000000000000000020481177
-:104B5000000000008A000000002044110000000056
-:104B600000000000004048110000062D0000000079
-:104B7000006000000000065C0000201000204411CE
-:104B8000000000000000800000204811000000002C
-:104B90000001A2A4C0204411000000000000001683
-:104BA000006048110000036E000020100020441136
-:104BB000000000000001000000204811000000007B
-:104BC00081000000002044110000000000000001EE
-:104BD00000204811000000000000217C002044114A
-:104BE00000000000098000000020481100000000C3
-:104BF000FFFFFFFF00204811000000000000000040
-:104C00000020481100000000000000001700000014
-:104C1000000000000004217F006044110000068DA8
-:104C20000000001F00210230000000000000000012
-:104C300014C00000000000000000000400404C11FF
-:104C400000000656000000000040000000000000C8
-:104C50000000001700201E2D0000000000000004CE
-:104C600000291E27000000000000001700803627E2
-:104C7000000000000000001700201E2D00000000B2
-:104C8000FFFFFFFB00281E270000000000000017A8
-:104C900000803627000000000000001700201E2DB5
-:104CA000000000000000000800291E27000000008E
-:104CB00000000017008036270000000000000017E9
-:104CC00000201E2D00000000FFFFFFF700281E2718
-:104CD00000000000000000170080362700000000E0
-:104CE000000020100020441100000000000080009F
-:104CF00000204811000000000001A2A4002044117F
-:104D00000000000000000016006048110000036E63
-:104D100000002010002044110000000000010000ED
-:104D200000204811000000000000217C00204411F8
-:104D30000000000001800000002048110000000079
-:104D4000FFFFFFFF002048110000000000000000EE
-:104D500000204811000000000000000017000000C3
-:104D6000000000008100000000204411000000004D
-:104D70000000000100204811000000000004217F15
-:104D8000006044110000068D0000001F0021023069
-:104D9000000000000000000014C000000000068CAD
-:104DA0000000001000404C110000067200000000DE
-:104DB000C0200400000000000000000038C0000017
-:104DC000000000000000001D00200A2D000000006F
-:104DD0000000001E00200E2D000000000000001F3B
-:104DE0000020122D00000000000000200020162DE1
-:104DF00000000000000021690020441100000000B4
-:104E00000000000000204804000000000000000036
-:104E100000204805000000000000000000204801BC
-:104E200000000000CAFEBABE0020481100000000C9
-:104E30000000000400301224000000000000000008
-:104E4000002F006400000000000000000CC0000003
-:104E50000000068B0000000300281A22000000005A
-:104E6000000000080022122200000000FFFFF000F6
-:104E7000002812240000000000000000002910C4D7
-:104E8000000000000000001F004036240000000069
-:104E90000000000000800000000000000000000092
-:104EA0001AC000000000068D9F0000000020441181
-:104EB00000000000CAFEBABE002048110000000039
-:104EC000000000001AE00000000006900000000052
-:104ED0000080000000000000000000001AC0000078
-:104EE000000006929E000000002044110000000017
-:104EF000CAFEBABE002048110000000000000000F9
-:104F00001AE000000000069500000000008000008C
-:104F10000000000000000000006000000000000B26
-:104F200000001000006004110000031500000000E4
-:104F300000200411000000000000000000600811C3
-:104F4000000001B20000225C0020441100000000BB
-:104F5000000000030020481100000000000022565D
-:104F600000204411000000000000001B0020481138
-:104F7000000000000000A1FC00204411000000001F
-:104F80000000000100204811000000000001A1FD08
-:104F9000C0204411000000000000002100201E2D50
-:104FA000000000000000001000221E27000000008A
-:104FB000000000240020222D000000000000FFFF60
-:104FC00000282228000000000000000000294907F6
-:104FD0000000000000000000002048110000000058
-:104FE000000000220020222D000000000000FFFF32
-:104FF00000282228000000000000000000294907C6
-:105000000000000000000000002048110000000027
-:105010000000002300201E2D0000000000000010F2
-:1050200000221E27000000000000000000294907A0
-:1050300000000000000000000040481100000000D7
-:105040000000000000000000000000000000000060
-:105050000000000000000000000000000000000050
-:105060000000000000000000000000000000000040
-:105070000000000000000000000000000000000030
-:105080000000000000000000000000000000000020
-:105090000000000000000000000000000000000010
-:1050A0000000000000000000000000000000000000
-:1050B00000000000000000000000000000000000F0
-:1050C00000000000000000000000000000000000E0
-:1050D00000000000000000000000000000000000D0
-:1050E00000000000000000000000000000000000C0
-:1050F00000000000000000000000000000000000B0
-:10510000000000000000000000000000000000009F
-:10511000000000000000000000000000000000008F
-:10512000000000000000000000000000000000007F
-:10513000000000000000000000000000000000006F
-:10514000000000000000000000000000000000005F
-:10515000000000000000000000000000000000004F
-:10516000000000000000000000000000000000003F
-:10517000000000000000000000000000000000002F
-:10518000000000000000000000000000000000001F
-:10519000000000000000000000000000000000000F
-:1051A00000000000000000000000000000000000FF
-:1051B00000000000000000000000000000000000EF
-:1051C00000000000000000000000000000000000DF
-:1051D00000000000000000000000000000000000CF
-:1051E00000000000000000000000000000000000BF
-:1051F00000000000000000000000000000000000AF
-:10520000000000000000000000000000000000009E
-:10521000000000000000000000000000000000008E
-:10522000000000000000000000000000000000007E
-:10523000000000000000000000000000000000006E
-:10524000000000000000000000000000000000005E
-:10525000000000000000000000000000000000004E
-:10526000000000000000000000000000000000003E
-:10527000000000000000000000000000000000002E
-:10528000000000000000000000000000000000001E
-:10529000000000000000000000000000000000000E
-:1052A00000000000000000000000000000000000FE
-:1052B0000142050205C002500000000001C3016860
-:1052C000043F05C000000000022502090250015100
-:1052D000000000000223024502A00241000000007D
-:1052E00003D705C005C005C0000000000649064AF6
-:1052F000031F05C00000000005C005C503200340D2
-:1053000000000000032A0282034203340000000070
-:1053100005C005C005C005C00000000005C005515E
-:1053200005C005C00000000003BA05C004BB03446B
-:1053300000000000049A0450043D05C00000000075
-:1053400004D005C0044104DD00000000045005073E
-:10535000035103750000000005C005C005C005C06D
-:105360000000000005C005C005C005C00000000029
-:1053700005C005C0063F05C70000000005C005C008
-:10538000000705C00000000005C005C005C005C03D
-:105390000000000005C005C005C005C000000000F9
-:1053A00003F803ED0408040600000000040E040ADC
-:1053B000040C041000000000041C04180424042041
-:1053C00000000000042C0428043404300000000015
-:1053D00005C005C0043805C00000000005C005C0B8
-:1053E00005C005C00000000005C005C005C005C01F
-:1053F0000000000000020679069700060000000089
-:00000001FF
diff --git a/firmware/radeon/RV610_pfp.bin.ihex b/firmware/radeon/RV610_pfp.bin.ihex
deleted file mode 100644
index f55292c97b79..000000000000
--- a/firmware/radeon/RV610_pfp.bin.ihex
+++ /dev/null
@@ -1,145 +0,0 @@
-:1000000000CA040000A00000007E828B007C038BED
-:10001000008001B8007C038B00D4401E00EE001E5F
-:1000200000CA040000A00000007E828B00C41838C3
-:1000300000CA240000CA2800009581A800C41C3A08
-:1000400000C3C00000CA080000CA0C00007C744B4A
-:1000500000C200050099C00000C41C3A007C744C2A
-:1000600000C0FFF000042C0400309002007D250049
-:1000700000351402007D350B00255403007CD5802B
-:1000800000259C030095C00400D5001B007EDDC147
-:10009000007D9D8000D6801B00D5801B00D4401EB3
-:1000A00000D5401E00D6401E00D6801E00D4801E03
-:1000B00000D4C01E009783D300D5C01E00CA08001C
-:1000C0000080001A00CA0C0000E4011E00D4001ECB
-:1000D0000080000C00C4183800E4013E00D4001E6B
-:1000E0000080000C00C4183800D4401E00EE001E32
-:1000F00000CA040000A00000007E828B00E4011E04
-:1001000000D4001E00D4401E00EE001E00CA0400F1
-:1001100000A00000007E828B00E4013E00D4001E9F
-:1001200000D4401E00EE001E00CA040000A0000023
-:10013000007E828B00CA180000D4401E00D5801EAD
-:100140000080005300D4007500D4401E00CA08008F
-:1001500000CA0C0000CA100000D4801900D4C018D6
-:1001600000D5001700D4801E00D4C01E00D5001E8C
-:1001700000E2001E00CA040000A00000007E828B86
-:1001800000CA080000D4806000D4401E0080000037
-:1001900000D4801E00CA080000D4806100D4401E34
-:1001A0000080000000D4801E00CA080000CA0C00B5
-:1001B00000D4401E00D4801600D4C01600D4801E87
-:1001C000008001B800D4C01E00C6084300CA0C005D
-:1001D00000CA10000094800400CA140000E420F358
-:1001E00000D4201300D5606500D4E01C00D5201C8D
-:1001F00000D5601C008000000006200100C60843F6
-:1002000000CA0C0000CA1000009483F700CA140052
-:1002100000E420F30080007900D4201300C60843D6
-:1002200000CA0C0000CA1000009883EF00CA140036
-:1002300000D400640080008D0000000000C414326F
-:1002400000C6184300C4082F0095400500C40C30B8
-:1002500000D4401E0080000000EE001E009583F5D3
-:1002600000C4103100D4403300D5206500D4A01C58
-:1002700000D4E01C00D5201C00E4015E00D4001E68
-:10028000008000000006200100CA1800000A2001BA
-:1002900000D6007600C408360098800700C61045D6
-:1002A0000095011000D4001F00D46062008000009F
-:1002B00000D4206200CC383500CC1433008401BB5C
-:1002C00000D4007200D5401E0080000000EE001E29
-:1002D00000E2001A008401BB00E2001A00CC104BBF
-:1002E00000CC0447002C9401007D098B0098400548
-:1002F000007D15CB00D4001A008001B800D4006D39
-:100300000034440100CC0C480098403A00CC2C4A00
-:100310000095800400CC0449008001B800D4001A84
-:1003200000D4C01A00282801008400F000CC10037B
-:100330000098801B0004380C008400F000CC1003EF
-:100340000098801700043808008400F000CC1003E7
-:100350000098801300043804008400F000CC1003DF
-:100360000098801400CC104C009A800900CC144DE9
-:10037000009840DC00D4006D00CC184800D5001A6D
-:1003800000D5401A008000C900D5801A0096C0D55B
-:1003900000D4006D008001B800D4006E009AC00344
-:1003A00000D4006D00D4006E0080000000EC007FDF
-:1003B000009AC0CC00D4006D008001B800D4006E5B
-:1003C00000CC140300CC180300CC1C03007D910367
-:1003D000007DD583007D190C0035CC1F0035701FC2
-:1003E000007CF0CB007CD08B00880000007E8E8BE0
-:1003F0000095C00400D4006E008001B800D4001A3B
-:1004000000D4C01A00CC080300CC0C0300CC1003AD
-:1004100000CC140300CC180300CC1C0300CC240334
-:1004200000CC28030035C41F0036B01F007C704B81
-:100430000034F01F007C704B0035701F007C704B47
-:10044000007D8881007DCCC1007E5101007E9541F8
-:10045000007C9082007CD4C2007C848B009AC00314
-:10046000007C8C8B002C88010098809E00D4006D4D
-:100470000098409C00D4006E00CC084C00CC0C4D81
-:1004800000CC104800D4801A00D4C01A00800101AA
-:1004900000D5001A00CC083200D40032009482D972
-:1004A00000CA0C0000D4401E0080000000D4001ED2
-:1004B00000E4011E00D4001E00CA080000CA0C009F
-:1004C00000CA100000D4401E00CA140000D4801ED0
-:1004D00000D4C01E00D5001E00D5401E00D54034FB
-:1004E0000080000000EE001E0028040400E2001A54
-:1004F00000E2001A00D4401A00CA380000CC0803F9
-:1005000000CC0C0300CC0C0300CC0C03009882BD83
-:1005100000000000008401BB00D7A06F0080000035
-:1005200000EE001F00CA040000C2FF0000CC083427
-:1005300000C13FFF007C74CB007CC90B007D010F24
-:10054000009902B0007C738B008401BB00D7A06FC0
-:100550000080000000EE001F00CA080000281900FB
-:10056000007D898B009580140028140400CA0C00BB
-:1005700000CA100000CA1C0000CA240000E2001FCC
-:1005800000D4C01A00D5001A00D5401A00CC1803B8
-:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
-:1005A000007D9C4700984297000000000080016198
-:1005B00000D4C01A00D4401E00D4801E0080000069
-:1005C00000EE001E00E4011E00D4001E00D4401EF8
-:1005D00000EE001E00CA040000A00000007E828B16
-:1005E00000E4013E00D4001E00D4401E00EE001EB8
-:1005F00000CA040000A00000007E828B00CA080030
-:1006000000248C06000CCC060098C00600CC104ECE
-:100610000099000400D4007300E4011E00D4001E01
-:1006200000D4401E00D4801E0080000000EE001E9A
-:1006300000CA080000CA0C000034D01800251001C0
-:100640000095002100C17FFF00CA100000CA1400FD
-:1006500000CA180000D4801D00D4C01D007DB18BDD
-:1006600000C1420200C2C00100D5801D0034DC0E72
-:10067000007D5D4C007F734C00D7401E00D5001EEE
-:1006800000D5401E00C1420000C2C00000099C010C
-:100690000031DC10007F5F4C007F734C00042802A7
-:1006A000007D838000D5A86F00D5806600D7401EEE
-:1006B00000EC005E00C8240200C82402008001B8DB
-:1006C00000D6007600D4401E00D4801E00D4C01E88
-:1006D0000080000000EE001E0080000000EE001F01
-:1006E00000D4001F0080000000D4001F00D4001FB1
-:1006F0000088000000D4001F00000000000000007F
-:1007000000000000000000000000000000000000E9
-:1007100000000000000000000000000000000000D9
-:1007200000000000000000000000000000000000C9
-:1007300000000000000000000000000000000000B9
-:1007400000000000000000000000000000000000A9
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B0000000000000000000000000000000000039
-:1007C0000000000000000000000000000000000029
-:1007D0000000000000000000000000000000000019
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:1008000000010171000201780003008F0004007FE5
-:10081000000500030006003F000700320008012C1D
-:1008200000090046000A0036001001B6001700A2B9
-:100830000022013A00230149002000B400240125D0
-:100840000027004D0028006A002A0060002B00529B
-:10085000002F0065003200870034017F003C015604
-:10086000003F00720041018C0044012E00550173CD
-:100870000056017A0060000B00610034006200380D
-:1008800000630038006400380065003800660038F6
-:10089000006700380068003A00690041006A0048BB
-:1008A000006B0048006C0048006D0048006E004876
-:1008B000006F00480000000600000006000000066F
-:1008C0000000000600000006000000060000000610
-:1008D0000000000600000006000000060000000600
-:1008E00000000006000000060000000600000006F0
-:1008F00000000006000000060000000600000006E0
-:00000001FF
diff --git a/firmware/radeon/RV620_me.bin.ihex b/firmware/radeon/RV620_me.bin.ihex
deleted file mode 100644
index ba19ed892920..000000000000
--- a/firmware/radeon/RV620_me.bin.ihex
+++ /dev/null
@@ -1,1345 +0,0 @@
-:1000000000000000C020040000000000000000000C
-:1000100000A0000A000000000000FFFF00284621A9
-:100020000000000000000000D900480000000000AF
-:1000300000000000C02004000000000000000000DC
-:1000400000A0000A000000000000000000E0000026
-:100050000000000000010000C02946200000000050
-:1000600000000000D900480000000000000000006F
-:10007000C0200400000000000000000000A0000AF2
-:10008000000000008100000000204411000000007A
-:1000900000000001002048110000000000042004BE
-:1000A000006044110000068D0000000000600000A8
-:1000B000000006310000000000600000000006455E
-:1000C00000000000C02008000000000000000F0039
-:1000D000002816220000000000000008002116255C
-:1000E000000000000000001800203625000000007D
-:1000F0008D000000002044110000000000000004FA
-:10010000002F022500000000000000000CE00000AD
-:1001100000000018004120000040481100000019B4
-:100120000042200000204811000000008E00000066
-:1001300000204411000000000000002800204A2D8B
-:1001400000000000900000000020441100000000AA
-:100150000000000000204805000000000000000C26
-:1001600000211622000000000000000300281625D0
-:10017000000000000000001900211A220000000009
-:100180000000000400281A26000000000000000003
-:10019000002914C5000000000000001900203625C9
-:1001A0000000000000000000003A140200000000FF
-:1001B00000000016002116250000000000000003CA
-:1001C00000281625000000000000001700200E2D5A
-:1001D00000000000FFFFFFFC00280E2300000000CD
-:1001E00000000000002914A3000000000000001718
-:1001F00000203625000000000000800000280E22AC
-:10020000000000000000000700220E230000000094
-:10021000000000000029386E0000000020000000EF
-:1002200000280E22000000000000000600210E231E
-:1002300000000000000000000029386E00000000EF
-:100240000000000000220222000000000000000068
-:1002500014E0000000000038000000002EE0000064
-:1002600000000035000000002CE000000000003716
-:100270000000000000400E2D0000003900000008C2
-:1002800000200E2D00000000000000090040122D8B
-:10029000000000460000000100400E2D0000003963
-:1002A00000000000C0200C0000000000003FFFFC28
-:1002B0000028122300000000000000020022122487
-:1002C000000000000000001F00211E2300000000AD
-:1002D0000000000014E000000000003E00000008E4
-:1002E00000401C11000000410000000D00201E2DE8
-:1002F000000000000000000F00281E270000000082
-:100300000000000300221E27000000007FC0000044
-:1003100000281A23000000000000001400211A2603
-:10032000000000000000000100331A260000000059
-:100330000000000800221A26000000000000000053
-:1003400000290CC700000000000000270020362410
-:100350000000000000007F000028122100000000C3
-:1003600000001400002F0224000000000000000024
-:100370000CE000000000004B0000000100290E23EB
-:10038000000000000000000E0020362300000000E6
-:100390000000E0000020441100000000FFF8000011
-:1003A00000294A230000000000000000003A2C024F
-:1003B000000000000000000200220E2B00000000E0
-:1003C000FC00000000280E23000000000000000FC9
-:1003D000002036230000000000001FFF00294A23F0
-:1003E000000000000000002700204A2D000000004F
-:1003F000000000000020481100000000000000295B
-:1004000000200E2D00000000060A020000294A23E9
-:100410000000000000000000002048110000000063
-:100420000000000000204811000000000000000152
-:1004300000210222000000000000000014E0000083
-:1004400000000061000000002EE000000000005FDE
-:10045000000000002CE000000000005E0000000032
-:1004600000400E2D000000620000000100400E2D33
-:10047000000000620000000A00200E2D00000000B5
-:100480000000000B0040122D0000006A0000000078
-:10049000C0200C0000000000003FFFFC00281223D9
-:1004A00000000000000000020022122400000000F2
-:1004B0007FC0000000281623000000000000001488
-:1004C0000021162500000000000000010033162561
-:1004D000000000008000000000280E230000000043
-:1004E0000000000000290CA3000000003FFFFC00FA
-:1004F00000290E23000000000000001F00211E2321
-:10050000000000000000000014E000000000006D8A
-:100510000000010000401C11000000700000000DF0
-:1005200000201E2D00000000000000F000281E2703
-:10053000000000000000000400221E270000000050
-:100540008100000000204411000000000000000DA8
-:100550000020481100000000FFFFF0FF00281A30C3
-:10056000000000000000A02800204411000000004E
-:1005700000000000002948E6000000000000A0186C
-:1005800000204411000000003FFFFFFF00284A2325
-:10059000000000000000A010002044110000000036
-:1005A00000000000002048040000000000000030AF
-:1005B0000020162D00000000000000020029162572
-:1005C0000000000000000030002036250000000080
-:1005D000000000250020162D000000000000000093
-:1005E000002F00A300000000000000000CC000006D
-:1005F00000000083000000260020162D00000000EF
-:1006000000000000002F00A4000000000000000017
-:100610000CC000000000008400000000004000004A
-:100620000000008A000000250020362300000000A2
-:100630000000002600203624000000000000001703
-:1006400000201E2D000000000000000200210227F3
-:10065000000000000000000014E000000000008A1C
-:1006600000000000006000000000066800000000BC
-:10067000006000000000065C0000000200210E2265
-:10068000000000000000000014C000000000008D09
-:1006900000000012C040362000000093000000005F
-:1006A0002EE0000000000091000000002CE000009F
-:1006B000000000900000000200400E2D000000929B
-:1006C0000000000300400E2D000000920000000C0E
-:1006D00000200E2D00000000000000120020362334
-:1006E000000000000000000300210E2200000000B6
-:1006F0000000000014C00000000000980000A00CE2
-:10070000002044110000000000000000C02048004C
-:100710000000000000000000C0404800000000A0F1
-:100720000000A00C002044110000000000000000A8
-:100730000020481100000000000000002EE0000032
-:100740000000009E000000002CE000000000009D62
-:100750000000000200400E2D0000009F000000037A
-:1007600000400E2D0000009F0000000C00200E2D08
-:10077000000000000000000000204803000000000E
-:1007800000000000003A0C0200000000003F0000E2
-:1007900000280E23000000000000001000210E239E
-:1007A00000000000000000110020362300000000BF
-:1007B0000000001E0021022B0000000000000000CD
-:1007C00014C00000000000A700000016C020362062
-:1007D000000000000000001F0021022B00000000AC
-:1007E0000000000014C00000000000AA0000001576
-:1007F000C0203620000000000000000800210E2B61
-:10080000000000000000007F00280E230000000010
-:1008100000000000002F0223000000000000000084
-:100820000CE00000000000E10000000027000000D4
-:10083000000000000000000000600000000002A3B3
-:1008400000000001002F0223000000000000000053
-:100850000AE00000000000B300000000006000009B
-:100860000000013A81000000002044110000000057
-:100870000000000600204811000000000000000CED
-:1008800000221E300000000099800000002044116A
-:1008900000000000000000040020122D00000000F5
-:1008A00000000008002212240000000000000010D8
-:1008B00000201811000000000000000000291CE4C6
-:1008C0000000000000000000006048070000012F49
-:1008D0009B00000000204411000000000000000008
-:1008E00000204802000000009C000000002044118D
-:1008F00000000000000000000033146F0000000042
-:100900000000000100333E23000000000000000052
-:10091000D9004800000000000000000000203C0555
-:1009200000000000810000000020441100000000D1
-:100930000000000E00204811000000000000000030
-:1009400000201010000000000000E007002044110B
-:10095000000000000000000F0021022B000000003A
-:100960000000000014C00000000000CB00F8FF08E9
-:1009700000204811000000009800000000404811CD
-:10098000000000DC000000F000280E220000000043
-:10099000000000A0002F0223000000000000000063
-:1009A0000CC00000000000DA0000001100200E2D35
-:1009B0000000000000000001002F022300000000E2
-:1009C000000000000CE00000000000D50000000264
-:1009D000002F022300000000000000000CE00000D7
-:1009E000000000D400003F0000400C11000000D6C1
-:1009F00000001F0000400C11000000D600000F0096
-:100A000000200C11000000000038000900294A23D2
-:100A1000000000003F00000000280E2B0000000036
-:100A20000000000200220E2300000000000000076A
-:100A300000494A23000000DC00380F09002048115B
-:100A400000000000680000070020481100000000BE
-:100A50000000000800214A270000000000000000FC
-:100A60000020481100000000060A020000294A2464
-:100A700000000000000000000020481100000000FD
-:100A80000000000000204811000000000000A20249
-:100A9000002044110000000000FF000000280E228A
-:100AA000000000000000008000294A230000000030
-:100AB0000000002700200E2D00000000000000268E
-:100AC0000020122D0000000000000000002F008315
-:100AD00000000000000000000CE00000000000EA40
-:100AE000000000000060000000000662000000003E
-:100AF00000400000000000EB00000000006000006B
-:100B000000000665000000070020222D0000000004
-:100B10000000000500220E2200000000001000006E
-:100B200000280E23000000000000000000292068BB
-:100B30000000000000000000003A0C02000000006D
-:100B4000000000EF00280E2300000000000000005D
-:100B500000292068000000000000001700200E2D72
-:100B6000000000000000000300210223000000003C
-:100B70000000000014E00000000000F80000000B7E
-:100B800000210228000000000000000014C0000046
-:100B9000000000F8000004000029222800000000E6
-:100BA0000000001400203628000000000000001C97
-:100BB00000210E22000000000000000014C0000010
-:100BC000000000FD0000A30C002044110000000004
-:100BD0000000000000204811000000000000001E7E
-:100BE00000210E22000000000000000014C00000E0
-:100BF0000000010B0000A30F0020441100000000C2
-:100C00000000001100200E2D000000000000000177
-:100C1000002F022300000000000000000CC00000B4
-:100C200000000104FFFFFFFF004048110000010B1E
-:100C300000000002002F022300000000000000005E
-:100C40000CC00000000001070000FFFF0040481139
-:100C50000000010B00000004002F02230000000030
-:100C6000000000000CC000000000010A000000FFAE
-:100C7000004048110000010B000000010020481155
-:100C8000000000000002C400002044110000000029
-:100C90000000001F00210E220000000000000000E4
-:100CA00014C00000000001120000001040210E20BE
-:100CB00000000000000000130020362300000000A8
-:100CC0000000001840224A20000000000000001030
-:100CD000C0424A20000001140000000000200C1156
-:100CE0000000000000000013002036230000000078
-:100CF000000000000020481100000000000000007B
-:100D000000204811000000000000000A002010111F
-:100D10000000000000000000002F0224000000007E
-:100D2000000000000CE000000000011B00000000BB
-:100D300000204811000000000000000100531224B0
-:100D400000000117FFBFFFFF00283A2E000000003F
-:100D50000000001B00210222000000000000000033
-:100D600014C000000000012E81000000002044118A
-:100D7000000000000000000D0020481100000000ED
-:100D80000000001800220E3000000000FC000000EF
-:100D900000280E2300000000810000000020441104
-:100DA000000000000000000E0020481100000000BC
-:100DB0000000000000201010000000000000E00E05
-:100DC000002044110000000007F8FF08002048112F
-:100DD000000000000000000000294A23000000007D
-:100DE0000000001C00201E2D000000000000000874
-:100DF00000214A27000000000000000000204811E8
-:100E000000000000060A020000294A240000000039
-:100E10000000000000204811000000000000000059
-:100E200000204811000000000000000000800000C9
-:100E300000000000810000000020441100000000BC
-:100E40000000000100204811000000000000217C8B
-:100E50000020441100000000008000000020481124
-:100E60000000000000000000002048060000000014
-:100E70000000000800214A270000000000000000D8
-:100E800017000000000000000004217F00604411F2
-:100E90000000068D0000001F00210230000000004D
-:100EA0000000000014C000000000068C00000004D8
-:100EB00000404C1100000135810000000020441169
-:100EC00000000000000000010020481100000000A8
-:100ED000000021F800204411000000000000001C68
-:100EE0000020481100000000000421F900604411B6
-:100EF0000000068D000000110021023000000000FB
-:100F00000000000014E000000000013C00000000B0
-:100F100000800000000000000000000000600000F1
-:100F20000000000B00000000006004110000031529
-:100F3000000000000020041100000000000000007C
-:100F400000600811000001B2000000000060000015
-:100F5000000001600000FFFF40280E20000000009C
-:100F600000000010C0211220000000000000FFFF60
-:100F7000402806200000000000000010C0210A20C8
-:100F800000000000000000000034146100000000B8
-:100F90000000000000741882000002BB0001A1FDE7
-:100FA00000604411000002E000003FFF002F022F0C
-:100FB00000000000000000000CC00000000001471D
-:100FC00000000000C040040000000001000000001C
-:100FD000006000000000000B000000000060041131
-:100FE00000000315000000000020041100000000B4
-:100FF0000000000000600811000001B200003FFF87
-:10100000002F022F00000000000000000CE0000094
-:10101000000000000000000000600000000001600F
-:101020000000001040210E20000000000000FFFF23
-:10103000C0281220000000000000001040211620EF
-:10104000000000000000FFFFC0681A20000002BB83
-:101050000001A1FD00604411000002E000003FFF1C
-:10106000002F022F00000000000000000CC0000054
-:101070000000015800000000C04004000000000112
-:101080000000225C0020441100000000000000016C
-:1010900000300A2F000000000000000100210A2299
-:1010A000000000000000000300384A220000000099
-:1010B0000000225600204411000000000000001A29
-:1010C00000204811000000000000A1FC0020441195
-:1010D0000000000000000001008048110000000036
-:1010E00000000000006000000000000B0000000095
-:1010F000006000000000018F0000000000600000A0
-:10110000000001A000003FFF002F022F00000000A0
-:10111000000000000CE000000000000000000000E3
-:1011200000202C0800000000000000000020241116
-:101130000000000000000000002028110000000056
-:10114000000022560020441100000000000000169C
-:1011500000204811000000000000225C0020441123
-:101160000000000000000003002048110000000003
-:1011700093800000002044110000000000000002E5
-:1011800000221E290000000000000000007048EB53
-:101190000000019C0000000000600000000002BB95
-:1011A00000000001403306200000000000000000A5
-:1011B000C03024090000000000003FFF002F022F74
-:1011C00000000000000000000CE000000000000033
-:1011D0000000000000600000000002A3000000000A
-:1011E000002F022100000000000000000AE00000C3
-:1011F0000000018100000000006000000000013AD2
-:101200000000000000400000000001869500000082
-:10121000002044110000000000000000002F022107
-:1012200000000000000000000CE00000000001864B
-:1012300000000000C0204800000000000000000185
-:10124000005306210000018292000000002044119A
-:101250000000000000000000C0604800000001978E
-:101260000001A1FD00204411000000000000001159
-:101270000020062D00000000000000000078042A75
-:10128000000002FB00000000002028090000000010
-:1012900000003FFF002F022F0000000000000000B0
-:1012A0000CC000000000017400000000C0400400F9
-:1012B000000000010000021000600411000003158E
-:1012C00000003FFF002F022F000000000000000080
-:1012D0000CE000000000019400000015C020362042
-:1012E0000000000000000016C020362000000000B2
-:1012F0003F800000002004110000000046000000B4
-:1013000000600811000001B2000000000080000031
-:10131000000000000000A1FC0020441100000000BB
-:1013200000003FFF002F022F00000000000000001F
-:101330000CC000000000019B00000001008048116B
-:1013400000000000000000210080481100000000A3
-:101350000000FFFF40280E200000000000000010E9
-:10136000C0211220000000000000FFFF40281620CE
-:101370000000000000000010C0811A2000000000E2
-:101380008100000000204411000000000000000661
-:1013900000204811000000000000000800221E305C
-:1013A000000000000000002900201A2D00000000AD
-:1013B0000000E0000020441100000000FFFBFF09D6
-:1013C00000204811000000000000000F0020222D26
-:1013D0000000000000001FFF00294A280000000054
-:1013E000000000060020222D000000000000000088
-:1013F000002920E80000000000000000002048084C
-:101400000000000000000000002048110000000063
-:10141000060A020000294A26000000000000000021
-:1014200000204811000000000000000000204811CA
-:101430000000000000000100002018110000000062
-:101440000000000800621E280000012F00000008B4
-:1014500000822228000000000002C0000020441189
-:10146000000000000000001500600E2D000001BD0E
-:101470000000001600600E2D000001BD0000C00835
-:1014800000204411000000000000001700200E2D75
-:10149000000000000000000014C00000000001B9BE
-:1014A0000000000000200411000000000000000007
-:1014B0000020480100000000390000000020481111
-:1014C00000000000000000000020481100000000A3
-:1014D000000000000080480200000000000000182A
-:1014E00000202E2D0000000000000000003B0D63D6
-:1014F000000000000000000800224A230000000055
-:101500000000001000224A23000000000000001824
-:1015100000224A2300000000000000000080480371
-:101520000000000000000000006000000000000B50
-:10153000000010000060041100000315000000000E
-:1015400000200411000000000000000000600811ED
-:10155000000001B2000000070021062F000000007B
-:101560000000001300200A2D000000000000000110
-:1015700000202C11000000000000FFFF4028222066
-:10158000000000000000000F0026222800000000DC
-:101590000000001040212620000000000000000F85
-:1015A000002626290000000000000000002028027C
-:1015B000000000000000225600204411000000003E
-:1015C0000000001B00204811000000000000000087
-:1015D000002F022100000000000000000CE00000CD
-:1015E000000001E00000225C002044110000000027
-:1015F0000000008100204811000000000000A1FC54
-:1016000000204411000000000000000100204811EB
-:10161000000000000000008000201C1100000000FD
-:1016200000000000002F0227000000000000000062
-:101630000CE00000000001DC000000000060000081
-:10164000000001E90000000100531E27000001D83E
-:101650000000000100202C11000000000000001F0D
-:1016600000280A22000000000000001F00282A2A8B
-:10167000000000000000000100530621000001D11D
-:101680000000225C00204411000000000000000265
-:1016900000304A2F000000000000A1FC002044118F
-:1016A00000000000000000010020481100000000C0
-:1016B0000000000100301E2F0000000000000000AC
-:1016C000002F022700000000000000000CE00000D6
-:1016D000000000000000000000600000000001E9C0
-:1016E0000000000100531E27000001E50000FFFF7D
-:1016F00040280E20000000000000000F00260E23EE
-:101700000000000000000010C021122000000000B6
-:101710000000000F0026122400000000000000005E
-:1017200000201411000000000000000000601811EB
-:10173000000002BB0001A1FD0020441100000000D8
-:1017400000000000002F022B00000000000000003D
-:101750000CE00000000001F8000000100022162834
-:1017600000000000FFFF0000002816250000000018
-:101770000000FFFF00281A29000000000000000000
-:10178000002948C500000000000000000020480AB1
-:10179000000000000000000000202C1100000000EC
-:1017A000000000100022162300000000FFFF0000D0
-:1017B00000281625000000000000FFFF00281A2462
-:1017C0000000000000000000002948C500000000E3
-:1017D0000000000000731503000002050000000077
-:1017E0000020180500000000000000000073152410
-:1017F0000000020500000000002D14C500000000DC
-:1018000000000000003008A20000000000000000FE
-:101810000020480200000000000000000020280214
-:101820000000000000000000002020030000000075
-:101830000000000000802404000000000000000FF1
-:1018400000210225000000000000000014C000007C
-:101850000000068C00000000002B140500000000B2
-:1018600000000001009016250000000000000000AC
-:10187000006000000000000B000000000060041188
-:10188000000003150000000000200411000000000B
-:101890000000000000600811000001B200002256A4
-:1018A00000204411000000000000001A00294A2214
-:1018B0000000000000000000C02000000000000048
-:1018C00000003FFF002F022F00000000000000007A
-:1018D0000CE000000000000000000000C020040038
-:1018E000000000000000225C002044110000000005
-:1018F0000000000300384A21000000000000A1FCA5
-:1019000000204411000000000000000100204811E8
-:10191000000000000000FFFF40281220000000002F
-:1019200000000010C0211A20000000000000FFFF8E
-:1019300040280E200000000000000010C0211620EA
-:10194000000000000000000000741465000002BBED
-:101950000001A1FD00604411000002E00000000150
-:10196000003306210000000000000000002F0221CB
-:1019700000000000000000000CC000000000021980
-:1019800000003FFF002F022F0000000000000000B9
-:101990000CC000000000021200000000C040040063
-:1019A000000000010000000000600000000006458B
-:1019B000000000000040040F0000021300000000BF
-:1019C0000060000000000631000000000060000020
-:1019D000000006450000021000600411000003151D
-:1019E0000000000000600000000001A000000000F6
-:1019F000006000000000019C00000000006000008A
-:101A0000000002BB0000000000600000000002A314
-:101A1000938000000020441100000000000000003E
-:101A2000002048080000000000000000002F022FE6
-:101A300000000000000000000AE000000000023288
-:101A400000000000006000000000013A00000000FB
-:101A50000040000000000236950000000020441104
-:101A60000000000000000000002F022F0000000016
-:101A7000000000000CE00000000002360000000042
-:101A8000C0404800000002339200000000204411D2
-:101A90000000000000000000C0204800000000001E
-:101AA0000000225600204411000000000000001633
-:101AB00000204811000000000000225C00204411BA
-:101AC000000000000000000300204811000000009A
-:101AD0000000A1FC002044110000000000000001F3
-:101AE00000204811000000000001A1FD0020441169
-:101AF000000000000000000000600411000002FB74
-:101B000000000000C04004000000000100000000D0
-:101B100000600000000006310000A00C002044110D
-:101B20000000000000000000C0204800000000008D
-:101B300000000000C040480000000000000000005D
-:101B4000006000000000000B0000001840210A2087
-:101B50000000000000000003002F0222000000002F
-:101B6000000000000AE000000000024C0000001429
-:101B70000020222D00000000000801010029222879
-:101B800000000000000000140020362800000000C3
-:101B90000000A30C00204411000000000000000021
-:101BA000C02048000000000000000000C0204800E5
-:101BB0000000000000000000C0404800000002518A
-:101BC00000000000006000000000000B000000109A
-:101BD00000600411000003153F8000000020041184
-:101BE000000000000000000000600811000001B2C9
-:101BF0000000225C002044110000000000000003EF
-:101C000000204811000000000000000000600000FB
-:101C10000000027C0000001700201E2D00000000C4
-:101C20000000000100211E2700000000000000004D
-:101C300014E000000000026A0000001200201E2DC7
-:101C4000000000000000FFFF00281E270000000029
-:101C50000000000000341C2700000000000000000D
-:101C600012C000000000025F0000000000201C11F4
-:101C70000000000000000000002F00E50000000050
-:101C80000000000008C00000000002620000000028
-:101C900000201407000000000000001200201E2D8C
-:101CA000000000000000001000211E2700000000BE
-:101CB0000000000000341C4700000000000000008D
-:101CC00012C00000000002670000000000201C118C
-:101CD0000000000000000000002F00E600000000EF
-:101CE0000000000008C000000000026A00000000C0
-:101CF0000020180700000000000000000060000045
-:101D0000000002C100002256002044110000000023
-:101D1000000000000034202300000000000000004C
-:101D200012C00000000002720000000000342044D5
-:101D3000000000000000000012C00000000002715E
-:101D40000000001600404811000002760000001854
-:101D500000404811000002760000000000342044DA
-:101D6000000000000000000012C00000000002752A
-:101D70000000001700404811000002760000001922
-:101D800000204811000000000000A1FC00204411C8
-:101D900000000000000000010020481100000000C9
-:101DA0000001A1FD00604411000002E900003FFFB6
-:101DB000002F022F00000000000000000CC00000F7
-:101DC0000000025600000000C040040000000001B6
-:101DD0000000001040210620000000000000FFFF6E
-:101DE000C0280A20000000000000001040210E2042
-:101DF000000000000000FFFFC028122000000000CB
-:101E00000000001040211620000000000000FFFF2D
-:101E1000C0881A200000000081000000002044114A
-:101E20000000000000000001002048110000000038
-:101E300000042004006044110000068D0000000032
-:101E4000006000000000063100000000C0600000DB
-:101E5000000002A30000000500200A2D0000000081
-:101E60000000000800220A22000000000000002BF1
-:101E700000201A2D000000000000001C00201E2D74
-:101E8000000000000000700000281E270000000075
-:101E90000000000000311CE6000000000000002AE5
-:101EA00000201A2D000000000000000C00221A265D
-:101EB0000000000000000000002F00E6000000000D
-:101EC0000000000006E00000000002920000000098
-:101ED00000201C11000000000000000000200C1178
-:101EE000000000000000002B00203623000000004E
-:101EF0000000001000201811000000000000000089
-:101F000000691CE20000012F9380000000204411B2
-:101F10000000000000000000002048070000000052
-:101F200095000000002044110000000000000000A7
-:101F3000002F022F00000000000000000CE0000055
-:101F40000000029D0000000100333E2F0000000051
-:101F500000000000D90048000000000092000000CE
-:101F6000002044110000000000000000C0204800D4
-:101F7000000000000000001C0040362700000000A8
-:101F80000000000CC0220A20000000000000002910
-:101F9000002036220000000000000028C04036204B
-:101FA000000000000000A2A4002044110000000076
-:101FB000000000090020481100000000A1000000FE
-:101FC00000204411000000000000000100804811C2
-:101FD000000000000000002100201E2D0000000075
-:101FE00000000000002C1CE30000000000000021A5
-:101FF00000203627000000000000002200201E2DD7
-:102000000000000000000000002C1CE400000000A4
-:1020100000000022002036270000000000000023FE
-:1020200000201E2D0000000000000000003120A351
-:102030000000000000000000002D1D07000000004F
-:1020400000000023002036270000000000000024CC
-:1020500000201E2D0000000000000000003120C400
-:102060000000000000000000002D1D07000000001F
-:10207000000000240080362700000000000000213E
-:10208000002036230000000000000022002036243B
-:10209000000000000000000000311CA30000000050
-:1020A0000000002300203627000000000000000090
-:1020B00000311CC40000000000000024008036270E
-:1020C000000000000000001A002036270000000079
-:1020D0000000001B00203628000000000000001750
-:1020E00000201E2D00000000000000020021022739
-:1020F000000000000000000014C00000000002DC2E
-:102100000000000000400000000002D90000001A9A
-:1021100000203627000000000000001B00203628A9
-:10212000000000000000001700201E2D000000002D
-:102130000000000200210227000000000000000053
-:1021400014E00000000002D9000000030021022773
-:10215000000000000000000014E00000000002DCAD
-:102160000000002300201E2D0000000000000000E1
-:10217000002E00E1000000000000000002C000008E
-:10218000000002DC0000002100201E2D00000000E5
-:1021900000000000003120A100000000000000004D
-:1021A000002E00E8000000000000000006C0000053
-:1021B000000002DC0000002400201E2D00000000B2
-:1021C00000000000002E00E20000000000000000FF
-:1021D00002C00000000002DC0000002200201E2DD2
-:1021E0000000000000000000003120C200000000DC
-:1021F00000000000002E00E80000000000000000C9
-:1022000006C00000000002DC0000000000600000CA
-:10221000000006680000000000600000000002B539
-:102220000000000000400000000002DE000000008E
-:1022300000600000000002B5000000000060000027
-:102240000000065F0000000000400000000002DE09
-:102250000000000000600000000002A70000000075
-:1022600000400000000002DE0000001A00201E2DC9
-:10227000000000000000001B0080222D0000000074
-:102280000000001000221E230000000000000000DB
-:1022900000294887000000000000000000311CA356
-:1022A000000000000000001000221E2700000000B7
-:1022B0000000000000294887000000000000001016
-:1022C00000221E230000000000000000003120C496
-:1022D000000000000000FFFF00282228000000008E
-:1022E0000000000000894907000000000000001005
-:1022F00000221E2300000000000000000029488783
-:10230000000000000000001000221E21000000005C
-:102310000000000000294847000000000000000005
-:1023200000311CA3000000000000001000221E2746
-:1023300000000000000000000029488700000000A5
-:102340000000000000311CA100000000000000108F
-:1023500000221E270000000000000000002948475E
-:10236000000000000000001000221E2300000000FA
-:1023700000000000003120C4000000000000FFFF4A
-:102380000028222800000000000000000029490762
-:10239000000000000000001000221E2100000000CC
-:1023A00000000000003120C2000000000000FFFF1C
-:1023B00000282228000000000000000000894907D2
-:1023C000000000000000001000221E23000000009A
-:1023D0000000000000294887000000000000000104
-:1023E00000220A210000000000000000003308A2C3
-:1023F000000000000000001000221E22000000006B
-:102400000000001000212222000000000000000057
-:1024100000294907000000000000000000311CA353
-:10242000000000000000001000221E270000000035
-:1024300000000000002948870000000000000001A3
-:1024400000220A210000000000000000003008A265
-:10245000000000000000001000221E22000000000A
-:1024600000000010002122220000000000000000F7
-:1024700000294907000000000000001000221E2370
-:102480000000000000000000003120C40000000037
-:102490000000FFFF002822280000000000000000CC
-:1024A000002949070000000000000000003808C5AE
-:1024B00000000000000000000030084100000000A3
-:1024C0000000000100220A220000000000000000BD
-:1024D000003308A2000000000000001000221E22AD
-:1024E0000000000000000010002122220000000077
-:1024F00000000000008949070000000000000017EC
-:102500000020222D000000000000000014C0000088
-:1025100000000318FFFFFFEF002806210000000065
-:10252000000000140020222D000000000000F8E050
-:1025300000204411000000000000000000294901B3
-:1025400000000000000000000089490100000000B8
-:102550000000000000204811000000000000000002
-:102560000020481100000000060A02000080481107
-:102570000000000000000000C0200000000000007B
-:1025800097000000C020441100000000000000007F
-:10259000C0204811000000008A0000000020441103
-:1025A00000000000000000000020481100000000B2
-:1025B0000000225C00204411000000000000000028
-:1025C000C0204800000000000000A1FC00204411D1
-:1025D0000000000000000000C020480000000000D3
-:1025E00000000000C0200400000000000000000007
-:1025F00000A0000A00000000970000000020441125
-:102600000000000000000000002048110000000051
-:102610008A000000002044110000000000000000BB
-:1026200000204811000000000000225C002044113E
-:102630000000000000000000C02048000000000072
-:102640000000A1FC00204411000000000000000078
-:10265000C02048000000000000000000C02004006E
-:10266000000000000000000000A0000A00000000C0
-:10267000970000000020441100000000000000004E
-:1026800000204811000000008A00000000204411D2
-:1026900000000000000000000020481100000000C1
-:1026A0000000225C00204411000000000000000037
-:1026B000C0204800000000000000A1FC00204411E0
-:1026C0000000000000000000C020480000000000E2
-:1026D0000001A1FD002044110000000000000000E6
-:1026E000D90048000000000000000000C0200400E5
-:1026F000000000000000000000A0000A0000000030
-:1027000000002257002044110000000000000003D8
-:10271000C0484A20000000000000225D0020441153
-:102720000000000000000000C04048000000000061
-:1027300000000000006000000000064500000000EE
-:10274000C0200800000000000000225C00204411AE
-:10275000000000000000000300384A2200000000D2
-:102760000000A1FC00204411000000000000000057
-:10277000C0204800000000000001A1FD002044111D
-:102780000000000000000000002F022200000000F6
-:10279000000000000CE0000000000000000000004D
-:1027A00040204800000000000000000140304A20A6
-:1027B0000000000000000002C0304A2000000000BD
-:1027C0000000000100530A220000034B0000003FFC
-:1027D000C0280A20000000008100000000204411F1
-:1027E000000000000000000100204811000000006F
-:1027F000000021F800204411000000000000001833
-:102800000020481100000000000421F9006044117C
-:102810000000068D000000110021023000000000C1
-:102820000000000014E00000000003540000001449
-:10283000002F022200000000000000000CC0000079
-:10284000000003640000201000204411000000007C
-:102850000000800000204811000000000001A2A438
-:102860000020441100000000000000000060480249
-:102870000000036E00002100002044110000000051
-:1028800000000000C0204800000000000000000020
-:10289000C02048000000000000000000C0204800E8
-:1028A0000000000000000000C040480000000000E0
-:1028B00000000004002F02220000000000000000C1
-:1028C0000CC000000000036A00002010002044112A
-:1028D00000000000000080000020481100000000FF
-:1028E0000001A2A40020441100000000000000002C
-:1028F000004048020000035F00000028002F022271
-:1029000000000000000000000CC00000000005C036
-:102910000001A2A4002044110000000000000000FB
-:10292000004048020000035F0000002C0020362613
-:102930000000000000000049002018110000000005
-:102940000000003F002048110000000000000001CE
-:1029500000331A260000000000000000002F0226AD
-:1029600000000000000000000CC000000000037028
-:102970000000002C00801A2D000000000000003F25
-:10298000C0280A200000000000000015002F0222CD
-:1029900000000000000000000CE0000000000386C2
-:1029A00000000006002F02220000000000000000CE
-:1029B0000CE00000000003B100000016002F02220E
-:1029C00000000000000000000CE00000000003B563
-:1029D00000000020002F0222000000000000000084
-:1029E0000CE000000000039C0000000F002F0222FA
-:1029F00000000000000000000CE00000000003A840
-:102A000000000010002F0222000000000000000063
-:102A10000CE00000000003A80000001E002F0222AE
-:102A200000000000000000000CE000000000039027
-:102A30000000A2A4002044110000000000000000DB
-:102A400000404802000000000800000000290A229F
-:102A5000000000000000000340210E2000000000E4
-:102A60000000000CC021122000000000000800003F
-:102A7000002812240000000000000014C0221620CC
-:102A80000000000000000000002914A40000000065
-:102A90000000A2A40020441100000000000000007B
-:102AA000002948A2000000000000A1FE00204411FF
-:102AB000000000000000000000404803000000008B
-:102AC000810000000020441100000000000000010F
-:102AD0000020481100000000000021F800204411EF
-:102AE0000000000000000016002048110000000057
-:102AF000000421F9006044110000068D000000155B
-:102B000000210230000000000000000014E000007E
-:102B1000000003920000210E00204411000000007C
-:102B200000000000C020480000000000000000007D
-:102B3000C0204800000000000000A2A400204411B2
-:102B400000000000000000000040480200000000FB
-:102B5000810000000020441100000000000000017E
-:102B60000020481100000000000021F8002044115E
-:102B700000000000000000170020481100000000C5
-:102B8000000421F9006044110000068D00000003DC
-:102B900000210230000000000000000014E00000EE
-:102BA0000000039E000021080020441100000000E6
-:102BB00000000000C02048000000000000000000ED
-:102BC000C0204800000000000000A2A40020441122
-:102BD000000000000000000000404802000000006B
-:102BE0000000A2A40020441100000000000000002A
-:102BF0000020480200000000800000000020441176
-:102C0000000000000000000000204811000000004B
-:102C100081000000002044110000000000000010AE
-:102C200000204811000000000000000000200010FB
-:102C3000000000000000000014C00000000003AE0F
-:102C40000000000000400000000000000000201014
-:102C50000020441100000000000080000020481106
-:102C6000000000000001A2A40020441100000000A8
-:102C70000000000600404811000000000000201085
-:102C800000204411000000000000800000204811D6
-:102C9000000000000001A2A4002044110000000078
-:102CA00000000016006048110000036E00000000E4
-:102CB000004000000000000000000000C0200800EC
-:102CC0000000000000000000C0200C000000000018
-:102CD0000000001D00210223000000000000000091
-:102CE00014E00000000003CE810000000020441129
-:102CF000000000000000000100204811000000005A
-:102D0000000021F80020441100000000000000181D
-:102D10000020481100000000000421F90060441167
-:102D20000000068D000000110021023000000000AC
-:102D30000000000014E00000000003C000002100BB
-:102D400000204411000000000000000000204802A4
-:102D50000000000000000000002048030000000008
-:102D6000BABECAFE0020481100000000CAFEBABE6A
-:102D70000020481100000000000020100020441135
-:102D8000000000000000800000204811000000004A
-:102D90000000A2A400204411000000000000000474
-:102DA0000040481100000000000021700020441184
-:102DB00000000000000000000020480200000000A9
-:102DC0000000000000204803000000008100000017
-:102DD00000204411000000000000000A00204811FB
-:102DE00000000000000000000020001000000000B3
-:102DF0000000000014C00000000003D38C0000009D
-:102E00000020441100000000CAFEBABE0040481174
-:102E100000000000810000000020441100000000BC
-:102E200000000001002048110000000000003FFFEA
-:102E300040280A20000000008000000040280E20EA
-:102E40000000000040000000C02812200000000028
-:102E500000040000006946220000068D000000000A
-:102E6000002014100000000000000000002F0223CA
-:102E700000000000000000000CC00000000003E1A2
-:102E800000000000C0401800000003E400003FFF05
-:102E9000C0281A2000000000000400000069462637
-:102EA0000000068D00000000002018100000000047
-:102EB00000000000002F02240000000000000000BD
-:102EC0000CC00000000003E700000000C0401C0030
-:102ED000000003EA00003FFFC0281E2000000000A1
-:102EE00000040000006946270000068D0000000075
-:102EF00000201C1000000000000000000020440220
-:102F00000000000000000000002820C500000000B4
-:102F100000000000004948E800000000A580000013
-:102F200000200811000000000000200000200C110B
-:102F30000000000083000000006044110000041243
-:102F4000000000000020440200000000000000001B
-:102F5000C0204800000000000000000040204800A1
-:102F6000000000000000001FC0210220000000003F
-:102F70000000000014C00000000003F70000201053
-:102F800000204411000000000000800000204811D3
-:102F9000000000000000FFFFC0481220000003FFF7
-:102FA000A780000000200811000000000000A00021
-:102FB00000200C110000000083000000006044119C
-:102FC0000000041200000000002044020000000085
-:102FD00000000000C02048000000000000000000C9
-:102FE000C0204800000000000000FFFFC0281220A1
-:102FF00000000000830000000020441100000000D9
-:103000000000000000304883000000008400000041
-:10301000002044110000000000000000C020480013
-:1030200000000000000000001D0000000000000083
-:103030008300000000604411000004120000000042
-:10304000C040040000000001A98000000020081119
-:10305000000000000000C00000400C11000003FA56
-:10306000AB80000000200811000000000000F8E024
-:1030700000400C11000003FAAD8000000020081190
-:10308000000000000000F88000400C11000003FA6E
-:10309000B380000000200811000000000000F3FCD5
-:1030A00000400C11000003FAAF800000002008115E
-:1030B000000000000000E00000400C11000003FAD6
-:1030C000B180000000200811000000000000F000A6
-:1030D00000400C11000003FA83000000002044119E
-:1030E00000000000000021480020481100000000FE
-:1030F00084000000002044110000000000000000D7
-:10310000C020480000000000000000001D0000007A
-:10311000000000000000000000800000000000002F
-:1031200001182000C0304620000000000000000010
-:10313000D90048000000000000000000C02004008A
-:10314000000000000000000000A0000A00000000D5
-:103150000218A000C030462000000000000000005F
-:10316000D90048000000000000000000C02004005A
-:10317000000000000000000000A0000A00000000A5
-:103180000318C000C030462000000000000000000E
-:10319000D90048000000000000000000C02004002A
-:1031A000000000000000000000A0000A0000000075
-:1031B0000418F8E0C03046200000000000000000C5
-:1031C000D90048000000000000000000C0200400FA
-:1031D000000000000000000000A0000A0000000045
-:1031E0000518F880C03046200000000000000000F4
-:1031F000D90048000000000000000000C0200400CA
-:10320000000000000000000000A0000A0000000014
-:103210000618E000C030462000000000000000005A
-:10322000D90048000000000000000000C020040099
-:10323000000000000000000000A0000A00000000E4
-:103240000718F000C0304620000000000000000019
-:10325000D90048000000000000000000C020040069
-:10326000000000000000000000A0000A00000000B4
-:103270000818F3FCC03046200000000000000000E9
-:10328000D90048000000000000000000C020040039
-:10329000000000000000000000A0000A0000000084
-:1032A0000000003000200A2D000000000000000097
-:1032B000C0290C4000000000000000300020362330
-:1032C0000000000000000000C0200400000000001A
-:1032D0000000000000A0000A0000000086000000BE
-:1032E00000204411000000000000000000404801E0
-:1032F0000000000085000000C02044110000000014
-:103300000000000000404801000000000000217C97
-:10331000002044110000000000000018402102209D
-:10332000000000000000000014C000000000044580
-:1033300000800000C0494A20000004460000000050
-:10334000C02048000000000000000000C02048002D
-:103350000000000000000000C02048000000000045
-:103360008100000000204411000000000000000166
-:10337000002048110000000000000000C0200800EC
-:103380000000000000000000170000000000000026
-:103390000004217F006044110000068D0000001F22
-:1033A00000210230000000000000000014C00000F6
-:1033B000000000000000000000404C020000044B30
-:1033C00000000000C0200C00000000000000000011
-:1033D000C02010000000000000000000C020140009
-:1033E0000000000000000000C020180000000000E5
-:1033F00000000000C0201C000000000000007F0052
-:1034000000280A210000000000004500002F0222D1
-:1034100000000000000000000CE000000000045963
-:1034200000000000C020200000000000000000009C
-:1034300017000000000000000000001000280A2310
-:103440000000000000000010002F02220000000019
-:10345000000000000CE0000000000461810000009A
-:10346000002044110000000000000001002048116D
-:103470000000000000040000006946240000068DE2
-:103480000000000000400000000004668100000011
-:10349000002044110000000000000000002048113E
-:1034A000000000000000216D002044110000000019
-:1034B00000000000002048040000000000000000A0
-:1034C000006048050000069200000000002824F07B
-:1034D000000000000000000700280A230000000090
-:1034E00000000001002F0222000000000000000088
-:1034F0000AE000000000046D00000000002F00C979
-:10350000000000000000000004E00000000004864D
-:1035100000000000004000000000049300000002D2
-:10352000002F022200000000000000000AE000005E
-:103530000000047200000000002F00C9000000001D
-:103540000000000002E0000000000486000000000F
-:10355000004000000000049300000003002F02223E
-:1035600000000000000000000AE0000000000477F6
-:1035700000000000002F00C9000000000000000053
-:103580000CE0000000000486000000000040000085
-:103590000000049300000004002F0222000000003D
-:1035A000000000000AE000000000047C00000000B1
-:1035B000002F00C900000000000000000AE0000029
-:1035C000000004860000000000400000000004939A
-:1035D00000000005002F0222000000000000000093
-:1035E0000AE000000000048100000000002F00C974
-:1035F000000000000000000006E00000000004865B
-:1036000000000000004000000000049300000006DD
-:10361000002F022200000000000000000AE000006D
-:103620000000048600000000002F00C90000000018
-:103630000000000008E00000000004860000000018
-:10364000004000000000049300007F0000280A21D1
-:103650000000000000004500002F022200000000D2
-:10366000000000000AE00000000000000000000868
-:1036700000210A23000000000000000014C0000028
-:1036800000000490000021690020441100000000A7
-:1036900000000000C0204800000000000000000002
-:1036A000C02048000000000000000000C0204800CA
-:1036B00000000000CAFEBABE004048110000000031
-:1036C00000000000C02044000000000000000000D6
-:1036D000C02000000000000000000000C0404800C2
-:1036E0000000000000007F0000280A210000000008
-:1036F00000004500002F0222000000000000000032
-:103700000AE000000000049900000000C020000052
-:103710000000000000000000C020000000000000C9
-:1037200000000000C0400000000000000000000099
-:1037300000404C080000045900000000C0200800B0
-:10374000000000000000001040210E2000000000DA
-:1037500000000011402112200000000000000012B3
-:1037600040211620000000000000216900204411C3
-:1037700000000000000000000020480200000000DF
-:1037800000000000002102250000000000000000F1
-:1037900014E00000000004A300040000C0494A2017
-:1037A000000004A4FFFBFFFFC0284A200000000027
-:1037B00000000000002102230000000000000000C3
-:1037C00014E00000000004B000000000C020480029
-:1037D0000000000000000000C020480000000000C1
-:1037E0000000000000210224000000000000000092
-:1037F00014C00000000000008100000000204411FF
-:10380000000000000000000C002048110000000033
-:103810000000000000200010000000000000000078
-:1038200014C00000000004ACA000000000204411FF
-:1038300000000000CAFEBABE0040481100000000AF
-:10384000810000000020441100000000000000047E
-:1038500000204811000000000000216B00204411EE
-:103860000000000000000000C02048100000000020
-:10387000810000000020441100000000000000054D
-:1038800000204811000000000000216C00204411BD
-:103890000000000000000000C020481000000000F0
-:1038A00000000000002F02240000000000000000C3
-:1038B0000CE00000000000000000000000400000DC
-:1038C000000004AA00000000C0210A20000000003F
-:1038D0000000000014C00000000004C381000000CC
-:1038E00000204411000000000000000000204811EA
-:1038F000000000000000216D0020441100000000C5
-:1039000000000000C020480000000000000000008F
-:10391000C060480000000692000000000040000067
-:10392000000004C7810000000020441100000000D6
-:103930000000000100204811000000000004000009
-:10394000C02946200000000000000000C060000008
-:103950000000068D0000000100210222000000008E
-:103960000000000014C00000000004CE0000216927
-:10397000002044110000000000000000C0204800AA
-:103980000000000000000000C0204800000000000F
-:10399000000000000020481000000000CAFEBABE6F
-:1039A000004048110000000000000000C02044005A
-:1039B0000000000000000000C040481000000000AF
-:1039C0008100000000204411000000000000000100
-:1039D0000020481100000000000021F800204411E0
-:1039E000000000000000000E002048110000000050
-:1039F000000421F9006044110000068D0000000061
-:103A000000210230000000000000000014C000008F
-:103A1000000004D0000021800020441100000000BC
-:103A200000000000C020480000000000000000006E
-:103A3000C02000000000000000000000C02048007E
-:103A40000000000000000000C02000000000000096
-:103A500000000000C040480000000000000000031B
-:103A600000333E2F00000000000000010021022171
-:103A7000000000000000000014E00000000005004D
-:103A80000000002C00200A2D0000000000040000AF
-:103A900018E00C11000004EF0000000100333E2F7D
-:103AA0000000000000002169002044110000000017
-:103AB000000000000020480200000000000000009C
-:103AC00000204803000000000000000800300A2227
-:103AD0000000000000000000C020480000000000BE
-:103AE00000000000C0204800000000000000216924
-:103AF00000204411000000000000000000204802E7
-:103B0000000000000000000000204803000000004A
-:103B10000000000800300A22000000000000000041
-:103B2000C02048000000000000000000D8C048008D
-:103B3000000004E30000216900204411000000009F
-:103B4000000000000020480200000000000000000B
-:103B500000204803000000000000000800300A2296
-:103B60000000000000000000C0204800000000002D
-:103B700000000000C0204800000000000000002DF0
-:103B80000020122D000000000000000000290C831E
-:103B90000000000000002169002044110000000026
-:103BA00000000000002048020000000000000000AB
-:103BB00000204803000000000000000800300A2236
-:103BC0000000000000000000C020480000000000CD
-:103BD00000000000C02048000000000000000011AC
-:103BE00000210224000000000000000014C00000BA
-:103BF000000000000000000000400000000004AAD7
-:103C00000000002CC0203620000000000000002D25
-:103C1000C0403620000000000000000F00210221FB
-:103C2000000000000000000014C0000000000505B6
-:103C300000000000006000000000000B0000000019
-:103C4000D90000000000000000000000C040040097
-:103C500000000001B5000000002044110000000039
-:103C6000000020000020481100000000B600000005
-:103C700000204411000000000000A00000204811B6
-:103C800000000000B7000000002044110000000008
-:103C90000000C0000020481100000000B800000033
-:103CA00000204411000000000000F8E0002048114E
-:103CB00000000000B90000000020441100000000D6
-:103CC0000000F8800020481100000000BA00000049
-:103CD00000204411000000000000E0000020481116
-:103CE00000000000BB0000000020441100000000A4
-:103CF0000000F0000020481100000000BC0000009F
-:103D000000204411000000000000F3FC00204811D6
-:103D100000000000810000000020441100000000AD
-:103D2000000000020020481100000000000000FF19
-:103D300000280E300000000000000000002F0223C9
-:103D400000000000000000000CC000000000051989
-:103D500000000000C020080000000000000000007B
-:103D600014C000000000052E0000000000200C110F
-:103D7000000000000000001C0020362300000000AE
-:103D80000000002B00203623000000000000002966
-:103D90000020362300000000000000280020362309
-:103DA0000000000000000017002036230000000083
-:103DB000000000250020362300000000000000263F
-:103DC00000203623000000000000001500203623EC
-:103DD0000000000000000016002036230000000054
-:103DE000FFFFE00000200C11000000000000002197
-:103DF00000203623000000000000002200203623AF
-:103E00000000000000001FFF00200C110000000057
-:103E100000000023002036230000000000000024E2
-:103E20000020362300000000F1FFFFFF00283A2E9B
-:103E3000000000000000001AC0220E200000000058
-:103E4000000000000029386E000000008100000022
-:103E5000002044110000000000000006002048116E
-:103E6000000000000000002A402036200000000072
-:103E70008700000000204411000000000000000046
-:103E8000C0204800000000000000A1F40020441100
-:103E900000000000000000000020481000000000AA
-:103EA0000000000000200C110000000000000030A5
-:103EB00000203623000000009D0000000020441177
-:103EC000000000000000001F40214A200000000008
-:103ED00096000000002044110000000000000000D7
-:103EE000C02048000000000000000000C0200C00BE
-:103EF0000000000000000000C020100000000000D2
-:103F00000000001F00211624000000000000000037
-:103F100014C00000000000000000001D0020362337
-:103F2000000000000000000300281E230000000025
-:103F3000000000080022222300000000FFFFF00024
-:103F4000002822280000000000000000002920E8CE
-:103F5000000000000000001F0020362800000000C4
-:103F60000000001800211E230000000000000020B7
-:103F70000020362700000000000000020022162466
-:103F80000000000000000000003014A80000000045
-:103F90000000001E00203625000000000000000385
-:103FA00000211A24000000001000000000281A263A
-:103FB00000000000EFFFFFFF00283A2E0000000085
-:103FC00000000000004938CE0000067B0000000120
-:103FD00040280A20000000000000000640280E20B3
-:103FE0000000000000000300C028122000000000B4
-:103FF0000000000800211224000000000000000062
-:10400000C02016200000000000000000C0201A2080
-:10401000000000000000000000210222000000005B
-:104020000000000014C000000000056681000000D0
-:104030000020441100000000000000010020481191
-:10404000000000000000225800300A240000000098
-:1040500000040000006946220000068D000021696E
-:10406000002044110000000000000000002048056E
-:10407000000000000002000000294A2600000000A5
-:10408000000000000020481000000000CAFEBABE78
-:10409000002048110000000000000002002F022351
-:1040A00000000000000000000CC000000000056ED1
-:1040B00000000000C0201C100000000000000000F4
-:1040C000C04000000000057C00000002002F022319
-:1040D00000000000000000000CC000000000056EA1
-:1040E00081000000002044110000000000000001D9
-:1040F00000204811000000000000225800300A246F
-:104100000000000000040000006946220000068D47
-:1041100000000000C0201C10000000000000000093
-:10412000C04000000000057C00000000002F0223BA
-:1041300000000000000000000CC00000000005723C
-:1041400000000000C0201C00000000000000000073
-:10415000C04000000000057C00000004002F022386
-:1041600000000000000000000CC000000000057A04
-:104170008100000000204411000000000000000049
-:1041800000204811000000000000216D00204411B3
-:104190000000000000000000C020480000000000F7
-:1041A00000000000C060480000000692000000000F
-:1041B00000401C100000057C00000000C020000032
-:1041C0000000000000000000C040000000000000EF
-:1041D000000000000EE000000000057E000000006E
-:1041E00000600000000005C900000000002F02244C
-:1041F00000000000000000000CC000000000058F5F
-:104200000000A2B7002044110000000000000000E0
-:104210000020480700000000810000000020441139
-:104220000000000000000001002048110000000014
-:104230000004A2B6006044110000068D0000001AC0
-:10424000002122300000000000000006002226307D
-:104250000000000000042004006044110000068DEE
-:104260000000A2C400204411000000000000000073
-:10427000003048E9000000000000000000E00000FD
-:104280000000058D0000A2D10020441100000000B4
-:104290000000000000404808000000000000A2D11B
-:1042A00000204411000000000000000100504A28D6
-:1042B0000000000000000001002F022400000000A8
-:1042C000000000000CC00000000005A00000A2BB20
-:1042D00000204411000000000000000000204807FA
-:1042E00000000000810000000020441100000000D8
-:1042F0000000000100204811000000000004A2BAE4
-:10430000006044110000068D0000001A00212230D8
-:10431000000000000000000600222630000000001F
-:1043200000042004006044110000068D0000A2C5B6
-:10433000002044110000000000000000003048E9A7
-:10434000000000000000000000E000000000059EEA
-:104350000000A2D200204411000000000000000074
-:1043600000404808000000000000A2D200204411D4
-:10437000000000000000000100504A28000000007A
-:1043800000000002002F02240000000000000000D6
-:104390000CC00000000005B10000A2BF00204411C5
-:1043A000000000000000000000204807000000009E
-:1043B0008100000000204411000000000000000106
-:1043C00000204811000000000004A2BE006044115B
-:1043D0000000068D0000001A0021223000000000BD
-:1043E0000000000600222630000000000004200427
-:1043F000006044110000068D0000A2C60020441198
-:104400000000000000000000003048E9000000004B
-:104410000000000000E00000000005AF0000A2D393
-:104420000020441100000000000000000040480887
-:10443000000000000000A2D3002044110000000092
-:104440000000000100504A28000000000000A2C344
-:104450000020441100000000000000000020480778
-:104460000000000081000000002044110000000056
-:104470000000000100204811000000000004A2C25A
-:10448000006044110000068D0000001A0021223057
-:10449000000000000000000600222630000000009E
-:1044A00000042004006044110000068D0000A2C733
-:1044B000002044110000000000000000003048E926
-:1044C000000000000000000000E00000000005BE49
-:1044D0000000A2D4002044110000000000000000F1
-:1044E00000404808000000000000A2D40020441151
-:1044F000000000000000000100504A2800000000F9
-:1045000085000000002044110000000000000000B1
-:1045100000204801000000000000304A0020441143
-:104520000000000001000000002048110000000011
-:104530000000000000400000000005C4A4000000CE
-:10454000C02044110000000000000000C0404800EE
-:104550000000000000000000C0600000000005C96D
-:1045600000000000C0400400000000010000002C1A
-:1045700000203621000000008100000000204411CE
-:1045800000000000000000060020481100000000AC
-:1045900000000000002F02300000000000000000BA
-:1045A0000CC00000000005D0000000000020041135
-:1045B000000000000000003000403621000005E34C
-:1045C000000000300020062D0000000000007E00EA
-:1045D000002806210000000000000000002F02213A
-:1045E00000000000000000000CE00000000005E3F7
-:1045F00081000000002044110000000000000001C4
-:1046000000204811000000000004A0920060441146
-:104610000000068D00000031002036300000000050
-:104620000004A093006044110000068D00000032D9
-:1046300000203630000000000004A2B600604411E3
-:104640000000068D0000003300203630000000001E
-:104650000004A2BA006044110000068D000000347E
-:1046600000203630000000000004A2BE00604411AB
-:104670000000068D000000350020363000000000EC
-:104680000004A2C2006044110000068D0000003644
-:1046900000203630000000000004200400604411B7
-:1046A0000000068D0001A2A40020441100000000BB
-:1046B0000000003F00204811000000000000003F03
-:1046C00000204811000000000000003F00204811B9
-:1046D000000000000000003F002048110000000022
-:1046E0000000000500204811000000000000A1F4B7
-:1046F00000204411000000000000000000204811CC
-:1047000000000000880000000020441100000000AC
-:10471000000000010020481100000000810000009E
-:104720000020441100000000000000060020481195
-:104730000000000000000001002F02300000000017
-:10474000000000000CE000000000062C000000301B
-:104750000020062D0000000000000000002F0221B4
-:1047600000000000000000000CE000000000062C2B
-:104770008100000000204411000000000000000142
-:10478000002048110000000000007E0000280621E3
-:104790000000000000000000002F022100000000C7
-:1047A000000000000CE00000000006050000A092E0
-:1047B00000204411000000000000003100204A2DBC
-:1047C000000000000000A093002044110000000041
-:1047D0000000003200204A2D000000000000A2B6B8
-:1047E00000204411000000000000003300204A2D8A
-:1047F000000000000000A2BA0020441100000000E8
-:104800000000003400204A2D000000000000A2BE7D
-:1048100000204411000000000000003500204A2D57
-:10482000000000000000A2C20020441100000000AF
-:104830000000003600204A2D00000000000000307B
-:104840000020062D00000000000001FF00280621C6
-:104850000000000000000000002F02210000000006
-:10486000000000000CE000000000062B000000002B
-:1048700000210221000000000000000014C0000020
-:104880000000060E0004A003006044110000068D25
-:104890000000A00300204411000000000000000000
-:1048A0000020481000000000000000010021062147
-:1048B000000000000000000014C00000000006130B
-:1048C0000004A010006044110000068D0000A0103C
-:1048D00000204411000000000000000000204810EB
-:1048E000000000000000000100210621000000007F
-:1048F00000000000002F0221000000000000000066
-:104900000CE000000000062B0004A0110060441120
-:104910000000068D0000A0110020441100000000DE
-:104920000000000000204810000000000004A01259
-:10493000006044110000068D0000A0120020441108
-:1049400000000000000000000020481000000000EF
-:104950000004A013006044110000068D0000A013A5
-:10496000002044110000000000000000002048105A
-:10497000000000000004A014006044110000068D37
-:104980000000A014002044110000000000000000FE
-:1049900000204810000000000004A0150060441131
-:1049A0000000068D0000A01500204411000000004A
-:1049B0000000000000204810000000000004A016C5
-:1049C000006044110000068D0000A0160020441174
-:1049D000000000000000000000204810000000005F
-:1049E0000004A017006044110000068D0000A0170D
-:1049F00000204411000000000000000000204810CA
-:104A00000000000000042004006044110000068D36
-:104A10000000002C0080062D00000000FF000000B8
-:104A20000020441100000000000000000020481198
-:104A300000000000000000010020481100000000FC
-:104A4000000000020080481100000000000000008B
-:104A50000EE000000000063D000000300020062DA2
-:104A600000000000000000020028062100000000F5
-:104A700000000000002F02210000000000000000E4
-:104A80000CE000000000063B810000000020441103
-:104A9000000000000000000100204811000000009C
-:104AA00000042004006044110000068D0000100086
-:104AB00000200811000000000000002B002036221A
-:104AC000000000000000000000600000000006413F
-:104AD0000000000000600000000005C99800000010
-:104AE0000020441100000000000000000080481178
-:104AF0000000000000000000C0600000000006414F
-:104B000000000000C0400400000000010000A2A45A
-:104B10000020441100000000000000220020481185
-:104B20000000000089000000002044110000000087
-:104B300000000001004048110000062D9700000011
-:104B40000020441100000000000000000020481177
-:104B5000000000008A000000002044110000000056
-:104B600000000000004048110000062D0000000079
-:104B7000006000000000065C0000201000204411CE
-:104B8000000000000000800000204811000000002C
-:104B90000001A2A4C0204411000000000000001683
-:104BA000006048110000036E000020100020441136
-:104BB000000000000001000000204811000000007B
-:104BC00081000000002044110000000000000001EE
-:104BD00000204811000000000000217C002044114A
-:104BE00000000000098000000020481100000000C3
-:104BF000FFFFFFFF00204811000000000000000040
-:104C00000020481100000000000000001700000014
-:104C1000000000000004217F006044110000068DA8
-:104C20000000001F00210230000000000000000012
-:104C300014C00000000000000000000400404C11FF
-:104C400000000656000000000040000000000000C8
-:104C50000000001700201E2D0000000000000004CE
-:104C600000291E27000000000000001700803627E2
-:104C7000000000000000001700201E2D00000000B2
-:104C8000FFFFFFFB00281E270000000000000017A8
-:104C900000803627000000000000001700201E2DB5
-:104CA000000000000000000800291E27000000008E
-:104CB00000000017008036270000000000000017E9
-:104CC00000201E2D00000000FFFFFFF700281E2718
-:104CD00000000000000000170080362700000000E0
-:104CE000000020100020441100000000000080009F
-:104CF00000204811000000000001A2A4002044117F
-:104D00000000000000000016006048110000036E63
-:104D100000002010002044110000000000010000ED
-:104D200000204811000000000000217C00204411F8
-:104D30000000000001800000002048110000000079
-:104D4000FFFFFFFF002048110000000000000000EE
-:104D500000204811000000000000000017000000C3
-:104D6000000000008100000000204411000000004D
-:104D70000000000100204811000000000004217F15
-:104D8000006044110000068D0000001F0021023069
-:104D9000000000000000000014C000000000068CAD
-:104DA0000000001000404C110000067200000000DE
-:104DB000C0200400000000000000000038C0000017
-:104DC000000000000000001D00200A2D000000006F
-:104DD0000000001E00200E2D000000000000001F3B
-:104DE0000020122D00000000000000200020162DE1
-:104DF00000000000000021690020441100000000B4
-:104E00000000000000204804000000000000000036
-:104E100000204805000000000000000000204801BC
-:104E200000000000CAFEBABE0020481100000000C9
-:104E30000000000400301224000000000000000008
-:104E4000002F006400000000000000000CC0000003
-:104E50000000068B0000000300281A22000000005A
-:104E6000000000080022122200000000FFFFF000F6
-:104E7000002812240000000000000000002910C4D7
-:104E8000000000000000001F004036240000000069
-:104E90000000000000800000000000000000000092
-:104EA0001AC000000000068D9F0000000020441181
-:104EB00000000000CAFEBABE002048110000000039
-:104EC000000000001AE00000000006900000000052
-:104ED0000080000000000000000000001AC0000078
-:104EE000000006929E000000002044110000000017
-:104EF000CAFEBABE002048110000000000000000F9
-:104F00001AE000000000069500000000008000008C
-:104F10000000000000000000006000000000000B26
-:104F200000001000006004110000031500000000E4
-:104F300000200411000000000000000000600811C3
-:104F4000000001B20000225C0020441100000000BB
-:104F5000000000030020481100000000000022565D
-:104F600000204411000000000000001B0020481138
-:104F7000000000000000A1FC00204411000000001F
-:104F80000000000100204811000000000001A1FD08
-:104F9000C0204411000000000000002100201E2D50
-:104FA000000000000000001000221E27000000008A
-:104FB000000000240020222D000000000000FFFF60
-:104FC00000282228000000000000000000294907F6
-:104FD0000000000000000000002048110000000058
-:104FE000000000220020222D000000000000FFFF32
-:104FF00000282228000000000000000000294907C6
-:105000000000000000000000002048110000000027
-:105010000000002300201E2D0000000000000010F2
-:1050200000221E27000000000000000000294907A0
-:1050300000000000000000000040481100000000D7
-:105040000000000000000000000000000000000060
-:105050000000000000000000000000000000000050
-:105060000000000000000000000000000000000040
-:105070000000000000000000000000000000000030
-:105080000000000000000000000000000000000020
-:105090000000000000000000000000000000000010
-:1050A0000000000000000000000000000000000000
-:1050B00000000000000000000000000000000000F0
-:1050C00000000000000000000000000000000000E0
-:1050D00000000000000000000000000000000000D0
-:1050E00000000000000000000000000000000000C0
-:1050F00000000000000000000000000000000000B0
-:10510000000000000000000000000000000000009F
-:10511000000000000000000000000000000000008F
-:10512000000000000000000000000000000000007F
-:10513000000000000000000000000000000000006F
-:10514000000000000000000000000000000000005F
-:10515000000000000000000000000000000000004F
-:10516000000000000000000000000000000000003F
-:10517000000000000000000000000000000000002F
-:10518000000000000000000000000000000000001F
-:10519000000000000000000000000000000000000F
-:1051A00000000000000000000000000000000000FF
-:1051B00000000000000000000000000000000000EF
-:1051C00000000000000000000000000000000000DF
-:1051D00000000000000000000000000000000000CF
-:1051E00000000000000000000000000000000000BF
-:1051F00000000000000000000000000000000000AF
-:10520000000000000000000000000000000000009E
-:10521000000000000000000000000000000000008E
-:10522000000000000000000000000000000000007E
-:10523000000000000000000000000000000000006E
-:10524000000000000000000000000000000000005E
-:10525000000000000000000000000000000000004E
-:10526000000000000000000000000000000000003E
-:10527000000000000000000000000000000000002E
-:10528000000000000000000000000000000000001E
-:10529000000000000000000000000000000000000E
-:1052A00000000000000000000000000000000000FE
-:1052B0000142050205C002500000000001C3016860
-:1052C000043F05C000000000022502090250015100
-:1052D000000000000223024502A00241000000007D
-:1052E00003D705C005C005C0000000000649064AF6
-:1052F000031F05C00000000005C005C503200340D2
-:1053000000000000032A0282034203340000000070
-:1053100005C005C005C005C00000000005C005515E
-:1053200005C005C00000000003BA05C004BB03446B
-:1053300000000000049A0450043D05C00000000075
-:1053400004D005C0044104DD00000000045005073E
-:10535000035103750000000005C005C005C005C06D
-:105360000000000005C005C005C005C00000000029
-:1053700005C005C0063F05C70000000005C005C008
-:10538000000705C00000000005C005C005C005C03D
-:105390000000000005C005C005C005C000000000F9
-:1053A00003F803ED0408040600000000040E040ADC
-:1053B000040C041000000000041C04180424042041
-:1053C00000000000042C0428043404300000000015
-:1053D00005C005C0043805C00000000005C005C0B8
-:1053E00005C005C00000000005C005C005C005C01F
-:1053F0000000000000020679069700060000000089
-:00000001FF
diff --git a/firmware/radeon/RV620_pfp.bin.ihex b/firmware/radeon/RV620_pfp.bin.ihex
deleted file mode 100644
index f55292c97b79..000000000000
--- a/firmware/radeon/RV620_pfp.bin.ihex
+++ /dev/null
@@ -1,145 +0,0 @@
-:1000000000CA040000A00000007E828B007C038BED
-:10001000008001B8007C038B00D4401E00EE001E5F
-:1000200000CA040000A00000007E828B00C41838C3
-:1000300000CA240000CA2800009581A800C41C3A08
-:1000400000C3C00000CA080000CA0C00007C744B4A
-:1000500000C200050099C00000C41C3A007C744C2A
-:1000600000C0FFF000042C0400309002007D250049
-:1000700000351402007D350B00255403007CD5802B
-:1000800000259C030095C00400D5001B007EDDC147
-:10009000007D9D8000D6801B00D5801B00D4401EB3
-:1000A00000D5401E00D6401E00D6801E00D4801E03
-:1000B00000D4C01E009783D300D5C01E00CA08001C
-:1000C0000080001A00CA0C0000E4011E00D4001ECB
-:1000D0000080000C00C4183800E4013E00D4001E6B
-:1000E0000080000C00C4183800D4401E00EE001E32
-:1000F00000CA040000A00000007E828B00E4011E04
-:1001000000D4001E00D4401E00EE001E00CA0400F1
-:1001100000A00000007E828B00E4013E00D4001E9F
-:1001200000D4401E00EE001E00CA040000A0000023
-:10013000007E828B00CA180000D4401E00D5801EAD
-:100140000080005300D4007500D4401E00CA08008F
-:1001500000CA0C0000CA100000D4801900D4C018D6
-:1001600000D5001700D4801E00D4C01E00D5001E8C
-:1001700000E2001E00CA040000A00000007E828B86
-:1001800000CA080000D4806000D4401E0080000037
-:1001900000D4801E00CA080000D4806100D4401E34
-:1001A0000080000000D4801E00CA080000CA0C00B5
-:1001B00000D4401E00D4801600D4C01600D4801E87
-:1001C000008001B800D4C01E00C6084300CA0C005D
-:1001D00000CA10000094800400CA140000E420F358
-:1001E00000D4201300D5606500D4E01C00D5201C8D
-:1001F00000D5601C008000000006200100C60843F6
-:1002000000CA0C0000CA1000009483F700CA140052
-:1002100000E420F30080007900D4201300C60843D6
-:1002200000CA0C0000CA1000009883EF00CA140036
-:1002300000D400640080008D0000000000C414326F
-:1002400000C6184300C4082F0095400500C40C30B8
-:1002500000D4401E0080000000EE001E009583F5D3
-:1002600000C4103100D4403300D5206500D4A01C58
-:1002700000D4E01C00D5201C00E4015E00D4001E68
-:10028000008000000006200100CA1800000A2001BA
-:1002900000D6007600C408360098800700C61045D6
-:1002A0000095011000D4001F00D46062008000009F
-:1002B00000D4206200CC383500CC1433008401BB5C
-:1002C00000D4007200D5401E0080000000EE001E29
-:1002D00000E2001A008401BB00E2001A00CC104BBF
-:1002E00000CC0447002C9401007D098B0098400548
-:1002F000007D15CB00D4001A008001B800D4006D39
-:100300000034440100CC0C480098403A00CC2C4A00
-:100310000095800400CC0449008001B800D4001A84
-:1003200000D4C01A00282801008400F000CC10037B
-:100330000098801B0004380C008400F000CC1003EF
-:100340000098801700043808008400F000CC1003E7
-:100350000098801300043804008400F000CC1003DF
-:100360000098801400CC104C009A800900CC144DE9
-:10037000009840DC00D4006D00CC184800D5001A6D
-:1003800000D5401A008000C900D5801A0096C0D55B
-:1003900000D4006D008001B800D4006E009AC00344
-:1003A00000D4006D00D4006E0080000000EC007FDF
-:1003B000009AC0CC00D4006D008001B800D4006E5B
-:1003C00000CC140300CC180300CC1C03007D910367
-:1003D000007DD583007D190C0035CC1F0035701FC2
-:1003E000007CF0CB007CD08B00880000007E8E8BE0
-:1003F0000095C00400D4006E008001B800D4001A3B
-:1004000000D4C01A00CC080300CC0C0300CC1003AD
-:1004100000CC140300CC180300CC1C0300CC240334
-:1004200000CC28030035C41F0036B01F007C704B81
-:100430000034F01F007C704B0035701F007C704B47
-:10044000007D8881007DCCC1007E5101007E9541F8
-:10045000007C9082007CD4C2007C848B009AC00314
-:10046000007C8C8B002C88010098809E00D4006D4D
-:100470000098409C00D4006E00CC084C00CC0C4D81
-:1004800000CC104800D4801A00D4C01A00800101AA
-:1004900000D5001A00CC083200D40032009482D972
-:1004A00000CA0C0000D4401E0080000000D4001ED2
-:1004B00000E4011E00D4001E00CA080000CA0C009F
-:1004C00000CA100000D4401E00CA140000D4801ED0
-:1004D00000D4C01E00D5001E00D5401E00D54034FB
-:1004E0000080000000EE001E0028040400E2001A54
-:1004F00000E2001A00D4401A00CA380000CC0803F9
-:1005000000CC0C0300CC0C0300CC0C03009882BD83
-:1005100000000000008401BB00D7A06F0080000035
-:1005200000EE001F00CA040000C2FF0000CC083427
-:1005300000C13FFF007C74CB007CC90B007D010F24
-:10054000009902B0007C738B008401BB00D7A06FC0
-:100550000080000000EE001F00CA080000281900FB
-:10056000007D898B009580140028140400CA0C00BB
-:1005700000CA100000CA1C0000CA240000E2001FCC
-:1005800000D4C01A00D5001A00D5401A00CC1803B8
-:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
-:1005A000007D9C4700984297000000000080016198
-:1005B00000D4C01A00D4401E00D4801E0080000069
-:1005C00000EE001E00E4011E00D4001E00D4401EF8
-:1005D00000EE001E00CA040000A00000007E828B16
-:1005E00000E4013E00D4001E00D4401E00EE001EB8
-:1005F00000CA040000A00000007E828B00CA080030
-:1006000000248C06000CCC060098C00600CC104ECE
-:100610000099000400D4007300E4011E00D4001E01
-:1006200000D4401E00D4801E0080000000EE001E9A
-:1006300000CA080000CA0C000034D01800251001C0
-:100640000095002100C17FFF00CA100000CA1400FD
-:1006500000CA180000D4801D00D4C01D007DB18BDD
-:1006600000C1420200C2C00100D5801D0034DC0E72
-:10067000007D5D4C007F734C00D7401E00D5001EEE
-:1006800000D5401E00C1420000C2C00000099C010C
-:100690000031DC10007F5F4C007F734C00042802A7
-:1006A000007D838000D5A86F00D5806600D7401EEE
-:1006B00000EC005E00C8240200C82402008001B8DB
-:1006C00000D6007600D4401E00D4801E00D4C01E88
-:1006D0000080000000EE001E0080000000EE001F01
-:1006E00000D4001F0080000000D4001F00D4001FB1
-:1006F0000088000000D4001F00000000000000007F
-:1007000000000000000000000000000000000000E9
-:1007100000000000000000000000000000000000D9
-:1007200000000000000000000000000000000000C9
-:1007300000000000000000000000000000000000B9
-:1007400000000000000000000000000000000000A9
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B0000000000000000000000000000000000039
-:1007C0000000000000000000000000000000000029
-:1007D0000000000000000000000000000000000019
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:1008000000010171000201780003008F0004007FE5
-:10081000000500030006003F000700320008012C1D
-:1008200000090046000A0036001001B6001700A2B9
-:100830000022013A00230149002000B400240125D0
-:100840000027004D0028006A002A0060002B00529B
-:10085000002F0065003200870034017F003C015604
-:10086000003F00720041018C0044012E00550173CD
-:100870000056017A0060000B00610034006200380D
-:1008800000630038006400380065003800660038F6
-:10089000006700380068003A00690041006A0048BB
-:1008A000006B0048006C0048006D0048006E004876
-:1008B000006F00480000000600000006000000066F
-:1008C0000000000600000006000000060000000610
-:1008D0000000000600000006000000060000000600
-:1008E00000000006000000060000000600000006F0
-:1008F00000000006000000060000000600000006E0
-:00000001FF
diff --git a/firmware/radeon/RV630_me.bin.ihex b/firmware/radeon/RV630_me.bin.ihex
deleted file mode 100644
index ba3a7e632d97..000000000000
--- a/firmware/radeon/RV630_me.bin.ihex
+++ /dev/null
@@ -1,1345 +0,0 @@
-:1000000000000000C020040000000000000000000C
-:1000100000A0000A000000000000FFFF00284621A9
-:100020000000000000000000D900480000000000AF
-:1000300000000000C02004000000000000000000DC
-:1000400000A0000A000000000000000000E0000026
-:100050000000000000010000C02946200000000050
-:1000600000000000D900480000000000000000006F
-:10007000C0200400000000000000000000A0000AF2
-:10008000000000008100000000204411000000007A
-:1000900000000001002048110000000000042004BE
-:1000A000006044110000068A0000000000600000AB
-:1000B0000000062E00000000006000000000064264
-:1000C00000000000C02008000000000000000F0039
-:1000D000002816220000000000000008002116255C
-:1000E000000000000000001800203625000000007D
-:1000F0008D000000002044110000000000000004FA
-:10010000002F022500000000000000000CE00000AD
-:1001100000000018004120000040481100000019B4
-:100120000042200000204811000000008E00000066
-:1001300000204411000000000000002800204A2D8B
-:1001400000000000900000000020441100000000AA
-:100150000000000000204805000000000000000C26
-:1001600000211622000000000000000300281625D0
-:10017000000000000000001900211A220000000009
-:100180000000000400281A26000000000000000003
-:10019000002914C5000000000000001900203625C9
-:1001A0000000000000000000003A140200000000FF
-:1001B00000000016002116250000000000000003CA
-:1001C00000281625000000000000001700200E2D5A
-:1001D00000000000FFFFFFFC00280E2300000000CD
-:1001E00000000000002914A3000000000000001718
-:1001F00000203625000000000000800000280E22AC
-:10020000000000000000000700220E230000000094
-:10021000000000000029386E0000000020000000EF
-:1002200000280E22000000000000000600210E231E
-:1002300000000000000000000029386E00000000EF
-:100240000000000000220222000000000000000068
-:1002500014E0000000000038000000002EE0000064
-:1002600000000035000000002CE000000000003716
-:100270000000000000400E2D0000003900000008C2
-:1002800000200E2D00000000000000090040122D8B
-:10029000000000460000000100400E2D0000003963
-:1002A00000000000C0200C0000000000003FFFFC28
-:1002B0000028122300000000000000020022122487
-:1002C000000000000000001F00211E2300000000AD
-:1002D0000000000014E000000000003E00000008E4
-:1002E00000401C11000000410000000D00201E2DE8
-:1002F000000000000000000F00281E270000000082
-:100300000000000300221E27000000007FC0000044
-:1003100000281A23000000000000001400211A2603
-:10032000000000000000000100331A260000000059
-:100330000000000800221A26000000000000000053
-:1003400000290CC700000000000000270020362410
-:100350000000000000007F000028122100000000C3
-:1003600000001400002F0224000000000000000024
-:100370000CE000000000004B0000000100290E23EB
-:10038000000000000000000E0020362300000000E6
-:100390000000E0000020441100000000FFF8000011
-:1003A00000294A230000000000000000003A2C024F
-:1003B000000000000000000200220E2B00000000E0
-:1003C000FC00000000280E23000000000000000FC9
-:1003D000002036230000000000001FFF00294A23F0
-:1003E000000000000000002700204A2D000000004F
-:1003F000000000000020481100000000000000295B
-:1004000000200E2D00000000060A020000294A23E9
-:100410000000000000000000002048110000000063
-:100420000000000000204811000000000000000152
-:1004300000210222000000000000000014E0000083
-:1004400000000061000000002EE000000000005FDE
-:10045000000000002CE000000000005E0000000032
-:1004600000400E2D000000620000000100400E2D33
-:10047000000000620000000A00200E2D00000000B5
-:100480000000000B0040122D0000006A0000000078
-:10049000C0200C0000000000003FFFFC00281223D9
-:1004A00000000000000000020022122400000000F2
-:1004B0007FC0000000281623000000000000001488
-:1004C0000021162500000000000000010033162561
-:1004D000000000008000000000280E230000000043
-:1004E0000000000000290CA3000000003FFFFC00FA
-:1004F00000290E23000000000000001F00211E2321
-:10050000000000000000000014E000000000006D8A
-:100510000000010000401C11000000700000000DF0
-:1005200000201E2D00000000000000F000281E2703
-:10053000000000000000000400221E270000000050
-:100540008100000000204411000000000000000DA8
-:100550000020481100000000FFFFF0FF00281A30C3
-:10056000000000000000A02800204411000000004E
-:1005700000000000002948E6000000000000A0186C
-:1005800000204411000000003FFFFFFF00284A2325
-:10059000000000000000A010002044110000000036
-:1005A00000000000002048040000000000000030AF
-:1005B0000020162D00000000000000020029162572
-:1005C0000000000000000030002036250000000080
-:1005D000000000250020162D000000000000000093
-:1005E000002F00A300000000000000000CC000006D
-:1005F00000000083000000260020162D00000000EF
-:1006000000000000002F00A4000000000000000017
-:100610000CC000000000008400000000004000004A
-:100620000000008A000000250020362300000000A2
-:100630000000002600203624000000000000001703
-:1006400000201E2D000000000000000200210227F3
-:10065000000000000000000014E000000000008A1C
-:1006600000000000006000000000066500000000BF
-:1006700000600000000006590000000200210E2268
-:10068000000000000000000014C000000000008D09
-:1006900000000012C040362000000093000000005F
-:1006A0002EE0000000000091000000002CE000009F
-:1006B000000000900000000200400E2D000000929B
-:1006C0000000000300400E2D000000920000000C0E
-:1006D00000200E2D00000000000000120020362334
-:1006E000000000000000000300210E2200000000B6
-:1006F0000000000014C00000000000980000A00CE2
-:10070000002044110000000000000000C02048004C
-:100710000000000000000000C0404800000000A0F1
-:100720000000A00C002044110000000000000000A8
-:100730000020481100000000000000002EE0000032
-:100740000000009E000000002CE000000000009D62
-:100750000000000200400E2D0000009F000000037A
-:1007600000400E2D0000009F0000000C00200E2D08
-:10077000000000000000000000204803000000000E
-:1007800000000000003A0C0200000000003F0000E2
-:1007900000280E23000000000000001000210E239E
-:1007A00000000000000000110020362300000000BF
-:1007B0000000001E0021022B0000000000000000CD
-:1007C00014C00000000000A700000016C020362062
-:1007D000000000000000001F0021022B00000000AC
-:1007E0000000000014C00000000000AA0000001576
-:1007F000C0203620000000000000000800210E2B61
-:10080000000000000000007F00280E230000000010
-:1008100000000000002F0223000000000000000084
-:100820000CE00000000000E10000000027000000D4
-:10083000000000000000000000600000000002A3B3
-:1008400000000001002F0223000000000000000053
-:100850000AE00000000000B300000000006000009B
-:100860000000013A81000000002044110000000057
-:100870000000000600204811000000000000000CED
-:1008800000221E300000000099800000002044116A
-:1008900000000000000000040020122D00000000F5
-:1008A00000000008002212240000000000000010D8
-:1008B00000201811000000000000000000291CE4C6
-:1008C0000000000000000000006048070000012F49
-:1008D0009B00000000204411000000000000000008
-:1008E00000204802000000009C000000002044118D
-:1008F00000000000000000000033146F0000000042
-:100900000000000100333E23000000000000000052
-:10091000D9004800000000000000000000203C0555
-:1009200000000000810000000020441100000000D1
-:100930000000000E00204811000000000000000030
-:1009400000201010000000000000E007002044110B
-:10095000000000000000000F0021022B000000003A
-:100960000000000014C00000000000CB00F8FF08E9
-:1009700000204811000000009800000000404811CD
-:10098000000000DC000000F000280E220000000043
-:10099000000000A0002F0223000000000000000063
-:1009A0000CC00000000000DA0000001100200E2D35
-:1009B0000000000000000001002F022300000000E2
-:1009C000000000000CE00000000000D50000000264
-:1009D000002F022300000000000000000CE00000D7
-:1009E000000000D400003F0000400C11000000D6C1
-:1009F00000001F0000400C11000000D600000F0096
-:100A000000200C11000000000038000900294A23D2
-:100A1000000000003F00000000280E2B0000000036
-:100A20000000000200220E2300000000000000076A
-:100A300000494A23000000DC00380F09002048115B
-:100A400000000000680000070020481100000000BE
-:100A50000000000800214A270000000000000000FC
-:100A60000020481100000000060A020000294A2464
-:100A700000000000000000000020481100000000FD
-:100A80000000000000204811000000000000A20249
-:100A9000002044110000000000FF000000280E228A
-:100AA000000000000000008000294A230000000030
-:100AB0000000002700200E2D00000000000000268E
-:100AC0000020122D0000000000000000002F008315
-:100AD00000000000000000000CE00000000000EA40
-:100AE00000000000006000000000065F0000000041
-:100AF00000400000000000EB00000000006000006B
-:100B000000000662000000070020222D0000000007
-:100B10000000000500220E2200000000001000006E
-:100B200000280E23000000000000000000292068BB
-:100B30000000000000000000003A0C02000000006D
-:100B4000000000EF00280E2300000000000000005D
-:100B500000292068000000000000001700200E2D72
-:100B6000000000000000000300210223000000003C
-:100B70000000000014E00000000000F80000000B7E
-:100B800000210228000000000000000014C0000046
-:100B9000000000F8000004000029222800000000E6
-:100BA0000000001400203628000000000000001C97
-:100BB00000210E22000000000000000014C0000010
-:100BC000000000FD0000A30C002044110000000004
-:100BD0000000000000204811000000000000001E7E
-:100BE00000210E22000000000000000014C00000E0
-:100BF0000000010B0000A30F0020441100000000C2
-:100C00000000001100200E2D000000000000000177
-:100C1000002F022300000000000000000CC00000B4
-:100C200000000104FFFFFFFF004048110000010B1E
-:100C300000000002002F022300000000000000005E
-:100C40000CC00000000001070000FFFF0040481139
-:100C50000000010B00000004002F02230000000030
-:100C6000000000000CC000000000010A000000FFAE
-:100C7000004048110000010B000000010020481155
-:100C8000000000000002C400002044110000000029
-:100C90000000001F00210E220000000000000000E4
-:100CA00014C00000000001120000001040210E20BE
-:100CB00000000000000000130020362300000000A8
-:100CC0000000001840224A20000000000000001030
-:100CD000C0424A20000001140000000000200C1156
-:100CE0000000000000000013002036230000000078
-:100CF000000000000020481100000000000000007B
-:100D000000204811000000000000000A002010111F
-:100D10000000000000000000002F0224000000007E
-:100D2000000000000CE000000000011B00000000BB
-:100D300000204811000000000000000100531224B0
-:100D400000000117FFBFFFFF00283A2E000000003F
-:100D50000000001B00210222000000000000000033
-:100D600014C000000000012E81000000002044118A
-:100D7000000000000000000D0020481100000000ED
-:100D80000000001800220E3000000000FC000000EF
-:100D900000280E2300000000810000000020441104
-:100DA000000000000000000E0020481100000000BC
-:100DB0000000000000201010000000000000E00E05
-:100DC000002044110000000007F8FF08002048112F
-:100DD000000000000000000000294A23000000007D
-:100DE0000000001C00201E2D000000000000000874
-:100DF00000214A27000000000000000000204811E8
-:100E000000000000060A020000294A240000000039
-:100E10000000000000204811000000000000000059
-:100E200000204811000000000000000000800000C9
-:100E300000000000810000000020441100000000BC
-:100E40000000000100204811000000000000217C8B
-:100E50000020441100000000008000000020481124
-:100E60000000000000000000002048060000000014
-:100E70000000000800214A270000000000000000D8
-:100E800017000000000000000004217F00604411F2
-:100E90000000068A0000001F002102300000000050
-:100EA0000000000014C000000000068900000004DB
-:100EB00000404C1100000135810000000020441169
-:100EC00000000000000000010020481100000000A8
-:100ED000000021F800204411000000000000001C68
-:100EE0000020481100000000000421F900604411B6
-:100EF0000000068A000000110021023000000000FE
-:100F00000000000014E000000000013C00000000B0
-:100F100000800000000000000000000000600000F1
-:100F20000000000B00000000006004110000031529
-:100F3000000000000020041100000000000000007C
-:100F400000600811000001B2000000000060000015
-:100F5000000001600000FFFF40280E20000000009C
-:100F600000000010C0211220000000000000FFFF60
-:100F7000402806200000000000000010C0210A20C8
-:100F800000000000000000000034146100000000B8
-:100F90000000000000741882000002BB0001A1FDE7
-:100FA00000604411000002E000003FFF002F022F0C
-:100FB00000000000000000000CC00000000001471D
-:100FC00000000000C040040000000001000000001C
-:100FD000006000000000000B000000000060041131
-:100FE00000000315000000000020041100000000B4
-:100FF0000000000000600811000001B200003FFF87
-:10100000002F022F00000000000000000CE0000094
-:10101000000000000000000000600000000001600F
-:101020000000001040210E20000000000000FFFF23
-:10103000C0281220000000000000001040211620EF
-:10104000000000000000FFFFC0681A20000002BB83
-:101050000001A1FD00604411000002E000003FFF1C
-:10106000002F022F00000000000000000CC0000054
-:101070000000015800000000C04004000000000112
-:101080000000225C0020441100000000000000016C
-:1010900000300A2F000000000000000100210A2299
-:1010A000000000000000000300384A220000000099
-:1010B0000000225600204411000000000000001A29
-:1010C00000204811000000000000A1FC0020441195
-:1010D0000000000000000001008048110000000036
-:1010E00000000000006000000000000B0000000095
-:1010F000006000000000018F0000000000600000A0
-:10110000000001A000003FFF002F022F00000000A0
-:10111000000000000CE000000000000000000000E3
-:1011200000202C0800000000000000000020241116
-:101130000000000000000000002028110000000056
-:10114000000022560020441100000000000000169C
-:1011500000204811000000000000225C0020441123
-:101160000000000000000003002048110000000003
-:1011700093800000002044110000000000000002E5
-:1011800000221E290000000000000000007048EB53
-:101190000000019C0000000000600000000002BB95
-:1011A00000000001403306200000000000000000A5
-:1011B000C03024090000000000003FFF002F022F74
-:1011C00000000000000000000CE000000000000033
-:1011D0000000000000600000000002A3000000000A
-:1011E000002F022100000000000000000AE00000C3
-:1011F0000000018100000000006000000000013AD2
-:101200000000000000400000000001869500000082
-:10121000002044110000000000000000002F022107
-:1012200000000000000000000CE00000000001864B
-:1012300000000000C0204800000000000000000185
-:10124000005306210000018292000000002044119A
-:101250000000000000000000C0604800000001978E
-:101260000001A1FD00204411000000000000001159
-:101270000020062D00000000000000000078042A75
-:10128000000002FB00000000002028090000000010
-:1012900000003FFF002F022F0000000000000000B0
-:1012A0000CC000000000017400000000C0400400F9
-:1012B000000000010000021000600411000003158E
-:1012C00000003FFF002F022F000000000000000080
-:1012D0000CE000000000019400000015C020362042
-:1012E0000000000000000016C020362000000000B2
-:1012F0003F800000002004110000000046000000B4
-:1013000000600811000001B2000000000080000031
-:10131000000000000000A1FC0020441100000000BB
-:1013200000003FFF002F022F00000000000000001F
-:101330000CC000000000019B00000001008048116B
-:1013400000000000000000210080481100000000A3
-:101350000000FFFF40280E200000000000000010E9
-:10136000C0211220000000000000FFFF40281620CE
-:101370000000000000000010C0811A2000000000E2
-:101380008100000000204411000000000000000661
-:1013900000204811000000000000000800221E305C
-:1013A000000000000000002900201A2D00000000AD
-:1013B0000000E0000020441100000000FFFBFF09D6
-:1013C00000204811000000000000000F0020222D26
-:1013D0000000000000001FFF00294A280000000054
-:1013E000000000060020222D000000000000000088
-:1013F000002920E80000000000000000002048084C
-:101400000000000000000000002048110000000063
-:10141000060A020000294A26000000000000000021
-:1014200000204811000000000000000000204811CA
-:101430000000000000000100002018110000000062
-:101440000000000800621E280000012F00000008B4
-:1014500000822228000000000002C0000020441189
-:10146000000000000000001500600E2D000001BD0E
-:101470000000001600600E2D000001BD0000C00835
-:1014800000204411000000000000001700200E2D75
-:10149000000000000000000014C00000000001B9BE
-:1014A0000000000000200411000000000000000007
-:1014B0000020480100000000390000000020481111
-:1014C00000000000000000000020481100000000A3
-:1014D000000000000080480200000000000000182A
-:1014E00000202E2D0000000000000000003B0D63D6
-:1014F000000000000000000800224A230000000055
-:101500000000001000224A23000000000000001824
-:1015100000224A2300000000000000000080480371
-:101520000000000000000000006000000000000B50
-:10153000000010000060041100000315000000000E
-:1015400000200411000000000000000000600811ED
-:10155000000001B2000000070021062F000000007B
-:101560000000001300200A2D000000000000000110
-:1015700000202C11000000000000FFFF4028222066
-:10158000000000000000000F0026222800000000DC
-:101590000000001040212620000000000000000F85
-:1015A000002626290000000000000000002028027C
-:1015B000000000000000225600204411000000003E
-:1015C0000000001B00204811000000000000000087
-:1015D000002F022100000000000000000CE00000CD
-:1015E000000001E00000225C002044110000000027
-:1015F0000000008100204811000000000000A1FC54
-:1016000000204411000000000000000100204811EB
-:10161000000000000000008000201C1100000000FD
-:1016200000000000002F0227000000000000000062
-:101630000CE00000000001DC000000000060000081
-:10164000000001E90000000100531E27000001D83E
-:101650000000000100202C11000000000000001F0D
-:1016600000280A22000000000000001F00282A2A8B
-:10167000000000000000000100530621000001D11D
-:101680000000225C00204411000000000000000265
-:1016900000304A2F000000000000A1FC002044118F
-:1016A00000000000000000010020481100000000C0
-:1016B0000000000100301E2F0000000000000000AC
-:1016C000002F022700000000000000000CE00000D6
-:1016D000000000000000000000600000000001E9C0
-:1016E0000000000100531E27000001E50000FFFF7D
-:1016F00040280E20000000000000000F00260E23EE
-:101700000000000000000010C021122000000000B6
-:101710000000000F0026122400000000000000005E
-:1017200000201411000000000000000000601811EB
-:10173000000002BB0001A1FD0020441100000000D8
-:1017400000000000002F022B00000000000000003D
-:101750000CE00000000001F8000000100022162834
-:1017600000000000FFFF0000002816250000000018
-:101770000000FFFF00281A29000000000000000000
-:10178000002948C500000000000000000020480AB1
-:10179000000000000000000000202C1100000000EC
-:1017A000000000100022162300000000FFFF0000D0
-:1017B00000281625000000000000FFFF00281A2462
-:1017C0000000000000000000002948C500000000E3
-:1017D0000000000000731503000002050000000077
-:1017E0000020180500000000000000000073152410
-:1017F0000000020500000000002D14C500000000DC
-:1018000000000000003008A20000000000000000FE
-:101810000020480200000000000000000020280214
-:101820000000000000000000002020030000000075
-:101830000000000000802404000000000000000FF1
-:1018400000210225000000000000000014C000007C
-:101850000000068900000000002B140500000000B5
-:1018600000000001009016250000000000000000AC
-:10187000006000000000000B000000000060041188
-:10188000000003150000000000200411000000000B
-:101890000000000000600811000001B200002256A4
-:1018A00000204411000000000000001A00294A2214
-:1018B0000000000000000000C02000000000000048
-:1018C00000003FFF002F022F00000000000000007A
-:1018D0000CE000000000000000000000C020040038
-:1018E000000000000000225C002044110000000005
-:1018F0000000000300384A21000000000000A1FCA5
-:1019000000204411000000000000000100204811E8
-:10191000000000000000FFFF40281220000000002F
-:1019200000000010C0211A20000000000000FFFF8E
-:1019300040280E200000000000000010C0211620EA
-:10194000000000000000000000741465000002BBED
-:101950000001A1FD00604411000002E00000000150
-:10196000003306210000000000000000002F0221CB
-:1019700000000000000000000CC000000000021980
-:1019800000003FFF002F022F0000000000000000B9
-:101990000CC000000000021200000000C040040063
-:1019A000000000010000000000600000000006428E
-:1019B000000000000040040F0000021300000000BF
-:1019C000006000000000062E000000000060000023
-:1019D0000000064200000210006004110000031520
-:1019E0000000000000600000000001A000000000F6
-:1019F000006000000000019C00000000006000008A
-:101A0000000002BB0000000000600000000002A314
-:101A1000938000000020441100000000000000003E
-:101A2000002048080000000000000000002F022FE6
-:101A300000000000000000000AE000000000023288
-:101A400000000000006000000000013A00000000FB
-:101A50000040000000000236950000000020441104
-:101A60000000000000000000002F022F0000000016
-:101A7000000000000CE00000000002360000000042
-:101A8000C0404800000002339200000000204411D2
-:101A90000000000000000000C0204800000000001E
-:101AA0000000225600204411000000000000001633
-:101AB00000204811000000000000225C00204411BA
-:101AC000000000000000000300204811000000009A
-:101AD0000000A1FC002044110000000000000001F3
-:101AE00000204811000000000001A1FD0020441169
-:101AF000000000000000000000600411000002FB74
-:101B000000000000C04004000000000100000000D0
-:101B1000006000000000062E0000A00C0020441110
-:101B20000000000000000000C0204800000000008D
-:101B300000000000C040480000000000000000005D
-:101B4000006000000000000B0000001840210A2087
-:101B50000000000000000003002F0222000000002F
-:101B6000000000000AE000000000024C0000001429
-:101B70000020222D00000000000801010029222879
-:101B800000000000000000140020362800000000C3
-:101B90000000A30C00204411000000000000000021
-:101BA000C02048000000000000000000C0204800E5
-:101BB0000000000000000000C0404800000002518A
-:101BC00000000000006000000000000B000000109A
-:101BD00000600411000003153F8000000020041184
-:101BE000000000000000000000600811000001B2C9
-:101BF0000000225C002044110000000000000003EF
-:101C000000204811000000000000000000600000FB
-:101C10000000027C0000001700201E2D00000000C4
-:101C20000000000100211E2700000000000000004D
-:101C300014E000000000026A0000001200201E2DC7
-:101C4000000000000000FFFF00281E270000000029
-:101C50000000000000341C2700000000000000000D
-:101C600012C000000000025F0000000000201C11F4
-:101C70000000000000000000002F00E50000000050
-:101C80000000000008C00000000002620000000028
-:101C900000201407000000000000001200201E2D8C
-:101CA000000000000000001000211E2700000000BE
-:101CB0000000000000341C4700000000000000008D
-:101CC00012C00000000002670000000000201C118C
-:101CD0000000000000000000002F00E600000000EF
-:101CE0000000000008C000000000026A00000000C0
-:101CF0000020180700000000000000000060000045
-:101D0000000002C100002256002044110000000023
-:101D1000000000000034202300000000000000004C
-:101D200012C00000000002720000000000342044D5
-:101D3000000000000000000012C00000000002715E
-:101D40000000001600404811000002760000001854
-:101D500000404811000002760000000000342044DA
-:101D6000000000000000000012C00000000002752A
-:101D70000000001700404811000002760000001922
-:101D800000204811000000000000A1FC00204411C8
-:101D900000000000000000010020481100000000C9
-:101DA0000001A1FD00604411000002E900003FFFB6
-:101DB000002F022F00000000000000000CC00000F7
-:101DC0000000025600000000C040040000000001B6
-:101DD0000000001040210620000000000000FFFF6E
-:101DE000C0280A20000000000000001040210E2042
-:101DF000000000000000FFFFC028122000000000CB
-:101E00000000001040211620000000000000FFFF2D
-:101E1000C0881A200000000081000000002044114A
-:101E20000000000000000001002048110000000038
-:101E300000042004006044110000068A0000000035
-:101E4000006000000000062E00000000C0600000DE
-:101E5000000002A30000000500200A2D0000000081
-:101E60000000000800220A22000000000000002BF1
-:101E700000201A2D000000000000001C00201E2D74
-:101E8000000000000000700000281E270000000075
-:101E90000000000000311CE6000000000000002AE5
-:101EA00000201A2D000000000000000C00221A265D
-:101EB0000000000000000000002F00E6000000000D
-:101EC0000000000006E00000000002920000000098
-:101ED00000201C11000000000000000000200C1178
-:101EE000000000000000002B00203623000000004E
-:101EF0000000001000201811000000000000000089
-:101F000000691CE20000012F9380000000204411B2
-:101F10000000000000000000002048070000000052
-:101F200095000000002044110000000000000000A7
-:101F3000002F022F00000000000000000CE0000055
-:101F40000000029D0000000100333E2F0000000051
-:101F500000000000D90048000000000092000000CE
-:101F6000002044110000000000000000C0204800D4
-:101F7000000000000000001C0040362700000000A8
-:101F80000000000CC0220A20000000000000002910
-:101F9000002036220000000000000028C04036204B
-:101FA000000000000000A2A4002044110000000076
-:101FB000000000090020481100000000A1000000FE
-:101FC00000204411000000000000000100804811C2
-:101FD000000000000000002100201E2D0000000075
-:101FE00000000000002C1CE30000000000000021A5
-:101FF00000203627000000000000002200201E2DD7
-:102000000000000000000000002C1CE400000000A4
-:1020100000000022002036270000000000000023FE
-:1020200000201E2D0000000000000000003120A351
-:102030000000000000000000002D1D07000000004F
-:1020400000000023002036270000000000000024CC
-:1020500000201E2D0000000000000000003120C400
-:102060000000000000000000002D1D07000000001F
-:10207000000000240080362700000000000000213E
-:10208000002036230000000000000022002036243B
-:10209000000000000000000000311CA30000000050
-:1020A0000000002300203627000000000000000090
-:1020B00000311CC40000000000000024008036270E
-:1020C000000000000000001A002036270000000079
-:1020D0000000001B00203628000000000000001750
-:1020E00000201E2D00000000000000020021022739
-:1020F000000000000000000014C00000000002DC2E
-:102100000000000000400000000002D90000001A9A
-:1021100000203627000000000000001B00203628A9
-:10212000000000000000001700201E2D000000002D
-:102130000000000200210227000000000000000053
-:1021400014E00000000002D9000000030021022773
-:10215000000000000000000014E00000000002DCAD
-:102160000000002300201E2D0000000000000000E1
-:10217000002E00E1000000000000000002C000008E
-:10218000000002DC0000002100201E2D00000000E5
-:1021900000000000003120A100000000000000004D
-:1021A000002E00E8000000000000000006C0000053
-:1021B000000002DC0000002400201E2D00000000B2
-:1021C00000000000002E00E20000000000000000FF
-:1021D00002C00000000002DC0000002200201E2DD2
-:1021E0000000000000000000003120C200000000DC
-:1021F00000000000002E00E80000000000000000C9
-:1022000006C00000000002DC0000000000600000CA
-:10221000000006650000000000600000000002B53C
-:102220000000000000400000000002DE000000008E
-:1022300000600000000002B5000000000060000027
-:102240000000065C0000000000400000000002DE0C
-:102250000000000000600000000002A70000000075
-:1022600000400000000002DE0000001A00201E2DC9
-:10227000000000000000001B0080222D0000000074
-:102280000000001000221E230000000000000000DB
-:1022900000294887000000000000000000311CA356
-:1022A000000000000000001000221E2700000000B7
-:1022B0000000000000294887000000000000001016
-:1022C00000221E230000000000000000003120C496
-:1022D000000000000000FFFF00282228000000008E
-:1022E0000000000000894907000000000000001005
-:1022F00000221E2300000000000000000029488783
-:10230000000000000000001000221E21000000005C
-:102310000000000000294847000000000000000005
-:1023200000311CA3000000000000001000221E2746
-:1023300000000000000000000029488700000000A5
-:102340000000000000311CA100000000000000108F
-:1023500000221E270000000000000000002948475E
-:10236000000000000000001000221E2300000000FA
-:1023700000000000003120C4000000000000FFFF4A
-:102380000028222800000000000000000029490762
-:10239000000000000000001000221E2100000000CC
-:1023A00000000000003120C2000000000000FFFF1C
-:1023B00000282228000000000000000000894907D2
-:1023C000000000000000001000221E23000000009A
-:1023D0000000000000294887000000000000000104
-:1023E00000220A210000000000000000003308A2C3
-:1023F000000000000000001000221E22000000006B
-:102400000000001000212222000000000000000057
-:1024100000294907000000000000000000311CA353
-:10242000000000000000001000221E270000000035
-:1024300000000000002948870000000000000001A3
-:1024400000220A210000000000000000003008A265
-:10245000000000000000001000221E22000000000A
-:1024600000000010002122220000000000000000F7
-:1024700000294907000000000000001000221E2370
-:102480000000000000000000003120C40000000037
-:102490000000FFFF002822280000000000000000CC
-:1024A000002949070000000000000000003808C5AE
-:1024B00000000000000000000030084100000000A3
-:1024C0000000000100220A220000000000000000BD
-:1024D000003308A2000000000000001000221E22AD
-:1024E0000000000000000010002122220000000077
-:1024F00000000000008949070000000000000017EC
-:102500000020222D000000000000000014C0000088
-:1025100000000318FFFFFFEF002806210000000065
-:10252000000000140020222D000000000000F8E050
-:1025300000204411000000000000000000294901B3
-:1025400000000000000000000089490100000000B8
-:102550000000000000204811000000000000000002
-:102560000020481100000000060A02000080481107
-:102570000000000000000000C0200000000000007B
-:1025800097000000C020441100000000000000007F
-:10259000C0204811000000008A0000000020441103
-:1025A00000000000000000000020481100000000B2
-:1025B0000000225C00204411000000000000000028
-:1025C000C0204800000000000000A1FC00204411D1
-:1025D0000000000000000000C020480000000000D3
-:1025E00000000000C0200400000000000000000007
-:1025F00000A0000A00000000970000000020441125
-:102600000000000000000000002048110000000051
-:102610008A000000002044110000000000000000BB
-:1026200000204811000000000000225C002044113E
-:102630000000000000000000C02048000000000072
-:102640000000A1FC00204411000000000000000078
-:10265000C02048000000000000000000C02004006E
-:10266000000000000000000000A0000A00000000C0
-:10267000970000000020441100000000000000004E
-:1026800000204811000000008A00000000204411D2
-:1026900000000000000000000020481100000000C1
-:1026A0000000225C00204411000000000000000037
-:1026B000C0204800000000000000A1FC00204411E0
-:1026C0000000000000000000C020480000000000E2
-:1026D0000001A1FD002044110000000000000000E6
-:1026E000D90048000000000000000000C0200400E5
-:1026F000000000000000000000A0000A0000000030
-:1027000000002257002044110000000000000003D8
-:10271000C0484A20000000000000225D0020441153
-:102720000000000000000000C04048000000000061
-:1027300000000000006000000000064200000000F1
-:10274000C0200800000000000000225C00204411AE
-:10275000000000000000000300384A2200000000D2
-:102760000000A1FC00204411000000000000000057
-:10277000C0204800000000000001A1FD002044111D
-:102780000000000000000000002F022200000000F6
-:10279000000000000CE0000000000000000000004D
-:1027A00040204800000000000000000140304A20A6
-:1027B0000000000000000002C0304A2000000000BD
-:1027C0000000000100530A220000034B0000003FFC
-:1027D000C0280A20000000008100000000204411F1
-:1027E000000000000000000100204811000000006F
-:1027F000000021F800204411000000000000001833
-:102800000020481100000000000421F9006044117C
-:102810000000068A000000110021023000000000C4
-:102820000000000014E00000000003540000001449
-:10283000002F022200000000000000000CC0000079
-:10284000000003640000201000204411000000007C
-:102850000000800000204811000000000001A2A438
-:102860000020441100000000000000000060480249
-:102870000000036E00002100002044110000000051
-:1028800000000000C0204800000000000000000020
-:10289000C02048000000000000000000C0204800E8
-:1028A0000000000000000000C040480000000000E0
-:1028B00000000004002F02220000000000000000C1
-:1028C0000CC000000000036A00002010002044112A
-:1028D00000000000000080000020481100000000FF
-:1028E0000001A2A40020441100000000000000002C
-:1028F000004048020000035F00000028002F022271
-:1029000000000000000000000CC00000000005BD39
-:102910000001A2A4002044110000000000000000FB
-:10292000004048020000035F0000002C0020362613
-:102930000000000000000049002018110000000005
-:102940000000003F002048110000000000000001CE
-:1029500000331A260000000000000000002F0226AD
-:1029600000000000000000000CC000000000037028
-:102970000000002C00801A2D000000000000003F25
-:10298000C0280A200000000000000015002F0222CD
-:1029900000000000000000000CE0000000000386C2
-:1029A00000000006002F02220000000000000000CE
-:1029B0000CE00000000003B100000016002F02220E
-:1029C00000000000000000000CE00000000003B563
-:1029D00000000020002F0222000000000000000084
-:1029E0000CE000000000039C0000000F002F0222FA
-:1029F00000000000000000000CE00000000003A840
-:102A000000000010002F0222000000000000000063
-:102A10000CE00000000003A80000001E002F0222AE
-:102A200000000000000000000CE000000000039027
-:102A30000000A2A4002044110000000000000000DB
-:102A400000404802000000000800000000290A229F
-:102A5000000000000000000340210E2000000000E4
-:102A60000000000CC021122000000000000800003F
-:102A7000002812240000000000000014C0221620CC
-:102A80000000000000000000002914A40000000065
-:102A90000000A2A40020441100000000000000007B
-:102AA000002948A2000000000000A1FE00204411FF
-:102AB000000000000000000000404803000000008B
-:102AC000810000000020441100000000000000010F
-:102AD0000020481100000000000021F800204411EF
-:102AE0000000000000000016002048110000000057
-:102AF000000421F9006044110000068A000000155E
-:102B000000210230000000000000000014E000007E
-:102B1000000003920000210E00204411000000007C
-:102B200000000000C020480000000000000000007D
-:102B3000C0204800000000000000A2A400204411B2
-:102B400000000000000000000040480200000000FB
-:102B5000810000000020441100000000000000017E
-:102B60000020481100000000000021F8002044115E
-:102B700000000000000000170020481100000000C5
-:102B8000000421F9006044110000068A00000003DF
-:102B900000210230000000000000000014E00000EE
-:102BA0000000039E000021080020441100000000E6
-:102BB00000000000C02048000000000000000000ED
-:102BC000C0204800000000000000A2A40020441122
-:102BD000000000000000000000404802000000006B
-:102BE0000000A2A40020441100000000000000002A
-:102BF0000020480200000000800000000020441176
-:102C0000000000000000000000204811000000004B
-:102C100081000000002044110000000000000010AE
-:102C200000204811000000000000000000200010FB
-:102C3000000000000000000014C00000000003AE0F
-:102C40000000000000400000000000000000201014
-:102C50000020441100000000000080000020481106
-:102C6000000000000001A2A40020441100000000A8
-:102C70000000000600404811000000000000201085
-:102C800000204411000000000000800000204811D6
-:102C9000000000000001A2A4002044110000000078
-:102CA00000000016006048110000036E00000000E4
-:102CB000004000000000000000000000C0200800EC
-:102CC0000000000000000000C0200C000000000018
-:102CD0000000001D00210223000000000000000091
-:102CE00014E00000000003CE810000000020441129
-:102CF000000000000000000100204811000000005A
-:102D0000000021F80020441100000000000000181D
-:102D10000020481100000000000421F90060441167
-:102D20000000068A000000110021023000000000AF
-:102D30000000000014E00000000003C000002100BB
-:102D400000204411000000000000000000204802A4
-:102D50000000000000000000002048030000000008
-:102D6000BABECAFE0020481100000000CAFEBABE6A
-:102D70000020481100000000000020100020441135
-:102D8000000000000000800000204811000000004A
-:102D90000000A2A400204411000000000000000474
-:102DA0000040481100000000000021700020441184
-:102DB00000000000000000000020480200000000A9
-:102DC0000000000000204803000000008100000017
-:102DD00000204411000000000000000A00204811FB
-:102DE00000000000000000000020001000000000B3
-:102DF0000000000014C00000000003D38C0000009D
-:102E00000020441100000000CAFEBABE0040481174
-:102E100000000000810000000020441100000000BC
-:102E200000000001002048110000000000003FFFEA
-:102E300040280A20000000008000000040280E20EA
-:102E40000000000040000000C02812200000000028
-:102E500000040000006946220000068A000000000D
-:102E6000002014100000000000000000002F0223CA
-:102E700000000000000000000CC00000000003E1A2
-:102E800000000000C0401800000003E400003FFF05
-:102E9000C0281A2000000000000400000069462637
-:102EA0000000068A0000000000201810000000004A
-:102EB00000000000002F02240000000000000000BD
-:102EC0000CC00000000003E700000000C0401C0030
-:102ED000000003EA00003FFFC0281E2000000000A1
-:102EE00000040000006946270000068A0000000078
-:102EF00000201C1000000000000000000020440220
-:102F00000000000000000000002820C500000000B4
-:102F100000000000004948E800000000A580000013
-:102F200000200811000000000000200000200C110B
-:102F30000000000083000000006044110000041243
-:102F4000000000000020440200000000000000001B
-:102F5000C0204800000000000000000040204800A1
-:102F6000000000000000001FC0210220000000003F
-:102F70000000000014C00000000003F70000201053
-:102F800000204411000000000000800000204811D3
-:102F9000000000000000FFFFC0481220000003FFF7
-:102FA000A780000000200811000000000000A00021
-:102FB00000200C110000000083000000006044119C
-:102FC0000000041200000000002044020000000085
-:102FD00000000000C02048000000000000000000C9
-:102FE000C0204800000000000000FFFFC0281220A1
-:102FF00000000000830000000020441100000000D9
-:103000000000000000304883000000008400000041
-:10301000002044110000000000000000C020480013
-:1030200000000000000000001D0000000000000083
-:103030008300000000604411000004120000000042
-:10304000C040040000000001A98000000020081119
-:10305000000000000000C00000400C11000003FA56
-:10306000AB80000000200811000000000000F8E024
-:1030700000400C11000003FAAD8000000020081190
-:10308000000000000000F88000400C11000003FA6E
-:10309000B380000000200811000000000000F3FCD5
-:1030A00000400C11000003FAAF800000002008115E
-:1030B000000000000000E00000400C11000003FAD6
-:1030C000B180000000200811000000000000F000A6
-:1030D00000400C11000003FA83000000002044119E
-:1030E00000000000000021480020481100000000FE
-:1030F00084000000002044110000000000000000D7
-:10310000C020480000000000000000001D0000007A
-:10311000000000000000000000800000000000002F
-:1031200001182000C0304620000000000000000010
-:10313000D90048000000000000000000C02004008A
-:10314000000000000000000000A0000A00000000D5
-:103150000218A000C030462000000000000000005F
-:10316000D90048000000000000000000C02004005A
-:10317000000000000000000000A0000A00000000A5
-:103180000318C000C030462000000000000000000E
-:10319000D90048000000000000000000C02004002A
-:1031A000000000000000000000A0000A0000000075
-:1031B0000418F8E0C03046200000000000000000C5
-:1031C000D90048000000000000000000C0200400FA
-:1031D000000000000000000000A0000A0000000045
-:1031E0000518F880C03046200000000000000000F4
-:1031F000D90048000000000000000000C0200400CA
-:10320000000000000000000000A0000A0000000014
-:103210000618E000C030462000000000000000005A
-:10322000D90048000000000000000000C020040099
-:10323000000000000000000000A0000A00000000E4
-:103240000718F000C0304620000000000000000019
-:10325000D90048000000000000000000C020040069
-:10326000000000000000000000A0000A00000000B4
-:103270000818F3FCC03046200000000000000000E9
-:10328000D90048000000000000000000C020040039
-:10329000000000000000000000A0000A0000000084
-:1032A0000000003000200A2D000000000000000097
-:1032B000C0290C4000000000000000300020362330
-:1032C0000000000000000000C0200400000000001A
-:1032D0000000000000A0000A0000000086000000BE
-:1032E00000204411000000000000000000404801E0
-:1032F0000000000085000000C02044110000000014
-:103300000000000000404801000000000000217C97
-:10331000002044110000000000000000C020480010
-:103320000000000000000000C02048000000000075
-:1033300000000000C02048000000000081000000E4
-:10334000002044110000000000000001002048118E
-:103350000000000000000000C02008000000000085
-:103360000000000017000000000000000004217FA2
-:10337000006044110000068A0000001F0021023096
-:10338000000000000000000014C000000000000069
-:103390000000000000404C02000004480000000053
-:1033A000C0200C000000000000000000C020100041
-:1033B0000000000000000000C02014000000000019
-:1033C00000000000C0201800000000000000000005
-:1033D000C0201C000000000000007F0000280A211F
-:1033E0000000000000004500002F02220000000045
-:1033F000000000000CE00000000004560000000087
-:10340000C0202000000000000000000017000000A5
-:10341000000000000000001000280A230000000047
-:1034200000000010002F0222000000000000000039
-:103430000CE000000000045E810000000020441148
-:103440000000000000000001002048110000000002
-:1034500000040000006946240000068A0000000005
-:1034600000400000000004638100000000204411BF
-:1034700000000000000000000020481100000000D3
-:103480000000216D00204411000000000000000039
-:103490000020480400000000000000000060480513
-:1034A0000000068F00000000002824F0000000004B
-:1034B0000000000700280A230000000000000001AF
-:1034C000002F022200000000000000000AE00000BF
-:1034D0000000046A00000000002F00C90000000086
-:1034E0000000000004E00000000004830000000071
-:1034F000004000000000049000000002002F0222A3
-:1035000000000000000000000AE000000000046F5E
-:1035100000000000002F00C90000000000000000B3
-:1035200002E00000000004830000000000400000F2
-:103530000000049000000003002F022200000000A1
-:10354000000000000AE00000000004740000000019
-:10355000002F00C900000000000000000CE0000087
-:103560000000048300000000004000000000049000
-:1035700000000004002F02220000000000000000F4
-:103580000AE000000000047900000000002F00C9DC
-:1035900000000000000000000AE0000000000483BA
-:1035A0000000000000400000000004900000000542
-:1035B000002F022200000000000000000AE00000CE
-:1035C0000000047E00000000002F00C90000000081
-:1035D0000000000006E0000000000483000000007E
-:1035E000004000000000049000000006002F0222AE
-:1035F00000000000000000000AE00000000004835A
-:1036000000000000002F00C90000000000000000C2
-:1036100008E00000000004830000000000400000FB
-:103620000000049000007F0000280A210000000034
-:1036300000004500002F02220000000000000000F2
-:103640000AE00000000000000000000800210A233A
-:10365000000000000000000014C000000000048D05
-:10366000000021690020441100000000000000005B
-:10367000C02048000000000000000000C0204800FA
-:103680000000000000000000C02048000000000012
-:10369000CAFEBABE00404811000000000000000051
-:1036A000C02044000000000000000000C020000016
-:1036B0000000000000000000C040480000000000C2
-:1036C00000007F0000280A210000000000004500E3
-:1036D000002F022200000000000000000AE00000AD
-:1036E0000000049600000000C02000000000000060
-:1036F00000000000C02000000000000000000000EA
-:10370000C0400000000000000000000000404C0825
-:103710000000045600000000C02008000000000067
-:103720000000001040210E200000000000000011E9
-:10373000402112200000000000000012402116204D
-:10374000000000000000216900204411000000007A
-:1037500000000000002048020000000000000000FF
-:1037600000210225000000000000000014E000001D
-:10377000000004A000040000C0494A20000004A189
-:10378000FFFBFFFFC0284A200000000000000000EF
-:1037900000210223000000000000000014E00000EF
-:1037A000000004AD00000000C02048000000000040
-:1037B00000000000C02048000000000000000000E1
-:1037C00000210224000000000000000014C00000DE
-:1037D00000000000810000000020441100000000F3
-:1037E0000000000C00204811000000000000000054
-:1037F00000200010000000000000000014C00000C5
-:10380000000004A9A00000000020441100000000F6
-:10381000CAFEBABE0040481100000000810000004E
-:1038200000204411000000000000000400204811A6
-:10383000000000000000216B002044110000000087
-:1038400000000000C02048100000000081000000BF
-:103850000020441100000000000000050020481175
-:10386000000000000000216C002044110000000056
-:1038700000000000C0204810000000000000000010
-:10388000002F022400000000000000000CE00000F7
-:10389000000000000000000000400000000004A73D
-:1038A00000000000C0210A2000000000000000000D
-:1038B00014C00000000004C081000000002044117A
-:1038C000000000000000000000204811000000007F
-:1038D0000000216D002044110000000000000000E5
-:1038E000C02048000000000000000000C060480048
-:1038F0000000068F0000000000400000000004C42B
-:1039000081000000002044110000000000000001C0
-:10391000002048110000000000040000C0294620DB
-:103920000000000000000000C06000000000068AE7
-:103930000000000100210222000000000000000041
-:1039400014C00000000004CB0000216900204411D5
-:103950000000000000000000C0204800000000003F
-:1039600000000000C020480000000000000000002F
-:103970000020481000000000CAFEBABE00404811F6
-:103980000000000000000000C02044000000000013
-:1039900000000000C040481000000000810000004E
-:1039A0000020441100000000000000010020481128
-:1039B00000000000000021F8002044110000000079
-:1039C0000000000E0020481100000000000421F952
-:1039D000006044110000068A00000000002102304F
-:1039E000000000000000000014C00000000004CD32
-:1039F00000002180002044110000000000000000B1
-:103A0000C02048000000000000000000C0200000AE
-:103A10000000000000000000C0204800000000007E
-:103A200000000000C02000000000000000000000B6
-:103A3000C0404800000000000000000300333E2F9B
-:103A40000000000000000001002102210000000031
-:103A50000000000014E00000000004FD0000002C45
-:103A600000200A2D000000000004000018E00C11E6
-:103A7000000004EC0000000100333E2F00000000B5
-:103A80000000216900204411000000000000000037
-:103A90000020480200000000000000000020480351
-:103AA000000000000000000800300A2200000000B2
-:103AB00000000000C02048000000000000000000DE
-:103AC000C0204800000000000000216900204411CF
-:103AD000000000000000000000204802000000007C
-:103AE0000000000000204803000000000000000863
-:103AF00000300A220000000000000000C020480042
-:103B00000000000000000000D8C04800000004E0F1
-:103B100000002169002044110000000000000000A6
-:103B200000204802000000000000000000204803C0
-:103B3000000000000000000800300A220000000021
-:103B400000000000C020480000000000000000004D
-:103B5000C0204800000000000000002D0020122DB1
-:103B6000000000000000000000290C83000000009D
-:103B70000000216900204411000000000000000046
-:103B80000020480200000000000000000020480360
-:103B9000000000000000000800300A2200000000C1
-:103BA00000000000C02048000000000000000000ED
-:103BB000C020480000000000000000110021022485
-:103BC000000000000000000014C000000000000021
-:103BD0000000000000400000000004A70000002CCE
-:103BE000C0203620000000000000002DC04036201C
-:103BF000000000000000000F002102210000000072
-:103C00000000000014C000000000050200000000D9
-:103C1000006000000000000B00000000D900000060
-:103C20000000000000000000C0400400000000018F
-:103C3000B50000000020441100000000000020003A
-:103C40000020481100000000B600000000204411D0
-:103C5000000000000000A00000204811000000004B
-:103C6000B700000000204411000000000000C00068
-:103C70000020481100000000B8000000002044119E
-:103C8000000000000000F8E00020481100000000E3
-:103C9000B900000000204411000000000000F8807E
-:103CA0000020481100000000BA000000002044116C
-:103CB000000000000000E0000020481100000000AB
-:103CC000BB00000000204411000000000000F000D4
-:103CD0000020481100000000BC000000002044113A
-:103CE000000000000000F3FC00204811000000006C
-:103CF00081000000002044110000000000000002CC
-:103D00000020481100000000000000FF00280E30D5
-:103D10000000000000000000002F0223000000004F
-:103D2000000000000CC000000000051600000000AC
-:103D3000C0200800000000000000000014C00000C7
-:103D40000000052B0000000000200C110000000006
-:103D50000000001C00203623000000000000002BA3
-:103D60000020362300000000000000290020362338
-:103D700000000000000000280020362300000000A2
-:103D8000000000170020362300000000000000257E
-:103D9000002036230000000000000026002036230B
-:103DA0000000000000000015002036230000000085
-:103DB000000000160020362300000000FFFFE00096
-:103DC00000200C110000000000000021002036231C
-:103DD0000000000000000022002036230000000048
-:103DE00000001FFF00200C11000000000000002355
-:103DF00000203623000000000000002400203623AD
-:103E000000000000F1FFFFFF00283A2E0000000034
-:103E10000000001AC0220E20000000000000000078
-:103E20000029386E000000008100000000204411CD
-:103E30000000000000000006002048110000000003
-:103E40000000002A4020362000000000870000000B
-:103E5000002044110000000000000000C0204800C5
-:103E6000000000000000A1F4002044110000000048
-:103E700000000000002048100000000000000000CA
-:103E800000200C110000000000000030002036234C
-:103E9000000000009D000000002044110000000010
-:103EA0000000001F40214A20000000009600000092
-:103EB000002044110000000000000000C020480065
-:103EC0000000000000000000C0200C000000000006
-:103ED00000000000C0201000000000000000001FD3
-:103EE00000211624000000000000000014C00000A3
-:103EF000000000000000001D00203623000000002C
-:103F00000000000300281E2300000000000000083D
-:103F10000022222300000000FFFFF00000282228DA
-:103F20000000000000000000002920E80000000060
-:103F30000000001F002036280000000000000018CC
-:103F400000211E2300000000000000200020362772
-:103F50000000000000000002002216240000000003
-:103F600000000000003014A8000000000000001E47
-:103F700000203625000000000000000300211A2464
-:103F8000000000001000000000281A2600000000B9
-:103F9000EFFFFFFF00283A2E0000000000000000A5
-:103FA000004938CE000006780000000140280A20B1
-:103FB000000000000000000640280E200000000065
-:103FC00000000300C02812200000000000000008CC
-:103FD000002112240000000000000000C020162074
-:103FE0000000000000000000C0201A2000000000B7
-:103FF000000000000021022200000000000000007C
-:1040000014C000000000056381000000002044117E
-:104010000000000000000001002048110000000026
-:104020000000225800300A240000000000040000B4
-:10403000006946220000068A000021690020441120
-:104040000000000000000000002048050000000003
-:104050000002000000294A260000000000000000C5
-:104060000020481000000000CAFEBABE002048111F
-:104070000000000000000002002F022300000000EA
-:10408000000000000CC000000000056B00000000F4
-:10409000C0201C100000000000000000C040000014
-:1040A0000000057900000002002F0223000000003C
-:1040B000000000000CC000000000056B8100000043
-:1040C0000020441100000000000000010020481101
-:1040D000000000000000225800300A240000000008
-:1040E00000040000006946220000068A000000006B
-:1040F000C0201C100000000000000000C0400000B4
-:104100000000057900000000002F022300000000DD
-:10411000000000000CC000000000056F000000005F
-:10412000C0201C000000000000000000C040000093
-:104130000000057900000004002F022300000000A9
-:10414000000000000CC000000000057781000000A6
-:104150000020441100000000000000000020481171
-:10416000000000000000216D00204411000000004C
-:1041700000000000C0204800000000000000000017
-:10418000C06048000000068F0000000000401C10C6
-:104190000000057900000000C020000000000000C1
-:1041A00000000000C040000000000000000000000F
-:1041B0000EE000000000057B000000000060000031
-:1041C000000005C600000000002F022400000000CF
-:1041D000000000000CC000000000058C0000A2B729
-:1041E00000204411000000000000000000204807EB
-:1041F00000000000810000000020441100000000C9
-:104200000000000100204811000000000004A2B6D8
-:10421000006044110000068A0000001A00212230CC
-:104220000000000000000006002226300000000010
-:1042300000042004006044110000068A0000A2C4AB
-:10424000002044110000000000000000003048E998
-:10425000000000000000000000E000000000058AEF
-:104260000000A2D100204411000000000000000066
-:1042700000404808000000000000A2D100204411C6
-:10428000000000000000000100504A28000000006B
-:1042900000000001002F02240000000000000000C8
-:1042A0000CC000000000059D0000A2BB00204411CE
-:1042B000000000000000000000204807000000008F
-:1042C00081000000002044110000000000000001F7
-:1042D00000204811000000000004A2BA0060441150
-:1042E0000000068A0000001A0021223000000000B1
-:1042F0000000000600222630000000000004200418
-:10430000006044110000068A0000A2C5002044118C
-:104310000000000000000000003048E9000000003C
-:104320000000000000E000000000059B0000A2D299
-:104330000020441100000000000000000040480878
-:10434000000000000000A2D2002044110000000084
-:104350000000000100504A28000000000000000298
-:10436000002F022400000000000000000CC000002C
-:10437000000005AE0000A2BF0020441100000000B4
-:10438000000000000020480700000000810000003D
-:10439000002044110000000000000001002048112E
-:1043A000000000000004A2BE006044110000068A64
-:1043B0000000001A0021223000000000000000066A
-:1043C0000022263000000000000420040060441198
-:1043D0000000068A0000A2C6002044110000000070
-:1043E00000000000003048E900000000000000006C
-:1043F00000E00000000005AC0000A2D30020441142
-:10440000000000000000000000404808000000001C
-:104410000000A2D3002044110000000000000001B1
-:1044200000504A28000000000000A2C300204411F0
-:10443000000000000000000000204807000000000D
-:104440008100000000204411000000000000000175
-:1044500000204811000000000004A2C200604411C6
-:104460000000068A0000001A00212230000000002F
-:104470000000000600222630000000000004200496
-:10448000006044110000068A0000A2C70020441109
-:104490000000000000000000003048E900000000BB
-:1044A0000000000000E00000000005BB0000A2D4F6
-:1044B00000204411000000000000000000404808F7
-:1044C000000000000000A2D4002044110000000001
-:1044D0000000000100504A28000000008500000094
-:1044E00000204411000000000000000000204801EE
-:1044F000000000000000304A0020441100000000CD
-:104500000100000000204811000000000000000031
-:1045100000400000000005C1A4000000C0204411BC
-:104520000000000000000000C04048000000000043
-:1045300000000000C0600000000005C60000000090
-:10454000C0400400000000010000002C00203621C3
-:104550000000000081000000002044110000000065
-:1045600000000006002048110000000000000000CC
-:10457000002F023000000000000000000CC000000E
-:10458000000005CD00000000002004110000000024
-:104590000000003000403621000005E0000000303F
-:1045A0000020062D0000000000007E0000280621EB
-:1045B0000000000000000000002F022100000000A9
-:1045C000000000000CE00000000005E08100000099
-:1045D00000204411000000000000000100204811EC
-:1045E000000000000004A092006044110000068A50
-:1045F0000000003100203630000000000004A093CD
-:10460000006044110000068A0000003200203630AD
-:10461000000000000004A2B6006044110000068AF9
-:104620000000003300203630000000000004A2BA71
-:10463000006044110000068A00000034002036307B
-:10464000000000000004A2BE006044110000068AC1
-:104650000000003500203630000000000004A2C237
-:10466000006044110000068A000000360020363049
-:104670000000000000042004006044110000068ACD
-:104680000001A2A400204411000000000000003F2F
-:1046900000204811000000000000003F00204811E9
-:1046A000000000000000003F002048110000000052
-:1046B0000000003F0020481100000000000000053D
-:1046C00000204811000000000000A1F40020441167
-:1046D0000000000000000000002048110000000061
-:1046E00088000000002044110000000000000001CC
-:1046F000002048110000000081000000002044114B
-:10470000000000000000000600204811000000002A
-:1047100000000001002F0230000000000000000037
-:104720000CE0000000000629000000300020062DEB
-:104730000000000000000000002F02210000000027
-:10474000000000000CE000000000062981000000CD
-:10475000002044110000000000000001002048116A
-:104760000000000000007E0000280621000000007C
-:1047700000000000002F02210000000000000000E7
-:104780000CE00000000006020000A092002044118E
-:10479000000000000000003100204A2D0000000051
-:1047A0000000A0930020441100000000000000322F
-:1047B00000204A2D000000000000A2B60020441195
-:1047C000000000000000003300204A2D000000001F
-:1047D0000000A2BA002044110000000000000034D4
-:1047E00000204A2D000000000000A2BE002044115D
-:1047F000000000000000003500204A2D00000000ED
-:104800000000A2C200204411000000000000003699
-:1048100000204A2D00000000000000300020062D7E
-:1048200000000000000001FF002806210000000039
-:1048300000000000002F0221000000000000000026
-:104840000CE000000000062800000000002102210A
-:10485000000000000000000014C000000000060B73
-:104860000004A003006044110000068A0000A003B9
-:10487000002044110000000000000000002048104B
-:1048800000000000000000010021062100000000DF
-:104890000000000014C00000000006100004A0107A
-:1048A000006044110000068A0000A010002044119E
-:1048B0000000000000000000002048100000000080
-:1048C000000000010021062100000000000000009F
-:1048D000002F022100000000000000000CE000009A
-:1048E000000006280004A011006044110000068AA0
-:1048F0000000A01100204411000000000000000092
-:1049000000204810000000000004A01200604411C4
-:104910000000068A0000A0120020441100000000E0
-:104920000000000000204810000000000004A01358
-:10493000006044110000068A0000A013002044110A
-:1049400000000000000000000020481000000000EF
-:104950000004A014006044110000068A0000A014A6
-:10496000002044110000000000000000002048105A
-:10497000000000000004A015006044110000068A39
-:104980000000A015002044110000000000000000FD
-:1049900000204810000000000004A0160060441130
-:1049A0000000068A0000A01600204411000000004C
-:1049B0000000000000204810000000000004A017C4
-:1049C000006044110000068A0000A0170020441176
-:1049D000000000000000000000204810000000005F
-:1049E00000042004006044110000068A0000002C2E
-:1049F0000080062D00000000FF0000000020441190
-:104A0000000000000000000000204811000000002D
-:104A1000000000010020481100000000000000021A
-:104A20000080481100000000000000000EE00000BF
-:104A30000000063A000000300020062D00000000B3
-:104A40000000000200280621000000000000000015
-:104A5000002F022100000000000000000CE0000018
-:104A60000000063881000000002044110000000012
-:104A70000000000100204811000000000004200494
-:104A8000006044110000068A000010000020081198
-:104A9000000000000000002B002036220000000073
-:104AA00000000000006000000000063E0000000062
-:104AB00000600000000005C69800000000204411BE
-:104AC000000000000000000000804811000000000D
-:104AD00000000000C06000000000063E0000000072
-:104AE000C0400400000000010000A2A40020441106
-:104AF000000000000000002200204811000000001B
-:104B000089000000002044110000000000000001A6
-:104B1000004048110000062A9700000000204411C0
-:104B2000000000000000000000204811000000000C
-:104B30008A00000000204411000000000000000076
-:104B4000004048110000062A00000000006000003C
-:104B50000000065900002010002044110000000051
-:104B60000000800000204811000000000001A2A405
-:104B7000C020441100000000000000160060481131
-:104B80000000036E0000201000204411000000000F
-:104B9000000100000020481100000000810000001A
-:104BA0000020441100000000000000010020481116
-:104BB000000000000000217C0020441100000000E3
-:104BC000098000000020481100000000FFFFFFFFE7
-:104BD00000204811000000000000000000204811E3
-:104BE00000000000000000001700000000000000AE
-:104BF0000004217F006044110000068A0000001FAD
-:104C000000210230000000000000000014C000007D
-:104C1000000000000000000400404C11000006539A
-:104C2000000000000040000000000000000000172D
-:104C300000201E2D000000000000000400291E2797
-:104C40000000000000000017008036270000000070
-:104C50000000001700201E2D00000000FFFFFFFBDA
-:104C600000281E27000000000000001700803627E3
-:104C7000000000000000001700201E2D00000000B2
-:104C80000000000800291E27000000000000001797
-:104C900000803627000000000000001700201E2DB5
-:104CA00000000000FFFFFFF700281E2700000000A3
-:104CB00000000017008036270000000000002010D0
-:104CC0000020441100000000000080000020481176
-:104CD000000000000001A2A4002044110000000018
-:104CE00000000016006048110000036E0000201054
-:104CF00000204411000000000001000000204811C5
-:104D0000000000000000217C002044110000000091
-:104D1000018000000020481100000000FFFFFFFF9D
-:104D20000020481100000000000000000020481191
-:104D3000000000000000000017000000000000005C
-:104D4000810000000020441100000000000000016C
-:104D500000204811000000000004217F0060441181
-:104D60000000068A0000001F002102300000000041
-:104D70000000000014C000000000068900000010C0
-:104D800000404C110000066F00000000C02004002D
-:104D9000000000000000000038C00000000000001B
-:104DA0000000001D00200A2D000000000000001E71
-:104DB00000200E2D000000000000001F0020122D1A
-:104DC00000000000000000200020162D0000000060
-:104DD00000002169002044110000000000000000D4
-:104DE00000204804000000000000000000204805EA
-:104DF000000000000000000000204801000000004A
-:104E0000CAFEBABE002048110000000000000004E5
-:104E1000003012240000000000000000002F006499
-:104E200000000000000000000CC000000000068828
-:104E30000000000300281A22000000000000000803
-:104E40000022122200000000FFFFF00000281224C0
-:104E50000000000000000000002910C40000000055
-:104E60000000001F00403624000000000000000089
-:104E70000080000000000000000000001AC00000D8
-:104E80000000068A9F00000000204411000000007E
-:104E9000CAFEBABE00204811000000000000000059
-:104EA0001AE000000000068D0000000000800000F5
-:104EB00000000000000000001AC000000000068F83
-:104EC0009E0000000020441100000000CAFEBABE8F
-:104ED0000020481100000000000000001AE000005F
-:104EE00000000692000000000080000000000000AA
-:104EF00000000000006000000000000B0000100037
-:104F000000600411000003150000000000200411DF
-:104F1000000000000000000000600811000001B265
-:104F20000000225C0020441100000000000000038B
-:104F3000002048110000000000002256002044110B
-:104F4000000000000000001B0020481100000000CD
-:104F50000000A1FC0020441100000000000000013E
-:104F600000204811000000000001A1FDC0204411F4
-:104F7000000000000000002100201E2D00000000A5
-:104F80000000001000221E27000000000000002486
-:104F90000020222D000000000000FFFF0028222832
-:104FA0000000000000000000002949070000000088
-:104FB0000000000000204811000000000000002256
-:104FC0000020222D000000000000FFFF0028222802
-:104FD0000000000000000000002949070000000058
-:104FE0000000000000204811000000000000002325
-:104FF00000201E2D000000000000001000221E27CF
-:105000000000000000000000002949070000000027
-:1050100000000000004048110000000000000000F7
-:105020000000000000000000000000000000000080
-:105030000000000000000000000000000000000070
-:105040000000000000000000000000000000000060
-:105050000000000000000000000000000000000050
-:105060000000000000000000000000000000000040
-:105070000000000000000000000000000000000030
-:105080000000000000000000000000000000000020
-:105090000000000000000000000000000000000010
-:1050A0000000000000000000000000000000000000
-:1050B00000000000000000000000000000000000F0
-:1050C00000000000000000000000000000000000E0
-:1050D00000000000000000000000000000000000D0
-:1050E00000000000000000000000000000000000C0
-:1050F00000000000000000000000000000000000B0
-:10510000000000000000000000000000000000009F
-:10511000000000000000000000000000000000008F
-:10512000000000000000000000000000000000007F
-:10513000000000000000000000000000000000006F
-:10514000000000000000000000000000000000005F
-:10515000000000000000000000000000000000004F
-:10516000000000000000000000000000000000003F
-:10517000000000000000000000000000000000002F
-:10518000000000000000000000000000000000001F
-:10519000000000000000000000000000000000000F
-:1051A00000000000000000000000000000000000FF
-:1051B00000000000000000000000000000000000EF
-:1051C00000000000000000000000000000000000DF
-:1051D00000000000000000000000000000000000CF
-:1051E00000000000000000000000000000000000BF
-:1051F00000000000000000000000000000000000AF
-:10520000000000000000000000000000000000009E
-:10521000000000000000000000000000000000008E
-:10522000000000000000000000000000000000007E
-:10523000000000000000000000000000000000006E
-:10524000000000000000000000000000000000005E
-:10525000000000000000000000000000000000004E
-:10526000000000000000000000000000000000003E
-:10527000000000000000000000000000000000002E
-:10528000000000000000000000000000000000001E
-:10529000000000000000000000000000000000000E
-:1052A00000000000000000000000000000000000FE
-:1052B000014204FF05BD02500000000001C3016867
-:1052C000043F05BD00000000022502090250015103
-:1052D000000000000223024502A00241000000007D
-:1052E00003D705BD05BD05BD000000000646064705
-:1052F000031F05BD0000000005BD05C203200340DB
-:1053000000000000032A0282034203340000000070
-:1053100005BD05BD05BD05BD0000000005BD054E70
-:1053200005BD05BD0000000003BA05BD04B8034477
-:10533000000000000497044D043D05BD000000007E
-:1053400004CD05BD044104DA00000000044D05044D
-:10535000035103750000000005BD05BD05BD05BD79
-:105360000000000005BD05BD05BD05BD0000000035
-:1053700005BD05BD063C05C40000000005BD05BD1A
-:10538000000705BD0000000005BD05BD05BD05BD4C
-:105390000000000005BD05BD05BD05BD0000000005
-:1053A00003F803ED0408040600000000040E040ADC
-:1053B000040C041000000000041C04180424042041
-:1053C00000000000042C0428043404300000000015
-:1053D00005BD05BD043805BD0000000005BD05BDC7
-:1053E00005BD05BD0000000005BD05BD05BD05BD31
-:1053F000000000000002067606940006000000008F
-:00000001FF
diff --git a/firmware/radeon/RV630_pfp.bin.ihex b/firmware/radeon/RV630_pfp.bin.ihex
deleted file mode 100644
index f55292c97b79..000000000000
--- a/firmware/radeon/RV630_pfp.bin.ihex
+++ /dev/null
@@ -1,145 +0,0 @@
-:1000000000CA040000A00000007E828B007C038BED
-:10001000008001B8007C038B00D4401E00EE001E5F
-:1000200000CA040000A00000007E828B00C41838C3
-:1000300000CA240000CA2800009581A800C41C3A08
-:1000400000C3C00000CA080000CA0C00007C744B4A
-:1000500000C200050099C00000C41C3A007C744C2A
-:1000600000C0FFF000042C0400309002007D250049
-:1000700000351402007D350B00255403007CD5802B
-:1000800000259C030095C00400D5001B007EDDC147
-:10009000007D9D8000D6801B00D5801B00D4401EB3
-:1000A00000D5401E00D6401E00D6801E00D4801E03
-:1000B00000D4C01E009783D300D5C01E00CA08001C
-:1000C0000080001A00CA0C0000E4011E00D4001ECB
-:1000D0000080000C00C4183800E4013E00D4001E6B
-:1000E0000080000C00C4183800D4401E00EE001E32
-:1000F00000CA040000A00000007E828B00E4011E04
-:1001000000D4001E00D4401E00EE001E00CA0400F1
-:1001100000A00000007E828B00E4013E00D4001E9F
-:1001200000D4401E00EE001E00CA040000A0000023
-:10013000007E828B00CA180000D4401E00D5801EAD
-:100140000080005300D4007500D4401E00CA08008F
-:1001500000CA0C0000CA100000D4801900D4C018D6
-:1001600000D5001700D4801E00D4C01E00D5001E8C
-:1001700000E2001E00CA040000A00000007E828B86
-:1001800000CA080000D4806000D4401E0080000037
-:1001900000D4801E00CA080000D4806100D4401E34
-:1001A0000080000000D4801E00CA080000CA0C00B5
-:1001B00000D4401E00D4801600D4C01600D4801E87
-:1001C000008001B800D4C01E00C6084300CA0C005D
-:1001D00000CA10000094800400CA140000E420F358
-:1001E00000D4201300D5606500D4E01C00D5201C8D
-:1001F00000D5601C008000000006200100C60843F6
-:1002000000CA0C0000CA1000009483F700CA140052
-:1002100000E420F30080007900D4201300C60843D6
-:1002200000CA0C0000CA1000009883EF00CA140036
-:1002300000D400640080008D0000000000C414326F
-:1002400000C6184300C4082F0095400500C40C30B8
-:1002500000D4401E0080000000EE001E009583F5D3
-:1002600000C4103100D4403300D5206500D4A01C58
-:1002700000D4E01C00D5201C00E4015E00D4001E68
-:10028000008000000006200100CA1800000A2001BA
-:1002900000D6007600C408360098800700C61045D6
-:1002A0000095011000D4001F00D46062008000009F
-:1002B00000D4206200CC383500CC1433008401BB5C
-:1002C00000D4007200D5401E0080000000EE001E29
-:1002D00000E2001A008401BB00E2001A00CC104BBF
-:1002E00000CC0447002C9401007D098B0098400548
-:1002F000007D15CB00D4001A008001B800D4006D39
-:100300000034440100CC0C480098403A00CC2C4A00
-:100310000095800400CC0449008001B800D4001A84
-:1003200000D4C01A00282801008400F000CC10037B
-:100330000098801B0004380C008400F000CC1003EF
-:100340000098801700043808008400F000CC1003E7
-:100350000098801300043804008400F000CC1003DF
-:100360000098801400CC104C009A800900CC144DE9
-:10037000009840DC00D4006D00CC184800D5001A6D
-:1003800000D5401A008000C900D5801A0096C0D55B
-:1003900000D4006D008001B800D4006E009AC00344
-:1003A00000D4006D00D4006E0080000000EC007FDF
-:1003B000009AC0CC00D4006D008001B800D4006E5B
-:1003C00000CC140300CC180300CC1C03007D910367
-:1003D000007DD583007D190C0035CC1F0035701FC2
-:1003E000007CF0CB007CD08B00880000007E8E8BE0
-:1003F0000095C00400D4006E008001B800D4001A3B
-:1004000000D4C01A00CC080300CC0C0300CC1003AD
-:1004100000CC140300CC180300CC1C0300CC240334
-:1004200000CC28030035C41F0036B01F007C704B81
-:100430000034F01F007C704B0035701F007C704B47
-:10044000007D8881007DCCC1007E5101007E9541F8
-:10045000007C9082007CD4C2007C848B009AC00314
-:10046000007C8C8B002C88010098809E00D4006D4D
-:100470000098409C00D4006E00CC084C00CC0C4D81
-:1004800000CC104800D4801A00D4C01A00800101AA
-:1004900000D5001A00CC083200D40032009482D972
-:1004A00000CA0C0000D4401E0080000000D4001ED2
-:1004B00000E4011E00D4001E00CA080000CA0C009F
-:1004C00000CA100000D4401E00CA140000D4801ED0
-:1004D00000D4C01E00D5001E00D5401E00D54034FB
-:1004E0000080000000EE001E0028040400E2001A54
-:1004F00000E2001A00D4401A00CA380000CC0803F9
-:1005000000CC0C0300CC0C0300CC0C03009882BD83
-:1005100000000000008401BB00D7A06F0080000035
-:1005200000EE001F00CA040000C2FF0000CC083427
-:1005300000C13FFF007C74CB007CC90B007D010F24
-:10054000009902B0007C738B008401BB00D7A06FC0
-:100550000080000000EE001F00CA080000281900FB
-:10056000007D898B009580140028140400CA0C00BB
-:1005700000CA100000CA1C0000CA240000E2001FCC
-:1005800000D4C01A00D5001A00D5401A00CC1803B8
-:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
-:1005A000007D9C4700984297000000000080016198
-:1005B00000D4C01A00D4401E00D4801E0080000069
-:1005C00000EE001E00E4011E00D4001E00D4401EF8
-:1005D00000EE001E00CA040000A00000007E828B16
-:1005E00000E4013E00D4001E00D4401E00EE001EB8
-:1005F00000CA040000A00000007E828B00CA080030
-:1006000000248C06000CCC060098C00600CC104ECE
-:100610000099000400D4007300E4011E00D4001E01
-:1006200000D4401E00D4801E0080000000EE001E9A
-:1006300000CA080000CA0C000034D01800251001C0
-:100640000095002100C17FFF00CA100000CA1400FD
-:1006500000CA180000D4801D00D4C01D007DB18BDD
-:1006600000C1420200C2C00100D5801D0034DC0E72
-:10067000007D5D4C007F734C00D7401E00D5001EEE
-:1006800000D5401E00C1420000C2C00000099C010C
-:100690000031DC10007F5F4C007F734C00042802A7
-:1006A000007D838000D5A86F00D5806600D7401EEE
-:1006B00000EC005E00C8240200C82402008001B8DB
-:1006C00000D6007600D4401E00D4801E00D4C01E88
-:1006D0000080000000EE001E0080000000EE001F01
-:1006E00000D4001F0080000000D4001F00D4001FB1
-:1006F0000088000000D4001F00000000000000007F
-:1007000000000000000000000000000000000000E9
-:1007100000000000000000000000000000000000D9
-:1007200000000000000000000000000000000000C9
-:1007300000000000000000000000000000000000B9
-:1007400000000000000000000000000000000000A9
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B0000000000000000000000000000000000039
-:1007C0000000000000000000000000000000000029
-:1007D0000000000000000000000000000000000019
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:1008000000010171000201780003008F0004007FE5
-:10081000000500030006003F000700320008012C1D
-:1008200000090046000A0036001001B6001700A2B9
-:100830000022013A00230149002000B400240125D0
-:100840000027004D0028006A002A0060002B00529B
-:10085000002F0065003200870034017F003C015604
-:10086000003F00720041018C0044012E00550173CD
-:100870000056017A0060000B00610034006200380D
-:1008800000630038006400380065003800660038F6
-:10089000006700380068003A00690041006A0048BB
-:1008A000006B0048006C0048006D0048006E004876
-:1008B000006F00480000000600000006000000066F
-:1008C0000000000600000006000000060000000610
-:1008D0000000000600000006000000060000000600
-:1008E00000000006000000060000000600000006F0
-:1008F00000000006000000060000000600000006E0
-:00000001FF
diff --git a/firmware/radeon/RV635_me.bin.ihex b/firmware/radeon/RV635_me.bin.ihex
deleted file mode 100644
index ba3a7e632d97..000000000000
--- a/firmware/radeon/RV635_me.bin.ihex
+++ /dev/null
@@ -1,1345 +0,0 @@
-:1000000000000000C020040000000000000000000C
-:1000100000A0000A000000000000FFFF00284621A9
-:100020000000000000000000D900480000000000AF
-:1000300000000000C02004000000000000000000DC
-:1000400000A0000A000000000000000000E0000026
-:100050000000000000010000C02946200000000050
-:1000600000000000D900480000000000000000006F
-:10007000C0200400000000000000000000A0000AF2
-:10008000000000008100000000204411000000007A
-:1000900000000001002048110000000000042004BE
-:1000A000006044110000068A0000000000600000AB
-:1000B0000000062E00000000006000000000064264
-:1000C00000000000C02008000000000000000F0039
-:1000D000002816220000000000000008002116255C
-:1000E000000000000000001800203625000000007D
-:1000F0008D000000002044110000000000000004FA
-:10010000002F022500000000000000000CE00000AD
-:1001100000000018004120000040481100000019B4
-:100120000042200000204811000000008E00000066
-:1001300000204411000000000000002800204A2D8B
-:1001400000000000900000000020441100000000AA
-:100150000000000000204805000000000000000C26
-:1001600000211622000000000000000300281625D0
-:10017000000000000000001900211A220000000009
-:100180000000000400281A26000000000000000003
-:10019000002914C5000000000000001900203625C9
-:1001A0000000000000000000003A140200000000FF
-:1001B00000000016002116250000000000000003CA
-:1001C00000281625000000000000001700200E2D5A
-:1001D00000000000FFFFFFFC00280E2300000000CD
-:1001E00000000000002914A3000000000000001718
-:1001F00000203625000000000000800000280E22AC
-:10020000000000000000000700220E230000000094
-:10021000000000000029386E0000000020000000EF
-:1002200000280E22000000000000000600210E231E
-:1002300000000000000000000029386E00000000EF
-:100240000000000000220222000000000000000068
-:1002500014E0000000000038000000002EE0000064
-:1002600000000035000000002CE000000000003716
-:100270000000000000400E2D0000003900000008C2
-:1002800000200E2D00000000000000090040122D8B
-:10029000000000460000000100400E2D0000003963
-:1002A00000000000C0200C0000000000003FFFFC28
-:1002B0000028122300000000000000020022122487
-:1002C000000000000000001F00211E2300000000AD
-:1002D0000000000014E000000000003E00000008E4
-:1002E00000401C11000000410000000D00201E2DE8
-:1002F000000000000000000F00281E270000000082
-:100300000000000300221E27000000007FC0000044
-:1003100000281A23000000000000001400211A2603
-:10032000000000000000000100331A260000000059
-:100330000000000800221A26000000000000000053
-:1003400000290CC700000000000000270020362410
-:100350000000000000007F000028122100000000C3
-:1003600000001400002F0224000000000000000024
-:100370000CE000000000004B0000000100290E23EB
-:10038000000000000000000E0020362300000000E6
-:100390000000E0000020441100000000FFF8000011
-:1003A00000294A230000000000000000003A2C024F
-:1003B000000000000000000200220E2B00000000E0
-:1003C000FC00000000280E23000000000000000FC9
-:1003D000002036230000000000001FFF00294A23F0
-:1003E000000000000000002700204A2D000000004F
-:1003F000000000000020481100000000000000295B
-:1004000000200E2D00000000060A020000294A23E9
-:100410000000000000000000002048110000000063
-:100420000000000000204811000000000000000152
-:1004300000210222000000000000000014E0000083
-:1004400000000061000000002EE000000000005FDE
-:10045000000000002CE000000000005E0000000032
-:1004600000400E2D000000620000000100400E2D33
-:10047000000000620000000A00200E2D00000000B5
-:100480000000000B0040122D0000006A0000000078
-:10049000C0200C0000000000003FFFFC00281223D9
-:1004A00000000000000000020022122400000000F2
-:1004B0007FC0000000281623000000000000001488
-:1004C0000021162500000000000000010033162561
-:1004D000000000008000000000280E230000000043
-:1004E0000000000000290CA3000000003FFFFC00FA
-:1004F00000290E23000000000000001F00211E2321
-:10050000000000000000000014E000000000006D8A
-:100510000000010000401C11000000700000000DF0
-:1005200000201E2D00000000000000F000281E2703
-:10053000000000000000000400221E270000000050
-:100540008100000000204411000000000000000DA8
-:100550000020481100000000FFFFF0FF00281A30C3
-:10056000000000000000A02800204411000000004E
-:1005700000000000002948E6000000000000A0186C
-:1005800000204411000000003FFFFFFF00284A2325
-:10059000000000000000A010002044110000000036
-:1005A00000000000002048040000000000000030AF
-:1005B0000020162D00000000000000020029162572
-:1005C0000000000000000030002036250000000080
-:1005D000000000250020162D000000000000000093
-:1005E000002F00A300000000000000000CC000006D
-:1005F00000000083000000260020162D00000000EF
-:1006000000000000002F00A4000000000000000017
-:100610000CC000000000008400000000004000004A
-:100620000000008A000000250020362300000000A2
-:100630000000002600203624000000000000001703
-:1006400000201E2D000000000000000200210227F3
-:10065000000000000000000014E000000000008A1C
-:1006600000000000006000000000066500000000BF
-:1006700000600000000006590000000200210E2268
-:10068000000000000000000014C000000000008D09
-:1006900000000012C040362000000093000000005F
-:1006A0002EE0000000000091000000002CE000009F
-:1006B000000000900000000200400E2D000000929B
-:1006C0000000000300400E2D000000920000000C0E
-:1006D00000200E2D00000000000000120020362334
-:1006E000000000000000000300210E2200000000B6
-:1006F0000000000014C00000000000980000A00CE2
-:10070000002044110000000000000000C02048004C
-:100710000000000000000000C0404800000000A0F1
-:100720000000A00C002044110000000000000000A8
-:100730000020481100000000000000002EE0000032
-:100740000000009E000000002CE000000000009D62
-:100750000000000200400E2D0000009F000000037A
-:1007600000400E2D0000009F0000000C00200E2D08
-:10077000000000000000000000204803000000000E
-:1007800000000000003A0C0200000000003F0000E2
-:1007900000280E23000000000000001000210E239E
-:1007A00000000000000000110020362300000000BF
-:1007B0000000001E0021022B0000000000000000CD
-:1007C00014C00000000000A700000016C020362062
-:1007D000000000000000001F0021022B00000000AC
-:1007E0000000000014C00000000000AA0000001576
-:1007F000C0203620000000000000000800210E2B61
-:10080000000000000000007F00280E230000000010
-:1008100000000000002F0223000000000000000084
-:100820000CE00000000000E10000000027000000D4
-:10083000000000000000000000600000000002A3B3
-:1008400000000001002F0223000000000000000053
-:100850000AE00000000000B300000000006000009B
-:100860000000013A81000000002044110000000057
-:100870000000000600204811000000000000000CED
-:1008800000221E300000000099800000002044116A
-:1008900000000000000000040020122D00000000F5
-:1008A00000000008002212240000000000000010D8
-:1008B00000201811000000000000000000291CE4C6
-:1008C0000000000000000000006048070000012F49
-:1008D0009B00000000204411000000000000000008
-:1008E00000204802000000009C000000002044118D
-:1008F00000000000000000000033146F0000000042
-:100900000000000100333E23000000000000000052
-:10091000D9004800000000000000000000203C0555
-:1009200000000000810000000020441100000000D1
-:100930000000000E00204811000000000000000030
-:1009400000201010000000000000E007002044110B
-:10095000000000000000000F0021022B000000003A
-:100960000000000014C00000000000CB00F8FF08E9
-:1009700000204811000000009800000000404811CD
-:10098000000000DC000000F000280E220000000043
-:10099000000000A0002F0223000000000000000063
-:1009A0000CC00000000000DA0000001100200E2D35
-:1009B0000000000000000001002F022300000000E2
-:1009C000000000000CE00000000000D50000000264
-:1009D000002F022300000000000000000CE00000D7
-:1009E000000000D400003F0000400C11000000D6C1
-:1009F00000001F0000400C11000000D600000F0096
-:100A000000200C11000000000038000900294A23D2
-:100A1000000000003F00000000280E2B0000000036
-:100A20000000000200220E2300000000000000076A
-:100A300000494A23000000DC00380F09002048115B
-:100A400000000000680000070020481100000000BE
-:100A50000000000800214A270000000000000000FC
-:100A60000020481100000000060A020000294A2464
-:100A700000000000000000000020481100000000FD
-:100A80000000000000204811000000000000A20249
-:100A9000002044110000000000FF000000280E228A
-:100AA000000000000000008000294A230000000030
-:100AB0000000002700200E2D00000000000000268E
-:100AC0000020122D0000000000000000002F008315
-:100AD00000000000000000000CE00000000000EA40
-:100AE00000000000006000000000065F0000000041
-:100AF00000400000000000EB00000000006000006B
-:100B000000000662000000070020222D0000000007
-:100B10000000000500220E2200000000001000006E
-:100B200000280E23000000000000000000292068BB
-:100B30000000000000000000003A0C02000000006D
-:100B4000000000EF00280E2300000000000000005D
-:100B500000292068000000000000001700200E2D72
-:100B6000000000000000000300210223000000003C
-:100B70000000000014E00000000000F80000000B7E
-:100B800000210228000000000000000014C0000046
-:100B9000000000F8000004000029222800000000E6
-:100BA0000000001400203628000000000000001C97
-:100BB00000210E22000000000000000014C0000010
-:100BC000000000FD0000A30C002044110000000004
-:100BD0000000000000204811000000000000001E7E
-:100BE00000210E22000000000000000014C00000E0
-:100BF0000000010B0000A30F0020441100000000C2
-:100C00000000001100200E2D000000000000000177
-:100C1000002F022300000000000000000CC00000B4
-:100C200000000104FFFFFFFF004048110000010B1E
-:100C300000000002002F022300000000000000005E
-:100C40000CC00000000001070000FFFF0040481139
-:100C50000000010B00000004002F02230000000030
-:100C6000000000000CC000000000010A000000FFAE
-:100C7000004048110000010B000000010020481155
-:100C8000000000000002C400002044110000000029
-:100C90000000001F00210E220000000000000000E4
-:100CA00014C00000000001120000001040210E20BE
-:100CB00000000000000000130020362300000000A8
-:100CC0000000001840224A20000000000000001030
-:100CD000C0424A20000001140000000000200C1156
-:100CE0000000000000000013002036230000000078
-:100CF000000000000020481100000000000000007B
-:100D000000204811000000000000000A002010111F
-:100D10000000000000000000002F0224000000007E
-:100D2000000000000CE000000000011B00000000BB
-:100D300000204811000000000000000100531224B0
-:100D400000000117FFBFFFFF00283A2E000000003F
-:100D50000000001B00210222000000000000000033
-:100D600014C000000000012E81000000002044118A
-:100D7000000000000000000D0020481100000000ED
-:100D80000000001800220E3000000000FC000000EF
-:100D900000280E2300000000810000000020441104
-:100DA000000000000000000E0020481100000000BC
-:100DB0000000000000201010000000000000E00E05
-:100DC000002044110000000007F8FF08002048112F
-:100DD000000000000000000000294A23000000007D
-:100DE0000000001C00201E2D000000000000000874
-:100DF00000214A27000000000000000000204811E8
-:100E000000000000060A020000294A240000000039
-:100E10000000000000204811000000000000000059
-:100E200000204811000000000000000000800000C9
-:100E300000000000810000000020441100000000BC
-:100E40000000000100204811000000000000217C8B
-:100E50000020441100000000008000000020481124
-:100E60000000000000000000002048060000000014
-:100E70000000000800214A270000000000000000D8
-:100E800017000000000000000004217F00604411F2
-:100E90000000068A0000001F002102300000000050
-:100EA0000000000014C000000000068900000004DB
-:100EB00000404C1100000135810000000020441169
-:100EC00000000000000000010020481100000000A8
-:100ED000000021F800204411000000000000001C68
-:100EE0000020481100000000000421F900604411B6
-:100EF0000000068A000000110021023000000000FE
-:100F00000000000014E000000000013C00000000B0
-:100F100000800000000000000000000000600000F1
-:100F20000000000B00000000006004110000031529
-:100F3000000000000020041100000000000000007C
-:100F400000600811000001B2000000000060000015
-:100F5000000001600000FFFF40280E20000000009C
-:100F600000000010C0211220000000000000FFFF60
-:100F7000402806200000000000000010C0210A20C8
-:100F800000000000000000000034146100000000B8
-:100F90000000000000741882000002BB0001A1FDE7
-:100FA00000604411000002E000003FFF002F022F0C
-:100FB00000000000000000000CC00000000001471D
-:100FC00000000000C040040000000001000000001C
-:100FD000006000000000000B000000000060041131
-:100FE00000000315000000000020041100000000B4
-:100FF0000000000000600811000001B200003FFF87
-:10100000002F022F00000000000000000CE0000094
-:10101000000000000000000000600000000001600F
-:101020000000001040210E20000000000000FFFF23
-:10103000C0281220000000000000001040211620EF
-:10104000000000000000FFFFC0681A20000002BB83
-:101050000001A1FD00604411000002E000003FFF1C
-:10106000002F022F00000000000000000CC0000054
-:101070000000015800000000C04004000000000112
-:101080000000225C0020441100000000000000016C
-:1010900000300A2F000000000000000100210A2299
-:1010A000000000000000000300384A220000000099
-:1010B0000000225600204411000000000000001A29
-:1010C00000204811000000000000A1FC0020441195
-:1010D0000000000000000001008048110000000036
-:1010E00000000000006000000000000B0000000095
-:1010F000006000000000018F0000000000600000A0
-:10110000000001A000003FFF002F022F00000000A0
-:10111000000000000CE000000000000000000000E3
-:1011200000202C0800000000000000000020241116
-:101130000000000000000000002028110000000056
-:10114000000022560020441100000000000000169C
-:1011500000204811000000000000225C0020441123
-:101160000000000000000003002048110000000003
-:1011700093800000002044110000000000000002E5
-:1011800000221E290000000000000000007048EB53
-:101190000000019C0000000000600000000002BB95
-:1011A00000000001403306200000000000000000A5
-:1011B000C03024090000000000003FFF002F022F74
-:1011C00000000000000000000CE000000000000033
-:1011D0000000000000600000000002A3000000000A
-:1011E000002F022100000000000000000AE00000C3
-:1011F0000000018100000000006000000000013AD2
-:101200000000000000400000000001869500000082
-:10121000002044110000000000000000002F022107
-:1012200000000000000000000CE00000000001864B
-:1012300000000000C0204800000000000000000185
-:10124000005306210000018292000000002044119A
-:101250000000000000000000C0604800000001978E
-:101260000001A1FD00204411000000000000001159
-:101270000020062D00000000000000000078042A75
-:10128000000002FB00000000002028090000000010
-:1012900000003FFF002F022F0000000000000000B0
-:1012A0000CC000000000017400000000C0400400F9
-:1012B000000000010000021000600411000003158E
-:1012C00000003FFF002F022F000000000000000080
-:1012D0000CE000000000019400000015C020362042
-:1012E0000000000000000016C020362000000000B2
-:1012F0003F800000002004110000000046000000B4
-:1013000000600811000001B2000000000080000031
-:10131000000000000000A1FC0020441100000000BB
-:1013200000003FFF002F022F00000000000000001F
-:101330000CC000000000019B00000001008048116B
-:1013400000000000000000210080481100000000A3
-:101350000000FFFF40280E200000000000000010E9
-:10136000C0211220000000000000FFFF40281620CE
-:101370000000000000000010C0811A2000000000E2
-:101380008100000000204411000000000000000661
-:1013900000204811000000000000000800221E305C
-:1013A000000000000000002900201A2D00000000AD
-:1013B0000000E0000020441100000000FFFBFF09D6
-:1013C00000204811000000000000000F0020222D26
-:1013D0000000000000001FFF00294A280000000054
-:1013E000000000060020222D000000000000000088
-:1013F000002920E80000000000000000002048084C
-:101400000000000000000000002048110000000063
-:10141000060A020000294A26000000000000000021
-:1014200000204811000000000000000000204811CA
-:101430000000000000000100002018110000000062
-:101440000000000800621E280000012F00000008B4
-:1014500000822228000000000002C0000020441189
-:10146000000000000000001500600E2D000001BD0E
-:101470000000001600600E2D000001BD0000C00835
-:1014800000204411000000000000001700200E2D75
-:10149000000000000000000014C00000000001B9BE
-:1014A0000000000000200411000000000000000007
-:1014B0000020480100000000390000000020481111
-:1014C00000000000000000000020481100000000A3
-:1014D000000000000080480200000000000000182A
-:1014E00000202E2D0000000000000000003B0D63D6
-:1014F000000000000000000800224A230000000055
-:101500000000001000224A23000000000000001824
-:1015100000224A2300000000000000000080480371
-:101520000000000000000000006000000000000B50
-:10153000000010000060041100000315000000000E
-:1015400000200411000000000000000000600811ED
-:10155000000001B2000000070021062F000000007B
-:101560000000001300200A2D000000000000000110
-:1015700000202C11000000000000FFFF4028222066
-:10158000000000000000000F0026222800000000DC
-:101590000000001040212620000000000000000F85
-:1015A000002626290000000000000000002028027C
-:1015B000000000000000225600204411000000003E
-:1015C0000000001B00204811000000000000000087
-:1015D000002F022100000000000000000CE00000CD
-:1015E000000001E00000225C002044110000000027
-:1015F0000000008100204811000000000000A1FC54
-:1016000000204411000000000000000100204811EB
-:10161000000000000000008000201C1100000000FD
-:1016200000000000002F0227000000000000000062
-:101630000CE00000000001DC000000000060000081
-:10164000000001E90000000100531E27000001D83E
-:101650000000000100202C11000000000000001F0D
-:1016600000280A22000000000000001F00282A2A8B
-:10167000000000000000000100530621000001D11D
-:101680000000225C00204411000000000000000265
-:1016900000304A2F000000000000A1FC002044118F
-:1016A00000000000000000010020481100000000C0
-:1016B0000000000100301E2F0000000000000000AC
-:1016C000002F022700000000000000000CE00000D6
-:1016D000000000000000000000600000000001E9C0
-:1016E0000000000100531E27000001E50000FFFF7D
-:1016F00040280E20000000000000000F00260E23EE
-:101700000000000000000010C021122000000000B6
-:101710000000000F0026122400000000000000005E
-:1017200000201411000000000000000000601811EB
-:10173000000002BB0001A1FD0020441100000000D8
-:1017400000000000002F022B00000000000000003D
-:101750000CE00000000001F8000000100022162834
-:1017600000000000FFFF0000002816250000000018
-:101770000000FFFF00281A29000000000000000000
-:10178000002948C500000000000000000020480AB1
-:10179000000000000000000000202C1100000000EC
-:1017A000000000100022162300000000FFFF0000D0
-:1017B00000281625000000000000FFFF00281A2462
-:1017C0000000000000000000002948C500000000E3
-:1017D0000000000000731503000002050000000077
-:1017E0000020180500000000000000000073152410
-:1017F0000000020500000000002D14C500000000DC
-:1018000000000000003008A20000000000000000FE
-:101810000020480200000000000000000020280214
-:101820000000000000000000002020030000000075
-:101830000000000000802404000000000000000FF1
-:1018400000210225000000000000000014C000007C
-:101850000000068900000000002B140500000000B5
-:1018600000000001009016250000000000000000AC
-:10187000006000000000000B000000000060041188
-:10188000000003150000000000200411000000000B
-:101890000000000000600811000001B200002256A4
-:1018A00000204411000000000000001A00294A2214
-:1018B0000000000000000000C02000000000000048
-:1018C00000003FFF002F022F00000000000000007A
-:1018D0000CE000000000000000000000C020040038
-:1018E000000000000000225C002044110000000005
-:1018F0000000000300384A21000000000000A1FCA5
-:1019000000204411000000000000000100204811E8
-:10191000000000000000FFFF40281220000000002F
-:1019200000000010C0211A20000000000000FFFF8E
-:1019300040280E200000000000000010C0211620EA
-:10194000000000000000000000741465000002BBED
-:101950000001A1FD00604411000002E00000000150
-:10196000003306210000000000000000002F0221CB
-:1019700000000000000000000CC000000000021980
-:1019800000003FFF002F022F0000000000000000B9
-:101990000CC000000000021200000000C040040063
-:1019A000000000010000000000600000000006428E
-:1019B000000000000040040F0000021300000000BF
-:1019C000006000000000062E000000000060000023
-:1019D0000000064200000210006004110000031520
-:1019E0000000000000600000000001A000000000F6
-:1019F000006000000000019C00000000006000008A
-:101A0000000002BB0000000000600000000002A314
-:101A1000938000000020441100000000000000003E
-:101A2000002048080000000000000000002F022FE6
-:101A300000000000000000000AE000000000023288
-:101A400000000000006000000000013A00000000FB
-:101A50000040000000000236950000000020441104
-:101A60000000000000000000002F022F0000000016
-:101A7000000000000CE00000000002360000000042
-:101A8000C0404800000002339200000000204411D2
-:101A90000000000000000000C0204800000000001E
-:101AA0000000225600204411000000000000001633
-:101AB00000204811000000000000225C00204411BA
-:101AC000000000000000000300204811000000009A
-:101AD0000000A1FC002044110000000000000001F3
-:101AE00000204811000000000001A1FD0020441169
-:101AF000000000000000000000600411000002FB74
-:101B000000000000C04004000000000100000000D0
-:101B1000006000000000062E0000A00C0020441110
-:101B20000000000000000000C0204800000000008D
-:101B300000000000C040480000000000000000005D
-:101B4000006000000000000B0000001840210A2087
-:101B50000000000000000003002F0222000000002F
-:101B6000000000000AE000000000024C0000001429
-:101B70000020222D00000000000801010029222879
-:101B800000000000000000140020362800000000C3
-:101B90000000A30C00204411000000000000000021
-:101BA000C02048000000000000000000C0204800E5
-:101BB0000000000000000000C0404800000002518A
-:101BC00000000000006000000000000B000000109A
-:101BD00000600411000003153F8000000020041184
-:101BE000000000000000000000600811000001B2C9
-:101BF0000000225C002044110000000000000003EF
-:101C000000204811000000000000000000600000FB
-:101C10000000027C0000001700201E2D00000000C4
-:101C20000000000100211E2700000000000000004D
-:101C300014E000000000026A0000001200201E2DC7
-:101C4000000000000000FFFF00281E270000000029
-:101C50000000000000341C2700000000000000000D
-:101C600012C000000000025F0000000000201C11F4
-:101C70000000000000000000002F00E50000000050
-:101C80000000000008C00000000002620000000028
-:101C900000201407000000000000001200201E2D8C
-:101CA000000000000000001000211E2700000000BE
-:101CB0000000000000341C4700000000000000008D
-:101CC00012C00000000002670000000000201C118C
-:101CD0000000000000000000002F00E600000000EF
-:101CE0000000000008C000000000026A00000000C0
-:101CF0000020180700000000000000000060000045
-:101D0000000002C100002256002044110000000023
-:101D1000000000000034202300000000000000004C
-:101D200012C00000000002720000000000342044D5
-:101D3000000000000000000012C00000000002715E
-:101D40000000001600404811000002760000001854
-:101D500000404811000002760000000000342044DA
-:101D6000000000000000000012C00000000002752A
-:101D70000000001700404811000002760000001922
-:101D800000204811000000000000A1FC00204411C8
-:101D900000000000000000010020481100000000C9
-:101DA0000001A1FD00604411000002E900003FFFB6
-:101DB000002F022F00000000000000000CC00000F7
-:101DC0000000025600000000C040040000000001B6
-:101DD0000000001040210620000000000000FFFF6E
-:101DE000C0280A20000000000000001040210E2042
-:101DF000000000000000FFFFC028122000000000CB
-:101E00000000001040211620000000000000FFFF2D
-:101E1000C0881A200000000081000000002044114A
-:101E20000000000000000001002048110000000038
-:101E300000042004006044110000068A0000000035
-:101E4000006000000000062E00000000C0600000DE
-:101E5000000002A30000000500200A2D0000000081
-:101E60000000000800220A22000000000000002BF1
-:101E700000201A2D000000000000001C00201E2D74
-:101E8000000000000000700000281E270000000075
-:101E90000000000000311CE6000000000000002AE5
-:101EA00000201A2D000000000000000C00221A265D
-:101EB0000000000000000000002F00E6000000000D
-:101EC0000000000006E00000000002920000000098
-:101ED00000201C11000000000000000000200C1178
-:101EE000000000000000002B00203623000000004E
-:101EF0000000001000201811000000000000000089
-:101F000000691CE20000012F9380000000204411B2
-:101F10000000000000000000002048070000000052
-:101F200095000000002044110000000000000000A7
-:101F3000002F022F00000000000000000CE0000055
-:101F40000000029D0000000100333E2F0000000051
-:101F500000000000D90048000000000092000000CE
-:101F6000002044110000000000000000C0204800D4
-:101F7000000000000000001C0040362700000000A8
-:101F80000000000CC0220A20000000000000002910
-:101F9000002036220000000000000028C04036204B
-:101FA000000000000000A2A4002044110000000076
-:101FB000000000090020481100000000A1000000FE
-:101FC00000204411000000000000000100804811C2
-:101FD000000000000000002100201E2D0000000075
-:101FE00000000000002C1CE30000000000000021A5
-:101FF00000203627000000000000002200201E2DD7
-:102000000000000000000000002C1CE400000000A4
-:1020100000000022002036270000000000000023FE
-:1020200000201E2D0000000000000000003120A351
-:102030000000000000000000002D1D07000000004F
-:1020400000000023002036270000000000000024CC
-:1020500000201E2D0000000000000000003120C400
-:102060000000000000000000002D1D07000000001F
-:10207000000000240080362700000000000000213E
-:10208000002036230000000000000022002036243B
-:10209000000000000000000000311CA30000000050
-:1020A0000000002300203627000000000000000090
-:1020B00000311CC40000000000000024008036270E
-:1020C000000000000000001A002036270000000079
-:1020D0000000001B00203628000000000000001750
-:1020E00000201E2D00000000000000020021022739
-:1020F000000000000000000014C00000000002DC2E
-:102100000000000000400000000002D90000001A9A
-:1021100000203627000000000000001B00203628A9
-:10212000000000000000001700201E2D000000002D
-:102130000000000200210227000000000000000053
-:1021400014E00000000002D9000000030021022773
-:10215000000000000000000014E00000000002DCAD
-:102160000000002300201E2D0000000000000000E1
-:10217000002E00E1000000000000000002C000008E
-:10218000000002DC0000002100201E2D00000000E5
-:1021900000000000003120A100000000000000004D
-:1021A000002E00E8000000000000000006C0000053
-:1021B000000002DC0000002400201E2D00000000B2
-:1021C00000000000002E00E20000000000000000FF
-:1021D00002C00000000002DC0000002200201E2DD2
-:1021E0000000000000000000003120C200000000DC
-:1021F00000000000002E00E80000000000000000C9
-:1022000006C00000000002DC0000000000600000CA
-:10221000000006650000000000600000000002B53C
-:102220000000000000400000000002DE000000008E
-:1022300000600000000002B5000000000060000027
-:102240000000065C0000000000400000000002DE0C
-:102250000000000000600000000002A70000000075
-:1022600000400000000002DE0000001A00201E2DC9
-:10227000000000000000001B0080222D0000000074
-:102280000000001000221E230000000000000000DB
-:1022900000294887000000000000000000311CA356
-:1022A000000000000000001000221E2700000000B7
-:1022B0000000000000294887000000000000001016
-:1022C00000221E230000000000000000003120C496
-:1022D000000000000000FFFF00282228000000008E
-:1022E0000000000000894907000000000000001005
-:1022F00000221E2300000000000000000029488783
-:10230000000000000000001000221E21000000005C
-:102310000000000000294847000000000000000005
-:1023200000311CA3000000000000001000221E2746
-:1023300000000000000000000029488700000000A5
-:102340000000000000311CA100000000000000108F
-:1023500000221E270000000000000000002948475E
-:10236000000000000000001000221E2300000000FA
-:1023700000000000003120C4000000000000FFFF4A
-:102380000028222800000000000000000029490762
-:10239000000000000000001000221E2100000000CC
-:1023A00000000000003120C2000000000000FFFF1C
-:1023B00000282228000000000000000000894907D2
-:1023C000000000000000001000221E23000000009A
-:1023D0000000000000294887000000000000000104
-:1023E00000220A210000000000000000003308A2C3
-:1023F000000000000000001000221E22000000006B
-:102400000000001000212222000000000000000057
-:1024100000294907000000000000000000311CA353
-:10242000000000000000001000221E270000000035
-:1024300000000000002948870000000000000001A3
-:1024400000220A210000000000000000003008A265
-:10245000000000000000001000221E22000000000A
-:1024600000000010002122220000000000000000F7
-:1024700000294907000000000000001000221E2370
-:102480000000000000000000003120C40000000037
-:102490000000FFFF002822280000000000000000CC
-:1024A000002949070000000000000000003808C5AE
-:1024B00000000000000000000030084100000000A3
-:1024C0000000000100220A220000000000000000BD
-:1024D000003308A2000000000000001000221E22AD
-:1024E0000000000000000010002122220000000077
-:1024F00000000000008949070000000000000017EC
-:102500000020222D000000000000000014C0000088
-:1025100000000318FFFFFFEF002806210000000065
-:10252000000000140020222D000000000000F8E050
-:1025300000204411000000000000000000294901B3
-:1025400000000000000000000089490100000000B8
-:102550000000000000204811000000000000000002
-:102560000020481100000000060A02000080481107
-:102570000000000000000000C0200000000000007B
-:1025800097000000C020441100000000000000007F
-:10259000C0204811000000008A0000000020441103
-:1025A00000000000000000000020481100000000B2
-:1025B0000000225C00204411000000000000000028
-:1025C000C0204800000000000000A1FC00204411D1
-:1025D0000000000000000000C020480000000000D3
-:1025E00000000000C0200400000000000000000007
-:1025F00000A0000A00000000970000000020441125
-:102600000000000000000000002048110000000051
-:102610008A000000002044110000000000000000BB
-:1026200000204811000000000000225C002044113E
-:102630000000000000000000C02048000000000072
-:102640000000A1FC00204411000000000000000078
-:10265000C02048000000000000000000C02004006E
-:10266000000000000000000000A0000A00000000C0
-:10267000970000000020441100000000000000004E
-:1026800000204811000000008A00000000204411D2
-:1026900000000000000000000020481100000000C1
-:1026A0000000225C00204411000000000000000037
-:1026B000C0204800000000000000A1FC00204411E0
-:1026C0000000000000000000C020480000000000E2
-:1026D0000001A1FD002044110000000000000000E6
-:1026E000D90048000000000000000000C0200400E5
-:1026F000000000000000000000A0000A0000000030
-:1027000000002257002044110000000000000003D8
-:10271000C0484A20000000000000225D0020441153
-:102720000000000000000000C04048000000000061
-:1027300000000000006000000000064200000000F1
-:10274000C0200800000000000000225C00204411AE
-:10275000000000000000000300384A2200000000D2
-:102760000000A1FC00204411000000000000000057
-:10277000C0204800000000000001A1FD002044111D
-:102780000000000000000000002F022200000000F6
-:10279000000000000CE0000000000000000000004D
-:1027A00040204800000000000000000140304A20A6
-:1027B0000000000000000002C0304A2000000000BD
-:1027C0000000000100530A220000034B0000003FFC
-:1027D000C0280A20000000008100000000204411F1
-:1027E000000000000000000100204811000000006F
-:1027F000000021F800204411000000000000001833
-:102800000020481100000000000421F9006044117C
-:102810000000068A000000110021023000000000C4
-:102820000000000014E00000000003540000001449
-:10283000002F022200000000000000000CC0000079
-:10284000000003640000201000204411000000007C
-:102850000000800000204811000000000001A2A438
-:102860000020441100000000000000000060480249
-:102870000000036E00002100002044110000000051
-:1028800000000000C0204800000000000000000020
-:10289000C02048000000000000000000C0204800E8
-:1028A0000000000000000000C040480000000000E0
-:1028B00000000004002F02220000000000000000C1
-:1028C0000CC000000000036A00002010002044112A
-:1028D00000000000000080000020481100000000FF
-:1028E0000001A2A40020441100000000000000002C
-:1028F000004048020000035F00000028002F022271
-:1029000000000000000000000CC00000000005BD39
-:102910000001A2A4002044110000000000000000FB
-:10292000004048020000035F0000002C0020362613
-:102930000000000000000049002018110000000005
-:102940000000003F002048110000000000000001CE
-:1029500000331A260000000000000000002F0226AD
-:1029600000000000000000000CC000000000037028
-:102970000000002C00801A2D000000000000003F25
-:10298000C0280A200000000000000015002F0222CD
-:1029900000000000000000000CE0000000000386C2
-:1029A00000000006002F02220000000000000000CE
-:1029B0000CE00000000003B100000016002F02220E
-:1029C00000000000000000000CE00000000003B563
-:1029D00000000020002F0222000000000000000084
-:1029E0000CE000000000039C0000000F002F0222FA
-:1029F00000000000000000000CE00000000003A840
-:102A000000000010002F0222000000000000000063
-:102A10000CE00000000003A80000001E002F0222AE
-:102A200000000000000000000CE000000000039027
-:102A30000000A2A4002044110000000000000000DB
-:102A400000404802000000000800000000290A229F
-:102A5000000000000000000340210E2000000000E4
-:102A60000000000CC021122000000000000800003F
-:102A7000002812240000000000000014C0221620CC
-:102A80000000000000000000002914A40000000065
-:102A90000000A2A40020441100000000000000007B
-:102AA000002948A2000000000000A1FE00204411FF
-:102AB000000000000000000000404803000000008B
-:102AC000810000000020441100000000000000010F
-:102AD0000020481100000000000021F800204411EF
-:102AE0000000000000000016002048110000000057
-:102AF000000421F9006044110000068A000000155E
-:102B000000210230000000000000000014E000007E
-:102B1000000003920000210E00204411000000007C
-:102B200000000000C020480000000000000000007D
-:102B3000C0204800000000000000A2A400204411B2
-:102B400000000000000000000040480200000000FB
-:102B5000810000000020441100000000000000017E
-:102B60000020481100000000000021F8002044115E
-:102B700000000000000000170020481100000000C5
-:102B8000000421F9006044110000068A00000003DF
-:102B900000210230000000000000000014E00000EE
-:102BA0000000039E000021080020441100000000E6
-:102BB00000000000C02048000000000000000000ED
-:102BC000C0204800000000000000A2A40020441122
-:102BD000000000000000000000404802000000006B
-:102BE0000000A2A40020441100000000000000002A
-:102BF0000020480200000000800000000020441176
-:102C0000000000000000000000204811000000004B
-:102C100081000000002044110000000000000010AE
-:102C200000204811000000000000000000200010FB
-:102C3000000000000000000014C00000000003AE0F
-:102C40000000000000400000000000000000201014
-:102C50000020441100000000000080000020481106
-:102C6000000000000001A2A40020441100000000A8
-:102C70000000000600404811000000000000201085
-:102C800000204411000000000000800000204811D6
-:102C9000000000000001A2A4002044110000000078
-:102CA00000000016006048110000036E00000000E4
-:102CB000004000000000000000000000C0200800EC
-:102CC0000000000000000000C0200C000000000018
-:102CD0000000001D00210223000000000000000091
-:102CE00014E00000000003CE810000000020441129
-:102CF000000000000000000100204811000000005A
-:102D0000000021F80020441100000000000000181D
-:102D10000020481100000000000421F90060441167
-:102D20000000068A000000110021023000000000AF
-:102D30000000000014E00000000003C000002100BB
-:102D400000204411000000000000000000204802A4
-:102D50000000000000000000002048030000000008
-:102D6000BABECAFE0020481100000000CAFEBABE6A
-:102D70000020481100000000000020100020441135
-:102D8000000000000000800000204811000000004A
-:102D90000000A2A400204411000000000000000474
-:102DA0000040481100000000000021700020441184
-:102DB00000000000000000000020480200000000A9
-:102DC0000000000000204803000000008100000017
-:102DD00000204411000000000000000A00204811FB
-:102DE00000000000000000000020001000000000B3
-:102DF0000000000014C00000000003D38C0000009D
-:102E00000020441100000000CAFEBABE0040481174
-:102E100000000000810000000020441100000000BC
-:102E200000000001002048110000000000003FFFEA
-:102E300040280A20000000008000000040280E20EA
-:102E40000000000040000000C02812200000000028
-:102E500000040000006946220000068A000000000D
-:102E6000002014100000000000000000002F0223CA
-:102E700000000000000000000CC00000000003E1A2
-:102E800000000000C0401800000003E400003FFF05
-:102E9000C0281A2000000000000400000069462637
-:102EA0000000068A0000000000201810000000004A
-:102EB00000000000002F02240000000000000000BD
-:102EC0000CC00000000003E700000000C0401C0030
-:102ED000000003EA00003FFFC0281E2000000000A1
-:102EE00000040000006946270000068A0000000078
-:102EF00000201C1000000000000000000020440220
-:102F00000000000000000000002820C500000000B4
-:102F100000000000004948E800000000A580000013
-:102F200000200811000000000000200000200C110B
-:102F30000000000083000000006044110000041243
-:102F4000000000000020440200000000000000001B
-:102F5000C0204800000000000000000040204800A1
-:102F6000000000000000001FC0210220000000003F
-:102F70000000000014C00000000003F70000201053
-:102F800000204411000000000000800000204811D3
-:102F9000000000000000FFFFC0481220000003FFF7
-:102FA000A780000000200811000000000000A00021
-:102FB00000200C110000000083000000006044119C
-:102FC0000000041200000000002044020000000085
-:102FD00000000000C02048000000000000000000C9
-:102FE000C0204800000000000000FFFFC0281220A1
-:102FF00000000000830000000020441100000000D9
-:103000000000000000304883000000008400000041
-:10301000002044110000000000000000C020480013
-:1030200000000000000000001D0000000000000083
-:103030008300000000604411000004120000000042
-:10304000C040040000000001A98000000020081119
-:10305000000000000000C00000400C11000003FA56
-:10306000AB80000000200811000000000000F8E024
-:1030700000400C11000003FAAD8000000020081190
-:10308000000000000000F88000400C11000003FA6E
-:10309000B380000000200811000000000000F3FCD5
-:1030A00000400C11000003FAAF800000002008115E
-:1030B000000000000000E00000400C11000003FAD6
-:1030C000B180000000200811000000000000F000A6
-:1030D00000400C11000003FA83000000002044119E
-:1030E00000000000000021480020481100000000FE
-:1030F00084000000002044110000000000000000D7
-:10310000C020480000000000000000001D0000007A
-:10311000000000000000000000800000000000002F
-:1031200001182000C0304620000000000000000010
-:10313000D90048000000000000000000C02004008A
-:10314000000000000000000000A0000A00000000D5
-:103150000218A000C030462000000000000000005F
-:10316000D90048000000000000000000C02004005A
-:10317000000000000000000000A0000A00000000A5
-:103180000318C000C030462000000000000000000E
-:10319000D90048000000000000000000C02004002A
-:1031A000000000000000000000A0000A0000000075
-:1031B0000418F8E0C03046200000000000000000C5
-:1031C000D90048000000000000000000C0200400FA
-:1031D000000000000000000000A0000A0000000045
-:1031E0000518F880C03046200000000000000000F4
-:1031F000D90048000000000000000000C0200400CA
-:10320000000000000000000000A0000A0000000014
-:103210000618E000C030462000000000000000005A
-:10322000D90048000000000000000000C020040099
-:10323000000000000000000000A0000A00000000E4
-:103240000718F000C0304620000000000000000019
-:10325000D90048000000000000000000C020040069
-:10326000000000000000000000A0000A00000000B4
-:103270000818F3FCC03046200000000000000000E9
-:10328000D90048000000000000000000C020040039
-:10329000000000000000000000A0000A0000000084
-:1032A0000000003000200A2D000000000000000097
-:1032B000C0290C4000000000000000300020362330
-:1032C0000000000000000000C0200400000000001A
-:1032D0000000000000A0000A0000000086000000BE
-:1032E00000204411000000000000000000404801E0
-:1032F0000000000085000000C02044110000000014
-:103300000000000000404801000000000000217C97
-:10331000002044110000000000000000C020480010
-:103320000000000000000000C02048000000000075
-:1033300000000000C02048000000000081000000E4
-:10334000002044110000000000000001002048118E
-:103350000000000000000000C02008000000000085
-:103360000000000017000000000000000004217FA2
-:10337000006044110000068A0000001F0021023096
-:10338000000000000000000014C000000000000069
-:103390000000000000404C02000004480000000053
-:1033A000C0200C000000000000000000C020100041
-:1033B0000000000000000000C02014000000000019
-:1033C00000000000C0201800000000000000000005
-:1033D000C0201C000000000000007F0000280A211F
-:1033E0000000000000004500002F02220000000045
-:1033F000000000000CE00000000004560000000087
-:10340000C0202000000000000000000017000000A5
-:10341000000000000000001000280A230000000047
-:1034200000000010002F0222000000000000000039
-:103430000CE000000000045E810000000020441148
-:103440000000000000000001002048110000000002
-:1034500000040000006946240000068A0000000005
-:1034600000400000000004638100000000204411BF
-:1034700000000000000000000020481100000000D3
-:103480000000216D00204411000000000000000039
-:103490000020480400000000000000000060480513
-:1034A0000000068F00000000002824F0000000004B
-:1034B0000000000700280A230000000000000001AF
-:1034C000002F022200000000000000000AE00000BF
-:1034D0000000046A00000000002F00C90000000086
-:1034E0000000000004E00000000004830000000071
-:1034F000004000000000049000000002002F0222A3
-:1035000000000000000000000AE000000000046F5E
-:1035100000000000002F00C90000000000000000B3
-:1035200002E00000000004830000000000400000F2
-:103530000000049000000003002F022200000000A1
-:10354000000000000AE00000000004740000000019
-:10355000002F00C900000000000000000CE0000087
-:103560000000048300000000004000000000049000
-:1035700000000004002F02220000000000000000F4
-:103580000AE000000000047900000000002F00C9DC
-:1035900000000000000000000AE0000000000483BA
-:1035A0000000000000400000000004900000000542
-:1035B000002F022200000000000000000AE00000CE
-:1035C0000000047E00000000002F00C90000000081
-:1035D0000000000006E0000000000483000000007E
-:1035E000004000000000049000000006002F0222AE
-:1035F00000000000000000000AE00000000004835A
-:1036000000000000002F00C90000000000000000C2
-:1036100008E00000000004830000000000400000FB
-:103620000000049000007F0000280A210000000034
-:1036300000004500002F02220000000000000000F2
-:103640000AE00000000000000000000800210A233A
-:10365000000000000000000014C000000000048D05
-:10366000000021690020441100000000000000005B
-:10367000C02048000000000000000000C0204800FA
-:103680000000000000000000C02048000000000012
-:10369000CAFEBABE00404811000000000000000051
-:1036A000C02044000000000000000000C020000016
-:1036B0000000000000000000C040480000000000C2
-:1036C00000007F0000280A210000000000004500E3
-:1036D000002F022200000000000000000AE00000AD
-:1036E0000000049600000000C02000000000000060
-:1036F00000000000C02000000000000000000000EA
-:10370000C0400000000000000000000000404C0825
-:103710000000045600000000C02008000000000067
-:103720000000001040210E200000000000000011E9
-:10373000402112200000000000000012402116204D
-:10374000000000000000216900204411000000007A
-:1037500000000000002048020000000000000000FF
-:1037600000210225000000000000000014E000001D
-:10377000000004A000040000C0494A20000004A189
-:10378000FFFBFFFFC0284A200000000000000000EF
-:1037900000210223000000000000000014E00000EF
-:1037A000000004AD00000000C02048000000000040
-:1037B00000000000C02048000000000000000000E1
-:1037C00000210224000000000000000014C00000DE
-:1037D00000000000810000000020441100000000F3
-:1037E0000000000C00204811000000000000000054
-:1037F00000200010000000000000000014C00000C5
-:10380000000004A9A00000000020441100000000F6
-:10381000CAFEBABE0040481100000000810000004E
-:1038200000204411000000000000000400204811A6
-:10383000000000000000216B002044110000000087
-:1038400000000000C02048100000000081000000BF
-:103850000020441100000000000000050020481175
-:10386000000000000000216C002044110000000056
-:1038700000000000C0204810000000000000000010
-:10388000002F022400000000000000000CE00000F7
-:10389000000000000000000000400000000004A73D
-:1038A00000000000C0210A2000000000000000000D
-:1038B00014C00000000004C081000000002044117A
-:1038C000000000000000000000204811000000007F
-:1038D0000000216D002044110000000000000000E5
-:1038E000C02048000000000000000000C060480048
-:1038F0000000068F0000000000400000000004C42B
-:1039000081000000002044110000000000000001C0
-:10391000002048110000000000040000C0294620DB
-:103920000000000000000000C06000000000068AE7
-:103930000000000100210222000000000000000041
-:1039400014C00000000004CB0000216900204411D5
-:103950000000000000000000C0204800000000003F
-:1039600000000000C020480000000000000000002F
-:103970000020481000000000CAFEBABE00404811F6
-:103980000000000000000000C02044000000000013
-:1039900000000000C040481000000000810000004E
-:1039A0000020441100000000000000010020481128
-:1039B00000000000000021F8002044110000000079
-:1039C0000000000E0020481100000000000421F952
-:1039D000006044110000068A00000000002102304F
-:1039E000000000000000000014C00000000004CD32
-:1039F00000002180002044110000000000000000B1
-:103A0000C02048000000000000000000C0200000AE
-:103A10000000000000000000C0204800000000007E
-:103A200000000000C02000000000000000000000B6
-:103A3000C0404800000000000000000300333E2F9B
-:103A40000000000000000001002102210000000031
-:103A50000000000014E00000000004FD0000002C45
-:103A600000200A2D000000000004000018E00C11E6
-:103A7000000004EC0000000100333E2F00000000B5
-:103A80000000216900204411000000000000000037
-:103A90000020480200000000000000000020480351
-:103AA000000000000000000800300A2200000000B2
-:103AB00000000000C02048000000000000000000DE
-:103AC000C0204800000000000000216900204411CF
-:103AD000000000000000000000204802000000007C
-:103AE0000000000000204803000000000000000863
-:103AF00000300A220000000000000000C020480042
-:103B00000000000000000000D8C04800000004E0F1
-:103B100000002169002044110000000000000000A6
-:103B200000204802000000000000000000204803C0
-:103B3000000000000000000800300A220000000021
-:103B400000000000C020480000000000000000004D
-:103B5000C0204800000000000000002D0020122DB1
-:103B6000000000000000000000290C83000000009D
-:103B70000000216900204411000000000000000046
-:103B80000020480200000000000000000020480360
-:103B9000000000000000000800300A2200000000C1
-:103BA00000000000C02048000000000000000000ED
-:103BB000C020480000000000000000110021022485
-:103BC000000000000000000014C000000000000021
-:103BD0000000000000400000000004A70000002CCE
-:103BE000C0203620000000000000002DC04036201C
-:103BF000000000000000000F002102210000000072
-:103C00000000000014C000000000050200000000D9
-:103C1000006000000000000B00000000D900000060
-:103C20000000000000000000C0400400000000018F
-:103C3000B50000000020441100000000000020003A
-:103C40000020481100000000B600000000204411D0
-:103C5000000000000000A00000204811000000004B
-:103C6000B700000000204411000000000000C00068
-:103C70000020481100000000B8000000002044119E
-:103C8000000000000000F8E00020481100000000E3
-:103C9000B900000000204411000000000000F8807E
-:103CA0000020481100000000BA000000002044116C
-:103CB000000000000000E0000020481100000000AB
-:103CC000BB00000000204411000000000000F000D4
-:103CD0000020481100000000BC000000002044113A
-:103CE000000000000000F3FC00204811000000006C
-:103CF00081000000002044110000000000000002CC
-:103D00000020481100000000000000FF00280E30D5
-:103D10000000000000000000002F0223000000004F
-:103D2000000000000CC000000000051600000000AC
-:103D3000C0200800000000000000000014C00000C7
-:103D40000000052B0000000000200C110000000006
-:103D50000000001C00203623000000000000002BA3
-:103D60000020362300000000000000290020362338
-:103D700000000000000000280020362300000000A2
-:103D8000000000170020362300000000000000257E
-:103D9000002036230000000000000026002036230B
-:103DA0000000000000000015002036230000000085
-:103DB000000000160020362300000000FFFFE00096
-:103DC00000200C110000000000000021002036231C
-:103DD0000000000000000022002036230000000048
-:103DE00000001FFF00200C11000000000000002355
-:103DF00000203623000000000000002400203623AD
-:103E000000000000F1FFFFFF00283A2E0000000034
-:103E10000000001AC0220E20000000000000000078
-:103E20000029386E000000008100000000204411CD
-:103E30000000000000000006002048110000000003
-:103E40000000002A4020362000000000870000000B
-:103E5000002044110000000000000000C0204800C5
-:103E6000000000000000A1F4002044110000000048
-:103E700000000000002048100000000000000000CA
-:103E800000200C110000000000000030002036234C
-:103E9000000000009D000000002044110000000010
-:103EA0000000001F40214A20000000009600000092
-:103EB000002044110000000000000000C020480065
-:103EC0000000000000000000C0200C000000000006
-:103ED00000000000C0201000000000000000001FD3
-:103EE00000211624000000000000000014C00000A3
-:103EF000000000000000001D00203623000000002C
-:103F00000000000300281E2300000000000000083D
-:103F10000022222300000000FFFFF00000282228DA
-:103F20000000000000000000002920E80000000060
-:103F30000000001F002036280000000000000018CC
-:103F400000211E2300000000000000200020362772
-:103F50000000000000000002002216240000000003
-:103F600000000000003014A8000000000000001E47
-:103F700000203625000000000000000300211A2464
-:103F8000000000001000000000281A2600000000B9
-:103F9000EFFFFFFF00283A2E0000000000000000A5
-:103FA000004938CE000006780000000140280A20B1
-:103FB000000000000000000640280E200000000065
-:103FC00000000300C02812200000000000000008CC
-:103FD000002112240000000000000000C020162074
-:103FE0000000000000000000C0201A2000000000B7
-:103FF000000000000021022200000000000000007C
-:1040000014C000000000056381000000002044117E
-:104010000000000000000001002048110000000026
-:104020000000225800300A240000000000040000B4
-:10403000006946220000068A000021690020441120
-:104040000000000000000000002048050000000003
-:104050000002000000294A260000000000000000C5
-:104060000020481000000000CAFEBABE002048111F
-:104070000000000000000002002F022300000000EA
-:10408000000000000CC000000000056B00000000F4
-:10409000C0201C100000000000000000C040000014
-:1040A0000000057900000002002F0223000000003C
-:1040B000000000000CC000000000056B8100000043
-:1040C0000020441100000000000000010020481101
-:1040D000000000000000225800300A240000000008
-:1040E00000040000006946220000068A000000006B
-:1040F000C0201C100000000000000000C0400000B4
-:104100000000057900000000002F022300000000DD
-:10411000000000000CC000000000056F000000005F
-:10412000C0201C000000000000000000C040000093
-:104130000000057900000004002F022300000000A9
-:10414000000000000CC000000000057781000000A6
-:104150000020441100000000000000000020481171
-:10416000000000000000216D00204411000000004C
-:1041700000000000C0204800000000000000000017
-:10418000C06048000000068F0000000000401C10C6
-:104190000000057900000000C020000000000000C1
-:1041A00000000000C040000000000000000000000F
-:1041B0000EE000000000057B000000000060000031
-:1041C000000005C600000000002F022400000000CF
-:1041D000000000000CC000000000058C0000A2B729
-:1041E00000204411000000000000000000204807EB
-:1041F00000000000810000000020441100000000C9
-:104200000000000100204811000000000004A2B6D8
-:10421000006044110000068A0000001A00212230CC
-:104220000000000000000006002226300000000010
-:1042300000042004006044110000068A0000A2C4AB
-:10424000002044110000000000000000003048E998
-:10425000000000000000000000E000000000058AEF
-:104260000000A2D100204411000000000000000066
-:1042700000404808000000000000A2D100204411C6
-:10428000000000000000000100504A28000000006B
-:1042900000000001002F02240000000000000000C8
-:1042A0000CC000000000059D0000A2BB00204411CE
-:1042B000000000000000000000204807000000008F
-:1042C00081000000002044110000000000000001F7
-:1042D00000204811000000000004A2BA0060441150
-:1042E0000000068A0000001A0021223000000000B1
-:1042F0000000000600222630000000000004200418
-:10430000006044110000068A0000A2C5002044118C
-:104310000000000000000000003048E9000000003C
-:104320000000000000E000000000059B0000A2D299
-:104330000020441100000000000000000040480878
-:10434000000000000000A2D2002044110000000084
-:104350000000000100504A28000000000000000298
-:10436000002F022400000000000000000CC000002C
-:10437000000005AE0000A2BF0020441100000000B4
-:10438000000000000020480700000000810000003D
-:10439000002044110000000000000001002048112E
-:1043A000000000000004A2BE006044110000068A64
-:1043B0000000001A0021223000000000000000066A
-:1043C0000022263000000000000420040060441198
-:1043D0000000068A0000A2C6002044110000000070
-:1043E00000000000003048E900000000000000006C
-:1043F00000E00000000005AC0000A2D30020441142
-:10440000000000000000000000404808000000001C
-:104410000000A2D3002044110000000000000001B1
-:1044200000504A28000000000000A2C300204411F0
-:10443000000000000000000000204807000000000D
-:104440008100000000204411000000000000000175
-:1044500000204811000000000004A2C200604411C6
-:104460000000068A0000001A00212230000000002F
-:104470000000000600222630000000000004200496
-:10448000006044110000068A0000A2C70020441109
-:104490000000000000000000003048E900000000BB
-:1044A0000000000000E00000000005BB0000A2D4F6
-:1044B00000204411000000000000000000404808F7
-:1044C000000000000000A2D4002044110000000001
-:1044D0000000000100504A28000000008500000094
-:1044E00000204411000000000000000000204801EE
-:1044F000000000000000304A0020441100000000CD
-:104500000100000000204811000000000000000031
-:1045100000400000000005C1A4000000C0204411BC
-:104520000000000000000000C04048000000000043
-:1045300000000000C0600000000005C60000000090
-:10454000C0400400000000010000002C00203621C3
-:104550000000000081000000002044110000000065
-:1045600000000006002048110000000000000000CC
-:10457000002F023000000000000000000CC000000E
-:10458000000005CD00000000002004110000000024
-:104590000000003000403621000005E0000000303F
-:1045A0000020062D0000000000007E0000280621EB
-:1045B0000000000000000000002F022100000000A9
-:1045C000000000000CE00000000005E08100000099
-:1045D00000204411000000000000000100204811EC
-:1045E000000000000004A092006044110000068A50
-:1045F0000000003100203630000000000004A093CD
-:10460000006044110000068A0000003200203630AD
-:10461000000000000004A2B6006044110000068AF9
-:104620000000003300203630000000000004A2BA71
-:10463000006044110000068A00000034002036307B
-:10464000000000000004A2BE006044110000068AC1
-:104650000000003500203630000000000004A2C237
-:10466000006044110000068A000000360020363049
-:104670000000000000042004006044110000068ACD
-:104680000001A2A400204411000000000000003F2F
-:1046900000204811000000000000003F00204811E9
-:1046A000000000000000003F002048110000000052
-:1046B0000000003F0020481100000000000000053D
-:1046C00000204811000000000000A1F40020441167
-:1046D0000000000000000000002048110000000061
-:1046E00088000000002044110000000000000001CC
-:1046F000002048110000000081000000002044114B
-:10470000000000000000000600204811000000002A
-:1047100000000001002F0230000000000000000037
-:104720000CE0000000000629000000300020062DEB
-:104730000000000000000000002F02210000000027
-:10474000000000000CE000000000062981000000CD
-:10475000002044110000000000000001002048116A
-:104760000000000000007E0000280621000000007C
-:1047700000000000002F02210000000000000000E7
-:104780000CE00000000006020000A092002044118E
-:10479000000000000000003100204A2D0000000051
-:1047A0000000A0930020441100000000000000322F
-:1047B00000204A2D000000000000A2B60020441195
-:1047C000000000000000003300204A2D000000001F
-:1047D0000000A2BA002044110000000000000034D4
-:1047E00000204A2D000000000000A2BE002044115D
-:1047F000000000000000003500204A2D00000000ED
-:104800000000A2C200204411000000000000003699
-:1048100000204A2D00000000000000300020062D7E
-:1048200000000000000001FF002806210000000039
-:1048300000000000002F0221000000000000000026
-:104840000CE000000000062800000000002102210A
-:10485000000000000000000014C000000000060B73
-:104860000004A003006044110000068A0000A003B9
-:10487000002044110000000000000000002048104B
-:1048800000000000000000010021062100000000DF
-:104890000000000014C00000000006100004A0107A
-:1048A000006044110000068A0000A010002044119E
-:1048B0000000000000000000002048100000000080
-:1048C000000000010021062100000000000000009F
-:1048D000002F022100000000000000000CE000009A
-:1048E000000006280004A011006044110000068AA0
-:1048F0000000A01100204411000000000000000092
-:1049000000204810000000000004A01200604411C4
-:104910000000068A0000A0120020441100000000E0
-:104920000000000000204810000000000004A01358
-:10493000006044110000068A0000A013002044110A
-:1049400000000000000000000020481000000000EF
-:104950000004A014006044110000068A0000A014A6
-:10496000002044110000000000000000002048105A
-:10497000000000000004A015006044110000068A39
-:104980000000A015002044110000000000000000FD
-:1049900000204810000000000004A0160060441130
-:1049A0000000068A0000A01600204411000000004C
-:1049B0000000000000204810000000000004A017C4
-:1049C000006044110000068A0000A0170020441176
-:1049D000000000000000000000204810000000005F
-:1049E00000042004006044110000068A0000002C2E
-:1049F0000080062D00000000FF0000000020441190
-:104A0000000000000000000000204811000000002D
-:104A1000000000010020481100000000000000021A
-:104A20000080481100000000000000000EE00000BF
-:104A30000000063A000000300020062D00000000B3
-:104A40000000000200280621000000000000000015
-:104A5000002F022100000000000000000CE0000018
-:104A60000000063881000000002044110000000012
-:104A70000000000100204811000000000004200494
-:104A8000006044110000068A000010000020081198
-:104A9000000000000000002B002036220000000073
-:104AA00000000000006000000000063E0000000062
-:104AB00000600000000005C69800000000204411BE
-:104AC000000000000000000000804811000000000D
-:104AD00000000000C06000000000063E0000000072
-:104AE000C0400400000000010000A2A40020441106
-:104AF000000000000000002200204811000000001B
-:104B000089000000002044110000000000000001A6
-:104B1000004048110000062A9700000000204411C0
-:104B2000000000000000000000204811000000000C
-:104B30008A00000000204411000000000000000076
-:104B4000004048110000062A00000000006000003C
-:104B50000000065900002010002044110000000051
-:104B60000000800000204811000000000001A2A405
-:104B7000C020441100000000000000160060481131
-:104B80000000036E0000201000204411000000000F
-:104B9000000100000020481100000000810000001A
-:104BA0000020441100000000000000010020481116
-:104BB000000000000000217C0020441100000000E3
-:104BC000098000000020481100000000FFFFFFFFE7
-:104BD00000204811000000000000000000204811E3
-:104BE00000000000000000001700000000000000AE
-:104BF0000004217F006044110000068A0000001FAD
-:104C000000210230000000000000000014C000007D
-:104C1000000000000000000400404C11000006539A
-:104C2000000000000040000000000000000000172D
-:104C300000201E2D000000000000000400291E2797
-:104C40000000000000000017008036270000000070
-:104C50000000001700201E2D00000000FFFFFFFBDA
-:104C600000281E27000000000000001700803627E3
-:104C7000000000000000001700201E2D00000000B2
-:104C80000000000800291E27000000000000001797
-:104C900000803627000000000000001700201E2DB5
-:104CA00000000000FFFFFFF700281E2700000000A3
-:104CB00000000017008036270000000000002010D0
-:104CC0000020441100000000000080000020481176
-:104CD000000000000001A2A4002044110000000018
-:104CE00000000016006048110000036E0000201054
-:104CF00000204411000000000001000000204811C5
-:104D0000000000000000217C002044110000000091
-:104D1000018000000020481100000000FFFFFFFF9D
-:104D20000020481100000000000000000020481191
-:104D3000000000000000000017000000000000005C
-:104D4000810000000020441100000000000000016C
-:104D500000204811000000000004217F0060441181
-:104D60000000068A0000001F002102300000000041
-:104D70000000000014C000000000068900000010C0
-:104D800000404C110000066F00000000C02004002D
-:104D9000000000000000000038C00000000000001B
-:104DA0000000001D00200A2D000000000000001E71
-:104DB00000200E2D000000000000001F0020122D1A
-:104DC00000000000000000200020162D0000000060
-:104DD00000002169002044110000000000000000D4
-:104DE00000204804000000000000000000204805EA
-:104DF000000000000000000000204801000000004A
-:104E0000CAFEBABE002048110000000000000004E5
-:104E1000003012240000000000000000002F006499
-:104E200000000000000000000CC000000000068828
-:104E30000000000300281A22000000000000000803
-:104E40000022122200000000FFFFF00000281224C0
-:104E50000000000000000000002910C40000000055
-:104E60000000001F00403624000000000000000089
-:104E70000080000000000000000000001AC00000D8
-:104E80000000068A9F00000000204411000000007E
-:104E9000CAFEBABE00204811000000000000000059
-:104EA0001AE000000000068D0000000000800000F5
-:104EB00000000000000000001AC000000000068F83
-:104EC0009E0000000020441100000000CAFEBABE8F
-:104ED0000020481100000000000000001AE000005F
-:104EE00000000692000000000080000000000000AA
-:104EF00000000000006000000000000B0000100037
-:104F000000600411000003150000000000200411DF
-:104F1000000000000000000000600811000001B265
-:104F20000000225C0020441100000000000000038B
-:104F3000002048110000000000002256002044110B
-:104F4000000000000000001B0020481100000000CD
-:104F50000000A1FC0020441100000000000000013E
-:104F600000204811000000000001A1FDC0204411F4
-:104F7000000000000000002100201E2D00000000A5
-:104F80000000001000221E27000000000000002486
-:104F90000020222D000000000000FFFF0028222832
-:104FA0000000000000000000002949070000000088
-:104FB0000000000000204811000000000000002256
-:104FC0000020222D000000000000FFFF0028222802
-:104FD0000000000000000000002949070000000058
-:104FE0000000000000204811000000000000002325
-:104FF00000201E2D000000000000001000221E27CF
-:105000000000000000000000002949070000000027
-:1050100000000000004048110000000000000000F7
-:105020000000000000000000000000000000000080
-:105030000000000000000000000000000000000070
-:105040000000000000000000000000000000000060
-:105050000000000000000000000000000000000050
-:105060000000000000000000000000000000000040
-:105070000000000000000000000000000000000030
-:105080000000000000000000000000000000000020
-:105090000000000000000000000000000000000010
-:1050A0000000000000000000000000000000000000
-:1050B00000000000000000000000000000000000F0
-:1050C00000000000000000000000000000000000E0
-:1050D00000000000000000000000000000000000D0
-:1050E00000000000000000000000000000000000C0
-:1050F00000000000000000000000000000000000B0
-:10510000000000000000000000000000000000009F
-:10511000000000000000000000000000000000008F
-:10512000000000000000000000000000000000007F
-:10513000000000000000000000000000000000006F
-:10514000000000000000000000000000000000005F
-:10515000000000000000000000000000000000004F
-:10516000000000000000000000000000000000003F
-:10517000000000000000000000000000000000002F
-:10518000000000000000000000000000000000001F
-:10519000000000000000000000000000000000000F
-:1051A00000000000000000000000000000000000FF
-:1051B00000000000000000000000000000000000EF
-:1051C00000000000000000000000000000000000DF
-:1051D00000000000000000000000000000000000CF
-:1051E00000000000000000000000000000000000BF
-:1051F00000000000000000000000000000000000AF
-:10520000000000000000000000000000000000009E
-:10521000000000000000000000000000000000008E
-:10522000000000000000000000000000000000007E
-:10523000000000000000000000000000000000006E
-:10524000000000000000000000000000000000005E
-:10525000000000000000000000000000000000004E
-:10526000000000000000000000000000000000003E
-:10527000000000000000000000000000000000002E
-:10528000000000000000000000000000000000001E
-:10529000000000000000000000000000000000000E
-:1052A00000000000000000000000000000000000FE
-:1052B000014204FF05BD02500000000001C3016867
-:1052C000043F05BD00000000022502090250015103
-:1052D000000000000223024502A00241000000007D
-:1052E00003D705BD05BD05BD000000000646064705
-:1052F000031F05BD0000000005BD05C203200340DB
-:1053000000000000032A0282034203340000000070
-:1053100005BD05BD05BD05BD0000000005BD054E70
-:1053200005BD05BD0000000003BA05BD04B8034477
-:10533000000000000497044D043D05BD000000007E
-:1053400004CD05BD044104DA00000000044D05044D
-:10535000035103750000000005BD05BD05BD05BD79
-:105360000000000005BD05BD05BD05BD0000000035
-:1053700005BD05BD063C05C40000000005BD05BD1A
-:10538000000705BD0000000005BD05BD05BD05BD4C
-:105390000000000005BD05BD05BD05BD0000000005
-:1053A00003F803ED0408040600000000040E040ADC
-:1053B000040C041000000000041C04180424042041
-:1053C00000000000042C0428043404300000000015
-:1053D00005BD05BD043805BD0000000005BD05BDC7
-:1053E00005BD05BD0000000005BD05BD05BD05BD31
-:1053F000000000000002067606940006000000008F
-:00000001FF
diff --git a/firmware/radeon/RV635_pfp.bin.ihex b/firmware/radeon/RV635_pfp.bin.ihex
deleted file mode 100644
index f55292c97b79..000000000000
--- a/firmware/radeon/RV635_pfp.bin.ihex
+++ /dev/null
@@ -1,145 +0,0 @@
-:1000000000CA040000A00000007E828B007C038BED
-:10001000008001B8007C038B00D4401E00EE001E5F
-:1000200000CA040000A00000007E828B00C41838C3
-:1000300000CA240000CA2800009581A800C41C3A08
-:1000400000C3C00000CA080000CA0C00007C744B4A
-:1000500000C200050099C00000C41C3A007C744C2A
-:1000600000C0FFF000042C0400309002007D250049
-:1000700000351402007D350B00255403007CD5802B
-:1000800000259C030095C00400D5001B007EDDC147
-:10009000007D9D8000D6801B00D5801B00D4401EB3
-:1000A00000D5401E00D6401E00D6801E00D4801E03
-:1000B00000D4C01E009783D300D5C01E00CA08001C
-:1000C0000080001A00CA0C0000E4011E00D4001ECB
-:1000D0000080000C00C4183800E4013E00D4001E6B
-:1000E0000080000C00C4183800D4401E00EE001E32
-:1000F00000CA040000A00000007E828B00E4011E04
-:1001000000D4001E00D4401E00EE001E00CA0400F1
-:1001100000A00000007E828B00E4013E00D4001E9F
-:1001200000D4401E00EE001E00CA040000A0000023
-:10013000007E828B00CA180000D4401E00D5801EAD
-:100140000080005300D4007500D4401E00CA08008F
-:1001500000CA0C0000CA100000D4801900D4C018D6
-:1001600000D5001700D4801E00D4C01E00D5001E8C
-:1001700000E2001E00CA040000A00000007E828B86
-:1001800000CA080000D4806000D4401E0080000037
-:1001900000D4801E00CA080000D4806100D4401E34
-:1001A0000080000000D4801E00CA080000CA0C00B5
-:1001B00000D4401E00D4801600D4C01600D4801E87
-:1001C000008001B800D4C01E00C6084300CA0C005D
-:1001D00000CA10000094800400CA140000E420F358
-:1001E00000D4201300D5606500D4E01C00D5201C8D
-:1001F00000D5601C008000000006200100C60843F6
-:1002000000CA0C0000CA1000009483F700CA140052
-:1002100000E420F30080007900D4201300C60843D6
-:1002200000CA0C0000CA1000009883EF00CA140036
-:1002300000D400640080008D0000000000C414326F
-:1002400000C6184300C4082F0095400500C40C30B8
-:1002500000D4401E0080000000EE001E009583F5D3
-:1002600000C4103100D4403300D5206500D4A01C58
-:1002700000D4E01C00D5201C00E4015E00D4001E68
-:10028000008000000006200100CA1800000A2001BA
-:1002900000D6007600C408360098800700C61045D6
-:1002A0000095011000D4001F00D46062008000009F
-:1002B00000D4206200CC383500CC1433008401BB5C
-:1002C00000D4007200D5401E0080000000EE001E29
-:1002D00000E2001A008401BB00E2001A00CC104BBF
-:1002E00000CC0447002C9401007D098B0098400548
-:1002F000007D15CB00D4001A008001B800D4006D39
-:100300000034440100CC0C480098403A00CC2C4A00
-:100310000095800400CC0449008001B800D4001A84
-:1003200000D4C01A00282801008400F000CC10037B
-:100330000098801B0004380C008400F000CC1003EF
-:100340000098801700043808008400F000CC1003E7
-:100350000098801300043804008400F000CC1003DF
-:100360000098801400CC104C009A800900CC144DE9
-:10037000009840DC00D4006D00CC184800D5001A6D
-:1003800000D5401A008000C900D5801A0096C0D55B
-:1003900000D4006D008001B800D4006E009AC00344
-:1003A00000D4006D00D4006E0080000000EC007FDF
-:1003B000009AC0CC00D4006D008001B800D4006E5B
-:1003C00000CC140300CC180300CC1C03007D910367
-:1003D000007DD583007D190C0035CC1F0035701FC2
-:1003E000007CF0CB007CD08B00880000007E8E8BE0
-:1003F0000095C00400D4006E008001B800D4001A3B
-:1004000000D4C01A00CC080300CC0C0300CC1003AD
-:1004100000CC140300CC180300CC1C0300CC240334
-:1004200000CC28030035C41F0036B01F007C704B81
-:100430000034F01F007C704B0035701F007C704B47
-:10044000007D8881007DCCC1007E5101007E9541F8
-:10045000007C9082007CD4C2007C848B009AC00314
-:10046000007C8C8B002C88010098809E00D4006D4D
-:100470000098409C00D4006E00CC084C00CC0C4D81
-:1004800000CC104800D4801A00D4C01A00800101AA
-:1004900000D5001A00CC083200D40032009482D972
-:1004A00000CA0C0000D4401E0080000000D4001ED2
-:1004B00000E4011E00D4001E00CA080000CA0C009F
-:1004C00000CA100000D4401E00CA140000D4801ED0
-:1004D00000D4C01E00D5001E00D5401E00D54034FB
-:1004E0000080000000EE001E0028040400E2001A54
-:1004F00000E2001A00D4401A00CA380000CC0803F9
-:1005000000CC0C0300CC0C0300CC0C03009882BD83
-:1005100000000000008401BB00D7A06F0080000035
-:1005200000EE001F00CA040000C2FF0000CC083427
-:1005300000C13FFF007C74CB007CC90B007D010F24
-:10054000009902B0007C738B008401BB00D7A06FC0
-:100550000080000000EE001F00CA080000281900FB
-:10056000007D898B009580140028140400CA0C00BB
-:1005700000CA100000CA1C0000CA240000E2001FCC
-:1005800000D4C01A00D5001A00D5401A00CC1803B8
-:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
-:1005A000007D9C4700984297000000000080016198
-:1005B00000D4C01A00D4401E00D4801E0080000069
-:1005C00000EE001E00E4011E00D4001E00D4401EF8
-:1005D00000EE001E00CA040000A00000007E828B16
-:1005E00000E4013E00D4001E00D4401E00EE001EB8
-:1005F00000CA040000A00000007E828B00CA080030
-:1006000000248C06000CCC060098C00600CC104ECE
-:100610000099000400D4007300E4011E00D4001E01
-:1006200000D4401E00D4801E0080000000EE001E9A
-:1006300000CA080000CA0C000034D01800251001C0
-:100640000095002100C17FFF00CA100000CA1400FD
-:1006500000CA180000D4801D00D4C01D007DB18BDD
-:1006600000C1420200C2C00100D5801D0034DC0E72
-:10067000007D5D4C007F734C00D7401E00D5001EEE
-:1006800000D5401E00C1420000C2C00000099C010C
-:100690000031DC10007F5F4C007F734C00042802A7
-:1006A000007D838000D5A86F00D5806600D7401EEE
-:1006B00000EC005E00C8240200C82402008001B8DB
-:1006C00000D6007600D4401E00D4801E00D4C01E88
-:1006D0000080000000EE001E0080000000EE001F01
-:1006E00000D4001F0080000000D4001F00D4001FB1
-:1006F0000088000000D4001F00000000000000007F
-:1007000000000000000000000000000000000000E9
-:1007100000000000000000000000000000000000D9
-:1007200000000000000000000000000000000000C9
-:1007300000000000000000000000000000000000B9
-:1007400000000000000000000000000000000000A9
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B0000000000000000000000000000000000039
-:1007C0000000000000000000000000000000000029
-:1007D0000000000000000000000000000000000019
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:1008000000010171000201780003008F0004007FE5
-:10081000000500030006003F000700320008012C1D
-:1008200000090046000A0036001001B6001700A2B9
-:100830000022013A00230149002000B400240125D0
-:100840000027004D0028006A002A0060002B00529B
-:10085000002F0065003200870034017F003C015604
-:10086000003F00720041018C0044012E00550173CD
-:100870000056017A0060000B00610034006200380D
-:1008800000630038006400380065003800660038F6
-:10089000006700380068003A00690041006A0048BB
-:1008A000006B0048006C0048006D0048006E004876
-:1008B000006F00480000000600000006000000066F
-:1008C0000000000600000006000000060000000610
-:1008D0000000000600000006000000060000000600
-:1008E00000000006000000060000000600000006F0
-:1008F00000000006000000060000000600000006E0
-:00000001FF
diff --git a/firmware/radeon/RV670_me.bin.ihex b/firmware/radeon/RV670_me.bin.ihex
deleted file mode 100644
index 9fbfc0e4438c..000000000000
--- a/firmware/radeon/RV670_me.bin.ihex
+++ /dev/null
@@ -1,1345 +0,0 @@
-:1000000000000000C020040000000000000000000C
-:1000100000A0000A000000000000FFFF00284621A9
-:100020000000000000000000D900480000000000AF
-:1000300000000000C02004000000000000000000DC
-:1000400000A0000A000000000000000000E0000026
-:100050000000000000010000C02946200000000050
-:1000600000000000D900480000000000000000006F
-:10007000C0200400000000000000000000A0000AF2
-:10008000000000008100000000204411000000007A
-:1000900000000001002048110000000000042004BE
-:1000A000006044110000067C0000000000600000B9
-:1000B0000000062400000000006000000000063878
-:1000C00000000000C02008000000000000000F0039
-:1000D000002816220000000000000008002116255C
-:1000E000000000000000001800203625000000007D
-:1000F0008D000000002044110000000000000004FA
-:10010000002F022500000000000000000CE00000AD
-:1001100000000018004120000040481100000019B4
-:100120000042200000204811000000008E00000066
-:1001300000204411000000000000002800204A2D8B
-:1001400000000000900000000020441100000000AA
-:100150000000000000204805000000000000000C26
-:1001600000211622000000000000000300281625D0
-:10017000000000000000001900211A220000000009
-:100180000000000400281A26000000000000000003
-:10019000002914C5000000000000001900203625C9
-:1001A0000000000000000000003A140200000000FF
-:1001B00000000016002116250000000000000003CA
-:1001C00000281625000000000000001700200E2D5A
-:1001D00000000000FFFFFFFC00280E2300000000CD
-:1001E00000000000002914A3000000000000001718
-:1001F00000203625000000000000800000280E22AC
-:10020000000000000000000700220E230000000094
-:10021000000000000029386E0000000020000000EF
-:1002200000280E22000000000000000600210E231E
-:1002300000000000000000000029386E00000000EF
-:100240000000000000220222000000000000000068
-:1002500014E0000000000038000000002EE0000064
-:1002600000000035000000002CE000000000003716
-:100270000000000000400E2D0000003900000008C2
-:1002800000200E2D00000000000000090040122D8B
-:10029000000000460000000100400E2D0000003963
-:1002A00000000000C0200C0000000000003FFFFC28
-:1002B0000028122300000000000000020022122487
-:1002C000000000000000001F00211E2300000000AD
-:1002D0000000000014E000000000003E00000008E4
-:1002E00000401C11000000410000000D00201E2DE8
-:1002F000000000000000000F00281E270000000082
-:100300000000000300221E27000000007FC0000044
-:1003100000281A23000000000000001400211A2603
-:10032000000000000000000100331A260000000059
-:100330000000000800221A26000000000000000053
-:1003400000290CC700000000000000270020362410
-:100350000000000000007F000028122100000000C3
-:1003600000001400002F0224000000000000000024
-:100370000CE000000000004B0000000100290E23EB
-:10038000000000000000000E0020362300000000E6
-:100390000000E0000020441100000000FFF8000011
-:1003A00000294A230000000000000000003A2C024F
-:1003B000000000000000000200220E2B00000000E0
-:1003C000FC00000000280E23000000000000000FC9
-:1003D000002036230000000000001FFF00294A23F0
-:1003E000000000000000002700204A2D000000004F
-:1003F000000000000020481100000000000000295B
-:1004000000200E2D00000000060A020000294A23E9
-:100410000000000000000000002048110000000063
-:100420000000000000204811000000000000000152
-:1004300000210222000000000000000014E0000083
-:1004400000000061000000002EE000000000005FDE
-:10045000000000002CE000000000005E0000000032
-:1004600000400E2D000000620000000100400E2D33
-:10047000000000620000000A00200E2D00000000B5
-:100480000000000B0040122D0000006A0000000078
-:10049000C0200C0000000000003FFFFC00281223D9
-:1004A00000000000000000020022122400000000F2
-:1004B0007FC0000000281623000000000000001488
-:1004C0000021162500000000000000010033162561
-:1004D000000000008000000000280E230000000043
-:1004E0000000000000290CA3000000003FFFFC00FA
-:1004F00000290E23000000000000001F00211E2321
-:10050000000000000000000014E000000000006D8A
-:100510000000010000401C11000000700000000DF0
-:1005200000201E2D00000000000000F000281E2703
-:10053000000000000000000400221E270000000050
-:100540008100000000204411000000000000000DA8
-:100550000020481100000000FFFFF0FF00281A30C3
-:10056000000000000000A02800204411000000004E
-:1005700000000000002948E6000000000000A0186C
-:1005800000204411000000003FFFFFFF00284A2325
-:10059000000000000000A010002044110000000036
-:1005A00000000000002048040000000000000030AF
-:1005B0000020162D00000000000000020029162572
-:1005C0000000000000000030002036250000000080
-:1005D000000000250020162D000000000000000093
-:1005E000002F00A300000000000000000CC000006D
-:1005F00000000083000000260020162D00000000EF
-:1006000000000000002F00A4000000000000000017
-:100610000CC000000000008400000000004000004A
-:100620000000008A000000250020362300000000A2
-:100630000000002600203624000000000000001703
-:1006400000201E2D000000000000000200210227F3
-:10065000000000000000000014E000000000008A1C
-:1006600000000000006000000000065900000000CB
-:10067000006000000000064D0000000200210E2274
-:10068000000000000000000014C000000000008D09
-:1006900000000012C040362000000093000000005F
-:1006A0002EE0000000000091000000002CE000009F
-:1006B000000000900000000200400E2D000000929B
-:1006C0000000000300400E2D000000920000000C0E
-:1006D00000200E2D00000000000000120020362334
-:1006E000000000000000000300210E2200000000B6
-:1006F0000000000014C00000000000980000A00CE2
-:10070000002044110000000000000000C02048004C
-:100710000000000000000000C0404800000000A0F1
-:100720000000A00C002044110000000000000000A8
-:100730000020481100000000000000002EE0000032
-:100740000000009E000000002CE000000000009D62
-:100750000000000200400E2D0000009F000000037A
-:1007600000400E2D0000009F0000000C00200E2D08
-:10077000000000000000000000204803000000000E
-:1007800000000000003A0C0200000000003F0000E2
-:1007900000280E23000000000000001000210E239E
-:1007A00000000000000000110020362300000000BF
-:1007B0000000001E0021022B0000000000000000CD
-:1007C00014C00000000000A700000016C020362062
-:1007D000000000000000001F0021022B00000000AC
-:1007E0000000000014C00000000000AA0000001576
-:1007F000C0203620000000000000000800210E2B61
-:10080000000000000000007F00280E230000000010
-:1008100000000000002F0223000000000000000084
-:100820000CE00000000000E10000000027000000D4
-:10083000000000000000000000600000000002A3B3
-:1008400000000001002F0223000000000000000053
-:100850000AE00000000000B300000000006000009B
-:100860000000013A81000000002044110000000057
-:100870000000000600204811000000000000000CED
-:1008800000221E300000000099800000002044116A
-:1008900000000000000000040020122D00000000F5
-:1008A00000000008002212240000000000000010D8
-:1008B00000201811000000000000000000291CE4C6
-:1008C0000000000000000000006048070000012F49
-:1008D0009B00000000204411000000000000000008
-:1008E00000204802000000009C000000002044118D
-:1008F00000000000000000000033146F0000000042
-:100900000000000100333E23000000000000000052
-:10091000D9004800000000000000000000203C0555
-:1009200000000000810000000020441100000000D1
-:100930000000000E00204811000000000000000030
-:1009400000201010000000000000E007002044110B
-:10095000000000000000000F0021022B000000003A
-:100960000000000014C00000000000CB00F8FF08E9
-:1009700000204811000000009800000000404811CD
-:10098000000000DC000000F000280E220000000043
-:10099000000000A0002F0223000000000000000063
-:1009A0000CC00000000000DA0000001100200E2D35
-:1009B0000000000000000001002F022300000000E2
-:1009C000000000000CE00000000000D50000000264
-:1009D000002F022300000000000000000CE00000D7
-:1009E000000000D400003F0000400C11000000D6C1
-:1009F00000001F0000400C11000000D600000F0096
-:100A000000200C11000000000038000900294A23D2
-:100A1000000000003F00000000280E2B0000000036
-:100A20000000000200220E2300000000000000076A
-:100A300000494A23000000DC00380F09002048115B
-:100A400000000000680000070020481100000000BE
-:100A50000000000800214A270000000000000000FC
-:100A60000020481100000000060A020000294A2464
-:100A700000000000000000000020481100000000FD
-:100A80000000000000204811000000000000A20249
-:100A9000002044110000000000FF000000280E228A
-:100AA000000000000000008000294A230000000030
-:100AB0000000002700200E2D00000000000000268E
-:100AC0000020122D0000000000000000002F008315
-:100AD00000000000000000000CE00000000000EA40
-:100AE000000000000060000000000653000000004D
-:100AF00000400000000000EB00000000006000006B
-:100B000000000656000000070020222D0000000013
-:100B10000000000500220E2200000000001000006E
-:100B200000280E23000000000000000000292068BB
-:100B30000000000000000000003A0C02000000006D
-:100B4000000000EF00280E2300000000000000005D
-:100B500000292068000000000000001700200E2D72
-:100B6000000000000000000300210223000000003C
-:100B70000000000014E00000000000F80000000B7E
-:100B800000210228000000000000000014C0000046
-:100B9000000000F8000004000029222800000000E6
-:100BA0000000001400203628000000000000001C97
-:100BB00000210E22000000000000000014C0000010
-:100BC000000000FD0000A30C002044110000000004
-:100BD0000000000000204811000000000000001E7E
-:100BE00000210E22000000000000000014C00000E0
-:100BF0000000010B0000A30F0020441100000000C2
-:100C00000000001100200E2D000000000000000177
-:100C1000002F022300000000000000000CC00000B4
-:100C200000000104FFFFFFFF004048110000010B1E
-:100C300000000002002F022300000000000000005E
-:100C40000CC00000000001070000FFFF0040481139
-:100C50000000010B00000004002F02230000000030
-:100C6000000000000CC000000000010A000000FFAE
-:100C7000004048110000010B000000010020481155
-:100C8000000000000002C400002044110000000029
-:100C90000000001F00210E220000000000000000E4
-:100CA00014C00000000001120000001040210E20BE
-:100CB00000000000000000130020362300000000A8
-:100CC0000000001840224A20000000000000001030
-:100CD000C0424A20000001140000000000200C1156
-:100CE0000000000000000013002036230000000078
-:100CF000000000000020481100000000000000007B
-:100D000000204811000000000000000A002010111F
-:100D10000000000000000000002F0224000000007E
-:100D2000000000000CE000000000011B00000000BB
-:100D300000204811000000000000000100531224B0
-:100D400000000117FFBFFFFF00283A2E000000003F
-:100D50000000001B00210222000000000000000033
-:100D600014C000000000012E81000000002044118A
-:100D7000000000000000000D0020481100000000ED
-:100D80000000001800220E3000000000FC000000EF
-:100D900000280E2300000000810000000020441104
-:100DA000000000000000000E0020481100000000BC
-:100DB0000000000000201010000000000000E00E05
-:100DC000002044110000000007F8FF08002048112F
-:100DD000000000000000000000294A23000000007D
-:100DE0000000001C00201E2D000000000000000874
-:100DF00000214A27000000000000000000204811E8
-:100E000000000000060A020000294A240000000039
-:100E10000000000000204811000000000000000059
-:100E200000204811000000000000000000800000C9
-:100E300000000000810000000020441100000000BC
-:100E40000000000100204811000000000000217C8B
-:100E50000020441100000000008000000020481124
-:100E60000000000000000000002048060000000014
-:100E70000000000800214A270000000000000000D8
-:100E800017000000000000000004217F00604411F2
-:100E90000000067C0000001F00210230000000005E
-:100EA0000000000014C000000000067B00000004E9
-:100EB00000404C1100000135810000000020441169
-:100EC00000000000000000010020481100000000A8
-:100ED000000021F800204411000000000000001C68
-:100EE0000020481100000000000421F900604411B6
-:100EF0000000067C0000001100210230000000000C
-:100F00000000000014E000000000013C00000000B0
-:100F100000800000000000000000000000600000F1
-:100F20000000000B00000000006004110000031529
-:100F3000000000000020041100000000000000007C
-:100F400000600811000001B2000000000060000015
-:100F5000000001600000FFFF40280E20000000009C
-:100F600000000010C0211220000000000000FFFF60
-:100F7000402806200000000000000010C0210A20C8
-:100F800000000000000000000034146100000000B8
-:100F90000000000000741882000002BB0001A1FDE7
-:100FA00000604411000002E000003FFF002F022F0C
-:100FB00000000000000000000CC00000000001471D
-:100FC00000000000C040040000000001000000001C
-:100FD000006000000000000B000000000060041131
-:100FE00000000315000000000020041100000000B4
-:100FF0000000000000600811000001B200003FFF87
-:10100000002F022F00000000000000000CE0000094
-:10101000000000000000000000600000000001600F
-:101020000000001040210E20000000000000FFFF23
-:10103000C0281220000000000000001040211620EF
-:10104000000000000000FFFFC0681A20000002BB83
-:101050000001A1FD00604411000002E000003FFF1C
-:10106000002F022F00000000000000000CC0000054
-:101070000000015800000000C04004000000000112
-:101080000000225C0020441100000000000000016C
-:1010900000300A2F000000000000000100210A2299
-:1010A000000000000000000300384A220000000099
-:1010B0000000225600204411000000000000001A29
-:1010C00000204811000000000000A1FC0020441195
-:1010D0000000000000000001008048110000000036
-:1010E00000000000006000000000000B0000000095
-:1010F000006000000000018F0000000000600000A0
-:10110000000001A000003FFF002F022F00000000A0
-:10111000000000000CE000000000000000000000E3
-:1011200000202C0800000000000000000020241116
-:101130000000000000000000002028110000000056
-:10114000000022560020441100000000000000169C
-:1011500000204811000000000000225C0020441123
-:101160000000000000000003002048110000000003
-:1011700093800000002044110000000000000002E5
-:1011800000221E290000000000000000007048EB53
-:101190000000019C0000000000600000000002BB95
-:1011A00000000001403306200000000000000000A5
-:1011B000C03024090000000000003FFF002F022F74
-:1011C00000000000000000000CE000000000000033
-:1011D0000000000000600000000002A3000000000A
-:1011E000002F022100000000000000000AE00000C3
-:1011F0000000018100000000006000000000013AD2
-:101200000000000000400000000001869500000082
-:10121000002044110000000000000000002F022107
-:1012200000000000000000000CE00000000001864B
-:1012300000000000C0204800000000000000000185
-:10124000005306210000018292000000002044119A
-:101250000000000000000000C0604800000001978E
-:101260000001A1FD00204411000000000000001159
-:101270000020062D00000000000000000078042A75
-:10128000000002FB00000000002028090000000010
-:1012900000003FFF002F022F0000000000000000B0
-:1012A0000CC000000000017400000000C0400400F9
-:1012B000000000010000021000600411000003158E
-:1012C00000003FFF002F022F000000000000000080
-:1012D0000CE000000000019400000015C020362042
-:1012E0000000000000000016C020362000000000B2
-:1012F0003F800000002004110000000046000000B4
-:1013000000600811000001B2000000000080000031
-:10131000000000000000A1FC0020441100000000BB
-:1013200000003FFF002F022F00000000000000001F
-:101330000CC000000000019B00000001008048116B
-:1013400000000000000000210080481100000000A3
-:101350000000FFFF40280E200000000000000010E9
-:10136000C0211220000000000000FFFF40281620CE
-:101370000000000000000010C0811A2000000000E2
-:101380008100000000204411000000000000000661
-:1013900000204811000000000000000800221E305C
-:1013A000000000000000002900201A2D00000000AD
-:1013B0000000E0000020441100000000FFFBFF09D6
-:1013C00000204811000000000000000F0020222D26
-:1013D0000000000000001FFF00294A280000000054
-:1013E000000000060020222D000000000000000088
-:1013F000002920E80000000000000000002048084C
-:101400000000000000000000002048110000000063
-:10141000060A020000294A26000000000000000021
-:1014200000204811000000000000000000204811CA
-:101430000000000000000100002018110000000062
-:101440000000000800621E280000012F00000008B4
-:1014500000822228000000000002C0000020441189
-:10146000000000000000001500600E2D000001BD0E
-:101470000000001600600E2D000001BD0000C00835
-:1014800000204411000000000000001700200E2D75
-:10149000000000000000000014C00000000001B9BE
-:1014A0000000000000200411000000000000000007
-:1014B0000020480100000000390000000020481111
-:1014C00000000000000000000020481100000000A3
-:1014D000000000000080480200000000000000182A
-:1014E00000202E2D0000000000000000003B0D63D6
-:1014F000000000000000000800224A230000000055
-:101500000000001000224A23000000000000001824
-:1015100000224A2300000000000000000080480371
-:101520000000000000000000006000000000000B50
-:10153000000010000060041100000315000000000E
-:1015400000200411000000000000000000600811ED
-:10155000000001B2000000070021062F000000007B
-:101560000000001300200A2D000000000000000110
-:1015700000202C11000000000000FFFF4028222066
-:10158000000000000000000F0026222800000000DC
-:101590000000001040212620000000000000000F85
-:1015A000002626290000000000000000002028027C
-:1015B000000000000000225600204411000000003E
-:1015C0000000001B00204811000000000000000087
-:1015D000002F022100000000000000000CE00000CD
-:1015E000000001E00000225C002044110000000027
-:1015F0000000008100204811000000000000A1FC54
-:1016000000204411000000000000000100204811EB
-:10161000000000000000008000201C1100000000FD
-:1016200000000000002F0227000000000000000062
-:101630000CE00000000001DC000000000060000081
-:10164000000001E90000000100531E27000001D83E
-:101650000000000100202C11000000000000001F0D
-:1016600000280A22000000000000001F00282A2A8B
-:10167000000000000000000100530621000001D11D
-:101680000000225C00204411000000000000000265
-:1016900000304A2F000000000000A1FC002044118F
-:1016A00000000000000000010020481100000000C0
-:1016B0000000000100301E2F0000000000000000AC
-:1016C000002F022700000000000000000CE00000D6
-:1016D000000000000000000000600000000001E9C0
-:1016E0000000000100531E27000001E50000FFFF7D
-:1016F00040280E20000000000000000F00260E23EE
-:101700000000000000000010C021122000000000B6
-:101710000000000F0026122400000000000000005E
-:1017200000201411000000000000000000601811EB
-:10173000000002BB0001A1FD0020441100000000D8
-:1017400000000000002F022B00000000000000003D
-:101750000CE00000000001F8000000100022162834
-:1017600000000000FFFF0000002816250000000018
-:101770000000FFFF00281A29000000000000000000
-:10178000002948C500000000000000000020480AB1
-:10179000000000000000000000202C1100000000EC
-:1017A000000000100022162300000000FFFF0000D0
-:1017B00000281625000000000000FFFF00281A2462
-:1017C0000000000000000000002948C500000000E3
-:1017D0000000000000731503000002050000000077
-:1017E0000020180500000000000000000073152410
-:1017F0000000020500000000002D14C500000000DC
-:1018000000000000003008A20000000000000000FE
-:101810000020480200000000000000000020280214
-:101820000000000000000000002020030000000075
-:101830000000000000802404000000000000000FF1
-:1018400000210225000000000000000014C000007C
-:101850000000067B00000000002B140500000000C3
-:1018600000000001009016250000000000000000AC
-:10187000006000000000000B000000000060041188
-:10188000000003150000000000200411000000000B
-:101890000000000000600811000001B200002256A4
-:1018A00000204411000000000000001A00294A2214
-:1018B0000000000000000000C02000000000000048
-:1018C00000003FFF002F022F00000000000000007A
-:1018D0000CE000000000000000000000C020040038
-:1018E000000000000000225C002044110000000005
-:1018F0000000000300384A21000000000000A1FCA5
-:1019000000204411000000000000000100204811E8
-:10191000000000000000FFFF40281220000000002F
-:1019200000000010C0211A20000000000000FFFF8E
-:1019300040280E200000000000000010C0211620EA
-:10194000000000000000000000741465000002BBED
-:101950000001A1FD00604411000002E00000000150
-:10196000003306210000000000000000002F0221CB
-:1019700000000000000000000CC000000000021980
-:1019800000003FFF002F022F0000000000000000B9
-:101990000CC000000000021200000000C040040063
-:1019A0000000000100000000006000000000063898
-:1019B000000000000040040F0000021300000000BF
-:1019C000006000000000062400000000006000002D
-:1019D000000006380000021000600411000003152A
-:1019E0000000000000600000000001A000000000F6
-:1019F000006000000000019C00000000006000008A
-:101A0000000002BB0000000000600000000002A314
-:101A1000938000000020441100000000000000003E
-:101A2000002048080000000000000000002F022FE6
-:101A300000000000000000000AE000000000023288
-:101A400000000000006000000000013A00000000FB
-:101A50000040000000000236950000000020441104
-:101A60000000000000000000002F022F0000000016
-:101A7000000000000CE00000000002360000000042
-:101A8000C0404800000002339200000000204411D2
-:101A90000000000000000000C0204800000000001E
-:101AA0000000225600204411000000000000001633
-:101AB00000204811000000000000225C00204411BA
-:101AC000000000000000000300204811000000009A
-:101AD0000000A1FC002044110000000000000001F3
-:101AE00000204811000000000001A1FD0020441169
-:101AF000000000000000000000600411000002FB74
-:101B000000000000C04004000000000100000000D0
-:101B100000600000000006240000A00C002044111A
-:101B20000000000000000000C0204800000000008D
-:101B300000000000C040480000000000000000005D
-:101B4000006000000000000B0000001840210A2087
-:101B50000000000000000003002F0222000000002F
-:101B6000000000000AE000000000024C0000001429
-:101B70000020222D00000000000801010029222879
-:101B800000000000000000140020362800000000C3
-:101B90000000A30C00204411000000000000000021
-:101BA000C02048000000000000000000C0204800E5
-:101BB0000000000000000000C0404800000002518A
-:101BC00000000000006000000000000B000000109A
-:101BD00000600411000003153F8000000020041184
-:101BE000000000000000000000600811000001B2C9
-:101BF0000000225C002044110000000000000003EF
-:101C000000204811000000000000000000600000FB
-:101C10000000027C0000001700201E2D00000000C4
-:101C20000000000100211E2700000000000000004D
-:101C300014E000000000026A0000001200201E2DC7
-:101C4000000000000000FFFF00281E270000000029
-:101C50000000000000341C2700000000000000000D
-:101C600012C000000000025F0000000000201C11F4
-:101C70000000000000000000002F00E50000000050
-:101C80000000000008C00000000002620000000028
-:101C900000201407000000000000001200201E2D8C
-:101CA000000000000000001000211E2700000000BE
-:101CB0000000000000341C4700000000000000008D
-:101CC00012C00000000002670000000000201C118C
-:101CD0000000000000000000002F00E600000000EF
-:101CE0000000000008C000000000026A00000000C0
-:101CF0000020180700000000000000000060000045
-:101D0000000002C100002256002044110000000023
-:101D1000000000000034202300000000000000004C
-:101D200012C00000000002720000000000342044D5
-:101D3000000000000000000012C00000000002715E
-:101D40000000001600404811000002760000001854
-:101D500000404811000002760000000000342044DA
-:101D6000000000000000000012C00000000002752A
-:101D70000000001700404811000002760000001922
-:101D800000204811000000000000A1FC00204411C8
-:101D900000000000000000010020481100000000C9
-:101DA0000001A1FD00604411000002E900003FFFB6
-:101DB000002F022F00000000000000000CC00000F7
-:101DC0000000025600000000C040040000000001B6
-:101DD0000000001040210620000000000000FFFF6E
-:101DE000C0280A20000000000000001040210E2042
-:101DF000000000000000FFFFC028122000000000CB
-:101E00000000001040211620000000000000FFFF2D
-:101E1000C0881A200000000081000000002044114A
-:101E20000000000000000001002048110000000038
-:101E300000042004006044110000067C0000000043
-:101E4000006000000000062400000000C0600000E8
-:101E5000000002A30000000500200A2D0000000081
-:101E60000000000800220A22000000000000002BF1
-:101E700000201A2D000000000000001C00201E2D74
-:101E8000000000000000700000281E270000000075
-:101E90000000000000311CE6000000000000002AE5
-:101EA00000201A2D000000000000000C00221A265D
-:101EB0000000000000000000002F00E6000000000D
-:101EC0000000000006E00000000002920000000098
-:101ED00000201C11000000000000000000200C1178
-:101EE000000000000000002B00203623000000004E
-:101EF0000000001000201811000000000000000089
-:101F000000691CE20000012F9380000000204411B2
-:101F10000000000000000000002048070000000052
-:101F200095000000002044110000000000000000A7
-:101F3000002F022F00000000000000000CE0000055
-:101F40000000029D0000000100333E2F0000000051
-:101F500000000000D90048000000000092000000CE
-:101F6000002044110000000000000000C0204800D4
-:101F7000000000000000001C0040362700000000A8
-:101F80000000000CC0220A20000000000000002910
-:101F9000002036220000000000000028C04036204B
-:101FA000000000000000A2A4002044110000000076
-:101FB000000000090020481100000000A1000000FE
-:101FC00000204411000000000000000100804811C2
-:101FD000000000000000002100201E2D0000000075
-:101FE00000000000002C1CE30000000000000021A5
-:101FF00000203627000000000000002200201E2DD7
-:102000000000000000000000002C1CE400000000A4
-:1020100000000022002036270000000000000023FE
-:1020200000201E2D0000000000000000003120A351
-:102030000000000000000000002D1D07000000004F
-:1020400000000023002036270000000000000024CC
-:1020500000201E2D0000000000000000003120C400
-:102060000000000000000000002D1D07000000001F
-:10207000000000240080362700000000000000213E
-:10208000002036230000000000000022002036243B
-:10209000000000000000000000311CA30000000050
-:1020A0000000002300203627000000000000000090
-:1020B00000311CC40000000000000024008036270E
-:1020C000000000000000001A002036270000000079
-:1020D0000000001B00203628000000000000001750
-:1020E00000201E2D00000000000000020021022739
-:1020F000000000000000000014C00000000002DC2E
-:102100000000000000400000000002D90000001A9A
-:1021100000203627000000000000001B00203628A9
-:10212000000000000000001700201E2D000000002D
-:102130000000000200210227000000000000000053
-:1021400014E00000000002D9000000030021022773
-:10215000000000000000000014E00000000002DCAD
-:102160000000002300201E2D0000000000000000E1
-:10217000002E00E1000000000000000002C000008E
-:10218000000002DC0000002100201E2D00000000E5
-:1021900000000000003120A100000000000000004D
-:1021A000002E00E8000000000000000006C0000053
-:1021B000000002DC0000002400201E2D00000000B2
-:1021C00000000000002E00E20000000000000000FF
-:1021D00002C00000000002DC0000002200201E2DD2
-:1021E0000000000000000000003120C200000000DC
-:1021F00000000000002E00E80000000000000000C9
-:1022000006C00000000002DC0000000000600000CA
-:10221000000006590000000000600000000002B548
-:102220000000000000400000000002DE000000008E
-:1022300000600000000002B5000000000060000027
-:10224000000006500000000000400000000002DE18
-:102250000000000000600000000002A70000000075
-:1022600000400000000002DE0000001A00201E2DC9
-:10227000000000000000001B0080222D0000000074
-:102280000000001000221E230000000000000000DB
-:1022900000294887000000000000000000311CA356
-:1022A000000000000000001000221E2700000000B7
-:1022B0000000000000294887000000000000001016
-:1022C00000221E230000000000000000003120C496
-:1022D000000000000000FFFF00282228000000008E
-:1022E0000000000000894907000000000000001005
-:1022F00000221E2300000000000000000029488783
-:10230000000000000000001000221E21000000005C
-:102310000000000000294847000000000000000005
-:1023200000311CA3000000000000001000221E2746
-:1023300000000000000000000029488700000000A5
-:102340000000000000311CA100000000000000108F
-:1023500000221E270000000000000000002948475E
-:10236000000000000000001000221E2300000000FA
-:1023700000000000003120C4000000000000FFFF4A
-:102380000028222800000000000000000029490762
-:10239000000000000000001000221E2100000000CC
-:1023A00000000000003120C2000000000000FFFF1C
-:1023B00000282228000000000000000000894907D2
-:1023C000000000000000001000221E23000000009A
-:1023D0000000000000294887000000000000000104
-:1023E00000220A210000000000000000003308A2C3
-:1023F000000000000000001000221E22000000006B
-:102400000000001000212222000000000000000057
-:1024100000294907000000000000000000311CA353
-:10242000000000000000001000221E270000000035
-:1024300000000000002948870000000000000001A3
-:1024400000220A210000000000000000003008A265
-:10245000000000000000001000221E22000000000A
-:1024600000000010002122220000000000000000F7
-:1024700000294907000000000000001000221E2370
-:102480000000000000000000003120C40000000037
-:102490000000FFFF002822280000000000000000CC
-:1024A000002949070000000000000000003808C5AE
-:1024B00000000000000000000030084100000000A3
-:1024C0000000000100220A220000000000000000BD
-:1024D000003308A2000000000000001000221E22AD
-:1024E0000000000000000010002122220000000077
-:1024F00000000000008949070000000000000017EC
-:102500000020222D000000000000000014C0000088
-:1025100000000318FFFFFFEF002806210000000065
-:10252000000000140020222D000000000000F8E050
-:1025300000204411000000000000000000294901B3
-:1025400000000000000000000089490100000000B8
-:102550000000000000204811000000000000000002
-:102560000020481100000000060A02000080481107
-:102570000000000000000000C0200000000000007B
-:1025800097000000C020441100000000000000007F
-:10259000C0204811000000008A0000000020441103
-:1025A00000000000000000000020481100000000B2
-:1025B0000000225C00204411000000000000000028
-:1025C000C0204800000000000000A1FC00204411D1
-:1025D0000000000000000000C020480000000000D3
-:1025E00000000000C0200400000000000000000007
-:1025F00000A0000A00000000970000000020441125
-:102600000000000000000000002048110000000051
-:102610008A000000002044110000000000000000BB
-:1026200000204811000000000000225C002044113E
-:102630000000000000000000C02048000000000072
-:102640000000A1FC00204411000000000000000078
-:10265000C02048000000000000000000C02004006E
-:10266000000000000000000000A0000A00000000C0
-:10267000970000000020441100000000000000004E
-:1026800000204811000000008A00000000204411D2
-:1026900000000000000000000020481100000000C1
-:1026A0000000225C00204411000000000000000037
-:1026B000C0204800000000000000A1FC00204411E0
-:1026C0000000000000000000C020480000000000E2
-:1026D0000001A1FD002044110000000000000000E6
-:1026E000D90048000000000000000000C0200400E5
-:1026F000000000000000000000A0000A0000000030
-:1027000000002257002044110000000000000003D8
-:10271000C0484A20000000000000225D0020441153
-:102720000000000000000000C04048000000000061
-:1027300000000000006000000000063800000000FB
-:10274000C0200800000000000000225C00204411AE
-:10275000000000000000000300384A2200000000D2
-:102760000000A1FC00204411000000000000000057
-:10277000C0204800000000000001A1FD002044111D
-:102780000000000000000000002F022200000000F6
-:10279000000000000CE0000000000000000000004D
-:1027A00040204800000000000000000140304A20A6
-:1027B0000000000000000002C0304A2000000000BD
-:1027C0000000000100530A220000034B0000003FFC
-:1027D000C0280A20000000008100000000204411F1
-:1027E000000000000000000100204811000000006F
-:1027F000000021F800204411000000000000001833
-:102800000020481100000000000421F9006044117C
-:102810000000067C000000110021023000000000D2
-:102820000000000014E00000000003540000001449
-:10283000002F022200000000000000000CC0000079
-:10284000000003620001A2A4002044110000000067
-:1028500000000000006048020000036A0000210040
-:10286000002044110000000000000000C0204800CB
-:102870000000000000000000C02048000000000030
-:1028800000000000C0204800000000000000000020
-:10289000C04048000000000000000004002F022299
-:1028A00000000000000000000CC0000000000366F3
-:1028B0000001A2A40020441100000000000000005C
-:1028C000004048020000035D00000028002F0222A3
-:1028D00000000000000000000CC00000000005B374
-:1028E0000001A2A40020441100000000000000002C
-:1028F000004048020000035D0000002C0020362646
-:102900000000000000000049002018110000000035
-:102910000000003F002048110000000000000001FE
-:1029200000331A260000000000000000002F0226DD
-:1029300000000000000000000CC000000000036C5C
-:102940000000002C00801A2D000000000000003F55
-:10295000C0280A200000000000000015002F0222FD
-:1029600000000000000000000CE0000000000382F6
-:1029700000000006002F02220000000000000000FE
-:102980000CE00000000003AD00000016002F022242
-:1029900000000000000000000CE00000000003AF99
-:1029A00000000020002F02220000000000000000B4
-:1029B0000CE00000000003980000000F002F02222E
-:1029C00000000000000000000CE00000000003A474
-:1029D00000000010002F0222000000000000000094
-:1029E0000CE00000000003A40000001E002F0222E3
-:1029F00000000000000000000CE000000000038C5C
-:102A00000000A2A40020441100000000000000000B
-:102A100000404802000000000800000000290A22CF
-:102A2000000000000000000340210E200000000014
-:102A30000000000CC021122000000000000800006F
-:102A4000002812240000000000000014C0221620FC
-:102A50000000000000000000002914A40000000095
-:102A60000000A2A4002044110000000000000000AB
-:102A7000002948A2000000000000A1FE002044112F
-:102A800000000000000000000040480300000000BB
-:102A9000810000000020441100000000000000013F
-:102AA0000020481100000000000021F8002044111F
-:102AB0000000000000000016002048110000000087
-:102AC000000421F9006044110000067C000000159C
-:102AD00000210230000000000000000014E00000AF
-:102AE0000000038E0000210E0020441100000000B1
-:102AF00000000000C02048000000000000000000AE
-:102B0000C0204800000000000000A2A400204411E2
-:102B1000000000000000000000404802000000002B
-:102B200081000000002044110000000000000001AE
-:102B30000020481100000000000021F8002044118E
-:102B400000000000000000170020481100000000F5
-:102B5000000421F9006044110000067C000000031D
-:102B600000210230000000000000000014E000001E
-:102B70000000039A0000210800204411000000001A
-:102B800000000000C020480000000000000000001D
-:102B9000C0204800000000000000A2A40020441152
-:102BA000000000000000000000404802000000009B
-:102BB0000000A2A40020441100000000000000005A
-:102BC00000204802000000008000000000204411A6
-:102BD000000000000000000000204811000000007C
-:102BE00081000000002044110000000000000010DF
-:102BF000002048110000000000000000002000102C
-:102C0000000000000000000014C00000000003AA43
-:102C10000000000000400000000000000001A2A42D
-:102C20000020441100000000000000060040481190
-:102C3000000000000001A2A40020441100000000D8
-:102C400000000016006048110000036A0000000048
-:102C5000004000000000000000000000C02008004C
-:102C60000000000000000000C0200C000000000078
-:102C70000000001D002102230000000000000000F1
-:102C800014E00000000003C4810000000020441193
-:102C900000000000000000010020481100000000BA
-:102CA000000021F80020441100000000000000187E
-:102CB0000020481100000000000421F900604411C8
-:102CC0000000067C0000001100210230000000001E
-:102CD0000000000014E00000000003B80000210024
-:102CE0000020441100000000000000000020480205
-:102CF0000000000000000000002048030000000069
-:102D0000BABECAFE0020481100000000CAFEBABECA
-:102D100000204811000000000000A2A4002044117F
-:102D20000000000000000004004048110000000006
-:102D3000000021700020441100000000000000008D
-:102D400000204802000000000000000000204803AE
-:102D5000000000008100000000204411000000007D
-:102D60000000000A002048110000000000000000E0
-:102D700000200010000000000000000014C000004F
-:102D8000000003C98C000000002044110000000076
-:102D9000CAFEBABE004048110000000081000000D9
-:102DA0000020441100000000000000010020481134
-:102DB0000000000000003FFF40280A200000000043
-:102DC0008000000040280E200000000040000000AD
-:102DD000C028122000000000000400000069462204
-:102DE0000000067C0000000000201410000000001D
-:102DF00000000000002F022300000000000000007F
-:102E00000CC00000000003D700000000C040180004
-:102E1000000003DA00003FFFC0281A200000000075
-:102E200000040000006946260000067C0000000047
-:102E3000002018100000000000000000002F0224F5
-:102E400000000000000000000CC00000000003DDD6
-:102E500000000000C0401C00000003E000003FFF35
-:102E6000C0281E2000000000000400000069462762
-:102E70000000067C0000000000201C100000000084
-:102E800000000000002044020000000000000000DC
-:102E9000002820C50000000000000000004948E8AC
-:102EA00000000000A58000000020081100000000C4
-:102EB0000000200000200C11000000008300000032
-:102EC00000604411000004080000000000204402DB
-:102ED0000000000000000000C020480000000000CA
-:102EE0000000000040204800000000000000001F1B
-:102EF000C0210220000000000000000014C00000FB
-:102F0000000003ED0000201000204411000000002C
-:102F10000000800000204811000000000000FFFFBA
-:102F2000C0481220000003F5A7800000002008110F
-:102F3000000000000000A00000200C1100000000B4
-:102F4000830000000060441100000408000000003D
-:102F5000002044020000000000000000C0204800E3
-:102F60000000000000000000C02048000000000039
-:102F70000000FFFFC02812200000000083000000B6
-:102F800000204411000000000000000000304883D1
-:102F90000000000084000000002044110000000038
-:102FA00000000000C02048000000000000000000F9
-:102FB0001D000000000000008300000000604411BC
-:102FC0000000040800000000C040040000000001F0
-:102FD000A980000000200811000000000000C000CF
-:102FE00000400C11000003F0AB800000002008112D
-:102FF000000000000000F8E000400C11000003F0A9
-:10300000AD80000000200811000000000000F880E2
-:1030100000400C11000003F0B380000000200811F4
-:10302000000000000000F3FC00400C11000003F061
-:10303000AF80000000200811000000000000E00048
-:1030400000400C11000003F0B180000000200811C6
-:10305000000000000000F00000400C11000003F030
-:1030600083000000002044110000000000002148FF
-:1030700000204811000000008400000000204411DE
-:103080000000000000000000C02048000000000018
-:10309000000000001D000000000000000000000013
-:1030A000008000000000000001182000C030462011
-:1030B0000000000000000000D900480000000000EF
-:1030C00000000000C020040000000000000000001C
-:1030D00000A0000A000000000218A000C030462036
-:1030E0000000000000000000D900480000000000BF
-:1030F00000000000C02004000000000000000000EC
-:1031000000A0000A000000000318C000C0304620E4
-:103110000000000000000000D9004800000000008E
-:1031200000000000C02004000000000000000000BB
-:1031300000A0000A000000000418F8E0C03046209B
-:103140000000000000000000D9004800000000005E
-:1031500000000000C020040000000000000000008B
-:1031600000A0000A000000000518F880C0304620CA
-:103170000000000000000000D9004800000000002E
-:1031800000000000C020040000000000000000005B
-:1031900000A0000A000000000618E000C030462031
-:1031A0000000000000000000D900480000000000FE
-:1031B00000000000C020040000000000000000002B
-:1031C00000A0000A000000000718F000C0304620F0
-:1031D0000000000000000000D900480000000000CE
-:1031E00000000000C02004000000000000000000FB
-:1031F00000A0000A000000000818F3FCC0304620C0
-:103200000000000000000000D9004800000000009D
-:1032100000000000C02004000000000000000000CA
-:1032200000A0000A000000000000003000200A2D6D
-:103230000000000000000000C0290C400000000059
-:1032400000000030002036230000000000000000D5
-:10325000C0200400000000000000000000A0000AE0
-:103260000000000086000000002044110000000063
-:103270000000000000404801000000008500000040
-:10328000C020441100000000000000000040480180
-:10329000000000000000217C00204411000000001C
-:1032A00000000000C02048000000000000000000F6
-:1032B000C02048000000000000000000C0204800BE
-:1032C0000000000081000000002044110000000008
-:1032D0000000000100204811000000000000000074
-:1032E000C0200800000000000000000017000000DF
-:1032F000000000000004217F006044110000067CF3
-:103300000000001F0021023000000000000000004B
-:1033100014C00000000000000000000000404C024B
-:103320000000043E00000000C0200C00000000006F
-:1033300000000000C020100000000000000000009D
-:10334000C02014000000000000000000C020180091
-:103350000000000000000000C0201C000000000071
-:1033600000007F0000280A21000000000000450046
-:10337000002F022200000000000000000CE000000E
-:103380000000044C00000000C020200000000000ED
-:103390000000000017000000000000000000001006
-:1033A00000280A230000000000000010002F022265
-:1033B00000000000000000000CE0000000000454C9
-:1033C0008100000000204411000000000000000106
-:1033D000002048110000000000040000006946249D
-:1033E0000000067C000000000040000000000459BE
-:1033F00081000000002044110000000000000000D7
-:1034000000204811000000000000216D0020441140
-:103410000000000000000000002048040000000040
-:103420000000000000604805000006810000000068
-:10343000002824F0000000000000000700280A23F4
-:103440000000000000000001002F02220000000028
-:10345000000000000AE0000000000460000000001E
-:10346000002F00C9000000000000000004E0000080
-:103470000000047900000000004000000000048605
-:1034800000000002002F02220000000000000000E7
-:103490000AE000000000046500000000002F00C9E1
-:1034A000000000000000000002E0000000000479BD
-:1034B000000000000040000000000486000000033F
-:1034C000002F022200000000000000000AE00000BF
-:1034D0000000046A00000000002F00C90000000086
-:1034E000000000000CE00000000004790000000073
-:1034F000004000000000048600000004002F0222AB
-:1035000000000000000000000AE000000000046F5E
-:1035100000000000002F00C90000000000000000B3
-:103520000AE00000000004790000000000400000F4
-:103530000000048600000005002F022200000000A9
-:10354000000000000AE00000000004740000000019
-:10355000002F00C9000000000000000006E000008D
-:103560000000047900000000004000000000048614
-:1035700000000006002F02220000000000000000F2
-:103580000AE000000000047900000000002F00C9DC
-:10359000000000000000000008E0000000000479C6
-:1035A00000000000004000000000048600007F00D2
-:1035B00000280A210000000000004500002F022220
-:1035C00000000000000000000AE000000000000011
-:1035D0000000000800210A23000000000000000095
-:1035E00014C0000000000483000021690020441181
-:1035F0000000000000000000C020480000000000A3
-:1036000000000000C0204800000000000000000092
-:10361000C020480000000000CAFEBABE00404811A9
-:103620000000000000000000C02044000000000076
-:1036300000000000C02000000000000000000000AA
-:10364000C04048000000000000007F0000280A2160
-:103650000000000000004500002F022200000000D2
-:10366000000000000AE000000000048C00000000E0
-:10367000C02000000000000000000000C02000008A
-:103680000000000000000000C0400000000000003A
-:103690000000000000404C080000044C0000000046
-:1036A000C0200800000000000000001040210E2093
-:1036B0000000000000000011402112200000000066
-:1036C00000000012402116200000000000002169C7
-:1036D000002044110000000000000000002048020B
-:1036E0000000000000000000002102250000000092
-:1036F0000000000014E00000000004960004000038
-:10370000C0494A2000000497FFFBFFFFC0284A2061
-:103710000000000000000000002102230000000063
-:103720000000000014E00000000004A300000000FE
-:10373000C02048000000000000000000C020480039
-:103740000000000000000000002102240000000032
-:103750000000000014C00000000000008100000014
-:1037600000204411000000000000000C002048115F
-:103770000000000000000000002000100000000019
-:103780000000000014C000000000049FA000000022
-:103790000020441100000000CAFEBABE00404811DB
-:1037A0000000000081000000002044110000000023
-:1037B0000000000400204811000000000000216B00
-:1037C000002044110000000000000000C02048104C
-:1037D00000000000810000000020441100000000F3
-:1037E0000000000500204811000000000000216CCE
-:1037F000002044110000000000000000C02048101C
-:103800000000000000000000002F02240000000063
-:10381000000000000CE000000000000000000000BC
-:10382000004000000000049D00000000C0210A20AC
-:10383000000000000000000014C00000000004B6FA
-:103840008100000000204411000000000000000082
-:1038500000204811000000000000216D00204411EC
-:103860000000000000000000C02048000000000030
-:1038700000000000C0604800000006810000000059
-:1038800000400000000004BA810000000020441144
-:1038900000000000000000010020481100000000AE
-:1038A00000040000C02946200000000000000000C5
-:1038B000C06000000000067C000000010021022220
-:1038C000000000000000000014C00000000004C15F
-:1038D00000002169002044110000000000000000E9
-:1038E000C02048000000000000000000C020480088
-:1038F0000000000000000000002048100000000050
-:10390000CAFEBABE004048110000000000000000DE
-:10391000C02044000000000000000000C04048102B
-:1039200000000000810000000020441100000000A1
-:10393000000000010020481100000000000021F8F4
-:1039400000204411000000000000000E002048117B
-:1039500000000000000421F9006044110000067C12
-:103960000000000000210230000000000000000004
-:1039700014C00000000004C3000021800020441196
-:103980000000000000000000C0204800000000000F
-:1039900000000000C0200000000000000000000047
-:1039A000C02048000000000000000000C02000000F
-:1039B0000000000000000000C040480000000000BF
-:1039C0000000000300333E2F000000000000000153
-:1039D00000210221000000000000000014E00000AF
-:1039E000000004F30000002C00200A2D000000005D
-:1039F0000004000018E00C11000004E200000001C7
-:103A000000333E2F00000000000021690020441117
-:103A1000000000000000000000204802000000003C
-:103A20000000000000204803000000000000000823
-:103A300000300A220000000000000000C020480002
-:103A40000000000000000000C0204800000000004E
-:103A50000000216900204411000000000000000067
-:103A60000020480200000000000000000020480381
-:103A7000000000000000000800300A2200000000E2
-:103A800000000000C020480000000000000000000E
-:103A9000D8C04800000004D600002169002044116D
-:103AA00000000000000000000020480200000000AC
-:103AB0000000000000204803000000000000000893
-:103AC00000300A220000000000000000C020480072
-:103AD0000000000000000000C020480000000000BE
-:103AE0000000002D0020122D00000000000000004A
-:103AF00000290C830000000000002169002044110F
-:103B0000000000000000000000204802000000004B
-:103B10000000000000204803000000000000000832
-:103B200000300A220000000000000000C020480011
-:103B30000000000000000000C0204800000000005D
-:103B4000000000110021022400000000000000001D
-:103B500014C0000000000000000000000040000051
-:103B60000000049D0000002CC02036200000000052
-:103B70000000002DC0403620000000000000000FB3
-:103B800000210221000000000000000014C000001D
-:103B9000000004F800000000006000000000000BBE
-:103BA00000000000D900000000000000000000003C
-:103BB000C040040000000001B500000000204411D6
-:103BC000000000000000200000204811000000005C
-:103BD000B600000000204411000000000000A0001A
-:103BE0000020481100000000B70000000020441130
-:103BF000000000000000C00000204811000000008C
-:103C0000B800000000204411000000000000F8E0AF
-:103C10000020481100000000B900000000204411FD
-:103C2000000000000000F8800020481100000000A3
-:103C3000BA00000000204411000000000000E00075
-:103C40000020481100000000BB00000000204411CB
-:103C5000000000000000F0000020481100000000FB
-:103C6000BC00000000204411000000000000F3FC34
-:103C700000204811000000008100000000204411D5
-:103C800000000000000000020020481100000000B9
-:103C9000000000FF00280E300000000000000000BF
-:103CA000002F022300000000000000000CC00000F4
-:103CB0000000050C00000000C0200800000000000B
-:103CC0000000000014C000000000052100000000FA
-:103CD00000200C11000000000000001C0020362312
-:103CE000000000000000002B002036230000000030
-:103CF00000000029002036230000000000000028FA
-:103D000000203623000000000000001700203623AA
-:103D10000000000000000025002036230000000005
-:103D200000000026002036230000000000000015DF
-:103D3000002036230000000000000016002036237B
-:103D400000000000FFFFE00000200C110000000058
-:103D500000000021002036230000000000000022A7
-:103D6000002036230000000000001FFF00200C117F
-:103D700000000000000000230020362300000000A7
-:103D8000000000240020362300000000F1FFFFFFA8
-:103D900000283A2E000000000000001AC0220E2069
-:103DA00000000000000000000029386E0000000044
-:103DB0008100000000204411000000000000000607
-:103DC00000204811000000000000002A402036209A
-:103DD00000000000870000000020441100000000E7
-:103DE00000000000C0204800000000000000A1F416
-:103DF00000204411000000000000000000204810D6
-:103E0000000000000000000000200C110000000075
-:103E10000000003000203623000000009D0000005C
-:103E200000204411000000000000001F40214A2033
-:103E30000000000096000000002044110000000077
-:103E400000000000C020480000000000000000004A
-:103E5000C0200C000000000000000000C020100086
-:103E6000000000000000001F0021162400000000D8
-:103E70000000000014C00000000000000000001D51
-:103E800000203623000000000000000300281E234D
-:103E900000000000000000080022222300000000B3
-:103EA000FFFFF000002822280000000000000000B2
-:103EB000002920E8000000000000001F0020362834
-:103EC000000000000000001800211E230000000078
-:103ED0000000002000203627000000000000000243
-:103EE000002216240000000000000000003014A88A
-:103EF000000000000000001E002036250000000029
-:103F00000000000300211A2400000000100000003F
-:103F100000281A2600000000EFFFFFFF00283A2EBD
-:103F20000000000000000000004938CE0000066AD2
-:103F30000000000140280A200000000000000006E8
-:103F400040280E200000000000000300C0281220BE
-:103F50000000000000000008002112240000000002
-:103F600000000000C020162000000000000000003B
-:103F7000C0201A20000000000000000000210222E2
-:103F8000000000000000000014C0000000000559FF
-:103F9000810000000020441100000000000000012A
-:103FA00000204811000000000000225800300A24C0
-:103FB0000000000000040000006946220000067CAA
-:103FC00000002169002044110000000000000000F2
-:103FD00000204805000000000002000000294A26D9
-:103FE0000000000000000000002048100000000059
-:103FF000CAFEBABE00204811000000000000000206
-:10400000002F022300000000000000000CC0000090
-:104010000000056100000000C0201C10000000002E
-:1040200000000000C04000000000056F000000021A
-:10403000002F022300000000000000000CC0000060
-:104040000000056181000000002044110000000014
-:10405000000000010020481100000000000022586C
-:1040600000300A240000000000040000006946221D
-:104070000000067C00000000C0201C1000000000B2
-:1040800000000000C04000000000056F00000000BC
-:10409000002F022300000000000000000CC0000000
-:1040A0000000056500000000C0201C0000000000AA
-:1040B00000000000C04000000000056F0000000488
-:1040C000002F022300000000000000000CC00000D0
-:1040D0000000056D81000000002044110000000078
-:1040E0000000000000204811000000000000216DC9
-:1040F000002044110000000000000000C020480023
-:104100000000000000000000C060480000000681C0
-:104110000000000000401C100000056F00000000BF
-:10412000C02000000000000000000000C0400000AF
-:1041300000000000000000000EE00000000005711B
-:104140000000000000600000000005BC000000004E
-:10415000002F022400000000000000000CC000003E
-:10416000000005820000A2B70020441100000000FA
-:10417000000000000020480700000000810000004F
-:104180000020441100000000000000010020481140
-:10419000000000000004A2B6006044110000067C8C
-:1041A0000000001A0021223000000000000000067C
-:1041B00000222630000000000004200400604411AA
-:1041C0000000067C0000A2C4002044110000000092
-:1041D00000000000003048E900000000000000007E
-:1041E00000E00000000005800000A2D10020441182
-:1041F000000000000000000000404808000000002F
-:104200000000A2D1002044110000000000000001C5
-:1042100000504A280000000000000001002F022486
-:1042200000000000000000000CC00000000005932A
-:104230000000A2BB002044110000000000000000AC
-:104240000020480700000000810000000020441109
-:1042500000000000000000010020481100000000E4
-:104260000004A2BA006044110000067C0000001A9D
-:10427000002122300000000000000006002226304D
-:104280000000000000042004006044110000067CCF
-:104290000000A2C500204411000000000000000042
-:1042A000003048E9000000000000000000E00000CD
-:1042B000000005910000A2D200204411000000007F
-:1042C0000000000000404808000000000000A2D2EA
-:1042D00000204411000000000000000100504A28A6
-:1042E0000000000000000002002F02240000000077
-:1042F000000000000CC00000000005A40000A2BFE8
-:1043000000204411000000000000000000204807C9
-:1043100000000000810000000020441100000000A7
-:104320000000000100204811000000000004A2BEAF
-:10433000006044110000067C0000001A00212230B9
-:1043400000000000000000060022263000000000EF
-:1043500000042004006044110000067C0000A2C696
-:10436000002044110000000000000000003048E977
-:10437000000000000000000000E00000000005A2B6
-:104380000000A2D300204411000000000000000043
-:1043900000404808000000000000A2D300204411A3
-:1043A000000000000000000100504A28000000004A
-:1043B0000000A2C300204411000000000000000023
-:1043C0000020480700000000810000000020441188
-:1043D0000000000000000001002048110000000063
-:1043E0000004A2C2006044110000067C0000001A14
-:1043F00000212230000000000000000600222630CC
-:104400000000000000042004006044110000067C4D
-:104410000000A2C7002044110000000000000000BE
-:10442000003048E9000000000000000000E000004B
-:10443000000005B10000A2D40020441100000000DB
-:104440000000000000404808000000000000A2D466
-:1044500000204411000000000000000100504A2824
-:104460000000000085000000002044110000000052
-:104470000000000000204801000000000000304A59
-:10448000002044110000000001000000002048113D
-:10449000000000000000000000400000000005B720
-:1044A000A4000000C0204411000000000000000033
-:1044B000C04048000000000000000000C060000094
-:1044C000000005BC00000000C04004000000000126
-:1044D0000000002C002036210000000081000000B8
-:1044E00000204411000000000000000600204811D8
-:1044F0000000000000000000002F0230000000005B
-:10450000000000000CC00000000005C30000000017
-:10451000002004110000000000000030004036219F
-:10452000000005D6000000300020062D000000002D
-:1045300000007E00002806210000000000000000AE
-:10454000002F022100000000000000000CE000002D
-:10455000000005D68100000000204411000000008A
-:104560000000000100204811000000000004A0929B
-:10457000006044110000067C00000031002036304D
-:10458000000000000004A093006044110000067CBD
-:104590000000003200203630000000000004A2B607
-:1045A000006044110000067C00000033002036301B
-:1045B000000000000004A2BA006044110000067C64
-:1045C0000000003400203630000000000004A2BECD
-:1045D000006044110000067C0000003500203630E9
-:1045E000000000000004A2C2006044110000067C2C
-:1045F00000000036002036300000000000042004D7
-:10460000006044110000067C0001A2A400204411B7
-:10461000000000000000003F0020481100000000E2
-:104620000000003F00204811000000000000003F93
-:1046300000204811000000000000003F0020481149
-:1046400000000000000000050020481100000000EC
-:104650000000A1F400204411000000000000000050
-:1046600000204811000000008800000000204411D4
-:1046700000000000000000010020481100000000C0
-:10468000810000000020441100000000000000062E
-:10469000002048110000000000000001002F02303F
-:1046A00000000000000000000CE000000000061FF9
-:1046B000000000300020062D000000000000000077
-:1046C000002F022100000000000000000CE00000AC
-:1046D0000000061F810000000020441100000000BF
-:1046E00000000001002048110000000000007E00D2
-:1046F000002806210000000000000000002F022119
-:1047000000000000000000000CE00000000005F8C0
-:104710000000A092002044110000000000000031C1
-:1047200000204A2D000000000000A093002044114A
-:10473000000000000000003200204A2D00000000B0
-:104740000000A2B600204411000000000000003369
-:1047500000204A2D000000000000A2BA00204411F1
-:10476000000000000000003400204A2D000000007E
-:104770000000A2BE0020441100000000000000352F
-:1047800000204A2D000000000000A2C200204411B9
-:10479000000000000000003600204A2D000000004C
-:1047A000000000300020062D00000000000001FF86
-:1047B000002806210000000000000000002F022158
-:1047C00000000000000000000CE000000000061ED9
-:1047D0000000000000210221000000000000000095
-:1047E00014C00000000006010004A0030060441192
-:1047F0000000067C0000A00300204411000000001F
-:10480000000000000020481000000000000000012F
-:1048100000210621000000000000000014C000007C
-:10482000000006060004A010006044110000067C91
-:104830000000A01000204411000000000000000053
-:1048400000204810000000000000000100210621A7
-:104850000000000000000000002F02210000000006
-:10486000000000000CE000000000061E0004A01183
-:10487000006044110000067C0000A01100204411DB
-:1048800000000000000000000020481000000000B0
-:104890000004A012006044110000067C0000A01279
-:1048A000002044110000000000000000002048101B
-:1048B000000000000004A013006044110000067C0A
-:1048C0000000A013002044110000000000000000C0
-:1048D00000204810000000000004A01400604411F3
-:1048E0000000067C0000A01400204411000000001D
-:1048F0000000000000204810000000000004A01587
-:10490000006044110000067C0000A0150020441146
-:10491000000000000000000000204810000000001F
-:104920000004A016006044110000067C0000A016E0
-:10493000002044110000000000000000002048108A
-:10494000000000000004A017006044110000067C75
-:104950000000A0170020441100000000000000002B
-:1049600000204810000000000004200400604411F2
-:104970000000067C0000002C0080062D00000000D6
-:10498000FF000000002044110000000000000000B3
-:104990000020481100000000000000010020481124
-:1049A000000000000000000200804811000000002C
-:1049B000000000000EE000000000063000000030A3
-:1049C0000020062D00000000000000020028062143
-:1049D0000000000000000000002F02210000000085
-:1049E000000000000CE000000000062E8100000026
-:1049F00000204411000000000000000100204811C8
-:104A00000000000000042004006044110000067C47
-:104A10000000100000200811000000000000002B22
-:104A200000203622000000000000000000600000AE
-:104A3000000006340000000000600000000005BC1B
-:104A40009800000000204411000000000000000059
-:104A5000008048110000000000000000C06000005D
-:104A60000000063400000000C04004000000000107
-:104A70000000A2A400204411000000000000002259
-:104A800000204811000000008900000000204411AF
-:104A90000000000000000001004048110000062056
-:104AA00097000000002044110000000000000000FA
-:104AB00000204811000000008A000000002044117E
-:104AC0000000000000000000004048110000062027
-:104AD00000000000006000000000064D0001A2A4DC
-:104AE000C0204411000000000000001600604811C2
-:104AF0000000036A000020100020441100000000A4
-:104B000000010000002048110000000081000000AA
-:104B100000204411000000000000000100204811A6
-:104B2000000000000000217C002044110000000073
-:104B3000098000000020481100000000FFFFFFFF77
-:104B40000020481100000000000000000020481173
-:104B5000000000000000000017000000000000003E
-:104B60000004217F006044110000067C0000001F4B
-:104B700000210230000000000000000014C000000E
-:104B8000000000000000000400404C110000064737
-:104B900000000000004000000000000000000017BE
-:104BA00000201E2D000000000000000400291E2728
-:104BB0000000000000000017008036270000000001
-:104BC0000000001700201E2D00000000FFFFFFFB6B
-:104BD00000281E2700000000000000170080362774
-:104BE000000000000000001700201E2D0000000043
-:104BF0000000000800291E27000000000000001728
-:104C000000803627000000000000001700201E2D45
-:104C100000000000FFFFFFF700281E270000000033
-:104C20000000001700803627000000000001A2A449
-:104C30000020441100000000000000160060481130
-:104C40000000036A00002010002044110000000052
-:104C50000001000000204811000000000000217C3D
-:104C600000204411000000000180000000204811D5
-:104C700000000000FFFFFFFF0020481100000000BF
-:104C800000000000002048110000000000000000AB
-:104C90001700000000000000810000000020441107
-:104CA000000000000000000100204811000000008A
-:104CB0000004217F006044110000067C0000001FFA
-:104CC00000210230000000000000000014C00000BD
-:104CD0000000067B0000001000404C11000006613F
-:104CE00000000000C02004000000000000000000E0
-:104CF00038C00000000000000000001D00200A2D48
-:104D0000000000000000001E00200E2D000000002A
-:104D10000000001F0020122D0000000000000020F5
-:104D20000020162D00000000000021690020441121
-:104D30000000000000000000002048040000000007
-:104D400000000000002048050000000000000000F6
-:104D50000020480100000000CAFEBABE0020481131
-:104D600000000000000000040030122400000000D9
-:104D700000000000002F00640000000000000000A0
-:104D80000CC000000000067A0000000300281A2270
-:104D900000000000000000080022122200000000B5
-:104DA000FFFFF000002812240000000000000000B7
-:104DB000002910C4000000000000001F004036243D
-:104DC0000000000000000000008000000000000063
-:104DD000000000001AC000000000067C9F000000D8
-:104DE0000020441100000000CAFEBABE0020481195
-:104DF00000000000000000001AE000000000067F34
-:104E00000000000000800000000000000000000022
-:104E10001AC00000000006819E000000002044111E
-:104E200000000000CAFEBABE0020481100000000C9
-:104E3000000000001AE000000000068400000000EE
-:104E40000080000000000000000000000060000082
-:104E50000000000B000010000060041100000315AA
-:104E6000000000000020041100000000000000000D
-:104E700000600811000001B20000225C0020441113
-:104E800000000000000000030020481100000000A6
-:104E90000000225600204411000000000000001B0A
-:104EA00000204811000000000000A1FC0020441177
-:104EB0000000000000000001002048110000000078
-:104EC0000001A1FDC02044110000000000000021ED
-:104ED00000201E2D000000000000001000221E27F0
-:104EE00000000000000000240020222D000000002F
-:104EF0000000FFFF00282228000000000000000042
-:104F000000294907000000000000000000204811AF
-:104F100000000000000000220020222D0000000000
-:104F20000000FFFF00282228000000000000000011
-:104F3000002949070000000000000000002048117F
-:104F4000000000000000002300201E2D00000000D3
-:104F50000000001000221E270000000000000000DA
-:104F6000002949070000000000000000004048112F
-:104F70000000000000000000000000000000000031
-:104F80000000000000000000000000000000000021
-:104F90000000000000000000000000000000000011
-:104FA0000000000000000000000000000000000001
-:104FB00000000000000000000000000000000000F1
-:104FC00000000000000000000000000000000000E1
-:104FD00000000000000000000000000000000000D1
-:104FE00000000000000000000000000000000000C1
-:104FF00000000000000000000000000000000000B1
-:1050000000000000000000000000000000000000A0
-:105010000000000000000000000000000000000090
-:105020000000000000000000000000000000000080
-:105030000000000000000000000000000000000070
-:105040000000000000000000000000000000000060
-:105050000000000000000000000000000000000050
-:105060000000000000000000000000000000000040
-:105070000000000000000000000000000000000030
-:105080000000000000000000000000000000000020
-:105090000000000000000000000000000000000010
-:1050A0000000000000000000000000000000000000
-:1050B00000000000000000000000000000000000F0
-:1050C00000000000000000000000000000000000E0
-:1050D00000000000000000000000000000000000D0
-:1050E00000000000000000000000000000000000C0
-:1050F00000000000000000000000000000000000B0
-:10510000000000000000000000000000000000009F
-:10511000000000000000000000000000000000008F
-:10512000000000000000000000000000000000007F
-:10513000000000000000000000000000000000006F
-:10514000000000000000000000000000000000005F
-:10515000000000000000000000000000000000004F
-:10516000000000000000000000000000000000003F
-:10517000000000000000000000000000000000002F
-:10518000000000000000000000000000000000001F
-:10519000000000000000000000000000000000000F
-:1051A00000000000000000000000000000000000FF
-:1051B00000000000000000000000000000000000EF
-:1051C00000000000000000000000000000000000DF
-:1051D00000000000000000000000000000000000CF
-:1051E00000000000000000000000000000000000BF
-:1051F00000000000000000000000000000000000AF
-:10520000000000000000000000000000000000009E
-:10521000000000000000000000000000000000008E
-:10522000000000000000000000000000000000007E
-:10523000000000000000000000000000000000006E
-:10524000000000000000000000000000000000005E
-:10525000000000000000000000000000000000004E
-:10526000000000000000000000000000000000003E
-:10527000000000000000000000000000000000002E
-:10528000000000000000000000000000000000001E
-:10529000000000000000000000000000000000000E
-:1052A00000000000000000000000000000000000FE
-:1052B000014204F505B302500000000001C301687B
-:1052C000043505B300000000022502090250015117
-:1052D000000000000223024502A00241000000007D
-:1052E00003CD05B305B305B300000000063C063D41
-:1052F000031F05B30000000005B305B803200340F9
-:1053000000000000032A0282034203340000000070
-:1053100005B305B305B305B30000000005B30544AC
-:1053200005B305B30000000003B205B304AE0344A7
-:1053300000000000048D0443043305B300000000A6
-:1053400004C305B3043704D000000000044304FA8A
-:10535000035103710000000005B305B305B305B3A5
-:105360000000000005B305B305B305B3000000005D
-:1053700005B305B3063205BA0000000005B305B356
-:10538000000705B30000000005B305B305B305B37E
-:105390000000000005B305B305B305B3000000002D
-:1053A00003EE03E303FE03FC00000000040404001A
-:1053B00004020406000000000412040E041A04167D
-:1053C000000000000422041E042A0426000000003D
-:1053D00005B305B3042E05B30000000005B305B303
-:1053E00005B305B30000000005B305B305B305B36D
-:1053F00000000000000206680686000600000000AB
-:00000001FF
diff --git a/firmware/radeon/RV670_pfp.bin.ihex b/firmware/radeon/RV670_pfp.bin.ihex
deleted file mode 100644
index f55292c97b79..000000000000
--- a/firmware/radeon/RV670_pfp.bin.ihex
+++ /dev/null
@@ -1,145 +0,0 @@
-:1000000000CA040000A00000007E828B007C038BED
-:10001000008001B8007C038B00D4401E00EE001E5F
-:1000200000CA040000A00000007E828B00C41838C3
-:1000300000CA240000CA2800009581A800C41C3A08
-:1000400000C3C00000CA080000CA0C00007C744B4A
-:1000500000C200050099C00000C41C3A007C744C2A
-:1000600000C0FFF000042C0400309002007D250049
-:1000700000351402007D350B00255403007CD5802B
-:1000800000259C030095C00400D5001B007EDDC147
-:10009000007D9D8000D6801B00D5801B00D4401EB3
-:1000A00000D5401E00D6401E00D6801E00D4801E03
-:1000B00000D4C01E009783D300D5C01E00CA08001C
-:1000C0000080001A00CA0C0000E4011E00D4001ECB
-:1000D0000080000C00C4183800E4013E00D4001E6B
-:1000E0000080000C00C4183800D4401E00EE001E32
-:1000F00000CA040000A00000007E828B00E4011E04
-:1001000000D4001E00D4401E00EE001E00CA0400F1
-:1001100000A00000007E828B00E4013E00D4001E9F
-:1001200000D4401E00EE001E00CA040000A0000023
-:10013000007E828B00CA180000D4401E00D5801EAD
-:100140000080005300D4007500D4401E00CA08008F
-:1001500000CA0C0000CA100000D4801900D4C018D6
-:1001600000D5001700D4801E00D4C01E00D5001E8C
-:1001700000E2001E00CA040000A00000007E828B86
-:1001800000CA080000D4806000D4401E0080000037
-:1001900000D4801E00CA080000D4806100D4401E34
-:1001A0000080000000D4801E00CA080000CA0C00B5
-:1001B00000D4401E00D4801600D4C01600D4801E87
-:1001C000008001B800D4C01E00C6084300CA0C005D
-:1001D00000CA10000094800400CA140000E420F358
-:1001E00000D4201300D5606500D4E01C00D5201C8D
-:1001F00000D5601C008000000006200100C60843F6
-:1002000000CA0C0000CA1000009483F700CA140052
-:1002100000E420F30080007900D4201300C60843D6
-:1002200000CA0C0000CA1000009883EF00CA140036
-:1002300000D400640080008D0000000000C414326F
-:1002400000C6184300C4082F0095400500C40C30B8
-:1002500000D4401E0080000000EE001E009583F5D3
-:1002600000C4103100D4403300D5206500D4A01C58
-:1002700000D4E01C00D5201C00E4015E00D4001E68
-:10028000008000000006200100CA1800000A2001BA
-:1002900000D6007600C408360098800700C61045D6
-:1002A0000095011000D4001F00D46062008000009F
-:1002B00000D4206200CC383500CC1433008401BB5C
-:1002C00000D4007200D5401E0080000000EE001E29
-:1002D00000E2001A008401BB00E2001A00CC104BBF
-:1002E00000CC0447002C9401007D098B0098400548
-:1002F000007D15CB00D4001A008001B800D4006D39
-:100300000034440100CC0C480098403A00CC2C4A00
-:100310000095800400CC0449008001B800D4001A84
-:1003200000D4C01A00282801008400F000CC10037B
-:100330000098801B0004380C008400F000CC1003EF
-:100340000098801700043808008400F000CC1003E7
-:100350000098801300043804008400F000CC1003DF
-:100360000098801400CC104C009A800900CC144DE9
-:10037000009840DC00D4006D00CC184800D5001A6D
-:1003800000D5401A008000C900D5801A0096C0D55B
-:1003900000D4006D008001B800D4006E009AC00344
-:1003A00000D4006D00D4006E0080000000EC007FDF
-:1003B000009AC0CC00D4006D008001B800D4006E5B
-:1003C00000CC140300CC180300CC1C03007D910367
-:1003D000007DD583007D190C0035CC1F0035701FC2
-:1003E000007CF0CB007CD08B00880000007E8E8BE0
-:1003F0000095C00400D4006E008001B800D4001A3B
-:1004000000D4C01A00CC080300CC0C0300CC1003AD
-:1004100000CC140300CC180300CC1C0300CC240334
-:1004200000CC28030035C41F0036B01F007C704B81
-:100430000034F01F007C704B0035701F007C704B47
-:10044000007D8881007DCCC1007E5101007E9541F8
-:10045000007C9082007CD4C2007C848B009AC00314
-:10046000007C8C8B002C88010098809E00D4006D4D
-:100470000098409C00D4006E00CC084C00CC0C4D81
-:1004800000CC104800D4801A00D4C01A00800101AA
-:1004900000D5001A00CC083200D40032009482D972
-:1004A00000CA0C0000D4401E0080000000D4001ED2
-:1004B00000E4011E00D4001E00CA080000CA0C009F
-:1004C00000CA100000D4401E00CA140000D4801ED0
-:1004D00000D4C01E00D5001E00D5401E00D54034FB
-:1004E0000080000000EE001E0028040400E2001A54
-:1004F00000E2001A00D4401A00CA380000CC0803F9
-:1005000000CC0C0300CC0C0300CC0C03009882BD83
-:1005100000000000008401BB00D7A06F0080000035
-:1005200000EE001F00CA040000C2FF0000CC083427
-:1005300000C13FFF007C74CB007CC90B007D010F24
-:10054000009902B0007C738B008401BB00D7A06FC0
-:100550000080000000EE001F00CA080000281900FB
-:10056000007D898B009580140028140400CA0C00BB
-:1005700000CA100000CA1C0000CA240000E2001FCC
-:1005800000D4C01A00D5001A00D5401A00CC1803B8
-:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
-:1005A000007D9C4700984297000000000080016198
-:1005B00000D4C01A00D4401E00D4801E0080000069
-:1005C00000EE001E00E4011E00D4001E00D4401EF8
-:1005D00000EE001E00CA040000A00000007E828B16
-:1005E00000E4013E00D4001E00D4401E00EE001EB8
-:1005F00000CA040000A00000007E828B00CA080030
-:1006000000248C06000CCC060098C00600CC104ECE
-:100610000099000400D4007300E4011E00D4001E01
-:1006200000D4401E00D4801E0080000000EE001E9A
-:1006300000CA080000CA0C000034D01800251001C0
-:100640000095002100C17FFF00CA100000CA1400FD
-:1006500000CA180000D4801D00D4C01D007DB18BDD
-:1006600000C1420200C2C00100D5801D0034DC0E72
-:10067000007D5D4C007F734C00D7401E00D5001EEE
-:1006800000D5401E00C1420000C2C00000099C010C
-:100690000031DC10007F5F4C007F734C00042802A7
-:1006A000007D838000D5A86F00D5806600D7401EEE
-:1006B00000EC005E00C8240200C82402008001B8DB
-:1006C00000D6007600D4401E00D4801E00D4C01E88
-:1006D0000080000000EE001E0080000000EE001F01
-:1006E00000D4001F0080000000D4001F00D4001FB1
-:1006F0000088000000D4001F00000000000000007F
-:1007000000000000000000000000000000000000E9
-:1007100000000000000000000000000000000000D9
-:1007200000000000000000000000000000000000C9
-:1007300000000000000000000000000000000000B9
-:1007400000000000000000000000000000000000A9
-:100750000000000000000000000000000000000099
-:100760000000000000000000000000000000000089
-:100770000000000000000000000000000000000079
-:100780000000000000000000000000000000000069
-:100790000000000000000000000000000000000059
-:1007A0000000000000000000000000000000000049
-:1007B0000000000000000000000000000000000039
-:1007C0000000000000000000000000000000000029
-:1007D0000000000000000000000000000000000019
-:1007E0000000000000000000000000000000000009
-:1007F00000000000000000000000000000000000F9
-:1008000000010171000201780003008F0004007FE5
-:10081000000500030006003F000700320008012C1D
-:1008200000090046000A0036001001B6001700A2B9
-:100830000022013A00230149002000B400240125D0
-:100840000027004D0028006A002A0060002B00529B
-:10085000002F0065003200870034017F003C015604
-:10086000003F00720041018C0044012E00550173CD
-:100870000056017A0060000B00610034006200380D
-:1008800000630038006400380065003800660038F6
-:10089000006700380068003A00690041006A0048BB
-:1008A000006B0048006C0048006D0048006E004876
-:1008B000006F00480000000600000006000000066F
-:1008C0000000000600000006000000060000000610
-:1008D0000000000600000006000000060000000600
-:1008E00000000006000000060000000600000006F0
-:1008F00000000006000000060000000600000006E0
-:00000001FF
diff --git a/firmware/radeon/RV710_me.bin.ihex b/firmware/radeon/RV710_me.bin.ihex
deleted file mode 100644
index 5cdfe306eea5..000000000000
--- a/firmware/radeon/RV710_me.bin.ihex
+++ /dev/null
@@ -1,341 +0,0 @@
-:10000000CC0003EA04080003CC8000437C4080005D
-:10001000A0000000CC80006280000003D040007F80
-:1000200080000003CC4000417C40C000C0160004AA
-:1000300030D03FFF7D15000CCC11000028D8001EE9
-:100040003198000128DC001FC820000495C000067C
-:100050007C424000CC0000627E56800CCC2900001F
-:10006000C82400047E26000B958000067C42C00058
-:10007000CC0000627ED7000CCC310000C82C0004FC
-:100080007E2E000CCC00006231103FFF8000000388
-:10009000CE1100007C40C00080000003CC40004036
-:1000A00080000003CC4122577C418000CC400045B9
-:1000B000CC400048CC41225CCC41A1FC7C4080007B
-:1000C000A0000000CC800062CC400045CC4000483D
-:1000D0007C40C000CC41225CCC41A1FC7C40800033
-:1000E000A0000000CC800062CC000045CC0000489D
-:1000F000CC41225CCC41A1FC7C408000A0000000EF
-:10010000CC800062040CA1FDC0120001CC000045AF
-:10011000CC0000487CD0C00CCC41225CCC41A1FC7E
-:10012000D04D00007C408000A0000000CC80006228
-:1001300080000003CC41225D7C4080007C40C000F8
-:10014000C02A00027C4100007D29000C309400018F
-:1001500030980006309C030029DC00087C42000037
-:100160007C4240009540000FC02E000405F022584C
-:100170007F2F000CCC310000C8280004CCC12169BD
-:10018000CD01216ACE81216B0DB40002CC01216C1E
-:100190009740000E0DB400008000007DC834000AB6
-:1001A0000DB40002974000090DB40000C02E0004F9
-:1001B00005F022587F2F000CCC310000C828000425
-:1001C0008000007DC834000A974000047E02800051
-:1001D0008000007DC834000A0DB400049740FF8CF5
-:1001E00000000000CE01216DCE41216EC828000321
-:1001F000C834000A9B400004043C00058400026DE2
-:10020000CC0000620DF400009740000BC82C03E600
-:10021000CE81A2B7C03000067EF34028C030002057
-:100220007F6B80207FB3C029CF81A2C480000003F0
-:10023000CFC1A2D10DF400019740000BC82C03E7F9
-:10024000CE81A2BBC03000067EF34028C030002023
-:100250007F6B80207FB3C029CF81A2C580000003BF
-:10026000CFC1A2D20DF400029740000BC82C03E8C6
-:10027000CE81A2BFC03000067EF34028C0300020EF
-:100280007F6B80207FB3C029CF81A2C6800000038E
-:10029000CFC1A2D3C82C03E9CE81A2C3C0300006CF
-:1002A0007EF34028C03000207F6B80207FB3C029C0
-:1002B000CF81A2C780000003CFC1A2D48000000379
-:1002C000CC4000427C40C0007C4100002914001D4D
-:1002D000315400019940000C31181000C81C001165
-:1002E00095C00000C81C0011CCC12100CD01210126
-:1002F000CCC12102CD012103041800048000037E3B
-:10030000CD81A2A4C02A00049580000836A821A3AC
-:10031000CC290000C8280004C81C00110DE40040CE
-:100320009640FFFFC81C0011CCC12170CD01217186
-:10033000C820001296000000C82000128000037E32
-:10034000CC0000647C40C0007C410000CC00004533
-:10035000CC00004840D40003CD41225CCD01A1FC7B
-:10036000C01A0001041CA1FD7DD9C00C7C42000014
-:1003700008CC00010624000106280002CE1D000062
-:10038000CE5D000098C0FFFACE9D00007C4080004A
-:10039000A0000000CC8000627C40C00030D0000192
-:1003A00028CC00017C414000950000067C41800083
-:1003B000CD41216DCD81216E800000F4C81C000369
-:1003C000C02200047E16000CCC210000C81C0004D2
-:1003D0007C42400098C000047C4280008000000302
-:1003E000CDE50000CE412169CE81216ACDC1216BCE
-:1003F00080000003CC01216C7C40C0007C410000E7
-:100400007C4140007C4180007C41C00028A4000861
-:10041000326400FF0E68003C9680000A7C020000F7
-:100420007C4200001E300003CC00006A9B000003E9
-:100430004220000504200040800001117C024000A1
-:100440007E0240009A4000000A64000130EC001077
-:100450009AC0000ACC000062C02A0004C82C002107
-:100460007E92800CCC000041CC290000CEC000213F
-:1004700080000121C8300004CD01216DCD41216EE5
-:10048000C83000037F1F000B30F4000727780001FD
-:100490009740002A07B801269F8000000000000056
-:1004A000800001367F1B80048000013A7F1B80059D
-:1004B0008000013E7F1B8002800001427F1B800381
-:1004C000800001467F1B80078000014A7F1B800659
-:1004D0008000014F28A400089B80001928A4000870
-:1004E0008000015F326400FF9B80001528A4000893
-:1004F0008000015F326400FF9B80001128A4000887
-:100500008000015F326400FF9B80000D28A400087A
-:100510008000015F326400FF9B80000928A400086E
-:100520008000015F326400FF9B80000528A4000862
-:100530008000015F326400FF28A40008326400FFDD
-:100540000E68003C9A80FEB228EC00087C43400014
-:100550007C4380007C43C00096C00007CC00006252
-:10056000CF412169CF81216ACFC1216B8000000377
-:10057000CC01216C80000003CFF50000CC00006BA3
-:10058000840003810E68003C9A800004C82800158E
-:1005900080000003D040007F9680FFAB7E024000C9
-:1005A0008400023BC00E0002CC00004180000239F2
-:1005B000CCC1304A7C40C0007C410000C01E00011C
-:1005C00029240012C022000296400005C026000423
-:1005D000C027FFFB7D25000BC02600007DD2800BCD
-:1005E0007E12C00B7D25000C7C4140007C418000C8
-:1005F000CCC121699A80000ACD01216ACD41216BCD
-:1006000096C0FE83CD81216CC83000189700000091
-:10061000C830001880000003CC000018840003815B
-:10062000CC00007FC8140013C8180014CD41216B02
-:1006300096C0FE77CD81216C80000183C830001800
-:10064000C80C000898C00000C80C00087C410000DD
-:1006500095000002000000007C414000C820000915
-:10066000CC400043CE01A1F4CC400044C00E800039
-:100670007C4240007C4280002AAC001F96C0FE6491
-:10068000C035F000CE4003E232780003267C00083B
-:100690007FF7C00B7FFBC00C2A780018CFC003E3A4
-:1006A000CF8003E426B000027F3F0000CF0003E5C7
-:1006B0008000031F7C80C0007C40C00028D0000860
-:1006C0003110000F9500000F2528000106A801B485
-:1006D0009E80000000000000800001D5C0120800CC
-:1006E000800001E3C814000F800001EAC814001064
-:1006F000800001F1CCC1A2A4800001FAC81400114D
-:1007000030D0003F0D2800159A8000120D28001EE1
-:100710009A80001E0D2800209A8000230D24000FCF
-:100720000D2800107E6A800C9A8000260D2000049F
-:100730000D2400140D2800287E62400C7EA6800C3B
-:100740009A80002AC814001180000003CCC1A2A422
-:10075000C01208007C4140007D0CC00CC012000893
-:1007600029580003295C000C7C4200007DD1C00B9D
-:10077000262000147E1E400C7E4E800CCE81A2A44A
-:1007800080000003CD81A1FEC814000F0410210ECB
-:1007900095400000C814000FD051000080000003F5
-:1007A000CCC1A2A4C8140010041021089540000078
-:1007B000C8140010D051000080000003CCC1A2A4D6
-:1007C000CCC1A2A404100001CD0000198400038153
-:1007D000CC00007FC810001999000000C810001953
-:1007E000800000047C40800004102100954000003F
-:1007F000C8140011D05100008000037ECCC1A2A417
-:100800007C40C000CC40000D94C0FE01CC40000EE6
-:100810007C4100009500000508CC0001C8140005CB
-:10082000994000140000000098C0FFFB7C410000CC
-:10083000800000047D008000C81400057C40C000DA
-:100840009940000CC818000C7C4100009580FDF018
-:10085000C820000EC81C000D662000207E1E002C43
-:10086000252400027E62402080000003CCE60000C8
-:100870007C410000CC00006CCC00006DC818001F4B
-:10088000C81C001E659800207DD9C02C7CD4C00CEB
-:10089000CCDE000045DC0004C82800179680000F5D
-:1008A000C00E0001286800082AAC001632A800FF1C
-:1008B0000EB000497F2F000B9700000600000000DB
-:1008C000C81400057C40C000800002237C41000069
-:1008D00080000226D040007F8400023BCC00004113
-:1008E000CCC1304A94000000C83C001A043C00050A
-:1008F000CFC1A2A4C0361F90C0387FFF7C03C010B8
-:100900007F7B400CCF41217CCFC1217DCC01217E5A
-:10091000C03A00040434217F7F7B400CCC350000BA
-:10092000C83C00042BFC001F0438002097C00005C1
-:10093000CC0000629B8000000BB8000180000247E1
-:10094000CC000071CC01A1F404380016C0360002BE
-:10095000CF81A2A488000000CF4120107C40C000BD
-:1009600028D0001C9500000504D40001CD4000658E
-:1009700080000003CD40006809540002800000039D
-:10098000CD4000668400026CC81803EA7C40C000B9
-:100990009980FD9FC814001608D000019940002BD3
-:1009A000CD0000687C408000A0000000CC80006288
-:1009B000043C0005CFC1A2A4CC01A1F484000381B2
-:1009C000CC00004688000000CC00007F8400027E3E
-:1009D000C81803EA7C40C0009980FD8DC814001639
-:1009E00008D0000199400019CD0000687C408000CB
-:1009F000A0000000CC800062043C0022CFC1A2A471
-:100A000084000381CC00004788000000CC00007FF8
-:100A1000C81000169900000DCC400067800000044B
-:100A20007C408000C81803EA9980FD797C40C000B2
-:100A300094C00003C810001699000004CCC00068E0
-:100A4000800000047C4080008400023BC0148000D1
-:100A5000CC000041CD41304AC01480009900000014
-:100A6000C8100016800000047C408000C012000105
-:100A70007C51400C80000003D05500007C40C00039
-:100A80007C4100007C4140007C418000291C001F0B
-:100A9000CCC0004ACD00004B95C00003C01C8000B4
-:100AA000CDC12010DD830000055C2000CC00006279
-:100AB00080000003D81F41007C40C0007C41000042
-:100AC0007C4140007C418000CCC0004CCD00004DFA
-:100AD000DD830000055CA00080000003D81F4100FA
-:100AE0007C40C0007C4100007C4140007C41800093
-:100AF000CCC0004ECD00004FDD830000055CC0007F
-:100B000080000003D81F41007C40C0007C410000F1
-:100B10007C4140007C418000CCC00050CD000051A1
-:100B2000DD830000055CF8E080000003D81F410071
-:100B30007C40C0007C4100007C4140007C41800042
-:100B4000CCC00052CD000053DD830000055CF8806E
-:100B500080000003D81F41007C40C0007C410000A1
-:100B60007C4140007C418000CCC00054CD00005549
-:100B7000DD830000055CE00080000003D81F410019
-:100B80007C40C0007C4100007C4140007C418000F2
-:100B9000CCC00056CD000057DD830000055CF0009E
-:100BA00080000003D81F41007C40C0007C41000051
-:100BB0007C4140007C418000CCC00058CD000059F1
-:100BC000DD830000055CF3FC80000003D81F4100BA
-:100BD000D04320007C408000A0000000CC80006258
-:100BE000D043A0007C408000A0000000CC800062C8
-:100BF000D043C0007C408000A0000000CC80006298
-:100C0000D043F8E07C408000A0000000CC8000626F
-:100C1000D043F8807C408000A0000000CC800062BF
-:100C2000D043E0007C408000A0000000CC80006247
-:100C3000D043F0007C408000A0000000CC80006227
-:100C4000D043F3FC7C408000A0000000CC80006218
-:100C5000C81403E0CC430000CC430000CC430000A8
-:100C60007D45C000CDC30000D04300007C40800023
-:100C7000A0000000CC8000627C40C000C81003E2ED
-:100C8000C81403E5C81803E3C81C03E4CD81216937
-:100C9000CDC1216ACCC1216BCC01216C04200004A0
-:100CA0007DA180007D9640029640FCD9CD8003E373
-:100CB00031280003C02DF000251800087DAD800B01
-:100CC0007DA9800C80000003CD8003E3308CFFFF02
-:100CD000D04D00007C408000A0000000CC8000626D
-:100CE000C8140020155800029580FFFFC81400208A
-:100CF000CC00006ECC4121807C40C000CCC1218D55
-:100D0000CC41218128D0001F34588000CD81218C16
-:100D10009500FCBFCC412182C81400209940FFFF00
-:100D2000C8140020800000047C4080007C40C0008B
-:100D300028D0001831100001C01600809500000373
-:100D4000C02A00047CD4C00CCCC1217CCC41217DC4
-:100D5000CC41217E7C4180001DB0000336A0217F64
-:100D60009B000003419C0005041C004099C000004A
-:100D700009DC0001CC210000C82400042A6C001FFB
-:100D8000419C00059AC0FFFACC80006280000004FC
-:100D90007C4080007C40C00004D403E68000000357
-:100DA000CC5400008000037ECC4003EAC01C8000CD
-:100DB000044CA000CDC120107C410000C8140009E3
-:100DC00004180000041C0008CD80007109DC00013B
-:100DD00005980001CD0D000099C0FFFCCC80006299
-:100DE0008000037ECD400071C00E0100CC000041A8
-:100DF000CCC1304AC83C007FCC00007F800000039B
-:100E0000CC00007FCC00007F88000000CC00007F79
-:100E100000000000000000000000000000000000D2
-:100E200000000000000000000000000000000000C2
-:100E300000000000000000000000000000000000B2
-:100E400000000000000000000000000000000000A2
-:100E50000000000000000000000000000000000092
-:100E60000000000000000000000000000000000082
-:100E70000000000000000000000000000000000072
-:100E80000000000000000000000000000000000062
-:100E90000000000000000000000000000000000052
-:100EA0000000000000000000000000000000000042
-:100EB0000000000000000000000000000000000032
-:100EC0000000000000000000000000000000000022
-:100ED0000000000000000000000000000000000012
-:100EE0000000000000000000000000000000000002
-:100EF00000000000000000000000000000000000F2
-:100F000000000000000000000000000000000000E1
-:100F100000000000000000000000000000000000D1
-:100F200000000000000000000000000000000000C1
-:100F300000000000000000000000000000000000B1
-:100F400000000000000000000000000000000000A1
-:100F50000000000000000000000000000000000091
-:100F60000000000000000000000000000000000081
-:100F70000000000000000000000000000000000071
-:100F80000000000000000000000000000000000061
-:100F90000000000000000000000000000000000051
-:100FA0000000000000000000000000000000000041
-:100FB0000000000000000000000000000000000031
-:100FC0000000000000000000000000000000000021
-:100FD0000000000000000000000000000000000011
-:100FE0000000000000000000000000000000000001
-:100FF00000000000000000000000000000000000F1
-:1010000000000000000000000000000000000000E0
-:1010100000000000000000000000000000000000D0
-:1010200000000000000000000000000000000000C0
-:1010300000000000000000000000000000000000B0
-:1010400000000000000000000000000000000000A0
-:101050000000000000000000000000000000000090
-:101060000000000000000000000000000000000080
-:101070000000000000000000000000000000000070
-:101080000000000000000000000000000000000060
-:101090000000000000000000000000000000000050
-:1010A0000000000000000000000000000000000040
-:1010B0000000000000000000000000000000000030
-:1010C0000000000000000000000000000000000020
-:1010D0000000000000000000000000000000000010
-:1010E0000000000000000000000000000000000000
-:1010F00000000000000000000000000000000000F0
-:1011000000000000000000000000000000000000DF
-:1011100000000000000000000000000000000000CF
-:1011200000000000000000000000000000000000BF
-:1011300000000000000000000000000000000000AF
-:10114000000000000000000000000000000000009F
-:10115000000000000000000000000000000000008F
-:10116000000000000000000000000000000000007F
-:10117000000000000000000000000000000000006F
-:10118000000000000000000000000000000000005F
-:10119000000000000000000000000000000000004F
-:1011A000000000000000000000000000000000003F
-:1011B000000000000000000000000000000000002F
-:1011C000000000000000000000000000000000001F
-:1011D000000000000000000000000000000000000F
-:1011E00000000000000000000000000000000000FF
-:1011F00000000000000000000000000000000000EF
-:1012000000000000000000000000000000000000DE
-:1012100000000000000000000000000000000000CE
-:1012200000000000000000000000000000000000BE
-:1012300000000000000000000000000000000000AE
-:10124000000000000000000000000000000000009E
-:10125000000000000000000000000000000000008E
-:10126000000000000000000000000000000000007E
-:10127000000000000000000000000000000000006E
-:10128000000000000000000000000000000000005E
-:10129000000000000000000000000000000000004E
-:1012A000000000000000000000000000000000003E
-:1012B000000000000000000000000000000000002E
-:1012C000000000000000000000000000000000001E
-:1012D000000000000000000000000000000000000E
-:1012E00000000000000000000000000000000000FE
-:1012F00000000000000000000000000000000000EE
-:1013000000000000000000000000000000000000DD
-:1013100000000000000000000000000000000000CD
-:1013200000000000000000000000000000000000BD
-:1013300000000000000000000000000000000000AD
-:10134000000000000000000000000000000000009D
-:10135000000000000000000000000000000000008D
-:10136000000000000000000000000000000000007D
-:10137000000000000000000000000000000000006D
-:10138000000000000000000000000000000000005D
-:10139000000000000000000000000000000000004D
-:1013A000000000000000000000000000000000003D
-:1013B000000000000000000000000000000000002D
-:1013C000000000000000000000000000000000001D
-:1013D000000000000000000000000000000000000D
-:1013E00000000000000000000000000000000000FD
-:1013F00000000000000000000000000000000000ED
-:101400000001033300100006001700080021000A45
-:101410000027002A002800250029002B002A002888
-:10142000002B002B002D003A002E0041002F004C15
-:101430000034004E00360032003900B1003A00D1CD
-:10144000003B00E6003C00FE003D016D003F00AFA8
-:10145000004103380043034B00440190004500FE67
-:10146000004601AE004701AE004802000049020EEE
-:10147000004A0257004B028400520261005302737B
-:10148000005402890057029B0060029F006102AE77
-:10149000006202B8006302C2006402CC006502D69A
-:1014A000006602E0006702EA006802F4006902F8E0
-:1014B000006A02FC006B0300006C0304006D03086B
-:1014C000006E030C006F03100070031400720365BC
-:1014D0000074036B00790369007C031E000F037A1C
-:1014E000000F037A000F037A000F037A000F037ACC
-:1014F000000F037A000F037A000F037A000F037ABC
-:10150000000F037A000F037A000F037A000F037AAB
-:10151000000F037A000F037A000F037A000F037A9B
-:10152000000F037A000F037A000F037A000F037A8B
-:10153000000F037A000F037A000F037A000F037A7B
-:00000001FF
diff --git a/firmware/radeon/RV710_pfp.bin.ihex b/firmware/radeon/RV710_pfp.bin.ihex
deleted file mode 100644
index 3d811ff0a1a8..000000000000
--- a/firmware/radeon/RV710_pfp.bin.ihex
+++ /dev/null
@@ -1,213 +0,0 @@
-:100000007C408000A00000007E82800B8000000009
-:10001000DC030000CC800040D04000407C408000E9
-:10002000A00000007E82800BC818000E31980001ED
-:100030007C4240009580023A7C428000C81C001C33
-:10004000C037C0007C40C0007C4100007CB4800B05
-:10005000C036000399C00000C81C001C7CB4800C92
-:1000600024D400027D654000CD400043CE80004393
-:10007000CD000043CC800040CE400040CE80004008
-:10008000CCC00040DC3A00009780FFDECD0000408D
-:100090007C40C000800000187C410000D400034078
-:1000A000D4000FC0D4000FA2C818000E8000000CAE
-:1000B00031980002D40003C0D4000FC0D4000FA2B6
-:1000C000C818000E288C000830CC000F3410000136
-:1000D0007D0D00088000000C7D91800BCC800040DD
-:1000E000D04000407C408000A00000007E82800B59
-:1000F000D4000340D4000FC0D4000FA2CC80004035
-:10010000D04000407C408000A00000007E82800B38
-:10011000D40003C0D4000FC0D4000FA2CC80004094
-:10012000D04000407C408000A00000007E82800B18
-:10013000CC4003F980000249CC4003F8C037FFFFF0
-:100140007C414000CF41A29EC82003F8C81C03F99F
-:1001500066200020C81803FB7DE1C02C7D58C00834
-:100160007CDCC02069100020C0360003CC000054A5
-:100170007CB4800C80000069CC8000407C41800011
-:10018000CD81A29ECC80004080000067CD800040E1
-:10019000C019FFFFCC800040CD81A29E7C40C000F2
-:1001A0007C4100007C414000CCC1A1FACD01A1F905
-:1001B000CD41A29DCCC00040CD000040CD400040CC
-:1001C000CC4000407C408000A00000007E82800B7C
-:1001D000CC000054CC8000407C40C0007C4100003A
-:1001E0007C414000CCC1A1FACD01A1F9CD41A29D35
-:1001F000CCC00040CD000040CD400040D040004089
-:100200007C408000A00000007E82800B7C40C0000B
-:1002100030D00001CCC1A29F95000003041400015E
-:1002200004140002CD4003FBCC800040800000009D
-:10023000CCC000407C40C000CC800040CCC1A2A219
-:1002400080000000CCC000407C40C00028D4001FCB
-:10025000CC800040954000037C410000CCC000579A
-:100260002918001FCCC0004095800003CD0000403D
-:10027000CD00005880000249CC00007FC820001744
-:10028000C83000229A0000060E280001C824001E73
-:100290000A640001D4001240CE400040C036C000C5
-:1002A0009680000737747900041C0001CF4000409D
-:1002B000CDC00040CF0003FA7C030000CA0C001040
-:1002C0007C41000094C000047C414000D42002C462
-:1002D000CDE000449B00000B7C418000CC00004B33
-:1002E000CDA00049CD200041CD600041CDA000410E
-:1002F00006200001CE00005680000249CC00007F9D
-:10030000C8280020C82C0021CC0000637EEA4001F0
-:10031000657400207F53402C269C00027DF5C02090
-:1003200069F80020CE80004BCE600049CDE000414E
-:10033000CFA00041CE600041271C00027DF5C02007
-:1003400069F800207DB24001CF00004BCE6000492B
-:10035000CDE00041CFA00041800000BCCE60004154
-:10036000C8200017C83000229A0000060E2800019D
-:10037000C824001E0A640001D4001240CE40004090
-:10038000CA0C00107C41000094C0000BC036C000B5
-:100390009680000737747900041C0001CF400040AC
-:1003A000CDC00040CF0003FA7C030000800000B500
-:1003B0007C414000CC000048800000EE00000000BE
-:1003C000C8200017C81C00230E24000299C0001585
-:1003D0007C4180000A200001CE000056D400044079
-:1003E000CC000040C036C000CA140013964000077D
-:1003F00037747900CF400040CC000040C83003FA89
-:1004000080000103CF000022CC000022954001466D
-:10041000CC00007FCCA0004680000000CC2000462D
-:1004200080000249CC000064C8200017C810001FDB
-:100430009600000509100001D4000440CD000040E2
-:10044000CD000022CC800040D0400040C80C0025E8
-:1004500094C0FEECC8100008CD000040D4000FC0CE
-:1004600080000000D4000FA27C40C0007C4100004E
-:10047000CCC003FDCD0003FCCCC00042CD00004247
-:100480002914001F29180010319800073B5C000157
-:100490007D76000B998000057D5E400BCC0000420C
-:1004A00080000249CC00004D29980001292C000849
-:1004B0009980003D32EC0001960000042930000CC8
-:1004C00080000249CC00004204140010CD400042DC
-:1004D00033300001342800018400015DC81400039A
-:1004E0009B40001B0438000C8400015DC81400030D
-:1004F0009B400017043800088400015DC814000305
-:100500009B400013043800048400015DC8140003FC
-:100510009B400015C80C03FD9A800009C81003FC1D
-:100520009B000101CC00004D04140010CCC000421F
-:10053000CD00004280000135CD40004296C000FA57
-:10054000CC00004D80000249CC00004E9AC0000350
-:10055000CC00004DCC00004EDF8300008000000086
-:10056000D80301FF9AC000F0CC00004D8000024982
-:10057000CC00004EC8180003C81C0003C8200003AC
-:100580007D5D40037DA1C0037D5D400C2A10001FEE
-:10059000299C001F7D1D000B7D17400B880000006B
-:1005A0007E92800B96400004CC00004E80000249F1
-:1005B000CC00004204380008CF800042C808000385
-:1005C000C80C0003C8100003C8140003C8180003B7
-:1005D000C81C0003C8240003C828000329FC001F0E
-:1005E0002AB0001F7FF3C00B28F0001F7FF3C00B61
-:1005F0002970001F7FF3C00B7D8880017DCCC00176
-:100600007E5100017E9540017C9080027CD4C00226
-:100610007CBC800B9AC000037C8F400B38B4000177
-:100620009B4000C1CC00004D9BC000BFCC00004EE1
-:10063000C80C03FDC81003FCCCC000428000016E52
-:10064000CD000042D4000340D4000FC0D4000FA25C
-:10065000CC800040CC400040CC400040CC4000402A
-:100660007C40C000CCC00040CCC0000D8000000029
-:10067000D04000407C40C0007C4100006514002058
-:100680007D4D402C245800027D5980207C41C000C3
-:10069000CD80004269980020CD800042CDC000424C
-:1006A000C023C00005E400027CA0800B266400107B
-:1006B0007CA4800CCC800040CDC00040CCC0004069
-:1006C00095C0000ECD00004009DC0001C8280003E1
-:1006D00096800008CE800040C834001D974000007E
-:1006E000C834001D26A800088400024CCC2B000052
-:1006F00099C0FFF709DC0001DC3A00009780000494
-:100700007C418000800001A225980002A00000002A
-:100710007D808000C818001D7C40C00064D00008A7
-:1007200095800000C818001DCC130000CC8000404C
-:10073000CCC0004080000000CC400040C810001F2A
-:100740007C40C000CC8000407CD1400CCD400040BB
-:100750000518000180000000CD8000227C40C00010
-:10076000645000208400024CCC0000617CD0C02C7E
-:10077000C8200017C8D60000994000087C438000BC
-:10078000DF830000CFA0004F8400024CCC00006249
-:1007900080000000D040007F80000249CC00006251
-:1007A0008400024CCC000061C82000177C40C000CF
-:1007B000C036FF00C810000DC0303FFF7CF5400B75
-:1007C0007D51800B7D81800F998000087CF3800B28
-:1007D000DF830000CFA0004F8400024CCC000062F9
-:1007E00080000000D040007F80000249CC00006201
-:1007F0008400024C7C40C00028DC000895C0001931
-:1008000030DC00107C41000099C0000464540020DA
-:1008100080000208C91D00007D15002CC91E0000C3
-:100820007C4200007C4240007C4180007DE5C00BA2
-:100830007DE280079A80000E41AC00059AC000005E
-:100840000AEC000130DC001099C000040000000038
-:100850008000020BC91D00008000020BC91E0000B1
-:10086000CC800040CCC00040D0400040C80C0025E7
-:1008700094C0FDE4C8100008CD000040D4000FC0B3
-:1008800080000000D4000FA2D4000340D4000FC0A9
-:10089000D4000FA2CC800040D04000407C408000BB
-:1008A000A00000007E82800BD40003C0D4000FC0E3
-:1008B000D4000FA2CC800040D04000407C4080009B
-:1008C000A00000007E82800B7C40C00030D000067B
-:1008D0000D10000699000007C81400159940000586
-:1008E000CC000052D4000340D4000FC0D4000FA2AB
-:1008F000CC800040CCC0004080000000D0400040D0
-:100900007C40C000CC4D0000DC3A00009780FDBD6B
-:1009100004CC000180000242CC4D000080000000A9
-:10092000D040007FCC00007F80000000CC00007F22
-:10093000CC00007F88000000CC00007F0000000099
-:1009400000000000000000000000000000000000A7
-:100950000000000000000000000000000000000097
-:100960000000000000000000000000000000000087
-:100970000000000000000000000000000000000077
-:100980000000000000000000000000000000000067
-:100990000000000000000000000000000000000057
-:1009A0000000000000000000000000000000000047
-:1009B0000000000000000000000000000000000037
-:1009C0000000000000000000000000000000000027
-:1009D0000000000000000000000000000000000017
-:1009E0000000000000000000000000000000000007
-:1009F00000000000000000000000000000000000F7
-:100A000000000000000000000000000000000000E6
-:100A100000000000000000000000000000000000D6
-:100A200000000000000000000000000000000000C6
-:100A300000000000000000000000000000000000B6
-:100A400000000000000000000000000000000000A6
-:100A50000000000000000000000000000000000096
-:100A60000000000000000000000000000000000086
-:100A70000000000000000000000000000000000076
-:100A80000000000000000000000000000000000066
-:100A90000000000000000000000000000000000056
-:100AA0000000000000000000000000000000000046
-:100AB0000000000000000000000000000000000036
-:100AC0000000000000000000000000000000000026
-:100AD0000000000000000000000000000000000016
-:100AE0000000000000000000000000000000000006
-:100AF00000000000000000000000000000000000F6
-:100B000000000000000000000000000000000000E5
-:100B100000000000000000000000000000000000D5
-:100B200000000000000000000000000000000000C5
-:100B300000000000000000000000000000000000B5
-:100B400000000000000000000000000000000000A5
-:100B50000000000000000000000000000000000095
-:100B60000000000000000000000000000000000085
-:100B70000000000000000000000000000000000075
-:100B80000000000000000000000000000000000065
-:100B90000000000000000000000000000000000055
-:100BA0000000000000000000000000000000000045
-:100BB0000000000000000000000000000000000035
-:100BC0000000000000000000000000000000000025
-:100BD0000000000000000000000000000000000015
-:100BE0000000000000000000000000000000000005
-:100BF00000000000000000000000000000000000F5
-:100C0000000302220004022A0005009F00020003E4
-:100C10000006003C0007002700080191000900447D
-:100C2000000A002D00100247001700F0002201D733
-:100C3000002301E80026004C0027005F0020011A75
-:100C4000002800920029004F002A0083002B006436
-:100C5000002F008D003200D80034023200360074BC
-:100C60000039010A003C01FC003F009F00410005E3
-:100C7000004401940048019D004901C5004A01CF8C
-:100C8000005502250056022D0060000A0061002A6E
-:100C90000062003000630030006400300065003006
-:100CA0000066003000670030006800370069003FD0
-:100CB000006A0047006B0047006C0047006D00476A
-:100CC000006E0047006F0047007000470073024746
-:100CD000007B024000000005000000050000000548
-:100CE00000000005000000050000000500000005F0
-:100CF00000000005000000050000000500000005E0
-:100D000000000005000000050000000500000005CF
-:100D100000000005000000050000000500000005BF
-:100D200000000005000000050000000500000005AF
-:100D3000000000050000000500000005000000059F
-:00000001FF
diff --git a/firmware/radeon/RV730_me.bin.ihex b/firmware/radeon/RV730_me.bin.ihex
deleted file mode 100644
index 390c18e7cef3..000000000000
--- a/firmware/radeon/RV730_me.bin.ihex
+++ /dev/null
@@ -1,341 +0,0 @@
-:10000000CC0003EA7C408000A0000000CC800062AD
-:1000100080000001D040007F80000001CC40004102
-:100020007C40C000C016000430D03FFF7D15000C9E
-:10003000CC11000028D8001E3198000128DC001FD8
-:10004000C820000495C000067C424000CC0000623D
-:100050007E56800CCC290000C82400047E26000BAC
-:10006000958000067C42C000CC0000627ED7000C68
-:10007000CC310000C82C00047E2E000CCC000062A5
-:1000800031103FFF80000001CE1100007C40C00015
-:1000900080000001CC40004080000001CC4122578C
-:1000A0007C418000CC400045CC400048CC41225CE3
-:1000B000CC41A1FC7C408000A0000000CC8000620C
-:1000C000CC400045CC4000487C40C000CC41225C84
-:1000D000CC41A1FC7C408000A0000000CC800062EC
-:1000E000CC000045CC000048CC41225CCC41A1FCB6
-:1000F0007C408000A0000000CC800062040CA1FDC8
-:10010000C0120001CC000045CC0000487CD0C00CDF
-:10011000CC41225CCC41A1FCD04D00007C40800051
-:10012000A0000000CC80006280000001CC41225D74
-:100130007C4080007C40C000C02A00027C4100005E
-:100140007D29000C3094000130980006309C03009B
-:1001500029DC00087C4200007C4240009540000FF2
-:10016000C02E000405F022587F2F000CCC31000077
-:10017000C8280004CCC12169CD01216ACE81216B40
-:100180000DB40002CC01216C9740000E0DB40000AC
-:100190008000007BC834000A0DB4000297400009BB
-:1001A0000DB40000C02E000405F022587F2F000C73
-:1001B000CC310000C82800048000007BC834000A4D
-:1001C000974000047E0280008000007BC834000A53
-:1001D0000DB400049740FF8C00000000CE01216D9B
-:1001E000CE41216EC8280003C834000A9B40000499
-:1001F000043C00058400026BCC0000620DF400009A
-:100200009740000BC82C03E6CE81A2B7C030000691
-:100210007EF34028C03000207F6B80207FB3C02950
-:10022000CF81A2C480000001CFC1A2D10DF4000192
-:100230009740000BC82C03E7CE81A2BBC03000065C
-:100240007EF34028C03000207F6B80207FB3C02920
-:10025000CF81A2C580000001CFC1A2D20DF400025F
-:100260009740000BC82C03E8CE81A2BFC030000627
-:100270007EF34028C03000207F6B80207FB3C029F0
-:10028000CF81A2C680000001CFC1A2D3C82C03E950
-:10029000CE81A2C3C03000067EF34028C0300020CB
-:1002A0007F6B80207FB3C029CF81A2C7800000016F
-:1002B000CFC1A2D480000001CC4000427C40C000ED
-:1002C0007C4100002914001D315400019940000CAC
-:1002D00031181000C81C001195C00000C81C001186
-:1002E000CCC12100CD012101CCC12102CD012103CE
-:1002F000041800048000037CCD81A2A4C02A00045D
-:100300009580000836A821A3CC290000C828000445
-:10031000C81C00110DE400409640FFFFC81C0011EE
-:10032000CCC12170CD012171C820001296000000BF
-:10033000C82000128000037CCC0000647C40C00018
-:100340007C410000CC000045CC00004840D40003B4
-:10035000CD41225CCD01A1FCC01A0001041CA1FD0D
-:100360007DD9C00C7C42000008CC000106240001AD
-:1003700006280002CE1D0000CE5D000098C0FFFAE6
-:10038000CE9D00007C408000A0000000CC80006278
-:100390007C40C00030D0000128CC00017C414000EE
-:1003A000950000067C418000CD41216DCD81216EFC
-:1003B000800000F2C81C0003C02200047E16000C5E
-:1003C000CC210000C81C00047C42400098C00004FE
-:1003D0007C42800080000001CDE50000CE41216913
-:1003E000CE81216ACDC1216B80000001CC01216C3E
-:1003F0007C40C0007C4100007C4140007C4180008A
-:100400007C41C00028A40008326400FF0E68003C54
-:100410009680000A7C0200007C4200001E3000032F
-:10042000CC00006A9B00000342200005042000402D
-:100430008000010F7C0240007E0240009A400000D4
-:100440000A64000130EC00109AC0000ACC0000627F
-:10045000C02A0004C82C00217E92800CCC000041F0
-:10046000CC290000CEC000218000011FC83000044C
-:10047000CD01216DCD41216EC83000037F1F000BDF
-:1004800030F40007277800019740002A07B80124BC
-:100490009F80000000000000800001347F1B80046A
-:1004A000800001387F1B80058000013C7F1B80029B
-:1004B000800001407F1B8003800001447F1B800778
-:1004C000800001487F1B80068000014D28A40008A1
-:1004D0009B80001928A400088000015D326400FFA1
-:1004E0009B80001528A400088000015D326400FF95
-:1004F0009B80001128A400088000015D326400FF89
-:100500009B80000D28A400088000015D326400FF7C
-:100510009B80000928A400088000015D326400FF70
-:100520009B80000528A400088000015D326400FF64
-:1005300028A40008326400FF0E68003C9A80FEB2D6
-:1005400028EC00087C4340007C4380007C43C000D2
-:1005500096C00007CC000062CF412169CF81216A9B
-:10056000CFC1216B80000001CC01216C8000000113
-:10057000CFF50000CC00006B8400037F0E68003CC8
-:100580009A800004C828001580000001D040007F38
-:100590009680FFAB7E02400084000239C00E00024C
-:1005A000CC00004180000237CCC1304A7C40C00002
-:1005B0007C410000C01E000129240012C02200025C
-:1005C00096400005C0260004C027FFFB7D25000BD8
-:1005D000C02600007DD2800B7E12C00B7D25000C52
-:1005E0007C4140007C418000CCC121699A80000A96
-:1005F000CD01216ACD41216B96C0FE83CD81216C56
-:10060000C830001897000000C830001880000001B2
-:10061000CC0000188400037FCC00007FC8140013B6
-:10062000C8180014CD41216B96C0FE77CD81216C96
-:1006300080000181C8300018C80C000898C0000074
-:10064000C80C00087C41000095000002000000007A
-:100650007C414000C8200009CC400043CE01A1F4F9
-:10066000CC400044C00E80007C4240007C428000B0
-:100670002AAC001F96C0FE64C035F000CE4003E2F5
-:1006800032780003267C00087FF7C00B7FFBC00C8C
-:100690002A780018CFC003E3CF8003E426B000021D
-:1006A0007F3F0000CF0003E58000031D7C80C00079
-:1006B0007C40C00028D000083110000F9500000FCA
-:1006C0002528000106A801B29E800000000000005D
-:1006D000800001D3C0120800800001E1C814000F9F
-:1006E000800001E8C8140010800001EFCCC1A2A472
-:1006F000800001F8C814001130D0003F0D2800150B
-:100700009A8000120D28001E9A80001E0D280020DD
-:100710009A8000230D24000F0D2800107E6A800CA3
-:100720009A8000260D2000040D2400140D280028B6
-:100730007E62400C7EA6800C9A80002AC8140011AC
-:1007400080000001CCC1A2A4C01208007C4140007E
-:100750007D0CC00CC012000829580003295C000C55
-:100760007C4200007DD1C00B262000147E1E400C70
-:100770007E4E800CCE81A2A480000001CD81A1FE1E
-:10078000C814000F0410210E95400000C814000F7B
-:10079000D051000080000001CCC1A2A4C8140010F8
-:1007A0000410210895400000C8140010D05100002A
-:1007B00080000001CCC1A2A4CCC1A2A404100001FD
-:1007C000CD0000198400037FCC00007FC810001901
-:1007D00099000000C8100019800000027C408000D1
-:1007E0000410210095400000C8140011D0510000F1
-:1007F0008000037CCCC1A2A47C40C000CC40000D92
-:1008000094C0FE01CC40000E7C4100009500000524
-:1008100008CC0001C8140005994000140000000035
-:1008200098C0FFFB7C410000800000027D0080003A
-:10083000C81400057C40C0009940000CC818000C8A
-:100840007C4100009580FDF0C820000EC81C000D02
-:10085000662000207E1E002C252400027E6240209F
-:1008600080000001CCE600007C410000CC00006C60
-:10087000CC00006DC818001FC81C001E6598002021
-:100880007DD9C02C7CD4C00CCCDE000045DC00043B
-:10089000C82800179680000FC00E000128680008C5
-:1008A0002AAC001632A800FF0EB000497F2F000BC3
-:1008B0009700000600000000C81400057C40C0003E
-:1008C000800002217C41000080000224D040007F93
-:1008D00084000239CC000041CCC1304A94000000B1
-:1008E000C83C001A043C0005CFC1A2A4C0361F902A
-:1008F000C0387FFF7C03C0107F7B400CCF41217C40
-:10090000CFC1217DCC01217EC03A00040434217F77
-:100910007F7B400CCC350000C83C00042BFC001F42
-:100920000438002097C00005CC0000629B800000C6
-:100930000BB8000180000245CC000071CC01A1F48D
-:1009400004380016C0360002CF81A2A4880000003F
-:10095000CF4120107C40C00028D0001C950000052D
-:1009600004D40001CD40006580000001CD40006846
-:100970000954000280000001CD4000668400026A34
-:10098000C81803EA7C40C0009980FD9FC814001677
-:1009900008D000019940002BCD0000687C40800009
-:1009A000A0000000CC800062043C0005CFC1A2A4DE
-:1009B000CC01A1F48400037FCC0000468800000035
-:1009C000CC00007F8400027CC81803EA7C40C00091
-:1009D0009980FD8DC814001608D0000199400019B7
-:1009E000CD0000687C408000A0000000CC80006248
-:1009F000043C0022CFC1A2A48400037FCC000047A6
-:100A000088000000CC00007FC81000169900000D7F
-:100A1000CC400067800000027C408000C81803EAD8
-:100A20009980FD797C40C00094C00003C810001676
-:100A300099000004CCC00068800000027C40800067
-:100A400084000239C0148000CC000041CD41304AFE
-:100A5000C014800099000000C81000168000000239
-:100A60007C408000C01200017C51400C80000001DD
-:100A7000D05500007C40C0007C4100007C4140001B
-:100A80007C418000291C001FCCC0004ACD00004BD7
-:100A900095C00003C01C8000CDC12010DD83000084
-:100AA000055C2000CC00006280000001D81F4100DE
-:100AB0007C40C0007C4100007C4140007C418000C3
-:100AC000CCC0004CCD00004DDD830000055CA000D3
-:100AD00080000001D81F41007C40C0007C41000024
-:100AE0007C4140007C418000CCC0004ECD00004FD6
-:100AF000DD830000055CC00080000001D81F4100BC
-:100B00007C40C0007C4100007C4140007C41800072
-:100B1000CCC00050CD000051DD830000055CF8E042
-:100B200080000001D81F41007C40C0007C410000D3
-:100B30007C4140007C418000CCC00052CD0000537D
-:100B4000DD830000055CF88080000001D81F4100B3
-:100B50007C40C0007C4100007C4140007C41800022
-:100B6000CCC00054CD000055DD830000055CE000E2
-:100B700080000001D81F41007C40C0007C41000083
-:100B80007C4140007C418000CCC00056CD00005725
-:100B9000DD830000055CF00080000001D81F4100EB
-:100BA0007C40C0007C4100007C4140007C418000D2
-:100BB000CCC00058CD000059DD830000055CF3FC7B
-:100BC00080000001D81F4100D04320007C408000FD
-:100BD000A0000000CC800062D043A0007C408000D8
-:100BE000A0000000CC800062D043C0007C408000A8
-:100BF000A0000000CC800062D043F8E07C40800080
-:100C0000A0000000CC800062D043F8807C408000CF
-:100C1000A0000000CC800062D043E0007C40800057
-:100C2000A0000000CC800062D043F0007C40800037
-:100C3000A0000000CC800062D043F3FC7C40800028
-:100C4000A0000000CC800062C81403E0CC43000088
-:100C5000CC430000CC4300007D45C000CDC3000064
-:100C6000D04300007C408000A0000000CC800062E7
-:100C70007C40C000C81003E2C81403E5C81803E3B1
-:100C8000C81C03E4CD812169CDC1216ACCC1216B8F
-:100C9000CC01216C042000047DA180007D964002DF
-:100CA0009640FCD9CD8003E331280003C02DF0002D
-:100CB000251800087DAD800B7DA9800C8000000107
-:100CC000CD8003E3308CFFFFD04D00007C408000DE
-:100CD000A0000000CC800062C8140020155800025B
-:100CE0009580FFFFC8140020CC00006ECC4121800D
-:100CF0007C40C000CCC1218DCC41218128D0001F77
-:100D000034588000CD81218C9500FCBFCC412182DC
-:100D1000C81400209940FFFFC81400208000000282
-:100D20007C4080007C40C00028D0001831100001B9
-:100D3000C016008095000003C02A00047CD4C00CBB
-:100D4000CCC1217CCC41217DCC41217E7C418000E5
-:100D50001DB0000336A0217F9B000003419C0005CD
-:100D6000041C004099C0000009DC0001CC210000F7
-:100D7000C82400042A6C001F419C00059AC0FFFA99
-:100D8000CC800062800000027C4080007C40C0007B
-:100D900004D403E680000001CC5400008000037CF2
-:100DA000CC4003EAC01C8000044CA000CDC1201040
-:100DB0007C410000C814000904180000041C00084D
-:100DC000CD80007109DC000105980001CD0D000007
-:100DD00099C0FFFCCC8000628000037CCD40007194
-:100DE000C00E0100CC000041CCC1304AC83C007F9D
-:100DF000CC00007F80000001CC00007FCC00007F91
-:100E000088000000CC00007F00000000000000000F
-:100E100000000000000000000000000000000000D2
-:100E200000000000000000000000000000000000C2
-:100E300000000000000000000000000000000000B2
-:100E400000000000000000000000000000000000A2
-:100E50000000000000000000000000000000000092
-:100E60000000000000000000000000000000000082
-:100E70000000000000000000000000000000000072
-:100E80000000000000000000000000000000000062
-:100E90000000000000000000000000000000000052
-:100EA0000000000000000000000000000000000042
-:100EB0000000000000000000000000000000000032
-:100EC0000000000000000000000000000000000022
-:100ED0000000000000000000000000000000000012
-:100EE0000000000000000000000000000000000002
-:100EF00000000000000000000000000000000000F2
-:100F000000000000000000000000000000000000E1
-:100F100000000000000000000000000000000000D1
-:100F200000000000000000000000000000000000C1
-:100F300000000000000000000000000000000000B1
-:100F400000000000000000000000000000000000A1
-:100F50000000000000000000000000000000000091
-:100F60000000000000000000000000000000000081
-:100F70000000000000000000000000000000000071
-:100F80000000000000000000000000000000000061
-:100F90000000000000000000000000000000000051
-:100FA0000000000000000000000000000000000041
-:100FB0000000000000000000000000000000000031
-:100FC0000000000000000000000000000000000021
-:100FD0000000000000000000000000000000000011
-:100FE0000000000000000000000000000000000001
-:100FF00000000000000000000000000000000000F1
-:1010000000000000000000000000000000000000E0
-:1010100000000000000000000000000000000000D0
-:1010200000000000000000000000000000000000C0
-:1010300000000000000000000000000000000000B0
-:1010400000000000000000000000000000000000A0
-:101050000000000000000000000000000000000090
-:101060000000000000000000000000000000000080
-:101070000000000000000000000000000000000070
-:101080000000000000000000000000000000000060
-:101090000000000000000000000000000000000050
-:1010A0000000000000000000000000000000000040
-:1010B0000000000000000000000000000000000030
-:1010C0000000000000000000000000000000000020
-:1010D0000000000000000000000000000000000010
-:1010E0000000000000000000000000000000000000
-:1010F00000000000000000000000000000000000F0
-:1011000000000000000000000000000000000000DF
-:1011100000000000000000000000000000000000CF
-:1011200000000000000000000000000000000000BF
-:1011300000000000000000000000000000000000AF
-:10114000000000000000000000000000000000009F
-:10115000000000000000000000000000000000008F
-:10116000000000000000000000000000000000007F
-:10117000000000000000000000000000000000006F
-:10118000000000000000000000000000000000005F
-:10119000000000000000000000000000000000004F
-:1011A000000000000000000000000000000000003F
-:1011B000000000000000000000000000000000002F
-:1011C000000000000000000000000000000000001F
-:1011D000000000000000000000000000000000000F
-:1011E00000000000000000000000000000000000FF
-:1011F00000000000000000000000000000000000EF
-:1012000000000000000000000000000000000000DE
-:1012100000000000000000000000000000000000CE
-:1012200000000000000000000000000000000000BE
-:1012300000000000000000000000000000000000AE
-:10124000000000000000000000000000000000009E
-:10125000000000000000000000000000000000008E
-:10126000000000000000000000000000000000007E
-:10127000000000000000000000000000000000006E
-:10128000000000000000000000000000000000005E
-:10129000000000000000000000000000000000004E
-:1012A000000000000000000000000000000000003E
-:1012B000000000000000000000000000000000002E
-:1012C000000000000000000000000000000000001E
-:1012D000000000000000000000000000000000000E
-:1012E00000000000000000000000000000000000FE
-:1012F00000000000000000000000000000000000EE
-:1013000000000000000000000000000000000000DD
-:1013100000000000000000000000000000000000CD
-:1013200000000000000000000000000000000000BD
-:1013300000000000000000000000000000000000AD
-:10134000000000000000000000000000000000009D
-:10135000000000000000000000000000000000008D
-:10136000000000000000000000000000000000007D
-:10137000000000000000000000000000000000006D
-:10138000000000000000000000000000000000005D
-:10139000000000000000000000000000000000004D
-:1013A000000000000000000000000000000000003D
-:1013B000000000000000000000000000000000002D
-:1013C000000000000000000000000000000000001D
-:1013D000000000000000000000000000000000000D
-:1013E00000000000000000000000000000000000FD
-:1013F00000000000000000000000000000000000ED
-:10140000000103310010000400170006002100084D
-:10141000002700280028002300290029002A002690
-:10142000002B0029002D0038002E003F002F004A1D
-:101430000034004C00360030003900AF003A00CFD5
-:10144000003B00E4003C00FC003D016B003F00ADB0
-:1014500000410336004303490044018E004500FC6F
-:10146000004601AC004701AC004801FE0049020CF7
-:10147000004A0255004B02820052025F0053027183
-:1014800000540287005702990060029D006102AC7F
-:10149000006202B6006302C0006402CA006502D4A2
-:1014A000006602DE006702E8006802F2006902F6E8
-:1014B000006A02FA006B02FE006C0302006D030674
-:1014C000006E030A006F030E0070031200720363C4
-:1014D0000074036900790367007C031C000F037824
-:1014E000000F0378000F0378000F0378000F0378D4
-:1014F000000F0378000F0378000F0378000F0378C4
-:10150000000F0378000F0378000F0378000F0378B3
-:10151000000F0378000F0378000F0378000F0378A3
-:10152000000F0378000F0378000F0378000F037893
-:10153000000F0378000F0378000F0378000F037883
-:00000001FF
diff --git a/firmware/radeon/RV730_pfp.bin.ihex b/firmware/radeon/RV730_pfp.bin.ihex
deleted file mode 100644
index 3d811ff0a1a8..000000000000
--- a/firmware/radeon/RV730_pfp.bin.ihex
+++ /dev/null
@@ -1,213 +0,0 @@
-:100000007C408000A00000007E82800B8000000009
-:10001000DC030000CC800040D04000407C408000E9
-:10002000A00000007E82800BC818000E31980001ED
-:100030007C4240009580023A7C428000C81C001C33
-:10004000C037C0007C40C0007C4100007CB4800B05
-:10005000C036000399C00000C81C001C7CB4800C92
-:1000600024D400027D654000CD400043CE80004393
-:10007000CD000043CC800040CE400040CE80004008
-:10008000CCC00040DC3A00009780FFDECD0000408D
-:100090007C40C000800000187C410000D400034078
-:1000A000D4000FC0D4000FA2C818000E8000000CAE
-:1000B00031980002D40003C0D4000FC0D4000FA2B6
-:1000C000C818000E288C000830CC000F3410000136
-:1000D0007D0D00088000000C7D91800BCC800040DD
-:1000E000D04000407C408000A00000007E82800B59
-:1000F000D4000340D4000FC0D4000FA2CC80004035
-:10010000D04000407C408000A00000007E82800B38
-:10011000D40003C0D4000FC0D4000FA2CC80004094
-:10012000D04000407C408000A00000007E82800B18
-:10013000CC4003F980000249CC4003F8C037FFFFF0
-:100140007C414000CF41A29EC82003F8C81C03F99F
-:1001500066200020C81803FB7DE1C02C7D58C00834
-:100160007CDCC02069100020C0360003CC000054A5
-:100170007CB4800C80000069CC8000407C41800011
-:10018000CD81A29ECC80004080000067CD800040E1
-:10019000C019FFFFCC800040CD81A29E7C40C000F2
-:1001A0007C4100007C414000CCC1A1FACD01A1F905
-:1001B000CD41A29DCCC00040CD000040CD400040CC
-:1001C000CC4000407C408000A00000007E82800B7C
-:1001D000CC000054CC8000407C40C0007C4100003A
-:1001E0007C414000CCC1A1FACD01A1F9CD41A29D35
-:1001F000CCC00040CD000040CD400040D040004089
-:100200007C408000A00000007E82800B7C40C0000B
-:1002100030D00001CCC1A29F95000003041400015E
-:1002200004140002CD4003FBCC800040800000009D
-:10023000CCC000407C40C000CC800040CCC1A2A219
-:1002400080000000CCC000407C40C00028D4001FCB
-:10025000CC800040954000037C410000CCC000579A
-:100260002918001FCCC0004095800003CD0000403D
-:10027000CD00005880000249CC00007FC820001744
-:10028000C83000229A0000060E280001C824001E73
-:100290000A640001D4001240CE400040C036C000C5
-:1002A0009680000737747900041C0001CF4000409D
-:1002B000CDC00040CF0003FA7C030000CA0C001040
-:1002C0007C41000094C000047C414000D42002C462
-:1002D000CDE000449B00000B7C418000CC00004B33
-:1002E000CDA00049CD200041CD600041CDA000410E
-:1002F00006200001CE00005680000249CC00007F9D
-:10030000C8280020C82C0021CC0000637EEA4001F0
-:10031000657400207F53402C269C00027DF5C02090
-:1003200069F80020CE80004BCE600049CDE000414E
-:10033000CFA00041CE600041271C00027DF5C02007
-:1003400069F800207DB24001CF00004BCE6000492B
-:10035000CDE00041CFA00041800000BCCE60004154
-:10036000C8200017C83000229A0000060E2800019D
-:10037000C824001E0A640001D4001240CE40004090
-:10038000CA0C00107C41000094C0000BC036C000B5
-:100390009680000737747900041C0001CF400040AC
-:1003A000CDC00040CF0003FA7C030000800000B500
-:1003B0007C414000CC000048800000EE00000000BE
-:1003C000C8200017C81C00230E24000299C0001585
-:1003D0007C4180000A200001CE000056D400044079
-:1003E000CC000040C036C000CA140013964000077D
-:1003F00037747900CF400040CC000040C83003FA89
-:1004000080000103CF000022CC000022954001466D
-:10041000CC00007FCCA0004680000000CC2000462D
-:1004200080000249CC000064C8200017C810001FDB
-:100430009600000509100001D4000440CD000040E2
-:10044000CD000022CC800040D0400040C80C0025E8
-:1004500094C0FEECC8100008CD000040D4000FC0CE
-:1004600080000000D4000FA27C40C0007C4100004E
-:10047000CCC003FDCD0003FCCCC00042CD00004247
-:100480002914001F29180010319800073B5C000157
-:100490007D76000B998000057D5E400BCC0000420C
-:1004A00080000249CC00004D29980001292C000849
-:1004B0009980003D32EC0001960000042930000CC8
-:1004C00080000249CC00004204140010CD400042DC
-:1004D00033300001342800018400015DC81400039A
-:1004E0009B40001B0438000C8400015DC81400030D
-:1004F0009B400017043800088400015DC814000305
-:100500009B400013043800048400015DC8140003FC
-:100510009B400015C80C03FD9A800009C81003FC1D
-:100520009B000101CC00004D04140010CCC000421F
-:10053000CD00004280000135CD40004296C000FA57
-:10054000CC00004D80000249CC00004E9AC0000350
-:10055000CC00004DCC00004EDF8300008000000086
-:10056000D80301FF9AC000F0CC00004D8000024982
-:10057000CC00004EC8180003C81C0003C8200003AC
-:100580007D5D40037DA1C0037D5D400C2A10001FEE
-:10059000299C001F7D1D000B7D17400B880000006B
-:1005A0007E92800B96400004CC00004E80000249F1
-:1005B000CC00004204380008CF800042C808000385
-:1005C000C80C0003C8100003C8140003C8180003B7
-:1005D000C81C0003C8240003C828000329FC001F0E
-:1005E0002AB0001F7FF3C00B28F0001F7FF3C00B61
-:1005F0002970001F7FF3C00B7D8880017DCCC00176
-:100600007E5100017E9540017C9080027CD4C00226
-:100610007CBC800B9AC000037C8F400B38B4000177
-:100620009B4000C1CC00004D9BC000BFCC00004EE1
-:10063000C80C03FDC81003FCCCC000428000016E52
-:10064000CD000042D4000340D4000FC0D4000FA25C
-:10065000CC800040CC400040CC400040CC4000402A
-:100660007C40C000CCC00040CCC0000D8000000029
-:10067000D04000407C40C0007C4100006514002058
-:100680007D4D402C245800027D5980207C41C000C3
-:10069000CD80004269980020CD800042CDC000424C
-:1006A000C023C00005E400027CA0800B266400107B
-:1006B0007CA4800CCC800040CDC00040CCC0004069
-:1006C00095C0000ECD00004009DC0001C8280003E1
-:1006D00096800008CE800040C834001D974000007E
-:1006E000C834001D26A800088400024CCC2B000052
-:1006F00099C0FFF709DC0001DC3A00009780000494
-:100700007C418000800001A225980002A00000002A
-:100710007D808000C818001D7C40C00064D00008A7
-:1007200095800000C818001DCC130000CC8000404C
-:10073000CCC0004080000000CC400040C810001F2A
-:100740007C40C000CC8000407CD1400CCD400040BB
-:100750000518000180000000CD8000227C40C00010
-:10076000645000208400024CCC0000617CD0C02C7E
-:10077000C8200017C8D60000994000087C438000BC
-:10078000DF830000CFA0004F8400024CCC00006249
-:1007900080000000D040007F80000249CC00006251
-:1007A0008400024CCC000061C82000177C40C000CF
-:1007B000C036FF00C810000DC0303FFF7CF5400B75
-:1007C0007D51800B7D81800F998000087CF3800B28
-:1007D000DF830000CFA0004F8400024CCC000062F9
-:1007E00080000000D040007F80000249CC00006201
-:1007F0008400024C7C40C00028DC000895C0001931
-:1008000030DC00107C41000099C0000464540020DA
-:1008100080000208C91D00007D15002CC91E0000C3
-:100820007C4200007C4240007C4180007DE5C00BA2
-:100830007DE280079A80000E41AC00059AC000005E
-:100840000AEC000130DC001099C000040000000038
-:100850008000020BC91D00008000020BC91E0000B1
-:10086000CC800040CCC00040D0400040C80C0025E7
-:1008700094C0FDE4C8100008CD000040D4000FC0B3
-:1008800080000000D4000FA2D4000340D4000FC0A9
-:10089000D4000FA2CC800040D04000407C408000BB
-:1008A000A00000007E82800BD40003C0D4000FC0E3
-:1008B000D4000FA2CC800040D04000407C4080009B
-:1008C000A00000007E82800B7C40C00030D000067B
-:1008D0000D10000699000007C81400159940000586
-:1008E000CC000052D4000340D4000FC0D4000FA2AB
-:1008F000CC800040CCC0004080000000D0400040D0
-:100900007C40C000CC4D0000DC3A00009780FDBD6B
-:1009100004CC000180000242CC4D000080000000A9
-:10092000D040007FCC00007F80000000CC00007F22
-:10093000CC00007F88000000CC00007F0000000099
-:1009400000000000000000000000000000000000A7
-:100950000000000000000000000000000000000097
-:100960000000000000000000000000000000000087
-:100970000000000000000000000000000000000077
-:100980000000000000000000000000000000000067
-:100990000000000000000000000000000000000057
-:1009A0000000000000000000000000000000000047
-:1009B0000000000000000000000000000000000037
-:1009C0000000000000000000000000000000000027
-:1009D0000000000000000000000000000000000017
-:1009E0000000000000000000000000000000000007
-:1009F00000000000000000000000000000000000F7
-:100A000000000000000000000000000000000000E6
-:100A100000000000000000000000000000000000D6
-:100A200000000000000000000000000000000000C6
-:100A300000000000000000000000000000000000B6
-:100A400000000000000000000000000000000000A6
-:100A50000000000000000000000000000000000096
-:100A60000000000000000000000000000000000086
-:100A70000000000000000000000000000000000076
-:100A80000000000000000000000000000000000066
-:100A90000000000000000000000000000000000056
-:100AA0000000000000000000000000000000000046
-:100AB0000000000000000000000000000000000036
-:100AC0000000000000000000000000000000000026
-:100AD0000000000000000000000000000000000016
-:100AE0000000000000000000000000000000000006
-:100AF00000000000000000000000000000000000F6
-:100B000000000000000000000000000000000000E5
-:100B100000000000000000000000000000000000D5
-:100B200000000000000000000000000000000000C5
-:100B300000000000000000000000000000000000B5
-:100B400000000000000000000000000000000000A5
-:100B50000000000000000000000000000000000095
-:100B60000000000000000000000000000000000085
-:100B70000000000000000000000000000000000075
-:100B80000000000000000000000000000000000065
-:100B90000000000000000000000000000000000055
-:100BA0000000000000000000000000000000000045
-:100BB0000000000000000000000000000000000035
-:100BC0000000000000000000000000000000000025
-:100BD0000000000000000000000000000000000015
-:100BE0000000000000000000000000000000000005
-:100BF00000000000000000000000000000000000F5
-:100C0000000302220004022A0005009F00020003E4
-:100C10000006003C0007002700080191000900447D
-:100C2000000A002D00100247001700F0002201D733
-:100C3000002301E80026004C0027005F0020011A75
-:100C4000002800920029004F002A0083002B006436
-:100C5000002F008D003200D80034023200360074BC
-:100C60000039010A003C01FC003F009F00410005E3
-:100C7000004401940048019D004901C5004A01CF8C
-:100C8000005502250056022D0060000A0061002A6E
-:100C90000062003000630030006400300065003006
-:100CA0000066003000670030006800370069003FD0
-:100CB000006A0047006B0047006C0047006D00476A
-:100CC000006E0047006F0047007000470073024746
-:100CD000007B024000000005000000050000000548
-:100CE00000000005000000050000000500000005F0
-:100CF00000000005000000050000000500000005E0
-:100D000000000005000000050000000500000005CF
-:100D100000000005000000050000000500000005BF
-:100D200000000005000000050000000500000005AF
-:100D3000000000050000000500000005000000059F
-:00000001FF
diff --git a/firmware/radeon/RV770_me.bin.ihex b/firmware/radeon/RV770_me.bin.ihex
deleted file mode 100644
index a0e16990a20a..000000000000
--- a/firmware/radeon/RV770_me.bin.ihex
+++ /dev/null
@@ -1,341 +0,0 @@
-:10000000CC0003EA7C408000A0000000CC800062AD
-:1000100080000001D040007F80000001CC40004102
-:100020007C40C000C016000430D03FFF7D15000C9E
-:10003000CC11000028D8001E3198000128DC001FD8
-:10004000C820000495C000067C424000CC0000623D
-:100050007E56800CCC290000C82400047E26000BAC
-:10006000958000067C42C000CC0000627ED7000C68
-:10007000CC310000C82C00047E2E000CCC000062A5
-:1000800031103FFF80000001CE1100007C40C00015
-:1000900080000001CC40004080000001CC4122578C
-:1000A0007C418000CC400045CC400048CC41225CE3
-:1000B000CC41A1FC7C408000A0000000CC8000620C
-:1000C000CC400045CC4000487C40C000CC41225C84
-:1000D000CC41A1FC7C408000A0000000CC800062EC
-:1000E000CC000045CC000048CC41225CCC41A1FCB6
-:1000F0007C408000A0000000CC800062040CA1FDC8
-:10010000C0120001CC000045CC0000487CD0C00CDF
-:10011000CC41225CCC41A1FCD04D00007C40800051
-:10012000A0000000CC80006280000001CC41225D74
-:100130007C4080007C40C000C02A00027C4100005E
-:100140007D29000C3094000130980006309C03009B
-:1001500029DC00087C4200007C4240009540000FF2
-:10016000C02E000405F022587F2F000CCC31000077
-:10017000C8280004CCC12169CD01216ACE81216B40
-:100180000DB40002CC01216C9740000E0DB40000AC
-:100190008000007BC834000A0DB4000297400009BB
-:1001A0000DB40000C02E000405F022587F2F000C73
-:1001B000CC310000C82800048000007BC834000A4D
-:1001C000974000047E0280008000007BC834000A53
-:1001D0000DB400049740FF8C00000000CE01216D9B
-:1001E000CE41216EC8280003C834000A9B40000499
-:1001F000043C00058400026DCC0000620DF4000098
-:100200009740000BC82C03E6CE81A2B7C030000691
-:100210007EF34028C03000207F6B80207FB3C02950
-:10022000CF81A2C480000001CFC1A2D10DF4000192
-:100230009740000BC82C03E7CE81A2BBC03000065C
-:100240007EF34028C03000207F6B80207FB3C02920
-:10025000CF81A2C580000001CFC1A2D20DF400025F
-:100260009740000BC82C03E8CE81A2BFC030000627
-:100270007EF34028C03000207F6B80207FB3C029F0
-:10028000CF81A2C680000001CFC1A2D3C82C03E950
-:10029000CE81A2C3C03000067EF34028C0300020CB
-:1002A0007F6B80207FB3C029CF81A2C7800000016F
-:1002B000CFC1A2D480000001CC4000427C40C000ED
-:1002C0007C4100002914001D315400019940000DAB
-:1002D00031181000C81C001109DC000195C0FFFF97
-:1002E000C81C0011CCC12100CD012101CCC12102CB
-:1002F000CD012103041800048000039FCD81A2A436
-:10030000C02A00049580000836A821A3CC2900004B
-:10031000C8280004C81C00110DE400409640FFFFEF
-:10032000C81C0011CCC12170CD012171C820001260
-:1003300096000000C82000128000039FCC000064DB
-:100340007C40C0007C410000CC000045CC0000484F
-:1003500040D40003CD41225CCD01A1FCC01A0001B4
-:10036000041CA1FD7DD9C00C7C42000008CC00011A
-:100370000624000106280002CE1D0000CE5D00000C
-:1003800098C0FFFACE9D00007C408000A0000000D5
-:10039000CC8000627C40C00030D0000128CC00013D
-:1003A0007C414000950000067C418000CD41216DDC
-:1003B000CD81216E800000F3C81C0003C022000420
-:1003C0007E16000CCC210000C81C00047C424000BA
-:1003D00098C000047C42800080000001CDE5000050
-:1003E000CE412169CE81216ACDC1216B80000001FF
-:1003F000CC01216C7C40C0007C4100007C4140006D
-:100400007C4180007C41C00028A40008326400FFC9
-:100410000E68003C9680000A7C0200007C420000CE
-:100420001E300003CC00006A9B0000034220000540
-:1004300004200040800001107C0240007E02400049
-:100440009A4000000A64000130EC00109AC0000AD3
-:10045000CC000062C02A0004C82C00217E92800CCF
-:10046000CC000041CC290000CEC00021800001203A
-:10047000C8300004CD01216DCD41216EC83000038C
-:100480007F1F000B30F40007277800019740002AF7
-:1004900007B801259F8000000000000080000135A2
-:1004A0007F1B8004800001397F1B80058000013D97
-:1004B0007F1B8002800001417F1B8003800001457B
-:1004C0007F1B8007800001497F1B80068000014E52
-:1004D00028A400089B80001928A400088000015E61
-:1004E000326400FF9B80001528A400088000015E94
-:1004F000326400FF9B80001128A400088000015E88
-:10050000326400FF9B80000D28A400088000015E7B
-:10051000326400FF9B80000928A400088000015E6F
-:10052000326400FF9B80000528A400088000015E63
-:10053000326400FF28A40008326400FF0E68003C0B
-:100540009A80FEB128EC00087C4340007C43800088
-:100550007C43C00096C00007CC000062CF412169F7
-:10056000CF81216ACFC1216B80000001CC01216CB9
-:1005700080000001CFF50000CC00006B840003A2D6
-:100580000E68003C9A800004C82800158000000115
-:10059000D040007F9680FFAB7E0240008400023B8B
-:1005A000C00E0002CC00004180000239CCC1304AAC
-:1005B0007C40C0007C410000C01E000129240012C4
-:1005C000C022000296400005C0260004C027FFFBA1
-:1005D0007D25000BC02600007DD2800B7E12C00B53
-:1005E0007D25000C7C4140007C418000CCC121690C
-:1005F0009A80000ACD01216ACD41216B96C0FE820E
-:10060000CD81216CC830001897000000C830001858
-:1006100080000001CC000018840003A2CC00007F01
-:10062000C8140013C8180014CD41216B96C0FE7683
-:10063000CD81216C80000182C8300018C80C0008F0
-:1006400098C00000C80C00087C4100009500000222
-:10065000000000007C414000C8200009CC4000435D
-:10066000CE01A1F4CC400044C00E80007C4240008A
-:100670007C4280002AAC001F96C0FE63C035F000AB
-:10068000CE4003E232780003267C00087FF7C00BDF
-:100690007FFBC00C2A780018CFC003E3CF8003E4AF
-:1006A00026B000027F3F0000CF0003E58000031F5B
-:1006B0007C80C0007C40C00028D000083110000FB2
-:1006C0009500000F2528000106A801B39E800000B8
-:1006D00000000000800001D4C0120800800001E288
-:1006E000C814000F800001E9C8140010800001F058
-:1006F000CCC1A2A4800001F9C814001130D0003F81
-:100700000D2800159A8000120D28001E9A80001EE8
-:100710000D2800209A8000230D24000F0D280010C2
-:100720007E6A800C9A8000260D2000040D2400149F
-:100730000D2800287E62400C7EA6800C9A80002A3C
-:10074000C814001180000001CCC1A2A4C01208008E
-:100750007C4140007D0CC00CC012000829580003E9
-:10076000295C000C7C4200007DD1C00B26200014C7
-:100770007E1E400C7E4E800CCE81A2A48000000123
-:10078000CD81A1FEC814000F0410210E9540000079
-:10079000C814000FD051000080000001CCC1A2A4F9
-:1007A000C81400100410210895400000C81400105F
-:1007B000D051000080000001CCC1A2A4CCC1A2A4F1
-:1007C00004100001CD000019840003A2CC00007FBA
-:1007D000C810001999000000C8100019800000021C
-:1007E0007C40800004102100095400019540FFFF67
-:1007F000C8140011D05100008000039FCCC1A2A4F6
-:100800007C40C000CC40000D94C0FDFFCC40000EE9
-:100810007C4100009500000508CC0001C8140005CB
-:10082000994000140000000098C0FFFB7C410000CC
-:10083000800000027D008000C81400057C40C000DC
-:100840009940000CC818000C7C4100009580FDEE1A
-:10085000C820000EC81C000D662000207E1E002C43
-:10086000252400027E62402080000001CCE60000CA
-:100870007C410000CC00006CCC00006DC818001F4B
-:10088000C81C001E659800207DD9C02C7CD4C00CEB
-:10089000CCDE000045DC0004C82800179680000F5D
-:1008A000C00E0001286800082AAC001632A800FF1C
-:1008B0000EB000497F2F000B9700000600000000DB
-:1008C000C81400057C40C000800002237C41000069
-:1008D00080000226D040007F8400023BCC00004113
-:1008E000CCC1304A94000000C83C001A043C00050A
-:1008F000CFC1A2A4C0361F90C0387FFF7C03C010B8
-:100900007F7B400CCF41217CCFC1217DCC01217E5A
-:10091000C03A00040434217F7F7B400CCC350000BA
-:10092000C83C00042BFC001F0438002097C00005C1
-:10093000CC0000629B8000000BB8000180000247E1
-:10094000CC000071CC01A1F404380016C0360002BE
-:10095000CF81A2A488000000CF4120107C40C000BD
-:1009600028D0001C9500000504D40001CD4000658E
-:1009700080000001CD4000680954000280000001A1
-:10098000CD4000668400026CC81803EA7C40C000B9
-:100990009980FD9DC814001608D000019940002BD5
-:1009A000CD0000687C408000A0000000CC80006288
-:1009B000043C0005CFC1A2A4CC01A1F4840003A291
-:1009C000CC00004688000000CC00007F8400027E3E
-:1009D000C81803EA7C40C0009980FD8BC81400163B
-:1009E00008D0000199400019CD0000687C408000CB
-:1009F000A0000000CC800062043C0022CFC1A2A471
-:100A0000840003A2CC00004788000000CC00007FD7
-:100A1000C81000169900000DCC400067800000024D
-:100A20007C408000C81803EA9980FD777C40C000B4
-:100A300094C00003C810001699000004CCC00068E0
-:100A4000800000027C4080008400023BC0148000D3
-:100A5000CC000041CD41304AC01480009900000014
-:100A6000C8100016800000027C408000C012000107
-:100A70007C51400C80000001D05500007C40C0003B
-:100A80007C4100007C4140007C418000291C001F0B
-:100A9000CCC0004ACD00004B95C00003C01C8000B4
-:100AA000CDC12010DD830000055C2000CC00006279
-:100AB00080000001D81F41007C40C0007C41000044
-:100AC0007C4140007C418000CCC0004CCD00004DFA
-:100AD000DD830000055CA00080000001D81F4100FC
-:100AE0007C40C0007C4100007C4140007C41800093
-:100AF000CCC0004ECD00004FDD830000055CC0007F
-:100B000080000001D81F41007C40C0007C410000F3
-:100B10007C4140007C418000CCC00050CD000051A1
-:100B2000DD830000055CF8E080000001D81F410073
-:100B30007C40C0007C4100007C4140007C41800042
-:100B4000CCC00052CD000053DD830000055CF8806E
-:100B500080000001D81F41007C40C0007C410000A3
-:100B60007C4140007C418000CCC00054CD00005549
-:100B7000DD830000055CE00080000001D81F41001B
-:100B80007C40C0007C4100007C4140007C418000F2
-:100B9000CCC00056CD000057DD830000055CF0009E
-:100BA00080000001D81F41007C40C0007C41000053
-:100BB0007C4140007C418000CCC00058CD000059F1
-:100BC000DD830000055CF3FC80000001D81F4100BC
-:100BD000D04320007C408000A0000000CC80006258
-:100BE000D043A0007C408000A0000000CC800062C8
-:100BF000D043C0007C408000A0000000CC80006298
-:100C0000D043F8E07C408000A0000000CC8000626F
-:100C1000D043F8807C408000A0000000CC800062BF
-:100C2000D043E0007C408000A0000000CC80006247
-:100C3000D043F0007C408000A0000000CC80006227
-:100C4000D043F3FC7C408000A0000000CC80006218
-:100C5000C81403E0CC430000CC430000CC430000A8
-:100C60007D45C000CDC30000D04300007C40800023
-:100C7000A0000000CC8000627C40C000C81003E2ED
-:100C8000C81403E5C81803E3C81C03E4CD81216937
-:100C9000CDC1216ACCC1216BCC01216C04200004A0
-:100CA0007DA180007D9640029640FCD7CD8003E375
-:100CB00031280003C02DF000251800087DAD800B01
-:100CC0007DA9800C80000001CD8003E3308CFFFF04
-:100CD000D04D00007C408000A0000000CC8000626D
-:100CE0007C40C0007C4100002924001832640001CF
-:100CF0009A400013C8140020155800029580FFFF89
-:100D0000C8140020CC00006ECCC12180CD01218D03
-:100D1000CC4121812914001F34588000CD81218CC1
-:100D20009540FCB9CC412182C81400209940FFFFB6
-:100D3000C8140020800000027C4080007C414000FC
-:100D40007C4180007C41C00065B400207F57402C6E
-:100D5000D437810047740004D437810047740004FD
-:100D6000D43781004774000409DC0004D4378100C3
-:100D700099C0FFF8477400042924001FC0380019E7
-:100D80009640FCA1C03E0004CF8121F837E021F954
-:100D9000CC210000C82000042A20001832200001C5
-:100DA0009A00FFFBCF8121F8800000027C40800088
-:100DB0007C40C00028D0001831100001C01600800F
-:100DC00095000003C02A00047CD4C00CCCC1217C57
-:100DD000CC41217DCC41217E7C4180001DB00003AF
-:100DE00036A0217F9B000003419C0005041C0040AD
-:100DF00099C0000009DC0001CC210000C8240004D7
-:100E00002A6C001F419C00059AC0FFFACC8000624A
-:100E1000800000027C4080007C40C00004D403E6D7
-:100E200080000001CC5400008000039FCC4003EA06
-:100E3000C01C8000044CA000CDC120107C410000EB
-:100E4000C814000904180000041C0008CD800071BB
-:100E500009DC000105980001CD0D000099C0FFFCE0
-:100E6000CC8000628000039FCD400071C00E010065
-:100E7000CC000041CCC1304AC83C007FCC00007F90
-:100E800080000001CC00007FCC00007F88000000C3
-:100E9000CC00007F00000000000000000000000007
-:100EA0000000000000000000000000000000000042
-:100EB0000000000000000000000000000000000032
-:100EC0000000000000000000000000000000000022
-:100ED0000000000000000000000000000000000012
-:100EE0000000000000000000000000000000000002
-:100EF00000000000000000000000000000000000F2
-:100F000000000000000000000000000000000000E1
-:100F100000000000000000000000000000000000D1
-:100F200000000000000000000000000000000000C1
-:100F300000000000000000000000000000000000B1
-:100F400000000000000000000000000000000000A1
-:100F50000000000000000000000000000000000091
-:100F60000000000000000000000000000000000081
-:100F70000000000000000000000000000000000071
-:100F80000000000000000000000000000000000061
-:100F90000000000000000000000000000000000051
-:100FA0000000000000000000000000000000000041
-:100FB0000000000000000000000000000000000031
-:100FC0000000000000000000000000000000000021
-:100FD0000000000000000000000000000000000011
-:100FE0000000000000000000000000000000000001
-:100FF00000000000000000000000000000000000F1
-:1010000000000000000000000000000000000000E0
-:1010100000000000000000000000000000000000D0
-:1010200000000000000000000000000000000000C0
-:1010300000000000000000000000000000000000B0
-:1010400000000000000000000000000000000000A0
-:101050000000000000000000000000000000000090
-:101060000000000000000000000000000000000080
-:101070000000000000000000000000000000000070
-:101080000000000000000000000000000000000060
-:101090000000000000000000000000000000000050
-:1010A0000000000000000000000000000000000040
-:1010B0000000000000000000000000000000000030
-:1010C0000000000000000000000000000000000020
-:1010D0000000000000000000000000000000000010
-:1010E0000000000000000000000000000000000000
-:1010F00000000000000000000000000000000000F0
-:1011000000000000000000000000000000000000DF
-:1011100000000000000000000000000000000000CF
-:1011200000000000000000000000000000000000BF
-:1011300000000000000000000000000000000000AF
-:10114000000000000000000000000000000000009F
-:10115000000000000000000000000000000000008F
-:10116000000000000000000000000000000000007F
-:10117000000000000000000000000000000000006F
-:10118000000000000000000000000000000000005F
-:10119000000000000000000000000000000000004F
-:1011A000000000000000000000000000000000003F
-:1011B000000000000000000000000000000000002F
-:1011C000000000000000000000000000000000001F
-:1011D000000000000000000000000000000000000F
-:1011E00000000000000000000000000000000000FF
-:1011F00000000000000000000000000000000000EF
-:1012000000000000000000000000000000000000DE
-:1012100000000000000000000000000000000000CE
-:1012200000000000000000000000000000000000BE
-:1012300000000000000000000000000000000000AE
-:10124000000000000000000000000000000000009E
-:10125000000000000000000000000000000000008E
-:10126000000000000000000000000000000000007E
-:10127000000000000000000000000000000000006E
-:10128000000000000000000000000000000000005E
-:10129000000000000000000000000000000000004E
-:1012A000000000000000000000000000000000003E
-:1012B000000000000000000000000000000000002E
-:1012C000000000000000000000000000000000001E
-:1012D000000000000000000000000000000000000E
-:1012E00000000000000000000000000000000000FE
-:1012F00000000000000000000000000000000000EE
-:1013000000000000000000000000000000000000DD
-:1013100000000000000000000000000000000000CD
-:1013200000000000000000000000000000000000BD
-:1013300000000000000000000000000000000000AD
-:10134000000000000000000000000000000000009D
-:10135000000000000000000000000000000000008D
-:10136000000000000000000000000000000000007D
-:10137000000000000000000000000000000000006D
-:10138000000000000000000000000000000000005D
-:10139000000000000000000000000000000000004D
-:1013A000000000000000000000000000000000003D
-:1013B000000000000000000000000000000000002D
-:1013C000000000000000000000000000000000001D
-:1013D000000000000000000000000000000000000D
-:1013E00000000000000000000000000000000000FD
-:1013F00000000000000000000000000000000000ED
-:10140000000103330010000400170006002100084B
-:10141000002700280028002300290029002A002690
-:10142000002B0029002D0038002E003F002F004A1D
-:101430000034004C00360030003900AF003A00D0D4
-:10144000003B00E5003C00FD003D016C003F00ADAD
-:10145000004103380043036C0044018F004500FD48
-:10146000004601AD004701AD004802000049020EF0
-:10147000004A0257004B028400520261005302737B
-:10148000005402890057029B0060029F006102AE77
-:10149000006202B8006302C2006402CC006502D69A
-:1014A000006602E0006702EA006802F4006902F8E0
-:1014B000006A02FC006B0300006C0304006D03086B
-:1014C000006E030C006F031000700314007203869B
-:1014D0000074038C0079038A007C031E000F039BB9
-:1014E000000F039B000F039B000F039B000F039B48
-:1014F000000F039B000F039B000F039B000F039B38
-:10150000000F039B000F039B000F039B000F039B27
-:10151000000F039B000F039B000F039B000F039B17
-:10152000000F039B000F039B000F039B000F039B07
-:10153000000F039B000F039B000F039B000F039BF7
-:00000001FF
diff --git a/firmware/radeon/RV770_pfp.bin.ihex b/firmware/radeon/RV770_pfp.bin.ihex
deleted file mode 100644
index a2d1619107de..000000000000
--- a/firmware/radeon/RV770_pfp.bin.ihex
+++ /dev/null
@@ -1,213 +0,0 @@
-:100000007C408000A00000007E82800B8000000009
-:10001000DC030000CC800040D04000407C408000E9
-:10002000A00000007E82800BC818000E31980001ED
-:100030007C424000958002527C428000C81C001C1B
-:10004000C037C0007C40C0007C4100007CB4800B05
-:10005000C036000399C00000C81C001C7CB4800C92
-:1000600024D400027D654000CD400043CE80004393
-:10007000CD000043CC800040CE400040CE80004008
-:10008000CCC00040DC3A00009780FFDECD0000408D
-:100090007C40C000800000187C410000D400034078
-:1000A000D4000FC0D4000FA2C818000E8000000CAE
-:1000B00031980002D40003C0D4000FC0D4000FA2B6
-:1000C000C818000E288C000830CC000F3410000136
-:1000D0007D0D00088000000C7D91800BCC800040DD
-:1000E000D04000407C408000A00000007E82800B59
-:1000F000D4000340D4000FC0D4000FA2CC80004035
-:10010000D04000407C408000A00000007E82800B38
-:10011000D40003C0D4000FC0D4000FA2CC80004094
-:10012000D04000407C408000A00000007E82800B18
-:10013000CC4003F980000261CC4003F8C82003F8EA
-:10014000C81C03F9C81803FBC037FFFF7C414000FF
-:10015000CF41A29E662000207DE1C02C7D58C008C2
-:100160007CDCC02068D00020C0360003CC000054E6
-:100170007CB4800C8000006ACC8000407C41800010
-:10018000CD81A29ECC800040CD80004080000068E0
-:10019000CC000054C019FFFFCC800040CD81A29E4E
-:1001A0007C40C0007C4100007C414000CCC1A1FAF1
-:1001B000CD01A1F9CD41A29DCCC00040CD000040B1
-:1001C000CD400040CC4000407C408000A0000000BA
-:1001D0007E82800BCC000054CC8000407C40C0006C
-:1001E0007C4100007C414000CCC1A1FACD01A1F9C5
-:1001F000CD41A29DCCC00040CD000040CD4000408C
-:10020000D04000407C408000A00000007E82800B37
-:100210007C40C00030D00001CCC1A29F95000003FB
-:100220000414000104140002CD4003FBCC80004004
-:1002300080000000CCC000407C40C000CC8000406A
-:10024000CCC1A2A280000000CCC000407C40C00015
-:1002500028D4001FCC800040954000037C41000062
-:10026000CCC000572918001FCCC000409580000367
-:10027000CD000040CD00005880000261CC00007F1E
-:10028000C8200017C83000229A0000060E2800017E
-:10029000C824001E0A640001D4001240CE40004071
-:1002A000C036C0009680000737747900041C000136
-:1002B000CF400040CDC00040CF0003FA7C030000D7
-:1002C000CA0C00107C41000094C000047C41400036
-:1002D000D42002C4CDE000449B00000B7C41800090
-:1002E000CC00004BCDA00049CD200041CD600041A5
-:1002F000CDA0004106200001CE0000568000026122
-:10030000CC00007FC8280020C82C0021CC0000634E
-:100310007EEA4001657400207F53402C269C000239
-:100320007DF5C02069F80020CE80004BCE600049EA
-:10033000CDE00041CFA00041CE600041271C00026B
-:100340007DF5C02069F800207DB24001CF00004B50
-:10035000CE600049CDE00041CFA00041800000BD4B
-:10036000CE600041C8200017C83000229A00000665
-:100370000E280001C824001E0A640001D4001240A7
-:10038000CE400040CA0C00107C41000094C0000B1D
-:10039000C036C0009680000737747900041C000145
-:1003A000CF400040CDC00040CF0003FA7C030000E6
-:1003B000800000B67C414000CC000048800000EF87
-:1003C00000000000C8200017C81C00230E240002F3
-:1003D00099C000157C4180000A200001CE00005623
-:1003E000D4000440CC000040C036C000CA14001342
-:1003F0009640000737747900CF400040CC000040A1
-:10040000C83003FA80000104CF000022CC00002293
-:100410009540015DCC00007FCCA00046800000002C
-:10042000CC20004680000261CC000064C820001788
-:10043000C810001F9600000509100001D4000440F8
-:10044000CD000040CD000022CC800040D0400040D4
-:10045000C80C002594C0FEEBC8100008CD00004079
-:10046000D4000FC080000000D4000FA27C40C00068
-:100470007C410000CCC003FDCD0003FCCCC0004299
-:10048000CD0000422914001F2918001031980007E0
-:100490003B5C00017D76000B998000057D5E400B82
-:1004A000CC00004280000261CC00004D2998000180
-:1004B000292C00089980003D32EC000196000004D0
-:1004C0002930000C80000261CC00004204140010AE
-:1004D000CD40004233300001342800018400015E29
-:1004E000C81400039B40001B0438000C8400015E0C
-:1004F000C81400039B400017043800088400015E04
-:10050000C81400039B400013043800048400015EFB
-:10051000C81400039B400015C80C03FD9A80000915
-:10052000C81003FC9B000118CC00004D04140010FF
-:10053000CCC00042CD00004280000136CD400042D8
-:1005400096C00111CC00004D80000261CC00004E2D
-:100550009AC00003CC00004DCC00004EDF830000A9
-:1005600080000000D80301FF9AC00107CC00004DB5
-:1005700080000261CC00004EC8180003C81C0003B4
-:10058000C82000037D5D40037DA1C0037D5D400C5C
-:100590002A10001F299C001F7D1D000B7D17400B9A
-:1005A000880000007E92800B96400004CC00004E34
-:1005B00080000261CC00004204380008CF80004275
-:1005C000C8080003C80C0003C8100003C8140003C7
-:1005D000C8180003C81C0003C8240003C82800036F
-:1005E00029FC001F2AB0001F7FF3C00B28F0001F5A
-:1005F0007FF3C00B2970001F7FF3C00B7D88800143
-:100600007DCCC0017E5100017E9540017C9080022E
-:100610007CD4C0027CBC800B9AC000037C8F400B52
-:1006200038B400019B4000D8CC00004D9BC000D6E0
-:10063000CC00004EC80C03FDC81003FCCCC0004227
-:100640008000016FCD000042D4000340D4000FC0F1
-:10065000D4000FA2CC800040CC400040CC400040F1
-:10066000CC4000407C40C000CCC00040CCC0000D5D
-:1006700080000000D04000407C40C0007C41000071
-:10068000651400207D4D402C245800027D598020A7
-:100690007C41C000CD80004269980020CD8000429E
-:1006A000CDC00042C023C00005E400027CA0800B46
-:1006B000266400107CA4800CCC800040CDC000409B
-:1006C000CCC0004095C0000ECD00004009DC000108
-:1006D000C828000396800008CE800040C834001D62
-:1006E00097400000C834001D26A80008840002645A
-:1006F000CC2B000099C0FFF709DC0001DC3A0000B8
-:10070000978000047C418000800001A325980002AE
-:10071000A00000007D808000C818001D7C40C00043
-:1007200064D0000895800000C818001DCC1300009C
-:10073000CC800040CCC0004080000000CC40004095
-:10074000C810001F7C40C000CC8000407CD1400C11
-:10075000CD4000400518000180000000CD8000223F
-:100760007C40C0006450002084000264CC00006122
-:100770007CD0C02CC8200017C8D6000099400008C3
-:100780007C438000DF830000CFA0004F8400026420
-:10079000CC00006280000000D040007F8000026139
-:1007A000CC00006284000264CC000061C820001705
-:1007B0007C40C000C036FF00C810000DC0303FFFB5
-:1007C0007CF5400B7D51800B7D81800F9980000866
-:1007D0007CF3800BDF830000CFA0004F8400026415
-:1007E000CC00006280000000D040007F80000261E9
-:1007F000CC000062840002647C40C00028DC000859
-:1008000095C0001930DC00107C41000099C0000444
-:100810006454002080000209C91D00007D15002CD1
-:10082000C91E00007C4200007C4240007C418000E8
-:100830007DE5C00B7DE280079A80000E41AC00058B
-:100840009AC000000AEC000130DC001099C00004DE
-:10085000000000008000020CC91D00008000020C96
-:10086000C91E0000CC800040CCC00040D0400040F9
-:10087000C80C002594C0FDE3C8100008CD0000405E
-:10088000D4000FC080000000D4000FA2D4000340A9
-:10089000D4000FC0D4000FA2CC800040D040004054
-:1008A0007C408000A00000007E82800BD40003C04A
-:1008B000D4000FC0D4000FA2CC800040D040004034
-:1008C0007C408000A00000007E82800B7C40C00045
-:1008D00030D000060D10000699000007C81400155E
-:1008E00099400005CC000052D4000340D4000FC052
-:1008F000D4000FA2CC800040CCC00040800000009B
-:10090000D04000407C40C000CC4D0000DC3A0000EC
-:100910009780FDBC04CC000180000243CC4D000058
-:100920007C40C0007C410000292400183264000192
-:100930009640000FCC8000407C4140007C4180000C
-:100940007C41C000CCC00043CD00004331DC7FFFC0
-:10095000CDC00043CCC00040CD000040CD400040A1
-:10096000CD80004080000000CDC00040CCC00040E1
-:10097000CD00004080000000D0400040800000001A
-:10098000D040007FCC00007F80000000CC00007FC2
-:10099000CC00007F88000000CC00007F0000000039
-:1009A0000000000000000000000000000000000047
-:1009B0000000000000000000000000000000000037
-:1009C0000000000000000000000000000000000027
-:1009D0000000000000000000000000000000000017
-:1009E0000000000000000000000000000000000007
-:1009F00000000000000000000000000000000000F7
-:100A000000000000000000000000000000000000E6
-:100A100000000000000000000000000000000000D6
-:100A200000000000000000000000000000000000C6
-:100A300000000000000000000000000000000000B6
-:100A400000000000000000000000000000000000A6
-:100A50000000000000000000000000000000000096
-:100A60000000000000000000000000000000000086
-:100A70000000000000000000000000000000000076
-:100A80000000000000000000000000000000000066
-:100A90000000000000000000000000000000000056
-:100AA0000000000000000000000000000000000046
-:100AB0000000000000000000000000000000000036
-:100AC0000000000000000000000000000000000026
-:100AD0000000000000000000000000000000000016
-:100AE0000000000000000000000000000000000006
-:100AF00000000000000000000000000000000000F6
-:100B000000000000000000000000000000000000E5
-:100B100000000000000000000000000000000000D5
-:100B200000000000000000000000000000000000C5
-:100B300000000000000000000000000000000000B5
-:100B400000000000000000000000000000000000A5
-:100B50000000000000000000000000000000000095
-:100B60000000000000000000000000000000000085
-:100B70000000000000000000000000000000000075
-:100B80000000000000000000000000000000000065
-:100B90000000000000000000000000000000000055
-:100BA0000000000000000000000000000000000045
-:100BB0000000000000000000000000000000000035
-:100BC0000000000000000000000000000000000025
-:100BD0000000000000000000000000000000000015
-:100BE0000000000000000000000000000000000005
-:100BF00000000000000000000000000000000000F5
-:100C0000000302230004022B000500A000020003E1
-:100C10000006003C0007002700080192000900447C
-:100C2000000A002D0010025F001700F1002201D819
-:100C3000002301E90026004C0027005F0020011B73
-:100C4000002800930029004F002A0084002B006533
-:100C5000002F008E003200D90034023300360075B8
-:100C60000039010B003C01FD003F00A0004102489B
-:100C7000004401950048019E004901C6004A01D088
-:100C8000005502260056022E0060000A0061002A6C
-:100C90000062003000630030006400300065003006
-:100CA0000066003000670030006800370069003FD0
-:100CB000006A0047006B0047006C0047006D00476A
-:100CC000006E0047006F0047007000470073025F2E
-:100CD000007B024100000005000000050000000547
-:100CE00000000005000000050000000500000005F0
-:100CF00000000005000000050000000500000005E0
-:100D000000000005000000050000000500000005CF
-:100D100000000005000000050000000500000005BF
-:100D200000000005000000050000000500000005AF
-:100D3000000000050000000500000005000000059F
-:00000001FF
diff --git a/firmware/sb16/alaw_main.csp.ihex b/firmware/sb16/alaw_main.csp.ihex
deleted file mode 100644
index 04502707c42a..000000000000
--- a/firmware/sb16/alaw_main.csp.ihex
+++ /dev/null
@@ -1,87 +0,0 @@
-:10000000001000440800004400B1004400610044B6
-:10001000085000440DF261A8440404190000404552
-:10002000404939AC5555718B500563800000063945
-:10003000FF2E2149FF0FD4492001090E2000718BAA
-:10004000A801A8808801A880A8000080D200718B38
-:100050008800A880A804B3802007B3808803B180FB
-:10006000C000095CC2010082A100718BCD0004199F
-:100070002120718BCF0004190000B180C200041947
-:100080000040001408400424000034490C4000449F
-:1000900044040439000040453200095C00000C397A
-:1000A00000004045404009EFFF2009CF000463A154
-:1000B000500333800004A38000FFC28B00D004549F
-:1000C00004E000C4200380C03000008800007A0AE9
-:1000D000D001008200600044C0000099006000442C
-:1000E00000FFC28B20000080000D428B083200C44C
-:1000F000000E428B00A200C4001E428B0CB200C452
-:10010000008E428B006200C4009E428B085200C4E5
-:1001100000BE428B085200C40004428B047200C42B
-:100120000024428B00D200C40055428B006000C402
-:1001300000004045200179800030428B088200C4D5
-:10014000000040450000718B4001008000600044C9
-:10015000FF00E2AB00B200C40FF2A8A82000B188F3
-:10016000000041024DF20039C001008200600044ED
-:100170000DF2A3A84DF2003900600044FF00E2AB8D
-:1001800020000088000061024DF204190060004464
-:10019000FF00E2ABA0000088000061104DF20419DE
-:1001A00000600044FF20E2AB60000088000071C0E6
-:1001B0004DF20419006000440000798000E20084E0
-:1001C0000303044904C20054006004640060004456
-:1001D0000000638000000619030004490060004429
-:1001E00020016380000006190020E28B0CF20084DD
-:1001F000BE00518BC020003908010044EC00518B37
-:10020000C02000390002E28B042100843F00518BA2
-:10021000C2200039001100443D00518BC22000393A
-:10022000E500718BCD0000390000B180C9200419B0
-:10023000CB200419C1200419C32004191000718BAC
-:10024000C7200419DE00518BCF0000390001B180B6
-:10025000C4200419C6200419C8200419CA2004198E
-:100260002000718BCC200419030004490060004475
-:10027000090461A8C10004190B0461A8CA0004198B
-:10028000046000D40D00610A9040098F0001004510
-:100290000F00610A0040098F000100458200092E0D
-:1002A000804009CF02006122432561224033008053
-:1002B0000848004420B1495C9200094E0203092E0F
-:1002C0000000A302C00071C02000EB800004C28BBC
-:1002D0002004618000047A02C00000820CC3084937
-:1002E000B001F3800000103920000C890C88084907
-:1002F0000300A81800001039BDFF628B20010080A8
-:10030000000063CB00007A024000015B2000008007
-:1003100000004ACB2000138020007A80E02100C03A
-:10032000080008491041098EAEAE628B00046122BC
-:1003300000030045220133802001A30200007A80DF
-:10034000C00000820720400A08A3008440210080EA
-:1003500040059310C7200039000040450720400A9F
-:100360000C930084080000820C246150400100803E
-:10037000C7200039000040450004638000000639B2
-:100380004201090E0220610A000100450C20600AAA
-:1003900000C300840004B180000006390C6104D45D
-:1003A000002471C0203333C0E001A38222037A020B
-:1003B000C301A3822001338000007A80C201B350C0
-:1003C000CC20003900007180000800440C20600A35
-:1003D00000F300840004B180000006390C6104D4ED
-:1003E000000071C000009310CC20003900080044C8
-:1003F000CC200039002000C0003071C0000800444B
-:1004000020010080AEAE628B20013380000083802B
-:1004100020007A8020A1495C8200096E804A098E02
-:10042000E001B3822004A38000007ACB2804EA1004
-:100430000C047A107000C08B00001039900300800B
-:100440004000215B900061800C8A084900001C1963
-:100450004000085B08000849200200800300A8183B
-:1004600000001419400021CB000041020000EB8085
-:10047000F2010082402133020820610AC4000419FD
-:10048000C70000990200610A0C0A04140100610A05
-:100490000300480A00580454C30004190C580044CF
-:1004A0000800C80A0C580454C80004190A00610A5C
-:1004B0000900480A00C80454C90004190CC80044C3
-:1004C0000B00C80A0CC80454CB0004190400610ACC
-:1004D0000600480A00D80454C60004190CD8004489
-:1004E0000500C80A0CD80454C50004190700610AA5
-:1004F0000C00480A000A0454CC0004190C0A0044F9
-:100500000E00C80A0C0A0454CE000419000040452D
-:080510002010718B0842060067
-:00000001FF
-/*
- * Copyright (c) 1994 Creative Technology Ltd.
- * Microcode files for SB16 Advanced Signal Processor
- */
diff --git a/firmware/sb16/ima_adpcm_capture.csp.ihex b/firmware/sb16/ima_adpcm_capture.csp.ihex
deleted file mode 100644
index 9a50a58564ae..000000000000
--- a/firmware/sb16/ima_adpcm_capture.csp.ihex
+++ /dev/null
@@ -1,121 +0,0 @@
-:1000000000100044080000440070004408D0004480
-:1000100000F000440DF261A84404041900004045BA
-:100020000004638000000639FF2E2149FF0CD449EB
-:10003000404939AC5555718B5001B1800000718B2E
-:10004000C2300419C0A00419C2A004198900718B20
-:10005000C83004197100718BCD000419CF00041948
-:100060008000718BCB2004192000718BC4200419EF
-:100070004700518BC020003900006380C1A00419E3
-:100080009300014FCD300009CF3000090C4000141F
-:1000900000600014000461A8020461A80C6004243C
-:1000A000000034490850004444040439000040452D
-:1000B0000830610A05B0E8180CC00454C8300419AF
-:1000C000090400A80B0400A800004045090461A829
-:1000D000C10004190B0461A8CA0004190D00610ACB
-:1000E000000100450F00610A0040098F0001004532
-:1000F000404009EFFF2009CF000463A15003338083
-:100100000004A38000FFC28B0C120454081200C428
-:10011000200380C03000008800007A0AD0010082ED
-:1001200004500044C00000990450004400FFC28BFA
-:1001300020000080000D428B044200C4000E428B60
-:10014000085200C4001E428B00E200C4008E428BA5
-:1001500008D200C4009E428B04F200C400BE428B51
-:1001600004F200C40004428B041100C40024428B3A
-:100170000C6100C40055428B045000C4003F428B08
-:100180000C0100C400004045200179800030428B02
-:10019000046200C4000040450000718B40010080F3
-:1001A00004500044FF00E2AB08C200C40FF2A8A84C
-:1001B0002000B188000041024DF20039C0010082E8
-:1001C000045000440DF2A3A84DF20039045000443D
-:1001D000FF00E2AB20000088000061024DF204192C
-:1001E00004500044FF00E2ABA00000880000611052
-:1001F0004DF2041904500044FF20E2AB6000008877
-:10020000000071C04DF204190450004400007A0A45
-:100210002001F08001A0410A001100C42001F080FB
-:10022000C130041904500044000079800C4100845E
-:100230008900718BC83004199700718BCD0000398B
-:100240000001B1808000041982000419C120041942
-:10025000C3200419C2300419CD100419CF10041999
-:10026000B000718B84000419860004198000718B22
-:10027000CB2004199300014FCD300009CF30000985
-:100280000302044908410014045000440000638044
-:100290000000061903000449045000442001638053
-:1002A000000006190020E28B00C100844700518B3A
-:1002B000C020003900006380C1A0041900E100449F
-:1002C000BD00518BC02000390000B180C1A00419CD
-:1002D00003000449045000440020610A0001004565
-:1002E0000230610A0C8300C40C780844045A0844A4
-:1002F000B200094F1042098E05B0E01804230084B3
-:100300000C01001108056110004908440048084428
-:10031000B200094F8000718BC00000820C013310C5
-:100320002801A31000017A808C0100800230610A4C
-:10033000200004190C8300C405B0C818084300C489
-:100340000130C80A0C3800C4088800440C780844FE
-:10035000045A08440000A318800004190B0461A883
-:10036000C3200039C33004190F10610ACA300419C0
-:10037000090441A8E1200039D100094F00046102BD
-:10038000086300440330410A20000039A300094FEC
-:100390000004610200480844088800440230610AF1
-:1003A000000800C40C780844045A0844B200090F3D
-:1003B0001040098E0000685B2004B1800200615B80
-:1003C00088037A80AC01008005B0E01800D3008477
-:1003D0000049084400480844B200090F8000718BAE
-:1003E000C00000820230610A000800C405B0C818CD
-:1003F0000C1800C40130C80A0C3800C40888004436
-:100400000C780844000061182005B180000068CB1A
-:10041000800004190D10610AC33004190B0441A8AF
-:10042000090441A8E1200039083800440330410A9A
-:100430002004B18000480844088800440000B180CE
-:10044000C23004190CB800D40F30610A0D30C80A4C
-:100450000CB800C49300014FE700016F0F30610A30
-:1004600020000088020061024104041902046102B4
-:1004700043040439CF3000092000094900590044E1
-:100480009300014FE700016F0D30610A2000618881
-:10049000C2000082C2030082CD3000092000094959
-:1004A0000F30610A0D30C80A0C5800840230610A0E
-:1004B00005B0A818C2300419000000469040098F0A
-:1004C0001204096E0300090E0001718220010080F0
-:1004D000000061CB8004B1800001E0600CD80414FE
-:1004E0000001EB804000521B80007980C00171C286
-:1004F0002000C080080A0454C004A8828000721B37
-:10050000800000800001F0802000C0800C2A04548C
-:10051000C004A8821000721B800000800001F080DF
-:100520002000C080083A0454C004A8822000721B36
-:1005300080000080C003F0822000A0800001001134
-:100540004000C28B00AA00C40000E98005B0A818D2
-:100550000001A822D0010082F000E21B0620A80AB8
-:100560002D10610AD100092E0001A8020E10C80A40
-:100570000CBA04140E10610A044A00440C10C80A94
-:10058000044A04540C10610AD00100820010A8181B
-:10059000A0000088000171820300090E9A0100602A
-:1005A0003200092E00000046000171822001008007
-:1005B000000061CB8024B1C00031E0600CCA04149B
-:1005C0000001EB804000521B80007980C00171C2A5
-:1005D0002000C08008DA0454C004A8828000721B86
-:1005E000800000800001F0802000C0800CFA0454DC
-:1005F000C004A8821000721B800000800001F080FF
-:100600002000C08008290454C004A8822000721B66
-:1006100080000080C003F0822000A0800001001153
-:100620004000C28B003900C40000E98005B0A81862
-:100630000001A822D0010082B000E21B0620A80A17
-:100640002F10610AF100092E0001A8020E10C80A3D
-:100650000CA904140E10610A049900440C10C80A75
-:10066000049904540C10610AD00100820010A818EB
-:10067000A0000088000171829F0100600000004618
-:10068000000033800000838020007A8020073380C0
-:100690000000838020047A80200100800000004652
-:1006A0000200610A041B04140100610A0300480AE5
-:1006B0000C790454C300041904C900440800C80A92
-:1006C00004C90454C80004190A00610A0900480A50
-:1006D0000CE90454C900041904D900440B00C80AE9
-:1006E00004D90454CB0004190400610A0600480A26
-:1006F0000CF90454C6000419040B00440500C80A90
-:10070000040B0454C50004190700610A0C00480AD0
-:100710000C2B0454CC000419041B00440E00C80A1E
-:10072000041B0454CE000419000040459220718B34
-:04073000A6C5110049
-:00000001FF
-/*
- * Copyright (c) 1994 Creative Technology Ltd.
- * Microcode files for SB16 Advanced Signal Processor
- */
diff --git a/firmware/sb16/ima_adpcm_init.csp.ihex b/firmware/sb16/ima_adpcm_init.csp.ihex
deleted file mode 100644
index a899a9e743f4..000000000000
--- a/firmware/sb16/ima_adpcm_init.csp.ihex
+++ /dev/null
@@ -1,70 +0,0 @@
-:10000000001000440000404500004045000040450D
-:1000100000004045AAAA718B440404190000404521
-:10002000FF6E2149FF0FD449404939AC5555718BBA
-:100030005005B1806200190E2100718B880000808C
-:10004000B000718B880000804000718B88000080B8
-:100050006000718B880000805000718B88000080E8
-:100060007000718B88000080C000718B8800008058
-:10007000E000718B88000080D000718B88000080C8
-:100080000200718B880000802200718B8800008044
-:100090003200718B88000080A200718B8800008084
-:1000A000B200718B880000806200718B8800008034
-:1000B000C200718B88000080F200718B8800008084
-:1000C0001100718B88000080A100718B8800008076
-:1000D0006100718B88000080E100718B88000080D6
-:1000E0001300718B88000080B300718B8800008042
-:1000F000C300718B880000801800718B880000801D
-:100100006800718B880000800A00718B8800008075
-:100110004A00718B880000802900718B8800008064
-:100120007900718B880000809B00718B88000080B3
-:100130001400718B88000080F400718B88000080AF
-:10014000E600718B88000080E500718B88000080DC
-:10015000D700718B880000802E00718B8800008092
-:100160009D00718B88000080EF00718B88000080FB
-:10017000B220718B880000803320718B8800008052
-:100180002A20718B880000803B20718B88000080C2
-:100190004620718B880000802C20718B88000080A5
-:1001A000DD20718B880000800110718B8800008039
-:1001B0009A10718B880000801610718B8800008067
-:1001C0008E10718B88000080C230718B8800008097
-:1001D000C930718B880000803C30718B88000080B2
-:1001E0008180718B88000080D480718B88000080B2
-:1001F00010A0718B8800008034A0718B8800008073
-:100200000290718B880000807590718B880000804F
-:100210009AB0718B880000801240718B880000803A
-:100220000D40718B880000803C60718B88000080DD
-:10023000E750718B880000800E70718B8800008001
-:10024000FFC0718B88000080C8D0718B880000804F
-:1002500057F0718B88000080C822718B8800008065
-:10026000B032718B88000080DD82718B8800008045
-:1002700090B2718B880000808A62718B8800008048
-:10028000CE72718B88000080A5D2718B88000080AF
-:100290009721718B88000080A2A1718B880000805B
-:1002A0005C41718B88000080FEC1718B88000080EA
-:1002B0007A23718B880000807893718B880000808E
-:1002C0006773718B880000801728718B880000800D
-:1002D0008848718B88000080DBF8718B8800008073
-:1002E0002BBA718B88000080F109718B8800008027
-:1002F000DC69718B88000080198B718B880000800D
-:10030000FFFB718B880000802000718B88000080CB
-:100310005200718BC2000082FFFF718BC20000820D
-:10032000C2000082C2000082C20000821000718BF5
-:10033000C20000828000718BC20000829000718B2D
-:10034000C20000824000718BC2000082FFFF718BEF
-:10035000C2000082C2000082C2000082C20000828D
-:100360001000718BC20000828000718BC20000827D
-:100370009000718BC20000824000718BC20000822D
-:10038000FFFB718BC20000820004718BC2000082EF
-:100390004A00718BC20000820000718BC200008293
-:1003A0000000718BC2000082C2000082C2300419BA
-:1003B0001000094FC2010082C2010082C201008206
-:1003C000C2010082C2010082C2010082C201008219
-:1003D000C2010082C2010082C2010082C201008209
-:1003E000C2010082C20100820010718BC130041969
-:1003F0009300014FCD300009CF300009000034498F
-:0804000000080044C85411007B
-:00000001FF
-/*
- * Copyright (c) 1994 Creative Technology Ltd.
- * Microcode files for SB16 Advanced Signal Processor
- */
diff --git a/firmware/sb16/ima_adpcm_playback.csp.ihex b/firmware/sb16/ima_adpcm_playback.csp.ihex
deleted file mode 100644
index f09f18cf35e2..000000000000
--- a/firmware/sb16/ima_adpcm_playback.csp.ihex
+++ /dev/null
@@ -1,122 +0,0 @@
-:1000000000100044080000440C50004400700044FC
-:10001000047000440DF261A8440404190000404536
-:100020000004638000000639FF2E2149FF0DD449EA
-:10003000404939AC5555718B5001B1800001B180F8
-:10004000C92004195100718BCD000419E420718B73
-:10005000CF0004198000718BCB2004191000718B24
-:10006000C42004196500518BC22000390000B18002
-:10007000C230041900006380C1A004199300014F2D
-:10008000CD300009CF300009044000140C400014AA
-:10009000000461A8020461A804600424000034493B
-:1000A000005000444404043900004045000040452D
-:1000B0000F00610A00010045404009EFFF2009CF11
-:1000C000000463A1500333800004A38000FFC28BAF
-:1000D00008F004540CD000C4200380C03000008815
-:1000E00000007A0AD001008208500044C000009944
-:1000F0000850004400FFC28B20000080000D428B9E
-:1001000000A200C4000E428B0C9200C4001E428B61
-:10011000046200C4008E428B0C5200C4009E428BCD
-:1001200000C200C400BE428B00C200C40004428B67
-:1001300000F200C40024428B009100C40055428BA1
-:10014000085000C4003F428B08E200C40000404554
-:10015000200179800030428B009200C400004045AD
-:100160000000718B4001008008500044FF00E2ABAA
-:100170000C4200C40FF2A8A82000B1880000410280
-:100180004DF20039C0010082085000440DF2A3A8CE
-:100190004DF2003908500044FF00E2AB2000008817
-:1001A000000061024DF2041908500044FF00E2AB68
-:1001B000A0000088000061104DF2041908500044AE
-:1001C000FF20E2AB60000088000071C04DF204190E
-:1001D0000850004400007A0A2001F08001A0410A82
-:1001E00004D200C42001F080C1300419085000443A
-:1001F0000000798000A10084B500518BCF00003948
-:100200000001B180880004198A000419C82004196B
-:10021000CA200419C2300419CD100419CF100419D2
-:10022000B000718B8C0004198E0004191000718BC2
-:10023000C42004199300014FCD300009CF300009CC
-:100240000303044904810054085004640850004426
-:1002500000006380000006190300044908500044B0
-:1002600020016380000006190002E28B084100842F
-:100270006500518BC220003900006380C1A00419C1
-:10028000086100442D00518BC22000390000B1806C
-:10029000C1A0041903000449085000440220610A67
-:1002A000000100450230610A040300C405B0C8180B
-:1002B000047100C4001300440079084400047980EC
-:1002C000004900C4CA2004194A040419FF00E28B43
-:1002D0000CF90844CF1004190C2B08448E000419A3
-:1002E0000330610AC8200039480400390A30610A25
-:1002F0000CF90844CD1004190C2B08448C00041987
-:100300000CD908440C5A0044007908440004798050
-:10031000004900C4C3300419CA3000990CD90844FC
-:10032000420A090E000133118C01A38000017A10EA
-:100330008005B18005B0E01800930084007908447E
-:1003400000047980004900C40C1B0844880004198B
-:100350008A0000990CD90844420A090E8000718B6A
-:10036000C004B1821000E00B004300840230610A37
-:100370000130C80A004300840000B180C230041973
-:100380000CA800440230610A00D300C405B0C818AC
-:10039000046300C408F30044007908440004798031
-:1003A000004900C420000419FF00E28B0CF9084446
-:1003B000CD100419CF1004190C2B08448C0004191B
-:1003C0008E0004190330610AC8200039CA200039A0
-:1003D000480400394A0400390CD908440C5A004436
-:1003E0000079084400047980004900C4C33004192E
-:1003F0000CD90844420A090E05B0E0180018008420
-:100400000079084400047980004900C40C1B0844AA
-:10041000800100800CD90844420A090E8000718BCB
-:10042000C004B1821000E00B008800840230610A31
-:100430000130C80A008800840000B180C23004196D
-:1004400000010011000FE28B000041CB8C00008006
-:10045000000048CB20007A8080010080820C096E69
-:100460000308090E804009CF000171C20008C21BB9
-:1004700004B800C42005A8802001F0800001C21B40
-:10048000044800C42005A8802001F0800002C21B9F
-:10049000046800C42005A8802001F0802003A88003
-:1004A000000100110004C28B087800C40000E9803C
-:1004B00005B0A81800004ACB2000A822D001008275
-:1004C00040010080C4000419B000E28B0620A80A95
-:1004D0002D10610AD108092E0001A8020CF9084468
-:1004E000CD1004190C2B08440308090E9A25B1609D
-:1004F000A20E096E0300090F000171822001008025
-:10050000000061CB800100800300090F000171C26F
-:100510000008C21B0C2A00C42005A8802001F0801E
-:100520000001C21B0C1A00C42005A8802001F08025
-:100530000002C21B0C3A00C42005A8802001F080F4
-:100540002003A880000100110004C28B04AA00C48B
-:100550000000E98005B0A81800004ACB2000A822BE
-:10056000D001008240010080C7000419B000E28B76
-:100570000620A80A2F10610AF108092E0001A8021E
-:100580000CF90844CF1004190C2B08449F35B160B6
-:100590000308090E0001718220010080000061CB78
-:1005A00080010080E420718B000100459040098F9C
-:1005B0000005638000000639081904D49300014F38
-:1005C000E700016F0D30610A200461A8C2000082BB
-:1005D000020461A8C2000082CD30000902000002BE
-:1005E00002000002C0800009200009490F30610AA2
-:1005F0000D30C80A002900C40080C80A002900C4C0
-:100600000004B18000000639C920043900390044D3
-:1006100000046380000006390004B180C920043959
-:10062000003900440920230A00000619C9200419D2
-:10063000000040450200610A0CB904140400610A7C
-:100640000600480A00A90454C60004190CA9004475
-:100650000500C80A0CA90454C50004190700610A62
-:100660000C00480A00B90454CC0004190CB9004429
-:100670000E00C80A0CB90454CE0004190C5A0044E8
-:10068000820D092E804009CF00DF718B8001008030
-:1006900002C1002203C1002200016580D2056582EB
-:1006A00040210080D3030082403300800C5A004474
-:1006B0000F30610A0D30C80A08D900C49300014FF9
-:1006C000E700016F0F30610A20000088020061021C
-:1006D00002000003CF3000092000094900046380B4
-:1006E00004D900440004B180000000460230610AD1
-:1006F00005B0A818C2300419000000460E10C80A40
-:100700000C0B04140E10610A042B00440C10C80AD0
-:10071000042B04540C10610A000000460010A818B5
-:10072000A0000088000171820000004600043380B0
-:100730000000838020047A802001338000008380C1
-:1007400020007A80200300800000004616CE1100B1
-:00000001FF
-/*
- * Copyright (c) 1994 Creative Technology Ltd.
- * Microcode files for SB16 Advanced Signal Processor
- */
diff --git a/firmware/sb16/mulaw_main.csp.ihex b/firmware/sb16/mulaw_main.csp.ihex
deleted file mode 100644
index b64b565f2296..000000000000
--- a/firmware/sb16/mulaw_main.csp.ihex
+++ /dev/null
@@ -1,84 +0,0 @@
-:10000000001000440800004400B1004400610044B6
-:10001000085000440DF261A8440404190000404552
-:10002000404939AC5555718B500563800000063945
-:10003000FF2E2149FF0FD4492001090E2000718BAA
-:10004000A801A8808801A880A8000080D200718B38
-:100050008800A880A804B3802007B3808803B180FB
-:10006000C000095CC2010082A100718BCD0004199F
-:10007000A220718BCF0004190000B180C2000419C6
-:100080000040001408400424000034490C4000449F
-:1000900044040439000040453200095C00000C397A
-:1000A00000004045404009EFFF2009CF000463A154
-:1000B000500333800004A38000FFC28B00D004549F
-:1000C00004E000C4200380C03000008800007A0AE9
-:1000D000D001008200600044C0000099006000442C
-:1000E00000FFC28B20000080000D428B083200C44C
-:1000F000000E428B00A200C4001E428B0CB200C452
-:10010000008E428B006200C4009E428B085200C4E5
-:1001100000BE428B085200C40004428B047200C42B
-:100120000024428B00D200C40055428B006000C402
-:1001300000004045200179800030428B088200C4D5
-:10014000000040450000718B4001008000600044C9
-:10015000FF00E2AB00B200C40FF2A8A82000B188F3
-:10016000000041024DF20039C001008200600044ED
-:100170000DF2A3A84DF2003900600044FF00E2AB8D
-:1001800020000088000061024DF204190060004464
-:10019000FF00E2ABA0000088000061104DF20419DE
-:1001A00000600044FF20E2AB60000088000071C0E6
-:1001B0004DF20419006000440000798000E20084E0
-:1001C0000303044908C20054006004640060004452
-:1001D0000000638000000619030004490060004429
-:1001E00020016380000006190020E28B0CF20084DD
-:1001F0003E00518BC0200039080100446C00518B37
-:10020000C02000390002E28B04210084FD00518BE4
-:10021000C220003900110044FE00518BC220003979
-:10022000E500718BCD0000390000B180C9200419B0
-:10023000CB200419C1200419C32004191000718BAC
-:10024000C72004195E00718BCF0000390000B18017
-:10025000C4200419C6200419C8200419CA2004198E
-:100260002000718BCC200419030004490060004475
-:10027000090461A8C10004190B0461A8CA0004198B
-:10028000046000D40D00610A9040098F0001004510
-:100290000F00610A0040098F000100458200092E0D
-:1002A000804009CF02006122432561224033008053
-:1002B00008A800442031495C9200094E0203092E2F
-:1002C0000000A302C00071C02000EB800004C28BBC
-:1002D0002004618000047A02CB00A858B005F380A6
-:1002E0002004A81000001039B000E08B200100802D
-:1002F000000063CB00007A024000015B2000008018
-:1003000000004ACB2000138020007A80E02100C04A
-:10031000080008491041098EFFFF628B000461222A
-:1003200000030045220133802001A30200007A80EF
-:10033000C00000820720400A08830084402100801A
-:1003400040059310C7200039000040450720400AAF
-:100350000CA30084080000820C246150400100803E
-:10036000C7200039000040450004638000000639C2
-:100370004201090E0220610A000100450C20600ABA
-:10038000007300840004B180000006390C6104D4BD
-:10039000002471C0203333C0E001A38222037A021B
-:1003A000C301A3822001338000007A80C201B350D0
-:1003B000CC2000390000718000F300440C20600A5A
-:1003C00000D300840004B180000006390C6104D41D
-:1003D0000000B310CC200039000071C000F30044CD
-:1003E000CC200039002071C0003071C000F30044FF
-:1003F00020010080FFFF628B20013380000083809A
-:1004000020007A8020E1095C8200092F804A098E51
-:10041000E001B3822004A38000007ACB0300A81877
-:10042000000010390804EA1008047A102000008047
-:10043000400021CB0C00E810000041020C00EB1042
-:10044000F2010082402133020820610AC40004192D
-:10045000C70000990200610A0CE804140100610A57
-:100460000300480A00B80454C30004190CB800443F
-:100470000800C80A0CB80454C80004190A00610A2C
-:100480000900480A00680454C90004190C680044B3
-:100490000B00C80A0C680454CB0004190400610A5C
-:1004A0000600480A00780454C60004190C78004479
-:1004B0000500C80A0C780454C50004190700610A35
-:1004C0000C00480A00E80454CC0004190CE800446D
-:1004D0000E00C80A0CE80454CE0004190000404580
-:0804E0002010718B093F070099
-:00000001FF
-/*
- * Copyright (c) 1994 Creative Technology Ltd.
- * Microcode files for SB16 Advanced Signal Processor
- */
diff --git a/firmware/sun/cassini.bin.ihex b/firmware/sun/cassini.bin.ihex
deleted file mode 100644
index 5cd7ae70e71f..000000000000
--- a/firmware/sun/cassini.bin.ihex
+++ /dev/null
@@ -1,143 +0,0 @@
-:1000000000827E82090000000000008E8EFFCE82FA
-:1000100025FF010FCE8426FF0111CE853DDFE58649
-:1000200039B78FF87EC3C2964784F38A009747CECC
-:100030008233FF010F9646840C8104270B96468479
-:100040000C810827577E8425964784F38A049747B6
-:10005000CE8254FF010F9646840C81042638B612D6
-:1000600020842026037E8425967BD67CFE8F56BD79
-:10007000F7B6FE8F4EBDEC8EBDFAF7BDF728CE82E7
-:1000800082FF010F9646840C8104260AB612208452
-:100090002027B57E8425BDF71F7E841F964784F3F5
-:1000A0008A089747DEE1AD00CE82AFFF010F7E8464
-:1000B00025964185102606962385402706BDED002E
-:1000C0007E83A2DE42BDEB8E9624840827037E83C6
-:1000D000DF967BD67CFE8F56BDF7B6FE8F50BDEC0B
-:1000E0008EBDFAF78611C649BDE412CE82EFFF013C
-:1000F0000F9646840C81002717C649BDE491240D54
-:10010000B612208520260CCE82C1FF010F7E8425E9
-:100110007E8416FE8F52BDEC8EBDFAF7866AC64904
-:10012000BDE412CE8327FF010F9646840C81002781
-:100130000AC649BDE49125067E84257E8416B6183C
-:1001400070BB19702A0481AF2E19967BF62007FA2E
-:100150002027C4388138270BF62007FA2027CB0840
-:100160007E82D3BDF7668674C649BDE412CE837124
-:10017000FF010F9646840C8108260AC649BDE4910A
-:1001800025067E84257E8416BDF73E260EBDE50934
-:100190002606CE82C1FF010F7E8425FE8F54BDEC62
-:1001A0008EBDFAF7BDF733860FC651BDE412CE837C
-:1001B000B2FF010F9646840C8108265CB61220849B
-:1001C0003F813A271C9623854027037E8425C6510C
-:1001D000BDE49125037E8425CE82C1FF010F7E847C
-:1001E00025BDF8377C007ACE83EEFF010F7E842593
-:1001F0009646840C81082620962484082629B61861
-:1002000082BB1982B1013B2209B6122084378132A8
-:100210002715BDF8447E82C1BDF71FBDF844BDFC63
-:1002200029CE8225FF010F39964784FC8A00974723
-:10023000CE8434FF011196468403810227037E8514
-:100240001E964784FC8A029747DEE1AD008601B71F
-:100250001251BDF714B6103184FDB71031BDF81E30
-:100260009681D682FE8F5ABDF7B6FE8F5CBDEC8EAE
-:10027000BDFAF78608D600C51026028B20C651BDF0
-:10028000E412CE8486FF011196468403810227037F
-:100290007E850FC651BDE49125037E851E9644855B
-:1002A00010260AB61250BA013C851027A8BDF76681
-:1002B000CE84B7FF01117E851E96468403810226F7
-:1002C00050B612308403810127037E851E96448533
-:1002D000102613B61250BA013C85102609CE84535D
-:1002E000FF01117E851EB610318A02B71031BD851F
-:1002F0001FBDF8377C0080CE84FEFF01117E851E75
-:100300009646840381022609B612308403810127B0
-:100310000FBDF844BDF70BBDFC29CE8426FF0111AB
-:1003200039D622C40FB61230BA12328404270D9681
-:100330002285042705CA107E853ACA20D72239862D
-:1003400000978318CE1C00BDEB4696578501270207
-:100350004F3985022701397F8F7D8604B7120486C5
-:1003600008B712078610B7120C8607B71206B68FA9
-:100370007DB712708601BA1204B71204010101019F
-:100380000101B6120484FE8A02B7120401010101C0
-:10039000010186FDB41204B71204B612008408816C
-:1003A000082716B68F7D810C27088B04B78F7D7EBA
-:1003B000856C860397407E896E8607B712065FF7C5
-:1003C0008F825FF78F7FF78F70F78F71F78F72F7DC
-:1003D0008F73F78F74F78F75F78F76F78F77F78FA7
-:1003E00078F78F79F78F7AF78F7BB612048A10B778
-:1003F000120486E4B71270B71207F71205F7120954
-:100400008608BA1204B7120486F7B41204B71204AD
-:10041000010101010101B61208277F8180260B86A8
-:1004200008CE8F79BD897B7E868E8140260B86041F
-:10043000CE8F76BD897B7E868E8120260B8602CE6E
-:100440008F73BD897B7E868E8110260B8601CE8FB1
-:1004500070BD897B7E868E8108260B8608CE8F79BB
-:10046000BD897F7E868E8104260B8604CE8F76BD65
-:10047000897F7E868E8102260B8A02CE8F73BD898C
-:100480007F7E868E810126088601CE8F70BD897F92
-:10049000B68F7F810F26037E8747B61209840381BA
-:1004A0000327067C12097E85FEB6120684078107A3
-:1004B00027088B01B712067E86D5B68F82260A7C66
-:1004C0008F824FB712067E85C0B61206843F813FE9
-:1004D00027108B08B71206B6120984FCB712097EE2
-:1004E00085FECE8F7018CE8F84C60CBD896FCE8FDF
-:1004F0008418CE8F70C60CBD896FD683C14F2D0373
-:100500007E8740B68F7F8107270F810B2715810DCE
-:10051000271B810E27217E8740F78F7B8602B78FAE
-:100520007A201CF78F788602B78F772012F78F75A5
-:100530008602B78F742008F78F728602B78F717E9C
-:100540008747860497407E896ECE8F72BD89F7CE2D
-:100550008F75BD89F7CE8F78BD89F7CE8F7BBD892A
-:10056000F74FB78F7DB78F81B68F7227477C8F7D0E
-:10057000B68F75273F7C8F7DB68F7827377C8F7D30
-:10058000B68F7B272F7F8F7D7C8F817A8F72271B81
-:100590007C8F7D7A8F7527167C8F7D7A8F782711D7
-:1005A0007C8F7D7A8F7B270C7E87837A8F757A8FFD
-:1005B000787A8F7BCEC1FCF68F7D3AA600B7127099
-:1005C000B68F7226037E87FAB68F75260A18CE8FED
-:1005D00073BD89D57E87FAB68F78260A18CE8F76B6
-:1005E000BD89D57E87FAB68F7B260A18CE8F79BD56
-:1005F00089D57E87FA860597407E8900B68F7581FA
-:10060000072EF2F61206C4F81BB71206B68F7881D1
-:10061000072EE2484848F61206C4C71BB71206B6B2
-:100620008F7B81072ECFF61205C4F81BB712058603
-:1006300000F68F71BD89948601F68F74BD8994860A
-:1006400002F68F77BD89948603F68F7ABD8994CEA2
-:100650008F70A60181012707810327037E8866A684
-:1006600000B88F818401260B8C8F792C0E08080826
-:100670007E8850B612048A40B71204B6120484FB76
-:1006800084EFB71204B6120736B68F7C4848B7120B
-:10069000078601BA1204B7120401010101010186A3
-:1006A000FEB41204B712048602BA1204B71204860A
-:1006B000FDB41204B7120432B71207B61200840850
-:1006C0008108270F7C82082607867697407E896EF0
-:1006D0007E86ECB68F7F810F273CBDE6C7B7120D33
-:1006E000BDE6CBB612048A20B71204CEFFFFB612C5
-:1006F00000810C26050926F6271CB6120484DFB7F4
-:100700001204968381072C057C0083200696838B38
-:100710000897837E85417F8F7E8680B7120C860185
-:10072000B78F7DB6120C847FB7120C8A80B7120C7B
-:10073000860ABD8A06B6120A2A09B6120CBA8F7D3D
-:10074000B7120CB68F7E8160271A8B20B78F7EB6CA
-:10075000120C849FBA8F7EB7120CB68F7D48B78F6C
-:100760007D7E8921B612048A20B71204BD8A0A4F01
-:1007700039A60018A7000818085A26F539366C0063
-:1007800032BA8F7FB78F7FB612098403A701B612E2
-:1007900006843FA70239368603B78F8032C1002610
-:1007A00006B78F7C7E89C9C1012718C102270CC1F9
-:1007B000032700F68F800505F78F80F68F800505EB
-:1007C000F78F80F68F800505F78F80F68F8053F4C2
-:1007D00012071BB7120739CE8F70A60018E6001853
-:1007E000A700E700A60118E60118A701E701A60285
-:1007F00018E60218A702E70239A6008407E600C43B
-:10080000385454541BA700394A26FD399622840FC8
-:1008100097228601B78F70B61207B78F71F6120C48
-:10082000C40FC80FF78F72F68F72B68F71840327CB
-:10083000148101271C81022724F48F70272A962215
-:100840008A807E8A64F48F70271E96228A107E8AA0
-:1008500064F48F70271296228A207E8A64F48F7047
-:10086000270696228A409722748F71748F71788F31
-:1008700070B68F70851027AFD622C41058B612708C
-:1008800081E4273681E1260C96228420441BD6225F
-:10089000C4CF20235881C6260D9622844044441B91
-:1008A000D622C4AF2011588127260F962284804477
-:1008B00044441BD622C46F1B972239270C7C820626
-:0D08C000BDD9EDB682077E8AB97F82063968
-:00000001FF
-/* firmware patch for NS_DP83065 */
diff --git a/firmware/tehuti/bdx.bin.ihex b/firmware/tehuti/bdx.bin.ihex
deleted file mode 100644
index b029e4c85795..000000000000
--- a/firmware/tehuti/bdx.bin.ihex
+++ /dev/null
@@ -1,2678 +0,0 @@
-:1000000002000F00008071402D000000000000C0C1
-:1000100002000F00018071002D000000000080C070
-:1000200002000F00028071002D000000000000C1DE
-:1000300002000F00038071002D000000000080C14D
-:1000400002000F00048071002D000000000000C2BB
-:1000500002000F00058071002D000000000080C22A
-:1000600002000F00068071002D000000000000C398
-:1000700002000F00078071002D000000000080C307
-:1000800002000F00088071002D000000000000C475
-:1000900002000F00098071002D000000000080C4E4
-:1000A00002000F000A8071002D000000000000C552
-:1000B00002000F000B8071002D000000000080C5C1
-:1000C00002000F000C8071002D000000000000C62F
-:1000D00002000F000D8071002D000000000080C69E
-:1000E00002000F000E8071002D000000000000C70C
-:1000F00002000F000F8071002D000000000080C77B
-:1001000002000F00108071002D000000000000C8E8
-:1001100002000F00118071002D000000000080C857
-:1001200002000F00128071002D000000000000C9C5
-:1001300002000F00138071002D000000000080C934
-:1001400002000F00148071002D000000000000CAA2
-:1001500002000F00158071002D000000000080CA11
-:1001600002000F00168071002D000000000000CB7F
-:1001700002000F00178071002D000000000080CBEE
-:1001800002000F00188071002D000000000000CC5C
-:1001900002000F00198071002D000000000080CCCB
-:1001A00002000F001A8071002D000000000000CD39
-:1001B00002000F001B8071002D000000000080CDA8
-:1001C00002000F001C8071002D000000000000CE16
-:1001D00002000F001D8071002D000000000080CE85
-:1001E00002000F001E8071002D000000000000CFF3
-:1001F00002000F001F8071002D000000000080CF62
-:1002000002000F00208071002D000000000000D0CF
-:1002100002000F00218071002D000000000080D03E
-:1002200002000F00228071002D000000000000D1AC
-:1002300002000F00238071002D000000000080D11B
-:1002400002000F00248071002D000000000000D289
-:1002500002000F00258071002D000000000080D2F8
-:1002600002000F00268071002D000000000000D366
-:1002700002000F00278071002D000000000080D3D5
-:1002800002000F00288071002D000000000000D443
-:1002900002000F00298071002D000000000080D4B2
-:1002A00002000F002A8071002D000000000000D520
-:1002B00002000F002B8071002D000000000080D58F
-:1002C00002000F002C8071002D000000000000D6FD
-:1002D00002000F002D8071002D000000000080D66C
-:1002E00002000F002E8071002D000000000000D7DA
-:1002F00002000F002F8071002D000000000080D749
-:1003000002000F00308071002D000000000000D8B6
-:1003100002000F00318071002D000000000080D825
-:1003200002000F00328071002D000000000000D993
-:1003300002000F00338071002D000000000080D902
-:1003400002000F00348071002D000000000000DA70
-:1003500002000F00358071002D000000000080DADF
-:1003600002000F00368071002D000000000000DB4D
-:1003700002000F00378071002D000000000080DBBC
-:1003800002000F00388071007B000000008060DDFB
-:1003900002000F00398071002D000000000000DD18
-:1003A00002000F003A8071002D000000000080DB89
-:1003B00002000F003B8071002D000000000000DDF6
-:1003C00002000F003C8071002D000000000000DDE5
-:1003D00002000F003D8071000000000000000000DE
-:1003E00002000F003E8071000000000000000000CD
-:1003F00002000F003F8071000000000000000000BC
-:1004000002000F00408071000000000000000000AA
-:1004100002000F0041807100000000000000000099
-:1004200002000F0042807100000000000000000088
-:1004300002000F0043807100000000000000000077
-:1004400002000F0044807100000000000000000066
-:1004500002000F0045807100000000000000000055
-:1004600002000F0046807100000000000000000044
-:1004700002000F0047807100000000000000000033
-:1004800002000F0048807100000000000000000022
-:1004900002000F0049807100000000000000000011
-:1004A00002000F004A807100000000000000000000
-:1004B00002000F004B8071000000000000000000EF
-:1004C00002000F004C8071000000000000000000DE
-:1004D00002000F004D8071000000000000000000CD
-:1004E00002000F004E8071000000000000000000BC
-:1004F00002000F004F8071000000000000000000AB
-:1005000002000F0050807100000000000000000099
-:1005100002000F0051807100000000000000000088
-:1005200002000F0052807100000000000000000077
-:1005300002000F0053807100000000000000000066
-:1005400002000F0054807100000000000000000055
-:1005500002000F0055807100000000000000000044
-:1005600002000F0056807100000000000000000033
-:1005700002000F0057807100000000000000000022
-:1005800002000F0058807100000000000000000011
-:1005900002000F0059807100000000000000000000
-:1005A00002000F005A8071000000000000000000EF
-:1005B00002000F005B8071000000000000000000DE
-:1005C00002000F005C8071000000000000000000CD
-:1005D00002000F005D8071000000000000000000BC
-:1005E00002000F005E8071000000000000000000AB
-:1005F00002000F005F80710000000000000000009A
-:1006000002000F0060807100000000000000000088
-:1006100002000F0061807100000000000000000077
-:1006200002000F0062807100000000000000000066
-:1006300002000F0063807100000000000000000055
-:1006400002000F00648071002D000000000000DB3C
-:1006500002000F00658071003F000000040100DD12
-:1006600002000F00668071003F000000010018DDED
-:1006700002000F0067807100690000007A3D00DD14
-:1006800002000F00688071003F000000040800DDD8
-:1006900002000F0069807100690000007A3D00DDF2
-:1006A00002000F006A8071003F000000043000DD8E
-:1006B00002000F006B8071003F000000010018DD98
-:1006C00002000F006C807100690000007A3D00DDBF
-:1006D00002000F006D8071003F000000040000DD8B
-:1006E00002000F006E807100690000007A3D00DD9D
-:1006F00002000F006F8071003F000000043D00DD2C
-:1007000002000F00708071003F000000010018DD42
-:1007100002000F0071807100690000007A3D00DD69
-:1007200002000F00728071003F000000040700DD2E
-:1007300002000F0073807100690000007A3D00DD47
-:1007400002000F00748071003F000000842800DD6B
-:1007500002000F00758071003F000000010018DDED
-:1007600002000F0076807100690000007A3D00DD14
-:1007700002000F00778071003F000000043700DDA9
-:1007800002000F0078807100690000007A3D00DDF2
-:1007900002000F00798071003F000000042900DD95
-:1007A00002000F007A8071003F000000010018DD98
-:1007B00002000F007B807100690000007A3D00DDBF
-:1007C00002000F007C8071003F00000004AA04DDDD
-:1007D00002000F007D807100690000007A3D00DD9D
-:1007E00002000F007E8071003F000000042800DD41
-:1007F00002000F007F8071003F000000010018DD43
-:1008000002000F0080807100690000007A3D00DD69
-:1008100002000F00818071003F000000043100DD04
-:1008200002000F0082807100690000007A3D00DD47
-:1008300002000F00838071003F000000842B00DD68
-:1008400002000F00848071003F000000010018DDED
-:1008500002000F0085807100690000007A3D00DD14
-:1008600002000F00868071003F00000004E401DDFB
-:1008700002000F0087807100690000007A3D00DDF2
-:1008800002000F00888071003F000000840080D7C4
-:1008900002000F00898071003F000000010098D71E
-:1008A00002000F008A80710059000000EF3780D7E6
-:1008B00002000F008B8071003D0000006F0080F788
-:1008C00002000F008C8071003D0000006F0080F777
-:1008D00002000F008D8071003D0000006F0080F766
-:1008E00002000F008E8071002D0000007F02D6D71D
-:1008F00002000F008F807100180000008100FF17B8
-:1009000002000F00908071003D0000006F0080F732
-:1009100002000F00918071003D0000006F0080F721
-:1009200002000F00928071002D000000B800D8D79F
-:1009300002000F0093807100180000008100EB1787
-:1009400002000F00948071003F000000042900DDC8
-:1009500002000F00958071003F000000010018DDCB
-:1009600002000F0096807100690000007A3D00DDF2
-:1009700002000F00978071003F00000084AA04DD90
-:1009800002000F0098807100690000007A3D00DDD0
-:1009900002000F00998071003F000000042B00DD71
-:1009A00002000F009A8071003F000000010018DD76
-:1009B00002000F009B807100690000007A3D00DD9D
-:1009C00002000F009C8071003F000000040000DD69
-:1009D00002000F009D807100690000007A3D00DD7B
-:1009E00002000F009E8071003F000000842900DD9E
-:1009F00002000F009F8071003F000000010018DD21
-:100A000002000F00A0807100690000007A3D00DD47
-:100A100002000F00A18071003F000000040000DD13
-:100A200002000F00A2807100690000007A3D00DD25
-:100A300002000F00A38071003F000000042A00DDC7
-:100A400002000F00A48071003F000000010018DDCB
-:100A500002000F00A5807100690000007A3D00DDF2
-:100A600002000F00A68071003F000000849100DDAD
-:100A700002000F00A7807100690000007A3D00DDD0
-:100A800002000F00A88071003F000000841980D68A
-:100A900002000F00A98071003F000000010080D615
-:100AA00002000F00AA80710035000000ED0080D622
-:100AB00002000F00AB807100180000008100FF37BA
-:100AC00002000F00AC8071003F000000042B00DD2D
-:100AD00002000F00AD8071003F000000010018DD32
-:100AE00002000F00AE807100690000007A3D00DD59
-:100AF00002000F00AF8071003F000000040000DD25
-:100B000002000F00B0807100690000007A3D00DD36
-:100B100002000F00B18071003F000000842A00DD58
-:100B200002000F00B28071003F000000010018DDDC
-:100B300002000F00B3807100690000007A3D00DD03
-:100B400002000F00B48071003F000000040000DDCF
-:100B500002000F00B5807100690000007A3D00DDE1
-:100B600002000F00B68071003F000000840C80D6A8
-:100B700002000F00B78071003F000000010080D626
-:100B800002000F00B880710035000000ED0080D633
-:100B900002000F00B9807100180000008100FF37CB
-:100BA00002000F00BA8071003F000000842A00DDBF
-:100BB00002000F00BB8071003F000000010018DD43
-:100BC00002000F00BC807100690000007A3D00DD6A
-:100BD00002000F00BD8071003F000000040000DD36
-:100BE00002000F00BE807100690000007A3D00DD48
-:100BF00002000F00BF8071003F000000840F80D60C
-:100C000002000F00C08071003F000000010080D68C
-:100C100002000F00C180710035000000ED0080D699
-:100C200002000F00C2807100180000008100FF3731
-:100C300002000F00C38071003F000000042A00DDA5
-:100C400002000F00C48071003F000000010018DDA9
-:100C500002000F00C5807100690000007A3D00DDD0
-:100C600002000F00C68071003F000000841100DD0B
-:100C700002000F00C7807100690000007A3D00DDAE
-:100C800002000F00C88071003F000000842800DDD2
-:100C900002000F00C98071003F000000010018DD54
-:100CA00002000F00CA807100690000007A3D00DD7B
-:100CB00002000F00CB8071003F000000843700DD90
-:100CC00002000F00CC807100690000007A3D00DD59
-:100CD00002000F00CD8071002D000000000080D3C5
-:100CE00002000F00CE8071003F000000803700D26C
-:100CF00002000F00CF8071003F000000040480D18B
-:100D000002000F00D08071003F000000010084D17C
-:100D100002000F00D180710069000000763B00DD09
-:100D200002000F00D280710069000000763B00DDF8
-:100D300002000F00D380710069000000763B00DDE7
-:100D400002000F00D48071003F00000084FF7FD1BB
-:100D500002000F00D58071003F00000081FF7FD1AD
-:100D600002000F00D680710069000000763B00DDB4
-:100D700002000F00D780710069000000763B00DDA3
-:100D800002000F00D880710069000000763B00DD92
-:100D900002000F00D980710069000000763B00DD81
-:100DA00002000F00DA80710069000000763B00DD70
-:100DB00002000F00DB80710069000000763B00DD5F
-:100DC00002000F00DC8071003F000000840780D625
-:100DD00002000F00DD8071003F000000010080D69E
-:100DE00002000F00DE80710035000000ED0080D6AB
-:100DF00002000F00DF807100180000008100FF3743
-:100E000002000F00E080710049000000633B00DD3C
-:100E100002000F00E180710059000000763B00DD08
-:100E200002000F00E28071003D0000006F0080F7BB
-:100E300002000F00E38071003D0000006F0080F7AA
-:100E400002000F00E48071003D0000006F0080F799
-:100E500002000F00E58071002D0000007F0206DD1A
-:100E600002000F00E6807100180000007A3D7F1D2F
-:100E700002000F00E780710045000000393100DDFD
-:100E800002000F00E8807100940000003B310B006D
-:100E900002000F00E9807100940000003D3109005C
-:100EA00002000F00EA807100940000003F3107004B
-:100EB00002000F00EB80710094000000763B0500FB
-:100EC00002000F00EC807100090000007A3DEDC1C6
-:100ED00002000F00ED8071003F00000080B700D2DB
-:100EE00002000F00EE8071003F000000842800DD4A
-:100EF00002000F00EF8071003F000000010018DDCC
-:100F000002000F00F080710069000000643200DD13
-:100F100002000F00F1807100690000007A3D00DDE1
-:100F200002000F00F28071003F000000840780D6AD
-:100F300002000F00F38071003F000000010080D626
-:100F400002000F00F480710035000000ED0080D633
-:100F500002000F00F5807100180000008100FF37CB
-:100F600002000F00F680710049000000633B00DDC5
-:100F700002000F00F780710059000000763B00DD91
-:100F800002000F00F88071003D0000006F0080F744
-:100F900002000F00F98071003D0000006F0080F733
-:100FA00002000F00FA8071003D0000006F0080F722
-:100FB00002000F00FB8071002D0000007F0206DDA3
-:100FC00002000F00FC807100180000007A3D7F1DB8
-:100FD00002000F00FD807100450000003A3100DD85
-:100FE00002000F00FE80710018000000763B2D1DEE
-:100FF00002000F00FF807100450000003C3100DD61
-:1010000002000F000081710018000000763B131DE4
-:1010100002000F0001817100450000003E3100DD3B
-:1010200002000F000281710018000000763B1B1DBA
-:1010300002000F00038171003F000000043000DD5A
-:1010400002000F00048171003F000000010018DD64
-:1010500002000F0005817100690000007A3D00DD8B
-:1010600002000F00068171003F000000040100DD56
-:1010700002000F0007817100690000007A3D00DD69
-:1010800002000F0008817100090000007A3D2DC5A3
-:1010900002000F000981710029000000640001D2E4
-:1010A00002000F000A8171003F000000842800DD6B
-:1010B00002000F000B8171003F000000010018DDED
-:1010C00002000F000C81710069000000643200DD35
-:1010D00002000F000D817100690000007A3D00DD03
-:1010E00002000F000E817100090000007A3D29C244
-:1010F00002000F000F81710029000000640000D27F
-:1011000002000F00108171003F000000842800DD04
-:1011100002000F00118171003F000000010018DD86
-:1011200002000F001281710069000000643200DDCE
-:1011300002000F0013817100690000007A3D00DD9C
-:1011400002000F001481710049000000633B00DDC4
-:1011500002000F001581710059000000763B00DD90
-:1011600002000F00168171003D0000006F0080F743
-:1011700002000F00178171003D0000006F0080F732
-:1011800002000F00188171003D0000006F0080F721
-:1011900002000F00198171002D0000007F0206DDA2
-:1011A00002000F001A817100180000007A3D7F1DB7
-:1011B00002000F001B817100450000003A3100DD84
-:1011C00002000F001C81710018000000763B0F1D0B
-:1011D00002000F001D8171003F000000043000DD9F
-:1011E00002000F001E8171003F000000010018DDA9
-:1011F00002000F001F817100690000007A3D00DDD0
-:1012000002000F00208171003F000000040100DD9A
-:1012100002000F0021817100690000007A3D00DDAD
-:1012200002000F0022817100090000007A3D2DC5E7
-:1012300002000F00238171002D000000820008D100
-:1012400002000F0024817100080000007A3DC323D2
-:1012500002000F0025817100490000000A3B00D602
-:1012600002000F00268171003F000000040000D33F
-:1012700002000F00278171003F000000010004D32D
-:1012800002000F00288171002F000000854081D6E8
-:1012900002000F00298171003F00000084FFFFD48D
-:1012A00002000F002A8171003F000000810780D4F6
-:1012B00002000F002B8171003F00000084FFFFD16E
-:1012C00002000F002C8171003F000000010080D15E
-:1012D00002000F002D81710049000000663600DD1C
-:1012E00002000F002E81710069000000763B00DDD6
-:1012F00002000F002F81710069000000763B00DDC5
-:1013000002000F003081710069000000763B00DDB3
-:1013100002000F003181710069000000693B00DDAF
-:1013200002000F003281710069000000763B00DD91
-:1013300002000F003381710069000000763B00DD80
-:1013400002000F003481710069000000763B00DD6F
-:1013500002000F003581710069000000693B00DD6B
-:1013600002000F0036817100610000006C0400F67D
-:1013700002000F003781710035000000ED0080D6BB
-:1013800002000F00388171001800000081006B3DE1
-:1013900002000F0039817100490000008B0500D662
-:1013A00002000F003A8171002F000000060181D673
-:1013B00002000F003B8171002D000000000000D2F0
-:1013C00002000F003C81710021000000E40000D207
-:1013D00002000F003D8171003D0000006F0080F7AA
-:1013E00002000F003E8171002D0000007F0106DD2C
-:1013F00002000F003F817100180000007A3D7F1D40
-:1014000002000F0040817100490000006C3600D8D6
-:1014100002000F004181710069000000E73300D82D
-:1014200002000F004281710069000000E73300D81C
-:1014300002000F004381710069000000EF3700D8FF
-:1014400002000F0044817100310000006C0100D6E1
-:1014500002000F00458171002D000000000000D146
-:1014600002000F004681710049000000E4337AD188
-:1014700002000F00478171002F000000620171D14E
-:1014800002000F00488171002F000000620161D14D
-:1014900002000F004981710049000000E33340D190
-:1014A00002000F004A8171003D0000006F0080F7CC
-:1014B00002000F004B8171002D0000007F0106DD4E
-:1014C00002000F004C817100180000007A3D7F1D62
-:1014D00002000F004D817100490000006C3600D8F9
-:1014E00002000F004E81710069000000E73300D850
-:1014F00002000F004F81710069000000623100D8C6
-:1015000002000F005081710069000000EF3700D821
-:1015100002000F0051817100310000006C0100D603
-:1015200002000F00528171003D0000006F0080F743
-:1015300002000F00538171002D0000007F0106DDC5
-:1015400002000F0054817100180000007A3D7F1DD9
-:1015500002000F0055817100490000006C3600D870
-:1015600002000F005681710069000000E73300D8C7
-:1015700002000F005781710069000000E73300D8B6
-:1015800002000F005881710069000000EF3700D899
-:1015900002000F0059817100310000006C0100D67B
-:1015A00002000F005A8171002D000000000000D1E0
-:1015B00002000F005B8171002D000000E4076CD178
-:1015C00002000F005C81710049000000E33340D14C
-:1015D00002000F005D8171003D0000006F0080F788
-:1015E00002000F005E8171002D0000007F0106DD0A
-:1015F00002000F005F817100180000007A3D7F1D1E
-:1016000002000F0060817100490000006C3600D8B4
-:1016100002000F006181710069000000E73300D80B
-:1016200002000F006281710069000000623100D881
-:1016300002000F006381710069000000EF3700D8DD
-:1016400002000F0064817100310000006C0100D6BF
-:1016500002000F00658171003D0000006F0080F7FF
-:1016600002000F00668171002D0000007F0106DD81
-:1016700002000F0067817100180000007A3D7F1D95
-:1016800002000F0068817100490000006C3600D82C
-:1016900002000F006981710069000000E73300D883
-:1016A00002000F006A81710069000000E73300D872
-:1016B00002000F006B81710069000000EF3700D855
-:1016C00002000F006C817100310000006C0100D637
-:1016D00002000F006D8171002D000000000000D19C
-:1016E00002000F006E81710049000000E43378D1E0
-:1016F00002000F006F8171002F000000620171D1A4
-:1017000002000F00708171002F000000620161D1A2
-:1017100002000F007181710049000000E33340D1E5
-:1017200002000F00728171003D0000006F0080F721
-:1017300002000F00738171002D0000007F0106DDA3
-:1017400002000F0074817100180000007A3D7F1DB7
-:1017500002000F0075817100490000006C3600D84E
-:1017600002000F007681710069000000E73300D8A5
-:1017700002000F007781710069000000623100D81B
-:1017800002000F007881710069000000EF3700D877
-:1017900002000F0079817100310000006C0100D659
-:1017A00002000F007A8171003D0000006F0080F799
-:1017B00002000F007B8171002D0000007F0106DD1B
-:1017C00002000F007C817100180000007A3D7F1D2F
-:1017D00002000F007D817100490000006C3600D8C6
-:1017E00002000F007E81710069000000E73300D81D
-:1017F00002000F007F81710069000000E73300D80C
-:1018000002000F008081710069000000EF3700D8EE
-:1018100002000F0081817100310000006C0100D6D0
-:1018200002000F00828171002D000000000000D135
-:1018300002000F00838171002D000000E40768D1D1
-:1018400002000F008481710049000000E33340D1A1
-:1018500002000F00858171003D0000006F0080F7DD
-:1018600002000F00868171002D0000007F0106DD5F
-:1018700002000F0087817100180000007A3D7F1D73
-:1018800002000F0088817100490000006C3600D80A
-:1018900002000F008981710069000000E73300D861
-:1018A00002000F008A81710069000000623100D8D7
-:1018B00002000F008B81710069000000EF3700D833
-:1018C00002000F008C817100310000006C0100D615
-:1018D00002000F008D81710035000000ED0080D600
-:1018E00002000F008E817100080000008100792243
-:1018F00002000F008F817100490000000C0600D625
-:1019000002000F00908171002F000000060181D6B7
-:1019100002000F00918171003F000000020080D49E
-:1019200002000F00928171003F000000840080D40B
-:1019300002000F00938171003F000000020100D5FA
-:1019400002000F00948171003F000000840100D567
-:1019500002000F00958171003F000000020280D557
-:1019600002000F00968171003F000000040280D544
-:1019700002000F00978171003D0000006F0080F7AA
-:1019800002000F00988171002D0000007F0106DD2C
-:1019900002000F0099817100180000007A3D7F1D40
-:1019A00002000F009A817100490000006C3600D8D7
-:1019B00002000F009B81710069000000E93400D82B
-:1019C00002000F009C817100690000006A3500D898
-:1019D00002000F009D81710069000000EF3700D800
-:1019E00002000F009E817100310000006C0100D6E2
-:1019F00002000F009F81710041000000EB3480D491
-:101A000002000F00A0817100410000006B3500D57D
-:101A100002000F00A181710035000000ED0080D6AA
-:101A200002000F00A2817100180000008100EB3756
-:101A300002000F00A3817100490000000D3B00D699
-:101A400002000F00A481710049000000073B80D60E
-:101A500002000F00A58171002D000000000000D1E0
-:101A600002000F00A681710049000000663600DD0B
-:101A700002000F00A781710069000000763B00DDC5
-:101A800002000F00A881710069000000763B00DDB4
-:101A900002000F00A981710069000000763B00DDA3
-:101AA00002000F00AA81710069000000763B00DD92
-:101AB00002000F00AB81710069000000763B00DD81
-:101AC00002000F00AC81710069000000763B00DD70
-:101AD00002000F00AD81710069000000763B00DD5F
-:101AE00002000F00AE81710069000000763B00DD4E
-:101AF00002000F00AF817100610000006C0400F66D
-:101B000002000F00B081710035000000ED0080D6AA
-:101B100002000F00B1817100180000008100EB3756
-:101B200002000F00B2817100490000000E3B00D698
-:101B300002000F00B381710049000000083B80D60D
-:101B400002000F00B481710049000000093B80D5FC
-:101B500002000F00B58171003D0000006F0080F7AA
-:101B600002000F00B68171002D0000007F0106DD2C
-:101B700002000F00B7817100180000007A3D7F1D40
-:101B800002000F00B8817100490000006C3600D8D7
-:101B900002000F00B981710069000000EB3500D828
-:101BA00002000F00BA81710069000000E73300D81D
-:101BB00002000F00BB81710069000000EF3700D800
-:101BC00002000F00BC81710041000000EC0700D64C
-:101BD00002000F00BD817100410000006B0880D53C
-:101BE00002000F00BE81710035000000ED0080D6BC
-:101BF00002000F00BF817100180000008100ED3766
-:101C000002000F00C08171003F00000080FFFFD480
-:101C100002000F00C18171003F000000040002D5E6
-:101C200002000F00C28171003F000000010018D5C2
-:101C300002000F00C3817100490000006A3B00DD13
-:101C400002000F00C481710069000000693B00DDE3
-:101C500002000F00C581710069000000693B00DDD2
-:101C600002000F00C681710021000000EA0000D5CB
-:101C700002000F00C7817100490000006A3B0EDDC1
-:101C800002000F00C8817100350000007A0004D105
-:101C900002000F00C9817100180000008100F537B3
-:101CA00002000F00CA8171003F00000080FFFFD4D6
-:101CB00002000F00CB8171003F000000040004D53A
-:101CC00002000F00CC8171003F000000010018D518
-:101CD00002000F00CD81710069000000693B00DD4A
-:101CE00002000F00CE81710069000000693B00DD39
-:101CF00002000F00CF817100490000006A3B00DD47
-:101D000002000F00D081710051000000EA0000F5D0
-:101D100002000F00D18171003D0000006F0080F7CC
-:101D200002000F00D28171003D0000006F0080F7BB
-:101D300002000F00D3817100490000006A3B0EDDF4
-:101D400002000F00D4817100350000007A8004D1B8
-:101D500002000F00D5817100180000008100F537E6
-:101D600002000F00D68171003F000000047F7FC792
-:101D700002000F00D78171003F000000017F7FC784
-:101D800002000F00D88171003F000000004080D6A3
-:101D900002000F00D98171003F00000000C003D194
-:101DA00002000F00DA81710025000000E20020DE51
-:101DB00002000F00DB817100490000004E2780DE29
-:101DC00002000F00DC8171003D0000006F0080F711
-:101DD00002000F00DD8171003D0000006F0080F700
-:101DE00002000F00DE81710035000000E20000D12A
-:101DF00002000F00DF81710035000000ED0080D689
-:101E000002000F00E0817100180000008100F5372A
-:101E100002000F00E18171003F000000043000DD8E
-:101E200002000F00E28171003F000000010018DD98
-:101E300002000F00E3817100690000003A1D00DD1F
-:101E400002000F00E4817100690000007A3D00DDAE
-:101E500002000F00E58171007D00000013A760C73C
-:101E600002000F00E681710031000000410080C0D7
-:101E700002000F00E781710031000000480000C43B
-:101E800002000F00E881710031000000450080C2AF
-:101E900002000F00E9817100000000000000000056
-:101EA00002000F00EA817100000000000000000045
-:101EB00002000F00EB817100000000000000000034
-:101EC00002000F00EC817100000000000000000023
-:101ED00002000F00ED817100000000000000000012
-:101EE00002000F00EE817100000000000000000001
-:101EF00002000F00EF8171000000000000000000F0
-:101F000002000F00F08171000000000000000000DE
-:101F100002000F00F18171000000000000000000CD
-:101F200002000F00F28171000000000000000000BC
-:101F300002000F00F38171000000000000000000AB
-:101F400002000F00F48171002D000000000000DB92
-:101F500002000F00F58171003F000000043000DD39
-:101F600002000F00F68171003F000000010018DD43
-:101F700002000F00F7817100690000007A3D00DD6A
-:101F800002000F00F88171003F000000040000DD36
-:101F900002000F00F9817100690000007A3D00DD48
-:101FA00002000F00FA8171002D000000000080D3B4
-:101FB00002000F00FB8171003F000000040400DDFF
-:101FC00002000F00FC8171003F000000010018DDDD
-:101FD00002000F00FD81710069000000140A00DD9D
-:101FE00002000F00FE817100690000007A3D00DDF3
-:101FF00002000F00FF81710049000000943304D1FA
-:1020000002000F00008271003F000000840400DD28
-:1020100002000F00018271003F000000010018DD86
-:1020200002000F000282710069000000623100DDD1
-:1020300002000F0003827100690000007A3D00DD9C
-:1020400002000F00048271003F000000040500DD63
-:1020500002000F00058271003F000000010018DD42
-:1020600002000F000682710069000000950A00DD81
-:1020700002000F0007827100690000007A3D00DD58
-:1020800002000F000882710049000000953304D15E
-:1020900002000F00098271003F000000840500DD8E
-:1020A00002000F000A8271003F000000010018DDED
-:1020B00002000F000B82710069000000623100DD38
-:1020C00002000F000C827100690000007A3D00DD03
-:1020D00002000F000D8271003F000000040600DDC9
-:1020E00002000F000E8271003F000000010018DDA9
-:1020F00002000F000F827100690000007A3D00DDD0
-:1021000002000F00108271003F000000840000DD1B
-:1021100002000F0011827100690000007A3D00DDAD
-:1021200002000F00128271003F000000040000DD79
-:1021300002000F00138271003F000000010018DD53
-:1021400002000F001482710069000000160B00DD10
-:1021500002000F0015827100690000007A3D00DD69
-:1021600002000F00168271003F000000041000DD25
-:1021700002000F00178271003F000000010018DD0F
-:1021800002000F0018827100690000007A3D00DD36
-:1021900002000F00198271003F000000040000DD02
-:1021A00002000F001A827100690000007A3D00DD14
-:1021B00002000F001B8271003F000000841000DD50
-:1021C00002000F001C8271003F000000010018DDBA
-:1021D00002000F001D827100690000007A3D00DDE1
-:1021E00002000F001E8271003F000000048001DD2C
-:1021F00002000F001F827100690000007A3D00DDBF
-:1022000002000F00208271003F000000041100DD79
-:1022100002000F00218271003F000000010018DD64
-:1022200002000F0022827100690000007A3D00DD8B
-:1022300002000F00238271003F000000040000DD57
-:1022400002000F0024827100690000007A3D00DD69
-:1022500002000F00258271003F000000841100DDA4
-:1022600002000F00268271003F000000010018DD0F
-:1022700002000F0027827100690000007A3D00DD36
-:1022800002000F00288271003F000000040016DDEC
-:1022900002000F0029827100690000007A3D00DD14
-:1022A00002000F002A8271003F000000041200DDCE
-:1022B00002000F002B8271003F000000010018DDBA
-:1022C00002000F002C827100690000007A3D00DDE1
-:1022D00002000F002D8271003F000000040000DDAD
-:1022E00002000F002E827100690000007A3D00DDBF
-:1022F00002000F002F8271003F000000841200DDF9
-:1023000002000F00308271003F000000010018DD64
-:1023100002000F0031827100690000007A3D00DD8B
-:1023200002000F00328271003F000000040000DD57
-:1023300002000F0033827100690000007A3D00DD69
-:1023400002000F00348271003F000000041300DD22
-:1023500002000F00358271003F000000010018DD0F
-:1023600002000F0036827100690000007A3D00DD36
-:1023700002000F00378271003F000000040000DD02
-:1023800002000F0038827100690000007A3D00DD14
-:1023900002000F00398271003F000000841300DD4D
-:1023A00002000F003A8271003F000000010018DDBA
-:1023B00002000F003B827100690000007A3D00DDE1
-:1023C00002000F003C8271003F000000040005DDA8
-:1023D00002000F003D827100690000007A3D00DDBF
-:1023E00002000F003E8271003F000000042000DD6B
-:1023F00002000F003F8271003F000000010018DD65
-:1024000002000F0040827100690000007A3D00DD8B
-:1024100002000F00418271003F000000040000DD57
-:1024200002000F0042827100690000007A3D00DD69
-:1024300002000F00438271003F000000842000DD95
-:1024400002000F00448271003F000000010018DD0F
-:1024500002000F0045827100690000007A3D00DD36
-:1024600002000F00468271003F000000049001DD71
-:1024700002000F0047827100690000007A3D00DD14
-:1024800002000F00488271003F000000042100DDBF
-:1024900002000F00498271003F000000010018DDBA
-:1024A00002000F004A827100690000007A3D00DDE1
-:1024B00002000F004B8271003F000000840000DD2D
-:1024C00002000F004C827100690000007A3D00DDBF
-:1024D00002000F004D8271003F000000842100DDEA
-:1024E00002000F004E8271003F000000010018DD65
-:1024F00002000F004F827100690000007A3D00DD8C
-:1025000002000F00508271003F000000040000DD57
-:1025100002000F0051827100690000007A3D00DD69
-:1025200002000F00528271003F000000042200DD13
-:1025300002000F00538271003F000000010018DD0F
-:1025400002000F0054827100690000007A3D00DD36
-:1025500002000F00558271003F000000840200DD80
-:1025600002000F0056827100690000007A3D00DD14
-:1025700002000F00578271003F000000842200DD3E
-:1025800002000F00588271003F000000010018DDBA
-:1025900002000F0059827100690000007A3D00DDE1
-:1025A00002000F005A8271003F000000040000DDAD
-:1025B00002000F005B827100690000007A3D00DDBF
-:1025C00002000F005C8271003F000000042300DD68
-:1025D00002000F005D8271003F000000010018DD65
-:1025E00002000F005E827100690000007A3D00DD8C
-:1025F00002000F005F8271003F000000040000DD58
-:1026000002000F0060827100690000007A3D00DD69
-:1026100002000F00618271003F000000041800DD1D
-:1026200002000F00628271003F000000010018DD0F
-:1026300002000F006382710069000000970B00DD4B
-:1026400002000F0064827100690000007A3D00DD25
-:1026500002000F006582710049000000973304D129
-:1026600002000F00668271003F000000841800DD48
-:1026700002000F00678271003F000000010018DDBA
-:1026800002000F006882710069000000623100DD05
-:1026900002000F0069827100690000007A3D00DDD0
-:1026A00002000F006A8271003F000000041900DD83
-:1026B00002000F006B8271003F000000010018DD76
-:1026C00002000F006C82710069000000180C00DD30
-:1026D00002000F006D827100690000007A3D00DD8C
-:1026E00002000F006E82710049000000983304D18F
-:1026F00002000F006F8271003F000000841900DDAE
-:1027000002000F00708271003F000000010018DD20
-:1027100002000F007182710069000000623100DD6B
-:1027200002000F0072827100690000007A3D00DD36
-:1027300002000F00738271003F000000041A00DDE8
-:1027400002000F00748271003F000000010018DDDC
-:1027500002000F0075827100690000007A3D00DD03
-:1027600002000F00768271003F000000040000DDCF
-:1027700002000F0077827100690000007A3D00DDE1
-:1027800002000F00788271003F000000841A00DD13
-:1027900002000F00798271003F000000010018DD87
-:1027A00002000F007A82710069000000160B00DD44
-:1027B00002000F007B827100690000007A3D00DD9D
-:1027C00002000F007C8271003F000000041C00DD4D
-:1027D00002000F007D8271003F000000010018DD43
-:1027E00002000F007E82710069000000990C00DD7C
-:1027F00002000F007F827100690000007A3D00DD59
-:1028000002000F00808271003F000000841C00DD88
-:1028100002000F00818271003F000000010018DDFE
-:1028200002000F0082827100690000001A0D00DDB5
-:1028300002000F0083827100690000007A3D00DD14
-:1028400002000F00848271003F000000041D00DDC3
-:1028500002000F00858271003F000000010018DDBA
-:1028600002000F0086827100690000009B0D00DDF0
-:1028700002000F0087827100690000007A3D00DDD0
-:1028800002000F0088827100490000009B3304D1D0
-:1028900002000F00898271003F000000841D00DDEE
-:1028A00002000F008A8271003F000000010018DD65
-:1028B00002000F008B82710069000000623100DDB0
-:1028C00002000F008C827100690000007A3D00DD7B
-:1028D00002000F008D8271003F000000041E00DD29
-:1028E00002000F008E8271003F000000010018DD21
-:1028F00002000F008F827100690000001C0E00DDD5
-:1029000002000F0090827100690000007A3D00DD36
-:1029100002000F00918271003F000000040100DD01
-:1029200002000F00928271003F000000010018DDDC
-:1029300002000F0093827100690000007A3D00DD03
-:1029400002000F00948271003F000000040F00DDC0
-:1029500002000F0095827100690000007A3D00DDE1
-:1029600002000F00968271007D00000013A760C76F
-:1029700002000F009782710031000000410080C00A
-:1029800002000F009882710031000000480000C46E
-:1029900002000F009982710031000000450080C2E2
-:1029A00002000F009A827100310000006D0080D695
-:1029B0000F000F0064007000000000000000000025
-:1029C00000000000400000000001000000040000C2
-:1029D000640000005400000000000000002400001B
-:1029E0000028000000040000802800008001000092
-:1029F00003000000000000000000000000000000D4
-:102A0000510000007D01000008000000510000009E
-:102A10005D00000000000000090000000050000000
-:102A200000000000000000000F000F00F401700023
-:102A30000000000000000000000000004000000056
-:102A400000010000000400006400000054000000C9
-:102A50000000000000240000002800000004000026
-:102A6000802800008001000003000000000000003A
-:102A70000000000000000000510000007D01000087
-:102A800008000000510000005D0000000000000090
-:102A900009000000005000000000000000000000DD
-:102AA00002000F00000070000100000000000000A4
-:102AB00002000F0000007000010000000000000094
-:102AC00002000F00008071002500000002000EDDF2
-:102AD00002000F000180710004000000763BD1016C
-:102AE00002000F00028071002500000082000EDD50
-:102AF00002000F000380710004000000763B890291
-:102B000002000F00048071002500000002010EDDAC
-:102B100002000F000580710004000000763B850272
-:102B200002000F00068071002500000082010EDD0A
-:102B300002000F000780710004000000763BFD03D7
-:102B400002000F000880710009000000763B81CF71
-:102B500002000F000980710000000000000000006A
-:102B600002000F000A807100000000000000000059
-:102B700002000F000B807100000000000000000048
-:102B800002000F000C807100000000000000000037
-:102B900002000F000D807100000000000000000026
-:102BA00002000F000E807100000000000000000015
-:102BB00002000F000F807100000000000000000004
-:102BC00002000F00108071000000000000000000F3
-:102BD00002000F00118071000000000000000000E2
-:102BE00002000F00128071000000000000000000D1
-:102BF00002000F00138071000000000000000000C0
-:102C000002000F00148071000000000000000000AE
-:102C100002000F001580710000000000000000009D
-:102C200002000F001680710000000000000000008C
-:102C300002000F001780710000000000000000007B
-:102C400002000F001880710000000000000000006A
-:102C500002000F0019807100000000000000000059
-:102C600002000F001A807100000000000000000048
-:102C700002000F001B807100000000000000000037
-:102C800002000F001C807100000000000000000026
-:102C900002000F001D807100000000000000000015
-:102CA00002000F001E807100000000000000000004
-:102CB00002000F001F8071000000000000000000F3
-:102CC00002000F00208071000000000000000000E2
-:102CD00002000F00218071000000000000000000D1
-:102CE00002000F00228071000000000000000000C0
-:102CF00002000F00238071000000000000000000AF
-:102D000002000F002480710000000000000000009D
-:102D100002000F002580710000000000000000008C
-:102D200002000F002680710000000000000000007B
-:102D300002000F002780710000000000000000006A
-:102D400002000F002880710049000000003B00C015
-:102D500002000F002980710049000000023B80C082
-:102D600002000F002A80710049000000033B00C1EF
-:102D700002000F002B80710049000000043B80C15D
-:102D800002000F002C80710029000000760060DF37
-:102D900002000F002D807100490000007D3B44DFE0
-:102DA00002000F002E80710079000000769060FD17
-:102DB00002000F002F8071003D0000006F0080F7BF
-:102DC00002000F00308071003D0000006F0080F7AE
-:102DD00002000F00318071003D0000006F0080F79D
-:102DE00002000F00328071003D0000006F0080F78C
-:102DF00002000F003380710000000000000000009E
-:102E000002000F003480710000000000000000008C
-:102E100002000F003580710000000000000000007B
-:102E200002000F003680710000000000000000006A
-:102E300002000F0037807100000000000000000059
-:102E400002000F0038807100000000000000000048
-:102E500002000F0039807100000000000000000037
-:102E600002000F003A807100000000000000000026
-:102E700002000F003B807100000000000000000015
-:102E800002000F003C807100000000000000000004
-:102E900002000F003D8071000000000000000000F3
-:102EA00002000F003E8071000000000000000000E2
-:102EB00002000F003F8071000000000000000000D1
-:102EC00002000F00408071000000000000000000C0
-:102ED00002000F00418071000000000000000000AF
-:102EE00002000F004280710000000000000000009E
-:102EF00002000F004380710000000000000000008D
-:102F000002000F004480710000000000000000007B
-:102F100002000F004580710000000000000000006A
-:102F200002000F0046807100000000000000000059
-:102F300002000F0047807100000000000000000048
-:102F400002000F0048807100000000000000000037
-:102F500002000F0049807100000000000000000026
-:102F600002000F004A807100000000000000000015
-:102F700002000F004B807100000000000000000004
-:102F800002000F004C8071000000000000000000F3
-:102F900002000F004D8071000000000000000000E2
-:102FA00002000F004E8071000000000000000000D1
-:102FB00002000F004F8071000000000000000000C0
-:102FC00002000F00508071000000000000000000AF
-:102FD00002000F005180710000000000000000009E
-:102FE00002000F005280710000000000000000008D
-:102FF00002000F005380710000000000000000007C
-:1030000002000F005480710000000000000000006A
-:1030100002000F0055807100000000000000000059
-:1030200002000F0056807100000000000000000048
-:1030300002000F0057807100000000000000000037
-:1030400002000F0058807100000000000000000026
-:1030500002000F0059807100000000000000000015
-:1030600002000F005A807100000000000000000004
-:1030700002000F005B8071000000000000000000F3
-:1030800002000F005C8071000000000000000000E2
-:1030900002000F005D8071000000000000000000D1
-:1030A00002000F005E8071000000000000000000C0
-:1030B00002000F005F8071000000000000000000AF
-:1030C00002000F00608071003F000000030000DF7D
-:1030D00002000F00618071002D000000810FE0DD13
-:1030E00002000F00628071003F000000830280DD5B
-:1030F00002000F00638071002D000000800104DDDC
-:1031000002000F00648071007D000000800015FD4A
-:1031100002000F00658071007A000000763B2010ED
-:1031200002000F00668071007A000000767B20307C
-:1031300002000F006780710021000000600024D0B1
-:1031400002000F00688071003F000000040100DDF4
-:1031500002000F00698071003F000000810240DD25
-:1031600002000F006A8071007900000003BB31DDAE
-:1031700002000F006B8071007900000004FB31DD5C
-:1031800002000F006C8071007900000076BB31DD19
-:1031900002000F006D8071007900000076FB31DDC8
-:1031A00002000F006E80710079000000010121FD16
-:1031B00002000F006F8071007D00000081402BFD38
-:1031C00002000F0070807100400000000230003DDE
-:1031D00002000F007180710048000000023B001DDA
-:1031E00002000F007280710079000000767B21DD03
-:1031F00002000F00738071002D0000007F0504DDC8
-:1032000002000F007480710018000000763B7F3DC3
-:1032100002000F00758071003D0000006F0080F714
-:1032200002000F00768071003D0000006F0080F703
-:1032300002000F00778071003D0000006F0080F7F2
-:1032400002000F007880710021000000761F37E334
-:1032500002000F007980710049000000793B00DD19
-:1032600002000F007A8071007900000076BB21DD3A
-:1032700002000F007B80710049000000793B00DDF7
-:1032800002000F007C8071007900000076BB21DD18
-:1032900002000F007D80710049000000793B00DDD5
-:1032A00002000F007E8071007900000076BB21DDF6
-:1032B00002000F007F80710079000000769060FDB1
-:1032C00002000F00808071007900000076FB21DD94
-:1032D00002000F00818071003F000000830000DFCA
-:1032E00002000F00828071003D0000006F0080F737
-:1032F00002000F0083807100000000000000000049
-:1033000002000F0084807100000000000000000037
-:1033100002000F0085807100000000000000000026
-:1033200002000F0086807100000000000000000015
-:1033300002000F0087807100000000000000000004
-:1033400002000F00888071000000000000000000F3
-:1033500002000F00898071000000000000000000E2
-:1033600002000F008A8071000000000000000000D1
-:1033700002000F008B8071000000000000000000C0
-:1033800002000F008C8071000000000000000000AF
-:1033900002000F008D80710000000000000000009E
-:1033A00002000F008E80710000000000000000008D
-:1033B00002000F008F80710000000000000000007C
-:1033C00002000F009080710000000000000000006B
-:1033D00002000F009180710000000000000000005A
-:1033E00002000F0092807100000000000000000049
-:1033F00002000F0093807100000000000000000038
-:1034000002000F0094807100000000000000000026
-:1034100002000F0095807100000000000000000015
-:1034200002000F0096807100000000000000000004
-:1034300002000F00978071000000000000000000F3
-:1034400002000F00988071000000000000000000E2
-:1034500002000F00998071000000000000000000D1
-:1034600002000F009A8071000000000000000000C0
-:1034700002000F009B8071000000000000000000AF
-:1034800002000F009C80710000000000000000009E
-:1034900002000F009D80710000000000000000008D
-:1034A00002000F009E80710000000000000000007C
-:1034B00002000F009F80710000000000000000006B
-:1034C00002000F00A08071002D000000030808D04A
-:1034D00002000F00A18071000800000076FBB521FA
-:1034E00002000F00A280710079000000810001DD60
-:1034F00002000F00A380710079000000028101DD4D
-:1035000002000F00A48071007D000000838001FD97
-:1035100002000F00A580710079000000763B90D07A
-:1035200002000F00A6807100490000007A3B58D0CD
-:1035300002000F00A780710049000000003B04D288
-:1035400002000F00A88071003D000000030040DD74
-:1035500002000F00A9807100240000006402003204
-:1035600002000F00AA8071003D00000003F87FDD1B
-:1035700002000F00AB807100290000007A0120D00A
-:1035800002000F00AC807100490000000E3BA4D087
-:1035900002000F00AD8071002D000000FF4204DD2D
-:1035A00002000F00AE80710018000000763B7F3DE6
-:1035B00002000F00AF8071002D000000820006DDC8
-:1035C00002000F00B080710038000000E001003000
-:1035D00002000F00B180710039000000600100D0CE
-:1035E00002000F00B2807100790000007C3BB1D175
-:1035F00002000F00B38071002D000000E30FE0DD3A
-:1036000002000F00B480710049000000E43080D057
-:1036100002000F00B5807100790000007C7B31DD75
-:1036200002000F00B6807100790000007C3B31DDA4
-:1036300002000F00B78071007D000000824037FD5E
-:1036400002000F00B880710008000000763B7D0189
-:1036500002000F00B98071003D0000006F0080F78C
-:1036600002000F00BA8071003D0000006F0080F77B
-:1036700002000F00BB80710049000000870300DDDD
-:1036800002000F00BC80710079000000080431DDE9
-:1036900002000F00BD807100790000007A7D31DDED
-:1036A00002000F00BE807100490000007C3B00D387
-:1036B00002000F00BF807100790000007CBB81D345
-:1036C00002000F00C08071007F0000007CB201D1B9
-:1036D00002000F00C18071004800000064320051F8
-:1036E00002000F00C28071003D000000030040DDB9
-:1036F00002000F00C38071000800000062319501D4
-:1037000002000F00C480710021000000660600D393
-:1037100002000F00C580710020000000E700805308
-:1037200002000F00C68071003F000000000800DDAD
-:1037300002000F00C78071007900000066B301DD50
-:1037400002000F00C880710079000000E7B301DDBE
-:1037500002000F00C980710075000000628601F14F
-:1037600002000F00CA8071007500000064B101D230
-:1037700002000F00CB80710078000000767B001DF6
-:1037800002000F00CC80710025000000E30100DD85
-:1037900002000F00CD807100080000006231B1010D
-:1037A00002000F00CE8071003D0000006F0080F726
-:1037B00002000F00CF8071003D0000006F0080F715
-:1037C00002000F00D08071003D0000006F0080F704
-:1037D00002000F00D180710021000000639F37E3D9
-:1037E00002000F00D2807100490000007C3B00D332
-:1037F00002000F00D3807100790000007CBB81D3F0
-:1038000002000F00D48071007F0000007CB201D163
-:1038100002000F00D58071004800000064320051A2
-:1038200002000F00D68071007500000064B101D263
-:1038300002000F00D780710078000000767B001D29
-:1038400002000F00D88071003F000000040000DD7E
-:1038500002000F00D98071007900000081C001DDF5
-:1038600002000F00DA80710079000000769060FDA0
-:1038700002000F00DB8071002D000000030808DD4E
-:1038800002000F00DC8071007800000081C0013D63
-:1038900002000F00DD8071003D0000006F0080F726
-:1038A00002000F00DE807100000000000000000038
-:1038B00002000F00DF807100000000000000000027
-:1038C00002000F00E0807100000000000000000016
-:1038D00002000F00E1807100000000000000000005
-:1038E00002000F00E28071000000000000000000F4
-:1038F00002000F00E38071000000000000000000E3
-:1039000002000F00E48071000000000000000000D1
-:1039100002000F00E58071000000000000000000C0
-:1039200002000F00E68071000000000000000000AF
-:1039300002000F00E780710000000000000000009E
-:1039400002000F00E880710049000000033B8ED1A7
-:1039500002000F00E98071002F000000E30081D118
-:1039600002000F00EA8071003F000000031880D1C0
-:1039700002000F00EB80710049000000033B04D1FE
-:1039800002000F00EC8071003F000000030280DDA8
-:1039900002000F00ED80710049000000023B04D2DC
-:1039A00002000F00EE80710049000000003B84D24D
-:1039B00002000F00EF80710025000000E20000DD32
-:1039C00002000F00F08071009400000062411300BB
-:1039D00002000F00F18071009400000062430B00B0
-:1039E00002000F00F280710094000000E248150010
-:1039F00002000F00F38071009400000062491B0078
-:103A000002000F00F48071009400000076402F0047
-:103A100002000F00F5807100090000007A3D81CF9F
-:103A200002000F00F68071001D000000E5802BFDF4
-:103A300002000F00F78071003000000063808331C6
-:103A400002000F00F88071003000000063808211D6
-:103A500002000F00F98071001D000000E58025FDC7
-:103A600002000F00FA807100300000006300833113
-:103A700002000F00FB807100300000006300821123
-:103A800002000F00FC8071002F000000E30081D1D4
-:103A900002000F00FD8071001D000000E58009FD9F
-:103AA00002000F00FE8071003000000063D38331FC
-:103AB00002000F00FF8071003000000063D283110C
-:103AC00002000F00008171002F000000E30081D18F
-:103AD00002000F00018171003F000000840180D6C8
-:103AE00002000F00028171003F000000010080D63B
-:103AF00002000F000381710035000000ED0080D648
-:103B000002000F0004817100180000008100FF37DF
-:103B100002000F000581710025000000640200D240
-:103B200002000F0006817100180000007AFD777D09
-:103B300002000F000781710049000000633B20DE96
-:103B400002000F000881710049000000793B80DE0F
-:103B500002000F000981710021000000E30080D104
-:103B600002000F000A817100090000007A3D81CF38
-:103B700002000F000B81710049000000E33100DDFD
-:103B800002000F000C81710069000000783B0EDD1F
-:103B900002000F000D81710061000000763B00DD26
-:103BA00002000F000E8171003F000000840100DD63
-:103BB00002000F000F8171003F000000010000DDD6
-:103BC00002000F001081710035000000FA0000DDD6
-:103BD00002000F001181710018000000763B7F3B4E
-:103BE00002000F00128171003D0000006F0080F79D
-:103BF00002000F00138171003D0000006F0080F78C
-:103C000002000F00148171003D0000006F0080F77A
-:103C100002000F001581710021000000E30080D137
-:103C200002000F001681710069000000793B04DD7D
-:103C300002000F001781710061000000E30080F1B5
-:103C400002000F00188171003F000000840180D63F
-:103C500002000F00198171003F000000010080D6B2
-:103C600002000F001A81710035000000ED0080D6BF
-:103C700002000F001B817100180000008100FF3757
-:103C800002000F001C81710025000000640200D2B8
-:103C900002000F001D8171009800000076BB5D607E
-:103CA00002000F001E817100090000007A3D81CFE3
-:103CB00002000F001F8171000000000000000000E2
-:103CC00002000F00208171000000000000000000D1
-:103CD00002000F00218171000000000000000000C0
-:103CE00002000F00228171000000000000000000AF
-:103CF00002000F002381710000000000000000009E
-:103D000002000F002481710000000000000000008C
-:103D100002000F002581710000000000000000007B
-:103D200002000F002681710000000000000000006A
-:103D300002000F0027817100000000000000000059
-:103D400002000F0028817100000000000000000048
-:103D500002000F0029817100000000000000000037
-:103D600002000F002A817100000000000000000026
-:103D700002000F002B817100000000000000000015
-:103D800002000F002C817100000000000000000004
-:103D900002000F002D8171000000000000000000F3
-:103DA00002000F002E8171000000000000000000E2
-:103DB00002000F002F8171000000000000000000D1
-:103DC00002000F00308171000000000000000000C0
-:103DD00002000F00318171000000000000000000AF
-:103DE00002000F003281710000000000000000009E
-:103DF00002000F003381710000000000000000008D
-:103E000002000F003481710000000000000000007B
-:103E100002000F003581710000000000000000006A
-:103E200002000F0036817100000000000000000059
-:103E300002000F0037817100000000000000000048
-:103E400002000F0038817100000000000000000037
-:103E500002000F0039817100000000000000000026
-:103E600002000F003A817100000000000000000015
-:103E700002000F003B817100000000000000000004
-:103E800002000F003C8171000000000000000000F3
-:103E900002000F003D8171000000000000000000E2
-:103EA00002000F003E8171000000000000000000D1
-:103EB00002000F003F8171000000000000000000C0
-:103EC00002000F004081710049000000013B08D44E
-:103ED00002000F0041817100090000007A3D8BC291
-:103EE00002000F00428171003F000000800300D4F7
-:103EF00002000F0043817100090000007A3D8BC26F
-:103F000002000F004481710049000000033B0ED401
-:103F100002000F00458171003F000000000042D602
-:103F200002000F00468171002F000000804081D206
-:103F300002000F00478171002D000000650384D24C
-:103F400002000F00488171003F000000800080D611
-:103F500002000F00498171003F000000040004DDF1
-:103F600002000F004A8171003F000000010018DDCF
-:103F700002000F004B817100690000006D3B00DD05
-:103F800002000F004C817100690000006D3B00DDF4
-:103F900002000F004D8171003100000065D203D393
-:103FA00002000F004E81710049000000663B40DEB8
-:103FB00002000F004F8171003F000000840180D695
-:103FC00002000F00508171003F000000010080D608
-:103FD00002000F005181710035000000ED0080D615
-:103FE00002000F0052817100180000008100FF37AD
-:103FF00002000F0053817100490000007E3B80D514
-:1040000002000F005481710021000000E60040DE34
-:1040100002000F00558171003F000000840180D62E
-:1040200002000F00568171003F000000010080D6A1
-:1040300002000F005781710035000000ED0080D6AE
-:1040400002000F0058817100180000008100FF3746
-:1040500002000F0059817100490000007E3B00D52D
-:1040600002000F005A81710079000000763B01DDEB
-:1040700002000F005B8171002D0000007F4004DD15
-:1040800002000F005C81710018000000763B7F3D4C
-:1040900002000F005D8171007900000076BB01DD38
-:1040A00002000F005E81710075000000E88001FDD4
-:1040B00002000F005F81710094000000684115004C
-:1040C00002000F006081710094000000E8442500A8
-:1040D00002000F006181710094000000E84123009C
-:1040E00002000F0062817100940000006845170013
-:1040F00002000F0063817100940000006842150007
-:1041000002000F006481710094000000E842270063
-:1041100002000F00658171009400000068432D00CB
-:1041200002000F00668171009400000068442D00B9
-:1041300002000F006781710094000000E843330023
-:1041400002000F006881710004000000763B9703B5
-:1041500002000F00698171000D00000065C10DE3D0
-:1041600002000F006A817100300000007600033207
-:1041700002000F006B817100300000007600021217
-:1041800002000F006C8171003F000000000080D42D
-:1041900002000F006D8171003F000000008080D19F
-:1041A00002000F006E8171000D00000065C13FE349
-:1041B00002000F006F817100300000007660043251
-:1041C00002000F0070817100300000007640041280
-:1041D00002000F00718171003F000000008082D456
-:1041E00002000F00728171003F000000008080D14A
-:1041F00002000F00738171000D00000065C13FE3F4
-:1042000002000F007481710030000000762004323B
-:1042100002000F007581710030000000760004126A
-:1042200002000F00768171003F000000000082D480
-:1042300002000F00778171000D00000065C163E38B
-:1042400002000F00788171003000000076200332F8
-:1042500002000F0079817100300000007600031227
-:1042600002000F007A8171003F000000000083D43B
-:1042700002000F007B81710049000000763B80D274
-:1042800002000F007C8171000D00000065C10DE38C
-:1042900002000F007D817100300000007680033243
-:1042A00002000F007E817100300000007680021253
-:1042B00002000F007F8171003F000000000081D4E8
-:1042C00002000F00808171003F000000000002D654
-:1042D00002000F00818171003F000000000081D1C9
-:1042E00002000F00828171000D00000065C13FE3F4
-:1042F00002000F008381710030000000762004323C
-:1043000002000F008481710030000000760004126A
-:1043100002000F00858171003F000000000082D480
-:1043200002000F008681710041000000EB3480D450
-:1043300002000F0087817100790000006ABB01DD77
-:1043400002000F00888171007900000076BB01DD5A
-:1043500002000F00898171003F000000031800D2A5
-:1043600002000F008A8171003F000000000081D12F
-:1043700002000F008B81710075000000638001FD59
-:1043800002000F008C81710098000000643B69807E
-:1043900002000F008D81710051000000E40000F266
-:1043A00002000F008E8171003F000000840180D662
-:1043B00002000F008F8171003F000000010080D6D5
-:1043C00002000F009081710035000000ED0080D6E2
-:1043D00002000F0091817100180000008100FF377A
-:1043E00002000F00928171002D0000007F4004DD6B
-:1043F00002000F009381710018000000763B7F3DA2
-:1044000002000F009481710049000000383BC0D3C6
-:1044100002000F009581710049000000643B00DD3F
-:1044200002000F009681710051000000E40000F2CC
-:1044300002000F00978171003F000000840180D6C8
-:1044400002000F00988171003F000000010080D63B
-:1044500002000F009981710035000000ED0080D648
-:1044600002000F009A817100180000008100FF37E0
-:1044700002000F009B81710049000000383BA0D36F
-:1044800002000F009C8171001900000076BB61DD05
-:1044900002000F009D81710049000000673B00DDB4
-:1044A00002000F009E81710075000000638281F19F
-:1044B00002000F009F81710041000000EB3480D4A6
-:1044C00002000F00A0817100790000006ABB01DDCD
-:1044D00002000F00A18171007900000076BB01DDB0
-:1044E00002000F00A28171003F000000031800D2FB
-:1044F00002000F00A38171003F000000008080D106
-:1045000002000F00A481710075000000638001FDAE
-:1045100002000F00A581710098000000643B378005
-:1045200002000F00A681710051000000E40000F2BB
-:1045300002000F00A78171003F000000840180D6B7
-:1045400002000F00A88171003F000000010080D62A
-:1045500002000F00A981710035000000ED0080D637
-:1045600002000F00AA817100180000008100FF37CF
-:1045700002000F00AB8171002D0000007F4004DDC0
-:1045800002000F00AC81710018000000763B7F3DF7
-:1045900002000F00AD81710049000000383B80D35C
-:1045A00002000F00AE8171001900000076BB6FDDC4
-:1045B00002000F00AF81710049000000673B00DD81
-:1045C00002000F00B081710075000000638281F16C
-:1045D00002000F00B181710041000000EB3480D473
-:1045E00002000F00B2817100790000006ABB01DD9A
-:1045F00002000F00B38171007900000063BB01DD90
-:1046000002000F00B481710075000000638001FD9D
-:1046100002000F00B581710098000000643B178014
-:1046200002000F00B681710049000000643B40DECB
-:1046300002000F00B78171003F000000840180D6A6
-:1046400002000F00B88171003F000000010080D619
-:1046500002000F00B981710035000000ED0080D626
-:1046600002000F00BA817100180000008100FF37BE
-:1046700002000F00BB8171002D0000007F4004DDAF
-:1046800002000F00BC81710018000000763B7F3DE6
-:1046900002000F00BD81710021000000E40000D283
-:1046A00002000F00BE817100190000007E7BEFD375
-:1046B00002000F00BF81710075000000638281F16C
-:1046C00002000F00C08171003F000000000080D692
-:1046D00002000F00C18171003F000000040004DDF2
-:1046E00002000F00C28171003F000000010018DDD0
-:1046F00002000F00C3817100690000006D3B00DD06
-:1047000002000F00C4817100690000006D3B00DDF4
-:1047100002000F00C58171003F000000000000DDB5
-:1047200002000F00C68171002D000000800154DDE1
-:1047300002000F00C7817100790000007680E0F36D
-:1047400002000F00C8817100490000007A3600D6CF
-:1047500002000F00C98171007900000076FB01DDC5
-:1047600002000F00CA8171003D0000006F0080F759
-:1047700002000F00CB81710049000000033B00DD07
-:1047800002000F00CC81710059000000763B00FD53
-:1047900002000F00CD8171003F000000031C80DD8E
-:1047A00002000F00CE8171003D0000006F0080F715
-:1047B00002000F00CF8171003D0000006F0080F704
-:1047C00002000F00D08171003D0000006F0080F7F3
-:1047D00002000F00D18171002D0000007F0206DD74
-:1047E00002000F00D2817100180000007A3D7F1D89
-:1047F00002000F00D3817100310000006B8883D468
-:1048000002000F00D4817100790000006ABB01DD55
-:1048100002000F00D581710079000000769081F1CF
-:1048200002000F00D681710075000000638001FD59
-:1048300002000F00D78171009800000076BB538002
-:1048400002000F00D881710019000000797B7FDD24
-:1048500002000F00D981710075000000638281F1B0
-:1048600002000F00DA81710000000000000000006B
-:1048700002000F00DB81710000000000000000005A
-:1048800002000F00DC817100000000000000000049
-:1048900002000F00DD817100000000000000000038
-:1048A00002000F00DE817100000000000000000027
-:1048B00002000F00DF817100000000000000000016
-:1048C00002000F00E0817100000000000000000005
-:1048D00002000F00E18171000000000000000000F4
-:1048E00002000F00E28171000000000000000000E3
-:1048F00002000F00E38171000000000000000000D2
-:1049000002000F00E48171000000000000000000C0
-:1049100002000F00E58171000000000000000000AF
-:1049200002000F00E681710000000000000000009E
-:1049300002000F00E781710000000000000000008D
-:1049400002000F00E881710000000000000000007C
-:1049500002000F00E981710000000000000000006B
-:1049600002000F00EA81710000000000000000005A
-:1049700002000F00EB817100000000000000000049
-:1049800002000F00EC817100000000000000000038
-:1049900002000F00ED817100000000000000000027
-:1049A00002000F00EE817100000000000000000016
-:1049B00002000F00EF817100000000000000000005
-:1049C00002000F00F08171000000000000000000F4
-:1049D00002000F00F18171000000000000000000E3
-:1049E00002000F00F28171000000000000000000D2
-:1049F00002000F00F38171000000000000000000C1
-:104A000002000F00F48171000000000000000000AF
-:104A100002000F00F581710000000000000000009E
-:104A200002000F00F681710000000000000000008D
-:104A300002000F00F781710000000000000000007C
-:104A400002000F00F881710000000000000000006B
-:104A500002000F00F981710000000000000000005A
-:104A600002000F00FA817100000000000000000049
-:104A700002000F00FB817100000000000000000038
-:104A800002000F00FC817100000000000000000027
-:104A900002000F00FD817100000000000000000016
-:104AA00002000F00FE8171003F000000030280DD64
-:104AB00002000F00FF81710049000000023B84D119
-:104AC00002000F000082710049000000033B00DD7E
-:104AD00002000F0001827100690000007A3B00DDD6
-:104AE00002000F000282710049000000793B00DDE6
-:104AF00002000F000382710065000000630280F174
-:104B000002000F000482710018000000763B7D7DDA
-:104B100002000F0005827100090000007A3D81CF7C
-:104B200002000F000682710000000000000000007B
-:104B300002000F000782710000000000000000006A
-:104B400002000F0008827100000000000000000059
-:104B500002000F0009827100000000000000000048
-:104B600002000F000A827100000000000000000037
-:104B700002000F000B827100000000000000000026
-:104B800002000F000C827100000000000000000015
-:104B900002000F000D827100000000000000000004
-:104BA00002000F000E8271000000000000000000F3
-:104BB00002000F000F8271000000000000000000E2
-:104BC00002000F00108271000000000000000000D1
-:104BD00002000F00118271000000000000000000C0
-:104BE00002000F00128271000000000000000000AF
-:104BF00002000F001382710000000000000000009E
-:104C000002000F001482710000000000000000008C
-:104C100002000F001582710000000000000000007B
-:104C200002000F001682710000000000000000006A
-:104C300002000F0017827100000000000000000059
-:104C400002000F0018827100000000000000000048
-:104C500002000F0019827100000000000000000037
-:104C600002000F001A827100000000000000000026
-:104C700002000F001B827100000000000000000015
-:104C800002000F001C827100000000000000000004
-:104C900002000F001D8271000000000000000000F3
-:104CA00002000F001E8271000000000000000000E2
-:104CB00002000F001F8271000000000000000000D1
-:104CC00002000F00208271000000000000000000C0
-:104CD00002000F00218271000000000000000000AF
-:104CE00002000F002282710000000000000000009E
-:104CF00002000F002382710000000000000000008D
-:104D000002000F002482710000000000000000007B
-:104D100002000F002582710000000000000000006A
-:104D200002000F0026827100000000000000000059
-:104D300002000F0027827100000000000000000048
-:104D400002000F0028827100000000000000000037
-:104D500002000F0029827100000000000000000026
-:104D600002000F002A827100000000000000000015
-:104D700002000F002B827100000000000000000004
-:104D800002000F002C8271000000000000000000F3
-:104D900002000F002D8271000000000000000000E2
-:104DA00002000F002E8271000000000000000000D1
-:104DB00002000F002F8271000000000000000000C0
-:104DC00002000F00308271000000000000000000AF
-:104DD00002000F003182710000000000000000009E
-:104DE00002000F003282710000000000000000008D
-:104DF00002000F003382710000000000000000007C
-:104E000002000F003482710000000000000000006A
-:104E100002000F0035827100000000000000000059
-:104E200002000F0036827100000000000000000048
-:104E300002000F0037827100000000000000000037
-:104E400002000F0038827100000000000000000026
-:104E500002000F0039827100000000000000000015
-:104E600002000F003A827100000000000000000004
-:104E700002000F003B8271000000000000000000F3
-:104E800002000F003C8271000000000000000000E2
-:104E900002000F003D8271000000000000000000D1
-:104EA00002000F003E8271000000000000000000C0
-:104EB00002000F003F8271000000000000000000AF
-:104EC00002000F004082710000000000000000009E
-:104ED00002000F004182710000000000000000008D
-:104EE00002000F004282710000000000000000007C
-:104EF00002000F004382710000000000000000006B
-:104F000002000F0044827100000000000000000059
-:104F100002000F0045827100000000000000000048
-:104F200002000F0046827100000000000000000037
-:104F300002000F0047827100000000000000000026
-:104F400002000F0048827100000000000000000015
-:104F500002000F0049827100000000000000000004
-:104F600002000F004A8271000000000000000000F3
-:104F700002000F004B8271000000000000000000E2
-:104F800002000F004C8271000000000000000000D1
-:104F900002000F004D8271000000000000000000C0
-:104FA00002000F004E8271000000000000000000AF
-:104FB00002000F004F82710000000000000000009E
-:104FC00002000F005082710000000000000000008D
-:104FD00002000F005182710000000000000000007C
-:104FE00002000F005282710000000000000000006B
-:104FF00002000F005382710000000000000000005A
-:1050000002000F0054827100000000000000000048
-:1050100002000F0055827100000000000000000037
-:1050200002000F0056827100000000000000000026
-:1050300002000F0057827100000000000000000015
-:1050400002000F0058827100000000000000000004
-:1050500002000F00598271000000000000000000F3
-:1050600002000F005A8271000000000000000000E2
-:1050700002000F005B8271000000000000000000D1
-:1050800002000F005C8271000000000000000000C0
-:1050900002000F005D8271000000000000000000AF
-:1050A00002000F005E82710000000000000000009E
-:1050B00002000F005F82710000000000000000008D
-:1050C00002000F006082710000000000000000007C
-:1050D00002000F006182710000000000000000006B
-:1050E00002000F006282710000000000000000005A
-:1050F00002000F0063827100000000000000000049
-:1051000002000F0064827100000000000000000037
-:1051100002000F0065827100000000000000000026
-:1051200002000F0066827100000000000000000015
-:1051300002000F0067827100000000000000000004
-:1051400002000F00688271000000000000000000F3
-:1051500002000F00698271000000000000000000E2
-:1051600002000F006A8271000000000000000000D1
-:1051700002000F006B8271000000000000000000C0
-:1051800002000F006C8271000000000000000000AF
-:1051900002000F006D82710000000000000000009E
-:1051A00002000F006E82710000000000000000008D
-:1051B00002000F006F82710000000000000000007C
-:1051C00002000F007082710000000000000000006B
-:1051D00002000F007182710000000000000000005A
-:1051E00002000F0072827100000000000000000049
-:1051F00002000F0073827100000000000000000038
-:1052000002000F0074827100000000000000000026
-:1052100002000F0075827100000000000000000015
-:1052200002000F0076827100000000000000000004
-:1052300002000F00778271000000000000000000F3
-:1052400002000F00788271000000000000000000E2
-:1052500002000F00798271000000000000000000D1
-:1052600002000F007A8271000000000000000000C0
-:1052700002000F007B8271000000000000000000AF
-:1052800002000F007C82710000000000000000009E
-:1052900002000F007D82710000000000000000008D
-:1052A00002000F007E82710000000000000000007C
-:1052B00002000F007F82710000000000000000006B
-:1052C00002000F008082710000000000000000005A
-:1052D00002000F0081827100000000000000000049
-:1052E00002000F0082827100000000000000000038
-:1052F00002000F0083827100000000000000000027
-:1053000002000F0084827100000000000000000015
-:1053100002000F0085827100000000000000000004
-:1053200002000F00868271000000000000000000F3
-:1053300002000F00878271000000000000000000E2
-:1053400002000F00888271000000000000000000D1
-:1053500002000F00898271000000000000000000C0
-:1053600002000F008A8271000000000000000000AF
-:1053700002000F008B82710000000000000000009E
-:1053800002000F008C82710000000000000000008D
-:1053900002000F008D82710000000000000000007C
-:1053A00002000F008E82710000000000000000006B
-:1053B00002000F008F82710000000000000000005A
-:1053C00002000F0090827100000000000000000049
-:1053D00002000F0091827100000000000000000038
-:1053E00002000F0092827100000000000000000027
-:1053F00002000F0093827100000000000000000016
-:1054000002000F0094827100000000000000000004
-:1054100002000F00958271000000000000000000F3
-:1054200002000F00968271000000000000000000E2
-:1054300002000F00978271000000000000000000D1
-:1054400002000F00988271000000000000000000C0
-:1054500002000F00998271000000000000000000AF
-:1054600002000F009A82710000000000000000009E
-:1054700002000F009B82710000000000000000008D
-:1054800002000F009C82710000000000000000007C
-:1054900002000F009D82710000000000000000006B
-:1054A00002000F009E82710000000000000000005A
-:1054B00002000F009F827100000000000000000049
-:1054C00002000F00A0827100000000000000000038
-:1054D00002000F00A1827100000000000000000027
-:1054E00002000F00A2827100000000000000000016
-:1054F00002000F00A3827100000000000000000005
-:1055000002000F00A48271000000000000000000F3
-:1055100002000F00A58271000000000000000000E2
-:1055200002000F00A68271000000000000000000D1
-:1055300002000F00A78271000000000000000000C0
-:1055400002000F00A88271000000000000000000AF
-:1055500002000F00A982710000000000000000009E
-:1055600002000F00AA82710000000000000000008D
-:1055700002000F00AB82710000000000000000007C
-:1055800002000F00AC82710000000000000000006B
-:1055900002000F00AD82710000000000000000005A
-:1055A00002000F00AE827100000000000000000049
-:1055B00002000F00AF827100000000000000000038
-:1055C00002000F00B0827100000000000000000027
-:1055D00002000F00B1827100000000000000000016
-:1055E00002000F00B2827100000000000000000005
-:1055F00002000F00B38271000000000000000000F4
-:1056000002000F00B48271000000000000000000E2
-:1056100002000F00B58271000000000000000000D1
-:1056200002000F00B68271000000000000000000C0
-:1056300002000F00B78271000000000000000000AF
-:1056400002000F00B882710000000000000000009E
-:1056500002000F00B982710000000000000000008D
-:1056600002000F00BA82710000000000000000007C
-:1056700002000F00BB82710000000000000000006B
-:1056800002000F00BC82710000000000000000005A
-:1056900002000F00BD827100000000000000000049
-:1056A00002000F00BE827100000000000000000038
-:1056B00002000F00BF827100000000000000000027
-:1056C00002000F00C0827100000000000000000016
-:1056D00002000F00C1827100000000000000000005
-:1056E00002000F00C28271000000000000000000F4
-:1056F00002000F00C38271000000000000000000E3
-:1057000002000F00C48271000000000000000000D1
-:1057100002000F00C58271000000000000000000C0
-:1057200002000F00C68271000000000000000000AF
-:1057300002000F00C782710000000000000000009E
-:1057400002000F00C882710000000000000000008D
-:1057500002000F00C982710000000000000000007C
-:1057600002000F00CA82710000000000000000006B
-:1057700002000F00CB82710000000000000000005A
-:1057800002000F00CC827100000000000000000049
-:1057900002000F00CD827100000000000000000038
-:1057A00002000F00CE827100000000000000000027
-:1057B00002000F00CF827100000000000000000016
-:1057C00002000F00D0827100000000000000000005
-:1057D00002000F00D18271000000000000000000F4
-:1057E00002000F00D28271000000000000000000E3
-:1057F00002000F00D38271000000000000000000D2
-:1058000002000F00D48271000000000000000000C0
-:1058100002000F00D58271000000000000000000AF
-:1058200002000F00D682710000000000000000009E
-:1058300002000F00D782710000000000000000008D
-:1058400002000F00D882710000000000000000007C
-:1058500002000F00D982710000000000000000006B
-:1058600002000F00DA82710000000000000000005A
-:1058700002000F00DB827100000000000000000049
-:1058800002000F00DC827100000000000000000038
-:1058900002000F00DD827100000000000000000027
-:1058A00002000F00DE827100000000000000000016
-:1058B00002000F00DF827100000000000000000005
-:1058C00002000F00E08271000000000000000000F4
-:1058D00002000F00E18271000000000000000000E3
-:1058E00002000F00E28271000000000000000000D2
-:1058F00002000F00E38271000000000000000000C1
-:1059000002000F00E48271000000000000000000AF
-:1059100002000F00E582710000000000000000009E
-:1059200002000F00E682710000000000000000008D
-:1059300002000F00E782710000000000000000007C
-:1059400002000F00E882710000000000000000006B
-:1059500002000F00E982710000000000000000005A
-:1059600002000F00EA827100000000000000000049
-:1059700002000F00EB827100000000000000000038
-:1059800002000F00EC827100000000000000000027
-:1059900002000F00ED827100000000000000000016
-:1059A00002000F00EE827100000000000000000005
-:1059B00002000F00EF8271000000000000000000F4
-:1059C00002000F00F08271000000000000000000E3
-:1059D00002000F00F18271000000000000000000D2
-:1059E00002000F00F28271000000000000000000C1
-:1059F00002000F00F38271000000000000000000B0
-:105A000002000F00F482710000000000000000009E
-:105A100002000F00F582710000000000000000008D
-:105A200002000F00F682710000000000000000007C
-:105A300002000F00F782710000000000000000006B
-:105A400002000F00F882710000000000000000005A
-:105A500002000F00F9827100000000000000000049
-:105A600002000F00FA827100000000000000000038
-:105A700002000F00FB827100000000000000000027
-:105A800002000F00FC827100000000000000000016
-:105A900002000F00FD827100000000000000000005
-:105AA00002000F00FE8271000000000000000000F4
-:105AB00002000F00FF8271000000000000000000E3
-:105AC00002000F00008371000000000000000000D1
-:105AD00002000F00018371000000000000000000C0
-:105AE00002000F00028371000000000000000000AF
-:105AF00002000F000383710000000000000000009E
-:105B000002000F000483710000000000000000008C
-:105B100002000F000583710000000000000000007B
-:105B200002000F000683710000000000000000006A
-:105B300002000F0007837100000000000000000059
-:105B400002000F0008837100000000000000000048
-:105B500002000F0009837100000000000000000037
-:105B600002000F000A837100000000000000000026
-:105B700002000F000B837100000000000000000015
-:105B800002000F000C837100000000000000000004
-:105B900002000F000D8371000000000000000000F3
-:105BA00002000F000E8371000000000000000000E2
-:105BB00002000F000F8371000000000000000000D1
-:105BC00002000F00108371000000000000000000C0
-:105BD00002000F00118371000000000000000000AF
-:105BE00002000F001283710000000000000000009E
-:105BF00002000F001383710000000000000000008D
-:105C000002000F001483710000000000000000007B
-:105C100002000F001583710000000000000000006A
-:105C200002000F0016837100000000000000000059
-:105C300002000F0017837100000000000000000048
-:105C400002000F0018837100000000000000000037
-:105C500002000F0019837100000000000000000026
-:105C600002000F001A837100000000000000000015
-:105C700002000F001B837100000000000000000004
-:105C800002000F001C8371000000000000000000F3
-:105C900002000F001D8371000000000000000000E2
-:105CA00002000F001E8371000000000000000000D1
-:105CB00002000F001F8371000000000000000000C0
-:105CC00002000F00208371000000000000000000AF
-:105CD00002000F002183710000000000000000009E
-:105CE00002000F002283710000000000000000008D
-:105CF00002000F002383710000000000000000007C
-:105D000002000F002483710000000000000000006A
-:105D100002000F0025837100000000000000000059
-:105D200002000F0026837100000000000000000048
-:105D300002000F0027837100000000000000000037
-:105D400002000F0028837100000000000000000026
-:105D500002000F0029837100000000000000000015
-:105D600002000F002A837100000000000000000004
-:105D700002000F002B8371000000000000000000F3
-:105D800002000F002C8371000000000000000000E2
-:105D900002000F002D8371000000000000000000D1
-:105DA00002000F002E8371000000000000000000C0
-:105DB00002000F002F8371000000000000000000AF
-:105DC00002000F003083710000000000000000009E
-:105DD00002000F003183710000000000000000008D
-:105DE00002000F003283710000000000000000007C
-:105DF00002000F003383710000000000000000006B
-:105E000002000F0034837100000000000000000059
-:105E100002000F0035837100000000000000000048
-:105E200002000F0036837100000000000000000037
-:105E300002000F0037837100000000000000000026
-:105E400002000F0038837100000000000000000015
-:105E500002000F0039837100000000000000000004
-:105E600002000F003A8371000000000000000000F3
-:105E700002000F003B8371000000000000000000E2
-:105E800002000F003C8371000000000000000000D1
-:105E900002000F003D8371000000000000000000C0
-:105EA00002000F003E8371000000000000000000AF
-:105EB00002000F003F83710000000000000000009E
-:105EC00002000F004083710000000000000000008D
-:105ED00002000F004183710000000000000000007C
-:105EE00002000F004283710000000000000000006B
-:105EF00002000F004383710000000000000000005A
-:105F000002000F0044837100000000000000000048
-:105F100002000F0045837100000000000000000037
-:105F200002000F0046837100000000000000000026
-:105F300002000F0047837100000000000000000015
-:105F400002000F0048837100000000000000000004
-:105F500002000F00498371000000000000000000F3
-:105F600002000F004A8371000000000000000000E2
-:105F700002000F004B8371000000000000000000D1
-:105F800002000F004C8371000000000000000000C0
-:105F900002000F004D8371000000000000000000AF
-:105FA00002000F004E83710000000000000000009E
-:105FB00002000F004F83710000000000000000008D
-:105FC00002000F005083710000000000000000007C
-:105FD00002000F005183710000000000000000006B
-:105FE00002000F005283710000000000000000005A
-:105FF00002000F0053837100000000000000000049
-:1060000002000F0054837100000000000000000037
-:1060100002000F0055837100000000000000000026
-:1060200002000F0056837100000000000000000015
-:1060300002000F0057837100000000000000000004
-:1060400002000F00588371000000000000000000F3
-:1060500002000F00598371000000000000000000E2
-:1060600002000F005A8371000000000000000000D1
-:1060700002000F005B8371000000000000000000C0
-:1060800002000F005C8371000000000000000000AF
-:1060900002000F005D83710000000000000000009E
-:1060A00002000F005E83710000000000000000008D
-:1060B00002000F005F83710000000000000000007C
-:1060C00002000F006083710000000000000000006B
-:1060D00002000F006183710000000000000000005A
-:1060E00002000F0062837100000000000000000049
-:1060F00002000F0063837100000000000000000038
-:1061000002000F0064837100000000000000000026
-:1061100002000F0065837100000000000000000015
-:1061200002000F0066837100000000000000000004
-:1061300002000F00678371000000000000000000F3
-:1061400002000F00688371000000000000000000E2
-:1061500002000F00698371000000000000000000D1
-:1061600002000F006A8371000000000000000000C0
-:1061700002000F006B8371000000000000000000AF
-:1061800002000F006C83710000000000000000009E
-:1061900002000F006D83710000000000000000008D
-:1061A00002000F006E83710000000000000000007C
-:1061B00002000F006F83710000000000000000006B
-:1061C00002000F007083710000000000000000005A
-:1061D00002000F0071837100000000000000000049
-:1061E00002000F0072837100000000000000000038
-:1061F00002000F0073837100000000000000000027
-:1062000002000F0074837100000000000000000015
-:1062100002000F0075837100000000000000000004
-:1062200002000F00768371000000000000000000F3
-:1062300002000F00778371000000000000000000E2
-:1062400002000F00788371000000000000000000D1
-:1062500002000F00798371000000000000000000C0
-:1062600002000F007A8371000000000000000000AF
-:1062700002000F007B83710000000000000000009E
-:1062800002000F007C83710000000000000000008D
-:1062900002000F007D83710000000000000000007C
-:1062A00002000F007E83710000000000000000006B
-:1062B00002000F007F83710000000000000000005A
-:1062C00002000F0080837100000000000000000049
-:1062D00002000F0081837100000000000000000038
-:1062E00002000F0082837100000000000000000027
-:1062F00002000F0083837100000000000000000016
-:1063000002000F0084837100000000000000000004
-:1063100002000F00858371000000000000000000F3
-:1063200002000F00868371000000000000000000E2
-:1063300002000F00878371000000000000000000D1
-:1063400002000F00888371000000000000000000C0
-:1063500002000F00898371000000000000000000AF
-:1063600002000F008A83710000000000000000009E
-:1063700002000F008B83710000000000000000008D
-:1063800002000F008C83710000000000000000007C
-:1063900002000F008D83710000000000000000006B
-:1063A00002000F008E83710000000000000000005A
-:1063B00002000F008F837100000000000000000049
-:1063C00002000F0090837100000000000000000038
-:1063D00002000F0091837100000000000000000027
-:1063E00002000F0092837100000000000000000016
-:1063F00002000F0093837100000000000000000005
-:1064000002000F00948371000000000000000000F3
-:1064100002000F00958371000000000000000000E2
-:1064200002000F00968371000000000000000000D1
-:1064300002000F00978371000000000000000000C0
-:1064400002000F00988371000000000000000000AF
-:1064500002000F009983710000000000000000009E
-:1064600002000F009A83710000000000000000008D
-:1064700002000F009B83710000000000000000007C
-:1064800002000F009C83710000000000000000006B
-:1064900002000F009D83710000000000000000005A
-:1064A00002000F009E837100000000000000000049
-:1064B00002000F009F837100000000000000000038
-:1064C00002000F00A0837100000000000000000027
-:1064D00002000F00A1837100000000000000000016
-:1064E00002000F00A2837100000000000000000005
-:1064F00002000F00A38371000000000000000000F4
-:1065000002000F00A48371000000000000000000E2
-:1065100002000F00A58371000000000000000000D1
-:1065200002000F00A68371000000000000000000C0
-:1065300002000F00A78371000000000000000000AF
-:1065400002000F00A883710000000000000000009E
-:1065500002000F00A983710000000000000000008D
-:1065600002000F00AA83710000000000000000007C
-:1065700002000F00AB83710000000000000000006B
-:1065800002000F00AC83710000000000000000005A
-:1065900002000F00AD837100000000000000000049
-:1065A00002000F00AE837100000000000000000038
-:1065B00002000F00AF837100000000000000000027
-:1065C00002000F00B0837100000000000000000016
-:1065D00002000F00B1837100000000000000000005
-:1065E00002000F00B28371000000000000000000F4
-:1065F00002000F00B38371000000000000000000E3
-:1066000002000F00B48371000000000000000000D1
-:1066100002000F00B58371000000000000000000C0
-:1066200002000F00B68371000000000000000000AF
-:1066300002000F00B783710000000000000000009E
-:1066400002000F00B883710000000000000000008D
-:1066500002000F00B983710000000000000000007C
-:1066600002000F00BA83710000000000000000006B
-:1066700002000F00BB83710000000000000000005A
-:1066800002000F00BC837100000000000000000049
-:1066900002000F00BD837100000000000000000038
-:1066A00002000F00BE837100000000000000000027
-:1066B00002000F00BF837100000000000000000016
-:1066C00002000F00C0837100000000000000000005
-:1066D00002000F00C18371000000000000000000F4
-:1066E00002000F00C28371000000000000000000E3
-:1066F00002000F00C38371000000000000000000D2
-:1067000002000F00C48371000000000000000000C0
-:1067100002000F00C58371000000000000000000AF
-:1067200002000F00C683710000000000000000009E
-:1067300002000F00C783710000000000000000008D
-:1067400002000F00C883710000000000000000007C
-:1067500002000F00C983710000000000000000006B
-:1067600002000F00CA83710000000000000000005A
-:1067700002000F00CB837100000000000000000049
-:1067800002000F00CC837100000000000000000038
-:1067900002000F00CD837100000000000000000027
-:1067A00002000F00CE837100000000000000000016
-:1067B00002000F00CF837100000000000000000005
-:1067C00002000F00D08371000000000000000000F4
-:1067D00002000F00D18371000000000000000000E3
-:1067E00002000F00D28371000000000000000000D2
-:1067F00002000F00D38371000000000000000000C1
-:1068000002000F00D48371000000000000000000AF
-:1068100002000F00D583710000000000000000009E
-:1068200002000F00D683710000000000000000008D
-:1068300002000F00D783710000000000000000007C
-:1068400002000F00D883710000000000000000006B
-:1068500002000F00D983710000000000000000005A
-:1068600002000F00DA837100000000000000000049
-:1068700002000F00DB837100000000000000000038
-:1068800002000F00DC837100000000000000000027
-:1068900002000F00DD837100000000000000000016
-:1068A00002000F00DE837100000000000000000005
-:1068B00002000F00DF8371000000000000000000F4
-:1068C00002000F00E08371000000000000000000E3
-:1068D00002000F00E18371000000000000000000D2
-:1068E00002000F00E28371000000000000000000C1
-:1068F00002000F00E38371000000000000000000B0
-:1069000002000F00E483710000000000000000009E
-:1069100002000F00E583710000000000000000008D
-:1069200002000F00E683710000000000000000007C
-:1069300002000F00E783710000000000000000006B
-:1069400002000F00E883710000000000000000005A
-:1069500002000F00E9837100000000000000000049
-:1069600002000F00EA837100000000000000000038
-:1069700002000F00EB837100000000000000000027
-:1069800002000F00EC837100000000000000000016
-:1069900002000F00ED837100000000000000000005
-:1069A00002000F00EE8371000000000000000000F4
-:1069B00002000F00EF8371000000000000000000E3
-:1069C00002000F00F08371000000000000000000D2
-:1069D00002000F00F18371000000000000000000C1
-:1069E00002000F00F28371000000000000000000B0
-:1069F00002000F00F383710000000000000000009F
-:106A000002000F00F483710000000000000000008D
-:106A100002000F00F583710000000000000000007C
-:106A200002000F00F683710000000000000000006B
-:106A300002000F00F783710000000000000000005A
-:106A400002000F00F8837100000000000000000049
-:106A500002000F00F9837100000000000000000038
-:106A600002000F00FA837100000000000000000027
-:106A700002000F00FB837100000000000000000016
-:106A800002000F00FC837100000000000000000005
-:106A900002000F00FD8371000000000000000000F4
-:106AA00002000F00FE8371000000000000000000E3
-:106AB00002000F00FF8371000000000000000000D2
-:106AC00002000F00008471000000000000000000C0
-:106AD00002000F00018471000000000000000000AF
-:106AE00002000F000284710000000000000000009E
-:106AF00002000F000384710000000000000000008D
-:106B000002000F000484710000000000000000007B
-:106B100002000F000584710000000000000000006A
-:106B200002000F0006847100000000000000000059
-:106B300002000F0007847100000000000000000048
-:106B400002000F0008847100000000000000000037
-:106B500002000F0009847100000000000000000026
-:106B600002000F000A847100000000000000000015
-:106B700002000F000B847100000000000000000004
-:106B800002000F000C8471000000000000000000F3
-:106B900002000F000D8471000000000000000000E2
-:106BA00002000F000E8471000000000000000000D1
-:106BB00002000F000F8471000000000000000000C0
-:106BC00002000F00108471000000000000000000AF
-:106BD00002000F001184710000000000000000009E
-:106BE00002000F001284710000000000000000008D
-:106BF00002000F001384710000000000000000007C
-:106C000002000F001484710000000000000000006A
-:106C100002000F0015847100000000000000000059
-:106C200002000F0016847100000000000000000048
-:106C300002000F0017847100000000000000000037
-:106C400002000F0018847100000000000000000026
-:106C500002000F0019847100000000000000000015
-:106C600002000F001A847100000000000000000004
-:106C700002000F001B8471000000000000000000F3
-:106C800002000F001C8471000000000000000000E2
-:106C900002000F001D8471000000000000000000D1
-:106CA00002000F001E8471000000000000000000C0
-:106CB00002000F001F8471000000000000000000AF
-:106CC00002000F002084710000000000000000009E
-:106CD00002000F002184710000000000000000008D
-:106CE00002000F002284710000000000000000007C
-:106CF00002000F002384710000000000000000006B
-:106D000002000F0024847100000000000000000059
-:106D100002000F0025847100000000000000000048
-:106D200002000F0026847100000000000000000037
-:106D300002000F0027847100000000000000000026
-:106D400002000F0028847100000000000000000015
-:106D500002000F0029847100000000000000000004
-:106D600002000F002A8471000000000000000000F3
-:106D700002000F002B8471000000000000000000E2
-:106D800002000F002C8471000000000000000000D1
-:106D900002000F002D8471000000000000000000C0
-:106DA00002000F002E8471000000000000000000AF
-:106DB00002000F002F84710000000000000000009E
-:106DC00002000F003084710000000000000000008D
-:106DD00002000F003184710000000000000000007C
-:106DE00002000F003284710000000000000000006B
-:106DF00002000F003384710000000000000000005A
-:106E000002000F0034847100000000000000000048
-:106E100002000F0035847100000000000000000037
-:106E200002000F0036847100000000000000000026
-:106E300002000F0037847100000000000000000015
-:106E400002000F0038847100000000000000000004
-:106E500002000F00398471000000000000000000F3
-:106E600002000F003A8471000000000000000000E2
-:106E700002000F003B8471000000000000000000D1
-:106E800002000F003C8471000000000000000000C0
-:106E900002000F003D8471000000000000000000AF
-:106EA00002000F003E84710000000000000000009E
-:106EB00002000F003F84710000000000000000008D
-:106EC00002000F004084710000000000000000007C
-:106ED00002000F004184710000000000000000006B
-:106EE00002000F004284710000000000000000005A
-:106EF00002000F0043847100000000000000000049
-:106F000002000F0044847100000000000000000037
-:106F100002000F0045847100000000000000000026
-:106F200002000F0046847100000000000000000015
-:106F300002000F0047847100000000000000000004
-:106F400002000F00488471000000000000000000F3
-:106F500002000F00498471000000000000000000E2
-:106F600002000F004A8471000000000000000000D1
-:106F700002000F004B8471000000000000000000C0
-:106F800002000F004C8471000000000000000000AF
-:106F900002000F004D84710000000000000000009E
-:106FA00002000F004E84710000000000000000008D
-:106FB00002000F004F84710000000000000000007C
-:106FC00002000F005084710000000000000000006B
-:106FD00002000F005184710000000000000000005A
-:106FE00002000F0052847100000000000000000049
-:106FF00002000F0053847100000000000000000038
-:1070000002000F0054847100000000000000000026
-:1070100002000F0055847100000000000000000015
-:1070200002000F0056847100000000000000000004
-:1070300002000F00578471000000000000000000F3
-:1070400002000F00588471000000000000000000E2
-:1070500002000F00598471000000000000000000D1
-:1070600002000F005A8471000000000000000000C0
-:1070700002000F005B8471000000000000000000AF
-:1070800002000F005C84710000000000000000009E
-:1070900002000F005D84710000000000000000008D
-:1070A00002000F005E84710000000000000000007C
-:1070B00002000F005F84710000000000000000006B
-:1070C00002000F006084710000000000000000005A
-:1070D00002000F0061847100000000000000000049
-:1070E00002000F0062847100000000000000000038
-:1070F00002000F0063847100000000000000000027
-:1071000002000F0064847100000000000000000015
-:1071100002000F0065847100000000000000000004
-:1071200002000F00668471000000000000000000F3
-:1071300002000F00678471000000000000000000E2
-:1071400002000F00688471000000000000000000D1
-:1071500002000F00698471000000000000000000C0
-:1071600002000F006A8471000000000000000000AF
-:1071700002000F006B84710000000000000000009E
-:1071800002000F006C84710000000000000000008D
-:1071900002000F006D84710000000000000000007C
-:1071A00002000F006E84710000000000000000006B
-:1071B00002000F006F84710000000000000000005A
-:1071C00002000F0070847100000000000000000049
-:1071D00002000F0071847100000000000000000038
-:1071E00002000F0072847100000000000000000027
-:1071F00002000F0073847100000000000000000016
-:1072000002000F0074847100000000000000000004
-:1072100002000F00758471000000000000000000F3
-:1072200002000F00768471000000000000000000E2
-:1072300002000F00778471000000000000000000D1
-:1072400002000F00788471000000000000000000C0
-:1072500002000F00798471000000000000000000AF
-:1072600002000F007A84710000000000000000009E
-:1072700002000F007B84710000000000000000008D
-:1072800002000F007C84710000000000000000007C
-:1072900002000F007D84710000000000000000006B
-:1072A00002000F007E84710000000000000000005A
-:1072B00002000F007F847100000000000000000049
-:1072C00002000F0080847100000000000000000038
-:1072D00002000F0081847100000000000000000027
-:1072E00002000F0082847100000000000000000016
-:1072F00002000F0083847100000000000000000005
-:1073000002000F00848471000000000000000000F3
-:1073100002000F00858471000000000000000000E2
-:1073200002000F00868471000000000000000000D1
-:1073300002000F00878471000000000000000000C0
-:1073400002000F00888471000000000000000000AF
-:1073500002000F008984710000000000000000009E
-:1073600002000F008A84710000000000000000008D
-:1073700002000F008B84710000000000000000007C
-:1073800002000F008C84710000000000000000006B
-:1073900002000F008D84710000000000000000005A
-:1073A00002000F008E847100000000000000000049
-:1073B00002000F008F847100000000000000000038
-:1073C00002000F0090847100000000000000000027
-:1073D00002000F0091847100000000000000000016
-:1073E00002000F0092847100000000000000000005
-:1073F00002000F00938471000000000000000000F4
-:1074000002000F00948471000000000000000000E2
-:1074100002000F00958471000000000000000000D1
-:1074200002000F00968471000000000000000000C0
-:1074300002000F00978471000000000000000000AF
-:1074400002000F009884710000000000000000009E
-:1074500002000F009984710000000000000000008D
-:1074600002000F009A84710000000000000000007C
-:1074700002000F009B84710000000000000000006B
-:1074800002000F009C84710000000000000000005A
-:1074900002000F009D847100000000000000000049
-:1074A00002000F009E847100000000000000000038
-:1074B00002000F009F847100000000000000000027
-:1074C00002000F00A0847100000000000000000016
-:1074D00002000F00A1847100000000000000000005
-:1074E00002000F00A28471000000000000000000F4
-:1074F00002000F00A38471000000000000000000E3
-:1075000002000F00A48471000000000000000000D1
-:1075100002000F00A58471000000000000000000C0
-:1075200002000F00A68471000000000000000000AF
-:1075300002000F00A784710000000000000000009E
-:1075400002000F00A884710000000000000000008D
-:1075500002000F00A984710000000000000000007C
-:1075600002000F00AA84710000000000000000006B
-:1075700002000F00AB84710000000000000000005A
-:1075800002000F00AC847100000000000000000049
-:1075900002000F00AD847100000000000000000038
-:1075A00002000F00AE847100000000000000000027
-:1075B00002000F00AF847100000000000000000016
-:1075C00002000F00B0847100000000000000000005
-:1075D00002000F00B18471000000000000000000F4
-:1075E00002000F00B28471000000000000000000E3
-:1075F00002000F00B38471000000000000000000D2
-:1076000002000F00B48471000000000000000000C0
-:1076100002000F00B58471000000000000000000AF
-:1076200002000F00B684710000000000000000009E
-:1076300002000F00B784710000000000000000008D
-:1076400002000F00B884710000000000000000007C
-:1076500002000F00B984710000000000000000006B
-:1076600002000F00BA84710000000000000000005A
-:1076700002000F00BB847100000000000000000049
-:1076800002000F00BC847100000000000000000038
-:1076900002000F00BD847100000000000000000027
-:1076A00002000F00BE847100000000000000000016
-:1076B00002000F00BF847100000000000000000005
-:1076C00002000F00C08471000000000000000000F4
-:1076D00002000F00C18471000000000000000000E3
-:1076E00002000F00C28471000000000000000000D2
-:1076F00002000F00C38471000000000000000000C1
-:1077000002000F00C48471000000000000000000AF
-:1077100002000F00C584710000000000000000009E
-:1077200002000F00C684710000000000000000008D
-:1077300002000F00C784710000000000000000007C
-:1077400002000F00C884710000000000000000006B
-:1077500002000F00C984710000000000000000005A
-:1077600002000F00CA847100000000000000000049
-:1077700002000F00CB847100000000000000000038
-:1077800002000F00CC847100000000000000000027
-:1077900002000F00CD847100000000000000000016
-:1077A00002000F00CE847100000000000000000005
-:1077B00002000F00CF8471000000000000000000F4
-:1077C00002000F00D08471000000000000000000E3
-:1077D00002000F00D18471000000000000000000D2
-:1077E00002000F00D28471000000000000000000C1
-:1077F00002000F00D38471000000000000000000B0
-:1078000002000F00D484710000000000000000009E
-:1078100002000F00D584710000000000000000008D
-:1078200002000F00D684710000000000000000007C
-:1078300002000F00D784710000000000000000006B
-:1078400002000F00D884710000000000000000005A
-:1078500002000F00D9847100000000000000000049
-:1078600002000F00DA847100000000000000000038
-:1078700002000F00DB847100000000000000000027
-:1078800002000F00DC847100000000000000000016
-:1078900002000F00DD847100000000000000000005
-:1078A00002000F00DE8471000000000000000000F4
-:1078B00002000F00DF8471000000000000000000E3
-:1078C00002000F00E08471000000000000000000D2
-:1078D00002000F00E18471000000000000000000C1
-:1078E00002000F00E28471000000000000000000B0
-:1078F00002000F00E384710000000000000000009F
-:1079000002000F00E484710000000000000000008D
-:1079100002000F00E584710000000000000000007C
-:1079200002000F00E684710000000000000000006B
-:1079300002000F00E784710000000000000000005A
-:1079400002000F00E8847100000000000000000049
-:1079500002000F00E9847100000000000000000038
-:1079600002000F00EA847100000000000000000027
-:1079700002000F00EB847100000000000000000016
-:1079800002000F00EC847100000000000000000005
-:1079900002000F00ED8471000000000000000000F4
-:1079A00002000F00EE8471000000000000000000E3
-:1079B00002000F00EF8471000000000000000000D2
-:1079C00002000F00F08471000000000000000000C1
-:1079D00002000F00F18471000000000000000000B0
-:1079E00002000F00F284710000000000000000009F
-:1079F00002000F00F384710000000000000000008E
-:107A000002000F00F484710000000000000000007C
-:107A100002000F00F584710000000000000000006B
-:107A200002000F00F684710000000000000000005A
-:107A300002000F00F7847100000000000000000049
-:107A400002000F00F8847100000000000000000038
-:107A500002000F00F9847100000000000000000027
-:107A600002000F00FA847100000000000000000016
-:107A700002000F00FB847100000000000000000005
-:107A800002000F00FC8471000000000000000000F4
-:107A900002000F00FD8471000000000000000000E3
-:107AA00002000F00FE8471000000000000000000D2
-:107AB00002000F00FF8471000000000000000000C1
-:107AC00002000F00008571000000000000000000AF
-:107AD00002000F000185710000000000000000009E
-:107AE00002000F000285710000000000000000008D
-:107AF00002000F000385710000000000000000007C
-:107B000002000F000485710000000000000000006A
-:107B100002000F0005857100000000000000000059
-:107B200002000F0006857100000000000000000048
-:107B300002000F0007857100000000000000000037
-:107B400002000F0008857100000000000000000026
-:107B500002000F0009857100000000000000000015
-:107B600002000F000A857100000000000000000004
-:107B700002000F000B8571000000000000000000F3
-:107B800002000F000C8571000000000000000000E2
-:107B900002000F000D8571000000000000000000D1
-:107BA00002000F000E8571000000000000000000C0
-:107BB00002000F000F8571000000000000000000AF
-:107BC00002000F001085710000000000000000009E
-:107BD00002000F001185710000000000000000008D
-:107BE00002000F001285710000000000000000007C
-:107BF00002000F001385710000000000000000006B
-:107C000002000F0014857100000000000000000059
-:107C100002000F0015857100000000000000000048
-:107C200002000F0016857100000000000000000037
-:107C300002000F0017857100000000000000000026
-:107C400002000F0018857100000000000000000015
-:107C500002000F0019857100000000000000000004
-:107C600002000F001A8571000000000000000000F3
-:107C700002000F001B8571000000000000000000E2
-:107C800002000F001C8571000000000000000000D1
-:107C900002000F001D8571000000000000000000C0
-:107CA00002000F001E8571000000000000000000AF
-:107CB00002000F001F85710000000000000000009E
-:107CC00002000F002085710000000000000000008D
-:107CD00002000F002185710000000000000000007C
-:107CE00002000F002285710000000000000000006B
-:107CF00002000F002385710000000000000000005A
-:107D000002000F0024857100000000000000000048
-:107D100002000F0025857100000000000000000037
-:107D200002000F0026857100000000000000000026
-:107D300002000F0027857100000000000000000015
-:107D400002000F0028857100000000000000000004
-:107D500002000F00298571000000000000000000F3
-:107D600002000F002A8571000000000000000000E2
-:107D700002000F002B8571000000000000000000D1
-:107D800002000F002C8571000000000000000000C0
-:107D900002000F002D8571000000000000000000AF
-:107DA00002000F002E85710000000000000000009E
-:107DB00002000F002F85710000000000000000008D
-:107DC00002000F003085710000000000000000007C
-:107DD00002000F003185710000000000000000006B
-:107DE00002000F003285710000000000000000005A
-:107DF00002000F0033857100000000000000000049
-:107E000002000F0034857100000000000000000037
-:107E100002000F0035857100000000000000000026
-:107E200002000F0036857100000000000000000015
-:107E300002000F0037857100000000000000000004
-:107E400002000F00388571000000000000000000F3
-:107E500002000F00398571000000000000000000E2
-:107E600002000F003A8571000000000000000000D1
-:107E700002000F003B8571000000000000000000C0
-:107E800002000F003C8571000000000000000000AF
-:107E900002000F003D85710000000000000000009E
-:107EA00002000F003E85710000000000000000008D
-:107EB00002000F003F85710000000000000000007C
-:107EC00002000F004085710000000000000000006B
-:107ED00002000F004185710000000000000000005A
-:107EE00002000F0042857100000000000000000049
-:107EF00002000F0043857100000000000000000038
-:107F000002000F0044857100000000000000000026
-:107F100002000F0045857100000000000000000015
-:107F200002000F0046857100000000000000000004
-:107F300002000F00478571000000000000000000F3
-:107F400002000F00488571000000000000000000E2
-:107F500002000F00498571000000000000000000D1
-:107F600002000F004A8571000000000000000000C0
-:107F700002000F004B8571000000000000000000AF
-:107F800002000F004C85710000000000000000009E
-:107F900002000F004D85710000000000000000008D
-:107FA00002000F004E85710000000000000000007C
-:107FB00002000F004F85710000000000000000006B
-:107FC00002000F005085710000000000000000005A
-:107FD00002000F0051857100000000000000000049
-:107FE00002000F0052857100000000000000000038
-:107FF00002000F0053857100000000000000000027
-:1080000002000F0054857100000000000000000015
-:1080100002000F0055857100000000000000000004
-:1080200002000F00568571000000000000000000F3
-:1080300002000F00578571000000000000000000E2
-:1080400002000F00588571000000000000000000D1
-:1080500002000F00598571000000000000000000C0
-:1080600002000F005A8571000000000000000000AF
-:1080700002000F005B85710000000000000000009E
-:1080800002000F005C85710000000000000000008D
-:1080900002000F005D85710000000000000000007C
-:1080A00002000F005E85710000000000000000006B
-:1080B00002000F005F85710000000000000000005A
-:1080C00002000F0060857100000000000000000049
-:1080D00002000F0061857100000000000000000038
-:1080E00002000F0062857100000000000000000027
-:1080F00002000F0063857100000000000000000016
-:1081000002000F0064857100000000000000000004
-:1081100002000F00658571000000000000000000F3
-:1081200002000F00668571000000000000000000E2
-:1081300002000F00678571000000000000000000D1
-:1081400002000F00688571000000000000000000C0
-:1081500002000F00698571000000000000000000AF
-:1081600002000F006A85710000000000000000009E
-:1081700002000F006B85710000000000000000008D
-:1081800002000F006C85710000000000000000007C
-:1081900002000F006D85710000000000000000006B
-:1081A00002000F006E85710000000000000000005A
-:1081B00002000F006F857100000000000000000049
-:1081C00002000F0070857100000000000000000038
-:1081D00002000F0071857100000000000000000027
-:1081E00002000F0072857100000000000000000016
-:1081F00002000F0073857100000000000000000005
-:1082000002000F00748571000000000000000000F3
-:1082100002000F00758571000000000000000000E2
-:1082200002000F00768571000000000000000000D1
-:1082300002000F00778571000000000000000000C0
-:1082400002000F00788571000000000000000000AF
-:1082500002000F007985710000000000000000009E
-:1082600002000F007A85710000000000000000008D
-:1082700002000F007B85710000000000000000007C
-:1082800002000F007C85710000000000000000006B
-:1082900002000F007D85710000000000000000005A
-:1082A00002000F007E857100000000000000000049
-:1082B00002000F007F857100000000000000000038
-:1082C00002000F0080857100000000000000000027
-:1082D00002000F0081857100000000000000000016
-:1082E00002000F0082857100000000000000000005
-:1082F00002000F00838571000000000000000000F4
-:1083000002000F00848571000000000000000000E2
-:1083100002000F00858571000000000000000000D1
-:1083200002000F00868571000000000000000000C0
-:1083300002000F00878571000000000000000000AF
-:1083400002000F008885710000000000000000009E
-:1083500002000F008985710000000000000000008D
-:1083600002000F008A85710000000000000000007C
-:1083700002000F008B85710000000000000000006B
-:1083800002000F008C85710000000000000000005A
-:1083900002000F008D857100000000000000000049
-:1083A00002000F008E857100000000000000000038
-:1083B00002000F008F857100000000000000000027
-:1083C00002000F0090857100000000000000000016
-:1083D00002000F0091857100000000000000000005
-:1083E00002000F00928571000000000000000000F4
-:1083F00002000F00938571000000000000000000E3
-:1084000002000F00948571000000000000000000D1
-:1084100002000F00958571000000000000000000C0
-:1084200002000F00968571000000000000000000AF
-:1084300002000F009785710000000000000000009E
-:1084400002000F009885710000000000000000008D
-:1084500002000F009985710000000000000000007C
-:1084600002000F009A85710000000000000000006B
-:1084700002000F009B85710000000000000000005A
-:1084800002000F009C857100000000000000000049
-:1084900002000F009D857100000000000000000038
-:1084A00002000F009E857100000000000000000027
-:1084B00002000F009F857100000000000000000016
-:1084C00002000F00A0857100000000000000000005
-:1084D00002000F00A18571000000000000000000F4
-:1084E00002000F00A28571000000000000000000E3
-:1084F00002000F00A38571000000000000000000D2
-:1085000002000F00A48571000000000000000000C0
-:1085100002000F00A58571000000000000000000AF
-:1085200002000F00A685710000000000000000009E
-:1085300002000F00A785710000000000000000008D
-:1085400002000F00A885710000000000000000007C
-:1085500002000F00A985710000000000000000006B
-:1085600002000F00AA85710000000000000000005A
-:1085700002000F00AB857100000000000000000049
-:1085800002000F00AC857100000000000000000038
-:1085900002000F00AD857100000000000000000027
-:1085A00002000F00AE857100000000000000000016
-:1085B00002000F00AF857100000000000000000005
-:1085C00002000F00B08571000000000000000000F4
-:1085D00002000F00B18571000000000000000000E3
-:1085E00002000F00B28571000000000000000000D2
-:1085F00002000F00B38571000000000000000000C1
-:1086000002000F00B48571000000000000000000AF
-:1086100002000F00B585710000000000000000009E
-:1086200002000F00B685710000000000000000008D
-:1086300002000F00B785710000000000000000007C
-:1086400002000F00B885710000000000000000006B
-:1086500002000F00B985710000000000000000005A
-:1086600002000F00BA857100000000000000000049
-:1086700002000F00BB857100000000000000000038
-:1086800002000F00BC857100000000000000000027
-:1086900002000F00BD857100000000000000000016
-:1086A00002000F00BE857100000000000000000005
-:1086B00002000F00BF8571000000000000000000F4
-:1086C00002000F00C08571000000000000000000E3
-:1086D00002000F00C18571000000000000000000D2
-:1086E00002000F00C28571000000000000000000C1
-:1086F00002000F00C38571000000000000000000B0
-:1087000002000F00C485710000000000000000009E
-:1087100002000F00C585710000000000000000008D
-:1087200002000F00C685710000000000000000007C
-:1087300002000F00C785710000000000000000006B
-:1087400002000F00C885710000000000000000005A
-:1087500002000F00C9857100000000000000000049
-:1087600002000F00CA857100000000000000000038
-:1087700002000F00CB857100000000000000000027
-:1087800002000F00CC857100000000000000000016
-:1087900002000F00CD857100000000000000000005
-:1087A00002000F00CE8571000000000000000000F4
-:1087B00002000F00CF8571000000000000000000E3
-:1087C00002000F00D08571000000000000000000D2
-:1087D00002000F00D18571000000000000000000C1
-:1087E00002000F00D28571000000000000000000B0
-:1087F00002000F00D385710000000000000000009F
-:1088000002000F00D485710000000000000000008D
-:1088100002000F00D585710000000000000000007C
-:1088200002000F00D685710000000000000000006B
-:1088300002000F00D785710000000000000000005A
-:1088400002000F00D8857100000000000000000049
-:1088500002000F00D9857100000000000000000038
-:1088600002000F00DA857100000000000000000027
-:1088700002000F00DB857100000000000000000016
-:1088800002000F00DC857100000000000000000005
-:1088900002000F00DD8571000000000000000000F4
-:1088A00002000F00DE8571000000000000000000E3
-:1088B00002000F00DF8571000000000000000000D2
-:1088C00002000F00E08571000000000000000000C1
-:1088D00002000F00E18571000000000000000000B0
-:1088E00002000F00E285710000000000000000009F
-:1088F00002000F00E385710000000000000000008E
-:1089000002000F00E485710000000000000000007C
-:1089100002000F00E585710000000000000000006B
-:1089200002000F00E685710000000000000000005A
-:1089300002000F00E7857100000000000000000049
-:1089400002000F00E8857100000000000000000038
-:1089500002000F00E9857100000000000000000027
-:1089600002000F00EA857100000000000000000016
-:1089700002000F00EB857100000000000000000005
-:1089800002000F00EC8571000000000000000000F4
-:1089900002000F00ED8571000000000000000000E3
-:1089A00002000F00EE8571000000000000000000D2
-:1089B00002000F00EF8571000000000000000000C1
-:1089C00002000F00F08571000000000000000000B0
-:1089D00002000F00F185710000000000000000009F
-:1089E00002000F00F285710000000000000000008E
-:1089F00002000F00F385710000000000000000007D
-:108A000002000F00F485710000000000000000006B
-:108A100002000F00F585710000000000000000005A
-:108A200002000F00F6857100000000000000000049
-:108A300002000F00F7857100000000000000000038
-:108A400002000F00F8857100000000000000000027
-:108A500002000F00F9857100000000000000000016
-:108A600002000F00FA857100000000000000000005
-:108A700002000F00FB8571000000000000000000F4
-:108A800002000F00FC8571000000000000000000E3
-:108A900002000F00FD8571000000000000000000D2
-:108AA00002000F00FE8571000000000000000000C1
-:108AB00002000F00FF8571000000000000000000B0
-:108AC00002000F000086710000000000000000009E
-:108AD00002000F000186710000000000000000008D
-:108AE00002000F000286710000000000000000007C
-:108AF00002000F000386710000000000000000006B
-:108B000002000F0004867100000000000000000059
-:108B100002000F0005867100000000000000000048
-:108B200002000F0006867100000000000000000037
-:108B300002000F0007867100000000000000000026
-:108B400002000F0008867100000000000000000015
-:108B500002000F0009867100000000000000000004
-:108B600002000F000A8671000000000000000000F3
-:108B700002000F000B8671000000000000000000E2
-:108B800002000F000C8671000000000000000000D1
-:108B900002000F000D8671000000000000000000C0
-:108BA00002000F000E8671000000000000000000AF
-:108BB00002000F000F86710000000000000000009E
-:108BC00002000F001086710000000000000000008D
-:108BD00002000F001186710000000000000000007C
-:108BE00002000F001286710000000000000000006B
-:108BF00002000F001386710000000000000000005A
-:108C000002000F0014867100000000000000000048
-:108C100002000F0015867100000000000000000037
-:108C200002000F0016867100000000000000000026
-:108C300002000F0017867100000000000000000015
-:108C400002000F0018867100000000000000000004
-:108C500002000F00198671000000000000000000F3
-:108C600002000F001A8671000000000000000000E2
-:108C700002000F001B8671000000000000000000D1
-:108C800002000F001C8671000000000000000000C0
-:108C900002000F001D8671000000000000000000AF
-:108CA00002000F001E86710000000000000000009E
-:108CB00002000F001F86710000000000000000008D
-:108CC00002000F002086710000000000000000007C
-:108CD00002000F002186710000000000000000006B
-:108CE00002000F002286710000000000000000005A
-:108CF00002000F0023867100000000000000000049
-:108D000002000F0024867100000000000000000037
-:108D100002000F0025867100000000000000000026
-:108D200002000F0026867100000000000000000015
-:108D300002000F0027867100000000000000000004
-:108D400002000F00288671000000000000000000F3
-:108D500002000F00298671000000000000000000E2
-:108D600002000F002A8671000000000000000000D1
-:108D700002000F002B8671000000000000000000C0
-:108D800002000F002C8671000000000000000000AF
-:108D900002000F002D86710000000000000000009E
-:108DA00002000F002E86710000000000000000008D
-:108DB00002000F002F86710000000000000000007C
-:108DC00002000F003086710000000000000000006B
-:108DD00002000F003186710000000000000000005A
-:108DE00002000F0032867100000000000000000049
-:108DF00002000F0033867100000000000000000038
-:108E000002000F0034867100000000000000000026
-:108E100002000F0035867100000000000000000015
-:108E200002000F0036867100000000000000000004
-:108E300002000F00378671000000000000000000F3
-:108E400002000F00388671000000000000000000E2
-:108E500002000F00398671000000000000000000D1
-:108E600002000F003A8671000000000000000000C0
-:108E700002000F003B8671000000000000000000AF
-:108E800002000F003C86710000000000000000009E
-:108E900002000F003D86710000000000000000008D
-:108EA00002000F003E86710000000000000000007C
-:108EB00002000F003F86710000000000000000006B
-:108EC00002000F004086710000000000000000005A
-:108ED00002000F0041867100000000000000000049
-:108EE00002000F0042867100000000000000000038
-:108EF00002000F0043867100000000000000000027
-:108F000002000F0044867100000000000000000015
-:108F100002000F0045867100000000000000000004
-:108F200002000F00468671000000000000000000F3
-:108F300002000F00478671000000000000000000E2
-:108F400002000F00488671000000000000000000D1
-:108F500002000F00498671000000000000000000C0
-:108F600002000F004A8671000000000000000000AF
-:108F700002000F004B86710000000000000000009E
-:108F800002000F004C86710000000000000000008D
-:108F900002000F004D86710000000000000000007C
-:108FA00002000F004E86710000000000000000006B
-:108FB00002000F004F86710000000000000000005A
-:108FC00002000F0050867100000000000000000049
-:108FD00002000F0051867100000000000000000038
-:108FE00002000F0052867100000000000000000027
-:108FF00002000F0053867100000000000000000016
-:1090000002000F0054867100000000000000000004
-:1090100002000F00558671000000000000000000F3
-:1090200002000F00568671000000000000000000E2
-:1090300002000F00578671000000000000000000D1
-:1090400002000F00588671000000000000000000C0
-:1090500002000F00598671000000000000000000AF
-:1090600002000F005A86710000000000000000009E
-:1090700002000F005B86710000000000000000008D
-:1090800002000F005C86710000000000000000007C
-:1090900002000F005D86710000000000000000006B
-:1090A00002000F005E86710000000000000000005A
-:1090B00002000F005F867100000000000000000049
-:1090C00002000F0060867100000000000000000038
-:1090D00002000F0061867100000000000000000027
-:1090E00002000F0062867100000000000000000016
-:1090F00002000F0063867100000000000000000005
-:1091000002000F00648671000000000000000000F3
-:1091100002000F00658671000000000000000000E2
-:1091200002000F00668671000000000000000000D1
-:1091300002000F00678671000000000000000000C0
-:1091400002000F00688671000000000000000000AF
-:1091500002000F006986710000000000000000009E
-:1091600002000F006A86710000000000000000008D
-:1091700002000F006B86710000000000000000007C
-:1091800002000F006C86710000000000000000006B
-:1091900002000F006D86710000000000000000005A
-:1091A00002000F006E867100000000000000000049
-:1091B00002000F006F867100000000000000000038
-:1091C00002000F0070867100000000000000000027
-:1091D00002000F0071867100000000000000000016
-:1091E00002000F0072867100000000000000000005
-:1091F00002000F00738671000000000000000000F4
-:1092000002000F00748671000000000000000000E2
-:1092100002000F00758671000000000000000000D1
-:1092200002000F00768671000000000000000000C0
-:1092300002000F00778671000000000000000000AF
-:1092400002000F007886710000000000000000009E
-:1092500002000F007986710000000000000000008D
-:1092600002000F007A86710000000000000000007C
-:1092700002000F007B86710000000000000000006B
-:1092800002000F007C86710000000000000000005A
-:1092900002000F007D867100000000000000000049
-:1092A00002000F007E867100000000000000000038
-:1092B00002000F007F867100000000000000000027
-:1092C00002000F0080867100000000000000000016
-:1092D00002000F0081867100000000000000000005
-:1092E00002000F00828671000000000000000000F4
-:1092F00002000F00838671000000000000000000E3
-:1093000002000F00848671000000000000000000D1
-:1093100002000F00858671000000000000000000C0
-:1093200002000F00868671000000000000000000AF
-:1093300002000F008786710000000000000000009E
-:1093400002000F008886710000000000000000008D
-:1093500002000F008986710000000000000000007C
-:1093600002000F008A86710000000000000000006B
-:1093700002000F008B86710000000000000000005A
-:1093800002000F008C867100000000000000000049
-:1093900002000F008D867100000000000000000038
-:1093A00002000F008E867100000000000000000027
-:1093B00002000F008F867100000000000000000016
-:1093C00002000F0090867100000000000000000005
-:1093D00002000F00918671000000000000000000F4
-:1093E00002000F00928671000000000000000000E3
-:1093F00002000F00938671000000000000000000D2
-:1094000002000F00948671000000000000000000C0
-:1094100002000F00958671000000000000000000AF
-:1094200002000F009686710000000000000000009E
-:1094300002000F009786710000000000000000008D
-:1094400002000F009886710000000000000000007C
-:1094500002000F009986710000000000000000006B
-:1094600002000F009A86710000000000000000005A
-:1094700002000F009B867100000000000000000049
-:1094800002000F009C867100000000000000000038
-:1094900002000F009D867100000000000000000027
-:1094A00002000F009E867100000000000000000016
-:1094B00002000F009F867100000000000000000005
-:1094C00002000F00A08671000000000000000000F4
-:1094D00002000F00A18671000000000000000000E3
-:1094E00002000F00A28671000000000000000000D2
-:1094F00002000F00A38671000000000000000000C1
-:1095000002000F00A48671000000000000000000AF
-:1095100002000F00A586710000000000000000009E
-:1095200002000F00A686710000000000000000008D
-:1095300002000F00A786710000000000000000007C
-:1095400002000F00A886710000000000000000006B
-:1095500002000F00A986710000000000000000005A
-:1095600002000F00AA867100000000000000000049
-:1095700002000F00AB867100000000000000000038
-:1095800002000F00AC867100000000000000000027
-:1095900002000F00AD867100000000000000000016
-:1095A00002000F00AE867100000000000000000005
-:1095B00002000F00AF8671000000000000000000F4
-:1095C00002000F00B08671000000000000000000E3
-:1095D00002000F00B18671000000000000000000D2
-:1095E00002000F00B28671000000000000000000C1
-:1095F00002000F00B38671000000000000000000B0
-:1096000002000F00B486710000000000000000009E
-:1096100002000F00B586710000000000000000008D
-:1096200002000F00B686710000000000000000007C
-:1096300002000F00B786710000000000000000006B
-:1096400002000F00B886710000000000000000005A
-:1096500002000F00B9867100000000000000000049
-:1096600002000F00BA867100000000000000000038
-:1096700002000F00BB867100000000000000000027
-:1096800002000F00BC867100000000000000000016
-:1096900002000F00BD867100000000000000000005
-:1096A00002000F00BE8671000000000000000000F4
-:1096B00002000F00BF8671000000000000000000E3
-:1096C00002000F00C08671000000000000000000D2
-:1096D00002000F00C18671000000000000000000C1
-:1096E00002000F00C28671000000000000000000B0
-:1096F00002000F00C386710000000000000000009F
-:1097000002000F00C486710000000000000000008D
-:1097100002000F00C586710000000000000000007C
-:1097200002000F00C686710000000000000000006B
-:1097300002000F00C786710000000000000000005A
-:1097400002000F00C8867100000000000000000049
-:1097500002000F00C9867100000000000000000038
-:1097600002000F00CA867100000000000000000027
-:1097700002000F00CB867100000000000000000016
-:1097800002000F00CC867100000000000000000005
-:1097900002000F00CD8671000000000000000000F4
-:1097A00002000F00CE8671000000000000000000E3
-:1097B00002000F00CF8671000000000000000000D2
-:1097C00002000F00D08671000000000000000000C1
-:1097D00002000F00D18671000000000000000000B0
-:1097E00002000F00D286710000000000000000009F
-:1097F00002000F00D386710000000000000000008E
-:1098000002000F00D486710000000000000000007C
-:1098100002000F00D586710000000000000000006B
-:1098200002000F00D686710000000000000000005A
-:1098300002000F00D7867100000000000000000049
-:1098400002000F00D8867100000000000000000038
-:1098500002000F00D9867100000000000000000027
-:1098600002000F00DA867100000000000000000016
-:1098700002000F00DB867100000000000000000005
-:1098800002000F00DC8671000000000000000000F4
-:1098900002000F00DD8671000000000000000000E3
-:1098A00002000F00DE8671000000000000000000D2
-:1098B00002000F00DF8671000000000000000000C1
-:1098C00002000F00E08671000000000000000000B0
-:1098D00002000F00E186710000000000000000009F
-:1098E00002000F00E286710000000000000000008E
-:1098F00002000F00E386710000000000000000007D
-:1099000002000F00E486710000000000000000006B
-:1099100002000F00E586710000000000000000005A
-:1099200002000F00E6867100000000000000000049
-:1099300002000F00E7867100000000000000000038
-:1099400002000F00E8867100000000000000000027
-:1099500002000F00E9867100000000000000000016
-:1099600002000F00EA867100000000000000000005
-:1099700002000F00EB8671000000000000000000F4
-:1099800002000F00EC8671000000000000000000E3
-:1099900002000F00ED8671000000000000000000D2
-:1099A00002000F00EE8671000000000000000000C1
-:1099B00002000F00EF8671000000000000000000B0
-:1099C00002000F00F086710000000000000000009F
-:1099D00002000F00F186710000000000000000008E
-:1099E00002000F00F286710000000000000000007D
-:1099F00002000F00F386710000000000000000006C
-:109A000002000F00F486710000000000000000005A
-:109A100002000F00F5867100000000000000000049
-:109A200002000F00F6867100000000000000000038
-:109A300002000F00F7867100000000000000000027
-:109A400002000F00F8867100000000000000000016
-:109A500002000F00F9867100000000000000000005
-:109A600002000F00FA8671000000000000000000F4
-:109A700002000F00FB8671000000000000000000E3
-:109A800002000F00FC8671000000000000000000D2
-:109A900002000F00FD8671000000000000000000C1
-:109AA00002000F00FE8671000000000000000000B0
-:109AB00002000F00FF86710000000000000000009F
-:109AC00002000F000087710000000000000000008D
-:109AD00002000F000187710000000000000000007C
-:109AE00002000F000287710000000000000000006B
-:109AF00002000F000387710000000000000000005A
-:109B000002000F0004877100000000000000000048
-:109B100002000F0005877100000000000000000037
-:109B200002000F0006877100000000000000000026
-:109B300002000F0007877100000000000000000015
-:109B400002000F0008877100000000000000000004
-:109B500002000F00098771000000000000000000F3
-:109B600002000F000A8771000000000000000000E2
-:109B700002000F000B8771000000000000000000D1
-:109B800002000F000C8771000000000000000000C0
-:109B900002000F000D8771000000000000000000AF
-:109BA00002000F000E87710000000000000000009E
-:109BB00002000F000F87710000000000000000008D
-:109BC00002000F001087710000000000000000007C
-:109BD00002000F001187710000000000000000006B
-:109BE00002000F001287710000000000000000005A
-:109BF00002000F0013877100000000000000000049
-:109C000002000F0014877100000000000000000037
-:109C100002000F0015877100000000000000000026
-:109C200002000F0016877100000000000000000015
-:109C300002000F0017877100000000000000000004
-:109C400002000F00188771000000000000000000F3
-:109C500002000F00198771000000000000000000E2
-:109C600002000F001A8771000000000000000000D1
-:109C700002000F001B8771000000000000000000C0
-:109C800002000F001C8771000000000000000000AF
-:109C900002000F001D87710000000000000000009E
-:109CA00002000F001E87710000000000000000008D
-:109CB00002000F001F87710000000000000000007C
-:109CC00002000F002087710000000000000000006B
-:109CD00002000F002187710000000000000000005A
-:109CE00002000F0022877100000000000000000049
-:109CF00002000F0023877100000000000000000038
-:109D000002000F0024877100000000000000000026
-:109D100002000F0025877100000000000000000015
-:109D200002000F0026877100000000000000000004
-:109D300002000F00278771000000000000000000F3
-:109D400002000F00288771000000000000000000E2
-:109D500002000F00298771000000000000000000D1
-:109D600002000F002A8771000000000000000000C0
-:109D700002000F002B8771000000000000000000AF
-:109D800002000F002C87710000000000000000009E
-:109D900002000F002D87710000000000000000008D
-:109DA00002000F002E87710000000000000000007C
-:109DB00002000F002F87710000000000000000006B
-:109DC00002000F003087710000000000000000005A
-:109DD00002000F0031877100000000000000000049
-:109DE00002000F0032877100000000000000000038
-:109DF00002000F0033877100000000000000000027
-:109E000002000F0034877100000000000000000015
-:109E100002000F0035877100000000000000000004
-:109E200002000F00368771000000000000000000F3
-:109E300002000F00378771000000000000000000E2
-:109E400002000F00388771000000000000000000D1
-:109E500002000F00398771000000000000000000C0
-:109E600002000F003A8771000000000000000000AF
-:109E700002000F003B87710000000000000000009E
-:109E800002000F003C87710000000000000000008D
-:109E900002000F003D87710000000000000000007C
-:109EA00002000F003E87710000000000000000006B
-:109EB00002000F003F87710000000000000000005A
-:109EC00002000F0040877100000000000000000049
-:109ED00002000F0041877100000000000000000038
-:109EE00002000F0042877100000000000000000027
-:109EF00002000F0043877100000000000000000016
-:109F000002000F0044877100000000000000000004
-:109F100002000F00458771000000000000000000F3
-:109F200002000F00468771000000000000000000E2
-:109F300002000F00478771000000000000000000D1
-:109F400002000F00488771000000000000000000C0
-:109F500002000F00498771000000000000000000AF
-:109F600002000F004A87710000000000000000009E
-:109F700002000F004B87710000000000000000008D
-:109F800002000F004C87710000000000000000007C
-:109F900002000F004D87710000000000000000006B
-:109FA00002000F004E87710000000000000000005A
-:109FB00002000F004F877100000000000000000049
-:109FC00002000F0050877100000000000000000038
-:109FD00002000F0051877100000000000000000027
-:109FE00002000F0052877100000000000000000016
-:109FF00002000F0053877100000000000000000005
-:10A0000002000F00548771000000000000000000F3
-:10A0100002000F00558771000000000000000000E2
-:10A0200002000F00568771000000000000000000D1
-:10A0300002000F00578771000000000000000000C0
-:10A0400002000F00588771000000000000000000AF
-:10A0500002000F005987710000000000000000009E
-:10A0600002000F005A87710000000000000000008D
-:10A0700002000F005B87710000000000000000007C
-:10A0800002000F005C87710000000000000000006B
-:10A0900002000F005D87710000000000000000005A
-:10A0A00002000F005E877100000000000000000049
-:10A0B00002000F005F877100000000000000000038
-:10A0C00002000F0060877100000000000000000027
-:10A0D00002000F0061877100000000000000000016
-:10A0E00002000F0062877100000000000000000005
-:10A0F00002000F00638771000000000000000000F4
-:10A1000002000F00648771000000000000000000E2
-:10A1100002000F00658771000000000000000000D1
-:10A1200002000F00668771000000000000000000C0
-:10A1300002000F00678771000000000000000000AF
-:10A1400002000F006887710000000000000000009E
-:10A1500002000F006987710000000000000000008D
-:10A1600002000F006A87710000000000000000007C
-:10A1700002000F006B87710000000000000000006B
-:10A1800002000F006C87710000000000000000005A
-:10A1900002000F006D877100000000000000000049
-:10A1A00002000F006E877100000000000000000038
-:10A1B00002000F006F877100000000000000000027
-:10A1C00002000F0070877100000000000000000016
-:10A1D00002000F0071877100000000000000000005
-:10A1E00002000F00728771000000000000000000F4
-:10A1F00002000F00738771000000000000000000E3
-:10A2000002000F00748771000000000000000000D1
-:10A2100002000F00758771000000000000000000C0
-:10A2200002000F00768771000000000000000000AF
-:10A2300002000F007787710000000000000000009E
-:10A2400002000F007887710000000000000000008D
-:10A2500002000F007987710000000000000000007C
-:10A2600002000F007A87710000000000000000006B
-:10A2700002000F007B87710000000000000000005A
-:10A2800002000F007C877100000000000000000049
-:10A2900002000F007D877100000000000000000038
-:10A2A00002000F007E877100000000000000000027
-:10A2B00002000F007F877100000000000000000016
-:10A2C00002000F0080877100000000000000000005
-:10A2D00002000F00818771000000000000000000F4
-:10A2E00002000F00828771000000000000000000E3
-:10A2F00002000F00838771000000000000000000D2
-:10A3000002000F00848771000000000000000000C0
-:10A3100002000F00858771000000000000000000AF
-:10A3200002000F008687710000000000000000009E
-:10A3300002000F008787710000000000000000008D
-:10A3400002000F008887710000000000000000007C
-:10A3500002000F008987710000000000000000006B
-:10A3600002000F008A87710000000000000000005A
-:10A3700002000F008B877100000000000000000049
-:10A3800002000F008C877100000000000000000038
-:10A3900002000F008D877100000000000000000027
-:10A3A00002000F008E877100000000000000000016
-:10A3B00002000F008F877100000000000000000005
-:10A3C00002000F00908771000000000000000000F4
-:10A3D00002000F00918771000000000000000000E3
-:10A3E00002000F00928771000000000000000000D2
-:10A3F00002000F00938771000000000000000000C1
-:10A4000002000F00948771000000000000000000AF
-:10A4100002000F009587710000000000000000009E
-:10A4200002000F009687710000000000000000008D
-:10A4300002000F009787710000000000000000007C
-:10A4400002000F009887710000000000000000006B
-:10A4500002000F009987710000000000000000005A
-:10A4600002000F009A877100000000000000000049
-:10A4700002000F009B877100000000000000000038
-:10A4800002000F009C877100000000000000000027
-:10A4900002000F009D877100000000000000000016
-:10A4A00002000F009E877100000000000000000005
-:10A4B00002000F009F8771000000000000000000F4
-:10A4C00002000F00A08771000000000000000000E3
-:10A4D00002000F00A18771000000000000000000D2
-:10A4E00002000F00A28771000000000000000000C1
-:10A4F00002000F00A38771000000000000000000B0
-:10A5000002000F00A487710000000000000000009E
-:10A5100002000F00A587710000000000000000008D
-:10A5200002000F00A687710000000000000000007C
-:10A5300002000F00A787710000000000000000006B
-:10A5400002000F00A887710000000000000000005A
-:10A5500002000F00A9877100000000000000000049
-:10A5600002000F00AA877100000000000000000038
-:10A5700002000F00AB877100000000000000000027
-:10A5800002000F00AC877100000000000000000016
-:10A5900002000F00AD877100000000000000000005
-:10A5A00002000F00AE8771000000000000000000F4
-:10A5B00002000F00AF8771000000000000000000E3
-:10A5C00002000F00B08771000000000000000000D2
-:10A5D00002000F00B18771000000000000000000C1
-:10A5E00002000F00B28771000000000000000000B0
-:10A5F00002000F00B387710000000000000000009F
-:10A6000002000F00B487710000000000000000008D
-:10A6100002000F00B587710000000000000000007C
-:10A6200002000F00B687710000000000000000006B
-:10A6300002000F00B787710000000000000000005A
-:10A6400002000F00B8877100000000000000000049
-:10A6500002000F00B9877100000000000000000038
-:10A6600002000F00BA877100000000000000000027
-:10A6700002000F00BB877100000000000000000016
-:10A6800002000F00BC877100000000000000000005
-:10A6900002000F00BD8771000000000000000000F4
-:10A6A00002000F00BE8771000000000000000000E3
-:10A6B00002000F00BF8771000000000000000000D2
-:10A6C00002000F00C087710079000000769060FDE5
-:10A6D00002000F00C18771003D0000006F0080F78D
-:10A6E00002000F00C28771003D0000006F0080F77C
-:10A6F00002000F00C38771003D0000006F0080F76B
-:10A7000002000F00C48771803D0000006F0080F7D9
-:00000001FF
-/* Loading Firmware */
-/* INT_MEM Ver */
- * Tehuti Networks(R) Network Driver
- * Copyright (C) 2007 Tehuti Networks Ltd. All rights reserved
diff --git a/firmware/ti_3410.fw.ihex b/firmware/ti_3410.fw.ihex
deleted file mode 100644
index b22c0425980e..000000000000
--- a/firmware/ti_3410.fw.ihex
+++ /dev/null
@@ -1,862 +0,0 @@
-:10000000C2350002001E021ADBFFFFFFFFFF0232B3
-:10001000CBFFFFFFFFFFFFFFFFFFFFFFFFFF0233ED
-:10002000767581CE90FDE88583A01234EAEC4D60B0
-:100030006A78AB8003760018B89CFA787F800376E4
-:100040000018B865FA78208003760018B820FA9076
-:10005000FDDDAE83AF8290FBF81200A16005E4F0F5
-:10006000A380F690FDE8A88290FDE8A982E8C399F4
-:10007000500576000880F69000FF1200AA90010358
-:100080001200AA9001071200AA90010B1200C8905A
-:1000900001111200C89001171200C875D000123368
-:1000A000C802011DEF65827003EE658322E493F8B8
-:1000B000740193F9740293FE740393F5828E83E8BE
-:1000C00069700122E493F6A30880F4E493FC7401C0
-:1000D00093FD740293FE740393FF740493F8740504
-:1000E00093F58288831200A1700122E493A3A88370
-:1000F000A9828C838D82F0A3AC83AD8288838982B0
-:1001000080E32121049280800492ACAE0492FDE849
-:1001100004940494FBF304990494FBF304F904F9A4
-:1001200080FED0F030F00920F303F68010F7800D48
-:1001300030F10920F303F28004F38001F020F4048D
-:10014000FCD0E0CC22CCC0E012015A02014BBC0032
-:1001500005D0F0ACF022C313DCFC020121BF000982
-:10016000ED258275F001F8E622BF010FED2582F53D
-:1001700082EE3583F58375F004E022ED258275F07B
-:1001800002F8E222D083D082F5F0C3E493A3C5F055
-:1001900095F0C0E0C3D0F0E493A395F04012A3A380
-:1001A000C3E5F033500205832582F58250020583B2
-:1001B000740193C0E0E493C0E022D083D082F5F0D4
-:1001C000E49370097401937004A3A3800C740293E8
-:1001D00065F06005A3A3A380E7740193C0E0E493F6
-:1001E000C0E02212025B0201F21202AF0201F2121F
-:1001F00002D30201F230E00720E302E622E72230D8
-:10020000E10720E302E222E32230E202E022E4936B
-:10021000221202D302021A1202AF02021AABF01229
-:100220000224CBC5F0CB2230E01020E306E6F5F047
-:1002300008E622E7F5F009E7192230E11020E3068D
-:10024000E2F5F008E222E3F5F009E3192230E206D4
-:10025000E0F5F0A3E022E493F5F074019322BB00F3
-:1002600003740922BB010789828A83740422BB02BA
-:100270000789828A83741022740A2202027BBB00DF
-:1002800007E92582F8740122BB010DE92582F58278
-:10029000EA3583F583740422BB020DE92582F582D9
-:1002A000EA3583F583741022E92582F8740222026C
-:1002B00002AFBF0005EDF8740122BF01078D828EE9
-:1002C00083740422BF02078D828E83741022EDF89E
-:1002D0007402220202D3BF0007ED2582F8740122C6
-:1002E000BF010DED2582F582EE3583F5837404227E
-:1002F000BF020DED2582F582EE3583F58374102261
-:10030000ED2582F8740222020307C0E012025B02AC
-:10031000031FC0E01202AF02031FC0E01202D302AB
-:10032000031F30E00B20E304D0E0F622D0E0F722F8
-:1003300030E10B20E304D0E0F222D0E0F322D0E061
-:10034000F022C9CDC9CACECACBCFCB120352EDF928
-:10035000EEFAEFFB22BB002FBF000AFAEDF8E7F63A
-:100360000809DAFA22BF01128D828E83F802036F28
-:1003700009A3E7F0D8FA2202037AFAEDF8E7F208C7
-:1003800009DAFA22020384BB014DBF001489828A74
-:1003900083F9EDF802039608A3E0F6D9FA220203E6
-:1003A000A7BF01228D828E83FB08C9C582C9CAC539
-:1003B00083CAE0A3C9C582C9CAC583CAF0A3DBEA60
-:1003C000D8E8220203CA8D828E83F9EDF8E0F208A4
-:1003D000A3D9FA220203D4BB024DBF001289828A3C
-:1003E00083F9EDF80203E608A3E493F6D9F922BFF6
-:1003F00001238D828E83FB08C9C582C9CAC583CA01
-:10040000E493A3C9C582C9CAC583CAF0A3DBE9D8EE
-:10041000E72202041989828A83F9EDF8E493F2084D
-:10042000A3D9F92202042ABF000DFAEDF8E3F60879
-:1004300009DAFA22020434BF01128D828E83F80297
-:10044000044109A3E3F0D8FA2202044CFAEDF8E3E0
-:10045000F20809DAFA22020456E6FB08E6FA08E690
-:10046000F904F61870010622E6FF08E6FE08E6FD2C
-:1004700022EFF0A3EEF0A3EDF022EBF0A3EAF0A35D
-:10048000E9F022E0FFA3E0FEA3E0FD22E0FBA3E011
-:10049000FAA3E0F9220000000000000004F9006166
-:1004A00005680026058F00330A0000610A6C0066AB
-:1004B000151D00610CF0006109A0006109D7006101
-:1004C0000DB700610BE800610A1300610A48006182
-:1004D00017150033172800341DF600431EA10044F1
-:1004E000200E00441FFC00471EC800471F6D004D32
-:1004F0001FBE004F1EEA0058325600617CCC7DFFC3
-:10050000121CA72290FFFCE020E72DC2AFAE59AF2E
-:1005100058755A20E55A14C55A6019E4FE7F05EE55
-:100520004FCE24FFCECF34FFCF6007E490FF92F090
-:1005300080ED80E08E598F58221205017D077CB72F
-:100540001232727D0F7C6E12328C789D7A06E4F640
-:1005500008DAFC7A061205C47C03120E4C12214AFA
-:10056000E4FEFF7C0F1231FBD2A8221230E6E490A9
-:10057000FC38F090FFF0E030E408740190FC39F0B2
-:100580008005E490FC39F07D0A7C001225261231AA
-:1005900069221230E690FC39E014700E90FFF0E012
-:1005A0004410F07C001225BF801990FC39E0700ED9
-:1005B00090FFF0E054EFF07C001225BF80057C171F
-:1005C0001225BF1231692290FFF0E054ABF090FF8A
-:1005D000F0E04420F0228C378D367882EDF608EC7E
-:1005E000F6EDFEECFD7F019000051201EC7880F63F
-:1005F0007882E6FD08E6FCEDFEECFD7F019000044C
-:100600001201EC540FFC7D801217467880E6700DC5
-:10061000AD3AAE39AF38E412030F7C082290FFF0F8
-:10062000E054FEF090FFF0E054FDF0801E7882E68A
-:10063000FD08E6FCEDFEECFD7F0190000812020EC5
-:1006400025E0440190FFF3F00206D07882E6FD0831
-:10065000E6FCEDFEECFD7F0190000612020E54FE5A
-:1006600090FFF3F0802B7882E6FD08E6FCEDFEECCF
-:10067000FD7F0190000812020EFAEB90FFF1F012DC
-:1006800008BF400DAD3AAE39AF38E412030F7C1805
-:10069000227882E6FD08E6FCEDFEECFD7F0190008D
-:1006A0000812020E90FFF1F01208BF400DAD3AAEF5
-:1006B00039AF38E412030F7C18227882E6FD08E691
-:1006C000FCEDFEECFD7F0190000612020E4401904D
-:1006D000FFF3F07883E62403F618E63400F678801A
-:1006E000E624FE500990FFF0E054FDF0800790FFF3
-:1006F000F0E04402F0E490FFF1F078817600788039
-:10070000E624FFFCE434FFFD7881E67F00FEECD3B5
-:100710009EEF6480CD64809D402F1208A4400F7826
-:1007200081E6AD3AAE39AF3812030F7C182290FF44
-:10073000F2E0FC78828683088682ECF0788106A35A
-:100740007882A68308A68280B51208A4400F78811B
-:10075000E6AD3AAE39AF3812030F7C182290FFF2A3
-:10076000E0FC78828683088682ECF07880E6AD3AF9
-:10077000AE39AF3812030F7C00228C378D36788269
-:10078000EDF608ECF6EDFEECFD7F019000051201A0
-:10079000EC7881F67882E6FD08E6FCEDFEECFD7F64
-:1007A000019000041201EC540FFC7D811217467871
-:1007B00081E670037C082290FFF0E054FEF090FF89
-:1007C000F0E054FDF0801B7882E6FD08E6FCEDFECB
-:1007D000ECFD7F0190000812020E25E090FFF3F07F
-:1007E000805B7882E6FD08E6FCEDFEECFD7F019083
-:1007F000000612020E54FE90FFF3F080217882E68C
-:10080000FD08E6FCEDFEECFD7F0190000812020EF3
-:10081000FAEB90FFF1F01208BF40037C18227882B7
-:10082000E6FD08E6FCEDFEECFD7F019000081202FB
-:100830000E90FFF1F01208BF40037C18227883E687
-:10084000240AF618E63400F6788076007881E624EB
-:10085000FFFCE434FFFD7880E67F00FEECD39EEFE2
-:100860006480CD64809D402178828683088682E002
-:1008700090FFF1F01208BF40037C182278800678C0
-:100880008306E61870010680C390FFF0E04401F093
-:1008900078828683088682E090FFF1F01208BF40DC
-:1008A000037C18227C002290FFF0E020E71290FFEA
-:1008B000F0E030E50990FFF0E04420F0C32280E74B
-:1008C000D32290FFF0E020E31290FFF0E030E50942
-:1008D00090FFF0E04420F0C32280E7D3228C428DC9
-:1008E000417C00ED54F0FDEC7003ED643070057553
-:1008F0003E038003753E04AC3E120F69758300858C
-:100900008340E541540FF53FE5407004E53F640343
-:100910007035E53E24FD75F00AA42402F582E43426
-:10092000FCF583E030E60512104B8019E53E249D6E
-:10093000F8C654FBF678A9E62405F58218E63400DB
-:10094000F583740FF08059E5407004E53F6404704E
-:1009500048E53E24FD75F00AA42402F582E434FC47
-:10096000F583E030E507AC42AD41121C3CE5423076
-:10097000E21578ADE630E00F78ADE630E109E4FF4E
-:1009800004FE7C041231FB78A9E62406F58218E601
-:100990003400F583740FF08007E4FC7DEE121C3CFC
-:1009A000C203221230E6120F6978A9E62406F58206
-:1009B00018E63400F583E090FC38F078A9E62405C9
-:1009C000F58218E63400F583E090FC39F0C2037D2F
-:1009D000027C00122526123169221230E67895EC4D
-:1009E000F6EC249DF8E630E1077C131225BF800F5A
-:1009F00090FC39E0FD7895E6FC1213C81225BF1271
-:100A00003169221230E67895ECF67D00120F09125A
-:100A100025BF123169221230E67895ECF6EC249D60
-:100A2000F8E630E2077C131225BF801B7895E62498
-:100A30009DF8E620E1077C121225BF800A7895E632
-:100A4000FC1213EC1225BF123169221230E67895A0
-:100A5000ECF6EC249DF8E620E2077C111225BF801D
-:100A60000A7895E6FC1214ED1225BF1231692212A4
-:100A700030E67895ECF6120F6978A9E62409F5823C
-:100A800018E63400F583E090FC3FF078A9E6240AEC
-:100A9000F58218E63400F583E090FC40F078A9E692
-:100AA0002403F58218E63400F583E0FC78A9E624F7
-:100AB00004F58218E63400F583E0F56278A9E624AF
-:100AC00002F58218E63400F583E0F5638C61E4EC0E
-:100AD000333354017895F66008E56230E103789588
-:100AE000067895E690FC41F078A7E62402F5821896
-:100AF000E63400F583E0FDA3E0540CFCED54E68CF5
-:100B000065F564E56130E503436501E56220E50EC6
-:100B1000E561547F7008E56120E703436502E56104
-:100B200030E303436510E56130E203436520E5618E
-:100B300054036003436540E56130E103436580E5AC
-:100B40006130E403436401E56130E603436408E592
-:100B50006220E40EE561547F7008E56120E70343FD
-:100B600064105365FB536479AD64E56590FC3ACD40
-:100B7000F0A3CDF0E56330E30DE5635430C4540FCA
-:100B800090FC3DF08005E490FC3DF0E5635403905B
-:100B9000FC3CF0E5635404C31390FC3EF090FC3C35
-:100BA000E0700E7D357EFC7F01740190000912011A
-:100BB0004278A9E62408F58218E63400F583E07C43
-:100BC00000FD78A9E62407F58218E63400F583E0F5
-:100BD0007F004CFEEF4D90FC38F0A3CEF0CEC20368
-:100BE0007D0A7C00122526123169221230E67895A2
-:100BF000ECF6789A76010876FC0876387897760CC9
-:100C0000789A1204651202147898CBF6CB08F67F16
-:100C100000EF24EA401FE4EF25E090352CFD93CD52
-:100C200004937899667003ED1866700678977600DD
-:100C300080030F80DC7896EFF6789A1204659000B6
-:100C40000212020E7898CBF6CB08F65404CB5486E9
-:100C50004B60047897760B7899E630E313789A1214
-:100C600004659000051201EC24FB50047897760D82
-:100C70007899E654C07D0064C04D70047897760B77
-:100C8000789A1204659000041201EC24FC50047858
-:100C900097760F789A1204659000061201EC24FDF5
-:100CA00050047897760E789A120465900009120124
-:100CB000EC24FD50047897760A7897E6702A7895A8
-:100CC000E6FC120F69789A12046578A7E6F978A60F
-:100CD000E6FA7B01740A780012033FC2037895E6B6
-:100CE000FC1211077897ECF67897E6FC1225BF12F4
-:100CF0003169221230E67895ECF6120F697895E6A4
-:100D000024FD75F00AA42414F582E434FCF583ACC8
-:100D100082AD8378A68683088682ECF9EDFA7B0A99
-:100D200078011203A7C2037895E6FC12110712316D
-:100D300069228D2B8C2AED60407527017529487535
-:100D400028FFE52A24FDFCE434FFFDEC7C0325E0CC
-:100D5000CD33CDDCF9FCE5292CF529E5283DF52836
-:100D6000AD29AE28AF277480900006120317748057
-:100D7000900002120317120FB7E52B14603B752782
-:100D8000017529087528FFE52A24FDFCE434FFFDE0
-:100D9000EC7C0325E0CD33CDDCF9FCE5292CF529ED
-:100DA000E5283DF528AD29AE28AF27E490000612CE
-:100DB0000317E4900002120317221230E67895EC34
-:100DC000F6EC249DF8E630E2097895E6FC1214ED85
-:100DD000D2007895E6FC120F697896760090FC397F
-:100DE000E030E704789676017896E6FD7895E6FCA3
-:100DF000120D2FC2033000077895E6FC1213EC7C2D
-:100E0000001225BF1231692278A9E62404F5821860
-:100E1000E63400F583E04401F078A9E62404F58285
-:100E200018E63400F583E030E00280ED78A9E6248E
-:100E30000BF58218E63400F583E054F8F078A9E663
-:100E40002402F58218E63400F583E04480F022C2E3
-:100E5000038C58120F6978A68683088682795D7A9A
-:100E6000357B0A78011203F5120E05AC587D02128B
-:100E70000D2FC203AC58121107228D538E528F5181
-:100E80008C50120F69754F0078A9E62405F5821879
-:100E9000E63400F583E020E41FE54F24F640190511
-:100EA0004FC2037C181232A990FF93E04401F0B2C4
-:100EB000B3AC50120F6980D078A9E62405F58218EA
-:100EC000E63400F583E020E405C2037C022278A921
-:100ED000E62405F58218E63400F583E0540F601629
-:100EE00078A9E62405F58218E63400F583E0540F6E
-:100EF000F0C2037C012278A88683088682E0AD5385
-:100F0000AE52AF5112030FC2037C00228D318C30E0
-:100F10001214EDE531600FE530B4030A7C011224B0
-:100F2000EE7C811224EEAC30120F69E531601A7844
-:100F3000AA8683088682E054E7F0A3A3A3A3E05423
-:100F4000E7F0AC307D02120D2F78A68683088682EA
-:100F500079677A357B0A78011203F5C203E53024FC
-:100F60009DF8C654FDF6AC30121107228C263003D2
-:100F70000512324880F87C0A12315BD203E5262440
-:100F8000FD78A3F6700778AA76FF0876E078A3E6E6
-:100F900075F010A4ADF0FC24A078A9F6ED34FF188C
-:100FA000F678A3E675F00AA42400FCE434FCFD788E
-:100FB000A6EDF608ECF61231F42278A9E62402F543
-:100FC0008218E63400F583E030E72278A9E62402AF
-:100FD000F58218E63400F583E0547FF078A9E62422
-:100FE00002F58218E63400F583E04480F02278AA06
-:100FF0008683088682E0547FF0AD83E5822404FC7A
-:10100000E43D8C82F583E0547FF078A9E6240BF56B
-:101010008218E63400F583E054F8F078ABE624015A
-:10102000F58218E63400F583E04403F078ABE6245B
-:1010300005F58218E63400F583E04403F078A9E66C
-:101040002405F58218E63400F583740FF02278AA9F
-:101050008683088682E0543FF0AD83E5822404FC59
-:10106000E43D8C82F583E0543FF078A3E624A4F8B5
-:10107000E6FC78ABE62401F58218E63400F583EC53
-:10108000F078A3E624A4F8E6FC78ABE62405F58224
-:1010900018E63400F583ECF078A9E6240BF5821805
-:1010A000E63400F583E054FB4402F52678A7E624F5
-:1010B00002F58218E63400F583E030E503432601AB
-:1010C00078A9E62405F58218E63400F583E030E0DF
-:1010D00003120FB7E526FC78A9E6240BF58218E683
-:1010E0003400F583ECF078A9E62405F58218E6349F
-:1010F00000F583740FF078AA8683088682E0448026
-:10110000F0A3A3A3A3E04480F0228C2A120F6978F5
-:10111000A7E62408F58218E63400F583E0FC78A9F8
-:10112000E6240AF58218E63400F583ECF078A7E6A9
-:101130002407F58218E63400F583E0FC78A9E6245C
-:1011400009F58218E63400F583ECF078A68683086A
-:101150008682E0FDA3E0FCEDFE78A9E62408F58296
-:1011600018E63400F583EEF0ECFE78A9E62407F5E6
-:101170008218E63400F583EEF08C298D28C3EC94B8
-:1011800005ED940C400575277C8033D3E529940147
-:10119000E5289403400575273C8023D3E5299481F5
-:1011A000E528940140057527188013D3E52994603C
-:1011B000E5289400400575270C8003752708AF27A4
-:1011C000E4EF547C4483FF8F27E527FC78ABE624CB
-:1011D00001F58218E63400F583ECF0E527FC78ABE6
-:1011E000E62405F58218E63400F583ECF0E527FCEB
-:1011F00078A3E624A4F8ECF678A9E62402F5821890
-:10120000E63400F583E0F52778A7E62402F5821896
-:10121000E63400F583A3E030E3175327C778A7E649
-:101220002405F58218E63400F583E09035589342A2
-:10123000275327FB78A7E62406F58218E63400F545
-:1012400083E060034327045327FC78A7E62404F5D2
-:101250008218E63400F583E04227432780E527FC27
-:1012600078A9E62402F58218E63400F583ECF078DC
-:10127000A9E62404F58218E63400F583E0F5277822
-:10128000A7E62402F58218E63400F583A3E030E1F6
-:10129000055327DF800343272078A7E62402F58241
-:1012A00018E63400F583E030E4055327EF8003436C
-:1012B000271078A7E62409F58218E63400F583E0C4
-:1012C000B40203432702E527FC78A9E62404F5824B
-:1012D00018E63400F583ECF078A9E62403F58218CB
-:1012E000E63400F583E0F52778A7E62409F58218AF
-:1012F000E63400F583E0700553277F8003432780A1
-:1013000078A7E62402F58218E63400F583A3E030DE
-:10131000E00543272080035327DF78A7E62402F562
-:101320008218E63400F583E030E30543274080036C
-:101330005327BF78A7E62402F58218E63400F58328
-:10134000E030E00543271080035327EF78A7E62419
-:1013500002F58218E63400F583A3E030E405432764
-:101360000880035327F778A7E62402F58218E634AD
-:1013700000F583A3E030E50543270480035327FBF2
-:1013800078A7E62402F58218E63400F583A3E0305E
-:10139000E60543270180035327FE78A7E62402F5DC
-:1013A0008218E63400F583A3E030E7054327028086
-:1013B000035327FDE527FC78A9E62403F58218E608
-:1013C0003400F583ECF0C2037C00228D278C26EDDF
-:1013D00054031460037C1022E527547C24FC400352
-:1013E0007C0B22E526249DF8C64402F67C00228C64
-:1013F00030120F69E530249DF8E620E24FAC307DD5
-:1014000002120D2FE53024FE4428FC78AA868308BA
-:101410008682ECF0AF83E5822404FEE43FFFEC8E8D
-:10142000828F83F07C038C2CE52CFC78ABE62401C6
-:10143000F58218E63400F583ECF0E52CFC78ABE699
-:101440002405F58218E63400F583ECF0752D01755E
-:101450002F48752EFFE53024FDFCE434FFFDEC7CC5
-:101460000325E0CD33CDDCF9FCE52F2CF52FE52E5F
-:101470003DF52E78ABE62404F58218E63400F583BA
-:10148000E054E7F52CAD2FAE2EAF2DE49000021204
-:101490000317E49000061203171201E630E5034338
-:1014A0002C10E52CFC78ABE62404F58218E6340019
-:1014B000F583ECF012104B78A9E62406F58218E6C5
-:1014C0003400F583E0C203FCE530249DF8C64404F3
-:1014D000F68C2CE530540FC454F07E00FFEEEF4440
-:1014E000047D00FFEC4EFCED4FFD121CA77C00229A
-:1014F0008C2F120F69120FEB78AA8683088682E080
-:101500005408F0A3A3A3A3E05408F0AC2F7D02126B
-:101510000D2FC203E52F249DF8C654FBF67C002254
-:101520001230E67896ECF6EC249DF8E630E10A7D80
-:10153000007C131225261231697896E6249DF8C6A0
-:101540004401F67896E6FC120F697896E624FD755C
-:10155000F00AA42414F582E434FCF58378A6E6FAB4
-:1015600008E6F97B0A78011203A778A68683088625
-:101570008279677A357B0A78011203F5120FB7C2B8
-:10158000037896E6FC1211077895ECF6EC600A7D7C
-:10159000007C081225261231697896E6FC120F6944
-:1015A00078A9E62404F58218E63400F583E04410B7
-:1015B00054DFFC78A9E62404F58218E63400F583AC
-:1015C000ECF07895ECF6C2037CC81232A97896E666
-:1015D000FC120F6978A9E62404F58218E63400F5B8
-:1015E00083E054EFF0C2037CC81232A97896E6FC7F
-:1015F000120F6978A9E62404F58218E63400F58311
-:10160000E04410F0C2037CC81232A97896E6FC12BE
-:101610000F6978A9E62404F58218E63400F583E022
-:101620004420F0C2037CF01232A97896E6FC120F37
-:101630006978A9E62405F58218E63400F583E030E0
-:10164000E415C2037896E644107F00FE7C07123151
-:10165000FB12316902171478A9E62404F58218E612
-:101660003400F583E054CFF0C2037CC81232A9786D
-:1016700096E6FC120F6978A9E62404F58218E63490
-:1016800000F583E04430F0C2037CF01232A9789672
-:10169000E6FC120F6978A9E62405F58218E6340005
-:1016A000F583E030E414C2037896E644107F00FE30
-:1016B0007C071231FB123169805D78A9E62404F5BC
-:1016C0008218E63400F583E054EFF078A9E62404AC
-:1016D000F58218E63400F583E054DFF07896E624CE
-:1016E000FD75F00AA42414F582E434FCF583AC8281
-:1016F000AD8378A68683088682ECF9EDFA7B0A78BA
-:10170000011203A7C2037896E6FC1211077D007C44
-:101710000B122526123169221230E6E490FC39F0D2
-:101720007D027C00122526123169221230E67C00EF
-:101730001225BF12316922743C90FBE0F0743E9098
-:10174000FBE0F0E490FC28F0228D358C34ECB40101
-:10175000028003D340028028B402028003D34008F1
-:10176000A835C625E0F68018B404028003D3400AE9
-:10177000A835C625E025E0F68006A835760080006D
-:10178000228C3C8D3BEDFEECFD7F01756606756796
-:101790000090FC2912046E1201E6B480028006D388
-:1017A000500302184790FC29120480900003120194
-:1017B000EC54F0B430028003D3405F90FC29120453
-:1017C0008090000812020EFAFDEBFE7F0190FC2CC7
-:1017D00012046EEECD903571FCE493FF740193FE1C
-:1017E000F9EFFA7B01EAFFE9FEECC39EED9F40258D
-:1017F000903573E493FD740193FCEDFEECFD7F01E5
-:10180000EECDFC90FC2EE0D39C90FC2DE09D50058D
-:101810007566808033121965802EB460028003D310
-:10182000400BAC3CAD3B1207778C66801BB41003B9
-:10183000B34010C3B42003B34009C3B440028003D3
-:10184000D3400075668180008075B481028003D327
-:10185000406B90FC291204809000031201EC54F0BC
-:10186000B430028003D3401D90FC29120480900004
-:101870000812020EFAFDEBFE7F0190FC2F12046E9F
-:101880001218CF8036B460028003D34013753A67D4
-:10189000E4F539F538AC3CAD3B1205D38C66801BC2
-:1018A000B41003B34010C3B42003B34009C3B44021
-:1018B000028003D34000756681800080028000E5CD
-:1018C00066FC90FC29120480EC900002120317AC15
-:1018D000672290FC291204809000041201EC60043D
-:1018E00074018001E4A2E0920190FC29120480EDD1
-:1018F0002403FD50010E90FC2C12046E90FC291262
-:1019000004809000051201ECF5679000041201ECD0
-:10191000540FFC7D67121746E56770047566082250
-:10192000756600788476007884E6C39567503890B1
-:10193000FC2F1204801201E6FC90FC2C120480ECB7
-:1019400012030F30010E90FC31E004F090FC307077
-:1019500003E004F078840690FC2EE004F090FC2D67
-:101960007003E004F080C02290FC2AE0FDA3E0FCBC
-:10197000EDFEECFD7F01ED240AFD50010E90FC32DE
-:1019800012046E90FC291204809000041201EC54A1
-:101990000FB401028003D3401790FC321204800D73
-:1019A000ED70010E90FC2F12046E78887601804E47
-:1019B000B402028003D3401990FC32120480ED245B
-:1019C00002FD50010E90FC2F12046E788876028082
-:1019D0002DB404028003D3401990FC32120480ED30
-:1019E0002404FD50010E90FC2F12046E78887604BA
-:1019F000800CB400028003D340007566082290FC7E
-:101A0000291204809000051201ECF56778857600B4
-:101A10007885E6C395674003021ACD78867600780C
-:101A200086E6C3788896507690FC2C1204801201CA
-:101A3000E6FC90FC321204891201E0F45CFC120115
-:101A4000E0F890FC2F120480E8C0E01201E6C8D054
-:101A5000E0C8584CFC90FC2C120480EC12030F7868
-:101A600087ECF690FC31E004F090FC307003E00469
-:101A7000F009E970010A90FC3212047790FC2912F7
-:101A800004809000041201EC30E40E90FC2EE0047F
-:101A9000F090FC2D7003E004F07886068081788851
-:101AA000E6FDE4FEFFEECDFC90FC31E02CF090FC76
-:101AB00030E03DF07888E6FDE4FEFFEECDFC90FCE2
-:101AC00034E02CF090FC33E03DF0788506021A0DEE
-:101AD00075660022E53D053D047002B2B022C0E00B
-:101AE000C0F0C082C083C0D0E8C0E0E9C0E0EAC076
-:101AF000E0EBC0E0ECC0E0EDC0E0EEC0E0EFC0E045
-:101B000090FF92E01201B71B29301B29321B383895
-:101B10001B4A3A1B5C3E1B74441B68461B80501BCF
-:101B2000C2521BA1541BE35600001C0490FF92E01C
-:101B30007F00FE7C011231FB021C14E4FF04FE7CDA
-:101B4000031231FB742090FFFEF0021C14E4FF042A
-:101B5000FE7C021231FB744090FFFEF0021C14E484
-:101B6000FF04FE7C041231FB021C14E4FF04FE7C23
-:101B7000051231FB021C14E4FF04FE7C061231FB4B
-:101B8000021C1490FFA5E07D0090FBF8CDF0A3CDE2
-:101B9000F090FBF9E0FCF58390FBF8E04433FD1294
-:101BA0001CA7807390FFB5E07D0090FBFACDF0A3F9
-:101BB000CDF090FBFBE0FCF58390FBFAE04443FDA5
-:101BC000121CA7805290FFA6E07D0090FBFCCDF098
-:101BD000A3CDF090FBFDE0FCF58390FBFCE04434EA
-:101BE000FD121CA7803190FFB6E07D0090FBFECD7A
-:101BF000F0A3CDF090FBFFE0FCF58390FBFEE0440A
-:101C000044FD121CA7801090FF92E07D00FCED4483
-:101C1000AAFD121CA78000E490FF92F0D0E0FFD054
-:101C2000E0FED0E0FDD0E0FCD0E0FBD0E0FAD0E078
-:101C3000F9D0E0F8D0D0D083D082D0F0D0E0320517
-:101C400081058105810581A881181818EDF608EC39
-:101C5000F690FF5AE020E70280F790FF59E07D0000
-:101C6000A88118CDF6CD08F67D03A881E618FCE61C
-:101C7000CC25E0CC33CCDDF9CCF6CC08F6A8811825
-:101C8000E644F8F6A881181818E6FD08E6FCA881D5
-:101C9000188683088682EDF0A3ECF0740290FF5A58
-:101CA000F0158115811581158122E5812405F581C5
-:101CB000E4A88118F6A88118181818EDF608ECF6B3
-:101CC00090FBF5E024F85003021DC8E4A881181821
-:101CD000F6A88118E6FEA88118181818E6FD08E68F
-:101CE000FC7F00EF24F8404DE4EF25E0247DF582F1
-:101CF000E434FCF583E0FBA3E06C7003FAEB6D7059
-:101D0000097401A8811818F6802BE4EF25E0247DE2
-:101D1000F582E434FCF5837A00E054F0CCF8CCCDC5
-:101D2000F9CDFB7800E954F0F9EA687002EB6970CC
-:101D3000010E0F80AEA88118EEF6A88118181818A9
-:101D4000EDF608ECF6A881EFF6A8811818E6707990
-:101D5000A88118E624F74071A88118181818E654CD
-:101D60000FA881F664046017A881E664036010A8D8
-:101D70008118181818E6FD08E6FC121C3C804A7C05
-:101D80000A12315BA88118181818E6FD08E6FC90C5
-:101D9000FBF4E025E0247DF582E434FCF583EDF0EE
-:101DA000A3ECF090FBF4E0FFE4EF045407FF90FB9A
-:101DB000F4F090FBF5E004F01231F490FBF6E070E3
-:101DC00008E4FEFF7C0F1231FB802790FBF7E00454
-:101DD000F0543F701D90FBF7E044FE7D00FC90FB4B
-:101DE000F4E025E0247DF582E434FCF583EDF0A3F6
-:101DF000ECF0E58124FBF58122788B7600788C76F7
-:101E000000740190FBF6F01230E690FBF5E06057AD
-:101E10007C0A12315B90FBF3E025E0247DF582E43F
-:101E200034FCF583E0FDA3E0FC90FBF3E025E02427
-:101E30007DF582E434FCF583E4F0A3F090FBF3E05D
-:101E4000FFE4EF045407FF90FBF3F090FBF5E01480
-:101E5000F07889EDF608ECF61231F47889E6FD08A1
-:101E6000E6FC1208DA80A312324890FF93E04401A6
-:101E7000F0B2B3788B06B60011788B7600788CE6DA
-:101E8000F40404A2E092B4788CF6021E07E490FBFE
-:101E9000F6F090FBF5E07D00FCED44CFFD121C3C1C
-:101EA000123169221230E6E5706449456F60159081
-:101EB000FF83E0540F7D00D39570ED956F500512B0
-:101EC0002F2F8003122FFF123169221230E6E570A6
-:101ED0006449456F6005123039800E90FF80E04400
-:101EE00008F090FF83E0547FF0123169221230E64F
-:101EF0008C54EC54F0B41015756A357569FC75682E
-:101F000001E56A2403F56AE5693400F569E4F557EB
-:101F1000F556E556C394015027E554540FFCAD6ABD
-:101F2000AE69AF68120E778C55EC60028012056ABC
-:101F3000E56A700205690557E5577002055680D2BB
-:101F4000E554540F249DF8C654FEF6E554540F7F13
-:101F500000FE7C121231FBE5551470097D007C09EE
-:101F60001225268007AD577C0012252612316922E2
-:101F70001230E690FFFCE04402F090FF00E030E712
-:101F80001390FF83E04480F0436D8090FFFCE044B9
-:101F900001F0801190FF82E04408F0536D7F90FFC4
-:101FA000FCE054FEF090FF81E04480F01225D990CF
-:101FB000FFFEE04405F090FFFCE054FDF0123169B3
-:101FC000221230E67C011232A978ADE64402F674A2
-:101FD000FEFC04FD121CA790FF5AE030E70280F7D8
-:101FE000E4F54E754D10AC4EAD4DE54E154E7002FC
-:101FF000154DEC4D600280EE4387011231692212CB
-:1020000030E67C0212317578ADE654FDF612316986
-:10201000221230E678ADE630E02C78ADE630E126ED
-:1020200078ADE6FCF58318E644F0FD121C3C90FF09
-:10203000FCE04420F07C021232A978ADE654FDF6B3
-:10204000741A90FFFEF078ADE6FCF58318E644F1D3
-:10205000FD121C3C12316922756D0090FFFFE0609B
-:1020600003436D01756E00E4F56CF56BE4F56F7577
-:102070007049748490FF82F0748490FF80F07480C3
-:1020800090FF58F0748090FF5AF0AD46AF457E0047
-:10209000EE24FE5003022124E4EE75F007A4247F11
-:1020A000F582E434F8F583E0FFE4EF5480FDE4EFDB
-:1020B000540F14FFED6038E4EF75F008A42448F5E0
-:1020C00082E434FFF5837490F0E4EF75F008A42403
-:1020D0004AF582E434FFF5837480F0E4EF75F0088C
-:1020E000A4244EF582E434FFF5837480F08034E458
-:1020F000EF75F008A42408F582E434FFF5837490AA
-:10210000F0E4EF75F008A4240AF582E434FFF583C7
-:10211000E4F0E4EF75F008A4240EF582E434FFF552
-:1021200083E4F00E02208D8D468E448F45747F909F
-:10213000FFFDF0749090FFFCF0228C58EC24F650D8
-:1021400006E5582437FC22E5582430FC22122523CA
-:10215000EC700302225E755C03AE5B7F00E55C15EC
-:102160005C6480247F5035EF2400F582E434FBF575
-:1021700083E0FE24FE501EEF7D00FCE4FB7474C37C
-:102180009CFAEB9DFBEE7D00FCEAC39CED6480CBEA
-:1021900064809B50028005EF2EFF80C18E5B8F5ABA
-:1021A000E55C6480247F500302225EE55A248E5051
-:1021B0000302225E855A5D755B00AE5AAF5B9035B7
-:1021C0009CE493F55CE55C155C6480247F5018EE1C
-:1021D0002400F582E434FBF583E0FCEF90359C931A
-:1021E0006C70040E0F80DE8E5A8F5BE55C64802479
-:1021F0007F406E755E017560E8755FFFE55D2402E6
-:10220000F55A755C07E55C334057AD60AE5FAF5E75
-:10221000E55CF5823395E0F5831201ECC4540FFCC4
-:10222000122137E55A2400F582E434FBF583ECF003
-:10223000055A055AAD60AE5FAF5EE55CF582339539
-:10224000E0F5831201EC540FFC122137E55A24000B
-:10225000F582E434FBF583ECF0055A055A155C80F1
-:10226000A4740290F851F090F86B79757A357B2759
-:1022700078011203F5756A357569FC756801E4909B
-:10228000FF83F0748090FF81F0755902E55975F075
-:1022900007A4247FF582E434F8F583E0788FF6FC18
-:1022A000540F14FC788FECF6E55975F007A42481DF
-:1022B000F582E434F8F583E0789276FD0876E8FC60
-:1022C000788FE675F008A42448F582E434FFF5839E
-:1022D000E4F0788FE675F008A4244FF582E434FF2B
-:1022E000F583ECF07892E6FF08E67E03CFC313CFC8
-:1022F00013DEF9FE788FE675F008A42449F582E430
-:1023000034FFF583EEF0788FE675F008A4244AF5E3
-:1023100082E434FFF5837480F07890ECF67D0078E9
-:1023200093E62CF618E63DF67892E6FD08E67C0387
-:10233000CDC313CD13DCF9FC788FE675F008A42427
-:102340004DF582E434FFF583ECF0788FE675F00804
-:10235000A4244EF582E434FFF583E4F07892E6FDA0
-:1023600008E6FC788FE6FF7E00EE24FE5003022490
-:10237000DDE4EE75F007A4247FF582E434F8F583FC
-:10238000E0FFE4EF5480FAE4EF540F14FFE4EE753D
-:10239000F007A42481F582E434F8F583E07890F620
-:1023A000E4EE1313548024F0F8E434FDF9E8FCE97A
-:1023B000FD8A5AEA700302244AE4EF75F008A42467
-:1023C00048F582E434FFF583E4F07890E6FAE4EF30
-:1023D00075F008A4244FF582E434FFF583EAF0EDAC
-:1023E000FBEC7A03CBC313CB13DAF9FAE4EF75F005
-:1023F00008A42449F582E434FFF583EAF07890E6F6
-:102400007B00FAEC2AFCED3BFDFBEC7A03CBC3131B
-:10241000CB13DAF9FAE4EF75F008A4244DF582E461
-:1024200034FFF583EAF0E4EF75F008A4244AF5825E
-:10243000E434FFF5837480F0E4EF75F008A4244ED3
-:10244000F582E434FFF5837480F00224D9E4EF755B
-:10245000F008A42408F582E434FFF583E4F07890D2
-:10246000E6FAE4EF75F008A4240FF582E434FFF5F2
-:1024700083EAF0EDFBEC7A03CBC313CB13DAF9FA62
-:10248000E4EF75F008A42409F582E434FFF583EA4B
-:10249000F07890E67B00FAEC2AFCED3BFDFBEC7A51
-:1024A00003CBC313CB13DAF9FAE4EF75F008A424D5
-:1024B0000DF582E434FFF583EAF0E4EF75F008A44B
-:1024C000240AF582E434FFF583E4F0E4EF75F008C4
-:1024D000A4240EF582E434FFF583E4F00E022366B3
-:1024E0008E597892EDF608ECF6788FEFF6122055BB
-:1024F000228C26EC30E718E526540F1475F008A45A
-:102500002448F582E434FFF583E054DFF08016E5DB
-:1025100026540F1475F008A42408F582E434FFF55E
-:1025200083E054DFF0227C0022EC90FC37F08C2416
-:10253000ED2403F5257D00D39572ED95714003855B
-:102540007225E52524B75009752503740290FC37E0
-:10255000F0AC2512302422E4F56CF56B12255D22D7
-:1025600090FC35E06573600E740490FC37F0E4F580
-:102570006B756C0380467D73E4FEFF79357AFC7BD6
-:10258000017405780012033FE56C2403F56CE56BDC
-:102590003400F56BE56CD39572E56B95714006855B
-:1025A000726C85716BD3E56C9448E56B9400400CBC
-:1025B000740290FC37F0E4F56B756C03AC6C123070
-:1025C0002422EC90FC37F0E4F56CF56B8C32EC6077
-:1025D0000512301580057C001230242290FF93E014
-:1025E0004401F0B2B390FF04E0F54A90FF06E0FD2D
-:1025F000A3E0ED7D00FC7D00FC90FF06E0FFA3E082
-:102600007E00FFE4FEEC4EFCED4FFDC3EC9448ED84
-:102610009400502290FF06E0FDA3E0ED7D00FC7DDC
-:1026200000FC90FF06E0FFA3E07E00FFE4FEEC4E1E
-:10263000FCED4FFD8004E4FD7C488C728D7190FFB1
-:1026400002E0FDA3E0ED7D00FC7D00FC90FF02E0D8
-:10265000FFA3E07E00FFE4FEEC4EF54CED4FF54BA2
-:10266000756A357569FC7568017D357EFC7F017979
-:1026700073E4FAFB7405780012033F754900E549DD
-:1026800024FE4019AD6AAE69AF68E412030F054934
-:102690000DED70010E8D6A8E698F6880E1756A3567
-:1026A0007569FC75680190FF00E05460B400028019
-:1026B00006D35003022C6DE54A540FF549E54A5400
-:1026C00080A2E0920290FF01E0120181000B2C68D1
-:1026D00026E528032C68290F2C6829F22A262B8D41
-:1026E0002B902BD02C112C3FE56D30E70EE54C459F
-:1026F0004B7008E572640245716003022C6A90FF1A
-:1027000000E0541FB400028003D34029E54A60036F
-:10271000022800AD6AAE69AF68740112030F78AD8C
-:10272000E630E00BAD6AAE69AF68740212030F7C4D
-:102730000212302422B401028003D3401BE56D2035
-:10274000E107E54A6003022800E54A24FE5003023F
-:1027500028007C0212302422B402028006D35003E7
-:102760000227FEE56D20E10DE54A6009E54A648037
-:102770006003022800AC4A1230AB4003022800E597
-:1027800049702530021190FF80E05408AD6AAE69AF
-:10279000AF6812030F800F90FF82E05408AD6AAE5D
-:1027A00069AF6812030F803D154930021DE5497578
-:1027B000F008A42448F582E434FFF583E05408AD22
-:1027C0006AAE69AF6812030F801BE54975F008A473
-:1027D0002408F582E434FFF583E05408AD6AAE695D
-:1027E000AF6812030FAD6AAE69AF681201E6600B05
-:1027F000AD6AAE69AF68740112030F7C0212302417
-:10280000228000022C6AE56D20E706E572457160C2
-:1028100003022C6A90FF00E0541FB400028003D32F
-:10282000401AE54C14454B7004E54A600302290C3C
-:1028300078ADE654FEF67C0012302422B40102800A
-:1028400003D3402AE56D20E108E56D20E00302296D
-:102850000CE56D30E004E54A700BE56D30E109E50B
-:102860004A24FE500302290C7C0012302422B402B8
-:10287000028006D3500302290AE54C454B6003024F
-:10288000290CAC4A1230AB400302290CE56D20E163
-:1028900007E56D20E0028077E56D30E006E54960F0
-:1028A00002806CE549700F90FF82E054F7F090FFD2
-:1028B00080E054F7F022E549B401028003D34009D7
-:1028C0007D017C03120F098011B402028003D34002
-:1028D000097D017C04120F0980001549300215E5BD
-:1028E0004975F008A42448F582E434FFF583E054E8
-:1028F000F7F08013E54975F008A42408F582E43464
-:10290000FFF583E054F7F07C0012302422800002AF
-:102910002C6AE56D20E706E57245716003022C6ABA
-:1029200090FF00E0541FB400028003D3401AE54C2E
-:1029300014454B7004E54A60030229EF78ADE64484
-:1029400001F67C0012302422B401028003D3402916
-:10295000E56D20E108E56D20E0030229EFE56D302B
-:10296000E004E549700BE56D30E108E54924FE50CF
-:1029700002807F7C0012302422B402028003D34004
-:102980006FE54C454B60028069AC4A1230AB4002A7
-:102990008060E56D20E107E56D20E0028054E549A7
-:1029A000701430020990FF80E04408F0800790FF27
-:1029B00082E04408F022E56D30E13315493002151C
-:1029C000E54975F008A42448F582E434FFF583E076
-:1029D0004408F08013E54975F008A42408F582E462
-:1029E00034FFF583E04408F07C001230242280029A
-:1029F0008000022C6AE56D20E712E5724571700CCB
-:102A0000E54A700890FF00E0541F6003022C6AE55D
-:102A10004C90FFFFF090FFFFE06005436D018003E5
-:102A2000536DFE7C0012302422E56D30E70EE57216
-:102A30004571600890FF00E0541F6003022C6AADEE
-:102A40004BE54CED7D00FC7D00FCBD0002800302E7
-:102A50002B88B401028003D34032E54A7005E54C6F
-:102A6000FC6003022B8A756A407569F8756801D3AA
-:102A7000E5729412E57194004006E4FD7C12800436
-:102A8000AC72AD718C708D6F12303922B40202803D
-:102A900003D34059E54A6003022B8AE54CFC7027BA
-:102AA000756A527569F8756801D3E5729419E57114
-:102AB00094004006E4FD7C198004AC72AD718C700A
-:102AC0008D6F1230398025756A6B7569F8756801EC
-:102AD000D3E5729427E57194004006E4FD7C2780DD
-:102AE00004AC72AD718C708D6F12303922B4030258
-:102AF0008006D35003022B88E54CF549700F90FFF8
-:102B000004E0FDA3E04D6003022B8A801890FB02D5
-:102B1000E0FDA3E0FC90FF05E06C700790FF04E08F
-:102B20006D60028068E4F570F56F7F00E54914C5BB
-:102B300049600FEF2400F582E434FBF583E02FFFBA
-:102B400080EA8F4AE54A2400F582E434FBF583E00D
-:102B50007D00D39572ED95714006AC72AD71800F1A
-:102B6000E54A2400F582E434FBF583E07D00FC8C2B
-:102B7000708D6FE54A2400FCE434FBFDFEECFD7F24
-:102B8000018D6A8E698F68123039228000022C6AAA
-:102B9000022C6AE56D30E719E5721445717012E593
-:102BA0004A700EE54C454B700890FF00E0541F60E2
-:102BB00003022C6AE56D20E008E56D20E103022C9C
-:102BC0006A756A6EE4F569F568E4F56F04F57012EC
-:102BD000303922E56D20E712E5724571700CE54A47
-:102BE000700890FF00E0541F6003022C6AE56D201E
-:102BF000E007E56D20E1028074854C6EE56E70089B
-:102C0000436D01536DFD8006536DFE436D027C00E4
-:102C100012302422E56D30E71AE572144571701305
-:102C2000E54A700FE54C454B700990FF00E0541FDA
-:102C30001460028038E56D20E10280317C011230A1
-:102C40002422E56D20E715E5724571700FE54C45CE
-:102C50004B700990FF00E0541F146002800FE56D77
-:102C600020E10280087C00123024228000022F2BF9
-:102C7000B440028006D35003022F2190FF01E09060
-:102C8000FC35F0E54A90FC36F0E490FC37F0E56A5C
-:102C90002403F56AE5693400F569AD4BE54C856AB6
-:102CA00082856983CDF0A3CDF090FF01E01201B7DA
-:102CB0002CD8012CFE022D28032D52042DA0052D09
-:102CC000DD062E03072E29082E55092E7B0B2EA17B
-:102CD0000C2EB0802EB08100002F0EE56D20E7068F
-:102CE0007C051225BF227D247E357F0279387AFC4F
-:102CF0007B017408780012033F7D087C00122526B2
-:102D000022E56D20E7067C051225BF22E54AB403C3
-:102D1000004010B40500500BE54A7F00FE7C101205
-:102D200031FB227D007C0712252622E56D20E70677
-:102D30007C051225BF22E54AB403004010B405000B
-:102D4000500BE54A7F00FE7C111231FB227D007C96
-:102D50000712252622E56D20E7067C051225BF22F5
-:102D6000E54AB405028003D3400AE4FF04FE7C0A6E
-:102D70001231FB22B401028003D3400AE4FF04FEB7
-:102D80007C081231FB22B403004010B40500500B44
-:102D9000E54A7F00FE7C131231FB227D007C071286
-:102DA000252622E56D20E734D3E5729448E5719439
-:102DB000005006E572457170067C021225BF22E5BF
-:102DC0004AB40103B3400BC3B403004009B4060086
-:102DD00050041230D1227C071225BF2212255D2219
-:102DE000E56D20E71DE54AB403004010B40500502E
-:102DF0000BE54A7F00FE7C161231FB227C07122570
-:102E0000BF2212255D22E56D20E71DE54AB40300CF
-:102E10004010B40500500BE54A7F00FE7C191231CA
-:102E2000FB227C071225BF2212255D22E56D20E7DB
-:102E300023748190FF93F0E54AB403004010B40579
-:102E400000500BE54A7F00FE7C171231FB227C0705
-:102E50001225BF2212255D22E56D20E71DE54AB44B
-:102E600003004010B40500500BE54A7F00FE7C18BB
-:102E70001231FB227C071225BF2212255D22E56D4F
-:102E800020E71DE54AB403004010B40500500BE5EF
-:102E90004A7F00FE7C151231FB227C071225BF22DF
-:102EA00012255D22E56D20E7067C071225BF221260
-:102EB000255D22E56D30E72090FF00E0541F701083
-:102EC00090FF01E0B48005122554800312255D2295
-:102ED0007D007C051225262290FF00E0541F60062D
-:102EE0007C051225BF22D3E5729448E57194005009
-:102EF0000BC3E5729407E571940050067C0312251C
-:102F0000BF22E54AB405041230D1227C071225BF46
-:102F100022E56D30E7087D007C05122526227C0520
-:102F20001225BF22B420028003D340008000122F5C
-:102F3000FF2275430090FF83E0540FD39543402454
-:102F4000E54324F0F582E434FEF583E0AD6AAE6932
-:102F5000AF6812030F05430DED70010E8D6A8E6987
-:102F60008F6880D1E5437D00FCC3E5709CF570E57A
-:102F70006F9DF56FE570456F6006E490FF83F0226A
-:102F800090FF82E04408F0E4F56F75704990FC35DD
-:102F9000E0B405028003D3404090FC36E0F543B432
-:102FA00005028003D3400AE4FF04FE7C0B1231FBD0
-:102FB00022B401028003D3400AE4FF04FE7C09121C
-:102FC00031FB22B403004010B40500500BE5437FF1
-:102FD00000FE7C141231FB2222B480004023B48214
-:102FE00000501E7C357DFC12177E7D008C6C8D6B35
-:102FF00090FC37E06005122FFF80057C0012302422
-:10300000222290FF83E0547FF090FF82E04408F09A
-:1030100090FF80E04408F02290FF82E04408F090A6
-:10302000FF80E04408F0228C237D008C708D6F754A
-:103030006A357569FC7568011230392290FF83E0AA
-:10304000547FF0E5706449456F700122C3E57094C8
-:1030500008E56F94004015752108E5217D00FCC34B
-:10306000E5709CF570E56F9DF56F8009857021E432
-:10307000F56F757049752200E522C395215026AD84
-:103080006AAE69AF681201E6FCE52224F8F582E435
-:1030900034FEF583ECF005220DED70010E8D6A8E85
-:1030A000698F6880D3E521547F90FF81F0228C489E
-:1030B0007F00EF24FD4019E4EF75F007A4247FF5AD
-:1030C00082E434F8F583E065487002D3220F80E291
-:1030D0008F47C32285727085716F90FF82E054F72D
-:1030E000F090FF83E0547FF022C000C001C002C016
-:1030F00006C007E5782408F8860653067F7CFF1291
-:10310000315B7C007D00E57B6046FF90FD95E054DF
-:103110007F6E700FC083C082A3E0FDA3E0FCA31507
-:103120007B8007A3A3A3DFE68026DF06D082D083BF
-:10313000801EE0F8A3E0F9A3E0FAD082D083E8F0A3
-:10314000A3E9F0A3EAF0A3C083C082A3A3A380DA1B
-:103150001231F4D007D006D002D001D0002285A8C9
-:103160007A75A888EC70027C3F8C7922E578240877
-:10317000F8760012324880FBC000C001C002C006D1
-:10318000C007AE047CFF12315BE57B6042FF90FD1F
-:1031900095E0547F6E700BC083C082A3A3A3157B00
-:1031A0008007A3A3A3DFEA8026DF06D082D0838036
-:1031B000D8E0F8A3E0F9A3E0FAD082D083E8F0A346
-:1031C000E9F0A3EAF0A3C083C082A3A3A380DA78C6
-:1031D00008087918097C01E6547F6E70067600773E
-:1031E00000800608090CBC08EE1231F4D007D006A6
-:1031F000D002D001D00022757900857AA822C0F0D3
-:10320000C082C083C3E57B24E8500512324880F4B5
-:10321000EC6031903523E493C39C4028C0047CFFCC
-:1032200012315BD004430480E57B75F003A4249540
-:10323000F582E434FDF583ECF0EFA3F0EEA3F005A6
-:103240007B1231F4D083D082D0F022C0047C20D213
-:103250008CD28DD504FDD0042275A8007588007528
-:10326000B80075F00075D000E4F8900000F608B8DA
-:1032700000FB020000C3ED940250047D037CE8ECE7
-:10328000F4FCEDF4FD0CBC00010D8C7F8D7E22C39F
-:10329000EC94BCED940250047D077CD0ECF4FCED82
-:1032A000F4FD0CBC00010D8C7D8D7C22EC700122A4
-:1032B000C000E5782418F8A604E5782408F8C65478
-:1032C0007FF6E630E703D0002212324880F4C28C49
-:1032D000857C8C857D8AD28CC0E0C0D0C0F0C08255
-:1032E000C083C000C001C002C003C004C005C00646
-:1032F000C007121AD1E5782408F8E66024E578249E
-:1033000010F8A681E57875F021A4248DF582E434C7
-:10331000FCF58378AEE58104C398F9E6F008A3D9FB
-:10332000FA74082578F8057808E65480700CE5787A
-:10333000B407F3780875780080EFE5782410F886F4
-:1033400081E57875F021A4248DF582E434FCF583C1
-:1033500078AEE58104C398F9E0F608A3D9FAD0075E
-:10336000D006D005D004D003D002D001D000D08345
-:10337000D082D0F0D0D0D0E032C0E0C0D0C000C009
-:1033800001C002C28E857E8D857F8BD28E781979A1
-:10339000097A07E77004A600800BE6600816E6705D
-:1033A00004E74480F70809DAEAE579601314F5794F
-:1033B000700EE5782408F876001231F4D28CD28DA4
-:1033C000D002D001D000D0D0D0E0327581AD742AC7
-:1033D00090FF93F0757F30757EF8757D60757CF099
-:1033E00012053612347C12173490FF93E04401F03A
-:1033F000B2B31234A612325680DA22C0007C01EC3D
-:103400002408F8E660090CBC08F512324880EED0BA
-:103410000022C0F0C082C083C000C006C007ED24F7
-:1034200010F876BCED75F021A4248DF582E434FC0F
-:10343000F583C082C083A3A3E4780DF0A3D8FCEC8D
-:10344000547F75F002A424EFF582E5F03434F5835F
-:10345000E493FE740193F5828E83E493FE740193EA
-:10346000FFD083D082EFF0A3EEF0ED2408F8EC4417
-:1034700080F6D007D006D000D083D082D0F022755D
-:103480007800757B007A087918780876007700084C
-:1034900009DAF8E478087480447FF674014410F582
-:1034A0008975B808D2ABD2A9227581ADD28ED28CE3
-:1034B000D2AFE57B6032FF90FD95E05480602478C8
-:1034C000087908E0547FFA7B00E6547FB502027B5E
-:1034D000FF08D9F5EB700CEAF01233F8AD04AC023A
-:1034E00012340FA3A3A3DFD212324880C57C017D22
-:1034F000002204F504E904ED04E104DD04D904E547
-:1035000004F1049D04A104CD04D104990499049903
-:1035100004D504B504AD04B104A904C104BD04B9C3
-:1035200004C504C904A5190103002200480200488B
-:103530000E301420C81AD0180A0C05060203010226
-:103540000001CE0181010000C00080006000300059
-:1035500018001000080004000200010008183828B4
-:103560000C05100A0200000000000301100A02000E
-:1035700000000000FBE0FBF209022700010200A0AE
-:10358000320904000003FF0000000705810240002B
-:103590000007050102400000070583030200012225
-:1035A0000354005500530042003300340031003012
-:1035B000002000200020002000200020002000200B
-:0535C000000000000006
-:00000001FF
diff --git a/firmware/ti_5052.fw.ihex b/firmware/ti_5052.fw.ihex
deleted file mode 100644
index b529e07cd6ec..000000000000
--- a/firmware/ti_5052.fw.ihex
+++ /dev/null
@@ -1,862 +0,0 @@
-:10000000C1350002001E021B32FFFFFFFFFF02325C
-:100010006AFFFFFFFFFFFFFFFFFFFFFFFFFF02334E
-:10002000157581C890FEF08583A012347DEC4D607B
-:100030006A78A58003760018B896FA7879800376F6
-:100040000018B85FFA78208003760018B820FA907C
-:10005000FEE5AE83AF8290FD001200A16005E4F0E2
-:10006000A380F690FEF0A88290FEF0A982E8C399E2
-:10007000500576000880F69000FF1200AA90010358
-:100080001200AA9001071200AA90010B1200C8905A
-:1000900001111200C89001171200C875D000123368
-:1000A0006702011DEF65827003EE658322E493F819
-:1000B000740193F9740293FE740393F5828E83E8BE
-:1000C00069700122E493F6A30880F4E493FC7401C0
-:1000D00093FD740293FE740393FF740493F8740504
-:1000E00093F58288831200A1700122E493A3A88370
-:1000F000A9828C838D82F0A3AC83AD8288838982B0
-:1001000080E3212104927A7A0492A6A80492FEF058
-:1001100004940494FBFB04990494FBFB04F904F994
-:1001200080FED0F030F00920F303F68010F7800D48
-:1001300030F10920F303F28004F38001F020F4048D
-:10014000FCD0E0CC22CCC0E012015A02014BBC0032
-:1001500005D0F0ACF022C313DCFC020121BF000982
-:10016000ED258275F001F8E622BF010FED2582F53D
-:1001700082EE3583F58375F004E022ED258275F07B
-:1001800002F8E222D083D082F5F0C3E493A3C5F055
-:1001900095F0C0E0C3D0F0E493A395F04012A3A380
-:1001A000C3E5F033500205832582F58250020583B2
-:1001B000740193C0E0E493C0E022D083D082F5F0D4
-:1001C000E49370097401937004A3A3800C740293E8
-:1001D00065F06005A3A3A380E7740193C0E0E493F6
-:1001E000C0E02212025B0201F21202AF0201F2121F
-:1001F00002D30201F230E00720E302E622E72230D8
-:10020000E10720E302E222E32230E202E022E4936B
-:10021000221202D302021A1202AF02021AABF01229
-:100220000224CBC5F0CB2230E01020E306E6F5F047
-:1002300008E622E7F5F009E7192230E11020E3068D
-:10024000E2F5F008E222E3F5F009E3192230E206D4
-:10025000E0F5F0A3E022E493F5F074019322BB00F3
-:1002600003740922BB010789828A83740422BB02BA
-:100270000789828A83741022740A2202027BBB00DF
-:1002800007E92582F8740122BB010DE92582F58278
-:10029000EA3583F583740422BB020DE92582F582D9
-:1002A000EA3583F583741022E92582F8740222026C
-:1002B00002AFBF0005EDF8740122BF01078D828EE9
-:1002C00083740422BF02078D828E83741022EDF89E
-:1002D0007402220202D3BF0007ED2582F8740122C6
-:1002E000BF010DED2582F582EE3583F5837404227E
-:1002F000BF020DED2582F582EE3583F58374102261
-:10030000ED2582F8740222020307C0E012025B02AC
-:10031000031FC0E01202AF02031FC0E01202D302AB
-:10032000031F30E00B20E304D0E0F622D0E0F722F8
-:1003300030E10B20E304D0E0F222D0E0F322D0E061
-:10034000F022C9CDC9CACECACBCFCB120352EDF928
-:10035000EEFAEFFB22BB002FBF000AFAEDF8E7F63A
-:100360000809DAFA22BF01128D828E83F802036F28
-:1003700009A3E7F0D8FA2202037AFAEDF8E7F208C7
-:1003800009DAFA22020384BB014DBF001489828A74
-:1003900083F9EDF802039608A3E0F6D9FA220203E6
-:1003A000A7BF01228D828E83FB08C9C582C9CAC539
-:1003B00083CAE0A3C9C582C9CAC583CAF0A3DBEA60
-:1003C000D8E8220203CA8D828E83F9EDF8E0F208A4
-:1003D000A3D9FA220203D4BB024DBF001289828A3C
-:1003E00083F9EDF80203E608A3E493F6D9F922BFF6
-:1003F00001238D828E83FB08C9C582C9CAC583CA01
-:10040000E493A3C9C582C9CAC583CAF0A3DBE9D8EE
-:10041000E72202041989828A83F9EDF8E493F2084D
-:10042000A3D9F92202042ABF000DFAEDF8E3F60879
-:1004300009DAFA22020434BF01128D828E83F80297
-:10044000044109A3E3F0D8FA2202044CFAEDF8E3E0
-:10045000F20809DAFA22020456E6FB08E6FA08E690
-:10046000F904F61870010622E6FF08E6FE08E6FD2C
-:1004700022EFF0A3EEF0A3EDF022EBF0A3EAF0A35D
-:10048000E9F022E0FFA3E0FEA3E0FD22E0FBA3E011
-:10049000FAA3E0F9220000000000000004F9005B6C
-:1004A00005730026059A00330A0B005B0A7700608B
-:1004B0001552005B0CFB005B09AB005B09E2005BC3
-:1004C0000DC2005B0BF3005B0A1E005B0A53005B6E
-:1004D000174A0033176000341E4D00431EF00044DD
-:1004E000205D0044204B00471F1700471FBC004DF4
-:1004F000200D004F1F39005831F5005B7CCC7DFF8B
-:10050000121CFE22749090FF91F090FFFCE020E717
-:100510002DC2AFAE59AF58755A20E55A14C55A606E
-:1005200019E4FE7F05EE4FCE24FFCECF34FFCF601F
-:1005300007E490FF92F080ED80E08E598F582212F0
-:1005400005017D077CB71232117D0F7C6E12322BB4
-:1005500078977A06E4F608DAFC7A061205CF7C036F
-:10056000120E577C04120E5712218BE4FEFF7C0FF3
-:1005700012319AD2A822123085E490FD40F090FF0B
-:10058000F0E030E408740190FD41F08005E490FD56
-:1005900041F07D0A7C001224B1123108221230850C
-:1005A00090FD41E014700E90FFF0E04410F07C00EC
-:1005B00012254A801990FD41E0700E90FFF0E05442
-:1005C000EFF07C0012254A80057C1712254A123173
-:1005D000082290FFF0E054ABF090FFF0E04420F0F0
-:1005E000228C378D36787CEDF608ECF6EDFEECFDCE
-:1005F0007F019000051201EC787AF6787CE6FD0820
-:10060000E6FCEDFEECFD7F019000041201EC540FBE
-:10061000FC7D7A12179D787AE6700DAD3AAE39AF4F
-:1006200038E412030F7C082290FFF0E054FEF090B3
-:10063000FFF0E054FDF0801E787CE6FD08E6FCED5E
-:10064000FEECFD7F0190000812020E25E0440190AF
-:10065000FFF3F00206DB787CE6FD08E6FCEDFEEC3D
-:10066000FD7F0190000612020E54FE90FFF3F08011
-:100670002B787CE6FD08E6FCEDFEECFD7F019000AA
-:100680000812020EFAEB90FFF1F01208CA400DAD0D
-:100690003AAE39AF38E412030F7C1822787CE6FDBD
-:1006A00008E6FCEDFEECFD7F0190000812020E90C2
-:1006B000FFF1F01208CA400DAD3AAE39AF38E4127E
-:1006C000030F7C1822787CE6FD08E6FCEDFEECFDCD
-:1006D0007F0190000612020E440190FFF3F0787D36
-:1006E000E62403F618E63400F6787AE624FE50098C
-:1006F00090FFF0E054FDF0800790FFF0E04402F03E
-:10070000E490FFF1F0787B7600787AE624FFFCE451
-:1007100034FFFD787BE67F00FEECD39EEF6480CD56
-:1007200064809D402F1208AF400F787BE6AD3AAE53
-:1007300039AF3812030F7C182290FFF2E0FC787C6E
-:100740008683088682ECF0787B06A3787CA68308F3
-:10075000A68280B51208AF400F787BE6AD3AAE397D
-:10076000AF3812030F7C182290FFF2E0FC787C86F1
-:1007700083088682ECF0787AE6AD3AAE39AF38126B
-:10078000030F7C00228C378D36787CEDF608ECF672
-:10079000EDFEECFD7F019000051201EC787BF67810
-:1007A0007CE6FD08E6FCEDFEECFD7F019000041206
-:1007B00001EC540FFC7D7B12179D787BE670037C67
-:1007C000082290FFF0E054FEF090FFF0E054FDF0BE
-:1007D000801B787CE6FD08E6FCEDFEECFD7F0190D9
-:1007E000000812020E25E090FFF3F0805B787CE6B3
-:1007F000FD08E6FCEDFEECFD7F0190000612020E06
-:1008000054FE90FFF3F08021787CE6FD08E6FCEDD5
-:10081000FEECFD7F0190000812020EFAEB90FFF152
-:10082000F01208CA40037C1822787CE6FD08E6FC3A
-:10083000EDFEECFD7F0190000812020E90FFF1F03A
-:100840001208CA40037C1822787DE6240AF618E6CE
-:100850003400F6787A7600787BE624FFFCE434FFF7
-:10086000FD787AE67F00FEECD39EEF6480CD648055
-:100870009D4021787C8683088682E090FFF1F0120B
-:1008800008CA40037C1822787A06787D06E618703C
-:10089000010680C390FFF0E04401F0787C86830875
-:1008A0008682E090FFF1F01208CA40037C18227C97
-:1008B000002290FFF0E020E71290FFF0E030E50921
-:1008C00090FFF0E04420F0C32280E7D32290FFF0B5
-:1008D000E020E31290FFF0E030E50990FFF0E04403
-:1008E00020F0C32280E7D3228C428D417C00ED545E
-:1008F000F0FDEC7003ED64307005753E0380037508
-:100900003E04AC3E120F7C758300858340E5415464
-:100910000FF53FE5407004E53F64037035E53E2484
-:10092000FD75F00AA4240AF582E434FDF583E03075
-:10093000E6051210678019E53E2497F8C654FBF6C9
-:1009400078A3E62405F58218E63400F583740FF0E9
-:100950008059E5407004E53F64047048E53E24FD9D
-:1009600075F00AA4240AF582E434FDF583E030E54D
-:1009700007AC42AD41121C93E54230E21578A7E680
-:1009800030E00F78A7E630E109E4FF04FE7C0412B2
-:10099000319A78A3E62406F58218E63400F58374CC
-:1009A0000FF08007E4FC7DEE121C93C2032212308C
-:1009B00085120F7C78A3E62406F58218E63400F54C
-:1009C00083E090FD40F078A3E62405F58218E63434
-:1009D00000F583E090FD41F0C2037D027C0012240B
-:1009E000B112310822123085788FECF6EC2497F89A
-:1009F000E630E1077C1312254A800F90FD41E0FDAF
-:100A0000788FE6FC1213FD12254A123108221230AB
-:100A100085788FECF67D00120F0B12254A123108F3
-:100A200022123085788FECF6EC2497F8E630E20756
-:100A30007C1312254A801B788FE62497F8E620E184
-:100A4000077C1212254A800A788FE6FC12142112C4
-:100A5000254A12310822123085788FECF6EC249763
-:100A6000F8E620E2077C1112254A800A788FE6FC1E
-:100A700012152212254A12310822123085788FEC85
-:100A8000F6120F7C78A3E62409F58218E63400F507
-:100A900083E090FD47F078A3E6240AF58218E63457
-:100AA00000F583E090FD48F078A3E62403F5821872
-:100AB000E63400F583E0FC78A3E62404F58218E62A
-:100AC0003400F583E0F55C78A3E62402F58218E6AD
-:100AD0003400F583E0F55D8C5BE4EC33335401784E
-:100AE0008FF66008E55C30E103788F06788FE6903A
-:100AF000FD49F078A1E62402F58218E63400F5837A
-:100B0000E0FDA3E0540CFCED54E68C5FF55EE55B84
-:100B100030E503435F01E55C20E50EE55B547F7043
-:100B200008E55B20E703435F02E55B30E303435FD7
-:100B300010E55B30E203435F20E55B540360034351
-:100B40005F40E55B30E103435F80E55B30E40343F6
-:100B50005E01E55B30E603435E08E55C20E40EE5FC
-:100B60005B547F7008E55B20E703435E10535FFB37
-:100B7000535EF9AD5EE55F90FD42CDF0A3CDF0E5AB
-:100B80005D30E30DE55D5430C4540F90FD45F080B9
-:100B900005E490FD45F0E55D540390FD44F0E55D0E
-:100BA0005404C31390FD46F090FD44E0700E7D3D6B
-:100BB0007EFD7F01740190000912014278A3E624B2
-:100BC00008F58218E63400F583E07C00FD78A3E6A2
-:100BD0002407F58218E63400F583E07F004CFEEF31
-:100BE0004D90FD40F0A3CEF0CEC2037D0A7C0012F2
-:100BF00024B112310822123085788FECF678947681
-:100C0000010876FD0876407891760C789412046598
-:100C10001202147892CBF6CB08F67F00EF24EB405B
-:100C20001FE4EF25E09034BFFD93CD0493789366E5
-:100C30007003ED186670067891760080030F80DCF3
-:100C40007890EFF6789412046590000212020E7804
-:100C500092CBF6CB08F65404CB54064B6004789143
-:100C6000760B7893E630E3137894120465900005D0
-:100C70001201EC24FB50047891760D7893E654C071
-:100C80007D0064C04D70047891760B7894120465F1
-:100C90009000041201EC24FC50047891760F7894B3
-:100CA0001204659000061201EC24FD500478917640
-:100CB0000E78941204659000091201EC24FD500492
-:100CC0007891760A7891E6702A788FE6FC120F7C8C
-:100CD000789412046578A1E6F978A0E6FA7B0174AD
-:100CE0000A780012033FC203788FE6FC12112378C2
-:100CF00091ECF67891E6FC12254A12310822123066
-:100D000085788FECF6120F7C788FE624FD75F00A5B
-:100D1000A4241CF582E434FDF583AC82AD8378A075
-:100D20008683088682ECF9EDFA7B0A78011203A724
-:100D3000C203788FE6FC121123123108228D2B8C0E
-:100D40002AED60407527017529487528FFE52A249A
-:100D5000FDFCE434FFFDEC7C0325E0CD33CDDCF974
-:100D6000FCE5292CF529E5283DF528AD29AE28AF6D
-:100D700027748090000612031774809000021203FB
-:100D800017120FD3E52B14603B75270175290875E1
-:100D900028FFE52A24FDFCE434FFFDEC7C0325E07C
-:100DA000CD33CDDCF9FCE5292CF529E5283DF528E6
-:100DB000AD29AE28AF27E4900006120317E4900097
-:100DC0000212031722123085788FECF6EC2497F884
-:100DD000E630E209788FE6FC121522D200788FE621
-:100DE000FC120F7C7890760090FD41E030E70478AB
-:100DF0009076017890E6FD788FE6FC120D3AC203FA
-:100E0000300007788FE6FC1214217C0012254A126C
-:100E100031082278A3E62404F58218E63400F5832D
-:100E2000E04401F078A3E62404F58218E63400F5E6
-:100E300083E030E00280ED78A3E6240BF58218E62B
-:100E40003400F583E054F8F078A3E62402F5821824
-:100E5000E63400F583E04480F022C2038C58120F80
-:100E60007C78A0868308868279EE7A347B0A7801C2
-:100E70001203F5120E10AC587D02120D3AC203ACEB
-:100E800058121123228D538E528F518C50120F7C89
-:100E9000754F0078A3E62405F58218E63400F58343
-:100EA000E020E416E54F24F64010054FC2037C18FD
-:100EB000123248AC50120F7C80D978A3E62405F595
-:100EC0008218E63400F583E020E405C2037C0222A8
-:100ED00078A3E62405F58218E63400F583E0540F84
-:100EE000601678A3E62405F58218E63400F583E061
-:100EF000540FF0C2037C012278A28683088682E028
-:100F0000AD53AE52AF5112030FC2037C00228D319C
-:100F10008C30121522E5316020E530B4030C7C01E1
-:100F200012247C7C8112247C800FE530B4040A7C7E
-:100F30000212247C7C8212247CAC30120F7CE531BE
-:100F4000601A78A48683088682E054E7F0A3A3A3FE
-:100F5000A3E054E7F0AC307D02120D3A78A086830E
-:100F600008868279F87A347B0A78011203F5C20385
-:100F7000E5302497F8C654FDF6AC30121123228CCC
-:100F8000263003051231E780F87C0A1230FAD203CA
-:100F9000E52624FD789DF6700978A476FF0876E0B2
-:100FA000800778A476FF0876E2789DE675F010A4B5
-:100FB000ADF0FC24A078A3F6ED34FF18F6789DE69A
-:100FC00075F00AA42408FCE434FDFD78A0EDF608D1
-:100FD000ECF61231932278A3E62402F58218E63467
-:100FE00000F583E030E72278A3E62402F58218E6D4
-:100FF0003400F583E0547FF078A3E62402F58218EC
-:10100000E63400F583E04480F02278A486830886E5
-:1010100082E0547FF0AD83E5822404FCE43D8C82C1
-:10102000F583E0547FF078A3E6240BF58218E634CC
-:1010300000F583E054F8F078A5E62401F58218E67F
-:101040003400F583E04403F078A5E62405F5821822
-:10105000E63400F583E04403F078A3E62405F58246
-:1010600018E63400F583740FF02278A4868308868E
-:1010700082E0543FF0AD83E5822404FCE43D8C82A1
-:10108000F583E0543FF0789DE6249EF8E6FC78A5D1
-:10109000E62401F58218E63400F583ECF0789DE64D
-:1010A000249EF8E6FC78A5E62405F58218E63400CF
-:1010B000F583ECF078A3E6240BF58218E63400F50E
-:1010C00083E054FB4402F52678A1E62402F5821859
-:1010D000E63400F583E030E50343260178A3E624F7
-:1010E00005F58218E63400F583E030E003120FD3F3
-:1010F000E526FC78A3E6240BF58218E63400F58398
-:10110000ECF078A3E62405F58218E63400F5837444
-:101110000FF078A48683088682E04480F0A3A3A31E
-:10112000A3E04480F0228C2A120F7C78A1E62408E8
-:10113000F58218E63400F583E0FC78A3E6240AF58E
-:101140008218E63400F583ECF078A1E62407F582F6
-:1011500018E63400F583E0FC78A3E62409F582184C
-:10116000E63400F583ECF078A08683088682E0FD03
-:10117000A3E0FCEDFE78A3E62408F58218E634002F
-:10118000F583EEF0ECFE78A3E62407F58218E6344A
-:1011900000F583EEF08C298D28C3EC9402ED9406C3
-:1011A000400575277C8033D3E5299481E528940197
-:1011B000400575273C8023D3E52994C0E528940099
-:1011C00040057527188013D3E5299430E52894004D
-:1011D000400575270C8003752708AF27E4EF547C82
-:1011E0004483FF8F27E527FC78A5E62401F58218C4
-:1011F000E63400F583ECF0E527FC78A5E62405F558
-:101200008218E63400F583ECF0E527FC789DE624AF
-:101210009EF8ECF678A3E62402F58218E63400F591
-:1012200083E0F52778A1E62402F58218E63400F57C
-:1012300083A3E030E3175327C778A1E62405F5829E
-:1012400018E63400F583E09034E993422778A1E66C
-:101250002402F58218E63400F583E030E7054327E1
-:101260004080035327BF5327FB78A1E62406F5826D
-:1012700018E63400F583E060034327045327FC7825
-:10128000A1E62404F58218E63400F583E042274302
-:101290002780E527FC78A3E62402F58218E63400CF
-:1012A000F583ECF078A3E62404F58218E63400F523
-:1012B00083E0F52778A1E62402F58218E63400F5EC
-:1012C00083A3E030E1055327DF800343272078A183
-:1012D000E62402F58218E63400F583E030E4055395
-:1012E00027EF800343271078A1E62409F58218E64A
-:1012F0003400F583E0B40203432702E527FC78A31A
-:10130000E62404F58218E63400F583ECF078A3E6D1
-:101310002403F58218E63400F583E0F52778A1E68A
-:101320002409F58218E63400F583E0700553277F21
-:10133000800343278078A1E62402F58218E6340072
-:10134000F583A3E030E00543272080035327DF78AF
-:10135000A1E62402F58218E63400F583E030E305C7
-:1013600043274080035327BF78A1E62402F5821863
-:10137000E63400F583E030E005432710800353276F
-:10138000EF78A1E62402F58218E63400F583A3E0A5
-:1013900030E40543270880035327F778A1E62402A9
-:1013A000F58218E63400F583A3E030E50543270411
-:1013B00080035327FB78A1E62402F58218E6340067
-:1013C000F583A3E030E60543270180035327FE7829
-:1013D000A1E62402F58218E63400F583A3E030E7A5
-:1013E0000543270280035327FDE527FC78A3E62465
-:1013F00003F58218E63400F583ECF0C2037C00228A
-:101400008D278C26ED54031460037C1022E52754AD
-:101410007C24FC40037C0B22E5262497F8C644027A
-:10142000F67C00228C30120F7CE5302497F8E62001
-:10143000E24FAC307D02120D3AE53024FE4428FC28
-:1014400078A48683088682ECF0AF83E5822404FECC
-:10145000E43FFFEC8E828F83F07C038C2CE52CFC28
-:1014600078A5E62401F58218E63400F583ECF0E572
-:101470002CFC78A5E62405F58218E63400F583EC0B
-:10148000F0752D01752F48752EFFE53024FDFCE425
-:1014900034FFFDEC7C0325E0CD33CDDCF9FCE52FFA
-:1014A0002CF52FE52E3DF52E78A5E62404F58218BF
-:1014B000E63400F583E054E7F52CAD2FAE2EAF2DCA
-:1014C000E4900002120317E49000061203171201C1
-:1014D000E630E503432C10E52CFC78A5E62404F562
-:1014E0008218E63400F583ECF012106778A3E62446
-:1014F00006F58218E63400F583E0C203FCE53024EB
-:1015000097F8C64404F68C2CE530540FC454F07E92
-:1015100000FFEEEF44047D00FFEC4EFCED4FFD12AA
-:101520001CFE7C00228C2F120F7C12100778A486E0
-:1015300083088682E05408F0A3A3A3A3E05408F034
-:10154000AC2F7D02120D3AC203E52F2497F8C65442
-:10155000FBF67C00221230857890ECF6EC2497F8AC
-:10156000E630E10A7D007C131224B1123108789034
-:10157000E62497F8C64401F67890E6FC120F7C78D2
-:1015800090E624FD75F00AA4241CF582E434FDF5F0
-:101590008378A0E6FA08E6F97B0A78011203A778B7
-:1015A000A0868308868279F87A347B0A7801120350
-:1015B000F5120FD3C2037890E6FC121123788FEC5A
-:1015C000F6EC600A7D007C081224B1123108789094
-:1015D000E6FC120F7C78A3E62404F58218E63400BA
-:1015E000F583E0441054DFFC78A3E62404F5821868
-:1015F000E63400F583ECF0788FECF6C2037CC81279
-:1016000032487890E6FC120F7C78A3E62404F58239
-:1016100018E63400F583E054EFF0C2037CC81232C0
-:10162000487890E6FC120F7C78A3E62404F5821833
-:10163000E63400F583E04410F0C2037CC81232485F
-:101640007890E6FC120F7C78A3E62404F58218E675
-:101650003400F583E04420F0C2037CF01232487875
-:1016600090E6FC120F7C78A3E62405F58218E63498
-:1016700000F583E030E415C2037890E644107F0063
-:10168000FE7C0712319A12310802174978A3E6242A
-:1016900004F58218E63400F583E054CFF0C2037CF1
-:1016A000C81232487890E6FC120F7C78A3E6240436
-:1016B000F58218E63400F583E04430F0C2037CF094
-:1016C0001232487890E6FC120F7C78A3E62405F5E8
-:1016D0008218E63400F583E030E414C2037890E623
-:1016E00044107F00FE7C0712319A123108805D7829
-:1016F000A3E62404F58218E63400F583E054EFF005
-:1017000078A3E62404F58218E63400F583E054DF7C
-:10171000F07890E624FD75F00AA4241CF582E434E8
-:10172000FDF583AC82AD8378A08683088682ECF9D0
-:10173000EDFA7B0A78011203A7C2037890E6FC1247
-:1017400011237D007C0B1224B11231082212308546
-:1017500090FF91E090FD41F07D027C001224B112D7
-:1017600031082212308590FD40E0F4FC90FF91E0BA
-:101770005CF53390FD41E0FC90FD40E05C4233E5D8
-:101780003390FF91F07C0012254A12310822743CFC
-:1017900090FBE8F0743E90FBE8F0E490FD30F0221E
-:1017A0008D358C34ECB401028003D340028028B420
-:1017B00002028003D34008A835C625E0F68018B49D
-:1017C00004028003D3400AA835C625E025E0F68050
-:1017D00006A83576008000228C3C8D3BEDFEECFDAA
-:1017E0007F0175600675610090FD3112046E120173
-:1017F000E6B480028006D3500302189E90FD311299
-:1018000004809000031201EC54F0B430028003D342
-:10181000405F90FD3112048090000812020EFAFD24
-:10182000EBFE7F0190FD3412046EEECD903502FC8C
-:10183000E493FF740193FEF9EFFA7B01EAFFE9FEFE
-:10184000ECC39EED9F4025903504E493FD74019315
-:10185000FCEDFEECFD7F01EECDFC90FD36E0D39C6F
-:1018600090FD35E09D500575608080331219BC8075
-:101870002EB460028003D3400BAC3CAD3B12078218
-:101880008C60801BB41003B34010C3B42003B3407A
-:1018900009C3B440028003D340007560818000809A
-:1018A00075B481028003D3406B90FD3112048090A7
-:1018B00000031201EC54F0B430028003D3401D90B9
-:1018C000FD3112048090000812020EFAFDEBFE7F3B
-:1018D0000190FD3712046E1219268036B460028022
-:1018E00003D34013753A61E4F539F538AC3CAD3BB0
-:1018F0001205DE8C60801BB41003B34010C3B4200B
-:1019000003B34009C3B440028003D3400075608133
-:10191000800080028000E560FC90FD31120480ECC4
-:10192000900002120317AC612290FD3112048090E6
-:1019300000041201EC600474018001E4A2E0920151
-:1019400090FD31120480ED2403FD50010E90FD3412
-:1019500012046E90FD311204809000051201ECF526
-:10196000619000041201EC540FFC7D6112179DE59B
-:1019700061700475600822756000787E7600787E5C
-:10198000E6C39561503890FD371204801201E6FCE1
-:1019900090FD34120480EC12030F30010E90FD39DB
-:1019A000E004F090FD387003E004F0787E0690FDCE
-:1019B00036E004F090FD357003E004F080C0229022
-:1019C000FD32E0FDA3E0FCEDFEECFD7F01ED240A1D
-:1019D000FD50010E90FD3A12046E90FD311204800C
-:1019E0009000041201EC540FB401028003D340179D
-:1019F00090FD3A1204800DED70010E90FD37120437
-:101A00006E78827601804EB402028003D340199032
-:101A1000FD3A120480ED2402FD50010E90FD3712B4
-:101A2000046E78827602802DB404028003D34019BC
-:101A300090FD3A120480ED2404FD50010E90FD3714
-:101A400012046E78827604800CB400028003D340C6
-:101A5000007560082290FD3112048090000512018B
-:101A6000ECF561787F7600787FE6C39561400302EC
-:101A70001B24788076007880E6C378829650769032
-:101A8000FD341204801201E6FC90FD3A1204891222
-:101A900001E0F45CFC1201E0F890FD37120480E8EC
-:101AA000C0E01201E6C8D0E0C8584CFC90FD3412EA
-:101AB0000480EC12030F7881ECF690FD39E004F01D
-:101AC00090FD387003E004F009E970010A90FD3AD6
-:101AD00012047790FD311204809000041201EC3062
-:101AE000E40E90FD36E004F090FD357003E004F064
-:101AF00078800680817882E6FDE4FEFFEECDFC90E2
-:101B0000FD39E02CF090FD38E03DF07882E6FDE410
-:101B1000FEFFEECDFC90FD3CE02CF090FD3BE03D67
-:101B2000F0787F06021A6475600022E53D053D04E9
-:101B30007002B2B022C0E0C0F0C082C083C0D0E862
-:101B4000C0E0E9C0E0EAC0E0EBC0E0ECC0E0EDC01E
-:101B5000E0EEC0E0EFC0E090FF92E01201B71B8022
-:101B6000301B80321B8F381BA13A1BB33E1BCB446A
-:101B70001BBF461BD7501C19521BF8541C3A560069
-:101B8000001C5B90FF92E07F00FE7C0112319A0204
-:101B90001C6BE4FF04FE7C0312319A742090FFFE5C
-:101BA000F0021C6BE4FF04FE7C0212319A74409038
-:101BB000FFFEF0021C6BE4FF04FE7C0412319A026B
-:101BC0001C6BE4FF04FE7C0512319A021C6BE4FFDF
-:101BD00004FE7C0612319A021C6B90FFA5E07D008A
-:101BE00090FD00CDF0A3CDF090FD01E0FCF58390D9
-:101BF000FD00E04433FD121CFE807390FFB5E07DD4
-:101C00000090FD02CDF0A3CDF090FD03E0FCF58344
-:101C100090FD02E04443FD121CFE805290FFA6E0BE
-:101C20007D0090FD04CDF0A3CDF090FD05E0FCF526
-:101C30008390FD04E04434FD121CFE803190FFB619
-:101C4000E07D0090FD06CDF0A3CDF090FD07E0FC17
-:101C5000F58390FD06E04444FD121CFE801090FFC9
-:101C600092E07D00FCED44AAFD121CFE8000E49091
-:101C7000FF92F0D0E0FFD0E0FED0E0FDD0E0FCD05D
-:101C8000E0FBD0E0FAD0E0F9D0E0F8D0D0D083D0BB
-:101C900082D0F0D0E0320581058105810581A881DF
-:101CA000181818EDF608ECF690FF6AE020E70280BD
-:101CB000F790FF69E07D00A88118CDF6CD08F67D8C
-:101CC00003A881E618FCE6CC25E0CC33CCDDF9CCCA
-:101CD000F6CC08F6A88118E644F8F6A8811818187A
-:101CE000E6FD08E6FCA881188683088682EDF0A34D
-:101CF000ECF0740290FF6AF0158115811581158151
-:101D000022E5812405F581E4A88118F6A881181838
-:101D10001818EDF608ECF690FBFDE024F8500302ED
-:101D20001E1FE4A8811818F6A88118E6FEA88118DD
-:101D3000181818E6FD08E6FC7F00EF24F8404DE493
-:101D4000EF25E02485F582E434FDF583E0FBA3E094
-:101D50006C7003FAEB6D70097401A8811818F68095
-:101D60002BE4EF25E02485F582E434FDF5837A0049
-:101D7000E054F0CCF8CCCDF9CDFB7800E954F0F983
-:101D8000EA687002EB6970010E0F80AEA88118EE50
-:101D9000F6A88118181818EDF608ECF6A881EFF6E9
-:101DA000A8811818E67079A88118E624F74071A870
-:101DB0008118181818E6540FA881F664046017A853
-:101DC00081E664036010A88118181818E6FD08E67B
-:101DD000FC121C93804A7C0A1230FAA88118181849
-:101DE00018E6FD08E6FC90FBFCE025E02485F58282
-:101DF000E434FDF583EDF0A3ECF090FBFCE0FFE4B0
-:101E0000EF045407FF90FBFCF090FBFDE004F012A0
-:101E1000319390FBFEE07008E4FEFF7C0F12319AD4
-:101E2000802790FBFFE004F0543F701D90FBFFE023
-:101E300044FE7D00FC90FBFCE025E02485F582E477
-:101E400034FDF583EDF0A3ECF0E58124FBF5812270
-:101E50007885760078867600740190FBFEF012306B
-:101E60008590FBFDE060597C0A1230FA90FBFBE0A4
-:101E700025E02485F582E434FDF583E0FDA3E0FC54
-:101E800090FBFBE025E02485F582E434FDF583E456
-:101E9000F0A3F090FBFBE0FFE4EF045407FF90FB9E
-:101EA000FBF090FBFDE014F07883EDF608ECF61201
-:101EB0003193B2B37883E6FD08E6FC1208E580A111
-:101EC0001231E7788506B60011788576007886E6C7
-:101ED000F40404A2E092B47886F68085E490FBFED8
-:101EE000F090FBFDE07D00FCED44CFFD121C931251
-:101EF000310822123085E56A64494569601590FF12
-:101F000083E0540F7D00D3956AED95695005122E3C
-:101F1000CE8003122F9E12310822123085E56A64AA
-:101F20004945696005122FD8800E90FF80E0440873
-:101F3000F090FF83E0547FF0123108221230858C3C
-:101F400054EC54F0B4101575643D7563FD75620171
-:101F5000E5642403F564E5633400F563E4F557F5BF
-:101F600056E556C394015027E554540FFCAD64AEBA
-:101F700063AF62120E828C55EC600280120564E53C
-:101F800064700205630557E5577002055680D2E577
-:101F900054540F2497F8C654FEF6E554540F7F00AE
-:101FA000FE7C1212319AE5551470097D007C0912ED
-:101FB00024B18007AD577C001224B11231082212DF
-:101FC000308590FFFCE04402F090FF00E030E71322
-:101FD00090FF83E04480F043678090FFFCE0440181
-:101FE000F0801190FF82E04408F053677F90FFFC7F
-:101FF000E054FEF090FF81E04480F012256490FFF1
-:10200000FEE04405F090FFFCE054FDF012310822A0
-:102010001230857C0112324878A7E64402F674FE3D
-:10202000FC04FD121CFE90FF6AE030E70280F7E43A
-:10203000F54E754D10AC4EAD4DE54E154E7002157A
-:102040004DEC4D600280EE438701123108221230C0
-:10205000857C0212311478A7E654FDF6123108226D
-:1020600012308578A7E630E02C78A7E630E12678B4
-:10207000A7E6FCF58318E644F0FD121C9390FFFCE4
-:10208000E04420F07C0212324878A7E654FDF67452
-:102090001A90FFFEF078A7E6FCF58318E644F1FD00
-:1020A000121C9312310822756700756800E4F5660A
-:1020B000F565E4F569756A49748490FF82F074846B
-:1020C00090FF80F0748090FF68F0748090FF6AF059
-:1020D000AD46AF457E00EE24FC500302216AE4EEDB
-:1020E00075F007A4243FF582E434FCF583E0FFE4B7
-:1020F000EF5480FDE4EF540F14FFED6038E4EF750A
-:10210000F008A42448F582E434FFF5837490F0E4E9
-:10211000EF75F008A4244AF582E434FFF583748057
-:10212000F0E4EF75F008A4244EF582E434FFF58363
-:102130007480F08034E4EF75F008A42408F582E49C
-:1021400034FFF5837490F0E4EF75F008A4240AF5E9
-:1021500082E434FFF583E4F0E4EF75F008A4240E84
-:10216000F582E434FFF583E4F00E0220D38D468E31
-:10217000448F45747F90FFFDF0749090FFFCF090C9
-:10218000FC19E030E60790FFFCE04404F02290FCEC
-:102190000DE014700490FC0CE0703990FC0079069E
-:1021A0007A357B1278011203F57F00EF334015EF8B
-:1021B00090354D93FCEF2480F582E434FCF583ECFC
-:1021C000F00F80E78F5990FC2B79187A357B3578A2
-:1021D000011203F5E490FFFFF0745190FFFAF074E0
-:1021E0000490FFFBF0745390FFF8F0745190FFF9E6
-:1021F000F0745590FFF7F0749390FFF6F0743290FE
-:10220000FFF5F075643D7563FD756201E490FF8331
-:10221000F0748090FF81F0755804E55875F007A4BC
-:10222000243FF582E434FCF583E07889F6FC540F12
-:1022300014FC7889ECF6E55875F007A42441F58282
-:10224000E434FCF583E0788C76F8087600FC788935
-:10225000E675F008A42448F582E434FFF583E4F041
-:102260007889E675F008A4244FF582E434FFF583FD
-:10227000ECF0788CE6FF08E67E03CFC313CF13DEC5
-:10228000F9FE7889E675F008A42449F582E434FF64
-:10229000F583EEF07889E675F008A4244AF582E427
-:1022A00034FFF5837480F0788AECF67D00788DE653
-:1022B0002CF618E63DF6788CE6FD08E67C03CDC3E7
-:1022C00013CD13DCF9FC7889E675F008A4244DF5EC
-:1022D00082E434FFF583ECF07889E675F008A424F5
-:1022E0004EF582E434FFF583E4F0788CE6FD08E6F1
-:1022F000FC7889E6FF7E00EE24FC500302246BE4A8
-:10230000EE75F007A4243FF582E434FCF583E0FF8A
-:10231000E4EF5480FAE4EF540F14FFE4EE75F00795
-:10232000A42441F582E434FCF583E0788AF6EE7566
-:10233000F080A42408F8E5F034F8F9E8FCE9FD8A17
-:1023400059EA70030223D8E4EF75F008A42448F595
-:1023500082E434FFF583E4F0788AE6FAE4EF75F07E
-:1023600008A4244FF582E434FFF583EAF0EDFBEC9A
-:102370007A03CBC313CB13DAF9FAE4EF75F008A4B0
-:102380002449F582E434FFF583EAF0788AE67B009D
-:10239000FAEC2AFCED3BFDFBEC7A03CBC313CB1329
-:1023A000DAF9FAE4EF75F008A4244DF582E434FF7D
-:1023B000F583EAF0E4EF75F008A4244AF582E434EA
-:1023C000FFF5837480F0E4EF75F008A4244EF582E5
-:1023D000E434FFF5837480F0022467E4EF75F008BD
-:1023E000A42408F582E434FFF583E4F0788AE6FA61
-:1023F000E4EF75F008A4240FF582E434FFF583EAD6
-:10240000F0EDFBEC7A03CBC313CB13DAF9FAE4EF6C
-:1024100075F008A42409F582E434FFF583EAF07826
-:102420008AE67B00FAEC2AFCED3BFDFBEC7A03CB61
-:10243000C313CB13DAF9FAE4EF75F008A4240DF511
-:1024400082E434FFF583EAF0E4EF75F008A4240A8F
-:10245000F582E434FFF583E4F0E4EF75F008A4249A
-:102460000EF582E434FFF583E4F00E0222F48E5878
-:10247000788CEDF608ECF67889EFF61220A4228C21
-:1024800026EC30E718E526540F1475F008A424480C
-:10249000F582E434FFF583E054DFF08016E526543E
-:1024A0000F1475F008A42408F582E434FFF583E0E6
-:1024B00054DFF022EC90FD3FF08C24ED2403F52551
-:1024C0007D00D3956CED956B4003856C25E5252447
-:1024D000B75009752503740290FD3FF0AC25122F0B
-:1024E000C322E4F566F5651224E82290FD3DE0651F
-:1024F0006D600E740490FD3FF0E4F5657566038031
-:10250000467D6DE4FEFF793D7AFD7B017405780020
-:1025100012033FE5662403F566E5653400F565E5DD
-:1025200066D3956CE565956B4006856C66856B6535
-:10253000D3E5669448E5659400400C740290FD3F35
-:10254000F0E4F565756603AC66122FC322EC90FDCE
-:102550003FF0E4F566F5658C32EC6005122FB4802F
-:10256000057C00122FC32290FF04E0F54A90FF067D
-:10257000E0FDA3E0ED7D00FC7D00FC90FF06E0FFA8
-:10258000A3E07E00FFE4FEEC4EFCED4FFDC3EC94B7
-:1025900048ED9400502290FF06E0FDA3E0ED7D00A1
-:1025A000FC7D00FC90FF06E0FFA3E07E00FFE4FE60
-:1025B000EC4EFCED4FFD8004E4FD7C488C6C8D6B93
-:1025C00090FF02E0FDA3E0ED7D00FC7D00FC90FFAC
-:1025D00002E0FFA3E07E00FFE4FEEC4EF54CED4F81
-:1025E000F54B75643D7563FD7562017D3D7EFD7F34
-:1025F00001796DE4FAFB7405780012033F75490018
-:10260000E54924FE4019AD64AE63AF62E412030FE6
-:1026100005490DED70010E8D648E638F6280E1754A
-:10262000643D7563FD75620190FF00E05460B40085
-:10263000028006D35003022C12E54A540FF549E5F7
-:102640004A5480A2E0920290FF01E0120181000B47
-:102650002C0D266727852C0D28912C0D297429A86F
-:102660002B0F2B122B522BB62BE4E56730E70EE530
-:102670004C454B7008E56C6402456B6003022C0FFF
-:1026800090FF00E0541FB400028003D34029E54AC4
-:102690006003022782AD64AE63AF62740112030F60
-:1026A00078A7E630E00BAD64AE63AF62740212034C
-:1026B0000F7C02122FC322B401028003D3401BE51A
-:1026C0006720E107E54A6003022782E54A24FE50BD
-:1026D000030227827C02122FC322B402028006D397
-:1026E0005003022780E56720E10DE54A6009E54ACD
-:1026F00064806003022782AC4A12304A40030227FA
-:1027000082E549702530021190FF80E05408AD64E5
-:10271000AE63AF6212030F800F90FF82E05408ADEA
-:1027200064AE63AF6212030F803D154930021DE5B0
-:102730004975F008A42448F582E434FFF583E05499
-:1027400008AD64AE63AF6212030F801BE54975F0FC
-:1027500008A42408F582E434FFF583E05408AD644E
-:10276000AE63AF6212030FAD64AE63AF621201E6F7
-:10277000600BAD64AE63AF62740112030F7C021292
-:102780002FC3228000022C0FE56720E706E56C4589
-:102790006B6003022C0F90FF00E0541FB400028016
-:1027A00003D3401AE54C14454B7004E54A6003021C
-:1027B000288E78A7E654FEF67C00122FC322B401BF
-:1027C000028003D3402AE56720E108E56720E003A3
-:1027D00002288EE56730E004E54A700BE56730E1DA
-:1027E00009E54A24FE500302288E7C00122FC322E2
-:1027F000B402028006D3500302288CE54C454B609E
-:102800000302288EAC4A12304A400302288EE56744
-:1028100020E107E56720E0028077E56730E006E524
-:10282000496002806CE549700F90FF82E054F7F038
-:1028300090FF80E054F7F022E549B401028003D311
-:1028400040097D017C03120F0B8011B4020280034A
-:10285000D340097D017C04120F0B80001549300222
-:1028600015E54975F008A42448F582E434FFF583A2
-:10287000E054F7F08013E54975F008A42408F582C8
-:10288000E434FFF583E054F7F07C00122FC322807C
-:1028900000022C0FE56720E706E56C456B6003023C
-:1028A0002C0F90FF00E0541FB400028003D3401AA5
-:1028B000E54C14454B7004E54A600302297178A782
-:1028C000E64401F67C00122FC322B401028003D338
-:1028D0004029E56720E108E56720E003022971E56A
-:1028E0006730E004E549700BE56730E108E549240D
-:1028F000FE5002807F7C00122FC322B402028003AC
-:10290000D3406FE54C454B60028069AC4A12304AB7
-:1029100040028060E56720E107E56720E00280541F
-:10292000E549701430020990FF80E04408F0800708
-:1029300090FF82E04408F022E56730E1331549302A
-:102940000215E54975F008A42448F582E434FFF542
-:1029500083E04408F08013E54975F008A42408F5E5
-:1029600082E434FFF583E04408F07C00122FC32298
-:1029700080028000022C0FE56720E712E56C456BB2
-:10298000700CE54A700890FF00E0541F6003022CB1
-:102990000FE54C90FFFFF090FFFFE06005436701FB
-:1029A00080035367FE7C00122FC322E56730E70ED9
-:1029B000E56C456B600890FF00E0541F6003022C3B
-:1029C0000FAD4BE54CED7D00FC7D00FCBD000280B1
-:1029D00003022B0AB401028003D34032E54A70059A
-:1029E000E54CFC6003022B0C7564007563FC75629A
-:1029F00001D3E56C9412E56B94004006E4FD7C1273
-:102A00008004AC6CAD6B8C6A8D69122FD822B40235
-:102A1000028003D34059E54A6003022B0CE54CFCCD
-:102A200070277564127563FC756201D3E56C9419A7
-:102A3000E56B94004006E4FD7C198004AC6CAD6B42
-:102A40008C6A8D69122FD8802575642B7563FC758F
-:102A50006201D3E56C9435E56B94004006E4FD7C9F
-:102A6000358004AC6CAD6B8C6A8D69122FD822B4A2
-:102A700003028006D35003022B0AE54CF549700F80
-:102A800090FF04E0FDA3E04D6003022B0C80189042
-:102A9000FC82E0FDA3E0FC90FF05E06C700790FF76
-:102AA00004E06D60028068E4F56AF5697F00E5493D
-:102AB00014C549600FEF2480F582E434FCF583E00F
-:102AC0002FFF80EA8F4AE54A2480F582E434FCF542
-:102AD00083E07D00D3956CED956B4006AC6CAD6BDF
-:102AE000800FE54A2480F582E434FCF583E07D0024
-:102AF000FC8C6A8D69E54A2480FCE434FCFDFEEC24
-:102B0000FD7F018D648E638F62122FD822800002B8
-:102B10002C0F022C0FE56730E719E56C14456B703C
-:102B200012E54A700EE54C454B700890FF00E054EA
-:102B30001F6003022C0FE56720E008E56720E10332
-:102B4000022C0F756468E4F563F562E4F56904F539
-:102B50006A122FD822E56720E727E56C456B7021C4
-:102B6000E54A701DE54C6402454B600DE54C14458B
-:102B70004B6006E54C454B700890FF00E0541F6029
-:102B800003022C0FE56720E008E56720E103022C33
-:102B90000F854C68E56870084367015367FD801333
-:102BA000E56864026007E56814600280655367FEAB
-:102BB0004367027C00122FC322E56730E71AE56CF9
-:102BC00014456B7013E54A700FE54C454B70099046
-:102BD000FF00E0541F1460028038E56720E10280A6
-:102BE000317C01122FC322E56720E715E56C456BA8
-:102BF000700FE54C454B700990FF00E0541F1460C6
-:102C000002800FE56720E10280087C00122FC322BA
-:102C10008000022ECAB440028006D35003022EC0A8
-:102C200090FF01E090FD3DF0E54A90FD3EF0E4901C
-:102C3000FD3FF0E5642403F564E5633400F563AD1E
-:102C40004BE54C856482856383CDF0A3CDF090FF86
-:102C500001E01201B72C7D012CA3022CCD032CF72F
-:102C6000042D45052D82062DA8072DCE082DF4092B
-:102C70002E1A0B2E400C2E4F802E4F8100002EADB1
-:102C8000E56720E7067C0512254A227DB77E347F62
-:102C90000279407AFD7B017408780012033F7D08B9
-:102CA0007C001224B122E56720E7067C0512254A44
-:102CB00022E54AB403004010B40500500BE54A7FFA
-:102CC00000FE7C1012319A227D007C071224B12272
-:102CD000E56720E7067C0512254A22E54AB4030091
-:102CE0004010B40500500BE54A7F00FE7C11123104
-:102CF0009A227D007C071224B122E56720E7067C3A
-:102D00000512254A22E54AB405028003D3400AE4AD
-:102D1000FF04FE7C0A12319A22B401028003D340E0
-:102D20000AE4FF04FE7C0812319A22B4030040102A
-:102D3000B40500500BE54A7F00FE7C1312319A2245
-:102D40007D007C071224B122E56720E734D3E56CCF
-:102D50009448E56B94005006E56C456B70067C0268
-:102D600012254A22E54AB40103B3400BC3B4030061
-:102D70004009B406005004123070227C0712254A24
-:102D8000221224E822E56720E71DE54AB40300404B
-:102D900010B40500500BE54A7F00FE7C1612319AF4
-:102DA000227C0712254A221224E822E56720E71D2B
-:102DB000E54AB403004010B40500500BE54A7F001B
-:102DC000FE7C1912319A227C0712254A221224E82D
-:102DD00022E56720E71DE54AB403004010B4050072
-:102DE000500BE54A7F00FE7C1712319A227C0712B5
-:102DF000254A221224E822E56720E71DE54AB403AC
-:102E0000004010B40500500BE54A7F00FE7C18120C
-:102E1000319A227C0712254A221224E822E56720F3
-:102E2000E71DE54AB403004010B40500500BE54A25
-:102E30007F00FE7C1512319A227C0712254A22124D
-:102E400024E822E56720E7067C0712254A2212249F
-:102E5000E822E56730E72090FF00E0541F701090F3
-:102E6000FF01E0B480051224DF80031224E8227DF4
-:102E7000007C051224B12290FF00E0541F60067C04
-:102E80000512254A22D3E56C9448E56B9400500B5B
-:102E9000C3E56C9407E56B940050067C0312254A49
-:102EA00022E54AB40504123070227C0712254A221A
-:102EB000E56730E7087D007C051224B1227C05120D
-:102EC000254A22B420028003D340008000122F9EA6
-:102ED0002275430090FF83E0540FD395434024E5CF
-:102EE0004324F0F582E434FEF583E0AD64AE63AFD5
-:102EF0006212030F05430DED70010E8D648E638F1A
-:102F00006280D1E5437D00FCC3E56A9CF56AE56912
-:102F10009DF569E56A45696006E490FF83F02290BB
-:102F2000FF82E04408F0E4F569756A4990FD3DE0F0
-:102F3000B405028003D3404090FD3EE0F543B40564
-:102F4000028003D3400AE4FF04FE7C0B12319A2274
-:102F5000B401028003D3400AE4FF04FE7C0912316D
-:102F60009A22B403004010B40500500BE5437F00E3
-:102F7000FE7C1412319A2222B480004023B48200D5
-:102F8000501E7C3D7DFD1217D57D008C668D6590B1
-:102F9000FD3FE06005122F9E80057C00122FC322AA
-:102FA0002290FF83E0547FF090FF82E04408F0908D
-:102FB000FF80E04408F02290FF82E04408F090FF98
-:102FC00080E04408F0228C237D008C6A8D69756452
-:102FD0003D7563FD756201122FD82290FF83E05486
-:102FE0007FF0E56A64494569700122C3E56A940887
-:102FF000E56994004015752108E5217D00FCC3E5D5
-:103000006A9CF56AE5699DF5698009856A21E4F5A0
-:1030100069756A49752200E522C395215026AD6481
-:10302000AE63AF621201E6FCE52224F8F582E434D7
-:10303000FEF583ECF005220DED70010E8D648E63BC
-:103040008F6280D3E521547F90FF81F0228C487FEE
-:1030500000EF24FB4019E4EF75F007A4243FF5824C
-:10306000E434FCF583E065487002D3220F80E28FE0
-:1030700047C322856C6A856B6990FF82E054F7F044
-:1030800090FF83E0547FF022C000C001C002C00660
-:10309000C007E5722408F8860653067F7CFF1230CD
-:1030A000FA7C007D00E5756046FF90FE9DE0547F50
-:1030B0006E700FC083C082A3E0FDA3E0FCA3157572
-:1030C0008007A3A3A3DFE68026DF06D082D083801B
-:1030D0001EE0F8A3E0F9A3E0FAD082D083E8F0A3E1
-:1030E000E9F0A3EAF0A3C083C082A3A3A380DA120D
-:1030F0003193D007D006D002D001D0002285A87429
-:1031000075A888EC70027C3F8C7322E5722408F865
-:1031100076001231E780FBC000C001C002C006C0CB
-:1031200007AE047CFF1230FAE5756042FF90FE9D09
-:10313000E0547F6E700BC083C082A3A3A31575807B
-:1031400007A3A3A3DFEA8026DF06D082D08380D83E
-:10315000E0F8A3E0F9A3E0FAD082D083E8F0A3E995
-:10316000F0A3EAF0A3C083C082A3A3A380DA780807
-:10317000087918097C01E6547F6E700676007700A6
-:10318000800608090CBC08EE123193D007D006D097
-:1031900002D001D000227573008574A822C0F0C04F
-:1031A00082C083C3E57524E850051231E780F4EC52
-:1031B00060319034B6E493C39C4028C0047CFF1275
-:1031C00030FAD004430480E57575F003A4249DF51E
-:1031D00082E434FEF583ECF0EFA3F0EEA3F0057586
-:1031E000123193D083D082D0F022C0047C20D28CC4
-:1031F000D28DD504FDD0042275A80075880075B85D
-:103200000075F00075D000E4F8900000F608B800F2
-:10321000FB020000C3ED940250047D037CE8ECF453
-:10322000FCEDF4FD0CBC00010D8C798D7822C3EC13
-:1032300094BCED940250047D077CD0ECF4FCEDF4DA
-:10324000FD0CBC00010D8C778D7622EC700122C044
-:1032500000E5722418F8A604E5722408F8C6547F25
-:10326000F6E630E703D000221231E780F4C28C8505
-:10327000768C85778AD28CC0E0C0D0C0F0C082C086
-:1032800083C000C001C002C003C004C005C006C0A6
-:1032900007121B28E5722408F8E66024E572241062
-:1032A000F8A681E57275F021A42495F582E434FD39
-:1032B000F58378A8E58104C398F9E6F008A3D9FA64
-:1032C00074082572F8057208E65480700CE572B433
-:1032D00007F3780875720080EFE5722410F8868194
-:1032E000E57275F021A42495F582E434FDF5837828
-:1032F000A8E58104C398F9E0F608A3D9FAD007D06D
-:1033000006D005D004D003D002D001D000D083D0A5
-:1033100082D0F0D0D0D0E032C0E0C0D0C000C00138
-:10332000C002C28E85788D85798BD28E7819790905
-:103330007A07E77004A600800BE6600816E67004C2
-:10334000E74480F70809DAEAE573601314F573704F
-:103350000EE5722408F87600123193D28CD28DD00B
-:1033600002D001D000D0D0D0E0327581A775900096
-:103370007579307578F87577607576F012053C12BE
-:10338000340F12178B1234391231F580E322C0004A
-:103390007C01EC2408F8E660090CBC08F51231E762
-:1033A00080EED00022C0F0C082C083C000C006C042
-:1033B00007ED2410F876B6ED75F021A42495F5827A
-:1033C000E434FDF583C082C083A3A3E4780DF0A3A9
-:1033D000D8FCEC547F75F002A42482F582E5F03429
-:1033E00034F583E493FE740193F5828E83E493FEB7
-:1033F000740193FFD083D082EFF0A3EEF0ED2408A8
-:10340000F8EC4480F6D007D006D000D083D082D02C
-:10341000F0227572007575007A08791878087600C0
-:1034200077000809DAF8E478087480447FF67401BC
-:103430004410F58975B808D2ABD2A9227581A7D2FC
-:103440008ED28CD2AFE5756032FF90FE9DE0548045
-:10345000602478087908E0547FFA7B00E6547FB551
-:1034600002027BFF08D9F5EB700CEAF012338BAD4A
-:1034700004AC021233A2A3A3A3DFD21231E780C5AA
-:103480007C017D002204F504E904ED04E104DD047F
-:10349000D904E504F1049D04A104CD04D1049904E8
-:1034A00099049904D504B504AD04B104A904C10478
-:1034B000BD04B904C504C904A519010300220048CC
-:1034C0000200240F180A10640D680C05060203019F
-:1034D0000181010000E700C0008000600040003072
-:1034E0000018000C00080004000200010008183851
-:1034F000280602100A0200000000000181100A02E2
-:103500000000000000FBE8FBFA12011001FF0000C0
-:103510000851045F50160101020002090235000142
-:103520000200E0000904000005FF0000000705811B
-:10353000024000000705010240000007058202402A
-:103540000000070502024000000705850302000194
-:10355000040309042403540065007800610073002B
-:10356000200049006E0073007400720075006D0049
-:1035700065006E00740073002A0354005500530068
-:103580004200350030003500320020005300650055
-:103590007200690061006C00200050006F00720032
-:1035A00074002203540055005300420035003000DF
-:1035B00035003200200020002000200020002000E4
-:0435C00020002000C7
-:00000001FF
diff --git a/firmware/tigon/tg3.bin.ihex b/firmware/tigon/tg3.bin.ihex
deleted file mode 100644
index d842d7cc91b5..000000000000
--- a/firmware/tigon/tg3.bin.ihex
+++ /dev/null
@@ -1,175 +0,0 @@
-:10000000000000000800000000000A80000000005E
-:1000100010000003000000000000000D0000000DB3
-:100020003C1D080037BD3FFC03A0F0213C10080038
-:10003000261000000E000018000000000000000D57
-:100040003C1D080037BD3FFC03A0F0213C10080018
-:10005000261000340E00021C000000000000000DFD
-:1000600000000000000000000000000027BDFFE0CD
-:100070003C1CC000AFBF0018AF80680C0E00004CE5
-:10008000241B210597850000978700029782002C8A
-:100090009783002E3C040800248409C0AFA00014FC
-:1000A000000214000062182500052C00AFA3001008
-:1000B0008F86001000E528250E000060240701024D
-:1000C0003C02AC00344201003C03AC01346301004B
-:1000D000AF8204903C02FFFFAF820494AF83049888
-:1000E000AF82049C24020001AF825CE00E00003F5E
-:1000F000AF825D000E000140000000008FBF0018BD
-:1001000003E0000827BD00202402FFFFAF82540453
-:100110008F83540034630400AF835400AF825404CF
-:100120003C02080024420034AF82541C03E0000863
-:10013000AF80540000000000000000003C020800F6
-:10014000344230003C030800346330003C040800B3
-:10015000348437FF3C010800AC220A6424020040CA
-:100160003C010800AC220A683C010800AC200A608F
-:10017000AC600000246300040083102B5040FFFD9E
-:10018000AC60000003E0000800000000008048218F
-:100190008FAA00103C0208008C420A603C04080050
-:1001A0008C840A688FAB0014244300010044102B98
-:1001B0003C010800AC230A60144000030000402109
-:1001C0003C010800AC200A603C0208008C420A6036
-:1001D0003C0308008C630A64912400000002114073
-:1001E000004310210048102125080001A044000010
-:1001F000290200081440FFF4252900013C020800F0
-:100200008C420A603C0308008C630A648F84680C8B
-:100210000002114000431021AC440008AC45000C22
-:10022000AC460010AC470014AC4A001803E00008CC
-:10023000AC4B001C000000000000000000000000AB
-:1002400000000000000000000000000000000000AE
-:10025000000000000000000000000000000000009E
-:10026000000000000000000000000000000000008E
-:10027000000000000000000000000000000000007E
-:10028000000000000000000000000000000000006E
-:10029000000000000000000000000000000000005E
-:1002A000000000000000000000000000000000004E
-:1002B000000000000000000000000000000000003E
-:1002C000000000000000000000000000000000002E
-:1002D000000000000000000000000000000000001E
-:1002E000000000000000000000000000000000000E
-:1002F00000000000000000000000000000000000FE
-:1003000000000000000000000000000002000008E3
-:10031000000000000A0001E33C0A00010A0001E3BA
-:100320003C0A00020A0001E3000000000A0001E3A9
-:10033000000000000A0001E3000000000A0001E3E1
-:10034000000000000A0001E3000000000A0001E3D1
-:10035000000000000A0001E3000000000A0001E3C1
-:10036000000000000A0001E3000000000A0001E3B1
-:100370003C0A00070A0001E33C0A00080A0001E306
-:100380003C0A00090A0001E3000000000A0001E342
-:10039000000000000A0001E33C0A000B0A0001E330
-:1003A0003C0A000C0A0001E33C0A000D0A0001E3CC
-:1003B000000000000A0001E3000000000A0001E361
-:1003C0003C0A000E0A0001E3000000000A0001E3FD
-:1003D000000000000A0001E3000000000A0001E341
-:1003E000000000000A0001E3000000000A0001E331
-:1003F000000000000A0001E3000000000A0001E321
-:10040000000000000A0001E33C0A00130A0001E3B7
-:100410003C0A001400000000000000000000000082
-:1004200000000000000000000000000000000000CC
-:1004300000000000000000000000000000000000BC
-:1004400000000000000000000000000000000000AC
-:10045000000000000000000000000000000000009C
-:10046000000000000000000000000000000000008C
-:10047000000000000000000000000000000000007C
-:10048000000000000000000000000000000000006C
-:10049000000000000000000000000000000000005C
-:1004A000000000000000000000000000000000004C
-:1004B000000000000000000000000000000000003C
-:1004C000000000000000000000000000000000002C
-:1004D000000000000000000000000000000000001C
-:1004E000000000000000000000000000000000000C
-:1004F00000000000000000000000000000000000FC
-:1005000000000000000000000000000027BDFFE028
-:100510000000182100001021AFBF0018AFB1001477
-:10052000AFB000103C01080000220821AC200A7086
-:100530003C01080000220821AC200A743C0108009C
-:1005400000220821AC200A78246300011860FFF51E
-:100550002442000C241100018F9068103202000424
-:1005600014400005240400013C0208008C420A7873
-:1005700018400003000020210E000182000000004E
-:100580003202000110400003000000000E0001696B
-:10059000000000000A000153AF9150288FBF0018DF
-:1005A0008FB100148FB0001003E0000827BD0020B9
-:1005B0003C0508008CA50A703C0608008CC60A8021
-:1005C0003C0708008CE70A7827BDFFE03C040800E0
-:1005D000248409D0AFBF0018AFA000100E00006047
-:1005E000AFA000140E00017B000020218FBF001877
-:1005F00003E0000827BD0020240200018F8368105B
-:1006000000821004000210270062182403E0000892
-:10061000AF83681027BDFFD8AFBF00241080002E25
-:10062000AFB000208F825CECAFA200188F825CEC30
-:100630003C10080026100A78AFA2001C340280008B
-:10064000AF825CEC8E020000184000160000000033
-:100650003C02080094420A748FA3001C000221C0CF
-:10066000AC8300048FA2001C3C0108000E000201B4
-:10067000AC220A7410400005000000008E02000049
-:10068000244200010A0001DFAE0200003C02080023
-:100690008C420A7000021C02000321C00A0001C53E
-:1006A000AFA2001C0E000201000000001040001F5D
-:1006B000000000008E0200008FA3001C24420001F5
-:1006C0003C010800AC230A703C010800AC230A740A
-:1006D0000A0001DFAE0200003C10080026100A7874
-:1006E0008E02000018400028000000000E000201E9
-:1006F0000000000014400024000000008E020000F2
-:100700003C0308008C630A702442FFFFAFA3001C67
-:1007100018400006AE02000000031402000221C0CF
-:100720008C8200043C010800AC220A7097A2001ED3
-:100730002442FF002C4203001440000B240240001E
-:100740003C040800248409DCAFA00010AFA0001412
-:100750008FA6001C240500080E0000600000382150
-:100760000A0001DF00000000AF825CF83C020800D4
-:100770008C420A408FA3001C24420001AF835CF826
-:100780003C010800AC220A408FBF00248FB000203B
-:1007900003E0000827BD002827BDFFE03C04080057
-:1007A000248409E8000028210000302100003821BD
-:1007B000AFBF0018AFA000100E000060AFA0001483
-:1007C0008FBF001803E0000827BD00208F82680C4F
-:1007D0008F85680C000218270003182B00031823CC
-:1007E000004310240044102100A2282B10A0000672
-:1007F00000000000004018218F82680C0043102B7D
-:100800001440FFFD0000000003E0000800000000AD
-:100810003C0408008C8400003C0308008C630A4000
-:100820000064102B54400002008310230064102346
-:100830002C42000803E000083842000127BDFFE019
-:10084000008028213C04080024840A000000302194
-:1008500000003821AFBF0018AFA000100E000060EC
-:10086000AFA000140A000216000000008FBF00189D
-:1008700003E0000827BD00200000000027BDFFE0C6
-:100880003C1CC000AFBF00180E00004CAF80680CCD
-:100890003C04080024840A10038028210000302131
-:1008A00000003821AFA000100E000060AFA00014BF
-:1008B0002402FFFFAF8254043C0200AA0E0002345F
-:1008C000AF8254348FBF001803E0000827BD00201A
-:1008D00000000000000000000000000027BDFFE84D
-:1008E000AFB0001024100001AFBF00143C01C003E2
-:1008F000AC2000008F8268103042200010400003BE
-:10090000000000000E000246000000000A00023A4B
-:10091000AF9054288FBF00148FB0001003E0000880
-:1009200027BD001827BDFFF88F845D0C3C0200FF37
-:100930003C0308008C630A503442FFF80082102404
-:100940001043001E3C0500FF34A5FFF83C06C00321
-:100950003C074000008518248C6200103C01080010
-:10096000AC230A50304200081040000500871025D3
-:100970008CC2000024420001ACC200000087102598
-:10098000AF825D0C8FA2000024420001AFA20000E4
-:100990008FA200008FA2000024420001AFA200003D
-:1009A0008FA200008F845D0C3C0308008C630A500A
-:1009B000008510241443FFE80085182427BD000893
-:1009C00003E000080000000000000000353730316F
-:1009D000726C734100000000000000005377457600
-:1009E000656E743000000000726C704576656E7440
-:1009F00031000000556E6B6E45766E74000000008D
-:100A0000000000000000000000000000666174614A
-:100A10006C45727200000000000000004D61696EBC
-:100A2000437075420000000000000000000000005C
-:100A300000000000000000000000000000000000B6
-:100A400000000000000000000000000000000000A6
-:100A50000000000000000000000000000000000096
-:0C0A60000000000000000000000000008A
-:00000001FF
- * Firmware is:
- * Derived from proprietary unpublished source code,
- * Copyright (C) 2000-2003 Broadcom Corporation.
- *
- * Permission is hereby granted for the distribution of this firmware
- * data in hexadecimal or equivalent format, provided this copyright
- * notice is accompanying it.
diff --git a/firmware/tigon/tg3_tso.bin.ihex b/firmware/tigon/tg3_tso.bin.ihex
deleted file mode 100644
index f10c4ef90513..000000000000
--- a/firmware/tigon/tg3_tso.bin.ihex
+++ /dev/null
@@ -1,446 +0,0 @@
-:100000000106000008000000000024140E00000398
-:100010000000000008001B24000000001000000386
-:10002000000000000000000D0000000D3C1D080055
-:1000300037BD400003A0F0213C100800261000004E
-:100040000E000010000000000000000D27BDFFE0C2
-:100050003C04FEFEAFBF00180E0005D83484000239
-:100060000E000668000000003C03080090631B6857
-:10007000240200023C04080024841AAC1462000329
-:10008000240500013C04080024841AA0240600066C
-:1000900000003821AFA000100E00067CAFA00014B5
-:1000A0008F625C5034420001AF625C508F625C90A2
-:1000B00034420001AF625C902402FFFF0E00003466
-:1000C000AF6254048FBF001803E0000827BD002072
-:1000D00000000000000000000000000027BDFFE05D
-:1000E000AFBF001CAFB20018AFB100140E00005B30
-:1000F000AFB0001024120002241100018F7068209C
-:100100003202010010400003000000000E0000BB9E
-:10011000000000008F7068203202200010400004B0
-:10012000320200010E0001F024040001320200013D
-:1001300010400003000000000E0000A300000000BB
-:100140003C02080090421B9814520003000000007B
-:100150000E0004C0000000000A00003CAF715028EF
-:100160008FBF001C8FB200188FB100148FB0001029
-:1001700003E0000827BD002027BDFFE03C04080085
-:1001800024841AC0000028210000302100003821FA
-:10019000AFBF0018AFA000100E00067CAFA0001487
-:1001A0003C040800248423D8A48000003C010800FB
-:1001B000A0201B983C010800AC201B9C3C010800BF
-:1001C000AC201BA03C010800AC201BA43C01080093
-:1001D000AC201BAC3C010800AC201BB83C01080063
-:1001E000AC201BBC8F6244343C010800AC221B884D
-:1001F0008F6244383C010800AC221B8C8F62441093
-:10020000AC80F7A83C010800AC201B843C0108002E
-:10021000AC2023E03C010800AC2023C83C010800CE
-:10022000AC2023CC3C010800AC2024003C01080099
-:10023000AC221B908F6200682403000700021702A3
-:1002400010430005000000008F62006800021702E2
-:1002500014400004240200013C0108000A00009739
-:10026000AC20240CAC8200343C04080024841ACC5A
-:100270003C0508008CA5240C00003021000038212A
-:10028000AFA000100E00067CAFA000148FBF0018B6
-:1002900003E0000827BD002027BDFFE03C04080064
-:1002A00024841AD8000028210000302100003821C1
-:1002B000AFBF0018AFA000100E00067CAFA0001466
-:1002C0000E00005B000000000E0000B400002021C2
-:1002D0008FBF001803E0000827BD002024020001A2
-:1002E0008F63682000821004000210270062182427
-:1002F00003E00008AF63682027BDFFD0AFBF002C2C
-:10030000AFB60028AFB50024AFB40020AFB3001CD7
-:10031000AFB20018AFB10014AFB000108F675C5CD3
-:100320003C03080024631BBC8C62000014470005DA
-:100330003C0200FF3C02080090421B981440011947
-:100340003C0200FF3442FFF800E28824AC67000062
-:1003500000111902306300FF30E20003000211C0F7
-:100360000062282500A04021000716023C03080077
-:1003700090631B983044000F1460003600804821C1
-:10038000240200013C010800A0221B980005110076
-:10039000008210253C010800AC201B9C3C01080099
-:1003A000AC201BA03C010800AC201BA43C010800B1
-:1003B000AC201BAC3C010800AC201BB83C01080081
-:1003C000AC201BB03C010800AC201BB43C01080071
-:1003D000A42223D89622000C30437FFF3C01080062
-:1003E000A4222410304280003C010800A4231BC634
-:1003F00010400005240200013C010800AC2223F457
-:100400000A0001022406003E240600363C010800D2
-:10041000AC2023F49622000A3C03080094631BC618
-:100420003C010800AC2023F03C010800AC2023F87C
-:10043000000213020002108000C210210062182185
-:100440003C010800A42223D03C0108000A00011549
-:10045000A4231B969622000C3C010800A42223EC46
-:100460003C04080024841B9C8C82000000021100C4
-:100470003C01080000220821AC311BC88C8200001E
-:10048000000211003C01080000220821AC271BCC0F
-:100490008C82000025030001306601FF000211007C
-:1004A0003C01080000220821AC261BD08C820000F1
-:1004B000000211003C01080000220821AC291BD4D5
-:1004C000962300083C0208008C421BAC0043282104
-:1004D0003C010800AC251BAC9622000A3042000407
-:1004E00014400018000611008F630C143063000FD5
-:1004F0002C6200021440000B3C02C0008F630C14FD
-:100500003C0208008C421B403063000F2442000173
-:100510003C010800AC221B402C6200021040FFF797
-:100520003C02C00000E21825AF635C5C8F625C5047
-:100530003042000210400014000000000A00014791
-:10054000000000003C0308008C631B803C04080092
-:1005500094841B94012210253C010800A42223DA74
-:10056000240200013C010800AC221BB824630001F6
-:100570000085202A3C01080010800003AC231B806A
-:100580003C010800A4251B943C06080024C61B9CC3
-:100590008CC2000024420001ACC20000284200804E
-:1005A00014400005000000000E000656240400025E
-:1005B0000A0001E6000000003C0208008C421BB863
-:1005C00010400078240200013C05080090A51B980B
-:1005D00014A20072000000003C15080096B51B969E
-:1005E0003C0408008C841BAC32A3FFFF0083102A5C
-:1005F0001440006C000000001483000300000000A1
-:100600003C010800AC2523F01060005C0000902144
-:1006100024D600040060A02124D300148EC2000060
-:10062000000281003C110800023088210E000625DE
-:100630008E311BC80040282110A00054000000008B
-:100640009628000A31020040104000052407180CCB
-:100650008E22000C2407188C00021400ACA2001893
-:100660003C030800007018218C631BD03C0208007A
-:10067000005010218C421BD400031D000002140006
-:1006800000621825ACA300148EC300049622000853
-:10069000004320233242FFFF3083FFFF004310213D
-:1006A0000282102A1440000202B23023008030215E
-:1006B0008E62000030C4FFFF00441021AE620000D3
-:1006C0008E220000ACA200008E2200048E63FFF494
-:1006D00000431021ACA20004A4A6000E8E62FFF419
-:1006E00000441021AE62FFF4962300080043102A54
-:1006F00014400005024690218E62FFF0AE60FFF4C8
-:1007000024420001AE62FFF0ACA000083242FFFFBD
-:1007100014540008240203053102008054400001F3
-:1007200034E7001024020905A4A2000C0A0001CB42
-:1007300034E70020A4A2000C3C0208008C4223F005
-:10074000104000033C024B650A0001D3344276544A
-:100750003C02B49A344289ABACA2001C30E2FFFFE9
-:10076000ACA200100E0005A200A020213242FFFF23
-:100770000054102B1440FFA90000000024020002C6
-:100780003C0108000A0001E6A0221B988EC2083C2A
-:10079000244200010A0001E6AEC2083C0E0004C07B
-:1007A000000000008FBF002C8FB600288FB50024FA
-:1007B0008FB400208FB3001C8FB200188FB10014CB
-:1007C0008FB0001003E0000827BD003027BDFFD028
-:1007D000AFBF0028AFB30024AFB20020AFB1001C00
-:1007E000AFB000188F725C9C3C0200FF3442FFF8EF
-:1007F0003C07080024E71BB4024288249623000E1D
-:100800008CE2000000431021ACE200008E220010B8
-:100810003042002014400011008098210E00063B59
-:10082000022020213C02C00002421825AF635C9CDC
-:100830008F625C90304200021040011E00000000F8
-:10084000AF635C9C8F625C903042000210400119E3
-:10085000000000000A00020D000000008E240008C5
-:100860008E23001400041402000231C0000315029C
-:10087000304201FF2442FFFF3042007F0003194253
-:1008800030637800000211002442400000624821D9
-:100890009522000A3084FFFF30420008104000B06B
-:1008A000000429C03C0208008C42240014400024AB
-:1008B00024C5000894C200143C010800A42223D0DF
-:1008C0008CC40010000414023C010800A42223D2AE
-:1008D0003C010800A42423D494C2000E3083FFFFFF
-:1008E000004310233C010800AC22240894C2001AE3
-:1008F0003C010800AC2624003C010800AC32240472
-:100900003C010800AC2223FC3C02C0000242182536
-:10091000AF635C9C8F625C9030420002104000E547
-:1009200000000000AF635C9C8F625C90304200026C
-:10093000104000E0000000000A0002460000000035
-:1009400094C2000E3C030800946323D40043402368
-:100950003103FFFF2C6200081040001C0000000063
-:1009600094C200142442002800A22821000310424F
-:100970001840000B0000202124E6084800403821E0
-:1009800094A300008CC200002484000100431021C5
-:10099000ACC200000087102A1440FFF924A5000211
-:1009A000310200011040001F3C0240003C040800DE
-:1009B000248423FCA0A0000194A300008C820000EA
-:1009C000004310210A000285AC8200008F6268009B
-:1009D0003C030010004310241040000900000000F8
-:1009E00094C2001A3C0308008C6323FC00431021CE
-:1009F0003C010800AC2223FC0A0002863C024000B5
-:100A000094C2001A94C4001C3C0308008C6323FCAD
-:100A100000441023006218213C010800AC2323FC91
-:100A20003C02400002421825AF635C9C8F625C90E0
-:100A3000304200021440FFFC000000009522000A32
-:100A4000304200101040009B000000003C030800F2
-:100A5000946323D43C07080024E724008CE40000BE
-:100A60008F62680024630030008328213C0300105B
-:100A7000004310241440000A0000000094A2000467
-:100A80003C0408008C8424083C0308008C6323FC8D
-:100A900000441023006218213C010800AC2323FC11
-:100AA0003C0408008C8423FC00041C023082FFFFFD
-:100AB000006220210004140200822021000410277B
-:100AC000A4A200063C0308008C6324043C0200FF3F
-:100AD0003442FFF8006288249622000824050001B1
-:100AE00024034000000231C000801021A4C2001A7B
-:100AF000A4C0001CACE000003C010800AC251B6059
-:100B0000AF635CB88F625CB03042000210400003FB
-:100B1000000000003C010800AC201B608E22000891
-:100B2000AF625CB88F625CB03042000210400003DC
-:100B3000000000003C010800AC201B603C020800E3
-:100B40008C421B601040FFEC000000003C040800D9
-:100B50000E00063B8C8424040A00032A00000000D7
-:100B60003C03080090631B982402000214620003F7
-:100B70003C034B650A0002E1000080218E22001C2C
-:100B80003463765410430002241000022410000144
-:100B900000C020210E000350020030212402000377
-:100BA0003C010800A0221B98240200021202000A45
-:100BB000240200013C0308008C6323F0106200064D
-:100BC000000000003C020800944223D800021400F8
-:100BD0000A00031FAE2200143C040800248423DA18
-:100BE0009482000000021400AE2200143C020800AF
-:100BF0008C421BBC3C03C0003C010800A0201B9899
-:100C000000431025AF625C5C8F625C503042000292
-:100C100010400009000000002484F7E28C820000EC
-:100C200000431025AF625C5C8F625C503042000272
-:100C30001440FFFA000000003C02080024421B841C
-:100C40008C43000024630001AC4300008F630C144C
-:100C50003063000F2C6200021440000C3C02400084
-:100C60008F630C143C0208008C421B403063000F61
-:100C7000244200013C010800AC221B402C6200020F
-:100C80001040FFF7000000003C024000024218251F
-:100C9000AF635C9C8F625C90304200021440FFFCAA
-:100CA0000000000012600003000000000E0004C0FD
-:100CB000000000008FBF00288FB300248FB20020F7
-:100CC0008FB1001C8FB0001803E0000827BD003072
-:100CD0008F6344503C04080024841B888C820000ED
-:100CE00000031C020043102B144000073C0380004B
-:100CF0008C8400048F62445000021C020083102B7D
-:100D00001040FFFC3C038000AF6344448F624444C6
-:100D1000004310241440FFFD000000008F6244488F
-:100D200003E000083042FFFF3C0240000082202523
-:100D3000AF645C388F625C30304200021440FFFCCC
-:100D40000000000003E000080000000027BDFFE0F5
-:100D50000080582114C00011256E00083C020800D4
-:100D60008C4223F410400007240200163C010800C6
-:100D7000A42223D22402002A3C0108000A000364B2
-:100D8000A42223D48D670010000714023C01080040
-:100D9000A42223D23C010800A42723D43C04080049
-:100DA000948423D43C030800946323D295CF000697
-:100DB0003C020800944223D00083202301E2C02398
-:100DC0003065FFFF24A2002801C248213082FFFFC6
-:100DD00014C0001A012260219582000C3042003FAD
-:100DE0003C010800A42223D69582000495830006C6
-:100DF0003C010800AC2023E43C010800AC2023E8BF
-:100E000000021400004310253C010800AC221BC066
-:100E1000952200043C010800A4221BC49523000273
-:100E200001E510230043102A1040001024020001A5
-:100E30003C0108000A000398AC2223F83C03080098
-:100E40008C6323E83C02080094421BC40043102139
-:100E5000A52200043C02080094421BC0A5820004A5
-:100E60003C0208008C421BC0A58200063C02080020
-:100E70008C4223F03C0D08008DAD23E43C0A0800B1
-:100E8000144000E58D4A23E83C02080094421BC44C
-:100E9000004A18213063FFFF0062182B2402000271
-:100EA00010C2000D014350233C020800944223D697
-:100EB0003042000910400008000000009582000C3C
-:100EC0003042FFF6A582000C3C020800944223D673
-:100ED0003042000901A268233C0208008C4223F83A
-:100EE0001040004A012038213C020800944223D2DD
-:100EF00000004021A520000A01E21023A5220002E3
-:100F00003082FFFF0002104218400008000030212C
-:100F10000040182194E200002508000100C23021A1
-:100F20000103102A1440FFFB24E7000200061C0204
-:100F300030C2FFFF006230210006140200C23021DF
-:100F400000C0282100061027A522000A0000302139
-:100F50002527000C0000402194E200002508000134
-:100F600000C230212D0200041440FFFB24E70002E0
-:100F70009522000200004021912300090044202313
-:100F8000018038213082FFFFA4E0001000621821A8
-:100F9000000210421840001000C3302100404821D8
-:100FA00094E2000024E7000200C2302130E2007F1A
-:100FB00014400006250800018D6300003C02007FFC
-:100FC0003442FF8000625824256700080109102A76
-:100FD0001440FFF3000000003082000110400005C3
-:100FE00000061C02A0E0000194E2000000C23021D3
-:100FF00000061C0230C2FFFF00623021000614020E
-:1010000000C230210A00047D30C6FFFF2402000226
-:1010100014C20081000000003C0208008C42240C35
-:1010200014400007000000003C020800944223D254
-:101030009523000201E210231062007700000000F7
-:101040003C020800944223D201E21023A5220002B0
-:101050003C0208008C42240C1040001A31E3FFFFD0
-:101060008DC700103C02080094421B9600E040210E
-:1010700000072C0200AA20210043102300823823FD
-:101080000007240230E2FFFF00823821000710270A
-:10109000A522000A3102FFFF3C040800948423D4F7
-:1010A0000045302300E0282100641823006D18213A
-:1010B00000C3302100061C0230C2FFFF0A00047D7D
-:1010C0000062302101203821000040213082FFFFE2
-:1010D0000002104218400008000030210040182192
-:1010E00094E200002508000100C230210103102A0B
-:1010F0001440FFFB24E7000200061C0230C2FFFF81
-:10110000006230210006140200C2302100C02821F4
-:1011100000061027A522000A000030212527000C18
-:101120000000402194E200002508000100C23021A7
-:101130002D0200041440FFFB24E700029522000268
-:101140000000402191230009004420230180382120
-:101150003082FFFFA4E000103C040800948423D4F4
-:101160000062182100C3302100061C0230C2FFFFBC
-:101170000062302100061C023C020800944223D089
-:1011800000C348210044102300021FC20043102165
-:1011900000021043184000100000302100402021C0
-:1011A00094E2000024E7000200C2302130E2007F18
-:1011B00014400006250800018D6300003C02007FFA
-:1011C0003442FF8000625824256700080104102A79
-:1011D0001440FFF3000000003C020800944223EC9E
-:1011E00000C230213122FFFF00C2302100061C0264
-:1011F00030C2FFFF006230210006140200C230211D
-:1012000000C0402100061027A5820010ADC00014C8
-:101210000A00049DADC000008DC7001000E0402111
-:101220001140000700072C0200AA3021000614021A
-:1012300030C3FFFF004330210006140200C2282102
-:1012400000051027A522000A3C030800946323D45C
-:101250003102FFFF01E210210043302300CD302195
-:1012600000061C0230C2FFFF00623021000614029B
-:1012700000C2302100C0402100061027A5820010C6
-:101280003102FFFF00051C0000431025ADC2001015
-:101290003C0208008C4223F4104000052DE205EBCF
-:1012A0001440000225E2FFF234028870A5C2003427
-:1012B0003C030800246323E88C6200002442000100
-:1012C000AC6200003C0408008C8423E43C0208006B
-:1012D0008C421BC03303FFFF0083202100431821F1
-:1012E0000062102B3C010800AC2423E410400003F2
-:1012F0002482FFFF3C010800AC2223E43C010800EB
-:10130000AC231BC003E0000827BD002027BDFFB8A9
-:101310003C05080024A51B96AFBF0044AFBE0040AB
-:10132000AFB7003CAFB60038AFB50034AFB4003053
-:10133000AFB3002CAFB20028AFB10024AFB0002093
-:1013400094A900003C020800944223D03C0308000A
-:101350008C631BB03C0408008C841BAC012210235E
-:101360000064182AA7A9001E106000BEA7A20016DC
-:1013700024BE002297B6001E24B3001A24B700161C
-:101380008FC2000014400008000000008FC2FFF868
-:1013900097A300168FC4FFF4004310210082202A77
-:1013A000148000B00000000097D5081832A2FFFF9B
-:1013B000104000A3000090210040A02100008821DF
-:1013C0000E000625000000000040302114C0000778
-:1013D000000000003C0208008C4223DC2442000193
-:1013E0003C0108000A000596AC2223DC3C100800F2
-:1013F000021180218E101BC89608000A310200409D
-:10140000104000052407180C8E02000C2407188CCD
-:1014100000021400ACC200183102008054400001E8
-:1014200034E700103C020800005110218C421BD010
-:101430003C030800007118218C631BD400021500C6
-:1014400000031C0000431025ACC2001496040008E1
-:101450003242FFFF008210210282102A1440000253
-:1014600002B22823008028218E020000024590212C
-:10147000ACC200008E02000400C020212631001002
-:10148000AC82000430E2FFFFAC800008A485000EAF
-:10149000AC820010240203050E0005A2A482000CF9
-:1014A0003242FFFF0054102B1440FFC53242FFFFB1
-:1014B0000A00058E000000008E6200008E63FFFCB3
-:1014C0000043102A10400067000000008E62FFF009
-:1014D000000289003C100800021180210E00062540
-:1014E0008E101BC80040302114C000050000000011
-:1014F0008E62082C244200010A000596AE62082C78
-:101500009608000A31020040104000052407180C1C
-:101510008E02000C2407188C00021400ACC20018C4
-:101520003C020800005110218C421BD03C030800F3
-:10153000007118218C631BD40002150000031C00ED
-:1015400000431025ACC200148E63FFF4960200081D
-:10155000004320233242FFFF3083FFFF004310216E
-:1015600002C2102A104000030080282197A9001E03
-:10157000013228238E62000030A4FFFF00441021B6
-:10158000AE620000A4C5000E8E020000ACC20000D6
-:101590008E0200048E63FFF400431021ACC20004ED
-:1015A0008E63FFF496020008006418210062102A7E
-:1015B00014400006024590218E62FFF0AE60FFF4F9
-:1015C000244200010A000571AE62FFF0AE63FFF431
-:1015D000ACC000083242FFFF105600033102000485
-:1015E000104000062402030531020080544000012F
-:1015F00034E7001034E7002024020905A4C2000CDF
-:101600008EE300008EE20004146200073C02B49AEC
-:101610008EE208605440000134E704003C024B6550
-:101620000A00058834427654344289ABACC2001CAF
-:1016300030E2FFFFACC200100E0005A200C0202166
-:101640003242FFFF0056102B1440FF9B00000000A9
-:101650008E6200008E63FFFC0043102A1440FF4896
-:10166000000000008FBF00448FBE00408FB7003CD9
-:101670008FB600388FB500348FB400308FB3002C94
-:101680008FB200288FB100248FB0002003E0000843
-:1016900027BD004827BDFFE8AFBF0014AFB0001062
-:1016A0008F6244508F6344100A0005B1008080218E
-:1016B0008F626820304220001040000300000000CC
-:1016C0000E0001F0000020218F6244508F6344100F
-:1016D0003042FFFF0043102B1440FFF500000000D4
-:1016E0008F630C143063000F2C6200021440000B57
-:1016F000000000008F630C143C0208008C421B4069
-:101700003063000F244200013C010800AC221B4062
-:101710002C6200021040FFF700000000AF705C1860
-:101720008F625C103042000210400009000000008F
-:101730008F626820304220001040FFF80000000057
-:101740000E0001F0000020210A0005C40000000086
-:101750008FBF00148FB0001003E0000827BD0018F1
-:1017600000000000000000000000000027BDFFE8AE
-:101770003C1BC000AFBF0014AFB00010AF60680CDE
-:101780008F62680434420082AF6268048F63400055
-:1017900024020B503C010800AC221B5424020B789D
-:1017A0003C010800AC221B6434630002AF634000BC
-:1017B0000E000605008080213C010800A0221B6865
-:1017C000304200FF24030002144300050000000023
-:1017D0003C0208008C421B540A0005F8AC5000C0C3
-:1017E0003C0208008C421B54AC5000BC8F62443455
-:1017F0008F6344388F6444103C010800AC221B5CAA
-:101800003C010800AC231B6C3C010800AC241B58B5
-:101810008FBF00148FB0001003E0000827BD001830
-:101820003C0408008C8700003C03AA553463AA5589
-:101830003C06C003AC8300008CC2000014430007C8
-:10184000240500023C0355AA346355AAAC8300006A
-:101850008CC2000050430001240500013C02080036
-:10186000AC47000003E0000800A0102127BDFFF8EE
-:1018700018800009000028218F63680C8F62680CB3
-:101880001043FFFE0000000024A5000100A4102A60
-:101890001440FFF90000000003E0000827BD000825
-:1018A0008F6344503C0208008C421B5C00031C0206
-:1018B0000043102B144000083C0380003C04080047
-:1018C0008C841B6C8F62445000021C020083102B1E
-:1018D0001040FFFC3C038000AF6344448F624444EB
-:1018E000004310241440FFFD000000008F624448B4
-:1018F00003E000083042FFFF3082FFFF2442E00097
-:101900002C422001144000033C0240000A0006481B
-:101910002402FFFF00822025AF645C388F625C30B8
-:10192000304200021440FFFC0000102103E00008D8
-:10193000000000008F6244503C0308008C631B5879
-:101940000A0006513042FFFF8F6244503042FFFFD1
-:101950000043102B1440FFFC0000000003E00008CF
-:101960000000000027BDFFE0008028213C040800A3
-:1019700024841AF00000302100003821AFBF001885
-:10198000AFA000100E00067CAFA000140A00066095
-:10199000000000008FBF001803E0000827BD0020F2
-:1019A0000000000000000000000000003C020800F1
-:1019B000344230003C030800346330003C0408002B
-:1019C000348437FF3C010800AC221B742402004021
-:1019D0003C010800AC221B783C010800AC201B70C5
-:1019E000AC600000246300040083102B5040FFFD16
-:1019F000AC60000003E00008000000000080482107
-:101A00008FAA00103C0208008C421B703C040800A6
-:101A10008C841B788FAB0014244300010044102BEE
-:101A20003C010800AC231B7014400003000040215F
-:101A30003C010800AC201B703C0208008C421B706B
-:101A40003C0308008C631B749124000000021140C9
-:101A5000004310210048102125080001A044000087
-:101A6000290200081440FFF4252900013C02080067
-:101A70008C421B703C0308008C631B748F64680CE1
-:101A80000002114000431021AC440008AC45000C9A
-:101A9000AC460010AC470014AC4A001803E0000844
-:101AA000AC4B001C00000000000000004D61696E9E
-:101AB00043707542000000004D61696E43707541CE
-:101AC00000000000000000000000000073746B6F55
-:101AD00066666C64496E000073746B6F66662A2AD2
-:101AE0000000000053774576656E743000000000FA
-:101AF000000000000000000000000000666174614A
-:101B00006C45727200000000000000000000000040
-:101B100000000000000000000000000000000000C5
-:101B200000000000000000000000000000000000B5
-:101B300073746B6F66666C645F76312E362E300080
-:101B40000000000000000000000000000000000095
-:0C1B500000000000000000000000000089
-:00000001FF
- * Firmware is:
- * Derived from proprietary unpublished source code,
- * Copyright (C) 2000-2003 Broadcom Corporation.
- *
- * Permission is hereby granted for the distribution of this firmware
- * data in hexadecimal or equivalent format, provided this copyright
- * notice is accompanying it.
diff --git a/firmware/tigon/tg3_tso5.bin.ihex b/firmware/tigon/tg3_tso5.bin.ihex
deleted file mode 100644
index 33672514eab3..000000000000
--- a/firmware/tigon/tg3_tso5.bin.ihex
+++ /dev/null
@@ -1,252 +0,0 @@
-:10000000010200000001000000000FD80C004003B6
-:100010000000000000010F040000000010000003B9
-:10002000000000000000000D0000000D3C1D00015C
-:1000300037BDE00003A0F0213C10000126100000B5
-:100040000C004010000000000000000D27BDFFE084
-:100050003C04FEFEAFBF00180C0042E834840002EE
-:100060000C004364000000003C03000190630F3467
-:10007000240200023C04000124840E9C146200034C
-:10008000240500013C04000124840E902406000293
-:1000900000003821AFA000100C004378AFA000147E
-:1000A0000C00402C000000008FBF001803E0000887
-:1000B00027BD0020000000000000000027BDFFE079
-:1000C000AFBF001CAFB20018AFB100140C0042D497
-:1000D000AFB000103C128000241100018F70681036
-:1000E0003202040010400007000000008F64100876
-:1000F0000092102414400003000000000C00406433
-:10010000000000003C02000190420F561051000315
-:10011000320202001040FFF1000000000C0041B468
-:100120000000000008004034000000008FBF001CE9
-:100130008FB200188FB100148FB0001003E00008D8
-:1001400027BD002027BDFFE03C04000124840EB041
-:10015000000028210000302100003821AFBF001826
-:10016000AFA000100C004378AFA000140000D02115
-:1001700024020130AF6250003C010001A4200F5066
-:100180003C010001A0200F578FBF001803E00008BA
-:1001900027BD002000000000000000003C0300011B
-:1001A00024630F609062000027BDFFF0144000033D
-:1001B0000080C02108004073000048213C0220005C
-:1001C00003021024104000032409000208004073B9
-:1001D000A0600000240900010018104030431F8077
-:1001E000346F80081520004B25EB00283C040001EB
-:1001F000008320218C8480103C05000124A50F7A07
-:1002000000041402A0A200003C010001A0240F7B06
-:100210003C02000100431021944280143C01000183
-:10022000A0220F7C3C0C0001018360218D8C801882
-:10023000304200FF24420008000220C324020001D3
-:100240003C010001A0220F600124102B1040000C83
-:100250000000382124A6000E016028218CA2000095
-:100260008CA3000424A5000824E70001ACC2000010
-:10027000ACC3000400E4102B1440FFF824C60008AF
-:10028000000038213C08000125080F7B9106000082
-:100290003C02000190420F7C2503000D00C3282181
-:1002A0000046102300021FC2004310210002104329
-:1002B0001840000C0000202191020001004610238C
-:1002C00000021FC2004310210002184394A2000044
-:1002D00024E700010082202100E3102A1440FFFBE4
-:1002E00024A5000200041C023082FFFF00622021CE
-:1002F00000041402008220213C02FFFF018210242E
-:100300003083FFFF004310253C010001080040FA44
-:10031000AC220F803C05000124A50F7C90A20000B8
-:100320003C0C0001018360218D8C8018000220C2EA
-:100330001080000E000038210160302124A5000C3F
-:100340008CA200008CA3000424A5000824E700016F
-:10035000ACC20000ACC3000400E4102B1440FFF852
-:1003600024C600083C05000124A50F7C90A20000D3
-:1003700030430007240200041062001128620005C7
-:10038000104000052402000210620008000710C09F
-:10039000080040FA00000000240200061062000E6F
-:1003A000000710C0080040FA0000000000A2182159
-:1003B0009463000C004B1021080040FAA443000095
-:1003C000000710C000A218218C63000C004B102104
-:1003D000080040FAAC43000000A218218C63000C16
-:1003E000004B202100A21021AC8300009442001099
-:1003F000A482000495E700063C02000190420F7CB5
-:100400003C03000190630F7A00E2C8233C02000124
-:1004100090420F7B2463002801E3402124420028FE
-:100420001520001201E2302194C2000C3C010001B1
-:10043000A4220F7894C2000494C300063C0100017A
-:10044000A4200F763C010001A4200F7200021400CA
-:10045000004310253C010001AC220F6C9502000402
-:100460003C01000108004124A4220F703C0200015D
-:1004700094420F703C03000194630F7200431021FB
-:10048000A50200043C02000194420F6CA4C20004C7
-:100490003C0200018C420F6CA4C200063C04000127
-:1004A00094840F723C02000194420F703C0A0001D8
-:1004B000954A0F76004418213063FFFF0062182A26
-:1004C000240200021122000B008320233C030001C0
-:1004D00094630F7830620009104000063062FFF626
-:1004E000A4C2000C3C02000194420F783042000983
-:1004F00001425023240200011122001B2922000284
-:1005000050400005240200021120000731A2FFFF25
-:1005100008004197000000001122001D240200166F
-:100520000800419731A2FFFF3C0E000195CE0F80DD
-:10053000108000050180682101C4202100041C02F4
-:100540003082FFFF00627021000E1027A502000A12
-:100550003C03000190630F7B31A2FFFF00E21021FA
-:100560000800418D004320233C02000194420F808B
-:100570000044202100041C023082FFFF0062202181
-:10058000008070210004102708004185A502000AA0
-:100590003C05000124A50F7A90A30000146200021C
-:1005A00024E2FFF2A5E2003490A2000000E2102352
-:1005B000A50200023C03000194630F803C0200018D
-:1005C00094420F5A30E5FFFF0064182100451023C4
-:1005D0000062202300041C023082FFFF0062202101
-:1005E00000041027A502000A3C03000190630F7C61
-:1005F0002462000114A20005008070210163102113
-:10060000904200000800418500026200246200025E
-:1006100014A20003306200FE004B1021944C000035
-:100620003C02000194420F823183FFFF3C04000131
-:1006300090840F7B0043102100E21021004420230E
-:10064000008A202100041C023082FFFF006220216A
-:100650000004140200822021008068210004102779
-:10066000A4C2001031A2FFFF000E1C0000431025A1
-:100670003C04000124840F72ADE20010948200005B
-:100680003C05000194A50F763C0300018C630F6CC0
-:100690002442000100B92821A48200003322FFFF78
-:1006A000006220210083182B3C010001A4250F7655
-:1006B0001060000324A2FFFF3C010001A4220F767A
-:1006C0003C024000030210253C010001AC240F6CE9
-:1006D000AF62100803E0000827BD00103C030001D2
-:1006E00090630F5627BDFFE824020001AFBF00143E
-:1006F00010620026AFB000108F620CF42442FFFF9E
-:100700003042007F000211008C4340003C01000198
-:10071000AC230F648C434008244440008C5C4004AC
-:1007200030620040144000022402008824020008C5
-:100730003C010001A4220F68306200041040000553
-:10074000240200013C010001A0220F57080041D5FE
-:10075000000314023C010001A0200F570003140203
-:100760003C010001A4220F549483000C24020001D8
-:100770003C010001A4200F503C010001A0220F56B3
-:100780003C010001A4230F62240200011342001E59
-:10079000000000001340000524020003134200671C
-:1007A00000000000080042CF000000003C020001F1
-:1007B00094420F62241A00013C010001A4200F5E44
-:1007C0003C010001A4200F52304407FF00021BC26D
-:1007D000000318233063003E3463003600021242E7
-:1007E0003042003C006218213C010001A4240F5853
-:1007F00000832021246300303C010001A4240F5A0F
-:100800003C010001A4230F5C3C06000124C60F52EA
-:1008100094C5000094C300023C04000194840F5A64
-:10082000006510210044102A104000133C10800085
-:1008300000A31021A4C200003C02A000AF620CF48F
-:100840003C010001A0200F568F6410080090102476
-:1008500014400003000000000C0040640000000091
-:100860008F620CF400501024104000B7000000000C
-:100870000800420F000000003C03000194630F5089
-:1008800000851023A4C40000006218213042FFFF3D
-:100890003C010001A4230F50AF620CE83C020001B0
-:1008A00094420F6834420024AF620CEC94C30002FF
-:1008B0003C02000194420F50146200123C0280007E
-:1008C0003C1080003C02A000AF620CF43C0100012F
-:1008D000A0200F568F6410080090102414400003CD
-:1008E000000000000C004064000000008F620CF467
-:1008F000005010241440FFF700000000080042CF11
-:10090000241A0003AF620CF43C1080008F641008BE
-:100910000090102414400003000000000C0040640C
-:10092000000000008F620CF4005010241440FFF708
-:1009300000000000080042CF241A00033C07000119
-:1009400024E70F5094E2000003821021AF620CE014
-:100950003C0200018C420F64AF620CE43C050001D4
-:1009600094A50F5494E300003C04000194840F58B4
-:100970003C02000194420F5E00A328230082202342
-:1009800030A6FFFF3083FFFF00C3102B144000434D
-:10099000000000003C02000194420F5C00021400C1
-:1009A00000621025AF620CE894E200003C030001F5
-:1009B00094630F5400441021A4E200003042FFFF72
-:1009C000144300213C0200083C02000190420F57F2
-:1009D000104000063C03000C3C02000194420F68EA
-:1009E000346306240800427C0000D0213C02000150
-:1009F00094420F683C03000834630624004310252A
-:100A0000AF620CEC3C1080003C02A000AF620CF422
-:100A10003C010001A0200F568F64100800901024A4
-:100A200014400003000000000C00406400000000BF
-:100A30008F620CF4005010241040001500000000DC
-:100A400008004283000000003C03000194630F682B
-:100A5000344206243C108000006218253C028000CD
-:100A6000AF630CECAF620CF48F641008009010249C
-:100A700014400003000000000C004064000000006F
-:100A80008F620CF4005010241440FFF700000000A7
-:100A90003C010001080042CFA4200F5E3C0200018F
-:100AA00094420F5C0002140000C21025AF620CE8F3
-:100AB0003C02000190420F57104000093C03000C1B
-:100AC0003C02000194420F68346306240000D021E8
-:100AD00000431025AF620CEC080042C13C108000BE
-:100AE0003C02000194420F683C0300083463060492
-:100AF00000431025AF620CEC3C02000194420F5EF3
-:100B0000004510213C010001A4220F5E3C10800032
-:100B10003C02A000AF620CF43C010001A0200F5683
-:100B20008F6410080090102414400003000000009F
-:100B30000C004064000000008F620CF40050102490
-:100B40001440FFF7000000008FBF00148FB00010AA
-:100B500003E0000827BD00180000000027BDFFE0EB
-:100B60003C04000124840EC0000028210000302134
-:100B700000003821AFBF0018AFA000100C00437870
-:100B8000AFA000140000D02124020130AF62500059
-:100B90003C010001A4200F503C010001A0200F5790
-:100BA0008FBF001803E0000827BD002027BDFFE825
-:100BB0003C1BC000AFBF0014AFB00010AF60680CAA
-:100BC0008F62680434420082AF6268048F63400021
-:100BD00024020B503C010001AC220F2024020B78B0
-:100BE0003C010001AC220F3034630002AF634000CF
-:100BF0000C004315008080213C010001A0220F342D
-:100C0000304200FF240300021443000500000000EE
-:100C10003C0200018C420F2008004308AC5000C089
-:100C20003C0200018C420F20AC5000BC8F62443467
-:100C30008F6344388F6444103C010001AC220F28BC
-:100C40003C010001AC230F383C010001AC240F240F
-:100C50008FBF00148FB0001003E0000827BD0018FC
-:100C600003E000082402000127BDFFF818800009F6
-:100C7000000028218F63680C8F62680C1043FFFE10
-:100C80000000000024A5000100A4102A1440FFF970
-:100C90000000000003E0000827BD00088F634450F7
-:100CA0003C0200018C420F2800031C020043102B61
-:100CB000144000083C0380003C0400018C840F3881
-:100CC0008F62445000021C020083102B1040FFFC76
-:100CD0003C038000AF6344448F62444400431024CB
-:100CE0001440FFFD000000008F62444803E000084C
-:100CF0003042FFFF3082FFFF2442E0002C422001FF
-:100D0000144000033C024000080043472402FFFF58
-:100D100000822025AF645C388F625C303042000274
-:100D20001440FFFC0000102103E000080000000058
-:100D30008F6244503C0300018C630F240800435031
-:100D40003042FFFF8F6244503042FFFF0043102BC0
-:100D50001440FFFC0000000003E000080000000059
-:100D600027BDFFE0008028213C04000124840ED030
-:100D70000000302100003821AFBF0018AFA00010E4
-:100D80000C004378AFA000140800435F000000008F
-:100D90008FBF001803E0000827BD00203C020001BF
-:100DA0003442D6003C0300013463D6003C04000109
-:100DB0003484DDFF3C010001AC220F4024020040DE
-:100DC0003C010001AC220F443C010001AC200F3C6F
-:100DD000AC600000246300040083102B5040FFFD32
-:100DE000AC60000003E00008000000000080482123
-:100DF0008FAA00103C0200018C420F3C3C04000111
-:100E00008C840F448FAB0014244300010044102B4A
-:100E10003C010001AC230F3C1440000300004021C2
-:100E20003C010001AC200F3C3C0200018C420F3C15
-:100E30003C0300018C630F4091240000000211402C
-:100E4000004310210048102125080001A0440000A3
-:100E5000290200081440FFF4252900013C0200018A
-:100E60008C420F3C3C0300018C630F408F64680C84
-:100E70000002114000431021AC440008AC45000CB6
-:100E8000AC460010AC470014AC4A001803E0000860
-:100E9000AC4B001C00000000000000004D61696EBA
-:100EA00043707542000000004D61696E43707541EA
-:100EB00000000000000000000000000073746B6F71
-:100EC00066666C64000000000000000073746B6FC5
-:100ED00066666C64000000000000000066617461DA
-:100EE0006C4572720000000000000000000000006D
-:100EF00000000000000000000000000000000000F2
-:100F000000000000000000000000000000000000E1
-:100F100073746B6F66666C645F76312E322E3000B0
-:0C0F2000000000000000000000000000C5
-:00000001FF
- * Firmware is:
- * Derived from proprietary unpublished source code,
- * Copyright (C) 2000-2003 Broadcom Corporation.
- *
- * Permission is hereby granted for the distribution of this firmware
- * data in hexadecimal or equivalent format, provided this copyright
- * notice is accompanying it.
-/* 5705 needs a special version of the TSO firmware. */
diff --git a/firmware/ttusb-budget/dspbootcode.bin.ihex b/firmware/ttusb-budget/dspbootcode.bin.ihex
deleted file mode 100644
index b4b2247077c4..000000000000
--- a/firmware/ttusb-budget/dspbootcode.bin.ihex
+++ /dev/null
@@ -1,820 +0,0 @@
-:1000000008AA001800030800001000000180185F13
-:100010000000018077182AEB6BF8001803FF68F8DE
-:100020000018FFFEF7B8F7BEF6B9F4A0F6B7F6B5BC
-:10003000F6B6F02019DFF1000001F84D01ABF6B87B
-:10004000F02019DFF07301A57EF80012F000000126
-:1000500047F800117E9200F80011F00000017EF8D0
-:100060000011F00000016C89019AF7B8EEFCF02055
-:10007000FFFFF1000001F84D01BFF27301B94E021C
-:10008000F495F5E356027E001100FA4C01B76B03BC
-:100090000001F6B8EE04F0740DA7F07401C54A1122
-:1000A0004A1672112AE610F80011FA4501DBF495A0
-:1000B000EEFF4811F0002AC68816F495F49510EE6C
-:1000C000FFFFF4E36CE9FFFF01D510F82AE7F845DC
-:1000D00001E210F82AE7F4E3F07401FFEE018A165A
-:1000E0008A11FC00F7B8E9204A1109F82AE6F84E0F
-:1000F00001F3F27301FDF495E80172112AE649114A
-:1001000080E12AC6F3000001E80081F82AE68A119E
-:10011000FC00F495F073020010F82A0FFC004A115D
-:10012000F074020280F82A107308000940F82A15BA
-:1001300082F80011F495771003E8F5A9F830022150
-:1001400071F82A102A1556F82A0CF0E34EF82A16F0
-:10015000E8004EF82A0C8A11FC004A064A074A1D9C
-:1001600068F800077D3F69F80007400068F8001D47
-:10017000FFFC6BF82A0F00018A1D8A078A06F4EB40
-:10018000EEFD76F82A0F000076000000FB80194C87
-:10019000F495E80080F82A11F980190780F82A0EF2
-:1001A000F980166676002A1210F82A11F98018E3F1
-:1001B00010F82A0EF980166610F82A0EF9801687B4
-:1001C000EE03FC004A11F6B8F495F020800011F817
-:1001D0002A5AF84D029311F82A9FF84C027C7712A4
-:1001E0002A39491201F82A9F8911F495F4957181F1
-:1001F00000116CE1FFAB02936BF82A9F0001E90547
-:1002000001E2000381F82AA0F073029572112A9F7F
-:10021000F49510E12A396BF82A9F000111F82A9F02
-:1002200009F82AA0F84C029376F82A5A000076F8CA
-:100230002A9F000076F82AA000008811F495481142
-:100240008A11FC004A11EEFE10F82A5AF84402B254
-:1002500076F82A5A0001F07402588811F495771044
-:100260008000F4A9F83002B24811F03000FF80009D
-:1002700010F82A5BF98018D6EE028A11FC00F4957A
-:100280004A084A094A0A4A0B4A0C4A0D4A104A11BE
-:100290004A124A134A144A154A164A174A174A1963
-:1002A0004A0E4A064A074A1A4A1D4A1B4A1C68F85F
-:1002B00000077D3F69F80007400068F8001DFFFC5B
-:1002C000481868F80018FFFEF495F4954A08EEFD0A
-:1002D000F07402588811F49577108000F4A9F83072
-:1002E00002EF4811F03000FF800010F82A5BF9801F
-:1002F00018D6EE038A18F4958A1C8A1B8A1D8A1A5E
-:100300008A078A068A0E8A198A178A178A168A1510
-:100310008A148A138A128A118A108A0D8A0C8A0B0F
-:100320008A0A8A098A08F4EB4A1177112A397681F8
-:10033000005577122A1810E2000180E1000110E256
-:10034000000280E1000276E10003000076E1000493
-:1003500000AAF07402988A11FC004A118811F495E1
-:10036000F49510816FF82A9E0C88E8FF18E10001CF
-:100370001AF82A9EF0301FFF80F82A9E8A11FC008E
-:100380004A1177112A397681005577122A1811E21D
-:10039000000181E1000111E2000281E1000276E149
-:1003A0000003000248086FE100040C98F03000FFE1
-:1003B00080E1000576E1000600AAF07402988A1137
-:1003C000FC004A1177112A397681005577122A18D4
-:1003D00010E2000180E1000110E2000280E1000271
-:1003E00076E1000300044811F00000048812F4953F
-:1003F00077132A76E900E598F3000001F6B8480B78
-:1004000008F82A3CF8430371768200AAF074029837
-:100410008A11FC004A11EEF08811F495F49571816F
-:10042000001471E1000100154911F3000002891167
-:10043000E7826DEA0004E7836DEB000A771A000596
-:10044000F07203AA1181F2E88082E9FF19E100014C
-:10045000F1A0819211E1000CF2E88083E9FF19E13B
-:10046000000DF1A081936DE9000248184918700051
-:100470000015F0000004F300000A80018102F2740C
-:100480000E54F4954814EE108A11FC004A11F074D1
-:100490000C5E80F82A5C77122A3976820055771133
-:1004A0002A1810E1000180E2000110E1000280E260
-:1004B000000276E20003001CF6B856F82A16F0F0A7
-:1004C000F0F880E2000756F82A16F1F0E8FFF28013
-:1004D00080E2000656F82A16F1F8E8FFF28080E282
-:1004E000000557F82A16E8FFF28080E2000456F86B
-:1004F000276CF0F0F0F880E2000B56F8276CF1F072
-:10050000E8FFF28080E2000A56F8276CF1F8E8FF75
-:10051000F28080E20009E8FF57F8276CF28080E261
-:10052000000856F8276AF0F0F0F880E2000F56F85D
-:10053000276AF1F0E8FFF28080E2000E56F8276AA1
-:10054000F1F8E8FFF28080E2000D57F8276AE8FF33
-:10055000F28080E2000C76E20013000076E20012E6
-:1005600000006FF82A5C0C5880E20011E8FF18F8D0
-:100570002A5C80E2001076E20017000076E20016A6
-:1005800000006FF82A9E0C5880E20015E8FF18F86A
-:100590002A9E80E2001476E2001B000076E2001A38
-:1005A000000076E20019000070E20018276E76E283
-:1005B000001F000076E2001E000076E2001D000031
-:1005C00076E2001C000076E2002000AAF074029897
-:1005D0008A11FC004A11EEFE10F82A38F84504EDA5
-:1005E00077122A1810E200028811F495771000089B
-:1005F0006DE9FFDFF6A9F8200475F073047DF010B3
-:100600000021F0001A8348087EF80008F4E2F07434
-:10061000030AF07304EA4812F2740323F0000004A2
-:10062000F2740336F495E800F07304EA77112A189F
-:10063000E8FF6FE100040D4818E10005F274096954
-:10064000F495F2A0F0740336F07304EA77112A18D7
-:10065000E8FF6FE100040D4818E10005F27409415C
-:10066000F495F2A0F0740336F07304EAF0740357C3
-:10067000F07304EA10F82A1CF07412A4F274033622
-:10068000F495E800F07304EA4812F2740380F00075
-:100690000004F2740336F495E800F07304EA10F8ED
-:1006A0002A1CF07412C5F2740336F495E800F07356
-:1006B00004EA77112A18E8FF6FE100060D4818E1F7
-:1006C000000771E100050012F2A070000012800125
-:1006D00010E10004F0740E7AF2740336F495E80029
-:1006E000F07304EAF07403BC76F82A380000EE02D6
-:1006F0008A11FC004A1177112A3976810055771248
-:100700002A1810E2000180E1000110E2000280E1FD
-:10071000000276E1000300094811F000000488128D
-:10072000F49577132A86E900E598F3000001F6B8FE
-:10073000480B08F82A3CF843050A768200AAF074B0
-:1007400002988A11FC004A1177112A3976810055E6
-:1007500077132A1810E3000180E1000110E3000282
-:1007600080E1000213E3000381E1000348117711E7
-:100770000000F84D0544F000000488124813F00012
-:1007800000048813F495F495E5986D91F6B8481136
-:1007900008F82A3CF843053AF0202A394911F500B7
-:1007A0008911F495F49576E1000400AAF07402989A
-:1007B0008A11FC004A1177112A3976810055771287
-:1007C0002A1810E2000180E1000110E2000280E13D
-:1007D000000276E10003000C4811F00000048812CA
-:1007E000F49577132A7AE900E598F3000001F6B84A
-:1007F000480B08F82A3CF843056A768200AAF07490
-:1008000002988A11FC004A1177112A397681005525
-:1008100077122A1810E2000180E1000110E20002C4
-:1008200080E1000276E1000300194811F0000004A5
-:100830008812F49577132A5DE900E598F30000012A
-:10084000F6B8480B08F82A3CF8430593768200AACC
-:10085000F07402988A11FC004A11881110F82A38A5
-:10086000F84405E310F82AA1F84405BA6CE1FF56F4
-:1008700005E372122AA1F49570E22A1800116BF8B0
-:100880002AA10001F07305E372122AA1F49570E227
-:100890002A18001110F82AA1F00000018812F4951E
-:1008A000F4956EE2FFFC05D173122AA14811F00005
-:1008B000000580F82AA210F82AA108F82AA2F84414
-:1008C00005E36CE1FFAB05DD76F82A38000176F828
-:1008D0002AA1000076F82AA200008A11FC00F495F3
-:1008E0004A084A094A0A4A0B4A0C4A0D4A104A1158
-:1008F0004A124A134A144A154A164A174A174A19FD
-:100900004A0E4A064A074A1A4A1D4A1B4A1C68F8F8
-:1009100000077D3F69F80007400068F8001DFFFCF4
-:10092000481868F80018FFFEF495F4954A08EEFFA1
-:1009300010F82A5BF9801804F07405A2EE018A18F9
-:10094000F4958A1C8A1B8A1D8A1A8A078A068A0ECF
-:100950008A198A178A178A168A158A148A138A129C
-:100960008A118A108A0D8A0C8A0B8A0A8A098A08D7
-:10097000F4EBEEFD76F82A38000076F82A5A0000EB
-:10098000E8014E00FB8017D6F495E80180F82A5B59
-:1009900076002A8FF98016AA10F82A5BF980175C76
-:1009A00010F82A5BF980176FFB801666F495E81A39
-:1009B000FB801687F495E81AFB801666F495E81B11
-:1009C000FB801687F495E81BEE03FC004A11F495B2
-:1009D00013028811E800F84D066AF3100001891A25
-:1009E000F495F07206691C918A11FC004A11881175
-:1009F00012031102F8450679F0100001881AF495E7
-:100A0000F072067881918A11FC004A11F495710206
-:100A10000011110361F800110001F8300691F6B8D9
-:100A20006FF800110C1F8811F3E8E8FF1881F1A09E
-:100A30008181F073069DF6B86FF800110C1F8811C4
-:100A4000F33000FFF020FF001881F1A081818A11AE
-:100A5000FC004A11F495110261F8000B0001F82026
-:100A600006B1490BF61F8811F495F4951081F273C5
-:100A700006B8F03000FF490BF61F8811F495F49585
-:100A80001281F4788A11FC004A11F4957102001267
-:100A900013038811E800F84D06CCF3100001891A01
-:100AA000F495F07206CB1192F2C081918A11FC008C
-:100AB0008812120271010013F84506DBF0100001E4
-:100AC000881AF495F07206DAE598FC004A11EEFEF9
-:100AD0008811110410067105001261F8001200015E
-:100AE000F82006EAF0000001F6B8F00000016FF807
-:100AF00000120F1F48088100F47F8001F27406BACB
-:100B0000F4954811EE028A11FC004A11EEFE88129B
-:100B1000110410067105001361F800130001F8209C
-:100B20000709F0000001F00000018811F6B86FF825
-:100B300000130F1F81004811F47F8001F27406CE6C
-:100B4000F49548124811F030FFFEEE028A11FC00C5
-:100B50004A114A164A17EEFCF495800271080016F5
-:100B60001009710B00178003710A00114817F8452E
-:100B7000073F700000111003F074069F80017000A1
-:100B800000161002F074067B6D916D966CEFFFFFFE
-:100B9000072FEE048A178A168A11FC004A11EEFE0E
-:100BA00010F82AE808F82AE9F845076476000001F9
-:100BB00062F82AE9005EF274120BF0003040721104
-:100BC0002AE97710000FF5A9F82007616BF82AE9E8
-:100BD0000001F073076476F82AE90000EE028A113A
-:100BE000FC004A118811E80075F800080008E800C8
-:100BF00075F800080009F6B8F495F020FC3F75F888
-:100C00000008000DF0200C3075F80008000C76F894
-:100C10002AE8000076F82AE900006C81079276F84D
-:100C20002AEA0000FB801676F495E810E80075F8D3
-:100C300000080000F07307A876F82AEA0001FB809C
-:100C40001666F495E810FB801687F495E810E80026
-:100C500075F800080000F6B8F495F020FFFF75F86D
-:100C6000000800008A11FC00F4954A084A094A0A63
-:100C70004A064A074A1D68F800077D3F69F80007E1
-:100C8000400068F8001DFFFC10F82AEAF84507E16B
-:100C900010F82AE8F0000001F030000F80F82AE890
-:100CA00010F82AE8F84407D6F6B8F495F020FC3F8F
-:100CB00075F80008000DF0200C3075F80008000CE5
-:100CC000E80075F800080000F6B8F495F020FFFF82
-:100CD00075F8000800008A1D8A078A068A0A8A09B0
-:100CE0008A08F4EBEEFFF2740767F495E801EE0171
-:100CF000FC004A074A1D68F800077D3F69F80007B5
-:100D0000400068F8001DFFFC8A1D8A07F4EB4A11B9
-:100D10007711002876812400E80075F800080001AA
-:100D2000F2740767F495E8007711001D6881007F71
-:100D3000F6B8F495F020FF807711001DF030010027
-:100D40001A818081F0740A33F07411ACF980132594
-:100D5000F9801653F9801782F074062FF98014B2C7
-:100D6000F9801910F0740DE3F07407E8F07402369E
-:100D70008A11FC004A1160F8277BFFFFF830083920
-:100D800071F8277B277960F82779FFFFF83008B2E0
-:100D900010F8298608F82779F0307FFF8811F4953C
-:100DA00077104000F6A9F830085810F8277908F8AD
-:100DB000277AF0307FFF8811F49577104000F6A96C
-:100DC000F820086376F82779FFFF76F8277BFFFF86
-:100DD000F7B8F27308D9F020FFFFF6B856F8277479
-:100DE000F0F9881156F82772F0F98812F495F49505
-:100DF000E720F4A9F830088FF120277C4811F6008D
-:100E00008813F495F495108308F82779F0307FFF64
-:100E10008813F49577104000F5ABF830088F6D918A
-:100E20004811F03001FF8811F495E720F7A9F83058
-:100E300008746D894811F03001FFF0E7F495480817
-:100E40004EF827744808F1F98911F495F49571E189
-:100E5000277C277A60F8277BFFFFF83008AB48082B
-:100E60004EF8277276F8277BFFFF76F82779FFFF89
-:100E7000F27308D9F495E80044F8277340F8277511
-:100E800082F80011F49577108000F6A9F82008D8B0
-:100E9000F6B810F82773F000800048084EF8277461
-:100EA0004808F0F98811F495F49571E1277C277AC8
-:100EB000F7B857F82774F062FFFFF040FF80F28028
-:100EC0004EF82774E8008A11FC004A114A16EEFB1E
-:100ED00011F8277109F8277389118810F495F49592
-:100EE000F6A9F82008EDF273090EF495E800F62053
-:100EF00076000041F07412EE8816F495F7B86D96FE
-:100F000010F80016F847090AE7617600000076013C
-:100F10000080760200FF76030000F2740CB9F495AD
-:100F2000E8006CE9FFFF08FB7316000EF066004155
-:100F3000EE058A168A11FC004A11F495710200131D
-:100F4000F6B877117FFF57F827724811F280F0004A
-:100F500080008811F640F0E0F1F1E801F28080F8BD
-:100F600027787712800057F827724812F28088128B
-:100F7000F495F4956C820938E80075F800080001D2
-:100F8000F073093DF020800175F8000800017081C0
-:100F900000138A11FC004A11F0307FFF11F82986F6
-:100FA000F520F3307FFF8911F49577104000F6A902
-:100FB000F8200954F2730967F495E8026FF8277A6C
-:100FC0000D20F3307FFF8911F49577104000F6A9CA
-:100FD000F8200964F2730967F495E80180F8277B2B
-:100FE000E8008A11FC004A1111F82986F520F33037
-:100FF0007FFF8911F49577104000F6A9F820097A4F
-:10100000F273098DF495E8026FF8277A0D20F3301A
-:101010007FFF8911F49577104000F6A9F820098A1E
-:10102000F273098DF495E80180F82779E8008A11B8
-:10103000FC004A11F495710200128811F6B857F8B5
-:101040002772F0207FFFF280F0008000808157F847
-:101050002772E801F3F1F28080F827787711800099
-:10106000481157F82772F2808811F495F4956C8135
-:1010700009B5E80075F800080001F07309BAF0201E
-:10108000800175F80008000145F8277143F82773BF
-:1010900083F80011F495E720F6A9F83009C9F27336
-:1010A00009E47712000057F82772F0207FFFF280E2
-:1010B0004912F500F300800061F8000B8000F83061
-:1010C00009DCF1208000F5208912F49548126FF8B0
-:1010D00027730D00F495490B4FF827728A11FE0013
-:1010E0004812F4954A114A164A17EEFCF495710815
-:1010F00000168817F0740830481870000016F27453
-:10110000098FF00000028811F495F4956C810A0AA9
-:10111000F27408DBF4954816481870000016F27453
-:10112000098FF00000028811100270010011800088
-:10113000F27406CEF495481749114817F60088173F
-:10114000E760F5A9F8200A2D4816F62088114818FE
-:1011500070000011F274098FF00000028811700114
-:10116000001110028000F27406CEF4954817EE04C8
-:1011700048168A178A168A11FC00EEFDE8004EF820
-:101180002770E8004EF82772E8004EF82774E80050
-:101190004EF8277676F82779FFFF76F8277A000051
-:1011A00076F8277BFFFF76F827780000E80075F8CF
-:1011B000000800017600000076010200F27412DCE3
-:1011C000F020277CEE03FC004A11EEFCF4954E0063
-:1011D00077127FFFF6B84912F180F3008000891280
-:1011E000F0E0F1F14F02E901F495480BF5405602A9
-:1011F000F18081F827787711800056004911F1803D
-:101200008911F495F4956C810A81E80075F800085D
-:101210000001F0730A86F020800175F800080001D3
-:101220001082EE048A11FC004A11EEFEF4954E0085
-:1012300077117FFFF6B84911F180F3008000891122
-:10124000F0E0F1F1E801F28080F827785600F12013
-:101250008000F180F495490BF84D0AABF020800135
-:1012600075F800080001F0730AAFE80075F800088F
-:101270000001EE0248118A11FC004A118812130283
-:1012800077110000F84D0ACBF3100001891AF4958C
-:10129000F0720ACA48111CF8297E881111F8297EBB
-:1012A000F200000180F8297E819248118A11FC0029
-:1012B0004A11F495710200118812F6B8F0207FFFF0
-:1012C00057F82770F280F0008000808257F827706E
-:1012D000E801F3F1F28080F8277877128000481255
-:1012E00057F82770F2808812F495F4956C820AF40E
-:1012F000E80075F800080001F0730AF9F020800199
-:1013000075F80008000145F82775E71043F82771C4
-:1013100083F800126DE800046D8AF6AAF8300B0A13
-:10132000F2730B257711000057F82770F0207FFF2C
-:10133000F2804911F500F300800061F8000B800095
-:10134000F8300B1DF1208000F5208911F49548112B
-:101350006FF827710D00F495490B4FF8277048116D
-:101360008A11FC004A114A164A17EEF08817101726
-:1013700080051016800610158007711400111005E5
-:10138000F030000188101006F0300001800849118B
-:101390001005F6018009100661F800080001F82028
-:1013A0000B4B1009F0000001800971080012F4AA2B
-:1013B000F8300B541009F00000018009120949119E
-:1013C000F47F8009F620800A56F827704E0C100929
-:1013D00080004818F2740ACEF00000048816F495D4
-:1013E000F4956C860B6DF2730C59F495E800F6B821
-:1013F000F495560CF0F98812F495F49570E2277C78
-:101400002986E800800E4811F8450BCC77100001C2
-:10141000F4A9F8300B896CE1FFFD0B8B10E700029B
-:10142000800EF0730B8B1087800EE710F5AEF8205E
-:101430000BB270000017700100161004F07406CE95
-:1014400048174916F60088174811F6208811100928
-:10145000F62080004818F2740ACEF00000048816C6
-:1014600010047000001770010011F07406CE4811CE
-:1014700000048004F0730BBC7000001770010011B1
-:101480001004F07406CE4811000480044911481677
-:10149000F6208816F495F4956C860BCC100A800023
-:1014A0004818F2740ACEF00000048816120AF845B3
-:1014B0000C33710A0010F4AEF8300C1C4816F0E141
-:1014C00088111208F8450BDB6D891207F8450BE906
-:1014D0001007800070020011100680011004F074E3
-:1014E00006DCF0730BEF48116F000C9F1004F074D2
-:1014F0000AB3110EF1C0810E10064911F6008006E4
-:101500001005F6208811F000000148086F000C9FBC
-:101510004818F2740ACEF00000041207F8450C11C6
-:101520001007800070020011100680011004F07492
-:1015300006DCF0730C1748116F000C9F1004F07458
-:101540000AB3110EF1C0810EF0730C331207F84587
-:101550000C2A10078000100680011005800210047C
-:10156000F07406DCF0730C3012056F000C9F100451
-:10157000F0740AB3110EF1C0810E76000001481814
-:10158000F2740ACEF0000004710400117081298603
-:10159000100E1CF82986800E760000014818F2749F
-:1015A0000ACEF0000004100E71040011808110F8C2
-:1015B0002986F0000001F0307FFF80F829861009AD
-:1015C000F00000028009EE108A178A168A11FC00CA
-:1015D00010F8277508F82771F01000014808FC0082
-:1015E0004A114A16EEFFF49571040016F00000014E
-:1015F00048084EF8297C6DEEFFFD4816F8450C9919
-:1016000056F8297CF0740A5A881110F8297DF000E8
-:10161000000148084EF8297C10F82982F0000001EA
-:101620008810F495F495F4A9FA300C9680F8298284
-:1016300056F82980F00000014EF8298073112982A4
-:101640006CEEFFFF0C76EE018A168A11FC004A113F
-:1016500076F82984000076F829850001E8004EF824
-:101660002A0C76F82986000076F829870000771181
-:1016700029887681AAAA76E10001AAAA76E1000269
-:1016800000008A11FC004A11EEFCF495710600146A
-:10169000710700137108001271090015771000FF1F
-:1016A000F4AAF8300D44491353F82A0C4FF82A0CC9
-:1016B0007312000EF166000D8911F4957710000188
-:1016C00071E124000011F4A9F8300D177710000221
-:1016D000F4A9F8300CEC7711298A76810000E80033
-:1016E0007714000077130000F0730D486C830CFA38
-:1016F0007711298A4812F0E8F04080008081E800E4
-:1017000077140000F0730D484913F340800081F80E
-:10171000298A61F800150001F8200D0769F8298A67
-:10172000400061F800140001F8200D0F69F8298AC3
-:1017300020007711298A4912F3E81B818181F07317
-:101740000D4811F82984F84C0D37771129887681D6
-:10175000AAAA11F82985F3100001F340AA0081E13B
-:101760000001760000028001700200147003001373
-:10177000F2740B28F495481171F829852984F073C7
-:101780000D737600000080017602000070030013E4
-:10179000F2740B28F495E800F0730D737711298A21
-:1017A0007081001311F82984F84C0D68771129888D
-:1017B0007681AAAA11F82985F3100001F340AA0046
-:1017C00081E10001760000038001700200147003C3
-:1017D0000013F2740B28F495481171F829852984B7
-:1017E000F0730D7376000001800170020014700325
-:1017F0000013F2740B28F49548116BF82984FFFF4D
-:10180000EE048A11FC004A11F540F495480BF47877
-:101810008811F495F4956CE1FFB90D88F2730DA56C
-:10182000F495E860F200000661F800110020F8303D
-:101830000D9861F8000B0001F8200DA3F2000007DD
-:10184000F0730DA361F8000B0001F8200DA1F273F5
-:101850000DA3F0000001F00000024808F47F8A1197
-:10186000FC00EEFFF07407FDF0740744F0740DB453
-:10187000F0740205F0740460F0730DAAEEFD10F828
-:101880002AA3F8440DCB10F82AA4F8450DD776000A
-:101890000200F27409E8F020220076F82AA4000081
-:1018A00076F82AA70000F0730DD776000200F274D4
-:1018B00009E8F020200076F82AA3000076F82AA78D
-:1018C0000001F0740C5EF0E0F0103A98F8470DE17A
-:1018D00076F8276E0000EE03FC004A11EEFE771149
-:1018E00020007600AAAA76010200F274066CF49534
-:1018F000481176005555760102004811F274066CC5
-:10190000F000020076F82AA3000076F82AA400006E
-:10191000E8004E00FB80153EF495E80480F82AA507
-:1019200076002AA8F980148776002AADFB8013621E
-:10193000F495E80210F82AA5F9801463FB80166676
-:10194000F495E81CFB801687F495E81CE8014E002E
-:10195000FB8017D6F495E80080F82AA676002AB70F
-:10196000F98016AA10F82AA6F980175C10F82AA6A2
-:10197000F980176FEE028A11FC00F4954A084A09B3
-:101980004A0A4A074A1D68F800077D3F69F80007C0
-:10199000400068F8001DFFFC10F82AA7F8440E4B21
-:1019A00076F82AA30001F0730E4E76F82AA40001FF
-:1019B0008A1D8A078A0A8A098A08F4EB4A114A169C
-:1019C0004A17EEFE880E71080016710600171107FF
-:1019D000F066000DF00025A0881176010006810058
-:1019E000F27406CEF00000017601000670000016C9
-:1019F0004811F27406CEF000000770810017EE0265
-:101A00008A178A168A11FC004A11880E7102001288
-:101A10001103F066000DF00024008811F495708128
-:101A200000126EE2FFFE0E8DF495E800E80180E101
-:101A3000000276E1000300FF76E10004000076E199
-:101A4000000B000076E1000C000081E100018A112A
-:101A5000FC004A11EEFC880EF495F166000DF300CF
-:101A600024008911F495F49576E1000C000076E1EC
-:101A7000000B000076E10002000176000000760114
-:101A80000000800276030000F2740CB9F495E800BF
-:101A9000EE048A11FC004A118819F4957319000E9E
-:101AA000F166000DF2002400771525A077140000E0
-:101AB000771A001FF0720F14F6B849190985F84C0F
-:101AC0000F13F100000589114915F3000001891376
-:101AD0004915F3000007891211931D91199289107D
-:101AE000F495F4956C800F1311931D911992891040
-:101AF000F495F4956C800F1311931D911992891030
-:101B0000F495F4956C800F1311931D91199289101F
-:101B1000F495F4956C800F1311931D91199289100F
-:101B2000F495F4956C800F1311931D9119928911FE
-:101B3000F495F4956C810F136D946DED000D4814C0
-:101B40008A11FC004A114A164A17EEF88817100D40
-:101B50008004100C8005710E00167317000EF066DD
-:101B6000000DF0002400881110F82763F8450F32AB
-:101B7000F2740E9FF495481710F82760F8440F3D53
-:101B800060E100020001F8200F6DF07311331004C2
-:101B900080001005F074069F1104F3000001810419
-:101BA0006D8E7710000171E100020012F4AAF83086
-:101BB0000F6277100002F4AAF8300F6D45E1000BB8
-:101BC000881043E1000C83F80012F495F495F4AA10
-:101BD000F8300F6DF0730F96F50081044916F5206B
-:101BE000891676E1000C000076E10004000048163A
-:101BF000F8451133F7B871E10002001210F8001235
-:101C0000F0100003F8460F8C10F80012F0100003DB
-:101C1000F845101677100001F4AAF8300F9C7710E1
-:101C20000002F4AAF8300FA8F0730F9677100004A2
-:101C3000F4AAF83010B777100005F4AAF83010BCF9
-:101C4000F2740E9FF4954817F073113176E1000C91
-:101C5000000076E1000B000076E10004000076E170
-:101C60000002000211E1000CE803F6208912F4954D
-:101C700077100003F5AAF8300FB66BF8276F000154
-:101C80008810F495F495F5AEF8200FBD481680063F
-:101C90008813F49577100003F6ABF8200FC86BF8A3
-:101CA000276F00011206F845100010E100048000C3
-:101CB0001005800110048002100680034811F274A0
-:101CC000071EF0000005100600E1000480E100049A
-:101CD000100600E1000C80E1000C881211061004CF
-:101CE000F60080044816F62088168913F4957710BC
-:101CF0000003F6ABF8200FF56BF8276F00017710A3
-:101D0000000C71E100040013F6ABF82010006BF832
-:101D1000276F00016CE2FFFD1131F6B86FE100059D
-:101D20000C486FE100060C18F0300FFFF0000003C4
-:101D300080E1000B76E1000200034816F8451133FC
-:101D400071E1000C001210E1000B4912F62088131B
-:101D5000E80CF6208810F495F495F5ABF8201027E0
-:101D6000481380068810F495F495F5AEF8201030ED
-:101D7000700600161206F845105F10E1000480009E
-:101D80001005800110048002100680034811F274CF
-:101D9000071EF0000005100600E1000480E10004C9
-:101DA000100600E1000C80E1000C881211061004FE
-:101DB000F60080044816F6208816F4957710000C7B
-:101DC00071E100040013F6ABF820105F6BF8276F89
-:101DD00000017710000CF6AAF820106BF2740E9F29
-:101DE000F495481771E1000C00127710000CF4AA6A
-:101DF000F830107C7710000C71E1000B0013F6AB8B
-:101E0000F83010B4E730F7AAF83010B4F2740EC10D
-:101E1000F49548178812F495F4956C82108D76E14C
-:101E20000004000076E100020005F07310B476E1D2
-:101E3000000200047710000C71E1000B0012F5AAFB
-:101E4000F820109AF073109C7712000C76000000B6
-:101E50007001001270020017760300014811F2743D
-:101E60000CB9F000000576E1000400007710000CCA
-:101E700071E1000B0012F6AAF820111C4816F84573
-:101E8000113360E100020005F82010DF10E1000BC3
-:101E900008E1000C11E10004F84D10C76BF8276F42
-:101EA00000018810F495F495F5AEF82010CF48168F
-:101EB000F4954808F84511166FE1000C0D0081E11A
-:101EC000000C1104F50081044916F5208916F07301
-:101ED000110E10E1000B71E1000C00128810F49556
-:101EE000F495F6AAF83011164912F6208810F495E8
-:101EF000F495F5AEF82010F3481680064808F8452A
-:101F000011161004700200178000760300001006FE
-:101F100080011005F0740CB9100600E1000C80E19E
-:101F2000000C11061004F60080044816F6208816EE
-:101F300010E1000C08E1000BF845111CF0731131A1
-:101F4000F2740E9FF4954817F073113376E1000C8C
-:101F5000000076E1000B000076E1000200011004B1
-:101F600080001005F074069F8812F495771000FF2A
-:101F7000F4AAF83011336C860F70EE088A178A16AF
-:101F80008A11FC004A11EEFCF495710600128811CA
-:101F90007312000EF166000DF30024008914138102
-:101FA000F77AF330000181F8276013E10001F77C34
-:101FB000F330000381F82761E90F19E1000181F88E
-:101FC000276271E400030013F6B84913F30000011F
-:101FD000F330000F490B09F82762F84D117577109F
-:101FE00000FFF4ABF830117557F8276CF3000001CF
-:101FF0004FF8276C76F827630001F073117876F8B4
-:102000002763000070E40003276276F8276400006D
-:1020100011F8276161F8000B0002F820118DE90129
-:102020006FE100020F1881F8276411F8276161F849
-:10203000000B0001F82011A910F82764F10000043A
-:102040008913E9B8F52081F8276560840002F8203B
-:1020500011A9700000117001001370022765F2745D
-:102060000F18F4954812EE048A11FC004A114A1622
-:102070004A17EEFCE8004EF82766E8004EF827689D
-:10208000E8004EF8276CE8004EF8276A77122740E0
-:1020900077112400771A001FF07211DB7092001183
-:1020A00076E10001FFFF7681000076E1000200008A
-:1020B00076E1000300FF76E1000C000076E1000B02
-:1020C000000076E1000400006DE9000DF02025A07D
-:1020D000F10000078911F100000181028816F495D2
-:1020E00077170020768600FF760000007601000654
-:1020F0001002F074066C7600000076010006F2749F
-:10210000066CF49548111002F000000D80026DE994
-:10211000000D6DEE000D6CEFFFFF11E8F0740C9DEB
-:10212000EE048A178A168A11FC004A114A164A17C9
-:10213000EEFA8811100A4911F84D129F4808F84527
-:10214000129F80041281F5788912F495F4956CE25F
-:10215000FFB9128A61F800080080F830128A13E192
-:102160000001F0E8F778F1A0F2301FFF8817F4952E
-:10217000771224007716000077130020F6B848176E
-:1021800008E20001F84512426DEA000D6D966CEB15
-:10219000FFFF1234F073129056F8276AF000000126
-:1021A0004EF8276A60820001F83012547000001661
-:1021B000F2741138F4954811F07312907000001603
-:1021C000F2741138F495481172102A9EF495F4AF08
-:1021D000F830126E76000000760100BC7002001626
-:1021E00076030000F2740CB9F4954811F073129064
-:1021F00010F8276EF844129076000000760100BCBB
-:102200007002001676030000F2740CB9F4954811C0
-:10221000F0740C5EF0E0F0101388F842129076F83B
-:10222000276E0001F073129056F82766F000000147
-:102230004EF827666DE9005E56F82768F000000149
-:102240004EF82768710400126EEAFFFF121870043E
-:102250000012EE068A178A168A11FC004A11EEFE59
-:10226000880EF495F066000DF00025A08811F49515
-:10227000F495768100FF7600000076010006F27486
-:10228000066CF0000001760000007601000648119F
-:10229000F274066CF0000007EE028A11FC004A118D
-:1022A000880EF495F066000DF00024008811F49576
-:1022B000F49576E10001FFFF7681000076E10002EF
-:1022C000000076E1000300FF8A11FC004A11F4953A
-:1022D00013038811FA4D12EC71020012F310000181
-:1022E000891AF495F07212EB709100128A11FC00B9
-:1022F000F4954A0B4A0C4A0DF7B8EEFE10F80008A8
-:102300001106F1C08300F4851106F7858106F6B841
-:10231000EC0F1E0661008000F8201305F484EE0225
-:102320008A0D8A0C8A0BFC00F4954A0B4A0C4A0D64
-:10233000EEFEF7B8800010F80008F4851106F78566
-:102340008106F6B8EC0F1E06F0F061008000F82060
-:102350001320F484EE028A0D8A0C8A0BFC004A11C9
-:102360007711007B76812EEC7711007BEEFF718177
-:102370000011EE0176E10001000076E100040000AA
-:1023800076E10006000076E10062000076E100766A
-:10239000000076E10092000076E10094000076E112
-:1023A00000B0000076E100B3000076E100BE00005E
-:1023B00076E100BF000076E100C1000076E100C3D5
-:1023C000000076E100C5000076E100C700007681DC
-:1023D00000008A11F495F4E44A114A164A17EEFFF8
-:1023E000F49571060016FB8016A28817F495F7B8CD
-:1023F00010F80017F0100002FA4613887711000059
-:1024000010F80017F0100002F84513F910F8001743
-:10241000F845143910F80017F0100001F845141FA2
-:10242000F073145210F80017F0100003F84513D39E
-:1024300010F80017F0100006F84414527712007BD1
-:102440007182001461E400070040F830145249140E
-:102450004817F6008812F495771300557711005746
-:102460006DEA003BE50110E600068081481400F8A3
-:1024700000178812F4957711005510E20040808112
-:102480007711005710E6000780817711005510E2A0
-:102490000045808110E60008771100578081771190
-:1024A000005510E2004A80817711005710E60009BC
-:1024B0008081F2731452771103C07712007B10826F
-:1024C000F00000078813F495F495961BF830145229
-:1024D00010E300357712005580827712005710E61E
-:1024E000000480827712005510E300378082771253
-:1024F000005710E6000580824811F0400010F2738A
-:102500001450F04000207712007B1082F00000078A
-:102510008812F495F495960DF830145210E20034B8
-:102520007713005580837713005710E600028083ED
-:1025300010E200367712005580827712005710E6BD
-:10254000000380824811F0400004F2731450F04000
-:1025500000087712007B1082F00000078812F495C3
-:10256000F495960EF830145210E2003377120055AD
-:1025700080827712005710E6000180824811F273C2
-:102580001450F04000027712007B1082F000000728
-:102590008812F495F495960FF830145210E2003238
-:1025A000771200557713005780824811E762F04098
-:1025B0000001E5018811F4957712007B48117182C2
-:1025C00000121AE2000780E20007F980169AEE0175
-:1025D0008A1748118A168A11F4E44A118811770E75
-:1025E000000577120055E804F6B828E10002EEFF76
-:1025F000808277120057F0208000EE011A82771255
-:1026000000578082E80132E10002F5827711005420
-:10261000F693188177110054F2A080818A11F49505
-:10262000F4E44A114A16F49571040011FB8016A2D5
-:102630008816F4957712005510E600038082771211
-:10264000005610E100027713005680827712005680
-:1026500010E10003808210E10004771200568082AE
-:102660007712005610E100018082E712E501F9803F
-:10267000169A8A168A11F4E44A114A164A17EEF994
-:102680007711007B76000016760100177602001A9B
-:102690007603001B7604001C7605001D718100176F
-:1026A00071E7000600111081F84414DFF980165319
-:1026B000F6B8FB801585F020FFFFF6B8FB80160802
-:1026C000F020FFFF7711007B7181001776E700068D
-:1026D00000014817771600007710000477150003F3
-:1026E0007714000277130001F000003976E7000844
-:1026F000001F76E700070000880E771A00054817CC
-:10270000F0000009881248188819E800F072152CAA
-:10271000731900117682000011917311001970E293
-:102720000003001670E20004001370E200050014BC
-:1027300081E2000170E20006001570E2000700105F
-:1027400080E20002730E0011F100001E6DEE000524
-:102750006DEB00056DEC00056DED00056DE8000505
-:10276000F000000181916DEA00087311000EEE0780
-:1027700076E70041002476E70046002576E7004B27
-:10278000002676E7005000278A178A168A11F4E49B
-:102790004A114A16EEFE881156064E00F98016A21E
-:1027A000F7B810F80011F010FFFFFA451560771622
-:1027B000FFFF7712007B49111082F603F000000939
-:1027C0008811F495F4951081F8441571F273157120
-:1027D000F495E7167711007B1081F000000988114D
-:1027E000F495771200061081F845155C6EEAFFFF3C
-:1027F00015696DE9000876860001E9015600F1804F
-:1028000010F8000BF845157EFB801585F4954816E9
-:10281000F980169AEE0248168A168A11F4E44A11D3
-:10282000EEFFFB8016A28811F4957710FFFFF4A944
-:10283000F83015C410E1000377120055808277123A
-:1028400000567682000077120056768200007712DA
-:1028500000567682000077120056768200007712CA
-:1028600000567682000010E10002F000000832F805
-:10287000000877120054E801F482F493188277126A
-:102880000054F0400000808210E10001F9801676CB
-:1028900010E10001F9801666F07316037711007BD2
-:1028A0007181001171E1000700127682000010E1D1
-:1028B0000009F98015857711007B7181001110E105
-:1028C0000009FB801585F00000087711007B7181FD
-:1028D000001110E10009FB801585F0000010771150
-:1028E000007B7181001110E10009FB801585F0006B
-:1028F00000187711007B7181001110E10009FB8045
-:102900001585F00000207711007B7181001110E126
-:102910000009FB801585F0000028F980169AEE0169
-:102920008A11F4E44A11EEFFFB8016A28811F49597
-:102930007710FFFFF4A9F830164177110055768122
-:10294000001E7711005676810000771100567681BF
-:1029500000007711005676810000771100567681CD
-:1029600000007711005676810000771100567681BD
-:1029700000007711005676810000771100567681AD
-:102980000000771100567681000077110056F2732F
-:10299000164E768100007711007B7181001171E184
-:1029A000000700127682000010E10039F980160855
-:1029B000F980169AEE018A11F4E44A117711007B2E
-:1029C0001081F00000048811F495F4951081FA4408
-:1029D0001663F495EEFF76810001EE018A11F4E4AE
-:1029E000F01000104A1132F80008EEFF77110001D4
-:1029F000E801EE01F4821A8180818A11F495F4E4F1
-:102A0000F01000104A1132F80008EEFFE8017711CB
-:102A10000000F482EE01F493188180818A11F4950C
-:102A2000F4E44A11F01000107711000032F80008A9
-:102A3000EEFF1181E801EE0177110000F482F2A0AF
-:102A400080818A11F495F4E4F273169EF6BBF49536
-:102A5000F495F495F495F4E4F27316A6F7BBF495A7
-:102A6000F495F495F495F4E44A114A16F49571043A
-:102A70000016FB8016A28811F49571E10005001282
-:102A80007682000E10E6000E71E1000600128082D0
-:102A900071E1000500127682000D71E1000600125E
-:102AA00010E6000D808271E1000500127682000CB4
-:102AB00010E6000C71E100060012808271E1000551
-:102AC00000127682000B10E6000B71E10006001286
-:102AD000808271E1000500127682000A71E1000631
-:102AE000001210E6000A808271E100050012768271
-:102AF000000910E6000971E100060012808271E110
-:102B0000000500127682000871E10006001210E64E
-:102B10000008808271E1000500127682000710E64D
-:102B2000000771E100060012808271E100050012C9
-:102B30007682000671E10006001210E6000680822F
-:102B400071E1000500127682000571E100060012B5
-:102B500010E60005808271E1000500127682000413
-:102B600071E10006001210E60004808271E10005A8
-:102B700000127682000371E10006001210E60003E5
-:102B8000808271E1000500127682000210E60002E8
-:102B900071E100060012808271E100050012768268
-:102BA000000110E6000171E100060012808271E16F
-:102BB000000500127682000071E100060013E76252
-:102BC000E501F980169A8A168A11F4E44A118811EF
-:102BD000F495F49571E100050012EEFF7682000095
-:102BE000EE0171E100060011698100018A11F4957E
-:102BF000F4E44A118811F495F49571E1000500128E
-:102C0000EEFF76820001EE0171E10006001169819C
-:102C100000018A11F495F4E44A117711007B1081C8
-:102C2000F00000948811F495F4951081FA44179CF3
-:102C3000F495EEFFF98016537711007B1081F000B8
-:102C400000948811F495F49576810001EE0176E107
-:102C50000001000076E10002002176E1000300207F
-:102C600076E10004002376E10005002276E100060B
-:102C7000003876E10007003976E10008001576E1BA
-:102C80000009001476E1000A000076E1000B004123
-:102C900076E1000C004076E1000D004376E1000E85
-:102CA000004276E1000F004876E10010004976E12D
-:102CB0000011001B76E10012001A8A11F495F4E469
-:102CC0004A11EEFD881156064E00F98016A27712C1
-:102CD000007B770E0009108228F80011F0000095A3
-:102CE0008811F495F4951081F84517F0F27317FDEB
-:102CF0007711FFFF76810001E9015600F18010F89D
-:102D0000000BF84517FDFB801810F4954811F98069
-:102D1000169AEE0348118A11F495F4E44A118811C9
-:102D2000F495EEFF71E100010011EE0110818A11AE
-:102D3000F495F4E44A11EEFFFB8016A28811F49595
-:102D40007710FFFFF4A9F83018C371E100050012F5
-:102D50007682000071E1000600127682000071E1C7
-:102D6000000500127682000171E1000600127682F1
-:102D7000000071E1000500127682000271E1000698
-:102D800000127682000071E10005001276820003D5
-:102D900071E1000600127682000071E10005001268
-:102DA0007682000471E1000600127682000071E173
-:102DB000000500127682000571E10006001276829D
-:102DC000000071E1000500127682000671E1000644
-:102DD00000127682000171E1000500127682000780
-:102DE00071E1000600127682200071E100050012F8
-:102DF0007682000871E1000600127682000071E11F
-:102E0000000500127682000971E100060012768248
-:102E1000000071E1000500127682000A71E10006EF
-:102E200000127682000071E1000500127682000B2C
-:102E300071E1000600127682000071E100050012C7
-:102E40007682000C71E1000600127682000071E1CA
-:102E5000000500127682000D71E1000600127682F4
-:102E6000000071E1000500127682000E71E100069B
-:102E700000127682000010E10007F980167610E15A
-:102E80000008F980167610E10007F980166610E157
-:102E90000008F9801666F07318D17711007B108155
-:102EA000FB801810F00000957711007B1081FB80EB
-:102EB0001810F000009EF980169AEE018A11F4E4D1
-:102EC0004A118811EEFFF495100471E1000300111E
-:102ED000EE0180818A11F495F4E44A114A16F495C2
-:102EE00071040016FB8016A28811F49571E10002AE
-:102EF00000127682001010E6000171E1000300125A
-:102F0000808271E10004001210E600028082E76214
-:102F100071E100020013E501F980169A8A168A1100
-:102F2000F4E44A118811EEFFEE0110E100018A116C
-:102F3000F495F4E44A117711007B1081F00000B39E
-:102F40008811F495F4951081FA44192AF495EEFF4E
-:102F5000F98016537711007B1081F00000B38811BF
-:102F6000F495F49576810001EE0176E10001000010
-:102F700076E10002001376E10003002676E100040A
-:102F8000002576E10005002476E10006000076E1E8
-:102F90000007001776E10008003276E100090031F1
-:102FA00076E1000A00308A11F495F4E44A114A16D9
-:102FB0004A17EEFFF49571060017FB8016A28811E0
-:102FC000F495F7B810F80011F010FFFFFA451973E7
-:102FD0007716FFFF7712007B770E0005108228F826
-:102FE0000011F00000B48811F495F4951081F844B4
-:102FF0001984F2731984F495E7167711007B108118
-:10300000F00000B48811F495771200021081F845A1
-:10301000196F6EEAFFFF197C6DE9000561F8001772
-:103020000001FA20198F76860001FB801997F4952C
-:103030004816F980169AEE018A1748168A168A11E0
-:10304000F4E44A11EEFFFB8016A28811F495771084
-:10305000FFFFF4A9F83019CC71E100020012698277
-:10306000001071E1000200126882F7FF71E10002B6
-:1030700000126882FBFF71E1000200126882FFF01B
-:1030800071E1000300127682FFFF71E1000400127B
-:103090007682FFFF71E1000200126982002071E177
-:1030A00000020011F27319DA6881FFEF7711007BDB
-:1030B0001081FB801997F00000B47711007B10811C
-:1030C000FB801997F00000B9F980169AEE018A1179
-:1030D000F4E400A4000019DF00012AE6000000016A
-:1030E0002AE7000000032A120C01C34F0000000170
-:1030F0002A15000000022A160000000000192A5DAF
-:103100000043006F0070007900720069006700687A
-:10311000007400200054006500630068006E006FBA
-:10312000005400720065006E0064002000410047FA
-:10313000000000042A760030002E00300000000C51
-:103140002A7A004600650062002000320037002025
-:103150000032003000300031000000092A860031C2
-:103160000034003A00330035003A003300330000E9
-:10317000000F2A8F00000000000000010000000185
-:10318000000000000000000000000000000000003F
-:10319000000000012A9E000000012A9F000000019B
-:1031A0002AA0000000012AA1000000012AA20000BC
-:1031B0000001297E000000022980000000000001BB
-:1031C0002982FFFF00012AA7000000052AA87141FB
-:1031D0002000200000230400000A2AAD00000000A7
-:1031E00000000000000000000000000000000000DF
-:1031F000000F2AB7000000000000004000A082403D
-:103200000008307F00800180000000000000000006
-:1032100000000001276E00000001276F0000000081
-:10322000000900001A8304E804CF04C504BA04B0FE
-:1032300004AC049C048C0481007800000100F2734B
-:1032400007EFF495F495F27307EFF495F495F273A4
-:1032500007EFF495F495F27307EFF495F495F27394
-:1032600007EFF495F495F27307EFF495F495F27384
-:1032700007EFF495F495F27307EFF495F495F27374
-:1032800007EFF495F495F27307EFF495F495F27364
-:1032900007EFF495F495F27307EFF495F495F27354
-:1032A00007EFF495F495F27307EFF495F495F27344
-:1032B00007EFF495F495F27307EFF495F495F27334
-:1032C00007AAF495F495F27307EFF495F495F27369
-:1032D00007EFF495F495F2730223F495F495F273E5
-:1032E00007EFF495F495F27307EFF495F495F27304
-:1032F00007EFF495F495F27307EFF495F495F273F4
-:1033000007EFF495F495F27307EFF495F495F273E3
-:1033100005E5F495F495F27302B5F495F495F2731E
-:103320000E33F495F495F27307EFF495F4950000DD
-:00000001FF
diff --git a/firmware/vicam/firmware.H16 b/firmware/vicam/firmware.H16
deleted file mode 100644
index cac0cba68cc7..000000000000
--- a/firmware/vicam/firmware.H16
+++ /dev/null
@@ -1,7 +0,0 @@
-:0026000000B6C31F000264E767FDFF0EC0E709DE008E00C0094003C01744034BAFC00700004BAF97CF00001D
-:000A000000B6C30300036418000000FB
-:0008000000B6C301000664000014
-:0696000000B6C38F060264E707000008C0E70700003EC0E7075401AA00E707C805B600E7074201D200E7077C001600E70756001800E707060092C0E70700001EC0E707FFFF22C0E707040024C0E707EC2728C0E70716018E00E78701000EC097CFD70900C0E777010092C009C1E709FE052401E70904062601E707070092C0E70500C0C0DF97CF170057001702D70900C0E777010092C00AC1E757FFFFFA050DC0E7570000FA050FC09FAFC600E70500C0C805C105C005C0DF97CF27DAFA05EF0701000B0673CF9FAF78019FAF1A036ECFE709FC052401E70902062601E707070092C0E709FC05FE05E70902060406E7090006FC05E709FE05000627DAFA05E7570100FA0502CA04C097CF9FAF660597CFE70740000206C809FC059FAFDA0297CFCF170200EF57810009069FA0B601EF57800009069FA04002EF5701000B069FA04603E70701000AC046AF47AF9FAF4002E7072E000AC0EF878000090697CF000E0100C05751009FC09E02C057500020C0C057550012C0C05756009FC072029FCFD602C10B080601D06F900806C0070800C10B08069FAF280597CF2F0E02000806C0070800C10B08069FAF28059FCFD6022F0E02000906EF87800009069FCFD602EF677FFF0906E767FFFD22C0E767EFFF24C0E787100028C09FAFB805E787E02124C09FAFA805E787080024C0E767DFFF24C0C8070A00C0070000C10701009FAF28059FAFB805C0079E009FAF4405E767FFFE24C0C00920C0E787000124C0C07700020FC1E767F7FF24C0E767F7FF24C0E787080024C008DA5EC1EF078000090697CFEF0701000A0697CFEF0700000B06EF0700000A06EF677FFF0906EF0700000D06E767EFFF28C0E76717D824C0E70700001EC0E707FFFF22C097CFC8070E069FAFDA02E7070000F205E7071000F605E7070E06F405E707D602F805C807F205C107008050AF97CF2F0C020007062F0C04000606E7070000F205E7071000F605E707E205F405E707CE02F805C807F205C107008051AF97CF9FAF66049FAF1A0359AF97CFC0070E00C10B0C0641D19FAF2805C0073C009FAF44056800C0073B009FAF44056F000C066800E0070401E80B0A06E8070000E0070002E007EC01E007FCFF97CFE707FFFFFA05EF0700000B06E7070E062401E7070E06FE05E70740002601E70740000406E707070092C097CFEF0702000B069FAF7801EF77800007069FC01404EF770100070637C0EF7701000D060FC1EF0701000D06C0070200C10730009FAF2805C0070100C10702009FAF2805C807FF4F9FAFA805C00738009FAF4405C177030002C108DA75C1C17701000AC1C0070100C10702009FAF2805EF07010006062CCFC0070100C10704009FAF2805EF070000060622CFEF0700000D06EF57010006061BC0C0070100C10701009FAF2805C0070200C10730009FAF2805C807FF4F9FAFA805C00738009FAF4405C1670300C157030002C008DA73C1C0070200C1071200EF570000060602C0C10723009FAF2805C0071400C10BEA059FAF2805C0073E009FAF0A05E709E405FA0527D8FA05E7070E06FC05E7074E060006E707400002069FAF66059FAFC60097CFC10BE20541D001D2C11723009FAFDC04C0070400C10BE3059FAF2805C0070600C109E6059FAF2805C0070700C109E605C1D19FAF2805C0070B00C109E8059FAF2805C0070C00C109E805C1D19FAF2805C0070D00C10709009FAF2805C0070300C10732009FAF2805C0070F00C10700009FAF280597CFE767FFD924C0C8070A004000C0670002278024C0E787000424C0E767FFF924C001D208DA72C1E787002024C097CF27001EC0E787FF0022C0E7677FFF24C0E787800024C0E787800024C097CF9FAF0A0567001EC0E767BFFF24C0E787400024C0E787400024C097CF9FAF0A05E76700FF22C0E767FFFE24C0E767FFFE24C0C10920C0E787000124C097CFC0074000C809FC05E76700FF22C0E767FFFE24C0E767BFFF24C0E767BFFF24C000DAE80920C0E787400024C0E787400024C000DAE80920C06DC1E787000124C097CFE707320012C0E777008012C07CC097CFE707204E12C0E777008012C07CC097CF0902190001010080960904000001000000000705810240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000A1
-:0136000000B6C32F0103640E0014001A00200026004A0064006A0092009A00A000B200B800BE00C200C800CE00DC00DA00E200E000E800E600EE00EC00F200F80002010A010E0112011E01220128012C0132013601440150015E01720176017A01800188018C0194019C01A001A401AA01B001B401BA01D001DA01F601FA01020234023C0244024A0250025602740278027E0284028A02880290028E029402A202A802AE02B402BA02B802C002BE02C402D002D402E002E602EE02F802FC0206031E032403280330032E033C034A034E03540358035E0366036E037A0386038E039603B203B803C603CC03D403DA03E803F403FC03040420042A04320436043E044404420448044E044C04540452045A045E046204680474047C04800488048C0494049A04A204A604AE04B404C004CC04D8042A0546056C0500005E
-:0008000000B6C301000664000014
-:0000000001FF
diff --git a/firmware/whiteheat.HEX b/firmware/whiteheat.HEX
deleted file mode 100644
index 8dae60295d55..000000000000
--- a/firmware/whiteheat.HEX
+++ /dev/null
@@ -1,1097 +0,0 @@
-:030000000297E381
-:03000300021312D3
-:03000B00020BB530
-:0300330002081CA4
-:03004300020A00AE
-:03005B0002833BE2
-:10037000907FE9E070030204731470030204E72421
-:10038000FE700302054F24FB700302046414700323
-:1003900002045214700302043A1470030204492444
-:1003A00005600302059E907FEBE024FE601614605A
-:1003B000362402707B7412907FD4F07400907FD545
-:1003C000F00205A5907FEAE0FF120A99EA49600D64
-:1003D000EA907FD4F0E9907FD5F00205A5907FB434
-:1003E000E04401F00205A5907FEAE0FF120A58EA16
-:1003F00049603312A23BF54E907FEEE0FFE54ED30D
-:100400009F4003E0F54EE54ED394404003754E40C7
-:10041000AE02AF017C7F7D00AB4E129137907FB56D
-:10042000E54EF00205A5907FB4E04401F00205A579
-:10043000907FB4E04401F00205A5907F00E521F033
-:10044000907FB57401F00205A5907FEAE0F52102E6
-:1004500005A5907FEAE0F535D202438810D2EBD2B1
-:10046000A80205A5907F00E535F0907FB57401F0F6
-:100470000205A5907FE8E0247F6024146031240207
-:10048000705BA200E433FF25E0FFA205E4334F9048
-:100490007F00F0E4A3F0907FB57402F00205A5E4BC
-:1004A000907F00F0A3F0907FB57402F00205A59054
-:1004B0007FECE0F45480FFC4540FFFE054072F2575
-:1004C000E024B4F582E4347FF583E05401907F00AA
-:1004D000F0E4A3F0907FB57402F00205A5907FB41C
-:1004E000E04401F00205A5907FE8E024FE601D24B1
-:1004F0000260030205A5907FEAE0B40105C2000294
-:1005000005A5907FB4E04401F00205A5907FEAE0E4
-:100510007034907FECE0FF5407FEF54EEF30E703B8
-:10052000434E10907FD7E54EF0E54E4420F0EFF4B7
-:100530005480FDC4540F2E25E024B4F582E4347FAA
-:10054000F583E4F0805F907FB4E04401F080569042
-:100550007FE8E024FE60182402704A907FEAE0B44D
-:100560000104D200803F907FB4E04401F0803690D7
-:100570007FEAE07020907FECE0F45480FFC4540FD9
-:10058000FFE054072F25E024B4F582E4347FF5839F
-:100590007401F08010907FB4E04401F08007907FF8
-:0C05A000B4E04401F0907FB4E04402F0AD
-:0105AC00222C
-:1005AD00754AFF7549FF75480F754700D203C2069E
-:1005BD00C202C200C205C2019003007419F0E4909A
-:1005CD0001BCF0C2049001C0F0A3F0C2AFC2A812EA
-:1005DD000C22E49002AFF09001BDF0900100F0A369
-:1005ED00F0A3F0A3F0A3F0A37410F0A37401F0A393
-:1005FD007408F07E017F001219C1754C12754D0AF9
-:10060D0090010BE0FF054DE54DAC4C7002054C140F
-:10061D00F5828C83EFF090010CE04480FF054DE5F1
-:10062D004DAC4C7002054C14F5828C83EFF09001AB
-:10063D000DE0FF054DE54DAC4C7002054C14F582F7
-:10064D008C83EFF090010EE0FF054DE54DAC4C7045
-:10065D0002054C14F5828C83EFF090120AE493FF9F
-:10066D0074019390011CCFF0A3EFF090011CE0FFFB
-:10067D00A3E0FEEF6EFF90011CF0A3E06FFFF09082
-:10068D00011CE06FF0E0FEA3E0FFE4FCFD755210ED
-:10069D007553027554127555AC129426754C12751E
-:1006AD004DB290010DE0FF054DE54DAC4C700205CE
-:1006BD004C14F5828C83EFF090010EE0FF054DE5B3
-:1006CD004DAC4C7002054C14F5828C83EFF0907F8D
-:1006DD0092E0FFC4540F2441FF054DE54DAC4C7025
-:1006ED0002054C14F5828C83EFF0054DE54DAE4CB3
-:1006FD007002054C14F5828E83E4F07582107583BB
-:10070D0001E0FCA3E0FDA3E0FEA3E0FF90011812C1
-:10071D00A3EE7E017F181286BE900118E0FCA3E0C7
-:10072D00FDA3E0FEA3E0FF75520A75530675541242
-:10073D007555B8129426D2E843D820907FAB74FF3C
-:10074D00F05391EF907FAFE04401F0907FAEE04425
-:10075D001FF0D2AF20012E20012BA2039207120908
-:10076D00C575465075456D7544337543002001E4DC
-:10077D007FFF7EFF7DFF7CFF784312A3D7EC4D4EAC
-:10078D004F60D180E8300105120370C20130060AB6
-:10079D001209FB5003120AE8C20612965E9001BDC3
-:1007AD00E0600C129201E49001BDF0907FD3F090C7
-:1007BD0002AFE0B40F031299B912A095E4FF7401D2
-:1007CD00A807088002C333D8FCFE9001BCE05E6030
-:1007DD001474282FF8E6D3940A40047E0180027E1B
-:1007ED00008E4B8003754B0174682FF582E4342025
-:1007FD00F583E54BF00FBF04C5E52CD3940A4004F7
-:0E080D007F0180027F0090206CEFF0020792C6
-:01081B0022BA
-:04081C0053D8EF328C
-:10082000E533C39401400E907F93E04430F0907F15
-:1008300095E044C0F07FF47E011209AE907F96E00F
-:1008400054FEF07F0A7E001209AE907F96E04408C5
-:10085000F07F057E001209AE907F96E054FBF07F9A
-:10086000057E001209AEE533C39401500E7F027D70
-:10087000FF1282EA7F057E001209AE907F96E04467
-:1008800002F0E0547FF07F057E001209AE907F9663
-:10089000E04440F07F057E001209AE907F96E05460
-:1008A000BFF07F327E001209AE907F96E04440F0A8
-:0808B0007F327E001209AE2226
-:1008B800907F96E054FDF0E04480F07F0A7E0012BD
-:1008C80009AEE533C39401500E7F02E4FD1282EABB
-:1008D8007F057E001209AE907F96E054BFF07F0539
-:1008E8007E001209AE907F96E04404F07F057E00FA
-:1008F8001209AE907F96E054F7F07F057E0012094A
-:10090800AE907F96E04401F07F057E001209AEE5C7
-:1009180033C39401400E907F93E054CFF0907F95BD
-:08092800E0543FF0120B002225
-:10093000900AF4E4937076907F937430F0907F94F3
-:10094000743CF0907F9574C6F07F0A7E001209AE69
-:10095000E4907F9CF0907F967408F0907F9C74CF19
-:10096000F07F0A7E001209AE902070E0FFC4540FA1
-:10097000F533C394015007907F96E04480F0E490F3
-:100980007F97F0907F9D7402F0E533C39401400B94
-:10099000E4907F98F0907F9E74C0F0907FE2741294
-:0E09A000F01208207582F475830A74FFF022AD
-:1009AE008E5D8F5EE55E155EAE5D7002155D4E600E
-:0709BE00051209EA80EE2298
-:1009C500907FD6E054FBF0E04408F0300704E044A3
-:1009D50002F07FD07E071209AE907FD6E054F7F083
-:0509E500E04404F022D3
-:1009EA007400F58690FDA57C05A3E582458370F920
-:0109FA0022DA
-:0509FB001208B8D32230
-:100A0000020C4E00020C8100020C6600020CC000B9
-:100A1000020CAA00020AED00020AEE00020AEF0030
-:100A2000020CDB00020DCB00020D1700020E2B00A2
-:100A3000020D5300020E8B00020D8F00020EEB0020
-:100A4000020AF000020AF200020AF100020AF300B0
-:080A5000020F4B00020F6100D0
-:020A58008F4FBE
-:100A5A00E4F5507551FF75521275536AAB51AA529B
-:100A6A00A95390000112A254B4031DAF500550EFD0
-:100A7A00B54F012212A23B7E0029FFEE3AA9077563
-:0E0A8A0051FFF552895380D47B007A00790029
-:010A9800223B
-:100A9900E4FE7551FF755212755312AB51AA52A952
-:100AA9005390000112A2546402702DAD060EEDB5EB
-:100AB90007012290000212A2AD85F04FF550624F56
-:100AC900E54F6250E550624F29FDE54F3AA905759A
-:0E0AD90051FFF552895380C37B007A007900EB
-:010AE70022EC
-:050AE800120820D322DA
-:010AED0032D6
-:010AEE0032D5
-:010AEF0032D4
-:010AF00032D3
-:010AF10032D2
-:010AF20032D1
-:010AF30032D0
-:030AF400000407F4
-:090B0000907FD6E04480F080747F
-:100B7D00438701000000000000000000000000227B
-:100B8D00538EF7E58954F14401F589758CB1D2A9DD
-:100B9D0075984075CBFF75CAF375C834E4FF7F05B2
-:070BAD007828E4F608DFFCE4
-:010BB400221E
-:100BB500C0E0C083C082C0D075D000C000C006C0F0
-:010BC5000728
-:100BC600300416758CF8758A307F2FAE071FEE60DD
-:100BD6003C9020007455F080F2758CB17F28EFD3DD
-:100BE600942C5009A807E66001160F80F1900300C7
-:100BF600E0600214F09001C0E07002A3E0600E9085
-:0D0C060001C1E024FFF09001C0E034FFF0D8
-:0F0C1300D007D006D000D0D0D082D083D0E0322E
-:100C2200D200758E10120930E533C394014008904A
-:100C32007F927402F08005E4907F92F0128000129D
-:0C0C42000F7D1294F7121B0C120B8D2278
-:100C4E00C0E0C083C082D2015391EF907FAB74019C
-:080C5E00F0D082D083D0E03217
-:100C6600C0E0C083C082907FC4E4F05391EF907FD0
-:0B0C7600AB7404F0D082D083D0E032D9
-:100C8100C0E0C083C0825391EF907FAB7402F090BB
-:100C91007FD8E0700D907FD9E07007E52C70037567
-:090CA1002C14D082D083D0E03283
-:100CAA00C0E0C083C0825391EF907FAB7410F0D044
-:060CBA0082D083D0E0327D
-:100CC000C0E0C083C082300202D2065391EF907F11
-:0B0CD000AB7408F0D082D083D0E0327B
-:100CDB00C0E0C083C082C0D075D0105391EF907F1D
-:100CEB00A97402F0E53430E013E53230E0079020D0
-:100CFB0004E04401F0902001E04401F0E52C700386
-:0C0D0B00752C14D0D0D082D083D0E03200
-:100D1700C0E0C083C082C0D075D0105391EF907FE0
-:100D2700A97404F0E53430E113E53230E10790208F
-:100D37000CE04401F0902009E04401F0E52C700339
-:0C0D4700752C14D0D0D082D083D0E032C4
-:100D5300C0E0C083C082C0D075D0105391EF907FA4
-:100D6300A97408F0E53430E213E53230E20790204D
-:100D730014E04401F0902011E04401F0E52C7003ED
-:0C0D8300752C14D0D0D082D083D0E03288
-:100D8F00C0E0C083C082C0D075D0105391EF907F68
-:100D9F00A97410F0E53430E313E53230E307902007
-:100DAF001CE04401F0902019E04401F0E52C7003A1
-:0C0DBF00752C14D0D0D082D083D0E0324C
-:100DCB00C0E0C083C082C085C084C086758600C069
-:100DDB00D075D0105391EF907FAA7402F0E53420B8
-:100DEB00E006907FC7F08022E53130E00A907FC7A4
-:100DFB00E09002F8F08013E52230E007902004E049
-:100E0B004402F0902001E04402F0E52C7003752CB5
-:100E1B0014D0D0D086D084D085D082D083D0E0328D
-:100E2B00C0E0C083C082C085C084C086758600C008
-:100E3B00D075D0105391EF907FAA7404F0E5342055
-:100E4B00E106907FC9F08022E53130E10A907FC93D
-:100E5B00E09002F9F08013E52230E10790200CE0DE
-:100E6B004402F0902009E04402F0E52C7003752C4D
-:100E7B0014D0D0D086D084D085D082D083D0E0322D
-:100E8B00C0E0C083C082C085C084C086758600C0A8
-:100E9B00D075D0105391EF907FAA7408F0E53420F1
-:100EAB00E206907FCBF08022E53130E20A907FCBD7
-:100EBB00E09002FAF08013E52230E207902014E074
-:100ECB004402F0902011E04402F0E52C7003752CE5
-:100EDB0014D0D0D086D084D085D082D083D0E032CD
-:100EEB00C0E0C083C082C085C084C086758600C048
-:100EFB00D075D0105391EF907FAA7410F0E5342089
-:100F0B00E306907FCDF08022E53130E30A907FCD70
-:100F1B00E09002FBF08013E52230E30790201CE009
-:100F2B004402F0902019E04402F0E52C7003752C7C
-:100F3B0014D0D0D086D084D085D082D083D0E0326C
-:100F4B00C0E0C083C0825391EF907FA97480F0D032
-:060F5B0082D083D0E032D9
-:100F6100C0E0C083C0825391EF907FAA7480F0905B
-:0C0F710001BD74FFF0D082D083D0E032CC
-:100F7D0090012012A3FA000025809001247408F03E
-:100F8D00A37401F0A3746EF0A3F0A37413F0A37413
-:100F9D0011F0E4A3F0A3F090011EF090011EE0FF0C
-:100FAD0004A3F0EF75F00DA42401F9740335F0A836
-:100FBD0001FC7D017B017A01791F7E007F0D12A25C
-:100FCD00127E017F1F1287A690011EE004F0E0C380
-:100FDD00940440C7E4F52790011EF090011EE0FF38
-:100FED00C39404501A74F82FF582E43402F583E4A7
-:100FFD00F074232FF8E4F690011EE004F080DCE499
-:10100D00F534E5C0602F90011E7401F090011EE0D3
-:10101D00FFD39404501FEF14FF7401A8070880023A
-:10102D00C333D8FC42347E017F1E12844190011ED1
-:10103D00E004F080D7E4F53EF522F531F53290016C
-:10104D001EF090011EE0FF75F008A42406F582E461
-:10105D003420F583E054F0FE74C52FF582E434019D
-:10106D00F583EEF0743A2FF8A60674362FF8E4F6F1
-:10107D00742D2FF8E4F674FC2FF582E43402F58319
-:10108D00E4F090011EE004F0E0B404B6902060E0BE
-:04109D00540FF54EA9
-:1010A1007003021126E490011EF090011EE0FFC3BF
-:1010B100940450E47401A807088002C333D8FC5596
-:1010C1004E605A90011EE0FE75F008A42402F582DC
-:1010D100E43420F583E0FFEE75F008A42405F582E1
-:1010E100E43420F583E0EE75F008A42406F582E4EB
-:1010F1003420F583E0FFAF06EE75F00DA42402F570
-:1011010082E43403F583E0FCA3E0FDA3E0FEA3E069
-:10111100F5668E658D648C637D061283DF90011EFA
-:06112100E004F0808522CD
-:02112700AC0713
-:10112900907FA5E04480F0EC25E04441907FA6F053
-:101139007B3CAF031BEF7016907FA5E04440F09015
-:101149007FA6E0FD7D32AF051DEF60D480F8907F6A
-:10115900A5E0FD30E0DC20E109E04440F07EFF7FBE
-:10116900F922ED30E20C907FA5E04440F07EFF7F4C
-:10117900FA22907FA5E04420F0907FA6E0FD7B1E37
-:10118900AF031BEF7016907FA5E04440F0907FA657
-:10119900E0FD7D32AF051DEF608680F8907FA5E008
-:1011A900FD20E0DC7B3CAF031BEF7019907FA5E0CD
-:1011B9004440F0907FA6E0FD7D32AF051DEF70033E
-:1011C90002112980F5907FA5E0FD30E0D930E209D0
-:1011D900E04440F07EFF7FFA22C2AF907FA5E04451
-:0C11E90040F0907FA6E0FDD2AFFF7E003A
-:0111F50022D7
-:1012000012010001FFFFFF401007018042000102B0
-:10121000030109025800010104803C090400000A8E
-:10122000FFFFFF050705810240000007050102409E
-:10123000000007058202400000070502024000008E
-:101240000705830240000007050302400000070570
-:1012500084024000000705040240000007058702E1
-:1012600040000007050702400000040309042403AE
-:1012700043006F006E006E00650063007400200084
-:101280005400650063006800200049006E006300A0
-:101290002E001803570068006900740065004800BC
-:1012A0004500410054002D0034001A035800580036
-:1012B0002D00580058002D005800580058005800C4
-:1012C000580058002A0343006F006E006600690052
-:1012D0006700750072006100740069006F006E00A5
-:1012E000200053007400720069006E006700220342
-:1012F00049006E00740065007200660061006300C2
-:101300006500200053007400720069006E006700E1
-:021310000000DB
-:10131200C0E0C0F0C083C082C085C084C086C0D097
-:1013220075860075D018902060E0540FF5F07011AA
-:10133200D0D0D086D084D085D082D083D0F0D0E0F7
-:101342003275860010F00B10F11210F21910F32012
-:1013520080D4E528700375281402137CE5297003F4
-:1013620075291402150DE52A7003752A1402169EBA
-:10137200E52B7003752B1402182F902002E0543FC6
-:1013820020E23A20E10B20E40B20E514600902136D
-:1013920043021465021343438204E0F53A02134305
-:1013A200438204E0432D010213435382F843820532
-:1013B200E042365382FBE054FBF002134330E10279
-:1013C20080E8F585E53230E00A5382F8438204E092
-:1013D20054FEF0E58520E3569020507400F09020F2
-:1013E200587401F0907FE2E04440F0907FE305867C
-:1013F200907E800586E585F0A3E584F00586907FE2
-:10140200E5E53FFD030303FEF0F0F0F0F0F0F0F04D
-:10141200DEF6907FE2E054BFF09020587400F09026
-:101422007FB7EDF0902001E054FEF00213437F40BD
-:10143200907E800586902000E584FE2405FD8D8443
-:10144200E08E8430E009E00586F0A30586DFEF0533
-:1014520086C374409F907FB7F00586A3E054FEF0E8
-:10146200021343532DFAE5236008752300D2E7FEE9
-:10147200800A907FC7E0FE70030214FF9020507430
-:1014820000F09020587401F0907FE2E04440F09028
-:101492007FE30586907E400586E585F0A3E584F02E
-:1014A2000586907FE5EE30E7080586E02438F005F2
-:1014B20086EE547FFE5407FBEE547860300303033C
-:1014C20030E30474077B08FDFCE0E0E0E0E0E0E0EC
-:1014D200E0DDF6EBFE6019EC640770118B23907F60
-:1014E200E2E054BFF09020587400F0801BE0DEFD73
-:1014F200907FE2E054BFF09020587400F0902001F9
-:10150200E054FDF0907FC7F002134390200AE054AC
-:101512003F20E23A20E10B20E40B20E514600902AF
-:1015220013430215F6021343438204E0F53B021310
-:1015320043438204E0432E010213435382F8438261
-:1015420005E042375382FBE054FBF002134330E1E3
-:101552000280E8F585E53230E10A5382F8438204DD
-:10156200E054FEF0E58520E3569020507401F0909F
-:1015720020587401F0907FE2E04440F0907FE30550
-:1015820086907E000586E585F0A3E584F0058690C9
-:101592007FE5E540FD030303FEF0F0F0F0F0F0F02C
-:1015A200F0DEF6907FE2E054BFF09020587400F035
-:1015B200907FB9EDF0902009E054FEF00213437FD2
-:1015C20040907E000586902008E584FE2405FD8D6E
-:1015D20084E08E8430E009E00586F0A30586DFEF23
-:1015E2000586C374409F907FB9F00586A3E054FE40
-:1015F200F0021343532EFAE5246008752400D2E763
-:10160200FE800A907FC9E0FE70030216909020507F
-:101612007401F09020587401F0907FE2E04440F0B1
-:10162200907FE30586907DC00586E585F0A3E5847D
-:10163200F00586907FE5EE30E7080586E02438F075
-:101642000586EE547FFE5407FBEE547860300303A8
-:101652000330E30474077B08FDFCE0E0E0E0E0E037
-:10166200E0E0DDF6EBFE6019EC640770118B24906C
-:101672007FE2E054BFF09020587400F0801BE0DE5F
-:0E168200FD907FE2E054BFF09020587400F01D
-:10169000902009E054FDF0907FC9F00213439020A0
-:1016A00012E0543F20E23A20E10B20E40B20E51445
-:1016B0006009021343021787021343438204E0F5D3
-:1016C0003C021343438204E0432F0102134353823D
-:1016D000F8438205E042385382FBE054FBF00213EA
-:1016E0004330E10280E8F585E53230E20A5382F8C2
-:1016F000438204E054FEF0E58520E35690205074C8
-:1017000002F09020587401F0907FE2E04440F090A5
-:101710007FE30586907D800586E585F0A3E584F06E
-:101720000586907FE5E541FD030303FEF0F0F0F050
-:10173000F0F0F0F0DEF6907FE2E054BFF090205839
-:101740007400F0907FBBEDF0902011E054FEF002A9
-:1017500013437F40907D800586902010E584FE2411
-:1017600005FD8D84E08E8430E009E00586F0A30558
-:1017700086DFEF0586C374409F907FBBF00586A38C
-:10178000E054FEF0021343532FFAE5256008752557
-:1017900000D2E7FE800A907FCBE0FE7003021821A2
-:1017A0009020507402F09020587401F0907FE2E095
-:1017B0004440F0907FE30586907D400586E585F006
-:1017C000A3E584F00586907FE5EE30E7080586E026
-:1017D0002438F00586EE547FFE5407FBEE54786003
-:1017E0003003030330E30474077B08FDFCE0E0E012
-:1017F000E0E0E0E0E0DDF6EBFE6019EC640770117C
-:101800008B25907FE2E054BFF09020587400F08068
-:101810001BE0DEFD907FE2E054BFF09020587400A2
-:10182000F0902011E054FDF0907FCBF00213439034
-:10183000201AE0543F20E23A20E10B20E40B20E59F
-:10184000146009021343021918021343438204E08F
-:10185000F53D021343438204E04330010213435336
-:1018600082F8438205E042395382FBE054FBF002E8
-:10187000134330E10280E8F585E53230E30A538214
-:10188000F8438204E054FEF0E58520E356902050B2
-:101890007403F09020587401F0907FE2E04440F02F
-:1018A000907FE30586907D000586E585F0A3E584BD
-:1018B000F00586907FE5E542FD030303FEF0F0F0BE
-:1018C000F0F0F0F0F0DEF6907FE2E054BFF0902010
-:1018D000587400F0907FBDEDF0902019E054FEF0B8
-:1018E0000213437F40907D000586902018E584FE1A
-:1018F0002405FD8D84E08E8430E009E00586F0A3A8
-:101900000586DFEF0586C374409F907FBDF0058696
-:10191000A3E054FEF00213435330FAE52660087545
-:101920002600D2E7FE800A907FCDE0FE7003021908
-:10193000B29020507403F09020587401F0907FE230
-:10194000E04440F0907FE30586907CC00586E58505
-:10195000F0A3E584F00586907FE5EE30E708058684
-:10196000E02438F00586EE547FFE5407FBEE5478F1
-:10197000603003030330E30474077B08FDFCE0E000
-:10198000E0E0E0E0E0E0DDF6EBFE6019EC6407701B
-:10199000118B26907FE2E054BFF09020587400F045
-:1019A000801BE0DEFD907FE2E054BFF09020587491
-:1019B00000F0902019E054FDF0907FCDF002134329
-:0119C00032F4
-:0419C100AD07AC06BC
-:1019C5007906ED2404F582E43CF583E0FAA3E0FB17
-:1019D5004A7003021B09E9B407004003021ADB90B1
-:1019E50019EBF8282873021AB9021A71021A5A0259
-:1019F5001A40021A2F021A1A021A00907FA5E04413
-:101A050080F08D828C83A3E0FF25E044A0907FA623
-:101A1500F019021ADB198D828C83E0C39420400AE9
-:101A2500A3A3E0907FA6F0021ADB8D828C83A3A38B
-:101A3500E0A3E0907FA6F019021ADB907FA5E044B1
-:101A450080F08D828C83A3E0FF25E044A1907FA6E2
-:101A5500F019021ADBEB64014A7008907FA5E04497
-:101A650020F019907FA6E0F55919806AED2404F558
-:101A750082E43CF583E0FEA3E064024E7008907FAB
-:101A8500A5E04420F019907FA6E0FFED2406F5823D
-:101A9500E43CF583E475F00112A29785F082F583A5
-:101AA500EFF0ED2404F582E43CF58374FFF5F012C4
-:101AB500A2818022907FA5E04440F0907FA6E0FFC0
-:101AC500ED2406F582E43CF583E0FAA3E0F5828A8D
-:101AD50083EFF07F0822907FA5E0F55930E0F730DD
-:101AE500E207E04440F07F0622E9D3940250030266
-:101AF50019C7E55930E1030219C7907FA5E04440B5
-:061B0500F07F07227F08BB
-:011B0B0022B7
-:101B0C00E533C39401501C7F057E001209AE7F02A1
-:101B1C007DFF1282EA7F057E001209AE7F037DFFF6
-:041B2C001282EA2215
-:108000007BFF7A12791B90000412A254FD8B5075ED
-:108010005112755224E4907FE1F0907FE0F0F54E2C
-:10802000F54F9002AEF0907FDFF0907FDEF0907F12
-:10803000A974FFF0907FAAF0E4FCEC25E024B4F5ED
-:1080400082E4347FF583E4F00CBC10EEE4907FDD35
-:10805000F0AF051DEF70030281C6AB50AA51A952C3
-:1080600090000112A254640560030281B5900003E0
-:1080700012A2546401600302813C90000212A254D7
-:10808000FF547FFCD394075003028116ECC3941075
-:108090004003028116EF30E742E54FAE4E7802CE44
-:1080A000C313CE13D8F9FF74F02CF582E4347FF5B6
-:1080B00083EFF0907FE0E0FFEC24F8FE7401A80667
-:1080C000088002C333D8FC4F907FE0F09002AEE00E
-:1080D00004F0907FDDE04480F0803EE54FAE4E78C6
-:1080E00002CEC313CE13D8F9FF74E82CF582E43422
-:1080F0007FF583EFF0907FE1E0FFEC24F8FE740160
-:10810000A806088002C333D8FC4F907FE1F09002AC
-:10811000AEE004F080037FFF2290000412A25425F9
-:108120004FF54FE4354EF54E90000512A254FEE493
-:10813000254FF54FEE354EF54E0281B8AB50AA51A2
-:10814000A95290000312A254FF64026005EF640379
-:10815000706090000212A254FF547FFCD394075029
-:108160004EEF30E71E907FDEE0FF7401A804088028
-:1081700002C333D8FCFE4F907FDEF0907FACE04E20
-:10818000F08035907FDFE0FF7401A804088002C30F
-:1081900033D8FCFE4F907FDFF0907FADE04EF0ECE7
-:1081A00025E024C5F582E4347FF583ECF080097F77
-:1081B000FF227FFF227FFF2274072552F552E4350C
-:1081C00051F55102805120030D9002AEE0600790FE
-:0881D0007FAEE04402F07F00E5
-:0181D8002284
-:0481D9008E598F5AD2
-:1081DD00755B03E55A2404F582E43559F583E0FE19
-:1081ED00A3E04E70030282E7E55B604E1460381425
-:1081FD00602014600302828B907FA5E04480F0859F
-:10820D005A82855983A3E0FF25E044A0907FA6F014
-:10821D00806C855A82855983E0C394204009A3A3BD
-:10822D00E0907FA6F08057155B855A82855983A310
-:10823D00A3E0A3E0907FA6F08044E55A2406F582E2
-:10824D00E43559F583E475F00112A29785F082F5B6
-:10825D0083E0907FA6F0907FA5E04440F0E55A249E
-:10826D0004F582E43559F58374FFF5F012A281858A
-:10827D005A82855983A3A3E475F00112A281907FE0
-:10828D00A5E0F55C30E0F730E207E04440F07F0612
-:10829D0022E55C20E10A907FA5E04440F07F0722B3
-:1082AD00E55B70317F017E001209AE907FA5E04441
-:1082BD0080F0855A82855983A3E0FF25E044A09084
-:1082CD007FA6F0907FA5E0F55C30E0F730E1D57545
-:0C82DD005B030281E0155B0281E07F087A
-:0182E9002272
-:0282EA00AE07DD
-:1082EC007C02EC14601514701E907FA5E04480F0A5
-:1082FC00EE25E04440907FA6F0800C907FA6EDF038
-:10830C00907FA5E04440F0907FA5E0FB30E0F8BC06
-:10831C00020A20E107E04440F07F0722EB30E20A3A
-:0E832C00907FA5E04440F07F0622DCB67F087B
-:01833A002220
-:10833B00C0E0C083C082C2A99003007419F0D2A917
-:0F834B0053917F9001C4E4F0D082D083D0E03210
-:10835A00EF75F008A42400F582E43420AB82FAF524
-:10836A0083A3E4F08B828A83A3A3A3E0F56174BF9D
-:10837A00F08B828A83A3A3E04410F08B828A83A3C2
-:10838A00A3A3E4F08B828A83A3F0F9ED601D740144
-:10839A007E00A807088005C333CE33CED8F9FFE4A0
-:1083AA00EF5531600479098002790D8B828A83A3A3
-:1083BA00A3A374BFF08B828A83A3A3E054EFF08B4C
-:1083CA00828A83A3A3A3E561F0AE02AF038F828EF4
-:0483DA0083A3E9F0A0
-:0183DE00227C
-:0483DF008F618D62BB
-:1083E300E4F567743F2FF876087F807E257D007C57
-:1083F30000AB66AA65A964A863D312A3B340267F22
-:10840300007E967D007C00A863D312A3B3500C7545
-:108413006740743F2561F87610800A756780743F62
-:108423002561F87638E56745624401FFE56175F03B
-:0D84330008A42402F582E43420F583EFF064
-:018440002219
-:108441008F828E83E014F557C3940440037FFF228B
-:10845100E55775F008A42400F582E43420AF82F5D5
-:10846100588F59E55725E024C6F582E4347FF5831A
-:10847100E020E10FE55725E024C7F582E4347FF5DC
-:1084810083E4F074232557F8E4F6E5592404F582D2
-:10849100E43558F583E04403F0E55775F00DA42465
-:1084A10002F582E43403F583E0FCA3E0FDA3E0FEE2
-:1084B100A3E0F5668E658D648C637D06AF571283EC
-:1084C100DFAF577D0112835A855982855883A3A353
-:1084D100E020E043E0FFE5592405F582E43558F555
-:1084E10083E0E5592406F582E43558F583E0FFE59C
-:1084F1005775F00DA42402F582E43403F583E0FC02
-:10850100A3E0FDA3E0FEA3E0F5668E658D648C63B8
-:108511007D06AF571283DF74F82557F582E43402E4
-:10852100F583E4F0E55725E0FFC3740C9F75F04037
-:10853100A42440F582E5F0347BAF82FEE55725E0C7
-:1085410024EFF582E43402F583EEF0A3EFF0AF57A8
-:0F8551007401A807088002C333D8FC42347F00AE
-:0185600022F8
-:108561008F828E83E014F557C3940440037FFF226A
-:10857100AF57E4FD12835A74F82557F582E43402AB
-:10858100F583E4F0E55775F008A42400F582E4349E
-:1085910020AF82F5598F5AF583E5822404F582E4F0
-:1085A1003583F583E054FCF0E55775F00DA4240CF8
-:1085B100F582E43403F583E4F0E55775F00DA42466
-:1085C10002F582E43403F583E0FCA3E0FDA3E0FEC1
-:1085D100A3E0F5668E658D648C637D06AF571283CB
-:1085E100DFE55A2405F582E43559F583E030E009E9
-:1085F100855A82855983E0F558AF577401A8070859
-:108601008002C333D8FCF45234E55725E024C6F583
-:1086110082E4347FF583E020E10FE55725E024C7AC
-:0B862100F582E4347FF583E4F07F0075
-:01862C00222B
-:04862D008E578F587D
-:108631008F828E83E014F559C3940440037FFF2297
-:10864100E55975F008A42401F582E43420F583E0AE
-:1086510054037066855882855783A3E030E028E58E
-:108661005975F00DA42402F582E43403F583E0FC8E
-:10867100A3E0FDA3E0FEA3E0F5668E658D648C6347
-:108681007D02AF591283DF855882855783A3E0307D
-:10869100E128E55975F00DA42402F582E43403F5CF
-:1086A10083E0FCA3E0FDA3E0FEA3E0F5668E658D0B
-:0C86B100648C637D04AF591283DF7F00EE
-:0186BD00229A
-:1086BE008F828E83C083C082E0FDA3A3A3E0FCED76
-:1086CE006CD082D083F08F828E83A3A3A3C083C08D
-:1086DE0082E0FD8F828E83E0FCED6CD082D083F041
-:1086EE008F828E83C083C082A3A3A3E0FDEC6DD0E6
-:1086FE0082D083F08F828E83A3C083C082E0FD8FF1
-:10870E00828E83A3A3E0FCED6CD082D083F08F82A7
-:10871E008E83A3A3C083C082E0FD8F828E83A3E0ED
-:10872E00FCED6CD082D083F08F828E83A3C083C089
-:10873E0082E0FD8F828E83A3A3E0FFED6FD082D007
-:03874E0083F02293
-:04875100AD07AC06BE
-:10875500790D8D828C83E014FEC3940440037FFF62
-:10876500228C578D58EE75F00DA42401F582E43462
-:1087750003AF82FEAD0119ED60240FEFAC06700169
-:108785000E14F5828C83E0FD0558E558AA57700252
-:10879500055714F5828A83E06D60D97F01227F0039
-:0187A50022B1
-:0487A6008E578F5803
-:1087AA008F828E83E014F55EC3940440037FFF2218
-:1087BA00E55E75F008A42400F582E43420AF82F562
-:1087CA005F8F60855882855783A3E0FCA3E0FDA3F1
-:1087DA00E0FEA3E0FF7B087A0079007800D312A3B9
-:1087EA00B34010855882855783A312A3FA0000006C
-:1087FA0008802E855882855783A3E0FCA3E0FDA359
-:10880A00E0FEA3E0FF7B007A0879077800C312A391
-:10881A00B3500E855882855783A312A3FA0007081E
-:10882A0000855882855783A3E0F8A3E0F9A3E0FA0C
-:10883A00A3E0FB7F007E507D467C0012A3218F5C63
-:10884A008E5B8D5A8C597B0A7A007900780012A3C4
-:10885A0021AF038F5DAF5CAE5BAD5AAC597B0A7A30
-:10886A00007900780012A3218F5C8E5B8D5A8C5997
-:10887A00E55DC394054015E55C2401F55CE4355BD0
-:10888A00F55BE4355AF55AE43559F5598560828520
-:10889A005F83A3E4F0856082855F83A3A3A3E0449A
-:1088AA0080F0856082855F83E55CF0AF5CAE5BAD8E
-:1088BA005AAC59780812A3C4856082855F83A3EFF6
-:1088CA00F0856082855F83A3A3A3E0547FF0E4F57B
-:1088DA005DE558240BF582E43557F583E0FF30E077
-:1088EA00235401F0E5602404F582E4355FF583E062
-:1088FA0054FDF0AF5E7401A807088002C333D8FCA8
-:10890A004222803674017E00A85E088005C333CEF9
-:10891A0033CED8F9FFE4EF5522601FE5602404F551
-:10892A0082E4355FF583E04402F0AF5E7401A80784
-:10893A00088002C333D8FCF45222E5582408F58291
-:10894A00E43557F583E0FFB46205435D0A801AEF08
-:10895A00B47205435D088011EFB47405435D02806B
-:10896A0008EF646E60037FFF22E558240BF582E46A
-:10897A003557F583E0FF30E303435D80EF30E712BC
-:10898A00435D40E5602404F582E4355FF583E04405
-:10899A0002F0E558240BF582E43557F583E030E11F
-:1089AA0020AF5E7401A807088002C333D8FC4232A4
-:1089BA00E5602404F582E4355FF583E04401F08044
-:1089CA0010AF5E7401A807088002C333D8FCF452C2
-:1089DA0032E558240BF582E43557F583E0FF30E49D
-:1089EA0011AE5E7401A806088002C333D8FC423176
-:1089FA008010AE5E7401A806088002C333D8FCF466
-:108A0A005231EF20E10330E403E4F55D85608285AD
-:108A1A005F83A3A3A374BFF0856082855F83A3A34A
-:108A2A00E4F0E55DF0E558240AF582E43557F5836C
-:108A3A00E0FFE5602404F582E4355FF583EFF0E5B5
-:108A4A0058240AF582E43557F583E0FFE5602405EA
-:108A5A00F582E4355FF583EFF0E5582409F582E401
-:108A6A003557F583E0FFE5602406F582E4355FF5C6
-:108A7A0083EFF0E5582409F582E43557F583E0FFE2
-:108A8A00E5602407F582E4355FF583EFF0856082BF
-:108A9A00855F83A3A3A3E4F0856082855F83A3A394
-:108AAA00F0855882855783A3E0FCA3E0FDA3E0FE8E
-:108ABA00A3E0F5668E658D648C637D06AF5E1283D6
-:108ACA00DF755D08E558240CF582E43557F583E037
-:108ADA006003435D10E5602404F582E4355FF583A5
-:108AEA00E05403455DF0E5582405F582E43557F571
-:108AFA0083E0FEC394054006EED3940840037FFF4B
-:108B0A0022E5582406F582E43557F583E0FDC3943F
-:108B1A00014006EDD3940240037FFF22ED14FF25A6
-:108B2A00E025E0FFEE24FB4FF55DE5582407F582CA
-:108B3A00E43557F583E024D0601814601A24C36022
-:108B4A001E146009240A7014435D188012435D08DC
-:108B5A00800D435D388008435D2880037FFF2285AE
-:108B6A006082855F83A3A3A3E55DF074017E00A8FC
-:108B7A005E088005C333CE33CED8F9FFE4EF55340F
-:108B8A006007AF5E7D0112835AAA57A9587B01C0BC
-:108B9A0003C001E55E75F00DA42401F9740335F0F4
-:108BAA00A801FCAD03D001D0037E007F0D12A212F2
-:028BBA007F003A
-:018BBC002296
-:108BBD008F828E83E014FEC3940440037FFF22EE68
-:108BCD0075F008A42400F582E43420AD82FC9001F8
-:108BDD002C7408F0EE04A3F0E4A3F08D828C83E5F1
-:108BED00822406F582E43583F583E090012FF08D24
-:108BFD00828C83E5822405F582E43583F583E05488
-:108C0D001E900130F0742D2EF8E6A3F0AF0674011E
-:108C1D00A807088002C333D8FCF557E533C3940188
-:108C2D00400D902078E0540F755800F55980097F5C
-:108C3D00021211278E588F59C3E5586480948040D5
-:108C4D00DAE5575559900132F07E017F2C7D0712E0
-:048C5D00916A7F0099
-:018C610022F0
-:108C62008F828E83E014FEC3940440037FFF22EEC2
-:108C720075F008A42400F582E43420AF82FE90014E
-:108C820033740AF08F828E83E5822404F582E43500
-:108C920083F583E0900134F07E017F337D021291EF
-:038CA2006A7F00E6
-:018CA50022AC
-:048CA6008E578F58FE
-:108CAA008F828E83E014FEC3940440037FFF22EE7A
-:108CBA0075F008A42400F582E43420AD82FC8558BE
-:108CCA0082855783A3E0600FED2404F582E43CF526
-:108CDA0083E04402F08043EE75F00DA4240CF58283
-:108CEA00E43403F583E030E020EE25E024C6F58283
-:108CFA00E4347FF583E030E1F07F60ED2405F5820E
-:108D0A00E43CF583E05FB507F2AE04AF05EF240457
-:0C8D1A00F582E43EF583E054FDF07F009C
-:018D2600222A
-:048D2700AD07AC06E2
-:108D2B008D828C83E014FEC3940440037FFF22EEFC
-:108D3B0075F008A42400F582E43420AF82FE8D8206
-:108D4B008C83A3E0600FEF2404F582E43EF583E00F
-:108D5B004401F0800DEF2404F582E43EF583E054EA
-:048D6B00FEF07F0097
-:018D6F0022E1
-:048D7000AD07AC0699
-:108D74008D828C83E014FEC3940440037FFF22EEB3
-:108D840075F008A42400F582E43420AF82FE8D82BD
-:108D94008C83A3E0600D8F828E83A3A3A3E0444061
-:108DA400F0800B8F828E83A3A3A3E054BFF07F00D7
-:018DB400229C
-:108DB5008F828E83E014FEC3940440037FFF22AFAD
-:108DC500067401A807088002C333D8FC423E7F0021
-:018DD500227B
-:048DD6008E578F58CD
-:108DDA008F828E83A3E0F55C8F828E83E0F559D370
-:108DEA00940440037FFF22E55924FE601614601F95
-:108DFA001460282403702E7E7E7F80755A7E755BF0
-:108E0A008080227E7E7F00755A7E755B0080167E8A
-:108E1A007D7F80755A7D755B80800A7E7D7F0075B7
-:108E2A005A7D755B00E55C701B855B82855A83748D
-:108E3A00FFF0E55925E024B5F582E4347FF5837423
-:108E4A0001F08048E5582402FFE43557FEE55C60EE
-:108E5A00230FEFAC0670010E14F5828C83E0FD053A
-:108E6A005BE55BAA5A7002055A14F5828A83EDF013
-:108E7A00155C80D9855882855783A3E0FFE559257B
-:0E8E8A00E024B5F582E4347FF583EFF07F003D
-:018E980022B7
-:108E9900EF2405F558E43EF5579001357407F09035
-:108EA900017A7401F0A37436F0855882855783A33B
-:108EB900A3A3E0FEA3E08E59F55A8558828557830E
-:108EC900E0249E606124F9600E24F17003028F7A18
-:108ED90024146003028FC8855882855783A3E0FE56
-:108EE900A3E0FFC3E49FF55C74019EF55BD3E55CE9
-:108EF900943FE55B94004006755B00755C3FD3E5E4
-:108F09005A955CE559955B5003028FCBAE5BAF5C1C
-:108F1900855882855783A3A3A3EEF0FEA3EFF08EB5
-:108F290059F55A028FCB855882855783A3E0FEA352
-:108F3900E0FFC374309FF55CE49EF55BD3E55C9478
-:108F490010E55B94004006755B00755C10D3E55A2B
-:108F5900955CE559955B406AAE5BAF5C8558828547
-:108F69005783A3A3A3EEF0FEA3EFF08E59F55A8021
-:108F790051855882855783A3E0FEA3E0FFC3E49F90
-:108F8900F55CE49EF55B455C600BD3E55C943FE5DD
-:108F99005B94004006755B00755C3FD3E55A955CB0
-:108FA900E559955B401CAE5BAF5C8558828557835C
-:108FB900A3A3A3EEF0FEA3EFF08E59F55A80037F29
-:108FC9000122855882855783E0249E700302908B85
-:108FD90024F9605824F170030290DB241460030221
-:108FE900911F855882855783A3E0FEA3E0FFD394A0
-:108FF900FFEE9400400302911F900175EFF0E55ACE
-:10900900155AAE59700215594E700302911F9001FD
-:1090190075E0FF04F0A807E6FF90017AE475F00116
-:1090290012A29785F082F583EFF080D28558828568
-:109039005783A3E0FEA3E0FFC39480EE940050039E
-:1090490002911FD3EF94FFEE9400400302911F9009
-:109059000176EFF0E55A155AAE59700215594E705E
-:109069000302911F900176E0FF04F0A807E6FF9044
-:10907900017AE475F00112A29785F082F583EFF089
-:1090890080D2855882855783A3E0FEA3E0FFC3946D
-:1090990020EE9400500302911FD3EF942FEE940019
-:1090A9005074900177EFF0E55A155AAE59700215D0
-:1090B900594E6062900177E0FF04F0A807E6FF903F
-:1090C900017AE475F00112A29785F082F583EFF039
-:1090D90080D5855882855783A3E0FFA3E090017866
-:1090E900CFF0A3EFF0E55A155AAE59700215594E53
-:1090F9006024900178E475F00112A29785F082F559
-:1091090083E0FF90017AE475F00112A29785F0825D
-:10911900F583EFF080CF7E017F35855882855783AF
-:0D912900A3A3A3E0A3E004FD12916A7F0060
-:019136002216
-:109137008E628F638C648D65AF031BEF60240563BC
-:10914700E563AE627002056214F5828E83E0FF0567
-:1091570065E565AC647002056414F5828C83EFF0F5
-:0391670080D6228D
-:06916A008D5DAB07AA06B3
-:1091700075614075600D755F03755E00907FC2E09C
-:1091800020E1F9AF61AE60AD5FAC5EEC4D4E4F706B
-:1091900008907FC27402F080D7907FC2E020E11671
-:1091A000AF03AE027C7B7D80AB5D129137907FC3B5
-:0891B000E55DF07F01227F0064
-:0191B8002294
-:1091B900900184740BF0A3E533F0900AF5E49390E1
-:1091C9000186F0900AF6E493900187F0E490017C1F
-:1091D900F0A3F0A3F0A3F0A3F0A37410F0A374011B
-:1091E900F0A37488F07E017F7C1219C17E017F840F
-:0791F9007D1412916A7F0052
-:01920000224B
-:109201007E7B7F40754E7B754F40907FD3E0FF851D
-:109211004E51854F52E5522401F556E43551F5552D
-:10922100E4F550855282855183E0FE14B40C005060
-:109231005B909239F828287302925D02925D029246
-:109241006702927102927102927102928502925D9D
-:1092510002927B02925D02928D02925DEF64026046
-:109261002B7550FF8026EF640E60217550FF801C26
-:10927100EF640360177550FF8012EF6403600D7592
-:1092810050FF8008EF640660037550FFE5506015DC
-:109291009001987411F0A3EEF07E017F987D021287
-:1092A100916AAF5022E4F550855282855183E014D2
-:1092B100B40F0040030293CF9092C0F828287302A4
-:1092C10092ED0292F902930502935302935E029387
-:1092D1006902937402937F02938A0293950293A089
-:1092E1000293A70293CF0293B20293BDAF56AE553C
-:1092F1001284418F500293D2AF56AE551285618FC1
-:10930100500293D2855553855654E5542401FFE408
-:109311003553FE1286BEAF54AE531287518F50EFB4
-:10932100640160030293D2AF54AE531287A68F50EB
-:10933100E55070030293D2855482855383E075F022
-:109341000DA424F4F582E43402AF82FE1287A60252
-:1093510093D2AF56AE55128CA68F508074AF56AED5
-:1093610055128D278F508069AF56AE55128D708F73
-:1093710050805EAF4FAE4E128E998F508053AF56D4
-:10938100AE55128BBD8F508048AF56AE5512862D0B
-:109391008F50803DAF56AE55128C628F5080321285
-:1093A10091B98F50802BAF56AE55128DB58F50802D
-:1093B10020AF56AE55128DD68F508015AF4FAE4EA1
-:1093C1007C027DAF7B40129137E4F55080037550EC
-:1093D100FFE550601D9001987411F085528285510E
-:1093E10083E0900199F07E017F987D0212916AAF2E
-:1093F1005022855282855183E0FF1424FA500424BF
-:10940100FE701F9001987410F0A3EFF085568285CD
-:109411005583E090019AF07E017F987D0312916A55
-:049421008F50AF5069
-:019425002224
-:089426008F518E508D4F8C4ECA
-:10942E0075580175599CE4F557AF531553EF7003FA
-:10943E000294C4AF52E4FCFDFEF8F9FAAB07AF514B
-:10944E00AE50AD4FAC4E12A321AF038F56AF51AEFF
-:10945E0050AD4FAC4EC004C005C006C007AF52E4BD
-:10946E00FCFDFEF8F9FAAB07D007D006D005D00404
-:10947E0012A3218F518E508D4F8C4EE5562430F510
-:10948E0056D39439400674072556F5560559E559B5
-:10949E00AE587002055814F5828E83E4F00559E536
-:1094AE0059AE587002055814F5828E83E556F005B4
-:1094BE00570557029437E559155970021558AF578D
-:1094CE001557EF6023E5591559AE5870021558F52A
-:1094DE00828E83E0FF0555E555AC54700205541499
-:0894EE00F5828C83EFF080D6BB
-:0194F6002253
-:1094F700E49001C9F07E017FCA9001BEEEF0A3EFB0
-:0A950700F09001C2EEF0A3EFF02295
-:10951100AA07A9059001C9E0C394405061AC027447
-:10952100017E00A804088005C333CE33CED8F9FFED
-:10953100E4EF55346045EA04FF9001C2E0FCA3E08A
-:10954100FDF5828C83EFF0A3E9F08D828C83A3A3D8
-:10955100EBF09001C2E475F00312A281FCD3E5F0B7
-:109561009487EC9402400A9001C27401F0A374CA7A
-:10957100F0C2AF9001C9E004F0D2AF7F01227F00B9
-:0195810022C7
-:109582009001C9E0D3940040559001BEE0FCA3E0F5
-:10959200AA04F97B01C003C002C001AA06A907A858
-:1095A20001AC02AD03D001D002D0037E007F0312D2
-:1095B200A2129001BEE475F00312A281FCD3E5F081
-:1095C2009487EC9402400A9001BE7401F0A374CA1D
-:1095D200F0C2AF9001C9E014F0D2AF7F01227F0048
-:0195E2002266
-:1095E300907FC2E020E1737E7B7F8075537B75544F
-:1095F30080E5542401FFE43553A9077B018B55F51E
-:10960300568957FE129582EF6050AB55AA56A9575B
-:1096130012A23B14FF90000112A254B40216C2AF6F
-:10962300EF75F008A42401F582E43420F583E044C7
-:1096330004F0D2AF74017E00A807088005C333CEBF
-:1096430033CED8F9FFE4EF5534600F855482855348
-:0A96530083740DF0907FC37404F0DF
-:01965D0022EA
-:10965E001295E3E4F54E743A254EF8E654F0F54FC4
-:10966E0074C5254EF582E43401F583E0654FFFC4E1
-:10967E00540FF550602274C5254EF582E43401F581
-:10968E0083E54FF0AF4E7D01E54F4550FB1295112E
-:10969E00EF70051295E380EC054EE54EC394044041
-:1096AE00B51295E3E53E6048E4F54EAF4E7401A861
-:1096BE0007088002C333D8FCF54F553E6029E54EAE
-:1096CE0075F008A42405F582E43420F583E030E635
-:1096DE0016AF4E7D047B80129511EF70051295E347
-:1096EE0080EFE54FF4523E054EE54EC3940440BB69
-:1096FE00900300E060030297DF7419F0E533C39422
-:10970E0001400D902078E0540F755100F5528009FC
-:10971E007F021211278E518F52C3E55164809480BF
-:10972E0040DA9001BCE06552F06037E4F54EAF4E82
-:10973E007401A807088002C333D8FCF54F9001BC12
-:10974E00E0554F6014AF4E7D08E54F5552FB129514
-:10975E0011EF70051295E380EC054EE54EC39404AF
-:10976E0040CC9001BCE552F0E4F54EC2AF74362504
-:10977E004EF8E6F54FE4F6D2AF534F1EE54F6011AB
-:10978E00AF4E7D02AB4F129511EF70051295E3802F
-:10979E00EF742D254EF8E6F54F74FC254EF582E458
-:1097AE003402F583E0654F6011AF4E7D04AB4F126E
-:1097BE009511EF70051295E380EF74FC254EF5823E
-:1097CE00E43402F583E54FF0054EE54EC3940440B4
-:0497DE009A1295E363
-:0197E2002264
-:0C97E300787FE4F6D8FD75816702982AB3
-:1097EF000205ADE493A3F8E493A34003F68001F2DE
-:1097FF0008DFF48029E493A3F85407240CC8C3337B
-:10980F00C4540F4420C8834004F456800146F6DF49
-:10981F00E4800B010204081020408090986FE47ED2
-:10982F00019360BCA3FF543F30E509541FFEE4933E
-:10983F00A360010ECF54C025E060A840B8E493A305
-:10984F00FAE493A3F8E493A3C8C582C8CAC583CA30
-:10985F00F0A3C8C582C8CAC583CADFE9DEE780BEE8
-:10986F006024028A010204081020408081828488CB
-:10987F0090A0C0C1C2C4C8D0E0E1E2E4E8F0F1F2C8
-:08988F00F4F8F9FAFCFDFEFFFC
-:0198970000D0
-:089898008B598A5A895B8D5C33
-:1098A000E4F55DF55EAF5C155CEF6036AB59055BCA
-:1098B000E55BAA5A7002055A14F912A23BFFE55D56
-:1098C000E55E6F25E0FFE433FE74952FF582EE34FC
-:1098D0009EF583E55DFFE493F55D7401936FF55E9E
-:0698E00080C3AE5DAF5E27
-:0198E600225F
-:0B98E700C0E0C083C082C0D075D01864
-:1098F200902060E0540FFE30E005902002E0FFEE81
-:1099020030E10590200AE0FFEE30E205902012E0FF
-:10991200FFEE30E30590201AE0FF9001C4E0B51E8F
-:0A99220004E4F080059001C4EEF0AB
-:09992C00D0D0D082D083D0E0320B
-:02993500A90384
-:10993700EF75F008A42400F582E43420AB82FAE541
-:109947005C455DF55EE960148A83E5822404F5824F
-:10995700E43583F583E04DF0E4FE8013EB2404F552
-:1099670082E43AF583E0FFEDF4FCEF5CF0AE5EEBEA
-:109977002406F582E43AF583E0555EFCB50603AFAD
-:109987000522E55C5CFEE55D5CFDE96016EE7004B2
-:109997007F0180027F00AE07ED70047F0180027FA8
-:1099A70000AD07EE6003AF5C22ED6003AF5D227F81
-:0199B70000AF
-:0199B800228C
-:1099B9007555027556B0900335740FF0855682853A
-:1099C9005583A3E0FF900337F0855682855583E0E0
-:1099D900900336F090033874FFF0755703755839C2
-:1099E900EF14B40B004003029E5D9099FAF8282801
-:1099F90073029A1B029ABA029BBF029BDE029BDE8C
-:109A0900029C94029CCF029CF4029DB2029DE20248
-:109A19009E0EE4F54EE54E75F008A42400F582E4A7
-:109A29003420AF82F5538F54E4FFE4FEEF601074E5
-:109A39008A2EF582E43402F583E0F4F54F800D7443
-:109A49008A2EF582E43402F583E0F54FE5542407C4
-:109A5900F582E43553F583E54FF0E0F550654F6045
-:109A690038E4900338F0E54E04FD0558E558AA5747
-:109A79007002055714F5828A83EDF00558E558AC54
-:109A8900577002055714F5828C83E54FF08558828B
-:109A9900855783E550F0029E630EBE248F0FEF6455
-:109AA900027087054EE54E64046003029A1E029E09
-:109AB90063E4F54EAF4EE4FD12835A054EE54ED3ED
-:109AC900940340F09000047498F0A374E7F0E4F56F
-:109AD900507E207F00755320755400F54EAF4E74AB
-:109AE90001A807088002C333D8FCF54F9001C4F0E0
-:109AF9009001C0E4F0A3740AF0855482855383A3CE
-:109B09007402F09001C4E0B54F349001C0E07002D6
-:109B1900A3E070EF900338F0E54E04FF0558E558CF
-:109B2900AC577002055714F5828C83EFF085588283
-:109B390085578374FFF0E49001C4F07550FF9001DC
-:109B4900C4E0FF6037E4900338F0E54E04FE0558A1
-:109B5900E558AC577002055714F5828C83EEF00571
-:109B690058E558AC577002055714F5828C83EFF00D
-:109B7900855882855783E54FF07550FFE55070167B
-:109B890074082554F554E43553F553054EE54E64F0
-:109B9900046003029AE6E4F54EAF4E7D0112835A42
-:109BA900054EE54ED3940340F09000047413F0A3DE
-:109BB9007412F0029E63855682855583E014FF7402
-:109BC90001A807088002C333D8FC9002F7F090017E
-:109BD900C4F0029E639001C07403F0A374E8F0E43A
-:109BE900F5509002F7E0FF9001C4E0B50719900124
-:109BF900C0E07002A3E070EA900338F085588285CE
-:109C0900578374FFF0F550E5506003029E6390019D
-:109C1900C0F0A37496F09001C0E07002A3E070F662
-:109C2900E533C39401400D902078E0540F7551003D
-:109C3900F55280097F021211278E518F52C3E551C7
-:109C49006480948040DAE552540FF5509002F7E0B1
-:109C5900555070047F0180027F008F4F85568285A1
-:109C69005583A3E0B4050CE54F70047F0180027FA2
-:109C7900008F4FE54F7003029E63E4900338F0852F
-:109C89005882855783E550F0029E63E4FFFD1283F5
-:109C99005A7E207F00755320755400855482855360
-:109CA90083A3A3A3E04480F0855482855383740180
-:109CB900F0A3E4F0855482855383A3A3A3E0547FE2
-:109CC900F0D204029E63C2047E207F007553207582
-:109CD9005400E5542405F582E43553F583E030E674
-:109CE900F1E4FF7D0112835A029E63E4F550F54EBB
-:109CF900AF4EE4FD12835AE54E75F008A42400F531
-:109D090082E43420AF82F5538F54F583E58224042D
-:109D1900F582E43583F583E054FCF0AF4E7D017B99
-:109D290001755C80755D401299358F50E550701151
-:109D3900AF4E7D027B01755C10755D201299358FE0
-:109D490050E5507010AF4E7D01FB755C80755D402C
-:109D59001299358F50E5507010AF4E7D02FB755C3E
-:109D690010755D201299358F50AF4E7D0112835ABF
-:109D7900E5506026E4900338F0E54E04FF0558E508
-:109D890058AC577002055714F5828C83EFF085584B
-:109D990082855783E550F0029E63054EE54ED394C4
-:109DA900035003029CF9029E63E4900359F0A3F067
-:109DB900A3F0A3F0A3F0A37410F0A3749EF0A3740E
-:109DC90085F07E037F591281D9EF64087003029EE2
-:109DD90063E4900338F0029E63E4900359F0A3F022
-:109DE900A3F0A3F0A3F0A37410F0A3E557F0A3E543
-:109DF90058F07E037F591219C1EF6408605CE49042
-:109E09000338F08055E5562402FFE43555FAA907D1
-:109E19007B017D10129898EF4E7032900359F0A390
-:109E2900F0A3F0A3F0A3F0A37410F0E55624029078
-:109E39000360F0E4355590035FF07E037F5912818A
-:109E4900D9EF64086014E4900338F0800DE49003BE
-:109E590038F080069003387401F09001C0E4F0A353
-:109E6900740AF09001C0E07002A3E070F67E037FEF
-:0B9E7900357D2412916AE49002AFF0E6
-:019E840022BB
-:109E8500FFFEFCF8F0E0C080000103070F1F3F7FD5
-:109E95000000C0C1C1810140C30103C00280C241AD
-:109EA500C60106C00780C7410500C5C1C48104407D
-:109EB500CC010CC00D80CD410F00CFC1CE810E402D
-:109EC5000A00CAC1CB810B40C90109C00880C8413D
-:109ED500D80118C01980D9411B00DBC1DA811A40AD
-:109EE5001E00DEC1DF811F40DD011DC01C80DC417D
-:109EF5001400D4C1D5811540D70117C01680D641AD
-:109F0500D20112C01380D3411100D1C1D0811040BC
-:109F1500F00130C03180F1413300F3C1F2813240AC
-:109F25003600F6C1F7813740F50135C03480F4417C
-:109F35003C00FCC1FD813D40FF013FC03E80FE412C
-:109F4500FA013AC03B80FB413900F9C1F88138403C
-:109F55002800E8C1E9812940EB012BC02A80EA41AC
-:109F6500EE012EC02F80EF412D00EDC1EC812C407C
-:109F7500E40124C02580E5412700E7C1E6812640AC
-:109F85002200E2C1E3812340E10121C02080E041BC
-:109F9500A00160C06180A1416300A3C1A2816240AC
-:109FA5006600A6C1A7816740A50165C06480A4417C
-:109FB5006C00ACC1AD816D40AF016FC06E80AE412C
-:109FC500AA016AC06B80AB416900A9C1A88168403C
-:109FD5007800B8C1B9817940BB017BC07A80BA41AC
-:109FE500BE017EC07F80BF417D00BDC1BC817C407C
-:109FF500B40174C07580B5417700B7C1B6817640AC
-:10A005007200B2C1B3817340B10171C07080B041BB
-:10A01500500090C191815140930153C052809241AB
-:10A02500960156C057809741550095C1948154407B
-:10A035009C015CC05D809D415F009FC19E815E402B
-:10A045005A009AC19B815B40990159C0588098413B
-:10A05500880148C0498089414B008BC18A814A40AB
-:10A065004E008EC18F814F408D014DC04C808C417B
-:10A07500440084C185814540870147C046808641AB
-:10A08500820142C043808341410081C180814040BB
-:10A09500E4FF74F82FF582E43402F583E0700302DF
-:10A0A500A138743A2FF8E620E50302A138EF75F0E0
-:10A0B50008A42400F582E43420AD82FCF583E58212
-:10A0C5002405F582E43583F583E0546064607063AC
-:10A0D500EF25E024EFF582E43402F583E475F00121
-:10A0E50012A29785F082F583E08D828C83F074F857
-:10A0F5002FF582E43402F583E014F07036EF25E0A5
-:10A1050024C7F582E4347FF583E4F0EF25E0FEC350
-:10A11500740C9E75F040A42440F582E5F0347BADC7
-:10A1250082FCEF25E024EFF582E43402F583ECF0C0
-:0CA13500A3EDF00FEF6404600302A0979C
-:01A1410022FB
-:10A14200E709F608DFFA8046E709F208DFFA803EFF
-:10A1520088828C83E709F0A3DFFA8032E309F608EC
-:10A16200DFFA8078E309F208DFFA807088828C8354
-:10A17200E309F0A3DFFA806489828A83E0A3F60808
-:10A18200DFFA805889828A83E0A3F208DFFA804CE2
-:10A1920080D280FA80C680D4806980F280338010B9
-:10A1A20080A680EA809A80A880DA80E280CA803322
-:10A1B20089828A83ECFAE493A3C8C582C8CCC5839A
-:10A1C200CCF0A3C8C582C8CCC583CCDFE9DEE7806A
-:10A1D2000D89828A83E493A3F608DFF9ECFAA9F0E9
-:10A1E200EDFB2289828A83ECFAE0A3C8C582C8CC3F
-:10A1F200C583CCF0A3C8C582C8CCC583CCDFEADE58
-:10A20200E880DB89828A83E493A3F208DFF980CCB9
-:10A2120088F0ED2402B4040050C2F582EB2402B4AB
-:10A22200040050B823234582F582EF4E60AEEF6002
-:09A23200010EE5822390A1927354
-:10A23B00BB010689828A83E0225002E722BBFE0221
-:09A24B00E32289828A83E4932254
-:10A25400BB010CE58229F582E5833AF583E02250BF
-:10A2640006E92582F8E622BBFE06E92582F8E22209
-:0DA27400E58229F582E5833AF583E4932223
-:10A28100C5F0F8A3E028F0C5F0F8E5821582700268
-:06A291001583E038F02205
-:10A29700A3F8E0C5F025F0F0E5821582700215837A
-:06A2A700E0C838F0E822D7
-:10A2AD00BB0110E58229F582E5833AF583E0F5F0EF
-:10A2BD00A3E0225009E92582F886F008E622BBFECC
-:10A2CD000AE92582F8E2F5F008E222E5832AF58312
-:08A2DD00E993F5F0A3E99322D7
-:10A2E50075F008758200EF2FFFEE33FECD33CDCC30
-:10A2F50033CCC58233C5829BED9AEC99E5829840B3
-:10A305000CF582EE9BFEED9AFDEC99FC0FD5F0D68F
-:10A31500E4CEFBE4CDFAE4CCF9A88222B800C1B9B9
-:10A325000059BA002DEC8BF084CFCECDFCE5F0CBF7
-:10A33500F97818EF2FFFEE33FEED33FDEC33FCEB30
-:10A3450033FB10D703994004EB99FB0FD8E5E4F9EB
-:10A35500FA227818EF2FFFEE33FEED33FDEC33FCD8
-:10A36500C933C910D7059BE99A4007EC9BFCE99ACC
-:10A37500F90FD8E0E4C9FAE4CCFB2275F010EF2F11
-:10A38500FFEE33FEED33FDCC33CCC833C810D70711
-:10A395009BEC9AE899400AED9BFDEC9AFCE899F84C
-:0EA3A5000FD5F0DAE4CDFBE4CCFAE4C8F922DF
-:10A3B300EB9FF5F0EA9E42F0E99D42F0E89C45F000
-:01A3C3002277
-:10A3C400E8600FECC313FCED13FDEE13FEEF13FF77
-:03A3D400D8F1229B
-:10A3D700080808E6CF2FF618E6CE3EF618E6CD3D7C
-:07A3E700F618E6CC3CF6225B
-:0CA3EE00ECF0A3EDF0A3EEF0A3EFF022E2
-:10A3FA00A8828583F0D083D08212A41112A41112EC
-:10A40A00A41112A411E473E493A3C583C5F0C58310
-:10A41A00C8C582C8F0A3C583C5F0C583C8C582C8AC
-:01A42A00220F
-:00000001FF
-/*****************************************************************************
- *
- * whiteheat.h -- ConnectTech WhiteHEAT Firmware.
- *
- * Copyright (C) 2000-2002 ConnectTech Inc (http://www.connecttech.com/)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * (10/09/2002) Stuart MacDonald
- * Firmware 4.06
- *
- * (04/09/2000) gkh
- * Updated the firmware with the latest provided by ConnectTech.
- *
- * (01/16/2000) gkh
- * Fixed my intel hex processing tool, so now the firmware actually
- * matches the original file (this was causing a few problems...)
- *
- * (01/15/2000) gkh
- * Added debug loader firmware if DEBUG is #defined:
- * Port 1 LED flashes when the vend_ax program is running
- * Port 2 LED flashes when any SETUP command arrives
- * Port 3 LED flashes when any valid VENDOR request occurs
- * Port 4 LED flashes when the EXTERNAL RAM DOWNLOAD request occurs
- *
- * version 1.0 (01/09/2000) gkh
- * Original firmware from ConnectTech massaged a little to be program
- * readable.
- *
- *****************************************************************************/
-
-#define whiteheat_DATE "20000106"
diff --git a/firmware/whiteheat_loader.HEX b/firmware/whiteheat_loader.HEX
deleted file mode 100644
index 5f663f6a2849..000000000000
--- a/firmware/whiteheat_loader.HEX
+++ /dev/null
@@ -1,314 +0,0 @@
-:0300000002098D65
-:030033000208FBC5
-:03004300020B00AD
-:03004B000205AA01
-:10010000907FA5E05410FFC4540F4450F50F13E442
-:1001100033F511907FE9E0245EB407004003020349
-:1001200078900128F82828730201BC0201BC020162
-:100130009102013D02015302016F02019A907F007A
-:10014000E511F0907FB57401F0907FB4E04402F0C7
-:10015000020378907F92E0FFC4540F907F00F090EC
-:100160007FB57401F0907FB4E04402F0020378128E
-:100170000A895007E4907F00F08006907F00740F9A
-:10018000F0907FB57401F0907FB4E04402F0020378
-:1001900078907FEAE0F50F020378907F007407F013
-:1001A000907FB57401F0907FB4E04402F07FE87E68
-:1001B00003120D94D206120CCC020378907FEAE071
-:1001C000752800F529A3E0FEE4EE4228907FEEE0DA
-:1001D000752A00F52BA3E0FEE4EE422A907FE8E0CA
-:1001E00064C060030202C9E52B452A70030203784C
-:1001F000C3E52B9440E52A94005008852A2C852BD2
-:100200002D8006752C00752D40907FE9E064A37069
-:1002100034F530F531C3E531952DE530952C505C42
-:10022000E5292531F582E5303528F583E0FF7400B6
-:100230002531F582E4347FF583EFF00531E5317047
-:1002400002053080D0E4F530F531C3E531952DE578
-:1002500030952C501874002531F582E4347FF583F5
-:1002600074CDF00531E5317002053080DDAF29AE87
-:1002700028AD2D7A7F79007B00120BF4907FB5E5D5
-:100280002DF0E52D2529F529E52C3528F528C3E5A0
-:100290002B952DF52BE52A952CF52A907F92E0FFE2
-:1002A000C4540F752E00F52FD39400E52E94005002
-:1002B0000C907FB4E020E1030201E780F4907FB46A
-:1002C000E020E2030201E780F4907FE8E064406010
-:1002D00003020378E52B452A7003020378E4907F3C
-:1002E000C5F0907F92E0FFC4540F752E00F52FD318
-:1002F0009400E52E94005009907FC4E030E109801D
-:10030000F7907FB4E020E3F9907FC5E0752C00F50D
-:100310002D907FE9E064A37034F530F531C3E53109
-:10032000952DE530952C503474C02531F582E43498
-:010330007E4E
-:10033100F583E0FFE5292531F582E5303528F583A0
-:10034100EFF00531E5317002053080D0AF29AE28DC
-:10035100AD2D7A7E79C07BC0120C3FE52D2529F5A4
-:1003610029E52C3528F528C3E52B952DF52BE52A14
-:09037100952CF52A0202D4C322E6
-:10037A00907FE9E070030204521470030204CE2451
-:10038A00FE700302054224FB700302044C1470033E
-:10039A0002044614700302043A147003020440244F
-:1003AA00056003020596120E4440030205A2907FDF
-:1003BA00EBE024FE60161460402402706974119008
-:1003CA007FD4F07400907FD5F00205A2907FEAE016
-:1003DA00FF120B588B258A268927EA496011AE023B
-:1003EA00EE907FD4F0AF01EF907FD5F00205A29096
-:1003FA007FB4E04401F00205A2907FEAE0FF120810
-:10040A00BA8B258A268927EA496011AE02EE907FC7
-:10041A00D4F0AF01EF907FD5F00205A2907FB4E04F
-:10042A004401F00205A2907FB4E04401F00205A263
-:10043A00120E1F0205A2120E2D0205A2120AF702BF
-:10044A0005A2120E110205A2120E4640030205A2CF
-:10045A00907FE8E0247F60241460312402705BA25C
-:10046A0000E433FF25E0FFA202E4334F907F00F05F
-:10047A00E4A3F0907FB57402F00205A2E4907F0035
-:10048A00F0A3F0907FB57402F00205A2907FECE031
-:10049A00F45480FFC4540FFFE054072F25E024B41E
-:1004AA00F582E4347FF583E054FD907F00F0E4A305
-:1004BA00F0907FB57402F00205A2907FB4E0440187
-:1004CA00F00205A2120E4840030205A2907FE8E05E
-:1004DA0024FE601D240260030205A2907FEAE0B4B4
-:1004EA000105C2000205A2907FB4E04401F00205B2
-:1004FA00A2907FEAE07038907FECE0F45480FFC469
-:10050A00540FFFE054072F25E024B4F582E4347F2A
-:10051A00F583E4F0907FECE05480FF131313541F2B
-:10052A00FFE054072F907FD7F0E04420F0806990D5
-:10053A007FB4E04401F08060120E4A505B907FE87D
-:10054A00E024FE60182402704F907FEAE0B40104B0
-:10055A00D2008044907FB4E04401F0803B907FEA6F
-:10056A00E07020907FECE0F45480FFC4540FFFE069
-:10057A0054072F25E024B4F582E4347FF58374010F
-:10058A00F08015907FB4E04401F0800C1201005015
-:10059A0007907FB4E04401F0907FB4E04402F02277
-:1005AA00C0E0C083C082C085C084C086758600C092
-:1005BA00D0C000C001C002C003C006C007907FA51A
-:1005CA00E030E206750D06020676907FA5E020E18E
-:1005DA000CE50D64026006750D07020676AF0DEF95
-:1005EA0024FE604814602C24FE6077240460030211
-:1005FA000676AB09AA0AA90BAF0C050C8F82758384
-:10060A0000120822907FA6F0E50C6508705E750D51
-:10061A00058059907FA6E0AB09AA0AA90BAE0C8EF9
-:10062A008275830012084F750D028040E50824FE8A
-:10063A00B50C07907FA5E04420F0E50814B50C0A34
-:10064A00907FA5E04440F0E4F50D907FA6E0AB0969
-:10065A00AA0AA90BAE0C8E8275830012084F050CEC
-:10066A00800A907FA5E04440F0E4F50D5391DFD075
-:10067A0007D006D003D002D001D000D0D0D086D087
-:0A068A0084D085D082D083D0E03206
-:100694008C338D34907F95E044C0F0E4F535F53625
-:1006A400C3E5369534E53595335069EF2536F58243
-:1006B400E5353EF58374FFF0F46002C322EF25367E
-:1006C400F582E5353EF583E4F06002C322EF25367A
-:1006D400F582E5353EF58374AAF064AA6002C3226C
-:1006E400EF2536F582E5353EF5837455F0645560A3
-:1006F40002C322AD36E5362FF582E5353EF583EDAE
-:10070400F0FCAC05ED6C6002C3220536E5367002E0
-:100714000535808CE4F535F536C3E5369534E53595
-:1007240095335027EF2536F582E5353EF583E065B0
-:10073400366002C322EF2536F582E5353EF583E4C3
-:0D074400F00536E5367002053580CED32273
-:10075100C204D205C203C200C202C201120E3DD2BE
-:10076100E843D820907FAB74FFF0907FA9F0907F91
-:10077100AAF05391EF907F95E044C0F0907F93747D
-:1007810030F0120A19907FAFE04401F0907FAEE0A3
-:10079100440DF0D2AF120E352001427524007523AD
-:1007A100007522007521007F487E927D007C00ABA0
-:1007B10024AA23A922A821C31208A950DB2001D809
-:1007C1007A0079007800E5242401F524EA3523F53F
-:1007D10023E93522F522E83521F52180CA300105CA
-:1007E10012037AC20130041A120E4050131209008A
-:1007F100300007907FD6E030E7F3120D4A120E4227
-:08080100C2031208FF80D62299
-:10080900BB010689828A83E0225002E722BBFE02ED
-:09081900E32289828A83E4932220
-:10082200BB010CE58229F582E5833AF583E022508B
-:1008320006E92582F8E622BBFE06E92582F8E222D5
-:0D084200E58229F582E5833AF583E49322EF
-:10084F00F8BB010DE58229F582E5833AF583E8F0DF
-:10085F00225006E92582C8F622BBFE05E92582C88B
-:02086F00F22273
-:10087100BB0110E58229F582E5833AF583E0F5F0C5
-:10088100A3E0225009E92582F886F008E622BBFEA2
-:100891000AE92582F8E2F5F008E222E5832AF583E8
-:0808A100E993F5F0A3E99322AD
-:1008A900EB9FF5F0EA9E42F0E99D42F0E89C45F0A5
-:0108B900221C
-:0208BA008F2885
-:1008BC00E4F529752AFF752B11752C32AB2AAA2B5E
-:1008CC00A92C900001120822B4031DAF290529EFB1
-:1008DC00B52801221208097E0029FFEE3AA90775F6
-:0E08EC002AFFF52B892C80D47B007A0079003E
-:0108FA0022DB
-:0408FB0053D8EF32AD
-:0108FF0022D6
-:09090000907FD6E04480F0807481
-:10097D00438701000000000000000000000000227D
-:0C098D00787FE4F6D8FD7581390209D4AA
-:10099900020751E493A3F8E493A34003F68001F21C
-:1009A90008DFF48029E493A3F85407240CC8C3335F
-:1009B900C4540F4420C8834004F456800146F6DF2E
-:1009C900E4800B0102040810204080900DECE47EC5
-:1009D900019360BCA3FF543F30E509541FFEE49323
-:1009E900A360010ECF54C025E060A840B8E493A3EA
-:1009F900FAE493A3F8E493A3C8C582C8CAC583CA15
-:100A0900F0A3C8C582C8CAC583CADFE9DEE780BECC
-:100A1900E4907F9CF07F0AFE120D94907F96748972
-:100A2900F0907F9C74CFF07FF47E01120D94907F3B
-:100A390096E054FEF07F0A7E00120D947F057E0039
-:100A4900120D94907F96E04402F0E0547FF07F0508
-:100A59007E00120D94907F96E04440F07F057E0061
-:100A6900120D94907F96E054BFF07F327E00120DF4
-:100A790094907F96E04440F07F327E00120D9422DC
-:100A8900753201E532601B7F01120DD77F007E0EA2
-:100A99007D007C01120694E433F53270057F0F1254
-:100AA9000DD7E532601B7F02120DD77F007E807D56
-:100AB900007C80120694E433F53270057F0F120D25
-:100AC900D7E532601B7F03120DD77F007E207D4062
-:100AD9007C5B120694E433F53270057F0F120DD753
-:0E0AE900E5326005E4FF120DD7E53224FF224E
-:080AF700907FEAE0F510D32224
-:010AFF0032C4
-:100B0000020D6400020DAB00020D2F00020D7C00EF
-:100B1000020DC100020AFF00020E4C00020E4D0041
-:100B2000020E4E00020E4F00020E5000020E510047
-:100B3000020E5200020E5300020E5400020E550027
-:100B4000020E5600020E5700020E5800020E590007
-:080B5000020E5A00020E5B00C8
-:100B5800E4FE752AFF752B11752C12AB2AAA2BA956
-:100B68002C9000011208226402702DAD060EEDB51E
-:100B780007012290000212087185F028F5296228E1
-:100B8800E5286229E529622829FDE5283AA905759D
-:0E0B98002AFFF52B892C80C37B007A007900A0
-:010BA600222C
-:100BA700AB07AA06AC05E4FDE5116011EAFFAE0547
-:100BB7000DEE2410F582E4340FF583EFF0EBAE056C
-:100BC7000D74102EF582E4340FF583EBF0AF050DAD
-:100BD70074102FF582E4340FF583ECF0AF0F7A0F22
-:0D0BE7007B10120D107F0A7E00120D94226B
-:100BF4008E328F338D348A358B36E4FDF537E5112B
-:100C04006012E532FFAE050DEE2413F582E4340FD5
-:100C1400F583EFF0E533AE050D74132EF582E4345D
-:100C24000FF583E533F0AF0F7A0F7B13120D10AF7E
-:0B0C34000FAD34AB36AA35120CF122D4
-:100C3F008E328F338D348A358B36E4F537E537C3F3
-:100C4F00953450200533E533AE327002053214FF70
-:100C5F00E5362537F582E43535F583E0FD120BA730
-:050C6F00053780D922C9
-:100C7400A907E50D7025907FA5E04480F0E925E003
-:100C84004401907FA6F08D08AF03A9077509018A76
-:0D0C94000A890BE4F50C750D03D322C32271
-:100CA100A907E50D7023907FA5E04480F0E925E0D8
-:100CB100907FA6F08D08AF03A9077509018A0A89FB
-:0B0CC1000BE4F50C750D01D322C322DB
-:100CCC00907FD6E054FBF0E04408F0300604E0449A
-:100CDC0002F07FD07E07120D94907FD6E054F7F08F
-:050CEC00E04404F022C9
-:100CF100120C74E50D24FA6010146007240770F3D8
-:0F0D01007F0822E4F50D7F0722E4F50D7F06221F
-:100D1000120CA1E50D24FA6010146007240770F38B
-:0F0D20007F0822E4F50D7F0722E4F50D7F062200
-:100D2F00C0E0C083C082907FC4E4F05391EF907F06
-:0B0D3F00AB7404F0D082D083D0E0320F
-:100D4A00907FD6E030E712E04401F07F147E001273
-:0A0D5A000D94907FD6E054FEF022C5
-:100D6400C0E0C083C082D2015391EF907FAB740185
-:080D7400F0D082D083D0E03200
-:100D7C00C0E0C083C082D2035391EF907FAB740864
-:080D8C00F0D082D083D0E032E8
-:100D94008E388F39E5391539AE38700215384E6002
-:070DA40005120E0080EE2293
-:100DAB00C0E0C083C0825391EF907FAB7402F0D050
-:060DBB0082D083D0E0327B
-:100DC100C0E0C083C0825391EF907FAB7410F0D02C
-:060DD10082D083D0E03265
-:100DD700AE077F217D0174002EF582E4340FAB82CC
-:050DE700FA120D1022BC
-:100DEC00500F00C0F9A4B0999282F880988883C6FD
-:030DFC00A1868E3F
-:010DFF0000F3
-:100E00007400F58690FDA57C05A3E582458370F905
-:010E100022BF
-:0E0E1100907F00E510F0907FB57401F0D322C1
-:0E0E1F00907F00E50EF0907FB57401F0D322B5
-:080E2D00907FEAE0F50ED322EC
-:080E3500E4F50DD2E9D2AF2271
-:030E3D00D20022BE
-:020E4000D322BB
-:020E4200D322B9
-:020E4400D322B7
-:020E4600D322B5
-:020E4800D322B3
-:020E4A00D322B1
-:010E4C003273
-:010E4D003272
-:010E4E003271
-:010E4F003270
-:010E5000326F
-:010E5100326E
-:010E5200326D
-:010E5300326C
-:010E5400326B
-:010E5500326A
-:010E56003269
-:010E57003268
-:010E58003267
-:010E59003266
-:010E5A003265
-:010E5B003264
-:101100001201000100000040470510270100010204
-:10111000000109022000010103A0000904000002EF
-:10112000FF0000040705820240000007050202409C
-:10113000000004030904260341006E0063006800F8
-:101140006F007200200043006800690070007300A7
-:101150002C00200049006E0063002E00280346008A
-:10116000690072006D007700610072006500200068
-:101170004600720061006D00650057006F0072004C
-:101180006B0073002A0343006F006E006600690065
-:101190006700750072006100740069006F006E00E6
-:1011A000200053007400720069006E006700220383
-:1011B00049006E0074006500720066006100630003
-:1011C0006500200053007400720069006E00670023
-:0211D00000001D
-:00000001FF
-/*****************************************************************************
- *
- * whiteheat.h -- ConnectTech WhiteHEAT Firmware.
- *
- * Copyright (C) 2000-2002 ConnectTech Inc (http://www.connecttech.com/)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * (10/09/2002) Stuart MacDonald
- * Firmware 4.06
- *
- * (04/09/2000) gkh
- * Updated the firmware with the latest provided by ConnectTech.
- *
- * (01/16/2000) gkh
- * Fixed my intel hex processing tool, so now the firmware actually
- * matches the original file (this was causing a few problems...)
- *
- * (01/15/2000) gkh
- * Added debug loader firmware if DEBUG is #defined:
- * Port 1 LED flashes when the vend_ax program is running
- * Port 2 LED flashes when any SETUP command arrives
- * Port 3 LED flashes when any valid VENDOR request occurs
- * Port 4 LED flashes when the EXTERNAL RAM DOWNLOAD request occurs
- *
- * version 1.0 (01/09/2000) gkh
- * Original firmware from ConnectTech massaged a little to be program
- * readable.
- *
- *****************************************************************************/
-
-#define whiteheat_DATE "20000106"
diff --git a/firmware/whiteheat_loader_debug.HEX b/firmware/whiteheat_loader_debug.HEX
deleted file mode 100644
index 5633d588613e..000000000000
--- a/firmware/whiteheat_loader_debug.HEX
+++ /dev/null
@@ -1,403 +0,0 @@
-:10000000000000000302098D0000003303020E709F
-:100010000000004303020B000000004B030205B385
-:100020000000010010907FA5E05410FFC4540F445D
-:1000300050F50F13E4000110000001101033F5110A
-:10004000907FE9E0245EB407004003020300012032
-:1000500000000120107C900128F82828730201BCC0
-:100060000201BC02010001300000013010910201C8
-:100070003D02015302016F02019A907F000001408E
-:100080000000014010E511F0907FB57401F0907F01
-:10009000B4E04402F0000150000001501002037C63
-:1000A000907F92E0FFC4540F907F00F090000160B9
-:1000B00000000160107FB57401F0907FB4E044024D
-:1000C000F002037C1200017000000170100A8950D8
-:1000D00007E4907F00F08006907F00740F0001809D
-:1000E0000000018010F0907FB57401F0907FB4E0C3
-:1000F0004402F0020300019000000190107C907F08
-:10010000EAE0F50F02037C907F007407F00001A085
-:10011000000001A010907FB57401F0907FB4E0441E
-:1001200002F07FE87E0001B0000001B01003120D64
-:10013000D5D206120D0D02037C907FEAE00001C0CB
-:10014000000001C010752900F52AA3E0FEE4EE428C
-:1001500029907FEEE00001D0000001D010752B0047
-:10016000F52CA3E0FEE4EE422B907FE8E00001E0F6
-:10017000000001E01064C060030202C9E52C452BB9
-:10018000700302037C0001F0000001F010C3E52CB5
-:100190009440E52B94005008852B2D852C000200FF
-:1001A00000000200102E8006752D00752E40907FF5
-:1001B000E9E064A370000210000002101034F53171
-:1001C000F532C3E532952EE531952D505C000220C5
-:1001D0000000022010E52A2532F582E5313529F5A7
-:1001E00083E0FF740000023000000230102532F579
-:1001F00082E4347FF583EFF00532E532700002408F
-:10020000000002401002053180D0E4F531F532C320
-:10021000E532952EE5000250000002501031952D78
-:10022000501874002532F582E4347FF583000260B3
-:10023000000002601074CDF00532E5327002053125
-:1002400080DDAF2AAE000270000002701029AD2ED2
-:100250007A7F79007B00120BF4907FB5E500028075
-:1002600000000280102EF0E52E252AF52AE52D3516
-:1002700029F529C3E500029000000290102C952E6C
-:10028000F52CE52B952DF52B907F92E0FF0002A039
-:10029000000002A010C4540F752F00F530D3940055
-:1002A000E52F9400500002B0000002B0100C907FC7
-:1002B000B4E020E1030201E780F4907FB40002C0C3
-:1002C000000002C010E020E2030201E780F4907F0A
-:1002D000E8E06440600002D0000002D01003020396
-:1002E0007CE52C452B700302037CE4907F0002E048
-:1002F000000002E010C5F0907F92E0FFC4540F753B
-:100300002F00F530D30002F0000002F0109400E559
-:100310002F94005009907FC4E030E1098000030071
-:100320000000030010F7907FB4E020E3F9907FC550
-:10033000E0752D00F500031000000310102E907FD3
-:10034000E9E064A3703890206BF0F531F5000320EC
-:10035000000003201032C3E532952EE531952D5073
-:100360003474C025320003300000033010F582E4FD
-:10037000347EF583E0FFE52A2532F582E50003406F
-:100380000000034010313529F583EFF00532E532E6
-:1003900070020531800003500000035010D0AF2AD6
-:1003A000AE29AD2E7A7E79C07BC0120C800003602E
-:1003B0000000036010E52E252AF52AE52D3529F5E4
-:1003C00029C3E52C95000370000003700D2EF52C59
-:1003D000E52B952DF52B0202D4C300000000037D10
-:1003E000012200000000037E10907FE9E07003020C
-:1003F00004561470030204D22400038E0000038EFE
-:1004000010FE700302054624FB70030204501470B2
-:100410000300039E0000039E1002044A14700302AE
-:10042000043E147003020444240003AE000003AE33
-:100430001005600302059A120E7B40030205AB9083
-:100440007F0003BE000003BE10EBE024FE60161424
-:100450006040240270697411900003CE000003CE46
-:10046000107FD4F07400907FD5F00205AB907FEA46
-:10047000E00003DE000003DE10FF120B588B268A1B
-:10048000278928EA496011AE020003EE000003EE5E
-:1004900010EE907FD4F0AF01EF907FD5F00205AB66
-:1004A000900003FE000003FE107FB4E04401F00260
-:1004B00005AB907FEAE0FF120C00040E0000040E72
-:1004C000103F8B268A278928EA496011AE02EE90F8
-:1004D0007F00041E0000041E10D4F0AF01EF907FD7
-:1004E000D5F00205AB907FB4E000042E0000042E8E
-:1004F000104401F00205AB907FB4E04401F0020526
-:10050000AB00043E0000043E10120E520205AB1276
-:100510000E600205AB120AF70200044E0000044E02
-:100520001005AB1208F10205AB120E7D4003020567
-:10053000AB00045E0000045E10907FE8E0247F6062
-:10054000241460312402705BA200046E0000046E6B
-:100550001000E433FF25E0FFA202E4334F907F0058
-:10056000F000047E0000047E10E4A3F0907FB574D8
-:1005700002F00205ABE4907F0000048E0000048EC0
-:1005800010F0A3F0907FB57402F00205AB907FEC01
-:10059000E000049E0000049E10F45480FFC4540F39
-:1005A000FFE054072F25E024B40004AE000004AEA1
-:1005B00010F582E4347FF583E054FD907F00F0E491
-:1005C000A30004BE000004BE10F0907FB57402F0DA
-:1005D0000205AB907FB4E044010004CE000004CEDD
-:1005E00010F00205AB120E7F40030205AB907FE8CE
-:1005F000E00004DE000004DE1024FE601D24026022
-:10060000030205AB907FEAE0B40004EE000004EEC4
-:10061000100105C2000205AB907FB4E04401F00276
-:10062000050004FE000004FE10AB907FEAE0703885
-:10063000907FECE0F45480FFC400050E0000050E2E
-:1006400010540FFFE054072F25E024B4F582E43462
-:100650007F00051E0000051E10F583E4F0907FEC7E
-:10066000E05480FF131313541F00052E0000052EC5
-:1006700010FFE054072F907FD7F0E04420F0806E09
-:100680009000053E0000053E107FB4E04401F0807C
-:1006900065120E815060907FE800054E0000054E07
-:1006A00010E024FE601824027054907FEAE0B40148
-:1006B0000400055E0000055E10D2008049907FB402
-:1006C000E04401F08040907FEA00056E0000056E76
-:1006D00010E07020907FECE0F45480FFC4540FFFD2
-:1006E000E000057E0000057E1054072F25E024B4AD
-:1006F000F582E4347FF583740100058E0000058ED9
-:1007000010F0801A907FB4E04401F08011E4902052
-:100710006A00059E0000059E10F01201005007902F
-:100720007FB4E04401F0907FB40005AE000005AE58
-:1007300004E04402F0000000000005B201220000C5
-:10074000000005B310C0E0C083C082C085C084C073
-:1007500086758600C00005C3000005C310D0C00028
-:10076000C001C002C003C006C007907FA50005D32A
-:10077000000005D310E030E206750D0602067F90FA
-:100780007FA5E020E10005E3000005E3100CE50D86
-:1007900064026006750D0702067FAF0DEF0005F3DA
-:1007A000000005F31024FE604814602C24FE6077DE
-:1007B00024046003020006030000060310067FAB5A
-:1007C00009AA0AA90BAF0C050C8F827583000613CA
-:1007D000000006131000120785907FA6F0E50C6557
-:1007E00008705E750D000623000006231005805971
-:1007F000907FA6E0AB09AA0AA90BAE0C8E000633C7
-:100800000000063310827583001207B2750D028056
-:1008100040E50824FE0006430000064310B50C071F
-:10082000907FA5E04420F0E50814B50C0A000653BB
-:100830000000065310907FA5E04440F0E4F50D90D1
-:100840007FA6E0AB090006630000066310AA0AA9B0
-:100850000BAE0C8E827583001207B2050C00067376
-:100860000000067310800A907FA5E04440F0E4F594
-:100870000D5391DFD0000683000006831007D006D9
-:10088000D003D002D001D000D0D0D086D0000693C3
-:10089000000006930A84D085D082D083D0E0320055
-:1008A0000000069D10C204D205E4F525C203C20073
-:1008B000C202C201120006AD000006AD100E74D2D5
-:1008C000E843D820907FAB74FFF0907FA90006BD6D
-:1008D000000006BD10F0907FAAF05391EF907F9535
-:1008E000E044C0F0900006CD000006CD107F937468
-:1008F00030F0120A1975244875239275220006DD1E
-:10090000000006DD1000752100E4FFFE7E0590204A
-:10091000687401F0A30006ED000006ED10DEFC7E19
-:10092000007F05907FAFE04401F0907FAE0006FDB0
-:10093000000006FD10E0440DF0D2AF120E68300149
-:100940000AE490206900070D0000070D10F0120363
-:100950007EC20130041A120E775013120900071DCF
-:100960000000071D1000300007907FD6E030E7F34D
-:10097000120D8B120E00072D0000072D1079C203F7
-:100980007FFF7EFF7DFF7CFF782112081D00073D61
-:100990000000073D107B007A0079007800C3120840
-:1009A0000C701B752400074D0000074D104875237F
-:1009B00092F522F5216325FF902068E52500075D6B
-:1009C0000000075D0EF0A37401F0A3F0A3F012087D
-:1009D000FF809B000000076B012200000000076CF5
-:1009E00010BB010689828A83E0225002E722BBFE07
-:1009F0000200077C0000077C09E32289828A83E4E5
-:100A0000932200000000078510BB010CE58229F548
-:100A100082E5833AF583E0225000079500000795B0
-:100A20001006E92582F8E622BBFE06E92582F8E2F7
-:100A3000220007A5000007A50DE58229F582E583C0
-:100A40003AF583E493220000000007B210F8BB01DE
-:100A50000DE58229F582E5833AF583E8F00007C2C7
-:100A6000000007C210225006E92582C8F622BBFE0C
-:100A700005E92582C80007D2000007D202F2220051
-:100A8000000007D410BB0110E58229F582E5833A06
-:100A9000F583E0F5F00007E4000007E410A3E0228E
-:100AA0005009E92582F886F008E622BBFE0007F42B
-:100AB000000007F4100AE92582F8E2F5F008E222C6
-:100AC000E5832AF5830008040000080408E993F58B
-:100AD000F0A3E993220000000000080C10EB9FF542
-:100AE000F0EA9E42F0E99D42F0E89C45F000081CC7
-:100AF0000000081C012200000000081D1008080862
-:100B0000E62FFFF618E63EFEF618E63DFD00082D3E
-:100B10000000082D07F618E63CFCF6220000083419
-:100B2000048C348D350000000000083810907F954B
-:100B3000E044C0F0E4F536F537C3E53795000848E2
-:100B4000000008481035E53695345069EF2537F533
-:100B500082E5363EF500085800000858108374FFFF
-:100B6000F0F46002C322EF2537F582E5360008680D
-:100B700000000868103EF583E4F06002C322EF2510
-:100B800037F582E53600087800000878103EF583D6
-:100B900074AAF064AA6002C322EF2537F500088822
-:100BA000000008881082E5363EF5837455F06455E0
-:100BB0006002C322AD000898000008981037E5379E
-:100BC0002FF582E5363EF583EDF0FCAC050008A874
-:100BD000000008A810ED6C6002C3220537E53770ED
-:100BE000020536808C0008B8000008B810E4F5361D
-:100BF000F537C3E5379535E536953450270008C8F5
-:100C0000000008C810EF2537F582E5363EF583E091
-:100C100065376002C30008D8000008D81022EF250D
-:100C200037F582E5363EF583E4F00537E50008E860
-:100C3000000008E808377002053680CED3000000B7
-:100C4000000008F001220000000008F10E907F0073
-:100C5000E510F0907FB57401F0D32200000008FF8A
-:100C6000012200000000090009907FD6E04480F0D6
-:100C7000807400000000097D10438701000000001F
-:100C800000000000000000002200098D0000098D16
-:100C90000C787FE4F6D8FD75813A0209D400000093
-:100CA000000009991002069DE493A3F8E493A34081
-:100CB00003F68001F20009A9000009A91008DFF479
-:100CC0008029E493A3F85407240CC8C3330009B95E
-:100CD000000009B910C4540F4420C8834004F456DE
-:100CE000800146F6DF0009C9000009C910E4800B45
-:100CF0000102040810204080900E2DE47E0009D9E6
-:100D0000000009D910019360BCA3FF543F30E509EE
-:100D1000541FFEE4930009E9000009E910A36001F3
-:100D20000ECF54C025E060A840B8E493A30009F9B1
-:100D3000000009F910FAE493A3F8E493A3C8C5826C
-:100D4000C8CAC583CA000A0900000A0910F0A3C86E
-:100D5000C582C8CAC583CADFE9DEE780BE000A19BA
-:100D600000000A1910E4907F9CF07F0AFE120DD556
-:100D7000907F967489000A2900000A2910F0907F5C
-:100D80009C74CFF07FF47E01120DD5907F000A395C
-:100D900000000A391096E054FEF07F0A7E00120D22
-:100DA000D57F057E00000A4900000A4910120DD5C2
-:100DB000907F96E04402F0E0547FF07F05000A59EE
-:100DC00000000A59107E00120DD5907F96E0444035
-:100DD000F07F057E00000A6900000A6910120DD537
-:100DE000907F96E054BFF07F327E00120D000A79AA
-:100DF00000000A7910D5907F96E04440F07F327E63
-:100E000000120DD522000A8900000A8910753301ED
-:100E1000E533601B7F01120E187F007E0E000A99D9
-:100E200000000A99107D007C01120834E433F53388
-:100E300070057F0F12000AA900000AA9100E18E51C
-:100E400033601B7F02120E187F007E807D000AB97E
-:100E500000000AB910007C80120834E433F53370C6
-:100E6000057F0F120E000AC900000AC91018E533E9
-:100E7000601B7F03120E187F007E207D40000AD980
-:100E800000000AD9107C5B120834E433F533700596
-:100E90007F0F120E18000AE900000AE90DE5336021
-:100EA00005E4FF120E18E53324FF000000000AF6E7
-:100EB0000122000000000AF708907FEAE0F510D355
-:100EC0002200000000000AFF0132000000000B00B9
-:100ED00010020DA500020DEC00020D7000020DBD08
-:100EE00000000B1000000B1010020E0200020AFF9F
-:100EF00000020E8300020E8400000B2000000B2075
-:100F000010020E8500020E8600020E8700020E8877
-:100F100000000B3000000B3010020E8900020E8A18
-:100F200000020E8B00020E8C00000B4000000B40F4
-:100F300010020E8D00020E8E00020E8F00020E9027
-:100F400000000B5000000B5008020E9100020E92A0
-:100F50000000000000000B5810E4FE752BFF752CFC
-:100F600011752D12AB2BAA2CA9000B6800000B6881
-:100F7000102D9000011207856402702DAD060EED54
-:100F8000B5000B7800000B781007012290000212C8
-:100F900007D485F029F52A6229000B8800000B8808
-:100FA00010E529622AE52A622929FDE5293AA905E1
-:100FB00075000B9800000B980E2BFFF52C892D80E7
-:100FC000C37B007A0079000000000BA6012200001C
-:100FD00000000BA706AB07AA06AC050000000BAD8E
-:100FE00010E4FDE5116011EAFFAE050DEE2410F5E9
-:100FF00082000BBD00000BBD10E4340FF583EFF051
-:10100000EBAE050D74102EF582000BCD00000BCD5C
-:1010100010E4340FF583EBF0AF050D74102FF5825B
-:10102000E4000BDD00000BDD10340FF583ECF0AFB6
-:101030000F7A0F7B10120D517F000BED00000BEDAE
-:10104000060A7E00120DD50000000BF301220000FD
-:1010500000000BF40A8E338F348D358A368B3700BF
-:1010600000000BFE10E4FDF538E5116012E533FFDA
-:10107000AE050DEE24000C0E00000C0E1013F582D0
-:10108000E4340FF583EFF0E534AE050D74000C1E6B
-:1010900000000C1E10132EF582E4340FF583E534A6
-:1010A000F0AF0F7A0F000C2E00000C2E107B1312E5
-:1010B0000D51AF0FAD35AB37AA36120D32000C3ED5
-:1010C00000000C3E0122000000000C3F028F2900AE
-:1010D00000000C4110E4F52A752BFF752C11752DBD
-:1010E00032AB2BAA2C000C5100000C5110A92D90F2
-:1010F0000001120785B4031DAF2A052AEF000C6119
-:1011000000000C6110B529012212076C7E0029FF36
-:10111000EE3AA90775000C7100000C710E2BFFF55B
-:101120002C892D80D47B007A0079000000000C7F90
-:101130000122000000000C800A8E338F348D358A26
-:10114000368B370000000C8A10E4F538E538C3957B
-:101150003550200534E534AE33000C9A00000C9A6B
-:10116000107002053314FFE5372538F582E4353673
-:10117000F5000CAA00000CAA0A83E0FD120BA705DB
-:101180003880D90000000CB40122000000000CB52A
-:1011900010A907E50D7025907FA5E04480F0E925B2
-:1011A000E0000CC500000CC5104401907FA6F08D36
-:1011B00008AF03A9077509018A000CD500000CD5FA
-:1011C0000D0A890BE4F50C750D03D322C322000030
-:1011D00000000CE210A907E50D7023907FA5E04404
-:1011E00080F0E925E0000CF200000CF210907FA6E0
-:1011F000F08D08AF03A9077509018A0A89000D025D
-:1012000000000D020B0BE4F50C750D01D322C32277
-:1012100000000D0D10907FD6E054FBF0E04408F084
-:10122000300604E044000D1D00000D1D1002F07F8B
-:10123000D07E07120DD5907FD6E054F7F0000D2D2B
-:1012400000000D2D05E04404F022000000000D32E6
-:1012500010120CB5E50D24FA601014600724077015
-:10126000F3000D4200000D420F7F0822E4F50D7FD0
-:101270000722E4F50D7F062200000D5110120CE24A
-:10128000E50D24FA6010146007240770F3000D6167
-:1012900000000D610F7F0822E4F50D7F0722E4F5C1
-:1012A0000D7F062200000D7010C0E0C083C0829048
-:1012B0007FC4E4F05391EF907F000D8000000D801B
-:1012C0000BAB7404F0D082D083D0E03200000D8BE1
-:1012D00010907FD6E030E712E04401F07F147E00EA
-:1012E00012000D9B00000D9B0A0DD5907FD6E05497
-:1012F000FEF0220000000DA510C0E0C083C082D225
-:10130000015391EF907FAB7401000DB500000DB556
-:1013100008F0D082D083D0E03200000000000DBD84
-:1013200010C0E0C083C082D2035391EF907FAB74B2
-:1013300008000DCD00000DCD08F0D082D083D0E0A4
-:101340003200000000000DD5108E398F3AE53A15B5
-:101350003AAE39700215394E60000DE500000DE51A
-:101360000705120E4180EE2200000DEC10C0E0C017
-:1013700083C0825391EF907FAB7402F0D0000DFCDC
-:1013800000000DFC0682D083D0E0320000000E0287
-:1013900010C0E0C083C0825391EF907FAB7410F017
-:1013A000D0000E1200000E120682D083D0E0320070
-:1013B00000000E1810AE077F217D0174002EF5820B
-:1013C000E4340FAB82000E2800000E2805FA120D3F
-:1013D0005122000000000E2D10500F00C0F9A4B0E3
-:1013E000999282F880988883C6000E3D00000E3DD9
-:1013F00003A1868E00000E400100000000000E4197
-:10140000107400F58690FDA57C05A3E582458370E8
-:10141000F9000E5100000E510122000000000E5292
-:101420000E907F00E50EF0907FB57401F0D322009E
-:1014300000000E6008907FEAE0F50ED32200000065
-:1014400000000E6808E4F50DD2E9D2AF22000000DA
-:1014500000000E700453D8EF3200000000000E743C
-:1014600003D2002200000E7702D3220000000E7982
-:1014700002D3220000000E7B02D3220000000E7D6A
-:1014800002D3220000000E7F02D3220000000E8152
-:1014900002D3220000000E830132000000000E84FF
-:1014A0000132000000000E850132000000000E86AF
-:1014B0000132000000000E870132000000000E889B
-:1014C0000132000000000E890132000000000E8A87
-:1014D0000132000000000E8B0132000000000E8C73
-:1014E0000132000000000E8D0132000000000E8E5F
-:1014F0000132000000000E8F0132000000000E904B
-:101500000132000000000E910132000000000E9236
-:101510000132000000001100101201000100000063
-:1015200040470510270100010200111000001110B2
-:1015300010000109022000010103A00009040000BD
-:10154000020011200000112010FF00000407058296
-:101550000240000007050202400011300000113077
-:1015600010000004030904260341006E00630068B4
-:101570000000114000001140106F00720020004375
-:1015800000680069007000730000115000001150E5
-:10159000102C00200049006E0063002E0028034636
-:1015A000000011600000116010690072006D00778A
-:1015B00000610072006500200000117000001170D1
-:1015C000104600720061006D00650057006F0072E8
-:1015D0000000118000001180106B0073002A03438B
-:1015E000006F006E0066006900001190000011900D
-:1015F000106700750072006100740069006F006E72
-:10160000000011A0000011A010200053007400720F
-:101610000069006E00670022030011B0000011B0E5
-:101620001049006E0074006500720066006100637E
-:10163000000011C0000011C01065002000530074AC
-:1016400000720069006E0067000011D0000011D028
-:091650000200000000000000008F
-:00000001FF
-/*****************************************************************************
- *
- * whiteheat.h -- ConnectTech WhiteHEAT Firmware.
- *
- * Copyright (C) 2000-2002 ConnectTech Inc (http://www.connecttech.com/)
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * (10/09/2002) Stuart MacDonald
- * Firmware 4.06
- *
- * (04/09/2000) gkh
- * Updated the firmware with the latest provided by ConnectTech.
- *
- * (01/16/2000) gkh
- * Fixed my intel hex processing tool, so now the firmware actually
- * matches the original file (this was causing a few problems...)
- *
- * (01/15/2000) gkh
- * Added debug loader firmware if DEBUG is #defined:
- * Port 1 LED flashes when the vend_ax program is running
- * Port 2 LED flashes when any SETUP command arrives
- * Port 3 LED flashes when any valid VENDOR request occurs
- * Port 4 LED flashes when the EXTERNAL RAM DOWNLOAD request occurs
- *
- * version 1.0 (01/09/2000) gkh
- * Original firmware from ConnectTech massaged a little to be program
- * readable.
- *
- *****************************************************************************/
-
-#define whiteheat_DATE "20000106"
diff --git a/firmware/yam/1200.bin.ihex b/firmware/yam/1200.bin.ihex
deleted file mode 100644
index 9d34e5680e38..000000000000
--- a/firmware/yam/1200.bin.ihex
+++ /dev/null
@@ -1,342 +0,0 @@
-:10000000FFF200A5ADFFFE9FFFEFF3CBFFDBFCF29D
-:10001000FFF6FF3CBFFDBFDF6E3F6FF17DB4FDBF5C
-:10002000DF6F3F6FF70BFFDBFDF2FFF6FFFFFFFF18
-:10003000F0CFFFFFFFFEFFFFDFFFFFFFEFFFFFFF40
-:10004000FDFFFFFFFEFFFFFFFFFFF1FFFFFFFFBF11
-:10005000FFFFF7FFFFFBFFFFFFFCFFFEFFFFFFF0CF
-:100060005FFFFFFFFEFFFFFFFFFFFFFFFFFFFFFF41
-:10007000FFFFFFFFFFF7FFFFFFF1FFFFFE7FBFFF67
-:10008000FFFFFFFFFFFFFFFFF7FFFBFFFFFFF09FFB
-:10009000FFFFFFFEFFFDFFFFFFFFDFFFFFFFF7FF9B
-:1000A000FFFFFBFFFBFFFFFFF0FFFFFFFFFFFFFF77
-:1000B000F7FFFFFBFFFFFFFEFFFFFFEFFFF05FFF1C
-:1000C000FFFFFEFFFFEFFFFFFBFFFFFFFFFFFFFF55
-:1000D000FFBFFFFFDFF7FFF1FFFFFFFFFFFFFFFFA6
-:1000E000FFFFFFFFFFFBFEFFFFFFFFFFF0FFFFFF34
-:1000F000FFFEFFFFFFFFFFFFFFFFFFFFFFFFFFEB25
-:10010000FFFFFFFDFFBFF1FFFFFFFFDFFFFFFFFB73
-:10011000FFFFFFFFFFFFFFFFFFFFFFF06FFFFFFF8E
-:10012000FEFFFFFFFFFFFFFFFFFFDFFFFFFFFFFF00
-:10013000FFFFF7FFFFF1FFFFF7BFE7FFFFFFFFFB49
-:10014000FFFFFFFFFFFF77FFFFFFF0FFFFFFFFFE57
-:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF
-:10016000FFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFAD
-:10017000FFFFFFFFFFFFFFFFFFF01FFFFFFFFEDBA3
-:10018000FFFFF5A5FD4B6EEF3332DDD34AD692FE6D
-:10019000B33FBDF1FADBFEF7F696BDBDFFBDFFED47
-:1001A0007F6B7FFBDFFEFBFE90CFFFFFFFFEBEEF0E
-:1001B000FFFFDB5FF6FFF68FFDA5DDFFFFFFFF6FA3
-:1001C0007FDBF1FCBFFF6FFFEFFC5B5DDADFF4FF6D
-:1001D000F2FFFDBFFFFFFFD01FFFFFFFFEFFFFFF8E
-:1001E000FFFBEFB7FC33FFFBFF046AF33C36FFF085
-:1001F0000FF10FFFFFFFF315720FF16FFFFE943F3A
-:10020000FFFFFF7BFFFFF0FFFFFFFFFEFFFFFFF0A1
-:10021000F7EFB7FC33FFFFFF046AF33C36FFF00F44
-:10022000F10FFFFFFFF315738FF26FFFFE943FFF97
-:10023000FFFF7D9FFFF00FFFFFFFFEFFFFFFFF9E11
-:10024000FFFCEFD3FBFF7FF55FFE59FFFFFFFCF1E3
-:10025000FE7FFFFFFA17FFE7EFEFFFFF3FF1FFFF22
-:10026000FFFFFFFFF0FFFFFFFFFEF5FFBFFFFCEA10
-:10027000FFF0FFFFBFF93FB1EFFFD7FFFBFFF0FF3C
-:10028000FFF3FFDFFF7BFFFDFFF6FFBFFFFFBFFFB9
-:10029000FFFFDAF0FFFFFFFFFEF2C00100000202E5
-:1002A0000202004040401000000020000001000059
-:1002B000000000001900040400000000000000100D
-:1002C000003CF0AFFFFFFFFEFDBFFFFFFBFFFDFFA8
-:1002D000FF7FFFFFBFFFEFFFFFFDFFFFF1FFDFFF2E
-:1002E000FFFFFFFFFFBFFEFFFFFEFFFFFFFFFFDF80
-:1002F000DBF06FFFFFFFFEF0BFDFFF7FFFFFFFFFC1
-:10030000DFDFFFEFFF9EEFFFFF7FFFF1EFFFFFFF5C
-:10031000F7FABFFFFFFE47EFFFBDF6FFFFDFF5F087
-:10032000F0EFFFFFFFFEF8300000000400010208BC
-:1003300016000000800001020080010C0200000194
-:100340000000200000060020001000140004C1F08E
-:100350002FFFFFFFFEFFFFFFFFFFFFFFFBFFFF7F02
-:10036000ECFFFFFAFFBFFF6FFFE1FFFFFFFFBDFEE6
-:1003700046FFEF7FCDDFFFFFFDFFBDFF7F7FF04F2B
-:10038000FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7E
-:10039000FFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFF7B
-:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFF00FFF5C
-:1003B000FFFFFEFFFFFFFDA4BCCD6D6B6F5BDC3369
-:1003C0005AF6F7F6B33FBDC1FA5AF6F6B6F7FFBDD7
-:1003D000BB3CCECF34EF33BBCCFFFFFFF04FFFFF72
-:1003E000FFFEBFFFFFFFDBFFF6D6FFFDFDBFFFAD4A
-:1003F000BFF97F6FFCDBF1FDBFFF6FFFFFDADBFCB6
-:10040000DBFF768FF6FFCDABFEFBFFD0FFFFFFFFDC
-:10041000FEFF9FFFF420AF6D0BC17BFFFFFFCBFF03
-:100420003FF0EF7F0FF1C33CFFFFFFFFFFFFF80B33
-:100430001D6A64056B9901FFFDEFF02FFFFFFFFEC2
-:10044000FFFFFFF4002FCC0BC37FFFFFFF0ADFBFCE
-:10045000FD7FFFFFF1C3BFFFFFFFFFFFFFF04A0E6D
-:10046000966402979910FFFFFFF0DFFFFFFFFEFF8A
-:10047000FFFFFE84F9D527F17FFFF8EBDFF3CF3FD5
-:100480001FFFF711FFCFFFFE67FFFFFFFFC4FFFF56
-:10049000B3A1FFF9E0FFFFFFF0EFFFFFFFFEF5FF65
-:1004A000FFFB7FE0FFC7FE7F3FFFFD778D7F0FFFE4
-:1004B000C3FFF1BF8FCFFFFFDD7BFFF6FAF7FF40F1
-:1004C0009FF97FD8FFFFFAF01FFFFFFFFEF1C0008A
-:1004D00000030000000000000000400010000010B9
-:1004E00000010010202000001000040105000000A1
-:1004F00000404000003CF01FFFFFFFFEFDBFFFFF7C
-:10050000FFFFFE7F7FFFEFFFFFDFFFFFDFFFEFF764
-:10051000F1FFFFFFFFDFFFFFF7FFFFFFFCFDFF7FA6
-:100520007EFFFFFFDBF06FFFFFFFFEF0BBFFFFFF73
-:10053000FFFFFEEBFD6FFFF7FEF57FFFFF7FBFB113
-:10054000FFFF9FBFFBFFFEFFFEFFF7EBDFBF5FDD9F
-:10055000FFDBFDD0F06FFFFFFFFEF8302000420010
-:100560000000301804080921828002000800010000
-:1005700000000C2010001100448400202084800022
-:100580000000C1F0DFFFFFFFFEFFF7FFFBDDF9FF1B
-:10059000DAFFDCDDFCFBFFBFFB3ED796FE61F7FF19
-:1005A0007FFF3FFDFFDFCFF7DFF7BFFDFFFEEFEF80
-:1005B000FEFFF07FFFFFFFFEFFFFFFFFFFFFFFFFDC
-:1005C000FFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFF49
-:1005D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B
-:1005E000FFF02FFFFFFFFEFFFFFFF3BDFD4B74CFBA
-:1005F000735BCB3BDFFEF7FED375ACA1FBDFFEF7F1
-:100600007696B524BDA5AD492F692B525BBDFFFF82
-:10061000F0CFFFFFFFFEBFFFFFFFDBFFF6FEFFCCCB
-:10062000A7FBADFF7F6FFF6D7FDBF1FDBFFF6FFFAE
-:100630006FFFDBFFDBFFF697F6FFB5B5FFFFFFD0DF
-:10064000EFFFFFFFFEFFFFFFFDA5BC43FC7C03E7C0
-:10065000FFFF20FFFFFFCCFD7DF1FFFFFFFFD5591E
-:10066000BA56666AAD9AA99A97A5AABBFFFFF00F82
-:10067000FFFFFFFEFEFBFFFDF7FD43FFFD6BE7FF06
-:10068000FFDFFFFFFFFFFF3FF1FFFFFFFFD559B582
-:10069000A6666AAD9AA9996B5AAAFFFFB7F03FFF09
-:1006A000FFFFFEFFFFFFFE9CF7FDD241FFFFF27F41
-:1006B0008FFFFF3DF3FF17F1FFFFFFFFFF7FDFFC21
-:1006C0008F38FFEF23FFFBF7C8FFFFFFF09FFFFF0F
-:1006D000FFFEF57FFFFDFFE4FFEBFFCFBFFAFFABAF
-:1006E000EFFFFBFFF3FD61FFFFFFFFFAFFFBFD0DD7
-:1006F000FFFEFF437FFEBFD0FDFFFAF03FFFFFFF8D
-:10070000FEF3C0000000020002010060C0400000D3
-:100710000000340400010000000000000008880010
-:100720000003000040004000003CF03FFFFFFFFEE0
-:10073000FD3FFFFFFFFFFFFF7F7FBFFFFFFFFFFFCB
-:10074000FFFFFFF7F1FFFFFFFFFFF7FFFFFFFDFFD9
-:10075000FFFFFFFEFE5FFFFFCBF0DFFFFFFFFEF0BE
-:10076000FFFFFDFFEFE3DEEED9C593FFFFFEFEFFC7
-:10077000FBEEFEF1FFFFFFFFFFFDFFBFF7FFFF7F77
-:10078000AFBDDFDFFBF3F3F0F0AFFFFFFFFEF834A8
-:10079000000661001801A0051700200528200000B0
-:1007A0000500410000400009000120868208400346
-:1007B000803070081402C1F0CFFFFFFFFEFFFFFF83
-:1007C000FFFFBDEFFBFFFFFB9C7FEFDFFFBFEBDE1B
-:1007D000FFC17FFFFB7FFFFFFF5FFFFFFFDFBFEF7B
-:1007E0003FF78FEF7FFFF07FFFFFFFFEFFFFFFFF71
-:1007F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09
-:10080000F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06
-:10081000FFFFFFFFFFF03FFFFFFFFEFFFFFFFFBDFA
-:10082000DFEF7D6D2B5A5DD2DFF692B6B2B3ACA18D
-:10083000FBDFFEF1EEF5F6BC6BBD7DAF1AEF5F6B33
-:10084000C6FFFFFFF05FFFFFFFFEBFFFFFFFDBFF05
-:10085000F6FFF6B7FDADFDBFF36FFF6FFFDBD1FD18
-:10086000BFFF6FF56BBC5B3CDAEF16AF16FFCDAB8D
-:10087000FF6FFFD0FFFFFFFFFEFFFFFFFCBFFFFF8B
-:10088000FF6C0310C1F3FFF33AF3CAFFAFF1FFFFB0
-:10089000FFFFD996A665A6666A9569696A5A5AFFE6
-:1008A000FF5FF01FFFFFFFFEFFFFFFFFBFFFFFFF28
-:1008B000EA0F50C3F37FFFF3F3C3FFAFF1FFFFFF76
-:1008C000FFD996A665A6666A9569696A5A5AFFFFB6
-:1008D000FFF03FFFFFFFFEFFFFFFFFD7FFFF5FC1FE
-:1008E0003FF75EF5CE9E5F3F17FFF3E1FFFFFFFF8F
-:1008F000D8FFFAFE67FFFEBF5AFFFFAFF5FFFFFF0D
-:10090000F02FFFFFFFFEF5FFFFFDFFF7FFFD4E3D60
-:100910003FE70BBF8FF9FFEBE3FFE1FFFFFCFFC7F2
-:100920009FFF3E39E5FFCF9BF9FFFFC5FFFFFAF0C0
-:100930005FFFFFFFFEF3C00000000000000040006A
-:100940000000006000000000000100000020002006
-:10095000000110080000000000000000003CF04F03
-:10096000FFFFFFFEFDBFFFFFFFFFFFFFFEFFFFBF1B
-:100970003FFFFFBFFFFFFFFBF1FFFFFFFFF7FFF7A9
-:10098000FFEDFFFBFEFF7FFF7FDFFFFFDDF03FFF9F
-:10099000FFFFFEF0FFFFF3FFF7FFFE5FFFF7FFFF34
-:1009A000DFFFFFFFF7FE7BF1FFFDFDFFDFDFFF7DD8
-:1009B00073F9FFC37EFEFFEFD7FFCFD0F06FFFFFCD
-:1009C000FFFEF83000004004000141200004000256
-:1009D000D50900028002010000000A04000700019E
-:1009E000500180026140410C1408C1F09FFFFFFFDD
-:1009F000FEFFFFFFFEFFFFFFFEDFCB5FFEEFFFFE10
-:100A0000FF3FFF7FFDC1FFFF7FFFDFFDFCFDF7EE36
-:100A1000FFFF4EFFDFCFDBEBFFFFF01FFFFFFFFE0F
-:100A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6
-:100A3000FFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFD4
-:100A4000FFFFFFFFFFFFFFFFFFF02FFFFFFFFE7F16
-:100A5000FFFFFFFDFFFFFFFFFFFFFFFFDFFFFFFFC8
-:100A6000F7FBFFF1FFFFFFFFFFFFFFFFFFFFFFFFB0
-:100A7000FFFF7FFFFFFF7FFFF01FFFFFFFFEDDFF98
-:100A8000FFFFA5FF6F6BE96FDACAFBDDEEF7F6B289
-:100A9000B3A4A15B5BF6D7F4F77BBDBDADCFEF7F11
-:100AA0006B7F3BDFDBFFFF30CFFFFFFFFEBFFFFFB2
-:100AB000FFFFFFF6FE96FFFDB5FDBFAD7FFF6FFFA9
-:100AC000DED1ADADE9FFF1ECEFDE3FCBFFF6FF325B
-:100AD000FFC5BDFFFFFFD0BFFFFFFFFEFEFBFFF422
-:100AE00028BFFFFDFBD3FFFF42FFFFFFEAB3FCC3BC
-:100AF000C1FF33FFC0156B70FFF0F24FFFFC3E9754
-:100B00003CFFFFFDEFF0BFFFFFFFFEFFFFFFFE78A2
-:100B1000BFFFFDF3EF55FF7EFFFFFFEAB3FCC3C14C
-:100B2000FF33FFC0156FFF0FF0F00FFFFC3D6BC3ED
-:100B3000FFFFFEF7F0CFFFFFFFFEFFFFFFFFFCFF11
-:100B4000FF23F87FFF4EFFFFFFFBF917FFF6F1FFD2
-:100B5000CFEFFFFF13DFE62FC7FFFFE7C1FDFFFE6B
-:100B6000FFFFFFF04FFFFFFFFEF5FFFFFFFEAEFFB1
-:100B7000FF7F3B3FFC7FFCEFFFFCE27BFFF1FDEDE5
-:100B8000EFFFFF3573FFFFFEFAFFFFFFFEBFFFFF22
-:100B9000FFFAF08FFFFFFFFEF1C000000000000031
-:100BA000000000800000400000000C0401404000F4
-:100BB00000302804000800000001000100000000CF
-:100BC00038F00FFFFFFFFEFDBFFFFFFFFFFBFF7FC2
-:100BD000FFFF9FFFFFFFFFFFFFFFFFF1FFDFDFFFD3
-:100BE000FFFFFFEDFFFDFFFFFFFFFFBFBFFFFFC3E5
-:100BF000F03FFFFFFFFEF0BFFDFFBFFFFFFDFFFF68
-:100C0000FFFFFFFD7BFF7FFFBDFFF1EFFFFFFDDF7C
-:100C1000FDFBFFFFBFBEFFCD7FFCF7F76FBFD8F036
-:100C2000EFFFFFFFFEF830000000040000A000000E
-:100C3000C0000020340000000C810020A42000101F
-:100C400008044808004093001000381820C1F03F05
-:100C5000FFFFFFFEFFFBFFFFB9DFFEB3FFFFE7FD76
-:100C6000FFFF3BFF7FFFBFFFC1FFFCFFFF3F77FEA2
-:100C7000FECFFFBFFDBFFFFEEDF2FDF7FFF02FFF40
-:100C8000FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFF75
-:100C9000FFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFF72
-:100CA000FFFFFFFFFFFFFFFFFFFFFFFFF0BFFFFFA3
-:100CB000FFFEFFFFFFF3ADCFEF70C9733BDF5B4A71
-:100CC000F6B7FED7F5BCC133CAD6B76EF7FBBDC5C4
-:100CD00024CF6F2F4D2BBA5AFFFFFFF0AFFFFFFF5E
-:100CE000FEBFFFFFFFFFF6F6D7FFFFADBDFFFFFF23
-:100CF000EFF77FFC5BB1FDBD756FEF6AFD5BFBDB62
-:100D00003ABF8E9FFFBFFDFF6FFFD06FFFFFFFFE5B
-:100D1000FFBBFFF03FFFFFFDFB7FDEFFFF5AD6BFAB
-:100D2000D82ABFBFF1E5FFCCC0A970FFF33C3CFD62
-:100D300057FD980300C3FFFFFFF0AFFFFFFFFEFF6B
-:100D4000FFFFFF3DBFFFFDFBFFDBFFFF0FFC3FD8B9
-:100D50002ABFBFF1EFFFCCC096BEFFF33FFFFD57A8
-:100D6000FD990FFFC3FFFFFFF04FFFFFFFFEFFFFE7
-:100D7000FFF1E7FFFFF38E7BFFA8FFDF7F8E787325
-:100D8000FFF15162FFFC4BFFF3FF7ECFF9FFFDFF48
-:100D9000FF7FFFE0FFFFFFF04FFFFFFFFEF5FFFFCC
-:100DA000FBFDAEFFFCFE6F3FF8FD77AFFE37FE7B2D
-:100DB000FFB18CFFEFFDF8E7BFFFF1FE3EF7FE95B8
-:100DC0003EBFFFFFFFFAF0BFFFFFFFFEF1C00000D4
-:100DD0000104000000008002000010001000100854
-:100DE0004180100000081084000C040261000081A2
-:100DF000000000003DF07FFFFFFFFEFDBFFFFFFF93
-:100E0000FFFF7FFFFEFDBFFFFFFFFFFFFFFFFFF1C3
-:100E10007FBFF77FEFFFEFFFF7FDFFFFFD7FFFBE17
-:100E2000DFFFFFD9F0BFFFFFFFFEF0BBFF7FFBFF3F
-:100E3000FBFFBFFFF37FFBFDEB7FDFFAFFDEF0ED93
-:100E4000FFB1F7F91FB55BFE7EF7BEFD7F5FB5F71B
-:100E5000FFFFD0F04FFFFFFFFEF830010007420117
-:100E6000006A185080000002400101200101241492
-:100E700021100208070800401080580084801810D4
-:100E800040C1F0BFFFFFFFFEFFFFFFF7FFDBB7F33F
-:100E9000DF7CF874FFFF6F7D3F7EEC7FC1F5FFCFF5
-:100EA0006F9FF9DFBEE5E7FFD7F3DDFBFFFCFFBF78
-:100EB000FFF0FFFFFFFFFEFFFFFFFFFFFFFFFFFF52
-:100EC000FFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFF40
-:100ED000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22
-:100EE000F02FFFFFFFFED7FFFFFFB4CFEF776F7349
-:100EF0003A4A3ACBD4F72ED6BDBDA13BDFD6F7EEAA
-:100F0000D335BDFBBDCEEB2B4D2FBBDAFFFFFEB0C3
-:100F10005FFFFFFFFEBFFFFFFFDF5F36AF3FEDB7B5
-:100F2000F5FDF32BEF77FFFBDAB1BDA377697F4FB8
-:100F3000FFDBFA5BFFF2FEFF96FFFFFEDFFFD0AFA5
-:100F4000FFFFFFFEFFFFFFFD8FFD406F9E835A0FE7
-:100F5000FAC3FFFFFCE97FF301D000FEBFCD3FF0F5
-:100F6000EFFCC50C3FFD680BFFFFFFFEDFF0FFFF4E
-:100F7000FFFFFEFFBBFFFD85FFD46F9FC35A0FFF2E
-:100F8000FFFFFFFCE97FF301F0FBC2BFFC0037EF7E
-:100F9000FCCDBC3FFF0CBFFFFFFFFFFFF05FFFFF7B
-:100FA000FFFEFFFFFFFFD9F7D1B77E7FF1E4FDFF22
-:100FB000FBFBFF5FFF7FB1BC0F67EBB83FFFE2FFBA
-:100FC000E9FFFDE3FF3F9FC2FFFFFFF09FFFFFFF31
-:100FD000FEF57FFFF03FBCFFD5F5CE3FFEFFFE6D77
-:100FE000FFF1BF7BFFF1FDFF4FFF87FFAEFFB1F8C1
-:100FF000FEFFFF7801B9FFFFFFFAF02FFFFFFFFEB2
-:10100000F3C00000000402130200804000901000B2
-:1010100010000200012080121000400800040000AF
-:1010200002000140008000003CF0EFFFFFFFFEFDEA
-:101030001FFFFFFF7FFFFFFFFF7FFF7FF7DFF7FF50
-:10104000F7FBEBD1FFFFFFFFEFF7FFFFFBFFFEFF1B
-:10105000FF7EFFFBFFFFFFDBF0FFFFFFFFFEF0FF68
-:10106000FFB7EBF7DFFFFEF56BE7EDF73EECFF5464
-:10107000EF6FF1F5AF6FF6FDFFDD7BFFEFBF7FFF99
-:10108000FFF7FFF35FF7D0F0CFFFFFFFFEF8300070
-:1010900080400400812C0424000201C802000224C4
-:1010A0000001B442DC4402159002034839100224C6
-:1010B000A0BA000040C1F0BFFFFFFFFEFFFFFFFF2F
-:1010C000FEFCF7F0EEB65DFDF5FFDBF77F7FBEFFC0
-:1010D000C1FEBFFAFA5FFFADFFEFFF7FDF7FFEBF0C
-:1010E000B794BFFFFFF09FFFFFFFFEFFFFFFFFFF73
-:1010F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10E
-:10110000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF
-:10111000FFFFFFFFF08FFFFFFFFED7FFFFFBB5FFD5
-:10112000EF7CEB2B525B3BDAD4F33696B5BDF1FB8B
-:10113000DAEEF6FED335BDDFADCFEF7ECD6BBBDF94
-:10114000FFFFFDB0EFFFFFFFFEBFFFFFFFD35FF626
-:10115000FFF6FFFDADFDFF7FEFFF6F7FDBF1A5A386
-:101160007F6F6B4FFFDBFBCBFFF6FFF4D7FDBFFEBE
-:10117000DFFFD0CFFFFFFFFEFFFFFFF7DFFFFFFF27
-:101180003F7FFCE5FF20FEFFFFDF7FFFF17FFFFEDB
-:10119000FFF07C3D4FF3C33FFFFF6FC3FF0FFFFF27
-:1011A000AFF02FFFFFFFFEFFFFFBB7E00FFFFF2BAE
-:1011B000FF7DBFFFDFFFFFF89F7FFFF155FFFFFFC0
-:1011C000FD7C3CFFF3C33FFFFFEFC3FFDFFFFFFFEB
-:1011D000F09FFFFFFFFEFFFFFFFFEFFFFF9FBF7FBF
-:1011E000F919478EE79F3F17FFFC81C17EF3D9F9BC
-:1011F00073DFF47FFAFFFFFFFB7F77C7FFFFFFF08E
-:101200002FFFFFFFFEF5F7FFFBFFF73FFCBF3E3F61
-:10121000ECFF81AFFE4FF3BBFFF07EFF6FFF87FF58
-:10122000BBFFD5FCFF7FFC6FFFEFE7FFFFFAF03F4E
-:10123000FFFFFFFEF3C00000000000000000008080
-:101240000030106020000800012080001000040021
-:101250000000000000020080400008203CF06FFF0A
-:10126000FFFFFEF5BFFFFFFEFFFFFFFF7FFE3FFF1B
-:10127000FFFFFFFFEFFFFFF1DFDFFFFFFF7FDFFF7C
-:10128000FDBDFFFFFFFBDFFFFFFFFF5BF0FFFFFF89
-:10129000FFFEF0BFBFBFFFF7FBFFFEEEFAFFFFFF51
-:1012A0003D3BFFFFFEFBF1FFBF7BFFFFEFFFBFFFFB
-:1012B000FFFFFFFFFEFFF7EFFFFBD0F0DFFFFFFFB9
-:1012C000FEF83000000000000B10050100080002CD
-:1012D000010100001001C8080000000042020000E7
-:1012E000008002000040248000C1F03FFFFFFFFEAD
-:1012F000FFFFFFFFF7FDF7FAEFEEF9FDFFF7FEBF87
-:101300001FFD9EFDD1EFFFF77F9FFFEFFFF6FFFE72
-:10131000FE7BFFBDFF7EFFFFFFF03FFFFFFFFEFFF5
-:10132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD
-:10133000FFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFFCB
-:10134000FFFFFFFFFFFFFFFFF0AFFFFFFFFEFFFF0D
-:10135000FFF7FFFFFFFF7FFFFFFFDFFDFFFFDFFF67
-:10136000FF5FF1BFFFFFFFFFFFFFFFFFFFFFFFFF7B
-:10137000FFFFFFFFFFFFFFF0DFFFFFFFFEFFEFFFBD
-:10138000F7FFFFFFFFFFFFFFFF3FFBFFFFEFFBFD4F
-:10139000FFF1FFFFFBFFFFFFFFFFFFFFFFFFFFFF6F
-:1013A000FFFFFFFFFFFFF02FFFFFFFFEF7FFFFFF35
-:1013B000FFFFFFFFFDFFFFFFFFFFFF7FFFFFE7FFD7
-:1013C000F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B
-:1013D000FFFFFFFFFFF0FFFFFFFFFEFFFFFFFFFF2D
-:1013E000FFFFFFFFFFFFFFFFFFFFCFFFFBFFFBF153
-:1013F000FFFFFBFFFFFFFFFFFFFFFFFFFFFFFFFF01
-:10140000FFFFFFFFF02FFFFFFFFEFFFFFFFFFFFFCC
-:10141000FFFFFFFFFFFFFFFF7BFFFFFF7FFFF1FFEE
-:10142000FFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFEC
-:10143000FFFFFFF07FFFFFFFFEFFFFFFEFFFFFFF5C
-:10144000FFFFFFFFFFFFFFDF57FFFEBFFBF1FFFFC7
-:10145000FDF7FFFFFFFFFFFFFFFFFFFFFFFFFFFFA6
-:10146000D7FFF07FFFFFFFFEFFFFFFF7DBFFDBFD96
-:10147000F6FFF6FF3CBCBCBFDF6FEF2FF13CBFBCFB
-:10148000BFDF6FFF6FF7DBFFDBFDF6FFF6FFFFFF50
-:1014900001E2EFFFFFFFFEFFFFFFFFFFFFFFFFFF88
-:1014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C
-:0614B000FFFFFFFFFFFF3C
-:00000001FF
-/*
- *
- * File yam1k2b5.mcs converted to h format by mcs2h
- *
- * (C) F6FBB 1998
- *
- * Tue Aug 25 20:24:08 1998
- *
- */
diff --git a/firmware/yam/9600.bin.ihex b/firmware/yam/9600.bin.ihex
deleted file mode 100644
index 817a34be22cc..000000000000
--- a/firmware/yam/9600.bin.ihex
+++ /dev/null
@@ -1,342 +0,0 @@
-:10000000FFF200A5ADFFFE9FFFEFFBCBFFDBFEF293
-:10001000FFF6FF9CBFFDBFEF2E3F6FF1FDB4FDBFAC
-:10002000FF6FFF6FFF0BFFDBFFF2FFF6FFFFFFFF2E
-:10003000F06FFFFFFFFEFFFDDFFFFFFFF7FFFFFF9A
-:10004000FBFFFFF7FFFFFFFEFF7FF1FFFEFFBFBFDC
-:10005000FFFFFFFFFFF7FFFFFFFEFFFEFFFFFFF0C9
-:10006000EFFFFFFFFEFFFFFFFFFFFFBFFFFFFFF7F9
-:10007000FFFFF7EFFFFFFFFFFFF1FFFFFF7EFFFF37
-:10008000FFFFFFFFDFFFFFFFFFFFFDFFFFFFF0DFD1
-:10009000FFFFFFFEFFFFDFFFFFFFFFFFFFFFFFFF91
-:1000A000FFFFEFFFF3FBFEFFF1FFFDFFFFFFFFFF91
-:1000B000FFFFFFFFFFFFFFFEFFFFFFDFFFF07FFF00
-:1000C000FFFFFEFFFFEFFFFFFFFFFFFFFFFFFFFF51
-:1000D000FFFFDFFFFFFFF7F1FFFFFFDFFFFFFFFF86
-:1000E000FFFFFFFFFFFFFFFEFFFFFFFFF00FFFFF20
-:1000F000FFFEFFFFFFFFFFFFFFFFFFFFFFFF7FFF91
-:10010000FFFFFFFFFFFFF1FFFFFFFFFFFFFFFFF517
-:10011000FFFFFFFFFFFFFFFFFFFFFFF02FFFFFFFCE
-:10012000FEFFFFFFFFFFFFFBFFFFFFEFFF7FFFEF84
-:10013000FFEFFF7FEFF1FFEFFF7FFFFFFFFFFFFF0D
-:10014000FFFFFFFFFFFEFFFFFFFFF09FFFFFFFFE30
-:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF
-:10016000FFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFAD
-:10017000FFFFFFFFFFFFFFFFFFF0BFFFFFFFFEFFDF
-:10018000FFFFFFBDFFEF7FEF7FFBDFD35AFED7D628
-:10019000F77FBDF1BB5DD6F7FE96FFBDAFADBFEFFC
-:1001A0007F6B7FFBD6FEF7FF10EFFFFFFFFEBEEF7A
-:1001B000FFFFDBFFF6FFF6FFFDBFFDBFFF7FFF7F09
-:1001C000DFDBF1FD35FF6FFF6FFFDBFFCBFFF6FFDE
-:1001D000F2FDFDBFFFFFFFD0EFFFFFFFFEFFFFFFC0
-:1001E000FFFFFFFFFFFFFFFFFFFF55FFCCC03FFFFB
-:1001F000FFF124F0FFFFCFEF3FFFF0FFFFFFFC3FD9
-:10020000FFFFFFFFFFFFF0CFFFFFFFFEFFFFFFFF3E
-:10021000FFFFFFFFFFFFFFFFFF55FFCCC03FFFFFCA
-:10022000F100F0FFFFCFDFFFFFF0FFFFFFFC3FFF1C
-:10023000FFFF7DFFFFF0FFFFFFFFFEFFFFFFFFFF60
-:10024000FFFFFFFFFFFFFFFFDFFE7FDFFFFFFFF18D
-:10025000FFCFFFF3FF97FFFF8FE7FFFFFC71FFFF6B
-:10026000FFFFFFFFF0EFFFFFFFFEF5FFBFFFFFFF08
-:10027000FFFFFFFFFFFFE3F7EFFFFFFC7BFFF13F17
-:10028000FFEFFFCFE3E3FFFFFFFF3FFFFFFFBFFFF6
-:10029000BFFFDAF07FFFFFFFFEF2C00000000000AA
-:1002A000000000000000000000000000000100004D
-:1002B000000000000000000100000200000000003B
-:1002C000013CF0AFFFFFFFFEFDBFFFFFFFFFFFFFA1
-:1002D000FFFFFFFFFFDBFFFFFFFFFFFFF1FF9FFFC0
-:1002E000FFFFF7FFEFFFFFFFFFFFFFFFFFFFFFFF36
-:1002F000DBF07FFFFFFFFEF0BBDFFFFFFFFFFFFF35
-:10030000FFFFFFFFFFFFFFEFFBDFBFF1FEFDF7FF8A
-:10031000FFFFFFFFFEFFFFFFFFFFFFFFFF77FDF285
-:10032000F01FFFFFFFFEF838000000000000000390
-:100330000000000200900000000C010000042400F6
-:100340004001000000400000000002000001C0F079
-:100350004FFFFFFFFEFFFFFFFFFFFFFFFFFFFFFF5E
-:10036000FFFFBFFFFF6FFFDFFFD1FFFEFFFFFFFFBC
-:10037000FFFFDFFFFBFFFBEFFFFFEEFFFF7FF0DF85
-:10038000FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7E
-:10039000FFFFFFFFFFFFFFFFF1FFFFFFFFFFFFFF7B
-:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFF08FFFDC
-:1003B000FFFFFEFFFFFFF5ADFF692AED6BFBDF3AA4
-:1003C000DCF496EEB33D35C1BBDDFEF6FED6B5AD31
-:1003D000BFA5AD492F4F2BDA5FFFFFFFF02FFFFFC7
-:1003E000FFFEBFFFFFFB5BF7F6FFF6FFFDBFFDA5BE
-:1003F000F36FF36EFA7BD1FDB5776FE96FFFDBFB2F
-:10040000DBDFF6FFF6FFFD3FFEF7FFD04FFFFFFFFC
-:10041000FEFF9FFFFF0FFFC03F9C03FFFF8BA5FE6A
-:10042000803EC2BFACB124FFFFFFFFFFFF0FFFA361
-:10043000FFFD6BFFFFF0A5FFFFFFF0AFFFFFFFFE2B
-:10044000FFFFFFFF0FFFC03FD46BFFFFDBFFFE8608
-:10045000BFC2BF30A124FFFFFFFFCCFF0FFFA3FFF0
-:10046000056BFFFFF0A5FFFFFFF07FFFFFFFFEFF23
-:10047000FFFFFBC7FFC4FFFF7FFFECFE7FDFD8B9A4
-:1004800047FC36C1DFFFFFF9FFF3FFF7FFFCFFFD7D
-:100490003FFFFFFF3FFFFFFFF07FFFFFFFFEF5FF86
-:1004A000FFFFFFFEFFFF7EBD3FFF2BFE2FF5A3FCEE
-:1004B0005BFE619F7FEFFFFFA7FBFFFFFAFEFF33AD
-:1004C000F1FFBFFFFFFFFAF07FFFFFFFFEF1C0006B
-:1004D0000000000000000000000000400030240484
-:1004E000000100804000080000000201010002003D
-:1004F00000000000013DF02FFFFFFFFEFDBDFFFDEE
-:10050000FFFFFFFFFFFBFFFF7FF6EFBFF7FF73EB80
-:10051000F1FFFFFFDFFFFFFFFFFFF9FFFDFEFFFF22
-:10052000FFFFFFFFD9F0DFFFFFFFFEF0BF7FFFFF00
-:10053000FF7FFFFFDEFFFFEFDDDE77F2FBEDE7F190
-:1005400073FDFDDFFF7DBEDFFFFBFFEFFFEFFFFF72
-:10055000FFFFFFD0F0BFFFFFFFFEF83020020022B8
-:1005600040C0000000080002410212002187810003
-:100570000080040B2801B000820040000000000051
-:100580000000C1F0DFFFFFFFFEFFFFFFFFFFFDFFE9
-:10059000F7FFFE7FED79FFDEEB7F74F7F7E1F9FF00
-:1005A000F65F7FFFFFFFD7DBEFFFBBFFFFFFCCFF57
-:1005B000FFFFF0CFFFFFFFFEFFFFFFFFFFFFFFFF8B
-:1005C000FFFFFFFFFFFFFFFFFFFFFFFFF1FFFFFF49
-:1005D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2B
-:1005E000FFF00FFFFFFFFEFFFFFFFD3DCD497F6FD7
-:1005F0002BBA5CD2DAF6F33EF7FFBDF1FADFFEF775
-:10060000CCF6BBA5B3ADBF6F7D6F6BDBDFBDFFFE6F
-:10061000B05FFFFFFFFEBFFFFFFBDB57F6FE9FD57E
-:10062000B7FFAFE53FFFFF6FFFDBF1FDBFFF6F6976
-:100630006CDFDADFCBFFF6FF76FDFDBFFFFFFFD0FB
-:100640003FFFFFFFFEFFFFFFFFFDBD0803894F5A7D
-:100650000FF0FFF8BFFFFFFFFFF15AFFFFFFFFF3AF
-:10066000FAA0F0F2BFFFFFFFFFFFFFFFFFFFF0FF69
-:10067000FFFFFFFEFFFFFFFFFCFD006BFFFF5A0FB8
-:10068000F0FFFFFFFFFFFFFFF15AFFFFFFFFB3F592
-:1006900050F0F0FFFFFFD7FFFFFFFFFFFFF07FFFEE
-:1006A000FFFFFEFFFFFFFDBCFFE4E771FFF9C4F4AD
-:1006B0007F7FCFFFFFFFFFF1FFFFFFFBF773BF144B
-:1006C000FFE6FFFFE17DFFFFE7FFFFFFF03FFFFFDA
-:1006D000FFFEF5FFFFFED2FAFFC4F45CBFFAFFFF96
-:1006E000EC7EBFFFFFFFF1FFFFEFFFFF6BDBFFDFE4
-:1006F000F9FBBFFFF1FFBFFFFFFFFBF0BFFFFFFFF5
-:10070000FEF3C00002000000008200000000800034
-:10071000000000400001000000010820000000006F
-:100720000100010000800200013CF05FFFFFFFFEBE
-:10073000FDBFFFFFFFDFFFFFFFFF7FFFDFFFEFFFDB
-:10074000FFFFFFFFF1FFFFFFFFFFF7FFFBFFFDFFD5
-:10075000FFFFFFFFFFFDFFFFC3F0AFFFFFFFFEF056
-:10076000FFDFFFFFF723FFFFFDFFEFFFFE7F7DF7BA
-:10077000FEFF7F71FFFB7FFFFFFF6EFDF7FDFFBFF9
-:10078000FFBFF9FDFFDFEFF0F0AFFFFFFFFEF83036
-:10079000400100830000000C060804262600000625
-:1007A0000300010000000004007008800020012008
-:1007B000000200300000C1F05FFFFFFFFEFFFFFFFF
-:1007C000FFFF7B3FF7FFD7FEFEFBFE3BFEBDFF2F8B
-:1007D000FF71FFFB7FE7FFF9EFFFD7FAFFB7BBFE23
-:1007E000FFFF74FFF7FFF0CFFFFFFFFEFFFFFFFFEC
-:1007F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF09
-:10080000F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF06
-:10081000FFFFFFFFFFF08FFFFFFFFEFFFFFFFFB5B2
-:10082000BD6F7CEB7FFBDBD34BEED6F6B7FDACA107
-:10083000FBDFFEF7F496BDB4C5A5AF6F694F7FBA75
-:10084000DBFFFFFFF03FFFFFFFFEBFFFFFFFDBFF10
-:10085000F6FFF6FFBDBFA5BFFF7D7FEFFFFBF1FDFC
-:10086000BFFF6FFF6B7ADBFFDBDFF6FEB6FDFDBF80
-:10087000FEF7FFD0EFFFFFFFFEFFFFFFFFF42FFFAC
-:10088000FC436BFFFFFF0DFFFC333FF05FF1FFFF09
-:10089000FFFFF9DEF04CFE77AFFFFFEFFFF0FFDB6D
-:1008A000FF5FF0EFFFFFFFFEFFFEF7FFF02FFFFD02
-:1008B000437FFFFFF10FFFFC333FFFAFF1FFFFFF6F
-:1008C000FFF6D7FFBCFDBDFFFFFFFFFFF0FFFFFFFF
-:1008D000FFF0EFFFFFFFFEFFFFFFFFFCFFFFFBF15D
-:1008E000BFFFF9FDCFF270FF1F9FF3F1FFFFFFFF86
-:1008F000FCF7FF139FFCFFFF84F7FFFF47FFFFFF9D
-:10090000F0BFFFFFFFFEF5FFFFFFF1FCFFFEFE79EA
-:100910003FFF1D46CFFFCFFC7BFFF1FFFFFFFFED49
-:10092000F3ABFFCBFFF8FFFCF5FFBFFFFFFFFAF0D3
-:100930008FFFFFFFFEF3C200000000000000010077
-:10094000000020002000000408010000000000203A
-:100950000C0000040100010000800000013CF07F59
-:10096000FFFFFFFEFDBFFFFFFDFEFFFFFFFFFEFFDE
-:10097000DFFFFFF7FFFFFFEFF1FFFFFFFFFFFFEBE1
-:10098000FFDFFFFFFBF77FFFFEFFFFBFDBF0FFFF97
-:10099000FFFFFEF0FFFFFFFFFFDFFFFFFF7FF7FF1F
-:1009A000BFBFCFFFFFFF3EF17FFFFFEFFFFFFFFE67
-:1009B000FFFDFFBFBDFEFFFBF7DFFBD0F09FFFFF9A
-:1009C000FFFEF8302000400180C030000020001001
-:1009D00050882000001301000000000000100000FB
-:1009E00000000180080000A00010C1F0EFFFFFFF31
-:1009F000FEFDEF7FFFFFBFFFF7FFEFFBFD77EFBFD0
-:100A0000F77FFFFFBFD17FFFFFF7FFFFFFFFAFFFC4
-:100A1000DFF7FBFFFDFFFCFFFDFFF0FFFFFFFFFE29
-:100A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD6
-:100A3000FFFFFFFFF1FFFFFFFFFFFFFFFFFFFFFFD4
-:100A4000FFFFFFFFFFFFFFFFFFF05FFFFFFFFEFF66
-:100A5000FFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFC6
-:100A6000FFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFFA4
-:100A7000FFFFFFFFFFFFFFFFE03FFFFFFFFEDDFF88
-:100A8000FFFFA5FD6F7D6D7F52DF5A4BEEB6EEF294
-:100A9000BBACA15B4DD6F7FEB2BD35B5B5DD6F7F02
-:100AA000E95F52DFBDFFFFF0DFFFFFFFFEBFFFFF8B
-:100AB000FFDBFEF6FFF6FFFDBFFDB5BFF97F6FFF61
-:100AC000DBF1FDBFFF6FFF697FDBFFD3FFF6FEF2B7
-:100AD000FFADBFFFFFFFD0DFFFFFFFFEFFFFFFF512
-:100AE000300FFFFFFD6BCAFFF00FD6BFCF3FFFFFF8
-:100AF000F1FFFFFFCAFEBFFFF005AF0FFFFCF0CF15
-:100B0000F0FFFFFFFFF0EFFFFFFFFEFFFFFFF530FD
-:100B10000FFFFFFC3FCAFF0F0FD6BFFFFFF55FF1CE
-:100B2000FF8BFFC3FFFFFFFFFFFF0FFFFCF0CFF0C6
-:100B3000FFFFFFFFF03FFFFFFFFEFFFFFFFFCFFFC5
-:100B4000FFBF9F3FFEFCFF4FFFFFFFFFFFF7F1FFDF
-:100B5000DFFE7E3F9FF4FC7FFCFFFF3FFF3FFE3F39
-:100B6000FFFFFFF04FFFFFFFFEF5FFFFFBFFFEFF64
-:100B7000FFFFFFBFFBFFF8EDFF8FFFBBFFB1F3EF00
-:100B80008FF7FFFFDBFFFFFFEFBFFD79BFBFFFFF69
-:100B9000FFFBF0DFFFFFFFFEF3C0000000040000DA
-:100BA000000000000000008000040808010100901F
-:100BB000000000040008000000000800040000011C
-:100BC0003CF0DFFFFFFFFEFDBFFFFFFFFFFFFFFF6A
-:100BD000FFFFFFFF9FFFAFDFFFFFFFF1FFFFFFFF03
-:100BE000BFEFFFFFFFEDFFFFFFEFFFBFFFFFFFC303
-:100BF000F03FFFFFFFFEF0FFFDFFFFFFFBFFBBFF2E
-:100C0000FFFF7FF6FF7FFBFDEDFFF1FFFE7FFFFFA4
-:100C1000FF5FFFF7FF7EFFFDFFEFFFFFFFEFF0F04D
-:100C20008FFFFFFFFEF83080000400004002000349
-:100C300000050420000001D0008100200404000011
-:100C4000810408801000C0000000200008C1F06F7F
-:100C5000FFFFFFFEFFFF7FFFFFFFFFF3FDFFEDFC48
-:100C6000FFFF9FFBFDFFFFFFF1FFFF7FFB3EFF9FAD
-:100C7000FFFFFFFFFDF9FFFFFFFDFFFFFFF06FFF2D
-:100C8000FFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFF75
-:100C9000FFFFFFFFFFFFFFF1FFFFFFFFFFFFFFFF72
-:100CA000FFFFFFFFFFFFFFFFFFFFFFFFF0CFFFFF93
-:100CB000FFFEFFFFFFFDBDFFEF7CEB7FFBDBFADC00
-:100CC000EEF7F6D7F52DA1BBDDEEF754F7FB2CB50B
-:100CD000B4BD6B6FEF6FBBDFFFFFFFF01FFFFFFFC8
-:100CE000FEBFFFFFFFFBFFF6FFF6FFFDBFFFBFEFFD
-:100CF0006FFF6FFADBF1C5BDF56FFF6FCADBFFDB7E
-:100D0000FBF697F6FFFDBFFEF7FFD09FFFFFFFFE4C
-:100D1000FFFFFFFFFFFFFFFF8B7FFFFFE763FFFF8B
-:100D2000FFFC77DFF1DBFFD6A83FFFFF082FF0FFC6
-:100D3000C3FFEBFFFFFFFFFF5FF0EFFFFFFFFEFFD3
-:100D4000FFFFFFFFFFFFFF8BFFFFFFFFFFFFFFFF27
-:100D5000FCFFCFF1DBFFD6A83FFFFF082FF0FFC35A
-:100D6000FFEBFFFFFFFFFFFFF05FFFFFFFFEFFFF57
-:100D7000FFFFFFFFFFFFF5BFFFCAFF9FFFFAB9E7C5
-:100D80009FF381FFFFFC73D7FFFF77FFFDFFFCFFA1
-:100D9000FFFFFFCFFFFFFFF01FFFFFFFFEF5FFFF8D
-:100DA000FFF7DEFFFE7EFFBFFFBFF1B3FFFFE3FBF8
-:100DB000FFE11F7FFFF878FFFB1EFFF7FEE7FFFF55
-:100DC000FFBFFFFFFFFAF04FFFFFFFFEF3C0000081
-:100DD00000000000000000000000500000000400BF
-:100DE00001804040200000080000000003000000D7
-:100DF000800000013CF0AFFFFFFFFEFDBFFFFBFFE7
-:100E0000FFFFFFFFFFFEFFFFFFFFFFFFFFEFF7F119
-:100E1000FDFFFFFFDFFFEFFFFFFFFFFFFFFF7FFF94
-:100E2000FFFFFFDBF08FFFFFFFFEF0FFDFFFFF7F25
-:100E3000FFFFFFBED7FFEDBD7EBFFEF67FBF71FF98
-:100E4000FFDAFFF9FFBF7FFEFF6F7FFFFFFFFFFFAE
-:100E50007FFFD0F0CFFFFFFFFEF830420000000020
-:100E600080C100009000C400001220432281840051
-:100E700000140001000880000200020004020000CB
-:100E800010C1F01FFFFFFFFEFFFFFDFFFFDDFEFFB4
-:100E9000B676E5BCF9F7AF5FBFFCDFCFF1FFEF79C6
-:100EA000FFBDFFEFFFFFF76F5FFFFFFDEFEFBFFF3E
-:100EB000FFF09FFFFFFFFEFFFFFFFFFFFFFFFFFFB2
-:100EC000FFFFFFFFFFFFFFFFFFFFFFF1FFFFFFFF40
-:100ED000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF22
-:100EE000F0FFFFFFFFFEDBFFFFFD2DFF692AEF771D
-:100EF000BBDD5ADFF6F6D6F77DBDD1B24AD6B2BE1B
-:100F000097F5BDB3ADFFEF7F696BFBDFFFFFFFF030
-:100F10002FFFFFFFFEBFFFFFFFDBFFF6FE9FD4BFEB
-:100F2000EDAFFF6B6FF7FFDDDB31FDBFFF6F7FFFC5
-:100F3000FFDBFFCBDFF6FFF6FFFDBFFEF7FFD08F35
-:100F4000FFFFFFFEFFFFFFFD1FFF462F9FFFFFFF7D
-:100F5000A5FFFFFFDFB7FFFFF1FFFFFFF7E96ABF64
-:100F6000FFFFFDFFFFFD5557FFFFFFFFAFF04FFFF6
-:100F7000FFFFFEFEDFFFFD1FFF462F9FFFFFFFA5C8
-:100F8000FFFFFFC037FFFFF1998EDC7FE96ABFFFEB
-:100F9000F00FFFFFFD5557FFFFFFFFFFF00FFFFFB3
-:100FA000FFFEFFFFFFFF07FFC0BEFFFFCFEF9FFF6A
-:100FB000FFFBFFE7FFFFA1E3CE3C583FF3FFFDEF50
-:100FC000F9FFFFF7F17FFFCBFFFFFFF02FFFFFFFE0
-:100FD000FEF57FFFF0FFFEFFC475E7B9FFFFFFEFEF
-:100FE000FFC7373BFFF0139E0FF4FFFEFBFFFFF937
-:100FF000FCFFFFFFFFBFFFFFFFFAF0EFFFFFFFFE69
-:10100000F3C0010000020002220000C040004000C6
-:101010000408040A0101102020000004080804004C
-:1010200000000000010000013CF0CFFFFFFFFEFDCB
-:101030003FFFFFFFFFFFFF7FFF7FFF7FFFCF9DFF92
-:10104000FFF7FDF1FFFFFFEEBFFFFFFFFFFEFFFF1A
-:10105000FFFFFFFFFFFFFFDBF06FFFFFFFFEF0FF73
-:10106000FFFFF7F7FFFFFEBFF7FFFF5BFFBFF7FFD5
-:10107000FD7F71FDFFEDF7FEEFFFFF7FFFFFFFFF3D
-:10108000FFFFEFFF7FFFD0F0FFFFFFFFFEF8301103
-:10109000004860408260246000CC008004010000B1
-:1010A00014010C0400300000000808000100C20018
-:1010B0000002008000C1F05FFFFFFFFEFFFFFFFFA7
-:1010C000F77BFFF3EBBFFFF7FFFFFFE75D3FFFF6A7
-:1010D000D1FDFFEBF73DFFFFFF5FFF7F7FF3FFFFDA
-:1010E000EFFDBFFFFFF05FFFFFFFFEFFFFFFFFFF12
-:1010F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10E
-:10110000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF
-:10111000FFFFFFFFF0DFFFFFFFFEFFFFFFF5B5DF83
-:101120006F7D697FFBDF525FF6F7FEF6F3BDB1DA44
-:10113000CDFEF6EED2BDA5AFBDFF6F7CEB2BFADA8C
-:10114000FFFEDFF04FFFFFFFFEBFFFFFFFDBFFF6FD
-:10115000FFF6FFBDBFCDBFEB6FF76FDFDB51FDBD0E
-:10116000FF6FFF6FFB5BFFDBFFF6FEF6FDFDBFFED3
-:10117000F7FFD0FFFFFFFFFEFFFFFFFA50FFFFFF6B
-:10118000F06FFFFFF096FFFFC62BFFFFF1FCFFFFA4
-:10119000F7DBC3FF00FFFFFFFFFFC14FC3FFFFFFF0
-:1011A000AFF09FFFFFFFFEFFFFFFF5A0FFFFFFF087
-:1011B0006FFFFFF096FFFFC62BFFFFF15AFFFFFF07
-:1011C000F3C3FF00FFFFFFFFFFC14FC3FFFFFFFFA0
-:1011D000F0CFFFFFFFFEFFFFFFFFFCFFFF9FF07F51
-:1011E000FFF9FC4FF3FF27EBFFFC81FC7FFE7BFF49
-:1011F000F7FF127FFFFFFFFF18FFFFFFFFFFFFF06A
-:101200007FFFFFFFFEF5FFFFFFDFFEFFFC7E7FBFDE
-:10121000FFFFAFEFFFDFDFFBFFF1C3FE6FF1CF3F5B
-:10122000FBFFFFCFFEFFFFFE7FBFFFFFBFFAF0DF38
-:10123000FFFFFFFEF3C000000100000000010000FE
-:10124000200001001000000001000200000000006A
-:101250000000000200008000028000023CF02FFF2E
-:10126000FFFFFEFDBFFFFBFDFFFFFFFFFFFFFFFFD7
-:10127000FFFFFFFFFFFFF5F1FF7FFFFFFFFFEFFF26
-:10128000FFFFFFFFFEFFFFFFFFFFFFDBF02FFFFF72
-:10129000FFFEF0FFFFFFFBFFBFFFFFFFFFF7BFFBFE
-:1012A000FFFFFFDFF7FFF1F7BFFBFFFFFF7FDEFF71
-:1012B000FFFFFFFFFFEDF7FFFF7FD0F03FFFFFFFD6
-:1012C000FEF830000000004000000000E000008058
-:1012D0002001019200010100E01C6020300808009C
-:1012E000000000000000008000C1F06FFFFFFFFE63
-:1012F000FFFFFFFFFFDBFEFFFFDFFFFC7FFBBFFF0A
-:10130000FFFFFFFFF1F6FFF77E3FFF7FFFFFFFF7D5
-:10131000FFFFFFEDFFDFFFB7FFF03FFFFFFFFEFF27
-:10132000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD
-:10133000FFFFFFF1FFFFFFFFFFFFFFFFFFFFFFFFCB
-:10134000FFFFFFFFFFFFFFFFF0FFFFFFFFFEFFFFBD
-:10135000FFFFFFFFDFFFFFFFDFFFFFFFFFBFFFDF3D
-:1013600057EFF1FDFE7FFFFFFFFFFFFFFFDFFBFFFA
-:10137000FFFFFFFFFFFFFFF07FFFFFFFFEFFFFFF0D
-:10138000FFFFFF7FFFFFFFFFFFFFFFFFFBFFDFFF11
-:10139000FFF1FDFF7FBFFFFFFFFFFFFFFFFFFFFF2D
-:1013A000FFFEFFFFFFFFF09FFFFFFFFEF7FDFFFFC8
-:1013B000FFFFFFFFFFFFFFFFFFFFBFFFFFFFFFFF7D
-:1013C000F1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3B
-:1013D000FFFFFFFFFFF06FFFFFFFFEFFFFFFFFFFBD
-:1013E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF11B
-:1013F000FFFFFDFFFFFFFFFFFFFFFFFFFFFFFFFFFF
-:10140000FFFFFFFFF0CFFFFFFFFEFFFFFFFFFFFF2C
-:10141000FFFBFFFFFFFEFFFFFB6FFFFEBFFFF1FFC4
-:10142000F7FFFF7FFFFFFFFFFFFFFFFFFFFFFFFD56
-:10143000FFFFFFF0EFFFFFFFFEFFFFFFFFFFFFFFDC
-:10144000FBFFFFFFFEFFFFFF57FFFDBFFFF1FFEFB9
-:10145000FEFFBFFFFFFFFFFFFFFFFFFFFFFFFEFFDE
-:10146000DEFFF0CFFFFFFFFEFFFFFFF7DBFFDBFD3F
-:10147000F6FFF6FF3CBCBCBFDF6FE72FF13CBFFDC2
-:10148000BFDF6FFF6FF7DBFFDBFDF6FFF6FFFFFF50
-:101490000201DFFFFFFFFEFFFFFFFFFFFFFFFFFF78
-:1014A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4C
-:0614B000FFFFFFFFFFFF3C
-:00000001FF
-/*
- *
- * File yam111.mcs converted to h format by mcs2h
- *
- * (C) F6FBB 1998
- *
- * Tue Aug 25 20:23:03 1998
- *
- */
diff --git a/firmware/yamaha/ds1_ctrl.fw.ihex b/firmware/yamaha/ds1_ctrl.fw.ihex
deleted file mode 100644
index aa9b1d7dcb0b..000000000000
--- a/firmware/yamaha/ds1_ctrl.fw.ihex
+++ /dev/null
@@ -1,769 +0,0 @@
-:10000000070000000700240007000C0007001C0088
-:1000100007000600020070002000000040000300FE
-:100020000471000086420000400003000D0F000034
-:10003000100800003A042000820200000D020000B7
-:10004000100800003A04200082120000820E2000F6
-:10005000821A00000D2D0300100800003A04100061
-:100060008DD30200100800003A0418000D010000B2
-:1000700015000200FD000000200000006088030061
-:100080006090030060800300408003004080030014
-:1000900040800300408001007D0A00004080030092
-:1000A000408003004080010002042000820800001C
-:1000B0001A0008000409000086590100070000002A
-:1000C000070026000700000007000000068A010064
-:1000D000070000008D0C0300100800003A0418000F
-:1000E000070026007D080000428001000A1600007B
-:1000F00006A20400070000008D2100001008000087
-:100100003A04080006C2210007000000FD070000B5
-:10011000428001000A0008000409000086930200E2
-:1001200095010000040D09000700000020080000F0
-:10013000F50000007D0B000060F00100FD000000F4
-:1001400006220300408001007D0A00004280030077
-:100150004A8013000A001800201800006090050073
-:100160006088050040800100FD0000004280010021
-:100170000A007000150100004411070086230300E7
-:100180000000030020700000064A030040800100C8
-:100190008D340000100800003A04080006EA21002F
-:1001A000070000008DD30200100800003A04180078
-:1001B0000682010007000000070024008D0F0000E8
-:1001C000100800003A16000002240000025C000043
-:1001D000FD28000020000000408001000D00080004
-:1001E0001508000084095100070000004D000000C0
-:1001F0005D0E0000020E00008D410000100800009E
-:100200003A040800068A2C00070000008D00000058
-:1002100024090000020F00008D45000010080000B6
-:100220003A040800068A2C00070000007D38000010
-:10023000428001000A000800151000008409010036
-:10024000868301000700000006AA010007000000E5
-:10025000FD080000428001000A0018000419000097
-:100260008680210007002800101800003A042800AA
-:10027000020C28000D000000100800003A142800AD
-:100280008D80080020080000FD0200004080010071
-:10029000070020000D02000004991800070000006C
-:1002A0002D400000BD000000FD0200004280010062
-:1002B0000A00080004090000865A05000700000033
-:1002C00000010000200A00007D04000040800100C1
-:1002D000428001000A002000153000004421010086
-:1002E000864903000700000004210000864903003E
-:1002F000070000008D0F0000100800003A0C2800D5
-:100300004439020086C906000700000010180000EA
-:100310003A0428000D81080020080000FD020000BA
-:100320004080010007002000102800003A007800FB
-:100330008D680000100800003A040800068A2800B2
-:10034000070000000D40000015100000049918007F
-:1003500004292900043939000700000006020600BC
-:1003600007000000F50400007D00000020000000F0
-:100370008D00000060080100408001007D04000045
-:10038000428003004A8021000A001800441902003C
-:1003900086582100070000007540000004F171003C
-:1003A00007000000420001000A00280004290000A4
-:1003B00086202100070000000D3C000004A9300049
-:1003C000070000007D070000428001000A000800CD
-:1003D0000409000086DA07007D05000020280000DF
-:1003E00060B0030006F207004080010020300000EA
-:1003F00060A8030040800100FD020000428001006F
-:100400000A0008000409000086FA0700070000003F
-:100410007D050000428001000A0428008D0E0000C6
-:10042000100800003A0C28000D0000001008000021
-:100430003A1428000D00090020080000FD02000009
-:100440004080010007002000FD3D0000200000006A
-:10045000408001007D1000008D8D0000100800001C
-:100460003A040800068A280007000000150800006A
-:100470001A00080084090100865109007D1300005C
-:1004800000052000200F2800608F3300608F3B00A4
-:10049000608F4300608F4B00608F5300608F5B0064
-:1004A000608A030040800100BD7F0000C43D380029
-:1004B000070000007D1A0000751300004280010053
-:1004C0004A0009000A001000048D0B000495130077
-:1004D00007000000200800006090010004110000E7
-:1004E0008620210040000100FD170000428001002D
-:1004F0000A0008000409000086222100070000000D
-:100500007D190000428003004A8009000A001000A3
-:100510002409000064160000FD1100004280030061
-:100520004A802B004A8019008D0000004489210078
-:10053000070000004422000086E10A0007000000D6
-:10054000641A0000242A00007D190000020108003E
-:10055000220110002008000060900300408001008C
-:10056000FD3D00008D0000002008000040800100DB
-:10057000751300007D1A0000420001004A80090046
-:100580000A0010001D020000E4890100E492290025
-:1005900044913000070000000D060000150A00001D
-:1005A0001D0C000025100000E4A90000E42B010050
-:1005B00064040000E4B30100E432020064040000BB
-:1005C0006404000064040000640400000D040000E2
-:1005D000C4B108000700000020080000F50B00006F
-:1005E000400003007D190000428003004A8009009A
-:1005F000240A00000A000800640E0800070000003A
-:1006000022011000200800006010030040000100DB
-:10061000AC6400007D02000020000000408001006A
-:100620007D10000042800100FD1100004A803B0067
-:100630004A8009000A0020009500000044111A00B9
-:1006400044A1000086200D000D04000084B90000C4
-:1006500086210D00FD18000042800100FD10000001
-:100660004A8009000A0028009500000024090100C2
-:10067000642A000086110D00070000000429000014
-:1006800086220D0007000000062A0D000200080067
-:100690008D0000007D38000020080000408001002F
-:1006A0007D120000428001000A00100004390000A1
-:1006B00086D10D000D080000B5FF7F0084B9000051
-:1006C00086A10D0025000000067A0E002D00000016
-:1006D000150000002D0800008DC702002008000052
-:1006E00006C20E000D00000035807F0084B90000B6
-:1006F00086710E00250040008D00000044091100A5
-:10070000070000008D0100000495100007000000A4
-:10071000649100002404000024040000240400006C
-:1007200002011000020028008DC60200200800000F
-:1007300006C20E008D0100002D0400008D00000097
-:1007400004951000070000000D02000084911000C5
-:10075000070000000DC70200200800008D00000007
-:10076000FD38000040800100FD3B0000201000002B
-:1007700060A80300150800008431310084212100A5
-:100780000700000060B0030060A00300408001008B
-:10079000FD2200009500000024090100240400004F
-:1007A0002404000064120000020110002008000070
-:1007B0006090030040800100241900008DFB0000C0
-:1007C0007D390000200800004080050042800300C1
-:1007D0004A840900060600000A04080024040000F8
-:1007E000240400007D110000428001000A0008007E
-:1007F000240A000002052800020C28000D800900D0
-:1008000020080000FD0200004080010007002000D9
-:10081000FD220000428001000A000800950000004F
-:10082000C40D2800241901007D1900004280010038
-:10083000FD1100004A8009000A001000B500000008
-:1008400044311100048D0A0007000000440A08002A
-:100850000495120007000000FD2300002010000096
-:100860004080030044121000070000002008000030
-:100870006090030040800100FD0200004280010002
-:100880000A0008000409000086FA100007000000B2
-:10089000FD3B000000010000100A00007A800B0000
-:1008A0004A80130084090900070000009500000039
-:1008B000043D0100868011000A00100002001000B3
-:1008C0008409090007000000428003004A801100EB
-:1008D000040D0900070000000A001000840D090043
-:1008E000070000007D250000200800004080010076
-:1008F0000D010000100800003A1428007D120000CD
-:10090000428001000A0020007D19000042800100A1
-:100910007D1100004A8031000A00100024310000DF
-:100920000D2801007D3900002008000040800500EE
-:10093000428003004A840900060600000A040800F9
-:1009400002013000243100002404000024040000CF
-:1009500024120000020528004C1A00008601130032
-:10096000020070002D000000000003007D38000030
-:10097000428001000A001000062A13002421000012
-:10098000AD000000020010000D010000240900006D
-:10099000246B00008D3601007D3900002008000026
-:1009A00040800500428003004A84090006060000DA
-:1009B0000A040800643200008D000000240A0000D0
-:1009C000201000007D220000408001000D3C01004D
-:1009D000100800003A04080006D2290007000000B1
-:1009E000202800007D200000408001007D110000D3
-:1009F000428003004A8013000A8033007D380000E3
-:100A0000428001000A00080004090000863A16002E
-:100A1000070000008D000000640903008D470100FD
-:100A20007D3900002008000040800500428003005E
-:100A30004A840900060600000A0408000201380082
-:100A4000240400002404000024120000FD02000021
-:100A5000428001000A0008000409000086A2140078
-:100A600007000000020528004C1A00008639160015
-:100A700007000000642103002C630000FD3D00001E
-:100A8000428001000A0008009500000004090900E6
-:100A900007000000200800004C1A000086611500C5
-:100AA0004080010000000300067A150024210000A8
-:100AB0000D01000024090000246B00008D5B010083
-:100AC0007D390000200800004080050042800300BE
-:100AD0004A840900060600000A040800643A00007F
-:100AE0009500000024120000FD0200004280010079
-:100AF0000A0008000409000086DA1500070000005B
-:100B00008D620100100800003A04080006D2290096
-:100B10000700000006D2140007000000207000004B
-:100B20000A0108002A011000FD200000608803006F
-:100B300060900300408001007D220000428001009F
-:100B4000FD3D00000A0008004A843100040900004D
-:100B500086D816008B0018008D000000049918003C
-:100B60002C31000006AA1700070000004C320000DC
-:100B700086331700070000000419000086301700B4
-:100B80000700000095000000449119002C2200008D
-:100B9000243100006C6300003D0E0000751300005E
-:100BA000FD0B0000420001004A8009000A0010000D
-:100BB000EC8A0300EC9303004C22000086A9170086
-:100BC000070000008D000000049918006C2200004E
-:100BD0002C3200000A053000AB1D300083200000DD
-:100BE000FD180000428001000A000800248901006D
-:100BF000020530008310000075180000420001005B
-:100C00000A0010008D000000240901007513000087
-:100C100042053300CB0C3300CB2C3300CB343300F4
-:100C2000CB3C3300CB443300CB4C3300CB543300AC
-:100C30008B5C300083600000F50200004200010080
-:100C40000A00080004090000867A18000700000066
-:100C50002D1E0000FD050000428001000A00080072
-:100C600024890200020528000D060000100800007B
-:100C70003A0C28008D000000100800003A142800EB
-:100C80008D800A0020080000F502000040000100ED
-:100C90000700220075120000420003004A002100F4
-:100CA0008D00000044091A00070000000D980100A3
-:100CB000100800003A04080006222B00070000007C
-:100CC000F5010000420003004A000D000A00100078
-:100CD00044910800070000002008000040000100C7
-:100CE000F525000044310A0007000000200800003C
-:100CF00060280300400003007D21000042800300C3
-:100D00004A800B000A001000200800006010030059
-:100D1000400003008D000000240100002C010000B1
-:100D2000640E0000641A00006C6300000A010800F1
-:100D30002A0110002008000060100300400003009A
-:100D4000FD200000428001000A0008007D22000012
-:100D5000428001000A00100020080000601003001B
-:100D6000400003007D190000428001000A000800D5
-:100D7000FD220000428003000A001000200800004D
-:100D80006010030040000300040D0900070000008C
-:100D90002008000040000300428003004A800B004E
-:100DA0000A0010002008000060100300400003004B
-:100DB000428003004A8013004A801900040D11008C
-:100DC000048D1900070000000A0008002010000030
-:100DD0006018030060080300400003008D0000005D
-:100DE00044090B000700000020080000400001003B
-:100DF000F5050000420003000A000800200800007A
-:100E000040000100F5000000420001000A00080057
-:100E10000409000086601C00751E000042000300EB
-:100E20004A0401000A0C000006721C0007000000C2
-:100E300002040000020C00007D170000F51A0000FB
-:100E4000428001004A1403004A1C03004A240300A4
-:100E50004A2C03004A3403004A3C03004A4403007E
-:100E60000A4C00003D040000F5130000FD1A0000CC
-:100E7000420003004A000B004A801B004A80130016
-:100E80000A0020004491080044A11900E4890300ED
-:100E9000EC990300025500000A5D000042000300C7
-:100EA0004A000B004A801B004A8013000A00200001
-:100EB0004491080044A11900E4890300EC9903005F
-:100EC000026500000A6D0000420003004A000B00AA
-:100ED0004A0019004A802B004A8013004A802100F2
-:100EE0000A0030004491080044A1190044B12A00CE
-:100EF000E4890300EC990300027500000A7D0000FC
-:100F0000E4A90300020700007D10000015040000A2
-:100F1000428001000A000800E4090100020F0000FD
-:100F2000F52A0000FD190000420001004A80090076
-:100F30000A0010003409000074160000F5290000B2
-:100F4000420001000A0010007C91000075200000A2
-:100F5000420001000A0008000409000086D21E00B9
-:100F6000F5260000F5270000420003004A000900B2
-:100F70000A0010003C0A00007C160000751A0000F0
-:100F8000FD0B0000420001004A8051000A004800A9
-:100F90000700160075100000420001000A2C28000E
-:100FA000121D280012252800321F000007001E0015
-:100FB00007000E007519000042000100F52D000029
-:100FC0004A000D000A0010004491000086B21F0084
-:100FD000420001000A3428005D0E00008D00000070
-:100FE000750300002008000040000100F4D2050055
-:100FF00004D154005C7300008653200007000000F9
-:1010000007000C000700080007000A000D0402009A
-:10101000100800003A040800062233000700000010
-:10102000065A200007000000070008007522000093
-:10103000420001000A002000042100008620210057
-:101040002D1E0000F5020000420001000A00080009
-:101050000409000086922000070000001020000014
-:101060003A0430007D050000C38001000A0008003A
-:101070002489020002052800020C28000D810A00C4
-:1010800020080000F50200004000010007002200D7
-:10109000FD040000428001000A007000000003000F
-:1010A0002070000006FA0600408001000D180200C2
-:1010B000100800003A04080006222B000700000078
-:1010C000FD020000428001000A000800040900003F
-:1010D000868A21000700000006F2010007000000D8
-:1010E00075080000FD0900000D010000060A22003D
-:1010F00095020000750B00007D0900000D00000046
-:1011000015050000420001000A0018000419000043
-:1011100086782800F506000020100000400001003D
-:10112000F5040000200800004000010075070000E1
-:10113000420001004A8009000A001000241100004A
-:101140000409000086BA2200150800000201080008
-:101150000412100006DA22007505000004120800CF
-:1011600007000000020110007505000025040000C2
-:10117000241102000201100020080000601003008A
-:101180004000010024190000867828008D0000002E
-:1011900064040000049D00008688270002011800F6
-:1011A00075050000420001000A0428008D010000BE
-:1011B00024090000020D28000D0000002409000091
-:1011C000021528000D00100020080000F5020000A4
-:1011D000400001000700200075110000FD02000022
-:1011E000428001000A0008000409000086C22300B2
-:1011F0000700000000010000200B0800600B130036
-:10120000600B1B00600A0300400001004200050063
-:101210004A003D004A0035004A002D000A00200027
-:10122000F5060000420001000A142800F504000041
-:10123000420001000A00080015030000040D01002F
-:1012400086CA24001540000095000000040D01002E
-:1012500086B82400220010002A00100006E22400B4
-:10126000070000000431330004A92A000700000031
-:10127000242103000205280024110000240400009A
-:1012800024040000243200002C2900006C630000BC
-:1012900086F325000700000064B10200640400002A
-:1012A000640400008D000000640A0000020D2800A4
-:1012B0008D00100020080000F50200004000010031
-:1012C000070022008D00000004B93800070000006C
-:1012D0006C2903000A013000F50200004200010001
-:1012E0000A0008000409000086BA25000700000073
-:1012F0002C3102000A0528008D0000006C09010055
-:101300000A0D28000D01100020080000F502000061
-:101310004000010007002200241100002404000006
-:10132000240400002432000002013000442903009C
-:10133000867A26000700000002003000F504000055
-:10134000420001000A00080015030000040D01001E
-:1013500086C0260024310000640400000201300031
-:10136000F5020000420001000A0008000409000024
-:1013700086CA260007000000243100000205300064
-:10138000243900008305300083080000F5050000C3
-:10139000420001000A0428008D00000024810000A2
-:1013A000020D28008D000000248100000215280095
-:1013B0008D01100020080000F5020000400001002F
-:1013C0000700220025100000750500004200030000
-:1013D0004A0009000A00100004090A000411120062
-:1013E0000700000020100000600805004000050014
-:1013F000FD060000428001004A0009000A001000BA
-:10140000A500000004090A000411120007000000F2
-:10141000200800006090010040000100F50200007B
-:10142000420001000A00080004090000864228006A
-:1014300007000000060A230007000000060600005F
-:1014400007000000F5020000420001000A00080049
-:101450000409000086922800070000000001000037
-:10146000200B0800608B1300608B1B00608B230037
-:10147000608B2B00608B3300608B3B00608B4300E4
-:10148000608B4B00608B5300608B5B00608B630054
-:10149000608B6B00608B7300608B7B00608F030040
-:1014A000608F0B00608F1300608F1B00608F230024
-:1014B000608F2B00608F3300608F3B00608F430094
-:1014C000608F4B00608F5300608F5B00608F630004
-:1014D000608F6B00608F7300608F7B00608A0300F9
-:1014E00006060000408001008D000000640A000034
-:1014F000020D2800240A00007D0200004280010045
-:101500000A00100024120000FD03000042800100C8
-:101510000A0008000409000086822A000700000073
-:101520008D010000240A000064040000640400002F
-:101530000201080024090000240400002404000023
-:10154000020110000D0002004491000086D92A001B
-:1015500007000000FD010000428001000A000800B1
-:10156000440A000086BB2A00428001000D000A00E8
-:1015700020080000FD02000040800100070020005C
-:101580007D020000201000000606000040800100DF
-:10159000F5020000420001000A00080004090000F2
-:1015A000862A2B00070000007D0300004280010016
-:1015B0000A00080004090000865A2B0007000000FA
-:1015C000750000007D2E0000420001004A800B00E3
-:1015D0002000000004090000860600004000010011
-:1015E0004A8431008B043000830800008D00000025
-:1015F000100800003A1428008D00000010080000B8
-:101600003A0C280075060000420001000A0008009C
-:101610001538000024090100020528000D000B0008
-:1016200020080000F502000040000100060600004E
-:1016300007002200640400006404000006060000A5
-:1016400007000000340100008D7F00003C0900000D
-:10165000121D280012252800321F000007000E006E
-:101660000D0100007D030000200800004080010003
-:10167000F4D2050007000000070008007D03000009
-:10168000428001000A0008000409000086022D00C3
-:101690000700000006060000070000000700000029
-:1016A0001200000007001000070032000700600071
-:1016B000800010001A0048000449000086612D00D7
-:1016C00007000000101200003A0058004501000019
-:1016D000045D5C0007000000800000001A00480064
-:1016E0000449000086B12D00070000001012000020
-:1016F0003A0050000459000086082E004500000002
-:10170000C5000000F5FF7F007DFF7F0024D50700A6
-:101710002442000002015000020520008200000067
-:101720001A0040000441000086392E000700000026
-:10173000653800001A004000204000004D100000F5
-:1017400084C10400861B3000400000000700040034
-:10175000650100004501000020400000400000003D
-:1017600065070000800008001A00400004410000E6
-:1017700086C92E0007000000101200003A00400049
-:101780000441000086222F004D000000CD00000023
-:10179000104800003A042000820800001A004000AF
-:1017A0000441000086312F0007000000204800009F
-:1017B000045900008608300040000000E5070000E2
-:1017C00080042000A0162800E0163200E0163A003F
-:1017D000E0164200601202004000000032000000EB
-:1017E000750040007D00000074D507001205200040
-:1017F000820000001A0040000441000086E12F0032
-:1018000007000000067203000700640007000600DE
-:10181000E50000002000000040000000650A000014
-:1018200020000000400002004000020040000000D4
-:1018300065010000420000000A0070000471000011
-:1018400086A2300007000000068201000700640045
-:101850000000050020700000400000000672030038
-:1018600007006400070000006D300000608802007F
-:10187000609002000A0008006088020040800000BA
-:10188000120010000D10000084910000864131000C
-:101890000D0E000084910000865132000700000008
-:1018A00007003000201000006D3B00004080000069
-:1018B000800000001A000800040900008661310061
-:1018C0000700000020120000ED0D00004080000025
-:1018D000428000000A0010000D00400044951000F6
-:1018E0000700000020100000ED0D00004080000007
-:1018F000428000000A042000820000001A00080054
-:101900000409000086F13100070000006D3B000073
-:10191000428000000A000800150E00008409010042
-:10192000869B3200070060001A000800150C0000BA
-:1019300084090100868332002000000007001A009D
-:10194000ED02000040800000070062006D300000E2
-:10195000428002004A800A00200800004A800A00F3
-:10196000060600004A80100007000000122528002B
-:10197000321F0000F4D2050004D154005C73000053
-:10198000860700000700000007000C0007000A009F
-:1019900007001C00653400004000020020480000E1
-:1019A000605002000A004000604002004000000059
-:1019B000444945000700000020400000E53A0000CF
-:1019C00040000000E5280000420000000A00480036
-:1019D0000449000086683800652C000042000000C1
-:1019E0000A004000D5000000044145000700000047
-:1019F000550600000445050086F23400D5010000BC
-:101A00000445050086F03400652B0000420000000C
-:101A1000E53A00004A0050000A004000D4C34500E7
-:101A2000070000000445450007000000CD0000004D
-:101A30004449440007000000044545000700000039
-:101A40004D010000444955000700000044510400C6
-:101A500086E93400652C0000420000000A004800BE
-:101A600004D14C000700000044C1040086F3340098
-:101A70000700000007001600E52C000042000400EB
-:101A80000A004000204000004000000065290000DE
-:101A9000420000000A00400004410000866035005A
-:101AA000070000000224000006A23600025C0000CD
-:101AB000E5250000420000000A00400074420000DA
-:101AC000E52A0000420000000A00400074420000C5
-:101AD00012015000E5290000420000000A00400009
-:101AE000344200000441450007000000204000008F
-:101AF00040000000E53E0000200000004000000023
-:101B0000E52D0000520140000A005000445104003D
-:101B1000864A3600C5000000E53E00002040000077
-:101B200040000000E52B0000420000000A004000D9
-:101B30005442400007000000E52A00002040000059
-:101B400040000000320150003401040074560000CF
-:101B5000E5290000420002000A00420042000000A5
-:101B60000A0050007C410500E5280000420000000A
-:101B70000A004800C500000044C14C008610370030
-:101B8000E5260000E5270000420002004A00400070
-:101B90000A0050003C4200007C560000E52800008E
-:101BA0002048000040000000121D280012252800D7
-:101BB000721F000065290000420000000A0040007A
-:101BC0000441000086AA370007000E000700160037
-:101BD00007001E00E53E0000420000000A00400031
-:101BE0000441000086E83700652D00004200000037
-:101BF0000A34280065340000420002004A00420016
-:101C0000204000004A004A004A005000F4D205007B
-:101C100004D154005C7300008651380007000000B6
-:101C2000060600000700080007000C000700080077
-:101C300007000A00E5010000450002002040000006
-:101C4000600000006503000040000000652E0000F9
-:101C5000201A0000601A0A004000000065340000ED
-:101C6000420002004A004200204000004A004A00B0
-:101C7000060600004A0050000000000000000000BE
-:101C80000000000000000000000000000000000054
-:101C90000000000000000000000000000000000044
-:101CA0000000000000000000000000000000000034
-:101CB0000000000000000000000000000000000024
-:101CC0000000000000000000000000000000000014
-:101CD0000000000000000000000000000000000004
-:101CE00000000000000000000000000000000000F4
-:101CF00000000000000000000000000000000000E4
-:101D000000000000000000000000000000000000D3
-:101D100000000000000000000000000000000000C3
-:101D200000000000000000000000000000000000B3
-:101D300000000000000000000000000000000000A3
-:101D40000000000000000000000000000000000093
-:101D50000000000000000000000000000000000083
-:101D60000000000000000000000000000000000073
-:101D70000000000000000000000000000000000063
-:101D80000000000000000000000000000000000053
-:101D90000000000000000000000000000000000043
-:101DA0000000000000000000000000000000000033
-:101DB0000000000000000000000000000000000023
-:101DC0000000000000000000000000000000000013
-:101DD0000000000000000000000000000000000003
-:101DE00000000000000000000000000000000000F3
-:101DF00000000000000000000000000000000000E3
-:101E000000000000000000000000000000000000D2
-:101E100000000000000000000000000000000000C2
-:101E200000000000000000000000000000000000B2
-:101E300000000000000000000000000000000000A2
-:101E40000000000000000000000000000000000092
-:101E50000000000000000000000000000000000082
-:101E60000000000000000000000000000000000072
-:101E70000000000000000000000000000000000062
-:101E80000000000000000000000000000000000052
-:101E90000000000000000000000000000000000042
-:101EA0000000000000000000000000000000000032
-:101EB0000000000000000000000000000000000022
-:101EC0000000000000000000000000000000000012
-:101ED0000000000000000000000000000000000002
-:101EE00000000000000000000000000000000000F2
-:101EF00000000000000000000000000000000000E2
-:101F000000000000000000000000000000000000D1
-:101F100000000000000000000000000000000000C1
-:101F200000000000000000000000000000000000B1
-:101F300000000000000000000000000000000000A1
-:101F40000000000000000000000000000000000091
-:101F50000000000000000000000000000000000081
-:101F60000000000000000000000000000000000071
-:101F70000000000000000000000000000000000061
-:101F80000000000000000000000000000000000051
-:101F90000000000000000000000000000000000041
-:101FA0000000000000000000000000000000000031
-:101FB0000000000000000000000000000000000021
-:101FC0000000000000000000000000000000000011
-:101FD0000000000000000000000000000000000001
-:101FE00000000000000000000000000000000000F1
-:101FF00000000000000000000000000000000000E1
-:1020000000000000000000000000000000000000D0
-:1020100000000000000000000000000000000000C0
-:1020200000000000000000000000000000000000B0
-:1020300000000000000000000000000000000000A0
-:102040000000000000000000000000000000000090
-:102050000000000000000000000000000000000080
-:102060000000000000000000000000000000000070
-:102070000000000000000000000000000000000060
-:102080000000000000000000000000000000000050
-:102090000000000000000000000000000000000040
-:1020A0000000000000000000000000000000000030
-:1020B0000000000000000000000000000000000020
-:1020C0000000000000000000000000000000000010
-:1020D0000000000000000000000000000000000000
-:1020E00000000000000000000000000000000000F0
-:1020F00000000000000000000000000000000000E0
-:1021000000000000000000000000000000000000CF
-:1021100000000000000000000000000000000000BF
-:1021200000000000000000000000000000000000AF
-:10213000000000000000000000000000000000009F
-:10214000000000000000000000000000000000008F
-:10215000000000000000000000000000000000007F
-:10216000000000000000000000000000000000006F
-:10217000000000000000000000000000000000005F
-:10218000000000000000000000000000000000004F
-:10219000000000000000000000000000000000003F
-:1021A000000000000000000000000000000000002F
-:1021B000000000000000000000000000000000001F
-:1021C000000000000000000000000000000000000F
-:1021D00000000000000000000000000000000000FF
-:1021E00000000000000000000000000000000000EF
-:1021F00000000000000000000000000000000000DF
-:1022000000000000000000000000000000000000CE
-:1022100000000000000000000000000000000000BE
-:1022200000000000000000000000000000000000AE
-:10223000000000000000000000000000000000009E
-:10224000000000000000000000000000000000008E
-:10225000000000000000000000000000000000007E
-:10226000000000000000000000000000000000006E
-:10227000000000000000000000000000000000005E
-:10228000000000000000000000000000000000004E
-:10229000000000000000000000000000000000003E
-:1022A000000000000000000000000000000000002E
-:1022B000000000000000000000000000000000001E
-:1022C000000000000000000000000000000000000E
-:1022D00000000000000000000000000000000000FE
-:1022E00000000000000000000000000000000000EE
-:1022F00000000000000000000000000000000000DE
-:1023000000000000000000000000000000000000CD
-:1023100000000000000000000000000000000000BD
-:1023200000000000000000000000000000000000AD
-:10233000000000000000000000000000000000009D
-:10234000000000000000000000000000000000008D
-:10235000000000000000000000000000000000007D
-:10236000000000000000000000000000000000006D
-:10237000000000000000000000000000000000005D
-:10238000000000000000000000000000000000004D
-:10239000000000000000000000000000000000003D
-:1023A000000000000000000000000000000000002D
-:1023B000000000000000000000000000000000001D
-:1023C000000000000000000000000000000000000D
-:1023D00000000000000000000000000000000000FD
-:1023E00000000000000000000000000000000000ED
-:1023F00000000000000000000000000000000000DD
-:1024000000000000000000000000000000000000CC
-:1024100000000000000000000000000000000000BC
-:1024200000000000000000000000000000000000AC
-:10243000000000000000000000000000000000009C
-:10244000000000000000000000000000000000008C
-:10245000000000000000000000000000000000007C
-:10246000000000000000000000000000000000006C
-:10247000000000000000000000000000000000005C
-:10248000000000000000000000000000000000004C
-:10249000000000000000000000000000000000003C
-:1024A000000000000000000000000000000000002C
-:1024B000000000000000000000000000000000001C
-:1024C000000000000000000000000000000000000C
-:1024D00000000000000000000000000000000000FC
-:1024E00000000000000000000000000000000000EC
-:1024F00000000000000000000000000000000000DC
-:1025000000000000000000000000000000000000CB
-:1025100000000000000000000000000000000000BB
-:1025200000000000000000000000000000000000AB
-:10253000000000000000000000000000000000009B
-:10254000000000000000000000000000000000008B
-:10255000000000000000000000000000000000007B
-:10256000000000000000000000000000000000006B
-:10257000000000000000000000000000000000005B
-:10258000000000000000000000000000000000004B
-:10259000000000000000000000000000000000003B
-:1025A000000000000000000000000000000000002B
-:1025B000000000000000000000000000000000001B
-:1025C000000000000000000000000000000000000B
-:1025D00000000000000000000000000000000000FB
-:1025E00000000000000000000000000000000000EB
-:1025F00000000000000000000000000000000000DB
-:1026000000000000000000000000000000000000CA
-:1026100000000000000000000000000000000000BA
-:1026200000000000000000000000000000000000AA
-:10263000000000000000000000000000000000009A
-:10264000000000000000000000000000000000008A
-:10265000000000000000000000000000000000007A
-:10266000000000000000000000000000000000006A
-:10267000000000000000000000000000000000005A
-:10268000000000000000000000000000000000004A
-:10269000000000000000000000000000000000003A
-:1026A000000000000000000000000000000000002A
-:1026B000000000000000000000000000000000001A
-:1026C000000000000000000000000000000000000A
-:1026D00000000000000000000000000000000000FA
-:1026E00000000000000000000000000000000000EA
-:1026F00000000000000000000000000000000000DA
-:1027000000000000000000000000000000000000C9
-:1027100000000000000000000000000000000000B9
-:1027200000000000000000000000000000000000A9
-:102730000000000000000000000000000000000099
-:102740000000000000000000000000000000000089
-:102750000000000000000000000000000000000079
-:102760000000000000000000000000000000000069
-:102770000000000000000000000000000000000059
-:102780000000000000000000000000000000000049
-:102790000000000000000000000000000000000039
-:1027A0000000000000000000000000000000000029
-:1027B0000000000000000000000000000000000019
-:1027C0000000000000000000000000000000000009
-:1027D00000000000000000000000000000000000F9
-:1027E00000000000000000000000000000000000E9
-:1027F00000000000000000000000000000000000D9
-:1028000000000000000000000000000000000000C8
-:1028100000000000000000000000000000000000B8
-:1028200000000000000000000000000000000000A8
-:102830000000000000000000000000000000000098
-:102840000000000000000000000000000000000088
-:102850000000000000000000000000000000000078
-:102860000000000000000000000000000000000068
-:102870000000000000000000000000000000000058
-:102880000000000000000000000000000000000048
-:102890000000000000000000000000000000000038
-:1028A0000000000000000000000000000000000028
-:1028B0000000000000000000000000000000000018
-:1028C0000000000000000000000000000000000008
-:1028D00000000000000000000000000000000000F8
-:1028E00000000000000000000000000000000000E8
-:1028F00000000000000000000000000000000000D8
-:1029000000000000000000000000000000000000C7
-:1029100000000000000000000000000000000000B7
-:1029200000000000000000000000000000000000A7
-:102930000000000000000000000000000000000097
-:102940000000000000000000000000000000000087
-:102950000000000000000000000000000000000077
-:102960000000000000000000000000000000000067
-:102970000000000000000000000000000000000057
-:102980000000000000000000000000000000000047
-:102990000000000000000000000000000000000037
-:1029A0000000000000000000000000000000000027
-:1029B0000000000000000000000000000000000017
-:1029C0000000000000000000000000000000000007
-:1029D00000000000000000000000000000000000F7
-:1029E00000000000000000000000000000000000E7
-:1029F00000000000000000000000000000000000D7
-:102A000000000000000000000000000000000000C6
-:102A100000000000000000000000000000000000B6
-:102A200000000000000000000000000000000000A6
-:102A30000000000000000000000000000000000096
-:102A40000000000000000000000000000000000086
-:102A50000000000000000000000000000000000076
-:102A60000000000000000000000000000000000066
-:102A70000000000000000000000000000000000056
-:102A80000000000000000000000000000000000046
-:102A90000000000000000000000000000000000036
-:102AA0000000000000000000000000000000000026
-:102AB0000000000000000000000000000000000016
-:102AC0000000000000000000000000000000000006
-:102AD00000000000000000000000000000000000F6
-:102AE00000000000000000000000000000000000E6
-:102AF00000000000000000000000000000000000D6
-:102B000000000000000000000000000000000000C5
-:102B100000000000000000000000000000000000B5
-:102B200000000000000000000000000000000000A5
-:102B30000000000000000000000000000000000095
-:102B40000000000000000000000000000000000085
-:102B50000000000000000000000000000000000075
-:102B60000000000000000000000000000000000065
-:102B70000000000000000000000000000000000055
-:102B80000000000000000000000000000000000045
-:102B90000000000000000000000000000000000035
-:102BA0000000000000000000000000000000000025
-:102BB0000000000000000000000000000000000015
-:102BC0000000000000000000000000000000000005
-:102BD00000000000000000000000000000000000F5
-:102BE00000000000000000000000000000000000E5
-:102BF00000000000000000000000000000000000D5
-:102C000000000000000000000000000000000000C4
-:102C100000000000000000000000000000000000B4
-:102C200000000000000000000000000000000000A4
-:102C30000000000000000000000000000000000094
-:102C40000000000000000000000000000000000084
-:102C50000000000000000000000000000000000074
-:102C60000000000000000000000000000000000064
-:102C70000000000000000000000000000000000054
-:102C80000000000000000000000000000000000044
-:102C90000000000000000000000000000000000034
-:102CA0000000000000000000000000000000000024
-:102CB0000000000000000000000000000000000014
-:102CC0000000000000000000000000000000000004
-:102CD00000000000000000000000000000000000F4
-:102CE00000000000000000000000000000000000E4
-:102CF00000000000000000000000000000000000D4
-:102D000000000000000000000000000000000000C3
-:102D100000000000000000000000000000000000B3
-:102D200000000000000000000000000000000000A3
-:102D30000000000000000000000000000000000093
-:102D40000000000000000000000000000000000083
-:102D50000000000000000000000000000000000073
-:102D60000000000000000000000000000000000063
-:102D70000000000000000000000000000000000053
-:102D80000000000000000000000000000000000043
-:102D90000000000000000000000000000000000033
-:102DA0000000000000000000000000000000000023
-:102DB0000000000000000000000000000000000013
-:102DC0000000000000000000000000000000000003
-:102DD00000000000000000000000000000000000F3
-:102DE00000000000000000000000000000000000E3
-:102DF00000000000000000000000000000000000D3
-:102E000000000000000000000000000000000000C2
-:102E100000000000000000000000000000000000B2
-:102E200000000000000000000000000000000000A2
-:102E30000000000000000000000000000000000092
-:102E40000000000000000000000000000000000082
-:102E50000000000000000000000000000000000072
-:102E60000000000000000000000000000000000062
-:102E70000000000000000000000000000000000052
-:102E80000000000000000000000000000000000042
-:102E90000000000000000000000000000000000032
-:102EA0000000000000000000000000000000000022
-:102EB0000000000000000000000000000000000012
-:102EC0000000000000000000000000000000000002
-:102ED00000000000000000000000000000000000F2
-:102EE00000000000000000000000000000000000E2
-:102EF00000000000000000000000000000000000D2
-:102F000000000000000000000000000000000000C1
-:102F100000000000000000000000000000000000B1
-:102F200000000000000000000000000000000000A1
-:102F30000000000000000000000000000000000091
-:102F40000000000000000000000000000000000081
-:102F50000000000000000000000000000000000071
-:102F60000000000000000000000000000000000061
-:102F70000000000000000000000000000000000051
-:102F80000000000000000000000000000000000041
-:102F90000000000000000000000000000000000031
-:102FA0000000000000000000000000000000000021
-:102FB0000000000000000000000000000000000011
-:102FC0000000000000000000000000000000000001
-:102FD00000000000000000000000000000000000F1
-:102FE00000000000000000000000000000000000E1
-:102FF00000000000000000000000000000000000D1
-:00000001FF
diff --git a/firmware/yamaha/ds1_dsp.fw.ihex b/firmware/yamaha/ds1_dsp.fw.ihex
deleted file mode 100644
index acb0ba48f112..000000000000
--- a/firmware/yamaha/ds1_dsp.fw.ihex
+++ /dev/null
@@ -1,9 +0,0 @@
-:1000000081000000A40100000A0000002F00000091
-:1000100053020800170380017B4000003F8400006A
-:100020003C4801003C9401003CD805003C1C000009
-:100030007BC000003F0C05003C5021010000000087
-:1000400000000000000000000000000000000000B0
-:1000500000000000000000000000000000000000A0
-:100060000000000000000000000000000000000090
-:100070000000000000000000000000000000000080
-:00000001FF
diff --git a/firmware/yamaha/ds1e_ctrl.fw.ihex b/firmware/yamaha/ds1e_ctrl.fw.ihex
deleted file mode 100644
index 597f429ee31a..000000000000
--- a/firmware/yamaha/ds1e_ctrl.fw.ihex
+++ /dev/null
@@ -1,769 +0,0 @@
-:10000000070000000700240007000C0007001C0088
-:1000100007000600020070002000000040000300FE
-:100020000471000086420000400003000D0F000034
-:10003000100800003A042000820200000D020000B7
-:10004000100800003A04200082120000820E2000F6
-:100050000D800000100800003A042000821A000001
-:100060000D460300100800003A0410000DEC0200D9
-:10007000100800003A0418000D01000015000200ED
-:10008000FD00000020000000608803006090030075
-:100090006080030040800300408003004080030034
-:1000A000408001007D0A0000408003004080030082
-:1000B0004080010002042000820800001A000800AD
-:1000C00004090000867101000700000007002600F7
-:1000D00007004000070000008D2503001008000005
-:1000E0003A04180007002600024428007D0800009A
-:1000F000428001000A16000006A205000700000069
-:10010000070044000D230000100800003A04080016
-:1001100006FA220007000000FD07000042800100EF
-:100120000A0008000409000086AB020095010000E7
-:10013000040D09000700000020080000F500000081
-:100140007D0B000060F00100FD000000063A030096
-:10015000408001007D0A0000428003004A801300B5
-:100160000A00180020180000609005006088050053
-:1001700040800100FD000000428001000A00700084
-:100180001501000044110700863B03000000030036
-:100190002070000006620300408001000D36000060
-:1001A000100800003A04080006222300070000009F
-:1001B0000DEC0200100800003A041800069A010035
-:1001C00007000000070024008D0F00001008000049
-:1001D0003A16000002240000025C0000FD28000026
-:1001E00020000000408001000D00080015080000FC
-:1001F00084095100070000004D0000005D0E000062
-:10020000020E00000D430000100800003A04080030
-:1002100006122E00070000008D00000024090000D7
-:10022000020F00000D470000100800003A0408000B
-:1002300006122E0007000000800448001012000083
-:100240003A0428008D770000100800003A0C2800BE
-:100250008D060000100800003A142800024428000F
-:100260008D250300100800003A0418008DFF0700D8
-:1002700020080000FD020000408001000700260069
-:1002800007002000FD020000428001000A00080073
-:100290000409000086120500070000000700240082
-:1002A0000DEC0200100800003A0418007D38000030
-:1002B000428001000A0008001510000084090100B6
-:1002C000869B01000700000006B201000700000045
-:1002D000FD080000428001000A0018000419000017
-:1002E00086B8220007002800101800003A042800F1
-:1002F000020C28000D000000100800003A1428002D
-:100300008D80080020080000FD02000040800100F0
-:10031000070020000D0200000499180007000000EB
-:100320002D400000BD000000FD02000042800100E1
-:100330000A00080004090000865A060007000000B1
-:1003400000010000200A00007D0400004080010040
-:10035000428001000A002000153000004421010005
-:10036000866103000700000004210000866103008D
-:10037000070000008D0F0000100800003A0C280054
-:100380004439020086C90700070000001018000069
-:100390003A0428000D81080020080000FD0200003A
-:1003A0004080010007002000102800003A0078007B
-:1003B0008D780000100800003A04080006122A0098
-:1003C000070000000D4000001510000004991800FF
-:1003D000042929000439390007000000060207003B
-:1003E00007000000F50400007D0000002000000070
-:1003F0008D00000060080100408001007D040000C5
-:10040000428003004A8021000A00180044190200BB
-:1004100086902200070000007540000004F1710082
-:1004200007000000420001000A0028000429000023
-:1004300086582200070000000D3C000004A930008F
-:10044000070000007D070000428001000A0008004C
-:100450000409000086DA08007D050000202800005D
-:1004600060B0030006F20800408001002030000068
-:1004700060A8030040800100FD02000042800100EE
-:100480000A0008000409000086FA080007000000BE
-:100490007D050000428001000A0428008D0E000046
-:1004A000100800003A0C28000D00000010080000A1
-:1004B0003A1428000D00090020080000FD02000089
-:1004C0004080010007002000FD3D000020000000EA
-:1004D000408001007D1000008D9D0000100800008C
-:1004E0003A04080006122A00070000001508000060
-:1004F0001A0008008409010086510A007D130000DB
-:1005000000052000200F2800608F3300608F3B0023
-:10051000608F4300608F4B00608F5300608F5B00E3
-:10052000608A0300408001007D10000042800100CD
-:100530000A000800150200008409010086813A00C3
-:1005400007000000BD7F0000C43D38000700000028
-:100550007D1A000075130000428001004A00090066
-:100560000A001000048D0B00049513000700000022
-:10057000200800006090010004110000865822004D
-:1005800040000100FD170000428001000A00080041
-:1005900004090000865A2200070000007D190000AF
-:1005A000428003004A8009000A001000240900006C
-:1005B00064160000FD110000428003004A802B00F9
-:1005C0004A8019008D0000004489210007000000C6
-:1005D0004422000086190C0007000000641A000085
-:1005E000242A00007D1900000201080022011000E9
-:1005F000200800006090030040800100FD3D0000E5
-:100600008D000000200800004080010075130000EC
-:100610007D1A0000420001004A8009000A00100013
-:100620001D020000E4890100E49229004491300099
-:10063000070000000D060000150A00001D0C000058
-:1006400025100000E4A90000E42B01006404000070
-:10065000E4B30100E432020064040000640400001A
-:1006600064040000640400000D040000C4B108002C
-:100670000700000020080000F50B00004000030008
-:100680007D190000428003004A800900240A00000E
-:100690000A000800640E0800070000002201100094
-:1006A000200800006010030040000100AC6400005E
-:1006B0007D02000020000000408001007D1000004D
-:1006C00042800100FD1100004A803B004A80090081
-:1006D0000A0020009500000044111A0044A1000007
-:1006E00086580E000D04000084B9000086590E00E3
-:1006F000FD18000042800100FD1000004A80090042
-:100700000A0028009500000024090100642A000066
-:1007100086490E000700000004290000865A0E00DA
-:100720000700000006620E00020008008D000000B5
-:100730007D38000020080000408001007D1200008C
-:10074000428001000A0010000439000086090F00F1
-:100750000D080000B5FF7F0084B9000086D90E00A7
-:100760002500000006B20F002D000000150000005B
-:100770002D0800000DE002002008000006FA0F001E
-:100780000D00000035807F0084B9000086A90F00AD
-:10079000250040008D000000440911000700000002
-:1007A0008D01000004951000070000006491000016
-:1007B00024040000240400002404000002011000AE
-:1007C000020028000DDF02002008000006FA0F00DA
-:1007D0008D0100002D0400008D0000000495100024
-:1007E000070000000D0200008491100007000000C7
-:1007F0008DDF0200200800008D000000FD380000A1
-:1008000040800100FD3B00002010000060A80300B4
-:100810001508000084313100842121000700000008
-:1008200060B0030060A0030040800100FD220000D2
-:1008300095000000240901002404000024040000A5
-:100840006412000002011000200800006090030004
-:1008500040800100241900000D0F01007D390000C7
-:100860002008000040800500428003004A840900FF
-:10087000060600000A040800240400002404000006
-:100880007D110000428001000A000800240A0000D7
-:1008900002052800020C28000D8009002008000035
-:1008A000FD0200004080010007002000FD22000042
-:1008B000428001000A00080095000000C40D2800D5
-:1008C000241901007D19000042800100FD11000083
-:1008D0004A8009000A001000B500000044311100F0
-:1008E000048D0A0007000000440A08000495120065
-:1008F00007000000FD2300002010000040800300DE
-:10090000441210000700000020080000609003005F
-:1009100040800100FD020000428001000A00080042
-:10092000040900008632120007000000FD3B0000B1
-:1009300000010000100A00007A800B004A801300BA
-:10094000840909000700000095000000043D010033
-:1009500086B812000A001000020010008409090085
-:1009600007000000428003004A801100040D0900C6
-:10097000070000000A001000840D090007000000B5
-:100980007D25000020080000408001000D010000CE
-:10099000100800003A1428007D1200004280010077
-:1009A0000A0020007D190000428001007D11000036
-:1009B0004A8031000A001000243100008D3B010004
-:1009C0007D390000200800004080050042800300BF
-:1009D0004A840900060600000A04080002013000EB
-:1009E000243100002404000024040000241200002C
-:1009F000020528004C1A000086391400020070001D
-:100A00002D000000000003007D380000428001003E
-:100A10000A0010000662140024210000AD0000004E
-:100A2000020010000D01000024090000246B0000EA
-:100A30000D4A01007D3900002008000040800500BB
-:100A4000428003004A840900060600000A040800E8
-:100A5000643200008D000000240A00002010000015
-:100A60007D220000408001008D4F01001008000031
-:100A70003A040800065A2B00070000002028000056
-:100A80007D200000408001007D11000042800300B5
-:100A90004A8013000A8033007D3800004280010044
-:100AA0000A00080004090000867217000700000011
-:100AB0008D000000640903000D5B01007D3900001A
-:100AC0002008000040800500428003004A8409009D
-:100AD000060600000A040800020138002404000091
-:100AE0002404000024120000FD02000042800100E6
-:100AF0000A0008000409000086DA1500070000005B
-:100B0000020528004C1A000086711700070000003B
-:100B1000642103002C630000FD3D000042800100C1
-:100B20000A00080095000000040909000700000001
-:100B3000200800004C1A0000869916004080010031
-:100B40000000030006B21600242100000D01000081
-:100B500024090000246B00000D6F01007D390000A6
-:100B60002008000040800500428003004A840900FC
-:100B7000060600000A040800643A00009500000020
-:100B800024120000FD020000428001000A0008005B
-:100B90000409000086121700070000000D7601000E
-:100BA000100800003A040800065A2B000700000055
-:100BB000060A160007000000207000000A01080065
-:100BC0002A011000FD2000006088030060900300EF
-:100BD000408001007D22000042800100FD3D0000B8
-:100BE0000A0008004A843100040900008610180039
-:100BF0008B0018008D000000049918002C310000B3
-:100C000006E21800070000004C320000866B180056
-:100C100007000000041900008668180007000000A3
-:100C200095000000449119002C220000243100009E
-:100C30006C6300003D0E000075130000FD0B00000A
-:100C4000420001004A8009000A001000EC8A0300FB
-:100C5000EC9303004C22000086E11800070000001E
-:100C60008D000000049918006C2200002C32000056
-:100C70000A053000AB1D300083200000FD18000085
-:100C8000428001000A0008002489010002053000AA
-:100C90008310000075180000420001000A001000D7
-:100CA0008D00000024090100751300004205330087
-:100CB000CB0C3300CB2C3300CB343300CB3C330094
-:100CC000CB443300CB4C3300CB5433008B5C30002F
-:100CD00083600000F5020000420001000A000800E5
-:100CE0000409000086B21900070000002D1E000054
-:100CF000FD050000428001000A000800248902006E
-:100D0000020528000D060000100800003A0C28001B
-:100D10008D000000100800003A1428008D800A00A1
-:100D200020080000F502000040000100070022003A
-:100D300075120000420003004A0021008D000000EF
-:100D400044091A00070000008DAB010010080000E4
-:100D50003A04080006AA2C0007000000F501000074
-:100D6000420003004A000D000A00100044910800F0
-:100D7000070000002008000040000100F5250000E9
-:100D800044310A000700000020080000602803002A
-:100D9000400003007D210000428003004A800B00D8
-:100DA0000A0010002008000060100300400003004B
-:100DB0008D000000240100002C010000640E0000E2
-:100DC000641A00006C6300000A0108002A01100088
-:100DD000200800006010030040000300FD20000018
-:100DE000428001000A0008007D22000042800100CC
-:100DF0000A001000200800006010030040000300FB
-:100E00007D190000428001000A000800FD22000058
-:100E1000428003000A001000200800006010030058
-:100E200040000300040D0900070000002008000036
-:100E300040000300428003004A800B000A001000BB
-:100E400020080000601003004000030042800300FF
-:100E50004A8013004A801900040D1100048D190006
-:100E6000070000000A0008002010000060180300BE
-:100E700060080300400003008D00000044090B00DF
-:100E8000070000002008000040000100F5050000F8
-:100E9000420003000A000800200800004000010092
-:100EA000F5000000420001000A00080004090000EB
-:100EB00086981D00751E0000420003004A040100D0
-:100EC0000A0C000006AA1D00070000000204000032
-:100ED000020C00007D170000F51A0000428001009E
-:100EE0004A1403004A1C03004A2403004A2C03004E
-:100EF0004A3403004A3C03004A4403000A4C000001
-:100F00003D040000F5130000FD1A0000420003003C
-:100F10004A000B004A801B004A8013000A00200090
-:100F20004491080044A11900E4890300EC990300EE
-:100F3000025500000A5D0000420003004A000B0059
-:100F40004A801B004A8013000A00200044910800D8
-:100F500044A11900E4890300EC9903000265000034
-:100F60000A6D0000420003004A000B004A0019000D
-:100F70004A802B004A8013004A8021000A0030007A
-:100F80004491080044A1190044B12A00E4890300F7
-:100F9000EC990300027500000A7D0000E4A903003B
-:100FA000020700007D1000001504000042800100CF
-:100FB0000A000800E4090100020F0000F52A000001
-:100FC000FD190000420001004A8009000A001000DB
-:100FD0003409000074160000F529000042000100E9
-:100FE0000A0010007C910000752000004200010002
-:100FF0000A00080004090000860A2000F526000007
-:10100000F5270000420003004A0009000A00100012
-:101010003C0A00007C160000751A0000FD0B000061
-:10102000420001004A8051000A00480007001600F3
-:1010300075100000420001000A2C2800121D280033
-:1010400012252800321F000007001E0007000E00B6
-:101050007519000042000100F52D00004A000D0046
-:101060000A0010004491000086EA200042000100BE
-:101070000A3428005D0E00008D000000750300009A
-:101080002008000040000100F4D2050004D1540003
-:101090005C730000868B21000700000007000C0035
-:1010A0000700080007000A008D1702001008000062
-:1010B0003A04080006B2340007000000069221003E
-:1010C0000700000007000800752200004200010030
-:1010D0000A00200004210000865822002D1E000076
-:1010E000F5020000420001000A00080004090000A7
-:1010F00086CA210007000000102000003A043000DA
-:101100007D050000C38001000A0008002489020058
-:1011100002052800020C28000D810A0020080000AA
-:10112000F50200004000010007002200FD0400005D
-:10113000428001000A0070000000030020700000DF
-:1011400006FA0700408001008D2B02001008000005
-:101150003A04080006AA2C0007000000FD02000067
-:10116000428001000A0008000409000086C2220033
-:1011700007000000060202000700000075080000DA
-:10118000FD0900000D010000064223009502000049
-:10119000750B00007D0900000D0000001505000022
-:1011A000420001000A0018000419000086002A000D
-:1011B000F50600002010000040000100F5040000CA
-:1011C00020080000400001007507000042000100F7
-:1011D0004A8009000A0010002411000004090000E0
-:1011E00086F2230015080000020108000412100016
-:1011F0000612240075050000041208000700000014
-:1012000002011000750500002504000024110200F1
-:1012100002011000200800006010030040000100DF
-:101220002419000086002A008D00000064040000DC
-:10123000049D0000861029000201180075050000B9
-:10124000420001000A0428008D010000240900006A
-:10125000020D28000D0000002409000002152800DE
-:101260000D00100020080000F50200004000010001
-:101270000700200075110000FD02000042800100FF
-:101280000A0008000409000086FA24000700000094
-:1012900000010000200B0800600B1300600B1B0016
-:1012A000600A030040000100420005004A003D00C2
-:1012B0004A0035004A002D000A002000F506000013
-:1012C000420001000A142800F50400004200010059
-:1012D0000A00080015030000040D01008602260024
-:1012E0001540000095000000040D010086F0250067
-:1012F000220010002A001000061A26000700000035
-:101300000431330004A92A0007000000242103004F
-:1013100002052800024428002411000002014000B8
-:101320002404000024040000243200002C290000C2
-:101330006C630000867327000700000064B10200A0
-:1013400064040000640400008D000000640A0000D2
-:10135000020D28008D00100020080000F50200009A
-:1013600040000100070022008D00000004B9380091
-:10137000070000006C2903000A013000F50200009C
-:10138000420001000A00080004090000860227004C
-:10139000070000002C2100000A0528006C31000025
-:1013A0006C0400006C0400000A45280024110000B1
-:1013B000646B0000020110008D0000006C09010048
-:1013C0000A0D28000D01100020080000F5020000A1
-:1013D0004000010007002200244100002404000016
-:1013E00024040000243200000201300044290300DC
-:1013F00086FA27000700000002003000F504000014
-:10140000420001000A00080015030000040D01005D
-:1014100086402800243100006404000002013000EE
-:10142000F5020000420001000A0008000409000063
-:10143000864A2800070000000244280024310000EA
-:1014400002053000243900008305300083080000C5
-:10145000F5050000420001000A0428008D0000008C
-:1014600024810000020D28008D000000248100006E
-:10147000021528008D01100020080000F502000070
-:101480004000010007002200251000007505000043
-:10149000420003004A0009000A00100004090A0083
-:1014A0000411120007000000201000006008050071
-:1014B00040000500FD060000428001004A000900CE
-:1014C0000A001000A500000004090A00041112001F
-:1014D00007000000200800006090010040000100AB
-:1014E000F5020000420001000A00080004090000A3
-:1014F00086CA2900070000000642240007000000F9
-:101500000606000007000000F5020000420001008E
-:101510000A00080004090000861A2A0007000000DB
-:1015200000010000200B0800608B1300608B1B0083
-:10153000608B2300608B2B00608B3300608B3B0043
-:10154000608B4300608B4B00608B5300608B5B00B3
-:10155000608B6300608B6B00608B7300608B7B0023
-:10156000608F0300608F0B00608F1300608F1B0083
-:10157000608F2300608F2B00608F3300608F3B00F3
-:10158000608F4300608F4B00608F5300608F5B0063
-:10159000608F6300608F6B00608F7300608F7B00D3
-:1015A000608A030006060000408001008D000000F4
-:1015B000640A0000020D2800240A00007D020000D9
-:1015C000428001000A00100024120000FD03000008
-:1015D000428001000A00080004090000860A2C006D
-:1015E000070000008D010000240A000064040000D0
-:1015F0006404000002010800240900002404000023
-:1016000024040000020110000D00020044910000BB
-:1016100086612C0007000000FD01000042800100EF
-:101620000A000800440A000086432C0042800100A2
-:101630000D000A0020080000FD02000040800100AB
-:10164000070020007D0200002010000006060000B8
-:1016500040800100F5020000420001000A0008007D
-:101660000409000086B22C00070000007D03000082
-:10167000428001000A0008000409000086E22C00F4
-:1016800007000000750000007D2E000042000100F0
-:101690004A800B00200000000409000086060000BC
-:1016A000400001004A8431008B04300083080000B0
-:1016B0008D000000100800003A1428008D00000082
-:1016C000100800003A0C28007506000042000100D6
-:1016D0000A0008001538000024090100020528004E
-:1016E0000D000B0020080000F50200004000010082
-:1016F00006060000070022006404000064040000E5
-:101700000606000007000000340100008D7F000085
-:101710003C090000121D280012252800321F00007D
-:1017200007000E000D0100007D03000020080000EE
-:1017300040800100F4D20500070000000700080007
-:101740007D030000428001000A0008000409000037
-:10175000868A2E0007000000060600000700000031
-:101760000700000012000000070010000700320010
-:101770000700600007004600800010001A004800C3
-:101780000449000086F12E0007000000101200003E
-:101790003A00580045010000045D5C0007000000AD
-:1017A000800000001A0048000449000086412F0014
-:1017B00007000000101200003A0050000459000019
-:1017C00086982F0045000000C5000000F5FF7F004F
-:1017D0007DFF7F0024D50700244200000201500055
-:1017E00002052000820000001A00400004410000B1
-:1017F00086C92F0007000000653800001A0040006D
-:10180000204000004D10000084C1040086AB310070
-:1018100040000000070004006501000045010000D1
-:101820002040000040000000650700008000080024
-:101830001A004000044100008659300007000000F3
-:10184000101200003A0040000441000086B230004F
-:101850004D000000CD000000104800003A042000B8
-:10186000820800001A0040000441000086C13000D8
-:10187000070000002048000004590000869831004D
-:1018800040000000E507000080042000A0162800AA
-:10189000E0163200E0163A00E01642006012020044
-:1018A0004000000032000000750040007D00000094
-:1018B00074D5070012052000820000001A004000C5
-:1018C000044100008671310007000000068A030011
-:1018D00007006400E5000000200000004000000058
-:1018E000650A0000200000004000020040000200E5
-:1018F0004000000065010000420000000A00700086
-:101900000471000086323200070000000700060064
-:10191000069A010007006400000005002070000026
-:1019200040000000068A0300070064000700000072
-:101930006D30000060880200609002000A0008001C
-:101940006088020040800000120010000D100000AE
-:101950008491000086D132000D0E000084910000B9
-:1019600086E133000700000007003000201000006F
-:101970006D3B000040800000800000001A0008005D
-:101980000409000086F13200070000002012000068
-:10199000ED0D000040800000428000000A001000B1
-:1019A0000D004000449510000700000020100000CA
-:1019B000ED0D000040800000428000000A0420007D
-:1019C000820000001A00080004090000868133002C
-:1019D000070000006D3B0000428000000A00080084
-:1019E000150E000084090100862B340007006000FA
-:1019F0001A000800150C0000840901008613340049
-:101A00002000000007001A00ED02000040800000E6
-:101A1000070062006D300000428002004A800A0028
-:101A2000200800004A800A00060600004A801000D4
-:101A30000700000012252800321F0000F4D2050024
-:101A400004D154005C73000086070000070000000A
-:101A500007000C0007000A0007001C0065340000A6
-:101A60004000020020480000605002000A004000D0
-:101A700060400200400000004449450007000000AB
-:101A800020400000E53A000040000000E52800008A
-:101A9000420000000A0048000449000086F83900AE
-:101AA000652C0000420000000A004000D500000044
-:101AB00004414500070000005506000004450500EC
-:101AC00086823600D5010000044505008680360078
-:101AD000652B000042000000E53A00004A0050007B
-:101AE0000A004000D4C3450007000000044545003B
-:101AF00007000000CD00000044494400070000003A
-:101B000004454500070000004D0100004449550010
-:101B1000070000004451040086793600652C00005F
-:101B2000420000000A00480004D14C0007000000F9
-:101B300044C1040086833600070000000700160039
-:101B4000E52C0000420004000A0040002040000094
-:101B50004000000065290000420000000A0040002B
-:101B60000441000086F03600070000000224000057
-:101B700006323800025C0000E5250000420000004B
-:101B80000A00400074420000E52A00004200000004
-:101B90000A0040007442000012015000E5290000D4
-:101BA000420000000A0040003442000004414500A9
-:101BB000070000002040000040000000E53E00005B
-:101BC0002000000040000000E52D00005201400010
-:101BD0000A0050004451040086DA3700C5000000B6
-:101BE000E53E00002040000040000000E52B000022
-:101BF000420000000A00400054424000070000007C
-:101C0000E52A0000204000004000000032015000A2
-:101C10003401040074560000E5290000420002006F
-:101C20000A004200420000000A0050007C4105000A
-:101C3000E5280000420000000A004800C50000003E
-:101C400044C14C0086A03800E5260000E5270000CE
-:101C5000420002004A0040000A0050003C420000DE
-:101C60007C560000E52800002048000040000000ED
-:101C7000121D280012252800721F0000652900008F
-:101C8000420000000A00400004410000863A39008A
-:101C900007000E000700160007001E00E53E0000CA
-:101CA000420000000A00400004410000867839002C
-:101CB000652D0000420000000A3428006534000051
-:101CC000420002004A004200204000004A004A0050
-:101CD0004A005000F4D2050004D154005C730000A7
-:101CE00086E1390007000000060600000700080032
-:101CF00007000C000700080007000A00E5010000CB
-:101D00004500020020400000600000006503000064
-:101D100040000000652E0000201A0000601A0A0032
-:101D20004000000065340000420002004A0042000A
-:101D3000204000004A004A00060600004A00500009
-:101D4000FD170000428001000A000800040900009D
-:101D5000865A2200070000007D100000428001002A
-:101D6000FD1100004A8033004A8019000A0020005B
-:101D70009500000044112A0044A1010086903B0018
-:101D80000D04000084B1000086913B00FD180000A6
-:101D900042800100FD1000004A8009000A0038005E
-:101DA0009500000024090100643A000086813B0090
-:101DB000070000000439000086923B000700000085
-:101DC000069A3B000D0000008D0000002008000076
-:101DD0007D38000040800100020070007D1100008D
-:101DE000428001007D1900004A8029000A0030006D
-:101DF0000200380024310000240400002404000004
-:101E0000242A0000020528008D06000010080000AA
-:101E10003A1428000D75000024B10000642200006F
-:101E200086033D0002442800100800003A0C2800F8
-:101E30000D800B0020080000FD0200004080010022
-:101E4000070020008D75000024B100000201100081
-:101E50004421010086493E00101800003A0010009D
-:101E60007D380000428001000A00080004090000DB
-:101E700086483E0000000300064A3E00BD00000008
-:101E80008D00000064310200640A0000020D280089
-:101E90008D800B0020080000FD0200004080010042
-:101EA000070020007D380000428001000A00080081
-:101EB0000409000086323E0000000300FD0200001D
-:101EC000428001000A0008000409000086823D00EB
-:101ED00007000000102800003A0428000D750000DB
-:101EE0002409030064220000020D28006C31020066
-:101EF0000A4528000D810B0020080000FD020000AB
-:101F000040800100070020008D000000240A00002E
-:101F1000064A3E0002011000101800003A001000AE
-:101F2000BD000000103800003A0430007D180000A9
-:101F300042800100FD1800004A8009000A002000CC
-:101F4000AD000000248902002C21070010100000C1
-:101F5000830530008B0D3000BB143000831C300033
-:101F6000832000007D130000428003004A84330078
-:101F7000CBAC3300CBB43300CBBC3300CBC4330089
-:101F8000CBCC3300CBD433008B5C300083600000BB
-:101F90000D1E0000FD050000428001000A00200027
-:101FA000240902008D0600006CA900009D000000BD
-:101FB000FD020000428001000A0008000409000040
-:101FC000866A3F0007000000020528000A0D28006D
-:101FD00002442800101800003A1428008D000C005C
-:101FE00020080000FD0200004080010007002200E0
-:101FF00004390000865822000D1E00007D050000F7
-:10200000428001000A00200024090200A50000000F
-:10201000FD020000428001000A00080004090000DF
-:10202000862A40000700000002052800020C280054
-:10203000102000003A1428000D010C0020080000B8
-:10204000FD02000040800100065A22000700220025
-:102050000000000000000000000000000000000080
-:102060000000000000000000000000000000000070
-:102070000000000000000000000000000000000060
-:102080000000000000000000000000000000000050
-:102090000000000000000000000000000000000040
-:1020A0000000000000000000000000000000000030
-:1020B0000000000000000000000000000000000020
-:1020C0000000000000000000000000000000000010
-:1020D0000000000000000000000000000000000000
-:1020E00000000000000000000000000000000000F0
-:1020F00000000000000000000000000000000000E0
-:1021000000000000000000000000000000000000CF
-:1021100000000000000000000000000000000000BF
-:1021200000000000000000000000000000000000AF
-:10213000000000000000000000000000000000009F
-:10214000000000000000000000000000000000008F
-:10215000000000000000000000000000000000007F
-:10216000000000000000000000000000000000006F
-:10217000000000000000000000000000000000005F
-:10218000000000000000000000000000000000004F
-:10219000000000000000000000000000000000003F
-:1021A000000000000000000000000000000000002F
-:1021B000000000000000000000000000000000001F
-:1021C000000000000000000000000000000000000F
-:1021D00000000000000000000000000000000000FF
-:1021E00000000000000000000000000000000000EF
-:1021F00000000000000000000000000000000000DF
-:1022000000000000000000000000000000000000CE
-:1022100000000000000000000000000000000000BE
-:1022200000000000000000000000000000000000AE
-:10223000000000000000000000000000000000009E
-:10224000000000000000000000000000000000008E
-:10225000000000000000000000000000000000007E
-:10226000000000000000000000000000000000006E
-:10227000000000000000000000000000000000005E
-:10228000000000000000000000000000000000004E
-:10229000000000000000000000000000000000003E
-:1022A000000000000000000000000000000000002E
-:1022B000000000000000000000000000000000001E
-:1022C000000000000000000000000000000000000E
-:1022D00000000000000000000000000000000000FE
-:1022E00000000000000000000000000000000000EE
-:1022F00000000000000000000000000000000000DE
-:1023000000000000000000000000000000000000CD
-:1023100000000000000000000000000000000000BD
-:1023200000000000000000000000000000000000AD
-:10233000000000000000000000000000000000009D
-:10234000000000000000000000000000000000008D
-:10235000000000000000000000000000000000007D
-:10236000000000000000000000000000000000006D
-:10237000000000000000000000000000000000005D
-:10238000000000000000000000000000000000004D
-:10239000000000000000000000000000000000003D
-:1023A000000000000000000000000000000000002D
-:1023B000000000000000000000000000000000001D
-:1023C000000000000000000000000000000000000D
-:1023D00000000000000000000000000000000000FD
-:1023E00000000000000000000000000000000000ED
-:1023F00000000000000000000000000000000000DD
-:1024000000000000000000000000000000000000CC
-:1024100000000000000000000000000000000000BC
-:1024200000000000000000000000000000000000AC
-:10243000000000000000000000000000000000009C
-:10244000000000000000000000000000000000008C
-:10245000000000000000000000000000000000007C
-:10246000000000000000000000000000000000006C
-:10247000000000000000000000000000000000005C
-:10248000000000000000000000000000000000004C
-:10249000000000000000000000000000000000003C
-:1024A000000000000000000000000000000000002C
-:1024B000000000000000000000000000000000001C
-:1024C000000000000000000000000000000000000C
-:1024D00000000000000000000000000000000000FC
-:1024E00000000000000000000000000000000000EC
-:1024F00000000000000000000000000000000000DC
-:1025000000000000000000000000000000000000CB
-:1025100000000000000000000000000000000000BB
-:1025200000000000000000000000000000000000AB
-:10253000000000000000000000000000000000009B
-:10254000000000000000000000000000000000008B
-:10255000000000000000000000000000000000007B
-:10256000000000000000000000000000000000006B
-:10257000000000000000000000000000000000005B
-:10258000000000000000000000000000000000004B
-:10259000000000000000000000000000000000003B
-:1025A000000000000000000000000000000000002B
-:1025B000000000000000000000000000000000001B
-:1025C000000000000000000000000000000000000B
-:1025D00000000000000000000000000000000000FB
-:1025E00000000000000000000000000000000000EB
-:1025F00000000000000000000000000000000000DB
-:1026000000000000000000000000000000000000CA
-:1026100000000000000000000000000000000000BA
-:1026200000000000000000000000000000000000AA
-:10263000000000000000000000000000000000009A
-:10264000000000000000000000000000000000008A
-:10265000000000000000000000000000000000007A
-:10266000000000000000000000000000000000006A
-:10267000000000000000000000000000000000005A
-:10268000000000000000000000000000000000004A
-:10269000000000000000000000000000000000003A
-:1026A000000000000000000000000000000000002A
-:1026B000000000000000000000000000000000001A
-:1026C000000000000000000000000000000000000A
-:1026D00000000000000000000000000000000000FA
-:1026E00000000000000000000000000000000000EA
-:1026F00000000000000000000000000000000000DA
-:1027000000000000000000000000000000000000C9
-:1027100000000000000000000000000000000000B9
-:1027200000000000000000000000000000000000A9
-:102730000000000000000000000000000000000099
-:102740000000000000000000000000000000000089
-:102750000000000000000000000000000000000079
-:102760000000000000000000000000000000000069
-:102770000000000000000000000000000000000059
-:102780000000000000000000000000000000000049
-:102790000000000000000000000000000000000039
-:1027A0000000000000000000000000000000000029
-:1027B0000000000000000000000000000000000019
-:1027C0000000000000000000000000000000000009
-:1027D00000000000000000000000000000000000F9
-:1027E00000000000000000000000000000000000E9
-:1027F00000000000000000000000000000000000D9
-:1028000000000000000000000000000000000000C8
-:1028100000000000000000000000000000000000B8
-:1028200000000000000000000000000000000000A8
-:102830000000000000000000000000000000000098
-:102840000000000000000000000000000000000088
-:102850000000000000000000000000000000000078
-:102860000000000000000000000000000000000068
-:102870000000000000000000000000000000000058
-:102880000000000000000000000000000000000048
-:102890000000000000000000000000000000000038
-:1028A0000000000000000000000000000000000028
-:1028B0000000000000000000000000000000000018
-:1028C0000000000000000000000000000000000008
-:1028D00000000000000000000000000000000000F8
-:1028E00000000000000000000000000000000000E8
-:1028F00000000000000000000000000000000000D8
-:1029000000000000000000000000000000000000C7
-:1029100000000000000000000000000000000000B7
-:1029200000000000000000000000000000000000A7
-:102930000000000000000000000000000000000097
-:102940000000000000000000000000000000000087
-:102950000000000000000000000000000000000077
-:102960000000000000000000000000000000000067
-:102970000000000000000000000000000000000057
-:102980000000000000000000000000000000000047
-:102990000000000000000000000000000000000037
-:1029A0000000000000000000000000000000000027
-:1029B0000000000000000000000000000000000017
-:1029C0000000000000000000000000000000000007
-:1029D00000000000000000000000000000000000F7
-:1029E00000000000000000000000000000000000E7
-:1029F00000000000000000000000000000000000D7
-:102A000000000000000000000000000000000000C6
-:102A100000000000000000000000000000000000B6
-:102A200000000000000000000000000000000000A6
-:102A30000000000000000000000000000000000096
-:102A40000000000000000000000000000000000086
-:102A50000000000000000000000000000000000076
-:102A60000000000000000000000000000000000066
-:102A70000000000000000000000000000000000056
-:102A80000000000000000000000000000000000046
-:102A90000000000000000000000000000000000036
-:102AA0000000000000000000000000000000000026
-:102AB0000000000000000000000000000000000016
-:102AC0000000000000000000000000000000000006
-:102AD00000000000000000000000000000000000F6
-:102AE00000000000000000000000000000000000E6
-:102AF00000000000000000000000000000000000D6
-:102B000000000000000000000000000000000000C5
-:102B100000000000000000000000000000000000B5
-:102B200000000000000000000000000000000000A5
-:102B30000000000000000000000000000000000095
-:102B40000000000000000000000000000000000085
-:102B50000000000000000000000000000000000075
-:102B60000000000000000000000000000000000065
-:102B70000000000000000000000000000000000055
-:102B80000000000000000000000000000000000045
-:102B90000000000000000000000000000000000035
-:102BA0000000000000000000000000000000000025
-:102BB0000000000000000000000000000000000015
-:102BC0000000000000000000000000000000000005
-:102BD00000000000000000000000000000000000F5
-:102BE00000000000000000000000000000000000E5
-:102BF00000000000000000000000000000000000D5
-:102C000000000000000000000000000000000000C4
-:102C100000000000000000000000000000000000B4
-:102C200000000000000000000000000000000000A4
-:102C30000000000000000000000000000000000094
-:102C40000000000000000000000000000000000084
-:102C50000000000000000000000000000000000074
-:102C60000000000000000000000000000000000064
-:102C70000000000000000000000000000000000054
-:102C80000000000000000000000000000000000044
-:102C90000000000000000000000000000000000034
-:102CA0000000000000000000000000000000000024
-:102CB0000000000000000000000000000000000014
-:102CC0000000000000000000000000000000000004
-:102CD00000000000000000000000000000000000F4
-:102CE00000000000000000000000000000000000E4
-:102CF00000000000000000000000000000000000D4
-:102D000000000000000000000000000000000000C3
-:102D100000000000000000000000000000000000B3
-:102D200000000000000000000000000000000000A3
-:102D30000000000000000000000000000000000093
-:102D40000000000000000000000000000000000083
-:102D50000000000000000000000000000000000073
-:102D60000000000000000000000000000000000063
-:102D70000000000000000000000000000000000053
-:102D80000000000000000000000000000000000043
-:102D90000000000000000000000000000000000033
-:102DA0000000000000000000000000000000000023
-:102DB0000000000000000000000000000000000013
-:102DC0000000000000000000000000000000000003
-:102DD00000000000000000000000000000000000F3
-:102DE00000000000000000000000000000000000E3
-:102DF00000000000000000000000000000000000D3
-:102E000000000000000000000000000000000000C2
-:102E100000000000000000000000000000000000B2
-:102E200000000000000000000000000000000000A2
-:102E30000000000000000000000000000000000092
-:102E40000000000000000000000000000000000082
-:102E50000000000000000000000000000000000072
-:102E60000000000000000000000000000000000062
-:102E70000000000000000000000000000000000052
-:102E80000000000000000000000000000000000042
-:102E90000000000000000000000000000000000032
-:102EA0000000000000000000000000000000000022
-:102EB0000000000000000000000000000000000012
-:102EC0000000000000000000000000000000000002
-:102ED00000000000000000000000000000000000F2
-:102EE00000000000000000000000000000000000E2
-:102EF00000000000000000000000000000000000D2
-:102F000000000000000000000000000000000000C1
-:102F100000000000000000000000000000000000B1
-:102F200000000000000000000000000000000000A1
-:102F30000000000000000000000000000000000091
-:102F40000000000000000000000000000000000081
-:102F50000000000000000000000000000000000071
-:102F60000000000000000000000000000000000061
-:102F70000000000000000000000000000000000051
-:102F80000000000000000000000000000000000041
-:102F90000000000000000000000000000000000031
-:102FA0000000000000000000000000000000000021
-:102FB0000000000000000000000000000000000011
-:102FC0000000000000000000000000000000000001
-:102FD00000000000000000000000000000000000F1
-:102FE00000000000000000000000000000000000E1
-:102FF00000000000000000000000000000000000D1
-:00000001FF
diff --git a/firmware/yamaha/yss225_registers.bin.ihex b/firmware/yamaha/yss225_registers.bin.ihex
deleted file mode 100644
index 6dd3d8c4de2b..000000000000
--- a/firmware/yamaha/yss225_registers.bin.ihex
+++ /dev/null
@@ -1,998 +0,0 @@
-:10000000FF000E100F00FF000E110F00FF000E1278
-:100010000F00FF000E130F00FF000E140F00FF0073
-:100020000E150F00FF000E160F00FF000E170F0039
-:10003000FF000E180F00FF000E190F00FF000E1A30
-:100040000F00FF000E1B0F00FF000E1C0F00FF0033
-:100050000E1D0F00FF000E1E0F00FF000E1F0F00F1
-:10006000FF000E200F00FF000E210F00FF000E22E8
-:100070000F00FF000E230F00FF000E240F00FF00F3
-:100080000E250F00FF000E260F00FF000E270F00A9
-:10009000FF000E280F00FF000E290F00FF000E2AA0
-:1000A0000F00FF000E2B0F00FF000E2C0F00FF00B3
-:1000B0000E2D0F00FF000E2E0F00FF000E2F0F0061
-:1000C000FF000E300F00FF000E310F00FF000E3258
-:1000D0000F00FF000E330F00FF000E340F00FF0073
-:1000E0000E350F00FF000E360F00FF000E370F0019
-:1000F000FF000E380F00FF000E390F00FF000E3A10
-:100100000F00FF000E3B0F00FF000E3C0F00FF0032
-:100110000E3D0F00FF000E3E0F00FF000E3F0F00D0
-:10012000FF000E400F00FF000E410F00FF000E42C7
-:100130000F00FF000E430F00FF000E440F00FF00F2
-:100140000E450F00FF000E460F00FF000E470F0088
-:10015000FF000E480F00FF000E490F00FF000E4A7F
-:100160000F00FF000E4B0F00FF000E4C0F00FF00B2
-:100170000E4D0F00FF000E4E0F00FF000E4F0F0040
-:10018000FF000E500F00FF000E510F00FF000E5237
-:100190000F00FF000E530F00FF000E540F00FF0072
-:1001A0000E550F00FF000E560F00FF000E570F00F8
-:1001B000FF000E580F00FF000E590F00FF000E5AEF
-:1001C0000F00FF000E5B0F00FF000E5C0F00FF0032
-:1001D0000E5D0F00FF000E5E0F00FF000E5F0F00B0
-:1001E000FF000E600F00FF000E610F00FF000E62A7
-:1001F0000F00FF000E630F00FF000E640F00FF00F2
-:100200000E650F00FF000E660F00FF000E670F0067
-:10021000FF000E680F00FF000E690F00FF000E6A5E
-:100220000F00FF000E6B0F00FF000E6C0F00FF00B1
-:100230000E6D0F00FF000E6E0F00FF000E6F0F001F
-:10024000FF000E700F00FF000E710F00FF000E7216
-:100250000F00FF000E730F00FF000E740F00FF0071
-:100260000E750F00FF000E760F00FF000E770F00D7
-:10027000FF000E780F00FF000E790F00FF000E7ACE
-:100280000F00FF000E7B0F00FF000E7C0F00FF0031
-:100290000E7D0F00FF000E7E0F00FF000E7F0F008F
-:1002A000FF000E800F00FF000E810F00FF000E8286
-:1002B0000F00FF000E830F00FF000E840F00FF00F1
-:1002C0000E850F00FF000E860F00FF000E870F0047
-:1002D000FF000E880F00FF000E890F00FF000E8A3E
-:1002E0000F00FF000E8B0F00FF000E8C0F00FF00B1
-:1002F0000E8D0F00FF000E8E0F00FF000E8F0F00FF
-:10030000FF000E900F00FF000E910F00FF000E92F5
-:100310000F00FF000E930F00FF000E940F00FF0070
-:100320000E950F00FF000E960F00FF000E970F00B6
-:10033000FF000E980F00FF000E990F00FF000E9AAD
-:100340000F00FF000E9B0F00FF000E9C0F00FF0030
-:100350000E9D0F00FF000E9E0F00FF000E9F0F006E
-:10036000FF000EA00F00FF000EA10F00FF000EA265
-:100370000F00FF000EA30F00FF000EA40F00FF00F0
-:100380000EA50F00FF000EA60F00FF000EA70F0026
-:10039000FF000EA80F00FF000EA90F00FF000EAA1D
-:1003A0000F00FF000EAB0F00FF000EAC0F00FF00B0
-:1003B0000EAD0F00FF000EAE0F00FF000EAF0F00DE
-:1003C000FF000EB00F00FF000EB10F00FF000EB2D5
-:1003D0000F00FF000EB30F00FF000EB40F00FF0070
-:1003E0000EB50F00FF000EB60F00FF000EB70F0096
-:1003F000FF000EB80F00FF000EB90F00FF000EBA8D
-:100400000F00FF000EBB0F00FF000EBC0F00FF002F
-:100410000EBD0F00FF000EBE0F00FF000EBF0F004D
-:10042000FF000EC00F00FF000EC10F00FF000EC244
-:100430000F00FF000EC30F00FF000EC40F00FF00EF
-:100440000EC50F00FF000EC60F00FF000EC70F0005
-:10045000FF000EC80F00FF000EC90F00FF000ECAFC
-:100460000F00FF000ECB0F00FF000ECC0F00FF00AF
-:100470000ECD0F00FF000ECE0F00FF000ECF0F00BD
-:10048000FF000ED00F00FF000ED10F00FF000ED2B4
-:100490000F00FF000ED30F00FF000ED40F00FF006F
-:1004A0000ED50F00FF000ED60F00FF000ED70F0075
-:1004B000FF000ED80F00FF000ED90F00FF000EDA6C
-:1004C0000F00FF000EDB0F00FF000EDC0F00FF002F
-:1004D0000EDD0F00FF000EDE0F00FF000EDF0F002D
-:1004E000FF000EE00F00FF000EE10F00FF000EE224
-:1004F0000F00FF000EE30F00FF000EE40F00FF00EF
-:100500000EE50F00FF000EE60F00FF000EE70F00E4
-:10051000FF000EE80F00FF000EE90F00FF000EEADB
-:100520000F00FF000EEB0F00FF000EEC0F00FF00AE
-:100530000EED0F00FF000EEE0F00FF000EEF0F009C
-:10054000FF000EF00F00FF000EF10F00FF000EF293
-:100550000F00FF000EF30F00FF000EF40F00FF006E
-:100560000EF50F00FF000EF60F00FF000EF70F0054
-:10057000FF000EF80F00FF000EF90F00FF000EFA4B
-:100580000F00FF000EFB0F00FF000EFC0F00FF002E
-:100590000EFD0F00FF000EFE0F00FF000EFF0F000C
-:1005A000FF000E100F00FF000E110F00FF000E12D3
-:1005B0000F00FF000E130F00FF000E140F00FF00CE
-:1005C0000E150F00FF000E160F00FF000E170F0094
-:1005D000FF000E180F00FF000E190F00FF000E1A8B
-:1005E0000F00FF000E1B0F00FF000E1C0F00FF008E
-:1005F0000E1D0F00FF000E1E0F00FF000E1F0F004C
-:10060000FF000E200F00FF000E210F00FF000E2242
-:100610000F00FF000E230F00FF000E240F00FF004D
-:100620000E250F00FF000E260F00FF000E270F0003
-:10063000FF000E280F00FF000E290F00FF000E2AFA
-:100640000F00FF000E2B0F00FF000E2C0F00FF000D
-:100650000E2D0F00FF000E2E0F00FF000E2F0F00BB
-:10066000FF000E300F00FF000E310F00FF000E32B2
-:100670000F00FF000E330F00FF000E340F00FF00CD
-:100680000E350F00FF000E360F00FF000E370F0073
-:10069000FF000E380F00FF000E390F00FF000E3A6A
-:1006A0000F00FF000E3B0F00FF000E3C0F00FF008D
-:1006B0000E3D0F00FF000E3E0F00FF000E3F0F002B
-:1006C000FF000E400F00FF000E410F00FF000E4222
-:1006D0000F00FF000E430F00FF000E440F00FF004D
-:1006E0000E450F00FF000E460F00FF000E470F00E3
-:1006F000FF000E480F00FF000E490F00FF000E4ADA
-:100700000F00FF000E4B0F00FF000E4C0F00FF000C
-:100710000E4D0F00FF000E4E0F00FF000E4F0F009A
-:10072000FF000E500F00FF000E510F00FF000E5291
-:100730000F00FF000E530F00FF000E540F00FF00CC
-:100740000E550F00FF000E560F00FF000E570F0052
-:10075000FF000E580F00FF000E590F00FF000E5A49
-:100760000F00FF000E5B0F00FF000E5C0F00FF008C
-:100770000E5D0F00FF000E5E0F00FF000E5F0F000A
-:10078000FF000E600F00FF000E610F00FF000E6201
-:100790000F00FF000E630F00FF000E640F00FF004C
-:1007A0000E650F00FF000E660F00FF000E670F00C2
-:1007B000FF000E680F00FF000E690F00FF000E6AB9
-:1007C0000F00FF000E6B0F00FF000E6C0F00FF000C
-:1007D0000E6D0F00FF000E6E0F00FF000E6F0F007A
-:1007E000FF000E700F00FF000E710F00FF000E7271
-:1007F0000F00FF000E730F00FF000E740F00FF00CC
-:100800000E750F00FF000E760F00FF000E770F0031
-:10081000FF000E780F00FF000E790F00FF000E7A28
-:100820000F00FF000E7B0F00FF000E7C0F00FF008B
-:100830000E7D0F00FF000E7E0F00FF000E7F0F00E9
-:10084000FF000E800F00FF000E810F00FF000E82E0
-:100850000F00FF000E830F00FF000E840F00FF004B
-:100860000E850F00FF000E860F00FF000E870F00A1
-:10087000FF000E880F00FF000E890F00FF000E8A98
-:100880000F00FF000E8B0F00FF000E8C0F00FF000B
-:100890000E8D0F00FF000E8E0F00FF000E8F0F0059
-:1008A000FF000E900F00FF000E910F00FF000E9250
-:1008B0000F00FF000E930F00FF000E940F00FF00CB
-:1008C0000E950F00FF000E960F00FF000E970F0011
-:1008D000FF000E980F00FF000E990F00FF000E9A08
-:1008E0000F00FF000E9B0F00FF000E9C0F00FF008B
-:1008F0000E9D0F00FF000E9E0F00FF000E9F0F00C9
-:10090000FF000EA00F00FF000EA10F00FF000EA2BF
-:100910000F00FF000EA30F00FF000EA40F00FF004A
-:100920000EA50F00FF000EA60F00FF000EA70F0080
-:10093000FF000EA80F00FF000EA90F00FF000EAA77
-:100940000F00FF000EAB0F00FF000EAC0F00FF000A
-:100950000EAD0F00FF000EAE0F00FF000EAF0F0038
-:10096000FF000EB00F00FF000EB10F00FF000EB22F
-:100970000F00FF000EB30F00FF000EB40F00FF00CA
-:100980000EB50F00FF000EB60F00FF000EB70F00F0
-:10099000FF000EB80F00FF000EB90F00FF000EBAE7
-:1009A0000F00FF000EBB0F00FF000EBC0F00FF008A
-:1009B0000EBD0F00FF000EBE0F00FF000EBF0F00A8
-:1009C000FF000EC00F00FF000EC10F00FF000EC29F
-:1009D0000F00FF000EC30F00FF000EC40F00FF004A
-:1009E0000EC50F00FF000EC60F00FF000EC70F0060
-:1009F000FF000EC80F00FF000EC90F00FF000ECA57
-:100A00000F00FF000ECB0F00FF000ECC0F00FF0009
-:100A10000ECD0F00FF000ECE0F00FF000ECF0F0017
-:100A2000FF000ED00F00FF000ED10F00FF000ED20E
-:100A30000F00FF000ED30F00FF000ED40F00FF00C9
-:100A40000ED50F00FF000ED60F00FF000ED70F00CF
-:100A5000FF000ED80F00FF000ED90F00FF000EDAC6
-:100A60000F00FF000EDB0F00FF000EDC0F00FF0089
-:100A70000EDD0F00FF000EDE0F00FF000EDF0F0087
-:100A8000FF000EE00F00FF000EE10F00FF000EE27E
-:100A90000F00FF000EE30F00FF000EE40F00FF0049
-:100AA0000EE50F00FF000EE60F00FF000EE70F003F
-:100AB000FF000EE80F00FF000EE90F00FF000EEA36
-:100AC0000F00FF000EEB0F00FF000EEC0F00FF0009
-:100AD0000EED0F00FF000EEE0F00FF000EEF0F00F7
-:100AE000FF000EF00F00FF000EF10F00FF000EF2EE
-:100AF0000F00FF000EF30F00FF000EF40F00FF00C9
-:100B00000EF50F00FF000EF60F00FF000EF70F00AE
-:100B1000FF000EF80F00FF000EF90F00FF000EFAA5
-:100B20000F00FF000EFB0F00FF000EFC0F00FF0088
-:100B30000EFD0F00FF000EFE0F00FF000EFF0F0066
-:100B4000FF000802FF000B070A440D000C00FF0025
-:100B50000B070A420D000C00FF000B070A430D00B3
-:100B60000C00FF000B070A7C0D000C00FF000B07B8
-:100B70000A7E0D000C00FF000B070A460D000C005A
-:100B8000FF000B070A490D000C00FF000B070A4786
-:100B90000D000C00FF000B070A4A0D000C00FF00BF
-:100BA0000E100F00FF000E110F00FF000E120F00BD
-:100BB000FF000E130F00FF000E140F00FF000E15B4
-:100BC0000F00FF000E160F00FF000E170F00FF00B2
-:100BD0000E180F00FF000E190F00FF000E1A0F0075
-:100BE000FF000E1B0F00FF000E1C0F00FF000E1D6C
-:100BF0000F00FF000E1E0F00FF000E1F0F00FF0072
-:100C00000E200F00FF000E210F00FF000E220F002C
-:100C1000FF000E230F00FF000E240F00FF000E2523
-:100C20000F00FF000E260F00FF000E270F00FF0031
-:100C30000E280F00FF000E290F00FF000E2A0F00E4
-:100C4000FF000E2B0F00FF000E2C0F00FF000E2DDB
-:100C50000F00FF000E2E0F00FF000E2F0F00FF00F1
-:100C60000E300F00FF000E310F00FF000E320F009C
-:100C7000FF000E330F00FF000E340F00FF000E3593
-:100C80000F00FF000E360F00FF000E370F00FF00B1
-:100C90000E380F00FF000E390F00FF000E3A0F0054
-:100CA000FF000E3B0F00FF000E3C0F00FF000E3D4B
-:100CB0000F00FF000E3E0F00FF000E3F0F00FF0071
-:100CC0000E400F00FF000E410F00FF000E420F000C
-:100CD000FF000E430F00FF000E440F00FF000E4503
-:100CE0000F00FF000E460F00FF000E470F00FF0031
-:100CF0000E480F00FF000E490F00FF000E4A0F00C4
-:100D0000FF000E4B0F00FF000E4C0F00FF000E4DBA
-:100D10000F00FF000E4E0F00FF000E4F0F00FF00F0
-:100D20000E500F00FF000E510F00FF000E520F007B
-:100D3000FF000E530F00FF000E540F00FF000E5572
-:100D40000F00FF000E560F00FF000E570F00FF00B0
-:100D50000E580F00FF000E590F00FF000E5A0F0033
-:100D6000FF000E5B0F00FF000E5C0F00FF000E5D2A
-:100D70000F00FF000E5E0F00FF000E5F0F00FF0070
-:100D80000E600F00FF000E610F00FF000E620F00EB
-:100D9000FF000E630F00FF000E640F00FF000E65E2
-:100DA0000F00FF000E660F00FF000E670F00FF0030
-:100DB0000E680F00FF000E690F00FF000E6A0F00A3
-:100DC000FF000E6B0F00FF000E6C0F00FF000E6D9A
-:100DD0000F00FF000E6E0F00FF000E6F0F00FF00F0
-:100DE0000E700F00FF000E710F00FF000E720F005B
-:100DF000FF000E730F00FF000E740F00FF000E7552
-:100E00000F00FF000E760F00FF000E770F00FF00AF
-:100E10000E780F00FF000E790F00FF000E7A0F0012
-:100E2000FF000E7B0F00FF000E7C0F00FF000E7D09
-:100E30000F00FF000E7E0F00FF000E7F0F00FF006F
-:100E40000E800F00FF000E810F00FF000E820F00CA
-:100E5000FF000E830F00FF000E840F00FF000E85C1
-:100E60000F00FF000E860F00FF000E870F00FF002F
-:100E70000E880F00FF000E890F00FF000E8A0F0082
-:100E8000FF000E8B0F00FF000E8C0F00FF000E8D79
-:100E90000F00FF000E8E0F00FF000E8F0F00FF00EF
-:100EA0000E900F00FF000E910F00FF000E920F003A
-:100EB000FF000E930F00FF000E940F00FF000E9531
-:100EC0000F00FF000E960F00FF000E970F00FF00AF
-:100ED0000E980F00FF000E990F00FF000E9A0F00F2
-:100EE000FF000E9B0F00FF000E9C0F00FF000E9DE9
-:100EF0000F00FF000E9E0F00FF000E9F0F00FF006F
-:100F00000EA00F00FF000EA10F00FF000EA20F00A9
-:100F1000FF000EA30F00FF000EA40F00FF000EA5A0
-:100F20000F00FF000EA60F00FF000EA70F00FF002E
-:100F30000EA80F00FF000EA90F00FF000EAA0F0061
-:100F4000FF000EAB0F00FF000EAC0F00FF000EAD58
-:100F50000F00FF000EAE0F00FF000EAF0F00FF00EE
-:100F60000EB00F00FF000EB10F00FF000EB20F0019
-:100F7000FF000EB30F00FF000EB40F00FF000EB510
-:100F80000F00FF000EB60F00FF000EB70F00FF00AE
-:100F90000EB80F00FF000EB90F00FF000EBA0F00D1
-:100FA000FF000EBB0F00FF000EBC0F00FF000EBDC8
-:100FB0000F00FF000EBE0F00FF000EBF0F00FF006E
-:100FC0000EC00F00FF000EC10F00FF000EC20F0089
-:100FD000FF000EC30F00FF000EC40F00FF000EC580
-:100FE0000F00FF000EC60F00FF000EC70F00FF002E
-:100FF0000EC80F00FF000EC90F00FF000ECA0F0041
-:10100000FF000ECB0F00FF000ECC0F00FF000ECD37
-:101010000F00FF000ECE0F00FF000ECF0F00FF00ED
-:101020000ED00F00FF000ED10F00FF000ED20F00F8
-:10103000FF000ED30F00FF000ED40F00FF000ED5EF
-:101040000F00FF000ED60F00FF000ED70F00FF00AD
-:101050000ED80F00FF000ED90F00FF000EDA0F00B0
-:10106000FF000EDB0F00FF000EDC0F00FF000EDDA7
-:101070000F00FF000EDE0F00FF000EDF0F00FF006D
-:101080000EE00F00FF000EE10F00FF000EE20F0068
-:10109000FF000EE30F00FF000EE40F00FF000EE55F
-:1010A0000F00FF000EE60F00FF000EE70F00FF002D
-:1010B0000EE80F00FF000EE90F00FF000EEA0F0020
-:1010C000FF000EEB0F00FF000EEC0F00FF000EED17
-:1010D0000F00FF000EEE0F00FF000EEF0F00FF00ED
-:1010E0000EF00F00FF000EF10F00FF000EF20F00D8
-:1010F000FF000EF30F00FF000EF40F00FF000EF5CF
-:101100000F00FF000EF60F00FF000EF70F00FF00AC
-:101110000EF80F00FF000EF90F00FF000EFA0F008F
-:10112000FF000EFB0F00FF000EFC0F00FF000EFD86
-:101130000F00FF000EFE0F00FF000EFF0F0009055D
-:101140000B000A000D010C7CFF000D000C1EFF00BF
-:101150000D000C00FF000D000C00FF000D000CF551
-:10116000FF000D000C11FF000D000C20FF000D0012
-:101170000C32FF000D000C40FF000D000C13FF00AF
-:101180000D000C00FF000D000C14FF000D020C768A
-:10119000FF000D000C60FF000D000C80FF000D0231
-:1011A0000C00FF000D000C00FF000D000C00FF0004
-:1011B0000D020C00FF000D000C00FF000D000C00E4
-:1011C000FF000D000C00FF000D000C00FF000D00E3
-:1011D0000C00FF000D000C00FF000D000C00FF00D4
-:1011E0000D000C00FF000D000C00FF000D000C00B6
-:1011F000FF000D000C00FF000D000C00FF000D00B3
-:101200000C00FF000D000C00FF000D000C00FF00A3
-:101210000D000C00FF000D000C00FF000D000C0085
-:10122000FF000D000C00FF000D000C00FF000D0082
-:101230000C00FF000D000C00FF000D000C00FF0073
-:101240000D000C00FF000D000C00FF000D000C0055
-:10125000FF000D000C00FF000D000C00FF000D0052
-:101260000C00FF000D000C00FF000D000C00FF0043
-:101270000D000C00FF000D000C00FF000D000C0025
-:10128000FF000D000C00FF000D000C00FF000D0022
-:101290000C00FF000D000C00FF000D000C00FF0013
-:1012A0000D000C00FF000D000C00FF000D000C00F5
-:1012B000FF000D000C00FF000D000C00FF000D00F2
-:1012C0000C00FF000D000C18FF000D000C19FF00B2
-:1012D0000D010C1AFF000D010C20FF000D010C4048
-:1012E000FF000D010C17FF000D000C00FF000D01A9
-:1012F0000C80FF000D010C20FF000D000C10FF0002
-:101300000D010CA0FF000D030CD1FF000D000C001F
-:10131000FF000D010CF2FF000D020C00FF000D009C
-:101320000C13FF000D000C00FF000D000CF4FF007B
-:101330000D020CE0FF000D000C15FF000D000C006D
-:10134000FF000D000C16FF000D000C00FF000D004B
-:101350000C17FF000D000C20FF000D000C00FF001B
-:101360000D000C20FF000D000C50FF000D000C00C4
-:10137000FF000D000C40FF000D000C00FF000D00F1
-:101380000C71FF000D020C00FF000D000C60FF004F
-:101390000D000C00FF000D000C92FF000D000C0072
-:1013A000FF000D000C80FF000D000C00FF000D0081
-:1013B0000CB3FF000D020C00FF000D000CA0FF009D
-:1013C0000D000C00FF000D000CD4FF000D000C0000
-:1013D000FF000D000C40FF000D000C80FF000D0011
-:1013E0000CF5FF000D000C20FF000D000C70FF003D
-:1013F0000D000CA0FF000D020C11FF000D000C16DB
-:10140000FF000D000C00FF000D000C00FF000D00A0
-:101410000C00FF000D000C20FF000D020C00FF006F
-:101420000D000C20FF000D000C10FF000D000C172C
-:10143000FF000D000C1BFF000D000C1DFF000D0236
-:101440000CDFFF0009050B010A000D000C00FF0076
-:101450000D000C00FF000D000C00FF000D020C0041
-:10146000FF000D000C19FF000D000C1FFF000D0008
-:101470000C00FF000D000C00FF000D000C00FF0031
-:101480000D030CD8FF000D000C00FF000D020C2016
-:10149000FF000D000C19FF000D000C00FF000D00F7
-:1014A0000C00FF000D000C18FF000D010CC0FF0028
-:1014B0000D010CFAFF000D000C1AFF000D000C00CE
-:1014C000FF000D000C00FF000D000C00FF000D00E0
-:1014D0000C00FF000D000C00FF000D000C00FF00D1
-:1014E0000D000C00FF000D000C00FF000D000C00B3
-:1014F000FF000D000C00FF000D000C00FF000D00B0
-:101500000C00FF000D000C00FF000D000C00FF00A0
-:101510000D000C00FF000D000C00FF000D000C0082
-:10152000FF000D000C00FF000D000C00FF000D007F
-:101530000C00FF000D000C00FF000D000C00FF0070
-:101540000D000C00FF000D000C00FF000D000C0052
-:10155000FF000D000C00FF000D000C00FF000D004F
-:101560000C00FF000D000C00FF000D000C00FF0040
-:101570000D000C00FF000D000C00FF000D000C0022
-:10158000FF000D000C00FF000D000C00FF000D001F
-:101590000C00FF000D000C00FF000D000C00FF0010
-:1015A0000D000C00FF000D000C00FF000D000C00F2
-:1015B000FF000D000C00FF000D000C00FF000D00EF
-:1015C0000C00FF000D000C00FF000D020C40FF009E
-:1015D0000D020C60FF000D000C00FF000D000C0060
-:1015E000FF000D000C00FF000D020CC0FF000D02FB
-:1015F0000C80FF000D000C00FF000D020CFBFF0033
-:101600000D020CA0FF000D000C00FF000D000C1BD4
-:10161000FF000D020CD7FF000D000C00FF000D02B3
-:101620000CF7FF000D030C20FF000D030C00FF0062
-:101630000D000C00FF000D000C1CFF000D030C3C06
-:10164000FF000D000C00FF000D030C3FFF000D001C
-:101650000C00FF000D030CC0FF000D000C00FF008C
-:101660000D030CDFFF000D000C00FF000D000C004F
-:10167000FF000D030C5DFF000D000C00FF000D03CB
-:101680000CC0FF000D000C00FF000D030C7DFF00DF
-:101690000D000C00FF000D030CC0FF000D000C003E
-:1016A000FF000D030C9EFF000D000C00FF000D035A
-:1016B0000CC0FF000D000C00FF000D030CBEFF006E
-:1016C0000D000C00FF000D030CC0FF000D000C000E
-:1016D000FF000D000C00FF000D000C00FF000D00CE
-:1016E0000C00FF000D000C1BFF000D000C00FF00A4
-:1016F0000D000C00FF000D000C00FF000D020CDBC4
-:10170000FF000D000C00FF000D020CDBFF000D00C0
-:101710000C00FF000D020CE0FF000D000C00FF00AC
-:101720000D020CFBFF000D000C00FF000D020CC0B1
-:10173000FF000D020C40FF000D020CFBFF000D022C
-:101740000C60FF000D000C1BFF0009050B020A00D6
-:101750000CC4FF000C00FF000C44FF000C07FF004E
-:101760000C44FF000C00FF000C40FF000C25FF00A4
-:101770000C01FF000C06FF000CC4FF000C07FF006B
-:101780000C40FF000C25FF000C01FF000C00FF00C7
-:101790000C46FF000C46FF000C00FF000C00FF0091
-:1017A0000C00FF000C00FF000C00FF000C00FF000D
-:1017B0000C00FF000C00FF000C00FF000C00FF00FD
-:1017C0000C00FF000C00FF000C00FF000C00FF00ED
-:1017D0000C00FF000C00FF000C00FF000C00FF00DD
-:1017E0000C00FF000C00FF000C00FF000C00FF00CD
-:1017F0000C00FF000C00FF000C00FF000C00FF00BD
-:101800000C00FF000C00FF000C00FF000C00FF00AC
-:101810000C00FF000C00FF000C00FF000C00FF009C
-:101820000C00FF000C00FF000C00FF000C00FF008C
-:101830000C00FF000C00FF000C00FF000C00FF007C
-:101840000C00FF000C00FF000C00FF000C00FF006C
-:101850000C46FF000C07FF000C05FF000C05FF0005
-:101860000C05FF000C04FF000C07FF000C05FF0037
-:101870000C04FF000C07FF000C05FF000C44FF00E8
-:101880000C46FF000C44FF000C46FF000C46FF0016
-:101890000C07FF000C05FF000C44FF000C46FF0086
-:1018A0000C05FF000C46FF000C05FF000C46FF0076
-:1018B0000C05FF000C46FF000C05FF000C44FF0068
-:1018C0000C46FF000C05FF000C07FF000C44FF0056
-:1018D0000C46FF000C05FF000C07FF000C44FF0046
-:1018E0000C46FF000C05FF000C07FF000C44FF0036
-:1018F0000C46FF000C05FF000C07FF000C44FF0026
-:101900000C05FF000C05FF000C05FF000C44FF0058
-:101910000C05FF000C05FF000C05FF000C46FF0046
-:101920000C05FF000C46FF000C05FF000C46FF00F5
-:101930000C05FF000C46FF000C05FF000C46FF00E5
-:101940000C07FF000C46FF000C07FF000C44FF00D3
-:1019500009050B030A000C07FF000C40FF000C00F8
-:10196000FF000C00FF000C00FF000C47FF000C0004
-:10197000FF000C40FF000C00FF000C40FF000C06B5
-:10198000FF000C40FF000C00FF000C00FF000C00EB
-:10199000FF000C00FF000C00FF000C00FF000C001B
-:1019A000FF000C00FF000C00FF000C00FF000C000B
-:1019B000FF000C00FF000C00FF000C00FF000C00FB
-:1019C000FF000C00FF000C00FF000C00FF000C00EB
-:1019D000FF000C00FF000C00FF000C00FF000C00DB
-:1019E000FF000C00FF000C00FF000C00FF000C00CB
-:1019F000FF000C00FF000C00FF000C00FF000C00BB
-:101A0000FF000C00FF000C00FF000C00FF000C00AA
-:101A1000FF000C00FF000C00FF000C00FF000C009A
-:101A2000FF000C00FF000C00FF000C00FF000C008A
-:101A3000FF000C00FF000C00FF000C00FF000C007A
-:101A4000FF000C00FF000C00FF000C00FF000C006A
-:101A5000FF000C00FF000C80FF000C80FF000CC09A
-:101A6000FF000C00FF000C00FF000C40FF000C000A
-:101A7000FF000C00FF000C00FF000C40FF000C00FA
-:101A8000FF000C40FF000C00FF000C60FF000C008A
-:101A9000FF000C70FF000C00FF000C40FF000C006A
-:101AA000FF000C40FF000C00FF000C42FF000C0088
-:101AB000FF000C40FF000C00FF000C02FF000C00B8
-:101AC000FF000C40FF000C00FF000C00FF000C00AA
-:101AD000FF000C40FF000C00FF000C00FF000C009A
-:101AE000FF000C40FF000C00FF000C00FF000C008A
-:101AF000FF000C40FF000C00FF000C00FF000C007A
-:101B0000FF000C40FF000C00FF000C00FF000C0069
-:101B1000FF000C42FF000C00FF000C40FF000C0017
-:101B2000FF000C42FF000C00FF000C02FF000C0045
-:101B3000FF000C02FF000C00FF000C02FF000C0075
-:101B4000FF000C42FF000C00FF000CC0FF000C0067
-:101B5000FF000C40FF0009050B040A000C63FF00A6
-:101B60000C03FF000C26FF000C02FF000C2CFF00F2
-:101B70000C00FF000C24FF000C00FF000C2EFF00E7
-:101B80000C02FF000C02FF000C02FF000C00FF0023
-:101B90000C00FF000C00FF000C00FF000C00FF0019
-:101BA0000C00FF000C00FF000C00FF000C00FF0009
-:101BB0000C00FF000C00FF000C00FF000C00FF00F9
-:101BC0000C00FF000C00FF000C00FF000C00FF00E9
-:101BD0000C00FF000C00FF000C00FF000C00FF00D9
-:101BE0000C00FF000C00FF000C00FF000C00FF00C9
-:101BF0000C00FF000C00FF000C00FF000C00FF00B9
-:101C00000C00FF000C00FF000C00FF000C00FF00A8
-:101C10000C00FF000C00FF000C00FF000C00FF0098
-:101C20000C00FF000C00FF000C00FF000C00FF0088
-:101C30000C00FF000C00FF000C00FF000C00FF0078
-:101C40000C00FF000C00FF000C00FF000C00FF0068
-:101C50000C00FF000C00FF000C00FF000C00FF0058
-:101C60000C01FF000C20FF000C00FF000C60FF00C7
-:101C70000C00FF000C20FF000C00FF000C20FF00F8
-:101C80000C00FF000C20FF000C00FF000C20FF00E8
-:101C90000C00FF000C20FF000C00FF000C20FF00D8
-:101CA0000C00FF000C20FF000C00FF000C20FF00C8
-:101CB0000C00FF000C60FF000C00FF000C20FF0078
-:101CC0000C00FF000C60FF000C00FF000C20FF0068
-:101CD0000C00FF000C60FF000C00FF000C20FF0058
-:101CE0000C00FF000C60FF000C00FF000C20FF0048
-:101CF0000C00FF000C60FF000C00FF000C20FF0038
-:101D00000C00FF000C60FF000C00FF000C20FF0027
-:101D10000C00FF000C20FF000C00FF000C22FF0055
-:101D20000C02FF000C22FF000C02FF000C20FF0041
-:101D30000C00FF000C60FF000C00FF000C22FF00F5
-:101D40000C02FF000C62FF000C02FF000C20FF00E1
-:101D50000C01FF000C21FF000C01FF0009010B0624
-:101D60000A000D000C00FF000A020D000C00FF002D
-:101D70000A040D000C00FF000A060D000C00FF0015
-:101D80000A080D000C00FF000A0A0D000C00FF00FD
-:101D90000A0C0D000C00FF000A0E0D000C00FF00E5
-:101DA0000A100D000C00FF000A120D000C00FF00CD
-:101DB0000A140D000C00FF000A160D000C00FF00B5
-:101DC0000A180D000C00FF000A1A0D000C00FF009D
-:101DD0000A1C0D000C00FF000A1E0D000C00FF0085
-:101DE0000A200D000C00FF000A220D000C00FF006D
-:101DF0000A240D000C00FF000A260D000C00FF0055
-:101E00000A280D000C00FF000A2A0D000C00FF003C
-:101E10000A2C0D000C00FF000A2E0D000C00FF0024
-:101E20000A300D000C00FF000A320D000C00FF000C
-:101E30000A340D000C00FF000A360D000C00FF00F4
-:101E40000A380D000C00FF000A3A0D000C00FF00DC
-:101E50000A3C0D000C00FF000A3E0D000C00FF00C4
-:101E60000A400D000C00FF000A420D030C00FF00A9
-:101E70000A440D010C00FF000A460D0A0C21FF0068
-:101E80000A480D0D0C23FF000A4A0D230C1BFF000E
-:101E90000A4C0D370C8FFF000A4E0D450C77FF00E2
-:101EA0000A500D520CE2FF000A520D1C0C92FF006A
-:101EB0000A540D1C0C52FF000A560D070C00FF00BF
-:101EC0000A580D2F0CC6FF000A5A0D0B0C00FF001C
-:101ED0000A5C0D300C06FF000A5E0D170C00FF00B7
-:101EE0000A600D3D0CDAFF000A620D290C00FF00AC
-:101EF0000A640D3E0C41FF000A660D390C00FF001C
-:101F00000A680D4C0C48FF000A6A0D490C00FF00DE
-:101F10000A6C0D4C0C6CFF000A6E0D110CD2FF0008
-:101F20000A700D160C0CFF000A720D000C00FF0069
-:101F30000A740D000C80FF000A760D0F0C00FF00E4
-:101F40000A780D000C80FF000A7A0D130C00FF00C8
-:101F50000A7C0D800C00FF000A7E0D800C80FF00C3
-:101F600009050B070A000D0F0CFFFF000D000C0008
-:101F7000FF000D080C00FF000D080C00FF000D0213
-:101F80000C00FF000D000C00FF000D000C00FF0016
-:101F90000D0F0CFFFF000D000C00FF000D000C00EA
-:101FA000FF000D080C00FF000D080C00FF000D00E5
-:101FB0000C00FF000D0F0CFFFF000D000C00FF00D8
-:101FC0000D000C00FF000D0F0CFFFF000D0F0CFFAC
-:101FD000FF000D000C00FF000D000C00FF000D00C5
-:101FE0000C00FF000D000C00FF000D000C00FF00B6
-:101FF0000D000C00FF000D000C00FF000D000C0098
-:10200000FF000D000C00FF000D000C00FF000D0094
-:102010000C00FF000D000C00FF000D000C00FF0085
-:102020000D000C00FF000D000C00FF000D000C0067
-:10203000FF000D000C00FF000D000C00FF000D0064
-:102040000C00FF000D000C00FF000D000C00FF0055
-:102050000D000C00FF000D000C00FF000D000C0037
-:10206000FF000D000C00FF000D000C00FF000D0034
-:102070000C00FF000D000C00FF000D000C00FF0025
-:102080000D000C00FF000D000C00FF000D000C0007
-:10209000FF000D000C00FF000D000C00FF000D0004
-:1020A0000C00FF000D000C00FF000D000C00FF00F5
-:1020B0000D000C00FF000D000C00FF000D000C00D7
-:1020C000FF000D000C00FF000D000C00FF000D00D4
-:1020D0000C00FF000D000C00FF000D000C00FF00C5
-:1020E0000D000C00FF000D000C00FF000D000C00A7
-:1020F000FF000D000C00FF000D000C00FF000D00A4
-:102100000C00FF000D000C00FF000D000C00FF0094
-:102110000D000C00FF000D000C00FF000D000C0076
-:10212000FF000D000C00FF000D0F0CFFFF000D0F56
-:102130000CFFFF000D0F0CFFFF000D0F0CFFFF0049
-:102140000D020CE9FF000D060C8CFF000D060C8C37
-:10215000FF000D0F0CFFFF000D1A0C75FF000D0D99
-:102160000C8BFF000D040CE9FF000D0B0C16FF009B
-:102170000D1A0C38FF000D0D0CC8FF000D040C6F7C
-:10218000FF000D0B0C91FF000D0F0CFFFF000D0663
-:102190000C40FF000D060C40FF000D020C8FFF00ED
-:1021A0000D0F0CFFFF000D060C62FF000D060C6208
-:1021B000FF000D020C7BFF000D0F0CFFFF000D0652
-:1021C0000C97FF000D060C97FF000D020C52FF004C
-:1021D0000D0F0CFFFF000D060CF6FF000D060CF6B0
-:1021E000FF000D020C19FF000D050C55FF000D0539
-:1021F0000C55FF000D050C55FF000D050C55FF009B
-:102200000D050C55FF000D050C55FF000D050C5577
-:10221000FF000D050C55FF000D140CDAFF000D0D2D
-:102220000C93FF000D040CDAFF000D050C93FF006A
-:102230000D140CDAFF000D0D0C93FF000D040CDAE9
-:10224000FF000D050C93FF000D000C00FF000D00BA
-:102250000C00FF000D000C00FF000D000C00FF0043
-:102260000D020C00FF000E010F00FF000E020F0018
-:10227000FF000E010F01FF000E020F00FF000E0114
-:102280000F02FF000E020F00FF000E010F03FF0000
-:102290000E020F00FF000E010F04FF000E020F00E0
-:1022A000FF000E010F05FF000E020F00FF000E01E0
-:1022B0000F06FF000E020F00FF000E010F07FF00C8
-:1022C0000E020F00FF000E010F08FF000E020F00AC
-:1022D000FF000E010F09FF000E020F00FF000E01AC
-:1022E0000F0AFF000E020F00FF000E010F0BFF0090
-:1022F0000E020F00FF000E010F0CFF000E020F0078
-:10230000FF000E010F0DFF000E020F00FF000E0177
-:102310000F0EFF000E020F00FF000E010F0FFF0057
-:102320000E020F00FF000EB00F20FF000EB10F20B5
-:10233000FF000EB20F20FF000EB30F20FF000EB4FF
-:102340000F20FF000EB50F20FF000EB60F20FF007C
-:102350000EB70F20FF000EB80F20FF000EB90F20A0
-:10236000FF000EBA0F20FF000EBB0F20FF000EBCB7
-:102370000F20FF000EBD0F20FF000EBE0F20FF003C
-:102380000EBF0F20FF000EF00F20FF000EF10F20F8
-:10239000FF000EF20F20FF000EF30F20FF000EF4DF
-:1023A0000F20FF000EF50F20FF000EF60F20FF009C
-:1023B0000EF70F20FF000EF80F20FF000EF90F2080
-:1023C000FF000EFA0F20FF000EFB0F20FF000EFC97
-:1023D0000F20FF000EFD0F20FF000EFE0F20FF005C
-:1023E0000EFF0F20FF000E100FFFFF000E110FFF5A
-:1023F000FF000E120FFFFF000E130FFFFF000E1461
-:102400000FFFFF000E150FFFFF000E160FFFFF005E
-:102410000E170FFFFF000E180FFFFF000E190FFF22
-:10242000FF000E1A0FFFFF000E1B0FFFFF000E1C18
-:102430000FFFFF000E1D0FFFFF000E1E0F40FF00DD
-:102440000E1F0FFFFF000E200FFFFF000E210FFFDA
-:10245000FF000E220FFFFF000E230FFFFF000E24D0
-:102460000FFFFF000E250FFFFF000E260FFFFF00DE
-:102470000E270FFFFF000E280FFFFF000E290FFF92
-:10248000FF000E2A0FFFFF000E2B0FFFFF000E2C88
-:102490000FFFFF000E2D0FFFFF000E2E0F00FF009D
-:1024A0000E2F0F00FF000E300F00FF000E310F0047
-:1024B000FF000E320F00FF000E330F00FF000E343E
-:1024C0000F00FF000E350F00FF000E360F00FF005B
-:1024D0000E370F00FF000E380F00FF000E390F00FF
-:1024E000FF000E3A0F00FF000E3B0F00FF000E3CF6
-:1024F0000F00FF000E3D0F00FF000E3E0F00FF001B
-:102500000E3F0F20FF000E400F00FF000E410F0096
-:10251000FF000E420F00FF000E430F00FF000E44AD
-:102520000F00FF000E450F00FF000E460F00FF00DA
-:102530000E470F00FF000E480F00FF000E490F006E
-:10254000FF000E4A0F00FF000E4B0F00FF000E4C65
-:102550000F00FF000E4D0F00FF000E4E0F0EFF008C
-:102560000E4F0F0EFF000E500F00FF000E510F0018
-:10257000FF000E520F00FF000E530F00FF000E541D
-:102580000F00FF000E550F00FF000E560F00FF005A
-:102590000E570F00FF000E580F00FF000E590F00DE
-:1025A000FF000E5A0F00FF000E5B0F00FF000E5CD5
-:1025B0000F00FF000E5D0F00FF000E5E0F00FF001A
-:1025C0000E5F0F00FF000E600F00FF000E610F0096
-:1025D000FF000E620F00FF000E630F00FF000E648D
-:1025E0000F00FF000E650F00FF000E660F00FF00DA
-:1025F0000E670F00FF000E680F00FF000E690F004E
-:10260000FF000E6A0F00FF000E6B0F00FF000E6C44
-:102610000F40FF000E6D0F00FF000E6E0F40FF0019
-:102620000E6F0F40FF000E700FC0FF000E710FC045
-:10263000FF000E720FC0FF000E730FC0FF000E747C
-:102640000FC0FF000E750FC0FF000E760FC0FF0019
-:102650000E770FC0FF000E780FC0FF000E790FC07D
-:10266000FF000E7A0FC0FF000E7B0FC0FF000E7C34
-:102670000FC0FF000E7D0FC0FF000E7E0FC0FF00D9
-:102680000E7F0FC0FF000E800F00FF000E810F00B5
-:10269000FF000E820F00FF000E830F00FF000E846C
-:1026A0000F00FF000E850F00FF000E860F00FF00D9
-:1026B0000E870F00FF000E880F00FF000E890F002D
-:1026C000FF000E8A0F00FF000E8B0F00FF000E8C24
-:1026D0000F00FF000E8D0F00FF000E8E0F00FF0099
-:1026E0000E8F0F00FF000E900F00FF000E910F00E5
-:1026F000FF000E920F00FF000E930F00FF000E94DC
-:102700000F00FF000E950F00FF000E960F00FF0058
-:102710000E970F00FF000E980F00FF000E990F009C
-:10272000FF000E9A0F00FF000E9B0F00FF000E9C93
-:102730000F00FF000E9D0F00FF000E9E0F00FF0018
-:102740000E9F0F00FF000EA00F00FF000EA10F0054
-:10275000FF000EA20F00FF000EA30F00FF000EA44B
-:102760000F00FF000EA50F00FF000EA60F00FF00D8
-:102770000EA70F00FF000EA80F00FF000EA90F000C
-:10278000FF000EAA0F00FF000EAB0F00FF000EAC03
-:102790000F00FF000EAD0F00FF000EAE0F00FF0098
-:1027A0000EAF0F00FF000EC00F00FF000EC10F00A4
-:1027B000FF000EC20F00FF000EC30F00FF000EC48B
-:1027C0000F00FF000EC50F00FF000EC60F00FF0038
-:1027D0000EC70F00FF000EC80F00FF000EC90F004C
-:1027E000FF000ECA0F00FF000ECB0F00FF000ECC43
-:1027F0000F00FF000ECD0F00FF000ECE0F00FF00F8
-:102800000ECF0F00FF000ED00F00FF000ED10F0003
-:10281000FF000ED20F00FF000ED30F00FF000ED4FA
-:102820000F00FF000ED50F00FF000ED60F00FF00B7
-:102830000ED70F00FF000ED80F00FF000ED90F00BB
-:10284000FF000EDA0F00FF000EDB0F00FF000EDCB2
-:102850000F00FF000EDD0F00FF000EDE0F10FF0067
-:102860000EDF0F10FF000EE00F00FF000EE10F0063
-:10287000FF000EE20F00FF000EE30F00FF000EE46A
-:102880000F00FF000EE50F00FF000EE60F00FF0037
-:102890000EE70F00FF000EE80F00FF000EE90F002B
-:1028A000FF000EEA0F00FF000EEB0F00FF000EEC22
-:1028B0000F00FF000EED0F00FF000EEE0F00FF00F7
-:1028C0000EEF0F00FF000E010F000E020F01FF00C0
-:1028D0000E010F010E020F01FF000E010F020E028A
-:1028E0000F01FF000E010F030E020F01FF000E018A
-:1028F0000F040E020F01FF000E010F050E020F0163
-:10290000FF000E010F060E020F01FF000E010F0760
-:102910000E020F01FF000E010F080E020F01FF0053
-:102920000E010F090E020F01FF000E010F0A0E0229
-:102930000F01FF000E010F0B0E020F01FF000E0131
-:102940000F0C0E020F01FF000E010F0D0E020F0102
-:10295000FF000E010F0E0E020F01FF000E010F0F00
-:102960000E020F01FF0008020B070A460D000C00C3
-:10297000FF000B070A490D000C00FF000B000A4B7B
-:102980000D030C11FF000B000A4D0D010C32FF006E
-:102990000B070A460D000C00FF000B070A490D004B
-:1029A0000C00FF000B070A400D000C00FF000B0796
-:1029B0000A410D000C00FF000B010A400D020C4003
-:1029C000FF000B010A410D020C60FF000B070A40DB
-:1029D0000D000C00FF000B070A410D000C00FF006A
-:1029E0000B070A470D000C00FF000B070A4A0D00F9
-:1029F0000C00FF000B000A470D010C00FF000B004C
-:102A00000A4A0D010C20FF000B070A470D000C00BD
-:102A1000FF000B070A4A0D000C00FF000B070A7CA1
-:102A20000D000C00FF000B070A7E0D000C00FF00DC
-:102A30000B000A000D010C1CFF000B070A7C0D00A7
-:102A40000C00FF000B070A7E0D000C00FF000B07B7
-:102A50000A440D000C00FF000B000A440D010C009D
-:102A6000FF000B070A440D000C00FF000B070A4291
-:102A70000D000C00FF000B070A430D000C00FF00C7
-:102A80000B000A420D010C1AFF000B000A430D0156
-:102A90000C20FF000B070A420D000C00FF000B0783
-:102AA0000A430D000C00FF000B070A400D000C004C
-:102AB000FF000B070A410D000C00FF000B010A404C
-:102AC0000D020C40FF000B010A410D020C60FF00DB
-:102AD0000B070A400D000C00FF000B070A410D0018
-:102AE0000C00FF000B070A440D0F0CFFFF000B0743
-:102AF0000A420D000C00FF000B070A430D000C00FA
-:102B0000FF000B070A400D000C00FF000B070A41F5
-:102B10000D000C00FF000B070A510D060C40FF00D2
-:102B20000B070A500D060C40FF000B070A4F0D0360
-:102B30000C81FF000B070A530D1A0C76FF000B07E0
-:102B40000A540D0D0C8BFF000B070A550D040CE900
-:102B5000FF000B070A560D0B0C17FF000B070A5757
-:102B60000D1A0C38FF000B070A580D0D0CC9FF0099
-:102B70000B070A590D040C6FFF000B070A5A0D0BC7
-:102B80000C91FF000B070A730D140CDAFF000B0702
-:102B90000A740D0D0C93FF000B070A750D040CD978
-:102BA000FF000B070A760D050C93FF000B070A7751
-:102BB0000D140CDAFF000B070A780D0D0C93FF00C3
-:102BC0000B070A790D040CD9FF000B070A7A0D05D3
-:102BD0000C93FF000B070A5E0D030C68FF000B0748
-:102BE0000A5C0D040C31FF000B070A5D0D040C316B
-:102BF000FF000B070A620D030C52FF000B070A606F
-:102C00000D040C76FF000B070A610D040C76FF0023
-:102C10000B070A660D030C2EFF000B070A640D0458
-:102C20000CDAFF000B070A650D040CDAFF000B0736
-:102C30000A6A0D020CF6FF000B070A680D050C620C
-:102C4000FF000B070A690D050C62FF000B060A4620
-:102C50000D0A0C22FF000B060A480D0D0C24FF0084
-:102C60000B060A6E0D110CD3FF000B060A700D1532
-:102C70000CCBFF000B060A520D200C93FF000B0635
-:102C80000A540D200C54FF000B060A4A0D270C1D98
-:102C9000FF000B060A580D2F0CC8FF000B060A5C3C
-:102CA0000D300C07FF000B060A4C0D370C90FF008F
-:102CB0000B060A600D3D0CDBFF000B060A640D3E9F
-:102CC0000C42FF000B060A4E0D450C78FF000B0668
-:102CD0000A680D4C0C48FF000B060A6C0D4C0C6C7E
-:102CE000FF000B060A500D520CE2FF000B060A42D1
-:102CF0000D020CBAFF00FF000E1E0F14FF000EDEC7
-:102D00000F20FF000EDF0F20FF000B060A780D00DA
-:102D10000C40FF000B070A030D0F0CFFFF000B0711
-:102D20000A0B0D0F0CFFFF000B070A020D000C0031
-:102D3000FF000B070A0A0D000C00FF000B070A46F4
-:102D40000D000C00FF000B070A490D000C000905DF
-:102D50000B000A100D000C00FF000D000C00FF001E
-:102D60000D020C00FF000D000C00FF000D000C0018
-:102D7000FF000D000C00FF000D000C00FF000D0017
-:102D80000C00FF000D000C00FF000D000C00FF0008
-:102D90000D000C00FF000D000C00FF000D000C00EA
-:102DA000FF000D000C00FF000D000C00FF000D00E7
-:102DB0000C00FF000D000C00FF000D000C00FF00D8
-:102DC0000D000C00FF000D000C00FF000D000C00BA
-:102DD000FF000D000C00FF000D000C00FF000D00B7
-:102DE0000C00FF000D000C00FF000D000C00FF00A8
-:102DF0000D000C00FF000D000C00FF000D000C008A
-:102E0000FF000D000C00FF000D000C00FF000D0086
-:102E10000C00FF000D000C00FF000D000C00FF0077
-:102E20000D000C00FF000D000C00FF000D000C0059
-:102E3000FF000D000C00FF000D000C00FF000D0056
-:102E40000C00FF000D000C00FF000D000C00FF0047
-:102E50000D000C00FF000D000C00FF000D000C0029
-:102E6000FF000D000C00FF000D000C00FF000D0026
-:102E70000C00FF0009050B010A100D010CC0FF003A
-:102E80000D010CFAFF000D000C1AFF000D000C00E4
-:102E9000FF000D000C00FF000D000C00FF000D00F6
-:102EA0000C00FF000D000C00FF000D000C00FF00E7
-:102EB0000D000C00FF000D000C00FF000D000C00C9
-:102EC000FF000D000C00FF000D000C00FF000D00C6
-:102ED0000C00FF000D000C00FF000D000C00FF00B7
-:102EE0000D000C00FF000D000C00FF000D000C0099
-:102EF000FF000D000C00FF000D000C00FF000D0096
-:102F00000C00FF000D000C00FF000D000C00FF0086
-:102F10000D000C00FF000D000C00FF000D000C0068
-:102F2000FF000D000C00FF000D000C00FF000D0065
-:102F30000C00FF000D000C00FF000D000C00FF0056
-:102F40000D000C00FF000D000C00FF000D000C0038
-:102F5000FF000D000C00FF000D000C00FF000D0035
-:102F60000C00FF000D000C00FF000D000C00FF0026
-:102F70000D000C00FF000D000C00FF000D000C0008
-:102F8000FF000D000C00FF000D000C00FF000D0005
-:102F90000C00FF000D000C00FF00FF00FF00090502
-:102FA0000B020A100C46FF000C46FF000C00FF004D
-:102FB0000C00FF000C00FF000C00FF000C00FF00E5
-:102FC0000C00FF000C00FF000C00FF000C00FF00D5
-:102FD0000C00FF000C00FF000C00FF000C00FF00C5
-:102FE0000C00FF000C00FF000C00FF000C00FF00B5
-:102FF0000C00FF000C00FF000C00FF000C00FF00A5
-:103000000C00FF000C00FF000C00FF000C00FF0094
-:103010000C00FF000C00FF000C00FF000C00FF0084
-:103020000C00FF000C00FF000C00FF000C00FF0074
-:103030000C00FF000C00FF000C00FF000C00FF0064
-:103040000C00FF000C00FF000C00FF000C00FF0054
-:103050000C00FF000C00FF000C00FF000C00FF0044
-:103060000C00FF0009050B030A100C00FF000C0008
-:10307000FF000C00FF000C00FF000C00FF000C0024
-:10308000FF000C00FF000C00FF000C00FF000C0014
-:10309000FF000C00FF000C00FF000C00FF000C0004
-:1030A000FF000C00FF000C00FF000C00FF000C00F4
-:1030B000FF000C00FF000C00FF000C00FF000C00E4
-:1030C000FF000C00FF000C00FF000C00FF000C00D4
-:1030D000FF000C00FF000C00FF000C00FF000C00C4
-:1030E000FF000C00FF000C00FF000C00FF000C00B4
-:1030F000FF000C00FF000C00FF000C00FF000C00A4
-:10310000FF000C00FF000C00FF000C00FF000C0093
-:10311000FF000C00FF000C00FF000C00FF000C0083
-:10312000FF000C00FF000C00FF0009050B040A1053
-:103130000C00FF000C00FF000C00FF000C00FF0063
-:103140000C00FF000C00FF000C00FF000C00FF0053
-:103150000C00FF000C00FF000C00FF000C00FF0043
-:103160000C00FF000C00FF000C00FF000C00FF0033
-:103170000C00FF000C00FF000C00FF000C00FF0023
-:103180000C00FF000C00FF000C00FF000C00FF0013
-:103190000C00FF000C00FF000C00FF000C00FF0003
-:1031A0000C00FF000C00FF000C00FF000C00FF00F3
-:1031B0000C00FF000C00FF000C00FF000C00FF00E3
-:1031C0000C00FF000C00FF000C00FF000C00FF00D3
-:1031D0000C00FF000C00FF000C00FF000C00FF00C3
-:1031E0000C00FF000C00FF000C00FF000C00FF00B3
-:1031F00009010B060A100D000C00FF000A120D0059
-:103200000C00FF000A140D000C00FF000A160D0050
-:103210000C00FF000A180D000C00FF000A1A0D0038
-:103220000C00FF000A1C0D000C00FF000A1E0D0020
-:103230000C00FF000A200D000C00FF000A220D0008
-:103240000C00FF000A240D000C00FF000A260D00F0
-:103250000C00FF000A280D000C00FF000A2A0D00D8
-:103260000C00FF000A2C0D000C00FF000A2E0D00C0
-:103270000C00FF000A300D000C00FF000A320D00A8
-:103280000C00FF000A340D000C00FF000A360D0090
-:103290000C00FF000A380D000C00FF000A3A0D0078
-:1032A0000C00FF000A3C0D000C00FF000A3E0D0060
-:1032B0000C00FF0009050B070A100D0F0CFFFF00A3
-:1032C0000D0F0CFFFF000D000C00FF000D000C00A7
-:1032D000FF000D000C00FF000D000C00FF000D00B2
-:1032E0000C00FF000D000C00FF000D000C00FF00A3
-:1032F0000D000C00FF000D000C00FF000D000C0085
-:10330000FF000D000C00FF000D000C00FF000D0081
-:103310000C00FF000D000C00FF000D000C00FF0072
-:103320000D000C00FF000D000C00FF000D000C0054
-:10333000FF000D000C00FF000D000C00FF000D0051
-:103340000C00FF000D000C00FF000D000C00FF0042
-:103350000D000C00FF000D000C00FF000D000C0024
-:10336000FF000D000C00FF000D000C00FF000D0021
-:103370000C00FF000D000C00FF000D000C00FF0012
-:103380000D000C00FF000D000C00FF000D000C00F4
-:10339000FF000D000C00FF000D000C00FF000D00F1
-:1033A0000C00FF000D000C00FF000D000C00FF00E2
-:1033B0000D000C00FF000D000C00FF000D000C00C4
-:1033C000FF000D000C00FF000D000C00FF000D00C1
-:1033D0000C00FF000D000C00FF000E010F00FF00AD
-:1033E0000E020F00FF000E010F01FF000E020F0082
-:1033F000FF000E010F02FF000E020F00FF000E0182
-:103400000F03FF000E020F00FF000E010F04FF006C
-:103410000E020F00FF000E010F05FF000E020F004D
-:10342000FF000E010F06FF000E020F00FF000E014D
-:103430000F07FF000E020F00FF000EB00F20FF006D
-:103440000EB10F20FF000EB20F20FF000EB30F20B1
-:10345000FF000EB40F20FF000EB50F20FF000EB6C8
-:103460000F20FF000EB70F20FF000EF00F20FF000F
-:103470000EF10F20FF000EF20F20FF000EF30F20C1
-:10348000FF000EF40F20FF000EF50F20FF000EF6D8
-:103490000F20FF000EF70F20FF000E100FFFFF00A0
-:1034A0000E110FFFFF000E120FFFFF000E130FFF94
-:1034B000FF000E140FFFFF000E150FFFFF000E168A
-:1034C0000FFFFF000E170FFFFF000E200FFFFF0082
-:1034D0000E210FFFFF000E220FFFFF000E230FFF34
-:1034E000FF000E240FFFFF000E250FFFFF000E262A
-:1034F0000FFFFF000E270FFFFF000E300F00FF0031
-:103500000E310F00FF000E320F00FF000E330F00D0
-:10351000FF000E340F00FF000E350F00FF000E36C7
-:103520000F00FF000E370F00FF000E400F00FF00DE
-:103530000E410F00FF000E420F00FF000E430F0070
-:10354000FF000E440F00FF000E450F00FF000E4667
-:103550000F00FF000E470F00FF000E500F00FF008E
-:103560000E510F00FF000E520F00FF000E530F0010
-:10357000FF000E540F00FF000E550F00FF000E5607
-:103580000F00FF000E570F00FF000E600F00FF003E
-:103590000E610F00FF000E620F00FF000E630F00B0
-:1035A000FF000E640F00FF000E650F00FF000E66A7
-:1035B0000F00FF000E670F00FF000E700FC0FF002E
-:1035C0000E710FC0FF000E720FC0FF000E730FC010
-:1035D000FF000E740FC0FF000E750FC0FF000E76C7
-:1035E0000FC0FF000E770FC0FF000E800F00FF001E
-:1035F0000E810F00FF000E820F00FF000E830F00F0
-:10360000FF000E840F00FF000E850F00FF000E86E6
-:103610000F00FF000E870F00FF000E900F00FF004D
-:103620000E910F00FF000E920F00FF000E930F008F
-:10363000FF000E940F00FF000E950F00FF000E9686
-:103640000F00FF000E970F00FF000EA00F00FF00FD
-:103650000EA10F00FF000EA20F00FF000EA30F002F
-:10366000FF000EA40F00FF000EA50F00FF000EA626
-:103670000F00FF000EA70F00FF000EC00F00FF009D
-:103680000EC10F00FF000EC20F00FF000EC30F009F
-:10369000FF000EC40F00FF000EC50F00FF000EC696
-:1036A0000F00FF000EC70F00FF000ED00F00FF003D
-:1036B0000ED10F00FF000ED20F00FF000ED30F003F
-:1036C000FF000ED40F00FF000ED50F00FF000ED636
-:1036D0000F00FF000ED70F00FF000EE00F00FF00ED
-:1036E0000EE10F00FF000EE20F00FF000EE30F00DF
-:1036F000FF000EE40F00FF000EE50F00FF000EE6D6
-:103700000F00FF000EE70F00FF000E010F00FF008B
-:103710000E020F01FF000E010F01FF000E020F014C
-:10372000FF000E010F02FF000E020F01FF000E014D
-:103730000F03FF000E020F01FF000E010F04FF0038
-:103740000E020F01FF000E010F05FF000E020F0118
-:10375000FF000E010F06FF000E020F01FF000E0119
-:103760000F07FF000E020F01FF000B070A460D00B6
-:103770000C00FF000B070A490D000C00FF000B07AF
-:103780000A450D0F0CFFFF000B070A480D0F0CFF39
-:10379000FF000B070A7B0D040CCCFF000B070A7D12
-:1037A0000D040CCCFF000B070A7C0D000C00FF0081
-:1037B0000B070A7E0D000C00FF000B070A460D00E8
-:1037C0000C00FF000B070A490D000C00FF000B075F
-:1037D0000A470D000C00FF000B070A4A0D000C0001
-:1037E000FF000B070A4C0D000C00FF000B070A4EF0
-:1037F0000D000C00FF000B070A4C0D000C000B071E
-:103800000A4E0D000C000B070A4C0D000C280B078C
-:103810000A4E0D000C280B070A4C0D000C510B072B
-:103820000A4E0D000C510B070A4C0D000C7A0B07C9
-:103830000A4E0D000C7A0B070A4C0D000CA30B0767
-:103840000A4E0D000CA30B070A4C0D000CCC0B0705
-:103850000A4E0D000CCC0B070A4C0D000CF50B07A3
-:103860000A4E0D000CF50B070A4C0D010C1E0B0740
-:103870000A4E0D010C1E0B070A4C0D010C470B07DD
-:103880000A4E0D010C470B070A4C0D010C700B077B
-:103890000A4E0D010C700B070A4C0D010C990B0719
-:1038A0000A4E0D010C990B070A4C0D010CC20B07B7
-:1038B0000A4E0D010CC20B070A4C0D010CEB0B0755
-:1038C0000A4E0D010CEB0B070A4C0D020C140B07F2
-:1038D0000A4E0D020C140B070A4C0D020C3D0B078F
-:1038E0000A4E0D020C3D0B070A4C0D020C660B072D
-:1038F0000A4E0D020C660B070A4C0D020C8F0B07CB
-:103900000A4E0D020C8F0B070A4C0D020CB80B0768
-:103910000A4E0D020CB80B070A4C0D020CE10B0706
-:103920000A4E0D020CE10B070A4C0D030C0A0B07A3
-:103930000A4E0D030C0A0B070A4C0D030C330B0740
-:103940000A4E0D030C330B070A4C0D030C5C0B07DE
-:103950000A4E0D030C5C0B070A4C0D030C850B077C
-:103960000A4E0D030C850B070A4C0D030CAE0B071A
-:103970000A4E0D030CAE0B070A4C0D030CD70B07B8
-:103980000A4E0D030CD70B070A4C0D040C000B0755
-:103990000A4E0D040C000B070A4C0D040C280B07F3
-:1039A0000A4E0D040C280B070A4C0D040C510B0792
-:1039B0000A4E0D040C510B070A4C0D040C7A0B0730
-:1039C0000A4E0D040C7A0B070A4C0D040CA30B07CE
-:1039D0000A4E0D040CA30B070A4C0D040CCC0B076C
-:1039E0000A4E0D040CCC0B070A4C0D040CF50B070A
-:1039F0000A4E0D040CF50B070A4C0D050C1E0B07A7
-:103A00000A4E0D050C1E0B070A4C0D050C470B0743
-:103A10000A4E0D050C470B070A4C0D050C700B07E1
-:103A20000A4E0D050C700B070A4C0D050C990B077F
-:103A30000A4E0D050C990B070A4C0D050CC20B071D
-:103A40000A4E0D050CC20B070A4C0D050CEB0B07BB
-:103A50000A4E0D050CEB0B070A4C0D060C140B0758
-:103A60000A4E0D060C140B070A4C0D060C3D0B07F5
-:103A70000A4E0D060C3D0B070A4C0D060C660B0793
-:103A80000A4E0D060C660B070A4C0D060C8F0B0731
-:103A90000A4E0D060C8F0B070A4C0D060CB80B07CF
-:103AA0000A4E0D060CB80B070A4C0D060CE10B076D
-:103AB0000A4E0D060CE10B070A4C0D070C0A0B070A
-:103AC0000A4E0D070C0A0B070A4C0D070C330B07A7
-:103AD0000A4E0D070C330B070A4C0D070C5C0B0745
-:103AE0000A4E0D070C5C0B070A4C0D070C850B07E3
-:103AF0000A4E0D070C850B070A4C0D070CAE0B0781
-:103B00000A4E0D070CAE0B070A4C0D070CD70B071E
-:103B10000A4E0D070CD70B070A4C0D080C000B07BB
-:103B20000A4E0D080C000B070A4C0D080C280B0759
-:103B30000A4E0D080C280B070A4C0D080C510B07F8
-:103B40000A4E0D080C510B070A4C0D080C7A0B0796
-:103B50000A4E0D080C7A0B070A4C0D080CA30B0734
-:103B60000A4E0D080CA30B070A4C0D080CCC0B07D2
-:103B70000A4E0D080CCC0B070A4C0D080CF50B0770
-:103B80000A4E0D080CF50B070A4C0D090C1E0B070D
-:103B90000A4E0D090C1E0B070A4C0D090C470B07AA
-:103BA0000A4E0D090C470B070A4C0D090C700B0748
-:103BB0000A4E0D090C700B070A4C0D090C990B07E6
-:103BC0000A4E0D090C990B070A4C0D090CC20B0784
-:103BD0000A4E0D090CC20B070A4C0D090CEB0B0722
-:103BE0000A4E0D090CEB0B070A4C0D0A0C140B07BF
-:103BF0000A4E0D0A0C140B070A4C0D0A0C3D0B075C
-:103C00000A4E0D0A0C3D0B070A4C0D0A0C660B07F9
-:103C10000A4E0D0A0C660B070A4C0D0A0C8F0B0797
-:103C20000A4E0D0A0C8F0B070A4C0D0A0CB80B0735
-:103C30000A4E0D0A0CB80B070A4C0D0A0CE10B07D3
-:103C40000A4E0D0A0CE10B070A4C0D0B0C0A0B0770
-:103C50000A4E0D0B0C0A0B070A4C0D0B0C330B070D
-:103C60000A4E0D0B0C330B070A4C0D0B0C5C0B07AB
-:103C70000A4E0D0B0C5C0B070A4C0D0B0C850B0749
-:103C80000A4E0D0B0C850B070A4C0D0B0CAE0B07E7
-:103C90000A4E0D0B0CAE0B070A4C0D0B0CD70B0785
-:103CA0000A4E0D0B0CD70B070A4C0D0C0C000B0722
-:103CB0000A4E0D0C0C000B070A4C0D0C0C280B07C0
-:103CC0000A4E0D0C0C280B070A4C0D0C0C510B075F
-:103CD0000A4E0D0C0C510B070A4C0D0C0C7A0B07FD
-:103CE0000A4E0D0C0C7A0B070A4C0D0C0CA30B079B
-:103CF0000A4E0D0C0CA30B070A4C0D0C0CCC0B0739
-:103D00000A4E0D0C0CCC0B070A4C0D0C0CF50B07D6
-:103D10000A4E0D0C0CF50B070A4C0D0D0C1E0B0773
-:103D20000A4E0D0D0C1E0B070A4C0D0D0C470B0710
-:103D30000A4E0D0D0C470B070A4C0D0D0C700B07AE
-:103D40000A4E0D0D0C700B070A4C0D0D0C990B074C
-:103D50000A4E0D0D0C990B070A4C0D0D0CC20B07EA
-:103D60000A4E0D0D0CC20B070A4C0D0D0CEB0B0788
-:103D70000A4E0D0D0CEB0B070A4C0D0E0C140B0725
-:103D80000A4E0D0E0C140B070A4C0D0E0C3D0B07C2
-:103D90000A4E0D0E0C3D0B070A4C0D0E0C660B0760
-:103DA0000A4E0D0E0C660B070A4C0D0E0C8F0B07FE
-:103DB0000A4E0D0E0C8F0B070A4C0D0E0CB80B079C
-:103DC0000A4E0D0E0CB80B070A4C0D0E0CE10B073A
-:103DD0000A4E0D0E0CE10B070A4C0D0F0C0A0B07D7
-:103DE0000A4E0D0F0C0A0B070A4C0D0F0C330B0774
-:103DF0000A4E0D0F0C330B070A4C0D0F0C5C0B0712
-:103E00000A4E0D0F0C5C0B070A4C0D0F0C850B07AF
-:103E10000A4E0D0F0C850B070A4C0D0F0CAE0B074D
-:103E20000A4E0D0F0CAE0B070A4C0D0F0CD70B07EB
-:103E30000A4E0D0F0CD70B070A4C0D0F0CFF0B078A
-:0A3E40000A4E0D0F0CFF0800FF00F2
-:00000001FF
diff --git a/fs/affs/amigaffs.c b/fs/affs/amigaffs.c
index b573c3b9a328..8cf941c3b511 100644
--- a/fs/affs/amigaffs.c
+++ b/fs/affs/amigaffs.c
@@ -450,7 +450,7 @@ affs_error(struct super_block *sb, const char *function, const char *fmt, ...)
vaf.fmt = fmt;
vaf.va = &args;
pr_crit("error (device %s): %s(): %pV\n", sb->s_id, function, &vaf);
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
pr_warn("Remounting filesystem read-only\n");
sb->s_flags |= MS_RDONLY;
va_end(args);
diff --git a/fs/affs/bitmap.c b/fs/affs/bitmap.c
index 675148950fed..2b2112475ec2 100644
--- a/fs/affs/bitmap.c
+++ b/fs/affs/bitmap.c
@@ -19,7 +19,7 @@ affs_count_free_blocks(struct super_block *sb)
pr_debug("%s()\n", __func__);
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return 0;
mutex_lock(&AFFS_SB(sb)->s_bmlock);
diff --git a/fs/affs/super.c b/fs/affs/super.c
index 7bf47a41cb4f..884bedab7266 100644
--- a/fs/affs/super.c
+++ b/fs/affs/super.c
@@ -80,7 +80,7 @@ void affs_mark_sb_dirty(struct super_block *sb)
struct affs_sb_info *sbi = AFFS_SB(sb);
unsigned long delay;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
spin_lock(&sbi->work_lock);
@@ -464,7 +464,7 @@ got_root:
* not recommended.
*/
if ((chksum == FS_DCFFS || chksum == MUFS_DCFFS || chksum == FS_DCOFS
- || chksum == MUFS_DCOFS) && !(sb->s_flags & MS_RDONLY)) {
+ || chksum == MUFS_DCOFS) && !sb_rdonly(sb)) {
pr_notice("Dircache FS - mounting %s read only\n", sb->s_id);
sb->s_flags |= MS_RDONLY;
}
@@ -596,7 +596,7 @@ affs_remount(struct super_block *sb, int *flags, char *data)
memcpy(sbi->s_volume, volume, 32);
spin_unlock(&sbi->symlink_lock);
- if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
+ if ((bool)(*flags & MS_RDONLY) == sb_rdonly(sb))
return 0;
if (*flags & MS_RDONLY)
diff --git a/fs/aio.c b/fs/aio.c
index b5d69f28d8b1..5a2487217072 100644
--- a/fs/aio.c
+++ b/fs/aio.c
@@ -1606,12 +1606,6 @@ static int io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb,
goto out_put_req;
}
- if ((req->common.ki_flags & IOCB_NOWAIT) &&
- !(req->common.ki_flags & IOCB_DIRECT)) {
- ret = -EOPNOTSUPP;
- goto out_put_req;
- }
-
ret = put_user(KIOCB_KEY, &user_iocb->aio_key);
if (unlikely(ret)) {
pr_debug("EFAULT: aio_key\n");
diff --git a/fs/autofs4/waitq.c b/fs/autofs4/waitq.c
index 24a58bf9ca72..4ac49d038bf3 100644
--- a/fs/autofs4/waitq.c
+++ b/fs/autofs4/waitq.c
@@ -56,19 +56,14 @@ static int autofs4_write(struct autofs_sb_info *sbi,
struct file *file, const void *addr, int bytes)
{
unsigned long sigpipe, flags;
- mm_segment_t fs;
const char *data = (const char *)addr;
ssize_t wr = 0;
sigpipe = sigismember(&current->pending.signal, SIGPIPE);
- /* Save pointer to user space and point back to kernel space */
- fs = get_fs();
- set_fs(KERNEL_DS);
-
mutex_lock(&sbi->pipe_mutex);
while (bytes) {
- wr = __vfs_write(file, data, bytes, &file->f_pos);
+ wr = __kernel_write(file, data, bytes, &file->f_pos);
if (wr <= 0)
break;
data += wr;
@@ -76,8 +71,6 @@ static int autofs4_write(struct autofs_sb_info *sbi,
}
mutex_unlock(&sbi->pipe_mutex);
- set_fs(fs);
-
/* Keep the currently executing process from receiving a
* SIGPIPE unless it was already supposed to get one
*/
diff --git a/fs/befs/linuxvfs.c b/fs/befs/linuxvfs.c
index 4a4a5a366158..a92355cc453b 100644
--- a/fs/befs/linuxvfs.c
+++ b/fs/befs/linuxvfs.c
@@ -838,7 +838,7 @@ befs_fill_super(struct super_block *sb, void *data, int silent)
befs_debug(sb, "---> %s", __func__);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
befs_warning(sb,
"No write support. Marking filesystem read-only");
sb->s_flags |= MS_RDONLY;
diff --git a/fs/binfmt_aout.c b/fs/binfmt_aout.c
index 9be82c4e14a4..ce1824f47ba6 100644
--- a/fs/binfmt_aout.c
+++ b/fs/binfmt_aout.c
@@ -341,11 +341,12 @@ static int load_aout_library(struct file *file)
unsigned long error;
int retval;
struct exec ex;
+ loff_t pos = 0;
inode = file_inode(file);
retval = -ENOEXEC;
- error = kernel_read(file, 0, (char *) &ex, sizeof(ex));
+ error = kernel_read(file, &ex, sizeof(ex), &pos);
if (error != sizeof(ex))
goto out;
diff --git a/fs/binfmt_elf.c b/fs/binfmt_elf.c
index ec45d24875b1..73b01e474fdc 100644
--- a/fs/binfmt_elf.c
+++ b/fs/binfmt_elf.c
@@ -409,6 +409,7 @@ static struct elf_phdr *load_elf_phdrs(struct elfhdr *elf_ex,
{
struct elf_phdr *elf_phdata = NULL;
int retval, size, err = -1;
+ loff_t pos = elf_ex->e_phoff;
/*
* If the size of this structure has changed, then punt, since
@@ -432,8 +433,7 @@ static struct elf_phdr *load_elf_phdrs(struct elfhdr *elf_ex,
goto out;
/* Read in the program headers */
- retval = kernel_read(elf_file, elf_ex->e_phoff,
- (char *)elf_phdata, size);
+ retval = kernel_read(elf_file, elf_phdata, size, &pos);
if (retval != size) {
err = (retval < 0) ? retval : -EIO;
goto out;
@@ -698,6 +698,7 @@ static int load_elf_binary(struct linux_binprm *bprm)
struct elfhdr interp_elf_ex;
} *loc;
struct arch_elf_state arch_state = INIT_ARCH_ELF_STATE;
+ loff_t pos;
loc = kmalloc(sizeof(*loc), GFP_KERNEL);
if (!loc) {
@@ -750,9 +751,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
if (!elf_interpreter)
goto out_free_ph;
- retval = kernel_read(bprm->file, elf_ppnt->p_offset,
- elf_interpreter,
- elf_ppnt->p_filesz);
+ pos = elf_ppnt->p_offset;
+ retval = kernel_read(bprm->file, elf_interpreter,
+ elf_ppnt->p_filesz, &pos);
if (retval != elf_ppnt->p_filesz) {
if (retval >= 0)
retval = -EIO;
@@ -776,9 +777,9 @@ static int load_elf_binary(struct linux_binprm *bprm)
would_dump(bprm, interpreter);
/* Get the exec headers */
- retval = kernel_read(interpreter, 0,
- (void *)&loc->interp_elf_ex,
- sizeof(loc->interp_elf_ex));
+ pos = 0;
+ retval = kernel_read(interpreter, &loc->interp_elf_ex,
+ sizeof(loc->interp_elf_ex), &pos);
if (retval != sizeof(loc->interp_elf_ex)) {
if (retval >= 0)
retval = -EIO;
@@ -1175,9 +1176,10 @@ static int load_elf_library(struct file *file)
unsigned long elf_bss, bss, len;
int retval, error, i, j;
struct elfhdr elf_ex;
+ loff_t pos = 0;
error = -ENOEXEC;
- retval = kernel_read(file, 0, (char *)&elf_ex, sizeof(elf_ex));
+ retval = kernel_read(file, &elf_ex, sizeof(elf_ex), &pos);
if (retval != sizeof(elf_ex))
goto out;
@@ -1201,7 +1203,8 @@ static int load_elf_library(struct file *file)
eppnt = elf_phdata;
error = -ENOEXEC;
- retval = kernel_read(file, elf_ex.e_phoff, (char *)eppnt, j);
+ pos = elf_ex.e_phoff;
+ retval = kernel_read(file, eppnt, j, &pos);
if (retval != j)
goto out_free_ph;
diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c
index 5aa9199dfb13..e70c039ac190 100644
--- a/fs/binfmt_elf_fdpic.c
+++ b/fs/binfmt_elf_fdpic.c
@@ -145,6 +145,7 @@ static int elf_fdpic_fetch_phdrs(struct elf_fdpic_params *params,
struct elf32_phdr *phdr;
unsigned long size;
int retval, loop;
+ loff_t pos = params->hdr.e_phoff;
if (params->hdr.e_phentsize != sizeof(struct elf_phdr))
return -ENOMEM;
@@ -156,8 +157,7 @@ static int elf_fdpic_fetch_phdrs(struct elf_fdpic_params *params,
if (!params->phdrs)
return -ENOMEM;
- retval = kernel_read(file, params->hdr.e_phoff,
- (char *) params->phdrs, size);
+ retval = kernel_read(file, params->phdrs, size, &pos);
if (unlikely(retval != size))
return retval < 0 ? retval : -ENOEXEC;
@@ -199,6 +199,7 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm)
char *interpreter_name = NULL;
int executable_stack;
int retval, i;
+ loff_t pos;
kdebug("____ LOAD %d ____", current->pid);
@@ -246,10 +247,9 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm)
if (!interpreter_name)
goto error;
- retval = kernel_read(bprm->file,
- phdr->p_offset,
- interpreter_name,
- phdr->p_filesz);
+ pos = phdr->p_offset;
+ retval = kernel_read(bprm->file, interpreter_name,
+ phdr->p_filesz, &pos);
if (unlikely(retval != phdr->p_filesz)) {
if (retval >= 0)
retval = -ENOEXEC;
@@ -277,8 +277,9 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm)
*/
would_dump(bprm, interpreter);
- retval = kernel_read(interpreter, 0, bprm->buf,
- BINPRM_BUF_SIZE);
+ pos = 0;
+ retval = kernel_read(interpreter, bprm->buf,
+ BINPRM_BUF_SIZE, &pos);
if (unlikely(retval != BINPRM_BUF_SIZE)) {
if (retval >= 0)
retval = -ENOEXEC;
diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c
index ce6537c50ec1..475d083f8088 100644
--- a/fs/binfmt_flat.c
+++ b/fs/binfmt_flat.c
@@ -176,19 +176,14 @@ static int create_flat_tables(struct linux_binprm *bprm, unsigned long arg_start
#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
#define RESERVED 0xC0 /* bit 6,7: reserved */
-static int decompress_exec(
- struct linux_binprm *bprm,
- unsigned long offset,
- char *dst,
- long len,
- int fd)
+static int decompress_exec(struct linux_binprm *bprm, loff_t fpos, char *dst,
+ long len, int fd)
{
unsigned char *buf;
z_stream strm;
- loff_t fpos;
int ret, retval;
- pr_debug("decompress_exec(offset=%lx,buf=%p,len=%lx)\n", offset, dst, len);
+ pr_debug("decompress_exec(offset=%llx,buf=%p,len=%lx)\n", fpos, dst, len);
memset(&strm, 0, sizeof(strm));
strm.workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
@@ -202,13 +197,11 @@ static int decompress_exec(
}
/* Read in first chunk of data and parse gzip header. */
- fpos = offset;
- ret = kernel_read(bprm->file, offset, buf, LBUFSIZE);
+ ret = kernel_read(bprm->file, buf, LBUFSIZE, &fpos);
strm.next_in = buf;
strm.avail_in = ret;
strm.total_in = 0;
- fpos += ret;
retval = -ENOEXEC;
@@ -274,7 +267,7 @@ static int decompress_exec(
}
while ((ret = zlib_inflate(&strm, Z_NO_FLUSH)) == Z_OK) {
- ret = kernel_read(bprm->file, fpos, buf, LBUFSIZE);
+ ret = kernel_read(bprm->file, buf, LBUFSIZE, &fpos);
if (ret <= 0)
break;
len -= ret;
@@ -282,7 +275,6 @@ static int decompress_exec(
strm.next_in = buf;
strm.avail_in = ret;
strm.total_in = 0;
- fpos += ret;
}
if (ret < 0) {
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c
index f4718098ac31..ce7181ea60fa 100644
--- a/fs/binfmt_misc.c
+++ b/fs/binfmt_misc.c
@@ -218,12 +218,15 @@ static int load_misc_binary(struct linux_binprm *bprm)
bprm->file = interp_file;
if (fmt->flags & MISC_FMT_CREDENTIALS) {
+ loff_t pos = 0;
+
/*
* No need to call prepare_binprm(), it's already been
* done. bprm->buf is stale, update from interp_file.
*/
memset(bprm->buf, 0, BINPRM_BUF_SIZE);
- retval = kernel_read(bprm->file, 0, bprm->buf, BINPRM_BUF_SIZE);
+ retval = kernel_read(bprm->file, bprm->buf, BINPRM_BUF_SIZE,
+ &pos);
} else
retval = prepare_binprm(bprm);
diff --git a/fs/block_dev.c b/fs/block_dev.c
index bb715b2fcfb8..93d088ffc05c 100644
--- a/fs/block_dev.c
+++ b/fs/block_dev.c
@@ -1740,6 +1740,8 @@ static int blkdev_open(struct inode * inode, struct file * filp)
*/
filp->f_flags |= O_LARGEFILE;
+ filp->f_mode |= FMODE_NOWAIT;
+
if (filp->f_flags & O_NDELAY)
filp->f_mode |= FMODE_NDELAY;
if (filp->f_flags & O_EXCL)
@@ -1892,6 +1894,9 @@ ssize_t blkdev_write_iter(struct kiocb *iocb, struct iov_iter *from)
if (iocb->ki_pos >= size)
return -ENOSPC;
+ if ((iocb->ki_flags & (IOCB_NOWAIT | IOCB_DIRECT)) == IOCB_NOWAIT)
+ return -EOPNOTSUPP;
+
iov_iter_truncate(from, size - iocb->ki_pos);
blk_start_plug(&plug);
diff --git a/fs/btrfs/Kconfig b/fs/btrfs/Kconfig
index 80e9c18ea64f..a26c63b4ad68 100644
--- a/fs/btrfs/Kconfig
+++ b/fs/btrfs/Kconfig
@@ -6,6 +6,8 @@ config BTRFS_FS
select ZLIB_DEFLATE
select LZO_COMPRESS
select LZO_DECOMPRESS
+ select ZSTD_COMPRESS
+ select ZSTD_DECOMPRESS
select RAID6_PQ
select XOR_BLOCKS
select SRCU
diff --git a/fs/btrfs/Makefile b/fs/btrfs/Makefile
index 128ce17a80b0..962a95aefb81 100644
--- a/fs/btrfs/Makefile
+++ b/fs/btrfs/Makefile
@@ -6,7 +6,7 @@ btrfs-y += super.o ctree.o extent-tree.o print-tree.o root-tree.o dir-item.o \
transaction.o inode.o file.o tree-defrag.o \
extent_map.o sysfs.o struct-funcs.o xattr.o ordered-data.o \
extent_io.o volumes.o async-thread.o ioctl.o locking.o orphan.o \
- export.o tree-log.o free-space-cache.o zlib.o lzo.o \
+ export.o tree-log.o free-space-cache.o zlib.o lzo.o zstd.o \
compression.o delayed-ref.o relocation.o delayed-inode.o scrub.o \
reada.o backref.o ulist.o qgroup.o send.o dev-replace.o raid56.o \
uuid-tree.o props.o hash.o free-space-tree.o
diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index 883ecc58fd0d..b51d23f5cafa 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -704,6 +704,7 @@ static struct {
static const struct btrfs_compress_op * const btrfs_compress_op[] = {
&btrfs_zlib_compress,
&btrfs_lzo_compress,
+ &btrfs_zstd_compress,
};
void __init btrfs_init_compress(void)
diff --git a/fs/btrfs/compression.h b/fs/btrfs/compression.h
index 3b1b0ac15fdc..d2781ff8f994 100644
--- a/fs/btrfs/compression.h
+++ b/fs/btrfs/compression.h
@@ -99,7 +99,8 @@ enum btrfs_compression_type {
BTRFS_COMPRESS_NONE = 0,
BTRFS_COMPRESS_ZLIB = 1,
BTRFS_COMPRESS_LZO = 2,
- BTRFS_COMPRESS_TYPES = 2,
+ BTRFS_COMPRESS_ZSTD = 3,
+ BTRFS_COMPRESS_TYPES = 3,
};
struct btrfs_compress_op {
@@ -127,6 +128,7 @@ struct btrfs_compress_op {
extern const struct btrfs_compress_op btrfs_zlib_compress;
extern const struct btrfs_compress_op btrfs_lzo_compress;
+extern const struct btrfs_compress_op btrfs_zstd_compress;
int btrfs_compress_heuristic(struct inode *inode, u64 start, u64 end);
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 2add002662f4..5a8933da39a7 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -270,6 +270,7 @@ struct btrfs_super_block {
BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS | \
BTRFS_FEATURE_INCOMPAT_BIG_METADATA | \
BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO | \
+ BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD | \
BTRFS_FEATURE_INCOMPAT_RAID56 | \
BTRFS_FEATURE_INCOMPAT_EXTENDED_IREF | \
BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA | \
diff --git a/fs/btrfs/dev-replace.c b/fs/btrfs/dev-replace.c
index 7a93a3e1a847..7c655f9a7a50 100644
--- a/fs/btrfs/dev-replace.c
+++ b/fs/btrfs/dev-replace.c
@@ -704,7 +704,7 @@ static u64 __btrfs_dev_replace_cancel(struct btrfs_fs_info *fs_info)
u64 result;
int ret;
- if (fs_info->sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(fs_info->sb))
return -EROFS;
mutex_lock(&dev_replace->lock_finishing_cancel_unmount);
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 46329524dd5f..487bbe4fb3c6 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -2478,7 +2478,7 @@ static int btrfs_replay_log(struct btrfs_fs_info *fs_info,
return ret;
}
- if (fs_info->sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(fs_info->sb)) {
ret = btrfs_commit_super(fs_info);
if (ret)
return ret;
@@ -2828,6 +2828,8 @@ int open_ctree(struct super_block *sb,
features |= BTRFS_FEATURE_INCOMPAT_MIXED_BACKREF;
if (fs_info->compress_type == BTRFS_COMPRESS_LZO)
features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO;
+ else if (fs_info->compress_type == BTRFS_COMPRESS_ZSTD)
+ features |= BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD;
if (features & BTRFS_FEATURE_INCOMPAT_SKINNY_METADATA)
btrfs_info(fs_info, "has skinny extents");
@@ -2874,7 +2876,7 @@ int open_ctree(struct super_block *sb,
features = btrfs_super_compat_ro_flags(disk_super) &
~BTRFS_FEATURE_COMPAT_RO_SUPP;
- if (!(sb->s_flags & MS_RDONLY) && features) {
+ if (!sb_rdonly(sb) && features) {
btrfs_err(fs_info,
"cannot mount read-write because of unsupported optional features (%llx)",
features);
@@ -3036,7 +3038,7 @@ retry_root_backup:
goto fail_sysfs;
}
- if (!(sb->s_flags & MS_RDONLY) && !btrfs_check_rw_degradable(fs_info)) {
+ if (!sb_rdonly(sb) && !btrfs_check_rw_degradable(fs_info)) {
btrfs_warn(fs_info,
"writeable mount is not allowed due to too many missing devices");
goto fail_sysfs;
@@ -3095,7 +3097,7 @@ retry_root_backup:
if (ret)
goto fail_qgroup;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
ret = btrfs_cleanup_fs_roots(fs_info);
if (ret)
goto fail_qgroup;
@@ -3121,7 +3123,7 @@ retry_root_backup:
goto fail_qgroup;
}
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return 0;
if (btrfs_test_opt(fs_info, CLEAR_CACHE) &&
@@ -3876,7 +3878,7 @@ void close_ctree(struct btrfs_fs_info *fs_info)
cancel_work_sync(&fs_info->async_reclaim_work);
- if (!(fs_info->sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(fs_info->sb)) {
/*
* If the cleaner thread is stopped and there are
* block groups queued for removal, the deletion will be
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 0f077c5db58e..3e5bb0cdd3cd 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2060,7 +2060,7 @@ int repair_eb_io_failure(struct btrfs_fs_info *fs_info,
unsigned long i, num_pages = num_extent_pages(eb->start, eb->len);
int ret = 0;
- if (fs_info->sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(fs_info->sb))
return -EROFS;
for (i = 0; i < num_pages; i++) {
@@ -2110,7 +2110,7 @@ int clean_io_failure(struct btrfs_fs_info *fs_info,
failrec->start);
goto out;
}
- if (fs_info->sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(fs_info->sb))
goto out;
spin_lock(&io_tree->lock);
diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 74fd7756cff3..aafcc785f840 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1886,6 +1886,10 @@ static ssize_t btrfs_file_write_iter(struct kiocb *iocb,
loff_t oldsize;
int clean_page = 0;
+ if (!(iocb->ki_flags & IOCB_DIRECT) &&
+ (iocb->ki_flags & IOCB_NOWAIT))
+ return -EOPNOTSUPP;
+
if (!inode_trylock(inode)) {
if (iocb->ki_flags & IOCB_NOWAIT)
return -EAGAIN;
@@ -3112,7 +3116,7 @@ out:
static int btrfs_file_open(struct inode *inode, struct file *filp)
{
- filp->f_mode |= FMODE_AIO_NOWAIT;
+ filp->f_mode |= FMODE_NOWAIT;
return generic_file_open(inode, filp);
}
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 17ad018da0a2..128f3e58634f 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -5821,7 +5821,7 @@ struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry)
if (!IS_ERR(inode) && root != sub_root) {
down_read(&fs_info->cleanup_work_sem);
- if (!(inode->i_sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(inode->i_sb))
ret = btrfs_orphan_cleanup(sub_root);
up_read(&fs_info->cleanup_work_sem);
if (ret) {
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index ae8fbf9d3de2..d6715c2bcdc4 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -296,8 +296,10 @@ static int btrfs_ioctl_setflags(struct file *file, void __user *arg)
if (fs_info->compress_type == BTRFS_COMPRESS_LZO)
comp = "lzo";
- else
+ else if (fs_info->compress_type == BTRFS_COMPRESS_ZLIB)
comp = "zlib";
+ else
+ comp = "zstd";
ret = btrfs_set_prop(inode, "btrfs.compression",
comp, strlen(comp), 0);
if (ret)
@@ -1435,6 +1437,8 @@ int btrfs_defrag_file(struct inode *inode, struct file *file,
if (range->compress_type == BTRFS_COMPRESS_LZO) {
btrfs_set_fs_incompat(fs_info, COMPRESS_LZO);
+ } else if (range->compress_type == BTRFS_COMPRESS_ZSTD) {
+ btrfs_set_fs_incompat(fs_info, COMPRESS_ZSTD);
}
ret = defrag_count;
@@ -4422,7 +4426,7 @@ static long btrfs_ioctl_dev_replace(struct btrfs_fs_info *fs_info,
switch (p->cmd) {
case BTRFS_IOCTL_DEV_REPLACE_CMD_START:
- if (fs_info->sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(fs_info->sb)) {
ret = -EROFS;
goto out;
}
diff --git a/fs/btrfs/props.c b/fs/btrfs/props.c
index 09c0266f248d..f6a05f836629 100644
--- a/fs/btrfs/props.c
+++ b/fs/btrfs/props.c
@@ -390,6 +390,8 @@ static int prop_compression_validate(const char *value, size_t len)
return 0;
else if (!strncmp("zlib", value, len))
return 0;
+ else if (!strncmp("zstd", value, len))
+ return 0;
return -EINVAL;
}
@@ -412,6 +414,8 @@ static int prop_compression_apply(struct inode *inode,
type = BTRFS_COMPRESS_LZO;
else if (!strncmp("zlib", value, 4))
type = BTRFS_COMPRESS_ZLIB;
+ else if (!strncmp("zstd", value, len))
+ type = BTRFS_COMPRESS_ZSTD;
else
return -EINVAL;
@@ -429,6 +433,8 @@ static const char *prop_compression_extract(struct inode *inode)
return "zlib";
case BTRFS_COMPRESS_LZO:
return "lzo";
+ case BTRFS_COMPRESS_ZSTD:
+ return "zstd";
}
return NULL;
diff --git a/fs/btrfs/root-tree.c b/fs/btrfs/root-tree.c
index 9fb9896610e0..95bcc3cce78f 100644
--- a/fs/btrfs/root-tree.c
+++ b/fs/btrfs/root-tree.c
@@ -228,7 +228,7 @@ int btrfs_find_orphan_roots(struct btrfs_fs_info *fs_info)
int ret;
bool can_recover = true;
- if (fs_info->sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(fs_info->sb))
can_recover = false;
path = btrfs_alloc_path();
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index 8f1d3d6e7087..32b043ef8ac9 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -539,33 +539,23 @@ static struct btrfs_path *alloc_path_for_send(void)
static int write_buf(struct file *filp, const void *buf, u32 len, loff_t *off)
{
int ret;
- mm_segment_t old_fs;
u32 pos = 0;
- old_fs = get_fs();
- set_fs(KERNEL_DS);
-
while (pos < len) {
- ret = vfs_write(filp, (__force const char __user *)buf + pos,
- len - pos, off);
+ ret = kernel_write(filp, buf + pos, len - pos, off);
/* TODO handle that correctly */
/*if (ret == -ERESTARTSYS) {
continue;
}*/
if (ret < 0)
- goto out;
+ return ret;
if (ret == 0) {
- ret = -EIO;
- goto out;
+ return -EIO;
}
pos += ret;
}
- ret = 0;
-
-out:
- set_fs(old_fs);
- return ret;
+ return 0;
}
static int tlv_put(struct send_ctx *sctx, u16 attr, const void *data, int len)
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 0b7a1d8cd08b..35a128acfbd1 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -103,7 +103,7 @@ static void btrfs_handle_error(struct btrfs_fs_info *fs_info)
{
struct super_block *sb = fs_info->sb;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
if (test_bit(BTRFS_FS_STATE_ERROR, &fs_info->fs_state)) {
@@ -139,7 +139,7 @@ void __btrfs_handle_fs_error(struct btrfs_fs_info *fs_info, const char *function
* Special case: if the error is EROFS, and we're already
* under MS_RDONLY, then it is safe here.
*/
- if (errno == -EROFS && (sb->s_flags & MS_RDONLY))
+ if (errno == -EROFS && sb_rdonly(sb))
return;
#ifdef CONFIG_PRINTK
@@ -514,6 +514,14 @@ int btrfs_parse_options(struct btrfs_fs_info *info, char *options,
btrfs_clear_opt(info->mount_opt, NODATASUM);
btrfs_set_fs_incompat(info, COMPRESS_LZO);
no_compress = 0;
+ } else if (strcmp(args[0].from, "zstd") == 0) {
+ compress_type = "zstd";
+ info->compress_type = BTRFS_COMPRESS_ZSTD;
+ btrfs_set_opt(info->mount_opt, COMPRESS);
+ btrfs_clear_opt(info->mount_opt, NODATACOW);
+ btrfs_clear_opt(info->mount_opt, NODATASUM);
+ btrfs_set_fs_incompat(info, COMPRESS_ZSTD);
+ no_compress = 0;
} else if (strncmp(args[0].from, "no", 2) == 0) {
compress_type = "no";
btrfs_clear_opt(info->mount_opt, COMPRESS);
@@ -1230,8 +1238,10 @@ static int btrfs_show_options(struct seq_file *seq, struct dentry *dentry)
if (btrfs_test_opt(info, COMPRESS)) {
if (info->compress_type == BTRFS_COMPRESS_ZLIB)
compress_type = "zlib";
- else
+ else if (info->compress_type == BTRFS_COMPRESS_LZO)
compress_type = "lzo";
+ else
+ compress_type = "zstd";
if (btrfs_test_opt(info, FORCE_COMPRESS))
seq_printf(seq, ",compress-force=%s", compress_type);
else
@@ -1691,8 +1701,7 @@ static inline void btrfs_remount_cleanup(struct btrfs_fs_info *fs_info,
* close or the filesystem is read only.
*/
if (btrfs_raw_test_opt(old_opts, AUTO_DEFRAG) &&
- (!btrfs_raw_test_opt(fs_info->mount_opt, AUTO_DEFRAG) ||
- (fs_info->sb->s_flags & MS_RDONLY))) {
+ (!btrfs_raw_test_opt(fs_info->mount_opt, AUTO_DEFRAG) || sb_rdonly(fs_info->sb))) {
btrfs_cleanup_defrag_inodes(fs_info);
}
@@ -1739,7 +1748,7 @@ static int btrfs_remount(struct super_block *sb, int *flags, char *data)
btrfs_resize_thread_pool(fs_info,
fs_info->thread_pool_size, old_thread_pool_size);
- if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
+ if ((bool)(*flags & MS_RDONLY) == sb_rdonly(sb))
goto out;
if (*flags & MS_RDONLY) {
@@ -1840,7 +1849,7 @@ out:
restore:
/* We've hit an error - don't reset MS_RDONLY */
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
old_flags |= MS_RDONLY;
sb->s_flags = old_flags;
fs_info->mount_opt = old_opts;
diff --git a/fs/btrfs/sysfs.c b/fs/btrfs/sysfs.c
index c2d5f3580b4c..883881b16c86 100644
--- a/fs/btrfs/sysfs.c
+++ b/fs/btrfs/sysfs.c
@@ -120,7 +120,7 @@ static ssize_t btrfs_feature_attr_store(struct kobject *kobj,
if (!fs_info)
return -EPERM;
- if (fs_info->sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(fs_info->sb))
return -EROFS;
ret = kstrtoul(skip_spaces(buf), 0, &val);
@@ -200,6 +200,7 @@ BTRFS_FEAT_ATTR_INCOMPAT(mixed_backref, MIXED_BACKREF);
BTRFS_FEAT_ATTR_INCOMPAT(default_subvol, DEFAULT_SUBVOL);
BTRFS_FEAT_ATTR_INCOMPAT(mixed_groups, MIXED_GROUPS);
BTRFS_FEAT_ATTR_INCOMPAT(compress_lzo, COMPRESS_LZO);
+BTRFS_FEAT_ATTR_INCOMPAT(compress_zstd, COMPRESS_ZSTD);
BTRFS_FEAT_ATTR_INCOMPAT(big_metadata, BIG_METADATA);
BTRFS_FEAT_ATTR_INCOMPAT(extended_iref, EXTENDED_IREF);
BTRFS_FEAT_ATTR_INCOMPAT(raid56, RAID56);
@@ -212,6 +213,7 @@ static struct attribute *btrfs_supported_feature_attrs[] = {
BTRFS_FEAT_ATTR_PTR(default_subvol),
BTRFS_FEAT_ATTR_PTR(mixed_groups),
BTRFS_FEAT_ATTR_PTR(compress_lzo),
+ BTRFS_FEAT_ATTR_PTR(compress_zstd),
BTRFS_FEAT_ATTR_PTR(big_metadata),
BTRFS_FEAT_ATTR_PTR(extended_iref),
BTRFS_FEAT_ATTR_PTR(raid56),
@@ -388,7 +390,7 @@ static ssize_t btrfs_label_store(struct kobject *kobj,
if (!fs_info)
return -EPERM;
- if (fs_info->sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(fs_info->sb))
return -EROFS;
/*
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index c188256a367c..0e8f16c305df 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -2324,7 +2324,7 @@ int btrfs_init_new_device(struct btrfs_fs_info *fs_info, const char *device_path
int seeding_dev = 0;
int ret = 0;
- if ((sb->s_flags & MS_RDONLY) && !fs_info->fs_devices->seeding)
+ if (sb_rdonly(sb) && !fs_info->fs_devices->seeding)
return -EROFS;
bdev = blkdev_get_by_path(device_path, FMODE_WRITE | FMODE_EXCL,
@@ -4053,7 +4053,7 @@ int btrfs_pause_balance(struct btrfs_fs_info *fs_info)
int btrfs_cancel_balance(struct btrfs_fs_info *fs_info)
{
- if (fs_info->sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(fs_info->sb))
return -EROFS;
mutex_lock(&fs_info->balance_mutex);
diff --git a/fs/btrfs/zstd.c b/fs/btrfs/zstd.c
new file mode 100644
index 000000000000..607ce47b483a
--- /dev/null
+++ b/fs/btrfs/zstd.c
@@ -0,0 +1,432 @@
+/*
+ * Copyright (c) 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License v2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ */
+#include <linux/bio.h>
+#include <linux/err.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/mm.h>
+#include <linux/pagemap.h>
+#include <linux/refcount.h>
+#include <linux/sched.h>
+#include <linux/slab.h>
+#include <linux/zstd.h>
+#include "compression.h"
+
+#define ZSTD_BTRFS_MAX_WINDOWLOG 17
+#define ZSTD_BTRFS_MAX_INPUT (1 << ZSTD_BTRFS_MAX_WINDOWLOG)
+#define ZSTD_BTRFS_DEFAULT_LEVEL 3
+
+static ZSTD_parameters zstd_get_btrfs_parameters(size_t src_len)
+{
+ ZSTD_parameters params = ZSTD_getParams(ZSTD_BTRFS_DEFAULT_LEVEL,
+ src_len, 0);
+
+ if (params.cParams.windowLog > ZSTD_BTRFS_MAX_WINDOWLOG)
+ params.cParams.windowLog = ZSTD_BTRFS_MAX_WINDOWLOG;
+ WARN_ON(src_len > ZSTD_BTRFS_MAX_INPUT);
+ return params;
+}
+
+struct workspace {
+ void *mem;
+ size_t size;
+ char *buf;
+ struct list_head list;
+};
+
+static void zstd_free_workspace(struct list_head *ws)
+{
+ struct workspace *workspace = list_entry(ws, struct workspace, list);
+
+ kvfree(workspace->mem);
+ kfree(workspace->buf);
+ kfree(workspace);
+}
+
+static struct list_head *zstd_alloc_workspace(void)
+{
+ ZSTD_parameters params =
+ zstd_get_btrfs_parameters(ZSTD_BTRFS_MAX_INPUT);
+ struct workspace *workspace;
+
+ workspace = kzalloc(sizeof(*workspace), GFP_KERNEL);
+ if (!workspace)
+ return ERR_PTR(-ENOMEM);
+
+ workspace->size = max_t(size_t,
+ ZSTD_CStreamWorkspaceBound(params.cParams),
+ ZSTD_DStreamWorkspaceBound(ZSTD_BTRFS_MAX_INPUT));
+ workspace->mem = kvmalloc(workspace->size, GFP_KERNEL);
+ workspace->buf = kmalloc(PAGE_SIZE, GFP_KERNEL);
+ if (!workspace->mem || !workspace->buf)
+ goto fail;
+
+ INIT_LIST_HEAD(&workspace->list);
+
+ return &workspace->list;
+fail:
+ zstd_free_workspace(&workspace->list);
+ return ERR_PTR(-ENOMEM);
+}
+
+static int zstd_compress_pages(struct list_head *ws,
+ struct address_space *mapping,
+ u64 start,
+ struct page **pages,
+ unsigned long *out_pages,
+ unsigned long *total_in,
+ unsigned long *total_out)
+{
+ struct workspace *workspace = list_entry(ws, struct workspace, list);
+ ZSTD_CStream *stream;
+ int ret = 0;
+ int nr_pages = 0;
+ struct page *in_page = NULL; /* The current page to read */
+ struct page *out_page = NULL; /* The current page to write to */
+ ZSTD_inBuffer in_buf = { NULL, 0, 0 };
+ ZSTD_outBuffer out_buf = { NULL, 0, 0 };
+ unsigned long tot_in = 0;
+ unsigned long tot_out = 0;
+ unsigned long len = *total_out;
+ const unsigned long nr_dest_pages = *out_pages;
+ unsigned long max_out = nr_dest_pages * PAGE_SIZE;
+ ZSTD_parameters params = zstd_get_btrfs_parameters(len);
+
+ *out_pages = 0;
+ *total_out = 0;
+ *total_in = 0;
+
+ /* Initialize the stream */
+ stream = ZSTD_initCStream(params, len, workspace->mem,
+ workspace->size);
+ if (!stream) {
+ pr_warn("BTRFS: ZSTD_initCStream failed\n");
+ ret = -EIO;
+ goto out;
+ }
+
+ /* map in the first page of input data */
+ in_page = find_get_page(mapping, start >> PAGE_SHIFT);
+ in_buf.src = kmap(in_page);
+ in_buf.pos = 0;
+ in_buf.size = min_t(size_t, len, PAGE_SIZE);
+
+
+ /* Allocate and map in the output buffer */
+ out_page = alloc_page(GFP_NOFS | __GFP_HIGHMEM);
+ if (out_page == NULL) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ pages[nr_pages++] = out_page;
+ out_buf.dst = kmap(out_page);
+ out_buf.pos = 0;
+ out_buf.size = min_t(size_t, max_out, PAGE_SIZE);
+
+ while (1) {
+ size_t ret2;
+
+ ret2 = ZSTD_compressStream(stream, &out_buf, &in_buf);
+ if (ZSTD_isError(ret2)) {
+ pr_debug("BTRFS: ZSTD_compressStream returned %d\n",
+ ZSTD_getErrorCode(ret2));
+ ret = -EIO;
+ goto out;
+ }
+
+ /* Check to see if we are making it bigger */
+ if (tot_in + in_buf.pos > 8192 &&
+ tot_in + in_buf.pos <
+ tot_out + out_buf.pos) {
+ ret = -E2BIG;
+ goto out;
+ }
+
+ /* We've reached the end of our output range */
+ if (out_buf.pos >= max_out) {
+ tot_out += out_buf.pos;
+ ret = -E2BIG;
+ goto out;
+ }
+
+ /* Check if we need more output space */
+ if (out_buf.pos == out_buf.size) {
+ tot_out += PAGE_SIZE;
+ max_out -= PAGE_SIZE;
+ kunmap(out_page);
+ if (nr_pages == nr_dest_pages) {
+ out_page = NULL;
+ ret = -E2BIG;
+ goto out;
+ }
+ out_page = alloc_page(GFP_NOFS | __GFP_HIGHMEM);
+ if (out_page == NULL) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ pages[nr_pages++] = out_page;
+ out_buf.dst = kmap(out_page);
+ out_buf.pos = 0;
+ out_buf.size = min_t(size_t, max_out, PAGE_SIZE);
+ }
+
+ /* We've reached the end of the input */
+ if (in_buf.pos >= len) {
+ tot_in += in_buf.pos;
+ break;
+ }
+
+ /* Check if we need more input */
+ if (in_buf.pos == in_buf.size) {
+ tot_in += PAGE_SIZE;
+ kunmap(in_page);
+ put_page(in_page);
+
+ start += PAGE_SIZE;
+ len -= PAGE_SIZE;
+ in_page = find_get_page(mapping, start >> PAGE_SHIFT);
+ in_buf.src = kmap(in_page);
+ in_buf.pos = 0;
+ in_buf.size = min_t(size_t, len, PAGE_SIZE);
+ }
+ }
+ while (1) {
+ size_t ret2;
+
+ ret2 = ZSTD_endStream(stream, &out_buf);
+ if (ZSTD_isError(ret2)) {
+ pr_debug("BTRFS: ZSTD_endStream returned %d\n",
+ ZSTD_getErrorCode(ret2));
+ ret = -EIO;
+ goto out;
+ }
+ if (ret2 == 0) {
+ tot_out += out_buf.pos;
+ break;
+ }
+ if (out_buf.pos >= max_out) {
+ tot_out += out_buf.pos;
+ ret = -E2BIG;
+ goto out;
+ }
+
+ tot_out += PAGE_SIZE;
+ max_out -= PAGE_SIZE;
+ kunmap(out_page);
+ if (nr_pages == nr_dest_pages) {
+ out_page = NULL;
+ ret = -E2BIG;
+ goto out;
+ }
+ out_page = alloc_page(GFP_NOFS | __GFP_HIGHMEM);
+ if (out_page == NULL) {
+ ret = -ENOMEM;
+ goto out;
+ }
+ pages[nr_pages++] = out_page;
+ out_buf.dst = kmap(out_page);
+ out_buf.pos = 0;
+ out_buf.size = min_t(size_t, max_out, PAGE_SIZE);
+ }
+
+ if (tot_out >= tot_in) {
+ ret = -E2BIG;
+ goto out;
+ }
+
+ ret = 0;
+ *total_in = tot_in;
+ *total_out = tot_out;
+out:
+ *out_pages = nr_pages;
+ /* Cleanup */
+ if (in_page) {
+ kunmap(in_page);
+ put_page(in_page);
+ }
+ if (out_page)
+ kunmap(out_page);
+ return ret;
+}
+
+static int zstd_decompress_bio(struct list_head *ws, struct compressed_bio *cb)
+{
+ struct workspace *workspace = list_entry(ws, struct workspace, list);
+ struct page **pages_in = cb->compressed_pages;
+ u64 disk_start = cb->start;
+ struct bio *orig_bio = cb->orig_bio;
+ size_t srclen = cb->compressed_len;
+ ZSTD_DStream *stream;
+ int ret = 0;
+ unsigned long page_in_index = 0;
+ unsigned long total_pages_in = DIV_ROUND_UP(srclen, PAGE_SIZE);
+ unsigned long buf_start;
+ unsigned long total_out = 0;
+ ZSTD_inBuffer in_buf = { NULL, 0, 0 };
+ ZSTD_outBuffer out_buf = { NULL, 0, 0 };
+
+ stream = ZSTD_initDStream(
+ ZSTD_BTRFS_MAX_INPUT, workspace->mem, workspace->size);
+ if (!stream) {
+ pr_debug("BTRFS: ZSTD_initDStream failed\n");
+ ret = -EIO;
+ goto done;
+ }
+
+ in_buf.src = kmap(pages_in[page_in_index]);
+ in_buf.pos = 0;
+ in_buf.size = min_t(size_t, srclen, PAGE_SIZE);
+
+ out_buf.dst = workspace->buf;
+ out_buf.pos = 0;
+ out_buf.size = PAGE_SIZE;
+
+ while (1) {
+ size_t ret2;
+
+ ret2 = ZSTD_decompressStream(stream, &out_buf, &in_buf);
+ if (ZSTD_isError(ret2)) {
+ pr_debug("BTRFS: ZSTD_decompressStream returned %d\n",
+ ZSTD_getErrorCode(ret2));
+ ret = -EIO;
+ goto done;
+ }
+ buf_start = total_out;
+ total_out += out_buf.pos;
+ out_buf.pos = 0;
+
+ ret = btrfs_decompress_buf2page(out_buf.dst, buf_start,
+ total_out, disk_start, orig_bio);
+ if (ret == 0)
+ break;
+
+ if (in_buf.pos >= srclen)
+ break;
+
+ /* Check if we've hit the end of a frame */
+ if (ret2 == 0)
+ break;
+
+ if (in_buf.pos == in_buf.size) {
+ kunmap(pages_in[page_in_index++]);
+ if (page_in_index >= total_pages_in) {
+ in_buf.src = NULL;
+ ret = -EIO;
+ goto done;
+ }
+ srclen -= PAGE_SIZE;
+ in_buf.src = kmap(pages_in[page_in_index]);
+ in_buf.pos = 0;
+ in_buf.size = min_t(size_t, srclen, PAGE_SIZE);
+ }
+ }
+ ret = 0;
+ zero_fill_bio(orig_bio);
+done:
+ if (in_buf.src)
+ kunmap(pages_in[page_in_index]);
+ return ret;
+}
+
+static int zstd_decompress(struct list_head *ws, unsigned char *data_in,
+ struct page *dest_page,
+ unsigned long start_byte,
+ size_t srclen, size_t destlen)
+{
+ struct workspace *workspace = list_entry(ws, struct workspace, list);
+ ZSTD_DStream *stream;
+ int ret = 0;
+ size_t ret2;
+ ZSTD_inBuffer in_buf = { NULL, 0, 0 };
+ ZSTD_outBuffer out_buf = { NULL, 0, 0 };
+ unsigned long total_out = 0;
+ unsigned long pg_offset = 0;
+ char *kaddr;
+
+ stream = ZSTD_initDStream(
+ ZSTD_BTRFS_MAX_INPUT, workspace->mem, workspace->size);
+ if (!stream) {
+ pr_warn("BTRFS: ZSTD_initDStream failed\n");
+ ret = -EIO;
+ goto finish;
+ }
+
+ destlen = min_t(size_t, destlen, PAGE_SIZE);
+
+ in_buf.src = data_in;
+ in_buf.pos = 0;
+ in_buf.size = srclen;
+
+ out_buf.dst = workspace->buf;
+ out_buf.pos = 0;
+ out_buf.size = PAGE_SIZE;
+
+ ret2 = 1;
+ while (pg_offset < destlen && in_buf.pos < in_buf.size) {
+ unsigned long buf_start;
+ unsigned long buf_offset;
+ unsigned long bytes;
+
+ /* Check if the frame is over and we still need more input */
+ if (ret2 == 0) {
+ pr_debug("BTRFS: ZSTD_decompressStream ended early\n");
+ ret = -EIO;
+ goto finish;
+ }
+ ret2 = ZSTD_decompressStream(stream, &out_buf, &in_buf);
+ if (ZSTD_isError(ret2)) {
+ pr_debug("BTRFS: ZSTD_decompressStream returned %d\n",
+ ZSTD_getErrorCode(ret2));
+ ret = -EIO;
+ goto finish;
+ }
+
+ buf_start = total_out;
+ total_out += out_buf.pos;
+ out_buf.pos = 0;
+
+ if (total_out <= start_byte)
+ continue;
+
+ if (total_out > start_byte && buf_start < start_byte)
+ buf_offset = start_byte - buf_start;
+ else
+ buf_offset = 0;
+
+ bytes = min_t(unsigned long, destlen - pg_offset,
+ out_buf.size - buf_offset);
+
+ kaddr = kmap_atomic(dest_page);
+ memcpy(kaddr + pg_offset, out_buf.dst + buf_offset, bytes);
+ kunmap_atomic(kaddr);
+
+ pg_offset += bytes;
+ }
+ ret = 0;
+finish:
+ if (pg_offset < destlen) {
+ kaddr = kmap_atomic(dest_page);
+ memset(kaddr + pg_offset, 0, destlen - pg_offset);
+ kunmap_atomic(kaddr);
+ }
+ return ret;
+}
+
+const struct btrfs_compress_op btrfs_zstd_compress = {
+ .alloc_workspace = zstd_alloc_workspace,
+ .free_workspace = zstd_free_workspace,
+ .compress_pages = zstd_compress_pages,
+ .decompress_bio = zstd_decompress_bio,
+ .decompress = zstd_decompress,
+};
diff --git a/fs/cachefiles/bind.c b/fs/cachefiles/bind.c
index 3ff867f87d73..d9f001078e08 100644
--- a/fs/cachefiles/bind.c
+++ b/fs/cachefiles/bind.c
@@ -133,7 +133,7 @@ static int cachefiles_daemon_add_cache(struct cachefiles_cache *cache)
goto error_unsupported;
ret = -EROFS;
- if (root->d_sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(root->d_sb))
goto error_unsupported;
/* determine the security of the on-disk cache as this governs
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c
index 1bc709fe330a..b3e3edc09d80 100644
--- a/fs/ceph/addr.c
+++ b/fs/ceph/addr.c
@@ -152,17 +152,10 @@ static void ceph_invalidatepage(struct page *page, unsigned int offset,
ceph_invalidate_fscache_page(inode, page);
+ WARN_ON(!PageLocked(page));
if (!PagePrivate(page))
return;
- /*
- * We can get non-dirty pages here due to races between
- * set_page_dirty and truncate_complete_page; just spit out a
- * warning, in case we end up with accounting problems later.
- */
- if (!PageDirty(page))
- pr_err("%p invalidatepage %p page not dirty\n", inode, page);
-
ClearPageChecked(page);
dout("%p invalidatepage %p idx %lu full dirty page\n",
@@ -455,13 +448,9 @@ static int ceph_readpages(struct file *file, struct address_space *mapping,
if (rc == 0)
goto out;
- if (fsc->mount_options->rsize >= PAGE_SIZE)
- max = (fsc->mount_options->rsize + PAGE_SIZE - 1)
- >> PAGE_SHIFT;
-
- dout("readpages %p file %p nr_pages %d max %d\n", inode,
- file, nr_pages,
- max);
+ max = fsc->mount_options->rsize >> PAGE_SHIFT;
+ dout("readpages %p file %p nr_pages %d max %d\n",
+ inode, file, nr_pages, max);
while (!list_empty(page_list)) {
rc = start_read(inode, page_list, max);
if (rc < 0)
@@ -474,14 +463,22 @@ out:
return rc;
}
+struct ceph_writeback_ctl
+{
+ loff_t i_size;
+ u64 truncate_size;
+ u32 truncate_seq;
+ bool size_stable;
+ bool head_snapc;
+};
+
/*
* Get ref for the oldest snapc for an inode with dirty data... that is, the
* only snap context we are allowed to write back.
*/
-static struct ceph_snap_context *get_oldest_context(struct inode *inode,
- loff_t *snap_size,
- u64 *truncate_size,
- u32 *truncate_seq)
+static struct ceph_snap_context *
+get_oldest_context(struct inode *inode, struct ceph_writeback_ctl *ctl,
+ struct ceph_snap_context *page_snapc)
{
struct ceph_inode_info *ci = ceph_inode(inode);
struct ceph_snap_context *snapc = NULL;
@@ -491,30 +488,78 @@ static struct ceph_snap_context *get_oldest_context(struct inode *inode,
list_for_each_entry(capsnap, &ci->i_cap_snaps, ci_item) {
dout(" cap_snap %p snapc %p has %d dirty pages\n", capsnap,
capsnap->context, capsnap->dirty_pages);
- if (capsnap->dirty_pages) {
- snapc = ceph_get_snap_context(capsnap->context);
- if (snap_size)
- *snap_size = capsnap->size;
- if (truncate_size)
- *truncate_size = capsnap->truncate_size;
- if (truncate_seq)
- *truncate_seq = capsnap->truncate_seq;
- break;
+ if (!capsnap->dirty_pages)
+ continue;
+
+ /* get i_size, truncate_{seq,size} for page_snapc? */
+ if (snapc && capsnap->context != page_snapc)
+ continue;
+
+ if (ctl) {
+ if (capsnap->writing) {
+ ctl->i_size = i_size_read(inode);
+ ctl->size_stable = false;
+ } else {
+ ctl->i_size = capsnap->size;
+ ctl->size_stable = true;
+ }
+ ctl->truncate_size = capsnap->truncate_size;
+ ctl->truncate_seq = capsnap->truncate_seq;
+ ctl->head_snapc = false;
}
+
+ if (snapc)
+ break;
+
+ snapc = ceph_get_snap_context(capsnap->context);
+ if (!page_snapc ||
+ page_snapc == snapc ||
+ page_snapc->seq > snapc->seq)
+ break;
}
if (!snapc && ci->i_wrbuffer_ref_head) {
snapc = ceph_get_snap_context(ci->i_head_snapc);
dout(" head snapc %p has %d dirty pages\n",
snapc, ci->i_wrbuffer_ref_head);
- if (truncate_size)
- *truncate_size = ci->i_truncate_size;
- if (truncate_seq)
- *truncate_seq = ci->i_truncate_seq;
+ if (ctl) {
+ ctl->i_size = i_size_read(inode);
+ ctl->truncate_size = ci->i_truncate_size;
+ ctl->truncate_seq = ci->i_truncate_seq;
+ ctl->size_stable = false;
+ ctl->head_snapc = true;
+ }
}
spin_unlock(&ci->i_ceph_lock);
return snapc;
}
+static u64 get_writepages_data_length(struct inode *inode,
+ struct page *page, u64 start)
+{
+ struct ceph_inode_info *ci = ceph_inode(inode);
+ struct ceph_snap_context *snapc = page_snap_context(page);
+ struct ceph_cap_snap *capsnap = NULL;
+ u64 end = i_size_read(inode);
+
+ if (snapc != ci->i_head_snapc) {
+ bool found = false;
+ spin_lock(&ci->i_ceph_lock);
+ list_for_each_entry(capsnap, &ci->i_cap_snaps, ci_item) {
+ if (capsnap->context == snapc) {
+ if (!capsnap->writing)
+ end = capsnap->size;
+ found = true;
+ break;
+ }
+ }
+ spin_unlock(&ci->i_ceph_lock);
+ WARN_ON(!found);
+ }
+ if (end > page_offset(page) + PAGE_SIZE)
+ end = page_offset(page) + PAGE_SIZE;
+ return end > start ? end - start : 0;
+}
+
/*
* Write a single page, but leave the page locked.
*
@@ -526,30 +571,25 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
struct inode *inode;
struct ceph_inode_info *ci;
struct ceph_fs_client *fsc;
- struct ceph_osd_client *osdc;
struct ceph_snap_context *snapc, *oldest;
loff_t page_off = page_offset(page);
- loff_t snap_size = -1;
long writeback_stat;
- u64 truncate_size;
- u32 truncate_seq;
int err, len = PAGE_SIZE;
+ struct ceph_writeback_ctl ceph_wbc;
dout("writepage %p idx %lu\n", page, page->index);
inode = page->mapping->host;
ci = ceph_inode(inode);
fsc = ceph_inode_to_client(inode);
- osdc = &fsc->client->osdc;
/* verify this is a writeable snap context */
snapc = page_snap_context(page);
- if (snapc == NULL) {
+ if (!snapc) {
dout("writepage %p page %p not dirty?\n", inode, page);
return 0;
}
- oldest = get_oldest_context(inode, &snap_size,
- &truncate_size, &truncate_seq);
+ oldest = get_oldest_context(inode, &ceph_wbc, snapc);
if (snapc->seq > oldest->seq) {
dout("writepage %p page %p snapc %p not writeable - noop\n",
inode, page, snapc);
@@ -561,20 +601,18 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
}
ceph_put_snap_context(oldest);
- if (snap_size == -1)
- snap_size = i_size_read(inode);
-
/* is this a partial page at end of file? */
- if (page_off >= snap_size) {
- dout("%p page eof %llu\n", page, snap_size);
+ if (page_off >= ceph_wbc.i_size) {
+ dout("%p page eof %llu\n", page, ceph_wbc.i_size);
+ page->mapping->a_ops->invalidatepage(page, 0, PAGE_SIZE);
return 0;
}
- if (snap_size < page_off + len)
- len = snap_size - page_off;
+ if (ceph_wbc.i_size < page_off + len)
+ len = ceph_wbc.i_size - page_off;
- dout("writepage %p page %p index %lu on %llu~%u snapc %p\n",
- inode, page, page->index, page_off, len, snapc);
+ dout("writepage %p page %p index %lu on %llu~%u snapc %p seq %lld\n",
+ inode, page, page->index, page_off, len, snapc, snapc->seq);
writeback_stat = atomic_long_inc_return(&fsc->writeback_count);
if (writeback_stat >
@@ -582,10 +620,10 @@ static int writepage_nounlock(struct page *page, struct writeback_control *wbc)
set_bdi_congested(inode_to_bdi(inode), BLK_RW_ASYNC);
set_page_writeback(page);
- err = ceph_osdc_writepages(osdc, ceph_vino(inode),
- &ci->i_layout, snapc,
- page_off, len,
- truncate_seq, truncate_size,
+ err = ceph_osdc_writepages(&fsc->client->osdc, ceph_vino(inode),
+ &ci->i_layout, snapc, page_off, len,
+ ceph_wbc.truncate_seq,
+ ceph_wbc.truncate_size,
&inode->i_mtime, &page, 1);
if (err < 0) {
struct writeback_control tmp_wbc;
@@ -746,31 +784,17 @@ static int ceph_writepages_start(struct address_space *mapping,
struct ceph_inode_info *ci = ceph_inode(inode);
struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
struct ceph_vino vino = ceph_vino(inode);
- pgoff_t index, start, end;
- int range_whole = 0;
- int should_loop = 1;
- pgoff_t max_pages = 0, max_pages_ever = 0;
+ pgoff_t index, start_index, end = -1;
struct ceph_snap_context *snapc = NULL, *last_snapc = NULL, *pgsnapc;
struct pagevec pvec;
- int done = 0;
int rc = 0;
unsigned int wsize = i_blocksize(inode);
struct ceph_osd_request *req = NULL;
- int do_sync = 0;
- loff_t snap_size, i_size;
- u64 truncate_size;
- u32 truncate_seq;
+ struct ceph_writeback_ctl ceph_wbc;
+ bool should_loop, range_whole = false;
+ bool stop, done = false;
- /*
- * Include a 'sync' in the OSD request if this is a data
- * integrity write (e.g., O_SYNC write or fsync()), or if our
- * cap is being revoked.
- */
- if ((wbc->sync_mode == WB_SYNC_ALL) ||
- ceph_caps_revoking(ci, CEPH_CAP_FILE_BUFFER))
- do_sync = 1;
- dout("writepages_start %p dosync=%d (mode=%s)\n",
- inode, do_sync,
+ dout("writepages_start %p (mode=%s)\n", inode,
wbc->sync_mode == WB_SYNC_NONE ? "NONE" :
(wbc->sync_mode == WB_SYNC_ALL ? "ALL" : "HOLD"));
@@ -783,35 +807,17 @@ static int ceph_writepages_start(struct address_space *mapping,
mapping_set_error(mapping, -EIO);
return -EIO; /* we're in a forced umount, don't write! */
}
- if (fsc->mount_options->wsize && fsc->mount_options->wsize < wsize)
+ if (fsc->mount_options->wsize < wsize)
wsize = fsc->mount_options->wsize;
- if (wsize < PAGE_SIZE)
- wsize = PAGE_SIZE;
- max_pages_ever = wsize >> PAGE_SHIFT;
pagevec_init(&pvec, 0);
- /* where to start/end? */
- if (wbc->range_cyclic) {
- start = mapping->writeback_index; /* Start from prev offset */
- end = -1;
- dout(" cyclic, start at %lu\n", start);
- } else {
- start = wbc->range_start >> PAGE_SHIFT;
- end = wbc->range_end >> PAGE_SHIFT;
- if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
- range_whole = 1;
- should_loop = 0;
- dout(" not cyclic, %lu to %lu\n", start, end);
- }
- index = start;
+ start_index = wbc->range_cyclic ? mapping->writeback_index : 0;
+ index = start_index;
retry:
/* find oldest snap context with dirty data */
- ceph_put_snap_context(snapc);
- snap_size = -1;
- snapc = get_oldest_context(inode, &snap_size,
- &truncate_size, &truncate_seq);
+ snapc = get_oldest_context(inode, &ceph_wbc, NULL);
if (!snapc) {
/* hmm, why does writepages get called when there
is no dirty data? */
@@ -821,40 +827,56 @@ retry:
dout(" oldest snapc is %p seq %lld (%d snaps)\n",
snapc, snapc->seq, snapc->num_snaps);
- i_size = i_size_read(inode);
-
- if (last_snapc && snapc != last_snapc) {
- /* if we switched to a newer snapc, restart our scan at the
- * start of the original file range. */
- dout(" snapc differs from last pass, restarting at %lu\n",
- index);
- index = start;
+ should_loop = false;
+ if (ceph_wbc.head_snapc && snapc != last_snapc) {
+ /* where to start/end? */
+ if (wbc->range_cyclic) {
+ index = start_index;
+ end = -1;
+ if (index > 0)
+ should_loop = true;
+ dout(" cyclic, start at %lu\n", index);
+ } else {
+ index = wbc->range_start >> PAGE_SHIFT;
+ end = wbc->range_end >> PAGE_SHIFT;
+ if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX)
+ range_whole = true;
+ dout(" not cyclic, %lu to %lu\n", index, end);
+ }
+ } else if (!ceph_wbc.head_snapc) {
+ /* Do not respect wbc->range_{start,end}. Dirty pages
+ * in that range can be associated with newer snapc.
+ * They are not writeable until we write all dirty pages
+ * associated with 'snapc' get written */
+ if (index > 0 || wbc->sync_mode != WB_SYNC_NONE)
+ should_loop = true;
+ dout(" non-head snapc, range whole\n");
}
+
+ ceph_put_snap_context(last_snapc);
last_snapc = snapc;
- while (!done && index <= end) {
- unsigned i;
- int first;
- pgoff_t strip_unit_end = 0;
+ stop = false;
+ while (!stop && index <= end) {
int num_ops = 0, op_idx;
- int pvec_pages, locked_pages = 0;
+ unsigned i, pvec_pages, max_pages, locked_pages = 0;
struct page **pages = NULL, **data_pages;
mempool_t *pool = NULL; /* Becomes non-null if mempool used */
struct page *page;
- int want;
+ pgoff_t strip_unit_end = 0;
u64 offset = 0, len = 0;
- max_pages = max_pages_ever;
+ max_pages = wsize >> PAGE_SHIFT;
get_more_pages:
- first = -1;
- want = min(end - index,
- min((pgoff_t)PAGEVEC_SIZE,
- max_pages - (pgoff_t)locked_pages) - 1)
- + 1;
+ pvec_pages = min_t(unsigned, PAGEVEC_SIZE,
+ max_pages - locked_pages);
+ if (end - index < (u64)(pvec_pages - 1))
+ pvec_pages = (unsigned)(end - index) + 1;
+
pvec_pages = pagevec_lookup_tag(&pvec, mapping, &index,
PAGECACHE_TAG_DIRTY,
- want);
+ pvec_pages);
dout("pagevec_lookup_tag got %d\n", pvec_pages);
if (!pvec_pages && !locked_pages)
break;
@@ -871,11 +893,15 @@ get_more_pages:
unlikely(page->mapping != mapping)) {
dout("!dirty or !mapping %p\n", page);
unlock_page(page);
- break;
+ continue;
}
- if (!wbc->range_cyclic && page->index > end) {
+ if (page->index > end) {
dout("end of range %p\n", page);
- done = 1;
+ /* can't be range_cyclic (1st pass) because
+ * end == -1 in that case. */
+ stop = true;
+ if (ceph_wbc.head_snapc)
+ done = true;
unlock_page(page);
break;
}
@@ -884,39 +910,37 @@ get_more_pages:
unlock_page(page);
break;
}
- if (wbc->sync_mode != WB_SYNC_NONE) {
- dout("waiting on writeback %p\n", page);
- wait_on_page_writeback(page);
- }
- if (page_offset(page) >=
- (snap_size == -1 ? i_size : snap_size)) {
- dout("%p page eof %llu\n", page,
- (snap_size == -1 ? i_size : snap_size));
- done = 1;
+ if (page_offset(page) >= ceph_wbc.i_size) {
+ dout("%p page eof %llu\n",
+ page, ceph_wbc.i_size);
+ /* not done if range_cyclic */
+ stop = true;
unlock_page(page);
break;
}
if (PageWriteback(page)) {
- dout("%p under writeback\n", page);
- unlock_page(page);
- break;
+ if (wbc->sync_mode == WB_SYNC_NONE) {
+ dout("%p under writeback\n", page);
+ unlock_page(page);
+ continue;
+ }
+ dout("waiting on writeback %p\n", page);
+ wait_on_page_writeback(page);
}
/* only if matching snap context */
pgsnapc = page_snap_context(page);
- if (pgsnapc->seq > snapc->seq) {
- dout("page snapc %p %lld > oldest %p %lld\n",
+ if (pgsnapc != snapc) {
+ dout("page snapc %p %lld != oldest %p %lld\n",
pgsnapc, pgsnapc->seq, snapc, snapc->seq);
unlock_page(page);
- if (!locked_pages)
- continue; /* keep looking for snap */
- break;
+ continue;
}
if (!clear_page_dirty_for_io(page)) {
dout("%p !clear_page_dirty_for_io\n", page);
unlock_page(page);
- break;
+ continue;
}
/*
@@ -942,7 +966,7 @@ get_more_pages:
break;
}
- num_ops = 1 + do_sync;
+ num_ops = 1;
strip_unit_end = page->index +
((len - 1) >> PAGE_SHIFT);
@@ -972,8 +996,6 @@ get_more_pages:
}
/* note position of first page in pvec */
- if (first < 0)
- first = i;
dout("%p will write page %p idx %lu\n",
inode, page, page->index);
@@ -984,8 +1006,10 @@ get_more_pages:
BLK_RW_ASYNC);
}
- pages[locked_pages] = page;
- locked_pages++;
+
+ pages[locked_pages++] = page;
+ pvec.pages[i] = NULL;
+
len += PAGE_SIZE;
}
@@ -993,23 +1017,23 @@ get_more_pages:
if (!locked_pages)
goto release_pvec_pages;
if (i) {
- int j;
- BUG_ON(!locked_pages || first < 0);
+ unsigned j, n = 0;
+ /* shift unused page to beginning of pvec */
+ for (j = 0; j < pvec_pages; j++) {
+ if (!pvec.pages[j])
+ continue;
+ if (n < j)
+ pvec.pages[n] = pvec.pages[j];
+ n++;
+ }
+ pvec.nr = n;
if (pvec_pages && i == pvec_pages &&
locked_pages < max_pages) {
dout("reached end pvec, trying for more\n");
- pagevec_reinit(&pvec);
+ pagevec_release(&pvec);
goto get_more_pages;
}
-
- /* shift unused pages over in the pvec... we
- * will need to release them below. */
- for (j = i; j < pvec_pages; j++) {
- dout(" pvec leftover page %p\n", pvec.pages[j]);
- pvec.pages[j-i+first] = pvec.pages[j];
- }
- pvec.nr -= i-first;
}
new_request:
@@ -1019,10 +1043,9 @@ new_request:
req = ceph_osdc_new_request(&fsc->client->osdc,
&ci->i_layout, vino,
offset, &len, 0, num_ops,
- CEPH_OSD_OP_WRITE,
- CEPH_OSD_FLAG_WRITE,
- snapc, truncate_seq,
- truncate_size, false);
+ CEPH_OSD_OP_WRITE, CEPH_OSD_FLAG_WRITE,
+ snapc, ceph_wbc.truncate_seq,
+ ceph_wbc.truncate_size, false);
if (IS_ERR(req)) {
req = ceph_osdc_new_request(&fsc->client->osdc,
&ci->i_layout, vino,
@@ -1031,8 +1054,8 @@ new_request:
CEPH_OSD_SLAB_OPS),
CEPH_OSD_OP_WRITE,
CEPH_OSD_FLAG_WRITE,
- snapc, truncate_seq,
- truncate_size, true);
+ snapc, ceph_wbc.truncate_seq,
+ ceph_wbc.truncate_size, true);
BUG_ON(IS_ERR(req));
}
BUG_ON(len < page_offset(pages[locked_pages - 1]) +
@@ -1048,7 +1071,7 @@ new_request:
for (i = 0; i < locked_pages; i++) {
u64 cur_offset = page_offset(pages[i]);
if (offset + len != cur_offset) {
- if (op_idx + do_sync + 1 == req->r_num_ops)
+ if (op_idx + 1 == req->r_num_ops)
break;
osd_req_op_extent_dup_last(req, op_idx,
cur_offset - offset);
@@ -1069,14 +1092,15 @@ new_request:
len += PAGE_SIZE;
}
- if (snap_size != -1) {
- len = min(len, snap_size - offset);
+ if (ceph_wbc.size_stable) {
+ len = min(len, ceph_wbc.i_size - offset);
} else if (i == locked_pages) {
/* writepages_finish() clears writeback pages
* according to the data length, so make sure
* data length covers all locked pages */
u64 min_len = len + 1 - PAGE_SIZE;
- len = min(len, (u64)i_size_read(inode) - offset);
+ len = get_writepages_data_length(inode, pages[i - 1],
+ offset);
len = max(len, min_len);
}
dout("writepages got pages at %llu~%llu\n", offset, len);
@@ -1085,17 +1109,12 @@ new_request:
0, !!pool, false);
osd_req_op_extent_update(req, op_idx, len);
- if (do_sync) {
- op_idx++;
- osd_req_op_init(req, op_idx, CEPH_OSD_OP_STARTSYNC, 0);
- }
BUG_ON(op_idx + 1 != req->r_num_ops);
pool = NULL;
if (i < locked_pages) {
BUG_ON(num_ops <= req->r_num_ops);
num_ops -= req->r_num_ops;
- num_ops += do_sync;
locked_pages -= i;
/* allocate new pages array for next request */
@@ -1127,22 +1146,50 @@ new_request:
if (pages)
goto new_request;
- if (wbc->nr_to_write <= 0)
- done = 1;
+ /*
+ * We stop writing back only if we are not doing
+ * integrity sync. In case of integrity sync we have to
+ * keep going until we have written all the pages
+ * we tagged for writeback prior to entering this loop.
+ */
+ if (wbc->nr_to_write <= 0 && wbc->sync_mode == WB_SYNC_NONE)
+ done = stop = true;
release_pvec_pages:
dout("pagevec_release on %d pages (%p)\n", (int)pvec.nr,
pvec.nr ? pvec.pages[0] : NULL);
pagevec_release(&pvec);
-
- if (locked_pages && !done)
- goto retry;
}
if (should_loop && !done) {
/* more to do; loop back to beginning of file */
dout("writepages looping back to beginning of file\n");
- should_loop = 0;
+ end = start_index - 1; /* OK even when start_index == 0 */
+
+ /* to write dirty pages associated with next snapc,
+ * we need to wait until current writes complete */
+ if (wbc->sync_mode != WB_SYNC_NONE &&
+ start_index == 0 && /* all dirty pages were checked */
+ !ceph_wbc.head_snapc) {
+ struct page *page;
+ unsigned i, nr;
+ index = 0;
+ while ((index <= end) &&
+ (nr = pagevec_lookup_tag(&pvec, mapping, &index,
+ PAGECACHE_TAG_WRITEBACK,
+ PAGEVEC_SIZE))) {
+ for (i = 0; i < nr; i++) {
+ page = pvec.pages[i];
+ if (page_snap_context(page) != snapc)
+ continue;
+ wait_on_page_writeback(page);
+ }
+ pagevec_release(&pvec);
+ cond_resched();
+ }
+ }
+
+ start_index = 0;
index = 0;
goto retry;
}
@@ -1152,8 +1199,8 @@ release_pvec_pages:
out:
ceph_osdc_put_request(req);
- ceph_put_snap_context(snapc);
- dout("writepages done, rc = %d\n", rc);
+ ceph_put_snap_context(last_snapc);
+ dout("writepages dend - startone, rc = %d\n", rc);
return rc;
}
@@ -1165,8 +1212,7 @@ out:
static int context_is_writeable_or_written(struct inode *inode,
struct ceph_snap_context *snapc)
{
- struct ceph_snap_context *oldest = get_oldest_context(inode, NULL,
- NULL, NULL);
+ struct ceph_snap_context *oldest = get_oldest_context(inode, NULL, NULL);
int ret = !oldest || snapc->seq <= oldest->seq;
ceph_put_snap_context(oldest);
@@ -1211,8 +1257,7 @@ retry_locked:
* this page is already dirty in another (older) snap
* context! is it writeable now?
*/
- oldest = get_oldest_context(inode, NULL, NULL, NULL);
-
+ oldest = get_oldest_context(inode, NULL, NULL);
if (snapc->seq > oldest->seq) {
ceph_put_snap_context(oldest);
dout(" page %p snapc %p not current or oldest\n",
diff --git a/fs/ceph/cache.c b/fs/ceph/cache.c
index 174d6e6569a8..a3ab265d3215 100644
--- a/fs/ceph/cache.c
+++ b/fs/ceph/cache.c
@@ -209,7 +209,7 @@ void ceph_fscache_register_inode_cookie(struct inode *inode)
struct ceph_fs_client *fsc = ceph_inode_to_client(inode);
/* No caching for filesystem */
- if (fsc->fscache == NULL)
+ if (!fsc->fscache)
return;
/* Only cache for regular files that are read only */
diff --git a/fs/ceph/caps.c b/fs/ceph/caps.c
index 7007ae2a5ad2..157fe59fbabe 100644
--- a/fs/ceph/caps.c
+++ b/fs/ceph/caps.c
@@ -490,13 +490,14 @@ static void __check_cap_issue(struct ceph_inode_info *ci, struct ceph_cap *cap,
}
/*
- * if we are newly issued FILE_SHARED, mark dir not complete; we
- * don't know what happened to this directory while we didn't
- * have the cap.
+ * If FILE_SHARED is newly issued, mark dir not complete. We don't
+ * know what happened to this directory while we didn't have the cap.
+ * If FILE_SHARED is being revoked, also mark dir not complete. It
+ * stops on-going cached readdir.
*/
- if ((issued & CEPH_CAP_FILE_SHARED) &&
- (had & CEPH_CAP_FILE_SHARED) == 0) {
- ci->i_shared_gen++;
+ if ((issued & CEPH_CAP_FILE_SHARED) != (had & CEPH_CAP_FILE_SHARED)) {
+ if (issued & CEPH_CAP_FILE_SHARED)
+ ci->i_shared_gen++;
if (S_ISDIR(ci->vfs_inode.i_mode)) {
dout(" marking %p NOT complete\n", &ci->vfs_inode);
__ceph_dir_clear_complete(ci);
@@ -611,7 +612,7 @@ void ceph_add_cap(struct inode *inode,
}
if (flags & CEPH_CAP_FLAG_AUTH) {
- if (ci->i_auth_cap == NULL ||
+ if (!ci->i_auth_cap ||
ceph_seq_cmp(ci->i_auth_cap->mseq, mseq) < 0) {
ci->i_auth_cap = cap;
cap->mds_wanted = wanted;
@@ -728,7 +729,7 @@ static void __touch_cap(struct ceph_cap *cap)
struct ceph_mds_session *s = cap->session;
spin_lock(&s->s_cap_lock);
- if (s->s_cap_iterator == NULL) {
+ if (!s->s_cap_iterator) {
dout("__touch_cap %p cap %p mds%d\n", &cap->ci->vfs_inode, cap,
s->s_mds);
list_move_tail(&cap->session_caps, &s->s_caps);
@@ -1248,7 +1249,10 @@ static int __send_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap,
arg.mode = inode->i_mode;
arg.inline_data = ci->i_inline_version != CEPH_INLINE_NONE;
- arg.flags = 0;
+ if (list_empty(&ci->i_cap_snaps))
+ arg.flags = CEPH_CLIENT_CAPS_NO_CAPSNAP;
+ else
+ arg.flags = CEPH_CLIENT_CAPS_PENDING_CAPSNAP;
if (sync)
arg.flags |= CEPH_CLIENT_CAPS_SYNC;
@@ -1454,13 +1458,19 @@ retry:
goto retry;
}
+ // make sure flushsnap messages are sent in proper order.
+ if (ci->i_ceph_flags & CEPH_I_KICK_FLUSH) {
+ __kick_flushing_caps(mdsc, session, ci, 0);
+ ci->i_ceph_flags &= ~CEPH_I_KICK_FLUSH;
+ }
+
__ceph_flush_snaps(ci, session);
out:
spin_unlock(&ci->i_ceph_lock);
if (psession) {
*psession = session;
- } else {
+ } else if (session) {
mutex_unlock(&session->s_mutex);
ceph_put_mds_session(session);
}
@@ -1901,11 +1911,7 @@ ack:
(ci->i_ceph_flags &
(CEPH_I_KICK_FLUSH | CEPH_I_FLUSH_SNAPS))) {
if (ci->i_ceph_flags & CEPH_I_KICK_FLUSH) {
- spin_lock(&mdsc->cap_dirty_lock);
- oldest_flush_tid = __get_oldest_flush_tid(mdsc);
- spin_unlock(&mdsc->cap_dirty_lock);
- __kick_flushing_caps(mdsc, session, ci,
- oldest_flush_tid);
+ __kick_flushing_caps(mdsc, session, ci, 0);
ci->i_ceph_flags &= ~CEPH_I_KICK_FLUSH;
}
if (ci->i_ceph_flags & CEPH_I_FLUSH_SNAPS)
@@ -2110,7 +2116,7 @@ int ceph_fsync(struct file *file, loff_t start, loff_t end, int datasync)
dout("fsync %p%s\n", inode, datasync ? " datasync" : "");
- ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+ ret = file_write_and_wait_range(file, start, end);
if (ret < 0)
goto out;
@@ -3422,7 +3428,7 @@ retry:
tcap = __get_cap_for_mds(ci, target);
if (tcap) {
/* already have caps from the target */
- if (tcap->cap_id != t_cap_id ||
+ if (tcap->cap_id == t_cap_id &&
ceph_seq_cmp(tcap->seq, t_seq) < 0) {
dout(" updating import cap %p mds%d\n", tcap, target);
tcap->cap_id = t_cap_id;
diff --git a/fs/ceph/debugfs.c b/fs/ceph/debugfs.c
index 4e2d112c982f..d635496ea189 100644
--- a/fs/ceph/debugfs.c
+++ b/fs/ceph/debugfs.c
@@ -24,7 +24,7 @@ static int mdsmap_show(struct seq_file *s, void *p)
struct ceph_fs_client *fsc = s->private;
struct ceph_mdsmap *mdsmap;
- if (fsc->mdsc == NULL || fsc->mdsc->mdsmap == NULL)
+ if (!fsc->mdsc || !fsc->mdsc->mdsmap)
return 0;
mdsmap = fsc->mdsc->mdsmap;
seq_printf(s, "epoch %d\n", mdsmap->m_epoch);
diff --git a/fs/ceph/dir.c b/fs/ceph/dir.c
index ef7240ace576..019c2036d36f 100644
--- a/fs/ceph/dir.c
+++ b/fs/ceph/dir.c
@@ -377,8 +377,10 @@ more:
}
/* hints to request -> mds selection code */
req->r_direct_mode = USE_AUTH_MDS;
- req->r_direct_hash = ceph_frag_value(frag);
- __set_bit(CEPH_MDS_R_DIRECT_IS_HASH, &req->r_req_flags);
+ if (op == CEPH_MDS_OP_READDIR) {
+ req->r_direct_hash = ceph_frag_value(frag);
+ __set_bit(CEPH_MDS_R_DIRECT_IS_HASH, &req->r_req_flags);
+ }
if (fi->last_name) {
req->r_path2 = kstrdup(fi->last_name, GFP_KERNEL);
if (!req->r_path2) {
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 3d48c415f3cb..65a6fa12c857 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -175,7 +175,7 @@ static int ceph_init_file(struct inode *inode, struct file *file, int fmode)
dout("init_file %p %p 0%o (regular)\n", inode, file,
inode->i_mode);
cf = kmem_cache_zalloc(ceph_file_cachep, GFP_KERNEL);
- if (cf == NULL) {
+ if (!cf) {
ceph_put_fmode(ceph_inode(inode), fmode); /* clean up */
return -ENOMEM;
}
@@ -562,8 +562,7 @@ static ssize_t ceph_sync_read(struct kiocb *iocb, struct iov_iter *to,
ssize_t ret;
size_t len = iov_iter_count(to);
- dout("sync_read on file %p %llu~%u %s\n", file, off,
- (unsigned)len,
+ dout("sync_read on file %p %llu~%u %s\n", file, off, (unsigned)len,
(file->f_flags & O_DIRECT) ? "O_DIRECT" : "");
if (!len)
@@ -788,7 +787,7 @@ static void ceph_aio_retry_work(struct work_struct *work)
goto out;
}
- req->r_flags = CEPH_OSD_FLAG_ORDERSNAP | CEPH_OSD_FLAG_WRITE;
+ req->r_flags = /* CEPH_OSD_FLAG_ORDERSNAP | */ CEPH_OSD_FLAG_WRITE;
ceph_oloc_copy(&req->r_base_oloc, &orig_req->r_base_oloc);
ceph_oid_copy(&req->r_base_oid, &orig_req->r_base_oid);
@@ -800,7 +799,6 @@ static void ceph_aio_retry_work(struct work_struct *work)
}
req->r_ops[0] = orig_req->r_ops[0];
- osd_req_op_init(req, 1, CEPH_OSD_OP_STARTSYNC, 0);
req->r_mtime = aio_req->mtime;
req->r_data_offset = req->r_ops[0].extent.offset;
@@ -847,8 +845,9 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
if (write && ceph_snap(file_inode(file)) != CEPH_NOSNAP)
return -EROFS;
- dout("sync_direct_read_write (%s) on file %p %lld~%u\n",
- (write ? "write" : "read"), file, pos, (unsigned)count);
+ dout("sync_direct_%s on file %p %lld~%u snapc %p seq %lld\n",
+ (write ? "write" : "read"), file, pos, (unsigned)count,
+ snapc, snapc->seq);
ret = filemap_write_and_wait_range(inode->i_mapping, pos, pos + count);
if (ret < 0)
@@ -861,7 +860,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
if (ret2 < 0)
dout("invalidate_inode_pages2_range returned %d\n", ret2);
- flags = CEPH_OSD_FLAG_ORDERSNAP | CEPH_OSD_FLAG_WRITE;
+ flags = /* CEPH_OSD_FLAG_ORDERSNAP | */ CEPH_OSD_FLAG_WRITE;
} else {
flags = CEPH_OSD_FLAG_READ;
}
@@ -874,8 +873,7 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
vino = ceph_vino(inode);
req = ceph_osdc_new_request(&fsc->client->osdc, &ci->i_layout,
vino, pos, &size, 0,
- /*include a 'startsync' command*/
- write ? 2 : 1,
+ 1,
write ? CEPH_OSD_OP_WRITE :
CEPH_OSD_OP_READ,
flags, snapc,
@@ -887,6 +885,11 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
break;
}
+ if (write)
+ size = min_t(u64, size, fsc->mount_options->wsize);
+ else
+ size = min_t(u64, size, fsc->mount_options->rsize);
+
len = size;
pages = dio_get_pages_alloc(iter, len, &start, &num_pages);
if (IS_ERR(pages)) {
@@ -922,7 +925,6 @@ ceph_direct_read_write(struct kiocb *iocb, struct iov_iter *iter,
truncate_inode_pages_range(inode->i_mapping, pos,
(pos+len) | (PAGE_SIZE - 1));
- osd_req_op_init(req, 1, CEPH_OSD_OP_STARTSYNC, 0);
req->r_mtime = mtime;
}
@@ -1048,7 +1050,8 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
if (ceph_snap(file_inode(file)) != CEPH_NOSNAP)
return -EROFS;
- dout("sync_write on file %p %lld~%u\n", file, pos, (unsigned)count);
+ dout("sync_write on file %p %lld~%u snapc %p seq %lld\n",
+ file, pos, (unsigned)count, snapc, snapc->seq);
ret = filemap_write_and_wait_range(inode->i_mapping, pos, pos + count);
if (ret < 0)
@@ -1060,7 +1063,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
if (ret < 0)
dout("invalidate_inode_pages2_range returned %d\n", ret);
- flags = CEPH_OSD_FLAG_ORDERSNAP | CEPH_OSD_FLAG_WRITE;
+ flags = /* CEPH_OSD_FLAG_ORDERSNAP | */ CEPH_OSD_FLAG_WRITE;
while ((len = iov_iter_count(from)) > 0) {
size_t left;
@@ -1307,6 +1310,7 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
if (!prealloc_cf)
return -ENOMEM;
+retry_snap:
inode_lock(inode);
/* We can write back this queue in page reclaim */
@@ -1338,7 +1342,6 @@ static ssize_t ceph_write_iter(struct kiocb *iocb, struct iov_iter *from)
goto out;
}
-retry_snap:
/* FIXME: not complete since it doesn't account for being at quota */
if (ceph_osdmap_flag(osdc, CEPH_OSDMAP_FULL)) {
err = -ENOSPC;
@@ -1387,14 +1390,6 @@ retry_snap:
&prealloc_cf);
else
written = ceph_sync_write(iocb, &data, pos, snapc);
- if (written == -EOLDSNAPC) {
- dout("aio_write %p %llx.%llx %llu~%u"
- "got EOLDSNAPC, retrying\n",
- inode, ceph_vinop(inode),
- pos, (unsigned)count);
- inode_lock(inode);
- goto retry_snap;
- }
if (written > 0)
iov_iter_advance(from, written);
ceph_put_snap_context(snapc);
@@ -1428,10 +1423,15 @@ retry_snap:
ceph_cap_string(got));
ceph_put_cap_refs(ci, got);
+ if (written == -EOLDSNAPC) {
+ dout("aio_write %p %llx.%llx %llu~%u" "got EOLDSNAPC, retrying\n",
+ inode, ceph_vinop(inode), pos, (unsigned)count);
+ goto retry_snap;
+ }
+
if (written >= 0) {
if (ceph_osdmap_flag(osdc, CEPH_OSDMAP_NEARFULL))
iocb->ki_flags |= IOCB_DSYNC;
-
written = generic_write_sync(iocb, written);
}
@@ -1481,13 +1481,13 @@ static loff_t ceph_llseek(struct file *file, loff_t offset, int whence)
offset += file->f_pos;
break;
case SEEK_DATA:
- if (offset >= i_size) {
+ if (offset < 0 || offset >= i_size) {
ret = -ENXIO;
goto out;
}
break;
case SEEK_HOLE:
- if (offset >= i_size) {
+ if (offset < 0 || offset >= i_size) {
ret = -ENXIO;
goto out;
}
diff --git a/fs/ceph/inode.c b/fs/ceph/inode.c
index 220dfd87cbfa..373dab5173ca 100644
--- a/fs/ceph/inode.c
+++ b/fs/ceph/inode.c
@@ -52,7 +52,7 @@ struct inode *ceph_get_inode(struct super_block *sb, struct ceph_vino vino)
ino_t t = ceph_vino_to_ino(vino);
inode = iget5_locked(sb, t, ceph_ino_compare, ceph_set_ino_cb, &vino);
- if (inode == NULL)
+ if (!inode)
return ERR_PTR(-ENOMEM);
if (inode->i_state & I_NEW) {
dout("get_inode created new inode %p %llx.%llx ino %llx\n",
@@ -133,12 +133,9 @@ static struct ceph_inode_frag *__get_or_create_frag(struct ceph_inode_info *ci,
}
frag = kmalloc(sizeof(*frag), GFP_NOFS);
- if (!frag) {
- pr_err("__get_or_create_frag ENOMEM on %p %llx.%llx "
- "frag %x\n", &ci->vfs_inode,
- ceph_vinop(&ci->vfs_inode), f);
+ if (!frag)
return ERR_PTR(-ENOMEM);
- }
+
frag->frag = f;
frag->split_by = 0;
frag->mds = -1;
@@ -1070,7 +1067,6 @@ out_unlock:
spin_unlock(&dentry->d_lock);
if (old_lease_session)
ceph_put_mds_session(old_lease_session);
- return;
}
/*
@@ -1177,7 +1173,7 @@ retry_lookup:
dn = d_alloc(parent, &dname);
dout("d_alloc %p '%.*s' = %p\n", parent,
dname.len, dname.name, dn);
- if (dn == NULL) {
+ if (!dn) {
dput(parent);
err = -ENOMEM;
goto done;
@@ -1477,7 +1473,6 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
struct dentry *dn;
struct inode *in;
int err = 0, skipped = 0, ret, i;
- struct inode *snapdir = NULL;
struct ceph_mds_request_head *rhead = req->r_request->front.iov_base;
u32 frag = le32_to_cpu(rhead->args.readdir.frag);
u32 last_hash = 0;
@@ -1510,8 +1505,6 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
}
if (le32_to_cpu(rinfo->head->op) == CEPH_MDS_OP_LSSNAP) {
- snapdir = ceph_get_snapdir(d_inode(parent));
- parent = d_find_alias(snapdir);
dout("readdir_prepopulate %d items under SNAPDIR dn %p\n",
rinfo->dir_nr, parent);
} else {
@@ -1519,15 +1512,18 @@ int ceph_readdir_prepopulate(struct ceph_mds_request *req,
rinfo->dir_nr, parent);
if (rinfo->dir_dir)
ceph_fill_dirfrag(d_inode(parent), rinfo->dir_dir);
- }
- if (ceph_frag_is_leftmost(frag) && req->r_readdir_offset == 2 &&
- !(rinfo->hash_order && last_hash)) {
- /* note dir version at start of readdir so we can tell
- * if any dentries get dropped */
- req->r_dir_release_cnt = atomic64_read(&ci->i_release_count);
- req->r_dir_ordered_cnt = atomic64_read(&ci->i_ordered_count);
- req->r_readdir_cache_idx = 0;
+ if (ceph_frag_is_leftmost(frag) &&
+ req->r_readdir_offset == 2 &&
+ !(rinfo->hash_order && last_hash)) {
+ /* note dir version at start of readdir so we can
+ * tell if any dentries get dropped */
+ req->r_dir_release_cnt =
+ atomic64_read(&ci->i_release_count);
+ req->r_dir_ordered_cnt =
+ atomic64_read(&ci->i_ordered_count);
+ req->r_readdir_cache_idx = 0;
+ }
}
cache_ctl.index = req->r_readdir_cache_idx;
@@ -1566,7 +1562,7 @@ retry_lookup:
dn = d_alloc(parent, &dname);
dout("d_alloc %p '%.*s' = %p\n", parent,
dname.len, dname.name, dn);
- if (dn == NULL) {
+ if (!dn) {
dout("d_alloc badness\n");
err = -ENOMEM;
goto out;
@@ -1650,10 +1646,6 @@ out:
req->r_readdir_cache_idx = cache_ctl.index;
}
ceph_readdir_cache_release(&cache_ctl);
- if (snapdir) {
- iput(snapdir);
- dput(parent);
- }
dout("readdir_prepopulate done\n");
return err;
}
@@ -1841,9 +1833,20 @@ retry:
* possibly truncate them.. so write AND block!
*/
if (ci->i_wrbuffer_ref_head < ci->i_wrbuffer_ref) {
+ struct ceph_cap_snap *capsnap;
+ to = ci->i_truncate_size;
+ list_for_each_entry(capsnap, &ci->i_cap_snaps, ci_item) {
+ // MDS should have revoked Frw caps
+ WARN_ON_ONCE(capsnap->writing);
+ if (capsnap->dirty_pages && capsnap->size > to)
+ to = capsnap->size;
+ }
+ spin_unlock(&ci->i_ceph_lock);
dout("__do_pending_vmtruncate %p flushing snaps first\n",
inode);
- spin_unlock(&ci->i_ceph_lock);
+
+ truncate_pagecache(inode, to);
+
filemap_write_and_wait_range(&inode->i_data, 0,
inode->i_sb->s_maxbytes);
goto retry;
diff --git a/fs/ceph/mds_client.c b/fs/ceph/mds_client.c
index 666a9f274832..9dd6b836ac9e 100644
--- a/fs/ceph/mds_client.c
+++ b/fs/ceph/mds_client.c
@@ -408,7 +408,7 @@ struct ceph_mds_session *__ceph_lookup_mds_session(struct ceph_mds_client *mdsc,
{
struct ceph_mds_session *session;
- if (mds >= mdsc->max_sessions || mdsc->sessions[mds] == NULL)
+ if (mds >= mdsc->max_sessions || !mdsc->sessions[mds])
return NULL;
session = mdsc->sessions[mds];
dout("lookup_mds_session %p %d\n", session,
@@ -483,7 +483,7 @@ static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc,
dout("register_session realloc to %d\n", newmax);
sa = kcalloc(newmax, sizeof(void *), GFP_NOFS);
- if (sa == NULL)
+ if (!sa)
goto fail_realloc;
if (mdsc->sessions) {
memcpy(sa, mdsc->sessions,
@@ -731,9 +731,16 @@ static int __choose_mds(struct ceph_mds_client *mdsc,
inode = NULL;
if (req->r_inode) {
- inode = req->r_inode;
- ihold(inode);
- } else if (req->r_dentry) {
+ if (ceph_snap(req->r_inode) != CEPH_SNAPDIR) {
+ inode = req->r_inode;
+ ihold(inode);
+ } else {
+ /* req->r_dentry is non-null for LSSNAP request.
+ * fall-thru */
+ WARN_ON_ONCE(!req->r_dentry);
+ }
+ }
+ if (!inode && req->r_dentry) {
/* ignore race with rename; old or new d_parent is okay */
struct dentry *parent;
struct inode *dir;
@@ -886,7 +893,7 @@ static struct ceph_msg *create_session_open_msg(struct ceph_mds_client *mdsc, u6
/* Calculate serialized length of metadata */
metadata_bytes = 4; /* map length */
- for (i = 0; metadata[i][0] != NULL; ++i) {
+ for (i = 0; metadata[i][0]; ++i) {
metadata_bytes += 8 + strlen(metadata[i][0]) +
strlen(metadata[i][1]);
metadata_key_count++;
@@ -919,7 +926,7 @@ static struct ceph_msg *create_session_open_msg(struct ceph_mds_client *mdsc, u6
ceph_encode_32(&p, metadata_key_count);
/* Two length-prefixed strings for each entry in the map */
- for (i = 0; metadata[i][0] != NULL; ++i) {
+ for (i = 0; metadata[i][0]; ++i) {
size_t const key_len = strlen(metadata[i][0]);
size_t const val_len = strlen(metadata[i][1]);
@@ -1122,7 +1129,7 @@ static int iterate_session_caps(struct ceph_mds_session *session,
spin_lock(&session->s_cap_lock);
p = p->next;
- if (cap->ci == NULL) {
+ if (!cap->ci) {
dout("iterate_session_caps finishing cap %p removal\n",
cap);
BUG_ON(cap->session != session);
@@ -1748,7 +1755,7 @@ char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base,
int len, pos;
unsigned seq;
- if (dentry == NULL)
+ if (!dentry)
return ERR_PTR(-EINVAL);
retry:
@@ -1771,7 +1778,7 @@ retry:
len--; /* no leading '/' */
path = kmalloc(len+1, GFP_NOFS);
- if (path == NULL)
+ if (!path)
return ERR_PTR(-ENOMEM);
pos = len;
path[pos] = 0; /* trailing null */
@@ -2875,7 +2882,7 @@ static int encode_caps_cb(struct inode *inode, struct ceph_cap *cap,
}
if (list_empty(&ci->i_cap_snaps)) {
- snap_follows = 0;
+ snap_follows = ci->i_head_snapc ? ci->i_head_snapc->seq : 0;
} else {
struct ceph_cap_snap *capsnap =
list_first_entry(&ci->i_cap_snaps,
@@ -3133,7 +3140,7 @@ static void check_new_map(struct ceph_mds_client *mdsc,
newmap->m_epoch, oldmap->m_epoch);
for (i = 0; i < oldmap->m_num_mds && i < mdsc->max_sessions; i++) {
- if (mdsc->sessions[i] == NULL)
+ if (!mdsc->sessions[i])
continue;
s = mdsc->sessions[i];
oldstate = ceph_mdsmap_get_state(oldmap, i);
@@ -3280,7 +3287,7 @@ static void handle_lease(struct ceph_mds_client *mdsc,
mutex_lock(&session->s_mutex);
session->s_seq++;
- if (inode == NULL) {
+ if (!inode) {
dout("handle_lease no inode %llx\n", vino.ino);
goto release;
}
@@ -3438,7 +3445,7 @@ static void delayed_work(struct work_struct *work)
for (i = 0; i < mdsc->max_sessions; i++) {
struct ceph_mds_session *s = __ceph_lookup_mds_session(mdsc, i);
- if (s == NULL)
+ if (!s)
continue;
if (s->s_state == CEPH_MDS_SESSION_CLOSING) {
dout("resending session close request for mds%d\n",
@@ -3490,7 +3497,7 @@ int ceph_mdsc_init(struct ceph_fs_client *fsc)
fsc->mdsc = mdsc;
mutex_init(&mdsc->mutex);
mdsc->mdsmap = kzalloc(sizeof(*mdsc->mdsmap), GFP_NOFS);
- if (mdsc->mdsmap == NULL) {
+ if (!mdsc->mdsmap) {
kfree(mdsc);
return -ENOMEM;
}
diff --git a/fs/ceph/mdsmap.c b/fs/ceph/mdsmap.c
index 1a748cf88535..33ced4c22732 100644
--- a/fs/ceph/mdsmap.c
+++ b/fs/ceph/mdsmap.c
@@ -112,7 +112,7 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
u16 mdsmap_ev;
m = kzalloc(sizeof(*m), GFP_NOFS);
- if (m == NULL)
+ if (!m)
return ERR_PTR(-ENOMEM);
ceph_decode_need(p, end, 1 + 1, bad);
@@ -138,7 +138,7 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
m->m_num_mds = m->m_max_mds;
m->m_info = kcalloc(m->m_num_mds, sizeof(*m->m_info), GFP_NOFS);
- if (m->m_info == NULL)
+ if (!m->m_info)
goto nomem;
/* pick out active nodes from mds_info (state > 0) */
@@ -232,7 +232,7 @@ struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end)
if (num_export_targets) {
info->export_targets = kcalloc(num_export_targets,
sizeof(u32), GFP_NOFS);
- if (info->export_targets == NULL)
+ if (!info->export_targets)
goto nomem;
for (j = 0; j < num_export_targets; j++)
info->export_targets[j] =
diff --git a/fs/ceph/snap.c b/fs/ceph/snap.c
index dab5d6732345..1ffc8b426c1c 100644
--- a/fs/ceph/snap.c
+++ b/fs/ceph/snap.c
@@ -299,7 +299,8 @@ static int cmpu64_rev(const void *a, const void *b)
/*
* build the snap context for a given realm.
*/
-static int build_snap_context(struct ceph_snap_realm *realm)
+static int build_snap_context(struct ceph_snap_realm *realm,
+ struct list_head* dirty_realms)
{
struct ceph_snap_realm *parent = realm->parent;
struct ceph_snap_context *snapc;
@@ -313,7 +314,7 @@ static int build_snap_context(struct ceph_snap_realm *realm)
*/
if (parent) {
if (!parent->cached_context) {
- err = build_snap_context(parent);
+ err = build_snap_context(parent, dirty_realms);
if (err)
goto fail;
}
@@ -332,7 +333,7 @@ static int build_snap_context(struct ceph_snap_realm *realm)
" (unchanged)\n",
realm->ino, realm, realm->cached_context,
realm->cached_context->seq,
- (unsigned int) realm->cached_context->num_snaps);
+ (unsigned int)realm->cached_context->num_snaps);
return 0;
}
@@ -373,7 +374,11 @@ static int build_snap_context(struct ceph_snap_realm *realm)
realm->ino, realm, snapc, snapc->seq,
(unsigned int) snapc->num_snaps);
- ceph_put_snap_context(realm->cached_context);
+ if (realm->cached_context) {
+ ceph_put_snap_context(realm->cached_context);
+ /* queue realm for cap_snap creation */
+ list_add_tail(&realm->dirty_item, dirty_realms);
+ }
realm->cached_context = snapc;
return 0;
@@ -394,15 +399,16 @@ fail:
/*
* rebuild snap context for the given realm and all of its children.
*/
-static void rebuild_snap_realms(struct ceph_snap_realm *realm)
+static void rebuild_snap_realms(struct ceph_snap_realm *realm,
+ struct list_head *dirty_realms)
{
struct ceph_snap_realm *child;
dout("rebuild_snap_realms %llx %p\n", realm->ino, realm);
- build_snap_context(realm);
+ build_snap_context(realm, dirty_realms);
list_for_each_entry(child, &realm->children, child_item)
- rebuild_snap_realms(child);
+ rebuild_snap_realms(child, dirty_realms);
}
@@ -624,13 +630,11 @@ static void queue_realm_cap_snaps(struct ceph_snap_realm *realm)
{
struct ceph_inode_info *ci;
struct inode *lastinode = NULL;
- struct ceph_snap_realm *child;
dout("queue_realm_cap_snaps %p %llx inodes\n", realm, realm->ino);
spin_lock(&realm->inodes_with_caps_lock);
- list_for_each_entry(ci, &realm->inodes_with_caps,
- i_snap_realm_item) {
+ list_for_each_entry(ci, &realm->inodes_with_caps, i_snap_realm_item) {
struct inode *inode = igrab(&ci->vfs_inode);
if (!inode)
continue;
@@ -643,14 +647,6 @@ static void queue_realm_cap_snaps(struct ceph_snap_realm *realm)
spin_unlock(&realm->inodes_with_caps_lock);
iput(lastinode);
- list_for_each_entry(child, &realm->children, child_item) {
- dout("queue_realm_cap_snaps %p %llx queue child %p %llx\n",
- realm, realm->ino, child, child->ino);
- list_del_init(&child->dirty_item);
- list_add(&child->dirty_item, &realm->dirty_item);
- }
-
- list_del_init(&realm->dirty_item);
dout("queue_realm_cap_snaps %p %llx done\n", realm, realm->ino);
}
@@ -721,8 +717,6 @@ more:
if (err < 0)
goto fail;
- /* queue realm for cap_snap creation */
- list_add(&realm->dirty_item, &dirty_realms);
if (realm->seq > mdsc->last_snap_seq)
mdsc->last_snap_seq = realm->seq;
@@ -741,7 +735,7 @@ more:
/* invalidate when we reach the _end_ (root) of the trace */
if (invalidate && p >= e)
- rebuild_snap_realms(realm);
+ rebuild_snap_realms(realm, &dirty_realms);
if (!first_realm)
first_realm = realm;
@@ -758,6 +752,7 @@ more:
while (!list_empty(&dirty_realms)) {
realm = list_first_entry(&dirty_realms, struct ceph_snap_realm,
dirty_item);
+ list_del_init(&realm->dirty_item);
queue_realm_cap_snaps(realm);
}
diff --git a/fs/ceph/super.c b/fs/ceph/super.c
index aa06a8c24792..e4082afedcb1 100644
--- a/fs/ceph/super.c
+++ b/fs/ceph/super.c
@@ -49,9 +49,16 @@ static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf)
struct ceph_statfs st;
u64 fsid;
int err;
+ u64 data_pool;
+
+ if (fsc->mdsc->mdsmap->m_num_data_pg_pools == 1) {
+ data_pool = fsc->mdsc->mdsmap->m_data_pg_pools[0];
+ } else {
+ data_pool = CEPH_NOPOOL;
+ }
dout("statfs\n");
- err = ceph_monc_do_statfs(&fsc->client->monc, &st);
+ err = ceph_monc_do_statfs(&fsc->client->monc, data_pool, &st);
if (err < 0)
return err;
@@ -113,7 +120,6 @@ enum {
Opt_rasize,
Opt_caps_wanted_delay_min,
Opt_caps_wanted_delay_max,
- Opt_cap_release_safety,
Opt_readdir_max_entries,
Opt_readdir_max_bytes,
Opt_congestion_kb,
@@ -152,7 +158,6 @@ static match_table_t fsopt_tokens = {
{Opt_rasize, "rasize=%d"},
{Opt_caps_wanted_delay_min, "caps_wanted_delay_min=%d"},
{Opt_caps_wanted_delay_max, "caps_wanted_delay_max=%d"},
- {Opt_cap_release_safety, "cap_release_safety=%d"},
{Opt_readdir_max_entries, "readdir_max_entries=%d"},
{Opt_readdir_max_bytes, "readdir_max_bytes=%d"},
{Opt_congestion_kb, "write_congestion_kb=%d"},
@@ -235,27 +240,43 @@ static int parse_fsopt_token(char *c, void *private)
break;
/* misc */
case Opt_wsize:
- fsopt->wsize = intval;
+ if (intval < PAGE_SIZE || intval > CEPH_MAX_WRITE_SIZE)
+ return -EINVAL;
+ fsopt->wsize = ALIGN(intval, PAGE_SIZE);
break;
case Opt_rsize:
- fsopt->rsize = intval;
+ if (intval < PAGE_SIZE || intval > CEPH_MAX_READ_SIZE)
+ return -EINVAL;
+ fsopt->rsize = ALIGN(intval, PAGE_SIZE);
break;
case Opt_rasize:
- fsopt->rasize = intval;
+ if (intval < 0)
+ return -EINVAL;
+ fsopt->rasize = ALIGN(intval + PAGE_SIZE - 1, PAGE_SIZE);
break;
case Opt_caps_wanted_delay_min:
+ if (intval < 1)
+ return -EINVAL;
fsopt->caps_wanted_delay_min = intval;
break;
case Opt_caps_wanted_delay_max:
+ if (intval < 1)
+ return -EINVAL;
fsopt->caps_wanted_delay_max = intval;
break;
case Opt_readdir_max_entries:
+ if (intval < 1)
+ return -EINVAL;
fsopt->max_readdir = intval;
break;
case Opt_readdir_max_bytes:
+ if (intval < PAGE_SIZE && intval != 0)
+ return -EINVAL;
fsopt->max_readdir_bytes = intval;
break;
case Opt_congestion_kb:
+ if (intval < 1024) /* at least 1M */
+ return -EINVAL;
fsopt->congestion_kb = intval;
break;
case Opt_dirstat:
@@ -392,7 +413,8 @@ static int parse_mount_options(struct ceph_mount_options **pfsopt,
fsopt->sb_flags = flags;
fsopt->flags = CEPH_MOUNT_OPT_DEFAULT;
- fsopt->rsize = CEPH_RSIZE_DEFAULT;
+ fsopt->wsize = CEPH_MAX_WRITE_SIZE;
+ fsopt->rsize = CEPH_MAX_READ_SIZE;
fsopt->rasize = CEPH_RASIZE_DEFAULT;
fsopt->snapdir_name = kstrdup(CEPH_SNAPDIRNAME_DEFAULT, GFP_KERNEL);
if (!fsopt->snapdir_name) {
@@ -402,7 +424,6 @@ static int parse_mount_options(struct ceph_mount_options **pfsopt,
fsopt->caps_wanted_delay_min = CEPH_CAPS_WANTED_DELAY_MIN_DEFAULT;
fsopt->caps_wanted_delay_max = CEPH_CAPS_WANTED_DELAY_MAX_DEFAULT;
- fsopt->cap_release_safety = CEPH_CAP_RELEASE_SAFETY_DEFAULT;
fsopt->max_readdir = CEPH_MAX_READDIR_DEFAULT;
fsopt->max_readdir_bytes = CEPH_MAX_READDIR_BYTES_DEFAULT;
fsopt->congestion_kb = default_congestion_kb();
@@ -508,7 +529,7 @@ static int ceph_show_options(struct seq_file *m, struct dentry *root)
seq_printf(m, ",mds_namespace=%s", fsopt->mds_namespace);
if (fsopt->wsize)
seq_printf(m, ",wsize=%d", fsopt->wsize);
- if (fsopt->rsize != CEPH_RSIZE_DEFAULT)
+ if (fsopt->rsize != CEPH_MAX_READ_SIZE)
seq_printf(m, ",rsize=%d", fsopt->rsize);
if (fsopt->rasize != CEPH_RASIZE_DEFAULT)
seq_printf(m, ",rasize=%d", fsopt->rasize);
@@ -520,9 +541,6 @@ static int ceph_show_options(struct seq_file *m, struct dentry *root)
if (fsopt->caps_wanted_delay_max != CEPH_CAPS_WANTED_DELAY_MAX_DEFAULT)
seq_printf(m, ",caps_wanted_delay_max=%d",
fsopt->caps_wanted_delay_max);
- if (fsopt->cap_release_safety != CEPH_CAP_RELEASE_SAFETY_DEFAULT)
- seq_printf(m, ",cap_release_safety=%d",
- fsopt->cap_release_safety);
if (fsopt->max_readdir != CEPH_MAX_READDIR_DEFAULT)
seq_printf(m, ",readdir_max_entries=%d", fsopt->max_readdir);
if (fsopt->max_readdir_bytes != CEPH_MAX_READDIR_BYTES_DEFAULT)
@@ -576,7 +594,7 @@ static struct ceph_fs_client *create_fs_client(struct ceph_mount_options *fsopt,
}
fsc->client->extra_mon_dispatch = extra_mon_dispatch;
- if (fsopt->mds_namespace == NULL) {
+ if (!fsopt->mds_namespace) {
ceph_monc_want_map(&fsc->client->monc, CEPH_SUB_MDSMAP,
0, true);
} else {
@@ -597,13 +615,13 @@ static struct ceph_fs_client *create_fs_client(struct ceph_mount_options *fsopt,
* to be processed in parallel, limit concurrency.
*/
fsc->wb_wq = alloc_workqueue("ceph-writeback", 0, 1);
- if (fsc->wb_wq == NULL)
+ if (!fsc->wb_wq)
goto fail_client;
fsc->pg_inv_wq = alloc_workqueue("ceph-pg-invalid", 0, 1);
- if (fsc->pg_inv_wq == NULL)
+ if (!fsc->pg_inv_wq)
goto fail_wb_wq;
fsc->trunc_wq = alloc_workqueue("ceph-trunc", 0, 1);
- if (fsc->trunc_wq == NULL)
+ if (!fsc->trunc_wq)
goto fail_pg_inv_wq;
/* set up mempools */
@@ -674,26 +692,26 @@ static int __init init_caches(void)
__alignof__(struct ceph_inode_info),
SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD|
SLAB_ACCOUNT, ceph_inode_init_once);
- if (ceph_inode_cachep == NULL)
+ if (!ceph_inode_cachep)
return -ENOMEM;
ceph_cap_cachep = KMEM_CACHE(ceph_cap,
SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD);
- if (ceph_cap_cachep == NULL)
+ if (!ceph_cap_cachep)
goto bad_cap;
ceph_cap_flush_cachep = KMEM_CACHE(ceph_cap_flush,
SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD);
- if (ceph_cap_flush_cachep == NULL)
+ if (!ceph_cap_flush_cachep)
goto bad_cap_flush;
ceph_dentry_cachep = KMEM_CACHE(ceph_dentry_info,
SLAB_RECLAIM_ACCOUNT|SLAB_MEM_SPREAD);
- if (ceph_dentry_cachep == NULL)
+ if (!ceph_dentry_cachep)
goto bad_dentry;
ceph_file_cachep = KMEM_CACHE(ceph_file_info, SLAB_MEM_SPREAD);
- if (ceph_file_cachep == NULL)
+ if (!ceph_file_cachep)
goto bad_file;
if ((error = ceph_fscache_register()))
@@ -947,20 +965,10 @@ static int ceph_setup_bdi(struct super_block *sb, struct ceph_fs_client *fsc)
return err;
/* set ra_pages based on rasize mount option? */
- if (fsc->mount_options->rasize >= PAGE_SIZE)
- sb->s_bdi->ra_pages =
- (fsc->mount_options->rasize + PAGE_SIZE - 1)
- >> PAGE_SHIFT;
- else
- sb->s_bdi->ra_pages = VM_MAX_READAHEAD * 1024 / PAGE_SIZE;
-
- if (fsc->mount_options->rsize > fsc->mount_options->rasize &&
- fsc->mount_options->rsize >= PAGE_SIZE)
- sb->s_bdi->io_pages =
- (fsc->mount_options->rsize + PAGE_SIZE - 1)
- >> PAGE_SHIFT;
- else if (fsc->mount_options->rsize == 0)
- sb->s_bdi->io_pages = ULONG_MAX;
+ sb->s_bdi->ra_pages = fsc->mount_options->rasize >> PAGE_SHIFT;
+
+ /* set io_pages based on max osd read size */
+ sb->s_bdi->io_pages = fsc->mount_options->rsize >> PAGE_SHIFT;
return 0;
}
diff --git a/fs/ceph/super.h b/fs/ceph/super.h
index f02a2225fe42..279a2f401cf5 100644
--- a/fs/ceph/super.h
+++ b/fs/ceph/super.h
@@ -46,12 +46,25 @@
#define ceph_test_mount_opt(fsc, opt) \
(!!((fsc)->mount_options->flags & CEPH_MOUNT_OPT_##opt))
-#define CEPH_RSIZE_DEFAULT (64*1024*1024) /* max read size */
+/* max size of osd read request, limited by libceph */
+#define CEPH_MAX_READ_SIZE CEPH_MSG_MAX_DATA_LEN
+/* osd has a configurable limitaion of max write size.
+ * CEPH_MSG_MAX_DATA_LEN should be small enough. */
+#define CEPH_MAX_WRITE_SIZE CEPH_MSG_MAX_DATA_LEN
#define CEPH_RASIZE_DEFAULT (8192*1024) /* max readahead */
#define CEPH_MAX_READDIR_DEFAULT 1024
#define CEPH_MAX_READDIR_BYTES_DEFAULT (512*1024)
#define CEPH_SNAPDIRNAME_DEFAULT ".snap"
+/*
+ * Delay telling the MDS we no longer want caps, in case we reopen
+ * the file. Delay a minimum amount of time, even if we send a cap
+ * message for some other reason. Otherwise, take the oppotunity to
+ * update the mds to avoid sending another message later.
+ */
+#define CEPH_CAPS_WANTED_DELAY_MIN_DEFAULT 5 /* cap release delay */
+#define CEPH_CAPS_WANTED_DELAY_MAX_DEFAULT 60 /* cap release delay */
+
struct ceph_mount_options {
int flags;
int sb_flags;
@@ -61,7 +74,6 @@ struct ceph_mount_options {
int rasize; /* max readahead */
int congestion_kb; /* max writeback in flight */
int caps_wanted_delay_min, caps_wanted_delay_max;
- int cap_release_safety;
int max_readdir; /* max readdir result (entires) */
int max_readdir_bytes; /* max readdir result (bytes) */
diff --git a/fs/ceph/xattr.c b/fs/ceph/xattr.c
index 11263f102e4c..3542b2c364cf 100644
--- a/fs/ceph/xattr.c
+++ b/fs/ceph/xattr.c
@@ -777,7 +777,7 @@ ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value,
spin_unlock(&ci->i_ceph_lock);
/* security module gets xattr while filling trace */
- if (current->journal_info != NULL) {
+ if (current->journal_info) {
pr_warn_ratelimited("sync getxattr %p "
"during filling trace\n", inode);
return -EBUSY;
@@ -809,7 +809,7 @@ ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value,
memcpy(value, xattr->val, xattr->val_len);
- if (current->journal_info != NULL &&
+ if (current->journal_info &&
!strncmp(name, XATTR_SECURITY_PREFIX, XATTR_SECURITY_PREFIX_LEN))
ci->i_ceph_flags |= CEPH_I_SEC_INITED;
out:
@@ -1058,7 +1058,7 @@ do_sync_unlocked:
up_read(&mdsc->snap_rwsem);
/* security module set xattr while filling trace */
- if (current->journal_info != NULL) {
+ if (current->journal_info) {
pr_warn_ratelimited("sync setxattr %p "
"during filling trace\n", inode);
err = -EBUSY;
@@ -1108,7 +1108,7 @@ bool ceph_security_xattr_deadlock(struct inode *in)
{
struct ceph_inode_info *ci;
bool ret;
- if (in->i_security == NULL)
+ if (!in->i_security)
return false;
ci = ceph_inode(in);
spin_lock(&ci->i_ceph_lock);
diff --git a/fs/coda/dir.c b/fs/coda/dir.c
index c0474ac6cbf2..274ab5586dd0 100644
--- a/fs/coda/dir.c
+++ b/fs/coda/dir.c
@@ -368,9 +368,10 @@ static int coda_venus_readdir(struct file *coda_file, struct dir_context *ctx)
goto out;
while (1) {
+ loff_t pos = ctx->pos - 2;
+
/* read entries from the directory file */
- ret = kernel_read(host_file, ctx->pos - 2, (char *)vdir,
- sizeof(*vdir));
+ ret = kernel_read(host_file, vdir, sizeof(*vdir), &pos);
if (ret < 0) {
pr_err("%s: read dir %s failed %d\n",
__func__, coda_f2s(&cii->c_fid), ret);
diff --git a/fs/coredump.c b/fs/coredump.c
index 592683711c64..0eec03696707 100644
--- a/fs/coredump.c
+++ b/fs/coredump.c
@@ -161,7 +161,7 @@ static int cn_print_exe_file(struct core_name *cn)
if (!exe_file)
return cn_esc_printf(cn, "%s (path unknown)", current->comm);
- pathbuf = kmalloc(PATH_MAX, GFP_TEMPORARY);
+ pathbuf = kmalloc(PATH_MAX, GFP_KERNEL);
if (!pathbuf) {
ret = -ENOMEM;
goto put_exe_file;
diff --git a/fs/dax.c b/fs/dax.c
index 6afcacb3a87b..f001d8c72a06 100644
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -734,7 +734,7 @@ static int dax_writeback_one(struct block_device *bdev,
}
dax_mapping_entry_mkclean(mapping, index, pfn_t_to_pfn(pfn));
- dax_flush(dax_dev, pgoff, kaddr, size);
+ dax_flush(dax_dev, kaddr, size);
/*
* After we have flushed the cache, we can clear the dirty tag. There
* cannot be new dirty data in the pfn after the flush has completed as
@@ -929,7 +929,7 @@ int __dax_zero_page_range(struct block_device *bdev,
return rc;
}
memset(kaddr + offset, 0, size);
- dax_flush(dax_dev, pgoff, kaddr + offset, size);
+ dax_flush(dax_dev, kaddr + offset, size);
dax_read_unlock(id);
}
return 0;
diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c
index 9014479d0160..6b801186baa5 100644
--- a/fs/ecryptfs/main.c
+++ b/fs/ecryptfs/main.c
@@ -568,8 +568,7 @@ static struct dentry *ecryptfs_mount(struct file_system_type *fs_type, int flags
* 1) The lower mount is ro
* 2) The ecryptfs_encrypted_view mount option is specified
*/
- if (path.dentry->d_sb->s_flags & MS_RDONLY ||
- mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED)
+ if (sb_rdonly(path.dentry->d_sb) || mount_crypt_stat->flags & ECRYPTFS_ENCRYPTED_VIEW_ENABLED)
s->s_flags |= MS_RDONLY;
s->s_maxbytes = path.dentry->d_sb->s_maxbytes;
diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c
index 039e627194a9..c596e7c03424 100644
--- a/fs/ecryptfs/read_write.c
+++ b/fs/ecryptfs/read_write.c
@@ -47,7 +47,7 @@ int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data,
lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
if (!lower_file)
return -EIO;
- rc = kernel_write(lower_file, data, size, offset);
+ rc = kernel_write(lower_file, data, size, &offset);
mark_inode_dirty_sync(ecryptfs_inode);
return rc;
}
@@ -237,7 +237,7 @@ int ecryptfs_read_lower(char *data, loff_t offset, size_t size,
lower_file = ecryptfs_inode_to_private(ecryptfs_inode)->lower_file;
if (!lower_file)
return -EIO;
- return kernel_read(lower_file, offset, data, size);
+ return kernel_read(lower_file, data, size, &offset);
}
/**
diff --git a/fs/efs/super.c b/fs/efs/super.c
index 368f7dd21c61..5c42f1e34a2f 100644
--- a/fs/efs/super.c
+++ b/fs/efs/super.c
@@ -306,7 +306,7 @@ static int efs_fill_super(struct super_block *s, void *d, int silent)
}
brelse(bh);
- if (!(s->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(s)) {
#ifdef DEBUG
pr_info("forcing read-only mode\n");
#endif
diff --git a/fs/exec.c b/fs/exec.c
index 01a9fb9d8ac3..ac34d9724684 100644
--- a/fs/exec.c
+++ b/fs/exec.c
@@ -885,23 +885,6 @@ struct file *open_exec(const char *name)
}
EXPORT_SYMBOL(open_exec);
-int kernel_read(struct file *file, loff_t offset,
- char *addr, unsigned long count)
-{
- mm_segment_t old_fs;
- loff_t pos = offset;
- int result;
-
- old_fs = get_fs();
- set_fs(get_ds());
- /* The cast to a user pointer is valid due to the set_fs() */
- result = vfs_read(file, (void __user *)addr, count, &pos);
- set_fs(old_fs);
- return result;
-}
-
-EXPORT_SYMBOL(kernel_read);
-
int kernel_read_file(struct file *file, void **buf, loff_t *size,
loff_t max_size, enum kernel_read_file_id id)
{
@@ -939,8 +922,7 @@ int kernel_read_file(struct file *file, void **buf, loff_t *size,
pos = 0;
while (pos < i_size) {
- bytes = kernel_read(file, pos, (char *)(*buf) + pos,
- i_size - pos);
+ bytes = kernel_read(file, *buf + pos, i_size - pos, &pos);
if (bytes < 0) {
ret = bytes;
goto out;
@@ -948,7 +930,6 @@ int kernel_read_file(struct file *file, void **buf, loff_t *size,
if (bytes == 0)
break;
- pos += bytes;
}
if (pos != i_size) {
@@ -974,7 +955,7 @@ out:
}
EXPORT_SYMBOL_GPL(kernel_read_file);
-int kernel_read_file_from_path(char *path, void **buf, loff_t *size,
+int kernel_read_file_from_path(const char *path, void **buf, loff_t *size,
loff_t max_size, enum kernel_read_file_id id)
{
struct file *file;
@@ -1567,6 +1548,7 @@ static void bprm_fill_uid(struct linux_binprm *bprm)
int prepare_binprm(struct linux_binprm *bprm)
{
int retval;
+ loff_t pos = 0;
bprm_fill_uid(bprm);
@@ -1577,7 +1559,7 @@ int prepare_binprm(struct linux_binprm *bprm)
bprm->called_set_creds = 1;
memset(bprm->buf, 0, BINPRM_BUF_SIZE);
- return kernel_read(bprm->file, 0, bprm->buf, BINPRM_BUF_SIZE);
+ return kernel_read(bprm->file, bprm->buf, BINPRM_BUF_SIZE, &pos);
}
EXPORT_SYMBOL(prepare_binprm);
@@ -1763,9 +1745,9 @@ static int do_execveat_common(int fd, struct filename *filename,
bprm->filename = filename->name;
} else {
if (filename->name[0] == '\0')
- pathbuf = kasprintf(GFP_TEMPORARY, "/dev/fd/%d", fd);
+ pathbuf = kasprintf(GFP_KERNEL, "/dev/fd/%d", fd);
else
- pathbuf = kasprintf(GFP_TEMPORARY, "/dev/fd/%d/%s",
+ pathbuf = kasprintf(GFP_KERNEL, "/dev/fd/%d/%s",
fd, filename->name);
if (!pathbuf) {
retval = -ENOMEM;
diff --git a/fs/ext2/super.c b/fs/ext2/super.c
index fc18edd81815..1458706bd2ec 100644
--- a/fs/ext2/super.c
+++ b/fs/ext2/super.c
@@ -52,7 +52,7 @@ void ext2_error(struct super_block *sb, const char *function,
struct ext2_sb_info *sbi = EXT2_SB(sb);
struct ext2_super_block *es = sbi->s_es;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
spin_lock(&sbi->s_lock);
sbi->s_mount_state |= EXT2_ERROR_FS;
es->s_state |= cpu_to_le16(EXT2_ERROR_FS);
@@ -151,7 +151,7 @@ static void ext2_put_super (struct super_block * sb)
ext2_xattr_destroy_cache(sbi->s_ea_block_cache);
sbi->s_ea_block_cache = NULL;
}
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
struct ext2_super_block *es = sbi->s_es;
spin_lock(&sbi->s_lock);
@@ -943,8 +943,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
le32_to_cpu(features));
goto failed_mount;
}
- if (!(sb->s_flags & MS_RDONLY) &&
- (features = EXT2_HAS_RO_COMPAT_FEATURE(sb, ~EXT2_FEATURE_RO_COMPAT_SUPP))){
+ if (!sb_rdonly(sb) && (features = EXT2_HAS_RO_COMPAT_FEATURE(sb, ~EXT2_FEATURE_RO_COMPAT_SUPP))){
ext2_msg(sb, KERN_ERR, "error: couldn't mount RDWR because of "
"unsupported optional features (%x)",
le32_to_cpu(features));
@@ -1173,7 +1172,7 @@ static int ext2_fill_super(struct super_block *sb, void *data, int silent)
if (EXT2_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_HAS_JOURNAL))
ext2_msg(sb, KERN_WARNING,
"warning: mounting ext3 filesystem as ext2");
- if (ext2_setup_super (sb, es, sb->s_flags & MS_RDONLY))
+ if (ext2_setup_super (sb, es, sb_rdonly(sb)))
sb->s_flags |= MS_RDONLY;
ext2_write_super(sb);
return 0;
@@ -1305,7 +1304,7 @@ static int ext2_unfreeze(struct super_block *sb)
static void ext2_write_super(struct super_block *sb)
{
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
ext2_sync_fs(sb, 1);
}
@@ -1343,7 +1342,7 @@ static int ext2_remount (struct super_block * sb, int * flags, char * data)
"dax flag with busy inodes while remounting");
sbi->s_mount_opt ^= EXT2_MOUNT_DAX;
}
- if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) {
+ if ((bool)(*flags & MS_RDONLY) == sb_rdonly(sb)) {
spin_unlock(&sbi->s_lock);
return 0;
}
diff --git a/fs/ext4/ext4_jbd2.c b/fs/ext4/ext4_jbd2.c
index dd106b1d5d89..5b342ac67d2e 100644
--- a/fs/ext4/ext4_jbd2.c
+++ b/fs/ext4/ext4_jbd2.c
@@ -47,7 +47,7 @@ static int ext4_journal_check_start(struct super_block *sb)
if (unlikely(ext4_forced_shutdown(EXT4_SB(sb))))
return -EIO;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return -EROFS;
WARN_ON(sb->s_writers.frozen == SB_FREEZE_COMPLETE);
journal = EXT4_SB(sb)->s_journal;
diff --git a/fs/ext4/file.c b/fs/ext4/file.c
index 57dcaea762c3..b1da660ac3bc 100644
--- a/fs/ext4/file.c
+++ b/fs/ext4/file.c
@@ -223,6 +223,8 @@ ext4_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
if (IS_DAX(inode))
return ext4_dax_write_iter(iocb, from);
#endif
+ if (!o_direct && (iocb->ki_flags & IOCB_NOWAIT))
+ return -EOPNOTSUPP;
if (!inode_trylock(inode)) {
if (iocb->ki_flags & IOCB_NOWAIT)
@@ -371,7 +373,7 @@ static int ext4_file_open(struct inode * inode, struct file * filp)
return -EIO;
if (unlikely(!(sbi->s_mount_flags & EXT4_MF_MNTDIR_SAMPLED) &&
- !(sb->s_flags & MS_RDONLY))) {
+ !sb_rdonly(sb))) {
sbi->s_mount_flags |= EXT4_MF_MNTDIR_SAMPLED;
/*
* Sample where the filesystem has been mounted and
@@ -431,9 +433,7 @@ static int ext4_file_open(struct inode * inode, struct file * filp)
return ret;
}
- /* Set the flags to support nowait AIO */
- filp->f_mode |= FMODE_AIO_NOWAIT;
-
+ filp->f_mode |= FMODE_NOWAIT;
return dquot_file_open(inode, filp);
}
diff --git a/fs/ext4/fsync.c b/fs/ext4/fsync.c
index aae2c3971cef..f9230580a84b 100644
--- a/fs/ext4/fsync.c
+++ b/fs/ext4/fsync.c
@@ -107,7 +107,7 @@ int ext4_sync_file(struct file *file, loff_t start, loff_t end, int datasync)
trace_ext4_sync_file_enter(file, datasync);
- if (inode->i_sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(inode->i_sb)) {
/* Make sure that we read updated s_mount_flags value */
smp_rmb();
if (EXT4_SB(inode->i_sb)->s_mount_flags & EXT4_MF_FS_ABORTED)
diff --git a/fs/ext4/ialloc.c b/fs/ext4/ialloc.c
index 71e93a23cec3..ee823022aa34 100644
--- a/fs/ext4/ialloc.c
+++ b/fs/ext4/ialloc.c
@@ -1382,7 +1382,7 @@ int ext4_init_inode_table(struct super_block *sb, ext4_group_t group,
int num, ret = 0, used_blks = 0;
/* This should not happen, but just to be sure check this */
- if (sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(sb)) {
ret = 1;
goto out;
}
diff --git a/fs/ext4/mmp.c b/fs/ext4/mmp.c
index 77cdce1f17ce..84c54f15f1dd 100644
--- a/fs/ext4/mmp.c
+++ b/fs/ext4/mmp.c
@@ -185,7 +185,7 @@ static int kmmpd(void *data)
goto exit_thread;
}
- if (sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(sb)) {
ext4_warning(sb, "kmmpd being stopped since filesystem "
"has been remounted as readonly.");
goto exit_thread;
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index 71b9a667e1bc..b104096fce9e 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -405,7 +405,7 @@ static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn)
static void ext4_handle_error(struct super_block *sb)
{
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
if (!test_opt(sb, ERRORS_CONT)) {
@@ -587,8 +587,7 @@ void __ext4_std_error(struct super_block *sb, const char *function,
/* Special case: if the error is EROFS, and we're not already
* inside a transaction, then there's really no point in logging
* an error. */
- if (errno == -EROFS && journal_current_handle() == NULL &&
- (sb->s_flags & MS_RDONLY))
+ if (errno == -EROFS && journal_current_handle() == NULL && sb_rdonly(sb))
return;
if (ext4_error_ratelimit(sb)) {
@@ -628,7 +627,7 @@ void __ext4_abort(struct super_block *sb, const char *function,
sb->s_id, function, line, &vaf);
va_end(args);
- if ((sb->s_flags & MS_RDONLY) == 0) {
+ if (sb_rdonly(sb) == 0) {
ext4_msg(sb, KERN_CRIT, "Remounting filesystem read-only");
EXT4_SB(sb)->s_mount_flags |= EXT4_MF_FS_ABORTED;
/*
@@ -889,11 +888,11 @@ static void ext4_put_super(struct super_block *sb)
ext4_mb_release(sb);
ext4_ext_release(sb);
- if (!(sb->s_flags & MS_RDONLY) && !aborted) {
+ if (!sb_rdonly(sb) && !aborted) {
ext4_clear_feature_journal_needs_recovery(sb);
es->s_state = cpu_to_le16(sbi->s_mount_state);
}
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
ext4_commit_super(sb, 1);
for (i = 0; i < sbi->s_gdb_count; i++)
@@ -2100,7 +2099,7 @@ int ext4_seq_options_show(struct seq_file *seq, void *offset)
struct super_block *sb = seq->private;
int rc;
- seq_puts(seq, (sb->s_flags & MS_RDONLY) ? "ro" : "rw");
+ seq_puts(seq, sb_rdonly(sb) ? "ro" : "rw");
rc = _ext4_show_options(seq, sb, 1);
seq_puts(seq, "\n");
return rc;
@@ -2368,7 +2367,7 @@ static int ext4_check_descriptors(struct super_block *sb,
"Checksum for group %u failed (%u!=%u)",
i, le16_to_cpu(ext4_group_desc_csum(sb, i,
gdp)), le16_to_cpu(gdp->bg_checksum));
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
ext4_unlock_group(sb, i);
return 0;
}
@@ -3136,8 +3135,7 @@ int ext4_register_li_request(struct super_block *sb,
goto out;
}
- if (first_not_zeroed == ngroups ||
- (sb->s_flags & MS_RDONLY) ||
+ if (first_not_zeroed == ngroups || sb_rdonly(sb) ||
!test_opt(sb, INIT_INODE_TABLE))
goto out;
@@ -3683,7 +3681,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
* previously didn't change the revision level when setting the flags,
* so there is a chance incompat flags are set on a rev 0 filesystem.
*/
- if (!ext4_feature_set_ok(sb, (sb->s_flags & MS_RDONLY)))
+ if (!ext4_feature_set_ok(sb, (sb_rdonly(sb))))
goto failed_mount;
blocksize = BLOCK_SIZE << le32_to_cpu(es->s_log_block_size);
@@ -3812,12 +3810,12 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
sbi->s_hash_unsigned = 3;
else if ((i & EXT2_FLAGS_SIGNED_HASH) == 0) {
#ifdef __CHAR_UNSIGNED__
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
es->s_flags |=
cpu_to_le32(EXT2_FLAGS_UNSIGNED_HASH);
sbi->s_hash_unsigned = 3;
#else
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
es->s_flags |=
cpu_to_le32(EXT2_FLAGS_SIGNED_HASH);
#endif
@@ -4017,7 +4015,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
needs_recovery = (es->s_last_orphan != 0 ||
ext4_has_feature_journal_needs_recovery(sb));
- if (ext4_has_feature_mmp(sb) && !(sb->s_flags & MS_RDONLY))
+ if (ext4_has_feature_mmp(sb) && !sb_rdonly(sb))
if (ext4_multi_mount_protect(sb, le64_to_cpu(es->s_mmp_block)))
goto failed_mount3a;
@@ -4029,7 +4027,7 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
err = ext4_load_journal(sb, es, journal_devnum);
if (err)
goto failed_mount3a;
- } else if (test_opt(sb, NOLOAD) && !(sb->s_flags & MS_RDONLY) &&
+ } else if (test_opt(sb, NOLOAD) && !sb_rdonly(sb) &&
ext4_has_feature_journal_needs_recovery(sb)) {
ext4_msg(sb, KERN_ERR, "required journal recovery "
"suppressed and not mounted read-only");
@@ -4143,7 +4141,7 @@ no_journal:
goto failed_mount_wq;
}
- if (DUMMY_ENCRYPTION_ENABLED(sbi) && !(sb->s_flags & MS_RDONLY) &&
+ if (DUMMY_ENCRYPTION_ENABLED(sbi) && !sb_rdonly(sb) &&
!ext4_has_feature_encrypt(sb)) {
ext4_set_feature_encrypt(sb);
ext4_commit_super(sb, 1);
@@ -4197,7 +4195,7 @@ no_journal:
goto failed_mount4;
}
- if (ext4_setup_super(sb, es, sb->s_flags & MS_RDONLY))
+ if (ext4_setup_super(sb, es, sb_rdonly(sb)))
sb->s_flags |= MS_RDONLY;
/* determine the minimum size of new large inodes, if present */
@@ -4285,7 +4283,7 @@ no_journal:
#ifdef CONFIG_QUOTA
/* Enable quota usage during mount. */
- if (ext4_has_feature_quota(sb) && !(sb->s_flags & MS_RDONLY)) {
+ if (ext4_has_feature_quota(sb) && !sb_rdonly(sb)) {
err = ext4_enable_quotas(sb);
if (err)
goto failed_mount8;
@@ -4609,7 +4607,7 @@ static int ext4_load_journal(struct super_block *sb,
* can get read-write access to the device.
*/
if (ext4_has_feature_journal_needs_recovery(sb)) {
- if (sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(sb)) {
ext4_msg(sb, KERN_INFO, "INFO: recovery "
"required on readonly filesystem");
if (really_read_only) {
@@ -4764,8 +4762,7 @@ static void ext4_mark_recovery_complete(struct super_block *sb,
if (jbd2_journal_flush(journal) < 0)
goto out;
- if (ext4_has_feature_journal_needs_recovery(sb) &&
- sb->s_flags & MS_RDONLY) {
+ if (ext4_has_feature_journal_needs_recovery(sb) && sb_rdonly(sb)) {
ext4_clear_feature_journal_needs_recovery(sb);
ext4_commit_super(sb, 1);
}
@@ -4821,7 +4818,7 @@ int ext4_force_commit(struct super_block *sb)
{
journal_t *journal;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return 0;
journal = EXT4_SB(sb)->s_journal;
@@ -4886,7 +4883,7 @@ static int ext4_freeze(struct super_block *sb)
int error = 0;
journal_t *journal;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return 0;
journal = EXT4_SB(sb)->s_journal;
@@ -4921,7 +4918,7 @@ out:
*/
static int ext4_unfreeze(struct super_block *sb)
{
- if ((sb->s_flags & MS_RDONLY) || ext4_forced_shutdown(EXT4_SB(sb)))
+ if (sb_rdonly(sb) || ext4_forced_shutdown(EXT4_SB(sb)))
return 0;
if (EXT4_SB(sb)->s_journal) {
@@ -5059,7 +5056,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
if (*flags & MS_LAZYTIME)
sb->s_flags |= MS_LAZYTIME;
- if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY)) {
+ if ((bool)(*flags & MS_RDONLY) != sb_rdonly(sb)) {
if (sbi->s_mount_flags & EXT4_MF_FS_ABORTED) {
err = -EROFS;
goto restore_opts;
@@ -5154,7 +5151,7 @@ static int ext4_remount(struct super_block *sb, int *flags, char *data)
* Reinitialize lazy itable initialization thread based on
* current settings
*/
- if ((sb->s_flags & MS_RDONLY) || !test_opt(sb, INIT_INODE_TABLE))
+ if (sb_rdonly(sb) || !test_opt(sb, INIT_INODE_TABLE))
ext4_unregister_li_request(sb);
else {
ext4_group_t first_not_zeroed;
@@ -5731,7 +5728,7 @@ static inline int ext2_feature_set_ok(struct super_block *sb)
{
if (ext4_has_unknown_ext2_incompat_features(sb))
return 0;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return 1;
if (ext4_has_unknown_ext2_ro_compat_features(sb))
return 0;
@@ -5762,7 +5759,7 @@ static inline int ext3_feature_set_ok(struct super_block *sb)
return 0;
if (!ext4_has_feature_journal(sb))
return 0;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return 1;
if (ext4_has_unknown_ext3_ro_compat_features(sb))
return 0;
diff --git a/fs/f2fs/acl.c b/fs/f2fs/acl.c
index b4b8438c42ef..436b3a1464d9 100644
--- a/fs/f2fs/acl.c
+++ b/fs/f2fs/acl.c
@@ -207,15 +207,16 @@ static int __f2fs_set_acl(struct inode *inode, int type,
void *value = NULL;
size_t size = 0;
int error;
+ umode_t mode = inode->i_mode;
switch (type) {
case ACL_TYPE_ACCESS:
name_index = F2FS_XATTR_INDEX_POSIX_ACL_ACCESS;
if (acl && !ipage) {
- error = posix_acl_update_mode(inode, &inode->i_mode, &acl);
+ error = posix_acl_update_mode(inode, &mode, &acl);
if (error)
return error;
- set_acl_inode(inode, inode->i_mode);
+ set_acl_inode(inode, mode);
}
break;
diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
index 5b876f6d3f6b..04fe1df052b2 100644
--- a/fs/f2fs/checkpoint.c
+++ b/fs/f2fs/checkpoint.c
@@ -230,8 +230,9 @@ void ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index)
ra_meta_pages(sbi, index, BIO_MAX_PAGES, META_POR, true);
}
-static int f2fs_write_meta_page(struct page *page,
- struct writeback_control *wbc)
+static int __f2fs_write_meta_page(struct page *page,
+ struct writeback_control *wbc,
+ enum iostat_type io_type)
{
struct f2fs_sb_info *sbi = F2FS_P_SB(page);
@@ -244,7 +245,7 @@ static int f2fs_write_meta_page(struct page *page,
if (unlikely(f2fs_cp_error(sbi)))
goto redirty_out;
- write_meta_page(sbi, page);
+ write_meta_page(sbi, page, io_type);
dec_page_count(sbi, F2FS_DIRTY_META);
if (wbc->for_reclaim)
@@ -263,6 +264,12 @@ redirty_out:
return AOP_WRITEPAGE_ACTIVATE;
}
+static int f2fs_write_meta_page(struct page *page,
+ struct writeback_control *wbc)
+{
+ return __f2fs_write_meta_page(page, wbc, FS_META_IO);
+}
+
static int f2fs_write_meta_pages(struct address_space *mapping,
struct writeback_control *wbc)
{
@@ -283,7 +290,7 @@ static int f2fs_write_meta_pages(struct address_space *mapping,
trace_f2fs_writepages(mapping->host, wbc, META);
diff = nr_pages_to_write(sbi, META, wbc);
- written = sync_meta_pages(sbi, META, wbc->nr_to_write);
+ written = sync_meta_pages(sbi, META, wbc->nr_to_write, FS_META_IO);
mutex_unlock(&sbi->cp_mutex);
wbc->nr_to_write = max((long)0, wbc->nr_to_write - written - diff);
return 0;
@@ -295,7 +302,7 @@ skip_write:
}
long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
- long nr_to_write)
+ long nr_to_write, enum iostat_type io_type)
{
struct address_space *mapping = META_MAPPING(sbi);
pgoff_t index = 0, end = ULONG_MAX, prev = ULONG_MAX;
@@ -346,7 +353,7 @@ continue_unlock:
if (!clear_page_dirty_for_io(page))
goto continue_unlock;
- if (mapping->a_ops->writepage(page, &wbc)) {
+ if (__f2fs_write_meta_page(page, &wbc, io_type)) {
unlock_page(page);
break;
}
@@ -581,11 +588,24 @@ static int recover_orphan_inode(struct f2fs_sb_info *sbi, nid_t ino)
int recover_orphan_inodes(struct f2fs_sb_info *sbi)
{
block_t start_blk, orphan_blocks, i, j;
- int err;
+ unsigned int s_flags = sbi->sb->s_flags;
+ int err = 0;
if (!is_set_ckpt_flags(sbi, CP_ORPHAN_PRESENT_FLAG))
return 0;
+ if (s_flags & MS_RDONLY) {
+ f2fs_msg(sbi->sb, KERN_INFO, "orphan cleanup on readonly fs");
+ sbi->sb->s_flags &= ~MS_RDONLY;
+ }
+
+#ifdef CONFIG_QUOTA
+ /* Needed for iput() to work correctly and not trash data */
+ sbi->sb->s_flags |= MS_ACTIVE;
+ /* Turn on quotas so that they are updated correctly */
+ f2fs_enable_quota_files(sbi);
+#endif
+
start_blk = __start_cp_addr(sbi) + 1 + __cp_payload(sbi);
orphan_blocks = __start_sum_addr(sbi) - 1 - __cp_payload(sbi);
@@ -601,14 +621,21 @@ int recover_orphan_inodes(struct f2fs_sb_info *sbi)
err = recover_orphan_inode(sbi, ino);
if (err) {
f2fs_put_page(page, 1);
- return err;
+ goto out;
}
}
f2fs_put_page(page, 1);
}
/* clear Orphan Flag */
clear_ckpt_flags(sbi, CP_ORPHAN_PRESENT_FLAG);
- return 0;
+out:
+#ifdef CONFIG_QUOTA
+ /* Turn quotas off */
+ f2fs_quota_off_umount(sbi->sb);
+#endif
+ sbi->sb->s_flags = s_flags; /* Restore MS_RDONLY status */
+
+ return err;
}
static void write_orphan_inodes(struct f2fs_sb_info *sbi, block_t start_blk)
@@ -904,7 +931,14 @@ retry:
if (inode) {
unsigned long cur_ino = inode->i_ino;
+ if (is_dir)
+ F2FS_I(inode)->cp_task = current;
+
filemap_fdatawrite(inode->i_mapping);
+
+ if (is_dir)
+ F2FS_I(inode)->cp_task = NULL;
+
iput(inode);
/* We need to give cpu to another writers. */
if (ino == cur_ino) {
@@ -1017,7 +1051,7 @@ retry_flush_nodes:
if (get_pages(sbi, F2FS_DIRTY_NODES)) {
up_write(&sbi->node_write);
- err = sync_node_pages(sbi, &wbc);
+ err = sync_node_pages(sbi, &wbc, false, FS_CP_NODE_IO);
if (err) {
up_write(&sbi->node_change);
f2fs_unlock_all(sbi);
@@ -1115,7 +1149,7 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
/* Flush all the NAT/SIT pages */
while (get_pages(sbi, F2FS_DIRTY_META)) {
- sync_meta_pages(sbi, META, LONG_MAX);
+ sync_meta_pages(sbi, META, LONG_MAX, FS_CP_META_IO);
if (unlikely(f2fs_cp_error(sbi)))
return -EIO;
}
@@ -1194,7 +1228,7 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
/* Flush all the NAT BITS pages */
while (get_pages(sbi, F2FS_DIRTY_META)) {
- sync_meta_pages(sbi, META, LONG_MAX);
+ sync_meta_pages(sbi, META, LONG_MAX, FS_CP_META_IO);
if (unlikely(f2fs_cp_error(sbi)))
return -EIO;
}
@@ -1249,7 +1283,7 @@ static int do_checkpoint(struct f2fs_sb_info *sbi, struct cp_control *cpc)
percpu_counter_set(&sbi->alloc_valid_block_count, 0);
/* Here, we only have one bio having CP pack */
- sync_meta_pages(sbi, META_FLUSH, LONG_MAX);
+ sync_meta_pages(sbi, META_FLUSH, LONG_MAX, FS_CP_META_IO);
/* wait for previous submitted meta pages writeback */
wait_on_all_pages_writeback(sbi);
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index fb96bb71da00..36b535207c88 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -457,14 +457,65 @@ out_fail:
return err;
}
+static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr,
+ unsigned nr_pages)
+{
+ struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+ struct fscrypt_ctx *ctx = NULL;
+ struct bio *bio;
+
+ if (f2fs_encrypted_file(inode)) {
+ ctx = fscrypt_get_ctx(inode, GFP_NOFS);
+ if (IS_ERR(ctx))
+ return ERR_CAST(ctx);
+
+ /* wait the page to be moved by cleaning */
+ f2fs_wait_on_block_writeback(sbi, blkaddr);
+ }
+
+ bio = bio_alloc(GFP_KERNEL, min_t(int, nr_pages, BIO_MAX_PAGES));
+ if (!bio) {
+ if (ctx)
+ fscrypt_release_ctx(ctx);
+ return ERR_PTR(-ENOMEM);
+ }
+ f2fs_target_device(sbi, blkaddr, bio);
+ bio->bi_end_io = f2fs_read_end_io;
+ bio->bi_private = ctx;
+ bio_set_op_attrs(bio, REQ_OP_READ, 0);
+
+ return bio;
+}
+
+/* This can handle encryption stuffs */
+static int f2fs_submit_page_read(struct inode *inode, struct page *page,
+ block_t blkaddr)
+{
+ struct bio *bio = f2fs_grab_read_bio(inode, blkaddr, 1);
+
+ if (IS_ERR(bio))
+ return PTR_ERR(bio);
+
+ if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
+ bio_put(bio);
+ return -EFAULT;
+ }
+ __submit_bio(F2FS_I_SB(inode), bio, DATA);
+ return 0;
+}
+
static void __set_data_blkaddr(struct dnode_of_data *dn)
{
struct f2fs_node *rn = F2FS_NODE(dn->node_page);
__le32 *addr_array;
+ int base = 0;
+
+ if (IS_INODE(dn->node_page) && f2fs_has_extra_attr(dn->inode))
+ base = get_extra_isize(dn->inode);
/* Get physical address of data block */
addr_array = blkaddr_in_node(rn);
- addr_array[dn->ofs_in_node] = cpu_to_le32(dn->data_blkaddr);
+ addr_array[base + dn->ofs_in_node] = cpu_to_le32(dn->data_blkaddr);
}
/*
@@ -508,8 +559,8 @@ int reserve_new_blocks(struct dnode_of_data *dn, blkcnt_t count)
f2fs_wait_on_page_writeback(dn->node_page, NODE, true);
for (; count > 0; dn->ofs_in_node++) {
- block_t blkaddr =
- datablock_addr(dn->node_page, dn->ofs_in_node);
+ block_t blkaddr = datablock_addr(dn->inode,
+ dn->node_page, dn->ofs_in_node);
if (blkaddr == NULL_ADDR) {
dn->data_blkaddr = NEW_ADDR;
__set_data_blkaddr(dn);
@@ -570,16 +621,6 @@ struct page *get_read_data_page(struct inode *inode, pgoff_t index,
struct page *page;
struct extent_info ei = {0,0,0};
int err;
- struct f2fs_io_info fio = {
- .sbi = F2FS_I_SB(inode),
- .type = DATA,
- .op = REQ_OP_READ,
- .op_flags = op_flags,
- .encrypted_page = NULL,
- };
-
- if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
- return read_mapping_page(mapping, index, NULL);
page = f2fs_grab_cache_page(mapping, index, for_write);
if (!page)
@@ -620,9 +661,7 @@ got_it:
return page;
}
- fio.new_blkaddr = fio.old_blkaddr = dn.data_blkaddr;
- fio.page = page;
- err = f2fs_submit_page_bio(&fio);
+ err = f2fs_submit_page_read(inode, page, dn.data_blkaddr);
if (err)
goto put_err;
return page;
@@ -756,7 +795,8 @@ static int __allocate_data_block(struct dnode_of_data *dn)
if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC)))
return -EPERM;
- dn->data_blkaddr = datablock_addr(dn->node_page, dn->ofs_in_node);
+ dn->data_blkaddr = datablock_addr(dn->inode,
+ dn->node_page, dn->ofs_in_node);
if (dn->data_blkaddr == NEW_ADDR)
goto alloc;
@@ -782,7 +822,7 @@ alloc:
static inline bool __force_buffered_io(struct inode *inode, int rw)
{
- return ((f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) ||
+ return (f2fs_encrypted_file(inode) ||
(rw == WRITE && test_opt(F2FS_I_SB(inode), LFS)) ||
F2FS_I_SB(inode)->s_ndevs);
}
@@ -814,7 +854,7 @@ int f2fs_preallocate_blocks(struct kiocb *iocb, struct iov_iter *from)
F2FS_GET_BLOCK_PRE_AIO :
F2FS_GET_BLOCK_PRE_DIO);
}
- if (iocb->ki_pos + iov_iter_count(from) > MAX_INLINE_DATA) {
+ if (iocb->ki_pos + iov_iter_count(from) > MAX_INLINE_DATA(inode)) {
err = f2fs_convert_inline_inode(inode);
if (err)
return err;
@@ -903,7 +943,7 @@ next_dnode:
end_offset = ADDRS_PER_PAGE(dn.node_page, inode);
next_block:
- blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node);
+ blkaddr = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node);
if (blkaddr == NEW_ADDR || blkaddr == NULL_ADDR) {
if (create) {
@@ -1040,7 +1080,7 @@ static int get_data_block_dio(struct inode *inode, sector_t iblock,
struct buffer_head *bh_result, int create)
{
return __get_data_block(inode, iblock, bh_result, create,
- F2FS_GET_BLOCK_DIO, NULL);
+ F2FS_GET_BLOCK_DEFAULT, NULL);
}
static int get_data_block_bmap(struct inode *inode, sector_t iblock,
@@ -1146,35 +1186,6 @@ out:
return ret;
}
-static struct bio *f2fs_grab_bio(struct inode *inode, block_t blkaddr,
- unsigned nr_pages)
-{
- struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
- struct fscrypt_ctx *ctx = NULL;
- struct bio *bio;
-
- if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) {
- ctx = fscrypt_get_ctx(inode, GFP_NOFS);
- if (IS_ERR(ctx))
- return ERR_CAST(ctx);
-
- /* wait the page to be moved by cleaning */
- f2fs_wait_on_encrypted_page_writeback(sbi, blkaddr);
- }
-
- bio = bio_alloc(GFP_KERNEL, min_t(int, nr_pages, BIO_MAX_PAGES));
- if (!bio) {
- if (ctx)
- fscrypt_release_ctx(ctx);
- return ERR_PTR(-ENOMEM);
- }
- f2fs_target_device(sbi, blkaddr, bio);
- bio->bi_end_io = f2fs_read_end_io;
- bio->bi_private = ctx;
-
- return bio;
-}
-
/*
* This function was originally taken from fs/mpage.c, and customized for f2fs.
* Major change was from block_size == page_size in f2fs by default.
@@ -1240,7 +1251,7 @@ static int f2fs_mpage_readpages(struct address_space *mapping,
map.m_len = last_block - block_in_file;
if (f2fs_map_blocks(inode, &map, 0,
- F2FS_GET_BLOCK_READ))
+ F2FS_GET_BLOCK_DEFAULT))
goto set_error_page;
}
got_it:
@@ -1271,12 +1282,11 @@ submit_and_realloc:
bio = NULL;
}
if (bio == NULL) {
- bio = f2fs_grab_bio(inode, block_nr, nr_pages);
+ bio = f2fs_grab_read_bio(inode, block_nr, nr_pages);
if (IS_ERR(bio)) {
bio = NULL;
goto set_error_page;
}
- bio_set_op_attrs(bio, REQ_OP_READ, 0);
}
if (bio_add_page(bio, page, blocksize, 0) < blocksize)
@@ -1341,11 +1351,11 @@ static int encrypt_one_page(struct f2fs_io_info *fio)
struct inode *inode = fio->page->mapping->host;
gfp_t gfp_flags = GFP_NOFS;
- if (!f2fs_encrypted_inode(inode) || !S_ISREG(inode->i_mode))
+ if (!f2fs_encrypted_file(inode))
return 0;
/* wait for GCed encrypted page writeback */
- f2fs_wait_on_encrypted_page_writeback(fio->sbi, fio->old_blkaddr);
+ f2fs_wait_on_block_writeback(fio->sbi, fio->old_blkaddr);
retry_encrypt:
fio->encrypted_page = fscrypt_encrypt_page(inode, fio->page,
@@ -1471,7 +1481,8 @@ out:
}
static int __write_data_page(struct page *page, bool *submitted,
- struct writeback_control *wbc)
+ struct writeback_control *wbc,
+ enum iostat_type io_type)
{
struct inode *inode = page->mapping->host;
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
@@ -1492,6 +1503,7 @@ static int __write_data_page(struct page *page, bool *submitted,
.encrypted_page = NULL,
.submitted = false,
.need_lock = LOCK_RETRY,
+ .io_type = io_type,
};
trace_f2fs_writepage(page, DATA);
@@ -1598,7 +1610,7 @@ redirty_out:
static int f2fs_write_data_page(struct page *page,
struct writeback_control *wbc)
{
- return __write_data_page(page, NULL, wbc);
+ return __write_data_page(page, NULL, wbc, FS_DATA_IO);
}
/*
@@ -1607,7 +1619,8 @@ static int f2fs_write_data_page(struct page *page,
* warm/hot data page.
*/
static int f2fs_write_cache_pages(struct address_space *mapping,
- struct writeback_control *wbc)
+ struct writeback_control *wbc,
+ enum iostat_type io_type)
{
int ret = 0;
int done = 0;
@@ -1697,7 +1710,7 @@ continue_unlock:
if (!clear_page_dirty_for_io(page))
goto continue_unlock;
- ret = __write_data_page(page, &submitted, wbc);
+ ret = __write_data_page(page, &submitted, wbc, io_type);
if (unlikely(ret)) {
/*
* keep nr_to_write, since vfs uses this to
@@ -1752,8 +1765,9 @@ continue_unlock:
return ret;
}
-static int f2fs_write_data_pages(struct address_space *mapping,
- struct writeback_control *wbc)
+int __f2fs_write_data_pages(struct address_space *mapping,
+ struct writeback_control *wbc,
+ enum iostat_type io_type)
{
struct inode *inode = mapping->host;
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
@@ -1790,7 +1804,7 @@ static int f2fs_write_data_pages(struct address_space *mapping,
goto skip_write;
blk_start_plug(&plug);
- ret = f2fs_write_cache_pages(mapping, wbc);
+ ret = f2fs_write_cache_pages(mapping, wbc, io_type);
blk_finish_plug(&plug);
if (wbc->sync_mode == WB_SYNC_ALL)
@@ -1809,6 +1823,16 @@ skip_write:
return 0;
}
+static int f2fs_write_data_pages(struct address_space *mapping,
+ struct writeback_control *wbc)
+{
+ struct inode *inode = mapping->host;
+
+ return __f2fs_write_data_pages(mapping, wbc,
+ F2FS_I(inode)->cp_task == current ?
+ FS_CP_DATA_IO : FS_DATA_IO);
+}
+
static void f2fs_write_failed(struct address_space *mapping, loff_t to)
{
struct inode *inode = mapping->host;
@@ -1858,7 +1882,7 @@ restart:
set_new_dnode(&dn, inode, ipage, ipage, 0);
if (f2fs_has_inline_data(inode)) {
- if (pos + len <= MAX_INLINE_DATA) {
+ if (pos + len <= MAX_INLINE_DATA(inode)) {
read_inline_data(page, ipage);
set_inode_flag(inode, FI_DATA_EXIST);
if (inode->i_nlink)
@@ -1956,8 +1980,8 @@ repeat:
f2fs_wait_on_page_writeback(page, DATA, false);
/* wait for GCed encrypted page writeback */
- if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
- f2fs_wait_on_encrypted_page_writeback(sbi, blkaddr);
+ if (f2fs_encrypted_file(inode))
+ f2fs_wait_on_block_writeback(sbi, blkaddr);
if (len == PAGE_SIZE || PageUptodate(page))
return 0;
@@ -1971,21 +1995,9 @@ repeat:
zero_user_segment(page, 0, PAGE_SIZE);
SetPageUptodate(page);
} else {
- struct bio *bio;
-
- bio = f2fs_grab_bio(inode, blkaddr, 1);
- if (IS_ERR(bio)) {
- err = PTR_ERR(bio);
- goto fail;
- }
- bio->bi_opf = REQ_OP_READ;
- if (bio_add_page(bio, page, PAGE_SIZE, 0) < PAGE_SIZE) {
- bio_put(bio);
- err = -EFAULT;
+ err = f2fs_submit_page_read(inode, page, blkaddr);
+ if (err)
goto fail;
- }
-
- __submit_bio(sbi, bio, DATA);
lock_page(page);
if (unlikely(page->mapping != mapping)) {
@@ -2075,10 +2087,13 @@ static ssize_t f2fs_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
up_read(&F2FS_I(inode)->dio_rwsem[rw]);
if (rw == WRITE) {
- if (err > 0)
+ if (err > 0) {
+ f2fs_update_iostat(F2FS_I_SB(inode), APP_DIRECT_IO,
+ err);
set_inode_flag(inode, FI_UPDATE_WRITE);
- else if (err < 0)
+ } else if (err < 0) {
f2fs_write_failed(mapping, offset + count);
+ }
}
trace_f2fs_direct_IO_exit(inode, offset, count, rw, err);
diff --git a/fs/f2fs/dir.c b/fs/f2fs/dir.c
index 37f9c7f55605..c0c933ad43c8 100644
--- a/fs/f2fs/dir.c
+++ b/fs/f2fs/dir.c
@@ -705,6 +705,8 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
struct f2fs_dentry_block *dentry_blk;
unsigned int bit_pos;
int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
+ struct address_space *mapping = page_mapping(page);
+ unsigned long flags;
int i;
f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
@@ -735,6 +737,11 @@ void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
if (bit_pos == NR_DENTRY_IN_BLOCK &&
!truncate_hole(dir, page->index, page->index + 1)) {
+ spin_lock_irqsave(&mapping->tree_lock, flags);
+ radix_tree_tag_clear(&mapping->page_tree, page_index(page),
+ PAGECACHE_TAG_DIRTY);
+ spin_unlock_irqrestore(&mapping->tree_lock, flags);
+
clear_page_dirty_for_io(page);
ClearPagePrivate(page);
ClearPageUptodate(page);
diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h
index 94a88b233e98..9a7c90386947 100644
--- a/fs/f2fs/f2fs.h
+++ b/fs/f2fs/f2fs.h
@@ -91,6 +91,8 @@ extern char *fault_name[FAULT_MAX];
#define F2FS_MOUNT_LFS 0x00040000
#define F2FS_MOUNT_USRQUOTA 0x00080000
#define F2FS_MOUNT_GRPQUOTA 0x00100000
+#define F2FS_MOUNT_PRJQUOTA 0x00200000
+#define F2FS_MOUNT_QUOTA 0x00400000
#define clear_opt(sbi, option) ((sbi)->mount_opt.opt &= ~F2FS_MOUNT_##option)
#define set_opt(sbi, option) ((sbi)->mount_opt.opt |= F2FS_MOUNT_##option)
@@ -110,8 +112,12 @@ struct f2fs_mount_info {
unsigned int opt;
};
-#define F2FS_FEATURE_ENCRYPT 0x0001
-#define F2FS_FEATURE_BLKZONED 0x0002
+#define F2FS_FEATURE_ENCRYPT 0x0001
+#define F2FS_FEATURE_BLKZONED 0x0002
+#define F2FS_FEATURE_ATOMIC_WRITE 0x0004
+#define F2FS_FEATURE_EXTRA_ATTR 0x0008
+#define F2FS_FEATURE_PRJQUOTA 0x0010
+#define F2FS_FEATURE_INODE_CHKSUM 0x0020
#define F2FS_HAS_FEATURE(sb, mask) \
((F2FS_SB(sb)->raw_super->feature & cpu_to_le32(mask)) != 0)
@@ -142,6 +148,8 @@ enum {
(BATCHED_TRIM_SEGMENTS(sbi) << (sbi)->log_blocks_per_seg)
#define MAX_DISCARD_BLOCKS(sbi) BLKS_PER_SEC(sbi)
#define DISCARD_ISSUE_RATE 8
+#define DEF_MIN_DISCARD_ISSUE_TIME 50 /* 50 ms, if exists */
+#define DEF_MAX_DISCARD_ISSUE_TIME 60000 /* 60 s, if no candidates */
#define DEF_CP_INTERVAL 60 /* 60 secs */
#define DEF_IDLE_INTERVAL 5 /* 5 secs */
@@ -190,11 +198,18 @@ struct discard_entry {
unsigned char discard_map[SIT_VBLOCK_MAP_SIZE]; /* segment discard bitmap */
};
+/* default discard granularity of inner discard thread, unit: block count */
+#define DEFAULT_DISCARD_GRANULARITY 16
+
/* max discard pend list number */
#define MAX_PLIST_NUM 512
#define plist_idx(blk_num) ((blk_num) >= MAX_PLIST_NUM ? \
(MAX_PLIST_NUM - 1) : (blk_num - 1))
+#define P_ACTIVE 0x01
+#define P_TRIM 0x02
+#define plist_issue(tag) (((tag) & P_ACTIVE) || ((tag) & P_TRIM))
+
enum {
D_PREP,
D_SUBMIT,
@@ -230,11 +245,14 @@ struct discard_cmd_control {
struct task_struct *f2fs_issue_discard; /* discard thread */
struct list_head entry_list; /* 4KB discard entry list */
struct list_head pend_list[MAX_PLIST_NUM];/* store pending entries */
+ unsigned char pend_list_tag[MAX_PLIST_NUM];/* tag for pending entries */
struct list_head wait_list; /* store on-flushing entries */
wait_queue_head_t discard_wait_queue; /* waiting queue for wake-up */
+ unsigned int discard_wake; /* to wake up discard thread */
struct mutex cmd_lock;
unsigned int nr_discards; /* # of discards in the list */
unsigned int max_discards; /* max. discards to be issued */
+ unsigned int discard_granularity; /* discard granularity */
unsigned int undiscard_blks; /* # of undiscard blocks */
atomic_t issued_discard; /* # of issued discard */
atomic_t issing_discard; /* # of issing discard */
@@ -308,6 +326,7 @@ static inline bool __has_cursum_space(struct f2fs_journal *journal,
struct f2fs_flush_device)
#define F2FS_IOC_GARBAGE_COLLECT_RANGE _IOW(F2FS_IOCTL_MAGIC, 11, \
struct f2fs_gc_range)
+#define F2FS_IOC_GET_FEATURES _IOR(F2FS_IOCTL_MAGIC, 12, __u32)
#define F2FS_IOC_SET_ENCRYPTION_POLICY FS_IOC_SET_ENCRYPTION_POLICY
#define F2FS_IOC_GET_ENCRYPTION_POLICY FS_IOC_GET_ENCRYPTION_POLICY
@@ -332,6 +351,9 @@ static inline bool __has_cursum_space(struct f2fs_journal *journal,
#define F2FS_IOC32_GETVERSION FS_IOC32_GETVERSION
#endif
+#define F2FS_IOC_FSGETXATTR FS_IOC_FSGETXATTR
+#define F2FS_IOC_FSSETXATTR FS_IOC_FSSETXATTR
+
struct f2fs_gc_range {
u32 sync;
u64 start;
@@ -355,16 +377,36 @@ struct f2fs_flush_device {
u32 segments; /* # of segments to flush */
};
+/* for inline stuff */
+#define DEF_INLINE_RESERVED_SIZE 1
+static inline int get_extra_isize(struct inode *inode);
+#define MAX_INLINE_DATA(inode) (sizeof(__le32) * \
+ (CUR_ADDRS_PER_INODE(inode) - \
+ DEF_INLINE_RESERVED_SIZE - \
+ F2FS_INLINE_XATTR_ADDRS))
+
+/* for inline dir */
+#define NR_INLINE_DENTRY(inode) (MAX_INLINE_DATA(inode) * BITS_PER_BYTE / \
+ ((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
+ BITS_PER_BYTE + 1))
+#define INLINE_DENTRY_BITMAP_SIZE(inode) ((NR_INLINE_DENTRY(inode) + \
+ BITS_PER_BYTE - 1) / BITS_PER_BYTE)
+#define INLINE_RESERVED_SIZE(inode) (MAX_INLINE_DATA(inode) - \
+ ((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
+ NR_INLINE_DENTRY(inode) + \
+ INLINE_DENTRY_BITMAP_SIZE(inode)))
+
/*
* For INODE and NODE manager
*/
/* for directory operations */
struct f2fs_dentry_ptr {
struct inode *inode;
- const void *bitmap;
+ void *bitmap;
struct f2fs_dir_entry *dentry;
__u8 (*filename)[F2FS_SLOT_LEN];
int max;
+ int nr_bitmap;
};
static inline void make_dentry_ptr_block(struct inode *inode,
@@ -372,19 +414,26 @@ static inline void make_dentry_ptr_block(struct inode *inode,
{
d->inode = inode;
d->max = NR_DENTRY_IN_BLOCK;
+ d->nr_bitmap = SIZE_OF_DENTRY_BITMAP;
d->bitmap = &t->dentry_bitmap;
d->dentry = t->dentry;
d->filename = t->filename;
}
static inline void make_dentry_ptr_inline(struct inode *inode,
- struct f2fs_dentry_ptr *d, struct f2fs_inline_dentry *t)
+ struct f2fs_dentry_ptr *d, void *t)
{
+ int entry_cnt = NR_INLINE_DENTRY(inode);
+ int bitmap_size = INLINE_DENTRY_BITMAP_SIZE(inode);
+ int reserved_size = INLINE_RESERVED_SIZE(inode);
+
d->inode = inode;
- d->max = NR_INLINE_DENTRY;
- d->bitmap = &t->dentry_bitmap;
- d->dentry = t->dentry;
- d->filename = t->filename;
+ d->max = entry_cnt;
+ d->nr_bitmap = bitmap_size;
+ d->bitmap = t;
+ d->dentry = t + bitmap_size + reserved_size;
+ d->filename = t + bitmap_size + reserved_size +
+ SIZE_OF_DIR_ENTRY * entry_cnt;
}
/*
@@ -473,12 +522,13 @@ struct f2fs_map_blocks {
};
/* for flag in get_data_block */
-#define F2FS_GET_BLOCK_READ 0
-#define F2FS_GET_BLOCK_DIO 1
-#define F2FS_GET_BLOCK_FIEMAP 2
-#define F2FS_GET_BLOCK_BMAP 3
-#define F2FS_GET_BLOCK_PRE_DIO 4
-#define F2FS_GET_BLOCK_PRE_AIO 5
+enum {
+ F2FS_GET_BLOCK_DEFAULT,
+ F2FS_GET_BLOCK_FIEMAP,
+ F2FS_GET_BLOCK_BMAP,
+ F2FS_GET_BLOCK_PRE_DIO,
+ F2FS_GET_BLOCK_PRE_AIO,
+};
/*
* i_advise uses FADVISE_XXX_BIT. We can add additional hints later.
@@ -521,6 +571,7 @@ struct f2fs_inode_info {
f2fs_hash_t chash; /* hash value of given file name */
unsigned int clevel; /* maximum level of given file name */
struct task_struct *task; /* lookup and create consistency */
+ struct task_struct *cp_task; /* separate cp/wb IO stats*/
nid_t i_xattr_nid; /* node id that contains xattrs */
loff_t last_disk_size; /* lastly written file size */
@@ -533,10 +584,15 @@ struct f2fs_inode_info {
struct list_head dirty_list; /* dirty list for dirs and files */
struct list_head gdirty_list; /* linked in global dirty list */
struct list_head inmem_pages; /* inmemory pages managed by f2fs */
+ struct task_struct *inmem_task; /* store inmemory task */
struct mutex inmem_lock; /* lock for inmemory pages */
struct extent_tree *extent_tree; /* cached extent_tree entry */
struct rw_semaphore dio_rwsem[2];/* avoid racing between dio and gc */
struct rw_semaphore i_mmap_sem;
+ struct rw_semaphore i_xattr_sem; /* avoid racing between reading and changing EAs */
+
+ int i_extra_isize; /* size of extra space located in i_addr */
+ kprojid_t i_projid; /* id for project quota */
};
static inline void get_extent_info(struct extent_info *ext,
@@ -823,6 +879,23 @@ enum need_lock_type {
LOCK_RETRY,
};
+enum iostat_type {
+ APP_DIRECT_IO, /* app direct IOs */
+ APP_BUFFERED_IO, /* app buffered IOs */
+ APP_WRITE_IO, /* app write IOs */
+ APP_MAPPED_IO, /* app mapped IOs */
+ FS_DATA_IO, /* data IOs from kworker/fsync/reclaimer */
+ FS_NODE_IO, /* node IOs from kworker/fsync/reclaimer */
+ FS_META_IO, /* meta IOs from kworker/reclaimer */
+ FS_GC_DATA_IO, /* data IOs from forground gc */
+ FS_GC_NODE_IO, /* node IOs from forground gc */
+ FS_CP_DATA_IO, /* data IOs from checkpoint */
+ FS_CP_NODE_IO, /* node IOs from checkpoint */
+ FS_CP_META_IO, /* meta IOs from checkpoint */
+ FS_DISCARD, /* discard */
+ NR_IO_TYPE,
+};
+
struct f2fs_io_info {
struct f2fs_sb_info *sbi; /* f2fs_sb_info pointer */
enum page_type type; /* contains DATA/NODE/META/META_FLUSH */
@@ -837,6 +910,7 @@ struct f2fs_io_info {
bool submitted; /* indicate IO submission */
int need_lock; /* indicate we need to lock cp_rwsem */
bool in_list; /* indicate fio is in io_list */
+ enum iostat_type io_type; /* io type */
};
#define is_read_io(rw) ((rw) == READ)
@@ -1028,6 +1102,11 @@ struct f2fs_sb_info {
#endif
spinlock_t stat_lock; /* lock for stat operations */
+ /* For app/fs IO statistics */
+ spinlock_t iostat_lock;
+ unsigned long long write_iostat[NR_IO_TYPE];
+ bool iostat_enable;
+
/* For sysfs suppport */
struct kobject s_kobj;
struct completion s_kobj_unregister;
@@ -1046,10 +1125,19 @@ struct f2fs_sb_info {
/* Reference to checksum algorithm driver via cryptoapi */
struct crypto_shash *s_chksum_driver;
+ /* Precomputed FS UUID checksum for seeding other checksums */
+ __u32 s_chksum_seed;
+
/* For fault injection */
#ifdef CONFIG_F2FS_FAULT_INJECTION
struct f2fs_fault_info fault_info;
#endif
+
+#ifdef CONFIG_QUOTA
+ /* Names of quota files with journalled quota */
+ char *s_qf_names[MAXQUOTAS];
+ int s_jquota_fmt; /* Format of quota to use */
+#endif
};
#ifdef CONFIG_F2FS_FAULT_INJECTION
@@ -1137,6 +1225,27 @@ static inline bool f2fs_crc_valid(struct f2fs_sb_info *sbi, __u32 blk_crc,
return f2fs_crc32(sbi, buf, buf_size) == blk_crc;
}
+static inline u32 f2fs_chksum(struct f2fs_sb_info *sbi, u32 crc,
+ const void *address, unsigned int length)
+{
+ struct {
+ struct shash_desc shash;
+ char ctx[4];
+ } desc;
+ int err;
+
+ BUG_ON(crypto_shash_descsize(sbi->s_chksum_driver) != sizeof(desc.ctx));
+
+ desc.shash.tfm = sbi->s_chksum_driver;
+ desc.shash.flags = 0;
+ *(u32 *)desc.ctx = crc;
+
+ err = crypto_shash_update(&desc.shash, address, length);
+ BUG_ON(err);
+
+ return *(u32 *)desc.ctx;
+}
+
static inline struct f2fs_inode_info *F2FS_I(struct inode *inode)
{
return container_of(inode, struct f2fs_inode_info, vfs_inode);
@@ -1760,20 +1869,38 @@ static inline bool IS_INODE(struct page *page)
return RAW_IS_INODE(p);
}
+static inline int offset_in_addr(struct f2fs_inode *i)
+{
+ return (i->i_inline & F2FS_EXTRA_ATTR) ?
+ (le16_to_cpu(i->i_extra_isize) / sizeof(__le32)) : 0;
+}
+
static inline __le32 *blkaddr_in_node(struct f2fs_node *node)
{
return RAW_IS_INODE(node) ? node->i.i_addr : node->dn.addr;
}
-static inline block_t datablock_addr(struct page *node_page,
- unsigned int offset)
+static inline int f2fs_has_extra_attr(struct inode *inode);
+static inline block_t datablock_addr(struct inode *inode,
+ struct page *node_page, unsigned int offset)
{
struct f2fs_node *raw_node;
__le32 *addr_array;
+ int base = 0;
+ bool is_inode = IS_INODE(node_page);
raw_node = F2FS_NODE(node_page);
+
+ /* from GC path only */
+ if (!inode) {
+ if (is_inode)
+ base = offset_in_addr(&raw_node->i);
+ } else if (f2fs_has_extra_attr(inode) && is_inode) {
+ base = get_extra_isize(inode);
+ }
+
addr_array = blkaddr_in_node(raw_node);
- return le32_to_cpu(addr_array[offset]);
+ return le32_to_cpu(addr_array[base + offset]);
}
static inline int f2fs_test_bit(unsigned int nr, char *addr)
@@ -1836,6 +1963,20 @@ static inline void f2fs_change_bit(unsigned int nr, char *addr)
*addr ^= mask;
}
+#define F2FS_REG_FLMASK (~(FS_DIRSYNC_FL | FS_TOPDIR_FL))
+#define F2FS_OTHER_FLMASK (FS_NODUMP_FL | FS_NOATIME_FL)
+#define F2FS_FL_INHERITED (FS_PROJINHERIT_FL)
+
+static inline __u32 f2fs_mask_flags(umode_t mode, __u32 flags)
+{
+ if (S_ISDIR(mode))
+ return flags;
+ else if (S_ISREG(mode))
+ return flags & F2FS_REG_FLMASK;
+ else
+ return flags & F2FS_OTHER_FLMASK;
+}
+
/* used for f2fs_inode_info->flags */
enum {
FI_NEW_INODE, /* indicate newly allocated inode */
@@ -1864,6 +2005,8 @@ enum {
FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */
FI_NO_PREALLOC, /* indicate skipped preallocated blocks */
FI_HOT_DATA, /* indicate file is hot */
+ FI_EXTRA_ATTR, /* indicate file has extra attribute */
+ FI_PROJ_INHERIT, /* indicate file inherits projectid */
};
static inline void __mark_inode_dirty_flag(struct inode *inode,
@@ -1983,6 +2126,8 @@ static inline void get_inline_info(struct inode *inode, struct f2fs_inode *ri)
set_bit(FI_DATA_EXIST, &fi->flags);
if (ri->i_inline & F2FS_INLINE_DOTS)
set_bit(FI_INLINE_DOTS, &fi->flags);
+ if (ri->i_inline & F2FS_EXTRA_ATTR)
+ set_bit(FI_EXTRA_ATTR, &fi->flags);
}
static inline void set_raw_inline(struct inode *inode, struct f2fs_inode *ri)
@@ -1999,6 +2144,13 @@ static inline void set_raw_inline(struct inode *inode, struct f2fs_inode *ri)
ri->i_inline |= F2FS_DATA_EXIST;
if (is_inode_flag_set(inode, FI_INLINE_DOTS))
ri->i_inline |= F2FS_INLINE_DOTS;
+ if (is_inode_flag_set(inode, FI_EXTRA_ATTR))
+ ri->i_inline |= F2FS_EXTRA_ATTR;
+}
+
+static inline int f2fs_has_extra_attr(struct inode *inode)
+{
+ return is_inode_flag_set(inode, FI_EXTRA_ATTR);
}
static inline int f2fs_has_inline_xattr(struct inode *inode)
@@ -2009,8 +2161,8 @@ static inline int f2fs_has_inline_xattr(struct inode *inode)
static inline unsigned int addrs_per_inode(struct inode *inode)
{
if (f2fs_has_inline_xattr(inode))
- return DEF_ADDRS_PER_INODE - F2FS_INLINE_XATTR_ADDRS;
- return DEF_ADDRS_PER_INODE;
+ return CUR_ADDRS_PER_INODE(inode) - F2FS_INLINE_XATTR_ADDRS;
+ return CUR_ADDRS_PER_INODE(inode);
}
static inline void *inline_xattr_addr(struct page *page)
@@ -2069,11 +2221,12 @@ static inline bool f2fs_is_drop_cache(struct inode *inode)
return is_inode_flag_set(inode, FI_DROP_CACHE);
}
-static inline void *inline_data_addr(struct page *page)
+static inline void *inline_data_addr(struct inode *inode, struct page *page)
{
struct f2fs_inode *ri = F2FS_INODE(page);
+ int extra_size = get_extra_isize(inode);
- return (void *)&(ri->i_addr[1]);
+ return (void *)&(ri->i_addr[extra_size + DEF_INLINE_RESERVED_SIZE]);
}
static inline int f2fs_has_inline_dentry(struct inode *inode)
@@ -2164,10 +2317,50 @@ static inline void *f2fs_kmalloc(struct f2fs_sb_info *sbi,
return kmalloc(size, flags);
}
+static inline int get_extra_isize(struct inode *inode)
+{
+ return F2FS_I(inode)->i_extra_isize / sizeof(__le32);
+}
+
#define get_inode_mode(i) \
((is_inode_flag_set(i, FI_ACL_MODE)) ? \
(F2FS_I(i)->i_acl_mode) : ((i)->i_mode))
+#define F2FS_TOTAL_EXTRA_ATTR_SIZE \
+ (offsetof(struct f2fs_inode, i_extra_end) - \
+ offsetof(struct f2fs_inode, i_extra_isize)) \
+
+#define F2FS_OLD_ATTRIBUTE_SIZE (offsetof(struct f2fs_inode, i_addr))
+#define F2FS_FITS_IN_INODE(f2fs_inode, extra_isize, field) \
+ ((offsetof(typeof(*f2fs_inode), field) + \
+ sizeof((f2fs_inode)->field)) \
+ <= (F2FS_OLD_ATTRIBUTE_SIZE + extra_isize)) \
+
+static inline void f2fs_reset_iostat(struct f2fs_sb_info *sbi)
+{
+ int i;
+
+ spin_lock(&sbi->iostat_lock);
+ for (i = 0; i < NR_IO_TYPE; i++)
+ sbi->write_iostat[i] = 0;
+ spin_unlock(&sbi->iostat_lock);
+}
+
+static inline void f2fs_update_iostat(struct f2fs_sb_info *sbi,
+ enum iostat_type type, unsigned long long io_bytes)
+{
+ if (!sbi->iostat_enable)
+ return;
+ spin_lock(&sbi->iostat_lock);
+ sbi->write_iostat[type] += io_bytes;
+
+ if (type == APP_WRITE_IO || type == APP_DIRECT_IO)
+ sbi->write_iostat[APP_BUFFERED_IO] =
+ sbi->write_iostat[APP_WRITE_IO] -
+ sbi->write_iostat[APP_DIRECT_IO];
+ spin_unlock(&sbi->iostat_lock);
+}
+
/*
* file.c
*/
@@ -2187,6 +2380,8 @@ long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
* inode.c
*/
void f2fs_set_inode_flags(struct inode *inode);
+bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page);
+void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct page *page);
struct inode *f2fs_iget(struct super_block *sb, unsigned long ino);
struct inode *f2fs_iget_retry(struct super_block *sb, unsigned long ino);
int try_to_free_nats(struct f2fs_sb_info *sbi, int nr_shrink);
@@ -2255,6 +2450,8 @@ static inline int f2fs_add_link(struct dentry *dentry, struct inode *inode)
*/
int f2fs_inode_dirtied(struct inode *inode, bool sync);
void f2fs_inode_synced(struct inode *inode);
+void f2fs_enable_quota_files(struct f2fs_sb_info *sbi);
+void f2fs_quota_off_umount(struct super_block *sb);
int f2fs_commit_super(struct f2fs_sb_info *sbi, bool recover);
int f2fs_sync_fs(struct super_block *sb, int sync);
extern __printf(3, 4)
@@ -2285,15 +2482,15 @@ int truncate_xattr_node(struct inode *inode, struct page *page);
int wait_on_node_pages_writeback(struct f2fs_sb_info *sbi, nid_t ino);
int remove_inode_page(struct inode *inode);
struct page *new_inode_page(struct inode *inode);
-struct page *new_node_page(struct dnode_of_data *dn,
- unsigned int ofs, struct page *ipage);
+struct page *new_node_page(struct dnode_of_data *dn, unsigned int ofs);
void ra_node_page(struct f2fs_sb_info *sbi, nid_t nid);
struct page *get_node_page(struct f2fs_sb_info *sbi, pgoff_t nid);
struct page *get_node_page_ra(struct page *parent, int start);
void move_node_page(struct page *node_page, int gc_type);
int fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
struct writeback_control *wbc, bool atomic);
-int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc);
+int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc,
+ bool do_balance, enum iostat_type io_type);
void build_free_nids(struct f2fs_sb_info *sbi, bool sync, bool mount);
bool alloc_nid(struct f2fs_sb_info *sbi, nid_t *nid);
void alloc_nid_done(struct f2fs_sb_info *sbi, nid_t nid);
@@ -2314,6 +2511,7 @@ void destroy_node_manager_caches(void);
/*
* segment.c
*/
+bool need_SSR(struct f2fs_sb_info *sbi);
void register_inmem_page(struct inode *inode, struct page *page);
void drop_inmem_pages(struct inode *inode);
void drop_inmem_page(struct inode *inode, struct page *page);
@@ -2336,7 +2534,8 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range);
bool exist_trim_candidates(struct f2fs_sb_info *sbi, struct cp_control *cpc);
struct page *get_sum_page(struct f2fs_sb_info *sbi, unsigned int segno);
void update_meta_page(struct f2fs_sb_info *sbi, void *src, block_t blk_addr);
-void write_meta_page(struct f2fs_sb_info *sbi, struct page *page);
+void write_meta_page(struct f2fs_sb_info *sbi, struct page *page,
+ enum iostat_type io_type);
void write_node_page(unsigned int nid, struct f2fs_io_info *fio);
void write_data_page(struct dnode_of_data *dn, struct f2fs_io_info *fio);
int rewrite_data_page(struct f2fs_io_info *fio);
@@ -2353,8 +2552,7 @@ void allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
struct f2fs_io_info *fio, bool add_list);
void f2fs_wait_on_page_writeback(struct page *page,
enum page_type type, bool ordered);
-void f2fs_wait_on_encrypted_page_writeback(struct f2fs_sb_info *sbi,
- block_t blkaddr);
+void f2fs_wait_on_block_writeback(struct f2fs_sb_info *sbi, block_t blkaddr);
void write_data_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
void write_node_summaries(struct f2fs_sb_info *sbi, block_t start_blk);
int lookup_journal_in_cursum(struct f2fs_journal *journal, int type,
@@ -2377,7 +2575,7 @@ int ra_meta_pages(struct f2fs_sb_info *sbi, block_t start, int nrpages,
int type, bool sync);
void ra_meta_pages_cond(struct f2fs_sb_info *sbi, pgoff_t index);
long sync_meta_pages(struct f2fs_sb_info *sbi, enum page_type type,
- long nr_to_write);
+ long nr_to_write, enum iostat_type io_type);
void add_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
void remove_ino_entry(struct f2fs_sb_info *sbi, nid_t ino, int type);
void release_ino_entry(struct f2fs_sb_info *sbi, bool all);
@@ -2430,6 +2628,9 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map,
int f2fs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
u64 start, u64 len);
void f2fs_set_page_dirty_nobuffers(struct page *page);
+int __f2fs_write_data_pages(struct address_space *mapping,
+ struct writeback_control *wbc,
+ enum iostat_type io_type);
void f2fs_invalidate_page(struct page *page, unsigned int offset,
unsigned int length);
int f2fs_release_page(struct page *page, gfp_t wait);
@@ -2726,10 +2927,10 @@ void destroy_extent_cache(void);
/*
* sysfs.c
*/
-int __init f2fs_register_sysfs(void);
-void f2fs_unregister_sysfs(void);
-int f2fs_init_sysfs(struct f2fs_sb_info *sbi);
-void f2fs_exit_sysfs(struct f2fs_sb_info *sbi);
+int __init f2fs_init_sysfs(void);
+void f2fs_exit_sysfs(void);
+int f2fs_register_sysfs(struct f2fs_sb_info *sbi);
+void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi);
/*
* crypto support
@@ -2739,6 +2940,11 @@ static inline bool f2fs_encrypted_inode(struct inode *inode)
return file_is_encrypt(inode);
}
+static inline bool f2fs_encrypted_file(struct inode *inode)
+{
+ return f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode);
+}
+
static inline void f2fs_set_encrypted_inode(struct inode *inode)
{
#ifdef CONFIG_F2FS_FS_ENCRYPTION
@@ -2761,6 +2967,21 @@ static inline int f2fs_sb_mounted_blkzoned(struct super_block *sb)
return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_BLKZONED);
}
+static inline int f2fs_sb_has_extra_attr(struct super_block *sb)
+{
+ return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_EXTRA_ATTR);
+}
+
+static inline int f2fs_sb_has_project_quota(struct super_block *sb)
+{
+ return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_PRJQUOTA);
+}
+
+static inline int f2fs_sb_has_inode_chksum(struct super_block *sb)
+{
+ return F2FS_HAS_FEATURE(sb, F2FS_FEATURE_INODE_CHKSUM);
+}
+
#ifdef CONFIG_BLK_DEV_ZONED
static inline int get_blkz_type(struct f2fs_sb_info *sbi,
struct block_device *bdev, block_t blkaddr)
diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 843a0d99f7ea..517e112c8a9a 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -98,14 +98,16 @@ static int f2fs_vm_page_mkwrite(struct vm_fault *vmf)
if (!PageUptodate(page))
SetPageUptodate(page);
+ f2fs_update_iostat(sbi, APP_MAPPED_IO, F2FS_BLKSIZE);
+
trace_f2fs_vm_page_mkwrite(page, DATA);
mapped:
/* fill the page */
f2fs_wait_on_page_writeback(page, DATA, false);
/* wait for GCed encrypted page writeback */
- if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
- f2fs_wait_on_encrypted_page_writeback(sbi, dn.data_blkaddr);
+ if (f2fs_encrypted_file(inode))
+ f2fs_wait_on_block_writeback(sbi, dn.data_blkaddr);
out_sem:
up_read(&F2FS_I(inode)->i_mmap_sem);
@@ -274,9 +276,19 @@ sync_nodes:
goto sync_nodes;
}
- ret = wait_on_node_pages_writeback(sbi, ino);
- if (ret)
- goto out;
+ /*
+ * If it's atomic_write, it's just fine to keep write ordering. So
+ * here we don't need to wait for node write completion, since we use
+ * node chain which serializes node blocks. If one of node writes are
+ * reordered, we can see simply broken chain, resulting in stopping
+ * roll-forward recovery. It means we'll recover all or none node blocks
+ * given fsync mark.
+ */
+ if (!atomic) {
+ ret = wait_on_node_pages_writeback(sbi, ino);
+ if (ret)
+ goto out;
+ }
/* once recovery info is written, don't need to tack this */
remove_ino_entry(sbi, ino, APPEND_INO);
@@ -382,7 +394,8 @@ static loff_t f2fs_seek_block(struct file *file, loff_t offset, int whence)
dn.ofs_in_node++, pgofs++,
data_ofs = (loff_t)pgofs << PAGE_SHIFT) {
block_t blkaddr;
- blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node);
+ blkaddr = datablock_addr(dn.inode,
+ dn.node_page, dn.ofs_in_node);
if (__found_offset(blkaddr, dirty, pgofs, whence)) {
f2fs_put_dnode(&dn);
@@ -467,9 +480,13 @@ int truncate_data_blocks_range(struct dnode_of_data *dn, int count)
struct f2fs_node *raw_node;
int nr_free = 0, ofs = dn->ofs_in_node, len = count;
__le32 *addr;
+ int base = 0;
+
+ if (IS_INODE(dn->node_page) && f2fs_has_extra_attr(dn->inode))
+ base = get_extra_isize(dn->inode);
raw_node = F2FS_NODE(dn->node_page);
- addr = blkaddr_in_node(raw_node) + ofs;
+ addr = blkaddr_in_node(raw_node) + base + ofs;
for (; count > 0; count--, addr++, dn->ofs_in_node++) {
block_t blkaddr = le32_to_cpu(*addr);
@@ -647,7 +664,7 @@ int f2fs_getattr(const struct path *path, struct kstat *stat,
struct f2fs_inode_info *fi = F2FS_I(inode);
unsigned int flags;
- flags = fi->i_flags & FS_FL_USER_VISIBLE;
+ flags = fi->i_flags & (FS_FL_USER_VISIBLE | FS_PROJINHERIT_FL);
if (flags & FS_APPEND_FL)
stat->attributes |= STATX_ATTR_APPEND;
if (flags & FS_COMPR_FL)
@@ -927,7 +944,8 @@ next_dnode:
done = min((pgoff_t)ADDRS_PER_PAGE(dn.node_page, inode) -
dn.ofs_in_node, len);
for (i = 0; i < done; i++, blkaddr++, do_replace++, dn.ofs_in_node++) {
- *blkaddr = datablock_addr(dn.node_page, dn.ofs_in_node);
+ *blkaddr = datablock_addr(dn.inode,
+ dn.node_page, dn.ofs_in_node);
if (!is_checkpointed_data(sbi, *blkaddr)) {
if (test_opt(sbi, LFS)) {
@@ -1003,8 +1021,8 @@ static int __clone_blkaddrs(struct inode *src_inode, struct inode *dst_inode,
ADDRS_PER_PAGE(dn.node_page, dst_inode) -
dn.ofs_in_node, len - i);
do {
- dn.data_blkaddr = datablock_addr(dn.node_page,
- dn.ofs_in_node);
+ dn.data_blkaddr = datablock_addr(dn.inode,
+ dn.node_page, dn.ofs_in_node);
truncate_data_blocks_range(&dn, 1);
if (do_replace[i]) {
@@ -1173,7 +1191,8 @@ static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
int ret;
for (; index < end; index++, dn->ofs_in_node++) {
- if (datablock_addr(dn->node_page, dn->ofs_in_node) == NULL_ADDR)
+ if (datablock_addr(dn->inode, dn->node_page,
+ dn->ofs_in_node) == NULL_ADDR)
count++;
}
@@ -1184,8 +1203,8 @@ static int f2fs_do_zero_range(struct dnode_of_data *dn, pgoff_t start,
dn->ofs_in_node = ofs_in_node;
for (index = start; index < end; index++, dn->ofs_in_node++) {
- dn->data_blkaddr =
- datablock_addr(dn->node_page, dn->ofs_in_node);
+ dn->data_blkaddr = datablock_addr(dn->inode,
+ dn->node_page, dn->ofs_in_node);
/*
* reserve_new_blocks will not guarantee entire block
* allocation.
@@ -1495,33 +1514,67 @@ static int f2fs_release_file(struct inode *inode, struct file *filp)
return 0;
}
-#define F2FS_REG_FLMASK (~(FS_DIRSYNC_FL | FS_TOPDIR_FL))
-#define F2FS_OTHER_FLMASK (FS_NODUMP_FL | FS_NOATIME_FL)
-
-static inline __u32 f2fs_mask_flags(umode_t mode, __u32 flags)
+static int f2fs_file_flush(struct file *file, fl_owner_t id)
{
- if (S_ISDIR(mode))
- return flags;
- else if (S_ISREG(mode))
- return flags & F2FS_REG_FLMASK;
- else
- return flags & F2FS_OTHER_FLMASK;
+ struct inode *inode = file_inode(file);
+
+ /*
+ * If the process doing a transaction is crashed, we should do
+ * roll-back. Otherwise, other reader/write can see corrupted database
+ * until all the writers close its file. Since this should be done
+ * before dropping file lock, it needs to do in ->flush.
+ */
+ if (f2fs_is_atomic_file(inode) &&
+ F2FS_I(inode)->inmem_task == current)
+ drop_inmem_pages(inode);
+ return 0;
}
static int f2fs_ioc_getflags(struct file *filp, unsigned long arg)
{
struct inode *inode = file_inode(filp);
struct f2fs_inode_info *fi = F2FS_I(inode);
- unsigned int flags = fi->i_flags & FS_FL_USER_VISIBLE;
+ unsigned int flags = fi->i_flags &
+ (FS_FL_USER_VISIBLE | FS_PROJINHERIT_FL);
return put_user(flags, (int __user *)arg);
}
+static int __f2fs_ioc_setflags(struct inode *inode, unsigned int flags)
+{
+ struct f2fs_inode_info *fi = F2FS_I(inode);
+ unsigned int oldflags;
+
+ /* Is it quota file? Do not allow user to mess with it */
+ if (IS_NOQUOTA(inode))
+ return -EPERM;
+
+ flags = f2fs_mask_flags(inode->i_mode, flags);
+
+ oldflags = fi->i_flags;
+
+ if ((flags ^ oldflags) & (FS_APPEND_FL | FS_IMMUTABLE_FL))
+ if (!capable(CAP_LINUX_IMMUTABLE))
+ return -EPERM;
+
+ flags = flags & (FS_FL_USER_MODIFIABLE | FS_PROJINHERIT_FL);
+ flags |= oldflags & ~(FS_FL_USER_MODIFIABLE | FS_PROJINHERIT_FL);
+ fi->i_flags = flags;
+
+ if (fi->i_flags & FS_PROJINHERIT_FL)
+ set_inode_flag(inode, FI_PROJ_INHERIT);
+ else
+ clear_inode_flag(inode, FI_PROJ_INHERIT);
+
+ inode->i_ctime = current_time(inode);
+ f2fs_set_inode_flags(inode);
+ f2fs_mark_inode_dirty_sync(inode, false);
+ return 0;
+}
+
static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
{
struct inode *inode = file_inode(filp);
- struct f2fs_inode_info *fi = F2FS_I(inode);
unsigned int flags;
- unsigned int oldflags;
int ret;
if (!inode_owner_or_capable(inode))
@@ -1536,31 +1589,8 @@ static int f2fs_ioc_setflags(struct file *filp, unsigned long arg)
inode_lock(inode);
- /* Is it quota file? Do not allow user to mess with it */
- if (IS_NOQUOTA(inode)) {
- ret = -EPERM;
- goto unlock_out;
- }
-
- flags = f2fs_mask_flags(inode->i_mode, flags);
-
- oldflags = fi->i_flags;
-
- if ((flags ^ oldflags) & (FS_APPEND_FL | FS_IMMUTABLE_FL)) {
- if (!capable(CAP_LINUX_IMMUTABLE)) {
- ret = -EPERM;
- goto unlock_out;
- }
- }
-
- flags = flags & FS_FL_USER_MODIFIABLE;
- flags |= oldflags & ~FS_FL_USER_MODIFIABLE;
- fi->i_flags = flags;
+ ret = __f2fs_ioc_setflags(inode, flags);
- inode->i_ctime = current_time(inode);
- f2fs_set_inode_flags(inode);
- f2fs_mark_inode_dirty_sync(inode, false);
-unlock_out:
inode_unlock(inode);
mnt_drop_write_file(filp);
return ret;
@@ -1610,10 +1640,12 @@ static int f2fs_ioc_start_atomic_write(struct file *filp)
ret = filemap_write_and_wait_range(inode->i_mapping, 0, LLONG_MAX);
if (ret) {
clear_inode_flag(inode, FI_ATOMIC_FILE);
+ clear_inode_flag(inode, FI_HOT_DATA);
goto out;
}
inc_stat:
+ F2FS_I(inode)->inmem_task = current;
stat_inc_atomic_write(inode);
stat_update_max_atomic_write(inode);
out:
@@ -1647,10 +1679,11 @@ static int f2fs_ioc_commit_atomic_write(struct file *filp)
ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 0, true);
if (!ret) {
clear_inode_flag(inode, FI_ATOMIC_FILE);
+ clear_inode_flag(inode, FI_HOT_DATA);
stat_dec_atomic_write(inode);
}
} else {
- ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 0, true);
+ ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 1, false);
}
err_out:
inode_unlock(inode);
@@ -1786,7 +1819,7 @@ static int f2fs_ioc_shutdown(struct file *filp, unsigned long arg)
f2fs_stop_checkpoint(sbi, false);
break;
case F2FS_GOING_DOWN_METAFLUSH:
- sync_meta_pages(sbi, META, LONG_MAX);
+ sync_meta_pages(sbi, META, LONG_MAX, FS_META_IO);
f2fs_stop_checkpoint(sbi, false);
break;
default:
@@ -2043,7 +2076,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
*/
while (map.m_lblk < pg_end) {
map.m_len = pg_end - map.m_lblk;
- err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_READ);
+ err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_DEFAULT);
if (err)
goto out;
@@ -2085,7 +2118,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi,
do_map:
map.m_len = pg_end - map.m_lblk;
- err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_READ);
+ err = f2fs_map_blocks(inode, &map, 0, F2FS_GET_BLOCK_DEFAULT);
if (err)
goto clear_out;
@@ -2384,6 +2417,210 @@ out:
return ret;
}
+static int f2fs_ioc_get_features(struct file *filp, unsigned long arg)
+{
+ struct inode *inode = file_inode(filp);
+ u32 sb_feature = le32_to_cpu(F2FS_I_SB(inode)->raw_super->feature);
+
+ /* Must validate to set it with SQLite behavior in Android. */
+ sb_feature |= F2FS_FEATURE_ATOMIC_WRITE;
+
+ return put_user(sb_feature, (u32 __user *)arg);
+}
+
+#ifdef CONFIG_QUOTA
+static int f2fs_ioc_setproject(struct file *filp, __u32 projid)
+{
+ struct inode *inode = file_inode(filp);
+ struct f2fs_inode_info *fi = F2FS_I(inode);
+ struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
+ struct super_block *sb = sbi->sb;
+ struct dquot *transfer_to[MAXQUOTAS] = {};
+ struct page *ipage;
+ kprojid_t kprojid;
+ int err;
+
+ if (!f2fs_sb_has_project_quota(sb)) {
+ if (projid != F2FS_DEF_PROJID)
+ return -EOPNOTSUPP;
+ else
+ return 0;
+ }
+
+ if (!f2fs_has_extra_attr(inode))
+ return -EOPNOTSUPP;
+
+ kprojid = make_kprojid(&init_user_ns, (projid_t)projid);
+
+ if (projid_eq(kprojid, F2FS_I(inode)->i_projid))
+ return 0;
+
+ err = mnt_want_write_file(filp);
+ if (err)
+ return err;
+
+ err = -EPERM;
+ inode_lock(inode);
+
+ /* Is it quota file? Do not allow user to mess with it */
+ if (IS_NOQUOTA(inode))
+ goto out_unlock;
+
+ ipage = get_node_page(sbi, inode->i_ino);
+ if (IS_ERR(ipage)) {
+ err = PTR_ERR(ipage);
+ goto out_unlock;
+ }
+
+ if (!F2FS_FITS_IN_INODE(F2FS_INODE(ipage), fi->i_extra_isize,
+ i_projid)) {
+ err = -EOVERFLOW;
+ f2fs_put_page(ipage, 1);
+ goto out_unlock;
+ }
+ f2fs_put_page(ipage, 1);
+
+ dquot_initialize(inode);
+
+ transfer_to[PRJQUOTA] = dqget(sb, make_kqid_projid(kprojid));
+ if (!IS_ERR(transfer_to[PRJQUOTA])) {
+ err = __dquot_transfer(inode, transfer_to);
+ dqput(transfer_to[PRJQUOTA]);
+ if (err)
+ goto out_dirty;
+ }
+
+ F2FS_I(inode)->i_projid = kprojid;
+ inode->i_ctime = current_time(inode);
+out_dirty:
+ f2fs_mark_inode_dirty_sync(inode, true);
+out_unlock:
+ inode_unlock(inode);
+ mnt_drop_write_file(filp);
+ return err;
+}
+#else
+static int f2fs_ioc_setproject(struct file *filp, __u32 projid)
+{
+ if (projid != F2FS_DEF_PROJID)
+ return -EOPNOTSUPP;
+ return 0;
+}
+#endif
+
+/* Transfer internal flags to xflags */
+static inline __u32 f2fs_iflags_to_xflags(unsigned long iflags)
+{
+ __u32 xflags = 0;
+
+ if (iflags & FS_SYNC_FL)
+ xflags |= FS_XFLAG_SYNC;
+ if (iflags & FS_IMMUTABLE_FL)
+ xflags |= FS_XFLAG_IMMUTABLE;
+ if (iflags & FS_APPEND_FL)
+ xflags |= FS_XFLAG_APPEND;
+ if (iflags & FS_NODUMP_FL)
+ xflags |= FS_XFLAG_NODUMP;
+ if (iflags & FS_NOATIME_FL)
+ xflags |= FS_XFLAG_NOATIME;
+ if (iflags & FS_PROJINHERIT_FL)
+ xflags |= FS_XFLAG_PROJINHERIT;
+ return xflags;
+}
+
+#define F2FS_SUPPORTED_FS_XFLAGS (FS_XFLAG_SYNC | FS_XFLAG_IMMUTABLE | \
+ FS_XFLAG_APPEND | FS_XFLAG_NODUMP | \
+ FS_XFLAG_NOATIME | FS_XFLAG_PROJINHERIT)
+
+/* Flags we can manipulate with through EXT4_IOC_FSSETXATTR */
+#define F2FS_FL_XFLAG_VISIBLE (FS_SYNC_FL | \
+ FS_IMMUTABLE_FL | \
+ FS_APPEND_FL | \
+ FS_NODUMP_FL | \
+ FS_NOATIME_FL | \
+ FS_PROJINHERIT_FL)
+
+/* Transfer xflags flags to internal */
+static inline unsigned long f2fs_xflags_to_iflags(__u32 xflags)
+{
+ unsigned long iflags = 0;
+
+ if (xflags & FS_XFLAG_SYNC)
+ iflags |= FS_SYNC_FL;
+ if (xflags & FS_XFLAG_IMMUTABLE)
+ iflags |= FS_IMMUTABLE_FL;
+ if (xflags & FS_XFLAG_APPEND)
+ iflags |= FS_APPEND_FL;
+ if (xflags & FS_XFLAG_NODUMP)
+ iflags |= FS_NODUMP_FL;
+ if (xflags & FS_XFLAG_NOATIME)
+ iflags |= FS_NOATIME_FL;
+ if (xflags & FS_XFLAG_PROJINHERIT)
+ iflags |= FS_PROJINHERIT_FL;
+
+ return iflags;
+}
+
+static int f2fs_ioc_fsgetxattr(struct file *filp, unsigned long arg)
+{
+ struct inode *inode = file_inode(filp);
+ struct f2fs_inode_info *fi = F2FS_I(inode);
+ struct fsxattr fa;
+
+ memset(&fa, 0, sizeof(struct fsxattr));
+ fa.fsx_xflags = f2fs_iflags_to_xflags(fi->i_flags &
+ (FS_FL_USER_VISIBLE | FS_PROJINHERIT_FL));
+
+ if (f2fs_sb_has_project_quota(inode->i_sb))
+ fa.fsx_projid = (__u32)from_kprojid(&init_user_ns,
+ fi->i_projid);
+
+ if (copy_to_user((struct fsxattr __user *)arg, &fa, sizeof(fa)))
+ return -EFAULT;
+ return 0;
+}
+
+static int f2fs_ioc_fssetxattr(struct file *filp, unsigned long arg)
+{
+ struct inode *inode = file_inode(filp);
+ struct f2fs_inode_info *fi = F2FS_I(inode);
+ struct fsxattr fa;
+ unsigned int flags;
+ int err;
+
+ if (copy_from_user(&fa, (struct fsxattr __user *)arg, sizeof(fa)))
+ return -EFAULT;
+
+ /* Make sure caller has proper permission */
+ if (!inode_owner_or_capable(inode))
+ return -EACCES;
+
+ if (fa.fsx_xflags & ~F2FS_SUPPORTED_FS_XFLAGS)
+ return -EOPNOTSUPP;
+
+ flags = f2fs_xflags_to_iflags(fa.fsx_xflags);
+ if (f2fs_mask_flags(inode->i_mode, flags) != flags)
+ return -EOPNOTSUPP;
+
+ err = mnt_want_write_file(filp);
+ if (err)
+ return err;
+
+ inode_lock(inode);
+ flags = (fi->i_flags & ~F2FS_FL_XFLAG_VISIBLE) |
+ (flags & F2FS_FL_XFLAG_VISIBLE);
+ err = __f2fs_ioc_setflags(inode, flags);
+ inode_unlock(inode);
+ mnt_drop_write_file(filp);
+ if (err)
+ return err;
+
+ err = f2fs_ioc_setproject(filp, fa.fsx_projid);
+ if (err)
+ return err;
+
+ return 0;
+}
long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
@@ -2426,6 +2663,12 @@ long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
return f2fs_ioc_move_range(filp, arg);
case F2FS_IOC_FLUSH_DEVICE:
return f2fs_ioc_flush_device(filp, arg);
+ case F2FS_IOC_GET_FEATURES:
+ return f2fs_ioc_get_features(filp, arg);
+ case F2FS_IOC_FSGETXATTR:
+ return f2fs_ioc_fsgetxattr(filp, arg);
+ case F2FS_IOC_FSSETXATTR:
+ return f2fs_ioc_fssetxattr(filp, arg);
default:
return -ENOTTY;
}
@@ -2455,6 +2698,9 @@ static ssize_t f2fs_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
ret = __generic_file_write_iter(iocb, from);
blk_finish_plug(&plug);
clear_inode_flag(inode, FI_NO_PREALLOC);
+
+ if (ret > 0)
+ f2fs_update_iostat(F2FS_I_SB(inode), APP_WRITE_IO, ret);
}
inode_unlock(inode);
@@ -2491,6 +2737,9 @@ long f2fs_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
case F2FS_IOC_DEFRAGMENT:
case F2FS_IOC_MOVE_RANGE:
case F2FS_IOC_FLUSH_DEVICE:
+ case F2FS_IOC_GET_FEATURES:
+ case F2FS_IOC_FSGETXATTR:
+ case F2FS_IOC_FSSETXATTR:
break;
default:
return -ENOIOCTLCMD;
@@ -2506,6 +2755,7 @@ const struct file_operations f2fs_file_operations = {
.open = f2fs_file_open,
.release = f2fs_release_file,
.mmap = f2fs_file_mmap,
+ .flush = f2fs_file_flush,
.fsync = f2fs_sync_file,
.fallocate = f2fs_fallocate,
.unlocked_ioctl = f2fs_ioctl,
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index fa3d2e2df8e7..bfe6a8ccc3a0 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -28,16 +28,21 @@ static int gc_thread_func(void *data)
struct f2fs_sb_info *sbi = data;
struct f2fs_gc_kthread *gc_th = sbi->gc_thread;
wait_queue_head_t *wq = &sbi->gc_thread->gc_wait_queue_head;
- long wait_ms;
+ unsigned int wait_ms;
wait_ms = gc_th->min_sleep_time;
set_freezable();
do {
wait_event_interruptible_timeout(*wq,
- kthread_should_stop() || freezing(current),
+ kthread_should_stop() || freezing(current) ||
+ gc_th->gc_wake,
msecs_to_jiffies(wait_ms));
+ /* give it a try one time */
+ if (gc_th->gc_wake)
+ gc_th->gc_wake = 0;
+
if (try_to_freeze())
continue;
if (kthread_should_stop())
@@ -55,6 +60,9 @@ static int gc_thread_func(void *data)
}
#endif
+ if (!sb_start_write_trylock(sbi->sb))
+ continue;
+
/*
* [GC triggering condition]
* 0. GC is not conducted currently.
@@ -69,19 +77,24 @@ static int gc_thread_func(void *data)
* So, I'd like to wait some time to collect dirty segments.
*/
if (!mutex_trylock(&sbi->gc_mutex))
- continue;
+ goto next;
+
+ if (gc_th->gc_urgent) {
+ wait_ms = gc_th->urgent_sleep_time;
+ goto do_gc;
+ }
if (!is_idle(sbi)) {
increase_sleep_time(gc_th, &wait_ms);
mutex_unlock(&sbi->gc_mutex);
- continue;
+ goto next;
}
if (has_enough_invalid_blocks(sbi))
decrease_sleep_time(gc_th, &wait_ms);
else
increase_sleep_time(gc_th, &wait_ms);
-
+do_gc:
stat_inc_bggc_count(sbi);
/* if return value is not zero, no victim was selected */
@@ -93,6 +106,8 @@ static int gc_thread_func(void *data)
/* balancing f2fs's metadata periodically */
f2fs_balance_fs_bg(sbi);
+next:
+ sb_end_write(sbi->sb);
} while (!kthread_should_stop());
return 0;
@@ -110,11 +125,14 @@ int start_gc_thread(struct f2fs_sb_info *sbi)
goto out;
}
+ gc_th->urgent_sleep_time = DEF_GC_THREAD_URGENT_SLEEP_TIME;
gc_th->min_sleep_time = DEF_GC_THREAD_MIN_SLEEP_TIME;
gc_th->max_sleep_time = DEF_GC_THREAD_MAX_SLEEP_TIME;
gc_th->no_gc_sleep_time = DEF_GC_THREAD_NOGC_SLEEP_TIME;
gc_th->gc_idle = 0;
+ gc_th->gc_urgent = 0;
+ gc_th->gc_wake= 0;
sbi->gc_thread = gc_th;
init_waitqueue_head(&sbi->gc_thread->gc_wait_queue_head);
@@ -259,20 +277,11 @@ static unsigned int get_greedy_cost(struct f2fs_sb_info *sbi,
valid_blocks * 2 : valid_blocks;
}
-static unsigned int get_ssr_cost(struct f2fs_sb_info *sbi,
- unsigned int segno)
-{
- struct seg_entry *se = get_seg_entry(sbi, segno);
-
- return se->ckpt_valid_blocks > se->valid_blocks ?
- se->ckpt_valid_blocks : se->valid_blocks;
-}
-
static inline unsigned int get_gc_cost(struct f2fs_sb_info *sbi,
unsigned int segno, struct victim_sel_policy *p)
{
if (p->alloc_mode == SSR)
- return get_ssr_cost(sbi, segno);
+ return get_seg_entry(sbi, segno)->ckpt_valid_blocks;
/* alloc_mode == LFS */
if (p->gc_mode == GC_GREEDY)
@@ -582,7 +591,7 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
}
*nofs = ofs_of_node(node_page);
- source_blkaddr = datablock_addr(node_page, ofs_in_node);
+ source_blkaddr = datablock_addr(NULL, node_page, ofs_in_node);
f2fs_put_page(node_page, 1);
if (source_blkaddr != blkaddr)
@@ -590,8 +599,12 @@ static bool is_alive(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
return true;
}
-static void move_encrypted_block(struct inode *inode, block_t bidx,
- unsigned int segno, int off)
+/*
+ * Move data block via META_MAPPING while keeping locked data page.
+ * This can be used to move blocks, aka LBAs, directly on disk.
+ */
+static void move_data_block(struct inode *inode, block_t bidx,
+ unsigned int segno, int off)
{
struct f2fs_io_info fio = {
.sbi = F2FS_I_SB(inode),
@@ -684,6 +697,8 @@ static void move_encrypted_block(struct inode *inode, block_t bidx,
fio.new_blkaddr = newaddr;
f2fs_submit_page_write(&fio);
+ f2fs_update_iostat(fio.sbi, FS_GC_DATA_IO, F2FS_BLKSIZE);
+
f2fs_update_data_blkaddr(&dn, newaddr);
set_inode_flag(inode, FI_APPEND_WRITE);
if (page->index == 0)
@@ -731,6 +746,7 @@ static void move_data_page(struct inode *inode, block_t bidx, int gc_type,
.page = page,
.encrypted_page = NULL,
.need_lock = LOCK_REQ,
+ .io_type = FS_GC_DATA_IO,
};
bool is_dirty = PageDirty(page);
int err;
@@ -819,8 +835,7 @@ next_step:
continue;
/* if encrypted inode, let's go phase 3 */
- if (f2fs_encrypted_inode(inode) &&
- S_ISREG(inode->i_mode)) {
+ if (f2fs_encrypted_file(inode)) {
add_gc_inode(gc_list, inode);
continue;
}
@@ -854,14 +869,18 @@ next_step:
continue;
}
locked = true;
+
+ /* wait for all inflight aio data */
+ inode_dio_wait(inode);
}
start_bidx = start_bidx_of_node(nofs, inode)
+ ofs_in_node;
- if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
- move_encrypted_block(inode, start_bidx, segno, off);
+ if (f2fs_encrypted_file(inode))
+ move_data_block(inode, start_bidx, segno, off);
else
- move_data_page(inode, start_bidx, gc_type, segno, off);
+ move_data_page(inode, start_bidx, gc_type,
+ segno, off);
if (locked) {
up_write(&fi->dio_rwsem[WRITE]);
@@ -898,7 +917,7 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
struct blk_plug plug;
unsigned int segno = start_segno;
unsigned int end_segno = start_segno + sbi->segs_per_sec;
- int sec_freed = 0;
+ int seg_freed = 0;
unsigned char type = IS_DATASEG(get_seg_entry(sbi, segno)->type) ?
SUM_TYPE_DATA : SUM_TYPE_NODE;
@@ -944,6 +963,10 @@ static int do_garbage_collect(struct f2fs_sb_info *sbi,
gc_type);
stat_inc_seg_count(sbi, type, gc_type);
+
+ if (gc_type == FG_GC &&
+ get_valid_blocks(sbi, segno, false) == 0)
+ seg_freed++;
next:
f2fs_put_page(sum_page, 0);
}
@@ -954,21 +977,17 @@ next:
blk_finish_plug(&plug);
- if (gc_type == FG_GC &&
- get_valid_blocks(sbi, start_segno, true) == 0)
- sec_freed = 1;
-
stat_inc_call_count(sbi->stat_info);
- return sec_freed;
+ return seg_freed;
}
int f2fs_gc(struct f2fs_sb_info *sbi, bool sync,
bool background, unsigned int segno)
{
int gc_type = sync ? FG_GC : BG_GC;
- int sec_freed = 0;
- int ret;
+ int sec_freed = 0, seg_freed = 0, total_freed = 0;
+ int ret = 0;
struct cp_control cpc;
unsigned int init_segno = segno;
struct gc_inode_list gc_list = {
@@ -976,6 +995,15 @@ int f2fs_gc(struct f2fs_sb_info *sbi, bool sync,
.iroot = RADIX_TREE_INIT(GFP_NOFS),
};
+ trace_f2fs_gc_begin(sbi->sb, sync, background,
+ get_pages(sbi, F2FS_DIRTY_NODES),
+ get_pages(sbi, F2FS_DIRTY_DENTS),
+ get_pages(sbi, F2FS_DIRTY_IMETA),
+ free_sections(sbi),
+ free_segments(sbi),
+ reserved_segments(sbi),
+ prefree_segments(sbi));
+
cpc.reason = __get_cp_reason(sbi);
gc_more:
if (unlikely(!(sbi->sb->s_flags & MS_ACTIVE))) {
@@ -1002,17 +1030,20 @@ gc_more:
gc_type = FG_GC;
}
- ret = -EINVAL;
/* f2fs_balance_fs doesn't need to do BG_GC in critical path. */
- if (gc_type == BG_GC && !background)
+ if (gc_type == BG_GC && !background) {
+ ret = -EINVAL;
goto stop;
- if (!__get_victim(sbi, &segno, gc_type))
+ }
+ if (!__get_victim(sbi, &segno, gc_type)) {
+ ret = -ENODATA;
goto stop;
- ret = 0;
+ }
- if (do_garbage_collect(sbi, segno, &gc_list, gc_type) &&
- gc_type == FG_GC)
+ seg_freed = do_garbage_collect(sbi, segno, &gc_list, gc_type);
+ if (gc_type == FG_GC && seg_freed == sbi->segs_per_sec)
sec_freed++;
+ total_freed += seg_freed;
if (gc_type == FG_GC)
sbi->cur_victim_sec = NULL_SEGNO;
@@ -1029,6 +1060,16 @@ gc_more:
stop:
SIT_I(sbi)->last_victim[ALLOC_NEXT] = 0;
SIT_I(sbi)->last_victim[FLUSH_DEVICE] = init_segno;
+
+ trace_f2fs_gc_end(sbi->sb, ret, total_freed, sec_freed,
+ get_pages(sbi, F2FS_DIRTY_NODES),
+ get_pages(sbi, F2FS_DIRTY_DENTS),
+ get_pages(sbi, F2FS_DIRTY_IMETA),
+ free_sections(sbi),
+ free_segments(sbi),
+ reserved_segments(sbi),
+ prefree_segments(sbi));
+
mutex_unlock(&sbi->gc_mutex);
put_gc_inode(&gc_list);
diff --git a/fs/f2fs/gc.h b/fs/f2fs/gc.h
index a993967dcdb9..9325191fab2d 100644
--- a/fs/f2fs/gc.h
+++ b/fs/f2fs/gc.h
@@ -13,6 +13,7 @@
* whether IO subsystem is idle
* or not
*/
+#define DEF_GC_THREAD_URGENT_SLEEP_TIME 500 /* 500 ms */
#define DEF_GC_THREAD_MIN_SLEEP_TIME 30000 /* milliseconds */
#define DEF_GC_THREAD_MAX_SLEEP_TIME 60000
#define DEF_GC_THREAD_NOGC_SLEEP_TIME 300000 /* wait 5 min */
@@ -27,12 +28,15 @@ struct f2fs_gc_kthread {
wait_queue_head_t gc_wait_queue_head;
/* for gc sleep time */
+ unsigned int urgent_sleep_time;
unsigned int min_sleep_time;
unsigned int max_sleep_time;
unsigned int no_gc_sleep_time;
/* for changing gc mode */
unsigned int gc_idle;
+ unsigned int gc_urgent;
+ unsigned int gc_wake;
};
struct gc_inode_list {
@@ -65,25 +69,32 @@ static inline block_t limit_free_user_blocks(struct f2fs_sb_info *sbi)
}
static inline void increase_sleep_time(struct f2fs_gc_kthread *gc_th,
- long *wait)
+ unsigned int *wait)
{
+ unsigned int min_time = gc_th->min_sleep_time;
+ unsigned int max_time = gc_th->max_sleep_time;
+
if (*wait == gc_th->no_gc_sleep_time)
return;
- *wait += gc_th->min_sleep_time;
- if (*wait > gc_th->max_sleep_time)
- *wait = gc_th->max_sleep_time;
+ if ((long long)*wait + (long long)min_time > (long long)max_time)
+ *wait = max_time;
+ else
+ *wait += min_time;
}
static inline void decrease_sleep_time(struct f2fs_gc_kthread *gc_th,
- long *wait)
+ unsigned int *wait)
{
+ unsigned int min_time = gc_th->min_sleep_time;
+
if (*wait == gc_th->no_gc_sleep_time)
*wait = gc_th->max_sleep_time;
- *wait -= gc_th->min_sleep_time;
- if (*wait <= gc_th->min_sleep_time)
- *wait = gc_th->min_sleep_time;
+ if ((long long)*wait - (long long)min_time < (long long)min_time)
+ *wait = min_time;
+ else
+ *wait -= min_time;
}
static inline bool has_enough_invalid_blocks(struct f2fs_sb_info *sbi)
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index e0fd4376e6fb..8322e4e7bb3f 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -22,10 +22,10 @@ bool f2fs_may_inline_data(struct inode *inode)
if (!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode))
return false;
- if (i_size_read(inode) > MAX_INLINE_DATA)
+ if (i_size_read(inode) > MAX_INLINE_DATA(inode))
return false;
- if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode))
+ if (f2fs_encrypted_file(inode))
return false;
return true;
@@ -44,6 +44,7 @@ bool f2fs_may_inline_dentry(struct inode *inode)
void read_inline_data(struct page *page, struct page *ipage)
{
+ struct inode *inode = page->mapping->host;
void *src_addr, *dst_addr;
if (PageUptodate(page))
@@ -51,12 +52,12 @@ void read_inline_data(struct page *page, struct page *ipage)
f2fs_bug_on(F2FS_P_SB(page), page->index);
- zero_user_segment(page, MAX_INLINE_DATA, PAGE_SIZE);
+ zero_user_segment(page, MAX_INLINE_DATA(inode), PAGE_SIZE);
/* Copy the whole inline data block */
- src_addr = inline_data_addr(ipage);
+ src_addr = inline_data_addr(inode, ipage);
dst_addr = kmap_atomic(page);
- memcpy(dst_addr, src_addr, MAX_INLINE_DATA);
+ memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
flush_dcache_page(page);
kunmap_atomic(dst_addr);
if (!PageUptodate(page))
@@ -67,13 +68,13 @@ void truncate_inline_inode(struct inode *inode, struct page *ipage, u64 from)
{
void *addr;
- if (from >= MAX_INLINE_DATA)
+ if (from >= MAX_INLINE_DATA(inode))
return;
- addr = inline_data_addr(ipage);
+ addr = inline_data_addr(inode, ipage);
f2fs_wait_on_page_writeback(ipage, NODE, true);
- memset(addr + from, 0, MAX_INLINE_DATA - from);
+ memset(addr + from, 0, MAX_INLINE_DATA(inode) - from);
set_page_dirty(ipage);
if (from == 0)
@@ -116,6 +117,7 @@ int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
.op_flags = REQ_SYNC | REQ_PRIO,
.page = page,
.encrypted_page = NULL,
+ .io_type = FS_DATA_IO,
};
int dirty, err;
@@ -200,6 +202,8 @@ int f2fs_write_inline_data(struct inode *inode, struct page *page)
{
void *src_addr, *dst_addr;
struct dnode_of_data dn;
+ struct address_space *mapping = page_mapping(page);
+ unsigned long flags;
int err;
set_new_dnode(&dn, inode, NULL, NULL, 0);
@@ -216,11 +220,16 @@ int f2fs_write_inline_data(struct inode *inode, struct page *page)
f2fs_wait_on_page_writeback(dn.inode_page, NODE, true);
src_addr = kmap_atomic(page);
- dst_addr = inline_data_addr(dn.inode_page);
- memcpy(dst_addr, src_addr, MAX_INLINE_DATA);
+ dst_addr = inline_data_addr(inode, dn.inode_page);
+ memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
kunmap_atomic(src_addr);
set_page_dirty(dn.inode_page);
+ spin_lock_irqsave(&mapping->tree_lock, flags);
+ radix_tree_tag_clear(&mapping->page_tree, page_index(page),
+ PAGECACHE_TAG_DIRTY);
+ spin_unlock_irqrestore(&mapping->tree_lock, flags);
+
set_inode_flag(inode, FI_APPEND_WRITE);
set_inode_flag(inode, FI_DATA_EXIST);
@@ -255,9 +264,9 @@ process_inline:
f2fs_wait_on_page_writeback(ipage, NODE, true);
- src_addr = inline_data_addr(npage);
- dst_addr = inline_data_addr(ipage);
- memcpy(dst_addr, src_addr, MAX_INLINE_DATA);
+ src_addr = inline_data_addr(inode, npage);
+ dst_addr = inline_data_addr(inode, ipage);
+ memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
set_inode_flag(inode, FI_INLINE_DATA);
set_inode_flag(inode, FI_DATA_EXIST);
@@ -285,11 +294,11 @@ struct f2fs_dir_entry *find_in_inline_dir(struct inode *dir,
struct fscrypt_name *fname, struct page **res_page)
{
struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
- struct f2fs_inline_dentry *inline_dentry;
struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
struct f2fs_dir_entry *de;
struct f2fs_dentry_ptr d;
struct page *ipage;
+ void *inline_dentry;
f2fs_hash_t namehash;
ipage = get_node_page(sbi, dir->i_ino);
@@ -300,9 +309,9 @@ struct f2fs_dir_entry *find_in_inline_dir(struct inode *dir,
namehash = f2fs_dentry_hash(&name, fname);
- inline_dentry = inline_data_addr(ipage);
+ inline_dentry = inline_data_addr(dir, ipage);
- make_dentry_ptr_inline(NULL, &d, inline_dentry);
+ make_dentry_ptr_inline(dir, &d, inline_dentry);
de = find_target_dentry(fname, namehash, NULL, &d);
unlock_page(ipage);
if (de)
@@ -316,19 +325,19 @@ struct f2fs_dir_entry *find_in_inline_dir(struct inode *dir,
int make_empty_inline_dir(struct inode *inode, struct inode *parent,
struct page *ipage)
{
- struct f2fs_inline_dentry *inline_dentry;
struct f2fs_dentry_ptr d;
+ void *inline_dentry;
- inline_dentry = inline_data_addr(ipage);
+ inline_dentry = inline_data_addr(inode, ipage);
- make_dentry_ptr_inline(NULL, &d, inline_dentry);
+ make_dentry_ptr_inline(inode, &d, inline_dentry);
do_make_empty_dir(inode, parent, &d);
set_page_dirty(ipage);
/* update i_size to MAX_INLINE_DATA */
- if (i_size_read(inode) < MAX_INLINE_DATA)
- f2fs_i_size_write(inode, MAX_INLINE_DATA);
+ if (i_size_read(inode) < MAX_INLINE_DATA(inode))
+ f2fs_i_size_write(inode, MAX_INLINE_DATA(inode));
return 0;
}
@@ -337,11 +346,12 @@ int make_empty_inline_dir(struct inode *inode, struct inode *parent,
* release ipage in this function.
*/
static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
- struct f2fs_inline_dentry *inline_dentry)
+ void *inline_dentry)
{
struct page *page;
struct dnode_of_data dn;
struct f2fs_dentry_block *dentry_blk;
+ struct f2fs_dentry_ptr src, dst;
int err;
page = f2fs_grab_cache_page(dir->i_mapping, 0, false);
@@ -356,25 +366,24 @@ static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
goto out;
f2fs_wait_on_page_writeback(page, DATA, true);
- zero_user_segment(page, MAX_INLINE_DATA, PAGE_SIZE);
+ zero_user_segment(page, MAX_INLINE_DATA(dir), PAGE_SIZE);
dentry_blk = kmap_atomic(page);
+ make_dentry_ptr_inline(dir, &src, inline_dentry);
+ make_dentry_ptr_block(dir, &dst, dentry_blk);
+
/* copy data from inline dentry block to new dentry block */
- memcpy(dentry_blk->dentry_bitmap, inline_dentry->dentry_bitmap,
- INLINE_DENTRY_BITMAP_SIZE);
- memset(dentry_blk->dentry_bitmap + INLINE_DENTRY_BITMAP_SIZE, 0,
- SIZE_OF_DENTRY_BITMAP - INLINE_DENTRY_BITMAP_SIZE);
+ memcpy(dst.bitmap, src.bitmap, src.nr_bitmap);
+ memset(dst.bitmap + src.nr_bitmap, 0, dst.nr_bitmap - src.nr_bitmap);
/*
* we do not need to zero out remainder part of dentry and filename
* field, since we have used bitmap for marking the usage status of
* them, besides, we can also ignore copying/zeroing reserved space
* of dentry block, because them haven't been used so far.
*/
- memcpy(dentry_blk->dentry, inline_dentry->dentry,
- sizeof(struct f2fs_dir_entry) * NR_INLINE_DENTRY);
- memcpy(dentry_blk->filename, inline_dentry->filename,
- NR_INLINE_DENTRY * F2FS_SLOT_LEN);
+ memcpy(dst.dentry, src.dentry, SIZE_OF_DIR_ENTRY * src.max);
+ memcpy(dst.filename, src.filename, src.max * F2FS_SLOT_LEN);
kunmap_atomic(dentry_blk);
if (!PageUptodate(page))
@@ -395,14 +404,13 @@ out:
return err;
}
-static int f2fs_add_inline_entries(struct inode *dir,
- struct f2fs_inline_dentry *inline_dentry)
+static int f2fs_add_inline_entries(struct inode *dir, void *inline_dentry)
{
struct f2fs_dentry_ptr d;
unsigned long bit_pos = 0;
int err = 0;
- make_dentry_ptr_inline(NULL, &d, inline_dentry);
+ make_dentry_ptr_inline(dir, &d, inline_dentry);
while (bit_pos < d.max) {
struct f2fs_dir_entry *de;
@@ -444,19 +452,19 @@ punch_dentry_pages:
}
static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
- struct f2fs_inline_dentry *inline_dentry)
+ void *inline_dentry)
{
- struct f2fs_inline_dentry *backup_dentry;
+ void *backup_dentry;
int err;
backup_dentry = f2fs_kmalloc(F2FS_I_SB(dir),
- sizeof(struct f2fs_inline_dentry), GFP_F2FS_ZERO);
+ MAX_INLINE_DATA(dir), GFP_F2FS_ZERO);
if (!backup_dentry) {
f2fs_put_page(ipage, 1);
return -ENOMEM;
}
- memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA);
+ memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA(dir));
truncate_inline_inode(dir, ipage, 0);
unlock_page(ipage);
@@ -473,9 +481,9 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
return 0;
recover:
lock_page(ipage);
- memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA);
+ memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA(dir));
f2fs_i_depth_write(dir, 0);
- f2fs_i_size_write(dir, MAX_INLINE_DATA);
+ f2fs_i_size_write(dir, MAX_INLINE_DATA(dir));
set_page_dirty(ipage);
f2fs_put_page(ipage, 1);
@@ -484,7 +492,7 @@ recover:
}
static int f2fs_convert_inline_dir(struct inode *dir, struct page *ipage,
- struct f2fs_inline_dentry *inline_dentry)
+ void *inline_dentry)
{
if (!F2FS_I(dir)->i_dir_level)
return f2fs_move_inline_dirents(dir, ipage, inline_dentry);
@@ -500,7 +508,7 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
struct page *ipage;
unsigned int bit_pos;
f2fs_hash_t name_hash;
- struct f2fs_inline_dentry *inline_dentry = NULL;
+ void *inline_dentry = NULL;
struct f2fs_dentry_ptr d;
int slots = GET_DENTRY_SLOTS(new_name->len);
struct page *page = NULL;
@@ -510,10 +518,11 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
if (IS_ERR(ipage))
return PTR_ERR(ipage);
- inline_dentry = inline_data_addr(ipage);
- bit_pos = room_for_filename(&inline_dentry->dentry_bitmap,
- slots, NR_INLINE_DENTRY);
- if (bit_pos >= NR_INLINE_DENTRY) {
+ inline_dentry = inline_data_addr(dir, ipage);
+ make_dentry_ptr_inline(dir, &d, inline_dentry);
+
+ bit_pos = room_for_filename(d.bitmap, slots, d.max);
+ if (bit_pos >= d.max) {
err = f2fs_convert_inline_dir(dir, ipage, inline_dentry);
if (err)
return err;
@@ -534,7 +543,6 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
f2fs_wait_on_page_writeback(ipage, NODE, true);
name_hash = f2fs_dentry_hash(new_name, NULL);
- make_dentry_ptr_inline(NULL, &d, inline_dentry);
f2fs_update_dentry(ino, mode, &d, new_name, name_hash, bit_pos);
set_page_dirty(ipage);
@@ -557,7 +565,8 @@ out:
void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
struct inode *dir, struct inode *inode)
{
- struct f2fs_inline_dentry *inline_dentry;
+ struct f2fs_dentry_ptr d;
+ void *inline_dentry;
int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
unsigned int bit_pos;
int i;
@@ -565,11 +574,12 @@ void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
lock_page(page);
f2fs_wait_on_page_writeback(page, NODE, true);
- inline_dentry = inline_data_addr(page);
- bit_pos = dentry - inline_dentry->dentry;
+ inline_dentry = inline_data_addr(dir, page);
+ make_dentry_ptr_inline(dir, &d, inline_dentry);
+
+ bit_pos = dentry - d.dentry;
for (i = 0; i < slots; i++)
- __clear_bit_le(bit_pos + i,
- &inline_dentry->dentry_bitmap);
+ __clear_bit_le(bit_pos + i, d.bitmap);
set_page_dirty(page);
f2fs_put_page(page, 1);
@@ -586,20 +596,21 @@ bool f2fs_empty_inline_dir(struct inode *dir)
struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
struct page *ipage;
unsigned int bit_pos = 2;
- struct f2fs_inline_dentry *inline_dentry;
+ void *inline_dentry;
+ struct f2fs_dentry_ptr d;
ipage = get_node_page(sbi, dir->i_ino);
if (IS_ERR(ipage))
return false;
- inline_dentry = inline_data_addr(ipage);
- bit_pos = find_next_bit_le(&inline_dentry->dentry_bitmap,
- NR_INLINE_DENTRY,
- bit_pos);
+ inline_dentry = inline_data_addr(dir, ipage);
+ make_dentry_ptr_inline(dir, &d, inline_dentry);
+
+ bit_pos = find_next_bit_le(d.bitmap, d.max, bit_pos);
f2fs_put_page(ipage, 1);
- if (bit_pos < NR_INLINE_DENTRY)
+ if (bit_pos < d.max)
return false;
return true;
@@ -609,25 +620,27 @@ int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
struct fscrypt_str *fstr)
{
struct inode *inode = file_inode(file);
- struct f2fs_inline_dentry *inline_dentry = NULL;
struct page *ipage = NULL;
struct f2fs_dentry_ptr d;
+ void *inline_dentry = NULL;
int err;
- if (ctx->pos == NR_INLINE_DENTRY)
+ make_dentry_ptr_inline(inode, &d, inline_dentry);
+
+ if (ctx->pos == d.max)
return 0;
ipage = get_node_page(F2FS_I_SB(inode), inode->i_ino);
if (IS_ERR(ipage))
return PTR_ERR(ipage);
- inline_dentry = inline_data_addr(ipage);
+ inline_dentry = inline_data_addr(inode, ipage);
make_dentry_ptr_inline(inode, &d, inline_dentry);
err = f2fs_fill_dentries(ctx, &d, 0, fstr);
if (!err)
- ctx->pos = NR_INLINE_DENTRY;
+ ctx->pos = d.max;
f2fs_put_page(ipage, 1);
return err < 0 ? err : 0;
@@ -652,7 +665,7 @@ int f2fs_inline_data_fiemap(struct inode *inode,
goto out;
}
- ilen = min_t(size_t, MAX_INLINE_DATA, i_size_read(inode));
+ ilen = min_t(size_t, MAX_INLINE_DATA(inode), i_size_read(inode));
if (start >= ilen)
goto out;
if (start + len < ilen)
@@ -661,7 +674,8 @@ int f2fs_inline_data_fiemap(struct inode *inode,
get_node_info(F2FS_I_SB(inode), inode->i_ino, &ni);
byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits;
- byteaddr += (char *)inline_data_addr(ipage) - (char *)F2FS_INODE(ipage);
+ byteaddr += (char *)inline_data_addr(inode, ipage) -
+ (char *)F2FS_INODE(ipage);
err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags);
out:
f2fs_put_page(ipage, 1);
diff --git a/fs/f2fs/inode.c b/fs/f2fs/inode.c
index 6cd312a17c69..50c88e37ed66 100644
--- a/fs/f2fs/inode.c
+++ b/fs/f2fs/inode.c
@@ -49,20 +49,22 @@ void f2fs_set_inode_flags(struct inode *inode)
static void __get_inode_rdev(struct inode *inode, struct f2fs_inode *ri)
{
+ int extra_size = get_extra_isize(inode);
+
if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode) ||
S_ISFIFO(inode->i_mode) || S_ISSOCK(inode->i_mode)) {
- if (ri->i_addr[0])
- inode->i_rdev =
- old_decode_dev(le32_to_cpu(ri->i_addr[0]));
+ if (ri->i_addr[extra_size])
+ inode->i_rdev = old_decode_dev(
+ le32_to_cpu(ri->i_addr[extra_size]));
else
- inode->i_rdev =
- new_decode_dev(le32_to_cpu(ri->i_addr[1]));
+ inode->i_rdev = new_decode_dev(
+ le32_to_cpu(ri->i_addr[extra_size + 1]));
}
}
static bool __written_first_block(struct f2fs_inode *ri)
{
- block_t addr = le32_to_cpu(ri->i_addr[0]);
+ block_t addr = le32_to_cpu(ri->i_addr[offset_in_addr(ri)]);
if (addr != NEW_ADDR && addr != NULL_ADDR)
return true;
@@ -71,25 +73,27 @@ static bool __written_first_block(struct f2fs_inode *ri)
static void __set_inode_rdev(struct inode *inode, struct f2fs_inode *ri)
{
+ int extra_size = get_extra_isize(inode);
+
if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) {
if (old_valid_dev(inode->i_rdev)) {
- ri->i_addr[0] =
+ ri->i_addr[extra_size] =
cpu_to_le32(old_encode_dev(inode->i_rdev));
- ri->i_addr[1] = 0;
+ ri->i_addr[extra_size + 1] = 0;
} else {
- ri->i_addr[0] = 0;
- ri->i_addr[1] =
+ ri->i_addr[extra_size] = 0;
+ ri->i_addr[extra_size + 1] =
cpu_to_le32(new_encode_dev(inode->i_rdev));
- ri->i_addr[2] = 0;
+ ri->i_addr[extra_size + 2] = 0;
}
}
}
static void __recover_inline_status(struct inode *inode, struct page *ipage)
{
- void *inline_data = inline_data_addr(ipage);
+ void *inline_data = inline_data_addr(inode, ipage);
__le32 *start = inline_data;
- __le32 *end = start + MAX_INLINE_DATA / sizeof(__le32);
+ __le32 *end = start + MAX_INLINE_DATA(inode) / sizeof(__le32);
while (start < end) {
if (*start++) {
@@ -104,12 +108,84 @@ static void __recover_inline_status(struct inode *inode, struct page *ipage)
return;
}
+static bool f2fs_enable_inode_chksum(struct f2fs_sb_info *sbi, struct page *page)
+{
+ struct f2fs_inode *ri = &F2FS_NODE(page)->i;
+ int extra_isize = le32_to_cpu(ri->i_extra_isize);
+
+ if (!f2fs_sb_has_inode_chksum(sbi->sb))
+ return false;
+
+ if (!RAW_IS_INODE(F2FS_NODE(page)) || !(ri->i_inline & F2FS_EXTRA_ATTR))
+ return false;
+
+ if (!F2FS_FITS_IN_INODE(ri, extra_isize, i_inode_checksum))
+ return false;
+
+ return true;
+}
+
+static __u32 f2fs_inode_chksum(struct f2fs_sb_info *sbi, struct page *page)
+{
+ struct f2fs_node *node = F2FS_NODE(page);
+ struct f2fs_inode *ri = &node->i;
+ __le32 ino = node->footer.ino;
+ __le32 gen = ri->i_generation;
+ __u32 chksum, chksum_seed;
+ __u32 dummy_cs = 0;
+ unsigned int offset = offsetof(struct f2fs_inode, i_inode_checksum);
+ unsigned int cs_size = sizeof(dummy_cs);
+
+ chksum = f2fs_chksum(sbi, sbi->s_chksum_seed, (__u8 *)&ino,
+ sizeof(ino));
+ chksum_seed = f2fs_chksum(sbi, chksum, (__u8 *)&gen, sizeof(gen));
+
+ chksum = f2fs_chksum(sbi, chksum_seed, (__u8 *)ri, offset);
+ chksum = f2fs_chksum(sbi, chksum, (__u8 *)&dummy_cs, cs_size);
+ offset += cs_size;
+ chksum = f2fs_chksum(sbi, chksum, (__u8 *)ri + offset,
+ F2FS_BLKSIZE - offset);
+ return chksum;
+}
+
+bool f2fs_inode_chksum_verify(struct f2fs_sb_info *sbi, struct page *page)
+{
+ struct f2fs_inode *ri;
+ __u32 provided, calculated;
+
+ if (!f2fs_enable_inode_chksum(sbi, page) ||
+ PageDirty(page) || PageWriteback(page))
+ return true;
+
+ ri = &F2FS_NODE(page)->i;
+ provided = le32_to_cpu(ri->i_inode_checksum);
+ calculated = f2fs_inode_chksum(sbi, page);
+
+ if (provided != calculated)
+ f2fs_msg(sbi->sb, KERN_WARNING,
+ "checksum invalid, ino = %x, %x vs. %x",
+ ino_of_node(page), provided, calculated);
+
+ return provided == calculated;
+}
+
+void f2fs_inode_chksum_set(struct f2fs_sb_info *sbi, struct page *page)
+{
+ struct f2fs_inode *ri = &F2FS_NODE(page)->i;
+
+ if (!f2fs_enable_inode_chksum(sbi, page))
+ return;
+
+ ri->i_inode_checksum = cpu_to_le32(f2fs_inode_chksum(sbi, page));
+}
+
static int do_read_inode(struct inode *inode)
{
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
struct f2fs_inode_info *fi = F2FS_I(inode);
struct page *node_page;
struct f2fs_inode *ri;
+ projid_t i_projid;
/* Check if ino is within scope */
if (check_nid_range(sbi, inode->i_ino)) {
@@ -153,6 +229,9 @@ static int do_read_inode(struct inode *inode)
get_inline_info(inode, ri);
+ fi->i_extra_isize = f2fs_has_extra_attr(inode) ?
+ le16_to_cpu(ri->i_extra_isize) : 0;
+
/* check data exist */
if (f2fs_has_inline_data(inode) && !f2fs_exist_data(inode))
__recover_inline_status(inode, node_page);
@@ -166,6 +245,16 @@ static int do_read_inode(struct inode *inode)
if (!need_inode_block_update(sbi, inode->i_ino))
fi->last_disk_size = inode->i_size;
+ if (fi->i_flags & FS_PROJINHERIT_FL)
+ set_inode_flag(inode, FI_PROJ_INHERIT);
+
+ if (f2fs_has_extra_attr(inode) && f2fs_sb_has_project_quota(sbi->sb) &&
+ F2FS_FITS_IN_INODE(ri, fi->i_extra_isize, i_projid))
+ i_projid = (projid_t)le32_to_cpu(ri->i_projid);
+ else
+ i_projid = F2FS_DEF_PROJID;
+ fi->i_projid = make_kprojid(&init_user_ns, i_projid);
+
f2fs_put_page(node_page, 1);
stat_inc_inline_xattr(inode);
@@ -292,6 +381,20 @@ int update_inode(struct inode *inode, struct page *node_page)
ri->i_generation = cpu_to_le32(inode->i_generation);
ri->i_dir_level = F2FS_I(inode)->i_dir_level;
+ if (f2fs_has_extra_attr(inode)) {
+ ri->i_extra_isize = cpu_to_le16(F2FS_I(inode)->i_extra_isize);
+
+ if (f2fs_sb_has_project_quota(F2FS_I_SB(inode)->sb) &&
+ F2FS_FITS_IN_INODE(ri, F2FS_I(inode)->i_extra_isize,
+ i_projid)) {
+ projid_t i_projid;
+
+ i_projid = from_kprojid(&init_user_ns,
+ F2FS_I(inode)->i_projid);
+ ri->i_projid = cpu_to_le32(i_projid);
+ }
+ }
+
__set_inode_rdev(inode, ri);
set_cold_node(inode, node_page);
@@ -416,6 +519,9 @@ no_delete:
stat_dec_inline_dir(inode);
stat_dec_inline_inode(inode);
+ if (!is_set_ckpt_flags(sbi, CP_ERROR_FLAG))
+ f2fs_bug_on(sbi, is_inode_flag_set(inode, FI_DIRTY_INODE));
+
/* ino == 0, if f2fs_new_inode() was failed t*/
if (inode->i_ino)
invalidate_mapping_pages(NODE_MAPPING(sbi), inode->i_ino,
diff --git a/fs/f2fs/namei.c b/fs/f2fs/namei.c
index 760d85223c81..a4dab98c4b7b 100644
--- a/fs/f2fs/namei.c
+++ b/fs/f2fs/namei.c
@@ -58,6 +58,13 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
goto fail;
}
+ if (f2fs_sb_has_project_quota(sbi->sb) &&
+ (F2FS_I(dir)->i_flags & FS_PROJINHERIT_FL))
+ F2FS_I(inode)->i_projid = F2FS_I(dir)->i_projid;
+ else
+ F2FS_I(inode)->i_projid = make_kprojid(&init_user_ns,
+ F2FS_DEF_PROJID);
+
err = dquot_initialize(inode);
if (err)
goto fail_drop;
@@ -72,6 +79,11 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
set_inode_flag(inode, FI_NEW_INODE);
+ if (f2fs_sb_has_extra_attr(sbi->sb)) {
+ set_inode_flag(inode, FI_EXTRA_ATTR);
+ F2FS_I(inode)->i_extra_isize = F2FS_TOTAL_EXTRA_ATTR_SIZE;
+ }
+
if (test_opt(sbi, INLINE_XATTR))
set_inode_flag(inode, FI_INLINE_XATTR);
if (test_opt(sbi, INLINE_DATA) && f2fs_may_inline_data(inode))
@@ -85,6 +97,15 @@ static struct inode *f2fs_new_inode(struct inode *dir, umode_t mode)
stat_inc_inline_inode(inode);
stat_inc_inline_dir(inode);
+ F2FS_I(inode)->i_flags =
+ f2fs_mask_flags(mode, F2FS_I(dir)->i_flags & F2FS_FL_INHERITED);
+
+ if (S_ISDIR(inode->i_mode))
+ F2FS_I(inode)->i_flags |= FS_INDEX_FL;
+
+ if (F2FS_I(inode)->i_flags & FS_PROJINHERIT_FL)
+ set_inode_flag(inode, FI_PROJ_INHERIT);
+
trace_f2fs_new_inode(inode, 0);
return inode;
@@ -204,6 +225,11 @@ static int f2fs_link(struct dentry *old_dentry, struct inode *dir,
!fscrypt_has_permitted_context(dir, inode))
return -EPERM;
+ if (is_inode_flag_set(dir, FI_PROJ_INHERIT) &&
+ (!projid_eq(F2FS_I(dir)->i_projid,
+ F2FS_I(old_dentry->d_inode)->i_projid)))
+ return -EXDEV;
+
err = dquot_initialize(dir);
if (err)
return err;
@@ -261,6 +287,10 @@ static int __recover_dot_dentries(struct inode *dir, nid_t pino)
return 0;
}
+ err = dquot_initialize(dir);
+ if (err)
+ return err;
+
f2fs_balance_fs(sbi, true);
f2fs_lock_op(sbi);
@@ -724,6 +754,11 @@ static int f2fs_rename(struct inode *old_dir, struct dentry *old_dentry,
goto out;
}
+ if (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
+ (!projid_eq(F2FS_I(new_dir)->i_projid,
+ F2FS_I(old_dentry->d_inode)->i_projid)))
+ return -EXDEV;
+
err = dquot_initialize(old_dir);
if (err)
goto out;
@@ -912,6 +947,14 @@ static int f2fs_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
!fscrypt_has_permitted_context(old_dir, new_inode)))
return -EPERM;
+ if ((is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
+ !projid_eq(F2FS_I(new_dir)->i_projid,
+ F2FS_I(old_dentry->d_inode)->i_projid)) ||
+ (is_inode_flag_set(new_dir, FI_PROJ_INHERIT) &&
+ !projid_eq(F2FS_I(old_dir)->i_projid,
+ F2FS_I(new_dentry->d_inode)->i_projid)))
+ return -EXDEV;
+
err = dquot_initialize(old_dir);
if (err)
goto out;
diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
index d53fe620939e..fca87835a1da 100644
--- a/fs/f2fs/node.c
+++ b/fs/f2fs/node.c
@@ -19,6 +19,7 @@
#include "f2fs.h"
#include "node.h"
#include "segment.h"
+#include "xattr.h"
#include "trace.h"
#include <trace/events/f2fs.h>
@@ -554,7 +555,7 @@ static int get_node_path(struct inode *inode, long block,
level = 3;
goto got;
} else {
- BUG();
+ return -E2BIG;
}
got:
return level;
@@ -578,6 +579,8 @@ int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
int err = 0;
level = get_node_path(dn->inode, index, offset, noffset);
+ if (level < 0)
+ return level;
nids[0] = dn->inode->i_ino;
npage[0] = dn->inode_page;
@@ -613,7 +616,7 @@ int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
}
dn->nid = nids[i];
- npage[i] = new_node_page(dn, noffset[i], NULL);
+ npage[i] = new_node_page(dn, noffset[i]);
if (IS_ERR(npage[i])) {
alloc_nid_failed(sbi, nids[i]);
err = PTR_ERR(npage[i]);
@@ -654,7 +657,8 @@ int get_dnode_of_data(struct dnode_of_data *dn, pgoff_t index, int mode)
dn->nid = nids[level];
dn->ofs_in_node = offset[level];
dn->node_page = npage[level];
- dn->data_blkaddr = datablock_addr(dn->node_page, dn->ofs_in_node);
+ dn->data_blkaddr = datablock_addr(dn->inode,
+ dn->node_page, dn->ofs_in_node);
return 0;
release_pages:
@@ -876,6 +880,8 @@ int truncate_inode_blocks(struct inode *inode, pgoff_t from)
trace_f2fs_truncate_inode_blocks_enter(inode, from);
level = get_node_path(inode, from, offset, noffset);
+ if (level < 0)
+ return level;
page = get_node_page(sbi, inode->i_ino);
if (IS_ERR(page)) {
@@ -1022,11 +1028,10 @@ struct page *new_inode_page(struct inode *inode)
set_new_dnode(&dn, inode, NULL, NULL, inode->i_ino);
/* caller should f2fs_put_page(page, 1); */
- return new_node_page(&dn, 0, NULL);
+ return new_node_page(&dn, 0);
}
-struct page *new_node_page(struct dnode_of_data *dn,
- unsigned int ofs, struct page *ipage)
+struct page *new_node_page(struct dnode_of_data *dn, unsigned int ofs)
{
struct f2fs_sb_info *sbi = F2FS_I_SB(dn->inode);
struct node_info new_ni;
@@ -1170,6 +1175,11 @@ repeat:
err = -EIO;
goto out_err;
}
+
+ if (!f2fs_inode_chksum_verify(sbi, page)) {
+ err = -EBADMSG;
+ goto out_err;
+ }
page_hit:
if(unlikely(nid != nid_of_node(page))) {
f2fs_msg(sbi->sb, KERN_WARNING, "inconsistent node block, "
@@ -1177,9 +1187,9 @@ page_hit:
nid, nid_of_node(page), ino_of_node(page),
ofs_of_node(page), cpver_of_node(page),
next_blkaddr_of_node(page));
- ClearPageUptodate(page);
err = -EINVAL;
out_err:
+ ClearPageUptodate(page);
f2fs_put_page(page, 1);
return ERR_PTR(err);
}
@@ -1326,7 +1336,8 @@ continue_unlock:
}
static int __write_node_page(struct page *page, bool atomic, bool *submitted,
- struct writeback_control *wbc)
+ struct writeback_control *wbc, bool do_balance,
+ enum iostat_type io_type)
{
struct f2fs_sb_info *sbi = F2FS_P_SB(page);
nid_t nid;
@@ -1339,6 +1350,7 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
.page = page,
.encrypted_page = NULL,
.submitted = false,
+ .io_type = io_type,
};
trace_f2fs_writepage(page, NODE);
@@ -1395,6 +1407,8 @@ static int __write_node_page(struct page *page, bool atomic, bool *submitted,
if (submitted)
*submitted = fio.submitted;
+ if (do_balance)
+ f2fs_balance_fs(sbi, false);
return 0;
redirty_out:
@@ -1405,7 +1419,7 @@ redirty_out:
static int f2fs_write_node_page(struct page *page,
struct writeback_control *wbc)
{
- return __write_node_page(page, false, NULL, wbc);
+ return __write_node_page(page, false, NULL, wbc, false, FS_NODE_IO);
}
int fsync_node_pages(struct f2fs_sb_info *sbi, struct inode *inode,
@@ -1493,7 +1507,8 @@ continue_unlock:
ret = __write_node_page(page, atomic &&
page == last_page,
- &submitted, wbc);
+ &submitted, wbc, true,
+ FS_NODE_IO);
if (ret) {
unlock_page(page);
f2fs_put_page(last_page, 0);
@@ -1530,7 +1545,8 @@ out:
return ret ? -EIO: 0;
}
-int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc)
+int sync_node_pages(struct f2fs_sb_info *sbi, struct writeback_control *wbc,
+ bool do_balance, enum iostat_type io_type)
{
pgoff_t index, end;
struct pagevec pvec;
@@ -1608,7 +1624,8 @@ continue_unlock:
set_fsync_mark(page, 0);
set_dentry_mark(page, 0);
- ret = __write_node_page(page, false, &submitted, wbc);
+ ret = __write_node_page(page, false, &submitted,
+ wbc, do_balance, io_type);
if (ret)
unlock_page(page);
else if (submitted)
@@ -1697,7 +1714,7 @@ static int f2fs_write_node_pages(struct address_space *mapping,
diff = nr_pages_to_write(sbi, NODE, wbc);
wbc->sync_mode = WB_SYNC_NONE;
blk_start_plug(&plug);
- sync_node_pages(sbi, wbc);
+ sync_node_pages(sbi, wbc, true, FS_NODE_IO);
blk_finish_plug(&plug);
wbc->nr_to_write = max((long)0, wbc->nr_to_write - diff);
return 0;
@@ -2191,7 +2208,8 @@ int recover_xattr_data(struct inode *inode, struct page *page, block_t blkaddr)
{
struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
nid_t prev_xnid = F2FS_I(inode)->i_xattr_nid;
- nid_t new_xnid = nid_of_node(page);
+ nid_t new_xnid;
+ struct dnode_of_data dn;
struct node_info ni;
struct page *xpage;
@@ -2207,22 +2225,22 @@ int recover_xattr_data(struct inode *inode, struct page *page, block_t blkaddr)
recover_xnid:
/* 2: update xattr nid in inode */
- remove_free_nid(sbi, new_xnid);
- f2fs_i_xnid_write(inode, new_xnid);
- if (unlikely(inc_valid_node_count(sbi, inode, false)))
- f2fs_bug_on(sbi, 1);
+ if (!alloc_nid(sbi, &new_xnid))
+ return -ENOSPC;
+
+ set_new_dnode(&dn, inode, NULL, NULL, new_xnid);
+ xpage = new_node_page(&dn, XATTR_NODE_OFFSET);
+ if (IS_ERR(xpage)) {
+ alloc_nid_failed(sbi, new_xnid);
+ return PTR_ERR(xpage);
+ }
+
+ alloc_nid_done(sbi, new_xnid);
update_inode_page(inode);
/* 3: update and set xattr node page dirty */
- xpage = grab_cache_page(NODE_MAPPING(sbi), new_xnid);
- if (!xpage)
- return -ENOMEM;
-
- memcpy(F2FS_NODE(xpage), F2FS_NODE(page), PAGE_SIZE);
+ memcpy(F2FS_NODE(xpage), F2FS_NODE(page), VALID_XATTR_BLOCK_SIZE);
- get_node_info(sbi, new_xnid, &ni);
- ni.ino = inode->i_ino;
- set_node_addr(sbi, &ni, NEW_ADDR, false);
set_page_dirty(xpage);
f2fs_put_page(xpage, 1);
@@ -2262,7 +2280,14 @@ retry:
dst->i_blocks = cpu_to_le64(1);
dst->i_links = cpu_to_le32(1);
dst->i_xattr_nid = 0;
- dst->i_inline = src->i_inline & F2FS_INLINE_XATTR;
+ dst->i_inline = src->i_inline & (F2FS_INLINE_XATTR | F2FS_EXTRA_ATTR);
+ if (dst->i_inline & F2FS_EXTRA_ATTR) {
+ dst->i_extra_isize = src->i_extra_isize;
+ if (f2fs_sb_has_project_quota(sbi->sb) &&
+ F2FS_FITS_IN_INODE(src, le16_to_cpu(src->i_extra_isize),
+ i_projid))
+ dst->i_projid = src->i_projid;
+ }
new_ni = old_ni;
new_ni.ino = ino;
diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
index 907d6b7dde6a..9626758bc762 100644
--- a/fs/f2fs/recovery.c
+++ b/fs/f2fs/recovery.c
@@ -69,20 +69,34 @@ static struct fsync_inode_entry *get_fsync_inode(struct list_head *head,
}
static struct fsync_inode_entry *add_fsync_inode(struct f2fs_sb_info *sbi,
- struct list_head *head, nid_t ino)
+ struct list_head *head, nid_t ino, bool quota_inode)
{
struct inode *inode;
struct fsync_inode_entry *entry;
+ int err;
inode = f2fs_iget_retry(sbi->sb, ino);
if (IS_ERR(inode))
return ERR_CAST(inode);
+ err = dquot_initialize(inode);
+ if (err)
+ goto err_out;
+
+ if (quota_inode) {
+ err = dquot_alloc_inode(inode);
+ if (err)
+ goto err_out;
+ }
+
entry = f2fs_kmem_cache_alloc(fsync_entry_slab, GFP_F2FS_ZERO);
entry->inode = inode;
list_add_tail(&entry->list, head);
return entry;
+err_out:
+ iput(inode);
+ return ERR_PTR(err);
}
static void del_fsync_inode(struct fsync_inode_entry *entry)
@@ -107,7 +121,8 @@ static int recover_dentry(struct inode *inode, struct page *ipage,
entry = get_fsync_inode(dir_list, pino);
if (!entry) {
- entry = add_fsync_inode(F2FS_I_SB(inode), dir_list, pino);
+ entry = add_fsync_inode(F2FS_I_SB(inode), dir_list,
+ pino, false);
if (IS_ERR(entry)) {
dir = ERR_CAST(entry);
err = PTR_ERR(entry);
@@ -140,6 +155,13 @@ retry:
err = -EEXIST;
goto out_unmap_put;
}
+
+ err = dquot_initialize(einode);
+ if (err) {
+ iput(einode);
+ goto out_unmap_put;
+ }
+
err = acquire_orphan_inode(F2FS_I_SB(inode));
if (err) {
iput(einode);
@@ -226,18 +248,22 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head,
entry = get_fsync_inode(head, ino_of_node(page));
if (!entry) {
+ bool quota_inode = false;
+
if (!check_only &&
IS_INODE(page) && is_dent_dnode(page)) {
err = recover_inode_page(sbi, page);
if (err)
break;
+ quota_inode = true;
}
/*
* CP | dnode(F) | inode(DF)
* For this case, we should not give up now.
*/
- entry = add_fsync_inode(sbi, head, ino_of_node(page));
+ entry = add_fsync_inode(sbi, head, ino_of_node(page),
+ quota_inode);
if (IS_ERR(entry)) {
err = PTR_ERR(entry);
if (err == -ENOENT) {
@@ -291,7 +317,7 @@ static int check_index_in_prev_nodes(struct f2fs_sb_info *sbi,
return 0;
/* Get the previous summary */
- for (i = CURSEG_WARM_DATA; i <= CURSEG_COLD_DATA; i++) {
+ for (i = CURSEG_HOT_DATA; i <= CURSEG_COLD_DATA; i++) {
struct curseg_info *curseg = CURSEG_I(sbi, i);
if (curseg->segno == segno) {
sum = curseg->sum_blk->entries[blkoff];
@@ -328,10 +354,18 @@ got_it:
f2fs_put_page(node_page, 1);
if (ino != dn->inode->i_ino) {
+ int ret;
+
/* Deallocate previous index in the node page */
inode = f2fs_iget_retry(sbi->sb, ino);
if (IS_ERR(inode))
return PTR_ERR(inode);
+
+ ret = dquot_initialize(inode);
+ if (ret) {
+ iput(inode);
+ return ret;
+ }
} else {
inode = dn->inode;
}
@@ -361,7 +395,8 @@ out:
return 0;
truncate_out:
- if (datablock_addr(tdn.node_page, tdn.ofs_in_node) == blkaddr)
+ if (datablock_addr(tdn.inode, tdn.node_page,
+ tdn.ofs_in_node) == blkaddr)
truncate_data_blocks_range(&tdn, 1);
if (dn->inode->i_ino == nid && !dn->inode_page_locked)
unlock_page(dn->inode_page);
@@ -414,8 +449,8 @@ retry_dn:
for (; start < end; start++, dn.ofs_in_node++) {
block_t src, dest;
- src = datablock_addr(dn.node_page, dn.ofs_in_node);
- dest = datablock_addr(page, dn.ofs_in_node);
+ src = datablock_addr(dn.inode, dn.node_page, dn.ofs_in_node);
+ dest = datablock_addr(dn.inode, page, dn.ofs_in_node);
/* skip recovering if dest is the same as src */
if (src == dest)
@@ -557,12 +592,27 @@ int recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
struct list_head dir_list;
int err;
int ret = 0;
+ unsigned long s_flags = sbi->sb->s_flags;
bool need_writecp = false;
+ if (s_flags & MS_RDONLY) {
+ f2fs_msg(sbi->sb, KERN_INFO, "orphan cleanup on readonly fs");
+ sbi->sb->s_flags &= ~MS_RDONLY;
+ }
+
+#ifdef CONFIG_QUOTA
+ /* Needed for iput() to work correctly and not trash data */
+ sbi->sb->s_flags |= MS_ACTIVE;
+ /* Turn on quotas so that they are updated correctly */
+ f2fs_enable_quota_files(sbi);
+#endif
+
fsync_entry_slab = f2fs_kmem_cache_create("f2fs_fsync_inode_entry",
sizeof(struct fsync_inode_entry));
- if (!fsync_entry_slab)
- return -ENOMEM;
+ if (!fsync_entry_slab) {
+ err = -ENOMEM;
+ goto out;
+ }
INIT_LIST_HEAD(&inode_list);
INIT_LIST_HEAD(&dir_list);
@@ -573,11 +623,11 @@ int recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
/* step #1: find fsynced inode numbers */
err = find_fsync_dnodes(sbi, &inode_list, check_only);
if (err || list_empty(&inode_list))
- goto out;
+ goto skip;
if (check_only) {
ret = 1;
- goto out;
+ goto skip;
}
need_writecp = true;
@@ -586,7 +636,7 @@ int recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
err = recover_data(sbi, &inode_list, &dir_list);
if (!err)
f2fs_bug_on(sbi, !list_empty(&inode_list));
-out:
+skip:
destroy_fsync_dnodes(&inode_list);
/* truncate meta pages to be used by the recovery */
@@ -599,8 +649,6 @@ out:
}
clear_sbi_flag(sbi, SBI_POR_DOING);
- if (err)
- set_ckpt_flags(sbi, CP_ERROR_FLAG);
mutex_unlock(&sbi->cp_mutex);
/* let's drop all the directory inodes for clean checkpoint */
@@ -614,5 +662,12 @@ out:
}
kmem_cache_destroy(fsync_entry_slab);
+out:
+#ifdef CONFIG_QUOTA
+ /* Turn quotas off */
+ f2fs_quota_off_umount(sbi->sb);
+#endif
+ sbi->sb->s_flags = s_flags; /* Restore MS_RDONLY status */
+
return ret ? ret: err;
}
diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
index 6f8fc4a6e701..621b9b3d320b 100644
--- a/fs/f2fs/segment.c
+++ b/fs/f2fs/segment.c
@@ -17,10 +17,12 @@
#include <linux/swap.h>
#include <linux/timer.h>
#include <linux/freezer.h>
+#include <linux/sched/signal.h>
#include "f2fs.h"
#include "segment.h"
#include "node.h"
+#include "gc.h"
#include "trace.h"
#include <trace/events/f2fs.h>
@@ -167,6 +169,21 @@ found:
return result - size + __reverse_ffz(tmp);
}
+bool need_SSR(struct f2fs_sb_info *sbi)
+{
+ int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES);
+ int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);
+ int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);
+
+ if (test_opt(sbi, LFS))
+ return false;
+ if (sbi->gc_thread && sbi->gc_thread->gc_urgent)
+ return true;
+
+ return free_sections(sbi) <= (node_secs + 2 * dent_secs + imeta_secs +
+ 2 * reserved_sections(sbi));
+}
+
void register_inmem_page(struct inode *inode, struct page *page)
{
struct f2fs_inode_info *fi = F2FS_I(inode);
@@ -213,9 +230,15 @@ static int __revoke_inmem_pages(struct inode *inode,
struct node_info ni;
trace_f2fs_commit_inmem_page(page, INMEM_REVOKE);
-
+retry:
set_new_dnode(&dn, inode, NULL, NULL, 0);
- if (get_dnode_of_data(&dn, page->index, LOOKUP_NODE)) {
+ err = get_dnode_of_data(&dn, page->index, LOOKUP_NODE);
+ if (err) {
+ if (err == -ENOMEM) {
+ congestion_wait(BLK_RW_ASYNC, HZ/50);
+ cond_resched();
+ goto retry;
+ }
err = -EAGAIN;
goto next;
}
@@ -248,6 +271,7 @@ void drop_inmem_pages(struct inode *inode)
mutex_unlock(&fi->inmem_lock);
clear_inode_flag(inode, FI_ATOMIC_FILE);
+ clear_inode_flag(inode, FI_HOT_DATA);
stat_dec_atomic_write(inode);
}
@@ -292,6 +316,7 @@ static int __commit_inmem_pages(struct inode *inode,
.type = DATA,
.op = REQ_OP_WRITE,
.op_flags = REQ_SYNC | REQ_PRIO,
+ .io_type = FS_DATA_IO,
};
pgoff_t last_idx = ULONG_MAX;
int err = 0;
@@ -309,17 +334,21 @@ static int __commit_inmem_pages(struct inode *inode,
inode_dec_dirty_pages(inode);
remove_dirty_inode(inode);
}
-
+retry:
fio.page = page;
fio.old_blkaddr = NULL_ADDR;
fio.encrypted_page = NULL;
fio.need_lock = LOCK_DONE;
err = do_write_data_page(&fio);
if (err) {
+ if (err == -ENOMEM) {
+ congestion_wait(BLK_RW_ASYNC, HZ/50);
+ cond_resched();
+ goto retry;
+ }
unlock_page(page);
break;
}
-
/* record old blkaddr for revoking */
cur->old_addr = fio.old_blkaddr;
last_idx = page->index;
@@ -481,6 +510,8 @@ repeat:
if (kthread_should_stop())
return 0;
+ sb_start_intwrite(sbi->sb);
+
if (!llist_empty(&fcc->issue_list)) {
struct flush_cmd *cmd, *next;
int ret;
@@ -499,6 +530,8 @@ repeat:
fcc->dispatch_list = NULL;
}
+ sb_end_intwrite(sbi->sb);
+
wait_event_interruptible(*q,
kthread_should_stop() || !llist_empty(&fcc->issue_list));
goto repeat;
@@ -519,8 +552,7 @@ int f2fs_issue_flush(struct f2fs_sb_info *sbi)
return ret;
}
- if (!atomic_read(&fcc->issing_flush)) {
- atomic_inc(&fcc->issing_flush);
+ if (atomic_inc_return(&fcc->issing_flush) == 1) {
ret = submit_flush_wait(sbi);
atomic_dec(&fcc->issing_flush);
@@ -530,18 +562,39 @@ int f2fs_issue_flush(struct f2fs_sb_info *sbi)
init_completion(&cmd.wait);
- atomic_inc(&fcc->issing_flush);
llist_add(&cmd.llnode, &fcc->issue_list);
- if (!fcc->dispatch_list)
+ /* update issue_list before we wake up issue_flush thread */
+ smp_mb();
+
+ if (waitqueue_active(&fcc->flush_wait_queue))
wake_up(&fcc->flush_wait_queue);
if (fcc->f2fs_issue_flush) {
wait_for_completion(&cmd.wait);
atomic_dec(&fcc->issing_flush);
} else {
- llist_del_all(&fcc->issue_list);
- atomic_set(&fcc->issing_flush, 0);
+ struct llist_node *list;
+
+ list = llist_del_all(&fcc->issue_list);
+ if (!list) {
+ wait_for_completion(&cmd.wait);
+ atomic_dec(&fcc->issing_flush);
+ } else {
+ struct flush_cmd *tmp, *next;
+
+ ret = submit_flush_wait(sbi);
+
+ llist_for_each_entry_safe(tmp, next, list, llnode) {
+ if (tmp == &cmd) {
+ cmd.ret = ret;
+ atomic_dec(&fcc->issing_flush);
+ continue;
+ }
+ tmp->ret = ret;
+ complete(&tmp->wait);
+ }
+ }
}
return cmd.ret;
@@ -778,11 +831,14 @@ void __check_sit_bitmap(struct f2fs_sb_info *sbi,
sentry = get_seg_entry(sbi, segno);
offset = GET_BLKOFF_FROM_SEG0(sbi, blk);
- size = min((unsigned long)(end - blk), max_blocks);
+ if (end < START_BLOCK(sbi, segno + 1))
+ size = GET_BLKOFF_FROM_SEG0(sbi, end);
+ else
+ size = max_blocks;
map = (unsigned long *)(sentry->cur_valid_map);
offset = __find_rev_next_bit(map, size, offset);
f2fs_bug_on(sbi, offset != size);
- blk += size;
+ blk = START_BLOCK(sbi, segno + 1);
}
#endif
}
@@ -815,6 +871,8 @@ static void __submit_discard_cmd(struct f2fs_sb_info *sbi,
submit_bio(bio);
list_move_tail(&dc->list, &dcc->wait_list);
__check_sit_bitmap(sbi, dc->start, dc->start + dc->len);
+
+ f2fs_update_iostat(sbi, FS_DISCARD, 1);
}
} else {
__remove_discard_cmd(sbi, dc);
@@ -996,32 +1054,81 @@ static int __queue_discard_cmd(struct f2fs_sb_info *sbi,
return 0;
}
-static void __issue_discard_cmd(struct f2fs_sb_info *sbi, bool issue_cond)
+static int __issue_discard_cmd(struct f2fs_sb_info *sbi, bool issue_cond)
{
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
struct list_head *pend_list;
struct discard_cmd *dc, *tmp;
struct blk_plug plug;
- int i, iter = 0;
+ int iter = 0, issued = 0;
+ int i;
+ bool io_interrupted = false;
mutex_lock(&dcc->cmd_lock);
f2fs_bug_on(sbi,
!__check_rb_tree_consistence(sbi, &dcc->root));
blk_start_plug(&plug);
- for (i = MAX_PLIST_NUM - 1; i >= 0; i--) {
+ for (i = MAX_PLIST_NUM - 1;
+ i >= 0 && plist_issue(dcc->pend_list_tag[i]); i--) {
pend_list = &dcc->pend_list[i];
list_for_each_entry_safe(dc, tmp, pend_list, list) {
f2fs_bug_on(sbi, dc->state != D_PREP);
- if (!issue_cond || is_idle(sbi))
+ /* Hurry up to finish fstrim */
+ if (dcc->pend_list_tag[i] & P_TRIM) {
+ __submit_discard_cmd(sbi, dc);
+ issued++;
+
+ if (fatal_signal_pending(current))
+ break;
+ continue;
+ }
+
+ if (!issue_cond) {
__submit_discard_cmd(sbi, dc);
- if (issue_cond && iter++ > DISCARD_ISSUE_RATE)
+ issued++;
+ continue;
+ }
+
+ if (is_idle(sbi)) {
+ __submit_discard_cmd(sbi, dc);
+ issued++;
+ } else {
+ io_interrupted = true;
+ }
+
+ if (++iter >= DISCARD_ISSUE_RATE)
goto out;
}
+ if (list_empty(pend_list) && dcc->pend_list_tag[i] & P_TRIM)
+ dcc->pend_list_tag[i] &= (~P_TRIM);
}
out:
blk_finish_plug(&plug);
mutex_unlock(&dcc->cmd_lock);
+
+ if (!issued && io_interrupted)
+ issued = -1;
+
+ return issued;
+}
+
+static void __drop_discard_cmd(struct f2fs_sb_info *sbi)
+{
+ struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+ struct list_head *pend_list;
+ struct discard_cmd *dc, *tmp;
+ int i;
+
+ mutex_lock(&dcc->cmd_lock);
+ for (i = MAX_PLIST_NUM - 1; i >= 0; i--) {
+ pend_list = &dcc->pend_list[i];
+ list_for_each_entry_safe(dc, tmp, pend_list, list) {
+ f2fs_bug_on(sbi, dc->state != D_PREP);
+ __remove_discard_cmd(sbi, dc);
+ }
+ }
+ mutex_unlock(&dcc->cmd_lock);
}
static void __wait_one_discard_bio(struct f2fs_sb_info *sbi,
@@ -1102,34 +1209,63 @@ void stop_discard_thread(struct f2fs_sb_info *sbi)
}
}
-/* This comes from f2fs_put_super */
+/* This comes from f2fs_put_super and f2fs_trim_fs */
void f2fs_wait_discard_bios(struct f2fs_sb_info *sbi)
{
__issue_discard_cmd(sbi, false);
+ __drop_discard_cmd(sbi);
__wait_discard_cmd(sbi, false);
}
+static void mark_discard_range_all(struct f2fs_sb_info *sbi)
+{
+ struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+ int i;
+
+ mutex_lock(&dcc->cmd_lock);
+ for (i = 0; i < MAX_PLIST_NUM; i++)
+ dcc->pend_list_tag[i] |= P_TRIM;
+ mutex_unlock(&dcc->cmd_lock);
+}
+
static int issue_discard_thread(void *data)
{
struct f2fs_sb_info *sbi = data;
struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
wait_queue_head_t *q = &dcc->discard_wait_queue;
+ unsigned int wait_ms = DEF_MIN_DISCARD_ISSUE_TIME;
+ int issued;
set_freezable();
do {
- wait_event_interruptible(*q, kthread_should_stop() ||
- freezing(current) ||
- atomic_read(&dcc->discard_cmd_cnt));
+ wait_event_interruptible_timeout(*q,
+ kthread_should_stop() || freezing(current) ||
+ dcc->discard_wake,
+ msecs_to_jiffies(wait_ms));
if (try_to_freeze())
continue;
if (kthread_should_stop())
return 0;
- __issue_discard_cmd(sbi, true);
- __wait_discard_cmd(sbi, true);
+ if (dcc->discard_wake) {
+ dcc->discard_wake = 0;
+ if (sbi->gc_thread && sbi->gc_thread->gc_urgent)
+ mark_discard_range_all(sbi);
+ }
+
+ sb_start_intwrite(sbi->sb);
+
+ issued = __issue_discard_cmd(sbi, true);
+ if (issued) {
+ __wait_discard_cmd(sbi, true);
+ wait_ms = DEF_MIN_DISCARD_ISSUE_TIME;
+ } else {
+ wait_ms = DEF_MAX_DISCARD_ISSUE_TIME;
+ }
+
+ sb_end_intwrite(sbi->sb);
- congestion_wait(BLK_RW_SYNC, HZ/50);
} while (!kthread_should_stop());
return 0;
}
@@ -1320,7 +1456,8 @@ static void set_prefree_as_free_segments(struct f2fs_sb_info *sbi)
void clear_prefree_segments(struct f2fs_sb_info *sbi, struct cp_control *cpc)
{
- struct list_head *head = &(SM_I(sbi)->dcc_info->entry_list);
+ struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+ struct list_head *head = &dcc->entry_list;
struct discard_entry *entry, *this;
struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
unsigned long *prefree_map = dirty_i->dirty_segmap[PRE];
@@ -1402,11 +1539,11 @@ skip:
goto find_next;
list_del(&entry->list);
- SM_I(sbi)->dcc_info->nr_discards -= total_len;
+ dcc->nr_discards -= total_len;
kmem_cache_free(discard_entry_slab, entry);
}
- wake_up(&SM_I(sbi)->dcc_info->discard_wait_queue);
+ wake_up_discard_thread(sbi, false);
}
static int create_discard_cmd_control(struct f2fs_sb_info *sbi)
@@ -1424,9 +1561,13 @@ static int create_discard_cmd_control(struct f2fs_sb_info *sbi)
if (!dcc)
return -ENOMEM;
+ dcc->discard_granularity = DEFAULT_DISCARD_GRANULARITY;
INIT_LIST_HEAD(&dcc->entry_list);
- for (i = 0; i < MAX_PLIST_NUM; i++)
+ for (i = 0; i < MAX_PLIST_NUM; i++) {
INIT_LIST_HEAD(&dcc->pend_list[i]);
+ if (i >= dcc->discard_granularity - 1)
+ dcc->pend_list_tag[i] |= P_ACTIVE;
+ }
INIT_LIST_HEAD(&dcc->wait_list);
mutex_init(&dcc->cmd_lock);
atomic_set(&dcc->issued_discard, 0);
@@ -1491,6 +1632,10 @@ static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del)
struct seg_entry *se;
unsigned int segno, offset;
long int new_vblocks;
+ bool exist;
+#ifdef CONFIG_F2FS_CHECK_FS
+ bool mir_exist;
+#endif
segno = GET_SEGNO(sbi, blkaddr);
@@ -1507,17 +1652,25 @@ static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del)
/* Update valid block bitmap */
if (del > 0) {
- if (f2fs_test_and_set_bit(offset, se->cur_valid_map)) {
+ exist = f2fs_test_and_set_bit(offset, se->cur_valid_map);
#ifdef CONFIG_F2FS_CHECK_FS
- if (f2fs_test_and_set_bit(offset,
- se->cur_valid_map_mir))
- f2fs_bug_on(sbi, 1);
- else
- WARN_ON(1);
-#else
+ mir_exist = f2fs_test_and_set_bit(offset,
+ se->cur_valid_map_mir);
+ if (unlikely(exist != mir_exist)) {
+ f2fs_msg(sbi->sb, KERN_ERR, "Inconsistent error "
+ "when setting bitmap, blk:%u, old bit:%d",
+ blkaddr, exist);
f2fs_bug_on(sbi, 1);
+ }
#endif
+ if (unlikely(exist)) {
+ f2fs_msg(sbi->sb, KERN_ERR,
+ "Bitmap was wrongly set, blk:%u", blkaddr);
+ f2fs_bug_on(sbi, 1);
+ se->valid_blocks--;
+ del = 0;
}
+
if (f2fs_discard_en(sbi) &&
!f2fs_test_and_set_bit(offset, se->discard_map))
sbi->discard_blks--;
@@ -1528,17 +1681,25 @@ static void update_sit_entry(struct f2fs_sb_info *sbi, block_t blkaddr, int del)
se->ckpt_valid_blocks++;
}
} else {
- if (!f2fs_test_and_clear_bit(offset, se->cur_valid_map)) {
+ exist = f2fs_test_and_clear_bit(offset, se->cur_valid_map);
#ifdef CONFIG_F2FS_CHECK_FS
- if (!f2fs_test_and_clear_bit(offset,
- se->cur_valid_map_mir))
- f2fs_bug_on(sbi, 1);
- else
- WARN_ON(1);
-#else
+ mir_exist = f2fs_test_and_clear_bit(offset,
+ se->cur_valid_map_mir);
+ if (unlikely(exist != mir_exist)) {
+ f2fs_msg(sbi->sb, KERN_ERR, "Inconsistent error "
+ "when clearing bitmap, blk:%u, old bit:%d",
+ blkaddr, exist);
f2fs_bug_on(sbi, 1);
+ }
#endif
+ if (unlikely(!exist)) {
+ f2fs_msg(sbi->sb, KERN_ERR,
+ "Bitmap was wrongly cleared, blk:%u", blkaddr);
+ f2fs_bug_on(sbi, 1);
+ se->valid_blocks++;
+ del = 0;
}
+
if (f2fs_discard_en(sbi) &&
f2fs_test_and_clear_bit(offset, se->discard_map))
sbi->discard_blks++;
@@ -1900,7 +2061,7 @@ static void __refresh_next_blkoff(struct f2fs_sb_info *sbi,
* This function always allocates a used segment(from dirty seglist) by SSR
* manner, so it should recover the existing segment information of valid blocks
*/
-static void change_curseg(struct f2fs_sb_info *sbi, int type, bool reuse)
+static void change_curseg(struct f2fs_sb_info *sbi, int type)
{
struct dirty_seglist_info *dirty_i = DIRTY_I(sbi);
struct curseg_info *curseg = CURSEG_I(sbi, type);
@@ -1921,12 +2082,10 @@ static void change_curseg(struct f2fs_sb_info *sbi, int type, bool reuse)
curseg->alloc_type = SSR;
__next_free_blkoff(sbi, curseg, 0);
- if (reuse) {
- sum_page = get_sum_page(sbi, new_segno);
- sum_node = (struct f2fs_summary_block *)page_address(sum_page);
- memcpy(curseg->sum_blk, sum_node, SUM_ENTRY_SIZE);
- f2fs_put_page(sum_page, 1);
- }
+ sum_page = get_sum_page(sbi, new_segno);
+ sum_node = (struct f2fs_summary_block *)page_address(sum_page);
+ memcpy(curseg->sum_blk, sum_node, SUM_ENTRY_SIZE);
+ f2fs_put_page(sum_page, 1);
}
static int get_ssr_segment(struct f2fs_sb_info *sbi, int type)
@@ -1990,7 +2149,7 @@ static void allocate_segment_by_default(struct f2fs_sb_info *sbi,
else if (curseg->alloc_type == LFS && is_next_segment_free(sbi, type))
new_curseg(sbi, type, false);
else if (need_SSR(sbi) && get_ssr_segment(sbi, type))
- change_curseg(sbi, type, true);
+ change_curseg(sbi, type);
else
new_curseg(sbi, type, false);
@@ -2083,6 +2242,9 @@ int f2fs_trim_fs(struct f2fs_sb_info *sbi, struct fstrim_range *range)
schedule();
}
+ /* It's time to issue all the filed discards */
+ mark_discard_range_all(sbi);
+ f2fs_wait_discard_bios(sbi);
out:
range->len = F2FS_BLK_TO_BYTES(cpc.trimmed);
return err;
@@ -2202,9 +2364,12 @@ void allocate_data_block(struct f2fs_sb_info *sbi, struct page *page,
mutex_unlock(&sit_i->sentry_lock);
- if (page && IS_NODESEG(type))
+ if (page && IS_NODESEG(type)) {
fill_node_footer_blkaddr(page, NEXT_FREE_BLKADDR(sbi, curseg));
+ f2fs_inode_chksum_set(sbi, page);
+ }
+
if (add_list) {
struct f2fs_bio_info *io;
@@ -2236,7 +2401,8 @@ reallocate:
}
}
-void write_meta_page(struct f2fs_sb_info *sbi, struct page *page)
+void write_meta_page(struct f2fs_sb_info *sbi, struct page *page,
+ enum iostat_type io_type)
{
struct f2fs_io_info fio = {
.sbi = sbi,
@@ -2255,6 +2421,8 @@ void write_meta_page(struct f2fs_sb_info *sbi, struct page *page)
set_page_writeback(page);
f2fs_submit_page_write(&fio);
+
+ f2fs_update_iostat(sbi, io_type, F2FS_BLKSIZE);
}
void write_node_page(unsigned int nid, struct f2fs_io_info *fio)
@@ -2263,6 +2431,8 @@ void write_node_page(unsigned int nid, struct f2fs_io_info *fio)
set_summary(&sum, nid, 0, 0);
do_write_page(&sum, fio);
+
+ f2fs_update_iostat(fio->sbi, fio->io_type, F2FS_BLKSIZE);
}
void write_data_page(struct dnode_of_data *dn, struct f2fs_io_info *fio)
@@ -2276,13 +2446,22 @@ void write_data_page(struct dnode_of_data *dn, struct f2fs_io_info *fio)
set_summary(&sum, dn->nid, dn->ofs_in_node, ni.version);
do_write_page(&sum, fio);
f2fs_update_data_blkaddr(dn, fio->new_blkaddr);
+
+ f2fs_update_iostat(sbi, fio->io_type, F2FS_BLKSIZE);
}
int rewrite_data_page(struct f2fs_io_info *fio)
{
+ int err;
+
fio->new_blkaddr = fio->old_blkaddr;
stat_inc_inplace_blocks(fio->sbi);
- return f2fs_submit_page_bio(fio);
+
+ err = f2fs_submit_page_bio(fio);
+
+ f2fs_update_iostat(fio->sbi, fio->io_type, F2FS_BLKSIZE);
+
+ return err;
}
void __f2fs_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
@@ -2324,7 +2503,7 @@ void __f2fs_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
/* change the current segment */
if (segno != curseg->segno) {
curseg->next_segno = segno;
- change_curseg(sbi, type, true);
+ change_curseg(sbi, type);
}
curseg->next_blkoff = GET_BLKOFF_FROM_SEG0(sbi, new_blkaddr);
@@ -2343,7 +2522,7 @@ void __f2fs_replace_block(struct f2fs_sb_info *sbi, struct f2fs_summary *sum,
if (recover_curseg) {
if (old_cursegno != curseg->segno) {
curseg->next_segno = old_cursegno;
- change_curseg(sbi, type, true);
+ change_curseg(sbi, type);
}
curseg->next_blkoff = old_blkoff;
}
@@ -2382,8 +2561,7 @@ void f2fs_wait_on_page_writeback(struct page *page,
}
}
-void f2fs_wait_on_encrypted_page_writeback(struct f2fs_sb_info *sbi,
- block_t blkaddr)
+void f2fs_wait_on_block_writeback(struct f2fs_sb_info *sbi, block_t blkaddr)
{
struct page *cpage;
diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h
index 6b871b492fd5..e0a6cc23ace3 100644
--- a/fs/f2fs/segment.h
+++ b/fs/f2fs/segment.h
@@ -492,29 +492,11 @@ static inline int overprovision_segments(struct f2fs_sb_info *sbi)
return SM_I(sbi)->ovp_segments;
}
-static inline int overprovision_sections(struct f2fs_sb_info *sbi)
-{
- return GET_SEC_FROM_SEG(sbi, (unsigned int)overprovision_segments(sbi));
-}
-
static inline int reserved_sections(struct f2fs_sb_info *sbi)
{
return GET_SEC_FROM_SEG(sbi, (unsigned int)reserved_segments(sbi));
}
-static inline bool need_SSR(struct f2fs_sb_info *sbi)
-{
- int node_secs = get_blocktype_secs(sbi, F2FS_DIRTY_NODES);
- int dent_secs = get_blocktype_secs(sbi, F2FS_DIRTY_DENTS);
- int imeta_secs = get_blocktype_secs(sbi, F2FS_DIRTY_IMETA);
-
- if (test_opt(sbi, LFS))
- return false;
-
- return free_sections(sbi) <= (node_secs + 2 * dent_secs + imeta_secs +
- 2 * reserved_sections(sbi));
-}
-
static inline bool has_not_enough_free_secs(struct f2fs_sb_info *sbi,
int freed, int needed)
{
@@ -577,6 +559,10 @@ static inline bool need_inplace_update_policy(struct inode *inode,
if (test_opt(sbi, LFS))
return false;
+ /* if this is cold file, we should overwrite to avoid fragmentation */
+ if (file_is_cold(inode))
+ return true;
+
if (policy & (0x1 << F2FS_IPU_FORCE))
return true;
if (policy & (0x1 << F2FS_IPU_SSR) && need_SSR(sbi))
@@ -799,3 +785,28 @@ static inline long nr_pages_to_write(struct f2fs_sb_info *sbi, int type,
wbc->nr_to_write = desired;
return desired - nr_to_write;
}
+
+static inline void wake_up_discard_thread(struct f2fs_sb_info *sbi, bool force)
+{
+ struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+ bool wakeup = false;
+ int i;
+
+ if (force)
+ goto wake_up;
+
+ mutex_lock(&dcc->cmd_lock);
+ for (i = MAX_PLIST_NUM - 1;
+ i >= 0 && plist_issue(dcc->pend_list_tag[i]); i--) {
+ if (!list_empty(&dcc->pend_list[i])) {
+ wakeup = true;
+ break;
+ }
+ }
+ mutex_unlock(&dcc->cmd_lock);
+ if (!wakeup)
+ return;
+wake_up:
+ dcc->discard_wake = 1;
+ wake_up_interruptible_all(&dcc->discard_wait_queue);
+}
diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
index 32e4c025e97e..89f61eb3d167 100644
--- a/fs/f2fs/super.c
+++ b/fs/f2fs/super.c
@@ -25,6 +25,7 @@
#include <linux/quotaops.h>
#include <linux/f2fs_fs.h>
#include <linux/sysfs.h>
+#include <linux/quota.h>
#include "f2fs.h"
#include "node.h"
@@ -107,8 +108,20 @@ enum {
Opt_fault_injection,
Opt_lazytime,
Opt_nolazytime,
+ Opt_quota,
+ Opt_noquota,
Opt_usrquota,
Opt_grpquota,
+ Opt_prjquota,
+ Opt_usrjquota,
+ Opt_grpjquota,
+ Opt_prjjquota,
+ Opt_offusrjquota,
+ Opt_offgrpjquota,
+ Opt_offprjjquota,
+ Opt_jqfmt_vfsold,
+ Opt_jqfmt_vfsv0,
+ Opt_jqfmt_vfsv1,
Opt_err,
};
@@ -144,8 +157,20 @@ static match_table_t f2fs_tokens = {
{Opt_fault_injection, "fault_injection=%u"},
{Opt_lazytime, "lazytime"},
{Opt_nolazytime, "nolazytime"},
+ {Opt_quota, "quota"},
+ {Opt_noquota, "noquota"},
{Opt_usrquota, "usrquota"},
{Opt_grpquota, "grpquota"},
+ {Opt_prjquota, "prjquota"},
+ {Opt_usrjquota, "usrjquota=%s"},
+ {Opt_grpjquota, "grpjquota=%s"},
+ {Opt_prjjquota, "prjjquota=%s"},
+ {Opt_offusrjquota, "usrjquota="},
+ {Opt_offgrpjquota, "grpjquota="},
+ {Opt_offprjjquota, "prjjquota="},
+ {Opt_jqfmt_vfsold, "jqfmt=vfsold"},
+ {Opt_jqfmt_vfsv0, "jqfmt=vfsv0"},
+ {Opt_jqfmt_vfsv1, "jqfmt=vfsv1"},
{Opt_err, NULL},
};
@@ -157,7 +182,7 @@ void f2fs_msg(struct super_block *sb, const char *level, const char *fmt, ...)
va_start(args, fmt);
vaf.fmt = fmt;
vaf.va = &args;
- printk("%sF2FS-fs (%s): %pV\n", level, sb->s_id, &vaf);
+ printk_ratelimited("%sF2FS-fs (%s): %pV\n", level, sb->s_id, &vaf);
va_end(args);
}
@@ -168,6 +193,104 @@ static void init_once(void *foo)
inode_init_once(&fi->vfs_inode);
}
+#ifdef CONFIG_QUOTA
+static const char * const quotatypes[] = INITQFNAMES;
+#define QTYPE2NAME(t) (quotatypes[t])
+static int f2fs_set_qf_name(struct super_block *sb, int qtype,
+ substring_t *args)
+{
+ struct f2fs_sb_info *sbi = F2FS_SB(sb);
+ char *qname;
+ int ret = -EINVAL;
+
+ if (sb_any_quota_loaded(sb) && !sbi->s_qf_names[qtype]) {
+ f2fs_msg(sb, KERN_ERR,
+ "Cannot change journaled "
+ "quota options when quota turned on");
+ return -EINVAL;
+ }
+ qname = match_strdup(args);
+ if (!qname) {
+ f2fs_msg(sb, KERN_ERR,
+ "Not enough memory for storing quotafile name");
+ return -EINVAL;
+ }
+ if (sbi->s_qf_names[qtype]) {
+ if (strcmp(sbi->s_qf_names[qtype], qname) == 0)
+ ret = 0;
+ else
+ f2fs_msg(sb, KERN_ERR,
+ "%s quota file already specified",
+ QTYPE2NAME(qtype));
+ goto errout;
+ }
+ if (strchr(qname, '/')) {
+ f2fs_msg(sb, KERN_ERR,
+ "quotafile must be on filesystem root");
+ goto errout;
+ }
+ sbi->s_qf_names[qtype] = qname;
+ set_opt(sbi, QUOTA);
+ return 0;
+errout:
+ kfree(qname);
+ return ret;
+}
+
+static int f2fs_clear_qf_name(struct super_block *sb, int qtype)
+{
+ struct f2fs_sb_info *sbi = F2FS_SB(sb);
+
+ if (sb_any_quota_loaded(sb) && sbi->s_qf_names[qtype]) {
+ f2fs_msg(sb, KERN_ERR, "Cannot change journaled quota options"
+ " when quota turned on");
+ return -EINVAL;
+ }
+ kfree(sbi->s_qf_names[qtype]);
+ sbi->s_qf_names[qtype] = NULL;
+ return 0;
+}
+
+static int f2fs_check_quota_options(struct f2fs_sb_info *sbi)
+{
+ /*
+ * We do the test below only for project quotas. 'usrquota' and
+ * 'grpquota' mount options are allowed even without quota feature
+ * to support legacy quotas in quota files.
+ */
+ if (test_opt(sbi, PRJQUOTA) && !f2fs_sb_has_project_quota(sbi->sb)) {
+ f2fs_msg(sbi->sb, KERN_ERR, "Project quota feature not enabled. "
+ "Cannot enable project quota enforcement.");
+ return -1;
+ }
+ if (sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA] ||
+ sbi->s_qf_names[PRJQUOTA]) {
+ if (test_opt(sbi, USRQUOTA) && sbi->s_qf_names[USRQUOTA])
+ clear_opt(sbi, USRQUOTA);
+
+ if (test_opt(sbi, GRPQUOTA) && sbi->s_qf_names[GRPQUOTA])
+ clear_opt(sbi, GRPQUOTA);
+
+ if (test_opt(sbi, PRJQUOTA) && sbi->s_qf_names[PRJQUOTA])
+ clear_opt(sbi, PRJQUOTA);
+
+ if (test_opt(sbi, GRPQUOTA) || test_opt(sbi, USRQUOTA) ||
+ test_opt(sbi, PRJQUOTA)) {
+ f2fs_msg(sbi->sb, KERN_ERR, "old and new quota "
+ "format mixing");
+ return -1;
+ }
+
+ if (!sbi->s_jquota_fmt) {
+ f2fs_msg(sbi->sb, KERN_ERR, "journaled quota format "
+ "not specified");
+ return -1;
+ }
+ }
+ return 0;
+}
+#endif
+
static int parse_options(struct super_block *sb, char *options)
{
struct f2fs_sb_info *sbi = F2FS_SB(sb);
@@ -175,6 +298,9 @@ static int parse_options(struct super_block *sb, char *options)
substring_t args[MAX_OPT_ARGS];
char *p, *name;
int arg = 0;
+#ifdef CONFIG_QUOTA
+ int ret;
+#endif
if (!options)
return 0;
@@ -386,15 +512,76 @@ static int parse_options(struct super_block *sb, char *options)
sb->s_flags &= ~MS_LAZYTIME;
break;
#ifdef CONFIG_QUOTA
+ case Opt_quota:
case Opt_usrquota:
set_opt(sbi, USRQUOTA);
break;
case Opt_grpquota:
set_opt(sbi, GRPQUOTA);
break;
+ case Opt_prjquota:
+ set_opt(sbi, PRJQUOTA);
+ break;
+ case Opt_usrjquota:
+ ret = f2fs_set_qf_name(sb, USRQUOTA, &args[0]);
+ if (ret)
+ return ret;
+ break;
+ case Opt_grpjquota:
+ ret = f2fs_set_qf_name(sb, GRPQUOTA, &args[0]);
+ if (ret)
+ return ret;
+ break;
+ case Opt_prjjquota:
+ ret = f2fs_set_qf_name(sb, PRJQUOTA, &args[0]);
+ if (ret)
+ return ret;
+ break;
+ case Opt_offusrjquota:
+ ret = f2fs_clear_qf_name(sb, USRQUOTA);
+ if (ret)
+ return ret;
+ break;
+ case Opt_offgrpjquota:
+ ret = f2fs_clear_qf_name(sb, GRPQUOTA);
+ if (ret)
+ return ret;
+ break;
+ case Opt_offprjjquota:
+ ret = f2fs_clear_qf_name(sb, PRJQUOTA);
+ if (ret)
+ return ret;
+ break;
+ case Opt_jqfmt_vfsold:
+ sbi->s_jquota_fmt = QFMT_VFS_OLD;
+ break;
+ case Opt_jqfmt_vfsv0:
+ sbi->s_jquota_fmt = QFMT_VFS_V0;
+ break;
+ case Opt_jqfmt_vfsv1:
+ sbi->s_jquota_fmt = QFMT_VFS_V1;
+ break;
+ case Opt_noquota:
+ clear_opt(sbi, QUOTA);
+ clear_opt(sbi, USRQUOTA);
+ clear_opt(sbi, GRPQUOTA);
+ clear_opt(sbi, PRJQUOTA);
+ break;
#else
+ case Opt_quota:
case Opt_usrquota:
case Opt_grpquota:
+ case Opt_prjquota:
+ case Opt_usrjquota:
+ case Opt_grpjquota:
+ case Opt_prjjquota:
+ case Opt_offusrjquota:
+ case Opt_offgrpjquota:
+ case Opt_offprjjquota:
+ case Opt_jqfmt_vfsold:
+ case Opt_jqfmt_vfsv0:
+ case Opt_jqfmt_vfsv1:
+ case Opt_noquota:
f2fs_msg(sb, KERN_INFO,
"quota operations not supported");
break;
@@ -406,6 +593,10 @@ static int parse_options(struct super_block *sb, char *options)
return -EINVAL;
}
}
+#ifdef CONFIG_QUOTA
+ if (f2fs_check_quota_options(sbi))
+ return -EINVAL;
+#endif
if (F2FS_IO_SIZE_BITS(sbi) && !test_opt(sbi, LFS)) {
f2fs_msg(sb, KERN_ERR,
@@ -439,6 +630,7 @@ static struct inode *f2fs_alloc_inode(struct super_block *sb)
init_rwsem(&fi->dio_rwsem[READ]);
init_rwsem(&fi->dio_rwsem[WRITE]);
init_rwsem(&fi->i_mmap_sem);
+ init_rwsem(&fi->i_xattr_sem);
#ifdef CONFIG_QUOTA
memset(&fi->i_dquot, 0, sizeof(fi->i_dquot));
@@ -446,6 +638,7 @@ static struct inode *f2fs_alloc_inode(struct super_block *sb)
#endif
/* Will be used by directory only */
fi->i_dir_level = F2FS_SB(sb)->dir_level;
+
return &fi->vfs_inode;
}
@@ -584,7 +777,6 @@ static void destroy_device_list(struct f2fs_sb_info *sbi)
kfree(sbi->devs);
}
-static void f2fs_quota_off_umount(struct super_block *sb);
static void f2fs_put_super(struct super_block *sb)
{
struct f2fs_sb_info *sbi = F2FS_SB(sb);
@@ -642,7 +834,7 @@ static void f2fs_put_super(struct super_block *sb)
kfree(sbi->ckpt);
- f2fs_exit_sysfs(sbi);
+ f2fs_unregister_sysfs(sbi);
sb->s_fs_info = NULL;
if (sbi->s_chksum_driver)
@@ -651,6 +843,10 @@ static void f2fs_put_super(struct super_block *sb)
destroy_device_list(sbi);
mempool_destroy(sbi->write_io_dummy);
+#ifdef CONFIG_QUOTA
+ for (i = 0; i < MAXQUOTAS; i++)
+ kfree(sbi->s_qf_names[i]);
+#endif
destroy_percpu_info(sbi);
for (i = 0; i < NR_PAGE_TYPE; i++)
kfree(sbi->write_io[i]);
@@ -664,6 +860,9 @@ int f2fs_sync_fs(struct super_block *sb, int sync)
trace_f2fs_sync_fs(sb, sync);
+ if (unlikely(is_sbi_flag_set(sbi, SBI_POR_DOING)))
+ return -EAGAIN;
+
if (sync) {
struct cp_control cpc;
@@ -698,6 +897,48 @@ static int f2fs_unfreeze(struct super_block *sb)
return 0;
}
+#ifdef CONFIG_QUOTA
+static int f2fs_statfs_project(struct super_block *sb,
+ kprojid_t projid, struct kstatfs *buf)
+{
+ struct kqid qid;
+ struct dquot *dquot;
+ u64 limit;
+ u64 curblock;
+
+ qid = make_kqid_projid(projid);
+ dquot = dqget(sb, qid);
+ if (IS_ERR(dquot))
+ return PTR_ERR(dquot);
+ spin_lock(&dq_data_lock);
+
+ limit = (dquot->dq_dqb.dqb_bsoftlimit ?
+ dquot->dq_dqb.dqb_bsoftlimit :
+ dquot->dq_dqb.dqb_bhardlimit) >> sb->s_blocksize_bits;
+ if (limit && buf->f_blocks > limit) {
+ curblock = dquot->dq_dqb.dqb_curspace >> sb->s_blocksize_bits;
+ buf->f_blocks = limit;
+ buf->f_bfree = buf->f_bavail =
+ (buf->f_blocks > curblock) ?
+ (buf->f_blocks - curblock) : 0;
+ }
+
+ limit = dquot->dq_dqb.dqb_isoftlimit ?
+ dquot->dq_dqb.dqb_isoftlimit :
+ dquot->dq_dqb.dqb_ihardlimit;
+ if (limit && buf->f_files > limit) {
+ buf->f_files = limit;
+ buf->f_ffree =
+ (buf->f_files > dquot->dq_dqb.dqb_curinodes) ?
+ (buf->f_files - dquot->dq_dqb.dqb_curinodes) : 0;
+ }
+
+ spin_unlock(&dq_data_lock);
+ dqput(dquot);
+ return 0;
+}
+#endif
+
static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf)
{
struct super_block *sb = dentry->d_sb;
@@ -733,9 +974,49 @@ static int f2fs_statfs(struct dentry *dentry, struct kstatfs *buf)
buf->f_fsid.val[0] = (u32)id;
buf->f_fsid.val[1] = (u32)(id >> 32);
+#ifdef CONFIG_QUOTA
+ if (is_inode_flag_set(dentry->d_inode, FI_PROJ_INHERIT) &&
+ sb_has_quota_limits_enabled(sb, PRJQUOTA)) {
+ f2fs_statfs_project(sb, F2FS_I(dentry->d_inode)->i_projid, buf);
+ }
+#endif
return 0;
}
+static inline void f2fs_show_quota_options(struct seq_file *seq,
+ struct super_block *sb)
+{
+#ifdef CONFIG_QUOTA
+ struct f2fs_sb_info *sbi = F2FS_SB(sb);
+
+ if (sbi->s_jquota_fmt) {
+ char *fmtname = "";
+
+ switch (sbi->s_jquota_fmt) {
+ case QFMT_VFS_OLD:
+ fmtname = "vfsold";
+ break;
+ case QFMT_VFS_V0:
+ fmtname = "vfsv0";
+ break;
+ case QFMT_VFS_V1:
+ fmtname = "vfsv1";
+ break;
+ }
+ seq_printf(seq, ",jqfmt=%s", fmtname);
+ }
+
+ if (sbi->s_qf_names[USRQUOTA])
+ seq_show_option(seq, "usrjquota", sbi->s_qf_names[USRQUOTA]);
+
+ if (sbi->s_qf_names[GRPQUOTA])
+ seq_show_option(seq, "grpjquota", sbi->s_qf_names[GRPQUOTA]);
+
+ if (sbi->s_qf_names[PRJQUOTA])
+ seq_show_option(seq, "prjjquota", sbi->s_qf_names[PRJQUOTA]);
+#endif
+}
+
static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
{
struct f2fs_sb_info *sbi = F2FS_SB(root->d_sb);
@@ -809,11 +1090,16 @@ static int f2fs_show_options(struct seq_file *seq, struct dentry *root)
sbi->fault_info.inject_rate);
#endif
#ifdef CONFIG_QUOTA
+ if (test_opt(sbi, QUOTA))
+ seq_puts(seq, ",quota");
if (test_opt(sbi, USRQUOTA))
seq_puts(seq, ",usrquota");
if (test_opt(sbi, GRPQUOTA))
seq_puts(seq, ",grpquota");
+ if (test_opt(sbi, PRJQUOTA))
+ seq_puts(seq, ",prjquota");
#endif
+ f2fs_show_quota_options(seq, sbi->sb);
return 0;
}
@@ -862,6 +1148,11 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
#ifdef CONFIG_F2FS_FAULT_INJECTION
struct f2fs_fault_info ffi = sbi->fault_info;
#endif
+#ifdef CONFIG_QUOTA
+ int s_jquota_fmt;
+ char *s_qf_names[MAXQUOTAS];
+ int i, j;
+#endif
/*
* Save the old mount options in case we
@@ -871,6 +1162,23 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
old_sb_flags = sb->s_flags;
active_logs = sbi->active_logs;
+#ifdef CONFIG_QUOTA
+ s_jquota_fmt = sbi->s_jquota_fmt;
+ for (i = 0; i < MAXQUOTAS; i++) {
+ if (sbi->s_qf_names[i]) {
+ s_qf_names[i] = kstrdup(sbi->s_qf_names[i],
+ GFP_KERNEL);
+ if (!s_qf_names[i]) {
+ for (j = 0; j < i; j++)
+ kfree(s_qf_names[j]);
+ return -ENOMEM;
+ }
+ } else {
+ s_qf_names[i] = NULL;
+ }
+ }
+#endif
+
/* recover superblocks we couldn't write due to previous RO mount */
if (!(*flags & MS_RDONLY) && is_sbi_flag_set(sbi, SBI_NEED_SB_WRITE)) {
err = f2fs_commit_super(sbi, false);
@@ -952,6 +1260,11 @@ static int f2fs_remount(struct super_block *sb, int *flags, char *data)
goto restore_gc;
}
skip:
+#ifdef CONFIG_QUOTA
+ /* Release old quota file names */
+ for (i = 0; i < MAXQUOTAS; i++)
+ kfree(s_qf_names[i]);
+#endif
/* Update the POSIXACL Flag */
sb->s_flags = (sb->s_flags & ~MS_POSIXACL) |
(test_opt(sbi, POSIX_ACL) ? MS_POSIXACL : 0);
@@ -966,6 +1279,13 @@ restore_gc:
stop_gc_thread(sbi);
}
restore_opts:
+#ifdef CONFIG_QUOTA
+ sbi->s_jquota_fmt = s_jquota_fmt;
+ for (i = 0; i < MAXQUOTAS; i++) {
+ kfree(sbi->s_qf_names[i]);
+ sbi->s_qf_names[i] = s_qf_names[i];
+ }
+#endif
sbi->mount_opt = org_mount_opt;
sbi->active_logs = active_logs;
sb->s_flags = old_sb_flags;
@@ -1065,7 +1385,7 @@ static ssize_t f2fs_quota_write(struct super_block *sb, int type,
}
if (len == towrite)
- return err;
+ return 0;
inode->i_version++;
inode->i_mtime = inode->i_ctime = current_time(inode);
f2fs_mark_inode_dirty_sync(inode, false);
@@ -1082,6 +1402,27 @@ static qsize_t *f2fs_get_reserved_space(struct inode *inode)
return &F2FS_I(inode)->i_reserved_quota;
}
+static int f2fs_quota_on_mount(struct f2fs_sb_info *sbi, int type)
+{
+ return dquot_quota_on_mount(sbi->sb, sbi->s_qf_names[type],
+ sbi->s_jquota_fmt, type);
+}
+
+void f2fs_enable_quota_files(struct f2fs_sb_info *sbi)
+{
+ int i, ret;
+
+ for (i = 0; i < MAXQUOTAS; i++) {
+ if (sbi->s_qf_names[i]) {
+ ret = f2fs_quota_on_mount(sbi, i);
+ if (ret < 0)
+ f2fs_msg(sbi->sb, KERN_ERR,
+ "Cannot turn on journaled "
+ "quota: error %d", ret);
+ }
+ }
+}
+
static int f2fs_quota_sync(struct super_block *sb, int type)
{
struct quota_info *dqopt = sb_dqopt(sb);
@@ -1119,7 +1460,7 @@ static int f2fs_quota_on(struct super_block *sb, int type, int format_id,
struct inode *inode;
int err;
- err = f2fs_quota_sync(sb, -1);
+ err = f2fs_quota_sync(sb, type);
if (err)
return err;
@@ -1147,7 +1488,7 @@ static int f2fs_quota_off(struct super_block *sb, int type)
if (!inode || !igrab(inode))
return dquot_quota_off(sb, type);
- f2fs_quota_sync(sb, -1);
+ f2fs_quota_sync(sb, type);
err = dquot_quota_off(sb, type);
if (err)
@@ -1163,7 +1504,7 @@ out_put:
return err;
}
-static void f2fs_quota_off_umount(struct super_block *sb)
+void f2fs_quota_off_umount(struct super_block *sb)
{
int type;
@@ -1171,6 +1512,12 @@ static void f2fs_quota_off_umount(struct super_block *sb)
f2fs_quota_off(sb, type);
}
+int f2fs_get_projid(struct inode *inode, kprojid_t *projid)
+{
+ *projid = F2FS_I(inode)->i_projid;
+ return 0;
+}
+
static const struct dquot_operations f2fs_quota_operations = {
.get_reserved_space = f2fs_get_reserved_space,
.write_dquot = dquot_commit,
@@ -1180,6 +1527,7 @@ static const struct dquot_operations f2fs_quota_operations = {
.write_info = dquot_commit_info,
.alloc_dquot = dquot_alloc,
.destroy_dquot = dquot_destroy,
+ .get_projid = f2fs_get_projid,
.get_next_id = dquot_get_next_id,
};
@@ -1194,12 +1542,12 @@ static const struct quotactl_ops f2fs_quotactl_ops = {
.get_nextdqblk = dquot_get_next_dqblk,
};
#else
-static inline void f2fs_quota_off_umount(struct super_block *sb)
+void f2fs_quota_off_umount(struct super_block *sb)
{
}
#endif
-static struct super_operations f2fs_sops = {
+static const struct super_operations f2fs_sops = {
.alloc_inode = f2fs_alloc_inode,
.drop_inode = f2fs_drop_inode,
.destroy_inode = f2fs_destroy_inode,
@@ -1303,9 +1651,16 @@ static const struct export_operations f2fs_export_ops = {
static loff_t max_file_blocks(void)
{
- loff_t result = (DEF_ADDRS_PER_INODE - F2FS_INLINE_XATTR_ADDRS);
+ loff_t result = 0;
loff_t leaf_count = ADDRS_PER_BLOCK;
+ /*
+ * note: previously, result is equal to (DEF_ADDRS_PER_INODE -
+ * F2FS_INLINE_XATTR_ADDRS), but now f2fs try to reserve more
+ * space in inode.i_addr, it will be more safe to reassign
+ * result as zero.
+ */
+
/* two direct node blocks */
result += (leaf_count * 2);
@@ -1922,6 +2277,11 @@ try_onemore:
sb->s_fs_info = sbi;
sbi->raw_super = raw_super;
+ /* precompute checksum seed for metadata */
+ if (f2fs_sb_has_inode_chksum(sb))
+ sbi->s_chksum_seed = f2fs_chksum(sbi, ~0, raw_super->uuid,
+ sizeof(raw_super->uuid));
+
/*
* The BLKZONED feature indicates that the drive was formatted with
* zone alignment optimization. This is optional for host-aware
@@ -1956,7 +2316,7 @@ try_onemore:
#ifdef CONFIG_QUOTA
sb->dq_op = &f2fs_quota_operations;
sb->s_qcop = &f2fs_quotactl_ops;
- sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP;
+ sb->s_quota_types = QTYPE_MASK_USR | QTYPE_MASK_GRP | QTYPE_MASK_PRJ;
#endif
sb->s_op = &f2fs_sops;
@@ -1980,6 +2340,10 @@ try_onemore:
set_sbi_flag(sbi, SBI_POR_DOING);
spin_lock_init(&sbi->stat_lock);
+ /* init iostat info */
+ spin_lock_init(&sbi->iostat_lock);
+ sbi->iostat_enable = false;
+
for (i = 0; i < NR_PAGE_TYPE; i++) {
int n = (i == META) ? 1: NR_TEMP_TYPE;
int j;
@@ -2098,11 +2462,6 @@ try_onemore:
if (err)
goto free_nm;
- /* if there are nt orphan nodes free them */
- err = recover_orphan_inodes(sbi);
- if (err)
- goto free_node_inode;
-
/* read root inode and dentry */
root = f2fs_iget(sb, F2FS_ROOT_INO(sbi));
if (IS_ERR(root)) {
@@ -2122,10 +2481,15 @@ try_onemore:
goto free_root_inode;
}
- err = f2fs_init_sysfs(sbi);
+ err = f2fs_register_sysfs(sbi);
if (err)
goto free_root_inode;
+ /* if there are nt orphan nodes free them */
+ err = recover_orphan_inodes(sbi);
+ if (err)
+ goto free_sysfs;
+
/* recover fsynced data */
if (!test_opt(sbi, DISABLE_ROLL_FORWARD)) {
/*
@@ -2135,7 +2499,7 @@ try_onemore:
if (bdev_read_only(sb->s_bdev) &&
!is_set_ckpt_flags(sbi, CP_UMOUNT_FLAG)) {
err = -EROFS;
- goto free_sysfs;
+ goto free_meta;
}
if (need_fsck)
@@ -2149,7 +2513,7 @@ try_onemore:
need_fsck = true;
f2fs_msg(sb, KERN_ERR,
"Cannot recover all fsync data errno=%d", err);
- goto free_sysfs;
+ goto free_meta;
}
} else {
err = recover_fsync_data(sbi, true);
@@ -2173,7 +2537,7 @@ skip_recovery:
/* After POR, we can run background GC thread.*/
err = start_gc_thread(sbi);
if (err)
- goto free_sysfs;
+ goto free_meta;
}
kfree(options);
@@ -2191,9 +2555,17 @@ skip_recovery:
f2fs_update_time(sbi, REQ_TIME);
return 0;
-free_sysfs:
+free_meta:
f2fs_sync_inode_meta(sbi);
- f2fs_exit_sysfs(sbi);
+ /*
+ * Some dirty meta pages can be produced by recover_orphan_inodes()
+ * failed by EIO. Then, iput(node_inode) can trigger balance_fs_bg()
+ * followed by write_checkpoint() through f2fs_write_node_pages(), which
+ * falls into an infinite loop in sync_meta_pages().
+ */
+ truncate_inode_pages_final(META_MAPPING(sbi));
+free_sysfs:
+ f2fs_unregister_sysfs(sbi);
free_root_inode:
dput(sb->s_root);
sb->s_root = NULL;
@@ -2202,13 +2574,6 @@ free_node_inode:
mutex_lock(&sbi->umount_mutex);
release_ino_entry(sbi, true);
f2fs_leave_shrinker(sbi);
- /*
- * Some dirty meta pages can be produced by recover_orphan_inodes()
- * failed by EIO. Then, iput(node_inode) can trigger balance_fs_bg()
- * followed by write_checkpoint() through f2fs_write_node_pages(), which
- * falls into an infinite loop in sync_meta_pages().
- */
- truncate_inode_pages_final(META_MAPPING(sbi));
iput(sbi->node_inode);
mutex_unlock(&sbi->umount_mutex);
f2fs_destroy_stats(sbi);
@@ -2228,6 +2593,10 @@ free_options:
for (i = 0; i < NR_PAGE_TYPE; i++)
kfree(sbi->write_io[i]);
destroy_percpu_info(sbi);
+#ifdef CONFIG_QUOTA
+ for (i = 0; i < MAXQUOTAS; i++)
+ kfree(sbi->s_qf_names[i]);
+#endif
kfree(options);
free_sb_buf:
kfree(raw_super);
@@ -2311,7 +2680,7 @@ static int __init init_f2fs_fs(void)
err = create_extent_cache();
if (err)
goto free_checkpoint_caches;
- err = f2fs_register_sysfs();
+ err = f2fs_init_sysfs();
if (err)
goto free_extent_cache;
err = register_shrinker(&f2fs_shrinker_info);
@@ -2330,7 +2699,7 @@ free_filesystem:
free_shrinker:
unregister_shrinker(&f2fs_shrinker_info);
free_sysfs:
- f2fs_unregister_sysfs();
+ f2fs_exit_sysfs();
free_extent_cache:
destroy_extent_cache();
free_checkpoint_caches:
@@ -2350,7 +2719,7 @@ static void __exit exit_f2fs_fs(void)
f2fs_destroy_root_stats();
unregister_filesystem(&f2fs_fs_type);
unregister_shrinker(&f2fs_shrinker_info);
- f2fs_unregister_sysfs();
+ f2fs_exit_sysfs();
destroy_extent_cache();
destroy_checkpoint_caches();
destroy_segment_manager_caches();
diff --git a/fs/f2fs/sysfs.c b/fs/f2fs/sysfs.c
index 71191d89917d..e2c258f717cd 100644
--- a/fs/f2fs/sysfs.c
+++ b/fs/f2fs/sysfs.c
@@ -18,7 +18,6 @@
#include "gc.h"
static struct proc_dir_entry *f2fs_proc_root;
-static struct kset *f2fs_kset;
/* Sysfs support for f2fs */
enum {
@@ -41,6 +40,7 @@ struct f2fs_attr {
const char *, size_t);
int struct_type;
int offset;
+ int id;
};
static unsigned char *__struct_ptr(struct f2fs_sb_info *sbi, int struct_type)
@@ -76,6 +76,34 @@ static ssize_t lifetime_write_kbytes_show(struct f2fs_attr *a,
BD_PART_WRITTEN(sbi)));
}
+static ssize_t features_show(struct f2fs_attr *a,
+ struct f2fs_sb_info *sbi, char *buf)
+{
+ struct super_block *sb = sbi->sb;
+ int len = 0;
+
+ if (!sb->s_bdev->bd_part)
+ return snprintf(buf, PAGE_SIZE, "0\n");
+
+ if (f2fs_sb_has_crypto(sb))
+ len += snprintf(buf, PAGE_SIZE - len, "%s",
+ "encryption");
+ if (f2fs_sb_mounted_blkzoned(sb))
+ len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
+ len ? ", " : "", "blkzoned");
+ if (f2fs_sb_has_extra_attr(sb))
+ len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
+ len ? ", " : "", "extra_attr");
+ if (f2fs_sb_has_project_quota(sb))
+ len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
+ len ? ", " : "", "projquota");
+ if (f2fs_sb_has_inode_chksum(sb))
+ len += snprintf(buf + len, PAGE_SIZE - len, "%s%s",
+ len ? ", " : "", "inode_checksum");
+ len += snprintf(buf + len, PAGE_SIZE - len, "\n");
+ return len;
+}
+
static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
struct f2fs_sb_info *sbi, char *buf)
{
@@ -124,7 +152,39 @@ static ssize_t f2fs_sbi_store(struct f2fs_attr *a,
spin_unlock(&sbi->stat_lock);
return count;
}
+
+ if (!strcmp(a->attr.name, "discard_granularity")) {
+ struct discard_cmd_control *dcc = SM_I(sbi)->dcc_info;
+ int i;
+
+ if (t == 0 || t > MAX_PLIST_NUM)
+ return -EINVAL;
+ if (t == *ui)
+ return count;
+
+ mutex_lock(&dcc->cmd_lock);
+ for (i = 0; i < MAX_PLIST_NUM; i++) {
+ if (i >= t - 1)
+ dcc->pend_list_tag[i] |= P_ACTIVE;
+ else
+ dcc->pend_list_tag[i] &= (~P_ACTIVE);
+ }
+ mutex_unlock(&dcc->cmd_lock);
+
+ *ui = t;
+ return count;
+ }
+
*ui = t;
+
+ if (!strcmp(a->attr.name, "iostat_enable") && *ui == 0)
+ f2fs_reset_iostat(sbi);
+ if (!strcmp(a->attr.name, "gc_urgent") && t == 1 && sbi->gc_thread) {
+ sbi->gc_thread->gc_wake = 1;
+ wake_up_interruptible_all(&sbi->gc_thread->gc_wait_queue_head);
+ wake_up_discard_thread(sbi, true);
+ }
+
return count;
}
@@ -155,6 +215,30 @@ static void f2fs_sb_release(struct kobject *kobj)
complete(&sbi->s_kobj_unregister);
}
+enum feat_id {
+ FEAT_CRYPTO = 0,
+ FEAT_BLKZONED,
+ FEAT_ATOMIC_WRITE,
+ FEAT_EXTRA_ATTR,
+ FEAT_PROJECT_QUOTA,
+ FEAT_INODE_CHECKSUM,
+};
+
+static ssize_t f2fs_feature_show(struct f2fs_attr *a,
+ struct f2fs_sb_info *sbi, char *buf)
+{
+ switch (a->id) {
+ case FEAT_CRYPTO:
+ case FEAT_BLKZONED:
+ case FEAT_ATOMIC_WRITE:
+ case FEAT_EXTRA_ATTR:
+ case FEAT_PROJECT_QUOTA:
+ case FEAT_INODE_CHECKSUM:
+ return snprintf(buf, PAGE_SIZE, "supported\n");
+ }
+ return 0;
+}
+
#define F2FS_ATTR_OFFSET(_struct_type, _name, _mode, _show, _store, _offset) \
static struct f2fs_attr f2fs_attr_##_name = { \
.attr = {.name = __stringify(_name), .mode = _mode }, \
@@ -172,12 +256,23 @@ static struct f2fs_attr f2fs_attr_##_name = { \
#define F2FS_GENERAL_RO_ATTR(name) \
static struct f2fs_attr f2fs_attr_##name = __ATTR(name, 0444, name##_show, NULL)
+#define F2FS_FEATURE_RO_ATTR(_name, _id) \
+static struct f2fs_attr f2fs_attr_##_name = { \
+ .attr = {.name = __stringify(_name), .mode = 0444 }, \
+ .show = f2fs_feature_show, \
+ .id = _id, \
+}
+
+F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_urgent_sleep_time,
+ urgent_sleep_time);
F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_min_sleep_time, min_sleep_time);
F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_max_sleep_time, max_sleep_time);
F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_no_gc_sleep_time, no_gc_sleep_time);
F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_idle, gc_idle);
+F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_urgent, gc_urgent);
F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, reclaim_segments, rec_prefree_segments);
F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_small_discards, max_discards);
+F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_granularity, discard_granularity);
F2FS_RW_ATTR(RESERVED_BLOCKS, f2fs_sb_info, reserved_blocks, reserved_blocks);
F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, batched_trim_sections, trim_sections);
F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, ipu_policy, ipu_policy);
@@ -191,20 +286,36 @@ F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_victim_search, max_victim_search);
F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, dir_level, dir_level);
F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, cp_interval, interval_time[CP_TIME]);
F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, idle_interval, interval_time[REQ_TIME]);
+F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, iostat_enable, iostat_enable);
#ifdef CONFIG_F2FS_FAULT_INJECTION
F2FS_RW_ATTR(FAULT_INFO_RATE, f2fs_fault_info, inject_rate, inject_rate);
F2FS_RW_ATTR(FAULT_INFO_TYPE, f2fs_fault_info, inject_type, inject_type);
#endif
F2FS_GENERAL_RO_ATTR(lifetime_write_kbytes);
+F2FS_GENERAL_RO_ATTR(features);
+
+#ifdef CONFIG_F2FS_FS_ENCRYPTION
+F2FS_FEATURE_RO_ATTR(encryption, FEAT_CRYPTO);
+#endif
+#ifdef CONFIG_BLK_DEV_ZONED
+F2FS_FEATURE_RO_ATTR(block_zoned, FEAT_BLKZONED);
+#endif
+F2FS_FEATURE_RO_ATTR(atomic_write, FEAT_ATOMIC_WRITE);
+F2FS_FEATURE_RO_ATTR(extra_attr, FEAT_EXTRA_ATTR);
+F2FS_FEATURE_RO_ATTR(project_quota, FEAT_PROJECT_QUOTA);
+F2FS_FEATURE_RO_ATTR(inode_checksum, FEAT_INODE_CHECKSUM);
#define ATTR_LIST(name) (&f2fs_attr_##name.attr)
static struct attribute *f2fs_attrs[] = {
+ ATTR_LIST(gc_urgent_sleep_time),
ATTR_LIST(gc_min_sleep_time),
ATTR_LIST(gc_max_sleep_time),
ATTR_LIST(gc_no_gc_sleep_time),
ATTR_LIST(gc_idle),
+ ATTR_LIST(gc_urgent),
ATTR_LIST(reclaim_segments),
ATTR_LIST(max_small_discards),
+ ATTR_LIST(discard_granularity),
ATTR_LIST(batched_trim_sections),
ATTR_LIST(ipu_policy),
ATTR_LIST(min_ipu_util),
@@ -217,26 +328,59 @@ static struct attribute *f2fs_attrs[] = {
ATTR_LIST(dirty_nats_ratio),
ATTR_LIST(cp_interval),
ATTR_LIST(idle_interval),
+ ATTR_LIST(iostat_enable),
#ifdef CONFIG_F2FS_FAULT_INJECTION
ATTR_LIST(inject_rate),
ATTR_LIST(inject_type),
#endif
ATTR_LIST(lifetime_write_kbytes),
+ ATTR_LIST(features),
ATTR_LIST(reserved_blocks),
NULL,
};
+static struct attribute *f2fs_feat_attrs[] = {
+#ifdef CONFIG_F2FS_FS_ENCRYPTION
+ ATTR_LIST(encryption),
+#endif
+#ifdef CONFIG_BLK_DEV_ZONED
+ ATTR_LIST(block_zoned),
+#endif
+ ATTR_LIST(atomic_write),
+ ATTR_LIST(extra_attr),
+ ATTR_LIST(project_quota),
+ ATTR_LIST(inode_checksum),
+ NULL,
+};
+
static const struct sysfs_ops f2fs_attr_ops = {
.show = f2fs_attr_show,
.store = f2fs_attr_store,
};
-static struct kobj_type f2fs_ktype = {
+static struct kobj_type f2fs_sb_ktype = {
.default_attrs = f2fs_attrs,
.sysfs_ops = &f2fs_attr_ops,
.release = f2fs_sb_release,
};
+static struct kobj_type f2fs_ktype = {
+ .sysfs_ops = &f2fs_attr_ops,
+};
+
+static struct kset f2fs_kset = {
+ .kobj = {.ktype = &f2fs_ktype},
+};
+
+static struct kobj_type f2fs_feat_ktype = {
+ .default_attrs = f2fs_feat_attrs,
+ .sysfs_ops = &f2fs_attr_ops,
+};
+
+static struct kobject f2fs_feat = {
+ .kset = &f2fs_kset,
+};
+
static int segment_info_seq_show(struct seq_file *seq, void *offset)
{
struct super_block *sb = seq->private;
@@ -288,6 +432,48 @@ static int segment_bits_seq_show(struct seq_file *seq, void *offset)
return 0;
}
+static int iostat_info_seq_show(struct seq_file *seq, void *offset)
+{
+ struct super_block *sb = seq->private;
+ struct f2fs_sb_info *sbi = F2FS_SB(sb);
+ time64_t now = ktime_get_real_seconds();
+
+ if (!sbi->iostat_enable)
+ return 0;
+
+ seq_printf(seq, "time: %-16llu\n", now);
+
+ /* print app IOs */
+ seq_printf(seq, "app buffered: %-16llu\n",
+ sbi->write_iostat[APP_BUFFERED_IO]);
+ seq_printf(seq, "app direct: %-16llu\n",
+ sbi->write_iostat[APP_DIRECT_IO]);
+ seq_printf(seq, "app mapped: %-16llu\n",
+ sbi->write_iostat[APP_MAPPED_IO]);
+
+ /* print fs IOs */
+ seq_printf(seq, "fs data: %-16llu\n",
+ sbi->write_iostat[FS_DATA_IO]);
+ seq_printf(seq, "fs node: %-16llu\n",
+ sbi->write_iostat[FS_NODE_IO]);
+ seq_printf(seq, "fs meta: %-16llu\n",
+ sbi->write_iostat[FS_META_IO]);
+ seq_printf(seq, "fs gc data: %-16llu\n",
+ sbi->write_iostat[FS_GC_DATA_IO]);
+ seq_printf(seq, "fs gc node: %-16llu\n",
+ sbi->write_iostat[FS_GC_NODE_IO]);
+ seq_printf(seq, "fs cp data: %-16llu\n",
+ sbi->write_iostat[FS_CP_DATA_IO]);
+ seq_printf(seq, "fs cp node: %-16llu\n",
+ sbi->write_iostat[FS_CP_NODE_IO]);
+ seq_printf(seq, "fs cp meta: %-16llu\n",
+ sbi->write_iostat[FS_CP_META_IO]);
+ seq_printf(seq, "fs discard: %-16llu\n",
+ sbi->write_iostat[FS_DISCARD]);
+
+ return 0;
+}
+
#define F2FS_PROC_FILE_DEF(_name) \
static int _name##_open_fs(struct inode *inode, struct file *file) \
{ \
@@ -303,28 +489,47 @@ static const struct file_operations f2fs_seq_##_name##_fops = { \
F2FS_PROC_FILE_DEF(segment_info);
F2FS_PROC_FILE_DEF(segment_bits);
+F2FS_PROC_FILE_DEF(iostat_info);
-int __init f2fs_register_sysfs(void)
+int __init f2fs_init_sysfs(void)
{
- f2fs_proc_root = proc_mkdir("fs/f2fs", NULL);
+ int ret;
- f2fs_kset = kset_create_and_add("f2fs", NULL, fs_kobj);
- if (!f2fs_kset)
- return -ENOMEM;
- return 0;
+ kobject_set_name(&f2fs_kset.kobj, "f2fs");
+ f2fs_kset.kobj.parent = fs_kobj;
+ ret = kset_register(&f2fs_kset);
+ if (ret)
+ return ret;
+
+ ret = kobject_init_and_add(&f2fs_feat, &f2fs_feat_ktype,
+ NULL, "features");
+ if (ret)
+ kset_unregister(&f2fs_kset);
+ else
+ f2fs_proc_root = proc_mkdir("fs/f2fs", NULL);
+ return ret;
}
-void f2fs_unregister_sysfs(void)
+void f2fs_exit_sysfs(void)
{
- kset_unregister(f2fs_kset);
+ kobject_put(&f2fs_feat);
+ kset_unregister(&f2fs_kset);
remove_proc_entry("fs/f2fs", NULL);
+ f2fs_proc_root = NULL;
}
-int f2fs_init_sysfs(struct f2fs_sb_info *sbi)
+int f2fs_register_sysfs(struct f2fs_sb_info *sbi)
{
struct super_block *sb = sbi->sb;
int err;
+ sbi->s_kobj.kset = &f2fs_kset;
+ init_completion(&sbi->s_kobj_unregister);
+ err = kobject_init_and_add(&sbi->s_kobj, &f2fs_sb_ktype, NULL,
+ "%s", sb->s_id);
+ if (err)
+ return err;
+
if (f2fs_proc_root)
sbi->s_proc = proc_mkdir(sb->s_id, f2fs_proc_root);
@@ -333,33 +538,19 @@ int f2fs_init_sysfs(struct f2fs_sb_info *sbi)
&f2fs_seq_segment_info_fops, sb);
proc_create_data("segment_bits", S_IRUGO, sbi->s_proc,
&f2fs_seq_segment_bits_fops, sb);
+ proc_create_data("iostat_info", S_IRUGO, sbi->s_proc,
+ &f2fs_seq_iostat_info_fops, sb);
}
-
- sbi->s_kobj.kset = f2fs_kset;
- init_completion(&sbi->s_kobj_unregister);
- err = kobject_init_and_add(&sbi->s_kobj, &f2fs_ktype, NULL,
- "%s", sb->s_id);
- if (err)
- goto err_out;
return 0;
-err_out:
- if (sbi->s_proc) {
- remove_proc_entry("segment_info", sbi->s_proc);
- remove_proc_entry("segment_bits", sbi->s_proc);
- remove_proc_entry(sb->s_id, f2fs_proc_root);
- }
- return err;
}
-void f2fs_exit_sysfs(struct f2fs_sb_info *sbi)
+void f2fs_unregister_sysfs(struct f2fs_sb_info *sbi)
{
- kobject_del(&sbi->s_kobj);
- kobject_put(&sbi->s_kobj);
- wait_for_completion(&sbi->s_kobj_unregister);
-
if (sbi->s_proc) {
+ remove_proc_entry("iostat_info", sbi->s_proc);
remove_proc_entry("segment_info", sbi->s_proc);
remove_proc_entry("segment_bits", sbi->s_proc);
remove_proc_entry(sbi->sb->s_id, f2fs_proc_root);
}
+ kobject_del(&sbi->s_kobj);
}
diff --git a/fs/f2fs/xattr.c b/fs/f2fs/xattr.c
index 832c5110abab..7c65540148f8 100644
--- a/fs/f2fs/xattr.c
+++ b/fs/f2fs/xattr.c
@@ -442,7 +442,7 @@ static inline int write_all_xattrs(struct inode *inode, __u32 hsize,
} else {
struct dnode_of_data dn;
set_new_dnode(&dn, inode, NULL, NULL, new_nid);
- xpage = new_node_page(&dn, XATTR_NODE_OFFSET, ipage);
+ xpage = new_node_page(&dn, XATTR_NODE_OFFSET);
if (IS_ERR(xpage)) {
alloc_nid_failed(sbi, new_nid);
return PTR_ERR(xpage);
@@ -473,8 +473,10 @@ int f2fs_getxattr(struct inode *inode, int index, const char *name,
if (len > F2FS_NAME_LEN)
return -ERANGE;
+ down_read(&F2FS_I(inode)->i_xattr_sem);
error = lookup_all_xattrs(inode, ipage, index, len, name,
&entry, &base_addr);
+ up_read(&F2FS_I(inode)->i_xattr_sem);
if (error)
return error;
@@ -503,7 +505,9 @@ ssize_t f2fs_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size)
int error = 0;
size_t rest = buffer_size;
+ down_read(&F2FS_I(inode)->i_xattr_sem);
error = read_all_xattrs(inode, NULL, &base_addr);
+ up_read(&F2FS_I(inode)->i_xattr_sem);
if (error)
return error;
@@ -686,7 +690,9 @@ int f2fs_setxattr(struct inode *inode, int index, const char *name,
f2fs_lock_op(sbi);
/* protect xattr_ver */
down_write(&F2FS_I(inode)->i_sem);
+ down_write(&F2FS_I(inode)->i_xattr_sem);
err = __f2fs_setxattr(inode, index, name, value, size, ipage, flags);
+ up_write(&F2FS_I(inode)->i_xattr_sem);
up_write(&F2FS_I(inode)->i_sem);
f2fs_unlock_op(sbi);
diff --git a/fs/fat/fatent.c b/fs/fat/fatent.c
index 1d9a8c4e9de0..48b2336692f9 100644
--- a/fs/fat/fatent.c
+++ b/fs/fat/fatent.c
@@ -309,7 +309,7 @@ static void mark_fsinfo_dirty(struct super_block *sb)
{
struct msdos_sb_info *sbi = MSDOS_SB(sb);
- if (sb->s_flags & MS_RDONLY || sbi->fat_bits != 32)
+ if (sb_rdonly(sb) || sbi->fat_bits != 32)
return;
__mark_inode_dirty(sbi->fsinfo_inode, I_DIRTY_SYNC);
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index a2c05f2ada6d..30c52394a7ad 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -657,7 +657,7 @@ static void fat_set_state(struct super_block *sb,
struct msdos_sb_info *sbi = MSDOS_SB(sb);
/* do not change any thing if mounted read only */
- if ((sb->s_flags & MS_RDONLY) && !force)
+ if (sb_rdonly(sb) && !force)
return;
/* do not change state if fs was dirty */
@@ -787,7 +787,7 @@ static int fat_remount(struct super_block *sb, int *flags, char *data)
/* make sure we update state on remount. */
new_rdonly = *flags & MS_RDONLY;
- if (new_rdonly != (sb->s_flags & MS_RDONLY)) {
+ if (new_rdonly != sb_rdonly(sb)) {
if (new_rdonly)
fat_set_state(sb, 0, 0);
else
diff --git a/fs/fat/misc.c b/fs/fat/misc.c
index 8a8698119ff7..acc3aa30ee54 100644
--- a/fs/fat/misc.c
+++ b/fs/fat/misc.c
@@ -32,7 +32,7 @@ void __fat_fs_error(struct super_block *sb, int report, const char *fmt, ...)
if (opts->errors == FAT_ERRORS_PANIC)
panic("FAT-fs (%s): fs panic from previous error\n", sb->s_id);
- else if (opts->errors == FAT_ERRORS_RO && !(sb->s_flags & MS_RDONLY)) {
+ else if (opts->errors == FAT_ERRORS_RO && !sb_rdonly(sb)) {
sb->s_flags |= MS_RDONLY;
fat_msg(sb, KERN_ERR, "Filesystem has been set read-only");
}
diff --git a/fs/file_table.c b/fs/file_table.c
index 72e861a35a7f..61517f57f8ef 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
@@ -233,12 +233,10 @@ static LLIST_HEAD(delayed_fput_list);
static void delayed_fput(struct work_struct *unused)
{
struct llist_node *node = llist_del_all(&delayed_fput_list);
- struct llist_node *next;
+ struct file *f, *t;
- for (; node; node = next) {
- next = llist_next(node);
- __fput(llist_entry(node, struct file, f_u.fu_llist));
- }
+ llist_for_each_entry_safe(f, t, node, f_u.fu_llist)
+ __fput(f);
}
static void ____fput(struct callback_head *work)
@@ -312,7 +310,7 @@ void put_filp(struct file *file)
}
void __init files_init(void)
-{
+{
filp_cachep = kmem_cache_create("filp", sizeof(struct file), 0,
SLAB_HWCACHE_ALIGN | SLAB_PANIC, NULL);
percpu_counter_init(&nr_files, 0, GFP_KERNEL);
@@ -331,4 +329,4 @@ void __init files_maxfiles_init(void)
n = ((totalram_pages - memreserve) * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = max_t(unsigned long, n, NR_FILE);
-}
+}
diff --git a/fs/fscache/object-list.c b/fs/fscache/object-list.c
index 67f940892ef8..b5ab06fabc60 100644
--- a/fs/fscache/object-list.c
+++ b/fs/fscache/object-list.c
@@ -262,7 +262,8 @@ static int fscache_objlist_show(struct seq_file *m, void *v)
type = "DT";
break;
default:
- sprintf(_type, "%02u", cookie->def->type);
+ snprintf(_type, sizeof(_type), "%02u",
+ cookie->def->type);
type = _type;
break;
}
diff --git a/fs/fuse/cuse.c b/fs/fuse/cuse.c
index c5b6b7165489..e9e97803442a 100644
--- a/fs/fuse/cuse.c
+++ b/fs/fuse/cuse.c
@@ -90,7 +90,7 @@ static struct list_head *cuse_conntbl_head(dev_t devt)
static ssize_t cuse_read_iter(struct kiocb *kiocb, struct iov_iter *to)
{
- struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(kiocb->ki_filp);
+ struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(kiocb);
loff_t pos = 0;
return fuse_direct_io(&io, to, &pos, FUSE_DIO_CUSE);
@@ -98,7 +98,7 @@ static ssize_t cuse_read_iter(struct kiocb *kiocb, struct iov_iter *to)
static ssize_t cuse_write_iter(struct kiocb *kiocb, struct iov_iter *from)
{
- struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(kiocb->ki_filp);
+ struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(kiocb);
loff_t pos = 0;
/*
* No locking or generic_write_checks(), the server is
diff --git a/fs/fuse/dev.c b/fs/fuse/dev.c
index c16d00e53264..13c65dd2d37d 100644
--- a/fs/fuse/dev.c
+++ b/fs/fuse/dev.c
@@ -1222,9 +1222,6 @@ static ssize_t fuse_dev_do_read(struct fuse_dev *fud, struct file *file,
struct fuse_in *in;
unsigned reqsize;
- if (task_active_pid_ns(current) != fc->pid_ns)
- return -EIO;
-
restart:
spin_lock(&fiq->waitq.lock);
err = -EAGAIN;
@@ -1262,6 +1259,13 @@ static ssize_t fuse_dev_do_read(struct fuse_dev *fud, struct file *file,
in = &req->in;
reqsize = in->h.len;
+
+ if (task_active_pid_ns(current) != fc->pid_ns) {
+ rcu_read_lock();
+ in->h.pid = pid_vnr(find_pid_ns(in->h.pid, fc->pid_ns));
+ rcu_read_unlock();
+ }
+
/* If request is too large, reply with an error and restart the read */
if (nbytes < reqsize) {
req->out.h.error = -EIO;
@@ -1823,9 +1827,6 @@ static ssize_t fuse_dev_do_write(struct fuse_dev *fud,
struct fuse_req *req;
struct fuse_out_header oh;
- if (task_active_pid_ns(current) != fc->pid_ns)
- return -EIO;
-
if (nbytes < sizeof(struct fuse_out_header))
return -EINVAL;
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c
index 00800c07ba1c..622081b97426 100644
--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -923,33 +923,29 @@ static int fuse_do_getattr(struct inode *inode, struct kstat *stat,
return err;
}
-int fuse_update_attributes(struct inode *inode, struct kstat *stat,
- struct file *file, bool *refreshed)
+static int fuse_update_get_attr(struct inode *inode, struct file *file,
+ struct kstat *stat)
{
struct fuse_inode *fi = get_fuse_inode(inode);
- int err;
- bool r;
+ int err = 0;
if (time_before64(fi->i_time, get_jiffies_64())) {
- r = true;
forget_all_cached_acls(inode);
err = fuse_do_getattr(inode, stat, file);
- } else {
- r = false;
- err = 0;
- if (stat) {
- generic_fillattr(inode, stat);
- stat->mode = fi->orig_i_mode;
- stat->ino = fi->orig_ino;
- }
+ } else if (stat) {
+ generic_fillattr(inode, stat);
+ stat->mode = fi->orig_i_mode;
+ stat->ino = fi->orig_ino;
}
- if (refreshed != NULL)
- *refreshed = r;
-
return err;
}
+int fuse_update_attributes(struct inode *inode, struct file *file)
+{
+ return fuse_update_get_attr(inode, file, NULL);
+}
+
int fuse_reverse_inval_entry(struct super_block *sb, u64 parent_nodeid,
u64 child_nodeid, struct qstr *name)
{
@@ -1786,7 +1782,7 @@ static int fuse_getattr(const struct path *path, struct kstat *stat,
if (!fuse_allow_current_process(fc))
return -EACCES;
- return fuse_update_attributes(inode, stat, NULL, NULL);
+ return fuse_update_get_attr(inode, NULL, stat);
}
static const struct inode_operations fuse_dir_inode_operations = {
diff --git a/fs/fuse/file.c b/fs/fuse/file.c
index d66789804287..cb7dff5c45d7 100644
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -645,7 +645,7 @@ static size_t fuse_async_req_send(struct fuse_conn *fc, struct fuse_req *req,
static size_t fuse_send_read(struct fuse_req *req, struct fuse_io_priv *io,
loff_t pos, size_t count, fl_owner_t owner)
{
- struct file *file = io->file;
+ struct file *file = io->iocb->ki_filp;
struct fuse_file *ff = file->private_data;
struct fuse_conn *fc = ff->fc;
@@ -707,7 +707,8 @@ static void fuse_short_read(struct fuse_req *req, struct inode *inode,
static int fuse_do_readpage(struct file *file, struct page *page)
{
- struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(file);
+ struct kiocb iocb;
+ struct fuse_io_priv io;
struct inode *inode = page->mapping->host;
struct fuse_conn *fc = get_fuse_conn(inode);
struct fuse_req *req;
@@ -735,6 +736,8 @@ static int fuse_do_readpage(struct file *file, struct page *page)
req->num_pages = 1;
req->pages[0] = page;
req->page_descs[0].length = count;
+ init_sync_kiocb(&iocb, file);
+ io = (struct fuse_io_priv) FUSE_IO_PRIV_SYNC(&iocb);
num_read = fuse_send_read(req, &io, pos, count, NULL);
err = req->out.h.error;
@@ -923,7 +926,7 @@ static ssize_t fuse_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
if (fc->auto_inval_data ||
(iocb->ki_pos + iov_iter_count(to) > i_size_read(inode))) {
int err;
- err = fuse_update_attributes(inode, NULL, iocb->ki_filp, NULL);
+ err = fuse_update_attributes(inode, iocb->ki_filp);
if (err)
return err;
}
@@ -957,13 +960,18 @@ static void fuse_write_fill(struct fuse_req *req, struct fuse_file *ff,
static size_t fuse_send_write(struct fuse_req *req, struct fuse_io_priv *io,
loff_t pos, size_t count, fl_owner_t owner)
{
- struct file *file = io->file;
+ struct kiocb *iocb = io->iocb;
+ struct file *file = iocb->ki_filp;
struct fuse_file *ff = file->private_data;
struct fuse_conn *fc = ff->fc;
struct fuse_write_in *inarg = &req->misc.write.in;
fuse_write_fill(req, ff, pos, count);
inarg->flags = file->f_flags;
+ if (iocb->ki_flags & IOCB_DSYNC)
+ inarg->flags |= O_DSYNC;
+ if (iocb->ki_flags & IOCB_SYNC)
+ inarg->flags |= O_SYNC;
if (owner != NULL) {
inarg->write_flags |= FUSE_WRITE_LOCKOWNER;
inarg->lock_owner = fuse_lock_owner_id(fc, owner);
@@ -993,14 +1001,14 @@ bool fuse_write_update_size(struct inode *inode, loff_t pos)
return ret;
}
-static size_t fuse_send_write_pages(struct fuse_req *req, struct file *file,
+static size_t fuse_send_write_pages(struct fuse_req *req, struct kiocb *iocb,
struct inode *inode, loff_t pos,
size_t count)
{
size_t res;
unsigned offset;
unsigned i;
- struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(file);
+ struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb);
for (i = 0; i < req->num_pages; i++)
fuse_wait_on_page_writeback(inode, req->pages[i]->index);
@@ -1100,7 +1108,7 @@ static inline unsigned fuse_wr_pages(loff_t pos, size_t len)
FUSE_MAX_PAGES_PER_REQ);
}
-static ssize_t fuse_perform_write(struct file *file,
+static ssize_t fuse_perform_write(struct kiocb *iocb,
struct address_space *mapping,
struct iov_iter *ii, loff_t pos)
{
@@ -1133,7 +1141,7 @@ static ssize_t fuse_perform_write(struct file *file,
} else {
size_t num_written;
- num_written = fuse_send_write_pages(req, file, inode,
+ num_written = fuse_send_write_pages(req, iocb, inode,
pos, count);
err = req->out.h.error;
if (!err) {
@@ -1169,7 +1177,7 @@ static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
if (get_fuse_conn(inode)->writeback_cache) {
/* Update size (EOF optimization) and mode (SUID clearing) */
- err = fuse_update_attributes(mapping->host, NULL, file, NULL);
+ err = fuse_update_attributes(mapping->host, file);
if (err)
return err;
@@ -1201,7 +1209,7 @@ static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
pos += written;
- written_buffered = fuse_perform_write(file, mapping, from, pos);
+ written_buffered = fuse_perform_write(iocb, mapping, from, pos);
if (written_buffered < 0) {
err = written_buffered;
goto out;
@@ -1220,13 +1228,15 @@ static ssize_t fuse_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
written += written_buffered;
iocb->ki_pos = pos + written_buffered;
} else {
- written = fuse_perform_write(file, mapping, from, iocb->ki_pos);
+ written = fuse_perform_write(iocb, mapping, from, iocb->ki_pos);
if (written >= 0)
iocb->ki_pos += written;
}
out:
current->backing_dev_info = NULL;
inode_unlock(inode);
+ if (written > 0)
+ written = generic_write_sync(iocb, written);
return written ? written : err;
}
@@ -1317,7 +1327,7 @@ ssize_t fuse_direct_io(struct fuse_io_priv *io, struct iov_iter *iter,
{
int write = flags & FUSE_DIO_WRITE;
int cuse = flags & FUSE_DIO_CUSE;
- struct file *file = io->file;
+ struct file *file = io->iocb->ki_filp;
struct inode *inode = file->f_mapping->host;
struct fuse_file *ff = file->private_data;
struct fuse_conn *fc = ff->fc;
@@ -1399,8 +1409,7 @@ static ssize_t __fuse_direct_read(struct fuse_io_priv *io,
loff_t *ppos)
{
ssize_t res;
- struct file *file = io->file;
- struct inode *inode = file_inode(file);
+ struct inode *inode = file_inode(io->iocb->ki_filp);
if (is_bad_inode(inode))
return -EIO;
@@ -1414,15 +1423,14 @@ static ssize_t __fuse_direct_read(struct fuse_io_priv *io,
static ssize_t fuse_direct_read_iter(struct kiocb *iocb, struct iov_iter *to)
{
- struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb->ki_filp);
+ struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb);
return __fuse_direct_read(&io, to, &iocb->ki_pos);
}
static ssize_t fuse_direct_write_iter(struct kiocb *iocb, struct iov_iter *from)
{
- struct file *file = iocb->ki_filp;
- struct inode *inode = file_inode(file);
- struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(file);
+ struct inode *inode = file_inode(iocb->ki_filp);
+ struct fuse_io_priv io = FUSE_IO_PRIV_SYNC(iocb);
ssize_t res;
if (is_bad_inode(inode))
@@ -2181,9 +2189,6 @@ static int fuse_setlk(struct file *file, struct file_lock *fl, int flock)
if ((fl->fl_flags & FL_CLOSE_POSIX) == FL_CLOSE_POSIX)
return 0;
- if (pid && pid_nr == 0)
- return -EOVERFLOW;
-
fuse_lk_fill(&args, file, fl, opcode, pid_nr, flock, &inarg);
err = fuse_simple_request(fc, &args);
@@ -2303,7 +2308,7 @@ static loff_t fuse_lseek(struct file *file, loff_t offset, int whence)
return vfs_setpos(file, outarg.offset, inode->i_sb->s_maxbytes);
fallback:
- err = fuse_update_attributes(inode, NULL, file, NULL);
+ err = fuse_update_attributes(inode, file);
if (!err)
return generic_file_llseek(file, offset, whence);
else
@@ -2323,7 +2328,7 @@ static loff_t fuse_file_llseek(struct file *file, loff_t offset, int whence)
break;
case SEEK_END:
inode_lock(inode);
- retval = fuse_update_attributes(inode, NULL, file, NULL);
+ retval = fuse_update_attributes(inode, file);
if (!retval)
retval = generic_file_llseek(file, offset, whence);
inode_unlock(inode);
@@ -2874,7 +2879,6 @@ fuse_direct_IO(struct kiocb *iocb, struct iov_iter *iter)
io->offset = offset;
io->write = (iov_iter_rw(iter) == WRITE);
io->err = 0;
- io->file = file;
/*
* By default, we want to optimize all I/Os with async request
* submission to the client filesystem if supported.
diff --git a/fs/fuse/fuse_i.h b/fs/fuse/fuse_i.h
index bd4d2a3e1ec1..d5773ca67ad2 100644
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -252,16 +252,15 @@ struct fuse_io_priv {
bool should_dirty;
int err;
struct kiocb *iocb;
- struct file *file;
struct completion *done;
bool blocking;
};
-#define FUSE_IO_PRIV_SYNC(f) \
+#define FUSE_IO_PRIV_SYNC(i) \
{ \
.refcnt = KREF_INIT(1), \
.async = 0, \
- .file = f, \
+ .iocb = i, \
}
/**
@@ -905,8 +904,7 @@ u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id);
void fuse_update_ctime(struct inode *inode);
-int fuse_update_attributes(struct inode *inode, struct kstat *stat,
- struct file *file, bool *refreshed);
+int fuse_update_attributes(struct inode *inode, struct file *file);
void fuse_flush_writepages(struct inode *inode);
diff --git a/fs/gfs2/glops.c b/fs/gfs2/glops.c
index dac6559e2195..cdd1c5f06f45 100644
--- a/fs/gfs2/glops.c
+++ b/fs/gfs2/glops.c
@@ -554,7 +554,7 @@ static void iopen_go_callback(struct gfs2_glock *gl, bool remote)
struct gfs2_inode *ip = gl->gl_object;
struct gfs2_sbd *sdp = gl->gl_name.ln_sbd;
- if (!remote || (sdp->sd_vfs->s_flags & MS_RDONLY))
+ if (!remote || sb_rdonly(sdp->sd_vfs))
return;
if (gl->gl_demote_state == LM_ST_UNLOCKED &&
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c
index 84593587691d..a3711f543405 100644
--- a/fs/gfs2/ops_fstype.c
+++ b/fs/gfs2/ops_fstype.c
@@ -1037,7 +1037,7 @@ void gfs2_online_uevent(struct gfs2_sbd *sdp)
char ro[20];
char spectator[20];
char *envp[] = { ro, spectator, NULL };
- sprintf(ro, "RDONLY=%d", (sb->s_flags & MS_RDONLY) ? 1 : 0);
+ sprintf(ro, "RDONLY=%d", sb_rdonly(sb));
sprintf(spectator, "SPECTATOR=%d", sdp->sd_args.ar_spectator ? 1 : 0);
kobject_uevent_env(&sdp->sd_kobj, KOBJ_ONLINE, envp);
}
@@ -1179,7 +1179,7 @@ static int fill_super(struct super_block *sb, struct gfs2_args *args, int silent
goto fail_per_node;
}
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
error = gfs2_make_fs_rw(sdp);
if (error) {
fs_err(sdp, "can't make FS RW: %d\n", error);
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c
index e647938432bd..e700fb162664 100644
--- a/fs/gfs2/quota.c
+++ b/fs/gfs2/quota.c
@@ -452,7 +452,7 @@ static int qd_fish(struct gfs2_sbd *sdp, struct gfs2_quota_data **qdp)
*qdp = NULL;
- if (sdp->sd_vfs->s_flags & MS_RDONLY)
+ if (sb_rdonly(sdp->sd_vfs))
return 0;
spin_lock(&qd_lock);
diff --git a/fs/gfs2/recovery.c b/fs/gfs2/recovery.c
index 113b6095a58d..9395a3db1a60 100644
--- a/fs/gfs2/recovery.c
+++ b/fs/gfs2/recovery.c
@@ -522,7 +522,7 @@ void gfs2_recover_func(struct work_struct *work)
if (!test_bit(SDF_JOURNAL_LIVE, &sdp->sd_flags))
ro = 1;
} else {
- if (sdp->sd_vfs->s_flags & MS_RDONLY) {
+ if (sb_rdonly(sdp->sd_vfs)) {
/* check if device itself is read-only */
ro = bdev_read_only(sdp->sd_vfs->s_bdev);
if (!ro) {
diff --git a/fs/gfs2/super.c b/fs/gfs2/super.c
index 769841185ce5..8e54f2e3a304 100644
--- a/fs/gfs2/super.c
+++ b/fs/gfs2/super.c
@@ -893,7 +893,7 @@ restart:
}
spin_unlock(&sdp->sd_jindex_spin);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
error = gfs2_make_fs_ro(sdp);
if (error)
gfs2_io_error(sdp);
@@ -1569,7 +1569,7 @@ static void gfs2_evict_inode(struct inode *inode)
return;
}
- if (inode->i_nlink || (sb->s_flags & MS_RDONLY))
+ if (inode->i_nlink || sb_rdonly(sb))
goto out;
if (test_bit(GIF_ALLOC_FAILED, &ip->i_flags)) {
diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c
index ca1f97ff898c..9eb9d0a1abd9 100644
--- a/fs/gfs2/sys.c
+++ b/fs/gfs2/sys.c
@@ -645,7 +645,7 @@ int gfs2_sys_fs_add(struct gfs2_sbd *sdp)
char *envp[] = { ro, spectator, NULL };
int sysfs_frees_sdp = 0;
- sprintf(ro, "RDONLY=%d", (sb->s_flags & MS_RDONLY) ? 1 : 0);
+ sprintf(ro, "RDONLY=%d", sb_rdonly(sb));
sprintf(spectator, "SPECTATOR=%d", sdp->sd_args.ar_spectator ? 1 : 0);
sdp->sd_kobj.kset = gfs2_kset;
diff --git a/fs/hfs/mdb.c b/fs/hfs/mdb.c
index 482081bcdf70..894994d2c885 100644
--- a/fs/hfs/mdb.c
+++ b/fs/hfs/mdb.c
@@ -210,7 +210,7 @@ int hfs_mdb_get(struct super_block *sb)
pr_warn("filesystem is marked locked, mounting read-only.\n");
sb->s_flags |= MS_RDONLY;
}
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
/* Mark the volume uncleanly unmounted in case we crash */
attrib &= cpu_to_be16(~HFS_SB_ATTRIB_UNMNT);
attrib |= cpu_to_be16(HFS_SB_ATTRIB_INCNSTNT);
@@ -259,7 +259,7 @@ void hfs_mdb_commit(struct super_block *sb)
{
struct hfs_mdb *mdb = HFS_SB(sb)->mdb;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
lock_buffer(HFS_SB(sb)->mdb_bh);
@@ -334,7 +334,7 @@ void hfs_mdb_commit(struct super_block *sb)
void hfs_mdb_close(struct super_block *sb)
{
/* update volume attributes */
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
HFS_SB(sb)->mdb->drAtrb |= cpu_to_be16(HFS_SB_ATTRIB_UNMNT);
HFS_SB(sb)->mdb->drAtrb &= cpu_to_be16(~HFS_SB_ATTRIB_INCNSTNT);
diff --git a/fs/hfs/super.c b/fs/hfs/super.c
index bf6304a350a6..7e0d65e9586c 100644
--- a/fs/hfs/super.c
+++ b/fs/hfs/super.c
@@ -71,7 +71,7 @@ void hfs_mark_mdb_dirty(struct super_block *sb)
struct hfs_sb_info *sbi = HFS_SB(sb);
unsigned long delay;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
spin_lock(&sbi->work_lock);
@@ -115,7 +115,7 @@ static int hfs_remount(struct super_block *sb, int *flags, char *data)
{
sync_filesystem(sb);
*flags |= MS_NODIRATIME;
- if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
+ if ((bool)(*flags & MS_RDONLY) == sb_rdonly(sb))
return 0;
if (!(*flags & MS_RDONLY)) {
if (!(HFS_SB(sb)->mdb->drAtrb & cpu_to_be16(HFS_SB_ATTRIB_UNMNT))) {
diff --git a/fs/hfsplus/super.c b/fs/hfsplus/super.c
index 67aedf4c2e7c..e5bb2de2262a 100644
--- a/fs/hfsplus/super.c
+++ b/fs/hfsplus/super.c
@@ -264,7 +264,7 @@ void hfsplus_mark_mdb_dirty(struct super_block *sb)
struct hfsplus_sb_info *sbi = HFSPLUS_SB(sb);
unsigned long delay;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
spin_lock(&sbi->work_lock);
@@ -284,7 +284,7 @@ static void hfsplus_put_super(struct super_block *sb)
cancel_delayed_work_sync(&sbi->sync_work);
- if (!(sb->s_flags & MS_RDONLY) && sbi->s_vhdr) {
+ if (!sb_rdonly(sb) && sbi->s_vhdr) {
struct hfsplus_vh *vhdr = sbi->s_vhdr;
vhdr->modify_date = hfsp_now2mt();
@@ -329,7 +329,7 @@ static int hfsplus_statfs(struct dentry *dentry, struct kstatfs *buf)
static int hfsplus_remount(struct super_block *sb, int *flags, char *data)
{
sync_filesystem(sb);
- if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
+ if ((bool)(*flags & MS_RDONLY) == sb_rdonly(sb))
return 0;
if (!(*flags & MS_RDONLY)) {
struct hfsplus_vh *vhdr = HFSPLUS_SB(sb)->s_vhdr;
@@ -462,7 +462,7 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
pr_warn("Filesystem is marked locked, mounting read-only.\n");
sb->s_flags |= MS_RDONLY;
} else if ((vhdr->attributes & cpu_to_be32(HFSPLUS_VOL_JOURNALED)) &&
- !(sb->s_flags & MS_RDONLY)) {
+ !sb_rdonly(sb)) {
pr_warn("write access to a journaled filesystem is not supported, use the force option at your own risk, mounting read-only.\n");
sb->s_flags |= MS_RDONLY;
}
@@ -535,7 +535,7 @@ static int hfsplus_fill_super(struct super_block *sb, void *data, int silent)
} else
hfs_find_exit(&fd);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
/*
* H+LX == hfsplusutils, H+Lx == this driver, H+lx is unused
* all three are registered with Apple for our use
diff --git a/fs/hpfs/alloc.c b/fs/hpfs/alloc.c
index d6a4b55d2ab0..098bf0f4f386 100644
--- a/fs/hpfs/alloc.c
+++ b/fs/hpfs/alloc.c
@@ -538,7 +538,7 @@ int hpfs_trim_fs(struct super_block *s, u64 start, u64 end, u64 minlen, unsigned
return 0;
if (start < sbi->sb_dirband_start + sbi->sb_dirband_size && end > sbi->sb_dirband_start) {
hpfs_lock(s);
- if (s->s_flags & MS_RDONLY) {
+ if (sb_rdonly(s)) {
err = -EROFS;
goto unlock_1;
}
@@ -559,7 +559,7 @@ unlock_1:
end_bmp = (end + 0x3fff) >> 14;
while (start_bmp < end_bmp && !err) {
hpfs_lock(s);
- if (s->s_flags & MS_RDONLY) {
+ if (sb_rdonly(s)) {
err = -EROFS;
goto unlock_2;
}
diff --git a/fs/hpfs/dir.c b/fs/hpfs/dir.c
index 7b9150c2e75c..fa6bbb4f509f 100644
--- a/fs/hpfs/dir.c
+++ b/fs/hpfs/dir.c
@@ -264,7 +264,7 @@ struct dentry *hpfs_lookup(struct inode *dir, struct dentry *dentry, unsigned in
hpfs_result = hpfs_i(result);
if (!de->directory) hpfs_result->i_parent_dir = dir->i_ino;
- if (de->has_acl || de->has_xtd_perm) if (!(dir->i_sb->s_flags & MS_RDONLY)) {
+ if (de->has_acl || de->has_xtd_perm) if (!sb_rdonly(dir->i_sb)) {
hpfs_error(result->i_sb, "ACLs or XPERM found. This is probably HPFS386. This driver doesn't support it now. Send me some info on these structures");
goto bail1;
}
diff --git a/fs/hpfs/super.c b/fs/hpfs/super.c
index 82067ca22f2b..1516fb4e28f4 100644
--- a/fs/hpfs/super.c
+++ b/fs/hpfs/super.c
@@ -21,7 +21,7 @@
static void mark_dirty(struct super_block *s, int remount)
{
- if (hpfs_sb(s)->sb_chkdsk && (remount || !(s->s_flags & MS_RDONLY))) {
+ if (hpfs_sb(s)->sb_chkdsk && (remount || !sb_rdonly(s))) {
struct buffer_head *bh;
struct hpfs_spare_block *sb;
if ((sb = hpfs_map_sector(s, 17, &bh, 0))) {
@@ -41,7 +41,7 @@ static void unmark_dirty(struct super_block *s)
{
struct buffer_head *bh;
struct hpfs_spare_block *sb;
- if (s->s_flags & MS_RDONLY) return;
+ if (sb_rdonly(s)) return;
sync_blockdev(s->s_bdev);
if ((sb = hpfs_map_sector(s, 17, &bh, 0))) {
sb->dirty = hpfs_sb(s)->sb_chkdsk > 1 - hpfs_sb(s)->sb_was_error;
@@ -73,14 +73,14 @@ void hpfs_error(struct super_block *s, const char *fmt, ...)
mark_dirty(s, 0);
panic("HPFS panic");
} else if (hpfs_sb(s)->sb_err == 1) {
- if (s->s_flags & MS_RDONLY)
+ if (sb_rdonly(s))
pr_cont("; already mounted read-only\n");
else {
pr_cont("; remounting read-only\n");
mark_dirty(s, 0);
s->s_flags |= MS_RDONLY;
}
- } else if (s->s_flags & MS_RDONLY)
+ } else if (sb_rdonly(s))
pr_cont("; going on - but anything won't be destroyed because it's read-only\n");
else
pr_cont("; corrupted filesystem mounted read/write - your computer will explode within 20 seconds ... but you wanted it so!\n");
@@ -607,8 +607,7 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
}
/* Check version */
- if (!(s->s_flags & MS_RDONLY) &&
- superblock->funcversion != 2 && superblock->funcversion != 3) {
+ if (!sb_rdonly(s) && superblock->funcversion != 2 && superblock->funcversion != 3) {
pr_err("Bad version %d,%d. Mount readonly to go around\n",
(int)superblock->version, (int)superblock->funcversion);
pr_err("please try recent version of HPFS driver at http://artax.karlin.mff.cuni.cz/~mikulas/vyplody/hpfs/index-e.cgi and if it still can't understand this format, contact author - mikulas@artax.karlin.mff.cuni.cz\n");
@@ -666,7 +665,7 @@ static int hpfs_fill_super(struct super_block *s, void *options, int silent)
hpfs_error(s, "improperly stopped");
}
- if (!(s->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(s)) {
spareblock->dirty = 1;
spareblock->old_wrote = 0;
mark_buffer_dirty(bh2);
diff --git a/fs/inode.c b/fs/inode.c
index 210054157a49..d1e35b53bb23 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -1570,11 +1570,24 @@ EXPORT_SYMBOL(bmap);
static void update_ovl_inode_times(struct dentry *dentry, struct inode *inode,
bool rcu)
{
- if (!rcu) {
- struct inode *realinode = d_real_inode(dentry);
+ struct dentry *upperdentry;
- if (unlikely(inode != realinode) &&
- (!timespec_equal(&inode->i_mtime, &realinode->i_mtime) ||
+ /*
+ * Nothing to do if in rcu or if non-overlayfs
+ */
+ if (rcu || likely(!(dentry->d_flags & DCACHE_OP_REAL)))
+ return;
+
+ upperdentry = d_real(dentry, NULL, 0, D_REAL_UPPER);
+
+ /*
+ * If file is on lower then we can't update atime, so no worries about
+ * stale mtime/ctime.
+ */
+ if (upperdentry) {
+ struct inode *realinode = d_inode(upperdentry);
+
+ if ((!timespec_equal(&inode->i_mtime, &realinode->i_mtime) ||
!timespec_equal(&inode->i_ctime, &realinode->i_ctime))) {
inode->i_mtime = realinode->i_mtime;
inode->i_ctime = realinode->i_ctime;
diff --git a/fs/internal.h b/fs/internal.h
index fedfe94d84ba..48cee21b4f14 100644
--- a/fs/internal.h
+++ b/fs/internal.h
@@ -71,8 +71,10 @@ extern void __init mnt_init(void);
extern int __mnt_want_write(struct vfsmount *);
extern int __mnt_want_write_file(struct file *);
+extern int mnt_want_write_file_path(struct file *);
extern void __mnt_drop_write(struct vfsmount *);
extern void __mnt_drop_write_file(struct file *);
+extern void mnt_drop_write_file_path(struct file *);
/*
* fs_struct.c
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c
index f1ed935322db..db692f554158 100644
--- a/fs/isofs/inode.c
+++ b/fs/isofs/inode.c
@@ -737,7 +737,7 @@ static int isofs_fill_super(struct super_block *s, void *data, int silent)
root_found:
/* We don't support read-write mounts */
- if (!(s->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(s)) {
error = -EACCES;
goto out_freebh;
}
diff --git a/fs/jffs2/fs.c b/fs/jffs2/fs.c
index 76fa814df3d1..e96c6b05e43e 100644
--- a/fs/jffs2/fs.c
+++ b/fs/jffs2/fs.c
@@ -395,14 +395,14 @@ int jffs2_do_remount_fs(struct super_block *sb, int *flags, char *data)
{
struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
- if (c->flags & JFFS2_SB_FLAG_RO && !(sb->s_flags & MS_RDONLY))
+ if (c->flags & JFFS2_SB_FLAG_RO && !sb_rdonly(sb))
return -EROFS;
/* We stop if it was running, then restart if it needs to.
This also catches the case where it was stopped and this
is just a remount to restart it.
Flush the writebuffer, if neccecary, else we loose it */
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
jffs2_stop_garbage_collect_thread(c);
mutex_lock(&c->alloc_sem);
jffs2_flush_wbuf_pad(c);
@@ -590,7 +590,7 @@ int jffs2_do_fill_super(struct super_block *sb, void *data, int silent)
sb->s_blocksize = PAGE_SIZE;
sb->s_blocksize_bits = PAGE_SHIFT;
sb->s_magic = JFFS2_SUPER_MAGIC;
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
jffs2_start_garbage_collect_thread(c);
return 0;
diff --git a/fs/jffs2/super.c b/fs/jffs2/super.c
index 5ef21f4c4c77..153f1c6eb169 100644
--- a/fs/jffs2/super.c
+++ b/fs/jffs2/super.c
@@ -342,7 +342,7 @@ static void jffs2_put_super (struct super_block *sb)
static void jffs2_kill_sb(struct super_block *sb)
{
struct jffs2_sb_info *c = JFFS2_SB_INFO(sb);
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
jffs2_stop_garbage_collect_thread(c);
kill_mtd_super(sb);
kfree(c);
diff --git a/fs/jffs2/wbuf.c b/fs/jffs2/wbuf.c
index 48d9522e209c..2cfe487708e0 100644
--- a/fs/jffs2/wbuf.c
+++ b/fs/jffs2/wbuf.c
@@ -1162,7 +1162,7 @@ static void delayed_wbuf_sync(struct work_struct *work)
struct jffs2_sb_info *c = work_to_sb(work);
struct super_block *sb = OFNI_BS_2SFFJ(c);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
jffs2_dbg(1, "%s()\n", __func__);
jffs2_flush_wbuf_gc(c, 0);
}
@@ -1173,7 +1173,7 @@ void jffs2_dirty_trigger(struct jffs2_sb_info *c)
struct super_block *sb = OFNI_BS_2SFFJ(c);
unsigned long delay;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
delay = msecs_to_jiffies(dirty_writeback_interval * 10);
diff --git a/fs/jfs/jfs_mount.c b/fs/jfs/jfs_mount.c
index 9895595fd2f2..d8658607bf46 100644
--- a/fs/jfs/jfs_mount.c
+++ b/fs/jfs/jfs_mount.c
@@ -362,7 +362,7 @@ static int chkSuper(struct super_block *sb)
/* validate fs state */
if (j_sb->s_state != cpu_to_le32(FM_CLEAN) &&
- !(sb->s_flags & MS_RDONLY)) {
+ !sb_rdonly(sb)) {
jfs_err("jfs_mount: Mount Failure: File System Dirty.");
rc = -EINVAL;
goto out;
diff --git a/fs/jfs/super.c b/fs/jfs/super.c
index 60726ae7cf26..2f14677169c3 100644
--- a/fs/jfs/super.c
+++ b/fs/jfs/super.c
@@ -76,7 +76,7 @@ static void jfs_handle_error(struct super_block *sb)
{
struct jfs_sb_info *sbi = JFS_SBI(sb);
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
updateSuper(sb, FM_DIRTY);
@@ -468,7 +468,7 @@ static int jfs_remount(struct super_block *sb, int *flags, char *data)
return -EINVAL;
if (newLVSize) {
- if (sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(sb)) {
pr_err("JFS: resize requires volume to be mounted read-write\n");
return -EROFS;
}
@@ -477,7 +477,7 @@ static int jfs_remount(struct super_block *sb, int *flags, char *data)
return rc;
}
- if ((sb->s_flags & MS_RDONLY) && !(*flags & MS_RDONLY)) {
+ if (sb_rdonly(sb) && !(*flags & MS_RDONLY)) {
/*
* Invalidate any previously read metadata. fsck may have
* changed the on-disk data since we mounted r/o
@@ -493,7 +493,7 @@ static int jfs_remount(struct super_block *sb, int *flags, char *data)
dquot_resume(sb, -1);
return ret;
}
- if ((!(sb->s_flags & MS_RDONLY)) && (*flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb) && (*flags & MS_RDONLY)) {
rc = dquot_suspend(sb, -1);
if (rc < 0)
return rc;
@@ -502,7 +502,7 @@ static int jfs_remount(struct super_block *sb, int *flags, char *data)
return rc;
}
if ((JFS_SBI(sb)->flag & JFS_NOINTEGRITY) != (flag & JFS_NOINTEGRITY))
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
rc = jfs_umount_rw(sb);
if (rc)
return rc;
@@ -592,7 +592,7 @@ static int jfs_fill_super(struct super_block *sb, void *data, int silent)
jfs_err("jfs_mount failed w/return code = %d", rc);
goto out_mount_failed;
}
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
sbi->log = NULL;
else {
rc = jfs_mount_rw(sb, 0);
@@ -652,7 +652,7 @@ static int jfs_freeze(struct super_block *sb)
struct jfs_log *log = sbi->log;
int rc = 0;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
txQuiesce(sb);
rc = lmLogShutdown(log);
if (rc) {
@@ -682,7 +682,7 @@ static int jfs_unfreeze(struct super_block *sb)
struct jfs_log *log = sbi->log;
int rc = 0;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
rc = updateSuper(sb, FM_MOUNT);
if (rc) {
jfs_error(sb, "updateSuper failed\n");
diff --git a/fs/minix/inode.c b/fs/minix/inode.c
index 6ac76b0434e9..b6829d679643 100644
--- a/fs/minix/inode.c
+++ b/fs/minix/inode.c
@@ -42,7 +42,7 @@ static void minix_put_super(struct super_block *sb)
int i;
struct minix_sb_info *sbi = minix_sb(sb);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (sbi->s_version != MINIX_V3) /* s_state is now out from V3 sb */
sbi->s_ms->s_state = sbi->s_mount_state;
mark_buffer_dirty(sbi->s_sbh);
@@ -125,7 +125,7 @@ static int minix_remount (struct super_block * sb, int * flags, char * data)
sync_filesystem(sb);
ms = sbi->s_ms;
- if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
+ if ((bool)(*flags & MS_RDONLY) == sb_rdonly(sb))
return 0;
if (*flags & MS_RDONLY) {
if (ms->s_state & MINIX_VALID_FS ||
@@ -293,7 +293,7 @@ static int minix_fill_super(struct super_block *s, void *data, int silent)
if (!s->s_root)
goto out_no_root;
- if (!(s->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(s)) {
if (sbi->s_version != MINIX_V3) /* s_state is now out from V3 sb */
ms->s_state &= ~MINIX_VALID_FS;
mark_buffer_dirty(bh);
diff --git a/fs/namei.c b/fs/namei.c
index 1180f9c58093..c75ea03ca147 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -447,8 +447,7 @@ static int sb_permission(struct super_block *sb, struct inode *inode, int mask)
umode_t mode = inode->i_mode;
/* Nobody gets write access to a read-only fs. */
- if ((sb->s_flags & MS_RDONLY) &&
- (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
+ if (sb_rdonly(sb) && (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode)))
return -EROFS;
}
return 0;
diff --git a/fs/namespace.c b/fs/namespace.c
index f8893dc6a989..54059b142d6b 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -275,7 +275,7 @@ int __mnt_is_readonly(struct vfsmount *mnt)
{
if (mnt->mnt_flags & MNT_READONLY)
return 1;
- if (mnt->mnt_sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(mnt->mnt_sb))
return 1;
return 0;
}
@@ -431,13 +431,18 @@ int __mnt_want_write_file(struct file *file)
}
/**
- * mnt_want_write_file - get write access to a file's mount
+ * mnt_want_write_file_path - get write access to a file's mount
* @file: the file who's mount on which to take a write
*
* This is like mnt_want_write, but it takes a file and can
* do some optimisations if the file is open for write already
+ *
+ * Called by the vfs for cases when we have an open file at hand, but will do an
+ * inode operation on it (important distinction for files opened on overlayfs,
+ * since the file operations will come from the real underlying file, while
+ * inode operations come from the overlay).
*/
-int mnt_want_write_file(struct file *file)
+int mnt_want_write_file_path(struct file *file)
{
int ret;
@@ -447,6 +452,53 @@ int mnt_want_write_file(struct file *file)
sb_end_write(file->f_path.mnt->mnt_sb);
return ret;
}
+
+static inline int may_write_real(struct file *file)
+{
+ struct dentry *dentry = file->f_path.dentry;
+ struct dentry *upperdentry;
+
+ /* Writable file? */
+ if (file->f_mode & FMODE_WRITER)
+ return 0;
+
+ /* Not overlayfs? */
+ if (likely(!(dentry->d_flags & DCACHE_OP_REAL)))
+ return 0;
+
+ /* File refers to upper, writable layer? */
+ upperdentry = d_real(dentry, NULL, 0, D_REAL_UPPER);
+ if (upperdentry && file_inode(file) == d_inode(upperdentry))
+ return 0;
+
+ /* Lower layer: can't write to real file, sorry... */
+ return -EPERM;
+}
+
+/**
+ * mnt_want_write_file - get write access to a file's mount
+ * @file: the file who's mount on which to take a write
+ *
+ * This is like mnt_want_write, but it takes a file and can
+ * do some optimisations if the file is open for write already
+ *
+ * Mostly called by filesystems from their ioctl operation before performing
+ * modification. On overlayfs this needs to check if the file is on a read-only
+ * lower layer and deny access in that case.
+ */
+int mnt_want_write_file(struct file *file)
+{
+ int ret;
+
+ ret = may_write_real(file);
+ if (!ret) {
+ sb_start_write(file_inode(file)->i_sb);
+ ret = __mnt_want_write_file(file);
+ if (ret)
+ sb_end_write(file_inode(file)->i_sb);
+ }
+ return ret;
+}
EXPORT_SYMBOL_GPL(mnt_want_write_file);
/**
@@ -484,10 +536,16 @@ void __mnt_drop_write_file(struct file *file)
__mnt_drop_write(file->f_path.mnt);
}
-void mnt_drop_write_file(struct file *file)
+void mnt_drop_write_file_path(struct file *file)
{
mnt_drop_write(file->f_path.mnt);
}
+
+void mnt_drop_write_file(struct file *file)
+{
+ __mnt_drop_write(file->f_path.mnt);
+ sb_end_write(file_inode(file)->i_sb);
+}
EXPORT_SYMBOL(mnt_drop_write_file);
static int mnt_make_readonly(struct mount *mnt)
@@ -971,7 +1029,7 @@ vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void
if (!mnt)
return ERR_PTR(-ENOMEM);
- if (flags & MS_KERNMOUNT)
+ if (flags & SB_KERNMOUNT)
mnt->mnt.mnt_flags = MNT_INTERNAL;
root = mount_fs(type, flags, name, data);
@@ -1003,7 +1061,7 @@ vfs_submount(const struct dentry *mountpoint, struct file_system_type *type,
if (mountpoint->d_sb->s_user_ns != &init_user_ns)
return ERR_PTR(-EPERM);
- return vfs_kern_mount(type, MS_SUBMOUNT, name, data);
+ return vfs_kern_mount(type, SB_SUBMOUNT, name, data);
}
EXPORT_SYMBOL_GPL(vfs_submount);
@@ -1124,12 +1182,10 @@ static LLIST_HEAD(delayed_mntput_list);
static void delayed_mntput(struct work_struct *unused)
{
struct llist_node *node = llist_del_all(&delayed_mntput_list);
- struct llist_node *next;
+ struct mount *m, *t;
- for (; node; node = next) {
- next = llist_next(node);
- cleanup_mnt(llist_entry(node, struct mount, mnt_llist));
- }
+ llist_for_each_entry_safe(m, t, node, mnt_llist)
+ cleanup_mnt(m);
}
static DECLARE_DELAYED_WORK(delayed_mntput_work, delayed_mntput);
@@ -1534,8 +1590,8 @@ static int do_umount(struct mount *mnt, int flags)
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
down_write(&sb->s_umount);
- if (!(sb->s_flags & MS_RDONLY))
- retval = do_remount_sb(sb, MS_RDONLY, NULL, 0);
+ if (!sb_rdonly(sb))
+ retval = do_remount_sb(sb, SB_RDONLY, NULL, 0);
up_write(&sb->s_umount);
return retval;
}
@@ -2059,7 +2115,7 @@ static void unlock_mount(struct mountpoint *where)
static int graft_tree(struct mount *mnt, struct mount *p, struct mountpoint *mp)
{
- if (mnt->mnt.mnt_sb->s_flags & MS_NOUSER)
+ if (mnt->mnt.mnt_sb->s_flags & SB_NOUSER)
return -EINVAL;
if (d_is_dir(mp->m_dentry) !=
@@ -2073,9 +2129,9 @@ static int graft_tree(struct mount *mnt, struct mount *p, struct mountpoint *mp)
* Sanity check the flags to change_mnt_propagation.
*/
-static int flags_to_propagation_type(int flags)
+static int flags_to_propagation_type(int ms_flags)
{
- int type = flags & ~(MS_REC | MS_SILENT);
+ int type = ms_flags & ~(MS_REC | MS_SILENT);
/* Fail if any non-propagation flags are set */
if (type & ~(MS_SHARED | MS_PRIVATE | MS_SLAVE | MS_UNBINDABLE))
@@ -2089,18 +2145,18 @@ static int flags_to_propagation_type(int flags)
/*
* recursively change the type of the mountpoint.
*/
-static int do_change_type(struct path *path, int flag)
+static int do_change_type(struct path *path, int ms_flags)
{
struct mount *m;
struct mount *mnt = real_mount(path->mnt);
- int recurse = flag & MS_REC;
+ int recurse = ms_flags & MS_REC;
int type;
int err = 0;
if (path->dentry != path->mnt->mnt_root)
return -EINVAL;
- type = flags_to_propagation_type(flag);
+ type = flags_to_propagation_type(ms_flags);
if (!type)
return -EINVAL;
@@ -2222,8 +2278,8 @@ static int change_mount_flags(struct vfsmount *mnt, int ms_flags)
* If you've mounted a non-root directory somewhere and want to do remount
* on it - tough luck.
*/
-static int do_remount(struct path *path, int flags, int mnt_flags,
- void *data)
+static int do_remount(struct path *path, int ms_flags, int sb_flags,
+ int mnt_flags, void *data)
{
int err;
struct super_block *sb = path->mnt->mnt_sb;
@@ -2267,12 +2323,12 @@ static int do_remount(struct path *path, int flags, int mnt_flags,
return err;
down_write(&sb->s_umount);
- if (flags & MS_BIND)
- err = change_mount_flags(path->mnt, flags);
+ if (ms_flags & MS_BIND)
+ err = change_mount_flags(path->mnt, ms_flags);
else if (!capable(CAP_SYS_ADMIN))
err = -EPERM;
else
- err = do_remount_sb(sb, flags, data, 0);
+ err = do_remount_sb(sb, sb_flags, data, 0);
if (!err) {
lock_mount_hash();
mnt_flags |= mnt->mnt.mnt_flags & ~MNT_USER_SETTABLE_MASK;
@@ -2437,7 +2493,7 @@ static bool mount_too_revealing(struct vfsmount *mnt, int *new_mnt_flags);
* create a new mount for userspace and request it to be added into the
* namespace's tree
*/
-static int do_new_mount(struct path *path, const char *fstype, int flags,
+static int do_new_mount(struct path *path, const char *fstype, int sb_flags,
int mnt_flags, const char *name, void *data)
{
struct file_system_type *type;
@@ -2451,7 +2507,7 @@ static int do_new_mount(struct path *path, const char *fstype, int flags,
if (!type)
return -ENODEV;
- mnt = vfs_kern_mount(type, flags, name, data);
+ mnt = vfs_kern_mount(type, sb_flags, name, data);
if (!IS_ERR(mnt) && (type->fs_flags & FS_HAS_SUBTYPE) &&
!mnt->mnt_sb->s_subtype)
mnt = fs_set_subtype(mnt, fstype);
@@ -2706,8 +2762,8 @@ long do_mount(const char *dev_name, const char __user *dir_name,
const char *type_page, unsigned long flags, void *data_page)
{
struct path path;
+ unsigned int mnt_flags = 0, sb_flags;
int retval = 0;
- int mnt_flags = 0;
/* Discard magic */
if ((flags & MS_MGC_MSK) == MS_MGC_VAL)
@@ -2717,6 +2773,9 @@ long do_mount(const char *dev_name, const char __user *dir_name,
if (data_page)
((char *)data_page)[PAGE_SIZE - 1] = 0;
+ if (flags & MS_NOUSER)
+ return -EINVAL;
+
/* ... and get the mountpoint */
retval = user_path(dir_name, &path);
if (retval)
@@ -2726,7 +2785,7 @@ long do_mount(const char *dev_name, const char __user *dir_name,
type_page, flags, data_page);
if (!retval && !may_mount())
retval = -EPERM;
- if (!retval && (flags & MS_MANDLOCK) && !may_mandlock())
+ if (!retval && (flags & SB_MANDLOCK) && !may_mandlock())
retval = -EPERM;
if (retval)
goto dput_out;
@@ -2748,7 +2807,7 @@ long do_mount(const char *dev_name, const char __user *dir_name,
mnt_flags |= MNT_NODIRATIME;
if (flags & MS_STRICTATIME)
mnt_flags &= ~(MNT_RELATIME | MNT_NOATIME);
- if (flags & MS_RDONLY)
+ if (flags & SB_RDONLY)
mnt_flags |= MNT_READONLY;
/* The default atime for remount is preservation */
@@ -2759,12 +2818,15 @@ long do_mount(const char *dev_name, const char __user *dir_name,
mnt_flags |= path.mnt->mnt_flags & MNT_ATIME_MASK;
}
- flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE | MS_BORN |
- MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
- MS_STRICTATIME | MS_NOREMOTELOCK | MS_SUBMOUNT);
+ sb_flags = flags & (SB_RDONLY |
+ SB_SYNCHRONOUS |
+ SB_MANDLOCK |
+ SB_DIRSYNC |
+ SB_SILENT |
+ SB_POSIXACL);
if (flags & MS_REMOUNT)
- retval = do_remount(&path, flags & ~MS_REMOUNT, mnt_flags,
+ retval = do_remount(&path, flags, sb_flags, mnt_flags,
data_page);
else if (flags & MS_BIND)
retval = do_loopback(&path, dev_name, flags & MS_REC);
@@ -2773,7 +2835,7 @@ long do_mount(const char *dev_name, const char __user *dir_name,
else if (flags & MS_MOVE)
retval = do_move_mount(&path, dev_name);
else
- retval = do_new_mount(&path, type_page, flags, mnt_flags,
+ retval = do_new_mount(&path, type_page, sb_flags, mnt_flags,
dev_name, data_page);
dput_out:
path_put(&path);
@@ -3223,7 +3285,7 @@ void put_mnt_ns(struct mnt_namespace *ns)
struct vfsmount *kern_mount_data(struct file_system_type *type, void *data)
{
struct vfsmount *mnt;
- mnt = vfs_kern_mount(type, MS_KERNMOUNT, type->name, data);
+ mnt = vfs_kern_mount(type, SB_KERNMOUNT, type->name, data);
if (!IS_ERR(mnt)) {
/*
* it is a longterm mount, don't release mnt until
@@ -3300,7 +3362,7 @@ static bool mnt_already_visible(struct mnt_namespace *ns, struct vfsmount *new,
mnt_flags = mnt->mnt.mnt_flags;
/* Don't miss readonly hidden in the superblock flags */
- if (mnt->mnt.mnt_sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(mnt->mnt.mnt_sb))
mnt_flags |= MNT_LOCK_READONLY;
/* Verify the mount flags are equal to or more permissive
diff --git a/fs/nfs/file.c b/fs/nfs/file.c
index a385d1c3f146..0214dd1e1060 100644
--- a/fs/nfs/file.c
+++ b/fs/nfs/file.c
@@ -208,21 +208,19 @@ EXPORT_SYMBOL_GPL(nfs_file_mmap);
* fall back to doing a synchronous write.
*/
static int
-nfs_file_fsync_commit(struct file *file, loff_t start, loff_t end, int datasync)
+nfs_file_fsync_commit(struct file *file, int datasync)
{
struct nfs_open_context *ctx = nfs_file_open_context(file);
struct inode *inode = file_inode(file);
- int have_error, do_resend, status;
+ int do_resend, status;
int ret = 0;
dprintk("NFS: fsync file(%pD2) datasync %d\n", file, datasync);
nfs_inc_stats(inode, NFSIOS_VFSFSYNC);
do_resend = test_and_clear_bit(NFS_CONTEXT_RESEND_WRITES, &ctx->flags);
- have_error = test_and_clear_bit(NFS_CONTEXT_ERROR_WRITE, &ctx->flags);
status = nfs_commit_inode(inode, FLUSH_SYNC);
- have_error |= test_bit(NFS_CONTEXT_ERROR_WRITE, &ctx->flags);
- if (have_error) {
+ if (test_bit(NFS_CONTEXT_ERROR_WRITE, &ctx->flags)) {
ret = xchg(&ctx->error, 0);
if (ret)
goto out;
@@ -247,10 +245,16 @@ nfs_file_fsync(struct file *file, loff_t start, loff_t end, int datasync)
trace_nfs_fsync_enter(inode);
do {
+ struct nfs_open_context *ctx = nfs_file_open_context(file);
ret = filemap_write_and_wait_range(inode->i_mapping, start, end);
+ if (test_and_clear_bit(NFS_CONTEXT_ERROR_WRITE, &ctx->flags)) {
+ int ret2 = xchg(&ctx->error, 0);
+ if (ret2)
+ ret = ret2;
+ }
if (ret != 0)
break;
- ret = nfs_file_fsync_commit(file, start, end, datasync);
+ ret = nfs_file_fsync_commit(file, datasync);
if (!ret)
ret = pnfs_sync_inode(inode, !!datasync);
/*
diff --git a/fs/nfs/internal.h b/fs/nfs/internal.h
index 68cc22083639..5bdf952f414b 100644
--- a/fs/nfs/internal.h
+++ b/fs/nfs/internal.h
@@ -768,3 +768,10 @@ static inline bool nfs_error_is_fatal(int err)
return false;
}
}
+
+static inline void nfs_context_set_write_error(struct nfs_open_context *ctx, int error)
+{
+ ctx->error = error;
+ smp_wmb();
+ set_bit(NFS_CONTEXT_ERROR_WRITE, &ctx->flags);
+}
diff --git a/fs/nfs/nfstrace.h b/fs/nfs/nfstrace.h
index 2ca9167bc97d..551711042ba4 100644
--- a/fs/nfs/nfstrace.h
+++ b/fs/nfs/nfstrace.h
@@ -719,6 +719,254 @@ TRACE_EVENT(nfs_sillyrename_unlink,
__get_str(name)
)
);
+
+TRACE_EVENT(nfs_initiate_read,
+ TP_PROTO(
+ const struct inode *inode,
+ loff_t offset, unsigned long count
+ ),
+
+ TP_ARGS(inode, offset, count),
+
+ TP_STRUCT__entry(
+ __field(loff_t, offset)
+ __field(unsigned long, count)
+ __field(dev_t, dev)
+ __field(u32, fhandle)
+ __field(u64, fileid)
+ ),
+
+ TP_fast_assign(
+ const struct nfs_inode *nfsi = NFS_I(inode);
+
+ __entry->offset = offset;
+ __entry->count = count;
+ __entry->dev = inode->i_sb->s_dev;
+ __entry->fileid = nfsi->fileid;
+ __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+ ),
+
+ TP_printk(
+ "fileid=%02x:%02x:%llu fhandle=0x%08x "
+ "offset=%lld count=%lu",
+ MAJOR(__entry->dev), MINOR(__entry->dev),
+ (unsigned long long)__entry->fileid,
+ __entry->fhandle,
+ __entry->offset, __entry->count
+ )
+);
+
+TRACE_EVENT(nfs_readpage_done,
+ TP_PROTO(
+ const struct inode *inode,
+ int status, loff_t offset, bool eof
+ ),
+
+ TP_ARGS(inode, status, offset, eof),
+
+ TP_STRUCT__entry(
+ __field(int, status)
+ __field(loff_t, offset)
+ __field(bool, eof)
+ __field(dev_t, dev)
+ __field(u32, fhandle)
+ __field(u64, fileid)
+ ),
+
+ TP_fast_assign(
+ const struct nfs_inode *nfsi = NFS_I(inode);
+
+ __entry->status = status;
+ __entry->offset = offset;
+ __entry->eof = eof;
+ __entry->dev = inode->i_sb->s_dev;
+ __entry->fileid = nfsi->fileid;
+ __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+ ),
+
+ TP_printk(
+ "fileid=%02x:%02x:%llu fhandle=0x%08x "
+ "offset=%lld status=%d%s",
+ MAJOR(__entry->dev), MINOR(__entry->dev),
+ (unsigned long long)__entry->fileid,
+ __entry->fhandle,
+ __entry->offset, __entry->status,
+ __entry->eof ? " eof" : ""
+ )
+);
+
+/*
+ * XXX: I tried using NFS_UNSTABLE and friends in this table, but they
+ * all evaluate to 0 for some reason, even if I include linux/nfs.h.
+ */
+#define nfs_show_stable(stable) \
+ __print_symbolic(stable, \
+ { 0, " (UNSTABLE)" }, \
+ { 1, " (DATA_SYNC)" }, \
+ { 2, " (FILE_SYNC)" })
+
+TRACE_EVENT(nfs_initiate_write,
+ TP_PROTO(
+ const struct inode *inode,
+ loff_t offset, unsigned long count,
+ enum nfs3_stable_how stable
+ ),
+
+ TP_ARGS(inode, offset, count, stable),
+
+ TP_STRUCT__entry(
+ __field(loff_t, offset)
+ __field(unsigned long, count)
+ __field(enum nfs3_stable_how, stable)
+ __field(dev_t, dev)
+ __field(u32, fhandle)
+ __field(u64, fileid)
+ ),
+
+ TP_fast_assign(
+ const struct nfs_inode *nfsi = NFS_I(inode);
+
+ __entry->offset = offset;
+ __entry->count = count;
+ __entry->stable = stable;
+ __entry->dev = inode->i_sb->s_dev;
+ __entry->fileid = nfsi->fileid;
+ __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+ ),
+
+ TP_printk(
+ "fileid=%02x:%02x:%llu fhandle=0x%08x "
+ "offset=%lld count=%lu stable=%d%s",
+ MAJOR(__entry->dev), MINOR(__entry->dev),
+ (unsigned long long)__entry->fileid,
+ __entry->fhandle,
+ __entry->offset, __entry->count,
+ __entry->stable, nfs_show_stable(__entry->stable)
+ )
+);
+
+TRACE_EVENT(nfs_writeback_done,
+ TP_PROTO(
+ const struct inode *inode,
+ int status,
+ loff_t offset,
+ struct nfs_writeverf *writeverf
+ ),
+
+ TP_ARGS(inode, status, offset, writeverf),
+
+ TP_STRUCT__entry(
+ __field(int, status)
+ __field(loff_t, offset)
+ __field(enum nfs3_stable_how, stable)
+ __field(unsigned long long, verifier)
+ __field(dev_t, dev)
+ __field(u32, fhandle)
+ __field(u64, fileid)
+ ),
+
+ TP_fast_assign(
+ const struct nfs_inode *nfsi = NFS_I(inode);
+
+ __entry->status = status;
+ __entry->offset = offset;
+ __entry->stable = writeverf->committed;
+ memcpy(&__entry->verifier, &writeverf->verifier,
+ sizeof(__entry->verifier));
+ __entry->dev = inode->i_sb->s_dev;
+ __entry->fileid = nfsi->fileid;
+ __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+ ),
+
+ TP_printk(
+ "fileid=%02x:%02x:%llu fhandle=0x%08x "
+ "offset=%lld status=%d stable=%d%s "
+ "verifier 0x%016llx",
+ MAJOR(__entry->dev), MINOR(__entry->dev),
+ (unsigned long long)__entry->fileid,
+ __entry->fhandle,
+ __entry->offset, __entry->status,
+ __entry->stable, nfs_show_stable(__entry->stable),
+ __entry->verifier
+ )
+);
+
+TRACE_EVENT(nfs_initiate_commit,
+ TP_PROTO(
+ const struct nfs_commit_data *data
+ ),
+
+ TP_ARGS(data),
+
+ TP_STRUCT__entry(
+ __field(loff_t, offset)
+ __field(unsigned long, count)
+ __field(dev_t, dev)
+ __field(u32, fhandle)
+ __field(u64, fileid)
+ ),
+
+ TP_fast_assign(
+ const struct inode *inode = data->inode;
+ const struct nfs_inode *nfsi = NFS_I(inode);
+
+ __entry->offset = data->args.offset;
+ __entry->count = data->args.count;
+ __entry->dev = inode->i_sb->s_dev;
+ __entry->fileid = nfsi->fileid;
+ __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+ ),
+
+ TP_printk(
+ "fileid=%02x:%02x:%llu fhandle=0x%08x "
+ "offset=%lld count=%lu",
+ MAJOR(__entry->dev), MINOR(__entry->dev),
+ (unsigned long long)__entry->fileid,
+ __entry->fhandle,
+ __entry->offset, __entry->count
+ )
+);
+
+TRACE_EVENT(nfs_commit_done,
+ TP_PROTO(
+ const struct nfs_commit_data *data
+ ),
+
+ TP_ARGS(data),
+
+ TP_STRUCT__entry(
+ __field(int, status)
+ __field(loff_t, offset)
+ __field(unsigned long long, verifier)
+ __field(dev_t, dev)
+ __field(u32, fhandle)
+ __field(u64, fileid)
+ ),
+
+ TP_fast_assign(
+ const struct inode *inode = data->inode;
+ const struct nfs_inode *nfsi = NFS_I(inode);
+
+ __entry->status = data->res.op_status;
+ __entry->offset = data->args.offset;
+ memcpy(&__entry->verifier, &data->verf.verifier,
+ sizeof(__entry->verifier));
+ __entry->dev = inode->i_sb->s_dev;
+ __entry->fileid = nfsi->fileid;
+ __entry->fhandle = nfs_fhandle_hash(&nfsi->fh);
+ ),
+
+ TP_printk(
+ "fileid=%02x:%02x:%llu fhandle=0x%08x "
+ "offset=%lld status=%d verifier 0x%016llx",
+ MAJOR(__entry->dev), MINOR(__entry->dev),
+ (unsigned long long)__entry->fileid,
+ __entry->fhandle,
+ __entry->offset, __entry->status,
+ __entry->verifier
+ )
+);
+
#endif /* _TRACE_NFS_H */
#undef TRACE_INCLUDE_PATH
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c
index bec120ec1967..d0543e19098a 100644
--- a/fs/nfs/pagelist.c
+++ b/fs/nfs/pagelist.c
@@ -1170,8 +1170,8 @@ out_failed:
/* remember fatal errors */
if (nfs_error_is_fatal(desc->pg_error))
- mapping_set_error(desc->pg_inode->i_mapping,
- desc->pg_error);
+ nfs_context_set_write_error(req->wb_context,
+ desc->pg_error);
func = desc->pg_completion_ops->error_cleanup;
for (midx = 0; midx < desc->pg_mirror_count; midx++) {
diff --git a/fs/nfs/pnfs.c b/fs/nfs/pnfs.c
index 7879ed8ceb76..3bcd669a3152 100644
--- a/fs/nfs/pnfs.c
+++ b/fs/nfs/pnfs.c
@@ -1664,7 +1664,7 @@ pnfs_update_layout(struct inode *ino,
.offset = pos,
.length = count,
};
- unsigned pg_offset, seq;
+ unsigned pg_offset;
struct nfs_server *server = NFS_SERVER(ino);
struct nfs_client *clp = server->nfs_client;
struct pnfs_layout_hdr *lo = NULL;
@@ -1754,10 +1754,14 @@ lookup_again:
}
first = true;
- do {
- seq = read_seqbegin(&ctx->state->seqlock);
- nfs4_stateid_copy(&stateid, &ctx->state->stateid);
- } while (read_seqretry(&ctx->state->seqlock, seq));
+ if (nfs4_select_rw_stateid(ctx->state,
+ iomode == IOMODE_RW ? FMODE_WRITE : FMODE_READ,
+ NULL, &stateid, NULL) != 0) {
+ trace_pnfs_update_layout(ino, pos, count,
+ iomode, lo, lseg,
+ PNFS_UPDATE_LAYOUT_INVALID_OPEN);
+ goto out_unlock;
+ }
} else {
nfs4_stateid_copy(&stateid, &lo->plh_stateid);
}
diff --git a/fs/nfs/read.c b/fs/nfs/read.c
index 0d42573d423d..48d7277c60a9 100644
--- a/fs/nfs/read.c
+++ b/fs/nfs/read.c
@@ -25,6 +25,7 @@
#include "iostat.h"
#include "fscache.h"
#include "pnfs.h"
+#include "nfstrace.h"
#define NFSDBG_FACILITY NFSDBG_PAGECACHE
@@ -200,6 +201,7 @@ static void nfs_initiate_read(struct nfs_pgio_header *hdr,
task_setup_data->flags |= swap_flags;
rpc_ops->read_setup(hdr, msg);
+ trace_nfs_initiate_read(inode, hdr->io_start, hdr->good_bytes);
}
static void
@@ -232,6 +234,8 @@ static int nfs_readpage_done(struct rpc_task *task,
return status;
nfs_add_stats(inode, NFSIOS_SERVERREADBYTES, hdr->res.count);
+ trace_nfs_readpage_done(inode, task->tk_status,
+ hdr->args.offset, hdr->res.eof);
if (task->tk_status == -ESTALE) {
set_bit(NFS_INO_STALE, &NFS_I(inode)->flags);
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index 6b179af59b92..c9d24bae3025 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -812,7 +812,7 @@ int nfs_show_stats(struct seq_file *m, struct dentry *root)
* Display all mount option settings
*/
seq_printf(m, "\n\topts:\t");
- seq_puts(m, root->d_sb->s_flags & MS_RDONLY ? "ro" : "rw");
+ seq_puts(m, sb_rdonly(root->d_sb) ? "ro" : "rw");
seq_puts(m, root->d_sb->s_flags & MS_SYNCHRONOUS ? ",sync" : "");
seq_puts(m, root->d_sb->s_flags & MS_NOATIME ? ",noatime" : "");
seq_puts(m, root->d_sb->s_flags & MS_NODIRATIME ? ",nodiratime" : "");
diff --git a/fs/nfs/write.c b/fs/nfs/write.c
index f68083db63c8..babebbccae2a 100644
--- a/fs/nfs/write.c
+++ b/fs/nfs/write.c
@@ -145,13 +145,6 @@ static void nfs_io_completion_put(struct nfs_io_completion *ioc)
kref_put(&ioc->refcount, nfs_io_completion_release);
}
-static void nfs_context_set_write_error(struct nfs_open_context *ctx, int error)
-{
- ctx->error = error;
- smp_wmb();
- set_bit(NFS_CONTEXT_ERROR_WRITE, &ctx->flags);
-}
-
static struct nfs_page *
nfs_page_private_request(struct page *page)
{
@@ -1383,6 +1376,8 @@ static void nfs_initiate_write(struct nfs_pgio_header *hdr,
task_setup_data->priority = priority;
rpc_ops->write_setup(hdr, msg);
+ trace_nfs_initiate_write(hdr->inode, hdr->io_start, hdr->good_bytes,
+ hdr->args.stable);
nfs4_state_protect_write(NFS_SERVER(hdr->inode)->nfs_client,
&task_setup_data->rpc_client, msg, hdr);
@@ -1540,7 +1535,10 @@ static int nfs_writeback_done(struct rpc_task *task,
status = NFS_PROTO(inode)->write_done(task, hdr);
if (status != 0)
return status;
+
nfs_add_stats(inode, NFSIOS_SERVERWRITTENBYTES, hdr->res.count);
+ trace_nfs_writeback_done(inode, task->tk_status,
+ hdr->args.offset, hdr->res.verf);
if (hdr->res.verf->committed < hdr->args.stable &&
task->tk_status >= 0) {
@@ -1669,6 +1667,7 @@ int nfs_initiate_commit(struct rpc_clnt *clnt, struct nfs_commit_data *data,
};
/* Set up the initial task struct. */
nfs_ops->commit_setup(data, &msg);
+ trace_nfs_initiate_commit(data);
dprintk("NFS: initiated commit call\n");
@@ -1793,6 +1792,7 @@ static void nfs_commit_done(struct rpc_task *task, void *calldata)
/* Call the NFS version-specific code */
NFS_PROTO(data->inode)->commit_done(task, data);
+ trace_nfs_commit_done(data);
}
static void nfs_commit_release_pages(struct nfs_commit_data *data)
diff --git a/fs/nilfs2/inode.c b/fs/nilfs2/inode.c
index 7ffe71a8dfb9..6a612d832e7d 100644
--- a/fs/nilfs2/inode.c
+++ b/fs/nilfs2/inode.c
@@ -174,7 +174,7 @@ static int nilfs_writepages(struct address_space *mapping,
struct inode *inode = mapping->host;
int err = 0;
- if (inode->i_sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(inode->i_sb)) {
nilfs_clear_dirty_pages(mapping, false);
return -EROFS;
}
@@ -191,7 +191,7 @@ static int nilfs_writepage(struct page *page, struct writeback_control *wbc)
struct inode *inode = page->mapping->host;
int err;
- if (inode->i_sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(inode->i_sb)) {
/*
* It means that filesystem was remounted in read-only
* mode because of error or metadata corruption. But we
diff --git a/fs/nilfs2/mdt.c b/fs/nilfs2/mdt.c
index 98835ed6bef4..c6bc1033e7d2 100644
--- a/fs/nilfs2/mdt.c
+++ b/fs/nilfs2/mdt.c
@@ -413,7 +413,7 @@ nilfs_mdt_write_page(struct page *page, struct writeback_control *wbc)
struct super_block *sb;
int err = 0;
- if (inode && (inode->i_sb->s_flags & MS_RDONLY)) {
+ if (inode && sb_rdonly(inode->i_sb)) {
/*
* It means that filesystem was remounted in read-only
* mode because of error or metadata corruption. But we
diff --git a/fs/nilfs2/super.c b/fs/nilfs2/super.c
index 926682981d61..4fc018dfcfae 100644
--- a/fs/nilfs2/super.c
+++ b/fs/nilfs2/super.c
@@ -136,7 +136,7 @@ void __nilfs_error(struct super_block *sb, const char *function,
va_end(args);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
nilfs_set_error(sb);
if (nilfs_test_opt(nilfs, ERRORS_RO)) {
@@ -478,7 +478,7 @@ static void nilfs_put_super(struct super_block *sb)
nilfs_detach_log_writer(sb);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
down_write(&nilfs->ns_sem);
nilfs_cleanup_super(sb);
up_write(&nilfs->ns_sem);
@@ -578,7 +578,7 @@ static int nilfs_freeze(struct super_block *sb)
struct the_nilfs *nilfs = sb->s_fs_info;
int err;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return 0;
/* Mark super block clean */
@@ -592,7 +592,7 @@ static int nilfs_unfreeze(struct super_block *sb)
{
struct the_nilfs *nilfs = sb->s_fs_info;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return 0;
down_write(&nilfs->ns_sem);
@@ -898,7 +898,7 @@ int nilfs_check_feature_compatibility(struct super_block *sb,
}
features = le64_to_cpu(sbp->s_feature_compat_ro) &
~NILFS_FEATURE_COMPAT_RO_SUPP;
- if (!(sb->s_flags & MS_RDONLY) && features) {
+ if (!sb_rdonly(sb) && features) {
nilfs_msg(sb, KERN_ERR,
"couldn't mount RDWR because of unsupported optional features (%llx)",
(unsigned long long)features);
@@ -1083,7 +1083,7 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent)
goto failed_unload;
}
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
err = nilfs_attach_log_writer(sb, fsroot);
if (err)
goto failed_checkpoint;
@@ -1095,7 +1095,7 @@ nilfs_fill_super(struct super_block *sb, void *data, int silent)
nilfs_put_root(fsroot);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
down_write(&nilfs->ns_sem);
nilfs_setup_super(sb, true);
up_write(&nilfs->ns_sem);
@@ -1144,7 +1144,7 @@ static int nilfs_remount(struct super_block *sb, int *flags, char *data)
goto restore_opts;
}
- if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
+ if ((bool)(*flags & MS_RDONLY) == sb_rdonly(sb))
goto out;
if (*flags & MS_RDONLY) {
/* Shutting down log writer */
@@ -1338,8 +1338,7 @@ nilfs_mount(struct file_system_type *fs_type, int flags,
if ((flags ^ s->s_flags) & MS_RDONLY) {
nilfs_msg(s, KERN_ERR,
"the device already has a %s mount.",
- (s->s_flags & MS_RDONLY) ?
- "read-only" : "read/write");
+ sb_rdonly(s) ? "read-only" : "read/write");
err = -EBUSY;
goto failed_super;
}
diff --git a/fs/ntfs/super.c b/fs/ntfs/super.c
index ecb49870a680..3f70f041dbe9 100644
--- a/fs/ntfs/super.c
+++ b/fs/ntfs/super.c
@@ -487,7 +487,7 @@ static int ntfs_remount(struct super_block *sb, int *flags, char *opt)
* When remounting read-only, mark the volume clean if no volume errors
* have occurred.
*/
- if ((sb->s_flags & MS_RDONLY) && !(*flags & MS_RDONLY)) {
+ if (sb_rdonly(sb) && !(*flags & MS_RDONLY)) {
static const char *es = ". Cannot remount read-write.";
/* Remounting read-write. */
@@ -548,7 +548,7 @@ static int ntfs_remount(struct super_block *sb, int *flags, char *opt)
NVolSetErrors(vol);
return -EROFS;
}
- } else if (!(sb->s_flags & MS_RDONLY) && (*flags & MS_RDONLY)) {
+ } else if (!sb_rdonly(sb) && (*flags & MS_RDONLY)) {
/* Remounting read-only. */
if (!NVolErrors(vol)) {
if (ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY))
@@ -732,7 +732,7 @@ hotfix_primary_boot_sector:
* on a large sector device contains the whole boot loader or
* just the first 512 bytes).
*/
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
ntfs_warning(sb, "Hot-fix: Recovering invalid primary "
"boot sector from backup copy.");
memcpy(bh_primary->b_data, bh_backup->b_data,
@@ -1789,7 +1789,7 @@ static bool load_system_files(ntfs_volume *vol)
static const char *es3 = ". Run ntfsfix and/or chkdsk.";
/* If a read-write mount, convert it to a read-only mount. */
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO |
ON_ERRORS_CONTINUE))) {
ntfs_error(sb, "%s and neither on_errors="
@@ -1928,7 +1928,7 @@ get_ctx_vol_failed:
(unsigned)le16_to_cpu(vol->vol_flags));
}
/* If a read-write mount, convert it to a read-only mount. */
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO |
ON_ERRORS_CONTINUE))) {
ntfs_error(sb, "%s and neither on_errors="
@@ -1961,7 +1961,7 @@ get_ctx_vol_failed:
es1 = !vol->logfile_ino ? es1a : es1b;
/* If a read-write mount, convert it to a read-only mount. */
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO |
ON_ERRORS_CONTINUE))) {
ntfs_error(sb, "%s and neither on_errors="
@@ -2010,7 +2010,7 @@ get_ctx_vol_failed:
es1 = err < 0 ? es1a : es1b;
/* If a read-write mount, convert it to a read-only mount. */
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO |
ON_ERRORS_CONTINUE))) {
ntfs_error(sb, "%s and neither on_errors="
@@ -2028,8 +2028,7 @@ get_ctx_vol_failed:
NVolSetErrors(vol);
}
/* If (still) a read-write mount, mark the volume dirty. */
- if (!(sb->s_flags & MS_RDONLY) &&
- ntfs_set_volume_flags(vol, VOLUME_IS_DIRTY)) {
+ if (!sb_rdonly(sb) && ntfs_set_volume_flags(vol, VOLUME_IS_DIRTY)) {
static const char *es1 = "Failed to set dirty bit in volume "
"information flags";
static const char *es2 = ". Run chkdsk.";
@@ -2075,8 +2074,7 @@ get_ctx_vol_failed:
}
#endif
/* If (still) a read-write mount, empty the logfile. */
- if (!(sb->s_flags & MS_RDONLY) &&
- !ntfs_empty_logfile(vol->logfile_ino)) {
+ if (!sb_rdonly(sb) && !ntfs_empty_logfile(vol->logfile_ino)) {
static const char *es1 = "Failed to empty $LogFile";
static const char *es2 = ". Mount in Windows.";
@@ -2121,7 +2119,7 @@ get_ctx_vol_failed:
static const char *es2 = ". Run chkdsk.";
/* If a read-write mount, convert it to a read-only mount. */
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO |
ON_ERRORS_CONTINUE))) {
ntfs_error(sb, "%s and neither on_errors="
@@ -2139,8 +2137,7 @@ get_ctx_vol_failed:
NVolSetErrors(vol);
}
/* If (still) a read-write mount, mark the quotas out of date. */
- if (!(sb->s_flags & MS_RDONLY) &&
- !ntfs_mark_quotas_out_of_date(vol)) {
+ if (!sb_rdonly(sb) && !ntfs_mark_quotas_out_of_date(vol)) {
static const char *es1 = "Failed to mark quotas out of date";
static const char *es2 = ". Run chkdsk.";
@@ -2165,7 +2162,7 @@ get_ctx_vol_failed:
static const char *es2 = ". Run chkdsk.";
/* If a read-write mount, convert it to a read-only mount. */
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!(vol->on_errors & (ON_ERRORS_REMOUNT_RO |
ON_ERRORS_CONTINUE))) {
ntfs_error(sb, "%s and neither on_errors="
@@ -2183,7 +2180,7 @@ get_ctx_vol_failed:
NVolSetErrors(vol);
}
/* If (still) a read-write mount, stamp the transaction log. */
- if (!(sb->s_flags & MS_RDONLY) && !ntfs_stamp_usnjrnl(vol)) {
+ if (!sb_rdonly(sb) && !ntfs_stamp_usnjrnl(vol)) {
static const char *es1 = "Failed to stamp transaction log "
"($UsnJrnl)";
static const char *es2 = ". Run chkdsk.";
@@ -2314,7 +2311,7 @@ static void ntfs_put_super(struct super_block *sb)
* If a read-write mount and no volume errors have occurred, mark the
* volume clean. Also, re-commit all affected inodes.
*/
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!NVolErrors(vol)) {
if (ntfs_clear_volume_flags(vol, VOLUME_IS_DIRTY))
ntfs_warning(sb, "Failed to clear dirty bit "
diff --git a/fs/ocfs2/super.c b/fs/ocfs2/super.c
index 3f936be379a9..80733496b22a 100644
--- a/fs/ocfs2/super.c
+++ b/fs/ocfs2/super.c
@@ -675,7 +675,7 @@ static int ocfs2_remount(struct super_block *sb, int *flags, char *data)
}
/* We're going to/from readonly mode. */
- if ((*flags & MS_RDONLY) != (sb->s_flags & MS_RDONLY)) {
+ if ((bool)(*flags & MS_RDONLY) != sb_rdonly(sb)) {
/* Disable quota accounting before remounting RO */
if (*flags & MS_RDONLY) {
ret = ocfs2_susp_quotas(osb, 0);
@@ -1063,7 +1063,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
/* Hard readonly mode only if: bdev_read_only, MS_RDONLY,
* heartbeat=none */
if (bdev_read_only(sb->s_bdev)) {
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
status = -EACCES;
mlog(ML_ERROR, "Readonly device detected but readonly "
"mount was not specified.\n");
@@ -1098,7 +1098,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
}
if (!ocfs2_is_hard_readonly(osb)) {
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
ocfs2_set_ro_flag(osb, 0);
}
@@ -1179,7 +1179,7 @@ static int ocfs2_fill_super(struct super_block *sb, void *data, int silent)
/* Now we can initialize quotas because we can afford to wait
* for cluster locks recovery now. That also means that truncation
* log recovery can happen but that waits for proper quota setup */
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
status = ocfs2_enable_quotas(osb);
if (status < 0) {
/* We have to err-out specially here because
@@ -2180,8 +2180,7 @@ static int ocfs2_initialize_super(struct super_block *sb,
status = -EINVAL;
goto bail;
}
- if (!(osb->sb->s_flags & MS_RDONLY) &&
- (i = OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb, ~OCFS2_FEATURE_RO_COMPAT_SUPP))) {
+ if (!sb_rdonly(osb->sb) && (i = OCFS2_HAS_RO_COMPAT_FEATURE(osb->sb, ~OCFS2_FEATURE_RO_COMPAT_SUPP))) {
mlog(ML_ERROR, "couldn't mount RDWR because of "
"unsupported optional features (%x).\n", i);
status = -EINVAL;
@@ -2567,9 +2566,7 @@ static int ocfs2_handle_error(struct super_block *sb)
rv = -EIO;
} else { /* default option */
rv = -EROFS;
- if (sb->s_flags & MS_RDONLY &&
- (ocfs2_is_soft_readonly(osb) ||
- ocfs2_is_hard_readonly(osb)))
+ if (sb_rdonly(sb) && (ocfs2_is_soft_readonly(osb) || ocfs2_is_hard_readonly(osb)))
return rv;
pr_crit("OCFS2: File system is now read-only.\n");
diff --git a/fs/open.c b/fs/open.c
index 35bb784763a4..7ea118471dce 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -96,7 +96,7 @@ long vfs_truncate(const struct path *path, loff_t length)
* write access on the upper inode, not on the overlay inode. For
* non-overlay filesystems d_real() is an identity function.
*/
- upperdentry = d_real(path->dentry, NULL, O_WRONLY);
+ upperdentry = d_real(path->dentry, NULL, O_WRONLY, 0);
error = PTR_ERR(upperdentry);
if (IS_ERR(upperdentry))
goto mnt_drop_write_and_out;
@@ -670,12 +670,12 @@ SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group)
if (!f.file)
goto out;
- error = mnt_want_write_file(f.file);
+ error = mnt_want_write_file_path(f.file);
if (error)
goto out_fput;
audit_file(f.file);
error = chown_common(&f.file->f_path, user, group);
- mnt_drop_write_file(f.file);
+ mnt_drop_write_file_path(f.file);
out_fput:
fdput(f);
out:
@@ -857,7 +857,7 @@ EXPORT_SYMBOL(file_path);
int vfs_open(const struct path *path, struct file *file,
const struct cred *cred)
{
- struct dentry *dentry = d_real(path->dentry, NULL, file->f_flags);
+ struct dentry *dentry = d_real(path->dentry, NULL, file->f_flags, 0);
if (IS_ERR(dentry))
return PTR_ERR(dentry);
diff --git a/fs/orangefs/acl.c b/fs/orangefs/acl.c
index 7a3754488312..9108ef433e6d 100644
--- a/fs/orangefs/acl.c
+++ b/fs/orangefs/acl.c
@@ -35,7 +35,7 @@ struct posix_acl *orangefs_get_acl(struct inode *inode, int type)
* I don't do that for now.
*/
value = kmalloc(ORANGEFS_MAX_XATTR_VALUELEN, GFP_KERNEL);
- if (value == NULL)
+ if (!value)
return ERR_PTR(-ENOMEM);
gossip_debug(GOSSIP_ACL_DEBUG,
@@ -61,9 +61,9 @@ struct posix_acl *orangefs_get_acl(struct inode *inode, int type)
return acl;
}
-int orangefs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
+static int __orangefs_set_acl(struct inode *inode, struct posix_acl *acl,
+ int type)
{
- struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
int error = 0;
void *value = NULL;
size_t size = 0;
@@ -72,22 +72,6 @@ int orangefs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
switch (type) {
case ACL_TYPE_ACCESS:
name = XATTR_NAME_POSIX_ACL_ACCESS;
- if (acl) {
- umode_t mode;
-
- error = posix_acl_update_mode(inode, &mode, &acl);
- if (error) {
- gossip_err("%s: posix_acl_update_mode err: %d\n",
- __func__,
- error);
- return error;
- }
-
- if (inode->i_mode != mode)
- SetModeFlag(orangefs_inode);
- inode->i_mode = mode;
- mark_inode_dirty_sync(inode);
- }
break;
case ACL_TYPE_DEFAULT:
name = XATTR_NAME_POSIX_ACL_DEFAULT;
@@ -132,6 +116,42 @@ out:
return error;
}
+int orangefs_set_acl(struct inode *inode, struct posix_acl *acl, int type)
+{
+ int error;
+ struct iattr iattr;
+ int rc;
+
+ if (type == ACL_TYPE_ACCESS && acl) {
+ /*
+ * posix_acl_update_mode checks to see if the permissions
+ * described by the ACL can be encoded into the
+ * object's mode. If so, it sets "acl" to NULL
+ * and "mode" to the new desired value. It is up to
+ * us to propagate the new mode back to the server...
+ */
+ error = posix_acl_update_mode(inode, &iattr.ia_mode, &acl);
+ if (error) {
+ gossip_err("%s: posix_acl_update_mode err: %d\n",
+ __func__,
+ error);
+ return error;
+ }
+
+ if (acl) {
+ rc = __orangefs_set_acl(inode, acl, type);
+ } else {
+ iattr.ia_valid = ATTR_MODE;
+ rc = orangefs_inode_setattr(inode, &iattr);
+ }
+
+ return rc;
+
+ } else {
+ return -EINVAL;
+ }
+}
+
int orangefs_init_acl(struct inode *inode, struct inode *dir)
{
struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(inode);
@@ -146,13 +166,14 @@ int orangefs_init_acl(struct inode *inode, struct inode *dir)
return error;
if (default_acl) {
- error = orangefs_set_acl(inode, default_acl, ACL_TYPE_DEFAULT);
+ error = __orangefs_set_acl(inode, default_acl,
+ ACL_TYPE_DEFAULT);
posix_acl_release(default_acl);
}
if (acl) {
if (!error)
- error = orangefs_set_acl(inode, acl, ACL_TYPE_ACCESS);
+ error = __orangefs_set_acl(inode, acl, ACL_TYPE_ACCESS);
posix_acl_release(acl);
}
diff --git a/fs/orangefs/devorangefs-req.c b/fs/orangefs/devorangefs-req.c
index c19f0787c9c6..2826859bdc2c 100644
--- a/fs/orangefs/devorangefs-req.c
+++ b/fs/orangefs/devorangefs-req.c
@@ -461,13 +461,10 @@ static ssize_t orangefs_devreq_write_iter(struct kiocb *iocb,
if (op->downcall.type != ORANGEFS_VFS_OP_READDIR)
goto wakeup;
- op->downcall.trailer_buf =
- vmalloc(op->downcall.trailer_size);
- if (op->downcall.trailer_buf == NULL) {
- gossip_err("%s: failed trailer vmalloc.\n",
- __func__);
+ op->downcall.trailer_buf = vmalloc(op->downcall.trailer_size);
+ if (!op->downcall.trailer_buf)
goto Enomem;
- }
+
memset(op->downcall.trailer_buf, 0, op->downcall.trailer_size);
if (!copy_from_iter_full(op->downcall.trailer_buf,
op->downcall.trailer_size, iter)) {
diff --git a/fs/orangefs/file.c b/fs/orangefs/file.c
index 28f38d813ad2..336ecbf8c268 100644
--- a/fs/orangefs/file.c
+++ b/fs/orangefs/file.c
@@ -646,14 +646,11 @@ static int orangefs_fsync(struct file *file,
loff_t end,
int datasync)
{
- int ret = -EINVAL;
+ int ret;
struct orangefs_inode_s *orangefs_inode =
ORANGEFS_I(file_inode(file));
struct orangefs_kernel_op_s *new_op = NULL;
- /* required call */
- filemap_write_and_wait_range(file->f_mapping, start, end);
-
new_op = op_alloc(ORANGEFS_VFS_OP_FSYNC);
if (!new_op)
return -ENOMEM;
diff --git a/fs/orangefs/orangefs-bufmap.c b/fs/orangefs/orangefs-bufmap.c
index 038d67545d9f..7ef473f3d642 100644
--- a/fs/orangefs/orangefs-bufmap.c
+++ b/fs/orangefs/orangefs-bufmap.c
@@ -244,20 +244,14 @@ orangefs_bufmap_alloc(struct ORANGEFS_dev_map_desc *user_desc)
bufmap->buffer_index_array =
kzalloc(DIV_ROUND_UP(bufmap->desc_count, BITS_PER_LONG), GFP_KERNEL);
- if (!bufmap->buffer_index_array) {
- gossip_err("orangefs: could not allocate %d buffer indices\n",
- bufmap->desc_count);
+ if (!bufmap->buffer_index_array)
goto out_free_bufmap;
- }
bufmap->desc_array =
kcalloc(bufmap->desc_count, sizeof(struct orangefs_bufmap_desc),
GFP_KERNEL);
- if (!bufmap->desc_array) {
- gossip_err("orangefs: could not allocate %d descriptors\n",
- bufmap->desc_count);
+ if (!bufmap->desc_array)
goto out_free_index_array;
- }
bufmap->page_count = bufmap->total_size / PAGE_SIZE;
diff --git a/fs/orangefs/orangefs-debugfs.c b/fs/orangefs/orangefs-debugfs.c
index 716ed337f166..5f59917fd631 100644
--- a/fs/orangefs/orangefs-debugfs.c
+++ b/fs/orangefs/orangefs-debugfs.c
@@ -571,11 +571,8 @@ static int orangefs_prepare_cdm_array(char *debug_array_string)
goto out;
}
- cdm_array =
- kzalloc(cdm_element_count * sizeof(struct client_debug_mask),
- GFP_KERNEL);
+ cdm_array = kcalloc(cdm_element_count, sizeof(*cdm_array), GFP_KERNEL);
if (!cdm_array) {
- pr_info("malloc failed for cdm_array!\n");
rc = -ENOMEM;
goto out;
}
diff --git a/fs/orangefs/orangefs-mod.c b/fs/orangefs/orangefs-mod.c
index c1b5174cb5a9..85ef87245a87 100644
--- a/fs/orangefs/orangefs-mod.c
+++ b/fs/orangefs/orangefs-mod.c
@@ -98,7 +98,6 @@ static int __init orangefs_init(void)
orangefs_htable_ops_in_progress =
kcalloc(hash_table_size, sizeof(struct list_head), GFP_KERNEL);
if (!orangefs_htable_ops_in_progress) {
- gossip_err("Failed to initialize op hashtable");
ret = -ENOMEM;
goto cleanup_inode;
}
diff --git a/fs/orangefs/super.c b/fs/orangefs/super.c
index 5a1bed6c8c6a..47f3fb9cbec4 100644
--- a/fs/orangefs/super.c
+++ b/fs/orangefs/super.c
@@ -107,10 +107,8 @@ static struct inode *orangefs_alloc_inode(struct super_block *sb)
struct orangefs_inode_s *orangefs_inode;
orangefs_inode = kmem_cache_alloc(orangefs_inode_cache, GFP_KERNEL);
- if (orangefs_inode == NULL) {
- gossip_err("Failed to allocate orangefs_inode\n");
+ if (!orangefs_inode)
return NULL;
- }
/*
* We want to clear everything except for rw_semaphore and the
diff --git a/fs/orangefs/xattr.c b/fs/orangefs/xattr.c
index 237c9c04dc3b..81ac88bb91ff 100644
--- a/fs/orangefs/xattr.c
+++ b/fs/orangefs/xattr.c
@@ -76,7 +76,7 @@ ssize_t orangefs_inode_getxattr(struct inode *inode, const char *name,
if (S_ISLNK(inode->i_mode))
return -EOPNOTSUPP;
- if (strlen(name) > ORANGEFS_MAX_XATTR_NAMELEN)
+ if (strlen(name) >= ORANGEFS_MAX_XATTR_NAMELEN)
return -EINVAL;
fsuid = from_kuid(&init_user_ns, current_fsuid());
@@ -169,7 +169,7 @@ static int orangefs_inode_removexattr(struct inode *inode, const char *name,
struct orangefs_kernel_op_s *new_op = NULL;
int ret = -ENOMEM;
- if (strlen(name) > ORANGEFS_MAX_XATTR_NAMELEN)
+ if (strlen(name) >= ORANGEFS_MAX_XATTR_NAMELEN)
return -EINVAL;
down_write(&orangefs_inode->xattr_sem);
@@ -233,13 +233,13 @@ int orangefs_inode_setxattr(struct inode *inode, const char *name,
if (size > ORANGEFS_MAX_XATTR_VALUELEN)
return -EINVAL;
- if (strlen(name) > ORANGEFS_MAX_XATTR_NAMELEN)
+ if (strlen(name) >= ORANGEFS_MAX_XATTR_NAMELEN)
return -EINVAL;
internal_flag = convert_to_internal_xattr_flags(flags);
/* This is equivalent to a removexattr */
- if (size == 0 && value == NULL) {
+ if (size == 0 && !value) {
gossip_debug(GOSSIP_XATTR_DEBUG,
"removing xattr (%s)\n",
name);
@@ -311,7 +311,7 @@ ssize_t orangefs_listxattr(struct dentry *dentry, char *buffer, size_t size)
int i = 0;
int returned_count = 0;
- if (size > 0 && buffer == NULL) {
+ if (size > 0 && !buffer) {
gossip_err("%s: bogus NULL pointers\n", __func__);
return -EINVAL;
}
@@ -442,7 +442,7 @@ static int orangefs_xattr_get_default(const struct xattr_handler *handler,
}
-static struct xattr_handler orangefs_xattr_default_handler = {
+static const struct xattr_handler orangefs_xattr_default_handler = {
.prefix = "", /* match any name => handlers called with full name */
.get = orangefs_xattr_get_default,
.set = orangefs_xattr_set_default,
diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index acb6f97deb97..aad97b30d5e6 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -241,7 +241,7 @@ struct ovl_fh *ovl_encode_fh(struct dentry *lower, bool is_upper)
int buflen = MAX_HANDLE_SZ;
uuid_t *uuid = &lower->d_sb->s_uuid;
- buf = kmalloc(buflen, GFP_TEMPORARY);
+ buf = kmalloc(buflen, GFP_KERNEL);
if (!buf)
return ERR_PTR(-ENOMEM);
diff --git a/fs/overlayfs/dir.c b/fs/overlayfs/dir.c
index 48b70e6490f3..3309b1912241 100644
--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -155,7 +155,7 @@ static int ovl_set_opaque(struct dentry *dentry, struct dentry *upperdentry)
static void ovl_instantiate(struct dentry *dentry, struct inode *inode,
struct dentry *newdentry, bool hardlink)
{
- ovl_dentry_version_inc(dentry->d_parent);
+ ovl_dentry_version_inc(dentry->d_parent, false);
ovl_dentry_set_upper_alias(dentry);
if (!hardlink) {
ovl_inode_update(inode, newdentry);
@@ -692,7 +692,7 @@ static int ovl_remove_and_whiteout(struct dentry *dentry, bool is_dir)
if (flags)
ovl_cleanup(wdir, upper);
- ovl_dentry_version_inc(dentry->d_parent);
+ ovl_dentry_version_inc(dentry->d_parent, true);
out_d_drop:
d_drop(dentry);
dput(whiteout);
@@ -742,7 +742,7 @@ static int ovl_remove_upper(struct dentry *dentry, bool is_dir)
err = vfs_rmdir(dir, upper);
else
err = vfs_unlink(dir, upper, NULL);
- ovl_dentry_version_inc(dentry->d_parent);
+ ovl_dentry_version_inc(dentry->d_parent, ovl_type_origin(dentry));
/*
* Keeping this dentry hashed would mean having to release
@@ -833,7 +833,7 @@ static char *ovl_get_redirect(struct dentry *dentry, bool samedir)
goto out;
}
- buf = ret = kmalloc(buflen, GFP_TEMPORARY);
+ buf = ret = kmalloc(buflen, GFP_KERNEL);
if (!buf)
goto out;
@@ -1089,8 +1089,9 @@ static int ovl_rename(struct inode *olddir, struct dentry *old,
drop_nlink(d_inode(new));
}
- ovl_dentry_version_inc(old->d_parent);
- ovl_dentry_version_inc(new->d_parent);
+ ovl_dentry_version_inc(old->d_parent,
+ !overwrite && ovl_type_origin(new));
+ ovl_dentry_version_inc(new->d_parent, ovl_type_origin(old));
out_dput:
dput(newdentry);
diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
index 5bc71642b226..a619addecafc 100644
--- a/fs/overlayfs/inode.c
+++ b/fs/overlayfs/inode.c
@@ -498,6 +498,9 @@ static int ovl_set_nlink_common(struct dentry *dentry,
len = snprintf(buf, sizeof(buf), format,
(int) (inode->i_nlink - realinode->i_nlink));
+ if (WARN_ON(len >= sizeof(buf)))
+ return -EIO;
+
return ovl_do_setxattr(ovl_dentry_upper(dentry),
OVL_XATTR_NLINK, buf, len, 0);
}
@@ -576,10 +579,13 @@ static int ovl_inode_set(struct inode *inode, void *data)
static bool ovl_verify_inode(struct inode *inode, struct dentry *lowerdentry,
struct dentry *upperdentry)
{
- struct inode *lowerinode = lowerdentry ? d_inode(lowerdentry) : NULL;
-
- /* Lower (origin) inode must match, even if NULL */
- if (ovl_inode_lower(inode) != lowerinode)
+ /*
+ * Allow non-NULL lower inode in ovl_inode even if lowerdentry is NULL.
+ * This happens when finding a copied up overlay inode for a renamed
+ * or hardlinked overlay dentry and lower dentry cannot be followed
+ * by origin because lower fs does not support file handles.
+ */
+ if (lowerdentry && ovl_inode_lower(inode) != d_inode(lowerdentry))
return false;
/*
diff --git a/fs/overlayfs/namei.c b/fs/overlayfs/namei.c
index 8aef2b304b2d..c3addd1114f1 100644
--- a/fs/overlayfs/namei.c
+++ b/fs/overlayfs/namei.c
@@ -38,7 +38,7 @@ static int ovl_check_redirect(struct dentry *dentry, struct ovl_lookup_data *d,
return 0;
goto fail;
}
- buf = kzalloc(prelen + res + strlen(post) + 1, GFP_TEMPORARY);
+ buf = kzalloc(prelen + res + strlen(post) + 1, GFP_KERNEL);
if (!buf)
return -ENOMEM;
@@ -103,7 +103,7 @@ static struct ovl_fh *ovl_get_origin_fh(struct dentry *dentry)
if (res == 0)
return NULL;
- fh = kzalloc(res, GFP_TEMPORARY);
+ fh = kzalloc(res, GFP_KERNEL);
if (!fh)
return ERR_PTR(-ENOMEM);
@@ -309,7 +309,7 @@ static int ovl_check_origin(struct dentry *upperdentry,
BUG_ON(*ctrp);
if (!*stackp)
- *stackp = kmalloc(sizeof(struct path), GFP_TEMPORARY);
+ *stackp = kmalloc(sizeof(struct path), GFP_KERNEL);
if (!*stackp) {
dput(origin);
return -ENOMEM;
@@ -418,7 +418,7 @@ int ovl_verify_index(struct dentry *index, struct path *lowerstack,
err = -ENOMEM;
len = index->d_name.len / 2;
- fh = kzalloc(len, GFP_TEMPORARY);
+ fh = kzalloc(len, GFP_KERNEL);
if (!fh)
goto fail;
@@ -478,7 +478,7 @@ int ovl_get_index_name(struct dentry *origin, struct qstr *name)
return PTR_ERR(fh);
err = -ENOMEM;
- n = kzalloc(fh->len * 2, GFP_TEMPORARY);
+ n = kzalloc(fh->len * 2, GFP_KERNEL);
if (n) {
s = bin2hex(n, fh, fh->len);
*name = (struct qstr) QSTR_INIT(n, s - n);
@@ -646,7 +646,7 @@ struct dentry *ovl_lookup(struct inode *dir, struct dentry *dentry,
if (!d.stop && poe->numlower) {
err = -ENOMEM;
stack = kcalloc(ofs->numlower, sizeof(struct path),
- GFP_TEMPORARY);
+ GFP_KERNEL);
if (!stack)
goto out_put_upper;
}
diff --git a/fs/overlayfs/overlayfs.h b/fs/overlayfs/overlayfs.h
index e927a62c97ae..d4e8c1a08fb0 100644
--- a/fs/overlayfs/overlayfs.h
+++ b/fs/overlayfs/overlayfs.h
@@ -204,8 +204,8 @@ struct dentry *ovl_i_dentry_upper(struct inode *inode);
struct inode *ovl_inode_upper(struct inode *inode);
struct inode *ovl_inode_lower(struct inode *inode);
struct inode *ovl_inode_real(struct inode *inode);
-struct ovl_dir_cache *ovl_dir_cache(struct dentry *dentry);
-void ovl_set_dir_cache(struct dentry *dentry, struct ovl_dir_cache *cache);
+struct ovl_dir_cache *ovl_dir_cache(struct inode *inode);
+void ovl_set_dir_cache(struct inode *inode, struct ovl_dir_cache *cache);
bool ovl_dentry_is_opaque(struct dentry *dentry);
bool ovl_dentry_is_whiteout(struct dentry *dentry);
void ovl_dentry_set_opaque(struct dentry *dentry);
@@ -217,7 +217,7 @@ void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect);
void ovl_inode_init(struct inode *inode, struct dentry *upperdentry,
struct dentry *lowerdentry);
void ovl_inode_update(struct inode *inode, struct dentry *upperdentry);
-void ovl_dentry_version_inc(struct dentry *dentry);
+void ovl_dentry_version_inc(struct dentry *dentry, bool impurity);
u64 ovl_dentry_version_get(struct dentry *dentry);
bool ovl_is_whiteout(struct dentry *dentry);
struct file *ovl_path_open(struct path *path, int flags);
@@ -229,6 +229,7 @@ int ovl_check_setxattr(struct dentry *dentry, struct dentry *upperdentry,
int xerr);
int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry);
void ovl_set_flag(unsigned long flag, struct inode *inode);
+void ovl_clear_flag(unsigned long flag, struct inode *inode);
bool ovl_test_flag(unsigned long flag, struct inode *inode);
bool ovl_inuse_trylock(struct dentry *dentry);
void ovl_inuse_unlock(struct dentry *dentry);
@@ -256,6 +257,7 @@ extern const struct file_operations ovl_dir_operations;
int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list);
void ovl_cleanup_whiteouts(struct dentry *upper, struct list_head *list);
void ovl_cache_free(struct list_head *list);
+void ovl_dir_cache_free(struct inode *inode);
int ovl_check_d_type_supported(struct path *realpath);
void ovl_workdir_cleanup(struct inode *dir, struct vfsmount *mnt,
struct dentry *dentry, int level);
diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c
index f0fd3adb1693..62e9b22a2077 100644
--- a/fs/overlayfs/readdir.c
+++ b/fs/overlayfs/readdir.c
@@ -15,11 +15,13 @@
#include <linux/rbtree.h>
#include <linux/security.h>
#include <linux/cred.h>
+#include <linux/ratelimit.h>
#include "overlayfs.h"
struct ovl_cache_entry {
unsigned int len;
unsigned int type;
+ u64 real_ino;
u64 ino;
struct list_head l_node;
struct rb_node node;
@@ -32,18 +34,20 @@ struct ovl_dir_cache {
long refcount;
u64 version;
struct list_head entries;
+ struct rb_root root;
};
struct ovl_readdir_data {
struct dir_context ctx;
struct dentry *dentry;
bool is_lowest;
- struct rb_root root;
+ struct rb_root *root;
struct list_head *list;
struct list_head middle;
struct ovl_cache_entry *first_maybe_whiteout;
int count;
int err;
+ bool is_upper;
bool d_type_supported;
};
@@ -58,7 +62,33 @@ struct ovl_dir_file {
static struct ovl_cache_entry *ovl_cache_entry_from_node(struct rb_node *n)
{
- return container_of(n, struct ovl_cache_entry, node);
+ return rb_entry(n, struct ovl_cache_entry, node);
+}
+
+static bool ovl_cache_entry_find_link(const char *name, int len,
+ struct rb_node ***link,
+ struct rb_node **parent)
+{
+ bool found = false;
+ struct rb_node **newp = *link;
+
+ while (!found && *newp) {
+ int cmp;
+ struct ovl_cache_entry *tmp;
+
+ *parent = *newp;
+ tmp = ovl_cache_entry_from_node(*newp);
+ cmp = strncmp(name, tmp->name, len);
+ if (cmp > 0)
+ newp = &tmp->node.rb_right;
+ else if (cmp < 0 || len < tmp->len)
+ newp = &tmp->node.rb_left;
+ else
+ found = true;
+ }
+ *link = newp;
+
+ return found;
}
static struct ovl_cache_entry *ovl_cache_entry_find(struct rb_root *root,
@@ -82,6 +112,32 @@ static struct ovl_cache_entry *ovl_cache_entry_find(struct rb_root *root,
return NULL;
}
+static bool ovl_calc_d_ino(struct ovl_readdir_data *rdd,
+ struct ovl_cache_entry *p)
+{
+ /* Don't care if not doing ovl_iter() */
+ if (!rdd->dentry)
+ return false;
+
+ /* Always recalc d_ino for parent */
+ if (strcmp(p->name, "..") == 0)
+ return true;
+
+ /* If this is lower, then native d_ino will do */
+ if (!rdd->is_upper)
+ return false;
+
+ /*
+ * Recalc d_ino for '.' and for all entries if dir is impure (contains
+ * copied up entries)
+ */
+ if ((p->name[0] == '.' && p->len == 1) ||
+ ovl_test_flag(OVL_IMPURE, d_inode(rdd->dentry)))
+ return true;
+
+ return false;
+}
+
static struct ovl_cache_entry *ovl_cache_entry_new(struct ovl_readdir_data *rdd,
const char *name, int len,
u64 ino, unsigned int d_type)
@@ -97,7 +153,11 @@ static struct ovl_cache_entry *ovl_cache_entry_new(struct ovl_readdir_data *rdd,
p->name[len] = '\0';
p->len = len;
p->type = d_type;
+ p->real_ino = ino;
p->ino = ino;
+ /* Defer setting d_ino for upper entry to ovl_iterate() */
+ if (ovl_calc_d_ino(rdd, p))
+ p->ino = 0;
p->is_whiteout = false;
if (d_type == DT_CHR) {
@@ -111,32 +171,22 @@ static int ovl_cache_entry_add_rb(struct ovl_readdir_data *rdd,
const char *name, int len, u64 ino,
unsigned int d_type)
{
- struct rb_node **newp = &rdd->root.rb_node;
+ struct rb_node **newp = &rdd->root->rb_node;
struct rb_node *parent = NULL;
struct ovl_cache_entry *p;
- while (*newp) {
- int cmp;
- struct ovl_cache_entry *tmp;
-
- parent = *newp;
- tmp = ovl_cache_entry_from_node(*newp);
- cmp = strncmp(name, tmp->name, len);
- if (cmp > 0)
- newp = &tmp->node.rb_right;
- else if (cmp < 0 || len < tmp->len)
- newp = &tmp->node.rb_left;
- else
- return 0;
- }
+ if (ovl_cache_entry_find_link(name, len, &newp, &parent))
+ return 0;
p = ovl_cache_entry_new(rdd, name, len, ino, d_type);
- if (p == NULL)
+ if (p == NULL) {
+ rdd->err = -ENOMEM;
return -ENOMEM;
+ }
list_add_tail(&p->l_node, rdd->list);
rb_link_node(&p->node, parent, newp);
- rb_insert_color(&p->node, &rdd->root);
+ rb_insert_color(&p->node, rdd->root);
return 0;
}
@@ -147,7 +197,7 @@ static int ovl_fill_lowest(struct ovl_readdir_data *rdd,
{
struct ovl_cache_entry *p;
- p = ovl_cache_entry_find(&rdd->root, name, namelen);
+ p = ovl_cache_entry_find(rdd->root, name, namelen);
if (p) {
list_move_tail(&p->l_node, &rdd->middle);
} else {
@@ -172,6 +222,16 @@ void ovl_cache_free(struct list_head *list)
INIT_LIST_HEAD(list);
}
+void ovl_dir_cache_free(struct inode *inode)
+{
+ struct ovl_dir_cache *cache = ovl_dir_cache(inode);
+
+ if (cache) {
+ ovl_cache_free(&cache->entries);
+ kfree(cache);
+ }
+}
+
static void ovl_cache_put(struct ovl_dir_file *od, struct dentry *dentry)
{
struct ovl_dir_cache *cache = od->cache;
@@ -179,8 +239,8 @@ static void ovl_cache_put(struct ovl_dir_file *od, struct dentry *dentry)
WARN_ON(cache->refcount <= 0);
cache->refcount--;
if (!cache->refcount) {
- if (ovl_dir_cache(dentry) == cache)
- ovl_set_dir_cache(dentry, NULL);
+ if (ovl_dir_cache(d_inode(dentry)) == cache)
+ ovl_set_dir_cache(d_inode(dentry), NULL);
ovl_cache_free(&cache->entries);
kfree(cache);
@@ -273,7 +333,8 @@ static void ovl_dir_reset(struct file *file)
od->is_real = false;
}
-static int ovl_dir_read_merged(struct dentry *dentry, struct list_head *list)
+static int ovl_dir_read_merged(struct dentry *dentry, struct list_head *list,
+ struct rb_root *root)
{
int err;
struct path realpath;
@@ -281,13 +342,14 @@ static int ovl_dir_read_merged(struct dentry *dentry, struct list_head *list)
.ctx.actor = ovl_fill_merge,
.dentry = dentry,
.list = list,
- .root = RB_ROOT,
+ .root = root,
.is_lowest = false,
};
int idx, next;
for (idx = 0; idx != -1; idx = next) {
next = ovl_path_next(idx, dentry, &realpath);
+ rdd.is_upper = ovl_dentry_upper(dentry) == realpath.dentry;
if (next != -1) {
err = ovl_dir_read(&realpath, &rdd);
@@ -326,12 +388,13 @@ static struct ovl_dir_cache *ovl_cache_get(struct dentry *dentry)
int res;
struct ovl_dir_cache *cache;
- cache = ovl_dir_cache(dentry);
+ cache = ovl_dir_cache(d_inode(dentry));
if (cache && ovl_dentry_version_get(dentry) == cache->version) {
+ WARN_ON(!cache->refcount);
cache->refcount++;
return cache;
}
- ovl_set_dir_cache(dentry, NULL);
+ ovl_set_dir_cache(d_inode(dentry), NULL);
cache = kzalloc(sizeof(struct ovl_dir_cache), GFP_KERNEL);
if (!cache)
@@ -339,8 +402,9 @@ static struct ovl_dir_cache *ovl_cache_get(struct dentry *dentry)
cache->refcount = 1;
INIT_LIST_HEAD(&cache->entries);
+ cache->root = RB_ROOT;
- res = ovl_dir_read_merged(dentry, &cache->entries);
+ res = ovl_dir_read_merged(dentry, &cache->entries, &cache->root);
if (res) {
ovl_cache_free(&cache->entries);
kfree(cache);
@@ -348,22 +412,266 @@ static struct ovl_dir_cache *ovl_cache_get(struct dentry *dentry)
}
cache->version = ovl_dentry_version_get(dentry);
- ovl_set_dir_cache(dentry, cache);
+ ovl_set_dir_cache(d_inode(dentry), cache);
return cache;
}
+/*
+ * Set d_ino for upper entries. Non-upper entries should always report
+ * the uppermost real inode ino and should not call this function.
+ *
+ * When not all layer are on same fs, report real ino also for upper.
+ *
+ * When all layers are on the same fs, and upper has a reference to
+ * copy up origin, call vfs_getattr() on the overlay entry to make
+ * sure that d_ino will be consistent with st_ino from stat(2).
+ */
+static int ovl_cache_update_ino(struct path *path, struct ovl_cache_entry *p)
+
+{
+ struct dentry *dir = path->dentry;
+ struct dentry *this = NULL;
+ enum ovl_path_type type;
+ u64 ino = p->real_ino;
+ int err = 0;
+
+ if (!ovl_same_sb(dir->d_sb))
+ goto out;
+
+ if (p->name[0] == '.') {
+ if (p->len == 1) {
+ this = dget(dir);
+ goto get;
+ }
+ if (p->len == 2 && p->name[1] == '.') {
+ /* we shall not be moved */
+ this = dget(dir->d_parent);
+ goto get;
+ }
+ }
+ this = lookup_one_len(p->name, dir, p->len);
+ if (IS_ERR_OR_NULL(this) || !this->d_inode) {
+ if (IS_ERR(this)) {
+ err = PTR_ERR(this);
+ this = NULL;
+ goto fail;
+ }
+ goto out;
+ }
+
+get:
+ type = ovl_path_type(this);
+ if (OVL_TYPE_ORIGIN(type)) {
+ struct kstat stat;
+ struct path statpath = *path;
+
+ statpath.dentry = this;
+ err = vfs_getattr(&statpath, &stat, STATX_INO, 0);
+ if (err)
+ goto fail;
+
+ WARN_ON_ONCE(dir->d_sb->s_dev != stat.dev);
+ ino = stat.ino;
+ }
+
+out:
+ p->ino = ino;
+ dput(this);
+ return err;
+
+fail:
+ pr_warn_ratelimited("overlay: failed to look up (%s) for ino (%i)\n",
+ p->name, err);
+ goto out;
+}
+
+static int ovl_fill_plain(struct dir_context *ctx, const char *name,
+ int namelen, loff_t offset, u64 ino,
+ unsigned int d_type)
+{
+ struct ovl_cache_entry *p;
+ struct ovl_readdir_data *rdd =
+ container_of(ctx, struct ovl_readdir_data, ctx);
+
+ rdd->count++;
+ p = ovl_cache_entry_new(rdd, name, namelen, ino, d_type);
+ if (p == NULL) {
+ rdd->err = -ENOMEM;
+ return -ENOMEM;
+ }
+ list_add_tail(&p->l_node, rdd->list);
+
+ return 0;
+}
+
+static int ovl_dir_read_impure(struct path *path, struct list_head *list,
+ struct rb_root *root)
+{
+ int err;
+ struct path realpath;
+ struct ovl_cache_entry *p, *n;
+ struct ovl_readdir_data rdd = {
+ .ctx.actor = ovl_fill_plain,
+ .list = list,
+ .root = root,
+ };
+
+ INIT_LIST_HEAD(list);
+ *root = RB_ROOT;
+ ovl_path_upper(path->dentry, &realpath);
+
+ err = ovl_dir_read(&realpath, &rdd);
+ if (err)
+ return err;
+
+ list_for_each_entry_safe(p, n, list, l_node) {
+ if (strcmp(p->name, ".") != 0 &&
+ strcmp(p->name, "..") != 0) {
+ err = ovl_cache_update_ino(path, p);
+ if (err)
+ return err;
+ }
+ if (p->ino == p->real_ino) {
+ list_del(&p->l_node);
+ kfree(p);
+ } else {
+ struct rb_node **newp = &root->rb_node;
+ struct rb_node *parent = NULL;
+
+ if (WARN_ON(ovl_cache_entry_find_link(p->name, p->len,
+ &newp, &parent)))
+ return -EIO;
+
+ rb_link_node(&p->node, parent, newp);
+ rb_insert_color(&p->node, root);
+ }
+ }
+ return 0;
+}
+
+static struct ovl_dir_cache *ovl_cache_get_impure(struct path *path)
+{
+ int res;
+ struct dentry *dentry = path->dentry;
+ struct ovl_dir_cache *cache;
+
+ cache = ovl_dir_cache(d_inode(dentry));
+ if (cache && ovl_dentry_version_get(dentry) == cache->version)
+ return cache;
+
+ /* Impure cache is not refcounted, free it here */
+ ovl_dir_cache_free(d_inode(dentry));
+ ovl_set_dir_cache(d_inode(dentry), NULL);
+
+ cache = kzalloc(sizeof(struct ovl_dir_cache), GFP_KERNEL);
+ if (!cache)
+ return ERR_PTR(-ENOMEM);
+
+ res = ovl_dir_read_impure(path, &cache->entries, &cache->root);
+ if (res) {
+ ovl_cache_free(&cache->entries);
+ kfree(cache);
+ return ERR_PTR(res);
+ }
+ if (list_empty(&cache->entries)) {
+ /* Good oportunity to get rid of an unnecessary "impure" flag */
+ ovl_do_removexattr(ovl_dentry_upper(dentry), OVL_XATTR_IMPURE);
+ ovl_clear_flag(OVL_IMPURE, d_inode(dentry));
+ kfree(cache);
+ return NULL;
+ }
+
+ cache->version = ovl_dentry_version_get(dentry);
+ ovl_set_dir_cache(d_inode(dentry), cache);
+
+ return cache;
+}
+
+struct ovl_readdir_translate {
+ struct dir_context *orig_ctx;
+ struct ovl_dir_cache *cache;
+ struct dir_context ctx;
+ u64 parent_ino;
+};
+
+static int ovl_fill_real(struct dir_context *ctx, const char *name,
+ int namelen, loff_t offset, u64 ino,
+ unsigned int d_type)
+{
+ struct ovl_readdir_translate *rdt =
+ container_of(ctx, struct ovl_readdir_translate, ctx);
+ struct dir_context *orig_ctx = rdt->orig_ctx;
+
+ if (rdt->parent_ino && strcmp(name, "..") == 0)
+ ino = rdt->parent_ino;
+ else if (rdt->cache) {
+ struct ovl_cache_entry *p;
+
+ p = ovl_cache_entry_find(&rdt->cache->root, name, namelen);
+ if (p)
+ ino = p->ino;
+ }
+
+ return orig_ctx->actor(orig_ctx, name, namelen, offset, ino, d_type);
+}
+
+static int ovl_iterate_real(struct file *file, struct dir_context *ctx)
+{
+ int err;
+ struct ovl_dir_file *od = file->private_data;
+ struct dentry *dir = file->f_path.dentry;
+ struct ovl_readdir_translate rdt = {
+ .ctx.actor = ovl_fill_real,
+ .orig_ctx = ctx,
+ };
+
+ if (OVL_TYPE_MERGE(ovl_path_type(dir->d_parent))) {
+ struct kstat stat;
+ struct path statpath = file->f_path;
+
+ statpath.dentry = dir->d_parent;
+ err = vfs_getattr(&statpath, &stat, STATX_INO, 0);
+ if (err)
+ return err;
+
+ WARN_ON_ONCE(dir->d_sb->s_dev != stat.dev);
+ rdt.parent_ino = stat.ino;
+ }
+
+ if (ovl_test_flag(OVL_IMPURE, d_inode(dir))) {
+ rdt.cache = ovl_cache_get_impure(&file->f_path);
+ if (IS_ERR(rdt.cache))
+ return PTR_ERR(rdt.cache);
+ }
+
+ return iterate_dir(od->realfile, &rdt.ctx);
+}
+
+
static int ovl_iterate(struct file *file, struct dir_context *ctx)
{
struct ovl_dir_file *od = file->private_data;
struct dentry *dentry = file->f_path.dentry;
struct ovl_cache_entry *p;
+ int err;
if (!ctx->pos)
ovl_dir_reset(file);
- if (od->is_real)
+ if (od->is_real) {
+ /*
+ * If parent is merge, then need to adjust d_ino for '..', if
+ * dir is impure then need to adjust d_ino for copied up
+ * entries.
+ */
+ if (ovl_same_sb(dentry->d_sb) &&
+ (ovl_test_flag(OVL_IMPURE, d_inode(dentry)) ||
+ OVL_TYPE_MERGE(ovl_path_type(dentry->d_parent)))) {
+ return ovl_iterate_real(file, ctx);
+ }
return iterate_dir(od->realfile, ctx);
+ }
if (!od->cache) {
struct ovl_dir_cache *cache;
@@ -378,9 +686,15 @@ static int ovl_iterate(struct file *file, struct dir_context *ctx)
while (od->cursor != &od->cache->entries) {
p = list_entry(od->cursor, struct ovl_cache_entry, l_node);
- if (!p->is_whiteout)
+ if (!p->is_whiteout) {
+ if (!p->ino) {
+ err = ovl_cache_update_ino(&file->f_path, p);
+ if (err)
+ return err;
+ }
if (!dir_emit(ctx, p->name, p->len, p->ino, p->type))
break;
+ }
od->cursor = p->l_node.next;
ctx->pos++;
}
@@ -522,8 +836,9 @@ int ovl_check_empty_dir(struct dentry *dentry, struct list_head *list)
{
int err;
struct ovl_cache_entry *p;
+ struct rb_root root = RB_ROOT;
- err = ovl_dir_read_merged(dentry, list);
+ err = ovl_dir_read_merged(dentry, list, &root);
if (err)
return err;
@@ -612,12 +927,13 @@ static void ovl_workdir_cleanup_recurse(struct path *path, int level)
int err;
struct inode *dir = path->dentry->d_inode;
LIST_HEAD(list);
+ struct rb_root root = RB_ROOT;
struct ovl_cache_entry *p;
struct ovl_readdir_data rdd = {
.ctx.actor = ovl_fill_merge,
.dentry = NULL,
.list = &list,
- .root = RB_ROOT,
+ .root = &root,
.is_lowest = false,
};
@@ -675,12 +991,13 @@ int ovl_indexdir_cleanup(struct dentry *dentry, struct vfsmount *mnt,
struct inode *dir = dentry->d_inode;
struct path path = { .mnt = mnt, .dentry = dentry };
LIST_HEAD(list);
+ struct rb_root root = RB_ROOT;
struct ovl_cache_entry *p;
struct ovl_readdir_data rdd = {
.ctx.actor = ovl_fill_merge,
.dentry = NULL,
.list = &list,
- .root = RB_ROOT,
+ .root = &root,
.is_lowest = false,
};
diff --git a/fs/overlayfs/super.c b/fs/overlayfs/super.c
index d86e89f97201..fd5ea4facc62 100644
--- a/fs/overlayfs/super.c
+++ b/fs/overlayfs/super.c
@@ -70,20 +70,20 @@ static int ovl_check_append_only(struct inode *inode, int flag)
static struct dentry *ovl_d_real(struct dentry *dentry,
const struct inode *inode,
- unsigned int open_flags)
+ unsigned int open_flags, unsigned int flags)
{
struct dentry *real;
int err;
+ if (flags & D_REAL_UPPER)
+ return ovl_dentry_upper(dentry);
+
if (!d_is_reg(dentry)) {
if (!inode || inode == d_inode(dentry))
return dentry;
goto bug;
}
- if (d_is_negative(dentry))
- return dentry;
-
if (open_flags) {
err = ovl_open_maybe_copy_up(dentry, open_flags);
if (err)
@@ -105,7 +105,7 @@ static struct dentry *ovl_d_real(struct dentry *dentry,
goto bug;
/* Handle recursion */
- real = d_real(real, inode, open_flags);
+ real = d_real(real, inode, open_flags, 0);
if (!inode || inode == d_inode(real))
return real;
@@ -198,6 +198,7 @@ static void ovl_destroy_inode(struct inode *inode)
dput(oi->__upperdentry);
kfree(oi->redirect);
+ ovl_dir_cache_free(inode);
mutex_destroy(&oi->lock);
call_rcu(&inode->i_rcu, ovl_i_callback);
@@ -869,7 +870,7 @@ static int ovl_fill_super(struct super_block *sb, void *data, int silent)
goto out_free_config;
/* Upper fs should not be r/o */
- if (upperpath.mnt->mnt_sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(upperpath.mnt->mnt_sb)) {
pr_err("overlayfs: upper fs is r/o, try multi-lower layers mount\n");
err = -EINVAL;
goto out_put_upperpath;
diff --git a/fs/overlayfs/util.c b/fs/overlayfs/util.c
index f46ad75dc96a..117794582f9f 100644
--- a/fs/overlayfs/util.c
+++ b/fs/overlayfs/util.c
@@ -180,14 +180,14 @@ struct inode *ovl_inode_real(struct inode *inode)
}
-struct ovl_dir_cache *ovl_dir_cache(struct dentry *dentry)
+struct ovl_dir_cache *ovl_dir_cache(struct inode *inode)
{
- return OVL_I(d_inode(dentry))->cache;
+ return OVL_I(inode)->cache;
}
-void ovl_set_dir_cache(struct dentry *dentry, struct ovl_dir_cache *cache)
+void ovl_set_dir_cache(struct inode *inode, struct ovl_dir_cache *cache)
{
- OVL_I(d_inode(dentry))->cache = cache;
+ OVL_I(inode)->cache = cache;
}
bool ovl_dentry_is_opaque(struct dentry *dentry)
@@ -275,12 +275,19 @@ void ovl_inode_update(struct inode *inode, struct dentry *upperdentry)
}
}
-void ovl_dentry_version_inc(struct dentry *dentry)
+void ovl_dentry_version_inc(struct dentry *dentry, bool impurity)
{
struct inode *inode = d_inode(dentry);
WARN_ON(!inode_is_locked(inode));
- OVL_I(inode)->version++;
+ /*
+ * Version is used by readdir code to keep cache consistent. For merge
+ * dirs all changes need to be noted. For non-merge dirs, cache only
+ * contains impure (ones which have been copied up and have origins)
+ * entries, so only need to note changes to impure entries.
+ */
+ if (OVL_TYPE_MERGE(ovl_path_type(dentry)) || impurity)
+ OVL_I(inode)->version++;
}
u64 ovl_dentry_version_get(struct dentry *dentry)
@@ -382,6 +389,11 @@ void ovl_set_flag(unsigned long flag, struct inode *inode)
set_bit(flag, &OVL_I(inode)->flags);
}
+void ovl_clear_flag(unsigned long flag, struct inode *inode)
+{
+ clear_bit(flag, &OVL_I(inode)->flags);
+}
+
bool ovl_test_flag(unsigned long flag, struct inode *inode)
{
return test_bit(flag, &OVL_I(inode)->flags);
diff --git a/fs/proc/array.c b/fs/proc/array.c
index 88c355574aa0..525157ca25cb 100644
--- a/fs/proc/array.c
+++ b/fs/proc/array.c
@@ -62,6 +62,7 @@
#include <linux/mman.h>
#include <linux/sched/mm.h>
#include <linux/sched/numa_balancing.h>
+#include <linux/sched/task_stack.h>
#include <linux/sched/task.h>
#include <linux/sched/cputime.h>
#include <linux/proc_fs.h>
@@ -421,7 +422,15 @@ static int do_task_stat(struct seq_file *m, struct pid_namespace *ns,
* esp and eip are intentionally zeroed out. There is no
* non-racy way to read them without freezing the task.
* Programs that need reliable values can use ptrace(2).
+ *
+ * The only exception is if the task is core dumping because
+ * a program is not able to use ptrace(2) in that case. It is
+ * safe because the task has stopped executing permanently.
*/
+ if (permitted && (task->flags & PF_DUMPCORE)) {
+ eip = KSTK_EIP(task);
+ esp = KSTK_ESP(task);
+ }
}
get_task_comm(tcomm, task);
diff --git a/fs/proc/base.c b/fs/proc/base.c
index e5d89a0d0b8a..ad3b0762cc3e 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
@@ -232,7 +232,7 @@ static ssize_t proc_pid_cmdline_read(struct file *file, char __user *buf,
goto out_mmput;
}
- page = (char *)__get_free_page(GFP_TEMPORARY);
+ page = (char *)__get_free_page(GFP_KERNEL);
if (!page) {
rv = -ENOMEM;
goto out_mmput;
@@ -813,7 +813,7 @@ static ssize_t mem_rw(struct file *file, char __user *buf,
if (!mm)
return 0;
- page = (char *)__get_free_page(GFP_TEMPORARY);
+ page = (char *)__get_free_page(GFP_KERNEL);
if (!page)
return -ENOMEM;
@@ -918,7 +918,7 @@ static ssize_t environ_read(struct file *file, char __user *buf,
if (!mm || !mm->env_end)
return 0;
- page = (char *)__get_free_page(GFP_TEMPORARY);
+ page = (char *)__get_free_page(GFP_KERNEL);
if (!page)
return -ENOMEM;
@@ -1630,7 +1630,7 @@ out:
static int do_proc_readlink(struct path *path, char __user *buffer, int buflen)
{
- char *tmp = (char*)__get_free_page(GFP_TEMPORARY);
+ char *tmp = (char *)__get_free_page(GFP_KERNEL);
char *pathname;
int len;
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
index 7b40e11ede9b..5589b4bd4b85 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
@@ -1474,7 +1474,7 @@ static ssize_t pagemap_read(struct file *file, char __user *buf,
pm.show_pfn = file_ns_capable(file, &init_user_ns, CAP_SYS_ADMIN);
pm.len = (PAGEMAP_WALK_SIZE >> PAGE_SHIFT);
- pm.buffer = kmalloc(pm.len * PM_ENTRY_BYTES, GFP_TEMPORARY);
+ pm.buffer = kmalloc(pm.len * PM_ENTRY_BYTES, GFP_KERNEL);
ret = -ENOMEM;
if (!pm.buffer)
goto out_mm;
diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c
index dea90b566a6e..b00b766098fa 100644
--- a/fs/proc/task_nommu.c
+++ b/fs/proc/task_nommu.c
@@ -145,7 +145,6 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma,
int is_pid)
{
struct mm_struct *mm = vma->vm_mm;
- struct proc_maps_private *priv = m->private;
unsigned long ino = 0;
struct file *file;
dev_t dev = 0;
diff --git a/fs/proc_namespace.c b/fs/proc_namespace.c
index b5713fefb4c1..99dff222fe67 100644
--- a/fs/proc_namespace.c
+++ b/fs/proc_namespace.c
@@ -178,7 +178,7 @@ static int show_mountinfo(struct seq_file *m, struct vfsmount *mnt)
} else {
mangle(m, r->mnt_devname ? r->mnt_devname : "none");
}
- seq_puts(m, sb->s_flags & MS_RDONLY ? " ro" : " rw");
+ seq_puts(m, sb_rdonly(sb) ? " ro" : " rw");
err = show_sb_opts(m, sb);
if (err)
goto out;
diff --git a/fs/quota/quota.c b/fs/quota/quota.c
index 07e08c7d05ca..a9c5dfe6b83e 100644
--- a/fs/quota/quota.c
+++ b/fs/quota/quota.c
@@ -753,7 +753,7 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
case Q_XGETNEXTQUOTA:
return quota_getnextxquota(sb, type, id, addr);
case Q_XQUOTASYNC:
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return -EROFS;
/* XFS quotas are fully coherent now, making this call a noop */
return 0;
diff --git a/fs/read_write.c b/fs/read_write.c
index 61b58c7b6531..a2b9a47235c5 100644
--- a/fs/read_write.c
+++ b/fs/read_write.c
@@ -413,7 +413,20 @@ ssize_t __vfs_read(struct file *file, char __user *buf, size_t count,
else
return -EINVAL;
}
-EXPORT_SYMBOL(__vfs_read);
+
+ssize_t kernel_read(struct file *file, void *buf, size_t count, loff_t *pos)
+{
+ mm_segment_t old_fs;
+ ssize_t result;
+
+ old_fs = get_fs();
+ set_fs(get_ds());
+ /* The cast to a user pointer is valid due to the set_fs() */
+ result = vfs_read(file, (void __user *)buf, count, pos);
+ set_fs(old_fs);
+ return result;
+}
+EXPORT_SYMBOL(kernel_read);
ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
{
@@ -441,8 +454,6 @@ ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
return ret;
}
-EXPORT_SYMBOL(vfs_read);
-
static ssize_t new_sync_write(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
{
struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = len };
@@ -471,9 +482,8 @@ ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,
else
return -EINVAL;
}
-EXPORT_SYMBOL(__vfs_write);
-ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t *pos)
+ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos)
{
mm_segment_t old_fs;
const char __user *p;
@@ -496,9 +506,24 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t
inc_syscw(current);
return ret;
}
-
EXPORT_SYMBOL(__kernel_write);
+ssize_t kernel_write(struct file *file, const void *buf, size_t count,
+ loff_t *pos)
+{
+ mm_segment_t old_fs;
+ ssize_t res;
+
+ old_fs = get_fs();
+ set_fs(get_ds());
+ /* The cast to a user pointer is valid due to the set_fs() */
+ res = vfs_write(file, (__force const char __user *)buf, count, pos);
+ set_fs(old_fs);
+
+ return res;
+}
+EXPORT_SYMBOL(kernel_write);
+
ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_t *pos)
{
ssize_t ret;
@@ -527,8 +552,6 @@ ssize_t vfs_write(struct file *file, const char __user *buf, size_t count, loff_
return ret;
}
-EXPORT_SYMBOL(vfs_write);
-
static inline loff_t file_pos_read(struct file *file)
{
return file->f_pos;
@@ -959,9 +982,8 @@ ssize_t vfs_readv(struct file *file, const struct iovec __user *vec,
return ret;
}
-EXPORT_SYMBOL(vfs_readv);
-ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,
+static ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,
unsigned long vlen, loff_t *pos, rwf_t flags)
{
struct iovec iovstack[UIO_FASTIOV];
@@ -978,7 +1000,6 @@ ssize_t vfs_writev(struct file *file, const struct iovec __user *vec,
}
return ret;
}
-EXPORT_SYMBOL(vfs_writev);
static ssize_t do_readv(unsigned long fd, const struct iovec __user *vec,
unsigned long vlen, rwf_t flags)
diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c
index 873fc04e9403..11a48affa882 100644
--- a/fs/reiserfs/inode.c
+++ b/fs/reiserfs/inode.c
@@ -1776,7 +1776,7 @@ int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc)
struct reiserfs_transaction_handle th;
int jbegin_count = 1;
- if (inode->i_sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(inode->i_sb))
return -EROFS;
/*
* memory pressure can sometimes initiate write_inode calls with
diff --git a/fs/reiserfs/journal.c b/fs/reiserfs/journal.c
index 0c882a0e2a6e..f59c667df15b 100644
--- a/fs/reiserfs/journal.c
+++ b/fs/reiserfs/journal.c
@@ -1918,7 +1918,7 @@ static int do_journal_release(struct reiserfs_transaction_handle *th,
* we only want to flush out transactions if we were
* called with error == 0
*/
- if (!error && !(sb->s_flags & MS_RDONLY)) {
+ if (!error && !sb_rdonly(sb)) {
/* end the current trans */
BUG_ON(!th->t_trans_id);
do_journal_end(th, FLUSH_ALL);
diff --git a/fs/reiserfs/prints.c b/fs/reiserfs/prints.c
index 4f3f928076f3..64f49cafbc5b 100644
--- a/fs/reiserfs/prints.c
+++ b/fs/reiserfs/prints.c
@@ -386,7 +386,7 @@ void __reiserfs_error(struct super_block *sb, const char *id,
printk(KERN_CRIT "REISERFS error (device %s): %s: %s\n",
sb->s_id, function, error_buf);
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return;
reiserfs_info(sb, "Remounting filesystem read-only\n");
diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c
index 306e4e9d172d..5464ec517702 100644
--- a/fs/reiserfs/super.c
+++ b/fs/reiserfs/super.c
@@ -121,7 +121,7 @@ void reiserfs_schedule_old_flush(struct super_block *s)
* Avoid scheduling flush when sb is being shut down. It can race
* with journal shutdown and free still queued delayed work.
*/
- if (s->s_flags & MS_RDONLY || !(s->s_flags & MS_ACTIVE))
+ if (sb_rdonly(s) || !(s->s_flags & MS_ACTIVE))
return;
spin_lock(&sbi->old_work_lock);
@@ -151,7 +151,7 @@ static int reiserfs_freeze(struct super_block *s)
reiserfs_cancel_old_flush(s);
reiserfs_write_lock(s);
- if (!(s->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(s)) {
int err = journal_begin(&th, s, 1);
if (err) {
reiserfs_block_writes(&th);
@@ -599,7 +599,7 @@ static void reiserfs_put_super(struct super_block *s)
* change file system state to current state if it was mounted
* with read-write permissions
*/
- if (!(s->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(s)) {
if (!journal_begin(&th, s, 10)) {
reiserfs_prepare_for_journal(s, SB_BUFFER_WITH_SB(s),
1);
@@ -700,7 +700,7 @@ static void reiserfs_dirty_inode(struct inode *inode, int flags)
int err = 0;
- if (inode->i_sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(inode->i_sb)) {
reiserfs_warning(inode->i_sb, "clm-6006",
"writing inode %lu on readonly FS",
inode->i_ino);
@@ -1525,7 +1525,7 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
reiserfs_write_unlock(s);
reiserfs_xattr_init(s, *mount_flags);
/* remount read-only */
- if (s->s_flags & MS_RDONLY)
+ if (sb_rdonly(s))
/* it is read-only already */
goto out_ok_unlocked;
@@ -1551,7 +1551,7 @@ static int reiserfs_remount(struct super_block *s, int *mount_flags, char *arg)
journal_mark_dirty(&th, SB_BUFFER_WITH_SB(s));
} else {
/* remount read-write */
- if (!(s->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(s)) {
reiserfs_write_unlock(s);
reiserfs_xattr_init(s, *mount_flags);
goto out_ok_unlocked; /* We are read-write already */
@@ -1855,7 +1855,7 @@ static int what_hash(struct super_block *s)
* the super
*/
if (code != UNSET_HASH &&
- !(s->s_flags & MS_RDONLY) &&
+ !sb_rdonly(s) &&
code != sb_hash_function_code(SB_DISK_SUPER_BLOCK(s))) {
set_sb_hash_function_code(SB_DISK_SUPER_BLOCK(s), code);
}
@@ -2052,7 +2052,7 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
if (replay_only(s))
goto error_unlocked;
- if (bdev_read_only(s->s_bdev) && !(s->s_flags & MS_RDONLY)) {
+ if (bdev_read_only(s->s_bdev) && !sb_rdonly(s)) {
SWARN(silent, s, "clm-7000",
"Detected readonly device, marking FS readonly");
s->s_flags |= MS_RDONLY;
@@ -2101,7 +2101,7 @@ static int reiserfs_fill_super(struct super_block *s, void *data, int silent)
else
set_bit(REISERFS_3_6, &sbi->s_properties);
- if (!(s->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(s)) {
errval = journal_begin(&th, s, 1);
if (errval) {
diff --git a/fs/splice.c b/fs/splice.c
index ae41201d0325..f3084cce0ea6 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -364,22 +364,6 @@ static ssize_t kernel_readv(struct file *file, const struct kvec *vec,
return res;
}
-ssize_t kernel_write(struct file *file, const char *buf, size_t count,
- loff_t pos)
-{
- mm_segment_t old_fs;
- ssize_t res;
-
- old_fs = get_fs();
- set_fs(get_ds());
- /* The cast to a user pointer is valid due to the set_fs() */
- res = vfs_write(file, (__force const char __user *)buf, count, &pos);
- set_fs(old_fs);
-
- return res;
-}
-EXPORT_SYMBOL(kernel_write);
-
static ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
struct pipe_inode_info *pipe, size_t len,
unsigned int flags)
diff --git a/fs/squashfs/Kconfig b/fs/squashfs/Kconfig
index ffb093e72b6c..1adb3346b9d6 100644
--- a/fs/squashfs/Kconfig
+++ b/fs/squashfs/Kconfig
@@ -165,6 +165,20 @@ config SQUASHFS_XZ
If unsure, say N.
+config SQUASHFS_ZSTD
+ bool "Include support for ZSTD compressed file systems"
+ depends on SQUASHFS
+ select ZSTD_DECOMPRESS
+ help
+ Saying Y here includes support for reading Squashfs file systems
+ compressed with ZSTD compression. ZSTD gives better compression than
+ the default ZLIB compression, while using less CPU.
+
+ ZSTD is not the standard compression used in Squashfs and so most
+ file systems will be readable without selecting this option.
+
+ If unsure, say N.
+
config SQUASHFS_4K_DEVBLK_SIZE
bool "Use 4K device block size?"
depends on SQUASHFS
diff --git a/fs/squashfs/Makefile b/fs/squashfs/Makefile
index 246a6f329d89..6655631c53ae 100644
--- a/fs/squashfs/Makefile
+++ b/fs/squashfs/Makefile
@@ -15,3 +15,4 @@ squashfs-$(CONFIG_SQUASHFS_LZ4) += lz4_wrapper.o
squashfs-$(CONFIG_SQUASHFS_LZO) += lzo_wrapper.o
squashfs-$(CONFIG_SQUASHFS_XZ) += xz_wrapper.o
squashfs-$(CONFIG_SQUASHFS_ZLIB) += zlib_wrapper.o
+squashfs-$(CONFIG_SQUASHFS_ZSTD) += zstd_wrapper.o
diff --git a/fs/squashfs/decompressor.c b/fs/squashfs/decompressor.c
index d2bc13636f79..836639810ea0 100644
--- a/fs/squashfs/decompressor.c
+++ b/fs/squashfs/decompressor.c
@@ -65,6 +65,12 @@ static const struct squashfs_decompressor squashfs_zlib_comp_ops = {
};
#endif
+#ifndef CONFIG_SQUASHFS_ZSTD
+static const struct squashfs_decompressor squashfs_zstd_comp_ops = {
+ NULL, NULL, NULL, NULL, ZSTD_COMPRESSION, "zstd", 0
+};
+#endif
+
static const struct squashfs_decompressor squashfs_unknown_comp_ops = {
NULL, NULL, NULL, NULL, 0, "unknown", 0
};
@@ -75,6 +81,7 @@ static const struct squashfs_decompressor *decompressor[] = {
&squashfs_lzo_comp_ops,
&squashfs_xz_comp_ops,
&squashfs_lzma_unsupported_comp_ops,
+ &squashfs_zstd_comp_ops,
&squashfs_unknown_comp_ops
};
diff --git a/fs/squashfs/decompressor.h b/fs/squashfs/decompressor.h
index a25713c031a5..0f5a8e4e58da 100644
--- a/fs/squashfs/decompressor.h
+++ b/fs/squashfs/decompressor.h
@@ -58,4 +58,8 @@ extern const struct squashfs_decompressor squashfs_lzo_comp_ops;
extern const struct squashfs_decompressor squashfs_zlib_comp_ops;
#endif
+#ifdef CONFIG_SQUASHFS_ZSTD
+extern const struct squashfs_decompressor squashfs_zstd_comp_ops;
+#endif
+
#endif
diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h
index 506f4ba5b983..24d12fd14177 100644
--- a/fs/squashfs/squashfs_fs.h
+++ b/fs/squashfs/squashfs_fs.h
@@ -241,6 +241,7 @@ struct meta_index {
#define LZO_COMPRESSION 3
#define XZ_COMPRESSION 4
#define LZ4_COMPRESSION 5
+#define ZSTD_COMPRESSION 6
struct squashfs_super_block {
__le32 s_magic;
diff --git a/fs/squashfs/zstd_wrapper.c b/fs/squashfs/zstd_wrapper.c
new file mode 100644
index 000000000000..eeaabf881159
--- /dev/null
+++ b/fs/squashfs/zstd_wrapper.c
@@ -0,0 +1,151 @@
+/*
+ * Squashfs - a compressed read only filesystem for Linux
+ *
+ * Copyright (c) 2016-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2,
+ * or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * zstd_wrapper.c
+ */
+
+#include <linux/mutex.h>
+#include <linux/buffer_head.h>
+#include <linux/slab.h>
+#include <linux/zstd.h>
+#include <linux/vmalloc.h>
+
+#include "squashfs_fs.h"
+#include "squashfs_fs_sb.h"
+#include "squashfs.h"
+#include "decompressor.h"
+#include "page_actor.h"
+
+struct workspace {
+ void *mem;
+ size_t mem_size;
+ size_t window_size;
+};
+
+static void *zstd_init(struct squashfs_sb_info *msblk, void *buff)
+{
+ struct workspace *wksp = kmalloc(sizeof(*wksp), GFP_KERNEL);
+
+ if (wksp == NULL)
+ goto failed;
+ wksp->window_size = max_t(size_t,
+ msblk->block_size, SQUASHFS_METADATA_SIZE);
+ wksp->mem_size = ZSTD_DStreamWorkspaceBound(wksp->window_size);
+ wksp->mem = vmalloc(wksp->mem_size);
+ if (wksp->mem == NULL)
+ goto failed;
+
+ return wksp;
+
+failed:
+ ERROR("Failed to allocate zstd workspace\n");
+ kfree(wksp);
+ return ERR_PTR(-ENOMEM);
+}
+
+
+static void zstd_free(void *strm)
+{
+ struct workspace *wksp = strm;
+
+ if (wksp)
+ vfree(wksp->mem);
+ kfree(wksp);
+}
+
+
+static int zstd_uncompress(struct squashfs_sb_info *msblk, void *strm,
+ struct buffer_head **bh, int b, int offset, int length,
+ struct squashfs_page_actor *output)
+{
+ struct workspace *wksp = strm;
+ ZSTD_DStream *stream;
+ size_t total_out = 0;
+ size_t zstd_err;
+ int k = 0;
+ ZSTD_inBuffer in_buf = { NULL, 0, 0 };
+ ZSTD_outBuffer out_buf = { NULL, 0, 0 };
+
+ stream = ZSTD_initDStream(wksp->window_size, wksp->mem, wksp->mem_size);
+
+ if (!stream) {
+ ERROR("Failed to initialize zstd decompressor\n");
+ goto out;
+ }
+
+ out_buf.size = PAGE_SIZE;
+ out_buf.dst = squashfs_first_page(output);
+
+ do {
+ if (in_buf.pos == in_buf.size && k < b) {
+ int avail = min(length, msblk->devblksize - offset);
+
+ length -= avail;
+ in_buf.src = bh[k]->b_data + offset;
+ in_buf.size = avail;
+ in_buf.pos = 0;
+ offset = 0;
+ }
+
+ if (out_buf.pos == out_buf.size) {
+ out_buf.dst = squashfs_next_page(output);
+ if (out_buf.dst == NULL) {
+ /* Shouldn't run out of pages
+ * before stream is done.
+ */
+ squashfs_finish_page(output);
+ goto out;
+ }
+ out_buf.pos = 0;
+ out_buf.size = PAGE_SIZE;
+ }
+
+ total_out -= out_buf.pos;
+ zstd_err = ZSTD_decompressStream(stream, &out_buf, &in_buf);
+ total_out += out_buf.pos; /* add the additional data produced */
+
+ if (in_buf.pos == in_buf.size && k < b)
+ put_bh(bh[k++]);
+ } while (zstd_err != 0 && !ZSTD_isError(zstd_err));
+
+ squashfs_finish_page(output);
+
+ if (ZSTD_isError(zstd_err)) {
+ ERROR("zstd decompression error: %d\n",
+ (int)ZSTD_getErrorCode(zstd_err));
+ goto out;
+ }
+
+ if (k < b)
+ goto out;
+
+ return (int)total_out;
+
+out:
+ for (; k < b; k++)
+ put_bh(bh[k]);
+
+ return -EIO;
+}
+
+const struct squashfs_decompressor squashfs_zstd_comp_ops = {
+ .init = zstd_init,
+ .free = zstd_free,
+ .decompress = zstd_uncompress,
+ .id = ZSTD_COMPRESSION,
+ .name = "zstd",
+ .supported = 1
+};
diff --git a/fs/super.c b/fs/super.c
index 221cfa1f4e92..166c4ee0d0ed 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -360,7 +360,7 @@ static int grab_super(struct super_block *s) __releases(sb_lock)
s->s_count++;
spin_unlock(&sb_lock);
down_write(&s->s_umount);
- if ((s->s_flags & MS_BORN) && atomic_inc_not_zero(&s->s_active)) {
+ if ((s->s_flags & SB_BORN) && atomic_inc_not_zero(&s->s_active)) {
put_super(s);
return 1;
}
@@ -390,7 +390,7 @@ bool trylock_super(struct super_block *sb)
{
if (down_read_trylock(&sb->s_umount)) {
if (!hlist_unhashed(&sb->s_instances) &&
- sb->s_root && (sb->s_flags & MS_BORN))
+ sb->s_root && (sb->s_flags & SB_BORN))
return true;
up_read(&sb->s_umount);
}
@@ -419,7 +419,7 @@ void generic_shutdown_super(struct super_block *sb)
if (sb->s_root) {
shrink_dcache_for_umount(sb);
sync_filesystem(sb);
- sb->s_flags &= ~MS_ACTIVE;
+ sb->s_flags &= ~SB_ACTIVE;
fsnotify_unmount_inodes(sb);
cgroup_writeback_umount();
@@ -472,7 +472,7 @@ struct super_block *sget_userns(struct file_system_type *type,
struct super_block *old;
int err;
- if (!(flags & (MS_KERNMOUNT|MS_SUBMOUNT)) &&
+ if (!(flags & (SB_KERNMOUNT|SB_SUBMOUNT)) &&
!(type->fs_flags & FS_USERNS_MOUNT) &&
!capable(CAP_SYS_ADMIN))
return ERR_PTR(-EPERM);
@@ -502,7 +502,7 @@ retry:
}
if (!s) {
spin_unlock(&sb_lock);
- s = alloc_super(type, (flags & ~MS_SUBMOUNT), user_ns);
+ s = alloc_super(type, (flags & ~SB_SUBMOUNT), user_ns);
if (!s)
return ERR_PTR(-ENOMEM);
goto retry;
@@ -547,11 +547,11 @@ struct super_block *sget(struct file_system_type *type,
* mount through to here so always use &init_user_ns
* until that changes.
*/
- if (flags & MS_SUBMOUNT)
+ if (flags & SB_SUBMOUNT)
user_ns = &init_user_ns;
/* Ensure the requestor has permissions over the target filesystem */
- if (!(flags & (MS_KERNMOUNT|MS_SUBMOUNT)) && !ns_capable(user_ns, CAP_SYS_ADMIN))
+ if (!(flags & (SB_KERNMOUNT|SB_SUBMOUNT)) && !ns_capable(user_ns, CAP_SYS_ADMIN))
return ERR_PTR(-EPERM);
return sget_userns(type, test, set, flags, user_ns, data);
@@ -594,7 +594,7 @@ void iterate_supers(void (*f)(struct super_block *, void *), void *arg)
spin_unlock(&sb_lock);
down_read(&sb->s_umount);
- if (sb->s_root && (sb->s_flags & MS_BORN))
+ if (sb->s_root && (sb->s_flags & SB_BORN))
f(sb, arg);
up_read(&sb->s_umount);
@@ -628,7 +628,7 @@ void iterate_supers_type(struct file_system_type *type,
spin_unlock(&sb_lock);
down_read(&sb->s_umount);
- if (sb->s_root && (sb->s_flags & MS_BORN))
+ if (sb->s_root && (sb->s_flags & SB_BORN))
f(sb, arg);
up_read(&sb->s_umount);
@@ -664,7 +664,7 @@ rescan:
else
down_write(&sb->s_umount);
/* still alive? */
- if (sb->s_root && (sb->s_flags & MS_BORN))
+ if (sb->s_root && (sb->s_flags & SB_BORN))
return sb;
if (!excl)
up_read(&sb->s_umount);
@@ -785,7 +785,7 @@ rescan:
spin_unlock(&sb_lock);
down_read(&sb->s_umount);
/* still alive? */
- if (sb->s_root && (sb->s_flags & MS_BORN))
+ if (sb->s_root && (sb->s_flags & SB_BORN))
return sb;
up_read(&sb->s_umount);
/* nope, got unmounted */
@@ -801,13 +801,13 @@ rescan:
/**
* do_remount_sb - asks filesystem to change mount options.
* @sb: superblock in question
- * @flags: numeric part of options
+ * @sb_flags: revised superblock flags
* @data: the rest of options
* @force: whether or not to force the change
*
* Alters the mount options of a mounted file system.
*/
-int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
+int do_remount_sb(struct super_block *sb, int sb_flags, void *data, int force)
{
int retval;
int remount_ro;
@@ -816,11 +816,11 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
return -EBUSY;
#ifdef CONFIG_BLOCK
- if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev))
+ if (!(sb_flags & SB_RDONLY) && bdev_read_only(sb->s_bdev))
return -EACCES;
#endif
- remount_ro = (flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY);
+ remount_ro = (sb_flags & SB_RDONLY) && !sb_rdonly(sb);
if (remount_ro) {
if (!hlist_empty(&sb->s_pins)) {
@@ -831,7 +831,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
return 0;
if (sb->s_writers.frozen != SB_UNFROZEN)
return -EBUSY;
- remount_ro = (flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY);
+ remount_ro = (sb_flags & SB_RDONLY) && !sb_rdonly(sb);
}
}
shrink_dcache_sb(sb);
@@ -850,7 +850,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
}
if (sb->s_op->remount_fs) {
- retval = sb->s_op->remount_fs(sb, &flags, data);
+ retval = sb->s_op->remount_fs(sb, &sb_flags, data);
if (retval) {
if (!force)
goto cancel_readonly;
@@ -859,7 +859,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
sb->s_type->name, retval);
}
}
- sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK);
+ sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (sb_flags & MS_RMT_MASK);
/* Needs to be ordered wrt mnt_is_readonly() */
smp_wmb();
sb->s_readonly_remount = 0;
@@ -892,12 +892,12 @@ static void do_emergency_remount(struct work_struct *work)
sb->s_count++;
spin_unlock(&sb_lock);
down_write(&sb->s_umount);
- if (sb->s_root && sb->s_bdev && (sb->s_flags & MS_BORN) &&
- !(sb->s_flags & MS_RDONLY)) {
+ if (sb->s_root && sb->s_bdev && (sb->s_flags & SB_BORN) &&
+ !sb_rdonly(sb)) {
/*
* What lock protects sb->s_flags??
*/
- do_remount_sb(sb, MS_RDONLY, NULL, 1);
+ do_remount_sb(sb, SB_RDONLY, NULL, 1);
}
up_write(&sb->s_umount);
spin_lock(&sb_lock);
@@ -1023,7 +1023,7 @@ struct dentry *mount_ns(struct file_system_type *fs_type,
/* Don't allow mounting unless the caller has CAP_SYS_ADMIN
* over the namespace.
*/
- if (!(flags & MS_KERNMOUNT) && !ns_capable(user_ns, CAP_SYS_ADMIN))
+ if (!(flags & SB_KERNMOUNT) && !ns_capable(user_ns, CAP_SYS_ADMIN))
return ERR_PTR(-EPERM);
sb = sget_userns(fs_type, ns_test_super, ns_set_super, flags,
@@ -1033,13 +1033,13 @@ struct dentry *mount_ns(struct file_system_type *fs_type,
if (!sb->s_root) {
int err;
- err = fill_super(sb, data, flags & MS_SILENT ? 1 : 0);
+ err = fill_super(sb, data, flags & SB_SILENT ? 1 : 0);
if (err) {
deactivate_locked_super(sb);
return ERR_PTR(err);
}
- sb->s_flags |= MS_ACTIVE;
+ sb->s_flags |= SB_ACTIVE;
}
return dget(sb->s_root);
@@ -1071,7 +1071,7 @@ struct dentry *mount_bdev(struct file_system_type *fs_type,
fmode_t mode = FMODE_READ | FMODE_EXCL;
int error = 0;
- if (!(flags & MS_RDONLY))
+ if (!(flags & SB_RDONLY))
mode |= FMODE_WRITE;
bdev = blkdev_get_by_path(dev_name, mode, fs_type);
@@ -1089,14 +1089,14 @@ struct dentry *mount_bdev(struct file_system_type *fs_type,
error = -EBUSY;
goto error_bdev;
}
- s = sget(fs_type, test_bdev_super, set_bdev_super, flags | MS_NOSEC,
+ s = sget(fs_type, test_bdev_super, set_bdev_super, flags | SB_NOSEC,
bdev);
mutex_unlock(&bdev->bd_fsfreeze_mutex);
if (IS_ERR(s))
goto error_s;
if (s->s_root) {
- if ((flags ^ s->s_flags) & MS_RDONLY) {
+ if ((flags ^ s->s_flags) & SB_RDONLY) {
deactivate_locked_super(s);
error = -EBUSY;
goto error_bdev;
@@ -1116,13 +1116,13 @@ struct dentry *mount_bdev(struct file_system_type *fs_type,
s->s_mode = mode;
snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev);
sb_set_blocksize(s, block_size(bdev));
- error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
+ error = fill_super(s, data, flags & SB_SILENT ? 1 : 0);
if (error) {
deactivate_locked_super(s);
goto error;
}
- s->s_flags |= MS_ACTIVE;
+ s->s_flags |= SB_ACTIVE;
bdev->bd_super = s;
}
@@ -1162,12 +1162,12 @@ struct dentry *mount_nodev(struct file_system_type *fs_type,
if (IS_ERR(s))
return ERR_CAST(s);
- error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
+ error = fill_super(s, data, flags & SB_SILENT ? 1 : 0);
if (error) {
deactivate_locked_super(s);
return ERR_PTR(error);
}
- s->s_flags |= MS_ACTIVE;
+ s->s_flags |= SB_ACTIVE;
return dget(s->s_root);
}
EXPORT_SYMBOL(mount_nodev);
@@ -1188,12 +1188,12 @@ struct dentry *mount_single(struct file_system_type *fs_type,
if (IS_ERR(s))
return ERR_CAST(s);
if (!s->s_root) {
- error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
+ error = fill_super(s, data, flags & SB_SILENT ? 1 : 0);
if (error) {
deactivate_locked_super(s);
return ERR_PTR(error);
}
- s->s_flags |= MS_ACTIVE;
+ s->s_flags |= SB_ACTIVE;
} else {
do_remount_sb(s, flags, data, 0);
}
@@ -1227,7 +1227,7 @@ mount_fs(struct file_system_type *type, int flags, const char *name, void *data)
sb = root->d_sb;
BUG_ON(!sb);
WARN_ON(!sb->s_bdi);
- sb->s_flags |= MS_BORN;
+ sb->s_flags |= SB_BORN;
error = security_sb_kern_mount(sb, flags, secdata);
if (error)
@@ -1434,12 +1434,12 @@ int freeze_super(struct super_block *sb)
return -EBUSY;
}
- if (!(sb->s_flags & MS_BORN)) {
+ if (!(sb->s_flags & SB_BORN)) {
up_write(&sb->s_umount);
return 0; /* sic - it's "nothing to do" */
}
- if (sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(sb)) {
/* Nothing to do really... */
sb->s_writers.frozen = SB_FREEZE_COMPLETE;
up_write(&sb->s_umount);
@@ -1502,7 +1502,7 @@ int thaw_super(struct super_block *sb)
return -EINVAL;
}
- if (sb->s_flags & MS_RDONLY) {
+ if (sb_rdonly(sb)) {
sb->s_writers.frozen = SB_UNFROZEN;
goto out;
}
diff --git a/fs/sync.c b/fs/sync.c
index 2e3fd7d94d2d..a576aa2e6b09 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -57,7 +57,7 @@ int sync_filesystem(struct super_block *sb)
/*
* No point in syncing out anything if the filesystem is read-only.
*/
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return 0;
ret = __sync_filesystem(sb, 0);
@@ -69,13 +69,13 @@ EXPORT_SYMBOL(sync_filesystem);
static void sync_inodes_one_sb(struct super_block *sb, void *arg)
{
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
sync_inodes_sb(sb);
}
static void sync_fs_one_sb(struct super_block *sb, void *arg)
{
- if (!(sb->s_flags & MS_RDONLY) && sb->s_op->sync_fs)
+ if (!sb_rdonly(sb) && sb->s_op->sync_fs)
sb->s_op->sync_fs(sb, *(int *)arg);
}
diff --git a/fs/sysv/balloc.c b/fs/sysv/balloc.c
index 921c053fc052..862c1f74a583 100644
--- a/fs/sysv/balloc.c
+++ b/fs/sysv/balloc.c
@@ -231,7 +231,7 @@ trust_sb:
Ecount:
printk("sysv_count_free_blocks: free block count was %d, "
"correcting to %d\n", sb_count, count);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
*sbi->s_free_blocks = cpu_to_fs32(sbi, count);
dirty_sb(sb);
}
diff --git a/fs/sysv/ialloc.c b/fs/sysv/ialloc.c
index 53f1b78996dd..eb963fbb7903 100644
--- a/fs/sysv/ialloc.c
+++ b/fs/sysv/ialloc.c
@@ -220,7 +220,7 @@ Einval:
printk("sysv_count_free_inodes: "
"free inode count was %d, correcting to %d\n",
sb_count, count);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
*sbi->s_sb_total_free_inodes = cpu_to_fs16(SYSV_SB(sb), count);
dirty_sb(sb);
}
diff --git a/fs/sysv/inode.c b/fs/sysv/inode.c
index 858fb72f9e0f..1c8bf9453a71 100644
--- a/fs/sysv/inode.c
+++ b/fs/sysv/inode.c
@@ -70,7 +70,7 @@ static void sysv_put_super(struct super_block *sb)
{
struct sysv_sb_info *sbi = SYSV_SB(sb);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
/* XXX ext2 also updates the state here */
mark_buffer_dirty(sbi->s_bh1);
if (sbi->s_bh1 != sbi->s_bh2)
diff --git a/fs/sysv/super.c b/fs/sysv/super.c
index eda10959714f..0d56e486b392 100644
--- a/fs/sysv/super.c
+++ b/fs/sysv/super.c
@@ -216,7 +216,7 @@ static int detect_sysv(struct sysv_sb_info *sbi, struct buffer_head *bh)
if (fs16_to_cpu(sbi, sbd->s_nfree) == 0xffff) {
sbi->s_type = FSTYPE_AFS;
sbi->s_forced_ro = 1;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
printk("SysV FS: SCO EAFS on %s detected, "
"forcing read-only mode.\n",
sb->s_id);
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index bffadbb67e47..5496b17b959c 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -1159,7 +1159,7 @@ static int mount_ubifs(struct ubifs_info *c)
long long x, y;
size_t sz;
- c->ro_mount = !!(c->vfs_sb->s_flags & MS_RDONLY);
+ c->ro_mount = !!sb_rdonly(c->vfs_sb);
/* Suppress error messages while probing if MS_SILENT is set */
c->probing = !!(c->vfs_sb->s_flags & MS_SILENT);
diff --git a/fs/udf/super.c b/fs/udf/super.c
index 93c59630512b..99cb81d0077f 100644
--- a/fs/udf/super.c
+++ b/fs/udf/super.c
@@ -673,7 +673,7 @@ static int udf_remount_fs(struct super_block *sb, int *flags, char *options)
sbi->s_dmode = uopt.dmode;
write_unlock(&sbi->s_cred_lock);
- if ((*flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY))
+ if ((bool)(*flags & MS_RDONLY) == sb_rdonly(sb))
goto out_unlock;
if (*flags & MS_RDONLY)
@@ -1017,7 +1017,7 @@ static int udf_load_metadata_files(struct super_block *sb, int partition,
fe = udf_iget_special(sb, &addr);
if (IS_ERR(fe)) {
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
udf_warn(sb, "bitmap inode efe not found but it's ok since the disc is mounted read-only\n");
else {
udf_err(sb, "bitmap inode efe not found and attempted read-write mount\n");
@@ -1341,7 +1341,7 @@ static int udf_load_partdesc(struct super_block *sb, sector_t block)
* writing to it (we overwrite blocks instead of relocating
* them).
*/
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
ret = -EACCES;
goto out_bh;
}
@@ -2205,7 +2205,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
ret = -EINVAL;
goto error_out;
} else if (minUDFWriteRev > UDF_MAX_WRITE_VERSION &&
- !(sb->s_flags & MS_RDONLY)) {
+ !sb_rdonly(sb)) {
ret = -EACCES;
goto error_out;
}
@@ -2226,7 +2226,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
if (sbi->s_partmaps[sbi->s_partition].s_partition_flags &
UDF_PART_FLAG_READ_ONLY &&
- !(sb->s_flags & MS_RDONLY)) {
+ !sb_rdonly(sb)) {
ret = -EACCES;
goto error_out;
}
@@ -2245,7 +2245,7 @@ static int udf_fill_super(struct super_block *sb, void *options, int silent)
le16_to_cpu(ts.year), ts.month, ts.day,
ts.hour, ts.minute, le16_to_cpu(ts.typeAndTimezone));
}
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
udf_open_lvid(sb);
lvid_open = true;
}
@@ -2332,7 +2332,7 @@ static void udf_put_super(struct super_block *sb)
if (UDF_QUERY_FLAG(sb, UDF_FLAG_NLS_MAP))
unload_nls(sbi->s_nls_map);
#endif
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
udf_close_lvid(sb);
brelse(sbi->s_lvid_bh);
udf_sb_free_partitions(sb);
diff --git a/fs/ufs/super.c b/fs/ufs/super.c
index 0a4f58a5073c..6440003f8ddc 100644
--- a/fs/ufs/super.c
+++ b/fs/ufs/super.c
@@ -278,7 +278,7 @@ void ufs_error (struct super_block * sb, const char * function,
uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first(uspi);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
usb1->fs_clean = UFS_FSBAD;
ubh_mark_buffer_dirty(USPI_UBH(uspi));
ufs_mark_sb_dirty(sb);
@@ -312,7 +312,7 @@ void ufs_panic (struct super_block * sb, const char * function,
uspi = UFS_SB(sb)->s_uspi;
usb1 = ubh_get_usb_first(uspi);
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
usb1->fs_clean = UFS_FSBAD;
ubh_mark_buffer_dirty(USPI_UBH(uspi));
ufs_mark_sb_dirty(sb);
@@ -742,7 +742,7 @@ static void ufs_put_super(struct super_block *sb)
UFSD("ENTER\n");
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
ufs_put_super_internal(sb);
cancel_delayed_work_sync(&sbi->sync_work);
@@ -793,7 +793,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
UFSD("ENTER\n");
#ifndef CONFIG_UFS_FS_WRITE
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
pr_err("ufs was compiled with read-only support, can't be mounted as read-write\n");
return -EROFS;
}
@@ -805,7 +805,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
sb->s_fs_info = sbi;
sbi->sb = sb;
- UFSD("flag %u\n", (int)(sb->s_flags & MS_RDONLY));
+ UFSD("flag %u\n", (int)(sb_rdonly(sb)));
mutex_init(&sbi->s_lock);
spin_lock_init(&sbi->work_lock);
@@ -902,7 +902,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
uspi->s_sbsize = super_block_size = 2048;
uspi->s_sbbase = 0;
flags |= UFS_DE_OLD | UFS_UID_OLD | UFS_ST_OLD | UFS_CG_OLD;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!silent)
pr_info("ufstype=old is supported read-only\n");
sb->s_flags |= MS_RDONLY;
@@ -918,7 +918,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
uspi->s_sbbase = 0;
uspi->s_dirblksize = 1024;
flags |= UFS_DE_OLD | UFS_UID_OLD | UFS_ST_OLD | UFS_CG_OLD;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!silent)
pr_info("ufstype=nextstep is supported read-only\n");
sb->s_flags |= MS_RDONLY;
@@ -934,7 +934,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
uspi->s_sbbase = 0;
uspi->s_dirblksize = 1024;
flags |= UFS_DE_OLD | UFS_UID_OLD | UFS_ST_OLD | UFS_CG_OLD;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!silent)
pr_info("ufstype=nextstep-cd is supported read-only\n");
sb->s_flags |= MS_RDONLY;
@@ -950,7 +950,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
uspi->s_sbbase = 0;
uspi->s_dirblksize = 1024;
flags |= UFS_DE_44BSD | UFS_UID_44BSD | UFS_ST_44BSD | UFS_CG_44BSD;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!silent)
pr_info("ufstype=openstep is supported read-only\n");
sb->s_flags |= MS_RDONLY;
@@ -965,7 +965,7 @@ static int ufs_fill_super(struct super_block *sb, void *data, int silent)
uspi->s_sbsize = super_block_size = 2048;
uspi->s_sbbase = 0;
flags |= UFS_DE_OLD | UFS_UID_OLD | UFS_ST_OLD | UFS_CG_OLD;
- if (!(sb->s_flags & MS_RDONLY)) {
+ if (!sb_rdonly(sb)) {
if (!silent)
pr_info("ufstype=hp is supported read-only\n");
sb->s_flags |= MS_RDONLY;
@@ -1273,7 +1273,7 @@ magic_found:
/*
* Read cylinder group structures
*/
- if (!(sb->s_flags & MS_RDONLY))
+ if (!sb_rdonly(sb))
if (!ufs_read_cylinder_structures(sb))
goto failed;
@@ -1328,7 +1328,7 @@ static int ufs_remount (struct super_block *sb, int *mount_flags, char *data)
return -EINVAL;
}
- if ((*mount_flags & MS_RDONLY) == (sb->s_flags & MS_RDONLY)) {
+ if ((bool)(*mount_flags & MS_RDONLY) == sb_rdonly(sb)) {
UFS_SB(sb)->s_mount_opt = new_mount_opt;
mutex_unlock(&UFS_SB(sb)->s_lock);
return 0;
diff --git a/fs/utimes.c b/fs/utimes.c
index 6571d8c848a0..51edb9f9507c 100644
--- a/fs/utimes.c
+++ b/fs/utimes.c
@@ -22,7 +22,7 @@
*/
SYSCALL_DEFINE2(utime, char __user *, filename, struct utimbuf __user *, times)
{
- struct timespec tv[2];
+ struct timespec64 tv[2];
if (times) {
if (get_user(tv[0].tv_sec, &times->actime) ||
@@ -44,7 +44,7 @@ static bool nsec_valid(long nsec)
return nsec >= 0 && nsec <= 999999999;
}
-static int utimes_common(const struct path *path, struct timespec *times)
+static int utimes_common(const struct path *path, struct timespec64 *times)
{
int error;
struct iattr newattrs;
@@ -115,7 +115,7 @@ out:
* must be owner or have write permission.
* Else, update from *times, must be owner or super user.
*/
-long do_utimes(int dfd, const char __user *filename, struct timespec *times,
+long do_utimes(int dfd, const char __user *filename, struct timespec64 *times,
int flags)
{
int error = -EINVAL;
@@ -167,10 +167,11 @@ out:
SYSCALL_DEFINE4(utimensat, int, dfd, const char __user *, filename,
struct timespec __user *, utimes, int, flags)
{
- struct timespec tstimes[2];
+ struct timespec64 tstimes[2];
if (utimes) {
- if (copy_from_user(&tstimes, utimes, sizeof(tstimes)))
+ if ((get_timespec64(&tstimes[0], &utimes[0]) ||
+ get_timespec64(&tstimes[1], &utimes[1])))
return -EFAULT;
/* Nothing to do, we must not even check the path. */
@@ -186,7 +187,7 @@ SYSCALL_DEFINE3(futimesat, int, dfd, const char __user *, filename,
struct timeval __user *, utimes)
{
struct timeval times[2];
- struct timespec tstimes[2];
+ struct timespec64 tstimes[2];
if (utimes) {
if (copy_from_user(&times, utimes, sizeof(times)))
@@ -224,7 +225,7 @@ SYSCALL_DEFINE2(utimes, char __user *, filename,
COMPAT_SYSCALL_DEFINE2(utime, const char __user *, filename,
struct compat_utimbuf __user *, t)
{
- struct timespec tv[2];
+ struct timespec64 tv[2];
if (t) {
if (get_user(tv[0].tv_sec, &t->actime) ||
@@ -238,11 +239,11 @@ COMPAT_SYSCALL_DEFINE2(utime, const char __user *, filename,
COMPAT_SYSCALL_DEFINE4(utimensat, unsigned int, dfd, const char __user *, filename, struct compat_timespec __user *, t, int, flags)
{
- struct timespec tv[2];
+ struct timespec64 tv[2];
if (t) {
- if (compat_get_timespec(&tv[0], &t[0]) ||
- compat_get_timespec(&tv[1], &t[1]))
+ if (compat_get_timespec64(&tv[0], &t[0]) ||
+ compat_get_timespec64(&tv[1], &t[1]))
return -EFAULT;
if (tv[0].tv_nsec == UTIME_OMIT && tv[1].tv_nsec == UTIME_OMIT)
@@ -253,7 +254,7 @@ COMPAT_SYSCALL_DEFINE4(utimensat, unsigned int, dfd, const char __user *, filena
COMPAT_SYSCALL_DEFINE3(futimesat, unsigned int, dfd, const char __user *, filename, struct compat_timeval __user *, t)
{
- struct timespec tv[2];
+ struct timespec64 tv[2];
if (t) {
if (get_user(tv[0].tv_sec, &t[0].tv_sec) ||
diff --git a/fs/xattr.c b/fs/xattr.c
index 7b03df6b8be2..4424f7fecf14 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -23,6 +23,7 @@
#include <linux/posix_acl_xattr.h>
#include <linux/uaccess.h>
+#include "internal.h"
static const char *
strcmp_prefix(const char *a, const char *a_prefix)
@@ -502,10 +503,10 @@ SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name,
if (!f.file)
return error;
audit_file(f.file);
- error = mnt_want_write_file(f.file);
+ error = mnt_want_write_file_path(f.file);
if (!error) {
error = setxattr(f.file->f_path.dentry, name, value, size, flags);
- mnt_drop_write_file(f.file);
+ mnt_drop_write_file_path(f.file);
}
fdput(f);
return error;
@@ -734,10 +735,10 @@ SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name)
if (!f.file)
return error;
audit_file(f.file);
- error = mnt_want_write_file(f.file);
+ error = mnt_want_write_file_path(f.file);
if (!error) {
error = removexattr(f.file->f_path.dentry, name);
- mnt_drop_write_file(f.file);
+ mnt_drop_write_file_path(f.file);
}
fdput(f);
return error;
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index ec3e44fcf771..ebdd0bd2b261 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -259,7 +259,11 @@ xfs_file_buffered_aio_read(
trace_xfs_file_buffered_read(ip, iov_iter_count(to), iocb->ki_pos);
- xfs_ilock(ip, XFS_IOLOCK_SHARED);
+ if (!xfs_ilock_nowait(ip, XFS_IOLOCK_SHARED)) {
+ if (iocb->ki_flags & IOCB_NOWAIT)
+ return -EAGAIN;
+ xfs_ilock(ip, XFS_IOLOCK_SHARED);
+ }
ret = generic_file_read_iter(iocb, to);
xfs_iunlock(ip, XFS_IOLOCK_SHARED);
@@ -636,6 +640,9 @@ xfs_file_buffered_aio_write(
int enospc = 0;
int iolock;
+ if (iocb->ki_flags & IOCB_NOWAIT)
+ return -EOPNOTSUPP;
+
write_retry:
iolock = XFS_IOLOCK_EXCL;
xfs_ilock(ip, iolock);
@@ -912,7 +919,7 @@ xfs_file_open(
return -EFBIG;
if (XFS_FORCED_SHUTDOWN(XFS_M(inode->i_sb)))
return -EIO;
- file->f_mode |= FMODE_AIO_NOWAIT;
+ file->f_mode |= FMODE_NOWAIT;
return 0;
}
diff --git a/fs/xfs/xfs_linux.h b/fs/xfs/xfs_linux.h
index 9301c5a6060b..dcd1292664b3 100644
--- a/fs/xfs/xfs_linux.h
+++ b/fs/xfs/xfs_linux.h
@@ -270,7 +270,14 @@ static inline uint64_t howmany_64(uint64_t x, uint32_t y)
#endif /* DEBUG */
#ifdef CONFIG_XFS_RT
-#define XFS_IS_REALTIME_INODE(ip) ((ip)->i_d.di_flags & XFS_DIFLAG_REALTIME)
+
+/*
+ * make sure we ignore the inode flag if the filesystem doesn't have a
+ * configured realtime device.
+ */
+#define XFS_IS_REALTIME_INODE(ip) \
+ (((ip)->i_d.di_flags & XFS_DIFLAG_REALTIME) && \
+ (ip)->i_mount->m_rtdev_targp)
#else
#define XFS_IS_REALTIME_INODE(ip) (0)
#endif
diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c
index de9493253edf..a65108594a07 100644
--- a/fs/xfs/xfs_quotaops.c
+++ b/fs/xfs/xfs_quotaops.c
@@ -125,7 +125,7 @@ xfs_fs_set_info(
struct xfs_mount *mp = XFS_M(sb);
struct qc_dqblk newlim;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return -EROFS;
if (!XFS_IS_QUOTA_RUNNING(mp))
return -ENOSYS;
@@ -175,7 +175,7 @@ xfs_quota_enable(
{
struct xfs_mount *mp = XFS_M(sb);
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return -EROFS;
if (!XFS_IS_QUOTA_RUNNING(mp))
return -ENOSYS;
@@ -190,7 +190,7 @@ xfs_quota_disable(
{
struct xfs_mount *mp = XFS_M(sb);
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return -EROFS;
if (!XFS_IS_QUOTA_RUNNING(mp))
return -ENOSYS;
@@ -208,7 +208,7 @@ xfs_fs_rm_xquota(
struct xfs_mount *mp = XFS_M(sb);
unsigned int flags = 0;
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return -EROFS;
if (XFS_IS_QUOTA_ON(mp))
@@ -279,7 +279,7 @@ xfs_fs_set_dqblk(
{
struct xfs_mount *mp = XFS_M(sb);
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
return -EROFS;
if (!XFS_IS_QUOTA_RUNNING(mp))
return -ENOSYS;
diff --git a/fs/xfs/xfs_super.c b/fs/xfs/xfs_super.c
index 3008f31753df..c996f4ae4a5f 100644
--- a/fs/xfs/xfs_super.c
+++ b/fs/xfs/xfs_super.c
@@ -210,7 +210,7 @@ xfs_parseargs(
/*
* Copy binary VFS mount flags we are interested in.
*/
- if (sb->s_flags & MS_RDONLY)
+ if (sb_rdonly(sb))
mp->m_flags |= XFS_MOUNT_RDONLY;
if (sb->s_flags & MS_DIRSYNC)
mp->m_flags |= XFS_MOUNT_DIRSYNC;
diff --git a/include/asm-generic/uaccess.h b/include/asm-generic/uaccess.h
index 723e81a6c162..2e51f6e7b3c2 100644
--- a/include/asm-generic/uaccess.h
+++ b/include/asm-generic/uaccess.h
@@ -75,10 +75,10 @@ static inline int __access_ok(unsigned long addr, unsigned long size)
#define put_user(x, ptr) \
({ \
- void *__p = (ptr); \
+ void __user *__p = (ptr); \
might_fault(); \
access_ok(VERIFY_WRITE, __p, sizeof(*ptr)) ? \
- __put_user((x), ((__typeof__(*(ptr)) *)__p)) : \
+ __put_user((x), ((__typeof__(*(ptr)) __user *)__p)) : \
-EFAULT; \
})
@@ -137,10 +137,10 @@ extern int __put_user_bad(void) __attribute__((noreturn));
#define get_user(x, ptr) \
({ \
- const void *__p = (ptr); \
+ const void __user *__p = (ptr); \
might_fault(); \
access_ok(VERIFY_READ, __p, sizeof(*ptr)) ? \
- __get_user((x), (__typeof__(*(ptr)) *)__p) : \
+ __get_user((x), (__typeof__(*(ptr)) __user *)__p) :\
((x) = (__typeof__(*(ptr)))0,-EFAULT); \
})
diff --git a/include/dt-bindings/clock/qcom,gcc-msm8996.h b/include/dt-bindings/clock/qcom,gcc-msm8996.h
index 1f5c42254798..75b07cf5eed0 100644
--- a/include/dt-bindings/clock/qcom,gcc-msm8996.h
+++ b/include/dt-bindings/clock/qcom,gcc-msm8996.h
@@ -233,6 +233,8 @@
#define GCC_PCIE_CLKREF_CLK 216
#define GCC_RX2_USB2_CLKREF_CLK 217
#define GCC_RX1_USB2_CLKREF_CLK 218
+#define GCC_HLOS1_VOTE_LPASS_CORE_SMMU_CLK 219
+#define GCC_HLOS1_VOTE_LPASS_ADSP_SMMU_CLK 220
#define GCC_SYSTEM_NOC_BCR 0
#define GCC_CONFIG_NOC_BCR 1
diff --git a/include/dt-bindings/clock/r8a77995-cpg-mssr.h b/include/dt-bindings/clock/r8a77995-cpg-mssr.h
new file mode 100644
index 000000000000..4e8ae3dee590
--- /dev/null
+++ b/include/dt-bindings/clock/r8a77995-cpg-mssr.h
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2017 Glider bvba
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+#ifndef __DT_BINDINGS_CLOCK_R8A77995_CPG_MSSR_H__
+#define __DT_BINDINGS_CLOCK_R8A77995_CPG_MSSR_H__
+
+#include <dt-bindings/clock/renesas-cpg-mssr.h>
+
+/* r8a77995 CPG Core Clocks */
+#define R8A77995_CLK_Z2 0
+#define R8A77995_CLK_ZG 1
+#define R8A77995_CLK_ZTR 2
+#define R8A77995_CLK_ZT 3
+#define R8A77995_CLK_ZX 4
+#define R8A77995_CLK_S0D1 5
+#define R8A77995_CLK_S1D1 6
+#define R8A77995_CLK_S1D2 7
+#define R8A77995_CLK_S1D4 8
+#define R8A77995_CLK_S2D1 9
+#define R8A77995_CLK_S2D2 10
+#define R8A77995_CLK_S2D4 11
+#define R8A77995_CLK_S3D1 12
+#define R8A77995_CLK_S3D2 13
+#define R8A77995_CLK_S3D4 14
+#define R8A77995_CLK_S1D4C 15
+#define R8A77995_CLK_S3D1C 16
+#define R8A77995_CLK_S3D2C 17
+#define R8A77995_CLK_S3D4C 18
+#define R8A77995_CLK_LB 19
+#define R8A77995_CLK_CL 20
+#define R8A77995_CLK_ZB3 21
+#define R8A77995_CLK_ZB3D2 22
+#define R8A77995_CLK_CR 23
+#define R8A77995_CLK_CRD2 24
+#define R8A77995_CLK_SD0H 25
+#define R8A77995_CLK_SD0 26
+#define R8A77995_CLK_SSP2 27
+#define R8A77995_CLK_SSP1 28
+#define R8A77995_CLK_RPC 29
+#define R8A77995_CLK_RPCD2 30
+#define R8A77995_CLK_ZA2 31
+#define R8A77995_CLK_ZA8 32
+#define R8A77995_CLK_Z2D 33
+#define R8A77995_CLK_CANFD 34
+#define R8A77995_CLK_MSO 35
+#define R8A77995_CLK_R 36
+#define R8A77995_CLK_OSC 37
+#define R8A77995_CLK_LV0 38
+#define R8A77995_CLK_LV1 39
+#define R8A77995_CLK_CP 40
+
+#endif /* __DT_BINDINGS_CLOCK_R8A77995_CPG_MSSR_H__ */
diff --git a/include/dt-bindings/clock/rk3228-cru.h b/include/dt-bindings/clock/rk3228-cru.h
index 56f841c22801..55655ab0a4c4 100644
--- a/include/dt-bindings/clock/rk3228-cru.h
+++ b/include/dt-bindings/clock/rk3228-cru.h
@@ -49,6 +49,7 @@
#define SCLK_EMMC_DRV 117
#define SCLK_SDMMC_SAMPLE 118
#define SCLK_SDIO_SAMPLE 119
+#define SCLK_SDIO_SRC 120
#define SCLK_EMMC_SAMPLE 121
#define SCLK_VOP 122
#define SCLK_HDMI_HDCP 123
diff --git a/include/dt-bindings/clock/rv1108-cru.h b/include/dt-bindings/clock/rv1108-cru.h
index f269d833e41a..d8d0e0456dc2 100644
--- a/include/dt-bindings/clock/rv1108-cru.h
+++ b/include/dt-bindings/clock/rv1108-cru.h
@@ -67,9 +67,9 @@
#define SCLK_SPI 108
#define SCLK_SARADC 109
#define SCLK_TSADC 110
-#define SCLK_MACPHY_PRE 111
-#define SCLK_MACPHY 112
-#define SCLK_MACPHY_RX 113
+#define SCLK_MAC_PRE 111
+#define SCLK_MAC 112
+#define SCLK_MAC_RX 113
#define SCLK_MAC_REF 114
#define SCLK_MAC_REFOUT 115
#define SCLK_DSP_PFM 116
@@ -110,6 +110,7 @@
#define ACLK_CIF2 207
#define ACLK_CIF3 208
#define ACLK_PERI 209
+#define ACLK_GMAC 210
/* pclk gates */
#define PCLK_GPIO1 256
@@ -141,6 +142,7 @@
#define PCLK_EFUSE0 282
#define PCLK_EFUSE1 283
#define PCLK_WDT 284
+#define PCLK_GMAC 285
/* hclk gates */
#define HCLK_I2S0_8CH 320
diff --git a/include/dt-bindings/clock/stm32h7-clks.h b/include/dt-bindings/clock/stm32h7-clks.h
new file mode 100644
index 000000000000..6637272b3242
--- /dev/null
+++ b/include/dt-bindings/clock/stm32h7-clks.h
@@ -0,0 +1,165 @@
+/* SYS, CORE AND BUS CLOCKS */
+#define SYS_D1CPRE 0
+#define HCLK 1
+#define PCLK1 2
+#define PCLK2 3
+#define PCLK3 4
+#define PCLK4 5
+#define HSI_DIV 6
+#define HSE_1M 7
+#define I2S_CKIN 8
+#define CK_DSI_PHY 9
+#define HSE_CK 10
+#define LSE_CK 11
+#define CSI_KER_DIV122 12
+#define RTC_CK 13
+#define CPU_SYSTICK 14
+
+/* OSCILLATOR BANK */
+#define OSC_BANK 18
+#define HSI_CK 18
+#define HSI_KER_CK 19
+#define CSI_CK 20
+#define CSI_KER_CK 21
+#define RC48_CK 22
+#define LSI_CK 23
+
+/* MCLOCK BANK */
+#define MCLK_BANK 28
+#define PER_CK 28
+#define PLLSRC 29
+#define SYS_CK 30
+#define TRACEIN_CK 31
+
+/* ODF BANK */
+#define ODF_BANK 32
+#define PLL1_P 32
+#define PLL1_Q 33
+#define PLL1_R 34
+#define PLL2_P 35
+#define PLL2_Q 36
+#define PLL2_R 37
+#define PLL3_P 38
+#define PLL3_Q 39
+#define PLL3_R 40
+
+/* MCO BANK */
+#define MCO_BANK 41
+#define MCO1 41
+#define MCO2 42
+
+/* PERIF BANK */
+#define PERIF_BANK 50
+#define D1SRAM1_CK 50
+#define ITCM_CK 51
+#define DTCM2_CK 52
+#define DTCM1_CK 53
+#define FLITF_CK 54
+#define JPGDEC_CK 55
+#define DMA2D_CK 56
+#define MDMA_CK 57
+#define USB2ULPI_CK 58
+#define USB1ULPI_CK 59
+#define ETH1RX_CK 60
+#define ETH1TX_CK 61
+#define ETH1MAC_CK 62
+#define ART_CK 63
+#define DMA2_CK 64
+#define DMA1_CK 65
+#define D2SRAM3_CK 66
+#define D2SRAM2_CK 67
+#define D2SRAM1_CK 68
+#define HASH_CK 69
+#define CRYPT_CK 70
+#define CAMITF_CK 71
+#define BKPRAM_CK 72
+#define HSEM_CK 73
+#define BDMA_CK 74
+#define CRC_CK 75
+#define GPIOK_CK 76
+#define GPIOJ_CK 77
+#define GPIOI_CK 78
+#define GPIOH_CK 79
+#define GPIOG_CK 80
+#define GPIOF_CK 81
+#define GPIOE_CK 82
+#define GPIOD_CK 83
+#define GPIOC_CK 84
+#define GPIOB_CK 85
+#define GPIOA_CK 86
+#define WWDG1_CK 87
+#define DAC12_CK 88
+#define WWDG2_CK 89
+#define TIM14_CK 90
+#define TIM13_CK 91
+#define TIM12_CK 92
+#define TIM7_CK 93
+#define TIM6_CK 94
+#define TIM5_CK 95
+#define TIM4_CK 96
+#define TIM3_CK 97
+#define TIM2_CK 98
+#define MDIOS_CK 99
+#define OPAMP_CK 100
+#define CRS_CK 101
+#define TIM17_CK 102
+#define TIM16_CK 103
+#define TIM15_CK 104
+#define TIM8_CK 105
+#define TIM1_CK 106
+#define TMPSENS_CK 107
+#define RTCAPB_CK 108
+#define VREF_CK 109
+#define COMP12_CK 110
+#define SYSCFG_CK 111
+
+/* KERNEL BANK */
+#define KERN_BANK 120
+#define SDMMC1_CK 120
+#define QUADSPI_CK 121
+#define FMC_CK 122
+#define USB2OTG_CK 123
+#define USB1OTG_CK 124
+#define ADC12_CK 125
+#define SDMMC2_CK 126
+#define RNG_CK 127
+#define ADC3_CK 128
+#define DSI_CK 129
+#define LTDC_CK 130
+#define USART8_CK 131
+#define USART7_CK 132
+#define HDMICEC_CK 133
+#define I2C3_CK 134
+#define I2C2_CK 135
+#define I2C1_CK 136
+#define UART5_CK 137
+#define UART4_CK 138
+#define USART3_CK 139
+#define USART2_CK 140
+#define SPDIFRX_CK 141
+#define SPI3_CK 142
+#define SPI2_CK 143
+#define LPTIM1_CK 144
+#define FDCAN_CK 145
+#define SWP_CK 146
+#define HRTIM_CK 147
+#define DFSDM1_CK 148
+#define SAI3_CK 149
+#define SAI2_CK 150
+#define SAI1_CK 151
+#define SPI5_CK 152
+#define SPI4_CK 153
+#define SPI1_CK 154
+#define USART6_CK 155
+#define USART1_CK 156
+#define SAI4B_CK 157
+#define SAI4A_CK 158
+#define LPTIM5_CK 159
+#define LPTIM4_CK 160
+#define LPTIM3_CK 161
+#define LPTIM2_CK 162
+#define I2C4_CK 163
+#define SPI6_CK 164
+#define LPUART1_CK 165
+
+#define STM32H7_MAX_CLKS 166
diff --git a/include/dt-bindings/clock/sun4i-a10-ccu.h b/include/dt-bindings/clock/sun4i-a10-ccu.h
new file mode 100644
index 000000000000..c5a53f38d654
--- /dev/null
+++ b/include/dt-bindings/clock/sun4i-a10-ccu.h
@@ -0,0 +1,200 @@
+/*
+ * Copyright (C) 2017 Priit Laes <plaes@plaes.org>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ * a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ * b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _DT_BINDINGS_CLK_SUN4I_A10_H_
+#define _DT_BINDINGS_CLK_SUN4I_A10_H_
+
+#define CLK_HOSC 1
+#define CLK_CPU 20
+
+/* AHB Gates */
+#define CLK_AHB_OTG 26
+#define CLK_AHB_EHCI0 27
+#define CLK_AHB_OHCI0 28
+#define CLK_AHB_EHCI1 29
+#define CLK_AHB_OHCI1 30
+#define CLK_AHB_SS 31
+#define CLK_AHB_DMA 32
+#define CLK_AHB_BIST 33
+#define CLK_AHB_MMC0 34
+#define CLK_AHB_MMC1 35
+#define CLK_AHB_MMC2 36
+#define CLK_AHB_MMC3 37
+#define CLK_AHB_MS 38
+#define CLK_AHB_NAND 39
+#define CLK_AHB_SDRAM 40
+#define CLK_AHB_ACE 41
+#define CLK_AHB_EMAC 42
+#define CLK_AHB_TS 43
+#define CLK_AHB_SPI0 44
+#define CLK_AHB_SPI1 45
+#define CLK_AHB_SPI2 46
+#define CLK_AHB_SPI3 47
+#define CLK_AHB_PATA 48
+#define CLK_AHB_SATA 49
+#define CLK_AHB_GPS 50
+#define CLK_AHB_HSTIMER 51
+#define CLK_AHB_VE 52
+#define CLK_AHB_TVD 53
+#define CLK_AHB_TVE0 54
+#define CLK_AHB_TVE1 55
+#define CLK_AHB_LCD0 56
+#define CLK_AHB_LCD1 57
+#define CLK_AHB_CSI0 58
+#define CLK_AHB_CSI1 59
+#define CLK_AHB_HDMI0 60
+#define CLK_AHB_HDMI1 61
+#define CLK_AHB_DE_BE0 62
+#define CLK_AHB_DE_BE1 63
+#define CLK_AHB_DE_FE0 64
+#define CLK_AHB_DE_FE1 65
+#define CLK_AHB_GMAC 66
+#define CLK_AHB_MP 67
+#define CLK_AHB_GPU 68
+
+/* APB0 Gates */
+#define CLK_APB0_CODEC 69
+#define CLK_APB0_SPDIF 70
+#define CLK_APB0_I2S0 71
+#define CLK_APB0_AC97 72
+#define CLK_APB0_I2S1 73
+#define CLK_APB0_PIO 74
+#define CLK_APB0_IR0 75
+#define CLK_APB0_IR1 76
+#define CLK_APB0_I2S2 77
+#define CLK_APB0_KEYPAD 78
+
+/* APB1 Gates */
+#define CLK_APB1_I2C0 79
+#define CLK_APB1_I2C1 80
+#define CLK_APB1_I2C2 81
+#define CLK_APB1_I2C3 82
+#define CLK_APB1_CAN 83
+#define CLK_APB1_SCR 84
+#define CLK_APB1_PS20 85
+#define CLK_APB1_PS21 86
+#define CLK_APB1_I2C4 87
+#define CLK_APB1_UART0 88
+#define CLK_APB1_UART1 89
+#define CLK_APB1_UART2 90
+#define CLK_APB1_UART3 91
+#define CLK_APB1_UART4 92
+#define CLK_APB1_UART5 93
+#define CLK_APB1_UART6 94
+#define CLK_APB1_UART7 95
+
+/* IP clocks */
+#define CLK_NAND 96
+#define CLK_MS 97
+#define CLK_MMC0 98
+#define CLK_MMC0_OUTPUT 99
+#define CLK_MMC0_SAMPLE 100
+#define CLK_MMC1 101
+#define CLK_MMC1_OUTPUT 102
+#define CLK_MMC1_SAMPLE 103
+#define CLK_MMC2 104
+#define CLK_MMC2_OUTPUT 105
+#define CLK_MMC2_SAMPLE 106
+#define CLK_MMC3 107
+#define CLK_MMC3_OUTPUT 108
+#define CLK_MMC3_SAMPLE 109
+#define CLK_TS 110
+#define CLK_SS 111
+#define CLK_SPI0 112
+#define CLK_SPI1 113
+#define CLK_SPI2 114
+#define CLK_PATA 115
+#define CLK_IR0 116
+#define CLK_IR1 117
+#define CLK_I2S0 118
+#define CLK_AC97 119
+#define CLK_SPDIF 120
+#define CLK_KEYPAD 121
+#define CLK_SATA 122
+#define CLK_USB_OHCI0 123
+#define CLK_USB_OHCI1 124
+#define CLK_USB_PHY 125
+#define CLK_GPS 126
+#define CLK_SPI3 127
+#define CLK_I2S1 128
+#define CLK_I2S2 129
+
+/* DRAM Gates */
+#define CLK_DRAM_VE 130
+#define CLK_DRAM_CSI0 131
+#define CLK_DRAM_CSI1 132
+#define CLK_DRAM_TS 133
+#define CLK_DRAM_TVD 134
+#define CLK_DRAM_TVE0 135
+#define CLK_DRAM_TVE1 136
+#define CLK_DRAM_OUT 137
+#define CLK_DRAM_DE_FE1 138
+#define CLK_DRAM_DE_FE0 139
+#define CLK_DRAM_DE_BE0 140
+#define CLK_DRAM_DE_BE1 141
+#define CLK_DRAM_MP 142
+#define CLK_DRAM_ACE 143
+
+/* Display Engine Clocks */
+#define CLK_DE_BE0 144
+#define CLK_DE_BE1 145
+#define CLK_DE_FE0 146
+#define CLK_DE_FE1 147
+#define CLK_DE_MP 148
+#define CLK_TCON0_CH0 149
+#define CLK_TCON1_CH0 150
+#define CLK_CSI_SCLK 151
+#define CLK_TVD_SCLK2 152
+#define CLK_TVD 153
+#define CLK_TCON0_CH1_SCLK2 154
+#define CLK_TCON0_CH1 155
+#define CLK_TCON1_CH1_SCLK2 156
+#define CLK_TCON1_CH1 157
+#define CLK_CSI0 158
+#define CLK_CSI1 159
+#define CLK_CODEC 160
+#define CLK_VE 161
+#define CLK_AVS 162
+#define CLK_ACE 163
+#define CLK_HDMI 164
+#define CLK_GPU 165
+
+#endif /* _DT_BINDINGS_CLK_SUN4I_A10_H_ */
diff --git a/include/dt-bindings/clock/sun7i-a20-ccu.h b/include/dt-bindings/clock/sun7i-a20-ccu.h
new file mode 100644
index 000000000000..045a5178da0c
--- /dev/null
+++ b/include/dt-bindings/clock/sun7i-a20-ccu.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2017 Priit Laes <plaes@plaes.org>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ * a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ * b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _DT_BINDINGS_CLK_SUN7I_A20_H_
+#define _DT_BINDINGS_CLK_SUN7I_A20_H_
+
+#include <dt-bindings/clock/sun4i-a10-ccu.h>
+
+#define CLK_MBUS 166
+#define CLK_HDMI1_SLOW 167
+#define CLK_HDMI1 168
+#define CLK_OUT_A 169
+#define CLK_OUT_B 170
+
+#endif /* _DT_BINDINGS_CLK_SUN7I_A20_H_ */
diff --git a/include/dt-bindings/clock/sun8i-r40-ccu.h b/include/dt-bindings/clock/sun8i-r40-ccu.h
new file mode 100644
index 000000000000..4fa5f69fc297
--- /dev/null
+++ b/include/dt-bindings/clock/sun8i-r40-ccu.h
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ * a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ * b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _DT_BINDINGS_CLK_SUN8I_R40_H_
+#define _DT_BINDINGS_CLK_SUN8I_R40_H_
+
+#define CLK_CPU 24
+
+#define CLK_BUS_MIPI_DSI 29
+#define CLK_BUS_CE 30
+#define CLK_BUS_DMA 31
+#define CLK_BUS_MMC0 32
+#define CLK_BUS_MMC1 33
+#define CLK_BUS_MMC2 34
+#define CLK_BUS_MMC3 35
+#define CLK_BUS_NAND 36
+#define CLK_BUS_DRAM 37
+#define CLK_BUS_EMAC 38
+#define CLK_BUS_TS 39
+#define CLK_BUS_HSTIMER 40
+#define CLK_BUS_SPI0 41
+#define CLK_BUS_SPI1 42
+#define CLK_BUS_SPI2 43
+#define CLK_BUS_SPI3 44
+#define CLK_BUS_SATA 45
+#define CLK_BUS_OTG 46
+#define CLK_BUS_EHCI0 47
+#define CLK_BUS_EHCI1 48
+#define CLK_BUS_EHCI2 49
+#define CLK_BUS_OHCI0 50
+#define CLK_BUS_OHCI1 51
+#define CLK_BUS_OHCI2 52
+#define CLK_BUS_VE 53
+#define CLK_BUS_MP 54
+#define CLK_BUS_DEINTERLACE 55
+#define CLK_BUS_CSI0 56
+#define CLK_BUS_CSI1 57
+#define CLK_BUS_HDMI1 58
+#define CLK_BUS_HDMI0 59
+#define CLK_BUS_DE 60
+#define CLK_BUS_TVE0 61
+#define CLK_BUS_TVE1 62
+#define CLK_BUS_TVE_TOP 63
+#define CLK_BUS_GMAC 64
+#define CLK_BUS_GPU 65
+#define CLK_BUS_TVD0 66
+#define CLK_BUS_TVD1 67
+#define CLK_BUS_TVD2 68
+#define CLK_BUS_TVD3 69
+#define CLK_BUS_TVD_TOP 70
+#define CLK_BUS_TCON_LCD0 71
+#define CLK_BUS_TCON_LCD1 72
+#define CLK_BUS_TCON_TV0 73
+#define CLK_BUS_TCON_TV1 74
+#define CLK_BUS_TCON_TOP 75
+#define CLK_BUS_CODEC 76
+#define CLK_BUS_SPDIF 77
+#define CLK_BUS_AC97 78
+#define CLK_BUS_PIO 79
+#define CLK_BUS_IR0 80
+#define CLK_BUS_IR1 81
+#define CLK_BUS_THS 82
+#define CLK_BUS_KEYPAD 83
+#define CLK_BUS_I2S0 84
+#define CLK_BUS_I2S1 85
+#define CLK_BUS_I2S2 86
+#define CLK_BUS_I2C0 87
+#define CLK_BUS_I2C1 88
+#define CLK_BUS_I2C2 89
+#define CLK_BUS_I2C3 90
+#define CLK_BUS_CAN 91
+#define CLK_BUS_SCR 92
+#define CLK_BUS_PS20 93
+#define CLK_BUS_PS21 94
+#define CLK_BUS_I2C4 95
+#define CLK_BUS_UART0 96
+#define CLK_BUS_UART1 97
+#define CLK_BUS_UART2 98
+#define CLK_BUS_UART3 99
+#define CLK_BUS_UART4 100
+#define CLK_BUS_UART5 101
+#define CLK_BUS_UART6 102
+#define CLK_BUS_UART7 103
+#define CLK_BUS_DBG 104
+
+#define CLK_THS 105
+#define CLK_NAND 106
+#define CLK_MMC0 107
+#define CLK_MMC1 108
+#define CLK_MMC2 109
+#define CLK_MMC3 110
+#define CLK_TS 111
+#define CLK_CE 112
+#define CLK_SPI0 113
+#define CLK_SPI1 114
+#define CLK_SPI2 115
+#define CLK_SPI3 116
+#define CLK_I2S0 117
+#define CLK_I2S1 118
+#define CLK_I2S2 119
+#define CLK_AC97 120
+#define CLK_SPDIF 121
+#define CLK_KEYPAD 122
+#define CLK_SATA 123
+#define CLK_USB_PHY0 124
+#define CLK_USB_PHY1 125
+#define CLK_USB_PHY2 126
+#define CLK_USB_OHCI0 127
+#define CLK_USB_OHCI1 128
+#define CLK_USB_OHCI2 129
+#define CLK_IR0 130
+#define CLK_IR1 131
+
+#define CLK_DRAM_VE 133
+#define CLK_DRAM_CSI0 134
+#define CLK_DRAM_CSI1 135
+#define CLK_DRAM_TS 136
+#define CLK_DRAM_TVD 137
+#define CLK_DRAM_MP 138
+#define CLK_DRAM_DEINTERLACE 139
+#define CLK_DE 140
+#define CLK_MP 141
+#define CLK_TCON_LCD0 142
+#define CLK_TCON_LCD1 143
+#define CLK_TCON_TV0 144
+#define CLK_TCON_TV1 145
+#define CLK_DEINTERLACE 146
+#define CLK_CSI1_MCLK 147
+#define CLK_CSI_SCLK 148
+#define CLK_CSI0_MCLK 149
+#define CLK_VE 150
+#define CLK_CODEC 151
+#define CLK_AVS 152
+#define CLK_HDMI 153
+#define CLK_HDMI_SLOW 154
+
+#define CLK_DSI_DPHY 156
+#define CLK_TVE0 157
+#define CLK_TVE1 158
+#define CLK_TVD0 159
+#define CLK_TVD1 160
+#define CLK_TVD2 161
+#define CLK_TVD3 162
+#define CLK_GPU 163
+#define CLK_OUTA 164
+#define CLK_OUTB 165
+
+#endif /* _DT_BINDINGS_CLK_SUN8I_R40_H_ */
diff --git a/include/dt-bindings/mfd/stm32h7-rcc.h b/include/dt-bindings/mfd/stm32h7-rcc.h
new file mode 100644
index 000000000000..461a8e04453a
--- /dev/null
+++ b/include/dt-bindings/mfd/stm32h7-rcc.h
@@ -0,0 +1,136 @@
+/*
+ * This header provides constants for the STM32H7 RCC IP
+ */
+
+#ifndef _DT_BINDINGS_MFD_STM32H7_RCC_H
+#define _DT_BINDINGS_MFD_STM32H7_RCC_H
+
+/* AHB3 */
+#define STM32H7_RCC_AHB3_MDMA 0
+#define STM32H7_RCC_AHB3_DMA2D 4
+#define STM32H7_RCC_AHB3_JPGDEC 5
+#define STM32H7_RCC_AHB3_FMC 12
+#define STM32H7_RCC_AHB3_QUADSPI 14
+#define STM32H7_RCC_AHB3_SDMMC1 16
+#define STM32H7_RCC_AHB3_CPU 31
+
+#define STM32H7_AHB3_RESET(bit) (STM32H7_RCC_AHB3_##bit + (0x7C * 8))
+
+/* AHB1 */
+#define STM32H7_RCC_AHB1_DMA1 0
+#define STM32H7_RCC_AHB1_DMA2 1
+#define STM32H7_RCC_AHB1_ADC12 5
+#define STM32H7_RCC_AHB1_ART 14
+#define STM32H7_RCC_AHB1_ETH1MAC 15
+#define STM32H7_RCC_AHB1_USB1OTG 25
+#define STM32H7_RCC_AHB1_USB2OTG 27
+
+#define STM32H7_AHB1_RESET(bit) (STM32H7_RCC_AHB1_##bit + (0x80 * 8))
+
+/* AHB2 */
+#define STM32H7_RCC_AHB2_CAMITF 0
+#define STM32H7_RCC_AHB2_CRYPT 4
+#define STM32H7_RCC_AHB2_HASH 5
+#define STM32H7_RCC_AHB2_RNG 6
+#define STM32H7_RCC_AHB2_SDMMC2 9
+
+#define STM32H7_AHB2_RESET(bit) (STM32H7_RCC_AHB2_##bit + (0x84 * 8))
+
+/* AHB4 */
+#define STM32H7_RCC_AHB4_GPIOA 0
+#define STM32H7_RCC_AHB4_GPIOB 1
+#define STM32H7_RCC_AHB4_GPIOC 2
+#define STM32H7_RCC_AHB4_GPIOD 3
+#define STM32H7_RCC_AHB4_GPIOE 4
+#define STM32H7_RCC_AHB4_GPIOF 5
+#define STM32H7_RCC_AHB4_GPIOG 6
+#define STM32H7_RCC_AHB4_GPIOH 7
+#define STM32H7_RCC_AHB4_GPIOI 8
+#define STM32H7_RCC_AHB4_GPIOJ 9
+#define STM32H7_RCC_AHB4_GPIOK 10
+#define STM32H7_RCC_AHB4_CRC 19
+#define STM32H7_RCC_AHB4_BDMA 21
+#define STM32H7_RCC_AHB4_ADC3 24
+#define STM32H7_RCC_AHB4_HSEM 25
+
+#define STM32H7_AHB4_RESET(bit) (STM32H7_RCC_AHB4_##bit + (0x88 * 8))
+
+/* APB3 */
+#define STM32H7_RCC_APB3_LTDC 3
+#define STM32H7_RCC_APB3_DSI 4
+
+#define STM32H7_APB3_RESET(bit) (STM32H7_RCC_APB3_##bit + (0x8C * 8))
+
+/* APB1L */
+#define STM32H7_RCC_APB1L_TIM2 0
+#define STM32H7_RCC_APB1L_TIM3 1
+#define STM32H7_RCC_APB1L_TIM4 2
+#define STM32H7_RCC_APB1L_TIM5 3
+#define STM32H7_RCC_APB1L_TIM6 4
+#define STM32H7_RCC_APB1L_TIM7 5
+#define STM32H7_RCC_APB1L_TIM12 6
+#define STM32H7_RCC_APB1L_TIM13 7
+#define STM32H7_RCC_APB1L_TIM14 8
+#define STM32H7_RCC_APB1L_LPTIM1 9
+#define STM32H7_RCC_APB1L_SPI2 14
+#define STM32H7_RCC_APB1L_SPI3 15
+#define STM32H7_RCC_APB1L_SPDIF_RX 16
+#define STM32H7_RCC_APB1L_USART2 17
+#define STM32H7_RCC_APB1L_USART3 18
+#define STM32H7_RCC_APB1L_UART4 19
+#define STM32H7_RCC_APB1L_UART5 20
+#define STM32H7_RCC_APB1L_I2C1 21
+#define STM32H7_RCC_APB1L_I2C2 22
+#define STM32H7_RCC_APB1L_I2C3 23
+#define STM32H7_RCC_APB1L_HDMICEC 27
+#define STM32H7_RCC_APB1L_DAC12 29
+#define STM32H7_RCC_APB1L_USART7 30
+#define STM32H7_RCC_APB1L_USART8 31
+
+#define STM32H7_APB1L_RESET(bit) (STM32H7_RCC_APB1L_##bit + (0x90 * 8))
+
+/* APB1H */
+#define STM32H7_RCC_APB1H_CRS 1
+#define STM32H7_RCC_APB1H_SWP 2
+#define STM32H7_RCC_APB1H_OPAMP 4
+#define STM32H7_RCC_APB1H_MDIOS 5
+#define STM32H7_RCC_APB1H_FDCAN 8
+
+#define STM32H7_APB1H_RESET(bit) (STM32H7_RCC_APB1H_##bit + (0x94 * 8))
+
+/* APB2 */
+#define STM32H7_RCC_APB2_TIM1 0
+#define STM32H7_RCC_APB2_TIM8 1
+#define STM32H7_RCC_APB2_USART1 4
+#define STM32H7_RCC_APB2_USART6 5
+#define STM32H7_RCC_APB2_SPI1 12
+#define STM32H7_RCC_APB2_SPI4 13
+#define STM32H7_RCC_APB2_TIM15 16
+#define STM32H7_RCC_APB2_TIM16 17
+#define STM32H7_RCC_APB2_TIM17 18
+#define STM32H7_RCC_APB2_SPI5 20
+#define STM32H7_RCC_APB2_SAI1 22
+#define STM32H7_RCC_APB2_SAI2 23
+#define STM32H7_RCC_APB2_SAI3 24
+#define STM32H7_RCC_APB2_DFSDM1 28
+#define STM32H7_RCC_APB2_HRTIM 29
+
+#define STM32H7_APB2_RESET(bit) (STM32H7_RCC_APB2_##bit + (0x98 * 8))
+
+/* APB4 */
+#define STM32H7_RCC_APB4_SYSCFG 1
+#define STM32H7_RCC_APB4_LPUART1 3
+#define STM32H7_RCC_APB4_SPI6 5
+#define STM32H7_RCC_APB4_I2C4 7
+#define STM32H7_RCC_APB4_LPTIM2 9
+#define STM32H7_RCC_APB4_LPTIM3 10
+#define STM32H7_RCC_APB4_LPTIM4 11
+#define STM32H7_RCC_APB4_LPTIM5 12
+#define STM32H7_RCC_APB4_COMP12 14
+#define STM32H7_RCC_APB4_VREF 15
+#define STM32H7_RCC_APB4_SAI4 21
+#define STM32H7_RCC_APB4_TMPSENS 26
+
+#define STM32H7_APB4_RESET(bit) (STM32H7_RCC_APB4_##bit + (0x9C * 8))
+
+#endif /* _DT_BINDINGS_MFD_STM32H7_RCC_H */
diff --git a/include/dt-bindings/mips/lantiq_rcu_gphy.h b/include/dt-bindings/mips/lantiq_rcu_gphy.h
new file mode 100644
index 000000000000..fa1a63773342
--- /dev/null
+++ b/include/dt-bindings/mips/lantiq_rcu_gphy.h
@@ -0,0 +1,15 @@
+/*
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 as published
+ * by the Free Software Foundation.
+ *
+ * Copyright (C) 2016 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+ * Copyright (C) 2017 Hauke Mehrtens <hauke@hauke-m.de>
+ */
+#ifndef _DT_BINDINGS_MIPS_LANTIQ_RCU_GPHY_H
+#define _DT_BINDINGS_MIPS_LANTIQ_RCU_GPHY_H
+
+#define GPHY_MODE_GE 1
+#define GPHY_MODE_FE 2
+
+#endif /* _DT_BINDINGS_MIPS_LANTIQ_RCU_GPHY_H */
diff --git a/include/dt-bindings/reset/sun4i-a10-ccu.h b/include/dt-bindings/reset/sun4i-a10-ccu.h
new file mode 100644
index 000000000000..5f4480bedc8a
--- /dev/null
+++ b/include/dt-bindings/reset/sun4i-a10-ccu.h
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2017 Priit Laes <plaes@plaes.org>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ * a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ * b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _DT_BINDINGS_RST_SUN4I_A10_H
+#define _DT_BINDINGS_RST_SUN4I_A10_H
+
+#define RST_USB_PHY0 1
+#define RST_USB_PHY1 2
+#define RST_USB_PHY2 3
+#define RST_GPS 4
+#define RST_DE_BE0 5
+#define RST_DE_BE1 6
+#define RST_DE_FE0 7
+#define RST_DE_FE1 8
+#define RST_DE_MP 9
+#define RST_TVE0 10
+#define RST_TCON0 11
+#define RST_TVE1 12
+#define RST_TCON1 13
+#define RST_CSI0 14
+#define RST_CSI1 15
+#define RST_VE 16
+#define RST_ACE 17
+#define RST_LVDS 18
+#define RST_GPU 19
+#define RST_HDMI_H 20
+#define RST_HDMI_SYS 21
+#define RST_HDMI_AUDIO_DMA 22
+
+#endif /* DT_BINDINGS_RST_SUN4I_A10_H */
diff --git a/include/dt-bindings/reset/sun8i-r40-ccu.h b/include/dt-bindings/reset/sun8i-r40-ccu.h
new file mode 100644
index 000000000000..c5ebcf6672e4
--- /dev/null
+++ b/include/dt-bindings/reset/sun8i-r40-ccu.h
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2017 Icenowy Zheng <icenowy@aosc.io>
+ *
+ * This file is dual-licensed: you can use it either under the terms
+ * of the GPL or the X11 license, at your option. Note that this dual
+ * licensing only applies to this file, and not this project as a
+ * whole.
+ *
+ * a) This file is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * Or, alternatively,
+ *
+ * b) Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+#ifndef _DT_BINDINGS_RST_SUN8I_R40_H_
+#define _DT_BINDINGS_RST_SUN8I_R40_H_
+
+#define RST_USB_PHY0 0
+#define RST_USB_PHY1 1
+#define RST_USB_PHY2 2
+
+#define RST_DRAM 3
+#define RST_MBUS 4
+
+#define RST_BUS_MIPI_DSI 5
+#define RST_BUS_CE 6
+#define RST_BUS_DMA 7
+#define RST_BUS_MMC0 8
+#define RST_BUS_MMC1 9
+#define RST_BUS_MMC2 10
+#define RST_BUS_MMC3 11
+#define RST_BUS_NAND 12
+#define RST_BUS_DRAM 13
+#define RST_BUS_EMAC 14
+#define RST_BUS_TS 15
+#define RST_BUS_HSTIMER 16
+#define RST_BUS_SPI0 17
+#define RST_BUS_SPI1 18
+#define RST_BUS_SPI2 19
+#define RST_BUS_SPI3 20
+#define RST_BUS_SATA 21
+#define RST_BUS_OTG 22
+#define RST_BUS_EHCI0 23
+#define RST_BUS_EHCI1 24
+#define RST_BUS_EHCI2 25
+#define RST_BUS_OHCI0 26
+#define RST_BUS_OHCI1 27
+#define RST_BUS_OHCI2 28
+#define RST_BUS_VE 29
+#define RST_BUS_MP 30
+#define RST_BUS_DEINTERLACE 31
+#define RST_BUS_CSI0 32
+#define RST_BUS_CSI1 33
+#define RST_BUS_HDMI0 34
+#define RST_BUS_HDMI1 35
+#define RST_BUS_DE 36
+#define RST_BUS_TVE0 37
+#define RST_BUS_TVE1 38
+#define RST_BUS_TVE_TOP 39
+#define RST_BUS_GMAC 40
+#define RST_BUS_GPU 41
+#define RST_BUS_TVD0 42
+#define RST_BUS_TVD1 43
+#define RST_BUS_TVD2 44
+#define RST_BUS_TVD3 45
+#define RST_BUS_TVD_TOP 46
+#define RST_BUS_TCON_LCD0 47
+#define RST_BUS_TCON_LCD1 48
+#define RST_BUS_TCON_TV0 49
+#define RST_BUS_TCON_TV1 50
+#define RST_BUS_TCON_TOP 51
+#define RST_BUS_DBG 52
+#define RST_BUS_LVDS 53
+#define RST_BUS_CODEC 54
+#define RST_BUS_SPDIF 55
+#define RST_BUS_AC97 56
+#define RST_BUS_IR0 57
+#define RST_BUS_IR1 58
+#define RST_BUS_THS 59
+#define RST_BUS_KEYPAD 60
+#define RST_BUS_I2S0 61
+#define RST_BUS_I2S1 62
+#define RST_BUS_I2S2 63
+#define RST_BUS_I2C0 64
+#define RST_BUS_I2C1 65
+#define RST_BUS_I2C2 66
+#define RST_BUS_I2C3 67
+#define RST_BUS_CAN 68
+#define RST_BUS_SCR 69
+#define RST_BUS_PS20 70
+#define RST_BUS_PS21 71
+#define RST_BUS_I2C4 72
+#define RST_BUS_UART0 73
+#define RST_BUS_UART1 74
+#define RST_BUS_UART2 75
+#define RST_BUS_UART3 76
+#define RST_BUS_UART4 77
+#define RST_BUS_UART5 78
+#define RST_BUS_UART6 79
+#define RST_BUS_UART7 80
+
+#endif /* _DT_BINDINGS_RST_SUN8I_R40_H_ */
diff --git a/include/linux/audit.h b/include/linux/audit.h
index 2150bdccfbab..74d4d4e8e3db 100644
--- a/include/linux/audit.h
+++ b/include/linux/audit.h
@@ -351,7 +351,7 @@ extern int __audit_socketcall(int nargs, unsigned long *args);
extern int __audit_sockaddr(int len, void *addr);
extern void __audit_fd_pair(int fd1, int fd2);
extern void __audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr);
-extern void __audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec *abs_timeout);
+extern void __audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec64 *abs_timeout);
extern void __audit_mq_notify(mqd_t mqdes, const struct sigevent *notification);
extern void __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat);
extern int __audit_log_bprm_fcaps(struct linux_binprm *bprm,
@@ -412,7 +412,7 @@ static inline void audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr)
if (unlikely(!audit_dummy_context()))
__audit_mq_open(oflag, mode, attr);
}
-static inline void audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec *abs_timeout)
+static inline void audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, unsigned int msg_prio, const struct timespec64 *abs_timeout)
{
if (unlikely(!audit_dummy_context()))
__audit_mq_sendrecv(mqdes, msg_len, msg_prio, abs_timeout);
@@ -549,7 +549,7 @@ static inline void audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr)
{ }
static inline void audit_mq_sendrecv(mqd_t mqdes, size_t msg_len,
unsigned int msg_prio,
- const struct timespec *abs_timeout)
+ const struct timespec64 *abs_timeout)
{ }
static inline void audit_mq_notify(mqd_t mqdes,
const struct sigevent *notification)
diff --git a/include/linux/ceph/ceph_fs.h b/include/linux/ceph/ceph_fs.h
index edf5b04b918a..b422170b791a 100644
--- a/include/linux/ceph/ceph_fs.h
+++ b/include/linux/ceph/ceph_fs.h
@@ -167,6 +167,8 @@ struct ceph_mon_request_header {
struct ceph_mon_statfs {
struct ceph_mon_request_header monhdr;
struct ceph_fsid fsid;
+ __u8 contains_data_pool;
+ __le64 data_pool;
} __attribute__ ((packed));
struct ceph_statfs {
@@ -669,7 +671,9 @@ enum {
extern const char *ceph_cap_op_name(int op);
/* flags field in client cap messages (version >= 10) */
-#define CEPH_CLIENT_CAPS_SYNC (0x1)
+#define CEPH_CLIENT_CAPS_SYNC (1<<0)
+#define CEPH_CLIENT_CAPS_NO_CAPSNAP (1<<1)
+#define CEPH_CLIENT_CAPS_PENDING_CAPSNAP (1<<2);
/*
* caps message, used for capability callbacks, acks, requests, etc.
diff --git a/include/linux/ceph/libceph.h b/include/linux/ceph/libceph.h
index 8a79587e1317..4c846aabd9f6 100644
--- a/include/linux/ceph/libceph.h
+++ b/include/linux/ceph/libceph.h
@@ -84,17 +84,6 @@ struct ceph_options {
#define CEPH_AUTH_NAME_DEFAULT "guest"
-/*
- * Delay telling the MDS we no longer want caps, in case we reopen
- * the file. Delay a minimum amount of time, even if we send a cap
- * message for some other reason. Otherwise, take the oppotunity to
- * update the mds to avoid sending another message later.
- */
-#define CEPH_CAPS_WANTED_DELAY_MIN_DEFAULT 5 /* cap release delay */
-#define CEPH_CAPS_WANTED_DELAY_MAX_DEFAULT 60 /* cap release delay */
-
-#define CEPH_CAP_RELEASE_SAFETY_DEFAULT (CEPH_CAPS_PER_RELEASE * 4)
-
/* mount state */
enum {
CEPH_MOUNT_MOUNTING,
diff --git a/include/linux/ceph/mon_client.h b/include/linux/ceph/mon_client.h
index d5a3ecea578d..0fa990bf867a 100644
--- a/include/linux/ceph/mon_client.h
+++ b/include/linux/ceph/mon_client.h
@@ -133,8 +133,8 @@ void ceph_monc_renew_subs(struct ceph_mon_client *monc);
extern int ceph_monc_wait_osdmap(struct ceph_mon_client *monc, u32 epoch,
unsigned long timeout);
-extern int ceph_monc_do_statfs(struct ceph_mon_client *monc,
- struct ceph_statfs *buf);
+int ceph_monc_do_statfs(struct ceph_mon_client *monc, u64 data_pool,
+ struct ceph_statfs *buf);
int ceph_monc_get_version(struct ceph_mon_client *monc, const char *what,
u64 *newest);
diff --git a/include/linux/ceph/rados.h b/include/linux/ceph/rados.h
index b8281feda9c7..01408841c9c4 100644
--- a/include/linux/ceph/rados.h
+++ b/include/linux/ceph/rados.h
@@ -230,7 +230,6 @@ extern const char *ceph_osd_state_name(int s);
\
/* fancy write */ \
f(APPEND, __CEPH_OSD_OP(WR, DATA, 6), "append") \
- f(STARTSYNC, __CEPH_OSD_OP(WR, DATA, 7), "startsync") \
f(SETTRUNC, __CEPH_OSD_OP(WR, DATA, 8), "settrunc") \
f(TRIMTRUNC, __CEPH_OSD_OP(WR, DATA, 9), "trimtrunc") \
\
diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h
index c59c62571e4f..5100ec1b5d55 100644
--- a/include/linux/clk-provider.h
+++ b/include/linux/clk-provider.h
@@ -343,6 +343,7 @@ struct clk_hw *clk_hw_register_gate(struct device *dev, const char *name,
u8 clk_gate_flags, spinlock_t *lock);
void clk_unregister_gate(struct clk *clk);
void clk_hw_unregister_gate(struct clk_hw *hw);
+int clk_gate_is_enabled(struct clk_hw *hw);
struct clk_div_table {
unsigned int val;
@@ -565,6 +566,9 @@ struct clk_fractional_divider {
u8 nwidth;
u32 nmask;
u8 flags;
+ void (*approximation)(struct clk_hw *hw,
+ unsigned long rate, unsigned long *parent_rate,
+ unsigned long *m, unsigned long *n);
spinlock_t *lock;
};
diff --git a/include/linux/clk/at91_pmc.h b/include/linux/clk/at91_pmc.h
index 17f413bbbedf..6aca5ce8a99a 100644
--- a/include/linux/clk/at91_pmc.h
+++ b/include/linux/clk/at91_pmc.h
@@ -185,4 +185,29 @@
#define AT91_PMC_PCR_EN (0x1 << 28) /* Enable */
#define AT91_PMC_PCR_GCKEN (0x1 << 29) /* GCK Enable */
+#define AT91_PMC_AUDIO_PLL0 0x14c
+#define AT91_PMC_AUDIO_PLL_PLLEN (1 << 0)
+#define AT91_PMC_AUDIO_PLL_PADEN (1 << 1)
+#define AT91_PMC_AUDIO_PLL_PMCEN (1 << 2)
+#define AT91_PMC_AUDIO_PLL_RESETN (1 << 3)
+#define AT91_PMC_AUDIO_PLL_ND_OFFSET 8
+#define AT91_PMC_AUDIO_PLL_ND_MASK (0x7f << AT91_PMC_AUDIO_PLL_ND_OFFSET)
+#define AT91_PMC_AUDIO_PLL_ND(n) ((n) << AT91_PMC_AUDIO_PLL_ND_OFFSET)
+#define AT91_PMC_AUDIO_PLL_QDPMC_OFFSET 16
+#define AT91_PMC_AUDIO_PLL_QDPMC_MASK (0x7f << AT91_PMC_AUDIO_PLL_QDPMC_OFFSET)
+#define AT91_PMC_AUDIO_PLL_QDPMC(n) ((n) << AT91_PMC_AUDIO_PLL_QDPMC_OFFSET)
+
+#define AT91_PMC_AUDIO_PLL1 0x150
+#define AT91_PMC_AUDIO_PLL_FRACR_MASK 0x3fffff
+#define AT91_PMC_AUDIO_PLL_QDPAD_OFFSET 24
+#define AT91_PMC_AUDIO_PLL_QDPAD_MASK (0x7f << AT91_PMC_AUDIO_PLL_QDPAD_OFFSET)
+#define AT91_PMC_AUDIO_PLL_QDPAD(n) ((n) << AT91_PMC_AUDIO_PLL_QDPAD_OFFSET)
+#define AT91_PMC_AUDIO_PLL_QDPAD_DIV_OFFSET AT91_PMC_AUDIO_PLL_QDPAD_OFFSET
+#define AT91_PMC_AUDIO_PLL_QDPAD_DIV_MASK (0x3 << AT91_PMC_AUDIO_PLL_QDPAD_DIV_OFFSET)
+#define AT91_PMC_AUDIO_PLL_QDPAD_DIV(n) ((n) << AT91_PMC_AUDIO_PLL_QDPAD_DIV_OFFSET)
+#define AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV_OFFSET 26
+#define AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV_MAX 0x1f
+#define AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV_MASK (AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV_MAX << AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV_OFFSET)
+#define AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV(n) ((n) << AT91_PMC_AUDIO_PLL_QDPAD_EXTDIV_OFFSET)
+
#endif
diff --git a/include/linux/compat.h b/include/linux/compat.h
index 3fc433303d7a..a5619de3437d 100644
--- a/include/linux/compat.h
+++ b/include/linux/compat.h
@@ -171,15 +171,6 @@ extern int get_compat_itimerspec64(struct itimerspec64 *its,
extern int put_compat_itimerspec64(const struct itimerspec64 *its,
struct compat_itimerspec __user *uits);
-/*
- * This function convert a timespec if necessary and returns a *user
- * space* pointer. If no conversion is necessary, it returns the
- * initial pointer. NULL is a legitimate argument and will always
- * output NULL.
- */
-extern int compat_convert_timespec(struct timespec __user **,
- const void __user *);
-
struct compat_iovec {
compat_uptr_t iov_base;
compat_size_t iov_len;
diff --git a/include/linux/dax.h b/include/linux/dax.h
index 46cad1d0f129..122197124b9d 100644
--- a/include/linux/dax.h
+++ b/include/linux/dax.h
@@ -19,8 +19,6 @@ struct dax_operations {
/* copy_from_iter: required operation for fs-dax direct-i/o */
size_t (*copy_from_iter)(struct dax_device *, pgoff_t, void *, size_t,
struct iov_iter *);
- /* flush: optional driver-specific cache management after writes */
- void (*flush)(struct dax_device *, pgoff_t, void *, size_t);
};
extern struct attribute_group dax_attribute_group;
@@ -90,8 +88,7 @@ long dax_direct_access(struct dax_device *dax_dev, pgoff_t pgoff, long nr_pages,
void **kaddr, pfn_t *pfn);
size_t dax_copy_from_iter(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
size_t bytes, struct iov_iter *i);
-void dax_flush(struct dax_device *dax_dev, pgoff_t pgoff, void *addr,
- size_t size);
+void dax_flush(struct dax_device *dax_dev, void *addr, size_t size);
void dax_write_cache(struct dax_device *dax_dev, bool wc);
bool dax_write_cache_enabled(struct dax_device *dax_dev);
diff --git a/include/linux/dcache.h b/include/linux/dcache.h
index aae1cdb76851..ed1a7cf6923a 100644
--- a/include/linux/dcache.h
+++ b/include/linux/dcache.h
@@ -147,7 +147,7 @@ struct dentry_operations {
struct vfsmount *(*d_automount)(struct path *);
int (*d_manage)(const struct path *, bool);
struct dentry *(*d_real)(struct dentry *, const struct inode *,
- unsigned int);
+ unsigned int, unsigned int);
} ____cacheline_aligned;
/*
@@ -562,11 +562,15 @@ static inline struct dentry *d_backing_dentry(struct dentry *upper)
return upper;
}
+/* d_real() flags */
+#define D_REAL_UPPER 0x2 /* return upper dentry or NULL if non-upper */
+
/**
* d_real - Return the real dentry
* @dentry: the dentry to query
* @inode: inode to select the dentry from multiple layers (can be NULL)
- * @flags: open flags to control copy-up behavior
+ * @open_flags: open flags to control copy-up behavior
+ * @flags: flags to control what is returned by this function
*
* If dentry is on a union/overlay, then return the underlying, real dentry.
* Otherwise return the dentry itself.
@@ -575,10 +579,10 @@ static inline struct dentry *d_backing_dentry(struct dentry *upper)
*/
static inline struct dentry *d_real(struct dentry *dentry,
const struct inode *inode,
- unsigned int flags)
+ unsigned int open_flags, unsigned int flags)
{
if (unlikely(dentry->d_flags & DCACHE_OP_REAL))
- return dentry->d_op->d_real(dentry, inode, flags);
+ return dentry->d_op->d_real(dentry, inode, open_flags, flags);
else
return dentry;
}
@@ -593,7 +597,7 @@ static inline struct dentry *d_real(struct dentry *dentry,
static inline struct inode *d_real_inode(const struct dentry *dentry)
{
/* This usage of d_real() results in const dentry */
- return d_backing_inode(d_real((struct dentry *) dentry, NULL, 0));
+ return d_backing_inode(d_real((struct dentry *) dentry, NULL, 0, 0));
}
struct name_snapshot {
diff --git a/include/linux/device-mapper.h b/include/linux/device-mapper.h
index 4f2b3b2076c4..a5538433c927 100644
--- a/include/linux/device-mapper.h
+++ b/include/linux/device-mapper.h
@@ -134,8 +134,6 @@ typedef long (*dm_dax_direct_access_fn) (struct dm_target *ti, pgoff_t pgoff,
long nr_pages, void **kaddr, pfn_t *pfn);
typedef size_t (*dm_dax_copy_from_iter_fn)(struct dm_target *ti, pgoff_t pgoff,
void *addr, size_t bytes, struct iov_iter *i);
-typedef void (*dm_dax_flush_fn)(struct dm_target *ti, pgoff_t pgoff, void *addr,
- size_t size);
#define PAGE_SECTORS (PAGE_SIZE / 512)
void dm_error(const char *message);
@@ -186,7 +184,6 @@ struct target_type {
dm_io_hints_fn io_hints;
dm_dax_direct_access_fn direct_access;
dm_dax_copy_from_iter_fn dax_copy_from_iter;
- dm_dax_flush_fn dax_flush;
/* For internal device-mapper use. */
struct list_head list;
@@ -387,7 +384,7 @@ struct dm_arg {
* Validate the next argument, either returning it as *value or, if invalid,
* returning -EINVAL and setting *error.
*/
-int dm_read_arg(struct dm_arg *arg, struct dm_arg_set *arg_set,
+int dm_read_arg(const struct dm_arg *arg, struct dm_arg_set *arg_set,
unsigned *value, char **error);
/*
@@ -395,7 +392,7 @@ int dm_read_arg(struct dm_arg *arg, struct dm_arg_set *arg_set,
* arg->min and arg->max further arguments. Either return the size as
* *num_args or, if invalid, return -EINVAL and set *error.
*/
-int dm_read_arg_group(struct dm_arg *arg, struct dm_arg_set *arg_set,
+int dm_read_arg_group(const struct dm_arg *arg, struct dm_arg_set *arg_set,
unsigned *num_args, char **error);
/*
diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h
index b6feed6547ce..2a0c453d7235 100644
--- a/include/linux/f2fs_fs.h
+++ b/include/linux/f2fs_fs.h
@@ -186,6 +186,8 @@ struct f2fs_extent {
#define F2FS_NAME_LEN 255
#define F2FS_INLINE_XATTR_ADDRS 50 /* 200 bytes for inline xattrs */
#define DEF_ADDRS_PER_INODE 923 /* Address Pointers in an Inode */
+#define CUR_ADDRS_PER_INODE(inode) (DEF_ADDRS_PER_INODE - \
+ get_extra_isize(inode))
#define DEF_NIDS_PER_INODE 5 /* Node IDs in an Inode */
#define ADDRS_PER_INODE(inode) addrs_per_inode(inode)
#define ADDRS_PER_BLOCK 1018 /* Address Pointers in a Direct Block */
@@ -205,9 +207,7 @@ struct f2fs_extent {
#define F2FS_INLINE_DENTRY 0x04 /* file inline dentry flag */
#define F2FS_DATA_EXIST 0x08 /* file inline data exist flag */
#define F2FS_INLINE_DOTS 0x10 /* file having implicit dot dentries */
-
-#define MAX_INLINE_DATA (sizeof(__le32) * (DEF_ADDRS_PER_INODE - \
- F2FS_INLINE_XATTR_ADDRS - 1))
+#define F2FS_EXTRA_ATTR 0x20 /* file having extra attribute */
struct f2fs_inode {
__le16 i_mode; /* file mode */
@@ -235,8 +235,16 @@ struct f2fs_inode {
struct f2fs_extent i_ext; /* caching a largest extent */
- __le32 i_addr[DEF_ADDRS_PER_INODE]; /* Pointers to data blocks */
-
+ union {
+ struct {
+ __le16 i_extra_isize; /* extra inode attribute size */
+ __le16 i_padding; /* padding */
+ __le32 i_projid; /* project id */
+ __le32 i_inode_checksum;/* inode meta checksum */
+ __le32 i_extra_end[0]; /* for attribute size calculation */
+ };
+ __le32 i_addr[DEF_ADDRS_PER_INODE]; /* Pointers to data blocks */
+ };
__le32 i_nid[DEF_NIDS_PER_INODE]; /* direct(2), indirect(2),
double_indirect(1) node id */
} __packed;
@@ -465,7 +473,7 @@ typedef __le32 f2fs_hash_t;
#define MAX_DIR_BUCKETS (1 << ((MAX_DIR_HASH_DEPTH / 2) - 1))
/*
- * space utilization of regular dentry and inline dentry
+ * space utilization of regular dentry and inline dentry (w/o extra reservation)
* regular dentry inline dentry
* bitmap 1 * 27 = 27 1 * 23 = 23
* reserved 1 * 3 = 3 1 * 7 = 7
@@ -501,24 +509,6 @@ struct f2fs_dentry_block {
__u8 filename[NR_DENTRY_IN_BLOCK][F2FS_SLOT_LEN];
} __packed;
-/* for inline dir */
-#define NR_INLINE_DENTRY (MAX_INLINE_DATA * BITS_PER_BYTE / \
- ((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
- BITS_PER_BYTE + 1))
-#define INLINE_DENTRY_BITMAP_SIZE ((NR_INLINE_DENTRY + \
- BITS_PER_BYTE - 1) / BITS_PER_BYTE)
-#define INLINE_RESERVED_SIZE (MAX_INLINE_DATA - \
- ((SIZE_OF_DIR_ENTRY + F2FS_SLOT_LEN) * \
- NR_INLINE_DENTRY + INLINE_DENTRY_BITMAP_SIZE))
-
-/* inline directory entry structure */
-struct f2fs_inline_dentry {
- __u8 dentry_bitmap[INLINE_DENTRY_BITMAP_SIZE];
- __u8 reserved[INLINE_RESERVED_SIZE];
- struct f2fs_dir_entry dentry[NR_INLINE_DENTRY];
- __u8 filename[NR_INLINE_DENTRY][F2FS_SLOT_LEN];
-} __packed;
-
/* file types used in inode_info->flags */
enum {
F2FS_FT_UNKNOWN,
@@ -534,4 +524,6 @@ enum {
#define S_SHIFT 12
+#define F2FS_DEF_PROJID 0 /* default project ID */
+
#endif /* _LINUX_F2FS_FS_H */
diff --git a/include/linux/fb.h b/include/linux/fb.h
index a964d076b4dc..f4386b0ccf40 100644
--- a/include/linux/fb.h
+++ b/include/linux/fb.h
@@ -400,7 +400,7 @@ struct fb_tile_ops {
#endif /* CONFIG_FB_TILEBLITTING */
/* FBINFO_* = fb_info.flags bit flags */
-#define FBINFO_MODULE 0x0001 /* Low-level driver is a module */
+#define FBINFO_DEFAULT 0
#define FBINFO_HWACCEL_DISABLED 0x0002
/* When FBINFO_HWACCEL_DISABLED is set:
* Hardware acceleration is turned off. Software implementations
@@ -533,14 +533,6 @@ static inline struct apertures_struct *alloc_apertures(unsigned int max_num) {
return a;
}
-#ifdef MODULE
-#define FBINFO_DEFAULT FBINFO_MODULE
-#else
-#define FBINFO_DEFAULT 0
-#endif
-
-// This will go away
-#define FBINFO_FLAG_MODULE FBINFO_MODULE
#define FBINFO_FLAG_DEFAULT FBINFO_DEFAULT
/* This will go away
diff --git a/include/linux/fbcon.h b/include/linux/fbcon.h
new file mode 100644
index 000000000000..f68a7db14165
--- /dev/null
+++ b/include/linux/fbcon.h
@@ -0,0 +1,12 @@
+#ifndef _LINUX_FBCON_H
+#define _LINUX_FBCON_H
+
+#ifdef CONFIG_FRAMEBUFFER_CONSOLE
+void __init fb_console_init(void);
+void __exit fb_console_exit(void);
+#else
+static inline void fb_console_init(void) {}
+static inline void fb_console_exit(void) {}
+#endif
+
+#endif /* _LINUX_FBCON_H */
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 2d0e6748e46e..339e73742e73 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -148,8 +148,8 @@ typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset,
/* File was opened by fanotify and shouldn't generate fanotify events */
#define FMODE_NONOTIFY ((__force fmode_t)0x4000000)
-/* File is capable of returning -EAGAIN if AIO will block */
-#define FMODE_AIO_NOWAIT ((__force fmode_t)0x8000000)
+/* File is capable of returning -EAGAIN if I/O will block */
+#define FMODE_NOWAIT ((__force fmode_t)0x8000000)
/*
* Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector
@@ -1235,7 +1235,7 @@ static inline struct inode *file_inode(const struct file *f)
static inline struct dentry *file_dentry(const struct file *file)
{
- return d_real(file->f_path.dentry, file_inode(file), 0);
+ return d_real(file->f_path.dentry, file_inode(file), 0, 0);
}
static inline int locks_lock_file_wait(struct file *filp, struct file_lock *fl)
@@ -1271,6 +1271,33 @@ extern pid_t f_getown(struct file *filp);
extern int send_sigurg(struct fown_struct *fown);
/*
+ * sb->s_flags. Note that these mirror the equivalent MS_* flags where
+ * represented in both.
+ */
+#define SB_RDONLY 1 /* Mount read-only */
+#define SB_NOSUID 2 /* Ignore suid and sgid bits */
+#define SB_NODEV 4 /* Disallow access to device special files */
+#define SB_NOEXEC 8 /* Disallow program execution */
+#define SB_SYNCHRONOUS 16 /* Writes are synced at once */
+#define SB_MANDLOCK 64 /* Allow mandatory locks on an FS */
+#define SB_DIRSYNC 128 /* Directory modifications are synchronous */
+#define SB_NOATIME 1024 /* Do not update access times. */
+#define SB_NODIRATIME 2048 /* Do not update directory access times */
+#define SB_SILENT 32768
+#define SB_POSIXACL (1<<16) /* VFS does not apply the umask */
+#define SB_KERNMOUNT (1<<22) /* this is a kern_mount call */
+#define SB_I_VERSION (1<<23) /* Update inode I_version field */
+#define SB_LAZYTIME (1<<25) /* Update the on-disk [acm]times lazily */
+
+/* These sb flags are internal to the kernel */
+#define SB_SUBMOUNT (1<<26)
+#define SB_NOREMOTELOCK (1<<27)
+#define SB_NOSEC (1<<28)
+#define SB_BORN (1<<29)
+#define SB_ACTIVE (1<<30)
+#define SB_NOUSER (1<<31)
+
+/*
* Umount options
*/
@@ -1754,13 +1781,10 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
struct iovec **ret_pointer);
extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
-extern ssize_t __vfs_write(struct file *, const char __user *, size_t, loff_t *);
extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
extern ssize_t vfs_readv(struct file *, const struct iovec __user *,
unsigned long, loff_t *, rwf_t);
-extern ssize_t vfs_writev(struct file *, const struct iovec __user *,
- unsigned long, loff_t *, rwf_t);
extern ssize_t vfs_copy_file_range(struct file *, loff_t , struct file *,
loff_t, size_t, unsigned int);
extern int vfs_clone_file_prep_inodes(struct inode *inode_in, loff_t pos_in,
@@ -1836,7 +1860,7 @@ struct super_operations {
* possible to override it selectively if you really wanted to with some
* ioctl() that is not currently implemented.
*
- * Exception: MS_RDONLY is always applied to the entire file system.
+ * Exception: SB_RDONLY is always applied to the entire file system.
*
* Unfortunately, it is possible to change a filesystems flags with it mounted
* with files in use. This means that all of the inodes will not have their
@@ -1845,19 +1869,20 @@ struct super_operations {
*/
#define __IS_FLG(inode, flg) ((inode)->i_sb->s_flags & (flg))
-#define IS_RDONLY(inode) ((inode)->i_sb->s_flags & MS_RDONLY)
-#define IS_SYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS) || \
+static inline bool sb_rdonly(const struct super_block *sb) { return sb->s_flags & MS_RDONLY; }
+#define IS_RDONLY(inode) sb_rdonly((inode)->i_sb)
+#define IS_SYNC(inode) (__IS_FLG(inode, SB_SYNCHRONOUS) || \
((inode)->i_flags & S_SYNC))
-#define IS_DIRSYNC(inode) (__IS_FLG(inode, MS_SYNCHRONOUS|MS_DIRSYNC) || \
+#define IS_DIRSYNC(inode) (__IS_FLG(inode, SB_SYNCHRONOUS|SB_DIRSYNC) || \
((inode)->i_flags & (S_SYNC|S_DIRSYNC)))
-#define IS_MANDLOCK(inode) __IS_FLG(inode, MS_MANDLOCK)
-#define IS_NOATIME(inode) __IS_FLG(inode, MS_RDONLY|MS_NOATIME)
-#define IS_I_VERSION(inode) __IS_FLG(inode, MS_I_VERSION)
+#define IS_MANDLOCK(inode) __IS_FLG(inode, SB_MANDLOCK)
+#define IS_NOATIME(inode) __IS_FLG(inode, SB_RDONLY|SB_NOATIME)
+#define IS_I_VERSION(inode) __IS_FLG(inode, SB_I_VERSION)
#define IS_NOQUOTA(inode) ((inode)->i_flags & S_NOQUOTA)
#define IS_APPEND(inode) ((inode)->i_flags & S_APPEND)
#define IS_IMMUTABLE(inode) ((inode)->i_flags & S_IMMUTABLE)
-#define IS_POSIXACL(inode) __IS_FLG(inode, MS_POSIXACL)
+#define IS_POSIXACL(inode) __IS_FLG(inode, SB_POSIXACL)
#define IS_DEADDIR(inode) ((inode)->i_flags & S_DEAD)
#define IS_NOCMTIME(inode) ((inode)->i_flags & S_NOCMTIME)
@@ -2178,7 +2203,7 @@ static inline int __mandatory_lock(struct inode *ino)
}
/*
- * ... and these candidates should be on MS_MANDLOCK mounted fs,
+ * ... and these candidates should be on SB_MANDLOCK mounted fs,
* otherwise these will be advisory locks
*/
@@ -2788,15 +2813,15 @@ static inline const char *kernel_read_file_id_str(enum kernel_read_file_id id)
return kernel_read_file_str[id];
}
-extern int kernel_read(struct file *, loff_t, char *, unsigned long);
extern int kernel_read_file(struct file *, void **, loff_t *, loff_t,
enum kernel_read_file_id);
-extern int kernel_read_file_from_path(char *, void **, loff_t *, loff_t,
+extern int kernel_read_file_from_path(const char *, void **, loff_t *, loff_t,
enum kernel_read_file_id);
extern int kernel_read_file_from_fd(int, void **, loff_t *, loff_t,
enum kernel_read_file_id);
-extern ssize_t kernel_write(struct file *, const char *, size_t, loff_t);
-extern ssize_t __kernel_write(struct file *, const char *, size_t, loff_t *);
+extern ssize_t kernel_read(struct file *, void *, size_t, loff_t *);
+extern ssize_t kernel_write(struct file *, const void *, size_t, loff_t *);
+extern ssize_t __kernel_write(struct file *, const void *, size_t, loff_t *);
extern struct file * open_exec(const char *);
/* fs/dcache.c -- generic fs support functions */
@@ -3169,7 +3194,7 @@ static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags)
return -EOPNOTSUPP;
if (flags & RWF_NOWAIT) {
- if (!(ki->ki_filp->f_mode & FMODE_AIO_NOWAIT))
+ if (!(ki->ki_filp->f_mode & FMODE_NOWAIT))
return -EOPNOTSUPP;
ki->ki_flags |= IOCB_NOWAIT;
}
@@ -3294,7 +3319,7 @@ static inline int check_sticky(struct inode *dir, struct inode *inode)
static inline void inode_has_no_xattr(struct inode *inode)
{
- if (!is_sxid(inode->i_mode) && (inode->i_sb->s_flags & MS_NOSEC))
+ if (!is_sxid(inode->i_mode) && (inode->i_sb->s_flags & SB_NOSEC))
inode->i_flags |= S_NOSEC;
}
diff --git a/include/linux/gfp.h b/include/linux/gfp.h
index bcfb9f7c46f5..f780718b7391 100644
--- a/include/linux/gfp.h
+++ b/include/linux/gfp.h
@@ -288,8 +288,6 @@ struct vm_area_struct;
#define GFP_NOWAIT (__GFP_KSWAPD_RECLAIM)
#define GFP_NOIO (__GFP_RECLAIM)
#define GFP_NOFS (__GFP_RECLAIM | __GFP_IO)
-#define GFP_TEMPORARY (__GFP_RECLAIM | __GFP_IO | __GFP_FS | \
- __GFP_RECLAIMABLE)
#define GFP_USER (__GFP_RECLAIM | __GFP_IO | __GFP_FS | __GFP_HARDWALL)
#define GFP_DMA __GFP_DMA
#define GFP_DMA32 __GFP_DMA32
diff --git a/include/linux/irqchip/mips-gic.h b/include/linux/irqchip/mips-gic.h
deleted file mode 100644
index 2b0e56619e53..000000000000
--- a/include/linux/irqchip/mips-gic.h
+++ /dev/null
@@ -1,297 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright (C) 2000, 07 MIPS Technologies, Inc.
- */
-#ifndef __LINUX_IRQCHIP_MIPS_GIC_H
-#define __LINUX_IRQCHIP_MIPS_GIC_H
-
-#include <linux/clocksource.h>
-#include <linux/ioport.h>
-
-#define GIC_MAX_INTRS 256
-
-/* Constants */
-#define GIC_POL_POS 1
-#define GIC_POL_NEG 0
-#define GIC_TRIG_EDGE 1
-#define GIC_TRIG_LEVEL 0
-#define GIC_TRIG_DUAL_ENABLE 1
-#define GIC_TRIG_DUAL_DISABLE 0
-
-#define MSK(n) ((1 << (n)) - 1)
-
-/* Accessors */
-#define GIC_REG(segment, offset) (segment##_##SECTION_OFS + offset##_##OFS)
-
-/* GIC Address Space */
-#define SHARED_SECTION_OFS 0x0000
-#define SHARED_SECTION_SIZE 0x8000
-#define VPE_LOCAL_SECTION_OFS 0x8000
-#define VPE_LOCAL_SECTION_SIZE 0x4000
-#define VPE_OTHER_SECTION_OFS 0xc000
-#define VPE_OTHER_SECTION_SIZE 0x4000
-#define USM_VISIBLE_SECTION_OFS 0x10000
-#define USM_VISIBLE_SECTION_SIZE 0x10000
-
-/* Register Map for Shared Section */
-
-#define GIC_SH_CONFIG_OFS 0x0000
-
-/* Shared Global Counter */
-#define GIC_SH_COUNTER_31_00_OFS 0x0010
-/* 64-bit counter register for CM3 */
-#define GIC_SH_COUNTER_OFS GIC_SH_COUNTER_31_00_OFS
-#define GIC_SH_COUNTER_63_32_OFS 0x0014
-#define GIC_SH_REVISIONID_OFS 0x0020
-
-/* Convert an interrupt number to a byte offset/bit for multi-word registers */
-#define GIC_INTR_OFS(intr) ({ \
- unsigned bits = mips_cm_is64 ? 64 : 32; \
- unsigned reg_idx = (intr) / bits; \
- unsigned reg_width = bits / 8; \
- \
- reg_idx * reg_width; \
-})
-#define GIC_INTR_BIT(intr) ((intr) % (mips_cm_is64 ? 64 : 32))
-
-/* Polarity : Reset Value is always 0 */
-#define GIC_SH_SET_POLARITY_OFS 0x0100
-
-/* Triggering : Reset Value is always 0 */
-#define GIC_SH_SET_TRIGGER_OFS 0x0180
-
-/* Dual edge triggering : Reset Value is always 0 */
-#define GIC_SH_SET_DUAL_OFS 0x0200
-
-/* Set/Clear corresponding bit in Edge Detect Register */
-#define GIC_SH_WEDGE_OFS 0x0280
-
-/* Mask manipulation */
-#define GIC_SH_RMASK_OFS 0x0300
-#define GIC_SH_SMASK_OFS 0x0380
-
-/* Global Interrupt Mask Register (RO) - Bit Set == Interrupt enabled */
-#define GIC_SH_MASK_OFS 0x0400
-
-/* Pending Global Interrupts (RO) */
-#define GIC_SH_PEND_OFS 0x0480
-
-/* Maps Interrupt X to a Pin */
-#define GIC_SH_INTR_MAP_TO_PIN_BASE_OFS 0x0500
-#define GIC_SH_MAP_TO_PIN(intr) (4 * (intr))
-
-/* Maps Interrupt X to a VPE */
-#define GIC_SH_INTR_MAP_TO_VPE_BASE_OFS 0x2000
-#define GIC_SH_MAP_TO_VPE_REG_OFF(intr, vpe) \
- ((32 * (intr)) + (((vpe) / 32) * 4))
-#define GIC_SH_MAP_TO_VPE_REG_BIT(vpe) (1 << ((vpe) % 32))
-
-/* Register Map for Local Section */
-#define GIC_VPE_CTL_OFS 0x0000
-#define GIC_VPE_PEND_OFS 0x0004
-#define GIC_VPE_MASK_OFS 0x0008
-#define GIC_VPE_RMASK_OFS 0x000c
-#define GIC_VPE_SMASK_OFS 0x0010
-#define GIC_VPE_WD_MAP_OFS 0x0040
-#define GIC_VPE_COMPARE_MAP_OFS 0x0044
-#define GIC_VPE_TIMER_MAP_OFS 0x0048
-#define GIC_VPE_FDC_MAP_OFS 0x004c
-#define GIC_VPE_PERFCTR_MAP_OFS 0x0050
-#define GIC_VPE_SWINT0_MAP_OFS 0x0054
-#define GIC_VPE_SWINT1_MAP_OFS 0x0058
-#define GIC_VPE_OTHER_ADDR_OFS 0x0080
-#define GIC_VP_IDENT_OFS 0x0088
-#define GIC_VPE_WD_CONFIG0_OFS 0x0090
-#define GIC_VPE_WD_COUNT0_OFS 0x0094
-#define GIC_VPE_WD_INITIAL0_OFS 0x0098
-#define GIC_VPE_COMPARE_LO_OFS 0x00a0
-/* 64-bit Compare register on CM3 */
-#define GIC_VPE_COMPARE_OFS GIC_VPE_COMPARE_LO_OFS
-#define GIC_VPE_COMPARE_HI_OFS 0x00a4
-
-#define GIC_VPE_EIC_SHADOW_SET_BASE_OFS 0x0100
-#define GIC_VPE_EIC_SS(intr) (4 * (intr))
-
-#define GIC_VPE_EIC_VEC_BASE_OFS 0x0800
-#define GIC_VPE_EIC_VEC(intr) (4 * (intr))
-
-#define GIC_VPE_TENABLE_NMI_OFS 0x1000
-#define GIC_VPE_TENABLE_YQ_OFS 0x1004
-#define GIC_VPE_TENABLE_INT_31_0_OFS 0x1080
-#define GIC_VPE_TENABLE_INT_63_32_OFS 0x1084
-
-/* User Mode Visible Section Register Map */
-#define GIC_UMV_SH_COUNTER_31_00_OFS 0x0000
-#define GIC_UMV_SH_COUNTER_63_32_OFS 0x0004
-
-/* Masks */
-#define GIC_SH_CONFIG_COUNTSTOP_SHF 28
-#define GIC_SH_CONFIG_COUNTSTOP_MSK (MSK(1) << GIC_SH_CONFIG_COUNTSTOP_SHF)
-
-#define GIC_SH_CONFIG_COUNTBITS_SHF 24
-#define GIC_SH_CONFIG_COUNTBITS_MSK (MSK(4) << GIC_SH_CONFIG_COUNTBITS_SHF)
-
-#define GIC_SH_CONFIG_NUMINTRS_SHF 16
-#define GIC_SH_CONFIG_NUMINTRS_MSK (MSK(8) << GIC_SH_CONFIG_NUMINTRS_SHF)
-
-#define GIC_SH_CONFIG_NUMVPES_SHF 0
-#define GIC_SH_CONFIG_NUMVPES_MSK (MSK(8) << GIC_SH_CONFIG_NUMVPES_SHF)
-
-#define GIC_SH_WEDGE_SET(intr) ((intr) | (0x1 << 31))
-#define GIC_SH_WEDGE_CLR(intr) ((intr) & ~(0x1 << 31))
-
-#define GIC_MAP_TO_PIN_SHF 31
-#define GIC_MAP_TO_PIN_MSK (MSK(1) << GIC_MAP_TO_PIN_SHF)
-#define GIC_MAP_TO_NMI_SHF 30
-#define GIC_MAP_TO_NMI_MSK (MSK(1) << GIC_MAP_TO_NMI_SHF)
-#define GIC_MAP_TO_YQ_SHF 29
-#define GIC_MAP_TO_YQ_MSK (MSK(1) << GIC_MAP_TO_YQ_SHF)
-#define GIC_MAP_SHF 0
-#define GIC_MAP_MSK (MSK(6) << GIC_MAP_SHF)
-
-/* GIC_VPE_CTL Masks */
-#define GIC_VPE_CTL_FDC_RTBL_SHF 4
-#define GIC_VPE_CTL_FDC_RTBL_MSK (MSK(1) << GIC_VPE_CTL_FDC_RTBL_SHF)
-#define GIC_VPE_CTL_SWINT_RTBL_SHF 3
-#define GIC_VPE_CTL_SWINT_RTBL_MSK (MSK(1) << GIC_VPE_CTL_SWINT_RTBL_SHF)
-#define GIC_VPE_CTL_PERFCNT_RTBL_SHF 2
-#define GIC_VPE_CTL_PERFCNT_RTBL_MSK (MSK(1) << GIC_VPE_CTL_PERFCNT_RTBL_SHF)
-#define GIC_VPE_CTL_TIMER_RTBL_SHF 1
-#define GIC_VPE_CTL_TIMER_RTBL_MSK (MSK(1) << GIC_VPE_CTL_TIMER_RTBL_SHF)
-#define GIC_VPE_CTL_EIC_MODE_SHF 0
-#define GIC_VPE_CTL_EIC_MODE_MSK (MSK(1) << GIC_VPE_CTL_EIC_MODE_SHF)
-
-/* GIC_VPE_PEND Masks */
-#define GIC_VPE_PEND_WD_SHF 0
-#define GIC_VPE_PEND_WD_MSK (MSK(1) << GIC_VPE_PEND_WD_SHF)
-#define GIC_VPE_PEND_CMP_SHF 1
-#define GIC_VPE_PEND_CMP_MSK (MSK(1) << GIC_VPE_PEND_CMP_SHF)
-#define GIC_VPE_PEND_TIMER_SHF 2
-#define GIC_VPE_PEND_TIMER_MSK (MSK(1) << GIC_VPE_PEND_TIMER_SHF)
-#define GIC_VPE_PEND_PERFCOUNT_SHF 3
-#define GIC_VPE_PEND_PERFCOUNT_MSK (MSK(1) << GIC_VPE_PEND_PERFCOUNT_SHF)
-#define GIC_VPE_PEND_SWINT0_SHF 4
-#define GIC_VPE_PEND_SWINT0_MSK (MSK(1) << GIC_VPE_PEND_SWINT0_SHF)
-#define GIC_VPE_PEND_SWINT1_SHF 5
-#define GIC_VPE_PEND_SWINT1_MSK (MSK(1) << GIC_VPE_PEND_SWINT1_SHF)
-#define GIC_VPE_PEND_FDC_SHF 6
-#define GIC_VPE_PEND_FDC_MSK (MSK(1) << GIC_VPE_PEND_FDC_SHF)
-
-/* GIC_VPE_RMASK Masks */
-#define GIC_VPE_RMASK_WD_SHF 0
-#define GIC_VPE_RMASK_WD_MSK (MSK(1) << GIC_VPE_RMASK_WD_SHF)
-#define GIC_VPE_RMASK_CMP_SHF 1
-#define GIC_VPE_RMASK_CMP_MSK (MSK(1) << GIC_VPE_RMASK_CMP_SHF)
-#define GIC_VPE_RMASK_TIMER_SHF 2
-#define GIC_VPE_RMASK_TIMER_MSK (MSK(1) << GIC_VPE_RMASK_TIMER_SHF)
-#define GIC_VPE_RMASK_PERFCNT_SHF 3
-#define GIC_VPE_RMASK_PERFCNT_MSK (MSK(1) << GIC_VPE_RMASK_PERFCNT_SHF)
-#define GIC_VPE_RMASK_SWINT0_SHF 4
-#define GIC_VPE_RMASK_SWINT0_MSK (MSK(1) << GIC_VPE_RMASK_SWINT0_SHF)
-#define GIC_VPE_RMASK_SWINT1_SHF 5
-#define GIC_VPE_RMASK_SWINT1_MSK (MSK(1) << GIC_VPE_RMASK_SWINT1_SHF)
-#define GIC_VPE_RMASK_FDC_SHF 6
-#define GIC_VPE_RMASK_FDC_MSK (MSK(1) << GIC_VPE_RMASK_FDC_SHF)
-
-/* GIC_VPE_SMASK Masks */
-#define GIC_VPE_SMASK_WD_SHF 0
-#define GIC_VPE_SMASK_WD_MSK (MSK(1) << GIC_VPE_SMASK_WD_SHF)
-#define GIC_VPE_SMASK_CMP_SHF 1
-#define GIC_VPE_SMASK_CMP_MSK (MSK(1) << GIC_VPE_SMASK_CMP_SHF)
-#define GIC_VPE_SMASK_TIMER_SHF 2
-#define GIC_VPE_SMASK_TIMER_MSK (MSK(1) << GIC_VPE_SMASK_TIMER_SHF)
-#define GIC_VPE_SMASK_PERFCNT_SHF 3
-#define GIC_VPE_SMASK_PERFCNT_MSK (MSK(1) << GIC_VPE_SMASK_PERFCNT_SHF)
-#define GIC_VPE_SMASK_SWINT0_SHF 4
-#define GIC_VPE_SMASK_SWINT0_MSK (MSK(1) << GIC_VPE_SMASK_SWINT0_SHF)
-#define GIC_VPE_SMASK_SWINT1_SHF 5
-#define GIC_VPE_SMASK_SWINT1_MSK (MSK(1) << GIC_VPE_SMASK_SWINT1_SHF)
-#define GIC_VPE_SMASK_FDC_SHF 6
-#define GIC_VPE_SMASK_FDC_MSK (MSK(1) << GIC_VPE_SMASK_FDC_SHF)
-
-/* GIC_VP_IDENT fields */
-#define GIC_VP_IDENT_VCNUM_SHF 0
-#define GIC_VP_IDENT_VCNUM_MSK (MSK(6) << GIC_VP_IDENT_VCNUM_SHF)
-
-/* GIC nomenclature for Core Interrupt Pins. */
-#define GIC_CPU_INT0 0 /* Core Interrupt 2 */
-#define GIC_CPU_INT1 1 /* . */
-#define GIC_CPU_INT2 2 /* . */
-#define GIC_CPU_INT3 3 /* . */
-#define GIC_CPU_INT4 4 /* . */
-#define GIC_CPU_INT5 5 /* Core Interrupt 7 */
-
-/* Add 2 to convert GIC CPU pin to core interrupt */
-#define GIC_CPU_PIN_OFFSET 2
-
-/* Add 2 to convert non-EIC hardware interrupt to EIC vector number. */
-#define GIC_CPU_TO_VEC_OFFSET 2
-
-/* Mapped interrupt to pin X, then GIC will generate the vector (X+1). */
-#define GIC_PIN_TO_VEC_OFFSET 1
-
-/* Local GIC interrupts. */
-#define GIC_LOCAL_INT_WD 0 /* GIC watchdog */
-#define GIC_LOCAL_INT_COMPARE 1 /* GIC count and compare timer */
-#define GIC_LOCAL_INT_TIMER 2 /* CPU timer interrupt */
-#define GIC_LOCAL_INT_PERFCTR 3 /* CPU performance counter */
-#define GIC_LOCAL_INT_SWINT0 4 /* CPU software interrupt 0 */
-#define GIC_LOCAL_INT_SWINT1 5 /* CPU software interrupt 1 */
-#define GIC_LOCAL_INT_FDC 6 /* CPU fast debug channel */
-#define GIC_NUM_LOCAL_INTRS 7
-
-/* Convert between local/shared IRQ number and GIC HW IRQ number. */
-#define GIC_LOCAL_HWIRQ_BASE 0
-#define GIC_LOCAL_TO_HWIRQ(x) (GIC_LOCAL_HWIRQ_BASE + (x))
-#define GIC_HWIRQ_TO_LOCAL(x) ((x) - GIC_LOCAL_HWIRQ_BASE)
-#define GIC_SHARED_HWIRQ_BASE GIC_NUM_LOCAL_INTRS
-#define GIC_SHARED_TO_HWIRQ(x) (GIC_SHARED_HWIRQ_BASE + (x))
-#define GIC_HWIRQ_TO_SHARED(x) ((x) - GIC_SHARED_HWIRQ_BASE)
-
-#ifdef CONFIG_MIPS_GIC
-
-extern unsigned int gic_present;
-
-extern void gic_init(unsigned long gic_base_addr,
- unsigned long gic_addrspace_size, unsigned int cpu_vec,
- unsigned int irqbase);
-extern u64 gic_read_count(void);
-extern unsigned int gic_get_count_width(void);
-extern u64 gic_read_compare(void);
-extern void gic_write_compare(u64 cnt);
-extern void gic_write_cpu_compare(u64 cnt, int cpu);
-extern void gic_start_count(void);
-extern void gic_stop_count(void);
-extern int gic_get_c0_compare_int(void);
-extern int gic_get_c0_perfcount_int(void);
-extern int gic_get_c0_fdc_int(void);
-extern int gic_get_usm_range(struct resource *gic_usm_res);
-
-#else /* CONFIG_MIPS_GIC */
-
-#define gic_present 0
-
-static inline int gic_get_usm_range(struct resource *gic_usm_res)
-{
- /* Shouldn't be called. */
- return -1;
-}
-
-#endif /* CONFIG_MIPS_GIC */
-
-/**
- * gic_read_local_vp_id() - read the local VPs VCNUM
- *
- * Read the VCNUM of the local VP from the GIC_VP_IDENT register and
- * return it to the caller. This ID should be used to refer to the VP
- * via the GICs VP-other region, or when calculating an offset to a
- * bit representing the VP in interrupt masks.
- *
- * Return: The VCNUM value for the local VP.
- */
-extern unsigned gic_read_local_vp_id(void);
-
-#endif /* __LINUX_IRQCHIP_MIPS_GIC_H */
diff --git a/include/linux/module.h b/include/linux/module.h
index e7bdd549e527..fe5aa3736707 100644
--- a/include/linux/module.h
+++ b/include/linux/module.h
@@ -209,7 +209,7 @@ extern void cleanup_module(void);
#ifdef MODULE
/* Creates an alias so file2alias.c can find device table. */
#define MODULE_DEVICE_TABLE(type, name) \
-extern const typeof(name) __mod_##type##__##name##_device_table \
+extern typeof(name) __mod_##type##__##name##_device_table \
__attribute__ ((unused, alias(__stringify(name))))
#else /* !MODULE */
#define MODULE_DEVICE_TABLE(type, name)
diff --git a/include/linux/msg.h b/include/linux/msg.h
index a001305f5a79..81263fe3f9dc 100644
--- a/include/linux/msg.h
+++ b/include/linux/msg.h
@@ -2,6 +2,7 @@
#define _LINUX_MSG_H
#include <linux/list.h>
+#include <linux/time64.h>
#include <uapi/linux/msg.h>
/* one msg_msg structure for each message */
@@ -17,9 +18,9 @@ struct msg_msg {
/* one msq_queue structure for each present queue on the system */
struct msg_queue {
struct kern_ipc_perm q_perm;
- time_t q_stime; /* last msgsnd time */
- time_t q_rtime; /* last msgrcv time */
- time_t q_ctime; /* last change time */
+ time64_t q_stime; /* last msgsnd time */
+ time64_t q_rtime; /* last msgrcv time */
+ time64_t q_ctime; /* last change time */
unsigned long q_cbytes; /* current number of bytes on queue */
unsigned long q_qnum; /* number of messages in queue */
unsigned long q_qbytes; /* max number of bytes on queue */
@@ -31,12 +32,4 @@ struct msg_queue {
struct list_head q_senders;
} __randomize_layout;
-/* Helper routines for sys_msgsnd and sys_msgrcv */
-extern long do_msgsnd(int msqid, long mtype, void __user *mtext,
- size_t msgsz, int msgflg);
-extern long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp,
- int msgflg,
- long (*msg_fill)(void __user *, struct msg_msg *,
- size_t));
-
#endif /* _LINUX_MSG_H */
diff --git a/include/linux/nvme.h b/include/linux/nvme.h
index 5144f9103723..87723c86f136 100644
--- a/include/linux/nvme.h
+++ b/include/linux/nvme.h
@@ -226,7 +226,9 @@ struct nvme_id_ctrl {
__le16 mntmt;
__le16 mxtmt;
__le32 sanicap;
- __u8 rsvd332[180];
+ __le32 hmminds;
+ __le16 hmmaxd;
+ __u8 rsvd338[174];
__u8 sqes;
__u8 cqes;
__le16 maxcmd;
diff --git a/include/linux/rtc.h b/include/linux/rtc.h
index 0a0f0d14a5fb..e6d0f9c1cafd 100644
--- a/include/linux/rtc.h
+++ b/include/linux/rtc.h
@@ -72,8 +72,6 @@ extern struct class *rtc_class;
* issued through ioctl() ...
*/
struct rtc_class_ops {
- int (*open)(struct device *);
- void (*release)(struct device *);
int (*ioctl)(struct device *, unsigned int, unsigned long);
int (*read_time)(struct device *, struct rtc_time *);
int (*set_time)(struct device *, struct rtc_time *);
diff --git a/include/linux/sem.h b/include/linux/sem.h
index de2deb8676bd..0083128318f6 100644
--- a/include/linux/sem.h
+++ b/include/linux/sem.h
@@ -4,6 +4,7 @@
#include <linux/atomic.h>
#include <linux/rcupdate.h>
#include <linux/cache.h>
+#include <linux/time64.h>
#include <uapi/linux/sem.h>
struct task_struct;
@@ -30,7 +31,7 @@ struct sem {
/* One sem_array data structure for each set of semaphores in the system. */
struct sem_array {
struct kern_ipc_perm sem_perm; /* permissions .. see ipc.h */
- time_t sem_ctime; /* create/last semctl() time */
+ time64_t sem_ctime; /* create/last semctl() time */
struct list_head pending_alter; /* pending operations */
/* that alter the array */
struct list_head pending_const; /* pending complex operations */
diff --git a/include/linux/shm.h b/include/linux/shm.h
index 21a5e6c43385..74a4b3b64352 100644
--- a/include/linux/shm.h
+++ b/include/linux/shm.h
@@ -12,9 +12,9 @@ struct shmid_kernel /* private to the kernel */
struct file *shm_file;
unsigned long shm_nattch;
unsigned long shm_segsz;
- time_t shm_atim;
- time_t shm_dtim;
- time_t shm_ctim;
+ time64_t shm_atim;
+ time64_t shm_dtim;
+ time64_t shm_ctim;
pid_t shm_cprid;
pid_t shm_lprid;
struct user_struct *mlock_user;
diff --git a/include/linux/string.h b/include/linux/string.h
index e1eeb0a8a969..54d21783e18d 100644
--- a/include/linux/string.h
+++ b/include/linux/string.h
@@ -434,20 +434,9 @@ __FORTIFY_INLINE char *strcpy(char *p, const char *q)
* @count: The number of bytes to copy
* @pad: Character to use for padding if space is left in destination.
*/
-__FORTIFY_INLINE void memcpy_and_pad(void *dest, size_t dest_len,
- const void *src, size_t count, int pad)
+static inline void memcpy_and_pad(void *dest, size_t dest_len,
+ const void *src, size_t count, int pad)
{
- size_t dest_size = __builtin_object_size(dest, 0);
- size_t src_size = __builtin_object_size(src, 0);
-
- if (__builtin_constant_p(dest_len) && __builtin_constant_p(count)) {
- if (dest_size < dest_len && dest_size < count)
- __write_overflow();
- else if (src_size < dest_len && src_size < count)
- __read_overflow3();
- }
- if (dest_size < dest_len)
- fortify_panic(__func__);
if (dest_len > count) {
memcpy(dest, src, count);
memset(dest + count, pad, dest_len - count);
diff --git a/include/linux/swait.h b/include/linux/swait.h
index 4a4e180d0a35..73e97a08d3d0 100644
--- a/include/linux/swait.h
+++ b/include/linux/swait.h
@@ -79,9 +79,63 @@ extern void __init_swait_queue_head(struct swait_queue_head *q, const char *name
DECLARE_SWAIT_QUEUE_HEAD(name)
#endif
-static inline int swait_active(struct swait_queue_head *q)
+/**
+ * swait_active -- locklessly test for waiters on the queue
+ * @wq: the waitqueue to test for waiters
+ *
+ * returns true if the wait list is not empty
+ *
+ * NOTE: this function is lockless and requires care, incorrect usage _will_
+ * lead to sporadic and non-obvious failure.
+ *
+ * NOTE2: this function has the same above implications as regular waitqueues.
+ *
+ * Use either while holding swait_queue_head::lock or when used for wakeups
+ * with an extra smp_mb() like:
+ *
+ * CPU0 - waker CPU1 - waiter
+ *
+ * for (;;) {
+ * @cond = true; prepare_to_swait(&wq_head, &wait, state);
+ * smp_mb(); // smp_mb() from set_current_state()
+ * if (swait_active(wq_head)) if (@cond)
+ * wake_up(wq_head); break;
+ * schedule();
+ * }
+ * finish_swait(&wq_head, &wait);
+ *
+ * Because without the explicit smp_mb() it's possible for the
+ * swait_active() load to get hoisted over the @cond store such that we'll
+ * observe an empty wait list while the waiter might not observe @cond.
+ * This, in turn, can trigger missing wakeups.
+ *
+ * Also note that this 'optimization' trades a spin_lock() for an smp_mb(),
+ * which (when the lock is uncontended) are of roughly equal cost.
+ */
+static inline int swait_active(struct swait_queue_head *wq)
+{
+ return !list_empty(&wq->task_list);
+}
+
+/**
+ * swq_has_sleeper - check if there are any waiting processes
+ * @wq: the waitqueue to test for waiters
+ *
+ * Returns true if @wq has waiting processes
+ *
+ * Please refer to the comment for swait_active.
+ */
+static inline bool swq_has_sleeper(struct swait_queue_head *wq)
{
- return !list_empty(&q->task_list);
+ /*
+ * We need to be sure we are in sync with the list_add()
+ * modifications to the wait queue (task_list).
+ *
+ * This memory barrier should be paired with one on the
+ * waiting side.
+ */
+ smp_mb();
+ return swait_active(wq);
}
extern void swake_up(struct swait_queue_head *q);
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index 88951b795ee3..95606a2d556f 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -200,6 +200,8 @@ static inline int is_syscall_trace_event(struct trace_event_call *tp_event)
#define SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, _##name, __VA_ARGS__)
#define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
+#define SYSCALL_DEFINE_MAXARGS 6
+
#define SYSCALL_DEFINEx(x, sname, ...) \
SYSCALL_METADATA(sname, x, __VA_ARGS__) \
__SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
diff --git a/include/linux/time.h b/include/linux/time.h
index 3877136bbdf8..9bc1f945777c 100644
--- a/include/linux/time.h
+++ b/include/linux/time.h
@@ -178,7 +178,7 @@ extern int do_setitimer(int which, struct itimerval *value,
struct itimerval *ovalue);
extern int do_getitimer(int which, struct itimerval *value);
-extern long do_utimes(int dfd, const char __user *filename, struct timespec *times, int flags);
+extern long do_utimes(int dfd, const char __user *filename, struct timespec64 *times, int flags);
/*
* Similar to the struct tm in userspace <time.h>, but it needs to be here so
diff --git a/include/linux/wait.h b/include/linux/wait.h
index dc19880c02f5..87c4641023fb 100644
--- a/include/linux/wait.h
+++ b/include/linux/wait.h
@@ -18,6 +18,7 @@ int default_wake_function(struct wait_queue_entry *wq_entry, unsigned mode, int
/* wait_queue_entry::flags */
#define WQ_FLAG_EXCLUSIVE 0x01
#define WQ_FLAG_WOKEN 0x02
+#define WQ_FLAG_BOOKMARK 0x04
/*
* A single wait-queue entry structure:
@@ -184,6 +185,8 @@ __remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry *wq
void __wake_up(struct wait_queue_head *wq_head, unsigned int mode, int nr, void *key);
void __wake_up_locked_key(struct wait_queue_head *wq_head, unsigned int mode, void *key);
+void __wake_up_locked_key_bookmark(struct wait_queue_head *wq_head,
+ unsigned int mode, void *key, wait_queue_entry_t *bookmark);
void __wake_up_sync_key(struct wait_queue_head *wq_head, unsigned int mode, int nr, void *key);
void __wake_up_locked(struct wait_queue_head *wq_head, unsigned int mode, int nr);
void __wake_up_sync(struct wait_queue_head *wq_head, unsigned int mode, int nr);
diff --git a/include/linux/xxhash.h b/include/linux/xxhash.h
new file mode 100644
index 000000000000..9e1f42cb57e9
--- /dev/null
+++ b/include/linux/xxhash.h
@@ -0,0 +1,236 @@
+/*
+ * xxHash - Extremely Fast Hash algorithm
+ * Copyright (C) 2012-2016, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at:
+ * - xxHash homepage: http://cyan4973.github.io/xxHash/
+ * - xxHash source repository: https://github.com/Cyan4973/xxHash
+ */
+
+/*
+ * Notice extracted from xxHash homepage:
+ *
+ * xxHash is an extremely fast Hash algorithm, running at RAM speed limits.
+ * It also successfully passes all tests from the SMHasher suite.
+ *
+ * Comparison (single thread, Windows Seven 32 bits, using SMHasher on a Core 2
+ * Duo @3GHz)
+ *
+ * Name Speed Q.Score Author
+ * xxHash 5.4 GB/s 10
+ * CrapWow 3.2 GB/s 2 Andrew
+ * MumurHash 3a 2.7 GB/s 10 Austin Appleby
+ * SpookyHash 2.0 GB/s 10 Bob Jenkins
+ * SBox 1.4 GB/s 9 Bret Mulvey
+ * Lookup3 1.2 GB/s 9 Bob Jenkins
+ * SuperFastHash 1.2 GB/s 1 Paul Hsieh
+ * CityHash64 1.05 GB/s 10 Pike & Alakuijala
+ * FNV 0.55 GB/s 5 Fowler, Noll, Vo
+ * CRC32 0.43 GB/s 9
+ * MD5-32 0.33 GB/s 10 Ronald L. Rivest
+ * SHA1-32 0.28 GB/s 10
+ *
+ * Q.Score is a measure of quality of the hash function.
+ * It depends on successfully passing SMHasher test set.
+ * 10 is a perfect score.
+ *
+ * A 64-bits version, named xxh64 offers much better speed,
+ * but for 64-bits applications only.
+ * Name Speed on 64 bits Speed on 32 bits
+ * xxh64 13.8 GB/s 1.9 GB/s
+ * xxh32 6.8 GB/s 6.0 GB/s
+ */
+
+#ifndef XXHASH_H
+#define XXHASH_H
+
+#include <linux/types.h>
+
+/*-****************************
+ * Simple Hash Functions
+ *****************************/
+
+/**
+ * xxh32() - calculate the 32-bit hash of the input with a given seed.
+ *
+ * @input: The data to hash.
+ * @length: The length of the data to hash.
+ * @seed: The seed can be used to alter the result predictably.
+ *
+ * Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s
+ *
+ * Return: The 32-bit hash of the data.
+ */
+uint32_t xxh32(const void *input, size_t length, uint32_t seed);
+
+/**
+ * xxh64() - calculate the 64-bit hash of the input with a given seed.
+ *
+ * @input: The data to hash.
+ * @length: The length of the data to hash.
+ * @seed: The seed can be used to alter the result predictably.
+ *
+ * This function runs 2x faster on 64-bit systems, but slower on 32-bit systems.
+ *
+ * Return: The 64-bit hash of the data.
+ */
+uint64_t xxh64(const void *input, size_t length, uint64_t seed);
+
+/*-****************************
+ * Streaming Hash Functions
+ *****************************/
+
+/*
+ * These definitions are only meant to allow allocation of XXH state
+ * statically, on stack, or in a struct for example.
+ * Do not use members directly.
+ */
+
+/**
+ * struct xxh32_state - private xxh32 state, do not use members directly
+ */
+struct xxh32_state {
+ uint32_t total_len_32;
+ uint32_t large_len;
+ uint32_t v1;
+ uint32_t v2;
+ uint32_t v3;
+ uint32_t v4;
+ uint32_t mem32[4];
+ uint32_t memsize;
+};
+
+/**
+ * struct xxh32_state - private xxh64 state, do not use members directly
+ */
+struct xxh64_state {
+ uint64_t total_len;
+ uint64_t v1;
+ uint64_t v2;
+ uint64_t v3;
+ uint64_t v4;
+ uint64_t mem64[4];
+ uint32_t memsize;
+};
+
+/**
+ * xxh32_reset() - reset the xxh32 state to start a new hashing operation
+ *
+ * @state: The xxh32 state to reset.
+ * @seed: Initialize the hash state with this seed.
+ *
+ * Call this function on any xxh32_state to prepare for a new hashing operation.
+ */
+void xxh32_reset(struct xxh32_state *state, uint32_t seed);
+
+/**
+ * xxh32_update() - hash the data given and update the xxh32 state
+ *
+ * @state: The xxh32 state to update.
+ * @input: The data to hash.
+ * @length: The length of the data to hash.
+ *
+ * After calling xxh32_reset() call xxh32_update() as many times as necessary.
+ *
+ * Return: Zero on success, otherwise an error code.
+ */
+int xxh32_update(struct xxh32_state *state, const void *input, size_t length);
+
+/**
+ * xxh32_digest() - produce the current xxh32 hash
+ *
+ * @state: Produce the current xxh32 hash of this state.
+ *
+ * A hash value can be produced at any time. It is still possible to continue
+ * inserting input into the hash state after a call to xxh32_digest(), and
+ * generate new hashes later on, by calling xxh32_digest() again.
+ *
+ * Return: The xxh32 hash stored in the state.
+ */
+uint32_t xxh32_digest(const struct xxh32_state *state);
+
+/**
+ * xxh64_reset() - reset the xxh64 state to start a new hashing operation
+ *
+ * @state: The xxh64 state to reset.
+ * @seed: Initialize the hash state with this seed.
+ */
+void xxh64_reset(struct xxh64_state *state, uint64_t seed);
+
+/**
+ * xxh64_update() - hash the data given and update the xxh64 state
+ * @state: The xxh64 state to update.
+ * @input: The data to hash.
+ * @length: The length of the data to hash.
+ *
+ * After calling xxh64_reset() call xxh64_update() as many times as necessary.
+ *
+ * Return: Zero on success, otherwise an error code.
+ */
+int xxh64_update(struct xxh64_state *state, const void *input, size_t length);
+
+/**
+ * xxh64_digest() - produce the current xxh64 hash
+ *
+ * @state: Produce the current xxh64 hash of this state.
+ *
+ * A hash value can be produced at any time. It is still possible to continue
+ * inserting input into the hash state after a call to xxh64_digest(), and
+ * generate new hashes later on, by calling xxh64_digest() again.
+ *
+ * Return: The xxh64 hash stored in the state.
+ */
+uint64_t xxh64_digest(const struct xxh64_state *state);
+
+/*-**************************
+ * Utils
+ ***************************/
+
+/**
+ * xxh32_copy_state() - copy the source state into the destination state
+ *
+ * @src: The source xxh32 state.
+ * @dst: The destination xxh32 state.
+ */
+void xxh32_copy_state(struct xxh32_state *dst, const struct xxh32_state *src);
+
+/**
+ * xxh64_copy_state() - copy the source state into the destination state
+ *
+ * @src: The source xxh64 state.
+ * @dst: The destination xxh64 state.
+ */
+void xxh64_copy_state(struct xxh64_state *dst, const struct xxh64_state *src);
+
+#endif /* XXHASH_H */
diff --git a/include/linux/zstd.h b/include/linux/zstd.h
new file mode 100644
index 000000000000..249575e2485f
--- /dev/null
+++ b/include/linux/zstd.h
@@ -0,0 +1,1157 @@
+/*
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of https://github.com/facebook/zstd.
+ * An additional grant of patent rights can be found in the PATENTS file in the
+ * same directory.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ */
+
+#ifndef ZSTD_H
+#define ZSTD_H
+
+/* ====== Dependency ======*/
+#include <linux/types.h> /* size_t */
+
+
+/*-*****************************************************************************
+ * Introduction
+ *
+ * zstd, short for Zstandard, is a fast lossless compression algorithm,
+ * targeting real-time compression scenarios at zlib-level and better
+ * compression ratios. The zstd compression library provides in-memory
+ * compression and decompression functions. The library supports compression
+ * levels from 1 up to ZSTD_maxCLevel() which is 22. Levels >= 20, labeled
+ * ultra, should be used with caution, as they require more memory.
+ * Compression can be done in:
+ * - a single step, reusing a context (described as Explicit memory management)
+ * - unbounded multiple steps (described as Streaming compression)
+ * The compression ratio achievable on small data can be highly improved using
+ * compression with a dictionary in:
+ * - a single step (described as Simple dictionary API)
+ * - a single step, reusing a dictionary (described as Fast dictionary API)
+ ******************************************************************************/
+
+/*====== Helper functions ======*/
+
+/**
+ * enum ZSTD_ErrorCode - zstd error codes
+ *
+ * Functions that return size_t can be checked for errors using ZSTD_isError()
+ * and the ZSTD_ErrorCode can be extracted using ZSTD_getErrorCode().
+ */
+typedef enum {
+ ZSTD_error_no_error,
+ ZSTD_error_GENERIC,
+ ZSTD_error_prefix_unknown,
+ ZSTD_error_version_unsupported,
+ ZSTD_error_parameter_unknown,
+ ZSTD_error_frameParameter_unsupported,
+ ZSTD_error_frameParameter_unsupportedBy32bits,
+ ZSTD_error_frameParameter_windowTooLarge,
+ ZSTD_error_compressionParameter_unsupported,
+ ZSTD_error_init_missing,
+ ZSTD_error_memory_allocation,
+ ZSTD_error_stage_wrong,
+ ZSTD_error_dstSize_tooSmall,
+ ZSTD_error_srcSize_wrong,
+ ZSTD_error_corruption_detected,
+ ZSTD_error_checksum_wrong,
+ ZSTD_error_tableLog_tooLarge,
+ ZSTD_error_maxSymbolValue_tooLarge,
+ ZSTD_error_maxSymbolValue_tooSmall,
+ ZSTD_error_dictionary_corrupted,
+ ZSTD_error_dictionary_wrong,
+ ZSTD_error_dictionaryCreation_failed,
+ ZSTD_error_maxCode
+} ZSTD_ErrorCode;
+
+/**
+ * ZSTD_maxCLevel() - maximum compression level available
+ *
+ * Return: Maximum compression level available.
+ */
+int ZSTD_maxCLevel(void);
+/**
+ * ZSTD_compressBound() - maximum compressed size in worst case scenario
+ * @srcSize: The size of the data to compress.
+ *
+ * Return: The maximum compressed size in the worst case scenario.
+ */
+size_t ZSTD_compressBound(size_t srcSize);
+/**
+ * ZSTD_isError() - tells if a size_t function result is an error code
+ * @code: The function result to check for error.
+ *
+ * Return: Non-zero iff the code is an error.
+ */
+static __attribute__((unused)) unsigned int ZSTD_isError(size_t code)
+{
+ return code > (size_t)-ZSTD_error_maxCode;
+}
+/**
+ * ZSTD_getErrorCode() - translates an error function result to a ZSTD_ErrorCode
+ * @functionResult: The result of a function for which ZSTD_isError() is true.
+ *
+ * Return: The ZSTD_ErrorCode corresponding to the functionResult or 0
+ * if the functionResult isn't an error.
+ */
+static __attribute__((unused)) ZSTD_ErrorCode ZSTD_getErrorCode(
+ size_t functionResult)
+{
+ if (!ZSTD_isError(functionResult))
+ return (ZSTD_ErrorCode)0;
+ return (ZSTD_ErrorCode)(0 - functionResult);
+}
+
+/**
+ * enum ZSTD_strategy - zstd compression search strategy
+ *
+ * From faster to stronger.
+ */
+typedef enum {
+ ZSTD_fast,
+ ZSTD_dfast,
+ ZSTD_greedy,
+ ZSTD_lazy,
+ ZSTD_lazy2,
+ ZSTD_btlazy2,
+ ZSTD_btopt,
+ ZSTD_btopt2
+} ZSTD_strategy;
+
+/**
+ * struct ZSTD_compressionParameters - zstd compression parameters
+ * @windowLog: Log of the largest match distance. Larger means more
+ * compression, and more memory needed during decompression.
+ * @chainLog: Fully searched segment. Larger means more compression, slower,
+ * and more memory (useless for fast).
+ * @hashLog: Dispatch table. Larger means more compression,
+ * slower, and more memory.
+ * @searchLog: Number of searches. Larger means more compression and slower.
+ * @searchLength: Match length searched. Larger means faster decompression,
+ * sometimes less compression.
+ * @targetLength: Acceptable match size for optimal parser (only). Larger means
+ * more compression, and slower.
+ * @strategy: The zstd compression strategy.
+ */
+typedef struct {
+ unsigned int windowLog;
+ unsigned int chainLog;
+ unsigned int hashLog;
+ unsigned int searchLog;
+ unsigned int searchLength;
+ unsigned int targetLength;
+ ZSTD_strategy strategy;
+} ZSTD_compressionParameters;
+
+/**
+ * struct ZSTD_frameParameters - zstd frame parameters
+ * @contentSizeFlag: Controls whether content size will be present in the frame
+ * header (when known).
+ * @checksumFlag: Controls whether a 32-bit checksum is generated at the end
+ * of the frame for error detection.
+ * @noDictIDFlag: Controls whether dictID will be saved into the frame header
+ * when using dictionary compression.
+ *
+ * The default value is all fields set to 0.
+ */
+typedef struct {
+ unsigned int contentSizeFlag;
+ unsigned int checksumFlag;
+ unsigned int noDictIDFlag;
+} ZSTD_frameParameters;
+
+/**
+ * struct ZSTD_parameters - zstd parameters
+ * @cParams: The compression parameters.
+ * @fParams: The frame parameters.
+ */
+typedef struct {
+ ZSTD_compressionParameters cParams;
+ ZSTD_frameParameters fParams;
+} ZSTD_parameters;
+
+/**
+ * ZSTD_getCParams() - returns ZSTD_compressionParameters for selected level
+ * @compressionLevel: The compression level from 1 to ZSTD_maxCLevel().
+ * @estimatedSrcSize: The estimated source size to compress or 0 if unknown.
+ * @dictSize: The dictionary size or 0 if a dictionary isn't being used.
+ *
+ * Return: The selected ZSTD_compressionParameters.
+ */
+ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel,
+ unsigned long long estimatedSrcSize, size_t dictSize);
+
+/**
+ * ZSTD_getParams() - returns ZSTD_parameters for selected level
+ * @compressionLevel: The compression level from 1 to ZSTD_maxCLevel().
+ * @estimatedSrcSize: The estimated source size to compress or 0 if unknown.
+ * @dictSize: The dictionary size or 0 if a dictionary isn't being used.
+ *
+ * The same as ZSTD_getCParams() except also selects the default frame
+ * parameters (all zero).
+ *
+ * Return: The selected ZSTD_parameters.
+ */
+ZSTD_parameters ZSTD_getParams(int compressionLevel,
+ unsigned long long estimatedSrcSize, size_t dictSize);
+
+/*-*************************************
+ * Explicit memory management
+ **************************************/
+
+/**
+ * ZSTD_CCtxWorkspaceBound() - amount of memory needed to initialize a ZSTD_CCtx
+ * @cParams: The compression parameters to be used for compression.
+ *
+ * If multiple compression parameters might be used, the caller must call
+ * ZSTD_CCtxWorkspaceBound() for each set of parameters and use the maximum
+ * size.
+ *
+ * Return: A lower bound on the size of the workspace that is passed to
+ * ZSTD_initCCtx().
+ */
+size_t ZSTD_CCtxWorkspaceBound(ZSTD_compressionParameters cParams);
+
+/**
+ * struct ZSTD_CCtx - the zstd compression context
+ *
+ * When compressing many times it is recommended to allocate a context just once
+ * and reuse it for each successive compression operation.
+ */
+typedef struct ZSTD_CCtx_s ZSTD_CCtx;
+/**
+ * ZSTD_initCCtx() - initialize a zstd compression context
+ * @workspace: The workspace to emplace the context into. It must outlive
+ * the returned context.
+ * @workspaceSize: The size of workspace. Use ZSTD_CCtxWorkspaceBound() to
+ * determine how large the workspace must be.
+ *
+ * Return: A compression context emplaced into workspace.
+ */
+ZSTD_CCtx *ZSTD_initCCtx(void *workspace, size_t workspaceSize);
+
+/**
+ * ZSTD_compressCCtx() - compress src into dst
+ * @ctx: The context. Must have been initialized with a workspace at
+ * least as large as ZSTD_CCtxWorkspaceBound(params.cParams).
+ * @dst: The buffer to compress src into.
+ * @dstCapacity: The size of the destination buffer. May be any size, but
+ * ZSTD_compressBound(srcSize) is guaranteed to be large enough.
+ * @src: The data to compress.
+ * @srcSize: The size of the data to compress.
+ * @params: The parameters to use for compression. See ZSTD_getParams().
+ *
+ * Return: The compressed size or an error, which can be checked using
+ * ZSTD_isError().
+ */
+size_t ZSTD_compressCCtx(ZSTD_CCtx *ctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize, ZSTD_parameters params);
+
+/**
+ * ZSTD_DCtxWorkspaceBound() - amount of memory needed to initialize a ZSTD_DCtx
+ *
+ * Return: A lower bound on the size of the workspace that is passed to
+ * ZSTD_initDCtx().
+ */
+size_t ZSTD_DCtxWorkspaceBound(void);
+
+/**
+ * struct ZSTD_DCtx - the zstd decompression context
+ *
+ * When decompressing many times it is recommended to allocate a context just
+ * once and reuse it for each successive decompression operation.
+ */
+typedef struct ZSTD_DCtx_s ZSTD_DCtx;
+/**
+ * ZSTD_initDCtx() - initialize a zstd decompression context
+ * @workspace: The workspace to emplace the context into. It must outlive
+ * the returned context.
+ * @workspaceSize: The size of workspace. Use ZSTD_DCtxWorkspaceBound() to
+ * determine how large the workspace must be.
+ *
+ * Return: A decompression context emplaced into workspace.
+ */
+ZSTD_DCtx *ZSTD_initDCtx(void *workspace, size_t workspaceSize);
+
+/**
+ * ZSTD_decompressDCtx() - decompress zstd compressed src into dst
+ * @ctx: The decompression context.
+ * @dst: The buffer to decompress src into.
+ * @dstCapacity: The size of the destination buffer. Must be at least as large
+ * as the decompressed size. If the caller cannot upper bound the
+ * decompressed size, then it's better to use the streaming API.
+ * @src: The zstd compressed data to decompress. Multiple concatenated
+ * frames and skippable frames are allowed.
+ * @srcSize: The exact size of the data to decompress.
+ *
+ * Return: The decompressed size or an error, which can be checked using
+ * ZSTD_isError().
+ */
+size_t ZSTD_decompressDCtx(ZSTD_DCtx *ctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize);
+
+/*-************************
+ * Simple dictionary API
+ **************************/
+
+/**
+ * ZSTD_compress_usingDict() - compress src into dst using a dictionary
+ * @ctx: The context. Must have been initialized with a workspace at
+ * least as large as ZSTD_CCtxWorkspaceBound(params.cParams).
+ * @dst: The buffer to compress src into.
+ * @dstCapacity: The size of the destination buffer. May be any size, but
+ * ZSTD_compressBound(srcSize) is guaranteed to be large enough.
+ * @src: The data to compress.
+ * @srcSize: The size of the data to compress.
+ * @dict: The dictionary to use for compression.
+ * @dictSize: The size of the dictionary.
+ * @params: The parameters to use for compression. See ZSTD_getParams().
+ *
+ * Compression using a predefined dictionary. The same dictionary must be used
+ * during decompression.
+ *
+ * Return: The compressed size or an error, which can be checked using
+ * ZSTD_isError().
+ */
+size_t ZSTD_compress_usingDict(ZSTD_CCtx *ctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize, const void *dict, size_t dictSize,
+ ZSTD_parameters params);
+
+/**
+ * ZSTD_decompress_usingDict() - decompress src into dst using a dictionary
+ * @ctx: The decompression context.
+ * @dst: The buffer to decompress src into.
+ * @dstCapacity: The size of the destination buffer. Must be at least as large
+ * as the decompressed size. If the caller cannot upper bound the
+ * decompressed size, then it's better to use the streaming API.
+ * @src: The zstd compressed data to decompress. Multiple concatenated
+ * frames and skippable frames are allowed.
+ * @srcSize: The exact size of the data to decompress.
+ * @dict: The dictionary to use for decompression. The same dictionary
+ * must've been used to compress the data.
+ * @dictSize: The size of the dictionary.
+ *
+ * Return: The decompressed size or an error, which can be checked using
+ * ZSTD_isError().
+ */
+size_t ZSTD_decompress_usingDict(ZSTD_DCtx *ctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize, const void *dict, size_t dictSize);
+
+/*-**************************
+ * Fast dictionary API
+ ***************************/
+
+/**
+ * ZSTD_CDictWorkspaceBound() - memory needed to initialize a ZSTD_CDict
+ * @cParams: The compression parameters to be used for compression.
+ *
+ * Return: A lower bound on the size of the workspace that is passed to
+ * ZSTD_initCDict().
+ */
+size_t ZSTD_CDictWorkspaceBound(ZSTD_compressionParameters cParams);
+
+/**
+ * struct ZSTD_CDict - a digested dictionary to be used for compression
+ */
+typedef struct ZSTD_CDict_s ZSTD_CDict;
+
+/**
+ * ZSTD_initCDict() - initialize a digested dictionary for compression
+ * @dictBuffer: The dictionary to digest. The buffer is referenced by the
+ * ZSTD_CDict so it must outlive the returned ZSTD_CDict.
+ * @dictSize: The size of the dictionary.
+ * @params: The parameters to use for compression. See ZSTD_getParams().
+ * @workspace: The workspace. It must outlive the returned ZSTD_CDict.
+ * @workspaceSize: The workspace size. Must be at least
+ * ZSTD_CDictWorkspaceBound(params.cParams).
+ *
+ * When compressing multiple messages / blocks with the same dictionary it is
+ * recommended to load it just once. The ZSTD_CDict merely references the
+ * dictBuffer, so it must outlive the returned ZSTD_CDict.
+ *
+ * Return: The digested dictionary emplaced into workspace.
+ */
+ZSTD_CDict *ZSTD_initCDict(const void *dictBuffer, size_t dictSize,
+ ZSTD_parameters params, void *workspace, size_t workspaceSize);
+
+/**
+ * ZSTD_compress_usingCDict() - compress src into dst using a ZSTD_CDict
+ * @ctx: The context. Must have been initialized with a workspace at
+ * least as large as ZSTD_CCtxWorkspaceBound(cParams) where
+ * cParams are the compression parameters used to initialize the
+ * cdict.
+ * @dst: The buffer to compress src into.
+ * @dstCapacity: The size of the destination buffer. May be any size, but
+ * ZSTD_compressBound(srcSize) is guaranteed to be large enough.
+ * @src: The data to compress.
+ * @srcSize: The size of the data to compress.
+ * @cdict: The digested dictionary to use for compression.
+ * @params: The parameters to use for compression. See ZSTD_getParams().
+ *
+ * Compression using a digested dictionary. The same dictionary must be used
+ * during decompression.
+ *
+ * Return: The compressed size or an error, which can be checked using
+ * ZSTD_isError().
+ */
+size_t ZSTD_compress_usingCDict(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize, const ZSTD_CDict *cdict);
+
+
+/**
+ * ZSTD_DDictWorkspaceBound() - memory needed to initialize a ZSTD_DDict
+ *
+ * Return: A lower bound on the size of the workspace that is passed to
+ * ZSTD_initDDict().
+ */
+size_t ZSTD_DDictWorkspaceBound(void);
+
+/**
+ * struct ZSTD_DDict - a digested dictionary to be used for decompression
+ */
+typedef struct ZSTD_DDict_s ZSTD_DDict;
+
+/**
+ * ZSTD_initDDict() - initialize a digested dictionary for decompression
+ * @dictBuffer: The dictionary to digest. The buffer is referenced by the
+ * ZSTD_DDict so it must outlive the returned ZSTD_DDict.
+ * @dictSize: The size of the dictionary.
+ * @workspace: The workspace. It must outlive the returned ZSTD_DDict.
+ * @workspaceSize: The workspace size. Must be at least
+ * ZSTD_DDictWorkspaceBound().
+ *
+ * When decompressing multiple messages / blocks with the same dictionary it is
+ * recommended to load it just once. The ZSTD_DDict merely references the
+ * dictBuffer, so it must outlive the returned ZSTD_DDict.
+ *
+ * Return: The digested dictionary emplaced into workspace.
+ */
+ZSTD_DDict *ZSTD_initDDict(const void *dictBuffer, size_t dictSize,
+ void *workspace, size_t workspaceSize);
+
+/**
+ * ZSTD_decompress_usingDDict() - decompress src into dst using a ZSTD_DDict
+ * @ctx: The decompression context.
+ * @dst: The buffer to decompress src into.
+ * @dstCapacity: The size of the destination buffer. Must be at least as large
+ * as the decompressed size. If the caller cannot upper bound the
+ * decompressed size, then it's better to use the streaming API.
+ * @src: The zstd compressed data to decompress. Multiple concatenated
+ * frames and skippable frames are allowed.
+ * @srcSize: The exact size of the data to decompress.
+ * @ddict: The digested dictionary to use for decompression. The same
+ * dictionary must've been used to compress the data.
+ *
+ * Return: The decompressed size or an error, which can be checked using
+ * ZSTD_isError().
+ */
+size_t ZSTD_decompress_usingDDict(ZSTD_DCtx *dctx, void *dst,
+ size_t dstCapacity, const void *src, size_t srcSize,
+ const ZSTD_DDict *ddict);
+
+
+/*-**************************
+ * Streaming
+ ***************************/
+
+/**
+ * struct ZSTD_inBuffer - input buffer for streaming
+ * @src: Start of the input buffer.
+ * @size: Size of the input buffer.
+ * @pos: Position where reading stopped. Will be updated.
+ * Necessarily 0 <= pos <= size.
+ */
+typedef struct ZSTD_inBuffer_s {
+ const void *src;
+ size_t size;
+ size_t pos;
+} ZSTD_inBuffer;
+
+/**
+ * struct ZSTD_outBuffer - output buffer for streaming
+ * @dst: Start of the output buffer.
+ * @size: Size of the output buffer.
+ * @pos: Position where writing stopped. Will be updated.
+ * Necessarily 0 <= pos <= size.
+ */
+typedef struct ZSTD_outBuffer_s {
+ void *dst;
+ size_t size;
+ size_t pos;
+} ZSTD_outBuffer;
+
+
+
+/*-*****************************************************************************
+ * Streaming compression - HowTo
+ *
+ * A ZSTD_CStream object is required to track streaming operation.
+ * Use ZSTD_initCStream() to initialize a ZSTD_CStream object.
+ * ZSTD_CStream objects can be reused multiple times on consecutive compression
+ * operations. It is recommended to re-use ZSTD_CStream in situations where many
+ * streaming operations will be achieved consecutively. Use one separate
+ * ZSTD_CStream per thread for parallel execution.
+ *
+ * Use ZSTD_compressStream() repetitively to consume input stream.
+ * The function will automatically update both `pos` fields.
+ * Note that it may not consume the entire input, in which case `pos < size`,
+ * and it's up to the caller to present again remaining data.
+ * It returns a hint for the preferred number of bytes to use as an input for
+ * the next function call.
+ *
+ * At any moment, it's possible to flush whatever data remains within internal
+ * buffer, using ZSTD_flushStream(). `output->pos` will be updated. There might
+ * still be some content left within the internal buffer if `output->size` is
+ * too small. It returns the number of bytes left in the internal buffer and
+ * must be called until it returns 0.
+ *
+ * ZSTD_endStream() instructs to finish a frame. It will perform a flush and
+ * write frame epilogue. The epilogue is required for decoders to consider a
+ * frame completed. Similar to ZSTD_flushStream(), it may not be able to flush
+ * the full content if `output->size` is too small. In which case, call again
+ * ZSTD_endStream() to complete the flush. It returns the number of bytes left
+ * in the internal buffer and must be called until it returns 0.
+ ******************************************************************************/
+
+/**
+ * ZSTD_CStreamWorkspaceBound() - memory needed to initialize a ZSTD_CStream
+ * @cParams: The compression parameters to be used for compression.
+ *
+ * Return: A lower bound on the size of the workspace that is passed to
+ * ZSTD_initCStream() and ZSTD_initCStream_usingCDict().
+ */
+size_t ZSTD_CStreamWorkspaceBound(ZSTD_compressionParameters cParams);
+
+/**
+ * struct ZSTD_CStream - the zstd streaming compression context
+ */
+typedef struct ZSTD_CStream_s ZSTD_CStream;
+
+/*===== ZSTD_CStream management functions =====*/
+/**
+ * ZSTD_initCStream() - initialize a zstd streaming compression context
+ * @params: The zstd compression parameters.
+ * @pledgedSrcSize: If params.fParams.contentSizeFlag == 1 then the caller must
+ * pass the source size (zero means empty source). Otherwise,
+ * the caller may optionally pass the source size, or zero if
+ * unknown.
+ * @workspace: The workspace to emplace the context into. It must outlive
+ * the returned context.
+ * @workspaceSize: The size of workspace.
+ * Use ZSTD_CStreamWorkspaceBound(params.cParams) to determine
+ * how large the workspace must be.
+ *
+ * Return: The zstd streaming compression context.
+ */
+ZSTD_CStream *ZSTD_initCStream(ZSTD_parameters params,
+ unsigned long long pledgedSrcSize, void *workspace,
+ size_t workspaceSize);
+
+/**
+ * ZSTD_initCStream_usingCDict() - initialize a streaming compression context
+ * @cdict: The digested dictionary to use for compression.
+ * @pledgedSrcSize: Optionally the source size, or zero if unknown.
+ * @workspace: The workspace to emplace the context into. It must outlive
+ * the returned context.
+ * @workspaceSize: The size of workspace. Call ZSTD_CStreamWorkspaceBound()
+ * with the cParams used to initialize the cdict to determine
+ * how large the workspace must be.
+ *
+ * Return: The zstd streaming compression context.
+ */
+ZSTD_CStream *ZSTD_initCStream_usingCDict(const ZSTD_CDict *cdict,
+ unsigned long long pledgedSrcSize, void *workspace,
+ size_t workspaceSize);
+
+/*===== Streaming compression functions =====*/
+/**
+ * ZSTD_resetCStream() - reset the context using parameters from creation
+ * @zcs: The zstd streaming compression context to reset.
+ * @pledgedSrcSize: Optionally the source size, or zero if unknown.
+ *
+ * Resets the context using the parameters from creation. Skips dictionary
+ * loading, since it can be reused. If `pledgedSrcSize` is non-zero the frame
+ * content size is always written into the frame header.
+ *
+ * Return: Zero or an error, which can be checked using ZSTD_isError().
+ */
+size_t ZSTD_resetCStream(ZSTD_CStream *zcs, unsigned long long pledgedSrcSize);
+/**
+ * ZSTD_compressStream() - streaming compress some of input into output
+ * @zcs: The zstd streaming compression context.
+ * @output: Destination buffer. `output->pos` is updated to indicate how much
+ * compressed data was written.
+ * @input: Source buffer. `input->pos` is updated to indicate how much data was
+ * read. Note that it may not consume the entire input, in which case
+ * `input->pos < input->size`, and it's up to the caller to present
+ * remaining data again.
+ *
+ * The `input` and `output` buffers may be any size. Guaranteed to make some
+ * forward progress if `input` and `output` are not empty.
+ *
+ * Return: A hint for the number of bytes to use as the input for the next
+ * function call or an error, which can be checked using
+ * ZSTD_isError().
+ */
+size_t ZSTD_compressStream(ZSTD_CStream *zcs, ZSTD_outBuffer *output,
+ ZSTD_inBuffer *input);
+/**
+ * ZSTD_flushStream() - flush internal buffers into output
+ * @zcs: The zstd streaming compression context.
+ * @output: Destination buffer. `output->pos` is updated to indicate how much
+ * compressed data was written.
+ *
+ * ZSTD_flushStream() must be called until it returns 0, meaning all the data
+ * has been flushed. Since ZSTD_flushStream() causes a block to be ended,
+ * calling it too often will degrade the compression ratio.
+ *
+ * Return: The number of bytes still present within internal buffers or an
+ * error, which can be checked using ZSTD_isError().
+ */
+size_t ZSTD_flushStream(ZSTD_CStream *zcs, ZSTD_outBuffer *output);
+/**
+ * ZSTD_endStream() - flush internal buffers into output and end the frame
+ * @zcs: The zstd streaming compression context.
+ * @output: Destination buffer. `output->pos` is updated to indicate how much
+ * compressed data was written.
+ *
+ * ZSTD_endStream() must be called until it returns 0, meaning all the data has
+ * been flushed and the frame epilogue has been written.
+ *
+ * Return: The number of bytes still present within internal buffers or an
+ * error, which can be checked using ZSTD_isError().
+ */
+size_t ZSTD_endStream(ZSTD_CStream *zcs, ZSTD_outBuffer *output);
+
+/**
+ * ZSTD_CStreamInSize() - recommended size for the input buffer
+ *
+ * Return: The recommended size for the input buffer.
+ */
+size_t ZSTD_CStreamInSize(void);
+/**
+ * ZSTD_CStreamOutSize() - recommended size for the output buffer
+ *
+ * When the output buffer is at least this large, it is guaranteed to be large
+ * enough to flush at least one complete compressed block.
+ *
+ * Return: The recommended size for the output buffer.
+ */
+size_t ZSTD_CStreamOutSize(void);
+
+
+
+/*-*****************************************************************************
+ * Streaming decompression - HowTo
+ *
+ * A ZSTD_DStream object is required to track streaming operations.
+ * Use ZSTD_initDStream() to initialize a ZSTD_DStream object.
+ * ZSTD_DStream objects can be re-used multiple times.
+ *
+ * Use ZSTD_decompressStream() repetitively to consume your input.
+ * The function will update both `pos` fields.
+ * If `input->pos < input->size`, some input has not been consumed.
+ * It's up to the caller to present again remaining data.
+ * If `output->pos < output->size`, decoder has flushed everything it could.
+ * Returns 0 iff a frame is completely decoded and fully flushed.
+ * Otherwise it returns a suggested next input size that will never load more
+ * than the current frame.
+ ******************************************************************************/
+
+/**
+ * ZSTD_DStreamWorkspaceBound() - memory needed to initialize a ZSTD_DStream
+ * @maxWindowSize: The maximum window size allowed for compressed frames.
+ *
+ * Return: A lower bound on the size of the workspace that is passed to
+ * ZSTD_initDStream() and ZSTD_initDStream_usingDDict().
+ */
+size_t ZSTD_DStreamWorkspaceBound(size_t maxWindowSize);
+
+/**
+ * struct ZSTD_DStream - the zstd streaming decompression context
+ */
+typedef struct ZSTD_DStream_s ZSTD_DStream;
+/*===== ZSTD_DStream management functions =====*/
+/**
+ * ZSTD_initDStream() - initialize a zstd streaming decompression context
+ * @maxWindowSize: The maximum window size allowed for compressed frames.
+ * @workspace: The workspace to emplace the context into. It must outlive
+ * the returned context.
+ * @workspaceSize: The size of workspace.
+ * Use ZSTD_DStreamWorkspaceBound(maxWindowSize) to determine
+ * how large the workspace must be.
+ *
+ * Return: The zstd streaming decompression context.
+ */
+ZSTD_DStream *ZSTD_initDStream(size_t maxWindowSize, void *workspace,
+ size_t workspaceSize);
+/**
+ * ZSTD_initDStream_usingDDict() - initialize streaming decompression context
+ * @maxWindowSize: The maximum window size allowed for compressed frames.
+ * @ddict: The digested dictionary to use for decompression.
+ * @workspace: The workspace to emplace the context into. It must outlive
+ * the returned context.
+ * @workspaceSize: The size of workspace.
+ * Use ZSTD_DStreamWorkspaceBound(maxWindowSize) to determine
+ * how large the workspace must be.
+ *
+ * Return: The zstd streaming decompression context.
+ */
+ZSTD_DStream *ZSTD_initDStream_usingDDict(size_t maxWindowSize,
+ const ZSTD_DDict *ddict, void *workspace, size_t workspaceSize);
+
+/*===== Streaming decompression functions =====*/
+/**
+ * ZSTD_resetDStream() - reset the context using parameters from creation
+ * @zds: The zstd streaming decompression context to reset.
+ *
+ * Resets the context using the parameters from creation. Skips dictionary
+ * loading, since it can be reused.
+ *
+ * Return: Zero or an error, which can be checked using ZSTD_isError().
+ */
+size_t ZSTD_resetDStream(ZSTD_DStream *zds);
+/**
+ * ZSTD_decompressStream() - streaming decompress some of input into output
+ * @zds: The zstd streaming decompression context.
+ * @output: Destination buffer. `output.pos` is updated to indicate how much
+ * decompressed data was written.
+ * @input: Source buffer. `input.pos` is updated to indicate how much data was
+ * read. Note that it may not consume the entire input, in which case
+ * `input.pos < input.size`, and it's up to the caller to present
+ * remaining data again.
+ *
+ * The `input` and `output` buffers may be any size. Guaranteed to make some
+ * forward progress if `input` and `output` are not empty.
+ * ZSTD_decompressStream() will not consume the last byte of the frame until
+ * the entire frame is flushed.
+ *
+ * Return: Returns 0 iff a frame is completely decoded and fully flushed.
+ * Otherwise returns a hint for the number of bytes to use as the input
+ * for the next function call or an error, which can be checked using
+ * ZSTD_isError(). The size hint will never load more than the frame.
+ */
+size_t ZSTD_decompressStream(ZSTD_DStream *zds, ZSTD_outBuffer *output,
+ ZSTD_inBuffer *input);
+
+/**
+ * ZSTD_DStreamInSize() - recommended size for the input buffer
+ *
+ * Return: The recommended size for the input buffer.
+ */
+size_t ZSTD_DStreamInSize(void);
+/**
+ * ZSTD_DStreamOutSize() - recommended size for the output buffer
+ *
+ * When the output buffer is at least this large, it is guaranteed to be large
+ * enough to flush at least one complete decompressed block.
+ *
+ * Return: The recommended size for the output buffer.
+ */
+size_t ZSTD_DStreamOutSize(void);
+
+
+/* --- Constants ---*/
+#define ZSTD_MAGICNUMBER 0xFD2FB528 /* >= v0.8.0 */
+#define ZSTD_MAGIC_SKIPPABLE_START 0x184D2A50U
+
+#define ZSTD_CONTENTSIZE_UNKNOWN (0ULL - 1)
+#define ZSTD_CONTENTSIZE_ERROR (0ULL - 2)
+
+#define ZSTD_WINDOWLOG_MAX_32 27
+#define ZSTD_WINDOWLOG_MAX_64 27
+#define ZSTD_WINDOWLOG_MAX \
+ ((unsigned int)(sizeof(size_t) == 4 \
+ ? ZSTD_WINDOWLOG_MAX_32 \
+ : ZSTD_WINDOWLOG_MAX_64))
+#define ZSTD_WINDOWLOG_MIN 10
+#define ZSTD_HASHLOG_MAX ZSTD_WINDOWLOG_MAX
+#define ZSTD_HASHLOG_MIN 6
+#define ZSTD_CHAINLOG_MAX (ZSTD_WINDOWLOG_MAX+1)
+#define ZSTD_CHAINLOG_MIN ZSTD_HASHLOG_MIN
+#define ZSTD_HASHLOG3_MAX 17
+#define ZSTD_SEARCHLOG_MAX (ZSTD_WINDOWLOG_MAX-1)
+#define ZSTD_SEARCHLOG_MIN 1
+/* only for ZSTD_fast, other strategies are limited to 6 */
+#define ZSTD_SEARCHLENGTH_MAX 7
+/* only for ZSTD_btopt, other strategies are limited to 4 */
+#define ZSTD_SEARCHLENGTH_MIN 3
+#define ZSTD_TARGETLENGTH_MIN 4
+#define ZSTD_TARGETLENGTH_MAX 999
+
+/* for static allocation */
+#define ZSTD_FRAMEHEADERSIZE_MAX 18
+#define ZSTD_FRAMEHEADERSIZE_MIN 6
+static const size_t ZSTD_frameHeaderSize_prefix = 5;
+static const size_t ZSTD_frameHeaderSize_min = ZSTD_FRAMEHEADERSIZE_MIN;
+static const size_t ZSTD_frameHeaderSize_max = ZSTD_FRAMEHEADERSIZE_MAX;
+/* magic number + skippable frame length */
+static const size_t ZSTD_skippableHeaderSize = 8;
+
+
+/*-*************************************
+ * Compressed size functions
+ **************************************/
+
+/**
+ * ZSTD_findFrameCompressedSize() - returns the size of a compressed frame
+ * @src: Source buffer. It should point to the start of a zstd encoded frame
+ * or a skippable frame.
+ * @srcSize: The size of the source buffer. It must be at least as large as the
+ * size of the frame.
+ *
+ * Return: The compressed size of the frame pointed to by `src` or an error,
+ * which can be check with ZSTD_isError().
+ * Suitable to pass to ZSTD_decompress() or similar functions.
+ */
+size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize);
+
+/*-*************************************
+ * Decompressed size functions
+ **************************************/
+/**
+ * ZSTD_getFrameContentSize() - returns the content size in a zstd frame header
+ * @src: It should point to the start of a zstd encoded frame.
+ * @srcSize: The size of the source buffer. It must be at least as large as the
+ * frame header. `ZSTD_frameHeaderSize_max` is always large enough.
+ *
+ * Return: The frame content size stored in the frame header if known.
+ * `ZSTD_CONTENTSIZE_UNKNOWN` if the content size isn't stored in the
+ * frame header. `ZSTD_CONTENTSIZE_ERROR` on invalid input.
+ */
+unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize);
+
+/**
+ * ZSTD_findDecompressedSize() - returns decompressed size of a series of frames
+ * @src: It should point to the start of a series of zstd encoded and/or
+ * skippable frames.
+ * @srcSize: The exact size of the series of frames.
+ *
+ * If any zstd encoded frame in the series doesn't have the frame content size
+ * set, `ZSTD_CONTENTSIZE_UNKNOWN` is returned. But frame content size is always
+ * set when using ZSTD_compress(). The decompressed size can be very large.
+ * If the source is untrusted, the decompressed size could be wrong or
+ * intentionally modified. Always ensure the result fits within the
+ * application's authorized limits. ZSTD_findDecompressedSize() handles multiple
+ * frames, and so it must traverse the input to read each frame header. This is
+ * efficient as most of the data is skipped, however it does mean that all frame
+ * data must be present and valid.
+ *
+ * Return: Decompressed size of all the data contained in the frames if known.
+ * `ZSTD_CONTENTSIZE_UNKNOWN` if the decompressed size is unknown.
+ * `ZSTD_CONTENTSIZE_ERROR` if an error occurred.
+ */
+unsigned long long ZSTD_findDecompressedSize(const void *src, size_t srcSize);
+
+/*-*************************************
+ * Advanced compression functions
+ **************************************/
+/**
+ * ZSTD_checkCParams() - ensure parameter values remain within authorized range
+ * @cParams: The zstd compression parameters.
+ *
+ * Return: Zero or an error, which can be checked using ZSTD_isError().
+ */
+size_t ZSTD_checkCParams(ZSTD_compressionParameters cParams);
+
+/**
+ * ZSTD_adjustCParams() - optimize parameters for a given srcSize and dictSize
+ * @srcSize: Optionally the estimated source size, or zero if unknown.
+ * @dictSize: Optionally the estimated dictionary size, or zero if unknown.
+ *
+ * Return: The optimized parameters.
+ */
+ZSTD_compressionParameters ZSTD_adjustCParams(
+ ZSTD_compressionParameters cParams, unsigned long long srcSize,
+ size_t dictSize);
+
+/*--- Advanced decompression functions ---*/
+
+/**
+ * ZSTD_isFrame() - returns true iff the buffer starts with a valid frame
+ * @buffer: The source buffer to check.
+ * @size: The size of the source buffer, must be at least 4 bytes.
+ *
+ * Return: True iff the buffer starts with a zstd or skippable frame identifier.
+ */
+unsigned int ZSTD_isFrame(const void *buffer, size_t size);
+
+/**
+ * ZSTD_getDictID_fromDict() - returns the dictionary id stored in a dictionary
+ * @dict: The dictionary buffer.
+ * @dictSize: The size of the dictionary buffer.
+ *
+ * Return: The dictionary id stored within the dictionary or 0 if the
+ * dictionary is not a zstd dictionary. If it returns 0 the
+ * dictionary can still be loaded as a content-only dictionary.
+ */
+unsigned int ZSTD_getDictID_fromDict(const void *dict, size_t dictSize);
+
+/**
+ * ZSTD_getDictID_fromDDict() - returns the dictionary id stored in a ZSTD_DDict
+ * @ddict: The ddict to find the id of.
+ *
+ * Return: The dictionary id stored within `ddict` or 0 if the dictionary is not
+ * a zstd dictionary. If it returns 0 `ddict` will be loaded as a
+ * content-only dictionary.
+ */
+unsigned int ZSTD_getDictID_fromDDict(const ZSTD_DDict *ddict);
+
+/**
+ * ZSTD_getDictID_fromFrame() - returns the dictionary id stored in a zstd frame
+ * @src: Source buffer. It must be a zstd encoded frame.
+ * @srcSize: The size of the source buffer. It must be at least as large as the
+ * frame header. `ZSTD_frameHeaderSize_max` is always large enough.
+ *
+ * Return: The dictionary id required to decompress the frame stored within
+ * `src` or 0 if the dictionary id could not be decoded. It can return
+ * 0 if the frame does not require a dictionary, the dictionary id
+ * wasn't stored in the frame, `src` is not a zstd frame, or `srcSize`
+ * is too small.
+ */
+unsigned int ZSTD_getDictID_fromFrame(const void *src, size_t srcSize);
+
+/**
+ * struct ZSTD_frameParams - zstd frame parameters stored in the frame header
+ * @frameContentSize: The frame content size, or 0 if not present.
+ * @windowSize: The window size, or 0 if the frame is a skippable frame.
+ * @dictID: The dictionary id, or 0 if not present.
+ * @checksumFlag: Whether a checksum was used.
+ */
+typedef struct {
+ unsigned long long frameContentSize;
+ unsigned int windowSize;
+ unsigned int dictID;
+ unsigned int checksumFlag;
+} ZSTD_frameParams;
+
+/**
+ * ZSTD_getFrameParams() - extracts parameters from a zstd or skippable frame
+ * @fparamsPtr: On success the frame parameters are written here.
+ * @src: The source buffer. It must point to a zstd or skippable frame.
+ * @srcSize: The size of the source buffer. `ZSTD_frameHeaderSize_max` is
+ * always large enough to succeed.
+ *
+ * Return: 0 on success. If more data is required it returns how many bytes
+ * must be provided to make forward progress. Otherwise it returns
+ * an error, which can be checked using ZSTD_isError().
+ */
+size_t ZSTD_getFrameParams(ZSTD_frameParams *fparamsPtr, const void *src,
+ size_t srcSize);
+
+/*-*****************************************************************************
+ * Buffer-less and synchronous inner streaming functions
+ *
+ * This is an advanced API, giving full control over buffer management, for
+ * users which need direct control over memory.
+ * But it's also a complex one, with many restrictions (documented below).
+ * Prefer using normal streaming API for an easier experience
+ ******************************************************************************/
+
+/*-*****************************************************************************
+ * Buffer-less streaming compression (synchronous mode)
+ *
+ * A ZSTD_CCtx object is required to track streaming operations.
+ * Use ZSTD_initCCtx() to initialize a context.
+ * ZSTD_CCtx object can be re-used multiple times within successive compression
+ * operations.
+ *
+ * Start by initializing a context.
+ * Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary
+ * compression,
+ * or ZSTD_compressBegin_advanced(), for finer parameter control.
+ * It's also possible to duplicate a reference context which has already been
+ * initialized, using ZSTD_copyCCtx()
+ *
+ * Then, consume your input using ZSTD_compressContinue().
+ * There are some important considerations to keep in mind when using this
+ * advanced function :
+ * - ZSTD_compressContinue() has no internal buffer. It uses externally provided
+ * buffer only.
+ * - Interface is synchronous : input is consumed entirely and produce 1+
+ * (or more) compressed blocks.
+ * - Caller must ensure there is enough space in `dst` to store compressed data
+ * under worst case scenario. Worst case evaluation is provided by
+ * ZSTD_compressBound().
+ * ZSTD_compressContinue() doesn't guarantee recover after a failed
+ * compression.
+ * - ZSTD_compressContinue() presumes prior input ***is still accessible and
+ * unmodified*** (up to maximum distance size, see WindowLog).
+ * It remembers all previous contiguous blocks, plus one separated memory
+ * segment (which can itself consists of multiple contiguous blocks)
+ * - ZSTD_compressContinue() detects that prior input has been overwritten when
+ * `src` buffer overlaps. In which case, it will "discard" the relevant memory
+ * section from its history.
+ *
+ * Finish a frame with ZSTD_compressEnd(), which will write the last block(s)
+ * and optional checksum. It's possible to use srcSize==0, in which case, it
+ * will write a final empty block to end the frame. Without last block mark,
+ * frames will be considered unfinished (corrupted) by decoders.
+ *
+ * `ZSTD_CCtx` object can be re-used (ZSTD_compressBegin()) to compress some new
+ * frame.
+ ******************************************************************************/
+
+/*===== Buffer-less streaming compression functions =====*/
+size_t ZSTD_compressBegin(ZSTD_CCtx *cctx, int compressionLevel);
+size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx *cctx, const void *dict,
+ size_t dictSize, int compressionLevel);
+size_t ZSTD_compressBegin_advanced(ZSTD_CCtx *cctx, const void *dict,
+ size_t dictSize, ZSTD_parameters params,
+ unsigned long long pledgedSrcSize);
+size_t ZSTD_copyCCtx(ZSTD_CCtx *cctx, const ZSTD_CCtx *preparedCCtx,
+ unsigned long long pledgedSrcSize);
+size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx *cctx, const ZSTD_CDict *cdict,
+ unsigned long long pledgedSrcSize);
+size_t ZSTD_compressContinue(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize);
+size_t ZSTD_compressEnd(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize);
+
+
+
+/*-*****************************************************************************
+ * Buffer-less streaming decompression (synchronous mode)
+ *
+ * A ZSTD_DCtx object is required to track streaming operations.
+ * Use ZSTD_initDCtx() to initialize a context.
+ * A ZSTD_DCtx object can be re-used multiple times.
+ *
+ * First typical operation is to retrieve frame parameters, using
+ * ZSTD_getFrameParams(). It fills a ZSTD_frameParams structure which provide
+ * important information to correctly decode the frame, such as the minimum
+ * rolling buffer size to allocate to decompress data (`windowSize`), and the
+ * dictionary ID used.
+ * Note: content size is optional, it may not be present. 0 means unknown.
+ * Note that these values could be wrong, either because of data malformation,
+ * or because an attacker is spoofing deliberate false information. As a
+ * consequence, check that values remain within valid application range,
+ * especially `windowSize`, before allocation. Each application can set its own
+ * limit, depending on local restrictions. For extended interoperability, it is
+ * recommended to support at least 8 MB.
+ * Frame parameters are extracted from the beginning of the compressed frame.
+ * Data fragment must be large enough to ensure successful decoding, typically
+ * `ZSTD_frameHeaderSize_max` bytes.
+ * Result: 0: successful decoding, the `ZSTD_frameParams` structure is filled.
+ * >0: `srcSize` is too small, provide at least this many bytes.
+ * errorCode, which can be tested using ZSTD_isError().
+ *
+ * Start decompression, with ZSTD_decompressBegin() or
+ * ZSTD_decompressBegin_usingDict(). Alternatively, you can copy a prepared
+ * context, using ZSTD_copyDCtx().
+ *
+ * Then use ZSTD_nextSrcSizeToDecompress() and ZSTD_decompressContinue()
+ * alternatively.
+ * ZSTD_nextSrcSizeToDecompress() tells how many bytes to provide as 'srcSize'
+ * to ZSTD_decompressContinue().
+ * ZSTD_decompressContinue() requires this _exact_ amount of bytes, or it will
+ * fail.
+ *
+ * The result of ZSTD_decompressContinue() is the number of bytes regenerated
+ * within 'dst' (necessarily <= dstCapacity). It can be zero, which is not an
+ * error; it just means ZSTD_decompressContinue() has decoded some metadata
+ * item. It can also be an error code, which can be tested with ZSTD_isError().
+ *
+ * ZSTD_decompressContinue() needs previous data blocks during decompression, up
+ * to `windowSize`. They should preferably be located contiguously, prior to
+ * current block. Alternatively, a round buffer of sufficient size is also
+ * possible. Sufficient size is determined by frame parameters.
+ * ZSTD_decompressContinue() is very sensitive to contiguity, if 2 blocks don't
+ * follow each other, make sure that either the compressor breaks contiguity at
+ * the same place, or that previous contiguous segment is large enough to
+ * properly handle maximum back-reference.
+ *
+ * A frame is fully decoded when ZSTD_nextSrcSizeToDecompress() returns zero.
+ * Context can then be reset to start a new decompression.
+ *
+ * Note: it's possible to know if next input to present is a header or a block,
+ * using ZSTD_nextInputType(). This information is not required to properly
+ * decode a frame.
+ *
+ * == Special case: skippable frames ==
+ *
+ * Skippable frames allow integration of user-defined data into a flow of
+ * concatenated frames. Skippable frames will be ignored (skipped) by a
+ * decompressor. The format of skippable frames is as follows:
+ * a) Skippable frame ID - 4 Bytes, Little endian format, any value from
+ * 0x184D2A50 to 0x184D2A5F
+ * b) Frame Size - 4 Bytes, Little endian format, unsigned 32-bits
+ * c) Frame Content - any content (User Data) of length equal to Frame Size
+ * For skippable frames ZSTD_decompressContinue() always returns 0.
+ * For skippable frames ZSTD_getFrameParams() returns fparamsPtr->windowLog==0
+ * what means that a frame is skippable.
+ * Note: If fparamsPtr->frameContentSize==0, it is ambiguous: the frame might
+ * actually be a zstd encoded frame with no content. For purposes of
+ * decompression, it is valid in both cases to skip the frame using
+ * ZSTD_findFrameCompressedSize() to find its size in bytes.
+ * It also returns frame size as fparamsPtr->frameContentSize.
+ ******************************************************************************/
+
+/*===== Buffer-less streaming decompression functions =====*/
+size_t ZSTD_decompressBegin(ZSTD_DCtx *dctx);
+size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx *dctx, const void *dict,
+ size_t dictSize);
+void ZSTD_copyDCtx(ZSTD_DCtx *dctx, const ZSTD_DCtx *preparedDCtx);
+size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx *dctx);
+size_t ZSTD_decompressContinue(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize);
+typedef enum {
+ ZSTDnit_frameHeader,
+ ZSTDnit_blockHeader,
+ ZSTDnit_block,
+ ZSTDnit_lastBlock,
+ ZSTDnit_checksum,
+ ZSTDnit_skippableFrame
+} ZSTD_nextInputType_e;
+ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx *dctx);
+
+/*-*****************************************************************************
+ * Block functions
+ *
+ * Block functions produce and decode raw zstd blocks, without frame metadata.
+ * Frame metadata cost is typically ~18 bytes, which can be non-negligible for
+ * very small blocks (< 100 bytes). User will have to take in charge required
+ * information to regenerate data, such as compressed and content sizes.
+ *
+ * A few rules to respect:
+ * - Compressing and decompressing require a context structure
+ * + Use ZSTD_initCCtx() and ZSTD_initDCtx()
+ * - It is necessary to init context before starting
+ * + compression : ZSTD_compressBegin()
+ * + decompression : ZSTD_decompressBegin()
+ * + variants _usingDict() are also allowed
+ * + copyCCtx() and copyDCtx() work too
+ * - Block size is limited, it must be <= ZSTD_getBlockSizeMax()
+ * + If you need to compress more, cut data into multiple blocks
+ * + Consider using the regular ZSTD_compress() instead, as frame metadata
+ * costs become negligible when source size is large.
+ * - When a block is considered not compressible enough, ZSTD_compressBlock()
+ * result will be zero. In which case, nothing is produced into `dst`.
+ * + User must test for such outcome and deal directly with uncompressed data
+ * + ZSTD_decompressBlock() doesn't accept uncompressed data as input!!!
+ * + In case of multiple successive blocks, decoder must be informed of
+ * uncompressed block existence to follow proper history. Use
+ * ZSTD_insertBlock() in such a case.
+ ******************************************************************************/
+
+/* Define for static allocation */
+#define ZSTD_BLOCKSIZE_ABSOLUTEMAX (128 * 1024)
+/*===== Raw zstd block functions =====*/
+size_t ZSTD_getBlockSizeMax(ZSTD_CCtx *cctx);
+size_t ZSTD_compressBlock(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize);
+size_t ZSTD_decompressBlock(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity,
+ const void *src, size_t srcSize);
+size_t ZSTD_insertBlock(ZSTD_DCtx *dctx, const void *blockStart,
+ size_t blockSize);
+
+#endif /* ZSTD_H */
diff --git a/include/net/act_api.h b/include/net/act_api.h
index 8f3d5d8b5ae0..b944e0eb93be 100644
--- a/include/net/act_api.h
+++ b/include/net/act_api.h
@@ -34,7 +34,6 @@ struct tc_action {
struct gnet_stats_queue tcfa_qstats;
struct net_rate_estimator __rcu *tcfa_rate_est;
spinlock_t tcfa_lock;
- struct rcu_head tcfa_rcu;
struct gnet_stats_basic_cpu __percpu *cpu_bstats;
struct gnet_stats_queue __percpu *cpu_qstats;
struct tc_cookie *act_cookie;
@@ -50,7 +49,6 @@ struct tc_action {
#define tcf_qstats common.tcfa_qstats
#define tcf_rate_est common.tcfa_rate_est
#define tcf_lock common.tcfa_lock
-#define tcf_rcu common.tcfa_rcu
/* Update lastuse only if needed, to avoid dirtying a cache line.
* We use a temp variable to avoid fetching jiffies twice.
diff --git a/include/net/sctp/sctp.h b/include/net/sctp/sctp.h
index 06b4f515e157..d7d8cba01469 100644
--- a/include/net/sctp/sctp.h
+++ b/include/net/sctp/sctp.h
@@ -127,7 +127,8 @@ int sctp_transport_lookup_process(int (*cb)(struct sctp_transport *, void *),
const union sctp_addr *laddr,
const union sctp_addr *paddr, void *p);
int sctp_for_each_transport(int (*cb)(struct sctp_transport *, void *),
- struct net *net, int pos, void *p);
+ int (*cb_done)(struct sctp_transport *, void *),
+ struct net *net, int *pos, void *p);
int sctp_for_each_endpoint(int (*cb)(struct sctp_endpoint *, void *), void *p);
int sctp_get_sctp_info(struct sock *sk, struct sctp_association *asoc,
struct sctp_info *info);
diff --git a/include/net/sctp/ulpevent.h b/include/net/sctp/ulpevent.h
index 1060494ac230..b8c86ec1a8f5 100644
--- a/include/net/sctp/ulpevent.h
+++ b/include/net/sctp/ulpevent.h
@@ -153,8 +153,12 @@ __u16 sctp_ulpevent_get_notification_type(const struct sctp_ulpevent *event);
static inline int sctp_ulpevent_type_enabled(__u16 sn_type,
struct sctp_event_subscribe *mask)
{
+ int offset = sn_type - SCTP_SN_TYPE_BASE;
char *amask = (char *) mask;
- return amask[sn_type - SCTP_SN_TYPE_BASE];
+
+ if (offset >= sizeof(struct sctp_event_subscribe))
+ return 0;
+ return amask[offset];
}
/* Given an event subscription, is this event enabled? */
diff --git a/include/scsi/scsi_host.h b/include/scsi/scsi_host.h
index afb04811b7b9..0a804b1a4726 100644
--- a/include/scsi/scsi_host.h
+++ b/include/scsi/scsi_host.h
@@ -691,12 +691,6 @@ struct Scsi_Host {
unsigned int prot_capabilities;
unsigned char prot_guard_type;
- /*
- * q used for scsi_tgt msgs, async events or any other requests that
- * need to be processed in userspace
- */
- struct request_queue *uspace_req_q;
-
/* legacy crap */
unsigned long base;
unsigned long io_port;
diff --git a/include/trace/events/block.h b/include/trace/events/block.h
index f815aaaef755..1fd7ff1a46f7 100644
--- a/include/trace/events/block.h
+++ b/include/trace/events/block.h
@@ -397,7 +397,6 @@ DECLARE_EVENT_CLASS(block_get_rq,
TP_fast_assign(
__entry->dev = bio ? bio_dev(bio) : 0;
- __entry->dev = bio_dev(bio);
__entry->sector = bio ? bio->bi_iter.bi_sector : 0;
__entry->nr_sector = bio ? bio_sectors(bio) : 0;
blk_fill_rwbs(__entry->rwbs,
@@ -414,7 +413,7 @@ DECLARE_EVENT_CLASS(block_get_rq,
/**
* block_getrq - get a free request entry in queue for block IO operations
* @q: queue for operations
- * @bio: pending block IO operation
+ * @bio: pending block IO operation (can be %NULL)
* @rw: low bit indicates a read (%0) or a write (%1)
*
* A request struct for queue @q has been allocated to handle the
@@ -430,7 +429,7 @@ DEFINE_EVENT(block_get_rq, block_getrq,
/**
* block_sleeprq - waiting to get a free request entry in queue for block IO operation
* @q: queue for operation
- * @bio: pending block IO operation
+ * @bio: pending block IO operation (can be %NULL)
* @rw: low bit indicates a read (%0) or a write (%1)
*
* In the case where a request struct cannot be provided for queue @q
diff --git a/include/trace/events/f2fs.h b/include/trace/events/f2fs.h
index bc4dd7837e4c..5d216f7fb05a 100644
--- a/include/trace/events/f2fs.h
+++ b/include/trace/events/f2fs.h
@@ -543,14 +543,14 @@ TRACE_EVENT(f2fs_map_blocks,
TRACE_EVENT(f2fs_background_gc,
- TP_PROTO(struct super_block *sb, long wait_ms,
+ TP_PROTO(struct super_block *sb, unsigned int wait_ms,
unsigned int prefree, unsigned int free),
TP_ARGS(sb, wait_ms, prefree, free),
TP_STRUCT__entry(
__field(dev_t, dev)
- __field(long, wait_ms)
+ __field(unsigned int, wait_ms)
__field(unsigned int, prefree)
__field(unsigned int, free)
),
@@ -562,13 +562,120 @@ TRACE_EVENT(f2fs_background_gc,
__entry->free = free;
),
- TP_printk("dev = (%d,%d), wait_ms = %ld, prefree = %u, free = %u",
+ TP_printk("dev = (%d,%d), wait_ms = %u, prefree = %u, free = %u",
show_dev(__entry->dev),
__entry->wait_ms,
__entry->prefree,
__entry->free)
);
+TRACE_EVENT(f2fs_gc_begin,
+
+ TP_PROTO(struct super_block *sb, bool sync, bool background,
+ long long dirty_nodes, long long dirty_dents,
+ long long dirty_imeta, unsigned int free_sec,
+ unsigned int free_seg, int reserved_seg,
+ unsigned int prefree_seg),
+
+ TP_ARGS(sb, sync, background, dirty_nodes, dirty_dents, dirty_imeta,
+ free_sec, free_seg, reserved_seg, prefree_seg),
+
+ TP_STRUCT__entry(
+ __field(dev_t, dev)
+ __field(bool, sync)
+ __field(bool, background)
+ __field(long long, dirty_nodes)
+ __field(long long, dirty_dents)
+ __field(long long, dirty_imeta)
+ __field(unsigned int, free_sec)
+ __field(unsigned int, free_seg)
+ __field(int, reserved_seg)
+ __field(unsigned int, prefree_seg)
+ ),
+
+ TP_fast_assign(
+ __entry->dev = sb->s_dev;
+ __entry->sync = sync;
+ __entry->background = background;
+ __entry->dirty_nodes = dirty_nodes;
+ __entry->dirty_dents = dirty_dents;
+ __entry->dirty_imeta = dirty_imeta;
+ __entry->free_sec = free_sec;
+ __entry->free_seg = free_seg;
+ __entry->reserved_seg = reserved_seg;
+ __entry->prefree_seg = prefree_seg;
+ ),
+
+ TP_printk("dev = (%d,%d), sync = %d, background = %d, nodes = %lld, "
+ "dents = %lld, imeta = %lld, free_sec:%u, free_seg:%u, "
+ "rsv_seg:%d, prefree_seg:%u",
+ show_dev(__entry->dev),
+ __entry->sync,
+ __entry->background,
+ __entry->dirty_nodes,
+ __entry->dirty_dents,
+ __entry->dirty_imeta,
+ __entry->free_sec,
+ __entry->free_seg,
+ __entry->reserved_seg,
+ __entry->prefree_seg)
+);
+
+TRACE_EVENT(f2fs_gc_end,
+
+ TP_PROTO(struct super_block *sb, int ret, int seg_freed,
+ int sec_freed, long long dirty_nodes,
+ long long dirty_dents, long long dirty_imeta,
+ unsigned int free_sec, unsigned int free_seg,
+ int reserved_seg, unsigned int prefree_seg),
+
+ TP_ARGS(sb, ret, seg_freed, sec_freed, dirty_nodes, dirty_dents,
+ dirty_imeta, free_sec, free_seg, reserved_seg, prefree_seg),
+
+ TP_STRUCT__entry(
+ __field(dev_t, dev)
+ __field(int, ret)
+ __field(int, seg_freed)
+ __field(int, sec_freed)
+ __field(long long, dirty_nodes)
+ __field(long long, dirty_dents)
+ __field(long long, dirty_imeta)
+ __field(unsigned int, free_sec)
+ __field(unsigned int, free_seg)
+ __field(int, reserved_seg)
+ __field(unsigned int, prefree_seg)
+ ),
+
+ TP_fast_assign(
+ __entry->dev = sb->s_dev;
+ __entry->ret = ret;
+ __entry->seg_freed = seg_freed;
+ __entry->sec_freed = sec_freed;
+ __entry->dirty_nodes = dirty_nodes;
+ __entry->dirty_dents = dirty_dents;
+ __entry->dirty_imeta = dirty_imeta;
+ __entry->free_sec = free_sec;
+ __entry->free_seg = free_seg;
+ __entry->reserved_seg = reserved_seg;
+ __entry->prefree_seg = prefree_seg;
+ ),
+
+ TP_printk("dev = (%d,%d), ret = %d, seg_freed = %d, sec_freed = %d, "
+ "nodes = %lld, dents = %lld, imeta = %lld, free_sec:%u, "
+ "free_seg:%u, rsv_seg:%d, prefree_seg:%u",
+ show_dev(__entry->dev),
+ __entry->ret,
+ __entry->seg_freed,
+ __entry->sec_freed,
+ __entry->dirty_nodes,
+ __entry->dirty_dents,
+ __entry->dirty_imeta,
+ __entry->free_sec,
+ __entry->free_seg,
+ __entry->reserved_seg,
+ __entry->prefree_seg)
+);
+
TRACE_EVENT(f2fs_get_victim,
TP_PROTO(struct super_block *sb, int type, int gc_type,
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h
index 8ade3eb6c640..dcffedfac431 100644
--- a/include/trace/events/kvm.h
+++ b/include/trace/events/kvm.h
@@ -14,7 +14,9 @@
ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR), \
ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\
ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI), ERSN(PAPR_HCALL), \
- ERSN(S390_UCONTROL), ERSN(WATCHDOG), ERSN(S390_TSCH)
+ ERSN(S390_UCONTROL), ERSN(WATCHDOG), ERSN(S390_TSCH), ERSN(EPR),\
+ ERSN(SYSTEM_EVENT), ERSN(S390_STSI), ERSN(IOAPIC_EOI), \
+ ERSN(HYPERV)
TRACE_EVENT(kvm_userspace_exit,
TP_PROTO(__u32 reason, int errno),
diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h
index 4c2e4737d7bc..fec6291a6703 100644
--- a/include/trace/events/mmflags.h
+++ b/include/trace/events/mmflags.h
@@ -18,7 +18,6 @@
{(unsigned long)GFP_HIGHUSER_MOVABLE, "GFP_HIGHUSER_MOVABLE"},\
{(unsigned long)GFP_HIGHUSER, "GFP_HIGHUSER"}, \
{(unsigned long)GFP_USER, "GFP_USER"}, \
- {(unsigned long)GFP_TEMPORARY, "GFP_TEMPORARY"}, \
{(unsigned long)GFP_KERNEL_ACCOUNT, "GFP_KERNEL_ACCOUNT"}, \
{(unsigned long)GFP_KERNEL, "GFP_KERNEL"}, \
{(unsigned long)GFP_NOFS, "GFP_NOFS"}, \
diff --git a/include/trace/events/xdp.h b/include/trace/events/xdp.h
index 862575ac8da9..4e16c43fba10 100644
--- a/include/trace/events/xdp.h
+++ b/include/trace/events/xdp.h
@@ -138,11 +138,11 @@ DEFINE_EVENT_PRINT(xdp_redirect_template, xdp_redirect_map_err,
#define _trace_xdp_redirect_map(dev, xdp, fwd, map, idx) \
trace_xdp_redirect_map(dev, xdp, fwd ? fwd->ifindex : 0, \
- 0, map, idx);
+ 0, map, idx)
#define _trace_xdp_redirect_map_err(dev, xdp, fwd, map, idx, err) \
trace_xdp_redirect_map_err(dev, xdp, fwd ? fwd->ifindex : 0, \
- err, map, idx);
+ err, map, idx)
#endif /* _TRACE_XDP_H */
diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h
index 9aa74f317747..378230c163d5 100644
--- a/include/uapi/linux/btrfs.h
+++ b/include/uapi/linux/btrfs.h
@@ -255,13 +255,7 @@ struct btrfs_ioctl_fs_info_args {
#define BTRFS_FEATURE_INCOMPAT_DEFAULT_SUBVOL (1ULL << 1)
#define BTRFS_FEATURE_INCOMPAT_MIXED_GROUPS (1ULL << 2)
#define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZO (1ULL << 3)
-/*
- * some patches floated around with a second compression method
- * lets save that incompat here for when they do get in
- * Note we don't actually support it, we're just reserving the
- * number
- */
-#define BTRFS_FEATURE_INCOMPAT_COMPRESS_LZOv2 (1ULL << 4)
+#define BTRFS_FEATURE_INCOMPAT_COMPRESS_ZSTD (1ULL << 4)
/*
* older kernels tried to do bigger metadata blocks, but the
diff --git a/init/do_mounts.c b/init/do_mounts.c
index c2de5104aad2..f6d4dd764a52 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -373,7 +373,7 @@ static int __init do_mount_root(char *name, char *fs, int flags, void *data)
printk(KERN_INFO
"VFS: Mounted root (%s filesystem)%s on device %u:%u.\n",
s->s_type->name,
- s->s_flags & MS_RDONLY ? " readonly" : "",
+ sb_rdonly(s) ? " readonly" : "",
MAJOR(ROOT_DEV), MINOR(ROOT_DEV));
return 0;
}
@@ -420,8 +420,8 @@ retry:
#endif
panic("VFS: Unable to mount root fs on %s", b);
}
- if (!(flags & MS_RDONLY)) {
- flags |= MS_RDONLY;
+ if (!(flags & SB_RDONLY)) {
+ flags |= SB_RDONLY;
goto retry;
}
diff --git a/init/initramfs.c b/init/initramfs.c
index 8a532050043f..e64bf7b4c1ca 100644
--- a/init/initramfs.c
+++ b/init/initramfs.c
@@ -110,7 +110,7 @@ static void __init free_hash(void)
static long __init do_utime(char *filename, time_t mtime)
{
- struct timespec t[2];
+ struct timespec64 t[2];
t[0].tv_sec = mtime;
t[0].tv_nsec = 0;
diff --git a/ipc/compat.c b/ipc/compat.c
index 9b3c85f8a538..b17bf93d7b49 100644
--- a/ipc/compat.c
+++ b/ipc/compat.c
@@ -34,724 +34,48 @@
#include "util.h"
-struct compat_msgbuf {
- compat_long_t mtype;
- char mtext[1];
-};
-
-struct compat_ipc_perm {
- key_t key;
- __compat_uid_t uid;
- __compat_gid_t gid;
- __compat_uid_t cuid;
- __compat_gid_t cgid;
- compat_mode_t mode;
- unsigned short seq;
-};
-
-struct compat_semid_ds {
- struct compat_ipc_perm sem_perm;
- compat_time_t sem_otime;
- compat_time_t sem_ctime;
- compat_uptr_t sem_base;
- compat_uptr_t sem_pending;
- compat_uptr_t sem_pending_last;
- compat_uptr_t undo;
- unsigned short sem_nsems;
-};
-
-struct compat_msqid_ds {
- struct compat_ipc_perm msg_perm;
- compat_uptr_t msg_first;
- compat_uptr_t msg_last;
- compat_time_t msg_stime;
- compat_time_t msg_rtime;
- compat_time_t msg_ctime;
- compat_ulong_t msg_lcbytes;
- compat_ulong_t msg_lqbytes;
- unsigned short msg_cbytes;
- unsigned short msg_qnum;
- unsigned short msg_qbytes;
- compat_ipc_pid_t msg_lspid;
- compat_ipc_pid_t msg_lrpid;
-};
-
-struct compat_shmid_ds {
- struct compat_ipc_perm shm_perm;
- int shm_segsz;
- compat_time_t shm_atime;
- compat_time_t shm_dtime;
- compat_time_t shm_ctime;
- compat_ipc_pid_t shm_cpid;
- compat_ipc_pid_t shm_lpid;
- unsigned short shm_nattch;
- unsigned short shm_unused;
- compat_uptr_t shm_unused2;
- compat_uptr_t shm_unused3;
-};
-
-struct compat_ipc_kludge {
- compat_uptr_t msgp;
- compat_long_t msgtyp;
-};
-
-struct compat_shminfo64 {
- compat_ulong_t shmmax;
- compat_ulong_t shmmin;
- compat_ulong_t shmmni;
- compat_ulong_t shmseg;
- compat_ulong_t shmall;
- compat_ulong_t __unused1;
- compat_ulong_t __unused2;
- compat_ulong_t __unused3;
- compat_ulong_t __unused4;
-};
-
-struct compat_shm_info {
- compat_int_t used_ids;
- compat_ulong_t shm_tot, shm_rss, shm_swp;
- compat_ulong_t swap_attempts, swap_successes;
-};
-
-static inline int compat_ipc_parse_version(int *cmd)
-{
-#ifdef CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION
- int version = *cmd & IPC_64;
-
- /* this is tricky: architectures that have support for the old
- * ipc structures in 64 bit binaries need to have IPC_64 set
- * in cmd, the others need to have it cleared */
-#ifndef ipc_parse_version
- *cmd |= IPC_64;
-#else
- *cmd &= ~IPC_64;
-#endif
- return version;
-#else
- /* With the asm-generic APIs, we always use the 64-bit versions. */
- return IPC_64;
-#endif
-}
-
-static inline int __get_compat_ipc64_perm(struct ipc64_perm *p64,
- struct compat_ipc64_perm __user *up64)
-{
- int err;
-
- err = __get_user(p64->uid, &up64->uid);
- err |= __get_user(p64->gid, &up64->gid);
- err |= __get_user(p64->mode, &up64->mode);
- return err;
-}
-
-static inline int __get_compat_ipc_perm(struct ipc64_perm *p,
- struct compat_ipc_perm __user *up)
-{
- int err;
-
- err = __get_user(p->uid, &up->uid);
- err |= __get_user(p->gid, &up->gid);
- err |= __get_user(p->mode, &up->mode);
- return err;
-}
-
-static inline int __put_compat_ipc64_perm(struct ipc64_perm *p64,
- struct compat_ipc64_perm __user *up64)
+int get_compat_ipc64_perm(struct ipc64_perm *to,
+ struct compat_ipc64_perm __user *from)
{
- int err;
-
- err = __put_user(p64->key, &up64->key);
- err |= __put_user(p64->uid, &up64->uid);
- err |= __put_user(p64->gid, &up64->gid);
- err |= __put_user(p64->cuid, &up64->cuid);
- err |= __put_user(p64->cgid, &up64->cgid);
- err |= __put_user(p64->mode, &up64->mode);
- err |= __put_user(p64->seq, &up64->seq);
- return err;
-}
-
-static inline int __put_compat_ipc_perm(struct ipc64_perm *p,
- struct compat_ipc_perm __user *uip)
-{
- int err;
- __compat_uid_t u;
- __compat_gid_t g;
-
- err = __put_user(p->key, &uip->key);
- SET_UID(u, p->uid);
- err |= __put_user(u, &uip->uid);
- SET_GID(g, p->gid);
- err |= __put_user(g, &uip->gid);
- SET_UID(u, p->cuid);
- err |= __put_user(u, &uip->cuid);
- SET_GID(g, p->cgid);
- err |= __put_user(g, &uip->cgid);
- err |= __put_user(p->mode, &uip->mode);
- err |= __put_user(p->seq, &uip->seq);
- return err;
-}
-
-static inline int get_compat_semid64_ds(struct semid64_ds *sem64,
- struct compat_semid64_ds __user *up64)
-{
- if (!access_ok(VERIFY_READ, up64, sizeof(*up64)))
- return -EFAULT;
- return __get_compat_ipc64_perm(&sem64->sem_perm, &up64->sem_perm);
-}
-
-static inline int get_compat_semid_ds(struct semid64_ds *s,
- struct compat_semid_ds __user *up)
-{
- if (!access_ok(VERIFY_READ, up, sizeof(*up)))
+ struct compat_ipc64_perm v;
+ if (copy_from_user(&v, from, sizeof(v)))
return -EFAULT;
- return __get_compat_ipc_perm(&s->sem_perm, &up->sem_perm);
+ to->uid = v.uid;
+ to->gid = v.gid;
+ to->mode = v.mode;
+ return 0;
}
-static inline int put_compat_semid64_ds(struct semid64_ds *sem64,
- struct compat_semid64_ds __user *up64)
+int get_compat_ipc_perm(struct ipc64_perm *to,
+ struct compat_ipc_perm __user *from)
{
- int err;
-
- if (!access_ok(VERIFY_WRITE, up64, sizeof(*up64)))
+ struct compat_ipc_perm v;
+ if (copy_from_user(&v, from, sizeof(v)))
return -EFAULT;
- err = __put_compat_ipc64_perm(&sem64->sem_perm, &up64->sem_perm);
- err |= __put_user(sem64->sem_otime, &up64->sem_otime);
- err |= __put_user(sem64->sem_ctime, &up64->sem_ctime);
- err |= __put_user(sem64->sem_nsems, &up64->sem_nsems);
- return err;
+ to->uid = v.uid;
+ to->gid = v.gid;
+ to->mode = v.mode;
+ return 0;
}
-static inline int put_compat_semid_ds(struct semid64_ds *s,
- struct compat_semid_ds __user *up)
+void to_compat_ipc64_perm(struct compat_ipc64_perm *to, struct ipc64_perm *from)
{
- int err;
-
- if (!access_ok(VERIFY_WRITE, up, sizeof(*up)))
- return -EFAULT;
- err = __put_compat_ipc_perm(&s->sem_perm, &up->sem_perm);
- err |= __put_user(s->sem_otime, &up->sem_otime);
- err |= __put_user(s->sem_ctime, &up->sem_ctime);
- err |= __put_user(s->sem_nsems, &up->sem_nsems);
- return err;
+ to->key = from->key;
+ to->uid = from->uid;
+ to->gid = from->gid;
+ to->cuid = from->cuid;
+ to->cgid = from->cgid;
+ to->mode = from->mode;
+ to->seq = from->seq;
}
-static long do_compat_semctl(int first, int second, int third, u32 pad)
+void to_compat_ipc_perm(struct compat_ipc_perm *to, struct ipc64_perm *from)
{
- unsigned long fourth;
- int err, err2;
- struct semid64_ds sem64;
- struct semid64_ds __user *up64;
- int version = compat_ipc_parse_version(&third);
-
- memset(&sem64, 0, sizeof(sem64));
-
- if ((third & (~IPC_64)) == SETVAL)
-#ifdef __BIG_ENDIAN
- fourth = (unsigned long)pad << 32;
-#else
- fourth = pad;
-#endif
- else
- fourth = (unsigned long)compat_ptr(pad);
- switch (third & (~IPC_64)) {
- case IPC_INFO:
- case IPC_RMID:
- case SEM_INFO:
- case GETVAL:
- case GETPID:
- case GETNCNT:
- case GETZCNT:
- case GETALL:
- case SETVAL:
- case SETALL:
- err = sys_semctl(first, second, third, fourth);
- break;
-
- case IPC_STAT:
- case SEM_STAT:
- up64 = compat_alloc_user_space(sizeof(sem64));
- fourth = (unsigned long)up64;
- err = sys_semctl(first, second, third, fourth);
- if (err < 0)
- break;
- if (copy_from_user(&sem64, up64, sizeof(sem64)))
- err2 = -EFAULT;
- else if (version == IPC_64)
- err2 = put_compat_semid64_ds(&sem64, compat_ptr(pad));
- else
- err2 = put_compat_semid_ds(&sem64, compat_ptr(pad));
- if (err2)
- err = -EFAULT;
- break;
-
- case IPC_SET:
- if (version == IPC_64)
- err = get_compat_semid64_ds(&sem64, compat_ptr(pad));
- else
- err = get_compat_semid_ds(&sem64, compat_ptr(pad));
-
- up64 = compat_alloc_user_space(sizeof(sem64));
- if (copy_to_user(up64, &sem64, sizeof(sem64)))
- err = -EFAULT;
- if (err)
- break;
-
- fourth = (unsigned long)up64;
- err = sys_semctl(first, second, third, fourth);
- break;
-
- default:
- err = -EINVAL;
- break;
- }
- return err;
-}
-
-static long compat_do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
-{
- struct compat_msgbuf __user *msgp = dest;
- size_t msgsz;
-
- if (put_user(msg->m_type, &msgp->mtype))
- return -EFAULT;
-
- msgsz = (bufsz > msg->m_ts) ? msg->m_ts : bufsz;
- if (store_msg(msgp->mtext, msg, msgsz))
- return -EFAULT;
- return msgsz;
-}
-
-#ifndef COMPAT_SHMLBA
-#define COMPAT_SHMLBA SHMLBA
-#endif
-
-#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC
-COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
- u32, third, compat_uptr_t, ptr, u32, fifth)
-{
- int version;
- u32 pad;
-
- version = call >> 16; /* hack for backward compatibility */
- call &= 0xffff;
-
- switch (call) {
- case SEMOP:
- /* struct sembuf is the same on 32 and 64bit :)) */
- return sys_semtimedop(first, compat_ptr(ptr), second, NULL);
- case SEMTIMEDOP:
- return compat_sys_semtimedop(first, compat_ptr(ptr), second,
- compat_ptr(fifth));
- case SEMGET:
- return sys_semget(first, second, third);
- case SEMCTL:
- if (!ptr)
- return -EINVAL;
- if (get_user(pad, (u32 __user *) compat_ptr(ptr)))
- return -EFAULT;
- return do_compat_semctl(first, second, third, pad);
-
- case MSGSND: {
- struct compat_msgbuf __user *up = compat_ptr(ptr);
- compat_long_t type;
-
- if (first < 0 || second < 0)
- return -EINVAL;
-
- if (get_user(type, &up->mtype))
- return -EFAULT;
-
- return do_msgsnd(first, type, up->mtext, second, third);
- }
- case MSGRCV: {
- void __user *uptr = compat_ptr(ptr);
-
- if (first < 0 || second < 0)
- return -EINVAL;
-
- if (!version) {
- struct compat_ipc_kludge ipck;
- if (!uptr)
- return -EINVAL;
- if (copy_from_user(&ipck, uptr, sizeof(ipck)))
- return -EFAULT;
- uptr = compat_ptr(ipck.msgp);
- fifth = ipck.msgtyp;
- }
- return do_msgrcv(first, uptr, second, (s32)fifth, third,
- compat_do_msg_fill);
- }
- case MSGGET:
- return sys_msgget(first, second);
- case MSGCTL:
- return compat_sys_msgctl(first, second, compat_ptr(ptr));
-
- case SHMAT: {
- int err;
- unsigned long raddr;
-
- if (version == 1)
- return -EINVAL;
- err = do_shmat(first, compat_ptr(ptr), second, &raddr,
- COMPAT_SHMLBA);
- if (err < 0)
- return err;
- return put_user(raddr, (compat_ulong_t *)compat_ptr(third));
- }
- case SHMDT:
- return sys_shmdt(compat_ptr(ptr));
- case SHMGET:
- return sys_shmget(first, (unsigned)second, third);
- case SHMCTL:
- return compat_sys_shmctl(first, second, compat_ptr(ptr));
- }
-
- return -ENOSYS;
-}
-#endif
-
-COMPAT_SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, int, arg)
-{
- return do_compat_semctl(semid, semnum, cmd, arg);
-}
-
-COMPAT_SYSCALL_DEFINE4(msgsnd, int, msqid, compat_uptr_t, msgp,
- compat_ssize_t, msgsz, int, msgflg)
-{
- struct compat_msgbuf __user *up = compat_ptr(msgp);
- compat_long_t mtype;
-
- if (get_user(mtype, &up->mtype))
- return -EFAULT;
- return do_msgsnd(msqid, mtype, up->mtext, (ssize_t)msgsz, msgflg);
-}
-
-COMPAT_SYSCALL_DEFINE5(msgrcv, int, msqid, compat_uptr_t, msgp,
- compat_ssize_t, msgsz, compat_long_t, msgtyp, int, msgflg)
-{
- return do_msgrcv(msqid, compat_ptr(msgp), (ssize_t)msgsz, (long)msgtyp,
- msgflg, compat_do_msg_fill);
-}
-
-static inline int get_compat_msqid64(struct msqid64_ds *m64,
- struct compat_msqid64_ds __user *up64)
-{
- int err;
-
- if (!access_ok(VERIFY_READ, up64, sizeof(*up64)))
- return -EFAULT;
- err = __get_compat_ipc64_perm(&m64->msg_perm, &up64->msg_perm);
- err |= __get_user(m64->msg_qbytes, &up64->msg_qbytes);
- return err;
-}
-
-static inline int get_compat_msqid(struct msqid64_ds *m,
- struct compat_msqid_ds __user *up)
-{
- int err;
-
- if (!access_ok(VERIFY_READ, up, sizeof(*up)))
- return -EFAULT;
- err = __get_compat_ipc_perm(&m->msg_perm, &up->msg_perm);
- err |= __get_user(m->msg_qbytes, &up->msg_qbytes);
- return err;
-}
-
-static inline int put_compat_msqid64_ds(struct msqid64_ds *m64,
- struct compat_msqid64_ds __user *up64)
-{
- int err;
-
- if (!access_ok(VERIFY_WRITE, up64, sizeof(*up64)))
- return -EFAULT;
- err = __put_compat_ipc64_perm(&m64->msg_perm, &up64->msg_perm);
- err |= __put_user(m64->msg_stime, &up64->msg_stime);
- err |= __put_user(m64->msg_rtime, &up64->msg_rtime);
- err |= __put_user(m64->msg_ctime, &up64->msg_ctime);
- err |= __put_user(m64->msg_cbytes, &up64->msg_cbytes);
- err |= __put_user(m64->msg_qnum, &up64->msg_qnum);
- err |= __put_user(m64->msg_qbytes, &up64->msg_qbytes);
- err |= __put_user(m64->msg_lspid, &up64->msg_lspid);
- err |= __put_user(m64->msg_lrpid, &up64->msg_lrpid);
- return err;
-}
-
-static inline int put_compat_msqid_ds(struct msqid64_ds *m,
- struct compat_msqid_ds __user *up)
-{
- int err;
-
- if (!access_ok(VERIFY_WRITE, up, sizeof(*up)))
- return -EFAULT;
- err = __put_compat_ipc_perm(&m->msg_perm, &up->msg_perm);
- err |= __put_user(m->msg_stime, &up->msg_stime);
- err |= __put_user(m->msg_rtime, &up->msg_rtime);
- err |= __put_user(m->msg_ctime, &up->msg_ctime);
- err |= __put_user(m->msg_cbytes, &up->msg_cbytes);
- err |= __put_user(m->msg_qnum, &up->msg_qnum);
- err |= __put_user(m->msg_qbytes, &up->msg_qbytes);
- err |= __put_user(m->msg_lspid, &up->msg_lspid);
- err |= __put_user(m->msg_lrpid, &up->msg_lrpid);
- return err;
-}
-
-COMPAT_SYSCALL_DEFINE3(msgctl, int, first, int, second, void __user *, uptr)
-{
- int err, err2;
- struct msqid64_ds m64;
- int version = compat_ipc_parse_version(&second);
- void __user *p;
-
- memset(&m64, 0, sizeof(m64));
-
- switch (second & (~IPC_64)) {
- case IPC_INFO:
- case IPC_RMID:
- case MSG_INFO:
- err = sys_msgctl(first, second, uptr);
- break;
-
- case IPC_SET:
- if (version == IPC_64)
- err = get_compat_msqid64(&m64, uptr);
- else
- err = get_compat_msqid(&m64, uptr);
-
- if (err)
- break;
- p = compat_alloc_user_space(sizeof(m64));
- if (copy_to_user(p, &m64, sizeof(m64)))
- err = -EFAULT;
- else
- err = sys_msgctl(first, second, p);
- break;
-
- case IPC_STAT:
- case MSG_STAT:
- p = compat_alloc_user_space(sizeof(m64));
- err = sys_msgctl(first, second, p);
- if (err < 0)
- break;
- if (copy_from_user(&m64, p, sizeof(m64)))
- err2 = -EFAULT;
- else if (version == IPC_64)
- err2 = put_compat_msqid64_ds(&m64, uptr);
- else
- err2 = put_compat_msqid_ds(&m64, uptr);
- if (err2)
- err = -EFAULT;
- break;
-
- default:
- err = -EINVAL;
- break;
- }
- return err;
-}
-
-COMPAT_SYSCALL_DEFINE3(shmat, int, shmid, compat_uptr_t, shmaddr, int, shmflg)
-{
- unsigned long ret;
- long err;
-
- err = do_shmat(shmid, compat_ptr(shmaddr), shmflg, &ret, COMPAT_SHMLBA);
- if (err)
- return err;
- force_successful_syscall_return();
- return (long)ret;
-}
-
-static inline int get_compat_shmid64_ds(struct shmid64_ds *sem64,
- struct compat_shmid64_ds __user *up64)
-{
- if (!access_ok(VERIFY_READ, up64, sizeof(*up64)))
- return -EFAULT;
- return __get_compat_ipc64_perm(&sem64->shm_perm, &up64->shm_perm);
-}
-
-static inline int get_compat_shmid_ds(struct shmid64_ds *s,
- struct compat_shmid_ds __user *up)
-{
- if (!access_ok(VERIFY_READ, up, sizeof(*up)))
- return -EFAULT;
- return __get_compat_ipc_perm(&s->shm_perm, &up->shm_perm);
-}
-
-static inline int put_compat_shmid64_ds(struct shmid64_ds *sem64,
- struct compat_shmid64_ds __user *up64)
-{
- int err;
-
- if (!access_ok(VERIFY_WRITE, up64, sizeof(*up64)))
- return -EFAULT;
- err = __put_compat_ipc64_perm(&sem64->shm_perm, &up64->shm_perm);
- err |= __put_user(sem64->shm_atime, &up64->shm_atime);
- err |= __put_user(sem64->shm_dtime, &up64->shm_dtime);
- err |= __put_user(sem64->shm_ctime, &up64->shm_ctime);
- err |= __put_user(sem64->shm_segsz, &up64->shm_segsz);
- err |= __put_user(sem64->shm_nattch, &up64->shm_nattch);
- err |= __put_user(sem64->shm_cpid, &up64->shm_cpid);
- err |= __put_user(sem64->shm_lpid, &up64->shm_lpid);
- return err;
-}
-
-static inline int put_compat_shmid_ds(struct shmid64_ds *s,
- struct compat_shmid_ds __user *up)
-{
- int err;
-
- if (!access_ok(VERIFY_WRITE, up, sizeof(*up)))
- return -EFAULT;
- err = __put_compat_ipc_perm(&s->shm_perm, &up->shm_perm);
- err |= __put_user(s->shm_atime, &up->shm_atime);
- err |= __put_user(s->shm_dtime, &up->shm_dtime);
- err |= __put_user(s->shm_ctime, &up->shm_ctime);
- err |= __put_user(s->shm_segsz, &up->shm_segsz);
- err |= __put_user(s->shm_nattch, &up->shm_nattch);
- err |= __put_user(s->shm_cpid, &up->shm_cpid);
- err |= __put_user(s->shm_lpid, &up->shm_lpid);
- return err;
-}
-
-static inline int put_compat_shminfo64(struct shminfo64 *smi,
- struct compat_shminfo64 __user *up64)
-{
- int err;
-
- if (!access_ok(VERIFY_WRITE, up64, sizeof(*up64)))
- return -EFAULT;
- if (smi->shmmax > INT_MAX)
- smi->shmmax = INT_MAX;
- err = __put_user(smi->shmmax, &up64->shmmax);
- err |= __put_user(smi->shmmin, &up64->shmmin);
- err |= __put_user(smi->shmmni, &up64->shmmni);
- err |= __put_user(smi->shmseg, &up64->shmseg);
- err |= __put_user(smi->shmall, &up64->shmall);
- return err;
-}
-
-static inline int put_compat_shminfo(struct shminfo64 *smi,
- struct shminfo __user *up)
-{
- int err;
-
- if (!access_ok(VERIFY_WRITE, up, sizeof(*up)))
- return -EFAULT;
- if (smi->shmmax > INT_MAX)
- smi->shmmax = INT_MAX;
- err = __put_user(smi->shmmax, &up->shmmax);
- err |= __put_user(smi->shmmin, &up->shmmin);
- err |= __put_user(smi->shmmni, &up->shmmni);
- err |= __put_user(smi->shmseg, &up->shmseg);
- err |= __put_user(smi->shmall, &up->shmall);
- return err;
-}
-
-static inline int put_compat_shm_info(struct shm_info __user *ip,
- struct compat_shm_info __user *uip)
-{
- int err;
- struct shm_info si;
-
- if (!access_ok(VERIFY_WRITE, uip, sizeof(*uip)) ||
- copy_from_user(&si, ip, sizeof(si)))
- return -EFAULT;
- err = __put_user(si.used_ids, &uip->used_ids);
- err |= __put_user(si.shm_tot, &uip->shm_tot);
- err |= __put_user(si.shm_rss, &uip->shm_rss);
- err |= __put_user(si.shm_swp, &uip->shm_swp);
- err |= __put_user(si.swap_attempts, &uip->swap_attempts);
- err |= __put_user(si.swap_successes, &uip->swap_successes);
- return err;
-}
-
-COMPAT_SYSCALL_DEFINE3(shmctl, int, first, int, second, void __user *, uptr)
-{
- void __user *p;
- struct shmid64_ds sem64;
- struct shminfo64 smi;
- int err, err2;
- int version = compat_ipc_parse_version(&second);
-
- memset(&sem64, 0, sizeof(sem64));
-
- switch (second & (~IPC_64)) {
- case IPC_RMID:
- case SHM_LOCK:
- case SHM_UNLOCK:
- err = sys_shmctl(first, second, uptr);
- break;
-
- case IPC_INFO:
- p = compat_alloc_user_space(sizeof(smi));
- err = sys_shmctl(first, second, p);
- if (err < 0)
- break;
- if (copy_from_user(&smi, p, sizeof(smi)))
- err2 = -EFAULT;
- else if (version == IPC_64)
- err2 = put_compat_shminfo64(&smi, uptr);
- else
- err2 = put_compat_shminfo(&smi, uptr);
- if (err2)
- err = -EFAULT;
- break;
-
-
- case IPC_SET:
- if (version == IPC_64)
- err = get_compat_shmid64_ds(&sem64, uptr);
- else
- err = get_compat_shmid_ds(&sem64, uptr);
-
- if (err)
- break;
- p = compat_alloc_user_space(sizeof(sem64));
- if (copy_to_user(p, &sem64, sizeof(sem64)))
- err = -EFAULT;
- else
- err = sys_shmctl(first, second, p);
- break;
-
- case IPC_STAT:
- case SHM_STAT:
- p = compat_alloc_user_space(sizeof(sem64));
- err = sys_shmctl(first, second, p);
- if (err < 0)
- break;
- if (copy_from_user(&sem64, p, sizeof(sem64)))
- err2 = -EFAULT;
- else if (version == IPC_64)
- err2 = put_compat_shmid64_ds(&sem64, uptr);
- else
- err2 = put_compat_shmid_ds(&sem64, uptr);
- if (err2)
- err = -EFAULT;
- break;
-
- case SHM_INFO:
- p = compat_alloc_user_space(sizeof(struct shm_info));
- err = sys_shmctl(first, second, p);
- if (err < 0)
- break;
- err2 = put_compat_shm_info(p, uptr);
- if (err2)
- err = -EFAULT;
- break;
-
- default:
- err = -EINVAL;
- break;
- }
- return err;
-}
-
-COMPAT_SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsems,
- unsigned, nsops,
- const struct compat_timespec __user *, timeout)
-{
- struct timespec __user *ts64;
- if (compat_convert_timespec(&ts64, timeout))
- return -EFAULT;
- return sys_semtimedop(semid, tsems, nsops, ts64);
+ to->key = from->key;
+ SET_UID(to->uid, from->uid);
+ SET_GID(to->gid, from->gid);
+ SET_UID(to->cuid, from->cuid);
+ SET_GID(to->cgid, from->cgid);
+ to->mode = from->mode;
+ to->seq = from->seq;
}
diff --git a/ipc/mqueue.c b/ipc/mqueue.c
index eb1391b52c6f..d24025626310 100644
--- a/ipc/mqueue.c
+++ b/ipc/mqueue.c
@@ -668,11 +668,11 @@ static void __do_notify(struct mqueue_inode_info *info)
}
static int prepare_timeout(const struct timespec __user *u_abs_timeout,
- struct timespec *ts)
+ struct timespec64 *ts)
{
- if (copy_from_user(ts, u_abs_timeout, sizeof(struct timespec)))
+ if (get_timespec64(ts, u_abs_timeout))
return -EFAULT;
- if (!timespec_valid(ts))
+ if (!timespec64_valid(ts))
return -EINVAL;
return 0;
}
@@ -962,7 +962,7 @@ static inline void pipelined_receive(struct wake_q_head *wake_q,
static int do_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr,
size_t msg_len, unsigned int msg_prio,
- struct timespec *ts)
+ struct timespec64 *ts)
{
struct fd f;
struct inode *inode;
@@ -979,7 +979,7 @@ static int do_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr,
return -EINVAL;
if (ts) {
- expires = timespec_to_ktime(*ts);
+ expires = timespec64_to_ktime(*ts);
timeout = &expires;
}
@@ -1080,7 +1080,7 @@ out:
static int do_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
size_t msg_len, unsigned int __user *u_msg_prio,
- struct timespec *ts)
+ struct timespec64 *ts)
{
ssize_t ret;
struct msg_msg *msg_ptr;
@@ -1092,7 +1092,7 @@ static int do_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr,
struct posix_msg_tree_node *new_leaf = NULL;
if (ts) {
- expires = timespec_to_ktime(*ts);
+ expires = timespec64_to_ktime(*ts);
timeout = &expires;
}
@@ -1184,7 +1184,7 @@ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr,
size_t, msg_len, unsigned int, msg_prio,
const struct timespec __user *, u_abs_timeout)
{
- struct timespec ts, *p = NULL;
+ struct timespec64 ts, *p = NULL;
if (u_abs_timeout) {
int res = prepare_timeout(u_abs_timeout, &ts);
if (res)
@@ -1198,7 +1198,7 @@ SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr,
size_t, msg_len, unsigned int __user *, u_msg_prio,
const struct timespec __user *, u_abs_timeout)
{
- struct timespec ts, *p = NULL;
+ struct timespec64 ts, *p = NULL;
if (u_abs_timeout) {
int res = prepare_timeout(u_abs_timeout, &ts);
if (res)
@@ -1475,11 +1475,11 @@ COMPAT_SYSCALL_DEFINE4(mq_open, const char __user *, u_name,
}
static int compat_prepare_timeout(const struct compat_timespec __user *p,
- struct timespec *ts)
+ struct timespec64 *ts)
{
- if (compat_get_timespec(ts, p))
+ if (compat_get_timespec64(ts, p))
return -EFAULT;
- if (!timespec_valid(ts))
+ if (!timespec64_valid(ts))
return -EINVAL;
return 0;
}
@@ -1489,7 +1489,7 @@ COMPAT_SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes,
compat_size_t, msg_len, unsigned int, msg_prio,
const struct compat_timespec __user *, u_abs_timeout)
{
- struct timespec ts, *p = NULL;
+ struct timespec64 ts, *p = NULL;
if (u_abs_timeout) {
int res = compat_prepare_timeout(u_abs_timeout, &ts);
if (res)
@@ -1504,7 +1504,7 @@ COMPAT_SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes,
compat_size_t, msg_len, unsigned int __user *, u_msg_prio,
const struct compat_timespec __user *, u_abs_timeout)
{
- struct timespec ts, *p = NULL;
+ struct timespec64 ts, *p = NULL;
if (u_abs_timeout) {
int res = compat_prepare_timeout(u_abs_timeout, &ts);
if (res)
diff --git a/ipc/msg.c b/ipc/msg.c
index df82bc9a5531..06be5a9adfa4 100644
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -133,7 +133,7 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params)
}
msq->q_stime = msq->q_rtime = 0;
- msq->q_ctime = get_seconds();
+ msq->q_ctime = ktime_get_real_seconds();
msq->q_cbytes = msq->q_qnum = 0;
msq->q_qbytes = ns->msg_ctlmnb;
msq->q_lspid = msq->q_lrpid = 0;
@@ -361,23 +361,17 @@ copy_msqid_from_user(struct msqid64_ds *out, void __user *buf, int version)
* NOTE: no locks must be held, the rwsem is taken inside this function.
*/
static int msgctl_down(struct ipc_namespace *ns, int msqid, int cmd,
- struct msqid_ds __user *buf, int version)
+ struct msqid64_ds *msqid64)
{
struct kern_ipc_perm *ipcp;
- struct msqid64_ds uninitialized_var(msqid64);
struct msg_queue *msq;
int err;
- if (cmd == IPC_SET) {
- if (copy_msqid_from_user(&msqid64, buf, version))
- return -EFAULT;
- }
-
down_write(&msg_ids(ns).rwsem);
rcu_read_lock();
ipcp = ipcctl_pre_down_nolock(ns, &msg_ids(ns), msqid, cmd,
- &msqid64.msg_perm, msqid64.msg_qbytes);
+ &msqid64->msg_perm, msqid64->msg_qbytes);
if (IS_ERR(ipcp)) {
err = PTR_ERR(ipcp);
goto out_unlock1;
@@ -399,20 +393,20 @@ static int msgctl_down(struct ipc_namespace *ns, int msqid, int cmd,
{
DEFINE_WAKE_Q(wake_q);
- if (msqid64.msg_qbytes > ns->msg_ctlmnb &&
+ if (msqid64->msg_qbytes > ns->msg_ctlmnb &&
!capable(CAP_SYS_RESOURCE)) {
err = -EPERM;
goto out_unlock1;
}
ipc_lock_object(&msq->q_perm);
- err = ipc_update_perm(&msqid64.msg_perm, ipcp);
+ err = ipc_update_perm(&msqid64->msg_perm, ipcp);
if (err)
goto out_unlock0;
- msq->q_qbytes = msqid64.msg_qbytes;
+ msq->q_qbytes = msqid64->msg_qbytes;
- msq->q_ctime = get_seconds();
+ msq->q_ctime = ktime_get_real_seconds();
/*
* Sleeping receivers might be excluded by
* stricter permissions.
@@ -442,111 +436,89 @@ out_up:
return err;
}
-static int msgctl_nolock(struct ipc_namespace *ns, int msqid,
- int cmd, int version, void __user *buf)
+static int msgctl_info(struct ipc_namespace *ns, int msqid,
+ int cmd, struct msginfo *msginfo)
{
int err;
- struct msg_queue *msq;
-
- switch (cmd) {
- case IPC_INFO:
- case MSG_INFO:
- {
- struct msginfo msginfo;
- int max_id;
-
- if (!buf)
- return -EFAULT;
-
- /*
- * We must not return kernel stack data.
- * due to padding, it's not enough
- * to set all member fields.
- */
- err = security_msg_queue_msgctl(NULL, cmd);
- if (err)
- return err;
+ int max_id;
- memset(&msginfo, 0, sizeof(msginfo));
- msginfo.msgmni = ns->msg_ctlmni;
- msginfo.msgmax = ns->msg_ctlmax;
- msginfo.msgmnb = ns->msg_ctlmnb;
- msginfo.msgssz = MSGSSZ;
- msginfo.msgseg = MSGSEG;
- down_read(&msg_ids(ns).rwsem);
- if (cmd == MSG_INFO) {
- msginfo.msgpool = msg_ids(ns).in_use;
- msginfo.msgmap = atomic_read(&ns->msg_hdrs);
- msginfo.msgtql = atomic_read(&ns->msg_bytes);
- } else {
- msginfo.msgmap = MSGMAP;
- msginfo.msgpool = MSGPOOL;
- msginfo.msgtql = MSGTQL;
- }
- max_id = ipc_get_maxid(&msg_ids(ns));
- up_read(&msg_ids(ns).rwsem);
- if (copy_to_user(buf, &msginfo, sizeof(struct msginfo)))
- return -EFAULT;
- return (max_id < 0) ? 0 : max_id;
+ /*
+ * We must not return kernel stack data.
+ * due to padding, it's not enough
+ * to set all member fields.
+ */
+ err = security_msg_queue_msgctl(NULL, cmd);
+ if (err)
+ return err;
+
+ memset(msginfo, 0, sizeof(*msginfo));
+ msginfo->msgmni = ns->msg_ctlmni;
+ msginfo->msgmax = ns->msg_ctlmax;
+ msginfo->msgmnb = ns->msg_ctlmnb;
+ msginfo->msgssz = MSGSSZ;
+ msginfo->msgseg = MSGSEG;
+ down_read(&msg_ids(ns).rwsem);
+ if (cmd == MSG_INFO) {
+ msginfo->msgpool = msg_ids(ns).in_use;
+ msginfo->msgmap = atomic_read(&ns->msg_hdrs);
+ msginfo->msgtql = atomic_read(&ns->msg_bytes);
+ } else {
+ msginfo->msgmap = MSGMAP;
+ msginfo->msgpool = MSGPOOL;
+ msginfo->msgtql = MSGTQL;
}
+ max_id = ipc_get_maxid(&msg_ids(ns));
+ up_read(&msg_ids(ns).rwsem);
+ return (max_id < 0) ? 0 : max_id;
+}
- case MSG_STAT:
- case IPC_STAT:
- {
- struct msqid64_ds tbuf;
- int success_return;
-
- if (!buf)
- return -EFAULT;
-
- memset(&tbuf, 0, sizeof(tbuf));
+static int msgctl_stat(struct ipc_namespace *ns, int msqid,
+ int cmd, struct msqid64_ds *p)
+{
+ int err;
+ struct msg_queue *msq;
+ int success_return;
- rcu_read_lock();
- if (cmd == MSG_STAT) {
- msq = msq_obtain_object(ns, msqid);
- if (IS_ERR(msq)) {
- err = PTR_ERR(msq);
- goto out_unlock;
- }
- success_return = msq->q_perm.id;
- } else {
- msq = msq_obtain_object_check(ns, msqid);
- if (IS_ERR(msq)) {
- err = PTR_ERR(msq);
- goto out_unlock;
- }
- success_return = 0;
- }
+ memset(p, 0, sizeof(*p));
- err = -EACCES;
- if (ipcperms(ns, &msq->q_perm, S_IRUGO))
+ rcu_read_lock();
+ if (cmd == MSG_STAT) {
+ msq = msq_obtain_object(ns, msqid);
+ if (IS_ERR(msq)) {
+ err = PTR_ERR(msq);
goto out_unlock;
-
- err = security_msg_queue_msgctl(msq, cmd);
- if (err)
+ }
+ success_return = msq->q_perm.id;
+ } else {
+ msq = msq_obtain_object_check(ns, msqid);
+ if (IS_ERR(msq)) {
+ err = PTR_ERR(msq);
goto out_unlock;
+ }
+ success_return = 0;
+ }
- kernel_to_ipc64_perm(&msq->q_perm, &tbuf.msg_perm);
- tbuf.msg_stime = msq->q_stime;
- tbuf.msg_rtime = msq->q_rtime;
- tbuf.msg_ctime = msq->q_ctime;
- tbuf.msg_cbytes = msq->q_cbytes;
- tbuf.msg_qnum = msq->q_qnum;
- tbuf.msg_qbytes = msq->q_qbytes;
- tbuf.msg_lspid = msq->q_lspid;
- tbuf.msg_lrpid = msq->q_lrpid;
- rcu_read_unlock();
+ err = -EACCES;
+ if (ipcperms(ns, &msq->q_perm, S_IRUGO))
+ goto out_unlock;
- if (copy_msqid_to_user(buf, &tbuf, version))
- return -EFAULT;
- return success_return;
- }
+ err = security_msg_queue_msgctl(msq, cmd);
+ if (err)
+ goto out_unlock;
+
+ kernel_to_ipc64_perm(&msq->q_perm, &p->msg_perm);
+ p->msg_stime = msq->q_stime;
+ p->msg_rtime = msq->q_rtime;
+ p->msg_ctime = msq->q_ctime;
+ p->msg_cbytes = msq->q_cbytes;
+ p->msg_qnum = msq->q_qnum;
+ p->msg_qbytes = msq->q_qbytes;
+ p->msg_lspid = msq->q_lspid;
+ p->msg_lrpid = msq->q_lrpid;
+ rcu_read_unlock();
- default:
- return -EINVAL;
- }
+ return success_return;
- return err;
out_unlock:
rcu_read_unlock();
return err;
@@ -556,6 +528,8 @@ SYSCALL_DEFINE3(msgctl, int, msqid, int, cmd, struct msqid_ds __user *, buf)
{
int version;
struct ipc_namespace *ns;
+ struct msqid64_ds msqid64;
+ int err;
if (msqid < 0 || cmd < 0)
return -EINVAL;
@@ -565,18 +539,147 @@ SYSCALL_DEFINE3(msgctl, int, msqid, int, cmd, struct msqid_ds __user *, buf)
switch (cmd) {
case IPC_INFO:
- case MSG_INFO:
+ case MSG_INFO: {
+ struct msginfo msginfo;
+ err = msgctl_info(ns, msqid, cmd, &msginfo);
+ if (err < 0)
+ return err;
+ if (copy_to_user(buf, &msginfo, sizeof(struct msginfo)))
+ err = -EFAULT;
+ return err;
+ }
case MSG_STAT: /* msqid is an index rather than a msg queue id */
case IPC_STAT:
- return msgctl_nolock(ns, msqid, cmd, version, buf);
+ err = msgctl_stat(ns, msqid, cmd, &msqid64);
+ if (err < 0)
+ return err;
+ if (copy_msqid_to_user(buf, &msqid64, version))
+ err = -EFAULT;
+ return err;
case IPC_SET:
+ if (copy_msqid_from_user(&msqid64, buf, version))
+ return -EFAULT;
+ /* fallthru */
case IPC_RMID:
- return msgctl_down(ns, msqid, cmd, buf, version);
+ return msgctl_down(ns, msqid, cmd, &msqid64);
default:
return -EINVAL;
}
}
+#ifdef CONFIG_COMPAT
+
+struct compat_msqid_ds {
+ struct compat_ipc_perm msg_perm;
+ compat_uptr_t msg_first;
+ compat_uptr_t msg_last;
+ compat_time_t msg_stime;
+ compat_time_t msg_rtime;
+ compat_time_t msg_ctime;
+ compat_ulong_t msg_lcbytes;
+ compat_ulong_t msg_lqbytes;
+ unsigned short msg_cbytes;
+ unsigned short msg_qnum;
+ unsigned short msg_qbytes;
+ compat_ipc_pid_t msg_lspid;
+ compat_ipc_pid_t msg_lrpid;
+};
+
+static int copy_compat_msqid_from_user(struct msqid64_ds *out, void __user *buf,
+ int version)
+{
+ memset(out, 0, sizeof(*out));
+ if (version == IPC_64) {
+ struct compat_msqid64_ds *p = buf;
+ if (get_compat_ipc64_perm(&out->msg_perm, &p->msg_perm))
+ return -EFAULT;
+ if (get_user(out->msg_qbytes, &p->msg_qbytes))
+ return -EFAULT;
+ } else {
+ struct compat_msqid_ds *p = buf;
+ if (get_compat_ipc_perm(&out->msg_perm, &p->msg_perm))
+ return -EFAULT;
+ if (get_user(out->msg_qbytes, &p->msg_qbytes))
+ return -EFAULT;
+ }
+ return 0;
+}
+
+static int copy_compat_msqid_to_user(void __user *buf, struct msqid64_ds *in,
+ int version)
+{
+ if (version == IPC_64) {
+ struct compat_msqid64_ds v;
+ memset(&v, 0, sizeof(v));
+ to_compat_ipc64_perm(&v.msg_perm, &in->msg_perm);
+ v.msg_stime = in->msg_stime;
+ v.msg_rtime = in->msg_rtime;
+ v.msg_ctime = in->msg_ctime;
+ v.msg_cbytes = in->msg_cbytes;
+ v.msg_qnum = in->msg_qnum;
+ v.msg_qbytes = in->msg_qbytes;
+ v.msg_lspid = in->msg_lspid;
+ v.msg_lrpid = in->msg_lrpid;
+ return copy_to_user(buf, &v, sizeof(v));
+ } else {
+ struct compat_msqid_ds v;
+ memset(&v, 0, sizeof(v));
+ to_compat_ipc_perm(&v.msg_perm, &in->msg_perm);
+ v.msg_stime = in->msg_stime;
+ v.msg_rtime = in->msg_rtime;
+ v.msg_ctime = in->msg_ctime;
+ v.msg_cbytes = in->msg_cbytes;
+ v.msg_qnum = in->msg_qnum;
+ v.msg_qbytes = in->msg_qbytes;
+ v.msg_lspid = in->msg_lspid;
+ v.msg_lrpid = in->msg_lrpid;
+ return copy_to_user(buf, &v, sizeof(v));
+ }
+}
+
+COMPAT_SYSCALL_DEFINE3(msgctl, int, msqid, int, cmd, void __user *, uptr)
+{
+ struct ipc_namespace *ns;
+ int err;
+ struct msqid64_ds msqid64;
+ int version = compat_ipc_parse_version(&cmd);
+
+ ns = current->nsproxy->ipc_ns;
+
+ if (msqid < 0 || cmd < 0)
+ return -EINVAL;
+
+ switch (cmd & (~IPC_64)) {
+ case IPC_INFO:
+ case MSG_INFO: {
+ struct msginfo msginfo;
+ err = msgctl_info(ns, msqid, cmd, &msginfo);
+ if (err < 0)
+ return err;
+ if (copy_to_user(uptr, &msginfo, sizeof(struct msginfo)))
+ err = -EFAULT;
+ return err;
+ }
+ case IPC_STAT:
+ case MSG_STAT:
+ err = msgctl_stat(ns, msqid, cmd, &msqid64);
+ if (err < 0)
+ return err;
+ if (copy_compat_msqid_to_user(uptr, &msqid64, version))
+ err = -EFAULT;
+ return err;
+ case IPC_SET:
+ if (copy_compat_msqid_from_user(&msqid64, uptr, version))
+ return -EFAULT;
+ /* fallthru */
+ case IPC_RMID:
+ return msgctl_down(ns, msqid, cmd, &msqid64);
+ default:
+ return -EINVAL;
+ }
+}
+#endif
+
static int testmsg(struct msg_msg *msg, long type, int mode)
{
switch (mode) {
@@ -627,7 +730,7 @@ static inline int pipelined_send(struct msg_queue *msq, struct msg_msg *msg,
return 0;
}
-long do_msgsnd(int msqid, long mtype, void __user *mtext,
+static long do_msgsnd(int msqid, long mtype, void __user *mtext,
size_t msgsz, int msgflg)
{
struct msg_queue *msq;
@@ -750,6 +853,25 @@ SYSCALL_DEFINE4(msgsnd, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz,
return do_msgsnd(msqid, mtype, msgp->mtext, msgsz, msgflg);
}
+#ifdef CONFIG_COMPAT
+
+struct compat_msgbuf {
+ compat_long_t mtype;
+ char mtext[1];
+};
+
+COMPAT_SYSCALL_DEFINE4(msgsnd, int, msqid, compat_uptr_t, msgp,
+ compat_ssize_t, msgsz, int, msgflg)
+{
+ struct compat_msgbuf __user *up = compat_ptr(msgp);
+ compat_long_t mtype;
+
+ if (get_user(mtype, &up->mtype))
+ return -EFAULT;
+ return do_msgsnd(msqid, mtype, up->mtext, (ssize_t)msgsz, msgflg);
+}
+#endif
+
static inline int convert_mode(long *msgtyp, int msgflg)
{
if (msgflg & MSG_COPY)
@@ -846,7 +968,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode)
return found ?: ERR_PTR(-EAGAIN);
}
-long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, int msgflg,
+static long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, int msgflg,
long (*msg_handler)(void __user *, struct msg_msg *, size_t))
{
int mode;
@@ -1010,6 +1132,28 @@ SYSCALL_DEFINE5(msgrcv, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz,
return do_msgrcv(msqid, msgp, msgsz, msgtyp, msgflg, do_msg_fill);
}
+#ifdef CONFIG_COMPAT
+static long compat_do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
+{
+ struct compat_msgbuf __user *msgp = dest;
+ size_t msgsz;
+
+ if (put_user(msg->m_type, &msgp->mtype))
+ return -EFAULT;
+
+ msgsz = (bufsz > msg->m_ts) ? msg->m_ts : bufsz;
+ if (store_msg(msgp->mtext, msg, msgsz))
+ return -EFAULT;
+ return msgsz;
+}
+
+COMPAT_SYSCALL_DEFINE5(msgrcv, int, msqid, compat_uptr_t, msgp,
+ compat_ssize_t, msgsz, compat_long_t, msgtyp, int, msgflg)
+{
+ return do_msgrcv(msqid, compat_ptr(msgp), (ssize_t)msgsz, (long)msgtyp,
+ msgflg, compat_do_msg_fill);
+}
+#endif
int msg_init_ns(struct ipc_namespace *ns)
{
@@ -1039,7 +1183,7 @@ static int sysvipc_msg_proc_show(struct seq_file *s, void *it)
struct msg_queue *msq = container_of(ipcp, struct msg_queue, q_perm);
seq_printf(s,
- "%10d %10d %4o %10lu %10lu %5u %5u %5u %5u %5u %5u %10lu %10lu %10lu\n",
+ "%10d %10d %4o %10lu %10lu %5u %5u %5u %5u %5u %5u %10llu %10llu %10llu\n",
msq->q_perm.key,
msq->q_perm.id,
msq->q_perm.mode,
diff --git a/ipc/sem.c b/ipc/sem.c
index 013c7981f3c7..f7385bce5fd3 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -512,7 +512,7 @@ static int newary(struct ipc_namespace *ns, struct ipc_params *params)
INIT_LIST_HEAD(&sma->pending_const);
INIT_LIST_HEAD(&sma->list_id);
sma->sem_nsems = nsems;
- sma->sem_ctime = get_seconds();
+ sma->sem_ctime = ktime_get_real_seconds();
retval = ipc_addid(&sem_ids(ns), &sma->sem_perm, ns->sc_semmni);
if (retval < 0) {
@@ -1163,14 +1163,14 @@ static unsigned long copy_semid_to_user(void __user *buf, struct semid64_ds *in,
}
}
-static time_t get_semotime(struct sem_array *sma)
+static time64_t get_semotime(struct sem_array *sma)
{
int i;
- time_t res;
+ time64_t res;
res = sma->sems[0].sem_otime;
for (i = 1; i < sma->sem_nsems; i++) {
- time_t to = sma->sems[i].sem_otime;
+ time64_t to = sma->sems[i].sem_otime;
if (to > res)
res = to;
@@ -1178,112 +1178,95 @@ static time_t get_semotime(struct sem_array *sma)
return res;
}
-static int semctl_nolock(struct ipc_namespace *ns, int semid,
- int cmd, int version, void __user *p)
+static int semctl_stat(struct ipc_namespace *ns, int semid,
+ int cmd, struct semid64_ds *semid64)
{
- int err;
struct sem_array *sma;
+ int id = 0;
+ int err;
- switch (cmd) {
- case IPC_INFO:
- case SEM_INFO:
- {
- struct seminfo seminfo;
- int max_id;
-
- err = security_sem_semctl(NULL, cmd);
- if (err)
- return err;
+ memset(semid64, 0, sizeof(*semid64));
- memset(&seminfo, 0, sizeof(seminfo));
- seminfo.semmni = ns->sc_semmni;
- seminfo.semmns = ns->sc_semmns;
- seminfo.semmsl = ns->sc_semmsl;
- seminfo.semopm = ns->sc_semopm;
- seminfo.semvmx = SEMVMX;
- seminfo.semmnu = SEMMNU;
- seminfo.semmap = SEMMAP;
- seminfo.semume = SEMUME;
- down_read(&sem_ids(ns).rwsem);
- if (cmd == SEM_INFO) {
- seminfo.semusz = sem_ids(ns).in_use;
- seminfo.semaem = ns->used_sems;
- } else {
- seminfo.semusz = SEMUSZ;
- seminfo.semaem = SEMAEM;
+ rcu_read_lock();
+ if (cmd == SEM_STAT) {
+ sma = sem_obtain_object(ns, semid);
+ if (IS_ERR(sma)) {
+ err = PTR_ERR(sma);
+ goto out_unlock;
+ }
+ id = sma->sem_perm.id;
+ } else {
+ sma = sem_obtain_object_check(ns, semid);
+ if (IS_ERR(sma)) {
+ err = PTR_ERR(sma);
+ goto out_unlock;
}
- max_id = ipc_get_maxid(&sem_ids(ns));
- up_read(&sem_ids(ns).rwsem);
- if (copy_to_user(p, &seminfo, sizeof(struct seminfo)))
- return -EFAULT;
- return (max_id < 0) ? 0 : max_id;
}
- case IPC_STAT:
- case SEM_STAT:
- {
- struct semid64_ds tbuf;
- int id = 0;
-
- memset(&tbuf, 0, sizeof(tbuf));
- rcu_read_lock();
- if (cmd == SEM_STAT) {
- sma = sem_obtain_object(ns, semid);
- if (IS_ERR(sma)) {
- err = PTR_ERR(sma);
- goto out_unlock;
- }
- id = sma->sem_perm.id;
- } else {
- sma = sem_obtain_object_check(ns, semid);
- if (IS_ERR(sma)) {
- err = PTR_ERR(sma);
- goto out_unlock;
- }
- }
+ err = -EACCES;
+ if (ipcperms(ns, &sma->sem_perm, S_IRUGO))
+ goto out_unlock;
- err = -EACCES;
- if (ipcperms(ns, &sma->sem_perm, S_IRUGO))
- goto out_unlock;
+ err = security_sem_semctl(sma, cmd);
+ if (err)
+ goto out_unlock;
- err = security_sem_semctl(sma, cmd);
- if (err)
- goto out_unlock;
+ kernel_to_ipc64_perm(&sma->sem_perm, &semid64->sem_perm);
+ semid64->sem_otime = get_semotime(sma);
+ semid64->sem_ctime = sma->sem_ctime;
+ semid64->sem_nsems = sma->sem_nsems;
+ rcu_read_unlock();
+ return id;
- kernel_to_ipc64_perm(&sma->sem_perm, &tbuf.sem_perm);
- tbuf.sem_otime = get_semotime(sma);
- tbuf.sem_ctime = sma->sem_ctime;
- tbuf.sem_nsems = sma->sem_nsems;
- rcu_read_unlock();
- if (copy_semid_to_user(p, &tbuf, version))
- return -EFAULT;
- return id;
- }
- default:
- return -EINVAL;
- }
out_unlock:
rcu_read_unlock();
return err;
}
+static int semctl_info(struct ipc_namespace *ns, int semid,
+ int cmd, void __user *p)
+{
+ struct seminfo seminfo;
+ int max_id;
+ int err;
+
+ err = security_sem_semctl(NULL, cmd);
+ if (err)
+ return err;
+
+ memset(&seminfo, 0, sizeof(seminfo));
+ seminfo.semmni = ns->sc_semmni;
+ seminfo.semmns = ns->sc_semmns;
+ seminfo.semmsl = ns->sc_semmsl;
+ seminfo.semopm = ns->sc_semopm;
+ seminfo.semvmx = SEMVMX;
+ seminfo.semmnu = SEMMNU;
+ seminfo.semmap = SEMMAP;
+ seminfo.semume = SEMUME;
+ down_read(&sem_ids(ns).rwsem);
+ if (cmd == SEM_INFO) {
+ seminfo.semusz = sem_ids(ns).in_use;
+ seminfo.semaem = ns->used_sems;
+ } else {
+ seminfo.semusz = SEMUSZ;
+ seminfo.semaem = SEMAEM;
+ }
+ max_id = ipc_get_maxid(&sem_ids(ns));
+ up_read(&sem_ids(ns).rwsem);
+ if (copy_to_user(p, &seminfo, sizeof(struct seminfo)))
+ return -EFAULT;
+ return (max_id < 0) ? 0 : max_id;
+}
+
static int semctl_setval(struct ipc_namespace *ns, int semid, int semnum,
- unsigned long arg)
+ int val)
{
struct sem_undo *un;
struct sem_array *sma;
struct sem *curr;
- int err, val;
+ int err;
DEFINE_WAKE_Q(wake_q);
-#if defined(CONFIG_64BIT) && defined(__BIG_ENDIAN)
- /* big-endian 64bit */
- val = arg >> 32;
-#else
- /* 32bit or little-endian 64bit */
- val = arg;
-#endif
-
if (val > SEMVMX || val < 0)
return -ERANGE;
@@ -1327,7 +1310,7 @@ static int semctl_setval(struct ipc_namespace *ns, int semid, int semnum,
curr->semval = val;
curr->sempid = task_tgid_vnr(current);
- sma->sem_ctime = get_seconds();
+ sma->sem_ctime = ktime_get_real_seconds();
/* maybe some queued-up processes were waiting for this */
do_smart_update(sma, NULL, 0, 0, &wake_q);
sem_unlock(sma, -1);
@@ -1455,7 +1438,7 @@ static int semctl_main(struct ipc_namespace *ns, int semid, int semnum,
for (i = 0; i < nsems; i++)
un->semadj[i] = 0;
}
- sma->sem_ctime = get_seconds();
+ sma->sem_ctime = ktime_get_real_seconds();
/* maybe some queued-up processes were waiting for this */
do_smart_update(sma, NULL, 0, 0, &wake_q);
err = 0;
@@ -1532,23 +1515,17 @@ copy_semid_from_user(struct semid64_ds *out, void __user *buf, int version)
* NOTE: no locks must be held, the rwsem is taken inside this function.
*/
static int semctl_down(struct ipc_namespace *ns, int semid,
- int cmd, int version, void __user *p)
+ int cmd, struct semid64_ds *semid64)
{
struct sem_array *sma;
int err;
- struct semid64_ds semid64;
struct kern_ipc_perm *ipcp;
- if (cmd == IPC_SET) {
- if (copy_semid_from_user(&semid64, p, version))
- return -EFAULT;
- }
-
down_write(&sem_ids(ns).rwsem);
rcu_read_lock();
ipcp = ipcctl_pre_down_nolock(ns, &sem_ids(ns), semid, cmd,
- &semid64.sem_perm, 0);
+ &semid64->sem_perm, 0);
if (IS_ERR(ipcp)) {
err = PTR_ERR(ipcp);
goto out_unlock1;
@@ -1568,10 +1545,10 @@ static int semctl_down(struct ipc_namespace *ns, int semid,
goto out_up;
case IPC_SET:
sem_lock(sma, NULL, -1);
- err = ipc_update_perm(&semid64.sem_perm, ipcp);
+ err = ipc_update_perm(&semid64->sem_perm, ipcp);
if (err)
goto out_unlock0;
- sma->sem_ctime = get_seconds();
+ sma->sem_ctime = ktime_get_real_seconds();
break;
default:
err = -EINVAL;
@@ -1592,6 +1569,8 @@ SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, unsigned long, arg)
int version;
struct ipc_namespace *ns;
void __user *p = (void __user *)arg;
+ struct semid64_ds semid64;
+ int err;
if (semid < 0)
return -EINVAL;
@@ -1602,9 +1581,15 @@ SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, unsigned long, arg)
switch (cmd) {
case IPC_INFO:
case SEM_INFO:
+ return semctl_info(ns, semid, cmd, p);
case IPC_STAT:
case SEM_STAT:
- return semctl_nolock(ns, semid, cmd, version, p);
+ err = semctl_stat(ns, semid, cmd, &semid64);
+ if (err < 0)
+ return err;
+ if (copy_semid_to_user(p, &semid64, version))
+ err = -EFAULT;
+ return err;
case GETALL:
case GETVAL:
case GETPID:
@@ -1612,15 +1597,120 @@ SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, unsigned long, arg)
case GETZCNT:
case SETALL:
return semctl_main(ns, semid, semnum, cmd, p);
+ case SETVAL: {
+ int val;
+#if defined(CONFIG_64BIT) && defined(__BIG_ENDIAN)
+ /* big-endian 64bit */
+ val = arg >> 32;
+#else
+ /* 32bit or little-endian 64bit */
+ val = arg;
+#endif
+ return semctl_setval(ns, semid, semnum, val);
+ }
+ case IPC_SET:
+ if (copy_semid_from_user(&semid64, p, version))
+ return -EFAULT;
+ case IPC_RMID:
+ return semctl_down(ns, semid, cmd, &semid64);
+ default:
+ return -EINVAL;
+ }
+}
+
+#ifdef CONFIG_COMPAT
+
+struct compat_semid_ds {
+ struct compat_ipc_perm sem_perm;
+ compat_time_t sem_otime;
+ compat_time_t sem_ctime;
+ compat_uptr_t sem_base;
+ compat_uptr_t sem_pending;
+ compat_uptr_t sem_pending_last;
+ compat_uptr_t undo;
+ unsigned short sem_nsems;
+};
+
+static int copy_compat_semid_from_user(struct semid64_ds *out, void __user *buf,
+ int version)
+{
+ memset(out, 0, sizeof(*out));
+ if (version == IPC_64) {
+ struct compat_semid64_ds *p = buf;
+ return get_compat_ipc64_perm(&out->sem_perm, &p->sem_perm);
+ } else {
+ struct compat_semid_ds *p = buf;
+ return get_compat_ipc_perm(&out->sem_perm, &p->sem_perm);
+ }
+}
+
+static int copy_compat_semid_to_user(void __user *buf, struct semid64_ds *in,
+ int version)
+{
+ if (version == IPC_64) {
+ struct compat_semid64_ds v;
+ memset(&v, 0, sizeof(v));
+ to_compat_ipc64_perm(&v.sem_perm, &in->sem_perm);
+ v.sem_otime = in->sem_otime;
+ v.sem_ctime = in->sem_ctime;
+ v.sem_nsems = in->sem_nsems;
+ return copy_to_user(buf, &v, sizeof(v));
+ } else {
+ struct compat_semid_ds v;
+ memset(&v, 0, sizeof(v));
+ to_compat_ipc_perm(&v.sem_perm, &in->sem_perm);
+ v.sem_otime = in->sem_otime;
+ v.sem_ctime = in->sem_ctime;
+ v.sem_nsems = in->sem_nsems;
+ return copy_to_user(buf, &v, sizeof(v));
+ }
+}
+
+COMPAT_SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, int, arg)
+{
+ void __user *p = compat_ptr(arg);
+ struct ipc_namespace *ns;
+ struct semid64_ds semid64;
+ int version = compat_ipc_parse_version(&cmd);
+ int err;
+
+ ns = current->nsproxy->ipc_ns;
+
+ if (semid < 0)
+ return -EINVAL;
+
+ switch (cmd & (~IPC_64)) {
+ case IPC_INFO:
+ case SEM_INFO:
+ return semctl_info(ns, semid, cmd, p);
+ case IPC_STAT:
+ case SEM_STAT:
+ err = semctl_stat(ns, semid, cmd, &semid64);
+ if (err < 0)
+ return err;
+ if (copy_compat_semid_to_user(p, &semid64, version))
+ err = -EFAULT;
+ return err;
+ case GETVAL:
+ case GETPID:
+ case GETNCNT:
+ case GETZCNT:
+ case GETALL:
+ case SETALL:
+ return semctl_main(ns, semid, semnum, cmd, p);
case SETVAL:
return semctl_setval(ns, semid, semnum, arg);
- case IPC_RMID:
case IPC_SET:
- return semctl_down(ns, semid, cmd, version, p);
+ if (copy_compat_semid_from_user(&semid64, p, version))
+ return -EFAULT;
+ /* fallthru */
+ case IPC_RMID:
+ return semctl_down(ns, semid, cmd, &semid64);
default:
return -EINVAL;
}
}
+#endif
/* If the task doesn't already have a undo_list, then allocate one
* here. We guarantee there is only one thread using this undo list,
@@ -1766,8 +1856,8 @@ out:
return un;
}
-SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops,
- unsigned, nsops, const struct timespec __user *, timeout)
+static long do_semtimedop(int semid, struct sembuf __user *tsops,
+ unsigned nsops, const struct timespec64 *timeout)
{
int error = -EINVAL;
struct sem_array *sma;
@@ -1798,17 +1888,12 @@ SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops,
}
if (timeout) {
- struct timespec _timeout;
- if (copy_from_user(&_timeout, timeout, sizeof(*timeout))) {
- error = -EFAULT;
- goto out_free;
- }
- if (_timeout.tv_sec < 0 || _timeout.tv_nsec < 0 ||
- _timeout.tv_nsec >= 1000000000L) {
+ if (timeout->tv_sec < 0 || timeout->tv_nsec < 0 ||
+ timeout->tv_nsec >= 1000000000L) {
error = -EINVAL;
goto out_free;
}
- jiffies_left = timespec_to_jiffies(&_timeout);
+ jiffies_left = timespec64_to_jiffies(timeout);
}
max = 0;
@@ -2023,10 +2108,37 @@ out_free:
return error;
}
+SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops,
+ unsigned, nsops, const struct timespec __user *, timeout)
+{
+ if (timeout) {
+ struct timespec64 ts;
+ if (get_timespec64(&ts, timeout))
+ return -EFAULT;
+ return do_semtimedop(semid, tsops, nsops, &ts);
+ }
+ return do_semtimedop(semid, tsops, nsops, NULL);
+}
+
+#ifdef CONFIG_COMPAT
+COMPAT_SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsems,
+ unsigned, nsops,
+ const struct compat_timespec __user *, timeout)
+{
+ if (timeout) {
+ struct timespec64 ts;
+ if (compat_get_timespec64(&ts, timeout))
+ return -EFAULT;
+ return do_semtimedop(semid, tsems, nsops, &ts);
+ }
+ return do_semtimedop(semid, tsems, nsops, NULL);
+}
+#endif
+
SYSCALL_DEFINE3(semop, int, semid, struct sembuf __user *, tsops,
unsigned, nsops)
{
- return sys_semtimedop(semid, tsops, nsops, NULL);
+ return do_semtimedop(semid, tsops, nsops, NULL);
}
/* If CLONE_SYSVSEM is set, establish sharing of SEM_UNDO state between
@@ -2183,7 +2295,7 @@ static int sysvipc_sem_proc_show(struct seq_file *s, void *it)
struct user_namespace *user_ns = seq_user_ns(s);
struct kern_ipc_perm *ipcp = it;
struct sem_array *sma = container_of(ipcp, struct sem_array, sem_perm);
- time_t sem_otime;
+ time64_t sem_otime;
/*
* The proc interface isn't aware of sem_lock(), it calls
@@ -2196,7 +2308,7 @@ static int sysvipc_sem_proc_show(struct seq_file *s, void *it)
sem_otime = get_semotime(sma);
seq_printf(s,
- "%10d %10d %4o %10u %5u %5u %5u %5u %10lu %10lu\n",
+ "%10d %10d %4o %10u %5u %5u %5u %5u %10llu %10llu\n",
sma->sem_perm.key,
sma->sem_perm.id,
sma->sem_perm.mode,
diff --git a/ipc/shm.c b/ipc/shm.c
index 8fc97beb5234..1b3adfe3c60e 100644
--- a/ipc/shm.c
+++ b/ipc/shm.c
@@ -202,7 +202,7 @@ static int __shm_open(struct vm_area_struct *vma)
if (IS_ERR(shp))
return PTR_ERR(shp);
- shp->shm_atim = get_seconds();
+ shp->shm_atim = ktime_get_real_seconds();
shp->shm_lprid = task_tgid_vnr(current);
shp->shm_nattch++;
shm_unlock(shp);
@@ -289,7 +289,7 @@ static void shm_close(struct vm_area_struct *vma)
goto done; /* no-op */
shp->shm_lprid = task_tgid_vnr(current);
- shp->shm_dtim = get_seconds();
+ shp->shm_dtim = ktime_get_real_seconds();
shp->shm_nattch--;
if (shm_may_destroy(ns, shp))
shm_destroy(ns, shp);
@@ -594,7 +594,7 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params)
shp->shm_cprid = task_tgid_vnr(current);
shp->shm_lprid = 0;
shp->shm_atim = shp->shm_dtim = 0;
- shp->shm_ctim = get_seconds();
+ shp->shm_ctim = ktime_get_real_seconds();
shp->shm_segsz = size;
shp->shm_nattch = 0;
shp->shm_file = file;
@@ -815,23 +815,17 @@ static void shm_get_stat(struct ipc_namespace *ns, unsigned long *rss,
* NOTE: no locks must be held, the rwsem is taken inside this function.
*/
static int shmctl_down(struct ipc_namespace *ns, int shmid, int cmd,
- struct shmid_ds __user *buf, int version)
+ struct shmid64_ds *shmid64)
{
struct kern_ipc_perm *ipcp;
- struct shmid64_ds shmid64;
struct shmid_kernel *shp;
int err;
- if (cmd == IPC_SET) {
- if (copy_shmid_from_user(&shmid64, buf, version))
- return -EFAULT;
- }
-
down_write(&shm_ids(ns).rwsem);
rcu_read_lock();
ipcp = ipcctl_pre_down_nolock(ns, &shm_ids(ns), shmid, cmd,
- &shmid64.shm_perm, 0);
+ &shmid64->shm_perm, 0);
if (IS_ERR(ipcp)) {
err = PTR_ERR(ipcp);
goto out_unlock1;
@@ -851,10 +845,10 @@ static int shmctl_down(struct ipc_namespace *ns, int shmid, int cmd,
goto out_up;
case IPC_SET:
ipc_lock_object(&shp->shm_perm);
- err = ipc_update_perm(&shmid64.shm_perm, ipcp);
+ err = ipc_update_perm(&shmid64->shm_perm, ipcp);
if (err)
goto out_unlock0;
- shp->shm_ctim = get_seconds();
+ shp->shm_ctim = ktime_get_real_seconds();
break;
default:
err = -EINVAL;
@@ -870,125 +864,175 @@ out_up:
return err;
}
-static int shmctl_nolock(struct ipc_namespace *ns, int shmid,
- int cmd, int version, void __user *buf)
+static int shmctl_ipc_info(struct ipc_namespace *ns,
+ struct shminfo64 *shminfo)
{
- int err;
- struct shmid_kernel *shp;
-
- /* preliminary security checks for *_INFO */
- if (cmd == IPC_INFO || cmd == SHM_INFO) {
- err = security_shm_shmctl(NULL, cmd);
- if (err)
- return err;
- }
-
- switch (cmd) {
- case IPC_INFO:
- {
- struct shminfo64 shminfo;
-
- memset(&shminfo, 0, sizeof(shminfo));
- shminfo.shmmni = shminfo.shmseg = ns->shm_ctlmni;
- shminfo.shmmax = ns->shm_ctlmax;
- shminfo.shmall = ns->shm_ctlall;
-
- shminfo.shmmin = SHMMIN;
- if (copy_shminfo_to_user(buf, &shminfo, version))
- return -EFAULT;
-
+ int err = security_shm_shmctl(NULL, IPC_INFO);
+ if (!err) {
+ memset(shminfo, 0, sizeof(*shminfo));
+ shminfo->shmmni = shminfo->shmseg = ns->shm_ctlmni;
+ shminfo->shmmax = ns->shm_ctlmax;
+ shminfo->shmall = ns->shm_ctlall;
+ shminfo->shmmin = SHMMIN;
down_read(&shm_ids(ns).rwsem);
err = ipc_get_maxid(&shm_ids(ns));
up_read(&shm_ids(ns).rwsem);
-
if (err < 0)
err = 0;
- goto out;
}
- case SHM_INFO:
- {
- struct shm_info shm_info;
+ return err;
+}
- memset(&shm_info, 0, sizeof(shm_info));
+static int shmctl_shm_info(struct ipc_namespace *ns,
+ struct shm_info *shm_info)
+{
+ int err = security_shm_shmctl(NULL, SHM_INFO);
+ if (!err) {
+ memset(shm_info, 0, sizeof(*shm_info));
down_read(&shm_ids(ns).rwsem);
- shm_info.used_ids = shm_ids(ns).in_use;
- shm_get_stat(ns, &shm_info.shm_rss, &shm_info.shm_swp);
- shm_info.shm_tot = ns->shm_tot;
- shm_info.swap_attempts = 0;
- shm_info.swap_successes = 0;
+ shm_info->used_ids = shm_ids(ns).in_use;
+ shm_get_stat(ns, &shm_info->shm_rss, &shm_info->shm_swp);
+ shm_info->shm_tot = ns->shm_tot;
+ shm_info->swap_attempts = 0;
+ shm_info->swap_successes = 0;
err = ipc_get_maxid(&shm_ids(ns));
up_read(&shm_ids(ns).rwsem);
- if (copy_to_user(buf, &shm_info, sizeof(shm_info))) {
- err = -EFAULT;
- goto out;
+ if (err < 0)
+ err = 0;
+ }
+ return err;
+}
+
+static int shmctl_stat(struct ipc_namespace *ns, int shmid,
+ int cmd, struct shmid64_ds *tbuf)
+{
+ struct shmid_kernel *shp;
+ int result;
+ int err;
+
+ rcu_read_lock();
+ if (cmd == SHM_STAT) {
+ shp = shm_obtain_object(ns, shmid);
+ if (IS_ERR(shp)) {
+ err = PTR_ERR(shp);
+ goto out_unlock;
+ }
+ result = shp->shm_perm.id;
+ } else {
+ shp = shm_obtain_object_check(ns, shmid);
+ if (IS_ERR(shp)) {
+ err = PTR_ERR(shp);
+ goto out_unlock;
}
+ result = 0;
+ }
- err = err < 0 ? 0 : err;
- goto out;
+ err = -EACCES;
+ if (ipcperms(ns, &shp->shm_perm, S_IRUGO))
+ goto out_unlock;
+
+ err = security_shm_shmctl(shp, cmd);
+ if (err)
+ goto out_unlock;
+
+ memset(tbuf, 0, sizeof(*tbuf));
+ kernel_to_ipc64_perm(&shp->shm_perm, &tbuf->shm_perm);
+ tbuf->shm_segsz = shp->shm_segsz;
+ tbuf->shm_atime = shp->shm_atim;
+ tbuf->shm_dtime = shp->shm_dtim;
+ tbuf->shm_ctime = shp->shm_ctim;
+ tbuf->shm_cpid = shp->shm_cprid;
+ tbuf->shm_lpid = shp->shm_lprid;
+ tbuf->shm_nattch = shp->shm_nattch;
+ rcu_read_unlock();
+ return result;
+
+out_unlock:
+ rcu_read_unlock();
+ return err;
+}
+
+static int shmctl_do_lock(struct ipc_namespace *ns, int shmid, int cmd)
+{
+ struct shmid_kernel *shp;
+ struct file *shm_file;
+ int err;
+
+ rcu_read_lock();
+ shp = shm_obtain_object_check(ns, shmid);
+ if (IS_ERR(shp)) {
+ err = PTR_ERR(shp);
+ goto out_unlock1;
}
- case SHM_STAT:
- case IPC_STAT:
- {
- struct shmid64_ds tbuf;
- int result;
-
- rcu_read_lock();
- if (cmd == SHM_STAT) {
- shp = shm_obtain_object(ns, shmid);
- if (IS_ERR(shp)) {
- err = PTR_ERR(shp);
- goto out_unlock;
- }
- result = shp->shm_perm.id;
- } else {
- shp = shm_obtain_object_check(ns, shmid);
- if (IS_ERR(shp)) {
- err = PTR_ERR(shp);
- goto out_unlock;
- }
- result = 0;
- }
- err = -EACCES;
- if (ipcperms(ns, &shp->shm_perm, S_IRUGO))
- goto out_unlock;
+ audit_ipc_obj(&(shp->shm_perm));
+ err = security_shm_shmctl(shp, cmd);
+ if (err)
+ goto out_unlock1;
- err = security_shm_shmctl(shp, cmd);
- if (err)
- goto out_unlock;
+ ipc_lock_object(&shp->shm_perm);
- memset(&tbuf, 0, sizeof(tbuf));
- kernel_to_ipc64_perm(&shp->shm_perm, &tbuf.shm_perm);
- tbuf.shm_segsz = shp->shm_segsz;
- tbuf.shm_atime = shp->shm_atim;
- tbuf.shm_dtime = shp->shm_dtim;
- tbuf.shm_ctime = shp->shm_ctim;
- tbuf.shm_cpid = shp->shm_cprid;
- tbuf.shm_lpid = shp->shm_lprid;
- tbuf.shm_nattch = shp->shm_nattch;
- rcu_read_unlock();
-
- if (copy_shmid_to_user(buf, &tbuf, version))
- err = -EFAULT;
- else
- err = result;
- goto out;
+ /* check if shm_destroy() is tearing down shp */
+ if (!ipc_valid_object(&shp->shm_perm)) {
+ err = -EIDRM;
+ goto out_unlock0;
}
- default:
- return -EINVAL;
+
+ if (!ns_capable(ns->user_ns, CAP_IPC_LOCK)) {
+ kuid_t euid = current_euid();
+
+ if (!uid_eq(euid, shp->shm_perm.uid) &&
+ !uid_eq(euid, shp->shm_perm.cuid)) {
+ err = -EPERM;
+ goto out_unlock0;
+ }
+ if (cmd == SHM_LOCK && !rlimit(RLIMIT_MEMLOCK)) {
+ err = -EPERM;
+ goto out_unlock0;
+ }
}
-out_unlock:
+ shm_file = shp->shm_file;
+ if (is_file_hugepages(shm_file))
+ goto out_unlock0;
+
+ if (cmd == SHM_LOCK) {
+ struct user_struct *user = current_user();
+
+ err = shmem_lock(shm_file, 1, user);
+ if (!err && !(shp->shm_perm.mode & SHM_LOCKED)) {
+ shp->shm_perm.mode |= SHM_LOCKED;
+ shp->mlock_user = user;
+ }
+ goto out_unlock0;
+ }
+
+ /* SHM_UNLOCK */
+ if (!(shp->shm_perm.mode & SHM_LOCKED))
+ goto out_unlock0;
+ shmem_lock(shm_file, 0, shp->mlock_user);
+ shp->shm_perm.mode &= ~SHM_LOCKED;
+ shp->mlock_user = NULL;
+ get_file(shm_file);
+ ipc_unlock_object(&shp->shm_perm);
+ rcu_read_unlock();
+ shmem_unlock_mapping(shm_file->f_mapping);
+
+ fput(shm_file);
+ return err;
+
+out_unlock0:
+ ipc_unlock_object(&shp->shm_perm);
+out_unlock1:
rcu_read_unlock();
-out:
return err;
}
SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf)
{
- struct shmid_kernel *shp;
int err, version;
struct ipc_namespace *ns;
+ struct shmid64_ds sem64;
if (cmd < 0 || shmid < 0)
return -EINVAL;
@@ -997,92 +1041,222 @@ SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf)
ns = current->nsproxy->ipc_ns;
switch (cmd) {
- case IPC_INFO:
- case SHM_INFO:
+ case IPC_INFO: {
+ struct shminfo64 shminfo;
+ err = shmctl_ipc_info(ns, &shminfo);
+ if (err < 0)
+ return err;
+ if (copy_shminfo_to_user(buf, &shminfo, version))
+ err = -EFAULT;
+ return err;
+ }
+ case SHM_INFO: {
+ struct shm_info shm_info;
+ err = shmctl_shm_info(ns, &shm_info);
+ if (err < 0)
+ return err;
+ if (copy_to_user(buf, &shm_info, sizeof(shm_info)))
+ err = -EFAULT;
+ return err;
+ }
case SHM_STAT:
- case IPC_STAT:
- return shmctl_nolock(ns, shmid, cmd, version, buf);
- case IPC_RMID:
+ case IPC_STAT: {
+ err = shmctl_stat(ns, shmid, cmd, &sem64);
+ if (err < 0)
+ return err;
+ if (copy_shmid_to_user(buf, &sem64, version))
+ err = -EFAULT;
+ return err;
+ }
case IPC_SET:
- return shmctl_down(ns, shmid, cmd, buf, version);
+ if (copy_shmid_from_user(&sem64, buf, version))
+ return -EFAULT;
+ /* fallthru */
+ case IPC_RMID:
+ return shmctl_down(ns, shmid, cmd, &sem64);
case SHM_LOCK:
case SHM_UNLOCK:
- {
- struct file *shm_file;
+ return shmctl_do_lock(ns, shmid, cmd);
+ default:
+ return -EINVAL;
+ }
+}
- rcu_read_lock();
- shp = shm_obtain_object_check(ns, shmid);
- if (IS_ERR(shp)) {
- err = PTR_ERR(shp);
- goto out_unlock1;
- }
+#ifdef CONFIG_COMPAT
+
+struct compat_shmid_ds {
+ struct compat_ipc_perm shm_perm;
+ int shm_segsz;
+ compat_time_t shm_atime;
+ compat_time_t shm_dtime;
+ compat_time_t shm_ctime;
+ compat_ipc_pid_t shm_cpid;
+ compat_ipc_pid_t shm_lpid;
+ unsigned short shm_nattch;
+ unsigned short shm_unused;
+ compat_uptr_t shm_unused2;
+ compat_uptr_t shm_unused3;
+};
- audit_ipc_obj(&(shp->shm_perm));
- err = security_shm_shmctl(shp, cmd);
- if (err)
- goto out_unlock1;
+struct compat_shminfo64 {
+ compat_ulong_t shmmax;
+ compat_ulong_t shmmin;
+ compat_ulong_t shmmni;
+ compat_ulong_t shmseg;
+ compat_ulong_t shmall;
+ compat_ulong_t __unused1;
+ compat_ulong_t __unused2;
+ compat_ulong_t __unused3;
+ compat_ulong_t __unused4;
+};
- ipc_lock_object(&shp->shm_perm);
+struct compat_shm_info {
+ compat_int_t used_ids;
+ compat_ulong_t shm_tot, shm_rss, shm_swp;
+ compat_ulong_t swap_attempts, swap_successes;
+};
- /* check if shm_destroy() is tearing down shp */
- if (!ipc_valid_object(&shp->shm_perm)) {
- err = -EIDRM;
- goto out_unlock0;
- }
+static int copy_compat_shminfo_to_user(void __user *buf, struct shminfo64 *in,
+ int version)
+{
+ if (in->shmmax > INT_MAX)
+ in->shmmax = INT_MAX;
+ if (version == IPC_64) {
+ struct compat_shminfo64 info;
+ memset(&info, 0, sizeof(info));
+ info.shmmax = in->shmmax;
+ info.shmmin = in->shmmin;
+ info.shmmni = in->shmmni;
+ info.shmseg = in->shmseg;
+ info.shmall = in->shmall;
+ return copy_to_user(buf, &info, sizeof(info));
+ } else {
+ struct shminfo info;
+ memset(&info, 0, sizeof(info));
+ info.shmmax = in->shmmax;
+ info.shmmin = in->shmmin;
+ info.shmmni = in->shmmni;
+ info.shmseg = in->shmseg;
+ info.shmall = in->shmall;
+ return copy_to_user(buf, &info, sizeof(info));
+ }
+}
- if (!ns_capable(ns->user_ns, CAP_IPC_LOCK)) {
- kuid_t euid = current_euid();
-
- if (!uid_eq(euid, shp->shm_perm.uid) &&
- !uid_eq(euid, shp->shm_perm.cuid)) {
- err = -EPERM;
- goto out_unlock0;
- }
- if (cmd == SHM_LOCK && !rlimit(RLIMIT_MEMLOCK)) {
- err = -EPERM;
- goto out_unlock0;
- }
- }
+static int put_compat_shm_info(struct shm_info *ip,
+ struct compat_shm_info __user *uip)
+{
+ struct compat_shm_info info;
+
+ memset(&info, 0, sizeof(info));
+ info.used_ids = ip->used_ids;
+ info.shm_tot = ip->shm_tot;
+ info.shm_rss = ip->shm_rss;
+ info.shm_swp = ip->shm_swp;
+ info.swap_attempts = ip->swap_attempts;
+ info.swap_successes = ip->swap_successes;
+ return copy_to_user(up, &info, sizeof(info));
+}
- shm_file = shp->shm_file;
- if (is_file_hugepages(shm_file))
- goto out_unlock0;
+static int copy_compat_shmid_to_user(void __user *buf, struct shmid64_ds *in,
+ int version)
+{
+ if (version == IPC_64) {
+ struct compat_shmid64_ds v;
+ memset(&v, 0, sizeof(v));
+ to_compat_ipc64_perm(&v.shm_perm, &in->shm_perm);
+ v.shm_atime = in->shm_atime;
+ v.shm_dtime = in->shm_dtime;
+ v.shm_ctime = in->shm_ctime;
+ v.shm_segsz = in->shm_segsz;
+ v.shm_nattch = in->shm_nattch;
+ v.shm_cpid = in->shm_cpid;
+ v.shm_lpid = in->shm_lpid;
+ return copy_to_user(buf, &v, sizeof(v));
+ } else {
+ struct compat_shmid_ds v;
+ memset(&v, 0, sizeof(v));
+ to_compat_ipc_perm(&v.shm_perm, &in->shm_perm);
+ v.shm_perm.key = in->shm_perm.key;
+ v.shm_atime = in->shm_atime;
+ v.shm_dtime = in->shm_dtime;
+ v.shm_ctime = in->shm_ctime;
+ v.shm_segsz = in->shm_segsz;
+ v.shm_nattch = in->shm_nattch;
+ v.shm_cpid = in->shm_cpid;
+ v.shm_lpid = in->shm_lpid;
+ return copy_to_user(buf, &v, sizeof(v));
+ }
+}
- if (cmd == SHM_LOCK) {
- struct user_struct *user = current_user();
+static int copy_compat_shmid_from_user(struct shmid64_ds *out, void __user *buf,
+ int version)
+{
+ memset(out, 0, sizeof(*out));
+ if (version == IPC_64) {
+ struct compat_shmid64_ds *p = buf;
+ return get_compat_ipc64_perm(&out->shm_perm, &p->shm_perm);
+ } else {
+ struct compat_shmid_ds *p = buf;
+ return get_compat_ipc_perm(&out->shm_perm, &p->shm_perm);
+ }
+}
- err = shmem_lock(shm_file, 1, user);
- if (!err && !(shp->shm_perm.mode & SHM_LOCKED)) {
- shp->shm_perm.mode |= SHM_LOCKED;
- shp->mlock_user = user;
- }
- goto out_unlock0;
- }
+COMPAT_SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, void __user *, uptr)
+{
+ struct ipc_namespace *ns;
+ struct shmid64_ds sem64;
+ int version = compat_ipc_parse_version(&cmd);
+ int err;
- /* SHM_UNLOCK */
- if (!(shp->shm_perm.mode & SHM_LOCKED))
- goto out_unlock0;
- shmem_lock(shm_file, 0, shp->mlock_user);
- shp->shm_perm.mode &= ~SHM_LOCKED;
- shp->mlock_user = NULL;
- get_file(shm_file);
- ipc_unlock_object(&shp->shm_perm);
- rcu_read_unlock();
- shmem_unlock_mapping(shm_file->f_mapping);
+ ns = current->nsproxy->ipc_ns;
+
+ if (cmd < 0 || shmid < 0)
+ return -EINVAL;
- fput(shm_file);
+ switch (cmd) {
+ case IPC_INFO: {
+ struct shminfo64 shminfo;
+ err = shmctl_ipc_info(ns, &shminfo);
+ if (err < 0)
+ return err;
+ if (copy_compat_shminfo_to_user(uptr, &shminfo, version))
+ err = -EFAULT;
+ return err;
+ }
+ case SHM_INFO: {
+ struct shm_info shm_info;
+ err = shmctl_shm_info(ns, &shm_info);
+ if (err < 0)
+ return err;
+ if (put_compat_shm_info(&shm_info, uptr))
+ err = -EFAULT;
return err;
}
+ case IPC_STAT:
+ case SHM_STAT:
+ err = shmctl_stat(ns, shmid, cmd, &sem64);
+ if (err < 0)
+ return err;
+ if (copy_compat_shmid_to_user(&sem64, uptr, version))
+ err = -EFAULT;
+ return err;
+
+ case IPC_SET:
+ if (copy_compat_shmid_from_user(&sem64, uptr, version))
+ return -EFAULT;
+ /* fallthru */
+ case IPC_RMID:
+ return shmctl_down(ns, shmid, cmd, &sem64);
+ case SHM_LOCK:
+ case SHM_UNLOCK:
+ return shmctl_do_lock(ns, shmid, cmd);
+ break;
default:
return -EINVAL;
}
-
-out_unlock0:
- ipc_unlock_object(&shp->shm_perm);
-out_unlock1:
- rcu_read_unlock();
return err;
}
+#endif
/*
* Fix shmaddr, allocate descriptor, map shm, add attach descriptor to lists.
@@ -1267,6 +1441,25 @@ SYSCALL_DEFINE3(shmat, int, shmid, char __user *, shmaddr, int, shmflg)
return (long)ret;
}
+#ifdef CONFIG_COMPAT
+
+#ifndef COMPAT_SHMLBA
+#define COMPAT_SHMLBA SHMLBA
+#endif
+
+COMPAT_SYSCALL_DEFINE3(shmat, int, shmid, compat_uptr_t, shmaddr, int, shmflg)
+{
+ unsigned long ret;
+ long err;
+
+ err = do_shmat(shmid, compat_ptr(shmaddr), shmflg, &ret, COMPAT_SHMLBA);
+ if (err)
+ return err;
+ force_successful_syscall_return();
+ return (long)ret;
+}
+#endif
+
/*
* detach and kill segment if marked destroyed.
* The work is done in shm_close.
@@ -1397,7 +1590,7 @@ static int sysvipc_shm_proc_show(struct seq_file *s, void *it)
seq_printf(s,
"%10d %10d %4o " SIZE_SPEC " %5u %5u "
- "%5lu %5u %5u %5u %5u %10lu %10lu %10lu "
+ "%5lu %5u %5u %5u %5u %10llu %10llu %10llu "
SIZE_SPEC " " SIZE_SPEC "\n",
shp->shm_perm.key,
shp->shm_perm.id,
diff --git a/ipc/syscall.c b/ipc/syscall.c
index 52429489cde0..667022746ca5 100644
--- a/ipc/syscall.c
+++ b/ipc/syscall.c
@@ -5,12 +5,12 @@
* the individual syscalls instead.
*/
#include <linux/unistd.h>
+#include <linux/syscalls.h>
#ifdef __ARCH_WANT_SYS_IPC
#include <linux/errno.h>
#include <linux/ipc.h>
#include <linux/shm.h>
-#include <linux/syscalls.h>
#include <linux/uaccess.h>
SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second,
@@ -97,3 +97,91 @@ SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second,
}
}
#endif
+
+#ifdef CONFIG_COMPAT
+#include <linux/compat.h>
+
+#ifndef COMPAT_SHMLBA
+#define COMPAT_SHMLBA SHMLBA
+#endif
+
+struct compat_ipc_kludge {
+ compat_uptr_t msgp;
+ compat_long_t msgtyp;
+};
+
+#ifdef CONFIG_ARCH_WANT_OLD_COMPAT_IPC
+COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second,
+ u32, third, compat_uptr_t, ptr, u32, fifth)
+{
+ int version;
+ u32 pad;
+
+ version = call >> 16; /* hack for backward compatibility */
+ call &= 0xffff;
+
+ switch (call) {
+ case SEMOP:
+ /* struct sembuf is the same on 32 and 64bit :)) */
+ return sys_semtimedop(first, compat_ptr(ptr), second, NULL);
+ case SEMTIMEDOP:
+ return compat_sys_semtimedop(first, compat_ptr(ptr), second,
+ compat_ptr(fifth));
+ case SEMGET:
+ return sys_semget(first, second, third);
+ case SEMCTL:
+ if (!ptr)
+ return -EINVAL;
+ if (get_user(pad, (u32 __user *) compat_ptr(ptr)))
+ return -EFAULT;
+ return compat_sys_semctl(first, second, third, pad);
+
+ case MSGSND:
+ return compat_sys_msgsnd(first, ptr, second, third);
+
+ case MSGRCV: {
+ void __user *uptr = compat_ptr(ptr);
+
+ if (first < 0 || second < 0)
+ return -EINVAL;
+
+ if (!version) {
+ struct compat_ipc_kludge ipck;
+ if (!uptr)
+ return -EINVAL;
+ if (copy_from_user(&ipck, uptr, sizeof(ipck)))
+ return -EFAULT;
+ return compat_sys_msgrcv(first, ipck.msgp, second,
+ ipck.msgtyp, third);
+ }
+ return compat_sys_msgrcv(first, ptr, second, fifth, third);
+ }
+ case MSGGET:
+ return sys_msgget(first, second);
+ case MSGCTL:
+ return compat_sys_msgctl(first, second, compat_ptr(ptr));
+
+ case SHMAT: {
+ int err;
+ unsigned long raddr;
+
+ if (version == 1)
+ return -EINVAL;
+ err = do_shmat(first, compat_ptr(ptr), second, &raddr,
+ COMPAT_SHMLBA);
+ if (err < 0)
+ return err;
+ return put_user(raddr, (compat_ulong_t *)compat_ptr(third));
+ }
+ case SHMDT:
+ return sys_shmdt(compat_ptr(ptr));
+ case SHMGET:
+ return sys_shmget(first, (unsigned)second, third);
+ case SHMCTL:
+ return compat_sys_shmctl(first, second, compat_ptr(ptr));
+ }
+
+ return -ENOSYS;
+}
+#endif
+#endif
diff --git a/ipc/util.h b/ipc/util.h
index 80c9f51c3f07..b21297bc11eb 100644
--- a/ipc/util.h
+++ b/ipc/util.h
@@ -194,4 +194,34 @@ int ipcget(struct ipc_namespace *ns, struct ipc_ids *ids,
const struct ipc_ops *ops, struct ipc_params *params);
void free_ipcs(struct ipc_namespace *ns, struct ipc_ids *ids,
void (*free)(struct ipc_namespace *, struct kern_ipc_perm *));
+
+#ifdef CONFIG_COMPAT
+#include <linux/compat.h>
+struct compat_ipc_perm {
+ key_t key;
+ __compat_uid_t uid;
+ __compat_gid_t gid;
+ __compat_uid_t cuid;
+ __compat_gid_t cgid;
+ compat_mode_t mode;
+ unsigned short seq;
+};
+
+void to_compat_ipc_perm(struct compat_ipc_perm *, struct ipc64_perm *);
+void to_compat_ipc64_perm(struct compat_ipc64_perm *, struct ipc64_perm *);
+int get_compat_ipc_perm(struct ipc64_perm *, struct compat_ipc_perm __user *);
+int get_compat_ipc64_perm(struct ipc64_perm *,
+ struct compat_ipc64_perm __user *);
+
+static inline int compat_ipc_parse_version(int *cmd)
+{
+#ifdef CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION
+ int version = *cmd & IPC_64;
+ *cmd &= ~IPC_64;
+ return version;
+#else
+ return IPC_64;
+#endif
+}
+#endif
#endif
diff --git a/kernel/acct.c b/kernel/acct.c
index 5b1284370367..5e72af29ab73 100644
--- a/kernel/acct.c
+++ b/kernel/acct.c
@@ -516,7 +516,7 @@ static void do_acct_process(struct bsd_acct_struct *acct)
if (file_start_write_trylock(file)) {
/* it's been opened O_APPEND, so position is irrelevant */
loff_t pos = 0;
- __kernel_write(file, (char *)&ac, sizeof(acct_t), &pos);
+ __kernel_write(file, &ac, sizeof(acct_t), &pos);
file_end_write(file);
}
out:
diff --git a/kernel/audit.h b/kernel/audit.h
index b331d9b83f63..9b110ae17ee3 100644
--- a/kernel/audit.h
+++ b/kernel/audit.h
@@ -182,7 +182,7 @@ struct audit_context {
mqd_t mqdes;
size_t msg_len;
unsigned int msg_prio;
- struct timespec abs_timeout;
+ struct timespec64 abs_timeout;
} mq_sendrecv;
struct {
int oflag;
diff --git a/kernel/auditsc.c b/kernel/auditsc.c
index aac1a41f82bd..ecc23e25c9eb 100644
--- a/kernel/auditsc.c
+++ b/kernel/auditsc.c
@@ -1235,11 +1235,11 @@ static void show_special(struct audit_context *context, int *call_panic)
case AUDIT_MQ_SENDRECV:
audit_log_format(ab,
"mqdes=%d msg_len=%zd msg_prio=%u "
- "abs_timeout_sec=%ld abs_timeout_nsec=%ld",
+ "abs_timeout_sec=%lld abs_timeout_nsec=%ld",
context->mq_sendrecv.mqdes,
context->mq_sendrecv.msg_len,
context->mq_sendrecv.msg_prio,
- context->mq_sendrecv.abs_timeout.tv_sec,
+ (long long) context->mq_sendrecv.abs_timeout.tv_sec,
context->mq_sendrecv.abs_timeout.tv_nsec);
break;
case AUDIT_MQ_NOTIFY:
@@ -2083,15 +2083,15 @@ void __audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr)
*
*/
void __audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, unsigned int msg_prio,
- const struct timespec *abs_timeout)
+ const struct timespec64 *abs_timeout)
{
struct audit_context *context = current->audit_context;
- struct timespec *p = &context->mq_sendrecv.abs_timeout;
+ struct timespec64 *p = &context->mq_sendrecv.abs_timeout;
if (abs_timeout)
- memcpy(p, abs_timeout, sizeof(struct timespec));
+ memcpy(p, abs_timeout, sizeof(*p));
else
- memset(p, 0, sizeof(struct timespec));
+ memset(p, 0, sizeof(*p));
context->mq_sendrecv.mqdes = mqdes;
context->mq_sendrecv.msg_len = msg_len;
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 477b6932c3c1..799b2451ef2d 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -2292,7 +2292,8 @@ static int check_alu_op(struct bpf_verifier_env *env, struct bpf_insn *insn)
}
} else {
if (insn->src_reg != BPF_REG_0 || insn->off != 0 ||
- (insn->imm != 16 && insn->imm != 32 && insn->imm != 64)) {
+ (insn->imm != 16 && insn->imm != 32 && insn->imm != 64) ||
+ BPF_CLASS(insn->code) == BPF_ALU64) {
verbose("BPF_END uses reserved fields\n");
return -EINVAL;
}
diff --git a/kernel/compat.c b/kernel/compat.c
index 6f0a0e723a06..772e038d04d9 100644
--- a/kernel/compat.c
+++ b/kernel/compat.c
@@ -200,29 +200,6 @@ int compat_put_timespec(const struct timespec *ts, void __user *uts)
}
EXPORT_SYMBOL_GPL(compat_put_timespec);
-int compat_convert_timespec(struct timespec __user **kts,
- const void __user *cts)
-{
- struct timespec ts;
- struct timespec __user *uts;
-
- if (!cts || COMPAT_USE_64BIT_TIME) {
- *kts = (struct timespec __user *)cts;
- return 0;
- }
-
- uts = compat_alloc_user_space(sizeof(ts));
- if (!uts)
- return -EFAULT;
- if (compat_get_timespec(&ts, cts))
- return -EFAULT;
- if (copy_to_user(uts, &ts, sizeof(ts)))
- return -EFAULT;
-
- *kts = uts;
- return 0;
-}
-
int get_compat_itimerval(struct itimerval *o, const struct compat_itimerval __user *i)
{
struct compat_itimerval v32;
diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
index f51b7b6d2451..6fc89fd93824 100644
--- a/kernel/irq/chip.c
+++ b/kernel/irq/chip.c
@@ -202,7 +202,7 @@ __irq_startup_managed(struct irq_desc *desc, struct cpumask *aff, bool force)
irqd_clr_managed_shutdown(d);
- if (cpumask_any_and(aff, cpu_online_mask) > nr_cpu_ids) {
+ if (cpumask_any_and(aff, cpu_online_mask) >= nr_cpu_ids) {
/*
* Catch code which fiddles with enable_irq() on a managed
* and potentially shutdown IRQ. Chained interrupt
diff --git a/kernel/locking/test-ww_mutex.c b/kernel/locking/test-ww_mutex.c
index 39f56c870051..0e4cd64ad2c0 100644
--- a/kernel/locking/test-ww_mutex.c
+++ b/kernel/locking/test-ww_mutex.c
@@ -362,7 +362,7 @@ static int *get_random_order(int count)
int *order;
int n, r, tmp;
- order = kmalloc_array(count, sizeof(*order), GFP_TEMPORARY);
+ order = kmalloc_array(count, sizeof(*order), GFP_KERNEL);
if (!order)
return order;
diff --git a/kernel/module.c b/kernel/module.c
index 40f983cbea81..de66ec825992 100644
--- a/kernel/module.c
+++ b/kernel/module.c
@@ -2707,21 +2707,21 @@ static void add_kallsyms(struct module *mod, const struct load_info *info)
}
#endif /* CONFIG_KALLSYMS */
-static void dynamic_debug_setup(struct _ddebug *debug, unsigned int num)
+static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num)
{
if (!debug)
return;
#ifdef CONFIG_DYNAMIC_DEBUG
- if (ddebug_add_module(debug, num, debug->modname))
+ if (ddebug_add_module(debug, num, mod->name))
pr_err("dynamic debug error adding module: %s\n",
debug->modname);
#endif
}
-static void dynamic_debug_remove(struct _ddebug *debug)
+static void dynamic_debug_remove(struct module *mod, struct _ddebug *debug)
{
if (debug)
- ddebug_remove_module(debug->modname);
+ ddebug_remove_module(mod->name);
}
void * __weak module_alloc(unsigned long size)
@@ -3715,7 +3715,7 @@ static int load_module(struct load_info *info, const char __user *uargs,
goto free_arch_cleanup;
}
- dynamic_debug_setup(info->debug, info->num_debug);
+ dynamic_debug_setup(mod, info->debug, info->num_debug);
/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */
ftrace_module_init(mod);
@@ -3779,7 +3779,7 @@ static int load_module(struct load_info *info, const char __user *uargs,
module_disable_nx(mod);
ddebug_cleanup:
- dynamic_debug_remove(info->debug);
+ dynamic_debug_remove(mod, info->debug);
synchronize_sched();
kfree(mod->args);
free_arch_cleanup:
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 136a76d80dbf..18a6966567da 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1173,6 +1173,10 @@ void set_task_cpu(struct task_struct *p, unsigned int new_cpu)
WARN_ON_ONCE(debug_locks && !(lockdep_is_held(&p->pi_lock) ||
lockdep_is_held(&task_rq(p)->lock)));
#endif
+ /*
+ * Clearly, migrating tasks to offline CPUs is a fairly daft thing.
+ */
+ WARN_ON_ONCE(!cpu_online(new_cpu));
#endif
trace_sched_migrate_task(p, new_cpu);
diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
index 8e536d963652..01217fb5a5de 100644
--- a/kernel/sched/debug.c
+++ b/kernel/sched/debug.c
@@ -181,11 +181,16 @@ static const struct file_operations sched_feat_fops = {
.release = single_release,
};
+__read_mostly bool sched_debug_enabled;
+
static __init int sched_init_debug(void)
{
debugfs_create_file("sched_features", 0644, NULL, NULL,
&sched_feat_fops);
+ debugfs_create_bool("sched_debug", 0644, NULL,
+ &sched_debug_enabled);
+
return 0;
}
late_initcall(sched_init_debug);
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 0a85641e62ce..70ba32e08a23 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -8437,6 +8437,12 @@ static int idle_balance(struct rq *this_rq, struct rq_flags *rf)
this_rq->idle_stamp = rq_clock(this_rq);
/*
+ * Do not pull tasks towards !active CPUs...
+ */
+ if (!cpu_active(this_cpu))
+ return 0;
+
+ /*
* This is OK, because current is on_cpu, which avoids it being picked
* for load-balance and preemption/IRQs are still disabled avoiding
* further scheduler activity on it and we're being very careful to
@@ -8543,6 +8549,13 @@ static int active_load_balance_cpu_stop(void *data)
struct rq_flags rf;
rq_lock_irq(busiest_rq, &rf);
+ /*
+ * Between queueing the stop-work and running it is a hole in which
+ * CPUs can become inactive. We should not move tasks from or to
+ * inactive CPUs.
+ */
+ if (!cpu_active(busiest_cpu) || !cpu_active(target_cpu))
+ goto out_unlock;
/* make sure the requested cpu hasn't gone down in the meantime */
if (unlikely(busiest_cpu != smp_processor_id() ||
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index 746ac78ff492..14db76cd496f 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -1951,6 +1951,8 @@ extern struct sched_entity *__pick_first_entity(struct cfs_rq *cfs_rq);
extern struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq);
#ifdef CONFIG_SCHED_DEBUG
+extern bool sched_debug_enabled;
+
extern void print_cfs_stats(struct seq_file *m, int cpu);
extern void print_rt_stats(struct seq_file *m, int cpu);
extern void print_dl_stats(struct seq_file *m, int cpu);
diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c
index 5d0062cc10cb..f1cf4f306a82 100644
--- a/kernel/sched/topology.c
+++ b/kernel/sched/topology.c
@@ -14,11 +14,9 @@ cpumask_var_t sched_domains_tmpmask2;
#ifdef CONFIG_SCHED_DEBUG
-static __read_mostly int sched_debug_enabled;
-
static int __init sched_debug_setup(char *str)
{
- sched_debug_enabled = 1;
+ sched_debug_enabled = true;
return 0;
}
diff --git a/kernel/sched/wait.c b/kernel/sched/wait.c
index d6afed6d0752..98feab7933c7 100644
--- a/kernel/sched/wait.c
+++ b/kernel/sched/wait.c
@@ -53,6 +53,12 @@ void remove_wait_queue(struct wait_queue_head *wq_head, struct wait_queue_entry
}
EXPORT_SYMBOL(remove_wait_queue);
+/*
+ * Scan threshold to break wait queue walk.
+ * This allows a waker to take a break from holding the
+ * wait queue lock during the wait queue walk.
+ */
+#define WAITQUEUE_WALK_BREAK_CNT 64
/*
* The core wakeup function. Non-exclusive wakeups (nr_exclusive == 0) just
@@ -63,18 +69,67 @@ EXPORT_SYMBOL(remove_wait_queue);
* started to run but is not in state TASK_RUNNING. try_to_wake_up() returns
* zero in this (rare) case, and we handle it by continuing to scan the queue.
*/
-static void __wake_up_common(struct wait_queue_head *wq_head, unsigned int mode,
- int nr_exclusive, int wake_flags, void *key)
+static int __wake_up_common(struct wait_queue_head *wq_head, unsigned int mode,
+ int nr_exclusive, int wake_flags, void *key,
+ wait_queue_entry_t *bookmark)
{
wait_queue_entry_t *curr, *next;
+ int cnt = 0;
+
+ if (bookmark && (bookmark->flags & WQ_FLAG_BOOKMARK)) {
+ curr = list_next_entry(bookmark, entry);
+
+ list_del(&bookmark->entry);
+ bookmark->flags = 0;
+ } else
+ curr = list_first_entry(&wq_head->head, wait_queue_entry_t, entry);
- list_for_each_entry_safe(curr, next, &wq_head->head, entry) {
+ if (&curr->entry == &wq_head->head)
+ return nr_exclusive;
+
+ list_for_each_entry_safe_from(curr, next, &wq_head->head, entry) {
unsigned flags = curr->flags;
- int ret = curr->func(curr, mode, wake_flags, key);
+ int ret;
+
+ if (flags & WQ_FLAG_BOOKMARK)
+ continue;
+
+ ret = curr->func(curr, mode, wake_flags, key);
if (ret < 0)
break;
if (ret && (flags & WQ_FLAG_EXCLUSIVE) && !--nr_exclusive)
break;
+
+ if (bookmark && (++cnt > WAITQUEUE_WALK_BREAK_CNT) &&
+ (&next->entry != &wq_head->head)) {
+ bookmark->flags = WQ_FLAG_BOOKMARK;
+ list_add_tail(&bookmark->entry, &next->entry);
+ break;
+ }
+ }
+ return nr_exclusive;
+}
+
+static void __wake_up_common_lock(struct wait_queue_head *wq_head, unsigned int mode,
+ int nr_exclusive, int wake_flags, void *key)
+{
+ unsigned long flags;
+ wait_queue_entry_t bookmark;
+
+ bookmark.flags = 0;
+ bookmark.private = NULL;
+ bookmark.func = NULL;
+ INIT_LIST_HEAD(&bookmark.entry);
+
+ spin_lock_irqsave(&wq_head->lock, flags);
+ nr_exclusive = __wake_up_common(wq_head, mode, nr_exclusive, wake_flags, key, &bookmark);
+ spin_unlock_irqrestore(&wq_head->lock, flags);
+
+ while (bookmark.flags & WQ_FLAG_BOOKMARK) {
+ spin_lock_irqsave(&wq_head->lock, flags);
+ nr_exclusive = __wake_up_common(wq_head, mode, nr_exclusive,
+ wake_flags, key, &bookmark);
+ spin_unlock_irqrestore(&wq_head->lock, flags);
}
}
@@ -91,11 +146,7 @@ static void __wake_up_common(struct wait_queue_head *wq_head, unsigned int mode,
void __wake_up(struct wait_queue_head *wq_head, unsigned int mode,
int nr_exclusive, void *key)
{
- unsigned long flags;
-
- spin_lock_irqsave(&wq_head->lock, flags);
- __wake_up_common(wq_head, mode, nr_exclusive, 0, key);
- spin_unlock_irqrestore(&wq_head->lock, flags);
+ __wake_up_common_lock(wq_head, mode, nr_exclusive, 0, key);
}
EXPORT_SYMBOL(__wake_up);
@@ -104,16 +155,23 @@ EXPORT_SYMBOL(__wake_up);
*/
void __wake_up_locked(struct wait_queue_head *wq_head, unsigned int mode, int nr)
{
- __wake_up_common(wq_head, mode, nr, 0, NULL);
+ __wake_up_common(wq_head, mode, nr, 0, NULL, NULL);
}
EXPORT_SYMBOL_GPL(__wake_up_locked);
void __wake_up_locked_key(struct wait_queue_head *wq_head, unsigned int mode, void *key)
{
- __wake_up_common(wq_head, mode, 1, 0, key);
+ __wake_up_common(wq_head, mode, 1, 0, key, NULL);
}
EXPORT_SYMBOL_GPL(__wake_up_locked_key);
+void __wake_up_locked_key_bookmark(struct wait_queue_head *wq_head,
+ unsigned int mode, void *key, wait_queue_entry_t *bookmark)
+{
+ __wake_up_common(wq_head, mode, 1, 0, key, bookmark);
+}
+EXPORT_SYMBOL_GPL(__wake_up_locked_key_bookmark);
+
/**
* __wake_up_sync_key - wake up threads blocked on a waitqueue.
* @wq_head: the waitqueue
@@ -134,7 +192,6 @@ EXPORT_SYMBOL_GPL(__wake_up_locked_key);
void __wake_up_sync_key(struct wait_queue_head *wq_head, unsigned int mode,
int nr_exclusive, void *key)
{
- unsigned long flags;
int wake_flags = 1; /* XXX WF_SYNC */
if (unlikely(!wq_head))
@@ -143,9 +200,7 @@ void __wake_up_sync_key(struct wait_queue_head *wq_head, unsigned int mode,
if (unlikely(nr_exclusive != 1))
wake_flags = 0;
- spin_lock_irqsave(&wq_head->lock, flags);
- __wake_up_common(wq_head, mode, nr_exclusive, wake_flags, key);
- spin_unlock_irqrestore(&wq_head->lock, flags);
+ __wake_up_common_lock(wq_head, mode, nr_exclusive, wake_flags, key);
}
EXPORT_SYMBOL_GPL(__wake_up_sync_key);
diff --git a/kernel/sysctl_binary.c b/kernel/sysctl_binary.c
index 02e1859f2ca8..58ea8c03662e 100644
--- a/kernel/sysctl_binary.c
+++ b/kernel/sysctl_binary.c
@@ -986,8 +986,9 @@ static ssize_t bin_intvec(struct file *file,
size_t length = oldlen / sizeof(*vec);
char *str, *end;
int i;
+ loff_t pos = 0;
- result = kernel_read(file, 0, buffer, BUFSZ - 1);
+ result = kernel_read(file, buffer, BUFSZ - 1, &pos);
if (result < 0)
goto out_kfree;
@@ -1016,6 +1017,7 @@ static ssize_t bin_intvec(struct file *file,
size_t length = newlen / sizeof(*vec);
char *str, *end;
int i;
+ loff_t pos = 0;
str = buffer;
end = str + BUFSZ;
@@ -1029,7 +1031,7 @@ static ssize_t bin_intvec(struct file *file,
str += scnprintf(str, end - str, "%lu\t", value);
}
- result = kernel_write(file, buffer, str - buffer, 0);
+ result = kernel_write(file, buffer, str - buffer, &pos);
if (result < 0)
goto out_kfree;
}
@@ -1057,8 +1059,9 @@ static ssize_t bin_ulongvec(struct file *file,
size_t length = oldlen / sizeof(*vec);
char *str, *end;
int i;
+ loff_t pos = 0;
- result = kernel_read(file, 0, buffer, BUFSZ - 1);
+ result = kernel_read(file, buffer, BUFSZ - 1, &pos);
if (result < 0)
goto out_kfree;
@@ -1087,6 +1090,7 @@ static ssize_t bin_ulongvec(struct file *file,
size_t length = newlen / sizeof(*vec);
char *str, *end;
int i;
+ loff_t pos = 0;
str = buffer;
end = str + BUFSZ;
@@ -1100,7 +1104,7 @@ static ssize_t bin_ulongvec(struct file *file,
str += scnprintf(str, end - str, "%lu\t", value);
}
- result = kernel_write(file, buffer, str - buffer, 0);
+ result = kernel_write(file, buffer, str - buffer, &pos);
if (result < 0)
goto out_kfree;
}
@@ -1120,8 +1124,9 @@ static ssize_t bin_uuid(struct file *file,
if (oldval && oldlen) {
char buf[UUID_STRING_LEN + 1];
uuid_t uuid;
+ loff_t pos = 0;
- result = kernel_read(file, 0, buf, sizeof(buf) - 1);
+ result = kernel_read(file, buf, sizeof(buf) - 1, &pos);
if (result < 0)
goto out;
@@ -1154,8 +1159,9 @@ static ssize_t bin_dn_node_address(struct file *file,
char buf[15], *nodep;
unsigned long area, node;
__le16 dnaddr;
+ loff_t pos = 0;
- result = kernel_read(file, 0, buf, sizeof(buf) - 1);
+ result = kernel_read(file, buf, sizeof(buf) - 1, &pos);
if (result < 0)
goto out;
@@ -1188,6 +1194,7 @@ static ssize_t bin_dn_node_address(struct file *file,
__le16 dnaddr;
char buf[15];
int len;
+ loff_t pos = 0;
result = -EINVAL;
if (newlen != sizeof(dnaddr))
@@ -1201,7 +1208,7 @@ static ssize_t bin_dn_node_address(struct file *file,
le16_to_cpu(dnaddr) >> 10,
le16_to_cpu(dnaddr) & 0x3ff);
- result = kernel_write(file, buf, len, 0);
+ result = kernel_write(file, buf, len, &pos);
if (result < 0)
goto out;
}
diff --git a/kernel/trace/trace_events_filter.c b/kernel/trace/trace_events_filter.c
index 181e139a8057..61e7f0678d33 100644
--- a/kernel/trace/trace_events_filter.c
+++ b/kernel/trace/trace_events_filter.c
@@ -702,7 +702,7 @@ static void append_filter_err(struct filter_parse_state *ps,
int pos = ps->lasterr_pos;
char *buf, *pbuf;
- buf = (char *)__get_free_page(GFP_TEMPORARY);
+ buf = (char *)__get_free_page(GFP_KERNEL);
if (!buf)
return;
diff --git a/kernel/trace/trace_syscalls.c b/kernel/trace/trace_syscalls.c
index 9c4eef20301c..696afe72d3b1 100644
--- a/kernel/trace/trace_syscalls.c
+++ b/kernel/trace/trace_syscalls.c
@@ -565,7 +565,7 @@ static int perf_call_bpf_enter(struct bpf_prog *prog, struct pt_regs *regs,
struct syscall_tp_t {
unsigned long long regs;
unsigned long syscall_nr;
- unsigned long args[sys_data->nb_args];
+ unsigned long args[SYSCALL_DEFINE_MAXARGS];
} param;
int i;
diff --git a/lib/Kconfig b/lib/Kconfig
index a85e6f76add5..b1445b22a6de 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -192,6 +192,9 @@ config CRC8
when they need to do cyclic redundancy check according CRC8
algorithm. Module will be called crc8.
+config XXHASH
+ tristate
+
config AUDIT_GENERIC
bool
depends on AUDIT && !AUDIT_ARCH
@@ -246,6 +249,14 @@ config LZ4HC_COMPRESS
config LZ4_DECOMPRESS
tristate
+config ZSTD_COMPRESS
+ select XXHASH
+ tristate
+
+config ZSTD_DECOMPRESS
+ select XXHASH
+ tristate
+
source "lib/xz/Kconfig"
#
diff --git a/lib/Makefile b/lib/Makefile
index 469ce5e24e4f..dafa79613fb4 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -103,6 +103,7 @@ obj-$(CONFIG_CRC4) += crc4.o
obj-$(CONFIG_CRC7) += crc7.o
obj-$(CONFIG_LIBCRC32C) += libcrc32c.o
obj-$(CONFIG_CRC8) += crc8.o
+obj-$(CONFIG_XXHASH) += xxhash.o
obj-$(CONFIG_GENERIC_ALLOCATOR) += genalloc.o
obj-$(CONFIG_842_COMPRESS) += 842/
@@ -116,6 +117,8 @@ obj-$(CONFIG_LZO_DECOMPRESS) += lzo/
obj-$(CONFIG_LZ4_COMPRESS) += lz4/
obj-$(CONFIG_LZ4HC_COMPRESS) += lz4/
obj-$(CONFIG_LZ4_DECOMPRESS) += lz4/
+obj-$(CONFIG_ZSTD_COMPRESS) += zstd/
+obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd/
obj-$(CONFIG_XZ_DEC) += xz/
obj-$(CONFIG_RAID6_PQ) += raid6/
diff --git a/lib/idr.c b/lib/idr.c
index 082778cf883e..f9adf4805fd7 100644
--- a/lib/idr.c
+++ b/lib/idr.c
@@ -151,7 +151,7 @@ EXPORT_SYMBOL(idr_get_next_ext);
*/
void *idr_replace(struct idr *idr, void *ptr, int id)
{
- if (WARN_ON_ONCE(id < 0))
+ if (id < 0)
return ERR_PTR(-EINVAL);
return idr_replace_ext(idr, ptr, id);
diff --git a/lib/string_helpers.c b/lib/string_helpers.c
index ecaac2c0526f..29c490e5d478 100644
--- a/lib/string_helpers.c
+++ b/lib/string_helpers.c
@@ -576,7 +576,7 @@ char *kstrdup_quotable_cmdline(struct task_struct *task, gfp_t gfp)
char *buffer, *quoted;
int i, res;
- buffer = kmalloc(PAGE_SIZE, GFP_TEMPORARY);
+ buffer = kmalloc(PAGE_SIZE, GFP_KERNEL);
if (!buffer)
return NULL;
@@ -612,7 +612,7 @@ char *kstrdup_quotable_file(struct file *file, gfp_t gfp)
return kstrdup("<unknown>", gfp);
/* We add 11 spaces for ' (deleted)' to be appended */
- temp = kmalloc(PATH_MAX + 11, GFP_TEMPORARY);
+ temp = kmalloc(PATH_MAX + 11, GFP_KERNEL);
if (!temp)
return kstrdup("<no_memory>", gfp);
diff --git a/lib/test_bitmap.c b/lib/test_bitmap.c
index 599c6713f2a2..aa1f2669bdd5 100644
--- a/lib/test_bitmap.c
+++ b/lib/test_bitmap.c
@@ -186,13 +186,13 @@ static const unsigned long exp[] __initconst = {
BITMAP_FROM_U64(0x22222222),
BITMAP_FROM_U64(0xffffffff),
BITMAP_FROM_U64(0xfffffffe),
- BITMAP_FROM_U64(0x3333333311111111),
- BITMAP_FROM_U64(0xffffffff77777777)
+ BITMAP_FROM_U64(0x3333333311111111ULL),
+ BITMAP_FROM_U64(0xffffffff77777777ULL)
};
static const unsigned long exp2[] __initconst = {
- BITMAP_FROM_U64(0x3333333311111111),
- BITMAP_FROM_U64(0xffffffff77777777)
+ BITMAP_FROM_U64(0x3333333311111111ULL),
+ BITMAP_FROM_U64(0xffffffff77777777ULL)
};
static const struct test_bitmap_parselist parselist_tests[] __initconst = {
diff --git a/lib/xxhash.c b/lib/xxhash.c
new file mode 100644
index 000000000000..aa61e2a3802f
--- /dev/null
+++ b/lib/xxhash.c
@@ -0,0 +1,500 @@
+/*
+ * xxHash - Extremely Fast Hash algorithm
+ * Copyright (C) 2012-2016, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at:
+ * - xxHash homepage: http://cyan4973.github.io/xxHash/
+ * - xxHash source repository: https://github.com/Cyan4973/xxHash
+ */
+
+#include <asm/unaligned.h>
+#include <linux/errno.h>
+#include <linux/compiler.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include <linux/xxhash.h>
+
+/*-*************************************
+ * Macros
+ **************************************/
+#define xxh_rotl32(x, r) ((x << r) | (x >> (32 - r)))
+#define xxh_rotl64(x, r) ((x << r) | (x >> (64 - r)))
+
+#ifdef __LITTLE_ENDIAN
+# define XXH_CPU_LITTLE_ENDIAN 1
+#else
+# define XXH_CPU_LITTLE_ENDIAN 0
+#endif
+
+/*-*************************************
+ * Constants
+ **************************************/
+static const uint32_t PRIME32_1 = 2654435761U;
+static const uint32_t PRIME32_2 = 2246822519U;
+static const uint32_t PRIME32_3 = 3266489917U;
+static const uint32_t PRIME32_4 = 668265263U;
+static const uint32_t PRIME32_5 = 374761393U;
+
+static const uint64_t PRIME64_1 = 11400714785074694791ULL;
+static const uint64_t PRIME64_2 = 14029467366897019727ULL;
+static const uint64_t PRIME64_3 = 1609587929392839161ULL;
+static const uint64_t PRIME64_4 = 9650029242287828579ULL;
+static const uint64_t PRIME64_5 = 2870177450012600261ULL;
+
+/*-**************************
+ * Utils
+ ***************************/
+void xxh32_copy_state(struct xxh32_state *dst, const struct xxh32_state *src)
+{
+ memcpy(dst, src, sizeof(*dst));
+}
+EXPORT_SYMBOL(xxh32_copy_state);
+
+void xxh64_copy_state(struct xxh64_state *dst, const struct xxh64_state *src)
+{
+ memcpy(dst, src, sizeof(*dst));
+}
+EXPORT_SYMBOL(xxh64_copy_state);
+
+/*-***************************
+ * Simple Hash Functions
+ ****************************/
+static uint32_t xxh32_round(uint32_t seed, const uint32_t input)
+{
+ seed += input * PRIME32_2;
+ seed = xxh_rotl32(seed, 13);
+ seed *= PRIME32_1;
+ return seed;
+}
+
+uint32_t xxh32(const void *input, const size_t len, const uint32_t seed)
+{
+ const uint8_t *p = (const uint8_t *)input;
+ const uint8_t *b_end = p + len;
+ uint32_t h32;
+
+ if (len >= 16) {
+ const uint8_t *const limit = b_end - 16;
+ uint32_t v1 = seed + PRIME32_1 + PRIME32_2;
+ uint32_t v2 = seed + PRIME32_2;
+ uint32_t v3 = seed + 0;
+ uint32_t v4 = seed - PRIME32_1;
+
+ do {
+ v1 = xxh32_round(v1, get_unaligned_le32(p));
+ p += 4;
+ v2 = xxh32_round(v2, get_unaligned_le32(p));
+ p += 4;
+ v3 = xxh32_round(v3, get_unaligned_le32(p));
+ p += 4;
+ v4 = xxh32_round(v4, get_unaligned_le32(p));
+ p += 4;
+ } while (p <= limit);
+
+ h32 = xxh_rotl32(v1, 1) + xxh_rotl32(v2, 7) +
+ xxh_rotl32(v3, 12) + xxh_rotl32(v4, 18);
+ } else {
+ h32 = seed + PRIME32_5;
+ }
+
+ h32 += (uint32_t)len;
+
+ while (p + 4 <= b_end) {
+ h32 += get_unaligned_le32(p) * PRIME32_3;
+ h32 = xxh_rotl32(h32, 17) * PRIME32_4;
+ p += 4;
+ }
+
+ while (p < b_end) {
+ h32 += (*p) * PRIME32_5;
+ h32 = xxh_rotl32(h32, 11) * PRIME32_1;
+ p++;
+ }
+
+ h32 ^= h32 >> 15;
+ h32 *= PRIME32_2;
+ h32 ^= h32 >> 13;
+ h32 *= PRIME32_3;
+ h32 ^= h32 >> 16;
+
+ return h32;
+}
+EXPORT_SYMBOL(xxh32);
+
+static uint64_t xxh64_round(uint64_t acc, const uint64_t input)
+{
+ acc += input * PRIME64_2;
+ acc = xxh_rotl64(acc, 31);
+ acc *= PRIME64_1;
+ return acc;
+}
+
+static uint64_t xxh64_merge_round(uint64_t acc, uint64_t val)
+{
+ val = xxh64_round(0, val);
+ acc ^= val;
+ acc = acc * PRIME64_1 + PRIME64_4;
+ return acc;
+}
+
+uint64_t xxh64(const void *input, const size_t len, const uint64_t seed)
+{
+ const uint8_t *p = (const uint8_t *)input;
+ const uint8_t *const b_end = p + len;
+ uint64_t h64;
+
+ if (len >= 32) {
+ const uint8_t *const limit = b_end - 32;
+ uint64_t v1 = seed + PRIME64_1 + PRIME64_2;
+ uint64_t v2 = seed + PRIME64_2;
+ uint64_t v3 = seed + 0;
+ uint64_t v4 = seed - PRIME64_1;
+
+ do {
+ v1 = xxh64_round(v1, get_unaligned_le64(p));
+ p += 8;
+ v2 = xxh64_round(v2, get_unaligned_le64(p));
+ p += 8;
+ v3 = xxh64_round(v3, get_unaligned_le64(p));
+ p += 8;
+ v4 = xxh64_round(v4, get_unaligned_le64(p));
+ p += 8;
+ } while (p <= limit);
+
+ h64 = xxh_rotl64(v1, 1) + xxh_rotl64(v2, 7) +
+ xxh_rotl64(v3, 12) + xxh_rotl64(v4, 18);
+ h64 = xxh64_merge_round(h64, v1);
+ h64 = xxh64_merge_round(h64, v2);
+ h64 = xxh64_merge_round(h64, v3);
+ h64 = xxh64_merge_round(h64, v4);
+
+ } else {
+ h64 = seed + PRIME64_5;
+ }
+
+ h64 += (uint64_t)len;
+
+ while (p + 8 <= b_end) {
+ const uint64_t k1 = xxh64_round(0, get_unaligned_le64(p));
+
+ h64 ^= k1;
+ h64 = xxh_rotl64(h64, 27) * PRIME64_1 + PRIME64_4;
+ p += 8;
+ }
+
+ if (p + 4 <= b_end) {
+ h64 ^= (uint64_t)(get_unaligned_le32(p)) * PRIME64_1;
+ h64 = xxh_rotl64(h64, 23) * PRIME64_2 + PRIME64_3;
+ p += 4;
+ }
+
+ while (p < b_end) {
+ h64 ^= (*p) * PRIME64_5;
+ h64 = xxh_rotl64(h64, 11) * PRIME64_1;
+ p++;
+ }
+
+ h64 ^= h64 >> 33;
+ h64 *= PRIME64_2;
+ h64 ^= h64 >> 29;
+ h64 *= PRIME64_3;
+ h64 ^= h64 >> 32;
+
+ return h64;
+}
+EXPORT_SYMBOL(xxh64);
+
+/*-**************************************************
+ * Advanced Hash Functions
+ ***************************************************/
+void xxh32_reset(struct xxh32_state *statePtr, const uint32_t seed)
+{
+ /* use a local state for memcpy() to avoid strict-aliasing warnings */
+ struct xxh32_state state;
+
+ memset(&state, 0, sizeof(state));
+ state.v1 = seed + PRIME32_1 + PRIME32_2;
+ state.v2 = seed + PRIME32_2;
+ state.v3 = seed + 0;
+ state.v4 = seed - PRIME32_1;
+ memcpy(statePtr, &state, sizeof(state));
+}
+EXPORT_SYMBOL(xxh32_reset);
+
+void xxh64_reset(struct xxh64_state *statePtr, const uint64_t seed)
+{
+ /* use a local state for memcpy() to avoid strict-aliasing warnings */
+ struct xxh64_state state;
+
+ memset(&state, 0, sizeof(state));
+ state.v1 = seed + PRIME64_1 + PRIME64_2;
+ state.v2 = seed + PRIME64_2;
+ state.v3 = seed + 0;
+ state.v4 = seed - PRIME64_1;
+ memcpy(statePtr, &state, sizeof(state));
+}
+EXPORT_SYMBOL(xxh64_reset);
+
+int xxh32_update(struct xxh32_state *state, const void *input, const size_t len)
+{
+ const uint8_t *p = (const uint8_t *)input;
+ const uint8_t *const b_end = p + len;
+
+ if (input == NULL)
+ return -EINVAL;
+
+ state->total_len_32 += (uint32_t)len;
+ state->large_len |= (len >= 16) | (state->total_len_32 >= 16);
+
+ if (state->memsize + len < 16) { /* fill in tmp buffer */
+ memcpy((uint8_t *)(state->mem32) + state->memsize, input, len);
+ state->memsize += (uint32_t)len;
+ return 0;
+ }
+
+ if (state->memsize) { /* some data left from previous update */
+ const uint32_t *p32 = state->mem32;
+
+ memcpy((uint8_t *)(state->mem32) + state->memsize, input,
+ 16 - state->memsize);
+
+ state->v1 = xxh32_round(state->v1, get_unaligned_le32(p32));
+ p32++;
+ state->v2 = xxh32_round(state->v2, get_unaligned_le32(p32));
+ p32++;
+ state->v3 = xxh32_round(state->v3, get_unaligned_le32(p32));
+ p32++;
+ state->v4 = xxh32_round(state->v4, get_unaligned_le32(p32));
+ p32++;
+
+ p += 16-state->memsize;
+ state->memsize = 0;
+ }
+
+ if (p <= b_end - 16) {
+ const uint8_t *const limit = b_end - 16;
+ uint32_t v1 = state->v1;
+ uint32_t v2 = state->v2;
+ uint32_t v3 = state->v3;
+ uint32_t v4 = state->v4;
+
+ do {
+ v1 = xxh32_round(v1, get_unaligned_le32(p));
+ p += 4;
+ v2 = xxh32_round(v2, get_unaligned_le32(p));
+ p += 4;
+ v3 = xxh32_round(v3, get_unaligned_le32(p));
+ p += 4;
+ v4 = xxh32_round(v4, get_unaligned_le32(p));
+ p += 4;
+ } while (p <= limit);
+
+ state->v1 = v1;
+ state->v2 = v2;
+ state->v3 = v3;
+ state->v4 = v4;
+ }
+
+ if (p < b_end) {
+ memcpy(state->mem32, p, (size_t)(b_end-p));
+ state->memsize = (uint32_t)(b_end-p);
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL(xxh32_update);
+
+uint32_t xxh32_digest(const struct xxh32_state *state)
+{
+ const uint8_t *p = (const uint8_t *)state->mem32;
+ const uint8_t *const b_end = (const uint8_t *)(state->mem32) +
+ state->memsize;
+ uint32_t h32;
+
+ if (state->large_len) {
+ h32 = xxh_rotl32(state->v1, 1) + xxh_rotl32(state->v2, 7) +
+ xxh_rotl32(state->v3, 12) + xxh_rotl32(state->v4, 18);
+ } else {
+ h32 = state->v3 /* == seed */ + PRIME32_5;
+ }
+
+ h32 += state->total_len_32;
+
+ while (p + 4 <= b_end) {
+ h32 += get_unaligned_le32(p) * PRIME32_3;
+ h32 = xxh_rotl32(h32, 17) * PRIME32_4;
+ p += 4;
+ }
+
+ while (p < b_end) {
+ h32 += (*p) * PRIME32_5;
+ h32 = xxh_rotl32(h32, 11) * PRIME32_1;
+ p++;
+ }
+
+ h32 ^= h32 >> 15;
+ h32 *= PRIME32_2;
+ h32 ^= h32 >> 13;
+ h32 *= PRIME32_3;
+ h32 ^= h32 >> 16;
+
+ return h32;
+}
+EXPORT_SYMBOL(xxh32_digest);
+
+int xxh64_update(struct xxh64_state *state, const void *input, const size_t len)
+{
+ const uint8_t *p = (const uint8_t *)input;
+ const uint8_t *const b_end = p + len;
+
+ if (input == NULL)
+ return -EINVAL;
+
+ state->total_len += len;
+
+ if (state->memsize + len < 32) { /* fill in tmp buffer */
+ memcpy(((uint8_t *)state->mem64) + state->memsize, input, len);
+ state->memsize += (uint32_t)len;
+ return 0;
+ }
+
+ if (state->memsize) { /* tmp buffer is full */
+ uint64_t *p64 = state->mem64;
+
+ memcpy(((uint8_t *)p64) + state->memsize, input,
+ 32 - state->memsize);
+
+ state->v1 = xxh64_round(state->v1, get_unaligned_le64(p64));
+ p64++;
+ state->v2 = xxh64_round(state->v2, get_unaligned_le64(p64));
+ p64++;
+ state->v3 = xxh64_round(state->v3, get_unaligned_le64(p64));
+ p64++;
+ state->v4 = xxh64_round(state->v4, get_unaligned_le64(p64));
+
+ p += 32 - state->memsize;
+ state->memsize = 0;
+ }
+
+ if (p + 32 <= b_end) {
+ const uint8_t *const limit = b_end - 32;
+ uint64_t v1 = state->v1;
+ uint64_t v2 = state->v2;
+ uint64_t v3 = state->v3;
+ uint64_t v4 = state->v4;
+
+ do {
+ v1 = xxh64_round(v1, get_unaligned_le64(p));
+ p += 8;
+ v2 = xxh64_round(v2, get_unaligned_le64(p));
+ p += 8;
+ v3 = xxh64_round(v3, get_unaligned_le64(p));
+ p += 8;
+ v4 = xxh64_round(v4, get_unaligned_le64(p));
+ p += 8;
+ } while (p <= limit);
+
+ state->v1 = v1;
+ state->v2 = v2;
+ state->v3 = v3;
+ state->v4 = v4;
+ }
+
+ if (p < b_end) {
+ memcpy(state->mem64, p, (size_t)(b_end-p));
+ state->memsize = (uint32_t)(b_end - p);
+ }
+
+ return 0;
+}
+EXPORT_SYMBOL(xxh64_update);
+
+uint64_t xxh64_digest(const struct xxh64_state *state)
+{
+ const uint8_t *p = (const uint8_t *)state->mem64;
+ const uint8_t *const b_end = (const uint8_t *)state->mem64 +
+ state->memsize;
+ uint64_t h64;
+
+ if (state->total_len >= 32) {
+ const uint64_t v1 = state->v1;
+ const uint64_t v2 = state->v2;
+ const uint64_t v3 = state->v3;
+ const uint64_t v4 = state->v4;
+
+ h64 = xxh_rotl64(v1, 1) + xxh_rotl64(v2, 7) +
+ xxh_rotl64(v3, 12) + xxh_rotl64(v4, 18);
+ h64 = xxh64_merge_round(h64, v1);
+ h64 = xxh64_merge_round(h64, v2);
+ h64 = xxh64_merge_round(h64, v3);
+ h64 = xxh64_merge_round(h64, v4);
+ } else {
+ h64 = state->v3 + PRIME64_5;
+ }
+
+ h64 += (uint64_t)state->total_len;
+
+ while (p + 8 <= b_end) {
+ const uint64_t k1 = xxh64_round(0, get_unaligned_le64(p));
+
+ h64 ^= k1;
+ h64 = xxh_rotl64(h64, 27) * PRIME64_1 + PRIME64_4;
+ p += 8;
+ }
+
+ if (p + 4 <= b_end) {
+ h64 ^= (uint64_t)(get_unaligned_le32(p)) * PRIME64_1;
+ h64 = xxh_rotl64(h64, 23) * PRIME64_2 + PRIME64_3;
+ p += 4;
+ }
+
+ while (p < b_end) {
+ h64 ^= (*p) * PRIME64_5;
+ h64 = xxh_rotl64(h64, 11) * PRIME64_1;
+ p++;
+ }
+
+ h64 ^= h64 >> 33;
+ h64 *= PRIME64_2;
+ h64 ^= h64 >> 29;
+ h64 *= PRIME64_3;
+ h64 ^= h64 >> 32;
+
+ return h64;
+}
+EXPORT_SYMBOL(xxh64_digest);
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("xxHash");
diff --git a/lib/zstd/Makefile b/lib/zstd/Makefile
new file mode 100644
index 000000000000..dd0a359c135b
--- /dev/null
+++ b/lib/zstd/Makefile
@@ -0,0 +1,18 @@
+obj-$(CONFIG_ZSTD_COMPRESS) += zstd_compress.o
+obj-$(CONFIG_ZSTD_DECOMPRESS) += zstd_decompress.o
+
+ccflags-y += -O3
+
+# Object files unique to zstd_compress and zstd_decompress
+zstd_compress-y := fse_compress.o huf_compress.o compress.o
+zstd_decompress-y := huf_decompress.o decompress.o
+
+# These object files are shared between the modules.
+# Always add them to zstd_compress.
+# Unless both zstd_compress and zstd_decompress are built in
+# then also add them to zstd_decompress.
+zstd_compress-y += entropy_common.o fse_decompress.o zstd_common.o
+
+ifneq ($(CONFIG_ZSTD_COMPRESS)$(CONFIG_ZSTD_DECOMPRESS),yy)
+ zstd_decompress-y += entropy_common.o fse_decompress.o zstd_common.o
+endif
diff --git a/lib/zstd/bitstream.h b/lib/zstd/bitstream.h
new file mode 100644
index 000000000000..a826b99e1d63
--- /dev/null
+++ b/lib/zstd/bitstream.h
@@ -0,0 +1,374 @@
+/*
+ * bitstream
+ * Part of FSE library
+ * header file (to include)
+ * Copyright (C) 2013-2016, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ */
+#ifndef BITSTREAM_H_MODULE
+#define BITSTREAM_H_MODULE
+
+/*
+* This API consists of small unitary functions, which must be inlined for best performance.
+* Since link-time-optimization is not available for all compilers,
+* these functions are defined into a .h to be included.
+*/
+
+/*-****************************************
+* Dependencies
+******************************************/
+#include "error_private.h" /* error codes and messages */
+#include "mem.h" /* unaligned access routines */
+
+/*=========================================
+* Target specific
+=========================================*/
+#define STREAM_ACCUMULATOR_MIN_32 25
+#define STREAM_ACCUMULATOR_MIN_64 57
+#define STREAM_ACCUMULATOR_MIN ((U32)(ZSTD_32bits() ? STREAM_ACCUMULATOR_MIN_32 : STREAM_ACCUMULATOR_MIN_64))
+
+/*-******************************************
+* bitStream encoding API (write forward)
+********************************************/
+/* bitStream can mix input from multiple sources.
+* A critical property of these streams is that they encode and decode in **reverse** direction.
+* So the first bit sequence you add will be the last to be read, like a LIFO stack.
+*/
+typedef struct {
+ size_t bitContainer;
+ int bitPos;
+ char *startPtr;
+ char *ptr;
+ char *endPtr;
+} BIT_CStream_t;
+
+ZSTD_STATIC size_t BIT_initCStream(BIT_CStream_t *bitC, void *dstBuffer, size_t dstCapacity);
+ZSTD_STATIC void BIT_addBits(BIT_CStream_t *bitC, size_t value, unsigned nbBits);
+ZSTD_STATIC void BIT_flushBits(BIT_CStream_t *bitC);
+ZSTD_STATIC size_t BIT_closeCStream(BIT_CStream_t *bitC);
+
+/* Start with initCStream, providing the size of buffer to write into.
+* bitStream will never write outside of this buffer.
+* `dstCapacity` must be >= sizeof(bitD->bitContainer), otherwise @return will be an error code.
+*
+* bits are first added to a local register.
+* Local register is size_t, hence 64-bits on 64-bits systems, or 32-bits on 32-bits systems.
+* Writing data into memory is an explicit operation, performed by the flushBits function.
+* Hence keep track how many bits are potentially stored into local register to avoid register overflow.
+* After a flushBits, a maximum of 7 bits might still be stored into local register.
+*
+* Avoid storing elements of more than 24 bits if you want compatibility with 32-bits bitstream readers.
+*
+* Last operation is to close the bitStream.
+* The function returns the final size of CStream in bytes.
+* If data couldn't fit into `dstBuffer`, it will return a 0 ( == not storable)
+*/
+
+/*-********************************************
+* bitStream decoding API (read backward)
+**********************************************/
+typedef struct {
+ size_t bitContainer;
+ unsigned bitsConsumed;
+ const char *ptr;
+ const char *start;
+} BIT_DStream_t;
+
+typedef enum {
+ BIT_DStream_unfinished = 0,
+ BIT_DStream_endOfBuffer = 1,
+ BIT_DStream_completed = 2,
+ BIT_DStream_overflow = 3
+} BIT_DStream_status; /* result of BIT_reloadDStream() */
+/* 1,2,4,8 would be better for bitmap combinations, but slows down performance a bit ... :( */
+
+ZSTD_STATIC size_t BIT_initDStream(BIT_DStream_t *bitD, const void *srcBuffer, size_t srcSize);
+ZSTD_STATIC size_t BIT_readBits(BIT_DStream_t *bitD, unsigned nbBits);
+ZSTD_STATIC BIT_DStream_status BIT_reloadDStream(BIT_DStream_t *bitD);
+ZSTD_STATIC unsigned BIT_endOfDStream(const BIT_DStream_t *bitD);
+
+/* Start by invoking BIT_initDStream().
+* A chunk of the bitStream is then stored into a local register.
+* Local register size is 64-bits on 64-bits systems, 32-bits on 32-bits systems (size_t).
+* You can then retrieve bitFields stored into the local register, **in reverse order**.
+* Local register is explicitly reloaded from memory by the BIT_reloadDStream() method.
+* A reload guarantee a minimum of ((8*sizeof(bitD->bitContainer))-7) bits when its result is BIT_DStream_unfinished.
+* Otherwise, it can be less than that, so proceed accordingly.
+* Checking if DStream has reached its end can be performed with BIT_endOfDStream().
+*/
+
+/*-****************************************
+* unsafe API
+******************************************/
+ZSTD_STATIC void BIT_addBitsFast(BIT_CStream_t *bitC, size_t value, unsigned nbBits);
+/* faster, but works only if value is "clean", meaning all high bits above nbBits are 0 */
+
+ZSTD_STATIC void BIT_flushBitsFast(BIT_CStream_t *bitC);
+/* unsafe version; does not check buffer overflow */
+
+ZSTD_STATIC size_t BIT_readBitsFast(BIT_DStream_t *bitD, unsigned nbBits);
+/* faster, but works only if nbBits >= 1 */
+
+/*-**************************************************************
+* Internal functions
+****************************************************************/
+ZSTD_STATIC unsigned BIT_highbit32(register U32 val) { return 31 - __builtin_clz(val); }
+
+/*===== Local Constants =====*/
+static const unsigned BIT_mask[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF,
+ 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0x1FFFF,
+ 0x3FFFF, 0x7FFFF, 0xFFFFF, 0x1FFFFF, 0x3FFFFF, 0x7FFFFF, 0xFFFFFF, 0x1FFFFFF, 0x3FFFFFF}; /* up to 26 bits */
+
+/*-**************************************************************
+* bitStream encoding
+****************************************************************/
+/*! BIT_initCStream() :
+ * `dstCapacity` must be > sizeof(void*)
+ * @return : 0 if success,
+ otherwise an error code (can be tested using ERR_isError() ) */
+ZSTD_STATIC size_t BIT_initCStream(BIT_CStream_t *bitC, void *startPtr, size_t dstCapacity)
+{
+ bitC->bitContainer = 0;
+ bitC->bitPos = 0;
+ bitC->startPtr = (char *)startPtr;
+ bitC->ptr = bitC->startPtr;
+ bitC->endPtr = bitC->startPtr + dstCapacity - sizeof(bitC->ptr);
+ if (dstCapacity <= sizeof(bitC->ptr))
+ return ERROR(dstSize_tooSmall);
+ return 0;
+}
+
+/*! BIT_addBits() :
+ can add up to 26 bits into `bitC`.
+ Does not check for register overflow ! */
+ZSTD_STATIC void BIT_addBits(BIT_CStream_t *bitC, size_t value, unsigned nbBits)
+{
+ bitC->bitContainer |= (value & BIT_mask[nbBits]) << bitC->bitPos;
+ bitC->bitPos += nbBits;
+}
+
+/*! BIT_addBitsFast() :
+ * works only if `value` is _clean_, meaning all high bits above nbBits are 0 */
+ZSTD_STATIC void BIT_addBitsFast(BIT_CStream_t *bitC, size_t value, unsigned nbBits)
+{
+ bitC->bitContainer |= value << bitC->bitPos;
+ bitC->bitPos += nbBits;
+}
+
+/*! BIT_flushBitsFast() :
+ * unsafe version; does not check buffer overflow */
+ZSTD_STATIC void BIT_flushBitsFast(BIT_CStream_t *bitC)
+{
+ size_t const nbBytes = bitC->bitPos >> 3;
+ ZSTD_writeLEST(bitC->ptr, bitC->bitContainer);
+ bitC->ptr += nbBytes;
+ bitC->bitPos &= 7;
+ bitC->bitContainer >>= nbBytes * 8; /* if bitPos >= sizeof(bitContainer)*8 --> undefined behavior */
+}
+
+/*! BIT_flushBits() :
+ * safe version; check for buffer overflow, and prevents it.
+ * note : does not signal buffer overflow. This will be revealed later on using BIT_closeCStream() */
+ZSTD_STATIC void BIT_flushBits(BIT_CStream_t *bitC)
+{
+ size_t const nbBytes = bitC->bitPos >> 3;
+ ZSTD_writeLEST(bitC->ptr, bitC->bitContainer);
+ bitC->ptr += nbBytes;
+ if (bitC->ptr > bitC->endPtr)
+ bitC->ptr = bitC->endPtr;
+ bitC->bitPos &= 7;
+ bitC->bitContainer >>= nbBytes * 8; /* if bitPos >= sizeof(bitContainer)*8 --> undefined behavior */
+}
+
+/*! BIT_closeCStream() :
+ * @return : size of CStream, in bytes,
+ or 0 if it could not fit into dstBuffer */
+ZSTD_STATIC size_t BIT_closeCStream(BIT_CStream_t *bitC)
+{
+ BIT_addBitsFast(bitC, 1, 1); /* endMark */
+ BIT_flushBits(bitC);
+
+ if (bitC->ptr >= bitC->endPtr)
+ return 0; /* doesn't fit within authorized budget : cancel */
+
+ return (bitC->ptr - bitC->startPtr) + (bitC->bitPos > 0);
+}
+
+/*-********************************************************
+* bitStream decoding
+**********************************************************/
+/*! BIT_initDStream() :
+* Initialize a BIT_DStream_t.
+* `bitD` : a pointer to an already allocated BIT_DStream_t structure.
+* `srcSize` must be the *exact* size of the bitStream, in bytes.
+* @return : size of stream (== srcSize) or an errorCode if a problem is detected
+*/
+ZSTD_STATIC size_t BIT_initDStream(BIT_DStream_t *bitD, const void *srcBuffer, size_t srcSize)
+{
+ if (srcSize < 1) {
+ memset(bitD, 0, sizeof(*bitD));
+ return ERROR(srcSize_wrong);
+ }
+
+ if (srcSize >= sizeof(bitD->bitContainer)) { /* normal case */
+ bitD->start = (const char *)srcBuffer;
+ bitD->ptr = (const char *)srcBuffer + srcSize - sizeof(bitD->bitContainer);
+ bitD->bitContainer = ZSTD_readLEST(bitD->ptr);
+ {
+ BYTE const lastByte = ((const BYTE *)srcBuffer)[srcSize - 1];
+ bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0; /* ensures bitsConsumed is always set */
+ if (lastByte == 0)
+ return ERROR(GENERIC); /* endMark not present */
+ }
+ } else {
+ bitD->start = (const char *)srcBuffer;
+ bitD->ptr = bitD->start;
+ bitD->bitContainer = *(const BYTE *)(bitD->start);
+ switch (srcSize) {
+ case 7: bitD->bitContainer += (size_t)(((const BYTE *)(srcBuffer))[6]) << (sizeof(bitD->bitContainer) * 8 - 16);
+ case 6: bitD->bitContainer += (size_t)(((const BYTE *)(srcBuffer))[5]) << (sizeof(bitD->bitContainer) * 8 - 24);
+ case 5: bitD->bitContainer += (size_t)(((const BYTE *)(srcBuffer))[4]) << (sizeof(bitD->bitContainer) * 8 - 32);
+ case 4: bitD->bitContainer += (size_t)(((const BYTE *)(srcBuffer))[3]) << 24;
+ case 3: bitD->bitContainer += (size_t)(((const BYTE *)(srcBuffer))[2]) << 16;
+ case 2: bitD->bitContainer += (size_t)(((const BYTE *)(srcBuffer))[1]) << 8;
+ default:;
+ }
+ {
+ BYTE const lastByte = ((const BYTE *)srcBuffer)[srcSize - 1];
+ bitD->bitsConsumed = lastByte ? 8 - BIT_highbit32(lastByte) : 0;
+ if (lastByte == 0)
+ return ERROR(GENERIC); /* endMark not present */
+ }
+ bitD->bitsConsumed += (U32)(sizeof(bitD->bitContainer) - srcSize) * 8;
+ }
+
+ return srcSize;
+}
+
+ZSTD_STATIC size_t BIT_getUpperBits(size_t bitContainer, U32 const start) { return bitContainer >> start; }
+
+ZSTD_STATIC size_t BIT_getMiddleBits(size_t bitContainer, U32 const start, U32 const nbBits) { return (bitContainer >> start) & BIT_mask[nbBits]; }
+
+ZSTD_STATIC size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits) { return bitContainer & BIT_mask[nbBits]; }
+
+/*! BIT_lookBits() :
+ * Provides next n bits from local register.
+ * local register is not modified.
+ * On 32-bits, maxNbBits==24.
+ * On 64-bits, maxNbBits==56.
+ * @return : value extracted
+ */
+ZSTD_STATIC size_t BIT_lookBits(const BIT_DStream_t *bitD, U32 nbBits)
+{
+ U32 const bitMask = sizeof(bitD->bitContainer) * 8 - 1;
+ return ((bitD->bitContainer << (bitD->bitsConsumed & bitMask)) >> 1) >> ((bitMask - nbBits) & bitMask);
+}
+
+/*! BIT_lookBitsFast() :
+* unsafe version; only works only if nbBits >= 1 */
+ZSTD_STATIC size_t BIT_lookBitsFast(const BIT_DStream_t *bitD, U32 nbBits)
+{
+ U32 const bitMask = sizeof(bitD->bitContainer) * 8 - 1;
+ return (bitD->bitContainer << (bitD->bitsConsumed & bitMask)) >> (((bitMask + 1) - nbBits) & bitMask);
+}
+
+ZSTD_STATIC void BIT_skipBits(BIT_DStream_t *bitD, U32 nbBits) { bitD->bitsConsumed += nbBits; }
+
+/*! BIT_readBits() :
+ * Read (consume) next n bits from local register and update.
+ * Pay attention to not read more than nbBits contained into local register.
+ * @return : extracted value.
+ */
+ZSTD_STATIC size_t BIT_readBits(BIT_DStream_t *bitD, U32 nbBits)
+{
+ size_t const value = BIT_lookBits(bitD, nbBits);
+ BIT_skipBits(bitD, nbBits);
+ return value;
+}
+
+/*! BIT_readBitsFast() :
+* unsafe version; only works only if nbBits >= 1 */
+ZSTD_STATIC size_t BIT_readBitsFast(BIT_DStream_t *bitD, U32 nbBits)
+{
+ size_t const value = BIT_lookBitsFast(bitD, nbBits);
+ BIT_skipBits(bitD, nbBits);
+ return value;
+}
+
+/*! BIT_reloadDStream() :
+* Refill `bitD` from buffer previously set in BIT_initDStream() .
+* This function is safe, it guarantees it will not read beyond src buffer.
+* @return : status of `BIT_DStream_t` internal register.
+ if status == BIT_DStream_unfinished, internal register is filled with >= (sizeof(bitD->bitContainer)*8 - 7) bits */
+ZSTD_STATIC BIT_DStream_status BIT_reloadDStream(BIT_DStream_t *bitD)
+{
+ if (bitD->bitsConsumed > (sizeof(bitD->bitContainer) * 8)) /* should not happen => corruption detected */
+ return BIT_DStream_overflow;
+
+ if (bitD->ptr >= bitD->start + sizeof(bitD->bitContainer)) {
+ bitD->ptr -= bitD->bitsConsumed >> 3;
+ bitD->bitsConsumed &= 7;
+ bitD->bitContainer = ZSTD_readLEST(bitD->ptr);
+ return BIT_DStream_unfinished;
+ }
+ if (bitD->ptr == bitD->start) {
+ if (bitD->bitsConsumed < sizeof(bitD->bitContainer) * 8)
+ return BIT_DStream_endOfBuffer;
+ return BIT_DStream_completed;
+ }
+ {
+ U32 nbBytes = bitD->bitsConsumed >> 3;
+ BIT_DStream_status result = BIT_DStream_unfinished;
+ if (bitD->ptr - nbBytes < bitD->start) {
+ nbBytes = (U32)(bitD->ptr - bitD->start); /* ptr > start */
+ result = BIT_DStream_endOfBuffer;
+ }
+ bitD->ptr -= nbBytes;
+ bitD->bitsConsumed -= nbBytes * 8;
+ bitD->bitContainer = ZSTD_readLEST(bitD->ptr); /* reminder : srcSize > sizeof(bitD) */
+ return result;
+ }
+}
+
+/*! BIT_endOfDStream() :
+* @return Tells if DStream has exactly reached its end (all bits consumed).
+*/
+ZSTD_STATIC unsigned BIT_endOfDStream(const BIT_DStream_t *DStream)
+{
+ return ((DStream->ptr == DStream->start) && (DStream->bitsConsumed == sizeof(DStream->bitContainer) * 8));
+}
+
+#endif /* BITSTREAM_H_MODULE */
diff --git a/lib/zstd/compress.c b/lib/zstd/compress.c
new file mode 100644
index 000000000000..f9166cf4f7a9
--- /dev/null
+++ b/lib/zstd/compress.c
@@ -0,0 +1,3484 @@
+/**
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of https://github.com/facebook/zstd.
+ * An additional grant of patent rights can be found in the PATENTS file in the
+ * same directory.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ */
+
+/*-*************************************
+* Dependencies
+***************************************/
+#include "fse.h"
+#include "huf.h"
+#include "mem.h"
+#include "zstd_internal.h" /* includes zstd.h */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/string.h> /* memset */
+
+/*-*************************************
+* Constants
+***************************************/
+static const U32 g_searchStrength = 8; /* control skip over incompressible data */
+#define HASH_READ_SIZE 8
+typedef enum { ZSTDcs_created = 0, ZSTDcs_init, ZSTDcs_ongoing, ZSTDcs_ending } ZSTD_compressionStage_e;
+
+/*-*************************************
+* Helper functions
+***************************************/
+size_t ZSTD_compressBound(size_t srcSize) { return FSE_compressBound(srcSize) + 12; }
+
+/*-*************************************
+* Sequence storage
+***************************************/
+static void ZSTD_resetSeqStore(seqStore_t *ssPtr)
+{
+ ssPtr->lit = ssPtr->litStart;
+ ssPtr->sequences = ssPtr->sequencesStart;
+ ssPtr->longLengthID = 0;
+}
+
+/*-*************************************
+* Context memory management
+***************************************/
+struct ZSTD_CCtx_s {
+ const BYTE *nextSrc; /* next block here to continue on curr prefix */
+ const BYTE *base; /* All regular indexes relative to this position */
+ const BYTE *dictBase; /* extDict indexes relative to this position */
+ U32 dictLimit; /* below that point, need extDict */
+ U32 lowLimit; /* below that point, no more data */
+ U32 nextToUpdate; /* index from which to continue dictionary update */
+ U32 nextToUpdate3; /* index from which to continue dictionary update */
+ U32 hashLog3; /* dispatch table : larger == faster, more memory */
+ U32 loadedDictEnd; /* index of end of dictionary */
+ U32 forceWindow; /* force back-references to respect limit of 1<<wLog, even for dictionary */
+ U32 forceRawDict; /* Force loading dictionary in "content-only" mode (no header analysis) */
+ ZSTD_compressionStage_e stage;
+ U32 rep[ZSTD_REP_NUM];
+ U32 repToConfirm[ZSTD_REP_NUM];
+ U32 dictID;
+ ZSTD_parameters params;
+ void *workSpace;
+ size_t workSpaceSize;
+ size_t blockSize;
+ U64 frameContentSize;
+ struct xxh64_state xxhState;
+ ZSTD_customMem customMem;
+
+ seqStore_t seqStore; /* sequences storage ptrs */
+ U32 *hashTable;
+ U32 *hashTable3;
+ U32 *chainTable;
+ HUF_CElt *hufTable;
+ U32 flagStaticTables;
+ HUF_repeat flagStaticHufTable;
+ FSE_CTable offcodeCTable[FSE_CTABLE_SIZE_U32(OffFSELog, MaxOff)];
+ FSE_CTable matchlengthCTable[FSE_CTABLE_SIZE_U32(MLFSELog, MaxML)];
+ FSE_CTable litlengthCTable[FSE_CTABLE_SIZE_U32(LLFSELog, MaxLL)];
+ unsigned tmpCounters[HUF_COMPRESS_WORKSPACE_SIZE_U32];
+};
+
+size_t ZSTD_CCtxWorkspaceBound(ZSTD_compressionParameters cParams)
+{
+ size_t const blockSize = MIN(ZSTD_BLOCKSIZE_ABSOLUTEMAX, (size_t)1 << cParams.windowLog);
+ U32 const divider = (cParams.searchLength == 3) ? 3 : 4;
+ size_t const maxNbSeq = blockSize / divider;
+ size_t const tokenSpace = blockSize + 11 * maxNbSeq;
+ size_t const chainSize = (cParams.strategy == ZSTD_fast) ? 0 : (1 << cParams.chainLog);
+ size_t const hSize = ((size_t)1) << cParams.hashLog;
+ U32 const hashLog3 = (cParams.searchLength > 3) ? 0 : MIN(ZSTD_HASHLOG3_MAX, cParams.windowLog);
+ size_t const h3Size = ((size_t)1) << hashLog3;
+ size_t const tableSpace = (chainSize + hSize + h3Size) * sizeof(U32);
+ size_t const optSpace =
+ ((MaxML + 1) + (MaxLL + 1) + (MaxOff + 1) + (1 << Litbits)) * sizeof(U32) + (ZSTD_OPT_NUM + 1) * (sizeof(ZSTD_match_t) + sizeof(ZSTD_optimal_t));
+ size_t const workspaceSize = tableSpace + (256 * sizeof(U32)) /* huffTable */ + tokenSpace +
+ (((cParams.strategy == ZSTD_btopt) || (cParams.strategy == ZSTD_btopt2)) ? optSpace : 0);
+
+ return ZSTD_ALIGN(sizeof(ZSTD_stack)) + ZSTD_ALIGN(sizeof(ZSTD_CCtx)) + ZSTD_ALIGN(workspaceSize);
+}
+
+static ZSTD_CCtx *ZSTD_createCCtx_advanced(ZSTD_customMem customMem)
+{
+ ZSTD_CCtx *cctx;
+ if (!customMem.customAlloc || !customMem.customFree)
+ return NULL;
+ cctx = (ZSTD_CCtx *)ZSTD_malloc(sizeof(ZSTD_CCtx), customMem);
+ if (!cctx)
+ return NULL;
+ memset(cctx, 0, sizeof(ZSTD_CCtx));
+ cctx->customMem = customMem;
+ return cctx;
+}
+
+ZSTD_CCtx *ZSTD_initCCtx(void *workspace, size_t workspaceSize)
+{
+ ZSTD_customMem const stackMem = ZSTD_initStack(workspace, workspaceSize);
+ ZSTD_CCtx *cctx = ZSTD_createCCtx_advanced(stackMem);
+ if (cctx) {
+ cctx->workSpace = ZSTD_stackAllocAll(cctx->customMem.opaque, &cctx->workSpaceSize);
+ }
+ return cctx;
+}
+
+size_t ZSTD_freeCCtx(ZSTD_CCtx *cctx)
+{
+ if (cctx == NULL)
+ return 0; /* support free on NULL */
+ ZSTD_free(cctx->workSpace, cctx->customMem);
+ ZSTD_free(cctx, cctx->customMem);
+ return 0; /* reserved as a potential error code in the future */
+}
+
+const seqStore_t *ZSTD_getSeqStore(const ZSTD_CCtx *ctx) /* hidden interface */ { return &(ctx->seqStore); }
+
+static ZSTD_parameters ZSTD_getParamsFromCCtx(const ZSTD_CCtx *cctx) { return cctx->params; }
+
+/** ZSTD_checkParams() :
+ ensure param values remain within authorized range.
+ @return : 0, or an error code if one value is beyond authorized range */
+size_t ZSTD_checkCParams(ZSTD_compressionParameters cParams)
+{
+#define CLAMPCHECK(val, min, max) \
+ { \
+ if ((val < min) | (val > max)) \
+ return ERROR(compressionParameter_unsupported); \
+ }
+ CLAMPCHECK(cParams.windowLog, ZSTD_WINDOWLOG_MIN, ZSTD_WINDOWLOG_MAX);
+ CLAMPCHECK(cParams.chainLog, ZSTD_CHAINLOG_MIN, ZSTD_CHAINLOG_MAX);
+ CLAMPCHECK(cParams.hashLog, ZSTD_HASHLOG_MIN, ZSTD_HASHLOG_MAX);
+ CLAMPCHECK(cParams.searchLog, ZSTD_SEARCHLOG_MIN, ZSTD_SEARCHLOG_MAX);
+ CLAMPCHECK(cParams.searchLength, ZSTD_SEARCHLENGTH_MIN, ZSTD_SEARCHLENGTH_MAX);
+ CLAMPCHECK(cParams.targetLength, ZSTD_TARGETLENGTH_MIN, ZSTD_TARGETLENGTH_MAX);
+ if ((U32)(cParams.strategy) > (U32)ZSTD_btopt2)
+ return ERROR(compressionParameter_unsupported);
+ return 0;
+}
+
+/** ZSTD_cycleLog() :
+ * condition for correct operation : hashLog > 1 */
+static U32 ZSTD_cycleLog(U32 hashLog, ZSTD_strategy strat)
+{
+ U32 const btScale = ((U32)strat >= (U32)ZSTD_btlazy2);
+ return hashLog - btScale;
+}
+
+/** ZSTD_adjustCParams() :
+ optimize `cPar` for a given input (`srcSize` and `dictSize`).
+ mostly downsizing to reduce memory consumption and initialization.
+ Both `srcSize` and `dictSize` are optional (use 0 if unknown),
+ but if both are 0, no optimization can be done.
+ Note : cPar is considered validated at this stage. Use ZSTD_checkParams() to ensure that. */
+ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParameters cPar, unsigned long long srcSize, size_t dictSize)
+{
+ if (srcSize + dictSize == 0)
+ return cPar; /* no size information available : no adjustment */
+
+ /* resize params, to use less memory when necessary */
+ {
+ U32 const minSrcSize = (srcSize == 0) ? 500 : 0;
+ U64 const rSize = srcSize + dictSize + minSrcSize;
+ if (rSize < ((U64)1 << ZSTD_WINDOWLOG_MAX)) {
+ U32 const srcLog = MAX(ZSTD_HASHLOG_MIN, ZSTD_highbit32((U32)(rSize)-1) + 1);
+ if (cPar.windowLog > srcLog)
+ cPar.windowLog = srcLog;
+ }
+ }
+ if (cPar.hashLog > cPar.windowLog)
+ cPar.hashLog = cPar.windowLog;
+ {
+ U32 const cycleLog = ZSTD_cycleLog(cPar.chainLog, cPar.strategy);
+ if (cycleLog > cPar.windowLog)
+ cPar.chainLog -= (cycleLog - cPar.windowLog);
+ }
+
+ if (cPar.windowLog < ZSTD_WINDOWLOG_ABSOLUTEMIN)
+ cPar.windowLog = ZSTD_WINDOWLOG_ABSOLUTEMIN; /* required for frame header */
+
+ return cPar;
+}
+
+static U32 ZSTD_equivalentParams(ZSTD_parameters param1, ZSTD_parameters param2)
+{
+ return (param1.cParams.hashLog == param2.cParams.hashLog) & (param1.cParams.chainLog == param2.cParams.chainLog) &
+ (param1.cParams.strategy == param2.cParams.strategy) & ((param1.cParams.searchLength == 3) == (param2.cParams.searchLength == 3));
+}
+
+/*! ZSTD_continueCCtx() :
+ reuse CCtx without reset (note : requires no dictionary) */
+static size_t ZSTD_continueCCtx(ZSTD_CCtx *cctx, ZSTD_parameters params, U64 frameContentSize)
+{
+ U32 const end = (U32)(cctx->nextSrc - cctx->base);
+ cctx->params = params;
+ cctx->frameContentSize = frameContentSize;
+ cctx->lowLimit = end;
+ cctx->dictLimit = end;
+ cctx->nextToUpdate = end + 1;
+ cctx->stage = ZSTDcs_init;
+ cctx->dictID = 0;
+ cctx->loadedDictEnd = 0;
+ {
+ int i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ cctx->rep[i] = repStartValue[i];
+ }
+ cctx->seqStore.litLengthSum = 0; /* force reset of btopt stats */
+ xxh64_reset(&cctx->xxhState, 0);
+ return 0;
+}
+
+typedef enum { ZSTDcrp_continue, ZSTDcrp_noMemset, ZSTDcrp_fullReset } ZSTD_compResetPolicy_e;
+
+/*! ZSTD_resetCCtx_advanced() :
+ note : `params` must be validated */
+static size_t ZSTD_resetCCtx_advanced(ZSTD_CCtx *zc, ZSTD_parameters params, U64 frameContentSize, ZSTD_compResetPolicy_e const crp)
+{
+ if (crp == ZSTDcrp_continue)
+ if (ZSTD_equivalentParams(params, zc->params)) {
+ zc->flagStaticTables = 0;
+ zc->flagStaticHufTable = HUF_repeat_none;
+ return ZSTD_continueCCtx(zc, params, frameContentSize);
+ }
+
+ {
+ size_t const blockSize = MIN(ZSTD_BLOCKSIZE_ABSOLUTEMAX, (size_t)1 << params.cParams.windowLog);
+ U32 const divider = (params.cParams.searchLength == 3) ? 3 : 4;
+ size_t const maxNbSeq = blockSize / divider;
+ size_t const tokenSpace = blockSize + 11 * maxNbSeq;
+ size_t const chainSize = (params.cParams.strategy == ZSTD_fast) ? 0 : (1 << params.cParams.chainLog);
+ size_t const hSize = ((size_t)1) << params.cParams.hashLog;
+ U32 const hashLog3 = (params.cParams.searchLength > 3) ? 0 : MIN(ZSTD_HASHLOG3_MAX, params.cParams.windowLog);
+ size_t const h3Size = ((size_t)1) << hashLog3;
+ size_t const tableSpace = (chainSize + hSize + h3Size) * sizeof(U32);
+ void *ptr;
+
+ /* Check if workSpace is large enough, alloc a new one if needed */
+ {
+ size_t const optSpace = ((MaxML + 1) + (MaxLL + 1) + (MaxOff + 1) + (1 << Litbits)) * sizeof(U32) +
+ (ZSTD_OPT_NUM + 1) * (sizeof(ZSTD_match_t) + sizeof(ZSTD_optimal_t));
+ size_t const neededSpace = tableSpace + (256 * sizeof(U32)) /* huffTable */ + tokenSpace +
+ (((params.cParams.strategy == ZSTD_btopt) || (params.cParams.strategy == ZSTD_btopt2)) ? optSpace : 0);
+ if (zc->workSpaceSize < neededSpace) {
+ ZSTD_free(zc->workSpace, zc->customMem);
+ zc->workSpace = ZSTD_malloc(neededSpace, zc->customMem);
+ if (zc->workSpace == NULL)
+ return ERROR(memory_allocation);
+ zc->workSpaceSize = neededSpace;
+ }
+ }
+
+ if (crp != ZSTDcrp_noMemset)
+ memset(zc->workSpace, 0, tableSpace); /* reset tables only */
+ xxh64_reset(&zc->xxhState, 0);
+ zc->hashLog3 = hashLog3;
+ zc->hashTable = (U32 *)(zc->workSpace);
+ zc->chainTable = zc->hashTable + hSize;
+ zc->hashTable3 = zc->chainTable + chainSize;
+ ptr = zc->hashTable3 + h3Size;
+ zc->hufTable = (HUF_CElt *)ptr;
+ zc->flagStaticTables = 0;
+ zc->flagStaticHufTable = HUF_repeat_none;
+ ptr = ((U32 *)ptr) + 256; /* note : HUF_CElt* is incomplete type, size is simulated using U32 */
+
+ zc->nextToUpdate = 1;
+ zc->nextSrc = NULL;
+ zc->base = NULL;
+ zc->dictBase = NULL;
+ zc->dictLimit = 0;
+ zc->lowLimit = 0;
+ zc->params = params;
+ zc->blockSize = blockSize;
+ zc->frameContentSize = frameContentSize;
+ {
+ int i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ zc->rep[i] = repStartValue[i];
+ }
+
+ if ((params.cParams.strategy == ZSTD_btopt) || (params.cParams.strategy == ZSTD_btopt2)) {
+ zc->seqStore.litFreq = (U32 *)ptr;
+ zc->seqStore.litLengthFreq = zc->seqStore.litFreq + (1 << Litbits);
+ zc->seqStore.matchLengthFreq = zc->seqStore.litLengthFreq + (MaxLL + 1);
+ zc->seqStore.offCodeFreq = zc->seqStore.matchLengthFreq + (MaxML + 1);
+ ptr = zc->seqStore.offCodeFreq + (MaxOff + 1);
+ zc->seqStore.matchTable = (ZSTD_match_t *)ptr;
+ ptr = zc->seqStore.matchTable + ZSTD_OPT_NUM + 1;
+ zc->seqStore.priceTable = (ZSTD_optimal_t *)ptr;
+ ptr = zc->seqStore.priceTable + ZSTD_OPT_NUM + 1;
+ zc->seqStore.litLengthSum = 0;
+ }
+ zc->seqStore.sequencesStart = (seqDef *)ptr;
+ ptr = zc->seqStore.sequencesStart + maxNbSeq;
+ zc->seqStore.llCode = (BYTE *)ptr;
+ zc->seqStore.mlCode = zc->seqStore.llCode + maxNbSeq;
+ zc->seqStore.ofCode = zc->seqStore.mlCode + maxNbSeq;
+ zc->seqStore.litStart = zc->seqStore.ofCode + maxNbSeq;
+
+ zc->stage = ZSTDcs_init;
+ zc->dictID = 0;
+ zc->loadedDictEnd = 0;
+
+ return 0;
+ }
+}
+
+/* ZSTD_invalidateRepCodes() :
+ * ensures next compression will not use repcodes from previous block.
+ * Note : only works with regular variant;
+ * do not use with extDict variant ! */
+void ZSTD_invalidateRepCodes(ZSTD_CCtx *cctx)
+{
+ int i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ cctx->rep[i] = 0;
+}
+
+/*! ZSTD_copyCCtx() :
+* Duplicate an existing context `srcCCtx` into another one `dstCCtx`.
+* Only works during stage ZSTDcs_init (i.e. after creation, but before first call to ZSTD_compressContinue()).
+* @return : 0, or an error code */
+size_t ZSTD_copyCCtx(ZSTD_CCtx *dstCCtx, const ZSTD_CCtx *srcCCtx, unsigned long long pledgedSrcSize)
+{
+ if (srcCCtx->stage != ZSTDcs_init)
+ return ERROR(stage_wrong);
+
+ memcpy(&dstCCtx->customMem, &srcCCtx->customMem, sizeof(ZSTD_customMem));
+ {
+ ZSTD_parameters params = srcCCtx->params;
+ params.fParams.contentSizeFlag = (pledgedSrcSize > 0);
+ ZSTD_resetCCtx_advanced(dstCCtx, params, pledgedSrcSize, ZSTDcrp_noMemset);
+ }
+
+ /* copy tables */
+ {
+ size_t const chainSize = (srcCCtx->params.cParams.strategy == ZSTD_fast) ? 0 : (1 << srcCCtx->params.cParams.chainLog);
+ size_t const hSize = ((size_t)1) << srcCCtx->params.cParams.hashLog;
+ size_t const h3Size = (size_t)1 << srcCCtx->hashLog3;
+ size_t const tableSpace = (chainSize + hSize + h3Size) * sizeof(U32);
+ memcpy(dstCCtx->workSpace, srcCCtx->workSpace, tableSpace);
+ }
+
+ /* copy dictionary offsets */
+ dstCCtx->nextToUpdate = srcCCtx->nextToUpdate;
+ dstCCtx->nextToUpdate3 = srcCCtx->nextToUpdate3;
+ dstCCtx->nextSrc = srcCCtx->nextSrc;
+ dstCCtx->base = srcCCtx->base;
+ dstCCtx->dictBase = srcCCtx->dictBase;
+ dstCCtx->dictLimit = srcCCtx->dictLimit;
+ dstCCtx->lowLimit = srcCCtx->lowLimit;
+ dstCCtx->loadedDictEnd = srcCCtx->loadedDictEnd;
+ dstCCtx->dictID = srcCCtx->dictID;
+
+ /* copy entropy tables */
+ dstCCtx->flagStaticTables = srcCCtx->flagStaticTables;
+ dstCCtx->flagStaticHufTable = srcCCtx->flagStaticHufTable;
+ if (srcCCtx->flagStaticTables) {
+ memcpy(dstCCtx->litlengthCTable, srcCCtx->litlengthCTable, sizeof(dstCCtx->litlengthCTable));
+ memcpy(dstCCtx->matchlengthCTable, srcCCtx->matchlengthCTable, sizeof(dstCCtx->matchlengthCTable));
+ memcpy(dstCCtx->offcodeCTable, srcCCtx->offcodeCTable, sizeof(dstCCtx->offcodeCTable));
+ }
+ if (srcCCtx->flagStaticHufTable) {
+ memcpy(dstCCtx->hufTable, srcCCtx->hufTable, 256 * 4);
+ }
+
+ return 0;
+}
+
+/*! ZSTD_reduceTable() :
+* reduce table indexes by `reducerValue` */
+static void ZSTD_reduceTable(U32 *const table, U32 const size, U32 const reducerValue)
+{
+ U32 u;
+ for (u = 0; u < size; u++) {
+ if (table[u] < reducerValue)
+ table[u] = 0;
+ else
+ table[u] -= reducerValue;
+ }
+}
+
+/*! ZSTD_reduceIndex() :
+* rescale all indexes to avoid future overflow (indexes are U32) */
+static void ZSTD_reduceIndex(ZSTD_CCtx *zc, const U32 reducerValue)
+{
+ {
+ U32 const hSize = 1 << zc->params.cParams.hashLog;
+ ZSTD_reduceTable(zc->hashTable, hSize, reducerValue);
+ }
+
+ {
+ U32 const chainSize = (zc->params.cParams.strategy == ZSTD_fast) ? 0 : (1 << zc->params.cParams.chainLog);
+ ZSTD_reduceTable(zc->chainTable, chainSize, reducerValue);
+ }
+
+ {
+ U32 const h3Size = (zc->hashLog3) ? 1 << zc->hashLog3 : 0;
+ ZSTD_reduceTable(zc->hashTable3, h3Size, reducerValue);
+ }
+}
+
+/*-*******************************************************
+* Block entropic compression
+*********************************************************/
+
+/* See doc/zstd_compression_format.md for detailed format description */
+
+size_t ZSTD_noCompressBlock(void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ if (srcSize + ZSTD_blockHeaderSize > dstCapacity)
+ return ERROR(dstSize_tooSmall);
+ memcpy((BYTE *)dst + ZSTD_blockHeaderSize, src, srcSize);
+ ZSTD_writeLE24(dst, (U32)(srcSize << 2) + (U32)bt_raw);
+ return ZSTD_blockHeaderSize + srcSize;
+}
+
+static size_t ZSTD_noCompressLiterals(void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ BYTE *const ostart = (BYTE * const)dst;
+ U32 const flSize = 1 + (srcSize > 31) + (srcSize > 4095);
+
+ if (srcSize + flSize > dstCapacity)
+ return ERROR(dstSize_tooSmall);
+
+ switch (flSize) {
+ case 1: /* 2 - 1 - 5 */ ostart[0] = (BYTE)((U32)set_basic + (srcSize << 3)); break;
+ case 2: /* 2 - 2 - 12 */ ZSTD_writeLE16(ostart, (U16)((U32)set_basic + (1 << 2) + (srcSize << 4))); break;
+ default: /*note : should not be necessary : flSize is within {1,2,3} */
+ case 3: /* 2 - 2 - 20 */ ZSTD_writeLE32(ostart, (U32)((U32)set_basic + (3 << 2) + (srcSize << 4))); break;
+ }
+
+ memcpy(ostart + flSize, src, srcSize);
+ return srcSize + flSize;
+}
+
+static size_t ZSTD_compressRleLiteralsBlock(void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ BYTE *const ostart = (BYTE * const)dst;
+ U32 const flSize = 1 + (srcSize > 31) + (srcSize > 4095);
+
+ (void)dstCapacity; /* dstCapacity already guaranteed to be >=4, hence large enough */
+
+ switch (flSize) {
+ case 1: /* 2 - 1 - 5 */ ostart[0] = (BYTE)((U32)set_rle + (srcSize << 3)); break;
+ case 2: /* 2 - 2 - 12 */ ZSTD_writeLE16(ostart, (U16)((U32)set_rle + (1 << 2) + (srcSize << 4))); break;
+ default: /*note : should not be necessary : flSize is necessarily within {1,2,3} */
+ case 3: /* 2 - 2 - 20 */ ZSTD_writeLE32(ostart, (U32)((U32)set_rle + (3 << 2) + (srcSize << 4))); break;
+ }
+
+ ostart[flSize] = *(const BYTE *)src;
+ return flSize + 1;
+}
+
+static size_t ZSTD_minGain(size_t srcSize) { return (srcSize >> 6) + 2; }
+
+static size_t ZSTD_compressLiterals(ZSTD_CCtx *zc, void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ size_t const minGain = ZSTD_minGain(srcSize);
+ size_t const lhSize = 3 + (srcSize >= 1 KB) + (srcSize >= 16 KB);
+ BYTE *const ostart = (BYTE *)dst;
+ U32 singleStream = srcSize < 256;
+ symbolEncodingType_e hType = set_compressed;
+ size_t cLitSize;
+
+/* small ? don't even attempt compression (speed opt) */
+#define LITERAL_NOENTROPY 63
+ {
+ size_t const minLitSize = zc->flagStaticHufTable == HUF_repeat_valid ? 6 : LITERAL_NOENTROPY;
+ if (srcSize <= minLitSize)
+ return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize);
+ }
+
+ if (dstCapacity < lhSize + 1)
+ return ERROR(dstSize_tooSmall); /* not enough space for compression */
+ {
+ HUF_repeat repeat = zc->flagStaticHufTable;
+ int const preferRepeat = zc->params.cParams.strategy < ZSTD_lazy ? srcSize <= 1024 : 0;
+ if (repeat == HUF_repeat_valid && lhSize == 3)
+ singleStream = 1;
+ cLitSize = singleStream ? HUF_compress1X_repeat(ostart + lhSize, dstCapacity - lhSize, src, srcSize, 255, 11, zc->tmpCounters,
+ sizeof(zc->tmpCounters), zc->hufTable, &repeat, preferRepeat)
+ : HUF_compress4X_repeat(ostart + lhSize, dstCapacity - lhSize, src, srcSize, 255, 11, zc->tmpCounters,
+ sizeof(zc->tmpCounters), zc->hufTable, &repeat, preferRepeat);
+ if (repeat != HUF_repeat_none) {
+ hType = set_repeat;
+ } /* reused the existing table */
+ else {
+ zc->flagStaticHufTable = HUF_repeat_check;
+ } /* now have a table to reuse */
+ }
+
+ if ((cLitSize == 0) | (cLitSize >= srcSize - minGain)) {
+ zc->flagStaticHufTable = HUF_repeat_none;
+ return ZSTD_noCompressLiterals(dst, dstCapacity, src, srcSize);
+ }
+ if (cLitSize == 1) {
+ zc->flagStaticHufTable = HUF_repeat_none;
+ return ZSTD_compressRleLiteralsBlock(dst, dstCapacity, src, srcSize);
+ }
+
+ /* Build header */
+ switch (lhSize) {
+ case 3: /* 2 - 2 - 10 - 10 */
+ {
+ U32 const lhc = hType + ((!singleStream) << 2) + ((U32)srcSize << 4) + ((U32)cLitSize << 14);
+ ZSTD_writeLE24(ostart, lhc);
+ break;
+ }
+ case 4: /* 2 - 2 - 14 - 14 */
+ {
+ U32 const lhc = hType + (2 << 2) + ((U32)srcSize << 4) + ((U32)cLitSize << 18);
+ ZSTD_writeLE32(ostart, lhc);
+ break;
+ }
+ default: /* should not be necessary, lhSize is only {3,4,5} */
+ case 5: /* 2 - 2 - 18 - 18 */
+ {
+ U32 const lhc = hType + (3 << 2) + ((U32)srcSize << 4) + ((U32)cLitSize << 22);
+ ZSTD_writeLE32(ostart, lhc);
+ ostart[4] = (BYTE)(cLitSize >> 10);
+ break;
+ }
+ }
+ return lhSize + cLitSize;
+}
+
+static const BYTE LL_Code[64] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 17, 17, 18, 18,
+ 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23,
+ 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24};
+
+static const BYTE ML_Code[128] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 32, 33, 33, 34, 34, 35, 35, 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38,
+ 38, 38, 38, 38, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
+ 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42,
+ 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42};
+
+void ZSTD_seqToCodes(const seqStore_t *seqStorePtr)
+{
+ BYTE const LL_deltaCode = 19;
+ BYTE const ML_deltaCode = 36;
+ const seqDef *const sequences = seqStorePtr->sequencesStart;
+ BYTE *const llCodeTable = seqStorePtr->llCode;
+ BYTE *const ofCodeTable = seqStorePtr->ofCode;
+ BYTE *const mlCodeTable = seqStorePtr->mlCode;
+ U32 const nbSeq = (U32)(seqStorePtr->sequences - seqStorePtr->sequencesStart);
+ U32 u;
+ for (u = 0; u < nbSeq; u++) {
+ U32 const llv = sequences[u].litLength;
+ U32 const mlv = sequences[u].matchLength;
+ llCodeTable[u] = (llv > 63) ? (BYTE)ZSTD_highbit32(llv) + LL_deltaCode : LL_Code[llv];
+ ofCodeTable[u] = (BYTE)ZSTD_highbit32(sequences[u].offset);
+ mlCodeTable[u] = (mlv > 127) ? (BYTE)ZSTD_highbit32(mlv) + ML_deltaCode : ML_Code[mlv];
+ }
+ if (seqStorePtr->longLengthID == 1)
+ llCodeTable[seqStorePtr->longLengthPos] = MaxLL;
+ if (seqStorePtr->longLengthID == 2)
+ mlCodeTable[seqStorePtr->longLengthPos] = MaxML;
+}
+
+ZSTD_STATIC size_t ZSTD_compressSequences_internal(ZSTD_CCtx *zc, void *dst, size_t dstCapacity)
+{
+ const int longOffsets = zc->params.cParams.windowLog > STREAM_ACCUMULATOR_MIN;
+ const seqStore_t *seqStorePtr = &(zc->seqStore);
+ FSE_CTable *CTable_LitLength = zc->litlengthCTable;
+ FSE_CTable *CTable_OffsetBits = zc->offcodeCTable;
+ FSE_CTable *CTable_MatchLength = zc->matchlengthCTable;
+ U32 LLtype, Offtype, MLtype; /* compressed, raw or rle */
+ const seqDef *const sequences = seqStorePtr->sequencesStart;
+ const BYTE *const ofCodeTable = seqStorePtr->ofCode;
+ const BYTE *const llCodeTable = seqStorePtr->llCode;
+ const BYTE *const mlCodeTable = seqStorePtr->mlCode;
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *const oend = ostart + dstCapacity;
+ BYTE *op = ostart;
+ size_t const nbSeq = seqStorePtr->sequences - seqStorePtr->sequencesStart;
+ BYTE *seqHead;
+
+ U32 *count;
+ S16 *norm;
+ U32 *workspace;
+ size_t workspaceSize = sizeof(zc->tmpCounters);
+ {
+ size_t spaceUsed32 = 0;
+ count = (U32 *)zc->tmpCounters + spaceUsed32;
+ spaceUsed32 += MaxSeq + 1;
+ norm = (S16 *)((U32 *)zc->tmpCounters + spaceUsed32);
+ spaceUsed32 += ALIGN(sizeof(S16) * (MaxSeq + 1), sizeof(U32)) >> 2;
+
+ workspace = (U32 *)zc->tmpCounters + spaceUsed32;
+ workspaceSize -= (spaceUsed32 << 2);
+ }
+
+ /* Compress literals */
+ {
+ const BYTE *const literals = seqStorePtr->litStart;
+ size_t const litSize = seqStorePtr->lit - literals;
+ size_t const cSize = ZSTD_compressLiterals(zc, op, dstCapacity, literals, litSize);
+ if (ZSTD_isError(cSize))
+ return cSize;
+ op += cSize;
+ }
+
+ /* Sequences Header */
+ if ((oend - op) < 3 /*max nbSeq Size*/ + 1 /*seqHead */)
+ return ERROR(dstSize_tooSmall);
+ if (nbSeq < 0x7F)
+ *op++ = (BYTE)nbSeq;
+ else if (nbSeq < LONGNBSEQ)
+ op[0] = (BYTE)((nbSeq >> 8) + 0x80), op[1] = (BYTE)nbSeq, op += 2;
+ else
+ op[0] = 0xFF, ZSTD_writeLE16(op + 1, (U16)(nbSeq - LONGNBSEQ)), op += 3;
+ if (nbSeq == 0)
+ return op - ostart;
+
+ /* seqHead : flags for FSE encoding type */
+ seqHead = op++;
+
+#define MIN_SEQ_FOR_DYNAMIC_FSE 64
+#define MAX_SEQ_FOR_STATIC_FSE 1000
+
+ /* convert length/distances into codes */
+ ZSTD_seqToCodes(seqStorePtr);
+
+ /* CTable for Literal Lengths */
+ {
+ U32 max = MaxLL;
+ size_t const mostFrequent = FSE_countFast_wksp(count, &max, llCodeTable, nbSeq, workspace);
+ if ((mostFrequent == nbSeq) && (nbSeq > 2)) {
+ *op++ = llCodeTable[0];
+ FSE_buildCTable_rle(CTable_LitLength, (BYTE)max);
+ LLtype = set_rle;
+ } else if ((zc->flagStaticTables) && (nbSeq < MAX_SEQ_FOR_STATIC_FSE)) {
+ LLtype = set_repeat;
+ } else if ((nbSeq < MIN_SEQ_FOR_DYNAMIC_FSE) || (mostFrequent < (nbSeq >> (LL_defaultNormLog - 1)))) {
+ FSE_buildCTable_wksp(CTable_LitLength, LL_defaultNorm, MaxLL, LL_defaultNormLog, workspace, workspaceSize);
+ LLtype = set_basic;
+ } else {
+ size_t nbSeq_1 = nbSeq;
+ const U32 tableLog = FSE_optimalTableLog(LLFSELog, nbSeq, max);
+ if (count[llCodeTable[nbSeq - 1]] > 1) {
+ count[llCodeTable[nbSeq - 1]]--;
+ nbSeq_1--;
+ }
+ FSE_normalizeCount(norm, tableLog, count, nbSeq_1, max);
+ {
+ size_t const NCountSize = FSE_writeNCount(op, oend - op, norm, max, tableLog); /* overflow protected */
+ if (FSE_isError(NCountSize))
+ return NCountSize;
+ op += NCountSize;
+ }
+ FSE_buildCTable_wksp(CTable_LitLength, norm, max, tableLog, workspace, workspaceSize);
+ LLtype = set_compressed;
+ }
+ }
+
+ /* CTable for Offsets */
+ {
+ U32 max = MaxOff;
+ size_t const mostFrequent = FSE_countFast_wksp(count, &max, ofCodeTable, nbSeq, workspace);
+ if ((mostFrequent == nbSeq) && (nbSeq > 2)) {
+ *op++ = ofCodeTable[0];
+ FSE_buildCTable_rle(CTable_OffsetBits, (BYTE)max);
+ Offtype = set_rle;
+ } else if ((zc->flagStaticTables) && (nbSeq < MAX_SEQ_FOR_STATIC_FSE)) {
+ Offtype = set_repeat;
+ } else if ((nbSeq < MIN_SEQ_FOR_DYNAMIC_FSE) || (mostFrequent < (nbSeq >> (OF_defaultNormLog - 1)))) {
+ FSE_buildCTable_wksp(CTable_OffsetBits, OF_defaultNorm, MaxOff, OF_defaultNormLog, workspace, workspaceSize);
+ Offtype = set_basic;
+ } else {
+ size_t nbSeq_1 = nbSeq;
+ const U32 tableLog = FSE_optimalTableLog(OffFSELog, nbSeq, max);
+ if (count[ofCodeTable[nbSeq - 1]] > 1) {
+ count[ofCodeTable[nbSeq - 1]]--;
+ nbSeq_1--;
+ }
+ FSE_normalizeCount(norm, tableLog, count, nbSeq_1, max);
+ {
+ size_t const NCountSize = FSE_writeNCount(op, oend - op, norm, max, tableLog); /* overflow protected */
+ if (FSE_isError(NCountSize))
+ return NCountSize;
+ op += NCountSize;
+ }
+ FSE_buildCTable_wksp(CTable_OffsetBits, norm, max, tableLog, workspace, workspaceSize);
+ Offtype = set_compressed;
+ }
+ }
+
+ /* CTable for MatchLengths */
+ {
+ U32 max = MaxML;
+ size_t const mostFrequent = FSE_countFast_wksp(count, &max, mlCodeTable, nbSeq, workspace);
+ if ((mostFrequent == nbSeq) && (nbSeq > 2)) {
+ *op++ = *mlCodeTable;
+ FSE_buildCTable_rle(CTable_MatchLength, (BYTE)max);
+ MLtype = set_rle;
+ } else if ((zc->flagStaticTables) && (nbSeq < MAX_SEQ_FOR_STATIC_FSE)) {
+ MLtype = set_repeat;
+ } else if ((nbSeq < MIN_SEQ_FOR_DYNAMIC_FSE) || (mostFrequent < (nbSeq >> (ML_defaultNormLog - 1)))) {
+ FSE_buildCTable_wksp(CTable_MatchLength, ML_defaultNorm, MaxML, ML_defaultNormLog, workspace, workspaceSize);
+ MLtype = set_basic;
+ } else {
+ size_t nbSeq_1 = nbSeq;
+ const U32 tableLog = FSE_optimalTableLog(MLFSELog, nbSeq, max);
+ if (count[mlCodeTable[nbSeq - 1]] > 1) {
+ count[mlCodeTable[nbSeq - 1]]--;
+ nbSeq_1--;
+ }
+ FSE_normalizeCount(norm, tableLog, count, nbSeq_1, max);
+ {
+ size_t const NCountSize = FSE_writeNCount(op, oend - op, norm, max, tableLog); /* overflow protected */
+ if (FSE_isError(NCountSize))
+ return NCountSize;
+ op += NCountSize;
+ }
+ FSE_buildCTable_wksp(CTable_MatchLength, norm, max, tableLog, workspace, workspaceSize);
+ MLtype = set_compressed;
+ }
+ }
+
+ *seqHead = (BYTE)((LLtype << 6) + (Offtype << 4) + (MLtype << 2));
+ zc->flagStaticTables = 0;
+
+ /* Encoding Sequences */
+ {
+ BIT_CStream_t blockStream;
+ FSE_CState_t stateMatchLength;
+ FSE_CState_t stateOffsetBits;
+ FSE_CState_t stateLitLength;
+
+ CHECK_E(BIT_initCStream(&blockStream, op, oend - op), dstSize_tooSmall); /* not enough space remaining */
+
+ /* first symbols */
+ FSE_initCState2(&stateMatchLength, CTable_MatchLength, mlCodeTable[nbSeq - 1]);
+ FSE_initCState2(&stateOffsetBits, CTable_OffsetBits, ofCodeTable[nbSeq - 1]);
+ FSE_initCState2(&stateLitLength, CTable_LitLength, llCodeTable[nbSeq - 1]);
+ BIT_addBits(&blockStream, sequences[nbSeq - 1].litLength, LL_bits[llCodeTable[nbSeq - 1]]);
+ if (ZSTD_32bits())
+ BIT_flushBits(&blockStream);
+ BIT_addBits(&blockStream, sequences[nbSeq - 1].matchLength, ML_bits[mlCodeTable[nbSeq - 1]]);
+ if (ZSTD_32bits())
+ BIT_flushBits(&blockStream);
+ if (longOffsets) {
+ U32 const ofBits = ofCodeTable[nbSeq - 1];
+ int const extraBits = ofBits - MIN(ofBits, STREAM_ACCUMULATOR_MIN - 1);
+ if (extraBits) {
+ BIT_addBits(&blockStream, sequences[nbSeq - 1].offset, extraBits);
+ BIT_flushBits(&blockStream);
+ }
+ BIT_addBits(&blockStream, sequences[nbSeq - 1].offset >> extraBits, ofBits - extraBits);
+ } else {
+ BIT_addBits(&blockStream, sequences[nbSeq - 1].offset, ofCodeTable[nbSeq - 1]);
+ }
+ BIT_flushBits(&blockStream);
+
+ {
+ size_t n;
+ for (n = nbSeq - 2; n < nbSeq; n--) { /* intentional underflow */
+ BYTE const llCode = llCodeTable[n];
+ BYTE const ofCode = ofCodeTable[n];
+ BYTE const mlCode = mlCodeTable[n];
+ U32 const llBits = LL_bits[llCode];
+ U32 const ofBits = ofCode; /* 32b*/ /* 64b*/
+ U32 const mlBits = ML_bits[mlCode];
+ /* (7)*/ /* (7)*/
+ FSE_encodeSymbol(&blockStream, &stateOffsetBits, ofCode); /* 15 */ /* 15 */
+ FSE_encodeSymbol(&blockStream, &stateMatchLength, mlCode); /* 24 */ /* 24 */
+ if (ZSTD_32bits())
+ BIT_flushBits(&blockStream); /* (7)*/
+ FSE_encodeSymbol(&blockStream, &stateLitLength, llCode); /* 16 */ /* 33 */
+ if (ZSTD_32bits() || (ofBits + mlBits + llBits >= 64 - 7 - (LLFSELog + MLFSELog + OffFSELog)))
+ BIT_flushBits(&blockStream); /* (7)*/
+ BIT_addBits(&blockStream, sequences[n].litLength, llBits);
+ if (ZSTD_32bits() && ((llBits + mlBits) > 24))
+ BIT_flushBits(&blockStream);
+ BIT_addBits(&blockStream, sequences[n].matchLength, mlBits);
+ if (ZSTD_32bits())
+ BIT_flushBits(&blockStream); /* (7)*/
+ if (longOffsets) {
+ int const extraBits = ofBits - MIN(ofBits, STREAM_ACCUMULATOR_MIN - 1);
+ if (extraBits) {
+ BIT_addBits(&blockStream, sequences[n].offset, extraBits);
+ BIT_flushBits(&blockStream); /* (7)*/
+ }
+ BIT_addBits(&blockStream, sequences[n].offset >> extraBits, ofBits - extraBits); /* 31 */
+ } else {
+ BIT_addBits(&blockStream, sequences[n].offset, ofBits); /* 31 */
+ }
+ BIT_flushBits(&blockStream); /* (7)*/
+ }
+ }
+
+ FSE_flushCState(&blockStream, &stateMatchLength);
+ FSE_flushCState(&blockStream, &stateOffsetBits);
+ FSE_flushCState(&blockStream, &stateLitLength);
+
+ {
+ size_t const streamSize = BIT_closeCStream(&blockStream);
+ if (streamSize == 0)
+ return ERROR(dstSize_tooSmall); /* not enough space */
+ op += streamSize;
+ }
+ }
+ return op - ostart;
+}
+
+ZSTD_STATIC size_t ZSTD_compressSequences(ZSTD_CCtx *zc, void *dst, size_t dstCapacity, size_t srcSize)
+{
+ size_t const cSize = ZSTD_compressSequences_internal(zc, dst, dstCapacity);
+ size_t const minGain = ZSTD_minGain(srcSize);
+ size_t const maxCSize = srcSize - minGain;
+ /* If the srcSize <= dstCapacity, then there is enough space to write a
+ * raw uncompressed block. Since we ran out of space, the block must not
+ * be compressible, so fall back to a raw uncompressed block.
+ */
+ int const uncompressibleError = cSize == ERROR(dstSize_tooSmall) && srcSize <= dstCapacity;
+ int i;
+
+ if (ZSTD_isError(cSize) && !uncompressibleError)
+ return cSize;
+ if (cSize >= maxCSize || uncompressibleError) {
+ zc->flagStaticHufTable = HUF_repeat_none;
+ return 0;
+ }
+ /* confirm repcodes */
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ zc->rep[i] = zc->repToConfirm[i];
+ return cSize;
+}
+
+/*! ZSTD_storeSeq() :
+ Store a sequence (literal length, literals, offset code and match length code) into seqStore_t.
+ `offsetCode` : distance to match, or 0 == repCode.
+ `matchCode` : matchLength - MINMATCH
+*/
+ZSTD_STATIC void ZSTD_storeSeq(seqStore_t *seqStorePtr, size_t litLength, const void *literals, U32 offsetCode, size_t matchCode)
+{
+ /* copy Literals */
+ ZSTD_wildcopy(seqStorePtr->lit, literals, litLength);
+ seqStorePtr->lit += litLength;
+
+ /* literal Length */
+ if (litLength > 0xFFFF) {
+ seqStorePtr->longLengthID = 1;
+ seqStorePtr->longLengthPos = (U32)(seqStorePtr->sequences - seqStorePtr->sequencesStart);
+ }
+ seqStorePtr->sequences[0].litLength = (U16)litLength;
+
+ /* match offset */
+ seqStorePtr->sequences[0].offset = offsetCode + 1;
+
+ /* match Length */
+ if (matchCode > 0xFFFF) {
+ seqStorePtr->longLengthID = 2;
+ seqStorePtr->longLengthPos = (U32)(seqStorePtr->sequences - seqStorePtr->sequencesStart);
+ }
+ seqStorePtr->sequences[0].matchLength = (U16)matchCode;
+
+ seqStorePtr->sequences++;
+}
+
+/*-*************************************
+* Match length counter
+***************************************/
+static unsigned ZSTD_NbCommonBytes(register size_t val)
+{
+ if (ZSTD_isLittleEndian()) {
+ if (ZSTD_64bits()) {
+ return (__builtin_ctzll((U64)val) >> 3);
+ } else { /* 32 bits */
+ return (__builtin_ctz((U32)val) >> 3);
+ }
+ } else { /* Big Endian CPU */
+ if (ZSTD_64bits()) {
+ return (__builtin_clzll(val) >> 3);
+ } else { /* 32 bits */
+ return (__builtin_clz((U32)val) >> 3);
+ }
+ }
+}
+
+static size_t ZSTD_count(const BYTE *pIn, const BYTE *pMatch, const BYTE *const pInLimit)
+{
+ const BYTE *const pStart = pIn;
+ const BYTE *const pInLoopLimit = pInLimit - (sizeof(size_t) - 1);
+
+ while (pIn < pInLoopLimit) {
+ size_t const diff = ZSTD_readST(pMatch) ^ ZSTD_readST(pIn);
+ if (!diff) {
+ pIn += sizeof(size_t);
+ pMatch += sizeof(size_t);
+ continue;
+ }
+ pIn += ZSTD_NbCommonBytes(diff);
+ return (size_t)(pIn - pStart);
+ }
+ if (ZSTD_64bits())
+ if ((pIn < (pInLimit - 3)) && (ZSTD_read32(pMatch) == ZSTD_read32(pIn))) {
+ pIn += 4;
+ pMatch += 4;
+ }
+ if ((pIn < (pInLimit - 1)) && (ZSTD_read16(pMatch) == ZSTD_read16(pIn))) {
+ pIn += 2;
+ pMatch += 2;
+ }
+ if ((pIn < pInLimit) && (*pMatch == *pIn))
+ pIn++;
+ return (size_t)(pIn - pStart);
+}
+
+/** ZSTD_count_2segments() :
+* can count match length with `ip` & `match` in 2 different segments.
+* convention : on reaching mEnd, match count continue starting from iStart
+*/
+static size_t ZSTD_count_2segments(const BYTE *ip, const BYTE *match, const BYTE *iEnd, const BYTE *mEnd, const BYTE *iStart)
+{
+ const BYTE *const vEnd = MIN(ip + (mEnd - match), iEnd);
+ size_t const matchLength = ZSTD_count(ip, match, vEnd);
+ if (match + matchLength != mEnd)
+ return matchLength;
+ return matchLength + ZSTD_count(ip + matchLength, iStart, iEnd);
+}
+
+/*-*************************************
+* Hashes
+***************************************/
+static const U32 prime3bytes = 506832829U;
+static U32 ZSTD_hash3(U32 u, U32 h) { return ((u << (32 - 24)) * prime3bytes) >> (32 - h); }
+ZSTD_STATIC size_t ZSTD_hash3Ptr(const void *ptr, U32 h) { return ZSTD_hash3(ZSTD_readLE32(ptr), h); } /* only in zstd_opt.h */
+
+static const U32 prime4bytes = 2654435761U;
+static U32 ZSTD_hash4(U32 u, U32 h) { return (u * prime4bytes) >> (32 - h); }
+static size_t ZSTD_hash4Ptr(const void *ptr, U32 h) { return ZSTD_hash4(ZSTD_read32(ptr), h); }
+
+static const U64 prime5bytes = 889523592379ULL;
+static size_t ZSTD_hash5(U64 u, U32 h) { return (size_t)(((u << (64 - 40)) * prime5bytes) >> (64 - h)); }
+static size_t ZSTD_hash5Ptr(const void *p, U32 h) { return ZSTD_hash5(ZSTD_readLE64(p), h); }
+
+static const U64 prime6bytes = 227718039650203ULL;
+static size_t ZSTD_hash6(U64 u, U32 h) { return (size_t)(((u << (64 - 48)) * prime6bytes) >> (64 - h)); }
+static size_t ZSTD_hash6Ptr(const void *p, U32 h) { return ZSTD_hash6(ZSTD_readLE64(p), h); }
+
+static const U64 prime7bytes = 58295818150454627ULL;
+static size_t ZSTD_hash7(U64 u, U32 h) { return (size_t)(((u << (64 - 56)) * prime7bytes) >> (64 - h)); }
+static size_t ZSTD_hash7Ptr(const void *p, U32 h) { return ZSTD_hash7(ZSTD_readLE64(p), h); }
+
+static const U64 prime8bytes = 0xCF1BBCDCB7A56463ULL;
+static size_t ZSTD_hash8(U64 u, U32 h) { return (size_t)(((u)*prime8bytes) >> (64 - h)); }
+static size_t ZSTD_hash8Ptr(const void *p, U32 h) { return ZSTD_hash8(ZSTD_readLE64(p), h); }
+
+static size_t ZSTD_hashPtr(const void *p, U32 hBits, U32 mls)
+{
+ switch (mls) {
+ // case 3: return ZSTD_hash3Ptr(p, hBits);
+ default:
+ case 4: return ZSTD_hash4Ptr(p, hBits);
+ case 5: return ZSTD_hash5Ptr(p, hBits);
+ case 6: return ZSTD_hash6Ptr(p, hBits);
+ case 7: return ZSTD_hash7Ptr(p, hBits);
+ case 8: return ZSTD_hash8Ptr(p, hBits);
+ }
+}
+
+/*-*************************************
+* Fast Scan
+***************************************/
+static void ZSTD_fillHashTable(ZSTD_CCtx *zc, const void *end, const U32 mls)
+{
+ U32 *const hashTable = zc->hashTable;
+ U32 const hBits = zc->params.cParams.hashLog;
+ const BYTE *const base = zc->base;
+ const BYTE *ip = base + zc->nextToUpdate;
+ const BYTE *const iend = ((const BYTE *)end) - HASH_READ_SIZE;
+ const size_t fastHashFillStep = 3;
+
+ while (ip <= iend) {
+ hashTable[ZSTD_hashPtr(ip, hBits, mls)] = (U32)(ip - base);
+ ip += fastHashFillStep;
+ }
+}
+
+FORCE_INLINE
+void ZSTD_compressBlock_fast_generic(ZSTD_CCtx *cctx, const void *src, size_t srcSize, const U32 mls)
+{
+ U32 *const hashTable = cctx->hashTable;
+ U32 const hBits = cctx->params.cParams.hashLog;
+ seqStore_t *seqStorePtr = &(cctx->seqStore);
+ const BYTE *const base = cctx->base;
+ const BYTE *const istart = (const BYTE *)src;
+ const BYTE *ip = istart;
+ const BYTE *anchor = istart;
+ const U32 lowestIndex = cctx->dictLimit;
+ const BYTE *const lowest = base + lowestIndex;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *const ilimit = iend - HASH_READ_SIZE;
+ U32 offset_1 = cctx->rep[0], offset_2 = cctx->rep[1];
+ U32 offsetSaved = 0;
+
+ /* init */
+ ip += (ip == lowest);
+ {
+ U32 const maxRep = (U32)(ip - lowest);
+ if (offset_2 > maxRep)
+ offsetSaved = offset_2, offset_2 = 0;
+ if (offset_1 > maxRep)
+ offsetSaved = offset_1, offset_1 = 0;
+ }
+
+ /* Main Search Loop */
+ while (ip < ilimit) { /* < instead of <=, because repcode check at (ip+1) */
+ size_t mLength;
+ size_t const h = ZSTD_hashPtr(ip, hBits, mls);
+ U32 const curr = (U32)(ip - base);
+ U32 const matchIndex = hashTable[h];
+ const BYTE *match = base + matchIndex;
+ hashTable[h] = curr; /* update hash table */
+
+ if ((offset_1 > 0) & (ZSTD_read32(ip + 1 - offset_1) == ZSTD_read32(ip + 1))) {
+ mLength = ZSTD_count(ip + 1 + 4, ip + 1 + 4 - offset_1, iend) + 4;
+ ip++;
+ ZSTD_storeSeq(seqStorePtr, ip - anchor, anchor, 0, mLength - MINMATCH);
+ } else {
+ U32 offset;
+ if ((matchIndex <= lowestIndex) || (ZSTD_read32(match) != ZSTD_read32(ip))) {
+ ip += ((ip - anchor) >> g_searchStrength) + 1;
+ continue;
+ }
+ mLength = ZSTD_count(ip + 4, match + 4, iend) + 4;
+ offset = (U32)(ip - match);
+ while (((ip > anchor) & (match > lowest)) && (ip[-1] == match[-1])) {
+ ip--;
+ match--;
+ mLength++;
+ } /* catch up */
+ offset_2 = offset_1;
+ offset_1 = offset;
+
+ ZSTD_storeSeq(seqStorePtr, ip - anchor, anchor, offset + ZSTD_REP_MOVE, mLength - MINMATCH);
+ }
+
+ /* match found */
+ ip += mLength;
+ anchor = ip;
+
+ if (ip <= ilimit) {
+ /* Fill Table */
+ hashTable[ZSTD_hashPtr(base + curr + 2, hBits, mls)] = curr + 2; /* here because curr+2 could be > iend-8 */
+ hashTable[ZSTD_hashPtr(ip - 2, hBits, mls)] = (U32)(ip - 2 - base);
+ /* check immediate repcode */
+ while ((ip <= ilimit) && ((offset_2 > 0) & (ZSTD_read32(ip) == ZSTD_read32(ip - offset_2)))) {
+ /* store sequence */
+ size_t const rLength = ZSTD_count(ip + 4, ip + 4 - offset_2, iend) + 4;
+ {
+ U32 const tmpOff = offset_2;
+ offset_2 = offset_1;
+ offset_1 = tmpOff;
+ } /* swap offset_2 <=> offset_1 */
+ hashTable[ZSTD_hashPtr(ip, hBits, mls)] = (U32)(ip - base);
+ ZSTD_storeSeq(seqStorePtr, 0, anchor, 0, rLength - MINMATCH);
+ ip += rLength;
+ anchor = ip;
+ continue; /* faster when present ... (?) */
+ }
+ }
+ }
+
+ /* save reps for next block */
+ cctx->repToConfirm[0] = offset_1 ? offset_1 : offsetSaved;
+ cctx->repToConfirm[1] = offset_2 ? offset_2 : offsetSaved;
+
+ /* Last Literals */
+ {
+ size_t const lastLLSize = iend - anchor;
+ memcpy(seqStorePtr->lit, anchor, lastLLSize);
+ seqStorePtr->lit += lastLLSize;
+ }
+}
+
+static void ZSTD_compressBlock_fast(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+ const U32 mls = ctx->params.cParams.searchLength;
+ switch (mls) {
+ default: /* includes case 3 */
+ case 4: ZSTD_compressBlock_fast_generic(ctx, src, srcSize, 4); return;
+ case 5: ZSTD_compressBlock_fast_generic(ctx, src, srcSize, 5); return;
+ case 6: ZSTD_compressBlock_fast_generic(ctx, src, srcSize, 6); return;
+ case 7: ZSTD_compressBlock_fast_generic(ctx, src, srcSize, 7); return;
+ }
+}
+
+static void ZSTD_compressBlock_fast_extDict_generic(ZSTD_CCtx *ctx, const void *src, size_t srcSize, const U32 mls)
+{
+ U32 *hashTable = ctx->hashTable;
+ const U32 hBits = ctx->params.cParams.hashLog;
+ seqStore_t *seqStorePtr = &(ctx->seqStore);
+ const BYTE *const base = ctx->base;
+ const BYTE *const dictBase = ctx->dictBase;
+ const BYTE *const istart = (const BYTE *)src;
+ const BYTE *ip = istart;
+ const BYTE *anchor = istart;
+ const U32 lowestIndex = ctx->lowLimit;
+ const BYTE *const dictStart = dictBase + lowestIndex;
+ const U32 dictLimit = ctx->dictLimit;
+ const BYTE *const lowPrefixPtr = base + dictLimit;
+ const BYTE *const dictEnd = dictBase + dictLimit;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *const ilimit = iend - 8;
+ U32 offset_1 = ctx->rep[0], offset_2 = ctx->rep[1];
+
+ /* Search Loop */
+ while (ip < ilimit) { /* < instead of <=, because (ip+1) */
+ const size_t h = ZSTD_hashPtr(ip, hBits, mls);
+ const U32 matchIndex = hashTable[h];
+ const BYTE *matchBase = matchIndex < dictLimit ? dictBase : base;
+ const BYTE *match = matchBase + matchIndex;
+ const U32 curr = (U32)(ip - base);
+ const U32 repIndex = curr + 1 - offset_1; /* offset_1 expected <= curr +1 */
+ const BYTE *repBase = repIndex < dictLimit ? dictBase : base;
+ const BYTE *repMatch = repBase + repIndex;
+ size_t mLength;
+ hashTable[h] = curr; /* update hash table */
+
+ if ((((U32)((dictLimit - 1) - repIndex) >= 3) /* intentional underflow */ & (repIndex > lowestIndex)) &&
+ (ZSTD_read32(repMatch) == ZSTD_read32(ip + 1))) {
+ const BYTE *repMatchEnd = repIndex < dictLimit ? dictEnd : iend;
+ mLength = ZSTD_count_2segments(ip + 1 + EQUAL_READ32, repMatch + EQUAL_READ32, iend, repMatchEnd, lowPrefixPtr) + EQUAL_READ32;
+ ip++;
+ ZSTD_storeSeq(seqStorePtr, ip - anchor, anchor, 0, mLength - MINMATCH);
+ } else {
+ if ((matchIndex < lowestIndex) || (ZSTD_read32(match) != ZSTD_read32(ip))) {
+ ip += ((ip - anchor) >> g_searchStrength) + 1;
+ continue;
+ }
+ {
+ const BYTE *matchEnd = matchIndex < dictLimit ? dictEnd : iend;
+ const BYTE *lowMatchPtr = matchIndex < dictLimit ? dictStart : lowPrefixPtr;
+ U32 offset;
+ mLength = ZSTD_count_2segments(ip + EQUAL_READ32, match + EQUAL_READ32, iend, matchEnd, lowPrefixPtr) + EQUAL_READ32;
+ while (((ip > anchor) & (match > lowMatchPtr)) && (ip[-1] == match[-1])) {
+ ip--;
+ match--;
+ mLength++;
+ } /* catch up */
+ offset = curr - matchIndex;
+ offset_2 = offset_1;
+ offset_1 = offset;
+ ZSTD_storeSeq(seqStorePtr, ip - anchor, anchor, offset + ZSTD_REP_MOVE, mLength - MINMATCH);
+ }
+ }
+
+ /* found a match : store it */
+ ip += mLength;
+ anchor = ip;
+
+ if (ip <= ilimit) {
+ /* Fill Table */
+ hashTable[ZSTD_hashPtr(base + curr + 2, hBits, mls)] = curr + 2;
+ hashTable[ZSTD_hashPtr(ip - 2, hBits, mls)] = (U32)(ip - 2 - base);
+ /* check immediate repcode */
+ while (ip <= ilimit) {
+ U32 const curr2 = (U32)(ip - base);
+ U32 const repIndex2 = curr2 - offset_2;
+ const BYTE *repMatch2 = repIndex2 < dictLimit ? dictBase + repIndex2 : base + repIndex2;
+ if ((((U32)((dictLimit - 1) - repIndex2) >= 3) & (repIndex2 > lowestIndex)) /* intentional overflow */
+ && (ZSTD_read32(repMatch2) == ZSTD_read32(ip))) {
+ const BYTE *const repEnd2 = repIndex2 < dictLimit ? dictEnd : iend;
+ size_t repLength2 =
+ ZSTD_count_2segments(ip + EQUAL_READ32, repMatch2 + EQUAL_READ32, iend, repEnd2, lowPrefixPtr) + EQUAL_READ32;
+ U32 tmpOffset = offset_2;
+ offset_2 = offset_1;
+ offset_1 = tmpOffset; /* swap offset_2 <=> offset_1 */
+ ZSTD_storeSeq(seqStorePtr, 0, anchor, 0, repLength2 - MINMATCH);
+ hashTable[ZSTD_hashPtr(ip, hBits, mls)] = curr2;
+ ip += repLength2;
+ anchor = ip;
+ continue;
+ }
+ break;
+ }
+ }
+ }
+
+ /* save reps for next block */
+ ctx->repToConfirm[0] = offset_1;
+ ctx->repToConfirm[1] = offset_2;
+
+ /* Last Literals */
+ {
+ size_t const lastLLSize = iend - anchor;
+ memcpy(seqStorePtr->lit, anchor, lastLLSize);
+ seqStorePtr->lit += lastLLSize;
+ }
+}
+
+static void ZSTD_compressBlock_fast_extDict(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+ U32 const mls = ctx->params.cParams.searchLength;
+ switch (mls) {
+ default: /* includes case 3 */
+ case 4: ZSTD_compressBlock_fast_extDict_generic(ctx, src, srcSize, 4); return;
+ case 5: ZSTD_compressBlock_fast_extDict_generic(ctx, src, srcSize, 5); return;
+ case 6: ZSTD_compressBlock_fast_extDict_generic(ctx, src, srcSize, 6); return;
+ case 7: ZSTD_compressBlock_fast_extDict_generic(ctx, src, srcSize, 7); return;
+ }
+}
+
+/*-*************************************
+* Double Fast
+***************************************/
+static void ZSTD_fillDoubleHashTable(ZSTD_CCtx *cctx, const void *end, const U32 mls)
+{
+ U32 *const hashLarge = cctx->hashTable;
+ U32 const hBitsL = cctx->params.cParams.hashLog;
+ U32 *const hashSmall = cctx->chainTable;
+ U32 const hBitsS = cctx->params.cParams.chainLog;
+ const BYTE *const base = cctx->base;
+ const BYTE *ip = base + cctx->nextToUpdate;
+ const BYTE *const iend = ((const BYTE *)end) - HASH_READ_SIZE;
+ const size_t fastHashFillStep = 3;
+
+ while (ip <= iend) {
+ hashSmall[ZSTD_hashPtr(ip, hBitsS, mls)] = (U32)(ip - base);
+ hashLarge[ZSTD_hashPtr(ip, hBitsL, 8)] = (U32)(ip - base);
+ ip += fastHashFillStep;
+ }
+}
+
+FORCE_INLINE
+void ZSTD_compressBlock_doubleFast_generic(ZSTD_CCtx *cctx, const void *src, size_t srcSize, const U32 mls)
+{
+ U32 *const hashLong = cctx->hashTable;
+ const U32 hBitsL = cctx->params.cParams.hashLog;
+ U32 *const hashSmall = cctx->chainTable;
+ const U32 hBitsS = cctx->params.cParams.chainLog;
+ seqStore_t *seqStorePtr = &(cctx->seqStore);
+ const BYTE *const base = cctx->base;
+ const BYTE *const istart = (const BYTE *)src;
+ const BYTE *ip = istart;
+ const BYTE *anchor = istart;
+ const U32 lowestIndex = cctx->dictLimit;
+ const BYTE *const lowest = base + lowestIndex;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *const ilimit = iend - HASH_READ_SIZE;
+ U32 offset_1 = cctx->rep[0], offset_2 = cctx->rep[1];
+ U32 offsetSaved = 0;
+
+ /* init */
+ ip += (ip == lowest);
+ {
+ U32 const maxRep = (U32)(ip - lowest);
+ if (offset_2 > maxRep)
+ offsetSaved = offset_2, offset_2 = 0;
+ if (offset_1 > maxRep)
+ offsetSaved = offset_1, offset_1 = 0;
+ }
+
+ /* Main Search Loop */
+ while (ip < ilimit) { /* < instead of <=, because repcode check at (ip+1) */
+ size_t mLength;
+ size_t const h2 = ZSTD_hashPtr(ip, hBitsL, 8);
+ size_t const h = ZSTD_hashPtr(ip, hBitsS, mls);
+ U32 const curr = (U32)(ip - base);
+ U32 const matchIndexL = hashLong[h2];
+ U32 const matchIndexS = hashSmall[h];
+ const BYTE *matchLong = base + matchIndexL;
+ const BYTE *match = base + matchIndexS;
+ hashLong[h2] = hashSmall[h] = curr; /* update hash tables */
+
+ if ((offset_1 > 0) & (ZSTD_read32(ip + 1 - offset_1) == ZSTD_read32(ip + 1))) { /* note : by construction, offset_1 <= curr */
+ mLength = ZSTD_count(ip + 1 + 4, ip + 1 + 4 - offset_1, iend) + 4;
+ ip++;
+ ZSTD_storeSeq(seqStorePtr, ip - anchor, anchor, 0, mLength - MINMATCH);
+ } else {
+ U32 offset;
+ if ((matchIndexL > lowestIndex) && (ZSTD_read64(matchLong) == ZSTD_read64(ip))) {
+ mLength = ZSTD_count(ip + 8, matchLong + 8, iend) + 8;
+ offset = (U32)(ip - matchLong);
+ while (((ip > anchor) & (matchLong > lowest)) && (ip[-1] == matchLong[-1])) {
+ ip--;
+ matchLong--;
+ mLength++;
+ } /* catch up */
+ } else if ((matchIndexS > lowestIndex) && (ZSTD_read32(match) == ZSTD_read32(ip))) {
+ size_t const h3 = ZSTD_hashPtr(ip + 1, hBitsL, 8);
+ U32 const matchIndex3 = hashLong[h3];
+ const BYTE *match3 = base + matchIndex3;
+ hashLong[h3] = curr + 1;
+ if ((matchIndex3 > lowestIndex) && (ZSTD_read64(match3) == ZSTD_read64(ip + 1))) {
+ mLength = ZSTD_count(ip + 9, match3 + 8, iend) + 8;
+ ip++;
+ offset = (U32)(ip - match3);
+ while (((ip > anchor) & (match3 > lowest)) && (ip[-1] == match3[-1])) {
+ ip--;
+ match3--;
+ mLength++;
+ } /* catch up */
+ } else {
+ mLength = ZSTD_count(ip + 4, match + 4, iend) + 4;
+ offset = (U32)(ip - match);
+ while (((ip > anchor) & (match > lowest)) && (ip[-1] == match[-1])) {
+ ip--;
+ match--;
+ mLength++;
+ } /* catch up */
+ }
+ } else {
+ ip += ((ip - anchor) >> g_searchStrength) + 1;
+ continue;
+ }
+
+ offset_2 = offset_1;
+ offset_1 = offset;
+
+ ZSTD_storeSeq(seqStorePtr, ip - anchor, anchor, offset + ZSTD_REP_MOVE, mLength - MINMATCH);
+ }
+
+ /* match found */
+ ip += mLength;
+ anchor = ip;
+
+ if (ip <= ilimit) {
+ /* Fill Table */
+ hashLong[ZSTD_hashPtr(base + curr + 2, hBitsL, 8)] = hashSmall[ZSTD_hashPtr(base + curr + 2, hBitsS, mls)] =
+ curr + 2; /* here because curr+2 could be > iend-8 */
+ hashLong[ZSTD_hashPtr(ip - 2, hBitsL, 8)] = hashSmall[ZSTD_hashPtr(ip - 2, hBitsS, mls)] = (U32)(ip - 2 - base);
+
+ /* check immediate repcode */
+ while ((ip <= ilimit) && ((offset_2 > 0) & (ZSTD_read32(ip) == ZSTD_read32(ip - offset_2)))) {
+ /* store sequence */
+ size_t const rLength = ZSTD_count(ip + 4, ip + 4 - offset_2, iend) + 4;
+ {
+ U32 const tmpOff = offset_2;
+ offset_2 = offset_1;
+ offset_1 = tmpOff;
+ } /* swap offset_2 <=> offset_1 */
+ hashSmall[ZSTD_hashPtr(ip, hBitsS, mls)] = (U32)(ip - base);
+ hashLong[ZSTD_hashPtr(ip, hBitsL, 8)] = (U32)(ip - base);
+ ZSTD_storeSeq(seqStorePtr, 0, anchor, 0, rLength - MINMATCH);
+ ip += rLength;
+ anchor = ip;
+ continue; /* faster when present ... (?) */
+ }
+ }
+ }
+
+ /* save reps for next block */
+ cctx->repToConfirm[0] = offset_1 ? offset_1 : offsetSaved;
+ cctx->repToConfirm[1] = offset_2 ? offset_2 : offsetSaved;
+
+ /* Last Literals */
+ {
+ size_t const lastLLSize = iend - anchor;
+ memcpy(seqStorePtr->lit, anchor, lastLLSize);
+ seqStorePtr->lit += lastLLSize;
+ }
+}
+
+static void ZSTD_compressBlock_doubleFast(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+ const U32 mls = ctx->params.cParams.searchLength;
+ switch (mls) {
+ default: /* includes case 3 */
+ case 4: ZSTD_compressBlock_doubleFast_generic(ctx, src, srcSize, 4); return;
+ case 5: ZSTD_compressBlock_doubleFast_generic(ctx, src, srcSize, 5); return;
+ case 6: ZSTD_compressBlock_doubleFast_generic(ctx, src, srcSize, 6); return;
+ case 7: ZSTD_compressBlock_doubleFast_generic(ctx, src, srcSize, 7); return;
+ }
+}
+
+static void ZSTD_compressBlock_doubleFast_extDict_generic(ZSTD_CCtx *ctx, const void *src, size_t srcSize, const U32 mls)
+{
+ U32 *const hashLong = ctx->hashTable;
+ U32 const hBitsL = ctx->params.cParams.hashLog;
+ U32 *const hashSmall = ctx->chainTable;
+ U32 const hBitsS = ctx->params.cParams.chainLog;
+ seqStore_t *seqStorePtr = &(ctx->seqStore);
+ const BYTE *const base = ctx->base;
+ const BYTE *const dictBase = ctx->dictBase;
+ const BYTE *const istart = (const BYTE *)src;
+ const BYTE *ip = istart;
+ const BYTE *anchor = istart;
+ const U32 lowestIndex = ctx->lowLimit;
+ const BYTE *const dictStart = dictBase + lowestIndex;
+ const U32 dictLimit = ctx->dictLimit;
+ const BYTE *const lowPrefixPtr = base + dictLimit;
+ const BYTE *const dictEnd = dictBase + dictLimit;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *const ilimit = iend - 8;
+ U32 offset_1 = ctx->rep[0], offset_2 = ctx->rep[1];
+
+ /* Search Loop */
+ while (ip < ilimit) { /* < instead of <=, because (ip+1) */
+ const size_t hSmall = ZSTD_hashPtr(ip, hBitsS, mls);
+ const U32 matchIndex = hashSmall[hSmall];
+ const BYTE *matchBase = matchIndex < dictLimit ? dictBase : base;
+ const BYTE *match = matchBase + matchIndex;
+
+ const size_t hLong = ZSTD_hashPtr(ip, hBitsL, 8);
+ const U32 matchLongIndex = hashLong[hLong];
+ const BYTE *matchLongBase = matchLongIndex < dictLimit ? dictBase : base;
+ const BYTE *matchLong = matchLongBase + matchLongIndex;
+
+ const U32 curr = (U32)(ip - base);
+ const U32 repIndex = curr + 1 - offset_1; /* offset_1 expected <= curr +1 */
+ const BYTE *repBase = repIndex < dictLimit ? dictBase : base;
+ const BYTE *repMatch = repBase + repIndex;
+ size_t mLength;
+ hashSmall[hSmall] = hashLong[hLong] = curr; /* update hash table */
+
+ if ((((U32)((dictLimit - 1) - repIndex) >= 3) /* intentional underflow */ & (repIndex > lowestIndex)) &&
+ (ZSTD_read32(repMatch) == ZSTD_read32(ip + 1))) {
+ const BYTE *repMatchEnd = repIndex < dictLimit ? dictEnd : iend;
+ mLength = ZSTD_count_2segments(ip + 1 + 4, repMatch + 4, iend, repMatchEnd, lowPrefixPtr) + 4;
+ ip++;
+ ZSTD_storeSeq(seqStorePtr, ip - anchor, anchor, 0, mLength - MINMATCH);
+ } else {
+ if ((matchLongIndex > lowestIndex) && (ZSTD_read64(matchLong) == ZSTD_read64(ip))) {
+ const BYTE *matchEnd = matchLongIndex < dictLimit ? dictEnd : iend;
+ const BYTE *lowMatchPtr = matchLongIndex < dictLimit ? dictStart : lowPrefixPtr;
+ U32 offset;
+ mLength = ZSTD_count_2segments(ip + 8, matchLong + 8, iend, matchEnd, lowPrefixPtr) + 8;
+ offset = curr - matchLongIndex;
+ while (((ip > anchor) & (matchLong > lowMatchPtr)) && (ip[-1] == matchLong[-1])) {
+ ip--;
+ matchLong--;
+ mLength++;
+ } /* catch up */
+ offset_2 = offset_1;
+ offset_1 = offset;
+ ZSTD_storeSeq(seqStorePtr, ip - anchor, anchor, offset + ZSTD_REP_MOVE, mLength - MINMATCH);
+
+ } else if ((matchIndex > lowestIndex) && (ZSTD_read32(match) == ZSTD_read32(ip))) {
+ size_t const h3 = ZSTD_hashPtr(ip + 1, hBitsL, 8);
+ U32 const matchIndex3 = hashLong[h3];
+ const BYTE *const match3Base = matchIndex3 < dictLimit ? dictBase : base;
+ const BYTE *match3 = match3Base + matchIndex3;
+ U32 offset;
+ hashLong[h3] = curr + 1;
+ if ((matchIndex3 > lowestIndex) && (ZSTD_read64(match3) == ZSTD_read64(ip + 1))) {
+ const BYTE *matchEnd = matchIndex3 < dictLimit ? dictEnd : iend;
+ const BYTE *lowMatchPtr = matchIndex3 < dictLimit ? dictStart : lowPrefixPtr;
+ mLength = ZSTD_count_2segments(ip + 9, match3 + 8, iend, matchEnd, lowPrefixPtr) + 8;
+ ip++;
+ offset = curr + 1 - matchIndex3;
+ while (((ip > anchor) & (match3 > lowMatchPtr)) && (ip[-1] == match3[-1])) {
+ ip--;
+ match3--;
+ mLength++;
+ } /* catch up */
+ } else {
+ const BYTE *matchEnd = matchIndex < dictLimit ? dictEnd : iend;
+ const BYTE *lowMatchPtr = matchIndex < dictLimit ? dictStart : lowPrefixPtr;
+ mLength = ZSTD_count_2segments(ip + 4, match + 4, iend, matchEnd, lowPrefixPtr) + 4;
+ offset = curr - matchIndex;
+ while (((ip > anchor) & (match > lowMatchPtr)) && (ip[-1] == match[-1])) {
+ ip--;
+ match--;
+ mLength++;
+ } /* catch up */
+ }
+ offset_2 = offset_1;
+ offset_1 = offset;
+ ZSTD_storeSeq(seqStorePtr, ip - anchor, anchor, offset + ZSTD_REP_MOVE, mLength - MINMATCH);
+
+ } else {
+ ip += ((ip - anchor) >> g_searchStrength) + 1;
+ continue;
+ }
+ }
+
+ /* found a match : store it */
+ ip += mLength;
+ anchor = ip;
+
+ if (ip <= ilimit) {
+ /* Fill Table */
+ hashSmall[ZSTD_hashPtr(base + curr + 2, hBitsS, mls)] = curr + 2;
+ hashLong[ZSTD_hashPtr(base + curr + 2, hBitsL, 8)] = curr + 2;
+ hashSmall[ZSTD_hashPtr(ip - 2, hBitsS, mls)] = (U32)(ip - 2 - base);
+ hashLong[ZSTD_hashPtr(ip - 2, hBitsL, 8)] = (U32)(ip - 2 - base);
+ /* check immediate repcode */
+ while (ip <= ilimit) {
+ U32 const curr2 = (U32)(ip - base);
+ U32 const repIndex2 = curr2 - offset_2;
+ const BYTE *repMatch2 = repIndex2 < dictLimit ? dictBase + repIndex2 : base + repIndex2;
+ if ((((U32)((dictLimit - 1) - repIndex2) >= 3) & (repIndex2 > lowestIndex)) /* intentional overflow */
+ && (ZSTD_read32(repMatch2) == ZSTD_read32(ip))) {
+ const BYTE *const repEnd2 = repIndex2 < dictLimit ? dictEnd : iend;
+ size_t const repLength2 =
+ ZSTD_count_2segments(ip + EQUAL_READ32, repMatch2 + EQUAL_READ32, iend, repEnd2, lowPrefixPtr) + EQUAL_READ32;
+ U32 tmpOffset = offset_2;
+ offset_2 = offset_1;
+ offset_1 = tmpOffset; /* swap offset_2 <=> offset_1 */
+ ZSTD_storeSeq(seqStorePtr, 0, anchor, 0, repLength2 - MINMATCH);
+ hashSmall[ZSTD_hashPtr(ip, hBitsS, mls)] = curr2;
+ hashLong[ZSTD_hashPtr(ip, hBitsL, 8)] = curr2;
+ ip += repLength2;
+ anchor = ip;
+ continue;
+ }
+ break;
+ }
+ }
+ }
+
+ /* save reps for next block */
+ ctx->repToConfirm[0] = offset_1;
+ ctx->repToConfirm[1] = offset_2;
+
+ /* Last Literals */
+ {
+ size_t const lastLLSize = iend - anchor;
+ memcpy(seqStorePtr->lit, anchor, lastLLSize);
+ seqStorePtr->lit += lastLLSize;
+ }
+}
+
+static void ZSTD_compressBlock_doubleFast_extDict(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+ U32 const mls = ctx->params.cParams.searchLength;
+ switch (mls) {
+ default: /* includes case 3 */
+ case 4: ZSTD_compressBlock_doubleFast_extDict_generic(ctx, src, srcSize, 4); return;
+ case 5: ZSTD_compressBlock_doubleFast_extDict_generic(ctx, src, srcSize, 5); return;
+ case 6: ZSTD_compressBlock_doubleFast_extDict_generic(ctx, src, srcSize, 6); return;
+ case 7: ZSTD_compressBlock_doubleFast_extDict_generic(ctx, src, srcSize, 7); return;
+ }
+}
+
+/*-*************************************
+* Binary Tree search
+***************************************/
+/** ZSTD_insertBt1() : add one or multiple positions to tree.
+* ip : assumed <= iend-8 .
+* @return : nb of positions added */
+static U32 ZSTD_insertBt1(ZSTD_CCtx *zc, const BYTE *const ip, const U32 mls, const BYTE *const iend, U32 nbCompares, U32 extDict)
+{
+ U32 *const hashTable = zc->hashTable;
+ U32 const hashLog = zc->params.cParams.hashLog;
+ size_t const h = ZSTD_hashPtr(ip, hashLog, mls);
+ U32 *const bt = zc->chainTable;
+ U32 const btLog = zc->params.cParams.chainLog - 1;
+ U32 const btMask = (1 << btLog) - 1;
+ U32 matchIndex = hashTable[h];
+ size_t commonLengthSmaller = 0, commonLengthLarger = 0;
+ const BYTE *const base = zc->base;
+ const BYTE *const dictBase = zc->dictBase;
+ const U32 dictLimit = zc->dictLimit;
+ const BYTE *const dictEnd = dictBase + dictLimit;
+ const BYTE *const prefixStart = base + dictLimit;
+ const BYTE *match;
+ const U32 curr = (U32)(ip - base);
+ const U32 btLow = btMask >= curr ? 0 : curr - btMask;
+ U32 *smallerPtr = bt + 2 * (curr & btMask);
+ U32 *largerPtr = smallerPtr + 1;
+ U32 dummy32; /* to be nullified at the end */
+ U32 const windowLow = zc->lowLimit;
+ U32 matchEndIdx = curr + 8;
+ size_t bestLength = 8;
+
+ hashTable[h] = curr; /* Update Hash Table */
+
+ while (nbCompares-- && (matchIndex > windowLow)) {
+ U32 *const nextPtr = bt + 2 * (matchIndex & btMask);
+ size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
+
+ if ((!extDict) || (matchIndex + matchLength >= dictLimit)) {
+ match = base + matchIndex;
+ if (match[matchLength] == ip[matchLength])
+ matchLength += ZSTD_count(ip + matchLength + 1, match + matchLength + 1, iend) + 1;
+ } else {
+ match = dictBase + matchIndex;
+ matchLength += ZSTD_count_2segments(ip + matchLength, match + matchLength, iend, dictEnd, prefixStart);
+ if (matchIndex + matchLength >= dictLimit)
+ match = base + matchIndex; /* to prepare for next usage of match[matchLength] */
+ }
+
+ if (matchLength > bestLength) {
+ bestLength = matchLength;
+ if (matchLength > matchEndIdx - matchIndex)
+ matchEndIdx = matchIndex + (U32)matchLength;
+ }
+
+ if (ip + matchLength == iend) /* equal : no way to know if inf or sup */
+ break; /* drop , to guarantee consistency ; miss a bit of compression, but other solutions can corrupt the tree */
+
+ if (match[matchLength] < ip[matchLength]) { /* necessarily within correct buffer */
+ /* match is smaller than curr */
+ *smallerPtr = matchIndex; /* update smaller idx */
+ commonLengthSmaller = matchLength; /* all smaller will now have at least this guaranteed common length */
+ if (matchIndex <= btLow) {
+ smallerPtr = &dummy32;
+ break;
+ } /* beyond tree size, stop the search */
+ smallerPtr = nextPtr + 1; /* new "smaller" => larger of match */
+ matchIndex = nextPtr[1]; /* new matchIndex larger than previous (closer to curr) */
+ } else {
+ /* match is larger than curr */
+ *largerPtr = matchIndex;
+ commonLengthLarger = matchLength;
+ if (matchIndex <= btLow) {
+ largerPtr = &dummy32;
+ break;
+ } /* beyond tree size, stop the search */
+ largerPtr = nextPtr;
+ matchIndex = nextPtr[0];
+ }
+ }
+
+ *smallerPtr = *largerPtr = 0;
+ if (bestLength > 384)
+ return MIN(192, (U32)(bestLength - 384)); /* speed optimization */
+ if (matchEndIdx > curr + 8)
+ return matchEndIdx - curr - 8;
+ return 1;
+}
+
+static size_t ZSTD_insertBtAndFindBestMatch(ZSTD_CCtx *zc, const BYTE *const ip, const BYTE *const iend, size_t *offsetPtr, U32 nbCompares, const U32 mls,
+ U32 extDict)
+{
+ U32 *const hashTable = zc->hashTable;
+ U32 const hashLog = zc->params.cParams.hashLog;
+ size_t const h = ZSTD_hashPtr(ip, hashLog, mls);
+ U32 *const bt = zc->chainTable;
+ U32 const btLog = zc->params.cParams.chainLog - 1;
+ U32 const btMask = (1 << btLog) - 1;
+ U32 matchIndex = hashTable[h];
+ size_t commonLengthSmaller = 0, commonLengthLarger = 0;
+ const BYTE *const base = zc->base;
+ const BYTE *const dictBase = zc->dictBase;
+ const U32 dictLimit = zc->dictLimit;
+ const BYTE *const dictEnd = dictBase + dictLimit;
+ const BYTE *const prefixStart = base + dictLimit;
+ const U32 curr = (U32)(ip - base);
+ const U32 btLow = btMask >= curr ? 0 : curr - btMask;
+ const U32 windowLow = zc->lowLimit;
+ U32 *smallerPtr = bt + 2 * (curr & btMask);
+ U32 *largerPtr = bt + 2 * (curr & btMask) + 1;
+ U32 matchEndIdx = curr + 8;
+ U32 dummy32; /* to be nullified at the end */
+ size_t bestLength = 0;
+
+ hashTable[h] = curr; /* Update Hash Table */
+
+ while (nbCompares-- && (matchIndex > windowLow)) {
+ U32 *const nextPtr = bt + 2 * (matchIndex & btMask);
+ size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
+ const BYTE *match;
+
+ if ((!extDict) || (matchIndex + matchLength >= dictLimit)) {
+ match = base + matchIndex;
+ if (match[matchLength] == ip[matchLength])
+ matchLength += ZSTD_count(ip + matchLength + 1, match + matchLength + 1, iend) + 1;
+ } else {
+ match = dictBase + matchIndex;
+ matchLength += ZSTD_count_2segments(ip + matchLength, match + matchLength, iend, dictEnd, prefixStart);
+ if (matchIndex + matchLength >= dictLimit)
+ match = base + matchIndex; /* to prepare for next usage of match[matchLength] */
+ }
+
+ if (matchLength > bestLength) {
+ if (matchLength > matchEndIdx - matchIndex)
+ matchEndIdx = matchIndex + (U32)matchLength;
+ if ((4 * (int)(matchLength - bestLength)) > (int)(ZSTD_highbit32(curr - matchIndex + 1) - ZSTD_highbit32((U32)offsetPtr[0] + 1)))
+ bestLength = matchLength, *offsetPtr = ZSTD_REP_MOVE + curr - matchIndex;
+ if (ip + matchLength == iend) /* equal : no way to know if inf or sup */
+ break; /* drop, to guarantee consistency (miss a little bit of compression) */
+ }
+
+ if (match[matchLength] < ip[matchLength]) {
+ /* match is smaller than curr */
+ *smallerPtr = matchIndex; /* update smaller idx */
+ commonLengthSmaller = matchLength; /* all smaller will now have at least this guaranteed common length */
+ if (matchIndex <= btLow) {
+ smallerPtr = &dummy32;
+ break;
+ } /* beyond tree size, stop the search */
+ smallerPtr = nextPtr + 1; /* new "smaller" => larger of match */
+ matchIndex = nextPtr[1]; /* new matchIndex larger than previous (closer to curr) */
+ } else {
+ /* match is larger than curr */
+ *largerPtr = matchIndex;
+ commonLengthLarger = matchLength;
+ if (matchIndex <= btLow) {
+ largerPtr = &dummy32;
+ break;
+ } /* beyond tree size, stop the search */
+ largerPtr = nextPtr;
+ matchIndex = nextPtr[0];
+ }
+ }
+
+ *smallerPtr = *largerPtr = 0;
+
+ zc->nextToUpdate = (matchEndIdx > curr + 8) ? matchEndIdx - 8 : curr + 1;
+ return bestLength;
+}
+
+static void ZSTD_updateTree(ZSTD_CCtx *zc, const BYTE *const ip, const BYTE *const iend, const U32 nbCompares, const U32 mls)
+{
+ const BYTE *const base = zc->base;
+ const U32 target = (U32)(ip - base);
+ U32 idx = zc->nextToUpdate;
+
+ while (idx < target)
+ idx += ZSTD_insertBt1(zc, base + idx, mls, iend, nbCompares, 0);
+}
+
+/** ZSTD_BtFindBestMatch() : Tree updater, providing best match */
+static size_t ZSTD_BtFindBestMatch(ZSTD_CCtx *zc, const BYTE *const ip, const BYTE *const iLimit, size_t *offsetPtr, const U32 maxNbAttempts, const U32 mls)
+{
+ if (ip < zc->base + zc->nextToUpdate)
+ return 0; /* skipped area */
+ ZSTD_updateTree(zc, ip, iLimit, maxNbAttempts, mls);
+ return ZSTD_insertBtAndFindBestMatch(zc, ip, iLimit, offsetPtr, maxNbAttempts, mls, 0);
+}
+
+static size_t ZSTD_BtFindBestMatch_selectMLS(ZSTD_CCtx *zc, /* Index table will be updated */
+ const BYTE *ip, const BYTE *const iLimit, size_t *offsetPtr, const U32 maxNbAttempts, const U32 matchLengthSearch)
+{
+ switch (matchLengthSearch) {
+ default: /* includes case 3 */
+ case 4: return ZSTD_BtFindBestMatch(zc, ip, iLimit, offsetPtr, maxNbAttempts, 4);
+ case 5: return ZSTD_BtFindBestMatch(zc, ip, iLimit, offsetPtr, maxNbAttempts, 5);
+ case 7:
+ case 6: return ZSTD_BtFindBestMatch(zc, ip, iLimit, offsetPtr, maxNbAttempts, 6);
+ }
+}
+
+static void ZSTD_updateTree_extDict(ZSTD_CCtx *zc, const BYTE *const ip, const BYTE *const iend, const U32 nbCompares, const U32 mls)
+{
+ const BYTE *const base = zc->base;
+ const U32 target = (U32)(ip - base);
+ U32 idx = zc->nextToUpdate;
+
+ while (idx < target)
+ idx += ZSTD_insertBt1(zc, base + idx, mls, iend, nbCompares, 1);
+}
+
+/** Tree updater, providing best match */
+static size_t ZSTD_BtFindBestMatch_extDict(ZSTD_CCtx *zc, const BYTE *const ip, const BYTE *const iLimit, size_t *offsetPtr, const U32 maxNbAttempts,
+ const U32 mls)
+{
+ if (ip < zc->base + zc->nextToUpdate)
+ return 0; /* skipped area */
+ ZSTD_updateTree_extDict(zc, ip, iLimit, maxNbAttempts, mls);
+ return ZSTD_insertBtAndFindBestMatch(zc, ip, iLimit, offsetPtr, maxNbAttempts, mls, 1);
+}
+
+static size_t ZSTD_BtFindBestMatch_selectMLS_extDict(ZSTD_CCtx *zc, /* Index table will be updated */
+ const BYTE *ip, const BYTE *const iLimit, size_t *offsetPtr, const U32 maxNbAttempts,
+ const U32 matchLengthSearch)
+{
+ switch (matchLengthSearch) {
+ default: /* includes case 3 */
+ case 4: return ZSTD_BtFindBestMatch_extDict(zc, ip, iLimit, offsetPtr, maxNbAttempts, 4);
+ case 5: return ZSTD_BtFindBestMatch_extDict(zc, ip, iLimit, offsetPtr, maxNbAttempts, 5);
+ case 7:
+ case 6: return ZSTD_BtFindBestMatch_extDict(zc, ip, iLimit, offsetPtr, maxNbAttempts, 6);
+ }
+}
+
+/* *********************************
+* Hash Chain
+***********************************/
+#define NEXT_IN_CHAIN(d, mask) chainTable[(d)&mask]
+
+/* Update chains up to ip (excluded)
+ Assumption : always within prefix (i.e. not within extDict) */
+FORCE_INLINE
+U32 ZSTD_insertAndFindFirstIndex(ZSTD_CCtx *zc, const BYTE *ip, U32 mls)
+{
+ U32 *const hashTable = zc->hashTable;
+ const U32 hashLog = zc->params.cParams.hashLog;
+ U32 *const chainTable = zc->chainTable;
+ const U32 chainMask = (1 << zc->params.cParams.chainLog) - 1;
+ const BYTE *const base = zc->base;
+ const U32 target = (U32)(ip - base);
+ U32 idx = zc->nextToUpdate;
+
+ while (idx < target) { /* catch up */
+ size_t const h = ZSTD_hashPtr(base + idx, hashLog, mls);
+ NEXT_IN_CHAIN(idx, chainMask) = hashTable[h];
+ hashTable[h] = idx;
+ idx++;
+ }
+
+ zc->nextToUpdate = target;
+ return hashTable[ZSTD_hashPtr(ip, hashLog, mls)];
+}
+
+/* inlining is important to hardwire a hot branch (template emulation) */
+FORCE_INLINE
+size_t ZSTD_HcFindBestMatch_generic(ZSTD_CCtx *zc, /* Index table will be updated */
+ const BYTE *const ip, const BYTE *const iLimit, size_t *offsetPtr, const U32 maxNbAttempts, const U32 mls,
+ const U32 extDict)
+{
+ U32 *const chainTable = zc->chainTable;
+ const U32 chainSize = (1 << zc->params.cParams.chainLog);
+ const U32 chainMask = chainSize - 1;
+ const BYTE *const base = zc->base;
+ const BYTE *const dictBase = zc->dictBase;
+ const U32 dictLimit = zc->dictLimit;
+ const BYTE *const prefixStart = base + dictLimit;
+ const BYTE *const dictEnd = dictBase + dictLimit;
+ const U32 lowLimit = zc->lowLimit;
+ const U32 curr = (U32)(ip - base);
+ const U32 minChain = curr > chainSize ? curr - chainSize : 0;
+ int nbAttempts = maxNbAttempts;
+ size_t ml = EQUAL_READ32 - 1;
+
+ /* HC4 match finder */
+ U32 matchIndex = ZSTD_insertAndFindFirstIndex(zc, ip, mls);
+
+ for (; (matchIndex > lowLimit) & (nbAttempts > 0); nbAttempts--) {
+ const BYTE *match;
+ size_t currMl = 0;
+ if ((!extDict) || matchIndex >= dictLimit) {
+ match = base + matchIndex;
+ if (match[ml] == ip[ml]) /* potentially better */
+ currMl = ZSTD_count(ip, match, iLimit);
+ } else {
+ match = dictBase + matchIndex;
+ if (ZSTD_read32(match) == ZSTD_read32(ip)) /* assumption : matchIndex <= dictLimit-4 (by table construction) */
+ currMl = ZSTD_count_2segments(ip + EQUAL_READ32, match + EQUAL_READ32, iLimit, dictEnd, prefixStart) + EQUAL_READ32;
+ }
+
+ /* save best solution */
+ if (currMl > ml) {
+ ml = currMl;
+ *offsetPtr = curr - matchIndex + ZSTD_REP_MOVE;
+ if (ip + currMl == iLimit)
+ break; /* best possible, and avoid read overflow*/
+ }
+
+ if (matchIndex <= minChain)
+ break;
+ matchIndex = NEXT_IN_CHAIN(matchIndex, chainMask);
+ }
+
+ return ml;
+}
+
+FORCE_INLINE size_t ZSTD_HcFindBestMatch_selectMLS(ZSTD_CCtx *zc, const BYTE *ip, const BYTE *const iLimit, size_t *offsetPtr, const U32 maxNbAttempts,
+ const U32 matchLengthSearch)
+{
+ switch (matchLengthSearch) {
+ default: /* includes case 3 */
+ case 4: return ZSTD_HcFindBestMatch_generic(zc, ip, iLimit, offsetPtr, maxNbAttempts, 4, 0);
+ case 5: return ZSTD_HcFindBestMatch_generic(zc, ip, iLimit, offsetPtr, maxNbAttempts, 5, 0);
+ case 7:
+ case 6: return ZSTD_HcFindBestMatch_generic(zc, ip, iLimit, offsetPtr, maxNbAttempts, 6, 0);
+ }
+}
+
+FORCE_INLINE size_t ZSTD_HcFindBestMatch_extDict_selectMLS(ZSTD_CCtx *zc, const BYTE *ip, const BYTE *const iLimit, size_t *offsetPtr, const U32 maxNbAttempts,
+ const U32 matchLengthSearch)
+{
+ switch (matchLengthSearch) {
+ default: /* includes case 3 */
+ case 4: return ZSTD_HcFindBestMatch_generic(zc, ip, iLimit, offsetPtr, maxNbAttempts, 4, 1);
+ case 5: return ZSTD_HcFindBestMatch_generic(zc, ip, iLimit, offsetPtr, maxNbAttempts, 5, 1);
+ case 7:
+ case 6: return ZSTD_HcFindBestMatch_generic(zc, ip, iLimit, offsetPtr, maxNbAttempts, 6, 1);
+ }
+}
+
+/* *******************************
+* Common parser - lazy strategy
+*********************************/
+FORCE_INLINE
+void ZSTD_compressBlock_lazy_generic(ZSTD_CCtx *ctx, const void *src, size_t srcSize, const U32 searchMethod, const U32 depth)
+{
+ seqStore_t *seqStorePtr = &(ctx->seqStore);
+ const BYTE *const istart = (const BYTE *)src;
+ const BYTE *ip = istart;
+ const BYTE *anchor = istart;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *const ilimit = iend - 8;
+ const BYTE *const base = ctx->base + ctx->dictLimit;
+
+ U32 const maxSearches = 1 << ctx->params.cParams.searchLog;
+ U32 const mls = ctx->params.cParams.searchLength;
+
+ typedef size_t (*searchMax_f)(ZSTD_CCtx * zc, const BYTE *ip, const BYTE *iLimit, size_t *offsetPtr, U32 maxNbAttempts, U32 matchLengthSearch);
+ searchMax_f const searchMax = searchMethod ? ZSTD_BtFindBestMatch_selectMLS : ZSTD_HcFindBestMatch_selectMLS;
+ U32 offset_1 = ctx->rep[0], offset_2 = ctx->rep[1], savedOffset = 0;
+
+ /* init */
+ ip += (ip == base);
+ ctx->nextToUpdate3 = ctx->nextToUpdate;
+ {
+ U32 const maxRep = (U32)(ip - base);
+ if (offset_2 > maxRep)
+ savedOffset = offset_2, offset_2 = 0;
+ if (offset_1 > maxRep)
+ savedOffset = offset_1, offset_1 = 0;
+ }
+
+ /* Match Loop */
+ while (ip < ilimit) {
+ size_t matchLength = 0;
+ size_t offset = 0;
+ const BYTE *start = ip + 1;
+
+ /* check repCode */
+ if ((offset_1 > 0) & (ZSTD_read32(ip + 1) == ZSTD_read32(ip + 1 - offset_1))) {
+ /* repcode : we take it */
+ matchLength = ZSTD_count(ip + 1 + EQUAL_READ32, ip + 1 + EQUAL_READ32 - offset_1, iend) + EQUAL_READ32;
+ if (depth == 0)
+ goto _storeSequence;
+ }
+
+ /* first search (depth 0) */
+ {
+ size_t offsetFound = 99999999;
+ size_t const ml2 = searchMax(ctx, ip, iend, &offsetFound, maxSearches, mls);
+ if (ml2 > matchLength)
+ matchLength = ml2, start = ip, offset = offsetFound;
+ }
+
+ if (matchLength < EQUAL_READ32) {
+ ip += ((ip - anchor) >> g_searchStrength) + 1; /* jump faster over incompressible sections */
+ continue;
+ }
+
+ /* let's try to find a better solution */
+ if (depth >= 1)
+ while (ip < ilimit) {
+ ip++;
+ if ((offset) && ((offset_1 > 0) & (ZSTD_read32(ip) == ZSTD_read32(ip - offset_1)))) {
+ size_t const mlRep = ZSTD_count(ip + EQUAL_READ32, ip + EQUAL_READ32 - offset_1, iend) + EQUAL_READ32;
+ int const gain2 = (int)(mlRep * 3);
+ int const gain1 = (int)(matchLength * 3 - ZSTD_highbit32((U32)offset + 1) + 1);
+ if ((mlRep >= EQUAL_READ32) && (gain2 > gain1))
+ matchLength = mlRep, offset = 0, start = ip;
+ }
+ {
+ size_t offset2 = 99999999;
+ size_t const ml2 = searchMax(ctx, ip, iend, &offset2, maxSearches, mls);
+ int const gain2 = (int)(ml2 * 4 - ZSTD_highbit32((U32)offset2 + 1)); /* raw approx */
+ int const gain1 = (int)(matchLength * 4 - ZSTD_highbit32((U32)offset + 1) + 4);
+ if ((ml2 >= EQUAL_READ32) && (gain2 > gain1)) {
+ matchLength = ml2, offset = offset2, start = ip;
+ continue; /* search a better one */
+ }
+ }
+
+ /* let's find an even better one */
+ if ((depth == 2) && (ip < ilimit)) {
+ ip++;
+ if ((offset) && ((offset_1 > 0) & (ZSTD_read32(ip) == ZSTD_read32(ip - offset_1)))) {
+ size_t const ml2 = ZSTD_count(ip + EQUAL_READ32, ip + EQUAL_READ32 - offset_1, iend) + EQUAL_READ32;
+ int const gain2 = (int)(ml2 * 4);
+ int const gain1 = (int)(matchLength * 4 - ZSTD_highbit32((U32)offset + 1) + 1);
+ if ((ml2 >= EQUAL_READ32) && (gain2 > gain1))
+ matchLength = ml2, offset = 0, start = ip;
+ }
+ {
+ size_t offset2 = 99999999;
+ size_t const ml2 = searchMax(ctx, ip, iend, &offset2, maxSearches, mls);
+ int const gain2 = (int)(ml2 * 4 - ZSTD_highbit32((U32)offset2 + 1)); /* raw approx */
+ int const gain1 = (int)(matchLength * 4 - ZSTD_highbit32((U32)offset + 1) + 7);
+ if ((ml2 >= EQUAL_READ32) && (gain2 > gain1)) {
+ matchLength = ml2, offset = offset2, start = ip;
+ continue;
+ }
+ }
+ }
+ break; /* nothing found : store previous solution */
+ }
+
+ /* NOTE:
+ * start[-offset+ZSTD_REP_MOVE-1] is undefined behavior.
+ * (-offset+ZSTD_REP_MOVE-1) is unsigned, and is added to start, which
+ * overflows the pointer, which is undefined behavior.
+ */
+ /* catch up */
+ if (offset) {
+ while ((start > anchor) && (start > base + offset - ZSTD_REP_MOVE) &&
+ (start[-1] == (start-offset+ZSTD_REP_MOVE)[-1])) /* only search for offset within prefix */
+ {
+ start--;
+ matchLength++;
+ }
+ offset_2 = offset_1;
+ offset_1 = (U32)(offset - ZSTD_REP_MOVE);
+ }
+
+ /* store sequence */
+_storeSequence:
+ {
+ size_t const litLength = start - anchor;
+ ZSTD_storeSeq(seqStorePtr, litLength, anchor, (U32)offset, matchLength - MINMATCH);
+ anchor = ip = start + matchLength;
+ }
+
+ /* check immediate repcode */
+ while ((ip <= ilimit) && ((offset_2 > 0) & (ZSTD_read32(ip) == ZSTD_read32(ip - offset_2)))) {
+ /* store sequence */
+ matchLength = ZSTD_count(ip + EQUAL_READ32, ip + EQUAL_READ32 - offset_2, iend) + EQUAL_READ32;
+ offset = offset_2;
+ offset_2 = offset_1;
+ offset_1 = (U32)offset; /* swap repcodes */
+ ZSTD_storeSeq(seqStorePtr, 0, anchor, 0, matchLength - MINMATCH);
+ ip += matchLength;
+ anchor = ip;
+ continue; /* faster when present ... (?) */
+ }
+ }
+
+ /* Save reps for next block */
+ ctx->repToConfirm[0] = offset_1 ? offset_1 : savedOffset;
+ ctx->repToConfirm[1] = offset_2 ? offset_2 : savedOffset;
+
+ /* Last Literals */
+ {
+ size_t const lastLLSize = iend - anchor;
+ memcpy(seqStorePtr->lit, anchor, lastLLSize);
+ seqStorePtr->lit += lastLLSize;
+ }
+}
+
+static void ZSTD_compressBlock_btlazy2(ZSTD_CCtx *ctx, const void *src, size_t srcSize) { ZSTD_compressBlock_lazy_generic(ctx, src, srcSize, 1, 2); }
+
+static void ZSTD_compressBlock_lazy2(ZSTD_CCtx *ctx, const void *src, size_t srcSize) { ZSTD_compressBlock_lazy_generic(ctx, src, srcSize, 0, 2); }
+
+static void ZSTD_compressBlock_lazy(ZSTD_CCtx *ctx, const void *src, size_t srcSize) { ZSTD_compressBlock_lazy_generic(ctx, src, srcSize, 0, 1); }
+
+static void ZSTD_compressBlock_greedy(ZSTD_CCtx *ctx, const void *src, size_t srcSize) { ZSTD_compressBlock_lazy_generic(ctx, src, srcSize, 0, 0); }
+
+FORCE_INLINE
+void ZSTD_compressBlock_lazy_extDict_generic(ZSTD_CCtx *ctx, const void *src, size_t srcSize, const U32 searchMethod, const U32 depth)
+{
+ seqStore_t *seqStorePtr = &(ctx->seqStore);
+ const BYTE *const istart = (const BYTE *)src;
+ const BYTE *ip = istart;
+ const BYTE *anchor = istart;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *const ilimit = iend - 8;
+ const BYTE *const base = ctx->base;
+ const U32 dictLimit = ctx->dictLimit;
+ const U32 lowestIndex = ctx->lowLimit;
+ const BYTE *const prefixStart = base + dictLimit;
+ const BYTE *const dictBase = ctx->dictBase;
+ const BYTE *const dictEnd = dictBase + dictLimit;
+ const BYTE *const dictStart = dictBase + ctx->lowLimit;
+
+ const U32 maxSearches = 1 << ctx->params.cParams.searchLog;
+ const U32 mls = ctx->params.cParams.searchLength;
+
+ typedef size_t (*searchMax_f)(ZSTD_CCtx * zc, const BYTE *ip, const BYTE *iLimit, size_t *offsetPtr, U32 maxNbAttempts, U32 matchLengthSearch);
+ searchMax_f searchMax = searchMethod ? ZSTD_BtFindBestMatch_selectMLS_extDict : ZSTD_HcFindBestMatch_extDict_selectMLS;
+
+ U32 offset_1 = ctx->rep[0], offset_2 = ctx->rep[1];
+
+ /* init */
+ ctx->nextToUpdate3 = ctx->nextToUpdate;
+ ip += (ip == prefixStart);
+
+ /* Match Loop */
+ while (ip < ilimit) {
+ size_t matchLength = 0;
+ size_t offset = 0;
+ const BYTE *start = ip + 1;
+ U32 curr = (U32)(ip - base);
+
+ /* check repCode */
+ {
+ const U32 repIndex = (U32)(curr + 1 - offset_1);
+ const BYTE *const repBase = repIndex < dictLimit ? dictBase : base;
+ const BYTE *const repMatch = repBase + repIndex;
+ if (((U32)((dictLimit - 1) - repIndex) >= 3) & (repIndex > lowestIndex)) /* intentional overflow */
+ if (ZSTD_read32(ip + 1) == ZSTD_read32(repMatch)) {
+ /* repcode detected we should take it */
+ const BYTE *const repEnd = repIndex < dictLimit ? dictEnd : iend;
+ matchLength =
+ ZSTD_count_2segments(ip + 1 + EQUAL_READ32, repMatch + EQUAL_READ32, iend, repEnd, prefixStart) + EQUAL_READ32;
+ if (depth == 0)
+ goto _storeSequence;
+ }
+ }
+
+ /* first search (depth 0) */
+ {
+ size_t offsetFound = 99999999;
+ size_t const ml2 = searchMax(ctx, ip, iend, &offsetFound, maxSearches, mls);
+ if (ml2 > matchLength)
+ matchLength = ml2, start = ip, offset = offsetFound;
+ }
+
+ if (matchLength < EQUAL_READ32) {
+ ip += ((ip - anchor) >> g_searchStrength) + 1; /* jump faster over incompressible sections */
+ continue;
+ }
+
+ /* let's try to find a better solution */
+ if (depth >= 1)
+ while (ip < ilimit) {
+ ip++;
+ curr++;
+ /* check repCode */
+ if (offset) {
+ const U32 repIndex = (U32)(curr - offset_1);
+ const BYTE *const repBase = repIndex < dictLimit ? dictBase : base;
+ const BYTE *const repMatch = repBase + repIndex;
+ if (((U32)((dictLimit - 1) - repIndex) >= 3) & (repIndex > lowestIndex)) /* intentional overflow */
+ if (ZSTD_read32(ip) == ZSTD_read32(repMatch)) {
+ /* repcode detected */
+ const BYTE *const repEnd = repIndex < dictLimit ? dictEnd : iend;
+ size_t const repLength =
+ ZSTD_count_2segments(ip + EQUAL_READ32, repMatch + EQUAL_READ32, iend, repEnd, prefixStart) +
+ EQUAL_READ32;
+ int const gain2 = (int)(repLength * 3);
+ int const gain1 = (int)(matchLength * 3 - ZSTD_highbit32((U32)offset + 1) + 1);
+ if ((repLength >= EQUAL_READ32) && (gain2 > gain1))
+ matchLength = repLength, offset = 0, start = ip;
+ }
+ }
+
+ /* search match, depth 1 */
+ {
+ size_t offset2 = 99999999;
+ size_t const ml2 = searchMax(ctx, ip, iend, &offset2, maxSearches, mls);
+ int const gain2 = (int)(ml2 * 4 - ZSTD_highbit32((U32)offset2 + 1)); /* raw approx */
+ int const gain1 = (int)(matchLength * 4 - ZSTD_highbit32((U32)offset + 1) + 4);
+ if ((ml2 >= EQUAL_READ32) && (gain2 > gain1)) {
+ matchLength = ml2, offset = offset2, start = ip;
+ continue; /* search a better one */
+ }
+ }
+
+ /* let's find an even better one */
+ if ((depth == 2) && (ip < ilimit)) {
+ ip++;
+ curr++;
+ /* check repCode */
+ if (offset) {
+ const U32 repIndex = (U32)(curr - offset_1);
+ const BYTE *const repBase = repIndex < dictLimit ? dictBase : base;
+ const BYTE *const repMatch = repBase + repIndex;
+ if (((U32)((dictLimit - 1) - repIndex) >= 3) & (repIndex > lowestIndex)) /* intentional overflow */
+ if (ZSTD_read32(ip) == ZSTD_read32(repMatch)) {
+ /* repcode detected */
+ const BYTE *const repEnd = repIndex < dictLimit ? dictEnd : iend;
+ size_t repLength = ZSTD_count_2segments(ip + EQUAL_READ32, repMatch + EQUAL_READ32, iend,
+ repEnd, prefixStart) +
+ EQUAL_READ32;
+ int gain2 = (int)(repLength * 4);
+ int gain1 = (int)(matchLength * 4 - ZSTD_highbit32((U32)offset + 1) + 1);
+ if ((repLength >= EQUAL_READ32) && (gain2 > gain1))
+ matchLength = repLength, offset = 0, start = ip;
+ }
+ }
+
+ /* search match, depth 2 */
+ {
+ size_t offset2 = 99999999;
+ size_t const ml2 = searchMax(ctx, ip, iend, &offset2, maxSearches, mls);
+ int const gain2 = (int)(ml2 * 4 - ZSTD_highbit32((U32)offset2 + 1)); /* raw approx */
+ int const gain1 = (int)(matchLength * 4 - ZSTD_highbit32((U32)offset + 1) + 7);
+ if ((ml2 >= EQUAL_READ32) && (gain2 > gain1)) {
+ matchLength = ml2, offset = offset2, start = ip;
+ continue;
+ }
+ }
+ }
+ break; /* nothing found : store previous solution */
+ }
+
+ /* catch up */
+ if (offset) {
+ U32 const matchIndex = (U32)((start - base) - (offset - ZSTD_REP_MOVE));
+ const BYTE *match = (matchIndex < dictLimit) ? dictBase + matchIndex : base + matchIndex;
+ const BYTE *const mStart = (matchIndex < dictLimit) ? dictStart : prefixStart;
+ while ((start > anchor) && (match > mStart) && (start[-1] == match[-1])) {
+ start--;
+ match--;
+ matchLength++;
+ } /* catch up */
+ offset_2 = offset_1;
+ offset_1 = (U32)(offset - ZSTD_REP_MOVE);
+ }
+
+ /* store sequence */
+ _storeSequence : {
+ size_t const litLength = start - anchor;
+ ZSTD_storeSeq(seqStorePtr, litLength, anchor, (U32)offset, matchLength - MINMATCH);
+ anchor = ip = start + matchLength;
+ }
+
+ /* check immediate repcode */
+ while (ip <= ilimit) {
+ const U32 repIndex = (U32)((ip - base) - offset_2);
+ const BYTE *const repBase = repIndex < dictLimit ? dictBase : base;
+ const BYTE *const repMatch = repBase + repIndex;
+ if (((U32)((dictLimit - 1) - repIndex) >= 3) & (repIndex > lowestIndex)) /* intentional overflow */
+ if (ZSTD_read32(ip) == ZSTD_read32(repMatch)) {
+ /* repcode detected we should take it */
+ const BYTE *const repEnd = repIndex < dictLimit ? dictEnd : iend;
+ matchLength =
+ ZSTD_count_2segments(ip + EQUAL_READ32, repMatch + EQUAL_READ32, iend, repEnd, prefixStart) + EQUAL_READ32;
+ offset = offset_2;
+ offset_2 = offset_1;
+ offset_1 = (U32)offset; /* swap offset history */
+ ZSTD_storeSeq(seqStorePtr, 0, anchor, 0, matchLength - MINMATCH);
+ ip += matchLength;
+ anchor = ip;
+ continue; /* faster when present ... (?) */
+ }
+ break;
+ }
+ }
+
+ /* Save reps for next block */
+ ctx->repToConfirm[0] = offset_1;
+ ctx->repToConfirm[1] = offset_2;
+
+ /* Last Literals */
+ {
+ size_t const lastLLSize = iend - anchor;
+ memcpy(seqStorePtr->lit, anchor, lastLLSize);
+ seqStorePtr->lit += lastLLSize;
+ }
+}
+
+void ZSTD_compressBlock_greedy_extDict(ZSTD_CCtx *ctx, const void *src, size_t srcSize) { ZSTD_compressBlock_lazy_extDict_generic(ctx, src, srcSize, 0, 0); }
+
+static void ZSTD_compressBlock_lazy_extDict(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+ ZSTD_compressBlock_lazy_extDict_generic(ctx, src, srcSize, 0, 1);
+}
+
+static void ZSTD_compressBlock_lazy2_extDict(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+ ZSTD_compressBlock_lazy_extDict_generic(ctx, src, srcSize, 0, 2);
+}
+
+static void ZSTD_compressBlock_btlazy2_extDict(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+ ZSTD_compressBlock_lazy_extDict_generic(ctx, src, srcSize, 1, 2);
+}
+
+/* The optimal parser */
+#include "zstd_opt.h"
+
+static void ZSTD_compressBlock_btopt(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+#ifdef ZSTD_OPT_H_91842398743
+ ZSTD_compressBlock_opt_generic(ctx, src, srcSize, 0);
+#else
+ (void)ctx;
+ (void)src;
+ (void)srcSize;
+ return;
+#endif
+}
+
+static void ZSTD_compressBlock_btopt2(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+#ifdef ZSTD_OPT_H_91842398743
+ ZSTD_compressBlock_opt_generic(ctx, src, srcSize, 1);
+#else
+ (void)ctx;
+ (void)src;
+ (void)srcSize;
+ return;
+#endif
+}
+
+static void ZSTD_compressBlock_btopt_extDict(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+#ifdef ZSTD_OPT_H_91842398743
+ ZSTD_compressBlock_opt_extDict_generic(ctx, src, srcSize, 0);
+#else
+ (void)ctx;
+ (void)src;
+ (void)srcSize;
+ return;
+#endif
+}
+
+static void ZSTD_compressBlock_btopt2_extDict(ZSTD_CCtx *ctx, const void *src, size_t srcSize)
+{
+#ifdef ZSTD_OPT_H_91842398743
+ ZSTD_compressBlock_opt_extDict_generic(ctx, src, srcSize, 1);
+#else
+ (void)ctx;
+ (void)src;
+ (void)srcSize;
+ return;
+#endif
+}
+
+typedef void (*ZSTD_blockCompressor)(ZSTD_CCtx *ctx, const void *src, size_t srcSize);
+
+static ZSTD_blockCompressor ZSTD_selectBlockCompressor(ZSTD_strategy strat, int extDict)
+{
+ static const ZSTD_blockCompressor blockCompressor[2][8] = {
+ {ZSTD_compressBlock_fast, ZSTD_compressBlock_doubleFast, ZSTD_compressBlock_greedy, ZSTD_compressBlock_lazy, ZSTD_compressBlock_lazy2,
+ ZSTD_compressBlock_btlazy2, ZSTD_compressBlock_btopt, ZSTD_compressBlock_btopt2},
+ {ZSTD_compressBlock_fast_extDict, ZSTD_compressBlock_doubleFast_extDict, ZSTD_compressBlock_greedy_extDict, ZSTD_compressBlock_lazy_extDict,
+ ZSTD_compressBlock_lazy2_extDict, ZSTD_compressBlock_btlazy2_extDict, ZSTD_compressBlock_btopt_extDict, ZSTD_compressBlock_btopt2_extDict}};
+
+ return blockCompressor[extDict][(U32)strat];
+}
+
+static size_t ZSTD_compressBlock_internal(ZSTD_CCtx *zc, void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ ZSTD_blockCompressor const blockCompressor = ZSTD_selectBlockCompressor(zc->params.cParams.strategy, zc->lowLimit < zc->dictLimit);
+ const BYTE *const base = zc->base;
+ const BYTE *const istart = (const BYTE *)src;
+ const U32 curr = (U32)(istart - base);
+ if (srcSize < MIN_CBLOCK_SIZE + ZSTD_blockHeaderSize + 1)
+ return 0; /* don't even attempt compression below a certain srcSize */
+ ZSTD_resetSeqStore(&(zc->seqStore));
+ if (curr > zc->nextToUpdate + 384)
+ zc->nextToUpdate = curr - MIN(192, (U32)(curr - zc->nextToUpdate - 384)); /* update tree not updated after finding very long rep matches */
+ blockCompressor(zc, src, srcSize);
+ return ZSTD_compressSequences(zc, dst, dstCapacity, srcSize);
+}
+
+/*! ZSTD_compress_generic() :
+* Compress a chunk of data into one or multiple blocks.
+* All blocks will be terminated, all input will be consumed.
+* Function will issue an error if there is not enough `dstCapacity` to hold the compressed content.
+* Frame is supposed already started (header already produced)
+* @return : compressed size, or an error code
+*/
+static size_t ZSTD_compress_generic(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, U32 lastFrameChunk)
+{
+ size_t blockSize = cctx->blockSize;
+ size_t remaining = srcSize;
+ const BYTE *ip = (const BYTE *)src;
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *op = ostart;
+ U32 const maxDist = 1 << cctx->params.cParams.windowLog;
+
+ if (cctx->params.fParams.checksumFlag && srcSize)
+ xxh64_update(&cctx->xxhState, src, srcSize);
+
+ while (remaining) {
+ U32 const lastBlock = lastFrameChunk & (blockSize >= remaining);
+ size_t cSize;
+
+ if (dstCapacity < ZSTD_blockHeaderSize + MIN_CBLOCK_SIZE)
+ return ERROR(dstSize_tooSmall); /* not enough space to store compressed block */
+ if (remaining < blockSize)
+ blockSize = remaining;
+
+ /* preemptive overflow correction */
+ if (cctx->lowLimit > (3U << 29)) {
+ U32 const cycleMask = (1 << ZSTD_cycleLog(cctx->params.cParams.hashLog, cctx->params.cParams.strategy)) - 1;
+ U32 const curr = (U32)(ip - cctx->base);
+ U32 const newCurr = (curr & cycleMask) + (1 << cctx->params.cParams.windowLog);
+ U32 const correction = curr - newCurr;
+ ZSTD_STATIC_ASSERT(ZSTD_WINDOWLOG_MAX_64 <= 30);
+ ZSTD_reduceIndex(cctx, correction);
+ cctx->base += correction;
+ cctx->dictBase += correction;
+ cctx->lowLimit -= correction;
+ cctx->dictLimit -= correction;
+ if (cctx->nextToUpdate < correction)
+ cctx->nextToUpdate = 0;
+ else
+ cctx->nextToUpdate -= correction;
+ }
+
+ if ((U32)(ip + blockSize - cctx->base) > cctx->loadedDictEnd + maxDist) {
+ /* enforce maxDist */
+ U32 const newLowLimit = (U32)(ip + blockSize - cctx->base) - maxDist;
+ if (cctx->lowLimit < newLowLimit)
+ cctx->lowLimit = newLowLimit;
+ if (cctx->dictLimit < cctx->lowLimit)
+ cctx->dictLimit = cctx->lowLimit;
+ }
+
+ cSize = ZSTD_compressBlock_internal(cctx, op + ZSTD_blockHeaderSize, dstCapacity - ZSTD_blockHeaderSize, ip, blockSize);
+ if (ZSTD_isError(cSize))
+ return cSize;
+
+ if (cSize == 0) { /* block is not compressible */
+ U32 const cBlockHeader24 = lastBlock + (((U32)bt_raw) << 1) + (U32)(blockSize << 3);
+ if (blockSize + ZSTD_blockHeaderSize > dstCapacity)
+ return ERROR(dstSize_tooSmall);
+ ZSTD_writeLE32(op, cBlockHeader24); /* no pb, 4th byte will be overwritten */
+ memcpy(op + ZSTD_blockHeaderSize, ip, blockSize);
+ cSize = ZSTD_blockHeaderSize + blockSize;
+ } else {
+ U32 const cBlockHeader24 = lastBlock + (((U32)bt_compressed) << 1) + (U32)(cSize << 3);
+ ZSTD_writeLE24(op, cBlockHeader24);
+ cSize += ZSTD_blockHeaderSize;
+ }
+
+ remaining -= blockSize;
+ dstCapacity -= cSize;
+ ip += blockSize;
+ op += cSize;
+ }
+
+ if (lastFrameChunk && (op > ostart))
+ cctx->stage = ZSTDcs_ending;
+ return op - ostart;
+}
+
+static size_t ZSTD_writeFrameHeader(void *dst, size_t dstCapacity, ZSTD_parameters params, U64 pledgedSrcSize, U32 dictID)
+{
+ BYTE *const op = (BYTE *)dst;
+ U32 const dictIDSizeCode = (dictID > 0) + (dictID >= 256) + (dictID >= 65536); /* 0-3 */
+ U32 const checksumFlag = params.fParams.checksumFlag > 0;
+ U32 const windowSize = 1U << params.cParams.windowLog;
+ U32 const singleSegment = params.fParams.contentSizeFlag && (windowSize >= pledgedSrcSize);
+ BYTE const windowLogByte = (BYTE)((params.cParams.windowLog - ZSTD_WINDOWLOG_ABSOLUTEMIN) << 3);
+ U32 const fcsCode =
+ params.fParams.contentSizeFlag ? (pledgedSrcSize >= 256) + (pledgedSrcSize >= 65536 + 256) + (pledgedSrcSize >= 0xFFFFFFFFU) : 0; /* 0-3 */
+ BYTE const frameHeaderDecriptionByte = (BYTE)(dictIDSizeCode + (checksumFlag << 2) + (singleSegment << 5) + (fcsCode << 6));
+ size_t pos;
+
+ if (dstCapacity < ZSTD_frameHeaderSize_max)
+ return ERROR(dstSize_tooSmall);
+
+ ZSTD_writeLE32(dst, ZSTD_MAGICNUMBER);
+ op[4] = frameHeaderDecriptionByte;
+ pos = 5;
+ if (!singleSegment)
+ op[pos++] = windowLogByte;
+ switch (dictIDSizeCode) {
+ default: /* impossible */
+ case 0: break;
+ case 1:
+ op[pos] = (BYTE)(dictID);
+ pos++;
+ break;
+ case 2:
+ ZSTD_writeLE16(op + pos, (U16)dictID);
+ pos += 2;
+ break;
+ case 3:
+ ZSTD_writeLE32(op + pos, dictID);
+ pos += 4;
+ break;
+ }
+ switch (fcsCode) {
+ default: /* impossible */
+ case 0:
+ if (singleSegment)
+ op[pos++] = (BYTE)(pledgedSrcSize);
+ break;
+ case 1:
+ ZSTD_writeLE16(op + pos, (U16)(pledgedSrcSize - 256));
+ pos += 2;
+ break;
+ case 2:
+ ZSTD_writeLE32(op + pos, (U32)(pledgedSrcSize));
+ pos += 4;
+ break;
+ case 3:
+ ZSTD_writeLE64(op + pos, (U64)(pledgedSrcSize));
+ pos += 8;
+ break;
+ }
+ return pos;
+}
+
+static size_t ZSTD_compressContinue_internal(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, U32 frame, U32 lastFrameChunk)
+{
+ const BYTE *const ip = (const BYTE *)src;
+ size_t fhSize = 0;
+
+ if (cctx->stage == ZSTDcs_created)
+ return ERROR(stage_wrong); /* missing init (ZSTD_compressBegin) */
+
+ if (frame && (cctx->stage == ZSTDcs_init)) {
+ fhSize = ZSTD_writeFrameHeader(dst, dstCapacity, cctx->params, cctx->frameContentSize, cctx->dictID);
+ if (ZSTD_isError(fhSize))
+ return fhSize;
+ dstCapacity -= fhSize;
+ dst = (char *)dst + fhSize;
+ cctx->stage = ZSTDcs_ongoing;
+ }
+
+ /* Check if blocks follow each other */
+ if (src != cctx->nextSrc) {
+ /* not contiguous */
+ ptrdiff_t const delta = cctx->nextSrc - ip;
+ cctx->lowLimit = cctx->dictLimit;
+ cctx->dictLimit = (U32)(cctx->nextSrc - cctx->base);
+ cctx->dictBase = cctx->base;
+ cctx->base -= delta;
+ cctx->nextToUpdate = cctx->dictLimit;
+ if (cctx->dictLimit - cctx->lowLimit < HASH_READ_SIZE)
+ cctx->lowLimit = cctx->dictLimit; /* too small extDict */
+ }
+
+ /* if input and dictionary overlap : reduce dictionary (area presumed modified by input) */
+ if ((ip + srcSize > cctx->dictBase + cctx->lowLimit) & (ip < cctx->dictBase + cctx->dictLimit)) {
+ ptrdiff_t const highInputIdx = (ip + srcSize) - cctx->dictBase;
+ U32 const lowLimitMax = (highInputIdx > (ptrdiff_t)cctx->dictLimit) ? cctx->dictLimit : (U32)highInputIdx;
+ cctx->lowLimit = lowLimitMax;
+ }
+
+ cctx->nextSrc = ip + srcSize;
+
+ if (srcSize) {
+ size_t const cSize = frame ? ZSTD_compress_generic(cctx, dst, dstCapacity, src, srcSize, lastFrameChunk)
+ : ZSTD_compressBlock_internal(cctx, dst, dstCapacity, src, srcSize);
+ if (ZSTD_isError(cSize))
+ return cSize;
+ return cSize + fhSize;
+ } else
+ return fhSize;
+}
+
+size_t ZSTD_compressContinue(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ return ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 1, 0);
+}
+
+size_t ZSTD_getBlockSizeMax(ZSTD_CCtx *cctx) { return MIN(ZSTD_BLOCKSIZE_ABSOLUTEMAX, 1 << cctx->params.cParams.windowLog); }
+
+size_t ZSTD_compressBlock(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ size_t const blockSizeMax = ZSTD_getBlockSizeMax(cctx);
+ if (srcSize > blockSizeMax)
+ return ERROR(srcSize_wrong);
+ return ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 0, 0);
+}
+
+/*! ZSTD_loadDictionaryContent() :
+ * @return : 0, or an error code
+ */
+static size_t ZSTD_loadDictionaryContent(ZSTD_CCtx *zc, const void *src, size_t srcSize)
+{
+ const BYTE *const ip = (const BYTE *)src;
+ const BYTE *const iend = ip + srcSize;
+
+ /* input becomes curr prefix */
+ zc->lowLimit = zc->dictLimit;
+ zc->dictLimit = (U32)(zc->nextSrc - zc->base);
+ zc->dictBase = zc->base;
+ zc->base += ip - zc->nextSrc;
+ zc->nextToUpdate = zc->dictLimit;
+ zc->loadedDictEnd = zc->forceWindow ? 0 : (U32)(iend - zc->base);
+
+ zc->nextSrc = iend;
+ if (srcSize <= HASH_READ_SIZE)
+ return 0;
+
+ switch (zc->params.cParams.strategy) {
+ case ZSTD_fast: ZSTD_fillHashTable(zc, iend, zc->params.cParams.searchLength); break;
+
+ case ZSTD_dfast: ZSTD_fillDoubleHashTable(zc, iend, zc->params.cParams.searchLength); break;
+
+ case ZSTD_greedy:
+ case ZSTD_lazy:
+ case ZSTD_lazy2:
+ if (srcSize >= HASH_READ_SIZE)
+ ZSTD_insertAndFindFirstIndex(zc, iend - HASH_READ_SIZE, zc->params.cParams.searchLength);
+ break;
+
+ case ZSTD_btlazy2:
+ case ZSTD_btopt:
+ case ZSTD_btopt2:
+ if (srcSize >= HASH_READ_SIZE)
+ ZSTD_updateTree(zc, iend - HASH_READ_SIZE, iend, 1 << zc->params.cParams.searchLog, zc->params.cParams.searchLength);
+ break;
+
+ default:
+ return ERROR(GENERIC); /* strategy doesn't exist; impossible */
+ }
+
+ zc->nextToUpdate = (U32)(iend - zc->base);
+ return 0;
+}
+
+/* Dictionaries that assign zero probability to symbols that show up causes problems
+ when FSE encoding. Refuse dictionaries that assign zero probability to symbols
+ that we may encounter during compression.
+ NOTE: This behavior is not standard and could be improved in the future. */
+static size_t ZSTD_checkDictNCount(short *normalizedCounter, unsigned dictMaxSymbolValue, unsigned maxSymbolValue)
+{
+ U32 s;
+ if (dictMaxSymbolValue < maxSymbolValue)
+ return ERROR(dictionary_corrupted);
+ for (s = 0; s <= maxSymbolValue; ++s) {
+ if (normalizedCounter[s] == 0)
+ return ERROR(dictionary_corrupted);
+ }
+ return 0;
+}
+
+/* Dictionary format :
+ * See :
+ * https://github.com/facebook/zstd/blob/master/doc/zstd_compression_format.md#dictionary-format
+ */
+/*! ZSTD_loadZstdDictionary() :
+ * @return : 0, or an error code
+ * assumptions : magic number supposed already checked
+ * dictSize supposed > 8
+ */
+static size_t ZSTD_loadZstdDictionary(ZSTD_CCtx *cctx, const void *dict, size_t dictSize)
+{
+ const BYTE *dictPtr = (const BYTE *)dict;
+ const BYTE *const dictEnd = dictPtr + dictSize;
+ short offcodeNCount[MaxOff + 1];
+ unsigned offcodeMaxValue = MaxOff;
+
+ dictPtr += 4; /* skip magic number */
+ cctx->dictID = cctx->params.fParams.noDictIDFlag ? 0 : ZSTD_readLE32(dictPtr);
+ dictPtr += 4;
+
+ {
+ size_t const hufHeaderSize = HUF_readCTable_wksp(cctx->hufTable, 255, dictPtr, dictEnd - dictPtr, cctx->tmpCounters, sizeof(cctx->tmpCounters));
+ if (HUF_isError(hufHeaderSize))
+ return ERROR(dictionary_corrupted);
+ dictPtr += hufHeaderSize;
+ }
+
+ {
+ unsigned offcodeLog;
+ size_t const offcodeHeaderSize = FSE_readNCount(offcodeNCount, &offcodeMaxValue, &offcodeLog, dictPtr, dictEnd - dictPtr);
+ if (FSE_isError(offcodeHeaderSize))
+ return ERROR(dictionary_corrupted);
+ if (offcodeLog > OffFSELog)
+ return ERROR(dictionary_corrupted);
+ /* Defer checking offcodeMaxValue because we need to know the size of the dictionary content */
+ CHECK_E(FSE_buildCTable_wksp(cctx->offcodeCTable, offcodeNCount, offcodeMaxValue, offcodeLog, cctx->tmpCounters, sizeof(cctx->tmpCounters)),
+ dictionary_corrupted);
+ dictPtr += offcodeHeaderSize;
+ }
+
+ {
+ short matchlengthNCount[MaxML + 1];
+ unsigned matchlengthMaxValue = MaxML, matchlengthLog;
+ size_t const matchlengthHeaderSize = FSE_readNCount(matchlengthNCount, &matchlengthMaxValue, &matchlengthLog, dictPtr, dictEnd - dictPtr);
+ if (FSE_isError(matchlengthHeaderSize))
+ return ERROR(dictionary_corrupted);
+ if (matchlengthLog > MLFSELog)
+ return ERROR(dictionary_corrupted);
+ /* Every match length code must have non-zero probability */
+ CHECK_F(ZSTD_checkDictNCount(matchlengthNCount, matchlengthMaxValue, MaxML));
+ CHECK_E(
+ FSE_buildCTable_wksp(cctx->matchlengthCTable, matchlengthNCount, matchlengthMaxValue, matchlengthLog, cctx->tmpCounters, sizeof(cctx->tmpCounters)),
+ dictionary_corrupted);
+ dictPtr += matchlengthHeaderSize;
+ }
+
+ {
+ short litlengthNCount[MaxLL + 1];
+ unsigned litlengthMaxValue = MaxLL, litlengthLog;
+ size_t const litlengthHeaderSize = FSE_readNCount(litlengthNCount, &litlengthMaxValue, &litlengthLog, dictPtr, dictEnd - dictPtr);
+ if (FSE_isError(litlengthHeaderSize))
+ return ERROR(dictionary_corrupted);
+ if (litlengthLog > LLFSELog)
+ return ERROR(dictionary_corrupted);
+ /* Every literal length code must have non-zero probability */
+ CHECK_F(ZSTD_checkDictNCount(litlengthNCount, litlengthMaxValue, MaxLL));
+ CHECK_E(FSE_buildCTable_wksp(cctx->litlengthCTable, litlengthNCount, litlengthMaxValue, litlengthLog, cctx->tmpCounters, sizeof(cctx->tmpCounters)),
+ dictionary_corrupted);
+ dictPtr += litlengthHeaderSize;
+ }
+
+ if (dictPtr + 12 > dictEnd)
+ return ERROR(dictionary_corrupted);
+ cctx->rep[0] = ZSTD_readLE32(dictPtr + 0);
+ cctx->rep[1] = ZSTD_readLE32(dictPtr + 4);
+ cctx->rep[2] = ZSTD_readLE32(dictPtr + 8);
+ dictPtr += 12;
+
+ {
+ size_t const dictContentSize = (size_t)(dictEnd - dictPtr);
+ U32 offcodeMax = MaxOff;
+ if (dictContentSize <= ((U32)-1) - 128 KB) {
+ U32 const maxOffset = (U32)dictContentSize + 128 KB; /* The maximum offset that must be supported */
+ offcodeMax = ZSTD_highbit32(maxOffset); /* Calculate minimum offset code required to represent maxOffset */
+ }
+ /* All offset values <= dictContentSize + 128 KB must be representable */
+ CHECK_F(ZSTD_checkDictNCount(offcodeNCount, offcodeMaxValue, MIN(offcodeMax, MaxOff)));
+ /* All repCodes must be <= dictContentSize and != 0*/
+ {
+ U32 u;
+ for (u = 0; u < 3; u++) {
+ if (cctx->rep[u] == 0)
+ return ERROR(dictionary_corrupted);
+ if (cctx->rep[u] > dictContentSize)
+ return ERROR(dictionary_corrupted);
+ }
+ }
+
+ cctx->flagStaticTables = 1;
+ cctx->flagStaticHufTable = HUF_repeat_valid;
+ return ZSTD_loadDictionaryContent(cctx, dictPtr, dictContentSize);
+ }
+}
+
+/** ZSTD_compress_insertDictionary() :
+* @return : 0, or an error code */
+static size_t ZSTD_compress_insertDictionary(ZSTD_CCtx *cctx, const void *dict, size_t dictSize)
+{
+ if ((dict == NULL) || (dictSize <= 8))
+ return 0;
+
+ /* dict as pure content */
+ if ((ZSTD_readLE32(dict) != ZSTD_DICT_MAGIC) || (cctx->forceRawDict))
+ return ZSTD_loadDictionaryContent(cctx, dict, dictSize);
+
+ /* dict as zstd dictionary */
+ return ZSTD_loadZstdDictionary(cctx, dict, dictSize);
+}
+
+/*! ZSTD_compressBegin_internal() :
+* @return : 0, or an error code */
+static size_t ZSTD_compressBegin_internal(ZSTD_CCtx *cctx, const void *dict, size_t dictSize, ZSTD_parameters params, U64 pledgedSrcSize)
+{
+ ZSTD_compResetPolicy_e const crp = dictSize ? ZSTDcrp_fullReset : ZSTDcrp_continue;
+ CHECK_F(ZSTD_resetCCtx_advanced(cctx, params, pledgedSrcSize, crp));
+ return ZSTD_compress_insertDictionary(cctx, dict, dictSize);
+}
+
+/*! ZSTD_compressBegin_advanced() :
+* @return : 0, or an error code */
+size_t ZSTD_compressBegin_advanced(ZSTD_CCtx *cctx, const void *dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize)
+{
+ /* compression parameters verification and optimization */
+ CHECK_F(ZSTD_checkCParams(params.cParams));
+ return ZSTD_compressBegin_internal(cctx, dict, dictSize, params, pledgedSrcSize);
+}
+
+size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx *cctx, const void *dict, size_t dictSize, int compressionLevel)
+{
+ ZSTD_parameters const params = ZSTD_getParams(compressionLevel, 0, dictSize);
+ return ZSTD_compressBegin_internal(cctx, dict, dictSize, params, 0);
+}
+
+size_t ZSTD_compressBegin(ZSTD_CCtx *cctx, int compressionLevel) { return ZSTD_compressBegin_usingDict(cctx, NULL, 0, compressionLevel); }
+
+/*! ZSTD_writeEpilogue() :
+* Ends a frame.
+* @return : nb of bytes written into dst (or an error code) */
+static size_t ZSTD_writeEpilogue(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity)
+{
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *op = ostart;
+ size_t fhSize = 0;
+
+ if (cctx->stage == ZSTDcs_created)
+ return ERROR(stage_wrong); /* init missing */
+
+ /* special case : empty frame */
+ if (cctx->stage == ZSTDcs_init) {
+ fhSize = ZSTD_writeFrameHeader(dst, dstCapacity, cctx->params, 0, 0);
+ if (ZSTD_isError(fhSize))
+ return fhSize;
+ dstCapacity -= fhSize;
+ op += fhSize;
+ cctx->stage = ZSTDcs_ongoing;
+ }
+
+ if (cctx->stage != ZSTDcs_ending) {
+ /* write one last empty block, make it the "last" block */
+ U32 const cBlockHeader24 = 1 /* last block */ + (((U32)bt_raw) << 1) + 0;
+ if (dstCapacity < 4)
+ return ERROR(dstSize_tooSmall);
+ ZSTD_writeLE32(op, cBlockHeader24);
+ op += ZSTD_blockHeaderSize;
+ dstCapacity -= ZSTD_blockHeaderSize;
+ }
+
+ if (cctx->params.fParams.checksumFlag) {
+ U32 const checksum = (U32)xxh64_digest(&cctx->xxhState);
+ if (dstCapacity < 4)
+ return ERROR(dstSize_tooSmall);
+ ZSTD_writeLE32(op, checksum);
+ op += 4;
+ }
+
+ cctx->stage = ZSTDcs_created; /* return to "created but no init" status */
+ return op - ostart;
+}
+
+size_t ZSTD_compressEnd(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ size_t endResult;
+ size_t const cSize = ZSTD_compressContinue_internal(cctx, dst, dstCapacity, src, srcSize, 1, 1);
+ if (ZSTD_isError(cSize))
+ return cSize;
+ endResult = ZSTD_writeEpilogue(cctx, (char *)dst + cSize, dstCapacity - cSize);
+ if (ZSTD_isError(endResult))
+ return endResult;
+ return cSize + endResult;
+}
+
+static size_t ZSTD_compress_internal(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const void *dict, size_t dictSize,
+ ZSTD_parameters params)
+{
+ CHECK_F(ZSTD_compressBegin_internal(cctx, dict, dictSize, params, srcSize));
+ return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize);
+}
+
+size_t ZSTD_compress_usingDict(ZSTD_CCtx *ctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const void *dict, size_t dictSize,
+ ZSTD_parameters params)
+{
+ return ZSTD_compress_internal(ctx, dst, dstCapacity, src, srcSize, dict, dictSize, params);
+}
+
+size_t ZSTD_compressCCtx(ZSTD_CCtx *ctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, ZSTD_parameters params)
+{
+ return ZSTD_compress_internal(ctx, dst, dstCapacity, src, srcSize, NULL, 0, params);
+}
+
+/* ===== Dictionary API ===== */
+
+struct ZSTD_CDict_s {
+ void *dictBuffer;
+ const void *dictContent;
+ size_t dictContentSize;
+ ZSTD_CCtx *refContext;
+}; /* typedef'd tp ZSTD_CDict within "zstd.h" */
+
+size_t ZSTD_CDictWorkspaceBound(ZSTD_compressionParameters cParams) { return ZSTD_CCtxWorkspaceBound(cParams) + ZSTD_ALIGN(sizeof(ZSTD_CDict)); }
+
+static ZSTD_CDict *ZSTD_createCDict_advanced(const void *dictBuffer, size_t dictSize, unsigned byReference, ZSTD_parameters params, ZSTD_customMem customMem)
+{
+ if (!customMem.customAlloc || !customMem.customFree)
+ return NULL;
+
+ {
+ ZSTD_CDict *const cdict = (ZSTD_CDict *)ZSTD_malloc(sizeof(ZSTD_CDict), customMem);
+ ZSTD_CCtx *const cctx = ZSTD_createCCtx_advanced(customMem);
+
+ if (!cdict || !cctx) {
+ ZSTD_free(cdict, customMem);
+ ZSTD_freeCCtx(cctx);
+ return NULL;
+ }
+
+ if ((byReference) || (!dictBuffer) || (!dictSize)) {
+ cdict->dictBuffer = NULL;
+ cdict->dictContent = dictBuffer;
+ } else {
+ void *const internalBuffer = ZSTD_malloc(dictSize, customMem);
+ if (!internalBuffer) {
+ ZSTD_free(cctx, customMem);
+ ZSTD_free(cdict, customMem);
+ return NULL;
+ }
+ memcpy(internalBuffer, dictBuffer, dictSize);
+ cdict->dictBuffer = internalBuffer;
+ cdict->dictContent = internalBuffer;
+ }
+
+ {
+ size_t const errorCode = ZSTD_compressBegin_advanced(cctx, cdict->dictContent, dictSize, params, 0);
+ if (ZSTD_isError(errorCode)) {
+ ZSTD_free(cdict->dictBuffer, customMem);
+ ZSTD_free(cdict, customMem);
+ ZSTD_freeCCtx(cctx);
+ return NULL;
+ }
+ }
+
+ cdict->refContext = cctx;
+ cdict->dictContentSize = dictSize;
+ return cdict;
+ }
+}
+
+ZSTD_CDict *ZSTD_initCDict(const void *dict, size_t dictSize, ZSTD_parameters params, void *workspace, size_t workspaceSize)
+{
+ ZSTD_customMem const stackMem = ZSTD_initStack(workspace, workspaceSize);
+ return ZSTD_createCDict_advanced(dict, dictSize, 1, params, stackMem);
+}
+
+size_t ZSTD_freeCDict(ZSTD_CDict *cdict)
+{
+ if (cdict == NULL)
+ return 0; /* support free on NULL */
+ {
+ ZSTD_customMem const cMem = cdict->refContext->customMem;
+ ZSTD_freeCCtx(cdict->refContext);
+ ZSTD_free(cdict->dictBuffer, cMem);
+ ZSTD_free(cdict, cMem);
+ return 0;
+ }
+}
+
+static ZSTD_parameters ZSTD_getParamsFromCDict(const ZSTD_CDict *cdict) { return ZSTD_getParamsFromCCtx(cdict->refContext); }
+
+size_t ZSTD_compressBegin_usingCDict(ZSTD_CCtx *cctx, const ZSTD_CDict *cdict, unsigned long long pledgedSrcSize)
+{
+ if (cdict->dictContentSize)
+ CHECK_F(ZSTD_copyCCtx(cctx, cdict->refContext, pledgedSrcSize))
+ else {
+ ZSTD_parameters params = cdict->refContext->params;
+ params.fParams.contentSizeFlag = (pledgedSrcSize > 0);
+ CHECK_F(ZSTD_compressBegin_advanced(cctx, NULL, 0, params, pledgedSrcSize));
+ }
+ return 0;
+}
+
+/*! ZSTD_compress_usingCDict() :
+* Compression using a digested Dictionary.
+* Faster startup than ZSTD_compress_usingDict(), recommended when same dictionary is used multiple times.
+* Note that compression level is decided during dictionary creation */
+size_t ZSTD_compress_usingCDict(ZSTD_CCtx *cctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const ZSTD_CDict *cdict)
+{
+ CHECK_F(ZSTD_compressBegin_usingCDict(cctx, cdict, srcSize));
+
+ if (cdict->refContext->params.fParams.contentSizeFlag == 1) {
+ cctx->params.fParams.contentSizeFlag = 1;
+ cctx->frameContentSize = srcSize;
+ } else {
+ cctx->params.fParams.contentSizeFlag = 0;
+ }
+
+ return ZSTD_compressEnd(cctx, dst, dstCapacity, src, srcSize);
+}
+
+/* ******************************************************************
+* Streaming
+********************************************************************/
+
+typedef enum { zcss_init, zcss_load, zcss_flush, zcss_final } ZSTD_cStreamStage;
+
+struct ZSTD_CStream_s {
+ ZSTD_CCtx *cctx;
+ ZSTD_CDict *cdictLocal;
+ const ZSTD_CDict *cdict;
+ char *inBuff;
+ size_t inBuffSize;
+ size_t inToCompress;
+ size_t inBuffPos;
+ size_t inBuffTarget;
+ size_t blockSize;
+ char *outBuff;
+ size_t outBuffSize;
+ size_t outBuffContentSize;
+ size_t outBuffFlushedSize;
+ ZSTD_cStreamStage stage;
+ U32 checksum;
+ U32 frameEnded;
+ U64 pledgedSrcSize;
+ U64 inputProcessed;
+ ZSTD_parameters params;
+ ZSTD_customMem customMem;
+}; /* typedef'd to ZSTD_CStream within "zstd.h" */
+
+size_t ZSTD_CStreamWorkspaceBound(ZSTD_compressionParameters cParams)
+{
+ size_t const inBuffSize = (size_t)1 << cParams.windowLog;
+ size_t const blockSize = MIN(ZSTD_BLOCKSIZE_ABSOLUTEMAX, inBuffSize);
+ size_t const outBuffSize = ZSTD_compressBound(blockSize) + 1;
+
+ return ZSTD_CCtxWorkspaceBound(cParams) + ZSTD_ALIGN(sizeof(ZSTD_CStream)) + ZSTD_ALIGN(inBuffSize) + ZSTD_ALIGN(outBuffSize);
+}
+
+ZSTD_CStream *ZSTD_createCStream_advanced(ZSTD_customMem customMem)
+{
+ ZSTD_CStream *zcs;
+
+ if (!customMem.customAlloc || !customMem.customFree)
+ return NULL;
+
+ zcs = (ZSTD_CStream *)ZSTD_malloc(sizeof(ZSTD_CStream), customMem);
+ if (zcs == NULL)
+ return NULL;
+ memset(zcs, 0, sizeof(ZSTD_CStream));
+ memcpy(&zcs->customMem, &customMem, sizeof(ZSTD_customMem));
+ zcs->cctx = ZSTD_createCCtx_advanced(customMem);
+ if (zcs->cctx == NULL) {
+ ZSTD_freeCStream(zcs);
+ return NULL;
+ }
+ return zcs;
+}
+
+size_t ZSTD_freeCStream(ZSTD_CStream *zcs)
+{
+ if (zcs == NULL)
+ return 0; /* support free on NULL */
+ {
+ ZSTD_customMem const cMem = zcs->customMem;
+ ZSTD_freeCCtx(zcs->cctx);
+ zcs->cctx = NULL;
+ ZSTD_freeCDict(zcs->cdictLocal);
+ zcs->cdictLocal = NULL;
+ ZSTD_free(zcs->inBuff, cMem);
+ zcs->inBuff = NULL;
+ ZSTD_free(zcs->outBuff, cMem);
+ zcs->outBuff = NULL;
+ ZSTD_free(zcs, cMem);
+ return 0;
+ }
+}
+
+/*====== Initialization ======*/
+
+size_t ZSTD_CStreamInSize(void) { return ZSTD_BLOCKSIZE_ABSOLUTEMAX; }
+size_t ZSTD_CStreamOutSize(void) { return ZSTD_compressBound(ZSTD_BLOCKSIZE_ABSOLUTEMAX) + ZSTD_blockHeaderSize + 4 /* 32-bits hash */; }
+
+static size_t ZSTD_resetCStream_internal(ZSTD_CStream *zcs, unsigned long long pledgedSrcSize)
+{
+ if (zcs->inBuffSize == 0)
+ return ERROR(stage_wrong); /* zcs has not been init at least once => can't reset */
+
+ if (zcs->cdict)
+ CHECK_F(ZSTD_compressBegin_usingCDict(zcs->cctx, zcs->cdict, pledgedSrcSize))
+ else
+ CHECK_F(ZSTD_compressBegin_advanced(zcs->cctx, NULL, 0, zcs->params, pledgedSrcSize));
+
+ zcs->inToCompress = 0;
+ zcs->inBuffPos = 0;
+ zcs->inBuffTarget = zcs->blockSize;
+ zcs->outBuffContentSize = zcs->outBuffFlushedSize = 0;
+ zcs->stage = zcss_load;
+ zcs->frameEnded = 0;
+ zcs->pledgedSrcSize = pledgedSrcSize;
+ zcs->inputProcessed = 0;
+ return 0; /* ready to go */
+}
+
+size_t ZSTD_resetCStream(ZSTD_CStream *zcs, unsigned long long pledgedSrcSize)
+{
+
+ zcs->params.fParams.contentSizeFlag = (pledgedSrcSize > 0);
+
+ return ZSTD_resetCStream_internal(zcs, pledgedSrcSize);
+}
+
+static size_t ZSTD_initCStream_advanced(ZSTD_CStream *zcs, const void *dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize)
+{
+ /* allocate buffers */
+ {
+ size_t const neededInBuffSize = (size_t)1 << params.cParams.windowLog;
+ if (zcs->inBuffSize < neededInBuffSize) {
+ zcs->inBuffSize = neededInBuffSize;
+ ZSTD_free(zcs->inBuff, zcs->customMem);
+ zcs->inBuff = (char *)ZSTD_malloc(neededInBuffSize, zcs->customMem);
+ if (zcs->inBuff == NULL)
+ return ERROR(memory_allocation);
+ }
+ zcs->blockSize = MIN(ZSTD_BLOCKSIZE_ABSOLUTEMAX, neededInBuffSize);
+ }
+ if (zcs->outBuffSize < ZSTD_compressBound(zcs->blockSize) + 1) {
+ zcs->outBuffSize = ZSTD_compressBound(zcs->blockSize) + 1;
+ ZSTD_free(zcs->outBuff, zcs->customMem);
+ zcs->outBuff = (char *)ZSTD_malloc(zcs->outBuffSize, zcs->customMem);
+ if (zcs->outBuff == NULL)
+ return ERROR(memory_allocation);
+ }
+
+ if (dict && dictSize >= 8) {
+ ZSTD_freeCDict(zcs->cdictLocal);
+ zcs->cdictLocal = ZSTD_createCDict_advanced(dict, dictSize, 0, params, zcs->customMem);
+ if (zcs->cdictLocal == NULL)
+ return ERROR(memory_allocation);
+ zcs->cdict = zcs->cdictLocal;
+ } else
+ zcs->cdict = NULL;
+
+ zcs->checksum = params.fParams.checksumFlag > 0;
+ zcs->params = params;
+
+ return ZSTD_resetCStream_internal(zcs, pledgedSrcSize);
+}
+
+ZSTD_CStream *ZSTD_initCStream(ZSTD_parameters params, unsigned long long pledgedSrcSize, void *workspace, size_t workspaceSize)
+{
+ ZSTD_customMem const stackMem = ZSTD_initStack(workspace, workspaceSize);
+ ZSTD_CStream *const zcs = ZSTD_createCStream_advanced(stackMem);
+ if (zcs) {
+ size_t const code = ZSTD_initCStream_advanced(zcs, NULL, 0, params, pledgedSrcSize);
+ if (ZSTD_isError(code)) {
+ return NULL;
+ }
+ }
+ return zcs;
+}
+
+ZSTD_CStream *ZSTD_initCStream_usingCDict(const ZSTD_CDict *cdict, unsigned long long pledgedSrcSize, void *workspace, size_t workspaceSize)
+{
+ ZSTD_parameters const params = ZSTD_getParamsFromCDict(cdict);
+ ZSTD_CStream *const zcs = ZSTD_initCStream(params, pledgedSrcSize, workspace, workspaceSize);
+ if (zcs) {
+ zcs->cdict = cdict;
+ if (ZSTD_isError(ZSTD_resetCStream_internal(zcs, pledgedSrcSize))) {
+ return NULL;
+ }
+ }
+ return zcs;
+}
+
+/*====== Compression ======*/
+
+typedef enum { zsf_gather, zsf_flush, zsf_end } ZSTD_flush_e;
+
+ZSTD_STATIC size_t ZSTD_limitCopy(void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ size_t const length = MIN(dstCapacity, srcSize);
+ memcpy(dst, src, length);
+ return length;
+}
+
+static size_t ZSTD_compressStream_generic(ZSTD_CStream *zcs, void *dst, size_t *dstCapacityPtr, const void *src, size_t *srcSizePtr, ZSTD_flush_e const flush)
+{
+ U32 someMoreWork = 1;
+ const char *const istart = (const char *)src;
+ const char *const iend = istart + *srcSizePtr;
+ const char *ip = istart;
+ char *const ostart = (char *)dst;
+ char *const oend = ostart + *dstCapacityPtr;
+ char *op = ostart;
+
+ while (someMoreWork) {
+ switch (zcs->stage) {
+ case zcss_init:
+ return ERROR(init_missing); /* call ZBUFF_compressInit() first ! */
+
+ case zcss_load:
+ /* complete inBuffer */
+ {
+ size_t const toLoad = zcs->inBuffTarget - zcs->inBuffPos;
+ size_t const loaded = ZSTD_limitCopy(zcs->inBuff + zcs->inBuffPos, toLoad, ip, iend - ip);
+ zcs->inBuffPos += loaded;
+ ip += loaded;
+ if ((zcs->inBuffPos == zcs->inToCompress) || (!flush && (toLoad != loaded))) {
+ someMoreWork = 0;
+ break; /* not enough input to get a full block : stop there, wait for more */
+ }
+ }
+ /* compress curr block (note : this stage cannot be stopped in the middle) */
+ {
+ void *cDst;
+ size_t cSize;
+ size_t const iSize = zcs->inBuffPos - zcs->inToCompress;
+ size_t oSize = oend - op;
+ if (oSize >= ZSTD_compressBound(iSize))
+ cDst = op; /* compress directly into output buffer (avoid flush stage) */
+ else
+ cDst = zcs->outBuff, oSize = zcs->outBuffSize;
+ cSize = (flush == zsf_end) ? ZSTD_compressEnd(zcs->cctx, cDst, oSize, zcs->inBuff + zcs->inToCompress, iSize)
+ : ZSTD_compressContinue(zcs->cctx, cDst, oSize, zcs->inBuff + zcs->inToCompress, iSize);
+ if (ZSTD_isError(cSize))
+ return cSize;
+ if (flush == zsf_end)
+ zcs->frameEnded = 1;
+ /* prepare next block */
+ zcs->inBuffTarget = zcs->inBuffPos + zcs->blockSize;
+ if (zcs->inBuffTarget > zcs->inBuffSize)
+ zcs->inBuffPos = 0, zcs->inBuffTarget = zcs->blockSize; /* note : inBuffSize >= blockSize */
+ zcs->inToCompress = zcs->inBuffPos;
+ if (cDst == op) {
+ op += cSize;
+ break;
+ } /* no need to flush */
+ zcs->outBuffContentSize = cSize;
+ zcs->outBuffFlushedSize = 0;
+ zcs->stage = zcss_flush; /* pass-through to flush stage */
+ }
+
+ case zcss_flush: {
+ size_t const toFlush = zcs->outBuffContentSize - zcs->outBuffFlushedSize;
+ size_t const flushed = ZSTD_limitCopy(op, oend - op, zcs->outBuff + zcs->outBuffFlushedSize, toFlush);
+ op += flushed;
+ zcs->outBuffFlushedSize += flushed;
+ if (toFlush != flushed) {
+ someMoreWork = 0;
+ break;
+ } /* dst too small to store flushed data : stop there */
+ zcs->outBuffContentSize = zcs->outBuffFlushedSize = 0;
+ zcs->stage = zcss_load;
+ break;
+ }
+
+ case zcss_final:
+ someMoreWork = 0; /* do nothing */
+ break;
+
+ default:
+ return ERROR(GENERIC); /* impossible */
+ }
+ }
+
+ *srcSizePtr = ip - istart;
+ *dstCapacityPtr = op - ostart;
+ zcs->inputProcessed += *srcSizePtr;
+ if (zcs->frameEnded)
+ return 0;
+ {
+ size_t hintInSize = zcs->inBuffTarget - zcs->inBuffPos;
+ if (hintInSize == 0)
+ hintInSize = zcs->blockSize;
+ return hintInSize;
+ }
+}
+
+size_t ZSTD_compressStream(ZSTD_CStream *zcs, ZSTD_outBuffer *output, ZSTD_inBuffer *input)
+{
+ size_t sizeRead = input->size - input->pos;
+ size_t sizeWritten = output->size - output->pos;
+ size_t const result =
+ ZSTD_compressStream_generic(zcs, (char *)(output->dst) + output->pos, &sizeWritten, (const char *)(input->src) + input->pos, &sizeRead, zsf_gather);
+ input->pos += sizeRead;
+ output->pos += sizeWritten;
+ return result;
+}
+
+/*====== Finalize ======*/
+
+/*! ZSTD_flushStream() :
+* @return : amount of data remaining to flush */
+size_t ZSTD_flushStream(ZSTD_CStream *zcs, ZSTD_outBuffer *output)
+{
+ size_t srcSize = 0;
+ size_t sizeWritten = output->size - output->pos;
+ size_t const result = ZSTD_compressStream_generic(zcs, (char *)(output->dst) + output->pos, &sizeWritten, &srcSize,
+ &srcSize, /* use a valid src address instead of NULL */
+ zsf_flush);
+ output->pos += sizeWritten;
+ if (ZSTD_isError(result))
+ return result;
+ return zcs->outBuffContentSize - zcs->outBuffFlushedSize; /* remaining to flush */
+}
+
+size_t ZSTD_endStream(ZSTD_CStream *zcs, ZSTD_outBuffer *output)
+{
+ BYTE *const ostart = (BYTE *)(output->dst) + output->pos;
+ BYTE *const oend = (BYTE *)(output->dst) + output->size;
+ BYTE *op = ostart;
+
+ if ((zcs->pledgedSrcSize) && (zcs->inputProcessed != zcs->pledgedSrcSize))
+ return ERROR(srcSize_wrong); /* pledgedSrcSize not respected */
+
+ if (zcs->stage != zcss_final) {
+ /* flush whatever remains */
+ size_t srcSize = 0;
+ size_t sizeWritten = output->size - output->pos;
+ size_t const notEnded =
+ ZSTD_compressStream_generic(zcs, ostart, &sizeWritten, &srcSize, &srcSize, zsf_end); /* use a valid src address instead of NULL */
+ size_t const remainingToFlush = zcs->outBuffContentSize - zcs->outBuffFlushedSize;
+ op += sizeWritten;
+ if (remainingToFlush) {
+ output->pos += sizeWritten;
+ return remainingToFlush + ZSTD_BLOCKHEADERSIZE /* final empty block */ + (zcs->checksum * 4);
+ }
+ /* create epilogue */
+ zcs->stage = zcss_final;
+ zcs->outBuffContentSize = !notEnded ? 0 : ZSTD_compressEnd(zcs->cctx, zcs->outBuff, zcs->outBuffSize, NULL,
+ 0); /* write epilogue, including final empty block, into outBuff */
+ }
+
+ /* flush epilogue */
+ {
+ size_t const toFlush = zcs->outBuffContentSize - zcs->outBuffFlushedSize;
+ size_t const flushed = ZSTD_limitCopy(op, oend - op, zcs->outBuff + zcs->outBuffFlushedSize, toFlush);
+ op += flushed;
+ zcs->outBuffFlushedSize += flushed;
+ output->pos += op - ostart;
+ if (toFlush == flushed)
+ zcs->stage = zcss_init; /* end reached */
+ return toFlush - flushed;
+ }
+}
+
+/*-===== Pre-defined compression levels =====-*/
+
+#define ZSTD_DEFAULT_CLEVEL 1
+#define ZSTD_MAX_CLEVEL 22
+int ZSTD_maxCLevel(void) { return ZSTD_MAX_CLEVEL; }
+
+static const ZSTD_compressionParameters ZSTD_defaultCParameters[4][ZSTD_MAX_CLEVEL + 1] = {
+ {
+ /* "default" */
+ /* W, C, H, S, L, TL, strat */
+ {18, 12, 12, 1, 7, 16, ZSTD_fast}, /* level 0 - never used */
+ {19, 13, 14, 1, 7, 16, ZSTD_fast}, /* level 1 */
+ {19, 15, 16, 1, 6, 16, ZSTD_fast}, /* level 2 */
+ {20, 16, 17, 1, 5, 16, ZSTD_dfast}, /* level 3.*/
+ {20, 18, 18, 1, 5, 16, ZSTD_dfast}, /* level 4.*/
+ {20, 15, 18, 3, 5, 16, ZSTD_greedy}, /* level 5 */
+ {21, 16, 19, 2, 5, 16, ZSTD_lazy}, /* level 6 */
+ {21, 17, 20, 3, 5, 16, ZSTD_lazy}, /* level 7 */
+ {21, 18, 20, 3, 5, 16, ZSTD_lazy2}, /* level 8 */
+ {21, 20, 20, 3, 5, 16, ZSTD_lazy2}, /* level 9 */
+ {21, 19, 21, 4, 5, 16, ZSTD_lazy2}, /* level 10 */
+ {22, 20, 22, 4, 5, 16, ZSTD_lazy2}, /* level 11 */
+ {22, 20, 22, 5, 5, 16, ZSTD_lazy2}, /* level 12 */
+ {22, 21, 22, 5, 5, 16, ZSTD_lazy2}, /* level 13 */
+ {22, 21, 22, 6, 5, 16, ZSTD_lazy2}, /* level 14 */
+ {22, 21, 21, 5, 5, 16, ZSTD_btlazy2}, /* level 15 */
+ {23, 22, 22, 5, 5, 16, ZSTD_btlazy2}, /* level 16 */
+ {23, 21, 22, 4, 5, 24, ZSTD_btopt}, /* level 17 */
+ {23, 23, 22, 6, 5, 32, ZSTD_btopt}, /* level 18 */
+ {23, 23, 22, 6, 3, 48, ZSTD_btopt}, /* level 19 */
+ {25, 25, 23, 7, 3, 64, ZSTD_btopt2}, /* level 20 */
+ {26, 26, 23, 7, 3, 256, ZSTD_btopt2}, /* level 21 */
+ {27, 27, 25, 9, 3, 512, ZSTD_btopt2}, /* level 22 */
+ },
+ {
+ /* for srcSize <= 256 KB */
+ /* W, C, H, S, L, T, strat */
+ {0, 0, 0, 0, 0, 0, ZSTD_fast}, /* level 0 - not used */
+ {18, 13, 14, 1, 6, 8, ZSTD_fast}, /* level 1 */
+ {18, 14, 13, 1, 5, 8, ZSTD_dfast}, /* level 2 */
+ {18, 16, 15, 1, 5, 8, ZSTD_dfast}, /* level 3 */
+ {18, 15, 17, 1, 5, 8, ZSTD_greedy}, /* level 4.*/
+ {18, 16, 17, 4, 5, 8, ZSTD_greedy}, /* level 5.*/
+ {18, 16, 17, 3, 5, 8, ZSTD_lazy}, /* level 6.*/
+ {18, 17, 17, 4, 4, 8, ZSTD_lazy}, /* level 7 */
+ {18, 17, 17, 4, 4, 8, ZSTD_lazy2}, /* level 8 */
+ {18, 17, 17, 5, 4, 8, ZSTD_lazy2}, /* level 9 */
+ {18, 17, 17, 6, 4, 8, ZSTD_lazy2}, /* level 10 */
+ {18, 18, 17, 6, 4, 8, ZSTD_lazy2}, /* level 11.*/
+ {18, 18, 17, 7, 4, 8, ZSTD_lazy2}, /* level 12.*/
+ {18, 19, 17, 6, 4, 8, ZSTD_btlazy2}, /* level 13 */
+ {18, 18, 18, 4, 4, 16, ZSTD_btopt}, /* level 14.*/
+ {18, 18, 18, 4, 3, 16, ZSTD_btopt}, /* level 15.*/
+ {18, 19, 18, 6, 3, 32, ZSTD_btopt}, /* level 16.*/
+ {18, 19, 18, 8, 3, 64, ZSTD_btopt}, /* level 17.*/
+ {18, 19, 18, 9, 3, 128, ZSTD_btopt}, /* level 18.*/
+ {18, 19, 18, 10, 3, 256, ZSTD_btopt}, /* level 19.*/
+ {18, 19, 18, 11, 3, 512, ZSTD_btopt2}, /* level 20.*/
+ {18, 19, 18, 12, 3, 512, ZSTD_btopt2}, /* level 21.*/
+ {18, 19, 18, 13, 3, 512, ZSTD_btopt2}, /* level 22.*/
+ },
+ {
+ /* for srcSize <= 128 KB */
+ /* W, C, H, S, L, T, strat */
+ {17, 12, 12, 1, 7, 8, ZSTD_fast}, /* level 0 - not used */
+ {17, 12, 13, 1, 6, 8, ZSTD_fast}, /* level 1 */
+ {17, 13, 16, 1, 5, 8, ZSTD_fast}, /* level 2 */
+ {17, 16, 16, 2, 5, 8, ZSTD_dfast}, /* level 3 */
+ {17, 13, 15, 3, 4, 8, ZSTD_greedy}, /* level 4 */
+ {17, 15, 17, 4, 4, 8, ZSTD_greedy}, /* level 5 */
+ {17, 16, 17, 3, 4, 8, ZSTD_lazy}, /* level 6 */
+ {17, 15, 17, 4, 4, 8, ZSTD_lazy2}, /* level 7 */
+ {17, 17, 17, 4, 4, 8, ZSTD_lazy2}, /* level 8 */
+ {17, 17, 17, 5, 4, 8, ZSTD_lazy2}, /* level 9 */
+ {17, 17, 17, 6, 4, 8, ZSTD_lazy2}, /* level 10 */
+ {17, 17, 17, 7, 4, 8, ZSTD_lazy2}, /* level 11 */
+ {17, 17, 17, 8, 4, 8, ZSTD_lazy2}, /* level 12 */
+ {17, 18, 17, 6, 4, 8, ZSTD_btlazy2}, /* level 13.*/
+ {17, 17, 17, 7, 3, 8, ZSTD_btopt}, /* level 14.*/
+ {17, 17, 17, 7, 3, 16, ZSTD_btopt}, /* level 15.*/
+ {17, 18, 17, 7, 3, 32, ZSTD_btopt}, /* level 16.*/
+ {17, 18, 17, 7, 3, 64, ZSTD_btopt}, /* level 17.*/
+ {17, 18, 17, 7, 3, 256, ZSTD_btopt}, /* level 18.*/
+ {17, 18, 17, 8, 3, 256, ZSTD_btopt}, /* level 19.*/
+ {17, 18, 17, 9, 3, 256, ZSTD_btopt2}, /* level 20.*/
+ {17, 18, 17, 10, 3, 256, ZSTD_btopt2}, /* level 21.*/
+ {17, 18, 17, 11, 3, 512, ZSTD_btopt2}, /* level 22.*/
+ },
+ {
+ /* for srcSize <= 16 KB */
+ /* W, C, H, S, L, T, strat */
+ {14, 12, 12, 1, 7, 6, ZSTD_fast}, /* level 0 - not used */
+ {14, 14, 14, 1, 6, 6, ZSTD_fast}, /* level 1 */
+ {14, 14, 14, 1, 4, 6, ZSTD_fast}, /* level 2 */
+ {14, 14, 14, 1, 4, 6, ZSTD_dfast}, /* level 3.*/
+ {14, 14, 14, 4, 4, 6, ZSTD_greedy}, /* level 4.*/
+ {14, 14, 14, 3, 4, 6, ZSTD_lazy}, /* level 5.*/
+ {14, 14, 14, 4, 4, 6, ZSTD_lazy2}, /* level 6 */
+ {14, 14, 14, 5, 4, 6, ZSTD_lazy2}, /* level 7 */
+ {14, 14, 14, 6, 4, 6, ZSTD_lazy2}, /* level 8.*/
+ {14, 15, 14, 6, 4, 6, ZSTD_btlazy2}, /* level 9.*/
+ {14, 15, 14, 3, 3, 6, ZSTD_btopt}, /* level 10.*/
+ {14, 15, 14, 6, 3, 8, ZSTD_btopt}, /* level 11.*/
+ {14, 15, 14, 6, 3, 16, ZSTD_btopt}, /* level 12.*/
+ {14, 15, 14, 6, 3, 24, ZSTD_btopt}, /* level 13.*/
+ {14, 15, 15, 6, 3, 48, ZSTD_btopt}, /* level 14.*/
+ {14, 15, 15, 6, 3, 64, ZSTD_btopt}, /* level 15.*/
+ {14, 15, 15, 6, 3, 96, ZSTD_btopt}, /* level 16.*/
+ {14, 15, 15, 6, 3, 128, ZSTD_btopt}, /* level 17.*/
+ {14, 15, 15, 6, 3, 256, ZSTD_btopt}, /* level 18.*/
+ {14, 15, 15, 7, 3, 256, ZSTD_btopt}, /* level 19.*/
+ {14, 15, 15, 8, 3, 256, ZSTD_btopt2}, /* level 20.*/
+ {14, 15, 15, 9, 3, 256, ZSTD_btopt2}, /* level 21.*/
+ {14, 15, 15, 10, 3, 256, ZSTD_btopt2}, /* level 22.*/
+ },
+};
+
+/*! ZSTD_getCParams() :
+* @return ZSTD_compressionParameters structure for a selected compression level, `srcSize` and `dictSize`.
+* Size values are optional, provide 0 if not known or unused */
+ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long long srcSize, size_t dictSize)
+{
+ ZSTD_compressionParameters cp;
+ size_t const addedSize = srcSize ? 0 : 500;
+ U64 const rSize = srcSize + dictSize ? srcSize + dictSize + addedSize : (U64)-1;
+ U32 const tableID = (rSize <= 256 KB) + (rSize <= 128 KB) + (rSize <= 16 KB); /* intentional underflow for srcSizeHint == 0 */
+ if (compressionLevel <= 0)
+ compressionLevel = ZSTD_DEFAULT_CLEVEL; /* 0 == default; no negative compressionLevel yet */
+ if (compressionLevel > ZSTD_MAX_CLEVEL)
+ compressionLevel = ZSTD_MAX_CLEVEL;
+ cp = ZSTD_defaultCParameters[tableID][compressionLevel];
+ if (ZSTD_32bits()) { /* auto-correction, for 32-bits mode */
+ if (cp.windowLog > ZSTD_WINDOWLOG_MAX)
+ cp.windowLog = ZSTD_WINDOWLOG_MAX;
+ if (cp.chainLog > ZSTD_CHAINLOG_MAX)
+ cp.chainLog = ZSTD_CHAINLOG_MAX;
+ if (cp.hashLog > ZSTD_HASHLOG_MAX)
+ cp.hashLog = ZSTD_HASHLOG_MAX;
+ }
+ cp = ZSTD_adjustCParams(cp, srcSize, dictSize);
+ return cp;
+}
+
+/*! ZSTD_getParams() :
+* same as ZSTD_getCParams(), but @return a `ZSTD_parameters` object (instead of `ZSTD_compressionParameters`).
+* All fields of `ZSTD_frameParameters` are set to default (0) */
+ZSTD_parameters ZSTD_getParams(int compressionLevel, unsigned long long srcSize, size_t dictSize)
+{
+ ZSTD_parameters params;
+ ZSTD_compressionParameters const cParams = ZSTD_getCParams(compressionLevel, srcSize, dictSize);
+ memset(&params, 0, sizeof(params));
+ params.cParams = cParams;
+ return params;
+}
+
+EXPORT_SYMBOL(ZSTD_maxCLevel);
+EXPORT_SYMBOL(ZSTD_compressBound);
+
+EXPORT_SYMBOL(ZSTD_CCtxWorkspaceBound);
+EXPORT_SYMBOL(ZSTD_initCCtx);
+EXPORT_SYMBOL(ZSTD_compressCCtx);
+EXPORT_SYMBOL(ZSTD_compress_usingDict);
+
+EXPORT_SYMBOL(ZSTD_CDictWorkspaceBound);
+EXPORT_SYMBOL(ZSTD_initCDict);
+EXPORT_SYMBOL(ZSTD_compress_usingCDict);
+
+EXPORT_SYMBOL(ZSTD_CStreamWorkspaceBound);
+EXPORT_SYMBOL(ZSTD_initCStream);
+EXPORT_SYMBOL(ZSTD_initCStream_usingCDict);
+EXPORT_SYMBOL(ZSTD_resetCStream);
+EXPORT_SYMBOL(ZSTD_compressStream);
+EXPORT_SYMBOL(ZSTD_flushStream);
+EXPORT_SYMBOL(ZSTD_endStream);
+EXPORT_SYMBOL(ZSTD_CStreamInSize);
+EXPORT_SYMBOL(ZSTD_CStreamOutSize);
+
+EXPORT_SYMBOL(ZSTD_getCParams);
+EXPORT_SYMBOL(ZSTD_getParams);
+EXPORT_SYMBOL(ZSTD_checkCParams);
+EXPORT_SYMBOL(ZSTD_adjustCParams);
+
+EXPORT_SYMBOL(ZSTD_compressBegin);
+EXPORT_SYMBOL(ZSTD_compressBegin_usingDict);
+EXPORT_SYMBOL(ZSTD_compressBegin_advanced);
+EXPORT_SYMBOL(ZSTD_copyCCtx);
+EXPORT_SYMBOL(ZSTD_compressBegin_usingCDict);
+EXPORT_SYMBOL(ZSTD_compressContinue);
+EXPORT_SYMBOL(ZSTD_compressEnd);
+
+EXPORT_SYMBOL(ZSTD_getBlockSizeMax);
+EXPORT_SYMBOL(ZSTD_compressBlock);
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("Zstd Compressor");
diff --git a/lib/zstd/decompress.c b/lib/zstd/decompress.c
new file mode 100644
index 000000000000..b17846725ca0
--- /dev/null
+++ b/lib/zstd/decompress.c
@@ -0,0 +1,2528 @@
+/**
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of https://github.com/facebook/zstd.
+ * An additional grant of patent rights can be found in the PATENTS file in the
+ * same directory.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ */
+
+/* ***************************************************************
+* Tuning parameters
+*****************************************************************/
+/*!
+* MAXWINDOWSIZE_DEFAULT :
+* maximum window size accepted by DStream, by default.
+* Frames requiring more memory will be rejected.
+*/
+#ifndef ZSTD_MAXWINDOWSIZE_DEFAULT
+#define ZSTD_MAXWINDOWSIZE_DEFAULT ((1 << ZSTD_WINDOWLOG_MAX) + 1) /* defined within zstd.h */
+#endif
+
+/*-*******************************************************
+* Dependencies
+*********************************************************/
+#include "fse.h"
+#include "huf.h"
+#include "mem.h" /* low level memory routines */
+#include "zstd_internal.h"
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/string.h> /* memcpy, memmove, memset */
+
+#define ZSTD_PREFETCH(ptr) __builtin_prefetch(ptr, 0, 0)
+
+/*-*************************************
+* Macros
+***************************************/
+#define ZSTD_isError ERR_isError /* for inlining */
+#define FSE_isError ERR_isError
+#define HUF_isError ERR_isError
+
+/*_*******************************************************
+* Memory operations
+**********************************************************/
+static void ZSTD_copy4(void *dst, const void *src) { memcpy(dst, src, 4); }
+
+/*-*************************************************************
+* Context management
+***************************************************************/
+typedef enum {
+ ZSTDds_getFrameHeaderSize,
+ ZSTDds_decodeFrameHeader,
+ ZSTDds_decodeBlockHeader,
+ ZSTDds_decompressBlock,
+ ZSTDds_decompressLastBlock,
+ ZSTDds_checkChecksum,
+ ZSTDds_decodeSkippableHeader,
+ ZSTDds_skipFrame
+} ZSTD_dStage;
+
+typedef struct {
+ FSE_DTable LLTable[FSE_DTABLE_SIZE_U32(LLFSELog)];
+ FSE_DTable OFTable[FSE_DTABLE_SIZE_U32(OffFSELog)];
+ FSE_DTable MLTable[FSE_DTABLE_SIZE_U32(MLFSELog)];
+ HUF_DTable hufTable[HUF_DTABLE_SIZE(HufLog)]; /* can accommodate HUF_decompress4X */
+ U64 workspace[HUF_DECOMPRESS_WORKSPACE_SIZE_U32 / 2];
+ U32 rep[ZSTD_REP_NUM];
+} ZSTD_entropyTables_t;
+
+struct ZSTD_DCtx_s {
+ const FSE_DTable *LLTptr;
+ const FSE_DTable *MLTptr;
+ const FSE_DTable *OFTptr;
+ const HUF_DTable *HUFptr;
+ ZSTD_entropyTables_t entropy;
+ const void *previousDstEnd; /* detect continuity */
+ const void *base; /* start of curr segment */
+ const void *vBase; /* virtual start of previous segment if it was just before curr one */
+ const void *dictEnd; /* end of previous segment */
+ size_t expected;
+ ZSTD_frameParams fParams;
+ blockType_e bType; /* used in ZSTD_decompressContinue(), to transfer blockType between header decoding and block decoding stages */
+ ZSTD_dStage stage;
+ U32 litEntropy;
+ U32 fseEntropy;
+ struct xxh64_state xxhState;
+ size_t headerSize;
+ U32 dictID;
+ const BYTE *litPtr;
+ ZSTD_customMem customMem;
+ size_t litSize;
+ size_t rleSize;
+ BYTE litBuffer[ZSTD_BLOCKSIZE_ABSOLUTEMAX + WILDCOPY_OVERLENGTH];
+ BYTE headerBuffer[ZSTD_FRAMEHEADERSIZE_MAX];
+}; /* typedef'd to ZSTD_DCtx within "zstd.h" */
+
+size_t ZSTD_DCtxWorkspaceBound(void) { return ZSTD_ALIGN(sizeof(ZSTD_stack)) + ZSTD_ALIGN(sizeof(ZSTD_DCtx)); }
+
+size_t ZSTD_decompressBegin(ZSTD_DCtx *dctx)
+{
+ dctx->expected = ZSTD_frameHeaderSize_prefix;
+ dctx->stage = ZSTDds_getFrameHeaderSize;
+ dctx->previousDstEnd = NULL;
+ dctx->base = NULL;
+ dctx->vBase = NULL;
+ dctx->dictEnd = NULL;
+ dctx->entropy.hufTable[0] = (HUF_DTable)((HufLog)*0x1000001); /* cover both little and big endian */
+ dctx->litEntropy = dctx->fseEntropy = 0;
+ dctx->dictID = 0;
+ ZSTD_STATIC_ASSERT(sizeof(dctx->entropy.rep) == sizeof(repStartValue));
+ memcpy(dctx->entropy.rep, repStartValue, sizeof(repStartValue)); /* initial repcodes */
+ dctx->LLTptr = dctx->entropy.LLTable;
+ dctx->MLTptr = dctx->entropy.MLTable;
+ dctx->OFTptr = dctx->entropy.OFTable;
+ dctx->HUFptr = dctx->entropy.hufTable;
+ return 0;
+}
+
+ZSTD_DCtx *ZSTD_createDCtx_advanced(ZSTD_customMem customMem)
+{
+ ZSTD_DCtx *dctx;
+
+ if (!customMem.customAlloc || !customMem.customFree)
+ return NULL;
+
+ dctx = (ZSTD_DCtx *)ZSTD_malloc(sizeof(ZSTD_DCtx), customMem);
+ if (!dctx)
+ return NULL;
+ memcpy(&dctx->customMem, &customMem, sizeof(customMem));
+ ZSTD_decompressBegin(dctx);
+ return dctx;
+}
+
+ZSTD_DCtx *ZSTD_initDCtx(void *workspace, size_t workspaceSize)
+{
+ ZSTD_customMem const stackMem = ZSTD_initStack(workspace, workspaceSize);
+ return ZSTD_createDCtx_advanced(stackMem);
+}
+
+size_t ZSTD_freeDCtx(ZSTD_DCtx *dctx)
+{
+ if (dctx == NULL)
+ return 0; /* support free on NULL */
+ ZSTD_free(dctx, dctx->customMem);
+ return 0; /* reserved as a potential error code in the future */
+}
+
+void ZSTD_copyDCtx(ZSTD_DCtx *dstDCtx, const ZSTD_DCtx *srcDCtx)
+{
+ size_t const workSpaceSize = (ZSTD_BLOCKSIZE_ABSOLUTEMAX + WILDCOPY_OVERLENGTH) + ZSTD_frameHeaderSize_max;
+ memcpy(dstDCtx, srcDCtx, sizeof(ZSTD_DCtx) - workSpaceSize); /* no need to copy workspace */
+}
+
+static void ZSTD_refDDict(ZSTD_DCtx *dstDCtx, const ZSTD_DDict *ddict);
+
+/*-*************************************************************
+* Decompression section
+***************************************************************/
+
+/*! ZSTD_isFrame() :
+ * Tells if the content of `buffer` starts with a valid Frame Identifier.
+ * Note : Frame Identifier is 4 bytes. If `size < 4`, @return will always be 0.
+ * Note 2 : Legacy Frame Identifiers are considered valid only if Legacy Support is enabled.
+ * Note 3 : Skippable Frame Identifiers are considered valid. */
+unsigned ZSTD_isFrame(const void *buffer, size_t size)
+{
+ if (size < 4)
+ return 0;
+ {
+ U32 const magic = ZSTD_readLE32(buffer);
+ if (magic == ZSTD_MAGICNUMBER)
+ return 1;
+ if ((magic & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START)
+ return 1;
+ }
+ return 0;
+}
+
+/** ZSTD_frameHeaderSize() :
+* srcSize must be >= ZSTD_frameHeaderSize_prefix.
+* @return : size of the Frame Header */
+static size_t ZSTD_frameHeaderSize(const void *src, size_t srcSize)
+{
+ if (srcSize < ZSTD_frameHeaderSize_prefix)
+ return ERROR(srcSize_wrong);
+ {
+ BYTE const fhd = ((const BYTE *)src)[4];
+ U32 const dictID = fhd & 3;
+ U32 const singleSegment = (fhd >> 5) & 1;
+ U32 const fcsId = fhd >> 6;
+ return ZSTD_frameHeaderSize_prefix + !singleSegment + ZSTD_did_fieldSize[dictID] + ZSTD_fcs_fieldSize[fcsId] + (singleSegment && !fcsId);
+ }
+}
+
+/** ZSTD_getFrameParams() :
+* decode Frame Header, or require larger `srcSize`.
+* @return : 0, `fparamsPtr` is correctly filled,
+* >0, `srcSize` is too small, result is expected `srcSize`,
+* or an error code, which can be tested using ZSTD_isError() */
+size_t ZSTD_getFrameParams(ZSTD_frameParams *fparamsPtr, const void *src, size_t srcSize)
+{
+ const BYTE *ip = (const BYTE *)src;
+
+ if (srcSize < ZSTD_frameHeaderSize_prefix)
+ return ZSTD_frameHeaderSize_prefix;
+ if (ZSTD_readLE32(src) != ZSTD_MAGICNUMBER) {
+ if ((ZSTD_readLE32(src) & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) {
+ if (srcSize < ZSTD_skippableHeaderSize)
+ return ZSTD_skippableHeaderSize; /* magic number + skippable frame length */
+ memset(fparamsPtr, 0, sizeof(*fparamsPtr));
+ fparamsPtr->frameContentSize = ZSTD_readLE32((const char *)src + 4);
+ fparamsPtr->windowSize = 0; /* windowSize==0 means a frame is skippable */
+ return 0;
+ }
+ return ERROR(prefix_unknown);
+ }
+
+ /* ensure there is enough `srcSize` to fully read/decode frame header */
+ {
+ size_t const fhsize = ZSTD_frameHeaderSize(src, srcSize);
+ if (srcSize < fhsize)
+ return fhsize;
+ }
+
+ {
+ BYTE const fhdByte = ip[4];
+ size_t pos = 5;
+ U32 const dictIDSizeCode = fhdByte & 3;
+ U32 const checksumFlag = (fhdByte >> 2) & 1;
+ U32 const singleSegment = (fhdByte >> 5) & 1;
+ U32 const fcsID = fhdByte >> 6;
+ U32 const windowSizeMax = 1U << ZSTD_WINDOWLOG_MAX;
+ U32 windowSize = 0;
+ U32 dictID = 0;
+ U64 frameContentSize = 0;
+ if ((fhdByte & 0x08) != 0)
+ return ERROR(frameParameter_unsupported); /* reserved bits, which must be zero */
+ if (!singleSegment) {
+ BYTE const wlByte = ip[pos++];
+ U32 const windowLog = (wlByte >> 3) + ZSTD_WINDOWLOG_ABSOLUTEMIN;
+ if (windowLog > ZSTD_WINDOWLOG_MAX)
+ return ERROR(frameParameter_windowTooLarge); /* avoids issue with 1 << windowLog */
+ windowSize = (1U << windowLog);
+ windowSize += (windowSize >> 3) * (wlByte & 7);
+ }
+
+ switch (dictIDSizeCode) {
+ default: /* impossible */
+ case 0: break;
+ case 1:
+ dictID = ip[pos];
+ pos++;
+ break;
+ case 2:
+ dictID = ZSTD_readLE16(ip + pos);
+ pos += 2;
+ break;
+ case 3:
+ dictID = ZSTD_readLE32(ip + pos);
+ pos += 4;
+ break;
+ }
+ switch (fcsID) {
+ default: /* impossible */
+ case 0:
+ if (singleSegment)
+ frameContentSize = ip[pos];
+ break;
+ case 1: frameContentSize = ZSTD_readLE16(ip + pos) + 256; break;
+ case 2: frameContentSize = ZSTD_readLE32(ip + pos); break;
+ case 3: frameContentSize = ZSTD_readLE64(ip + pos); break;
+ }
+ if (!windowSize)
+ windowSize = (U32)frameContentSize;
+ if (windowSize > windowSizeMax)
+ return ERROR(frameParameter_windowTooLarge);
+ fparamsPtr->frameContentSize = frameContentSize;
+ fparamsPtr->windowSize = windowSize;
+ fparamsPtr->dictID = dictID;
+ fparamsPtr->checksumFlag = checksumFlag;
+ }
+ return 0;
+}
+
+/** ZSTD_getFrameContentSize() :
+* compatible with legacy mode
+* @return : decompressed size of the single frame pointed to be `src` if known, otherwise
+* - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined
+* - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small) */
+unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize)
+{
+ {
+ ZSTD_frameParams fParams;
+ if (ZSTD_getFrameParams(&fParams, src, srcSize) != 0)
+ return ZSTD_CONTENTSIZE_ERROR;
+ if (fParams.windowSize == 0) {
+ /* Either skippable or empty frame, size == 0 either way */
+ return 0;
+ } else if (fParams.frameContentSize != 0) {
+ return fParams.frameContentSize;
+ } else {
+ return ZSTD_CONTENTSIZE_UNKNOWN;
+ }
+ }
+}
+
+/** ZSTD_findDecompressedSize() :
+ * compatible with legacy mode
+ * `srcSize` must be the exact length of some number of ZSTD compressed and/or
+ * skippable frames
+ * @return : decompressed size of the frames contained */
+unsigned long long ZSTD_findDecompressedSize(const void *src, size_t srcSize)
+{
+ {
+ unsigned long long totalDstSize = 0;
+ while (srcSize >= ZSTD_frameHeaderSize_prefix) {
+ const U32 magicNumber = ZSTD_readLE32(src);
+
+ if ((magicNumber & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) {
+ size_t skippableSize;
+ if (srcSize < ZSTD_skippableHeaderSize)
+ return ERROR(srcSize_wrong);
+ skippableSize = ZSTD_readLE32((const BYTE *)src + 4) + ZSTD_skippableHeaderSize;
+ if (srcSize < skippableSize) {
+ return ZSTD_CONTENTSIZE_ERROR;
+ }
+
+ src = (const BYTE *)src + skippableSize;
+ srcSize -= skippableSize;
+ continue;
+ }
+
+ {
+ unsigned long long const ret = ZSTD_getFrameContentSize(src, srcSize);
+ if (ret >= ZSTD_CONTENTSIZE_ERROR)
+ return ret;
+
+ /* check for overflow */
+ if (totalDstSize + ret < totalDstSize)
+ return ZSTD_CONTENTSIZE_ERROR;
+ totalDstSize += ret;
+ }
+ {
+ size_t const frameSrcSize = ZSTD_findFrameCompressedSize(src, srcSize);
+ if (ZSTD_isError(frameSrcSize)) {
+ return ZSTD_CONTENTSIZE_ERROR;
+ }
+
+ src = (const BYTE *)src + frameSrcSize;
+ srcSize -= frameSrcSize;
+ }
+ }
+
+ if (srcSize) {
+ return ZSTD_CONTENTSIZE_ERROR;
+ }
+
+ return totalDstSize;
+ }
+}
+
+/** ZSTD_decodeFrameHeader() :
+* `headerSize` must be the size provided by ZSTD_frameHeaderSize().
+* @return : 0 if success, or an error code, which can be tested using ZSTD_isError() */
+static size_t ZSTD_decodeFrameHeader(ZSTD_DCtx *dctx, const void *src, size_t headerSize)
+{
+ size_t const result = ZSTD_getFrameParams(&(dctx->fParams), src, headerSize);
+ if (ZSTD_isError(result))
+ return result; /* invalid header */
+ if (result > 0)
+ return ERROR(srcSize_wrong); /* headerSize too small */
+ if (dctx->fParams.dictID && (dctx->dictID != dctx->fParams.dictID))
+ return ERROR(dictionary_wrong);
+ if (dctx->fParams.checksumFlag)
+ xxh64_reset(&dctx->xxhState, 0);
+ return 0;
+}
+
+typedef struct {
+ blockType_e blockType;
+ U32 lastBlock;
+ U32 origSize;
+} blockProperties_t;
+
+/*! ZSTD_getcBlockSize() :
+* Provides the size of compressed block from block header `src` */
+size_t ZSTD_getcBlockSize(const void *src, size_t srcSize, blockProperties_t *bpPtr)
+{
+ if (srcSize < ZSTD_blockHeaderSize)
+ return ERROR(srcSize_wrong);
+ {
+ U32 const cBlockHeader = ZSTD_readLE24(src);
+ U32 const cSize = cBlockHeader >> 3;
+ bpPtr->lastBlock = cBlockHeader & 1;
+ bpPtr->blockType = (blockType_e)((cBlockHeader >> 1) & 3);
+ bpPtr->origSize = cSize; /* only useful for RLE */
+ if (bpPtr->blockType == bt_rle)
+ return 1;
+ if (bpPtr->blockType == bt_reserved)
+ return ERROR(corruption_detected);
+ return cSize;
+ }
+}
+
+static size_t ZSTD_copyRawBlock(void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ if (srcSize > dstCapacity)
+ return ERROR(dstSize_tooSmall);
+ memcpy(dst, src, srcSize);
+ return srcSize;
+}
+
+static size_t ZSTD_setRleBlock(void *dst, size_t dstCapacity, const void *src, size_t srcSize, size_t regenSize)
+{
+ if (srcSize != 1)
+ return ERROR(srcSize_wrong);
+ if (regenSize > dstCapacity)
+ return ERROR(dstSize_tooSmall);
+ memset(dst, *(const BYTE *)src, regenSize);
+ return regenSize;
+}
+
+/*! ZSTD_decodeLiteralsBlock() :
+ @return : nb of bytes read from src (< srcSize ) */
+size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx *dctx, const void *src, size_t srcSize) /* note : srcSize < BLOCKSIZE */
+{
+ if (srcSize < MIN_CBLOCK_SIZE)
+ return ERROR(corruption_detected);
+
+ {
+ const BYTE *const istart = (const BYTE *)src;
+ symbolEncodingType_e const litEncType = (symbolEncodingType_e)(istart[0] & 3);
+
+ switch (litEncType) {
+ case set_repeat:
+ if (dctx->litEntropy == 0)
+ return ERROR(dictionary_corrupted);
+ /* fall-through */
+ case set_compressed:
+ if (srcSize < 5)
+ return ERROR(corruption_detected); /* srcSize >= MIN_CBLOCK_SIZE == 3; here we need up to 5 for case 3 */
+ {
+ size_t lhSize, litSize, litCSize;
+ U32 singleStream = 0;
+ U32 const lhlCode = (istart[0] >> 2) & 3;
+ U32 const lhc = ZSTD_readLE32(istart);
+ switch (lhlCode) {
+ case 0:
+ case 1:
+ default: /* note : default is impossible, since lhlCode into [0..3] */
+ /* 2 - 2 - 10 - 10 */
+ singleStream = !lhlCode;
+ lhSize = 3;
+ litSize = (lhc >> 4) & 0x3FF;
+ litCSize = (lhc >> 14) & 0x3FF;
+ break;
+ case 2:
+ /* 2 - 2 - 14 - 14 */
+ lhSize = 4;
+ litSize = (lhc >> 4) & 0x3FFF;
+ litCSize = lhc >> 18;
+ break;
+ case 3:
+ /* 2 - 2 - 18 - 18 */
+ lhSize = 5;
+ litSize = (lhc >> 4) & 0x3FFFF;
+ litCSize = (lhc >> 22) + (istart[4] << 10);
+ break;
+ }
+ if (litSize > ZSTD_BLOCKSIZE_ABSOLUTEMAX)
+ return ERROR(corruption_detected);
+ if (litCSize + lhSize > srcSize)
+ return ERROR(corruption_detected);
+
+ if (HUF_isError(
+ (litEncType == set_repeat)
+ ? (singleStream ? HUF_decompress1X_usingDTable(dctx->litBuffer, litSize, istart + lhSize, litCSize, dctx->HUFptr)
+ : HUF_decompress4X_usingDTable(dctx->litBuffer, litSize, istart + lhSize, litCSize, dctx->HUFptr))
+ : (singleStream
+ ? HUF_decompress1X2_DCtx_wksp(dctx->entropy.hufTable, dctx->litBuffer, litSize, istart + lhSize, litCSize,
+ dctx->entropy.workspace, sizeof(dctx->entropy.workspace))
+ : HUF_decompress4X_hufOnly_wksp(dctx->entropy.hufTable, dctx->litBuffer, litSize, istart + lhSize, litCSize,
+ dctx->entropy.workspace, sizeof(dctx->entropy.workspace)))))
+ return ERROR(corruption_detected);
+
+ dctx->litPtr = dctx->litBuffer;
+ dctx->litSize = litSize;
+ dctx->litEntropy = 1;
+ if (litEncType == set_compressed)
+ dctx->HUFptr = dctx->entropy.hufTable;
+ memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
+ return litCSize + lhSize;
+ }
+
+ case set_basic: {
+ size_t litSize, lhSize;
+ U32 const lhlCode = ((istart[0]) >> 2) & 3;
+ switch (lhlCode) {
+ case 0:
+ case 2:
+ default: /* note : default is impossible, since lhlCode into [0..3] */
+ lhSize = 1;
+ litSize = istart[0] >> 3;
+ break;
+ case 1:
+ lhSize = 2;
+ litSize = ZSTD_readLE16(istart) >> 4;
+ break;
+ case 3:
+ lhSize = 3;
+ litSize = ZSTD_readLE24(istart) >> 4;
+ break;
+ }
+
+ if (lhSize + litSize + WILDCOPY_OVERLENGTH > srcSize) { /* risk reading beyond src buffer with wildcopy */
+ if (litSize + lhSize > srcSize)
+ return ERROR(corruption_detected);
+ memcpy(dctx->litBuffer, istart + lhSize, litSize);
+ dctx->litPtr = dctx->litBuffer;
+ dctx->litSize = litSize;
+ memset(dctx->litBuffer + dctx->litSize, 0, WILDCOPY_OVERLENGTH);
+ return lhSize + litSize;
+ }
+ /* direct reference into compressed stream */
+ dctx->litPtr = istart + lhSize;
+ dctx->litSize = litSize;
+ return lhSize + litSize;
+ }
+
+ case set_rle: {
+ U32 const lhlCode = ((istart[0]) >> 2) & 3;
+ size_t litSize, lhSize;
+ switch (lhlCode) {
+ case 0:
+ case 2:
+ default: /* note : default is impossible, since lhlCode into [0..3] */
+ lhSize = 1;
+ litSize = istart[0] >> 3;
+ break;
+ case 1:
+ lhSize = 2;
+ litSize = ZSTD_readLE16(istart) >> 4;
+ break;
+ case 3:
+ lhSize = 3;
+ litSize = ZSTD_readLE24(istart) >> 4;
+ if (srcSize < 4)
+ return ERROR(corruption_detected); /* srcSize >= MIN_CBLOCK_SIZE == 3; here we need lhSize+1 = 4 */
+ break;
+ }
+ if (litSize > ZSTD_BLOCKSIZE_ABSOLUTEMAX)
+ return ERROR(corruption_detected);
+ memset(dctx->litBuffer, istart[lhSize], litSize + WILDCOPY_OVERLENGTH);
+ dctx->litPtr = dctx->litBuffer;
+ dctx->litSize = litSize;
+ return lhSize + 1;
+ }
+ default:
+ return ERROR(corruption_detected); /* impossible */
+ }
+ }
+}
+
+typedef union {
+ FSE_decode_t realData;
+ U32 alignedBy4;
+} FSE_decode_t4;
+
+static const FSE_decode_t4 LL_defaultDTable[(1 << LL_DEFAULTNORMLOG) + 1] = {
+ {{LL_DEFAULTNORMLOG, 1, 1}}, /* header : tableLog, fastMode, fastMode */
+ {{0, 0, 4}}, /* 0 : base, symbol, bits */
+ {{16, 0, 4}},
+ {{32, 1, 5}},
+ {{0, 3, 5}},
+ {{0, 4, 5}},
+ {{0, 6, 5}},
+ {{0, 7, 5}},
+ {{0, 9, 5}},
+ {{0, 10, 5}},
+ {{0, 12, 5}},
+ {{0, 14, 6}},
+ {{0, 16, 5}},
+ {{0, 18, 5}},
+ {{0, 19, 5}},
+ {{0, 21, 5}},
+ {{0, 22, 5}},
+ {{0, 24, 5}},
+ {{32, 25, 5}},
+ {{0, 26, 5}},
+ {{0, 27, 6}},
+ {{0, 29, 6}},
+ {{0, 31, 6}},
+ {{32, 0, 4}},
+ {{0, 1, 4}},
+ {{0, 2, 5}},
+ {{32, 4, 5}},
+ {{0, 5, 5}},
+ {{32, 7, 5}},
+ {{0, 8, 5}},
+ {{32, 10, 5}},
+ {{0, 11, 5}},
+ {{0, 13, 6}},
+ {{32, 16, 5}},
+ {{0, 17, 5}},
+ {{32, 19, 5}},
+ {{0, 20, 5}},
+ {{32, 22, 5}},
+ {{0, 23, 5}},
+ {{0, 25, 4}},
+ {{16, 25, 4}},
+ {{32, 26, 5}},
+ {{0, 28, 6}},
+ {{0, 30, 6}},
+ {{48, 0, 4}},
+ {{16, 1, 4}},
+ {{32, 2, 5}},
+ {{32, 3, 5}},
+ {{32, 5, 5}},
+ {{32, 6, 5}},
+ {{32, 8, 5}},
+ {{32, 9, 5}},
+ {{32, 11, 5}},
+ {{32, 12, 5}},
+ {{0, 15, 6}},
+ {{32, 17, 5}},
+ {{32, 18, 5}},
+ {{32, 20, 5}},
+ {{32, 21, 5}},
+ {{32, 23, 5}},
+ {{32, 24, 5}},
+ {{0, 35, 6}},
+ {{0, 34, 6}},
+ {{0, 33, 6}},
+ {{0, 32, 6}},
+}; /* LL_defaultDTable */
+
+static const FSE_decode_t4 ML_defaultDTable[(1 << ML_DEFAULTNORMLOG) + 1] = {
+ {{ML_DEFAULTNORMLOG, 1, 1}}, /* header : tableLog, fastMode, fastMode */
+ {{0, 0, 6}}, /* 0 : base, symbol, bits */
+ {{0, 1, 4}},
+ {{32, 2, 5}},
+ {{0, 3, 5}},
+ {{0, 5, 5}},
+ {{0, 6, 5}},
+ {{0, 8, 5}},
+ {{0, 10, 6}},
+ {{0, 13, 6}},
+ {{0, 16, 6}},
+ {{0, 19, 6}},
+ {{0, 22, 6}},
+ {{0, 25, 6}},
+ {{0, 28, 6}},
+ {{0, 31, 6}},
+ {{0, 33, 6}},
+ {{0, 35, 6}},
+ {{0, 37, 6}},
+ {{0, 39, 6}},
+ {{0, 41, 6}},
+ {{0, 43, 6}},
+ {{0, 45, 6}},
+ {{16, 1, 4}},
+ {{0, 2, 4}},
+ {{32, 3, 5}},
+ {{0, 4, 5}},
+ {{32, 6, 5}},
+ {{0, 7, 5}},
+ {{0, 9, 6}},
+ {{0, 12, 6}},
+ {{0, 15, 6}},
+ {{0, 18, 6}},
+ {{0, 21, 6}},
+ {{0, 24, 6}},
+ {{0, 27, 6}},
+ {{0, 30, 6}},
+ {{0, 32, 6}},
+ {{0, 34, 6}},
+ {{0, 36, 6}},
+ {{0, 38, 6}},
+ {{0, 40, 6}},
+ {{0, 42, 6}},
+ {{0, 44, 6}},
+ {{32, 1, 4}},
+ {{48, 1, 4}},
+ {{16, 2, 4}},
+ {{32, 4, 5}},
+ {{32, 5, 5}},
+ {{32, 7, 5}},
+ {{32, 8, 5}},
+ {{0, 11, 6}},
+ {{0, 14, 6}},
+ {{0, 17, 6}},
+ {{0, 20, 6}},
+ {{0, 23, 6}},
+ {{0, 26, 6}},
+ {{0, 29, 6}},
+ {{0, 52, 6}},
+ {{0, 51, 6}},
+ {{0, 50, 6}},
+ {{0, 49, 6}},
+ {{0, 48, 6}},
+ {{0, 47, 6}},
+ {{0, 46, 6}},
+}; /* ML_defaultDTable */
+
+static const FSE_decode_t4 OF_defaultDTable[(1 << OF_DEFAULTNORMLOG) + 1] = {
+ {{OF_DEFAULTNORMLOG, 1, 1}}, /* header : tableLog, fastMode, fastMode */
+ {{0, 0, 5}}, /* 0 : base, symbol, bits */
+ {{0, 6, 4}},
+ {{0, 9, 5}},
+ {{0, 15, 5}},
+ {{0, 21, 5}},
+ {{0, 3, 5}},
+ {{0, 7, 4}},
+ {{0, 12, 5}},
+ {{0, 18, 5}},
+ {{0, 23, 5}},
+ {{0, 5, 5}},
+ {{0, 8, 4}},
+ {{0, 14, 5}},
+ {{0, 20, 5}},
+ {{0, 2, 5}},
+ {{16, 7, 4}},
+ {{0, 11, 5}},
+ {{0, 17, 5}},
+ {{0, 22, 5}},
+ {{0, 4, 5}},
+ {{16, 8, 4}},
+ {{0, 13, 5}},
+ {{0, 19, 5}},
+ {{0, 1, 5}},
+ {{16, 6, 4}},
+ {{0, 10, 5}},
+ {{0, 16, 5}},
+ {{0, 28, 5}},
+ {{0, 27, 5}},
+ {{0, 26, 5}},
+ {{0, 25, 5}},
+ {{0, 24, 5}},
+}; /* OF_defaultDTable */
+
+/*! ZSTD_buildSeqTable() :
+ @return : nb bytes read from src,
+ or an error code if it fails, testable with ZSTD_isError()
+*/
+static size_t ZSTD_buildSeqTable(FSE_DTable *DTableSpace, const FSE_DTable **DTablePtr, symbolEncodingType_e type, U32 max, U32 maxLog, const void *src,
+ size_t srcSize, const FSE_decode_t4 *defaultTable, U32 flagRepeatTable, void *workspace, size_t workspaceSize)
+{
+ const void *const tmpPtr = defaultTable; /* bypass strict aliasing */
+ switch (type) {
+ case set_rle:
+ if (!srcSize)
+ return ERROR(srcSize_wrong);
+ if ((*(const BYTE *)src) > max)
+ return ERROR(corruption_detected);
+ FSE_buildDTable_rle(DTableSpace, *(const BYTE *)src);
+ *DTablePtr = DTableSpace;
+ return 1;
+ case set_basic: *DTablePtr = (const FSE_DTable *)tmpPtr; return 0;
+ case set_repeat:
+ if (!flagRepeatTable)
+ return ERROR(corruption_detected);
+ return 0;
+ default: /* impossible */
+ case set_compressed: {
+ U32 tableLog;
+ S16 *norm = (S16 *)workspace;
+ size_t const spaceUsed32 = ALIGN(sizeof(S16) * (MaxSeq + 1), sizeof(U32)) >> 2;
+
+ if ((spaceUsed32 << 2) > workspaceSize)
+ return ERROR(GENERIC);
+ workspace = (U32 *)workspace + spaceUsed32;
+ workspaceSize -= (spaceUsed32 << 2);
+ {
+ size_t const headerSize = FSE_readNCount(norm, &max, &tableLog, src, srcSize);
+ if (FSE_isError(headerSize))
+ return ERROR(corruption_detected);
+ if (tableLog > maxLog)
+ return ERROR(corruption_detected);
+ FSE_buildDTable_wksp(DTableSpace, norm, max, tableLog, workspace, workspaceSize);
+ *DTablePtr = DTableSpace;
+ return headerSize;
+ }
+ }
+ }
+}
+
+size_t ZSTD_decodeSeqHeaders(ZSTD_DCtx *dctx, int *nbSeqPtr, const void *src, size_t srcSize)
+{
+ const BYTE *const istart = (const BYTE *const)src;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *ip = istart;
+
+ /* check */
+ if (srcSize < MIN_SEQUENCES_SIZE)
+ return ERROR(srcSize_wrong);
+
+ /* SeqHead */
+ {
+ int nbSeq = *ip++;
+ if (!nbSeq) {
+ *nbSeqPtr = 0;
+ return 1;
+ }
+ if (nbSeq > 0x7F) {
+ if (nbSeq == 0xFF) {
+ if (ip + 2 > iend)
+ return ERROR(srcSize_wrong);
+ nbSeq = ZSTD_readLE16(ip) + LONGNBSEQ, ip += 2;
+ } else {
+ if (ip >= iend)
+ return ERROR(srcSize_wrong);
+ nbSeq = ((nbSeq - 0x80) << 8) + *ip++;
+ }
+ }
+ *nbSeqPtr = nbSeq;
+ }
+
+ /* FSE table descriptors */
+ if (ip + 4 > iend)
+ return ERROR(srcSize_wrong); /* minimum possible size */
+ {
+ symbolEncodingType_e const LLtype = (symbolEncodingType_e)(*ip >> 6);
+ symbolEncodingType_e const OFtype = (symbolEncodingType_e)((*ip >> 4) & 3);
+ symbolEncodingType_e const MLtype = (symbolEncodingType_e)((*ip >> 2) & 3);
+ ip++;
+
+ /* Build DTables */
+ {
+ size_t const llhSize = ZSTD_buildSeqTable(dctx->entropy.LLTable, &dctx->LLTptr, LLtype, MaxLL, LLFSELog, ip, iend - ip,
+ LL_defaultDTable, dctx->fseEntropy, dctx->entropy.workspace, sizeof(dctx->entropy.workspace));
+ if (ZSTD_isError(llhSize))
+ return ERROR(corruption_detected);
+ ip += llhSize;
+ }
+ {
+ size_t const ofhSize = ZSTD_buildSeqTable(dctx->entropy.OFTable, &dctx->OFTptr, OFtype, MaxOff, OffFSELog, ip, iend - ip,
+ OF_defaultDTable, dctx->fseEntropy, dctx->entropy.workspace, sizeof(dctx->entropy.workspace));
+ if (ZSTD_isError(ofhSize))
+ return ERROR(corruption_detected);
+ ip += ofhSize;
+ }
+ {
+ size_t const mlhSize = ZSTD_buildSeqTable(dctx->entropy.MLTable, &dctx->MLTptr, MLtype, MaxML, MLFSELog, ip, iend - ip,
+ ML_defaultDTable, dctx->fseEntropy, dctx->entropy.workspace, sizeof(dctx->entropy.workspace));
+ if (ZSTD_isError(mlhSize))
+ return ERROR(corruption_detected);
+ ip += mlhSize;
+ }
+ }
+
+ return ip - istart;
+}
+
+typedef struct {
+ size_t litLength;
+ size_t matchLength;
+ size_t offset;
+ const BYTE *match;
+} seq_t;
+
+typedef struct {
+ BIT_DStream_t DStream;
+ FSE_DState_t stateLL;
+ FSE_DState_t stateOffb;
+ FSE_DState_t stateML;
+ size_t prevOffset[ZSTD_REP_NUM];
+ const BYTE *base;
+ size_t pos;
+ uPtrDiff gotoDict;
+} seqState_t;
+
+FORCE_NOINLINE
+size_t ZSTD_execSequenceLast7(BYTE *op, BYTE *const oend, seq_t sequence, const BYTE **litPtr, const BYTE *const litLimit, const BYTE *const base,
+ const BYTE *const vBase, const BYTE *const dictEnd)
+{
+ BYTE *const oLitEnd = op + sequence.litLength;
+ size_t const sequenceLength = sequence.litLength + sequence.matchLength;
+ BYTE *const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
+ BYTE *const oend_w = oend - WILDCOPY_OVERLENGTH;
+ const BYTE *const iLitEnd = *litPtr + sequence.litLength;
+ const BYTE *match = oLitEnd - sequence.offset;
+
+ /* check */
+ if (oMatchEnd > oend)
+ return ERROR(dstSize_tooSmall); /* last match must start at a minimum distance of WILDCOPY_OVERLENGTH from oend */
+ if (iLitEnd > litLimit)
+ return ERROR(corruption_detected); /* over-read beyond lit buffer */
+ if (oLitEnd <= oend_w)
+ return ERROR(GENERIC); /* Precondition */
+
+ /* copy literals */
+ if (op < oend_w) {
+ ZSTD_wildcopy(op, *litPtr, oend_w - op);
+ *litPtr += oend_w - op;
+ op = oend_w;
+ }
+ while (op < oLitEnd)
+ *op++ = *(*litPtr)++;
+
+ /* copy Match */
+ if (sequence.offset > (size_t)(oLitEnd - base)) {
+ /* offset beyond prefix */
+ if (sequence.offset > (size_t)(oLitEnd - vBase))
+ return ERROR(corruption_detected);
+ match = dictEnd - (base - match);
+ if (match + sequence.matchLength <= dictEnd) {
+ memmove(oLitEnd, match, sequence.matchLength);
+ return sequenceLength;
+ }
+ /* span extDict & currPrefixSegment */
+ {
+ size_t const length1 = dictEnd - match;
+ memmove(oLitEnd, match, length1);
+ op = oLitEnd + length1;
+ sequence.matchLength -= length1;
+ match = base;
+ }
+ }
+ while (op < oMatchEnd)
+ *op++ = *match++;
+ return sequenceLength;
+}
+
+static seq_t ZSTD_decodeSequence(seqState_t *seqState)
+{
+ seq_t seq;
+
+ U32 const llCode = FSE_peekSymbol(&seqState->stateLL);
+ U32 const mlCode = FSE_peekSymbol(&seqState->stateML);
+ U32 const ofCode = FSE_peekSymbol(&seqState->stateOffb); /* <= maxOff, by table construction */
+
+ U32 const llBits = LL_bits[llCode];
+ U32 const mlBits = ML_bits[mlCode];
+ U32 const ofBits = ofCode;
+ U32 const totalBits = llBits + mlBits + ofBits;
+
+ static const U32 LL_base[MaxLL + 1] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18,
+ 20, 22, 24, 28, 32, 40, 48, 64, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000, 0x10000};
+
+ static const U32 ML_base[MaxML + 1] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 39, 41,
+ 43, 47, 51, 59, 67, 83, 99, 0x83, 0x103, 0x203, 0x403, 0x803, 0x1003, 0x2003, 0x4003, 0x8003, 0x10003};
+
+ static const U32 OF_base[MaxOff + 1] = {0, 1, 1, 5, 0xD, 0x1D, 0x3D, 0x7D, 0xFD, 0x1FD,
+ 0x3FD, 0x7FD, 0xFFD, 0x1FFD, 0x3FFD, 0x7FFD, 0xFFFD, 0x1FFFD, 0x3FFFD, 0x7FFFD,
+ 0xFFFFD, 0x1FFFFD, 0x3FFFFD, 0x7FFFFD, 0xFFFFFD, 0x1FFFFFD, 0x3FFFFFD, 0x7FFFFFD, 0xFFFFFFD};
+
+ /* sequence */
+ {
+ size_t offset;
+ if (!ofCode)
+ offset = 0;
+ else {
+ offset = OF_base[ofCode] + BIT_readBitsFast(&seqState->DStream, ofBits); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
+ if (ZSTD_32bits())
+ BIT_reloadDStream(&seqState->DStream);
+ }
+
+ if (ofCode <= 1) {
+ offset += (llCode == 0);
+ if (offset) {
+ size_t temp = (offset == 3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
+ temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
+ if (offset != 1)
+ seqState->prevOffset[2] = seqState->prevOffset[1];
+ seqState->prevOffset[1] = seqState->prevOffset[0];
+ seqState->prevOffset[0] = offset = temp;
+ } else {
+ offset = seqState->prevOffset[0];
+ }
+ } else {
+ seqState->prevOffset[2] = seqState->prevOffset[1];
+ seqState->prevOffset[1] = seqState->prevOffset[0];
+ seqState->prevOffset[0] = offset;
+ }
+ seq.offset = offset;
+ }
+
+ seq.matchLength = ML_base[mlCode] + ((mlCode > 31) ? BIT_readBitsFast(&seqState->DStream, mlBits) : 0); /* <= 16 bits */
+ if (ZSTD_32bits() && (mlBits + llBits > 24))
+ BIT_reloadDStream(&seqState->DStream);
+
+ seq.litLength = LL_base[llCode] + ((llCode > 15) ? BIT_readBitsFast(&seqState->DStream, llBits) : 0); /* <= 16 bits */
+ if (ZSTD_32bits() || (totalBits > 64 - 7 - (LLFSELog + MLFSELog + OffFSELog)))
+ BIT_reloadDStream(&seqState->DStream);
+
+ /* ANS state update */
+ FSE_updateState(&seqState->stateLL, &seqState->DStream); /* <= 9 bits */
+ FSE_updateState(&seqState->stateML, &seqState->DStream); /* <= 9 bits */
+ if (ZSTD_32bits())
+ BIT_reloadDStream(&seqState->DStream); /* <= 18 bits */
+ FSE_updateState(&seqState->stateOffb, &seqState->DStream); /* <= 8 bits */
+
+ seq.match = NULL;
+
+ return seq;
+}
+
+FORCE_INLINE
+size_t ZSTD_execSequence(BYTE *op, BYTE *const oend, seq_t sequence, const BYTE **litPtr, const BYTE *const litLimit, const BYTE *const base,
+ const BYTE *const vBase, const BYTE *const dictEnd)
+{
+ BYTE *const oLitEnd = op + sequence.litLength;
+ size_t const sequenceLength = sequence.litLength + sequence.matchLength;
+ BYTE *const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
+ BYTE *const oend_w = oend - WILDCOPY_OVERLENGTH;
+ const BYTE *const iLitEnd = *litPtr + sequence.litLength;
+ const BYTE *match = oLitEnd - sequence.offset;
+
+ /* check */
+ if (oMatchEnd > oend)
+ return ERROR(dstSize_tooSmall); /* last match must start at a minimum distance of WILDCOPY_OVERLENGTH from oend */
+ if (iLitEnd > litLimit)
+ return ERROR(corruption_detected); /* over-read beyond lit buffer */
+ if (oLitEnd > oend_w)
+ return ZSTD_execSequenceLast7(op, oend, sequence, litPtr, litLimit, base, vBase, dictEnd);
+
+ /* copy Literals */
+ ZSTD_copy8(op, *litPtr);
+ if (sequence.litLength > 8)
+ ZSTD_wildcopy(op + 8, (*litPtr) + 8,
+ sequence.litLength - 8); /* note : since oLitEnd <= oend-WILDCOPY_OVERLENGTH, no risk of overwrite beyond oend */
+ op = oLitEnd;
+ *litPtr = iLitEnd; /* update for next sequence */
+
+ /* copy Match */
+ if (sequence.offset > (size_t)(oLitEnd - base)) {
+ /* offset beyond prefix */
+ if (sequence.offset > (size_t)(oLitEnd - vBase))
+ return ERROR(corruption_detected);
+ match = dictEnd + (match - base);
+ if (match + sequence.matchLength <= dictEnd) {
+ memmove(oLitEnd, match, sequence.matchLength);
+ return sequenceLength;
+ }
+ /* span extDict & currPrefixSegment */
+ {
+ size_t const length1 = dictEnd - match;
+ memmove(oLitEnd, match, length1);
+ op = oLitEnd + length1;
+ sequence.matchLength -= length1;
+ match = base;
+ if (op > oend_w || sequence.matchLength < MINMATCH) {
+ U32 i;
+ for (i = 0; i < sequence.matchLength; ++i)
+ op[i] = match[i];
+ return sequenceLength;
+ }
+ }
+ }
+ /* Requirement: op <= oend_w && sequence.matchLength >= MINMATCH */
+
+ /* match within prefix */
+ if (sequence.offset < 8) {
+ /* close range match, overlap */
+ static const U32 dec32table[] = {0, 1, 2, 1, 4, 4, 4, 4}; /* added */
+ static const int dec64table[] = {8, 8, 8, 7, 8, 9, 10, 11}; /* subtracted */
+ int const sub2 = dec64table[sequence.offset];
+ op[0] = match[0];
+ op[1] = match[1];
+ op[2] = match[2];
+ op[3] = match[3];
+ match += dec32table[sequence.offset];
+ ZSTD_copy4(op + 4, match);
+ match -= sub2;
+ } else {
+ ZSTD_copy8(op, match);
+ }
+ op += 8;
+ match += 8;
+
+ if (oMatchEnd > oend - (16 - MINMATCH)) {
+ if (op < oend_w) {
+ ZSTD_wildcopy(op, match, oend_w - op);
+ match += oend_w - op;
+ op = oend_w;
+ }
+ while (op < oMatchEnd)
+ *op++ = *match++;
+ } else {
+ ZSTD_wildcopy(op, match, (ptrdiff_t)sequence.matchLength - 8); /* works even if matchLength < 8 */
+ }
+ return sequenceLength;
+}
+
+static size_t ZSTD_decompressSequences(ZSTD_DCtx *dctx, void *dst, size_t maxDstSize, const void *seqStart, size_t seqSize)
+{
+ const BYTE *ip = (const BYTE *)seqStart;
+ const BYTE *const iend = ip + seqSize;
+ BYTE *const ostart = (BYTE * const)dst;
+ BYTE *const oend = ostart + maxDstSize;
+ BYTE *op = ostart;
+ const BYTE *litPtr = dctx->litPtr;
+ const BYTE *const litEnd = litPtr + dctx->litSize;
+ const BYTE *const base = (const BYTE *)(dctx->base);
+ const BYTE *const vBase = (const BYTE *)(dctx->vBase);
+ const BYTE *const dictEnd = (const BYTE *)(dctx->dictEnd);
+ int nbSeq;
+
+ /* Build Decoding Tables */
+ {
+ size_t const seqHSize = ZSTD_decodeSeqHeaders(dctx, &nbSeq, ip, seqSize);
+ if (ZSTD_isError(seqHSize))
+ return seqHSize;
+ ip += seqHSize;
+ }
+
+ /* Regen sequences */
+ if (nbSeq) {
+ seqState_t seqState;
+ dctx->fseEntropy = 1;
+ {
+ U32 i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ seqState.prevOffset[i] = dctx->entropy.rep[i];
+ }
+ CHECK_E(BIT_initDStream(&seqState.DStream, ip, iend - ip), corruption_detected);
+ FSE_initDState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
+ FSE_initDState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr);
+ FSE_initDState(&seqState.stateML, &seqState.DStream, dctx->MLTptr);
+
+ for (; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && nbSeq;) {
+ nbSeq--;
+ {
+ seq_t const sequence = ZSTD_decodeSequence(&seqState);
+ size_t const oneSeqSize = ZSTD_execSequence(op, oend, sequence, &litPtr, litEnd, base, vBase, dictEnd);
+ if (ZSTD_isError(oneSeqSize))
+ return oneSeqSize;
+ op += oneSeqSize;
+ }
+ }
+
+ /* check if reached exact end */
+ if (nbSeq)
+ return ERROR(corruption_detected);
+ /* save reps for next block */
+ {
+ U32 i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]);
+ }
+ }
+
+ /* last literal segment */
+ {
+ size_t const lastLLSize = litEnd - litPtr;
+ if (lastLLSize > (size_t)(oend - op))
+ return ERROR(dstSize_tooSmall);
+ memcpy(op, litPtr, lastLLSize);
+ op += lastLLSize;
+ }
+
+ return op - ostart;
+}
+
+FORCE_INLINE seq_t ZSTD_decodeSequenceLong_generic(seqState_t *seqState, int const longOffsets)
+{
+ seq_t seq;
+
+ U32 const llCode = FSE_peekSymbol(&seqState->stateLL);
+ U32 const mlCode = FSE_peekSymbol(&seqState->stateML);
+ U32 const ofCode = FSE_peekSymbol(&seqState->stateOffb); /* <= maxOff, by table construction */
+
+ U32 const llBits = LL_bits[llCode];
+ U32 const mlBits = ML_bits[mlCode];
+ U32 const ofBits = ofCode;
+ U32 const totalBits = llBits + mlBits + ofBits;
+
+ static const U32 LL_base[MaxLL + 1] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 18,
+ 20, 22, 24, 28, 32, 40, 48, 64, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000, 0x8000, 0x10000};
+
+ static const U32 ML_base[MaxML + 1] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 39, 41,
+ 43, 47, 51, 59, 67, 83, 99, 0x83, 0x103, 0x203, 0x403, 0x803, 0x1003, 0x2003, 0x4003, 0x8003, 0x10003};
+
+ static const U32 OF_base[MaxOff + 1] = {0, 1, 1, 5, 0xD, 0x1D, 0x3D, 0x7D, 0xFD, 0x1FD,
+ 0x3FD, 0x7FD, 0xFFD, 0x1FFD, 0x3FFD, 0x7FFD, 0xFFFD, 0x1FFFD, 0x3FFFD, 0x7FFFD,
+ 0xFFFFD, 0x1FFFFD, 0x3FFFFD, 0x7FFFFD, 0xFFFFFD, 0x1FFFFFD, 0x3FFFFFD, 0x7FFFFFD, 0xFFFFFFD};
+
+ /* sequence */
+ {
+ size_t offset;
+ if (!ofCode)
+ offset = 0;
+ else {
+ if (longOffsets) {
+ int const extraBits = ofBits - MIN(ofBits, STREAM_ACCUMULATOR_MIN);
+ offset = OF_base[ofCode] + (BIT_readBitsFast(&seqState->DStream, ofBits - extraBits) << extraBits);
+ if (ZSTD_32bits() || extraBits)
+ BIT_reloadDStream(&seqState->DStream);
+ if (extraBits)
+ offset += BIT_readBitsFast(&seqState->DStream, extraBits);
+ } else {
+ offset = OF_base[ofCode] + BIT_readBitsFast(&seqState->DStream, ofBits); /* <= (ZSTD_WINDOWLOG_MAX-1) bits */
+ if (ZSTD_32bits())
+ BIT_reloadDStream(&seqState->DStream);
+ }
+ }
+
+ if (ofCode <= 1) {
+ offset += (llCode == 0);
+ if (offset) {
+ size_t temp = (offset == 3) ? seqState->prevOffset[0] - 1 : seqState->prevOffset[offset];
+ temp += !temp; /* 0 is not valid; input is corrupted; force offset to 1 */
+ if (offset != 1)
+ seqState->prevOffset[2] = seqState->prevOffset[1];
+ seqState->prevOffset[1] = seqState->prevOffset[0];
+ seqState->prevOffset[0] = offset = temp;
+ } else {
+ offset = seqState->prevOffset[0];
+ }
+ } else {
+ seqState->prevOffset[2] = seqState->prevOffset[1];
+ seqState->prevOffset[1] = seqState->prevOffset[0];
+ seqState->prevOffset[0] = offset;
+ }
+ seq.offset = offset;
+ }
+
+ seq.matchLength = ML_base[mlCode] + ((mlCode > 31) ? BIT_readBitsFast(&seqState->DStream, mlBits) : 0); /* <= 16 bits */
+ if (ZSTD_32bits() && (mlBits + llBits > 24))
+ BIT_reloadDStream(&seqState->DStream);
+
+ seq.litLength = LL_base[llCode] + ((llCode > 15) ? BIT_readBitsFast(&seqState->DStream, llBits) : 0); /* <= 16 bits */
+ if (ZSTD_32bits() || (totalBits > 64 - 7 - (LLFSELog + MLFSELog + OffFSELog)))
+ BIT_reloadDStream(&seqState->DStream);
+
+ {
+ size_t const pos = seqState->pos + seq.litLength;
+ seq.match = seqState->base + pos - seq.offset; /* single memory segment */
+ if (seq.offset > pos)
+ seq.match += seqState->gotoDict; /* separate memory segment */
+ seqState->pos = pos + seq.matchLength;
+ }
+
+ /* ANS state update */
+ FSE_updateState(&seqState->stateLL, &seqState->DStream); /* <= 9 bits */
+ FSE_updateState(&seqState->stateML, &seqState->DStream); /* <= 9 bits */
+ if (ZSTD_32bits())
+ BIT_reloadDStream(&seqState->DStream); /* <= 18 bits */
+ FSE_updateState(&seqState->stateOffb, &seqState->DStream); /* <= 8 bits */
+
+ return seq;
+}
+
+static seq_t ZSTD_decodeSequenceLong(seqState_t *seqState, unsigned const windowSize)
+{
+ if (ZSTD_highbit32(windowSize) > STREAM_ACCUMULATOR_MIN) {
+ return ZSTD_decodeSequenceLong_generic(seqState, 1);
+ } else {
+ return ZSTD_decodeSequenceLong_generic(seqState, 0);
+ }
+}
+
+FORCE_INLINE
+size_t ZSTD_execSequenceLong(BYTE *op, BYTE *const oend, seq_t sequence, const BYTE **litPtr, const BYTE *const litLimit, const BYTE *const base,
+ const BYTE *const vBase, const BYTE *const dictEnd)
+{
+ BYTE *const oLitEnd = op + sequence.litLength;
+ size_t const sequenceLength = sequence.litLength + sequence.matchLength;
+ BYTE *const oMatchEnd = op + sequenceLength; /* risk : address space overflow (32-bits) */
+ BYTE *const oend_w = oend - WILDCOPY_OVERLENGTH;
+ const BYTE *const iLitEnd = *litPtr + sequence.litLength;
+ const BYTE *match = sequence.match;
+
+ /* check */
+ if (oMatchEnd > oend)
+ return ERROR(dstSize_tooSmall); /* last match must start at a minimum distance of WILDCOPY_OVERLENGTH from oend */
+ if (iLitEnd > litLimit)
+ return ERROR(corruption_detected); /* over-read beyond lit buffer */
+ if (oLitEnd > oend_w)
+ return ZSTD_execSequenceLast7(op, oend, sequence, litPtr, litLimit, base, vBase, dictEnd);
+
+ /* copy Literals */
+ ZSTD_copy8(op, *litPtr);
+ if (sequence.litLength > 8)
+ ZSTD_wildcopy(op + 8, (*litPtr) + 8,
+ sequence.litLength - 8); /* note : since oLitEnd <= oend-WILDCOPY_OVERLENGTH, no risk of overwrite beyond oend */
+ op = oLitEnd;
+ *litPtr = iLitEnd; /* update for next sequence */
+
+ /* copy Match */
+ if (sequence.offset > (size_t)(oLitEnd - base)) {
+ /* offset beyond prefix */
+ if (sequence.offset > (size_t)(oLitEnd - vBase))
+ return ERROR(corruption_detected);
+ if (match + sequence.matchLength <= dictEnd) {
+ memmove(oLitEnd, match, sequence.matchLength);
+ return sequenceLength;
+ }
+ /* span extDict & currPrefixSegment */
+ {
+ size_t const length1 = dictEnd - match;
+ memmove(oLitEnd, match, length1);
+ op = oLitEnd + length1;
+ sequence.matchLength -= length1;
+ match = base;
+ if (op > oend_w || sequence.matchLength < MINMATCH) {
+ U32 i;
+ for (i = 0; i < sequence.matchLength; ++i)
+ op[i] = match[i];
+ return sequenceLength;
+ }
+ }
+ }
+ /* Requirement: op <= oend_w && sequence.matchLength >= MINMATCH */
+
+ /* match within prefix */
+ if (sequence.offset < 8) {
+ /* close range match, overlap */
+ static const U32 dec32table[] = {0, 1, 2, 1, 4, 4, 4, 4}; /* added */
+ static const int dec64table[] = {8, 8, 8, 7, 8, 9, 10, 11}; /* subtracted */
+ int const sub2 = dec64table[sequence.offset];
+ op[0] = match[0];
+ op[1] = match[1];
+ op[2] = match[2];
+ op[3] = match[3];
+ match += dec32table[sequence.offset];
+ ZSTD_copy4(op + 4, match);
+ match -= sub2;
+ } else {
+ ZSTD_copy8(op, match);
+ }
+ op += 8;
+ match += 8;
+
+ if (oMatchEnd > oend - (16 - MINMATCH)) {
+ if (op < oend_w) {
+ ZSTD_wildcopy(op, match, oend_w - op);
+ match += oend_w - op;
+ op = oend_w;
+ }
+ while (op < oMatchEnd)
+ *op++ = *match++;
+ } else {
+ ZSTD_wildcopy(op, match, (ptrdiff_t)sequence.matchLength - 8); /* works even if matchLength < 8 */
+ }
+ return sequenceLength;
+}
+
+static size_t ZSTD_decompressSequencesLong(ZSTD_DCtx *dctx, void *dst, size_t maxDstSize, const void *seqStart, size_t seqSize)
+{
+ const BYTE *ip = (const BYTE *)seqStart;
+ const BYTE *const iend = ip + seqSize;
+ BYTE *const ostart = (BYTE * const)dst;
+ BYTE *const oend = ostart + maxDstSize;
+ BYTE *op = ostart;
+ const BYTE *litPtr = dctx->litPtr;
+ const BYTE *const litEnd = litPtr + dctx->litSize;
+ const BYTE *const base = (const BYTE *)(dctx->base);
+ const BYTE *const vBase = (const BYTE *)(dctx->vBase);
+ const BYTE *const dictEnd = (const BYTE *)(dctx->dictEnd);
+ unsigned const windowSize = dctx->fParams.windowSize;
+ int nbSeq;
+
+ /* Build Decoding Tables */
+ {
+ size_t const seqHSize = ZSTD_decodeSeqHeaders(dctx, &nbSeq, ip, seqSize);
+ if (ZSTD_isError(seqHSize))
+ return seqHSize;
+ ip += seqHSize;
+ }
+
+ /* Regen sequences */
+ if (nbSeq) {
+#define STORED_SEQS 4
+#define STOSEQ_MASK (STORED_SEQS - 1)
+#define ADVANCED_SEQS 4
+ seq_t *sequences = (seq_t *)dctx->entropy.workspace;
+ int const seqAdvance = MIN(nbSeq, ADVANCED_SEQS);
+ seqState_t seqState;
+ int seqNb;
+ ZSTD_STATIC_ASSERT(sizeof(dctx->entropy.workspace) >= sizeof(seq_t) * STORED_SEQS);
+ dctx->fseEntropy = 1;
+ {
+ U32 i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ seqState.prevOffset[i] = dctx->entropy.rep[i];
+ }
+ seqState.base = base;
+ seqState.pos = (size_t)(op - base);
+ seqState.gotoDict = (uPtrDiff)dictEnd - (uPtrDiff)base; /* cast to avoid undefined behaviour */
+ CHECK_E(BIT_initDStream(&seqState.DStream, ip, iend - ip), corruption_detected);
+ FSE_initDState(&seqState.stateLL, &seqState.DStream, dctx->LLTptr);
+ FSE_initDState(&seqState.stateOffb, &seqState.DStream, dctx->OFTptr);
+ FSE_initDState(&seqState.stateML, &seqState.DStream, dctx->MLTptr);
+
+ /* prepare in advance */
+ for (seqNb = 0; (BIT_reloadDStream(&seqState.DStream) <= BIT_DStream_completed) && seqNb < seqAdvance; seqNb++) {
+ sequences[seqNb] = ZSTD_decodeSequenceLong(&seqState, windowSize);
+ }
+ if (seqNb < seqAdvance)
+ return ERROR(corruption_detected);
+
+ /* decode and decompress */
+ for (; (BIT_reloadDStream(&(seqState.DStream)) <= BIT_DStream_completed) && seqNb < nbSeq; seqNb++) {
+ seq_t const sequence = ZSTD_decodeSequenceLong(&seqState, windowSize);
+ size_t const oneSeqSize =
+ ZSTD_execSequenceLong(op, oend, sequences[(seqNb - ADVANCED_SEQS) & STOSEQ_MASK], &litPtr, litEnd, base, vBase, dictEnd);
+ if (ZSTD_isError(oneSeqSize))
+ return oneSeqSize;
+ ZSTD_PREFETCH(sequence.match);
+ sequences[seqNb & STOSEQ_MASK] = sequence;
+ op += oneSeqSize;
+ }
+ if (seqNb < nbSeq)
+ return ERROR(corruption_detected);
+
+ /* finish queue */
+ seqNb -= seqAdvance;
+ for (; seqNb < nbSeq; seqNb++) {
+ size_t const oneSeqSize = ZSTD_execSequenceLong(op, oend, sequences[seqNb & STOSEQ_MASK], &litPtr, litEnd, base, vBase, dictEnd);
+ if (ZSTD_isError(oneSeqSize))
+ return oneSeqSize;
+ op += oneSeqSize;
+ }
+
+ /* save reps for next block */
+ {
+ U32 i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ dctx->entropy.rep[i] = (U32)(seqState.prevOffset[i]);
+ }
+ }
+
+ /* last literal segment */
+ {
+ size_t const lastLLSize = litEnd - litPtr;
+ if (lastLLSize > (size_t)(oend - op))
+ return ERROR(dstSize_tooSmall);
+ memcpy(op, litPtr, lastLLSize);
+ op += lastLLSize;
+ }
+
+ return op - ostart;
+}
+
+static size_t ZSTD_decompressBlock_internal(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{ /* blockType == blockCompressed */
+ const BYTE *ip = (const BYTE *)src;
+
+ if (srcSize >= ZSTD_BLOCKSIZE_ABSOLUTEMAX)
+ return ERROR(srcSize_wrong);
+
+ /* Decode literals section */
+ {
+ size_t const litCSize = ZSTD_decodeLiteralsBlock(dctx, src, srcSize);
+ if (ZSTD_isError(litCSize))
+ return litCSize;
+ ip += litCSize;
+ srcSize -= litCSize;
+ }
+ if (sizeof(size_t) > 4) /* do not enable prefetching on 32-bits x86, as it's performance detrimental */
+ /* likely because of register pressure */
+ /* if that's the correct cause, then 32-bits ARM should be affected differently */
+ /* it would be good to test this on ARM real hardware, to see if prefetch version improves speed */
+ if (dctx->fParams.windowSize > (1 << 23))
+ return ZSTD_decompressSequencesLong(dctx, dst, dstCapacity, ip, srcSize);
+ return ZSTD_decompressSequences(dctx, dst, dstCapacity, ip, srcSize);
+}
+
+static void ZSTD_checkContinuity(ZSTD_DCtx *dctx, const void *dst)
+{
+ if (dst != dctx->previousDstEnd) { /* not contiguous */
+ dctx->dictEnd = dctx->previousDstEnd;
+ dctx->vBase = (const char *)dst - ((const char *)(dctx->previousDstEnd) - (const char *)(dctx->base));
+ dctx->base = dst;
+ dctx->previousDstEnd = dst;
+ }
+}
+
+size_t ZSTD_decompressBlock(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ size_t dSize;
+ ZSTD_checkContinuity(dctx, dst);
+ dSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize);
+ dctx->previousDstEnd = (char *)dst + dSize;
+ return dSize;
+}
+
+/** ZSTD_insertBlock() :
+ insert `src` block into `dctx` history. Useful to track uncompressed blocks. */
+size_t ZSTD_insertBlock(ZSTD_DCtx *dctx, const void *blockStart, size_t blockSize)
+{
+ ZSTD_checkContinuity(dctx, blockStart);
+ dctx->previousDstEnd = (const char *)blockStart + blockSize;
+ return blockSize;
+}
+
+size_t ZSTD_generateNxBytes(void *dst, size_t dstCapacity, BYTE byte, size_t length)
+{
+ if (length > dstCapacity)
+ return ERROR(dstSize_tooSmall);
+ memset(dst, byte, length);
+ return length;
+}
+
+/** ZSTD_findFrameCompressedSize() :
+ * compatible with legacy mode
+ * `src` must point to the start of a ZSTD frame, ZSTD legacy frame, or skippable frame
+ * `srcSize` must be at least as large as the frame contained
+ * @return : the compressed size of the frame starting at `src` */
+size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize)
+{
+ if (srcSize >= ZSTD_skippableHeaderSize && (ZSTD_readLE32(src) & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) {
+ return ZSTD_skippableHeaderSize + ZSTD_readLE32((const BYTE *)src + 4);
+ } else {
+ const BYTE *ip = (const BYTE *)src;
+ const BYTE *const ipstart = ip;
+ size_t remainingSize = srcSize;
+ ZSTD_frameParams fParams;
+
+ size_t const headerSize = ZSTD_frameHeaderSize(ip, remainingSize);
+ if (ZSTD_isError(headerSize))
+ return headerSize;
+
+ /* Frame Header */
+ {
+ size_t const ret = ZSTD_getFrameParams(&fParams, ip, remainingSize);
+ if (ZSTD_isError(ret))
+ return ret;
+ if (ret > 0)
+ return ERROR(srcSize_wrong);
+ }
+
+ ip += headerSize;
+ remainingSize -= headerSize;
+
+ /* Loop on each block */
+ while (1) {
+ blockProperties_t blockProperties;
+ size_t const cBlockSize = ZSTD_getcBlockSize(ip, remainingSize, &blockProperties);
+ if (ZSTD_isError(cBlockSize))
+ return cBlockSize;
+
+ if (ZSTD_blockHeaderSize + cBlockSize > remainingSize)
+ return ERROR(srcSize_wrong);
+
+ ip += ZSTD_blockHeaderSize + cBlockSize;
+ remainingSize -= ZSTD_blockHeaderSize + cBlockSize;
+
+ if (blockProperties.lastBlock)
+ break;
+ }
+
+ if (fParams.checksumFlag) { /* Frame content checksum */
+ if (remainingSize < 4)
+ return ERROR(srcSize_wrong);
+ ip += 4;
+ remainingSize -= 4;
+ }
+
+ return ip - ipstart;
+ }
+}
+
+/*! ZSTD_decompressFrame() :
+* @dctx must be properly initialized */
+static size_t ZSTD_decompressFrame(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void **srcPtr, size_t *srcSizePtr)
+{
+ const BYTE *ip = (const BYTE *)(*srcPtr);
+ BYTE *const ostart = (BYTE * const)dst;
+ BYTE *const oend = ostart + dstCapacity;
+ BYTE *op = ostart;
+ size_t remainingSize = *srcSizePtr;
+
+ /* check */
+ if (remainingSize < ZSTD_frameHeaderSize_min + ZSTD_blockHeaderSize)
+ return ERROR(srcSize_wrong);
+
+ /* Frame Header */
+ {
+ size_t const frameHeaderSize = ZSTD_frameHeaderSize(ip, ZSTD_frameHeaderSize_prefix);
+ if (ZSTD_isError(frameHeaderSize))
+ return frameHeaderSize;
+ if (remainingSize < frameHeaderSize + ZSTD_blockHeaderSize)
+ return ERROR(srcSize_wrong);
+ CHECK_F(ZSTD_decodeFrameHeader(dctx, ip, frameHeaderSize));
+ ip += frameHeaderSize;
+ remainingSize -= frameHeaderSize;
+ }
+
+ /* Loop on each block */
+ while (1) {
+ size_t decodedSize;
+ blockProperties_t blockProperties;
+ size_t const cBlockSize = ZSTD_getcBlockSize(ip, remainingSize, &blockProperties);
+ if (ZSTD_isError(cBlockSize))
+ return cBlockSize;
+
+ ip += ZSTD_blockHeaderSize;
+ remainingSize -= ZSTD_blockHeaderSize;
+ if (cBlockSize > remainingSize)
+ return ERROR(srcSize_wrong);
+
+ switch (blockProperties.blockType) {
+ case bt_compressed: decodedSize = ZSTD_decompressBlock_internal(dctx, op, oend - op, ip, cBlockSize); break;
+ case bt_raw: decodedSize = ZSTD_copyRawBlock(op, oend - op, ip, cBlockSize); break;
+ case bt_rle: decodedSize = ZSTD_generateNxBytes(op, oend - op, *ip, blockProperties.origSize); break;
+ case bt_reserved:
+ default: return ERROR(corruption_detected);
+ }
+
+ if (ZSTD_isError(decodedSize))
+ return decodedSize;
+ if (dctx->fParams.checksumFlag)
+ xxh64_update(&dctx->xxhState, op, decodedSize);
+ op += decodedSize;
+ ip += cBlockSize;
+ remainingSize -= cBlockSize;
+ if (blockProperties.lastBlock)
+ break;
+ }
+
+ if (dctx->fParams.checksumFlag) { /* Frame content checksum verification */
+ U32 const checkCalc = (U32)xxh64_digest(&dctx->xxhState);
+ U32 checkRead;
+ if (remainingSize < 4)
+ return ERROR(checksum_wrong);
+ checkRead = ZSTD_readLE32(ip);
+ if (checkRead != checkCalc)
+ return ERROR(checksum_wrong);
+ ip += 4;
+ remainingSize -= 4;
+ }
+
+ /* Allow caller to get size read */
+ *srcPtr = ip;
+ *srcSizePtr = remainingSize;
+ return op - ostart;
+}
+
+static const void *ZSTD_DDictDictContent(const ZSTD_DDict *ddict);
+static size_t ZSTD_DDictDictSize(const ZSTD_DDict *ddict);
+
+static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const void *dict, size_t dictSize,
+ const ZSTD_DDict *ddict)
+{
+ void *const dststart = dst;
+
+ if (ddict) {
+ if (dict) {
+ /* programmer error, these two cases should be mutually exclusive */
+ return ERROR(GENERIC);
+ }
+
+ dict = ZSTD_DDictDictContent(ddict);
+ dictSize = ZSTD_DDictDictSize(ddict);
+ }
+
+ while (srcSize >= ZSTD_frameHeaderSize_prefix) {
+ U32 magicNumber;
+
+ magicNumber = ZSTD_readLE32(src);
+ if (magicNumber != ZSTD_MAGICNUMBER) {
+ if ((magicNumber & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) {
+ size_t skippableSize;
+ if (srcSize < ZSTD_skippableHeaderSize)
+ return ERROR(srcSize_wrong);
+ skippableSize = ZSTD_readLE32((const BYTE *)src + 4) + ZSTD_skippableHeaderSize;
+ if (srcSize < skippableSize) {
+ return ERROR(srcSize_wrong);
+ }
+
+ src = (const BYTE *)src + skippableSize;
+ srcSize -= skippableSize;
+ continue;
+ } else {
+ return ERROR(prefix_unknown);
+ }
+ }
+
+ if (ddict) {
+ /* we were called from ZSTD_decompress_usingDDict */
+ ZSTD_refDDict(dctx, ddict);
+ } else {
+ /* this will initialize correctly with no dict if dict == NULL, so
+ * use this in all cases but ddict */
+ CHECK_F(ZSTD_decompressBegin_usingDict(dctx, dict, dictSize));
+ }
+ ZSTD_checkContinuity(dctx, dst);
+
+ {
+ const size_t res = ZSTD_decompressFrame(dctx, dst, dstCapacity, &src, &srcSize);
+ if (ZSTD_isError(res))
+ return res;
+ /* don't need to bounds check this, ZSTD_decompressFrame will have
+ * already */
+ dst = (BYTE *)dst + res;
+ dstCapacity -= res;
+ }
+ }
+
+ if (srcSize)
+ return ERROR(srcSize_wrong); /* input not entirely consumed */
+
+ return (BYTE *)dst - (BYTE *)dststart;
+}
+
+size_t ZSTD_decompress_usingDict(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const void *dict, size_t dictSize)
+{
+ return ZSTD_decompressMultiFrame(dctx, dst, dstCapacity, src, srcSize, dict, dictSize, NULL);
+}
+
+size_t ZSTD_decompressDCtx(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ return ZSTD_decompress_usingDict(dctx, dst, dstCapacity, src, srcSize, NULL, 0);
+}
+
+/*-**************************************
+* Advanced Streaming Decompression API
+* Bufferless and synchronous
+****************************************/
+size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx *dctx) { return dctx->expected; }
+
+ZSTD_nextInputType_e ZSTD_nextInputType(ZSTD_DCtx *dctx)
+{
+ switch (dctx->stage) {
+ default: /* should not happen */
+ case ZSTDds_getFrameHeaderSize:
+ case ZSTDds_decodeFrameHeader: return ZSTDnit_frameHeader;
+ case ZSTDds_decodeBlockHeader: return ZSTDnit_blockHeader;
+ case ZSTDds_decompressBlock: return ZSTDnit_block;
+ case ZSTDds_decompressLastBlock: return ZSTDnit_lastBlock;
+ case ZSTDds_checkChecksum: return ZSTDnit_checksum;
+ case ZSTDds_decodeSkippableHeader:
+ case ZSTDds_skipFrame: return ZSTDnit_skippableFrame;
+ }
+}
+
+int ZSTD_isSkipFrame(ZSTD_DCtx *dctx) { return dctx->stage == ZSTDds_skipFrame; } /* for zbuff */
+
+/** ZSTD_decompressContinue() :
+* @return : nb of bytes generated into `dst` (necessarily <= `dstCapacity)
+* or an error code, which can be tested using ZSTD_isError() */
+size_t ZSTD_decompressContinue(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ /* Sanity check */
+ if (srcSize != dctx->expected)
+ return ERROR(srcSize_wrong);
+ if (dstCapacity)
+ ZSTD_checkContinuity(dctx, dst);
+
+ switch (dctx->stage) {
+ case ZSTDds_getFrameHeaderSize:
+ if (srcSize != ZSTD_frameHeaderSize_prefix)
+ return ERROR(srcSize_wrong); /* impossible */
+ if ((ZSTD_readLE32(src) & 0xFFFFFFF0U) == ZSTD_MAGIC_SKIPPABLE_START) { /* skippable frame */
+ memcpy(dctx->headerBuffer, src, ZSTD_frameHeaderSize_prefix);
+ dctx->expected = ZSTD_skippableHeaderSize - ZSTD_frameHeaderSize_prefix; /* magic number + skippable frame length */
+ dctx->stage = ZSTDds_decodeSkippableHeader;
+ return 0;
+ }
+ dctx->headerSize = ZSTD_frameHeaderSize(src, ZSTD_frameHeaderSize_prefix);
+ if (ZSTD_isError(dctx->headerSize))
+ return dctx->headerSize;
+ memcpy(dctx->headerBuffer, src, ZSTD_frameHeaderSize_prefix);
+ if (dctx->headerSize > ZSTD_frameHeaderSize_prefix) {
+ dctx->expected = dctx->headerSize - ZSTD_frameHeaderSize_prefix;
+ dctx->stage = ZSTDds_decodeFrameHeader;
+ return 0;
+ }
+ dctx->expected = 0; /* not necessary to copy more */
+
+ case ZSTDds_decodeFrameHeader:
+ memcpy(dctx->headerBuffer + ZSTD_frameHeaderSize_prefix, src, dctx->expected);
+ CHECK_F(ZSTD_decodeFrameHeader(dctx, dctx->headerBuffer, dctx->headerSize));
+ dctx->expected = ZSTD_blockHeaderSize;
+ dctx->stage = ZSTDds_decodeBlockHeader;
+ return 0;
+
+ case ZSTDds_decodeBlockHeader: {
+ blockProperties_t bp;
+ size_t const cBlockSize = ZSTD_getcBlockSize(src, ZSTD_blockHeaderSize, &bp);
+ if (ZSTD_isError(cBlockSize))
+ return cBlockSize;
+ dctx->expected = cBlockSize;
+ dctx->bType = bp.blockType;
+ dctx->rleSize = bp.origSize;
+ if (cBlockSize) {
+ dctx->stage = bp.lastBlock ? ZSTDds_decompressLastBlock : ZSTDds_decompressBlock;
+ return 0;
+ }
+ /* empty block */
+ if (bp.lastBlock) {
+ if (dctx->fParams.checksumFlag) {
+ dctx->expected = 4;
+ dctx->stage = ZSTDds_checkChecksum;
+ } else {
+ dctx->expected = 0; /* end of frame */
+ dctx->stage = ZSTDds_getFrameHeaderSize;
+ }
+ } else {
+ dctx->expected = 3; /* go directly to next header */
+ dctx->stage = ZSTDds_decodeBlockHeader;
+ }
+ return 0;
+ }
+ case ZSTDds_decompressLastBlock:
+ case ZSTDds_decompressBlock: {
+ size_t rSize;
+ switch (dctx->bType) {
+ case bt_compressed: rSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize); break;
+ case bt_raw: rSize = ZSTD_copyRawBlock(dst, dstCapacity, src, srcSize); break;
+ case bt_rle: rSize = ZSTD_setRleBlock(dst, dstCapacity, src, srcSize, dctx->rleSize); break;
+ case bt_reserved: /* should never happen */
+ default: return ERROR(corruption_detected);
+ }
+ if (ZSTD_isError(rSize))
+ return rSize;
+ if (dctx->fParams.checksumFlag)
+ xxh64_update(&dctx->xxhState, dst, rSize);
+
+ if (dctx->stage == ZSTDds_decompressLastBlock) { /* end of frame */
+ if (dctx->fParams.checksumFlag) { /* another round for frame checksum */
+ dctx->expected = 4;
+ dctx->stage = ZSTDds_checkChecksum;
+ } else {
+ dctx->expected = 0; /* ends here */
+ dctx->stage = ZSTDds_getFrameHeaderSize;
+ }
+ } else {
+ dctx->stage = ZSTDds_decodeBlockHeader;
+ dctx->expected = ZSTD_blockHeaderSize;
+ dctx->previousDstEnd = (char *)dst + rSize;
+ }
+ return rSize;
+ }
+ case ZSTDds_checkChecksum: {
+ U32 const h32 = (U32)xxh64_digest(&dctx->xxhState);
+ U32 const check32 = ZSTD_readLE32(src); /* srcSize == 4, guaranteed by dctx->expected */
+ if (check32 != h32)
+ return ERROR(checksum_wrong);
+ dctx->expected = 0;
+ dctx->stage = ZSTDds_getFrameHeaderSize;
+ return 0;
+ }
+ case ZSTDds_decodeSkippableHeader: {
+ memcpy(dctx->headerBuffer + ZSTD_frameHeaderSize_prefix, src, dctx->expected);
+ dctx->expected = ZSTD_readLE32(dctx->headerBuffer + 4);
+ dctx->stage = ZSTDds_skipFrame;
+ return 0;
+ }
+ case ZSTDds_skipFrame: {
+ dctx->expected = 0;
+ dctx->stage = ZSTDds_getFrameHeaderSize;
+ return 0;
+ }
+ default:
+ return ERROR(GENERIC); /* impossible */
+ }
+}
+
+static size_t ZSTD_refDictContent(ZSTD_DCtx *dctx, const void *dict, size_t dictSize)
+{
+ dctx->dictEnd = dctx->previousDstEnd;
+ dctx->vBase = (const char *)dict - ((const char *)(dctx->previousDstEnd) - (const char *)(dctx->base));
+ dctx->base = dict;
+ dctx->previousDstEnd = (const char *)dict + dictSize;
+ return 0;
+}
+
+/* ZSTD_loadEntropy() :
+ * dict : must point at beginning of a valid zstd dictionary
+ * @return : size of entropy tables read */
+static size_t ZSTD_loadEntropy(ZSTD_entropyTables_t *entropy, const void *const dict, size_t const dictSize)
+{
+ const BYTE *dictPtr = (const BYTE *)dict;
+ const BYTE *const dictEnd = dictPtr + dictSize;
+
+ if (dictSize <= 8)
+ return ERROR(dictionary_corrupted);
+ dictPtr += 8; /* skip header = magic + dictID */
+
+ {
+ size_t const hSize = HUF_readDTableX4_wksp(entropy->hufTable, dictPtr, dictEnd - dictPtr, entropy->workspace, sizeof(entropy->workspace));
+ if (HUF_isError(hSize))
+ return ERROR(dictionary_corrupted);
+ dictPtr += hSize;
+ }
+
+ {
+ short offcodeNCount[MaxOff + 1];
+ U32 offcodeMaxValue = MaxOff, offcodeLog;
+ size_t const offcodeHeaderSize = FSE_readNCount(offcodeNCount, &offcodeMaxValue, &offcodeLog, dictPtr, dictEnd - dictPtr);
+ if (FSE_isError(offcodeHeaderSize))
+ return ERROR(dictionary_corrupted);
+ if (offcodeLog > OffFSELog)
+ return ERROR(dictionary_corrupted);
+ CHECK_E(FSE_buildDTable_wksp(entropy->OFTable, offcodeNCount, offcodeMaxValue, offcodeLog, entropy->workspace, sizeof(entropy->workspace)), dictionary_corrupted);
+ dictPtr += offcodeHeaderSize;
+ }
+
+ {
+ short matchlengthNCount[MaxML + 1];
+ unsigned matchlengthMaxValue = MaxML, matchlengthLog;
+ size_t const matchlengthHeaderSize = FSE_readNCount(matchlengthNCount, &matchlengthMaxValue, &matchlengthLog, dictPtr, dictEnd - dictPtr);
+ if (FSE_isError(matchlengthHeaderSize))
+ return ERROR(dictionary_corrupted);
+ if (matchlengthLog > MLFSELog)
+ return ERROR(dictionary_corrupted);
+ CHECK_E(FSE_buildDTable_wksp(entropy->MLTable, matchlengthNCount, matchlengthMaxValue, matchlengthLog, entropy->workspace, sizeof(entropy->workspace)), dictionary_corrupted);
+ dictPtr += matchlengthHeaderSize;
+ }
+
+ {
+ short litlengthNCount[MaxLL + 1];
+ unsigned litlengthMaxValue = MaxLL, litlengthLog;
+ size_t const litlengthHeaderSize = FSE_readNCount(litlengthNCount, &litlengthMaxValue, &litlengthLog, dictPtr, dictEnd - dictPtr);
+ if (FSE_isError(litlengthHeaderSize))
+ return ERROR(dictionary_corrupted);
+ if (litlengthLog > LLFSELog)
+ return ERROR(dictionary_corrupted);
+ CHECK_E(FSE_buildDTable_wksp(entropy->LLTable, litlengthNCount, litlengthMaxValue, litlengthLog, entropy->workspace, sizeof(entropy->workspace)), dictionary_corrupted);
+ dictPtr += litlengthHeaderSize;
+ }
+
+ if (dictPtr + 12 > dictEnd)
+ return ERROR(dictionary_corrupted);
+ {
+ int i;
+ size_t const dictContentSize = (size_t)(dictEnd - (dictPtr + 12));
+ for (i = 0; i < 3; i++) {
+ U32 const rep = ZSTD_readLE32(dictPtr);
+ dictPtr += 4;
+ if (rep == 0 || rep >= dictContentSize)
+ return ERROR(dictionary_corrupted);
+ entropy->rep[i] = rep;
+ }
+ }
+
+ return dictPtr - (const BYTE *)dict;
+}
+
+static size_t ZSTD_decompress_insertDictionary(ZSTD_DCtx *dctx, const void *dict, size_t dictSize)
+{
+ if (dictSize < 8)
+ return ZSTD_refDictContent(dctx, dict, dictSize);
+ {
+ U32 const magic = ZSTD_readLE32(dict);
+ if (magic != ZSTD_DICT_MAGIC) {
+ return ZSTD_refDictContent(dctx, dict, dictSize); /* pure content mode */
+ }
+ }
+ dctx->dictID = ZSTD_readLE32((const char *)dict + 4);
+
+ /* load entropy tables */
+ {
+ size_t const eSize = ZSTD_loadEntropy(&dctx->entropy, dict, dictSize);
+ if (ZSTD_isError(eSize))
+ return ERROR(dictionary_corrupted);
+ dict = (const char *)dict + eSize;
+ dictSize -= eSize;
+ }
+ dctx->litEntropy = dctx->fseEntropy = 1;
+
+ /* reference dictionary content */
+ return ZSTD_refDictContent(dctx, dict, dictSize);
+}
+
+size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx *dctx, const void *dict, size_t dictSize)
+{
+ CHECK_F(ZSTD_decompressBegin(dctx));
+ if (dict && dictSize)
+ CHECK_E(ZSTD_decompress_insertDictionary(dctx, dict, dictSize), dictionary_corrupted);
+ return 0;
+}
+
+/* ====== ZSTD_DDict ====== */
+
+struct ZSTD_DDict_s {
+ void *dictBuffer;
+ const void *dictContent;
+ size_t dictSize;
+ ZSTD_entropyTables_t entropy;
+ U32 dictID;
+ U32 entropyPresent;
+ ZSTD_customMem cMem;
+}; /* typedef'd to ZSTD_DDict within "zstd.h" */
+
+size_t ZSTD_DDictWorkspaceBound(void) { return ZSTD_ALIGN(sizeof(ZSTD_stack)) + ZSTD_ALIGN(sizeof(ZSTD_DDict)); }
+
+static const void *ZSTD_DDictDictContent(const ZSTD_DDict *ddict) { return ddict->dictContent; }
+
+static size_t ZSTD_DDictDictSize(const ZSTD_DDict *ddict) { return ddict->dictSize; }
+
+static void ZSTD_refDDict(ZSTD_DCtx *dstDCtx, const ZSTD_DDict *ddict)
+{
+ ZSTD_decompressBegin(dstDCtx); /* init */
+ if (ddict) { /* support refDDict on NULL */
+ dstDCtx->dictID = ddict->dictID;
+ dstDCtx->base = ddict->dictContent;
+ dstDCtx->vBase = ddict->dictContent;
+ dstDCtx->dictEnd = (const BYTE *)ddict->dictContent + ddict->dictSize;
+ dstDCtx->previousDstEnd = dstDCtx->dictEnd;
+ if (ddict->entropyPresent) {
+ dstDCtx->litEntropy = 1;
+ dstDCtx->fseEntropy = 1;
+ dstDCtx->LLTptr = ddict->entropy.LLTable;
+ dstDCtx->MLTptr = ddict->entropy.MLTable;
+ dstDCtx->OFTptr = ddict->entropy.OFTable;
+ dstDCtx->HUFptr = ddict->entropy.hufTable;
+ dstDCtx->entropy.rep[0] = ddict->entropy.rep[0];
+ dstDCtx->entropy.rep[1] = ddict->entropy.rep[1];
+ dstDCtx->entropy.rep[2] = ddict->entropy.rep[2];
+ } else {
+ dstDCtx->litEntropy = 0;
+ dstDCtx->fseEntropy = 0;
+ }
+ }
+}
+
+static size_t ZSTD_loadEntropy_inDDict(ZSTD_DDict *ddict)
+{
+ ddict->dictID = 0;
+ ddict->entropyPresent = 0;
+ if (ddict->dictSize < 8)
+ return 0;
+ {
+ U32 const magic = ZSTD_readLE32(ddict->dictContent);
+ if (magic != ZSTD_DICT_MAGIC)
+ return 0; /* pure content mode */
+ }
+ ddict->dictID = ZSTD_readLE32((const char *)ddict->dictContent + 4);
+
+ /* load entropy tables */
+ CHECK_E(ZSTD_loadEntropy(&ddict->entropy, ddict->dictContent, ddict->dictSize), dictionary_corrupted);
+ ddict->entropyPresent = 1;
+ return 0;
+}
+
+static ZSTD_DDict *ZSTD_createDDict_advanced(const void *dict, size_t dictSize, unsigned byReference, ZSTD_customMem customMem)
+{
+ if (!customMem.customAlloc || !customMem.customFree)
+ return NULL;
+
+ {
+ ZSTD_DDict *const ddict = (ZSTD_DDict *)ZSTD_malloc(sizeof(ZSTD_DDict), customMem);
+ if (!ddict)
+ return NULL;
+ ddict->cMem = customMem;
+
+ if ((byReference) || (!dict) || (!dictSize)) {
+ ddict->dictBuffer = NULL;
+ ddict->dictContent = dict;
+ } else {
+ void *const internalBuffer = ZSTD_malloc(dictSize, customMem);
+ if (!internalBuffer) {
+ ZSTD_freeDDict(ddict);
+ return NULL;
+ }
+ memcpy(internalBuffer, dict, dictSize);
+ ddict->dictBuffer = internalBuffer;
+ ddict->dictContent = internalBuffer;
+ }
+ ddict->dictSize = dictSize;
+ ddict->entropy.hufTable[0] = (HUF_DTable)((HufLog)*0x1000001); /* cover both little and big endian */
+ /* parse dictionary content */
+ {
+ size_t const errorCode = ZSTD_loadEntropy_inDDict(ddict);
+ if (ZSTD_isError(errorCode)) {
+ ZSTD_freeDDict(ddict);
+ return NULL;
+ }
+ }
+
+ return ddict;
+ }
+}
+
+/*! ZSTD_initDDict() :
+* Create a digested dictionary, to start decompression without startup delay.
+* `dict` content is copied inside DDict.
+* Consequently, `dict` can be released after `ZSTD_DDict` creation */
+ZSTD_DDict *ZSTD_initDDict(const void *dict, size_t dictSize, void *workspace, size_t workspaceSize)
+{
+ ZSTD_customMem const stackMem = ZSTD_initStack(workspace, workspaceSize);
+ return ZSTD_createDDict_advanced(dict, dictSize, 1, stackMem);
+}
+
+size_t ZSTD_freeDDict(ZSTD_DDict *ddict)
+{
+ if (ddict == NULL)
+ return 0; /* support free on NULL */
+ {
+ ZSTD_customMem const cMem = ddict->cMem;
+ ZSTD_free(ddict->dictBuffer, cMem);
+ ZSTD_free(ddict, cMem);
+ return 0;
+ }
+}
+
+/*! ZSTD_getDictID_fromDict() :
+ * Provides the dictID stored within dictionary.
+ * if @return == 0, the dictionary is not conformant with Zstandard specification.
+ * It can still be loaded, but as a content-only dictionary. */
+unsigned ZSTD_getDictID_fromDict(const void *dict, size_t dictSize)
+{
+ if (dictSize < 8)
+ return 0;
+ if (ZSTD_readLE32(dict) != ZSTD_DICT_MAGIC)
+ return 0;
+ return ZSTD_readLE32((const char *)dict + 4);
+}
+
+/*! ZSTD_getDictID_fromDDict() :
+ * Provides the dictID of the dictionary loaded into `ddict`.
+ * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty.
+ * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */
+unsigned ZSTD_getDictID_fromDDict(const ZSTD_DDict *ddict)
+{
+ if (ddict == NULL)
+ return 0;
+ return ZSTD_getDictID_fromDict(ddict->dictContent, ddict->dictSize);
+}
+
+/*! ZSTD_getDictID_fromFrame() :
+ * Provides the dictID required to decompressed the frame stored within `src`.
+ * If @return == 0, the dictID could not be decoded.
+ * This could for one of the following reasons :
+ * - The frame does not require a dictionary to be decoded (most common case).
+ * - The frame was built with dictID intentionally removed. Whatever dictionary is necessary is a hidden information.
+ * Note : this use case also happens when using a non-conformant dictionary.
+ * - `srcSize` is too small, and as a result, the frame header could not be decoded (only possible if `srcSize < ZSTD_FRAMEHEADERSIZE_MAX`).
+ * - This is not a Zstandard frame.
+ * When identifying the exact failure cause, it's possible to used ZSTD_getFrameParams(), which will provide a more precise error code. */
+unsigned ZSTD_getDictID_fromFrame(const void *src, size_t srcSize)
+{
+ ZSTD_frameParams zfp = {0, 0, 0, 0};
+ size_t const hError = ZSTD_getFrameParams(&zfp, src, srcSize);
+ if (ZSTD_isError(hError))
+ return 0;
+ return zfp.dictID;
+}
+
+/*! ZSTD_decompress_usingDDict() :
+* Decompression using a pre-digested Dictionary
+* Use dictionary without significant overhead. */
+size_t ZSTD_decompress_usingDDict(ZSTD_DCtx *dctx, void *dst, size_t dstCapacity, const void *src, size_t srcSize, const ZSTD_DDict *ddict)
+{
+ /* pass content and size in case legacy frames are encountered */
+ return ZSTD_decompressMultiFrame(dctx, dst, dstCapacity, src, srcSize, NULL, 0, ddict);
+}
+
+/*=====================================
+* Streaming decompression
+*====================================*/
+
+typedef enum { zdss_init, zdss_loadHeader, zdss_read, zdss_load, zdss_flush } ZSTD_dStreamStage;
+
+/* *** Resource management *** */
+struct ZSTD_DStream_s {
+ ZSTD_DCtx *dctx;
+ ZSTD_DDict *ddictLocal;
+ const ZSTD_DDict *ddict;
+ ZSTD_frameParams fParams;
+ ZSTD_dStreamStage stage;
+ char *inBuff;
+ size_t inBuffSize;
+ size_t inPos;
+ size_t maxWindowSize;
+ char *outBuff;
+ size_t outBuffSize;
+ size_t outStart;
+ size_t outEnd;
+ size_t blockSize;
+ BYTE headerBuffer[ZSTD_FRAMEHEADERSIZE_MAX]; /* tmp buffer to store frame header */
+ size_t lhSize;
+ ZSTD_customMem customMem;
+ void *legacyContext;
+ U32 previousLegacyVersion;
+ U32 legacyVersion;
+ U32 hostageByte;
+}; /* typedef'd to ZSTD_DStream within "zstd.h" */
+
+size_t ZSTD_DStreamWorkspaceBound(size_t maxWindowSize)
+{
+ size_t const blockSize = MIN(maxWindowSize, ZSTD_BLOCKSIZE_ABSOLUTEMAX);
+ size_t const inBuffSize = blockSize;
+ size_t const outBuffSize = maxWindowSize + blockSize + WILDCOPY_OVERLENGTH * 2;
+ return ZSTD_DCtxWorkspaceBound() + ZSTD_ALIGN(sizeof(ZSTD_DStream)) + ZSTD_ALIGN(inBuffSize) + ZSTD_ALIGN(outBuffSize);
+}
+
+static ZSTD_DStream *ZSTD_createDStream_advanced(ZSTD_customMem customMem)
+{
+ ZSTD_DStream *zds;
+
+ if (!customMem.customAlloc || !customMem.customFree)
+ return NULL;
+
+ zds = (ZSTD_DStream *)ZSTD_malloc(sizeof(ZSTD_DStream), customMem);
+ if (zds == NULL)
+ return NULL;
+ memset(zds, 0, sizeof(ZSTD_DStream));
+ memcpy(&zds->customMem, &customMem, sizeof(ZSTD_customMem));
+ zds->dctx = ZSTD_createDCtx_advanced(customMem);
+ if (zds->dctx == NULL) {
+ ZSTD_freeDStream(zds);
+ return NULL;
+ }
+ zds->stage = zdss_init;
+ zds->maxWindowSize = ZSTD_MAXWINDOWSIZE_DEFAULT;
+ return zds;
+}
+
+ZSTD_DStream *ZSTD_initDStream(size_t maxWindowSize, void *workspace, size_t workspaceSize)
+{
+ ZSTD_customMem const stackMem = ZSTD_initStack(workspace, workspaceSize);
+ ZSTD_DStream *zds = ZSTD_createDStream_advanced(stackMem);
+ if (!zds) {
+ return NULL;
+ }
+
+ zds->maxWindowSize = maxWindowSize;
+ zds->stage = zdss_loadHeader;
+ zds->lhSize = zds->inPos = zds->outStart = zds->outEnd = 0;
+ ZSTD_freeDDict(zds->ddictLocal);
+ zds->ddictLocal = NULL;
+ zds->ddict = zds->ddictLocal;
+ zds->legacyVersion = 0;
+ zds->hostageByte = 0;
+
+ {
+ size_t const blockSize = MIN(zds->maxWindowSize, ZSTD_BLOCKSIZE_ABSOLUTEMAX);
+ size_t const neededOutSize = zds->maxWindowSize + blockSize + WILDCOPY_OVERLENGTH * 2;
+
+ zds->inBuff = (char *)ZSTD_malloc(blockSize, zds->customMem);
+ zds->inBuffSize = blockSize;
+ zds->outBuff = (char *)ZSTD_malloc(neededOutSize, zds->customMem);
+ zds->outBuffSize = neededOutSize;
+ if (zds->inBuff == NULL || zds->outBuff == NULL) {
+ ZSTD_freeDStream(zds);
+ return NULL;
+ }
+ }
+ return zds;
+}
+
+ZSTD_DStream *ZSTD_initDStream_usingDDict(size_t maxWindowSize, const ZSTD_DDict *ddict, void *workspace, size_t workspaceSize)
+{
+ ZSTD_DStream *zds = ZSTD_initDStream(maxWindowSize, workspace, workspaceSize);
+ if (zds) {
+ zds->ddict = ddict;
+ }
+ return zds;
+}
+
+size_t ZSTD_freeDStream(ZSTD_DStream *zds)
+{
+ if (zds == NULL)
+ return 0; /* support free on null */
+ {
+ ZSTD_customMem const cMem = zds->customMem;
+ ZSTD_freeDCtx(zds->dctx);
+ zds->dctx = NULL;
+ ZSTD_freeDDict(zds->ddictLocal);
+ zds->ddictLocal = NULL;
+ ZSTD_free(zds->inBuff, cMem);
+ zds->inBuff = NULL;
+ ZSTD_free(zds->outBuff, cMem);
+ zds->outBuff = NULL;
+ ZSTD_free(zds, cMem);
+ return 0;
+ }
+}
+
+/* *** Initialization *** */
+
+size_t ZSTD_DStreamInSize(void) { return ZSTD_BLOCKSIZE_ABSOLUTEMAX + ZSTD_blockHeaderSize; }
+size_t ZSTD_DStreamOutSize(void) { return ZSTD_BLOCKSIZE_ABSOLUTEMAX; }
+
+size_t ZSTD_resetDStream(ZSTD_DStream *zds)
+{
+ zds->stage = zdss_loadHeader;
+ zds->lhSize = zds->inPos = zds->outStart = zds->outEnd = 0;
+ zds->legacyVersion = 0;
+ zds->hostageByte = 0;
+ return ZSTD_frameHeaderSize_prefix;
+}
+
+/* ***** Decompression ***** */
+
+ZSTD_STATIC size_t ZSTD_limitCopy(void *dst, size_t dstCapacity, const void *src, size_t srcSize)
+{
+ size_t const length = MIN(dstCapacity, srcSize);
+ memcpy(dst, src, length);
+ return length;
+}
+
+size_t ZSTD_decompressStream(ZSTD_DStream *zds, ZSTD_outBuffer *output, ZSTD_inBuffer *input)
+{
+ const char *const istart = (const char *)(input->src) + input->pos;
+ const char *const iend = (const char *)(input->src) + input->size;
+ const char *ip = istart;
+ char *const ostart = (char *)(output->dst) + output->pos;
+ char *const oend = (char *)(output->dst) + output->size;
+ char *op = ostart;
+ U32 someMoreWork = 1;
+
+ while (someMoreWork) {
+ switch (zds->stage) {
+ case zdss_init:
+ ZSTD_resetDStream(zds); /* transparent reset on starting decoding a new frame */
+ /* fall-through */
+
+ case zdss_loadHeader: {
+ size_t const hSize = ZSTD_getFrameParams(&zds->fParams, zds->headerBuffer, zds->lhSize);
+ if (ZSTD_isError(hSize))
+ return hSize;
+ if (hSize != 0) { /* need more input */
+ size_t const toLoad = hSize - zds->lhSize; /* if hSize!=0, hSize > zds->lhSize */
+ if (toLoad > (size_t)(iend - ip)) { /* not enough input to load full header */
+ memcpy(zds->headerBuffer + zds->lhSize, ip, iend - ip);
+ zds->lhSize += iend - ip;
+ input->pos = input->size;
+ return (MAX(ZSTD_frameHeaderSize_min, hSize) - zds->lhSize) +
+ ZSTD_blockHeaderSize; /* remaining header bytes + next block header */
+ }
+ memcpy(zds->headerBuffer + zds->lhSize, ip, toLoad);
+ zds->lhSize = hSize;
+ ip += toLoad;
+ break;
+ }
+
+ /* check for single-pass mode opportunity */
+ if (zds->fParams.frameContentSize && zds->fParams.windowSize /* skippable frame if == 0 */
+ && (U64)(size_t)(oend - op) >= zds->fParams.frameContentSize) {
+ size_t const cSize = ZSTD_findFrameCompressedSize(istart, iend - istart);
+ if (cSize <= (size_t)(iend - istart)) {
+ size_t const decompressedSize = ZSTD_decompress_usingDDict(zds->dctx, op, oend - op, istart, cSize, zds->ddict);
+ if (ZSTD_isError(decompressedSize))
+ return decompressedSize;
+ ip = istart + cSize;
+ op += decompressedSize;
+ zds->dctx->expected = 0;
+ zds->stage = zdss_init;
+ someMoreWork = 0;
+ break;
+ }
+ }
+
+ /* Consume header */
+ ZSTD_refDDict(zds->dctx, zds->ddict);
+ {
+ size_t const h1Size = ZSTD_nextSrcSizeToDecompress(zds->dctx); /* == ZSTD_frameHeaderSize_prefix */
+ CHECK_F(ZSTD_decompressContinue(zds->dctx, NULL, 0, zds->headerBuffer, h1Size));
+ {
+ size_t const h2Size = ZSTD_nextSrcSizeToDecompress(zds->dctx);
+ CHECK_F(ZSTD_decompressContinue(zds->dctx, NULL, 0, zds->headerBuffer + h1Size, h2Size));
+ }
+ }
+
+ zds->fParams.windowSize = MAX(zds->fParams.windowSize, 1U << ZSTD_WINDOWLOG_ABSOLUTEMIN);
+ if (zds->fParams.windowSize > zds->maxWindowSize)
+ return ERROR(frameParameter_windowTooLarge);
+
+ /* Buffers are preallocated, but double check */
+ {
+ size_t const blockSize = MIN(zds->maxWindowSize, ZSTD_BLOCKSIZE_ABSOLUTEMAX);
+ size_t const neededOutSize = zds->maxWindowSize + blockSize + WILDCOPY_OVERLENGTH * 2;
+ if (zds->inBuffSize < blockSize) {
+ return ERROR(GENERIC);
+ }
+ if (zds->outBuffSize < neededOutSize) {
+ return ERROR(GENERIC);
+ }
+ zds->blockSize = blockSize;
+ }
+ zds->stage = zdss_read;
+ }
+ /* pass-through */
+
+ case zdss_read: {
+ size_t const neededInSize = ZSTD_nextSrcSizeToDecompress(zds->dctx);
+ if (neededInSize == 0) { /* end of frame */
+ zds->stage = zdss_init;
+ someMoreWork = 0;
+ break;
+ }
+ if ((size_t)(iend - ip) >= neededInSize) { /* decode directly from src */
+ const int isSkipFrame = ZSTD_isSkipFrame(zds->dctx);
+ size_t const decodedSize = ZSTD_decompressContinue(zds->dctx, zds->outBuff + zds->outStart,
+ (isSkipFrame ? 0 : zds->outBuffSize - zds->outStart), ip, neededInSize);
+ if (ZSTD_isError(decodedSize))
+ return decodedSize;
+ ip += neededInSize;
+ if (!decodedSize && !isSkipFrame)
+ break; /* this was just a header */
+ zds->outEnd = zds->outStart + decodedSize;
+ zds->stage = zdss_flush;
+ break;
+ }
+ if (ip == iend) {
+ someMoreWork = 0;
+ break;
+ } /* no more input */
+ zds->stage = zdss_load;
+ /* pass-through */
+ }
+
+ case zdss_load: {
+ size_t const neededInSize = ZSTD_nextSrcSizeToDecompress(zds->dctx);
+ size_t const toLoad = neededInSize - zds->inPos; /* should always be <= remaining space within inBuff */
+ size_t loadedSize;
+ if (toLoad > zds->inBuffSize - zds->inPos)
+ return ERROR(corruption_detected); /* should never happen */
+ loadedSize = ZSTD_limitCopy(zds->inBuff + zds->inPos, toLoad, ip, iend - ip);
+ ip += loadedSize;
+ zds->inPos += loadedSize;
+ if (loadedSize < toLoad) {
+ someMoreWork = 0;
+ break;
+ } /* not enough input, wait for more */
+
+ /* decode loaded input */
+ {
+ const int isSkipFrame = ZSTD_isSkipFrame(zds->dctx);
+ size_t const decodedSize = ZSTD_decompressContinue(zds->dctx, zds->outBuff + zds->outStart, zds->outBuffSize - zds->outStart,
+ zds->inBuff, neededInSize);
+ if (ZSTD_isError(decodedSize))
+ return decodedSize;
+ zds->inPos = 0; /* input is consumed */
+ if (!decodedSize && !isSkipFrame) {
+ zds->stage = zdss_read;
+ break;
+ } /* this was just a header */
+ zds->outEnd = zds->outStart + decodedSize;
+ zds->stage = zdss_flush;
+ /* pass-through */
+ }
+ }
+
+ case zdss_flush: {
+ size_t const toFlushSize = zds->outEnd - zds->outStart;
+ size_t const flushedSize = ZSTD_limitCopy(op, oend - op, zds->outBuff + zds->outStart, toFlushSize);
+ op += flushedSize;
+ zds->outStart += flushedSize;
+ if (flushedSize == toFlushSize) { /* flush completed */
+ zds->stage = zdss_read;
+ if (zds->outStart + zds->blockSize > zds->outBuffSize)
+ zds->outStart = zds->outEnd = 0;
+ break;
+ }
+ /* cannot complete flush */
+ someMoreWork = 0;
+ break;
+ }
+ default:
+ return ERROR(GENERIC); /* impossible */
+ }
+ }
+
+ /* result */
+ input->pos += (size_t)(ip - istart);
+ output->pos += (size_t)(op - ostart);
+ {
+ size_t nextSrcSizeHint = ZSTD_nextSrcSizeToDecompress(zds->dctx);
+ if (!nextSrcSizeHint) { /* frame fully decoded */
+ if (zds->outEnd == zds->outStart) { /* output fully flushed */
+ if (zds->hostageByte) {
+ if (input->pos >= input->size) {
+ zds->stage = zdss_read;
+ return 1;
+ } /* can't release hostage (not present) */
+ input->pos++; /* release hostage */
+ }
+ return 0;
+ }
+ if (!zds->hostageByte) { /* output not fully flushed; keep last byte as hostage; will be released when all output is flushed */
+ input->pos--; /* note : pos > 0, otherwise, impossible to finish reading last block */
+ zds->hostageByte = 1;
+ }
+ return 1;
+ }
+ nextSrcSizeHint += ZSTD_blockHeaderSize * (ZSTD_nextInputType(zds->dctx) == ZSTDnit_block); /* preload header of next block */
+ if (zds->inPos > nextSrcSizeHint)
+ return ERROR(GENERIC); /* should never happen */
+ nextSrcSizeHint -= zds->inPos; /* already loaded*/
+ return nextSrcSizeHint;
+ }
+}
+
+EXPORT_SYMBOL(ZSTD_DCtxWorkspaceBound);
+EXPORT_SYMBOL(ZSTD_initDCtx);
+EXPORT_SYMBOL(ZSTD_decompressDCtx);
+EXPORT_SYMBOL(ZSTD_decompress_usingDict);
+
+EXPORT_SYMBOL(ZSTD_DDictWorkspaceBound);
+EXPORT_SYMBOL(ZSTD_initDDict);
+EXPORT_SYMBOL(ZSTD_decompress_usingDDict);
+
+EXPORT_SYMBOL(ZSTD_DStreamWorkspaceBound);
+EXPORT_SYMBOL(ZSTD_initDStream);
+EXPORT_SYMBOL(ZSTD_initDStream_usingDDict);
+EXPORT_SYMBOL(ZSTD_resetDStream);
+EXPORT_SYMBOL(ZSTD_decompressStream);
+EXPORT_SYMBOL(ZSTD_DStreamInSize);
+EXPORT_SYMBOL(ZSTD_DStreamOutSize);
+
+EXPORT_SYMBOL(ZSTD_findFrameCompressedSize);
+EXPORT_SYMBOL(ZSTD_getFrameContentSize);
+EXPORT_SYMBOL(ZSTD_findDecompressedSize);
+
+EXPORT_SYMBOL(ZSTD_isFrame);
+EXPORT_SYMBOL(ZSTD_getDictID_fromDict);
+EXPORT_SYMBOL(ZSTD_getDictID_fromDDict);
+EXPORT_SYMBOL(ZSTD_getDictID_fromFrame);
+
+EXPORT_SYMBOL(ZSTD_getFrameParams);
+EXPORT_SYMBOL(ZSTD_decompressBegin);
+EXPORT_SYMBOL(ZSTD_decompressBegin_usingDict);
+EXPORT_SYMBOL(ZSTD_copyDCtx);
+EXPORT_SYMBOL(ZSTD_nextSrcSizeToDecompress);
+EXPORT_SYMBOL(ZSTD_decompressContinue);
+EXPORT_SYMBOL(ZSTD_nextInputType);
+
+EXPORT_SYMBOL(ZSTD_decompressBlock);
+EXPORT_SYMBOL(ZSTD_insertBlock);
+
+MODULE_LICENSE("Dual BSD/GPL");
+MODULE_DESCRIPTION("Zstd Decompressor");
diff --git a/lib/zstd/entropy_common.c b/lib/zstd/entropy_common.c
new file mode 100644
index 000000000000..2b0a643c32c4
--- /dev/null
+++ b/lib/zstd/entropy_common.c
@@ -0,0 +1,243 @@
+/*
+ * Common functions of New Generation Entropy library
+ * Copyright (C) 2016, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ */
+
+/* *************************************
+* Dependencies
+***************************************/
+#include "error_private.h" /* ERR_*, ERROR */
+#include "fse.h"
+#include "huf.h"
+#include "mem.h"
+
+/*=== Version ===*/
+unsigned FSE_versionNumber(void) { return FSE_VERSION_NUMBER; }
+
+/*=== Error Management ===*/
+unsigned FSE_isError(size_t code) { return ERR_isError(code); }
+
+unsigned HUF_isError(size_t code) { return ERR_isError(code); }
+
+/*-**************************************************************
+* FSE NCount encoding-decoding
+****************************************************************/
+size_t FSE_readNCount(short *normalizedCounter, unsigned *maxSVPtr, unsigned *tableLogPtr, const void *headerBuffer, size_t hbSize)
+{
+ const BYTE *const istart = (const BYTE *)headerBuffer;
+ const BYTE *const iend = istart + hbSize;
+ const BYTE *ip = istart;
+ int nbBits;
+ int remaining;
+ int threshold;
+ U32 bitStream;
+ int bitCount;
+ unsigned charnum = 0;
+ int previous0 = 0;
+
+ if (hbSize < 4)
+ return ERROR(srcSize_wrong);
+ bitStream = ZSTD_readLE32(ip);
+ nbBits = (bitStream & 0xF) + FSE_MIN_TABLELOG; /* extract tableLog */
+ if (nbBits > FSE_TABLELOG_ABSOLUTE_MAX)
+ return ERROR(tableLog_tooLarge);
+ bitStream >>= 4;
+ bitCount = 4;
+ *tableLogPtr = nbBits;
+ remaining = (1 << nbBits) + 1;
+ threshold = 1 << nbBits;
+ nbBits++;
+
+ while ((remaining > 1) & (charnum <= *maxSVPtr)) {
+ if (previous0) {
+ unsigned n0 = charnum;
+ while ((bitStream & 0xFFFF) == 0xFFFF) {
+ n0 += 24;
+ if (ip < iend - 5) {
+ ip += 2;
+ bitStream = ZSTD_readLE32(ip) >> bitCount;
+ } else {
+ bitStream >>= 16;
+ bitCount += 16;
+ }
+ }
+ while ((bitStream & 3) == 3) {
+ n0 += 3;
+ bitStream >>= 2;
+ bitCount += 2;
+ }
+ n0 += bitStream & 3;
+ bitCount += 2;
+ if (n0 > *maxSVPtr)
+ return ERROR(maxSymbolValue_tooSmall);
+ while (charnum < n0)
+ normalizedCounter[charnum++] = 0;
+ if ((ip <= iend - 7) || (ip + (bitCount >> 3) <= iend - 4)) {
+ ip += bitCount >> 3;
+ bitCount &= 7;
+ bitStream = ZSTD_readLE32(ip) >> bitCount;
+ } else {
+ bitStream >>= 2;
+ }
+ }
+ {
+ int const max = (2 * threshold - 1) - remaining;
+ int count;
+
+ if ((bitStream & (threshold - 1)) < (U32)max) {
+ count = bitStream & (threshold - 1);
+ bitCount += nbBits - 1;
+ } else {
+ count = bitStream & (2 * threshold - 1);
+ if (count >= threshold)
+ count -= max;
+ bitCount += nbBits;
+ }
+
+ count--; /* extra accuracy */
+ remaining -= count < 0 ? -count : count; /* -1 means +1 */
+ normalizedCounter[charnum++] = (short)count;
+ previous0 = !count;
+ while (remaining < threshold) {
+ nbBits--;
+ threshold >>= 1;
+ }
+
+ if ((ip <= iend - 7) || (ip + (bitCount >> 3) <= iend - 4)) {
+ ip += bitCount >> 3;
+ bitCount &= 7;
+ } else {
+ bitCount -= (int)(8 * (iend - 4 - ip));
+ ip = iend - 4;
+ }
+ bitStream = ZSTD_readLE32(ip) >> (bitCount & 31);
+ }
+ } /* while ((remaining>1) & (charnum<=*maxSVPtr)) */
+ if (remaining != 1)
+ return ERROR(corruption_detected);
+ if (bitCount > 32)
+ return ERROR(corruption_detected);
+ *maxSVPtr = charnum - 1;
+
+ ip += (bitCount + 7) >> 3;
+ return ip - istart;
+}
+
+/*! HUF_readStats() :
+ Read compact Huffman tree, saved by HUF_writeCTable().
+ `huffWeight` is destination buffer.
+ `rankStats` is assumed to be a table of at least HUF_TABLELOG_MAX U32.
+ @return : size read from `src` , or an error Code .
+ Note : Needed by HUF_readCTable() and HUF_readDTableX?() .
+*/
+size_t HUF_readStats_wksp(BYTE *huffWeight, size_t hwSize, U32 *rankStats, U32 *nbSymbolsPtr, U32 *tableLogPtr, const void *src, size_t srcSize, void *workspace, size_t workspaceSize)
+{
+ U32 weightTotal;
+ const BYTE *ip = (const BYTE *)src;
+ size_t iSize;
+ size_t oSize;
+
+ if (!srcSize)
+ return ERROR(srcSize_wrong);
+ iSize = ip[0];
+ /* memset(huffWeight, 0, hwSize); */ /* is not necessary, even though some analyzer complain ... */
+
+ if (iSize >= 128) { /* special header */
+ oSize = iSize - 127;
+ iSize = ((oSize + 1) / 2);
+ if (iSize + 1 > srcSize)
+ return ERROR(srcSize_wrong);
+ if (oSize >= hwSize)
+ return ERROR(corruption_detected);
+ ip += 1;
+ {
+ U32 n;
+ for (n = 0; n < oSize; n += 2) {
+ huffWeight[n] = ip[n / 2] >> 4;
+ huffWeight[n + 1] = ip[n / 2] & 15;
+ }
+ }
+ } else { /* header compressed with FSE (normal case) */
+ if (iSize + 1 > srcSize)
+ return ERROR(srcSize_wrong);
+ oSize = FSE_decompress_wksp(huffWeight, hwSize - 1, ip + 1, iSize, 6, workspace, workspaceSize); /* max (hwSize-1) values decoded, as last one is implied */
+ if (FSE_isError(oSize))
+ return oSize;
+ }
+
+ /* collect weight stats */
+ memset(rankStats, 0, (HUF_TABLELOG_MAX + 1) * sizeof(U32));
+ weightTotal = 0;
+ {
+ U32 n;
+ for (n = 0; n < oSize; n++) {
+ if (huffWeight[n] >= HUF_TABLELOG_MAX)
+ return ERROR(corruption_detected);
+ rankStats[huffWeight[n]]++;
+ weightTotal += (1 << huffWeight[n]) >> 1;
+ }
+ }
+ if (weightTotal == 0)
+ return ERROR(corruption_detected);
+
+ /* get last non-null symbol weight (implied, total must be 2^n) */
+ {
+ U32 const tableLog = BIT_highbit32(weightTotal) + 1;
+ if (tableLog > HUF_TABLELOG_MAX)
+ return ERROR(corruption_detected);
+ *tableLogPtr = tableLog;
+ /* determine last weight */
+ {
+ U32 const total = 1 << tableLog;
+ U32 const rest = total - weightTotal;
+ U32 const verif = 1 << BIT_highbit32(rest);
+ U32 const lastWeight = BIT_highbit32(rest) + 1;
+ if (verif != rest)
+ return ERROR(corruption_detected); /* last value must be a clean power of 2 */
+ huffWeight[oSize] = (BYTE)lastWeight;
+ rankStats[lastWeight]++;
+ }
+ }
+
+ /* check tree construction validity */
+ if ((rankStats[1] < 2) || (rankStats[1] & 1))
+ return ERROR(corruption_detected); /* by construction : at least 2 elts of rank 1, must be even */
+
+ /* results */
+ *nbSymbolsPtr = (U32)(oSize + 1);
+ return iSize + 1;
+}
diff --git a/lib/zstd/error_private.h b/lib/zstd/error_private.h
new file mode 100644
index 000000000000..1a60b31f706c
--- /dev/null
+++ b/lib/zstd/error_private.h
@@ -0,0 +1,53 @@
+/**
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of https://github.com/facebook/zstd.
+ * An additional grant of patent rights can be found in the PATENTS file in the
+ * same directory.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ */
+
+/* Note : this module is expected to remain private, do not expose it */
+
+#ifndef ERROR_H_MODULE
+#define ERROR_H_MODULE
+
+/* ****************************************
+* Dependencies
+******************************************/
+#include <linux/types.h> /* size_t */
+#include <linux/zstd.h> /* enum list */
+
+/* ****************************************
+* Compiler-specific
+******************************************/
+#define ERR_STATIC static __attribute__((unused))
+
+/*-****************************************
+* Customization (error_public.h)
+******************************************/
+typedef ZSTD_ErrorCode ERR_enum;
+#define PREFIX(name) ZSTD_error_##name
+
+/*-****************************************
+* Error codes handling
+******************************************/
+#define ERROR(name) ((size_t)-PREFIX(name))
+
+ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
+
+ERR_STATIC ERR_enum ERR_getErrorCode(size_t code)
+{
+ if (!ERR_isError(code))
+ return (ERR_enum)0;
+ return (ERR_enum)(0 - code);
+}
+
+#endif /* ERROR_H_MODULE */
diff --git a/lib/zstd/fse.h b/lib/zstd/fse.h
new file mode 100644
index 000000000000..7460ab04b191
--- /dev/null
+++ b/lib/zstd/fse.h
@@ -0,0 +1,575 @@
+/*
+ * FSE : Finite State Entropy codec
+ * Public Prototypes declaration
+ * Copyright (C) 2013-2016, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ */
+#ifndef FSE_H
+#define FSE_H
+
+/*-*****************************************
+* Dependencies
+******************************************/
+#include <linux/types.h> /* size_t, ptrdiff_t */
+
+/*-*****************************************
+* FSE_PUBLIC_API : control library symbols visibility
+******************************************/
+#define FSE_PUBLIC_API
+
+/*------ Version ------*/
+#define FSE_VERSION_MAJOR 0
+#define FSE_VERSION_MINOR 9
+#define FSE_VERSION_RELEASE 0
+
+#define FSE_LIB_VERSION FSE_VERSION_MAJOR.FSE_VERSION_MINOR.FSE_VERSION_RELEASE
+#define FSE_QUOTE(str) #str
+#define FSE_EXPAND_AND_QUOTE(str) FSE_QUOTE(str)
+#define FSE_VERSION_STRING FSE_EXPAND_AND_QUOTE(FSE_LIB_VERSION)
+
+#define FSE_VERSION_NUMBER (FSE_VERSION_MAJOR * 100 * 100 + FSE_VERSION_MINOR * 100 + FSE_VERSION_RELEASE)
+FSE_PUBLIC_API unsigned FSE_versionNumber(void); /**< library version number; to be used when checking dll version */
+
+/*-*****************************************
+* Tool functions
+******************************************/
+FSE_PUBLIC_API size_t FSE_compressBound(size_t size); /* maximum compressed size */
+
+/* Error Management */
+FSE_PUBLIC_API unsigned FSE_isError(size_t code); /* tells if a return value is an error code */
+
+/*-*****************************************
+* FSE detailed API
+******************************************/
+/*!
+FSE_compress() does the following:
+1. count symbol occurrence from source[] into table count[]
+2. normalize counters so that sum(count[]) == Power_of_2 (2^tableLog)
+3. save normalized counters to memory buffer using writeNCount()
+4. build encoding table 'CTable' from normalized counters
+5. encode the data stream using encoding table 'CTable'
+
+FSE_decompress() does the following:
+1. read normalized counters with readNCount()
+2. build decoding table 'DTable' from normalized counters
+3. decode the data stream using decoding table 'DTable'
+
+The following API allows targeting specific sub-functions for advanced tasks.
+For example, it's possible to compress several blocks using the same 'CTable',
+or to save and provide normalized distribution using external method.
+*/
+
+/* *** COMPRESSION *** */
+/*! FSE_optimalTableLog():
+ dynamically downsize 'tableLog' when conditions are met.
+ It saves CPU time, by using smaller tables, while preserving or even improving compression ratio.
+ @return : recommended tableLog (necessarily <= 'maxTableLog') */
+FSE_PUBLIC_API unsigned FSE_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue);
+
+/*! FSE_normalizeCount():
+ normalize counts so that sum(count[]) == Power_of_2 (2^tableLog)
+ 'normalizedCounter' is a table of short, of minimum size (maxSymbolValue+1).
+ @return : tableLog,
+ or an errorCode, which can be tested using FSE_isError() */
+FSE_PUBLIC_API size_t FSE_normalizeCount(short *normalizedCounter, unsigned tableLog, const unsigned *count, size_t srcSize, unsigned maxSymbolValue);
+
+/*! FSE_NCountWriteBound():
+ Provides the maximum possible size of an FSE normalized table, given 'maxSymbolValue' and 'tableLog'.
+ Typically useful for allocation purpose. */
+FSE_PUBLIC_API size_t FSE_NCountWriteBound(unsigned maxSymbolValue, unsigned tableLog);
+
+/*! FSE_writeNCount():
+ Compactly save 'normalizedCounter' into 'buffer'.
+ @return : size of the compressed table,
+ or an errorCode, which can be tested using FSE_isError(). */
+FSE_PUBLIC_API size_t FSE_writeNCount(void *buffer, size_t bufferSize, const short *normalizedCounter, unsigned maxSymbolValue, unsigned tableLog);
+
+/*! Constructor and Destructor of FSE_CTable.
+ Note that FSE_CTable size depends on 'tableLog' and 'maxSymbolValue' */
+typedef unsigned FSE_CTable; /* don't allocate that. It's only meant to be more restrictive than void* */
+
+/*! FSE_compress_usingCTable():
+ Compress `src` using `ct` into `dst` which must be already allocated.
+ @return : size of compressed data (<= `dstCapacity`),
+ or 0 if compressed data could not fit into `dst`,
+ or an errorCode, which can be tested using FSE_isError() */
+FSE_PUBLIC_API size_t FSE_compress_usingCTable(void *dst, size_t dstCapacity, const void *src, size_t srcSize, const FSE_CTable *ct);
+
+/*!
+Tutorial :
+----------
+The first step is to count all symbols. FSE_count() does this job very fast.
+Result will be saved into 'count', a table of unsigned int, which must be already allocated, and have 'maxSymbolValuePtr[0]+1' cells.
+'src' is a table of bytes of size 'srcSize'. All values within 'src' MUST be <= maxSymbolValuePtr[0]
+maxSymbolValuePtr[0] will be updated, with its real value (necessarily <= original value)
+FSE_count() will return the number of occurrence of the most frequent symbol.
+This can be used to know if there is a single symbol within 'src', and to quickly evaluate its compressibility.
+If there is an error, the function will return an ErrorCode (which can be tested using FSE_isError()).
+
+The next step is to normalize the frequencies.
+FSE_normalizeCount() will ensure that sum of frequencies is == 2 ^'tableLog'.
+It also guarantees a minimum of 1 to any Symbol with frequency >= 1.
+You can use 'tableLog'==0 to mean "use default tableLog value".
+If you are unsure of which tableLog value to use, you can ask FSE_optimalTableLog(),
+which will provide the optimal valid tableLog given sourceSize, maxSymbolValue, and a user-defined maximum (0 means "default").
+
+The result of FSE_normalizeCount() will be saved into a table,
+called 'normalizedCounter', which is a table of signed short.
+'normalizedCounter' must be already allocated, and have at least 'maxSymbolValue+1' cells.
+The return value is tableLog if everything proceeded as expected.
+It is 0 if there is a single symbol within distribution.
+If there is an error (ex: invalid tableLog value), the function will return an ErrorCode (which can be tested using FSE_isError()).
+
+'normalizedCounter' can be saved in a compact manner to a memory area using FSE_writeNCount().
+'buffer' must be already allocated.
+For guaranteed success, buffer size must be at least FSE_headerBound().
+The result of the function is the number of bytes written into 'buffer'.
+If there is an error, the function will return an ErrorCode (which can be tested using FSE_isError(); ex : buffer size too small).
+
+'normalizedCounter' can then be used to create the compression table 'CTable'.
+The space required by 'CTable' must be already allocated, using FSE_createCTable().
+You can then use FSE_buildCTable() to fill 'CTable'.
+If there is an error, both functions will return an ErrorCode (which can be tested using FSE_isError()).
+
+'CTable' can then be used to compress 'src', with FSE_compress_usingCTable().
+Similar to FSE_count(), the convention is that 'src' is assumed to be a table of char of size 'srcSize'
+The function returns the size of compressed data (without header), necessarily <= `dstCapacity`.
+If it returns '0', compressed data could not fit into 'dst'.
+If there is an error, the function will return an ErrorCode (which can be tested using FSE_isError()).
+*/
+
+/* *** DECOMPRESSION *** */
+
+/*! FSE_readNCount():
+ Read compactly saved 'normalizedCounter' from 'rBuffer'.
+ @return : size read from 'rBuffer',
+ or an errorCode, which can be tested using FSE_isError().
+ maxSymbolValuePtr[0] and tableLogPtr[0] will also be updated with their respective values */
+FSE_PUBLIC_API size_t FSE_readNCount(short *normalizedCounter, unsigned *maxSymbolValuePtr, unsigned *tableLogPtr, const void *rBuffer, size_t rBuffSize);
+
+/*! Constructor and Destructor of FSE_DTable.
+ Note that its size depends on 'tableLog' */
+typedef unsigned FSE_DTable; /* don't allocate that. It's just a way to be more restrictive than void* */
+
+/*! FSE_buildDTable():
+ Builds 'dt', which must be already allocated, using FSE_createDTable().
+ return : 0, or an errorCode, which can be tested using FSE_isError() */
+FSE_PUBLIC_API size_t FSE_buildDTable_wksp(FSE_DTable *dt, const short *normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void *workspace, size_t workspaceSize);
+
+/*! FSE_decompress_usingDTable():
+ Decompress compressed source `cSrc` of size `cSrcSize` using `dt`
+ into `dst` which must be already allocated.
+ @return : size of regenerated data (necessarily <= `dstCapacity`),
+ or an errorCode, which can be tested using FSE_isError() */
+FSE_PUBLIC_API size_t FSE_decompress_usingDTable(void *dst, size_t dstCapacity, const void *cSrc, size_t cSrcSize, const FSE_DTable *dt);
+
+/*!
+Tutorial :
+----------
+(Note : these functions only decompress FSE-compressed blocks.
+ If block is uncompressed, use memcpy() instead
+ If block is a single repeated byte, use memset() instead )
+
+The first step is to obtain the normalized frequencies of symbols.
+This can be performed by FSE_readNCount() if it was saved using FSE_writeNCount().
+'normalizedCounter' must be already allocated, and have at least 'maxSymbolValuePtr[0]+1' cells of signed short.
+In practice, that means it's necessary to know 'maxSymbolValue' beforehand,
+or size the table to handle worst case situations (typically 256).
+FSE_readNCount() will provide 'tableLog' and 'maxSymbolValue'.
+The result of FSE_readNCount() is the number of bytes read from 'rBuffer'.
+Note that 'rBufferSize' must be at least 4 bytes, even if useful information is less than that.
+If there is an error, the function will return an error code, which can be tested using FSE_isError().
+
+The next step is to build the decompression tables 'FSE_DTable' from 'normalizedCounter'.
+This is performed by the function FSE_buildDTable().
+The space required by 'FSE_DTable' must be already allocated using FSE_createDTable().
+If there is an error, the function will return an error code, which can be tested using FSE_isError().
+
+`FSE_DTable` can then be used to decompress `cSrc`, with FSE_decompress_usingDTable().
+`cSrcSize` must be strictly correct, otherwise decompression will fail.
+FSE_decompress_usingDTable() result will tell how many bytes were regenerated (<=`dstCapacity`).
+If there is an error, the function will return an error code, which can be tested using FSE_isError(). (ex: dst buffer too small)
+*/
+
+/* *** Dependency *** */
+#include "bitstream.h"
+
+/* *****************************************
+* Static allocation
+*******************************************/
+/* FSE buffer bounds */
+#define FSE_NCOUNTBOUND 512
+#define FSE_BLOCKBOUND(size) (size + (size >> 7))
+#define FSE_COMPRESSBOUND(size) (FSE_NCOUNTBOUND + FSE_BLOCKBOUND(size)) /* Macro version, useful for static allocation */
+
+/* It is possible to statically allocate FSE CTable/DTable as a table of FSE_CTable/FSE_DTable using below macros */
+#define FSE_CTABLE_SIZE_U32(maxTableLog, maxSymbolValue) (1 + (1 << (maxTableLog - 1)) + ((maxSymbolValue + 1) * 2))
+#define FSE_DTABLE_SIZE_U32(maxTableLog) (1 + (1 << maxTableLog))
+
+/* *****************************************
+* FSE advanced API
+*******************************************/
+/* FSE_count_wksp() :
+ * Same as FSE_count(), but using an externally provided scratch buffer.
+ * `workSpace` size must be table of >= `1024` unsigned
+ */
+size_t FSE_count_wksp(unsigned *count, unsigned *maxSymbolValuePtr, const void *source, size_t sourceSize, unsigned *workSpace);
+
+/* FSE_countFast_wksp() :
+ * Same as FSE_countFast(), but using an externally provided scratch buffer.
+ * `workSpace` must be a table of minimum `1024` unsigned
+ */
+size_t FSE_countFast_wksp(unsigned *count, unsigned *maxSymbolValuePtr, const void *src, size_t srcSize, unsigned *workSpace);
+
+/*! FSE_count_simple
+ * Same as FSE_countFast(), but does not use any additional memory (not even on stack).
+ * This function is unsafe, and will segfault if any value within `src` is `> *maxSymbolValuePtr` (presuming it's also the size of `count`).
+*/
+size_t FSE_count_simple(unsigned *count, unsigned *maxSymbolValuePtr, const void *src, size_t srcSize);
+
+unsigned FSE_optimalTableLog_internal(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue, unsigned minus);
+/**< same as FSE_optimalTableLog(), which used `minus==2` */
+
+size_t FSE_buildCTable_raw(FSE_CTable *ct, unsigned nbBits);
+/**< build a fake FSE_CTable, designed for a flat distribution, where each symbol uses nbBits */
+
+size_t FSE_buildCTable_rle(FSE_CTable *ct, unsigned char symbolValue);
+/**< build a fake FSE_CTable, designed to compress always the same symbolValue */
+
+/* FSE_buildCTable_wksp() :
+ * Same as FSE_buildCTable(), but using an externally allocated scratch buffer (`workSpace`).
+ * `wkspSize` must be >= `(1<<tableLog)`.
+ */
+size_t FSE_buildCTable_wksp(FSE_CTable *ct, const short *normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void *workSpace, size_t wkspSize);
+
+size_t FSE_buildDTable_raw(FSE_DTable *dt, unsigned nbBits);
+/**< build a fake FSE_DTable, designed to read a flat distribution where each symbol uses nbBits */
+
+size_t FSE_buildDTable_rle(FSE_DTable *dt, unsigned char symbolValue);
+/**< build a fake FSE_DTable, designed to always generate the same symbolValue */
+
+size_t FSE_decompress_wksp(void *dst, size_t dstCapacity, const void *cSrc, size_t cSrcSize, unsigned maxLog, void *workspace, size_t workspaceSize);
+/**< same as FSE_decompress(), using an externally allocated `workSpace` produced with `FSE_DTABLE_SIZE_U32(maxLog)` */
+
+/* *****************************************
+* FSE symbol compression API
+*******************************************/
+/*!
+ This API consists of small unitary functions, which highly benefit from being inlined.
+ Hence their body are included in next section.
+*/
+typedef struct {
+ ptrdiff_t value;
+ const void *stateTable;
+ const void *symbolTT;
+ unsigned stateLog;
+} FSE_CState_t;
+
+static void FSE_initCState(FSE_CState_t *CStatePtr, const FSE_CTable *ct);
+
+static void FSE_encodeSymbol(BIT_CStream_t *bitC, FSE_CState_t *CStatePtr, unsigned symbol);
+
+static void FSE_flushCState(BIT_CStream_t *bitC, const FSE_CState_t *CStatePtr);
+
+/**<
+These functions are inner components of FSE_compress_usingCTable().
+They allow the creation of custom streams, mixing multiple tables and bit sources.
+
+A key property to keep in mind is that encoding and decoding are done **in reverse direction**.
+So the first symbol you will encode is the last you will decode, like a LIFO stack.
+
+You will need a few variables to track your CStream. They are :
+
+FSE_CTable ct; // Provided by FSE_buildCTable()
+BIT_CStream_t bitStream; // bitStream tracking structure
+FSE_CState_t state; // State tracking structure (can have several)
+
+
+The first thing to do is to init bitStream and state.
+ size_t errorCode = BIT_initCStream(&bitStream, dstBuffer, maxDstSize);
+ FSE_initCState(&state, ct);
+
+Note that BIT_initCStream() can produce an error code, so its result should be tested, using FSE_isError();
+You can then encode your input data, byte after byte.
+FSE_encodeSymbol() outputs a maximum of 'tableLog' bits at a time.
+Remember decoding will be done in reverse direction.
+ FSE_encodeByte(&bitStream, &state, symbol);
+
+At any time, you can also add any bit sequence.
+Note : maximum allowed nbBits is 25, for compatibility with 32-bits decoders
+ BIT_addBits(&bitStream, bitField, nbBits);
+
+The above methods don't commit data to memory, they just store it into local register, for speed.
+Local register size is 64-bits on 64-bits systems, 32-bits on 32-bits systems (size_t).
+Writing data to memory is a manual operation, performed by the flushBits function.
+ BIT_flushBits(&bitStream);
+
+Your last FSE encoding operation shall be to flush your last state value(s).
+ FSE_flushState(&bitStream, &state);
+
+Finally, you must close the bitStream.
+The function returns the size of CStream in bytes.
+If data couldn't fit into dstBuffer, it will return a 0 ( == not compressible)
+If there is an error, it returns an errorCode (which can be tested using FSE_isError()).
+ size_t size = BIT_closeCStream(&bitStream);
+*/
+
+/* *****************************************
+* FSE symbol decompression API
+*******************************************/
+typedef struct {
+ size_t state;
+ const void *table; /* precise table may vary, depending on U16 */
+} FSE_DState_t;
+
+static void FSE_initDState(FSE_DState_t *DStatePtr, BIT_DStream_t *bitD, const FSE_DTable *dt);
+
+static unsigned char FSE_decodeSymbol(FSE_DState_t *DStatePtr, BIT_DStream_t *bitD);
+
+static unsigned FSE_endOfDState(const FSE_DState_t *DStatePtr);
+
+/**<
+Let's now decompose FSE_decompress_usingDTable() into its unitary components.
+You will decode FSE-encoded symbols from the bitStream,
+and also any other bitFields you put in, **in reverse order**.
+
+You will need a few variables to track your bitStream. They are :
+
+BIT_DStream_t DStream; // Stream context
+FSE_DState_t DState; // State context. Multiple ones are possible
+FSE_DTable* DTablePtr; // Decoding table, provided by FSE_buildDTable()
+
+The first thing to do is to init the bitStream.
+ errorCode = BIT_initDStream(&DStream, srcBuffer, srcSize);
+
+You should then retrieve your initial state(s)
+(in reverse flushing order if you have several ones) :
+ errorCode = FSE_initDState(&DState, &DStream, DTablePtr);
+
+You can then decode your data, symbol after symbol.
+For information the maximum number of bits read by FSE_decodeSymbol() is 'tableLog'.
+Keep in mind that symbols are decoded in reverse order, like a LIFO stack (last in, first out).
+ unsigned char symbol = FSE_decodeSymbol(&DState, &DStream);
+
+You can retrieve any bitfield you eventually stored into the bitStream (in reverse order)
+Note : maximum allowed nbBits is 25, for 32-bits compatibility
+ size_t bitField = BIT_readBits(&DStream, nbBits);
+
+All above operations only read from local register (which size depends on size_t).
+Refueling the register from memory is manually performed by the reload method.
+ endSignal = FSE_reloadDStream(&DStream);
+
+BIT_reloadDStream() result tells if there is still some more data to read from DStream.
+BIT_DStream_unfinished : there is still some data left into the DStream.
+BIT_DStream_endOfBuffer : Dstream reached end of buffer. Its container may no longer be completely filled.
+BIT_DStream_completed : Dstream reached its exact end, corresponding in general to decompression completed.
+BIT_DStream_tooFar : Dstream went too far. Decompression result is corrupted.
+
+When reaching end of buffer (BIT_DStream_endOfBuffer), progress slowly, notably if you decode multiple symbols per loop,
+to properly detect the exact end of stream.
+After each decoded symbol, check if DStream is fully consumed using this simple test :
+ BIT_reloadDStream(&DStream) >= BIT_DStream_completed
+
+When it's done, verify decompression is fully completed, by checking both DStream and the relevant states.
+Checking if DStream has reached its end is performed by :
+ BIT_endOfDStream(&DStream);
+Check also the states. There might be some symbols left there, if some high probability ones (>50%) are possible.
+ FSE_endOfDState(&DState);
+*/
+
+/* *****************************************
+* FSE unsafe API
+*******************************************/
+static unsigned char FSE_decodeSymbolFast(FSE_DState_t *DStatePtr, BIT_DStream_t *bitD);
+/* faster, but works only if nbBits is always >= 1 (otherwise, result will be corrupted) */
+
+/* *****************************************
+* Implementation of inlined functions
+*******************************************/
+typedef struct {
+ int deltaFindState;
+ U32 deltaNbBits;
+} FSE_symbolCompressionTransform; /* total 8 bytes */
+
+ZSTD_STATIC void FSE_initCState(FSE_CState_t *statePtr, const FSE_CTable *ct)
+{
+ const void *ptr = ct;
+ const U16 *u16ptr = (const U16 *)ptr;
+ const U32 tableLog = ZSTD_read16(ptr);
+ statePtr->value = (ptrdiff_t)1 << tableLog;
+ statePtr->stateTable = u16ptr + 2;
+ statePtr->symbolTT = ((const U32 *)ct + 1 + (tableLog ? (1 << (tableLog - 1)) : 1));
+ statePtr->stateLog = tableLog;
+}
+
+/*! FSE_initCState2() :
+* Same as FSE_initCState(), but the first symbol to include (which will be the last to be read)
+* uses the smallest state value possible, saving the cost of this symbol */
+ZSTD_STATIC void FSE_initCState2(FSE_CState_t *statePtr, const FSE_CTable *ct, U32 symbol)
+{
+ FSE_initCState(statePtr, ct);
+ {
+ const FSE_symbolCompressionTransform symbolTT = ((const FSE_symbolCompressionTransform *)(statePtr->symbolTT))[symbol];
+ const U16 *stateTable = (const U16 *)(statePtr->stateTable);
+ U32 nbBitsOut = (U32)((symbolTT.deltaNbBits + (1 << 15)) >> 16);
+ statePtr->value = (nbBitsOut << 16) - symbolTT.deltaNbBits;
+ statePtr->value = stateTable[(statePtr->value >> nbBitsOut) + symbolTT.deltaFindState];
+ }
+}
+
+ZSTD_STATIC void FSE_encodeSymbol(BIT_CStream_t *bitC, FSE_CState_t *statePtr, U32 symbol)
+{
+ const FSE_symbolCompressionTransform symbolTT = ((const FSE_symbolCompressionTransform *)(statePtr->symbolTT))[symbol];
+ const U16 *const stateTable = (const U16 *)(statePtr->stateTable);
+ U32 nbBitsOut = (U32)((statePtr->value + symbolTT.deltaNbBits) >> 16);
+ BIT_addBits(bitC, statePtr->value, nbBitsOut);
+ statePtr->value = stateTable[(statePtr->value >> nbBitsOut) + symbolTT.deltaFindState];
+}
+
+ZSTD_STATIC void FSE_flushCState(BIT_CStream_t *bitC, const FSE_CState_t *statePtr)
+{
+ BIT_addBits(bitC, statePtr->value, statePtr->stateLog);
+ BIT_flushBits(bitC);
+}
+
+/* ====== Decompression ====== */
+
+typedef struct {
+ U16 tableLog;
+ U16 fastMode;
+} FSE_DTableHeader; /* sizeof U32 */
+
+typedef struct {
+ unsigned short newState;
+ unsigned char symbol;
+ unsigned char nbBits;
+} FSE_decode_t; /* size == U32 */
+
+ZSTD_STATIC void FSE_initDState(FSE_DState_t *DStatePtr, BIT_DStream_t *bitD, const FSE_DTable *dt)
+{
+ const void *ptr = dt;
+ const FSE_DTableHeader *const DTableH = (const FSE_DTableHeader *)ptr;
+ DStatePtr->state = BIT_readBits(bitD, DTableH->tableLog);
+ BIT_reloadDStream(bitD);
+ DStatePtr->table = dt + 1;
+}
+
+ZSTD_STATIC BYTE FSE_peekSymbol(const FSE_DState_t *DStatePtr)
+{
+ FSE_decode_t const DInfo = ((const FSE_decode_t *)(DStatePtr->table))[DStatePtr->state];
+ return DInfo.symbol;
+}
+
+ZSTD_STATIC void FSE_updateState(FSE_DState_t *DStatePtr, BIT_DStream_t *bitD)
+{
+ FSE_decode_t const DInfo = ((const FSE_decode_t *)(DStatePtr->table))[DStatePtr->state];
+ U32 const nbBits = DInfo.nbBits;
+ size_t const lowBits = BIT_readBits(bitD, nbBits);
+ DStatePtr->state = DInfo.newState + lowBits;
+}
+
+ZSTD_STATIC BYTE FSE_decodeSymbol(FSE_DState_t *DStatePtr, BIT_DStream_t *bitD)
+{
+ FSE_decode_t const DInfo = ((const FSE_decode_t *)(DStatePtr->table))[DStatePtr->state];
+ U32 const nbBits = DInfo.nbBits;
+ BYTE const symbol = DInfo.symbol;
+ size_t const lowBits = BIT_readBits(bitD, nbBits);
+
+ DStatePtr->state = DInfo.newState + lowBits;
+ return symbol;
+}
+
+/*! FSE_decodeSymbolFast() :
+ unsafe, only works if no symbol has a probability > 50% */
+ZSTD_STATIC BYTE FSE_decodeSymbolFast(FSE_DState_t *DStatePtr, BIT_DStream_t *bitD)
+{
+ FSE_decode_t const DInfo = ((const FSE_decode_t *)(DStatePtr->table))[DStatePtr->state];
+ U32 const nbBits = DInfo.nbBits;
+ BYTE const symbol = DInfo.symbol;
+ size_t const lowBits = BIT_readBitsFast(bitD, nbBits);
+
+ DStatePtr->state = DInfo.newState + lowBits;
+ return symbol;
+}
+
+ZSTD_STATIC unsigned FSE_endOfDState(const FSE_DState_t *DStatePtr) { return DStatePtr->state == 0; }
+
+/* **************************************************************
+* Tuning parameters
+****************************************************************/
+/*!MEMORY_USAGE :
+* Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
+* Increasing memory usage improves compression ratio
+* Reduced memory usage can improve speed, due to cache effect
+* Recommended max value is 14, for 16KB, which nicely fits into Intel x86 L1 cache */
+#ifndef FSE_MAX_MEMORY_USAGE
+#define FSE_MAX_MEMORY_USAGE 14
+#endif
+#ifndef FSE_DEFAULT_MEMORY_USAGE
+#define FSE_DEFAULT_MEMORY_USAGE 13
+#endif
+
+/*!FSE_MAX_SYMBOL_VALUE :
+* Maximum symbol value authorized.
+* Required for proper stack allocation */
+#ifndef FSE_MAX_SYMBOL_VALUE
+#define FSE_MAX_SYMBOL_VALUE 255
+#endif
+
+/* **************************************************************
+* template functions type & suffix
+****************************************************************/
+#define FSE_FUNCTION_TYPE BYTE
+#define FSE_FUNCTION_EXTENSION
+#define FSE_DECODE_TYPE FSE_decode_t
+
+/* ***************************************************************
+* Constants
+*****************************************************************/
+#define FSE_MAX_TABLELOG (FSE_MAX_MEMORY_USAGE - 2)
+#define FSE_MAX_TABLESIZE (1U << FSE_MAX_TABLELOG)
+#define FSE_MAXTABLESIZE_MASK (FSE_MAX_TABLESIZE - 1)
+#define FSE_DEFAULT_TABLELOG (FSE_DEFAULT_MEMORY_USAGE - 2)
+#define FSE_MIN_TABLELOG 5
+
+#define FSE_TABLELOG_ABSOLUTE_MAX 15
+#if FSE_MAX_TABLELOG > FSE_TABLELOG_ABSOLUTE_MAX
+#error "FSE_MAX_TABLELOG > FSE_TABLELOG_ABSOLUTE_MAX is not supported"
+#endif
+
+#define FSE_TABLESTEP(tableSize) ((tableSize >> 1) + (tableSize >> 3) + 3)
+
+#endif /* FSE_H */
diff --git a/lib/zstd/fse_compress.c b/lib/zstd/fse_compress.c
new file mode 100644
index 000000000000..ef3d1741d532
--- /dev/null
+++ b/lib/zstd/fse_compress.c
@@ -0,0 +1,795 @@
+/*
+ * FSE : Finite State Entropy encoder
+ * Copyright (C) 2013-2015, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ */
+
+/* **************************************************************
+* Compiler specifics
+****************************************************************/
+#define FORCE_INLINE static __always_inline
+
+/* **************************************************************
+* Includes
+****************************************************************/
+#include "bitstream.h"
+#include "fse.h"
+#include <linux/compiler.h>
+#include <linux/kernel.h>
+#include <linux/math64.h>
+#include <linux/string.h> /* memcpy, memset */
+
+/* **************************************************************
+* Error Management
+****************************************************************/
+#define FSE_STATIC_ASSERT(c) \
+ { \
+ enum { FSE_static_assert = 1 / (int)(!!(c)) }; \
+ } /* use only *after* variable declarations */
+
+/* **************************************************************
+* Templates
+****************************************************************/
+/*
+ designed to be included
+ for type-specific functions (template emulation in C)
+ Objective is to write these functions only once, for improved maintenance
+*/
+
+/* safety checks */
+#ifndef FSE_FUNCTION_EXTENSION
+#error "FSE_FUNCTION_EXTENSION must be defined"
+#endif
+#ifndef FSE_FUNCTION_TYPE
+#error "FSE_FUNCTION_TYPE must be defined"
+#endif
+
+/* Function names */
+#define FSE_CAT(X, Y) X##Y
+#define FSE_FUNCTION_NAME(X, Y) FSE_CAT(X, Y)
+#define FSE_TYPE_NAME(X, Y) FSE_CAT(X, Y)
+
+/* Function templates */
+
+/* FSE_buildCTable_wksp() :
+ * Same as FSE_buildCTable(), but using an externally allocated scratch buffer (`workSpace`).
+ * wkspSize should be sized to handle worst case situation, which is `1<<max_tableLog * sizeof(FSE_FUNCTION_TYPE)`
+ * workSpace must also be properly aligned with FSE_FUNCTION_TYPE requirements
+ */
+size_t FSE_buildCTable_wksp(FSE_CTable *ct, const short *normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void *workspace, size_t workspaceSize)
+{
+ U32 const tableSize = 1 << tableLog;
+ U32 const tableMask = tableSize - 1;
+ void *const ptr = ct;
+ U16 *const tableU16 = ((U16 *)ptr) + 2;
+ void *const FSCT = ((U32 *)ptr) + 1 /* header */ + (tableLog ? tableSize >> 1 : 1);
+ FSE_symbolCompressionTransform *const symbolTT = (FSE_symbolCompressionTransform *)(FSCT);
+ U32 const step = FSE_TABLESTEP(tableSize);
+ U32 highThreshold = tableSize - 1;
+
+ U32 *cumul;
+ FSE_FUNCTION_TYPE *tableSymbol;
+ size_t spaceUsed32 = 0;
+
+ cumul = (U32 *)workspace + spaceUsed32;
+ spaceUsed32 += FSE_MAX_SYMBOL_VALUE + 2;
+ tableSymbol = (FSE_FUNCTION_TYPE *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += ALIGN(sizeof(FSE_FUNCTION_TYPE) * ((size_t)1 << tableLog), sizeof(U32)) >> 2;
+
+ if ((spaceUsed32 << 2) > workspaceSize)
+ return ERROR(tableLog_tooLarge);
+ workspace = (U32 *)workspace + spaceUsed32;
+ workspaceSize -= (spaceUsed32 << 2);
+
+ /* CTable header */
+ tableU16[-2] = (U16)tableLog;
+ tableU16[-1] = (U16)maxSymbolValue;
+
+ /* For explanations on how to distribute symbol values over the table :
+ * http://fastcompression.blogspot.fr/2014/02/fse-distributing-symbol-values.html */
+
+ /* symbol start positions */
+ {
+ U32 u;
+ cumul[0] = 0;
+ for (u = 1; u <= maxSymbolValue + 1; u++) {
+ if (normalizedCounter[u - 1] == -1) { /* Low proba symbol */
+ cumul[u] = cumul[u - 1] + 1;
+ tableSymbol[highThreshold--] = (FSE_FUNCTION_TYPE)(u - 1);
+ } else {
+ cumul[u] = cumul[u - 1] + normalizedCounter[u - 1];
+ }
+ }
+ cumul[maxSymbolValue + 1] = tableSize + 1;
+ }
+
+ /* Spread symbols */
+ {
+ U32 position = 0;
+ U32 symbol;
+ for (symbol = 0; symbol <= maxSymbolValue; symbol++) {
+ int nbOccurences;
+ for (nbOccurences = 0; nbOccurences < normalizedCounter[symbol]; nbOccurences++) {
+ tableSymbol[position] = (FSE_FUNCTION_TYPE)symbol;
+ position = (position + step) & tableMask;
+ while (position > highThreshold)
+ position = (position + step) & tableMask; /* Low proba area */
+ }
+ }
+
+ if (position != 0)
+ return ERROR(GENERIC); /* Must have gone through all positions */
+ }
+
+ /* Build table */
+ {
+ U32 u;
+ for (u = 0; u < tableSize; u++) {
+ FSE_FUNCTION_TYPE s = tableSymbol[u]; /* note : static analyzer may not understand tableSymbol is properly initialized */
+ tableU16[cumul[s]++] = (U16)(tableSize + u); /* TableU16 : sorted by symbol order; gives next state value */
+ }
+ }
+
+ /* Build Symbol Transformation Table */
+ {
+ unsigned total = 0;
+ unsigned s;
+ for (s = 0; s <= maxSymbolValue; s++) {
+ switch (normalizedCounter[s]) {
+ case 0: break;
+
+ case -1:
+ case 1:
+ symbolTT[s].deltaNbBits = (tableLog << 16) - (1 << tableLog);
+ symbolTT[s].deltaFindState = total - 1;
+ total++;
+ break;
+ default: {
+ U32 const maxBitsOut = tableLog - BIT_highbit32(normalizedCounter[s] - 1);
+ U32 const minStatePlus = normalizedCounter[s] << maxBitsOut;
+ symbolTT[s].deltaNbBits = (maxBitsOut << 16) - minStatePlus;
+ symbolTT[s].deltaFindState = total - normalizedCounter[s];
+ total += normalizedCounter[s];
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+/*-**************************************************************
+* FSE NCount encoding-decoding
+****************************************************************/
+size_t FSE_NCountWriteBound(unsigned maxSymbolValue, unsigned tableLog)
+{
+ size_t const maxHeaderSize = (((maxSymbolValue + 1) * tableLog) >> 3) + 3;
+ return maxSymbolValue ? maxHeaderSize : FSE_NCOUNTBOUND; /* maxSymbolValue==0 ? use default */
+}
+
+static size_t FSE_writeNCount_generic(void *header, size_t headerBufferSize, const short *normalizedCounter, unsigned maxSymbolValue, unsigned tableLog,
+ unsigned writeIsSafe)
+{
+ BYTE *const ostart = (BYTE *)header;
+ BYTE *out = ostart;
+ BYTE *const oend = ostart + headerBufferSize;
+ int nbBits;
+ const int tableSize = 1 << tableLog;
+ int remaining;
+ int threshold;
+ U32 bitStream;
+ int bitCount;
+ unsigned charnum = 0;
+ int previous0 = 0;
+
+ bitStream = 0;
+ bitCount = 0;
+ /* Table Size */
+ bitStream += (tableLog - FSE_MIN_TABLELOG) << bitCount;
+ bitCount += 4;
+
+ /* Init */
+ remaining = tableSize + 1; /* +1 for extra accuracy */
+ threshold = tableSize;
+ nbBits = tableLog + 1;
+
+ while (remaining > 1) { /* stops at 1 */
+ if (previous0) {
+ unsigned start = charnum;
+ while (!normalizedCounter[charnum])
+ charnum++;
+ while (charnum >= start + 24) {
+ start += 24;
+ bitStream += 0xFFFFU << bitCount;
+ if ((!writeIsSafe) && (out > oend - 2))
+ return ERROR(dstSize_tooSmall); /* Buffer overflow */
+ out[0] = (BYTE)bitStream;
+ out[1] = (BYTE)(bitStream >> 8);
+ out += 2;
+ bitStream >>= 16;
+ }
+ while (charnum >= start + 3) {
+ start += 3;
+ bitStream += 3 << bitCount;
+ bitCount += 2;
+ }
+ bitStream += (charnum - start) << bitCount;
+ bitCount += 2;
+ if (bitCount > 16) {
+ if ((!writeIsSafe) && (out > oend - 2))
+ return ERROR(dstSize_tooSmall); /* Buffer overflow */
+ out[0] = (BYTE)bitStream;
+ out[1] = (BYTE)(bitStream >> 8);
+ out += 2;
+ bitStream >>= 16;
+ bitCount -= 16;
+ }
+ }
+ {
+ int count = normalizedCounter[charnum++];
+ int const max = (2 * threshold - 1) - remaining;
+ remaining -= count < 0 ? -count : count;
+ count++; /* +1 for extra accuracy */
+ if (count >= threshold)
+ count += max; /* [0..max[ [max..threshold[ (...) [threshold+max 2*threshold[ */
+ bitStream += count << bitCount;
+ bitCount += nbBits;
+ bitCount -= (count < max);
+ previous0 = (count == 1);
+ if (remaining < 1)
+ return ERROR(GENERIC);
+ while (remaining < threshold)
+ nbBits--, threshold >>= 1;
+ }
+ if (bitCount > 16) {
+ if ((!writeIsSafe) && (out > oend - 2))
+ return ERROR(dstSize_tooSmall); /* Buffer overflow */
+ out[0] = (BYTE)bitStream;
+ out[1] = (BYTE)(bitStream >> 8);
+ out += 2;
+ bitStream >>= 16;
+ bitCount -= 16;
+ }
+ }
+
+ /* flush remaining bitStream */
+ if ((!writeIsSafe) && (out > oend - 2))
+ return ERROR(dstSize_tooSmall); /* Buffer overflow */
+ out[0] = (BYTE)bitStream;
+ out[1] = (BYTE)(bitStream >> 8);
+ out += (bitCount + 7) / 8;
+
+ if (charnum > maxSymbolValue + 1)
+ return ERROR(GENERIC);
+
+ return (out - ostart);
+}
+
+size_t FSE_writeNCount(void *buffer, size_t bufferSize, const short *normalizedCounter, unsigned maxSymbolValue, unsigned tableLog)
+{
+ if (tableLog > FSE_MAX_TABLELOG)
+ return ERROR(tableLog_tooLarge); /* Unsupported */
+ if (tableLog < FSE_MIN_TABLELOG)
+ return ERROR(GENERIC); /* Unsupported */
+
+ if (bufferSize < FSE_NCountWriteBound(maxSymbolValue, tableLog))
+ return FSE_writeNCount_generic(buffer, bufferSize, normalizedCounter, maxSymbolValue, tableLog, 0);
+
+ return FSE_writeNCount_generic(buffer, bufferSize, normalizedCounter, maxSymbolValue, tableLog, 1);
+}
+
+/*-**************************************************************
+* Counting histogram
+****************************************************************/
+/*! FSE_count_simple
+ This function counts byte values within `src`, and store the histogram into table `count`.
+ It doesn't use any additional memory.
+ But this function is unsafe : it doesn't check that all values within `src` can fit into `count`.
+ For this reason, prefer using a table `count` with 256 elements.
+ @return : count of most numerous element
+*/
+size_t FSE_count_simple(unsigned *count, unsigned *maxSymbolValuePtr, const void *src, size_t srcSize)
+{
+ const BYTE *ip = (const BYTE *)src;
+ const BYTE *const end = ip + srcSize;
+ unsigned maxSymbolValue = *maxSymbolValuePtr;
+ unsigned max = 0;
+
+ memset(count, 0, (maxSymbolValue + 1) * sizeof(*count));
+ if (srcSize == 0) {
+ *maxSymbolValuePtr = 0;
+ return 0;
+ }
+
+ while (ip < end)
+ count[*ip++]++;
+
+ while (!count[maxSymbolValue])
+ maxSymbolValue--;
+ *maxSymbolValuePtr = maxSymbolValue;
+
+ {
+ U32 s;
+ for (s = 0; s <= maxSymbolValue; s++)
+ if (count[s] > max)
+ max = count[s];
+ }
+
+ return (size_t)max;
+}
+
+/* FSE_count_parallel_wksp() :
+ * Same as FSE_count_parallel(), but using an externally provided scratch buffer.
+ * `workSpace` size must be a minimum of `1024 * sizeof(unsigned)`` */
+static size_t FSE_count_parallel_wksp(unsigned *count, unsigned *maxSymbolValuePtr, const void *source, size_t sourceSize, unsigned checkMax,
+ unsigned *const workSpace)
+{
+ const BYTE *ip = (const BYTE *)source;
+ const BYTE *const iend = ip + sourceSize;
+ unsigned maxSymbolValue = *maxSymbolValuePtr;
+ unsigned max = 0;
+ U32 *const Counting1 = workSpace;
+ U32 *const Counting2 = Counting1 + 256;
+ U32 *const Counting3 = Counting2 + 256;
+ U32 *const Counting4 = Counting3 + 256;
+
+ memset(Counting1, 0, 4 * 256 * sizeof(unsigned));
+
+ /* safety checks */
+ if (!sourceSize) {
+ memset(count, 0, maxSymbolValue + 1);
+ *maxSymbolValuePtr = 0;
+ return 0;
+ }
+ if (!maxSymbolValue)
+ maxSymbolValue = 255; /* 0 == default */
+
+ /* by stripes of 16 bytes */
+ {
+ U32 cached = ZSTD_read32(ip);
+ ip += 4;
+ while (ip < iend - 15) {
+ U32 c = cached;
+ cached = ZSTD_read32(ip);
+ ip += 4;
+ Counting1[(BYTE)c]++;
+ Counting2[(BYTE)(c >> 8)]++;
+ Counting3[(BYTE)(c >> 16)]++;
+ Counting4[c >> 24]++;
+ c = cached;
+ cached = ZSTD_read32(ip);
+ ip += 4;
+ Counting1[(BYTE)c]++;
+ Counting2[(BYTE)(c >> 8)]++;
+ Counting3[(BYTE)(c >> 16)]++;
+ Counting4[c >> 24]++;
+ c = cached;
+ cached = ZSTD_read32(ip);
+ ip += 4;
+ Counting1[(BYTE)c]++;
+ Counting2[(BYTE)(c >> 8)]++;
+ Counting3[(BYTE)(c >> 16)]++;
+ Counting4[c >> 24]++;
+ c = cached;
+ cached = ZSTD_read32(ip);
+ ip += 4;
+ Counting1[(BYTE)c]++;
+ Counting2[(BYTE)(c >> 8)]++;
+ Counting3[(BYTE)(c >> 16)]++;
+ Counting4[c >> 24]++;
+ }
+ ip -= 4;
+ }
+
+ /* finish last symbols */
+ while (ip < iend)
+ Counting1[*ip++]++;
+
+ if (checkMax) { /* verify stats will fit into destination table */
+ U32 s;
+ for (s = 255; s > maxSymbolValue; s--) {
+ Counting1[s] += Counting2[s] + Counting3[s] + Counting4[s];
+ if (Counting1[s])
+ return ERROR(maxSymbolValue_tooSmall);
+ }
+ }
+
+ {
+ U32 s;
+ for (s = 0; s <= maxSymbolValue; s++) {
+ count[s] = Counting1[s] + Counting2[s] + Counting3[s] + Counting4[s];
+ if (count[s] > max)
+ max = count[s];
+ }
+ }
+
+ while (!count[maxSymbolValue])
+ maxSymbolValue--;
+ *maxSymbolValuePtr = maxSymbolValue;
+ return (size_t)max;
+}
+
+/* FSE_countFast_wksp() :
+ * Same as FSE_countFast(), but using an externally provided scratch buffer.
+ * `workSpace` size must be table of >= `1024` unsigned */
+size_t FSE_countFast_wksp(unsigned *count, unsigned *maxSymbolValuePtr, const void *source, size_t sourceSize, unsigned *workSpace)
+{
+ if (sourceSize < 1500)
+ return FSE_count_simple(count, maxSymbolValuePtr, source, sourceSize);
+ return FSE_count_parallel_wksp(count, maxSymbolValuePtr, source, sourceSize, 0, workSpace);
+}
+
+/* FSE_count_wksp() :
+ * Same as FSE_count(), but using an externally provided scratch buffer.
+ * `workSpace` size must be table of >= `1024` unsigned */
+size_t FSE_count_wksp(unsigned *count, unsigned *maxSymbolValuePtr, const void *source, size_t sourceSize, unsigned *workSpace)
+{
+ if (*maxSymbolValuePtr < 255)
+ return FSE_count_parallel_wksp(count, maxSymbolValuePtr, source, sourceSize, 1, workSpace);
+ *maxSymbolValuePtr = 255;
+ return FSE_countFast_wksp(count, maxSymbolValuePtr, source, sourceSize, workSpace);
+}
+
+/*-**************************************************************
+* FSE Compression Code
+****************************************************************/
+/*! FSE_sizeof_CTable() :
+ FSE_CTable is a variable size structure which contains :
+ `U16 tableLog;`
+ `U16 maxSymbolValue;`
+ `U16 nextStateNumber[1 << tableLog];` // This size is variable
+ `FSE_symbolCompressionTransform symbolTT[maxSymbolValue+1];` // This size is variable
+Allocation is manual (C standard does not support variable-size structures).
+*/
+size_t FSE_sizeof_CTable(unsigned maxSymbolValue, unsigned tableLog)
+{
+ if (tableLog > FSE_MAX_TABLELOG)
+ return ERROR(tableLog_tooLarge);
+ return FSE_CTABLE_SIZE_U32(tableLog, maxSymbolValue) * sizeof(U32);
+}
+
+/* provides the minimum logSize to safely represent a distribution */
+static unsigned FSE_minTableLog(size_t srcSize, unsigned maxSymbolValue)
+{
+ U32 minBitsSrc = BIT_highbit32((U32)(srcSize - 1)) + 1;
+ U32 minBitsSymbols = BIT_highbit32(maxSymbolValue) + 2;
+ U32 minBits = minBitsSrc < minBitsSymbols ? minBitsSrc : minBitsSymbols;
+ return minBits;
+}
+
+unsigned FSE_optimalTableLog_internal(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue, unsigned minus)
+{
+ U32 maxBitsSrc = BIT_highbit32((U32)(srcSize - 1)) - minus;
+ U32 tableLog = maxTableLog;
+ U32 minBits = FSE_minTableLog(srcSize, maxSymbolValue);
+ if (tableLog == 0)
+ tableLog = FSE_DEFAULT_TABLELOG;
+ if (maxBitsSrc < tableLog)
+ tableLog = maxBitsSrc; /* Accuracy can be reduced */
+ if (minBits > tableLog)
+ tableLog = minBits; /* Need a minimum to safely represent all symbol values */
+ if (tableLog < FSE_MIN_TABLELOG)
+ tableLog = FSE_MIN_TABLELOG;
+ if (tableLog > FSE_MAX_TABLELOG)
+ tableLog = FSE_MAX_TABLELOG;
+ return tableLog;
+}
+
+unsigned FSE_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue)
+{
+ return FSE_optimalTableLog_internal(maxTableLog, srcSize, maxSymbolValue, 2);
+}
+
+/* Secondary normalization method.
+ To be used when primary method fails. */
+
+static size_t FSE_normalizeM2(short *norm, U32 tableLog, const unsigned *count, size_t total, U32 maxSymbolValue)
+{
+ short const NOT_YET_ASSIGNED = -2;
+ U32 s;
+ U32 distributed = 0;
+ U32 ToDistribute;
+
+ /* Init */
+ U32 const lowThreshold = (U32)(total >> tableLog);
+ U32 lowOne = (U32)((total * 3) >> (tableLog + 1));
+
+ for (s = 0; s <= maxSymbolValue; s++) {
+ if (count[s] == 0) {
+ norm[s] = 0;
+ continue;
+ }
+ if (count[s] <= lowThreshold) {
+ norm[s] = -1;
+ distributed++;
+ total -= count[s];
+ continue;
+ }
+ if (count[s] <= lowOne) {
+ norm[s] = 1;
+ distributed++;
+ total -= count[s];
+ continue;
+ }
+
+ norm[s] = NOT_YET_ASSIGNED;
+ }
+ ToDistribute = (1 << tableLog) - distributed;
+
+ if ((total / ToDistribute) > lowOne) {
+ /* risk of rounding to zero */
+ lowOne = (U32)((total * 3) / (ToDistribute * 2));
+ for (s = 0; s <= maxSymbolValue; s++) {
+ if ((norm[s] == NOT_YET_ASSIGNED) && (count[s] <= lowOne)) {
+ norm[s] = 1;
+ distributed++;
+ total -= count[s];
+ continue;
+ }
+ }
+ ToDistribute = (1 << tableLog) - distributed;
+ }
+
+ if (distributed == maxSymbolValue + 1) {
+ /* all values are pretty poor;
+ probably incompressible data (should have already been detected);
+ find max, then give all remaining points to max */
+ U32 maxV = 0, maxC = 0;
+ for (s = 0; s <= maxSymbolValue; s++)
+ if (count[s] > maxC)
+ maxV = s, maxC = count[s];
+ norm[maxV] += (short)ToDistribute;
+ return 0;
+ }
+
+ if (total == 0) {
+ /* all of the symbols were low enough for the lowOne or lowThreshold */
+ for (s = 0; ToDistribute > 0; s = (s + 1) % (maxSymbolValue + 1))
+ if (norm[s] > 0)
+ ToDistribute--, norm[s]++;
+ return 0;
+ }
+
+ {
+ U64 const vStepLog = 62 - tableLog;
+ U64 const mid = (1ULL << (vStepLog - 1)) - 1;
+ U64 const rStep = div_u64((((U64)1 << vStepLog) * ToDistribute) + mid, (U32)total); /* scale on remaining */
+ U64 tmpTotal = mid;
+ for (s = 0; s <= maxSymbolValue; s++) {
+ if (norm[s] == NOT_YET_ASSIGNED) {
+ U64 const end = tmpTotal + (count[s] * rStep);
+ U32 const sStart = (U32)(tmpTotal >> vStepLog);
+ U32 const sEnd = (U32)(end >> vStepLog);
+ U32 const weight = sEnd - sStart;
+ if (weight < 1)
+ return ERROR(GENERIC);
+ norm[s] = (short)weight;
+ tmpTotal = end;
+ }
+ }
+ }
+
+ return 0;
+}
+
+size_t FSE_normalizeCount(short *normalizedCounter, unsigned tableLog, const unsigned *count, size_t total, unsigned maxSymbolValue)
+{
+ /* Sanity checks */
+ if (tableLog == 0)
+ tableLog = FSE_DEFAULT_TABLELOG;
+ if (tableLog < FSE_MIN_TABLELOG)
+ return ERROR(GENERIC); /* Unsupported size */
+ if (tableLog > FSE_MAX_TABLELOG)
+ return ERROR(tableLog_tooLarge); /* Unsupported size */
+ if (tableLog < FSE_minTableLog(total, maxSymbolValue))
+ return ERROR(GENERIC); /* Too small tableLog, compression potentially impossible */
+
+ {
+ U32 const rtbTable[] = {0, 473195, 504333, 520860, 550000, 700000, 750000, 830000};
+ U64 const scale = 62 - tableLog;
+ U64 const step = div_u64((U64)1 << 62, (U32)total); /* <== here, one division ! */
+ U64 const vStep = 1ULL << (scale - 20);
+ int stillToDistribute = 1 << tableLog;
+ unsigned s;
+ unsigned largest = 0;
+ short largestP = 0;
+ U32 lowThreshold = (U32)(total >> tableLog);
+
+ for (s = 0; s <= maxSymbolValue; s++) {
+ if (count[s] == total)
+ return 0; /* rle special case */
+ if (count[s] == 0) {
+ normalizedCounter[s] = 0;
+ continue;
+ }
+ if (count[s] <= lowThreshold) {
+ normalizedCounter[s] = -1;
+ stillToDistribute--;
+ } else {
+ short proba = (short)((count[s] * step) >> scale);
+ if (proba < 8) {
+ U64 restToBeat = vStep * rtbTable[proba];
+ proba += (count[s] * step) - ((U64)proba << scale) > restToBeat;
+ }
+ if (proba > largestP)
+ largestP = proba, largest = s;
+ normalizedCounter[s] = proba;
+ stillToDistribute -= proba;
+ }
+ }
+ if (-stillToDistribute >= (normalizedCounter[largest] >> 1)) {
+ /* corner case, need another normalization method */
+ size_t const errorCode = FSE_normalizeM2(normalizedCounter, tableLog, count, total, maxSymbolValue);
+ if (FSE_isError(errorCode))
+ return errorCode;
+ } else
+ normalizedCounter[largest] += (short)stillToDistribute;
+ }
+
+ return tableLog;
+}
+
+/* fake FSE_CTable, for raw (uncompressed) input */
+size_t FSE_buildCTable_raw(FSE_CTable *ct, unsigned nbBits)
+{
+ const unsigned tableSize = 1 << nbBits;
+ const unsigned tableMask = tableSize - 1;
+ const unsigned maxSymbolValue = tableMask;
+ void *const ptr = ct;
+ U16 *const tableU16 = ((U16 *)ptr) + 2;
+ void *const FSCT = ((U32 *)ptr) + 1 /* header */ + (tableSize >> 1); /* assumption : tableLog >= 1 */
+ FSE_symbolCompressionTransform *const symbolTT = (FSE_symbolCompressionTransform *)(FSCT);
+ unsigned s;
+
+ /* Sanity checks */
+ if (nbBits < 1)
+ return ERROR(GENERIC); /* min size */
+
+ /* header */
+ tableU16[-2] = (U16)nbBits;
+ tableU16[-1] = (U16)maxSymbolValue;
+
+ /* Build table */
+ for (s = 0; s < tableSize; s++)
+ tableU16[s] = (U16)(tableSize + s);
+
+ /* Build Symbol Transformation Table */
+ {
+ const U32 deltaNbBits = (nbBits << 16) - (1 << nbBits);
+ for (s = 0; s <= maxSymbolValue; s++) {
+ symbolTT[s].deltaNbBits = deltaNbBits;
+ symbolTT[s].deltaFindState = s - 1;
+ }
+ }
+
+ return 0;
+}
+
+/* fake FSE_CTable, for rle input (always same symbol) */
+size_t FSE_buildCTable_rle(FSE_CTable *ct, BYTE symbolValue)
+{
+ void *ptr = ct;
+ U16 *tableU16 = ((U16 *)ptr) + 2;
+ void *FSCTptr = (U32 *)ptr + 2;
+ FSE_symbolCompressionTransform *symbolTT = (FSE_symbolCompressionTransform *)FSCTptr;
+
+ /* header */
+ tableU16[-2] = (U16)0;
+ tableU16[-1] = (U16)symbolValue;
+
+ /* Build table */
+ tableU16[0] = 0;
+ tableU16[1] = 0; /* just in case */
+
+ /* Build Symbol Transformation Table */
+ symbolTT[symbolValue].deltaNbBits = 0;
+ symbolTT[symbolValue].deltaFindState = 0;
+
+ return 0;
+}
+
+static size_t FSE_compress_usingCTable_generic(void *dst, size_t dstSize, const void *src, size_t srcSize, const FSE_CTable *ct, const unsigned fast)
+{
+ const BYTE *const istart = (const BYTE *)src;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *ip = iend;
+
+ BIT_CStream_t bitC;
+ FSE_CState_t CState1, CState2;
+
+ /* init */
+ if (srcSize <= 2)
+ return 0;
+ {
+ size_t const initError = BIT_initCStream(&bitC, dst, dstSize);
+ if (FSE_isError(initError))
+ return 0; /* not enough space available to write a bitstream */
+ }
+
+#define FSE_FLUSHBITS(s) (fast ? BIT_flushBitsFast(s) : BIT_flushBits(s))
+
+ if (srcSize & 1) {
+ FSE_initCState2(&CState1, ct, *--ip);
+ FSE_initCState2(&CState2, ct, *--ip);
+ FSE_encodeSymbol(&bitC, &CState1, *--ip);
+ FSE_FLUSHBITS(&bitC);
+ } else {
+ FSE_initCState2(&CState2, ct, *--ip);
+ FSE_initCState2(&CState1, ct, *--ip);
+ }
+
+ /* join to mod 4 */
+ srcSize -= 2;
+ if ((sizeof(bitC.bitContainer) * 8 > FSE_MAX_TABLELOG * 4 + 7) && (srcSize & 2)) { /* test bit 2 */
+ FSE_encodeSymbol(&bitC, &CState2, *--ip);
+ FSE_encodeSymbol(&bitC, &CState1, *--ip);
+ FSE_FLUSHBITS(&bitC);
+ }
+
+ /* 2 or 4 encoding per loop */
+ while (ip > istart) {
+
+ FSE_encodeSymbol(&bitC, &CState2, *--ip);
+
+ if (sizeof(bitC.bitContainer) * 8 < FSE_MAX_TABLELOG * 2 + 7) /* this test must be static */
+ FSE_FLUSHBITS(&bitC);
+
+ FSE_encodeSymbol(&bitC, &CState1, *--ip);
+
+ if (sizeof(bitC.bitContainer) * 8 > FSE_MAX_TABLELOG * 4 + 7) { /* this test must be static */
+ FSE_encodeSymbol(&bitC, &CState2, *--ip);
+ FSE_encodeSymbol(&bitC, &CState1, *--ip);
+ }
+
+ FSE_FLUSHBITS(&bitC);
+ }
+
+ FSE_flushCState(&bitC, &CState2);
+ FSE_flushCState(&bitC, &CState1);
+ return BIT_closeCStream(&bitC);
+}
+
+size_t FSE_compress_usingCTable(void *dst, size_t dstSize, const void *src, size_t srcSize, const FSE_CTable *ct)
+{
+ unsigned const fast = (dstSize >= FSE_BLOCKBOUND(srcSize));
+
+ if (fast)
+ return FSE_compress_usingCTable_generic(dst, dstSize, src, srcSize, ct, 1);
+ else
+ return FSE_compress_usingCTable_generic(dst, dstSize, src, srcSize, ct, 0);
+}
+
+size_t FSE_compressBound(size_t size) { return FSE_COMPRESSBOUND(size); }
diff --git a/lib/zstd/fse_decompress.c b/lib/zstd/fse_decompress.c
new file mode 100644
index 000000000000..a84300e5a013
--- /dev/null
+++ b/lib/zstd/fse_decompress.c
@@ -0,0 +1,332 @@
+/*
+ * FSE : Finite State Entropy decoder
+ * Copyright (C) 2013-2015, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ */
+
+/* **************************************************************
+* Compiler specifics
+****************************************************************/
+#define FORCE_INLINE static __always_inline
+
+/* **************************************************************
+* Includes
+****************************************************************/
+#include "bitstream.h"
+#include "fse.h"
+#include <linux/compiler.h>
+#include <linux/kernel.h>
+#include <linux/string.h> /* memcpy, memset */
+
+/* **************************************************************
+* Error Management
+****************************************************************/
+#define FSE_isError ERR_isError
+#define FSE_STATIC_ASSERT(c) \
+ { \
+ enum { FSE_static_assert = 1 / (int)(!!(c)) }; \
+ } /* use only *after* variable declarations */
+
+/* check and forward error code */
+#define CHECK_F(f) \
+ { \
+ size_t const e = f; \
+ if (FSE_isError(e)) \
+ return e; \
+ }
+
+/* **************************************************************
+* Templates
+****************************************************************/
+/*
+ designed to be included
+ for type-specific functions (template emulation in C)
+ Objective is to write these functions only once, for improved maintenance
+*/
+
+/* safety checks */
+#ifndef FSE_FUNCTION_EXTENSION
+#error "FSE_FUNCTION_EXTENSION must be defined"
+#endif
+#ifndef FSE_FUNCTION_TYPE
+#error "FSE_FUNCTION_TYPE must be defined"
+#endif
+
+/* Function names */
+#define FSE_CAT(X, Y) X##Y
+#define FSE_FUNCTION_NAME(X, Y) FSE_CAT(X, Y)
+#define FSE_TYPE_NAME(X, Y) FSE_CAT(X, Y)
+
+/* Function templates */
+
+size_t FSE_buildDTable_wksp(FSE_DTable *dt, const short *normalizedCounter, unsigned maxSymbolValue, unsigned tableLog, void *workspace, size_t workspaceSize)
+{
+ void *const tdPtr = dt + 1; /* because *dt is unsigned, 32-bits aligned on 32-bits */
+ FSE_DECODE_TYPE *const tableDecode = (FSE_DECODE_TYPE *)(tdPtr);
+ U16 *symbolNext = (U16 *)workspace;
+
+ U32 const maxSV1 = maxSymbolValue + 1;
+ U32 const tableSize = 1 << tableLog;
+ U32 highThreshold = tableSize - 1;
+
+ /* Sanity Checks */
+ if (workspaceSize < sizeof(U16) * (FSE_MAX_SYMBOL_VALUE + 1))
+ return ERROR(tableLog_tooLarge);
+ if (maxSymbolValue > FSE_MAX_SYMBOL_VALUE)
+ return ERROR(maxSymbolValue_tooLarge);
+ if (tableLog > FSE_MAX_TABLELOG)
+ return ERROR(tableLog_tooLarge);
+
+ /* Init, lay down lowprob symbols */
+ {
+ FSE_DTableHeader DTableH;
+ DTableH.tableLog = (U16)tableLog;
+ DTableH.fastMode = 1;
+ {
+ S16 const largeLimit = (S16)(1 << (tableLog - 1));
+ U32 s;
+ for (s = 0; s < maxSV1; s++) {
+ if (normalizedCounter[s] == -1) {
+ tableDecode[highThreshold--].symbol = (FSE_FUNCTION_TYPE)s;
+ symbolNext[s] = 1;
+ } else {
+ if (normalizedCounter[s] >= largeLimit)
+ DTableH.fastMode = 0;
+ symbolNext[s] = normalizedCounter[s];
+ }
+ }
+ }
+ memcpy(dt, &DTableH, sizeof(DTableH));
+ }
+
+ /* Spread symbols */
+ {
+ U32 const tableMask = tableSize - 1;
+ U32 const step = FSE_TABLESTEP(tableSize);
+ U32 s, position = 0;
+ for (s = 0; s < maxSV1; s++) {
+ int i;
+ for (i = 0; i < normalizedCounter[s]; i++) {
+ tableDecode[position].symbol = (FSE_FUNCTION_TYPE)s;
+ position = (position + step) & tableMask;
+ while (position > highThreshold)
+ position = (position + step) & tableMask; /* lowprob area */
+ }
+ }
+ if (position != 0)
+ return ERROR(GENERIC); /* position must reach all cells once, otherwise normalizedCounter is incorrect */
+ }
+
+ /* Build Decoding table */
+ {
+ U32 u;
+ for (u = 0; u < tableSize; u++) {
+ FSE_FUNCTION_TYPE const symbol = (FSE_FUNCTION_TYPE)(tableDecode[u].symbol);
+ U16 nextState = symbolNext[symbol]++;
+ tableDecode[u].nbBits = (BYTE)(tableLog - BIT_highbit32((U32)nextState));
+ tableDecode[u].newState = (U16)((nextState << tableDecode[u].nbBits) - tableSize);
+ }
+ }
+
+ return 0;
+}
+
+/*-*******************************************************
+* Decompression (Byte symbols)
+*********************************************************/
+size_t FSE_buildDTable_rle(FSE_DTable *dt, BYTE symbolValue)
+{
+ void *ptr = dt;
+ FSE_DTableHeader *const DTableH = (FSE_DTableHeader *)ptr;
+ void *dPtr = dt + 1;
+ FSE_decode_t *const cell = (FSE_decode_t *)dPtr;
+
+ DTableH->tableLog = 0;
+ DTableH->fastMode = 0;
+
+ cell->newState = 0;
+ cell->symbol = symbolValue;
+ cell->nbBits = 0;
+
+ return 0;
+}
+
+size_t FSE_buildDTable_raw(FSE_DTable *dt, unsigned nbBits)
+{
+ void *ptr = dt;
+ FSE_DTableHeader *const DTableH = (FSE_DTableHeader *)ptr;
+ void *dPtr = dt + 1;
+ FSE_decode_t *const dinfo = (FSE_decode_t *)dPtr;
+ const unsigned tableSize = 1 << nbBits;
+ const unsigned tableMask = tableSize - 1;
+ const unsigned maxSV1 = tableMask + 1;
+ unsigned s;
+
+ /* Sanity checks */
+ if (nbBits < 1)
+ return ERROR(GENERIC); /* min size */
+
+ /* Build Decoding Table */
+ DTableH->tableLog = (U16)nbBits;
+ DTableH->fastMode = 1;
+ for (s = 0; s < maxSV1; s++) {
+ dinfo[s].newState = 0;
+ dinfo[s].symbol = (BYTE)s;
+ dinfo[s].nbBits = (BYTE)nbBits;
+ }
+
+ return 0;
+}
+
+FORCE_INLINE size_t FSE_decompress_usingDTable_generic(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const FSE_DTable *dt,
+ const unsigned fast)
+{
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *op = ostart;
+ BYTE *const omax = op + maxDstSize;
+ BYTE *const olimit = omax - 3;
+
+ BIT_DStream_t bitD;
+ FSE_DState_t state1;
+ FSE_DState_t state2;
+
+ /* Init */
+ CHECK_F(BIT_initDStream(&bitD, cSrc, cSrcSize));
+
+ FSE_initDState(&state1, &bitD, dt);
+ FSE_initDState(&state2, &bitD, dt);
+
+#define FSE_GETSYMBOL(statePtr) fast ? FSE_decodeSymbolFast(statePtr, &bitD) : FSE_decodeSymbol(statePtr, &bitD)
+
+ /* 4 symbols per loop */
+ for (; (BIT_reloadDStream(&bitD) == BIT_DStream_unfinished) & (op < olimit); op += 4) {
+ op[0] = FSE_GETSYMBOL(&state1);
+
+ if (FSE_MAX_TABLELOG * 2 + 7 > sizeof(bitD.bitContainer) * 8) /* This test must be static */
+ BIT_reloadDStream(&bitD);
+
+ op[1] = FSE_GETSYMBOL(&state2);
+
+ if (FSE_MAX_TABLELOG * 4 + 7 > sizeof(bitD.bitContainer) * 8) /* This test must be static */
+ {
+ if (BIT_reloadDStream(&bitD) > BIT_DStream_unfinished) {
+ op += 2;
+ break;
+ }
+ }
+
+ op[2] = FSE_GETSYMBOL(&state1);
+
+ if (FSE_MAX_TABLELOG * 2 + 7 > sizeof(bitD.bitContainer) * 8) /* This test must be static */
+ BIT_reloadDStream(&bitD);
+
+ op[3] = FSE_GETSYMBOL(&state2);
+ }
+
+ /* tail */
+ /* note : BIT_reloadDStream(&bitD) >= FSE_DStream_partiallyFilled; Ends at exactly BIT_DStream_completed */
+ while (1) {
+ if (op > (omax - 2))
+ return ERROR(dstSize_tooSmall);
+ *op++ = FSE_GETSYMBOL(&state1);
+ if (BIT_reloadDStream(&bitD) == BIT_DStream_overflow) {
+ *op++ = FSE_GETSYMBOL(&state2);
+ break;
+ }
+
+ if (op > (omax - 2))
+ return ERROR(dstSize_tooSmall);
+ *op++ = FSE_GETSYMBOL(&state2);
+ if (BIT_reloadDStream(&bitD) == BIT_DStream_overflow) {
+ *op++ = FSE_GETSYMBOL(&state1);
+ break;
+ }
+ }
+
+ return op - ostart;
+}
+
+size_t FSE_decompress_usingDTable(void *dst, size_t originalSize, const void *cSrc, size_t cSrcSize, const FSE_DTable *dt)
+{
+ const void *ptr = dt;
+ const FSE_DTableHeader *DTableH = (const FSE_DTableHeader *)ptr;
+ const U32 fastMode = DTableH->fastMode;
+
+ /* select fast mode (static) */
+ if (fastMode)
+ return FSE_decompress_usingDTable_generic(dst, originalSize, cSrc, cSrcSize, dt, 1);
+ return FSE_decompress_usingDTable_generic(dst, originalSize, cSrc, cSrcSize, dt, 0);
+}
+
+size_t FSE_decompress_wksp(void *dst, size_t dstCapacity, const void *cSrc, size_t cSrcSize, unsigned maxLog, void *workspace, size_t workspaceSize)
+{
+ const BYTE *const istart = (const BYTE *)cSrc;
+ const BYTE *ip = istart;
+ unsigned tableLog;
+ unsigned maxSymbolValue = FSE_MAX_SYMBOL_VALUE;
+ size_t NCountLength;
+
+ FSE_DTable *dt;
+ short *counting;
+ size_t spaceUsed32 = 0;
+
+ FSE_STATIC_ASSERT(sizeof(FSE_DTable) == sizeof(U32));
+
+ dt = (FSE_DTable *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += FSE_DTABLE_SIZE_U32(maxLog);
+ counting = (short *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += ALIGN(sizeof(short) * (FSE_MAX_SYMBOL_VALUE + 1), sizeof(U32)) >> 2;
+
+ if ((spaceUsed32 << 2) > workspaceSize)
+ return ERROR(tableLog_tooLarge);
+ workspace = (U32 *)workspace + spaceUsed32;
+ workspaceSize -= (spaceUsed32 << 2);
+
+ /* normal FSE decoding mode */
+ NCountLength = FSE_readNCount(counting, &maxSymbolValue, &tableLog, istart, cSrcSize);
+ if (FSE_isError(NCountLength))
+ return NCountLength;
+ // if (NCountLength >= cSrcSize) return ERROR(srcSize_wrong); /* too small input size; supposed to be already checked in NCountLength, only remaining
+ // case : NCountLength==cSrcSize */
+ if (tableLog > maxLog)
+ return ERROR(tableLog_tooLarge);
+ ip += NCountLength;
+ cSrcSize -= NCountLength;
+
+ CHECK_F(FSE_buildDTable_wksp(dt, counting, maxSymbolValue, tableLog, workspace, workspaceSize));
+
+ return FSE_decompress_usingDTable(dst, dstCapacity, ip, cSrcSize, dt); /* always return, even if it is an error code */
+}
diff --git a/lib/zstd/huf.h b/lib/zstd/huf.h
new file mode 100644
index 000000000000..2143da28d952
--- /dev/null
+++ b/lib/zstd/huf.h
@@ -0,0 +1,212 @@
+/*
+ * Huffman coder, part of New Generation Entropy library
+ * header file
+ * Copyright (C) 2013-2016, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ */
+#ifndef HUF_H_298734234
+#define HUF_H_298734234
+
+/* *** Dependencies *** */
+#include <linux/types.h> /* size_t */
+
+/* *** Tool functions *** */
+#define HUF_BLOCKSIZE_MAX (128 * 1024) /**< maximum input size for a single block compressed with HUF_compress */
+size_t HUF_compressBound(size_t size); /**< maximum compressed size (worst case) */
+
+/* Error Management */
+unsigned HUF_isError(size_t code); /**< tells if a return value is an error code */
+
+/* *** Advanced function *** */
+
+/** HUF_compress4X_wksp() :
+* Same as HUF_compress2(), but uses externally allocated `workSpace`, which must be a table of >= 1024 unsigned */
+size_t HUF_compress4X_wksp(void *dst, size_t dstSize, const void *src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void *workSpace,
+ size_t wkspSize); /**< `workSpace` must be a table of at least HUF_COMPRESS_WORKSPACE_SIZE_U32 unsigned */
+
+/* *** Dependencies *** */
+#include "mem.h" /* U32 */
+
+/* *** Constants *** */
+#define HUF_TABLELOG_MAX 12 /* max configured tableLog (for static allocation); can be modified up to HUF_ABSOLUTEMAX_TABLELOG */
+#define HUF_TABLELOG_DEFAULT 11 /* tableLog by default, when not specified */
+#define HUF_SYMBOLVALUE_MAX 255
+
+#define HUF_TABLELOG_ABSOLUTEMAX 15 /* absolute limit of HUF_MAX_TABLELOG. Beyond that value, code does not work */
+#if (HUF_TABLELOG_MAX > HUF_TABLELOG_ABSOLUTEMAX)
+#error "HUF_TABLELOG_MAX is too large !"
+#endif
+
+/* ****************************************
+* Static allocation
+******************************************/
+/* HUF buffer bounds */
+#define HUF_CTABLEBOUND 129
+#define HUF_BLOCKBOUND(size) (size + (size >> 8) + 8) /* only true if incompressible pre-filtered with fast heuristic */
+#define HUF_COMPRESSBOUND(size) (HUF_CTABLEBOUND + HUF_BLOCKBOUND(size)) /* Macro version, useful for static allocation */
+
+/* static allocation of HUF's Compression Table */
+#define HUF_CREATE_STATIC_CTABLE(name, maxSymbolValue) \
+ U32 name##hb[maxSymbolValue + 1]; \
+ void *name##hv = &(name##hb); \
+ HUF_CElt *name = (HUF_CElt *)(name##hv) /* no final ; */
+
+/* static allocation of HUF's DTable */
+typedef U32 HUF_DTable;
+#define HUF_DTABLE_SIZE(maxTableLog) (1 + (1 << (maxTableLog)))
+#define HUF_CREATE_STATIC_DTABLEX2(DTable, maxTableLog) HUF_DTable DTable[HUF_DTABLE_SIZE((maxTableLog)-1)] = {((U32)((maxTableLog)-1) * 0x01000001)}
+#define HUF_CREATE_STATIC_DTABLEX4(DTable, maxTableLog) HUF_DTable DTable[HUF_DTABLE_SIZE(maxTableLog)] = {((U32)(maxTableLog)*0x01000001)}
+
+/* The workspace must have alignment at least 4 and be at least this large */
+#define HUF_COMPRESS_WORKSPACE_SIZE (6 << 10)
+#define HUF_COMPRESS_WORKSPACE_SIZE_U32 (HUF_COMPRESS_WORKSPACE_SIZE / sizeof(U32))
+
+/* The workspace must have alignment at least 4 and be at least this large */
+#define HUF_DECOMPRESS_WORKSPACE_SIZE (3 << 10)
+#define HUF_DECOMPRESS_WORKSPACE_SIZE_U32 (HUF_DECOMPRESS_WORKSPACE_SIZE / sizeof(U32))
+
+/* ****************************************
+* Advanced decompression functions
+******************************************/
+size_t HUF_decompress4X_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize); /**< decodes RLE and uncompressed */
+size_t HUF_decompress4X_hufOnly_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace,
+ size_t workspaceSize); /**< considers RLE and uncompressed as errors */
+size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace,
+ size_t workspaceSize); /**< single-symbol decoder */
+size_t HUF_decompress4X4_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace,
+ size_t workspaceSize); /**< double-symbols decoder */
+
+/* ****************************************
+* HUF detailed API
+******************************************/
+/*!
+HUF_compress() does the following:
+1. count symbol occurrence from source[] into table count[] using FSE_count()
+2. (optional) refine tableLog using HUF_optimalTableLog()
+3. build Huffman table from count using HUF_buildCTable()
+4. save Huffman table to memory buffer using HUF_writeCTable_wksp()
+5. encode the data stream using HUF_compress4X_usingCTable()
+
+The following API allows targeting specific sub-functions for advanced tasks.
+For example, it's possible to compress several blocks using the same 'CTable',
+or to save and regenerate 'CTable' using external methods.
+*/
+/* FSE_count() : find it within "fse.h" */
+unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue);
+typedef struct HUF_CElt_s HUF_CElt; /* incomplete type */
+size_t HUF_writeCTable_wksp(void *dst, size_t maxDstSize, const HUF_CElt *CTable, unsigned maxSymbolValue, unsigned huffLog, void *workspace, size_t workspaceSize);
+size_t HUF_compress4X_usingCTable(void *dst, size_t dstSize, const void *src, size_t srcSize, const HUF_CElt *CTable);
+
+typedef enum {
+ HUF_repeat_none, /**< Cannot use the previous table */
+ HUF_repeat_check, /**< Can use the previous table but it must be checked. Note : The previous table must have been constructed by HUF_compress{1,
+ 4}X_repeat */
+ HUF_repeat_valid /**< Can use the previous table and it is asumed to be valid */
+} HUF_repeat;
+/** HUF_compress4X_repeat() :
+* Same as HUF_compress4X_wksp(), but considers using hufTable if *repeat != HUF_repeat_none.
+* If it uses hufTable it does not modify hufTable or repeat.
+* If it doesn't, it sets *repeat = HUF_repeat_none, and it sets hufTable to the table used.
+* If preferRepeat then the old table will always be used if valid. */
+size_t HUF_compress4X_repeat(void *dst, size_t dstSize, const void *src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void *workSpace,
+ size_t wkspSize, HUF_CElt *hufTable, HUF_repeat *repeat,
+ int preferRepeat); /**< `workSpace` must be a table of at least HUF_COMPRESS_WORKSPACE_SIZE_U32 unsigned */
+
+/** HUF_buildCTable_wksp() :
+ * Same as HUF_buildCTable(), but using externally allocated scratch buffer.
+ * `workSpace` must be aligned on 4-bytes boundaries, and be at least as large as a table of 1024 unsigned.
+ */
+size_t HUF_buildCTable_wksp(HUF_CElt *tree, const U32 *count, U32 maxSymbolValue, U32 maxNbBits, void *workSpace, size_t wkspSize);
+
+/*! HUF_readStats() :
+ Read compact Huffman tree, saved by HUF_writeCTable().
+ `huffWeight` is destination buffer.
+ @return : size read from `src` , or an error Code .
+ Note : Needed by HUF_readCTable() and HUF_readDTableXn() . */
+size_t HUF_readStats_wksp(BYTE *huffWeight, size_t hwSize, U32 *rankStats, U32 *nbSymbolsPtr, U32 *tableLogPtr, const void *src, size_t srcSize,
+ void *workspace, size_t workspaceSize);
+
+/** HUF_readCTable() :
+* Loading a CTable saved with HUF_writeCTable() */
+size_t HUF_readCTable_wksp(HUF_CElt *CTable, unsigned maxSymbolValue, const void *src, size_t srcSize, void *workspace, size_t workspaceSize);
+
+/*
+HUF_decompress() does the following:
+1. select the decompression algorithm (X2, X4) based on pre-computed heuristics
+2. build Huffman table from save, using HUF_readDTableXn()
+3. decode 1 or 4 segments in parallel using HUF_decompressSXn_usingDTable
+*/
+
+/** HUF_selectDecoder() :
+* Tells which decoder is likely to decode faster,
+* based on a set of pre-determined metrics.
+* @return : 0==HUF_decompress4X2, 1==HUF_decompress4X4 .
+* Assumption : 0 < cSrcSize < dstSize <= 128 KB */
+U32 HUF_selectDecoder(size_t dstSize, size_t cSrcSize);
+
+size_t HUF_readDTableX2_wksp(HUF_DTable *DTable, const void *src, size_t srcSize, void *workspace, size_t workspaceSize);
+size_t HUF_readDTableX4_wksp(HUF_DTable *DTable, const void *src, size_t srcSize, void *workspace, size_t workspaceSize);
+
+size_t HUF_decompress4X_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable);
+size_t HUF_decompress4X2_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable);
+size_t HUF_decompress4X4_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable);
+
+/* single stream variants */
+
+size_t HUF_compress1X_wksp(void *dst, size_t dstSize, const void *src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void *workSpace,
+ size_t wkspSize); /**< `workSpace` must be a table of at least HUF_COMPRESS_WORKSPACE_SIZE_U32 unsigned */
+size_t HUF_compress1X_usingCTable(void *dst, size_t dstSize, const void *src, size_t srcSize, const HUF_CElt *CTable);
+/** HUF_compress1X_repeat() :
+* Same as HUF_compress1X_wksp(), but considers using hufTable if *repeat != HUF_repeat_none.
+* If it uses hufTable it does not modify hufTable or repeat.
+* If it doesn't, it sets *repeat = HUF_repeat_none, and it sets hufTable to the table used.
+* If preferRepeat then the old table will always be used if valid. */
+size_t HUF_compress1X_repeat(void *dst, size_t dstSize, const void *src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void *workSpace,
+ size_t wkspSize, HUF_CElt *hufTable, HUF_repeat *repeat,
+ int preferRepeat); /**< `workSpace` must be a table of at least HUF_COMPRESS_WORKSPACE_SIZE_U32 unsigned */
+
+size_t HUF_decompress1X_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize);
+size_t HUF_decompress1X2_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace,
+ size_t workspaceSize); /**< single-symbol decoder */
+size_t HUF_decompress1X4_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace,
+ size_t workspaceSize); /**< double-symbols decoder */
+
+size_t HUF_decompress1X_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize,
+ const HUF_DTable *DTable); /**< automatic selection of sing or double symbol decoder, based on DTable */
+size_t HUF_decompress1X2_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable);
+size_t HUF_decompress1X4_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable);
+
+#endif /* HUF_H_298734234 */
diff --git a/lib/zstd/huf_compress.c b/lib/zstd/huf_compress.c
new file mode 100644
index 000000000000..40055a7016e6
--- /dev/null
+++ b/lib/zstd/huf_compress.c
@@ -0,0 +1,770 @@
+/*
+ * Huffman encoder, part of New Generation Entropy library
+ * Copyright (C) 2013-2016, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ */
+
+/* **************************************************************
+* Includes
+****************************************************************/
+#include "bitstream.h"
+#include "fse.h" /* header compression */
+#include "huf.h"
+#include <linux/kernel.h>
+#include <linux/string.h> /* memcpy, memset */
+
+/* **************************************************************
+* Error Management
+****************************************************************/
+#define HUF_STATIC_ASSERT(c) \
+ { \
+ enum { HUF_static_assert = 1 / (int)(!!(c)) }; \
+ } /* use only *after* variable declarations */
+#define CHECK_V_F(e, f) \
+ size_t const e = f; \
+ if (ERR_isError(e)) \
+ return f
+#define CHECK_F(f) \
+ { \
+ CHECK_V_F(_var_err__, f); \
+ }
+
+/* **************************************************************
+* Utils
+****************************************************************/
+unsigned HUF_optimalTableLog(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue)
+{
+ return FSE_optimalTableLog_internal(maxTableLog, srcSize, maxSymbolValue, 1);
+}
+
+/* *******************************************************
+* HUF : Huffman block compression
+*********************************************************/
+/* HUF_compressWeights() :
+ * Same as FSE_compress(), but dedicated to huff0's weights compression.
+ * The use case needs much less stack memory.
+ * Note : all elements within weightTable are supposed to be <= HUF_TABLELOG_MAX.
+ */
+#define MAX_FSE_TABLELOG_FOR_HUFF_HEADER 6
+size_t HUF_compressWeights_wksp(void *dst, size_t dstSize, const void *weightTable, size_t wtSize, void *workspace, size_t workspaceSize)
+{
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *op = ostart;
+ BYTE *const oend = ostart + dstSize;
+
+ U32 maxSymbolValue = HUF_TABLELOG_MAX;
+ U32 tableLog = MAX_FSE_TABLELOG_FOR_HUFF_HEADER;
+
+ FSE_CTable *CTable;
+ U32 *count;
+ S16 *norm;
+ size_t spaceUsed32 = 0;
+
+ HUF_STATIC_ASSERT(sizeof(FSE_CTable) == sizeof(U32));
+
+ CTable = (FSE_CTable *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += FSE_CTABLE_SIZE_U32(MAX_FSE_TABLELOG_FOR_HUFF_HEADER, HUF_TABLELOG_MAX);
+ count = (U32 *)workspace + spaceUsed32;
+ spaceUsed32 += HUF_TABLELOG_MAX + 1;
+ norm = (S16 *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += ALIGN(sizeof(S16) * (HUF_TABLELOG_MAX + 1), sizeof(U32)) >> 2;
+
+ if ((spaceUsed32 << 2) > workspaceSize)
+ return ERROR(tableLog_tooLarge);
+ workspace = (U32 *)workspace + spaceUsed32;
+ workspaceSize -= (spaceUsed32 << 2);
+
+ /* init conditions */
+ if (wtSize <= 1)
+ return 0; /* Not compressible */
+
+ /* Scan input and build symbol stats */
+ {
+ CHECK_V_F(maxCount, FSE_count_simple(count, &maxSymbolValue, weightTable, wtSize));
+ if (maxCount == wtSize)
+ return 1; /* only a single symbol in src : rle */
+ if (maxCount == 1)
+ return 0; /* each symbol present maximum once => not compressible */
+ }
+
+ tableLog = FSE_optimalTableLog(tableLog, wtSize, maxSymbolValue);
+ CHECK_F(FSE_normalizeCount(norm, tableLog, count, wtSize, maxSymbolValue));
+
+ /* Write table description header */
+ {
+ CHECK_V_F(hSize, FSE_writeNCount(op, oend - op, norm, maxSymbolValue, tableLog));
+ op += hSize;
+ }
+
+ /* Compress */
+ CHECK_F(FSE_buildCTable_wksp(CTable, norm, maxSymbolValue, tableLog, workspace, workspaceSize));
+ {
+ CHECK_V_F(cSize, FSE_compress_usingCTable(op, oend - op, weightTable, wtSize, CTable));
+ if (cSize == 0)
+ return 0; /* not enough space for compressed data */
+ op += cSize;
+ }
+
+ return op - ostart;
+}
+
+struct HUF_CElt_s {
+ U16 val;
+ BYTE nbBits;
+}; /* typedef'd to HUF_CElt within "huf.h" */
+
+/*! HUF_writeCTable_wksp() :
+ `CTable` : Huffman tree to save, using huf representation.
+ @return : size of saved CTable */
+size_t HUF_writeCTable_wksp(void *dst, size_t maxDstSize, const HUF_CElt *CTable, U32 maxSymbolValue, U32 huffLog, void *workspace, size_t workspaceSize)
+{
+ BYTE *op = (BYTE *)dst;
+ U32 n;
+
+ BYTE *bitsToWeight;
+ BYTE *huffWeight;
+ size_t spaceUsed32 = 0;
+
+ bitsToWeight = (BYTE *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += ALIGN(HUF_TABLELOG_MAX + 1, sizeof(U32)) >> 2;
+ huffWeight = (BYTE *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += ALIGN(HUF_SYMBOLVALUE_MAX, sizeof(U32)) >> 2;
+
+ if ((spaceUsed32 << 2) > workspaceSize)
+ return ERROR(tableLog_tooLarge);
+ workspace = (U32 *)workspace + spaceUsed32;
+ workspaceSize -= (spaceUsed32 << 2);
+
+ /* check conditions */
+ if (maxSymbolValue > HUF_SYMBOLVALUE_MAX)
+ return ERROR(maxSymbolValue_tooLarge);
+
+ /* convert to weight */
+ bitsToWeight[0] = 0;
+ for (n = 1; n < huffLog + 1; n++)
+ bitsToWeight[n] = (BYTE)(huffLog + 1 - n);
+ for (n = 0; n < maxSymbolValue; n++)
+ huffWeight[n] = bitsToWeight[CTable[n].nbBits];
+
+ /* attempt weights compression by FSE */
+ {
+ CHECK_V_F(hSize, HUF_compressWeights_wksp(op + 1, maxDstSize - 1, huffWeight, maxSymbolValue, workspace, workspaceSize));
+ if ((hSize > 1) & (hSize < maxSymbolValue / 2)) { /* FSE compressed */
+ op[0] = (BYTE)hSize;
+ return hSize + 1;
+ }
+ }
+
+ /* write raw values as 4-bits (max : 15) */
+ if (maxSymbolValue > (256 - 128))
+ return ERROR(GENERIC); /* should not happen : likely means source cannot be compressed */
+ if (((maxSymbolValue + 1) / 2) + 1 > maxDstSize)
+ return ERROR(dstSize_tooSmall); /* not enough space within dst buffer */
+ op[0] = (BYTE)(128 /*special case*/ + (maxSymbolValue - 1));
+ huffWeight[maxSymbolValue] = 0; /* to be sure it doesn't cause msan issue in final combination */
+ for (n = 0; n < maxSymbolValue; n += 2)
+ op[(n / 2) + 1] = (BYTE)((huffWeight[n] << 4) + huffWeight[n + 1]);
+ return ((maxSymbolValue + 1) / 2) + 1;
+}
+
+size_t HUF_readCTable_wksp(HUF_CElt *CTable, U32 maxSymbolValue, const void *src, size_t srcSize, void *workspace, size_t workspaceSize)
+{
+ U32 *rankVal;
+ BYTE *huffWeight;
+ U32 tableLog = 0;
+ U32 nbSymbols = 0;
+ size_t readSize;
+ size_t spaceUsed32 = 0;
+
+ rankVal = (U32 *)workspace + spaceUsed32;
+ spaceUsed32 += HUF_TABLELOG_ABSOLUTEMAX + 1;
+ huffWeight = (BYTE *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += ALIGN(HUF_SYMBOLVALUE_MAX + 1, sizeof(U32)) >> 2;
+
+ if ((spaceUsed32 << 2) > workspaceSize)
+ return ERROR(tableLog_tooLarge);
+ workspace = (U32 *)workspace + spaceUsed32;
+ workspaceSize -= (spaceUsed32 << 2);
+
+ /* get symbol weights */
+ readSize = HUF_readStats_wksp(huffWeight, HUF_SYMBOLVALUE_MAX + 1, rankVal, &nbSymbols, &tableLog, src, srcSize, workspace, workspaceSize);
+ if (ERR_isError(readSize))
+ return readSize;
+
+ /* check result */
+ if (tableLog > HUF_TABLELOG_MAX)
+ return ERROR(tableLog_tooLarge);
+ if (nbSymbols > maxSymbolValue + 1)
+ return ERROR(maxSymbolValue_tooSmall);
+
+ /* Prepare base value per rank */
+ {
+ U32 n, nextRankStart = 0;
+ for (n = 1; n <= tableLog; n++) {
+ U32 curr = nextRankStart;
+ nextRankStart += (rankVal[n] << (n - 1));
+ rankVal[n] = curr;
+ }
+ }
+
+ /* fill nbBits */
+ {
+ U32 n;
+ for (n = 0; n < nbSymbols; n++) {
+ const U32 w = huffWeight[n];
+ CTable[n].nbBits = (BYTE)(tableLog + 1 - w);
+ }
+ }
+
+ /* fill val */
+ {
+ U16 nbPerRank[HUF_TABLELOG_MAX + 2] = {0}; /* support w=0=>n=tableLog+1 */
+ U16 valPerRank[HUF_TABLELOG_MAX + 2] = {0};
+ {
+ U32 n;
+ for (n = 0; n < nbSymbols; n++)
+ nbPerRank[CTable[n].nbBits]++;
+ }
+ /* determine stating value per rank */
+ valPerRank[tableLog + 1] = 0; /* for w==0 */
+ {
+ U16 min = 0;
+ U32 n;
+ for (n = tableLog; n > 0; n--) { /* start at n=tablelog <-> w=1 */
+ valPerRank[n] = min; /* get starting value within each rank */
+ min += nbPerRank[n];
+ min >>= 1;
+ }
+ }
+ /* assign value within rank, symbol order */
+ {
+ U32 n;
+ for (n = 0; n <= maxSymbolValue; n++)
+ CTable[n].val = valPerRank[CTable[n].nbBits]++;
+ }
+ }
+
+ return readSize;
+}
+
+typedef struct nodeElt_s {
+ U32 count;
+ U16 parent;
+ BYTE byte;
+ BYTE nbBits;
+} nodeElt;
+
+static U32 HUF_setMaxHeight(nodeElt *huffNode, U32 lastNonNull, U32 maxNbBits)
+{
+ const U32 largestBits = huffNode[lastNonNull].nbBits;
+ if (largestBits <= maxNbBits)
+ return largestBits; /* early exit : no elt > maxNbBits */
+
+ /* there are several too large elements (at least >= 2) */
+ {
+ int totalCost = 0;
+ const U32 baseCost = 1 << (largestBits - maxNbBits);
+ U32 n = lastNonNull;
+
+ while (huffNode[n].nbBits > maxNbBits) {
+ totalCost += baseCost - (1 << (largestBits - huffNode[n].nbBits));
+ huffNode[n].nbBits = (BYTE)maxNbBits;
+ n--;
+ } /* n stops at huffNode[n].nbBits <= maxNbBits */
+ while (huffNode[n].nbBits == maxNbBits)
+ n--; /* n end at index of smallest symbol using < maxNbBits */
+
+ /* renorm totalCost */
+ totalCost >>= (largestBits - maxNbBits); /* note : totalCost is necessarily a multiple of baseCost */
+
+ /* repay normalized cost */
+ {
+ U32 const noSymbol = 0xF0F0F0F0;
+ U32 rankLast[HUF_TABLELOG_MAX + 2];
+ int pos;
+
+ /* Get pos of last (smallest) symbol per rank */
+ memset(rankLast, 0xF0, sizeof(rankLast));
+ {
+ U32 currNbBits = maxNbBits;
+ for (pos = n; pos >= 0; pos--) {
+ if (huffNode[pos].nbBits >= currNbBits)
+ continue;
+ currNbBits = huffNode[pos].nbBits; /* < maxNbBits */
+ rankLast[maxNbBits - currNbBits] = pos;
+ }
+ }
+
+ while (totalCost > 0) {
+ U32 nBitsToDecrease = BIT_highbit32(totalCost) + 1;
+ for (; nBitsToDecrease > 1; nBitsToDecrease--) {
+ U32 highPos = rankLast[nBitsToDecrease];
+ U32 lowPos = rankLast[nBitsToDecrease - 1];
+ if (highPos == noSymbol)
+ continue;
+ if (lowPos == noSymbol)
+ break;
+ {
+ U32 const highTotal = huffNode[highPos].count;
+ U32 const lowTotal = 2 * huffNode[lowPos].count;
+ if (highTotal <= lowTotal)
+ break;
+ }
+ }
+ /* only triggered when no more rank 1 symbol left => find closest one (note : there is necessarily at least one !) */
+ /* HUF_MAX_TABLELOG test just to please gcc 5+; but it should not be necessary */
+ while ((nBitsToDecrease <= HUF_TABLELOG_MAX) && (rankLast[nBitsToDecrease] == noSymbol))
+ nBitsToDecrease++;
+ totalCost -= 1 << (nBitsToDecrease - 1);
+ if (rankLast[nBitsToDecrease - 1] == noSymbol)
+ rankLast[nBitsToDecrease - 1] = rankLast[nBitsToDecrease]; /* this rank is no longer empty */
+ huffNode[rankLast[nBitsToDecrease]].nbBits++;
+ if (rankLast[nBitsToDecrease] == 0) /* special case, reached largest symbol */
+ rankLast[nBitsToDecrease] = noSymbol;
+ else {
+ rankLast[nBitsToDecrease]--;
+ if (huffNode[rankLast[nBitsToDecrease]].nbBits != maxNbBits - nBitsToDecrease)
+ rankLast[nBitsToDecrease] = noSymbol; /* this rank is now empty */
+ }
+ } /* while (totalCost > 0) */
+
+ while (totalCost < 0) { /* Sometimes, cost correction overshoot */
+ if (rankLast[1] == noSymbol) { /* special case : no rank 1 symbol (using maxNbBits-1); let's create one from largest rank 0
+ (using maxNbBits) */
+ while (huffNode[n].nbBits == maxNbBits)
+ n--;
+ huffNode[n + 1].nbBits--;
+ rankLast[1] = n + 1;
+ totalCost++;
+ continue;
+ }
+ huffNode[rankLast[1] + 1].nbBits--;
+ rankLast[1]++;
+ totalCost++;
+ }
+ }
+ } /* there are several too large elements (at least >= 2) */
+
+ return maxNbBits;
+}
+
+typedef struct {
+ U32 base;
+ U32 curr;
+} rankPos;
+
+static void HUF_sort(nodeElt *huffNode, const U32 *count, U32 maxSymbolValue)
+{
+ rankPos rank[32];
+ U32 n;
+
+ memset(rank, 0, sizeof(rank));
+ for (n = 0; n <= maxSymbolValue; n++) {
+ U32 r = BIT_highbit32(count[n] + 1);
+ rank[r].base++;
+ }
+ for (n = 30; n > 0; n--)
+ rank[n - 1].base += rank[n].base;
+ for (n = 0; n < 32; n++)
+ rank[n].curr = rank[n].base;
+ for (n = 0; n <= maxSymbolValue; n++) {
+ U32 const c = count[n];
+ U32 const r = BIT_highbit32(c + 1) + 1;
+ U32 pos = rank[r].curr++;
+ while ((pos > rank[r].base) && (c > huffNode[pos - 1].count))
+ huffNode[pos] = huffNode[pos - 1], pos--;
+ huffNode[pos].count = c;
+ huffNode[pos].byte = (BYTE)n;
+ }
+}
+
+/** HUF_buildCTable_wksp() :
+ * Same as HUF_buildCTable(), but using externally allocated scratch buffer.
+ * `workSpace` must be aligned on 4-bytes boundaries, and be at least as large as a table of 1024 unsigned.
+ */
+#define STARTNODE (HUF_SYMBOLVALUE_MAX + 1)
+typedef nodeElt huffNodeTable[2 * HUF_SYMBOLVALUE_MAX + 1 + 1];
+size_t HUF_buildCTable_wksp(HUF_CElt *tree, const U32 *count, U32 maxSymbolValue, U32 maxNbBits, void *workSpace, size_t wkspSize)
+{
+ nodeElt *const huffNode0 = (nodeElt *)workSpace;
+ nodeElt *const huffNode = huffNode0 + 1;
+ U32 n, nonNullRank;
+ int lowS, lowN;
+ U16 nodeNb = STARTNODE;
+ U32 nodeRoot;
+
+ /* safety checks */
+ if (wkspSize < sizeof(huffNodeTable))
+ return ERROR(GENERIC); /* workSpace is not large enough */
+ if (maxNbBits == 0)
+ maxNbBits = HUF_TABLELOG_DEFAULT;
+ if (maxSymbolValue > HUF_SYMBOLVALUE_MAX)
+ return ERROR(GENERIC);
+ memset(huffNode0, 0, sizeof(huffNodeTable));
+
+ /* sort, decreasing order */
+ HUF_sort(huffNode, count, maxSymbolValue);
+
+ /* init for parents */
+ nonNullRank = maxSymbolValue;
+ while (huffNode[nonNullRank].count == 0)
+ nonNullRank--;
+ lowS = nonNullRank;
+ nodeRoot = nodeNb + lowS - 1;
+ lowN = nodeNb;
+ huffNode[nodeNb].count = huffNode[lowS].count + huffNode[lowS - 1].count;
+ huffNode[lowS].parent = huffNode[lowS - 1].parent = nodeNb;
+ nodeNb++;
+ lowS -= 2;
+ for (n = nodeNb; n <= nodeRoot; n++)
+ huffNode[n].count = (U32)(1U << 30);
+ huffNode0[0].count = (U32)(1U << 31); /* fake entry, strong barrier */
+
+ /* create parents */
+ while (nodeNb <= nodeRoot) {
+ U32 n1 = (huffNode[lowS].count < huffNode[lowN].count) ? lowS-- : lowN++;
+ U32 n2 = (huffNode[lowS].count < huffNode[lowN].count) ? lowS-- : lowN++;
+ huffNode[nodeNb].count = huffNode[n1].count + huffNode[n2].count;
+ huffNode[n1].parent = huffNode[n2].parent = nodeNb;
+ nodeNb++;
+ }
+
+ /* distribute weights (unlimited tree height) */
+ huffNode[nodeRoot].nbBits = 0;
+ for (n = nodeRoot - 1; n >= STARTNODE; n--)
+ huffNode[n].nbBits = huffNode[huffNode[n].parent].nbBits + 1;
+ for (n = 0; n <= nonNullRank; n++)
+ huffNode[n].nbBits = huffNode[huffNode[n].parent].nbBits + 1;
+
+ /* enforce maxTableLog */
+ maxNbBits = HUF_setMaxHeight(huffNode, nonNullRank, maxNbBits);
+
+ /* fill result into tree (val, nbBits) */
+ {
+ U16 nbPerRank[HUF_TABLELOG_MAX + 1] = {0};
+ U16 valPerRank[HUF_TABLELOG_MAX + 1] = {0};
+ if (maxNbBits > HUF_TABLELOG_MAX)
+ return ERROR(GENERIC); /* check fit into table */
+ for (n = 0; n <= nonNullRank; n++)
+ nbPerRank[huffNode[n].nbBits]++;
+ /* determine stating value per rank */
+ {
+ U16 min = 0;
+ for (n = maxNbBits; n > 0; n--) {
+ valPerRank[n] = min; /* get starting value within each rank */
+ min += nbPerRank[n];
+ min >>= 1;
+ }
+ }
+ for (n = 0; n <= maxSymbolValue; n++)
+ tree[huffNode[n].byte].nbBits = huffNode[n].nbBits; /* push nbBits per symbol, symbol order */
+ for (n = 0; n <= maxSymbolValue; n++)
+ tree[n].val = valPerRank[tree[n].nbBits]++; /* assign value within rank, symbol order */
+ }
+
+ return maxNbBits;
+}
+
+static size_t HUF_estimateCompressedSize(HUF_CElt *CTable, const unsigned *count, unsigned maxSymbolValue)
+{
+ size_t nbBits = 0;
+ int s;
+ for (s = 0; s <= (int)maxSymbolValue; ++s) {
+ nbBits += CTable[s].nbBits * count[s];
+ }
+ return nbBits >> 3;
+}
+
+static int HUF_validateCTable(const HUF_CElt *CTable, const unsigned *count, unsigned maxSymbolValue)
+{
+ int bad = 0;
+ int s;
+ for (s = 0; s <= (int)maxSymbolValue; ++s) {
+ bad |= (count[s] != 0) & (CTable[s].nbBits == 0);
+ }
+ return !bad;
+}
+
+static void HUF_encodeSymbol(BIT_CStream_t *bitCPtr, U32 symbol, const HUF_CElt *CTable)
+{
+ BIT_addBitsFast(bitCPtr, CTable[symbol].val, CTable[symbol].nbBits);
+}
+
+size_t HUF_compressBound(size_t size) { return HUF_COMPRESSBOUND(size); }
+
+#define HUF_FLUSHBITS(s) BIT_flushBits(s)
+
+#define HUF_FLUSHBITS_1(stream) \
+ if (sizeof((stream)->bitContainer) * 8 < HUF_TABLELOG_MAX * 2 + 7) \
+ HUF_FLUSHBITS(stream)
+
+#define HUF_FLUSHBITS_2(stream) \
+ if (sizeof((stream)->bitContainer) * 8 < HUF_TABLELOG_MAX * 4 + 7) \
+ HUF_FLUSHBITS(stream)
+
+size_t HUF_compress1X_usingCTable(void *dst, size_t dstSize, const void *src, size_t srcSize, const HUF_CElt *CTable)
+{
+ const BYTE *ip = (const BYTE *)src;
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *const oend = ostart + dstSize;
+ BYTE *op = ostart;
+ size_t n;
+ BIT_CStream_t bitC;
+
+ /* init */
+ if (dstSize < 8)
+ return 0; /* not enough space to compress */
+ {
+ size_t const initErr = BIT_initCStream(&bitC, op, oend - op);
+ if (HUF_isError(initErr))
+ return 0;
+ }
+
+ n = srcSize & ~3; /* join to mod 4 */
+ switch (srcSize & 3) {
+ case 3: HUF_encodeSymbol(&bitC, ip[n + 2], CTable); HUF_FLUSHBITS_2(&bitC);
+ case 2: HUF_encodeSymbol(&bitC, ip[n + 1], CTable); HUF_FLUSHBITS_1(&bitC);
+ case 1: HUF_encodeSymbol(&bitC, ip[n + 0], CTable); HUF_FLUSHBITS(&bitC);
+ case 0:
+ default:;
+ }
+
+ for (; n > 0; n -= 4) { /* note : n&3==0 at this stage */
+ HUF_encodeSymbol(&bitC, ip[n - 1], CTable);
+ HUF_FLUSHBITS_1(&bitC);
+ HUF_encodeSymbol(&bitC, ip[n - 2], CTable);
+ HUF_FLUSHBITS_2(&bitC);
+ HUF_encodeSymbol(&bitC, ip[n - 3], CTable);
+ HUF_FLUSHBITS_1(&bitC);
+ HUF_encodeSymbol(&bitC, ip[n - 4], CTable);
+ HUF_FLUSHBITS(&bitC);
+ }
+
+ return BIT_closeCStream(&bitC);
+}
+
+size_t HUF_compress4X_usingCTable(void *dst, size_t dstSize, const void *src, size_t srcSize, const HUF_CElt *CTable)
+{
+ size_t const segmentSize = (srcSize + 3) / 4; /* first 3 segments */
+ const BYTE *ip = (const BYTE *)src;
+ const BYTE *const iend = ip + srcSize;
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *const oend = ostart + dstSize;
+ BYTE *op = ostart;
+
+ if (dstSize < 6 + 1 + 1 + 1 + 8)
+ return 0; /* minimum space to compress successfully */
+ if (srcSize < 12)
+ return 0; /* no saving possible : too small input */
+ op += 6; /* jumpTable */
+
+ {
+ CHECK_V_F(cSize, HUF_compress1X_usingCTable(op, oend - op, ip, segmentSize, CTable));
+ if (cSize == 0)
+ return 0;
+ ZSTD_writeLE16(ostart, (U16)cSize);
+ op += cSize;
+ }
+
+ ip += segmentSize;
+ {
+ CHECK_V_F(cSize, HUF_compress1X_usingCTable(op, oend - op, ip, segmentSize, CTable));
+ if (cSize == 0)
+ return 0;
+ ZSTD_writeLE16(ostart + 2, (U16)cSize);
+ op += cSize;
+ }
+
+ ip += segmentSize;
+ {
+ CHECK_V_F(cSize, HUF_compress1X_usingCTable(op, oend - op, ip, segmentSize, CTable));
+ if (cSize == 0)
+ return 0;
+ ZSTD_writeLE16(ostart + 4, (U16)cSize);
+ op += cSize;
+ }
+
+ ip += segmentSize;
+ {
+ CHECK_V_F(cSize, HUF_compress1X_usingCTable(op, oend - op, ip, iend - ip, CTable));
+ if (cSize == 0)
+ return 0;
+ op += cSize;
+ }
+
+ return op - ostart;
+}
+
+static size_t HUF_compressCTable_internal(BYTE *const ostart, BYTE *op, BYTE *const oend, const void *src, size_t srcSize, unsigned singleStream,
+ const HUF_CElt *CTable)
+{
+ size_t const cSize =
+ singleStream ? HUF_compress1X_usingCTable(op, oend - op, src, srcSize, CTable) : HUF_compress4X_usingCTable(op, oend - op, src, srcSize, CTable);
+ if (HUF_isError(cSize)) {
+ return cSize;
+ }
+ if (cSize == 0) {
+ return 0;
+ } /* uncompressible */
+ op += cSize;
+ /* check compressibility */
+ if ((size_t)(op - ostart) >= srcSize - 1) {
+ return 0;
+ }
+ return op - ostart;
+}
+
+/* `workSpace` must a table of at least 1024 unsigned */
+static size_t HUF_compress_internal(void *dst, size_t dstSize, const void *src, size_t srcSize, unsigned maxSymbolValue, unsigned huffLog,
+ unsigned singleStream, void *workSpace, size_t wkspSize, HUF_CElt *oldHufTable, HUF_repeat *repeat, int preferRepeat)
+{
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *const oend = ostart + dstSize;
+ BYTE *op = ostart;
+
+ U32 *count;
+ size_t const countSize = sizeof(U32) * (HUF_SYMBOLVALUE_MAX + 1);
+ HUF_CElt *CTable;
+ size_t const CTableSize = sizeof(HUF_CElt) * (HUF_SYMBOLVALUE_MAX + 1);
+
+ /* checks & inits */
+ if (wkspSize < sizeof(huffNodeTable) + countSize + CTableSize)
+ return ERROR(GENERIC);
+ if (!srcSize)
+ return 0; /* Uncompressed (note : 1 means rle, so first byte must be correct) */
+ if (!dstSize)
+ return 0; /* cannot fit within dst budget */
+ if (srcSize > HUF_BLOCKSIZE_MAX)
+ return ERROR(srcSize_wrong); /* curr block size limit */
+ if (huffLog > HUF_TABLELOG_MAX)
+ return ERROR(tableLog_tooLarge);
+ if (!maxSymbolValue)
+ maxSymbolValue = HUF_SYMBOLVALUE_MAX;
+ if (!huffLog)
+ huffLog = HUF_TABLELOG_DEFAULT;
+
+ count = (U32 *)workSpace;
+ workSpace = (BYTE *)workSpace + countSize;
+ wkspSize -= countSize;
+ CTable = (HUF_CElt *)workSpace;
+ workSpace = (BYTE *)workSpace + CTableSize;
+ wkspSize -= CTableSize;
+
+ /* Heuristic : If we don't need to check the validity of the old table use the old table for small inputs */
+ if (preferRepeat && repeat && *repeat == HUF_repeat_valid) {
+ return HUF_compressCTable_internal(ostart, op, oend, src, srcSize, singleStream, oldHufTable);
+ }
+
+ /* Scan input and build symbol stats */
+ {
+ CHECK_V_F(largest, FSE_count_wksp(count, &maxSymbolValue, (const BYTE *)src, srcSize, (U32 *)workSpace));
+ if (largest == srcSize) {
+ *ostart = ((const BYTE *)src)[0];
+ return 1;
+ } /* single symbol, rle */
+ if (largest <= (srcSize >> 7) + 1)
+ return 0; /* Fast heuristic : not compressible enough */
+ }
+
+ /* Check validity of previous table */
+ if (repeat && *repeat == HUF_repeat_check && !HUF_validateCTable(oldHufTable, count, maxSymbolValue)) {
+ *repeat = HUF_repeat_none;
+ }
+ /* Heuristic : use existing table for small inputs */
+ if (preferRepeat && repeat && *repeat != HUF_repeat_none) {
+ return HUF_compressCTable_internal(ostart, op, oend, src, srcSize, singleStream, oldHufTable);
+ }
+
+ /* Build Huffman Tree */
+ huffLog = HUF_optimalTableLog(huffLog, srcSize, maxSymbolValue);
+ {
+ CHECK_V_F(maxBits, HUF_buildCTable_wksp(CTable, count, maxSymbolValue, huffLog, workSpace, wkspSize));
+ huffLog = (U32)maxBits;
+ /* Zero the unused symbols so we can check it for validity */
+ memset(CTable + maxSymbolValue + 1, 0, CTableSize - (maxSymbolValue + 1) * sizeof(HUF_CElt));
+ }
+
+ /* Write table description header */
+ {
+ CHECK_V_F(hSize, HUF_writeCTable_wksp(op, dstSize, CTable, maxSymbolValue, huffLog, workSpace, wkspSize));
+ /* Check if using the previous table will be beneficial */
+ if (repeat && *repeat != HUF_repeat_none) {
+ size_t const oldSize = HUF_estimateCompressedSize(oldHufTable, count, maxSymbolValue);
+ size_t const newSize = HUF_estimateCompressedSize(CTable, count, maxSymbolValue);
+ if (oldSize <= hSize + newSize || hSize + 12 >= srcSize) {
+ return HUF_compressCTable_internal(ostart, op, oend, src, srcSize, singleStream, oldHufTable);
+ }
+ }
+ /* Use the new table */
+ if (hSize + 12ul >= srcSize) {
+ return 0;
+ }
+ op += hSize;
+ if (repeat) {
+ *repeat = HUF_repeat_none;
+ }
+ if (oldHufTable) {
+ memcpy(oldHufTable, CTable, CTableSize);
+ } /* Save the new table */
+ }
+ return HUF_compressCTable_internal(ostart, op, oend, src, srcSize, singleStream, CTable);
+}
+
+size_t HUF_compress1X_wksp(void *dst, size_t dstSize, const void *src, size_t srcSize, unsigned maxSymbolValue, unsigned huffLog, void *workSpace,
+ size_t wkspSize)
+{
+ return HUF_compress_internal(dst, dstSize, src, srcSize, maxSymbolValue, huffLog, 1 /* single stream */, workSpace, wkspSize, NULL, NULL, 0);
+}
+
+size_t HUF_compress1X_repeat(void *dst, size_t dstSize, const void *src, size_t srcSize, unsigned maxSymbolValue, unsigned huffLog, void *workSpace,
+ size_t wkspSize, HUF_CElt *hufTable, HUF_repeat *repeat, int preferRepeat)
+{
+ return HUF_compress_internal(dst, dstSize, src, srcSize, maxSymbolValue, huffLog, 1 /* single stream */, workSpace, wkspSize, hufTable, repeat,
+ preferRepeat);
+}
+
+size_t HUF_compress4X_wksp(void *dst, size_t dstSize, const void *src, size_t srcSize, unsigned maxSymbolValue, unsigned huffLog, void *workSpace,
+ size_t wkspSize)
+{
+ return HUF_compress_internal(dst, dstSize, src, srcSize, maxSymbolValue, huffLog, 0 /* 4 streams */, workSpace, wkspSize, NULL, NULL, 0);
+}
+
+size_t HUF_compress4X_repeat(void *dst, size_t dstSize, const void *src, size_t srcSize, unsigned maxSymbolValue, unsigned huffLog, void *workSpace,
+ size_t wkspSize, HUF_CElt *hufTable, HUF_repeat *repeat, int preferRepeat)
+{
+ return HUF_compress_internal(dst, dstSize, src, srcSize, maxSymbolValue, huffLog, 0 /* 4 streams */, workSpace, wkspSize, hufTable, repeat,
+ preferRepeat);
+}
diff --git a/lib/zstd/huf_decompress.c b/lib/zstd/huf_decompress.c
new file mode 100644
index 000000000000..6526482047dc
--- /dev/null
+++ b/lib/zstd/huf_decompress.c
@@ -0,0 +1,960 @@
+/*
+ * Huffman decoder, part of New Generation Entropy library
+ * Copyright (C) 2013-2016, Yann Collet.
+ *
+ * BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ *
+ * You can contact the author at :
+ * - Source repository : https://github.com/Cyan4973/FiniteStateEntropy
+ */
+
+/* **************************************************************
+* Compiler specifics
+****************************************************************/
+#define FORCE_INLINE static __always_inline
+
+/* **************************************************************
+* Dependencies
+****************************************************************/
+#include "bitstream.h" /* BIT_* */
+#include "fse.h" /* header compression */
+#include "huf.h"
+#include <linux/compiler.h>
+#include <linux/kernel.h>
+#include <linux/string.h> /* memcpy, memset */
+
+/* **************************************************************
+* Error Management
+****************************************************************/
+#define HUF_STATIC_ASSERT(c) \
+ { \
+ enum { HUF_static_assert = 1 / (int)(!!(c)) }; \
+ } /* use only *after* variable declarations */
+
+/*-***************************/
+/* generic DTableDesc */
+/*-***************************/
+
+typedef struct {
+ BYTE maxTableLog;
+ BYTE tableType;
+ BYTE tableLog;
+ BYTE reserved;
+} DTableDesc;
+
+static DTableDesc HUF_getDTableDesc(const HUF_DTable *table)
+{
+ DTableDesc dtd;
+ memcpy(&dtd, table, sizeof(dtd));
+ return dtd;
+}
+
+/*-***************************/
+/* single-symbol decoding */
+/*-***************************/
+
+typedef struct {
+ BYTE byte;
+ BYTE nbBits;
+} HUF_DEltX2; /* single-symbol decoding */
+
+size_t HUF_readDTableX2_wksp(HUF_DTable *DTable, const void *src, size_t srcSize, void *workspace, size_t workspaceSize)
+{
+ U32 tableLog = 0;
+ U32 nbSymbols = 0;
+ size_t iSize;
+ void *const dtPtr = DTable + 1;
+ HUF_DEltX2 *const dt = (HUF_DEltX2 *)dtPtr;
+
+ U32 *rankVal;
+ BYTE *huffWeight;
+ size_t spaceUsed32 = 0;
+
+ rankVal = (U32 *)workspace + spaceUsed32;
+ spaceUsed32 += HUF_TABLELOG_ABSOLUTEMAX + 1;
+ huffWeight = (BYTE *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += ALIGN(HUF_SYMBOLVALUE_MAX + 1, sizeof(U32)) >> 2;
+
+ if ((spaceUsed32 << 2) > workspaceSize)
+ return ERROR(tableLog_tooLarge);
+ workspace = (U32 *)workspace + spaceUsed32;
+ workspaceSize -= (spaceUsed32 << 2);
+
+ HUF_STATIC_ASSERT(sizeof(DTableDesc) == sizeof(HUF_DTable));
+ /* memset(huffWeight, 0, sizeof(huffWeight)); */ /* is not necessary, even though some analyzer complain ... */
+
+ iSize = HUF_readStats_wksp(huffWeight, HUF_SYMBOLVALUE_MAX + 1, rankVal, &nbSymbols, &tableLog, src, srcSize, workspace, workspaceSize);
+ if (HUF_isError(iSize))
+ return iSize;
+
+ /* Table header */
+ {
+ DTableDesc dtd = HUF_getDTableDesc(DTable);
+ if (tableLog > (U32)(dtd.maxTableLog + 1))
+ return ERROR(tableLog_tooLarge); /* DTable too small, Huffman tree cannot fit in */
+ dtd.tableType = 0;
+ dtd.tableLog = (BYTE)tableLog;
+ memcpy(DTable, &dtd, sizeof(dtd));
+ }
+
+ /* Calculate starting value for each rank */
+ {
+ U32 n, nextRankStart = 0;
+ for (n = 1; n < tableLog + 1; n++) {
+ U32 const curr = nextRankStart;
+ nextRankStart += (rankVal[n] << (n - 1));
+ rankVal[n] = curr;
+ }
+ }
+
+ /* fill DTable */
+ {
+ U32 n;
+ for (n = 0; n < nbSymbols; n++) {
+ U32 const w = huffWeight[n];
+ U32 const length = (1 << w) >> 1;
+ U32 u;
+ HUF_DEltX2 D;
+ D.byte = (BYTE)n;
+ D.nbBits = (BYTE)(tableLog + 1 - w);
+ for (u = rankVal[w]; u < rankVal[w] + length; u++)
+ dt[u] = D;
+ rankVal[w] += length;
+ }
+ }
+
+ return iSize;
+}
+
+static BYTE HUF_decodeSymbolX2(BIT_DStream_t *Dstream, const HUF_DEltX2 *dt, const U32 dtLog)
+{
+ size_t const val = BIT_lookBitsFast(Dstream, dtLog); /* note : dtLog >= 1 */
+ BYTE const c = dt[val].byte;
+ BIT_skipBits(Dstream, dt[val].nbBits);
+ return c;
+}
+
+#define HUF_DECODE_SYMBOLX2_0(ptr, DStreamPtr) *ptr++ = HUF_decodeSymbolX2(DStreamPtr, dt, dtLog)
+
+#define HUF_DECODE_SYMBOLX2_1(ptr, DStreamPtr) \
+ if (ZSTD_64bits() || (HUF_TABLELOG_MAX <= 12)) \
+ HUF_DECODE_SYMBOLX2_0(ptr, DStreamPtr)
+
+#define HUF_DECODE_SYMBOLX2_2(ptr, DStreamPtr) \
+ if (ZSTD_64bits()) \
+ HUF_DECODE_SYMBOLX2_0(ptr, DStreamPtr)
+
+FORCE_INLINE size_t HUF_decodeStreamX2(BYTE *p, BIT_DStream_t *const bitDPtr, BYTE *const pEnd, const HUF_DEltX2 *const dt, const U32 dtLog)
+{
+ BYTE *const pStart = p;
+
+ /* up to 4 symbols at a time */
+ while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) && (p <= pEnd - 4)) {
+ HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_1(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_2(p, bitDPtr);
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+ }
+
+ /* closer to the end */
+ while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) && (p < pEnd))
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+
+ /* no more data to retrieve from bitstream, hence no need to reload */
+ while (p < pEnd)
+ HUF_DECODE_SYMBOLX2_0(p, bitDPtr);
+
+ return pEnd - pStart;
+}
+
+static size_t HUF_decompress1X2_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ BYTE *op = (BYTE *)dst;
+ BYTE *const oend = op + dstSize;
+ const void *dtPtr = DTable + 1;
+ const HUF_DEltX2 *const dt = (const HUF_DEltX2 *)dtPtr;
+ BIT_DStream_t bitD;
+ DTableDesc const dtd = HUF_getDTableDesc(DTable);
+ U32 const dtLog = dtd.tableLog;
+
+ {
+ size_t const errorCode = BIT_initDStream(&bitD, cSrc, cSrcSize);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+
+ HUF_decodeStreamX2(op, &bitD, oend, dt, dtLog);
+
+ /* check */
+ if (!BIT_endOfDStream(&bitD))
+ return ERROR(corruption_detected);
+
+ return dstSize;
+}
+
+size_t HUF_decompress1X2_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ DTableDesc dtd = HUF_getDTableDesc(DTable);
+ if (dtd.tableType != 0)
+ return ERROR(GENERIC);
+ return HUF_decompress1X2_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable);
+}
+
+size_t HUF_decompress1X2_DCtx_wksp(HUF_DTable *DCtx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize)
+{
+ const BYTE *ip = (const BYTE *)cSrc;
+
+ size_t const hSize = HUF_readDTableX2_wksp(DCtx, cSrc, cSrcSize, workspace, workspaceSize);
+ if (HUF_isError(hSize))
+ return hSize;
+ if (hSize >= cSrcSize)
+ return ERROR(srcSize_wrong);
+ ip += hSize;
+ cSrcSize -= hSize;
+
+ return HUF_decompress1X2_usingDTable_internal(dst, dstSize, ip, cSrcSize, DCtx);
+}
+
+static size_t HUF_decompress4X2_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ /* Check */
+ if (cSrcSize < 10)
+ return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */
+
+ {
+ const BYTE *const istart = (const BYTE *)cSrc;
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *const oend = ostart + dstSize;
+ const void *const dtPtr = DTable + 1;
+ const HUF_DEltX2 *const dt = (const HUF_DEltX2 *)dtPtr;
+
+ /* Init */
+ BIT_DStream_t bitD1;
+ BIT_DStream_t bitD2;
+ BIT_DStream_t bitD3;
+ BIT_DStream_t bitD4;
+ size_t const length1 = ZSTD_readLE16(istart);
+ size_t const length2 = ZSTD_readLE16(istart + 2);
+ size_t const length3 = ZSTD_readLE16(istart + 4);
+ size_t const length4 = cSrcSize - (length1 + length2 + length3 + 6);
+ const BYTE *const istart1 = istart + 6; /* jumpTable */
+ const BYTE *const istart2 = istart1 + length1;
+ const BYTE *const istart3 = istart2 + length2;
+ const BYTE *const istart4 = istart3 + length3;
+ const size_t segmentSize = (dstSize + 3) / 4;
+ BYTE *const opStart2 = ostart + segmentSize;
+ BYTE *const opStart3 = opStart2 + segmentSize;
+ BYTE *const opStart4 = opStart3 + segmentSize;
+ BYTE *op1 = ostart;
+ BYTE *op2 = opStart2;
+ BYTE *op3 = opStart3;
+ BYTE *op4 = opStart4;
+ U32 endSignal;
+ DTableDesc const dtd = HUF_getDTableDesc(DTable);
+ U32 const dtLog = dtd.tableLog;
+
+ if (length4 > cSrcSize)
+ return ERROR(corruption_detected); /* overflow */
+ {
+ size_t const errorCode = BIT_initDStream(&bitD1, istart1, length1);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+ {
+ size_t const errorCode = BIT_initDStream(&bitD2, istart2, length2);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+ {
+ size_t const errorCode = BIT_initDStream(&bitD3, istart3, length3);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+ {
+ size_t const errorCode = BIT_initDStream(&bitD4, istart4, length4);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+
+ /* 16-32 symbols per loop (4-8 symbols per stream) */
+ endSignal = BIT_reloadDStream(&bitD1) | BIT_reloadDStream(&bitD2) | BIT_reloadDStream(&bitD3) | BIT_reloadDStream(&bitD4);
+ for (; (endSignal == BIT_DStream_unfinished) && (op4 < (oend - 7));) {
+ HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX2_1(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_1(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_1(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_1(op4, &bitD4);
+ HUF_DECODE_SYMBOLX2_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX2_0(op1, &bitD1);
+ HUF_DECODE_SYMBOLX2_0(op2, &bitD2);
+ HUF_DECODE_SYMBOLX2_0(op3, &bitD3);
+ HUF_DECODE_SYMBOLX2_0(op4, &bitD4);
+ endSignal = BIT_reloadDStream(&bitD1) | BIT_reloadDStream(&bitD2) | BIT_reloadDStream(&bitD3) | BIT_reloadDStream(&bitD4);
+ }
+
+ /* check corruption */
+ if (op1 > opStart2)
+ return ERROR(corruption_detected);
+ if (op2 > opStart3)
+ return ERROR(corruption_detected);
+ if (op3 > opStart4)
+ return ERROR(corruption_detected);
+ /* note : op4 supposed already verified within main loop */
+
+ /* finish bitStreams one by one */
+ HUF_decodeStreamX2(op1, &bitD1, opStart2, dt, dtLog);
+ HUF_decodeStreamX2(op2, &bitD2, opStart3, dt, dtLog);
+ HUF_decodeStreamX2(op3, &bitD3, opStart4, dt, dtLog);
+ HUF_decodeStreamX2(op4, &bitD4, oend, dt, dtLog);
+
+ /* check */
+ endSignal = BIT_endOfDStream(&bitD1) & BIT_endOfDStream(&bitD2) & BIT_endOfDStream(&bitD3) & BIT_endOfDStream(&bitD4);
+ if (!endSignal)
+ return ERROR(corruption_detected);
+
+ /* decoded size */
+ return dstSize;
+ }
+}
+
+size_t HUF_decompress4X2_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ DTableDesc dtd = HUF_getDTableDesc(DTable);
+ if (dtd.tableType != 0)
+ return ERROR(GENERIC);
+ return HUF_decompress4X2_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable);
+}
+
+size_t HUF_decompress4X2_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize)
+{
+ const BYTE *ip = (const BYTE *)cSrc;
+
+ size_t const hSize = HUF_readDTableX2_wksp(dctx, cSrc, cSrcSize, workspace, workspaceSize);
+ if (HUF_isError(hSize))
+ return hSize;
+ if (hSize >= cSrcSize)
+ return ERROR(srcSize_wrong);
+ ip += hSize;
+ cSrcSize -= hSize;
+
+ return HUF_decompress4X2_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx);
+}
+
+/* *************************/
+/* double-symbols decoding */
+/* *************************/
+typedef struct {
+ U16 sequence;
+ BYTE nbBits;
+ BYTE length;
+} HUF_DEltX4; /* double-symbols decoding */
+
+typedef struct {
+ BYTE symbol;
+ BYTE weight;
+} sortedSymbol_t;
+
+/* HUF_fillDTableX4Level2() :
+ * `rankValOrigin` must be a table of at least (HUF_TABLELOG_MAX + 1) U32 */
+static void HUF_fillDTableX4Level2(HUF_DEltX4 *DTable, U32 sizeLog, const U32 consumed, const U32 *rankValOrigin, const int minWeight,
+ const sortedSymbol_t *sortedSymbols, const U32 sortedListSize, U32 nbBitsBaseline, U16 baseSeq)
+{
+ HUF_DEltX4 DElt;
+ U32 rankVal[HUF_TABLELOG_MAX + 1];
+
+ /* get pre-calculated rankVal */
+ memcpy(rankVal, rankValOrigin, sizeof(rankVal));
+
+ /* fill skipped values */
+ if (minWeight > 1) {
+ U32 i, skipSize = rankVal[minWeight];
+ ZSTD_writeLE16(&(DElt.sequence), baseSeq);
+ DElt.nbBits = (BYTE)(consumed);
+ DElt.length = 1;
+ for (i = 0; i < skipSize; i++)
+ DTable[i] = DElt;
+ }
+
+ /* fill DTable */
+ {
+ U32 s;
+ for (s = 0; s < sortedListSize; s++) { /* note : sortedSymbols already skipped */
+ const U32 symbol = sortedSymbols[s].symbol;
+ const U32 weight = sortedSymbols[s].weight;
+ const U32 nbBits = nbBitsBaseline - weight;
+ const U32 length = 1 << (sizeLog - nbBits);
+ const U32 start = rankVal[weight];
+ U32 i = start;
+ const U32 end = start + length;
+
+ ZSTD_writeLE16(&(DElt.sequence), (U16)(baseSeq + (symbol << 8)));
+ DElt.nbBits = (BYTE)(nbBits + consumed);
+ DElt.length = 2;
+ do {
+ DTable[i++] = DElt;
+ } while (i < end); /* since length >= 1 */
+
+ rankVal[weight] += length;
+ }
+ }
+}
+
+typedef U32 rankVal_t[HUF_TABLELOG_MAX][HUF_TABLELOG_MAX + 1];
+typedef U32 rankValCol_t[HUF_TABLELOG_MAX + 1];
+
+static void HUF_fillDTableX4(HUF_DEltX4 *DTable, const U32 targetLog, const sortedSymbol_t *sortedList, const U32 sortedListSize, const U32 *rankStart,
+ rankVal_t rankValOrigin, const U32 maxWeight, const U32 nbBitsBaseline)
+{
+ U32 rankVal[HUF_TABLELOG_MAX + 1];
+ const int scaleLog = nbBitsBaseline - targetLog; /* note : targetLog >= srcLog, hence scaleLog <= 1 */
+ const U32 minBits = nbBitsBaseline - maxWeight;
+ U32 s;
+
+ memcpy(rankVal, rankValOrigin, sizeof(rankVal));
+
+ /* fill DTable */
+ for (s = 0; s < sortedListSize; s++) {
+ const U16 symbol = sortedList[s].symbol;
+ const U32 weight = sortedList[s].weight;
+ const U32 nbBits = nbBitsBaseline - weight;
+ const U32 start = rankVal[weight];
+ const U32 length = 1 << (targetLog - nbBits);
+
+ if (targetLog - nbBits >= minBits) { /* enough room for a second symbol */
+ U32 sortedRank;
+ int minWeight = nbBits + scaleLog;
+ if (minWeight < 1)
+ minWeight = 1;
+ sortedRank = rankStart[minWeight];
+ HUF_fillDTableX4Level2(DTable + start, targetLog - nbBits, nbBits, rankValOrigin[nbBits], minWeight, sortedList + sortedRank,
+ sortedListSize - sortedRank, nbBitsBaseline, symbol);
+ } else {
+ HUF_DEltX4 DElt;
+ ZSTD_writeLE16(&(DElt.sequence), symbol);
+ DElt.nbBits = (BYTE)(nbBits);
+ DElt.length = 1;
+ {
+ U32 const end = start + length;
+ U32 u;
+ for (u = start; u < end; u++)
+ DTable[u] = DElt;
+ }
+ }
+ rankVal[weight] += length;
+ }
+}
+
+size_t HUF_readDTableX4_wksp(HUF_DTable *DTable, const void *src, size_t srcSize, void *workspace, size_t workspaceSize)
+{
+ U32 tableLog, maxW, sizeOfSort, nbSymbols;
+ DTableDesc dtd = HUF_getDTableDesc(DTable);
+ U32 const maxTableLog = dtd.maxTableLog;
+ size_t iSize;
+ void *dtPtr = DTable + 1; /* force compiler to avoid strict-aliasing */
+ HUF_DEltX4 *const dt = (HUF_DEltX4 *)dtPtr;
+ U32 *rankStart;
+
+ rankValCol_t *rankVal;
+ U32 *rankStats;
+ U32 *rankStart0;
+ sortedSymbol_t *sortedSymbol;
+ BYTE *weightList;
+ size_t spaceUsed32 = 0;
+
+ HUF_STATIC_ASSERT((sizeof(rankValCol_t) & 3) == 0);
+
+ rankVal = (rankValCol_t *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += (sizeof(rankValCol_t) * HUF_TABLELOG_MAX) >> 2;
+ rankStats = (U32 *)workspace + spaceUsed32;
+ spaceUsed32 += HUF_TABLELOG_MAX + 1;
+ rankStart0 = (U32 *)workspace + spaceUsed32;
+ spaceUsed32 += HUF_TABLELOG_MAX + 2;
+ sortedSymbol = (sortedSymbol_t *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += ALIGN(sizeof(sortedSymbol_t) * (HUF_SYMBOLVALUE_MAX + 1), sizeof(U32)) >> 2;
+ weightList = (BYTE *)((U32 *)workspace + spaceUsed32);
+ spaceUsed32 += ALIGN(HUF_SYMBOLVALUE_MAX + 1, sizeof(U32)) >> 2;
+
+ if ((spaceUsed32 << 2) > workspaceSize)
+ return ERROR(tableLog_tooLarge);
+ workspace = (U32 *)workspace + spaceUsed32;
+ workspaceSize -= (spaceUsed32 << 2);
+
+ rankStart = rankStart0 + 1;
+ memset(rankStats, 0, sizeof(U32) * (2 * HUF_TABLELOG_MAX + 2 + 1));
+
+ HUF_STATIC_ASSERT(sizeof(HUF_DEltX4) == sizeof(HUF_DTable)); /* if compiler fails here, assertion is wrong */
+ if (maxTableLog > HUF_TABLELOG_MAX)
+ return ERROR(tableLog_tooLarge);
+ /* memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
+
+ iSize = HUF_readStats_wksp(weightList, HUF_SYMBOLVALUE_MAX + 1, rankStats, &nbSymbols, &tableLog, src, srcSize, workspace, workspaceSize);
+ if (HUF_isError(iSize))
+ return iSize;
+
+ /* check result */
+ if (tableLog > maxTableLog)
+ return ERROR(tableLog_tooLarge); /* DTable can't fit code depth */
+
+ /* find maxWeight */
+ for (maxW = tableLog; rankStats[maxW] == 0; maxW--) {
+ } /* necessarily finds a solution before 0 */
+
+ /* Get start index of each weight */
+ {
+ U32 w, nextRankStart = 0;
+ for (w = 1; w < maxW + 1; w++) {
+ U32 curr = nextRankStart;
+ nextRankStart += rankStats[w];
+ rankStart[w] = curr;
+ }
+ rankStart[0] = nextRankStart; /* put all 0w symbols at the end of sorted list*/
+ sizeOfSort = nextRankStart;
+ }
+
+ /* sort symbols by weight */
+ {
+ U32 s;
+ for (s = 0; s < nbSymbols; s++) {
+ U32 const w = weightList[s];
+ U32 const r = rankStart[w]++;
+ sortedSymbol[r].symbol = (BYTE)s;
+ sortedSymbol[r].weight = (BYTE)w;
+ }
+ rankStart[0] = 0; /* forget 0w symbols; this is beginning of weight(1) */
+ }
+
+ /* Build rankVal */
+ {
+ U32 *const rankVal0 = rankVal[0];
+ {
+ int const rescale = (maxTableLog - tableLog) - 1; /* tableLog <= maxTableLog */
+ U32 nextRankVal = 0;
+ U32 w;
+ for (w = 1; w < maxW + 1; w++) {
+ U32 curr = nextRankVal;
+ nextRankVal += rankStats[w] << (w + rescale);
+ rankVal0[w] = curr;
+ }
+ }
+ {
+ U32 const minBits = tableLog + 1 - maxW;
+ U32 consumed;
+ for (consumed = minBits; consumed < maxTableLog - minBits + 1; consumed++) {
+ U32 *const rankValPtr = rankVal[consumed];
+ U32 w;
+ for (w = 1; w < maxW + 1; w++) {
+ rankValPtr[w] = rankVal0[w] >> consumed;
+ }
+ }
+ }
+ }
+
+ HUF_fillDTableX4(dt, maxTableLog, sortedSymbol, sizeOfSort, rankStart0, rankVal, maxW, tableLog + 1);
+
+ dtd.tableLog = (BYTE)maxTableLog;
+ dtd.tableType = 1;
+ memcpy(DTable, &dtd, sizeof(dtd));
+ return iSize;
+}
+
+static U32 HUF_decodeSymbolX4(void *op, BIT_DStream_t *DStream, const HUF_DEltX4 *dt, const U32 dtLog)
+{
+ size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */
+ memcpy(op, dt + val, 2);
+ BIT_skipBits(DStream, dt[val].nbBits);
+ return dt[val].length;
+}
+
+static U32 HUF_decodeLastSymbolX4(void *op, BIT_DStream_t *DStream, const HUF_DEltX4 *dt, const U32 dtLog)
+{
+ size_t const val = BIT_lookBitsFast(DStream, dtLog); /* note : dtLog >= 1 */
+ memcpy(op, dt + val, 1);
+ if (dt[val].length == 1)
+ BIT_skipBits(DStream, dt[val].nbBits);
+ else {
+ if (DStream->bitsConsumed < (sizeof(DStream->bitContainer) * 8)) {
+ BIT_skipBits(DStream, dt[val].nbBits);
+ if (DStream->bitsConsumed > (sizeof(DStream->bitContainer) * 8))
+ /* ugly hack; works only because it's the last symbol. Note : can't easily extract nbBits from just this symbol */
+ DStream->bitsConsumed = (sizeof(DStream->bitContainer) * 8);
+ }
+ }
+ return 1;
+}
+
+#define HUF_DECODE_SYMBOLX4_0(ptr, DStreamPtr) ptr += HUF_decodeSymbolX4(ptr, DStreamPtr, dt, dtLog)
+
+#define HUF_DECODE_SYMBOLX4_1(ptr, DStreamPtr) \
+ if (ZSTD_64bits() || (HUF_TABLELOG_MAX <= 12)) \
+ ptr += HUF_decodeSymbolX4(ptr, DStreamPtr, dt, dtLog)
+
+#define HUF_DECODE_SYMBOLX4_2(ptr, DStreamPtr) \
+ if (ZSTD_64bits()) \
+ ptr += HUF_decodeSymbolX4(ptr, DStreamPtr, dt, dtLog)
+
+FORCE_INLINE size_t HUF_decodeStreamX4(BYTE *p, BIT_DStream_t *bitDPtr, BYTE *const pEnd, const HUF_DEltX4 *const dt, const U32 dtLog)
+{
+ BYTE *const pStart = p;
+
+ /* up to 8 symbols at a time */
+ while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p < pEnd - (sizeof(bitDPtr->bitContainer) - 1))) {
+ HUF_DECODE_SYMBOLX4_2(p, bitDPtr);
+ HUF_DECODE_SYMBOLX4_1(p, bitDPtr);
+ HUF_DECODE_SYMBOLX4_2(p, bitDPtr);
+ HUF_DECODE_SYMBOLX4_0(p, bitDPtr);
+ }
+
+ /* closer to end : up to 2 symbols at a time */
+ while ((BIT_reloadDStream(bitDPtr) == BIT_DStream_unfinished) & (p <= pEnd - 2))
+ HUF_DECODE_SYMBOLX4_0(p, bitDPtr);
+
+ while (p <= pEnd - 2)
+ HUF_DECODE_SYMBOLX4_0(p, bitDPtr); /* no need to reload : reached the end of DStream */
+
+ if (p < pEnd)
+ p += HUF_decodeLastSymbolX4(p, bitDPtr, dt, dtLog);
+
+ return p - pStart;
+}
+
+static size_t HUF_decompress1X4_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ BIT_DStream_t bitD;
+
+ /* Init */
+ {
+ size_t const errorCode = BIT_initDStream(&bitD, cSrc, cSrcSize);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+
+ /* decode */
+ {
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *const oend = ostart + dstSize;
+ const void *const dtPtr = DTable + 1; /* force compiler to not use strict-aliasing */
+ const HUF_DEltX4 *const dt = (const HUF_DEltX4 *)dtPtr;
+ DTableDesc const dtd = HUF_getDTableDesc(DTable);
+ HUF_decodeStreamX4(ostart, &bitD, oend, dt, dtd.tableLog);
+ }
+
+ /* check */
+ if (!BIT_endOfDStream(&bitD))
+ return ERROR(corruption_detected);
+
+ /* decoded size */
+ return dstSize;
+}
+
+size_t HUF_decompress1X4_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ DTableDesc dtd = HUF_getDTableDesc(DTable);
+ if (dtd.tableType != 1)
+ return ERROR(GENERIC);
+ return HUF_decompress1X4_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable);
+}
+
+size_t HUF_decompress1X4_DCtx_wksp(HUF_DTable *DCtx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize)
+{
+ const BYTE *ip = (const BYTE *)cSrc;
+
+ size_t const hSize = HUF_readDTableX4_wksp(DCtx, cSrc, cSrcSize, workspace, workspaceSize);
+ if (HUF_isError(hSize))
+ return hSize;
+ if (hSize >= cSrcSize)
+ return ERROR(srcSize_wrong);
+ ip += hSize;
+ cSrcSize -= hSize;
+
+ return HUF_decompress1X4_usingDTable_internal(dst, dstSize, ip, cSrcSize, DCtx);
+}
+
+static size_t HUF_decompress4X4_usingDTable_internal(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ if (cSrcSize < 10)
+ return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */
+
+ {
+ const BYTE *const istart = (const BYTE *)cSrc;
+ BYTE *const ostart = (BYTE *)dst;
+ BYTE *const oend = ostart + dstSize;
+ const void *const dtPtr = DTable + 1;
+ const HUF_DEltX4 *const dt = (const HUF_DEltX4 *)dtPtr;
+
+ /* Init */
+ BIT_DStream_t bitD1;
+ BIT_DStream_t bitD2;
+ BIT_DStream_t bitD3;
+ BIT_DStream_t bitD4;
+ size_t const length1 = ZSTD_readLE16(istart);
+ size_t const length2 = ZSTD_readLE16(istart + 2);
+ size_t const length3 = ZSTD_readLE16(istart + 4);
+ size_t const length4 = cSrcSize - (length1 + length2 + length3 + 6);
+ const BYTE *const istart1 = istart + 6; /* jumpTable */
+ const BYTE *const istart2 = istart1 + length1;
+ const BYTE *const istart3 = istart2 + length2;
+ const BYTE *const istart4 = istart3 + length3;
+ size_t const segmentSize = (dstSize + 3) / 4;
+ BYTE *const opStart2 = ostart + segmentSize;
+ BYTE *const opStart3 = opStart2 + segmentSize;
+ BYTE *const opStart4 = opStart3 + segmentSize;
+ BYTE *op1 = ostart;
+ BYTE *op2 = opStart2;
+ BYTE *op3 = opStart3;
+ BYTE *op4 = opStart4;
+ U32 endSignal;
+ DTableDesc const dtd = HUF_getDTableDesc(DTable);
+ U32 const dtLog = dtd.tableLog;
+
+ if (length4 > cSrcSize)
+ return ERROR(corruption_detected); /* overflow */
+ {
+ size_t const errorCode = BIT_initDStream(&bitD1, istart1, length1);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+ {
+ size_t const errorCode = BIT_initDStream(&bitD2, istart2, length2);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+ {
+ size_t const errorCode = BIT_initDStream(&bitD3, istart3, length3);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+ {
+ size_t const errorCode = BIT_initDStream(&bitD4, istart4, length4);
+ if (HUF_isError(errorCode))
+ return errorCode;
+ }
+
+ /* 16-32 symbols per loop (4-8 symbols per stream) */
+ endSignal = BIT_reloadDStream(&bitD1) | BIT_reloadDStream(&bitD2) | BIT_reloadDStream(&bitD3) | BIT_reloadDStream(&bitD4);
+ for (; (endSignal == BIT_DStream_unfinished) & (op4 < (oend - (sizeof(bitD4.bitContainer) - 1)));) {
+ HUF_DECODE_SYMBOLX4_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX4_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX4_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX4_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX4_1(op1, &bitD1);
+ HUF_DECODE_SYMBOLX4_1(op2, &bitD2);
+ HUF_DECODE_SYMBOLX4_1(op3, &bitD3);
+ HUF_DECODE_SYMBOLX4_1(op4, &bitD4);
+ HUF_DECODE_SYMBOLX4_2(op1, &bitD1);
+ HUF_DECODE_SYMBOLX4_2(op2, &bitD2);
+ HUF_DECODE_SYMBOLX4_2(op3, &bitD3);
+ HUF_DECODE_SYMBOLX4_2(op4, &bitD4);
+ HUF_DECODE_SYMBOLX4_0(op1, &bitD1);
+ HUF_DECODE_SYMBOLX4_0(op2, &bitD2);
+ HUF_DECODE_SYMBOLX4_0(op3, &bitD3);
+ HUF_DECODE_SYMBOLX4_0(op4, &bitD4);
+
+ endSignal = BIT_reloadDStream(&bitD1) | BIT_reloadDStream(&bitD2) | BIT_reloadDStream(&bitD3) | BIT_reloadDStream(&bitD4);
+ }
+
+ /* check corruption */
+ if (op1 > opStart2)
+ return ERROR(corruption_detected);
+ if (op2 > opStart3)
+ return ERROR(corruption_detected);
+ if (op3 > opStart4)
+ return ERROR(corruption_detected);
+ /* note : op4 already verified within main loop */
+
+ /* finish bitStreams one by one */
+ HUF_decodeStreamX4(op1, &bitD1, opStart2, dt, dtLog);
+ HUF_decodeStreamX4(op2, &bitD2, opStart3, dt, dtLog);
+ HUF_decodeStreamX4(op3, &bitD3, opStart4, dt, dtLog);
+ HUF_decodeStreamX4(op4, &bitD4, oend, dt, dtLog);
+
+ /* check */
+ {
+ U32 const endCheck = BIT_endOfDStream(&bitD1) & BIT_endOfDStream(&bitD2) & BIT_endOfDStream(&bitD3) & BIT_endOfDStream(&bitD4);
+ if (!endCheck)
+ return ERROR(corruption_detected);
+ }
+
+ /* decoded size */
+ return dstSize;
+ }
+}
+
+size_t HUF_decompress4X4_usingDTable(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ DTableDesc dtd = HUF_getDTableDesc(DTable);
+ if (dtd.tableType != 1)
+ return ERROR(GENERIC);
+ return HUF_decompress4X4_usingDTable_internal(dst, dstSize, cSrc, cSrcSize, DTable);
+}
+
+size_t HUF_decompress4X4_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize)
+{
+ const BYTE *ip = (const BYTE *)cSrc;
+
+ size_t hSize = HUF_readDTableX4_wksp(dctx, cSrc, cSrcSize, workspace, workspaceSize);
+ if (HUF_isError(hSize))
+ return hSize;
+ if (hSize >= cSrcSize)
+ return ERROR(srcSize_wrong);
+ ip += hSize;
+ cSrcSize -= hSize;
+
+ return HUF_decompress4X4_usingDTable_internal(dst, dstSize, ip, cSrcSize, dctx);
+}
+
+/* ********************************/
+/* Generic decompression selector */
+/* ********************************/
+
+size_t HUF_decompress1X_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ DTableDesc const dtd = HUF_getDTableDesc(DTable);
+ return dtd.tableType ? HUF_decompress1X4_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable)
+ : HUF_decompress1X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable);
+}
+
+size_t HUF_decompress4X_usingDTable(void *dst, size_t maxDstSize, const void *cSrc, size_t cSrcSize, const HUF_DTable *DTable)
+{
+ DTableDesc const dtd = HUF_getDTableDesc(DTable);
+ return dtd.tableType ? HUF_decompress4X4_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable)
+ : HUF_decompress4X2_usingDTable_internal(dst, maxDstSize, cSrc, cSrcSize, DTable);
+}
+
+typedef struct {
+ U32 tableTime;
+ U32 decode256Time;
+} algo_time_t;
+static const algo_time_t algoTime[16 /* Quantization */][3 /* single, double, quad */] = {
+ /* single, double, quad */
+ {{0, 0}, {1, 1}, {2, 2}}, /* Q==0 : impossible */
+ {{0, 0}, {1, 1}, {2, 2}}, /* Q==1 : impossible */
+ {{38, 130}, {1313, 74}, {2151, 38}}, /* Q == 2 : 12-18% */
+ {{448, 128}, {1353, 74}, {2238, 41}}, /* Q == 3 : 18-25% */
+ {{556, 128}, {1353, 74}, {2238, 47}}, /* Q == 4 : 25-32% */
+ {{714, 128}, {1418, 74}, {2436, 53}}, /* Q == 5 : 32-38% */
+ {{883, 128}, {1437, 74}, {2464, 61}}, /* Q == 6 : 38-44% */
+ {{897, 128}, {1515, 75}, {2622, 68}}, /* Q == 7 : 44-50% */
+ {{926, 128}, {1613, 75}, {2730, 75}}, /* Q == 8 : 50-56% */
+ {{947, 128}, {1729, 77}, {3359, 77}}, /* Q == 9 : 56-62% */
+ {{1107, 128}, {2083, 81}, {4006, 84}}, /* Q ==10 : 62-69% */
+ {{1177, 128}, {2379, 87}, {4785, 88}}, /* Q ==11 : 69-75% */
+ {{1242, 128}, {2415, 93}, {5155, 84}}, /* Q ==12 : 75-81% */
+ {{1349, 128}, {2644, 106}, {5260, 106}}, /* Q ==13 : 81-87% */
+ {{1455, 128}, {2422, 124}, {4174, 124}}, /* Q ==14 : 87-93% */
+ {{722, 128}, {1891, 145}, {1936, 146}}, /* Q ==15 : 93-99% */
+};
+
+/** HUF_selectDecoder() :
+* Tells which decoder is likely to decode faster,
+* based on a set of pre-determined metrics.
+* @return : 0==HUF_decompress4X2, 1==HUF_decompress4X4 .
+* Assumption : 0 < cSrcSize < dstSize <= 128 KB */
+U32 HUF_selectDecoder(size_t dstSize, size_t cSrcSize)
+{
+ /* decoder timing evaluation */
+ U32 const Q = (U32)(cSrcSize * 16 / dstSize); /* Q < 16 since dstSize > cSrcSize */
+ U32 const D256 = (U32)(dstSize >> 8);
+ U32 const DTime0 = algoTime[Q][0].tableTime + (algoTime[Q][0].decode256Time * D256);
+ U32 DTime1 = algoTime[Q][1].tableTime + (algoTime[Q][1].decode256Time * D256);
+ DTime1 += DTime1 >> 3; /* advantage to algorithm using less memory, for cache eviction */
+
+ return DTime1 < DTime0;
+}
+
+typedef size_t (*decompressionAlgo)(void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize);
+
+size_t HUF_decompress4X_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize)
+{
+ /* validation checks */
+ if (dstSize == 0)
+ return ERROR(dstSize_tooSmall);
+ if (cSrcSize > dstSize)
+ return ERROR(corruption_detected); /* invalid */
+ if (cSrcSize == dstSize) {
+ memcpy(dst, cSrc, dstSize);
+ return dstSize;
+ } /* not compressed */
+ if (cSrcSize == 1) {
+ memset(dst, *(const BYTE *)cSrc, dstSize);
+ return dstSize;
+ } /* RLE */
+
+ {
+ U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize);
+ return algoNb ? HUF_decompress4X4_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workspace, workspaceSize)
+ : HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workspace, workspaceSize);
+ }
+}
+
+size_t HUF_decompress4X_hufOnly_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize)
+{
+ /* validation checks */
+ if (dstSize == 0)
+ return ERROR(dstSize_tooSmall);
+ if ((cSrcSize >= dstSize) || (cSrcSize <= 1))
+ return ERROR(corruption_detected); /* invalid */
+
+ {
+ U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize);
+ return algoNb ? HUF_decompress4X4_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workspace, workspaceSize)
+ : HUF_decompress4X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workspace, workspaceSize);
+ }
+}
+
+size_t HUF_decompress1X_DCtx_wksp(HUF_DTable *dctx, void *dst, size_t dstSize, const void *cSrc, size_t cSrcSize, void *workspace, size_t workspaceSize)
+{
+ /* validation checks */
+ if (dstSize == 0)
+ return ERROR(dstSize_tooSmall);
+ if (cSrcSize > dstSize)
+ return ERROR(corruption_detected); /* invalid */
+ if (cSrcSize == dstSize) {
+ memcpy(dst, cSrc, dstSize);
+ return dstSize;
+ } /* not compressed */
+ if (cSrcSize == 1) {
+ memset(dst, *(const BYTE *)cSrc, dstSize);
+ return dstSize;
+ } /* RLE */
+
+ {
+ U32 const algoNb = HUF_selectDecoder(dstSize, cSrcSize);
+ return algoNb ? HUF_decompress1X4_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workspace, workspaceSize)
+ : HUF_decompress1X2_DCtx_wksp(dctx, dst, dstSize, cSrc, cSrcSize, workspace, workspaceSize);
+ }
+}
diff --git a/lib/zstd/mem.h b/lib/zstd/mem.h
new file mode 100644
index 000000000000..3a0f34c8706c
--- /dev/null
+++ b/lib/zstd/mem.h
@@ -0,0 +1,151 @@
+/**
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of https://github.com/facebook/zstd.
+ * An additional grant of patent rights can be found in the PATENTS file in the
+ * same directory.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ */
+
+#ifndef MEM_H_MODULE
+#define MEM_H_MODULE
+
+/*-****************************************
+* Dependencies
+******************************************/
+#include <asm/unaligned.h>
+#include <linux/string.h> /* memcpy */
+#include <linux/types.h> /* size_t, ptrdiff_t */
+
+/*-****************************************
+* Compiler specifics
+******************************************/
+#define ZSTD_STATIC static __inline __attribute__((unused))
+
+/*-**************************************************************
+* Basic Types
+*****************************************************************/
+typedef uint8_t BYTE;
+typedef uint16_t U16;
+typedef int16_t S16;
+typedef uint32_t U32;
+typedef int32_t S32;
+typedef uint64_t U64;
+typedef int64_t S64;
+typedef ptrdiff_t iPtrDiff;
+typedef uintptr_t uPtrDiff;
+
+/*-**************************************************************
+* Memory I/O
+*****************************************************************/
+ZSTD_STATIC unsigned ZSTD_32bits(void) { return sizeof(size_t) == 4; }
+ZSTD_STATIC unsigned ZSTD_64bits(void) { return sizeof(size_t) == 8; }
+
+#if defined(__LITTLE_ENDIAN)
+#define ZSTD_LITTLE_ENDIAN 1
+#else
+#define ZSTD_LITTLE_ENDIAN 0
+#endif
+
+ZSTD_STATIC unsigned ZSTD_isLittleEndian(void) { return ZSTD_LITTLE_ENDIAN; }
+
+ZSTD_STATIC U16 ZSTD_read16(const void *memPtr) { return get_unaligned((const U16 *)memPtr); }
+
+ZSTD_STATIC U32 ZSTD_read32(const void *memPtr) { return get_unaligned((const U32 *)memPtr); }
+
+ZSTD_STATIC U64 ZSTD_read64(const void *memPtr) { return get_unaligned((const U64 *)memPtr); }
+
+ZSTD_STATIC size_t ZSTD_readST(const void *memPtr) { return get_unaligned((const size_t *)memPtr); }
+
+ZSTD_STATIC void ZSTD_write16(void *memPtr, U16 value) { put_unaligned(value, (U16 *)memPtr); }
+
+ZSTD_STATIC void ZSTD_write32(void *memPtr, U32 value) { put_unaligned(value, (U32 *)memPtr); }
+
+ZSTD_STATIC void ZSTD_write64(void *memPtr, U64 value) { put_unaligned(value, (U64 *)memPtr); }
+
+/*=== Little endian r/w ===*/
+
+ZSTD_STATIC U16 ZSTD_readLE16(const void *memPtr) { return get_unaligned_le16(memPtr); }
+
+ZSTD_STATIC void ZSTD_writeLE16(void *memPtr, U16 val) { put_unaligned_le16(val, memPtr); }
+
+ZSTD_STATIC U32 ZSTD_readLE24(const void *memPtr) { return ZSTD_readLE16(memPtr) + (((const BYTE *)memPtr)[2] << 16); }
+
+ZSTD_STATIC void ZSTD_writeLE24(void *memPtr, U32 val)
+{
+ ZSTD_writeLE16(memPtr, (U16)val);
+ ((BYTE *)memPtr)[2] = (BYTE)(val >> 16);
+}
+
+ZSTD_STATIC U32 ZSTD_readLE32(const void *memPtr) { return get_unaligned_le32(memPtr); }
+
+ZSTD_STATIC void ZSTD_writeLE32(void *memPtr, U32 val32) { put_unaligned_le32(val32, memPtr); }
+
+ZSTD_STATIC U64 ZSTD_readLE64(const void *memPtr) { return get_unaligned_le64(memPtr); }
+
+ZSTD_STATIC void ZSTD_writeLE64(void *memPtr, U64 val64) { put_unaligned_le64(val64, memPtr); }
+
+ZSTD_STATIC size_t ZSTD_readLEST(const void *memPtr)
+{
+ if (ZSTD_32bits())
+ return (size_t)ZSTD_readLE32(memPtr);
+ else
+ return (size_t)ZSTD_readLE64(memPtr);
+}
+
+ZSTD_STATIC void ZSTD_writeLEST(void *memPtr, size_t val)
+{
+ if (ZSTD_32bits())
+ ZSTD_writeLE32(memPtr, (U32)val);
+ else
+ ZSTD_writeLE64(memPtr, (U64)val);
+}
+
+/*=== Big endian r/w ===*/
+
+ZSTD_STATIC U32 ZSTD_readBE32(const void *memPtr) { return get_unaligned_be32(memPtr); }
+
+ZSTD_STATIC void ZSTD_writeBE32(void *memPtr, U32 val32) { put_unaligned_be32(val32, memPtr); }
+
+ZSTD_STATIC U64 ZSTD_readBE64(const void *memPtr) { return get_unaligned_be64(memPtr); }
+
+ZSTD_STATIC void ZSTD_writeBE64(void *memPtr, U64 val64) { put_unaligned_be64(val64, memPtr); }
+
+ZSTD_STATIC size_t ZSTD_readBEST(const void *memPtr)
+{
+ if (ZSTD_32bits())
+ return (size_t)ZSTD_readBE32(memPtr);
+ else
+ return (size_t)ZSTD_readBE64(memPtr);
+}
+
+ZSTD_STATIC void ZSTD_writeBEST(void *memPtr, size_t val)
+{
+ if (ZSTD_32bits())
+ ZSTD_writeBE32(memPtr, (U32)val);
+ else
+ ZSTD_writeBE64(memPtr, (U64)val);
+}
+
+/* function safe only for comparisons */
+ZSTD_STATIC U32 ZSTD_readMINMATCH(const void *memPtr, U32 length)
+{
+ switch (length) {
+ default:
+ case 4: return ZSTD_read32(memPtr);
+ case 3:
+ if (ZSTD_isLittleEndian())
+ return ZSTD_read32(memPtr) << 8;
+ else
+ return ZSTD_read32(memPtr) >> 8;
+ }
+}
+
+#endif /* MEM_H_MODULE */
diff --git a/lib/zstd/zstd_common.c b/lib/zstd/zstd_common.c
new file mode 100644
index 000000000000..a282624ee155
--- /dev/null
+++ b/lib/zstd/zstd_common.c
@@ -0,0 +1,75 @@
+/**
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of https://github.com/facebook/zstd.
+ * An additional grant of patent rights can be found in the PATENTS file in the
+ * same directory.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ */
+
+/*-*************************************
+* Dependencies
+***************************************/
+#include "error_private.h"
+#include "zstd_internal.h" /* declaration of ZSTD_isError, ZSTD_getErrorName, ZSTD_getErrorCode, ZSTD_getErrorString, ZSTD_versionNumber */
+#include <linux/kernel.h>
+
+/*=**************************************************************
+* Custom allocator
+****************************************************************/
+
+#define stack_push(stack, size) \
+ ({ \
+ void *const ptr = ZSTD_PTR_ALIGN((stack)->ptr); \
+ (stack)->ptr = (char *)ptr + (size); \
+ (stack)->ptr <= (stack)->end ? ptr : NULL; \
+ })
+
+ZSTD_customMem ZSTD_initStack(void *workspace, size_t workspaceSize)
+{
+ ZSTD_customMem stackMem = {ZSTD_stackAlloc, ZSTD_stackFree, workspace};
+ ZSTD_stack *stack = (ZSTD_stack *)workspace;
+ /* Verify preconditions */
+ if (!workspace || workspaceSize < sizeof(ZSTD_stack) || workspace != ZSTD_PTR_ALIGN(workspace)) {
+ ZSTD_customMem error = {NULL, NULL, NULL};
+ return error;
+ }
+ /* Initialize the stack */
+ stack->ptr = workspace;
+ stack->end = (char *)workspace + workspaceSize;
+ stack_push(stack, sizeof(ZSTD_stack));
+ return stackMem;
+}
+
+void *ZSTD_stackAllocAll(void *opaque, size_t *size)
+{
+ ZSTD_stack *stack = (ZSTD_stack *)opaque;
+ *size = (BYTE const *)stack->end - (BYTE *)ZSTD_PTR_ALIGN(stack->ptr);
+ return stack_push(stack, *size);
+}
+
+void *ZSTD_stackAlloc(void *opaque, size_t size)
+{
+ ZSTD_stack *stack = (ZSTD_stack *)opaque;
+ return stack_push(stack, size);
+}
+void ZSTD_stackFree(void *opaque, void *address)
+{
+ (void)opaque;
+ (void)address;
+}
+
+void *ZSTD_malloc(size_t size, ZSTD_customMem customMem) { return customMem.customAlloc(customMem.opaque, size); }
+
+void ZSTD_free(void *ptr, ZSTD_customMem customMem)
+{
+ if (ptr != NULL)
+ customMem.customFree(customMem.opaque, ptr);
+}
diff --git a/lib/zstd/zstd_internal.h b/lib/zstd/zstd_internal.h
new file mode 100644
index 000000000000..1a79fab9e13a
--- /dev/null
+++ b/lib/zstd/zstd_internal.h
@@ -0,0 +1,263 @@
+/**
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of https://github.com/facebook/zstd.
+ * An additional grant of patent rights can be found in the PATENTS file in the
+ * same directory.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ */
+
+#ifndef ZSTD_CCOMMON_H_MODULE
+#define ZSTD_CCOMMON_H_MODULE
+
+/*-*******************************************************
+* Compiler specifics
+*********************************************************/
+#define FORCE_INLINE static __always_inline
+#define FORCE_NOINLINE static noinline
+
+/*-*************************************
+* Dependencies
+***************************************/
+#include "error_private.h"
+#include "mem.h"
+#include <linux/compiler.h>
+#include <linux/kernel.h>
+#include <linux/xxhash.h>
+#include <linux/zstd.h>
+
+/*-*************************************
+* shared macros
+***************************************/
+#define MIN(a, b) ((a) < (b) ? (a) : (b))
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+#define CHECK_F(f) \
+ { \
+ size_t const errcod = f; \
+ if (ERR_isError(errcod)) \
+ return errcod; \
+ } /* check and Forward error code */
+#define CHECK_E(f, e) \
+ { \
+ size_t const errcod = f; \
+ if (ERR_isError(errcod)) \
+ return ERROR(e); \
+ } /* check and send Error code */
+#define ZSTD_STATIC_ASSERT(c) \
+ { \
+ enum { ZSTD_static_assert = 1 / (int)(!!(c)) }; \
+ }
+
+/*-*************************************
+* Common constants
+***************************************/
+#define ZSTD_OPT_NUM (1 << 12)
+#define ZSTD_DICT_MAGIC 0xEC30A437 /* v0.7+ */
+
+#define ZSTD_REP_NUM 3 /* number of repcodes */
+#define ZSTD_REP_CHECK (ZSTD_REP_NUM) /* number of repcodes to check by the optimal parser */
+#define ZSTD_REP_MOVE (ZSTD_REP_NUM - 1)
+#define ZSTD_REP_MOVE_OPT (ZSTD_REP_NUM)
+static const U32 repStartValue[ZSTD_REP_NUM] = {1, 4, 8};
+
+#define KB *(1 << 10)
+#define MB *(1 << 20)
+#define GB *(1U << 30)
+
+#define BIT7 128
+#define BIT6 64
+#define BIT5 32
+#define BIT4 16
+#define BIT1 2
+#define BIT0 1
+
+#define ZSTD_WINDOWLOG_ABSOLUTEMIN 10
+static const size_t ZSTD_fcs_fieldSize[4] = {0, 2, 4, 8};
+static const size_t ZSTD_did_fieldSize[4] = {0, 1, 2, 4};
+
+#define ZSTD_BLOCKHEADERSIZE 3 /* C standard doesn't allow `static const` variable to be init using another `static const` variable */
+static const size_t ZSTD_blockHeaderSize = ZSTD_BLOCKHEADERSIZE;
+typedef enum { bt_raw, bt_rle, bt_compressed, bt_reserved } blockType_e;
+
+#define MIN_SEQUENCES_SIZE 1 /* nbSeq==0 */
+#define MIN_CBLOCK_SIZE (1 /*litCSize*/ + 1 /* RLE or RAW */ + MIN_SEQUENCES_SIZE /* nbSeq==0 */) /* for a non-null block */
+
+#define HufLog 12
+typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingType_e;
+
+#define LONGNBSEQ 0x7F00
+
+#define MINMATCH 3
+#define EQUAL_READ32 4
+
+#define Litbits 8
+#define MaxLit ((1 << Litbits) - 1)
+#define MaxML 52
+#define MaxLL 35
+#define MaxOff 28
+#define MaxSeq MAX(MaxLL, MaxML) /* Assumption : MaxOff < MaxLL,MaxML */
+#define MLFSELog 9
+#define LLFSELog 9
+#define OffFSELog 8
+
+static const U32 LL_bits[MaxLL + 1] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+static const S16 LL_defaultNorm[MaxLL + 1] = {4, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 2, 1, 1, 1, 1, 1, -1, -1, -1, -1};
+#define LL_DEFAULTNORMLOG 6 /* for static allocation */
+static const U32 LL_defaultNormLog = LL_DEFAULTNORMLOG;
+
+static const U32 ML_bits[MaxML + 1] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 4, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
+static const S16 ML_defaultNorm[MaxML + 1] = {1, 4, 3, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1};
+#define ML_DEFAULTNORMLOG 6 /* for static allocation */
+static const U32 ML_defaultNormLog = ML_DEFAULTNORMLOG;
+
+static const S16 OF_defaultNorm[MaxOff + 1] = {1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1};
+#define OF_DEFAULTNORMLOG 5 /* for static allocation */
+static const U32 OF_defaultNormLog = OF_DEFAULTNORMLOG;
+
+/*-*******************************************
+* Shared functions to include for inlining
+*********************************************/
+ZSTD_STATIC void ZSTD_copy8(void *dst, const void *src) {
+ memcpy(dst, src, 8);
+}
+/*! ZSTD_wildcopy() :
+* custom version of memcpy(), can copy up to 7 bytes too many (8 bytes if length==0) */
+#define WILDCOPY_OVERLENGTH 8
+ZSTD_STATIC void ZSTD_wildcopy(void *dst, const void *src, ptrdiff_t length)
+{
+ const BYTE* ip = (const BYTE*)src;
+ BYTE* op = (BYTE*)dst;
+ BYTE* const oend = op + length;
+ /* Work around https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81388.
+ * Avoid the bad case where the loop only runs once by handling the
+ * special case separately. This doesn't trigger the bug because it
+ * doesn't involve pointer/integer overflow.
+ */
+ if (length <= 8)
+ return ZSTD_copy8(dst, src);
+ do {
+ ZSTD_copy8(op, ip);
+ op += 8;
+ ip += 8;
+ } while (op < oend);
+}
+
+/*-*******************************************
+* Private interfaces
+*********************************************/
+typedef struct ZSTD_stats_s ZSTD_stats_t;
+
+typedef struct {
+ U32 off;
+ U32 len;
+} ZSTD_match_t;
+
+typedef struct {
+ U32 price;
+ U32 off;
+ U32 mlen;
+ U32 litlen;
+ U32 rep[ZSTD_REP_NUM];
+} ZSTD_optimal_t;
+
+typedef struct seqDef_s {
+ U32 offset;
+ U16 litLength;
+ U16 matchLength;
+} seqDef;
+
+typedef struct {
+ seqDef *sequencesStart;
+ seqDef *sequences;
+ BYTE *litStart;
+ BYTE *lit;
+ BYTE *llCode;
+ BYTE *mlCode;
+ BYTE *ofCode;
+ U32 longLengthID; /* 0 == no longLength; 1 == Lit.longLength; 2 == Match.longLength; */
+ U32 longLengthPos;
+ /* opt */
+ ZSTD_optimal_t *priceTable;
+ ZSTD_match_t *matchTable;
+ U32 *matchLengthFreq;
+ U32 *litLengthFreq;
+ U32 *litFreq;
+ U32 *offCodeFreq;
+ U32 matchLengthSum;
+ U32 matchSum;
+ U32 litLengthSum;
+ U32 litSum;
+ U32 offCodeSum;
+ U32 log2matchLengthSum;
+ U32 log2matchSum;
+ U32 log2litLengthSum;
+ U32 log2litSum;
+ U32 log2offCodeSum;
+ U32 factor;
+ U32 staticPrices;
+ U32 cachedPrice;
+ U32 cachedLitLength;
+ const BYTE *cachedLiterals;
+} seqStore_t;
+
+const seqStore_t *ZSTD_getSeqStore(const ZSTD_CCtx *ctx);
+void ZSTD_seqToCodes(const seqStore_t *seqStorePtr);
+int ZSTD_isSkipFrame(ZSTD_DCtx *dctx);
+
+/*= Custom memory allocation functions */
+typedef void *(*ZSTD_allocFunction)(void *opaque, size_t size);
+typedef void (*ZSTD_freeFunction)(void *opaque, void *address);
+typedef struct {
+ ZSTD_allocFunction customAlloc;
+ ZSTD_freeFunction customFree;
+ void *opaque;
+} ZSTD_customMem;
+
+void *ZSTD_malloc(size_t size, ZSTD_customMem customMem);
+void ZSTD_free(void *ptr, ZSTD_customMem customMem);
+
+/*====== stack allocation ======*/
+
+typedef struct {
+ void *ptr;
+ const void *end;
+} ZSTD_stack;
+
+#define ZSTD_ALIGN(x) ALIGN(x, sizeof(size_t))
+#define ZSTD_PTR_ALIGN(p) PTR_ALIGN(p, sizeof(size_t))
+
+ZSTD_customMem ZSTD_initStack(void *workspace, size_t workspaceSize);
+
+void *ZSTD_stackAllocAll(void *opaque, size_t *size);
+void *ZSTD_stackAlloc(void *opaque, size_t size);
+void ZSTD_stackFree(void *opaque, void *address);
+
+/*====== common function ======*/
+
+ZSTD_STATIC U32 ZSTD_highbit32(U32 val) { return 31 - __builtin_clz(val); }
+
+/* hidden functions */
+
+/* ZSTD_invalidateRepCodes() :
+ * ensures next compression will not use repcodes from previous block.
+ * Note : only works with regular variant;
+ * do not use with extDict variant ! */
+void ZSTD_invalidateRepCodes(ZSTD_CCtx *cctx);
+
+size_t ZSTD_freeCCtx(ZSTD_CCtx *cctx);
+size_t ZSTD_freeDCtx(ZSTD_DCtx *dctx);
+size_t ZSTD_freeCDict(ZSTD_CDict *cdict);
+size_t ZSTD_freeDDict(ZSTD_DDict *cdict);
+size_t ZSTD_freeCStream(ZSTD_CStream *zcs);
+size_t ZSTD_freeDStream(ZSTD_DStream *zds);
+
+#endif /* ZSTD_CCOMMON_H_MODULE */
diff --git a/lib/zstd/zstd_opt.h b/lib/zstd/zstd_opt.h
new file mode 100644
index 000000000000..55e1b4cba808
--- /dev/null
+++ b/lib/zstd/zstd_opt.h
@@ -0,0 +1,1014 @@
+/**
+ * Copyright (c) 2016-present, Przemyslaw Skibinski, Yann Collet, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of https://github.com/facebook/zstd.
+ * An additional grant of patent rights can be found in the PATENTS file in the
+ * same directory.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation. This program is dual-licensed; you may select
+ * either version 2 of the GNU General Public License ("GPL") or BSD license
+ * ("BSD").
+ */
+
+/* Note : this file is intended to be included within zstd_compress.c */
+
+#ifndef ZSTD_OPT_H_91842398743
+#define ZSTD_OPT_H_91842398743
+
+#define ZSTD_LITFREQ_ADD 2
+#define ZSTD_FREQ_DIV 4
+#define ZSTD_MAX_PRICE (1 << 30)
+
+/*-*************************************
+* Price functions for optimal parser
+***************************************/
+FORCE_INLINE void ZSTD_setLog2Prices(seqStore_t *ssPtr)
+{
+ ssPtr->log2matchLengthSum = ZSTD_highbit32(ssPtr->matchLengthSum + 1);
+ ssPtr->log2litLengthSum = ZSTD_highbit32(ssPtr->litLengthSum + 1);
+ ssPtr->log2litSum = ZSTD_highbit32(ssPtr->litSum + 1);
+ ssPtr->log2offCodeSum = ZSTD_highbit32(ssPtr->offCodeSum + 1);
+ ssPtr->factor = 1 + ((ssPtr->litSum >> 5) / ssPtr->litLengthSum) + ((ssPtr->litSum << 1) / (ssPtr->litSum + ssPtr->matchSum));
+}
+
+ZSTD_STATIC void ZSTD_rescaleFreqs(seqStore_t *ssPtr, const BYTE *src, size_t srcSize)
+{
+ unsigned u;
+
+ ssPtr->cachedLiterals = NULL;
+ ssPtr->cachedPrice = ssPtr->cachedLitLength = 0;
+ ssPtr->staticPrices = 0;
+
+ if (ssPtr->litLengthSum == 0) {
+ if (srcSize <= 1024)
+ ssPtr->staticPrices = 1;
+
+ for (u = 0; u <= MaxLit; u++)
+ ssPtr->litFreq[u] = 0;
+ for (u = 0; u < srcSize; u++)
+ ssPtr->litFreq[src[u]]++;
+
+ ssPtr->litSum = 0;
+ ssPtr->litLengthSum = MaxLL + 1;
+ ssPtr->matchLengthSum = MaxML + 1;
+ ssPtr->offCodeSum = (MaxOff + 1);
+ ssPtr->matchSum = (ZSTD_LITFREQ_ADD << Litbits);
+
+ for (u = 0; u <= MaxLit; u++) {
+ ssPtr->litFreq[u] = 1 + (ssPtr->litFreq[u] >> ZSTD_FREQ_DIV);
+ ssPtr->litSum += ssPtr->litFreq[u];
+ }
+ for (u = 0; u <= MaxLL; u++)
+ ssPtr->litLengthFreq[u] = 1;
+ for (u = 0; u <= MaxML; u++)
+ ssPtr->matchLengthFreq[u] = 1;
+ for (u = 0; u <= MaxOff; u++)
+ ssPtr->offCodeFreq[u] = 1;
+ } else {
+ ssPtr->matchLengthSum = 0;
+ ssPtr->litLengthSum = 0;
+ ssPtr->offCodeSum = 0;
+ ssPtr->matchSum = 0;
+ ssPtr->litSum = 0;
+
+ for (u = 0; u <= MaxLit; u++) {
+ ssPtr->litFreq[u] = 1 + (ssPtr->litFreq[u] >> (ZSTD_FREQ_DIV + 1));
+ ssPtr->litSum += ssPtr->litFreq[u];
+ }
+ for (u = 0; u <= MaxLL; u++) {
+ ssPtr->litLengthFreq[u] = 1 + (ssPtr->litLengthFreq[u] >> (ZSTD_FREQ_DIV + 1));
+ ssPtr->litLengthSum += ssPtr->litLengthFreq[u];
+ }
+ for (u = 0; u <= MaxML; u++) {
+ ssPtr->matchLengthFreq[u] = 1 + (ssPtr->matchLengthFreq[u] >> ZSTD_FREQ_DIV);
+ ssPtr->matchLengthSum += ssPtr->matchLengthFreq[u];
+ ssPtr->matchSum += ssPtr->matchLengthFreq[u] * (u + 3);
+ }
+ ssPtr->matchSum *= ZSTD_LITFREQ_ADD;
+ for (u = 0; u <= MaxOff; u++) {
+ ssPtr->offCodeFreq[u] = 1 + (ssPtr->offCodeFreq[u] >> ZSTD_FREQ_DIV);
+ ssPtr->offCodeSum += ssPtr->offCodeFreq[u];
+ }
+ }
+
+ ZSTD_setLog2Prices(ssPtr);
+}
+
+FORCE_INLINE U32 ZSTD_getLiteralPrice(seqStore_t *ssPtr, U32 litLength, const BYTE *literals)
+{
+ U32 price, u;
+
+ if (ssPtr->staticPrices)
+ return ZSTD_highbit32((U32)litLength + 1) + (litLength * 6);
+
+ if (litLength == 0)
+ return ssPtr->log2litLengthSum - ZSTD_highbit32(ssPtr->litLengthFreq[0] + 1);
+
+ /* literals */
+ if (ssPtr->cachedLiterals == literals) {
+ U32 const additional = litLength - ssPtr->cachedLitLength;
+ const BYTE *literals2 = ssPtr->cachedLiterals + ssPtr->cachedLitLength;
+ price = ssPtr->cachedPrice + additional * ssPtr->log2litSum;
+ for (u = 0; u < additional; u++)
+ price -= ZSTD_highbit32(ssPtr->litFreq[literals2[u]] + 1);
+ ssPtr->cachedPrice = price;
+ ssPtr->cachedLitLength = litLength;
+ } else {
+ price = litLength * ssPtr->log2litSum;
+ for (u = 0; u < litLength; u++)
+ price -= ZSTD_highbit32(ssPtr->litFreq[literals[u]] + 1);
+
+ if (litLength >= 12) {
+ ssPtr->cachedLiterals = literals;
+ ssPtr->cachedPrice = price;
+ ssPtr->cachedLitLength = litLength;
+ }
+ }
+
+ /* literal Length */
+ {
+ const BYTE LL_deltaCode = 19;
+ const BYTE llCode = (litLength > 63) ? (BYTE)ZSTD_highbit32(litLength) + LL_deltaCode : LL_Code[litLength];
+ price += LL_bits[llCode] + ssPtr->log2litLengthSum - ZSTD_highbit32(ssPtr->litLengthFreq[llCode] + 1);
+ }
+
+ return price;
+}
+
+FORCE_INLINE U32 ZSTD_getPrice(seqStore_t *seqStorePtr, U32 litLength, const BYTE *literals, U32 offset, U32 matchLength, const int ultra)
+{
+ /* offset */
+ U32 price;
+ BYTE const offCode = (BYTE)ZSTD_highbit32(offset + 1);
+
+ if (seqStorePtr->staticPrices)
+ return ZSTD_getLiteralPrice(seqStorePtr, litLength, literals) + ZSTD_highbit32((U32)matchLength + 1) + 16 + offCode;
+
+ price = offCode + seqStorePtr->log2offCodeSum - ZSTD_highbit32(seqStorePtr->offCodeFreq[offCode] + 1);
+ if (!ultra && offCode >= 20)
+ price += (offCode - 19) * 2;
+
+ /* match Length */
+ {
+ const BYTE ML_deltaCode = 36;
+ const BYTE mlCode = (matchLength > 127) ? (BYTE)ZSTD_highbit32(matchLength) + ML_deltaCode : ML_Code[matchLength];
+ price += ML_bits[mlCode] + seqStorePtr->log2matchLengthSum - ZSTD_highbit32(seqStorePtr->matchLengthFreq[mlCode] + 1);
+ }
+
+ return price + ZSTD_getLiteralPrice(seqStorePtr, litLength, literals) + seqStorePtr->factor;
+}
+
+ZSTD_STATIC void ZSTD_updatePrice(seqStore_t *seqStorePtr, U32 litLength, const BYTE *literals, U32 offset, U32 matchLength)
+{
+ U32 u;
+
+ /* literals */
+ seqStorePtr->litSum += litLength * ZSTD_LITFREQ_ADD;
+ for (u = 0; u < litLength; u++)
+ seqStorePtr->litFreq[literals[u]] += ZSTD_LITFREQ_ADD;
+
+ /* literal Length */
+ {
+ const BYTE LL_deltaCode = 19;
+ const BYTE llCode = (litLength > 63) ? (BYTE)ZSTD_highbit32(litLength) + LL_deltaCode : LL_Code[litLength];
+ seqStorePtr->litLengthFreq[llCode]++;
+ seqStorePtr->litLengthSum++;
+ }
+
+ /* match offset */
+ {
+ BYTE const offCode = (BYTE)ZSTD_highbit32(offset + 1);
+ seqStorePtr->offCodeSum++;
+ seqStorePtr->offCodeFreq[offCode]++;
+ }
+
+ /* match Length */
+ {
+ const BYTE ML_deltaCode = 36;
+ const BYTE mlCode = (matchLength > 127) ? (BYTE)ZSTD_highbit32(matchLength) + ML_deltaCode : ML_Code[matchLength];
+ seqStorePtr->matchLengthFreq[mlCode]++;
+ seqStorePtr->matchLengthSum++;
+ }
+
+ ZSTD_setLog2Prices(seqStorePtr);
+}
+
+#define SET_PRICE(pos, mlen_, offset_, litlen_, price_) \
+ { \
+ while (last_pos < pos) { \
+ opt[last_pos + 1].price = ZSTD_MAX_PRICE; \
+ last_pos++; \
+ } \
+ opt[pos].mlen = mlen_; \
+ opt[pos].off = offset_; \
+ opt[pos].litlen = litlen_; \
+ opt[pos].price = price_; \
+ }
+
+/* Update hashTable3 up to ip (excluded)
+ Assumption : always within prefix (i.e. not within extDict) */
+FORCE_INLINE
+U32 ZSTD_insertAndFindFirstIndexHash3(ZSTD_CCtx *zc, const BYTE *ip)
+{
+ U32 *const hashTable3 = zc->hashTable3;
+ U32 const hashLog3 = zc->hashLog3;
+ const BYTE *const base = zc->base;
+ U32 idx = zc->nextToUpdate3;
+ const U32 target = zc->nextToUpdate3 = (U32)(ip - base);
+ const size_t hash3 = ZSTD_hash3Ptr(ip, hashLog3);
+
+ while (idx < target) {
+ hashTable3[ZSTD_hash3Ptr(base + idx, hashLog3)] = idx;
+ idx++;
+ }
+
+ return hashTable3[hash3];
+}
+
+/*-*************************************
+* Binary Tree search
+***************************************/
+static U32 ZSTD_insertBtAndGetAllMatches(ZSTD_CCtx *zc, const BYTE *const ip, const BYTE *const iLimit, U32 nbCompares, const U32 mls, U32 extDict,
+ ZSTD_match_t *matches, const U32 minMatchLen)
+{
+ const BYTE *const base = zc->base;
+ const U32 curr = (U32)(ip - base);
+ const U32 hashLog = zc->params.cParams.hashLog;
+ const size_t h = ZSTD_hashPtr(ip, hashLog, mls);
+ U32 *const hashTable = zc->hashTable;
+ U32 matchIndex = hashTable[h];
+ U32 *const bt = zc->chainTable;
+ const U32 btLog = zc->params.cParams.chainLog - 1;
+ const U32 btMask = (1U << btLog) - 1;
+ size_t commonLengthSmaller = 0, commonLengthLarger = 0;
+ const BYTE *const dictBase = zc->dictBase;
+ const U32 dictLimit = zc->dictLimit;
+ const BYTE *const dictEnd = dictBase + dictLimit;
+ const BYTE *const prefixStart = base + dictLimit;
+ const U32 btLow = btMask >= curr ? 0 : curr - btMask;
+ const U32 windowLow = zc->lowLimit;
+ U32 *smallerPtr = bt + 2 * (curr & btMask);
+ U32 *largerPtr = bt + 2 * (curr & btMask) + 1;
+ U32 matchEndIdx = curr + 8;
+ U32 dummy32; /* to be nullified at the end */
+ U32 mnum = 0;
+
+ const U32 minMatch = (mls == 3) ? 3 : 4;
+ size_t bestLength = minMatchLen - 1;
+
+ if (minMatch == 3) { /* HC3 match finder */
+ U32 const matchIndex3 = ZSTD_insertAndFindFirstIndexHash3(zc, ip);
+ if (matchIndex3 > windowLow && (curr - matchIndex3 < (1 << 18))) {
+ const BYTE *match;
+ size_t currMl = 0;
+ if ((!extDict) || matchIndex3 >= dictLimit) {
+ match = base + matchIndex3;
+ if (match[bestLength] == ip[bestLength])
+ currMl = ZSTD_count(ip, match, iLimit);
+ } else {
+ match = dictBase + matchIndex3;
+ if (ZSTD_readMINMATCH(match, MINMATCH) ==
+ ZSTD_readMINMATCH(ip, MINMATCH)) /* assumption : matchIndex3 <= dictLimit-4 (by table construction) */
+ currMl = ZSTD_count_2segments(ip + MINMATCH, match + MINMATCH, iLimit, dictEnd, prefixStart) + MINMATCH;
+ }
+
+ /* save best solution */
+ if (currMl > bestLength) {
+ bestLength = currMl;
+ matches[mnum].off = ZSTD_REP_MOVE_OPT + curr - matchIndex3;
+ matches[mnum].len = (U32)currMl;
+ mnum++;
+ if (currMl > ZSTD_OPT_NUM)
+ goto update;
+ if (ip + currMl == iLimit)
+ goto update; /* best possible, and avoid read overflow*/
+ }
+ }
+ }
+
+ hashTable[h] = curr; /* Update Hash Table */
+
+ while (nbCompares-- && (matchIndex > windowLow)) {
+ U32 *nextPtr = bt + 2 * (matchIndex & btMask);
+ size_t matchLength = MIN(commonLengthSmaller, commonLengthLarger); /* guaranteed minimum nb of common bytes */
+ const BYTE *match;
+
+ if ((!extDict) || (matchIndex + matchLength >= dictLimit)) {
+ match = base + matchIndex;
+ if (match[matchLength] == ip[matchLength]) {
+ matchLength += ZSTD_count(ip + matchLength + 1, match + matchLength + 1, iLimit) + 1;
+ }
+ } else {
+ match = dictBase + matchIndex;
+ matchLength += ZSTD_count_2segments(ip + matchLength, match + matchLength, iLimit, dictEnd, prefixStart);
+ if (matchIndex + matchLength >= dictLimit)
+ match = base + matchIndex; /* to prepare for next usage of match[matchLength] */
+ }
+
+ if (matchLength > bestLength) {
+ if (matchLength > matchEndIdx - matchIndex)
+ matchEndIdx = matchIndex + (U32)matchLength;
+ bestLength = matchLength;
+ matches[mnum].off = ZSTD_REP_MOVE_OPT + curr - matchIndex;
+ matches[mnum].len = (U32)matchLength;
+ mnum++;
+ if (matchLength > ZSTD_OPT_NUM)
+ break;
+ if (ip + matchLength == iLimit) /* equal : no way to know if inf or sup */
+ break; /* drop, to guarantee consistency (miss a little bit of compression) */
+ }
+
+ if (match[matchLength] < ip[matchLength]) {
+ /* match is smaller than curr */
+ *smallerPtr = matchIndex; /* update smaller idx */
+ commonLengthSmaller = matchLength; /* all smaller will now have at least this guaranteed common length */
+ if (matchIndex <= btLow) {
+ smallerPtr = &dummy32;
+ break;
+ } /* beyond tree size, stop the search */
+ smallerPtr = nextPtr + 1; /* new "smaller" => larger of match */
+ matchIndex = nextPtr[1]; /* new matchIndex larger than previous (closer to curr) */
+ } else {
+ /* match is larger than curr */
+ *largerPtr = matchIndex;
+ commonLengthLarger = matchLength;
+ if (matchIndex <= btLow) {
+ largerPtr = &dummy32;
+ break;
+ } /* beyond tree size, stop the search */
+ largerPtr = nextPtr;
+ matchIndex = nextPtr[0];
+ }
+ }
+
+ *smallerPtr = *largerPtr = 0;
+
+update:
+ zc->nextToUpdate = (matchEndIdx > curr + 8) ? matchEndIdx - 8 : curr + 1;
+ return mnum;
+}
+
+/** Tree updater, providing best match */
+static U32 ZSTD_BtGetAllMatches(ZSTD_CCtx *zc, const BYTE *const ip, const BYTE *const iLimit, const U32 maxNbAttempts, const U32 mls, ZSTD_match_t *matches,
+ const U32 minMatchLen)
+{
+ if (ip < zc->base + zc->nextToUpdate)
+ return 0; /* skipped area */
+ ZSTD_updateTree(zc, ip, iLimit, maxNbAttempts, mls);
+ return ZSTD_insertBtAndGetAllMatches(zc, ip, iLimit, maxNbAttempts, mls, 0, matches, minMatchLen);
+}
+
+static U32 ZSTD_BtGetAllMatches_selectMLS(ZSTD_CCtx *zc, /* Index table will be updated */
+ const BYTE *ip, const BYTE *const iHighLimit, const U32 maxNbAttempts, const U32 matchLengthSearch,
+ ZSTD_match_t *matches, const U32 minMatchLen)
+{
+ switch (matchLengthSearch) {
+ case 3: return ZSTD_BtGetAllMatches(zc, ip, iHighLimit, maxNbAttempts, 3, matches, minMatchLen);
+ default:
+ case 4: return ZSTD_BtGetAllMatches(zc, ip, iHighLimit, maxNbAttempts, 4, matches, minMatchLen);
+ case 5: return ZSTD_BtGetAllMatches(zc, ip, iHighLimit, maxNbAttempts, 5, matches, minMatchLen);
+ case 7:
+ case 6: return ZSTD_BtGetAllMatches(zc, ip, iHighLimit, maxNbAttempts, 6, matches, minMatchLen);
+ }
+}
+
+/** Tree updater, providing best match */
+static U32 ZSTD_BtGetAllMatches_extDict(ZSTD_CCtx *zc, const BYTE *const ip, const BYTE *const iLimit, const U32 maxNbAttempts, const U32 mls,
+ ZSTD_match_t *matches, const U32 minMatchLen)
+{
+ if (ip < zc->base + zc->nextToUpdate)
+ return 0; /* skipped area */
+ ZSTD_updateTree_extDict(zc, ip, iLimit, maxNbAttempts, mls);
+ return ZSTD_insertBtAndGetAllMatches(zc, ip, iLimit, maxNbAttempts, mls, 1, matches, minMatchLen);
+}
+
+static U32 ZSTD_BtGetAllMatches_selectMLS_extDict(ZSTD_CCtx *zc, /* Index table will be updated */
+ const BYTE *ip, const BYTE *const iHighLimit, const U32 maxNbAttempts, const U32 matchLengthSearch,
+ ZSTD_match_t *matches, const U32 minMatchLen)
+{
+ switch (matchLengthSearch) {
+ case 3: return ZSTD_BtGetAllMatches_extDict(zc, ip, iHighLimit, maxNbAttempts, 3, matches, minMatchLen);
+ default:
+ case 4: return ZSTD_BtGetAllMatches_extDict(zc, ip, iHighLimit, maxNbAttempts, 4, matches, minMatchLen);
+ case 5: return ZSTD_BtGetAllMatches_extDict(zc, ip, iHighLimit, maxNbAttempts, 5, matches, minMatchLen);
+ case 7:
+ case 6: return ZSTD_BtGetAllMatches_extDict(zc, ip, iHighLimit, maxNbAttempts, 6, matches, minMatchLen);
+ }
+}
+
+/*-*******************************
+* Optimal parser
+*********************************/
+FORCE_INLINE
+void ZSTD_compressBlock_opt_generic(ZSTD_CCtx *ctx, const void *src, size_t srcSize, const int ultra)
+{
+ seqStore_t *seqStorePtr = &(ctx->seqStore);
+ const BYTE *const istart = (const BYTE *)src;
+ const BYTE *ip = istart;
+ const BYTE *anchor = istart;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *const ilimit = iend - 8;
+ const BYTE *const base = ctx->base;
+ const BYTE *const prefixStart = base + ctx->dictLimit;
+
+ const U32 maxSearches = 1U << ctx->params.cParams.searchLog;
+ const U32 sufficient_len = ctx->params.cParams.targetLength;
+ const U32 mls = ctx->params.cParams.searchLength;
+ const U32 minMatch = (ctx->params.cParams.searchLength == 3) ? 3 : 4;
+
+ ZSTD_optimal_t *opt = seqStorePtr->priceTable;
+ ZSTD_match_t *matches = seqStorePtr->matchTable;
+ const BYTE *inr;
+ U32 offset, rep[ZSTD_REP_NUM];
+
+ /* init */
+ ctx->nextToUpdate3 = ctx->nextToUpdate;
+ ZSTD_rescaleFreqs(seqStorePtr, (const BYTE *)src, srcSize);
+ ip += (ip == prefixStart);
+ {
+ U32 i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ rep[i] = ctx->rep[i];
+ }
+
+ /* Match Loop */
+ while (ip < ilimit) {
+ U32 cur, match_num, last_pos, litlen, price;
+ U32 u, mlen, best_mlen, best_off, litLength;
+ memset(opt, 0, sizeof(ZSTD_optimal_t));
+ last_pos = 0;
+ litlen = (U32)(ip - anchor);
+
+ /* check repCode */
+ {
+ U32 i, last_i = ZSTD_REP_CHECK + (ip == anchor);
+ for (i = (ip == anchor); i < last_i; i++) {
+ const S32 repCur = (i == ZSTD_REP_MOVE_OPT) ? (rep[0] - 1) : rep[i];
+ if ((repCur > 0) && (repCur < (S32)(ip - prefixStart)) &&
+ (ZSTD_readMINMATCH(ip, minMatch) == ZSTD_readMINMATCH(ip - repCur, minMatch))) {
+ mlen = (U32)ZSTD_count(ip + minMatch, ip + minMatch - repCur, iend) + minMatch;
+ if (mlen > sufficient_len || mlen >= ZSTD_OPT_NUM) {
+ best_mlen = mlen;
+ best_off = i;
+ cur = 0;
+ last_pos = 1;
+ goto _storeSequence;
+ }
+ best_off = i - (ip == anchor);
+ do {
+ price = ZSTD_getPrice(seqStorePtr, litlen, anchor, best_off, mlen - MINMATCH, ultra);
+ if (mlen > last_pos || price < opt[mlen].price)
+ SET_PRICE(mlen, mlen, i, litlen, price); /* note : macro modifies last_pos */
+ mlen--;
+ } while (mlen >= minMatch);
+ }
+ }
+ }
+
+ match_num = ZSTD_BtGetAllMatches_selectMLS(ctx, ip, iend, maxSearches, mls, matches, minMatch);
+
+ if (!last_pos && !match_num) {
+ ip++;
+ continue;
+ }
+
+ if (match_num && (matches[match_num - 1].len > sufficient_len || matches[match_num - 1].len >= ZSTD_OPT_NUM)) {
+ best_mlen = matches[match_num - 1].len;
+ best_off = matches[match_num - 1].off;
+ cur = 0;
+ last_pos = 1;
+ goto _storeSequence;
+ }
+
+ /* set prices using matches at position = 0 */
+ best_mlen = (last_pos) ? last_pos : minMatch;
+ for (u = 0; u < match_num; u++) {
+ mlen = (u > 0) ? matches[u - 1].len + 1 : best_mlen;
+ best_mlen = matches[u].len;
+ while (mlen <= best_mlen) {
+ price = ZSTD_getPrice(seqStorePtr, litlen, anchor, matches[u].off - 1, mlen - MINMATCH, ultra);
+ if (mlen > last_pos || price < opt[mlen].price)
+ SET_PRICE(mlen, mlen, matches[u].off, litlen, price); /* note : macro modifies last_pos */
+ mlen++;
+ }
+ }
+
+ if (last_pos < minMatch) {
+ ip++;
+ continue;
+ }
+
+ /* initialize opt[0] */
+ {
+ U32 i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ opt[0].rep[i] = rep[i];
+ }
+ opt[0].mlen = 1;
+ opt[0].litlen = litlen;
+
+ /* check further positions */
+ for (cur = 1; cur <= last_pos; cur++) {
+ inr = ip + cur;
+
+ if (opt[cur - 1].mlen == 1) {
+ litlen = opt[cur - 1].litlen + 1;
+ if (cur > litlen) {
+ price = opt[cur - litlen].price + ZSTD_getLiteralPrice(seqStorePtr, litlen, inr - litlen);
+ } else
+ price = ZSTD_getLiteralPrice(seqStorePtr, litlen, anchor);
+ } else {
+ litlen = 1;
+ price = opt[cur - 1].price + ZSTD_getLiteralPrice(seqStorePtr, litlen, inr - 1);
+ }
+
+ if (cur > last_pos || price <= opt[cur].price)
+ SET_PRICE(cur, 1, 0, litlen, price);
+
+ if (cur == last_pos)
+ break;
+
+ if (inr > ilimit) /* last match must start at a minimum distance of 8 from oend */
+ continue;
+
+ mlen = opt[cur].mlen;
+ if (opt[cur].off > ZSTD_REP_MOVE_OPT) {
+ opt[cur].rep[2] = opt[cur - mlen].rep[1];
+ opt[cur].rep[1] = opt[cur - mlen].rep[0];
+ opt[cur].rep[0] = opt[cur].off - ZSTD_REP_MOVE_OPT;
+ } else {
+ opt[cur].rep[2] = (opt[cur].off > 1) ? opt[cur - mlen].rep[1] : opt[cur - mlen].rep[2];
+ opt[cur].rep[1] = (opt[cur].off > 0) ? opt[cur - mlen].rep[0] : opt[cur - mlen].rep[1];
+ opt[cur].rep[0] =
+ ((opt[cur].off == ZSTD_REP_MOVE_OPT) && (mlen != 1)) ? (opt[cur - mlen].rep[0] - 1) : (opt[cur - mlen].rep[opt[cur].off]);
+ }
+
+ best_mlen = minMatch;
+ {
+ U32 i, last_i = ZSTD_REP_CHECK + (mlen != 1);
+ for (i = (opt[cur].mlen != 1); i < last_i; i++) { /* check rep */
+ const S32 repCur = (i == ZSTD_REP_MOVE_OPT) ? (opt[cur].rep[0] - 1) : opt[cur].rep[i];
+ if ((repCur > 0) && (repCur < (S32)(inr - prefixStart)) &&
+ (ZSTD_readMINMATCH(inr, minMatch) == ZSTD_readMINMATCH(inr - repCur, minMatch))) {
+ mlen = (U32)ZSTD_count(inr + minMatch, inr + minMatch - repCur, iend) + minMatch;
+
+ if (mlen > sufficient_len || cur + mlen >= ZSTD_OPT_NUM) {
+ best_mlen = mlen;
+ best_off = i;
+ last_pos = cur + 1;
+ goto _storeSequence;
+ }
+
+ best_off = i - (opt[cur].mlen != 1);
+ if (mlen > best_mlen)
+ best_mlen = mlen;
+
+ do {
+ if (opt[cur].mlen == 1) {
+ litlen = opt[cur].litlen;
+ if (cur > litlen) {
+ price = opt[cur - litlen].price + ZSTD_getPrice(seqStorePtr, litlen, inr - litlen,
+ best_off, mlen - MINMATCH, ultra);
+ } else
+ price = ZSTD_getPrice(seqStorePtr, litlen, anchor, best_off, mlen - MINMATCH, ultra);
+ } else {
+ litlen = 0;
+ price = opt[cur].price + ZSTD_getPrice(seqStorePtr, 0, NULL, best_off, mlen - MINMATCH, ultra);
+ }
+
+ if (cur + mlen > last_pos || price <= opt[cur + mlen].price)
+ SET_PRICE(cur + mlen, mlen, i, litlen, price);
+ mlen--;
+ } while (mlen >= minMatch);
+ }
+ }
+ }
+
+ match_num = ZSTD_BtGetAllMatches_selectMLS(ctx, inr, iend, maxSearches, mls, matches, best_mlen);
+
+ if (match_num > 0 && (matches[match_num - 1].len > sufficient_len || cur + matches[match_num - 1].len >= ZSTD_OPT_NUM)) {
+ best_mlen = matches[match_num - 1].len;
+ best_off = matches[match_num - 1].off;
+ last_pos = cur + 1;
+ goto _storeSequence;
+ }
+
+ /* set prices using matches at position = cur */
+ for (u = 0; u < match_num; u++) {
+ mlen = (u > 0) ? matches[u - 1].len + 1 : best_mlen;
+ best_mlen = matches[u].len;
+
+ while (mlen <= best_mlen) {
+ if (opt[cur].mlen == 1) {
+ litlen = opt[cur].litlen;
+ if (cur > litlen)
+ price = opt[cur - litlen].price + ZSTD_getPrice(seqStorePtr, litlen, ip + cur - litlen,
+ matches[u].off - 1, mlen - MINMATCH, ultra);
+ else
+ price = ZSTD_getPrice(seqStorePtr, litlen, anchor, matches[u].off - 1, mlen - MINMATCH, ultra);
+ } else {
+ litlen = 0;
+ price = opt[cur].price + ZSTD_getPrice(seqStorePtr, 0, NULL, matches[u].off - 1, mlen - MINMATCH, ultra);
+ }
+
+ if (cur + mlen > last_pos || (price < opt[cur + mlen].price))
+ SET_PRICE(cur + mlen, mlen, matches[u].off, litlen, price);
+
+ mlen++;
+ }
+ }
+ }
+
+ best_mlen = opt[last_pos].mlen;
+ best_off = opt[last_pos].off;
+ cur = last_pos - best_mlen;
+
+ /* store sequence */
+_storeSequence: /* cur, last_pos, best_mlen, best_off have to be set */
+ opt[0].mlen = 1;
+
+ while (1) {
+ mlen = opt[cur].mlen;
+ offset = opt[cur].off;
+ opt[cur].mlen = best_mlen;
+ opt[cur].off = best_off;
+ best_mlen = mlen;
+ best_off = offset;
+ if (mlen > cur)
+ break;
+ cur -= mlen;
+ }
+
+ for (u = 0; u <= last_pos;) {
+ u += opt[u].mlen;
+ }
+
+ for (cur = 0; cur < last_pos;) {
+ mlen = opt[cur].mlen;
+ if (mlen == 1) {
+ ip++;
+ cur++;
+ continue;
+ }
+ offset = opt[cur].off;
+ cur += mlen;
+ litLength = (U32)(ip - anchor);
+
+ if (offset > ZSTD_REP_MOVE_OPT) {
+ rep[2] = rep[1];
+ rep[1] = rep[0];
+ rep[0] = offset - ZSTD_REP_MOVE_OPT;
+ offset--;
+ } else {
+ if (offset != 0) {
+ best_off = (offset == ZSTD_REP_MOVE_OPT) ? (rep[0] - 1) : (rep[offset]);
+ if (offset != 1)
+ rep[2] = rep[1];
+ rep[1] = rep[0];
+ rep[0] = best_off;
+ }
+ if (litLength == 0)
+ offset--;
+ }
+
+ ZSTD_updatePrice(seqStorePtr, litLength, anchor, offset, mlen - MINMATCH);
+ ZSTD_storeSeq(seqStorePtr, litLength, anchor, offset, mlen - MINMATCH);
+ anchor = ip = ip + mlen;
+ }
+ } /* for (cur=0; cur < last_pos; ) */
+
+ /* Save reps for next block */
+ {
+ int i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ ctx->repToConfirm[i] = rep[i];
+ }
+
+ /* Last Literals */
+ {
+ size_t const lastLLSize = iend - anchor;
+ memcpy(seqStorePtr->lit, anchor, lastLLSize);
+ seqStorePtr->lit += lastLLSize;
+ }
+}
+
+FORCE_INLINE
+void ZSTD_compressBlock_opt_extDict_generic(ZSTD_CCtx *ctx, const void *src, size_t srcSize, const int ultra)
+{
+ seqStore_t *seqStorePtr = &(ctx->seqStore);
+ const BYTE *const istart = (const BYTE *)src;
+ const BYTE *ip = istart;
+ const BYTE *anchor = istart;
+ const BYTE *const iend = istart + srcSize;
+ const BYTE *const ilimit = iend - 8;
+ const BYTE *const base = ctx->base;
+ const U32 lowestIndex = ctx->lowLimit;
+ const U32 dictLimit = ctx->dictLimit;
+ const BYTE *const prefixStart = base + dictLimit;
+ const BYTE *const dictBase = ctx->dictBase;
+ const BYTE *const dictEnd = dictBase + dictLimit;
+
+ const U32 maxSearches = 1U << ctx->params.cParams.searchLog;
+ const U32 sufficient_len = ctx->params.cParams.targetLength;
+ const U32 mls = ctx->params.cParams.searchLength;
+ const U32 minMatch = (ctx->params.cParams.searchLength == 3) ? 3 : 4;
+
+ ZSTD_optimal_t *opt = seqStorePtr->priceTable;
+ ZSTD_match_t *matches = seqStorePtr->matchTable;
+ const BYTE *inr;
+
+ /* init */
+ U32 offset, rep[ZSTD_REP_NUM];
+ {
+ U32 i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ rep[i] = ctx->rep[i];
+ }
+
+ ctx->nextToUpdate3 = ctx->nextToUpdate;
+ ZSTD_rescaleFreqs(seqStorePtr, (const BYTE *)src, srcSize);
+ ip += (ip == prefixStart);
+
+ /* Match Loop */
+ while (ip < ilimit) {
+ U32 cur, match_num, last_pos, litlen, price;
+ U32 u, mlen, best_mlen, best_off, litLength;
+ U32 curr = (U32)(ip - base);
+ memset(opt, 0, sizeof(ZSTD_optimal_t));
+ last_pos = 0;
+ opt[0].litlen = (U32)(ip - anchor);
+
+ /* check repCode */
+ {
+ U32 i, last_i = ZSTD_REP_CHECK + (ip == anchor);
+ for (i = (ip == anchor); i < last_i; i++) {
+ const S32 repCur = (i == ZSTD_REP_MOVE_OPT) ? (rep[0] - 1) : rep[i];
+ const U32 repIndex = (U32)(curr - repCur);
+ const BYTE *const repBase = repIndex < dictLimit ? dictBase : base;
+ const BYTE *const repMatch = repBase + repIndex;
+ if ((repCur > 0 && repCur <= (S32)curr) &&
+ (((U32)((dictLimit - 1) - repIndex) >= 3) & (repIndex > lowestIndex)) /* intentional overflow */
+ && (ZSTD_readMINMATCH(ip, minMatch) == ZSTD_readMINMATCH(repMatch, minMatch))) {
+ /* repcode detected we should take it */
+ const BYTE *const repEnd = repIndex < dictLimit ? dictEnd : iend;
+ mlen = (U32)ZSTD_count_2segments(ip + minMatch, repMatch + minMatch, iend, repEnd, prefixStart) + minMatch;
+
+ if (mlen > sufficient_len || mlen >= ZSTD_OPT_NUM) {
+ best_mlen = mlen;
+ best_off = i;
+ cur = 0;
+ last_pos = 1;
+ goto _storeSequence;
+ }
+
+ best_off = i - (ip == anchor);
+ litlen = opt[0].litlen;
+ do {
+ price = ZSTD_getPrice(seqStorePtr, litlen, anchor, best_off, mlen - MINMATCH, ultra);
+ if (mlen > last_pos || price < opt[mlen].price)
+ SET_PRICE(mlen, mlen, i, litlen, price); /* note : macro modifies last_pos */
+ mlen--;
+ } while (mlen >= minMatch);
+ }
+ }
+ }
+
+ match_num = ZSTD_BtGetAllMatches_selectMLS_extDict(ctx, ip, iend, maxSearches, mls, matches, minMatch); /* first search (depth 0) */
+
+ if (!last_pos && !match_num) {
+ ip++;
+ continue;
+ }
+
+ {
+ U32 i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ opt[0].rep[i] = rep[i];
+ }
+ opt[0].mlen = 1;
+
+ if (match_num && (matches[match_num - 1].len > sufficient_len || matches[match_num - 1].len >= ZSTD_OPT_NUM)) {
+ best_mlen = matches[match_num - 1].len;
+ best_off = matches[match_num - 1].off;
+ cur = 0;
+ last_pos = 1;
+ goto _storeSequence;
+ }
+
+ best_mlen = (last_pos) ? last_pos : minMatch;
+
+ /* set prices using matches at position = 0 */
+ for (u = 0; u < match_num; u++) {
+ mlen = (u > 0) ? matches[u - 1].len + 1 : best_mlen;
+ best_mlen = matches[u].len;
+ litlen = opt[0].litlen;
+ while (mlen <= best_mlen) {
+ price = ZSTD_getPrice(seqStorePtr, litlen, anchor, matches[u].off - 1, mlen - MINMATCH, ultra);
+ if (mlen > last_pos || price < opt[mlen].price)
+ SET_PRICE(mlen, mlen, matches[u].off, litlen, price);
+ mlen++;
+ }
+ }
+
+ if (last_pos < minMatch) {
+ ip++;
+ continue;
+ }
+
+ /* check further positions */
+ for (cur = 1; cur <= last_pos; cur++) {
+ inr = ip + cur;
+
+ if (opt[cur - 1].mlen == 1) {
+ litlen = opt[cur - 1].litlen + 1;
+ if (cur > litlen) {
+ price = opt[cur - litlen].price + ZSTD_getLiteralPrice(seqStorePtr, litlen, inr - litlen);
+ } else
+ price = ZSTD_getLiteralPrice(seqStorePtr, litlen, anchor);
+ } else {
+ litlen = 1;
+ price = opt[cur - 1].price + ZSTD_getLiteralPrice(seqStorePtr, litlen, inr - 1);
+ }
+
+ if (cur > last_pos || price <= opt[cur].price)
+ SET_PRICE(cur, 1, 0, litlen, price);
+
+ if (cur == last_pos)
+ break;
+
+ if (inr > ilimit) /* last match must start at a minimum distance of 8 from oend */
+ continue;
+
+ mlen = opt[cur].mlen;
+ if (opt[cur].off > ZSTD_REP_MOVE_OPT) {
+ opt[cur].rep[2] = opt[cur - mlen].rep[1];
+ opt[cur].rep[1] = opt[cur - mlen].rep[0];
+ opt[cur].rep[0] = opt[cur].off - ZSTD_REP_MOVE_OPT;
+ } else {
+ opt[cur].rep[2] = (opt[cur].off > 1) ? opt[cur - mlen].rep[1] : opt[cur - mlen].rep[2];
+ opt[cur].rep[1] = (opt[cur].off > 0) ? opt[cur - mlen].rep[0] : opt[cur - mlen].rep[1];
+ opt[cur].rep[0] =
+ ((opt[cur].off == ZSTD_REP_MOVE_OPT) && (mlen != 1)) ? (opt[cur - mlen].rep[0] - 1) : (opt[cur - mlen].rep[opt[cur].off]);
+ }
+
+ best_mlen = minMatch;
+ {
+ U32 i, last_i = ZSTD_REP_CHECK + (mlen != 1);
+ for (i = (mlen != 1); i < last_i; i++) {
+ const S32 repCur = (i == ZSTD_REP_MOVE_OPT) ? (opt[cur].rep[0] - 1) : opt[cur].rep[i];
+ const U32 repIndex = (U32)(curr + cur - repCur);
+ const BYTE *const repBase = repIndex < dictLimit ? dictBase : base;
+ const BYTE *const repMatch = repBase + repIndex;
+ if ((repCur > 0 && repCur <= (S32)(curr + cur)) &&
+ (((U32)((dictLimit - 1) - repIndex) >= 3) & (repIndex > lowestIndex)) /* intentional overflow */
+ && (ZSTD_readMINMATCH(inr, minMatch) == ZSTD_readMINMATCH(repMatch, minMatch))) {
+ /* repcode detected */
+ const BYTE *const repEnd = repIndex < dictLimit ? dictEnd : iend;
+ mlen = (U32)ZSTD_count_2segments(inr + minMatch, repMatch + minMatch, iend, repEnd, prefixStart) + minMatch;
+
+ if (mlen > sufficient_len || cur + mlen >= ZSTD_OPT_NUM) {
+ best_mlen = mlen;
+ best_off = i;
+ last_pos = cur + 1;
+ goto _storeSequence;
+ }
+
+ best_off = i - (opt[cur].mlen != 1);
+ if (mlen > best_mlen)
+ best_mlen = mlen;
+
+ do {
+ if (opt[cur].mlen == 1) {
+ litlen = opt[cur].litlen;
+ if (cur > litlen) {
+ price = opt[cur - litlen].price + ZSTD_getPrice(seqStorePtr, litlen, inr - litlen,
+ best_off, mlen - MINMATCH, ultra);
+ } else
+ price = ZSTD_getPrice(seqStorePtr, litlen, anchor, best_off, mlen - MINMATCH, ultra);
+ } else {
+ litlen = 0;
+ price = opt[cur].price + ZSTD_getPrice(seqStorePtr, 0, NULL, best_off, mlen - MINMATCH, ultra);
+ }
+
+ if (cur + mlen > last_pos || price <= opt[cur + mlen].price)
+ SET_PRICE(cur + mlen, mlen, i, litlen, price);
+ mlen--;
+ } while (mlen >= minMatch);
+ }
+ }
+ }
+
+ match_num = ZSTD_BtGetAllMatches_selectMLS_extDict(ctx, inr, iend, maxSearches, mls, matches, minMatch);
+
+ if (match_num > 0 && (matches[match_num - 1].len > sufficient_len || cur + matches[match_num - 1].len >= ZSTD_OPT_NUM)) {
+ best_mlen = matches[match_num - 1].len;
+ best_off = matches[match_num - 1].off;
+ last_pos = cur + 1;
+ goto _storeSequence;
+ }
+
+ /* set prices using matches at position = cur */
+ for (u = 0; u < match_num; u++) {
+ mlen = (u > 0) ? matches[u - 1].len + 1 : best_mlen;
+ best_mlen = matches[u].len;
+
+ while (mlen <= best_mlen) {
+ if (opt[cur].mlen == 1) {
+ litlen = opt[cur].litlen;
+ if (cur > litlen)
+ price = opt[cur - litlen].price + ZSTD_getPrice(seqStorePtr, litlen, ip + cur - litlen,
+ matches[u].off - 1, mlen - MINMATCH, ultra);
+ else
+ price = ZSTD_getPrice(seqStorePtr, litlen, anchor, matches[u].off - 1, mlen - MINMATCH, ultra);
+ } else {
+ litlen = 0;
+ price = opt[cur].price + ZSTD_getPrice(seqStorePtr, 0, NULL, matches[u].off - 1, mlen - MINMATCH, ultra);
+ }
+
+ if (cur + mlen > last_pos || (price < opt[cur + mlen].price))
+ SET_PRICE(cur + mlen, mlen, matches[u].off, litlen, price);
+
+ mlen++;
+ }
+ }
+ } /* for (cur = 1; cur <= last_pos; cur++) */
+
+ best_mlen = opt[last_pos].mlen;
+ best_off = opt[last_pos].off;
+ cur = last_pos - best_mlen;
+
+ /* store sequence */
+_storeSequence: /* cur, last_pos, best_mlen, best_off have to be set */
+ opt[0].mlen = 1;
+
+ while (1) {
+ mlen = opt[cur].mlen;
+ offset = opt[cur].off;
+ opt[cur].mlen = best_mlen;
+ opt[cur].off = best_off;
+ best_mlen = mlen;
+ best_off = offset;
+ if (mlen > cur)
+ break;
+ cur -= mlen;
+ }
+
+ for (u = 0; u <= last_pos;) {
+ u += opt[u].mlen;
+ }
+
+ for (cur = 0; cur < last_pos;) {
+ mlen = opt[cur].mlen;
+ if (mlen == 1) {
+ ip++;
+ cur++;
+ continue;
+ }
+ offset = opt[cur].off;
+ cur += mlen;
+ litLength = (U32)(ip - anchor);
+
+ if (offset > ZSTD_REP_MOVE_OPT) {
+ rep[2] = rep[1];
+ rep[1] = rep[0];
+ rep[0] = offset - ZSTD_REP_MOVE_OPT;
+ offset--;
+ } else {
+ if (offset != 0) {
+ best_off = (offset == ZSTD_REP_MOVE_OPT) ? (rep[0] - 1) : (rep[offset]);
+ if (offset != 1)
+ rep[2] = rep[1];
+ rep[1] = rep[0];
+ rep[0] = best_off;
+ }
+
+ if (litLength == 0)
+ offset--;
+ }
+
+ ZSTD_updatePrice(seqStorePtr, litLength, anchor, offset, mlen - MINMATCH);
+ ZSTD_storeSeq(seqStorePtr, litLength, anchor, offset, mlen - MINMATCH);
+ anchor = ip = ip + mlen;
+ }
+ } /* for (cur=0; cur < last_pos; ) */
+
+ /* Save reps for next block */
+ {
+ int i;
+ for (i = 0; i < ZSTD_REP_NUM; i++)
+ ctx->repToConfirm[i] = rep[i];
+ }
+
+ /* Last Literals */
+ {
+ size_t lastLLSize = iend - anchor;
+ memcpy(seqStorePtr->lit, anchor, lastLLSize);
+ seqStorePtr->lit += lastLLSize;
+ }
+}
+
+#endif /* ZSTD_OPT_H_91842398743 */
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index f028a9a472fd..e19606bb41a0 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -569,8 +569,10 @@ static int cgwb_create(struct backing_dev_info *bdi,
/* need to create a new one */
wb = kmalloc(sizeof(*wb), gfp);
- if (!wb)
- return -ENOMEM;
+ if (!wb) {
+ ret = -ENOMEM;
+ goto out_put;
+ }
ret = wb_init(wb, bdi, blkcg_css->id, gfp);
if (ret)
diff --git a/mm/filemap.c b/mm/filemap.c
index 9d21afd692b9..870971e20967 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -909,13 +909,33 @@ static void wake_up_page_bit(struct page *page, int bit_nr)
wait_queue_head_t *q = page_waitqueue(page);
struct wait_page_key key;
unsigned long flags;
+ wait_queue_entry_t bookmark;
key.page = page;
key.bit_nr = bit_nr;
key.page_match = 0;
+ bookmark.flags = 0;
+ bookmark.private = NULL;
+ bookmark.func = NULL;
+ INIT_LIST_HEAD(&bookmark.entry);
+
spin_lock_irqsave(&q->lock, flags);
- __wake_up_locked_key(q, TASK_NORMAL, &key);
+ __wake_up_locked_key_bookmark(q, TASK_NORMAL, &key, &bookmark);
+
+ while (bookmark.flags & WQ_FLAG_BOOKMARK) {
+ /*
+ * Take a breather from holding the lock,
+ * allow pages that finish wake up asynchronously
+ * to acquire the lock and remove themselves
+ * from wait queue
+ */
+ spin_unlock_irqrestore(&q->lock, flags);
+ cpu_relax();
+ spin_lock_irqsave(&q->lock, flags);
+ __wake_up_locked_key_bookmark(q, TASK_NORMAL, &key, &bookmark);
+ }
+
/*
* It is possible for other pages to have collided on the waitqueue
* hash, so in that case check for a page match. That prevents a long-
@@ -1897,9 +1917,8 @@ static void shrink_readahead_size_eio(struct file *filp,
}
/**
- * do_generic_file_read - generic file read routine
- * @filp: the file to read
- * @ppos: current file position
+ * generic_file_buffered_read - generic file read routine
+ * @iocb: the iocb to read
* @iter: data destination
* @written: already copied
*
@@ -1909,12 +1928,14 @@ static void shrink_readahead_size_eio(struct file *filp,
* This is really ugly. But the goto's actually try to clarify some
* of the logic when it comes to error handling etc.
*/
-static ssize_t do_generic_file_read(struct file *filp, loff_t *ppos,
+static ssize_t generic_file_buffered_read(struct kiocb *iocb,
struct iov_iter *iter, ssize_t written)
{
+ struct file *filp = iocb->ki_filp;
struct address_space *mapping = filp->f_mapping;
struct inode *inode = mapping->host;
struct file_ra_state *ra = &filp->f_ra;
+ loff_t *ppos = &iocb->ki_pos;
pgoff_t index;
pgoff_t last_index;
pgoff_t prev_index;
@@ -1947,6 +1968,8 @@ find_page:
page = find_get_page(mapping, index);
if (!page) {
+ if (iocb->ki_flags & IOCB_NOWAIT)
+ goto would_block;
page_cache_sync_readahead(mapping,
ra, filp,
index, last_index - index);
@@ -1960,6 +1983,11 @@ find_page:
index, last_index - index);
}
if (!PageUptodate(page)) {
+ if (iocb->ki_flags & IOCB_NOWAIT) {
+ put_page(page);
+ goto would_block;
+ }
+
/*
* See comment in do_read_cache_page on why
* wait_on_page_locked is used to avoid unnecessarily
@@ -2141,6 +2169,8 @@ no_cached_page:
goto readpage;
}
+would_block:
+ error = -EAGAIN;
out:
ra->prev_pos = prev_index;
ra->prev_pos <<= PAGE_SHIFT;
@@ -2162,14 +2192,14 @@ out:
ssize_t
generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
{
- struct file *file = iocb->ki_filp;
- ssize_t retval = 0;
size_t count = iov_iter_count(iter);
+ ssize_t retval = 0;
if (!count)
goto out; /* skip atime */
if (iocb->ki_flags & IOCB_DIRECT) {
+ struct file *file = iocb->ki_filp;
struct address_space *mapping = file->f_mapping;
struct inode *inode = mapping->host;
loff_t size;
@@ -2210,7 +2240,7 @@ generic_file_read_iter(struct kiocb *iocb, struct iov_iter *iter)
goto out;
}
- retval = do_generic_file_read(file, &iocb->ki_pos, iter, retval);
+ retval = generic_file_buffered_read(iocb, iter, retval);
out:
return retval;
}
diff --git a/mm/nommu.c b/mm/nommu.c
index 53d5175a5c14..17c00d93de2e 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -1164,17 +1164,12 @@ static int do_mmap_private(struct vm_area_struct *vma,
if (vma->vm_file) {
/* read the contents of a file into the copy */
- mm_segment_t old_fs;
loff_t fpos;
fpos = vma->vm_pgoff;
fpos <<= PAGE_SHIFT;
- old_fs = get_fs();
- set_fs(KERNEL_DS);
- ret = __vfs_read(vma->vm_file, base, len, &fpos);
- set_fs(old_fs);
-
+ ret = kernel_read(vma->vm_file, base, len, &fpos);
if (ret < 0)
goto error_free;
diff --git a/mm/page_owner.c b/mm/page_owner.c
index 8e2d7137510c..57abca62d4db 100644
--- a/mm/page_owner.c
+++ b/mm/page_owner.c
@@ -142,7 +142,7 @@ static noinline depot_stack_handle_t save_stack(gfp_t flags)
.nr_entries = 0,
.entries = entries,
.max_entries = PAGE_OWNER_STACK_DEPTH,
- .skip = 0
+ .skip = 2
};
depot_stack_handle_t handle;
diff --git a/mm/shmem.c b/mm/shmem.c
index ace53a582be5..07a1d22807be 100644
--- a/mm/shmem.c
+++ b/mm/shmem.c
@@ -3685,7 +3685,7 @@ SYSCALL_DEFINE2(memfd_create,
if (len > MFD_NAME_MAX_LEN + 1)
return -EINVAL;
- name = kmalloc(len + MFD_NAME_PREFIX_LEN, GFP_TEMPORARY);
+ name = kmalloc(len + MFD_NAME_PREFIX_LEN, GFP_KERNEL);
if (!name)
return -ENOMEM;
diff --git a/mm/slub.c b/mm/slub.c
index d39a5d3834b3..163352c537ab 100644
--- a/mm/slub.c
+++ b/mm/slub.c
@@ -4597,7 +4597,7 @@ static int list_locations(struct kmem_cache *s, char *buf,
struct kmem_cache_node *n;
if (!map || !alloc_loc_track(&t, PAGE_SIZE / sizeof(struct location),
- GFP_TEMPORARY)) {
+ GFP_KERNEL)) {
kfree(map);
return sprintf(buf, "Out of memory\n");
}
diff --git a/net/9p/trans_fd.c b/net/9p/trans_fd.c
index ddfa86648f95..903a190319b9 100644
--- a/net/9p/trans_fd.c
+++ b/net/9p/trans_fd.c
@@ -272,6 +272,7 @@ static int p9_fd_read(struct p9_client *client, void *v, int len)
{
int ret;
struct p9_trans_fd *ts = NULL;
+ loff_t pos;
if (client && client->status != Disconnected)
ts = client->trans;
@@ -282,7 +283,8 @@ static int p9_fd_read(struct p9_client *client, void *v, int len)
if (!(ts->rd->f_flags & O_NONBLOCK))
p9_debug(P9_DEBUG_ERROR, "blocking read ...\n");
- ret = kernel_read(ts->rd, ts->rd->f_pos, v, len);
+ pos = ts->rd->f_pos;
+ ret = kernel_read(ts->rd, v, len, &pos);
if (ret <= 0 && ret != -ERESTARTSYS && ret != -EAGAIN)
client->status = Disconnected;
return ret;
@@ -420,8 +422,7 @@ error:
static int p9_fd_write(struct p9_client *client, void *v, int len)
{
- int ret;
- mm_segment_t oldfs;
+ ssize_t ret;
struct p9_trans_fd *ts = NULL;
if (client && client->status != Disconnected)
@@ -433,12 +434,7 @@ static int p9_fd_write(struct p9_client *client, void *v, int len)
if (!(ts->wr->f_flags & O_NONBLOCK))
p9_debug(P9_DEBUG_ERROR, "blocking write ...\n");
- oldfs = get_fs();
- set_fs(get_ds());
- /* The cast to a user pointer is valid due to the set_fs() */
- ret = vfs_write(ts->wr, (__force void __user *)v, len, &ts->wr->f_pos);
- set_fs(oldfs);
-
+ ret = kernel_write(ts->wr, v, len, &ts->wr->f_pos);
if (ret <= 0 && ret != -ERESTARTSYS && ret != -EAGAIN)
client->status = Disconnected;
return ret;
diff --git a/net/ceph/mon_client.c b/net/ceph/mon_client.c
index 875675765531..63edc6e5f026 100644
--- a/net/ceph/mon_client.c
+++ b/net/ceph/mon_client.c
@@ -676,7 +676,8 @@ bad:
/*
* Do a synchronous statfs().
*/
-int ceph_monc_do_statfs(struct ceph_mon_client *monc, struct ceph_statfs *buf)
+int ceph_monc_do_statfs(struct ceph_mon_client *monc, u64 data_pool,
+ struct ceph_statfs *buf)
{
struct ceph_mon_generic_request *req;
struct ceph_mon_statfs *h;
@@ -696,6 +697,7 @@ int ceph_monc_do_statfs(struct ceph_mon_client *monc, struct ceph_statfs *buf)
goto out;
req->u.st = buf;
+ req->request->hdr.version = cpu_to_le16(2);
mutex_lock(&monc->mutex);
register_generic_request(req);
@@ -705,6 +707,8 @@ int ceph_monc_do_statfs(struct ceph_mon_client *monc, struct ceph_statfs *buf)
h->monhdr.session_mon = cpu_to_le16(-1);
h->monhdr.session_mon_tid = 0;
h->fsid = monc->monmap->fsid;
+ h->contains_data_pool = (data_pool != CEPH_NOPOOL);
+ h->data_pool = cpu_to_le64(data_pool);
send_generic_request(monc, req);
mutex_unlock(&monc->mutex);
diff --git a/net/ceph/osd_client.c b/net/ceph/osd_client.c
index dcfbdd74dfd1..e02f01f534e2 100644
--- a/net/ceph/osd_client.c
+++ b/net/ceph/osd_client.c
@@ -863,8 +863,6 @@ static u32 osd_req_encode_op(struct ceph_osd_op *dst,
dst->cls.method_len = src->cls.method_len;
dst->cls.indata_len = cpu_to_le32(src->cls.indata_len);
break;
- case CEPH_OSD_OP_STARTSYNC:
- break;
case CEPH_OSD_OP_WATCH:
dst->watch.cookie = cpu_to_le64(src->watch.cookie);
dst->watch.ver = cpu_to_le64(0);
@@ -916,9 +914,6 @@ static u32 osd_req_encode_op(struct ceph_osd_op *dst,
* if the file was recently truncated, we include information about its
* old and new size so that the object can be updated appropriately. (we
* avoid synchronously deleting truncated objects because it's slow.)
- *
- * if @do_sync, include a 'startsync' command so that the osd will flush
- * data quickly.
*/
struct ceph_osd_request *ceph_osdc_new_request(struct ceph_osd_client *osdc,
struct ceph_file_layout *layout,
diff --git a/net/core/filter.c b/net/core/filter.c
index 3a50a9b021e2..24dd33dd9f04 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -2506,21 +2506,19 @@ static int xdp_do_redirect_map(struct net_device *dev, struct xdp_buff *xdp,
struct redirect_info *ri = this_cpu_ptr(&redirect_info);
const struct bpf_prog *map_owner = ri->map_owner;
struct bpf_map *map = ri->map;
+ struct net_device *fwd = NULL;
u32 index = ri->ifindex;
- struct net_device *fwd;
int err;
ri->ifindex = 0;
ri->map = NULL;
ri->map_owner = NULL;
- /* This is really only caused by a deliberately crappy
- * BPF program, normally we would never hit that case,
- * so no need to inform someone via tracepoints either,
- * just bail out.
- */
- if (unlikely(map_owner != xdp_prog))
- return -EINVAL;
+ if (unlikely(map_owner != xdp_prog)) {
+ err = -EFAULT;
+ map = NULL;
+ goto err;
+ }
fwd = __dev_map_lookup_elem(map, index);
if (!fwd) {
@@ -2576,13 +2574,27 @@ int xdp_do_generic_redirect(struct net_device *dev, struct sk_buff *skb,
struct bpf_prog *xdp_prog)
{
struct redirect_info *ri = this_cpu_ptr(&redirect_info);
+ const struct bpf_prog *map_owner = ri->map_owner;
+ struct bpf_map *map = ri->map;
+ struct net_device *fwd = NULL;
u32 index = ri->ifindex;
- struct net_device *fwd;
unsigned int len;
int err = 0;
- fwd = dev_get_by_index_rcu(dev_net(dev), index);
ri->ifindex = 0;
+ ri->map = NULL;
+ ri->map_owner = NULL;
+
+ if (map) {
+ if (unlikely(map_owner != xdp_prog)) {
+ err = -EFAULT;
+ map = NULL;
+ goto err;
+ }
+ fwd = __dev_map_lookup_elem(map, index);
+ } else {
+ fwd = dev_get_by_index_rcu(dev_net(dev), index);
+ }
if (unlikely(!fwd)) {
err = -EINVAL;
goto err;
@@ -2600,10 +2612,12 @@ int xdp_do_generic_redirect(struct net_device *dev, struct sk_buff *skb,
}
skb->dev = fwd;
- _trace_xdp_redirect(dev, xdp_prog, index);
+ map ? _trace_xdp_redirect_map(dev, xdp_prog, fwd, map, index)
+ : _trace_xdp_redirect(dev, xdp_prog, index);
return 0;
err:
- _trace_xdp_redirect_err(dev, xdp_prog, index, err);
+ map ? _trace_xdp_redirect_map_err(dev, xdp_prog, fwd, map, index, err)
+ : _trace_xdp_redirect_err(dev, xdp_prog, index, err);
return err;
}
EXPORT_SYMBOL_GPL(xdp_do_generic_redirect);
diff --git a/net/core/gen_estimator.c b/net/core/gen_estimator.c
index 0385dece1f6f..7c1ffd6f9501 100644
--- a/net/core/gen_estimator.c
+++ b/net/core/gen_estimator.c
@@ -83,10 +83,10 @@ static void est_timer(unsigned long arg)
u64 rate, brate;
est_fetch_counters(est, &b);
- brate = (b.bytes - est->last_bytes) << (8 - est->ewma_log);
+ brate = (b.bytes - est->last_bytes) << (10 - est->ewma_log - est->intvl_log);
brate -= (est->avbps >> est->ewma_log);
- rate = (u64)(b.packets - est->last_packets) << (8 - est->ewma_log);
+ rate = (u64)(b.packets - est->last_packets) << (10 - est->ewma_log - est->intvl_log);
rate -= (est->avpps >> est->ewma_log);
write_seqcount_begin(&est->seq);
diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c
index 4089c013cb03..b9c64b40a83a 100644
--- a/net/ipv4/inet_connection_sock.c
+++ b/net/ipv4/inet_connection_sock.c
@@ -916,7 +916,6 @@ static void inet_child_forget(struct sock *sk, struct request_sock *req,
tcp_sk(child)->fastopen_rsk = NULL;
}
inet_csk_destroy_sock(child);
- reqsk_put(req);
}
struct sock *inet_csk_reqsk_queue_add(struct sock *sk,
@@ -987,6 +986,7 @@ void inet_csk_listen_stop(struct sock *sk)
sock_hold(child);
inet_child_forget(sk, req, child);
+ reqsk_put(req);
bh_unlock_sock(child);
local_bh_enable();
sock_put(child);
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c
index e558e4f9597b..a599aa83fdad 100644
--- a/net/ipv4/ip_sockglue.c
+++ b/net/ipv4/ip_sockglue.c
@@ -1207,7 +1207,6 @@ e_inval:
void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb)
{
struct in_pktinfo *pktinfo = PKTINFO_SKB_CB(skb);
- bool l3slave = ipv4_l3mdev_skb(IPCB(skb)->flags);
bool prepare = (inet_sk(sk)->cmsg_flags & IP_CMSG_PKTINFO) ||
ipv6_sk_rxinfo(sk);
@@ -1221,8 +1220,13 @@ void ipv4_pktinfo_prepare(const struct sock *sk, struct sk_buff *skb)
* (e.g., process binds socket to eth0 for Tx which is
* redirected to loopback in the rtable/dst).
*/
- if (pktinfo->ipi_ifindex == LOOPBACK_IFINDEX || l3slave)
+ struct rtable *rt = skb_rtable(skb);
+ bool l3slave = ipv4_l3mdev_skb(IPCB(skb)->flags);
+
+ if (pktinfo->ipi_ifindex == LOOPBACK_IFINDEX)
pktinfo->ipi_ifindex = inet_iif(skb);
+ else if (l3slave && rt && rt->rt_iif)
+ pktinfo->ipi_ifindex = rt->rt_iif;
pktinfo->ipi_spec_dst.s_addr = fib_compute_spec_dst(skb);
} else {
diff --git a/net/ipv4/ip_tunnel.c b/net/ipv4/ip_tunnel.c
index e1856bfa753d..e9805ad664ac 100644
--- a/net/ipv4/ip_tunnel.c
+++ b/net/ipv4/ip_tunnel.c
@@ -176,7 +176,7 @@ skip_key_lookup:
return cand;
t = rcu_dereference(itn->collect_md_tun);
- if (t)
+ if (t && t->dev->flags & IFF_UP)
return t;
if (itn->fb_tunnel_dev && itn->fb_tunnel_dev->flags & IFF_UP)
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c
index 5b6690d05abb..1c839c99114c 100644
--- a/net/ipv4/tcp_output.c
+++ b/net/ipv4/tcp_output.c
@@ -991,6 +991,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
struct tcp_skb_cb *tcb;
struct tcp_out_options opts;
unsigned int tcp_options_size, tcp_header_size;
+ struct sk_buff *oskb = NULL;
struct tcp_md5sig_key *md5;
struct tcphdr *th;
int err;
@@ -998,12 +999,10 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
BUG_ON(!skb || !tcp_skb_pcount(skb));
tp = tcp_sk(sk);
- skb->skb_mstamp = tp->tcp_mstamp;
if (clone_it) {
TCP_SKB_CB(skb)->tx.in_flight = TCP_SKB_CB(skb)->end_seq
- tp->snd_una;
- tcp_rate_skb_sent(sk, skb);
-
+ oskb = skb;
if (unlikely(skb_cloned(skb)))
skb = pskb_copy(skb, gfp_mask);
else
@@ -1011,6 +1010,7 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
if (unlikely(!skb))
return -ENOBUFS;
}
+ skb->skb_mstamp = tp->tcp_mstamp;
inet = inet_sk(sk);
tcb = TCP_SKB_CB(skb);
@@ -1122,12 +1122,15 @@ static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it,
err = icsk->icsk_af_ops->queue_xmit(sk, skb, &inet->cork.fl);
- if (likely(err <= 0))
- return err;
-
- tcp_enter_cwr(sk);
-
- return net_xmit_eval(err);
+ if (unlikely(err > 0)) {
+ tcp_enter_cwr(sk);
+ err = net_xmit_eval(err);
+ }
+ if (!err && oskb) {
+ oskb->skb_mstamp = tp->tcp_mstamp;
+ tcp_rate_skb_sent(sk, oskb);
+ }
+ return err;
}
/* This routine just queues the buffer for sending.
@@ -2869,10 +2872,11 @@ int __tcp_retransmit_skb(struct sock *sk, struct sk_buff *skb, int segs)
skb_headroom(skb) >= 0xFFFF)) {
struct sk_buff *nskb;
- skb->skb_mstamp = tp->tcp_mstamp;
nskb = __pskb_copy(skb, MAX_TCP_HEADER, GFP_ATOMIC);
err = nskb ? tcp_transmit_skb(sk, nskb, 0, GFP_ATOMIC) :
-ENOBUFS;
+ if (!err)
+ skb->skb_mstamp = tp->tcp_mstamp;
} else {
err = tcp_transmit_skb(sk, skb, 1, GFP_ATOMIC);
}
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 10a693a19323..ae73164559d5 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -171,7 +171,7 @@ ip6_tnl_lookup(struct net *net, const struct in6_addr *remote, const struct in6_
}
t = rcu_dereference(ip6n->collect_md_tun);
- if (t)
+ if (t && t->dev->flags & IFF_UP)
return t;
t = rcu_dereference(ip6n->tnls_wc[0]);
diff --git a/net/ipv6/seg6_local.c b/net/ipv6/seg6_local.c
index 7ff54db73a48..825b8e01f947 100644
--- a/net/ipv6/seg6_local.c
+++ b/net/ipv6/seg6_local.c
@@ -72,10 +72,6 @@ static struct ipv6_sr_hdr *get_srh(struct sk_buff *skb)
srh = (struct ipv6_sr_hdr *)(skb->data + srhoff);
- /* make sure it's a Segment Routing header (Routing Type 4) */
- if (srh->type != IPV6_SRCRT_TYPE_4)
- return NULL;
-
len = (srh->hdrlen + 1) << 3;
if (!pskb_may_pull(skb, srhoff + len))
diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 76cf273a56c7..c3aec6227c91 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -1112,7 +1112,8 @@ static int ovs_nla_init_match_and_action(struct net *net,
if (!a[OVS_FLOW_ATTR_KEY]) {
OVS_NLERR(log,
"Flow key attribute not present in set flow.");
- return -EINVAL;
+ error = -EINVAL;
+ goto error;
}
*acts = get_flow_actions(net, a[OVS_FLOW_ATTR_ACTIONS], key,
diff --git a/net/sched/act_api.c b/net/sched/act_api.c
index a306974e2fb4..da6fa82c98a8 100644
--- a/net/sched/act_api.c
+++ b/net/sched/act_api.c
@@ -53,10 +53,13 @@ static void tcf_action_goto_chain_exec(const struct tc_action *a,
res->goto_tp = rcu_dereference_bh(chain->filter_chain);
}
-static void free_tcf(struct rcu_head *head)
+/* XXX: For standalone actions, we don't need a RCU grace period either, because
+ * actions are always connected to filters and filters are already destroyed in
+ * RCU callbacks, so after a RCU grace period actions are already disconnected
+ * from filters. Readers later can not find us.
+ */
+static void free_tcf(struct tc_action *p)
{
- struct tc_action *p = container_of(head, struct tc_action, tcfa_rcu);
-
free_percpu(p->cpu_bstats);
free_percpu(p->cpu_qstats);
@@ -76,11 +79,7 @@ static void tcf_idr_remove(struct tcf_idrinfo *idrinfo, struct tc_action *p)
idr_remove_ext(&idrinfo->action_idr, p->tcfa_index);
spin_unlock_bh(&idrinfo->lock);
gen_kill_estimator(&p->tcfa_rate_est);
- /*
- * gen_estimator est_timer() might access p->tcfa_lock
- * or bstats, wait a RCU grace period before freeing p
- */
- call_rcu(&p->tcfa_rcu, free_tcf);
+ free_tcf(p);
}
int __tcf_idr_release(struct tc_action *p, bool bind, bool strict)
@@ -181,7 +180,7 @@ static int tcf_del_walker(struct tcf_idrinfo *idrinfo, struct sk_buff *skb,
idr_for_each_entry_ext(idr, p, id) {
ret = __tcf_idr_release(p, false, true);
if (ret == ACT_P_DELETED) {
- module_put(p->ops->owner);
+ module_put(ops->owner);
n_i++;
} else if (ret < 0) {
goto nla_put_failure;
@@ -259,7 +258,7 @@ void tcf_idr_cleanup(struct tc_action *a, struct nlattr *est)
{
if (est)
gen_kill_estimator(&a->tcfa_rate_est);
- call_rcu(&a->tcfa_rcu, free_tcf);
+ free_tcf(a);
}
EXPORT_SYMBOL(tcf_idr_cleanup);
@@ -515,13 +514,15 @@ EXPORT_SYMBOL(tcf_action_exec);
int tcf_action_destroy(struct list_head *actions, int bind)
{
+ const struct tc_action_ops *ops;
struct tc_action *a, *tmp;
int ret = 0;
list_for_each_entry_safe(a, tmp, actions, list) {
+ ops = a->ops;
ret = __tcf_idr_release(a, bind, true);
if (ret == ACT_P_DELETED)
- module_put(a->ops->owner);
+ module_put(ops->owner);
else if (ret < 0)
return ret;
}
diff --git a/net/sched/cls_api.c b/net/sched/cls_api.c
index c743f03cfebd..0b2219adf520 100644
--- a/net/sched/cls_api.c
+++ b/net/sched/cls_api.c
@@ -182,7 +182,7 @@ static struct tcf_chain *tcf_chain_create(struct tcf_block *block,
list_add_tail(&chain->list, &block->chain_list);
chain->block = block;
chain->index = chain_index;
- chain->refcnt = 0;
+ chain->refcnt = 1;
return chain;
}
@@ -194,21 +194,20 @@ static void tcf_chain_flush(struct tcf_chain *chain)
RCU_INIT_POINTER(*chain->p_filter_chain, NULL);
while ((tp = rtnl_dereference(chain->filter_chain)) != NULL) {
RCU_INIT_POINTER(chain->filter_chain, tp->next);
+ tcf_chain_put(chain);
tcf_proto_destroy(tp);
}
}
static void tcf_chain_destroy(struct tcf_chain *chain)
{
- /* May be already removed from the list by the previous call. */
- if (!list_empty(&chain->list))
- list_del_init(&chain->list);
+ list_del(&chain->list);
+ kfree(chain);
+}
- /* There might still be a reference held when we got here from
- * tcf_block_put. Wait for the user to drop reference before free.
- */
- if (!chain->refcnt)
- kfree(chain);
+static void tcf_chain_hold(struct tcf_chain *chain)
+{
+ ++chain->refcnt;
}
struct tcf_chain *tcf_chain_get(struct tcf_block *block, u32 chain_index,
@@ -217,24 +216,19 @@ struct tcf_chain *tcf_chain_get(struct tcf_block *block, u32 chain_index,
struct tcf_chain *chain;
list_for_each_entry(chain, &block->chain_list, list) {
- if (chain->index == chain_index)
- goto incref;
+ if (chain->index == chain_index) {
+ tcf_chain_hold(chain);
+ return chain;
+ }
}
- chain = create ? tcf_chain_create(block, chain_index) : NULL;
-incref:
- if (chain)
- chain->refcnt++;
- return chain;
+ return create ? tcf_chain_create(block, chain_index) : NULL;
}
EXPORT_SYMBOL(tcf_chain_get);
void tcf_chain_put(struct tcf_chain *chain)
{
- /* Destroy unused chain, with exception of chain 0, which is the
- * default one and has to be always present.
- */
- if (--chain->refcnt == 0 && !chain->filter_chain && chain->index != 0)
+ if (--chain->refcnt == 0)
tcf_chain_destroy(chain);
}
EXPORT_SYMBOL(tcf_chain_put);
@@ -279,10 +273,31 @@ void tcf_block_put(struct tcf_block *block)
if (!block)
return;
- list_for_each_entry_safe(chain, tmp, &block->chain_list, list) {
+ /* XXX: Standalone actions are not allowed to jump to any chain, and
+ * bound actions should be all removed after flushing. However,
+ * filters are destroyed in RCU callbacks, we have to hold the chains
+ * first, otherwise we would always race with RCU callbacks on this list
+ * without proper locking.
+ */
+
+ /* Wait for existing RCU callbacks to cool down. */
+ rcu_barrier();
+
+ /* Hold a refcnt for all chains, except 0, in case they are gone. */
+ list_for_each_entry(chain, &block->chain_list, list)
+ if (chain->index)
+ tcf_chain_hold(chain);
+
+ /* No race on the list, because no chain could be destroyed. */
+ list_for_each_entry(chain, &block->chain_list, list)
tcf_chain_flush(chain);
- tcf_chain_destroy(chain);
- }
+
+ /* Wait for RCU callbacks to release the reference count. */
+ rcu_barrier();
+
+ /* At this point, all the chains should have refcnt == 1. */
+ list_for_each_entry_safe(chain, tmp, &block->chain_list, list)
+ tcf_chain_put(chain);
kfree(block);
}
EXPORT_SYMBOL(tcf_block_put);
@@ -360,6 +375,7 @@ static void tcf_chain_tp_insert(struct tcf_chain *chain,
rcu_assign_pointer(*chain->p_filter_chain, tp);
RCU_INIT_POINTER(tp->next, tcf_chain_tp_prev(chain_info));
rcu_assign_pointer(*chain_info->pprev, tp);
+ tcf_chain_hold(chain);
}
static void tcf_chain_tp_remove(struct tcf_chain *chain,
@@ -371,6 +387,7 @@ static void tcf_chain_tp_remove(struct tcf_chain *chain,
if (chain->p_filter_chain && tp == chain->filter_chain)
RCU_INIT_POINTER(*chain->p_filter_chain, next);
RCU_INIT_POINTER(*chain_info->pprev, next);
+ tcf_chain_put(chain);
}
static struct tcf_proto *tcf_chain_tp_find(struct tcf_chain *chain,
diff --git a/net/sched/cls_rsvp.h b/net/sched/cls_rsvp.h
index 98c05db85bcb..b1f6ed48bc72 100644
--- a/net/sched/cls_rsvp.h
+++ b/net/sched/cls_rsvp.h
@@ -389,7 +389,7 @@ static unsigned int gen_handle(struct tcf_proto *tp, unsigned salt)
if ((data->hgenerator += 0x10000) == 0)
data->hgenerator = 0x10000;
h = data->hgenerator|salt;
- if (rsvp_get(tp, h) == 0)
+ if (!rsvp_get(tp, h))
return h;
}
return 0;
diff --git a/net/sctp/sctp_diag.c b/net/sctp/sctp_diag.c
index e99518e79b52..22ed01a76b19 100644
--- a/net/sctp/sctp_diag.c
+++ b/net/sctp/sctp_diag.c
@@ -279,9 +279,11 @@ out:
return err;
}
-static int sctp_sock_dump(struct sock *sk, void *p)
+static int sctp_sock_dump(struct sctp_transport *tsp, void *p)
{
+ struct sctp_endpoint *ep = tsp->asoc->ep;
struct sctp_comm_param *commp = p;
+ struct sock *sk = ep->base.sk;
struct sk_buff *skb = commp->skb;
struct netlink_callback *cb = commp->cb;
const struct inet_diag_req_v2 *r = commp->r;
@@ -289,9 +291,7 @@ static int sctp_sock_dump(struct sock *sk, void *p)
int err = 0;
lock_sock(sk);
- if (!sctp_sk(sk)->ep)
- goto release;
- list_for_each_entry(assoc, &sctp_sk(sk)->ep->asocs, asocs) {
+ list_for_each_entry(assoc, &ep->asocs, asocs) {
if (cb->args[4] < cb->args[1])
goto next;
@@ -309,7 +309,6 @@ static int sctp_sock_dump(struct sock *sk, void *p)
cb->nlh->nlmsg_seq,
NLM_F_MULTI, cb->nlh,
commp->net_admin) < 0) {
- cb->args[3] = 1;
err = 1;
goto release;
}
@@ -327,40 +326,30 @@ next:
cb->args[4]++;
}
cb->args[1] = 0;
- cb->args[2]++;
cb->args[3] = 0;
cb->args[4] = 0;
release:
release_sock(sk);
- sock_put(sk);
return err;
}
-static int sctp_get_sock(struct sctp_transport *tsp, void *p)
+static int sctp_sock_filter(struct sctp_transport *tsp, void *p)
{
struct sctp_endpoint *ep = tsp->asoc->ep;
struct sctp_comm_param *commp = p;
struct sock *sk = ep->base.sk;
- struct netlink_callback *cb = commp->cb;
const struct inet_diag_req_v2 *r = commp->r;
struct sctp_association *assoc =
list_entry(ep->asocs.next, struct sctp_association, asocs);
/* find the ep only once through the transports by this condition */
if (tsp->asoc != assoc)
- goto out;
+ return 0;
if (r->sdiag_family != AF_UNSPEC && sk->sk_family != r->sdiag_family)
- goto out;
-
- sock_hold(sk);
- cb->args[5] = (long)sk;
+ return 0;
return 1;
-
-out:
- cb->args[2]++;
- return 0;
}
static int sctp_ep_dump(struct sctp_endpoint *ep, void *p)
@@ -503,12 +492,8 @@ skip:
if (!(idiag_states & ~(TCPF_LISTEN | TCPF_CLOSE)))
goto done;
-next:
- cb->args[5] = 0;
- sctp_for_each_transport(sctp_get_sock, net, cb->args[2], &commp);
-
- if (cb->args[5] && !sctp_sock_dump((struct sock *)cb->args[5], &commp))
- goto next;
+ sctp_for_each_transport(sctp_sock_filter, sctp_sock_dump,
+ net, (int *)&cb->args[2], &commp);
done:
cb->args[1] = cb->args[4];
diff --git a/net/sctp/socket.c b/net/sctp/socket.c
index 1b00a1e09b93..d4730ada7f32 100644
--- a/net/sctp/socket.c
+++ b/net/sctp/socket.c
@@ -4658,29 +4658,39 @@ int sctp_transport_lookup_process(int (*cb)(struct sctp_transport *, void *),
EXPORT_SYMBOL_GPL(sctp_transport_lookup_process);
int sctp_for_each_transport(int (*cb)(struct sctp_transport *, void *),
- struct net *net, int pos, void *p) {
+ int (*cb_done)(struct sctp_transport *, void *),
+ struct net *net, int *pos, void *p) {
struct rhashtable_iter hti;
- void *obj;
- int err;
-
- err = sctp_transport_walk_start(&hti);
- if (err)
- return err;
+ struct sctp_transport *tsp;
+ int ret;
- obj = sctp_transport_get_idx(net, &hti, pos + 1);
- for (; !IS_ERR_OR_NULL(obj); obj = sctp_transport_get_next(net, &hti)) {
- struct sctp_transport *transport = obj;
+again:
+ ret = sctp_transport_walk_start(&hti);
+ if (ret)
+ return ret;
- if (!sctp_transport_hold(transport))
+ tsp = sctp_transport_get_idx(net, &hti, *pos + 1);
+ for (; !IS_ERR_OR_NULL(tsp); tsp = sctp_transport_get_next(net, &hti)) {
+ if (!sctp_transport_hold(tsp))
continue;
- err = cb(transport, p);
- sctp_transport_put(transport);
- if (err)
+ ret = cb(tsp, p);
+ if (ret)
break;
+ (*pos)++;
+ sctp_transport_put(tsp);
}
sctp_transport_walk_stop(&hti);
- return err;
+ if (ret) {
+ if (cb_done && !cb_done(tsp, p)) {
+ (*pos)++;
+ sctp_transport_put(tsp);
+ goto again;
+ }
+ sctp_transport_put(tsp);
+ }
+
+ return ret;
}
EXPORT_SYMBOL_GPL(sctp_for_each_transport);
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c
index fa596fa71ba7..7d80040a37b6 100644
--- a/net/tls/tls_sw.c
+++ b/net/tls/tls_sw.c
@@ -639,7 +639,7 @@ sendpage_end:
return ret;
}
-void tls_sw_free_resources(struct sock *sk)
+static void tls_sw_free_resources(struct sock *sk)
{
struct tls_context *tls_ctx = tls_get_ctx(sk);
struct tls_sw_context *ctx = tls_sw_ctx(tls_ctx);
diff --git a/scripts/Makefile.extrawarn b/scripts/Makefile.extrawarn
index fb3522fd8702..ae8a1357d01d 100644
--- a/scripts/Makefile.extrawarn
+++ b/scripts/Makefile.extrawarn
@@ -37,6 +37,7 @@ warning-2 += $(call cc-option, -Wlogical-op)
warning-2 += $(call cc-option, -Wmissing-field-initializers)
warning-2 += $(call cc-option, -Wsign-compare)
warning-2 += $(call cc-option, -Wmaybe-uninitialized)
+warning-2 += $(call cc-option, -Wunused-macros)
warning-3 := -Wbad-function-cast
warning-3 += -Wcast-qual
diff --git a/scripts/Makefile.fwinst b/scripts/Makefile.fwinst
deleted file mode 100644
index b27290035253..000000000000
--- a/scripts/Makefile.fwinst
+++ /dev/null
@@ -1,70 +0,0 @@
-# ==========================================================================
-# Installing firmware
-#
-# We don't include the .config, so all firmware files are in $(fw-shipped-)
-# rather than in $(fw-shipped-y) or $(fw-shipped-m).
-# ==========================================================================
-
-INSTALL := install
-src := $(obj)
-
-# For modules_install installing firmware, we want to see .config
-# But for firmware_install, we don't care, but don't want to require it.
--include $(objtree)/.config
-
-include scripts/Kbuild.include
-include $(src)/Makefile
-
-include scripts/Makefile.host
-
-mod-fw := $(fw-shipped-m)
-# If CONFIG_FIRMWARE_IN_KERNEL isn't set, then install the
-# firmware for in-kernel drivers too.
-ifndef CONFIG_FIRMWARE_IN_KERNEL
-mod-fw += $(fw-shipped-y)
-endif
-
-ifneq ($(KBUILD_SRC),)
-# Create output directory if not already present
-_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
-
-firmware-dirs := $(sort $(addprefix $(objtree)/$(obj)/,$(dir $(fw-external-y) $(fw-shipped-all))))
-# Create directories for firmware in subdirectories
-_dummy := $(foreach d,$(firmware-dirs), $(shell [ -d $(d) ] || mkdir -p $(d)))
-endif
-
-installed-mod-fw := $(addprefix $(INSTALL_FW_PATH)/,$(mod-fw))
-
-installed-fw := $(addprefix $(INSTALL_FW_PATH)/,$(fw-shipped-all))
-
-quiet_cmd_install = INSTALL $(subst $(srctree)/,,$@)
- cmd_install = mkdir -p $(@D); $(INSTALL) -m0644 $< $@
-
-$(installed-fw): $(INSTALL_FW_PATH)/%: $(obj)/%
- $(call cmd,install)
-
-PHONY += __fw_install __fw_modinst FORCE
-
-.PHONY: $(PHONY)
-
-__fw_install: $(installed-fw)
-
-__fw_modinst: $(installed-mod-fw)
- @:
-
-__fw_modbuild: $(addprefix $(obj)/,$(mod-fw))
- @:
-
-FORCE:
-
-# Read all saved command lines and dependencies for the $(targets) we
-# may be building using $(if_changed{,_dep}). As an optimization, we
-# don't need to read them if the target does not exist; we will rebuild
-# anyway in that case.
-
-targets := $(wildcard $(sort $(targets)))
-cmd_files := $(wildcard $(foreach f,$(targets),$(dir $(f)).$(notdir $(f)).cmd))
-
-ifneq ($(cmd_files),)
- include $(cmd_files)
-endif
diff --git a/scripts/gdb/linux/Makefile b/scripts/gdb/linux/Makefile
index 8b00031f5349..ab3cfe727a4e 100644
--- a/scripts/gdb/linux/Makefile
+++ b/scripts/gdb/linux/Makefile
@@ -1,6 +1,6 @@
always := gdb-scripts
-SRCTREE := $(shell cd $(srctree) && /bin/pwd)
+SRCTREE := $(abspath $(srctree))
$(obj)/gdb-scripts:
ifneq ($(KBUILD_SRC),)
diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c
index b920d186ad4a..98314b400a95 100644
--- a/scripts/mod/modpost.c
+++ b/scripts/mod/modpost.c
@@ -47,6 +47,12 @@ enum export {
export_unused_gpl, export_gpl_future, export_unknown
};
+/* In kernel, this size is defined in linux/module.h;
+ * here we use Elf_Addr instead of long for covering cross-compile
+ */
+
+#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
+
#define PRINTF __attribute__ ((format (printf, 1, 2)))
PRINTF void fatal(const char *fmt, ...)
@@ -2111,6 +2117,23 @@ static void check_exports(struct module *mod)
}
}
+static int check_modname_len(struct module *mod)
+{
+ const char *mod_name;
+
+ mod_name = strrchr(mod->name, '/');
+ if (mod_name == NULL)
+ mod_name = mod->name;
+ else
+ mod_name++;
+ if (strlen(mod_name) >= MODULE_NAME_LEN) {
+ merror("module name is too long [%s.ko]\n", mod->name);
+ return 1;
+ }
+
+ return 0;
+}
+
/**
* Header for the generated file
**/
@@ -2150,11 +2173,6 @@ static void add_staging_flag(struct buffer *b, const char *name)
buf_printf(b, "\nMODULE_INFO(staging, \"Y\");\n");
}
-/* In kernel, this size is defined in linux/module.h;
- * here we use Elf_Addr instead of long for covering cross-compile
- */
-#define MODULE_NAME_LEN (64 - sizeof(Elf_Addr))
-
/**
* Record CRCs for unresolved symbols
**/
@@ -2485,6 +2503,7 @@ int main(int argc, char **argv)
buf.pos = 0;
+ err |= check_modname_len(mod);
add_header(&buf, mod);
add_intree_flag(&buf, !external_module);
add_staging_flag(&buf, mod->name);
diff --git a/scripts/package/buildtar b/scripts/package/buildtar
index e046bff33589..51f947118256 100755
--- a/scripts/package/buildtar
+++ b/scripts/package/buildtar
@@ -24,20 +24,19 @@ tarball="${objtree}/linux-${KERNELRELEASE}-${ARCH}.tar"
#
case "${1}" in
tar-pkg)
- compress="cat"
- file_ext=""
+ opts=
;;
targz-pkg)
- compress="gzip"
- file_ext=".gz"
+ opts=--gzip
+ tarball=${tarball}.gz
;;
tarbz2-pkg)
- compress="bzip2"
- file_ext=".bz2"
+ opts=--bzip2
+ tarball=${tarball}.bz2
;;
tarxz-pkg)
- compress="xz"
- file_ext=".xz"
+ opts=--xz
+ tarball=${tarball}.xz
;;
*)
echo "Unknown tarball target \"${1}\" requested, please add it to ${0}." >&2
@@ -51,13 +50,14 @@ esac
#
rm -rf -- "${tmpdir}"
mkdir -p -- "${tmpdir}/boot"
-
+dirs=boot
#
# Try to install modules
#
-if grep -q '^CONFIG_MODULES=y' "${objtree}/.config"; then
+if grep -q '^CONFIG_MODULES=y' "${KCONFIG_CONFIG}"; then
make ARCH="${ARCH}" O="${objtree}" KBUILD_SRC= INSTALL_MOD_PATH="${tmpdir}" modules_install
+ dirs="$dirs lib"
fi
@@ -65,7 +65,7 @@ fi
# Install basic kernel files
#
cp -v -- "${objtree}/System.map" "${tmpdir}/boot/System.map-${KERNELRELEASE}"
-cp -v -- "${objtree}/.config" "${tmpdir}/boot/config-${KERNELRELEASE}"
+cp -v -- "${KCONFIG_CONFIG}" "${tmpdir}/boot/config-${KERNELRELEASE}"
cp -v -- "${objtree}/vmlinux" "${tmpdir}/boot/vmlinux-${KERNELRELEASE}"
@@ -124,14 +124,12 @@ esac
#
# Create the tarball
#
-(
- opts=
- if tar --owner=root --group=root --help >/dev/null 2>&1; then
- opts="--owner=root --group=root"
- fi
- tar cf - -C "$tmpdir" boot/ lib/ $opts | ${compress} > "${tarball}${file_ext}"
-)
+if tar --owner=root --group=root --help >/dev/null 2>&1; then
+ opts="$opts --owner=root --group=root"
+fi
+
+tar cf $tarball -C $tmpdir $opts $dirs
-echo "Tarball successfully created in ${tarball}${file_ext}"
+echo "Tarball successfully created in $tarball"
exit 0
diff --git a/scripts/sphinx-pre-install b/scripts/sphinx-pre-install
index 677756ae34c9..067459760a7b 100755
--- a/scripts/sphinx-pre-install
+++ b/scripts/sphinx-pre-install
@@ -40,7 +40,6 @@ my $virtualenv = 1;
#
my %texlive = (
- 'adjustbox.sty' => 'texlive-adjustbox',
'amsfonts.sty' => 'texlive-amsfonts',
'amsmath.sty' => 'texlive-amsmath',
'amssymb.sty' => 'texlive-amsfonts',
diff --git a/security/keys/big_key.c b/security/keys/big_key.c
index 835c1ab30d01..6acb00f6f22c 100644
--- a/security/keys/big_key.c
+++ b/security/keys/big_key.c
@@ -147,6 +147,7 @@ int big_key_preparse(struct key_preparsed_payload *prep)
* File content is stored encrypted with randomly generated key.
*/
size_t enclen = ALIGN(datalen, crypto_skcipher_blocksize(big_key_skcipher));
+ loff_t pos = 0;
/* prepare aligned data to encrypt */
data = kmalloc(enclen, GFP_KERNEL);
@@ -179,7 +180,7 @@ int big_key_preparse(struct key_preparsed_payload *prep)
goto err_enckey;
}
- written = kernel_write(file, data, enclen, 0);
+ written = kernel_write(file, data, enclen, &pos);
if (written != enclen) {
ret = written;
if (written >= 0)
@@ -295,6 +296,7 @@ long big_key_read(const struct key *key, char __user *buffer, size_t buflen)
u8 *data;
u8 *enckey = (u8 *)key->payload.data[big_key_data];
size_t enclen = ALIGN(datalen, crypto_skcipher_blocksize(big_key_skcipher));
+ loff_t pos = 0;
data = kmalloc(enclen, GFP_KERNEL);
if (!data)
@@ -307,7 +309,7 @@ long big_key_read(const struct key *key, char __user *buffer, size_t buflen)
}
/* read file to kernel and decrypt */
- ret = kernel_read(file, 0, data, enclen);
+ ret = kernel_read(file, data, enclen, &pos);
if (ret >= 0 && ret != enclen) {
ret = -EIO;
goto err_fput;
diff --git a/sound/core/device.c b/sound/core/device.c
index 8918838b1999..cb0e46f66cc9 100644
--- a/sound/core/device.c
+++ b/sound/core/device.c
@@ -128,7 +128,7 @@ void snd_device_disconnect(struct snd_card *card, void *device_data)
if (dev)
__snd_device_disconnect(dev);
else
- dev_dbg(card->dev, "device disconnect %p (from %pF), not found\n",
+ dev_dbg(card->dev, "device disconnect %p (from %pS), not found\n",
device_data, __builtin_return_address(0));
}
EXPORT_SYMBOL_GPL(snd_device_disconnect);
@@ -152,7 +152,7 @@ void snd_device_free(struct snd_card *card, void *device_data)
if (dev)
__snd_device_free(dev);
else
- dev_dbg(card->dev, "device free %p (from %pF), not found\n",
+ dev_dbg(card->dev, "device free %p (from %pS), not found\n",
device_data, __builtin_return_address(0));
}
EXPORT_SYMBOL(snd_device_free);
diff --git a/sound/core/seq_device.c b/sound/core/seq_device.c
index c4acf17e9f5e..e40a2cba5002 100644
--- a/sound/core/seq_device.c
+++ b/sound/core/seq_device.c
@@ -148,8 +148,10 @@ void snd_seq_device_load_drivers(void)
flush_work(&autoload_work);
}
EXPORT_SYMBOL(snd_seq_device_load_drivers);
+#define cancel_autoload_drivers() cancel_work_sync(&autoload_work)
#else
#define queue_autoload_drivers() /* NOP */
+#define cancel_autoload_drivers() /* NOP */
#endif
/*
@@ -159,6 +161,7 @@ static int snd_seq_device_dev_free(struct snd_device *device)
{
struct snd_seq_device *dev = device->device_data;
+ cancel_autoload_drivers();
put_device(&dev->dev);
return 0;
}
diff --git a/sound/firewire/motu/motu-stream.c b/sound/firewire/motu/motu-stream.c
index dc5541c8b359..73e7a5e527fc 100644
--- a/sound/firewire/motu/motu-stream.c
+++ b/sound/firewire/motu/motu-stream.c
@@ -253,24 +253,21 @@ int snd_motu_stream_start_duplex(struct snd_motu *motu, unsigned int rate)
if (err < 0) {
dev_err(&motu->unit->device,
"fail to start isochronous comm: %d\n", err);
- stop_both_streams(motu);
- return err;
+ goto stop_streams;
}
err = start_isoc_ctx(motu, &motu->rx_stream);
if (err < 0) {
dev_err(&motu->unit->device,
"fail to start IT context: %d\n", err);
- stop_both_streams(motu);
- return err;
+ goto stop_streams;
}
err = protocol->switch_fetching_mode(motu, true);
if (err < 0) {
dev_err(&motu->unit->device,
"fail to enable frame fetching: %d\n", err);
- stop_both_streams(motu);
- return err;
+ goto stop_streams;
}
}
@@ -281,12 +278,15 @@ int snd_motu_stream_start_duplex(struct snd_motu *motu, unsigned int rate)
dev_err(&motu->unit->device,
"fail to start IR context: %d", err);
amdtp_stream_stop(&motu->rx_stream);
- stop_both_streams(motu);
- return err;
+ goto stop_streams;
}
}
return 0;
+
+stop_streams:
+ stop_both_streams(motu);
+ return err;
}
void snd_motu_stream_stop_duplex(struct snd_motu *motu)
diff --git a/sound/oss/sound_firmware.h b/sound/oss/sound_firmware.h
index da4c67e005ed..2be465277ba0 100644
--- a/sound/oss/sound_firmware.h
+++ b/sound/oss/sound_firmware.h
@@ -21,7 +21,7 @@ static inline int mod_firmware_load(const char *fn, char **fp)
loff_t size;
int err;
- err = kernel_read_file_from_path((char *)fn, (void **)fp, &size,
+ err = kernel_read_file_from_path(fn, (void **)fp, &size,
131072, READING_FIRMWARE);
if (err < 0)
return 0;
diff --git a/sound/pci/asihpi/asihpi.c b/sound/pci/asihpi/asihpi.c
index 976a3d23557e..70d023a85bf5 100644
--- a/sound/pci/asihpi/asihpi.c
+++ b/sound/pci/asihpi/asihpi.c
@@ -558,12 +558,10 @@ static void snd_card_asihpi_pcm_int_start(struct snd_pcm_substream *substream)
struct snd_card_asihpi_pcm *dpcm;
struct snd_card_asihpi *card;
- BUG_ON(!substream);
-
dpcm = (struct snd_card_asihpi_pcm *)substream->runtime->private_data;
card = snd_pcm_substream_chip(substream);
- BUG_ON(in_interrupt());
+ WARN_ON(in_interrupt());
tasklet_disable(&card->t);
card->llmode_streampriv = dpcm;
tasklet_enable(&card->t);
@@ -578,8 +576,6 @@ static void snd_card_asihpi_pcm_int_stop(struct snd_pcm_substream *substream)
struct snd_card_asihpi_pcm *dpcm;
struct snd_card_asihpi *card;
- BUG_ON(!substream);
-
dpcm = (struct snd_card_asihpi_pcm *)substream->runtime->private_data;
card = snd_pcm_substream_chip(substream);
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index 97ac80af4447..8f20dec97843 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -2622,22 +2622,18 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
err = request_firmware(&chip->assp_kernel_image,
"ess/maestro3_assp_kernel.fw", &pci->dev);
- if (err < 0) {
- snd_m3_free(chip);
- return err;
- }
+ if (err < 0)
+ goto free_chip;
err = request_firmware(&chip->assp_minisrc_image,
"ess/maestro3_assp_minisrc.fw", &pci->dev);
- if (err < 0) {
- snd_m3_free(chip);
- return err;
- }
+ if (err < 0)
+ goto free_chip;
+
+ err = pci_request_regions(pci, card->driver);
+ if (err < 0)
+ goto free_chip;
- if ((err = pci_request_regions(pci, card->driver)) < 0) {
- snd_m3_free(chip);
- return err;
- }
chip->iobase = pci_resource_start(pci, 0);
/* just to be sure */
@@ -2655,8 +2651,8 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED,
KBUILD_MODNAME, chip)) {
dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
- snd_m3_free(chip);
- return -ENOMEM;
+ err = -ENOMEM;
+ goto free_chip;
}
chip->irq = pci->irq;
@@ -2666,10 +2662,9 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
dev_warn(card->dev, "can't allocate apm buffer\n");
#endif
- if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
- snd_m3_free(chip);
- return err;
- }
+ err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
+ if (err < 0)
+ goto free_chip;
if ((err = snd_m3_mixer(chip)) < 0)
return err;
@@ -2699,6 +2694,10 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
*chip_ret = chip;
return 0;
+
+free_chip:
+ snd_m3_free(chip);
+ return err;
}
/*
@@ -2741,23 +2740,19 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
break;
}
- if ((err = snd_m3_create(card, pci,
- external_amp[dev],
- amp_gpio[dev],
- &chip)) < 0) {
- snd_card_free(card);
- return err;
- }
+ err = snd_m3_create(card, pci, external_amp[dev], amp_gpio[dev], &chip);
+ if (err < 0)
+ goto free_card;
+
card->private_data = chip;
sprintf(card->shortname, "ESS %s PCI", card->driver);
sprintf(card->longname, "%s at 0x%lx, irq %d",
card->shortname, chip->iobase, chip->irq);
- if ((err = snd_card_register(card)) < 0) {
- snd_card_free(card);
- return err;
- }
+ err = snd_card_register(card);
+ if (err < 0)
+ goto free_card;
#if 0 /* TODO: not supported yet */
/* TODO enable MIDI IRQ and I/O */
@@ -2772,6 +2767,10 @@ snd_m3_probe(struct pci_dev *pci, const struct pci_device_id *pci_id)
pci_set_drvdata(pci, card);
dev++;
return 0;
+
+free_card:
+ snd_card_free(card);
+ return err;
}
static void snd_m3_remove(struct pci_dev *pci)
diff --git a/sound/pci/rme9652/hdsp.c b/sound/pci/rme9652/hdsp.c
index 0ff41f9ab434..9f0f73875f01 100644
--- a/sound/pci/rme9652/hdsp.c
+++ b/sound/pci/rme9652/hdsp.c
@@ -793,11 +793,8 @@ static int hdsp_get_iobox_version (struct hdsp *hdsp)
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S200 | HDSP_PROGRAM);
hdsp_write (hdsp, HDSP_fifoData, 0);
- if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) {
- hdsp->io_type = Multiface;
- dev_info(hdsp->card->dev, "Multiface found\n");
- return 0;
- }
+ if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
+ goto set_multi;
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
hdsp_write(hdsp, HDSP_fifoData, 0);
@@ -810,20 +807,14 @@ static int hdsp_get_iobox_version (struct hdsp *hdsp)
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
hdsp_write(hdsp, HDSP_fifoData, 0);
- if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0) {
- hdsp->io_type = Multiface;
- dev_info(hdsp->card->dev, "Multiface found\n");
- return 0;
- }
+ if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) == 0)
+ goto set_multi;
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S300);
hdsp_write(hdsp, HDSP_control2Reg, HDSP_S_LOAD);
hdsp_write(hdsp, HDSP_fifoData, 0);
- if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0) {
- hdsp->io_type = Multiface;
- dev_info(hdsp->card->dev, "Multiface found\n");
- return 0;
- }
+ if (hdsp_fifo_wait(hdsp, 0, HDSP_SHORT_WAIT) < 0)
+ goto set_multi;
hdsp->io_type = RPM;
dev_info(hdsp->card->dev, "RPM found\n");
@@ -838,6 +829,11 @@ static int hdsp_get_iobox_version (struct hdsp *hdsp)
hdsp->io_type = Digiface;
}
return 0;
+
+set_multi:
+ hdsp->io_type = Multiface;
+ dev_info(hdsp->card->dev, "Multiface found\n");
+ return 0;
}
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c
index 25284d8d9758..f20d42714e4d 100644
--- a/sound/pci/rme9652/hdspm.c
+++ b/sound/pci/rme9652/hdspm.c
@@ -6949,10 +6949,8 @@ static int snd_hdspm_probe(struct pci_dev *pci,
hdspm->pci = pci;
err = snd_hdspm_create(card, hdspm);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
if (hdspm->io_type != MADIface) {
snprintf(card->shortname, sizeof(card->shortname), "%s_%x",
@@ -6970,15 +6968,17 @@ static int snd_hdspm_probe(struct pci_dev *pci,
}
err = snd_card_register(card);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
pci_set_drvdata(pci, card);
dev++;
return 0;
+
+free_card:
+ snd_card_free(card);
+ return err;
}
static void snd_hdspm_remove(struct pci_dev *pci)
diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
index 4faf3e1ed06a..eafdee384059 100644
--- a/sound/pci/ymfpci/ymfpci.c
+++ b/sound/pci/ymfpci/ymfpci.c
@@ -268,10 +268,9 @@ static int snd_card_ymfpci_probe(struct pci_dev *pci,
if ((err = snd_ymfpci_create(card, pci,
old_legacy_ctrl,
&chip)) < 0) {
- snd_card_free(card);
release_and_free_resource(mpu_res);
release_and_free_resource(fm_res);
- return err;
+ goto free_card;
}
chip->fm_res = fm_res;
chip->mpu_res = mpu_res;
@@ -283,35 +282,31 @@ static int snd_card_ymfpci_probe(struct pci_dev *pci,
card->shortname,
chip->reg_area_phys,
chip->irq);
- if ((err = snd_ymfpci_pcm(chip, 0)) < 0) {
- snd_card_free(card);
- return err;
- }
- if ((err = snd_ymfpci_pcm_spdif(chip, 1)) < 0) {
- snd_card_free(card);
- return err;
- }
+ err = snd_ymfpci_pcm(chip, 0);
+ if (err < 0)
+ goto free_card;
+
+ err = snd_ymfpci_pcm_spdif(chip, 1);
+ if (err < 0)
+ goto free_card;
+
err = snd_ymfpci_mixer(chip, rear_switch[dev]);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
+
if (chip->ac97->ext_id & AC97_EI_SDAC) {
err = snd_ymfpci_pcm_4ch(chip, 2);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
+ if (err < 0)
+ goto free_card;
+
err = snd_ymfpci_pcm2(chip, 3);
- if (err < 0) {
- snd_card_free(card);
- return err;
- }
- }
- if ((err = snd_ymfpci_timer(chip, 0)) < 0) {
- snd_card_free(card);
- return err;
+ if (err < 0)
+ goto free_card;
}
+ err = snd_ymfpci_timer(chip, 0);
+ if (err < 0)
+ goto free_card;
+
if (chip->mpu_res) {
if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI,
mpu_port[dev],
@@ -336,21 +331,24 @@ static int snd_card_ymfpci_probe(struct pci_dev *pci,
legacy_ctrl &= ~YMFPCI_LEGACY_FMEN;
pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl);
} else if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
- snd_card_free(card);
dev_err(card->dev, "cannot create opl3 hwdep\n");
- return err;
+ goto free_card;
}
}
snd_ymfpci_create_gameport(chip, dev, legacy_ctrl, legacy_ctrl2);
- if ((err = snd_card_register(card)) < 0) {
- snd_card_free(card);
- return err;
- }
+ err = snd_card_register(card);
+ if (err < 0)
+ goto free_card;
+
pci_set_drvdata(pci, card);
dev++;
return 0;
+
+free_card:
+ snd_card_free(card);
+ return err;
}
static void snd_card_ymfpci_remove(struct pci_dev *pci)
diff --git a/sound/pci/ymfpci/ymfpci_main.c b/sound/pci/ymfpci/ymfpci_main.c
index edfd58248082..8ca2e41e5827 100644
--- a/sound/pci/ymfpci/ymfpci_main.c
+++ b/sound/pci/ymfpci/ymfpci_main.c
@@ -2399,59 +2399,60 @@ int snd_ymfpci_create(struct snd_card *card,
dev_err(chip->card->dev,
"unable to grab memory region 0x%lx-0x%lx\n",
chip->reg_area_phys, chip->reg_area_phys + 0x8000 - 1);
- snd_ymfpci_free(chip);
- return -EBUSY;
+ err = -EBUSY;
+ goto free_chip;
}
if (request_irq(pci->irq, snd_ymfpci_interrupt, IRQF_SHARED,
KBUILD_MODNAME, chip)) {
dev_err(chip->card->dev, "unable to grab IRQ %d\n", pci->irq);
- snd_ymfpci_free(chip);
- return -EBUSY;
+ err = -EBUSY;
+ goto free_chip;
}
chip->irq = pci->irq;
snd_ymfpci_aclink_reset(pci);
if (snd_ymfpci_codec_ready(chip, 0) < 0) {
- snd_ymfpci_free(chip);
- return -EIO;
+ err = -EIO;
+ goto free_chip;
}
err = snd_ymfpci_request_firmware(chip);
if (err < 0) {
dev_err(chip->card->dev, "firmware request failed: %d\n", err);
- snd_ymfpci_free(chip);
- return err;
+ goto free_chip;
}
snd_ymfpci_download_image(chip);
udelay(100); /* seems we need a delay after downloading image.. */
if (snd_ymfpci_memalloc(chip) < 0) {
- snd_ymfpci_free(chip);
- return -EIO;
+ err = -EIO;
+ goto free_chip;
}
- if ((err = snd_ymfpci_ac3_init(chip)) < 0) {
- snd_ymfpci_free(chip);
- return err;
- }
+ err = snd_ymfpci_ac3_init(chip);
+ if (err < 0)
+ goto free_chip;
#ifdef CONFIG_PM_SLEEP
chip->saved_regs = kmalloc(YDSXGR_NUM_SAVED_REGS * sizeof(u32),
GFP_KERNEL);
if (chip->saved_regs == NULL) {
- snd_ymfpci_free(chip);
- return -ENOMEM;
+ err = -ENOMEM;
+ goto free_chip;
}
#endif
- if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
- snd_ymfpci_free(chip);
- return err;
- }
+ err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
+ if (err < 0)
+ goto free_chip;
snd_ymfpci_proc_init(card, chip);
*rchip = chip;
return 0;
+
+free_chip:
+ snd_ymfpci_free(chip);
+ return err;
}
diff --git a/sound/soc/atmel/atmel-classd.c b/sound/soc/atmel/atmel-classd.c
index 0cd7caaed9c4..8445edd06737 100644
--- a/sound/soc/atmel/atmel-classd.c
+++ b/sound/soc/atmel/atmel-classd.c
@@ -32,7 +32,6 @@ struct atmel_classd {
struct regmap *regmap;
struct clk *pclk;
struct clk *gclk;
- struct clk *aclk;
int irq;
const struct atmel_classd_pdata *pdata;
};
@@ -330,11 +329,6 @@ static int atmel_classd_codec_dai_startup(struct snd_pcm_substream *substream,
{
struct snd_soc_pcm_runtime *rtd = substream->private_data;
struct atmel_classd *dd = snd_soc_card_get_drvdata(rtd->card);
- int ret;
-
- ret = clk_prepare_enable(dd->aclk);
- if (ret)
- return ret;
return clk_prepare_enable(dd->gclk);
}
@@ -357,31 +351,31 @@ static int atmel_classd_codec_dai_digital_mute(struct snd_soc_dai *codec_dai,
return 0;
}
-#define CLASSD_ACLK_RATE_11M2896_MPY_8 (112896 * 100 * 8)
-#define CLASSD_ACLK_RATE_12M288_MPY_8 (12288 * 1000 * 8)
+#define CLASSD_GCLK_RATE_11M2896_MPY_8 (112896 * 100 * 8)
+#define CLASSD_GCLK_RATE_12M288_MPY_8 (12288 * 1000 * 8)
static struct {
int rate;
int sample_rate;
int dsp_clk;
- unsigned long aclk_rate;
+ unsigned long gclk_rate;
} const sample_rates[] = {
{ 8000, CLASSD_INTPMR_FRAME_8K,
- CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
+ CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
{ 16000, CLASSD_INTPMR_FRAME_16K,
- CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
+ CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
{ 32000, CLASSD_INTPMR_FRAME_32K,
- CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
+ CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
{ 48000, CLASSD_INTPMR_FRAME_48K,
- CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
+ CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
{ 96000, CLASSD_INTPMR_FRAME_96K,
- CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
+ CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
{ 22050, CLASSD_INTPMR_FRAME_22K,
- CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_ACLK_RATE_11M2896_MPY_8 },
+ CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_GCLK_RATE_11M2896_MPY_8 },
{ 44100, CLASSD_INTPMR_FRAME_44K,
- CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_ACLK_RATE_11M2896_MPY_8 },
+ CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_GCLK_RATE_11M2896_MPY_8 },
{ 88200, CLASSD_INTPMR_FRAME_88K,
- CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_ACLK_RATE_11M2896_MPY_8 },
+ CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_GCLK_RATE_11M2896_MPY_8 },
};
static int
@@ -410,13 +404,12 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream,
}
dev_dbg(codec->dev,
- "Selected SAMPLE_RATE of %dHz, ACLK_RATE of %ldHz\n",
- sample_rates[best].rate, sample_rates[best].aclk_rate);
+ "Selected SAMPLE_RATE of %dHz, GCLK_RATE of %ldHz\n",
+ sample_rates[best].rate, sample_rates[best].gclk_rate);
clk_disable_unprepare(dd->gclk);
- clk_disable_unprepare(dd->aclk);
- ret = clk_set_rate(dd->aclk, sample_rates[best].aclk_rate);
+ ret = clk_set_rate(dd->gclk, sample_rates[best].gclk_rate);
if (ret)
return ret;
@@ -426,10 +419,6 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream,
snd_soc_update_bits(codec, CLASSD_INTPMR, mask, val);
- ret = clk_prepare_enable(dd->aclk);
- if (ret)
- return ret;
-
return clk_prepare_enable(dd->gclk);
}
@@ -441,7 +430,6 @@ atmel_classd_codec_dai_shutdown(struct snd_pcm_substream *substream,
struct atmel_classd *dd = snd_soc_card_get_drvdata(rtd->card);
clk_disable_unprepare(dd->gclk);
- clk_disable_unprepare(dd->aclk);
}
static int atmel_classd_codec_dai_prepare(struct snd_pcm_substream *substream,
@@ -596,13 +584,6 @@ static int atmel_classd_probe(struct platform_device *pdev)
return ret;
}
- dd->aclk = devm_clk_get(dev, "aclk");
- if (IS_ERR(dd->aclk)) {
- ret = PTR_ERR(dd->aclk);
- dev_err(dev, "failed to get audio clock: %d\n", ret);
- return ret;
- }
-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
io_base = devm_ioremap_resource(dev, res);
if (IS_ERR(io_base)) {
diff --git a/sound/soc/codecs/rt5645.c b/sound/soc/codecs/rt5645.c
index 6a7778a44853..a98647ac497c 100644
--- a/sound/soc/codecs/rt5645.c
+++ b/sound/soc/codecs/rt5645.c
@@ -3600,7 +3600,7 @@ static const struct rt5645_platform_data buddy_platform_data = {
.level_trigger_irq = true,
};
-static struct dmi_system_id dmi_platform_intel_broadwell[] = {
+static const struct dmi_system_id dmi_platform_intel_broadwell[] = {
{
.ident = "Chrome Buddy",
.matches = {
diff --git a/sound/usb/6fire/chip.c b/sound/usb/6fire/chip.c
index bc2a24f7a791..c7641cb50616 100644
--- a/sound/usb/6fire/chip.c
+++ b/sound/usb/6fire/chip.c
@@ -143,37 +143,32 @@ static int usb6fire_chip_probe(struct usb_interface *intf,
chip->card = card;
ret = usb6fire_comm_init(chip);
- if (ret < 0) {
- usb6fire_chip_destroy(chip);
- return ret;
- }
+ if (ret < 0)
+ goto destroy_chip;
ret = usb6fire_midi_init(chip);
- if (ret < 0) {
- usb6fire_chip_destroy(chip);
- return ret;
- }
+ if (ret < 0)
+ goto destroy_chip;
ret = usb6fire_pcm_init(chip);
- if (ret < 0) {
- usb6fire_chip_destroy(chip);
- return ret;
- }
+ if (ret < 0)
+ goto destroy_chip;
ret = usb6fire_control_init(chip);
- if (ret < 0) {
- usb6fire_chip_destroy(chip);
- return ret;
- }
+ if (ret < 0)
+ goto destroy_chip;
ret = snd_card_register(card);
if (ret < 0) {
dev_err(&intf->dev, "cannot register card.");
- usb6fire_chip_destroy(chip);
- return ret;
+ goto destroy_chip;
}
usb_set_intfdata(intf, chip);
return 0;
+
+destroy_chip:
+ usb6fire_chip_destroy(chip);
+ return ret;
}
static void usb6fire_chip_disconnect(struct usb_interface *intf)
diff --git a/sound/usb/usx2y/us122l.c b/sound/usb/usx2y/us122l.c
index b49d6e953d52..159da1f3924e 100644
--- a/sound/usb/usx2y/us122l.c
+++ b/sound/usb/usx2y/us122l.c
@@ -508,8 +508,7 @@ static bool us122l_create_card(struct snd_card *card)
err = us122l_create_usbmidi(card);
if (err < 0) {
snd_printk(KERN_ERR "us122l_create_usbmidi error %i \n", err);
- us122l_stop(us122l);
- return false;
+ goto stop;
}
err = usb_stream_hwdep_new(card);
if (err < 0) {
@@ -518,10 +517,13 @@ static bool us122l_create_card(struct snd_card *card)
list_for_each(p, &us122l->midi_list)
snd_usbmidi_disconnect(p);
- us122l_stop(us122l);
- return false;
+ goto stop;
}
return true;
+
+stop:
+ us122l_stop(us122l);
+ return false;
}
static void snd_us122l_free(struct snd_card *card)
diff --git a/sound/usb/usx2y/usb_stream.c b/sound/usb/usx2y/usb_stream.c
index fe926cb9192e..4dab49080700 100644
--- a/sound/usb/usx2y/usb_stream.c
+++ b/sound/usb/usx2y/usb_stream.c
@@ -352,20 +352,22 @@ static int submit_urbs(struct usb_stream_kernel *sk,
int err;
prepare_inurb(sk->idle_outurb->number_of_packets, sk->idle_inurb);
err = usb_submit_urb(sk->idle_inurb, GFP_ATOMIC);
- if (err < 0) {
- snd_printk(KERN_ERR "%i\n", err);
- return err;
- }
+ if (err < 0)
+ goto report_failure;
+
sk->idle_inurb = sk->completed_inurb;
sk->completed_inurb = inurb;
err = usb_submit_urb(sk->idle_outurb, GFP_ATOMIC);
- if (err < 0) {
- snd_printk(KERN_ERR "%i\n", err);
- return err;
- }
+ if (err < 0)
+ goto report_failure;
+
sk->idle_outurb = sk->completed_outurb;
sk->completed_outurb = outurb;
return 0;
+
+report_failure:
+ snd_printk(KERN_ERR "%i\n", err);
+ return err;
}
#ifdef DEBUG_LOOP_BACK
diff --git a/tools/include/linux/compiler-gcc.h b/tools/include/linux/compiler-gcc.h
index bd39b2090ad1..3723b9f8f964 100644
--- a/tools/include/linux/compiler-gcc.h
+++ b/tools/include/linux/compiler-gcc.h
@@ -21,11 +21,14 @@
#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
#define noinline __attribute__((noinline))
-
+#ifndef __packed
#define __packed __attribute__((packed))
-
+#endif
+#ifndef __noreturn
#define __noreturn __attribute__((noreturn))
-
+#endif
+#ifndef __aligned
#define __aligned(x) __attribute__((aligned(x)))
+#endif
#define __printf(a, b) __attribute__((format(printf, a, b)))
#define __scanf(a, b) __attribute__((format(scanf, a, b)))
diff --git a/tools/lib/api/Makefile b/tools/lib/api/Makefile
index 4563ba7ede6f..1e83e3c07448 100644
--- a/tools/lib/api/Makefile
+++ b/tools/lib/api/Makefile
@@ -17,13 +17,19 @@ MAKEFLAGS += --no-print-directory
LIBFILE = $(OUTPUT)libapi.a
CFLAGS := $(EXTRA_WARNINGS) $(EXTRA_CFLAGS)
-CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fPIC
+CFLAGS += -ggdb3 -Wall -Wextra -std=gnu99 -U_FORTIFY_SOURCE -fPIC
+ifeq ($(DEBUG),0)
ifeq ($(CC_NO_CLANG), 0)
CFLAGS += -O3
else
CFLAGS += -O6
endif
+endif
+
+ifeq ($(DEBUG),0)
+ CFLAGS += -D_FORTIFY_SOURCE
+endif
# Treat warnings as errors unless directed not to
ifneq ($(WERROR),0)
diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c
index 6e9f980a7d26..24460155c82c 100644
--- a/tools/objtool/elf.c
+++ b/tools/objtool/elf.c
@@ -175,19 +175,20 @@ static int read_sections(struct elf *elf)
return -1;
}
- sec->data = elf_getdata(s, NULL);
- if (!sec->data) {
- WARN_ELF("elf_getdata");
- return -1;
- }
-
- if (sec->data->d_off != 0 ||
- sec->data->d_size != sec->sh.sh_size) {
- WARN("unexpected data attributes for %s", sec->name);
- return -1;
+ if (sec->sh.sh_size != 0) {
+ sec->data = elf_getdata(s, NULL);
+ if (!sec->data) {
+ WARN_ELF("elf_getdata");
+ return -1;
+ }
+ if (sec->data->d_off != 0 ||
+ sec->data->d_size != sec->sh.sh_size) {
+ WARN("unexpected data attributes for %s",
+ sec->name);
+ return -1;
+ }
}
-
- sec->len = sec->data->d_size;
+ sec->len = sec->sh.sh_size;
}
/* sanity check, one more call to elf_nextscn() should return NULL */
@@ -508,6 +509,7 @@ struct section *elf_create_rela_section(struct elf *elf, struct section *base)
strcat(relaname, base->name);
sec = elf_create_section(elf, relaname, sizeof(GElf_Rela), 0);
+ free(relaname);
if (!sec)
return NULL;
@@ -561,6 +563,7 @@ int elf_write(struct elf *elf)
struct section *sec;
Elf_Scn *s;
+ /* Update section headers for changed sections: */
list_for_each_entry(sec, &elf->sections, list) {
if (sec->changed) {
s = elf_getscn(elf->elf, sec->idx);
@@ -568,13 +571,17 @@ int elf_write(struct elf *elf)
WARN_ELF("elf_getscn");
return -1;
}
- if (!gelf_update_shdr (s, &sec->sh)) {
+ if (!gelf_update_shdr(s, &sec->sh)) {
WARN_ELF("gelf_update_shdr");
return -1;
}
}
}
+ /* Make sure the new section header entries get updated properly. */
+ elf_flagelf(elf->elf, ELF_C_SET, ELF_F_DIRTY);
+
+ /* Write all changes to the file. */
if (elf_update(elf->elf, ELF_C_WRITE) < 0) {
WARN_ELF("elf_update");
return -1;
diff --git a/tools/perf/builtin-config.c b/tools/perf/builtin-config.c
index 3ddcc6e2abeb..a1d82e33282c 100644
--- a/tools/perf/builtin-config.c
+++ b/tools/perf/builtin-config.c
@@ -59,7 +59,7 @@ static int set_config(struct perf_config_set *set, const char *file_name,
fprintf(fp, "[%s]\n", section->name);
perf_config_items__for_each_entry(&section->items, item) {
- if (!use_system_config && section->from_system_config)
+ if (!use_system_config && item->from_system_config)
continue;
if (item->value)
fprintf(fp, "\t%s = %s\n",
diff --git a/tools/perf/builtin-kmem.c b/tools/perf/builtin-kmem.c
index a1497c516d85..24ee68ecdd42 100644
--- a/tools/perf/builtin-kmem.c
+++ b/tools/perf/builtin-kmem.c
@@ -627,7 +627,6 @@ static const struct {
{ "GFP_HIGHUSER_MOVABLE", "HUM" },
{ "GFP_HIGHUSER", "HU" },
{ "GFP_USER", "U" },
- { "GFP_TEMPORARY", "TMP" },
{ "GFP_KERNEL_ACCOUNT", "KAC" },
{ "GFP_KERNEL", "K" },
{ "GFP_NOFS", "NF" },
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 85e992d9215b..69523ed55894 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -707,7 +707,7 @@ try_again:
process_interval();
}
}
- wait(&status);
+ waitpid(child_pid, &status, 0);
if (workload_exec_errno) {
const char *emsg = str_error_r(workload_exec_errno, msg, sizeof(msg));
diff --git a/tools/perf/perf.c b/tools/perf/perf.c
index e0279babe0c0..2f19e03c5c40 100644
--- a/tools/perf/perf.c
+++ b/tools/perf/perf.c
@@ -467,15 +467,21 @@ int main(int argc, const char **argv)
* - cannot execute it externally (since it would just do
* the same thing over again)
*
- * So we just directly call the internal command handler, and
- * die if that one cannot handle it.
+ * So we just directly call the internal command handler. If that one
+ * fails to handle this, then maybe we just run a renamed perf binary
+ * that contains a dash in its name. To handle this scenario, we just
+ * fall through and ignore the "xxxx" part of the command string.
*/
if (strstarts(cmd, "perf-")) {
cmd += 5;
argv[0] = cmd;
handle_internal_command(argc, argv);
- fprintf(stderr, "cannot handle %s internally", cmd);
- goto out;
+ /*
+ * If the command is handled, the above function does not
+ * return undo changes and fall through in such a case.
+ */
+ cmd -= 5;
+ argv[0] = cmd;
}
if (strstarts(cmd, "trace")) {
#ifdef HAVE_LIBAUDIT_SUPPORT
diff --git a/tools/perf/tests/dwarf-unwind.c b/tools/perf/tests/dwarf-unwind.c
index 2a7b9b47bbcb..9ba1d216a89f 100644
--- a/tools/perf/tests/dwarf-unwind.c
+++ b/tools/perf/tests/dwarf-unwind.c
@@ -6,7 +6,7 @@
#include "debug.h"
#include "machine.h"
#include "event.h"
-#include "unwind.h"
+#include "../util/unwind.h"
#include "perf_regs.h"
#include "map.h"
#include "thread.h"
diff --git a/tools/perf/ui/progress.c b/tools/perf/ui/progress.c
index a0f24c7115c5..ae91c8148edf 100644
--- a/tools/perf/ui/progress.c
+++ b/tools/perf/ui/progress.c
@@ -1,3 +1,4 @@
+#include <linux/kernel.h>
#include "../cache.h"
#include "progress.h"
@@ -14,10 +15,14 @@ struct ui_progress_ops *ui_progress__ops = &null_progress__ops;
void ui_progress__update(struct ui_progress *p, u64 adv)
{
+ u64 last = p->curr;
+
p->curr += adv;
if (p->curr >= p->next) {
- p->next += p->step;
+ u64 nr = DIV_ROUND_UP(p->curr - last, p->step);
+
+ p->next += nr * p->step;
ui_progress__ops->update(p);
}
}
@@ -25,7 +30,7 @@ void ui_progress__update(struct ui_progress *p, u64 adv)
void ui_progress__init(struct ui_progress *p, u64 total, const char *title)
{
p->curr = 0;
- p->next = p->step = total / 16;
+ p->next = p->step = total / 16 ?: 1;
p->total = total;
p->title = title;
diff --git a/tools/perf/util/data.c b/tools/perf/util/data.c
index e84bbc8ec058..263f5a906ba5 100644
--- a/tools/perf/util/data.c
+++ b/tools/perf/util/data.c
@@ -10,6 +10,16 @@
#include "util.h"
#include "debug.h"
+#ifndef O_CLOEXEC
+#ifdef __sparc__
+#define O_CLOEXEC 0x400000
+#elif defined(__alpha__) || defined(__hppa__)
+#define O_CLOEXEC 010000000
+#else
+#define O_CLOEXEC 02000000
+#endif
+#endif
+
static bool check_pipe(struct perf_data_file *file)
{
struct stat st;
@@ -96,7 +106,8 @@ static int open_file_write(struct perf_data_file *file)
if (check_backup(file))
return -1;
- fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC, S_IRUSR|S_IWUSR);
+ fd = open(file->path, O_CREAT|O_RDWR|O_TRUNC|O_CLOEXEC,
+ S_IRUSR|S_IWUSR);
if (fd < 0)
pr_err("failed to open %s : %s\n", file->path,
diff --git a/tools/power/cpupower/Makefile b/tools/power/cpupower/Makefile
index d6e1c02ddcfe..4c5a481a850c 100644
--- a/tools/power/cpupower/Makefile
+++ b/tools/power/cpupower/Makefile
@@ -26,7 +26,7 @@ endif
ifneq ($(OUTPUT),)
# check that the output directory actually exists
-OUTDIR := $(shell cd $(OUTPUT) && /bin/pwd)
+OUTDIR := $(realpath $(OUTPUT))
$(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist))
endif
diff --git a/tools/scripts/Makefile.include b/tools/scripts/Makefile.include
index 1e8b6116ba3c..9dc8f078a83c 100644
--- a/tools/scripts/Makefile.include
+++ b/tools/scripts/Makefile.include
@@ -1,7 +1,7 @@
ifneq ($(O),)
ifeq ($(origin O), command line)
- dummy := $(if $(shell test -d $(O) || echo $(O)),$(error O=$(O) does not exist),)
- ABSOLUTE_O := $(shell cd $(O) ; pwd)
+ ABSOLUTE_O := $(realpath $(O))
+ dummy := $(if $(ABSOLUTE_O),,$(error O=$(O) does not exist))
OUTPUT := $(ABSOLUTE_O)/$(if $(subdir),$(subdir)/)
COMMAND_O := O=$(ABSOLUTE_O)
ifeq ($(objtree),)
@@ -12,7 +12,7 @@ endif
# check that the output directory actually exists
ifneq ($(OUTPUT),)
-OUTDIR := $(shell cd $(OUTPUT) && /bin/pwd)
+OUTDIR := $(realpath $(OUTPUT))
$(if $(OUTDIR),, $(error output directory "$(OUTPUT)" does not exist))
endif
diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c
index 8eb09950258b..26f3250bdcd2 100644
--- a/tools/testing/selftests/bpf/test_verifier.c
+++ b/tools/testing/selftests/bpf/test_verifier.c
@@ -6629,6 +6629,22 @@ static struct bpf_test tests[] = {
.result = REJECT,
.flags = F_NEEDS_EFFICIENT_UNALIGNED_ACCESS,
},
+ {
+ "invalid 64-bit BPF_END",
+ .insns = {
+ BPF_MOV32_IMM(BPF_REG_0, 0),
+ {
+ .code = BPF_ALU64 | BPF_END | BPF_TO_LE,
+ .dst_reg = BPF_REG_0,
+ .src_reg = 0,
+ .off = 0,
+ .imm = 32,
+ },
+ BPF_EXIT_INSN(),
+ },
+ .errstr = "BPF_END uses reserved fields",
+ .result = REJECT,
+ },
};
static int probe_filter_length(const struct bpf_insn *fp)
diff --git a/virt/kvm/async_pf.c b/virt/kvm/async_pf.c
index bb298a200cd3..57bcb27dcf30 100644
--- a/virt/kvm/async_pf.c
+++ b/virt/kvm/async_pf.c
@@ -106,11 +106,7 @@ static void async_pf_execute(struct work_struct *work)
trace_kvm_async_pf_completed(addr, gva);
- /*
- * This memory barrier pairs with prepare_to_wait's set_current_state()
- */
- smp_mb();
- if (swait_active(&vcpu->wq))
+ if (swq_has_sleeper(&vcpu->wq))
swake_up(&vcpu->wq);
mmput(mm);
diff --git a/virt/kvm/eventfd.c b/virt/kvm/eventfd.c
index f2ac53ab8243..c608ab495282 100644
--- a/virt/kvm/eventfd.c
+++ b/virt/kvm/eventfd.c
@@ -565,6 +565,8 @@ kvm_irqfd(struct kvm *kvm, struct kvm_irqfd *args)
{
if (args->flags & ~(KVM_IRQFD_FLAG_DEASSIGN | KVM_IRQFD_FLAG_RESAMPLE))
return -EINVAL;
+ if (args->gsi >= KVM_MAX_IRQ_ROUTES)
+ return -EINVAL;
if (args->flags & KVM_IRQFD_FLAG_DEASSIGN)
return kvm_irqfd_deassign(kvm, args);
diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c
index 6ed1c2021198..9deb5a245b83 100644
--- a/virt/kvm/kvm_main.c
+++ b/virt/kvm/kvm_main.c
@@ -674,6 +674,7 @@ out_err_no_irq_srcu:
out_err_no_srcu:
hardware_disable_all();
out_err_no_disable:
+ refcount_set(&kvm->users_count, 0);
for (i = 0; i < KVM_NR_BUSES; i++)
kfree(kvm_get_bus(kvm, i));
for (i = 0; i < KVM_ADDRESS_SPACE_NUM; i++)
@@ -2186,7 +2187,7 @@ bool kvm_vcpu_wake_up(struct kvm_vcpu *vcpu)
struct swait_queue_head *wqp;
wqp = kvm_arch_vcpu_wq(vcpu);
- if (swait_active(wqp)) {
+ if (swq_has_sleeper(wqp)) {
swake_up(wqp);
++vcpu->stat.halt_wakeup;
return true;